<?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>27108</bug_id>
          
          <creation_ts>2009-07-09 00:31:54 -0700</creation_ts>
          <short_desc>[Qt] Crash with fast/loader/frame-creation-removal.html</short_desc>
          <delta_ts>2009-07-10 08:31:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>26886</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Hausmann">hausmann</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>130625</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-07-09 00:31:54 -0700</bug_when>
    <thetext>r35088 introduced a new pattern where WebKit has to check the frame&apos;s page() after calling init(). The Qt port doesn&apos;t do that currently and therefore crashes in the above (skipped) test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130628</commentid>
    <comment_count>1</comment_count>
      <attachid>32505</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-07-09 00:53:09 -0700</bug_when>
    <thetext>Created attachment 32505
2009-07-08  Adam Barth  &lt;abarth@webkit.org&gt;


        Rubber stamped by Eric Seidel.

        [V8] Move DOM wrapper functions in V8Proxy to V8DOMWrapper
        https://bugs.webkit.org/show_bug.cgi?id=27107

        This patch is just renaming.  Code motion will occur next.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::createScriptObject):
        (WebCore::ScriptController::createScriptObjectForPluginElement):
        * bindings/v8/ScriptObject.cpp:
        (WebCore::ScriptGlobalObject::set):
        * bindings/v8/ScriptObjectQuarantine.cpp:
        (WebCore::getQuarantinedScriptObject):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::handleEvent):
        (WebCore::V8AbstractEventListener::getReceiverObject):
        * bindings/v8/V8Collection.cpp:
        (WebCore::toOptionsCollectionSetter):
        * bindings/v8/V8Collection.h:
        (WebCore::getV8Object):
        (WebCore::getNamedPropertyOfCollection):
        (WebCore::nodeCollectionNamedPropertyGetter):
        (WebCore::getIndexedPropertyOfCollection):
        (WebCore::nodeCollectionIndexedPropertyGetter):
        (WebCore::nodeCollectionIndexedPropertyEnumerator):
        (WebCore::collectionIndexedPropertyEnumerator):
        (WebCore::collectionStringOrNullIndexedPropertyGetter):
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::DOMData::handleWeakObject):
        (WebCore::DOMData::removeObjectsFromWrapperMap):
        * bindings/v8/V8GCController.cpp:
        (WebCore::enumerateDOMObjectMap):
        (WebCore::DOMObjectVisitor::visitDOMWrapper):
        (WebCore::GCPrologueVisitor::visitDOMWrapper):
        (WebCore::GCEpilogueVisitor::visitDOMWrapper):
        * bindings/v8/V8Helpers.cpp:
        (WebCore::wrapNPObject):
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8DOMWrapper::convertSVGElementInstanceToV8Object):
        (WebCore::V8DOMWrapper::convertSVGObjectWithContextToV8Object):
        (WebCore::V8DOMWrapper::domObjectHasJSWrapper):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForActiveDOMObject):
        (WebCore::V8DOMWrapper::setJSWrapperForDOMNode):
        (WebCore::V8Proxy::evaluateInNewContext):
        (WebCore::V8Proxy::getConstructor):
        (WebCore::V8DOMWrapper::getTemplate):
        (WebCore::V8Proxy::retrieveWindow):
        (WebCore::V8Proxy::updateDocumentWrapperCache):
        (WebCore::V8Proxy::clearForNavigation):
        (WebCore::V8Proxy::installDOMWindow):
        (WebCore::setDOMExceptionHelper):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::setHiddenWindowReference):
        (WebCore::V8DOMWrapper::domWrapperType):
        (WebCore::V8DOMWrapper::convertToNativeObjectImpl):
        (WebCore::V8DOMWrapper::convertToSVGPODTypeImpl):
        (WebCore::V8DOMWrapper::lookupDOMWrapper):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNodeHelper):
        (WebCore::V8DOMWrapper::wrapNativeNodeFilter):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8DOMWrapper::setDOMWrapper):
        (WebCore::V8DOMWrapper::maybeDOMWrapper):
        (WebCore::V8DOMWrapper::isDOMEventWrapper):
        (WebCore::V8DOMWrapper::isWrapperOfType):
        (WebCore::V8DOMWrapper::htmlElementType):
        (WebCore::V8DOMWrapper::svgElementType):
        (WebCore::V8DOMWrapper::convertEventToV8Object):
        (WebCore::V8DOMWrapper::convertNodeToV8Object):
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        (WebCore::V8DOMWrapper::convertEventListenerToV8Object):
        (WebCore::V8DOMWrapper::convertDOMImplementationToV8Object):
        (WebCore::V8DOMWrapper::convertStyleSheetToV8Object):
        (WebCore::V8DOMWrapper::convertCSSValueToV8Object):
        (WebCore::V8DOMWrapper::convertCSSRuleToV8Object):
        (WebCore::V8DOMWrapper::convertWindowToV8Object):
        (WebCore::V8Proxy::bindJsObjectToWindow):
        * bindings/v8/V8Proxy.h:
        (WebCore::V8DOMWrapper::convertDOMWrapperToNative):
        (WebCore::V8DOMWrapper::wrapCPointer):
        (WebCore::V8DOMWrapper::extractCPointer):
        (WebCore::V8DOMWrapper::convertDOMWrapperToNode):
        (WebCore::V8DOMWrapper::convertToV8Object):
        (WebCore::V8DOMWrapper::convertToNativeObject):
        (WebCore::V8DOMWrapper::convertToNativeEvent):
        (WebCore::V8DOMWrapper::extractCPointerImpl):
        (WebCore::V8DOMWrapper::instantiateV8Object):
        (WebCore::V8Proxy::constructDOMObject):
        (WebCore::toV8):
        * bindings/v8/V8SVGPODTypeWrapper.h:
        (WebCore::V8SVGPODTypeUtil::toSVGPODType):
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::retrieve):
        (WebCore::WorkerContextExecutionProxy::initContextIfNeeded):
        (WebCore::WorkerContextExecutionProxy::GetConstructor):
        (WebCore::WorkerContextExecutionProxy::ToV8Object):
        (WebCore::WorkerContextExecutionProxy::EventToV8Object):
        (WebCore::WorkerContextExecutionProxy::toV8):
        * bindings/v8/custom/V8AttrCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8CSSStyleDeclarationCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toV8):
        (WebCore::toCanvasStyle):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8ClientRectListCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8CustomBinding.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::INDEXED_ACCESS_CHECK):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::V8Custom::GetTargetFrame):
        * bindings/v8/custom/V8CustomSQLStatementCallback.cpp:
        (WebCore::V8CustomSQLStatementCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8CustomSQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionCallback.cpp:
        (WebCore::V8CustomSQLTransactionCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLTransactionErrorCallback.cpp:
        (WebCore::V8CustomSQLTransactionErrorCallback::handleEvent):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8Custom::WindowSetTimeoutImpl):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::V8Custom::ClearTimeoutImpl):
        (WebCore::NAMED_ACCESS_CHECK):
        (WebCore::INDEXED_ACCESS_CHECK):
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8DocumentLocationCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8ElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        (WebCore::getItem):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLFrameSetElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLInputElementCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8HTMLOptionsCollectionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLPlugInElementCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_SETTER):
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLSelectElementCollectionCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        (WebCore::INDEXED_PROPERTY_SETTER):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::removeElement):
        * bindings/v8/custom/V8InspectorControllerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::ACCESSOR_SETTER):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::INDEXED_ACCESS_CHECK):
        (WebCore::NAMED_ACCESS_CHECK):
        * bindings/v8/custom/V8MessageChannelConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8MessagePortCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NamedNodeMapCustom.cpp:
        (WebCore::INDEXED_PROPERTY_GETTER):
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8NavigatorCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeIteratorCustom.cpp:
        (WebCore::toV8):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGElementInstanceCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8SVGMatrixCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::V8Custom::v8StorageNamedPropertyEnumerator):
        (WebCore::storageGetter):
        (WebCore::storageSetter):
        (WebCore::storageDeleter):
        * bindings/v8/custom/V8StyleSheetListCustom.cpp:
        (WebCore::NAMED_PROPERTY_GETTER):
        * bindings/v8/custom/V8TreeWalkerCustom.cpp:
        (WebCore::toV8):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WebKitCSSMatrixConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::SetTimeoutOrInterval):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8WorkerCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        * bindings/v8/custom/V8XMLHttpRequestConstructor.cpp:
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XMLHttpRequestUploadCustom.cpp:
        (WebCore::ACCESSOR_GETTER):
        (WebCore::ACCESSOR_SETTER):
        (WebCore::CALLBACK_FUNC_DECL):
        * bindings/v8/custom/V8XSLTProcessorCustom.cpp:
        (WebCore::CALLBACK_FUNC_DECL):



git-svn-id: http://svn.webkit.org/repository/webkit/trunk@45659 268f45cc-cd09-0410-ab3c-d52691b4dbfc
---
 72 files changed, 903 insertions(+), 613 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130629</commentid>
    <comment_count>2</comment_count>
      <attachid>32505</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-07-09 00:53:53 -0700</bug_when>
    <thetext>Comment on attachment 32505
2009-07-08  Adam Barth  &lt;abarth@webkit.org&gt;

Oops, bugzilla-tool caught the wrong commitish :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130630</commentid>
    <comment_count>3</comment_count>
      <attachid>32506</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-07-09 00:54:30 -0700</bug_when>
    <thetext>Created attachment 32506
[Qt] Frame initialization crash


2009-07-08  Simon Hausmann  &lt;hausmann@webkit.org&gt;

        Reviewed by NOBODY (OOPS!).

        https://bugs.webkit.org/show_bug.cgi?id=27108

        Fix crash when in frame tree of a new frame before the new frame
        has been installed in the frame tree, similar to r35088.

        After calling Frame::init() the frame it may have been removed from the
        frame tree again through JavaScript. Detect this by checking the page()
        afterwards.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

LayoutTests:

2009-07-08  Simon Hausmann  &lt;hausmann@webkit.org&gt;

        Reviewed by NOBODY (OOPS!).

        https://bugs.webkit.org/show_bug.cgi?id=27108

        Remove fast/loader/frame-creation-removal.html from the skip list, it
        passes now.

        * platform/qt/Skipped:
---
 4 files changed, 33 insertions(+), 1 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130869</commentid>
    <comment_count>4</comment_count>
      <attachid>32506</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-07-10 05:37:22 -0700</bug_when>
    <thetext>Comment on attachment 32506
[Qt] Frame initialization crash

Clearing review, there may be a double-deletion in this patch as frameLoaderClientDestroyed() should _also_ delete the QWebFrame</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>130883</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-07-10 08:31:04 -0700</bug_when>
    <thetext>Fixed patch landed in r45708 after discussion and review on IRC.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32505</attachid>
            <date>2009-07-09 00:53:09 -0700</date>
            <delta_ts>2009-07-09 00:53:53 -0700</delta_ts>
            <desc>2009-07-08  Adam Barth  &lt;abarth@webkit.org&gt;</desc>
            <filename>bug-27108-20090709095257.patch</filename>
            <type>text/plain</type>
            <size>238463</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YTFmMTBmOC4uYTZhMmUyMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyODMgQEAKKzIwMDktMDctMDggIEFkYW0gQmFydGgg
IDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSdWJiZXIgc3RhbXBlZCBieSBFcmljIFNl
aWRlbC4KKworICAgICAgICBbVjhdIE1vdmUgRE9NIHdyYXBwZXIgZnVuY3Rpb25zIGluIFY4UHJv
eHkgdG8gVjhET01XcmFwcGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yNzEwNworCisgICAgICAgIFRoaXMgcGF0Y2ggaXMganVzdCByZW5hbWluZy4g
IENvZGUgbW90aW9uIHdpbGwgb2NjdXIgbmV4dC4KKworICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvclY4LnBtOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1NjcmlwdENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2NyaXB0Q29udHJvbGxlcjo6cHJvY2Vzc2lu
Z1VzZXJHZXN0dXJlKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNjcmlwdE9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpjcmVhdGVTY3JpcHRPYmplY3RGb3JQ
bHVnaW5FbGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRPYmplY3QuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQpOgorICAgICAgICAqIGJp
bmRpbmdzL3Y4L1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4QWJz
dHJhY3RFdmVudExpc3RlbmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4QWJzdHJhY3RFdmVu
dExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpWOEFic3RyYWN0RXZl
bnRMaXN0ZW5lcjo6Z2V0UmVjZWl2ZXJPYmplY3QpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4
Q29sbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b09wdGlvbnNDb2xsZWN0aW9uU2V0
dGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaDoKKyAgICAgICAgKFdl
YkNvcmU6OmdldFY4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OmdldE5hbWVkUHJvcGVydHlP
ZkNvbGxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6bm9kZUNvbGxlY3Rpb25OYW1lZFByb3Bl
cnR5R2V0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEluZGV4ZWRQcm9wZXJ0eU9mQ29sbGVj
dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpub2RlQ29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUdl
dHRlcik6CisgICAgICAgIChXZWJDb3JlOjpub2RlQ29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVu
dW1lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUVu
dW1lcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Y29sbGVjdGlvblN0cmluZ09yTnVsbEluZGV4
ZWRQcm9wZXJ0eUdldHRlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01NYXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6RE9NRGF0YTo6aGFuZGxlV2Vha09iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpET01EYXRhOjpyZW1vdmVPYmplY3RzRnJvbVdyYXBwZXJNYXApOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L1Y4R0NDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmVudW1l
cmF0ZURPTU9iamVjdE1hcCk6CisgICAgICAgIChXZWJDb3JlOjpET01PYmplY3RWaXNpdG9yOjp2
aXNpdERPTVdyYXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6R0NQcm9sb2d1ZVZpc2l0b3I6OnZp
c2l0RE9NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpHQ0VwaWxvZ3VlVmlzaXRvcjo6dmlz
aXRET01XcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOEhlbHBlcnMuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6d3JhcE5QT2JqZWN0KToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOE5v
ZGVGaWx0ZXJDb25kaXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhOb2RlRmlsdGVyQ29u
ZGl0aW9uOjphY2NlcHROb2RlKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9WOFByb3h5LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydFNWR0VsZW1lbnRJbnN0YW5j
ZVRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0U1ZH
T2JqZWN0V2l0aENvbnRleHRUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3Jh
cHBlcjo6ZG9tT2JqZWN0SGFzSlNXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3Jh
cHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9N
V3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2JqZWN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZSk6CisgICAgICAgIChXZWJD
b3JlOjpWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpW
OFByb3h5OjpnZXRDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6
OmdldFRlbXBsYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnJldHJpZXZlV2luZG93
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OnVwZGF0ZURvY3VtZW50V3JhcHBlckNhY2hl
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4UHJveHk6OmNsZWFyRm9yTmF2aWdhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpWOFByb3h5OjppbnN0YWxsRE9NV2luZG93KToKKyAgICAgICAgKFdlYkNv
cmU6OnNldERPTUV4Y2VwdGlvbkhlbHBlcik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6
c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBl
cjo6ZG9tV3JhcHBlclR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3RJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6
Y29udmVydFRvU1ZHUE9EVHlwZUltcGwpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVy
Ojpsb29rdXBET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29u
dmVydERPTVdyYXBwZXJUb05vZGVIZWxwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFw
cGVyOjp3cmFwTmF0aXZlTm9kZUZpbHRlcik6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBw
ZXI6Omluc3RhbnRpYXRlVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVy
OjpzZXRET01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6bWF5YmVE
T01XcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6aXNET01FdmVudFdy
YXBwZXIpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjppc1dyYXBwZXJPZlR5cGUp
OgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpodG1sRWxlbWVudFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpzdmdFbGVtZW50VHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRvVjhPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2Jq
ZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydERPTUltcGxlbWVu
dGF0aW9uVG9WOE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZl
cnRTdHlsZVNoZWV0VG9WOE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOERPTVdyYXBwZXI6
OmNvbnZlcnRDU1NWYWx1ZVRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFw
cGVyOjpjb252ZXJ0Q1NTUnVsZVRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6VjhET01X
cmFwcGVyOjpjb252ZXJ0V2luZG93VG9WOE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjpWOFBy
b3h5OjpiaW5kSnNPYmplY3RUb1dpbmRvdyk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhQcm94
eS5oOgorICAgICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6d3JhcENQb2ludGVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6ZXh0cmFjdENQb2ludGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGUpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdCk6CisgICAgICAg
IChXZWJDb3JlOjpWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZUV2ZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OlY4RE9NV3JhcHBlcjo6ZXh0cmFjdENQb2ludGVySW1wbCk6CisgICAgICAgIChX
ZWJDb3JlOjpWOERPTVdyYXBwZXI6Omluc3RhbnRpYXRlVjhPYmplY3QpOgorICAgICAgICAoV2Vi
Q29yZTo6VjhQcm94eTo6Y29uc3RydWN0RE9NT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRv
VjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4U1ZHUE9EVHlwZVdyYXBwZXIuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlY4U1ZHUE9EVHlwZVV0aWw6OnRvU1ZHUE9EVHlwZSk6CisgICAgICAgICog
YmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmlldmUpOgorICAgICAgICAo
V2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5Ojppbml0Q29udGV4dElmTmVlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6R2V0Q29u
c3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5
OjpUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eTo6RXZlbnRUb1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OldvcmtlckNvbnRleHRF
eGVjdXRpb25Qcm94eTo6dG9WOCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXR0
ckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9TRVRURVIpOgorICAgICAg
ICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TkFNRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKFdlYkNv
cmU6Ok5BTUVEX1BST1BFUlRZX1NFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVE
X1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX1BST1BFUlRZX1NF
VFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9DYW52YXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIp
OgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6
OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xp
ZW50UmVjdExpc3RDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJU
WV9HRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaXBib2FyZEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21CaW5kaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6
CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgIChXZWJD
b3JlOjpOQU1FRF9BQ0NFU1NfQ0hFQ0spOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b206Okdl
dFRhcmdldEZyYW1lKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxT
dGF0ZW1lbnRDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbVNRTFN0YXRl
bWVudENhbGxiYWNrOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpWOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjazo6aGFu
ZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5z
YWN0aW9uRXJyb3JDYWxsYmFjay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEN1c3RvbVNRTFRy
YW5zYWN0aW9uRXJyb3JDYWxsYmFjazo6aGFuZGxlRXZlbnQpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOERPTVdpbmRvd0N1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOEN1
c3RvbTo6V2luZG93U2V0VGltZW91dEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1Jf
U0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAg
IChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9Q
Uk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfUFJPUEVSVFlfR0VUVEVS
KToKKyAgICAgICAgKFdlYkNvcmU6OlY4Q3VzdG9tOjpDbGVhclRpbWVvdXRJbXBsKToKKyAgICAg
ICAgKFdlYkNvcmU6Ok5BTUVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgIChXZWJDb3JlOjpJTkRF
WEVEX0FDQ0VTU19DSEVDSyk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJh
c2VDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAg
ICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOERvY3VtZW50TG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QUND
RVNTT1JfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6CisgICAg
ICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1Jf
U0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6Cisg
ICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEF1ZGlvRWxlbWVudENvbnN0cnVjdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENhbnZhc0VsZW1lbnRDdXN0b20uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpnZXRO
YW1lZEl0ZW1zKToKKyAgICAgICAgKFdlYkNvcmU6OmdldEl0ZW0pOgorICAgICAgICAoV2ViQ29y
ZTo6TkFNRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZV
TkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50Q3Vz
dG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX1BST1BFUlRZX0dFVFRFUik6CisgICAg
ICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29yZTo6QUND
RVNTT1JfR0VUVEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRm9ybUVs
ZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9HRVRU
RVIpOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAgICAg
KFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTEZyYW1lRWxlbWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBQ0NF
U1NPUl9TRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZVNl
dEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfUFJPUEVSVFlfR0VU
VEVSKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSUZyYW1lRWxlbWVudEN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9TRVRURVIpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6QUNDRVNTT1JfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6
CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MT3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRF
Uik6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9TRVRURVIpOgorICAgICAgICAoV2ViQ29y
ZTo6SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9Q
Uk9QRVJUWV9TRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxQbHVn
SW5FbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX1BST1BFUlRZX0dF
VFRFUik6CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9TRVRURVIpOgorICAgICAg
ICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6
SU5ERVhFRF9QUk9QRVJUWV9TRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxTZWxlY3RFbGVtZW50Q29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpOQU1FRF9QUk9QRVJUWV9HRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9QUk9Q
RVJUWV9TRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxTZWxlY3RF
bGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6
CisgICAgICAgIChXZWJDb3JlOjpyZW1vdmVFbGVtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy92
OC9jdXN0b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
TG9jYXRpb25DdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToK
KyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpD
QUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAoV2ViQ29yZTo6SU5ERVhFRF9BQ0NFU1NfQ0hF
Q0spOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfQUNDRVNTX0NIRUNLKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNT
T1JfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6CisgICAgICAg
IChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJTkRFWEVE
X1BST1BFUlRZX0dFVFRFUik6CisgICAgICAgIChXZWJDb3JlOjpOQU1FRF9QUk9QRVJUWV9HRVRU
RVIpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRvckN1c3RvbS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tf
RlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0b3JD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgIChXZWJDb3JlOjpD
QUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVM
aXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5BTUVEX1BST1BFUlRZX0dFVFRFUik6
CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMUmVzdWx0U2V0Um93TGlzdEN1c3Rv
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNB
TExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTGVu
Z3RoQ3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6CisgICAg
ICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4
L2N1c3RvbS9WOFNWR01hdHJpeEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFD
S19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhDdXN0b206OnY4U3RvcmFnZU5hbWVkUHJvcGVy
dHlFbnVtZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3JhZ2VHZXR0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6c3RvcmFnZVNldHRlcik6CisgICAgICAgIChXZWJDb3JlOjpzdG9yYWdlRGVs
ZXRlcik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0
b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6TkFNRURfUFJPUEVSVFlfR0VUVEVSKToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJBQ0tfRlVOQ19ERUNMKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhXZWJLaXRDU1NNYXRyaXhDb25zdHJ1Y3Rv
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAq
IGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6QUNDRVNTT1JfR0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX1NF
VFRFUik6CisgICAgICAgIChXZWJDb3JlOjpTZXRUaW1lb3V0T3JJbnRlcnZhbCk6CisgICAgICAg
IChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1
c3RvbS9WOFdvcmtlckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5D
X0RFQ0wpOgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfR0VUVEVSKToKKyAgICAgICAgKFdl
YkNvcmU6OkFDQ0VTU09SX1NFVFRFUik6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4
WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFD
S19GVU5DX0RFQ0wpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1
ZXN0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFDQ0VTU09SX0dFVFRFUik6CisgICAg
ICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9TRVRURVIpOgorICAgICAgICAoV2ViQ29yZTo6Q0FMTEJB
Q0tfRlVOQ19ERUNMKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVx
dWVzdFVwbG9hZEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBQ0NFU1NPUl9HRVRURVIp
OgorICAgICAgICAoV2ViQ29yZTo6QUNDRVNTT1JfU0VUVEVSKToKKyAgICAgICAgKFdlYkNvcmU6
OkNBTExCQUNLX0ZVTkNfREVDTCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNM
VFByb2Nlc3NvckN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDQUxMQkFDS19GVU5DX0RF
Q0wpOgorCiAyMDA5LTA3LTA4ICBQaWVycmUgZCdIZXJiZW1vbnQgIDxwZGhlcmJlbW9udEBhcHBs
ZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbSBiL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggNzUxMGQ5Ny4uMzM4OWUzNCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQor
KysgYi9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtCkBAIC0zNDYs
MTIgKzM0NiwxMiBAQCBzdWIgSG9sZGVyVG9OYXRpdmUKIAogICAgIGlmIChJc05vZGVTdWJUeXBl
KCRkYXRhTm9kZSkpIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwot
ICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9k
ZTwkaW1wbENsYXNzTmFtZT4oaG9sZGVyKTsKKyAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTwkaW1wbENsYXNzTmFtZT4oaG9sZGVy
KTsKIEVORAogCiAgICAgfSBlbHNlIHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywg
PDxFTkQpOwotICAgICRpbXBsQ2xhc3NOYW1lKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8JGltcGxDbGFzc05hbWU+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGhvbGRl
cik7CisgICAgJGltcGxDbGFzc05hbWUqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PCRpbXBsQ2xhc3NOYW1lPihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCBob2xk
ZXIpOwogRU5ECiAKICAgfQpAQCAtMzgxLDcgKzM4MSw3IEBAIHN1YiBHZW5lcmF0ZURvbWFpblNh
ZmVGdW5jdGlvbkdldHRlcgogICAgIElOQ19TVEFUUyhcIkRPTS4kaW1wbENsYXNzTmFtZS4kZnVu
Y05hbWUuX2dldFwiKTsKICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+IHByaXZhdGVfdGVtcGxhdGUgPQogICAgICAgICB2ODo6UGVyc2lzdGVudDx2ODo6RnVu
Y3Rpb25UZW1wbGF0ZT46Ok5ldygkbmV3VGVtcGxhdGVTdHJpbmcpOwotICAgIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5k
ZXg6OiRjbGFzc0luZGV4LCBpbmZvLlRoaXMoKSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBob2xkZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4Ojok
Y2xhc3NJbmRleCwgaW5mby5UaGlzKCkpOwogICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKSB7CiAg
ICAgICAvLyBjYW4gb25seSByZWFjaCBoZXJlIGJ5ICdvYmplY3QuX19wcm90b19fLmZ1bmMnLCBh
bmQgaXQgc2hvdWxkIHBhc3NlZAogICAgICAgLy8gZG9tYWluIHNlY3VyaXR5IGNoZWNrIGFscmVh
ZHkKQEAgLTQyMSw3ICs0MjEsNyBAQCBFTkQKIAogICAgIGlmICgkY2xhc3NJbmRleCBlcSAiRE9N
V0lORE9XIikgewogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCA8PEVORCk7Ci0gICAg
RE9NV2luZG93KiB3aW5kb3cgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2lu
ZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5Ib2xkZXIoKSk7CisgICAgRE9NV2lu
ZG93KiB3aW5kb3cgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5k
b3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbmZvLkhvbGRlcigpKTsKICAgICBGcmFtZSog
ZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7CiAgICAgaWYgKGZyYW1lKSB7CiAgICAgICAvLyBHZXQg
dGhlIHByb3h5IGNvcnJlc3BvbmRpbmcgdG8gdGhlIERPTVdpbmRvdyBpZiBwb3NzaWJsZSB0bwpA
QCAtNTAwLDcgKzUwMCw3IEBAIEVORAogCiAgICAgaWYgKCRpc1BvZFR5cGUpIHsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgPDxFTkQpOwotICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8
JGltcGxDbGFzc05hbWU+KiBpbXBfd3JhcHBlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6
JGNsYXNzSW5kZXgsIGluZm8uSG9sZGVyKCkpOworICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGlt
cGxDbGFzc05hbWU+KiBpbXBfd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8JGltcGxDbGFzc05hbWU+ID4oVjhDbGFzc0luZGV4
OjokY2xhc3NJbmRleCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgJGltcGxDbGFzc05hbWUgaW1wX2lu
c3RhbmNlID0gKmltcF93cmFwcGVyOwogRU5ECiAgICAgICAgIGlmICgkZ2V0dGVyU3RyaW5nVXNl
c0ltcCkgewpAQCAtNTEyLDcgKzUxMiw3IEBAIEVORAogICAgIH0gZWxzaWYgKCRhdHRyRXh0LT57
InY4T25Qcm90byJ9IHx8ICRhdHRyRXh0LT57IlY4RGlzYWxsb3dTaGFkb3dpbmcifSkgewogICAg
ICAgICAjIHBlcmZvcm0gbG9va3VwIGZpcnN0CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVj
bHMsIDw8RU5EKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4UHJveHk6
Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgaW5mby5UaGlzKCkp
OworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhET01XcmFwcGVyOjpsb29r
dXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uVGhpcygpKTsKICAg
ICBpZiAoaG9sZGVyLklzRW1wdHkoKSkgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIEVORAogICAg
ICAgICBIb2xkZXJUb05hdGl2ZSgkZGF0YU5vZGUsICRpbXBsQ2xhc3NOYW1lLCAkY2xhc3NJbmRl
eCk7CkBAIC02MjQsNyArNjI0LDcgQEAgRU5ECiAKICAgICBpZiAoJGF0dHJJc1BvZFR5cGUpIHsK
ICAgICAgICAgbXkgJGNsYXNzSW5kZXggPSB1YygkYXR0clR5cGUpOwotICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChW
OENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCB3cmFwcGVyKTtcbiIpOworICAgICAgICBwdXNoKEBp
bXBsQ29udGVudERlY2xzLCAiICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIHdyYXBwZXIpO1xuIik7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICByZXR1cm4gIi5OYXRpdmVU
b0pTVmFsdWUoJGF0dHJpYnV0ZS0+c2lnbmF0dXJlLCAkcmVzdWx0KS4iO1xuIik7CiAgICAgfQpA
QCAtNjc0LDE0ICs2NzQsMTQgQEAgc3ViIEdlbmVyYXRlTm9ybWFsQXR0clNldHRlcgogICAgIGlm
ICgkaXNQb2RUeXBlKSB7CiAgICAgICAgICRpbXBsQ2xhc3NOYW1lID0gR2V0TmF0aXZlVHlwZSgk
aW1wbENsYXNzTmFtZSk7CiAgICAgICAgICRpbXBsSW5jbHVkZXN7IlY4U1ZHUE9EVHlwZVdyYXBw
ZXIuaCJ9ID0gMTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICBWOFNWR1BP
RFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiogd3JhcHBlciA9IFY4UHJveHk6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiA+KFY4Q2xh
c3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uSG9sZGVyKCkpO1xuIik7CisgICAgICAgIHB1c2go
QGltcGxDb250ZW50RGVjbHMsICIgICAgVjhTVkdQT0RUeXBlV3JhcHBlcjwkaW1wbENsYXNzTmFt
ZT4qIHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxWOFNWR1BP
RFR5cGVXcmFwcGVyPCRpbXBsQ2xhc3NOYW1lPiA+KFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgs
IGluZm8uSG9sZGVyKCkpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIg
ICAgJGltcGxDbGFzc05hbWUgaW1wX2luc3RhbmNlID0gKndyYXBwZXI7XG4iKTsKICAgICAgICAg
cHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAkaW1wbENsYXNzTmFtZSogaW1wID0gJmltcF9p
bnN0YW5jZTtcbiIpOwogCiAgICAgfSBlbHNpZiAoJGF0dHJFeHQtPnsidjhPblByb3RvIn0pIHsK
ICAgICAgICAgIyBwZXJmb3JtIGxvb2t1cCBmaXJzdAogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dERlY2xzLCA8PEVORCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFBy
b3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6JGNsYXNzSW5kZXgsIGluZm8uVGhp
cygpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4RE9NV3JhcHBlcjo6
bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCBpbmZvLlRoaXMoKSk7
CiAgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiBFTkQK
ICAgICAgICAgSG9sZGVyVG9OYXRpdmUoJGRhdGFOb2RlLCAkaW1wbENsYXNzTmFtZSwgJGNsYXNz
SW5kZXgpOwpAQCAtNzk1LDcgKzc5NSw3IEBAIHN1YiBHZW5lcmF0ZUZ1bmN0aW9uQ2FsbGJhY2sK
IAogICAgIGlmIChJc1BvZFR5cGUoJGltcGxDbGFzc05hbWUpKSB7CiAgICAgICAgIG15ICRuYXRp
dmVDbGFzc05hbWUgPSBHZXROYXRpdmVUeXBlKCRpbXBsQ2xhc3NOYW1lKTsKLSAgICAgICAgcHVz
aChAaW1wbENvbnRlbnREZWNscywgIiAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRuYXRpdmVDbGFz
c05hbWU+KiBpbXBfd3JhcHBlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxWOFNW
R1BPRFR5cGVXcmFwcGVyPCRuYXRpdmVDbGFzc05hbWU+ID4oVjhDbGFzc0luZGV4OjokY2xhc3NJ
bmRleCwgYXJncy5Ib2xkZXIoKSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNs
cywgIiAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPCRuYXRpdmVDbGFzc05hbWU+KiBpbXBfd3JhcHBl
ciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFY4U1ZHUE9EVHlwZVdyYXBw
ZXI8JG5hdGl2ZUNsYXNzTmFtZT4gPihWOENsYXNzSW5kZXg6OiRjbGFzc0luZGV4LCBhcmdzLkhv
bGRlcigpKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICRuYXRp
dmVDbGFzc05hbWUgaW1wX2luc3RhbmNlID0gKmltcF93cmFwcGVyO1xuIik7CiAgICAgICAgIHB1
c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgJG5hdGl2ZUNsYXNzTmFtZSogaW1wID0gJmltcF9p
bnN0YW5jZTtcbiIpOwogICAgIH0gZWxzZSB7CkBAIC0xMzE5LDcgKzEzMTksNyBAQCBFTkQKICAg
ICAgICAgaWYgKCRwYXJlbnQgZXEgIkV2ZW50VGFyZ2V0IikgeyBuZXh0OyB9CiAgICAgICAgICRp
bXBsSW5jbHVkZXN7IlY4JHtwYXJlbnR9LmgifSA9IDE7CiAgICAgICAgIG15ICRwYXJlbnRDbGFz
c0luZGV4ID0gdWMoJGNvZGVHZW5lcmF0b3ItPlN0cmlwTW9kdWxlKCRwYXJlbnQpKTsKLSAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIgIGRlc2MtPkluaGVyaXQoVjhQcm94eTo6Z2V0VGVtcGxh
dGUoVjhDbGFzc0luZGV4Ojoke3BhcmVudENsYXNzSW5kZXh9KSk7XG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICIgIGRlc2MtPkluaGVyaXQoVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0
ZShWOENsYXNzSW5kZXg6OiR7cGFyZW50Q2xhc3NJbmRleH0pKTtcbiIpOwogICAgICAgICBsYXN0
OwogICAgIH0KIApAQCAtMTQ4Miw3ICsxNDgyLDcgQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb25DYWxs
U3RyaW5nKCkKICAgICAgICAgfQogICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiaWYgKHN1
Y2Nlc3MpXG4iOwogICAgICAgICAkcmVzdWx0IC49ICRpbmRlbnQgLiAiICAgICIgLgotICAgICAg
ICAgICAgInJldHVybiBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoJG5vZGVUb1JldHVy
bik7XG4iOworICAgICAgICAgICAgInJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9W
OE9iamVjdCgkbm9kZVRvUmV0dXJuKTtcbiI7CiAgICAgICAgICRyZXN1bHQgLj0gJGluZGVudCAu
ICJyZXR1cm4gdjg6Ok51bGwoKTtcbiI7CiAgICAgICAgIHJldHVybiAkcmVzdWx0OwogICAgIH0g
ZWxzaWYgKCRyZXR1cm5UeXBlIGVxICJ2b2lkIikgewpAQCAtMTU0Nyw3ICsxNTQ3LDcgQEAgc3Vi
IEdlbmVyYXRlRnVuY3Rpb25DYWxsU3RyaW5nKCkKIAogICAgIGlmICgkcmV0dXJuc1BvZFR5cGUp
IHsKICAgICAgICAgbXkgJGNsYXNzSW5kZXggPSB1YygkcmV0dXJuVHlwZSk7Ci0gICAgICAgICRy
ZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjokY2xhc3NJbmRleCwgd3JhcHBlcik7XG4iOworICAgICAgICAkcmVzdWx0IC49
ICRpbmRlbnQgLiAicmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjokY2xhc3NJbmRleCwgd3JhcHBlcik7XG4iOwogICAgIH0gZWxzZSB7CiAgICAgICAg
ICRyZXN1bHQgLj0gJGluZGVudCAuICJyZXR1cm4gIiAuIE5hdGl2ZVRvSlNWYWx1ZSgkZnVuY3Rp
b24tPnNpZ25hdHVyZSwgJHJldHVybikgLiAiO1xuIjsKICAgICB9CkBAIC0xODExLDcgKzE4MTEs
NyBAQCBzdWIgSlNWYWx1ZVRvTmF0aXZlCiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJOb2Rl
RmlsdGVyIikgewotICAgICAgICByZXR1cm4gIlY4UHJveHk6OndyYXBOYXRpdmVOb2RlRmlsdGVy
KCR2YWx1ZSkiOworICAgICAgICByZXR1cm4gIlY4RE9NV3JhcHBlcjo6d3JhcE5hdGl2ZU5vZGVG
aWx0ZXIoJHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJTVkdSZWN0IikgewpA
QCAtMTgyOCw3ICsxODI4LDcgQEAgc3ViIEpTVmFsdWVUb05hdGl2ZQogICAgICAgICAkaW1wbElu
Y2x1ZGVzeyJWOE5vZGUuaCJ9ID0gMTsKIAogICAgICAgICAjIEV2ZW50VGFyZ2V0IGlzIG5vdCBp
biBET00gaGllcmFyY2h5LCBidXQgYWxsIE5vZGVzIGFyZSBFdmVudFRhcmdldC4KLSAgICAgICAg
cmV0dXJuICJWOE5vZGU6Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOFByb3h5Ojpjb252ZXJ0RE9N
V3JhcHBlclRvTm9kZTxOb2RlPigkdmFsdWUpIDogMCI7CisgICAgICAgIHJldHVybiAiVjhOb2Rl
OjpIYXNJbnN0YW5jZSgkdmFsdWUpID8gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
Tm9kZTxOb2RlPigkdmFsdWUpIDogMCI7CiAgICAgfQogCiAgICAgQWRkSW5jbHVkZXNGb3JUeXBl
KCR0eXBlKTsKQEAgLTE4MzksNyArMTgzOSw3IEBAIHN1YiBKU1ZhbHVlVG9OYXRpdmUKIAogICAg
ICAgICAjIFBlcmZvcm0gdHlwZSBjaGVja3Mgb24gdGhlIHBhcmFtZXRlciwgaWYgaXQgaXMgZXhw
ZWN0ZWQgTm9kZSB0eXBlLAogICAgICAgICAjIHJldHVybiBOVUxMLgotICAgICAgICByZXR1cm4g
IlY4JHt0eXBlfTo6SGFzSW5zdGFuY2UoJHZhbHVlKSA/IFY4UHJveHk6OmNvbnZlcnRET01XcmFw
cGVyVG9Ob2RlPCR7dHlwZX0+KCR2YWx1ZSkgOiAwIjsKKyAgICAgICAgcmV0dXJuICJWOCR7dHlw
ZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVy
VG9Ob2RlPCR7dHlwZX0+KCR2YWx1ZSkgOiAwIjsKICAgICB9IGVsc2UgewogICAgICAgICAjIFRP
RE86IFRlbXBvcmFyeSB0byBhdm9pZCBXaW5kb3cgbmFtZSBjb25mbGljdC4KICAgICAgICAgbXkg
JGNsYXNzSW5kZXggPSB1YygkdHlwZSk7CkBAIC0xODU4LDcgKzE4NTgsNyBAQCBzdWIgSlNWYWx1
ZVRvTmF0aXZlCiAKICAgICAgICAgIyBQZXJmb3JtIHR5cGUgY2hlY2tzIG9uIHRoZSBwYXJhbWV0
ZXIsIGlmIGl0IGlzIGV4cGVjdGVkIE5vZGUgdHlwZSwKICAgICAgICAgIyByZXR1cm4gTlVMTC4K
LSAgICAgICAgcmV0dXJuICJWOCR7dHlwZX06Okhhc0luc3RhbmNlKCR2YWx1ZSkgPyBWOFByb3h5
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8JHtpbXBsQ2xhc3NOYW1lfT4oVjhDbGFzc0luZGV4Ojok
e2NsYXNzSW5kZXh9LCAkdmFsdWUpIDogMCI7CisgICAgICAgIHJldHVybiAiVjgke3R5cGV9OjpI
YXNJbnN0YW5jZSgkdmFsdWUpID8gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
JHtpbXBsQ2xhc3NOYW1lfT4oVjhDbGFzc0luZGV4Ojoke2NsYXNzSW5kZXh9LCAkdmFsdWUpIDog
MCI7CiAgICAgfQogfQogCkBAIC0yMDEyLDIzICsyMDEyLDIzIEBAIHN1YiBOYXRpdmVUb0pTVmFs
dWUKIAogICAgICMgc3BlY2lhbCBjYXNlIGZvciBub24tRE9NIG5vZGUgaW50ZXJmYWNlcwogICAg
IGlmIChJc0RPTU5vZGVUeXBlKCR0eXBlKSkgewotICAgICAgICByZXR1cm4gIlY4UHJveHk6OmNv
bnZlcnROb2RlVG9WOE9iamVjdCgkdmFsdWUpIjsKKyAgICAgICAgcmV0dXJuICJWOERPTVdyYXBw
ZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdCgkdmFsdWUpIjsKICAgICB9CiAKICAgICBpZiAoJHR5
cGUgZXEgIkV2ZW50VGFyZ2V0IiBvciAkdHlwZSBlcSAiU1ZHRWxlbWVudEluc3RhbmNlIikgewot
ICAgICAgICByZXR1cm4gIlY4UHJveHk6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoJHZh
bHVlKSI7CisgICAgICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRU
b1Y4T2JqZWN0KCR2YWx1ZSkiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiRXZlbnQiKSB7
Ci0gICAgICAgIHJldHVybiAiVjhQcm94eTo6Y29udmVydEV2ZW50VG9WOE9iamVjdCgkdmFsdWUp
IjsKKyAgICAgICAgcmV0dXJuICJWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRvVjhPYmplY3Qo
JHZhbHVlKSI7CiAgICAgfQogCiAgICAgaWYgKCR0eXBlIGVxICJFdmVudExpc3RlbmVyIikgewot
ICAgICAgICByZXR1cm4gIlY4UHJveHk6OmNvbnZlcnRFdmVudExpc3RlbmVyVG9WOE9iamVjdCgk
dmFsdWUpIjsKKyAgICAgICAgcmV0dXJuICJWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudExpc3Rl
bmVyVG9WOE9iamVjdCgkdmFsdWUpIjsKICAgICB9CiAKICAgICBpZiAoJHR5cGUgZXEgIlJHQkNv
bG9yIikgewotICAgICAgICByZXR1cm4gIlY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6UkdCQ09MT1IsIG5ldyBSR0JDb2xvcigkdmFsdWUpKSI7CisgICAgICAgIHJldHVy
biAiVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlJHQkNPTE9S
LCBuZXcgUkdCQ29sb3IoJHZhbHVlKSkiOwogICAgIH0KIAogICAgIGlmICgkdHlwZSBlcSAiV29y
a2VyQ29udGV4dCIgb3IgJHR5cGUgZXEgIldvcmtlckxvY2F0aW9uIiBvciAkdHlwZSBlcSAiV29y
a2VyTmF2aWdhdG9yIikgewpAQCAtMjA0Nyw3ICsyMDQ3LDcgQEAgc3ViIE5hdGl2ZVRvSlNWYWx1
ZQogICAgICAgICAgICAgJHZhbHVlID0gR2VuZXJhdGVTVkdTdGF0aWNQb2RUeXBlV3JhcHBlcigk
dHlwZSwgJHZhbHVlKTsKICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiAiVjhQcm94eTo6Y29u
dmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjokY2xhc3NJbmRleCwgJHZhbHVlKSI7CisgICAg
ICAgIHJldHVybiAiVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
OiRjbGFzc0luZGV4LCAkdmFsdWUpIjsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Nj
cmlwdENvbnRyb2xsZXIuY3BwCmluZGV4IDhkOTA1NDIuLmExMTZiODUgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9TY3JpcHRDb250cm9sbGVyLmNwcApAQCAtMTU1LDcgKzE1NSw3IEBAIGJvb2wgU2Ny
aXB0Q29udHJvbGxlcjo6cHJvY2Vzc2luZ1VzZXJHZXN0dXJlKCkgY29uc3QKIAogICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gdjhDb250ZXh0LT5HbG9iYWwoKTsKICAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4ganNFdmVudCA9IGdsb2JhbC0+R2V0KHY4OjpTdHJpbmc6Ok5ld1N5
bWJvbCgiZXZlbnQiKSk7Ci0gICAgRXZlbnQqIGV2ZW50ID0gVjhQcm94eTo6Y29udmVydFRvTmF0
aXZlRXZlbnQoanNFdmVudCk7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVFdmVudChqc0V2ZW50KTsKIAogICAgIC8vIEJhc2VkIG9uIGNvZGUgZnJvbSBr
anNfYmluZGluZ3MuY3BwLgogICAgIC8vIE5vdGU6IFRoaXMgaXMgbW9yZSBsaWJlcmFsIHRoYW4g
RmlyZWZveCdzIGltcGxlbWVudGF0aW9uLgpAQCAtMzM3LDcgKzMzNyw3IEBAIHN0YXRpYyBOUE9i
amVjdCogY3JlYXRlU2NyaXB0T2JqZWN0KEZyYW1lKiBmcmFtZSkKIAogICAgIHY4OjpDb250ZXh0
OjpTY29wZSBzY29wZSh2OENvbnRleHQpOwogICAgIERPTVdpbmRvdyogd2luZG93ID0gZnJhbWUt
PmRvbVdpbmRvdygpOwotICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBnbG9iYWwgPSBWOFByb3h5
Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgd2luZG93KTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2xvYmFsID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9W
OE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgd2luZG93KTsKICAgICBBU1NFUlQoZ2xv
YmFsLT5Jc09iamVjdCgpKTsKICAgICByZXR1cm4gbnBDcmVhdGVWOFNjcmlwdE9iamVjdCgwLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KGdsb2JhbCksIHdpbmRvdyk7CiB9CkBAIC0zNzQs
NyArMzc0LDcgQEAgTlBPYmplY3QqIFNjcmlwdENvbnRyb2xsZXI6OmNyZWF0ZVNjcmlwdE9iamVj
dEZvclBsdWdpbkVsZW1lbnQoSFRNTFBsdWdJbkVsZW1lbnQKICAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgc2NvcGUodjhDb250ZXh0KTsKIAogICAgIERPTVdpbmRvdyogd2luZG93ID0gbV9mcmFtZS0+
ZG9tV2luZG93KCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHY4cGx1Z2luID0gVjhQcm94
eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpIVE1MRU1CRURFTEVNRU5ULCBwbHVn
aW4pOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2OHBsdWdpbiA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpIVE1MRU1CRURFTEVNRU5ULCBwbHVnaW4p
OwogICAgIGlmICghdjhwbHVnaW4tPklzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBjcmVhdGVO
b1NjcmlwdE9iamVjdCgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Njcmlw
dE9iamVjdC5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdC5jcHAKaW5kZXgg
ZTNlNGYyOS4uYzIyNDY1MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRP
YmplY3QuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0LmNwcApAQCAt
MTE5LDcgKzExOSw3IEBAIGJvb2wgU2NyaXB0R2xvYmFsT2JqZWN0OjpzZXQoU2NyaXB0U3RhdGUq
IHNjcmlwdFN0YXRlLCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBTCiBib29sIFNjcmlwdEdsb2Jh
bE9iamVjdDo6c2V0KFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSwgY29uc3QgY2hhciogbmFtZSwg
SW5zcGVjdG9yQ29udHJvbGxlciogdmFsdWUpCiB7CiAgICAgU2NyaXB0U2NvcGUgc2NvcGUoc2Ny
aXB0U3RhdGUpOwotICAgIHNjb3BlLmdsb2JhbCgpLT5TZXQodjg6OlN0cmluZzo6TmV3KG5hbWUp
LCBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRS
T0xMRVIsIHZhbHVlKSk7CisgICAgc2NvcGUuZ2xvYmFsKCktPlNldCh2ODo6U3RyaW5nOjpOZXco
bmFtZSksIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpJTlNQ
RUNUT1JDT05UUk9MTEVSLCB2YWx1ZSkpOwogICAgIHJldHVybiBzY29wZS5zdWNjZXNzKCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0T2JqZWN0UXVhcmFudGlu
ZS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdE9iamVjdFF1YXJhbnRpbmUuY3BwCmlu
ZGV4IGUwOGNhMWUuLjBjZjkwNzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvU2Ny
aXB0T2JqZWN0UXVhcmFudGluZS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRP
YmplY3RRdWFyYW50aW5lLmNwcApAQCAtODAsNyArODAsNyBAQCBib29sIGdldFF1YXJhbnRpbmVk
U2NyaXB0T2JqZWN0KE5vZGUqIG5vZGUsIFNjcmlwdE9iamVjdCYgcXVhcmFudGluZWRPYmplY3Qp
CiAgICAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6Y29udGV4dChu
b2RlLT5kb2N1bWVudCgpLT5wYWdlKCktPm1haW5GcmFtZSgpKTsKICAgICB2ODo6Q29udGV4dDo6
U2NvcGUgc2NvcGUoY29udGV4dCk7CiAKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdjhOb2Rl
ID0gVjhQcm94eTo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KG5vZGUpOworICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB2OE5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChu
b2RlKTsKICAgICBxdWFyYW50aW5lZE9iamVjdCA9IFNjcmlwdE9iamVjdCh2ODo6TG9jYWw8djg6
Ok9iamVjdD4odjg6Ok9iamVjdDo6Q2FzdCgqdjhOb2RlKSkpOwogCiAgICAgcmV0dXJuIHRydWU7
CkBAIC05NCw3ICs5NCw3IEBAIGJvb2wgZ2V0UXVhcmFudGluZWRTY3JpcHRPYmplY3QoRE9NV2lu
ZG93KiBkb21XaW5kb3csIFNjcmlwdE9iamVjdCYgcXVhcmFudGluZWRPCiAgICAgdjg6OkxvY2Fs
PHY4OjpDb250ZXh0PiBjb250ZXh0ID0gVjhQcm94eTo6Y29udGV4dChkb21XaW5kb3ctPmZyYW1l
KCkpOwogICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKIAotICAgIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB2OERvbVdpbmRvdyA9IFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0
KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBkb21XaW5kb3cpOworICAgIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB2OERvbVdpbmRvdyA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIGRvbVdpbmRvdyk7CiAgICAgcXVhcmFudGluZWRPYmplY3Qg
PSBTY3JpcHRPYmplY3Qodjg6OkxvY2FsPHY4OjpPYmplY3Q+KHY4OjpPYmplY3Q6OkNhc3QoKnY4
RG9tV2luZG93KSkpOwogCiAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4QWJzdHJhY3RFdmVudExpc3RlbmVyLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCmluZGV4IDI1OTgzMTkuLmNlNGMxNjAgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3Bw
CisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXIuY3BwCkBA
IC0xMjMsNyArMTIzLDcgQEAgdm9pZCBWOEFic3RyYWN0RXZlbnRMaXN0ZW5lcjo6aGFuZGxlRXZl
bnQoRXZlbnQqIGV2ZW50LCBib29sIGlzV2luZG93RXZlbnQpCiAgICAgdjg6OkNvbnRleHQ6OlNj
b3BlIHNjb3BlKHY4Q29udGV4dCk7CiAKICAgICAvLyBHZXQgdGhlIFY4IHdyYXBwZXIgZm9yIHRo
ZSBldmVudCBvYmplY3QuCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQgPSBWOFBy
b3h5Ojpjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KGV2ZW50KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpW
YWx1ZT4ganNFdmVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VG9WOE9iamVjdChldmVu
dCk7CiAKICAgICBpbnZva2VFdmVudEhhbmRsZXIodjhDb250ZXh0LCBldmVudCwganNFdmVudCwg
aXNXaW5kb3dFdmVudCk7CiAKQEAgLTE1MCw3ICsxNTAsNyBAQCB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gVjhBYnN0cmFjdEV2ZW50TGlzdGVuZXI6OmdldFJlY2VpdmVyT2JqZWN0KEV2ZW50KiBldmVu
dCwgYgogICAgICAgICByZXR1cm4gdjg6OkNvbnRleHQ6OkdldEN1cnJlbnQoKS0+R2xvYmFsKCk7
CiAKICAgICBFdmVudFRhcmdldCogdGFyZ2V0ID0gZXZlbnQtPmN1cnJlbnRUYXJnZXQoKTsKLSAg
ICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUgPSBWOFByb3h5Ojpjb252ZXJ0RXZlbnRUYXJn
ZXRUb1Y4T2JqZWN0KHRhcmdldCk7CisgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KHRhcmdldCk7CiAgICAg
aWYgKHZhbHVlLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6T2JqZWN0
PigpOwogICAgIHJldHVybiB2ODo6TG9jYWw8djg6Ok9iamVjdD46Ok5ldyh2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+OjpDYXN0KHZhbHVlKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4Q29sbGVjdGlvbi5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5jcHAK
aW5kZXggMTVlMjM0Yi4uYzlmYzlhYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9W
OENvbGxlY3Rpb24uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmNw
cApAQCAtNTIsNyArNTIsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9PcHRpb25zQ29sbGVj
dGlvblNldHRlcih1aW50MzJfdCBpbmRleCwgdjg6OkhhbmRsZTx2ODo6VgogICAgICAgICByZXR1
cm4gdmFsdWU7CiAgICAgfQogCi0gICAgSFRNTE9wdGlvbkVsZW1lbnQqIGVsZW1lbnQgPSBWOFBy
b3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MT3B0aW9uRWxlbWVudD4odjg6OkhhbmRs
ZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkpOworICAgIEhUTUxPcHRpb25FbGVtZW50KiBlbGVt
ZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MT3B0aW9uRWxl
bWVudD4odjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCh2YWx1ZSkpOwogICAgIGJhc2UtPnNl
dE9wdGlvbihpbmRleCwgZWxlbWVudCwgZWMpOwogCiAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0
aW9uKGVjKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Q29sbGVjdGlvbi5oCmluZGV4IDMxMmM2MDguLmNiZmU5
MjEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhDb2xsZWN0aW9uLmgKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOENvbGxlY3Rpb24uaApAQCAtNDcsOCArNDcsOCBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCk7CiAgICAgICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhDbGFzc0lu
ZGV4OjpGcm9tSW50KGltcGxlbWVudGF0aW9uVHlwZS0+SW50MzJWYWx1ZSgpKTsKICAgICAgICAg
aWYgKHR5cGUgPT0gVjhDbGFzc0luZGV4OjpOT0RFKQotICAgICAgICAgICAgcmV0dXJuIFY4UHJv
eHk6OmNvbnZlcnROb2RlVG9WOE9iamVjdChzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbGVtZW50YXRp
b24pKTsKLSAgICAgICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KHR5cGUsIGlt
cGxlbWVudGF0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRO
b2RlVG9WOE9iamVjdChzdGF0aWNfY2FzdDxOb2RlKj4oaW1wbGVtZW50YXRpb24pKTsKKyAgICAg
ICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QodHlwZSwgaW1wbGVtZW50
YXRpb24pOwogICAgIH0KIAogICAgIHRlbXBsYXRlPGNsYXNzIFQ+IHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gZ2V0VjhPYmplY3QoUGFzc1JlZlB0cjxUPiBpbXBsZW1lbnRhdGlvbiwgdjg6
OkxvY2FsPHY4OjpWYWx1ZT4gaW1wbGVtZW50YXRpb25UeXBlKQpAQCAtNjEsMTAgKzYxLDEwIEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHY4OjpMb2NhbDx2ODo6VmFsdWU+IGltcGxlbWVudGF0aW9uVHlwZSkKICAg
ICB7CiAgICAgICAgIC8vIEZJWE1FOiBhc3NlcnQgb2JqZWN0IGlzIGEgY29sbGVjdGlvbiB0eXBl
Ci0gICAgICAgIEFTU0VSVChWOFByb3h5OjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7Ci0gICAg
ICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9IFY4UHJveHk6OmRv
bVdyYXBwZXJUeXBlKG9iamVjdCk7CisgICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJl
RE9NV3JhcHBlcihvYmplY3QpKTsKKyAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
IHdyYXBwZXJUeXBlID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShvYmplY3QpOwogICAg
ICAgICBBU1NFUlQod3JhcHBlclR5cGUgIT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKLSAgICAgICAg
Q29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxD
b2xsZWN0aW9uPih3cmFwcGVyVHlwZSwgb2JqZWN0KTsKKyAgICAgICAgQ29sbGVjdGlvbiogY29s
bGVjdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENvbGxlY3Rpb24+
KHdyYXBwZXJUeXBlLCBvYmplY3QpOwogICAgICAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0gdG9X
ZWJDb3JlU3RyaW5nKG5hbWUpOwogICAgICAgICByZXR1cm4gZ2V0VjhPYmplY3Q8SXRlbVR5cGU+
KGNvbGxlY3Rpb24tPm5hbWVkSXRlbShwcm9wZXJ0eU5hbWUpLCBpbXBsZW1lbnRhdGlvblR5cGUp
OwogICAgIH0KQEAgLTg3LDggKzg3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIC8vIEEg
dGVtcGxhdGUgb2YgbmFtZWQgcHJvcGVydHkgYWNjZXNzb3Igb2YgSFRNTFNlbGVjdEVsZW1lbnQg
YW5kIEhUTUxGb3JtRWxlbWVudC4KICAgICB0ZW1wbGF0ZTxjbGFzcyBDb2xsZWN0aW9uPiBzdGF0
aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG5vZGVDb2xsZWN0aW9uTmFtZWRQcm9wZXJ0eUdldHRl
cih2ODo6TG9jYWw8djg6OlN0cmluZz4gbmFtZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5m
bykKICAgICB7Ci0gICAgICAgIEFTU0VSVChWOFByb3h5OjptYXliZURPTVdyYXBwZXIoaW5mby5I
b2xkZXIoKSkpOwotICAgICAgICBBU1NFUlQoVjhQcm94eTo6ZG9tV3JhcHBlclR5cGUoaW5mby5I
b2xkZXIoKSkgPT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKKyAgICAgICAgQVNTRVJUKFY4RE9NV3Jh
cHBlcjo6bWF5YmVET01XcmFwcGVyKGluZm8uSG9sZGVyKCkpKTsKKyAgICAgICAgQVNTRVJUKFY4
RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFzc0luZGV4
OjpOT0RFKTsKICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlID0gaW5mby5Ib2xk
ZXIoKS0+R2V0UmVhbE5hbWVkUHJvcGVydHlJblByb3RvdHlwZUNoYWluKG5hbWUpOwogCiAgICAg
ICAgIGlmICghdmFsdWUuSXNFbXB0eSgpKQpAQCAtOTgsNyArOTgsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIC8vIHByb3BlcnRpZXMuCiAgICAgICAgIGlmIChpbmZvLkhvbGRlcigp
LT5IYXNSZWFsTmFtZWRDYWxsYmFja1Byb3BlcnR5KG5hbWUpKQogICAgICAgICAgICAgcmV0dXJu
IG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7Ci0gICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rp
b24gPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxDb2xsZWN0aW9uPihpbmZvLkhv
bGRlcigpKTsKKyAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydERPTVdyYXBwZXJUb05vZGU8Q29sbGVjdGlvbj4oaW5mby5Ib2xkZXIoKSk7CiAgICAg
ICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSB0b1dlYkNvcmVTdHJpbmcobmFtZSk7CiAgICAgICAg
IHZvaWQqIGltcGxlbWVudGF0aW9uID0gY29sbGVjdGlvbi0+bmFtZWRJdGVtKHByb3BlcnR5TmFt
ZSk7CiAgICAgICAgIHJldHVybiBnZXRWOE9iamVjdChpbXBsZW1lbnRhdGlvbiwgaW5mby5EYXRh
KCkpOwpAQCAtMTA5LDEwICsxMDksMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ODo6TG9jYWw8djg6OlZh
bHVlPiBpbXBsZW1lbnRhdGlvblR5cGUpCiAgICAgewogICAgICAgICAvLyBGSVhNRTogQXNzZXJ0
IHRoYXQgb2JqZWN0IG11c3QgYmUgYSBjb2xsZWN0aW9uIHR5cGUuCi0gICAgICAgIEFTU0VSVChW
OFByb3h5OjptYXliZURPTVdyYXBwZXIob2JqZWN0KSk7Ci0gICAgICAgIFY4Q2xhc3NJbmRleDo6
VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9IFY4UHJveHk6OmRvbVdyYXBwZXJUeXBlKG9iamVj
dCk7CisgICAgICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihvYmplY3Qp
KTsKKyAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHdyYXBwZXJUeXBlID0gVjhE
T01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShvYmplY3QpOwogICAgICAgICBBU1NFUlQod3JhcHBl
clR5cGUgIT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKLSAgICAgICAgQ29sbGVjdGlvbiogY29sbGVj
dGlvbiA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb2xsZWN0aW9uPih3cmFwcGVy
VHlwZSwgb2JqZWN0KTsKKyAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENvbGxlY3Rpb24+KHdyYXBwZXJUeXBlLCBvYmpl
Y3QpOwogICAgICAgICByZXR1cm4gZ2V0VjhPYmplY3Q8SXRlbVR5cGU+KGNvbGxlY3Rpb24tPml0
ZW0oaW5kZXgpLCBpbXBsZW1lbnRhdGlvblR5cGUpOwogICAgIH0KIApAQCAtMTI1LDkgKzEyNSw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBBIHRlbXBsYXRlIG9mIGluZGV4IGludGVy
Y2VwdG9yIG9mIEhUTUxTZWxlY3RFbGVtZW50IGFuZCBIVE1MRm9ybUVsZW1lbnQuCiAgICAgdGVt
cGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBub2Rl
Q29sbGVjdGlvbkluZGV4ZWRQcm9wZXJ0eUdldHRlcih1aW50MzJfdCBpbmRleCwgY29uc3Qgdjg6
OkFjY2Vzc29ySW5mbyYgaW5mbykKICAgICB7Ci0gICAgICAgIEFTU0VSVChWOFByb3h5OjptYXli
ZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkpOwotICAgICAgICBBU1NFUlQoVjhQcm94eTo6ZG9t
V3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkgPT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKLSAgICAg
ICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPENvbGxlY3Rpb24+KGluZm8uSG9sZGVyKCkpOworICAgICAgICBBU1NFUlQoVjhET01XcmFw
cGVyOjptYXliZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkpOworICAgICAgICBBU1NFUlQoVjhE
T01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShpbmZvLkhvbGRlcigpKSA9PSBWOENsYXNzSW5kZXg6
Ok5PREUpOworICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0RE9NV3JhcHBlclRvTm9kZTxDb2xsZWN0aW9uPihpbmZvLkhvbGRlcigpKTsKICAgICAg
ICAgdm9pZCogaW1wbGVtZW50YXRpb24gPSBjb2xsZWN0aW9uLT5pdGVtKGluZGV4KTsKICAgICAg
ICAgcmV0dXJuIGdldFY4T2JqZWN0KGltcGxlbWVudGF0aW9uLCBpbmZvLkRhdGEoKSk7CiAgICAg
fQpAQCAtMTM1LDkgKzEzNSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAvLyBHZXQgYW4g
YXJyYXkgY29udGFpbmluZyB0aGUgbmFtZXMgb2YgaW5kZXhlZCBwcm9wZXJ0aWVzIG9mIEhUTUxT
ZWxlY3RFbGVtZW50IGFuZCBIVE1MRm9ybUVsZW1lbnQuCiAgICAgdGVtcGxhdGU8Y2xhc3MgQ29s
bGVjdGlvbj4gc3RhdGljIHY4OjpIYW5kbGU8djg6OkFycmF5PiBub2RlQ29sbGVjdGlvbkluZGV4
ZWRQcm9wZXJ0eUVudW1lcmF0b3IoY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKICAgICB7
Ci0gICAgICAgIEFTU0VSVChWOFByb3h5OjptYXliZURPTVdyYXBwZXIoaW5mby5Ib2xkZXIoKSkp
OwotICAgICAgICBBU1NFUlQoVjhQcm94eTo6ZG9tV3JhcHBlclR5cGUoaW5mby5Ib2xkZXIoKSkg
PT0gVjhDbGFzc0luZGV4OjpOT0RFKTsKLSAgICAgICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9
IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPENvbGxlY3Rpb24+KGluZm8uSG9sZGVy
KCkpOworICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjptYXliZURPTVdyYXBwZXIoaW5mby5I
b2xkZXIoKSkpOworICAgICAgICBBU1NFUlQoVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShp
bmZvLkhvbGRlcigpKSA9PSBWOENsYXNzSW5kZXg6Ok5PREUpOworICAgICAgICBDb2xsZWN0aW9u
KiBjb2xsZWN0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxDb2xs
ZWN0aW9uPihpbmZvLkhvbGRlcigpKTsKICAgICAgICAgaW50IGxlbmd0aCA9IGNvbGxlY3Rpb24t
Pmxlbmd0aCgpOwogICAgICAgICB2ODo6SGFuZGxlPHY4OjpBcnJheT4gcHJvcGVydGllcyA9IHY4
OjpBcnJheTo6TmV3KGxlbmd0aCk7CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKQEAgLTE1MSw5ICsxNTEsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgLy8g
R2V0IGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG5hbWVzIG9mIGluZGV4ZWQgcHJvcGVydGllcyBp
biBhIGNvbGxlY3Rpb24uCiAgICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIHY4
OjpIYW5kbGU8djg6OkFycmF5PiBjb2xsZWN0aW9uSW5kZXhlZFByb3BlcnR5RW51bWVyYXRvcihj
b25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogICAgIHsKLSAgICAgICAgQVNTRVJUKFY4UHJv
eHk6Om1heWJlRE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7Ci0gICAgICAgIFY4Q2xhc3NJbmRl
eDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9IFY4UHJveHk6OmRvbVdyYXBwZXJUeXBlKGlu
Zm8uSG9sZGVyKCkpOwotICAgICAgICBDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gVjhQcm94eTo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PENvbGxlY3Rpb24+KHdyYXBwZXJUeXBlLCBpbmZvLkhvbGRl
cigpKTsKKyAgICAgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKGluZm8u
SG9sZGVyKCkpKTsKKyAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHdyYXBwZXJU
eXBlID0gVjhET01XcmFwcGVyOjpkb21XcmFwcGVyVHlwZShpbmZvLkhvbGRlcigpKTsKKyAgICAg
ICAgQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PENvbGxlY3Rpb24+KHdyYXBwZXJUeXBlLCBpbmZvLkhvbGRlcigpKTsKICAgICAgICAg
aW50IGxlbmd0aCA9IGNvbGxlY3Rpb24tPmxlbmd0aCgpOwogICAgICAgICB2ODo6SGFuZGxlPHY4
OjpBcnJheT4gcHJvcGVydGllcyA9IHY4OjpBcnJheTo6TmV3KGxlbmd0aCk7CiAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKQEAgLTE2OSw5ICsxNjksOSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAgICAgdGVtcGxhdGU8Y2xhc3MgQ29sbGVjdGlvbj4gc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBjb2xsZWN0aW9uU3RyaW5nT3JOdWxsSW5kZXhlZFByb3BlcnR5
R2V0dGVyKHVpbnQzMl90IGluZGV4LCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbmZvKQogICAg
IHsKICAgICAgICAgLy8gRklYTUU6IGFzc2VydCB0aGF0IG9iamVjdCBtdXN0IGJlIGEgY29sbGVj
dGlvbiB0eXBlCi0gICAgICAgIEFTU0VSVChWOFByb3h5OjptYXliZURPTVdyYXBwZXIoaW5mby5I
b2xkZXIoKSkpOwotICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgd3JhcHBlclR5
cGUgPSBWOFByb3h5Ojpkb21XcmFwcGVyVHlwZShpbmZvLkhvbGRlcigpKTsKLSAgICAgICAgQ29s
bGVjdGlvbiogY29sbGVjdGlvbiA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb2xs
ZWN0aW9uPih3cmFwcGVyVHlwZSwgaW5mby5Ib2xkZXIoKSk7CisgICAgICAgIEFTU0VSVChWOERP
TVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcihpbmZvLkhvbGRlcigpKSk7CisgICAgICAgIFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSB3cmFwcGVyVHlwZSA9IFY4RE9NV3JhcHBlcjo6ZG9tV3Jh
cHBlclR5cGUoaW5mby5Ib2xkZXIoKSk7CisgICAgICAgIENvbGxlY3Rpb24qIGNvbGxlY3Rpb24g
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDb2xsZWN0aW9uPih3cmFwcGVy
VHlwZSwgaW5mby5Ib2xkZXIoKSk7CiAgICAgICAgIFN0cmluZyByZXN1bHQgPSBjb2xsZWN0aW9u
LT5pdGVtKGluZGV4KTsKICAgICAgICAgcmV0dXJuIHY4U3RyaW5nT3JOdWxsKHJlc3VsdCk7CiAg
ICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTU1hcC5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcAppbmRleCA5YjFkYmUzLi41MDQ0OTM2IDEwMDY0
NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NTWFwLmNwcApAQCAtNDYxLDcgKzQ2MSw3IEBAIHZvaWQgRE9NRGF0YTo6
aGFuZGxlV2Vha09iamVjdChET01EYXRhU3RvcmU6OkRPTVdyYXBwZXJNYXBUeXBlIG1hcFR5cGUs
IHY4OjpIYW5kCiAgICAgICAgIGlmICgqd3JhcHBlciA9PSAqdjhPYmplY3QpIHsKICAgICAgICAg
ICAgIC8vIENsZWFyIHRoZSBKUyByZWZlcmVuY2UuCiAgICAgICAgICAgICBkb21NYXAtPmZvcmdl
dE9ubHkoZG9tT2JqZWN0KTsKLSAgICAgICAgICAgIHN0b3JlLT5kb21EYXRhKCktPmVuc3VyZURl
cmVmKFY4UHJveHk6OmRvbVdyYXBwZXJUeXBlKHY4T2JqZWN0KSwgZG9tT2JqZWN0KTsKKyAgICAg
ICAgICAgIHN0b3JlLT5kb21EYXRhKCktPmVuc3VyZURlcmVmKFY4RE9NV3JhcHBlcjo6ZG9tV3Jh
cHBlclR5cGUodjhPYmplY3QpLCBkb21PYmplY3QpOwogICAgICAgICB9CiAgICAgfQogfQpAQCAt
NTg1LDcgKzU4NSw3IEBAIHZvaWQgRE9NRGF0YTo6cmVtb3ZlT2JqZWN0c0Zyb21XcmFwcGVyTWFw
KERPTVdyYXBwZXJNYXA8VD4mIGRvbU1hcCkKICAgICAgICAgVCogZG9tT2JqZWN0ID0gc3RhdGlj
X2Nhc3Q8VCo+KGl0ZXItPmZpcnN0KTsKICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD4gdjhPYmplY3QoaXRlci0+c2Vjb25kKTsKIAotICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgdHlwZSA9IFY4UHJveHk6OmRvbVdyYXBwZXJUeXBlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QodjhPYmplY3QpKTsKKyAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJU
eXBlIHR5cGUgPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD46OkNhc3QodjhPYmplY3QpKTsKIAogICAgICAgICAvLyBEZXJlZiB0aGUgRE9NIG9iamVj
dC4KICAgICAgICAgZGVyZWZPYmplY3QodHlwZSwgZG9tT2JqZWN0KTsKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhHQ0NvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOEdDQ29udHJvbGxlci5jcHAKaW5kZXggODZjNTU0NS4uNTk3NGFkMiAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9iaW5k
aW5ncy92OC9WOEdDQ29udHJvbGxlci5jcHAKQEAgLTExMSw3ICsxMTEsNyBAQCBzdGF0aWMgdm9p
ZCBlbnVtZXJhdGVET01PYmplY3RNYXAoRE9NT2JqZWN0TWFwJiB3cmFwcGVyTWFwKQogewogICAg
IGZvciAoRE9NT2JqZWN0TWFwOjppdGVyYXRvciBpdCA9IHdyYXBwZXJNYXAuYmVnaW4oKSwgZW5k
ID0gd3JhcHBlck1hcC5lbmQoKTsgaXQgIT0gZW5kOyArK2l0KSB7CiAgICAgICAgIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIoaXQtPnNlY29uZCk7Ci0gICAgICAgIFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhQcm94eTo6ZG9tV3JhcHBlclR5cGUod3JhcHBl
cik7CisgICAgICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlID0gVjhET01XcmFw
cGVyOjpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKICAgICAgICAgdm9pZCogb2JqZWN0ID0gaXQt
PmZpcnN0OwogICAgICAgICBVTlVTRURfUEFSQU0odHlwZSk7CiAgICAgICAgIFVOVVNFRF9QQVJB
TShvYmplY3QpOwpAQCAtMTIyLDcgKzEyMiw3IEBAIGNsYXNzIERPTU9iamVjdFZpc2l0b3IgOiBw
dWJsaWMgRE9NV3JhcHBlck1hcDx2b2lkPjo6VmlzaXRvciB7CiBwdWJsaWM6CiAgICAgdm9pZCB2
aXNpdERPTVdyYXBwZXIodm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3
cmFwcGVyKQogICAgIHsKLSAgICAgICAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUg
PSBWOFByb3h5Ojpkb21XcmFwcGVyVHlwZSh3cmFwcGVyKTsKKyAgICAgICAgVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBw
ZXIpOwogICAgICAgICBVTlVTRURfUEFSQU0odHlwZSk7CiAgICAgICAgIFVOVVNFRF9QQVJBTShv
YmplY3QpOwogICAgIH0KQEAgLTE4MSw3ICsxODEsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCB2aXNp
dERPTVdyYXBwZXIodm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0PiB3cmFw
cGVyKQogICAgIHsKICAgICAgICAgQVNTRVJUKHdyYXBwZXIuSXNXZWFrKCkpOwotICAgICAgICBW
OENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9IFY4UHJveHk6OmRvbVdyYXBwZXJUeXBl
KHdyYXBwZXIpOworICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9IFY4
RE9NV3JhcHBlcjo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CiAgICAgICAgIHN3aXRjaCAodHlw
ZSkgewogI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwgTkFNRSkgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKICAgICAgICAgY2FzZSBWOENsYXNzSW5kZXg6OlRZUEU6IHsgICAgICAgICAgICAg
ICAgICAgIFwKQEAgLTIxNyw4ICsyMTcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICAvLyBBcyBw
b3J0cyBhcmUgYWx3YXlzIGVudGFuZ2xlZCBpbiBwYWlycyBvbmx5IHBlcmZvcm0gdGhlIGVudGFu
Z2xlbWVudAogICAgICAgICAgICAgLy8gb25jZSBmb3IgZWFjaCBwYWlyIChzZWUgQVNTRVJUIGlu
IE1lc3NhZ2VQb3J0Ojp1bmVudGFuZ2xlKCkpLgogICAgICAgICAgICAgaWYgKHBvcnQxIDwgcG9y
dDIpIHsKLSAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcG9ydDFXcmFwcGVy
ID0gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwg
cG9ydDEpOwotICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwb3J0MldyYXBw
ZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JU
LCBwb3J0Mik7CisgICAgICAgICAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBvcnQxV3Jh
cHBlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpNRVNT
QUdFUE9SVCwgcG9ydDEpOworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBw
b3J0MldyYXBwZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRl
eDo6TUVTU0FHRVBPUlQsIHBvcnQyKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocG9ydDFXcmFw
cGVyLT5Jc09iamVjdCgpKTsKICAgICAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
OjpDYXN0KHBvcnQxV3JhcHBlciktPlNldEludGVybmFsRmllbGQoVjhDdXN0b206OmtNZXNzYWdl
UG9ydEVudGFuZ2xlZFBvcnRJbmRleCwgcG9ydDJXcmFwcGVyKTsKICAgICAgICAgICAgICAgICBB
U1NFUlQocG9ydDJXcmFwcGVyLT5Jc09iamVjdCgpKTsKQEAgLTIyNiw4ICsyMjYsOCBAQCBwdWJs
aWM6CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvLyBSZW1v
dmUgdGhlIHdyYXBwZXIgZW50YW5nbGVtZW50IHdoZW4gYSBwb3J0IGlzIG5vdCBlbnRhbmdsZWQu
Ci0gICAgICAgICAgICBpZiAoVjhQcm94eTo6ZG9tT2JqZWN0SGFzSlNXcmFwcGVyKHBvcnQxKSkg
ewotICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gVjhQcm94
eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgcG9ydDEpOwor
ICAgICAgICAgICAgaWYgKFY4RE9NV3JhcHBlcjo6ZG9tT2JqZWN0SGFzSlNXcmFwcGVyKHBvcnQx
KSkgeworICAgICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBw
b3J0MSk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKHdyYXBwZXItPklzT2JqZWN0KCkpOwogICAg
ICAgICAgICAgICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qod3JhcHBlciktPlNldElu
dGVybmFsRmllbGQoVjhDdXN0b206OmtNZXNzYWdlUG9ydEVudGFuZ2xlZFBvcnRJbmRleCwgdjg6
OlVuZGVmaW5lZCgpKTsKICAgICAgICAgICAgIH0KQEAgLTM4Niw3ICszODYsNyBAQCBjbGFzcyBH
Q0VwaWxvZ3VlVmlzaXRvciA6IHB1YmxpYyBET01XcmFwcGVyTWFwPHZvaWQ+OjpWaXNpdG9yIHsK
IHB1YmxpYzoKICAgICB2b2lkIHZpc2l0RE9NV3JhcHBlcih2b2lkKiBvYmplY3QsIHY4OjpQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IHdyYXBwZXIpCiAgICAgewotICAgICAgICBWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSA9IFY4UHJveHk6OmRvbVdyYXBwZXJUeXBlKHdyYXBwZXIpOwor
ICAgICAgICBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSA9IFY4RE9NV3JhcHBlcjo6
ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CiAgICAgICAgIHN3aXRjaCAodHlwZSkgewogI2RlZmlu
ZSBNQUtFX0NBU0UoVFlQRSwgTkFNRSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAogICAgICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6VFlQRTogeyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L1Y4SGVscGVycy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4SGVscGVycy5jcHAKaW5kZXgg
N2IwNDFhNi4uMzJkYWMyYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9WOEhlbHBl
cnMuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhIZWxwZXJzLmNwcApAQCAtNDAsNyAr
NDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgd3JhcE5QT2JqZWN0KHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gb2JqZWN0LCBOUE9iamVjdCogbnBPYmplY3QpCiB7Ci0gICAgVjhQcm94
eTo6c2V0RE9NV3JhcHBlcihvYmplY3QsIFY4Q2xhc3NJbmRleDo6TlBPQkpFQ1QsIG5wT2JqZWN0
KTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIob2JqZWN0LCBWOENsYXNzSW5kZXg6
Ok5QT0JKRUNULCBucE9iamVjdCk7CiB9CiAKIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gdG9WOENv
bnRleHQoTlBQIG5wcCwgTlBPYmplY3QqIG5wT2JqZWN0KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9WOE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwCmluZGV4IGYyMmZjNzcuLjlmNTdhNDQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhOb2RlRmlsdGVyQ29uZGl0aW9uLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKQEAgLTY5LDcg
KzY5LDcgQEAgc2hvcnQgVjhOb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKFNjcmlwdFN0
YXRlKiBzdGF0ZSwgTm9kZSogbm9kZSkgY29uc3QKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IG9iamVjdCA9IHY4OjpDb250ZXh0OjpHZXRDdXJyZW50KCktPkdsb2JhbCgpOwogICAgIHY4OjpI
YW5kbGU8djg6OkZ1bmN0aW9uPiBjYWxsYmFjayA9IHY4OjpIYW5kbGU8djg6OkZ1bmN0aW9uPjo6
Q2FzdChtX2ZpbHRlcik7CiAgICAgT3duQXJyYXlQdHI8djg6OkhhbmRsZTx2ODo6VmFsdWU+ID4g
YXJncyhuZXcgdjg6OkhhbmRsZTx2ODo6VmFsdWU+WzFdKTsKLSAgICBhcmdzWzBdID0gVjhQcm94
eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpOT0RFLCBub2RlKTsKKyAgICBhcmdz
WzBdID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok5PREUs
IG5vZGUpOwogCiAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZSgpOwogICAg
IEFTU0VSVChwcm94eSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHku
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFByb3h5LmNwcAppbmRleCAyODQ1MDc0Li5hNDE0
MmNiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5jcHAKQEAgLTkxLDcgKzkxLDcgQEAgdHlwZWRlZiBI
YXNoTWFwPE5vZGUqLCB2ODo6T2JqZWN0Kj4gRE9NTm9kZU1hcDsKIHR5cGVkZWYgSGFzaE1hcDx2
b2lkKiwgdjg6Ok9iamVjdCo+IERPTU9iamVjdE1hcDsKIAogI2lmIEVOQUJMRShTVkcpCi12ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29udmVydFNWR0VsZW1lbnRJbnN0YW5jZVRvVjhP
YmplY3QoU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSkKK3Y4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOERPTVdyYXBwZXI6OmNvbnZlcnRTVkdFbGVtZW50SW5zdGFuY2VUb1Y4T2JqZWN0KFNWR0Vs
ZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UpCiB7CiAgICAgaWYgKCFpbnN0YW5jZSkKICAgICAgICAg
cmV0dXJuIHY4OjpOdWxsKCk7CkBAIC0xMTksNyArMTE5LDcgQEAgc3RhdGljIEhhc2hNYXA8dm9p
ZCosIFNWR0VsZW1lbnQqPiYgc3ZnT2JqZWN0VG9Db250ZXh0TWFwKCkKICAgICByZXR1cm4gc3Rh
dGljU3ZnT2JqZWN0VG9Db250ZXh0TWFwOwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQ
cm94eTo6Y29udmVydFNWR09iamVjdFdpdGhDb250ZXh0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogb2JqZWN0KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+
IFY4RE9NV3JhcHBlcjo6Y29udmVydFNWR09iamVjdFdpdGhDb250ZXh0VG9WOE9iamVjdChWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdm9pZCogb2JqZWN0KQogewogICAgIGlmICgh
b2JqZWN0KQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKQEAgLTQxNiwxNyArNDE2LDE3IEBA
IHZvaWQgVjhQcm94eTo6ZGVzdHJveUdsb2JhbCgpCiB9CiAKIAotYm9vbCBWOFByb3h5Ojpkb21P
YmplY3RIYXNKU1dyYXBwZXIodm9pZCogb2JqZWN0KQorYm9vbCBWOERPTVdyYXBwZXI6OmRvbU9i
amVjdEhhc0pTV3JhcHBlcih2b2lkKiBvYmplY3QpCiB7CiAgICAgcmV0dXJuIGdldERPTU9iamVj
dE1hcCgpLmNvbnRhaW5zKG9iamVjdCkgfHwgZ2V0QWN0aXZlRE9NT2JqZWN0TWFwKCkuY29udGFp
bnMob2JqZWN0KTsKIH0KIAogLy8gVGhlIGNhbGxlciBtdXN0IGhhdmUgaW5jcmVhc2VkIG9iaidz
IHJlZiBjb3VudC4KLXZvaWQgVjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KHZvaWQq
IG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKK3ZvaWQgVjhET01X
cmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qodm9pZCogb2JqZWN0LCB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogewotICAgIEFTU0VSVChtYXliZURPTVdyYXBwZXIo
d3JhcHBlcikpOworICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcih3cmFw
cGVyKSk7CiAjaWZuZGVmIE5ERUJVRwotICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0
eXBlID0gVjhQcm94eTo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CisgICAgVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBw
ZXIpOwogICAgIHN3aXRjaCAodHlwZSkgewogI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwgTkFNRSkg
Y2FzZSBWOENsYXNzSW5kZXg6OlRZUEU6CiAgICAgICAgIEFDVElWRV9ET01fT0JKRUNUX1RZUEVT
KE1BS0VfQ0FTRSkKQEAgLTQ0MCwxMSArNDQwLDExIEBAIHZvaWQgVjhQcm94eTo6c2V0SlNXcmFw
cGVyRm9yRE9NT2JqZWN0KHZvaWQqIG9iamVjdCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4K
IH0KIAogLy8gVGhlIGNhbGxlciBtdXN0IGhhdmUgaW5jcmVhc2VkIG9iaidzIHJlZiBjb3VudC4K
LXZvaWQgVjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2JqZWN0KHZvaWQqIG9iamVj
dCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKK3ZvaWQgVjhET01XcmFwcGVy
OjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3Qodm9pZCogb2JqZWN0LCB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0PiB3cmFwcGVyKQogewotICAgIEFTU0VSVChtYXliZURPTVdyYXBwZXIo
d3JhcHBlcikpOworICAgIEFTU0VSVChWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcih3cmFw
cGVyKSk7CiAjaWZuZGVmIE5ERUJVRwotICAgIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSB0
eXBlID0gVjhQcm94eTo6ZG9tV3JhcHBlclR5cGUod3JhcHBlcik7CisgICAgVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlIHR5cGUgPSBWOERPTVdyYXBwZXI6OmRvbVdyYXBwZXJUeXBlKHdyYXBw
ZXIpOwogICAgIHN3aXRjaCAodHlwZSkgewogI2RlZmluZSBNQUtFX0NBU0UoVFlQRSwgTkFNRSkg
Y2FzZSBWOENsYXNzSW5kZXg6OlRZUEU6IGJyZWFrOwogICAgICAgICBBQ1RJVkVfRE9NX09CSkVD
VF9UWVBFUyhNQUtFX0NBU0UpCkBAIC00NTcsOSArNDU3LDkgQEAgdm9pZCBWOFByb3h5OjpzZXRK
U1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3Qodm9pZCogb2JqZWN0LCB2ODo6UGVyc2lzdGVudDx2
ODo6T2IKIH0KIAogLy8gVGhlIGNhbGxlciBtdXN0IGhhdmUgaW5jcmVhc2VkIG5vZGUncyByZWYg
Y291bnQuCi12b2lkIFY4UHJveHk6OnNldEpTV3JhcHBlckZvckRPTU5vZGUoTm9kZSogbm9kZSwg
djg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD4gd3JhcHBlcikKK3ZvaWQgVjhET01XcmFwcGVyOjpz
ZXRKU1dyYXBwZXJGb3JET01Ob2RlKE5vZGUqIG5vZGUsIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmpl
Y3Q+IHdyYXBwZXIpCiB7Ci0gICAgQVNTRVJUKG1heWJlRE9NV3JhcHBlcih3cmFwcGVyKSk7Cisg
ICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKHdyYXBwZXIpKTsKICAgICBn
ZXRET01Ob2RlTWFwKCkuc2V0KG5vZGUsIHdyYXBwZXIpOwogfQogCkBAIC02MjksOSArNjI5LDkg
QEAgdm9pZCBWOFByb3h5OjpldmFsdWF0ZUluTmV3Q29udGV4dChjb25zdCBWZWN0b3I8U2NyaXB0
U291cmNlQ29kZT4mIHNvdXJjZXMpCiAgICAgLy8gU2V0IHVwIHRoZSBET00gd2luZG93IGFzIHRo
ZSBwcm90b3R5cGUgb2YgdGhlIG5ldyBnbG9iYWwgb2JqZWN0LgogICAgIHY4OjpIYW5kbGU8djg6
OkNvbnRleHQ+IHdpbmRvd0NvbnRleHQgPSBtX2NvbnRleHQ7CiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB3aW5kb3dHbG9iYWwgPSB3aW5kb3dDb250ZXh0LT5HbG9iYWwoKTsKLSAgICB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gd2luZG93V3JhcHBlciA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBw
ZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIHdpbmRvd0dsb2JhbCk7CisgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHdpbmRvd1dyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBw
ZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIHdpbmRvd0dsb2JhbCk7CiAKLSAgICBBU1NFUlQo
VjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxET01XaW5kb3c+KHdpbmRvd1dyYXBw
ZXIpID09IG1fZnJhbWUtPmRvbVdpbmRvdygpKTsKKyAgICBBU1NFUlQoVjhET01XcmFwcGVyOjpj
b252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPERPTVdpbmRvdz4od2luZG93V3JhcHBlcikgPT0gbV9m
cmFtZS0+ZG9tV2luZG93KCkpOwogCiAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNv
bnRleHQgPSBjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSk7CiAgICAg
djg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShjb250ZXh0KTsKQEAgLTgxNyw3ICs4MTcs
NyBAQCB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBWOFByb3h5OjpnZXRDb25zdHJ1Y3RvcihWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZQogICAgIC8vIGZ1bmN0aW9uIGlzIGNvbnN0cnVj
dGVkIGluIHRoZSBjb250ZXh0IGNvcnJlc3BvbmRpbmcgdG8KICAgICAvLyB0aGlzIHByb3h5Lgog
ICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShtX2NvbnRleHQpOwotICAgIHY4OjpIYW5kbGU8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGZ1bmN0aW9uVGVtcGxhdGUgPSBnZXRUZW1wbGF0ZSh0eXBl
KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvblRlbXBsYXRl
ID0gVjhET01XcmFwcGVyOjpnZXRUZW1wbGF0ZSh0eXBlKTsKICAgICAvLyBHZXR0aW5nIHRoZSBm
dW5jdGlvbiBtaWdodCBmYWlsIGlmIHdlJ3JlIHJ1bm5pbmcgb3V0IG9mCiAgICAgLy8gc3RhY2sg
b3IgbWVtb3J5LgogICAgIHY4OjpUcnlDYXRjaCB0cnlDYXRjaDsKQEAgLTg3Myw3ICs4NzMsNyBA
QCBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IENvbnN0cnVjdG9yVG9TdHJpbmcoY29uc3Qg
djg6OkFyZ3VtZW50cyYgYXJncykKICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb24+
OjpDYXN0KHZhbHVlKS0+Q2FsbChhcmdzLlRoaXMoKSwgMCwgMCk7CiB9CiAKLXY4OjpQZXJzaXN0
ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBWOFByb3h5OjpnZXRUZW1wbGF0ZShWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUgdHlwZSkKK3Y4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPiBWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSB0eXBlKQogewogICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiogY2Fj
aGVDZWxsID0gVjhDbGFzc0luZGV4OjpHZXRDYWNoZSh0eXBlKTsKICAgICBpZiAoIWNhY2hlQ2Vs
bC0+SXNFbXB0eSgpKQpAQCAtMTE1OCw5ICsxMTU4LDkgQEAgRE9NV2luZG93KiBWOFByb3h5Ojpy
ZXRyaWV2ZVdpbmRvdyh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBjb250ZXh0KQogewogICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29udGV4dC0+R2xvYmFsKCk7CiAgICAgQVNT
RVJUKCFnbG9iYWwuSXNFbXB0eSgpKTsKLSAgICBnbG9iYWwgPSBsb29rdXBET01XcmFwcGVyKFY4
Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBnbG9iYWwpOworICAgIGdsb2JhbCA9IFY4RE9NV3JhcHBl
cjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZ2xvYmFsKTsKICAg
ICBBU1NFUlQoIWdsb2JhbC5Jc0VtcHR5KCkpOwotICAgIHJldHVybiBjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZ2xvYmFsKTsKKyAgICBy
ZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENs
YXNzSW5kZXg6OkRPTVdJTkRPVywgZ2xvYmFsKTsKIH0KIAogRnJhbWUqIFY4UHJveHk6OnJldHJp
ZXZlRnJhbWUodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCkKQEAgLTEzMDgsNyArMTMw
OCw3IEBAIHZvaWQgVjhQcm94eTo6dXBkYXRlRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKQogICAgICAg
ICByZXR1cm47CiAgICAgfQogCi0gICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGRvY3VtZW50V3Jh
cHBlciA9IGNvbnZlcnROb2RlVG9WOE9iamVjdChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKKyAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZG9jdW1lbnRXcmFwcGVyID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0Tm9kZVRvVjhPYmplY3QobV9mcmFtZS0+ZG9jdW1lbnQoKSk7CiAKICAgICAvLyBJZiBpbnN0
YW50aWF0aW9uIG9mIHRoZSBkb2N1bWVudCB3cmFwcGVyIGZhaWxzLCBjbGVhciB0aGUgY2FjaGUK
ICAgICAvLyBhbmQgbGV0IHRoZSBET01XaW5kb3cgYWNjZXNzb3IgaGFuZGxlIGFjY2VzcyB0byB0
aGUgZG9jdW1lbnQuCkBAIC0xMzc2LDcgKzEzNzYsNyBAQCB2b2lkIFY4UHJveHk6OmNsZWFyRm9y
TmF2aWdhdGlvbigpCiAgICAgICAgIGNsZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKIAogICAg
ICAgICAvLyBUdXJuIG9uIGFjY2VzcyBjaGVjayBvbiB0aGUgb2xkIERPTVdpbmRvdyB3cmFwcGVy
LgotICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBsb29rdXBET01XcmFw
cGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBtX2dsb2JhbCk7CisgICAgICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihW
OENsYXNzSW5kZXg6OkRPTVdJTkRPVywgbV9nbG9iYWwpOwogICAgICAgICBBU1NFUlQoIXdyYXBw
ZXIuSXNFbXB0eSgpKTsKICAgICAgICAgd3JhcHBlci0+VHVybk9uQWNjZXNzQ2hlY2soKTsKIApA
QCAtMTU3OCwxMCArMTU3OCwxMCBAQCBib29sIFY4UHJveHk6Omluc3RhbGxET01XaW5kb3codjg6
OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCwgRE9NV2luZG93KiB3aW5kbwogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBXcmFwIHRoZSB3aW5kb3cuCi0gICAgc2V0RE9NV3JhcHBl
cihqc1dpbmRvdywgVjhDbGFzc0luZGV4OjpUb0ludChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyks
IHdpbmRvdyk7CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGpzV2luZG93LCBWOENs
YXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XKSwgd2luZG93KTsKIAogICAg
IHdpbmRvdy0+cmVmKCk7Ci0gICAgVjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KHdp
bmRvdywgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhqc1dpbmRvdykpOworICAgIFY4
RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KHdpbmRvdywgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD46Ok5ldyhqc1dpbmRvdykpOwogCiAgICAgLy8gSW5zZXJ0IHRoZSB3aW5k
b3cgaW5zdGFuY2UgYXMgdGhlIHByb3RvdHlwZSBvZiB0aGUgc2hhZG93IG9iamVjdC4KICAgICB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHY4R2xvYmFsID0gY29udGV4dC0+R2xvYmFsKCk7CkBAIC0x
NzE0LDcgKzE3MTQsNyBAQCB2b2lkIHNldERPTUV4Y2VwdGlvbkhlbHBlcihWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSwgUGFzc1JlZlB0cjxUPiBleGNlcAogICAgIGlmIChXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHk6OnJldHJpZXZlKCkpCiAgICAgICAgIHY4RXhjZXB0aW9uID0g
V29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpUb1Y4T2JqZWN0KHR5cGUsIGV4Y2VwdGlvbi5n
ZXQoKSk7CiAgICAgZWxzZQotICAgICAgICB2OEV4Y2VwdGlvbiA9IFY4UHJveHk6OmNvbnZlcnRU
b1Y4T2JqZWN0KHR5cGUsIGV4Y2VwdGlvbi5nZXQoKSk7CisgICAgICAgIHY4RXhjZXB0aW9uID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdCh0eXBlLCBleGNlcHRpb24uZ2V0KCkpOwog
CiAgICAgdjg6OlRocm93RXhjZXB0aW9uKHY4RXhjZXB0aW9uKTsKIH0KQEAgLTE3OTEsNyArMTc5
MSw3IEBAIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gVjhQcm94eTo6Y3VycmVudENvbnRleHQoKQog
ICAgIHJldHVybiB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpOwogfQogCi12ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlIHR5cGUsIHZvaWQqIGltcGwpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwg
dm9pZCogaW1wbCkKIHsKICAgICBBU1NFUlQodHlwZSAhPSBWOENsYXNzSW5kZXg6OkVWRU5UTElT
VEVORVIpOwogICAgIEFTU0VSVCh0eXBlICE9IFY4Q2xhc3NJbmRleDo6RVZFTlRUQVJHRVQpOwpA
QCAtMTkxMSwxMiArMTkxMSwxMiBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29u
dmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cAogICAgIHJldHVy
biByZXN1bHQ7CiB9CiAKLXZvaWQgVjhQcm94eTo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNlKEZy
YW1lKiBmcmFtZSwgY29uc3QgaW50IGludGVybmFsSW5kZXgsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4ganNPYmplY3QpCit2b2lkIFY4RE9NV3JhcHBlcjo6c2V0SGlkZGVuV2luZG93UmVmZXJlbmNl
KEZyYW1lKiBmcmFtZSwgY29uc3QgaW50IGludGVybmFsSW5kZXgsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4ganNPYmplY3QpCiB7CiAgICAgLy8gR2V0IERPTVdpbmRvdwogICAgIGlmICghZnJhbWUp
CiAgICAgICAgIHJldHVybjsgLy8gT2JqZWN0IG1pZ2h0IGJlIGRldGFjaGVkIGZyb20gd2luZG93
Ci0gICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gY29udGV4dChmcmFtZSk7
CisgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gdjhDb250ZXh0ID0gVjhQcm94eTo6Y29udGV4
dChmcmFtZSk7CiAgICAgaWYgKHY4Q29udGV4dC5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsK
IApAQCAtMTkyNCwyNiArMTkyNCwyNiBAQCB2b2lkIFY4UHJveHk6OnNldEhpZGRlbldpbmRvd1Jl
ZmVyZW5jZShGcmFtZSogZnJhbWUsIGNvbnN0IGludCBpbnRlcm5hbEluZGV4LCB2OAogCiAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwgPSB2OENvbnRleHQtPkdsb2JhbCgpOwogICAg
IC8vIExvb2sgZm9yIHJlYWwgRE9NIHdyYXBwZXIuCi0gICAgZ2xvYmFsID0gbG9va3VwRE9NV3Jh
cHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZ2xvYmFsKTsKKyAgICBnbG9iYWwgPSBWOERP
TVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGdsb2Jh
bCk7CiAgICAgQVNTRVJUKCFnbG9iYWwuSXNFbXB0eSgpKTsKICAgICBBU1NFUlQoZ2xvYmFsLT5H
ZXRJbnRlcm5hbEZpZWxkKGludGVybmFsSW5kZXgpLT5Jc1VuZGVmaW5lZCgpKTsKICAgICBnbG9i
YWwtPlNldEludGVybmFsRmllbGQoaW50ZXJuYWxJbmRleCwganNPYmplY3QpOwogfQogCi1WOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgVjhQcm94eTo6ZG9tV3JhcHBlclR5cGUodjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBvYmplY3QpCitWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgVjhET01X
cmFwcGVyOjpkb21XcmFwcGVyVHlwZSh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCkKIHsK
LSAgICBBU1NFUlQobWF5YmVET01XcmFwcGVyKG9iamVjdCkpOworICAgIEFTU0VSVChWOERPTVdy
YXBwZXI6Om1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gdHlwZSA9IG9iamVjdC0+R2V0SW50ZXJuYWxGaWVsZChWOEN1c3RvbTo6a0RPTVdyYXBwZXJU
eXBlSW5kZXgpOwogICAgIHJldHVybiBWOENsYXNzSW5kZXg6OkZyb21JbnQodHlwZS0+SW50MzJW
YWx1ZSgpKTsKIH0KIAotdm9pZCogVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0SW1wbChW
OENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9i
amVjdCkKK3ZvaWQqIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0SW1wbChWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVj
dCkKIHsKICAgICAvLyBOYXRpdmUgZXZlbnQgbGlzdGVuZXIgaXMgcGVyIGZyYW1lLCBpdCBjYW5u
b3QgYmUgaGFuZGxlZCBieSB0aGlzIGdlbmVyaWMgZnVuY3Rpb24uCiAgICAgQVNTRVJUKHR5cGUg
IT0gVjhDbGFzc0luZGV4OjpFVkVOVExJU1RFTkVSKTsKICAgICBBU1NFUlQodHlwZSAhPSBWOENs
YXNzSW5kZXg6OkVWRU5UVEFSR0VUKTsKIAotICAgIEFTU0VSVChtYXliZURPTVdyYXBwZXIob2Jq
ZWN0KSk7CisgICAgQVNTRVJUKFY4RE9NV3JhcHBlcjo6bWF5YmVET01XcmFwcGVyKG9iamVjdCkp
OwogCiAgICAgc3dpdGNoICh0eXBlKSB7CiAjZGVmaW5lIE1BS0VfQ0FTRShUWVBFLCBOQU1FKSBj
YXNlIFY4Q2xhc3NJbmRleDo6VFlQRToKQEAgLTE5NjgsMTcgKzE5NjgsMTcgQEAgdm9pZCogVjhQ
cm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0SW1wbChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5
cGUgdHlwZSwgdjg6OkgKIH0KIAogCi12b2lkKiBWOFByb3h5Ojpjb252ZXJ0VG9TVkdQT0RUeXBl
SW1wbChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IG9iamVjdCkKK3ZvaWQqIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvU1ZHUE9EVHlwZUltcGwo
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBv
YmplY3QpCiB7CiAgICAgcmV0dXJuIGlzV3JhcHBlck9mVHlwZShvYmplY3QsIHR5cGUpID8gY29u
dmVydERPTVdyYXBwZXJUb05hdGl2ZTx2b2lkPihvYmplY3QpIDogMDsKIH0KIAotdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6VjhX
cmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCit2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUgdHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogewogICAg
IGlmICh2YWx1ZS5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNl
cHRvcigpOwogCi0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZGVzY3JpcHRv
ciA9IFY4UHJveHk6OmdldFRlbXBsYXRlKHR5cGUpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IGRlc2NyaXB0b3IgPSBWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKHR5cGUp
OwogICAgIHdoaWxlICh2YWx1ZS0+SXNPYmplY3QoKSkgewogICAgICAgICB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3QodmFsdWUpOwog
ICAgICAgICBpZiAoZGVzY3JpcHRvci0+SGFzSW5zdGFuY2Uob2JqZWN0KSkKQEAgLTE5ODksNyAr
MTk4OSw3IEBAIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBl
cihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlwCiAgICAgcmV0dXJuIG5vdEhhbmRsZWRC
eUludGVyY2VwdG9yKCk7CiB9IAogCi12b2lkKiBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRv
Tm9kZUhlbHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCit2b2lkKiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlSGVscGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2
YWx1ZSkKIHsKICAgICBBU1NFUlQobWF5YmVET01XcmFwcGVyKHZhbHVlKSk7CiAKQEAgLTIwMDEs
NyArMjAwMSw3IEBAIHZvaWQqIFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlSGVscGVy
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKICAgICByZXR1cm4gZXh0cmFjdENQb2ludGVy
PE5vZGU+KHdyYXBwZXIpOwogfQogCi1QYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IFY4UHJveHk6Ondy
YXBOYXRpdmVOb2RlRmlsdGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBmaWx0ZXIpCitQYXNzUmVm
UHRyPE5vZGVGaWx0ZXI+IFY4RE9NV3JhcHBlcjo6d3JhcE5hdGl2ZU5vZGVGaWx0ZXIodjg6Okhh
bmRsZTx2ODo6VmFsdWU+IGZpbHRlcikKIHsKICAgICAvLyBBIE5vZGVGaWx0ZXIgaXMgdXNlZCB3
aGVuIHdhbGtpbmcgdGhyb3VnaCBhIERPTSB0cmVlIG9yIGl0ZXJhdGluZyB0cmVlCiAgICAgLy8g
bm9kZXMuCkBAIC0yMDE4LDcgKzIwMTgsNyBAQCBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IFY4UHJv
eHk6OndyYXBOYXRpdmVOb2RlRmlsdGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBmaWx0ZQogICAg
IHJldHVybiBOb2RlRmlsdGVyOjpjcmVhdGUoY29uZGl0aW9uKTsKIH0KIAotdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IFY4UHJveHk6Omluc3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBkZXNjcmlwdG9yVHlwZSwgVjhDbGFzc0luZGV4OjpW
OFdyYXBwZXJUeXBlIGNwdHJUeXBlLCB2b2lkKiBpbXBsKQordjg6OkxvY2FsPHY4OjpPYmplY3Q+
IFY4RE9NV3JhcHBlcjo6aW5zdGFudGlhdGVWOE9iamVjdChWOFByb3h5KiBwcm94eSwgVjhDbGFz
c0luZGV4OjpWOFdyYXBwZXJUeXBlIGRlc2NyaXB0b3JUeXBlLCBWOENsYXNzSW5kZXg6OlY4V3Jh
cHBlclR5cGUgY3B0clR5cGUsIHZvaWQqIGltcGwpCiB7CiAgICAgLy8gTWFrZSBhIHNwZWNpYWwg
Y2FzZSBmb3IgZG9jdW1lbnQuYWxsCiAgICAgaWYgKGRlc2NyaXB0b3JUeXBlID09IFY4Q2xhc3NJ
bmRleDo6SFRNTENPTExFQ1RJT04gJiYgc3RhdGljX2Nhc3Q8SFRNTENvbGxlY3Rpb24qPihpbXBs
KS0+dHlwZSgpID09IERvY0FsbCkKQEAgLTIwMzAsMTIgKzIwMzAsMTIgQEAgdjg6OkxvY2FsPHY4
OjpPYmplY3Q+IFY4UHJveHk6Omluc3RhbnRpYXRlVjhPYmplY3QoVjhQcm94eSogcHJveHksIFY4
Q2xhc3NJbmRleDoKICAgICBpZiAocHJveHkpCiAgICAgICAgIGluc3RhbmNlID0gcHJveHktPmNy
ZWF0ZVdyYXBwZXJGcm9tQ2FjaGUoZGVzY3JpcHRvclR5cGUpOwogICAgIGVsc2UgewotICAgICAg
ICB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBmdW5jdGlvbiA9IGdldFRlbXBsYXRlKGRlc2NyaXB0
b3JUeXBlKS0+R2V0RnVuY3Rpb24oKTsKKyAgICAgICAgdjg6OkxvY2FsPHY4OjpGdW5jdGlvbj4g
ZnVuY3Rpb24gPSBWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKGRlc2NyaXB0b3JUeXBlKS0+R2V0
RnVuY3Rpb24oKTsKICAgICAgICAgaW5zdGFuY2UgPSBTYWZlQWxsb2NhdGlvbjo6bmV3SW5zdGFu
Y2UoZnVuY3Rpb24pOwogICAgIH0KICAgICBpZiAoIWluc3RhbmNlLklzRW1wdHkoKSkgewogICAg
ICAgICAvLyBBdm9pZCBzZXR0aW5nIHRoZSBET00gd3JhcHBlciBmb3IgZmFpbGVkIGFsbG9jYXRp
b25zLgotICAgICAgICBzZXRET01XcmFwcGVyKGluc3RhbmNlLCBWOENsYXNzSW5kZXg6OlRvSW50
KGNwdHJUeXBlKSwgaW1wbCk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihp
bnN0YW5jZSwgVjhDbGFzc0luZGV4OjpUb0ludChjcHRyVHlwZSksIGltcGwpOwogICAgIH0KICAg
ICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC0yMDQ4LDcgKzIwNDgsNyBAQCB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhQcm94eTo6Y2hlY2tOZXdMZWdhbChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQogICAgIHJldHVybiBhcmdzLlRoaXMoKTsKIH0KIAotdm9pZCBWOFByb3h5OjpzZXRET01XcmFw
cGVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gb2JqZWN0LCBpbnQgdHlwZSwgdm9pZCogY3B0cikK
K3ZvaWQgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
b2JqZWN0LCBpbnQgdHlwZSwgdm9pZCogY3B0cikKIHsKICAgICBBU1NFUlQob2JqZWN0LT5JbnRl
cm5hbEZpZWxkQ291bnQoKSA+PSAyKTsKICAgICBvYmplY3QtPlNldEludGVybmFsRmllbGQoVjhD
dXN0b206OmtET01XcmFwcGVyT2JqZWN0SW5kZXgsIHdyYXBDUG9pbnRlcihjcHRyKSk7CkBAIC0y
MDU2LDcgKzIwNTYsNyBAQCB2b2lkIFY4UHJveHk6OnNldERPTVdyYXBwZXIodjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBvYmplY3QsIGludCB0eXBlLCB2b2lkKiBjcHRyKQogfQogCiAjaWZuZGVmIE5E
RUJVRwotYm9vbCBWOFByb3h5OjptYXliZURPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlKQorYm9vbCBWOERPTVdyYXBwZXI6Om1heWJlRE9NV3JhcHBlcih2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLklzRW1wdHkoKSB8fCAhdmFsdWUtPklz
T2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIwNzgsMTQgKzIwNzgsMTQgQEAg
Ym9vbCBWOFByb3h5OjptYXliZURPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVl
KQogfQogI2VuZGlmCiAKLWJvb2wgVjhQcm94eTo6aXNET01FdmVudFdyYXBwZXIodjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHZhbHVlKQorYm9vbCBWOERPTVdyYXBwZXI6OmlzRE9NRXZlbnRXcmFwcGVy
KHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSkKIHsKICAgICAvLyBBbGwga2luZHMgb2YgZXZl
bnRzIHVzZSBFVkVOVCBhcyBkb20gdHlwZSBpbiBKUyB3cmFwcGVycy4KICAgICAvLyBTZWUgRXZl
bnRUb1Y4T2JqZWN0CiAgICAgcmV0dXJuIGlzV3JhcHBlck9mVHlwZSh2YWx1ZSwgVjhDbGFzc0lu
ZGV4OjpFVkVOVCk7CiB9CiAKLWJvb2wgVjhQcm94eTo6aXNXcmFwcGVyT2ZUeXBlKHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB2YWx1ZSwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIGNsYXNzVHlw
ZSkKK2Jvb2wgVjhET01XcmFwcGVyOjppc1dyYXBwZXJPZlR5cGUodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgY2xhc3NUeXBlKQogewogICAg
IGlmICh2YWx1ZS5Jc0VtcHR5KCkgfHwgIXZhbHVlLT5Jc09iamVjdCgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC0yMTg3LDcgKzIxODcsNyBAQCBib29sIFY4UHJveHk6OmlzV3JhcHBlck9m
VHlwZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcAog
ICAgIG1hY3JvKHVsLCBVTElTVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAg
IG1hY3JvKHhtcCwgUFJFKQogCi1WOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgVjhQcm94eTo6
aHRtbEVsZW1lbnRUeXBlKEhUTUxFbGVtZW50KiBlbGVtZW50KQorVjhDbGFzc0luZGV4OjpWOFdy
YXBwZXJUeXBlIFY4RE9NV3JhcHBlcjo6aHRtbEVsZW1lbnRUeXBlKEhUTUxFbGVtZW50KiBlbGVt
ZW50KQogewogICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFY4Q2xhc3NJbmRleDo6VjhXcmFw
cGVyVHlwZT4gV3JhcHBlclR5cGVNYXA7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChXcmFwcGVy
VHlwZU1hcCwgd3JhcHBlclR5cGVNYXAsICgpKTsKQEAgLTIzMTksNyArMjMxOSw3IEBAIFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSBWOFByb3h5OjpodG1sRWxlbWVudFR5cGUoSFRNTEVsZW1l
bnQqIGVsZW1lbnQpCiAgICAgbWFjcm8odmlldywgVklFVykgXAogICAgIC8vIGVuZCBvZiBtYWNy
bwogCi1WOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgVjhQcm94eTo6c3ZnRWxlbWVudFR5cGUo
U1ZHRWxlbWVudCogZWxlbWVudCkKK1Y4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBWOERPTVdy
YXBwZXI6OnN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1lbnQqIGVsZW1lbnQpCiB7CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPFN0cmluZywgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlPiBXcmFwcGVyVHlw
ZU1hcDsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFdyYXBwZXJUeXBlTWFwLCB3cmFwcGVyVHlw
ZU1hcCwgKCkpOwpAQCAtMjMzOSw3ICsyMzM5LDcgQEAgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJU
eXBlIFY4UHJveHk6OnN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1lbnQqIGVsZW1lbnQpCiAKICNlbmRp
ZiAvLyBFTkFCTEUoU1ZHKQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29udmVy
dEV2ZW50VG9WOE9iamVjdChFdmVudCogZXZlbnQpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhE
T01XcmFwcGVyOjpjb252ZXJ0RXZlbnRUb1Y4T2JqZWN0KEV2ZW50KiBldmVudCkKIHsKICAgICBp
ZiAoIWV2ZW50KQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKQEAgLTI0MTUsNyArMjQxNSw3
IEBAIHN0YXRpYyBjb25zdCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgbWFwcGluZ1tdID0g
ewogfTsKIAogLy8gQ2FsbGVyIGNoZWNrcyBub2RlIGlzIG5vdCBudWxsLgotdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IFY4UHJveHk6OmNvbnZlcnROb2RlVG9WOE9iamVjdChOb2RlKiBub2RlKQordjg6
OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KE5v
ZGUqIG5vZGUpCiB7CiAgICAgaWYgKCFub2RlKQogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsK
QEAgLTI0MjksMTIgKzI0MjksMTIgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNv
bnZlcnROb2RlVG9WOE9iamVjdChOb2RlKiBub2RlKQogICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IG5vZGUtPmRvY3VtZW50KCk7CiAgICAgaWYgKGRvY3VtZW50KSB7CiAgICAgICAgIEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOwotICAgICAgICBwcm94eSA9IHJldHJpZXZlKGZyYW1l
KTsKKyAgICAgICAgcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2ZShmcmFtZSk7CiAgICAgICAgIGlm
IChwcm94eSkKICAgICAgICAgICAgIHByb3h5LT5pbml0Q29udGV4dElmTmVlZGVkKCk7CiAgICAg
fQogCi0gICAgRE9NV3JhcHBlck1hcDxOb2RlPiYgZG9tTm9kZU1hcCA9IHByb3h5ID8gcHJveHkt
Pm1fZG9tTm9kZU1hcCA6IGdldERPTU5vZGVNYXAoKTsKKyAgICBET01XcmFwcGVyTWFwPE5vZGU+
JiBkb21Ob2RlTWFwID0gcHJveHkgPyBwcm94eS0+ZG9tTm9kZU1hcCgpIDogZ2V0RE9NTm9kZU1h
cCgpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IGRvbU5vZGVNYXAuZ2V0
KG5vZGUpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFw
cGVyOwpAQCAtMjUxNiw3ICsyNTE2LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UHJveHk6
OmNvbnZlcnROb2RlVG9WOE9iamVjdChOb2RlKiBub2RlKQogLy8gMSkgRXZlbnRUYXJnZXROb2Rl
OyAyKSBET01XaW5kb3cgMykgWE1MSHR0cFJlcXVlc3Q7IDQpIE1lc3NhZ2VQb3J0OwogLy8gNSkg
WE1MSHR0cFJlcXVlc3RVcGxvYWQKIC8vIGNoZWNrIEV2ZW50VGFyZ2V0LmggZm9yIG5ldyB0eXBl
IGNvbnZlcnNpb24gbWV0aG9kcwotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNvbnZl
cnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRUYXJnZXQqIHRhcmdldCkKK3Y4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZl
bnRUYXJnZXQqIHRhcmdldCkKIHsKICAgICBpZiAoIXRhcmdldCkKICAgICAgICAgcmV0dXJuIHY4
OjpOdWxsKCk7CkBAIC0yNTY3LDcgKzI1NjcsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQ
cm94eTo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9iamVjdChFdmVudFRhcmdldCogdGFyZ2V0KQog
ICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogfQogCi12ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhQcm94eTo6Y29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KEV2ZW50TGlz
dGVuZXIqIGxpc3RlbmVyKQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29u
dmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyKQogewog
ICAgIGlmICghbGlzdGVuZXIpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwpAQCAtMjU3Nyw3
ICsyNTc3LDcgQEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNvbnZlcnRFdmVudExp
c3RlbmVyVG9WOE9iamVjdChFdmVudExpc3RlbmVyKiBsaXMKICAgICByZXR1cm4gdjhsaXN0ZW5l
ci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKIH0KIAotdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UHJv
eHk6OmNvbnZlcnRET01JbXBsZW1lbnRhdGlvblRvVjhPYmplY3QoRE9NSW1wbGVtZW50YXRpb24q
IGltcGwpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NSW1w
bGVtZW50YXRpb25Ub1Y4T2JqZWN0KERPTUltcGxlbWVudGF0aW9uKiBpbXBsKQogewogICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gcmVzdWx0ID0gaW5zdGFudGlhdGVWOE9iamVjdChWOENsYXNz
SW5kZXg6OkRPTUlNUExFTUVOVEFUSU9OLCBWOENsYXNzSW5kZXg6OkRPTUlNUExFTUVOVEFUSU9O
LCBpbXBsKTsKICAgICBpZiAocmVzdWx0LklzRW1wdHkoKSkgewpAQCAtMjU4OCw3ICsyNTg4LDcg
QEAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNvbnZlcnRET01JbXBsZW1lbnRhdGlv
blRvVjhPYmplY3QoRE9NSW1wbGVtZW50YXQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29udmVydFN0eWxlU2hlZXRUb1Y4T2JqZWN0KFN0
eWxlU2hlZXQqIHNoZWV0KQordjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFN0eWxlU2hlZXRUb1Y4T2JqZWN0KFN0eWxlU2hlZXQqIHNoZWV0KQogewogICAgIGlmICgh
c2hlZXQpCiAgICAgICAgIHJldHVybiB2ODo6TnVsbCgpOwpAQCAtMjYxOCw3ICsyNjE4LDcgQEAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNvbnZlcnRTdHlsZVNoZWV0VG9WOE9iamVj
dChTdHlsZVNoZWV0KiBzaGVldCkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29udmVydENTU1ZhbHVlVG9WOE9iamVjdChDU1NWYWx1ZSog
dmFsdWUpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0Q1NTVmFs
dWVUb1Y4T2JqZWN0KENTU1ZhbHVlKiB2YWx1ZSkKIHsKICAgICBpZiAoIXZhbHVlKQogICAgICAg
ICByZXR1cm4gdjg6Ok51bGwoKTsKQEAgLTI2NTQsNyArMjY1NCw3IEBAIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBWOFByb3h5Ojpjb252ZXJ0Q1NTVmFsdWVUb1Y4T2JqZWN0KENTU1ZhbHVlKiB2YWx1
ZSkKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQcm94
eTo6Y29udmVydENTU1J1bGVUb1Y4T2JqZWN0KENTU1J1bGUqIHJ1bGUpCit2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpjb252ZXJ0Q1NTUnVsZVRvVjhPYmplY3QoQ1NTUnVsZSog
cnVsZSkKIHsKICAgICBpZiAoIXJ1bGUpIAogICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKQEAg
LTI3MDcsNyArMjcwNyw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFByb3h5Ojpjb252ZXJ0
Q1NTUnVsZVRvVjhPYmplY3QoQ1NTUnVsZSogcnVsZSkKICAgICByZXR1cm4gcmVzdWx0OwogfQog
Ci12ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhQcm94eTo6Y29udmVydFdpbmRvd1RvVjhPYmplY3Qo
RE9NV2luZG93KiB3aW5kb3cpCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhET01XcmFwcGVyOjpj
b252ZXJ0V2luZG93VG9WOE9iamVjdChET01XaW5kb3cqIHdpbmRvdykKIHsKICAgICBpZiAoIXdp
bmRvdykKICAgICAgICAgcmV0dXJuIHY4OjpOdWxsKCk7CkBAIC0yNzI0LDE0ICsyNzI0LDE0IEBA
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOFByb3h5Ojpjb252ZXJ0V2luZG93VG9WOE9iamVjdChE
T01XaW5kb3cqIHdpbmRvdykKICAgICAvLyBuZWNlc3NhcmlseSB0aGUgZmlyc3QgZ2xvYmFsIG9i
amVjdCBhc3NvY2lhdGVkIHdpdGggdGhhdCBET01XaW5kb3cuCiAgICAgdjg6OkhhbmRsZTx2ODo6
Q29udGV4dD4gY3VycmVudENvbnRleHQgPSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpOwogICAg
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3VycmVudEdsb2JhbCA9IGN1cnJlbnRDb250ZXh0LT5H
bG9iYWwoKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdpbmRvd1dyYXBwZXIgPSBsb29r
dXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBjdXJyZW50R2xvYmFsKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdpbmRvd1dyYXBwZXIgPSBWOERPTVdyYXBwZXI6Omxv
b2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGN1cnJlbnRHbG9iYWwpOwog
ICAgIGlmICghd2luZG93V3JhcHBlci5Jc0VtcHR5KCkpIHsKICAgICAgICAgaWYgKGNvbnZlcnRE
T01XcmFwcGVyVG9OYXRpdmU8RE9NV2luZG93Pih3aW5kb3dXcmFwcGVyKSA9PSB3aW5kb3cpCiAg
ICAgICAgICAgICByZXR1cm4gY3VycmVudEdsb2JhbDsKICAgICB9CiAKICAgICAvLyBPdGhlcndp
c2UsIHJldHVybiB0aGUgZ2xvYmFsIG9iamVjdCBhc3NvY2lhdGVkIHdpdGggdGhpcyBmcmFtZS4K
LSAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBjb250ZXh0KGZyYW1lKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB2OENvbnRleHQgPSBWOFByb3h5Ojpjb250ZXh0
KGZyYW1lKTsKICAgICBpZiAodjhDb250ZXh0LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4oKTsKIApAQCAtMjc0OSw3ICsyNzQ5LDcgQEAgdm9pZCBWOFBy
b3h5OjpiaW5kSnNPYmplY3RUb1dpbmRvdyhGcmFtZSogZnJhbWUsIGNvbnN0IGNoYXIqIG5hbWUs
IGludCB0eXBlLCB2ODoKIAogICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZSh2OENvbnRleHQp
OwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaW5zdGFuY2UgPSBkZXNjcmlwdG9yLT5HZXRG
dW5jdGlvbigpOwotICAgIHNldERPTVdyYXBwZXIoaW5zdGFuY2UsIHR5cGUsIGltcGwpOworICAg
IFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihpbnN0YW5jZSwgdHlwZSwgaW1wbCk7CiAKICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGdsb2JhbCA9IHY4Q29udGV4dC0+R2xvYmFsKCk7CiAg
ICAgZ2xvYmFsLT5TZXQodjg6OlN0cmluZzo6TmV3KG5hbWUpLCBpbnN0YW5jZSk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4UHJveHkuaCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
VjhQcm94eS5oCmluZGV4IGQ3ZTVkMTQuLmUxNzA4ZWUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvVjhQcm94eS5oCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhQcm94eS5oCkBA
IC0zMTUsNzMgKzMxNSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGNoZWNrTmV3TGVnYWwoY29uc3Qgdjg6OkFyZ3VtZW50cyYp
OwogCi0gICAgICAgIC8vIENyZWF0ZSBhIFY4IHdyYXBwZXIgZm9yIGEgQyBwb2ludGVyCi0gICAg
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcENQb2ludGVyKHZvaWQqIGNwdHIp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgIC8vIFJlcHJlc2VudCB2b2lkKiBhcyBpbnQKLSAgICAg
ICAgICAgIGludCBhZGRyID0gcmVpbnRlcnByZXRfY2FzdDxpbnQ+KGNwdHIpOwotICAgICAgICAg
ICAgQVNTRVJUKCEoYWRkciAmIDB4MDEpKTsgLy8gVGhlIGFkZHJlc3MgbXVzdCBiZSBhbGlnbmVk
LgotICAgICAgICAgICAgcmV0dXJuIHY4OjpJbnRlZ2VyOjpOZXcoYWRkciA+PiAxKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIC8vIFRha2UgQyBwb2ludGVyIG91dCBvZiBhIHY4IHdyYXBwZXIuCi0g
ICAgICAgIHRlbXBsYXRlIDxjbGFzcyBDPgotICAgICAgICBzdGF0aWMgQyogZXh0cmFjdENQb2lu
dGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPiBvYmopCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxDKj4oZXh0cmFjdENQb2ludGVySW1wbChvYmopKTsKLSAgICAgICAg
fQotCiAgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpTY3JpcHQ+IGNvbXBpbGVTY3JpcHQo
djg6OkhhbmRsZTx2ODo6U3RyaW5nPiBjb2RlLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBpbnQg
YmFzZUxpbmUpOwogCi0jaWZuZGVmIE5ERUJVRwotICAgICAgICAvLyBDaGVja3MgaWYgYSB2OCB2
YWx1ZSBjYW4gYmUgYSBET00gd3JhcHBlcgotICAgICAgICBzdGF0aWMgYm9vbCBtYXliZURPTVdy
YXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKLSNlbmRpZgotCi0gICAgICAgIC8vIFNldHMg
Y29udGVudHMgb2YgYSBET00gd3JhcHBlci4KLSAgICAgICAgc3RhdGljIHZvaWQgc2V0RE9NV3Jh
cHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCBpbnQgdHlwZSwgdm9pZCogcHRyKTsKLQotICAg
ICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBsb29rdXBET01XcmFwcGVyKFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKLQotICAgICAg
ICAvLyBBIGhlbHBlciBmdW5jdGlvbiBleHRyYWN0IG5hdGl2ZSBvYmplY3QgcG9pbnRlciBmcm9t
IGEgRE9NIHdyYXBwZXIKLSAgICAgICAgLy8gYW5kIGNhc3QgdG8gdGhlIHNwZWNpZmllZCB0eXBl
LgotICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KLSAgICAgICAgc3RhdGljIEMqIGNvbnZlcnRE
T01XcmFwcGVyVG9OYXRpdmUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IG9iamVjdCkKLSAgICAgICAg
ewotICAgICAgICAgICAgQVNTRVJUKG1heWJlRE9NV3JhcHBlcihvYmplY3QpKTsKLSAgICAgICAg
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBwdHIgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpD
YXN0KG9iamVjdCktPkdldEludGVybmFsRmllbGQoVjhDdXN0b206OmtET01XcmFwcGVyT2JqZWN0
SW5kZXgpOwotICAgICAgICAgICAgcmV0dXJuIGV4dHJhY3RDUG9pbnRlcjxDPihwdHIpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgLy8gQSBoZWxwIGZ1bmN0aW9uIGV4dHJhY3QgYSBub2RlIHR5cGUg
cG9pbnRlciBmcm9tIGEgRE9NIHdyYXBwZXIuCi0gICAgICAgIC8vIFdyYXBwZWQgcG9pbnRlciBt
dXN0IGJlIGNhc3QgdG8gTm9kZSogZmlyc3QuCi0gICAgICAgIHN0YXRpYyB2b2lkKiBjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZUhlbHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4pOwotCi0gICAgICAg
IHRlbXBsYXRlIDxjbGFzcyBDPgotICAgICAgICBzdGF0aWMgQyogY29udmVydERPTVdyYXBwZXJU
b05vZGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQotICAgICAgICB7Ci0gICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8Qyo+KGNvbnZlcnRET01XcmFwcGVyVG9Ob2RlSGVscGVyKHZh
bHVlKSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgICAg
ICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6VjhXcmFwcGVyVHlwZSB0eXBlLCBQYXNzUmVmUHRyPFQ+IGltcCkKLSAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRUb1Y4T2JqZWN0KHR5cGUsIGltcC5nZXQoKSk7Ci0g
ICAgICAgIH0KLQotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRU
b1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgdm9pZCopOwotCi0gICAgICAg
IC8vIEZhc3QtcGF0aCBmb3IgTm9kZSBvYmplY3RzLgotICAgICAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGNvbnZlcnROb2RlVG9WOE9iamVjdChOb2RlKik7Ci0KLSAgICAgICAgdGVt
cGxhdGUgPGNsYXNzIEM+Ci0gICAgICAgIHN0YXRpYyBDKiBjb252ZXJ0VG9OYXRpdmVPYmplY3Qo
VjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlIHR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBv
YmplY3QpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxDKj4oY29u
dmVydFRvTmF0aXZlT2JqZWN0SW1wbCh0eXBlLCBvYmplY3QpKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHN0YXRpYyBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZG9tV3JhcHBlclR5cGUodjg6
OkhhbmRsZTx2ODo6T2JqZWN0Pik7Ci0KICAgICAgICAgLy8gSWYgdGhlIGV4Y2VwdGlvbiBjb2Rl
IGlzIGRpZmZlcmVudCBmcm9tIHplcm8sIGEgRE9NIGV4Y2VwdGlvbiBpcwogICAgICAgICAvLyBz
Y2hlZHVsZSB0byBiZSB0aHJvd24uCiAgICAgICAgIHN0YXRpYyB2b2lkIHNldERPTUV4Y2VwdGlv
bihpbnQgZXhjZXB0aW9uQ29kZSk7CkBAIC0zOTMsNTEgKzMyOCwxNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIC8vIGFzIGEgbmFtZWQgcHJvcGVydHkuIFVzZWQgYnkgdjhfdGVzdF9z
aGVsbC4KICAgICAgICAgc3RhdGljIHZvaWQgYmluZEpzT2JqZWN0VG9XaW5kb3coRnJhbWUqLCBj
b25zdCBjaGFyKiBuYW1lLCBpbnQgdHlwZSwgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT4sIHZvaWQqKTsKIAotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZl
cnRFdmVudFRvVjhPYmplY3QoRXZlbnQqKTsKLQotICAgICAgICBzdGF0aWMgRXZlbnQqIGNvbnZl
cnRUb05hdGl2ZUV2ZW50KHY4OjpIYW5kbGU8djg6OlZhbHVlPiBqc0V2ZW50KQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZiAoIWlzRE9NRXZlbnRXcmFwcGVyKGpzRXZlbnQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgcmV0dXJuIGNvbnZlcnRET01XcmFwcGVyVG9O
YXRpdmU8RXZlbnQ+KGpzRXZlbnQpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RhdGljIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRUYXJnZXRUb1Y4T2JqZWN0KEV2ZW50VGFyZ2V0
Kik7Ci0gICAgICAgIC8vIFdyYXAgYW5kIHVud3JhcCBKUyBldmVudCBsaXN0ZW5lcnMuCi0gICAg
ICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50TGlzdGVuZXJUb1Y4
T2JqZWN0KEV2ZW50TGlzdGVuZXIqKTsKLQotICAgICAgICAvLyBET01JbXBsZW1lbnRhdGlvbiBp
cyBhIHNpbmdsZXRvbiBhbmQgaXQgaXMgaGFuZGxlZCBpbiBhIHNwZWNpYWwKLSAgICAgICAgLy8g
d2F5LiBBIHdyYXBwZXIgaXMgZ2VuZXJhdGVkIHBlciBkb2N1bWVudCBhbmQgc3RvcmVkIGluIGFu
Ci0gICAgICAgIC8vIGludGVybmFsIGZpZWxkIG9mIHRoZSBkb2N1bWVudC4KLSAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RE9NSW1wbGVtZW50YXRpb25Ub1Y4T2Jq
ZWN0KERPTUltcGxlbWVudGF0aW9uKik7Ci0KLSAgICAgICAgLy8gV3JhcCBKUyBub2RlIGZpbHRl
ciBpbiBDKysuCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPE5vZGVGaWx0ZXI+IHdyYXBOYXRp
dmVOb2RlRmlsdGVyKHY4OjpIYW5kbGU8djg6OlZhbHVlPik7Ci0KLSAgICAgICAgc3RhdGljIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBnZXRUZW1wbGF0ZShWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUpOwotCiAgICAgICAgIHRlbXBsYXRlIDxpbnQgdGFnLCB0eXBlbmFt
ZSBUPgogICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnN0cnVjdERPTU9i
amVjdChjb25zdCB2ODo6QXJndW1lbnRzJik7CiAKLSAgICAgICAgLy8gQ2hlY2tzIHdoZXRoZXIg
YSBET00gb2JqZWN0IGhhcyBhIEpTIHdyYXBwZXIuCi0gICAgICAgIHN0YXRpYyBib29sIGRvbU9i
amVjdEhhc0pTV3JhcHBlcih2b2lkKik7Ci0gICAgICAgIC8vIFNldCBKUyB3cmFwcGVyIG9mIGEg
RE9NIG9iamVjdCwgdGhlIGNhbGxlciBpbiBjaGFyZ2Ugb2YgaW5jcmVhc2UgcmVmLgotICAgICAg
ICBzdGF0aWMgdm9pZCBzZXRKU1dyYXBwZXJGb3JET01PYmplY3Qodm9pZCosIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3Q+KTsKLSAgICAgICAgc3RhdGljIHZvaWQgc2V0SlNXcmFwcGVyRm9yQWN0
aXZlRE9NT2JqZWN0KHZvaWQqLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7Ci0gICAgICAg
IHN0YXRpYyB2b2lkIHNldEpTV3JhcHBlckZvckRPTU5vZGUoTm9kZSosIHY4OjpQZXJzaXN0ZW50
PHY4OjpPYmplY3Q+KTsKLQogICAgICAgICAvLyBQcm9jZXNzIGFueSBwZW5kaW5nIEphdmFTY3Jp
cHQgY29uc29sZSBtZXNzYWdlcy4KICAgICAgICAgc3RhdGljIHZvaWQgcHJvY2Vzc0NvbnNvbGVN
ZXNzYWdlcygpOwogCi0gICAgICAgIC8vIENoZWNrIHdoZXRoZXIgYSBWOCB2YWx1ZSBpcyBhIHdy
YXBwZXIgb2YgdHlwZSB8Y2xhc3NUeXBlfC4KLSAgICAgICAgc3RhdGljIGJvb2wgaXNXcmFwcGVy
T2ZUeXBlKHY4OjpIYW5kbGU8djg6OlZhbHVlPiwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBl
KTsKLQogICAgICAgICAvLyBGdW5jdGlvbiBmb3IgcmV0cmlldmluZyB0aGUgbGluZSBudW1iZXIg
YW5kIHNvdXJjZSBuYW1lIGZvciB0aGUgdG9wCiAgICAgICAgIC8vIEphdmFTY3JpcHQgc3RhY2sg
ZnJhbWUuCiAgICAgICAgIHN0YXRpYyBpbnQgc291cmNlTGluZU51bWJlcigpOwogICAgICAgICBz
dGF0aWMgU3RyaW5nIHNvdXJjZU5hbWUoKTsKIAotCiAgICAgICAgIC8vIFJldHVybnMgYSBsb2Nh
bCBoYW5kbGUgb2YgdGhlIGNvbnRleHQuCiAgICAgICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4g
Y29udGV4dCgpCiAgICAgICAgIHsKQEAgLTQ1MywyMSArMzU0LDIxIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICAgICAgICAgLy8gb2YgdGhlIHY4OjpFeHRlbnNpb24gb2JqZWN0IHBhc3NlZC4KICAg
ICAgICAgc3RhdGljIHZvaWQgcmVnaXN0ZXJFeHRlbnNpb24odjg6OkV4dGVuc2lvbiosIGNvbnN0
IFN0cmluZyYgc2NoZW1lUmVzdHJpY3Rpb24pOwogCi0gICAgICAgIHN0YXRpYyB2b2lkKiBjb252
ZXJ0VG9TVkdQT0RUeXBlSW1wbChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHY4OjpIYW5k
bGU8djg6OlZhbHVlPik7Ci0KICAgICAgICAgLy8gRklYTUU6IFNlcGFyYXRlIHRoZXNlIGNvbmNl
cm5zIGZyb20gVjhQcm94eT8KICAgICAgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IGNy
ZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBnbG9iYWwpOwogICAgICAgICBi
b29sIGluc3RhbGxET01XaW5kb3codjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCwgRE9N
V2luZG93KiB3aW5kb3cpOwogCisgICAgICAgIHZvaWQgaW5pdENvbnRleHRJZk5lZWRlZCgpOwor
ICAgICAgICBET01XcmFwcGVyTWFwPE5vZGU+JiBkb21Ob2RlTWFwKCkgeyByZXR1cm4gbV9kb21O
b2RlTWFwOyB9CisgICAgICAgIHZvaWQgdXBkYXRlRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB3cmFwcGVyKTsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBrQ29udGV4dERlYnVnRGF0YVR5cGU7CiAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBrQ29udGV4dERlYnVnRGF0YVZhbHVlOwogCi0gICAgICAgIHZvaWQgaW5pdENvbnRleHRJZk5l
ZWRlZCgpOwogICAgICAgICB2b2lkIGRpc2Nvbm5lY3RFdmVudExpc3RlbmVycygpOwogICAgICAg
ICB2b2lkIHNldFNlY3VyaXR5VG9rZW4oKTsKICAgICAgICAgdm9pZCBjbGVhckRvY3VtZW50V3Jh
cHBlcigpOwotICAgICAgICB2b2lkIHVwZGF0ZURvY3VtZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gd3JhcHBlcik7CiAKICAgICAgICAgLy8gVGhlIEphdmFTY3JpcHQgd3JhcHBlciBm
b3IgdGhlIGRvY3VtZW50IG9iamVjdCBpcyBjYWNoZWQgb24gdGhlIGdsb2JhbAogICAgICAgICAv
LyBvYmplY3QgZm9yIGZhc3QgYWNjZXNzLiBVcGRhdGVEb2N1bWVudFdyYXBwZXJDYWNoZSBzZXRz
IHRoZSB3cmFwcGVyCkBAIC00ODEsNTEgKzM4Miw2IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
ICAgICAgICBzdGF0aWMgYm9vbCBjYW5BY2Nlc3NQcml2YXRlKERPTVdpbmRvdyopOwogCi0gICAg
ICAgIC8vIENoZWNrIHdoZXRoZXIgYSBWOCB2YWx1ZSBpcyBhIERPTSBFdmVudCB3cmFwcGVyLgot
ICAgICAgICBzdGF0aWMgYm9vbCBpc0RPTUV2ZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4pOwotCi0gICAgICAgIHN0YXRpYyB2b2lkKiBjb252ZXJ0VG9OYXRpdmVPYmplY3RJbXBsKFY4
Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKLQotICAg
ICAgICAvLyBUYWtlIEMgcG9pbnRlciBvdXQgb2YgYSB2OCB3cmFwcGVyLgotICAgICAgICBzdGF0
aWMgdm9pZCogZXh0cmFjdENQb2ludGVySW1wbCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0
KQotICAgICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQob2JqZWN0LT5Jc051bWJlcigpKTsKLSAg
ICAgICAgICAgIGludCBhZGRyID0gb2JqZWN0LT5JbnQzMlZhbHVlKCk7Ci0gICAgICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oYWRkciA8PCAxKTsKLSAgICAgICAgfQotCi0K
LSAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0U3R5bGVTaGVldFRv
VjhPYmplY3QoU3R5bGVTaGVldCopOwotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNvbnZlcnRDU1NWYWx1ZVRvVjhPYmplY3QoQ1NTVmFsdWUqKTsKLSAgICAgICAgc3RhdGlj
IHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0Q1NTUnVsZVRvVjhPYmplY3QoQ1NTUnVsZSop
OwotICAgICAgICAvLyBSZXR1cm5zIHRoZSBKUyB3cmFwcGVyIG9mIGEgd2luZG93IG9iamVjdCwg
aW5pdGlhbGl6ZXMgdGhlIGVudmlyb25tZW50Ci0gICAgICAgIC8vIG9mIHRoZSB3aW5kb3cgZnJh
bWUgaWYgbmVlZGVkLgotICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZl
cnRXaW5kb3dUb1Y4T2JqZWN0KERPTVdpbmRvdyopOwotCi0jaWYgRU5BQkxFKFNWRykKLSAgICAg
ICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0U1ZHRWxlbWVudEluc3RhbmNl
VG9WOE9iamVjdChTVkdFbGVtZW50SW5zdGFuY2UqKTsKLSAgICAgICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjb252ZXJ0U1ZHT2JqZWN0V2l0aENvbnRleHRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6VjhXcmFwcGVyVHlwZSwgdm9pZCopOwotI2VuZGlmCi0KLSAgICAgICAgLy8gU2V0
IGhpZGRlbiByZWZlcmVuY2VzIGluIGEgRE9NV2luZG93IG9iamVjdCBvZiBhIGZyYW1lLgotICAg
ICAgICBzdGF0aWMgdm9pZCBzZXRIaWRkZW5XaW5kb3dSZWZlcmVuY2UoRnJhbWUqLCBjb25zdCBp
bnQgaW50ZXJuYWxJbmRleCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7Ci0KLSAgICAgICAgc3Rh
dGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBodG1sRWxlbWVudFR5cGUoSFRNTEVsZW1l
bnQqKTsKLQotICAgICAgICAvLyBUaGUgZmlyc3QgVjhXcmFwcGVyVHlwZSBzcGVjaWZpZXMgdGhl
IGZ1bmN0aW9uIGRlc2NyaXB0b3IKLSAgICAgICAgLy8gdXNlZCB0byBjcmVhdGUgSlMgb2JqZWN0
LiBUaGUgc2Vjb25kIFY4V3JhcHBlclR5cGUgc3BlY2lmaWVzCi0gICAgICAgIC8vIHRoZSBhY3R1
YWwgdHlwZSBvZiB0aGUgdm9pZCogZm9yIHR5cGUgY2FzdGluZy4KLSAgICAgICAgLy8gRm9yIGV4
YW1wbGUsIGEgSFRNTCBlbGVtZW50IGhhcyBIVE1MRUxFTUVOVCBmb3IgdGhlIGZpcnN0IFY4V3Jh
cHBlclR5cGUsIGJ1dCBhbHdheXMKLSAgICAgICAgLy8gdXNlIE5PREUgYXMgdGhlIHNlY29uZCBW
OFdyYXBwZXJUeXBlLiBKUyB3cmFwcGVyIHN0b3JlcyB0aGUgc2Vjb25kCi0gICAgICAgIC8vIFY4
V3JhcHBlclR5cGUgYW5kIHRoZSB2b2lkKiBhcyBpbnRlcm5hbCBmaWVsZHMuCi0gICAgICAgIHN0
YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFudGlhdGVWOE9iamVjdChWOENsYXNzSW5k
ZXg6OlY4V3JhcHBlclR5cGUgZGVzY1R5cGUsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBj
cHRyVHlwZSwgdm9pZCogaW1wbCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGluc3Rh
bnRpYXRlVjhPYmplY3QoTlVMTCwgZGVzY1R5cGUsIGNwdHJUeXBlLCBpbXBsKTsKLSAgICAgICAg
fQotCi0gICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFudGlhdGVWOE9i
amVjdChWOFByb3h5KiwgVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUeXBlLCBWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUsIHZvaWQqKTsKLQotCiAgICAgICAgIHN0YXRpYyBjb25zdCBjaGFyKiBy
YW5nZUV4Y2VwdGlvbk5hbWUoaW50IGV4Y2VwdGlvbkNvZGUpOwogICAgICAgICBzdGF0aWMgY29u
c3QgY2hhciogZXZlbnRFeGNlcHRpb25OYW1lKGludCBleGNlcHRpb25Db2RlKTsKICAgICAgICAg
c3RhdGljIGNvbnN0IGNoYXIqIHhtbEh0dHBSZXF1ZXN0RXhjZXB0aW9uTmFtZShpbnQgZXhjZXB0
aW9uQ29kZSk7CkBAIC01MzYsNyArMzkyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogI2VuZGlm
CiAKICNpZiBFTkFCTEUoU1ZHKQotICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4OjpWOFdyYXBw
ZXJUeXBlIHN2Z0VsZW1lbnRUeXBlKFNWR0VsZW1lbnQqKTsKICAgICAgICAgc3RhdGljIGNvbnN0
IGNoYXIqIHN2Z0V4Y2VwdGlvbk5hbWUoaW50IGV4Y2VwdGlvbkNvZGUpOwogI2VuZGlmCiAKQEAg
LTU5NSw2ICs0NTAsMTYxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgc3RhdGljIFY4
RXh0ZW5zaW9uTGlzdCBtX2V4dGVuc2lvbnM7CiAgICAgfTsKIAorLy8gQmVnaW4gVjhET01XcmFw
cGVyLmgKKworICAgIGNsYXNzIFY4RE9NV3JhcHBlciB7CisgICAgcHVibGljOgorI2lmbmRlZiBO
REVCVUcKKyAgICAgICAgLy8gQ2hlY2tzIGlmIGEgdjggdmFsdWUgY2FuIGJlIGEgRE9NIHdyYXBw
ZXIKKyAgICAgICAgc3RhdGljIGJvb2wgbWF5YmVET01XcmFwcGVyKHY4OjpIYW5kbGU8djg6OlZh
bHVlPik7CisjZW5kaWYKKworICAgICAgICAvLyBTZXRzIGNvbnRlbnRzIG9mIGEgRE9NIHdyYXBw
ZXIuCisgICAgICAgIHN0YXRpYyB2b2lkIHNldERPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiwgaW50IHR5cGUsIHZvaWQqIHB0cik7CisKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gbG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUs
IHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisKKyAgICAgICAgLy8gQSBoZWxwZXIgZnVuY3Rpb24g
ZXh0cmFjdCBuYXRpdmUgb2JqZWN0IHBvaW50ZXIgZnJvbSBhIERPTSB3cmFwcGVyCisgICAgICAg
IC8vIGFuZCBjYXN0IHRvIHRoZSBzcGVjaWZpZWQgdHlwZS4KKyAgICAgICAgdGVtcGxhdGUgPGNs
YXNzIEM+CisgICAgICAgIHN0YXRpYyBDKiBjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlKHY4OjpI
YW5kbGU8djg6OlZhbHVlPiBvYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCht
YXliZURPTVdyYXBwZXIob2JqZWN0KSk7CisgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1
ZT4gcHRyID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChvYmplY3QpLT5HZXRJbnRlcm5h
bEZpZWxkKFY4Q3VzdG9tOjprRE9NV3JhcHBlck9iamVjdEluZGV4KTsKKyAgICAgICAgICAgIHJl
dHVybiBleHRyYWN0Q1BvaW50ZXI8Qz4ocHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEEg
aGVscCBmdW5jdGlvbiBleHRyYWN0IGEgbm9kZSB0eXBlIHBvaW50ZXIgZnJvbSBhIERPTSB3cmFw
cGVyLgorICAgICAgICAvLyBXcmFwcGVkIHBvaW50ZXIgbXVzdCBiZSBjYXN0IHRvIE5vZGUqIGZp
cnN0LgorICAgICAgICBzdGF0aWMgdm9pZCogY29udmVydERPTVdyYXBwZXJUb05vZGVIZWxwZXIo
djg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKworICAgICAgICAvLyBDcmVhdGUgYSBWOCB3cmFwcGVy
IGZvciBhIEMgcG9pbnRlcgorICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdy
YXBDUG9pbnRlcih2b2lkKiBjcHRyKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBSZXByZXNl
bnQgdm9pZCogYXMgaW50CisgICAgICAgICAgICBpbnQgYWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8
aW50PihjcHRyKTsKKyAgICAgICAgICAgIEFTU0VSVCghKGFkZHIgJiAweDAxKSk7IC8vIFRoZSBh
ZGRyZXNzIG11c3QgYmUgYWxpZ25lZC4KKyAgICAgICAgICAgIHJldHVybiB2ODo6SW50ZWdlcjo6
TmV3KGFkZHIgPj4gMSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBUYWtlIEMgcG9pbnRlciBv
dXQgb2YgYSB2OCB3cmFwcGVyLgorICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KKyAgICAgICAg
c3RhdGljIEMqIGV4dHJhY3RDUG9pbnRlcih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Qyo+KGV4dHJhY3RDUG9pbnRl
ckltcGwob2JqKSk7CisgICAgICAgIH0KKworICAgICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQz4KKyAg
ICAgICAgc3RhdGljIEMqIGNvbnZlcnRET01XcmFwcGVyVG9Ob2RlKHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEMq
Pihjb252ZXJ0RE9NV3JhcHBlclRvTm9kZUhlbHBlcih2YWx1ZSkpOworICAgICAgICB9CisKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgdHlw
ZSwgUGFzc1JlZlB0cjxUPiBpbXApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBjb252
ZXJ0VG9WOE9iamVjdCh0eXBlLCBpbXAuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6
OlY4V3JhcHBlclR5cGUsIHZvaWQqKTsKKworICAgICAgICAvLyBGYXN0LXBhdGggZm9yIE5vZGUg
b2JqZWN0cy4KKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0Tm9k
ZVRvVjhPYmplY3QoTm9kZSopOworCisgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBDPgorICAgICAg
ICBzdGF0aWMgQyogY29udmVydFRvTmF0aXZlT2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Qyo+KGNvbnZlcnRUb05hdGl2ZU9iamVjdEltcGwo
dHlwZSwgb2JqZWN0KSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgVjhDbGFzc0luZGV4
OjpWOFdyYXBwZXJUeXBlIGRvbVdyYXBwZXJUeXBlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pOwor
CisgICAgICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29udmVydEV2ZW50VG9WOE9i
amVjdChFdmVudCopOworCisgICAgICAgIHN0YXRpYyBFdmVudCogY29udmVydFRvTmF0aXZlRXZl
bnQodjg6OkhhbmRsZTx2ODo6VmFsdWU+IGpzRXZlbnQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmICghaXNET01FdmVudFdyYXBwZXIoanNFdmVudCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgICAgICByZXR1cm4gY29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxFdmVudD4o
anNFdmVudCk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IGNvbnZlcnRFdmVudFRhcmdldFRvVjhPYmplY3QoRXZlbnRUYXJnZXQqKTsKKyAgICAgICAg
Ly8gV3JhcCBhbmQgdW53cmFwIEpTIGV2ZW50IGxpc3RlbmVycy4KKyAgICAgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0RXZlbnRMaXN0ZW5lclRvVjhPYmplY3QoRXZlbnRM
aXN0ZW5lciopOworCisgICAgICAgIC8vIERPTUltcGxlbWVudGF0aW9uIGlzIGEgc2luZ2xldG9u
IGFuZCBpdCBpcyBoYW5kbGVkIGluIGEgc3BlY2lhbAorICAgICAgICAvLyB3YXkuIEEgd3JhcHBl
ciBpcyBnZW5lcmF0ZWQgcGVyIGRvY3VtZW50IGFuZCBzdG9yZWQgaW4gYW4KKyAgICAgICAgLy8g
aW50ZXJuYWwgZmllbGQgb2YgdGhlIGRvY3VtZW50LgorICAgICAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGNvbnZlcnRET01JbXBsZW1lbnRhdGlvblRvVjhPYmplY3QoRE9NSW1wbGVt
ZW50YXRpb24qKTsKKworICAgICAgICAvLyBXcmFwIEpTIG5vZGUgZmlsdGVyIGluIEMrKy4KKyAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8Tm9kZUZpbHRlcj4gd3JhcE5hdGl2ZU5vZGVGaWx0ZXIo
djg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKworICAgICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8
djg6OkZ1bmN0aW9uVGVtcGxhdGU+IGdldFRlbXBsYXRlKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSk7CisKKyAgICAgICAgLy8gQ2hlY2tzIHdoZXRoZXIgYSBET00gb2JqZWN0IGhhcyBhIEpT
IHdyYXBwZXIuCisgICAgICAgIHN0YXRpYyBib29sIGRvbU9iamVjdEhhc0pTV3JhcHBlcih2b2lk
Kik7CisgICAgICAgIC8vIFNldCBKUyB3cmFwcGVyIG9mIGEgRE9NIG9iamVjdCwgdGhlIGNhbGxl
ciBpbiBjaGFyZ2Ugb2YgaW5jcmVhc2UgcmVmLgorICAgICAgICBzdGF0aWMgdm9pZCBzZXRKU1dy
YXBwZXJGb3JET01PYmplY3Qodm9pZCosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgc2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2JqZWN0KHZvaWQqLCB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pik7CisgICAgICAgIHN0YXRpYyB2b2lkIHNldEpTV3Jh
cHBlckZvckRPTU5vZGUoTm9kZSosIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+KTsKKworICAg
ICAgICAvLyBDaGVjayB3aGV0aGVyIGEgVjggdmFsdWUgaXMgYSB3cmFwcGVyIG9mIHR5cGUgfGNs
YXNzVHlwZXwuCisgICAgICAgIHN0YXRpYyBib29sIGlzV3JhcHBlck9mVHlwZSh2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4sIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSk7CisKKyAgICAgICAgc3Rh
dGljIHZvaWQqIGNvbnZlcnRUb1NWR1BPRFR5cGVJbXBsKFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVy
VHlwZSwgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKworICAgICAgICAvLyBDaGVjayB3aGV0aGVy
IGEgVjggdmFsdWUgaXMgYSBET00gRXZlbnQgd3JhcHBlci4KKyAgICAgICAgc3RhdGljIGJvb2wg
aXNET01FdmVudFdyYXBwZXIodjg6OkhhbmRsZTx2ODo6VmFsdWU+KTsKKworICAgICAgICBzdGF0
aWMgdm9pZCogY29udmVydFRvTmF0aXZlT2JqZWN0SW1wbChWOENsYXNzSW5kZXg6OlY4V3JhcHBl
clR5cGUsIHY4OjpIYW5kbGU8djg6OlZhbHVlPik7CisKKyAgICAgICAgc3RhdGljIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiBjb252ZXJ0U3R5bGVTaGVldFRvVjhPYmplY3QoU3R5bGVTaGVldCopOwor
ICAgICAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRDU1NWYWx1ZVRvVjhP
YmplY3QoQ1NTVmFsdWUqKTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBj
b252ZXJ0Q1NTUnVsZVRvVjhPYmplY3QoQ1NTUnVsZSopOworICAgICAgICAvLyBSZXR1cm5zIHRo
ZSBKUyB3cmFwcGVyIG9mIGEgd2luZG93IG9iamVjdCwgaW5pdGlhbGl6ZXMgdGhlIGVudmlyb25t
ZW50CisgICAgICAgIC8vIG9mIHRoZSB3aW5kb3cgZnJhbWUgaWYgbmVlZGVkLgorICAgICAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGNvbnZlcnRXaW5kb3dUb1Y4T2JqZWN0KERPTVdp
bmRvdyopOworCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiBjb252ZXJ0U1ZHRWxlbWVudEluc3RhbmNlVG9WOE9iamVjdChTVkdFbGVtZW50SW5z
dGFuY2UqKTsKKyAgICAgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBjb252ZXJ0U1ZH
T2JqZWN0V2l0aENvbnRleHRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSwg
dm9pZCopOworI2VuZGlmCisKKyAgICBwcml2YXRlOgorICAgICAgICAvLyBTZXQgaGlkZGVuIHJl
ZmVyZW5jZXMgaW4gYSBET01XaW5kb3cgb2JqZWN0IG9mIGEgZnJhbWUuCisgICAgICAgIHN0YXRp
YyB2b2lkIHNldEhpZGRlbldpbmRvd1JlZmVyZW5jZShGcmFtZSosIGNvbnN0IGludCBpbnRlcm5h
bEluZGV4LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKKworICAgICAgICAvLyBUYWtlIEMgcG9p
bnRlciBvdXQgb2YgYSB2OCB3cmFwcGVyLgorICAgICAgICBzdGF0aWMgdm9pZCogZXh0cmFjdENQ
b2ludGVySW1wbCh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0KQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQob2JqZWN0LT5Jc051bWJlcigpKTsKKyAgICAgICAgICAgIGludCBhZGRy
ID0gb2JqZWN0LT5JbnQzMlZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4oYWRkciA8PCAxKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBWOENs
YXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgaHRtbEVsZW1lbnRUeXBlKEhUTUxFbGVtZW50Kik7Cisj
aWYgRU5BQkxFKFNWRykKKyAgICAgICAgc3RhdGljIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlw
ZSBzdmdFbGVtZW50VHlwZShTVkdFbGVtZW50Kik7CisjZW5kaWYKKworICAgICAgICAvLyBUaGUg
Zmlyc3QgVjhXcmFwcGVyVHlwZSBzcGVjaWZpZXMgdGhlIGZ1bmN0aW9uIGRlc2NyaXB0b3IKKyAg
ICAgICAgLy8gdXNlZCB0byBjcmVhdGUgSlMgb2JqZWN0LiBUaGUgc2Vjb25kIFY4V3JhcHBlclR5
cGUgc3BlY2lmaWVzCisgICAgICAgIC8vIHRoZSBhY3R1YWwgdHlwZSBvZiB0aGUgdm9pZCogZm9y
IHR5cGUgY2FzdGluZy4KKyAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGEgSFRNTCBlbGVtZW50IGhh
cyBIVE1MRUxFTUVOVCBmb3IgdGhlIGZpcnN0IFY4V3JhcHBlclR5cGUsIGJ1dCBhbHdheXMKKyAg
ICAgICAgLy8gdXNlIE5PREUgYXMgdGhlIHNlY29uZCBWOFdyYXBwZXJUeXBlLiBKUyB3cmFwcGVy
IHN0b3JlcyB0aGUgc2Vjb25kCisgICAgICAgIC8vIFY4V3JhcHBlclR5cGUgYW5kIHRoZSB2b2lk
KiBhcyBpbnRlcm5hbCBmaWVsZHMuCisgICAgICAgIHN0YXRpYyB2ODo6TG9jYWw8djg6Ok9iamVj
dD4gaW5zdGFudGlhdGVWOE9iamVjdChWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUgZGVzY1R5
cGUsIFY4Q2xhc3NJbmRleDo6VjhXcmFwcGVyVHlwZSBjcHRyVHlwZSwgdm9pZCogaW1wbCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlVjhPYmplY3QoTlVMTCwgZGVz
Y1R5cGUsIGNwdHJUeXBlLCBpbXBsKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2ODo6
TG9jYWw8djg6Ok9iamVjdD4gaW5zdGFudGlhdGVWOE9iamVjdChWOFByb3h5KiwgVjhDbGFzc0lu
ZGV4OjpWOFdyYXBwZXJUeXBlLCBWOENsYXNzSW5kZXg6OlY4V3JhcHBlclR5cGUsIHZvaWQqKTsK
KworICAgIH07CisKKy8vIEVuZCBWOERPTVdyYXBwZXIuaAorCiAgICAgdGVtcGxhdGUgPGludCB0
YWcsIHR5cGVuYW1lIFQ+CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IFY4UHJveHk6OmNvbnN0
cnVjdERPTU9iamVjdChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQogICAgIHsKQEAgLTYwNCw5
ICs2MTQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIC8vIE5vdGU6IGl0J3MgT0sg
dG8gbGV0IHRoaXMgUmVmUHRyIGdvIG91dCBvZiBzY29wZSBiZWNhdXNlIHdlIGFsc28gY2FsbAog
ICAgICAgICAvLyBTZXRET01XcmFwcGVyKCksIHdoaWNoIGVmZmVjdGl2ZWx5IGhvbGRzIGEgcmVm
ZXJlbmNlIHRvIG9iai4KICAgICAgICAgUmVmUHRyPFQ+IG9iaiA9IFQ6OmNyZWF0ZSgpOwotICAg
ICAgICBWOFByb3h5OjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIHRhZywgb2JqLmdldCgp
KTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIHRh
Zywgb2JqLmdldCgpKTsKICAgICAgICAgb2JqLT5yZWYoKTsKLSAgICAgICAgVjhQcm94eTo6c2V0
SlNXcmFwcGVyRm9yRE9NT2JqZWN0KG9iai5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFw
cGVyRm9yRE9NT2JqZWN0KG9iai5nZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5l
dyhhcmdzLkhvbGRlcigpKSk7CiAgICAgICAgIHJldHVybiBhcmdzLkhvbGRlcigpOwogICAgIH0K
IApAQCAtNjQzLDcgKzY1Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICB0ZW1wbGF0ZSA8
Y2xhc3MgVD4gaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdG9WOChQYXNzUmVmUHRyPFQ+
IG9iamVjdCwgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGhvbGRlcikKICAgICB7CiAgICAgICAgIG9i
amVjdC0+cmVmKCk7Ci0gICAgICAgIFY4UHJveHk6OnNldEpTV3JhcHBlckZvckRPTU9iamVjdChv
YmplY3QuZ2V0KCksIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoaG9sZGVyKSk7Cisg
ICAgICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KG9iamVjdC5nZXQo
KSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhob2xkZXIpKTsKICAgICAgICAgcmV0
dXJuIGhvbGRlcjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhT
VkdQT0RUeXBlV3JhcHBlci5oIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFNWR1BPRFR5cGVXcmFw
cGVyLmgKaW5kZXggZDJiOWYyMi4uZjJjMjc3ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOFNWR1BPRFR5cGVXcmFwcGVyLmgKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9WOFNW
R1BPRFR5cGVXcmFwcGVyLmgKQEAgLTM2Myw3ICszNjMsNyBAQCBwdWJsaWM6CiB0ZW1wbGF0ZSA8
Y2xhc3MgUD4KIFAgVjhTVkdQT0RUeXBlVXRpbDo6dG9TVkdQT0RUeXBlKFY4Q2xhc3NJbmRleDo6
VjhXcmFwcGVyVHlwZSB0eXBlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gb2JqZWN0LCBib29sJiBv
aykKIHsKLSAgICB2b2lkICp3cmFwcGVyID0gVjhQcm94eTo6Y29udmVydFRvU1ZHUE9EVHlwZUlt
cGwodHlwZSwgb2JqZWN0KTsKKyAgICB2b2lkICp3cmFwcGVyID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9TVkdQT0RUeXBlSW1wbCh0eXBlLCBvYmplY3QpOwogICAgIGlmICh3cmFwcGVyID09IE5V
TEwpIHsKICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuIFAoKTsKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmNwcAppbmRl
eCA2NTFkYWRiLi44MDA1YzIwIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuY3BwCkBAIC0xMjIsMTEgKzEyMiwxMSBAQCBXb3JrZXJD
b250ZXh0RXhlY3V0aW9uUHJveHkqIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6cmV0cmll
dmUoKQogewogICAgIHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6Q29udGV4
dDo6R2V0Q3VycmVudCgpOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsID0gY29u
dGV4dC0+R2xvYmFsKCk7Ci0gICAgZ2xvYmFsID0gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBlcihW
OENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGdsb2JhbCk7CisgICAgZ2xvYmFsID0gVjhET01X
cmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwgZ2xv
YmFsKTsKICAgICAvLyBSZXR1cm4gMCBpZiB0aGUgY3VycmVudCBleGVjdXRpbmcgY29udGV4dCBp
cyBub3QgdGhlIHdvcmtlciBjb250ZXh0LgogICAgIGlmIChnbG9iYWwuSXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gMDsKLSAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhQcm94
eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09S
S0VSQ09OVEVYVCwgZ2xvYmFsKTsKKyAgICBXb3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFz
c0luZGV4OjpXT1JLRVJDT05URVhULCBnbG9iYWwpOwogICAgIHJldHVybiB3b3JrZXJDb250ZXh0
LT5zY3JpcHQoKS0+cHJveHkoKTsKIH0KIApAQCAtMTc0LDkgKzE3NCw5IEBAIHZvaWQgV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkKICAgICB9CiAKICAg
ICAvLyBXcmFwIHRoZSBvYmplY3QuCi0gICAgVjhQcm94eTo6c2V0RE9NV3JhcHBlcihqc1dvcmtl
ckNvbnRleHQsIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpXT1JLRVJDT05URVhU
KSwgbV93b3JrZXJDb250ZXh0KTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoanNX
b3JrZXJDb250ZXh0LCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09O
VEVYVCksIG1fd29ya2VyQ29udGV4dCk7CiAKLSAgICBWOFByb3h5OjpzZXRKU1dyYXBwZXJGb3JE
T01PYmplY3QobV93b3JrZXJDb250ZXh0LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3
KGpzV29ya2VyQ29udGV4dCkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9N
T2JqZWN0KG1fd29ya2VyQ29udGV4dCwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhq
c1dvcmtlckNvbnRleHQpKTsKICAgICBtX3dvcmtlckNvbnRleHQtPnJlZigpOwogCiAgICAgLy8g
SW5zZXJ0IHRoZSBvYmplY3QgaW5zdGFuY2UgYXMgdGhlIHByb3RvdHlwZSBvZiB0aGUgc2hhZG93
IG9iamVjdC4KQEAgLTE5MSw3ICsxOTEsNyBAQCB2ODo6TG9jYWw8djg6OkZ1bmN0aW9uPiBXb3Jr
ZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OkdldENvbnN0cnVjdG9yKFY4Q2xhc3NJbmRleAogICAg
IC8vIEVudGVyIHRoZSBjb250ZXh0IG9mIHRoZSBwcm94eSB0byBtYWtlIHN1cmUgdGhhdCB0aGUg
ZnVuY3Rpb24gaXMKICAgICAvLyBjb25zdHJ1Y3RlZCBpbiB0aGUgY29udGV4dCBjb3JyZXNwb25k
aW5nIHRvIHRoaXMgcHJveHkuCiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKG1fY29udGV4
dCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gZnVuY3Rpb25UZW1wbGF0
ZSA9IFY4UHJveHk6OmdldFRlbXBsYXRlKHR5cGUpOworICAgIHY4OjpIYW5kbGU8djg6OkZ1bmN0
aW9uVGVtcGxhdGU+IGZ1bmN0aW9uVGVtcGxhdGUgPSBWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRl
KHR5cGUpOwogCiAgICAgLy8gR2V0dGluZyB0aGUgZnVuY3Rpb24gbWlnaHQgZmFpbCBpZiB3ZSdy
ZSBydW5uaW5nIG91dCBvZiBzdGFjayBvciBtZW1vcnkuCiAgICAgdjg6OlRyeUNhdGNoIHRyeUNh
dGNoOwpAQCAtMjE5LDcgKzIxOSw3IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6OlRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpWOFdyCiAgICAgICAg
IGlmICghb2JqZWN0LklzRW1wdHkoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdvcmtlcio+
KGltcGwpLT5yZWYoKTsKICAgICAgICAgcmVzdWx0ID0gdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVj
dD46Ok5ldyhvYmplY3QpOwotICAgICAgICBWOFByb3h5OjpzZXRKU1dyYXBwZXJGb3JET01PYmpl
Y3QoaW1wbCwgcmVzdWx0KTsKKyAgICAgICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JE
T01PYmplY3QoaW1wbCwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAK
QEAgLTI1MSw3ICsyNTEsNyBAQCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5OjpUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6VjhXcgogICAgICAgICAgICAg
ICAgIEFTU0VSVChmYWxzZSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXN1bHQgPSB2
ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KG9iamVjdCk7Ci0gICAgICAgICAgICBWOFBy
b3h5OjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoaW1wbCwgcmVzdWx0KTsKKyAgICAgICAgICAg
IFY4RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGltcGwsIHJlc3VsdCk7CiAg
ICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTI3OSw3ICsyNzksNyBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gV29ya2VyQ29udGV4dEV4ZWN1dGlvblByb3h5OjpFdmVudFRv
VjhPYmplY3QoRXZlbnQqIGV2ZW50KQogICAgIH0KIAogICAgIGV2ZW50LT5yZWYoKTsgIC8vIGZh
c3QgcmVmCi0gICAgVjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGV2ZW50LCB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHJlc3VsdCkpOworICAgIFY4RE9NV3JhcHBlcjo6
c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KGV2ZW50LCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0
Pjo6TmV3KHJlc3VsdCkpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTMyNSwxMiArMzI1
LDEyIEBAIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6
OnRvVjgoVjhDbGFzc0luZGV4OjpWOFdyYXBwZXJUCiAgICAgaWYgKHByb3h5KQogICAgICAgICBm
dW5jdGlvbiA9IHByb3h5LT5HZXRDb25zdHJ1Y3RvcihkZXNjVHlwZSk7CiAgICAgZWxzZQotICAg
ICAgICBmdW5jdGlvbiA9IFY4UHJveHk6OmdldFRlbXBsYXRlKGRlc2NUeXBlKS0+R2V0RnVuY3Rp
b24oKTsKKyAgICAgICAgZnVuY3Rpb24gPSBWOERPTVdyYXBwZXI6OmdldFRlbXBsYXRlKGRlc2NU
eXBlKS0+R2V0RnVuY3Rpb24oKTsKIAogICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiBpbnN0YW5j
ZSA9IFNhZmVBbGxvY2F0aW9uOjpuZXdJbnN0YW5jZShmdW5jdGlvbik7CiAgICAgaWYgKCFpbnN0
YW5jZS5Jc0VtcHR5KCkpIHsKICAgICAgICAgLy8gQXZvaWQgc2V0dGluZyB0aGUgRE9NIHdyYXBw
ZXIgZm9yIGZhaWxlZCBhbGxvY2F0aW9ucy4KLSAgICAgICAgVjhQcm94eTo6c2V0RE9NV3JhcHBl
cihpbnN0YW5jZSwgVjhDbGFzc0luZGV4OjpUb0ludChjcHRyVHlwZSksIGltcGwpOworICAgICAg
ICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIoaW5zdGFuY2UsIFY4Q2xhc3NJbmRleDo6VG9J
bnQoY3B0clR5cGUpLCBpbXBsKTsKICAgICB9CiAgICAgcmV0dXJuIGluc3RhbmNlOwogfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBdHRyQ3VzdG9tLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QXR0ckN1c3RvbS5jcHAKaW5kZXggMTQ2NjNjYi4u
ODFmMTU4NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhBdHRyQ3Vz
dG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEF0dHJDdXN0b20uY3Bw
CkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQUNDRVNTT1JfU0VUVEVS
KEF0dHJWYWx1ZSkKIHsKLSAgICBBdHRyKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxBdHRyPihpbmZvLkhvbGRlcigpKTsKKyAgICBBdHRyKiBpbXAgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEF0dHI+KGluZm8uSG9sZGVyKCkpOwogICAgIFN0
cmluZyBhdHRyVmFsdWUgPSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKHZhbHVlKTsKICAg
ICBFbGVtZW50KiBvd25lckVsZW1lbnQgPSBpbXAtPm93bmVyRWxlbWVudCgpOwogCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0
b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NTdHlsZURlY2xhcmF0aW9u
Q3VzdG9tLmNwcAppbmRleCBmOTQ4MGY5Li42YmQwMDM1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENTU1N0eWxlRGVjbGFyYXRpb25DdXN0b20uY3BwCisrKyBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTU3R5bGVEZWNsYXJhdGlvbkN1c3RvbS5jcHAK
QEAgLTE2MSw3ICsxNjEsNyBAQCBOQU1FRF9QUk9QRVJUWV9HRVRURVIoQ1NTU3R5bGVEZWNsYXJh
dGlvbikKIAogICAgIC8vIFNlYXJjaCB0aGUgc3R5bGUgZGVjbGFyYXRpb24uCiAgICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbiogaW1wID0KLSAgICAgICAgVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PENTU1N0eWxlRGVjbGFyYXRpb24+KFY4Q2xhc3NJbmRleDo6Q1NTU1RZTEVERUNMQVJBVElP
TiwgaW5mby5Ib2xkZXIoKSk7CisgICAgICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PENTU1N0eWxlRGVjbGFyYXRpb24+KFY4Q2xhc3NJbmRleDo6Q1NTU1RZTEVERUNMQVJB
VElPTiwgaW5mby5Ib2xkZXIoKSk7CiAgICAgQ1NTUHJvcGVydHlJbmZvKiBwcm9wSW5mbyA9IGNz
c1Byb3BlcnR5SW5mbyhuYW1lKTsKIAogICAgIC8vIERvIG5vdCBoYW5kbGUgbm9uLXByb3BlcnR5
IG5hbWVzLgpAQCAtMTk1LDcgKzE5NSw3IEBAIE5BTUVEX1BST1BFUlRZX1NFVFRFUihDU1NTdHls
ZURlY2xhcmF0aW9uKQogewogICAgIElOQ19TVEFUUygiRE9NLkNTU1N0eWxlRGVjbGFyYXRpb24u
TmFtZWRQcm9wZXJ0eVNldHRlciIpOwogICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIGltcCA9Ci0g
ICAgICAgIFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDU1NTdHlsZURlY2xhcmF0aW9u
PigKKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q1NTU3R5bGVE
ZWNsYXJhdGlvbj4oCiAgICAgICAgICAgICBWOENsYXNzSW5kZXg6OkNTU1NUWUxFREVDTEFSQVRJ
T04sIGluZm8uSG9sZGVyKCkpOwogICAgIENTU1Byb3BlcnR5SW5mbyogcHJvcEluZm8gPSBjc3NQ
cm9wZXJ0eUluZm8obmFtZSk7CiAgICAgaWYgKCFwcm9wSW5mbykKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENhbnZhc1BpeGVsQXJyYXlDdXN0b20uY3BwCmluZGV4
IGY2ZTlkY2QuLjVmZTI3MTAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q2FudmFzUGl4ZWxBcnJheUN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDYW52YXNQaXhlbEFycmF5Q3VzdG9tLmNwcApAQCAtNDEsNyArNDEsNyBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihDYW52YXNQaXhlbEFycmF5
KQogewogICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1BpeGVsQXJyYXkuSW5kZXhlZFByb3BlcnR5
R2V0dGVyIik7Ci0gICAgQ2FudmFzUGl4ZWxBcnJheSogcGl4ZWxCdWZmZXIgPSBWOFByb3h5Ojpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUGl4ZWxBcnJheT4oVjhDbGFzc0luZGV4OjpDQU5W
QVNQSVhFTEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKyAgICBDYW52YXNQaXhlbEFycmF5KiBwaXhl
bEJ1ZmZlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1BpeGVs
QXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUElYRUxBUlJBWSwgaW5mby5Ib2xkZXIoKSk7CiAK
ICAgICBpZiAoKGluZGV4IDwgMCkgfHwgKGluZGV4ID49IHBpeGVsQnVmZmVyLT5sZW5ndGgoKSkp
CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC01NSw3ICs1NSw3IEBAIElOREVY
RURfUFJPUEVSVFlfR0VUVEVSKENhbnZhc1BpeGVsQXJyYXkpCiBJTkRFWEVEX1BST1BFUlRZX1NF
VFRFUihDYW52YXNQaXhlbEFycmF5KQogewogICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1BpeGVs
QXJyYXkuSW5kZXhlZFByb3BlcnR5U2V0dGVyIik7Ci0gICAgQ2FudmFzUGl4ZWxBcnJheSogcGl4
ZWxCdWZmZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUGl4ZWxBcnJh
eT4oVjhDbGFzc0luZGV4OjpDQU5WQVNQSVhFTEFSUkFZLCBpbmZvLkhvbGRlcigpKTsKKyAgICBD
YW52YXNQaXhlbEFycmF5KiBwaXhlbEJ1ZmZlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PENhbnZhc1BpeGVsQXJyYXk+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUElYRUxBUlJB
WSwgaW5mby5Ib2xkZXIoKSk7CiAKICAgICBpZiAoKGluZGV4ID49IDApICYmIChpbmRleCA8IHBp
eGVsQnVmZmVyLT5sZW5ndGgoKSkpCiAgICAgICAgIHBpeGVsQnVmZmVyLT5zZXQoaW5kZXgsIHZh
bHVlLT5OdW1iZXJWYWx1ZSgpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAppbmRleCBj
ZDk0MTFkLi5hNzRlODVmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRDdXN0b20uY3BwCkBAIC01MCwx
MCArNTAsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RhdGljIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KENhbnZhc1N0eWxlKiBzdHlsZSkKIHsKICAgICBpZiAoc3R5bGUtPmNhbnZhc0dy
YWRpZW50KCkpCi0gICAgICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENs
YXNzSW5kZXg6OkNBTlZBU0dSQURJRU5ULCBzdHlsZS0+Y2FudmFzR3JhZGllbnQoKSk7CisgICAg
ICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
Q0FOVkFTR1JBRElFTlQsIHN0eWxlLT5jYW52YXNHcmFkaWVudCgpKTsKIAogICAgIGlmIChzdHls
ZS0+Y2FudmFzUGF0dGVybigpKQotICAgICAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhP
YmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNQQVRURVJOLCBzdHlsZS0+Y2FudmFzUGF0dGVybigp
KTsKKyAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFz
c0luZGV4OjpDQU5WQVNQQVRURVJOLCBzdHlsZS0+Y2FudmFzUGF0dGVybigpKTsKIAogICAgIHJl
dHVybiB2OFN0cmluZyhzdHlsZS0+Y29sb3IoKSk7CiB9CkBAIC02NCwzNSArNjQsMzUgQEAgc3Rh
dGljIFBhc3NSZWZQdHI8Q2FudmFzU3R5bGU+IHRvQ2FudmFzU3R5bGUodjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHZhbHVlKQogICAgICAgICByZXR1cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZSh0b1dlYkNv
cmVTdHJpbmcodmFsdWUpKTsKIAogICAgIGlmIChWOENhbnZhc0dyYWRpZW50OjpIYXNJbnN0YW5j
ZSh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4UHJveHk6OmNv
bnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzR3JhZGllbnQ+KHZhbHVlKSk7CisgICAgICAg
IHJldHVybiBDYW52YXNTdHlsZTo6Y3JlYXRlKFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05hdGl2ZTxDYW52YXNHcmFkaWVudD4odmFsdWUpKTsKIAogICAgIGlmIChWOENhbnZhc1Bh
dHRlcm46Okhhc0luc3RhbmNlKHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIENhbnZhc1N0eWxlOjpj
cmVhdGUoVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNQYXR0ZXJuPih2
YWx1ZSkpOworICAgICAgICByZXR1cm4gQ2FudmFzU3R5bGU6OmNyZWF0ZShWOERPTVdyYXBwZXI6
OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUGF0dGVybj4odmFsdWUpKTsKIAogICAg
IHJldHVybiAwOwogfQogCiBBQ0NFU1NPUl9HRVRURVIoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJE
U3Ryb2tlU3R5bGUpCiB7Ci0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBpbXBsID0gVjhQ
cm94eTo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KGluZm8uSG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogaW1wbCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkQ+KGluZm8uSG9sZGVyKCkpOwogICAgIHJldHVybiB0b1Y4KGltcGwtPnN0cm9rZVN0eWxl
KCkpOwogfQogCiBBQ0NFU1NPUl9TRVRURVIoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU3Ryb2tl
U3R5bGUpCiB7Ci0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBpbXBsID0gVjhQcm94eTo6
Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KGluZm8u
SG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogaW1wbCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KGluZm8uSG9sZGVyKCkpOwogICAgIGltcGwtPnNldFN0cm9rZVN0eWxlKHRvQ2FudmFzU3R5bGUo
dmFsdWUpKTsKIH0KIAogQUNDRVNTT1JfR0VUVEVSKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyREZp
bGxTdHlsZSkKIHsKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGltcGwgPSBWOFByb3h5
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oaW5m
by5Ib2xkZXIoKSk7CisgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBpbXBsID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RD4oaW5mby5Ib2xkZXIoKSk7CiAgICAgcmV0dXJuIHRvVjgoaW1wbC0+ZmlsbFN0eWxlKCkpOwog
fQogCiBBQ0NFU1NPUl9TRVRURVIoQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJERmlsbFN0eWxlKQog
ewotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogaW1wbCA9IFY4UHJveHk6OmNvbnZlcnRE
T01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihpbmZvLkhvbGRlcigp
KTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGltcGwgPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRET01XcmFwcGVyVG9OYXRpdmU8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihpbmZvLkhv
bGRlcigpKTsKICAgICBpbXBsLT5zZXRGaWxsU3R5bGUodG9DYW52YXNTdHlsZSh2YWx1ZSkpOwog
fQogCkBAIC0xMDEsNyArMTAxLDcgQEAgQUNDRVNTT1JfU0VUVEVSKENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyREZpbGxTdHlsZSkKIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250
ZXh0MkRTZXRTdHJva2VDb2xvcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQuc2V0U3Ryb2tlQ29sb3IoKSIpOwotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRCogY29udGV4dCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQ+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCBh
cmdzLkhvbGRlcigpKTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCBhcmdzLkhvbGRlcigp
KTsKICAgICBzd2l0Y2ggKGFyZ3MuTGVuZ3RoKCkpIHsKICAgICBjYXNlIDE6CiAgICAgICAgIGlm
IChhcmdzWzBdLT5Jc1N0cmluZygpKQpAQCAtMTMxLDcgKzEzMSw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXRTdHJva2VDb2xvcikKIENBTExCQUNLX0ZV
TkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXRGaWxsQ29sb3IpCiB7CiAgICAgSU5D
X1NUQVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELnNldEZpbGxDb2xvcigpIik7Ci0g
ICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gVjhQcm94eTo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5W
QVNSRU5ERVJJTkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRCogY29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJTkdD
T05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOwogICAgIHN3aXRjaCAoYXJncy5MZW5ndGgoKSkgewog
ICAgIGNhc2UgMToKICAgICAgICAgaWYgKGFyZ3NbMF0tPklzU3RyaW5nKCkpCkBAIC0xNjEsNyAr
MTYxLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRFNldEZp
bGxDb2xvcikKIENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTdHJv
a2VSZWN0KQogewogICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5z
dHJva2VSZWN0KCkiKTsKLSAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBW
OFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihW
OENsYXNzSW5kZXg6OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xkZXIoKSk7Cisg
ICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPihWOENsYXNzSW5kZXg6
OkNBTlZBU1JFTkRFUklOR0NPTlRFWFQyRCwgYXJncy5Ib2xkZXIoKSk7CiAgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPT0gNSkKICAgICAgICAgY29udGV4dC0+c3Ryb2tlUmVjdCh0b0Zsb2F0KGFyZ3Nb
MF0pLCB0b0Zsb2F0KGFyZ3NbMV0pLCB0b0Zsb2F0KGFyZ3NbMl0pLCB0b0Zsb2F0KGFyZ3NbM10p
LCB0b0Zsb2F0KGFyZ3NbNF0pKTsKICAgICBlbHNlIGlmIChhcmdzLkxlbmd0aCgpID09IDQpCkBA
IC0xNzYsNyArMTc2LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRFN0cm9rZVJlY3QpCiBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4
dDJEU2V0U2hhZG93KQogewogICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRC5zZXRTaGFkb3coKSIpOwotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4
dCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0
MkQ+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCBhcmdzLkhvbGRlcigp
KTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KFY4Q2xhc3NJ
bmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCBhcmdzLkhvbGRlcigpKTsKIAogICAgIHN3
aXRjaCAoYXJncy5MZW5ndGgoKSkgewogICAgIGNhc2UgMzoKQEAgLTIxMSwxMyArMjExLDEzIEBA
IENBTExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRTZXRTaGFkb3cpCiBD
QUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJERHJhd0ltYWdlKQogewog
ICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5kcmF3SW1hZ2UoKSIp
OwotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IFY4UHJveHk6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KFY4Q2xhc3NJbmRleDo6
Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCBhcmdzLkhvbGRlcigpKTsKKyAgICBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVS
SU5HQ09OVEVYVDJELCBhcmdzLkhvbGRlcigpKTsKIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBhcmcgPSBhcmdzWzBdOwogCiAgICAgaWYgKFY4SFRNTEltYWdlRWxlbWVudDo6SGFzSW5zdGFu
Y2UoYXJnKSkgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICAgICAgSFRNTElt
YWdlRWxlbWVudCogaW1hZ2VfZWxlbWVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPEhUTUxJbWFnZUVsZW1lbnQ+KGFyZyk7CisgICAgICAgIEhUTUxJbWFnZUVsZW1lbnQqIGlt
YWdlX2VsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJ
bWFnZUVsZW1lbnQ+KGFyZyk7CiAgICAgICAgIHN3aXRjaCAoYXJncy5MZW5ndGgoKSkgewogICAg
ICAgICBjYXNlIDM6CiAgICAgICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2UoaW1hZ2VfZWxlbWVu
dCwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSk7CkBAIC0yNDksNyArMjQ5LDcg
QEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRERyYXdJbWFnZSkK
ICAgICAvLyBIVE1MQ2FudmFzRWxlbWVudAogICAgIGlmIChWOEhUTUxDYW52YXNFbGVtZW50OjpI
YXNJbnN0YW5jZShhcmcpKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgICAg
ICBIVE1MQ2FudmFzRWxlbWVudCogY2FudmFzX2VsZW1lbnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9N
V3JhcHBlclRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4oYXJnKTsKKyAgICAgICAgSFRNTENhbnZh
c0VsZW1lbnQqIGNhbnZhc19lbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4oYXJnKTsKICAgICAgICAgc3dpdGNoIChhcmdzLkxl
bmd0aCgpKSB7CiAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdJbWFn
ZShjYW52YXNfZWxlbWVudCwgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSk7CkBA
IC0yODUsMTIgKzI4NSwxMiBAQCBDQUxMQkFDS19GVU5DX0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJERHJhd0ltYWdlKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKENhbnZhc1JlbmRlcmluZ0NvbnRl
eHQyRERyYXdJbWFnZUZyb21SZWN0KQogewogICAgIElOQ19TVEFUUygiRE9NLkNhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRC5kcmF3SW1hZ2VGcm9tUmVjdCgpIik7Ci0gICAgQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEKiBjb250ZXh0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJTkdDT05URVhU
MkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4
dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJTkdDT05URVhUMkQsIGFyZ3MuSG9s
ZGVyKCkpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGFyZyA9IGFyZ3NbMF07CiAKICAg
ICBpZiAoVjhIVE1MSW1hZ2VFbGVtZW50OjpIYXNJbnN0YW5jZShhcmcpKSB7Ci0gICAgICAgIEhU
TUxJbWFnZUVsZW1lbnQqIGltYWdlX2VsZW1lbnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxIVE1MSW1hZ2VFbGVtZW50PihhcmcpOworICAgICAgICBIVE1MSW1hZ2VFbGVtZW50
KiBpbWFnZV9lbGVtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxI
VE1MSW1hZ2VFbGVtZW50PihhcmcpOwogICAgICAgICBjb250ZXh0LT5kcmF3SW1hZ2VGcm9tUmVj
dChpbWFnZV9lbGVtZW50LCAgdG9GbG9hdChhcmdzWzFdKSwgdG9GbG9hdChhcmdzWzJdKSwgdG9G
bG9hdChhcmdzWzNdKSwgdG9GbG9hdChhcmdzWzRdKSwgdG9GbG9hdChhcmdzWzVdKSwgdG9GbG9h
dChhcmdzWzZdKSwgdG9GbG9hdChhcmdzWzddKSwgdG9GbG9hdChhcmdzWzhdKSwgdG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbOV0pKTsKICAgICB9IGVsc2UKICAgICAgICAgVjhQcm94eTo6dGhyb3dFcnJv
cihWOFByb3h5OjpUeXBlRXJyb3IsICJkcmF3SW1hZ2VGcm9tUmVjdDogSW52YWxpZCB0eXBlIG9m
IGFyZ3VtZW50cyIpOwpAQCAtMzAxLDMwICszMDEsMzAgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRERyYXdJbWFnZUZyb21SZWN0KQogQ0FMTEJBQ0tfRlVOQ19E
RUNMKENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRENyZWF0ZVBhdHRlcm4pCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNyZWF0ZVBhdHRlcm4oKSIpOwotICAg
IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCogY29udGV4dCA9IFY4UHJveHk6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KFY4Q2xhc3NJbmRleDo6Q0FOVkFT
UkVOREVSSU5HQ09OVEVYVDJELCBhcmdzLkhvbGRlcigpKTsKKyAgICBDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkQqIGNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxD
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09O
VEVYVDJELCBhcmdzLkhvbGRlcigpKTsKIAogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBhcmcg
PSBhcmdzWzBdOwogCiAgICAgaWYgKFY4SFRNTEltYWdlRWxlbWVudDo6SGFzSW5zdGFuY2UoYXJn
KSkgewotICAgICAgICBIVE1MSW1hZ2VFbGVtZW50KiBpbWFnZV9lbGVtZW50ID0gVjhQcm94eTo6
Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEltYWdlRWxlbWVudD4oYXJnKTsKKyAgICAgICAg
SFRNTEltYWdlRWxlbWVudCogaW1hZ2VfZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERP
TVdyYXBwZXJUb05vZGU8SFRNTEltYWdlRWxlbWVudD4oYXJnKTsKICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgICAgIFJlZlB0cjxDYW52YXNQYXR0ZXJuPiBwYXR0ZXJuID0gY29u
dGV4dC0+Y3JlYXRlUGF0dGVybihpbWFnZV9lbGVtZW50LCB0b1dlYkNvcmVTdHJpbmdXaXRoTnVs
bENoZWNrKGFyZ3NbMV0pLCBlYyk7CiAgICAgICAgIGlmIChlYyAhPSAwKSB7CiAgICAgICAgICAg
ICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwogICAgICAgICAgICAgcmV0dXJuIG5vdEhh
bmRsZWRCeUludGVyY2VwdG9yKCk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFY4UHJveHk6
OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUEFUVEVSTiwgcGF0dGVybi5n
ZXQoKSk7CisgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6Q0FOVkFTUEFUVEVSTiwgcGF0dGVybi5nZXQoKSk7CiAgICAgfQogCiAgICAg
aWYgKFY4SFRNTENhbnZhc0VsZW1lbnQ6Okhhc0luc3RhbmNlKGFyZykpIHsKLSAgICAgICAgSFRN
TENhbnZhc0VsZW1lbnQqIGNhbnZhc19lbGVtZW50ID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBw
ZXJUb05vZGU8SFRNTENhbnZhc0VsZW1lbnQ+KGFyZyk7CisgICAgICAgIEhUTUxDYW52YXNFbGVt
ZW50KiBjYW52YXNfZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05v
ZGU8SFRNTENhbnZhc0VsZW1lbnQ+KGFyZyk7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgICAgICBSZWZQdHI8Q2FudmFzUGF0dGVybj4gcGF0dGVybiA9IGNvbnRleHQtPmNyZWF0
ZVBhdHRlcm4oY2FudmFzX2VsZW1lbnQsIHRvV2ViQ29yZVN0cmluZ1dpdGhOdWxsQ2hlY2soYXJn
c1sxXSksIGVjKTsKICAgICAgICAgaWYgKGVjICE9IDApIHsKICAgICAgICAgICAgIFY4UHJveHk6
OnNldERPTUV4Y2VwdGlvbihlYyk7CiAgICAgICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50
ZXJjZXB0b3IoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRv
VjhPYmplY3QoVjhDbGFzc0luZGV4OjpDQU5WQVNQQVRURVJOLCBwYXR0ZXJuLmdldCgpKTsKKyAg
ICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpDQU5WQVNQQVRURVJOLCBwYXR0ZXJuLmdldCgpKTsKICAgICB9CiAKICAgICBWOFByb3h5Ojpz
ZXRET01FeGNlcHRpb24oVFlQRV9NSVNNQVRDSF9FUlIpOwpAQCAtMzM1LDcgKzMzNSw3IEBAIENB
TExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRGaWxsVGV4dCkKIHsKICAg
ICBJTkNfU1RBVFMoIkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuZmlsbFRleHQoKSIpOwog
Ci0gICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gVjhQcm94eTo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpD
QU5WQVNSRU5ERVJJTkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRl
cmluZ0NvbnRleHQyRCogY29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJ
TkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgLy8gVHdvIGZvcm1zOgogICAgIC8v
ICogZmlsbFRleHQodGV4dCwgeCwgeSkKQEAgLTM2MSw3ICszNjEsNyBAQCBDQUxMQkFDS19GVU5D
X0RFQ0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJERmlsbFRleHQpCiBDQUxMQkFDS19GVU5DX0RF
Q0woQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEU3Ryb2tlVGV4dCkKIHsKICAgICBJTkNfU1RBVFMo
IkRPTS5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuc3Ryb2tlVGV4dCgpIik7Ci0gICAgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEKiBjb250ZXh0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJ
TkdDT05URVhUMkQsIGFyZ3MuSG9sZGVyKCkpOworICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCogY29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRD4oVjhDbGFzc0luZGV4OjpDQU5WQVNSRU5ERVJJTkdDT05URVhUMkQs
IGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgLy8gVHdvIGZvcm1zOgogICAgIC8vICogc3Ryb2tlVGV4
dCh0ZXh0LCB4LCB5KQpAQCAtMzk2LDcgKzM5Niw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkRQdXRJbWFnZURhdGEpCiAgICAgICAgIHJldHVybiBub3RIYW5k
bGVkQnlJbnRlcmNlcHRvcigpOwogICAgIH0KIAotICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCogY29udGV4dCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ+KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCBhcmdz
LkhvbGRlcigpKTsKKyAgICBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqIGNvbnRleHQgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ+
KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCBhcmdzLkhvbGRlcigpKTsK
IAogICAgIEltYWdlRGF0YSogaW1hZ2VEYXRhID0gMDsKIApAQCAtNDA0LDggKzQwNCw4IEBAIENB
TExCQUNLX0ZVTkNfREVDTChDYW52YXNSZW5kZXJpbmdDb250ZXh0MkRQdXRJbWFnZURhdGEpCiAg
ICAgLy8gY29udmVydFRvTmF0aXZlT2JqZWN0KCkgZXhwZWN0cyBpdCB0byBiZSBjb3JyZWN0LiBJ
ZiB0aGUgYXJndW1lbnQgd2FzIGluY29ycmVjdAogICAgIC8vIHdlIGxlYXZlIGl0IG51bGwsIGFu
ZCBwdXRJbWFnZURhdGEoKSB3aWxsIHRocm93IHRoZSBjb3JyZWN0IGV4Y2VwdGlvbgogICAgIC8v
IChUWVBFX01JU01BVENIX0VSUikuCi0gICAgaWYgKFY4UHJveHk6OmlzV3JhcHBlck9mVHlwZShh
cmdzWzBdLCBWOENsYXNzSW5kZXg6OklNQUdFREFUQSkpCi0gICAgICAgIGltYWdlRGF0YSA9IFY4
UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbWFnZURhdGE+KFY4Q2xhc3NJbmRleDo6SU1B
R0VEQVRBLCBhcmdzWzBdKTsKKyAgICBpZiAoVjhET01XcmFwcGVyOjppc1dyYXBwZXJPZlR5cGUo
YXJnc1swXSwgVjhDbGFzc0luZGV4OjpJTUFHRURBVEEpKQorICAgICAgICBpbWFnZURhdGEgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbWFnZURhdGE+KFY4Q2xhc3NJbmRl
eDo6SU1BR0VEQVRBLCBhcmdzWzBdKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOENsaWVudFJlY3RMaXN0Q3Vz
dG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpZW50UmVjdExpc3RDdXN0
b20uY3BwCmluZGV4IDY1YmE5MWUuLjNiYTQwMWEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q2xpZW50UmVjdExpc3RDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Q2xpZW50UmVjdExpc3RDdXN0b20uY3BwCkBAIC00NCwxMiArNDQs
MTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogSU5ERVhFRF9QUk9QRVJUWV9HRVRURVIoQ2xpZW50
UmVjdExpc3QpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uQ2xpZW50UmVjdExpc3QuSW5kZXhlZFBy
b3BlcnR5R2V0dGVyIik7Ci0gICAgQ2xpZW50UmVjdExpc3QqIGltcCA9IFY4UHJveHk6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxDbGllbnRSZWN0TGlzdD4oVjhDbGFzc0luZGV4OjpDTElFTlRSRUNU
TElTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgQ2xpZW50UmVjdExpc3QqIGltcCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENsaWVudFJlY3RMaXN0PihWOENsYXNzSW5kZXg6
OkNMSUVOVFJFQ1RMSVNULCBpbmZvLkhvbGRlcigpKTsKICAgICBSZWZQdHI8Q2xpZW50UmVjdD4g
cmVzdWx0ID0gaW1wLT5pdGVtKGluZGV4KTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKLSAgICByZXR1cm4gVjhQcm94eTo6Y29u
dmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDTElFTlRSRUNULCByZXN1bHQuZ2V0KCkpOwor
ICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6
Q0xJRU5UUkVDVCwgcmVzdWx0LmdldCgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20u
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDbGlwYm9hcmRDdXN0b20uY3BwCmlu
ZGV4IGVlYTM5NTQuLmQzYmUxZWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q2xpcGJvYXJkQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOENsaXBib2FyZEN1c3RvbS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogQUNDRVNTT1JfR0VUVEVSKENsaXBib2FyZFR5cGVzKQogewogICAgIElOQ19TVEFUUygi
RE9NLkNsaXBib2FyZC50eXBlcygpIik7Ci0gICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBWOFBy
b3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2xpcGJvYXJkPihWOENsYXNzSW5kZXg6OkNMSVBC
T0FSRCwgaW5mby5Ib2xkZXIoKSk7CisgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDbGlwYm9hcmQ+KFY4Q2xhc3NJbmRleDo6Q0xJ
UEJPQVJELCBpbmZvLkhvbGRlcigpKTsKIAogICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlcyA9IGNs
aXBib2FyZC0+dHlwZXMoKTsKICAgICBpZiAodHlwZXMuaXNFbXB0eSgpKQpAQCAtNjUsNyArNjUs
NyBAQCBBQ0NFU1NPUl9HRVRURVIoQ2xpcGJvYXJkVHlwZXMpCiBDQUxMQkFDS19GVU5DX0RFQ0wo
Q2xpcGJvYXJkQ2xlYXJEYXRhKQogewogICAgIElOQ19TVEFUUygiRE9NLkNsaXBib2FyZC5jbGVh
ckRhdGEoKSIpOwotICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gVjhQcm94eTo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PENsaXBib2FyZD4oVjhDbGFzc0luZGV4OjpDTElQQk9BUkQsIGFyZ3MuSG9s
ZGVyKCkpOworICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8Q2xpcGJvYXJkPihWOENsYXNzSW5kZXg6OkNMSVBCT0FSRCwgYXJncy5I
b2xkZXIoKSk7CiAKICAgICBpZiAoIWFyZ3MuTGVuZ3RoKCkpIHsKICAgICAgICAgY2xpcGJvYXJk
LT5jbGVhckFsbERhdGEoKTsKQEAgLTgzLDcgKzgzLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENs
aXBib2FyZENsZWFyRGF0YSkKIENBTExCQUNLX0ZVTkNfREVDTChDbGlwYm9hcmRHZXREYXRhKQog
ewogICAgIElOQ19TVEFUUygiRE9NLkNsaXBib2FyZC5nZXREYXRhKCkiKTsKLSAgICBDbGlwYm9h
cmQqIGNsaXBib2FyZCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDbGlwYm9hcmQ+
KFY4Q2xhc3NJbmRleDo6Q0xJUEJPQVJELCBhcmdzLkhvbGRlcigpKTsKKyAgICBDbGlwYm9hcmQq
IGNsaXBib2FyZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PENsaXBib2Fy
ZD4oVjhDbGFzc0luZGV4OjpDTElQQk9BUkQsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgaWYgKGFy
Z3MuTGVuZ3RoKCkgIT0gMSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoImdldERhdGE6IElu
dmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyIsIFY4UHJveHk6OlN5bnRheEVycm9yKTsKQEAgLTk5
LDcgKzk5LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKENsaXBib2FyZEdldERhdGEpCiBDQUxMQkFD
S19GVU5DX0RFQ0woQ2xpcGJvYXJkU2V0RGF0YSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5DbGlw
Ym9hcmQuc2V0RGF0YSgpIik7Ci0gICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBWOFByb3h5Ojpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8Q2xpcGJvYXJkPihWOENsYXNzSW5kZXg6OkNMSVBCT0FSRCwg
YXJncy5Ib2xkZXIoKSk7CisgICAgQ2xpcGJvYXJkKiBjbGlwYm9hcmQgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxDbGlwYm9hcmQ+KFY4Q2xhc3NJbmRleDo6Q0xJUEJPQVJE
LCBhcmdzLkhvbGRlcigpKTsKIAogICAgIGlmIChhcmdzLkxlbmd0aCgpICE9IDIpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKCJzZXREYXRhOiBJbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMi
LCBWOFByb3h5OjpTeW50YXhFcnJvcik7CkBAIC0xMTIsNyArMTEyLDcgQEAgQ0FMTEJBQ0tfRlVO
Q19ERUNMKENsaXBib2FyZFNldERhdGEpCiBDQUxMQkFDS19GVU5DX0RFQ0woQ2xpcGJvYXJkU2V0
RHJhZ0ltYWdlKQogewogICAgIElOQ19TVEFUUygiRE9NLkNsaXBib2FyZC5zZXREcmFnSW1hZ2Uo
KSIpOwotICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PENsaXBib2FyZD4oVjhDbGFzc0luZGV4OjpDTElQQk9BUkQsIGFyZ3MuSG9sZGVyKCkp
OworICAgIENsaXBib2FyZCogY2xpcGJvYXJkID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8Q2xpcGJvYXJkPihWOENsYXNzSW5kZXg6OkNMSVBCT0FSRCwgYXJncy5Ib2xkZXIo
KSk7CiAKICAgICBpZiAoIWNsaXBib2FyZC0+aXNGb3JEcmFnZ2luZygpKQogICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtMTI1LDcgKzEyNSw3IEBAIENBTExCQUNLX0ZVTkNfREVD
TChDbGlwYm9hcmRTZXREcmFnSW1hZ2UpCiAKICAgICBOb2RlKiBub2RlID0gMDsKICAgICBpZiAo
VjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzBdKSkKLSAgICAgICAgbm9kZSA9IFY4UHJveHk6OmNv
bnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMF0pOworICAgICAgICBub2RlID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdzWzBdKTsKIAogICAg
IGlmICghbm9kZSB8fCAhbm9kZS0+aXNFbGVtZW50Tm9kZSgpKQogICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcigic2V0RHJhZ0ltYWdlRnJvbUVsZW1lbnQ6IEludmFsaWQgZmlyc3QgYXJndW1lbnQi
KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tQmluZGlu
Zy5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbUJpbmRpbmcuY3BwCmlu
ZGV4IGU3M2EzMTkuLjcyZTU2YTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4Q3VzdG9tQmluZGluZy5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21CaW5kaW5nLmNwcApAQCAtODIsOCArODIsOCBAQCBBQ0NFU1NPUl9HRVRURVIoRG9j
dW1lbnRJbXBsZW1lbnRhdGlvbikKICAgICAgICAgcmV0dXJuIGltcGxlbWVudGF0aW9uOwogCiAg
ICAgLy8gR2VuZXJhdGUgYSB3cmFwcGVyLgotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IFY4UHJv
eHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8RG9jdW1lbnQ+KGluZm8uSG9sZGVyKCkpOwot
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3cmFwcGVyID0gVjhQcm94eTo6Y29udmVydERPTUlt
cGxlbWVudGF0aW9uVG9WOE9iamVjdChkb2N1bWVudC0+aW1wbGVtZW50YXRpb24oKSk7CisgICAg
RG9jdW1lbnQqIGRvY3VtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTmF0
aXZlPERvY3VtZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
d3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTUltcGxlbWVudGF0aW9uVG9WOE9iamVj
dChkb2N1bWVudC0+aW1wbGVtZW50YXRpb24oKSk7CiAKICAgICAvLyBTdG9yZSB0aGUgd3JhcHBl
ciBpbiB0aGUgaW50ZXJuYWwgZmllbGQuCiAgICAgaW5mby5Ib2xkZXIoKS0+U2V0SW50ZXJuYWxG
aWVsZChrRG9jdW1lbnRJbXBsZW1lbnRhdGlvbkluZGV4LCB3cmFwcGVyKTsKQEAgLTk2LDcgKzk2
LDcgQEAgSU5ERVhFRF9BQ0NFU1NfQ0hFQ0soSGlzdG9yeSkKIHsKICAgICBBU1NFUlQoVjhDbGFz
c0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0luZGV4OjpISVNU
T1JZKTsKICAgICAvLyBPbmx5IGFsbG93IHNhbWUgb3JpZ2luIGFjY2Vzcy4KLSAgICBIaXN0b3J5
KiBoaXN0b3J5ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhpc3Rvcnk+KFY4Q2xh
c3NJbmRleDo6SElTVE9SWSwgaG9zdCk7CisgICAgSGlzdG9yeSogaGlzdG9yeSA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhpc3Rvcnk+KFY4Q2xhc3NJbmRleDo6SElTVE9S
WSwgaG9zdCk7CiAgICAgcmV0dXJuIFY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGhpc3RvcnktPmZy
YW1lKCksIGZhbHNlKTsKIH0KIApAQCAtMTA0LDcgKzEwNCw3IEBAIE5BTUVEX0FDQ0VTU19DSEVD
SyhIaXN0b3J5KQogewogICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQoZGF0YS0+SW50
MzJWYWx1ZSgpKSA9PSBWOENsYXNzSW5kZXg6OkhJU1RPUlkpOwogICAgIC8vIE9ubHkgYWxsb3cg
c2FtZSBvcmlnaW4gYWNjZXNzLgotICAgIEhpc3RvcnkqIGhpc3RvcnkgPSBWOFByb3h5Ojpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8SGlzdG9yeT4oVjhDbGFzc0luZGV4OjpISVNUT1JZLCBob3N0KTsK
KyAgICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8SGlzdG9yeT4oVjhDbGFzc0luZGV4OjpISVNUT1JZLCBob3N0KTsKICAgICByZXR1cm4gVjhQ
cm94eTo6Y2FuQWNjZXNzRnJhbWUoaGlzdG9yeS0+ZnJhbWUoKSwgZmFsc2UpOwogfQogCkBAIC0x
MTgsMjEgKzExOCwyMSBAQCBGcmFtZSogVjhDdXN0b206OkdldFRhcmdldEZyYW1lKHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiBob3N0LCB2ODo6TG9jYWw8djg6OlZhbHVlPgogICAgIEZyYW1lKiB0YXJn
ZXQgPSAwOwogICAgIHN3aXRjaCAoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEtPkludDMyVmFs
dWUoKSkpIHsKICAgICBjYXNlIFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XOiB7Ci0gICAgICAgIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB3aW5kb3cgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4
Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob3N0KTsKKyAgICAgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHdpbmRvdyA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6
OkRPTVdJTkRPVywgaG9zdCk7CiAgICAgICAgIGlmICh3aW5kb3cuSXNFbXB0eSgpKQogICAgICAg
ICAgICAgcmV0dXJuIHRhcmdldDsKIAotICAgICAgICBET01XaW5kb3cqIHRhcmdldFdpbmRvdyA9
IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCB3aW5kb3cpOworICAgICAgICBET01XaW5kb3cqIHRhcmdldFdpbmRvdyA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4
OjpET01XSU5ET1csIHdpbmRvdyk7CiAgICAgICAgIHRhcmdldCA9IHRhcmdldFdpbmRvdy0+ZnJh
bWUoKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgVjhDbGFzc0luZGV4OjpMT0NB
VElPTjogewotICAgICAgICBIaXN0b3J5KiBoaXN0b3J5ID0gVjhQcm94eTo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PEhpc3Rvcnk+KFY4Q2xhc3NJbmRleDo6SElTVE9SWSwgaG9zdCk7CisgICAgICAg
IEhpc3RvcnkqIGhpc3RvcnkgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxI
aXN0b3J5PihWOENsYXNzSW5kZXg6OkhJU1RPUlksIGhvc3QpOwogICAgICAgICB0YXJnZXQgPSBo
aXN0b3J5LT5mcmFtZSgpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBWOENsYXNz
SW5kZXg6OkhJU1RPUlk6IHsKLSAgICAgICAgTG9jYXRpb24qIGxvY2F0aW9uID0gVjhQcm94eTo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBo
b3N0KTsKKyAgICAgICAgTG9jYXRpb24qIGxvY2F0aW9uID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvc3QpOwog
ICAgICAgICB0YXJnZXQgPSBsb2NhdGlvbi0+ZnJhbWUoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxTdGF0
ZW1lbnRDYWxsYmFjay5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNR
TFN0YXRlbWVudENhbGxiYWNrLmNwcAppbmRleCA5M2VmMTE4Li42NGFiZGM0IDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVudENhbGxiYWNr
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0YXRlbWVu
dENhbGxiYWNrLmNwcApAQCAtNjEsOCArNjEsOCBAQCB2b2lkIFY4Q3VzdG9tU1FMU3RhdGVtZW50
Q2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwgU1FMUgog
ICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29wZShjb250ZXh0KTsKIAogICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBhcmd2W10gPSB7Ci0gICAgICAgIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0
KFY4Q2xhc3NJbmRleDo6U1FMVFJBTlNBQ1RJT04sIHRyYW5zYWN0aW9uKSwKLSAgICAgICAgVjhQ
cm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTUUxSRVNVTFRTRVQsIHJlc3Vs
dFNldCkKKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5k
ZXg6OlNRTFRSQU5TQUNUSU9OLCB0cmFuc2FjdGlvbiksCisgICAgICAgIFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTUUxSRVNVTFRTRVQsIHJlc3VsdFNldCkK
ICAgICB9OwogCiAgICAgLy8gUHJvdGVjdCB0aGUgZnJhbWUgdW50aWwgdGhlIGNhbGxiYWNrIHJl
dHVybnMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNR
TFN0YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhDdXN0b21TUUxTdGF0ZW1lbnRFcnJvckNhbGxiYWNrLmNwcAppbmRleCA3ZDRlMTExLi42NTZi
MWNmIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFN0
YXRlbWVudEVycm9yQ2FsbGJhY2suY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tU1FMU3RhdGVtZW50RXJyb3JDYWxsYmFjay5jcHAKQEAgLTYxLDggKzYxLDggQEAg
Ym9vbCBWOEN1c3RvbVNRTFN0YXRlbWVudEVycm9yQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNRTFRy
YW5zYWN0aW9uKiB0cmFuc2FjdGlvbiwKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29u
dGV4dCk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0gewotICAgICAgICBW
OFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNRTFRSQU5TQUNUSU9OLCB0
cmFuc2FjdGlvbiksCi0gICAgICAgIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6U1FMRVJST1IsIGVycm9yKQorICAgICAgICBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4
T2JqZWN0KFY4Q2xhc3NJbmRleDo6U1FMVFJBTlNBQ1RJT04sIHRyYW5zYWN0aW9uKSwKKyAgICAg
ICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNRTEVSUk9S
LCBlcnJvcikKICAgICB9OwogCiAgICAgLy8gUHJvdGVjdCB0aGUgZnJhbWUgdW50aWwgdGhlIGNh
bGxiYWNrIHJldHVybnMuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkNhbGxiYWNrLmNwcAppbmRleCBiMDVhZDVjLi4y
Y2VmNmIzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNR
TFRyYW5zYWN0aW9uQ2FsbGJhY2suY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4Q3VzdG9tU1FMVHJhbnNhY3Rpb25DYWxsYmFjay5jcHAKQEAgLTYyLDcgKzYyLDcgQEAgdm9p
ZCBWOEN1c3RvbVNRTFRyYW5zYWN0aW9uQ2FsbGJhY2s6OmhhbmRsZUV2ZW50KFNRTFRyYW5zYWN0
aW9uKiB0cmFuc2FjdGlvbiwgYm8KICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUoY29udGV4
dCk7CiAKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gYXJndltdID0gewotICAgICAgICBWOFBy
b3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlNRTFRSQU5TQUNUSU9OLCB0cmFu
c2FjdGlvbikKKyAgICAgICAgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OlNRTFRSQU5TQUNUSU9OLCB0cmFuc2FjdGlvbikKICAgICB9OwogCiAgICAgLy8gUHJv
dGVjdCB0aGUgZnJhbWUgdW50aWwgdGhlIGNhbGxiYWNrIHJldHVybnMuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0aW9uRXJyb3JDYWxs
YmFjay5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEN1c3RvbVNRTFRyYW5zYWN0
aW9uRXJyb3JDYWxsYmFjay5jcHAKaW5kZXggNGM4OTNiMy4uMWEwOTM5ZCAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDdXN0b21TUUxUcmFuc2FjdGlvbkVycm9yQ2Fs
bGJhY2suY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q3VzdG9tU1FMVHJh
bnNhY3Rpb25FcnJvckNhbGxiYWNrLmNwcApAQCAtNjEsNyArNjEsNyBAQCB2b2lkIFY4Q3VzdG9t
U1FMVHJhbnNhY3Rpb25FcnJvckNhbGxiYWNrOjpoYW5kbGVFdmVudChTUUxFcnJvciogZXJyb3Ip
CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNvbnRleHQpOwogCiAgICAgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IGFyZ3ZbXSA9IHsKLSAgICAgICAgVjhQcm94eTo6Y29udmVydFRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpTUUxFUlJPUiwgZXJyb3IpCisgICAgICAgIFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTUUxFUlJPUiwgZXJyb3IpCiAgICAgfTsK
IAogICAgIC8vIFByb3RlY3QgdGhlIGZyYW1lIHVudGlsIHRoZSBjYWxsYmFjayByZXR1cm5zLgpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20u
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhET01XaW5kb3dDdXN0b20uY3BwCmlu
ZGV4IDBlYmU5MzQuLjkzMTk2ZWQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RE9NV2luZG93Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOERPTVdpbmRvd0N1c3RvbS5jcHAKQEAgLTY0LDcgKzY0LDcgQEAgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IFY4Q3VzdG9tOjpXaW5kb3dTZXRUaW1lb3V0SW1wbChjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzLAogICAgIGlmIChhcmd1bWVudENvdW50IDwgMSkKICAgICAgICAgcmV0dXJuIHY4OjpV
bmRlZmluZWQoKTsKIAotICAgIERPTVdpbmRvdyogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVy
KCkpOworICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7
CiAKICAgICBpZiAoIWltcC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKQEAgLTE2MSwxOCArMTYxLDE4IEBAIEFDQ0VTU09SX0dFVFRFUihET01XaW5kb3dDcnlwdG8p
CiAKIEFDQ0VTU09SX1NFVFRFUihET01XaW5kb3dMb2NhdGlvbikKIHsKLSAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0lu
ZGV4OjpET01XSU5ET1csIGluZm8uVGhpcygpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGhvbGRlciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkRP
TVdJTkRPVywgaW5mby5UaGlzKCkpOwogICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBET01XaW5kb3cqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpOworICAg
IERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9N
V2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKTsKICAgICBXaW5kb3dTZXRM
b2NhdGlvbihpbXAsIHRvV2ViQ29yZVN0cmluZyh2YWx1ZSkpOwogfQogCiAKIEFDQ0VTU09SX1NF
VFRFUihET01XaW5kb3dPcGVuZXIpCiB7Ci0gICAgRE9NV2luZG93KiBpbXAgPSBWOFByb3h5Ojpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywg
aW5mby5Ib2xkZXIoKSk7CisgICAgRE9NV2luZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbmZv
LkhvbGRlcigpKTsKIAogICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFt
ZSgpLCB0cnVlKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTk3LDcgKzE5Nyw3IEBAIEFDQ0VTU09S
X1NFVFRFUihET01XaW5kb3dPcGVuZXIpCiBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93QWRk
RXZlbnRMaXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5ET01XaW5kb3cuYWRkRXZlbnRM
aXN0ZW5lcigpIik7Ci0gICAgRE9NV2luZG93KiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIo
KSk7CisgICAgRE9NV2luZG93KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRlcigpKTsK
IAogICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkK
ICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTIyOSw3ICsyMjksNyBAQCBDQUxM
QkFDS19GVU5DX0RFQ0woRE9NV2luZG93QWRkRXZlbnRMaXN0ZW5lcikKIENBTExCQUNLX0ZVTkNf
REVDTChET01XaW5kb3dSZW1vdmVFdmVudExpc3RlbmVyKQogewogICAgIElOQ19TVEFUUygiRE9N
LkRPTVdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCkiKTsKLSAgICBET01XaW5kb3cqIGltcCA9
IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCBhcmdzLkhvbGRlcigpKTsKKyAgICBET01XaW5kb3cqIGltcCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01X
SU5ET1csIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgaWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFt
ZShpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpA
QCAtMjU5LDcgKzI1OSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dSZW1vdmVFdmVu
dExpc3RlbmVyKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd1Bvc3RNZXNzYWdlKQogewog
ICAgIElOQ19TVEFUUygiRE9NLkRPTVdpbmRvdy5wb3N0TWVzc2FnZSgpIik7Ci0gICAgRE9NV2lu
ZG93KiB3aW5kb3cgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihW
OENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5Ib2xkZXIoKSk7CisgICAgRE9NV2luZG93KiB3
aW5kb3cgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4
Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRlcigpKTsKIAogICAgIERPTVdpbmRvdyog
c291cmNlID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckNhbGxpbmdDb250ZXh0KCktPmRvbVdp
bmRvdygpOwogICAgIEFTU0VSVChzb3VyY2UtPmZyYW1lKCkpOwpAQCAtMjc1LDggKzI3NSw4IEBA
IENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dQb3N0TWVzc2FnZSkKICAgICAvLyBvcgogICAg
IC8vICAgcG9zdE1lc3NhZ2UobWVzc2FnZSwgdGFyZ2V0T3JpZ2luKTsKICAgICBpZiAoYXJncy5M
ZW5ndGgoKSA+IDIpIHsKLSAgICAgICAgaWYgKFY4UHJveHk6OmlzV3JhcHBlck9mVHlwZShhcmdz
WzFdLCBWOENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JUKSkKLSAgICAgICAgICAgIHBvcnQgPSBWOFBy
b3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVT
U0FHRVBPUlQsIGFyZ3NbMV0pOworICAgICAgICBpZiAoVjhET01XcmFwcGVyOjppc1dyYXBwZXJP
ZlR5cGUoYXJnc1sxXSwgVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCkpCisgICAgICAgICAgICBw
b3J0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4
Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIGFyZ3NbMV0pOwogICAgICAgICB0YXJnZXRPcmlnaW4g
PSB0b1dlYkNvcmVTdHJpbmdXaXRoTnVsbE9yVW5kZWZpbmVkQ2hlY2soYXJnc1syXSk7CiAgICAg
fSBlbHNlIHsKICAgICAgICAgdGFyZ2V0T3JpZ2luID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxP
clVuZGVmaW5lZENoZWNrKGFyZ3NbMV0pOwpAQCAtMjk2LDcgKzI5Niw3IEBAIENBTExCQUNLX0ZV
TkNfREVDTChET01XaW5kb3dQb3N0TWVzc2FnZSkKIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5k
b3dBdG9iKQogewogICAgIElOQ19TVEFUUygiRE9NLkRPTVdpbmRvdy5hdG9iKCkiKTsKLSAgICBE
T01XaW5kb3cqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+
KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRlcigpKTsKKyAgICBET01XaW5kb3cq
IGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgaWYgKCFWOFByb3h5
OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIHRydWUpKQogICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwpAQCAtMzE0LDcgKzMxNCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01X
aW5kb3dBdG9iKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd0J0b2EpCiB7CiAgICAgSU5D
X1NUQVRTKCJET00uRE9NV2luZG93LmJ0b2EoKSIpOwotICAgIERPTVdpbmRvdyogaW1wID0gVjhQ
cm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01X
SU5ET1csIGFyZ3MuSG9sZGVyKCkpOworICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRP
VywgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGlt
cC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CkBAIC0z
NzMsMTEgKzM3MywxMSBAQCBzdGF0aWMgU3RyaW5nIGV2ZW50TmFtZUZyb21BdHRyaWJ1dGVOYW1l
KGNvbnN0IFN0cmluZyYgbmFtZSkKIAogQUNDRVNTT1JfU0VUVEVSKERPTVdpbmRvd0V2ZW50SGFu
ZGxlcikKIHsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4UHJveHk6Omxv
b2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGluZm8uVGhpcygpKTsKKyAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9N
V3JhcHBlcihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaW5mby5UaGlzKCkpOwogICAgIGlmICho
b2xkZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBET01XaW5kb3cqIGltcCA9
IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCBob2xkZXIpOworICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywg
aG9sZGVyKTsKICAgICBpZiAoIWltcC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC00
MDUsMTEgKzQwNSwxMSBAQCBBQ0NFU1NPUl9TRVRURVIoRE9NV2luZG93RXZlbnRIYW5kbGVyKQog
CiBBQ0NFU1NPUl9HRVRURVIoRE9NV2luZG93RXZlbnRIYW5kbGVyKQogewotICAgIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNz
SW5kZXg6OkRPTVdJTkRPVywgaW5mby5UaGlzKCkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gaG9sZGVyID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCBpbmZvLlRoaXMoKSk7CiAgICAgaWYgKGhvbGRlci5Jc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBET01XaW5kb3cqIGltcCA9IFY4UHJv
eHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lO
RE9XLCBob2xkZXIpOworICAgIERPTVdpbmRvdyogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9sZGVy
KTsKICAgICBpZiAoIWltcC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQo
KTsKIApAQCAtNDIxLDcgKzQyMSw3IEBAIEFDQ0VTU09SX0dFVFRFUihET01XaW5kb3dFdmVudEhh
bmRsZXIpCiAgICAgU3RyaW5nIGV2ZW50VHlwZSA9IGV2ZW50TmFtZUZyb21BdHRyaWJ1dGVOYW1l
KGtleSk7CiAKICAgICBFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IGltcC0+Z2V0QXR0cmlidXRl
RXZlbnRMaXN0ZW5lcihldmVudFR5cGUpOwotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0RXZl
bnRMaXN0ZW5lclRvVjhPYmplY3QobGlzdGVuZXIpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6
OmNvbnZlcnRFdmVudExpc3RlbmVyVG9WOE9iamVjdChsaXN0ZW5lcik7CiB9CiAKIHN0YXRpYyBi
b29sIGNhblNob3dNb2RhbERpYWxvZ05vdyhjb25zdCBGcmFtZSogZnJhbWUpCkBAIC01NDQsNyAr
NTQ0LDcgQEAgc3RhdGljIEZyYW1lKiBjcmVhdGVXaW5kb3coRnJhbWUqIGNhbGxpbmdGcmFtZSwK
IENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dTaG93TW9kYWxEaWFsb2cpCiB7CiAgICAgSU5D
X1NUQVRTKCJET00uRE9NV2luZG93LnNob3dNb2RhbERpYWxvZygpIik7Ci0gICAgRE9NV2luZG93
KiB3aW5kb3cgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PigKKyAg
ICBET01XaW5kb3cqIHdpbmRvdyA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PERPTVdpbmRvdz4oCiAgICAgICAgIFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBhcmdzLkhvbGRl
cigpKTsKICAgICBGcmFtZSogZnJhbWUgPSB3aW5kb3ctPmZyYW1lKCk7CiAKQEAgLTYzMyw3ICs2
MzMsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRE9NV2luZG93U2hvd01vZGFsRGlhbG9nKQogQ0FM
TEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd09wZW4pCiB7CiAgICAgSU5DX1NUQVRTKCJET00uRE9N
V2luZG93Lm9wZW4oKSIpOwotICAgIERPTVdpbmRvdyogcGFyZW50ID0gVjhQcm94eTo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGFyZ3Mu
SG9sZGVyKCkpOworICAgIERPTVdpbmRvdyogcGFyZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgYXJncy5I
b2xkZXIoKSk7CiAgICAgRnJhbWUqIGZyYW1lID0gcGFyZW50LT5mcmFtZSgpOwogCiAgICAgaWYg
KCFmcmFtZSB8fCAhVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoZnJhbWUsIHRydWUpKQpAQCAtNjkx
LDcgKzY5MSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dPcGVuKQogCiAgICAgICAg
ICAgICBmcmFtZS0+bG9hZGVyKCktPnNjaGVkdWxlTG9jYXRpb25DaGFuZ2UoY29tcGxldGVkVXJs
LCByZWZlcnJlciwgZmFsc2UsIHVzZXJHZXN0dXJlKTsKICAgICAgICAgfQotICAgICAgICByZXR1
cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGZy
YW1lLT5kb21XaW5kb3coKSk7CisgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBmcmFtZS0+ZG9tV2luZG93KCkpOwog
ICAgIH0KIAogICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgbmFtZWQgZnJhbWUgb3IgYSBuZXcgd2lu
ZG93LCB3ZSdsbCB1c2UgdGhlCkBAIC03NTEsMTggKzc1MSwxOCBAQCBDQUxMQkFDS19GVU5DX0RF
Q0woRE9NV2luZG93T3BlbikKICAgICBpZiAoIWZyYW1lKQogICAgICAgICByZXR1cm4gdjg6OlVu
ZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xh
c3NJbmRleDo6RE9NV0lORE9XLCBmcmFtZS0+ZG9tV2luZG93KCkpOworICAgIHJldHVybiBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBmcmFt
ZS0+ZG9tV2luZG93KCkpOwogfQogCiAKIElOREVYRURfUFJPUEVSVFlfR0VUVEVSKERPTVdpbmRv
dykKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5ET01XaW5kb3cuSW5kZXhlZFByb3BlcnR5R2V0dGVy
Iik7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFByb3h5Ojpsb29rdXBE
T01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbmZvLlRoaXMoKSk7CisgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBw
ZXIoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGluZm8uVGhpcygpKTsKICAgICBpZiAoaG9sZGVy
LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAK
LSAgICBET01XaW5kb3cqIHdpbmRvdyA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxE
T01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpOworICAgIERPTVdpbmRv
dyogd2luZG93ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93
PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgaG9sZGVyKTsKICAgICBpZiAoIXdpbmRvdykKICAg
ICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKQEAgLTc3Miw3ICs3NzIs
NyBAQCBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihET01XaW5kb3cpCiAKICAgICBGcmFtZSogY2hp
bGQgPSBmcmFtZS0+dHJlZSgpLT5jaGlsZChpbmRleCk7CiAgICAgaWYgKGNoaWxkKQotICAgICAg
ICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpET01XSU5E
T1csIGNoaWxkLT5kb21XaW5kb3coKSk7CisgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNv
bnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBjaGlsZC0+ZG9tV2luZG93
KCkpOwogCiAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiB9CkBAIC03ODIs
MTEgKzc4MiwxMSBAQCBOQU1FRF9QUk9QRVJUWV9HRVRURVIoRE9NV2luZG93KQogewogICAgIElO
Q19TVEFUUygiRE9NLkRPTVdpbmRvdy5OYW1lZFByb3BlcnR5R2V0dGVyIik7CiAKLSAgICB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIGluZm8uVGhpcygpKTsKKyAgICB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGhvbGRlciA9IFY4RE9NV3JhcHBlcjo6bG9va3VwRE9NV3JhcHBlcihWOENsYXNzSW5k
ZXg6OkRPTVdJTkRPVywgaW5mby5UaGlzKCkpOwogICAgIGlmIChob2xkZXIuSXNFbXB0eSgpKQog
ICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIAotICAgIERPTVdpbmRv
dyogd2luZG93ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdpbmRvdz4oVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIGhvbGRlcik7CisgICAgRE9NV2luZG93KiB3aW5kb3cgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRl
eDo6RE9NV0lORE9XLCBob2xkZXIpOwogICAgIGlmICghd2luZG93KQogICAgICAgICByZXR1cm4g
bm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIApAQCAtNzk5LDcgKzc5OSw3IEBAIE5BTUVEX1BS
T1BFUlRZX0dFVFRFUihET01XaW5kb3cpCiAgICAgQXRvbWljU3RyaW5nIHByb3BOYW1lID0gdjhT
dHJpbmdUb0F0b21pY1dlYkNvcmVTdHJpbmcobmFtZSk7CiAgICAgRnJhbWUqIGNoaWxkID0gZnJh
bWUtPnRyZWUoKS0+Y2hpbGQocHJvcE5hbWUpOwogICAgIGlmIChjaGlsZCkKLSAgICAgICAgcmV0
dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBj
aGlsZC0+ZG9tV2luZG93KCkpOworICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgY2hpbGQtPmRvbVdpbmRvdygpKTsK
IAogICAgIC8vIFNlYXJjaCBJREwgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIHByb3RvdHlwZQog
ICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiByZXN1bHQgPSBob2xkZXItPkdldFJlYWxOYW1lZFBy
b3BlcnR5SW5Qcm90b3R5cGVDaGFpbihuYW1lKTsKQEAgLTgxMiw5ICs4MTIsOSBAQCBOQU1FRF9Q
Uk9QRVJUWV9HRVRURVIoRE9NV2luZG93KQogICAgICAgICBSZWZQdHI8SFRNTENvbGxlY3Rpb24+
IGl0ZW1zID0gZG9jLT53aW5kb3dOYW1lZEl0ZW1zKHByb3BOYW1lKTsKICAgICAgICAgaWYgKGl0
ZW1zLT5sZW5ndGgoKSA+PSAxKSB7CiAgICAgICAgICAgICBpZiAoaXRlbXMtPmxlbmd0aCgpID09
IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnROb2RlVG9WOE9iamVj
dChpdGVtcy0+Zmlyc3RJdGVtKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChpdGVtcy0+Zmlyc3RJdGVtKCkpOwogICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVj
dChWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBpdGVtcy5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4
OjpIVE1MQ09MTEVDVElPTiwgaXRlbXMuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQogCkBAIC04
NTYsNyArODU2LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERPTVdpbmRvd1NldEludGVydmFsKQog
dm9pZCBWOEN1c3RvbTo6Q2xlYXJUaW1lb3V0SW1wbChjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdz
KQogewogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwot
ICAgIERPTVdpbmRvdyogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PERPTVdp
bmRvdz4oVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGhvbGRlcik7CisgICAgRE9NV2luZG93KiBp
bXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xh
c3NJbmRleDo6RE9NV0lORE9XLCBob2xkZXIpOwogICAgIGlmICghVjhQcm94eTo6Y2FuQWNjZXNz
RnJhbWUoaW1wLT5mcmFtZSgpLCB0cnVlKSkKICAgICAgICAgcmV0dXJuOwogICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQgPSBzdGF0aWNfY2FzdDxTY3JpcHRFeGVjdXRpb25Db250
ZXh0Kj4oaW1wLT5mcmFtZSgpLT5kb2N1bWVudCgpKTsKQEAgLTg4MiwxMSArODgyLDExIEBAIENB
TExCQUNLX0ZVTkNfREVDTChET01XaW5kb3dDbGVhckludGVydmFsKQogTkFNRURfQUNDRVNTX0NI
RUNLKERPTVdpbmRvdykKIHsKICAgICBBU1NFUlQoVjhDbGFzc0luZGV4OjpGcm9tSW50KGRhdGEt
PkludDMyVmFsdWUoKSkgPT0gVjhDbGFzc0luZGV4OjpET01XSU5ET1cpOwotICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB3aW5kb3cgPSBWOFByb3h5Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJ
bmRleDo6RE9NV0lORE9XLCBob3N0KTsKKyAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd2luZG93
ID0gVjhET01XcmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6RE9NV0lORE9X
LCBob3N0KTsKICAgICBpZiAod2luZG93LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OyAgLy8gdGhlIGZyYW1lIGlzIGdvbmUuCiAKLSAgICBET01XaW5kb3cqIHRhcmdldFdpbmRvdyA9
IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6
RE9NV0lORE9XLCB3aW5kb3cpOworICAgIERPTVdpbmRvdyogdGFyZ2V0V2luZG93ID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRP
TVdJTkRPVywgd2luZG93KTsKIAogICAgIEFTU0VSVCh0YXJnZXRXaW5kb3cpOwogCkBAIC05MDgs
MTEgKzkwOCwxMSBAQCBOQU1FRF9BQ0NFU1NfQ0hFQ0soRE9NV2luZG93KQogSU5ERVhFRF9BQ0NF
U1NfQ0hFQ0soRE9NV2luZG93KQogewogICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OkZyb21JbnQo
ZGF0YS0+SW50MzJWYWx1ZSgpKSA9PSBWOENsYXNzSW5kZXg6OkRPTVdJTkRPVyk7Ci0gICAgdjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHdpbmRvdyA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhD
bGFzc0luZGV4OjpET01XSU5ET1csIGhvc3QpOworICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3
aW5kb3cgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpET01X
SU5ET1csIGhvc3QpOwogICAgIGlmICh3aW5kb3cuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKLSAgICBET01XaW5kb3cqIHRhcmdldFdpbmRvdyA9IFY4UHJveHk6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCB3aW5kb3cp
OworICAgIERPTVdpbmRvdyogdGFyZ2V0V2luZG93ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgd2luZG93KTsK
IAogICAgIEFTU0VSVCh0YXJnZXRXaW5kb3cpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERhdGFiYXNlQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCmluZGV4IDM0MTQ0MTcuLjliZTcyMzUgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCisr
KyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YWJhc2VDdXN0b20uY3BwCkBAIC02
Miw3ICs2Miw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChEYXRhYmFzZVRyYW5zYWN0aW9uKQogICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAgIH0KIAotICAgIERhdGFiYXNlKiBkYXRh
YmFzZSA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxEYXRhYmFzZT4oVjhDbGFzc0lu
ZGV4OjpEQVRBQkFTRSwgYXJncy5Ib2xkZXIoKSk7CisgICAgRGF0YWJhc2UqIGRhdGFiYXNlID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8RGF0YWJhc2U+KFY4Q2xhc3NJbmRl
eDo6REFUQUJBU0UsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gVjhQcm94
eTo6cmV0cmlldmVGcmFtZSgpOwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IDNkYjU3MzQuLmMyYjg5ZGIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCkBAIC01MiwxNiArNTIs
MTYgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKERvY3VtZW50RXZhbHVhdGUpCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uRG9jdW1lbnQuZXZhbHVhdGUoKSIpOwogCi0gICAgRG9jdW1lbnQqIGRvY3VtZW50
ID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8RG9jdW1lbnQ+KGFyZ3MuSG9sZGVy
KCkpOworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdy
YXBwZXJUb05vZGU8RG9jdW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOwogICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOwogICAgIFN0cmluZyBleHByZXNzaW9uID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0p
OwogICAgIE5vZGUqIGNvbnRleHROb2RlID0gMDsKICAgICBpZiAoVjhOb2RlOjpIYXNJbnN0YW5j
ZShhcmdzWzFdKSkKLSAgICAgICAgY29udGV4dE5vZGUgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3Jh
cHBlclRvTm9kZTxOb2RlPihhcmdzWzFdKTsKKyAgICAgICAgY29udGV4dE5vZGUgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMV0pOwogCiAgICAgWFBh
dGhOU1Jlc29sdmVyKiByZXNvbHZlciA9IDA7CiAgICAgaWYgKFY4WFBhdGhOU1Jlc29sdmVyOjpI
YXNJbnN0YW5jZShhcmdzWzJdKSkKLSAgICAgICAgcmVzb2x2ZXIgPSBWOFByb3h5Ojpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8WFBhdGhOU1Jlc29sdmVyPihWOENsYXNzSW5kZXg6OlhQQVRITlNSRVNP
TFZFUiwgYXJnc1syXSk7CisgICAgICAgIHJlc29sdmVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8WFBhdGhOU1Jlc29sdmVyPihWOENsYXNzSW5kZXg6OlhQQVRITlNSRVNP
TFZFUiwgYXJnc1syXSk7CiAgICAgZWxzZSBpZiAoYXJnc1syXS0+SXNPYmplY3QoKSkKICAgICAg
ICAgcmVzb2x2ZXIgPSBuZXcgVjhDdXN0b21YUGF0aE5TUmVzb2x2ZXIoYXJnc1syXS0+VG9PYmpl
Y3QoKSk7CiAgICAgZWxzZSBpZiAoIWFyZ3NbMl0tPklzTnVsbCgpICYmICFhcmdzWzJdLT5Jc1Vu
ZGVmaW5lZCgpKQpAQCAtNzAsNyArNzAsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woRG9jdW1lbnRF
dmFsdWF0ZSkKICAgICBpbnQgdHlwZSA9IHRvSW50MzIoYXJnc1szXSk7CiAgICAgWFBhdGhSZXN1
bHQqIGluUmVzdWx0ID0gMDsKICAgICBpZiAoVjhYUGF0aFJlc3VsdDo6SGFzSW5zdGFuY2UoYXJn
c1s0XSkpCi0gICAgICAgIGluUmVzdWx0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PFhQYXRoUmVzdWx0PihWOENsYXNzSW5kZXg6OlhQQVRIUkVTVUxULCBhcmdzWzRdKTsKKyAgICAg
ICAgaW5SZXN1bHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYUGF0aFJl
c3VsdD4oVjhDbGFzc0luZGV4OjpYUEFUSFJFU1VMVCwgYXJnc1s0XSk7CiAKICAgICB2ODo6VHJ5
Q2F0Y2ggZXhjZXB0aW9uQ2F0Y2hlcjsKICAgICBSZWZQdHI8WFBhdGhSZXN1bHQ+IHJlc3VsdCA9
IGRvY3VtZW50LT5ldmFsdWF0ZShleHByZXNzaW9uLCBjb250ZXh0Tm9kZSwgcmVzb2x2ZXIsIHR5
cGUsIGluUmVzdWx0LCBlYyk7CkBAIC04MCwyMCArODAsMjAgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KERvY3VtZW50RXZhbHVhdGUpCiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihlYyk7CiAKLSAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0lu
ZGV4OjpYUEFUSFJFU1VMVCwgcmVzdWx0LmdldCgpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OlhQQVRIUkVTVUxULCByZXN1bHQuZ2V0
KCkpOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0woRG9jdW1lbnRHZXRDU1NDYW52YXNDb250ZXh0
KQogewogICAgIElOQ19TVEFUUygiRE9NLkRvY3VtZW50LmdldENTU0NhbnZhc0NvbnRleHQiKTsK
ICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsKLSAgICBE
b2N1bWVudCogaW1wID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8RG9jdW1lbnQ+
KGhvbGRlcik7CisgICAgRG9jdW1lbnQqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdy
YXBwZXJUb05vZGU8RG9jdW1lbnQ+KGhvbGRlcik7CiAgICAgU3RyaW5nIGNvbnRleHRJZCA9IHRv
V2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICBTdHJpbmcgbmFtZSA9IHRvV2ViQ29yZVN0cmlu
ZyhhcmdzWzFdKTsKICAgICBpbnQgd2lkdGggPSB0b0ludDMyKGFyZ3NbMl0pOwogICAgIGludCBo
ZWlnaHQgPSB0b0ludDMyKGFyZ3NbM10pOwogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCog
cmVzdWx0ID0gaW1wLT5nZXRDU1NDYW52YXNDb250ZXh0KGNvbnRleHRJZCwgbmFtZSwgd2lkdGgs
IGhlaWdodCk7Ci0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJ
bmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCByZXN1bHQpOworICAgIHJldHVybiBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5H
Q09OVEVYVDJELCByZXN1bHQpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50TG9jYXRpb25DdXN0b20u
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudExvY2F0aW9uQ3VzdG9t
LmNwcAppbmRleCA1ZTllYTllLi40NDBiYmRjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERvY3VtZW50TG9jYXRpb25DdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4RG9jdW1lbnRMb2NhdGlvbkN1c3RvbS5jcHAKQEAgLTM0LDE3ICsz
NCwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEFDQ0VTU09SX0dFVFRFUihEb2N1bWVudExv
Y2F0aW9uKQogewotICAgIERvY3VtZW50KiBkb2N1bWVudCA9IFY4UHJveHk6OmNvbnZlcnRET01X
cmFwcGVyVG9OYXRpdmU8RG9jdW1lbnQ+KGluZm8uSG9sZGVyKCkpOworICAgIERvY3VtZW50KiBk
b2N1bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxEb2N1bWVu
dD4oaW5mby5Ib2xkZXIoKSk7CiAgICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSkKICAgICAgICAg
cmV0dXJuIHY4OjpOdWxsKCk7CiAKICAgICBET01XaW5kb3cqIHdpbmRvdyA9IGRvY3VtZW50LT5m
cmFtZSgpLT5kb21XaW5kb3coKTsKLSAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmpl
Y3QoVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgd2luZG93LT5sb2NhdGlvbigpKTsKKyAgICByZXR1
cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkxPQ0FUSU9O
LCB3aW5kb3ctPmxvY2F0aW9uKCkpOwogfQogCiBBQ0NFU1NPUl9TRVRURVIoRG9jdW1lbnRMb2Nh
dGlvbikKIHsKLSAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3Jh
cHBlclRvTmF0aXZlPERvY3VtZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBEb2N1bWVudCogZG9j
dW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8RG9jdW1lbnQ+
KGluZm8uSG9sZGVyKCkpOwogICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJl
dHVybjsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbGVtZW50
Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5j
cHAKaW5kZXggZDllOTg4Zi4uZTE2YTYyYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwCkBAIC01Myw3ICs1Myw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIENBTExCQUNLX0ZVTkNfREVDTChFbGVtZW50U2V0QXR0cmlidXRlKQogewogICAgIElO
Q19TVEFUUygiRE9NLkVsZW1lbnQuc2V0QXR0cmlidXRlKCkiKTsKLSAgICBFbGVtZW50KiBlbGVt
ZW50ID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8RWxlbWVudD4oYXJncy5Ib2xk
ZXIoKSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdy
YXBwZXJUb05vZGU8RWxlbWVudD4oYXJncy5Ib2xkZXIoKSk7CiAgICAgU3RyaW5nIG5hbWUgPSB0
b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgU3RyaW5nIHZhbHVlID0gdG9XZWJDb3JlU3Ry
aW5nKGFyZ3NbMV0pOwogCkBAIC03NCw4ICs3NCw4IEBAIENBTExCQUNLX0ZVTkNfREVDTChFbGVt
ZW50U2V0QXR0cmlidXRlTm9kZSkKICAgICBpZiAoIVY4QXR0cjo6SGFzSW5zdGFuY2UoYXJnc1sw
XSkpCiAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKFRZUEVfTUlTTUFUQ0hfRVJSKTsKIAotICAg
IEF0dHIqIG5ld0F0dHIgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxBdHRyPihh
cmdzWzBdKTsKLSAgICBFbGVtZW50KiBlbGVtZW50ID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBw
ZXJUb05vZGU8RWxlbWVudD4oYXJncy5Ib2xkZXIoKSk7CisgICAgQXR0ciogbmV3QXR0ciA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8QXR0cj4oYXJnc1swXSk7CisgICAg
RWxlbWVudCogZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
RWxlbWVudD4oYXJncy5Ib2xkZXIoKSk7CiAKICAgICBpZiAoIWFsbG93U2V0dGluZ1NyY1RvSmF2
YXNjcmlwdFVSTChlbGVtZW50LCBuZXdBdHRyLT5uYW1lKCksIG5ld0F0dHItPnZhbHVlKCkpKQog
ICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtODUsMTMgKzg1LDEzIEBAIENBTExC
QUNLX0ZVTkNfREVDTChFbGVtZW50U2V0QXR0cmlidXRlTm9kZSkKICAgICBpZiAoZWMpCiAgICAg
ICAgIHRocm93RXJyb3IoZWMpOwogCi0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnROb2RlVG9W
OE9iamVjdChyZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRO
b2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0woRWxl
bWVudFNldEF0dHJpYnV0ZU5TKQogewogICAgIElOQ19TVEFUUygiRE9NLkVsZW1lbnQuc2V0QXR0
cmlidXRlTlMoKSIpOwotICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9N
V3JhcHBlclRvTm9kZTxFbGVtZW50PihhcmdzLkhvbGRlcigpKTsKKyAgICBFbGVtZW50KiBlbGVt
ZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxFbGVtZW50Pihhcmdz
LkhvbGRlcigpKTsKICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdG9XZWJDb3JlU3RyaW5nV2l0
aE51bGxDaGVjayhhcmdzWzBdKTsKICAgICBTdHJpbmcgcXVhbGlmaWVkTmFtZSA9IHRvV2ViQ29y
ZVN0cmluZyhhcmdzWzFdKTsKICAgICBTdHJpbmcgdmFsdWUgPSB0b1dlYkNvcmVTdHJpbmcoYXJn
c1syXSk7CkBAIC0xMTMsOCArMTEzLDggQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEVsZW1lbnRTZXRB
dHRyaWJ1dGVOb2RlTlMpCiAgICAgaWYgKCFWOEF0dHI6Okhhc0luc3RhbmNlKGFyZ3NbMF0pKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihUWVBFX01JU01BVENIX0VSUik7CiAKLSAgICBBdHRy
KiBuZXdBdHRyID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8QXR0cj4oYXJnc1sw
XSk7Ci0gICAgRWxlbWVudCogZWxlbWVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPEVsZW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOworICAgIEF0dHIqIG5ld0F0dHIgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEF0dHI+KGFyZ3NbMF0pOworICAgIEVsZW1l
bnQqIGVsZW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEVsZW1l
bnQ+KGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgaWYgKCFhbGxvd1NldHRpbmdTcmNUb0phdmFzY3Jp
cHRVUkwoZWxlbWVudCwgbmV3QXR0ci0+bmFtZSgpLCBuZXdBdHRyLT52YWx1ZSgpKSkKICAgICAg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKQEAgLTEyNCw3ICsxMjQsNyBAQCBDQUxMQkFDS19G
VU5DX0RFQ0woRWxlbWVudFNldEF0dHJpYnV0ZU5vZGVOUykKICAgICBpZiAoZWMpCiAgICAgICAg
IHRocm93RXJyb3IoZWMpOwogCi0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnROb2RlVG9WOE9i
amVjdChyZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2Rl
VG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOwogfQogCiBzdGF0aWMgaW5saW5lIFN0cmluZyB0b0V2
ZW50VHlwZSh2ODo6TG9jYWw8djg6OlN0cmluZz4gdmFsdWUpCkBAIC0xMzYsNyArMTM2LDcgQEAg
c3RhdGljIGlubGluZSBTdHJpbmcgdG9FdmVudFR5cGUodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHZh
bHVlKQogCiBBQ0NFU1NPUl9TRVRURVIoRWxlbWVudEV2ZW50SGFuZGxlcikKIHsKLSAgICBOb2Rl
KiBub2RlID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oaW5mby5Ib2xk
ZXIoKSk7CisgICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJU
b05vZGU8Tm9kZT4oaW5mby5Ib2xkZXIoKSk7CiAKICAgICBTdHJpbmcgZXZlbnRUeXBlID0gdG9F
dmVudFR5cGUobmFtZSk7CiAKQEAgLTE1OSwxMCArMTU5LDEwIEBAIEFDQ0VTU09SX1NFVFRFUihF
bGVtZW50RXZlbnRIYW5kbGVyKQogCiBBQ0NFU1NPUl9HRVRURVIoRWxlbWVudEV2ZW50SGFuZGxl
cikKIHsKLSAgICBOb2RlKiBub2RlID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
Tm9kZT4oaW5mby5Ib2xkZXIoKSk7CisgICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oaW5mby5Ib2xkZXIoKSk7CiAKICAgICBFdmVudExp
c3RlbmVyKiBsaXN0ZW5lciA9IG5vZGUtPmdldEF0dHJpYnV0ZUV2ZW50TGlzdGVuZXIodG9FdmVu
dFR5cGUobmFtZSkpOwotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0RXZlbnRMaXN0ZW5lclRv
VjhPYmplY3QobGlzdGVuZXIpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRFdmVu
dExpc3RlbmVyVG9WOE9iamVjdChsaXN0ZW5lcik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20u
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVudEN1c3RvbS5jcHAKaW5kZXgg
NTc2N2ZkZS4uOGJhYzQwZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhFdmVudEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFdmVu
dEN1c3RvbS5jcHAKQEAgLTQzLDM5ICs0MywzOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIEFD
Q0VTU09SX1NFVFRFUihFdmVudFJldHVyblZhbHVlKQogewotICAgIEV2ZW50KiBldmVudCA9IFY4
UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8RXZlbnQ+KGluZm8uSG9sZGVyKCkpOwor
ICAgIEV2ZW50KiBldmVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2
ZTxFdmVudD4oaW5mby5Ib2xkZXIoKSk7CiAgICAgZXZlbnQtPnNldERlZmF1bHRQcmV2ZW50ZWQo
IXZhbHVlLT5Cb29sZWFuVmFsdWUoKSk7CiB9CiAKIEFDQ0VTU09SX0dFVFRFUihFdmVudERhdGFU
cmFuc2ZlcikKIHsKLSAgICBFdmVudCogZXZlbnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBl
clRvTmF0aXZlPEV2ZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBFdmVudCogZXZlbnQgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8RXZlbnQ+KGluZm8uSG9sZGVyKCkp
OwogCiAgICAgaWYgKGV2ZW50LT5pc0RyYWdFdmVudCgpKQotICAgICAgICByZXR1cm4gVjhQcm94
eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDTElQQk9BUkQsIHN0YXRpY19jYXN0
PE1vdXNlRXZlbnQqPihldmVudCktPmNsaXBib2FyZCgpKTsKKyAgICAgICAgcmV0dXJuIFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDTElQQk9BUkQsIHN0YXRp
Y19jYXN0PE1vdXNlRXZlbnQqPihldmVudCktPmNsaXBib2FyZCgpKTsKIAogICAgIHJldHVybiB2
ODo6VW5kZWZpbmVkKCk7CiB9CiAKIEFDQ0VTU09SX0dFVFRFUihFdmVudENsaXBib2FyZERhdGEp
CiB7Ci0gICAgRXZlbnQqIGV2ZW50ID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2
ZTxFdmVudD4oaW5mby5Ib2xkZXIoKSk7CisgICAgRXZlbnQqIGV2ZW50ID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPEV2ZW50PihpbmZvLkhvbGRlcigpKTsKIAogICAg
IGlmIChldmVudC0+aXNDbGlwYm9hcmRFdmVudCgpKQotICAgICAgICByZXR1cm4gVjhQcm94eTo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpDTElQQk9BUkQsIHN0YXRpY19jYXN0PENs
aXBib2FyZEV2ZW50Kj4oZXZlbnQpLT5jbGlwYm9hcmQoKSk7CisgICAgICAgIHJldHVybiBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0xJUEJPQVJELCBzdGF0
aWNfY2FzdDxDbGlwYm9hcmRFdmVudCo+KGV2ZW50KS0+Y2xpcGJvYXJkKCkpOwogCiAgICAgcmV0
dXJuIHY4OjpVbmRlZmluZWQoKTsKIH0KIAogQUNDRVNTT1JfR0VUVEVSKEV2ZW50U3JjRWxlbWVu
dCkKIHsKLSAgICBFdmVudCogZXZlbnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTmF0
aXZlPEV2ZW50PihpbmZvLkhvbGRlcigpKTsKLSAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydEV2
ZW50VGFyZ2V0VG9WOE9iamVjdChldmVudC0+dGFyZ2V0KCkpOworICAgIEV2ZW50KiBldmVudCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxFdmVudD4oaW5mby5Ib2xk
ZXIoKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50VGFyZ2V0VG9WOE9i
amVjdChldmVudC0+dGFyZ2V0KCkpOwogfQogCiBBQ0NFU1NPUl9HRVRURVIoRXZlbnRSZXR1cm5W
YWx1ZSkKIHsKLSAgICBFdmVudCogZXZlbnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRv
TmF0aXZlPEV2ZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBFdmVudCogZXZlbnQgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8RXZlbnQ+KGluZm8uSG9sZGVyKCkpOwog
ICAgIHJldHVybiBldmVudC0+ZGVmYXVsdFByZXZlbnRlZCgpID8gdjg6OkZhbHNlKCkgOiB2ODo6
VHJ1ZSgpOwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOEhUTUxBdWRpb0VsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggYmU3YWJjMC4uYzA5NDVj
YyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQXVkaW9FbGVt
ZW50Q29uc3RydWN0b3IuY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEF1ZGlvRWxlbWVudENvbnN0cnVjdG9yLmNwcApAQCAtNTUsMTUgKzU1LDE1IEBAIENBTExCQUNL
X0ZVTkNfREVDTChIVE1MQXVkaW9FbGVtZW50Q29uc3RydWN0b3IpCiAKICAgICAvLyBNYWtlIHN1
cmUgdGhlIGRvY3VtZW50IGlzIGFkZGVkIHRvIHRoZSBET00gTm9kZSBtYXAuIE90aGVyd2lzZSwg
dGhlIEhUTUxBdWRpb0VsZW1lbnQgaW5zdGFuY2UKICAgICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRo
ZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdhcmJhZ2UtY2NvbGxlY3RlZCBwcmVtYXR1
cmVseS4KLSAgICBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoZG9jdW1lbnQpOworICAg
IFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KGRvY3VtZW50KTsKIAogICAgIFJl
ZlB0cjxIVE1MQXVkaW9FbGVtZW50PiBhdWRpbyA9IG5ldyBIVE1MQXVkaW9FbGVtZW50KEhUTUxO
YW1lczo6YXVkaW9UYWcsIFY4UHJveHk6OnJldHJpZXZlRnJhbWUoKS0+ZG9jdW1lbnQoKSk7CiAg
ICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPiAwKQogICAgICAgICBhdWRpby0+c2V0U3JjKHRvV2ViQ29y
ZVN0cmluZyhhcmdzWzBdKSk7CiAKLSAgICBWOFByb3h5OjpzZXRET01XcmFwcGVyKGFyZ3MuSG9s
ZGVyKCksIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpOT0RFKSwgYXVkaW8uZ2V0
KCkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENs
YXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6Tk9ERSksIGF1ZGlvLmdldCgpKTsKICAgICBh
dWRpby0+cmVmKCk7Ci0gICAgVjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShhdWRpby5n
ZXQoKSwgdjg6OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7Cisg
ICAgVjhET01XcmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01Ob2RlKGF1ZGlvLmdldCgpLCB2ODo6
UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKICAgICByZXR1cm4g
YXJncy5Ib2xkZXIoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhIVE1MQ2FudmFzRWxlbWVudEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxDYW52YXNFbGVtZW50Q3VzdG9tLmNwcAppbmRleCAzOWZjNjgzLi4zNzc1ZDY2
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52YXNFbGVt
ZW50Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDYW52
YXNFbGVtZW50Q3VzdG9tLmNwcApAQCAtNDIsMTAgKzQyLDEwIEBAIENBTExCQUNLX0ZVTkNfREVD
TChIVE1MQ2FudmFzRWxlbWVudEdldENvbnRleHQpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRN
TENhbnZhc0VsZW1lbnQuY29udGV4dCIpOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xk
ZXIgPSBhcmdzLkhvbGRlcigpOwotICAgIEhUTUxDYW52YXNFbGVtZW50KiBpbXAgPSBWOFByb3h5
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4oaG9sZGVyKTsKKyAg
ICBIVE1MQ2FudmFzRWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxIVE1MQ2FudmFzRWxlbWVudD4oaG9sZGVyKTsKICAgICBTdHJpbmcgY29udGV4dElk
ID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAgIENhbnZhc1JlbmRlcmluZ0NvbnRleHQy
RCogcmVzdWx0ID0gaW1wLT5nZXRDb250ZXh0KGNvbnRleHRJZCk7Ci0gICAgcmV0dXJuIFY4UHJv
eHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVY
VDJELCByZXN1bHQpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0
KFY4Q2xhc3NJbmRleDo6Q0FOVkFTUkVOREVSSU5HQ09OVEVYVDJELCByZXN1bHQpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCmluZGV4IDdhZDA3Y2IuLmUxM2U2ZmEgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0
b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25D
dXN0b20uY3BwCkBAIC00NywxMCArNDcsMTAgQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBnZXROYW1lZEl0ZW1zKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCBBdG9taWNTdHIKICAg
ICAgICAgcmV0dXJuIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpOwogCiAgICAgaWYgKG5hbWVkSXRl
bXMuc2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhP
YmplY3QobmFtZWRJdGVtcy5hdCgwKS5nZXQoKSk7CisgICAgICAgIHJldHVybiBWOERPTVdyYXBw
ZXI6OmNvbnZlcnROb2RlVG9WOE9iamVjdChuYW1lZEl0ZW1zLmF0KDApLmdldCgpKTsKIAogICAg
IE5vZGVMaXN0KiBsaXN0ID0gbmV3IFY4TmFtZWROb2Rlc0NvbGxlY3Rpb24obmFtZWRJdGVtcyk7
Ci0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9E
RUxJU1QsIGxpc3QpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0
KFY4Q2xhc3NJbmRleDo6Tk9ERUxJU1QsIGxpc3QpOwogfQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGdldEl0ZW0oSFRNTENvbGxlY3Rpb24qIGNvbGxlY3Rpb24sIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBhcmd1bWVudCkKQEAgLTY2LDcgKzY2LDcgQEAgc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBnZXRJdGVtKEhUTUxDb2xsZWN0aW9uKiBjb2xsZWN0aW9uLCB2ODo6SGFuZGxl
PHY4OjoKICAgICB9CiAKICAgICBSZWZQdHI8Tm9kZT4gcmVzdWx0ID0gY29sbGVjdGlvbi0+aXRl
bShpbmRleC0+VWludDMyVmFsdWUoKSk7Ci0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnROb2Rl
VG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZl
cnROb2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOwogfQogCiBOQU1FRF9QUk9QRVJUWV9HRVRU
RVIoSFRNTENvbGxlY3Rpb24pCkBAIC04NCwyMSArODQsMjEgQEAgTkFNRURfUFJPUEVSVFlfR0VU
VEVSKEhUTUxDb2xsZWN0aW9uKQogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCk7CiAKICAgICAvLyBGaW5hbGx5LCBzZWFyY2ggdGhlIERPTSBzdHJ1Y3R1cmUuCi0gICAgSFRN
TENvbGxlY3Rpb24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MQ29s
bGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MQ09MTEVDVElPTiwgaW5mby5Ib2xkZXIoKSk7Cisg
ICAgSFRNTENvbGxlY3Rpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PEhUTUxDb2xsZWN0aW9uPihWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBpbmZvLkhv
bGRlcigpKTsKICAgICByZXR1cm4gZ2V0TmFtZWRJdGVtcyhpbXAsIHY4U3RyaW5nVG9BdG9taWNX
ZWJDb3JlU3RyaW5nKG5hbWUpKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxDb2xsZWN0
aW9uSXRlbSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MQ29sbGVjdGlvbi5pdGVtKCkiKTsK
LSAgICBIVE1MQ29sbGVjdGlvbiogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PEhUTUxDb2xsZWN0aW9uPihWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBhcmdzLkhvbGRl
cigpKTsKKyAgICBIVE1MQ29sbGVjdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8SFRNTENvbGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJT04s
IGFyZ3MuSG9sZGVyKCkpOwogICAgIHJldHVybiBnZXRJdGVtKGltcCwgYXJnc1swXSk7CiB9CiAK
IENBTExCQUNLX0ZVTkNfREVDTChIVE1MQ29sbGVjdGlvbk5hbWVkSXRlbSkKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5IVE1MQ29sbGVjdGlvbi5uYW1lZEl0ZW0oKSIpOwotICAgIEhUTUxDb2xsZWN0
aW9uKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SFRNTENvbGxlY3Rpb24+
KFY4Q2xhc3NJbmRleDo6SFRNTENPTExFQ1RJT04sIGFyZ3MuSG9sZGVyKCkpOworICAgIEhUTUxD
b2xsZWN0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxIVE1M
Q29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MQ09MTEVDVElPTiwgYXJncy5Ib2xkZXIoKSk7
CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IGdldE5hbWVkSXRlbXMoaW1wLCB0
b1dlYkNvcmVTdHJpbmcoYXJnc1swXSkpOwogCiAgICAgaWYgKHJlc3VsdC5Jc0VtcHR5KCkpCkBA
IC0xMTMsNyArMTEzLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxDb2xsZWN0aW9uQ2FsbEFz
RnVuY3Rpb24pCiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwogCi0gICAgSFRNTENvbGxlY3Rpb24qIGltcCA9IFY4UHJveHk6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxIVE1MQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MQ09MTEVD
VElPTiwgYXJncy5Ib2xkZXIoKSk7CisgICAgSFRNTENvbGxlY3Rpb24qIGltcCA9IFY4RE9NV3Jh
cHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxDb2xsZWN0aW9uPihWOENsYXNzSW5kZXg6
OkhUTUxDT0xMRUNUSU9OLCBhcmdzLkhvbGRlcigpKTsKIAogICAgIGlmIChhcmdzLkxlbmd0aCgp
ID09IDEpCiAgICAgICAgIHJldHVybiBnZXRJdGVtKGltcCwgYXJnc1swXSk7CkBAIC0xMjgsNyAr
MTI4LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxDb2xsZWN0aW9uQ2FsbEFzRnVuY3Rpb24p
CiAgICAgTm9kZSogbm9kZSA9IGltcC0+bmFtZWRJdGVtKG5hbWUpOwogICAgIHdoaWxlIChub2Rl
KSB7CiAgICAgICAgIGlmICghY3VycmVudCkKLSAgICAgICAgICAgIHJldHVybiBWOFByb3h5Ojpj
b252ZXJ0Tm9kZVRvVjhPYmplY3Qobm9kZSk7CisgICAgICAgICAgICByZXR1cm4gVjhET01XcmFw
cGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qobm9kZSk7CiAKICAgICAgICAgbm9kZSA9IGltcC0+
bmV4dE5hbWVkSXRlbShuYW1lKTsKICAgICAgICAgY3VycmVudC0tOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1lbnRDdXN0b20uY3BwCmluZGV4IDc4NzFl
ZDUuLjNhMzI4M2EgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TERvY3VtZW50Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhU
TUxEb2N1bWVudEN1c3RvbS5jcHAKQEAgLTc4LDcgKzc4LDcgQEAgTkFNRURfUFJPUEVSVFlfR0VU
VEVSKEhUTUxEb2N1bWVudCkKICAgICAgICAgICAgIHJldHVybiB2YWx1ZTsKICAgICB9CiAKLSAg
ICBIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVy
VG9Ob2RlPEhUTUxEb2N1bWVudD4oaW5mby5Ib2xkZXIoKSk7CisgICAgSFRNTERvY3VtZW50KiBo
dG1sRG9jdW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxE
b2N1bWVudD4oaW5mby5Ib2xkZXIoKSk7CiAKICAgICAvLyBGYXN0IGNhc2UgZm9yIG5hbWVkIGVs
ZW1lbnRzIHRoYXQgYXJlIG5vdCB0aGVyZS4KICAgICBpZiAoIWh0bWxEb2N1bWVudC0+aGFzTmFt
ZWRJdGVtKGtleS5pbXBsKCkpICYmICFodG1sRG9jdW1lbnQtPmhhc0V4dHJhTmFtZWRJdGVtKGtl
eS5pbXBsKCkpKQpAQCAtOTIsMTIgKzkyLDEyIEBAIE5BTUVEX1BST1BFUlRZX0dFVFRFUihIVE1M
RG9jdW1lbnQpCiAgICAgICAgIE5vZGUqIG5vZGUgPSBpdGVtcy0+Zmlyc3RJdGVtKCk7CiAgICAg
ICAgIEZyYW1lKiBmcmFtZSA9IDA7CiAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6aWZyYW1lVGFnKSAmJiAoZnJhbWUgPSBzdGF0aWNfY2FzdDxIVE1MSUZyYW1lRWxlbWVu
dCo+KG5vZGUpLT5jb250ZW50RnJhbWUoKSkpCi0gICAgICAgICAgICByZXR1cm4gVjhQcm94eTo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpET01XSU5ET1csIGZyYW1lLT5kb21XaW5k
b3coKSk7CisgICAgICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVj
dChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZnJhbWUtPmRvbVdpbmRvdygpKTsKIAotICAgICAg
ICByZXR1cm4gVjhQcm94eTo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KG5vZGUpOworICAgICAgICBy
ZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0Tm9kZVRvVjhPYmplY3Qobm9kZSk7CiAgICAgfQog
Ci0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6SFRN
TENPTExFQ1RJT04sIGl0ZW1zLmdldCgpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBpdGVtcy5nZXQoKSk7
CiB9CiAKIC8vIEhUTUxEb2N1bWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTcsNyArMTE3LDcgQEAgc3RhdGlj
IFN0cmluZyB3cml0ZUhlbHBlckdldFN0cmluZyhjb25zdCB2ODo6QXJndW1lbnRzJiBhcmdzKQog
Q0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxEb2N1bWVudFdyaXRlKQogewogICAgIElOQ19TVEFUUygi
RE9NLkhUTUxEb2N1bWVudC53cml0ZSgpIik7Ci0gICAgSFRNTERvY3VtZW50KiBodG1sRG9jdW1l
bnQgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MRG9jdW1lbnQ+KGFyZ3Mu
SG9sZGVyKCkpOworICAgIEhUTUxEb2N1bWVudCogaHRtbERvY3VtZW50ID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MRG9jdW1lbnQ+KGFyZ3MuSG9sZGVyKCkpOwog
ICAgIEZyYW1lKiBmcmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWVGb3JDYWxsaW5nQ29udGV4
dCgpOwogICAgIEFTU0VSVChmcmFtZSk7CiAgICAgaHRtbERvY3VtZW50LT53cml0ZSh3cml0ZUhl
bHBlckdldFN0cmluZyhhcmdzKSwgZnJhbWUtPmRvY3VtZW50KCkpOwpAQCAtMTI3LDcgKzEyNyw3
IEBAIENBTExCQUNLX0ZVTkNfREVDTChIVE1MRG9jdW1lbnRXcml0ZSkKIENBTExCQUNLX0ZVTkNf
REVDTChIVE1MRG9jdW1lbnRXcml0ZWxuKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxEb2N1
bWVudC53cml0ZWxuKCkiKTsKLSAgICBIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9IFY4UHJv
eHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxEb2N1bWVudD4oYXJncy5Ib2xkZXIoKSk7
CisgICAgSFRNTERvY3VtZW50KiBodG1sRG9jdW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01XcmFwcGVyVG9Ob2RlPEhUTUxEb2N1bWVudD4oYXJncy5Ib2xkZXIoKSk7CiAgICAgRnJhbWUq
IGZyYW1lID0gVjhQcm94eTo6cmV0cmlldmVGcmFtZUZvckNhbGxpbmdDb250ZXh0KCk7CiAgICAg
QVNTRVJUKGZyYW1lKTsKICAgICBodG1sRG9jdW1lbnQtPndyaXRlbG4od3JpdGVIZWxwZXJHZXRT
dHJpbmcoYXJncyksIGZyYW1lLT5kb2N1bWVudCgpKTsKQEAgLTEzNyw3ICsxMzcsNyBAQCBDQUxM
QkFDS19GVU5DX0RFQ0woSFRNTERvY3VtZW50V3JpdGVsbikKIENBTExCQUNLX0ZVTkNfREVDTChI
VE1MRG9jdW1lbnRPcGVuKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxEb2N1bWVudC5vcGVu
KCkiKTsKLSAgICBIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9IFY4UHJveHk6OmNvbnZlcnRE
T01XcmFwcGVyVG9Ob2RlPEhUTUxEb2N1bWVudD4oYXJncy5Ib2xkZXIoKSk7CisgICAgSFRNTERv
Y3VtZW50KiBodG1sRG9jdW1lbnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9O
b2RlPEhUTUxEb2N1bWVudD4oYXJncy5Ib2xkZXIoKSk7CiAKICAgICBpZiAoYXJncy5MZW5ndGgo
KSA+IDIpIHsKICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGh0bWxEb2N1bWVudC0+ZnJhbWUo
KSkgewpAQCAtMTc5LDkgKzE3OSw5IEBAIEFDQ0VTU09SX0dFVFRFUihIVE1MRG9jdW1lbnRBbGwp
CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTERvY3VtZW50LmFsbC5fZ2V0Iik7CiAgICAgdjg6Okhh
bmRsZVNjb3BlIHNjb3BlOwogICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5m
by5Ib2xkZXIoKTsKLSAgICBIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9IFY4UHJveHk6OmNv
bnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxEb2N1bWVudD4oaG9sZGVyKTsKKyAgICBIVE1MRG9j
dW1lbnQqIGh0bWxEb2N1bWVudCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05v
ZGU8SFRNTERvY3VtZW50Pihob2xkZXIpOwogICAgIFJlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29s
bGVjdGlvbiA9IFdURjo6Z2V0UHRyKGh0bWxEb2N1bWVudC0+YWxsKCkpOwotICAgIHJldHVybiBW
OFByb3h5Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkhUTUxDT0xMRUNUSU9OLCBX
VEY6OmdldFB0cihjb2xsZWN0aW9uKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpIVE1MQ09MTEVDVElPTiwgV1RGOjpnZXRQdHIoY29s
bGVjdGlvbikpOwogfQogCiBBQ0NFU1NPUl9TRVRURVIoSFRNTERvY3VtZW50QWxsKQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRm9ybUVsZW1lbnRDdXN0b20u
Y3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRm9ybUVsZW1lbnRDdXN0b20u
Y3BwCmluZGV4IDFjNTc3NGQuLjc0ZTA2MDAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTEZvcm1FbGVtZW50Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEhUTUxGb3JtRWxlbWVudEN1c3RvbS5jcHAKQEAgLTQyLDE5ICs0Miwx
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihIVE1MRm9y
bUVsZW1lbnQpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTEZvcm1FbGVtZW50LkluZGV4ZWRQ
cm9wZXJ0eUdldHRlciIpOwotICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9IFY4UHJveHk6OmNv
bnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxGb3JtRWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7Cisg
ICAgSFRNTEZvcm1FbGVtZW50KiBmb3JtID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxIVE1MRm9ybUVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOwogICAgIAogICAgIFJlZlB0
cjxOb2RlPiBmb3JtRWxlbWVudCA9IGZvcm0tPmVsZW1lbnRzKCktPml0ZW0oaW5kZXgpOwogICAg
IGlmICghZm9ybUVsZW1lbnQpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRv
cigpOwotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmplY3QoZm9ybUVsZW1l
bnQuZ2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnROb2RlVG9WOE9iamVj
dChmb3JtRWxlbWVudC5nZXQoKSk7CiB9CiAKIAogTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxG
b3JtRWxlbWVudCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MRm9ybUVsZW1lbnQuTmFtZWRQ
cm9wZXJ0eUdldHRlciIpOwotICAgIEhUTUxGb3JtRWxlbWVudCogaW1wID0gVjhQcm94eTo6Y29u
dmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEZvcm1FbGVtZW50PihpbmZvLkhvbGRlcigpKTsKKyAg
ICBIVE1MRm9ybUVsZW1lbnQqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJU
b05vZGU8SFRNTEZvcm1FbGVtZW50PihpbmZvLkhvbGRlcigpKTsKICAgICBBdG9taWNTdHJpbmcg
diA9IHY4U3RyaW5nVG9BdG9taWNXZWJDb3JlU3RyaW5nKG5hbWUpOwogCiAgICAgLy8gQ2FsbCBn
ZXROYW1lZEVsZW1lbnRzIHR3aWNlLCBmaXJzdCB0aW1lIGNoZWNrIGlmIGl0IGhhcyBhIHZhbHVl
CkBAIC03NCwxNSArNzQsMTUgQEAgTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxGb3JtRWxlbWVu
dCkKICAgICBBU1NFUlQoIWVsZW1lbnRzLmlzRW1wdHkoKSk7CiAKICAgICBpZiAoZWxlbWVudHMu
c2l6ZSgpID09IDEpCi0gICAgICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRvVjhPYmpl
Y3QoZWxlbWVudHMuYXQoMCkuZ2V0KCkpOworICAgICAgICByZXR1cm4gVjhET01XcmFwcGVyOjpj
b252ZXJ0Tm9kZVRvVjhPYmplY3QoZWxlbWVudHMuYXQoMCkuZ2V0KCkpOwogCiAgICAgTm9kZUxp
c3QqIGNvbGxlY3Rpb24gPSBuZXcgVjhOYW1lZE5vZGVzQ29sbGVjdGlvbihlbGVtZW50cyk7Ci0g
ICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6Tk9ERUxJ
U1QsIGNvbGxlY3Rpb24pOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2Jq
ZWN0KFY4Q2xhc3NJbmRleDo6Tk9ERUxJU1QsIGNvbGxlY3Rpb24pOwogfQogICAgIAogQ0FMTEJB
Q0tfRlVOQ19ERUNMKEhUTUxGb3JtRWxlbWVudFN1Ym1pdCkgewogICAgIElOQ19TVEFUUygiRE9N
LkhUTUxGb3JtRWxlbWVudC5zdWJtaXQoKSIpOwotICAgIEhUTUxGb3JtRWxlbWVudCogZm9ybSA9
IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8SFRNTEZvcm1FbGVtZW50Pihhcmdz
LkhvbGRlcigpKTsKKyAgICBIVE1MRm9ybUVsZW1lbnQqIGZvcm0gPSBWOERPTVdyYXBwZXI6OmNv
bnZlcnRET01XcmFwcGVyVG9OYXRpdmU8SFRNTEZvcm1FbGVtZW50PihhcmdzLkhvbGRlcigpKTsK
ICAgICBmb3JtLT5zdWJtaXQoMCwgZmFsc2UsIGZhbHNlKTsKICAgICByZXR1cm4gdjg6OlVuZGVm
aW5lZCgpOwogfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
RnJhbWVFbGVtZW50Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRN
TEZyYW1lRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggMDZjZDY2ZC4uNGY4NjVkZCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVFbGVtZW50Q3VzdG9tLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZUVsZW1lbnRDdXN0
b20uY3BwCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQUNDRVNTT1Jf
U0VUVEVSKEhUTUxGcmFtZUVsZW1lbnRTcmMpCiB7Ci0gICAgSFRNTEZyYW1lRWxlbWVudCogZnJh
bWUgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MRnJhbWVFbGVtZW50Pihp
bmZvLkhvbGRlcigpKTsKKyAgICBIVE1MRnJhbWVFbGVtZW50KiBmcmFtZSA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEZyYW1lRWxlbWVudD4oaW5mby5Ib2xkZXIo
KSk7CiAgICAgU3RyaW5nIHNyY1ZhbHVlID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2
YWx1ZSk7CiAKICAgICBpZiAoIWFsbG93U2V0dGluZ0ZyYW1lU3JjVG9KYXZhc2NyaXB0VXJsKGZy
YW1lLCBzcmNWYWx1ZSkpCkBAIC01MCw3ICs1MCw3IEBAIEFDQ0VTU09SX1NFVFRFUihIVE1MRnJh
bWVFbGVtZW50U3JjKQogCiBBQ0NFU1NPUl9TRVRURVIoSFRNTEZyYW1lRWxlbWVudExvY2F0aW9u
KQogewotICAgIEhUTUxGcmFtZUVsZW1lbnQqIGZyYW1lID0gVjhQcm94eTo6Y29udmVydERPTVdy
YXBwZXJUb05vZGU8SFRNTEZyYW1lRWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7CisgICAgSFRNTEZy
YW1lRWxlbWVudCogZnJhbWUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2Rl
PEhUTUxGcmFtZUVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOwogICAgIFN0cmluZyBsb2NhdGlvblZh
bHVlID0gdG9XZWJDb3JlU3RyaW5nV2l0aE51bGxDaGVjayh2YWx1ZSk7CiAKICAgICBpZiAoIWFs
bG93U2V0dGluZ0ZyYW1lU3JjVG9KYXZhc2NyaXB0VXJsKGZyYW1lLCBsb2NhdGlvblZhbHVlKSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lU2V0RWxl
bWVudEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxGcmFtZVNl
dEVsZW1lbnRDdXN0b20uY3BwCmluZGV4IDBkMmIyNGEuLmU4ZTJlNzIgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEZyYW1lU2V0RWxlbWVudEN1c3RvbS5jcHAK
KysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRnJhbWVTZXRFbGVtZW50Q3Vz
dG9tLmNwcApAQCAtNDcsMTQgKzQ3LDE0IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIE5BTUVEX1BS
T1BFUlRZX0dFVFRFUihIVE1MRnJhbWVTZXRFbGVtZW50KQogewogICAgIElOQ19TVEFUUygiRE9N
LkhUTUxGcmFtZVNldEVsZW1lbnQuTmFtZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIEhUTUxGcmFt
ZVNldEVsZW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxG
cmFtZVNldEVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOworICAgIEhUTUxGcmFtZVNldEVsZW1lbnQq
IGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTEZyYW1lU2V0
RWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7CiAgICAgTm9kZSogZnJhbWVOb2RlID0gaW1wLT5jaGls
ZHJlbigpLT5uYW1lZEl0ZW0odjhTdHJpbmdUb0F0b21pY1dlYkNvcmVTdHJpbmcobmFtZSkpOwog
ICAgIGlmIChmcmFtZU5vZGUgJiYgZnJhbWVOb2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6ZnJh
bWVUYWcpKSB7CiAgICAgICAgIERvY3VtZW50KiBkb2MgPSBzdGF0aWNfY2FzdDxIVE1MRnJhbWVF
bGVtZW50Kj4oZnJhbWVOb2RlKS0+Y29udGVudERvY3VtZW50KCk7CiAgICAgICAgIGlmICghZG9j
KQogICAgICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKICAgICAgICAgaWYgKEZyYW1l
KiBmcmFtZSA9IGRvYy0+ZnJhbWUoKSkKLSAgICAgICAgICAgIHJldHVybiBWOFByb3h5Ojpjb252
ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkRPTVdJTkRPVywgZnJhbWUtPmRvbVdpbmRvdygp
KTsKKyAgICAgICAgICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4
Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBmcmFtZS0+ZG9tV2luZG93KCkpOwogICAgIH0KICAgICBy
ZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElGcmFtZUVsZW1lbnRDdXN0b20uY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHAKaW5kZXgg
NDg1YzU4ZS4uY2UyYzI5YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhIVE1MSUZyYW1lRWxlbWVudEN1c3RvbS5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBBQ0NFU1NPUl9TRVRURVIoSFRNTElGcmFtZUVsZW1lbnRTcmMp
CiB7Ci0gICAgSFRNTElGcmFtZUVsZW1lbnQqIGlmcmFtZSA9IFY4UHJveHk6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPEhUTUxJRnJhbWVFbGVtZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1M
SUZyYW1lRWxlbWVudCogaWZyYW1lID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRv
Tm9kZTxIVE1MSUZyYW1lRWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7CiAgICAgU3RyaW5nIHYgPSB0
b1dlYkNvcmVTdHJpbmdXaXRoTnVsbENoZWNrKHZhbHVlKTsKIAogICAgIGlmICghYWxsb3dTZXR0
aW5nRnJhbWVTcmNUb0phdmFzY3JpcHRVcmwoaWZyYW1lLCB2KSkKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9yLmNwcCBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9y
LmNwcAppbmRleCA1ODQ0ZDNmLi4yN2RlNDZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOEhUTUxJbWFnZUVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKKysrIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW1hZ2VFbGVtZW50Q29uc3RydWN0b3IuY3BwCkBA
IC01NSw3ICs1NSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChIVE1MSW1hZ2VFbGVtZW50Q29uc3Ry
dWN0b3IpCiAKICAgICAvLyBNYWtlIHN1cmUgdGhlIGRvY3VtZW50IGlzIGFkZGVkIHRvIHRoZSBE
T00gTm9kZSBtYXAuIE90aGVyd2lzZSwgdGhlIEhUTUxJbWFnZUVsZW1lbnQgaW5zdGFuY2UKICAg
ICAvLyBtYXkgZW5kIHVwIGJlaW5nIHRoZSBvbmx5IG5vZGUgaW4gdGhlIG1hcCBhbmQgZ2V0IGdh
cmJhZ2UtY2NvbGxlY3RlZCBwcmVtYXR1cmVseS4KLSAgICBWOFByb3h5Ojpjb252ZXJ0Tm9kZVRv
VjhPYmplY3QoZG9jdW1lbnQpOworICAgIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2Jq
ZWN0KGRvY3VtZW50KTsKIAogICAgIFJlZlB0cjxIVE1MSW1hZ2VFbGVtZW50PiBpbWFnZSA9IG5l
dyBIVE1MSW1hZ2VFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBWOFByb3h5OjpyZXRyaWV2ZUZy
YW1lKCktPmRvY3VtZW50KCkpOwogICAgIGlmIChhcmdzLkxlbmd0aCgpID4gMCkgewpAQCAtNjQs
OSArNjQsOSBAQCBDQUxMQkFDS19GVU5DX0RFQ0woSFRNTEltYWdlRWxlbWVudENvbnN0cnVjdG9y
KQogICAgICAgICAgICAgaW1hZ2UtPnNldEhlaWdodCh0b0ludDMyKGFyZ3NbMV0pKTsKICAgICB9
CiAKLSAgICBWOFByb3h5OjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJbmRl
eDo6VG9JbnQoVjhDbGFzc0luZGV4OjpOT0RFKSwgaW1hZ2UuZ2V0KCkpOworICAgIFY4RE9NV3Jh
cHBlcjo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4
Q2xhc3NJbmRleDo6Tk9ERSksIGltYWdlLmdldCgpKTsKICAgICBpbWFnZS0+cmVmKCk7Ci0gICAg
VjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yRE9NTm9kZShpbWFnZS5nZXQoKSwgdjg6OlBlcnNpc3Rl
bnQ8djg6Ok9iamVjdD46Ok5ldyhhcmdzLkhvbGRlcigpKSk7CisgICAgVjhET01XcmFwcGVyOjpz
ZXRKU1dyYXBwZXJGb3JET01Ob2RlKGltYWdlLmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2Jq
ZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKIH0K
IApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW5wdXRFbGVt
ZW50Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTElucHV0RWxl
bWVudEN1c3RvbS5jcHAKaW5kZXggYWVhYWNhYS4uNjNmYmNlYyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MSW5wdXRFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxJbnB1dEVsZW1lbnRDdXN0b20uY3BwCkBA
IC00MSw3ICs0MSw3IEBAIEFDQ0VTU09SX0dFVFRFUihIVE1MSW5wdXRFbGVtZW50U2VsZWN0aW9u
U3RhcnQpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTElucHV0RWxlbWVudC5zZWxlY3Rpb25T
dGFydC5fZ2V0Iik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhv
bGRlcigpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPEhUTUxJbnB1dEVsZW1lbnQ+KGhvbGRlcik7CisgICAgSFRNTElucHV0RWxl
bWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MSW5w
dXRFbGVtZW50Pihob2xkZXIpOwogCiAgICAgaWYgKCFpbXAtPmNhbkhhdmVTZWxlY3Rpb24oKSkK
ICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkFjY2Vzc2luZyBzZWxlY3Rpb25TdGFydCBvbiBh
biBpbnB1dCBlbGVtZW50IHRoYXQgY2Fubm90IGhhdmUgYSBzZWxlY3Rpb24uIik7CkBAIC01NCw3
ICs1NCw3IEBAIEFDQ0VTU09SX1NFVFRFUihIVE1MSW5wdXRFbGVtZW50U2VsZWN0aW9uU3RhcnQp
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTElucHV0RWxlbWVudC5zZWxlY3Rpb25TdGFydC5f
c2V0Iik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigp
OwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVy
VG9Ob2RlPEhUTUxJbnB1dEVsZW1lbnQ+KGhvbGRlcik7CisgICAgSFRNTElucHV0RWxlbWVudCog
aW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MSW5wdXRFbGVt
ZW50Pihob2xkZXIpOwogCiAgICAgaWYgKCFpbXAtPmNhbkhhdmVTZWxlY3Rpb24oKSkgewogICAg
ICAgICB0aHJvd0Vycm9yKCJBY2Nlc3Npbmcgc2VsZWN0aW9uU3RhcnQgb24gYW4gaW5wdXQgZWxl
bWVudCB0aGF0IGNhbm5vdCBoYXZlIGEgc2VsZWN0aW9uLiIpOwpAQCAtNjcsNyArNjcsNyBAQCBB
Q0NFU1NPUl9HRVRURVIoSFRNTElucHV0RWxlbWVudFNlbGVjdGlvbkVuZCkKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5IVE1MSW5wdXRFbGVtZW50LnNlbGVjdGlvbkVuZC5fZ2V0Iik7CiAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwotICAgIEhUTUxJbnB1
dEVsZW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbnB1
dEVsZW1lbnQ+KGhvbGRlcik7CisgICAgSFRNTElucHV0RWxlbWVudCogaW1wID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MSW5wdXRFbGVtZW50Pihob2xkZXIpOwog
CiAgICAgaWYgKCFpbXAtPmNhbkhhdmVTZWxlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoIkFjY2Vzc2luZyBzZWxlY3Rpb25FbmQgb24gYW4gaW5wdXQgZWxlbWVudCB0aGF0IGNh
bm5vdCBoYXZlIGEgc2VsZWN0aW9uLiIpOwpAQCAtODAsNyArODAsNyBAQCBBQ0NFU1NPUl9TRVRU
RVIoSFRNTElucHV0RWxlbWVudFNlbGVjdGlvbkVuZCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5I
VE1MSW5wdXRFbGVtZW50LnNlbGVjdGlvbkVuZC5fc2V0Iik7CiAgICAgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGlt
cCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbnB1dEVsZW1lbnQ+KGhv
bGRlcik7CisgICAgSFRNTElucHV0RWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
RE9NV3JhcHBlclRvTm9kZTxIVE1MSW5wdXRFbGVtZW50Pihob2xkZXIpOwogCiAgICAgaWYgKCFp
bXAtPmNhbkhhdmVTZWxlY3Rpb24oKSkgewogICAgICAgICB0aHJvd0Vycm9yKCJBY2Nlc3Npbmcg
c2VsZWN0aW9uRW5kIG9uIGFuIGlucHV0IGVsZW1lbnQgdGhhdCBjYW5ub3QgaGF2ZSBhIHNlbGVj
dGlvbi4iKTsKQEAgLTk0LDcgKzk0LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxJbnB1dEVs
ZW1lbnRTZXRTZWxlY3Rpb25SYW5nZSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MSW5wdXRF
bGVtZW50LnNldFNlbGVjdGlvblJhbmdlIik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBo
b2xkZXIgPSBhcmdzLkhvbGRlcigpOwotICAgIEhUTUxJbnB1dEVsZW1lbnQqIGltcCA9IFY4UHJv
eHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxJbnB1dEVsZW1lbnQ+KGhvbGRlcik7Cisg
ICAgSFRNTElucHV0RWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxIVE1MSW5wdXRFbGVtZW50Pihob2xkZXIpOwogCiAgICAgaWYgKCFpbXAtPmNhbkhh
dmVTZWxlY3Rpb24oKSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIkNhbGxpbmcgc2V0U2Vs
ZWN0aW9uUmFuZ2Ugb24gYW4gaW5wdXQgZWxlbWVudCB0aGF0IGNhbm5vdCBoYXZlIGEgc2VsZWN0
aW9uLiIpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0
aW9uRWxlbWVudENvbnN0cnVjdG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
SFRNTE9wdGlvbkVsZW1lbnRDb25zdHJ1Y3Rvci5jcHAKaW5kZXggNzZjYTI3OC4uYzkzNThjYSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9uRWxlbWVu
dENvbnN0cnVjdG9yLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxP
cHRpb25FbGVtZW50Q29uc3RydWN0b3IuY3BwCkBAIC04MSw5ICs4MSw5IEBAIENBTExCQUNLX0ZV
TkNfREVDTChIVE1MT3B0aW9uRWxlbWVudENvbnN0cnVjdG9yKQogICAgICAgICB9CiAgICAgfQog
Ci0gICAgVjhQcm94eTo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6
OlRvSW50KFY4Q2xhc3NJbmRleDo6Tk9ERSksIG9wdGlvbi5nZXQoKSk7CisgICAgVjhET01XcmFw
cGVyOjpzZXRET01XcmFwcGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhD
bGFzc0luZGV4OjpOT0RFKSwgb3B0aW9uLmdldCgpKTsKICAgICBvcHRpb24tPnJlZigpOwotICAg
IFY4UHJveHk6OnNldEpTV3JhcHBlckZvckRPTU5vZGUob3B0aW9uLmdldCgpLCB2ODo6UGVyc2lz
dGVudDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKKyAgICBWOERPTVdyYXBwZXI6
OnNldEpTV3JhcHBlckZvckRPTU5vZGUob3B0aW9uLmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6
T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsKICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsK
IH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MT3B0aW9u
c0NvbGxlY3Rpb25DdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
T3B0aW9uc0NvbGxlY3Rpb25DdXN0b20uY3BwCmluZGV4IDk3NzkxMDIuLmMyNjA3NzAgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTE9wdGlvbnNDb2xsZWN0aW9u
Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxPcHRpb25z
Q29sbGVjdGlvbkN1c3RvbS5jcHAKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogQ0FMTEJBQ0tfRlVOQ19ERUNMKEhUTUxPcHRpb25zQ29sbGVjdGlvblJlbW92ZSkKIHsKICAg
ICBJTkNfU1RBVFMoIkRPTS5IVE1MT3B0aW9uc0NvbGxlY3Rpb24ucmVtb3ZlKCkiKTsKLSAgICBI
VE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6SFRNTE9QVElPTlNDT0xMRUNU
SU9OLCBhcmdzLkhvbGRlcigpKTsKKyAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbj4o
VjhDbGFzc0luZGV4OjpIVE1MT1BUSU9OU0NPTExFQ1RJT04sIGFyZ3MuSG9sZGVyKCkpOwogICAg
IEhUTUxTZWxlY3RFbGVtZW50KiBiYXNlID0gc3RhdGljX2Nhc3Q8SFRNTFNlbGVjdEVsZW1lbnQq
PihpbXAtPmJhc2UoKSk7CiAgICAgcmV0dXJuIHJlbW92ZUVsZW1lbnQoYmFzZSwgYXJncyk7CiB9
CkBAIC01OCw4ICs1OCw4IEBAIENBTExCQUNLX0ZVTkNfREVDTChIVE1MT3B0aW9uc0NvbGxlY3Rp
b25BZGQpCiAgICAgICAgIFY4UHJveHk6OnNldERPTUV4Y2VwdGlvbihUWVBFX01JU01BVENIX0VS
Uik7CiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAgICAgfQotICAgIEhUTUxPcHRp
b25zQ29sbGVjdGlvbiogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxP
cHRpb25zQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MT1BUSU9OU0NPTExFQ1RJT04sIGFy
Z3MuSG9sZGVyKCkpOwotICAgIEhUTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSBWOFByb3h5Ojpj
b252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MT3B0aW9uRWxlbWVudD4oYXJnc1swXSk7CisgICAg
SFRNTE9wdGlvbnNDb2xsZWN0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6SFRNTE9QVElPTlND
T0xMRUNUSU9OLCBhcmdzLkhvbGRlcigpKTsKKyAgICBIVE1MT3B0aW9uRWxlbWVudCogb3B0aW9u
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MT3B0aW9uRWxlbWVu
dD4oYXJnc1swXSk7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAoYXJncy5M
ZW5ndGgoKSA8IDIpCkBAIC04Nyw3ICs4Nyw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChIVE1MT3B0
aW9uc0NvbGxlY3Rpb25BZGQpCiBBQ0NFU1NPUl9HRVRURVIoSFRNTE9wdGlvbnNDb2xsZWN0aW9u
TGVuZ3RoKQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxPcHRpb25zQ29sbGVjdGlvbi5sZW5n
dGguX2dldCIpOwotICAgIEhUTUxPcHRpb25zQ29sbGVjdGlvbiogaW1wID0gVjhQcm94eTo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpI
VE1MT1BUSU9OU0NPTExFQ1RJT04sIGluZm8uSG9sZGVyKCkpOworICAgIEhUTUxPcHRpb25zQ29s
bGVjdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SFRNTE9w
dGlvbnNDb2xsZWN0aW9uPihWOENsYXNzSW5kZXg6OkhUTUxPUFRJT05TQ09MTEVDVElPTiwgaW5m
by5Ib2xkZXIoKSk7CiAgICAgaW50IHYgPSBpbXAtPmxlbmd0aCgpOwogICAgIHJldHVybiB2ODo6
SW50ZWdlcjo6TmV3KHYpOwogfQpAQCAtOTUsNyArOTUsNyBAQCBBQ0NFU1NPUl9HRVRURVIoSFRN
TE9wdGlvbnNDb2xsZWN0aW9uTGVuZ3RoKQogQUNDRVNTT1JfU0VUVEVSKEhUTUxPcHRpb25zQ29s
bGVjdGlvbkxlbmd0aCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MT3B0aW9uc0NvbGxlY3Rp
b24ubGVuZ3RoLl9zZXQiKTsKLSAgICBIVE1MT3B0aW9uc0NvbGxlY3Rpb24qIGltcCA9IFY4UHJv
eHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KFY4Q2xhc3NJ
bmRleDo6SFRNTE9QVElPTlNDT0xMRUNUSU9OLCBpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1MT3B0
aW9uc0NvbGxlY3Rpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PEhUTUxPcHRpb25zQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MT1BUSU9OU0NPTExFQ1RJ
T04sIGluZm8uSG9sZGVyKCkpOwogICAgIGRvdWJsZSB2ID0gdmFsdWUtPk51bWJlclZhbHVlKCk7
CiAgICAgdW5zaWduZWQgbmV3TGVuZ3RoID0gMDsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
QEAgLTExNiwxOSArMTE2LDE5IEBAIEFDQ0VTU09SX1NFVFRFUihIVE1MT3B0aW9uc0NvbGxlY3Rp
b25MZW5ndGgpCiBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihIVE1MT3B0aW9uc0NvbGxlY3Rpb24p
CiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRNTE9wdGlvbnNDb2xsZWN0aW9uLkluZGV4ZWRQcm9w
ZXJ0eUdldHRlciIpOwotICAgIEhUTUxPcHRpb25zQ29sbGVjdGlvbiogY29sbGVjdGlvbiA9IFY4
UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KFY4Q2xh
c3NJbmRleDo6SFRNTE9QVElPTlNDT0xMRUNUSU9OLCBpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1M
T3B0aW9uc0NvbGxlY3Rpb24qIGNvbGxlY3Rpb24gPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05h
dGl2ZU9iamVjdDxIVE1MT3B0aW9uc0NvbGxlY3Rpb24+KFY4Q2xhc3NJbmRleDo6SFRNTE9QVElP
TlNDT0xMRUNUSU9OLCBpbmZvLkhvbGRlcigpKTsKIAogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQg
PSBjb2xsZWN0aW9uLT5pdGVtKGluZGV4KTsKICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0
dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CiAKLSAgICByZXR1cm4gVjhQcm94eTo6Y29u
dmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBl
cjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5nZXQoKSk7CiB9CiAKIElOREVYRURfUFJP
UEVSVFlfU0VUVEVSKEhUTUxPcHRpb25zQ29sbGVjdGlvbikKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5IVE1MT3B0aW9uc0NvbGxlY3Rpb24uSW5kZXhlZFByb3BlcnR5U2V0dGVyIik7Ci0gICAgSFRN
TE9wdGlvbnNDb2xsZWN0aW9uKiBjb2xsZWN0aW9uID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PEhUTUxPcHRpb25zQ29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MT1BUSU9OU0NP
TExFQ1RJT04sIGluZm8uSG9sZGVyKCkpOworICAgIEhUTUxPcHRpb25zQ29sbGVjdGlvbiogY29s
bGVjdGlvbiA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEhUTUxPcHRpb25z
Q29sbGVjdGlvbj4oVjhDbGFzc0luZGV4OjpIVE1MT1BUSU9OU0NPTExFQ1RJT04sIGluZm8uSG9s
ZGVyKCkpOwogICAgIEhUTUxTZWxlY3RFbGVtZW50KiBiYXNlID0gc3RhdGljX2Nhc3Q8SFRNTFNl
bGVjdEVsZW1lbnQqPihjb2xsZWN0aW9uLT5iYXNlKCkpOwogICAgIHJldHVybiB0b09wdGlvbnND
b2xsZWN0aW9uU2V0dGVyKGluZGV4LCB2YWx1ZSwgYmFzZSk7CiB9CmRpZmYgLS1naXQgYS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxQbHVnSW5FbGVtZW50Q3VzdG9tLmNwcCBiL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFBsdWdJbkVsZW1lbnRDdXN0b20uY3BwCmlu
ZGV4IGVkODc5ZTMuLjZhZDQ0OTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4SFRNTFBsdWdJbkVsZW1lbnRDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4SFRNTFBsdWdJbkVsZW1lbnRDdXN0b20uY3BwCkBAIC00NSw3ICs0NSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIE5BTUVEX1BST1BFUlRZX0dFVFRFUihIVE1MUGx1Z0luRWxl
bWVudCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MUGx1Z0luRWxlbWVudC5OYW1lZFByb3Bl
cnR5R2V0dGVyIik7Ci0gICAgSFRNTFBsdWdJbkVsZW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZl
cnRET01XcmFwcGVyVG9Ob2RlPEhUTUxQbHVnSW5FbGVtZW50PihpbmZvLkhvbGRlcigpKTsKKyAg
ICBIVE1MUGx1Z0luRWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBl
clRvTm9kZTxIVE1MUGx1Z0luRWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7CiAgICAgU2NyaXB0SW5z
dGFuY2Ugc2NyaXB0SW5zdGFuY2UgPSBpbXAtPmdldEluc3RhbmNlKCk7CiAgICAgaWYgKCFzY3Jp
cHRJbnN0YW5jZSkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CkBA
IC02MCw3ICs2MCw3IEBAIE5BTUVEX1BST1BFUlRZX0dFVFRFUihIVE1MUGx1Z0luRWxlbWVudCkK
IE5BTUVEX1BST1BFUlRZX1NFVFRFUihIVE1MUGx1Z0luRWxlbWVudCkKIHsKICAgICBJTkNfU1RB
VFMoIkRPTS5IVE1MUGx1Z0luRWxlbWVudC5OYW1lZFByb3BlcnR5U2V0dGVyIik7Ci0gICAgSFRN
TFBsdWdJbkVsZW1lbnQqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhU
TUxQbHVnSW5FbGVtZW50PihpbmZvLkhvbGRlcigpKTsKKyAgICBIVE1MUGx1Z0luRWxlbWVudCog
aW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MUGx1Z0luRWxl
bWVudD4oaW5mby5Ib2xkZXIoKSk7CiAgICAgU2NyaXB0SW5zdGFuY2Ugc2NyaXB0SW5zdGFuY2Ug
PSBpbXAtPmdldEluc3RhbmNlKCk7CiAgICAgaWYgKCFzY3JpcHRJbnN0YW5jZSkKICAgICAgICAg
cmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7CkBAIC04MSw3ICs4MSw3IEBAIENBTExC
QUNLX0ZVTkNfREVDTChIVE1MUGx1Z0luRWxlbWVudCkKIElOREVYRURfUFJPUEVSVFlfR0VUVEVS
KEhUTUxQbHVnSW5FbGVtZW50KQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxQbHVnSW5FbGVt
ZW50LkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIEhUTUxQbHVnSW5FbGVtZW50KiBpbXAg
PSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MUGx1Z0luRWxlbWVudD4oaW5m
by5Ib2xkZXIoKSk7CisgICAgSFRNTFBsdWdJbkVsZW1lbnQqIGltcCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTFBsdWdJbkVsZW1lbnQ+KGluZm8uSG9sZGVyKCkp
OwogICAgIFNjcmlwdEluc3RhbmNlIHNjcmlwdEluc3RhbmNlID0gaW1wLT5nZXRJbnN0YW5jZSgp
OwogICAgIGlmICghc2NyaXB0SW5zdGFuY2UpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJ
bnRlcmNlcHRvcigpOwpAQCAtOTYsNyArOTYsNyBAQCBJTkRFWEVEX1BST1BFUlRZX0dFVFRFUihI
VE1MUGx1Z0luRWxlbWVudCkKIElOREVYRURfUFJPUEVSVFlfU0VUVEVSKEhUTUxQbHVnSW5FbGVt
ZW50KQogewogICAgIElOQ19TVEFUUygiRE9NLkhUTUxQbHVnSW5FbGVtZW50LkluZGV4ZWRQcm9w
ZXJ0eVNldHRlciIpOwotICAgIEhUTUxQbHVnSW5FbGVtZW50KiBpbXAgPSBWOFByb3h5Ojpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MUGx1Z0luRWxlbWVudD4oaW5mby5Ib2xkZXIoKSk7Cisg
ICAgSFRNTFBsdWdJbkVsZW1lbnQqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05vZGU8SFRNTFBsdWdJbkVsZW1lbnQ+KGluZm8uSG9sZGVyKCkpOwogICAgIFNjcmlwdElu
c3RhbmNlIHNjcmlwdEluc3RhbmNlID0gaW1wLT5nZXRJbnN0YW5jZSgpOwogICAgIGlmICghc2Ny
aXB0SW5zdGFuY2UpCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVu
dENvbGxlY3Rpb25DdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1M
U2VsZWN0RWxlbWVudENvbGxlY3Rpb25DdXN0b20uY3BwCmluZGV4IGYzZWI5NWIuLmQ1Yjg2MGUg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVsZW1l
bnRDb2xsZWN0aW9uQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEhUTUxTZWxlY3RFbGVtZW50Q29sbGVjdGlvbkN1c3RvbS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogTkFNRURfUFJPUEVSVFlfR0VUVEVSKEhUTUxTZWxlY3RFbGVt
ZW50Q29sbGVjdGlvbikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5IVE1MU2VsZWN0RWxlbWVudENv
bGxlY3Rpb24uTmFtZWRQcm9wZXJ0eVNldHRlciIpOwotICAgIEhUTUxTZWxlY3RFbGVtZW50KiBz
ZWxlY3QgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MU2VsZWN0RWxlbWVu
dD4oaW5mby5Ib2xkZXIoKSk7CisgICAgSFRNTFNlbGVjdEVsZW1lbnQqIHNlbGVjdCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTFNlbGVjdEVsZW1lbnQ+KGluZm8u
SG9sZGVyKCkpOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB2YWx1ZSA9IGluZm8uSG9sZGVy
KCktPkdldFJlYWxOYW1lZFByb3BlcnR5SW5Qcm90b3R5cGVDaGFpbihuYW1lKTsKIAogICAgIGlm
ICghdmFsdWUuSXNFbXB0eSgpKQpAQCAtNjIsMTYgKzYyLDE2IEBAIE5BTUVEX1BST1BFUlRZX0dF
VFRFUihIVE1MU2VsZWN0RWxlbWVudENvbGxlY3Rpb24pCiAgICAgICAgIHJldHVybiBub3RIYW5k
bGVkQnlJbnRlcmNlcHRvcigpOwogCiAgICAgaWYgKGl0ZW1zLnNpemUoKSA9PSAxKQotICAgICAg
ICByZXR1cm4gVjhQcm94eTo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KGl0ZW1zLmF0KDApLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KGl0
ZW1zLmF0KDApLmdldCgpKTsKIAogICAgIE5vZGVMaXN0KiBsaXN0ID0gbmV3IFY4TmFtZWROb2Rl
c0NvbGxlY3Rpb24oaXRlbXMpOwotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0VG9WOE9iamVj
dChWOENsYXNzSW5kZXg6Ok5PREVMSVNULCBsaXN0KTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNzSW5kZXg6Ok5PREVMSVNULCBsaXN0KTsKIH0KIAog
SU5ERVhFRF9QUk9QRVJUWV9TRVRURVIoSFRNTFNlbGVjdEVsZW1lbnRDb2xsZWN0aW9uKQogewog
ICAgIElOQ19TVEFUUygiRE9NLkhUTUxTZWxlY3RFbGVtZW50Q29sbGVjdGlvbi5JbmRleGVkUHJv
cGVydHlTZXR0ZXIiKTsKLSAgICBIVE1MU2VsZWN0RWxlbWVudCogc2VsZWN0ID0gVjhQcm94eTo6
Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTFNlbGVjdEVsZW1lbnQ+KGluZm8uSG9sZGVyKCkp
OworICAgIEhUTUxTZWxlY3RFbGVtZW50KiBzZWxlY3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01XcmFwcGVyVG9Ob2RlPEhUTUxTZWxlY3RFbGVtZW50PihpbmZvLkhvbGRlcigpKTsKICAgICBy
ZXR1cm4gdG9PcHRpb25zQ29sbGVjdGlvblNldHRlcihpbmRleCwgdmFsdWUsIHNlbGVjdCk7CiB9
CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTFNlbGVjdEVs
ZW1lbnRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0
RWxlbWVudEN1c3RvbS5jcHAKaW5kZXggYjIyMjM3Ny4uOTUxNTFhNiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5jcHAKKysr
IGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MU2VsZWN0RWxlbWVudEN1c3RvbS5j
cHAKQEAgLTQ0LDE0ICs0NCwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBDQUxMQkFDS19GVU5D
X0RFQ0woSFRNTFNlbGVjdEVsZW1lbnRSZW1vdmUpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uSFRN
TFNlbGVjdEVsZW1lbnQucmVtb3ZlIik7Ci0gICAgSFRNTFNlbGVjdEVsZW1lbnQqIGltcCA9IFY4
UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPEhUTUxTZWxlY3RFbGVtZW50PihhcmdzLkhv
bGRlcigpKTsKKyAgICBIVE1MU2VsZWN0RWxlbWVudCogaW1wID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxIVE1MU2VsZWN0RWxlbWVudD4oYXJncy5Ib2xkZXIoKSk7CiAg
ICAgcmV0dXJuIHJlbW92ZUVsZW1lbnQoaW1wLCBhcmdzKTsKIH0KIAogdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHJlbW92ZUVsZW1lbnQoSFRNTFNlbGVjdEVsZW1lbnQqIGltcCwgY29uc3Qgdjg6OkFy
Z3VtZW50cyYgYXJncykgCiB7CiAgICAgaWYgKFY4SFRNTE9wdGlvbkVsZW1lbnQ6Okhhc0luc3Rh
bmNlKGFyZ3NbMF0pKSB7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBlbGVtZW50ID0gVjhQ
cm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8SFRNTE9wdGlvbkVsZW1lbnQ+KGFyZ3NbMF0p
OworICAgICAgICBIVE1MT3B0aW9uRWxlbWVudCogZWxlbWVudCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydERPTVdyYXBwZXJUb05vZGU8SFRNTE9wdGlvbkVsZW1lbnQ+KGFyZ3NbMF0pOwogICAgICAg
ICBpbXAtPnJlbW92ZShlbGVtZW50LT5pbmRleCgpKTsKICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OEluc3BlY3RvckNvbnRyb2xsZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhJbnNwZWN0b3JDb250cm9sbGVyQ3VzdG9tLmNwcAppbmRleCBlZWE0NjkwLi4wNTdiNzQx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEluc3BlY3RvckNvbnRy
b2xsZXJDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW5zcGVj
dG9yQ29udHJvbGxlckN1c3RvbS5jcHAKQEAgLTU2LDExICs1NiwxMSBAQCBDQUxMQkFDS19GVU5D
X0RFQ0woSW5zcGVjdG9yQ29udHJvbGxlckhpZ2hsaWdodERPTU5vZGUpCiAgICAgaWYgKGFyZ3Mu
TGVuZ3RoKCkgPCAxKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgTm9k
ZSogbm9kZSA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMF0p
OworICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2Rl
PE5vZGU+KGFyZ3NbMF0pOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRl
ZmluZWQoKTsKIAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIg
PSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhD
bGFzc0luZGV4OjpJTlNQRUNUT1JDT05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBJbnNw
ZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFzc0luZGV4OjpJTlNQ
RUNUT1JDT05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKICAgICBpbnNwZWN0b3JDb250cm9sbGVy
LT5oaWdobGlnaHQobm9kZSk7CiAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpAQCAtNzgs
NyArNzgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQ29udHJvbGxlckdldFJlc291
cmNlRG9jdW1lbnROb2RlKQogCiAgICAgdW5zaWduZWQgaWRlbnRpZmllciA9IGFyZ3NbMV0tPklu
dDMyVmFsdWUoKTsKIAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xs
ZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4o
VjhDbGFzc0luZGV4OjpJTlNQRUNUT1JDT05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFzc0luZGV4OjpJ
TlNQRUNUT1JDT05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKICAgICBSZWZQdHI8SW5zcGVjdG9y
UmVzb3VyY2U+IHJlc291cmNlID0gaW5zcGVjdG9yQ29udHJvbGxlci0+cmVzb3VyY2VzKCkuZ2V0
KGlkZW50aWZpZXIpOwogICAgIEFTU0VSVChyZXNvdXJjZSk7CiAgICAgaWYgKCFyZXNvdXJjZSkK
QEAgLTkwLDcgKzkwLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKEluc3BlY3RvckNvbnRyb2xsZXJH
ZXRSZXNvdXJjZURvY3VtZW50Tm9kZSkKICAgICBpZiAoZG9jdW1lbnQtPmlzUGx1Z2luRG9jdW1l
bnQoKSB8fCBkb2N1bWVudC0+aXNJbWFnZURvY3VtZW50KCkgfHwgZG9jdW1lbnQtPmlzTWVkaWFE
b2N1bWVudCgpKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJu
IFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6RE9DVU1FTlQsIGRvY3Vt
ZW50KTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OkRPQ1VNRU5ULCBkb2N1bWVudCk7CiB9CiAKIENBTExCQUNLX0ZVTkNfREVDTChJbnNw
ZWN0b3JDb250cm9sbGVyU2VhcmNoKQpAQCAtMTAwLDcgKzEwMCw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChJbnNwZWN0b3JDb250cm9sbGVyU2VhcmNoKQogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwg
MikKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAgIE5vZGUqIG5vZGUgPSBW
OFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdzWzBdKTsKKyAgICBOb2Rl
KiBub2RlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdz
WzBdKTsKICAgICBpZiAoIW5vZGUpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAK
QEAgLTEyNCw3ICsxMjQsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQ29udHJvbGxl
clNlYXJjaCkKICAgICAgICAgaWYgKG5ld1N0YXJ0ID09IHN0YXJ0VmlzaWJsZVBvc2l0aW9uKHNl
YXJjaFJhbmdlLmdldCgpLCBET1dOU1RSRUFNKSkKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgIHJlc3VsdC0+U2V0KHY4OjpOdW1iZXI6Ok5ldyhpbmRleCsrKSwgVjhQcm94eTo6Y29udmVy
dFRvVjhPYmplY3Q8UmFuZ2U+KFY4Q2xhc3NJbmRleDo6UkFOR0UsIHJlc3VsdFJhbmdlLmdldCgp
KSk7CisgICAgICAgIHJlc3VsdC0+U2V0KHY4OjpOdW1iZXI6Ok5ldyhpbmRleCsrKSwgVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdDxSYW5nZT4oVjhDbGFzc0luZGV4OjpSQU5HRSwgcmVz
dWx0UmFuZ2UuZ2V0KCkpKTsKIAogICAgICAgICBzZXRTdGFydChzZWFyY2hSYW5nZS5nZXQoKSwg
bmV3U3RhcnQpOwogICAgIH0gd2hpbGUgKHRydWUpOwpAQCAtMTQ1LDggKzE0NSw4IEBAIENBTExC
QUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9sbGVySW5zcGVjdGVkV2luZG93KQogewogICAg
IElOQ19TVEFUUygiSW5zcGVjdG9yQ29udHJvbGxlci5pbnNwZWN0ZWRXaW5kb3coKSIpOwogCi0g
ICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IFY4UHJveHk6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JDb250cm9sbGVyPihWOENsYXNzSW5kZXg6OklO
U1BFQ1RPUkNPTlRST0xMRVIsIGFyZ3MuSG9sZGVyKCkpOwotICAgIHJldHVybiBWOFByb3h5Ojpj
b252ZXJ0VG9WOE9iamVjdDxET01XaW5kb3c+KFY4Q2xhc3NJbmRleDo6RE9NV0lORE9XLCBpbnNw
ZWN0b3JDb250cm9sbGVyLT5pbnNwZWN0ZWRQYWdlKCktPm1haW5GcmFtZSgpLT5kb21XaW5kb3co
KSk7CisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlciA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PEluc3BlY3RvckNvbnRyb2xsZXI+KFY4Q2xh
c3NJbmRleDo6SU5TUEVDVE9SQ09OVFJPTExFUiwgYXJncy5Ib2xkZXIoKSk7CisgICAgcmV0dXJu
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvVjhPYmplY3Q8RE9NV2luZG93PihWOENsYXNzSW5kZXg6
OkRPTVdJTkRPVywgaW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdGVkUGFnZSgpLT5tYWluRnJh
bWUoKS0+ZG9tV2luZG93KCkpOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0woSW5zcGVjdG9yQ29u
dHJvbGxlclNldHRpbmcpCkBAIC0xNjAsNyArMTYwLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKElu
c3BlY3RvckNvbnRyb2xsZXJTZXR0aW5nKQogICAgIGlmIChrZXkuaXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5z
cGVjdG9yQ29udHJvbGxlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0
b3JDb250cm9sbGVyPihWOENsYXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRST0xMRVIsIGFyZ3MuSG9s
ZGVyKCkpOworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxJbnNwZWN0b3JDb250cm9sbGVyPihW
OENsYXNzSW5kZXg6OklOU1BFQ1RPUkNPTlRST0xMRVIsIGFyZ3MuSG9sZGVyKCkpOwogICAgIGNv
bnN0IEluc3BlY3RvckNvbnRyb2xsZXI6OlNldHRpbmcmIHNldHRpbmcgPSBpbnNwZWN0b3JDb250
cm9sbGVyIC0+c2V0dGluZyhrZXkpOwogCiAgICAgc3dpdGNoIChzZXR0aW5nLnR5cGUoKSkgewpA
QCAtMjIxLDcgKzIyMSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChJbnNwZWN0b3JDb250cm9sbGVy
U2V0U2V0dGluZykKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
IAotICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIgPSBWOFByb3h5
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFzc0luZGV4
OjpJTlNQRUNUT1JDT05UUk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBJbnNwZWN0b3JDb250
cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8SW5zcGVjdG9yQ29udHJvbGxlcj4oVjhDbGFzc0luZGV4OjpJTlNQRUNUT1JDT05U
Uk9MTEVSLCBhcmdzLkhvbGRlcigpKTsKICAgICBpbnNwZWN0b3JDb250cm9sbGVyLT5zZXRTZXR0
aW5nKGtleSwgc2V0dGluZyk7CiAKICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhMb2NhdGlvbkN1c3RvbS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0aW9uQ3VzdG9tLmNwcAppbmRleCBiNGQy
YTQ0Li5mNDgzMzRkIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExv
Y2F0aW9uQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOExvY2F0
aW9uQ3VzdG9tLmNwcApAQCAtNjIsNyArNjIsNyBAQCBBQ0NFU1NPUl9TRVRURVIoTG9jYXRpb25I
YXNoKQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLmhhc2guX3NldCIpOwogICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gaW5mby5Ib2xkZXIoKTsKLSAgICBMb2NhdGlv
biogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNz
SW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdyYXBw
ZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElP
TiwgaG9sZGVyKTsKICAgICBTdHJpbmcgaGFzaCA9IHRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CiAK
ICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CkBAIC04NSw3ICs4NSw3IEBAIEFDQ0VT
U09SX1NFVFRFUihMb2NhdGlvbkhvc3QpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24u
aG9zdC5fc2V0Iik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhv
bGRlcigpOwotICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAgTG9jYXRp
b24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihW
OENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwogICAgIFN0cmluZyBob3N0ID0gdG9XZWJD
b3JlU3RyaW5nKHZhbHVlKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKQEAg
LTEwNSw3ICsxMDUsNyBAQCBBQ0NFU1NPUl9TRVRURVIoTG9jYXRpb25Ib3N0bmFtZSkKIHsKICAg
ICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5ob3N0bmFtZS5fc2V0Iik7CiAgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwotICAgIExvY2F0aW9uKiBpbXAg
PSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6
TE9DQVRJT04sIGhvbGRlcik7CisgICAgTG9jYXRpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xk
ZXIpOwogICAgIFN0cmluZyBob3N0bmFtZSA9IHRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CiAKICAg
ICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1lKCk7CkBAIC0xMjIsNyArMTIyLDcgQEAgQUNDRVNT
T1JfU0VUVEVSKExvY2F0aW9uSHJlZikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5o
cmVmLl9zZXQiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9s
ZGVyKCk7Ci0gICAgTG9jYXRpb24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAgICBMb2NhdGlv
biogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4
Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXAt
PmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkKQEAgLTE0Miw3ICsxNDIsNyBAQCBBQ0NFU1NPUl9T
RVRURVIoTG9jYXRpb25QYXRobmFtZSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5w
YXRobmFtZS5fc2V0Iik7CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZv
LkhvbGRlcigpOwotICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAgTG9j
YXRpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9u
PihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwogICAgIFN0cmluZyBwYXRobmFtZSA9
IHRvV2ViQ29yZVN0cmluZyh2YWx1ZSk7CiAKICAgICBGcmFtZSogZnJhbWUgPSBpbXAtPmZyYW1l
KCk7CkBAIC0xNTksNyArMTU5LDcgQEAgQUNDRVNTT1JfU0VUVEVSKExvY2F0aW9uUG9ydCkKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5wb3J0Ll9zZXQiKTsKICAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7Ci0gICAgTG9jYXRpb24qIGltcCA9
IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpM
T0NBVElPTiwgaG9sZGVyKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRl
cik7CiAgICAgU3RyaW5nIHBvcnQgPSB0b1dlYkNvcmVTdHJpbmcodmFsdWUpOwogCiAgICAgRnJh
bWUqIGZyYW1lID0gaW1wLT5mcmFtZSgpOwpAQCAtMTc2LDcgKzE3Niw3IEBAIEFDQ0VTU09SX1NF
VFRFUihMb2NhdGlvblByb3RvY29sKQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnBy
b3RvY29sLl9zZXQiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8u
SG9sZGVyKCk7Ci0gICAgTG9jYXRpb24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAgICBMb2Nh
dGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+
KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CiAgICAgU3RyaW5nIHByb3RvY29sID0g
dG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKIAogICAgIEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUo
KTsKQEAgLTE5Myw3ICsxOTMsNyBAQCBBQ0NFU1NPUl9TRVRURVIoTG9jYXRpb25TZWFyY2gpCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24uc2VhcmNoLl9zZXQiKTsKICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IGluZm8uSG9sZGVyKCk7Ci0gICAgTG9jYXRpb24qIGlt
cCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4
OjpMT0NBVElPTiwgaG9sZGVyKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhv
bGRlcik7CiAgICAgU3RyaW5nIHF1ZXJ5ID0gdG9XZWJDb3JlU3RyaW5nKHZhbHVlKTsKIAogICAg
IEZyYW1lKiBmcmFtZSA9IGltcC0+ZnJhbWUoKTsKQEAgLTIxMCwxMyArMjEwLDEzIEBAIEFDQ0VT
U09SX0dFVFRFUihMb2NhdGlvblJlbG9hZCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlv
bi5yZWxvYWQuX2dldCIpOwogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25U
ZW1wbGF0ZT4gcHJpdmF0ZVRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVt
cGxhdGU+OjpOZXcodjg6OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uUmVsb2FkQ2Fs
bGJhY2ssIHY4OjpIYW5kbGU8djg6OlZhbHVlPigpLCB2ODo6U2lnbmF0dXJlOjpOZXcoVjhMb2Nh
dGlvbjo6R2V0UmF3VGVtcGxhdGUoKSkpKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhv
bGRlciA9IFY4UHJveHk6Omxvb2t1cERPTVdyYXBwZXIoVjhDbGFzc0luZGV4OjpMT0NBVElPTiwg
aW5mby5UaGlzKCkpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhET01X
cmFwcGVyOjpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGluZm8uVGhp
cygpKTsKICAgICBpZiAoaG9sZGVyLklzRW1wdHkoKSkgewogICAgICAgICAvLyBjYW4gb25seSBy
ZWFjaCBoZXJlIGJ5ICdvYmplY3QuX19wcm90b19fLmZ1bmMnLCBhbmQgaXQgc2hvdWxkIHBhc3Nl
ZAogICAgICAgICAvLyBkb21haW4gc2VjdXJpdHkgY2hlY2sgYWxyZWFkeQogICAgICAgICByZXR1
cm4gcHJpdmF0ZVRlbXBsYXRlLT5HZXRGdW5jdGlvbigpOwogICAgIH0KLSAgICBMb2NhdGlvbiog
aW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5k
ZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwg
aG9sZGVyKTsKICAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1lKGltcC0+ZnJhbWUoKSwg
ZmFsc2UpKSB7CiAgICAgICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1w
bGF0ZT4gc2hhcmVkVGVtcGxhdGUgPSB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0
ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1wbGF0ZTo6TmV3KHY4TG9jYXRpb25SZWxvYWRDYWxsYmFj
aywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9u
OjpHZXRSYXdUZW1wbGF0ZSgpKSkpOwogICAgICAgICByZXR1cm4gc2hhcmVkVGVtcGxhdGUtPkdl
dEZ1bmN0aW9uKCk7CkBAIC0yMjgsMTMgKzIyOCwxMyBAQCBBQ0NFU1NPUl9HRVRURVIoTG9jYXRp
b25SZXBsYWNlKQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLnJlcGxhY2UuX2dldCIp
OwogICAgIHN0YXRpYyB2ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0
ZVRlbXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcodjg6
OkZ1bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uUmVwbGFjZUNhbGxiYWNrLCB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1Rl
bXBsYXRlKCkpKSk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOFByb3h5
Ojpsb29rdXBET01XcmFwcGVyKFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGluZm8uVGhpcygpKTsK
KyAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGhvbGRlciA9IFY4RE9NV3JhcHBlcjo6bG9va3Vw
RE9NV3JhcHBlcihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBpbmZvLlRoaXMoKSk7CiAgICAgaWYg
KGhvbGRlci5Jc0VtcHR5KCkpIHsKICAgICAgICAgLy8gY2FuIG9ubHkgcmVhY2ggaGVyZSBieSAn
b2JqZWN0Ll9fcHJvdG9fXy5mdW5jJywgYW5kIGl0IHNob3VsZCBwYXNzZWQKICAgICAgICAgLy8g
ZG9tYWluIHNlY3VyaXR5IGNoZWNrIGFscmVhZHkKICAgICAgICAgcmV0dXJuIHByaXZhdGVUZW1w
bGF0ZS0+R2V0RnVuY3Rpb24oKTsKICAgICB9Ci0gICAgTG9jYXRpb24qIGltcCA9IFY4UHJveHk6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwg
aG9sZGVyKTsKKyAgICBMb2NhdGlvbiogaW1wID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CiAgICAg
aWYgKCFWOFByb3h5OjpjYW5BY2Nlc3NGcmFtZShpbXAtPmZyYW1lKCksIGZhbHNlKSkgewogICAg
ICAgICBzdGF0aWMgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+IHNoYXJlZFRl
bXBsYXRlID0gdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+OjpOZXcodjg6OkZ1
bmN0aW9uVGVtcGxhdGU6Ok5ldyh2OExvY2F0aW9uUmVwbGFjZUNhbGxiYWNrLCB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4oKSwgdjg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBs
YXRlKCkpKSk7CiAgICAgICAgIHJldHVybiBzaGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsK
QEAgLTI0NywxMyArMjQ3LDEzIEBAIEFDQ0VTU09SX0dFVFRFUihMb2NhdGlvbkFzc2lnbikKICAg
ICBJTkNfU1RBVFMoIkRPTS5Mb2NhdGlvbi5hc3NpZ24uX2dldCIpOwogICAgIHN0YXRpYyB2ODo6
UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gcHJpdmF0ZVRlbXBsYXRlID0KICAgICB2
ODo6UGVyc2lzdGVudDx2ODo6RnVuY3Rpb25UZW1wbGF0ZT46Ok5ldyh2ODo6RnVuY3Rpb25UZW1w
bGF0ZTo6TmV3KHY4TG9jYXRpb25Bc3NpZ25DYWxsYmFjaywgdjg6OkhhbmRsZTx2ODo6VmFsdWU+
KCksIHY4OjpTaWduYXR1cmU6Ok5ldyhWOExvY2F0aW9uOjpHZXRSYXdUZW1wbGF0ZSgpKSkpOwot
ICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gaG9sZGVyID0gVjhQcm94eTo6bG9va3VwRE9NV3Jh
cHBlcihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBpbmZvLlRoaXMoKSk7CisgICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBWOERPTVdyYXBwZXI6Omxvb2t1cERPTVdyYXBwZXIoVjhD
bGFzc0luZGV4OjpMT0NBVElPTiwgaW5mby5UaGlzKCkpOwogICAgIGlmIChob2xkZXIuSXNFbXB0
eSgpKSB7CiAgICAgICAgIC8vIGNhbiBvbmx5IHJlYWNoIGhlcmUgYnkgJ29iamVjdC5fX3Byb3Rv
X18uZnVuYycsIGFuZCBpdCBzaG91bGQgcGFzc2VkCiAgICAgICAgIC8vIGRvbWFpbiBzZWN1cml0
eSBjaGVjayBhbHJlYWR5CiAgICAgICAgIHJldHVybiBwcml2YXRlVGVtcGxhdGUtPkdldEZ1bmN0
aW9uKCk7CiAgICAgfQotICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8TG9jYXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAg
TG9jYXRpb24qIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0
aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwogICAgIGlmICghVjhQcm94eTo6
Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCBmYWxzZSkpIHsKICAgICAgICAgc3RhdGljIHY4
OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPiBzaGFyZWRUZW1wbGF0ZSA9IHY4OjpQ
ZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBsYXRlPjo6TmV3KHY4OjpGdW5jdGlvblRlbXBsYXRl
OjpOZXcodjhMb2NhdGlvbkFzc2lnbkNhbGxiYWNrLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKSwg
djg6OlNpZ25hdHVyZTo6TmV3KFY4TG9jYXRpb246OkdldFJhd1RlbXBsYXRlKCkpKSk7CiAgICAg
ICAgIHJldHVybiBzaGFyZWRUZW1wbGF0ZS0+R2V0RnVuY3Rpb24oKTsKQEAgLTI2Nyw3ICsyNjcs
NyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTG9jYXRpb25SZWxvYWQpCiAKICAgICBJTkNfU1RBVFMo
IkRPTS5Mb2NhdGlvbi5yZWxvYWQiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVy
ID0gYXJncy5Ib2xkZXIoKTsKLSAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwor
ICAgIExvY2F0aW9uKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxM
b2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKIAogICAgIEZyYW1lKiBm
cmFtZSA9IGltcC0+ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lIHx8ICFTY3JpcHRDb250cm9sbGVy
Ojppc1NhZmVTY3JpcHQoZnJhbWUpKQpAQCAtMjgyLDcgKzI4Miw3IEBAIENBTExCQUNLX0ZVTkNf
REVDTChMb2NhdGlvblJlcGxhY2UpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24ucmVw
bGFjZSIpOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigp
OwotICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9j
YXRpb24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAgTG9jYXRpb24qIGlt
cCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNz
SW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFt
ZSgpOwogICAgIGlmICghZnJhbWUpCkBAIC0zMDMsNyArMzAzLDcgQEAgQ0FMTEJBQ0tfRlVOQ19E
RUNMKExvY2F0aW9uQXNzaWduKQogewogICAgIElOQ19TVEFUUygiRE9NLkxvY2F0aW9uLmFzc2ln
biIpOwogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwot
ICAgIExvY2F0aW9uKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TG9jYXRp
b24+KFY4Q2xhc3NJbmRleDo6TE9DQVRJT04sIGhvbGRlcik7CisgICAgTG9jYXRpb24qIGltcCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5k
ZXg6OkxPQ0FUSU9OLCBob2xkZXIpOwogCiAgICAgRnJhbWUqIGZyYW1lID0gaW1wLT5mcmFtZSgp
OwogICAgIGlmICghZnJhbWUpCkBAIC0zMzQsNyArMzM0LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNM
KExvY2F0aW9uVG9TdHJpbmcpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTG9jYXRpb24udG9TdHJp
bmciKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9sZGVyID0gYXJncy5Ib2xkZXIoKTsK
LSAgICBMb2NhdGlvbiogaW1wID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0
aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob2xkZXIpOworICAgIExvY2F0aW9uKiBpbXAg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxMb2NhdGlvbj4oVjhDbGFzc0lu
ZGV4OjpMT0NBVElPTiwgaG9sZGVyKTsKICAgICBpZiAoIVY4UHJveHk6OmNhbkFjY2Vzc0ZyYW1l
KGltcC0+ZnJhbWUoKSwgdHJ1ZSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAg
ICAgU3RyaW5nIHJlc3VsdCA9IGltcC0+aHJlZigpOwpAQCAtMzQ1LDcgKzM0NSw3IEBAIElOREVY
RURfQUNDRVNTX0NIRUNLKExvY2F0aW9uKQogewogICAgIEFTU0VSVChWOENsYXNzSW5kZXg6OkZy
b21JbnQoZGF0YS0+SW50MzJWYWx1ZSgpKSA9PSBWOENsYXNzSW5kZXg6OkxPQ0FUSU9OKTsKICAg
ICAvLyBPbmx5IGFsbG93IHNhbWUgb3JpZ2luIGFjY2VzcwotICAgIExvY2F0aW9uKiBpbXAgPSAg
VjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxP
Q0FUSU9OLCBob3N0KTsKKyAgICBMb2NhdGlvbiogaW1wID0gIFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENsYXNzSW5kZXg6OkxPQ0FUSU9OLCBob3N0KTsK
ICAgICByZXR1cm4gVjhQcm94eTo6Y2FuQWNjZXNzRnJhbWUoaW1wLT5mcmFtZSgpLCBmYWxzZSk7
CiB9CiAKQEAgLTM1Myw3ICszNTMsNyBAQCBOQU1FRF9BQ0NFU1NfQ0hFQ0soTG9jYXRpb24pCiB7
CiAgICAgQVNTRVJUKFY4Q2xhc3NJbmRleDo6RnJvbUludChkYXRhLT5JbnQzMlZhbHVlKCkpID09
IFY4Q2xhc3NJbmRleDo6TE9DQVRJT04pOwogICAgIC8vIE9ubHkgYWxsb3cgc2FtZSBvcmlnaW4g
YWNjZXNzCi0gICAgTG9jYXRpb24qIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxMb2NhdGlvbj4oVjhDbGFzc0luZGV4OjpMT0NBVElPTiwgaG9zdCk7CisgICAgTG9jYXRpb24q
IGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PExvY2F0aW9uPihWOENs
YXNzSW5kZXg6OkxPQ0FUSU9OLCBob3N0KTsKICAgICByZXR1cm4gVjhQcm94eTo6Y2FuQWNjZXNz
RnJhbWUoaW1wLT5mcmFtZSgpLCBmYWxzZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE1lc3NhZ2VDaGFubmVsQ29uc3RydWN0b3IuY3BwCmluZGV4
IDgwNzNjYmQuLjQ1ZGNjZGMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4TWVzc2FnZUNoYW5uZWxDb25zdHJ1Y3Rvci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92
OC9jdXN0b20vVjhNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yLmNwcApAQCAtNzIsMTEgKzcyLDEx
IEBAIENBTExCQUNLX0ZVTkNfREVDTChNZXNzYWdlQ2hhbm5lbENvbnN0cnVjdG9yKQogICAgIC8v
IENyZWF0ZSByZWZlcmVuY2VzIGZyb20gdGhlIE1lc3NhZ2VDaGFubmVsIHdyYXBwZXIgdG8gdGhl
IHR3bwogICAgIC8vIE1lc3NhZ2VQb3J0IHdyYXBwZXJzIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBN
ZXNzYWdlUG9ydCB3cmFwcGVycwogICAgIC8vIHN0YXkgYWxpdmUgYXMgbG9uZyBhcyB0aGUgTWVz
c2FnZUNoYW5uZWwgd3JhcHBlciBpcyBhcm91bmQuCi0gICAgbWVzc2FnZUNoYW5uZWwtPlNldElu
dGVybmFsRmllbGQoa01lc3NhZ2VDaGFubmVsUG9ydDFJbmRleCwgVjhQcm94eTo6Y29udmVydFRv
VjhPYmplY3QoVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgb2JqLT5wb3J0MSgpKSk7Ci0gICAg
bWVzc2FnZUNoYW5uZWwtPlNldEludGVybmFsRmllbGQoa01lc3NhZ2VDaGFubmVsUG9ydDJJbmRl
eCwgVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwg
b2JqLT5wb3J0MigpKSk7CisgICAgbWVzc2FnZUNoYW5uZWwtPlNldEludGVybmFsRmllbGQoa01l
c3NhZ2VDaGFubmVsUG9ydDFJbmRleCwgVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChW
OENsYXNzSW5kZXg6Ok1FU1NBR0VQT1JULCBvYmotPnBvcnQxKCkpKTsKKyAgICBtZXNzYWdlQ2hh
bm5lbC0+U2V0SW50ZXJuYWxGaWVsZChrTWVzc2FnZUNoYW5uZWxQb3J0MkluZGV4LCBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb1Y4T2JqZWN0KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQsIG9iai0+
cG9ydDIoKSkpOwogCiAgICAgLy8gU2V0dXAgdGhlIHN0YW5kYXJkIHdyYXBwZXIgb2JqZWN0IGlu
dGVybmFsIGZpZWxkcy4KLSAgICBWOFByb3h5OjpzZXRET01XcmFwcGVyKG1lc3NhZ2VDaGFubmVs
LCBWOENsYXNzSW5kZXg6Ok1FU1NBR0VDSEFOTkVMLCBvYmouZ2V0KCkpOworICAgIFY4RE9NV3Jh
cHBlcjo6c2V0RE9NV3JhcHBlcihtZXNzYWdlQ2hhbm5lbCwgVjhDbGFzc0luZGV4OjpNRVNTQUdF
Q0hBTk5FTCwgb2JqLmdldCgpKTsKICAgICByZXR1cm4gdG9WOChvYmoucmVsZWFzZSgpLCBtZXNz
YWdlQ2hhbm5lbCk7CiB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4TWVzc2FnZVBvcnRDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhN
ZXNzYWdlUG9ydEN1c3RvbS5jcHAKaW5kZXggZmQwMjYzMC4uYmZlMDU5YSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5jcHAKKysrIGIv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhNZXNzYWdlUG9ydEN1c3RvbS5jcHAKQEAgLTQz
LDE0ICs0MywxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBBQ0NFU1NPUl9HRVRURVIoTWVzc2Fn
ZVBvcnRPbm1lc3NhZ2UpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTWVzc2FnZVBvcnQub25tZXNz
YWdlLl9nZXQiKTsKLSAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSBWOFByb3h5Ojpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQs
IGluZm8uSG9sZGVyKCkpOwotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0RXZlbnRMaXN0ZW5l
clRvVjhPYmplY3QobWVzc2FnZVBvcnQtPm9ubWVzc2FnZSgpKTsKKyAgICBNZXNzYWdlUG9ydCog
bWVzc2FnZVBvcnQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxNZXNzYWdl
UG9ydD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgcmV0
dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydEV2ZW50TGlzdGVuZXJUb1Y4T2JqZWN0KG1lc3NhZ2VQ
b3J0LT5vbm1lc3NhZ2UoKSk7CiB9CiAKIEFDQ0VTU09SX1NFVFRFUihNZXNzYWdlUG9ydE9ubWVz
c2FnZSkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5NZXNzYWdlUG9ydC5vbm1lc3NhZ2UuX3NldCIp
OwotICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxNZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4OjpNRVNTQUdFUE9SVCwgaW5mby5Ib2xk
ZXIoKSk7CisgICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xhc3NJbmRleDo6TUVTU0FHRVBPUlQs
IGluZm8uSG9sZGVyKCkpOwogICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKICAgICAgICAgaWYg
KG1lc3NhZ2VQb3J0LT5vbm1lc3NhZ2UoKSkgewogICAgICAgICAgICAgVjhPYmplY3RFdmVudExp
c3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KG1l
c3NhZ2VQb3J0LT5vbm1lc3NhZ2UoKSk7CkBAIC03Niw3ICs3Niw3IEBAIEFDQ0VTU09SX1NFVFRF
UihNZXNzYWdlUG9ydE9ubWVzc2FnZSkKIENBTExCQUNLX0ZVTkNfREVDTChNZXNzYWdlUG9ydEFk
ZEV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTWVzc2FnZVBvcnQuQWRkRXZl
bnRMaXN0ZW5lcigpIik7Ci0gICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0ID0gVjhQcm94eTo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PE1lc3NhZ2VQb3J0PihWOENsYXNzSW5kZXg6Ok1FU1NBR0VQ
T1JULCBhcmdzLkhvbGRlcigpKTsKKyAgICBNZXNzYWdlUG9ydCogbWVzc2FnZVBvcnQgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxNZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4
OjpNRVNTQUdFUE9SVCwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBWOFByb3h5KiBwcm94eSA9IFY4
UHJveHk6OnJldHJpZXZlKG1lc3NhZ2VQb3J0LT5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwog
ICAgIGlmICghcHJveHkpCkBAIC05Niw3ICs5Niw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChNZXNz
YWdlUG9ydEFkZEV2ZW50TGlzdGVuZXIpCiBDQUxMQkFDS19GVU5DX0RFQ0woTWVzc2FnZVBvcnRS
ZW1vdmVFdmVudExpc3RlbmVyKQogewogICAgIElOQ19TVEFUUygiRE9NLk1lc3NhZ2VQb3J0LlJl
bW92ZUV2ZW50TGlzdGVuZXIoKSIpOwotICAgIE1lc3NhZ2VQb3J0KiBtZXNzYWdlUG9ydCA9IFY4
UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxNZXNzYWdlUG9ydD4oVjhDbGFzc0luZGV4OjpN
RVNTQUdFUE9SVCwgYXJncy5Ib2xkZXIoKSk7CisgICAgTWVzc2FnZVBvcnQqIG1lc3NhZ2VQb3J0
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TWVzc2FnZVBvcnQ+KFY4Q2xh
c3NJbmRleDo6TUVTU0FHRVBPUlQsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgVjhQcm94eSogcHJv
eHkgPSBWOFByb3h5OjpyZXRyaWV2ZShtZXNzYWdlUG9ydC0+c2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTsKICAgICBpZiAoIXByb3h5KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9j
dXN0b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhOYW1lZE5vZGVNYXBDdXN0b20uY3BwCmluZGV4IGFlODY5MWEuLmIyMjIyNzAgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmFtZWROb2RlTWFwQ3VzdG9tLmNw
cAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hbWVkTm9kZU1hcEN1c3RvbS5j
cHAKQEAgLTQyLDEyICs0MiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBJTkRFWEVEX1BST1BF
UlRZX0dFVFRFUihOYW1lZE5vZGVNYXApCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTmFtZWROb2Rl
TWFwLkluZGV4ZWRQcm9wZXJ0eUdldHRlciIpOwotICAgIE5hbWVkTm9kZU1hcCogaW1wID0gVjhQ
cm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5hbWVkTm9kZU1hcD4oVjhDbGFzc0luZGV4OjpO
QU1FRE5PREVNQVAsIGluZm8uSG9sZGVyKCkpOworICAgIE5hbWVkTm9kZU1hcCogaW1wID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TmFtZWROb2RlTWFwPihWOENsYXNzSW5k
ZXg6Ok5BTUVETk9ERU1BUCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3Vs
dCA9IGltcC0+aXRlbShpbmRleCk7CiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBu
b3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCi0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnRO
b2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNv
bnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOwogfQogCiBOQU1FRF9QUk9QRVJUWV9H
RVRURVIoTmFtZWROb2RlTWFwKQpAQCAtNjMsMTIgKzYzLDEyIEBAIE5BTUVEX1BST1BFUlRZX0dF
VFRFUihOYW1lZE5vZGVNYXApCiAgICAgICAgIHJldHVybiBub3RIYW5kbGVkQnlJbnRlcmNlcHRv
cigpOwogCiAgICAgLy8gRmluYWxseSwgc2VhcmNoIHRoZSBET00uCi0gICAgTmFtZWROb2RlTWFw
KiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8TmFtZWROb2RlTWFwPihWOENs
YXNzSW5kZXg6Ok5BTUVETk9ERU1BUCwgaW5mby5Ib2xkZXIoKSk7CisgICAgTmFtZWROb2RlTWFw
KiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOYW1lZE5vZGVNYXA+
KFY4Q2xhc3NJbmRleDo6TkFNRUROT0RFTUFQLCBpbmZvLkhvbGRlcigpKTsKICAgICBSZWZQdHI8
Tm9kZT4gcmVzdWx0ID0gaW1wLT5nZXROYW1lZEl0ZW0odG9XZWJDb3JlU3RyaW5nKG5hbWUpKTsK
ICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9y
KCk7CiAKLSAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5n
ZXQoKSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJl
c3VsdC5nZXQoKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcCBiL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4TmF2aWdhdG9yQ3VzdG9tLmNwcAppbmRleCA5Nzk0Zjk2Li42
YTdiMjA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5hdmlnYXRv
ckN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOYXZpZ2F0b3JD
dXN0b20uY3BwCkBAIC00MSw3ICs0MSw3IEBAIEFDQ0VTU09SX0dFVFRFUihOYXZpZ2F0b3JBcHBW
ZXJzaW9uKQogewogICAgIElOQ19TVEFUUygiRE9NLk5hdmlnYXRvci5hcHBWZXJzaW9uIik7CiAg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBob2xkZXIgPSBpbmZvLkhvbGRlcigpOwotICAgIE5h
dmlnYXRvciogbmF2aWdhdG9yID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5hdmln
YXRvcj4oVjhDbGFzc0luZGV4OjpOQVZJR0FUT1IsIGhvbGRlcik7CisgICAgTmF2aWdhdG9yKiBu
YXZpZ2F0b3IgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOYXZpZ2F0b3I+
KFY4Q2xhc3NJbmRleDo6TkFWSUdBVE9SLCBob2xkZXIpOwogICAgIHJldHVybiB2OFN0cmluZ09y
VW5kZWZpbmVkKG5hdmlnYXRvci0+YXBwVmVyc2lvbigpKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAKaW5kZXggZjgxNDI3YS4uMTExNDJlMCAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlQ3VzdG9tLmNwcAorKysg
Yi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwCkBAIC00Nyw3ICs0
Nyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIENBTExCQUNLX0ZVTkNfREVDTChOb2RlQWRkRXZl
bnRMaXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5Ob2RlLmFkZEV2ZW50TGlzdGVuZXIo
KSIpOwotICAgIE5vZGUqIG5vZGUgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxO
b2RlPihhcmdzLkhvbGRlcigpKTsKKyAgICBOb2RlKiBub2RlID0gVjhET01XcmFwcGVyOjpjb252
ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdzLkhvbGRlcigpKTsKIAogICAgIFY4UHJveHkq
IHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUobm9kZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSk7CiAg
ICAgaWYgKCFwcm94eSkKQEAgLTY1LDcgKzY1LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKE5vZGVB
ZGRFdmVudExpc3RlbmVyKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKE5vZGVSZW1vdmVFdmVudExpc3Rl
bmVyKQogewogICAgIElOQ19TVEFUUygiRE9NLk5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7
Ci0gICAgTm9kZSogbm9kZSA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+
KGFyZ3MuSG9sZGVyKCkpOworICAgIE5vZGUqIG5vZGUgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgVjhQcm94eSogcHJv
eHkgPSBWOFByb3h5OjpyZXRyaWV2ZShub2RlLT5kb2N1bWVudCgpLT5mcmFtZSgpKTsKICAgICAv
LyBJdCBpcyBwb3NzYmlsZSB0aGF0IHRoZSBvd25lciBkb2N1bWVudCBvZiB0aGUgbm9kZSBpcyBk
ZXRhY2hlZApAQCAtODksMTAgKzg5LDEwIEBAIENBTExCQUNLX0ZVTkNfREVDTChOb2RlSW5zZXJ0
QmVmb3JlKQogewogICAgIElOQ19TVEFUUygiRE9NLk5vZGUuaW5zZXJ0QmVmb3JlIik7CiAgICAg
djg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9sZGVyKCk7Ci0gICAgTm9kZSog
aW1wID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oaG9sZGVyKTsKKyAg
ICBOb2RlKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+
KGhvbGRlcik7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgTm9kZSogbmV3Q2hpbGQg
PSBWOE5vZGU6Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gVjhQcm94eTo6Y29udmVydERPTVdyYXBw
ZXJUb05vZGU8Tm9kZT4oYXJnc1swXSkgOiAwOwotICAgIE5vZGUqIHJlZkNoaWxkID0gVjhOb2Rl
OjpIYXNJbnN0YW5jZShhcmdzWzFdKSA/IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2Rl
PE5vZGU+KGFyZ3NbMV0pIDogMDsKKyAgICBOb2RlKiBuZXdDaGlsZCA9IFY4Tm9kZTo6SGFzSW5z
dGFuY2UoYXJnc1swXSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5v
ZGU+KGFyZ3NbMF0pIDogMDsKKyAgICBOb2RlKiByZWZDaGlsZCA9IFY4Tm9kZTo6SGFzSW5zdGFu
Y2UoYXJnc1sxXSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+
KGFyZ3NbMV0pIDogMDsKICAgICBib29sIHN1Y2Nlc3MgPSBpbXAtPmluc2VydEJlZm9yZShuZXdD
aGlsZCwgcmVmQ2hpbGQsIGVjLCB0cnVlKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgVjhQcm94
eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKQEAgLTEwOCwxMCArMTA4LDEwIEBAIENBTExCQUNLX0ZV
TkNfREVDTChOb2RlUmVwbGFjZUNoaWxkKQogewogICAgIElOQ19TVEFUUygiRE9NLk5vZGUucmVw
bGFjZUNoaWxkIik7CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IGhvbGRlciA9IGFyZ3MuSG9s
ZGVyKCk7Ci0gICAgTm9kZSogaW1wID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
Tm9kZT4oaG9sZGVyKTsKKyAgICBOb2RlKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPE5vZGU+KGhvbGRlcik7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0g
ICAgTm9kZSogbmV3Q2hpbGQgPSBWOE5vZGU6Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8gVjhQcm94
eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJnc1swXSkgOiAwOwotICAgIE5vZGUq
IG9sZENoaWxkID0gVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzFdKSA/IFY4UHJveHk6OmNvbnZl
cnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMV0pIDogMDsKKyAgICBOb2RlKiBuZXdDaGls
ZCA9IFY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1swXSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRE
T01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMF0pIDogMDsKKyAgICBOb2RlKiBvbGRDaGlsZCA9
IFY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJnc1sxXSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01X
cmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMV0pIDogMDsKICAgICBib29sIHN1Y2Nlc3MgPSBpbXAt
PnJlcGxhY2VDaGlsZChuZXdDaGlsZCwgb2xkQ2hpbGQsIGVjLCB0cnVlKTsKICAgICBpZiAoZWMp
IHsKICAgICAgICAgVjhQcm94eTo6c2V0RE9NRXhjZXB0aW9uKGVjKTsKQEAgLTEyNiw5ICsxMjYs
OSBAQCBDQUxMQkFDS19GVU5DX0RFQ0woTm9kZVJlbW92ZUNoaWxkKQogewogICAgIElOQ19TVEFU
UygiRE9NLk5vZGUucmVtb3ZlQ2hpbGQiKTsKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gaG9s
ZGVyID0gYXJncy5Ib2xkZXIoKTsKLSAgICBOb2RlKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0RE9N
V3JhcHBlclRvTm9kZTxOb2RlPihob2xkZXIpOworICAgIE5vZGUqIGltcCA9IFY4RE9NV3JhcHBl
cjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oaG9sZGVyKTsKICAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBOb2RlKiBvbGRDaGlsZCA9IFY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJn
c1swXSkgPyBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdzWzBdKSA6
IDA7CisgICAgTm9kZSogb2xkQ2hpbGQgPSBWOE5vZGU6Okhhc0luc3RhbmNlKGFyZ3NbMF0pID8g
VjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihhcmdzWzBdKSA6IDA7
CiAgICAgYm9vbCBzdWNjZXNzID0gaW1wLT5yZW1vdmVDaGlsZChvbGRDaGlsZCwgZWMpOwogICAg
IGlmIChlYykgewogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRpb24oZWMpOwpAQCAtMTQ0
LDkgKzE0NCw5IEBAIENBTExCQUNLX0ZVTkNfREVDTChOb2RlQXBwZW5kQ2hpbGQpCiB7CiAgICAg
SU5DX1NUQVRTKCJET00uTm9kZS5hcHBlbmRDaGlsZCIpOwogICAgIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiBob2xkZXIgPSBhcmdzLkhvbGRlcigpOwotICAgIE5vZGUqIGltcCA9IFY4UHJveHk6OmNv
bnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGhvbGRlcik7CisgICAgTm9kZSogaW1wID0gVjhE
T01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxOb2RlPihob2xkZXIpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIE5vZGUqIG5ld0NoaWxkID0gVjhOb2RlOjpIYXNJbnN0
YW5jZShhcmdzWzBdKSA/IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFy
Z3NbMF0pIDogMDsKKyAgICBOb2RlKiBuZXdDaGlsZCA9IFY4Tm9kZTo6SGFzSW5zdGFuY2UoYXJn
c1swXSkgPyBWOERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3Nb
MF0pIDogMDsKICAgICBib29sIHN1Y2Nlc3MgPSBpbXAtPmFwcGVuZENoaWxkKG5ld0NoaWxkLCBl
YywgdHJ1ZSApOwogICAgIGlmIChlYykgewogICAgICAgICBWOFByb3h5OjpzZXRET01FeGNlcHRp
b24oZWMpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRl
cmF0b3JDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlSXRlcmF0
b3JDdXN0b20uY3BwCmluZGV4IGI0MzlkM2UuLmQ5MzQ4MDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUl0ZXJhdG9yQ3VzdG9tLmNwcAorKysgYi9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVJdGVyYXRvckN1c3RvbS5jcHAKQEAgLTUzLDEzICs1
MywxMyBAQCBzdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQ
dHI8Tm9kZT4gb2JqZWN0LCBFeGNlcHRpb25Db2RlCiAgICAgaWYgKCFvYmplY3QpCiAgICAgICAg
IHJldHVybiB2ODo6TnVsbCgpOwogCi0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnROb2RlVG9W
OE9iamVjdChvYmplY3QuZ2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRO
b2RlVG9WOE9iamVjdChvYmplY3QuZ2V0KCkpOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0woTm9k
ZUl0ZXJhdG9yTmV4dE5vZGUpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTm9kZUl0ZXJhdG9yLm5l
eHROb2RlKCkiKTsKLSAgICBOb2RlSXRlcmF0b3IqIG5vZGVJdGVyYXRvciA9IFY4UHJveHk6OmNv
bnZlcnRUb05hdGl2ZU9iamVjdDxOb2RlSXRlcmF0b3I+KFY4Q2xhc3NJbmRleDo6Tk9ERUlURVJB
VE9SLCBhcmdzLkhvbGRlcigpKTsKKyAgICBOb2RlSXRlcmF0b3IqIG5vZGVJdGVyYXRvciA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PE5vZGVJdGVyYXRvcj4oVjhDbGFzc0lu
ZGV4OjpOT0RFSVRFUkFUT1IsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CkBAIC03MCw3ICs3MCw3IEBAIENBTExCQUNL
X0ZVTkNfREVDTChOb2RlSXRlcmF0b3JOZXh0Tm9kZSkKIENBTExCQUNLX0ZVTkNfREVDTChOb2Rl
SXRlcmF0b3JQcmV2aW91c05vZGUpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTm9kZUl0ZXJhdG9y
LnByZXZpb3VzTm9kZSgpIik7Ci0gICAgTm9kZUl0ZXJhdG9yKiBub2RlSXRlcmF0b3IgPSBWOFBy
b3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8Tm9kZUl0ZXJhdG9yPihWOENsYXNzSW5kZXg6Ok5P
REVJVEVSQVRPUiwgYXJncy5Ib2xkZXIoKSk7CisgICAgTm9kZUl0ZXJhdG9yKiBub2RlSXRlcmF0
b3IgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxOb2RlSXRlcmF0b3I+KFY4
Q2xhc3NJbmRleDo6Tk9ERUlURVJBVE9SLCBhcmdzLkhvbGRlcigpKTsKIAogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhOb2RlTGlzdEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNwcAppbmRleCAyMGNmNGE2Li43ZjU4Njhm
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9t
LmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVMaXN0Q3VzdG9tLmNw
cApAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBOQU1FRF9QUk9QRVJUWV9H
RVRURVIoTm9kZUxpc3QpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uTm9kZUxpc3QuTmFtZWRQcm9w
ZXJ0eUdldHRlciIpOwotICAgIE5vZGVMaXN0KiBsaXN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PE5vZGVMaXN0PihWOENsYXNzSW5kZXg6Ok5PREVMSVNULCBpbmZvLkhvbGRlcigp
KTsKKyAgICBOb2RlTGlzdCogbGlzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PE5vZGVMaXN0PihWOENsYXNzSW5kZXg6Ok5PREVMSVNULCBpbmZvLkhvbGRlcigpKTsKICAg
ICBTdHJpbmcga2V5ID0gdG9XZWJDb3JlU3RyaW5nKG5hbWUpOwogCiAgICAgLy8gTGVuZ3RoIHBy
b3BlcnR5IGNhbm5vdCBiZSBvdmVycmlkZGVuLgpAQCAtNTMsNyArNTMsNyBAQCBOQU1FRF9QUk9Q
RVJUWV9HRVRURVIoTm9kZUxpc3QpCiAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgIHJldHVybiBu
b3RIYW5kbGVkQnlJbnRlcmNlcHRvcigpOwogCi0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnRO
b2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNv
bnZlcnROb2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFJlc3Vs
dFNldFJvd0xpc3RDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTUUxS
ZXN1bHRTZXRSb3dMaXN0Q3VzdG9tLmNwcAppbmRleCBlNjU1MjFmLi43M2FhZTEyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFJlc3VsdFNldFJvd0xpc3RDdXN0
b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMUmVzdWx0U2V0Um93
TGlzdEN1c3RvbS5jcHAKQEAgLTUzLDcgKzUzLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFNRTFJl
c3VsdFNldFJvd0xpc3RJdGVtKQogICAgICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogICAg
IH0KIAotICAgIFNRTFJlc3VsdFNldFJvd0xpc3QqIHJvd0xpc3QgPSBWOFByb3h5Ojpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8U1FMUmVzdWx0U2V0Um93TGlzdD4oVjhDbGFzc0luZGV4OjpTUUxSRVNV
TFRTRVRST1dMSVNULCBhcmdzLkhvbGRlcigpKTsKKyAgICBTUUxSZXN1bHRTZXRSb3dMaXN0KiBy
b3dMaXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8U1FMUmVzdWx0U2V0
Um93TGlzdD4oVjhDbGFzc0luZGV4OjpTUUxSRVNVTFRTRVRST1dMSVNULCBhcmdzLkhvbGRlcigp
KTsKIAogICAgIHVuc2lnbmVkIGxvbmcgaW5kZXggPSBhcmdzWzBdLT5JbnRlZ2VyVmFsdWUoKTsK
ICAgICBpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHJvd0xpc3QtPmxlbmd0aCgpKSB7CmRpZmYg
LS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNRTFRyYW5zYWN0aW9uQ3VzdG9t
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20u
Y3BwCmluZGV4IDRkODYwNTUuLjE2NjRkYmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4U1FMVHJhbnNhY3Rpb25DdXN0b20uY3BwCkBAIC03OSw3ICs3OSw3IEBA
IENBTExCQUNLX0ZVTkNfREVDTChTUUxUcmFuc2FjdGlvbkV4ZWN1dGVTcWwpCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBTUUxUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24gPSBWOFByb3h5Ojpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8U1FMVHJhbnNhY3Rpb24+KFY4Q2xhc3NJbmRleDo6U1FMVFJBTlNB
Q1RJT04sIGFyZ3MuSG9sZGVyKCkpOworICAgIFNRTFRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbiA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFNRTFRyYW5zYWN0aW9uPihWOENs
YXNzSW5kZXg6OlNRTFRSQU5TQUNUSU9OLCBhcmdzLkhvbGRlcigpKTsKIAogICAgIEZyYW1lKiBm
cmFtZSA9IFY4UHJveHk6OnJldHJpZXZlRnJhbWUoKTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwIGIvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50SW5zdGFuY2VDdXN0b20uY3BwCmluZGV4
IDhmYzJhNGYuLjI3Zjk4YmQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U1ZHRWxlbWVudEluc3RhbmNlQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFNWR0VsZW1lbnRJbnN0YW5jZUN1c3RvbS5jcHAKQEAgLTQ3LDcgKzQ3LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogQ0FMTEJBQ0tfRlVOQ19ERUNMKFNWR0VsZW1lbnRJbnN0YW5j
ZUFkZEV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uU1ZHRWxlbWVudEluc3Rh
bmNlLkFkZEV2ZW50TGlzdGVuZXIoKSIpOwotICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFu
Y2UgPSBWOFByb3h5Ojpjb252ZXJ0RE9NV3JhcHBlclRvTmF0aXZlPFNWR0VsZW1lbnRJbnN0YW5j
ZT4oYXJncy5Ib2xkZXIoKSk7CisgICAgU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZSA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxTVkdFbGVtZW50SW5zdGFuY2U+
KGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgVjhQcm94eSogcHJveHkgPSBWOFByb3h5OjpyZXRyaWV2
ZShpbnN0YW5jZS0+c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKICAgICBpZiAoIXByb3h5KQpA
QCAtNjYsNyArNjYsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woU1ZHRWxlbWVudEluc3RhbmNlQWRk
RXZlbnRMaXN0ZW5lcikKIENBTExCQUNLX0ZVTkNfREVDTChTVkdFbGVtZW50SW5zdGFuY2VSZW1v
dmVFdmVudExpc3RlbmVyKQogewogICAgIElOQ19TVEFUUygiRE9NLlNWR0VsZW1lbnRJbnN0YW5j
ZS5SZW1vdmVFdmVudExpc3RlbmVyKCkiKTsKLSAgICBTVkdFbGVtZW50SW5zdGFuY2UqIGluc3Rh
bmNlID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05hdGl2ZTxTVkdFbGVtZW50SW5zdGFu
Y2U+KGFyZ3MuSG9sZGVyKCkpOworICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2UgPSBW
OERPTVdyYXBwZXI6OmNvbnZlcnRET01XcmFwcGVyVG9OYXRpdmU8U1ZHRWxlbWVudEluc3RhbmNl
PihhcmdzLkhvbGRlcigpKTsKIAogICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmll
dmUoaW5zdGFuY2UtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CiAgICAgaWYgKCFwcm94eSkK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTGVuZ3RoQ3VzdG9t
LmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTGVuZ3RoQ3VzdG9tLmNwcApp
bmRleCA5MDAyMjEwLi45Zjc1ZjVhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFNWR0xlbmd0aEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhTVkdMZW5ndGhDdXN0b20uY3BwCkBAIC00NCw3ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIEFDQ0VTU09SX0dFVFRFUihTVkdMZW5ndGhWYWx1ZSkKIHsKICAgICBJTkNfU1RBVFMo
IkRPTS5TVkdMZW5ndGgudmFsdWUiKTsKLSAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPFNWR0xlbmd0
aD4qIHdyYXBwZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VjhTVkdQT0RUeXBl
V3JhcHBlcjxTVkdMZW5ndGg+ID4oVjhDbGFzc0luZGV4OjpTVkdMRU5HVEgsIGluZm8uSG9sZGVy
KCkpOworICAgIFY4U1ZHUE9EVHlwZVdyYXBwZXI8U1ZHTGVuZ3RoPiogd3JhcHBlciA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8U1ZHTGVu
Z3RoPiA+KFY4Q2xhc3NJbmRleDo6U1ZHTEVOR1RILCBpbmZvLkhvbGRlcigpKTsKICAgICBTVkdM
ZW5ndGggaW1wID0gKndyYXBwZXI7CiAgICAgcmV0dXJuIHY4OjpOdW1iZXI6Ok5ldyhpbXAudmFs
dWUoVjhQcm94eTo6c3ZnQ29udGV4dCh3cmFwcGVyKSkpOwogfQpAQCAtNTIsNyArNTIsNyBAQCBB
Q0NFU1NPUl9HRVRURVIoU1ZHTGVuZ3RoVmFsdWUpCiBDQUxMQkFDS19GVU5DX0RFQ0woU1ZHTGVu
Z3RoQ29udmVydFRvU3BlY2lmaWVkVW5pdHMpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uU1ZHTGVu
Z3RoLmNvbnZlcnRUb1NwZWNpZmllZFVuaXRzIik7Ci0gICAgVjhTVkdQT0RUeXBlV3JhcHBlcjxT
VkdMZW5ndGg+KiB3cmFwcGVyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFY4U1ZH
UE9EVHlwZVdyYXBwZXI8U1ZHTGVuZ3RoPiA+KFY4Q2xhc3NJbmRleDo6U1ZHTEVOR1RILCBhcmdz
LkhvbGRlcigpKTsKKyAgICBWOFNWR1BPRFR5cGVXcmFwcGVyPFNWR0xlbmd0aD4qIHdyYXBwZXIg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVy
PFNWR0xlbmd0aD4gPihWOENsYXNzSW5kZXg6OlNWR0xFTkdUSCwgYXJncy5Ib2xkZXIoKSk7CiAg
ICAgU1ZHTGVuZ3RoIGltcCA9ICp3cmFwcGVyOwogICAgIFNWR0VsZW1lbnQqIGNvbnRleHQgPSBW
OFByb3h5OjpzdmdDb250ZXh0KHdyYXBwZXIpOwogICAgIGltcC5jb252ZXJ0VG9TcGVjaWZpZWRV
bml0cyh0b0ludDMyKGFyZ3NbMF0pLCBjb250ZXh0KTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHTWF0cml4Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U1ZHTWF0cml4Q3VzdG9tLmNwcAppbmRleCAzNGRkMTNkLi5iYzE3MGViIDEw
MDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR01hdHJpeEN1c3RvbS5j
cHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTVkdNYXRyaXhDdXN0b20uY3Bw
CkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIENBTExCQUNLX0ZVTkNfREVD
TChTVkdNYXRyaXhJbnZlcnNlKQogewogICAgIElOQ19TVEFUUygiRE9NLlNWR01hdHJpeC5pbnZl
cnNlKCkiKTsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSAqVjhQcm94eTo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PFY4U1ZHUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3JtYXRpb25NYXRy
aXg+ID4oVjhDbGFzc0luZGV4OjpTVkdNQVRSSVgsIGFyZ3MuSG9sZGVyKCkpOworICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4IG1hdHJpeCA9ICpWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxWOFNWR1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4PiA+KFY4Q2xhc3NJ
bmRleDo6U1ZHTUFUUklYLCBhcmdzLkhvbGRlcigpKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0g
MDsKICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCByZXN1bHQgPSBtYXRyaXguaW52ZXJzZSgpOwog
CkBAIC01OCwxMyArNTgsMTMgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFNWR01hdHJpeEludmVyc2Up
CiAgICAgICAgIHJldHVybiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4oKTsKICAgICB9CiAKLSAgICBy
ZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTVkdNQVRSSVgs
IG5ldyBWOFNWR1N0YXRpY1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4PihyZXN1
bHQpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9WOE9iamVjdChWOENsYXNz
SW5kZXg6OlNWR01BVFJJWCwgbmV3IFY4U1ZHU3RhdGljUE9EVHlwZVdyYXBwZXI8VHJhbnNmb3Jt
YXRpb25NYXRyaXg+KHJlc3VsdCkpOwogfQogCiBDQUxMQkFDS19GVU5DX0RFQ0woU1ZHTWF0cml4
Um90YXRlRnJvbVZlY3RvcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5TVkdNYXRyaXgucm90YXRl
RnJvbVZlY3RvcigpIik7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gKlY4UHJv
eHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxWOFNWR1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0
aW9uTWF0cml4PiA+KFY4Q2xhc3NJbmRleDo6U1ZHTUFUUklYLCBhcmdzLkhvbGRlcigpKTsKKyAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSAqVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8VjhTVkdQT0RUeXBlV3JhcHBlcjxUcmFuc2Zvcm1hdGlvbk1hdHJpeD4gPihW
OENsYXNzSW5kZXg6OlNWR01BVFJJWCwgYXJncy5Ib2xkZXIoKSk7CiAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CiAgICAgZmxvYXQgeCA9IHRvRmxvYXQoYXJnc1swXSk7CiAgICAgZmxvYXQgeSA9
IHRvRmxvYXQoYXJnc1sxXSk7CkBAIC03OCw3ICs3OCw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChT
VkdNYXRyaXhSb3RhdGVGcm9tVmVjdG9yKQogICAgICAgICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6
VmFsdWU+KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnRUb1Y4T2JqZWN0
KFY4Q2xhc3NJbmRleDo6U1ZHTUFUUklYLCBuZXcgVjhTVkdTdGF0aWNQT0RUeXBlV3JhcHBlcjxU
cmFuc2Zvcm1hdGlvbk1hdHJpeD4ocmVzdWx0KSk7CisgICAgcmV0dXJuIFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpTVkdNQVRSSVgsIG5ldyBWOFNWR1N0YXRp
Y1BPRFR5cGVXcmFwcGVyPFRyYW5zZm9ybWF0aW9uTWF0cml4PihyZXN1bHQpKTsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhTdG9yYWdlQ3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3Rv
cmFnZUN1c3RvbS5jcHAKaW5kZXggZDU0MWI4Zi4uZjZkNDI3OSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhTdG9yYWdlQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOFN0b3JhZ2VDdXN0b20uY3BwCkBAIC00Miw3ICs0Miw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIC8vIEdldCBhbiBhcnJheSBjb250YWluaW5nIHRoZSBuYW1lcyBv
ZiBpbmRleGVkIHByb3BlcnRpZXMgaW4gYSBjb2xsZWN0aW9uLgogdjg6OkhhbmRsZTx2ODo6QXJy
YXk+IFY4Q3VzdG9tOjp2OFN0b3JhZ2VOYW1lZFByb3BlcnR5RW51bWVyYXRvcihjb25zdCB2ODo6
QWNjZXNzb3JJbmZvJiBpbmZvKQogewotICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBWOFByb3h5Ojpj
b252ZXJ0VG9OYXRpdmVPYmplY3Q8U3RvcmFnZT4oVjhDbGFzc0luZGV4OjpTVE9SQUdFLCBpbmZv
LkhvbGRlcigpKTsKKyAgICBTdG9yYWdlKiBzdG9yYWdlID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8U3RvcmFnZT4oVjhDbGFzc0luZGV4OjpTVE9SQUdFLCBpbmZvLkhvbGRl
cigpKTsKICAgICB1bnNpZ25lZCBpbnQgbGVuZ3RoID0gc3RvcmFnZS0+bGVuZ3RoKCk7CiAgICAg
djg6OkhhbmRsZTx2ODo6QXJyYXk+IHByb3BlcnRpZXMgPSB2ODo6QXJyYXk6Ok5ldyhsZW5ndGgp
OwogICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKQEAgLTU4
LDcgKzU4LDcgQEAgdjg6OkhhbmRsZTx2ODo6QXJyYXk+IFY4Q3VzdG9tOjp2OFN0b3JhZ2VOYW1l
ZFByb3BlcnR5RW51bWVyYXRvcihjb25zdCB2ODo6QWNjZXMKIAogc3RhdGljIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBzdG9yYWdlR2V0dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OE5hbWUsIGNv
bnN0IHY4OjpBY2Nlc3NvckluZm8mIGluZm8pCiB7Ci0gICAgU3RvcmFnZSogc3RvcmFnZSA9IFY4
UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxTdG9yYWdlPihWOENsYXNzSW5kZXg6OlNUT1JB
R0UsIGluZm8uSG9sZGVyKCkpOworICAgIFN0b3JhZ2UqIHN0b3JhZ2UgPSBWOERPTVdyYXBwZXI6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxTdG9yYWdlPihWOENsYXNzSW5kZXg6OlNUT1JBR0UsIGlu
Zm8uSG9sZGVyKCkpOwogICAgIFN0cmluZyBuYW1lID0gdG9XZWJDb3JlU3RyaW5nKHY4TmFtZSk7
CiAKICAgICBpZiAoc3RvcmFnZS0+Y29udGFpbnMobmFtZSkpCkBAIC04Miw3ICs4Miw3IEBAIE5B
TUVEX1BST1BFUlRZX0dFVFRFUihTdG9yYWdlKQogCiBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHN0b3JhZ2VTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IHY4TmFtZSwgdjg6OkxvY2Fs
PHY4OjpWYWx1ZT4gdjhWYWx1ZSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbykKIHsKLSAg
ICBTdG9yYWdlKiBzdG9yYWdlID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFN0b3Jh
Z2U+KFY4Q2xhc3NJbmRleDo6U1RPUkFHRSwgaW5mby5Ib2xkZXIoKSk7CisgICAgU3RvcmFnZSog
c3RvcmFnZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFN0b3JhZ2U+KFY4
Q2xhc3NJbmRleDo6U1RPUkFHRSwgaW5mby5Ib2xkZXIoKSk7CiAgICAgU3RyaW5nIG5hbWUgPSB0
b1dlYkNvcmVTdHJpbmcodjhOYW1lKTsKICAgICBTdHJpbmcgdmFsdWUgPSB0b1dlYkNvcmVTdHJp
bmcodjhWYWx1ZSk7CiAKQEAgLTExNyw3ICsxMTcsNyBAQCBOQU1FRF9QUk9QRVJUWV9TRVRURVIo
U3RvcmFnZSkKIAogc3RhdGljIHY4OjpIYW5kbGU8djg6OkJvb2xlYW4+IHN0b3JhZ2VEZWxldGVy
KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiB2OE5hbWUsIGNvbnN0IHY4OjpBY2Nlc3NvckluZm8mIGlu
Zm8pCiB7Ci0gICAgU3RvcmFnZSogc3RvcmFnZSA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxTdG9yYWdlPihWOENsYXNzSW5kZXg6OlNUT1JBR0UsIGluZm8uSG9sZGVyKCkpOworICAg
IFN0b3JhZ2UqIHN0b3JhZ2UgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxT
dG9yYWdlPihWOENsYXNzSW5kZXg6OlNUT1JBR0UsIGluZm8uSG9sZGVyKCkpOwogICAgIFN0cmlu
ZyBuYW1lID0gdG9XZWJDb3JlU3RyaW5nKHY4TmFtZSk7CiAgICAgCiAgICAgaWYgKHN0b3JhZ2Ut
PmNvbnRhaW5zKG5hbWUpKSB7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFN0eWxlU2hlZXRMaXN0Q3VzdG9tLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U3R5bGVTaGVldExpc3RDdXN0b20uY3BwCmluZGV4IDIzNWFlOWEuLmVjZDAxNTMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0b20u
Y3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U3R5bGVTaGVldExpc3RDdXN0
b20uY3BwCkBAIC00NSwxMiArNDUsMTIgQEAgTkFNRURfUFJPUEVSVFlfR0VUVEVSKFN0eWxlU2hl
ZXRMaXN0KQogICAgICAgICByZXR1cm4gbm90SGFuZGxlZEJ5SW50ZXJjZXB0b3IoKTsKIAogICAg
IC8vIFNlYXJjaCBzdHlsZSBzaGVldC4KLSAgICBTdHlsZVNoZWV0TGlzdCogaW1wID0gVjhQcm94
eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFN0eWxlU2hlZXRMaXN0PihWOENsYXNzSW5kZXg6OlNU
WUxFU0hFRVRMSVNULCBpbmZvLkhvbGRlcigpKTsKKyAgICBTdHlsZVNoZWV0TGlzdCogaW1wID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8U3R5bGVTaGVldExpc3Q+KFY4Q2xh
c3NJbmRleDo6U1RZTEVTSEVFVExJU1QsIGluZm8uSG9sZGVyKCkpOwogICAgIEhUTUxTdHlsZUVs
ZW1lbnQqIGl0ZW0gPSBpbXAtPmdldE5hbWVkSXRlbSh0b1dlYkNvcmVTdHJpbmcobmFtZSkpOwog
ICAgIGlmICghaXRlbSkKICAgICAgICAgcmV0dXJuIG5vdEhhbmRsZWRCeUludGVyY2VwdG9yKCk7
CiAKLSAgICByZXR1cm4gVjhQcm94eTo6Y29udmVydFRvVjhPYmplY3QoVjhDbGFzc0luZGV4OjpI
VE1MU1RZTEVFTEVNRU5ULCBpdGVtKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9WOE9iamVjdChWOENsYXNzSW5kZXg6OkhUTUxTVFlMRUVMRU1FTlQsIGl0ZW0pOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1
c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20v
VjhUcmVlV2Fsa2VyQ3VzdG9tLmNwcAppbmRleCA3OGQ4MDE3Li5kYTI3NmUxIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFRyZWVXYWxrZXJDdXN0b20uY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4VHJlZVdhbGtlckN1c3RvbS5jcHAKQEAgLTUx
LDEzICs1MSwxMyBAQCBzdGF0aWMgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBh
c3NSZWZQdHI8Tm9kZT4gb2JqZWN0LCBTY3JpcHRTdGF0ZSogcwogICAgIGlmICghb2JqZWN0KQog
ICAgICAgICByZXR1cm4gdjg6Ok51bGwoKTsKIAotICAgIHJldHVybiBWOFByb3h5Ojpjb252ZXJ0
Tm9kZVRvVjhPYmplY3Qob2JqZWN0LmdldCgpKTsKKyAgICByZXR1cm4gVjhET01XcmFwcGVyOjpj
b252ZXJ0Tm9kZVRvVjhPYmplY3Qob2JqZWN0LmdldCgpKTsKIH0KIAogQ0FMTEJBQ0tfRlVOQ19E
RUNMKFRyZWVXYWxrZXJQYXJlbnROb2RlKQogewogICAgIElOQ19TVEFUUygiRE9NLlRyZWVXYWxr
ZXIucGFyZW50Tm9kZSgpIik7Ci0gICAgVHJlZVdhbGtlciogdHJlZVdhbGtlciA9IFY4UHJveHk6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxUcmVlV2Fsa2VyPihWOENsYXNzSW5kZXg6OlRSRUVXQUxL
RVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxUcmVlV2Fsa2VyPihWOENsYXNzSW5kZXg6OlRS
RUVXQUxLRVIsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgU2NyaXB0U3RhdGUgc3RhdGU7CiAgICAg
UmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPnBhcmVudE5vZGUoJnN0YXRlKTsKQEAg
LTY3LDcgKzY3LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFRyZWVXYWxrZXJQYXJlbnROb2RlKQog
Q0FMTEJBQ0tfRlVOQ19ERUNMKFRyZWVXYWxrZXJGaXJzdENoaWxkKQogewogICAgIElOQ19TVEFU
UygiRE9NLlRyZWVXYWxrZXIuZmlyc3RDaGlsZCgpIik7Ci0gICAgVHJlZVdhbGtlciogdHJlZVdh
bGtlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxUcmVlV2Fsa2VyPihWOENsYXNz
SW5kZXg6OlRSRUVXQUxLRVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIFRyZWVXYWxrZXIqIHRyZWVX
YWxrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxUcmVlV2Fsa2VyPihW
OENsYXNzSW5kZXg6OlRSRUVXQUxLRVIsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgU2NyaXB0U3Rh
dGUgc3RhdGU7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPmZpcnN0Q2hp
bGQoJnN0YXRlKTsKQEAgLTc3LDcgKzc3LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFRyZWVXYWxr
ZXJGaXJzdENoaWxkKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKFRyZWVXYWxrZXJMYXN0Q2hpbGQpCiB7
CiAgICAgSU5DX1NUQVRTKCJET00uVHJlZVdhbGtlci5sYXN0Q2hpbGQoKSIpOwotICAgIFRyZWVX
YWxrZXIqIHRyZWVXYWxrZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VHJlZVdh
bGtlcj4oVjhDbGFzc0luZGV4OjpUUkVFV0FMS0VSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBUcmVl
V2Fsa2VyKiB0cmVlV2Fsa2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
VHJlZVdhbGtlcj4oVjhDbGFzc0luZGV4OjpUUkVFV0FMS0VSLCBhcmdzLkhvbGRlcigpKTsKIAog
ICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fs
a2VyLT5sYXN0Q2hpbGQoJnN0YXRlKTsKQEAgLTg3LDcgKzg3LDcgQEAgQ0FMTEJBQ0tfRlVOQ19E
RUNMKFRyZWVXYWxrZXJMYXN0Q2hpbGQpCiBDQUxMQkFDS19GVU5DX0RFQ0woVHJlZVdhbGtlck5l
eHROb2RlKQogewogICAgIElOQ19TVEFUUygiRE9NLlRyZWVXYWxrZXIubmV4dE5vZGUoKSIpOwot
ICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmpl
Y3Q8VHJlZVdhbGtlcj4oVjhDbGFzc0luZGV4OjpUUkVFV0FMS0VSLCBhcmdzLkhvbGRlcigpKTsK
KyAgICBUcmVlV2Fsa2VyKiB0cmVlV2Fsa2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRp
dmVPYmplY3Q8VHJlZVdhbGtlcj4oVjhDbGFzc0luZGV4OjpUUkVFV0FMS0VSLCBhcmdzLkhvbGRl
cigpKTsKIAogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0cjxOb2RlPiByZXN1bHQg
PSB0cmVlV2Fsa2VyLT5uZXh0Tm9kZSgmc3RhdGUpOwpAQCAtOTcsNyArOTcsNyBAQCBDQUxMQkFD
S19GVU5DX0RFQ0woVHJlZVdhbGtlck5leHROb2RlKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKFRyZWVX
YWxrZXJQcmV2aW91c05vZGUpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uVHJlZVdhbGtlci5wcmV2
aW91c05vZGUoKSIpOwotICAgIFRyZWVXYWxrZXIqIHRyZWVXYWxrZXIgPSBWOFByb3h5Ojpjb252
ZXJ0VG9OYXRpdmVPYmplY3Q8VHJlZVdhbGtlcj4oVjhDbGFzc0luZGV4OjpUUkVFV0FMS0VSLCBh
cmdzLkhvbGRlcigpKTsKKyAgICBUcmVlV2Fsa2VyKiB0cmVlV2Fsa2VyID0gVjhET01XcmFwcGVy
Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8VHJlZVdhbGtlcj4oVjhDbGFzc0luZGV4OjpUUkVFV0FM
S0VSLCBhcmdzLkhvbGRlcigpKTsKIAogICAgIFNjcmlwdFN0YXRlIHN0YXRlOwogICAgIFJlZlB0
cjxOb2RlPiByZXN1bHQgPSB0cmVlV2Fsa2VyLT5wcmV2aW91c05vZGUoJnN0YXRlKTsKQEAgLTEw
Nyw3ICsxMDcsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woVHJlZVdhbGtlclByZXZpb3VzTm9kZSkK
IENBTExCQUNLX0ZVTkNfREVDTChUcmVlV2Fsa2VyTmV4dFNpYmxpbmcpCiB7CiAgICAgSU5DX1NU
QVRTKCJET00uVHJlZVdhbGtlci5uZXh0U2libGluZygpIik7Ci0gICAgVHJlZVdhbGtlciogdHJl
ZVdhbGtlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxUcmVlV2Fsa2VyPihWOENs
YXNzSW5kZXg6OlRSRUVXQUxLRVIsIGFyZ3MuSG9sZGVyKCkpOworICAgIFRyZWVXYWxrZXIqIHRy
ZWVXYWxrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxUcmVlV2Fsa2Vy
PihWOENsYXNzSW5kZXg6OlRSRUVXQUxLRVIsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgU2NyaXB0
U3RhdGUgc3RhdGU7CiAgICAgUmVmUHRyPE5vZGU+IHJlc3VsdCA9IHRyZWVXYWxrZXItPm5leHRT
aWJsaW5nKCZzdGF0ZSk7CkBAIC0xMTcsNyArMTE3LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFRy
ZWVXYWxrZXJOZXh0U2libGluZykKIENBTExCQUNLX0ZVTkNfREVDTChUcmVlV2Fsa2VyUHJldmlv
dXNTaWJsaW5nKQogewogICAgIElOQ19TVEFUUygiRE9NLlRyZWVXYWxrZXIucHJldmlvdXNTaWJs
aW5nKCkiKTsKLSAgICBUcmVlV2Fsa2VyKiB0cmVlV2Fsa2VyID0gVjhQcm94eTo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PFRyZWVXYWxrZXI+KFY4Q2xhc3NJbmRleDo6VFJFRVdBTEtFUiwgYXJncy5I
b2xkZXIoKSk7CisgICAgVHJlZVdhbGtlciogdHJlZVdhbGtlciA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PFRyZWVXYWxrZXI+KFY4Q2xhc3NJbmRleDo6VFJFRVdBTEtFUiwg
YXJncy5Ib2xkZXIoKSk7CiAKICAgICBTY3JpcHRTdGF0ZSBzdGF0ZTsKICAgICBSZWZQdHI8Tm9k
ZT4gcmVzdWx0ID0gdHJlZVdhbGtlci0+cHJldmlvdXNTaWJsaW5nKCZzdGF0ZSk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYktpdENTU01hdHJpeENvbnN0cnVj
dG9yLmNwcCBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0Q1NTTWF0cml4Q29u
c3RydWN0b3IuY3BwCmluZGV4IDc0MGQwNGEuLmM5OGU2YmMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3IuY3BwCisrKyBi
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V2ViS2l0Q1NTTWF0cml4Q29uc3RydWN0b3Iu
Y3BwCkBAIC01OSw3ICs1OSw3IEBAIENBTExCQUNLX0ZVTkNfREVDTChXZWJLaXRDU1NNYXRyaXhD
b25zdHJ1Y3RvcikKICAgICAgICAgdGhyb3dFcnJvcihlYyk7CiAKICAgICAvLyBUcmFuc2Zvcm0g
dGhlIGhvbGRlciBpbnRvIGEgd3JhcHBlciBvYmplY3QgZm9yIHRoZSBtYXRyaXguCi0gICAgVjhQ
cm94eTo6c2V0RE9NV3JhcHBlcihhcmdzLkhvbGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4
Q2xhc3NJbmRleDo6V0VCS0lUQ1NTTUFUUklYKSwgbWF0cml4LmdldCgpKTsKKyAgICBWOERPTVdy
YXBwZXI6OnNldERPTVdyYXBwZXIoYXJncy5Ib2xkZXIoKSwgVjhDbGFzc0luZGV4OjpUb0ludChW
OENsYXNzSW5kZXg6OldFQktJVENTU01BVFJJWCksIG1hdHJpeC5nZXQoKSk7CiAgICAgcmV0dXJu
IHRvVjgobWF0cml4LnJlbGVhc2UoKSwgYXJncy5Ib2xkZXIoKSk7CiB9CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAgYi9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdvcmtlckNvbnRleHRDdXN0b20uY3BwCmluZGV4
IDZlMWIzMzMuLmNkMDhiNGQgMTAwNzU1Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4V29ya2VyQ29udGV4dEN1c3RvbS5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhXb3JrZXJDb250ZXh0Q3VzdG9tLmNwcApAQCAtNDksMTQgKzQ5LDE0IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIEFDQ0VTU09SX0dFVFRFUihXb3JrZXJDb250ZXh0U2VsZikKIHsKICAgICBJ
TkNfU1RBVFMoTCJET00uV29ya2VyQ29udGV4dC5zZWxmLl9nZXQiKTsKLSAgICBXb3JrZXJDb250
ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtl
ckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwgaW5mby5Ib2xkZXIoKSk7Cisg
ICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRv
TmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwg
aW5mby5Ib2xkZXIoKSk7CiAgICAgcmV0dXJuIFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6
V29ya2VyQ29udGV4dFRvVjhPYmplY3Qod29ya2VyQ29udGV4dCk7CiB9CiAKIEFDQ0VTU09SX0dF
VFRFUihXb3JrZXJDb250ZXh0T25tZXNzYWdlKQogewogICAgIElOQ19TVEFUUyhMIkRPTS5Xb3Jr
ZXJDb250ZXh0Lm9ubWVzc2FnZS5fZ2V0Iik7Ci0gICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29u
dGV4dCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENs
YXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGluZm8uSG9sZGVyKCkpOworICAgIFdvcmtlckNvbnRl
eHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxX
b3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGluZm8uSG9sZGVyKCkp
OwogICAgIGlmICh3b3JrZXJDb250ZXh0LT5vbm1lc3NhZ2UoKSkgewogICAgICAgICBWOFdvcmtl
ckNvbnRleHRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4V29ya2VyQ29u
dGV4dEV2ZW50TGlzdGVuZXIqPih3b3JrZXJDb250ZXh0LT5vbm1lc3NhZ2UoKSk7CiAgICAgICAg
IHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVy
T2JqZWN0KCk7CkBAIC02OCw3ICs2OCw3IEBAIEFDQ0VTU09SX0dFVFRFUihXb3JrZXJDb250ZXh0
T25tZXNzYWdlKQogQUNDRVNTT1JfU0VUVEVSKFdvcmtlckNvbnRleHRPbm1lc3NhZ2UpCiB7CiAg
ICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRleHQub25tZXNzYWdlLl9zZXQiKTsKLSAgICBX
b3JrZXJDb250ZXh0KiB3b3JrZXJDb250ZXh0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VSQ09OVEVYVCwgaW5mby5Ib2xk
ZXIoKSk7CisgICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlckNvbnRleHQ+KFY4Q2xhc3NJbmRleDo6V09SS0VS
Q09OVEVYVCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgVjhXb3JrZXJDb250ZXh0RXZlbnRMaXN0ZW5l
ciogb2xkTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOFdvcmtlckNvbnRleHRFdmVudExpc3RlbmVy
Kj4od29ya2VyQ29udGV4dC0+b25tZXNzYWdlKCkpOwogICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkp
IHsKICAgICAgICAgaWYgKHdvcmtlckNvbnRleHQtPm9ubWVzc2FnZSgpKSB7CkBAIC05NCw3ICs5
NCw3IEBAIEFDQ0VTU09SX1NFVFRFUihXb3JrZXJDb250ZXh0T25tZXNzYWdlKQogCiB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gU2V0VGltZW91dE9ySW50ZXJ2YWwoY29uc3Qgdjg6OkFyZ3VtZW50cyYg
YXJncywgYm9vbCBzaW5nbGVTaG90KQogewotICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRl
eHQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyQ29udGV4dD4oVjhDbGFz
c0luZGV4OjpXT1JLRVJDT05URVhULCBhcmdzLkhvbGRlcigpKTsKKyAgICBXb3JrZXJDb250ZXh0
KiB3b3JrZXJDb250ZXh0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29y
a2VyQ29udGV4dD4oVjhDbGFzc0luZGV4OjpXT1JLRVJDT05URVhULCBhcmdzLkhvbGRlcigpKTsK
IAogICAgIGludCBhcmd1bWVudENvdW50ID0gYXJncy5MZW5ndGgoKTsKICAgICBpZiAoYXJndW1l
bnRDb3VudCA8IDEpCkBAIC0xNDMsNyArMTQzLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtl
ckNvbnRleHRJbXBvcnRTY3JpcHRzKQogICAgICAgICB1cmxzLmFwcGVuZCh0b1dlYkNvcmVTdHJp
bmcoc2NyaXB0VXJsKSk7CiAgICAgfQogCi0gICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4
dCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNz
SW5kZXg6OldPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkpOworICAgIFdvcmtlckNvbnRleHQq
IHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3Jr
ZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkpOwog
CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgd29ya2VyQ29udGV4dC0+aW1wb3J0U2Ny
aXB0cyh1cmxzLCBjYWxsZXJVUkwsIGNhbGxlckxpbmUsIGVjKTsKQEAgLTE2OCw3ICsxNjgsNyBA
QCBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4dFNldEludGVydmFsKSB7CiBDQUxMQkFD
S19GVU5DX0RFQ0woV29ya2VyQ29udGV4dEFkZEV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NU
QVRTKEwiRE9NLldvcmtlckNvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAgV29ya2Vy
Q29udGV4dCogd29ya2VyQ29udGV4dCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxX
b3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkp
OworICAgIFdvcmtlckNvbnRleHQqIHdvcmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRF
WFQsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgUmVmUHRyPFY4RXZlbnRMaXN0ZW5lcj4gbGlzdGVu
ZXIgPSB3b3JrZXJDb250ZXh0LT5zY3JpcHQoKS0+cHJveHkoKS0+ZmluZE9yQ3JlYXRlRXZlbnRM
aXN0ZW5lcih2ODo6TG9jYWw8djg6Ok9iamVjdD46OkNhc3QoYXJnc1sxXSksIGZhbHNlLCBmYWxz
ZSk7CiAKQEAgLTE4NSw3ICsxODUsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4
dEFkZEV2ZW50TGlzdGVuZXIpCiBDQUxMQkFDS19GVU5DX0RFQ0woV29ya2VyQ29udGV4dFJlbW92
ZUV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlckNvbnRleHQucmVt
b3ZlRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAgV29ya2VyQ29udGV4dCogd29ya2VyQ29udGV4dCA9
IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXJDb250ZXh0PihWOENsYXNzSW5k
ZXg6OldPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkpOworICAgIFdvcmtlckNvbnRleHQqIHdv
cmtlckNvbnRleHQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3JrZXJD
b250ZXh0PihWOENsYXNzSW5kZXg6OldPUktFUkNPTlRFWFQsIGFyZ3MuSG9sZGVyKCkpOwogICAg
IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eSogcHJveHkgPSB3b3JrZXJDb250ZXh0LT5zY3Jp
cHQoKS0+cHJveHkoKTsKIAogICAgIFJlZlB0cjxWOEV2ZW50TGlzdGVuZXI+IGxpc3RlbmVyID0g
cHJveHktPmZpbmRPckNyZWF0ZUV2ZW50TGlzdGVuZXIodjg6OkxvY2FsPHY4OjpPYmplY3Q+OjpD
YXN0KGFyZ3NbMV0pLCBmYWxzZSwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOFdvcmtlckN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFdvcmtlckN1c3RvbS5jcHAKaW5kZXggOTg4YmRiZC4uMjliMmQ0MyAxMDA3NTUKLS0tIGEv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhXb3JrZXJDdXN0b20uY3BwCisrKyBiL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4V29ya2VyQ3VzdG9tLmNwcApAQCAtODgsMTAgKzg4LDEw
IEBAIENBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJDb25zdHJ1Y3RvcikKIAogICAgIC8vIFNldHVw
IHRoZSBzdGFuZGFyZCB3cmFwcGVyIG9iamVjdCBpbnRlcm5hbCBmaWVsZHMuCiAgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyT2JqZWN0ID0gYXJncy5Ib2xkZXIoKTsKLSAgICBWOFBy
b3h5OjpzZXRET01XcmFwcGVyKHdyYXBwZXJPYmplY3QsIFY4Q2xhc3NJbmRleDo6V09SS0VSLCBv
YmouZ2V0KCkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0RE9NV3JhcHBlcih3cmFwcGVyT2JqZWN0
LCBWOENsYXNzSW5kZXg6OldPUktFUiwgb2JqLmdldCgpKTsKIAogICAgIG9iai0+cmVmKCk7Ci0g
ICAgVjhQcm94eTo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2JqZWN0KG9iai5nZXQoKSwgdjg6
OlBlcnNpc3RlbnQ8djg6Ok9iamVjdD46Ok5ldyh3cmFwcGVyT2JqZWN0KSk7CisgICAgVjhET01X
cmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3Qob2JqLmdldCgpLCB2ODo6UGVy
c2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KHdyYXBwZXJPYmplY3QpKTsKIAogICAgIHJldHVybiB3
cmFwcGVyT2JqZWN0OwogfQpAQCAtMTE0LDcgKzExNCw3IEBAIFBhc3NSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gZ2V0RXZlbnRMaXN0ZW5lcihXb3JrZXIqIHdvcmtlciwgdjg6OkxvY2FsPHY4OjpWYWx1
ZT4KIEFDQ0VTU09SX0dFVFRFUihXb3JrZXJPbm1lc3NhZ2UpCiB7CiAgICAgSU5DX1NUQVRTKEwi
RE9NLldvcmtlci5vbm1lc3NhZ2UuX2dldCIpOwotICAgIFdvcmtlciogd29ya2VyID0gVjhQcm94
eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIsIGlu
Zm8uSG9sZGVyKCkpOworICAgIFdvcmtlciogd29ya2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0
VG9OYXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgaW5mby5Ib2xkZXIo
KSk7CiAgICAgaWYgKHdvcmtlci0+b25tZXNzYWdlKCkpIHsKICAgICAgICAgVjhPYmplY3RFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+
KHdvcmtlci0+b25tZXNzYWdlKCkpOwogICAgICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhM
aXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0ZW5lck9iamVjdCgpOwpAQCAtMTI2LDcgKzEyNiw3
IEBAIEFDQ0VTU09SX0dFVFRFUihXb3JrZXJPbm1lc3NhZ2UpCiBBQ0NFU1NPUl9TRVRURVIoV29y
a2VyT25tZXNzYWdlKQogewogICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXIub25tZXNzYWdlLl9z
ZXQiKTsKLSAgICBXb3JrZXIqIHdvcmtlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBpbmZvLkhvbGRlcigpKTsKKyAgICBXb3Jr
ZXIqIHdvcmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4o
VjhDbGFzc0luZGV4OjpXT1JLRVIsIGluZm8uSG9sZGVyKCkpOwogICAgIFY4T2JqZWN0RXZlbnRM
aXN0ZW5lciogb2xkTGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIq
Pih3b3JrZXItPm9ubWVzc2FnZSgpKTsKICAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7CiAgICAg
ICAgIGlmIChvbGRMaXN0ZW5lcikgewpAQCAtMTUzLDcgKzE1Myw3IEBAIEFDQ0VTU09SX1NFVFRF
UihXb3JrZXJPbm1lc3NhZ2UpCiBBQ0NFU1NPUl9HRVRURVIoV29ya2VyT25lcnJvcikKIHsKICAg
ICBJTkNfU1RBVFMoTCJET00uV29ya2VyLm9uZXJyb3IuX2dldCIpOwotICAgIFdvcmtlciogd29y
a2VyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4
OjpXT1JLRVIsIGluZm8uSG9sZGVyKCkpOworICAgIFdvcmtlciogd29ya2VyID0gVjhET01XcmFw
cGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwg
aW5mby5Ib2xkZXIoKSk7CiAgICAgaWYgKHdvcmtlci0+b25lcnJvcigpKSB7CiAgICAgICAgIFY4
T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50
TGlzdGVuZXIqPih3b3JrZXItPm9uZXJyb3IoKSk7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2Jq
ZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CkBAIC0xNjUs
NyArMTY1LDcgQEAgQUNDRVNTT1JfR0VUVEVSKFdvcmtlck9uZXJyb3IpCiBBQ0NFU1NPUl9TRVRU
RVIoV29ya2VyT25lcnJvcikKIHsKICAgICBJTkNfU1RBVFMoTCJET00uV29ya2VyLm9uZXJyb3Iu
X3NldCIpOwotICAgIFdvcmtlciogd29ya2VyID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2Jq
ZWN0PFdvcmtlcj4oVjhDbGFzc0luZGV4OjpXT1JLRVIsIGluZm8uSG9sZGVyKCkpOworICAgIFdv
cmtlciogd29ya2VyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8V29ya2Vy
PihWOENsYXNzSW5kZXg6OldPUktFUiwgaW5mby5Ib2xkZXIoKSk7CiAgICAgVjhPYmplY3RFdmVu
dExpc3RlbmVyKiBvbGRMaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5l
cio+KHdvcmtlci0+b25lcnJvcigpKTsKICAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7CiAgICAg
ICAgIGlmIChvbGRMaXN0ZW5lcikgewpAQCAtMTkyLDcgKzE5Miw3IEBAIEFDQ0VTU09SX1NFVFRF
UihXb3JrZXJPbmVycm9yKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKFdvcmtlckFkZEV2ZW50TGlzdGVu
ZXIpCiB7CiAgICAgSU5DX1NUQVRTKEwiRE9NLldvcmtlci5hZGRFdmVudExpc3RlbmVyKCkiKTsK
LSAgICBXb3JrZXIqIHdvcmtlciA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxXb3Jr
ZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBhcmdzLkhvbGRlcigpKTsKKyAgICBXb3JrZXIqIHdv
cmtlciA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFdvcmtlcj4oVjhDbGFz
c0luZGV4OjpXT1JLRVIsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgUmVmUHRyPEV2ZW50TGlzdGVu
ZXI+IGxpc3RlbmVyID0gZ2V0RXZlbnRMaXN0ZW5lcih3b3JrZXIsIGFyZ3NbMV0sIGZhbHNlKTsK
ICAgICBpZiAobGlzdGVuZXIpIHsKQEAgLTIwOCw3ICsyMDgsNyBAQCBDQUxMQkFDS19GVU5DX0RF
Q0woV29ya2VyQWRkRXZlbnRMaXN0ZW5lcikKIENBTExCQUNLX0ZVTkNfREVDTChXb3JrZXJSZW1v
dmVFdmVudExpc3RlbmVyKQogewogICAgIElOQ19TVEFUUyhMIkRPTS5Xb3JrZXIucmVtb3ZlRXZl
bnRMaXN0ZW5lcigpIik7Ci0gICAgV29ya2VyKiB3b3JrZXIgPSBWOFByb3h5Ojpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8V29ya2VyPihWOENsYXNzSW5kZXg6OldPUktFUiwgYXJncy5Ib2xkZXIoKSk7
CisgICAgV29ya2VyKiB3b3JrZXIgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxXb3JrZXI+KFY4Q2xhc3NJbmRleDo6V09SS0VSLCBhcmdzLkhvbGRlcigpKTsKIAogICAgIFJl
ZlB0cjxFdmVudExpc3RlbmVyPiBsaXN0ZW5lciA9IGdldEV2ZW50TGlzdGVuZXIod29ya2VyLCBh
cmdzWzFdLCB0cnVlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAgYi9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q29uc3RydWN0b3IuY3BwCmlu
ZGV4IDkzYThiMzIuLjhjNDQ3YzYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4WE1MSHR0cFJlcXVlc3RDb25zdHJ1Y3Rvci5jcHAKKysrIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yLmNwcApAQCAtNTksMTEgKzU5
LDExIEBAIENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVzdENvbnN0cnVjdG9yKQogI2Vu
ZGlmCiAgICAgICAgIGNvbnRleHQgPSBWOFByb3h5OjpyZXRyaWV2ZUZyYW1lKCktPmRvY3VtZW50
KCk7CiAgICAgUmVmUHRyPFhNTEh0dHBSZXF1ZXN0PiB4bWxIdHRwUmVxdWVzdCA9IFhNTEh0dHBS
ZXF1ZXN0OjpjcmVhdGUoY29udGV4dCk7Ci0gICAgVjhQcm94eTo6c2V0RE9NV3JhcHBlcihhcmdz
LkhvbGRlcigpLCBWOENsYXNzSW5kZXg6OlRvSW50KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVF
U1QpLCB4bWxIdHRwUmVxdWVzdC5nZXQoKSk7CisgICAgVjhET01XcmFwcGVyOjpzZXRET01XcmFw
cGVyKGFyZ3MuSG9sZGVyKCksIFY4Q2xhc3NJbmRleDo6VG9JbnQoVjhDbGFzc0luZGV4OjpYTUxI
VFRQUkVRVUVTVCksIHhtbEh0dHBSZXF1ZXN0LmdldCgpKTsKIAogICAgIC8vIEFkZCBvYmplY3Qg
dG8gdGhlIHdyYXBwZXIgbWFwLgogICAgIHhtbEh0dHBSZXF1ZXN0LT5yZWYoKTsKLSAgICBWOFBy
b3h5OjpzZXRKU1dyYXBwZXJGb3JBY3RpdmVET01PYmplY3QoeG1sSHR0cFJlcXVlc3QuZ2V0KCks
IHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3Q+OjpOZXcoYXJncy5Ib2xkZXIoKSkpOworICAgIFY4
RE9NV3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yQWN0aXZlRE9NT2JqZWN0KHhtbEh0dHBSZXF1ZXN0
LmdldCgpLCB2ODo6UGVyc2lzdGVudDx2ODo6T2JqZWN0Pjo6TmV3KGFyZ3MuSG9sZGVyKCkpKTsK
ICAgICByZXR1cm4gYXJncy5Ib2xkZXIoKTsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhYTUxIdHRwUmVxdWVzdEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0Q3VzdG9tLmNwcAppbmRleCAxMDliYmM4Li5l
NjEyNGZjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBS
ZXF1ZXN0Q3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0
dHBSZXF1ZXN0Q3VzdG9tLmNwcApAQCAtNjIsNyArNjIsNyBAQCBQYXNzUmVmUHRyPEV2ZW50TGlz
dGVuZXI+IGdldEV2ZW50TGlzdGVuZXIoWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0LCB2
ODo6TAogQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25hYm9ydCkKIHsKICAgICBJTkNf
U1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5vbmFib3J0Ll9nZXQiKTsKLSAgICBYTUxIdHRwUmVx
dWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1M
SHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkp
OworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29u
dmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBS
RVFVRVNULCBpbmZvLkhvbGRlcigpKTsKICAgICBpZiAoeG1sSHR0cFJlcXVlc3QtPm9uYWJvcnQo
KSkgewogICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nh
c3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3QtPm9uYWJvcnQoKSk7CiAg
ICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExp
c3RlbmVyT2JqZWN0KCk7CkBAIC03NCw3ICs3NCw3IEBAIEFDQ0VTU09SX0dFVFRFUihYTUxIdHRw
UmVxdWVzdE9uYWJvcnQpCiBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RPbmFib3J0KQog
ewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0Lm9uYWJvcnQuX3NldCIpOwotICAg
IFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2
ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5m
by5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01X
cmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRl
eDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwogICAgIGlmICh2YWx1ZS0+SXNOdWxs
KCkpIHsKICAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbmFib3J0KCkpIHsKICAgICAgICAg
ICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVj
dEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdC0+b25hYm9ydCgpKTsKQEAgLTk2LDcgKzk2
LDcgQEAgQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25hYm9ydCkKIEFDQ0VTU09SX0dF
VFRFUihYTUxIdHRwUmVxdWVzdE9uZXJyb3IpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0
cFJlcXVlc3Qub25lcnJvci5fZ2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1
ZXN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENs
YXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVx
dWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xk
ZXIoKSk7CiAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0LT5vbmVycm9yKCkpIHsKICAgICAgICAgUmVm
UHRyPFY4T2JqZWN0RXZlbnRMaXN0ZW5lcj4gbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVj
dEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdC0+b25lcnJvcigpKTsKICAgICAgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmpl
Y3QoKTsKQEAgLTEwOCw3ICsxMDgsNyBAQCBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RP
bmVycm9yKQogQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25lcnJvcikKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5vbmVycm9yLl9zZXQiKTsKLSAgICBYTUxIdHRw
UmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8
WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVy
KCkpOworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhU
VFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKICAgICBpZiAodmFsdWUtPklzTnVsbCgpKSB7CiAg
ICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdC0+b25lcnJvcigpKSB7CiAgICAgICAgICAgICBWOE9i
amVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExp
c3RlbmVyKj4oeG1sSHR0cFJlcXVlc3QtPm9uZXJyb3IoKSk7CkBAIC0xMzAsNyArMTMwLDcgQEAg
QUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25lcnJvcikKIEFDQ0VTU09SX0dFVFRFUihY
TUxIdHRwUmVxdWVzdE9ubG9hZCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVz
dC5vbmxvYWQuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4
UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4
OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVlc3QqIHht
bEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0
cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwog
ICAgIGlmICh4bWxIdHRwUmVxdWVzdC0+b25sb2FkKCkpIHsKICAgICAgICAgVjhPYmplY3RFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+
KHhtbEh0dHBSZXF1ZXN0LT5vbmxvYWQoKSk7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0
PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CkBAIC0xNDIsNyAr
MTQyLDcgQEAgQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25sb2FkKQogQUNDRVNTT1Jf
U0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25sb2FkKQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0
dHBSZXF1ZXN0Lm9ubG9hZC5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1
ZXN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENs
YXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVx
dWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xk
ZXIoKSk7CiAgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewogICAgICAgICBpZiAoeG1sSHR0cFJl
cXVlc3QtPm9ubG9hZCgpKSB7CiAgICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxp
c3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVl
c3QtPm9ubG9hZCgpKTsKQEAgLTE2NCw3ICsxNjQsNyBAQCBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0
cFJlcXVlc3RPbmxvYWQpCiBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RPbmxvYWRzdGFy
dCkKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5vbmxvYWRzdGFydC5fZ2V0
Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFV
RVNULCBpbmZvLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3Qg
PSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhD
bGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgaWYgKHhtbEh0
dHBSZXF1ZXN0LT5vbmxvYWRzdGFydCgpKSB7CiAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5l
ciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRw
UmVxdWVzdC0+b25sb2Fkc3RhcnQoKSk7CiAgICAgICAgIHY4OjpMb2NhbDx2ODo6T2JqZWN0PiB2
OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7CkBAIC0xNzYsNyArMTc2
LDcgQEAgQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25sb2Fkc3RhcnQpCiBBQ0NFU1NP
Ul9TRVRURVIoWE1MSHR0cFJlcXVlc3RPbmxvYWRzdGFydCkKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5YTUxIdHRwUmVxdWVzdC5vbmxvYWRzdGFydC5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3Qq
IHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBS
ZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKKyAg
ICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRU
b05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVT
VCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewogICAgICAgICBp
ZiAoeG1sSHR0cFJlcXVlc3QtPm9ubG9hZHN0YXJ0KCkpIHsKICAgICAgICAgICAgIFY4T2JqZWN0
RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVu
ZXIqPih4bWxIdHRwUmVxdWVzdC0+b25sb2Fkc3RhcnQoKSk7CkBAIC0xOTgsNyArMTk4LDcgQEAg
QUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25sb2Fkc3RhcnQpCiBBQ0NFU1NPUl9HRVRU
RVIoWE1MSHR0cFJlcXVlc3RPbnByb2dyZXNzKQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0
dHBSZXF1ZXN0Lm9ucHJvZ3Jlc3MuX2dldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRw
UmVxdWVzdCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4o
VjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgWE1MSHR0
cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVP
YmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8u
SG9sZGVyKCkpOwogICAgIGlmICh4bWxIdHRwUmVxdWVzdC0+b25wcm9ncmVzcygpKSB7CiAgICAg
ICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVj
dEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdC0+b25wcm9ncmVzcygpKTsKICAgICAgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJP
YmplY3QoKTsKQEAgLTIxMCw3ICsyMTAsNyBAQCBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVl
c3RPbnByb2dyZXNzKQogQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25wcm9ncmVzcykK
IHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5vbnByb2dyZXNzLl9zZXQiKTsK
LSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5Ojpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1Qs
IGluZm8uSG9sZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNz
SW5kZXg6OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKICAgICBpZiAodmFsdWUtPklz
TnVsbCgpKSB7CiAgICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdC0+b25wcm9ncmVzcygpKSB7CiAg
ICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8
VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3QtPm9ucHJvZ3Jlc3MoKSk7CkBA
IC0yMzIsNyArMjMyLDcgQEAgQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25wcm9ncmVz
cykKIEFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdE9ucmVhZHlzdGF0ZWNoYW5nZSkKIHsK
ICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UuX2dl
dCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6OmNvbnZl
cnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVR
VUVTVCwgaW5mby5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4
Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGluZm8uSG9sZGVyKCkpOwogICAgIGlmICh4bWxI
dHRwUmVxdWVzdC0+b25yZWFkeXN0YXRlY2hhbmdlKCkpIHsKICAgICAgICAgVjhPYmplY3RFdmVu
dExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+
KHhtbEh0dHBSZXF1ZXN0LT5vbnJlYWR5c3RhdGVjaGFuZ2UoKSk7CiAgICAgICAgIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7
CkBAIC0yNDQsNyArMjQ0LDcgQEAgQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25yZWFk
eXN0YXRlY2hhbmdlKQogQUNDRVNTT1JfU0VUVEVSKFhNTEh0dHBSZXF1ZXN0T25yZWFkeXN0YXRl
Y2hhbmdlKQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0Lm9ucmVhZHlzdGF0
ZWNoYW5nZS5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhQ
cm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6
OlhNTEhUVFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1s
SHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRw
UmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7CiAg
ICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewogICAgICAgICBpZiAoeG1sSHR0cFJlcXVlc3QtPm9u
cmVhZHlzdGF0ZWNoYW5nZSgpKSB7CiAgICAgICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIq
IGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJl
cXVlc3QtPm9ucmVhZHlzdGF0ZWNoYW5nZSgpKTsKQEAgLTI2OCwxNCArMjY4LDE0IEBAIEFDQ0VT
U09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFJlc3BvbnNlVGV4dCkKICAgICAvLyBGSVhNRTogVGhp
cyBpcyBvbmx5IG5lZWRlZCBiZWNhdXNlIHdlYmtpdCBzZXQgdGhpcyBnZXR0ZXIgYXMgY3VzdG9t
LgogICAgIC8vIFNvIHdlIG5lZWQgYSBjdXN0b20gbWV0aG9kIHRvIGF2b2lkIGZvcmtpbmcgdGhl
IElETCBmaWxlLgogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0LnJlc3BvbnNldGV4
dC5fZ2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6
Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhU
VFBSRVFVRVNULCBpbmZvLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJl
cXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVz
dD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgcmV0
dXJuIHY4U3RyaW5nT3JOdWxsKHhtbEh0dHBSZXF1ZXN0LT5yZXNwb25zZVRleHQoKSk7CiB9CiAK
IENBTExCQUNLX0ZVTkNfREVDTChYTUxIdHRwUmVxdWVzdEFkZEV2ZW50TGlzdGVuZXIpCiB7CiAg
ICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigpIik7Ci0g
ICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBh
cmdzLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERP
TVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0lu
ZGV4OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBSZWZQdHI8RXZlbnRM
aXN0ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHhtbEh0dHBSZXF1ZXN0LCBhcmdz
WzFdLCBmYWxzZSk7CiAgICAgaWYgKGxpc3RlbmVyKSB7CkBAIC0yOTEsNyArMjkxLDcgQEAgQ0FM
TEJBQ0tfRlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0QWRkRXZlbnRMaXN0ZW5lcikKIENBTExCQUNL
X0ZVTkNfREVDTChYTUxIdHRwUmVxdWVzdFJlbW92ZUV2ZW50TGlzdGVuZXIpCiB7CiAgICAgSU5D
X1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigpIik7Ci0gICAg
WE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZl
T2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBhcmdz
LkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdy
YXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4
OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7CiAKICAgICBSZWZQdHI8RXZlbnRMaXN0
ZW5lcj4gbGlzdGVuZXIgPSBnZXRFdmVudExpc3RlbmVyKHhtbEh0dHBSZXF1ZXN0LCBhcmdzWzFd
LCB0cnVlKTsKICAgICBpZiAobGlzdGVuZXIpIHsKQEAgLTMxNyw3ICszMTcsNyBAQCBDQUxMQkFD
S19GVU5DX0RFQ0woWE1MSHR0cFJlcXVlc3RPcGVuKQogICAgIGlmIChhcmdzLkxlbmd0aCgpIDwg
MikKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwgVjhQ
cm94eTo6U3ludGF4RXJyb3IpOwogCi0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1ZXN0
ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNz
SW5kZXg6OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVz
dCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxY
TUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIo
KSk7CiAKICAgICBTdHJpbmcgbWV0aG9kID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAg
IFN0cmluZyB1cmxzdHJpbmcgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1sxXSk7CkBAIC0zNzAsNyAr
MzcwLDcgQEAgc3RhdGljIGJvb2wgSXNEb2N1bWVudFR5cGUodjg6OkhhbmRsZTx2ODo6VmFsdWU+
IHZhbHVlKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKFhNTEh0dHBSZXF1ZXN0U2VuZCkKIHsKICAgICBJ
TkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVzdC5zZW5kKCkiKTsKLSAgICBYTUxIdHRwUmVxdWVz
dCogeG1sSHR0cFJlcXVlc3QgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0
cFJlcXVlc3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGFyZ3MuSG9sZGVyKCkpOwor
ICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFV
RVNULCBhcmdzLkhvbGRlcigpKTsKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGlm
IChhcmdzLkxlbmd0aCgpIDwgMSkKQEAgLTM4MCw3ICszODAsNyBAQCBDQUxMQkFDS19GVU5DX0RF
Q0woWE1MSHR0cFJlcXVlc3RTZW5kKQogICAgICAgICAvLyBGSVhNRTogdXBzdHJlYW0gaGFuZGxl
cyAiRmlsZSIgb2JqZWN0cyB0b28uCiAgICAgICAgIGlmIChJc0RvY3VtZW50VHlwZShhcmcpKSB7
CiAgICAgICAgICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjdCA9IHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoYXJnKTsKLSAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9
IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPERvY3VtZW50PihvYmplY3QpOworICAg
ICAgICAgICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3Jh
cHBlclRvTm9kZTxEb2N1bWVudD4ob2JqZWN0KTsKICAgICAgICAgICAgIEFTU0VSVChkb2N1bWVu
dCk7CiAgICAgICAgICAgICB4bWxIdHRwUmVxdWVzdC0+c2VuZChkb2N1bWVudCwgZWMpOwogICAg
ICAgICB9IGVsc2UKQEAgLTM5OCw3ICszOTgsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0
cFJlcXVlc3RTZXRSZXF1ZXN0SGVhZGVyKSB7CiAgICAgaWYgKGFyZ3MuTGVuZ3RoKCkgPCAyKQog
ICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigiTm90IGVub3VnaCBhcmd1bWVudHMiLCBWOFByb3h5
OjpTeW50YXhFcnJvcik7CiAKLSAgICBYTUxIdHRwUmVxdWVzdCogeG1sSHR0cFJlcXVlc3QgPSBW
OFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3Q+KFY4Q2xhc3NJbmRl
eDo6WE1MSFRUUFJFUVVFU1QsIGFyZ3MuSG9sZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0KiB4
bWxIdHRwUmVxdWVzdCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0
dHBSZXF1ZXN0PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigpKTsK
ICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBTdHJpbmcgaGVhZGVyID0gdG9XZWJDb3Jl
U3RyaW5nKGFyZ3NbMF0pOwogICAgIFN0cmluZyB2YWx1ZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdz
WzFdKTsKQEAgLTQxNCw3ICs0MTQsNyBAQCBDQUxMQkFDS19GVU5DX0RFQ0woWE1MSHR0cFJlcXVl
c3RHZXRSZXNwb25zZUhlYWRlcikKICAgICBpZiAoYXJncy5MZW5ndGgoKSA8IDEpCiAgICAgICAg
IHJldHVybiB0aHJvd0Vycm9yKCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIsIFY4UHJveHk6OlN5bnRh
eEVycm9yKTsKIAotICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9IFY4UHJveHk6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxI
VFRQUkVRVUVTVCwgYXJncy5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBS
ZXF1ZXN0ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVl
c3Q+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1QsIGFyZ3MuSG9sZGVyKCkpOwogICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIFN0cmluZyBoZWFkZXIgPSB0b1dlYkNvcmVTdHJpbmco
YXJnc1swXSk7CiAgICAgU3RyaW5nIHJlc3VsdCA9IHhtbEh0dHBSZXF1ZXN0LT5nZXRSZXNwb25z
ZUhlYWRlcihoZWFkZXIsIGVjKTsKQEAgLTQyOSw3ICs0MjksNyBAQCBDQUxMQkFDS19GVU5DX0RF
Q0woWE1MSHR0cFJlcXVlc3RPdmVycmlkZU1pbWVUeXBlKQogICAgIGlmIChhcmdzLkxlbmd0aCgp
IDwgMSkKICAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoIk5vdCBlbm91Z2ggYXJndW1lbnRzIiwg
VjhQcm94eTo6U3ludGF4RXJyb3IpOwogCi0gICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0dHBSZXF1
ZXN0ID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0PihWOENs
YXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNULCBhcmdzLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVx
dWVzdCogeG1sSHR0cFJlcXVlc3QgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxYTUxIdHRwUmVxdWVzdD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVCwgYXJncy5Ib2xk
ZXIoKSk7CiAgICAgU3RyaW5nIHZhbHVlID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMF0pOwogICAg
IHhtbEh0dHBSZXF1ZXN0LT5vdmVycmlkZU1pbWVUeXBlKHZhbHVlKTsKICAgICByZXR1cm4gdjg6
OlVuZGVmaW5lZCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhY
TUxIdHRwUmVxdWVzdFVwbG9hZEN1c3RvbS5jcHAgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3Rv
bS9WOFhNTEh0dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcAppbmRleCA4ZTZiZGJlLi4yY2UwY2E0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0dHBSZXF1ZXN0
VXBsb2FkQ3VzdG9tLmNwcAorKysgYi9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhNTEh0
dHBSZXF1ZXN0VXBsb2FkQ3VzdG9tLmNwcApAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmFib3J0KQogewog
ICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9uYWJvcnQuX2dldCIpOwot
ICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4UHJveHk6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4
OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVl
c3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJF
UVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOwogICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9h
ZC0+b25hYm9ydCgpKSB7CiAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9h
ZC0+b25hYm9ydCgpKTsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIg
PSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKQEAgLTU4LDcgKzU4LDcgQEAgQUNDRVNT
T1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0VXBsb2FkT25hYm9ydCkKIEFDQ0VTU09SX1NFVFRFUihY
TUxIdHRwUmVxdWVzdFVwbG9hZE9uYWJvcnQpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0
cFJlcXVlc3RVcGxvYWQub25hYm9ydC5fc2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQq
IHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhN
TEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBp
bmZvLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RV
cGxvYWQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVz
dFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIo
KSk7CiAgICAgaWYgKHZhbHVlLT5Jc051bGwoKSkgewogICAgICAgICBpZiAoeG1sSHR0cFJlcXVl
c3RVcGxvYWQtPm9uYWJvcnQoKSkgewogICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVy
KiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBS
ZXF1ZXN0VXBsb2FkLT5vbmFib3J0KCkpOwpAQCAtODUsNyArODUsNyBAQCBBQ0NFU1NPUl9TRVRU
RVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmFib3J0KQogQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBS
ZXF1ZXN0VXBsb2FkT25lcnJvcikKIHsKICAgICBJTkNfU1RBVFMoIkRPTS5YTUxIdHRwUmVxdWVz
dFVwbG9hZC5vbmVycm9yLl9nZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0
cFJlcXVlc3RVcGxvYWQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJl
cXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9s
ZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9
IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2Fk
PihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKICAg
ICBpZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uZXJyb3IoKSkgewogICAgICAgICBWOE9iamVj
dEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGljX2Nhc3Q8VjhPYmplY3RFdmVudExpc3Rl
bmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9uZXJyb3IoKSk7CiAgICAgICAgIHY4OjpMb2Nh
bDx2ODo6T2JqZWN0PiB2OExpc3RlbmVyID0gbGlzdGVuZXItPmdldExpc3RlbmVyT2JqZWN0KCk7
CkBAIC05Nyw3ICs5Nyw3IEBAIEFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9u
ZXJyb3IpCiBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmVycm9yKQogewog
ICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9uZXJyb3IuX3NldCIpOwot
ICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4UHJveHk6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4
OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVl
c3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJF
UVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOwogICAgIGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsK
ICAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmVycm9yKCkpIHsKICAgICAgICAg
ICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVj
dEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25lcnJvcigpKTsKQEAgLTEy
NCw3ICsxMjQsNyBAQCBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmVycm9y
KQogQUNDRVNTT1JfR0VUVEVSKFhNTEh0dHBSZXF1ZXN0VXBsb2FkT25sb2FkKQogewogICAgIElO
Q19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9ubG9hZC5fZ2V0Iik7Ci0gICAgWE1M
SHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhQcm94eTo6Y29udmVy
dFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhU
VFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVzdFVwbG9h
ZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9i
amVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQ
TE9BRCwgaW5mby5Ib2xkZXIoKSk7CiAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmxv
YWQoKSkgewogICAgICAgICBWOE9iamVjdEV2ZW50TGlzdGVuZXIqIGxpc3RlbmVyID0gc3RhdGlj
X2Nhc3Q8VjhPYmplY3RFdmVudExpc3RlbmVyKj4oeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ubG9h
ZCgpKTsKICAgICAgICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5l
ci0+Z2V0TGlzdGVuZXJPYmplY3QoKTsKQEAgLTEzNiw3ICsxMzYsNyBAQCBBQ0NFU1NPUl9HRVRU
RVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbmxvYWQpCiBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJl
cXVlc3RVcGxvYWRPbmxvYWQpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJlcXVlc3RV
cGxvYWQub25sb2FkLl9zZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJl
cXVlc3RVcGxvYWQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVl
c3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVy
KCkpOworICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihW
OENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKICAgICBp
ZiAodmFsdWUtPklzTnVsbCgpKSB7CiAgICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+
b25sb2FkKCkpIHsKICAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlzdGVuZXIg
PSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVzdFVwbG9h
ZC0+b25sb2FkKCkpOwpAQCAtMTYzLDcgKzE2Myw3IEBAIEFDQ0VTU09SX1NFVFRFUihYTUxIdHRw
UmVxdWVzdFVwbG9hZE9ubG9hZCkKIEFDQ0VTU09SX0dFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9h
ZE9ubG9hZHN0YXJ0KQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2Fk
Lm9ubG9hZHN0YXJ0Ll9nZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJl
cXVlc3RVcGxvYWQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVl
c3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVy
KCkpOworICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihW
OENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKICAgICBp
ZiAoeG1sSHR0cFJlcXVlc3RVcGxvYWQtPm9ubG9hZHN0YXJ0KCkpIHsKICAgICAgICAgVjhPYmpl
Y3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0
ZW5lcio+KHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbmxvYWRzdGFydCgpKTsKICAgICAgICAgdjg6
OkxvY2FsPHY4OjpPYmplY3Q+IHY4TGlzdGVuZXIgPSBsaXN0ZW5lci0+Z2V0TGlzdGVuZXJPYmpl
Y3QoKTsKQEAgLTE3NSw3ICsxNzUsNyBAQCBBQ0NFU1NPUl9HRVRURVIoWE1MSHR0cFJlcXVlc3RV
cGxvYWRPbmxvYWRzdGFydCkKIEFDQ0VTU09SX1NFVFRFUihYTUxIdHRwUmVxdWVzdFVwbG9hZE9u
bG9hZHN0YXJ0KQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLm9u
bG9hZHN0YXJ0Ll9zZXQiKTsKLSAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVl
c3RVcGxvYWQgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RV
cGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkp
OworICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9N
V3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENs
YXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBpbmZvLkhvbGRlcigpKTsKICAgICBpZiAo
dmFsdWUtPklzTnVsbCgpKSB7CiAgICAgICAgIGlmICh4bWxIdHRwUmVxdWVzdFVwbG9hZC0+b25s
b2Fkc3RhcnQoKSkgewogICAgICAgICAgICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5l
ciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0VXBs
b2FkLT5vbmxvYWRzdGFydCgpKTsKQEAgLTIwMiw3ICsyMDIsNyBAQCBBQ0NFU1NPUl9TRVRURVIo
WE1MSHR0cFJlcXVlc3RVcGxvYWRPbmxvYWRzdGFydCkKIEFDQ0VTU09SX0dFVFRFUihYTUxIdHRw
UmVxdWVzdFVwbG9hZE9ucHJvZ3Jlc3MpCiB7CiAgICAgSU5DX1NUQVRTKCJET00uWE1MSHR0cFJl
cXVlc3RVcGxvYWQub25wcm9ncmVzcy5fZ2V0Iik7Ci0gICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQq
IHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhN
TEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FELCBp
bmZvLkhvbGRlcigpKTsKKyAgICBYTUxIdHRwUmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RV
cGxvYWQgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVz
dFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgaW5mby5Ib2xkZXIo
KSk7CiAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbnByb2dyZXNzKCkpIHsKICAgICAg
ICAgVjhPYmplY3RFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0YXRpY19jYXN0PFY4T2JqZWN0
RXZlbnRMaXN0ZW5lcio+KHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5vbnByb2dyZXNzKCkpOwogICAg
ICAgICB2ODo6TG9jYWw8djg6Ok9iamVjdD4gdjhMaXN0ZW5lciA9IGxpc3RlbmVyLT5nZXRMaXN0
ZW5lck9iamVjdCgpOwpAQCAtMjE0LDcgKzIxNCw3IEBAIEFDQ0VTU09SX0dFVFRFUihYTUxIdHRw
UmVxdWVzdFVwbG9hZE9ucHJvZ3Jlc3MpCiBBQ0NFU1NPUl9TRVRURVIoWE1MSHR0cFJlcXVlc3RV
cGxvYWRPbnByb2dyZXNzKQogewogICAgIElOQ19TVEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBs
b2FkLm9ucHJvZ3Jlc3MuX3NldCIpOwotICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRw
UmVxdWVzdFVwbG9hZCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVx
dWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgaW5mby5Ib2xk
ZXIoKSk7CisgICAgWE1MSHR0cFJlcXVlc3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0g
VjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+
KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJFUVVFU1RVUExPQUQsIGluZm8uSG9sZGVyKCkpOwogICAg
IGlmICh2YWx1ZS0+SXNOdWxsKCkpIHsKICAgICAgICAgaWYgKHhtbEh0dHBSZXF1ZXN0VXBsb2Fk
LT5vbnByb2dyZXNzKCkpIHsKICAgICAgICAgICAgIFY4T2JqZWN0RXZlbnRMaXN0ZW5lciogbGlz
dGVuZXIgPSBzdGF0aWNfY2FzdDxWOE9iamVjdEV2ZW50TGlzdGVuZXIqPih4bWxIdHRwUmVxdWVz
dFVwbG9hZC0+b25wcm9ncmVzcygpKTsKQEAgLTI0MSw3ICsyNDEsNyBAQCBBQ0NFU1NPUl9TRVRU
RVIoWE1MSHR0cFJlcXVlc3RVcGxvYWRPbnByb2dyZXNzKQogQ0FMTEJBQ0tfRlVOQ19ERUNMKFhN
TEh0dHBSZXF1ZXN0VXBsb2FkQWRkRXZlbnRMaXN0ZW5lcikKIHsKICAgICBJTkNfU1RBVFMoIkRP
TS5YTUxIdHRwUmVxdWVzdFVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCkiKTsKLSAgICBYTUxIdHRw
UmVxdWVzdFVwbG9hZCogeG1sSHR0cFJlcXVlc3RVcGxvYWQgPSBWOFByb3h5Ojpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJF
UVVFU1RVUExPQUQsIGFyZ3MuSG9sZGVyKCkpOworICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4
bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0
PFhNTEh0dHBSZXF1ZXN0VXBsb2FkPihWOENsYXNzSW5kZXg6OlhNTEhUVFBSRVFVRVNUVVBMT0FE
LCBhcmdzLkhvbGRlcigpKTsKIAogICAgIFhNTEh0dHBSZXF1ZXN0KiB4bWxIdHRwUmVxdWVzdCA9
IHhtbEh0dHBSZXF1ZXN0VXBsb2FkLT5hc3NvY2lhdGVkWE1MSHR0cFJlcXVlc3QoKTsKICAgICBW
OFByb3h5KiBwcm94eSA9IFY4UHJveHk6OnJldHJpZXZlKHhtbEh0dHBSZXF1ZXN0LT5zY3JpcHRF
eGVjdXRpb25Db250ZXh0KCkpOwpAQCAtMjYyLDcgKzI2Miw3IEBAIENBTExCQUNLX0ZVTkNfREVD
TChYTUxIdHRwUmVxdWVzdFVwbG9hZEFkZEV2ZW50TGlzdGVuZXIpCiBDQUxMQkFDS19GVU5DX0RF
Q0woWE1MSHR0cFJlcXVlc3RVcGxvYWRSZW1vdmVFdmVudExpc3RlbmVyKQogewogICAgIElOQ19T
VEFUUygiRE9NLlhNTEh0dHBSZXF1ZXN0VXBsb2FkLnJlbW92ZUV2ZW50TGlzdGVuZXIoKSIpOwot
ICAgIFhNTEh0dHBSZXF1ZXN0VXBsb2FkKiB4bWxIdHRwUmVxdWVzdFVwbG9hZCA9IFY4UHJveHk6
OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYTUxIdHRwUmVxdWVzdFVwbG9hZD4oVjhDbGFzc0luZGV4
OjpYTUxIVFRQUkVRVUVTVFVQTE9BRCwgYXJncy5Ib2xkZXIoKSk7CisgICAgWE1MSHR0cFJlcXVl
c3RVcGxvYWQqIHhtbEh0dHBSZXF1ZXN0VXBsb2FkID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9O
YXRpdmVPYmplY3Q8WE1MSHR0cFJlcXVlc3RVcGxvYWQ+KFY4Q2xhc3NJbmRleDo6WE1MSFRUUFJF
UVVFU1RVUExPQUQsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgWE1MSHR0cFJlcXVlc3QqIHhtbEh0
dHBSZXF1ZXN0ID0geG1sSHR0cFJlcXVlc3RVcGxvYWQtPmFzc29jaWF0ZWRYTUxIdHRwUmVxdWVz
dCgpOwogICAgIFY4UHJveHkqIHByb3h5ID0gVjhQcm94eTo6cmV0cmlldmUoeG1sSHR0cFJlcXVl
c3QtPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNzb3JDdXN0b20uY3BwIGIvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhYU0xUUHJvY2Vzc29yQ3VzdG9tLmNwcAppbmRleCBjNWM0MjEwLi40YWJh
NDAzIDEwMDY0NAotLS0gYS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFhTTFRQcm9jZXNz
b3JDdXN0b20uY3BwCisrKyBiL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4WFNMVFByb2Nl
c3NvckN1c3RvbS5jcHAKQEAgLTU4LDkgKzU4LDkgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhTTFRQ
cm9jZXNzb3JJbXBvcnRTdHlsZXNoZWV0KQogICAgIGlmICghVjhOb2RlOjpIYXNJbnN0YW5jZShh
cmdzWzBdKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsKIAotICAgIFhTTFRQcm9j
ZXNzb3IqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYU0xUUHJvY2Vzc29y
PihWOENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1IsIGFyZ3MuSG9sZGVyKCkpOworICAgIFhTTFRQ
cm9jZXNzb3IqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhTTFRQ
cm9jZXNzb3I+KFY4Q2xhc3NJbmRleDo6WFNMVFBST0NFU1NPUiwgYXJncy5Ib2xkZXIoKSk7CiAK
LSAgICBOb2RlKiBub2RlID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4o
YXJnc1swXSk7CisgICAgTm9kZSogbm9kZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBw
ZXJUb05vZGU8Tm9kZT4oYXJnc1swXSk7CiAgICAgaW1wLT5pbXBvcnRTdHlsZXNoZWV0KG5vZGUp
OwogICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiB9CkBAIC03MiwxMiArNzIsMTIgQEAgQ0FM
TEJBQ0tfRlVOQ19ERUNMKFhTTFRQcm9jZXNzb3JUcmFuc2Zvcm1Ub0ZyYWdtZW50KQogICAgIGlm
ICghVjhOb2RlOjpIYXNJbnN0YW5jZShhcmdzWzBdKSB8fCAhVjhEb2N1bWVudDo6SGFzSW5zdGFu
Y2UoYXJnc1sxXSkpCiAgICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBYU0xU
UHJvY2Vzc29yKiBpbXAgPSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WFNMVFByb2Nl
c3Nvcj4oVjhDbGFzc0luZGV4OjpYU0xUUFJPQ0VTU09SLCBhcmdzLkhvbGRlcigpKTsKKyAgICBY
U0xUUHJvY2Vzc29yKiBpbXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxY
U0xUUHJvY2Vzc29yPihWOENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1IsIGFyZ3MuSG9sZGVyKCkp
OwogCi0gICAgTm9kZSogc291cmNlID0gVjhQcm94eTo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
Tm9kZT4oYXJnc1swXSk7Ci0gICAgRG9jdW1lbnQqIG93bmVyID0gVjhQcm94eTo6Y29udmVydERP
TVdyYXBwZXJUb05vZGU8RG9jdW1lbnQ+KGFyZ3NbMV0pOworICAgIE5vZGUqIHNvdXJjZSA9IFY4
RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8Tm9kZT4oYXJnc1swXSk7CisgICAg
RG9jdW1lbnQqIG93bmVyID0gVjhET01XcmFwcGVyOjpjb252ZXJ0RE9NV3JhcHBlclRvTm9kZTxE
b2N1bWVudD4oYXJnc1sxXSk7CiAgICAgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IHJlc3VsdCA9
IGltcC0+dHJhbnNmb3JtVG9GcmFnbWVudChzb3VyY2UsIG93bmVyKTsKLSAgICByZXR1cm4gVjhQ
cm94eTo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5nZXQoKSk7CisgICAgcmV0dXJuIFY4
RE9NV3JhcHBlcjo6Y29udmVydE5vZGVUb1Y4T2JqZWN0KHJlc3VsdC5nZXQoKSk7CiB9CiAKIApA
QCAtODgsOSArODgsOSBAQCBDQUxMQkFDS19GVU5DX0RFQ0woWFNMVFByb2Nlc3NvclRyYW5zZm9y
bVRvRG9jdW1lbnQpCiAgICAgaWYgKCFWOE5vZGU6Okhhc0luc3RhbmNlKGFyZ3NbMF0pKQogICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgWFNMVFByb2Nlc3NvciogaW1wID0g
VjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhTTFRQcm9jZXNzb3I+KFY4Q2xhc3NJbmRl
eDo6WFNMVFBST0NFU1NPUiwgYXJncy5Ib2xkZXIoKSk7CisgICAgWFNMVFByb2Nlc3NvciogaW1w
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WFNMVFByb2Nlc3Nvcj4oVjhD
bGFzc0luZGV4OjpYU0xUUFJPQ0VTU09SLCBhcmdzLkhvbGRlcigpKTsKIAotICAgIE5vZGUqIHNv
dXJjZSA9IFY4UHJveHk6OmNvbnZlcnRET01XcmFwcGVyVG9Ob2RlPE5vZGU+KGFyZ3NbMF0pOwor
ICAgIE5vZGUqIHNvdXJjZSA9IFY4RE9NV3JhcHBlcjo6Y29udmVydERPTVdyYXBwZXJUb05vZGU8
Tm9kZT4oYXJnc1swXSk7CiAgICAgaWYgKCFzb3VyY2UpCiAgICAgICAgIHJldHVybiB2ODo6VW5k
ZWZpbmVkKCk7CiAKQEAgLTk4LDcgKzk4LDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhTTFRQcm9j
ZXNzb3JUcmFuc2Zvcm1Ub0RvY3VtZW50KQogICAgIGlmICghcmVzdWx0KQogICAgICAgICByZXR1
cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgcmV0dXJuIFY4UHJveHk6OmNvbnZlcnROb2RlVG9W
OE9iamVjdChyZXN1bHQuZ2V0KCkpOworICAgIHJldHVybiBWOERPTVdyYXBwZXI6OmNvbnZlcnRO
b2RlVG9WOE9iamVjdChyZXN1bHQuZ2V0KCkpOwogfQogCiAKQEAgLTEwOCw3ICsxMDgsNyBAQCBD
QUxMQkFDS19GVU5DX0RFQ0woWFNMVFByb2Nlc3NvclNldFBhcmFtZXRlcikKICAgICBpZiAoaXNV
bmRlZmluZWRPck51bGwoYXJnc1sxXSkgfHwgaXNVbmRlZmluZWRPck51bGwoYXJnc1syXSkpCiAg
ICAgICAgIHJldHVybiB2ODo6VW5kZWZpbmVkKCk7CiAKLSAgICBYU0xUUHJvY2Vzc29yKiBpbXAg
PSBWOFByb3h5Ojpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WFNMVFByb2Nlc3Nvcj4oVjhDbGFzc0lu
ZGV4OjpYU0xUUFJPQ0VTU09SLCBhcmdzLkhvbGRlcigpKTsKKyAgICBYU0xUUHJvY2Vzc29yKiBp
bXAgPSBWOERPTVdyYXBwZXI6OmNvbnZlcnRUb05hdGl2ZU9iamVjdDxYU0xUUHJvY2Vzc29yPihW
OENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1IsIGFyZ3MuSG9sZGVyKCkpOwogCiAgICAgU3RyaW5n
IG5hbWVzcGFjZVVSSSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzBdKTsKICAgICBTdHJpbmcgbG9j
YWxOYW1lID0gdG9XZWJDb3JlU3RyaW5nKGFyZ3NbMV0pOwpAQCAtMTI1LDcgKzEyNSw3IEBAIENB
TExCQUNLX0ZVTkNfREVDTChYU0xUUHJvY2Vzc29yR2V0UGFyYW1ldGVyKQogICAgIGlmIChpc1Vu
ZGVmaW5lZE9yTnVsbChhcmdzWzFdKSkKICAgICAgICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoKTsK
IAotICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4UHJveHk6OmNvbnZlcnRUb05hdGl2ZU9iamVj
dDxYU0xUUHJvY2Vzc29yPihWOENsYXNzSW5kZXg6OlhTTFRQUk9DRVNTT1IsIGFyZ3MuSG9sZGVy
KCkpOworICAgIFhTTFRQcm9jZXNzb3IqIGltcCA9IFY4RE9NV3JhcHBlcjo6Y29udmVydFRvTmF0
aXZlT2JqZWN0PFhTTFRQcm9jZXNzb3I+KFY4Q2xhc3NJbmRleDo6WFNMVFBST0NFU1NPUiwgYXJn
cy5Ib2xkZXIoKSk7CiAKICAgICBTdHJpbmcgbmFtZXNwYWNlVVJJID0gdG9XZWJDb3JlU3RyaW5n
KGFyZ3NbMF0pOwogICAgIFN0cmluZyBsb2NhbE5hbWUgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1sx
XSk7CkBAIC0xNDIsNyArMTQyLDcgQEAgQ0FMTEJBQ0tfRlVOQ19ERUNMKFhTTFRQcm9jZXNzb3JS
ZW1vdmVQYXJhbWV0ZXIpCiAgICAgaWYgKGlzVW5kZWZpbmVkT3JOdWxsKGFyZ3NbMV0pKQogICAg
ICAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOwogCi0gICAgWFNMVFByb2Nlc3NvciogaW1wID0g
VjhQcm94eTo6Y29udmVydFRvTmF0aXZlT2JqZWN0PFhTTFRQcm9jZXNzb3I+KFY4Q2xhc3NJbmRl
eDo6WFNMVFBST0NFU1NPUiwgYXJncy5Ib2xkZXIoKSk7CisgICAgWFNMVFByb2Nlc3NvciogaW1w
ID0gVjhET01XcmFwcGVyOjpjb252ZXJ0VG9OYXRpdmVPYmplY3Q8WFNMVFByb2Nlc3Nvcj4oVjhD
bGFzc0luZGV4OjpYU0xUUFJPQ0VTU09SLCBhcmdzLkhvbGRlcigpKTsKIAogICAgIFN0cmluZyBu
YW1lc3BhY2VVUkkgPSB0b1dlYkNvcmVTdHJpbmcoYXJnc1swXSk7CiAgICAgU3RyaW5nIGxvY2Fs
TmFtZSA9IHRvV2ViQ29yZVN0cmluZyhhcmdzWzFdKTs=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32506</attachid>
            <date>2009-07-09 00:54:30 -0700</date>
            <delta_ts>2009-07-10 05:37:22 -0700</delta_ts>
            <desc>[Qt] Frame initialization crash</desc>
            <filename>bug-27108-20090709095428.patch</filename>
            <type>text/plain</type>
            <size>2723</size>
            <attacher name="Simon Hausmann">hausmann</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAxMTU2OTBhLi40YWExYTk5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMDct
MDggIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjcxMDgKKworICAgICAgICBSZW1vdmUgZmFzdC9sb2FkZXIvZnJh
bWUtY3JlYXRpb24tcmVtb3ZhbC5odG1sIGZyb20gdGhlIHNraXAgbGlzdCwgaXQKKyAgICAgICAg
cGFzc2VzIG5vdy4KKworICAgICAgICAqIHBsYXRmb3JtL3F0L1NraXBwZWQ6CisKIDIwMDktMDct
MDggIFBpZXJyZSBkJ0hlcmJlbW9udCAgPHBkaGVyYmVtb250QGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBTaW1vbiBGcmFzZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9xdC9Ta2lwcGVkIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvU2tpcHBlZAppbmRleCAx
MjgxMjBmLi4xZjk0NTc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9Ta2lw
cGVkCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L1NraXBwZWQKQEAgLTUxNzksNyArNTE3
OSw2IEBAIGZhc3QvaW5saW5lLWJsb2NrLzAwNC5odG1sCiBmYXN0L2lubGluZS1ibG9jay8wMDUu
aHRtbAogZmFzdC9sb2FkZXIvY2FuY2VsLWxvYWQtZHVyaW5nLXBvcnQtYmxvY2stdGltZXIuaHRt
bAogZmFzdC9sb2FkZXIvZW1wdHktZW1iZWQtc3JjLWF0dHJpYnV0ZS5odG1sCi1mYXN0L2xvYWRl
ci9mcmFtZS1jcmVhdGlvbi1yZW1vdmFsLmh0bWwKIGZhc3QvbG9hZGVyL2phdmFzY3JpcHQtdXJs
LWhpZXJhcmNoaWNhbC1leGVjdXRpb24uaHRtbAogZmFzdC9sb2FkZXIvbWFpbi1kb2N1bWVudC11
cmwtZm9yLW5vbi1odHRwLWxvYWRzLmh0bWwKIGZhc3QvbG9hZGVyL251bGwtcmVxdWVzdC1hZnRl
ci13aWxsU2VuZFJlcXVlc3QuaHRtbApkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBi
L1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggMjJiMWNhYS4uODczYjA3MSAxMDA2NDQKLS0tIGEv
V2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTkgQEAKKzIwMDktMDctMDggIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0Lm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjcxMDgKKworICAgICAgICBGaXggY3Jh
c2ggd2hlbiBpbiBmcmFtZSB0cmVlIG9mIGEgbmV3IGZyYW1lIGJlZm9yZSB0aGUgbmV3IGZyYW1l
CisgICAgICAgIGhhcyBiZWVuIGluc3RhbGxlZCBpbiB0aGUgZnJhbWUgdHJlZSwgc2ltaWxhciB0
byByMzUwODguCisKKyAgICAgICAgQWZ0ZXIgY2FsbGluZyBGcmFtZTo6aW5pdCgpIHRoZSBmcmFt
ZSBpdCBtYXkgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAgICAgZnJhbWUgdHJlZSBh
Z2FpbiB0aHJvdWdoIEphdmFTY3JpcHQuIERldGVjdCB0aGlzIGJ5IGNoZWNraW5nIHRoZSBwYWdl
KCkKKyAgICAgICAgYWZ0ZXJ3YXJkcy4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0ZyYW1l
TG9hZGVyQ2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVMb2FkZXJDbGllbnRR
dDo6Y3JlYXRlRnJhbWUpOgorCiAyMDA5LTA3LTA4ICBQcmFkZWVwdG8gQmhhdHRhY2hhcnlhICA8
cHJhZGVlcHRvQGtkZS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQXJpeWEgSGlkYXlhdC4K
ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0
LmNwcCBiL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudFF0LmNwcApp
bmRleCBhNWM2ZTUyLi5iZDczZWU1IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBv
cnQvRnJhbWVMb2FkZXJDbGllbnRRdC5jcHAKKysrIGIvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50UXQuY3BwCkBAIC05NTgsNiArOTU4LDEyIEBAIFBhc3NSZWZQdHI8
RnJhbWU+IEZyYW1lTG9hZGVyQ2xpZW50UXQ6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nCiAgICAgZnJhbWVEYXRhLm1hcmdpbkhlaWdodCA9IG1hcmdpbkhlaWdodDsK
IAogICAgIFFXZWJGcmFtZSogd2ViRnJhbWUgPSBuZXcgUVdlYkZyYW1lKG1fd2ViRnJhbWUsICZm
cmFtZURhdGEpOworICAgIC8vIFRoZSBjcmVhdGlvbiBvZiB0aGUgZnJhbWUgbWF5IGhhdmUgcnVu
IGFyYml0cmFyeSBKYXZhU2NyaXB0IHRoYXQgcmVtb3ZlZCBpdCBmcm9tIHRoZSBwYWdlIGFscmVh
ZHkuCisgICAgaWYgKCF3ZWJGcmFtZS0+ZC0+ZnJhbWUtPnBhZ2UoKSkgeworICAgICAgICBkZWxl
dGUgd2ViRnJhbWU7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIGVtaXQgbV93ZWJG
cmFtZS0+cGFnZSgpLT5mcmFtZUNyZWF0ZWQod2ViRnJhbWUpOwogCiAgICAgUmVmUHRyPEZyYW1l
PiBjaGlsZEZyYW1lID0gYWRvcHRSZWYod2ViRnJhbWUtPmQtPmZyYW1lKTs=
</data>

          </attachment>
      

    </bug>

</bugzilla>