<?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>85478</bug_id>
          
          <creation_ts>2012-05-03 05:18:59 -0700</creation_ts>
          <short_desc>[Qt] Buildfix for newer Qt5</short_desc>
          <delta_ts>2012-05-04 09:52:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt, QtTriaged</keywords>
          <priority>P1</priority>
          <bug_severity>Blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Csaba Osztrogonác">ossy</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hausmann</cc>
    
    <cc>menard</cc>
    
    <cc>ossy</cc>
    
    <cc>pierre.rossi</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zoltan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>615178</commentid>
    <comment_count>0</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-03 05:18:59 -0700</bug_when>
    <thetext>Trunk WebKit doesn&apos;t build with the latest Qt5 hash: 1968c54d4f7c96d2df40c0e2b416125adf217634

/usr/local/Trolltech/Qt5/Qt-5.0.0-r29/include/QtCore/qmetaobject.h:163: error: &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; is private
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_class.cpp:103: error: within this context
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_class.cpp:103: error: passing &apos;const QMetaMethod&apos; as &apos;this&apos; argument of &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; discards qualifiers
ICECC[10908] 05:16:54: Compiled on 10.6.1.14
make[3]: *** [obj/release/bridge/qt/qt_class.o] Error 1
make[3]: *** Waiting for unfinished jobs....
/usr/local/Trolltech/Qt5/Qt-5.0.0-r29/include/QtCore/qmetaobject.h: In member function &apos;virtual void JSC::Bindings::QtInstance::getPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&amp;)&apos;:
/usr/local/Trolltech/Qt5/Qt-5.0.0-r29/include/QtCore/qmetaobject.h:163: error: &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; is private
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_instance.cpp:240: error: within this context
ICECC[10910] 05:16:54: Compiled on 10.6.1.14
make[3]: *** [obj/release/bridge/qt/qt_instance.o] Error 1
/usr/local/Trolltech/Qt5/Qt-5.0.0-r29/include/QtCore/qmetaobject.h: In function &apos;int JSC::Bindings::findMethodIndex(JSC::ExecState*, const QMetaObject*, const QByteArray&amp;, bool, QVarLengthArray&lt;QVariant, 10&gt;&amp;, void**, JSC::JSObject**)&apos;:
/usr/local/Trolltech/Qt5/Qt-5.0.0-r29/include/QtCore/qmetaobject.h:163: error: &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; is private
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1164: error: within this context
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1164: error: passing &apos;const QMetaMethod&apos; as &apos;this&apos; argument of &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; discards qualifiers
/usr/local/Trolltech/Qt5/Qt-5.0.0-r29/include/QtCore/qmetaobject.h:163: error: &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; is private
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1167: error: within this context
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1167: error: passing &apos;const QMetaMethod&apos; as &apos;this&apos; argument of &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; discards qualifiers
/usr/local/Trolltech/Qt5/Qt-5.0.0-r29/include/QtCore/qmetaobject.h:163: error: &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; is private
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1241: error: within this context
/usr/local/Trolltech/Qt5/Qt-5.0.0-r29/include/QtCore/qmetaobject.h:163: error: &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; is private
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1247: error: within this context
/usr/local/Trolltech/Qt5/Qt-5.0.0-r29/include/QtCore/qmetaobject.h:163: error: &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; is private
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1277: error: within this context
/usr/local/Trolltech/Qt5/Qt-5.0.0-r29/include/QtCore/qmetaobject.h:163: error: &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; is private
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1317: error: within this context
/usr/local/Trolltech/Qt5/Qt-5.0.0-r29/include/QtCore/qmetaobject.h:163: error: &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; is private
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1336: error: within this context
/usr/local/Trolltech/Qt5/Qt-5.0.0-r29/include/QtCore/qmetaobject.h:163: error: &apos;char* QMetaMethod::signature(renamedInQt5_warning_checkTheLifeTime*)&apos; is private
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1357: error: within this context
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp: At global scope:
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1793: error: cannot convert &apos;const char*&apos; to &apos;const QByteArrayData*&apos; in initialization
cc1plus: warnings being treated as errors
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1793: error: missing initializer for member &apos;QMetaObject::&lt;anonymous struct&gt;::relatedMetaObjects&apos;
/home/oszi/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1793: error: missing initializer for member &apos;QMetaObject::&lt;anonymous struct&gt;::extradata&apos;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615275</commentid>
    <comment_count>1</comment_count>
      <attachid>140012</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-03 07:54:21 -0700</bug_when>
    <thetext>Created attachment 140012
WIP buildfix patch

Most of the build fail were caused by renaming QMetaMethod::signature() to methodSignature()
by qtbase - 96f2365cf4cebc074c3171878dcd25ce19ee7486 - QTBUG-24154

The attached patch fixed it, but I&apos;m not sure if it is the proper fix.

After it I got one more problem:
/mnt/raptor1/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1793: error: cannot convert &apos;const char*&apos; to &apos;const QByteArrayData*&apos; in initialization
/mnt/raptor1/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1793: error: missing initializer for member &apos;QMetaObject::&lt;anonymous struct&gt;::relatedMetaObjects&apos;
/mnt/raptor1/WebKit/Source/WebCore/bridge/qt/qt_runtime.cpp:1793: error: missing initializer for member &apos;QMetaObject::&lt;anonymous struct&gt;::extradata&apos;

I don&apos;t know what is it and how can be fixed. Feel free to pick this bug up and fix it.

(Qt5 hash: 1968c54d4f7c96d2df40c0e2b416125adf217634, the previous 6d70a4f5cb1a17d8973fd58f976e68f768d25d09 works without any buildfix.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615279</commentid>
    <comment_count>2</comment_count>
      <attachid>140015</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2012-05-03 08:03:10 -0700</bug_when>
    <thetext>Created attachment 140015
0001-Qt-Don-t-pass-viewport-create-function-to-quick_test.patch

Built against Qt5 1968c54d4f7c96d2df40c0e2b416125adf217634</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615281</commentid>
    <comment_count>3</comment_count>
      <attachid>140016</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2012-05-03 08:03:56 -0700</bug_when>
    <thetext>Created attachment 140016
0002-Qt-Update-Qt-bridge-after-changes-to-QMetaMethod.patch

Sans changelog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>615294</commentid>
    <comment_count>4</comment_count>
      <attachid>140020</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-03 08:21:38 -0700</bug_when>
    <thetext>Created attachment 140020
one more renaming thing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616195</commentid>
    <comment_count>5</comment_count>
      <attachid>140221</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-04 07:34:31 -0700</bug_when>
    <thetext>Created attachment 140221
buildfix 3/1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616196</commentid>
    <comment_count>6</comment_count>
      <attachid>140222</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-04 07:34:53 -0700</bug_when>
    <thetext>Created attachment 140222
buildfix 3/2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616197</commentid>
    <comment_count>7</comment_count>
      <attachid>140223</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-04 07:35:14 -0700</bug_when>
    <thetext>Created attachment 140223
buildfix 3/3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616199</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-04 07:39:08 -0700</bug_when>
    <thetext>Attachment 140223 did not pass style-queue:

Source/WebCore/bridge/qt/qt_runtime.cpp:1785:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/bridge/qt/qt_runtime.cpp:1792:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/bridge/qt/qt_runtime.cpp:1793:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/bridge/qt/qt_runtime.cpp:1795:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bridge/qt/qt_runtime.cpp:1798:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bridge/qt/qt_runtime.cpp:1808:  Declaration has space between type name and * in QtConnectionObject *_t  [whitespace/declaration] [3]
Source/WebCore/bridge/qt/qt_runtime.cpp:1811:  Semicolon defining empty statement. Use { } instead.  [whitespace/semicolon] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:30:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:33:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:55:  Alphabetical sorting problem.  [build/include_order] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:72:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:73:  Should have a space between // and comment  [whitespace/comments] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:76:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:78:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:78:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:79:  Missing space before {  [whitespace/braces] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:79:  Missing space inside { }.  [whitespace/braces] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:147:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:158:  Declaration has space between type name and * in JSObject *object  [whitespace/declaration] [3]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:159:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:159:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:236:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:235:  Missing space before ( in switch(  [whitespace/parens] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:288:  A case label should not be indented, but line up with its switch statement.  [whitespace/indent] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:342:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:363:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:437:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:599:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:623:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:626:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:633:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:647:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:650:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:656:  Should have only a single space after a punctuation in a comment.  [whitespace/comments] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:660:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:666:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:665:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:772:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:775:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:818:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:819:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:820:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:821:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:831:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:832:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:833:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:834:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:835:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:836:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:837:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:838:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:839:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:857:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:858:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:862:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:935:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:967:  Missing space after ,  [whitespace/comma] [3]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1020:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1057:  More than one command on the same line  [whitespace/newline] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1089:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1097:  This { should be at the end of the previous line  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1114:  Missing spaces around =  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1132:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1184:  Missing space before ( in foreach(  [whitespace/parens] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1193:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1198:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1219:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1222:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1281:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1280:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1289:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1297:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1302:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1308:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1371:  Missing spaces around =  [whitespace/operators] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1433:  Declaration has space between type name and * in QObject *obj  [whitespace/declaration] [3]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1436:  Declaration has space between type name and * in void *qargs  [whitespace/declaration] [3]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1452:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1467:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1592:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1602:  Declaration has spFailed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
ace between type name and * in JSObject *asObj  [whitespace/declaration] [3]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1619:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1620:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1627:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1633:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1656:  An else should appear on the same line as the preceding }  [whitespace/newline] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1649:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1669:  Missing space before ( in foreach(  [whitespace/parens] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1696:  One line control clauses should not use braces.  [whitespace/braces] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1772:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1773:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1774:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1780:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1783:  One space before end of line comments  [whitespace/comments] [5]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1800:  Declaration has space between type name and * in void *QtConnectionObject  [whitespace/declaration] [3]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1802:  More than one command on the same line in if  [whitespace/parens] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1809:  _c is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1809:  _id is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1894:  Extra space before ( in function call  [whitespace/parens] [4]
Source/WebCore/bridge/qt/qt_runtime_qt4.cpp:1913:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 100 in 9 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616200</commentid>
    <comment_count>9</comment_count>
      <attachid>140221</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-04 07:39:20 -0700</bug_when>
    <thetext>Comment on attachment 140221
buildfix 3/1

Attachment 140221 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12543316</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616201</commentid>
    <comment_count>10</comment_count>
      <attachid>140222</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-04 07:41:45 -0700</bug_when>
    <thetext>Comment on attachment 140222
buildfix 3/2

Attachment 140222 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12531170</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616206</commentid>
    <comment_count>11</comment_count>
      <attachid>140223</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-05-04 07:45:09 -0700</bug_when>
    <thetext>Comment on attachment 140223
buildfix 3/3

Attachment 140223 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/12630146</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616211</commentid>
    <comment_count>12</comment_count>
      <attachid>140221</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-04 07:48:57 -0700</bug_when>
    <thetext>Comment on attachment 140221
buildfix 3/1

Clearing flags on attachment: 140221

Committed r116100: &lt;http://trac.webkit.org/changeset/116100&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616212</commentid>
    <comment_count>13</comment_count>
      <attachid>140222</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-04 07:50:06 -0700</bug_when>
    <thetext>Comment on attachment 140222
buildfix 3/2

Clearing flags on attachment: 140222

Committed r116101: &lt;http://trac.webkit.org/changeset/116101&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616214</commentid>
    <comment_count>14</comment_count>
      <attachid>140223</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-05-04 07:51:43 -0700</bug_when>
    <thetext>Comment on attachment 140223
buildfix 3/3

Clearing flags on attachment: 140223

Committed r116102: &lt;http://trac.webkit.org/changeset/116102&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140012</attachid>
            <date>2012-05-03 07:54:21 -0700</date>
            <delta_ts>2012-05-03 08:03:56 -0700</delta_ts>
            <desc>WIP buildfix patch</desc>
            <filename>1.patch</filename>
            <type>text/plain</type>
            <size>5109</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3MuY3BwCmluZGV4IGI3YTNkZWEuLjYwYTIxZmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBA
IEpTVmFsdWUgUXRDbGFzczo6ZmFsbGJhY2tPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBJbnN0YW5j
ZSogaW5zdCwgY29uc3QgSWRlbnRpZmllCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICBpbnQgaXRlciA9IDA7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSA9IG0uc2lnbmF0
dXJlKCk7CisgICAgICAgIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSA9IG0ubWV0aG9kU2lnbmF0dXJl
KCk7CiAgICAgICAgIHdoaWxlIChzaWduYXR1cmVbaXRlcl0gJiYgc2lnbmF0dXJlW2l0ZXJdICE9
ICcoJykKICAgICAgICAgICAgICsraXRlcjsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9p
bnN0YW5jZS5jcHAKaW5kZXggNjU0Yzk1My4uN2VhZDZjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcXQvcXRfaW5zdGFuY2UuY3BwCkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCBRdEluc3RhbmNl
OjpnZXRQcm9wZXJ0eU5hbWVzKEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lQXJyYXkmIGFy
cmF5KQogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWV0aG9kQ291bnQ7IGkrKykgewogICAgICAg
ICAgICAgUU1ldGFNZXRob2QgbWV0aG9kID0gbWV0YS0+bWV0aG9kKGkpOwogICAgICAgICAgICAg
aWYgKG1ldGhvZC5hY2Nlc3MoKSAhPSBRTWV0YU1ldGhvZDo6UHJpdmF0ZSkKLSAgICAgICAgICAg
ICAgICBhcnJheS5hZGQoSWRlbnRpZmllcihleGVjLCBtZXRob2Quc2lnbmF0dXJlKCkpKTsKKyAg
ICAgICAgICAgICAgICBhcnJheS5hZGQoSWRlbnRpZmllcihleGVjLCBtZXRob2QubWV0aG9kU2ln
bmF0dXJlKCkpKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9x
dF9ydW50aW1lLmNwcAppbmRleCAxZGVmNjk3Li43NTdhMDE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3F0L3F0X3J1bnRpbWUuY3BwCkBAIC0xMTYxLDEwICsxMTYxLDEwIEBAIHN0YXRpYyBpbnQg
ZmluZE1ldGhvZEluZGV4KEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIC8vIHRyeSBhbmQgZmluZCBhbGwgbWF0Y2hpbmcgbmFtZWQgbWV0aG9kcwotICAg
ICAgICBpZiAobS5zaWduYXR1cmUoKSA9PSBzaWduYXR1cmUpCisgICAgICAgIGlmIChtLm1ldGhv
ZFNpZ25hdHVyZSgpID09IHNpZ25hdHVyZSkKICAgICAgICAgICAgIG1hdGNoaW5nSW5kaWNlcy5h
cHBlbmQoaSk7CiAgICAgICAgIGVsc2UgaWYgKG92ZXJsb2FkcykgewotICAgICAgICAgICAgUUJ5
dGVBcnJheSByYXdzaWduYXR1cmUgPSBtLnNpZ25hdHVyZSgpOworICAgICAgICAgICAgUUJ5dGVB
cnJheSByYXdzaWduYXR1cmUgPSBtLm1ldGhvZFNpZ25hdHVyZSgpOwogICAgICAgICAgICAgcmF3
c2lnbmF0dXJlLnRydW5jYXRlKHJhd3NpZ25hdHVyZS5pbmRleE9mKCcoJykpOwogICAgICAgICAg
ICAgaWYgKHJhd3NpZ25hdHVyZSA9PSBzaWduYXR1cmUpCiAgICAgICAgICAgICAgICAgbWF0Y2hp
bmdJbmRpY2VzLmFwcGVuZChpKTsKQEAgLTEyMzgsMTMgKzEyMzgsMTMgQEAgc3RhdGljIGludCBm
aW5kTWV0aG9kSW5kZXgoRXhlY1N0YXRlKiBleGVjLAogCiAgICAgICAgIC8vIElmIHRoZSBuYXRp
dmUgbWV0aG9kIHJlcXVpcmVzIG1vcmUgYXJndW1lbnRzIHRoYW4gd2hhdCB3YXMgcGFzc2VkIGZy
b20gSmF2YVNjcmlwdAogICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICsgMSA8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlcy5jb3VudCgpKSkgewotICAgICAgICAgICAgcU1hdGNo
RGVidWcoKSA8PCAiTWF0Y2g6dG9vIGZldyBhcmdzIGZvciIgPDwgbWV0aG9kLnNpZ25hdHVyZSgp
OworICAgICAgICAgICAgcU1hdGNoRGVidWcoKSA8PCAiTWF0Y2g6dG9vIGZldyBhcmdzIGZvciIg
PDwgbWV0aG9kLm1ldGhvZFNpZ25hdHVyZSgpOwogICAgICAgICAgICAgdG9vRmV3QXJncy5hcHBl
bmQoaW5kZXgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAodW5yZXNvbHZlZFR5cGVzKSB7Ci0gICAgICAgICAgICBxTWF0Y2hEZWJ1ZygpIDw8ICJNYXRj
aDp1bnJlc29sdmVkIGFyZyB0eXBlcyBmb3IiIDw8IG1ldGhvZC5zaWduYXR1cmUoKTsKKyAgICAg
ICAgICAgIHFNYXRjaERlYnVnKCkgPDwgIk1hdGNoOnVucmVzb2x2ZWQgYXJnIHR5cGVzIGZvciIg
PDwgbWV0aG9kLm1ldGhvZFNpZ25hdHVyZSgpOwogICAgICAgICAgICAgLy8gcmVtZW1iZXIgaXQg
c28gd2UgY2FuIGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBsYXRlciwgaWYgbmVjZXNzYXJ5CiAgICAg
ICAgICAgICB1bnJlc29sdmVkLmFwcGVuZChRdE1ldGhvZE1hdGNoRGF0YSgvKm1hdGNoRGlzdGFu
Y2U9Ki9JTlRfTUFYLCBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVzLCBRVmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQsIDEwPigpKSk7
CkBAIC0xMjc0LDcgKzEyNzQsNyBAQCBzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3Rh
dGUqIGV4ZWMsCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBxTWF0Y2hEZWJ1
ZygpIDw8ICJNYXRjaDogIiA8PCBtZXRob2Quc2lnbmF0dXJlKCkgPDwgKGNvbnZlcnRlZCA/ICJj
b252ZXJ0ZWQiOiJmYWlsZWQgdG8gY29udmVydCIpIDw8ICJkaXN0YW5jZSAiIDw8IG1hdGNoRGlz
dGFuY2U7CisgICAgICAgIHFNYXRjaERlYnVnKCkgPDwgIk1hdGNoOiAiIDw8IG1ldGhvZC5tZXRo
b2RTaWduYXR1cmUoKSA8PCAoY29udmVydGVkID8gImNvbnZlcnRlZCI6ImZhaWxlZCB0byBjb252
ZXJ0IikgPDwgImRpc3RhbmNlICIgPDwgbWF0Y2hEaXN0YW5jZTsKIAogICAgICAgICBpZiAoY29u
dmVydGVkKSB7CiAgICAgICAgICAgICBpZiAoKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSArIDEgPT0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGVzLmNvdW50KCkpKQpAQCAtMTMxNCw3ICsxMzE0LDcg
QEAgc3RhdGljIGludCBmaW5kTWV0aG9kSW5kZXgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICAg
ICAgICAgIGlmIChpID4gMCkKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRTGF0aW4x
U3RyaW5nKCJcbiIpOwogICAgICAgICAgICAgICAgIFFNZXRhTWV0aG9kIG10ZCA9IG1ldGEtPm1l
dGhvZChjb252ZXJzaW9uRmFpbGVkLmF0KGkpKTsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9
IFFTdHJpbmc6OmZyb21MYXRpbjEoIiAgICAlMCIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKG10
ZC5zaWduYXR1cmUoKSkpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gUVN0cmluZzo6ZnJv
bUxhdGluMSgiICAgICUwIikuYXJnKFFTdHJpbmc6OmZyb21MYXRpbjEobXRkLm1ldGhvZFNpZ25h
dHVyZSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAqcEVycm9yID0gdGhyb3dFcnJv
cihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZS50b0xhdGluMSgpLmNvbnN0RGF0
YSgpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXVucmVzb2x2ZWQuaXNFbXB0eSgpKSB7CkBAIC0x
MzMzLDcgKzEzMzMsNyBAQCBzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4
ZWMsCiAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKQogICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlICs9IFFMYXRpbjFTdHJpbmcoIlxuIik7CiAgICAgICAgICAgICAgICAgUU1ldGFNZXRob2Qg
bXRkID0gbWV0YS0+bWV0aG9kKHRvb0Zld0FyZ3MuYXQoaSkpOwotICAgICAgICAgICAgICAgIG1l
c3NhZ2UgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiICAgICUwIikuYXJnKFFTdHJpbmc6OmZyb21M
YXRpbjEobXRkLnNpZ25hdHVyZSgpKSk7CisgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRU3Ry
aW5nOjpmcm9tTGF0aW4xKCIgICAgJTAiKS5hcmcoUVN0cmluZzo6ZnJvbUxhdGluMShtdGQubWV0
aG9kU2lnbmF0dXJlKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICpwRXJyb3IgPSB0
aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIG1lc3NhZ2UudG9MYXRpbjEo
KS5jb25zdERhdGEoKSkpOwogICAgICAgICB9CkBAIC0xMzU0LDcgKzEzNTQsNyBAQCBzdGF0aWMg
aW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICAgICAgICAg
IGlmIChpID4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gUUxhdGluMVN0
cmluZygiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgUU1ldGFNZXRob2QgbXRkID0gbWV0YS0+
bWV0aG9kKGNhbmRpZGF0ZXMuYXQoaSkuaW5kZXgpOwotICAgICAgICAgICAgICAgICAgICBtZXNz
YWdlICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIiAgICAlMCIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0
aW4xKG10ZC5zaWduYXR1cmUoKSkpOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IFFT
dHJpbmc6OmZyb21MYXRpbjEoIiAgICAlMCIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKG10ZC5t
ZXRob2RTaWduYXR1cmUoKSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICpwRXJyb3IgPSB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCBtZXNzYWdlLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140015</attachid>
            <date>2012-05-03 08:03:10 -0700</date>
            <delta_ts>2012-05-04 07:28:18 -0700</delta_ts>
            <desc>0001-Qt-Don-t-pass-viewport-create-function-to-quick_test.patch</desc>
            <filename>0001-Qt-Don-t-pass-viewport-create-function-to-quick_test.patch</filename>
            <type>text/plain</type>
            <size>1043</size>
            <attacher name="Tor Arne Vestbø">vestbo</attacher>
            
              <data encoding="base64">RnJvbSAxNjVmZmQ5NmY0NjZkNmVkYTAwNmVmZWIyZTM0MjFiZWY4MWVmOTlhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/VG9yPTIwQXJuZT0yMFZlc3RiPUMzPUI4Pz0g
PHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CkRhdGU6IFRodSwgMyBNYXkgMjAxMiAxNjo1ODow
MyArMDIwMApTdWJqZWN0OiBbUEFUQ0ggMS8yXSBbUXRdIERvbid0IHBhc3Mgdmlld3BvcnQtY3Jl
YXRlIGZ1bmN0aW9uIHRvCiBxdWlja190ZXN0X21haW4KCi0tLQogU291cmNlL1dlYktpdDIvVUlQ
cm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy90c3RfcW1sdGVzdHMuY3BwIHwgICAgMiArLQog
MSBmaWxlIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy90c3RfcW1s
dGVzdHMuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0
cy90c3RfcW1sdGVzdHMuY3BwCmluZGV4IDc4MmIwNDEuLmFiNTc1NTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvdHN0X3FtbHRlc3Rz
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3Rz
L3RzdF9xbWx0ZXN0cy5jcHAKQEAgLTQ4LDUgKzQ4LDUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQogI2lmZGVmIERJU0FCTEVfRkxJQ0tBQkxFX1ZJRVdQT1JUCiAgICAgUVF1aWNr
V2ViVmlld0V4cGVyaW1lbnRhbDo6c2V0RmxpY2thYmxlVmlld3BvcnRFbmFibGVkKGZhbHNlKTsK
ICNlbmRpZgotICAgIHJldHVybiBxdWlja190ZXN0X21haW4oYXJnYywgYXJndiwgInFtbHRlc3Rz
IiwgMCwgUVVJQ0tfVEVTVF9TT1VSQ0VfRElSKTsKKyAgICByZXR1cm4gcXVpY2tfdGVzdF9tYWlu
KGFyZ2MsIGFyZ3YsICJxbWx0ZXN0cyIsIFFVSUNLX1RFU1RfU09VUkNFX0RJUik7CiB9Ci0tIAox
LjcuMTAuMjgwLmdhYTM5Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140016</attachid>
            <date>2012-05-03 08:03:56 -0700</date>
            <delta_ts>2012-05-04 07:28:28 -0700</delta_ts>
            <desc>0002-Qt-Update-Qt-bridge-after-changes-to-QMetaMethod.patch</desc>
            <filename>0002-Qt-Update-Qt-bridge-after-changes-to-QMetaMethod.patch</filename>
            <type>text/plain</type>
            <size>95969</size>
            <attacher name="Tor Arne Vestbø">vestbo</attacher>
            
              <data encoding="base64">RnJvbSBjOGFhYzM3NDIwMGQyMDdjY2FkNzY2NjM0YTRhZDM2MmJiZWE4OGY0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBLZW50IEhhbnNlbiA8a2VudC5oYW5zZW5Abm9raWEuY29tPgpE
YXRlOiBUaHUsIDMgTWF5IDIwMTIgMTc6MDA6MDUgKzAyMDAKU3ViamVjdDogW1BBVENIIDIvMl0g
W1F0XSBVcGRhdGUgUXQgYnJpZGdlIGFmdGVyIGNoYW5nZXMgdG8gUU1ldGFNZXRob2QKClFNZXRh
TWV0aG9kOjpzaWduYXR1cmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIG1ldGhvZFNpZ25hdHVyZSgp
IGFuZApyZXR1cm5zIGEgUUJ5dGVBcnJheS4KClRoZSBuZXcgZnVuY3Rpb24gUU1ldGFNZXRob2Q6
Om5hbWUoKSBnaXZlcyBkaXJlY3QgYWNjZXNzIHRvIGEKbWV0aG9kJ3MgbmFtZS4gcmV0dXJuVHlw
ZSgpLCBwYXJhbWV0ZXJDb3VudCgpLCBhbmQgcGFyYW1ldGVyVHlwZSgpCmdpdmUgZGlyZWN0IGFj
Y2VzcyB0byB0eXBlIGluZm9ybWF0aW9uLgoKUG9ydGVkIHRoZSBjdXN0b20gUXRDb25uZWN0aW9u
T2JqZWN0IG1ldGEtb2JqZWN0IHRvIHJldmlzaW9uIDc7CnJldmlzaW9uIDYgYW5kIGJlbG93IGFy
ZW4ndCBzdXBwb3J0ZWQgKGFuZCBkb24ndCBjb21waWxlKSB3aXRoIFF0NS4KLS0tCiBTb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDcgKy0KIFNv
dXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9jbGFzcy5jcHAgICAgICAgICAgICAgIHwgICAgNCAr
CiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwICAgICAgICAgICB8ICAg
MjUgKy0KIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcCAgICAgICAgICAg
IHwgIDEyOSArLQogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaCAgICAgICAg
ICAgICAgfCAgICA1ICsKIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lX3F0NC5j
cHAgICAgICAgIHwgMTkyOSArKysrKysrKysrKysrKysrKysrKwogLi4uL0FQSS9xdC90ZXN0cy9w
dWJsaWNhcGkvdHN0X3B1YmxpY2FwaS5jcHAgICAgICAgfCAgICA0ICsKIDcgZmlsZXMgY2hhbmdl
ZCwgMjA0OCBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0
NCBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZV9xdDQuY3BwCgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkK
aW5kZXggZWNiMTk2My4uMjU2NjAwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCkBAIC0zOTYsMTIgKzM5NiwxNyBA
QCB2OCB7CiAgICAgICAgIGJyaWRnZS9xdC9xdF9jbGFzcy5jcHAgXAogICAgICAgICBicmlkZ2Uv
cXQvcXRfaW5zdGFuY2UuY3BwIFwKICAgICAgICAgYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUu
Y3BwIFwKLSAgICAgICAgYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwIFwKICAgICAgICAgYnJpZGdl
L3J1bnRpbWVfYXJyYXkuY3BwIFwKICAgICAgICAgYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcCBc
CiAgICAgICAgIGJyaWRnZS9ydW50aW1lX29iamVjdC5jcHAgXAogICAgICAgICBicmlkZ2UvcnVu
dGltZV9yb290LmNwcCBcCiAgICAgICAgIHRlc3RpbmcvanMvV2ViQ29yZVRlc3RTdXBwb3J0LmNw
cAorCisgICAgaGF2ZVF0KDUpIHsKKyAgICAgICAgU09VUkNFUyArPSBicmlkZ2UvcXQvcXRfcnVu
dGltZS5jcHAKKyAgICB9IGVsc2UgeworICAgICAgICBTT1VSQ0VTICs9IGJyaWRnZS9xdC9xdF9y
dW50aW1lX3F0NC5jcHAKKyAgICB9CiB9CiAKIFNPVVJDRVMgKz0gXApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRn
ZS9xdC9xdF9jbGFzcy5jcHAKaW5kZXggYjdhM2RlYS4uMmVkN2EwOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2NsYXNzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcXQvcXRfY2xhc3MuY3BwCkBAIC05OSwxMiArOTksMTYgQEAgSlNWYWx1ZSBRdENsYXNz
OjpmYWxsYmFja09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEluc3RhbmNlKiBpbnN0LCBjb25zdCBJ
ZGVudGlmaWUKICAgICAgICAgaWYgKG0uYWNjZXNzKCkgPT0gUU1ldGFNZXRob2Q6OlByaXZhdGUp
CiAgICAgICAgICAgICBjb250aW51ZTsKIAorI2lmIFFUX1ZFUlNJT04gPCBRVF9WRVJTSU9OX0NI
RUNLKDUsIDAsIDApCiAgICAgICAgIGludCBpdGVyID0gMDsKICAgICAgICAgY29uc3QgY2hhciog
c2lnbmF0dXJlID0gbS5zaWduYXR1cmUoKTsKICAgICAgICAgd2hpbGUgKHNpZ25hdHVyZVtpdGVy
XSAmJiBzaWduYXR1cmVbaXRlcl0gIT0gJygnKQogICAgICAgICAgICAgKytpdGVyOwogCiAgICAg
ICAgIGlmIChub3JtYWwgPT0gUUJ5dGVBcnJheTo6ZnJvbVJhd0RhdGEoc2lnbmF0dXJlLCBpdGVy
KSkgeworI2Vsc2UKKyAgICAgICAgaWYgKG5vcm1hbCA9PSBtLm5hbWUoKSkgeworI2VuZGlmCiAg
ICAgICAgICAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB2YWwgPSBRdFJ1bnRpbWVNZXRhTWV0aG9k
OjpjcmVhdGUoZXhlYywgaWRlbnRpZmllciwgc3RhdGljX2Nhc3Q8UXRJbnN0YW5jZSo+KGluc3Qp
LCBpbmRleCwgbm9ybWFsLCBmYWxzZSk7CiAgICAgICAgICAgICBxdGluc3QtPm1fbWV0aG9kcy5p
bnNlcnQobmFtZSwgV3JpdGVCYXJyaWVyPEpTT2JqZWN0PihleGVjLT5nbG9iYWxEYXRhKCksIHF0
aW5zdC0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKSwgdmFsKSk7CiAgICAgICAgICAgICByZXR1
cm4gdmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKaW5kZXggNjU0
Yzk1My4uY2VkMDAyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2lu
c3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3Bw
CkBAIC0yMzYsOCArMjM2LDE0IEBAIHZvaWQgUXRJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyhF
eGVjU3RhdGUqIGV4ZWMsIFByb3BlcnR5TmFtZUFycmF5JiBhcnJheSkKICAgICAgICAgY29uc3Qg
aW50IG1ldGhvZENvdW50ID0gbWV0YS0+bWV0aG9kQ291bnQoKTsKICAgICAgICAgZm9yIChpID0g
MDsgaSA8IG1ldGhvZENvdW50OyBpKyspIHsKICAgICAgICAgICAgIFFNZXRhTWV0aG9kIG1ldGhv
ZCA9IG1ldGEtPm1ldGhvZChpKTsKLSAgICAgICAgICAgIGlmIChtZXRob2QuYWNjZXNzKCkgIT0g
UU1ldGFNZXRob2Q6OlByaXZhdGUpCisgICAgICAgICAgICBpZiAobWV0aG9kLmFjY2VzcygpICE9
IFFNZXRhTWV0aG9kOjpQcml2YXRlKSB7CisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NI
RUNLKDUsIDAsIDApCisgICAgICAgICAgICAgICAgUVN0cmluZyBzaWcgPSBRU3RyaW5nOjpmcm9t
TGF0aW4xKG1ldGhvZC5tZXRob2RTaWduYXR1cmUoKSk7CisgICAgICAgICAgICAgICAgYXJyYXku
YWRkKElkZW50aWZpZXIoZXhlYywgVVN0cmluZyhzaWcudXRmMTYoKSwgc2lnLmxlbmd0aCgpKSkp
OworI2Vsc2UKICAgICAgICAgICAgICAgICBhcnJheS5hZGQoSWRlbnRpZmllcihleGVjLCBtZXRo
b2Quc2lnbmF0dXJlKCkpKTsKKyNlbmRpZgorICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
fQogfQpAQCAtMjgzLDYgKzI4OSwxOCBAQCBKU1ZhbHVlIFF0SW5zdGFuY2U6OnN0cmluZ1ZhbHVl
KEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBob3cg
bXVjaCB3ZSBjYW4gY2FsbCBpdAogICAgICAgICAgICAgaWYgKG0uYWNjZXNzKCkgIT0gUU1ldGFN
ZXRob2Q6OlByaXZhdGUKICAgICAgICAgICAgICAgICAmJiBtLm1ldGhvZFR5cGUoKSAhPSBRTWV0
YU1ldGhvZDo6U2lnbmFsCisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDUsIDAs
IDApCisgICAgICAgICAgICAgICAgJiYgbS5wYXJhbWV0ZXJDb3VudCgpID09IDAKKyAgICAgICAg
ICAgICAgICAmJiBtLnJldHVyblR5cGUoKSAhPSBRTWV0YVR5cGU6OlZvaWQpIHsKKyAgICAgICAg
ICAgICAgICBRVmFyaWFudCByZXQobS5yZXR1cm5UeXBlKCksICh2b2lkKikwKTsKKyAgICAgICAg
ICAgICAgICB2b2lkICogcWFyZ3NbMV07CisgICAgICAgICAgICAgICAgcWFyZ3NbMF0gPSByZXQu
ZGF0YSgpOworCisgICAgICAgICAgICAgICAgaWYgKFFNZXRhT2JqZWN0OjptZXRhY2FsbChvYmos
IFFNZXRhT2JqZWN0OjpJbnZva2VNZXRhTWV0aG9kLCBpbmRleCwgcWFyZ3MpIDwgMCkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAocmV0LmlzVmFsaWQoKSAmJiByZXQuY2FuQ29udmVydChRVmFy
aWFudDo6U3RyaW5nKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmID0gcmV0LnRvU3Ry
aW5nKCkudG9MYXRpbjEoKS5jb25zdERhdGEoKTsgLy8gIyMjIExhdGluIDE/IEFzY2lpPworICAg
ICAgICAgICAgICAgICAgICAgICAgdXNlRGVmYXVsdCA9IGZhbHNlOworI2Vsc2UKICAgICAgICAg
ICAgICAgICAmJiBtLnBhcmFtZXRlclR5cGVzKCkuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciogcmV0c2lnID0gbS50eXBlTmFtZSgpOwogICAgICAgICAgICAgICAgIGlm
IChyZXRzaWcgJiYgKnJldHNpZykgewpAQCAtMjk1LDYgKzMxMyw3IEBAIEpTVmFsdWUgUXRJbnN0
YW5jZTo6c3RyaW5nVmFsdWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJ1ZiA9IHJldC50b1N0cmluZygpLnRvTGF0aW4xKCkuY29uc3REYXRhKCk7
IC8vICMjIyBMYXRpbiAxPyBBc2NpaT8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VE
ZWZhdWx0ID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisjZW5kaWYKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTM4
NCw3ICs0MDMsMTEgQEAgdm9pZCBRdEZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJbnN0YW5jZSogaW5zdCwgSlNWYWx1ZQogICAgIGlmIChvYmopIHsKICAg
ICAgICAgUU1ldGFUeXBlOjpUeXBlIGFyZ3R5cGUgPSBRTWV0YVR5cGU6OlZvaWQ7CiAgICAgICAg
IGlmIChtX3R5cGUgPT0gTWV0YVByb3BlcnR5KQorI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lP
Tl9DSEVDSyg1LCAwLCAwKQorICAgICAgICAgICAgYXJndHlwZSA9IChRTWV0YVR5cGU6OlR5cGUp
IG1fcHJvcGVydHkudXNlclR5cGUoKTsKKyNlbHNlCiAgICAgICAgICAgICBhcmd0eXBlID0gKFFN
ZXRhVHlwZTo6VHlwZSkgUU1ldGFUeXBlOjp0eXBlKG1fcHJvcGVydHkudHlwZU5hbWUoKSk7Cisj
ZW5kaWYKIAogICAgICAgICAvLyBkeW5hbWljIHByb3BlcnRpZXMganVzdCBnZXQgYW55IFFWYXJp
YW50CiAgICAgICAgIFFWYXJpYW50IHZhbCA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywg
YVZhbHVlLCBhcmd0eXBlLCAwKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9x
dC9xdF9ydW50aW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNw
cAppbmRleCAxZGVmNjk3Li5kYTg3NWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9icmlk
Z2UvcXQvcXRfcnVudGltZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1
bnRpbWUuY3BwCkBAIC0xMTYxLDE0ICsxMTYxLDEwIEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZElu
ZGV4KEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIC8v
IHRyeSBhbmQgZmluZCBhbGwgbWF0Y2hpbmcgbmFtZWQgbWV0aG9kcwotICAgICAgICBpZiAobS5z
aWduYXR1cmUoKSA9PSBzaWduYXR1cmUpCisgICAgICAgIGlmICghb3ZlcmxvYWRzICYmIG0ubWV0
aG9kU2lnbmF0dXJlKCkgPT0gc2lnbmF0dXJlKQorICAgICAgICAgICAgbWF0Y2hpbmdJbmRpY2Vz
LmFwcGVuZChpKTsKKyAgICAgICAgZWxzZSBpZiAob3ZlcmxvYWRzICYmIG0ubmFtZSgpID09IHNp
Z25hdHVyZSkKICAgICAgICAgICAgIG1hdGNoaW5nSW5kaWNlcy5hcHBlbmQoaSk7Ci0gICAgICAg
IGVsc2UgaWYgKG92ZXJsb2FkcykgewotICAgICAgICAgICAgUUJ5dGVBcnJheSByYXdzaWduYXR1
cmUgPSBtLnNpZ25hdHVyZSgpOwotICAgICAgICAgICAgcmF3c2lnbmF0dXJlLnRydW5jYXRlKHJh
d3NpZ25hdHVyZS5pbmRleE9mKCcoJykpOwotICAgICAgICAgICAgaWYgKHJhd3NpZ25hdHVyZSA9
PSBzaWduYXR1cmUpCi0gICAgICAgICAgICAgICAgbWF0Y2hpbmdJbmRpY2VzLmFwcGVuZChpKTsK
LSAgICAgICAgfQogICAgIH0KIAogICAgIGludCBjaG9zZW5JbmRleCA9IC0xOwpAQCAtMTE4OSwx
MSArMTE4NSw5IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEV4ZWNTdGF0ZSogZXhlYywK
IAogICAgICAgICAvLyByZXNvbHZlIHJldHVybiB0eXBlCiAgICAgICAgIFFCeXRlQXJyYXkgcmV0
dXJuVHlwZU5hbWUgPSBtZXRob2QudHlwZU5hbWUoKTsKLSAgICAgICAgaW50IHJ0eXBlID0gUU1l
dGFUeXBlOjp0eXBlKHJldHVyblR5cGVOYW1lKTsKLSAgICAgICAgaWYgKChydHlwZSA9PSAwKSAm
JiAhcmV0dXJuVHlwZU5hbWUuaXNFbXB0eSgpKSB7Ci0gICAgICAgICAgICBpZiAocmV0dXJuVHlw
ZU5hbWUgPT0gIlFWYXJpYW50IikgewotICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1l
dGhvZE1hdGNoVHlwZTo6dmFyaWFudCgpKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dXJu
VHlwZU5hbWUuZW5kc1dpdGgoJyonKSkgeworICAgICAgICBpbnQgcnR5cGUgPSBtZXRob2QucmV0
dXJuVHlwZSgpOworICAgICAgICBpZiAocnR5cGUgPT0gUU1ldGFUeXBlOjpVbmtub3duVHlwZSkg
eworICAgICAgICAgICAgaWYgKHJldHVyblR5cGVOYW1lLmVuZHNXaXRoKCcqJykpIHsKICAgICAg
ICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6Om1ldGFUeXBlKFFNZXRh
VHlwZTo6Vm9pZFN0YXIsIHJldHVyblR5cGVOYW1lKSk7CiAgICAgICAgICAgICB9IGVsc2Ugewog
ICAgICAgICAgICAgICAgIGludCBlbnVtSW5kZXggPSBpbmRleE9mTWV0YUVudW0obWV0YSwgcmV0
dXJuVHlwZU5hbWUpOwpAQCAtMTIwNSw3ICsxMTk5LDcgQEAgc3RhdGljIGludCBmaW5kTWV0aG9k
SW5kZXgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChyZXR1cm5UeXBlTmFtZSA9PSAiUVZh
cmlhbnQiKQorICAgICAgICAgICAgaWYgKHJ0eXBlID09IFFNZXRhVHlwZTo6UVZhcmlhbnQpCiAg
ICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjp2YXJpYW50KCkp
OwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhv
ZE1hdGNoVHlwZTo6bWV0YVR5cGUocnR5cGUsIHJldHVyblR5cGVOYW1lKSk7CkBAIC0xMjE1LDIx
ICsxMjA5LDE3IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEV4ZWNTdGF0ZSogZXhlYywK
ICAgICAgICAgUUxpc3Q8UUJ5dGVBcnJheT4gcGFyYW1ldGVyVHlwZU5hbWVzID0gbWV0aG9kLnBh
cmFtZXRlclR5cGVzKCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1ldGVyVHlw
ZU5hbWVzLmNvdW50KCk7ICsraSkgewogICAgICAgICAgICAgUUJ5dGVBcnJheSBhcmdUeXBlTmFt
ZSA9IHBhcmFtZXRlclR5cGVOYW1lcy5hdChpKTsKLSAgICAgICAgICAgIGludCBhdHlwZSA9IFFN
ZXRhVHlwZTo6dHlwZShhcmdUeXBlTmFtZSk7Ci0gICAgICAgICAgICBpZiAoYXR5cGUgPT0gMCkg
ewotICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlTmFtZSA9PSAiUVZhcmlhbnQiKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6dmFyaWFudCgp
KTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpbnQgZW51
bUluZGV4ID0gaW5kZXhPZk1ldGFFbnVtKG1ldGEsIGFyZ1R5cGVOYW1lKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGVudW1JbmRleCAhPSAtMSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHR5
cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6bWV0YUVudW0oZW51bUluZGV4LCBhcmdUeXBl
TmFtZSkpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHVucmVzb2x2ZWRUeXBlcyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0eXBl
cy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6OnVucmVzb2x2ZWQoYXJnVHlwZU5hbWUpKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGF0eXBlID0gbWV0aG9kLnBhcmFt
ZXRlclR5cGUoaSk7CisgICAgICAgICAgICBpZiAoYXR5cGUgPT0gUU1ldGFUeXBlOjpVbmtub3du
VHlwZSkgeworICAgICAgICAgICAgICAgIGludCBlbnVtSW5kZXggPSBpbmRleE9mTWV0YUVudW0o
bWV0YSwgYXJnVHlwZU5hbWUpOworICAgICAgICAgICAgICAgIGlmIChlbnVtSW5kZXggIT0gLTEp
CisgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6bWV0
YUVudW0oZW51bUluZGV4LCBhcmdUeXBlTmFtZSkpOworICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICB1bnJlc29sdmVkVHlwZXMgPSB0cnVlOworICAgICAgICAgICAg
ICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6OnVucmVzb2x2ZWQoYXJnVHlw
ZU5hbWUpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGlmIChhcmdUeXBlTmFtZSA9PSAiUVZhcmlhbnQiKQorICAgICAgICAgICAgICAg
IGlmIChhdHlwZSA9PSBRTWV0YVR5cGU6OlFWYXJpYW50KQogICAgICAgICAgICAgICAgICAgICB0
eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6OnZhcmlhbnQoKSk7CiAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5
cGU6Om1ldGFUeXBlKGF0eXBlLCBhcmdUeXBlTmFtZSkpOwpAQCAtMTIzOCwxMyArMTIyOCwxMyBA
QCBzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4ZWMsCiAKICAgICAgICAg
Ly8gSWYgdGhlIG5hdGl2ZSBtZXRob2QgcmVxdWlyZXMgbW9yZSBhcmd1bWVudHMgdGhhbiB3aGF0
IHdhcyBwYXNzZWQgZnJvbSBKYXZhU2NyaXB0CiAgICAgICAgIGlmIChleGVjLT5hcmd1bWVudENv
dW50KCkgKyAxIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5cGVzLmNvdW50KCkpKSB7Ci0gICAg
ICAgICAgICBxTWF0Y2hEZWJ1ZygpIDw8ICJNYXRjaDp0b28gZmV3IGFyZ3MgZm9yIiA8PCBtZXRo
b2Quc2lnbmF0dXJlKCk7CisgICAgICAgICAgICBxTWF0Y2hEZWJ1ZygpIDw8ICJNYXRjaDp0b28g
ZmV3IGFyZ3MgZm9yIiA8PCBtZXRob2QubWV0aG9kU2lnbmF0dXJlKCk7CiAgICAgICAgICAgICB0
b29GZXdBcmdzLmFwcGVuZChpbmRleCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQogCiAgICAgICAgIGlmICh1bnJlc29sdmVkVHlwZXMpIHsKLSAgICAgICAgICAgIHFNYXRjaERl
YnVnKCkgPDwgIk1hdGNoOnVucmVzb2x2ZWQgYXJnIHR5cGVzIGZvciIgPDwgbWV0aG9kLnNpZ25h
dHVyZSgpOworICAgICAgICAgICAgcU1hdGNoRGVidWcoKSA8PCAiTWF0Y2g6dW5yZXNvbHZlZCBh
cmcgdHlwZXMgZm9yIiA8PCBtZXRob2QubWV0aG9kU2lnbmF0dXJlKCk7CiAgICAgICAgICAgICAv
LyByZW1lbWJlciBpdCBzbyB3ZSBjYW4gZ2l2ZSBhbiBlcnJvciBtZXNzYWdlIGxhdGVyLCBpZiBu
ZWNlc3NhcnkKICAgICAgICAgICAgIHVucmVzb2x2ZWQuYXBwZW5kKFF0TWV0aG9kTWF0Y2hEYXRh
KC8qbWF0Y2hEaXN0YW5jZT0qL0lOVF9NQVgsIGluZGV4LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMsIFFWYXJMZW5ndGhBcnJheTxRVmFy
aWFudCwgMTA+KCkpKTsKQEAgLTEyNTYsNyArMTI0Niw4IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhv
ZEluZGV4KEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgICAgIGFyZ3MucmVzaXplKHR5cGVzLmNv
dW50KCkpOwogCiAgICAgICAgIFF0TWV0aG9kTWF0Y2hUeXBlIHJldFR5cGUgPSB0eXBlc1swXTsK
LSAgICAgICAgYXJnc1swXSA9IFFWYXJpYW50KHJldFR5cGUudHlwZUlkKCksICh2b2lkICopMCk7
IC8vIHRoZSByZXR1cm4gdmFsdWUKKyAgICAgICAgaWYgKHJldFR5cGUudHlwZUlkKCkgIT0gUU1l
dGFUeXBlOjpWb2lkKQorICAgICAgICAgICAgYXJnc1swXSA9IFFWYXJpYW50KHJldFR5cGUudHlw
ZUlkKCksICh2b2lkICopMCk7IC8vIHRoZSByZXR1cm4gdmFsdWUKIAogICAgICAgICBib29sIGNv
bnZlcnRlZCA9IHRydWU7CiAgICAgICAgIGludCBtYXRjaERpc3RhbmNlID0gMDsKQEAgLTEyNzQs
NyArMTI2NSw3IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEV4ZWNTdGF0ZSogZXhlYywK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHFNYXRjaERlYnVnKCkgPDwgIk1h
dGNoOiAiIDw8IG1ldGhvZC5zaWduYXR1cmUoKSA8PCAoY29udmVydGVkID8gImNvbnZlcnRlZCI6
ImZhaWxlZCB0byBjb252ZXJ0IikgPDwgImRpc3RhbmNlICIgPDwgbWF0Y2hEaXN0YW5jZTsKKyAg
ICAgICAgcU1hdGNoRGVidWcoKSA8PCAiTWF0Y2g6ICIgPDwgbWV0aG9kLm1ldGhvZFNpZ25hdHVy
ZSgpIDw8IChjb252ZXJ0ZWQgPyAiY29udmVydGVkIjoiZmFpbGVkIHRvIGNvbnZlcnQiKSA8PCAi
ZGlzdGFuY2UgIiA8PCBtYXRjaERpc3RhbmNlOwogCiAgICAgICAgIGlmIChjb252ZXJ0ZWQpIHsK
ICAgICAgICAgICAgIGlmICgoZXhlYy0+YXJndW1lbnRDb3VudCgpICsgMSA9PSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4odHlwZXMuY291bnQoKSkpCkBAIC0xMzA5LDEyICsxMzAwLDEyIEBAIHN0YXRp
YyBpbnQgZmluZE1ldGhvZEluZGV4KEV4ZWNTdGF0ZSogZXhlYywKICAgICAgICAgLy8gTm8gdmFs
aWQgZnVuY3Rpb25zIGF0IGFsbCAtIGZvcm1hdCBhbiBlcnJvciBtZXNzYWdlCiAgICAgICAgIGlm
ICghY29udmVyc2lvbkZhaWxlZC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIFFTdHJpbmcgbWVz
c2FnZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoImluY29tcGF0aWJsZSB0eXBlIG9mIGFyZ3VtZW50
KHMpIGluIGNhbGwgdG8gJTAoKTsgY2FuZGlkYXRlcyB3ZXJlXG4iKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKHNpZ25hdHVyZSkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKHNpZ25hdHVyZSkp
OwogICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb252ZXJzaW9uRmFpbGVkLnNpemUo
KTsgKytpKSB7CiAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKQogICAgICAgICAgICAgICAgICAg
ICBtZXNzYWdlICs9IFFMYXRpbjFTdHJpbmcoIlxuIik7CiAgICAgICAgICAgICAgICAgUU1ldGFN
ZXRob2QgbXRkID0gbWV0YS0+bWV0aG9kKGNvbnZlcnNpb25GYWlsZWQuYXQoaSkpOwotICAgICAg
ICAgICAgICAgIG1lc3NhZ2UgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiICAgICUwIikuYXJnKFFT
dHJpbmc6OmZyb21MYXRpbjEobXRkLnNpZ25hdHVyZSgpKSk7CisgICAgICAgICAgICAgICAgbWVz
c2FnZSArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIgICAgJTAiKS5hcmcoUVN0cmluZzo6ZnJvbUxh
dGluMShtdGQubWV0aG9kU2lnbmF0dXJlKCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICpwRXJyb3IgPSB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdl
LnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsKICAgICAgICAgfSBlbHNlIGlmICghdW5yZXNvbHZl
ZC5pc0VtcHR5KCkpIHsKQEAgLTEzMjgsMTIgKzEzMTksMTIgQEAgc3RhdGljIGludCBmaW5kTWV0
aG9kSW5kZXgoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICAgICAgKnBFcnJvciA9IHRocm93RXJy
b3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UudG9MYXRpbjEoKS5jb25zdERh
dGEoKSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgUVN0cmluZyBtZXNzYWdlID0g
UVN0cmluZzo6ZnJvbUxhdGluMSgidG9vIGZldyBhcmd1bWVudHMgaW4gY2FsbCB0byAlMCgpOyBj
YW5kaWRhdGVzIGFyZVxuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoUUxh
dGluMVN0cmluZyhzaWduYXR1cmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5h
cmcoUVN0cmluZzo6ZnJvbUxhdGluMShzaWduYXR1cmUpKTsKICAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgdG9vRmV3QXJncy5zaXplKCk7ICsraSkgewogICAgICAgICAgICAgICAgIGlm
IChpID4gMCkKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRTGF0aW4xU3RyaW5nKCJc
biIpOwogICAgICAgICAgICAgICAgIFFNZXRhTWV0aG9kIG10ZCA9IG1ldGEtPm1ldGhvZCh0b29G
ZXdBcmdzLmF0KGkpKTsKLSAgICAgICAgICAgICAgICBtZXNzYWdlICs9IFFTdHJpbmc6OmZyb21M
YXRpbjEoIiAgICAlMCIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKG10ZC5zaWduYXR1cmUoKSkp
OworICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiICAgICUw
IikuYXJnKFFTdHJpbmc6OmZyb21MYXRpbjEobXRkLm1ldGhvZFNpZ25hdHVyZSgpKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAqcEVycm9yID0gdGhyb3dFcnJvcihleGVjLCBjcmVhdGVT
eW50YXhFcnJvcihleGVjLCBtZXNzYWdlLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsKICAgICAg
ICAgfQpAQCAtMTM1NCw3ICsxMzQ1LDcgQEAgc3RhdGljIGludCBmaW5kTWV0aG9kSW5kZXgoRXhl
Y1N0YXRlKiBleGVjLAogICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApCiAgICAgICAgICAg
ICAgICAgICAgICAgICBtZXNzYWdlICs9IFFMYXRpbjFTdHJpbmcoIlxuIik7CiAgICAgICAgICAg
ICAgICAgICAgIFFNZXRhTWV0aG9kIG10ZCA9IG1ldGEtPm1ldGhvZChjYW5kaWRhdGVzLmF0KGkp
LmluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRU3RyaW5nOjpmcm9tTGF0
aW4xKCIgICAgJTAiKS5hcmcoUVN0cmluZzo6ZnJvbUxhdGluMShtdGQuc2lnbmF0dXJlKCkpKTsK
KyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIgICAg
JTAiKS5hcmcoUVN0cmluZzo6ZnJvbUxhdGluMShtdGQubWV0aG9kU2lnbmF0dXJlKCkpKTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAqcEVycm9yID0gdGhy
b3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZS50b0xhdGluMSgpLmNv
bnN0RGF0YSgpKSk7CkBAIC0xNzY3LDI5ICsxNzU4LDY0IEBAIFF0Q29ubmVjdGlvbk9iamVjdDo6
flF0Q29ubmVjdGlvbk9iamVjdCgpCiAgICAgSlNWYWx1ZVVucHJvdGVjdChtX2NvbnRleHQsIG1f
cmVjZWl2ZXJGdW5jdGlvbik7CiB9CiAKKy8vIEJlZ2luIG1vYy1nZW5lcmF0ZWQgY29kZSAtLSBt
b2RpZnkgd2l0aCBjYXJlISBDaGVjayAiSEFORCBFRElUIiBwYXJ0cworc3RydWN0IHF0X21ldGFf
c3RyaW5nZGF0YV9RdENvbm5lY3Rpb25PYmplY3RfdCB7CisgICAgUUJ5dGVBcnJheURhdGEgZGF0
YVszXTsKKyAgICBjaGFyIHN0cmluZ2RhdGFbNDRdOworfTsKKyNkZWZpbmUgUVRfTU9DX0xJVEVS
QUwoaWR4LCBvZnMsIGxlbikgeyBcCisgICAgUV9SRUZDT1VOVF9JTklUSUFMSVpFX1NUQVRJQywg
bGVuLCAwLCAwLCBcCisgICAgb2Zmc2V0b2YocXRfbWV0YV9zdHJpbmdkYXRhX1F0Q29ubmVjdGlv
bk9iamVjdF90LCBzdHJpbmdkYXRhKSArIG9mcyBcCisgICAgICAgIC0gaWR4ICogc2l6ZW9mKFFC
eXRlQXJyYXlEYXRhKSBcCisgICAgfQorc3RhdGljIGNvbnN0IHF0X21ldGFfc3RyaW5nZGF0YV9R
dENvbm5lY3Rpb25PYmplY3RfdCBxdF9tZXRhX3N0cmluZ2RhdGFfUXRDb25uZWN0aW9uT2JqZWN0
ID0geworICAgIHsKK1FUX01PQ19MSVRFUkFMKDAsIDAsIDMzKSwKK1FUX01PQ19MSVRFUkFMKDEs
IDM0LCA3KSwKK1FUX01PQ19MSVRFUkFMKDIsIDQyLCAwKQorICAgIH0sCisgICAgIkpTQzo6Qmlu
ZGluZ3M6OlF0Q29ubmVjdGlvbk9iamVjdFwwIgorICAgICJleGVjdXRlXDBcMCIKK307CisjdW5k
ZWYgUVRfTU9DX0xJVEVSQUwKKwogc3RhdGljIGNvbnN0IHVpbnQgcXRfbWV0YV9kYXRhX1F0Q29u
bmVjdGlvbk9iamVjdFtdID0gewogCiAgLy8gY29udGVudDoKLSAgICAgICAxLCAgICAgICAvLyBy
ZXZpc2lvbgorICAgICAgIDcsICAgICAgIC8vIHJldmlzaW9uCiAgICAgICAgMCwgICAgICAgLy8g
Y2xhc3NuYW1lCiAgICAgICAgMCwgICAgMCwgLy8gY2xhc3NpbmZvCi0gICAgICAgMSwgICAxMCwg
Ly8gbWV0aG9kcworICAgICAgIDEsICAgMTQsIC8vIG1ldGhvZHMKICAgICAgICAwLCAgICAwLCAv
LyBwcm9wZXJ0aWVzCiAgICAgICAgMCwgICAgMCwgLy8gZW51bXMvc2V0cworICAgICAgIDAsICAg
IDAsIC8vIGNvbnN0cnVjdG9ycworICAgICAgIDAsICAgICAgIC8vIGZsYWdzCisgICAgICAgMCwg
ICAgICAgLy8gc2lnbmFsQ291bnQKKworIC8vIHNsb3RzOiBuYW1lLCBhcmdjLCBwYXJhbWV0ZXJz
LCB0YWcsIGZsYWdzCisgICAgICAgMSwgICAgMCwgICAxOSwgICAgMiwgMHgwYSwKIAotIC8vIHNs
b3RzOiBzaWduYXR1cmUsIHBhcmFtZXRlcnMsIHR5cGUsIHRhZywgZmxhZ3MKLSAgICAgIDI4LCAg
IDI3LCAgIDI3LCAgIDI3LCAweDBhLAorIC8vIHNsb3RzOiBwYXJhbWV0ZXJzCisgICAgUU1ldGFU
eXBlOjpWb2lkLAogCiAgICAgICAgMCAgICAgICAgLy8gZW9kCiB9OwogCi1zdGF0aWMgY29uc3Qg
Y2hhciBxdF9tZXRhX3N0cmluZ2RhdGFfUXRDb25uZWN0aW9uT2JqZWN0W10gPSB7Ci0gICAgIkpT
Qzo6QmluZGluZ3M6OlF0Q29ubmVjdGlvbk9iamVjdFwwXDBleGVjdXRlKClcMCIKLX07Cit2b2lk
IFF0Q29ubmVjdGlvbk9iamVjdDo6cXRfc3RhdGljX21ldGFjYWxsKFFPYmplY3QgKl9vLCBRTWV0
YU9iamVjdDo6Q2FsbCBfYywgaW50IF9pZCwgdm9pZCAqKl9hKQoreworICAgIGlmIChfYyA9PSBR
TWV0YU9iamVjdDo6SW52b2tlTWV0YU1ldGhvZCkgeworICAgICAgICBRX0FTU0VSVChzdGF0aWNN
ZXRhT2JqZWN0LmNhc3QoX28pKTsKKyAgICAgICAgUXRDb25uZWN0aW9uT2JqZWN0ICpfdCA9IHN0
YXRpY19jYXN0PFF0Q29ubmVjdGlvbk9iamVjdCAqPihfbyk7CisgICAgICAgIHN3aXRjaCAoX2lk
KSB7CisgICAgICAgIGNhc2UgMDogX3QtPmV4ZWN1dGUoX2EpOyBicmVhazsgLy8gSEFORCBFRElU
OiBhZGQgX2EgcGFyYW1ldGVyCisgICAgICAgIGRlZmF1bHQ6IDsKKyAgICAgICAgfQorICAgIH0K
K30KIAogY29uc3QgUU1ldGFPYmplY3QgUXRDb25uZWN0aW9uT2JqZWN0OjpzdGF0aWNNZXRhT2Jq
ZWN0ID0gewotICAgIHsgJlFPYmplY3Q6OnN0YXRpY01ldGFPYmplY3QsIHF0X21ldGFfc3RyaW5n
ZGF0YV9RdENvbm5lY3Rpb25PYmplY3QsCi0gICAgICBxdF9tZXRhX2RhdGFfUXRDb25uZWN0aW9u
T2JqZWN0LCAwIH0KKyAgICB7ICZRT2JqZWN0OjpzdGF0aWNNZXRhT2JqZWN0LCBxdF9tZXRhX3N0
cmluZ2RhdGFfUXRDb25uZWN0aW9uT2JqZWN0LmRhdGEsCisgICAgICBxdF9tZXRhX2RhdGFfUXRD
b25uZWN0aW9uT2JqZWN0LCBxdF9zdGF0aWNfbWV0YWNhbGwsIDAsIDAgfQogfTsKIAogY29uc3Qg
UU1ldGFPYmplY3QgKlF0Q29ubmVjdGlvbk9iamVjdDo6bWV0YU9iamVjdCgpIGNvbnN0CkBAIC0x
ODAwLDI1ICsxODI2LDI0IEBAIGNvbnN0IFFNZXRhT2JqZWN0ICpRdENvbm5lY3Rpb25PYmplY3Q6
Om1ldGFPYmplY3QoKSBjb25zdAogdm9pZCAqUXRDb25uZWN0aW9uT2JqZWN0OjpxdF9tZXRhY2Fz
dChjb25zdCBjaGFyICpfY2xuYW1lKQogewogICAgIGlmICghX2NsbmFtZSkgcmV0dXJuIDA7Ci0g
ICAgaWYgKCFzdHJjbXAoX2NsbmFtZSwgcXRfbWV0YV9zdHJpbmdkYXRhX1F0Q29ubmVjdGlvbk9i
amVjdCkpCisgICAgaWYgKCFzdHJjbXAoX2NsbmFtZSwgcXRfbWV0YV9zdHJpbmdkYXRhX1F0Q29u
bmVjdGlvbk9iamVjdC5zdHJpbmdkYXRhKSkKICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHZv
aWQqPihjb25zdF9jYXN0PFF0Q29ubmVjdGlvbk9iamVjdCo+KHRoaXMpKTsKICAgICByZXR1cm4g
UU9iamVjdDo6cXRfbWV0YWNhc3QoX2NsbmFtZSk7CiB9CiAKLS8vIFRoaXMgaXMgd2hhdCBtb2Mg
d291bGQgZ2VuZXJhdGUgZXhjZXB0IGJ5IHRoZSBmYWN0IHRoYXQgd2UgcGFzcyBhbGwgYXJndW1l
bnRzIHRvIG91ciBleGVjdXRlKCkgc2xvdC4KIGludCBRdENvbm5lY3Rpb25PYmplY3Q6OnF0X21l
dGFjYWxsKFFNZXRhT2JqZWN0OjpDYWxsIF9jLCBpbnQgX2lkLCB2b2lkICoqX2EpCiB7CiAgICAg
X2lkID0gUU9iamVjdDo6cXRfbWV0YWNhbGwoX2MsIF9pZCwgX2EpOwogICAgIGlmIChfaWQgPCAw
KQogICAgICAgICByZXR1cm4gX2lkOwogICAgIGlmIChfYyA9PSBRTWV0YU9iamVjdDo6SW52b2tl
TWV0YU1ldGhvZCkgewotICAgICAgICBzd2l0Y2ggKF9pZCkgewotICAgICAgICBjYXNlIDA6IGV4
ZWN1dGUoX2EpOyBicmVhazsKLSAgICAgICAgfQorICAgICAgICBpZiAoX2lkIDwgMSkKKyAgICAg
ICAgICAgIHF0X3N0YXRpY19tZXRhY2FsbCh0aGlzLCBfYywgX2lkLCBfYSk7CiAgICAgICAgIF9p
ZCAtPSAxOwogICAgIH0KICAgICByZXR1cm4gX2lkOwogfQorLy8gRW5kIG9mIG1vYy1nZW5lcmF0
ZWQgY29kZQogCiBzdGF0aWMgYm9vbCBpc0phdmFTY3JpcHRGdW5jdGlvbihKU09iamVjdFJlZiBv
YmplY3QpCiB7CkBAIC0xODQwLDEyICsxODY1LDEwIEBAIHZvaWQgUXRDb25uZWN0aW9uT2JqZWN0
OjpleGVjdXRlKHZvaWQqKiBhcmd2KQogICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhID0gc2Vu
ZGVyLT5tZXRhT2JqZWN0KCk7CiAgICAgY29uc3QgUU1ldGFNZXRob2QgbWV0aG9kID0gbWV0YS0+
bWV0aG9kKG1fc2lnbmFsSW5kZXgpOwogCi0gICAgUUxpc3Q8UUJ5dGVBcnJheT4gcGFyYW1ldGVy
VHlwZXMgPSBtZXRob2QucGFyYW1ldGVyVHlwZXMoKTsKLQogICAgIEpTVmFsdWVSZWYqIGlnbm9y
ZWRFeGNlcHRpb24gPSAwOwogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5nUmVmPiBsZW5ndGhQcm9w
ZXJ0eShKU1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZygibGVuZ3RoIikpOwogICAgIGludCBy
ZWNlaXZlckxlbmd0aCA9IGludChKU1ZhbHVlVG9OdW1iZXIobV9jb250ZXh0LCBKU09iamVjdEdl
dFByb3BlcnR5KG1fY29udGV4dCwgbV9yZWNlaXZlckZ1bmN0aW9uLCBsZW5ndGhQcm9wZXJ0eS5n
ZXQoKSwgaWdub3JlZEV4Y2VwdGlvbiksIGlnbm9yZWRFeGNlcHRpb24pKTsKLSAgICBpbnQgYXJn
YyA9IHFNYXgocGFyYW1ldGVyVHlwZXMuY291bnQoKSwgcmVjZWl2ZXJMZW5ndGgpOworICAgIGlu
dCBhcmdjID0gcU1heChtZXRob2QucGFyYW1ldGVyQ291bnQoKSwgcmVjZWl2ZXJMZW5ndGgpOwog
ICAgIFdURjo6VmVjdG9yPEpTVmFsdWVSZWY+IGFyZ3MoYXJnYyk7CiAKICAgICAvLyBUT0RPOiBy
ZW1vdmUgb25jZSBjb252ZXJzaW9uIGZ1bmN0aW9ucyB1c2UgSlNDIEFQSS4KQEAgLTE4NTMsNyAr
MTg3Niw3IEBAIHZvaWQgUXRDb25uZWN0aW9uT2JqZWN0OjpleGVjdXRlKHZvaWQqKiBhcmd2KQog
ICAgIFJlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0ID0gbV9zZW5kZXJJbnN0YW5jZS0+cm9v
dE9iamVjdCgpOwogCiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAg
ICAgaW50IGFyZ1R5cGUgPSBRTWV0YVR5cGU6OnR5cGUocGFyYW1ldGVyVHlwZXMuYXQoaSkpOwor
ICAgICAgICBpbnQgYXJnVHlwZSA9IG1ldGhvZC5wYXJhbWV0ZXJUeXBlKGkpOwogICAgICAgICBh
cmdzW2ldID0gOjp0b1JlZihleGVjLCBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHJvb3RP
YmplY3QsIFFWYXJpYW50KGFyZ1R5cGUsIGFyZ3ZbaSsxXSkpKTsKICAgICB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmggYi9Tb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcnVudGltZS5oCmluZGV4IDQwNjk5N2YuLjUzZTVmMjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuaApAQCAtMjM4LDE1ICsyMzgsMjAgQEAgcHJpdmF0
ZToKIC8vIHdpdGggdGhlIGFwcHJvcHJpYXRlIHNpZ25hbCBvZiAnc2VuZGVyJy4gV2hlbiBleGVj
dXRlKCkgaXMgY2FsbGVkLCBpdCB3aWxsIGNhbGwgSlMgJ3JlY2VpdmVyRnVuY3Rpb24nLgogY2xh
c3MgUXRDb25uZWN0aW9uT2JqZWN0IDogcHVibGljIFFPYmplY3QKIHsKKyNpZiBRVF9WRVJTSU9O
ID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwgMCkKKyAgICBRX09CSkVDVF9GQUtFCisjZW5kaWYK
IHB1YmxpYzoKICAgICBRdENvbm5lY3Rpb25PYmplY3QoSlNDb250ZXh0UmVmLCBQYXNzUmVmUHRy
PFF0SW5zdGFuY2U+IHNlbmRlckluc3RhbmNlLCBpbnQgc2lnbmFsSW5kZXgsIEpTT2JqZWN0UmVm
IHJlY2VpdmVyLCBKU09iamVjdFJlZiByZWNlaXZlckZ1bmN0aW9uKTsKICAgICB+UXRDb25uZWN0
aW9uT2JqZWN0KCk7CiAKKyNpZiBRVF9WRVJTSU9OIDwgUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAw
KQogICAgIC8vIEV4cGxpY2l0bHkgZGVmaW5lIHRoZXNlIGJlY2F1c2Ugd2FudCBhIGN1c3RvbSBx
dF9tZXRhY2FsbCgpLCBzbyB3ZSBjYW4ndCB1c2UgUV9PQkpFQ1QgbWFjcm8uCiAgICAgc3RhdGlj
IGNvbnN0IFFNZXRhT2JqZWN0IHN0YXRpY01ldGFPYmplY3Q7CiAgICAgdmlydHVhbCBjb25zdCBR
TWV0YU9iamVjdCAqbWV0YU9iamVjdCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCAqcXRfbWV0
YWNhc3QoY29uc3QgY2hhciAqKTsKICAgICB2aXJ0dWFsIGludCBxdF9tZXRhY2FsbChRTWV0YU9i
amVjdDo6Q2FsbCwgaW50LCB2b2lkICoqYXJndik7CisjZW5kaWYKIAogICAgIHZvaWQgZXhlY3V0
ZSh2b2lkICoqYXJndik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9x
dF9ydW50aW1lX3F0NC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZV9x
dDQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZWY2OTcKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZV9xdDQuY3Bw
CkBAIC0wLDAgKzEsMTkyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jw
b3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAicXRfcnVudGlt
ZS5oIgorCisjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1ZGUgIkJvb2xlYW5PYmplY3QuaCIK
KyNpbmNsdWRlICJEYXRlSW5zdGFuY2UuaCIKKyNpbmNsdWRlICJEYXRlUHJvdG90eXBlLmgiCisj
aW5jbHVkZSAiRnVuY3Rpb25Qcm90b3R5cGUuaCIKKyNpbmNsdWRlICJJbnRlcnByZXRlci5oIgor
I2luY2x1ZGUgIkpTQXJyYXkuaCIKKyNpbmNsdWRlICJKU0RvY3VtZW50LmgiCisjaW5jbHVkZSAi
SlNET01CaW5kaW5nLmgiCisjaW5jbHVkZSAiSlNET01XaW5kb3cuaCIKKyNpbmNsdWRlIDxKU0Z1
bmN0aW9uLmg+CisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKKyNpbmNsdWRlICJKU0hUTUxF
bGVtZW50LmgiCisjaW5jbHVkZSAiSlNMb2NrLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKyNp
bmNsdWRlICJKU1JldGFpblB0ci5oIgorI2luY2x1ZGUgIkpTVWludDhDbGFtcGVkQXJyYXkuaCIK
KyNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJh
eS5oIgorI2luY2x1ZGUgIlJlZ0V4cENvbnN0cnVjdG9yLmgiCisjaW5jbHVkZSAiUmVnRXhwT2Jq
ZWN0LmgiCisjaW5jbHVkZSAicWRhdGV0aW1lLmgiCisjaW5jbHVkZSAicWRlYnVnLmgiCisjaW5j
bHVkZSAicW1ldGFvYmplY3QuaCIKKyNpbmNsdWRlICJxbWV0YXR5cGUuaCIKKyNpbmNsdWRlICJx
b2JqZWN0LmgiCisjaW5jbHVkZSAicXN0cmluZ2xpc3QuaCIKKyNpbmNsdWRlICJxdF9pbnN0YW5j
ZS5oIgorI2luY2x1ZGUgInF0X3BpeG1hcHJ1bnRpbWUuaCIKKyNpbmNsdWRlICJxdmFybGVuZ3Ro
YXJyYXkuaCIKKworI2luY2x1ZGUgPHd0Zi9EYXRlTWF0aC5oPgorCisjaW5jbHVkZSA8bGltaXRz
Lmg+CisjaW5jbHVkZSA8cnVudGltZS9FcnJvci5oPgorI2luY2x1ZGUgPHJ1bnRpbWVfYXJyYXku
aD4KKyNpbmNsdWRlIDxydW50aW1lX29iamVjdC5oPgorCisvLyBRdFNjcmlwdCBoYXMgdGhlc2UK
K1FfREVDTEFSRV9NRVRBVFlQRShRT2JqZWN0TGlzdCk7CitRX0RFQ0xBUkVfTUVUQVRZUEUoUUxp
c3Q8aW50Pik7CitRX0RFQ0xBUkVfTUVUQVRZUEUoUVZhcmlhbnQpOworCit1c2luZyBuYW1lc3Bh
Y2UgV2ViQ29yZTsKKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgQmluZGluZ3MgeworCisv
LyBEZWJ1Z2dpbmcKKy8vI2RlZmluZSBRVFdLX1JVTlRJTUVfQ09OVkVSU0lPTl9ERUJVRworLy8j
ZGVmaW5lIFFUV0tfUlVOVElNRV9NQVRDSF9ERUJVRworCitjbGFzcyBRV0tOb0RlYnVnCit7Citw
dWJsaWM6CisgICAgaW5saW5lIFFXS05vRGVidWcoKXt9CisgICAgaW5saW5lIH5RV0tOb0RlYnVn
KCl7fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBpbmxpbmUgUVdLTm9EZWJ1ZyAm
b3BlcmF0b3I8PChjb25zdCBUICYpIHsgcmV0dXJuICp0aGlzOyB9Cit9OworCisjaWZkZWYgUVRX
S19SVU5USU1FX0NPTlZFUlNJT05fREVCVUcKKyNkZWZpbmUgcUNvbnZEZWJ1ZygpIHFEZWJ1Zygp
CisjZWxzZQorI2RlZmluZSBxQ29udkRlYnVnKCkgUVdLTm9EZWJ1ZygpCisjZW5kaWYKKworI2lm
ZGVmIFFUV0tfUlVOVElNRV9NQVRDSF9ERUJVRworI2RlZmluZSBxTWF0Y2hEZWJ1ZygpIHFEZWJ1
ZygpCisjZWxzZQorI2RlZmluZSBxTWF0Y2hEZWJ1ZygpIFFXS05vRGVidWcoKQorI2VuZGlmCisK
K3R5cGVkZWYgZW51bSB7CisgICAgVmFyaWFudCA9IDAsCisgICAgTnVtYmVyLAorICAgIEJvb2xl
YW4sCisgICAgU3RyaW5nLAorICAgIERhdGUsCisgICAgUmVnRXhwLAorICAgIEFycmF5LAorICAg
IFFPYmosCisgICAgT2JqZWN0LAorICAgIE51bGwsCisgICAgUlRBcnJheSwKKyAgICBKU1VpbnQ4
Q2xhbXBlZEFycmF5Cit9IEpTUmVhbFR5cGU7CisKKyNpZiBkZWZpbmVkKFFUV0tfUlVOVElNRV9D
T05WRVJTSU9OX0RFQlVHKSB8fCBkZWZpbmVkKFFUV0tfUlVOVElNRV9NQVRDSF9ERUJVRykKK1FE
ZWJ1ZyBvcGVyYXRvcjw8KFFEZWJ1ZyBkYmcsIGNvbnN0IEpTUmVhbFR5cGUgJmMpCit7CisgICAg
IGNvbnN0IGNoYXIgKm1hcFtdID0geyAiVmFyaWFudCIsICJOdW1iZXIiLCAiQm9vbGVhbiIsICJT
dHJpbmciLCAiRGF0ZSIsCisgICAgICAgICAiUmVnRXhwIiwgIkFycmF5IiwgIlJUT2JqZWN0Iiwg
Ik9iamVjdCIsICJOdWxsIiwgIlJUQXJyYXkifTsKKworICAgICBkYmcubm9zcGFjZSgpIDw8ICJK
U1R5cGUoIiA8PCAoKGludCljKSA8PCAiLCAiIDw8ICBtYXBbY10gPDwgIikiOworCisgICAgIHJl
dHVybiBkYmcuc3BhY2UoKTsKK30KKyNlbmRpZgorCitzdHJ1Y3QgUnVudGltZUNvbnZlcnNpb24g
eworICAgIENvbnZlcnRUb0pTVmFsdWVGdW5jdGlvbiB0b0pTVmFsdWVGdW5jOworICAgIENvbnZl
cnRUb1ZhcmlhbnRGdW5jdGlvbiB0b1ZhcmlhbnRGdW5jOworfTsKKwordHlwZWRlZiBRSGFzaDxp
bnQsIFJ1bnRpbWVDb252ZXJzaW9uPiBSdW50aW1lQ29udmVyc2lvblRhYmxlOworUV9HTE9CQUxf
U1RBVElDKFJ1bnRpbWVDb252ZXJzaW9uVGFibGUsIGN1c3RvbVJ1bnRpbWVDb252ZXJzaW9ucykK
Kwordm9pZCByZWdpc3RlckN1c3RvbVR5cGUoaW50IHF0TWV0YVR5cGVJZCwgQ29udmVydFRvVmFy
aWFudEZ1bmN0aW9uIHRvVmFyaWFudEZ1bmMsIENvbnZlcnRUb0pTVmFsdWVGdW5jdGlvbiB0b0pT
VmFsdWVGdW5jKQoreworICAgIFJ1bnRpbWVDb252ZXJzaW9uIGNvbnZlcnNpb247CisgICAgY29u
dmVyc2lvbi50b0pTVmFsdWVGdW5jID0gdG9KU1ZhbHVlRnVuYzsKKyAgICBjb252ZXJzaW9uLnRv
VmFyaWFudEZ1bmMgPSB0b1ZhcmlhbnRGdW5jOworICAgIGN1c3RvbVJ1bnRpbWVDb252ZXJzaW9u
cygpLT5pbnNlcnQocXRNZXRhVHlwZUlkLCBjb252ZXJzaW9uKTsKK30KKworc3RhdGljIGJvb2wg
aXNKU1VpbnQ4Q2xhbXBlZEFycmF5KEpTVmFsdWUgdmFsKQoreworICAgIHJldHVybiB2YWwuaXND
ZWxsKCkgJiYgdmFsLmluaGVyaXRzKCZKU1VpbnQ4Q2xhbXBlZEFycmF5OjpzX2luZm8pOworfQor
CitzdGF0aWMgSlNSZWFsVHlwZSB2YWx1ZVJlYWxUeXBlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSB2YWwpCit7CisgICAgaWYgKHZhbC5pc051bWJlcigpKQorICAgICAgICByZXR1cm4gTnVtYmVy
OworICAgIGVsc2UgaWYgKHZhbC5pc1N0cmluZygpKQorICAgICAgICByZXR1cm4gU3RyaW5nOwor
ICAgIGVsc2UgaWYgKHZhbC5pc0Jvb2xlYW4oKSkKKyAgICAgICAgcmV0dXJuIEJvb2xlYW47Cisg
ICAgZWxzZSBpZiAodmFsLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gTnVsbDsKKyAgICBlbHNl
IGlmIChpc0pTVWludDhDbGFtcGVkQXJyYXkodmFsKSkKKyAgICAgICAgcmV0dXJuIEpTVWludDhD
bGFtcGVkQXJyYXk7CisgICAgZWxzZSBpZiAodmFsLmlzT2JqZWN0KCkpIHsKKyAgICAgICAgSlNP
YmplY3QgKm9iamVjdCA9IHZhbC50b09iamVjdChleGVjKTsKKyAgICAgICAgaWYgKG9iamVjdC0+
aW5oZXJpdHMoJlJ1bnRpbWVBcnJheTo6c19pbmZvKSkgIC8vIFJ1bnRpbWVBcnJheSAnaW5oZXJp
dHMnIGZyb20gQXJyYXksIGJ1dCBub3QgaW4gQysrCisgICAgICAgICAgICByZXR1cm4gUlRBcnJh
eTsKKyAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhlcml0cygmSlNBcnJheTo6c19pbmZvKSkK
KyAgICAgICAgICAgIHJldHVybiBBcnJheTsKKyAgICAgICAgZWxzZSBpZiAob2JqZWN0LT5pbmhl
cml0cygmRGF0ZUluc3RhbmNlOjpzX2luZm8pKQorICAgICAgICAgICAgcmV0dXJuIERhdGU7Cisg
ICAgICAgIGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJlJlZ0V4cE9iamVjdDo6c19pbmZvKSkK
KyAgICAgICAgICAgIHJldHVybiBSZWdFeHA7CisgICAgICAgIGVsc2UgaWYgKG9iamVjdC0+aW5o
ZXJpdHMoJlJ1bnRpbWVPYmplY3Q6OnNfaW5mbykpCisgICAgICAgICAgICByZXR1cm4gUU9iajsK
KyAgICAgICAgcmV0dXJuIE9iamVjdDsKKyAgICB9CisKKyAgICByZXR1cm4gU3RyaW5nOyAvLyBJ
IGRvbid0IGtub3cuCit9CisKK1FWYXJpYW50IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0
YXRlKiwgSlNWYWx1ZSwgUU1ldGFUeXBlOjpUeXBlLCBpbnQqLCBIYXNoU2V0PEpTT2JqZWN0Kj4q
LCBpbnQpOworCitzdGF0aWMgUVZhcmlhbnRNYXAgY29udmVydFZhbHVlVG9RVmFyaWFudE1hcChF
eGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiBvYmplY3QsIEhhc2hTZXQ8SlNPYmplY3QqPiogdmlz
aXRlZE9iamVjdHMsIGludCByZWN1cnNpb25MaW1pdCkKK3sKKyAgICBRX0FTU0VSVCghZXhlYy0+
aGFkRXhjZXB0aW9uKCkpOworCisgICAgUHJvcGVydHlOYW1lQXJyYXkgcHJvcGVydGllcyhleGVj
KTsKKyAgICBvYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldFByb3BlcnR5TmFtZXMob2JqZWN0LCBl
eGVjLCBwcm9wZXJ0aWVzLCBFeGNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKTsKKyAgICBQcm9wZXJ0
eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgaXQgPSBwcm9wZXJ0aWVzLmJlZ2luKCk7CisgICAg
UVZhcmlhbnRNYXAgcmVzdWx0OworICAgIGludCBvYmpkaXN0ID0gMDsKKworICAgIHdoaWxlIChp
dCAhPSBwcm9wZXJ0aWVzLmVuZCgpKSB7CisgICAgICAgIGlmIChvYmplY3QtPnByb3BlcnR5SXNF
bnVtZXJhYmxlKGV4ZWMsICppdCkpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gb2JqZWN0
LT5nZXQoZXhlYywgKml0KTsKKyAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgICAgUVZhcmlhbnQgdiA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQo
ZXhlYywgdmFsLCBRTWV0YVR5cGU6OlZvaWQsICZvYmpkaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVj
dXJzaW9uTGltaXQpOworICAgICAgICAgICAgICAgIGlmIChvYmpkaXN0ID49IDApIHsKKyAgICAg
ICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gKCppdCkudXN0cmluZygpOworICAgICAg
ICAgICAgICAgICAgICBRU3RyaW5nIGlkID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcu
aW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpOworICAgICAgICAgICAgICAg
ICAgICByZXN1bHQuaW5zZXJ0KGlkLCB2KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgKytpdDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworUVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgdmFsdWUsIFFNZXRhVHlwZTo6VHlwZSBoaW50LCBpbnQgKmRpc3RhbmNlLCBIYXNoU2V0
PEpTT2JqZWN0Kj4qIHZpc2l0ZWRPYmplY3RzLCBpbnQgcmVjdXJzaW9uTGltaXQpCit7CisgICAg
LS1yZWN1cnNpb25MaW1pdDsKKworICAgIGlmICghdmFsdWUgfHwgIXJlY3Vyc2lvbkxpbWl0KQor
ICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKKworICAgIEpTT2JqZWN0KiBvYmplY3QgPSAwOwor
ICAgIGlmICh2YWx1ZS5pc09iamVjdCgpKSB7CisgICAgICAgIG9iamVjdCA9IHZhbHVlLnRvT2Jq
ZWN0KGV4ZWMpOworICAgICAgICBpZiAodmlzaXRlZE9iamVjdHMtPmNvbnRhaW5zKG9iamVjdCkp
CisgICAgICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsKKworICAgICAgICB2aXNpdGVkT2JqZWN0
cy0+YWRkKG9iamVjdCk7CisgICAgfQorCisgICAgLy8gY2hlY2sgbWFnaWMgcG9pbnRlciB2YWx1
ZXMgYmVmb3JlIGRlcmVmZXJlbmNpbmcgdmFsdWUKKyAgICBpZiAodmFsdWUgPT0ganNOYU4oKQor
ICAgICAgICB8fCAodmFsdWUgPT0ganNVbmRlZmluZWQoKQorICAgICAgICAgICAgJiYgaGludCAh
PSBRTWV0YVR5cGU6OlFTdHJpbmcKKyAgICAgICAgICAgICYmIGhpbnQgIT0gKFFNZXRhVHlwZTo6
VHlwZSkgcU1ldGFUeXBlSWQ8UVZhcmlhbnQ+KCkpKSB7CisgICAgICAgIGlmIChkaXN0YW5jZSkK
KyAgICAgICAgICAgICpkaXN0YW5jZSA9IC0xOworICAgICAgICByZXR1cm4gUVZhcmlhbnQoKTsK
KyAgICB9CisKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworICAgIEpT
UmVhbFR5cGUgdHlwZSA9IHZhbHVlUmVhbFR5cGUoZXhlYywgdmFsdWUpOworICAgIGlmIChoaW50
ID09IFFNZXRhVHlwZTo6Vm9pZCkgeworICAgICAgICBzd2l0Y2godHlwZSkgeworICAgICAgICAg
ICAgY2FzZSBOdW1iZXI6CisgICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6RG91Ymxl
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCb29sZWFuOgorICAg
ICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OkJvb2w7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFN0cmluZzoKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6UVN0cmluZzsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgRGF0ZToKKyAgICAgICAgICAgICAgICBoaW50ID0gUU1l
dGFUeXBlOjpRRGF0ZVRpbWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFJlZ0V4cDoKKyAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRUmVnRXhwOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBPYmplY3Q6CisgICAgICAg
ICAgICAgICAgaWYgKG9iamVjdC0+aW5oZXJpdHMoJk51bWJlck9iamVjdDo6c19pbmZvKSkKKyAg
ICAgICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6RG91YmxlOworICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkJvb2xlYW5PYmplY3Q6OnNfaW5mbykpCisg
ICAgICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OkJvb2w7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRVmFyaWFudE1h
cDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUU9iajoKKyAgICAg
ICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRT2JqZWN0U3RhcjsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSlNVaW50OENsYW1wZWRBcnJheToKKyAgICAgICAg
ICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRQnl0ZUFycmF5OworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBBcnJheToKKyAgICAgICAgICAgIGNhc2UgUlRBcnJheToK
KyAgICAgICAgICAgICAgICBoaW50ID0gUU1ldGFUeXBlOjpRVmFyaWFudExpc3Q7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBxQ29udkRlYnVnKCkgPDwg
ImNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQ6IGpzdHlwZSBpcyAiIDw8IHR5cGUgPDwgIiwgaGludCBp
cyIgPDwgaGludDsKKworICAgIGlmICh2YWx1ZSA9PSBqc051bGwoKQorICAgICAgICAmJiBoaW50
ICE9IFFNZXRhVHlwZTo6UU9iamVjdFN0YXIKKyAgICAgICAgJiYgaGludCAhPSBRTWV0YVR5cGU6
OlZvaWRTdGFyCisgICAgICAgICYmIGhpbnQgIT0gUU1ldGFUeXBlOjpRU3RyaW5nCisgICAgICAg
ICYmIGhpbnQgIT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UVZhcmlhbnQ+KCkpIHsK
KyAgICAgICAgaWYgKGRpc3RhbmNlKQorICAgICAgICAgICAgKmRpc3RhbmNlID0gLTE7CisgICAg
ICAgIHJldHVybiBRVmFyaWFudCgpOworICAgIH0KKworICAgIFFWYXJpYW50IHJldDsKKyAgICBp
bnQgZGlzdCA9IC0xOworICAgIHN3aXRjaCAoaGludCkgeworICAgICAgICBjYXNlIFFNZXRhVHlw
ZTo6Qm9vbDoKKyAgICAgICAgICAgIGlmICh0eXBlID09IE9iamVjdCAmJiBvYmplY3QtPmluaGVy
aXRzKCZCb29sZWFuT2JqZWN0OjpzX2luZm8pKQorICAgICAgICAgICAgICAgIHJldCA9IFFWYXJp
YW50KGFzQm9vbGVhbk9iamVjdCh2YWx1ZSktPmludGVybmFsVmFsdWUoKS50b0Jvb2xlYW4oZXhl
YykpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHZh
bHVlLnRvQm9vbGVhbihleGVjKSk7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBCb29sZWFuKQor
ICAgICAgICAgICAgICAgIGRpc3QgPSAwOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGRpc3QgPSAxMDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUU1ldGFU
eXBlOjpJbnQ6CisgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVSW50OgorICAgICAgICBjYXNlIFFN
ZXRhVHlwZTo6TG9uZzoKKyAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlVMb25nOgorICAgICAgICBj
YXNlIFFNZXRhVHlwZTo6TG9uZ0xvbmc6CisgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVTG9uZ0xv
bmc6CisgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpTaG9ydDoKKyAgICAgICAgY2FzZSBRTWV0YVR5
cGU6OlVTaG9ydDoKKyAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkZsb2F0OgorICAgICAgICBjYXNl
IFFNZXRhVHlwZTo6RG91YmxlOgorICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQodmFsdWUudG9O
dW1iZXIoZXhlYykpOworICAgICAgICAgICAgcmV0LmNvbnZlcnQoKFFWYXJpYW50OjpUeXBlKWhp
bnQpOworICAgICAgICAgICAgaWYgKHR5cGUgPT0gTnVtYmVyKSB7CisgICAgICAgICAgICAgICAg
c3dpdGNoIChoaW50KSB7CisgICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkRvdWJsZToK
KyAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDA7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpGbG9hdDoKKyAgICAgICAgICAgICAg
ICAgICAgZGlzdCA9IDE7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgUU1ldGFUeXBlOjpMb25nTG9uZzoKKyAgICAgICAgICAgICAgICBjYXNlIFFNZXRh
VHlwZTo6VUxvbmdMb25nOgorICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMjsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6Okxvbmc6
CisgICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlVMb25nOgorICAgICAgICAgICAgICAg
ICAgICBkaXN0ID0gMzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgY2FzZSBRTWV0YVR5cGU6OkludDoKKyAgICAgICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6
VUludDoKKyAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDQ7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpTaG9ydDoKKyAgICAgICAg
ICAgICAgICBjYXNlIFFNZXRhVHlwZTo6VVNob3J0OgorICAgICAgICAgICAgICAgICAgICBkaXN0
ID0gNTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGRpc3Qg
PSAxMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkaXN0ID0gMTA7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UUNoYXI6
CisgICAgICAgICAgICBpZiAodHlwZSA9PSBOdW1iZXIgfHwgdHlwZSA9PSBCb29sZWFuKSB7Cisg
ICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUUNoYXIoKHVzaG9ydCl2YWx1ZS50b051bWJl
cihleGVjKSkpOworICAgICAgICAgICAgICAgIGlmICh0eXBlID09IEJvb2xlYW4pCisgICAgICAg
ICAgICAgICAgICAgIGRpc3QgPSAzOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgZGlzdCA9IDY7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IFVTdHJpbmcgc3RyID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAg
ICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFDaGFyKHN0ci5sZW5ndGgoKSA/ICooY29uc3QgdXNo
b3J0KilzdHIuaW1wbCgpLT5jaGFyYWN0ZXJzKCkgOiAwKSk7CisgICAgICAgICAgICAgICAgaWYg
KHR5cGUgPT0gU3RyaW5nKQorICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMzsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRU3RyaW5n
OiB7CisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWRPck51bGwoKSkgeworICAgICAg
ICAgICAgICAgIGlmIChkaXN0YW5jZSkKKyAgICAgICAgICAgICAgICAgICAgKmRpc3RhbmNlID0g
MTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUVN0cmluZygpOworICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVj
KS0+dmFsdWUoZXhlYyk7CisgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUVN0cmluZygo
Y29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3Ro
KCkpKTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSBTdHJpbmcpCisgICAgICAgICAgICAg
ICAgICAgIGRpc3QgPSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgZGlzdCA9IDEwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKworICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UVZhcmlhbnRNYXA6CisgICAgICAgICAgICBp
ZiAodHlwZSA9PSBPYmplY3QgfHwgdHlwZSA9PSBBcnJheSB8fCB0eXBlID09IFJUQXJyYXkpIHsK
KyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChjb252ZXJ0VmFsdWVUb1FWYXJpYW50TWFw
KGV4ZWMsIG9iamVjdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KSk7CisgICAgICAg
ICAgICAgICAgLy8gVGhvc2UgdHlwZXMgY2FuIHN0aWxsIGhhdmUgcGVyZmVjdCBtYXRjaGVzLCBl
LmcuICdib29sJyBpZiB2YWx1ZSBpcyBhIEJvb2xlYW4gT2JqZWN0LgorICAgICAgICAgICAgICAg
IGRpc3QgPSAxOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBRTWV0YVR5cGU6OlFWYXJpYW50TGlzdDoKKyAgICAgICAgICAgIGlmICh0eXBlID09IFJU
QXJyYXkpIHsKKyAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkqIHJ0YXJyYXkgPSBzdGF0aWNf
Y2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOworCisgICAgICAgICAgICAgICAgUVZhcmlhbnRM
aXN0IHJlc3VsdDsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gcnRhcnJheS0+Z2V0TGVuZ3Ro
KCk7CisgICAgICAgICAgICAgICAgaW50IG9iamRpc3QgPSAwOworICAgICAgICAgICAgICAgIHFD
b252RGVidWcoKSA8PCAiY29udmVydGluZyBhICIgPDwgbGVuIDw8ICIgbGVuZ3RoIEFycmF5IjsK
KyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAg
ICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gcnRhcnJheS0+Z2V0Q29uY3JldGVBcnJheSgpLT52
YWx1ZUF0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGNvbnZl
cnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OlZvaWQsICZvYmpkaXN0LCB2
aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KG9iamRpc3QgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8
PCAiRmFpbGVkIGNvbnZlcnRpbmcgZWxlbWVudCBhdCBpbmRleCAiIDw8IGk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsgLy8gRmFpbGVkIGNvbnZlcnRpbmcgYSBsaXN0IGVudHJ5LCBz
byBmYWlsIHRoZSBhcnJheQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGlmIChvYmpkaXN0ICE9IC0xKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRpc3QgPSA1OworICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1bHQp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBBcnJh
eSkgeworICAgICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gc3RhdGljX2Nhc3Q8SlNBcnJh
eSo+KG9iamVjdCk7CisKKyAgICAgICAgICAgICAgICBRVmFyaWFudExpc3QgcmVzdWx0OworICAg
ICAgICAgICAgICAgIGludCBsZW4gPSBhcnJheS0+bGVuZ3RoKCk7CisgICAgICAgICAgICAgICAg
aW50IG9iamRpc3QgPSAwOworICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiY29udmVy
dGluZyBhICIgPDwgbGVuIDw8ICIgbGVuZ3RoIEFycmF5IjsKKyAgICAgICAgICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUg
dmFsID0gYXJyYXktPmdldChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpWb2lkLCAm
b2JqZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KSk7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChvYmpkaXN0ID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBxQ29u
dkRlYnVnKCkgPDwgIkZhaWxlZCBjb252ZXJ0aW5nIGVsZW1lbnQgYXQgaW5kZXggIiA8PCBpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8vIEZhaWxlZCBjb252ZXJ0aW5nIGEgbGlz
dCBlbnRyeSwgc28gZmFpbCB0aGUgYXJyYXkKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAob2JqZGlzdCAhPSAtMSkgeworICAgICAg
ICAgICAgICAgICAgICBkaXN0ID0gNTsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlh
bnQocmVzdWx0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIC8vIE1ha2UgYSBzaW5nbGUgbGVuZ3RoIGFycmF5CisgICAgICAgICAgICAg
ICAgaW50IG9iamRpc3Q7CisgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJtYWtpbmcg
YSBzaW5nbGUgbGVuZ3RoIHZhcmlhbnRsaXN0IjsKKyAgICAgICAgICAgICAgICBRVmFyaWFudCB2
YXIgPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5cGU6OlZvaWQs
ICZvYmpkaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOworICAgICAgICAgICAg
ICAgIGlmIChvYmpkaXN0ICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIFFWYXJpYW50TGlz
dCByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA8PCB2YXI7CisgICAgICAgICAg
ICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIGRp
c3QgPSAxMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBx
Q29udkRlYnVnKCkgPDwgImZhaWxlZCBtYWtpbmcgc2luZ2xlIGxlbmd0aCB2YXJsaXN0IjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBjYXNlIFFNZXRhVHlwZTo6UVN0cmluZ0xpc3Q6IHsKKyAgICAgICAgICAgIGlmICh0eXBl
ID09IFJUQXJyYXkpIHsKKyAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkqIHJ0YXJyYXkgPSBz
dGF0aWNfY2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOworCisgICAgICAgICAgICAgICAgUVN0
cmluZ0xpc3QgcmVzdWx0OworICAgICAgICAgICAgICAgIGludCBsZW4gPSBydGFycmF5LT5nZXRM
ZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7
CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gcnRhcnJheS0+Z2V0Q29uY3JldGVB
cnJheSgpLT52YWx1ZUF0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIHVz
dHJpbmcgPSB2YWwudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAgICAgICAgICAg
ICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBs
KCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChxc3RyaW5nKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZGlzdCA9IDU7CisgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQocmVzdWx0KTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBBcnJheSkgeworICAgICAgICAgICAgICAg
IEpTQXJyYXkqIGFycmF5ID0gc3RhdGljX2Nhc3Q8SlNBcnJheSo+KG9iamVjdCk7CisKKyAgICAg
ICAgICAgICAgICBRU3RyaW5nTGlzdCByZXN1bHQ7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9
IGFycmF5LT5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxl
bjsgKytpKSB7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gYXJyYXktPmdldChl
eGVjLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBxc3Ry
aW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCks
IHVzdHJpbmcubGVuZ3RoKCkpOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQo
cXN0cmluZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRpc3QgPSA1Owor
ICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIE1ha2UgYSBzaW5nbGUgbGVuZ3RoIGFycmF5CisgICAg
ICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOworICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0
IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsK
KyAgICAgICAgICAgICAgICBRU3RyaW5nTGlzdCByZXN1bHQ7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChxc3RyaW5nKTsKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChyZXN1
bHQpOworICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFCeXRlQXJy
YXk6IHsKKyAgICAgICAgICAgIGlmICh0eXBlID09IEpTVWludDhDbGFtcGVkQXJyYXkpIHsKKyAg
ICAgICAgICAgICAgICBXVEY6OlVpbnQ4Q2xhbXBlZEFycmF5KiBhcnIgPSB0b1VpbnQ4Q2xhbXBl
ZEFycmF5KHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChRQnl0ZUFycmF5
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGFyci0+ZGF0YSgpKSwgYXJyLT5sZW5ndGgo
KSkpOworICAgICAgICAgICAgICAgIGRpc3QgPSAwOworICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CisgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUVN0cmluZygoY29uc3Qg
UUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpLnRv
TGF0aW4xKCkpOworICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFN0cmluZykKKyAgICAgICAg
ICAgICAgICAgICAgZGlzdCA9IDU7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBkaXN0ID0gMTA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRRGF0ZVRpbWU6CisgICAgICAgIGNh
c2UgUU1ldGFUeXBlOjpRRGF0ZToKKyAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFUaW1lOgorICAg
ICAgICAgICAgaWYgKHR5cGUgPT0gRGF0ZSkgeworICAgICAgICAgICAgICAgIERhdGVJbnN0YW5j
ZSogZGF0ZSA9IHN0YXRpY19jYXN0PERhdGVJbnN0YW5jZSo+KG9iamVjdCk7CisgICAgICAgICAg
ICAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ2R0OworICAgICAgICAgICAgICAgIG1zVG9HcmVnb3Jp
YW5EYXRlVGltZShleGVjLCBkYXRlLT5pbnRlcm5hbE51bWJlcigpLCB0cnVlLCBnZHQpOworICAg
ICAgICAgICAgICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGVUaW1lKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldCA9IFFEYXRlVGltZShRRGF0ZShnZHQueWVhciArIDE5MDAsIGdkdC5t
b250aCArIDEsIGdkdC5tb250aERheSksIFFUaW1lKGdkdC5ob3VyLCBnZHQubWludXRlLCBnZHQu
c2Vjb25kKSwgUXQ6OlVUQyk7CisgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAwOworICAgICAg
ICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSBRTWV0YVR5cGU6OlFEYXRlKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldCA9IFFEYXRlKGdkdC55ZWFyICsgMTkwMCwgZ2R0Lm1vbnRoICsgMSwg
Z2R0Lm1vbnRoRGF5KTsKKyAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDE7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVRpbWUoZ2R0LmhvdXIg
KyAxOTAwLCBnZHQubWludXRlLCBnZHQuc2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAgZGlz
dCA9IDI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09
IE51bWJlcikgeworICAgICAgICAgICAgICAgIGRvdWJsZSBiID0gdmFsdWUudG9OdW1iZXIoZXhl
Yyk7CisgICAgICAgICAgICAgICAgR3JlZ29yaWFuRGF0ZVRpbWUgZ2R0OworICAgICAgICAgICAg
ICAgIG1zVG9HcmVnb3JpYW5EYXRlVGltZShleGVjLCBiLCB0cnVlLCBnZHQpOworICAgICAgICAg
ICAgICAgIGlmIChoaW50ID09IFFNZXRhVHlwZTo6UURhdGVUaW1lKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldCA9IFFEYXRlVGltZShRRGF0ZShnZHQueWVhciArIDE5MDAsIGdkdC5tb250aCAr
IDEsIGdkdC5tb250aERheSksIFFUaW1lKGdkdC5ob3VyLCBnZHQubWludXRlLCBnZHQuc2Vjb25k
KSwgUXQ6OlVUQyk7CisgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA2OworICAgICAgICAgICAg
ICAgIH0gZWxzZSBpZiAoaGludCA9PSBRTWV0YVR5cGU6OlFEYXRlKSB7CisgICAgICAgICAgICAg
ICAgICAgIHJldCA9IFFEYXRlKGdkdC55ZWFyICsgMTkwMCwgZ2R0Lm1vbnRoICsgMSwgZ2R0Lm1v
bnRoRGF5KTsKKyAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDg7CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVRpbWUoZ2R0LmhvdXIsIGdkdC5t
aW51dGUsIGdkdC5zZWNvbmQpOworICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7CisgICAg
ICAgICAgICAgICAgfQorI2lmbmRlZiBRVF9OT19EQVRFU1RSSU5HCisgICAgICAgICAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gU3RyaW5nKSB7CisgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5n
ID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAgICAgICAgICAgIFFT
dHJpbmcgcXN0cmluZyA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hh
cmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKKworICAgICAgICAgICAgICAgIGlmIChoaW50
ID09IFFNZXRhVHlwZTo6UURhdGVUaW1lKSB7CisgICAgICAgICAgICAgICAgICAgIFFEYXRlVGlt
ZSBkdCA9IFFEYXRlVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6SVNPRGF0ZSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZHQgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlRleHREYXRlKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBkdCA9IFFEYXRlVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6U3lzdGVtTG9jYWxl
RGF0ZSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgZHQgPSBRRGF0ZVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6Okxv
Y2FsZURhdGUpOworICAgICAgICAgICAgICAgICAgICBpZiAoZHQuaXNWYWxpZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICByZXQgPSBkdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRp
c3QgPSAyOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlm
IChoaW50ID09IFFNZXRhVHlwZTo6UURhdGUpIHsKKyAgICAgICAgICAgICAgICAgICAgUURhdGUg
ZHQgPSBRRGF0ZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6SVNPRGF0ZSk7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZHQg
PSBRRGF0ZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6VGV4dERhdGUpOworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0g
UURhdGU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlN5c3RlbUxvY2FsZURhdGUpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGR0ID0gUURhdGU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OkxvY2FsZURhdGUpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoZHQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByZXQgPSBkdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAzOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgUVRpbWUgZHQgPSBRVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6SVNPRGF0ZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghZHQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgZHQgPSBRVGltZTo6ZnJvbVN0cmluZyhxc3RyaW5nLCBRdDo6VGV4dERhdGUpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGR0ID0gUVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlN5c3RlbUxvY2FsZURhdGUp
OworICAgICAgICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGR0ID0gUVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OkxvY2FsZURhdGUp
OworICAgICAgICAgICAgICAgICAgICBpZiAoZHQuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXQgPSBkdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAzOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorI2VuZGlmIC8vIFFUX05P
X0RBVEVTVFJJTkcKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGNhc2UgUU1ldGFUeXBlOjpRUmVnRXhwOgorICAgICAgICAgICAgaWYgKHR5cGUgPT0gUmVnRXhw
KSB7CisvKgorICAgICAgICAgICAgICAgIFJlZ0V4cE9iamVjdCAqcmUgPSBzdGF0aWNfY2FzdDxS
ZWdFeHBPYmplY3QqPihvYmplY3QpOworKi8KKyAgICAgICAgICAgICAgICAvLyBBdHRlbXB0IHRv
IGNvbnZlcnQuLiBhIGJpdCByaXNreQorICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgICAgICAgICBRU3Ry
aW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJh
Y3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSk7CisKKyAgICAgICAgICAgICAgICAvLyB0aGlzIGlz
IG9mIHRoZSBmb3JtICcveHh4eHh4L2knCisgICAgICAgICAgICAgICAgaW50IGZpcnN0U2xhc2gg
PSBxc3RyaW5nLmluZGV4T2YoUUxhdGluMUNoYXIoJy8nKSk7CisgICAgICAgICAgICAgICAgaW50
IGxhc3RTbGFzaCA9IHFzdHJpbmcubGFzdEluZGV4T2YoUUxhdGluMUNoYXIoJy8nKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGZpcnN0U2xhc2ggPj0wICYmIGxhc3RTbGFzaCA+IGZpcnN0U2xhc2gp
IHsKKyAgICAgICAgICAgICAgICAgICAgUVJlZ0V4cCByZWFsUmU7CisKKyAgICAgICAgICAgICAg
ICAgICAgcmVhbFJlLnNldFBhdHRlcm4ocXN0cmluZy5taWQoZmlyc3RTbGFzaCArIDEsIGxhc3RT
bGFzaCAtIGZpcnN0U2xhc2ggLSAxKSk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKHFzdHJp
bmcubWlkKGxhc3RTbGFzaCArIDEpLmNvbnRhaW5zKFFMYXRpbjFDaGFyKCdpJykpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVhbFJlLnNldENhc2VTZW5zaXRpdml0eShRdDo6Q2FzZUluc2Vu
c2l0aXZlKTsKKworICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVl
KHJlYWxSZSk7CisgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAwOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiY291bGRuJ3Qg
cGFyc2UgYSBKUyByZWdleHAiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAodHlwZSA9PSBTdHJpbmcpIHsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcg
PSB2YWx1ZS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgICAgICAgICAgUVN0
cmluZyBxc3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFy
YWN0ZXJzKCksIHVzdHJpbmcubGVuZ3RoKCkpOworCisgICAgICAgICAgICAgICAgUVJlZ0V4cCBy
ZShxc3RyaW5nKTsKKyAgICAgICAgICAgICAgICBpZiAocmUuaXNWYWxpZCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmUpOworICAgICAgICAgICAg
ICAgICAgICBkaXN0ID0gMTA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFPYmplY3RTdGFyOgor
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gUU9iaikgeworICAgICAgICAgICAgICAgIFF0SW5zdGFu
Y2UqIHF0aW5zdCA9IFF0SW5zdGFuY2U6OmdldEluc3RhbmNlKG9iamVjdCk7CisgICAgICAgICAg
ICAgICAgaWYgKHF0aW5zdCkgeworICAgICAgICAgICAgICAgICAgICBpZiAocXRpbnN0LT5nZXRP
YmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJmb3Vu
ZCBpbnN0YW5jZSwgd2l0aCBvYmplY3Q6IiA8PCAodm9pZCopIHF0aW5zdC0+Z2V0T2JqZWN0KCk7
CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHF0aW5z
dC0+Z2V0T2JqZWN0KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8
IHJldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAwOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJj
YW4ndCBjb252ZXJ0IGRlbGV0ZWQgcW9iamVjdCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkg
PDwgIndhc24ndCBhIHF0aW5zdGFuY2UiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSBpZiAodHlwZSA9PSBOdWxsKSB7CisgICAgICAgICAgICAgICAgUU9iamVjdCogbnVs
bG9iaiA9IDA7CisgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShudWxs
b2JqKTsKKyAgICAgICAgICAgICAgICBkaXN0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJwcmV2aW91cyB0eXBlIHdhcyBub3QgYW4g
b2JqZWN0OiIgPDwgdHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgUU1ldGFUeXBlOjpWb2lkU3RhcjoKKyAgICAgICAgICAgIGlmICh0eXBlID09
IFFPYmopIHsKKyAgICAgICAgICAgICAgICBRdEluc3RhbmNlKiBxdGluc3QgPSBRdEluc3RhbmNl
OjpnZXRJbnN0YW5jZShvYmplY3QpOworICAgICAgICAgICAgICAgIGlmIChxdGluc3QpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHF0aW5zdC0+Z2V0T2JqZWN0KCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiZm91bmQgaW5zdGFuY2UsIHdpdGggb2JqZWN0
OiIgPDwgKHZvaWQqKSBxdGluc3QtPmdldE9iamVjdCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZSgodm9pZCAqKXF0aW5zdC0+Z2V0T2JqZWN0KCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8IHJldDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRpc3QgPSAwOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJjYW4ndCBjb252ZXJ0IGRl
bGV0ZWQgcW9iamVjdCI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgIndhc24ndCBhIHF0
aW5zdGFuY2UiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlw
ZSA9PSBOdWxsKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZSgo
dm9pZCopMCk7CisgICAgICAgICAgICAgICAgZGlzdCA9IDA7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKHR5cGUgPT0gTnVtYmVyKSB7CisgICAgICAgICAgICAgICAgLy8gSSBkb24ndCB0aGluayB0
aGF0IGNvbnZlcnRpbmcgYSBkb3VibGUgdG8gYSBwb2ludGVyIGlzIGEgd2lzZQorICAgICAgICAg
ICAgICAgIC8vIG1vdmUuICBFeGNlcHQgbWF5YmUgMC4KKyAgICAgICAgICAgICAgICBxQ29udkRl
YnVnKCkgPDwgImdvdCBudW1iZXIgZm9yIHZvaWQgKiAtIG5vdCBjb252ZXJ0aW5nLCBzZWVtcyB1
bnNhZmU6IiA8PCB2YWx1ZS50b051bWJlcihleGVjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJ2b2lkKiAtIHVuaGFuZGxlZCB0eXBlIiA8
PCB0eXBlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIC8vIE5vbiBjb25zdCB0eXBlIGlkcworICAgICAgICAgICAgaWYg
KGhpbnQgPT0gKFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UU9iamVjdExpc3Q+KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gUlRBcnJheSkgeworICAg
ICAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkqIHJ0YXJyYXkgPSBzdGF0aWNfY2FzdDxSdW50
aW1lQXJyYXkqPihvYmplY3QpOworCisgICAgICAgICAgICAgICAgICAgIFFPYmplY3RMaXN0IHJl
c3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGxlbiA9IHJ0YXJyYXktPmdldExlbmd0aCgp
OworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IHJ0YXJyYXktPmdldENvbmNyZXRl
QXJyYXkoKS0+dmFsdWVBdChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBp
dGVtZGlzdCA9IC0xOworICAgICAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNv
bnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsLCBRTWV0YVR5cGU6OlFPYmplY3RTdGFyLCAm
aXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8UU9iamVjdCo+KCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGRpZG4ndCBmYWls
IGNvbnZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb3VudCgpID09IGxl
bikgeworICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7CisgICAgICAgICAgICAgICAg
ICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgSlNPYmplY3QqIG9iamVjdCA9IHZhbHVlLnRvT2JqZWN0KGV4ZWMp
OworICAgICAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpTQXJy
YXkgKj4ob2JqZWN0KTsKKyAgICAgICAgICAgICAgICAgICAgUU9iamVjdExpc3QgcmVzdWx0Owor
ICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOworICAgICAgICAg
ICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFU
eXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGlt
aXQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1kaXN0ID49IDApCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPFFPYmplY3QqPigp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAv
LyBJZiB3ZSBkaWRuJ3QgZmFpbCBjb252ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIGlmIChy
ZXN1bHQuY291bnQoKSA9PSBsZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1
bHQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gTWFrZSBhIHNpbmdsZSBsZW5ndGggYXJyYXkKKyAgICAgICAg
ICAgICAgICAgICAgUU9iamVjdExpc3QgcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBpbnQg
aXRlbWRpc3QgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZl
cnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsdWUsIFFNZXRhVHlwZTo6UU9iamVjdFN0YXIsICZp
dGVtZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGl0ZW1kaXN0ID49IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoaXRlbS52YWx1ZTxRT2JqZWN0Kj4oKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkaXN0ID0gMTA7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJv
bVZhbHVlKHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGhpbnQgPT0g
KFFNZXRhVHlwZTo6VHlwZSkgcU1ldGFUeXBlSWQ8UUxpc3Q8aW50PiA+KCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAodHlwZSA9PSBSVEFycmF5KSB7CisgICAgICAgICAgICAgICAgICAgIFJ1bnRp
bWVBcnJheSogcnRhcnJheSA9IHN0YXRpY19jYXN0PFJ1bnRpbWVBcnJheSo+KG9iamVjdCk7CisK
KyAgICAgICAgICAgICAgICAgICAgUUxpc3Q8aW50PiByZXN1bHQ7CisgICAgICAgICAgICAgICAg
ICAgIGludCBsZW4gPSBydGFycmF5LT5nZXRMZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
SlNWYWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVlQXQoZXhlYywg
aSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4
ZWMsIHZhbCwgUU1ldGFUeXBlOjpJbnQsICZpdGVtZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vy
c2lvbkxpbWl0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxpbnQ+
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IC8vIElmIHdlIGRpZG4ndCBmYWlsIGNvbnZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdC5jb3VudCgpID09IGxlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9
IDU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJl
c3VsdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHR5cGUgPT0gQXJyYXkpIHsKKyAgICAgICAgICAgICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBz
dGF0aWNfY2FzdDxKU0FycmF5ICo+KG9iamVjdCk7CisKKyAgICAgICAgICAgICAgICAgICAgUUxp
c3Q8aW50PiByZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgIGludCBsZW4gPSBhcnJheS0+bGVu
Z3RoKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gYXJyYXktPmdldChleGVj
LCBpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBpdGVtZGlzdCA9IC0xOworICAgICAg
ICAgICAgICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQo
ZXhlYywgdmFsLCBRTWV0YVR5cGU6OkludCwgJml0ZW1kaXN0LCB2aXNpdGVkT2JqZWN0cywgcmVj
dXJzaW9uTGltaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1kaXN0ID49IDAp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVlPGlu
dD4oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgd2UgZGlkbid0IGZhaWwgY29udmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBp
ZiAocmVzdWx0LmNvdW50KCkgPT0gbGVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0
ID0gNTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUo
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIE1ha2UgYSBzaW5nbGUgbGVuZ3RoIGFycmF5CisgICAg
ICAgICAgICAgICAgICAgIFFMaXN0PGludD4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBp
bnQgaXRlbWRpc3QgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgUVZhcmlhbnQgaXRlbSA9IGNv
bnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsdWUsIFFNZXRhVHlwZTo6SW50LCAmaXRlbWRp
c3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChpdGVtZGlzdCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKGl0ZW0udmFsdWU8aW50PigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAx
MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVz
dWx0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoUXRQaXhtYXBJbnN0YW5jZTo6
Y2FuSGFuZGxlKHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlwZT4oaGludCkpKSB7CisgICAgICAg
ICAgICAgICAgcmV0ID0gUXRQaXhtYXBJbnN0YW5jZTo6dmFyaWFudEZyb21PYmplY3Qob2JqZWN0
LCBzdGF0aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KGhpbnQpKTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoY3VzdG9tUnVudGltZUNvbnZlcnNpb25zKCktPmNvbnRhaW5zKGhpbnQpKSB7CisgICAg
ICAgICAgICAgICAgcmV0ID0gY3VzdG9tUnVudGltZUNvbnZlcnNpb25zKCktPnZhbHVlKGhpbnQp
LnRvVmFyaWFudEZ1bmMob2JqZWN0LCAmZGlzdCwgdmlzaXRlZE9iamVjdHMpOworICAgICAgICAg
ICAgICAgIGlmIChkaXN0ID09IDApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChoaW50ID09IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFW
YXJpYW50PigpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxs
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgKmRpc3RhbmNlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFFWYXJp
YW50KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHR5cGUgPT0gT2JqZWN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBTaW5jZSB3ZSBo
YXZlbid0IHJlYWxseSB2aXNpdGVkIHRoaXMgb2JqZWN0IHlldCwgd2UgcmVtb3ZlIGl0CisgICAg
ICAgICAgICAgICAgICAgICAgICB2aXNpdGVkT2JqZWN0cy0+cmVtb3ZlKG9iamVjdCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAvLyBBbmQgdGhlbiByZWN1
cnNlIHdpdGggdGhlIGF1dG9kZXRlY3QgZmxhZworICAgICAgICAgICAgICAgICAgICByZXQgPSBj
b252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5cGU6OlZvaWQsIGRpc3Rh
bmNlLCB2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOworICAgICAgICAgICAgICAgICAg
ICBkaXN0ID0gMTA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBkaXN0ID0gMTA7CisgICAgICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICBpZiAoIXJldC5pc1ZhbGlkKCkpCisgICAgICAgIGRpc3QgPSAtMTsK
KyAgICBpZiAoZGlzdGFuY2UpCisgICAgICAgICpkaXN0YW5jZSA9IGRpc3Q7CisKKyAgICByZXR1
cm4gcmV0OworfQorCitRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSwgUU1ldGFUeXBlOjpUeXBlIGhpbnQsIGludCAqZGlzdGFuY2Up
Cit7CisgICAgY29uc3QgaW50IHJlY3Vyc2lvbkxpbWl0ID0gMjAwOworICAgIEhhc2hTZXQ8SlNP
YmplY3QqPiB2aXNpdGVkT2JqZWN0czsKKyAgICByZXR1cm4gY29udmVydFZhbHVlVG9RVmFyaWFu
dChleGVjLCB2YWx1ZSwgaGludCwgZGlzdGFuY2UsICZ2aXNpdGVkT2JqZWN0cywgcmVjdXJzaW9u
TGltaXQpOworfQorCitKU1ZhbHVlIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoRXhlY1N0YXRlKiBl
eGVjLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3QsIGNvbnN0IFFWYXJpYW50JiB2YXJpYW50
KQoreworICAgIC8vIFZhcmlhbnRzIHdpdGggUU9iamVjdCAqIGNhbiBiZSBpc051bGwgYnV0IG5v
dCBhIG51bGwgcG9pbnRlcgorICAgIC8vIEFuIGVtcHR5IFFTdHJpbmcgdmFyaWFudCBpcyBhbHNv
IG51bGwKKyAgICBRTWV0YVR5cGU6OlR5cGUgdHlwZSA9IChRTWV0YVR5cGU6OlR5cGUpIHZhcmlh
bnQudXNlclR5cGUoKTsKKworICAgIHFDb252RGVidWcoKSA8PCAiY29udmVydFFWYXJpYW50VG9W
YWx1ZTogbWV0YXR5cGU6IiA8PCB0eXBlIDw8ICIsIGlzbnVsbDogIiA8PCB2YXJpYW50LmlzTnVs
bCgpOworICAgIGlmICh2YXJpYW50LmlzTnVsbCgpICYmCisgICAgICAgIHR5cGUgIT0gUU1ldGFU
eXBlOjpRT2JqZWN0U3RhciAmJgorICAgICAgICB0eXBlICE9IFFNZXRhVHlwZTo6Vm9pZFN0YXIg
JiYKKyAgICAgICAgdHlwZSAhPSBRTWV0YVR5cGU6OlFXaWRnZXRTdGFyICYmCisgICAgICAgIHR5
cGUgIT0gUU1ldGFUeXBlOjpRU3RyaW5nKSB7CisgICAgICAgIHJldHVybiBqc051bGwoKTsKKyAg
ICB9CisKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOworCisgICAgaWYg
KHR5cGUgPT0gUU1ldGFUeXBlOjpCb29sKQorICAgICAgICByZXR1cm4ganNCb29sZWFuKHZhcmlh
bnQudG9Cb29sKCkpOworCisgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpJbnQgfHwKKyAgICAg
ICAgdHlwZSA9PSBRTWV0YVR5cGU6OlVJbnQgfHwKKyAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6
OkxvbmcgfHwKKyAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OlVMb25nIHx8CisgICAgICAgIHR5
cGUgPT0gUU1ldGFUeXBlOjpMb25nTG9uZyB8fAorICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6
VUxvbmdMb25nIHx8CisgICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpTaG9ydCB8fAorICAgICAg
ICB0eXBlID09IFFNZXRhVHlwZTo6VVNob3J0IHx8CisgICAgICAgIHR5cGUgPT0gUU1ldGFUeXBl
OjpGbG9hdCB8fAorICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6RG91YmxlKQorICAgICAgICBy
ZXR1cm4ganNOdW1iZXIodmFyaWFudC50b0RvdWJsZSgpKTsKKworICAgIGlmICh0eXBlID09IFFN
ZXRhVHlwZTo6UVJlZ0V4cCkgeworICAgICAgICBRUmVnRXhwIHJlID0gdmFyaWFudC52YWx1ZTxR
UmVnRXhwPigpOworCisgICAgICAgIGlmIChyZS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIFVT
dHJpbmcgcGF0dGVybigoVUNoYXIqKXJlLnBhdHRlcm4oKS51dGYxNigpLCByZS5wYXR0ZXJuKCku
bGVuZ3RoKCkpOworICAgICAgICAgICAgUmVnRXhwRmxhZ3MgZmxhZ3MgPSAocmUuY2FzZVNlbnNp
dGl2aXR5KCkgPT0gUXQ6OkNhc2VJbnNlbnNpdGl2ZSkgPyBGbGFnSWdub3JlQ2FzZSA6IE5vRmxh
Z3M7CisKKyAgICAgICAgICAgIEpTQzo6UmVnRXhwKiByZWdFeHAgPSBKU0M6OlJlZ0V4cDo6Y3Jl
YXRlKGV4ZWMtPmdsb2JhbERhdGEoKSwgcGF0dGVybiwgZmxhZ3MpOworICAgICAgICAgICAgaWYg
KHJlZ0V4cC0+aXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBSZWdFeHBPYmplY3Q6
OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMtPmxleGljYWxH
bG9iYWxPYmplY3QoKS0+cmVnRXhwU3RydWN0dXJlKCksIHJlZ0V4cCk7CisgICAgICAgICAgICBy
ZXR1cm4ganNOdWxsKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBRTWV0
YVR5cGU6OlFEYXRlVGltZSB8fAorICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6UURhdGUgfHwK
KyAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OlFUaW1lKSB7CisKKyAgICAgICAgUURhdGUgZGF0
ZSA9IFFEYXRlOjpjdXJyZW50RGF0ZSgpOworICAgICAgICBRVGltZSB0aW1lKDAsMCwwKTsgLy8g
bWlkbmlnaHQKKworICAgICAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFEYXRlKQorICAgICAg
ICAgICAgZGF0ZSA9IHZhcmlhbnQudmFsdWU8UURhdGU+KCk7CisgICAgICAgIGVsc2UgaWYgKHR5
cGUgPT0gUU1ldGFUeXBlOjpRVGltZSkKKyAgICAgICAgICAgIHRpbWUgPSB2YXJpYW50LnZhbHVl
PFFUaW1lPigpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFFEYXRlVGltZSBkdCA9IHZh
cmlhbnQudmFsdWU8UURhdGVUaW1lPigpLnRvTG9jYWxUaW1lKCk7CisgICAgICAgICAgICBkYXRl
ID0gZHQuZGF0ZSgpOworICAgICAgICAgICAgdGltZSA9IGR0LnRpbWUoKTsKKyAgICAgICAgfQor
CisgICAgICAgIC8vIERhdGVzIHNwZWNpZmllZCB0aGlzIHdheSBhcmUgaW4gbG9jYWwgdGltZSAo
d2UgY29udmVydCBEYXRlVGltZXMgYWJvdmUpCisgICAgICAgIEdyZWdvcmlhbkRhdGVUaW1lIGR0
OworICAgICAgICBkdC55ZWFyID0gZGF0ZS55ZWFyKCkgLSAxOTAwOworICAgICAgICBkdC5tb250
aCA9IGRhdGUubW9udGgoKSAtIDE7CisgICAgICAgIGR0Lm1vbnRoRGF5ID0gZGF0ZS5kYXkoKTsK
KyAgICAgICAgZHQuaG91ciA9IHRpbWUuaG91cigpOworICAgICAgICBkdC5taW51dGUgPSB0aW1l
Lm1pbnV0ZSgpOworICAgICAgICBkdC5zZWNvbmQgPSB0aW1lLnNlY29uZCgpOworICAgICAgICBk
dC5pc0RTVCA9IC0xOworICAgICAgICBkb3VibGUgbXMgPSBncmVnb3JpYW5EYXRlVGltZVRvTVMo
ZXhlYywgZHQsIHRpbWUubXNlYygpLCAvKmlucHV0SXNVVEMqLyBmYWxzZSk7CisKKyAgICAgICAg
cmV0dXJuIERhdGVJbnN0YW5jZTo6Y3JlYXRlKGV4ZWMsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+ZGF0ZVN0cnVjdHVyZSgpLCB0cnVuYyhtcykpOworICAgIH0KKworICAgIGlmICh0eXBl
ID09IFFNZXRhVHlwZTo6UUJ5dGVBcnJheSkgeworICAgICAgICBRQnl0ZUFycmF5IHF0Qnl0ZUFy
cmF5ID0gdmFyaWFudC52YWx1ZTxRQnl0ZUFycmF5PigpOworICAgICAgICBXVEY6OlJlZlB0cjxX
VEY6OlVpbnQ4Q2xhbXBlZEFycmF5PiB3dGZCeXRlQXJyYXkgPSBXVEY6OlVpbnQ4Q2xhbXBlZEFy
cmF5OjpjcmVhdGVVbmluaXRpYWxpemVkKHF0Qnl0ZUFycmF5Lmxlbmd0aCgpKTsKKyAgICAgICAg
bWVtY3B5KHd0ZkJ5dGVBcnJheS0+ZGF0YSgpLCBxdEJ5dGVBcnJheS5jb25zdERhdGEoKSwgcXRC
eXRlQXJyYXkubGVuZ3RoKCkpOworICAgICAgICByZXR1cm4gdG9KUyhleGVjLCBzdGF0aWNfY2Fz
dDxKU0RPTUdsb2JhbE9iamVjdCo+KGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKSksIHd0ZkJ5
dGVBcnJheS5nZXQoKSk7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRT2Jq
ZWN0U3RhciB8fCB0eXBlID09IFFNZXRhVHlwZTo6UVdpZGdldFN0YXIpIHsKKyAgICAgICAgUU9i
amVjdCogb2JqID0gdmFyaWFudC52YWx1ZTxRT2JqZWN0Kj4oKTsKKyAgICAgICAgaWYgKCFvYmop
CisgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgICAgIHJldHVybiBRdEluc3RhbmNl
OjpnZXRRdEluc3RhbmNlKG9iaiwgcm9vdCwgUVNjcmlwdEVuZ2luZTo6UXRPd25lcnNoaXApLT5j
cmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOworICAgIH0KKworICAgIGlmIChRdFBpeG1hcEluc3Rh
bmNlOjpjYW5IYW5kbGUoc3RhdGljX2Nhc3Q8UU1ldGFUeXBlOjpUeXBlPih2YXJpYW50LnR5cGUo
KSkpKQorICAgICAgICByZXR1cm4gUXRQaXhtYXBJbnN0YW5jZTo6Y3JlYXRlUGl4bWFwUnVudGlt
ZU9iamVjdChleGVjLCByb290LCB2YXJpYW50KTsKKworICAgIGlmIChjdXN0b21SdW50aW1lQ29u
dmVyc2lvbnMoKS0+Y29udGFpbnModHlwZSkpIHsKKyAgICAgICAgaWYgKCFyb290LT5nbG9iYWxP
YmplY3QoKS0+aW5oZXJpdHMoJkpTRE9NV2luZG93OjpzX2luZm8pKQorICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gKHN0YXRp
Y19jYXN0PEpTRE9NV2luZG93Kj4ocm9vdC0+Z2xvYmFsT2JqZWN0KCkpKS0+aW1wbCgpLT5kb2N1
bWVudCgpOworICAgICAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgICAgIHJldHVybiBjdXN0b21SdW50aW1lQ29udmVyc2lvbnMoKS0+dmFs
dWUodHlwZSkudG9KU1ZhbHVlRnVuYyhleGVjLCB0b0pTRE9NR2xvYmFsT2JqZWN0KGRvY3VtZW50
LCBleGVjKSwgdmFyaWFudCk7CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpR
VmFyaWFudE1hcCkgeworICAgICAgICAvLyBjcmVhdGUgYSBuZXcgb2JqZWN0LCBhbmQgc3R1ZmYg
cHJvcGVydGllcyBpbnRvIGl0CisgICAgICAgIEpTT2JqZWN0KiByZXQgPSBjb25zdHJ1Y3RFbXB0
eU9iamVjdChleGVjKTsKKyAgICAgICAgUVZhcmlhbnRNYXAgbWFwID0gdmFyaWFudC52YWx1ZTxR
VmFyaWFudE1hcD4oKTsKKyAgICAgICAgUVZhcmlhbnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGkgPSBt
YXAuY29uc3RCZWdpbigpOworICAgICAgICB3aGlsZSAoaSAhPSBtYXAuY29uc3RFbmQoKSkgewor
ICAgICAgICAgICAgUVN0cmluZyBzID0gaS5rZXkoKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFs
ID0gY29udmVydFFWYXJpYW50VG9WYWx1ZShleGVjLCByb290LmdldCgpLCBpLnZhbHVlKCkpOwor
ICAgICAgICAgICAgaWYgKHZhbCkgeworICAgICAgICAgICAgICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90OworICAgICAgICAgICAgICAgIHJldC0+bWV0aG9kVGFibGUoKS0+cHV0KHJldCwgZXhlYywg
SWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCByZWludGVycHJldF9jYXN0X3B0cjxjb25z
dCBVQ2hhciAqPihzLmNvbnN0RGF0YSgpKSwgcy5sZW5ndGgoKSksIHZhbCwgc2xvdCk7CisgICAg
ICAgICAgICAgICAgLy8gIyMjIGVycm9yIGNhc2U/CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICArK2k7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIC8v
IExpc3QgdHlwZXMKKyAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFWYXJpYW50TGlzdCkgewor
ICAgICAgICBRVmFyaWFudExpc3QgdmwgPSB2YXJpYW50LnRvTGlzdCgpOworICAgICAgICBxQ29u
dkRlYnVnKCkgPDwgImdvdCBhICIgPDwgdmwuY291bnQoKSA8PCAiIGxlbmd0aCBsaXN0OiIgPDwg
dmw7CisgICAgICAgIHJldHVybiBSdW50aW1lQXJyYXk6OmNyZWF0ZShleGVjLCBuZXcgUXRBcnJh
eTxRVmFyaWFudD4odmwsIFFNZXRhVHlwZTo6Vm9pZCwgcm9vdCkpOworICAgIH0gZWxzZSBpZiAo
dHlwZSA9PSBRTWV0YVR5cGU6OlFTdHJpbmdMaXN0KSB7CisgICAgICAgIFFTdHJpbmdMaXN0IHNs
ID0gdmFyaWFudC52YWx1ZTxRU3RyaW5nTGlzdD4oKTsKKyAgICAgICAgcmV0dXJuIFJ1bnRpbWVB
cnJheTo6Y3JlYXRlKGV4ZWMsIG5ldyBRdEFycmF5PFFTdHJpbmc+KHNsLCBRTWV0YVR5cGU6OlFT
dHJpbmcsIHJvb3QpKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gKFFNZXRhVHlwZTo6VHlwZSkg
cU1ldGFUeXBlSWQ8UU9iamVjdExpc3Q+KCkpIHsKKyAgICAgICAgUU9iamVjdExpc3Qgb2w9IHZh
cmlhbnQudmFsdWU8UU9iamVjdExpc3Q+KCk7CisgICAgICAgIHJldHVybiBSdW50aW1lQXJyYXk6
OmNyZWF0ZShleGVjLCBuZXcgUXRBcnJheTxRT2JqZWN0Kj4ob2wsIFFNZXRhVHlwZTo6UU9iamVj
dFN0YXIsIHJvb3QpKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gKFFNZXRhVHlwZTo6VHlwZSlx
TWV0YVR5cGVJZDxRTGlzdDxpbnQ+ID4oKSkgeworICAgICAgICBRTGlzdDxpbnQ+IGlsPSB2YXJp
YW50LnZhbHVlPFFMaXN0PGludD4gPigpOworICAgICAgICByZXR1cm4gUnVudGltZUFycmF5Ojpj
cmVhdGUoZXhlYywgbmV3IFF0QXJyYXk8aW50PihpbCwgUU1ldGFUeXBlOjpJbnQsIHJvb3QpKTsK
KyAgICB9CisKKyAgICBpZiAodHlwZSA9PSAoUU1ldGFUeXBlOjpUeXBlKXFNZXRhVHlwZUlkPFFW
YXJpYW50PigpKSB7CisgICAgICAgIFFWYXJpYW50IHJlYWwgPSB2YXJpYW50LnZhbHVlPFFWYXJp
YW50PigpOworICAgICAgICBxQ29udkRlYnVnKCkgPDwgInJlYWwgdmFyaWFudCBpczoiIDw8IHJl
YWw7CisgICAgICAgIHJldHVybiBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKGV4ZWMsIHJvb3QsIHJl
YWwpOworICAgIH0KKworICAgIHFDb252RGVidWcoKSA8PCAiZmFsbGJhY2sgcGF0aCBmb3IiIDw8
IHZhcmlhbnQgPDwgdmFyaWFudC51c2VyVHlwZSgpOworCisgICAgUVN0cmluZyBzdHJpbmcgPSB2
YXJpYW50LnRvU3RyaW5nKCk7CisgICAgVVN0cmluZyB1c3RyaW5nKChVQ2hhciopc3RyaW5nLnV0
ZjE2KCksIHN0cmluZy5sZW5ndGgoKSk7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsIHVzdHJp
bmcpOworfQorCisvLyA9PT09PT09PT09PT09PT0KKworLy8gUXQtbGlrZSBtYWNyb3MKKyNkZWZp
bmUgUVdfRChDbGFzcykgQ2xhc3MjI0RhdGEqIGQgPSBkX2Z1bmMoKQorI2RlZmluZSBRV19EUyhD
bGFzcyxJbnN0YW5jZSkgQ2xhc3MjI0RhdGEqIGQgPSBJbnN0YW5jZS0+ZF9mdW5jKCkKKworY29u
c3QgQ2xhc3NJbmZvIFF0UnVudGltZU1ldGhvZDo6c19pbmZvID0geyAiUXRSdW50aW1lTWV0aG9k
IiwgJkludGVybmFsRnVuY3Rpb246OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShR
dFJ1bnRpbWVNZXRob2QpIH07CisKK1F0UnVudGltZU1ldGhvZDo6UXRSdW50aW1lTWV0aG9kKFF0
UnVudGltZU1ldGhvZERhdGEqIGRkLCBFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0
dXJlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyKQorICAgIDogSW50ZXJuYWxGdW5jdGlv
bihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIHN0cnVjdHVyZSkKKyAgICAsIGRfcHRyKGRk
KQoreworfQorCit2b2lkIFF0UnVudGltZU1ldGhvZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQYXNzUmVmUHRyPFF0SW5zdGFu
Y2U+IGluc3RhbmNlKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMtPmdsb2JhbERh
dGEoKSwgaWRlbnRpZmllcik7CisgICAgUVdfRChRdFJ1bnRpbWVNZXRob2QpOworICAgIGQtPm1f
aW5zdGFuY2UgPSBpbnN0YW5jZTsKKyAgICBkLT5tX2ZpbmFsaXplciA9IFBhc3NXZWFrPFF0UnVu
dGltZU1ldGhvZD4odGhpcywgZCk7Cit9CisKK1F0UnVudGltZU1ldGhvZDo6flF0UnVudGltZU1l
dGhvZCgpCit7CisgICAgZGVsZXRlIGRfcHRyOworfQorCit2b2lkIFF0UnVudGltZU1ldGhvZDo6
ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAganNDYXN0PFF0UnVudGltZU1ldGhvZCo+KGNl
bGwpLT5RdFJ1bnRpbWVNZXRob2Q6On5RdFJ1bnRpbWVNZXRob2QoKTsKK30KKworLy8gPT09PT09
PT09PT09PT09CisKK1F0UnVudGltZU1ldGhvZERhdGE6On5RdFJ1bnRpbWVNZXRob2REYXRhKCkK
K3sKK30KKwordm9pZCBRdFJ1bnRpbWVNZXRob2REYXRhOjpmaW5hbGl6ZShIYW5kbGU8VW5rbm93
bj4gdmFsdWUsIHZvaWQqKQoreworICAgIG1faW5zdGFuY2UtPnJlbW92ZUNhY2hlZE1ldGhvZChz
dGF0aWNfY2FzdDxKU09iamVjdCo+KHZhbHVlLmdldCgpLmFzQ2VsbCgpKSk7Cit9CisKK1F0UnVu
dGltZU1ldGFNZXRob2REYXRhOjp+UXRSdW50aW1lTWV0YU1ldGhvZERhdGEoKQoreworCit9CisK
K1F0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhOjp+UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZERhdGEoKQoreworCit9CisKKy8vID09PT09PT09PT09PT09PQorCisvLyBUeXBlIGNvbnZlcnNp
b24gbWV0YWRhdGEgKGZyb20gUXRTY3JpcHQgb3JpZ2luYWxseSkKK2NsYXNzIFF0TWV0aG9kTWF0
Y2hUeXBlCit7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgSW52YWxpZCwKKyAg
ICAgICAgVmFyaWFudCwKKyAgICAgICAgTWV0YVR5cGUsCisgICAgICAgIFVucmVzb2x2ZWQsCisg
ICAgICAgIE1ldGFFbnVtCisgICAgfTsKKworCisgICAgUXRNZXRob2RNYXRjaFR5cGUoKQorICAg
ICAgICA6IG1fa2luZChJbnZhbGlkKSB7IH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0CisgICAg
eyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBRTWV0YVR5cGU6OlR5cGUgdHlwZUlkKCkgY29uc3Q7
CisKKyAgICBib29sIGlzVmFsaWQoKSBjb25zdAorICAgIHsgcmV0dXJuIChtX2tpbmQgIT0gSW52
YWxpZCk7IH0KKworICAgIGJvb2wgaXNWYXJpYW50KCkgY29uc3QKKyAgICB7IHJldHVybiAobV9r
aW5kID09IFZhcmlhbnQpOyB9CisKKyAgICBib29sIGlzTWV0YVR5cGUoKSBjb25zdAorICAgIHsg
cmV0dXJuIChtX2tpbmQgPT0gTWV0YVR5cGUpOyB9CisKKyAgICBib29sIGlzVW5yZXNvbHZlZCgp
IGNvbnN0CisgICAgeyByZXR1cm4gKG1fa2luZCA9PSBVbnJlc29sdmVkKTsgfQorCisgICAgYm9v
bCBpc01ldGFFbnVtKCkgY29uc3QKKyAgICB7IHJldHVybiAobV9raW5kID09IE1ldGFFbnVtKTsg
fQorCisgICAgUUJ5dGVBcnJheSBuYW1lKCkgY29uc3Q7CisKKyAgICBpbnQgZW51bWVyYXRvcklu
ZGV4KCkgY29uc3QKKyAgICB7IFFfQVNTRVJUKGlzTWV0YUVudW0oKSk7IHJldHVybiBtX3R5cGVJ
ZDsgfQorCisgICAgc3RhdGljIFF0TWV0aG9kTWF0Y2hUeXBlIHZhcmlhbnQoKQorICAgIHsgcmV0
dXJuIFF0TWV0aG9kTWF0Y2hUeXBlKFZhcmlhbnQpOyB9CisKKyAgICBzdGF0aWMgUXRNZXRob2RN
YXRjaFR5cGUgbWV0YVR5cGUoaW50IHR5cGVJZCwgY29uc3QgUUJ5dGVBcnJheSAmbmFtZSkKKyAg
ICB7IHJldHVybiBRdE1ldGhvZE1hdGNoVHlwZShNZXRhVHlwZSwgdHlwZUlkLCBuYW1lKTsgfQor
CisgICAgc3RhdGljIFF0TWV0aG9kTWF0Y2hUeXBlIG1ldGFFbnVtKGludCBlbnVtSW5kZXgsIGNv
bnN0IFFCeXRlQXJyYXkgJm5hbWUpCisgICAgeyByZXR1cm4gUXRNZXRob2RNYXRjaFR5cGUoTWV0
YUVudW0sIGVudW1JbmRleCwgbmFtZSk7IH0KKworICAgIHN0YXRpYyBRdE1ldGhvZE1hdGNoVHlw
ZSB1bnJlc29sdmVkKGNvbnN0IFFCeXRlQXJyYXkgJm5hbWUpCisgICAgeyByZXR1cm4gUXRNZXRo
b2RNYXRjaFR5cGUoVW5yZXNvbHZlZCwgLyp0eXBlSWQ9Ki8wLCBuYW1lKTsgfQorCitwcml2YXRl
OgorICAgIFF0TWV0aG9kTWF0Y2hUeXBlKEtpbmQga2luZCwgaW50IHR5cGVJZCA9IDAsIGNvbnN0
IFFCeXRlQXJyYXkgJm5hbWUgPSBRQnl0ZUFycmF5KCkpCisgICAgICAgIDogbV9raW5kKGtpbmQp
LCBtX3R5cGVJZCh0eXBlSWQpLCBtX25hbWUobmFtZSkgeyB9CisKKyAgICBLaW5kIG1fa2luZDsK
KyAgICBpbnQgbV90eXBlSWQ7CisgICAgUUJ5dGVBcnJheSBtX25hbWU7Cit9OworCitRTWV0YVR5
cGU6OlR5cGUgUXRNZXRob2RNYXRjaFR5cGU6OnR5cGVJZCgpIGNvbnN0Cit7CisgICAgaWYgKGlz
VmFyaWFudCgpKQorICAgICAgICByZXR1cm4gKFFNZXRhVHlwZTo6VHlwZSkgUU1ldGFUeXBlOjp0
eXBlKCJRVmFyaWFudCIpOworICAgIHJldHVybiAoUU1ldGFUeXBlOjpUeXBlKSAoaXNNZXRhRW51
bSgpID8gUU1ldGFUeXBlOjpJbnQgOiBtX3R5cGVJZCk7Cit9CisKK1FCeXRlQXJyYXkgUXRNZXRo
b2RNYXRjaFR5cGU6Om5hbWUoKSBjb25zdAoreworICAgIGlmICghbV9uYW1lLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIG1fbmFtZTsKKyAgICBlbHNlIGlmIChtX2tpbmQgPT0gVmFyaWFudCkK
KyAgICAgICAgcmV0dXJuICJRVmFyaWFudCI7CisgICAgcmV0dXJuIFFCeXRlQXJyYXkoKTsKK30K
Kworc3RydWN0IFF0TWV0aG9kTWF0Y2hEYXRhCit7CisgICAgaW50IG1hdGNoRGlzdGFuY2U7Cisg
ICAgaW50IGluZGV4OworICAgIFFWZWN0b3I8UXRNZXRob2RNYXRjaFR5cGU+IHR5cGVzOworICAg
IFFWYXJMZW5ndGhBcnJheTxRVmFyaWFudCwgMTA+IGFyZ3M7CisKKyAgICBRdE1ldGhvZE1hdGNo
RGF0YShpbnQgZGlzdCwgaW50IGlkeCwgUVZlY3RvcjxRdE1ldGhvZE1hdGNoVHlwZT4gdHlwcywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUVZhckxlbmd0aEFycmF5PFFW
YXJpYW50LCAxMD4gJmFzKQorICAgICAgICA6IG1hdGNoRGlzdGFuY2UoZGlzdCksIGluZGV4KGlk
eCksIHR5cGVzKHR5cHMpLCBhcmdzKGFzKSB7IH0KKyAgICBRdE1ldGhvZE1hdGNoRGF0YSgpCisg
ICAgICAgIDogaW5kZXgoLTEpIHsgfQorCisgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QKKyAgICB7
IHJldHVybiAoaW5kZXggIT0gLTEpOyB9CisKKyAgICBpbnQgZmlyc3RVbnJlc29sdmVkSW5kZXgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChpbnQgaT0wOyBpIDwgdHlwZXMuY291bnQoKTsg
aSsrKSB7CisgICAgICAgICAgICBpZiAodHlwZXMuYXQoaSkuaXNVbnJlc29sdmVkKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworICAg
IH0KK307CisKK3N0YXRpYyBpbnQgaW5kZXhPZk1ldGFFbnVtKGNvbnN0IFFNZXRhT2JqZWN0ICpt
ZXRhLCBjb25zdCBRQnl0ZUFycmF5ICZzdHIpCit7CisgICAgUUJ5dGVBcnJheSBzY29wZTsKKyAg
ICBRQnl0ZUFycmF5IG5hbWU7CisgICAgaW50IHNjb3BlSWR4ID0gc3RyLmluZGV4T2YoIjo6Iik7
CisgICAgaWYgKHNjb3BlSWR4ICE9IC0xKSB7CisgICAgICAgIHNjb3BlID0gc3RyLmxlZnQoc2Nv
cGVJZHgpOworICAgICAgICBuYW1lID0gc3RyLm1pZChzY29wZUlkeCArIDIpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIG5hbWUgPSBzdHI7CisgICAgfQorICAgIGZvciAoaW50IGkgPSBtZXRhLT5l
bnVtZXJhdG9yQ291bnQoKSAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIFFNZXRhRW51bSBt
ID0gbWV0YS0+ZW51bWVyYXRvcihpKTsKKyAgICAgICAgaWYgKChtLm5hbWUoKSA9PSBuYW1lKS8q
ICYmIChzY29wZS5pc0VtcHR5KCkgfHwgKG0uc2NvcGUoKSA9PSBzY29wZSkpKi8pCisgICAgICAg
ICAgICByZXR1cm4gaTsKKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCisvLyBIZWxwZXIgZnVu
Y3Rpb24gZm9yIHJlc29sdmluZyBtZXRob2RzCisvLyBMYXJnZWx5IGJhc2VkIG9uIGNvZGUgaW4g
UXRTY3JpcHQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucworc3RhdGljIGludCBmaW5kTWV0aG9k
SW5kZXgoRXhlY1N0YXRlKiBleGVjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
UU1ldGFPYmplY3QqIG1ldGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRQnl0
ZUFycmF5JiBzaWduYXR1cmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGFsbG93
UHJpdmF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFFWYXJMZW5ndGhBcnJheTxRVmFy
aWFudCwgMTA+ICZ2YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCoqIHZ2YXJz
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKipwRXJyb3IpCit7CisgICAg
UUxpc3Q8aW50PiBtYXRjaGluZ0luZGljZXM7CisKKyAgICBib29sIG92ZXJsb2FkcyA9ICFzaWdu
YXR1cmUuY29udGFpbnMoJygnKTsKKworICAgIGludCBjb3VudCA9IG1ldGEtPm1ldGhvZENvdW50
KCk7CisgICAgZm9yIChpbnQgaSA9IGNvdW50IC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAg
Y29uc3QgUU1ldGFNZXRob2QgbSA9IG1ldGEtPm1ldGhvZChpKTsKKworICAgICAgICAvLyBEb24n
dCBjaG9vc2UgcHJpdmF0ZSBtZXRob2RzCisgICAgICAgIGlmIChtLmFjY2VzcygpID09IFFNZXRh
TWV0aG9kOjpQcml2YXRlICYmICFhbGxvd1ByaXZhdGUpCisgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAvLyB0cnkgYW5kIGZpbmQgYWxsIG1hdGNoaW5nIG5hbWVkIG1ldGhvZHMKKyAg
ICAgICAgaWYgKG0uc2lnbmF0dXJlKCkgPT0gc2lnbmF0dXJlKQorICAgICAgICAgICAgbWF0Y2hp
bmdJbmRpY2VzLmFwcGVuZChpKTsKKyAgICAgICAgZWxzZSBpZiAob3ZlcmxvYWRzKSB7CisgICAg
ICAgICAgICBRQnl0ZUFycmF5IHJhd3NpZ25hdHVyZSA9IG0uc2lnbmF0dXJlKCk7CisgICAgICAg
ICAgICByYXdzaWduYXR1cmUudHJ1bmNhdGUocmF3c2lnbmF0dXJlLmluZGV4T2YoJygnKSk7Cisg
ICAgICAgICAgICBpZiAocmF3c2lnbmF0dXJlID09IHNpZ25hdHVyZSkKKyAgICAgICAgICAgICAg
ICBtYXRjaGluZ0luZGljZXMuYXBwZW5kKGkpOworICAgICAgICB9CisgICAgfQorCisgICAgaW50
IGNob3NlbkluZGV4ID0gLTE7CisgICAgKnBFcnJvciA9IDA7CisgICAgUVZlY3RvcjxRdE1ldGhv
ZE1hdGNoVHlwZT4gY2hvc2VuVHlwZXM7CisKKyAgICBRVmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQs
IDEwPiBhcmdzOworICAgIFFWZWN0b3I8UXRNZXRob2RNYXRjaERhdGE+IGNhbmRpZGF0ZXM7Cisg
ICAgUVZlY3RvcjxRdE1ldGhvZE1hdGNoRGF0YT4gdW5yZXNvbHZlZDsKKyAgICBRVmVjdG9yPGlu
dD4gdG9vRmV3QXJnczsKKyAgICBRVmVjdG9yPGludD4gY29udmVyc2lvbkZhaWxlZDsKKworICAg
IGZvcmVhY2goaW50IGluZGV4LCBtYXRjaGluZ0luZGljZXMpIHsKKyAgICAgICAgUU1ldGFNZXRo
b2QgbWV0aG9kID0gbWV0YS0+bWV0aG9kKGluZGV4KTsKKworICAgICAgICBRVmVjdG9yPFF0TWV0
aG9kTWF0Y2hUeXBlPiB0eXBlczsKKyAgICAgICAgYm9vbCB1bnJlc29sdmVkVHlwZXMgPSBmYWxz
ZTsKKworICAgICAgICAvLyByZXNvbHZlIHJldHVybiB0eXBlCisgICAgICAgIFFCeXRlQXJyYXkg
cmV0dXJuVHlwZU5hbWUgPSBtZXRob2QudHlwZU5hbWUoKTsKKyAgICAgICAgaW50IHJ0eXBlID0g
UU1ldGFUeXBlOjp0eXBlKHJldHVyblR5cGVOYW1lKTsKKyAgICAgICAgaWYgKChydHlwZSA9PSAw
KSAmJiAhcmV0dXJuVHlwZU5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAocmV0dXJu
VHlwZU5hbWUgPT0gIlFWYXJpYW50IikgeworICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChR
dE1ldGhvZE1hdGNoVHlwZTo6dmFyaWFudCgpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0
dXJuVHlwZU5hbWUuZW5kc1dpdGgoJyonKSkgeworICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVu
ZChRdE1ldGhvZE1hdGNoVHlwZTo6bWV0YVR5cGUoUU1ldGFUeXBlOjpWb2lkU3RhciwgcmV0dXJu
VHlwZU5hbWUpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGVu
dW1JbmRleCA9IGluZGV4T2ZNZXRhRW51bShtZXRhLCByZXR1cm5UeXBlTmFtZSk7CisgICAgICAg
ICAgICAgICAgaWYgKGVudW1JbmRleCAhPSAtMSkKKyAgICAgICAgICAgICAgICAgICAgdHlwZXMu
YXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjptZXRhRW51bShlbnVtSW5kZXgsIHJldHVyblR5cGVO
YW1lKSk7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVucmVz
b2x2ZWRUeXBlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1l
dGhvZE1hdGNoVHlwZTo6dW5yZXNvbHZlZChyZXR1cm5UeXBlTmFtZSkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChy
ZXR1cm5UeXBlTmFtZSA9PSAiUVZhcmlhbnQiKQorICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVu
ZChRdE1ldGhvZE1hdGNoVHlwZTo6dmFyaWFudCgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6Om1ldGFUeXBlKHJ0eXBl
LCByZXR1cm5UeXBlTmFtZSkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gcmVzb2x2ZSBhcmd1
bWVudCB0eXBlcworICAgICAgICBRTGlzdDxRQnl0ZUFycmF5PiBwYXJhbWV0ZXJUeXBlTmFtZXMg
PSBtZXRob2QucGFyYW1ldGVyVHlwZXMoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBw
YXJhbWV0ZXJUeXBlTmFtZXMuY291bnQoKTsgKytpKSB7CisgICAgICAgICAgICBRQnl0ZUFycmF5
IGFyZ1R5cGVOYW1lID0gcGFyYW1ldGVyVHlwZU5hbWVzLmF0KGkpOworICAgICAgICAgICAgaW50
IGF0eXBlID0gUU1ldGFUeXBlOjp0eXBlKGFyZ1R5cGVOYW1lKTsKKyAgICAgICAgICAgIGlmIChh
dHlwZSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGVOYW1lID09ICJRVmFyaWFu
dCIpIHsKKyAgICAgICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBl
Ojp2YXJpYW50KCkpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIGludCBlbnVtSW5kZXggPSBpbmRleE9mTWV0YUVudW0obWV0YSwgYXJnVHlwZU5hbWUpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZW51bUluZGV4ICE9IC0xKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjptZXRhRW51bShlbnVtSW5k
ZXgsIGFyZ1R5cGVOYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgICAgICAgICAgdW5yZXNvbHZlZFR5cGVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6dW5yZXNvbHZlZChhcmdUeXBl
TmFtZSkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnVHlwZU5hbWUgPT0gIlFWYXJp
YW50IikKKyAgICAgICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBl
Ojp2YXJpYW50KCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
dHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjptZXRhVHlwZShhdHlwZSwgYXJnVHlwZU5h
bWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHRoZSBuYXRp
dmUgbWV0aG9kIHJlcXVpcmVzIG1vcmUgYXJndW1lbnRzIHRoYW4gd2hhdCB3YXMgcGFzc2VkIGZy
b20gSmF2YVNjcmlwdAorICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICsgMSA8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlcy5jb3VudCgpKSkgeworICAgICAgICAgICAgcU1hdGNo
RGVidWcoKSA8PCAiTWF0Y2g6dG9vIGZldyBhcmdzIGZvciIgPDwgbWV0aG9kLnNpZ25hdHVyZSgp
OworICAgICAgICAgICAgdG9vRmV3QXJncy5hcHBlbmQoaW5kZXgpOworICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAodW5yZXNvbHZlZFR5cGVzKSB7CisgICAg
ICAgICAgICBxTWF0Y2hEZWJ1ZygpIDw8ICJNYXRjaDp1bnJlc29sdmVkIGFyZyB0eXBlcyBmb3Ii
IDw8IG1ldGhvZC5zaWduYXR1cmUoKTsKKyAgICAgICAgICAgIC8vIHJlbWVtYmVyIGl0IHNvIHdl
IGNhbiBnaXZlIGFuIGVycm9yIG1lc3NhZ2UgbGF0ZXIsIGlmIG5lY2Vzc2FyeQorICAgICAgICAg
ICAgdW5yZXNvbHZlZC5hcHBlbmQoUXRNZXRob2RNYXRjaERhdGEoLyptYXRjaERpc3RhbmNlPSov
SU5UX01BWCwgaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB0eXBlcywgUVZhckxlbmd0aEFycmF5PFFWYXJpYW50LCAxMD4oKSkpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3cgY29udmVydCBh
cmd1bWVudHMKKyAgICAgICAgaWYgKGFyZ3MuY291bnQoKSAhPSB0eXBlcy5jb3VudCgpKQorICAg
ICAgICAgICAgYXJncy5yZXNpemUodHlwZXMuY291bnQoKSk7CisKKyAgICAgICAgUXRNZXRob2RN
YXRjaFR5cGUgcmV0VHlwZSA9IHR5cGVzWzBdOworICAgICAgICBhcmdzWzBdID0gUVZhcmlhbnQo
cmV0VHlwZS50eXBlSWQoKSwgKHZvaWQgKikwKTsgLy8gdGhlIHJldHVybiB2YWx1ZQorCisgICAg
ICAgIGJvb2wgY29udmVydGVkID0gdHJ1ZTsKKyAgICAgICAgaW50IG1hdGNoRGlzdGFuY2UgPSAw
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBjb252ZXJ0ZWQgJiYgaSArIDEgPCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4odHlwZXMuY291bnQoKSk7ICsraSkgeworICAgICAgICAgICAgSlNW
YWx1ZSBhcmcgPSBpIDwgZXhlYy0+YXJndW1lbnRDb3VudCgpID8gZXhlYy0+YXJndW1lbnQoaSkg
OiBqc1VuZGVmaW5lZCgpOworCisgICAgICAgICAgICBpbnQgYXJnZGlzdGFuY2UgPSAtMTsKKyAg
ICAgICAgICAgIFFWYXJpYW50IHYgPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIGFyZywg
dHlwZXMuYXQoaSsxKS50eXBlSWQoKSwgJmFyZ2Rpc3RhbmNlKTsKKyAgICAgICAgICAgIGlmIChh
cmdkaXN0YW5jZSA+PSAwKSB7CisgICAgICAgICAgICAgICAgbWF0Y2hEaXN0YW5jZSArPSBhcmdk
aXN0YW5jZTsKKyAgICAgICAgICAgICAgICBhcmdzW2krMV0gPSB2OworICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICBxTWF0Y2hEZWJ1ZygpIDw8ICJmYWlsZWQgdG8gY29udmVy
dCBhcmd1bWVudCAiIDw8IGkgPDwgInR5cGUiIDw8IHR5cGVzLmF0KGkrMSkudHlwZUlkKCkgPDwg
UU1ldGFUeXBlOjp0eXBlTmFtZSh0eXBlcy5hdChpKzEpLnR5cGVJZCgpKTsKKyAgICAgICAgICAg
ICAgICBjb252ZXJ0ZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHFNYXRjaERlYnVnKCkgPDwgIk1hdGNoOiAiIDw8IG1ldGhvZC5zaWduYXR1cmUoKSA8PCAo
Y29udmVydGVkID8gImNvbnZlcnRlZCI6ImZhaWxlZCB0byBjb252ZXJ0IikgPDwgImRpc3RhbmNl
ICIgPDwgbWF0Y2hEaXN0YW5jZTsKKworICAgICAgICBpZiAoY29udmVydGVkKSB7CisgICAgICAg
ICAgICBpZiAoKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSArIDEgPT0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHR5cGVzLmNvdW50KCkpKQorICAgICAgICAgICAgICAgICYmIChtYXRjaERpc3RhbmNlID09
IDApKSB7CisgICAgICAgICAgICAgICAgLy8gcGVyZmVjdCBtYXRjaCwgdXNlIHRoaXMgb25lCisg
ICAgICAgICAgICAgICAgY2hvc2VuSW5kZXggPSBpbmRleDsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUXRNZXRob2RNYXRjaERh
dGEgY3VycmVudE1hdGNoKG1hdGNoRGlzdGFuY2UsIGluZGV4LCB0eXBlcywgYXJncyk7CisgICAg
ICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZXMuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGN1cnJlbnRNYXRjaCk7CisgICAgICAgICAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgICAgICAgICAgUXRNZXRob2RNYXRjaERhdGEgYmVzdE1hdGNoU29G
YXIgPSBjYW5kaWRhdGVzLmF0KDApOworICAgICAgICAgICAgICAgICAgICBpZiAoKGFyZ3MuY291
bnQoKSA+IGJlc3RNYXRjaFNvRmFyLmFyZ3MuY291bnQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHx8ICgoYXJncy5jb3VudCgpID09IGJlc3RNYXRjaFNvRmFyLmFyZ3MuY291bnQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAobWF0Y2hEaXN0YW5jZSA8PSBiZXN0TWF0Y2hT
b0Zhci5tYXRjaERpc3RhbmNlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0
ZXMucHJlcGVuZChjdXJyZW50TWF0Y2gpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FuZGlkYXRlcy5hcHBlbmQoY3VycmVudE1hdGNoKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNvbnZlcnNpb25GYWlsZWQuYXBwZW5kKGlu
ZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghb3ZlcmxvYWRzKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgfQorCisgICAgaWYgKGNob3NlbkluZGV4ID09IC0xICYmIGNhbmRpZGF0ZXMu
Y291bnQoKSA9PSAwKSB7CisgICAgICAgIC8vIE5vIHZhbGlkIGZ1bmN0aW9ucyBhdCBhbGwgLSBm
b3JtYXQgYW4gZXJyb3IgbWVzc2FnZQorICAgICAgICBpZiAoIWNvbnZlcnNpb25GYWlsZWQuaXNF
bXB0eSgpKSB7CisgICAgICAgICAgICBRU3RyaW5nIG1lc3NhZ2UgPSBRU3RyaW5nOjpmcm9tTGF0
aW4xKCJpbmNvbXBhdGlibGUgdHlwZSBvZiBhcmd1bWVudChzKSBpbiBjYWxsIHRvICUwKCk7IGNh
bmRpZGF0ZXMgd2VyZVxuIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoUUxh
dGluMVN0cmluZyhzaWduYXR1cmUpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
Y29udmVyc2lvbkZhaWxlZC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChpID4g
MCkKKyAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRTGF0aW4xU3RyaW5nKCJcbiIpOwor
ICAgICAgICAgICAgICAgIFFNZXRhTWV0aG9kIG10ZCA9IG1ldGEtPm1ldGhvZChjb252ZXJzaW9u
RmFpbGVkLmF0KGkpKTsKKyAgICAgICAgICAgICAgICBtZXNzYWdlICs9IFFTdHJpbmc6OmZyb21M
YXRpbjEoIiAgICAlMCIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKG10ZC5zaWduYXR1cmUoKSkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgKnBFcnJvciA9IHRocm93RXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UudG9MYXRpbjEoKS5jb25zdERhdGEoKSkpOwor
ICAgICAgICB9IGVsc2UgaWYgKCF1bnJlc29sdmVkLmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
UXRNZXRob2RNYXRjaERhdGEgYXJnc0luc3RhbmNlID0gdW5yZXNvbHZlZC5maXJzdCgpOworICAg
ICAgICAgICAgaW50IHVucmVzb2x2ZWRJbmRleCA9IGFyZ3NJbnN0YW5jZS5maXJzdFVucmVzb2x2
ZWRJbmRleCgpOworICAgICAgICAgICAgUV9BU1NFUlQodW5yZXNvbHZlZEluZGV4ICE9IC0xKTsK
KyAgICAgICAgICAgIFF0TWV0aG9kTWF0Y2hUeXBlIHVucmVzb2x2ZWRUeXBlID0gYXJnc0luc3Rh
bmNlLnR5cGVzLmF0KHVucmVzb2x2ZWRJbmRleCk7CisgICAgICAgICAgICBRU3RyaW5nIG1lc3Nh
Z2UgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJjYW5ub3QgY2FsbCAlMCgpOiB1bmtub3duIHR5cGUg
YCUxJyIpCisgICAgICAgICAgICAgICAgLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKHNpZ25hdHVy
ZSkpCisgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKHVucmVzb2x2ZWRUeXBlLm5h
bWUoKSkpOworICAgICAgICAgICAgKnBFcnJvciA9IHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlw
ZUVycm9yKGV4ZWMsIG1lc3NhZ2UudG9MYXRpbjEoKS5jb25zdERhdGEoKSkpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgUVN0cmluZyBtZXNzYWdlID0gUVN0cmluZzo6ZnJvbUxhdGlu
MSgidG9vIGZldyBhcmd1bWVudHMgaW4gY2FsbCB0byAlMCgpOyBjYW5kaWRhdGVzIGFyZVxuIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhzaWduYXR1
cmUpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdG9vRmV3QXJncy5zaXplKCk7
ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgICAgICAgICAg
bWVzc2FnZSArPSBRTGF0aW4xU3RyaW5nKCJcbiIpOworICAgICAgICAgICAgICAgIFFNZXRhTWV0
aG9kIG10ZCA9IG1ldGEtPm1ldGhvZCh0b29GZXdBcmdzLmF0KGkpKTsKKyAgICAgICAgICAgICAg
ICBtZXNzYWdlICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIiAgICAlMCIpLmFyZyhRU3RyaW5nOjpm
cm9tTGF0aW4xKG10ZC5zaWduYXR1cmUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
KnBFcnJvciA9IHRocm93RXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhlYywgbWVzc2Fn
ZS50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
Y2hvc2VuSW5kZXggPT0gLTEgJiYgY2FuZGlkYXRlcy5jb3VudCgpID4gMCkgeworICAgICAgICBR
dE1ldGhvZE1hdGNoRGF0YSBiZXN0TWF0Y2ggPSBjYW5kaWRhdGVzLmF0KDApOworICAgICAgICBp
ZiAoKGNhbmRpZGF0ZXMuc2l6ZSgpID4gMSkKKyAgICAgICAgICAgICYmIChiZXN0TWF0Y2guYXJn
cy5jb3VudCgpID09IGNhbmRpZGF0ZXMuYXQoMSkuYXJncy5jb3VudCgpKQorICAgICAgICAgICAg
JiYgKGJlc3RNYXRjaC5tYXRjaERpc3RhbmNlID09IGNhbmRpZGF0ZXMuYXQoMSkubWF0Y2hEaXN0
YW5jZSkpIHsKKyAgICAgICAgICAgIC8vIGFtYmlndW91cyBjYWxsCisgICAgICAgICAgICBRU3Ry
aW5nIG1lc3NhZ2UgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJhbWJpZ3VvdXMgY2FsbCBvZiBvdmVy
bG9hZGVkIGZ1bmN0aW9uICUwKCk7IGNhbmRpZGF0ZXMgd2VyZVxuIikKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKHNpZ25hdHVyZSkpOworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjYW5kaWRhdGVzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgLy8gT25seSBjYW5kaWRhdGUgZm9yIG92ZXJsb2FkIGlmIGFyZ3VtZW50IGNv
dW50IGFuZCBtYXRjaCBkaXN0YW5jZSBpcyBzYW1lIGFzIGJlc3QgbWF0Y2gKKyAgICAgICAgICAg
ICAgICBpZiAoY2FuZGlkYXRlcy5hdChpKS5hcmdzLmNvdW50KCkgPT0gYmVzdE1hdGNoLmFyZ3Mu
Y291bnQoKQorICAgICAgICAgICAgICAgICAgICB8fCBjYW5kaWRhdGVzLmF0KGkpLm1hdGNoRGlz
dGFuY2UgPT0gYmVzdE1hdGNoLm1hdGNoRGlzdGFuY2UpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGkgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRTGF0aW4xU3Ry
aW5nKCJcbiIpOworICAgICAgICAgICAgICAgICAgICBRTWV0YU1ldGhvZCBtdGQgPSBtZXRhLT5t
ZXRob2QoY2FuZGlkYXRlcy5hdChpKS5pbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1lc3Nh
Z2UgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiICAgICUwIikuYXJnKFFTdHJpbmc6OmZyb21MYXRp
bjEobXRkLnNpZ25hdHVyZSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgKnBFcnJvciA9IHRocm93RXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4
ZWMsIG1lc3NhZ2UudG9MYXRpbjEoKS5jb25zdERhdGEoKSkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgY2hvc2VuSW5kZXggPSBiZXN0TWF0Y2guaW5kZXg7CisgICAgICAgICAgICBh
cmdzID0gYmVzdE1hdGNoLmFyZ3M7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoY2hvc2Vu
SW5kZXggIT0gLTEpIHsKKyAgICAgICAgLyogQ29weSB0aGUgc3R1ZmYgb3ZlciAqLworICAgICAg
ICBpbnQgaTsKKyAgICAgICAgdmFycy5yZXNpemUoYXJncy5jb3VudCgpKTsKKyAgICAgICAgZm9y
IChpPTA7IGkgPCBhcmdzLmNvdW50KCk7IGkrKykgeworICAgICAgICAgICAgdmFyc1tpXSA9IGFy
Z3NbaV07CisgICAgICAgICAgICB2dmFyc1tpXSA9IHZhcnNbaV0uZGF0YSgpOworICAgICAgICB9
CisgICAgfQorCisgICAgcmV0dXJuIGNob3NlbkluZGV4OworfQorCisvLyBTaWduYWxzIGFyZSBu
b3QgZnV6enkgbWF0Y2hlZCBhcyBtdWNoIGFzIG1ldGhvZHMKK3N0YXRpYyBpbnQgZmluZFNpZ25h
bEluZGV4KGNvbnN0IFFNZXRhT2JqZWN0KiBtZXRhLCBpbnQgaW5pdGlhbEluZGV4LCBRQnl0ZUFy
cmF5IHNpZ25hdHVyZSkKK3sKKyAgICBpbnQgaW5kZXggPSBpbml0aWFsSW5kZXg7CisgICAgUU1l
dGFNZXRob2QgbWV0aG9kID0gbWV0YS0+bWV0aG9kKGluZGV4KTsKKyAgICBib29sIG92ZXJsb2Fk
cyA9ICFzaWduYXR1cmUuY29udGFpbnMoJygnKTsKKyAgICBpZiAob3ZlcmxvYWRzICYmIChtZXRo
b2QuYXR0cmlidXRlcygpICYgUU1ldGFNZXRob2Q6OkNsb25lZCkpIHsKKyAgICAgICAgLy8gZmlu
ZCB0aGUgbW9zdCBnZW5lcmFsIG1ldGhvZAorICAgICAgICBkbyB7CisgICAgICAgICAgICBtZXRo
b2QgPSBtZXRhLT5tZXRob2QoLS1pbmRleCk7CisgICAgICAgIH0gd2hpbGUgKG1ldGhvZC5hdHRy
aWJ1dGVzKCkgJiBRTWV0YU1ldGhvZDo6Q2xvbmVkKTsKKyAgICB9CisgICAgcmV0dXJuIGluZGV4
OworfQorCitjb25zdCBDbGFzc0luZm8gUXRSdW50aW1lTWV0YU1ldGhvZDo6c19pbmZvID0geyAi
UXRSdW50aW1lTWV0aG9kIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJM
RShRdFJ1bnRpbWVNZXRhTWV0aG9kKSB9OworCitRdFJ1bnRpbWVNZXRhTWV0aG9kOjpRdFJ1bnRp
bWVNZXRhTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGNvbnN0
IElkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgOiBRdFJ1bnRpbWVNZXRob2QgKG5ldyBRdFJ1
bnRpbWVNZXRhTWV0aG9kRGF0YSgpLCBleGVjLCBzdHJ1Y3R1cmUsIGlkZW50aWZpZXIpCit7Cit9
CisKK3ZvaWQgUXRSdW50aW1lTWV0YU1ldGhvZDo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlmaWVyLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+
IGluc3RhbmNlLCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkmIHNpZ25hdHVyZSwgYm9vbCBh
bGxvd1ByaXZhdGUpCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZXhlYywgaWRlbnRpZmll
ciwgaW5zdGFuY2UpOworICAgIFFXX0QoUXRSdW50aW1lTWV0YU1ldGhvZCk7CisgICAgZC0+bV9z
aWduYXR1cmUgPSBzaWduYXR1cmU7CisgICAgZC0+bV9pbmRleCA9IGluZGV4OworICAgIGQtPm1f
YWxsb3dQcml2YXRlID0gYWxsb3dQcml2YXRlOworfQorCit2b2lkIFF0UnVudGltZU1ldGFNZXRo
b2Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sK
KyAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFF0UnVudGltZU1l
dGFNZXRob2QqPihjZWxsKTsKKyAgICBRdFJ1bnRpbWVNZXRob2Q6OnZpc2l0Q2hpbGRyZW4odGhp
c09iamVjdCwgdmlzaXRvcik7CisgICAgUXRSdW50aW1lTWV0YU1ldGhvZERhdGEqIGQgPSB0aGlz
T2JqZWN0LT5kX2Z1bmMoKTsKKyAgICBpZiAoZC0+bV9jb25uZWN0KQorICAgICAgICB2aXNpdG9y
LmFwcGVuZCgmZC0+bV9jb25uZWN0KTsKKyAgICBpZiAoZC0+bV9kaXNjb25uZWN0KQorICAgICAg
ICB2aXNpdG9yLmFwcGVuZCgmZC0+bV9kaXNjb25uZWN0KTsKK30KKworRW5jb2RlZEpTVmFsdWUg
UXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgUXRSdW50
aW1lTWV0YU1ldGhvZERhdGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVNZXRhTWV0aG9kICo+
KGV4ZWMtPmNhbGxlZSgpKS0+ZF9mdW5jKCk7CisKKyAgICAvLyBXZSdyZSBsaW1pdGVkIHRvIDEw
IGFyZ3MKKyAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID4gMTApCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICAvLyBXZSBoYXZlIHRvIHBp
Y2sgYSBtZXRob2QgdGhhdCBtYXRjaGVzLi4KKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0
aW9uc09ubHkpOworCisgICAgUU9iamVjdCAqb2JqID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0
KCk7CisgICAgaWYgKG9iaikgeworICAgICAgICBRVmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQsIDEw
PiB2YXJnczsKKyAgICAgICAgdm9pZCAqcWFyZ3NbMTFdOworCisgICAgICAgIGludCBtZXRob2RJ
bmRleDsKKyAgICAgICAgSlNPYmplY3QqIGVycm9yT2JqID0gMDsKKyAgICAgICAgaWYgKChtZXRo
b2RJbmRleCA9IGZpbmRNZXRob2RJbmRleChleGVjLCBvYmotPm1ldGFPYmplY3QoKSwgZC0+bV9z
aWduYXR1cmUsIGQtPm1fYWxsb3dQcml2YXRlLCB2YXJncywgKHZvaWQgKiopcWFyZ3MsICZlcnJv
ck9iaikpICE9IC0xKSB7CisgICAgICAgICAgICBpZiAoUU1ldGFPYmplY3Q6Om1ldGFjYWxsKG9i
aiwgUU1ldGFPYmplY3Q6Okludm9rZU1ldGFNZXRob2QsIG1ldGhvZEluZGV4LCBxYXJncykgPj0g
MCkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkp
OworCisgICAgICAgICAgICBpZiAodmFyZ3NbMF0uaXNWYWxpZCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29udmVydFFWYXJpYW50VG9WYWx1ZShleGVjLCBkLT5t
X2luc3RhbmNlLT5yb290T2JqZWN0KCksIHZhcmdzWzBdKSk7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoZXJyb3JPYmopCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGVycm9y
T2JqKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNy
ZWF0ZUVycm9yKGV4ZWMsICJjYW5ub3QgY2FsbCBmdW5jdGlvbiBvZiBkZWxldGVkIFFPYmplY3Qi
KSk7CisgICAgfQorCisgICAgLy8gdm9pZCBmdW5jdGlvbnMgcmV0dXJuIHVuZGVmaW5lZAorICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0NhbGxUeXBlIFF0
UnVudGltZU1ldGFNZXRob2Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0
YSkKK3sKKyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsOworICAgIHJldHVybiBD
YWxsVHlwZUhvc3Q7Cit9CisKK2Jvb2wgUXRSdW50aW1lTWV0YU1ldGhvZDo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBRdFJ1bnRpbWVNZXRhTWV0
aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFF0UnVudGltZU1ldGFNZXRob2QqPihjZWxsKTsKKyAg
ICBpZiAocHJvcGVydHlOYW1lID09ICJjb25uZWN0IikgeworICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5jb25uZWN0R2V0dGVyKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gImRpc2Nvbm5lY3QiKSB7Cisg
ICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmRpc2Nvbm5lY3RH
ZXR0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKHByb3BlcnR5TmFt
ZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIHNsb3Quc2V0Q3Vz
dG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmxlbmd0aEdldHRlcik7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBRdFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3Bl
cnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworfQorCitib29s
IFF0UnVudGltZU1ldGFNZXRob2Q6OmdldE93blByb3BlcnR5RGVzY3JpcHRvcihKU09iamVjdCog
b2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQoreworICAgIFF0UnVudGltZU1ldGFNZXRo
b2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UXRSdW50aW1lTWV0YU1ldGhvZCo+KG9iamVjdCk7Cisg
ICAgaWYgKHByb3BlcnR5TmFtZSA9PSAiY29ubmVjdCIpIHsKKyAgICAgICAgUHJvcGVydHlTbG90
IHNsb3Q7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGNvbm5lY3RHZXR0ZXIp
OworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBw
cm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChwcm9wZXJ0eU5hbWUgPT0gImRpc2Nvbm5l
Y3QiKSB7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OworICAgICAgICBzbG90LnNldEN1c3Rv
bSh0aGlzT2JqZWN0LCBkaXNjb25uZWN0R2V0dGVyKTsKKyAgICAgICAgZGVzY3JpcHRvci5zZXRE
ZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwgRG9udERlbGV0ZSB8
IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAg
ICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmpl
Y3QsIGxlbmd0aEdldHRlcik7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90
LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERv
bnRFbnVtKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIFF0UnVu
dGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgUXRSdW50aW1lTWV0YU1ldGhvZDo6
Z2V0T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFBy
b3BlcnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sK
KyAgICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKSB7CisgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgImNvbm5lY3QiKSk7CisgICAgICAgIHBy
b3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywgImRpc2Nvbm5lY3QiKSk7CisgICAgICAg
IHByb3BlcnR5TmFtZXMuYWRkKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIH0K
KworICAgIFF0UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMs
IHByb3BlcnR5TmFtZXMsIG1vZGUpOworfQorCitKU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6
Omxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJikKK3sK
KyAgICAvLyBRdFNjcmlwdCBhbHdheXMgcmV0dXJucyAwCisgICAgcmV0dXJuIGpzTnVtYmVyKDAp
OworfQorCitKU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6OmNvbm5lY3RHZXR0ZXIoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKK3sK
KyAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1l
TWV0YU1ldGhvZCo+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgUVdfRFMoUXRSdW50aW1lTWV0
YU1ldGhvZCwgdGhpc09iaik7CisKKyAgICBpZiAoIWQtPm1fY29ubmVjdCkKKyAgICAgICAgZC0+
bV9jb25uZWN0LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmosIFF0UnVudGltZUNvbm5l
Y3Rpb25NZXRob2Q6OmNyZWF0ZShleGVjLCBpZGVudCwgdHJ1ZSwgZC0+bV9pbnN0YW5jZSwgZC0+
bV9pbmRleCwgZC0+bV9zaWduYXR1cmUpKTsKKyAgICByZXR1cm4gZC0+bV9jb25uZWN0LmdldCgp
OworfQorCitKU1ZhbHVlIFF0UnVudGltZU1ldGFNZXRob2Q6OmRpc2Nvbm5lY3RHZXR0ZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHNsb3RCYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkK
K3sKKyAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB0aGlzT2JqID0gc3RhdGljX2Nhc3Q8UXRSdW50
aW1lTWV0YU1ldGhvZCo+KGFzT2JqZWN0KHNsb3RCYXNlKSk7CisgICAgUVdfRFMoUXRSdW50aW1l
TWV0YU1ldGhvZCwgdGhpc09iaik7CisKKyAgICBpZiAoIWQtPm1fZGlzY29ubmVjdCkKKyAgICAg
ICAgZC0+bV9kaXNjb25uZWN0LnNldChleGVjLT5nbG9iYWxEYXRhKCksIHRoaXNPYmosIFF0UnVu
dGltZUNvbm5lY3Rpb25NZXRob2Q6OmNyZWF0ZShleGVjLCBpZGVudCwgZmFsc2UsIGQtPm1faW5z
dGFuY2UsIGQtPm1faW5kZXgsIGQtPm1fc2lnbmF0dXJlKSk7CisgICAgcmV0dXJuIGQtPm1fZGlz
Y29ubmVjdC5nZXQoKTsKK30KKworLy8gPT09PT09PT09PT09PT09CisKK1FNdWx0aU1hcDxRT2Jq
ZWN0KiwgUXRDb25uZWN0aW9uT2JqZWN0Kj4gUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Y29u
bmVjdGlvbnM7CisKK2NvbnN0IENsYXNzSW5mbyBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpz
X2luZm8gPSB7ICJRdFJ1bnRpbWVNZXRob2QiLCAmQmFzZTo6c19pbmZvLCAwLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QpIH07CisKK1F0UnVudGltZUNv
bm5lY3Rpb25NZXRob2Q6OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QoRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnRpZmllcikKKyAg
ICA6IFF0UnVudGltZU1ldGhvZCAobmV3IFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKCks
IGV4ZWMsIHN0cnVjdHVyZSwgaWRlbnRpZmllcikKK3sKK30KKwordm9pZCBRdFJ1bnRpbWVDb25u
ZWN0aW9uTWV0aG9kOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50aWZpZXIsIGJvb2wgaXNDb25uZWN0LCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+
IGluc3RhbmNlLCBpbnQgaW5kZXgsIGNvbnN0IFFCeXRlQXJyYXkmIHNpZ25hdHVyZSkKK3sKKyAg
ICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLCBpZGVudGlmaWVyLCBpbnN0YW5jZSk7CisgICAg
UVdfRChRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKTsKKworICAgIGQtPm1fc2lnbmF0dXJlID0g
c2lnbmF0dXJlOworICAgIGQtPm1faW5kZXggPSBpbmRleDsKKyAgICBkLT5tX2lzQ29ubmVjdCA9
IGlzQ29ubmVjdDsKK30KKworRW5jb2RlZEpTVmFsdWUgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZDo6Y2FsbChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhv
ZERhdGEqIGQgPSBzdGF0aWNfY2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kICo+KGV4ZWMt
PmNhbGxlZSgpKS0+ZF9mdW5jKCk7CisKKyAgICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9u
c09ubHkpOworCisgICAgUU9iamVjdCogc2VuZGVyID0gZC0+bV9pbnN0YW5jZS0+Z2V0T2JqZWN0
KCk7CisKKyAgICBpZiAoc2VuZGVyKSB7CisKKyAgICAgICAgSlNPYmplY3QqIHRoaXNPYmplY3Qg
PSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPm1ldGhvZFRhYmxlKCktPnRvVGhpc09iamVj
dChleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCksIGV4ZWMpOworICAgICAgICBKU09iamVjdCog
ZnVuY09iamVjdCA9IDA7CisKKyAgICAgICAgLy8gUXRTY3JpcHQgY2hlY2tzIHNpZ25hbG5lc3Mg
Zmlyc3QsIGFyZ3VtZW50cyBzZWNvbmQKKyAgICAgICAgaW50IHNpZ25hbEluZGV4ID0gLTE7CisK
KyAgICAgICAgLy8gTWFrZSBzdXJlIHRoZSBpbml0aWFsIGluZGV4IGlzIGEgc2lnbmFsCisgICAg
ICAgIFFNZXRhTWV0aG9kIG0gPSBzZW5kZXItPm1ldGFPYmplY3QoKS0+bWV0aG9kKGQtPm1faW5k
ZXgpOworICAgICAgICBpZiAobS5tZXRob2RUeXBlKCkgPT0gUU1ldGFNZXRob2Q6OlNpZ25hbCkK
KyAgICAgICAgICAgIHNpZ25hbEluZGV4ID0gZmluZFNpZ25hbEluZGV4KHNlbmRlci0+bWV0YU9i
amVjdCgpLCBkLT5tX2luZGV4LCBkLT5tX3NpZ25hdHVyZSk7CisKKyAgICAgICAgaWYgKHNpZ25h
bEluZGV4ICE9IC0xKSB7CisgICAgICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpID09
IDEpIHsKKyAgICAgICAgICAgICAgICBmdW5jT2JqZWN0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9P
YmplY3QoZXhlYyk7CisgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgICAg
ICAgICAgICAgaWYgKGZ1bmNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGZ1bmNP
YmplY3QsIGNhbGxEYXRhKSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGQtPm1faXNDb25uZWN0KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5jb25uZWN0
OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRl
VHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuZGlzY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBh
IGZ1bmN0aW9uIikpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAo
ZXhlYy0+YXJndW1lbnRDb3VudCgpID49IDIpIHsKKyAgICAgICAgICAgICAgICBpZiAoZXhlYy0+
YXJndW1lbnQoMCkuaXNPYmplY3QoKSkgeworICAgICAgICAgICAgICAgICAgICB0aGlzT2JqZWN0
ID0gZXhlYy0+YXJndW1lbnQoMCkudG9PYmplY3QoZXhlYyk7CisKKyAgICAgICAgICAgICAgICAg
ICAgLy8gR2V0IHRoZSBhY3R1YWwgZnVuY3Rpb24gdG8gY2FsbAorICAgICAgICAgICAgICAgICAg
ICBKU09iamVjdCAqYXNPYmogPSBleGVjLT5hcmd1bWVudCgxKS50b09iamVjdChleGVjKTsKKyAg
ICAgICAgICAgICAgICAgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgICAgICAgICAgICAgICAg
IGlmIChhc09iai0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEoYXNPYmosIGNhbGxEYXRhKSAh
PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHZl
cnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNPYmplY3QgPSBhc09iajsKKyAgICAg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIENvbnZl
cnQgaXQgdG8gYSBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgIFVTdHJpbmcgZnVuY05h
bWUgPSBleGVjLT5hcmd1bWVudCgxKS50b1N0cmluZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBJZGVudGlmaWVyIGZ1bmNJZGVudChleGVjLCBmdW5jTmFtZSk7
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vICMjIyBEcm9wQWxsTG9ja3MKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcmVzb2x2ZWQgYXQgdGhpcyBwb2ludCBpbiBRdFNj
cmlwdAorICAgICAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWwgPSB0aGlzT2JqZWN0LT5n
ZXQoZXhlYywgZnVuY0lkZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTT2JqZWN0KiBh
c0Z1bmNPYmogPSB2YWwudG9PYmplY3QoZXhlYyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChhc0Z1bmNPYmotPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGFzRnVuY09iaiwgY2Fs
bERhdGEpICE9IENhbGxUeXBlTm9uZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1
bmNPYmplY3QgPSBhc0Z1bmNPYmo7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVjdCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVU
eXBlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5jb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVu
Y3Rpb24iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5j
dGlvbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkLT5t
X2lzQ29ubmVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Io
ZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuY29ubmVjdDogdGhpc09i
amVjdCBpcyBub3QgYW4gb2JqZWN0IikpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVF
cnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IHRoaXNPYmplY3QgaXMgbm90IGFu
IG9iamVjdCIpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVjdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmNv
bm5lY3Q6IG5vIGFyZ3VtZW50cyBnaXZlbiIpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhl
YywgIlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBubyBhcmd1bWVudHMgZ2l2ZW4iKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkLT5tX2lzQ29ubmVjdCkgeworICAgICAgICAg
ICAgICAgIC8vIHRvIGNvbm5lY3QsIHdlIG5lZWQ6CisgICAgICAgICAgICAgICAgLy8gIHRhcmdl
dCBvYmplY3QgW2Zyb20gY3Rvcl0KKyAgICAgICAgICAgICAgICAvLyAgdGFyZ2V0IHNpZ25hbCBp
bmRleCBldGMuIFtmcm9tIGN0b3JdCisgICAgICAgICAgICAgICAgLy8gIHJlY2VpdmVyIGZ1bmN0
aW9uIFtmcm9tIGFyZ3VtZW50c10KKyAgICAgICAgICAgICAgICAvLyAgcmVjZWl2ZXIgdGhpcyBv
YmplY3QgW2Zyb20gYXJndW1lbnRzXQorCisgICAgICAgICAgICAgICAgRXhlY1N0YXRlKiBnbG9i
YWxFeGVjID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5nbG9iYWxFeGVjKCk7CisgICAg
ICAgICAgICAgICAgUXRDb25uZWN0aW9uT2JqZWN0KiBjb25uID0gUXRDb25uZWN0aW9uT2JqZWN0
OjpjcmVhdGVXaXRoSW50ZXJuYWxKU0MoZ2xvYmFsRXhlYywgZC0+bV9pbnN0YW5jZSwgc2lnbmFs
SW5kZXgsIHRoaXNPYmplY3QsIGZ1bmNPYmplY3QpOworICAgICAgICAgICAgICAgIGJvb2wgb2sg
PSBRTWV0YU9iamVjdDo6Y29ubmVjdChzZW5kZXIsIHNpZ25hbEluZGV4LCBjb25uLCBjb25uLT5t
ZXRhT2JqZWN0KCktPm1ldGhvZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoIW9rKSB7
CisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBjb25uOworICAgICAgICAgICAgICAgICAgICBR
U3RyaW5nIG1zZyA9IFFTdHJpbmcoUUxhdGluMVN0cmluZygiUXRNZXRhTWV0aG9kLmNvbm5lY3Q6
IGZhaWxlZCB0byBjb25uZWN0IHRvICUxOjolMigpIikpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKHNlbmRlci0+bWV0YU9iamVjdCgpLT5jbGFzc05hbWUo
KSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1f
c2lnbmF0dXJlKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhl
YywgY3JlYXRlRXJyb3IoZXhlYywgbXNnLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFN0b3JlIGNvbm5lY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgY29ubmVjdGlvbnMuaW5z
ZXJ0KHNlbmRlciwgY29ubik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICAvLyBOb3cgdG8gZmluZCBvdXIgcHJldmlvdXMgY29ubmVjdGlv
biBvYmplY3QuIEhtbS4KKyAgICAgICAgICAgICAgICBRTGlzdDxRdENvbm5lY3Rpb25PYmplY3Qq
PiBjb25ucyA9IGNvbm5lY3Rpb25zLnZhbHVlcyhzZW5kZXIpOworICAgICAgICAgICAgICAgIGJv
b2wgcmV0ID0gZmFsc2U7CisKKyAgICAgICAgICAgICAgICBKU0NvbnRleHRSZWYgY29udGV4dCA9
IDo6dG9SZWYoZXhlYyk7CisgICAgICAgICAgICAgICAgSlNPYmplY3RSZWYgcmVjZWl2ZXIgPSA6
OnRvUmVmKHRoaXNPYmplY3QpOworICAgICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHJlY2VpdmVy
RnVuY3Rpb24gPSA6OnRvUmVmKGZ1bmNPYmplY3QpOworCisgICAgICAgICAgICAgICAgZm9yZWFj
aChRdENvbm5lY3Rpb25PYmplY3QqIGNvbm4sIGNvbm5zKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIElzIHRoaXMgdGhlIHJpZ2h0IGNvbm5lY3Rpb24/CisgICAgICAgICAgICAgICAgICAgIGlm
IChjb25uLT5tYXRjaChjb250ZXh0LCBzZW5kZXIsIHNpZ25hbEluZGV4LCByZWNlaXZlciwgcmVj
ZWl2ZXJGdW5jdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFllcCwgZGlzY29u
bmVjdCBpdAorICAgICAgICAgICAgICAgICAgICAgICAgUU1ldGFPYmplY3Q6OmRpc2Nvbm5lY3Qo
c2VuZGVyLCBzaWduYWxJbmRleCwgY29ubiwgY29ubi0+bWV0YU9iamVjdCgpLT5tZXRob2RPZmZz
ZXQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgY29ubjsgLy8gdGhpcyB3aWxs
IGFsc28gcmVtb3ZlIGl0IGZyb20gdGhlIG1hcAorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCFyZXQpIHsK
KyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBtc2cgPSBRU3RyaW5nKFFMYXRpbjFTdHJpbmco
IlF0TWV0YU1ldGhvZC5kaXNjb25uZWN0OiBmYWlsZWQgdG8gZGlzY29ubmVjdCBmcm9tICUxOjol
MigpIikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKHNl
bmRlci0+bWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1fc2lnbmF0dXJlKSk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgbXNnLnRv
TGF0aW4xKCkuY29uc3REYXRhKCkpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBRU3RyaW5nIG1zZyA9IFFTdHJpbmcoUUxh
dGluMVN0cmluZygiUXRNZXRhTWV0aG9kLiUxOiAlMjo6JTMoKSBpcyBub3QgYSBzaWduYWwiKSkK
KyAgICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1faXNDb25uZWN0ID8g
ImNvbm5lY3QiOiAiZGlzY29ubmVjdCIpKQorICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRp
bjFTdHJpbmcoc2VuZGVyLT5tZXRhT2JqZWN0KCktPmNsYXNzTmFtZSgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKGQtPm1fc2lnbmF0dXJlKSk7CisgICAgICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtc2cudG9M
YXRpbjEoKS5jb25zdERhdGEoKSkpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAg
cmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVjLCAiY2Fubm90IGNhbGwg
ZnVuY3Rpb24gb2YgZGVsZXRlZCBRT2JqZWN0IikpOworICAgIH0KKworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Cit9CisKK0NhbGxUeXBlIFF0UnVudGltZUNvbm5l
Y3Rpb25NZXRob2Q6OmdldENhbGxEYXRhKEpTQ2VsbCosIENhbGxEYXRhJiBjYWxsRGF0YSkKK3sK
KyAgICBjYWxsRGF0YS5uYXRpdmUuZnVuY3Rpb24gPSBjYWxsOworICAgIHJldHVybiBDYWxsVHlw
ZUhvc3Q7Cit9CisKK2Jvb2wgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0T3duUHJvcGVy
dHlTbG90KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKK3sKKyAgICBRdFJ1bnRpbWVDb25uZWN0
aW9uTWV0aG9kKiB0aGlzT2JqZWN0ID0ganNDYXN0PFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Qq
PihjZWxsKTsKKyAgICBpZiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgpIHsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwgdGhpc09iamVjdC0+
bGVuZ3RoR2V0dGVyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJu
IFF0UnVudGltZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KHRoaXNPYmplY3QsIGV4ZWMsIHBy
b3BlcnR5TmFtZSwgc2xvdCk7Cit9CisKK2Jvb2wgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6
Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCit7CisgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCogdGhpc09iamVjdCA9
IGpzQ2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKj4ob2JqZWN0KTsKKyAgICBpZiAocHJv
cGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpIHsKKyAgICAgICAgUHJv
cGVydHlTbG90IHNsb3Q7CisgICAgICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIGxlbmd0
aEdldHRlcik7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90LmdldFZhbHVl
KGV4ZWMsIHByb3BlcnR5TmFtZSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIFF0UnVudGltZU1ldGhv
ZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFt
ZSwgZGVzY3JpcHRvcik7Cit9CisKK3ZvaWQgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0
T3duUHJvcGVydHlOYW1lcyhKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIFByb3Bl
cnR5TmFtZUFycmF5JiBwcm9wZXJ0eU5hbWVzLCBFbnVtZXJhdGlvbk1vZGUgbW9kZSkKK3sKKyAg
ICBpZiAobW9kZSA9PSBJbmNsdWRlRG9udEVudW1Qcm9wZXJ0aWVzKQorICAgICAgICBwcm9wZXJ0
eU5hbWVzLmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKworICAgIFF0UnVudGlt
ZU1ldGhvZDo6Z2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZXMs
IG1vZGUpOworfQorCitKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6Omxlbmd0aEdl
dHRlcihFeGVjU3RhdGUqLCBKU1ZhbHVlLCBjb25zdCBJZGVudGlmaWVyJikKK3sKKyAgICAvLyB3
ZSBoYXZlIG9uZSBmb3JtYWwgYXJndW1lbnQsIGFuZCBvbmUgb3B0aW9uYWwKKyAgICByZXR1cm4g
anNOdW1iZXIoMSk7Cit9CisKKy8vID09PT09PT09PT09PT09PQorCitRdENvbm5lY3Rpb25PYmpl
Y3Q6OlF0Q29ubmVjdGlvbk9iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgUGFzc1JlZlB0cjxR
dEluc3RhbmNlPiBzZW5kZXJJbnN0YW5jZSwgaW50IHNpZ25hbEluZGV4LCBKU09iamVjdFJlZiBy
ZWNlaXZlciwgSlNPYmplY3RSZWYgcmVjZWl2ZXJGdW5jdGlvbikKKyAgICA6IFFPYmplY3Qoc2Vu
ZGVySW5zdGFuY2UtPmdldE9iamVjdCgpKQorICAgICwgbV9jb250ZXh0KGNvbnRleHQpCisgICAg
LCBtX3NlbmRlckluc3RhbmNlKHNlbmRlckluc3RhbmNlKQorICAgICwgbV9vcmlnaW5hbFNlbmRl
cihtX3NlbmRlckluc3RhbmNlLT5nZXRPYmplY3QoKSkKKyAgICAsIG1fc2lnbmFsSW5kZXgoc2ln
bmFsSW5kZXgpCisgICAgLCBtX3JlY2VpdmVyKHJlY2VpdmVyKQorICAgICwgbV9yZWNlaXZlckZ1
bmN0aW9uKHJlY2VpdmVyRnVuY3Rpb24pCit7CisgICAgSlNWYWx1ZVByb3RlY3QobV9jb250ZXh0
LCBtX3JlY2VpdmVyKTsKKyAgICBKU1ZhbHVlUHJvdGVjdChtX2NvbnRleHQsIG1fcmVjZWl2ZXJG
dW5jdGlvbik7Cit9CisKK1F0Q29ubmVjdGlvbk9iamVjdDo6flF0Q29ubmVjdGlvbk9iamVjdCgp
Cit7CisgICAgLy8gV2UgY2FuIHNhZmVseSB1c2UgbV9vcmlnaW5hbFNlbmRlciBiZWNhdXNlIGNv
bm5lY3Rpb24gb2JqZWN0IHdpbGwgbmV2ZXIgb3V0bGl2ZSB0aGUgc2VuZGVyLAorICAgIC8vIHdo
aWNoIGlzIGl0cyBRT2JqZWN0IHBhcmVudC4KKyAgICBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9k
Ojpjb25uZWN0aW9ucy5yZW1vdmUobV9vcmlnaW5hbFNlbmRlciwgdGhpcyk7CisKKyAgICBKU1Zh
bHVlVW5wcm90ZWN0KG1fY29udGV4dCwgbV9yZWNlaXZlcik7CisgICAgSlNWYWx1ZVVucHJvdGVj
dChtX2NvbnRleHQsIG1fcmVjZWl2ZXJGdW5jdGlvbik7Cit9CisKK3N0YXRpYyBjb25zdCB1aW50
IHF0X21ldGFfZGF0YV9RdENvbm5lY3Rpb25PYmplY3RbXSA9IHsKKworIC8vIGNvbnRlbnQ6Cisg
ICAgICAgMSwgICAgICAgLy8gcmV2aXNpb24KKyAgICAgICAwLCAgICAgICAvLyBjbGFzc25hbWUK
KyAgICAgICAwLCAgICAwLCAvLyBjbGFzc2luZm8KKyAgICAgICAxLCAgIDEwLCAvLyBtZXRob2Rz
CisgICAgICAgMCwgICAgMCwgLy8gcHJvcGVydGllcworICAgICAgIDAsICAgIDAsIC8vIGVudW1z
L3NldHMKKworIC8vIHNsb3RzOiBzaWduYXR1cmUsIHBhcmFtZXRlcnMsIHR5cGUsIHRhZywgZmxh
Z3MKKyAgICAgIDI4LCAgIDI3LCAgIDI3LCAgIDI3LCAweDBhLAorCisgICAgICAgMCAgICAgICAg
Ly8gZW9kCit9OworCitzdGF0aWMgY29uc3QgY2hhciBxdF9tZXRhX3N0cmluZ2RhdGFfUXRDb25u
ZWN0aW9uT2JqZWN0W10gPSB7CisgICAgIkpTQzo6QmluZGluZ3M6OlF0Q29ubmVjdGlvbk9iamVj
dFwwXDBleGVjdXRlKClcMCIKK307CisKK2NvbnN0IFFNZXRhT2JqZWN0IFF0Q29ubmVjdGlvbk9i
amVjdDo6c3RhdGljTWV0YU9iamVjdCA9IHsKKyAgICB7ICZRT2JqZWN0OjpzdGF0aWNNZXRhT2Jq
ZWN0LCBxdF9tZXRhX3N0cmluZ2RhdGFfUXRDb25uZWN0aW9uT2JqZWN0LAorICAgICAgcXRfbWV0
YV9kYXRhX1F0Q29ubmVjdGlvbk9iamVjdCwgMCB9Cit9OworCitjb25zdCBRTWV0YU9iamVjdCAq
UXRDb25uZWN0aW9uT2JqZWN0OjptZXRhT2JqZWN0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gJnN0
YXRpY01ldGFPYmplY3Q7Cit9CisKK3ZvaWQgKlF0Q29ubmVjdGlvbk9iamVjdDo6cXRfbWV0YWNh
c3QoY29uc3QgY2hhciAqX2NsbmFtZSkKK3sKKyAgICBpZiAoIV9jbG5hbWUpIHJldHVybiAwOwor
ICAgIGlmICghc3RyY21wKF9jbG5hbWUsIHF0X21ldGFfc3RyaW5nZGF0YV9RdENvbm5lY3Rpb25P
YmplY3QpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dm9pZCo+KGNvbnN0X2Nhc3Q8UXRD
b25uZWN0aW9uT2JqZWN0Kj4odGhpcykpOworICAgIHJldHVybiBRT2JqZWN0OjpxdF9tZXRhY2Fz
dChfY2xuYW1lKTsKK30KKworLy8gVGhpcyBpcyB3aGF0IG1vYyB3b3VsZCBnZW5lcmF0ZSBleGNl
cHQgYnkgdGhlIGZhY3QgdGhhdCB3ZSBwYXNzIGFsbCBhcmd1bWVudHMgdG8gb3VyIGV4ZWN1dGUo
KSBzbG90LgoraW50IFF0Q29ubmVjdGlvbk9iamVjdDo6cXRfbWV0YWNhbGwoUU1ldGFPYmplY3Q6
OkNhbGwgX2MsIGludCBfaWQsIHZvaWQgKipfYSkKK3sKKyAgICBfaWQgPSBRT2JqZWN0OjpxdF9t
ZXRhY2FsbChfYywgX2lkLCBfYSk7CisgICAgaWYgKF9pZCA8IDApCisgICAgICAgIHJldHVybiBf
aWQ7CisgICAgaWYgKF9jID09IFFNZXRhT2JqZWN0OjpJbnZva2VNZXRhTWV0aG9kKSB7CisgICAg
ICAgIHN3aXRjaCAoX2lkKSB7CisgICAgICAgIGNhc2UgMDogZXhlY3V0ZShfYSk7IGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIF9pZCAtPSAxOworICAgIH0KKyAgICByZXR1cm4gX2lkOworfQor
CitzdGF0aWMgYm9vbCBpc0phdmFTY3JpcHRGdW5jdGlvbihKU09iamVjdFJlZiBvYmplY3QpCit7
CisgICAgQ2FsbERhdGEgY2FsbERhdGE7CisgICAgSlNPYmplY3QqIGpzT2JqZWN0ID0gdG9KUyhv
YmplY3QpOworICAgIHJldHVybiBqc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0Q2FsbERhdGEo
anNPYmplY3QsIGNhbGxEYXRhKSA9PSBDYWxsVHlwZUpTOworfQorCit2b2lkIFF0Q29ubmVjdGlv
bk9iamVjdDo6ZXhlY3V0ZSh2b2lkKiogYXJndikKK3sKKyAgICBRT2JqZWN0KiBzZW5kZXIgPSBt
X3NlbmRlckluc3RhbmNlLT5nZXRPYmplY3QoKTsKKyAgICBpZiAoIXNlbmRlcikgeworICAgICAg
ICBxV2FybmluZygpIDw8ICJzZW5kZXIgZGVsZXRlZCwgY2Fubm90IGRlbGl2ZXIgc2lnbmFsIjsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEFTU0VSVChzZW5kZXIgPT0gbV9vcmlnaW5h
bFNlbmRlcik7CisKKyAgICBjb25zdCBRTWV0YU9iamVjdCogbWV0YSA9IHNlbmRlci0+bWV0YU9i
amVjdCgpOworICAgIGNvbnN0IFFNZXRhTWV0aG9kIG1ldGhvZCA9IG1ldGEtPm1ldGhvZChtX3Np
Z25hbEluZGV4KTsKKworICAgIFFMaXN0PFFCeXRlQXJyYXk+IHBhcmFtZXRlclR5cGVzID0gbWV0
aG9kLnBhcmFtZXRlclR5cGVzKCk7CisKKyAgICBKU1ZhbHVlUmVmKiBpZ25vcmVkRXhjZXB0aW9u
ID0gMDsKKyAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbGVuZ3RoUHJvcGVydHkoSlNTdHJp
bmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKKyAgICBpbnQgcmVjZWl2ZXJMZW5n
dGggPSBpbnQoSlNWYWx1ZVRvTnVtYmVyKG1fY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eSht
X2NvbnRleHQsIG1fcmVjZWl2ZXJGdW5jdGlvbiwgbGVuZ3RoUHJvcGVydHkuZ2V0KCksIGlnbm9y
ZWRFeGNlcHRpb24pLCBpZ25vcmVkRXhjZXB0aW9uKSk7CisgICAgaW50IGFyZ2MgPSBxTWF4KHBh
cmFtZXRlclR5cGVzLmNvdW50KCksIHJlY2VpdmVyTGVuZ3RoKTsKKyAgICBXVEY6OlZlY3RvcjxK
U1ZhbHVlUmVmPiBhcmdzKGFyZ2MpOworCisgICAgLy8gVE9ETzogcmVtb3ZlIG9uY2UgY29udmVy
c2lvbiBmdW5jdGlvbnMgdXNlIEpTQyBBUEkuCisgICAgRXhlY1N0YXRlKiBleGVjID0gOjp0b0pT
KG1fY29udGV4dCk7CisgICAgUmVmUHRyPFJvb3RPYmplY3Q+IHJvb3RPYmplY3QgPSBtX3NlbmRl
ckluc3RhbmNlLT5yb290T2JqZWN0KCk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGFyZ2M7
IGkrKykgeworICAgICAgICBpbnQgYXJnVHlwZSA9IFFNZXRhVHlwZTo6dHlwZShwYXJhbWV0ZXJU
eXBlcy5hdChpKSk7CisgICAgICAgIGFyZ3NbaV0gPSA6OnRvUmVmKGV4ZWMsIGNvbnZlcnRRVmFy
aWFudFRvVmFsdWUoZXhlYywgcm9vdE9iamVjdCwgUVZhcmlhbnQoYXJnVHlwZSwgYXJndltpKzFd
KSkpOworICAgIH0KKworICAgIGNvbnN0IGJvb2wgdXBkYXRlUXRTZW5kZXIgPSBpc0phdmFTY3Jp
cHRGdW5jdGlvbihtX3JlY2VpdmVyRnVuY3Rpb24pOworICAgIGlmICh1cGRhdGVRdFNlbmRlcikK
KyAgICAgICAgUXRJbnN0YW5jZTo6cXRTZW5kZXJTdGFjaygpLT5wdXNoKFFPYmplY3Q6OnNlbmRl
cigpKTsKKworICAgIEpTT2JqZWN0Q2FsbEFzRnVuY3Rpb24obV9jb250ZXh0LCBtX3JlY2VpdmVy
RnVuY3Rpb24sIG1fcmVjZWl2ZXIsIGFyZ2MsIGFyZ3MuZGF0YSgpLCAwKTsKKworICAgIGlmICh1
cGRhdGVRdFNlbmRlcikKKyAgICAgICAgUXRJbnN0YW5jZTo6cXRTZW5kZXJTdGFjaygpLT5wb3Ao
KTsKK30KKworYm9vbCBRdENvbm5lY3Rpb25PYmplY3Q6Om1hdGNoKEpTQ29udGV4dFJlZiBjb250
ZXh0LCBRT2JqZWN0KiBzZW5kZXIsIGludCBzaWduYWxJbmRleCwgSlNPYmplY3RSZWYgcmVjZWl2
ZXIsIEpTT2JqZWN0UmVmIHJlY2VpdmVyRnVuY3Rpb24pCit7CisgICAgaWYgKHNlbmRlciAhPSBt
X29yaWdpbmFsU2VuZGVyIHx8IHNpZ25hbEluZGV4ICE9IG1fc2lnbmFsSW5kZXgpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBKU1ZhbHVlUmVmKiBpZ25vcmVkRXhjZXB0aW9uID0gMDsKKyAg
ICBjb25zdCBib29sIHJlY2VpdmVyTWF0Y2ggPSAoIXJlY2VpdmVyICYmICFtX3JlY2VpdmVyKSB8
fCBKU1ZhbHVlSXNFcXVhbChjb250ZXh0LCByZWNlaXZlciwgbV9yZWNlaXZlciwgaWdub3JlZEV4
Y2VwdGlvbik7CisgICAgcmV0dXJuIHJlY2VpdmVyTWF0Y2ggJiYgSlNWYWx1ZUlzRXF1YWwoY29u
dGV4dCwgcmVjZWl2ZXJGdW5jdGlvbiwgbV9yZWNlaXZlckZ1bmN0aW9uLCBpZ25vcmVkRXhjZXB0
aW9uKTsKK30KKworUXRDb25uZWN0aW9uT2JqZWN0KiBRdENvbm5lY3Rpb25PYmplY3Q6OmNyZWF0
ZVdpdGhJbnRlcm5hbEpTQyhFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4g
c2VuZGVySW5zdGFuY2UsIGludCBzaWduYWxJbmRleCwgSlNPYmplY3QqIHJlY2VpdmVyLCBKU09i
amVjdCogcmVjZWl2ZXJGdW5jdGlvbikKK3sKKyAgICByZXR1cm4gbmV3IFF0Q29ubmVjdGlvbk9i
amVjdCg6OnRvUmVmKGV4ZWMpLCBzZW5kZXJJbnN0YW5jZSwgc2lnbmFsSW5kZXgsIDo6dG9SZWYo
cmVjZWl2ZXIpLCA6OnRvUmVmKHJlY2VpdmVyRnVuY3Rpb24pKTsKK30KKworLy8gPT09PT09PT09
PT09PT09CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPiBRdEFycmF5PFQ+OjpRdEFycmF5KFFMaXN0
PFQ+IGxpc3QsIFFNZXRhVHlwZTo6VHlwZSB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJv
b3RPYmplY3QpCisgICAgOiBBcnJheShyb290T2JqZWN0KQorICAgICwgbV9saXN0KGxpc3QpCisg
ICAgLCBtX3R5cGUodHlwZSkKK3sKKyAgICBtX2xlbmd0aCA9IG1fbGlzdC5jb3VudCgpOworfQor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gUXRBcnJheTxUPjo6flF0QXJyYXkgKCkKK3sKK30KKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+IFJvb3RPYmplY3QqIFF0QXJyYXk8VD46OnJvb3RPYmplY3Qo
KSBjb25zdAoreworICAgIHJldHVybiBtX3Jvb3RPYmplY3QgJiYgbV9yb290T2JqZWN0LT5pc1Zh
bGlkKCkgPyBtX3Jvb3RPYmplY3QuZ2V0KCkgOiAwOworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4gdm9pZCBRdEFycmF5PFQ+OjpzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aW5kZXgsIEpTVmFsdWUgYVZhbHVlKSBjb25zdAoreworICAgIC8vIFF0U2NyaXB0IHNldHMgdGhl
IHZhbHVlLCBidXQgZG9lc24ndCBmb3J3YXJkIGl0IHRvIHRoZSBvcmlnaW5hbCBzb3VyY2UKKyAg
ICAvLyAoZS5nLiBpZiB5b3UgZG8gJ29iamVjdC5pbnRMaXN0WzVdID0gNicsIHRoZSBvYmplY3Qg
aXMgbm90IHVwZGF0ZWQsIGJ1dCB0aGUKKyAgICAvLyBjb3B5IG9mIHRoZSBsaXN0IGlzKS4KKyAg
ICBpbnQgZGlzdCA9IC0xOworICAgIFFWYXJpYW50IHZhbCA9IGNvbnZlcnRWYWx1ZVRvUVZhcmlh
bnQoZXhlYywgYVZhbHVlLCBtX3R5cGUsICZkaXN0KTsKKworICAgIGlmIChkaXN0ID49IDApIHsK
KyAgICAgICAgbV9saXN0W2luZGV4XSA9IHZhbC52YWx1ZTxUPigpOworICAgIH0KK30KKworCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gSlNWYWx1ZSBRdEFycmF5PFQ+Ojp2YWx1ZUF0KEV4ZWNTdGF0
ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4KSBjb25zdAoreworICAgIGlmIChpbmRleCA8IG1f
bGVuZ3RoKSB7CisgICAgICAgIFQgdmFsID0gbV9saXN0LmF0KGluZGV4KTsKKyAgICAgICAgcmV0
dXJuIGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoZXhlYywgcm9vdE9iamVjdCgpLCBRVmFyaWFudDo6
ZnJvbVZhbHVlKHZhbCkpOworICAgIH0KKworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQor
CisvLyA9PT09PT09PT09PT09PT0KKworfSB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3B1YmxpY2FwaS90c3RfcHVibGljYXBpLmNwcCBiL1NvdXJj
ZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcHVibGljYXBpL3RzdF9wdWJsaWNhcGku
Y3BwCmluZGV4IGY1Zjk3NjYuLjM5ZTZiNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcHVibGljYXBpL3RzdF9wdWJsaWNhcGkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcHVibGljYXBpL3RzdF9wdWJsaWNh
cGkuY3BwCkBAIC0xNDEsNyArMTQxLDExIEBAIHN0YXRpYyB2b2lkIGdhdGhlckFQSShjb25zdCBR
U3RyaW5nJiBwcmVmaXgsIGNvbnN0IFFNZXRhTWV0aG9kJiBtZXRob2QsIFFTdHJpbmdMCiB7CiAg
ICAgaWYgKG1ldGhvZC5hY2Nlc3MoKSAhPSBRTWV0YU1ldGhvZDo6UHJpdmF0ZSkgewogICAgICAg
ICBjb25zdCBjaGFyKiBtZXRob2RUeXBlTmFtZSA9ICEhc3RybGVuKG1ldGhvZC50eXBlTmFtZSgp
KSA/IG1ldGhvZC50eXBlTmFtZSgpIDogInZvaWQiOworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVS
U0lPTl9DSEVDSyg1LCAwLCAwKQorICAgICAgICAqb3V0cHV0IDw8IFFTdHJpbmc6OmZyb21MYXRp
bjEoIiUxJTIgLS0+ICUzIikuYXJnKHByZWZpeCkuYXJnKFFTdHJpbmc6OmZyb21MYXRpbjEobWV0
aG9kLm1ldGhvZFNpZ25hdHVyZSgpKSkuYXJnKFFTdHJpbmc6OmZyb21MYXRpbjEobWV0aG9kVHlw
ZU5hbWUpKTsKKyNlbHNlCiAgICAgICAgICpvdXRwdXQgPDwgUVN0cmluZzo6ZnJvbUxhdGluMSgi
JTElMiAtLT4gJTMiKS5hcmcocHJlZml4KS5hcmcobWV0aG9kLnNpZ25hdHVyZSgpKS5hcmcobWV0
aG9kVHlwZU5hbWUpOworI2VuZGlmCiAKICAgICAgICAgY2hlY2tLbm93blR5cGUobWV0aG9kVHlw
ZU5hbWUpOwogICAgICAgICBmb3JlYWNoIChRQnl0ZUFycmF5IHBhcmFtVHlwZSwgbWV0aG9kLnBh
cmFtZXRlclR5cGVzKCkpCi0tIAoxLjcuMTAuMjgwLmdhYTM5Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140020</attachid>
            <date>2012-05-03 08:21:38 -0700</date>
            <delta_ts>2012-05-04 07:28:42 -0700</delta_ts>
            <desc>one more renaming thing</desc>
            <filename>1.patch</filename>
            <type>text/plain</type>
            <size>540</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFn
ZXByb3ZpZGVyX3AuaCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25p
bWFnZXByb3ZpZGVyX3AuaAppbmRleCA2YWQ5OGQwLi43NGY1NTk5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wLmgKKysr
IGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViaWNvbmltYWdlcHJvdmlkZXJf
cC5oCkBAIC0yMSw3ICsyMSw3IEBACiAjZGVmaW5lIHF3ZWJpY29uaW1hZ2Vwcm92aWRlcl9wX2gK
IAogI2luY2x1ZGUgInF3ZWJraXRnbG9iYWwuaCIKLSNpbmNsdWRlIDxRdFFtbC9RUW1sSW1hZ2VQ
cm92aWRlcj4KKyNpbmNsdWRlIDxRdFF1aWNrL1FRdWlja0ltYWdlUHJvdmlkZXI+CiAKIGNsYXNz
IFFXRUJLSVRfRVhQT1JUIFFXZWJJY29uSW1hZ2VQcm92aWRlciA6IHB1YmxpYyBRRGVjbGFyYXRp
dmVJbWFnZVByb3ZpZGVyIHsKIHB1YmxpYzoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140221</attachid>
            <date>2012-05-04 07:34:31 -0700</date>
            <delta_ts>2012-05-04 07:48:57 -0700</delta_ts>
            <desc>buildfix 3/1</desc>
            <filename>1.patch</filename>
            <type>text/plain</type>
            <size>2086</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">Y29tbWl0IGVmMTc3ZjRmZGVjODExOWFmZmQ5MWQ1ZmRhZjg1YzNlNWYwZjA2NjYKQXV0aG9yOiBD
c2FiYSBPc3p0cm9nb27DoWMgPG9zc3lAd2Via2l0Lm9yZz4KRGF0ZTogICBGcmkgTWF5IDQgMTY6
MjA6NDUgMjAxMiArMDIwMAoKICAgIFtRdF0gQnVpbGRmaXggZm9yIG5ld2VyIFF0NQogICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NDc4CiAgICAKICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogICAgCiAgICAqIFNoYXJlZC9xdC9Qcm9jZXNzRXhlY3V0
YWJsZVBhdGhRdC5jcHA6CiAgICAoV2ViS2l0OjpleGVjdXRhYmxlUGF0aCk6CiAgICAqIFVJUHJv
Y2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXByb3ZpZGVyX3AuaDoKCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggYmI4
ODk3Yy4uODA2YmJlMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDEyLTA1LTA0ICBD
c2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1F0XSBCdWls
ZGZpeCBmb3IgbmV3ZXIgUXQ1CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04NTQ3OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogU2hhcmVkL3F0L1Byb2Nlc3NFeGVjdXRhYmxlUGF0aFF0LmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6ZXhlY3V0YWJsZVBhdGgpOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQv
cXdlYmljb25pbWFnZXByb3ZpZGVyX3AuaDoKKwogMjAxMi0wNS0wMyAgQWxleGlzIE1lbmFyZCAg
PGFsZXhpcy5tZW5hcmRAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBbUXRdIEVuYWJsZSBmdWxs
c2NyZWVuIEFQSSBmb3IgV2ViS2l0Mi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1NoYXJl
ZC9xdC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9TaGFyZWQv
cXQvUHJvY2Vzc0V4ZWN1dGFibGVQYXRoUXQuY3BwCmluZGV4IDRiNGY4MjQuLjljYjI5YjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NoYXJlZC9xdC9Qcm9jZXNzRXhlY3V0YWJsZVBhdGhR
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvU2hhcmVkL3F0L1Byb2Nlc3NFeGVjdXRhYmxlUGF0
aFF0LmNwcApAQCAtMzMsNyArMzMsNyBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotc3RhdGlj
IFN0cmluZyBleGVjdXRhYmxlUGF0aChRTGF0aW4xU3RyaW5nIGJhc2VOYW1lKQorc3RhdGljIFN0
cmluZyBleGVjdXRhYmxlUGF0aChRU3RyaW5nIGJhc2VOYW1lKQogewogICAgIFFTdHJpbmcgZXhw
ZWN0ZWRQYXRoID0gUUNvcmVBcHBsaWNhdGlvbjo6YXBwbGljYXRpb25EaXJQYXRoKCkgKyBRRGly
OjpzZXBhcmF0b3IoKSArIGJhc2VOYW1lOwogICAgIGlmIChRRmlsZTo6ZXhpc3RzKGV4cGVjdGVk
UGF0aCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3ZWJp
Y29uaW1hZ2Vwcm92aWRlcl9wLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3F3
ZWJpY29uaW1hZ2Vwcm92aWRlcl9wLmgKaW5kZXggNmFkOThkMC4uNzRmNTU5OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC9xd2ViaWNvbmltYWdlcHJvdmlkZXJf
cC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvcXdlYmljb25pbWFnZXBy
b3ZpZGVyX3AuaApAQCAtMjEsNyArMjEsNyBAQAogI2RlZmluZSBxd2ViaWNvbmltYWdlcHJvdmlk
ZXJfcF9oCiAKICNpbmNsdWRlICJxd2Via2l0Z2xvYmFsLmgiCi0jaW5jbHVkZSA8UXRRbWwvUVFt
bEltYWdlUHJvdmlkZXI+CisjaW5jbHVkZSA8UXRRdWljay9RUXVpY2tJbWFnZVByb3ZpZGVyPgog
CiBjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViSWNvbkltYWdlUHJvdmlkZXIgOiBwdWJsaWMgUURl
Y2xhcmF0aXZlSW1hZ2VQcm92aWRlciB7CiBwdWJsaWM6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140222</attachid>
            <date>2012-05-04 07:34:53 -0700</date>
            <delta_ts>2012-05-04 07:50:05 -0700</delta_ts>
            <desc>buildfix 3/2</desc>
            <filename>2.patch</filename>
            <type>text/plain</type>
            <size>1633</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">Y29tbWl0IDBjZWYzNzQ1MjI1NDQ0MTRmNmU1ODU1MjM4NDVhOWQyMGM1MTNlNTgKQXV0aG9yOiBD
c2FiYSBPc3p0cm9nb27DoWMgPG9zc3lAd2Via2l0Lm9yZz4KRGF0ZTogICBGcmkgTWF5IDQgMTY6
MjE6NDEgMjAxMiArMDIwMAoKICAgIFtRdF0gRG9uJ3QgcGFzcyB2aWV3cG9ydC1jcmVhdGUgZnVu
Y3Rpb24gdG8gcXVpY2tfdGVzdF9tYWluLgogICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTg1NDc4CiAgICAKICAgIFBhdGNoIGJ5IFRvciBBcm5lIFZlc3Riw7ggPHRv
ci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+IG9uIDIwMTItMDUtMDQKICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgogICAgCiAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMv
dHN0X3FtbHRlc3RzLmNwcDoKICAgIChtYWluKToKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggODA2YmJlMi4uMzhi
ZTgxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEyLTA1LTA0ICBUb3IgQXJuZSBW
ZXN0YsO4ICA8dG9yLmFybmUudmVzdGJvQG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIERvbid0
IHBhc3Mgdmlld3BvcnQtY3JlYXRlIGZ1bmN0aW9uIHRvIHF1aWNrX3Rlc3RfbWFpbi4KKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NDc4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L3F0L3Rlc3RzL3FtbHRlc3RzL3RzdF9xbWx0ZXN0cy5jcHA6CisgICAgICAgIChtYWluKToKKwog
MjAxMi0wNS0wNCAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQub3JnPgogCiAgICAg
ICAgIFtRdF0gQnVpbGRmaXggZm9yIG5ld2VyIFF0NQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy90c3RfcW1sdGVzdHMuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9xbWx0ZXN0cy90c3RfcW1sdGVzdHMu
Y3BwCmluZGV4IDc4MmIwNDEuLmFiNTc1NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvcXQvdGVzdHMvcW1sdGVzdHMvdHN0X3FtbHRlc3RzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3FtbHRlc3RzL3RzdF9xbWx0ZXN0cy5j
cHAKQEAgLTQ4LDUgKzQ4LDUgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogI2lm
ZGVmIERJU0FCTEVfRkxJQ0tBQkxFX1ZJRVdQT1JUCiAgICAgUVF1aWNrV2ViVmlld0V4cGVyaW1l
bnRhbDo6c2V0RmxpY2thYmxlVmlld3BvcnRFbmFibGVkKGZhbHNlKTsKICNlbmRpZgotICAgIHJl
dHVybiBxdWlja190ZXN0X21haW4oYXJnYywgYXJndiwgInFtbHRlc3RzIiwgMCwgUVVJQ0tfVEVT
VF9TT1VSQ0VfRElSKTsKKyAgICByZXR1cm4gcXVpY2tfdGVzdF9tYWluKGFyZ2MsIGFyZ3YsICJx
bWx0ZXN0cyIsIFFVSUNLX1RFU1RfU09VUkNFX0RJUik7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140223</attachid>
            <date>2012-05-04 07:35:14 -0700</date>
            <delta_ts>2012-05-04 07:51:42 -0700</delta_ts>
            <desc>buildfix 3/3</desc>
            <filename>3.patch</filename>
            <type>text/plain</type>
            <size>107194</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">Y29tbWl0IDZhMWEzNWMwMTk2YTZmZDM5Njk0OWY3ZDhjMjhiZGZjMTgyYjYzYWUKQXV0aG9yOiBD
c2FiYSBPc3p0cm9nb27DoWMgPG9zc3lAd2Via2l0Lm9yZz4KRGF0ZTogICBGcmkgTWF5IDQgMTY6
MjQ6MjggMjAxMiArMDIwMAoKICAgIFtRdF0gVXBkYXRlIFF0IGJyaWRnZSBhZnRlciBjaGFuZ2Vz
IHRvIFFNZXRhTWV0aG9kCiAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODU0NzgKICAgIAogICAgUGF0Y2ggYnkgS2VudCBIYW5zZW4gPGtlbnQuaGFuc2VuQG5va2lh
LmNvbT4gb24gMjAxMi0wNS0wNAogICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCiAgICAK
ICAgIFFNZXRhTWV0aG9kOjpzaWduYXR1cmUoKSBoYXMgYmVlbiByZW5hbWVkIHRvIG1ldGhvZFNp
Z25hdHVyZSgpIGFuZAogICAgcmV0dXJucyBhIFFCeXRlQXJyYXkuCiAgICAKICAgIFRoZSBuZXcg
ZnVuY3Rpb24gUU1ldGFNZXRob2Q6Om5hbWUoKSBnaXZlcyBkaXJlY3QgYWNjZXNzIHRvIGEKICAg
IG1ldGhvZCdzIG5hbWUuIHJldHVyblR5cGUoKSwgcGFyYW1ldGVyQ291bnQoKSwgYW5kIHBhcmFt
ZXRlclR5cGUoKQogICAgZ2l2ZSBkaXJlY3QgYWNjZXNzIHRvIHR5cGUgaW5mb3JtYXRpb24uCiAg
ICAKICAgIFBvcnRlZCB0aGUgY3VzdG9tIFF0Q29ubmVjdGlvbk9iamVjdCBtZXRhLW9iamVjdCB0
byByZXZpc2lvbiA3OwogICAgcmV2aXNpb24gNiBhbmQgYmVsb3cgYXJlbid0IHN1cHBvcnRlZCAo
YW5kIGRvbid0IGNvbXBpbGUpIHdpdGggUXQ1LgogICAgCiAgICBTb3VyY2UvV2ViQ29yZToKICAg
IAogICAgKiBUYXJnZXQucHJpOgogICAgKiBicmlkZ2UvcXQvcXRfY2xhc3MuY3BwOgogICAgKEpT
Qzo6QmluZGluZ3M6OlF0Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KToKICAgICogYnJpZGdlL3F0L3F0
X2luc3RhbmNlLmNwcDoKICAgIChKU0M6OkJpbmRpbmdzOjpRdEluc3RhbmNlOjpnZXRQcm9wZXJ0
eU5hbWVzKToKICAgICogYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwOgogICAgKEpTQzo6QmluZGlu
Z3M6OmZpbmRNZXRob2RJbmRleCk6CiAgICAoQmluZGluZ3MpOgogICAgKHF0X21ldGFfc3RyaW5n
ZGF0YV9RdENvbm5lY3Rpb25PYmplY3RfdCk6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRDb25uZWN0
aW9uT2JqZWN0OjpxdF9zdGF0aWNfbWV0YWNhbGwpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0Q29u
bmVjdGlvbk9iamVjdDo6cXRfbWV0YWNhc3QpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0Q29ubmVj
dGlvbk9iamVjdDo6cXRfbWV0YWNhbGwpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0Q29ubmVjdGlv
bk9iamVjdDo6ZXhlY3V0ZSk6CiAgICAqIGJyaWRnZS9xdC9xdF9ydW50aW1lLmg6CiAgICAoUXRD
b25uZWN0aW9uT2JqZWN0KToKICAgICogYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0LmNwcDogQ29w
aWVkIGZyb20gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwLgogICAgKEJp
bmRpbmdzKToKICAgIChRV0tOb0RlYnVnKToKICAgIChKU0M6OkJpbmRpbmdzOjpRV0tOb0RlYnVn
OjpRV0tOb0RlYnVnKToKICAgIChKU0M6OkJpbmRpbmdzOjpRV0tOb0RlYnVnOjp+UVdLTm9EZWJ1
Zyk6CiAgICAoSlNDOjpCaW5kaW5nczo6UVdLTm9EZWJ1Zzo6b3BlcmF0b3I8PCk6CiAgICAoSlND
OjpCaW5kaW5nczo6b3BlcmF0b3I8PCk6CiAgICAoUnVudGltZUNvbnZlcnNpb24pOgogICAgKEpT
Qzo6QmluZGluZ3M6OnJlZ2lzdGVyQ3VzdG9tVHlwZSk6CiAgICAoSlNDOjpCaW5kaW5nczo6aXNK
U1VpbnQ4Q2xhbXBlZEFycmF5KToKICAgIChKU0M6OkJpbmRpbmdzOjp2YWx1ZVJlYWxUeXBlKToK
ICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb1FWYXJpYW50TWFwKToKICAgIChKU0M6
OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb1FWYXJpYW50KToKICAgIChKU0M6OkJpbmRpbmdzOjpj
b252ZXJ0UVZhcmlhbnRUb1ZhbHVlKToKICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRo
b2Q6OlF0UnVudGltZU1ldGhvZCk6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9k
OjpmaW5pc2hDcmVhdGlvbik6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9kOjp+
UXRSdW50aW1lTWV0aG9kKToKICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6OmRl
c3Ryb3kpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGhvZERhdGE6On5RdFJ1bnRp
bWVNZXRob2REYXRhKToKICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2REYXRhOjpm
aW5hbGl6ZSk6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0YU1ldGhvZERhdGE6On5R
dFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSk6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lQ29u
bmVjdGlvbk1ldGhvZERhdGE6On5RdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSk6CiAgICAo
UXRNZXRob2RNYXRjaFR5cGUpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0TWV0aG9kTWF0Y2hUeXBl
OjpRdE1ldGhvZE1hdGNoVHlwZSk6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRNZXRob2RNYXRjaFR5
cGU6OmtpbmQpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0TWV0aG9kTWF0Y2hUeXBlOjppc1ZhbGlk
KToKICAgIChKU0M6OkJpbmRpbmdzOjpRdE1ldGhvZE1hdGNoVHlwZTo6aXNWYXJpYW50KToKICAg
IChKU0M6OkJpbmRpbmdzOjpRdE1ldGhvZE1hdGNoVHlwZTo6aXNNZXRhVHlwZSk6CiAgICAoSlND
OjpCaW5kaW5nczo6UXRNZXRob2RNYXRjaFR5cGU6OmlzVW5yZXNvbHZlZCk6CiAgICAoSlNDOjpC
aW5kaW5nczo6UXRNZXRob2RNYXRjaFR5cGU6OmlzTWV0YUVudW0pOgogICAgKEpTQzo6QmluZGlu
Z3M6OlF0TWV0aG9kTWF0Y2hUeXBlOjplbnVtZXJhdG9ySW5kZXgpOgogICAgKEpTQzo6QmluZGlu
Z3M6OlF0TWV0aG9kTWF0Y2hUeXBlOjp2YXJpYW50KToKICAgIChKU0M6OkJpbmRpbmdzOjpRdE1l
dGhvZE1hdGNoVHlwZTo6bWV0YVR5cGUpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0TWV0aG9kTWF0
Y2hUeXBlOjptZXRhRW51bSk6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRNZXRob2RNYXRjaFR5cGU6
OnVucmVzb2x2ZWQpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0TWV0aG9kTWF0Y2hUeXBlOjp0eXBl
SWQpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0TWV0aG9kTWF0Y2hUeXBlOjpuYW1lKToKICAgIChR
dE1ldGhvZE1hdGNoRGF0YSk6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRNZXRob2RNYXRjaERhdGE6
OlF0TWV0aG9kTWF0Y2hEYXRhKToKICAgIChKU0M6OkJpbmRpbmdzOjpRdE1ldGhvZE1hdGNoRGF0
YTo6aXNWYWxpZCk6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRNZXRob2RNYXRjaERhdGE6OmZpcnN0
VW5yZXNvbHZlZEluZGV4KToKICAgIChKU0M6OkJpbmRpbmdzOjppbmRleE9mTWV0YUVudW0pOgog
ICAgKEpTQzo6QmluZGluZ3M6OmZpbmRNZXRob2RJbmRleCk6CiAgICAoSlNDOjpCaW5kaW5nczo6
ZmluZFNpZ25hbEluZGV4KToKICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9k
OjpRdFJ1bnRpbWVNZXRhTWV0aG9kKToKICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRh
TWV0aG9kOjpmaW5pc2hDcmVhdGlvbik6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0
YU1ldGhvZDo6dmlzaXRDaGlsZHJlbik6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0
YU1ldGhvZDo6Y2FsbCk6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0YU1ldGhvZDo6
Z2V0Q2FsbERhdGEpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGFNZXRob2Q6Omdl
dE93blByb3BlcnR5U2xvdCk6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0YU1ldGhv
ZDo6Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKToKICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRp
bWVNZXRhTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKICAgIChKU0M6OkJpbmRpbmdzOjpR
dFJ1bnRpbWVNZXRhTWV0aG9kOjpsZW5ndGhHZXR0ZXIpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0
UnVudGltZU1ldGFNZXRob2Q6OmNvbm5lY3RHZXR0ZXIpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0
UnVudGltZU1ldGFNZXRob2Q6OmRpc2Nvbm5lY3RHZXR0ZXIpOgogICAgKEpTQzo6QmluZGluZ3M6
OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QpOgog
ICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmZpbmlzaENyZWF0
aW9uKToKICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpjYWxs
KToKICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpnZXRDYWxs
RGF0YSk6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0
T3duUHJvcGVydHlTbG90KToKICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVDb25uZWN0aW9u
TWV0aG9kOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IpOgogICAgKEpTQzo6QmluZGluZ3M6OlF0
UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blByb3BlcnR5TmFtZXMpOgogICAgKEpTQzo6
QmluZGluZ3M6OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6Omxlbmd0aEdldHRlcik6CiAgICAo
SlNDOjpCaW5kaW5nczo6UXRDb25uZWN0aW9uT2JqZWN0OjpRdENvbm5lY3Rpb25PYmplY3QpOgog
ICAgKEpTQzo6QmluZGluZ3M6OlF0Q29ubmVjdGlvbk9iamVjdDo6flF0Q29ubmVjdGlvbk9iamVj
dCk6CiAgICAoSlNDOjpCaW5kaW5nczo6UXRDb25uZWN0aW9uT2JqZWN0OjptZXRhT2JqZWN0KToK
ICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5lY3Rpb25PYmplY3Q6OnF0X21ldGFjYXN0KToKICAg
IChKU0M6OkJpbmRpbmdzOjpRdENvbm5lY3Rpb25PYmplY3Q6OnF0X21ldGFjYWxsKToKICAgIChK
U0M6OkJpbmRpbmdzOjppc0phdmFTY3JpcHRGdW5jdGlvbik6CiAgICAoSlNDOjpCaW5kaW5nczo6
UXRDb25uZWN0aW9uT2JqZWN0OjpleGVjdXRlKToKICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5l
Y3Rpb25PYmplY3Q6Om1hdGNoKToKICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5lY3Rpb25PYmpl
Y3Q6OmNyZWF0ZVdpdGhJbnRlcm5hbEpTQyk6CiAgICAoSlNDOjpCaW5kaW5nczo6OjpRdEFycmF5
KToKICAgIChKU0M6OkJpbmRpbmdzOjo6On5RdEFycmF5KToKICAgIChKU0M6OkJpbmRpbmdzOjo6
OnJvb3RPYmplY3QpOgogICAgKEpTQzo6QmluZGluZ3M6Ojo6c2V0VmFsdWVBdCk6CiAgICAoSlND
OjpCaW5kaW5nczo6Ojp2YWx1ZUF0KToKICAgIAogICAgU291cmNlL1dlYktpdDI6CiAgICAKICAg
ICogVUlQcm9jZXNzL0FQSS9xdC90ZXN0cy9wdWJsaWNhcGkvdHN0X3B1YmxpY2FwaS5jcHA6CiAg
ICAoZ2F0aGVyQVBJKToKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9T
b3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzY1NGM0Ni4uM2UxZTY5YyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDExMyBAQAorMjAxMi0wNS0wNCAgS2VudCBIYW5zZW4gPGtlbnQuaGFuc2Vu
QG5va2lhLmNvbT4KKworICAgICAgICBbUXRdIFVwZGF0ZSBRdCBicmlkZ2UgYWZ0ZXIgY2hhbmdl
cyB0byBRTWV0YU1ldGhvZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9ODU0NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBRTWV0YU1ldGhvZDo6c2lnbmF0dXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBtZXRo
b2RTaWduYXR1cmUoKSBhbmQKKyAgICAgICAgcmV0dXJucyBhIFFCeXRlQXJyYXkuCisKKyAgICAg
ICAgVGhlIG5ldyBmdW5jdGlvbiBRTWV0YU1ldGhvZDo6bmFtZSgpIGdpdmVzIGRpcmVjdCBhY2Nl
c3MgdG8gYQorICAgICAgICBtZXRob2QncyBuYW1lLiByZXR1cm5UeXBlKCksIHBhcmFtZXRlckNv
dW50KCksIGFuZCBwYXJhbWV0ZXJUeXBlKCkKKyAgICAgICAgZ2l2ZSBkaXJlY3QgYWNjZXNzIHRv
IHR5cGUgaW5mb3JtYXRpb24uCisKKyAgICAgICAgUG9ydGVkIHRoZSBjdXN0b20gUXRDb25uZWN0
aW9uT2JqZWN0IG1ldGEtb2JqZWN0IHRvIHJldmlzaW9uIDc7CisgICAgICAgIHJldmlzaW9uIDYg
YW5kIGJlbG93IGFyZW4ndCBzdXBwb3J0ZWQgKGFuZCBkb24ndCBjb21waWxlKSB3aXRoIFF0NS4K
KworICAgICAgICAqIFRhcmdldC5wcmk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X2NsYXNzLmNw
cDoKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0Q2xhc3M6OmZhbGxiYWNrT2JqZWN0KToKKyAg
ICAgICAgKiBicmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6UXRJbnN0YW5jZTo6Z2V0UHJvcGVydHlOYW1lcyk6CisgICAgICAgICogYnJpZGdlL3F0L3F0
X3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZmluZE1ldGhvZEluZGV4KToK
KyAgICAgICAgKEJpbmRpbmdzKToKKyAgICAgICAgKHF0X21ldGFfc3RyaW5nZGF0YV9RdENvbm5l
Y3Rpb25PYmplY3RfdCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5lY3Rpb25PYmpl
Y3Q6OnF0X3N0YXRpY19tZXRhY2FsbCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5l
Y3Rpb25PYmplY3Q6OnF0X21ldGFjYXN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0Q29u
bmVjdGlvbk9iamVjdDo6cXRfbWV0YWNhbGwpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRD
b25uZWN0aW9uT2JqZWN0OjpleGVjdXRlKToKKyAgICAgICAgKiBicmlkZ2UvcXQvcXRfcnVudGlt
ZS5oOgorICAgICAgICAoUXRDb25uZWN0aW9uT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2UvcXQv
cXRfcnVudGltZV9xdDQuY3BwOiBDb3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQv
cXRfcnVudGltZS5jcHAuCisgICAgICAgIChCaW5kaW5ncyk6CisgICAgICAgIChRV0tOb0RlYnVn
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlFXS05vRGVidWc6OlFXS05vRGVidWcpOgorICAg
ICAgICAoSlNDOjpCaW5kaW5nczo6UVdLTm9EZWJ1Zzo6flFXS05vRGVidWcpOgorICAgICAgICAo
SlNDOjpCaW5kaW5nczo6UVdLTm9EZWJ1Zzo6b3BlcmF0b3I8PCk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKFJ1bnRpbWVDb252ZXJzaW9uKToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OnJlZ2lzdGVyQ3VzdG9tVHlwZSk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjppc0pTVWludDhDbGFtcGVkQXJyYXkpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
dmFsdWVSZWFsVHlwZSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjb252ZXJ0VmFsdWVUb1FW
YXJpYW50TWFwKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OmNvbnZlcnRWYWx1ZVRvUVZhcmlh
bnQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Y29udmVydFFWYXJpYW50VG9WYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6OlF0UnVudGltZU1ldGhvZCk6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0aW9u
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGhvZDo6flF0UnVudGltZU1l
dGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRob2Q6OmRlc3Ryb3kp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9kRGF0YTo6flF0UnVudGlt
ZU1ldGhvZERhdGEpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0aG9kRGF0
YTo6ZmluYWxpemUpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0YU1ldGhv
ZERhdGE6On5RdFJ1bnRpbWVNZXRhTWV0aG9kRGF0YSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdz
OjpRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YTo6flF0UnVudGltZUNvbm5lY3Rpb25NZXRo
b2REYXRhKToKKyAgICAgICAgKFF0TWV0aG9kTWF0Y2hUeXBlKToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OlF0TWV0aG9kTWF0Y2hUeXBlOjpRdE1ldGhvZE1hdGNoVHlwZSk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpRdE1ldGhvZE1hdGNoVHlwZTo6a2luZCk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpRdE1ldGhvZE1hdGNoVHlwZTo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpRdE1ldGhvZE1hdGNoVHlwZTo6aXNWYXJpYW50KToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OlF0TWV0aG9kTWF0Y2hUeXBlOjppc01ldGFUeXBlKToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OlF0TWV0aG9kTWF0Y2hUeXBlOjppc1VucmVzb2x2ZWQpOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6UXRNZXRob2RNYXRjaFR5cGU6OmlzTWV0YUVudW0pOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6UXRNZXRob2RNYXRjaFR5cGU6OmVudW1lcmF0b3JJbmRleCk6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpRdE1ldGhvZE1hdGNoVHlwZTo6dmFyaWFudCk6CisgICAgICAgIChKU0M6OkJp
bmRpbmdzOjpRdE1ldGhvZE1hdGNoVHlwZTo6bWV0YVR5cGUpOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6UXRNZXRob2RNYXRjaFR5cGU6Om1ldGFFbnVtKToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OlF0TWV0aG9kTWF0Y2hUeXBlOjp1bnJlc29sdmVkKToKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OlF0TWV0aG9kTWF0Y2hUeXBlOjp0eXBlSWQpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6
UXRNZXRob2RNYXRjaFR5cGU6Om5hbWUpOgorICAgICAgICAoUXRNZXRob2RNYXRjaERhdGEpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRNZXRob2RNYXRjaERhdGE6OlF0TWV0aG9kTWF0Y2hE
YXRhKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0TWV0aG9kTWF0Y2hEYXRhOjppc1ZhbGlk
KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0TWV0aG9kTWF0Y2hEYXRhOjpmaXJzdFVucmVz
b2x2ZWRJbmRleCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjppbmRleE9mTWV0YUVudW0pOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6ZmluZE1ldGhvZEluZGV4KToKKyAgICAgICAgKEpTQzo6
QmluZGluZ3M6OmZpbmRTaWduYWxJbmRleCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1
bnRpbWVNZXRhTWV0aG9kOjpRdFJ1bnRpbWVNZXRhTWV0aG9kKToKKyAgICAgICAgKEpTQzo6Qmlu
ZGluZ3M6OlF0UnVudGltZU1ldGFNZXRob2Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGFNZXRob2Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0YU1ldGhvZDo6Y2FsbCk6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpnZXRDYWxsRGF0YSk6CisgICAgICAg
IChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVNZXRhTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3Qp
OgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0YU1ldGhvZDo6Z2V0T3duUHJv
cGVydHlEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZU1ldGFN
ZXRob2Q6OmdldE93blByb3BlcnR5TmFtZXMpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRS
dW50aW1lTWV0YU1ldGhvZDo6bGVuZ3RoR2V0dGVyKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlF0UnVudGltZU1ldGFNZXRob2Q6OmNvbm5lY3RHZXR0ZXIpOgorICAgICAgICAoSlNDOjpCaW5k
aW5nczo6UXRSdW50aW1lTWV0YU1ldGhvZDo6ZGlzY29ubmVjdEdldHRlcik6CisgICAgICAgIChK
U0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpRdFJ1bnRpbWVDb25uZWN0
aW9uTWV0aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZUNvbm5lY3Rpb25N
ZXRob2Q6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGlt
ZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50
aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0Q2FsbERhdGEpOgorICAgICAgICAoSlNDOjpCaW5kaW5n
czo6UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAg
ICAgKEpTQzo6QmluZGluZ3M6OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdFJ1bnRpbWVDb25uZWN0
aW9uTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eU5hbWVzKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6
OlF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6Omxlbmd0aEdldHRlcik6CisgICAgICAgIChKU0M6
OkJpbmRpbmdzOjpRdENvbm5lY3Rpb25PYmplY3Q6OlF0Q29ubmVjdGlvbk9iamVjdCk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5lY3Rpb25PYmplY3Q6On5RdENvbm5lY3Rpb25PYmpl
Y3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRDb25uZWN0aW9uT2JqZWN0OjptZXRhT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6OlF0Q29ubmVjdGlvbk9iamVjdDo6cXRfbWV0
YWNhc3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRDb25uZWN0aW9uT2JqZWN0OjpxdF9t
ZXRhY2FsbCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjppc0phdmFTY3JpcHRGdW5jdGlvbik6
CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5lY3Rpb25PYmplY3Q6OmV4ZWN1dGUpOgor
ICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRDb25uZWN0aW9uT2JqZWN0OjptYXRjaCk6CisgICAg
ICAgIChKU0M6OkJpbmRpbmdzOjpRdENvbm5lY3Rpb25PYmplY3Q6OmNyZWF0ZVdpdGhJbnRlcm5h
bEpTQyk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjo6OlF0QXJyYXkpOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6Ojp+UXRBcnJheSk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjo6OnJvb3RP
YmplY3QpOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6OjpzZXRWYWx1ZUF0KToKKyAgICAgICAg
KEpTQzo6QmluZGluZ3M6Ojo6dmFsdWVBdCk6CisKIDIwMTItMDUtMDQgIEFsZXhpcyBNZW5hcmQg
IDxhbGV4aXMubWVuYXJkQG9wZW5ib3NzYS5vcmc+CiAKICAgICAgICAgW1F0XSBCdWlsZCBmaXgg
d2hlbiB1c2luZyBsaWJwbmcgdmVyc2lvbiA+IDEuMi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL1RhcmdldC5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpCmluZGV4IGNkNDliNTEu
Ljk5YTAyNGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKKysrIGIvU291
cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQpAQCAtMzk2LDEyICszOTYsMTcgQEAgdjggewogICAgICAg
ICBicmlkZ2UvcXQvcXRfY2xhc3MuY3BwIFwKICAgICAgICAgYnJpZGdlL3F0L3F0X2luc3RhbmNl
LmNwcCBcCiAgICAgICAgIGJyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcCBcCi0gICAgICAg
IGJyaWRnZS9xdC9xdF9ydW50aW1lLmNwcCBcCiAgICAgICAgIGJyaWRnZS9ydW50aW1lX2FycmF5
LmNwcCBcCiAgICAgICAgIGJyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAgXAogICAgICAgICBicmlk
Z2UvcnVudGltZV9vYmplY3QuY3BwIFwKICAgICAgICAgYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAg
XAogICAgICAgICB0ZXN0aW5nL2pzL1dlYkNvcmVUZXN0U3VwcG9ydC5jcHAKKworICAgIGhhdmVR
dCg1KSB7CisgICAgICAgIFNPVVJDRVMgKz0gYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwCisgICAg
fSBlbHNlIHsKKyAgICAgICAgU09VUkNFUyArPSBicmlkZ2UvcXQvcXRfcnVudGltZV9xdDQuY3Bw
CisgICAgfQogfQogCiBTT1VSQ0VTICs9IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9jbGFzcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfY2xhc3Mu
Y3BwCmluZGV4IGI3YTNkZWEuLjJlZDdhMDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9xdC9xdF9jbGFzcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2Ns
YXNzLmNwcApAQCAtOTksMTIgKzk5LDE2IEBAIEpTVmFsdWUgUXRDbGFzczo6ZmFsbGJhY2tPYmpl
Y3QoRXhlY1N0YXRlKiBleGVjLCBJbnN0YW5jZSogaW5zdCwgY29uc3QgSWRlbnRpZmllCiAgICAg
ICAgIGlmIChtLmFjY2VzcygpID09IFFNZXRhTWV0aG9kOjpQcml2YXRlKQogICAgICAgICAgICAg
Y29udGludWU7CiAKKyNpZiBRVF9WRVJTSU9OIDwgUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQog
ICAgICAgICBpbnQgaXRlciA9IDA7CiAgICAgICAgIGNvbnN0IGNoYXIqIHNpZ25hdHVyZSA9IG0u
c2lnbmF0dXJlKCk7CiAgICAgICAgIHdoaWxlIChzaWduYXR1cmVbaXRlcl0gJiYgc2lnbmF0dXJl
W2l0ZXJdICE9ICcoJykKICAgICAgICAgICAgICsraXRlcjsKIAogICAgICAgICBpZiAobm9ybWFs
ID09IFFCeXRlQXJyYXk6OmZyb21SYXdEYXRhKHNpZ25hdHVyZSwgaXRlcikpIHsKKyNlbHNlCisg
ICAgICAgIGlmIChub3JtYWwgPT0gbS5uYW1lKCkpIHsKKyNlbmRpZgogICAgICAgICAgICAgUXRS
dW50aW1lTWV0YU1ldGhvZCogdmFsID0gUXRSdW50aW1lTWV0YU1ldGhvZDo6Y3JlYXRlKGV4ZWMs
IGlkZW50aWZpZXIsIHN0YXRpY19jYXN0PFF0SW5zdGFuY2UqPihpbnN0KSwgaW5kZXgsIG5vcm1h
bCwgZmFsc2UpOwogICAgICAgICAgICAgcXRpbnN0LT5tX21ldGhvZHMuaW5zZXJ0KG5hbWUsIFdy
aXRlQmFycmllcjxKU09iamVjdD4oZXhlYy0+Z2xvYmFsRGF0YSgpLCBxdGluc3QtPmNyZWF0ZVJ1
bnRpbWVPYmplY3QoZXhlYyksIHZhbCkpOwogICAgICAgICAgICAgcmV0dXJuIHZhbDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCmluZGV4IDY1NGM5NTMuLmNlZDAwMjIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNwcApAQCAtMjM2LDggKzIz
NiwxNCBAQCB2b2lkIFF0SW5zdGFuY2U6OmdldFByb3BlcnR5TmFtZXMoRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWVBcnJheSYgYXJyYXkpCiAgICAgICAgIGNvbnN0IGludCBtZXRob2RDb3Vu
dCA9IG1ldGEtPm1ldGhvZENvdW50KCk7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBtZXRob2RD
b3VudDsgaSsrKSB7CiAgICAgICAgICAgICBRTWV0YU1ldGhvZCBtZXRob2QgPSBtZXRhLT5tZXRo
b2QoaSk7Ci0gICAgICAgICAgICBpZiAobWV0aG9kLmFjY2VzcygpICE9IFFNZXRhTWV0aG9kOjpQ
cml2YXRlKQorICAgICAgICAgICAgaWYgKG1ldGhvZC5hY2Nlc3MoKSAhPSBRTWV0YU1ldGhvZDo6
UHJpdmF0ZSkgeworI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQor
ICAgICAgICAgICAgICAgIFFTdHJpbmcgc2lnID0gUVN0cmluZzo6ZnJvbUxhdGluMShtZXRob2Qu
bWV0aG9kU2lnbmF0dXJlKCkpOworICAgICAgICAgICAgICAgIGFycmF5LmFkZChJZGVudGlmaWVy
KGV4ZWMsIFVTdHJpbmcoc2lnLnV0ZjE2KCksIHNpZy5sZW5ndGgoKSkpKTsKKyNlbHNlCiAgICAg
ICAgICAgICAgICAgYXJyYXkuYWRkKElkZW50aWZpZXIoZXhlYywgbWV0aG9kLnNpZ25hdHVyZSgp
KSk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIH0KQEAgLTI4Myw2
ICsyODksMTggQEAgSlNWYWx1ZSBRdEluc3RhbmNlOjpzdHJpbmdWYWx1ZShFeGVjU3RhdGUqIGV4
ZWMpIGNvbnN0CiAgICAgICAgICAgICAvLyBDaGVjayB0byBzZWUgaG93IG11Y2ggd2UgY2FuIGNh
bGwgaXQKICAgICAgICAgICAgIGlmIChtLmFjY2VzcygpICE9IFFNZXRhTWV0aG9kOjpQcml2YXRl
CiAgICAgICAgICAgICAgICAgJiYgbS5tZXRob2RUeXBlKCkgIT0gUU1ldGFNZXRob2Q6OlNpZ25h
bAorI2lmIFFUX1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQorICAgICAgICAg
ICAgICAgICYmIG0ucGFyYW1ldGVyQ291bnQoKSA9PSAwCisgICAgICAgICAgICAgICAgJiYgbS5y
ZXR1cm5UeXBlKCkgIT0gUU1ldGFUeXBlOjpWb2lkKSB7CisgICAgICAgICAgICAgICAgUVZhcmlh
bnQgcmV0KG0ucmV0dXJuVHlwZSgpLCAodm9pZCopMCk7CisgICAgICAgICAgICAgICAgdm9pZCAq
IHFhcmdzWzFdOworICAgICAgICAgICAgICAgIHFhcmdzWzBdID0gcmV0LmRhdGEoKTsKKworICAg
ICAgICAgICAgICAgIGlmIChRTWV0YU9iamVjdDo6bWV0YWNhbGwob2JqLCBRTWV0YU9iamVjdDo6
SW52b2tlTWV0YU1ldGhvZCwgaW5kZXgsIHFhcmdzKSA8IDApIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHJldC5pc1ZhbGlkKCkgJiYgcmV0LmNhbkNvbnZlcnQoUVZhcmlhbnQ6OlN0cmluZykp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA9IHJldC50b1N0cmluZygpLnRvTGF0aW4x
KCkuY29uc3REYXRhKCk7IC8vICMjIyBMYXRpbiAxPyBBc2NpaT8KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHVzZURlZmF1bHQgPSBmYWxzZTsKKyNlbHNlCiAgICAgICAgICAgICAgICAgJiYgbS5w
YXJhbWV0ZXJUeXBlcygpLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIq
IHJldHNpZyA9IG0udHlwZU5hbWUoKTsKICAgICAgICAgICAgICAgICBpZiAocmV0c2lnICYmICpy
ZXRzaWcpIHsKQEAgLTI5NSw2ICszMTMsNyBAQCBKU1ZhbHVlIFF0SW5zdGFuY2U6OnN0cmluZ1Zh
bHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
dWYgPSByZXQudG9TdHJpbmcoKS50b0xhdGluMSgpLmNvbnN0RGF0YSgpOyAvLyAjIyMgTGF0aW4g
MT8gQXNjaWk/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlRGVmYXVsdCA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CkBAIC0zODQsNyArNDAzLDExIEBA
IHZvaWQgUXRGaWVsZDo6c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SW5zdGFuY2UqIGluc3QsIEpTVmFsdWUKICAgICBpZiAob2JqKSB7CiAgICAgICAgIFFNZXRhVHlw
ZTo6VHlwZSBhcmd0eXBlID0gUU1ldGFUeXBlOjpWb2lkOwogICAgICAgICBpZiAobV90eXBlID09
IE1ldGFQcm9wZXJ0eSkKKyNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwg
MCkKKyAgICAgICAgICAgIGFyZ3R5cGUgPSAoUU1ldGFUeXBlOjpUeXBlKSBtX3Byb3BlcnR5LnVz
ZXJUeXBlKCk7CisjZWxzZQogICAgICAgICAgICAgYXJndHlwZSA9IChRTWV0YVR5cGU6OlR5cGUp
IFFNZXRhVHlwZTo6dHlwZShtX3Byb3BlcnR5LnR5cGVOYW1lKCkpOworI2VuZGlmCiAKICAgICAg
ICAgLy8gZHluYW1pYyBwcm9wZXJ0aWVzIGp1c3QgZ2V0IGFueSBRVmFyaWFudAogICAgICAgICBR
VmFyaWFudCB2YWwgPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIGFWYWx1ZSwgYXJndHlw
ZSwgMCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5jcHAKaW5kZXggMWRlZjY5
Ny4uZGE4NzViZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRp
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcApAQCAt
MTE2MSwxNCArMTE2MSwxMCBAQCBzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUq
IGV4ZWMsCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAvLyB0cnkgYW5kIGZpbmQg
YWxsIG1hdGNoaW5nIG5hbWVkIG1ldGhvZHMKLSAgICAgICAgaWYgKG0uc2lnbmF0dXJlKCkgPT0g
c2lnbmF0dXJlKQorICAgICAgICBpZiAoIW92ZXJsb2FkcyAmJiBtLm1ldGhvZFNpZ25hdHVyZSgp
ID09IHNpZ25hdHVyZSkKKyAgICAgICAgICAgIG1hdGNoaW5nSW5kaWNlcy5hcHBlbmQoaSk7Cisg
ICAgICAgIGVsc2UgaWYgKG92ZXJsb2FkcyAmJiBtLm5hbWUoKSA9PSBzaWduYXR1cmUpCiAgICAg
ICAgICAgICBtYXRjaGluZ0luZGljZXMuYXBwZW5kKGkpOwotICAgICAgICBlbHNlIGlmIChvdmVy
bG9hZHMpIHsKLSAgICAgICAgICAgIFFCeXRlQXJyYXkgcmF3c2lnbmF0dXJlID0gbS5zaWduYXR1
cmUoKTsKLSAgICAgICAgICAgIHJhd3NpZ25hdHVyZS50cnVuY2F0ZShyYXdzaWduYXR1cmUuaW5k
ZXhPZignKCcpKTsKLSAgICAgICAgICAgIGlmIChyYXdzaWduYXR1cmUgPT0gc2lnbmF0dXJlKQot
ICAgICAgICAgICAgICAgIG1hdGNoaW5nSW5kaWNlcy5hcHBlbmQoaSk7Ci0gICAgICAgIH0KICAg
ICB9CiAKICAgICBpbnQgY2hvc2VuSW5kZXggPSAtMTsKQEAgLTExODksMTEgKzExODUsOSBAQCBz
dGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4ZWMsCiAKICAgICAgICAgLy8g
cmVzb2x2ZSByZXR1cm4gdHlwZQogICAgICAgICBRQnl0ZUFycmF5IHJldHVyblR5cGVOYW1lID0g
bWV0aG9kLnR5cGVOYW1lKCk7Ci0gICAgICAgIGludCBydHlwZSA9IFFNZXRhVHlwZTo6dHlwZShy
ZXR1cm5UeXBlTmFtZSk7Ci0gICAgICAgIGlmICgocnR5cGUgPT0gMCkgJiYgIXJldHVyblR5cGVO
YW1lLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgaWYgKHJldHVyblR5cGVOYW1lID09ICJRVmFy
aWFudCIpIHsKLSAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6
OnZhcmlhbnQoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHJldHVyblR5cGVOYW1lLmVuZHNX
aXRoKCcqJykpIHsKKyAgICAgICAgaW50IHJ0eXBlID0gbWV0aG9kLnJldHVyblR5cGUoKTsKKyAg
ICAgICAgaWYgKHJ0eXBlID09IFFNZXRhVHlwZTo6VW5rbm93blR5cGUpIHsKKyAgICAgICAgICAg
IGlmIChyZXR1cm5UeXBlTmFtZS5lbmRzV2l0aCgnKicpKSB7CiAgICAgICAgICAgICAgICAgdHlw
ZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjptZXRhVHlwZShRTWV0YVR5cGU6OlZvaWRTdGFy
LCByZXR1cm5UeXBlTmFtZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAg
ICBpbnQgZW51bUluZGV4ID0gaW5kZXhPZk1ldGFFbnVtKG1ldGEsIHJldHVyblR5cGVOYW1lKTsK
QEAgLTEyMDUsNyArMTE5OSw3IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEV4ZWNTdGF0
ZSogZXhlYywKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBpZiAocmV0dXJuVHlwZU5hbWUgPT0gIlFWYXJpYW50IikKKyAgICAg
ICAgICAgIGlmIChydHlwZSA9PSBRTWV0YVR5cGU6OlFWYXJpYW50KQogICAgICAgICAgICAgICAg
IHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6dmFyaWFudCgpKTsKICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6Om1l
dGFUeXBlKHJ0eXBlLCByZXR1cm5UeXBlTmFtZSkpOwpAQCAtMTIxNSwyMSArMTIwOSwxNyBAQCBz
dGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIFFMaXN0
PFFCeXRlQXJyYXk+IHBhcmFtZXRlclR5cGVOYW1lcyA9IG1ldGhvZC5wYXJhbWV0ZXJUeXBlcygp
OwogICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHBhcmFtZXRlclR5cGVOYW1lcy5jb3VudCgp
OyArK2kpIHsKICAgICAgICAgICAgIFFCeXRlQXJyYXkgYXJnVHlwZU5hbWUgPSBwYXJhbWV0ZXJU
eXBlTmFtZXMuYXQoaSk7Ci0gICAgICAgICAgICBpbnQgYXR5cGUgPSBRTWV0YVR5cGU6OnR5cGUo
YXJnVHlwZU5hbWUpOwotICAgICAgICAgICAgaWYgKGF0eXBlID09IDApIHsKLSAgICAgICAgICAg
ICAgICBpZiAoYXJnVHlwZU5hbWUgPT0gIlFWYXJpYW50IikgewotICAgICAgICAgICAgICAgICAg
ICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6OnZhcmlhbnQoKSk7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgaW50IGVudW1JbmRleCA9IGluZGV4
T2ZNZXRhRW51bShtZXRhLCBhcmdUeXBlTmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChl
bnVtSW5kZXggIT0gLTEpCi0gICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRN
ZXRob2RNYXRjaFR5cGU6Om1ldGFFbnVtKGVudW1JbmRleCwgYXJnVHlwZU5hbWUpKTsKLSAgICAg
ICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnJlc29sdmVk
VHlwZXMgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0
aG9kTWF0Y2hUeXBlOjp1bnJlc29sdmVkKGFyZ1R5cGVOYW1lKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGludCBhdHlwZSA9IG1ldGhvZC5wYXJhbWV0ZXJUeXBlKGkpOwor
ICAgICAgICAgICAgaWYgKGF0eXBlID09IFFNZXRhVHlwZTo6VW5rbm93blR5cGUpIHsKKyAgICAg
ICAgICAgICAgICBpbnQgZW51bUluZGV4ID0gaW5kZXhPZk1ldGFFbnVtKG1ldGEsIGFyZ1R5cGVO
YW1lKTsKKyAgICAgICAgICAgICAgICBpZiAoZW51bUluZGV4ICE9IC0xKQorICAgICAgICAgICAg
ICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6Om1ldGFFbnVtKGVudW1JbmRl
eCwgYXJnVHlwZU5hbWUpKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgdW5yZXNvbHZlZFR5cGVzID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdHlwZXMu
YXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjp1bnJlc29sdmVkKGFyZ1R5cGVOYW1lKSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAo
YXJnVHlwZU5hbWUgPT0gIlFWYXJpYW50IikKKyAgICAgICAgICAgICAgICBpZiAoYXR5cGUgPT0g
UU1ldGFUeXBlOjpRVmFyaWFudCkKICAgICAgICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0
TWV0aG9kTWF0Y2hUeXBlOjp2YXJpYW50KCkpOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICAgICAgdHlwZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjptZXRhVHlwZShh
dHlwZSwgYXJnVHlwZU5hbWUpKTsKQEAgLTEyMzgsMTMgKzEyMjgsMTMgQEAgc3RhdGljIGludCBm
aW5kTWV0aG9kSW5kZXgoRXhlY1N0YXRlKiBleGVjLAogCiAgICAgICAgIC8vIElmIHRoZSBuYXRp
dmUgbWV0aG9kIHJlcXVpcmVzIG1vcmUgYXJndW1lbnRzIHRoYW4gd2hhdCB3YXMgcGFzc2VkIGZy
b20gSmF2YVNjcmlwdAogICAgICAgICBpZiAoZXhlYy0+YXJndW1lbnRDb3VudCgpICsgMSA8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlcy5jb3VudCgpKSkgewotICAgICAgICAgICAgcU1hdGNo
RGVidWcoKSA8PCAiTWF0Y2g6dG9vIGZldyBhcmdzIGZvciIgPDwgbWV0aG9kLnNpZ25hdHVyZSgp
OworICAgICAgICAgICAgcU1hdGNoRGVidWcoKSA8PCAiTWF0Y2g6dG9vIGZldyBhcmdzIGZvciIg
PDwgbWV0aG9kLm1ldGhvZFNpZ25hdHVyZSgpOwogICAgICAgICAgICAgdG9vRmV3QXJncy5hcHBl
bmQoaW5kZXgpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAogICAgICAgICBp
ZiAodW5yZXNvbHZlZFR5cGVzKSB7Ci0gICAgICAgICAgICBxTWF0Y2hEZWJ1ZygpIDw8ICJNYXRj
aDp1bnJlc29sdmVkIGFyZyB0eXBlcyBmb3IiIDw8IG1ldGhvZC5zaWduYXR1cmUoKTsKKyAgICAg
ICAgICAgIHFNYXRjaERlYnVnKCkgPDwgIk1hdGNoOnVucmVzb2x2ZWQgYXJnIHR5cGVzIGZvciIg
PDwgbWV0aG9kLm1ldGhvZFNpZ25hdHVyZSgpOwogICAgICAgICAgICAgLy8gcmVtZW1iZXIgaXQg
c28gd2UgY2FuIGdpdmUgYW4gZXJyb3IgbWVzc2FnZSBsYXRlciwgaWYgbmVjZXNzYXJ5CiAgICAg
ICAgICAgICB1bnJlc29sdmVkLmFwcGVuZChRdE1ldGhvZE1hdGNoRGF0YSgvKm1hdGNoRGlzdGFu
Y2U9Ki9JTlRfTUFYLCBpbmRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVzLCBRVmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQsIDEwPigpKSk7
CkBAIC0xMjU2LDcgKzEyNDYsOCBAQCBzdGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3Rh
dGUqIGV4ZWMsCiAgICAgICAgICAgICBhcmdzLnJlc2l6ZSh0eXBlcy5jb3VudCgpKTsKIAogICAg
ICAgICBRdE1ldGhvZE1hdGNoVHlwZSByZXRUeXBlID0gdHlwZXNbMF07Ci0gICAgICAgIGFyZ3Nb
MF0gPSBRVmFyaWFudChyZXRUeXBlLnR5cGVJZCgpLCAodm9pZCAqKTApOyAvLyB0aGUgcmV0dXJu
IHZhbHVlCisgICAgICAgIGlmIChyZXRUeXBlLnR5cGVJZCgpICE9IFFNZXRhVHlwZTo6Vm9pZCkK
KyAgICAgICAgICAgIGFyZ3NbMF0gPSBRVmFyaWFudChyZXRUeXBlLnR5cGVJZCgpLCAodm9pZCAq
KTApOyAvLyB0aGUgcmV0dXJuIHZhbHVlCiAKICAgICAgICAgYm9vbCBjb252ZXJ0ZWQgPSB0cnVl
OwogICAgICAgICBpbnQgbWF0Y2hEaXN0YW5jZSA9IDA7CkBAIC0xMjc0LDcgKzEyNjUsNyBAQCBz
dGF0aWMgaW50IGZpbmRNZXRob2RJbmRleChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KIAotICAgICAgICBxTWF0Y2hEZWJ1ZygpIDw8ICJNYXRjaDogIiA8PCBtZXRo
b2Quc2lnbmF0dXJlKCkgPDwgKGNvbnZlcnRlZCA/ICJjb252ZXJ0ZWQiOiJmYWlsZWQgdG8gY29u
dmVydCIpIDw8ICJkaXN0YW5jZSAiIDw8IG1hdGNoRGlzdGFuY2U7CisgICAgICAgIHFNYXRjaERl
YnVnKCkgPDwgIk1hdGNoOiAiIDw8IG1ldGhvZC5tZXRob2RTaWduYXR1cmUoKSA8PCAoY29udmVy
dGVkID8gImNvbnZlcnRlZCI6ImZhaWxlZCB0byBjb252ZXJ0IikgPDwgImRpc3RhbmNlICIgPDwg
bWF0Y2hEaXN0YW5jZTsKIAogICAgICAgICBpZiAoY29udmVydGVkKSB7CiAgICAgICAgICAgICBp
ZiAoKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSArIDEgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHR5
cGVzLmNvdW50KCkpKQpAQCAtMTMwOSwxMiArMTMwMCwxMiBAQCBzdGF0aWMgaW50IGZpbmRNZXRo
b2RJbmRleChFeGVjU3RhdGUqIGV4ZWMsCiAgICAgICAgIC8vIE5vIHZhbGlkIGZ1bmN0aW9ucyBh
dCBhbGwgLSBmb3JtYXQgYW4gZXJyb3IgbWVzc2FnZQogICAgICAgICBpZiAoIWNvbnZlcnNpb25G
YWlsZWQuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBRU3RyaW5nIG1lc3NhZ2UgPSBRU3RyaW5n
Ojpmcm9tTGF0aW4xKCJpbmNvbXBhdGlibGUgdHlwZSBvZiBhcmd1bWVudChzKSBpbiBjYWxsIHRv
ICUwKCk7IGNhbmRpZGF0ZXMgd2VyZVxuIikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC5hcmcoUUxhdGluMVN0cmluZyhzaWduYXR1cmUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC5hcmcoUVN0cmluZzo6ZnJvbUxhdGluMShzaWduYXR1cmUpKTsKICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgY29udmVyc2lvbkZhaWxlZC5zaXplKCk7ICsraSkgewogICAg
ICAgICAgICAgICAgIGlmIChpID4gMCkKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBR
TGF0aW4xU3RyaW5nKCJcbiIpOwogICAgICAgICAgICAgICAgIFFNZXRhTWV0aG9kIG10ZCA9IG1l
dGEtPm1ldGhvZChjb252ZXJzaW9uRmFpbGVkLmF0KGkpKTsKLSAgICAgICAgICAgICAgICBtZXNz
YWdlICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIiAgICAlMCIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0
aW4xKG10ZC5zaWduYXR1cmUoKSkpOworICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiICAgICUwIikuYXJnKFFTdHJpbmc6OmZyb21MYXRpbjEobXRkLm1ldGhv
ZFNpZ25hdHVyZSgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAqcEVycm9yID0gdGhy
b3dFcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbWVzc2FnZS50b0xhdGluMSgpLmNv
bnN0RGF0YSgpKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoIXVucmVzb2x2ZWQuaXNFbXB0eSgpKSB7
CkBAIC0xMzI4LDEyICsxMzE5LDEyIEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEV4ZWNT
dGF0ZSogZXhlYywKICAgICAgICAgICAgICpwRXJyb3IgPSB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0
ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIFFTdHJpbmcgbWVzc2FnZSA9IFFTdHJpbmc6OmZyb21M
YXRpbjEoInRvbyBmZXcgYXJndW1lbnRzIGluIGNhbGwgdG8gJTAoKTsgY2FuZGlkYXRlcyBhcmVc
biIpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoc2ln
bmF0dXJlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFFTdHJpbmc6OmZy
b21MYXRpbjEoc2lnbmF0dXJlKSk7CiAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRv
b0Zld0FyZ3Muc2l6ZSgpOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAoaSA+IDApCiAgICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gUUxhdGluMVN0cmluZygiXG4iKTsKICAgICAgICAg
ICAgICAgICBRTWV0YU1ldGhvZCBtdGQgPSBtZXRhLT5tZXRob2QodG9vRmV3QXJncy5hdChpKSk7
Ci0gICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIgICAgJTAi
KS5hcmcoUVN0cmluZzo6ZnJvbUxhdGluMShtdGQuc2lnbmF0dXJlKCkpKTsKKyAgICAgICAgICAg
ICAgICBtZXNzYWdlICs9IFFTdHJpbmc6OmZyb21MYXRpbjEoIiAgICAlMCIpLmFyZyhRU3RyaW5n
Ojpmcm9tTGF0aW4xKG10ZC5tZXRob2RTaWduYXR1cmUoKSkpOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgKnBFcnJvciA9IHRocm93RXJyb3IoZXhlYywgY3JlYXRlU3ludGF4RXJyb3IoZXhl
YywgbWVzc2FnZS50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7CiAgICAgICAgIH0KQEAgLTEzNTQs
NyArMTM0NSw3IEBAIHN0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEV4ZWNTdGF0ZSogZXhlYywK
ICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPiAwKQogICAgICAgICAgICAgICAgICAgICAgICAg
bWVzc2FnZSArPSBRTGF0aW4xU3RyaW5nKCJcbiIpOwogICAgICAgICAgICAgICAgICAgICBRTWV0
YU1ldGhvZCBtdGQgPSBtZXRhLT5tZXRob2QoY2FuZGlkYXRlcy5hdChpKS5pbmRleCk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiICAgICUwIiku
YXJnKFFTdHJpbmc6OmZyb21MYXRpbjEobXRkLnNpZ25hdHVyZSgpKSk7CisgICAgICAgICAgICAg
ICAgICAgIG1lc3NhZ2UgKz0gUVN0cmluZzo6ZnJvbUxhdGluMSgiICAgICUwIikuYXJnKFFTdHJp
bmc6OmZyb21MYXRpbjEobXRkLm1ldGhvZFNpZ25hdHVyZSgpKSk7CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgKnBFcnJvciA9IHRocm93RXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsIG1lc3NhZ2UudG9MYXRpbjEoKS5jb25zdERhdGEoKSkpOwpA
QCAtMTc2NywyOSArMTc1OCw2NCBAQCBRdENvbm5lY3Rpb25PYmplY3Q6On5RdENvbm5lY3Rpb25P
YmplY3QoKQogICAgIEpTVmFsdWVVbnByb3RlY3QobV9jb250ZXh0LCBtX3JlY2VpdmVyRnVuY3Rp
b24pOwogfQogCisvLyBCZWdpbiBtb2MtZ2VuZXJhdGVkIGNvZGUgLS0gbW9kaWZ5IHdpdGggY2Fy
ZSEgQ2hlY2sgIkhBTkQgRURJVCIgcGFydHMKK3N0cnVjdCBxdF9tZXRhX3N0cmluZ2RhdGFfUXRD
b25uZWN0aW9uT2JqZWN0X3QgeworICAgIFFCeXRlQXJyYXlEYXRhIGRhdGFbM107CisgICAgY2hh
ciBzdHJpbmdkYXRhWzQ0XTsKK307CisjZGVmaW5lIFFUX01PQ19MSVRFUkFMKGlkeCwgb2ZzLCBs
ZW4pIHsgXAorICAgIFFfUkVGQ09VTlRfSU5JVElBTElaRV9TVEFUSUMsIGxlbiwgMCwgMCwgXAor
ICAgIG9mZnNldG9mKHF0X21ldGFfc3RyaW5nZGF0YV9RdENvbm5lY3Rpb25PYmplY3RfdCwgc3Ry
aW5nZGF0YSkgKyBvZnMgXAorICAgICAgICAtIGlkeCAqIHNpemVvZihRQnl0ZUFycmF5RGF0YSkg
XAorICAgIH0KK3N0YXRpYyBjb25zdCBxdF9tZXRhX3N0cmluZ2RhdGFfUXRDb25uZWN0aW9uT2Jq
ZWN0X3QgcXRfbWV0YV9zdHJpbmdkYXRhX1F0Q29ubmVjdGlvbk9iamVjdCA9IHsKKyAgICB7CitR
VF9NT0NfTElURVJBTCgwLCAwLCAzMyksCitRVF9NT0NfTElURVJBTCgxLCAzNCwgNyksCitRVF9N
T0NfTElURVJBTCgyLCA0MiwgMCkKKyAgICB9LAorICAgICJKU0M6OkJpbmRpbmdzOjpRdENvbm5l
Y3Rpb25PYmplY3RcMCIKKyAgICAiZXhlY3V0ZVwwXDAiCit9OworI3VuZGVmIFFUX01PQ19MSVRF
UkFMCisKIHN0YXRpYyBjb25zdCB1aW50IHF0X21ldGFfZGF0YV9RdENvbm5lY3Rpb25PYmplY3Rb
XSA9IHsKIAogIC8vIGNvbnRlbnQ6Ci0gICAgICAgMSwgICAgICAgLy8gcmV2aXNpb24KKyAgICAg
ICA3LCAgICAgICAvLyByZXZpc2lvbgogICAgICAgIDAsICAgICAgIC8vIGNsYXNzbmFtZQogICAg
ICAgIDAsICAgIDAsIC8vIGNsYXNzaW5mbwotICAgICAgIDEsICAgMTAsIC8vIG1ldGhvZHMKKyAg
ICAgICAxLCAgIDE0LCAvLyBtZXRob2RzCiAgICAgICAgMCwgICAgMCwgLy8gcHJvcGVydGllcwog
ICAgICAgIDAsICAgIDAsIC8vIGVudW1zL3NldHMKKyAgICAgICAwLCAgICAwLCAvLyBjb25zdHJ1
Y3RvcnMKKyAgICAgICAwLCAgICAgICAvLyBmbGFncworICAgICAgIDAsICAgICAgIC8vIHNpZ25h
bENvdW50CisKKyAvLyBzbG90czogbmFtZSwgYXJnYywgcGFyYW1ldGVycywgdGFnLCBmbGFncwor
ICAgICAgIDEsICAgIDAsICAgMTksICAgIDIsIDB4MGEsCiAKLSAvLyBzbG90czogc2lnbmF0dXJl
LCBwYXJhbWV0ZXJzLCB0eXBlLCB0YWcsIGZsYWdzCi0gICAgICAyOCwgICAyNywgICAyNywgICAy
NywgMHgwYSwKKyAvLyBzbG90czogcGFyYW1ldGVycworICAgIFFNZXRhVHlwZTo6Vm9pZCwKIAog
ICAgICAgIDAgICAgICAgIC8vIGVvZAogfTsKIAotc3RhdGljIGNvbnN0IGNoYXIgcXRfbWV0YV9z
dHJpbmdkYXRhX1F0Q29ubmVjdGlvbk9iamVjdFtdID0gewotICAgICJKU0M6OkJpbmRpbmdzOjpR
dENvbm5lY3Rpb25PYmplY3RcMFwwZXhlY3V0ZSgpXDAiCi19Owordm9pZCBRdENvbm5lY3Rpb25P
YmplY3Q6OnF0X3N0YXRpY19tZXRhY2FsbChRT2JqZWN0ICpfbywgUU1ldGFPYmplY3Q6OkNhbGwg
X2MsIGludCBfaWQsIHZvaWQgKipfYSkKK3sKKyAgICBpZiAoX2MgPT0gUU1ldGFPYmplY3Q6Oklu
dm9rZU1ldGFNZXRob2QpIHsKKyAgICAgICAgUV9BU1NFUlQoc3RhdGljTWV0YU9iamVjdC5jYXN0
KF9vKSk7CisgICAgICAgIFF0Q29ubmVjdGlvbk9iamVjdCAqX3QgPSBzdGF0aWNfY2FzdDxRdENv
bm5lY3Rpb25PYmplY3QgKj4oX28pOworICAgICAgICBzd2l0Y2ggKF9pZCkgeworICAgICAgICBj
YXNlIDA6IF90LT5leGVjdXRlKF9hKTsgYnJlYWs7IC8vIEhBTkQgRURJVDogYWRkIF9hIHBhcmFt
ZXRlcgorICAgICAgICBkZWZhdWx0OiA7CisgICAgICAgIH0KKyAgICB9Cit9CiAKIGNvbnN0IFFN
ZXRhT2JqZWN0IFF0Q29ubmVjdGlvbk9iamVjdDo6c3RhdGljTWV0YU9iamVjdCA9IHsKLSAgICB7
ICZRT2JqZWN0OjpzdGF0aWNNZXRhT2JqZWN0LCBxdF9tZXRhX3N0cmluZ2RhdGFfUXRDb25uZWN0
aW9uT2JqZWN0LAotICAgICAgcXRfbWV0YV9kYXRhX1F0Q29ubmVjdGlvbk9iamVjdCwgMCB9Cisg
ICAgeyAmUU9iamVjdDo6c3RhdGljTWV0YU9iamVjdCwgcXRfbWV0YV9zdHJpbmdkYXRhX1F0Q29u
bmVjdGlvbk9iamVjdC5kYXRhLAorICAgICAgcXRfbWV0YV9kYXRhX1F0Q29ubmVjdGlvbk9iamVj
dCwgcXRfc3RhdGljX21ldGFjYWxsLCAwLCAwIH0KIH07CiAKIGNvbnN0IFFNZXRhT2JqZWN0ICpR
dENvbm5lY3Rpb25PYmplY3Q6Om1ldGFPYmplY3QoKSBjb25zdApAQCAtMTgwMCwyNSArMTgyNiwy
NCBAQCBjb25zdCBRTWV0YU9iamVjdCAqUXRDb25uZWN0aW9uT2JqZWN0OjptZXRhT2JqZWN0KCkg
Y29uc3QKIHZvaWQgKlF0Q29ubmVjdGlvbk9iamVjdDo6cXRfbWV0YWNhc3QoY29uc3QgY2hhciAq
X2NsbmFtZSkKIHsKICAgICBpZiAoIV9jbG5hbWUpIHJldHVybiAwOwotICAgIGlmICghc3RyY21w
KF9jbG5hbWUsIHF0X21ldGFfc3RyaW5nZGF0YV9RdENvbm5lY3Rpb25PYmplY3QpKQorICAgIGlm
ICghc3RyY21wKF9jbG5hbWUsIHF0X21ldGFfc3RyaW5nZGF0YV9RdENvbm5lY3Rpb25PYmplY3Qu
c3RyaW5nZGF0YSkpCiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx2b2lkKj4oY29uc3RfY2Fz
dDxRdENvbm5lY3Rpb25PYmplY3QqPih0aGlzKSk7CiAgICAgcmV0dXJuIFFPYmplY3Q6OnF0X21l
dGFjYXN0KF9jbG5hbWUpOwogfQogCi0vLyBUaGlzIGlzIHdoYXQgbW9jIHdvdWxkIGdlbmVyYXRl
IGV4Y2VwdCBieSB0aGUgZmFjdCB0aGF0IHdlIHBhc3MgYWxsIGFyZ3VtZW50cyB0byBvdXIgZXhl
Y3V0ZSgpIHNsb3QuCiBpbnQgUXRDb25uZWN0aW9uT2JqZWN0OjpxdF9tZXRhY2FsbChRTWV0YU9i
amVjdDo6Q2FsbCBfYywgaW50IF9pZCwgdm9pZCAqKl9hKQogewogICAgIF9pZCA9IFFPYmplY3Q6
OnF0X21ldGFjYWxsKF9jLCBfaWQsIF9hKTsKICAgICBpZiAoX2lkIDwgMCkKICAgICAgICAgcmV0
dXJuIF9pZDsKICAgICBpZiAoX2MgPT0gUU1ldGFPYmplY3Q6Okludm9rZU1ldGFNZXRob2QpIHsK
LSAgICAgICAgc3dpdGNoIChfaWQpIHsKLSAgICAgICAgY2FzZSAwOiBleGVjdXRlKF9hKTsgYnJl
YWs7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKF9pZCA8IDEpCisgICAgICAgICAgICBxdF9zdGF0
aWNfbWV0YWNhbGwodGhpcywgX2MsIF9pZCwgX2EpOwogICAgICAgICBfaWQgLT0gMTsKICAgICB9
CiAgICAgcmV0dXJuIF9pZDsKIH0KKy8vIEVuZCBvZiBtb2MtZ2VuZXJhdGVkIGNvZGUKIAogc3Rh
dGljIGJvb2wgaXNKYXZhU2NyaXB0RnVuY3Rpb24oSlNPYmplY3RSZWYgb2JqZWN0KQogewpAQCAt
MTg0MCwxMiArMTg2NSwxMCBAQCB2b2lkIFF0Q29ubmVjdGlvbk9iamVjdDo6ZXhlY3V0ZSh2b2lk
KiogYXJndikKICAgICBjb25zdCBRTWV0YU9iamVjdCogbWV0YSA9IHNlbmRlci0+bWV0YU9iamVj
dCgpOwogICAgIGNvbnN0IFFNZXRhTWV0aG9kIG1ldGhvZCA9IG1ldGEtPm1ldGhvZChtX3NpZ25h
bEluZGV4KTsKIAotICAgIFFMaXN0PFFCeXRlQXJyYXk+IHBhcmFtZXRlclR5cGVzID0gbWV0aG9k
LnBhcmFtZXRlclR5cGVzKCk7Ci0KICAgICBKU1ZhbHVlUmVmKiBpZ25vcmVkRXhjZXB0aW9uID0g
MDsKICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gbGVuZ3RoUHJvcGVydHkoSlNTdHJpbmdD
cmVhdGVXaXRoVVRGOENTdHJpbmcoImxlbmd0aCIpKTsKICAgICBpbnQgcmVjZWl2ZXJMZW5ndGgg
PSBpbnQoSlNWYWx1ZVRvTnVtYmVyKG1fY29udGV4dCwgSlNPYmplY3RHZXRQcm9wZXJ0eShtX2Nv
bnRleHQsIG1fcmVjZWl2ZXJGdW5jdGlvbiwgbGVuZ3RoUHJvcGVydHkuZ2V0KCksIGlnbm9yZWRF
eGNlcHRpb24pLCBpZ25vcmVkRXhjZXB0aW9uKSk7Ci0gICAgaW50IGFyZ2MgPSBxTWF4KHBhcmFt
ZXRlclR5cGVzLmNvdW50KCksIHJlY2VpdmVyTGVuZ3RoKTsKKyAgICBpbnQgYXJnYyA9IHFNYXgo
bWV0aG9kLnBhcmFtZXRlckNvdW50KCksIHJlY2VpdmVyTGVuZ3RoKTsKICAgICBXVEY6OlZlY3Rv
cjxKU1ZhbHVlUmVmPiBhcmdzKGFyZ2MpOwogCiAgICAgLy8gVE9ETzogcmVtb3ZlIG9uY2UgY29u
dmVyc2lvbiBmdW5jdGlvbnMgdXNlIEpTQyBBUEkuCkBAIC0xODUzLDcgKzE4NzYsNyBAQCB2b2lk
IFF0Q29ubmVjdGlvbk9iamVjdDo6ZXhlY3V0ZSh2b2lkKiogYXJndikKICAgICBSZWZQdHI8Um9v
dE9iamVjdD4gcm9vdE9iamVjdCA9IG1fc2VuZGVySW5zdGFuY2UtPnJvb3RPYmplY3QoKTsKIAog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7Ci0gICAgICAgIGludCBhcmdUeXBl
ID0gUU1ldGFUeXBlOjp0eXBlKHBhcmFtZXRlclR5cGVzLmF0KGkpKTsKKyAgICAgICAgaW50IGFy
Z1R5cGUgPSBtZXRob2QucGFyYW1ldGVyVHlwZShpKTsKICAgICAgICAgYXJnc1tpXSA9IDo6dG9S
ZWYoZXhlYywgY29udmVydFFWYXJpYW50VG9WYWx1ZShleGVjLCByb290T2JqZWN0LCBRVmFyaWFu
dChhcmdUeXBlLCBhcmd2W2krMV0pKSk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5oIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0
X3J1bnRpbWUuaAppbmRleCA0MDY5OTdmLi41M2U1ZjI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9icmlkZ2UvcXQvcXRfcnVudGltZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JyaWRnZS9x
dC9xdF9ydW50aW1lLmgKQEAgLTIzOCwxNSArMjM4LDIwIEBAIHByaXZhdGU6CiAvLyB3aXRoIHRo
ZSBhcHByb3ByaWF0ZSBzaWduYWwgb2YgJ3NlbmRlcicuIFdoZW4gZXhlY3V0ZSgpIGlzIGNhbGxl
ZCwgaXQgd2lsbCBjYWxsIEpTICdyZWNlaXZlckZ1bmN0aW9uJy4KIGNsYXNzIFF0Q29ubmVjdGlv
bk9iamVjdCA6IHB1YmxpYyBRT2JqZWN0CiB7CisjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9O
X0NIRUNLKDUsIDAsIDApCisgICAgUV9PQkpFQ1RfRkFLRQorI2VuZGlmCiBwdWJsaWM6CiAgICAg
UXRDb25uZWN0aW9uT2JqZWN0KEpTQ29udGV4dFJlZiwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBz
ZW5kZXJJbnN0YW5jZSwgaW50IHNpZ25hbEluZGV4LCBKU09iamVjdFJlZiByZWNlaXZlciwgSlNP
YmplY3RSZWYgcmVjZWl2ZXJGdW5jdGlvbik7CiAgICAgflF0Q29ubmVjdGlvbk9iamVjdCgpOwog
CisjaWYgUVRfVkVSU0lPTiA8IFFUX1ZFUlNJT05fQ0hFQ0soNSwgMCwgMCkKICAgICAvLyBFeHBs
aWNpdGx5IGRlZmluZSB0aGVzZSBiZWNhdXNlIHdhbnQgYSBjdXN0b20gcXRfbWV0YWNhbGwoKSwg
c28gd2UgY2FuJ3QgdXNlIFFfT0JKRUNUIG1hY3JvLgogICAgIHN0YXRpYyBjb25zdCBRTWV0YU9i
amVjdCBzdGF0aWNNZXRhT2JqZWN0OwogICAgIHZpcnR1YWwgY29uc3QgUU1ldGFPYmplY3QgKm1l
dGFPYmplY3QoKSBjb25zdDsKICAgICB2aXJ0dWFsIHZvaWQgKnF0X21ldGFjYXN0KGNvbnN0IGNo
YXIgKik7CiAgICAgdmlydHVhbCBpbnQgcXRfbWV0YWNhbGwoUU1ldGFPYmplY3Q6OkNhbGwsIGlu
dCwgdm9pZCAqKmFyZ3YpOworI2VuZGlmCiAKICAgICB2b2lkIGV4ZWN1dGUodm9pZCAqKmFyZ3Yp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9icmlkZ2UvcXQvcXRfcnVudGltZV9xdDQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGVmNjk3Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWVfcXQ0LmNwcApAQCAtMCwwICsxLDE5
MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgInF0X3J1bnRpbWUuaCIKKworI2luY2x1
ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJCb29sZWFuT2JqZWN0LmgiCisjaW5jbHVkZSAiRGF0
ZUluc3RhbmNlLmgiCisjaW5jbHVkZSAiRGF0ZVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkZ1bmN0
aW9uUHJvdG90eXBlLmgiCisjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNpbmNsdWRlICJKU0Fy
cmF5LmgiCisjaW5jbHVkZSAiSlNEb2N1bWVudC5oIgorI2luY2x1ZGUgIkpTRE9NQmluZGluZy5o
IgorI2luY2x1ZGUgIkpTRE9NV2luZG93LmgiCisjaW5jbHVkZSA8SlNGdW5jdGlvbi5oPgorI2lu
Y2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNIVE1MRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIkpTTG9jay5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNSZXRh
aW5QdHIuaCIKKyNpbmNsdWRlICJKU1VpbnQ4Q2xhbXBlZEFycmF5LmgiCisjaW5jbHVkZSAiT2Jq
ZWN0UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKKyNpbmNsdWRl
ICJSZWdFeHBDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlJlZ0V4cE9iamVjdC5oIgorI2luY2x1
ZGUgInFkYXRldGltZS5oIgorI2luY2x1ZGUgInFkZWJ1Zy5oIgorI2luY2x1ZGUgInFtZXRhb2Jq
ZWN0LmgiCisjaW5jbHVkZSAicW1ldGF0eXBlLmgiCisjaW5jbHVkZSAicW9iamVjdC5oIgorI2lu
Y2x1ZGUgInFzdHJpbmdsaXN0LmgiCisjaW5jbHVkZSAicXRfaW5zdGFuY2UuaCIKKyNpbmNsdWRl
ICJxdF9waXhtYXBydW50aW1lLmgiCisjaW5jbHVkZSAicXZhcmxlbmd0aGFycmF5LmgiCisKKyNp
bmNsdWRlIDx3dGYvRGF0ZU1hdGguaD4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUg
PHJ1bnRpbWUvRXJyb3IuaD4KKyNpbmNsdWRlIDxydW50aW1lX2FycmF5Lmg+CisjaW5jbHVkZSA8
cnVudGltZV9vYmplY3QuaD4KKworLy8gUXRTY3JpcHQgaGFzIHRoZXNlCitRX0RFQ0xBUkVfTUVU
QVRZUEUoUU9iamVjdExpc3QpOworUV9ERUNMQVJFX01FVEFUWVBFKFFMaXN0PGludD4pOworUV9E
RUNMQVJFX01FVEFUWVBFKFFWYXJpYW50KTsKKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisK
K25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIEJpbmRpbmdzIHsKKworLy8gRGVidWdnaW5nCisv
LyNkZWZpbmUgUVRXS19SVU5USU1FX0NPTlZFUlNJT05fREVCVUcKKy8vI2RlZmluZSBRVFdLX1JV
TlRJTUVfTUFUQ0hfREVCVUcKKworY2xhc3MgUVdLTm9EZWJ1ZworeworcHVibGljOgorICAgIGlu
bGluZSBRV0tOb0RlYnVnKCl7fQorICAgIGlubGluZSB+UVdLTm9EZWJ1Zygpe30KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgaW5saW5lIFFXS05vRGVidWcgJm9wZXJhdG9yPDwoY29u
c3QgVCAmKSB7IHJldHVybiAqdGhpczsgfQorfTsKKworI2lmZGVmIFFUV0tfUlVOVElNRV9DT05W
RVJTSU9OX0RFQlVHCisjZGVmaW5lIHFDb252RGVidWcoKSBxRGVidWcoKQorI2Vsc2UKKyNkZWZp
bmUgcUNvbnZEZWJ1ZygpIFFXS05vRGVidWcoKQorI2VuZGlmCisKKyNpZmRlZiBRVFdLX1JVTlRJ
TUVfTUFUQ0hfREVCVUcKKyNkZWZpbmUgcU1hdGNoRGVidWcoKSBxRGVidWcoKQorI2Vsc2UKKyNk
ZWZpbmUgcU1hdGNoRGVidWcoKSBRV0tOb0RlYnVnKCkKKyNlbmRpZgorCit0eXBlZGVmIGVudW0g
eworICAgIFZhcmlhbnQgPSAwLAorICAgIE51bWJlciwKKyAgICBCb29sZWFuLAorICAgIFN0cmlu
ZywKKyAgICBEYXRlLAorICAgIFJlZ0V4cCwKKyAgICBBcnJheSwKKyAgICBRT2JqLAorICAgIE9i
amVjdCwKKyAgICBOdWxsLAorICAgIFJUQXJyYXksCisgICAgSlNVaW50OENsYW1wZWRBcnJheQor
fSBKU1JlYWxUeXBlOworCisjaWYgZGVmaW5lZChRVFdLX1JVTlRJTUVfQ09OVkVSU0lPTl9ERUJV
RykgfHwgZGVmaW5lZChRVFdLX1JVTlRJTUVfTUFUQ0hfREVCVUcpCitRRGVidWcgb3BlcmF0b3I8
PChRRGVidWcgZGJnLCBjb25zdCBKU1JlYWxUeXBlICZjKQoreworICAgICBjb25zdCBjaGFyICpt
YXBbXSA9IHsgIlZhcmlhbnQiLCAiTnVtYmVyIiwgIkJvb2xlYW4iLCAiU3RyaW5nIiwgIkRhdGUi
LAorICAgICAgICAgIlJlZ0V4cCIsICJBcnJheSIsICJSVE9iamVjdCIsICJPYmplY3QiLCAiTnVs
bCIsICJSVEFycmF5In07CisKKyAgICAgZGJnLm5vc3BhY2UoKSA8PCAiSlNUeXBlKCIgPDwgKChp
bnQpYykgPDwgIiwgIiA8PCAgbWFwW2NdIDw8ICIpIjsKKworICAgICByZXR1cm4gZGJnLnNwYWNl
KCk7Cit9CisjZW5kaWYKKworc3RydWN0IFJ1bnRpbWVDb252ZXJzaW9uIHsKKyAgICBDb252ZXJ0
VG9KU1ZhbHVlRnVuY3Rpb24gdG9KU1ZhbHVlRnVuYzsKKyAgICBDb252ZXJ0VG9WYXJpYW50RnVu
Y3Rpb24gdG9WYXJpYW50RnVuYzsKK307CisKK3R5cGVkZWYgUUhhc2g8aW50LCBSdW50aW1lQ29u
dmVyc2lvbj4gUnVudGltZUNvbnZlcnNpb25UYWJsZTsKK1FfR0xPQkFMX1NUQVRJQyhSdW50aW1l
Q29udmVyc2lvblRhYmxlLCBjdXN0b21SdW50aW1lQ29udmVyc2lvbnMpCisKK3ZvaWQgcmVnaXN0
ZXJDdXN0b21UeXBlKGludCBxdE1ldGFUeXBlSWQsIENvbnZlcnRUb1ZhcmlhbnRGdW5jdGlvbiB0
b1ZhcmlhbnRGdW5jLCBDb252ZXJ0VG9KU1ZhbHVlRnVuY3Rpb24gdG9KU1ZhbHVlRnVuYykKK3sK
KyAgICBSdW50aW1lQ29udmVyc2lvbiBjb252ZXJzaW9uOworICAgIGNvbnZlcnNpb24udG9KU1Zh
bHVlRnVuYyA9IHRvSlNWYWx1ZUZ1bmM7CisgICAgY29udmVyc2lvbi50b1ZhcmlhbnRGdW5jID0g
dG9WYXJpYW50RnVuYzsKKyAgICBjdXN0b21SdW50aW1lQ29udmVyc2lvbnMoKS0+aW5zZXJ0KHF0
TWV0YVR5cGVJZCwgY29udmVyc2lvbik7Cit9CisKK3N0YXRpYyBib29sIGlzSlNVaW50OENsYW1w
ZWRBcnJheShKU1ZhbHVlIHZhbCkKK3sKKyAgICByZXR1cm4gdmFsLmlzQ2VsbCgpICYmIHZhbC5p
bmhlcml0cygmSlNVaW50OENsYW1wZWRBcnJheTo6c19pbmZvKTsKK30KKworc3RhdGljIEpTUmVh
bFR5cGUgdmFsdWVSZWFsVHlwZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsKQoreworICAg
IGlmICh2YWwuaXNOdW1iZXIoKSkKKyAgICAgICAgcmV0dXJuIE51bWJlcjsKKyAgICBlbHNlIGlm
ICh2YWwuaXNTdHJpbmcoKSkKKyAgICAgICAgcmV0dXJuIFN0cmluZzsKKyAgICBlbHNlIGlmICh2
YWwuaXNCb29sZWFuKCkpCisgICAgICAgIHJldHVybiBCb29sZWFuOworICAgIGVsc2UgaWYgKHZh
bC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIE51bGw7CisgICAgZWxzZSBpZiAoaXNKU1VpbnQ4
Q2xhbXBlZEFycmF5KHZhbCkpCisgICAgICAgIHJldHVybiBKU1VpbnQ4Q2xhbXBlZEFycmF5Owor
ICAgIGVsc2UgaWYgKHZhbC5pc09iamVjdCgpKSB7CisgICAgICAgIEpTT2JqZWN0ICpvYmplY3Qg
PSB2YWwudG9PYmplY3QoZXhlYyk7CisgICAgICAgIGlmIChvYmplY3QtPmluaGVyaXRzKCZSdW50
aW1lQXJyYXk6OnNfaW5mbykpICAvLyBSdW50aW1lQXJyYXkgJ2luaGVyaXRzJyBmcm9tIEFycmF5
LCBidXQgbm90IGluIEMrKworICAgICAgICAgICAgcmV0dXJuIFJUQXJyYXk7CisgICAgICAgIGVs
c2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkpTQXJyYXk6OnNfaW5mbykpCisgICAgICAgICAgICBy
ZXR1cm4gQXJyYXk7CisgICAgICAgIGVsc2UgaWYgKG9iamVjdC0+aW5oZXJpdHMoJkRhdGVJbnN0
YW5jZTo6c19pbmZvKSkKKyAgICAgICAgICAgIHJldHVybiBEYXRlOworICAgICAgICBlbHNlIGlm
IChvYmplY3QtPmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OnNfaW5mbykpCisgICAgICAgICAgICBy
ZXR1cm4gUmVnRXhwOworICAgICAgICBlbHNlIGlmIChvYmplY3QtPmluaGVyaXRzKCZSdW50aW1l
T2JqZWN0OjpzX2luZm8pKQorICAgICAgICAgICAgcmV0dXJuIFFPYmo7CisgICAgICAgIHJldHVy
biBPYmplY3Q7CisgICAgfQorCisgICAgcmV0dXJuIFN0cmluZzsgLy8gSSBkb24ndCBrbm93Lgor
fQorCitRVmFyaWFudCBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KEV4ZWNTdGF0ZSosIEpTVmFsdWUs
IFFNZXRhVHlwZTo6VHlwZSwgaW50KiwgSGFzaFNldDxKU09iamVjdCo+KiwgaW50KTsKKworc3Rh
dGljIFFWYXJpYW50TWFwIGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnRNYXAoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogb2JqZWN0LCBIYXNoU2V0PEpTT2JqZWN0Kj4qIHZpc2l0ZWRPYmplY3RzLCBp
bnQgcmVjdXJzaW9uTGltaXQpCit7CisgICAgUV9BU1NFUlQoIWV4ZWMtPmhhZEV4Y2VwdGlvbigp
KTsKKworICAgIFByb3BlcnR5TmFtZUFycmF5IHByb3BlcnRpZXMoZXhlYyk7CisgICAgb2JqZWN0
LT5tZXRob2RUYWJsZSgpLT5nZXRQcm9wZXJ0eU5hbWVzKG9iamVjdCwgZXhlYywgcHJvcGVydGll
cywgRXhjbHVkZURvbnRFbnVtUHJvcGVydGllcyk7CisgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gcHJvcGVydGllcy5iZWdpbigpOworICAgIFFWYXJpYW50TWFwIHJl
c3VsdDsKKyAgICBpbnQgb2JqZGlzdCA9IDA7CisKKyAgICB3aGlsZSAoaXQgIT0gcHJvcGVydGll
cy5lbmQoKSkgeworICAgICAgICBpZiAob2JqZWN0LT5wcm9wZXJ0eUlzRW51bWVyYWJsZShleGVj
LCAqaXQpKSB7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IG9iamVjdC0+Z2V0KGV4ZWMsICpp
dCk7CisgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICAg
ICAgZXhlYy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIFFWYXJpYW50IHYgPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1l
dGFUeXBlOjpWb2lkLCAmb2JqZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsK
KyAgICAgICAgICAgICAgICBpZiAob2JqZGlzdCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAg
IFVTdHJpbmcgdXN0cmluZyA9ICgqaXQpLnVzdHJpbmcoKTsKKyAgICAgICAgICAgICAgICAgICAg
UVN0cmluZyBpZCA9IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFj
dGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lmlu
c2VydChpZCwgdik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgICsraXQ7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1FWYXJpYW50
IGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBR
TWV0YVR5cGU6OlR5cGUgaGludCwgaW50ICpkaXN0YW5jZSwgSGFzaFNldDxKU09iamVjdCo+KiB2
aXNpdGVkT2JqZWN0cywgaW50IHJlY3Vyc2lvbkxpbWl0KQoreworICAgIC0tcmVjdXJzaW9uTGlt
aXQ7CisKKyAgICBpZiAoIXZhbHVlIHx8ICFyZWN1cnNpb25MaW1pdCkKKyAgICAgICAgcmV0dXJu
IFFWYXJpYW50KCk7CisKKyAgICBKU09iamVjdCogb2JqZWN0ID0gMDsKKyAgICBpZiAodmFsdWUu
aXNPYmplY3QoKSkgeworICAgICAgICBvYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKKyAg
ICAgICAgaWYgKHZpc2l0ZWRPYmplY3RzLT5jb250YWlucyhvYmplY3QpKQorICAgICAgICAgICAg
cmV0dXJuIFFWYXJpYW50KCk7CisKKyAgICAgICAgdmlzaXRlZE9iamVjdHMtPmFkZChvYmplY3Qp
OworICAgIH0KKworICAgIC8vIGNoZWNrIG1hZ2ljIHBvaW50ZXIgdmFsdWVzIGJlZm9yZSBkZXJl
ZmVyZW5jaW5nIHZhbHVlCisgICAgaWYgKHZhbHVlID09IGpzTmFOKCkKKyAgICAgICAgfHwgKHZh
bHVlID09IGpzVW5kZWZpbmVkKCkKKyAgICAgICAgICAgICYmIGhpbnQgIT0gUU1ldGFUeXBlOjpR
U3RyaW5nCisgICAgICAgICAgICAmJiBoaW50ICE9IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlw
ZUlkPFFWYXJpYW50PigpKSkgeworICAgICAgICBpZiAoZGlzdGFuY2UpCisgICAgICAgICAgICAq
ZGlzdGFuY2UgPSAtMTsKKyAgICAgICAgcmV0dXJuIFFWYXJpYW50KCk7CisgICAgfQorCisgICAg
SlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKyAgICBKU1JlYWxUeXBlIHR5cGUg
PSB2YWx1ZVJlYWxUeXBlKGV4ZWMsIHZhbHVlKTsKKyAgICBpZiAoaGludCA9PSBRTWV0YVR5cGU6
OlZvaWQpIHsKKyAgICAgICAgc3dpdGNoKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgTnVtYmVy
OgorICAgICAgICAgICAgICAgIGhpbnQgPSBRTWV0YVR5cGU6OkRvdWJsZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQm9vbGVhbjoKKyAgICAgICAgICAgICAgICBo
aW50ID0gUU1ldGFUeXBlOjpCb29sOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBTdHJpbmc6CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGhp
bnQgPSBRTWV0YVR5cGU6OlFTdHJpbmc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIERhdGU6CisgICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6UURhdGVU
aW1lOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBSZWdFeHA6Cisg
ICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6UVJlZ0V4cDsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAgICAgICAgIGlmIChv
YmplY3QtPmluaGVyaXRzKCZOdW1iZXJPYmplY3Q6OnNfaW5mbykpCisgICAgICAgICAgICAgICAg
ICAgIGhpbnQgPSBRTWV0YVR5cGU6OkRvdWJsZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChv
YmplY3QtPmluaGVyaXRzKCZCb29sZWFuT2JqZWN0OjpzX2luZm8pKQorICAgICAgICAgICAgICAg
ICAgICBoaW50ID0gUU1ldGFUeXBlOjpCb29sOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgaGludCA9IFFNZXRhVHlwZTo6UVZhcmlhbnRNYXA7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFPYmo6CisgICAgICAgICAgICAgICAgaGlu
dCA9IFFNZXRhVHlwZTo6UU9iamVjdFN0YXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEpTVWludDhDbGFtcGVkQXJyYXk6CisgICAgICAgICAgICAgICAgaGludCA9
IFFNZXRhVHlwZTo6UUJ5dGVBcnJheTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgQXJyYXk6CisgICAgICAgICAgICBjYXNlIFJUQXJyYXk6CisgICAgICAgICAgICAg
ICAgaGludCA9IFFNZXRhVHlwZTo6UVZhcmlhbnRMaXN0OworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgcUNvbnZEZWJ1ZygpIDw8ICJjb252ZXJ0VmFsdWVU
b1FWYXJpYW50OiBqc3R5cGUgaXMgIiA8PCB0eXBlIDw8ICIsIGhpbnQgaXMiIDw8IGhpbnQ7CisK
KyAgICBpZiAodmFsdWUgPT0ganNOdWxsKCkKKyAgICAgICAgJiYgaGludCAhPSBRTWV0YVR5cGU6
OlFPYmplY3RTdGFyCisgICAgICAgICYmIGhpbnQgIT0gUU1ldGFUeXBlOjpWb2lkU3RhcgorICAg
ICAgICAmJiBoaW50ICE9IFFNZXRhVHlwZTo6UVN0cmluZworICAgICAgICAmJiBoaW50ICE9IChR
TWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFWYXJpYW50PigpKSB7CisgICAgICAgIGlmIChk
aXN0YW5jZSkKKyAgICAgICAgICAgICpkaXN0YW5jZSA9IC0xOworICAgICAgICByZXR1cm4gUVZh
cmlhbnQoKTsKKyAgICB9CisKKyAgICBRVmFyaWFudCByZXQ7CisgICAgaW50IGRpc3QgPSAtMTsK
KyAgICBzd2l0Y2ggKGhpbnQpIHsKKyAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkJvb2w6CisgICAg
ICAgICAgICBpZiAodHlwZSA9PSBPYmplY3QgJiYgb2JqZWN0LT5pbmhlcml0cygmQm9vbGVhbk9i
amVjdDo6c19pbmZvKSkKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudChhc0Jvb2xlYW5P
YmplY3QodmFsdWUpLT5pbnRlcm5hbFZhbHVlKCkudG9Cb29sZWFuKGV4ZWMpKTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudCh2YWx1ZS50b0Jvb2xlYW4o
ZXhlYykpOworICAgICAgICAgICAgaWYgKHR5cGUgPT0gQm9vbGVhbikKKyAgICAgICAgICAgICAg
ICBkaXN0ID0gMDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkaXN0ID0gMTA7
CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFFNZXRhVHlwZTo6SW50OgorICAg
ICAgICBjYXNlIFFNZXRhVHlwZTo6VUludDoKKyAgICAgICAgY2FzZSBRTWV0YVR5cGU6Okxvbmc6
CisgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVTG9uZzoKKyAgICAgICAgY2FzZSBRTWV0YVR5cGU6
OkxvbmdMb25nOgorICAgICAgICBjYXNlIFFNZXRhVHlwZTo6VUxvbmdMb25nOgorICAgICAgICBj
YXNlIFFNZXRhVHlwZTo6U2hvcnQ6CisgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpVU2hvcnQ6Cisg
ICAgICAgIGNhc2UgUU1ldGFUeXBlOjpGbG9hdDoKKyAgICAgICAgY2FzZSBRTWV0YVR5cGU6OkRv
dWJsZToKKyAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHZhbHVlLnRvTnVtYmVyKGV4ZWMpKTsK
KyAgICAgICAgICAgIHJldC5jb252ZXJ0KChRVmFyaWFudDo6VHlwZSloaW50KTsKKyAgICAgICAg
ICAgIGlmICh0eXBlID09IE51bWJlcikgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoaGludCkg
eworICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpEb3VibGU6CisgICAgICAgICAgICAg
ICAgICAgIGRpc3QgPSAwOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICBjYXNlIFFNZXRhVHlwZTo6RmxvYXQ6CisgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAx
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFFNZXRh
VHlwZTo6TG9uZ0xvbmc6CisgICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlVMb25nTG9u
ZzoKKyAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDI7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpMb25nOgorICAgICAgICAgICAg
ICAgIGNhc2UgUU1ldGFUeXBlOjpVTG9uZzoKKyAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDM7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUU1ldGFU
eXBlOjpJbnQ6CisgICAgICAgICAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlVJbnQ6CisgICAgICAg
ICAgICAgICAgICAgIGRpc3QgPSA0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBjYXNlIFFNZXRhVHlwZTo6U2hvcnQ6CisgICAgICAgICAgICAgICAgY2FzZSBR
TWV0YVR5cGU6OlVTaG9ydDoKKyAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAgICAgZGlzdCA9IDEwOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBRTWV0YVR5cGU6OlFDaGFyOgorICAgICAgICAgICAg
aWYgKHR5cGUgPT0gTnVtYmVyIHx8IHR5cGUgPT0gQm9vbGVhbikgeworICAgICAgICAgICAgICAg
IHJldCA9IFFWYXJpYW50KFFDaGFyKCh1c2hvcnQpdmFsdWUudG9OdW1iZXIoZXhlYykpKTsKKyAg
ICAgICAgICAgICAgICBpZiAodHlwZSA9PSBCb29sZWFuKQorICAgICAgICAgICAgICAgICAgICBk
aXN0ID0gMzsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRpc3Qg
PSA2OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHN0ciA9
IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgICAgICAgICByZXQg
PSBRVmFyaWFudChRQ2hhcihzdHIubGVuZ3RoKCkgPyAqKGNvbnN0IHVzaG9ydCopc3RyLmltcGwo
KS0+Y2hhcmFjdGVycygpIDogMCkpOworICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFN0cmlu
ZykKKyAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDM7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIFFNZXRhVHlwZTo6UVN0cmluZzogeworICAgICAgICAg
ICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
ZGlzdGFuY2UpCisgICAgICAgICAgICAgICAgICAgICpkaXN0YW5jZSA9IDE7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMp
OworICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1
c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKSk7CisgICAgICAg
ICAgICAgICAgaWYgKHR5cGUgPT0gU3RyaW5nKQorICAgICAgICAgICAgICAgICAgICBkaXN0ID0g
MDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAxMDsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAg
Y2FzZSBRTWV0YVR5cGU6OlFWYXJpYW50TWFwOgorICAgICAgICAgICAgaWYgKHR5cGUgPT0gT2Jq
ZWN0IHx8IHR5cGUgPT0gQXJyYXkgfHwgdHlwZSA9PSBSVEFycmF5KSB7CisgICAgICAgICAgICAg
ICAgcmV0ID0gUVZhcmlhbnQoY29udmVydFZhbHVlVG9RVmFyaWFudE1hcChleGVjLCBvYmplY3Qs
IHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCkpOworICAgICAgICAgICAgICAgIC8vIFRo
b3NlIHR5cGVzIGNhbiBzdGlsbCBoYXZlIHBlcmZlY3QgbWF0Y2hlcywgZS5nLiAnYm9vbCcgaWYg
dmFsdWUgaXMgYSBCb29sZWFuIE9iamVjdC4KKyAgICAgICAgICAgICAgICBkaXN0ID0gMTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgUU1ldGFUeXBl
OjpRVmFyaWFudExpc3Q6CisgICAgICAgICAgICBpZiAodHlwZSA9PSBSVEFycmF5KSB7CisgICAg
ICAgICAgICAgICAgUnVudGltZUFycmF5KiBydGFycmF5ID0gc3RhdGljX2Nhc3Q8UnVudGltZUFy
cmF5Kj4ob2JqZWN0KTsKKworICAgICAgICAgICAgICAgIFFWYXJpYW50TGlzdCByZXN1bHQ7Cisg
ICAgICAgICAgICAgICAgaW50IGxlbiA9IHJ0YXJyYXktPmdldExlbmd0aCgpOworICAgICAgICAg
ICAgICAgIGludCBvYmpkaXN0ID0gMDsKKyAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwg
ImNvbnZlcnRpbmcgYSAiIDw8IGxlbiA8PCAiIGxlbmd0aCBBcnJheSI7CisgICAgICAgICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgICAgICAgICBK
U1ZhbHVlIHZhbCA9IHJ0YXJyYXktPmdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVBdChleGVjLCBp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChjb252ZXJ0VmFsdWVUb1FWYXJp
YW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpWb2lkLCAmb2JqZGlzdCwgdmlzaXRlZE9iamVjdHMs
IHJlY3Vyc2lvbkxpbWl0KSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChvYmpkaXN0ID09IC0x
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgIkZhaWxlZCBjb252
ZXJ0aW5nIGVsZW1lbnQgYXQgaW5kZXggIiA8PCBpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7IC8vIEZhaWxlZCBjb252ZXJ0aW5nIGEgbGlzdCBlbnRyeSwgc28gZmFpbCB0aGUgYXJy
YXkKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBpZiAob2JqZGlzdCAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsK
KyAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQocmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsKKyAgICAgICAg
ICAgICAgICBKU0FycmF5KiBhcnJheSA9IHN0YXRpY19jYXN0PEpTQXJyYXkqPihvYmplY3QpOwor
CisgICAgICAgICAgICAgICAgUVZhcmlhbnRMaXN0IHJlc3VsdDsKKyAgICAgICAgICAgICAgICBp
bnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGludCBvYmpkaXN0ID0g
MDsKKyAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImNvbnZlcnRpbmcgYSAiIDw8IGxl
biA8PCAiIGxlbmd0aCBBcnJheSI7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBsZW47ICsraSkgeworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5LT5n
ZXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoY29udmVydFZh
bHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRhVHlwZTo6Vm9pZCwgJm9iamRpc3QsIHZpc2l0
ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCkpOworICAgICAgICAgICAgICAgICAgICBpZiAob2Jq
ZGlzdCA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJG
YWlsZWQgY29udmVydGluZyBlbGVtZW50IGF0IGluZGV4ICIgPDwgaTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOyAvLyBGYWlsZWQgY29udmVydGluZyBhIGxpc3QgZW50cnksIHNvIGZh
aWwgdGhlIGFycmF5CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKG9iamRpc3QgIT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAg
ZGlzdCA9IDU7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAv
LyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQorICAgICAgICAgICAgICAgIGludCBvYmpkaXN0
OworICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAibWFraW5nIGEgc2luZ2xlIGxlbmd0
aCB2YXJpYW50bGlzdCI7CisgICAgICAgICAgICAgICAgUVZhcmlhbnQgdmFyID0gY29udmVydFZh
bHVlVG9RVmFyaWFudChleGVjLCB2YWx1ZSwgUU1ldGFUeXBlOjpWb2lkLCAmb2JqZGlzdCwgdmlz
aXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKKyAgICAgICAgICAgICAgICBpZiAob2JqZGlz
dCAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICBRVmFyaWFudExpc3QgcmVzdWx0OworICAg
ICAgICAgICAgICAgICAgICByZXN1bHQgPDwgdmFyOworICAgICAgICAgICAgICAgICAgICByZXQg
PSBRVmFyaWFudChyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8
ICJmYWlsZWQgbWFraW5nIHNpbmdsZSBsZW5ndGggdmFybGlzdCI7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBRTWV0
YVR5cGU6OlFTdHJpbmdMaXN0OiB7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBSVEFycmF5KSB7
CisgICAgICAgICAgICAgICAgUnVudGltZUFycmF5KiBydGFycmF5ID0gc3RhdGljX2Nhc3Q8UnVu
dGltZUFycmF5Kj4ob2JqZWN0KTsKKworICAgICAgICAgICAgICAgIFFTdHJpbmdMaXN0IHJlc3Vs
dDsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gcnRhcnJheS0+Z2V0TGVuZ3RoKCk7CisgICAg
ICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAg
ICAgICAgICBKU1ZhbHVlIHZhbCA9IHJ0YXJyYXktPmdldENvbmNyZXRlQXJyYXkoKS0+dmFsdWVB
dChleGVjLCBpKTsKKyAgICAgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsLnRv
U3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBx
c3RyaW5nID0gUVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJz
KCksIHVzdHJpbmcubGVuZ3RoKCkpOworCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQocXN0cmluZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGRpc3QgPSA1
OworICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KHJlc3VsdCk7CisgICAgICAgICAgICB9
IGVsc2UgaWYgKHR5cGUgPT0gQXJyYXkpIHsKKyAgICAgICAgICAgICAgICBKU0FycmF5KiBhcnJh
eSA9IHN0YXRpY19jYXN0PEpTQXJyYXkqPihvYmplY3QpOworCisgICAgICAgICAgICAgICAgUVN0
cmluZ0xpc3QgcmVzdWx0OworICAgICAgICAgICAgICAgIGludCBsZW4gPSBhcnJheS0+bGVuZ3Ro
KCk7CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAg
ICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5LT5nZXQoZXhlYywgaSk7CisgICAg
ICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbC50b1N0cmluZyhleGVjKS0+dmFs
dWUoZXhlYyk7CisgICAgICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9IFFTdHJpbmco
KGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0
aCgpKTsKKworICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHFzdHJpbmcpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkaXN0ID0gNTsKKyAgICAgICAgICAgICAg
ICByZXQgPSBRVmFyaWFudChyZXN1bHQpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQorICAgICAgICAgICAgICAgIFVT
dHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3RyaW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAg
ICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcgPSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmlu
Zy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0cmluZy5sZW5ndGgoKSk7CisgICAgICAgICAgICAg
ICAgUVN0cmluZ0xpc3QgcmVzdWx0OworICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQocXN0
cmluZyk7CisgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQocmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICBkaXN0ID0gMTA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRQnl0ZUFycmF5OiB7CisgICAgICAg
ICAgICBpZiAodHlwZSA9PSBKU1VpbnQ4Q2xhbXBlZEFycmF5KSB7CisgICAgICAgICAgICAgICAg
V1RGOjpVaW50OENsYW1wZWRBcnJheSogYXJyID0gdG9VaW50OENsYW1wZWRBcnJheSh2YWx1ZSk7
CisgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQoUUJ5dGVBcnJheShyZWludGVycHJldF9j
YXN0PGNvbnN0IGNoYXIqPihhcnItPmRhdGEoKSksIGFyci0+bGVuZ3RoKCkpKTsKKyAgICAgICAg
ICAgICAgICBkaXN0ID0gMDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
VVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAg
ICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50KFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5n
LmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3RyaW5nLmxlbmd0aCgpKS50b0xhdGluMSgpKTsKKyAg
ICAgICAgICAgICAgICBpZiAodHlwZSA9PSBTdHJpbmcpCisgICAgICAgICAgICAgICAgICAgIGRp
c3QgPSA1OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgZGlzdCA9
IDEwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAg
ICAgICBjYXNlIFFNZXRhVHlwZTo6UURhdGVUaW1lOgorICAgICAgICBjYXNlIFFNZXRhVHlwZTo6
UURhdGU6CisgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRVGltZToKKyAgICAgICAgICAgIGlmICh0
eXBlID09IERhdGUpIHsKKyAgICAgICAgICAgICAgICBEYXRlSW5zdGFuY2UqIGRhdGUgPSBzdGF0
aWNfY2FzdDxEYXRlSW5zdGFuY2UqPihvYmplY3QpOworICAgICAgICAgICAgICAgIEdyZWdvcmlh
bkRhdGVUaW1lIGdkdDsKKyAgICAgICAgICAgICAgICBtc1RvR3JlZ29yaWFuRGF0ZVRpbWUoZXhl
YywgZGF0ZS0+aW50ZXJuYWxOdW1iZXIoKSwgdHJ1ZSwgZ2R0KTsKKyAgICAgICAgICAgICAgICBp
ZiAoaGludCA9PSBRTWV0YVR5cGU6OlFEYXRlVGltZSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXQgPSBRRGF0ZVRpbWUoUURhdGUoZ2R0LnllYXIgKyAxOTAwLCBnZHQubW9udGggKyAxLCBnZHQu
bW9udGhEYXkpLCBRVGltZShnZHQuaG91ciwgZ2R0Lm1pbnV0ZSwgZ2R0LnNlY29uZCksIFF0OjpV
VEMpOworICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgaWYgKGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXQgPSBRRGF0ZShnZHQueWVhciArIDE5MDAsIGdkdC5tb250aCArIDEsIGdkdC5tb250aERheSk7
CisgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFFUaW1lKGdkdC5ob3VyICsgMTkwMCwgZ2R0Lm1p
bnV0ZSwgZ2R0LnNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIGRpc3QgPSAyOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSBOdW1iZXIpIHsKKyAg
ICAgICAgICAgICAgICBkb3VibGUgYiA9IHZhbHVlLnRvTnVtYmVyKGV4ZWMpOworICAgICAgICAg
ICAgICAgIEdyZWdvcmlhbkRhdGVUaW1lIGdkdDsKKyAgICAgICAgICAgICAgICBtc1RvR3JlZ29y
aWFuRGF0ZVRpbWUoZXhlYywgYiwgdHJ1ZSwgZ2R0KTsKKyAgICAgICAgICAgICAgICBpZiAoaGlu
dCA9PSBRTWV0YVR5cGU6OlFEYXRlVGltZSkgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBR
RGF0ZVRpbWUoUURhdGUoZ2R0LnllYXIgKyAxOTAwLCBnZHQubW9udGggKyAxLCBnZHQubW9udGhE
YXkpLCBRVGltZShnZHQuaG91ciwgZ2R0Lm1pbnV0ZSwgZ2R0LnNlY29uZCksIFF0OjpVVEMpOwor
ICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGhpbnQgPT0gUU1ldGFUeXBlOjpRRGF0ZSkgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBR
RGF0ZShnZHQueWVhciArIDE5MDAsIGdkdC5tb250aCArIDEsIGdkdC5tb250aERheSk7CisgICAg
ICAgICAgICAgICAgICAgIGRpc3QgPSA4OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldCA9IFFUaW1lKGdkdC5ob3VyLCBnZHQubWludXRlLCBnZHQuc2Vj
b25kKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOworICAgICAgICAgICAgICAgIH0K
KyNpZm5kZWYgUVRfTk9fREFURVNUUklORworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09
IFN0cmluZykgeworICAgICAgICAgICAgICAgIFVTdHJpbmcgdXN0cmluZyA9IHZhbHVlLnRvU3Ry
aW5nKGV4ZWMpLT52YWx1ZShleGVjKTsKKyAgICAgICAgICAgICAgICBRU3RyaW5nIHFzdHJpbmcg
PSBRU3RyaW5nKChjb25zdCBRQ2hhciopdXN0cmluZy5pbXBsKCktPmNoYXJhY3RlcnMoKSwgdXN0
cmluZy5sZW5ndGgoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaGludCA9PSBRTWV0YVR5cGU6
OlFEYXRlVGltZSkgeworICAgICAgICAgICAgICAgICAgICBRRGF0ZVRpbWUgZHQgPSBRRGF0ZVRp
bWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OklTT0RhdGUpOworICAgICAgICAgICAgICAgICAg
ICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUURhdGVU
aW1lOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpUZXh0RGF0ZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmICghZHQuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgZHQgPSBRRGF0
ZVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlN5c3RlbUxvY2FsZURhdGUpOworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGR0ID0gUURhdGVUaW1lOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpMb2NhbGVEYXRlKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGR0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0ID0gZHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMjsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaGludCA9PSBRTWV0
YVR5cGU6OlFEYXRlKSB7CisgICAgICAgICAgICAgICAgICAgIFFEYXRlIGR0ID0gUURhdGU6OmZy
b21TdHJpbmcocXN0cmluZywgUXQ6OklTT0RhdGUpOworICAgICAgICAgICAgICAgICAgICBpZiAo
IWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUURhdGU6OmZyb21T
dHJpbmcocXN0cmluZywgUXQ6OlRleHREYXRlKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFk
dC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBkdCA9IFFEYXRlOjpmcm9tU3Ry
aW5nKHFzdHJpbmcsIFF0OjpTeXN0ZW1Mb2NhbGVEYXRlKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFkdC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBkdCA9IFFEYXRlOjpm
cm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpMb2NhbGVEYXRlKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGR0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gZHQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMzsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIFFUaW1lIGR0ID0g
UVRpbWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OklTT0RhdGUpOworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWR0LmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGR0ID0gUVRp
bWU6OmZyb21TdHJpbmcocXN0cmluZywgUXQ6OlRleHREYXRlKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFkdC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBkdCA9IFFUaW1l
Ojpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpTeXN0ZW1Mb2NhbGVEYXRlKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFkdC5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBkdCA9
IFFUaW1lOjpmcm9tU3RyaW5nKHFzdHJpbmcsIFF0OjpMb2NhbGVEYXRlKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGR0LmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
ID0gZHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMzsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyNlbmRpZiAvLyBRVF9OT19EQVRFU1RSSU5HCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFFNZXRhVHlw
ZTo6UVJlZ0V4cDoKKyAgICAgICAgICAgIGlmICh0eXBlID09IFJlZ0V4cCkgeworLyoKKyAgICAg
ICAgICAgICAgICBSZWdFeHBPYmplY3QgKnJlID0gc3RhdGljX2Nhc3Q8UmVnRXhwT2JqZWN0Kj4o
b2JqZWN0KTsKKyovCisgICAgICAgICAgICAgICAgLy8gQXR0ZW1wdCB0byBjb252ZXJ0Li4gYSBi
aXQgcmlza3kKKyAgICAgICAgICAgICAgICBVU3RyaW5nIHVzdHJpbmcgPSB2YWx1ZS50b1N0cmlu
ZyhleGVjKS0+dmFsdWUoZXhlYyk7CisgICAgICAgICAgICAgICAgUVN0cmluZyBxc3RyaW5nID0g
UVN0cmluZygoY29uc3QgUUNoYXIqKXVzdHJpbmcuaW1wbCgpLT5jaGFyYWN0ZXJzKCksIHVzdHJp
bmcubGVuZ3RoKCkpOworCisgICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBvZiB0aGUgZm9ybSAn
L3h4eHh4eC9pJworICAgICAgICAgICAgICAgIGludCBmaXJzdFNsYXNoID0gcXN0cmluZy5pbmRl
eE9mKFFMYXRpbjFDaGFyKCcvJykpOworICAgICAgICAgICAgICAgIGludCBsYXN0U2xhc2ggPSBx
c3RyaW5nLmxhc3RJbmRleE9mKFFMYXRpbjFDaGFyKCcvJykpOworICAgICAgICAgICAgICAgIGlm
IChmaXJzdFNsYXNoID49MCAmJiBsYXN0U2xhc2ggPiBmaXJzdFNsYXNoKSB7CisgICAgICAgICAg
ICAgICAgICAgIFFSZWdFeHAgcmVhbFJlOworCisgICAgICAgICAgICAgICAgICAgIHJlYWxSZS5z
ZXRQYXR0ZXJuKHFzdHJpbmcubWlkKGZpcnN0U2xhc2ggKyAxLCBsYXN0U2xhc2ggLSBmaXJzdFNs
YXNoIC0gMSkpOworCisgICAgICAgICAgICAgICAgICAgIGlmIChxc3RyaW5nLm1pZChsYXN0U2xh
c2ggKyAxKS5jb250YWlucyhRTGF0aW4xQ2hhcignaScpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlYWxSZS5zZXRDYXNlU2Vuc2l0aXZpdHkoUXQ6OkNhc2VJbnNlbnNpdGl2ZSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZWFsUmUpOworICAg
ICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgICAgICBxQ29udkRlYnVnKCkgPDwgImNvdWxkbid0IHBhcnNlIGEgSlMgcmVn
ZXhwIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0g
U3RyaW5nKSB7CisgICAgICAgICAgICAgICAgVVN0cmluZyB1c3RyaW5nID0gdmFsdWUudG9TdHJp
bmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAgICAgICAgICAgIFFTdHJpbmcgcXN0cmluZyA9
IFFTdHJpbmcoKGNvbnN0IFFDaGFyKil1c3RyaW5nLmltcGwoKS0+Y2hhcmFjdGVycygpLCB1c3Ry
aW5nLmxlbmd0aCgpKTsKKworICAgICAgICAgICAgICAgIFFSZWdFeHAgcmUocXN0cmluZyk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgICAgICAgICBy
ZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlKTsKKyAgICAgICAgICAgICAgICAgICAgZGlzdCA9
IDEwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgUU1ldGFUeXBlOjpRT2JqZWN0U3RhcjoKKyAgICAgICAgICAgIGlm
ICh0eXBlID09IFFPYmopIHsKKyAgICAgICAgICAgICAgICBRdEluc3RhbmNlKiBxdGluc3QgPSBR
dEluc3RhbmNlOjpnZXRJbnN0YW5jZShvYmplY3QpOworICAgICAgICAgICAgICAgIGlmIChxdGlu
c3QpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHF0aW5zdC0+Z2V0T2JqZWN0KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiZm91bmQgaW5zdGFuY2UsIHdp
dGggb2JqZWN0OiIgPDwgKHZvaWQqKSBxdGluc3QtPmdldE9iamVjdCgpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShxdGluc3QtPmdldE9iamVjdCgp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCByZXQ7CisgICAgICAg
ICAgICAgICAgICAgICAgICBkaXN0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiY2FuJ3QgY29udmVydCBk
ZWxldGVkIHFvYmplY3QiOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJ3YXNuJ3QgYSBx
dGluc3RhbmNlIjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5
cGUgPT0gTnVsbCkgeworICAgICAgICAgICAgICAgIFFPYmplY3QqIG51bGxvYmogPSAwOworICAg
ICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUobnVsbG9iaik7CisgICAgICAg
ICAgICAgICAgZGlzdCA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHFDb252RGVidWcoKSA8PCAicHJldmlvdXMgdHlwZSB3YXMgbm90IGFuIG9iamVjdDoiIDw8IHR5
cGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFFN
ZXRhVHlwZTo6Vm9pZFN0YXI6CisgICAgICAgICAgICBpZiAodHlwZSA9PSBRT2JqKSB7CisgICAg
ICAgICAgICAgICAgUXRJbnN0YW5jZSogcXRpbnN0ID0gUXRJbnN0YW5jZTo6Z2V0SW5zdGFuY2Uo
b2JqZWN0KTsKKyAgICAgICAgICAgICAgICBpZiAocXRpbnN0KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChxdGluc3QtPmdldE9iamVjdCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBx
Q29udkRlYnVnKCkgPDwgImZvdW5kIGluc3RhbmNlLCB3aXRoIG9iamVjdDoiIDw8ICh2b2lkKikg
cXRpbnN0LT5nZXRPYmplY3QoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFFWYXJp
YW50Ojpmcm9tVmFsdWUoKHZvaWQgKilxdGluc3QtPmdldE9iamVjdCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHFDb252RGVidWcoKSA8PCByZXQ7CisgICAgICAgICAgICAgICAgICAgICAg
ICBkaXN0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHFDb252RGVidWcoKSA8PCAiY2FuJ3QgY29udmVydCBkZWxldGVkIHFvYmplY3Qi
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJ3YXNuJ3QgYSBxdGluc3RhbmNlIjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gTnVsbCkgewor
ICAgICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUoKHZvaWQqKTApOworICAg
ICAgICAgICAgICAgIGRpc3QgPSAwOworICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IE51
bWJlcikgeworICAgICAgICAgICAgICAgIC8vIEkgZG9uJ3QgdGhpbmsgdGhhdCBjb252ZXJ0aW5n
IGEgZG91YmxlIHRvIGEgcG9pbnRlciBpcyBhIHdpc2UKKyAgICAgICAgICAgICAgICAvLyBtb3Zl
LiAgRXhjZXB0IG1heWJlIDAuCisgICAgICAgICAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJnb3Qg
bnVtYmVyIGZvciB2b2lkICogLSBub3QgY29udmVydGluZywgc2VlbXMgdW5zYWZlOiIgPDwgdmFs
dWUudG9OdW1iZXIoZXhlYyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg
IHFDb252RGVidWcoKSA8PCAidm9pZCogLSB1bmhhbmRsZWQgdHlwZSIgPDwgdHlwZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAvLyBOb24gY29uc3QgdHlwZSBpZHMKKyAgICAgICAgICAgIGlmIChoaW50ID09IChRTWV0
YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFPYmplY3RMaXN0PigpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGlmICh0eXBlID09IFJUQXJyYXkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgUnVudGltZUFycmF5KiBydGFycmF5ID0gc3RhdGljX2Nhc3Q8UnVudGltZUFycmF5Kj4ob2Jq
ZWN0KTsKKworICAgICAgICAgICAgICAgICAgICBRT2JqZWN0TGlzdCByZXN1bHQ7CisgICAgICAg
ICAgICAgICAgICAgIGludCBsZW4gPSBydGFycmF5LT5nZXRMZW5ndGgoKTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgSlNWYWx1ZSB2YWwgPSBydGFycmF5LT5nZXRDb25jcmV0ZUFycmF5KCktPnZhbHVl
QXQoZXhlYywgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FW
YXJpYW50KGV4ZWMsIHZhbCwgUU1ldGFUeXBlOjpRT2JqZWN0U3RhciwgJml0ZW1kaXN0LCB2aXNp
dGVkT2JqZWN0cywgcmVjdXJzaW9uTGltaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KGl0ZW1kaXN0ID49IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZChpdGVtLnZhbHVlPFFPYmplY3QqPigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRuJ3QgZmFpbCBjb252ZXJzaW9uCisg
ICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY291bnQoKSA9PSBsZW4pIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRpc3QgPSA1OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0g
UVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IEFycmF5KSB7CisgICAgICAgICAgICAgICAg
ICAgIEpTT2JqZWN0KiBvYmplY3QgPSB2YWx1ZS50b09iamVjdChleGVjKTsKKyAgICAgICAgICAg
ICAgICAgICAgSlNBcnJheSogYXJyYXkgPSBzdGF0aWNfY2FzdDxKU0FycmF5ICo+KG9iamVjdCk7
CisgICAgICAgICAgICAgICAgICAgIFFPYmplY3RMaXN0IHJlc3VsdDsKKyAgICAgICAgICAgICAg
ICAgICAgaW50IGxlbiA9IGFycmF5LT5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgICAgICAgICAgICAgICAgICAgICAgSlNW
YWx1ZSB2YWwgPSBhcnJheS0+Z2V0KGV4ZWMsIGkpOworICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGl0ZW1kaXN0ID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICBRVmFyaWFudCBpdGVt
ID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRhVHlwZTo6UU9iamVjdFN0
YXIsICZpdGVtZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxRT2JqZWN0Kj4oKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZGlkbid0
IGZhaWwgY29udmVyc2lvbgorICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmNvdW50KCkg
PT0gbGVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gNTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldCA9IFFWYXJpYW50Ojpmcm9tVmFsdWUocmVzdWx0KTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIE1ha2UgYSBzaW5nbGUgbGVuZ3RoIGFycmF5CisgICAgICAgICAgICAgICAgICAgIFFP
YmplY3RMaXN0IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0ID0gLTE7
CisgICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJp
YW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5cGU6OlFPYmplY3RTdGFyLCAmaXRlbWRpc3QsIHZpc2l0
ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChpdGVt
ZGlzdCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0u
dmFsdWU8UU9iamVjdCo+KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQp
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmIChoaW50ID09IChRTWV0YVR5cGU6OlR5
cGUpIHFNZXRhVHlwZUlkPFFMaXN0PGludD4gPigpKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5
cGUgPT0gUlRBcnJheSkgeworICAgICAgICAgICAgICAgICAgICBSdW50aW1lQXJyYXkqIHJ0YXJy
YXkgPSBzdGF0aWNfY2FzdDxSdW50aW1lQXJyYXkqPihvYmplY3QpOworCisgICAgICAgICAgICAg
ICAgICAgIFFMaXN0PGludD4gcmVzdWx0OworICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0g
cnRhcnJheS0+Z2V0TGVuZ3RoKCk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgbGVuOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0g
cnRhcnJheS0+Z2V0Q29uY3JldGVBcnJheSgpLT52YWx1ZUF0KGV4ZWMsIGkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0ID0gLTE7CisgICAgICAgICAgICAgICAgICAgICAg
ICBRVmFyaWFudCBpdGVtID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCB2YWwsIFFNZXRh
VHlwZTo6SW50LCAmaXRlbWRpc3QsIHZpc2l0ZWRPYmplY3RzLCByZWN1cnNpb25MaW1pdCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3QgPj0gMCkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0udmFsdWU8aW50PigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBkaWRu
J3QgZmFpbCBjb252ZXJzaW9uCisgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuY291bnQo
KSA9PSBsZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpc3QgPSA1OworICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0ID0gUVZhcmlhbnQ6OmZyb21WYWx1ZShyZXN1bHQpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IEFycmF5
KSB7CisgICAgICAgICAgICAgICAgICAgIEpTQXJyYXkqIGFycmF5ID0gc3RhdGljX2Nhc3Q8SlNB
cnJheSAqPihvYmplY3QpOworCisgICAgICAgICAgICAgICAgICAgIFFMaXN0PGludD4gcmVzdWx0
OworICAgICAgICAgICAgICAgICAgICBpbnQgbGVuID0gYXJyYXktPmxlbmd0aCgpOworICAgICAg
ICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGFycmF5LT5nZXQoZXhlYywgaSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgaXRlbWRpc3QgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIHZhbCwgUU1l
dGFUeXBlOjpJbnQsICZpdGVtZGlzdCwgdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtZGlzdCA+PSAwKQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS52YWx1ZTxpbnQ+KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGRp
ZG4ndCBmYWlsIGNvbnZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5jb3Vu
dCgpID09IGxlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDU7CisgICAgICAg
ICAgICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAvLyBNYWtlIGEgc2luZ2xlIGxlbmd0aCBhcnJheQorICAgICAgICAgICAgICAgICAg
ICBRTGlzdDxpbnQ+IHJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgaW50IGl0ZW1kaXN0ID0g
LTE7CisgICAgICAgICAgICAgICAgICAgIFFWYXJpYW50IGl0ZW0gPSBjb252ZXJ0VmFsdWVUb1FW
YXJpYW50KGV4ZWMsIHZhbHVlLCBRTWV0YVR5cGU6OkludCwgJml0ZW1kaXN0LCB2aXNpdGVkT2Jq
ZWN0cywgcmVjdXJzaW9uTGltaXQpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbWRpc3Qg
Pj0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLnZhbHVl
PGludD4oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXN0ID0gMTA7CisgICAgICAgICAg
ICAgICAgICAgICAgICByZXQgPSBRVmFyaWFudDo6ZnJvbVZhbHVlKHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9IGVsc2UgaWYgKFF0UGl4bWFwSW5zdGFuY2U6OmNhbkhhbmRsZShzdGF0
aWNfY2FzdDxRTWV0YVR5cGU6OlR5cGU+KGhpbnQpKSkgeworICAgICAgICAgICAgICAgIHJldCA9
IFF0UGl4bWFwSW5zdGFuY2U6OnZhcmlhbnRGcm9tT2JqZWN0KG9iamVjdCwgc3RhdGljX2Nhc3Q8
UU1ldGFUeXBlOjpUeXBlPihoaW50KSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGN1c3RvbVJ1
bnRpbWVDb252ZXJzaW9ucygpLT5jb250YWlucyhoaW50KSkgeworICAgICAgICAgICAgICAgIHJl
dCA9IGN1c3RvbVJ1bnRpbWVDb252ZXJzaW9ucygpLT52YWx1ZShoaW50KS50b1ZhcmlhbnRGdW5j
KG9iamVjdCwgJmRpc3QsIHZpc2l0ZWRPYmplY3RzKTsKKyAgICAgICAgICAgICAgICBpZiAoZGlz
dCA9PSAwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaGludCA9PSAoUU1ldGFUeXBlOjpUeXBlKSBxTWV0YVR5cGVJZDxRVmFyaWFudD4oKSkgewor
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChkaXN0YW5jZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICpkaXN0
YW5jZSA9IDE7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBRVmFyaWFudCgpOworICAgICAg
ICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlID09IE9iamVj
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2luY2Ugd2UgaGF2ZW4ndCByZWFsbHkg
dmlzaXRlZCB0aGlzIG9iamVjdCB5ZXQsIHdlIHJlbW92ZSBpdAorICAgICAgICAgICAgICAgICAg
ICAgICAgdmlzaXRlZE9iamVjdHMtPnJlbW92ZShvYmplY3QpOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQW5kIHRoZW4gcmVjdXJzZSB3aXRoIHRoZSBh
dXRvZGV0ZWN0IGZsYWcKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gY29udmVydFZhbHVlVG9R
VmFyaWFudChleGVjLCB2YWx1ZSwgUU1ldGFUeXBlOjpWb2lkLCBkaXN0YW5jZSwgdmlzaXRlZE9i
amVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKKyAgICAgICAgICAgICAgICAgICAgZGlzdCA9IDEwOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgZGlzdCA9IDEwOworICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgaWYgKCFyZXQuaXNWYWxpZCgpKQorICAgICAgICBkaXN0ID0gLTE7CisgICAgaWYgKGRpc3Rh
bmNlKQorICAgICAgICAqZGlzdGFuY2UgPSBkaXN0OworCisgICAgcmV0dXJuIHJldDsKK30KKwor
UVZhcmlhbnQgY29udmVydFZhbHVlVG9RVmFyaWFudChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUsIFFNZXRhVHlwZTo6VHlwZSBoaW50LCBpbnQgKmRpc3RhbmNlKQoreworICAgIGNvbnN0
IGludCByZWN1cnNpb25MaW1pdCA9IDIwMDsKKyAgICBIYXNoU2V0PEpTT2JqZWN0Kj4gdmlzaXRl
ZE9iamVjdHM7CisgICAgcmV0dXJuIGNvbnZlcnRWYWx1ZVRvUVZhcmlhbnQoZXhlYywgdmFsdWUs
IGhpbnQsIGRpc3RhbmNlLCAmdmlzaXRlZE9iamVjdHMsIHJlY3Vyc2lvbkxpbWl0KTsKK30KKwor
SlNWYWx1ZSBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0
cjxSb290T2JqZWN0PiByb290LCBjb25zdCBRVmFyaWFudCYgdmFyaWFudCkKK3sKKyAgICAvLyBW
YXJpYW50cyB3aXRoIFFPYmplY3QgKiBjYW4gYmUgaXNOdWxsIGJ1dCBub3QgYSBudWxsIHBvaW50
ZXIKKyAgICAvLyBBbiBlbXB0eSBRU3RyaW5nIHZhcmlhbnQgaXMgYWxzbyBudWxsCisgICAgUU1l
dGFUeXBlOjpUeXBlIHR5cGUgPSAoUU1ldGFUeXBlOjpUeXBlKSB2YXJpYW50LnVzZXJUeXBlKCk7
CisKKyAgICBxQ29udkRlYnVnKCkgPDwgImNvbnZlcnRRVmFyaWFudFRvVmFsdWU6IG1ldGF0eXBl
OiIgPDwgdHlwZSA8PCAiLCBpc251bGw6ICIgPDwgdmFyaWFudC5pc051bGwoKTsKKyAgICBpZiAo
dmFyaWFudC5pc051bGwoKSAmJgorICAgICAgICB0eXBlICE9IFFNZXRhVHlwZTo6UU9iamVjdFN0
YXIgJiYKKyAgICAgICAgdHlwZSAhPSBRTWV0YVR5cGU6OlZvaWRTdGFyICYmCisgICAgICAgIHR5
cGUgIT0gUU1ldGFUeXBlOjpRV2lkZ2V0U3RhciAmJgorICAgICAgICB0eXBlICE9IFFNZXRhVHlw
ZTo6UVN0cmluZykgeworICAgICAgICByZXR1cm4ganNOdWxsKCk7CisgICAgfQorCisgICAgSlNM
b2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKworICAgIGlmICh0eXBlID09IFFNZXRh
VHlwZTo6Qm9vbCkKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVhbih2YXJpYW50LnRvQm9vbCgpKTsK
KworICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6SW50IHx8CisgICAgICAgIHR5cGUgPT0gUU1l
dGFUeXBlOjpVSW50IHx8CisgICAgICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpMb25nIHx8CisgICAg
ICAgIHR5cGUgPT0gUU1ldGFUeXBlOjpVTG9uZyB8fAorICAgICAgICB0eXBlID09IFFNZXRhVHlw
ZTo6TG9uZ0xvbmcgfHwKKyAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OlVMb25nTG9uZyB8fAor
ICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6U2hvcnQgfHwKKyAgICAgICAgdHlwZSA9PSBRTWV0
YVR5cGU6OlVTaG9ydCB8fAorICAgICAgICB0eXBlID09IFFNZXRhVHlwZTo6RmxvYXQgfHwKKyAg
ICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OkRvdWJsZSkKKyAgICAgICAgcmV0dXJuIGpzTnVtYmVy
KHZhcmlhbnQudG9Eb3VibGUoKSk7CisKKyAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6OlFSZWdF
eHApIHsKKyAgICAgICAgUVJlZ0V4cCByZSA9IHZhcmlhbnQudmFsdWU8UVJlZ0V4cD4oKTsKKwor
ICAgICAgICBpZiAocmUuaXNWYWxpZCgpKSB7CisgICAgICAgICAgICBVU3RyaW5nIHBhdHRlcm4o
KFVDaGFyKilyZS5wYXR0ZXJuKCkudXRmMTYoKSwgcmUucGF0dGVybigpLmxlbmd0aCgpKTsKKyAg
ICAgICAgICAgIFJlZ0V4cEZsYWdzIGZsYWdzID0gKHJlLmNhc2VTZW5zaXRpdml0eSgpID09IFF0
OjpDYXNlSW5zZW5zaXRpdmUpID8gRmxhZ0lnbm9yZUNhc2UgOiBOb0ZsYWdzOworCisgICAgICAg
ICAgICBKU0M6OlJlZ0V4cCogcmVnRXhwID0gSlNDOjpSZWdFeHA6OmNyZWF0ZShleGVjLT5nbG9i
YWxEYXRhKCksIHBhdHRlcm4sIGZsYWdzKTsKKyAgICAgICAgICAgIGlmIChyZWdFeHAtPmlzVmFs
aWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUmVnRXhwT2JqZWN0OjpjcmVhdGUoZXhlYywg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PnJlZ0V4cFN0cnVjdHVyZSgpLCByZWdFeHApOworICAgICAgICAgICAgcmV0dXJuIGpzTnVsbCgp
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRRGF0ZVRp
bWUgfHwKKyAgICAgICAgdHlwZSA9PSBRTWV0YVR5cGU6OlFEYXRlIHx8CisgICAgICAgIHR5cGUg
PT0gUU1ldGFUeXBlOjpRVGltZSkgeworCisgICAgICAgIFFEYXRlIGRhdGUgPSBRRGF0ZTo6Y3Vy
cmVudERhdGUoKTsKKyAgICAgICAgUVRpbWUgdGltZSgwLDAsMCk7IC8vIG1pZG5pZ2h0CisKKyAg
ICAgICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRRGF0ZSkKKyAgICAgICAgICAgIGRhdGUgPSB2
YXJpYW50LnZhbHVlPFFEYXRlPigpOworICAgICAgICBlbHNlIGlmICh0eXBlID09IFFNZXRhVHlw
ZTo6UVRpbWUpCisgICAgICAgICAgICB0aW1lID0gdmFyaWFudC52YWx1ZTxRVGltZT4oKTsKKyAg
ICAgICAgZWxzZSB7CisgICAgICAgICAgICBRRGF0ZVRpbWUgZHQgPSB2YXJpYW50LnZhbHVlPFFE
YXRlVGltZT4oKS50b0xvY2FsVGltZSgpOworICAgICAgICAgICAgZGF0ZSA9IGR0LmRhdGUoKTsK
KyAgICAgICAgICAgIHRpbWUgPSBkdC50aW1lKCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBE
YXRlcyBzcGVjaWZpZWQgdGhpcyB3YXkgYXJlIGluIGxvY2FsIHRpbWUgKHdlIGNvbnZlcnQgRGF0
ZVRpbWVzIGFib3ZlKQorICAgICAgICBHcmVnb3JpYW5EYXRlVGltZSBkdDsKKyAgICAgICAgZHQu
eWVhciA9IGRhdGUueWVhcigpIC0gMTkwMDsKKyAgICAgICAgZHQubW9udGggPSBkYXRlLm1vbnRo
KCkgLSAxOworICAgICAgICBkdC5tb250aERheSA9IGRhdGUuZGF5KCk7CisgICAgICAgIGR0Lmhv
dXIgPSB0aW1lLmhvdXIoKTsKKyAgICAgICAgZHQubWludXRlID0gdGltZS5taW51dGUoKTsKKyAg
ICAgICAgZHQuc2Vjb25kID0gdGltZS5zZWNvbmQoKTsKKyAgICAgICAgZHQuaXNEU1QgPSAtMTsK
KyAgICAgICAgZG91YmxlIG1zID0gZ3JlZ29yaWFuRGF0ZVRpbWVUb01TKGV4ZWMsIGR0LCB0aW1l
Lm1zZWMoKSwgLyppbnB1dElzVVRDKi8gZmFsc2UpOworCisgICAgICAgIHJldHVybiBEYXRlSW5z
dGFuY2U6OmNyZWF0ZShleGVjLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPmRhdGVTdHJ1
Y3R1cmUoKSwgdHJ1bmMobXMpKTsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBRTWV0YVR5cGU6
OlFCeXRlQXJyYXkpIHsKKyAgICAgICAgUUJ5dGVBcnJheSBxdEJ5dGVBcnJheSA9IHZhcmlhbnQu
dmFsdWU8UUJ5dGVBcnJheT4oKTsKKyAgICAgICAgV1RGOjpSZWZQdHI8V1RGOjpVaW50OENsYW1w
ZWRBcnJheT4gd3RmQnl0ZUFycmF5ID0gV1RGOjpVaW50OENsYW1wZWRBcnJheTo6Y3JlYXRlVW5p
bml0aWFsaXplZChxdEJ5dGVBcnJheS5sZW5ndGgoKSk7CisgICAgICAgIG1lbWNweSh3dGZCeXRl
QXJyYXktPmRhdGEoKSwgcXRCeXRlQXJyYXkuY29uc3REYXRhKCksIHF0Qnl0ZUFycmF5Lmxlbmd0
aCgpKTsKKyAgICAgICAgcmV0dXJuIHRvSlMoZXhlYywgc3RhdGljX2Nhc3Q8SlNET01HbG9iYWxP
YmplY3QqPihleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkpLCB3dGZCeXRlQXJyYXkuZ2V0KCkp
OworICAgIH0KKworICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6UU9iamVjdFN0YXIgfHwgdHlw
ZSA9PSBRTWV0YVR5cGU6OlFXaWRnZXRTdGFyKSB7CisgICAgICAgIFFPYmplY3QqIG9iaiA9IHZh
cmlhbnQudmFsdWU8UU9iamVjdCo+KCk7CisgICAgICAgIGlmICghb2JqKQorICAgICAgICAgICAg
cmV0dXJuIGpzTnVsbCgpOworICAgICAgICByZXR1cm4gUXRJbnN0YW5jZTo6Z2V0UXRJbnN0YW5j
ZShvYmosIHJvb3QsIFFTY3JpcHRFbmdpbmU6OlF0T3duZXJzaGlwKS0+Y3JlYXRlUnVudGltZU9i
amVjdChleGVjKTsKKyAgICB9CisKKyAgICBpZiAoUXRQaXhtYXBJbnN0YW5jZTo6Y2FuSGFuZGxl
KHN0YXRpY19jYXN0PFFNZXRhVHlwZTo6VHlwZT4odmFyaWFudC50eXBlKCkpKSkKKyAgICAgICAg
cmV0dXJuIFF0UGl4bWFwSW5zdGFuY2U6OmNyZWF0ZVBpeG1hcFJ1bnRpbWVPYmplY3QoZXhlYywg
cm9vdCwgdmFyaWFudCk7CisKKyAgICBpZiAoY3VzdG9tUnVudGltZUNvbnZlcnNpb25zKCktPmNv
bnRhaW5zKHR5cGUpKSB7CisgICAgICAgIGlmICghcm9vdC0+Z2xvYmFsT2JqZWN0KCktPmluaGVy
aXRzKCZKU0RPTVdpbmRvdzo6c19pbmZvKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5l
ZCgpOworCisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IChzdGF0aWNfY2FzdDxKU0RPTVdp
bmRvdyo+KHJvb3QtPmdsb2JhbE9iamVjdCgpKSktPmltcGwoKS0+ZG9jdW1lbnQoKTsKKyAgICAg
ICAgaWYgKCFkb2N1bWVudCkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAg
ICAgICByZXR1cm4gY3VzdG9tUnVudGltZUNvbnZlcnNpb25zKCktPnZhbHVlKHR5cGUpLnRvSlNW
YWx1ZUZ1bmMoZXhlYywgdG9KU0RPTUdsb2JhbE9iamVjdChkb2N1bWVudCwgZXhlYyksIHZhcmlh
bnQpOworICAgIH0KKworICAgIGlmICh0eXBlID09IFFNZXRhVHlwZTo6UVZhcmlhbnRNYXApIHsK
KyAgICAgICAgLy8gY3JlYXRlIGEgbmV3IG9iamVjdCwgYW5kIHN0dWZmIHByb3BlcnRpZXMgaW50
byBpdAorICAgICAgICBKU09iamVjdCogcmV0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7
CisgICAgICAgIFFWYXJpYW50TWFwIG1hcCA9IHZhcmlhbnQudmFsdWU8UVZhcmlhbnRNYXA+KCk7
CisgICAgICAgIFFWYXJpYW50TWFwOjpjb25zdF9pdGVyYXRvciBpID0gbWFwLmNvbnN0QmVnaW4o
KTsKKyAgICAgICAgd2hpbGUgKGkgIT0gbWFwLmNvbnN0RW5kKCkpIHsKKyAgICAgICAgICAgIFFT
dHJpbmcgcyA9IGkua2V5KCk7CisgICAgICAgICAgICBKU1ZhbHVlIHZhbCA9IGNvbnZlcnRRVmFy
aWFudFRvVmFsdWUoZXhlYywgcm9vdC5nZXQoKSwgaS52YWx1ZSgpKTsKKyAgICAgICAgICAgIGlm
ICh2YWwpIHsKKyAgICAgICAgICAgICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAg
ICAgICAgICByZXQtPm1ldGhvZFRhYmxlKCktPnB1dChyZXQsIGV4ZWMsIElkZW50aWZpZXIoJmV4
ZWMtPmdsb2JhbERhdGEoKSwgcmVpbnRlcnByZXRfY2FzdF9wdHI8Y29uc3QgVUNoYXIgKj4ocy5j
b25zdERhdGEoKSksIHMubGVuZ3RoKCkpLCB2YWwsIHNsb3QpOworICAgICAgICAgICAgICAgIC8v
ICMjIyBlcnJvciBjYXNlPworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICAvLyBMaXN0IHR5cGVzCisg
ICAgaWYgKHR5cGUgPT0gUU1ldGFUeXBlOjpRVmFyaWFudExpc3QpIHsKKyAgICAgICAgUVZhcmlh
bnRMaXN0IHZsID0gdmFyaWFudC50b0xpc3QoKTsKKyAgICAgICAgcUNvbnZEZWJ1ZygpIDw8ICJn
b3QgYSAiIDw8IHZsLmNvdW50KCkgPDwgIiBsZW5ndGggbGlzdDoiIDw8IHZsOworICAgICAgICBy
ZXR1cm4gUnVudGltZUFycmF5OjpjcmVhdGUoZXhlYywgbmV3IFF0QXJyYXk8UVZhcmlhbnQ+KHZs
LCBRTWV0YVR5cGU6OlZvaWQsIHJvb3QpKTsKKyAgICB9IGVsc2UgaWYgKHR5cGUgPT0gUU1ldGFU
eXBlOjpRU3RyaW5nTGlzdCkgeworICAgICAgICBRU3RyaW5nTGlzdCBzbCA9IHZhcmlhbnQudmFs
dWU8UVN0cmluZ0xpc3Q+KCk7CisgICAgICAgIHJldHVybiBSdW50aW1lQXJyYXk6OmNyZWF0ZShl
eGVjLCBuZXcgUXRBcnJheTxRU3RyaW5nPihzbCwgUU1ldGFUeXBlOjpRU3RyaW5nLCByb290KSk7
CisgICAgfSBlbHNlIGlmICh0eXBlID09IChRTWV0YVR5cGU6OlR5cGUpIHFNZXRhVHlwZUlkPFFP
YmplY3RMaXN0PigpKSB7CisgICAgICAgIFFPYmplY3RMaXN0IG9sPSB2YXJpYW50LnZhbHVlPFFP
YmplY3RMaXN0PigpOworICAgICAgICByZXR1cm4gUnVudGltZUFycmF5OjpjcmVhdGUoZXhlYywg
bmV3IFF0QXJyYXk8UU9iamVjdCo+KG9sLCBRTWV0YVR5cGU6OlFPYmplY3RTdGFyLCByb290KSk7
CisgICAgfSBlbHNlIGlmICh0eXBlID09IChRTWV0YVR5cGU6OlR5cGUpcU1ldGFUeXBlSWQ8UUxp
c3Q8aW50PiA+KCkpIHsKKyAgICAgICAgUUxpc3Q8aW50PiBpbD0gdmFyaWFudC52YWx1ZTxRTGlz
dDxpbnQ+ID4oKTsKKyAgICAgICAgcmV0dXJuIFJ1bnRpbWVBcnJheTo6Y3JlYXRlKGV4ZWMsIG5l
dyBRdEFycmF5PGludD4oaWwsIFFNZXRhVHlwZTo6SW50LCByb290KSk7CisgICAgfQorCisgICAg
aWYgKHR5cGUgPT0gKFFNZXRhVHlwZTo6VHlwZSlxTWV0YVR5cGVJZDxRVmFyaWFudD4oKSkgewor
ICAgICAgICBRVmFyaWFudCByZWFsID0gdmFyaWFudC52YWx1ZTxRVmFyaWFudD4oKTsKKyAgICAg
ICAgcUNvbnZEZWJ1ZygpIDw8ICJyZWFsIHZhcmlhbnQgaXM6IiA8PCByZWFsOworICAgICAgICBy
ZXR1cm4gY29udmVydFFWYXJpYW50VG9WYWx1ZShleGVjLCByb290LCByZWFsKTsKKyAgICB9CisK
KyAgICBxQ29udkRlYnVnKCkgPDwgImZhbGxiYWNrIHBhdGggZm9yIiA8PCB2YXJpYW50IDw8IHZh
cmlhbnQudXNlclR5cGUoKTsKKworICAgIFFTdHJpbmcgc3RyaW5nID0gdmFyaWFudC50b1N0cmlu
ZygpOworICAgIFVTdHJpbmcgdXN0cmluZygoVUNoYXIqKXN0cmluZy51dGYxNigpLCBzdHJpbmcu
bGVuZ3RoKCkpOworICAgIHJldHVybiBqc1N0cmluZyhleGVjLCB1c3RyaW5nKTsKK30KKworLy8g
PT09PT09PT09PT09PT09CisKKy8vIFF0LWxpa2UgbWFjcm9zCisjZGVmaW5lIFFXX0QoQ2xhc3Mp
IENsYXNzIyNEYXRhKiBkID0gZF9mdW5jKCkKKyNkZWZpbmUgUVdfRFMoQ2xhc3MsSW5zdGFuY2Up
IENsYXNzIyNEYXRhKiBkID0gSW5zdGFuY2UtPmRfZnVuYygpCisKK2NvbnN0IENsYXNzSW5mbyBR
dFJ1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIlF0UnVudGltZU1ldGhvZCIsICZJbnRlcm5hbEZ1
bmN0aW9uOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUXRSdW50aW1lTWV0aG9k
KSB9OworCitRdFJ1bnRpbWVNZXRob2Q6OlF0UnVudGltZU1ldGhvZChRdFJ1bnRpbWVNZXRob2RE
YXRhKiBkZCwgRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllcikKKyAgICA6IEludGVybmFsRnVuY3Rpb24oZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBzdHJ1Y3R1cmUpCisgICAgLCBkX3B0cihkZCkKK3sKK30KKwordm9p
ZCBRdFJ1bnRpbWVNZXRob2Q6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3Qg
SWRlbnRpZmllciYgaWRlbnRpZmllciwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBpbnN0YW5jZSkK
K3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihleGVjLT5nbG9iYWxEYXRhKCksIGlkZW50aWZp
ZXIpOworICAgIFFXX0QoUXRSdW50aW1lTWV0aG9kKTsKKyAgICBkLT5tX2luc3RhbmNlID0gaW5z
dGFuY2U7CisgICAgZC0+bV9maW5hbGl6ZXIgPSBQYXNzV2VhazxRdFJ1bnRpbWVNZXRob2Q+KHRo
aXMsIGQpOworfQorCitRdFJ1bnRpbWVNZXRob2Q6On5RdFJ1bnRpbWVNZXRob2QoKQoreworICAg
IGRlbGV0ZSBkX3B0cjsKK30KKwordm9pZCBRdFJ1bnRpbWVNZXRob2Q6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQoreworICAgIGpzQ2FzdDxRdFJ1bnRpbWVNZXRob2QqPihjZWxsKS0+UXRSdW50aW1l
TWV0aG9kOjp+UXRSdW50aW1lTWV0aG9kKCk7Cit9CisKKy8vID09PT09PT09PT09PT09PQorCitR
dFJ1bnRpbWVNZXRob2REYXRhOjp+UXRSdW50aW1lTWV0aG9kRGF0YSgpCit7Cit9CisKK3ZvaWQg
UXRSdW50aW1lTWV0aG9kRGF0YTo6ZmluYWxpemUoSGFuZGxlPFVua25vd24+IHZhbHVlLCB2b2lk
KikKK3sKKyAgICBtX2luc3RhbmNlLT5yZW1vdmVDYWNoZWRNZXRob2Qoc3RhdGljX2Nhc3Q8SlNP
YmplY3QqPih2YWx1ZS5nZXQoKS5hc0NlbGwoKSkpOworfQorCitRdFJ1bnRpbWVNZXRhTWV0aG9k
RGF0YTo6flF0UnVudGltZU1ldGFNZXRob2REYXRhKCkKK3sKKworfQorCitRdFJ1bnRpbWVDb25u
ZWN0aW9uTWV0aG9kRGF0YTo6flF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKCkKK3sKKwor
fQorCisvLyA9PT09PT09PT09PT09PT0KKworLy8gVHlwZSBjb252ZXJzaW9uIG1ldGFkYXRhIChm
cm9tIFF0U2NyaXB0IG9yaWdpbmFsbHkpCitjbGFzcyBRdE1ldGhvZE1hdGNoVHlwZQoreworcHVi
bGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIEludmFsaWQsCisgICAgICAgIFZhcmlhbnQs
CisgICAgICAgIE1ldGFUeXBlLAorICAgICAgICBVbnJlc29sdmVkLAorICAgICAgICBNZXRhRW51
bQorICAgIH07CisKKworICAgIFF0TWV0aG9kTWF0Y2hUeXBlKCkKKyAgICAgICAgOiBtX2tpbmQo
SW52YWxpZCkgeyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsgcmV0dXJuIG1fa2lu
ZDsgfQorCisgICAgUU1ldGFUeXBlOjpUeXBlIHR5cGVJZCgpIGNvbnN0OworCisgICAgYm9vbCBp
c1ZhbGlkKCkgY29uc3QKKyAgICB7IHJldHVybiAobV9raW5kICE9IEludmFsaWQpOyB9CisKKyAg
ICBib29sIGlzVmFyaWFudCgpIGNvbnN0CisgICAgeyByZXR1cm4gKG1fa2luZCA9PSBWYXJpYW50
KTsgfQorCisgICAgYm9vbCBpc01ldGFUeXBlKCkgY29uc3QKKyAgICB7IHJldHVybiAobV9raW5k
ID09IE1ldGFUeXBlKTsgfQorCisgICAgYm9vbCBpc1VucmVzb2x2ZWQoKSBjb25zdAorICAgIHsg
cmV0dXJuIChtX2tpbmQgPT0gVW5yZXNvbHZlZCk7IH0KKworICAgIGJvb2wgaXNNZXRhRW51bSgp
IGNvbnN0CisgICAgeyByZXR1cm4gKG1fa2luZCA9PSBNZXRhRW51bSk7IH0KKworICAgIFFCeXRl
QXJyYXkgbmFtZSgpIGNvbnN0OworCisgICAgaW50IGVudW1lcmF0b3JJbmRleCgpIGNvbnN0Cisg
ICAgeyBRX0FTU0VSVChpc01ldGFFbnVtKCkpOyByZXR1cm4gbV90eXBlSWQ7IH0KKworICAgIHN0
YXRpYyBRdE1ldGhvZE1hdGNoVHlwZSB2YXJpYW50KCkKKyAgICB7IHJldHVybiBRdE1ldGhvZE1h
dGNoVHlwZShWYXJpYW50KTsgfQorCisgICAgc3RhdGljIFF0TWV0aG9kTWF0Y2hUeXBlIG1ldGFU
eXBlKGludCB0eXBlSWQsIGNvbnN0IFFCeXRlQXJyYXkgJm5hbWUpCisgICAgeyByZXR1cm4gUXRN
ZXRob2RNYXRjaFR5cGUoTWV0YVR5cGUsIHR5cGVJZCwgbmFtZSk7IH0KKworICAgIHN0YXRpYyBR
dE1ldGhvZE1hdGNoVHlwZSBtZXRhRW51bShpbnQgZW51bUluZGV4LCBjb25zdCBRQnl0ZUFycmF5
ICZuYW1lKQorICAgIHsgcmV0dXJuIFF0TWV0aG9kTWF0Y2hUeXBlKE1ldGFFbnVtLCBlbnVtSW5k
ZXgsIG5hbWUpOyB9CisKKyAgICBzdGF0aWMgUXRNZXRob2RNYXRjaFR5cGUgdW5yZXNvbHZlZChj
b25zdCBRQnl0ZUFycmF5ICZuYW1lKQorICAgIHsgcmV0dXJuIFF0TWV0aG9kTWF0Y2hUeXBlKFVu
cmVzb2x2ZWQsIC8qdHlwZUlkPSovMCwgbmFtZSk7IH0KKworcHJpdmF0ZToKKyAgICBRdE1ldGhv
ZE1hdGNoVHlwZShLaW5kIGtpbmQsIGludCB0eXBlSWQgPSAwLCBjb25zdCBRQnl0ZUFycmF5ICZu
YW1lID0gUUJ5dGVBcnJheSgpKQorICAgICAgICA6IG1fa2luZChraW5kKSwgbV90eXBlSWQodHlw
ZUlkKSwgbV9uYW1lKG5hbWUpIHsgfQorCisgICAgS2luZCBtX2tpbmQ7CisgICAgaW50IG1fdHlw
ZUlkOworICAgIFFCeXRlQXJyYXkgbV9uYW1lOworfTsKKworUU1ldGFUeXBlOjpUeXBlIFF0TWV0
aG9kTWF0Y2hUeXBlOjp0eXBlSWQoKSBjb25zdAoreworICAgIGlmIChpc1ZhcmlhbnQoKSkKKyAg
ICAgICAgcmV0dXJuIChRTWV0YVR5cGU6OlR5cGUpIFFNZXRhVHlwZTo6dHlwZSgiUVZhcmlhbnQi
KTsKKyAgICByZXR1cm4gKFFNZXRhVHlwZTo6VHlwZSkgKGlzTWV0YUVudW0oKSA/IFFNZXRhVHlw
ZTo6SW50IDogbV90eXBlSWQpOworfQorCitRQnl0ZUFycmF5IFF0TWV0aG9kTWF0Y2hUeXBlOjpu
YW1lKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fbmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBtX25hbWU7CisgICAgZWxzZSBpZiAobV9raW5kID09IFZhcmlhbnQpCisgICAgICAgIHJldHVy
biAiUVZhcmlhbnQiOworICAgIHJldHVybiBRQnl0ZUFycmF5KCk7Cit9CisKK3N0cnVjdCBRdE1l
dGhvZE1hdGNoRGF0YQoreworICAgIGludCBtYXRjaERpc3RhbmNlOworICAgIGludCBpbmRleDsK
KyAgICBRVmVjdG9yPFF0TWV0aG9kTWF0Y2hUeXBlPiB0eXBlczsKKyAgICBRVmFyTGVuZ3RoQXJy
YXk8UVZhcmlhbnQsIDEwPiBhcmdzOworCisgICAgUXRNZXRob2RNYXRjaERhdGEoaW50IGRpc3Qs
IGludCBpZHgsIFFWZWN0b3I8UXRNZXRob2RNYXRjaFR5cGU+IHR5cHMsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFFWYXJMZW5ndGhBcnJheTxRVmFyaWFudCwgMTA+ICZh
cykKKyAgICAgICAgOiBtYXRjaERpc3RhbmNlKGRpc3QpLCBpbmRleChpZHgpLCB0eXBlcyh0eXBz
KSwgYXJncyhhcykgeyB9CisgICAgUXRNZXRob2RNYXRjaERhdGEoKQorICAgICAgICA6IGluZGV4
KC0xKSB7IH0KKworICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0CisgICAgeyByZXR1cm4gKGluZGV4
ICE9IC0xKTsgfQorCisgICAgaW50IGZpcnN0VW5yZXNvbHZlZEluZGV4KCkgY29uc3QKKyAgICB7
CisgICAgICAgIGZvciAoaW50IGk9MDsgaSA8IHR5cGVzLmNvdW50KCk7IGkrKykgeworICAgICAg
ICAgICAgaWYgKHR5cGVzLmF0KGkpLmlzVW5yZXNvbHZlZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9OworCitzdGF0
aWMgaW50IGluZGV4T2ZNZXRhRW51bShjb25zdCBRTWV0YU9iamVjdCAqbWV0YSwgY29uc3QgUUJ5
dGVBcnJheSAmc3RyKQoreworICAgIFFCeXRlQXJyYXkgc2NvcGU7CisgICAgUUJ5dGVBcnJheSBu
YW1lOworICAgIGludCBzY29wZUlkeCA9IHN0ci5pbmRleE9mKCI6OiIpOworICAgIGlmIChzY29w
ZUlkeCAhPSAtMSkgeworICAgICAgICBzY29wZSA9IHN0ci5sZWZ0KHNjb3BlSWR4KTsKKyAgICAg
ICAgbmFtZSA9IHN0ci5taWQoc2NvcGVJZHggKyAyKTsKKyAgICB9IGVsc2UgeworICAgICAgICBu
YW1lID0gc3RyOworICAgIH0KKyAgICBmb3IgKGludCBpID0gbWV0YS0+ZW51bWVyYXRvckNvdW50
KCkgLSAxOyBpID49IDA7IC0taSkgeworICAgICAgICBRTWV0YUVudW0gbSA9IG1ldGEtPmVudW1l
cmF0b3IoaSk7CisgICAgICAgIGlmICgobS5uYW1lKCkgPT0gbmFtZSkvKiAmJiAoc2NvcGUuaXNF
bXB0eSgpIHx8IChtLnNjb3BlKCkgPT0gc2NvcGUpKSovKQorICAgICAgICAgICAgcmV0dXJuIGk7
CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworLy8gSGVscGVyIGZ1bmN0aW9uIGZvciByZXNv
bHZpbmcgbWV0aG9kcworLy8gTGFyZ2VseSBiYXNlZCBvbiBjb2RlIGluIFF0U2NyaXB0IGZvciBj
b21wYXRpYmlsaXR5IHJlYXNvbnMKK3N0YXRpYyBpbnQgZmluZE1ldGhvZEluZGV4KEV4ZWNTdGF0
ZSogZXhlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFFNZXRhT2JqZWN0KiBt
ZXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUUJ5dGVBcnJheSYgc2lnbmF0
dXJlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBhbGxvd1ByaXZhdGUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBRVmFyTGVuZ3RoQXJyYXk8UVZhcmlhbnQsIDEwPiAmdmFy
cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqKiB2dmFycywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEpTT2JqZWN0ICoqcEVycm9yKQoreworICAgIFFMaXN0PGludD4gbWF0
Y2hpbmdJbmRpY2VzOworCisgICAgYm9vbCBvdmVybG9hZHMgPSAhc2lnbmF0dXJlLmNvbnRhaW5z
KCcoJyk7CisKKyAgICBpbnQgY291bnQgPSBtZXRhLT5tZXRob2RDb3VudCgpOworICAgIGZvciAo
aW50IGkgPSBjb3VudCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgIGNvbnN0IFFNZXRhTWV0
aG9kIG0gPSBtZXRhLT5tZXRob2QoaSk7CisKKyAgICAgICAgLy8gRG9uJ3QgY2hvb3NlIHByaXZh
dGUgbWV0aG9kcworICAgICAgICBpZiAobS5hY2Nlc3MoKSA9PSBRTWV0YU1ldGhvZDo6UHJpdmF0
ZSAmJiAhYWxsb3dQcml2YXRlKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8g
dHJ5IGFuZCBmaW5kIGFsbCBtYXRjaGluZyBuYW1lZCBtZXRob2RzCisgICAgICAgIGlmIChtLnNp
Z25hdHVyZSgpID09IHNpZ25hdHVyZSkKKyAgICAgICAgICAgIG1hdGNoaW5nSW5kaWNlcy5hcHBl
bmQoaSk7CisgICAgICAgIGVsc2UgaWYgKG92ZXJsb2FkcykgeworICAgICAgICAgICAgUUJ5dGVB
cnJheSByYXdzaWduYXR1cmUgPSBtLnNpZ25hdHVyZSgpOworICAgICAgICAgICAgcmF3c2lnbmF0
dXJlLnRydW5jYXRlKHJhd3NpZ25hdHVyZS5pbmRleE9mKCcoJykpOworICAgICAgICAgICAgaWYg
KHJhd3NpZ25hdHVyZSA9PSBzaWduYXR1cmUpCisgICAgICAgICAgICAgICAgbWF0Y2hpbmdJbmRp
Y2VzLmFwcGVuZChpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludCBjaG9zZW5JbmRleCA9
IC0xOworICAgICpwRXJyb3IgPSAwOworICAgIFFWZWN0b3I8UXRNZXRob2RNYXRjaFR5cGU+IGNo
b3NlblR5cGVzOworCisgICAgUVZhckxlbmd0aEFycmF5PFFWYXJpYW50LCAxMD4gYXJnczsKKyAg
ICBRVmVjdG9yPFF0TWV0aG9kTWF0Y2hEYXRhPiBjYW5kaWRhdGVzOworICAgIFFWZWN0b3I8UXRN
ZXRob2RNYXRjaERhdGE+IHVucmVzb2x2ZWQ7CisgICAgUVZlY3RvcjxpbnQ+IHRvb0Zld0FyZ3M7
CisgICAgUVZlY3RvcjxpbnQ+IGNvbnZlcnNpb25GYWlsZWQ7CisKKyAgICBmb3JlYWNoKGludCBp
bmRleCwgbWF0Y2hpbmdJbmRpY2VzKSB7CisgICAgICAgIFFNZXRhTWV0aG9kIG1ldGhvZCA9IG1l
dGEtPm1ldGhvZChpbmRleCk7CisKKyAgICAgICAgUVZlY3RvcjxRdE1ldGhvZE1hdGNoVHlwZT4g
dHlwZXM7CisgICAgICAgIGJvb2wgdW5yZXNvbHZlZFR5cGVzID0gZmFsc2U7CisKKyAgICAgICAg
Ly8gcmVzb2x2ZSByZXR1cm4gdHlwZQorICAgICAgICBRQnl0ZUFycmF5IHJldHVyblR5cGVOYW1l
ID0gbWV0aG9kLnR5cGVOYW1lKCk7CisgICAgICAgIGludCBydHlwZSA9IFFNZXRhVHlwZTo6dHlw
ZShyZXR1cm5UeXBlTmFtZSk7CisgICAgICAgIGlmICgocnR5cGUgPT0gMCkgJiYgIXJldHVyblR5
cGVOYW1lLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKHJldHVyblR5cGVOYW1lID09ICJR
VmFyaWFudCIpIHsKKyAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5
cGU6OnZhcmlhbnQoKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHVyblR5cGVOYW1lLmVu
ZHNXaXRoKCcqJykpIHsKKyAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRj
aFR5cGU6Om1ldGFUeXBlKFFNZXRhVHlwZTo6Vm9pZFN0YXIsIHJldHVyblR5cGVOYW1lKSk7Cisg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCBlbnVtSW5kZXggPSBpbmRl
eE9mTWV0YUVudW0obWV0YSwgcmV0dXJuVHlwZU5hbWUpOworICAgICAgICAgICAgICAgIGlmIChl
bnVtSW5kZXggIT0gLTEpCisgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhv
ZE1hdGNoVHlwZTo6bWV0YUVudW0oZW51bUluZGV4LCByZXR1cm5UeXBlTmFtZSkpOworICAgICAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1bnJlc29sdmVkVHlwZXMgPSB0
cnVlOworICAgICAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6
OnVucmVzb2x2ZWQocmV0dXJuVHlwZU5hbWUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAocmV0dXJuVHlwZU5hbWUg
PT0gIlFWYXJpYW50IikKKyAgICAgICAgICAgICAgICB0eXBlcy5hcHBlbmQoUXRNZXRob2RNYXRj
aFR5cGU6OnZhcmlhbnQoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdHlw
ZXMuYXBwZW5kKFF0TWV0aG9kTWF0Y2hUeXBlOjptZXRhVHlwZShydHlwZSwgcmV0dXJuVHlwZU5h
bWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIHJlc29sdmUgYXJndW1lbnQgdHlwZXMKKyAg
ICAgICAgUUxpc3Q8UUJ5dGVBcnJheT4gcGFyYW1ldGVyVHlwZU5hbWVzID0gbWV0aG9kLnBhcmFt
ZXRlclR5cGVzKCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcGFyYW1ldGVyVHlwZU5h
bWVzLmNvdW50KCk7ICsraSkgeworICAgICAgICAgICAgUUJ5dGVBcnJheSBhcmdUeXBlTmFtZSA9
IHBhcmFtZXRlclR5cGVOYW1lcy5hdChpKTsKKyAgICAgICAgICAgIGludCBhdHlwZSA9IFFNZXRh
VHlwZTo6dHlwZShhcmdUeXBlTmFtZSk7CisgICAgICAgICAgICBpZiAoYXR5cGUgPT0gMCkgewor
ICAgICAgICAgICAgICAgIGlmIChhcmdUeXBlTmFtZSA9PSAiUVZhcmlhbnQiKSB7CisgICAgICAg
ICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6dmFyaWFudCgpKTsK
KyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpbnQgZW51bUlu
ZGV4ID0gaW5kZXhPZk1ldGFFbnVtKG1ldGEsIGFyZ1R5cGVOYW1lKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGVudW1JbmRleCAhPSAtMSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVz
LmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6bWV0YUVudW0oZW51bUluZGV4LCBhcmdUeXBlTmFt
ZSkpOworICAgICAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHVucmVzb2x2ZWRUeXBlcyA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlcy5h
cHBlbmQoUXRNZXRob2RNYXRjaFR5cGU6OnVucmVzb2x2ZWQoYXJnVHlwZU5hbWUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKGFyZ1R5cGVOYW1lID09ICJRVmFyaWFudCIpCisgICAgICAg
ICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChRdE1ldGhvZE1hdGNoVHlwZTo6dmFyaWFudCgpKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHR5cGVzLmFwcGVuZChR
dE1ldGhvZE1hdGNoVHlwZTo6bWV0YVR5cGUoYXR5cGUsIGFyZ1R5cGVOYW1lKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBJZiB0aGUgbmF0aXZlIG1ldGhvZCByZXF1
aXJlcyBtb3JlIGFyZ3VtZW50cyB0aGFuIHdoYXQgd2FzIHBhc3NlZCBmcm9tIEphdmFTY3JpcHQK
KyAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSArIDEgPCBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4odHlwZXMuY291bnQoKSkpIHsKKyAgICAgICAgICAgIHFNYXRjaERlYnVnKCkgPDwgIk1h
dGNoOnRvbyBmZXcgYXJncyBmb3IiIDw8IG1ldGhvZC5zaWduYXR1cmUoKTsKKyAgICAgICAgICAg
IHRvb0Zld0FyZ3MuYXBwZW5kKGluZGV4KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHVucmVzb2x2ZWRUeXBlcykgeworICAgICAgICAgICAgcU1hdGNo
RGVidWcoKSA8PCAiTWF0Y2g6dW5yZXNvbHZlZCBhcmcgdHlwZXMgZm9yIiA8PCBtZXRob2Quc2ln
bmF0dXJlKCk7CisgICAgICAgICAgICAvLyByZW1lbWJlciBpdCBzbyB3ZSBjYW4gZ2l2ZSBhbiBl
cnJvciBtZXNzYWdlIGxhdGVyLCBpZiBuZWNlc3NhcnkKKyAgICAgICAgICAgIHVucmVzb2x2ZWQu
YXBwZW5kKFF0TWV0aG9kTWF0Y2hEYXRhKC8qbWF0Y2hEaXN0YW5jZT0qL0lOVF9NQVgsIGluZGV4
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZXMsIFFWYXJMZW5ndGhBcnJheTxRVmFyaWFudCwgMTA+KCkpKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm93IGNvbnZlcnQgYXJndW1lbnRzCisgICAg
ICAgIGlmIChhcmdzLmNvdW50KCkgIT0gdHlwZXMuY291bnQoKSkKKyAgICAgICAgICAgIGFyZ3Mu
cmVzaXplKHR5cGVzLmNvdW50KCkpOworCisgICAgICAgIFF0TWV0aG9kTWF0Y2hUeXBlIHJldFR5
cGUgPSB0eXBlc1swXTsKKyAgICAgICAgYXJnc1swXSA9IFFWYXJpYW50KHJldFR5cGUudHlwZUlk
KCksICh2b2lkICopMCk7IC8vIHRoZSByZXR1cm4gdmFsdWUKKworICAgICAgICBib29sIGNvbnZl
cnRlZCA9IHRydWU7CisgICAgICAgIGludCBtYXRjaERpc3RhbmNlID0gMDsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgY29udmVydGVkICYmIGkgKyAxIDwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHR5cGVzLmNvdW50KCkpOyArK2kpIHsKKyAgICAgICAgICAgIEpTVmFsdWUgYXJnID0gaSA8
IGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA/IGV4ZWMtPmFyZ3VtZW50KGkpIDoganNVbmRlZmluZWQo
KTsKKworICAgICAgICAgICAgaW50IGFyZ2Rpc3RhbmNlID0gLTE7CisgICAgICAgICAgICBRVmFy
aWFudCB2ID0gY29udmVydFZhbHVlVG9RVmFyaWFudChleGVjLCBhcmcsIHR5cGVzLmF0KGkrMSku
dHlwZUlkKCksICZhcmdkaXN0YW5jZSk7CisgICAgICAgICAgICBpZiAoYXJnZGlzdGFuY2UgPj0g
MCkgeworICAgICAgICAgICAgICAgIG1hdGNoRGlzdGFuY2UgKz0gYXJnZGlzdGFuY2U7CisgICAg
ICAgICAgICAgICAgYXJnc1tpKzFdID0gdjsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgcU1hdGNoRGVidWcoKSA8PCAiZmFpbGVkIHRvIGNvbnZlcnQgYXJndW1lbnQgIiA8
PCBpIDw8ICJ0eXBlIiA8PCB0eXBlcy5hdChpKzEpLnR5cGVJZCgpIDw8IFFNZXRhVHlwZTo6dHlw
ZU5hbWUodHlwZXMuYXQoaSsxKS50eXBlSWQoKSk7CisgICAgICAgICAgICAgICAgY29udmVydGVk
ID0gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBxTWF0Y2hEZWJ1
ZygpIDw8ICJNYXRjaDogIiA8PCBtZXRob2Quc2lnbmF0dXJlKCkgPDwgKGNvbnZlcnRlZCA/ICJj
b252ZXJ0ZWQiOiJmYWlsZWQgdG8gY29udmVydCIpIDw8ICJkaXN0YW5jZSAiIDw8IG1hdGNoRGlz
dGFuY2U7CisKKyAgICAgICAgaWYgKGNvbnZlcnRlZCkgeworICAgICAgICAgICAgaWYgKChleGVj
LT5hcmd1bWVudENvdW50KCkgKyAxID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlcy5jb3Vu
dCgpKSkKKyAgICAgICAgICAgICAgICAmJiAobWF0Y2hEaXN0YW5jZSA9PSAwKSkgeworICAgICAg
ICAgICAgICAgIC8vIHBlcmZlY3QgbWF0Y2gsIHVzZSB0aGlzIG9uZQorICAgICAgICAgICAgICAg
IGNob3NlbkluZGV4ID0gaW5kZXg7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFF0TWV0aG9kTWF0Y2hEYXRhIGN1cnJlbnRNYXRj
aChtYXRjaERpc3RhbmNlLCBpbmRleCwgdHlwZXMsIGFyZ3MpOworICAgICAgICAgICAgICAgIGlm
IChjYW5kaWRhdGVzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVz
LmFwcGVuZChjdXJyZW50TWF0Y2gpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgICAgIFF0TWV0aG9kTWF0Y2hEYXRhIGJlc3RNYXRjaFNvRmFyID0gY2FuZGlkYXRl
cy5hdCgwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChhcmdzLmNvdW50KCkgPiBiZXN0TWF0
Y2hTb0Zhci5hcmdzLmNvdW50KCkpCisgICAgICAgICAgICAgICAgICAgICAgICB8fCAoKGFyZ3Mu
Y291bnQoKSA9PSBiZXN0TWF0Y2hTb0Zhci5hcmdzLmNvdW50KCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJiYgKG1hdGNoRGlzdGFuY2UgPD0gYmVzdE1hdGNoU29GYXIubWF0Y2hEaXN0
YW5jZSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYW5kaWRhdGVzLnByZXBlbmQoY3Vy
cmVudE1hdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNhbmRpZGF0ZXMuYXBwZW5kKGN1cnJlbnRNYXRjaCk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBjb252ZXJzaW9uRmFpbGVkLmFwcGVuZChpbmRleCk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoIW92ZXJsb2FkcykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGlmIChjaG9zZW5JbmRleCA9PSAtMSAmJiBjYW5kaWRhdGVzLmNvdW50KCkgPT0gMCkg
eworICAgICAgICAvLyBObyB2YWxpZCBmdW5jdGlvbnMgYXQgYWxsIC0gZm9ybWF0IGFuIGVycm9y
IG1lc3NhZ2UKKyAgICAgICAgaWYgKCFjb252ZXJzaW9uRmFpbGVkLmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgUVN0cmluZyBtZXNzYWdlID0gUVN0cmluZzo6ZnJvbUxhdGluMSgiaW5jb21wYXRp
YmxlIHR5cGUgb2YgYXJndW1lbnQocykgaW4gY2FsbCB0byAlMCgpOyBjYW5kaWRhdGVzIHdlcmVc
biIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoc2ln
bmF0dXJlKSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnZlcnNpb25GYWls
ZWQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAg
ICAgICAgICAgIG1lc3NhZ2UgKz0gUUxhdGluMVN0cmluZygiXG4iKTsKKyAgICAgICAgICAgICAg
ICBRTWV0YU1ldGhvZCBtdGQgPSBtZXRhLT5tZXRob2QoY29udmVyc2lvbkZhaWxlZC5hdChpKSk7
CisgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCIgICAgJTAi
KS5hcmcoUVN0cmluZzo6ZnJvbUxhdGluMShtdGQuc2lnbmF0dXJlKCkpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICpwRXJyb3IgPSB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJv
cihleGVjLCBtZXNzYWdlLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsKKyAgICAgICAgfSBlbHNl
IGlmICghdW5yZXNvbHZlZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFF0TWV0aG9kTWF0Y2hE
YXRhIGFyZ3NJbnN0YW5jZSA9IHVucmVzb2x2ZWQuZmlyc3QoKTsKKyAgICAgICAgICAgIGludCB1
bnJlc29sdmVkSW5kZXggPSBhcmdzSW5zdGFuY2UuZmlyc3RVbnJlc29sdmVkSW5kZXgoKTsKKyAg
ICAgICAgICAgIFFfQVNTRVJUKHVucmVzb2x2ZWRJbmRleCAhPSAtMSk7CisgICAgICAgICAgICBR
dE1ldGhvZE1hdGNoVHlwZSB1bnJlc29sdmVkVHlwZSA9IGFyZ3NJbnN0YW5jZS50eXBlcy5hdCh1
bnJlc29sdmVkSW5kZXgpOworICAgICAgICAgICAgUVN0cmluZyBtZXNzYWdlID0gUVN0cmluZzo6
ZnJvbUxhdGluMSgiY2Fubm90IGNhbGwgJTAoKTogdW5rbm93biB0eXBlIGAlMSciKQorICAgICAg
ICAgICAgICAgIC5hcmcoUVN0cmluZzo6ZnJvbUxhdGluMShzaWduYXR1cmUpKQorICAgICAgICAg
ICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyh1bnJlc29sdmVkVHlwZS5uYW1lKCkpKTsKKyAgICAg
ICAgICAgICpwRXJyb3IgPSB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBt
ZXNzYWdlLnRvTGF0aW4xKCkuY29uc3REYXRhKCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFFTdHJpbmcgbWVzc2FnZSA9IFFTdHJpbmc6OmZyb21MYXRpbjEoInRvbyBmZXcgYXJn
dW1lbnRzIGluIGNhbGwgdG8gJTAoKTsgY2FuZGlkYXRlcyBhcmVcbiIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAuYXJnKFFMYXRpbjFTdHJpbmcoc2lnbmF0dXJlKSk7CisgICAgICAg
ICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvb0Zld0FyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoaSA+IDApCisgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gUUxh
dGluMVN0cmluZygiXG4iKTsKKyAgICAgICAgICAgICAgICBRTWV0YU1ldGhvZCBtdGQgPSBtZXRh
LT5tZXRob2QodG9vRmV3QXJncy5hdChpKSk7CisgICAgICAgICAgICAgICAgbWVzc2FnZSArPSBR
U3RyaW5nOjpmcm9tTGF0aW4xKCIgICAgJTAiKS5hcmcoUVN0cmluZzo6ZnJvbUxhdGluMShtdGQu
c2lnbmF0dXJlKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpwRXJyb3IgPSB0aHJv
d0Vycm9yKGV4ZWMsIGNyZWF0ZVN5bnRheEVycm9yKGV4ZWMsIG1lc3NhZ2UudG9MYXRpbjEoKS5j
b25zdERhdGEoKSkpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNob3NlbkluZGV4ID09
IC0xICYmIGNhbmRpZGF0ZXMuY291bnQoKSA+IDApIHsKKyAgICAgICAgUXRNZXRob2RNYXRjaERh
dGEgYmVzdE1hdGNoID0gY2FuZGlkYXRlcy5hdCgwKTsKKyAgICAgICAgaWYgKChjYW5kaWRhdGVz
LnNpemUoKSA+IDEpCisgICAgICAgICAgICAmJiAoYmVzdE1hdGNoLmFyZ3MuY291bnQoKSA9PSBj
YW5kaWRhdGVzLmF0KDEpLmFyZ3MuY291bnQoKSkKKyAgICAgICAgICAgICYmIChiZXN0TWF0Y2gu
bWF0Y2hEaXN0YW5jZSA9PSBjYW5kaWRhdGVzLmF0KDEpLm1hdGNoRGlzdGFuY2UpKSB7CisgICAg
ICAgICAgICAvLyBhbWJpZ3VvdXMgY2FsbAorICAgICAgICAgICAgUVN0cmluZyBtZXNzYWdlID0g
UVN0cmluZzo6ZnJvbUxhdGluMSgiYW1iaWd1b3VzIGNhbGwgb2Ygb3ZlcmxvYWRlZCBmdW5jdGlv
biAlMCgpOyBjYW5kaWRhdGVzIHdlcmVcbiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIC5hcmcoUUxhdGluMVN0cmluZyhzaWduYXR1cmUpKTsKKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgY2FuZGlkYXRlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIC8v
IE9ubHkgY2FuZGlkYXRlIGZvciBvdmVybG9hZCBpZiBhcmd1bWVudCBjb3VudCBhbmQgbWF0Y2gg
ZGlzdGFuY2UgaXMgc2FtZSBhcyBiZXN0IG1hdGNoCisgICAgICAgICAgICAgICAgaWYgKGNhbmRp
ZGF0ZXMuYXQoaSkuYXJncy5jb3VudCgpID09IGJlc3RNYXRjaC5hcmdzLmNvdW50KCkKKyAgICAg
ICAgICAgICAgICAgICAgfHwgY2FuZGlkYXRlcy5hdChpKS5tYXRjaERpc3RhbmNlID09IGJlc3RN
YXRjaC5tYXRjaERpc3RhbmNlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKz0gUUxhdGluMVN0cmluZygiXG4iKTsKKyAg
ICAgICAgICAgICAgICAgICAgUU1ldGFNZXRob2QgbXRkID0gbWV0YS0+bWV0aG9kKGNhbmRpZGF0
ZXMuYXQoaSkuaW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICs9IFFTdHJpbmc6
OmZyb21MYXRpbjEoIiAgICAlMCIpLmFyZyhRU3RyaW5nOjpmcm9tTGF0aW4xKG10ZC5zaWduYXR1
cmUoKSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpw
RXJyb3IgPSB0aHJvd0Vycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBtZXNzYWdlLnRv
TGF0aW4xKCkuY29uc3REYXRhKCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGNo
b3NlbkluZGV4ID0gYmVzdE1hdGNoLmluZGV4OworICAgICAgICAgICAgYXJncyA9IGJlc3RNYXRj
aC5hcmdzOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGNob3NlbkluZGV4ICE9IC0xKSB7
CisgICAgICAgIC8qIENvcHkgdGhlIHN0dWZmIG92ZXIgKi8KKyAgICAgICAgaW50IGk7CisgICAg
ICAgIHZhcnMucmVzaXplKGFyZ3MuY291bnQoKSk7CisgICAgICAgIGZvciAoaT0wOyBpIDwgYXJn
cy5jb3VudCgpOyBpKyspIHsKKyAgICAgICAgICAgIHZhcnNbaV0gPSBhcmdzW2ldOworICAgICAg
ICAgICAgdnZhcnNbaV0gPSB2YXJzW2ldLmRhdGEoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHJldHVybiBjaG9zZW5JbmRleDsKK30KKworLy8gU2lnbmFscyBhcmUgbm90IGZ1enp5IG1hdGNo
ZWQgYXMgbXVjaCBhcyBtZXRob2RzCitzdGF0aWMgaW50IGZpbmRTaWduYWxJbmRleChjb25zdCBR
TWV0YU9iamVjdCogbWV0YSwgaW50IGluaXRpYWxJbmRleCwgUUJ5dGVBcnJheSBzaWduYXR1cmUp
Cit7CisgICAgaW50IGluZGV4ID0gaW5pdGlhbEluZGV4OworICAgIFFNZXRhTWV0aG9kIG1ldGhv
ZCA9IG1ldGEtPm1ldGhvZChpbmRleCk7CisgICAgYm9vbCBvdmVybG9hZHMgPSAhc2lnbmF0dXJl
LmNvbnRhaW5zKCcoJyk7CisgICAgaWYgKG92ZXJsb2FkcyAmJiAobWV0aG9kLmF0dHJpYnV0ZXMo
KSAmIFFNZXRhTWV0aG9kOjpDbG9uZWQpKSB7CisgICAgICAgIC8vIGZpbmQgdGhlIG1vc3QgZ2Vu
ZXJhbCBtZXRob2QKKyAgICAgICAgZG8geworICAgICAgICAgICAgbWV0aG9kID0gbWV0YS0+bWV0
aG9kKC0taW5kZXgpOworICAgICAgICB9IHdoaWxlIChtZXRob2QuYXR0cmlidXRlcygpICYgUU1l
dGFNZXRob2Q6OkNsb25lZCk7CisgICAgfQorICAgIHJldHVybiBpbmRleDsKK30KKworY29uc3Qg
Q2xhc3NJbmZvIFF0UnVudGltZU1ldGFNZXRob2Q6OnNfaW5mbyA9IHsgIlF0UnVudGltZU1ldGhv
ZCIsICZCYXNlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUXRSdW50aW1lTWV0
YU1ldGhvZCkgfTsKKworUXRSdW50aW1lTWV0YU1ldGhvZDo6UXRSdW50aW1lTWV0YU1ldGhvZChF
eGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudGlmaWVyKQorICAgIDogUXRSdW50aW1lTWV0aG9kIChuZXcgUXRSdW50aW1lTWV0YU1ldGhv
ZERhdGEoKSwgZXhlYywgc3RydWN0dXJlLCBpZGVudGlmaWVyKQoreworfQorCit2b2lkIFF0UnVu
dGltZU1ldGFNZXRob2Q6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRl
bnRpZmllciYgaWRlbnRpZmllciwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBpbnN0YW5jZSwgaW50
IGluZGV4LCBjb25zdCBRQnl0ZUFycmF5JiBzaWduYXR1cmUsIGJvb2wgYWxsb3dQcml2YXRlKQor
eworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGV4ZWMsIGlkZW50aWZpZXIsIGluc3RhbmNlKTsK
KyAgICBRV19EKFF0UnVudGltZU1ldGFNZXRob2QpOworICAgIGQtPm1fc2lnbmF0dXJlID0gc2ln
bmF0dXJlOworICAgIGQtPm1faW5kZXggPSBpbmRleDsKKyAgICBkLT5tX2FsbG93UHJpdmF0ZSA9
IGFsbG93UHJpdmF0ZTsKK30KKwordm9pZCBRdFJ1bnRpbWVNZXRhTWV0aG9kOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgUXRSdW50aW1l
TWV0YU1ldGhvZCogdGhpc09iamVjdCA9IGpzQ2FzdDxRdFJ1bnRpbWVNZXRhTWV0aG9kKj4oY2Vs
bCk7CisgICAgUXRSdW50aW1lTWV0aG9kOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0
b3IpOworICAgIFF0UnVudGltZU1ldGFNZXRob2REYXRhKiBkID0gdGhpc09iamVjdC0+ZF9mdW5j
KCk7CisgICAgaWYgKGQtPm1fY29ubmVjdCkKKyAgICAgICAgdmlzaXRvci5hcHBlbmQoJmQtPm1f
Y29ubmVjdCk7CisgICAgaWYgKGQtPm1fZGlzY29ubmVjdCkKKyAgICAgICAgdmlzaXRvci5hcHBl
bmQoJmQtPm1fZGlzY29ubmVjdCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIFF0UnVudGltZU1ldGFN
ZXRob2Q6OmNhbGwoRXhlY1N0YXRlKiBleGVjKQoreworICAgIFF0UnVudGltZU1ldGFNZXRob2RE
YXRhKiBkID0gc3RhdGljX2Nhc3Q8UXRSdW50aW1lTWV0YU1ldGhvZCAqPihleGVjLT5jYWxsZWUo
KSktPmRfZnVuYygpOworCisgICAgLy8gV2UncmUgbGltaXRlZCB0byAxMCBhcmdzCisgICAgaWYg
KGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA+IDEwKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgLy8gV2UgaGF2ZSB0byBwaWNrIGEgbWV0aG9kIHRo
YXQgbWF0Y2hlcy4uCisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKwor
ICAgIFFPYmplY3QgKm9iaiA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOworICAgIGlmIChv
YmopIHsKKyAgICAgICAgUVZhckxlbmd0aEFycmF5PFFWYXJpYW50LCAxMD4gdmFyZ3M7CisgICAg
ICAgIHZvaWQgKnFhcmdzWzExXTsKKworICAgICAgICBpbnQgbWV0aG9kSW5kZXg7CisgICAgICAg
IEpTT2JqZWN0KiBlcnJvck9iaiA9IDA7CisgICAgICAgIGlmICgobWV0aG9kSW5kZXggPSBmaW5k
TWV0aG9kSW5kZXgoZXhlYywgb2JqLT5tZXRhT2JqZWN0KCksIGQtPm1fc2lnbmF0dXJlLCBkLT5t
X2FsbG93UHJpdmF0ZSwgdmFyZ3MsICh2b2lkICoqKXFhcmdzLCAmZXJyb3JPYmopKSAhPSAtMSkg
eworICAgICAgICAgICAgaWYgKFFNZXRhT2JqZWN0OjptZXRhY2FsbChvYmosIFFNZXRhT2JqZWN0
OjpJbnZva2VNZXRhTWV0aG9kLCBtZXRob2RJbmRleCwgcWFyZ3MpID49IDApCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgICAgICAg
ICAgaWYgKHZhcmdzWzBdLmlzVmFsaWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNvbnZlcnRRVmFyaWFudFRvVmFsdWUoZXhlYywgZC0+bV9pbnN0YW5jZS0+cm9v
dE9iamVjdCgpLCB2YXJnc1swXSkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVycm9yT2Jq
KQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShlcnJvck9iaik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVFcnJvcihleGVj
LCAiY2Fubm90IGNhbGwgZnVuY3Rpb24gb2YgZGVsZXRlZCBRT2JqZWN0IikpOworICAgIH0KKwor
ICAgIC8vIHZvaWQgZnVuY3Rpb25zIHJldHVybiB1bmRlZmluZWQKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworfQorCitDYWxsVHlwZSBRdFJ1bnRpbWVNZXRhTWV0
aG9kOjpnZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2Fs
bERhdGEubmF0aXZlLmZ1bmN0aW9uID0gY2FsbDsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0Owor
fQorCitib29sIFF0UnVudGltZU1ldGFNZXRob2Q6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgUXRSdW50aW1lTWV0YU1ldGhvZCogdGhpc09iamVj
dCA9IGpzQ2FzdDxRdFJ1bnRpbWVNZXRhTWV0aG9kKj4oY2VsbCk7CisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSAiY29ubmVjdCIpIHsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
dGhpc09iamVjdC0+Y29ubmVjdEdldHRlcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0g
ZWxzZSBpZiAocHJvcGVydHlOYW1lID09ICJkaXNjb25uZWN0IikgeworICAgICAgICBzbG90LnNl
dEN1c3RvbSh0aGlzT2JqZWN0LCB0aGlzT2JqZWN0LT5kaXNjb25uZWN0R2V0dGVyKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfSBlbHNlIGlmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCkgeworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0
LCB0aGlzT2JqZWN0LT5sZW5ndGhHZXR0ZXIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICByZXR1cm4gUXRSdW50aW1lTWV0aG9kOjpnZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09i
amVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBzbG90KTsKK30KKworYm9vbCBRdFJ1bnRpbWVNZXRh
TWV0aG9kOjpnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKK3sKKyAgICBRdFJ1bnRpbWVNZXRhTWV0aG9kKiB0aGlzT2JqZWN0
ID0ganNDYXN0PFF0UnVudGltZU1ldGFNZXRob2QqPihvYmplY3QpOworICAgIGlmIChwcm9wZXJ0
eU5hbWUgPT0gImNvbm5lY3QiKSB7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90OworICAgICAg
ICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBjb25uZWN0R2V0dGVyKTsKKyAgICAgICAgZGVz
Y3JpcHRvci5zZXREZXNjcmlwdG9yKHNsb3QuZ2V0VmFsdWUoZXhlYywgcHJvcGVydHlOYW1lKSwg
RG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAocHJvcGVydHlOYW1lID09ICJkaXNjb25uZWN0IikgeworICAgICAg
ICBQcm9wZXJ0eVNsb3Qgc2xvdDsKKyAgICAgICAgc2xvdC5zZXRDdXN0b20odGhpc09iamVjdCwg
ZGlzY29ubmVjdEdldHRlcik7CisgICAgICAgIGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihzbG90
LmdldFZhbHVlKGV4ZWMsIHByb3BlcnR5TmFtZSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERv
bnRFbnVtKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHByb3BlcnR5
TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIFByb3BlcnR5
U2xvdCBzbG90OworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0
ZXIpOworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVj
LCBwcm9wZXJ0eU5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBRdFJ1bnRpbWVNZXRob2Q6Omdl
dE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRl
c2NyaXB0b3IpOworfQorCit2b2lkIFF0UnVudGltZU1ldGFNZXRob2Q6OmdldE93blByb3BlcnR5
TmFtZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJh
eSYgcHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUg
PT0gSW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykgeworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyKGV4ZWMsICJjb25uZWN0IikpOworICAgICAgICBwcm9wZXJ0eU5hbWVzLmFk
ZChJZGVudGlmaWVyKGV4ZWMsICJkaXNjb25uZWN0IikpOworICAgICAgICBwcm9wZXJ0eU5hbWVz
LmFkZChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKKyAgICB9CisKKyAgICBRdFJ1bnRp
bWVNZXRob2Q6OmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVz
LCBtb2RlKTsKK30KKworSlNWYWx1ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpsZW5ndGhHZXR0ZXIo
RXhlY1N0YXRlKiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgLy8gUXRTY3Jp
cHQgYWx3YXlzIHJldHVybnMgMAorICAgIHJldHVybiBqc051bWJlcigwKTsKK30KKworSlNWYWx1
ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjb25uZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCit7CisgICAgUXRSdW50aW1l
TWV0YU1ldGhvZCogdGhpc09iaiA9IHN0YXRpY19jYXN0PFF0UnVudGltZU1ldGFNZXRob2QqPihh
c09iamVjdChzbG90QmFzZSkpOworICAgIFFXX0RTKFF0UnVudGltZU1ldGFNZXRob2QsIHRoaXNP
YmopOworCisgICAgaWYgKCFkLT5tX2Nvbm5lY3QpCisgICAgICAgIGQtPm1fY29ubmVjdC5zZXQo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqLCBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpj
cmVhdGUoZXhlYywgaWRlbnQsIHRydWUsIGQtPm1faW5zdGFuY2UsIGQtPm1faW5kZXgsIGQtPm1f
c2lnbmF0dXJlKSk7CisgICAgcmV0dXJuIGQtPm1fY29ubmVjdC5nZXQoKTsKK30KKworSlNWYWx1
ZSBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpkaXNjb25uZWN0R2V0dGVyKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBzbG90QmFzZSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpCit7CisgICAgUXRSdW50
aW1lTWV0YU1ldGhvZCogdGhpc09iaiA9IHN0YXRpY19jYXN0PFF0UnVudGltZU1ldGFNZXRob2Qq
Pihhc09iamVjdChzbG90QmFzZSkpOworICAgIFFXX0RTKFF0UnVudGltZU1ldGFNZXRob2QsIHRo
aXNPYmopOworCisgICAgaWYgKCFkLT5tX2Rpc2Nvbm5lY3QpCisgICAgICAgIGQtPm1fZGlzY29u
bmVjdC5zZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCB0aGlzT2JqLCBRdFJ1bnRpbWVDb25uZWN0aW9u
TWV0aG9kOjpjcmVhdGUoZXhlYywgaWRlbnQsIGZhbHNlLCBkLT5tX2luc3RhbmNlLCBkLT5tX2lu
ZGV4LCBkLT5tX3NpZ25hdHVyZSkpOworICAgIHJldHVybiBkLT5tX2Rpc2Nvbm5lY3QuZ2V0KCk7
Cit9CisKKy8vID09PT09PT09PT09PT09PQorCitRTXVsdGlNYXA8UU9iamVjdCosIFF0Q29ubmVj
dGlvbk9iamVjdCo+IFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNvbm5lY3Rpb25zOworCitj
b25zdCBDbGFzc0luZm8gUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6c19pbmZvID0geyAiUXRS
dW50aW1lTWV0aG9kIiwgJkJhc2U6OnNfaW5mbywgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShR
dFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKSB9OworCitRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9k
OjpRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUsIGNvbnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIpCisgICAgOiBRdFJ1bnRpbWVN
ZXRob2QgKG5ldyBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kRGF0YSgpLCBleGVjLCBzdHJ1Y3R1
cmUsIGlkZW50aWZpZXIpCit7Cit9CisKK3ZvaWQgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6
ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudGlm
aWVyLCBib29sIGlzQ29ubmVjdCwgUGFzc1JlZlB0cjxRdEluc3RhbmNlPiBpbnN0YW5jZSwgaW50
IGluZGV4LCBjb25zdCBRQnl0ZUFycmF5JiBzaWduYXR1cmUpCit7CisgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZXhlYywgaWRlbnRpZmllciwgaW5zdGFuY2UpOworICAgIFFXX0QoUXRSdW50aW1l
Q29ubmVjdGlvbk1ldGhvZCk7CisKKyAgICBkLT5tX3NpZ25hdHVyZSA9IHNpZ25hdHVyZTsKKyAg
ICBkLT5tX2luZGV4ID0gaW5kZXg7CisgICAgZC0+bV9pc0Nvbm5lY3QgPSBpc0Nvbm5lY3Q7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmNhbGwoRXhlY1N0
YXRlKiBleGVjKQoreworICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2REYXRhKiBkID0gc3Rh
dGljX2Nhc3Q8UXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCAqPihleGVjLT5jYWxsZWUoKSktPmRf
ZnVuYygpOworCisgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNPbmx5KTsKKworICAg
IFFPYmplY3QqIHNlbmRlciA9IGQtPm1faW5zdGFuY2UtPmdldE9iamVjdCgpOworCisgICAgaWYg
KHNlbmRlcikgeworCisgICAgICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5tZXRob2RUYWJsZSgpLT50b1RoaXNPYmplY3QoZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLCBleGVjKTsKKyAgICAgICAgSlNPYmplY3QqIGZ1bmNPYmplY3QgPSAw
OworCisgICAgICAgIC8vIFF0U2NyaXB0IGNoZWNrcyBzaWduYWxuZXNzIGZpcnN0LCBhcmd1bWVu
dHMgc2Vjb25kCisgICAgICAgIGludCBzaWduYWxJbmRleCA9IC0xOworCisgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGUgaW5pdGlhbCBpbmRleCBpcyBhIHNpZ25hbAorICAgICAgICBRTWV0YU1ldGhv
ZCBtID0gc2VuZGVyLT5tZXRhT2JqZWN0KCktPm1ldGhvZChkLT5tX2luZGV4KTsKKyAgICAgICAg
aWYgKG0ubWV0aG9kVHlwZSgpID09IFFNZXRhTWV0aG9kOjpTaWduYWwpCisgICAgICAgICAgICBz
aWduYWxJbmRleCA9IGZpbmRTaWduYWxJbmRleChzZW5kZXItPm1ldGFPYmplY3QoKSwgZC0+bV9p
bmRleCwgZC0+bV9zaWduYXR1cmUpOworCisgICAgICAgIGlmIChzaWduYWxJbmRleCAhPSAtMSkg
eworICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50Q291bnQoKSA9PSAxKSB7CisgICAgICAg
ICAgICAgICAgZnVuY09iamVjdCA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvT2JqZWN0KGV4ZWMpOwor
ICAgICAgICAgICAgICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICAgICAgICAgIGlmIChm
dW5jT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShmdW5jT2JqZWN0LCBjYWxsRGF0
YSkgPT0gQ2FsbFR5cGVOb25lKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChkLT5tX2lzQ29u
bmVjdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywg
Y3JlYXRlVHlwZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRob2QuY29ubmVjdDogdGFyZ2V0IGlzIG5v
dCBhIGZ1bmN0aW9uIikpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5cGVFcnJvcihleGVj
LCAiUXRNZXRhTWV0aG9kLmRpc2Nvbm5lY3Q6IHRhcmdldCBpcyBub3QgYSBmdW5jdGlvbiIpKTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKGV4ZWMtPmFyZ3VtZW50
Q291bnQoKSA+PSAyKSB7CisgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmFyZ3VtZW50KDApLmlz
T2JqZWN0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhpc09iamVjdCA9IGV4ZWMtPmFyZ3Vt
ZW50KDApLnRvT2JqZWN0KGV4ZWMpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUg
YWN0dWFsIGZ1bmN0aW9uIHRvIGNhbGwKKyAgICAgICAgICAgICAgICAgICAgSlNPYmplY3QgKmFz
T2JqID0gZXhlYy0+YXJndW1lbnQoMSkudG9PYmplY3QoZXhlYyk7CisgICAgICAgICAgICAgICAg
ICAgIENhbGxEYXRhIGNhbGxEYXRhOworICAgICAgICAgICAgICAgICAgICBpZiAoYXNPYmotPm1l
dGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGFzT2JqLCBjYWxsRGF0YSkgIT0gQ2FsbFR5cGVOb25l
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB2ZXJzaW9uCisgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jT2JqZWN0ID0gYXNPYmo7CisgICAgICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGl0IHRvIGEgc3Ry
aW5nCisgICAgICAgICAgICAgICAgICAgICAgICBVU3RyaW5nIGZ1bmNOYW1lID0gZXhlYy0+YXJn
dW1lbnQoMSkudG9TdHJpbmcoZXhlYyktPnZhbHVlKGV4ZWMpOworICAgICAgICAgICAgICAgICAg
ICAgICAgSWRlbnRpZmllciBmdW5jSWRlbnQoZXhlYywgZnVuY05hbWUpOworCisgICAgICAgICAg
ICAgICAgICAgICAgICAvLyAjIyMgRHJvcEFsbExvY2tzCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBUaGlzIGlzIHJlc29sdmVkIGF0IHRoaXMgcG9pbnQgaW4gUXRTY3JpcHQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsID0gdGhpc09iamVjdC0+Z2V0KGV4ZWMsIGZ1bmNJ
ZGVudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBKU09iamVjdCogYXNGdW5jT2JqID0gdmFs
LnRvT2JqZWN0KGV4ZWMpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNGdW5jT2Jq
LT5tZXRob2RUYWJsZSgpLT5nZXRDYWxsRGF0YShhc0Z1bmNPYmosIGNhbGxEYXRhKSAhPSBDYWxs
VHlwZU5vbmUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jT2JqZWN0ID0gYXNG
dW5jT2JqOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3IoZXhlYywgY3JlYXRlVHlwZUVycm9yKGV4ZWMs
ICJRdE1ldGFNZXRob2QuY29ubmVjdDogdGFyZ2V0IGlzIG5vdCBhIGZ1bmN0aW9uIikpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0
TWV0YU1ldGhvZC5kaXNjb25uZWN0OiB0YXJnZXQgaXMgbm90IGEgZnVuY3Rpb24iKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZVR5
cGVFcnJvcihleGVjLCAiUXRNZXRhTWV0aG9kLmNvbm5lY3Q6IHRoaXNPYmplY3QgaXMgbm90IGFu
IG9iamVjdCIpKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgIlF0
TWV0YU1ldGhvZC5kaXNjb25uZWN0OiB0aGlzT2JqZWN0IGlzIG5vdCBhbiBvYmplY3QiKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZC0+bV9pc0Nvbm5lY3QpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgIlF0TWV0YU1ldGhvZC5jb25uZWN0OiBubyBhcmd1
bWVudHMgZ2l2ZW4iKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsICJRdE1ldGFNZXRo
b2QuZGlzY29ubmVjdDogbm8gYXJndW1lbnRzIGdpdmVuIikpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpZiAoZC0+bV9pc0Nvbm5lY3QpIHsKKyAgICAgICAgICAgICAgICAvLyB0byBj
b25uZWN0LCB3ZSBuZWVkOgorICAgICAgICAgICAgICAgIC8vICB0YXJnZXQgb2JqZWN0IFtmcm9t
IGN0b3JdCisgICAgICAgICAgICAgICAgLy8gIHRhcmdldCBzaWduYWwgaW5kZXggZXRjLiBbZnJv
bSBjdG9yXQorICAgICAgICAgICAgICAgIC8vICByZWNlaXZlciBmdW5jdGlvbiBbZnJvbSBhcmd1
bWVudHNdCisgICAgICAgICAgICAgICAgLy8gIHJlY2VpdmVyIHRoaXMgb2JqZWN0IFtmcm9tIGFy
Z3VtZW50c10KKworICAgICAgICAgICAgICAgIEV4ZWNTdGF0ZSogZ2xvYmFsRXhlYyA9IGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+Z2xvYmFsRXhlYygpOworICAgICAgICAgICAgICAgIFF0
Q29ubmVjdGlvbk9iamVjdCogY29ubiA9IFF0Q29ubmVjdGlvbk9iamVjdDo6Y3JlYXRlV2l0aElu
dGVybmFsSlNDKGdsb2JhbEV4ZWMsIGQtPm1faW5zdGFuY2UsIHNpZ25hbEluZGV4LCB0aGlzT2Jq
ZWN0LCBmdW5jT2JqZWN0KTsKKyAgICAgICAgICAgICAgICBib29sIG9rID0gUU1ldGFPYmplY3Q6
OmNvbm5lY3Qoc2VuZGVyLCBzaWduYWxJbmRleCwgY29ubiwgY29ubi0+bWV0YU9iamVjdCgpLT5t
ZXRob2RPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgaWYgKCFvaykgeworICAgICAgICAgICAg
ICAgICAgICBkZWxldGUgY29ubjsKKyAgICAgICAgICAgICAgICAgICAgUVN0cmluZyBtc2cgPSBR
U3RyaW5nKFFMYXRpbjFTdHJpbmcoIlF0TWV0YU1ldGhvZC5jb25uZWN0OiBmYWlsZWQgdG8gY29u
bmVjdCB0byAlMTo6JTIoKSIpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoUUxh
dGluMVN0cmluZyhzZW5kZXItPm1ldGFPYmplY3QoKS0+Y2xhc3NOYW1lKCkpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhkLT5tX3NpZ25hdHVyZSkpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9y
KGV4ZWMsIG1zZy50b0xhdGluMSgpLmNvbnN0RGF0YSgpKSk7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvLyBTdG9yZSBjb25u
ZWN0aW9uCisgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb25zLmluc2VydChzZW5kZXIsIGNv
bm4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgLy8gTm93IHRvIGZpbmQgb3VyIHByZXZpb3VzIGNvbm5lY3Rpb24gb2JqZWN0LiBIbW0u
CisgICAgICAgICAgICAgICAgUUxpc3Q8UXRDb25uZWN0aW9uT2JqZWN0Kj4gY29ubnMgPSBjb25u
ZWN0aW9ucy52YWx1ZXMoc2VuZGVyKTsKKyAgICAgICAgICAgICAgICBib29sIHJldCA9IGZhbHNl
OworCisgICAgICAgICAgICAgICAgSlNDb250ZXh0UmVmIGNvbnRleHQgPSA6OnRvUmVmKGV4ZWMp
OworICAgICAgICAgICAgICAgIEpTT2JqZWN0UmVmIHJlY2VpdmVyID0gOjp0b1JlZih0aGlzT2Jq
ZWN0KTsKKyAgICAgICAgICAgICAgICBKU09iamVjdFJlZiByZWNlaXZlckZ1bmN0aW9uID0gOjp0
b1JlZihmdW5jT2JqZWN0KTsKKworICAgICAgICAgICAgICAgIGZvcmVhY2goUXRDb25uZWN0aW9u
T2JqZWN0KiBjb25uLCBjb25ucykgeworICAgICAgICAgICAgICAgICAgICAvLyBJcyB0aGlzIHRo
ZSByaWdodCBjb25uZWN0aW9uPworICAgICAgICAgICAgICAgICAgICBpZiAoY29ubi0+bWF0Y2go
Y29udGV4dCwgc2VuZGVyLCBzaWduYWxJbmRleCwgcmVjZWl2ZXIsIHJlY2VpdmVyRnVuY3Rpb24p
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBZZXAsIGRpc2Nvbm5lY3QgaXQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFFNZXRhT2JqZWN0OjpkaXNjb25uZWN0KHNlbmRlciwgc2lnbmFs
SW5kZXgsIGNvbm4sIGNvbm4tPm1ldGFPYmplY3QoKS0+bWV0aG9kT2Zmc2V0KCkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgZGVsZXRlIGNvbm47IC8vIHRoaXMgd2lsbCBhbHNvIHJlbW92ZSBp
dCBmcm9tIHRoZSBtYXAKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmICghcmV0KSB7CisgICAgICAgICAgICAg
ICAgICAgIFFTdHJpbmcgbXNnID0gUVN0cmluZyhRTGF0aW4xU3RyaW5nKCJRdE1ldGFNZXRob2Qu
ZGlzY29ubmVjdDogZmFpbGVkIHRvIGRpc2Nvbm5lY3QgZnJvbSAlMTo6JTIoKSIpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhzZW5kZXItPm1ldGFPYmpl
Y3QoKS0+Y2xhc3NOYW1lKCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcmcoUUxh
dGluMVN0cmluZyhkLT5tX3NpZ25hdHVyZSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKGV4ZWMsIGNyZWF0ZUVycm9yKGV4ZWMsIG1zZy50b0xhdGluMSgpLmNvbnN0
RGF0YSgpKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgUVN0cmluZyBtc2cgPSBRU3RyaW5nKFFMYXRpbjFTdHJpbmcoIlF0
TWV0YU1ldGhvZC4lMTogJTI6OiUzKCkgaXMgbm90IGEgc2lnbmFsIikpCisgICAgICAgICAgICAg
ICAgICAgIC5hcmcoUUxhdGluMVN0cmluZyhkLT5tX2lzQ29ubmVjdCA/ICJjb25uZWN0IjogImRp
c2Nvbm5lY3QiKSkKKyAgICAgICAgICAgICAgICAgICAgLmFyZyhRTGF0aW4xU3RyaW5nKHNlbmRl
ci0+bWV0YU9iamVjdCgpLT5jbGFzc05hbWUoKSkpCisgICAgICAgICAgICAgICAgICAgIC5hcmco
UUxhdGluMVN0cmluZyhkLT5tX3NpZ25hdHVyZSkpOworICAgICAgICAgICAgcmV0dXJuIHRocm93
Vk1FcnJvcihleGVjLCBjcmVhdGVUeXBlRXJyb3IoZXhlYywgbXNnLnRvTGF0aW4xKCkuY29uc3RE
YXRhKCkpKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiB0aHJvd1ZN
RXJyb3IoZXhlYywgY3JlYXRlRXJyb3IoZXhlYywgImNhbm5vdCBjYWxsIGZ1bmN0aW9uIG9mIGRl
bGV0ZWQgUU9iamVjdCIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpz
VW5kZWZpbmVkKCkpOworfQorCitDYWxsVHlwZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpn
ZXRDYWxsRGF0YShKU0NlbGwqLCBDYWxsRGF0YSYgY2FsbERhdGEpCit7CisgICAgY2FsbERhdGEu
bmF0aXZlLmZ1bmN0aW9uID0gY2FsbDsKKyAgICByZXR1cm4gQ2FsbFR5cGVIb3N0OworfQorCiti
b29sIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blByb3BlcnR5U2xvdChKU0NlbGwq
IGNlbGwsIEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCit7CisgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZCogdGhp
c09iamVjdCA9IGpzQ2FzdDxRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kKj4oY2VsbCk7CisgICAg
aWYgKHByb3BlcnR5TmFtZSA9PSBleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAg
ICAgIHNsb3Quc2V0Q3VzdG9tKHRoaXNPYmplY3QsIHRoaXNPYmplY3QtPmxlbmd0aEdldHRlcik7
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHJldHVybiBRdFJ1bnRpbWVNZXRo
b2Q6OmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNs
b3QpOworfQorCitib29sIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blByb3BlcnR5
RGVzY3JpcHRvcihKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQorewor
ICAgIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8UXRSdW50
aW1lQ29ubmVjdGlvbk1ldGhvZCo+KG9iamVjdCk7CisgICAgaWYgKHByb3BlcnR5TmFtZSA9PSBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKSB7CisgICAgICAgIFByb3BlcnR5U2xvdCBzbG90
OworICAgICAgICBzbG90LnNldEN1c3RvbSh0aGlzT2JqZWN0LCBsZW5ndGhHZXR0ZXIpOworICAg
ICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3Ioc2xvdC5nZXRWYWx1ZShleGVjLCBwcm9wZXJ0
eU5hbWUpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBRdFJ1bnRpbWVNZXRob2Q6OmdldE93blByb3Bl
cnR5RGVzY3JpcHRvcih0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIGRlc2NyaXB0b3Ip
OworfQorCit2b2lkIFF0UnVudGltZUNvbm5lY3Rpb25NZXRob2Q6OmdldE93blByb3BlcnR5TmFt
ZXMoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWVBcnJheSYg
cHJvcGVydHlOYW1lcywgRW51bWVyYXRpb25Nb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0g
SW5jbHVkZURvbnRFbnVtUHJvcGVydGllcykKKyAgICAgICAgcHJvcGVydHlOYW1lcy5hZGQoZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisKKyAgICBRdFJ1bnRpbWVNZXRob2Q6OmdldE93
blByb3BlcnR5TmFtZXMob2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWVzLCBtb2RlKTsKK30KKwor
SlNWYWx1ZSBRdFJ1bnRpbWVDb25uZWN0aW9uTWV0aG9kOjpsZW5ndGhHZXR0ZXIoRXhlY1N0YXRl
KiwgSlNWYWx1ZSwgY29uc3QgSWRlbnRpZmllciYpCit7CisgICAgLy8gd2UgaGF2ZSBvbmUgZm9y
bWFsIGFyZ3VtZW50LCBhbmQgb25lIG9wdGlvbmFsCisgICAgcmV0dXJuIGpzTnVtYmVyKDEpOwor
fQorCisvLyA9PT09PT09PT09PT09PT0KKworUXRDb25uZWN0aW9uT2JqZWN0OjpRdENvbm5lY3Rp
b25PYmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIFBhc3NSZWZQdHI8UXRJbnN0YW5jZT4gc2Vu
ZGVySW5zdGFuY2UsIGludCBzaWduYWxJbmRleCwgSlNPYmplY3RSZWYgcmVjZWl2ZXIsIEpTT2Jq
ZWN0UmVmIHJlY2VpdmVyRnVuY3Rpb24pCisgICAgOiBRT2JqZWN0KHNlbmRlckluc3RhbmNlLT5n
ZXRPYmplY3QoKSkKKyAgICAsIG1fY29udGV4dChjb250ZXh0KQorICAgICwgbV9zZW5kZXJJbnN0
YW5jZShzZW5kZXJJbnN0YW5jZSkKKyAgICAsIG1fb3JpZ2luYWxTZW5kZXIobV9zZW5kZXJJbnN0
YW5jZS0+Z2V0T2JqZWN0KCkpCisgICAgLCBtX3NpZ25hbEluZGV4KHNpZ25hbEluZGV4KQorICAg
ICwgbV9yZWNlaXZlcihyZWNlaXZlcikKKyAgICAsIG1fcmVjZWl2ZXJGdW5jdGlvbihyZWNlaXZl
ckZ1bmN0aW9uKQoreworICAgIEpTVmFsdWVQcm90ZWN0KG1fY29udGV4dCwgbV9yZWNlaXZlcik7
CisgICAgSlNWYWx1ZVByb3RlY3QobV9jb250ZXh0LCBtX3JlY2VpdmVyRnVuY3Rpb24pOworfQor
CitRdENvbm5lY3Rpb25PYmplY3Q6On5RdENvbm5lY3Rpb25PYmplY3QoKQoreworICAgIC8vIFdl
IGNhbiBzYWZlbHkgdXNlIG1fb3JpZ2luYWxTZW5kZXIgYmVjYXVzZSBjb25uZWN0aW9uIG9iamVj
dCB3aWxsIG5ldmVyIG91dGxpdmUgdGhlIHNlbmRlciwKKyAgICAvLyB3aGljaCBpcyBpdHMgUU9i
amVjdCBwYXJlbnQuCisgICAgUXRSdW50aW1lQ29ubmVjdGlvbk1ldGhvZDo6Y29ubmVjdGlvbnMu
cmVtb3ZlKG1fb3JpZ2luYWxTZW5kZXIsIHRoaXMpOworCisgICAgSlNWYWx1ZVVucHJvdGVjdCht
X2NvbnRleHQsIG1fcmVjZWl2ZXIpOworICAgIEpTVmFsdWVVbnByb3RlY3QobV9jb250ZXh0LCBt
X3JlY2VpdmVyRnVuY3Rpb24pOworfQorCitzdGF0aWMgY29uc3QgdWludCBxdF9tZXRhX2RhdGFf
UXRDb25uZWN0aW9uT2JqZWN0W10gPSB7CisKKyAvLyBjb250ZW50OgorICAgICAgIDEsICAgICAg
IC8vIHJldmlzaW9uCisgICAgICAgMCwgICAgICAgLy8gY2xhc3NuYW1lCisgICAgICAgMCwgICAg
MCwgLy8gY2xhc3NpbmZvCisgICAgICAgMSwgICAxMCwgLy8gbWV0aG9kcworICAgICAgIDAsICAg
IDAsIC8vIHByb3BlcnRpZXMKKyAgICAgICAwLCAgICAwLCAvLyBlbnVtcy9zZXRzCisKKyAvLyBz
bG90czogc2lnbmF0dXJlLCBwYXJhbWV0ZXJzLCB0eXBlLCB0YWcsIGZsYWdzCisgICAgICAyOCwg
ICAyNywgICAyNywgICAyNywgMHgwYSwKKworICAgICAgIDAgICAgICAgIC8vIGVvZAorfTsKKwor
c3RhdGljIGNvbnN0IGNoYXIgcXRfbWV0YV9zdHJpbmdkYXRhX1F0Q29ubmVjdGlvbk9iamVjdFtd
ID0geworICAgICJKU0M6OkJpbmRpbmdzOjpRdENvbm5lY3Rpb25PYmplY3RcMFwwZXhlY3V0ZSgp
XDAiCit9OworCitjb25zdCBRTWV0YU9iamVjdCBRdENvbm5lY3Rpb25PYmplY3Q6OnN0YXRpY01l
dGFPYmplY3QgPSB7CisgICAgeyAmUU9iamVjdDo6c3RhdGljTWV0YU9iamVjdCwgcXRfbWV0YV9z
dHJpbmdkYXRhX1F0Q29ubmVjdGlvbk9iamVjdCwKKyAgICAgIHF0X21ldGFfZGF0YV9RdENvbm5l
Y3Rpb25PYmplY3QsIDAgfQorfTsKKworY29uc3QgUU1ldGFPYmplY3QgKlF0Q29ubmVjdGlvbk9i
amVjdDo6bWV0YU9iamVjdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICZzdGF0aWNNZXRhT2JqZWN0
OworfQorCit2b2lkICpRdENvbm5lY3Rpb25PYmplY3Q6OnF0X21ldGFjYXN0KGNvbnN0IGNoYXIg
Kl9jbG5hbWUpCit7CisgICAgaWYgKCFfY2xuYW1lKSByZXR1cm4gMDsKKyAgICBpZiAoIXN0cmNt
cChfY2xuYW1lLCBxdF9tZXRhX3N0cmluZ2RhdGFfUXRDb25uZWN0aW9uT2JqZWN0KSkKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHZvaWQqPihjb25zdF9jYXN0PFF0Q29ubmVjdGlvbk9iamVj
dCo+KHRoaXMpKTsKKyAgICByZXR1cm4gUU9iamVjdDo6cXRfbWV0YWNhc3QoX2NsbmFtZSk7Cit9
CisKKy8vIFRoaXMgaXMgd2hhdCBtb2Mgd291bGQgZ2VuZXJhdGUgZXhjZXB0IGJ5IHRoZSBmYWN0
IHRoYXQgd2UgcGFzcyBhbGwgYXJndW1lbnRzIHRvIG91ciBleGVjdXRlKCkgc2xvdC4KK2ludCBR
dENvbm5lY3Rpb25PYmplY3Q6OnF0X21ldGFjYWxsKFFNZXRhT2JqZWN0OjpDYWxsIF9jLCBpbnQg
X2lkLCB2b2lkICoqX2EpCit7CisgICAgX2lkID0gUU9iamVjdDo6cXRfbWV0YWNhbGwoX2MsIF9p
ZCwgX2EpOworICAgIGlmIChfaWQgPCAwKQorICAgICAgICByZXR1cm4gX2lkOworICAgIGlmIChf
YyA9PSBRTWV0YU9iamVjdDo6SW52b2tlTWV0YU1ldGhvZCkgeworICAgICAgICBzd2l0Y2ggKF9p
ZCkgeworICAgICAgICBjYXNlIDA6IGV4ZWN1dGUoX2EpOyBicmVhazsKKyAgICAgICAgfQorICAg
ICAgICBfaWQgLT0gMTsKKyAgICB9CisgICAgcmV0dXJuIF9pZDsKK30KKworc3RhdGljIGJvb2wg
aXNKYXZhU2NyaXB0RnVuY3Rpb24oSlNPYmplY3RSZWYgb2JqZWN0KQoreworICAgIENhbGxEYXRh
IGNhbGxEYXRhOworICAgIEpTT2JqZWN0KiBqc09iamVjdCA9IHRvSlMob2JqZWN0KTsKKyAgICBy
ZXR1cm4ganNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldENhbGxEYXRhKGpzT2JqZWN0LCBjYWxs
RGF0YSkgPT0gQ2FsbFR5cGVKUzsKK30KKwordm9pZCBRdENvbm5lY3Rpb25PYmplY3Q6OmV4ZWN1
dGUodm9pZCoqIGFyZ3YpCit7CisgICAgUU9iamVjdCogc2VuZGVyID0gbV9zZW5kZXJJbnN0YW5j
ZS0+Z2V0T2JqZWN0KCk7CisgICAgaWYgKCFzZW5kZXIpIHsKKyAgICAgICAgcVdhcm5pbmcoKSA8
PCAic2VuZGVyIGRlbGV0ZWQsIGNhbm5vdCBkZWxpdmVyIHNpZ25hbCI7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBBU1NFUlQoc2VuZGVyID09IG1fb3JpZ2luYWxTZW5kZXIpOworCisg
ICAgY29uc3QgUU1ldGFPYmplY3QqIG1ldGEgPSBzZW5kZXItPm1ldGFPYmplY3QoKTsKKyAgICBj
b25zdCBRTWV0YU1ldGhvZCBtZXRob2QgPSBtZXRhLT5tZXRob2QobV9zaWduYWxJbmRleCk7CisK
KyAgICBRTGlzdDxRQnl0ZUFycmF5PiBwYXJhbWV0ZXJUeXBlcyA9IG1ldGhvZC5wYXJhbWV0ZXJU
eXBlcygpOworCisgICAgSlNWYWx1ZVJlZiogaWdub3JlZEV4Y2VwdGlvbiA9IDA7CisgICAgSlNS
ZXRhaW5QdHI8SlNTdHJpbmdSZWY+IGxlbmd0aFByb3BlcnR5KEpTU3RyaW5nQ3JlYXRlV2l0aFVU
RjhDU3RyaW5nKCJsZW5ndGgiKSk7CisgICAgaW50IHJlY2VpdmVyTGVuZ3RoID0gaW50KEpTVmFs
dWVUb051bWJlcihtX2NvbnRleHQsIEpTT2JqZWN0R2V0UHJvcGVydHkobV9jb250ZXh0LCBtX3Jl
Y2VpdmVyRnVuY3Rpb24sIGxlbmd0aFByb3BlcnR5LmdldCgpLCBpZ25vcmVkRXhjZXB0aW9uKSwg
aWdub3JlZEV4Y2VwdGlvbikpOworICAgIGludCBhcmdjID0gcU1heChwYXJhbWV0ZXJUeXBlcy5j
b3VudCgpLCByZWNlaXZlckxlbmd0aCk7CisgICAgV1RGOjpWZWN0b3I8SlNWYWx1ZVJlZj4gYXJn
cyhhcmdjKTsKKworICAgIC8vIFRPRE86IHJlbW92ZSBvbmNlIGNvbnZlcnNpb24gZnVuY3Rpb25z
IHVzZSBKU0MgQVBJLgorICAgIEV4ZWNTdGF0ZSogZXhlYyA9IDo6dG9KUyhtX2NvbnRleHQpOwor
ICAgIFJlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0ID0gbV9zZW5kZXJJbnN0YW5jZS0+cm9v
dE9iamVjdCgpOworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKKyAgICAg
ICAgaW50IGFyZ1R5cGUgPSBRTWV0YVR5cGU6OnR5cGUocGFyYW1ldGVyVHlwZXMuYXQoaSkpOwor
ICAgICAgICBhcmdzW2ldID0gOjp0b1JlZihleGVjLCBjb252ZXJ0UVZhcmlhbnRUb1ZhbHVlKGV4
ZWMsIHJvb3RPYmplY3QsIFFWYXJpYW50KGFyZ1R5cGUsIGFyZ3ZbaSsxXSkpKTsKKyAgICB9CisK
KyAgICBjb25zdCBib29sIHVwZGF0ZVF0U2VuZGVyID0gaXNKYXZhU2NyaXB0RnVuY3Rpb24obV9y
ZWNlaXZlckZ1bmN0aW9uKTsKKyAgICBpZiAodXBkYXRlUXRTZW5kZXIpCisgICAgICAgIFF0SW5z
dGFuY2U6OnF0U2VuZGVyU3RhY2soKS0+cHVzaChRT2JqZWN0OjpzZW5kZXIoKSk7CisKKyAgICBK
U09iamVjdENhbGxBc0Z1bmN0aW9uKG1fY29udGV4dCwgbV9yZWNlaXZlckZ1bmN0aW9uLCBtX3Jl
Y2VpdmVyLCBhcmdjLCBhcmdzLmRhdGEoKSwgMCk7CisKKyAgICBpZiAodXBkYXRlUXRTZW5kZXIp
CisgICAgICAgIFF0SW5zdGFuY2U6OnF0U2VuZGVyU3RhY2soKS0+cG9wKCk7Cit9CisKK2Jvb2wg
UXRDb25uZWN0aW9uT2JqZWN0OjptYXRjaChKU0NvbnRleHRSZWYgY29udGV4dCwgUU9iamVjdCog
c2VuZGVyLCBpbnQgc2lnbmFsSW5kZXgsIEpTT2JqZWN0UmVmIHJlY2VpdmVyLCBKU09iamVjdFJl
ZiByZWNlaXZlckZ1bmN0aW9uKQoreworICAgIGlmIChzZW5kZXIgIT0gbV9vcmlnaW5hbFNlbmRl
ciB8fCBzaWduYWxJbmRleCAhPSBtX3NpZ25hbEluZGV4KQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgSlNWYWx1ZVJlZiogaWdub3JlZEV4Y2VwdGlvbiA9IDA7CisgICAgY29uc3QgYm9vbCBy
ZWNlaXZlck1hdGNoID0gKCFyZWNlaXZlciAmJiAhbV9yZWNlaXZlcikgfHwgSlNWYWx1ZUlzRXF1
YWwoY29udGV4dCwgcmVjZWl2ZXIsIG1fcmVjZWl2ZXIsIGlnbm9yZWRFeGNlcHRpb24pOworICAg
IHJldHVybiByZWNlaXZlck1hdGNoICYmIEpTVmFsdWVJc0VxdWFsKGNvbnRleHQsIHJlY2VpdmVy
RnVuY3Rpb24sIG1fcmVjZWl2ZXJGdW5jdGlvbiwgaWdub3JlZEV4Y2VwdGlvbik7Cit9CisKK1F0
Q29ubmVjdGlvbk9iamVjdCogUXRDb25uZWN0aW9uT2JqZWN0OjpjcmVhdGVXaXRoSW50ZXJuYWxK
U0MoRXhlY1N0YXRlKiBleGVjLCBQYXNzUmVmUHRyPFF0SW5zdGFuY2U+IHNlbmRlckluc3RhbmNl
LCBpbnQgc2lnbmFsSW5kZXgsIEpTT2JqZWN0KiByZWNlaXZlciwgSlNPYmplY3QqIHJlY2VpdmVy
RnVuY3Rpb24pCit7CisgICAgcmV0dXJuIG5ldyBRdENvbm5lY3Rpb25PYmplY3QoOjp0b1JlZihl
eGVjKSwgc2VuZGVySW5zdGFuY2UsIHNpZ25hbEluZGV4LCA6OnRvUmVmKHJlY2VpdmVyKSwgOjp0
b1JlZihyZWNlaXZlckZ1bmN0aW9uKSk7Cit9CisKKy8vID09PT09PT09PT09PT09PQorCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gUXRBcnJheTxUPjo6UXRBcnJheShRTGlzdDxUPiBsaXN0LCBRTWV0
YVR5cGU6OlR5cGUgdHlwZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0PiByb290T2JqZWN0KQorICAg
IDogQXJyYXkocm9vdE9iamVjdCkKKyAgICAsIG1fbGlzdChsaXN0KQorICAgICwgbV90eXBlKHR5
cGUpCit7CisgICAgbV9sZW5ndGggPSBtX2xpc3QuY291bnQoKTsKK30KKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+IFF0QXJyYXk8VD46On5RdEFycmF5ICgpCit7Cit9CisKK3RlbXBsYXRlIDx0eXBl
bmFtZSBUPiBSb290T2JqZWN0KiBRdEFycmF5PFQ+Ojpyb290T2JqZWN0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV9yb290T2JqZWN0ICYmIG1fcm9vdE9iamVjdC0+aXNWYWxpZCgpID8gbV9yb290
T2JqZWN0LmdldCgpIDogMDsKK30KKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHZvaWQgUXRBcnJh
eTxUPjo6c2V0VmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4LCBKU1ZhbHVl
IGFWYWx1ZSkgY29uc3QKK3sKKyAgICAvLyBRdFNjcmlwdCBzZXRzIHRoZSB2YWx1ZSwgYnV0IGRv
ZXNuJ3QgZm9yd2FyZCBpdCB0byB0aGUgb3JpZ2luYWwgc291cmNlCisgICAgLy8gKGUuZy4gaWYg
eW91IGRvICdvYmplY3QuaW50TGlzdFs1XSA9IDYnLCB0aGUgb2JqZWN0IGlzIG5vdCB1cGRhdGVk
LCBidXQgdGhlCisgICAgLy8gY29weSBvZiB0aGUgbGlzdCBpcykuCisgICAgaW50IGRpc3QgPSAt
MTsKKyAgICBRVmFyaWFudCB2YWwgPSBjb252ZXJ0VmFsdWVUb1FWYXJpYW50KGV4ZWMsIGFWYWx1
ZSwgbV90eXBlLCAmZGlzdCk7CisKKyAgICBpZiAoZGlzdCA+PSAwKSB7CisgICAgICAgIG1fbGlz
dFtpbmRleF0gPSB2YWwudmFsdWU8VD4oKTsKKyAgICB9Cit9CisKKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IEpTVmFsdWUgUXRBcnJheTxUPjo6dmFsdWVBdChFeGVjU3RhdGUgKmV4ZWMsIHVuc2ln
bmVkIGludCBpbmRleCkgY29uc3QKK3sKKyAgICBpZiAoaW5kZXggPCBtX2xlbmd0aCkgeworICAg
ICAgICBUIHZhbCA9IG1fbGlzdC5hdChpbmRleCk7CisgICAgICAgIHJldHVybiBjb252ZXJ0UVZh
cmlhbnRUb1ZhbHVlKGV4ZWMsIHJvb3RPYmplY3QoKSwgUVZhcmlhbnQ6OmZyb21WYWx1ZSh2YWwp
KTsKKyAgICB9CisKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworLy8gPT09PT09PT09
PT09PT09CisKK30gfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdDIvQ2hhbmdlTG9nCmluZGV4IDM4YmU4MWYuLjQwMDhiZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyMyBAQAorMjAxMi0wNS0wNCAgS2VudCBIYW5zZW4gPGtlbnQuaGFuc2VuQG5v
a2lhLmNvbT4KKworICAgICAgICBbUXRdIFVwZGF0ZSBRdCBicmlkZ2UgYWZ0ZXIgY2hhbmdlcyB0
byBRTWV0YU1ldGhvZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9ODU0NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBRTWV0YU1ldGhvZDo6c2lnbmF0dXJlKCkgaGFzIGJlZW4gcmVuYW1lZCB0byBtZXRob2RT
aWduYXR1cmUoKSBhbmQKKyAgICAgICAgcmV0dXJucyBhIFFCeXRlQXJyYXkuCisKKyAgICAgICAg
VGhlIG5ldyBmdW5jdGlvbiBRTWV0YU1ldGhvZDo6bmFtZSgpIGdpdmVzIGRpcmVjdCBhY2Nlc3Mg
dG8gYQorICAgICAgICBtZXRob2QncyBuYW1lLiByZXR1cm5UeXBlKCksIHBhcmFtZXRlckNvdW50
KCksIGFuZCBwYXJhbWV0ZXJUeXBlKCkKKyAgICAgICAgZ2l2ZSBkaXJlY3QgYWNjZXNzIHRvIHR5
cGUgaW5mb3JtYXRpb24uCisKKyAgICAgICAgUG9ydGVkIHRoZSBjdXN0b20gUXRDb25uZWN0aW9u
T2JqZWN0IG1ldGEtb2JqZWN0IHRvIHJldmlzaW9uIDc7CisgICAgICAgIHJldmlzaW9uIDYgYW5k
IGJlbG93IGFyZW4ndCBzdXBwb3J0ZWQgKGFuZCBkb24ndCBjb21waWxlKSB3aXRoIFF0NS4KKwor
ICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcHVibGljYXBpL3RzdF9wdWJsaWNhcGku
Y3BwOgorICAgICAgICAoZ2F0aGVyQVBJKToKKwogMjAxMi0wNS0wNCAgVG9yIEFybmUgVmVzdGLD
uCAgPHRvci5hcm5lLnZlc3Rib0Bub2tpYS5jb20+CiAKICAgICAgICAgW1F0XSBEb24ndCBwYXNz
IHZpZXdwb3J0LWNyZWF0ZSBmdW5jdGlvbiB0byBxdWlja190ZXN0X21haW4uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL3F0L3Rlc3RzL3B1YmxpY2FwaS90c3RfcHVi
bGljYXBpLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcHVibGlj
YXBpL3RzdF9wdWJsaWNhcGkuY3BwCmluZGV4IGY1Zjk3NjYuLjM5ZTZiNTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcHVibGljYXBpL3RzdF9wdWJs
aWNhcGkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvcXQvdGVzdHMvcHVi
bGljYXBpL3RzdF9wdWJsaWNhcGkuY3BwCkBAIC0xNDEsNyArMTQxLDExIEBAIHN0YXRpYyB2b2lk
IGdhdGhlckFQSShjb25zdCBRU3RyaW5nJiBwcmVmaXgsIGNvbnN0IFFNZXRhTWV0aG9kJiBtZXRo
b2QsIFFTdHJpbmdMCiB7CiAgICAgaWYgKG1ldGhvZC5hY2Nlc3MoKSAhPSBRTWV0YU1ldGhvZDo6
UHJpdmF0ZSkgewogICAgICAgICBjb25zdCBjaGFyKiBtZXRob2RUeXBlTmFtZSA9ICEhc3RybGVu
KG1ldGhvZC50eXBlTmFtZSgpKSA/IG1ldGhvZC50eXBlTmFtZSgpIDogInZvaWQiOworI2lmIFFU
X1ZFUlNJT04gPj0gUVRfVkVSU0lPTl9DSEVDSyg1LCAwLCAwKQorICAgICAgICAqb3V0cHV0IDw8
IFFTdHJpbmc6OmZyb21MYXRpbjEoIiUxJTIgLS0+ICUzIikuYXJnKHByZWZpeCkuYXJnKFFTdHJp
bmc6OmZyb21MYXRpbjEobWV0aG9kLm1ldGhvZFNpZ25hdHVyZSgpKSkuYXJnKFFTdHJpbmc6OmZy
b21MYXRpbjEobWV0aG9kVHlwZU5hbWUpKTsKKyNlbHNlCiAgICAgICAgICpvdXRwdXQgPDwgUVN0
cmluZzo6ZnJvbUxhdGluMSgiJTElMiAtLT4gJTMiKS5hcmcocHJlZml4KS5hcmcobWV0aG9kLnNp
Z25hdHVyZSgpKS5hcmcobWV0aG9kVHlwZU5hbWUpOworI2VuZGlmCiAKICAgICAgICAgY2hlY2tL
bm93blR5cGUobWV0aG9kVHlwZU5hbWUpOwogICAgICAgICBmb3JlYWNoIChRQnl0ZUFycmF5IHBh
cmFtVHlwZSwgbWV0aG9kLnBhcmFtZXRlclR5cGVzKCkpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>