<?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>32184</bug_id>
          
          <creation_ts>2009-12-05 15:42:09 -0800</creation_ts>
          <short_desc>Handle out-of-memory conditions with JSC Ropes with a JS exception, rather than crashing.</short_desc>
          <delta_ts>2009-12-07 15:16:20 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>169048</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-05 15:42:09 -0800</bug_when>
    <thetext>Switch from using fastMalloc to tryFastMalloc, pass an ExecState to record the exception on.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169050</commentid>
    <comment_count>1</comment_count>
      <attachid>44351</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-05 15:44:29 -0800</bug_when>
    <thetext>Created attachment 44351
The Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169051</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-05 15:46:59 -0800</bug_when>
    <thetext>Attachment 44351 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/jit/JITStubs.cpp:2464:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/runtime/PropertyDescriptor.cpp:162:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
JavaScriptCore/runtime/PropertyDescriptor.cpp:163:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
JavaScriptCore/runtime/PropertyDescriptor.cpp:164:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169068</commentid>
    <comment_count>3</comment_count>
      <attachid>44351</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-05 22:49:41 -0800</bug_when>
    <thetext>Comment on attachment 44351
The Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169441</commentid>
    <comment_count>4</comment_count>
      <attachid>44427</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-07 13:09:50 -0800</bug_when>
    <thetext>Created attachment 44427
Oooops, with required webcore/webkit changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169442</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-07 13:11:08 -0800</bug_when>
    <thetext>Attachment 44427 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
JavaScriptCore/jit/JITStubs.cpp:2438:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
JavaScriptCore/runtime/PropertyDescriptor.cpp:162:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
JavaScriptCore/runtime/PropertyDescriptor.cpp:163:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
JavaScriptCore/runtime/PropertyDescriptor.cpp:164:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 4</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169445</commentid>
    <comment_count>6</comment_count>
      <attachid>44427</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-12-07 13:14:40 -0800</bug_when>
    <thetext>Comment on attachment 44427
Oooops, with required webcore/webkit changes.

bool getString(ScriptState* scriptState, String&amp; result) const; (in ScriptValue.h)
&apos;scriptState&apos; name should be removed

Otherwise, r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169497</commentid>
    <comment_count>7</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-12-07 15:16:20 -0800</bug_when>
    <thetext>Transmitting file data ..........................................
Committed revision 51801.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44351</attachid>
            <date>2009-12-05 15:44:29 -0800</date>
            <delta_ts>2009-12-07 13:09:50 -0800</delta_ts>
            <desc>The Patch</desc>
            <filename>patch.tryrope.txt</filename>
            <type>text/plain</type>
            <size>58636</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUxNzMwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMDktMTItMDUgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMjE4NAorICAgICAgICBIYW5kbGUgb3V0LW9mLW1lbW9yeSBjb25kaXRpb25z
IHdpdGggSlNDIFJvcGVzIHdpdGggYSBKUyBleGNlcHRpb24sIHJhdGhlciB0aGFuIGNyYXNoaW5n
LgorICAgICAgICBTd2l0Y2ggZnJvbSB1c2luZyBmYXN0TWFsbG9jIHRvIHRyeUZhc3RNYWxsb2Ms
IHBhc3MgYW4gRXhlY1N0YXRlIHRvIHJlY29yZCB0aGUgZXhjZXB0aW9uIG9uLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Ojp0b1N0
cmluZyk6CisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNWYWx1ZUlz
U3RyaWN0RXF1YWwpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEVxdWFsaXR5T3ApOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2Vy
Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmZ1bmN0aW9u
TmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpjYWxjdWxhdGVkRnVuY3Rp
b25OYW1lKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAg
KEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlR2VuZXJhdG9yOjphZGRQYXJlbnRG
b3JDb25zb2xlU3RhcnQpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZXI6OndpbGxFeGVjdXRlKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6
OmRpZEV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZp
ZXIpOgorICAgICAgICAoSlNDOjpjcmVhdGVDYWxsSWRlbnRpZmllckZyb21GdW5jdGlvbkltcCk6
CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0FycmF5
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNJbmRleE9mKToKKyAg
ICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAgICAgICogcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3REYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVu
Y3Rpb25Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9JbnRlcm5hbEZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6bmFtZSk6CisgICAgICAg
IChKU0M6OkludGVybmFsRnVuY3Rpb246OmRpc3BsYXlOYW1lKToKKyAgICAgICAgKEpTQzo6SW50
ZXJuYWxGdW5jdGlvbjo6Y2FsY3VsYXRlZERpc3BsYXlOYW1lKToKKyAgICAgICAgKiBydW50aW1l
L0ludGVybmFsRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5o
OgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpnZXRTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmdhcCk6CisgICAgICAgIChKU0M6OlN0cmlu
Z2lmaWVyOjpTdHJpbmdpZmllcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjphcHBlbmRT
dHJpbmdpZmllZFZhbHVlKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmpl
Y3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpnZXQpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Um9wZTo6flJvcGUpOgor
ICAgICAgICAoSlNDOjpKU1N0cmluZzo6cmVzb2x2ZVJvcGUpOgorICAgICAgICAoSlNDOjpKU1N0
cmluZzo6Z2V0UHJpbWl0aXZlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
SlNTdHJpbmc6OnRvVGhpc1N0cmluZyk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRTdHJp
bmdQcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAg
ICAgICAgKEpTQzo6SlNTdHJpbmc6OlJvcGU6OmNyZWF0ZU9yTnVsbCk6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nOjpSb3BlOjpvcGVyYXRvciBuZXcpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6
dmFsdWUpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dHJ5R2V0VmFsdWUpOgorICAgICAgICAo
SlNDOjpKU1N0cmluZzo6Z2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Z2V0U3Ry
aW5nUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9TdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5h
dGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnN0cmljdEVxdWFsU2xvd0Nhc2UpOgorICAgICAgICAq
IHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjplcXVhbFNsb3dD
YXNlSW5saW5lKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6c3RyaWN0RXF1YWxTbG93Q2FzZUlu
bGluZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnN0cmljdEVxdWFsKToKKyAgICAgICAgKEpT
Qzo6anNMZXNzKToKKyAgICAgICAgKEpTQzo6anNMZXNzRXEpOgorICAgICAgICAoSlNDOjpqc0Fk
ZCk6CisgICAgICAgIChKU0M6OmNvbmNhdGVuYXRlU3RyaW5ncyk6CisgICAgICAgICogcnVudGlt
ZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3I6OmVxdWFsVG8pOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmg6Cisg
ICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9Mb3dl
ckNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZSk6CisKIDIw
MDktMTItMDQgIEtlbnQgSGFuc2VuICA8a2VudC5oYW5zZW5Abm9raWEuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNiBAQCBfX1pOM0pTQzE1SlNXcmFwcGVyT2Jq
ZWN0MTJtYXJrQ2hpbGRyZW5FCiBfX1pOM0pTQzE1Y3JlYXRlVHlwZUVycm9yRVBOU185RXhlY1N0
YXRlRVBLYwogX19aTjNKU0MxNXRvSW50MzJTbG93Q2FzZUVkUmIKIF9fWk4zSlNDMTZJbnRlcm5h
bEZ1bmN0aW9uNGluZm9FCi1fX1pOM0pTQzE2SW50ZXJuYWxGdW5jdGlvbjRuYW1lRVBOU18xMkpT
R2xvYmFsRGF0YUUKIF9fWk4zSlNDMTZJbnRlcm5hbEZ1bmN0aW9uQzJFUE5TXzEySlNHbG9iYWxE
YXRhRU4zV1RGMTdOb25OdWxsUGFzc1JlZlB0cklOU185U3RydWN0dXJlRUVFUktOU18xMElkZW50
aWZpZXJFCiBfX1pOM0pTQzE2SlNWYXJpYWJsZU9iamVjdDE0ZGVsZXRlUHJvcGVydHlFUE5TXzlF
eGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCiBfX1pOM0pTQzE2SlNWYXJpYWJsZU9iamVjdDE0
c3ltYm9sVGFibGVHZXRFUktOU18xMElkZW50aWZpZXJFUk5TXzE4UHJvcGVydHlEZXNjcmlwdG9y
RQpAQCAtMzc3LDggKzM3Niw2IEBAIF9fWk5LM0pTQzZKU0NlbGw4dG9OdW1iZXJFUE5TXzlFeGVj
U3RhdGUKIF9fWk5LM0pTQzZKU0NlbGw4dG9PYmplY3RFUE5TXzlFeGVjU3RhdGVFCiBfX1pOSzNK
U0M2SlNDZWxsOHRvU3RyaW5nRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDNkpTQ2VsbDljbGFz
c0luZm9FdgotX19aTkszSlNDNkpTQ2VsbDlnZXRTdHJpbmdFUk5TXzdVU3RyaW5nRQotX19aTksz
SlNDNkpTQ2VsbDlnZXRTdHJpbmdFdgogX19aTkszSlNDNkpTQ2VsbDlnZXRVSW50MzJFUmoKIF9f
Wk5LM0pTQzZKU0NlbGw5dG9Cb29sZWFuRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDN0FyZ0xp
c3Q4Z2V0U2xpY2VFaVJTMF8KQEAgLTQwMyw3ICs0MDAsNyBAQCBfX1pOSzNKU0M4SlNPYmplY3Q4
dG9PYmplY3RFUE5TXzlFeGVjU3RhCiBfX1pOSzNKU0M4SlNPYmplY3Q4dG9TdHJpbmdFUE5TXzlF
eGVjU3RhdGVFCiBfX1pOSzNKU0M4SlNPYmplY3Q5Y2xhc3NOYW1lRXYKIF9fWk5LM0pTQzhKU09i
amVjdDl0b0Jvb2xlYW5FUE5TXzlFeGVjU3RhdGVFCi1fX1pOSzNKU0M4SlNTdHJpbmcxMXJlc29s
dmVSb3BlRXYKK19fWk5LM0pTQzhKU1N0cmluZzExcmVzb2x2ZVJvcGVFUE5TXzlFeGVjU3RhdGVF
CiBfX1pOSzNKU0M5SGFzaFRhYmxlMTFjcmVhdGVUYWJsZUVQTlNfMTJKU0dsb2JhbERhdGFFCiBf
X1pOSzNKU0M5SGFzaFRhYmxlMTFkZWxldGVUYWJsZUV2CiBfX1pOSzNXVEY4Q29sbGF0b3I3Y29s
bGF0ZUVQS3RtUzJfbQpJbmRleDogSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RG
dW5jdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09i
amVjdEZ1bmN0aW9ucy5oCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3JpcHRDb3JlL0FQSS9K
U0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2Nyw3ICs0Njcs
NyBAQCBVU3RyaW5nIEpTQ2FsbGJhY2tPYmplY3Q8QmFzZT46OnRvU3RyaW5nCiAgICAgICAgICAg
ICAgICAgcmV0dXJuICIiOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHZhbHVlKQot
ICAgICAgICAgICAgICAgIHJldHVybiB0b0pTKGV4ZWMsIHZhbHVlKS5nZXRTdHJpbmcoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdG9KUyhleGVjLCB2YWx1ZSkuZ2V0U3RyaW5nKGV4ZWMpOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKICAgICByZXR1cm4gQmFzZTo6dG9TdHJpbmcoZXhlYyk7
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1ZVJlZi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVSZWYuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEph
dmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY5LDcg
KzE2OSw3IEBAIGJvb2wgSlNWYWx1ZUlzU3RyaWN0RXF1YWwoSlNDb250ZXh0UmVmIGMKICAgICBK
U1ZhbHVlIGpzQSA9IHRvSlMoZXhlYywgYSk7CiAgICAgSlNWYWx1ZSBqc0IgPSB0b0pTKGV4ZWMs
IGIpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OnN0cmljdEVxdWFsKGpzQSwganNCKTsKKyAgICBy
ZXR1cm4gSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywganNBLCBqc0IpOwogfQogCiBib29sIEpT
VmFsdWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3RvcihKU0NvbnRleHRSZWYgY3R4LCBKU1ZhbHVlUmVm
IHZhbHVlLCBKU09iamVjdFJlZiBjb25zdHJ1Y3RvciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQpJ
bmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwNiw3ICs5MDYsNyBAQCBS
ZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVxdWFsCiAgICAgICAgICAgICAmJiBz
cmMxLT5pc1RlbXBvcmFyeSgpCiAgICAgICAgICAgICAmJiBtX2NvZGVCbG9jay0+aXNDb25zdGFu
dFJlZ2lzdGVySW5kZXgoc3JjMi0+aW5kZXgoKSkKICAgICAgICAgICAgICYmIG1fY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmpzVmFsdWUoKS5pc1N0cmluZygpKSB7
Ci0gICAgICAgICAgICBjb25zdCBVU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2Nr
LT5jb25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmpzVmFsdWUoKSktPnZhbHVlKCk7Cisg
ICAgICAgICAgICBjb25zdCBVU3RyaW5nJiB2YWx1ZSA9IGFzU3RyaW5nKG1fY29kZUJsb2NrLT5j
b25zdGFudFJlZ2lzdGVyKHNyYzItPmluZGV4KCkpLmpzVmFsdWUoKSktPnRyeUdldFZhbHVlKCk7
CiAgICAgICAgICAgICBpZiAodmFsdWUgPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgICAg
ICByZXdpbmRVbmFyeU9wKCk7CiAgICAgICAgICAgICAgICAgZW1pdE9wY29kZShvcF9pc191bmRl
ZmluZWQpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZy
YW1lLmNwcAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1
Z2dlckNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDcgQEAgY29uc3Qg
VVN0cmluZyogRGVidWdnZXJDYWxsRnJhbWU6OmZ1bmN0aQogICAgIEpTRnVuY3Rpb24qIGZ1bmN0
aW9uID0gYXNGdW5jdGlvbihtX2NhbGxGcmFtZS0+Y2FsbGVlKCkpOwogICAgIGlmICghZnVuY3Rp
b24pCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiAmZnVuY3Rpb24tPm5hbWUoJm1fY2Fs
bEZyYW1lLT5nbG9iYWxEYXRhKCkpOworICAgIHJldHVybiAmZnVuY3Rpb24tPm5hbWUobV9jYWxs
RnJhbWUpOwogfQogICAgIAogVVN0cmluZyBEZWJ1Z2dlckNhbGxGcmFtZTo6Y2FsY3VsYXRlZEZ1
bmN0aW9uTmFtZSgpIGNvbnN0CkBAIC01NSw3ICs1NSw3IEBAIFVTdHJpbmcgRGVidWdnZXJDYWxs
RnJhbWU6OmNhbGN1bGF0ZWRGdW4KICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGFzRnVuY3Rp
b24obV9jYWxsRnJhbWUtPmNhbGxlZSgpKTsKICAgICBpZiAoIWZ1bmN0aW9uKQogICAgICAgICBy
ZXR1cm4gMDsKLSAgICByZXR1cm4gZnVuY3Rpb24tPmNhbGN1bGF0ZWREaXNwbGF5TmFtZSgmbV9j
YWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uLT5jYWxjdWxhdGVk
RGlzcGxheU5hbWUobV9jYWxsRnJhbWUpOwogfQogCiBEZWJ1Z2dlckNhbGxGcmFtZTo6VHlwZSBE
ZWJ1Z2dlckNhbGxGcmFtZTo6dHlwZSgpIGNvbnN0CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRl
cnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAwLDcg
KzMwMCw3IEBAIE5FVkVSX0lOTElORSBKU1ZhbHVlIEludGVycHJldGVyOjpjYWxsRXYKICAgICBp
ZiAoIXByb2dyYW0uaXNTdHJpbmcoKSkKICAgICAgICAgcmV0dXJuIHByb2dyYW07CiAKLSAgICBV
U3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBhc1N0cmluZyhwcm9ncmFtKS0+dmFsdWUoKTsKKyAgICBV
U3RyaW5nIHByb2dyYW1Tb3VyY2UgPSBhc1N0cmluZyhwcm9ncmFtKS0+dmFsdWUoY2FsbEZyYW1l
KTsKIAogICAgIExpdGVyYWxQYXJzZXIgcHJlcGFyc2VyKGNhbGxGcmFtZSwgcHJvZ3JhbVNvdXJj
ZSwgTGl0ZXJhbFBhcnNlcjo6Tm9uU3RyaWN0SlNPTik7CiAgICAgaWYgKEpTVmFsdWUgcGFyc2Vk
T2JqZWN0ID0gcHJlcGFyc2VyLnRyeUxpdGVyYWxQYXJzZSgpKQpAQCAtMTMwNiw3ICsxMzA2LDcg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICBpbnQg
ZHN0ID0gdlBDWzFdLnUub3BlcmFuZDsKICAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1l
LT5yKHZQQ1syXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKICAgICAgICAgSlNWYWx1ZSBzcmMyID0g
Y2FsbEZyYW1lLT5yKHZQQ1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgY2FsbEZy
YW1lLT5yKGRzdCkgPSBqc0Jvb2xlYW4oSlNWYWx1ZTo6c3RyaWN0RXF1YWwoc3JjMSwgc3JjMikp
OworICAgICAgICBjYWxsRnJhbWUtPnIoZHN0KSA9IGpzQm9vbGVhbihKU1ZhbHVlOjpzdHJpY3RF
cXVhbChjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKIAogICAgICAgICB2UEMgKz0gT1BDT0RFX0xF
TkdUSChvcF9zdHJpY3RlcSk7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTEzMjEs
NyArMTMyMSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAg
ICAgICAgaW50IGRzdCA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAgICAgICAgIEpTVmFsdWUgc3JjMSA9
IGNhbGxGcmFtZS0+cih2UENbMl0udS5vcGVyYW5kKS5qc1ZhbHVlKCk7CiAgICAgICAgIEpTVmFs
dWUgc3JjMiA9IGNhbGxGcmFtZS0+cih2UENbM10udS5vcGVyYW5kKS5qc1ZhbHVlKCk7Ci0gICAg
ICAgIGNhbGxGcmFtZS0+cihkc3QpID0ganNCb29sZWFuKCFKU1ZhbHVlOjpzdHJpY3RFcXVhbChz
cmMxLCBzcmMyKSk7CisgICAgICAgIGNhbGxGcmFtZS0+cihkc3QpID0ganNCb29sZWFuKCFKU1Zh
bHVlOjpzdHJpY3RFcXVhbChjYWxsRnJhbWUsIHNyYzEsIHNyYzIpKTsKIAogICAgICAgICB2UEMg
Kz0gT1BDT0RFX0xFTkdUSChvcF9uc3RyaWN0ZXEpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9O
KCk7CkBAIC0yNDc5LDcgKzI0NzksNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhl
Y3V0ZShFeGVjCiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXN1
bHQgPSBqc0FycmF5LT5KU0FycmF5OjpnZXQoY2FsbEZyYW1lLCBpKTsKICAgICAgICAgICAgIH0g
ZWxzZSBpZiAoaXNKU1N0cmluZyhnbG9iYWxEYXRhLCBiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJh
c2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKQotICAgICAgICAgICAgICAgIHJlc3VsdCA9IGFzU3Ry
aW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KCZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKSwgaSk7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgoY2Fs
bEZyYW1lLCBpKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGlzSlNCeXRlQXJyYXkoZ2xvYmFsRGF0
YSwgYmFzZVZhbHVlKSAmJiBhc0J5dGVBcnJheShiYXNlVmFsdWUpLT5jYW5BY2Nlc3NJbmRleChp
KSkKICAgICAgICAgICAgICAgICByZXN1bHQgPSBhc0J5dGVBcnJheShiYXNlVmFsdWUpLT5nZXRJ
bmRleChjYWxsRnJhbWUsIGkpOwogICAgICAgICAgICAgZWxzZQpAQCAtMjg3Miw3ICsyODcyLDcg
QEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICBpZiAo
IXNjcnV0aW5lZS5pc1N0cmluZygpKQogICAgICAgICAgICAgdlBDICs9IGRlZmF1bHRPZmZzZXQ7
CiAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgVVN0cmluZzo6UmVwKiB2YWx1ZSA9IGFzU3Ry
aW5nKHNjcnV0aW5lZSktPnZhbHVlKCkucmVwKCk7CisgICAgICAgICAgICBVU3RyaW5nOjpSZXAq
IHZhbHVlID0gYXNTdHJpbmcoc2NydXRpbmVlKS0+dmFsdWUoY2FsbEZyYW1lKS5yZXAoKTsKICAg
ICAgICAgICAgIGlmICh2YWx1ZS0+c2l6ZSgpICE9IDEpCiAgICAgICAgICAgICAgICAgdlBDICs9
IGRlZmF1bHRPZmZzZXQ7CiAgICAgICAgICAgICBlbHNlCkBAIC0yODk1LDcgKzI4OTUsNyBAQCBK
U1ZhbHVlIEludGVycHJldGVyOjpwcml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgIGlmICghc2Ny
dXRpbmVlLmlzU3RyaW5nKCkpCiAgICAgICAgICAgICB2UEMgKz0gZGVmYXVsdE9mZnNldDsKICAg
ICAgICAgZWxzZSAKLSAgICAgICAgICAgIHZQQyArPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpLT5z
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkub2Zmc2V0Rm9yVmFsdWUoYXNTdHJpbmco
c2NydXRpbmVlKS0+dmFsdWUoKS5yZXAoKSwgZGVmYXVsdE9mZnNldCk7CisgICAgICAgICAgICB2
UEMgKz0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKS0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpLm9mZnNldEZvclZhbHVlKGFzU3RyaW5nKHNjcnV0aW5lZSktPnZhbHVlKGNhbGxGcmFt
ZSkucmVwKCksIGRlZmF1bHRPZmZzZXQpOwogICAgICAgICBORVhUX0lOU1RSVUNUSU9OKCk7CiAg
ICAgfQogICAgIERFRklORV9PUENPREUob3BfbmV3X2Z1bmMpIHsKQEAgLTM0ODgsNiArMzQ4OCw3
IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAgICAgaW50
IGNvdW50ID0gdlBDWzNdLnUub3BlcmFuZDsKIAogICAgICAgICBjYWxsRnJhbWUtPnIoZHN0KSA9
IGNvbmNhdGVuYXRlU3RyaW5ncyhjYWxsRnJhbWUsICZjYWxsRnJhbWUtPnJlZ2lzdGVycygpW3Ny
Y10sIGNvdW50KTsKKyAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwogICAgICAgICB2UEMg
Kz0gT1BDT0RFX0xFTkdUSChvcF9zdHJjYXQpOwogCiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ0LDE0ICsx
MDQ0LDE4IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICBi
b29sIGxlZnRJc1N0cmluZyA9IHYxLmlzU3RyaW5nKCk7CiAgICAgaWYgKGxlZnRJc1N0cmluZyAm
JiB2Mi5pc1N0cmluZygpKSB7CiAgICAgICAgIGlmIChhc1N0cmluZyh2MSktPmlzUm9wZSgpIHx8
IGFzU3RyaW5nKHYyKS0+aXNSb3BlKCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxKU1N0cmluZzo6
Um9wZT4gcm9wZSA9IEpTU3RyaW5nOjpSb3BlOjpjcmVhdGUoMik7CisgICAgICAgICAgICBSZWZQ
dHI8SlNTdHJpbmc6OlJvcGU+IHJvcGUgPSBKU1N0cmluZzo6Um9wZTo6Y3JlYXRlT3JOdWxsKDIp
OworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFyb3BlKSkgeworICAgICAgICAgICAgICAgIHRo
cm93T3V0T2ZNZW1vcnlFcnJvcihjYWxsRnJhbWUpOworICAgICAgICAgICAgICAgIFZNX1RIUk9X
X0VYQ0VQVElPTigpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgcm9wZS0+aW5pdGlhbGl6
ZUZpYmVyKDAsIGFzU3RyaW5nKHYxKSk7CiAgICAgICAgICAgICByb3BlLT5pbml0aWFsaXplRmli
ZXIoMSwgYXNTdHJpbmcodjIpKTsKICAgICAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUobmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlLnJlbGVh
c2UoKSkpOwogICAgICAgICB9CiAKLSAgICAgICAgUmVmUHRyPFVTdHJpbmc6OlJlcD4gdmFsdWUg
PSBjb25jYXRlbmF0ZShhc1N0cmluZyh2MSktPnZhbHVlKCkucmVwKCksIGFzU3RyaW5nKHYyKS0+
dmFsdWUoKS5yZXAoKSk7CisgICAgICAgIFJlZlB0cjxVU3RyaW5nOjpSZXA+IHZhbHVlID0gY29u
Y2F0ZW5hdGUoYXNTdHJpbmcodjEpLT52YWx1ZShjYWxsRnJhbWUpLnJlcCgpLCBhc1N0cmluZyh2
MiktPnZhbHVlKGNhbGxGcmFtZSkucmVwKCkpOwogICAgICAgICBpZiAoVU5MSUtFTFkoIXZhbHVl
KSkgewogICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxGcmFtZSk7CiAgICAg
ICAgICAgICBWTV9USFJPV19FWENFUFRJT04oKTsKQEAgLTEwNjIsOCArMTA2Niw4IEBAIERFRklO
RV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIAogICAgIGlmIChyaWdodElzTnVt
YmVyICYgbGVmdElzU3RyaW5nKSB7CiAgICAgICAgIFJlZlB0cjxVU3RyaW5nOjpSZXA+IHZhbHVl
ID0gdjIuaXNJbnQzMigpID8KLSAgICAgICAgICAgIGNvbmNhdGVuYXRlKGFzU3RyaW5nKHYxKS0+
dmFsdWUoKS5yZXAoKSwgdjIuYXNJbnQzMigpKSA6Ci0gICAgICAgICAgICBjb25jYXRlbmF0ZShh
c1N0cmluZyh2MSktPnZhbHVlKCkucmVwKCksIHJpZ2h0KTsKKyAgICAgICAgICAgIGNvbmNhdGVu
YXRlKGFzU3RyaW5nKHYxKS0+dmFsdWUoY2FsbEZyYW1lKS5yZXAoKSwgdjIuYXNJbnQzMigpKSA6
CisgICAgICAgICAgICBjb25jYXRlbmF0ZShhc1N0cmluZyh2MSktPnZhbHVlKGNhbGxGcmFtZSku
cmVwKCksIHJpZ2h0KTsKIAogICAgICAgICBpZiAoVU5MSUtFTFkoIXZhbHVlKSkgewogICAgICAg
ICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxGcmFtZSk7CkBAIC0xOTAxLDcgKzE5MDUs
NyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgICAgIH0g
ZWxzZSBpZiAoaXNKU1N0cmluZyhnbG9iYWxEYXRhLCBiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJh
c2VWYWx1ZSktPmNhbkdldEluZGV4KGkpKSB7CiAgICAgICAgICAgICAvLyBBbGwgZmFzdCBieXRl
IGFycmF5IGFjY2Vzc2VzIGFyZSBzYWZlIGZyb20gZXhjZXB0aW9ucyBzbyByZXR1cm4gaW1tZWRp
YXRlbHkgdG8gYXZvaWQgZXhjZXB0aW9uIGNoZWNrcy4KICAgICAgICAgICAgIGN0aVBhdGNoQ2Fs
bEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBTVFVCX1JFVFVSTl9BRERS
RVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9zdHJpbmcpKTsKLSAgICAgICAgICAg
IHJlc3VsdCA9IGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KHN0YWNrRnJhbWUuZ2xvYmFs
RGF0YSwgaSk7CisgICAgICAgICAgICByZXN1bHQgPSBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJ
bmRleChjYWxsRnJhbWUsIGkpOwogICAgICAgICB9IGVsc2UgaWYgKGlzSlNCeXRlQXJyYXkoZ2xv
YmFsRGF0YSwgYmFzZVZhbHVlKSAmJiBhc0J5dGVBcnJheShiYXNlVmFsdWUpLT5jYW5BY2Nlc3NJ
bmRleChpKSkgewogICAgICAgICAgICAgLy8gQWxsIGZhc3QgYnl0ZSBhcnJheSBhY2Nlc3NlcyBh
cmUgc2FmZSBmcm9tIGV4Y2VwdGlvbnMgc28gcmV0dXJuIGltbWVkaWF0ZWx5IHRvIGF2b2lkIGV4
Y2VwdGlvbiBjaGVja3MuCiAgICAgICAgICAgICBjdGlQYXRjaENhbGxCeVJldHVybkFkZHJlc3Mo
Y2FsbEZyYW1lLT5jb2RlQmxvY2soKSwgU1RVQl9SRVRVUk5fQUREUkVTUywgRnVuY3Rpb25QdHIo
Y3RpX29wX2dldF9ieV92YWxfYnl0ZV9hcnJheSkpOwpAQCAtMTkzMiw3ICsxOTM2LDcgQEAgREVG
SU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIGlmIChMSUtFTFkoc3Vi
c2NyaXB0LmlzVUludDMyKCkpKSB7CiAgICAgICAgIHVpbnQzMl90IGkgPSBzdWJzY3JpcHQuYXNV
SW50MzIoKTsKICAgICAgICAgaWYgKGlzSlNTdHJpbmcoZ2xvYmFsRGF0YSwgYmFzZVZhbHVlKSAm
JiBhc1N0cmluZyhiYXNlVmFsdWUpLT5jYW5HZXRJbmRleChpKSkKLSAgICAgICAgICAgIHJlc3Vs
dCA9IGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KHN0YWNrRnJhbWUuZ2xvYmFsRGF0YSwg
aSk7CisgICAgICAgICAgICByZXN1bHQgPSBhc1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChj
YWxsRnJhbWUsIGkpOwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIHJlc3VsdCA9IGJhc2VW
YWx1ZS5nZXQoY2FsbEZyYW1lLCBpKTsKICAgICAgICAgICAgIGlmICghaXNKU1N0cmluZyhnbG9i
YWxEYXRhLCBiYXNlVmFsdWUpKQpAQCAtMjQ0OCwyMCArMjQ1MiwyMCBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTihpbnQsIG9wX2VxKQogCiAgICAgaWYgKGNlbGwxLT5pc1N0cmluZygpKSB7CiAgICAg
ICAgIGlmIChzcmMyLmlzSW50MzIoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxK
U1N0cmluZyo+KGNlbGwxKS0+dmFsdWUoKS50b0RvdWJsZSgpID09IHNyYzIuYXNJbnQzMigpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oY2VsbDEpLT52YWx1ZShz
dGFja0ZyYW1lLmNhbGxGcmFtZSkudG9Eb3VibGUoKSA9PSBzcmMyLmFzSW50MzIoKTsKICAgICAg
ICAgICAgIAogICAgICAgICBpZiAoc3JjMi5pc0RvdWJsZSgpKQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oY2VsbDEpLT52YWx1ZSgpLnRvRG91YmxlKCkgPT0gc3Jj
Mi5hc0RvdWJsZSgpOworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4o
Y2VsbDEpLT52YWx1ZShzdGFja0ZyYW1lLmNhbGxGcmFtZSkudG9Eb3VibGUoKSA9PSBzcmMyLmFz
RG91YmxlKCk7CiAKICAgICAgICAgaWYgKHNyYzIuaXNUcnVlKCkpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihjZWxsMSktPnZhbHVlKCkudG9Eb3VibGUoKSA9PSAx
LjA7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihjZWxsMSktPnZh
bHVlKHN0YWNrRnJhbWUuY2FsbEZyYW1lKS50b0RvdWJsZSgpID09IDEuMDsKIAogICAgICAgICBp
ZiAoc3JjMi5pc0ZhbHNlKCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJp
bmcqPihjZWxsMSktPnZhbHVlKCkudG9Eb3VibGUoKSA9PSAwLjA7CisgICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihjZWxsMSktPnZhbHVlKHN0YWNrRnJhbWUuY2FsbEZy
YW1lKS50b0RvdWJsZSgpID09IDAuMDsKIAogICAgICAgICBKU0NlbGwqIGNlbGwyID0gYXNDZWxs
KHNyYzIpOwogICAgICAgICBpZiAoY2VsbDItPmlzU3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihjZWxsMSktPnZhbHVlKCkgPT0gc3RhdGljX2Nhc3Q8
SlNTdHJpbmcqPihjZWxsMiktPnZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8SlNTdHJpbmcqPihjZWxsMSktPnZhbHVlKHN0YWNrRnJhbWUuY2FsbEZyYW1lKSA9PSBzdGF0
aWNfY2FzdDxKU1N0cmluZyo+KGNlbGwyKS0+dmFsdWUoc3RhY2tGcmFtZS5jYWxsRnJhbWUpOwog
CiAgICAgICAgIHNyYzIgPSBhc09iamVjdChjZWxsMiktPnRvUHJpbWl0aXZlKHN0YWNrRnJhbWUu
Y2FsbEZyYW1lKTsKICAgICAgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTigpOwpAQCAtMjQ4NCw3ICsy
NDg4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oaW50LCBvcF9lcV9zdHJpbmdzKQogCiAgICAg
QVNTRVJUKHN0cmluZzEtPmlzU3RyaW5nKCkpOwogICAgIEFTU0VSVChzdHJpbmcyLT5pc1N0cmlu
ZygpKTsKLSAgICByZXR1cm4gc3RyaW5nMS0+dmFsdWUoKSA9PSBzdHJpbmcyLT52YWx1ZSgpOwor
ICAgIHJldHVybiBzdHJpbmcxLT52YWx1ZShzdGFja0ZyYW1lLmNhbGxGcmFtZSkgPT0gc3RyaW5n
Mi0+dmFsdWUoc3RhY2tGcmFtZS5jYWxsRnJhbWUpOwogfQogCiAjZWxzZSAvLyBVU0UoSlNWQUxV
RTMyXzY0KQpAQCAtMjc4Miw3ICsyNzg2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oaW50LCBo
YXNfcHJvcGVydHkpCiAKICAgICBKU09iamVjdCogYmFzZSA9IHN0YWNrRnJhbWUuYXJnc1swXS5q
c09iamVjdCgpOwogICAgIEpTU3RyaW5nKiBwcm9wZXJ0eSA9IHN0YWNrRnJhbWUuYXJnc1sxXS5q
c1N0cmluZygpOwotICAgIHJldHVybiBiYXNlLT5oYXNQcm9wZXJ0eShzdGFja0ZyYW1lLmNhbGxG
cmFtZSwgSWRlbnRpZmllcihzdGFja0ZyYW1lLmNhbGxGcmFtZSwgcHJvcGVydHktPnZhbHVlKCkp
KTsKKyAgICByZXR1cm4gYmFzZS0+aGFzUHJvcGVydHkoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIElk
ZW50aWZpZXIoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHByb3BlcnR5LT52YWx1ZShzdGFja0ZyYW1l
LmNhbGxGcmFtZSkpKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04oSlNPYmplY3QqLCBvcF9w
dXNoX3Njb3BlKQpAQCAtMjg1OSw3ICsyODYzLDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5j
b2RlZEpTVmFsdWUsIG9wXwogICAgIEpTVmFsdWUgc3JjMSA9IHN0YWNrRnJhbWUuYXJnc1swXS5q
c1ZhbHVlKCk7CiAgICAgSlNWYWx1ZSBzcmMyID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUo
KTsKIAotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKEpTVmFsdWU6OnN0cmlj
dEVxdWFsKHNyYzEsIHNyYzIpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xl
YW4oSlNWYWx1ZTo6c3RyaWN0RXF1YWwoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHNyYzEsIHNyYzIp
KSk7CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF90b19wcmlt
aXRpdmUpCkBAIC0yODczLDcgKzI4NzcsOSBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVk
SlNWYWx1ZSwgb3BfCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwog
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25jYXRlbmF0ZVN0cmluZ3Moc3RhY2tGcmFt
ZS5jYWxsRnJhbWUsICZzdGFja0ZyYW1lLmNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3RhY2tGcmFt
ZS5hcmdzWzBdLmludDMyKCldLCBzdGFja0ZyYW1lLmFyZ3NbMV0uaW50MzIoKSkpOworICAgIEpT
VmFsdWUgcmVzdWx0ID0gY29uY2F0ZW5hdGVTdHJpbmdzKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCAm
c3RhY2tGcmFtZS5jYWxsRnJhbWUtPnJlZ2lzdGVycygpW3N0YWNrRnJhbWUuYXJnc1swXS5pbnQz
MigpXSwgc3RhY2tGcmFtZS5hcmdzWzFdLmludDMyKCkpOworICAgIENIRUNLX0ZPUl9FWENFUFRJ
T05fQVRfRU5EKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBE
RUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfbnN0cmljdGVxKQpAQCAtMjg4
Myw3ICsyODg5LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwog
ICAgIEpTVmFsdWUgc3JjMSA9IHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7CiAgICAgSlNW
YWx1ZSBzcmMyID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzVmFsdWUoKTsKIAotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFKU1ZhbHVlOjpzdHJpY3RFcXVhbChzcmMxLCBzcmMy
KSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNCb29sZWFuKCFKU1ZhbHVlOjpzdHJp
Y3RFcXVhbChzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3JjMSwgc3JjMikpKTsKIH0KIAogREVGSU5F
X1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX3RvX2pzbnVtYmVyKQpAQCAtMjk5Miw3
ICsyOTk4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCosIG9wX3N3aXRjaF9jaAogICAg
IHZvaWQqIHJlc3VsdCA9IGNvZGVCbG9jay0+Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlKHRhYmxl
SW5kZXgpLmN0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAogICAgIGlmIChzY3J1dGlu
ZWUuaXNTdHJpbmcoKSkgewotICAgICAgICBVU3RyaW5nOjpSZXAqIHZhbHVlID0gYXNTdHJpbmco
c2NydXRpbmVlKS0+dmFsdWUoKS5yZXAoKTsKKyAgICAgICAgVVN0cmluZzo6UmVwKiB2YWx1ZSA9
IGFzU3RyaW5nKHNjcnV0aW5lZSktPnZhbHVlKGNhbGxGcmFtZSkucmVwKCk7CiAgICAgICAgIGlm
ICh2YWx1ZS0+c2l6ZSgpID09IDEpCiAgICAgICAgICAgICByZXN1bHQgPSBjb2RlQmxvY2stPmNo
YXJhY3RlclN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlGb3JWYWx1ZSh2YWx1ZS0+ZGF0
YSgpWzBdKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0KQEAgLTMwMTIsNyArMzAxOCw3IEBA
IERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQqLCBvcF9zd2l0Y2hfc3QKICAgICB2b2lkKiByZXN1
bHQgPSBjb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlEZWZh
dWx0LmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKICAgICBpZiAoc2NydXRpbmVlLmlzU3RyaW5nKCkp
IHsKLSAgICAgICAgVVN0cmluZzo6UmVwKiB2YWx1ZSA9IGFzU3RyaW5nKHNjcnV0aW5lZSktPnZh
bHVlKCkucmVwKCk7CisgICAgICAgIFVTdHJpbmc6OlJlcCogdmFsdWUgPSBhc1N0cmluZyhzY3J1
dGluZWUpLT52YWx1ZShjYWxsRnJhbWUpLnJlcCgpOwogICAgICAgICByZXN1bHQgPSBjb2RlQmxv
Y2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlGb3JWYWx1ZSh2YWx1ZSku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2Zp
bGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Myw3ICs2Myw3IEBAIHZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6YWRkUGFyZW50Rm9yQ29uc28KICAg
ICBKU1ZhbHVlIGZ1bmN0aW9uOwogCiAgICAgZXhlYy0+aW50ZXJwcmV0ZXIoKS0+cmV0cmlldmVM
YXN0Q2FsbGVyKGV4ZWMsIGxpbmVOdW1iZXIsIHNvdXJjZUlELCBzb3VyY2VVUkwsIGZ1bmN0aW9u
KTsKLSAgICBtX2N1cnJlbnROb2RlID0gUHJvZmlsZU5vZGU6OmNyZWF0ZShQcm9maWxlcjo6Y3Jl
YXRlQ2FsbElkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERhdGEoKSwgZnVuY3Rpb24gPyBmdW5jdGlv
bi50b1RoaXNPYmplY3QoZXhlYykgOiAwLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIpLCBtX2hlYWQu
Z2V0KCksIG1faGVhZC5nZXQoKSk7CisgICAgbV9jdXJyZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpj
cmVhdGUoUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uID8gZnVu
Y3Rpb24udG9UaGlzT2JqZWN0KGV4ZWMpIDogMCwgc291cmNlVVJMLCBsaW5lTnVtYmVyKSwgbV9o
ZWFkLmdldCgpLCBtX2hlYWQuZ2V0KCkpOwogICAgIG1faGVhZC0+aW5zZXJ0Tm9kZShtX2N1cnJl
bnROb2RlLmdldCgpKTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNw
cAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIqIEds
b2JhbENvZGVFeGVjdXRpb24gPQogc3RhdGljIGNvbnN0IGNoYXIqIEFub255bW91c0Z1bmN0aW9u
ID0gIihhbm9ueW1vdXMgZnVuY3Rpb24pIjsKIHN0YXRpYyB1bnNpZ25lZCBQcm9maWxlc1VJRCA9
IDA7CiAKLXN0YXRpYyBDYWxsSWRlbnRpZmllciBjcmVhdGVDYWxsSWRlbnRpZmllckZyb21GdW5j
dGlvbkltcChKU0dsb2JhbERhdGEqLCBKU0Z1bmN0aW9uKik7CitzdGF0aWMgQ2FsbElkZW50aWZp
ZXIgY3JlYXRlQ2FsbElkZW50aWZpZXJGcm9tRnVuY3Rpb25JbXAoRXhlY1N0YXRlKiwgSlNGdW5j
dGlvbiopOwogCiBQcm9maWxlciogUHJvZmlsZXI6OnNfc2hhcmVkUHJvZmlsZXIgPSAwOwogUHJv
ZmlsZXIqIFByb2ZpbGVyOjpzX3NoYXJlZEVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSA9IDA7CkBA
IC0xMDksMTQgKzEwOSwxNCBAQCB2b2lkIFByb2ZpbGVyOjp3aWxsRXhlY3V0ZShFeGVjU3RhdGUq
IGV4CiB7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnRQcm9maWxlcy5pc0VtcHR5KCkpOwogCi0gICAg
ZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2Vu
ZXJhdG9yOjp3aWxsRXhlY3V0ZSwgY3JlYXRlQ2FsbElkZW50aWZpZXIoJmV4ZWMtPmdsb2JhbERh
dGEoKSwgZnVuY3Rpb24sICIiLCAwKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9m
aWxlR3JvdXAoKSk7CisgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJv
ZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjp3aWxsRXhlY3V0ZSwgY3JlYXRlQ2FsbElkZW50aWZp
ZXIoZXhlYywgZnVuY3Rpb24sICIiLCAwKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5w
cm9maWxlR3JvdXAoKSk7CiB9CiAKIHZvaWQgUHJvZmlsZXI6OndpbGxFeGVjdXRlKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVy
KQogewogICAgIEFTU0VSVCghbV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsKIAotICAgIENh
bGxJZGVudGlmaWVyIGNhbGxJZGVudGlmaWVyID0gY3JlYXRlQ2FsbElkZW50aWZpZXIoJmV4ZWMt
Pmdsb2JhbERhdGEoKSwgSlNWYWx1ZSgpLCBzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51bWJlcik7
CisgICAgQ2FsbElkZW50aWZpZXIgY2FsbElkZW50aWZpZXIgPSBjcmVhdGVDYWxsSWRlbnRpZmll
cihleGVjLCBKU1ZhbHVlKCksIHNvdXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKIAogICAg
IGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdl
bmVyYXRvcjo6d2lsbEV4ZWN1dGUsIGNhbGxJZGVudGlmaWVyLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKIH0KQEAgLTEyNSwxNyArMTI1LDE3IEBAIHZvaWQg
UHJvZmlsZXI6OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGUKIHsKICAgICBBU1NFUlQoIW1fY3Vy
cmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKLSAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxl
cyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4ZWN1dGUsIGNyZWF0
ZUNhbGxJZGVudGlmaWVyKCZleGVjLT5nbG9iYWxEYXRhKCksIGZ1bmN0aW9uLCAiIiwgMCksIGV4
ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOworICAgIGRpc3BhdGNo
RnVuY3Rpb25Ub1Byb2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6
ZGlkRXhlY3V0ZSwgY3JlYXRlQ2FsbElkZW50aWZpZXIoZXhlYywgZnVuY3Rpb24sICIiLCAwKSwg
ZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKIHZvaWQg
UHJvZmlsZXI6OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzb3Vy
Y2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCiB7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnRQ
cm9maWxlcy5pc0VtcHR5KCkpOwogCi0gICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9j
dXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlLCBjcmVhdGVDYWxs
SWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBKU1ZhbHVlKCksIHNvdXJjZVVSTCwgc3Rh
cnRpbmdMaW5lTnVtYmVyKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9maWxlR3Jv
dXAoKSk7CisgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJvZmlsZXMs
ICZQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcihleGVj
LCBKU1ZhbHVlKCksIHNvdXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyKSwgZXhlYy0+bGV4aWNh
bEdsb2JhbE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKLUNhbGxJZGVudGlmaWVyIFBy
b2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIEpT
VmFsdWUgZnVuY3Rpb25WYWx1ZSwgY29uc3QgVVN0cmluZyYgZGVmYXVsdFNvdXJjZVVSTCwgaW50
IGRlZmF1bHRMaW5lTnVtYmVyKQorQ2FsbElkZW50aWZpZXIgUHJvZmlsZXI6OmNyZWF0ZUNhbGxJ
ZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvblZhbHVlLCBjb25zdCBV
U3RyaW5nJiBkZWZhdWx0U291cmNlVVJMLCBpbnQgZGVmYXVsdExpbmVOdW1iZXIpCiB7CiAgICAg
aWYgKCFmdW5jdGlvblZhbHVlKQogICAgICAgICByZXR1cm4gQ2FsbElkZW50aWZpZXIoR2xvYmFs
Q29kZUV4ZWN1dGlvbiwgZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIpOwpAQCAt
MTQ0LDE3ICsxNDQsMTcgQEAgQ2FsbElkZW50aWZpZXIgUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVu
dAogICAgIGlmIChhc09iamVjdChmdW5jdGlvblZhbHVlKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246
OmluZm8pKSB7CiAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbihmdW5j
dGlvblZhbHVlKTsKICAgICAgICAgaWYgKCFmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpLT5pc0hvc3RG
dW5jdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxJZGVudGlmaWVyRnJvbUZ1
bmN0aW9uSW1wKGdsb2JhbERhdGEsIGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBjcmVh
dGVDYWxsSWRlbnRpZmllckZyb21GdW5jdGlvbkltcChleGVjLCBmdW5jdGlvbik7CiAgICAgfQog
ICAgIGlmIChhc09iamVjdChmdW5jdGlvblZhbHVlKS0+aW5oZXJpdHMoJkludGVybmFsRnVuY3Rp
b246OmluZm8pKQotICAgICAgICByZXR1cm4gQ2FsbElkZW50aWZpZXIoc3RhdGljX2Nhc3Q8SW50
ZXJuYWxGdW5jdGlvbio+KGFzT2JqZWN0KGZ1bmN0aW9uVmFsdWUpKS0+bmFtZShnbG9iYWxEYXRh
KSwgZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVOdW1iZXIpOworICAgICAgICByZXR1cm4g
Q2FsbElkZW50aWZpZXIoc3RhdGljX2Nhc3Q8SW50ZXJuYWxGdW5jdGlvbio+KGFzT2JqZWN0KGZ1
bmN0aW9uVmFsdWUpKS0+bmFtZShleGVjKSwgZGVmYXVsdFNvdXJjZVVSTCwgZGVmYXVsdExpbmVO
dW1iZXIpOwogICAgIHJldHVybiBDYWxsSWRlbnRpZmllcigiKCIgKyBhc09iamVjdChmdW5jdGlv
blZhbHVlKS0+Y2xhc3NOYW1lKCkgKyAiIG9iamVjdCkiLCBkZWZhdWx0U291cmNlVVJMLCBkZWZh
dWx0TGluZU51bWJlcik7CiB9CiAKLUNhbGxJZGVudGlmaWVyIGNyZWF0ZUNhbGxJZGVudGlmaWVy
RnJvbUZ1bmN0aW9uSW1wKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNGdW5jdGlvbiogZnVu
Y3Rpb24pCitDYWxsSWRlbnRpZmllciBjcmVhdGVDYWxsSWRlbnRpZmllckZyb21GdW5jdGlvbklt
cChFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uKQogewogICAgIEFTU0VSVCgh
ZnVuY3Rpb24tPmlzSG9zdEZ1bmN0aW9uKCkpOwotICAgIGNvbnN0IFVTdHJpbmcmIG5hbWUgPSBm
dW5jdGlvbi0+Y2FsY3VsYXRlZERpc3BsYXlOYW1lKGdsb2JhbERhdGEpOworICAgIGNvbnN0IFVT
dHJpbmcmIG5hbWUgPSBmdW5jdGlvbi0+Y2FsY3VsYXRlZERpc3BsYXlOYW1lKGV4ZWMpOwogICAg
IHJldHVybiBDYWxsSWRlbnRpZmllcihuYW1lLmlzRW1wdHkoKSA/IEFub255bW91c0Z1bmN0aW9u
IDogbmFtZSwgZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpLT5zb3VyY2VVUkwoKSwgZnVuY3Rpb24t
PmpzRXhlY3V0YWJsZSgpLT5saW5lTm8oKSk7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3By
b2ZpbGVyL1Byb2ZpbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIv
UHJvZmlsZXIuaAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAKICAgICAgICAgc3RhdGljIFByb2ZpbGVyKiBwcm9maWxlcigpOyAKLSAg
ICAgICAgc3RhdGljIENhbGxJZGVudGlmaWVyIGNyZWF0ZUNhbGxJZGVudGlmaWVyKEpTR2xvYmFs
RGF0YSosIEpTVmFsdWUsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIp
OworICAgICAgICBzdGF0aWMgQ2FsbElkZW50aWZpZXIgY3JlYXRlQ2FsbElkZW50aWZpZXIoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBsaW5l
TnVtYmVyKTsKIAogICAgICAgICB2b2lkIHN0YXJ0UHJvZmlsaW5nKEV4ZWNTdGF0ZSosIGNvbnN0
IFVTdHJpbmcmIHRpdGxlKTsKICAgICAgICAgUGFzc1JlZlB0cjxQcm9maWxlPiBzdG9wUHJvZmls
aW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHRpdGxlKTsKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDM0LDcgKzEwMzQsNyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlQcm90b0Z1bmNJbmRl
CiAgICAgICAgIEpTVmFsdWUgZSA9IGdldFByb3BlcnR5KGV4ZWMsIHRoaXNPYmosIGluZGV4KTsK
ICAgICAgICAgaWYgKCFlKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmIChKU1Zh
bHVlOjpzdHJpY3RFcXVhbChzZWFyY2hFbGVtZW50LCBlKSkKKyAgICAgICAgaWYgKEpTVmFsdWU6
OnN0cmljdEVxdWFsKGV4ZWMsIHNlYXJjaEVsZW1lbnQsIGUpKQogICAgICAgICAgICAgcmV0dXJu
IGpzTnVtYmVyKGV4ZWMsIGluZGV4KTsKICAgICB9CiAKQEAgLTEwNjUsNyArMTA2NSw3IEBAIEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0xhc3QKICAgICAgICAgSlNWYWx1ZSBl
ID0gZ2V0UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaW5kZXgpOwogICAgICAgICBpZiAoIWUpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKEpTVmFsdWU6OnN0cmljdEVxdWFsKHNl
YXJjaEVsZW1lbnQsIGUpKQorICAgICAgICBpZiAoSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywg
c2VhcmNoRWxlbWVudCwgZSkpCiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW5k
ZXgpOwogICAgIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVj
dG9yLmNwcAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0RhdGVD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg0LDcgKzg0LDcgQEAgSlNPYmplY3Qq
IGNvbnN0cnVjdERhdGUoRXhlY1N0YXRlKiBleGVjLAogICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgIEpTVmFsdWUgcHJpbWl0aXZlID0gYXJncy5hdCgwKS50b1ByaW1pdGl2ZShleGVjKTsKICAg
ICAgICAgICAgIGlmIChwcmltaXRpdmUuaXNTdHJpbmcoKSkKLSAgICAgICAgICAgICAgICB2YWx1
ZSA9IHBhcnNlRGF0ZShleGVjLCBwcmltaXRpdmUuZ2V0U3RyaW5nKCkpOworICAgICAgICAgICAg
ICAgIHZhbHVlID0gcGFyc2VEYXRlKGV4ZWMsIHByaW1pdGl2ZS5nZXRTdHJpbmcoZXhlYykpOwog
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHZhbHVlID0gcHJpbWl0aXZlLnRvTnVt
YmVyKGV4ZWMpOwogICAgICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1bmN0
aW9uUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Z1
bmN0aW9uUHJvdG90eXBlLmNwcAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMTMgKzkw
LDEzIEBAIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBmdW5jdGlvblByb3RvRnVuY1QKICAgICAgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGZ1bmN0aW9uLT5qc0V4ZWN1dGFi
bGUoKTsKICAgICAgICAgICAgIFVTdHJpbmcgc291cmNlU3RyaW5nID0gZXhlY3V0YWJsZS0+c291
cmNlKCkudG9TdHJpbmcoKTsKICAgICAgICAgICAgIGluc2VydFNlbWljb2xvbklmTmVlZGVkKHNv
dXJjZVN0cmluZyk7Ci0gICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgImZ1bmN0aW9u
ICIgKyBmdW5jdGlvbi0+bmFtZSgmZXhlYy0+Z2xvYmFsRGF0YSgpKSArICIoIiArIGV4ZWN1dGFi
bGUtPnBhcmFtU3RyaW5nKCkgKyAiKSAiICsgc291cmNlU3RyaW5nKTsKKyAgICAgICAgICAgIHJl
dHVybiBqc1N0cmluZyhleGVjLCAiZnVuY3Rpb24gIiArIGZ1bmN0aW9uLT5uYW1lKGV4ZWMpICsg
IigiICsgZXhlY3V0YWJsZS0+cGFyYW1TdHJpbmcoKSArICIpICIgKyBzb3VyY2VTdHJpbmcpOwog
ICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHRoaXNWYWx1ZS5pbmhlcml0cygmSW50ZXJuYWxG
dW5jdGlvbjo6aW5mbykpIHsKICAgICAgICAgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBh
c0ludGVybmFsRnVuY3Rpb24odGhpc1ZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsICJmdW5jdGlvbiAiICsgZnVuY3Rpb24tPm5hbWUoJmV4ZWMtPmdsb2JhbERhdGEoKSkgKyAi
KCkge1xuICAgIFtuYXRpdmUgY29kZV1cbn0iKTsKKyAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4
ZWMsICJmdW5jdGlvbiAiICsgZnVuY3Rpb24tPm5hbWUoZXhlYykgKyAiKCkge1xuICAgIFtuYXRp
dmUgY29kZV1cbn0iKTsKICAgICB9CiAKICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBl
RXJyb3IpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24u
Y3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxG
dW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDI5ICs0MywyOSBAQCBJbnRlcm5hbEZ1
bmN0aW9uOjpJbnRlcm5hbEZ1bmN0aW9uKEpTR2xvCiAgICAgcHV0RGlyZWN0KGdsb2JhbERhdGEt
PnByb3BlcnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKGdsb2JhbERhdGEsIG5hbWUudXN0cmluZygp
KSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOwogfQogCi1jb25zdCBVU3RyaW5n
JiBJbnRlcm5hbEZ1bmN0aW9uOjpuYW1lKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK2NvbnN0
IFVTdHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5hbWUoRXhlY1N0YXRlKiBleGVjKQogewotICAg
IHJldHVybiBhc1N0cmluZyhnZXREaXJlY3QoZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bmFt
ZSkpLT52YWx1ZSgpOworICAgIHJldHVybiBhc1N0cmluZyhnZXREaXJlY3QoZXhlYy0+Z2xvYmFs
RGF0YSgpLnByb3BlcnR5TmFtZXMtPm5hbWUpKS0+dmFsdWUoZXhlYyk7CiB9CiAKLWNvbnN0IFVT
dHJpbmcgSW50ZXJuYWxGdW5jdGlvbjo6ZGlzcGxheU5hbWUoSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhKQorY29uc3QgVVN0cmluZyBJbnRlcm5hbEZ1bmN0aW9uOjpkaXNwbGF5TmFtZShFeGVjU3Rh
dGUqIGV4ZWMpCiB7Ci0gICAgSlNWYWx1ZSBkaXNwbGF5TmFtZSA9IGdldERpcmVjdChnbG9iYWxE
YXRhLT5wcm9wZXJ0eU5hbWVzLT5kaXNwbGF5TmFtZSk7CisgICAgSlNWYWx1ZSBkaXNwbGF5TmFt
ZSA9IGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+ZGlzcGxheU5h
bWUpOwogICAgIAotICAgIGlmIChkaXNwbGF5TmFtZSAmJiBpc0pTU3RyaW5nKGdsb2JhbERhdGEs
IGRpc3BsYXlOYW1lKSkKLSAgICAgICAgcmV0dXJuIGFzU3RyaW5nKGRpc3BsYXlOYW1lKS0+dmFs
dWUoKTsKKyAgICBpZiAoZGlzcGxheU5hbWUgJiYgaXNKU1N0cmluZygmZXhlYy0+Z2xvYmFsRGF0
YSgpLCBkaXNwbGF5TmFtZSkpCisgICAgICAgIHJldHVybiBhc1N0cmluZyhkaXNwbGF5TmFtZSkt
PnZhbHVlKGV4ZWMpOwogICAgIAogICAgIHJldHVybiBVU3RyaW5nOjpudWxsKCk7CiB9CiAKLWNv
bnN0IFVTdHJpbmcgSW50ZXJuYWxGdW5jdGlvbjo6Y2FsY3VsYXRlZERpc3BsYXlOYW1lKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKK2NvbnN0IFVTdHJpbmcgSW50ZXJuYWxGdW5jdGlvbjo6Y2Fs
Y3VsYXRlZERpc3BsYXlOYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBjb25zdCBVU3RyaW5n
IGV4cGxpY2l0TmFtZSA9IGRpc3BsYXlOYW1lKGdsb2JhbERhdGEpOworICAgIGNvbnN0IFVTdHJp
bmcgZXhwbGljaXROYW1lID0gZGlzcGxheU5hbWUoZXhlYyk7CiAgICAgCiAgICAgaWYgKCFleHBs
aWNpdE5hbWUuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZXhwbGljaXROYW1lOwogICAgIAot
ICAgIHJldHVybiBuYW1lKGdsb2JhbERhdGEpOworICAgIHJldHVybiBuYW1lKGV4ZWMpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50ZXJu
YWxGdW5jdGlvbi5oCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SW50ZXJuYWxGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3Q7IAogICAgICAgICBzdGF0aWMgSlNfRVhQT1JUREFUQSBjb25zdCBDbGFzc0luZm8gaW5m
bzsKIAotICAgICAgICBjb25zdCBVU3RyaW5nJiBuYW1lKEpTR2xvYmFsRGF0YSopOwotICAgICAg
ICBjb25zdCBVU3RyaW5nIGRpc3BsYXlOYW1lKEpTR2xvYmFsRGF0YSopOwotICAgICAgICBjb25z
dCBVU3RyaW5nIGNhbGN1bGF0ZWREaXNwbGF5TmFtZShKU0dsb2JhbERhdGEqKTsKKyAgICAgICAg
Y29uc3QgVVN0cmluZyYgbmFtZShFeGVjU3RhdGUqKTsKKyAgICAgICAgY29uc3QgVVN0cmluZyBk
aXNwbGF5TmFtZShFeGVjU3RhdGUqKTsKKyAgICAgICAgY29uc3QgVVN0cmluZyBjYWxjdWxhdGVk
RGlzcGxheU5hbWUoRXhlY1N0YXRlKik7CiAKICAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3Ry
dWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSBwcm90bykgCiAgICAgICAgIHsgCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODYsMTcgKzg2LDE3
IEBAIGJvb2wgSlNDZWxsOjpnZXRVSW50MzIodWludDMyX3QmKSBjb25zdAogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotYm9vbCBKU0NlbGw6OmdldFN0cmluZyhVU3RyaW5nJnN0cmluZ1ZhbHVlKSBj
b25zdAorYm9vbCBKU0NlbGw6OmdldFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFVTdHJpbmcmc3Ry
aW5nVmFsdWUpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1N0cmluZygpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgc3RyaW5nVmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+KHRo
aXMpLT52YWx1ZSgpOworICAgIHN0cmluZ1ZhbHVlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJp
bmcqPih0aGlzKS0+dmFsdWUoZXhlYyk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVVTdHJpbmcg
SlNDZWxsOjpnZXRTdHJpbmcoKSBjb25zdAorVVN0cmluZyBKU0NlbGw6OmdldFN0cmluZyhFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGlzU3RyaW5nKCkgPyBzdGF0aWNfY2Fz
dDxjb25zdCBKU1N0cmluZyo+KHRoaXMpLT52YWx1ZSgpIDogVVN0cmluZygpOworICAgIHJldHVy
biBpc1N0cmluZygpID8gc3RhdGljX2Nhc3Q8Y29uc3QgSlNTdHJpbmcqPih0aGlzKS0+dmFsdWUo
ZXhlYykgOiBVU3RyaW5nKCk7CiB9CiAKIEpTT2JqZWN0KiBKU0NlbGw6OmdldE9iamVjdCgpCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgJKHJldmlzaW9uIDUxNzA4KQorKysgSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdDsKIAog
ICAgICAgICAvLyBFeHRyYWN0aW5nIHRoZSB2YWx1ZS4KLSAgICAgICAgYm9vbCBnZXRTdHJpbmco
VVN0cmluZyYpIGNvbnN0OwotICAgICAgICBVU3RyaW5nIGdldFN0cmluZygpIGNvbnN0OyAvLyBu
dWxsIHN0cmluZyBpZiBub3QgYSBzdHJpbmcKKyAgICAgICAgYm9vbCBnZXRTdHJpbmcoRXhlY1N0
YXRlKiBleGVjLCBVU3RyaW5nJikgY29uc3Q7CisgICAgICAgIFVTdHJpbmcgZ2V0U3RyaW5nKEV4
ZWNTdGF0ZSogZXhlYykgY29uc3Q7IC8vIG51bGwgc3RyaW5nIGlmIG5vdCBhIHN0cmluZwogICAg
ICAgICBKU09iamVjdCogZ2V0T2JqZWN0KCk7IC8vIE5VTEwgaWYgbm90IGFuIG9iamVjdAogICAg
ICAgICBjb25zdCBKU09iamVjdCogZ2V0T2JqZWN0KCkgY29uc3Q7IC8vIE5VTEwgaWYgbm90IGFu
IG9iamVjdAogICAgICAgICAKQEAgLTE3OSwxNCArMTc5LDE0IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICByZXR1cm4gaXNDZWxsKCkgJiYgYXNDZWxsKCktPmlzT2JqZWN0KCk7CiAgICAgfQog
Ci0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6Z2V0U3RyaW5nKFVTdHJpbmcmIHMpIGNvbnN0Cisg
ICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6Z2V0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgVVN0cmlu
ZyYgcykgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiBpc0NlbGwoKSAmJiBhc0NlbGwoKS0+
Z2V0U3RyaW5nKHMpOworICAgICAgICByZXR1cm4gaXNDZWxsKCkgJiYgYXNDZWxsKCktPmdldFN0
cmluZyhleGVjLCBzKTsKICAgICB9CiAKLSAgICBpbmxpbmUgVVN0cmluZyBKU1ZhbHVlOjpnZXRT
dHJpbmcoKSBjb25zdAorICAgIGlubGluZSBVU3RyaW5nIEpTVmFsdWU6OmdldFN0cmluZyhFeGVj
U3RhdGUqIGV4ZWMpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gaXNDZWxsKCkgPyBhc0Nl
bGwoKS0+Z2V0U3RyaW5nKCkgOiBVU3RyaW5nKCk7CisgICAgICAgIHJldHVybiBpc0NlbGwoKSA/
IGFzQ2VsbCgpLT5nZXRTdHJpbmcoZXhlYykgOiBVU3RyaW5nKCk7CiAgICAgfQogCiAgICAgaW5s
aW5lIEpTT2JqZWN0KiBKU1ZhbHVlOjpnZXRPYmplY3QoKSBjb25zdApJbmRleDogSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT05PYmplY3QuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Miw3ICsxNzIs
NyBAQCBzdGF0aWMgaW5saW5lIFVTdHJpbmcgZ2FwKEV4ZWNTdGF0ZSogZXhlCiAgICAgfQogCiAg
ICAgLy8gSWYgdGhlIHNwYWNlIHZhbHVlIGlzIGEgc3RyaW5nLCB1c2UgaXQgYXMgdGhlIGdhcCBz
dHJpbmcsIG90aGVyd2lzZSB1c2Ugbm8gZ2FwIHN0cmluZy4KLSAgICBVU3RyaW5nIHNwYWNlcyA9
IHNwYWNlLmdldFN0cmluZygpOworICAgIFVTdHJpbmcgc3BhY2VzID0gc3BhY2UuZ2V0U3RyaW5n
KGV4ZWMpOwogICAgIGlmIChzcGFjZXMuc2l6ZSgpID4gbWF4R2FwTGVuZ3RoKSB7CiAgICAgICAg
IHNwYWNlcyA9IHNwYWNlcy5zdWJzdHIoMCwgbWF4R2FwTGVuZ3RoKTsKICAgICB9CkBAIC0yMjks
NyArMjI5LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmaWVyKEV4ZWNTdGF0ZSogZXhlYwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBVU3RyaW5nIHByb3BlcnR5TmFtZTsK
LSAgICAgICAgICAgIGlmIChuYW1lLmdldFN0cmluZyhwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAg
ICAgICBpZiAobmFtZS5nZXRTdHJpbmcoZXhlYywgcHJvcGVydHlOYW1lKSkgewogICAgICAgICAg
ICAgICAgIG1fYXJyYXlSZXBsYWNlclByb3BlcnR5TmFtZXMuYWRkKElkZW50aWZpZXIoZXhlYywg
cHJvcGVydHlOYW1lKSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
CkBAIC00MDcsNyArNDA3LDcgQEAgU3RyaW5naWZpZXI6OlN0cmluZ2lmeVJlc3VsdCBTdHJpbmdp
ZmllcgogICAgIH0KIAogICAgIFVTdHJpbmcgc3RyaW5nVmFsdWU7Ci0gICAgaWYgKHZhbHVlLmdl
dFN0cmluZyhzdHJpbmdWYWx1ZSkpIHsKKyAgICBpZiAodmFsdWUuZ2V0U3RyaW5nKG1fZXhlYywg
c3RyaW5nVmFsdWUpKSB7CiAgICAgICAgIGFwcGVuZFF1b3RlZFN0cmluZyhidWlsZGVyLCBzdHJp
bmdWYWx1ZSk7CiAgICAgICAgIHJldHVybiBTdHJpbmdpZnlTdWNjZWVkZWQ7CiAgICAgfQpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDUxNzA4KQorKysgSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyMiwx
MiArNTIyLDEyIEBAIHZvaWQgSlNPYmplY3Q6OnJlbW92ZURpcmVjdChjb25zdCBJZGVudGkKIAog
dm9pZCBKU09iamVjdDo6cHV0RGlyZWN0RnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBJbnRlcm5h
bEZ1bmN0aW9uKiBmdW5jdGlvbiwgdW5zaWduZWQgYXR0cikKIHsKLSAgICBwdXREaXJlY3RGdW5j
dGlvbihJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uLT5uYW1lKCZleGVjLT5nbG9iYWxEYXRhKCkp
KSwgZnVuY3Rpb24sIGF0dHIpOworICAgIHB1dERpcmVjdEZ1bmN0aW9uKElkZW50aWZpZXIoZXhl
YywgZnVuY3Rpb24tPm5hbWUoZXhlYykpLCBmdW5jdGlvbiwgYXR0cik7CiB9CiAKIHZvaWQgSlNP
YmplY3Q6OnB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oRXhlY1N0YXRlKiBleGVj
LCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgdW5zaWduZWQgYXR0cikKIHsKLSAgICBwdXRE
aXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKElkZW50aWZpZXIoZXhlYywgZnVuY3Rpb24t
Pm5hbWUoJmV4ZWMtPmdsb2JhbERhdGEoKSkpLCBmdW5jdGlvbiwgYXR0cik7CisgICAgcHV0RGly
ZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uLT5u
YW1lKGV4ZWMpKSwgZnVuY3Rpb24sIGF0dHIpOwogfQogCiBORVZFUl9JTkxJTkUgdm9pZCBKU09i
amVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpTVmFsdWUq
IGxvY2F0aW9uKQpAQCAtNTk5LDcgKzU5OSw3IEBAIGJvb2wgSlNPYmplY3Q6OmRlZmluZU93blBy
b3BlcnR5KEV4ZWNTdGEKICAgICBpZiAoZGVzY3JpcHRvci5pc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiB0cnVlOwogCi0gICAgaWYgKGN1cnJlbnQuZXF1YWxUbyhkZXNjcmlwdG9yKSkKKyAgICBp
ZiAoY3VycmVudC5lcXVhbFRvKGV4ZWMsIGRlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4gdHJ1
ZTsKIAogICAgIC8vIEZpbHRlciBvdXQgaW52YWxpZCBjaGFuZ2VzCkBAIC02NDUsNyArNjQ1LDcg
QEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoRXhlY1N0YQogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghY3VycmVu
dC53cml0YWJsZSgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSB8
fCAhSlNWYWx1ZTo6c3RyaWN0RXF1YWwoY3VycmVudC52YWx1ZSgpLCBkZXNjcmlwdG9yLnZhbHVl
KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKGRlc2NyaXB0b3IudmFsdWUoKSB8fCAhSlNWYWx1
ZTo6c3RyaWN0RXF1YWwoZXhlYywgY3VycmVudC52YWx1ZSgpLCBkZXNjcmlwdG9yLnZhbHVlKCkp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgICAg
ICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiQXR0ZW1wdGluZyB0byBj
aGFuZ2UgdmFsdWUgb2YgYSByZWFkb25seSBwcm9wZXJ0eS4iKTsKICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwpAQCAtNjY3LDEyICs2NjcsMTIgQEAgYm9vbCBKU09iamVjdDo6ZGVm
aW5lT3duUHJvcGVydHkoRXhlY1N0YQogICAgIC8vIENoYW5naW5nIHRoZSBhY2Nlc3NvciBmdW5j
dGlvbnMgb2YgYW4gZXhpc3RpbmcgYWNjZXNzb3IgcHJvcGVydHkKICAgICBBU1NFUlQoZGVzY3Jp
cHRvci5pc0FjY2Vzc29yRGVzY3JpcHRvcigpKTsKICAgICBpZiAoIWN1cnJlbnQuY29uZmlndXJh
YmxlKCkpIHsKLSAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJlc2VudCgpICYmICEoY3Vy
cmVudC5zZXR0ZXIoKSAmJiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChjdXJyZW50LnNldHRlcigpLCBk
ZXNjcmlwdG9yLnNldHRlcigpKSkpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3Iuc2V0dGVyUHJl
c2VudCgpICYmICEoY3VycmVudC5zZXR0ZXIoKSAmJiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVj
LCBjdXJyZW50LnNldHRlcigpLCBkZXNjcmlwdG9yLnNldHRlcigpKSkpIHsKICAgICAgICAgICAg
IGlmICh0aHJvd0V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFR5
cGVFcnJvciwgIkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBzZXR0ZXIgb2YgYW4gdW5jb25maWd1
cmFibGUgcHJvcGVydHkuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYmICEoY3VycmVudC5nZXR0
ZXIoKSAmJiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChjdXJyZW50LmdldHRlcigpLCBkZXNjcmlwdG9y
LmdldHRlcigpKSkpIHsKKyAgICAgICAgaWYgKGRlc2NyaXB0b3IuZ2V0dGVyUHJlc2VudCgpICYm
ICEoY3VycmVudC5nZXR0ZXIoKSAmJiBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBjdXJyZW50
LmdldHRlcigpLCBkZXNjcmlwdG9yLmdldHRlcigpKSkpIHsKICAgICAgICAgICAgIGlmICh0aHJv
d0V4Y2VwdGlvbikKICAgICAgICAgICAgICAgICB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwg
IkF0dGVtcHRpbmcgdG8gY2hhbmdlIHRoZSBnZXR0ZXIgb2YgYW4gdW5jb25maWd1cmFibGUgcHJv
cGVydHkuIik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09iamVjdC5oCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjM0LDcgKzIzNCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB1c2luZyBKU0NlbGw6OmlzR2V0dGVyU2V0dGVyOwogICAgICAgICB1c2lu
ZyBKU0NlbGw6OnRvT2JqZWN0OwogICAgICAgICB2b2lkIGdldE9iamVjdCgpOwotICAgICAgICB2
b2lkIGdldFN0cmluZygpOworICAgICAgICB2b2lkIGdldFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMp
OwogICAgICAgICB2b2lkIGlzT2JqZWN0KCk7CiAgICAgICAgIHZvaWQgaXNTdHJpbmcoKTsKICNp
ZiBVU0UoSlNWQUxVRTMyKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
UHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDcgKzc3LDcgQEAgSlNWYWx1ZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpnZXQoRXhlYwog
ICAgIGlmIChtX2NhY2hlZFN0cnVjdHVyZSA9PSBiYXNlLT5zdHJ1Y3R1cmUoKSAmJiBtX2NhY2hl
ZFByb3RvdHlwZUNoYWluID09IGJhc2UtPnN0cnVjdHVyZSgpLT5wcm90b3R5cGVDaGFpbihleGVj
KSkKICAgICAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiAKLSAgICBpZiAoIWJhc2UtPmhhc1Byb3Bl
cnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgYXNTdHJpbmcoaWRlbnRpZmllciktPnZhbHVlKCkp
KSkKKyAgICBpZiAoIWJhc2UtPmhhc1Byb3BlcnR5KGV4ZWMsIElkZW50aWZpZXIoZXhlYywgYXNT
dHJpbmcoaWRlbnRpZmllciktPnZhbHVlKGV4ZWMpKSkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgcmV0dXJuIGlkZW50aWZpZXI7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmNwcAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJTdHJpbmdPYmplY3QuaCIKICNpbmNsdWRlICJTdHJpbmdQcm90
b3R5cGUuaCIKIApAQCAtMzgsNiArMzksNyBAQCBKU1N0cmluZzo6Um9wZTo6flJvcGUoKQogICAg
ICAgICAgICAgZmliZXIucm9wZSgpLT5kZXJlZigpOwogICAgICAgICBlbHNlCiAgICAgICAgICAg
ICBmaWJlci5zdHJpbmcoKS0+ZGVyZWYoKTsKKyAgICAgICAgZmliZXIgPSBGaWJlcihyZWludGVy
cHJldF9jYXN0PFVTdHJpbmc6OlJlcCo+KDB4ZmVlZGJlZWUpKTsKICAgICB9CiB9CiAKQEAgLTY1
LDEyICs2NywyMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY29weUNoYXJzKFVDaGFyKiBkZXN0CiAv
LyBWZWN0b3IgYmVmb3JlIHBlcmZvcm1pbmcgYW55IGNvbmNhdGVuYXRpb24sIGJ1dCBieSB3b3Jr
aW5nIGJhY2t3YXJkcyB3ZSBsaWtlbHkKIC8vIG9ubHkgZmlsbCB0aGUgcXVldWUgd2l0aCB0aGUg
bnVtYmVyIG9mIHN1YnN0cmluZ3MgYXQgYW55IGdpdmVuIGxldmVsIGluIGEKIC8vIHJvcGUtb2Yt
cm9wZXMuKQotdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGUoKSBjb25zdAordm9pZCBKU1N0cmlu
Zzo6cmVzb2x2ZVJvcGUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIEFTU0VSVChpc1Jv
cGUoKSk7CiAKICAgICAvLyBBbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGhvbGQgdGhlIGZpbmFsIHN0
cmluZywgcG9zaXRpb24gaW5pdGlhbGx5IHBvaW50cyB0byB0aGUgZW5kLgotICAgIFVDaGFyKiBi
dWZmZXIgPSBzdGF0aWNfY2FzdDxVQ2hhcio+KGZhc3RNYWxsb2MobV9sZW5ndGggKiBzaXplb2Yo
VUNoYXIpKSk7CisgICAgVUNoYXIqIGJ1ZmZlcjsKKyAgICBpZiAoIXRyeUZhc3RNYWxsb2MobV9s
ZW5ndGggKiBzaXplb2YoVUNoYXIpKS5nZXRWYWx1ZShidWZmZXIpKSB7CisgICAgICAgIG1fcm9w
ZS5jbGVhcigpOworICAgICAgICBBU1NFUlQoIWlzUm9wZSgpKTsKKyAgICAgICAgQVNTRVJUKG1f
dmFsdWUgPT0gVVN0cmluZygpKTsKKworICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJyb3IoZXhl
Yyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgVUNoYXIqIHBvc2l0aW9uID0gYnVmZmVy
ICsgbV9sZW5ndGg7CiAKICAgICAvLyBTdGFydCB3aXRoIHRoZSBjdXJyZW50IFJvcGUuCkBAIC05
Myw4ICsxMDMsMTYgQEAgdm9pZCBKU1N0cmluZzo6cmVzb2x2ZVJvcGUoKSBjb25zdAogICAgICAg
ICAgICAgY29weUNoYXJzKHBvc2l0aW9uLCBzdHJpbmctPmRhdGEoKSwgbGVuZ3RoKTsKIAogICAg
ICAgICAgICAgLy8gV2FzIHRoaXMgdGhlIGxhc3QgaXRlbSBpbiB0aGUgd29yayBxdWV1ZT8KLSAg
ICAgICAgICAgIGlmICh3b3JrUXVldWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGdvdG8g
YnJlYWtPdXRPZlR3b0xvb3BzOworICAgICAgICAgICAgaWYgKHdvcmtRdWV1ZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBDcmVhdGUgYSBzdHJpbmcgZnJvbSB0aGUgVUNoYXIgYnVm
ZmVyLCBjbGVhciB0aGUgcm9wZSBSZWZQdHIuCisgICAgICAgICAgICAgICAgQVNTRVJUKGJ1ZmZl
ciA9PSBwb3NpdGlvbik7CisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IFVTdHJpbmcoYnVmZmVy
LCBtX2xlbmd0aCwgZmFsc2UpOworICAgICAgICAgICAgICAgIG1fcm9wZS5jbGVhcigpOworCisg
ICAgICAgICAgICAgICAgQVNTRVJUKCFpc1JvcGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICAvLyBObyEgLSBzZXQgdGhlIG5leHQgaXRl
bSB1cCB0byBwcm9jZXNzLgogICAgICAgICAgICAgY3VycmVudEZpYmVyID0gd29ya1F1ZXVlLmxh
c3QoKTsKICAgICAgICAgICAgIHdvcmtRdWV1ZS5yZW1vdmVMYXN0KCk7CkBAIC0xMDUsMTQgKzEy
Myw2IEBAIHZvaWQgSlNTdHJpbmc6OnJlc29sdmVSb3BlKCkgY29uc3QKICAgICAgICAgQVNTRVJU
KGN1cnJlbnRGaWJlci5pc1JvcGUoKSk7CiAgICAgICAgIHJvcGUgPSBjdXJyZW50RmliZXIucm9w
ZSgpOwogICAgIH0KLWJyZWFrT3V0T2ZUd29Mb29wczoKLQotICAgIC8vIENyZWF0ZSBhIHN0cmlu
ZyBmcm9tIHRoZSBVQ2hhciBidWZmZXIsIGNsZWFyIHRoZSByb3BlIFJlZlB0ci4KLSAgICBBU1NF
UlQoYnVmZmVyID09IHBvc2l0aW9uKTsKLSAgICBtX3ZhbHVlID0gVVN0cmluZzo6UmVwOjpjcmVh
dGUoYnVmZmVyLCBtX2xlbmd0aCwgZmFsc2UpOwotICAgIG1fcm9wZS5jbGVhcigpOwotCi0gICAg
QVNTRVJUKCFpc1JvcGUoKSk7CiB9CiAKIEpTVmFsdWUgSlNTdHJpbmc6OnRvUHJpbWl0aXZlKEV4
ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0CkBAIC0xMjAsMTAgKzEzMCwx
MCBAQCBKU1ZhbHVlIEpTU3RyaW5nOjp0b1ByaW1pdGl2ZShFeGVjU3RhdGUqCiAgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8SlNTdHJpbmcqPih0aGlzKTsKIH0KIAotYm9vbCBKU1N0cmluZzo6Z2V0UHJp
bWl0aXZlTnVtYmVyKEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJiByZXN1bHQp
Citib29sIEpTU3RyaW5nOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiBleGVjLCBkb3Vi
bGUmIG51bWJlciwgSlNWYWx1ZSYgcmVzdWx0KQogewogICAgIHJlc3VsdCA9IHRoaXM7Ci0gICAg
bnVtYmVyID0gdmFsdWUoKS50b0RvdWJsZSgpOworICAgIG51bWJlciA9IHZhbHVlKGV4ZWMpLnRv
RG91YmxlKCk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC0xMzIsMTkgKzE0MiwxOSBAQCBi
b29sIEpTU3RyaW5nOjp0b0Jvb2xlYW4oRXhlY1N0YXRlKikgY29uCiAgICAgcmV0dXJuIG1fbGVu
Z3RoOwogfQogCi1kb3VibGUgSlNTdHJpbmc6OnRvTnVtYmVyKEV4ZWNTdGF0ZSopIGNvbnN0Citk
b3VibGUgSlNTdHJpbmc6OnRvTnVtYmVyKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAgICBy
ZXR1cm4gdmFsdWUoKS50b0RvdWJsZSgpOworICAgIHJldHVybiB2YWx1ZShleGVjKS50b0RvdWJs
ZSgpOwogfQogCi1VU3RyaW5nIEpTU3RyaW5nOjp0b1N0cmluZyhFeGVjU3RhdGUqKSBjb25zdAor
VVN0cmluZyBKU1N0cmluZzo6dG9TdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAg
IHJldHVybiB2YWx1ZSgpOworICAgIHJldHVybiB2YWx1ZShleGVjKTsKIH0KIAotVVN0cmluZyBK
U1N0cmluZzo6dG9UaGlzU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0CitVU3RyaW5nIEpTU3RyaW5n
Ojp0b1RoaXNTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVybiB2YWx1
ZSgpOworICAgIHJldHVybiB2YWx1ZShleGVjKTsKIH0KIAogSlNTdHJpbmcqIEpTU3RyaW5nOjp0
b1RoaXNKU1N0cmluZyhFeGVjU3RhdGUqKQpAQCAtMTk4LDcgKzIwOCw3IEBAIGJvb2wgSlNTdHJp
bmc6OmdldFN0cmluZ1Byb3BlcnR5RGVzY3JpcHQKICAgICBib29sIGlzU3RyaWN0VUludDMyOwog
ICAgIHVuc2lnbmVkIGkgPSBwcm9wZXJ0eU5hbWUudG9TdHJpY3RVSW50MzIoJmlzU3RyaWN0VUlu
dDMyKTsKICAgICBpZiAoaXNTdHJpY3RVSW50MzIgJiYgaSA8IG1fbGVuZ3RoKSB7Ci0gICAgICAg
IGRlc2NyaXB0b3Iuc2V0RGVzY3JpcHRvcihqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhleGVj
LCB2YWx1ZSgpLCBpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKKyAgICAgICAgZGVzY3JpcHRv
ci5zZXREZXNjcmlwdG9yKGpzU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKGV4ZWMsIHZhbHVlKGV4
ZWMpLCBpKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfQogICAgIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gNTE3
MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg2LDcgKzg2LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgICAgICAvLyBDcmVh
dGVzIGEgUm9wZSBjb21wcmlzaW5nIG9mICdyb3BlTGVuZ3RoJyBGaWJlcnMuCiAgICAgICAgICAg
ICAvLyBUaGUgUm9wZSBpcyBjb25zdHJ1Y3RlZCBpbiBhbiB1bmluaXRpYWxpemVkIHN0YXRlIC0g
aW5pdGlhbGl6ZSBtdXN0IGJlIGNhbGxlZCBmb3IgZWFjaCBGaWJlciBpbiB0aGUgUm9wZS4KLSAg
ICAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFJvcGU+IGNyZWF0ZSh1bnNpZ25lZCByb3BlTGVu
Z3RoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgKHJvcGVMZW5ndGgpIFJvcGUocm9wZUxlbmd0aCkp
OyB9CisgICAgICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxSb3BlPiBjcmVhdGVPck51bGwodW5z
aWduZWQgcm9wZUxlbmd0aCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB2b2lkKiBh
bGxvY2F0aW9uOworICAgICAgICAgICAgICAgIGlmICh0cnlGYXN0TWFsbG9jKHNpemVvZihSb3Bl
KSArIChyb3BlTGVuZ3RoIC0gMSkgKiBzaXplb2YoRmliZXIpKS5nZXRWYWx1ZShhbGxvY2F0aW9u
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoYWxsb2NhdGlvbikg
Um9wZShyb3BlTGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgIH5Sb3BlKCk7CiAKQEAgLTExNiw3ICsxMjIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKIAogICAgICAgICBwcml2YXRlOgogICAgICAgICAgICAgUm9wZSh1bnNpZ25lZCBy
b3BlTGVuZ3RoKSA6IG1fcm9wZUxlbmd0aChyb3BlTGVuZ3RoKSwgbV9zdHJpbmdMZW5ndGgoMCkg
e30KLSAgICAgICAgICAgIHZvaWQqIG9wZXJhdG9yIG5ldyhzaXplX3QsIHVuc2lnbmVkIHJvcGVM
ZW5ndGgpIHsgcmV0dXJuIGZhc3RNYWxsb2Moc2l6ZW9mKFJvcGUpICsgKHJvcGVMZW5ndGggLSAx
KSAqIHNpemVvZihVU3RyaW5nOjpSZXAqKSk7IH0KKyAgICAgICAgICAgIHZvaWQqIG9wZXJhdG9y
IG5ldyhzaXplX3QsIHZvaWQqIGluUGxhY2UpIHsgcmV0dXJuIGluUGxhY2U7IH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgdW5zaWduZWQgbV9yb3BlTGVuZ3RoOwogICAgICAgICAgICAgdW5z
aWduZWQgbV9zdHJpbmdMZW5ndGg7CkBAIC0xNTAsMTEgKzE1NiwxNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgICwgbV9yb3BlKHJvcGUpCiAgICAgICAgIHsKICAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgY29uc3QgVVN0cmluZyYgdmFsdWUoKSBjb25zdAorCisgICAgICAgIGNv
bnN0IFVTdHJpbmcmIHZhbHVlKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1fcm9wZSkKKyAgICAgICAgICAgICAgICByZXNvbHZlUm9wZShleGVjKTsK
KyAgICAgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgICAgICB9CisgICAgICAgIGNvbnN0IFVT
dHJpbmcgdHJ5R2V0VmFsdWUoKSBjb25zdAogICAgICAgICB7CiAgICAgICAgICAgICBpZiAobV9y
b3BlKQotICAgICAgICAgICAgICAgIHJlc29sdmVSb3BlKCk7CisgICAgICAgICAgICAgICAgVVN0
cmluZygpOwogICAgICAgICAgICAgcmV0dXJuIG1fdmFsdWU7CiAgICAgICAgIH0KICAgICAgICAg
dW5zaWduZWQgbGVuZ3RoKCkgeyByZXR1cm4gbV9sZW5ndGg7IH0KQEAgLTE2OCw3ICsxODAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBnZXRTdHJpbmdQcm9wZXJ0eURlc2NyaXB0
b3IoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eURl
c2NyaXB0b3ImKTsKIAogICAgICAgICBib29sIGNhbkdldEluZGV4KHVuc2lnbmVkIGkpIHsgcmV0
dXJuIGkgPCBtX2xlbmd0aDsgfQotICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXgoSlNHbG9iYWxE
YXRhKiwgdW5zaWduZWQpOworICAgICAgICBKU1N0cmluZyogZ2V0SW5kZXgoRXhlY1N0YXRlKiwg
dW5zaWduZWQpOwogCiAgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRl
U3RydWN0dXJlKEpTVmFsdWUgcHJvdG8pIHsgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3Rv
LCBUeXBlSW5mbyhTdHJpbmdUeXBlLCBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBOZWVk
c1RoaXNDb252ZXJzaW9uKSk7IH0KIApAQCAtMTc5LDcgKzE5MSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIHJlc29sdmVSb3BlKCkgY29u
c3Q7CisgICAgICAgIHZvaWQgcmVzb2x2ZVJvcGUoRXhlY1N0YXRlKikgY29uc3Q7CiAKICAgICAg
ICAgdmlydHVhbCBKU1ZhbHVlIHRvUHJpbWl0aXZlKEV4ZWNTdGF0ZSosIFByZWZlcnJlZFByaW1p
dGl2ZVR5cGUpIGNvbnN0OwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0UHJpbWl0aXZlTnVtYmVy
KEV4ZWNTdGF0ZSosIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJiB2YWx1ZSk7CkBAIC0yNDYsMTAg
KzI1OCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0
YSkgSlNTdHJpbmcoZ2xvYmFsRGF0YSwgcyk7CiAgICAgfQogCi0gICAgaW5saW5lIEpTU3RyaW5n
KiBKU1N0cmluZzo6Z2V0SW5kZXgoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCB1bnNpZ25lZCBp
KQorICAgIGlubGluZSBKU1N0cmluZyogSlNTdHJpbmc6OmdldEluZGV4KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgaSkKICAgICB7CiAgICAgICAgIEFTU0VSVChjYW5HZXRJbmRleChpKSk7Ci0g
ICAgICAgIHJldHVybiBqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhnbG9iYWxEYXRhLCB2YWx1
ZSgpLCBpKTsKKyAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKCZleGVj
LT5nbG9iYWxEYXRhKCksIHZhbHVlKGV4ZWMpLCBpKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNT
dHJpbmcqIGpzU3RyaW5nKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgVVN0cmluZyYg
cykKQEAgLTMxMiw3ICszMjQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgYm9vbCBpc1N0
cmljdFVJbnQzMjsKICAgICAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5TmFtZS50b1N0cmljdFVJ
bnQzMigmaXNTdHJpY3RVSW50MzIpOwogICAgICAgICBpZiAoaXNTdHJpY3RVSW50MzIgJiYgaSA8
IG1fbGVuZ3RoKSB7Ci0gICAgICAgICAgICBzbG90LnNldFZhbHVlKGpzU2luZ2xlQ2hhcmFjdGVy
U3Vic3RyaW5nKGV4ZWMsIHZhbHVlKCksIGkpKTsKKyAgICAgICAgICAgIHNsb3Quc2V0VmFsdWUo
anNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoZXhlYywgdmFsdWUoZXhlYyksIGkpKTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTMyMiw3ICszMzQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OmdldFN0cmluZ1By
b3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIHByb3BlcnR5TmFtZSwgUHJvcGVy
dHlTbG90JiBzbG90KQogICAgIHsKICAgICAgICAgaWYgKHByb3BlcnR5TmFtZSA8IG1fbGVuZ3Ro
KSB7Ci0gICAgICAgICAgICBzbG90LnNldFZhbHVlKGpzU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5n
KGV4ZWMsIHZhbHVlKCksIHByb3BlcnR5TmFtZSkpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1
ZShqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmluZyhleGVjLCB2YWx1ZShleGVjKSwgcHJvcGVydHlO
YW1lKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0zNDEsNyAr
MzUzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgaW5saW5lIFVTdHJpbmcgSlNWYWx1ZTo6dG9T
dHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKGlzU3RyaW5n
KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihhc0NlbGwoKSkt
PnZhbHVlKCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihhc0Nl
bGwoKSktPnZhbHVlKGV4ZWMpOwogICAgICAgICBpZiAoaXNJbnQzMigpKQogICAgICAgICAgICAg
cmV0dXJuIGV4ZWMtPmdsb2JhbERhdGEoKS5udW1lcmljU3RyaW5ncy5hZGQoYXNJbnQzMigpKTsK
ICAgICAgICAgaWYgKGlzRG91YmxlKCkpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAko
cmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDggKzEzNyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBi
b29sIGdldEJvb2xlYW4oKSBjb25zdDsgLy8gZmFsc2UgaWYgbm90IGEgYm9vbGVhbgogICAgICAg
ICBib29sIGdldE51bWJlcihkb3VibGUmKSBjb25zdDsKICAgICAgICAgZG91YmxlIHVuY2hlY2tl
ZEdldE51bWJlcigpIGNvbnN0OwotICAgICAgICBib29sIGdldFN0cmluZyhVU3RyaW5nJikgY29u
c3Q7Ci0gICAgICAgIFVTdHJpbmcgZ2V0U3RyaW5nKCkgY29uc3Q7IC8vIG51bGwgc3RyaW5nIGlm
IG5vdCBhIHN0cmluZworICAgICAgICBib29sIGdldFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFVT
dHJpbmcmKSBjb25zdDsKKyAgICAgICAgVVN0cmluZyBnZXRTdHJpbmcoRXhlY1N0YXRlKiBleGVj
KSBjb25zdDsgLy8gbnVsbCBzdHJpbmcgaWYgbm90IGEgc3RyaW5nCiAgICAgICAgIEpTT2JqZWN0
KiBnZXRPYmplY3QoKSBjb25zdDsgLy8gMCBpZiBub3QgYW4gb2JqZWN0CiAKICAgICAgICAgQ2Fs
bFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKQEAgLTE5Miw5ICsxOTIsOSBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIHYxLCBKU1ZhbHVlIHYyKTsKICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWxTbG93Q2FzZShF
eGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpOwogICAgICAgICBzdGF0aWMg
Ym9vbCBlcXVhbFNsb3dDYXNlSW5saW5lKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNW
YWx1ZSB2Mik7Ci0gICAgICAgIHN0YXRpYyBib29sIHN0cmljdEVxdWFsKEpTVmFsdWUgdjEsIEpT
VmFsdWUgdjIpOwotICAgICAgICBzdGF0aWMgYm9vbCBzdHJpY3RFcXVhbFNsb3dDYXNlKEpTVmFs
dWUgdjEsIEpTVmFsdWUgdjIpOwotICAgICAgICBzdGF0aWMgYm9vbCBzdHJpY3RFcXVhbFNsb3dD
YXNlSW5saW5lKEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpOworICAgICAgICBzdGF0aWMgYm9vbCBz
dHJpY3RFcXVhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpOworICAg
ICAgICBzdGF0aWMgYm9vbCBzdHJpY3RFcXVhbFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2MSwgSlNWYWx1ZSB2Mik7CisgICAgICAgIHN0YXRpYyBib29sIHN0cmljdEVxdWFsU2xv
d0Nhc2VJbmxpbmUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKTsKIAog
ICAgICAgICBKU1ZhbHVlIGdldEpTTnVtYmVyKCk7IC8vIEpTVmFsdWUoKSBpZiB0aGlzIGlzIG5v
dCBhIEpTTnVtYmVyIG9yIG51bWJlciBvYmplY3QKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1MTcwOCkK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChO
YXRpdmVFcnJvckNvbgogY29uc3QgQ2xhc3NJbmZvIE5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Omlu
Zm8gPSB7ICJGdW5jdGlvbiIsICZJbnRlcm5hbEZ1bmN0aW9uOjppbmZvLCAwLCAwIH07CiAKIE5h
dGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBl
eGVjLCBOb25OdWxsUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IHN0cnVjdHVyZSwgTmF0aXZlRXJyb3JQ
cm90b3R5cGUqIG5hdGl2ZUVycm9yUHJvdG90eXBlKQotICAgIDogSW50ZXJuYWxGdW5jdGlvbigm
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIoZXhlYywgbmF0aXZlRXJy
b3JQcm90b3R5cGUtPmdldERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSkuZ2V0U3Ry
aW5nKCkpKQorICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1
Y3R1cmUsIElkZW50aWZpZXIoZXhlYywgbmF0aXZlRXJyb3JQcm90b3R5cGUtPmdldERpcmVjdChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubmFtZSkuZ2V0U3RyaW5nKGV4ZWMpKSkKICAgICAsIG1fZXJy
b3JTdHJ1Y3R1cmUoRXJyb3JJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlKG5hdGl2ZUVycm9yUHJv
dG90eXBlKSkKIHsKICAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwg
anNOdW1iZXIoZXhlYywgMSksIERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsgLy8g
RUNNQSAxNS4xMS43LjUKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAko
cmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNiw5ICszNiw5IEBAIGJvb2wgSlNWYWx1ZTo6ZXF1YWxTbG93
Q2FzZShFeGVjU3RhdGUqIGUKICAgICByZXR1cm4gZXF1YWxTbG93Q2FzZUlubGluZShleGVjLCB2
MSwgdjIpOwogfQogCi1ib29sIEpTVmFsdWU6OnN0cmljdEVxdWFsU2xvd0Nhc2UoSlNWYWx1ZSB2
MSwgSlNWYWx1ZSB2MikKK2Jvb2wgSlNWYWx1ZTo6c3RyaWN0RXF1YWxTbG93Q2FzZShFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCiB7Ci0gICAgcmV0dXJuIHN0cmljdEVx
dWFsU2xvd0Nhc2VJbmxpbmUodjEsIHYyKTsKKyAgICByZXR1cm4gc3RyaWN0RXF1YWxTbG93Q2Fz
ZUlubGluZShleGVjLCB2MSwgdjIpOwogfQogCiBORVZFUl9JTkxJTkUgSlNWYWx1ZSB0aHJvd091
dE9mTWVtb3J5RXJyb3IoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9PcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cGVyYXRpb25zLmgJKHJldmlzaW9uIDUxNzA4KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBib29sIHMxID0gdjEuaXNTdHJpbmcoKTsKICAgICAgICAgICAgIGJv
b2wgczIgPSB2Mi5pc1N0cmluZygpOwogICAgICAgICAgICAgaWYgKHMxICYmIHMyKQotICAgICAg
ICAgICAgICAgIHJldHVybiBhc1N0cmluZyh2MSktPnZhbHVlKCkgPT0gYXNTdHJpbmcodjIpLT52
YWx1ZSgpOworICAgICAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyh2MSktPnZhbHVlKGV4ZWMp
ID09IGFzU3RyaW5nKHYyKS0+dmFsdWUoZXhlYyk7CiAKICAgICAgICAgICAgIGlmICh2MS5pc1Vu
ZGVmaW5lZE9yTnVsbCgpKSB7CiAgICAgICAgICAgICAgICAgaWYgKHYyLmlzVW5kZWZpbmVkT3JO
dWxsKCkpCkBAIC0xMTAsMTcgKzExMCwxNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICB9CiAKICAg
ICAvLyBFQ01BIDExLjkuMwotICAgIEFMV0FZU19JTkxJTkUgYm9vbCBKU1ZhbHVlOjpzdHJpY3RF
cXVhbFNsb3dDYXNlSW5saW5lKEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCisgICAgQUxXQVlTX0lO
TElORSBib29sIEpTVmFsdWU6OnN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQogICAgIHsKICAgICAgICAgQVNTRVJUKHYxLmlz
Q2VsbCgpICYmIHYyLmlzQ2VsbCgpKTsKIAogICAgICAgICBpZiAodjEuYXNDZWxsKCktPmlzU3Ry
aW5nKCkgJiYgdjIuYXNDZWxsKCktPmlzU3RyaW5nKCkpCi0gICAgICAgICAgICByZXR1cm4gYXNT
dHJpbmcodjEpLT52YWx1ZSgpID09IGFzU3RyaW5nKHYyKS0+dmFsdWUoKTsKKyAgICAgICAgICAg
IHJldHVybiBhc1N0cmluZyh2MSktPnZhbHVlKGV4ZWMpID09IGFzU3RyaW5nKHYyKS0+dmFsdWUo
ZXhlYyk7CiAKICAgICAgICAgcmV0dXJuIHYxID09IHYyOwogICAgIH0KIAotICAgIGlubGluZSBi
b29sIEpTVmFsdWU6OnN0cmljdEVxdWFsKEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCisgICAgaW5s
aW5lIGJvb2wgSlNWYWx1ZTo6c3RyaWN0RXF1YWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYx
LCBKU1ZhbHVlIHYyKQogICAgIHsKICAgICAgICAgaWYgKHYxLmlzSW50MzIoKSAmJiB2Mi5pc0lu
dDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gdjEgPT0gdjI7CkBAIC0xMzEsNyArMTMxLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmICghdjEuaXNDZWxsKCkgfHwgIXYyLmlzQ2VsbCgp
KQogICAgICAgICAgICAgcmV0dXJuIHYxID09IHYyOwogCi0gICAgICAgIHJldHVybiBzdHJpY3RF
cXVhbFNsb3dDYXNlSW5saW5lKHYxLCB2Mik7CisgICAgICAgIHJldHVybiBzdHJpY3RFcXVhbFNs
b3dDYXNlSW5saW5lKGV4ZWMsIHYxLCB2Mik7CiAgICAgfQogCiAgICAgaW5saW5lIGJvb2wganNM
ZXNzKENhbGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQpAQCAtMTQ2
LDcgKzE0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKICAgICAgICAgaWYgKGlzSlNTdHJp
bmcoZ2xvYmFsRGF0YSwgdjEpICYmIGlzSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdjIpKQotICAgICAg
ICAgICAgcmV0dXJuIGFzU3RyaW5nKHYxKS0+dmFsdWUoKSA8IGFzU3RyaW5nKHYyKS0+dmFsdWUo
KTsKKyAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyh2MSktPnZhbHVlKGNhbGxGcmFtZSkgPCBh
c1N0cmluZyh2MiktPnZhbHVlKGNhbGxGcmFtZSk7CiAKICAgICAgICAgSlNWYWx1ZSBwMTsKICAg
ICAgICAgSlNWYWx1ZSBwMjsKQEAgLTE1Niw3ICsxNTYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgaWYgKHdhc05vdFN0cmluZzEgfCB3YXNOb3RTdHJpbmcyKQogICAgICAgICAgICAgcmV0
dXJuIG4xIDwgbjI7CiAKLSAgICAgICAgcmV0dXJuIGFzU3RyaW5nKHAxKS0+dmFsdWUoKSA8IGFz
U3RyaW5nKHAyKS0+dmFsdWUoKTsKKyAgICAgICAgcmV0dXJuIGFzU3RyaW5nKHAxKS0+dmFsdWUo
Y2FsbEZyYW1lKSA8IGFzU3RyaW5nKHAyKS0+dmFsdWUoY2FsbEZyYW1lKTsKICAgICB9CiAKICAg
ICBpbmxpbmUgYm9vbCBqc0xlc3NFcShDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNWYWx1ZSB2MSwg
SlNWYWx1ZSB2MikKQEAgLTE3MSw3ICsxNzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCk7CiAg
ICAgICAgIGlmIChpc0pTU3RyaW5nKGdsb2JhbERhdGEsIHYxKSAmJiBpc0pTU3RyaW5nKGdsb2Jh
bERhdGEsIHYyKSkKLSAgICAgICAgICAgIHJldHVybiAhKGFzU3RyaW5nKHYyKS0+dmFsdWUoKSA8
IGFzU3RyaW5nKHYxKS0+dmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4gIShhc1N0cmluZyh2
MiktPnZhbHVlKGNhbGxGcmFtZSkgPCBhc1N0cmluZyh2MSktPnZhbHVlKGNhbGxGcmFtZSkpOwog
CiAgICAgICAgIEpTVmFsdWUgcDE7CiAgICAgICAgIEpTVmFsdWUgcDI7CkBAIC0xODEsNyArMTgx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGlmICh3YXNOb3RTdHJpbmcxIHwgd2FzTm90
U3RyaW5nMikKICAgICAgICAgICAgIHJldHVybiBuMSA8PSBuMjsKIAotICAgICAgICByZXR1cm4g
IShhc1N0cmluZyhwMiktPnZhbHVlKCkgPCBhc1N0cmluZyhwMSktPnZhbHVlKCkpOworICAgICAg
ICByZXR1cm4gIShhc1N0cmluZyhwMiktPnZhbHVlKGNhbGxGcmFtZSkgPCBhc1N0cmluZyhwMSkt
PnZhbHVlKGNhbGxGcmFtZSkpOwogICAgIH0KIAogICAgIC8vIEZhc3QtcGF0aCBjaG9pY2VzIGhl
cmUgYXJlIGJhc2VkIG9uIGZyZXF1ZW5jeSBkYXRhIGZyb20gU3VuU3BpZGVyOgpAQCAtMjA1LDE0
ICsyMDUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgbGVmdElzU3RyaW5nID0g
djEuaXNTdHJpbmcoKTsKICAgICAgICAgaWYgKGxlZnRJc1N0cmluZyAmJiB2Mi5pc1N0cmluZygp
KSB7CiAgICAgICAgICAgICBpZiAoYXNTdHJpbmcodjEpLT5pc1JvcGUoKSB8fCBhc1N0cmluZyh2
MiktPmlzUm9wZSgpKSB7Ci0gICAgICAgICAgICAgICAgUmVmUHRyPEpTU3RyaW5nOjpSb3BlPiBy
b3BlID0gSlNTdHJpbmc6OlJvcGU6OmNyZWF0ZSgyKTsKKyAgICAgICAgICAgICAgICBSZWZQdHI8
SlNTdHJpbmc6OlJvcGU+IHJvcGUgPSBKU1N0cmluZzo6Um9wZTo6Y3JlYXRlT3JOdWxsKDIpOwor
ICAgICAgICAgICAgICAgIGlmIChVTkxJS0VMWSghcm9wZSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgICAgICAg
ICByb3BlLT5pbml0aWFsaXplRmliZXIoMCwgYXNTdHJpbmcodjEpKTsKICAgICAgICAgICAgICAg
ICByb3BlLT5pbml0aWFsaXplRmliZXIoMSwgYXNTdHJpbmcodjIpKTsKICAgICAgICAgICAgICAg
ICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCk7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5ldyAoZ2xvYmFsRGF0YSkgSlNTdHJpbmcoZ2xvYmFsRGF0
YSwgcm9wZS5yZWxlYXNlKCkpOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBSZWZQdHI8
VVN0cmluZzo6UmVwPiB2YWx1ZSA9IGNvbmNhdGVuYXRlKGFzU3RyaW5nKHYxKS0+dmFsdWUoKS5y
ZXAoKSwgYXNTdHJpbmcodjIpLT52YWx1ZSgpLnJlcCgpKTsKKyAgICAgICAgICAgIFJlZlB0cjxV
U3RyaW5nOjpSZXA+IHZhbHVlID0gY29uY2F0ZW5hdGUoYXNTdHJpbmcodjEpLT52YWx1ZShjYWxs
RnJhbWUpLnJlcCgpLCBhc1N0cmluZyh2MiktPnZhbHVlKGNhbGxGcmFtZSkucmVwKCkpOwogICAg
ICAgICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1l
bW9yeUVycm9yKGNhbGxGcmFtZSk7CiAgICAgICAgICAgICByZXR1cm4ganNTdHJpbmcoY2FsbEZy
YW1lLCB2YWx1ZS5yZWxlYXNlKCkpOwpAQCAtMjIwLDggKzIyMiw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIGlmIChyaWdodElzTnVtYmVyICYgbGVmdElzU3RyaW5nKSB7CiAgICAgICAg
ICAgICBSZWZQdHI8VVN0cmluZzo6UmVwPiB2YWx1ZSA9IHYyLmlzSW50MzIoKSA/Ci0gICAgICAg
ICAgICAgICAgY29uY2F0ZW5hdGUoYXNTdHJpbmcodjEpLT52YWx1ZSgpLnJlcCgpLCB2Mi5hc0lu
dDMyKCkpIDoKLSAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZShhc1N0cmluZyh2MSktPnZhbHVl
KCkucmVwKCksIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZShhc1N0cmluZyh2
MSktPnZhbHVlKGNhbGxGcmFtZSkucmVwKCksIHYyLmFzSW50MzIoKSkgOgorICAgICAgICAgICAg
ICAgIGNvbmNhdGVuYXRlKGFzU3RyaW5nKHYxKS0+dmFsdWUoY2FsbEZyYW1lKS5yZXAoKSwgcmln
aHQpOwogCiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiB0
aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKQEAgLTMwNiw3ICszMDgsOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICB7CiAgICAgICAgIEFTU0VSVChjb3VudCA+PSAzKTsKIAotICAgICAg
ICBSZWZQdHI8SlNTdHJpbmc6OlJvcGU+IHJvcGUgPSBKU1N0cmluZzo6Um9wZTo6Y3JlYXRlKGNv
dW50KTsKKyAgICAgICAgUmVmUHRyPEpTU3RyaW5nOjpSb3BlPiByb3BlID0gSlNTdHJpbmc6OlJv
cGU6OmNyZWF0ZU9yTnVsbChjb3VudCk7CisgICAgICAgIGlmIChVTkxJS0VMWSghcm9wZSkpCisg
ICAgICAgICAgICByZXR1cm4gdGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxGcmFtZSk7CiAKICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKICAgICAgICAgICAg
IEpTVmFsdWUgdiA9IHN0cmluZ3NbaV0uanNWYWx1ZSgpOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmNwcAkocmV2aXNpb24gNTE3MDgpCisrKyBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MywxNSArMTUzLDE1IEBAIHZvaWQgUHJvcGVydHlEZXNjcmlwdG9yOjpzZXRHZXR0
ZXIoSlNWYWwKICAgICBtX2F0dHJpYnV0ZXMgJj0gflJlYWRPbmx5OwogfQogCi1ib29sIFByb3Bl
cnR5RGVzY3JpcHRvcjo6ZXF1YWxUbyhjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIG90aGVyKSBj
b25zdAorYm9vbCBQcm9wZXJ0eURlc2NyaXB0b3I6OmVxdWFsVG8oRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXIu
bV92YWx1ZSA9PSBtX3ZhbHVlIHx8CiAgICAgICAgICFvdGhlci5tX2dldHRlciA9PSBtX2dldHRl
ciB8fAogICAgICAgICAhb3RoZXIubV9zZXR0ZXIgPT0gbV9zZXR0ZXIpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gKCFtX3ZhbHVlIHx8IEpTVmFsdWU6OnN0cmljdEVxdWFsKG90
aGVyLm1fdmFsdWUsIG1fdmFsdWUpKSAmJiAKLSAgICAgICAgICAgKCFtX2dldHRlciB8fCBKU1Zh
bHVlOjpzdHJpY3RFcXVhbChvdGhlci5tX2dldHRlciwgbV9nZXR0ZXIpKSAmJiAKLSAgICAgICAg
ICAgKCFtX3NldHRlciB8fCBKU1ZhbHVlOjpzdHJpY3RFcXVhbChvdGhlci5tX3NldHRlciwgbV9z
ZXR0ZXIpKSAmJgorICAgIHJldHVybiAoIW1fdmFsdWUgfHwgSlNWYWx1ZTo6c3RyaWN0RXF1YWwo
ZXhlYywgb3RoZXIubV92YWx1ZSwgbV92YWx1ZSkpICYmIAorICAgICAgICAgICAoIW1fZ2V0dGVy
IHx8IEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIG90aGVyLm1fZ2V0dGVyLCBtX2dldHRlcikp
ICYmIAorICAgICAgICAgICAoIW1fc2V0dGVyIHx8IEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMs
IG90aGVyLm1fc2V0dGVyLCBtX3NldHRlcikpICYmCiAgICAgICAgICAgIGF0dHJpYnV0ZXNFcXVh
bChvdGhlcik7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNj
cmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURl
c2NyaXB0b3IuaAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1By
b3BlcnR5RGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBib29sIGNvbmZpZ3VyYWJsZVByZXNlbnQoKSBjb25zdCB7IHJl
dHVybiBtX3NlZW5BdHRyaWJ1dGVzICYgQ29uZmlndXJhYmxlUHJlc2VudDsgfQogICAgICAgICBi
b29sIHNldHRlclByZXNlbnQoKSBjb25zdCB7IHJldHVybiBtX3NldHRlcjsgfQogICAgICAgICBi
b29sIGdldHRlclByZXNlbnQoKSBjb25zdCB7IHJldHVybiBtX2dldHRlcjsgfQotICAgICAgICBi
b29sIGVxdWFsVG8oY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBvdGhlcikgY29uc3Q7CisgICAg
ICAgIGJvb2wgZXF1YWxUbyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRv
ciYgb3RoZXIpIGNvbnN0OwogICAgICAgICBib29sIGF0dHJpYnV0ZXNFcXVhbChjb25zdCBQcm9w
ZXJ0eURlc2NyaXB0b3ImIG90aGVyKSBjb25zdDsKICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRl
c1dpdGhPdmVycmlkZShjb25zdCBQcm9wZXJ0eURlc2NyaXB0b3ImIG90aGVyKSBjb25zdDsKICAg
ICBwcml2YXRlOgpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBl
LmNwcAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cmluZ1By
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNCw3ICsyMjQsNyBAQCBzdGF0aWMgaW5s
aW5lIGludCBsb2NhbGVDb21wYXJlKGNvbnN0IFVTCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3Ry
aW5nUHJvdG9GdW5jUmVwbGFjZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CiAgICAgSlNTdHJpbmcqIHNvdXJjZVZh
bCA9IHRoaXNWYWx1ZS50b1RoaXNKU1N0cmluZyhleGVjKTsKLSAgICBjb25zdCBVU3RyaW5nJiBz
b3VyY2UgPSBzb3VyY2VWYWwtPnZhbHVlKCk7CisgICAgY29uc3QgVVN0cmluZyYgc291cmNlID0g
c291cmNlVmFsLT52YWx1ZShleGVjKTsKIAogICAgIEpTVmFsdWUgcGF0dGVybiA9IGFyZ3MuYXQo
MCk7CiAKQEAgLTY5Nyw3ICs2OTcsNyBAQCBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJv
dG9GdW5jU3ViCiBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgc3RyaW5nUHJvdG9GdW5jVG9Mb3dlckNh
c2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBB
cmdMaXN0JikKIHsKICAgICBKU1N0cmluZyogc1ZhbCA9IHRoaXNWYWx1ZS50b1RoaXNKU1N0cmlu
ZyhleGVjKTsKLSAgICBjb25zdCBVU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoKTsKKyAgICBjb25z
dCBVU3RyaW5nJiBzID0gc1ZhbC0+dmFsdWUoZXhlYyk7CiAKICAgICBpbnQgc1NpemUgPSBzLnNp
emUoKTsKICAgICBpZiAoIXNTaXplKQpAQCAtNzMxLDcgKzczMSw3IEBAIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0wKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQ
cm90b0Z1bmNUb1VwcGVyQ2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSB0
aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEpTU3RyaW5nKiBzVmFsID0gdGhpc1Zh
bHVlLnRvVGhpc0pTU3RyaW5nKGV4ZWMpOwotICAgIGNvbnN0IFVTdHJpbmcmIHMgPSBzVmFsLT52
YWx1ZSgpOworICAgIGNvbnN0IFVTdHJpbmcmIHMgPSBzVmFsLT52YWx1ZShleGVjKTsKIAogICAg
IGludCBzU2l6ZSA9IHMuc2l6ZSgpOwogICAgIGlmICghc1NpemUpCg==
</data>
<flag name="review"
          id="26186"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44427</attachid>
            <date>2009-12-07 13:09:50 -0800</date>
            <delta_ts>2009-12-07 13:14:39 -0800</delta_ts>
            <desc>Oooops, with required webcore/webkit changes.</desc>
            <filename>patch.tryropewcwk.txt</filename>
            <type>text/plain</type>
            <size>68426</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDUxNzMwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTggQEAKKzIwMDktMTItMDUgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0zMjE4NAorICAgICAgICBIYW5kbGUgb3V0LW9mLW1lbW9yeSBjb25kaXRpb25z
IHdpdGggSlNDIFJvcGVzIHdpdGggYSBKUyBleGNlcHRpb24sIHJhdGhlciB0aGFuIGNyYXNoaW5n
LgorICAgICAgICBTd2l0Y2ggZnJvbSB1c2luZyBmYXN0TWFsbG9jIHRvIHRyeUZhc3RNYWxsb2Ms
IHBhc3MgYW4gRXhlY1N0YXRlIHRvIHJlY29yZCB0aGUgZXhjZXB0aW9uIG9uLgorCisgICAgICAg
ICogQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaDoKKyAgICAgICAgKEpTQzo6Ojp0b1N0
cmluZyk6CisgICAgICAgICogQVBJL0pTVmFsdWVSZWYuY3BwOgorICAgICAgICAoSlNWYWx1ZUlz
U3RyaWN0RXF1YWwpOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDoKKyAgICAgICAgKiBi
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdEVxdWFsaXR5T3ApOgorICAgICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2Vy
Q2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxsRnJhbWU6OmZ1bmN0aW9u
TmFtZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpjYWxjdWxhdGVkRnVuY3Rp
b25OYW1lKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAg
IChKU0M6OkludGVycHJldGVyOjpjYWxsRXZhbCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVy
Ojpwcml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAgICAg
KEpTQzo6REVGSU5FX1NUVUJfRlVOQ1RJT04pOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVH
ZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlR2VuZXJhdG9yOjphZGRQYXJlbnRG
b3JDb25zb2xlU3RhcnQpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZXI6OndpbGxFeGVjdXRlKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6
OmRpZEV4ZWN1dGUpOgorICAgICAgICAoSlNDOjpQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZp
ZXIpOgorICAgICAgICAoSlNDOjpjcmVhdGVDYWxsSWRlbnRpZmllckZyb21GdW5jdGlvbkltcCk6
CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZXIuaDoKKyAgICAgICAgKiBydW50aW1lL0FycmF5
UHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNJbmRleE9mKToKKyAg
ICAgICAgKEpTQzo6YXJyYXlQcm90b0Z1bmNMYXN0SW5kZXhPZik6CisgICAgICAgICogcnVudGlt
ZS9EYXRlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpjb25zdHJ1Y3REYXRlKToKKyAg
ICAgICAgKiBydW50aW1lL0Z1bmN0aW9uUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZnVu
Y3Rpb25Qcm90b0Z1bmNUb1N0cmluZyk6CisgICAgICAgICogcnVudGltZS9JbnRlcm5hbEZ1bmN0
aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJuYWxGdW5jdGlvbjo6bmFtZSk6CisgICAgICAg
IChKU0M6OkludGVybmFsRnVuY3Rpb246OmRpc3BsYXlOYW1lKToKKyAgICAgICAgKEpTQzo6SW50
ZXJuYWxGdW5jdGlvbjo6Y2FsY3VsYXRlZERpc3BsYXlOYW1lKToKKyAgICAgICAgKiBydW50aW1l
L0ludGVybmFsRnVuY3Rpb24uaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6Z2V0U3RyaW5nKToKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5o
OgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjpnZXRTdHJpbmcpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNPTk9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OmdhcCk6CisgICAgICAgIChKU0M6OlN0cmlu
Z2lmaWVyOjpTdHJpbmdpZmllcik6CisgICAgICAgIChKU0M6OlN0cmluZ2lmaWVyOjphcHBlbmRT
dHJpbmdpZmllZFZhbHVlKToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAg
ICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6SlNP
YmplY3Q6OnB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmpl
Y3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOgorICAg
ICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpnZXQpOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTdHJpbmcuY3BwOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Um9wZTo6flJvcGUpOgor
ICAgICAgICAoSlNDOjpKU1N0cmluZzo6cmVzb2x2ZVJvcGUpOgorICAgICAgICAoSlNDOjpKU1N0
cmluZzo6Z2V0UHJpbWl0aXZlTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvTnVt
YmVyKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRvU3RyaW5nKToKKyAgICAgICAgKEpTQzo6
SlNTdHJpbmc6OnRvVGhpc1N0cmluZyk6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpnZXRTdHJp
bmdQcm9wZXJ0eURlc2NyaXB0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuaDoKKyAg
ICAgICAgKEpTQzo6SlNTdHJpbmc6OlJvcGU6OmNyZWF0ZU9yTnVsbCk6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nOjpSb3BlOjpvcGVyYXRvciBuZXcpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6
dmFsdWUpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6dHJ5R2V0VmFsdWUpOgorICAgICAgICAo
SlNDOjpKU1N0cmluZzo6Z2V0SW5kZXgpOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Z2V0U3Ry
aW5nUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9TdHJpbmcpOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNWYWx1ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6Ok5hdGl2ZUVycm9yQ29uc3RydWN0b3I6Ok5h
dGl2ZUVycm9yQ29uc3RydWN0b3IpOgorICAgICAgICAqIHJ1bnRpbWUvT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnN0cmljdEVxdWFsU2xvd0Nhc2UpOgorICAgICAgICAq
IHJ1bnRpbWUvT3BlcmF0aW9ucy5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjplcXVhbFNsb3dD
YXNlSW5saW5lKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6c3RyaWN0RXF1YWxTbG93Q2FzZUlu
bGluZSk6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OnN0cmljdEVxdWFsKToKKyAgICAgICAgKEpT
Qzo6anNMZXNzKToKKyAgICAgICAgKEpTQzo6anNMZXNzRXEpOgorICAgICAgICAoSlNDOjpqc0Fk
ZCk6CisgICAgICAgIChKU0M6OmNvbmNhdGVuYXRlU3RyaW5ncyk6CisgICAgICAgICogcnVudGlt
ZS9Qcm9wZXJ0eURlc2NyaXB0b3IuY3BwOgorICAgICAgICAoSlNDOjpQcm9wZXJ0eURlc2NyaXB0
b3I6OmVxdWFsVG8pOgorICAgICAgICAqIHJ1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmg6Cisg
ICAgICAgICogcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpzdHJp
bmdQcm90b0Z1bmNSZXBsYWNlKToKKyAgICAgICAgKEpTQzo6c3RyaW5nUHJvdG9GdW5jVG9Mb3dl
ckNhc2UpOgorICAgICAgICAoSlNDOjpzdHJpbmdQcm90b0Z1bmNUb1VwcGVyQ2FzZSk6CisKIDIw
MDktMTItMDQgIEtlbnQgSGFuc2VuICA8a2VudC5oYW5zZW5Abm9raWEuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IERhcmluIEFkbGVyLgpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4
cAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNyBAQCBfX1pOM0pTQzE1SlNXcmFwcGVyT2Jq
ZWN0MTJtYXJrQ2hpbGRyZW5FCiBfX1pOM0pTQzE1Y3JlYXRlVHlwZUVycm9yRVBOU185RXhlY1N0
YXRlRVBLYwogX19aTjNKU0MxNXRvSW50MzJTbG93Q2FzZUVkUmIKIF9fWk4zSlNDMTZJbnRlcm5h
bEZ1bmN0aW9uNGluZm9FCi1fX1pOM0pTQzE2SW50ZXJuYWxGdW5jdGlvbjRuYW1lRVBOU18xMkpT
R2xvYmFsRGF0YUUKK19fWk4zSlNDMTZJbnRlcm5hbEZ1bmN0aW9uNG5hbWVFUE5TXzlFeGVjU3Rh
dGVFCiBfX1pOM0pTQzE2SW50ZXJuYWxGdW5jdGlvbkMyRVBOU18xMkpTR2xvYmFsRGF0YUVOM1dU
RjE3Tm9uTnVsbFBhc3NSZWZQdHJJTlNfOVN0cnVjdHVyZUVFRVJLTlNfMTBJZGVudGlmaWVyRQog
X19aTjNKU0MxNkpTVmFyaWFibGVPYmplY3QxNGRlbGV0ZVByb3BlcnR5RVBOU185RXhlY1N0YXRl
RVJLTlNfMTBJZGVudGlmaWVyRQogX19aTjNKU0MxNkpTVmFyaWFibGVPYmplY3QxNHN5bWJvbFRh
YmxlR2V0RVJLTlNfMTBJZGVudGlmaWVyRVJOU18xOFByb3BlcnR5RGVzY3JpcHRvckUKQEAgLTM3
Nyw5ICszNzcsOSBAQCBfX1pOSzNKU0M2SlNDZWxsOHRvTnVtYmVyRVBOU185RXhlY1N0YXRlCiBf
X1pOSzNKU0M2SlNDZWxsOHRvT2JqZWN0RVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDNkpTQ2Vs
bDh0b1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzZKU0NlbGw5Y2xhc3NJbmZvRXYK
LV9fWk5LM0pTQzZKU0NlbGw5Z2V0U3RyaW5nRVJOU183VVN0cmluZ0UKLV9fWk5LM0pTQzZKU0Nl
bGw5Z2V0U3RyaW5nRXYKIF9fWk5LM0pTQzZKU0NlbGw5Z2V0VUludDMyRVJqCitfX1pOSzNKU0M2
SlNDZWxsOWdldFN0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKK19fWk5LM0pTQzZKU0NlbGw5Z2V0U3Ry
aW5nRVBOU185RXhlY1N0YXRlRVJOU183VVN0cmluZ0UKIF9fWk5LM0pTQzZKU0NlbGw5dG9Cb29s
ZWFuRVBOU185RXhlY1N0YXRlRQogX19aTkszSlNDN0FyZ0xpc3Q4Z2V0U2xpY2VFaVJTMF8KIF9f
Wk5LM0pTQzdKU1ZhbHVlMTZ0b09iamVjdFNsb3dDYXNlRVBOU185RXhlY1N0YXRlRQpAQCAtNDAz
LDcgKzQwMyw3IEBAIF9fWk5LM0pTQzhKU09iamVjdDh0b09iamVjdEVQTlNfOUV4ZWNTdGEKIF9f
Wk5LM0pTQzhKU09iamVjdDh0b1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzhKU09i
amVjdDljbGFzc05hbWVFdgogX19aTkszSlNDOEpTT2JqZWN0OXRvQm9vbGVhbkVQTlNfOUV4ZWNT
dGF0ZUUKLV9fWk5LM0pTQzhKU1N0cmluZzExcmVzb2x2ZVJvcGVFdgorX19aTkszSlNDOEpTU3Ry
aW5nMTFyZXNvbHZlUm9wZUVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzlIYXNoVGFibGUxMWNy
ZWF0ZVRhYmxlRVBOU18xMkpTR2xvYmFsRGF0YUUKIF9fWk5LM0pTQzlIYXNoVGFibGUxMWRlbGV0
ZVRhYmxlRXYKIF9fWk5LM1dURjhDb2xsYXRvcjdjb2xsYXRlRVBLdG1TMl9tCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9BUEkvSlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmgJKHJldmlzaW9u
IDUxNzA4KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDY3LDcgKzQ2Nyw3IEBAIFVTdHJpbmcgSlNDYWxsYmFja09i
amVjdDxCYXNlPjo6dG9TdHJpbmcKICAgICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRv
SlMoZXhlYywgdmFsdWUpLmdldFN0cmluZygpOworICAgICAgICAgICAgICAgIHJldHVybiB0b0pT
KGV4ZWMsIHZhbHVlKS5nZXRTdHJpbmcoZXhlYyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgIHJldHVybiBCYXNlOjp0b1N0cmluZyhleGVjKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FQ
SS9KU1ZhbHVlUmVmLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9BUEkvSlNWYWx1
ZVJlZi5jcHAJKHJldmlzaW9uIDUxNzA4KQorKysgSmF2YVNjcmlwdENvcmUvQVBJL0pTVmFsdWVS
ZWYuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNyArMTY5LDcgQEAgYm9vbCBKU1ZhbHVlSXNT
dHJpY3RFcXVhbChKU0NvbnRleHRSZWYgYwogICAgIEpTVmFsdWUganNBID0gdG9KUyhleGVjLCBh
KTsKICAgICBKU1ZhbHVlIGpzQiA9IHRvSlMoZXhlYywgYik7CiAKLSAgICByZXR1cm4gSlNWYWx1
ZTo6c3RyaWN0RXF1YWwoanNBLCBqc0IpOworICAgIHJldHVybiBKU1ZhbHVlOjpzdHJpY3RFcXVh
bChleGVjLCBqc0EsIGpzQik7CiB9CiAKIGJvb2wgSlNWYWx1ZUlzSW5zdGFuY2VPZkNvbnN0cnVj
dG9yKEpTQ29udGV4dFJlZiBjdHgsIEpTVmFsdWVSZWYgdmFsdWUsIEpTT2JqZWN0UmVmIGNvbnN0
cnVjdG9yLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDUxNzA4KQor
KysgSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTA2LDcgKzkwNiw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0RXF1YWwKICAgICAgICAgICAgICYmIHNyYzEtPmlzVGVtcG9yYXJ5KCkKICAgICAg
ICAgICAgICYmIG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJbmRleChzcmMyLT5pbmRl
eCgpKQogICAgICAgICAgICAgJiYgbV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+
aW5kZXgoKSkuanNWYWx1ZSgpLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFVTdHJp
bmcmIHZhbHVlID0gYXNTdHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+
aW5kZXgoKSkuanNWYWx1ZSgpKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIGNvbnN0IFVTdHJpbmcm
IHZhbHVlID0gYXNTdHJpbmcobV9jb2RlQmxvY2stPmNvbnN0YW50UmVnaXN0ZXIoc3JjMi0+aW5k
ZXgoKSkuanNWYWx1ZSgpKS0+dHJ5R2V0VmFsdWUoKTsKICAgICAgICAgICAgIGlmICh2YWx1ZSA9
PSAidW5kZWZpbmVkIikgewogICAgICAgICAgICAgICAgIHJld2luZFVuYXJ5T3AoKTsKICAgICAg
ICAgICAgICAgICBlbWl0T3Bjb2RlKG9wX2lzX3VuZGVmaW5lZCk7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCShyZXZpc2lvbiA1MTcwOCkK
KysrIEphdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBjb25zdCBVU3RyaW5nKiBEZWJ1Z2dlckNhbGxGcmFt
ZTo6ZnVuY3RpCiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKG1fY2FsbEZy
YW1lLT5jYWxsZWUoKSk7CiAgICAgaWYgKCFmdW5jdGlvbikKICAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuICZmdW5jdGlvbi0+bmFtZSgmbV9jYWxsRnJhbWUtPmdsb2JhbERhdGEoKSk7Cisg
ICAgcmV0dXJuICZmdW5jdGlvbi0+bmFtZShtX2NhbGxGcmFtZSk7CiB9CiAgICAgCiBVU3RyaW5n
IERlYnVnZ2VyQ2FsbEZyYW1lOjpjYWxjdWxhdGVkRnVuY3Rpb25OYW1lKCkgY29uc3QKQEAgLTU1
LDcgKzU1LDcgQEAgVVN0cmluZyBEZWJ1Z2dlckNhbGxGcmFtZTo6Y2FsY3VsYXRlZEZ1bgogICAg
IEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gYXNGdW5jdGlvbihtX2NhbGxGcmFtZS0+Y2FsbGVlKCkp
OwogICAgIGlmICghZnVuY3Rpb24pCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBmdW5j
dGlvbi0+Y2FsY3VsYXRlZERpc3BsYXlOYW1lKCZtX2NhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpKTsK
KyAgICByZXR1cm4gZnVuY3Rpb24tPmNhbGN1bGF0ZWREaXNwbGF5TmFtZShtX2NhbGxGcmFtZSk7
CiB9CiAKIERlYnVnZ2VyQ2FsbEZyYW1lOjpUeXBlIERlYnVnZ2VyQ2FsbEZyYW1lOjp0eXBlKCkg
Y29uc3QKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJ
KHJldmlzaW9uIDUxNzA4KQorKysgSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDAsNyArMzAwLDcgQEAgTkVWRVJfSU5MSU5FIEpT
VmFsdWUgSW50ZXJwcmV0ZXI6OmNhbGxFdgogICAgIGlmICghcHJvZ3JhbS5pc1N0cmluZygpKQog
ICAgICAgICByZXR1cm4gcHJvZ3JhbTsKIAotICAgIFVTdHJpbmcgcHJvZ3JhbVNvdXJjZSA9IGFz
U3RyaW5nKHByb2dyYW0pLT52YWx1ZSgpOworICAgIFVTdHJpbmcgcHJvZ3JhbVNvdXJjZSA9IGFz
U3RyaW5nKHByb2dyYW0pLT52YWx1ZShjYWxsRnJhbWUpOwogCiAgICAgTGl0ZXJhbFBhcnNlciBw
cmVwYXJzZXIoY2FsbEZyYW1lLCBwcm9ncmFtU291cmNlLCBMaXRlcmFsUGFyc2VyOjpOb25TdHJp
Y3RKU09OKTsKICAgICBpZiAoSlNWYWx1ZSBwYXJzZWRPYmplY3QgPSBwcmVwYXJzZXIudHJ5TGl0
ZXJhbFBhcnNlKCkpCkBAIC0xMzA2LDcgKzEzMDYsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgIGludCBkc3QgPSB2UENbMV0udS5vcGVyYW5kOwog
ICAgICAgICBKU1ZhbHVlIHNyYzEgPSBjYWxsRnJhbWUtPnIodlBDWzJdLnUub3BlcmFuZCkuanNW
YWx1ZSgpOwogICAgICAgICBKU1ZhbHVlIHNyYzIgPSBjYWxsRnJhbWUtPnIodlBDWzNdLnUub3Bl
cmFuZCkuanNWYWx1ZSgpOwotICAgICAgICBjYWxsRnJhbWUtPnIoZHN0KSA9IGpzQm9vbGVhbihK
U1ZhbHVlOjpzdHJpY3RFcXVhbChzcmMxLCBzcmMyKSk7CisgICAgICAgIGNhbGxGcmFtZS0+cihk
c3QpID0ganNCb29sZWFuKEpTVmFsdWU6OnN0cmljdEVxdWFsKGNhbGxGcmFtZSwgc3JjMSwgc3Jj
MikpOwogCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3N0cmljdGVxKTsKICAgICAg
ICAgTkVYVF9JTlNUUlVDVElPTigpOwpAQCAtMTMyMSw3ICsxMzIxLDcgQEAgSlNWYWx1ZSBJbnRl
cnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICBpbnQgZHN0ID0gdlBDWzFdLnUu
b3BlcmFuZDsKICAgICAgICAgSlNWYWx1ZSBzcmMxID0gY2FsbEZyYW1lLT5yKHZQQ1syXS51Lm9w
ZXJhbmQpLmpzVmFsdWUoKTsKICAgICAgICAgSlNWYWx1ZSBzcmMyID0gY2FsbEZyYW1lLT5yKHZQ
Q1szXS51Lm9wZXJhbmQpLmpzVmFsdWUoKTsKLSAgICAgICAgY2FsbEZyYW1lLT5yKGRzdCkgPSBq
c0Jvb2xlYW4oIUpTVmFsdWU6OnN0cmljdEVxdWFsKHNyYzEsIHNyYzIpKTsKKyAgICAgICAgY2Fs
bEZyYW1lLT5yKGRzdCkgPSBqc0Jvb2xlYW4oIUpTVmFsdWU6OnN0cmljdEVxdWFsKGNhbGxGcmFt
ZSwgc3JjMSwgc3JjMikpOwogCiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX25zdHJp
Y3RlcSk7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKQEAgLTI0NzksNyArMjQ3OSw3IEBA
IEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKEV4ZWMKICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGpzQXJyYXktPkpTQXJyYXk6Omdl
dChjYWxsRnJhbWUsIGkpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGdsb2Jh
bERhdGEsIGJhc2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkp
Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZhbHVlKS0+Z2V0SW5kZXgo
JmNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLCBpKTsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBh
c1N0cmluZyhiYXNlVmFsdWUpLT5nZXRJbmRleChjYWxsRnJhbWUsIGkpOwogICAgICAgICAgICAg
ZWxzZSBpZiAoaXNKU0J5dGVBcnJheShnbG9iYWxEYXRhLCBiYXNlVmFsdWUpICYmIGFzQnl0ZUFy
cmF5KGJhc2VWYWx1ZSktPmNhbkFjY2Vzc0luZGV4KGkpKQogICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IGFzQnl0ZUFycmF5KGJhc2VWYWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwgaSk7CiAgICAg
ICAgICAgICBlbHNlCkBAIC0yODcyLDcgKzI4NzIsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZShFeGVjCiAgICAgICAgIGlmICghc2NydXRpbmVlLmlzU3RyaW5nKCkpCiAg
ICAgICAgICAgICB2UEMgKz0gZGVmYXVsdE9mZnNldDsKICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBVU3RyaW5nOjpSZXAqIHZhbHVlID0gYXNTdHJpbmcoc2NydXRpbmVlKS0+dmFsdWUoKS5y
ZXAoKTsKKyAgICAgICAgICAgIFVTdHJpbmc6OlJlcCogdmFsdWUgPSBhc1N0cmluZyhzY3J1dGlu
ZWUpLT52YWx1ZShjYWxsRnJhbWUpLnJlcCgpOwogICAgICAgICAgICAgaWYgKHZhbHVlLT5zaXpl
KCkgIT0gMSkKICAgICAgICAgICAgICAgICB2UEMgKz0gZGVmYXVsdE9mZnNldDsKICAgICAgICAg
ICAgIGVsc2UKQEAgLTI4OTUsNyArMjg5NSw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OnByaXZh
dGVFeGVjdXRlKEV4ZWMKICAgICAgICAgaWYgKCFzY3J1dGluZWUuaXNTdHJpbmcoKSkKICAgICAg
ICAgICAgIHZQQyArPSBkZWZhdWx0T2Zmc2V0OwogICAgICAgICBlbHNlIAotICAgICAgICAgICAg
dlBDICs9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCktPnN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJs
ZUluZGV4KS5vZmZzZXRGb3JWYWx1ZShhc1N0cmluZyhzY3J1dGluZWUpLT52YWx1ZSgpLnJlcCgp
LCBkZWZhdWx0T2Zmc2V0KTsKKyAgICAgICAgICAgIHZQQyArPSBjYWxsRnJhbWUtPmNvZGVCbG9j
aygpLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkub2Zmc2V0Rm9yVmFsdWUoYXNT
dHJpbmcoc2NydXRpbmVlKS0+dmFsdWUoY2FsbEZyYW1lKS5yZXAoKSwgZGVmYXVsdE9mZnNldCk7
CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9CiAgICAgREVGSU5FX09QQ09ERShv
cF9uZXdfZnVuYykgewpAQCAtMzQ4OCw2ICszNDg4LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6
cHJpdmF0ZUV4ZWN1dGUoRXhlYwogICAgICAgICBpbnQgY291bnQgPSB2UENbM10udS5vcGVyYW5k
OwogCiAgICAgICAgIGNhbGxGcmFtZS0+cihkc3QpID0gY29uY2F0ZW5hdGVTdHJpbmdzKGNhbGxG
cmFtZSwgJmNhbGxGcmFtZS0+cmVnaXN0ZXJzKClbc3JjXSwgY291bnQpOworICAgICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OKCk7CiAgICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3N0cmNh
dCk7CiAKICAgICAgICAgTkVYVF9JTlNUUlVDVElPTigpOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1
YnMuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNDQsMTQgKzEwNDQsMTggQEAgREVGSU5FX1NUVUJfRlVO
Q1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wXwogICAgIGJvb2wgbGVmdElzU3RyaW5nID0gdjEuaXNT
dHJpbmcoKTsKICAgICBpZiAobGVmdElzU3RyaW5nICYmIHYyLmlzU3RyaW5nKCkpIHsKICAgICAg
ICAgaWYgKGFzU3RyaW5nKHYxKS0+aXNSb3BlKCkgfHwgYXNTdHJpbmcodjIpLT5pc1JvcGUoKSkg
ewotICAgICAgICAgICAgUmVmUHRyPEpTU3RyaW5nOjpSb3BlPiByb3BlID0gSlNTdHJpbmc6OlJv
cGU6OmNyZWF0ZSgyKTsKKyAgICAgICAgICAgIFJlZlB0cjxKU1N0cmluZzo6Um9wZT4gcm9wZSA9
IEpTU3RyaW5nOjpSb3BlOjpjcmVhdGVPck51bGwoMik7CisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoIXJvcGUpKSB7CisgICAgICAgICAgICAgICAgdGhyb3dPdXRPZk1lbW9yeUVycm9yKGNhbGxG
cmFtZSk7CisgICAgICAgICAgICAgICAgVk1fVEhST1dfRVhDRVBUSU9OKCk7CisgICAgICAgICAg
ICB9CiAgICAgICAgICAgICByb3BlLT5pbml0aWFsaXplRmliZXIoMCwgYXNTdHJpbmcodjEpKTsK
ICAgICAgICAgICAgIHJvcGUtPmluaXRpYWxpemVGaWJlcigxLCBhc1N0cmluZyh2MikpOwogICAg
ICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xvYmFsRGF0
YSgpOwogICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShuZXcgKGdsb2JhbERhdGEp
IEpTU3RyaW5nKGdsb2JhbERhdGEsIHJvcGUucmVsZWFzZSgpKSk7CiAgICAgICAgIH0KIAotICAg
ICAgICBSZWZQdHI8VVN0cmluZzo6UmVwPiB2YWx1ZSA9IGNvbmNhdGVuYXRlKGFzU3RyaW5nKHYx
KS0+dmFsdWUoKS5yZXAoKSwgYXNTdHJpbmcodjIpLT52YWx1ZSgpLnJlcCgpKTsKKyAgICAgICAg
UmVmUHRyPFVTdHJpbmc6OlJlcD4gdmFsdWUgPSBjb25jYXRlbmF0ZShhc1N0cmluZyh2MSktPnZh
bHVlKGNhbGxGcmFtZSkucmVwKCksIGFzU3RyaW5nKHYyKS0+dmFsdWUoY2FsbEZyYW1lKS5yZXAo
KSk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghdmFsdWUpKSB7CiAgICAgICAgICAgICB0aHJvd091
dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIFZNX1RIUk9XX0VYQ0VQVElP
TigpOwpAQCAtMTA2Miw4ICsxMDY2LDggQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpT
VmFsdWUsIG9wXwogCiAgICAgaWYgKHJpZ2h0SXNOdW1iZXIgJiBsZWZ0SXNTdHJpbmcpIHsKICAg
ICAgICAgUmVmUHRyPFVTdHJpbmc6OlJlcD4gdmFsdWUgPSB2Mi5pc0ludDMyKCkgPwotICAgICAg
ICAgICAgY29uY2F0ZW5hdGUoYXNTdHJpbmcodjEpLT52YWx1ZSgpLnJlcCgpLCB2Mi5hc0ludDMy
KCkpIDoKLSAgICAgICAgICAgIGNvbmNhdGVuYXRlKGFzU3RyaW5nKHYxKS0+dmFsdWUoKS5yZXAo
KSwgcmlnaHQpOworICAgICAgICAgICAgY29uY2F0ZW5hdGUoYXNTdHJpbmcodjEpLT52YWx1ZShj
YWxsRnJhbWUpLnJlcCgpLCB2Mi5hc0ludDMyKCkpIDoKKyAgICAgICAgICAgIGNvbmNhdGVuYXRl
KGFzU3RyaW5nKHYxKS0+dmFsdWUoY2FsbEZyYW1lKS5yZXAoKSwgcmlnaHQpOwogCiAgICAgICAg
IGlmIChVTkxJS0VMWSghdmFsdWUpKSB7CiAgICAgICAgICAgICB0aHJvd091dE9mTWVtb3J5RXJy
b3IoY2FsbEZyYW1lKTsKQEAgLTE5MDEsNyArMTkwNSw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9O
KEVuY29kZWRKU1ZhbHVlLCBvcF8KICAgICAgICAgfSBlbHNlIGlmIChpc0pTU3RyaW5nKGdsb2Jh
bERhdGEsIGJhc2VWYWx1ZSkgJiYgYXNTdHJpbmcoYmFzZVZhbHVlKS0+Y2FuR2V0SW5kZXgoaSkp
IHsKICAgICAgICAgICAgIC8vIEFsbCBmYXN0IGJ5dGUgYXJyYXkgYWNjZXNzZXMgYXJlIHNhZmUg
ZnJvbSBleGNlcHRpb25zIHNvIHJldHVybiBpbW1lZGlhdGVseSB0byBhdm9pZCBleGNlcHRpb24g
Y2hlY2tzLgogICAgICAgICAgICAgY3RpUGF0Y2hDYWxsQnlSZXR1cm5BZGRyZXNzKGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCksIFNUVUJfUkVUVVJOX0FERFJFU1MsIEZ1bmN0aW9uUHRyKGN0aV9vcF9n
ZXRfYnlfdmFsX3N0cmluZykpOwotICAgICAgICAgICAgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZh
bHVlKS0+Z2V0SW5kZXgoc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBpKTsKKyAgICAgICAgICAgIHJl
c3VsdCA9IGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwgaSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAoaXNKU0J5dGVBcnJheShnbG9iYWxEYXRhLCBiYXNlVmFsdWUpICYmIGFz
Qnl0ZUFycmF5KGJhc2VWYWx1ZSktPmNhbkFjY2Vzc0luZGV4KGkpKSB7CiAgICAgICAgICAgICAv
LyBBbGwgZmFzdCBieXRlIGFycmF5IGFjY2Vzc2VzIGFyZSBzYWZlIGZyb20gZXhjZXB0aW9ucyBz
byByZXR1cm4gaW1tZWRpYXRlbHkgdG8gYXZvaWQgZXhjZXB0aW9uIGNoZWNrcy4KICAgICAgICAg
ICAgIGN0aVBhdGNoQ2FsbEJ5UmV0dXJuQWRkcmVzcyhjYWxsRnJhbWUtPmNvZGVCbG9jaygpLCBT
VFVCX1JFVFVSTl9BRERSRVNTLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X3ZhbF9ieXRlX2Fy
cmF5KSk7CkBAIC0xOTMyLDcgKzE5MzYsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVk
SlNWYWx1ZSwgb3BfCiAgICAgaWYgKExJS0VMWShzdWJzY3JpcHQuaXNVSW50MzIoKSkpIHsKICAg
ICAgICAgdWludDMyX3QgaSA9IHN1YnNjcmlwdC5hc1VJbnQzMigpOwogICAgICAgICBpZiAoaXNK
U1N0cmluZyhnbG9iYWxEYXRhLCBiYXNlVmFsdWUpICYmIGFzU3RyaW5nKGJhc2VWYWx1ZSktPmNh
bkdldEluZGV4KGkpKQotICAgICAgICAgICAgcmVzdWx0ID0gYXNTdHJpbmcoYmFzZVZhbHVlKS0+
Z2V0SW5kZXgoc3RhY2tGcmFtZS5nbG9iYWxEYXRhLCBpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IGFzU3RyaW5nKGJhc2VWYWx1ZSktPmdldEluZGV4KGNhbGxGcmFtZSwgaSk7CiAgICAgICAgIGVs
c2UgewogICAgICAgICAgICAgcmVzdWx0ID0gYmFzZVZhbHVlLmdldChjYWxsRnJhbWUsIGkpOwog
ICAgICAgICAgICAgaWYgKCFpc0pTU3RyaW5nKGdsb2JhbERhdGEsIGJhc2VWYWx1ZSkpCkBAIC0y
NDQ4LDIwICsyNDUyLDIwIEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKGludCwgb3BfZXEpCiAKICAg
ICBpZiAoY2VsbDEtPmlzU3RyaW5nKCkpIHsKICAgICAgICAgaWYgKHNyYzIuaXNJbnQzMigpKQot
ICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oY2VsbDEpLT52YWx1ZSgp
LnRvRG91YmxlKCkgPT0gc3JjMi5hc0ludDMyKCk7CisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8SlNTdHJpbmcqPihjZWxsMSktPnZhbHVlKHN0YWNrRnJhbWUuY2FsbEZyYW1lKS50b0Rv
dWJsZSgpID09IHNyYzIuYXNJbnQzMigpOwogICAgICAgICAgICAgCiAgICAgICAgIGlmIChzcmMy
LmlzRG91YmxlKCkpCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihj
ZWxsMSktPnZhbHVlKCkudG9Eb3VibGUoKSA9PSBzcmMyLmFzRG91YmxlKCk7CisgICAgICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNTdHJpbmcqPihjZWxsMSktPnZhbHVlKHN0YWNrRnJhbWUu
Y2FsbEZyYW1lKS50b0RvdWJsZSgpID09IHNyYzIuYXNEb3VibGUoKTsKIAogICAgICAgICBpZiAo
c3JjMi5pc1RydWUoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+
KGNlbGwxKS0+dmFsdWUoKS50b0RvdWJsZSgpID09IDEuMDsKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxKU1N0cmluZyo+KGNlbGwxKS0+dmFsdWUoc3RhY2tGcmFtZS5jYWxsRnJhbWUp
LnRvRG91YmxlKCkgPT0gMS4wOwogCiAgICAgICAgIGlmIChzcmMyLmlzRmFsc2UoKSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGNlbGwxKS0+dmFsdWUoKS50b0Rv
dWJsZSgpID09IDAuMDsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+
KGNlbGwxKS0+dmFsdWUoc3RhY2tGcmFtZS5jYWxsRnJhbWUpLnRvRG91YmxlKCkgPT0gMC4wOwog
CiAgICAgICAgIEpTQ2VsbCogY2VsbDIgPSBhc0NlbGwoc3JjMik7CiAgICAgICAgIGlmIChjZWxs
Mi0+aXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+
KGNlbGwxKS0+dmFsdWUoKSA9PSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGNlbGwyKS0+dmFsdWUo
KTsKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGNlbGwxKS0+dmFs
dWUoc3RhY2tGcmFtZS5jYWxsRnJhbWUpID09IHN0YXRpY19jYXN0PEpTU3RyaW5nKj4oY2VsbDIp
LT52YWx1ZShzdGFja0ZyYW1lLmNhbGxGcmFtZSk7CiAKICAgICAgICAgc3JjMiA9IGFzT2JqZWN0
KGNlbGwyKS0+dG9QcmltaXRpdmUoc3RhY2tGcmFtZS5jYWxsRnJhbWUpOwogICAgICAgICBDSEVD
S19GT1JfRVhDRVBUSU9OKCk7CkBAIC0yNDg0LDcgKzI0ODgsNyBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTihpbnQsIG9wX2VxX3N0cmluZ3MpCiAKICAgICBBU1NFUlQoc3RyaW5nMS0+aXNTdHJpbmco
KSk7CiAgICAgQVNTRVJUKHN0cmluZzItPmlzU3RyaW5nKCkpOwotICAgIHJldHVybiBzdHJpbmcx
LT52YWx1ZSgpID09IHN0cmluZzItPnZhbHVlKCk7CisgICAgcmV0dXJuIHN0cmluZzEtPnZhbHVl
KHN0YWNrRnJhbWUuY2FsbEZyYW1lKSA9PSBzdHJpbmcyLT52YWx1ZShzdGFja0ZyYW1lLmNhbGxG
cmFtZSk7CiB9CiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCkBAIC0yNzgyLDcgKzI3ODYs
NyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihpbnQsIGhhc19wcm9wZXJ0eSkKIAogICAgIEpTT2Jq
ZWN0KiBiYXNlID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzT2JqZWN0KCk7CiAgICAgSlNTdHJpbmcq
IHByb3BlcnR5ID0gc3RhY2tGcmFtZS5hcmdzWzFdLmpzU3RyaW5nKCk7Ci0gICAgcmV0dXJuIGJh
c2UtPmhhc1Byb3BlcnR5KHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBJZGVudGlmaWVyKHN0YWNrRnJh
bWUuY2FsbEZyYW1lLCBwcm9wZXJ0eS0+dmFsdWUoKSkpOworICAgIHJldHVybiBiYXNlLT5oYXNQ
cm9wZXJ0eShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgSWRlbnRpZmllcihzdGFja0ZyYW1lLmNhbGxG
cmFtZSwgcHJvcGVydHktPnZhbHVlKHN0YWNrRnJhbWUuY2FsbEZyYW1lKSkpOwogfQogCiBERUZJ
TkVfU1RVQl9GVU5DVElPTihKU09iamVjdCosIG9wX3B1c2hfc2NvcGUpCkBAIC0yODU5LDcgKzI4
NjMsNyBAQCBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgSlNW
YWx1ZSBzcmMxID0gc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHNy
YzIgPSBzdGFja0ZyYW1lLmFyZ3NbMV0uanNWYWx1ZSgpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oSlNWYWx1ZTo6c3RyaWN0RXF1YWwoc3JjMSwgc3JjMikpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihKU1ZhbHVlOjpzdHJpY3RFcXVhbChz
dGFja0ZyYW1lLmNhbGxGcmFtZSwgc3JjMSwgc3JjMikpKTsKIH0KIAogREVGSU5FX1NUVUJfRlVO
Q1RJT04oRW5jb2RlZEpTVmFsdWUsIG9wX3RvX3ByaW1pdGl2ZSkKQEAgLTI4NzMsNyArMjg3Nyw5
IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRKU1ZhbHVlLCBvcF8KIHsKICAgICBTVFVC
X0lOSVRfU1RBQ0tfRlJBTUUoc3RhY2tGcmFtZSk7CiAKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNvbmNhdGVuYXRlU3RyaW5ncyhzdGFja0ZyYW1lLmNhbGxGcmFtZSwgJnN0YWNrRnJhbWUu
Y2FsbEZyYW1lLT5yZWdpc3RlcnMoKVtzdGFja0ZyYW1lLmFyZ3NbMF0uaW50MzIoKV0sIHN0YWNr
RnJhbWUuYXJnc1sxXS5pbnQzMigpKSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBjb25jYXRlbmF0
ZVN0cmluZ3Moc3RhY2tGcmFtZS5jYWxsRnJhbWUsICZzdGFja0ZyYW1lLmNhbGxGcmFtZS0+cmVn
aXN0ZXJzKClbc3RhY2tGcmFtZS5hcmdzWzBdLmludDMyKCldLCBzdGFja0ZyYW1lLmFyZ3NbMV0u
aW50MzIoKSk7CisgICAgQ0hFQ0tfRk9SX0VYQ0VQVElPTl9BVF9FTkQoKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29k
ZWRKU1ZhbHVlLCBvcF9uc3RyaWN0ZXEpCkBAIC0yODgzLDcgKzI4ODksNyBAQCBERUZJTkVfU1RV
Ql9GVU5DVElPTihFbmNvZGVkSlNWYWx1ZSwgb3BfCiAgICAgSlNWYWx1ZSBzcmMxID0gc3RhY2tG
cmFtZS5hcmdzWzBdLmpzVmFsdWUoKTsKICAgICBKU1ZhbHVlIHNyYzIgPSBzdGFja0ZyYW1lLmFy
Z3NbMV0uanNWYWx1ZSgpOwogCi0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jvb2xlYW4o
IUpTVmFsdWU6OnN0cmljdEVxdWFsKHNyYzEsIHNyYzIpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc0Jvb2xlYW4oIUpTVmFsdWU6OnN0cmljdEVxdWFsKHN0YWNrRnJhbWUuY2FsbEZy
YW1lLCBzcmMxLCBzcmMyKSkpOwogfQogCiBERUZJTkVfU1RVQl9GVU5DVElPTihFbmNvZGVkSlNW
YWx1ZSwgb3BfdG9fanNudW1iZXIpCkBAIC0yOTkyLDcgKzI5OTgsNyBAQCBERUZJTkVfU1RVQl9G
VU5DVElPTih2b2lkKiwgb3Bfc3dpdGNoX2NoCiAgICAgdm9pZCogcmVzdWx0ID0gY29kZUJsb2Nr
LT5jaGFyYWN0ZXJTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3RpRGVmYXVsdC5leGVjdXRh
YmxlQWRkcmVzcygpOwogCiAgICAgaWYgKHNjcnV0aW5lZS5pc1N0cmluZygpKSB7Ci0gICAgICAg
IFVTdHJpbmc6OlJlcCogdmFsdWUgPSBhc1N0cmluZyhzY3J1dGluZWUpLT52YWx1ZSgpLnJlcCgp
OworICAgICAgICBVU3RyaW5nOjpSZXAqIHZhbHVlID0gYXNTdHJpbmcoc2NydXRpbmVlKS0+dmFs
dWUoY2FsbEZyYW1lKS5yZXAoKTsKICAgICAgICAgaWYgKHZhbHVlLT5zaXplKCkgPT0gMSkKICAg
ICAgICAgICAgIHJlc3VsdCA9IGNvZGVCbG9jay0+Y2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlKHRh
YmxlSW5kZXgpLmN0aUZvclZhbHVlKHZhbHVlLT5kYXRhKClbMF0pLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CiAgICAgfQpAQCAtMzAxMiw3ICszMDE4LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9p
ZCosIG9wX3N3aXRjaF9zdAogICAgIHZvaWQqIHJlc3VsdCA9IGNvZGVCbG9jay0+c3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsK
IAogICAgIGlmIChzY3J1dGluZWUuaXNTdHJpbmcoKSkgewotICAgICAgICBVU3RyaW5nOjpSZXAq
IHZhbHVlID0gYXNTdHJpbmcoc2NydXRpbmVlKS0+dmFsdWUoKS5yZXAoKTsKKyAgICAgICAgVVN0
cmluZzo6UmVwKiB2YWx1ZSA9IGFzU3RyaW5nKHNjcnV0aW5lZSktPnZhbHVlKGNhbGxGcmFtZSku
cmVwKCk7CiAgICAgICAgIHJlc3VsdCA9IGNvZGVCbG9jay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHZhbHVlKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAg
IH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5j
cHAJKHJldmlzaW9uIDUxNzA4KQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDcgQEAgdm9pZCBQcm9maWxl
R2VuZXJhdG9yOjphZGRQYXJlbnRGb3JDb25zbwogICAgIEpTVmFsdWUgZnVuY3Rpb247CiAKICAg
ICBleGVjLT5pbnRlcnByZXRlcigpLT5yZXRyaWV2ZUxhc3RDYWxsZXIoZXhlYywgbGluZU51bWJl
ciwgc291cmNlSUQsIHNvdXJjZVVSTCwgZnVuY3Rpb24pOwotICAgIG1fY3VycmVudE5vZGUgPSBQ
cm9maWxlTm9kZTo6Y3JlYXRlKFByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcigmZXhlYy0+
Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbiA/IGZ1bmN0aW9uLnRvVGhpc09iamVjdChleGVjKSA6IDAs
IHNvdXJjZVVSTCwgbGluZU51bWJlciksIG1faGVhZC5nZXQoKSwgbV9oZWFkLmdldCgpKTsKKyAg
ICBtX2N1cnJlbnROb2RlID0gUHJvZmlsZU5vZGU6OmNyZWF0ZShQcm9maWxlcjo6Y3JlYXRlQ2Fs
bElkZW50aWZpZXIoZXhlYywgZnVuY3Rpb24gPyBmdW5jdGlvbi50b1RoaXNPYmplY3QoZXhlYykg
OiAwLCBzb3VyY2VVUkwsIGxpbmVOdW1iZXIpLCBtX2hlYWQuZ2V0KCksIG1faGVhZC5nZXQoKSk7
CiAgICAgbV9oZWFkLT5pbnNlcnROb2RlKG1fY3VycmVudE5vZGUuZ2V0KCkpOwogfQogCkluZGV4
OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYs
NyArNDYsNyBAQCBzdGF0aWMgY29uc3QgY2hhciogR2xvYmFsQ29kZUV4ZWN1dGlvbiA9CiBzdGF0
aWMgY29uc3QgY2hhciogQW5vbnltb3VzRnVuY3Rpb24gPSAiKGFub255bW91cyBmdW5jdGlvbiki
Owogc3RhdGljIHVuc2lnbmVkIFByb2ZpbGVzVUlEID0gMDsKIAotc3RhdGljIENhbGxJZGVudGlm
aWVyIGNyZWF0ZUNhbGxJZGVudGlmaWVyRnJvbUZ1bmN0aW9uSW1wKEpTR2xvYmFsRGF0YSosIEpT
RnVuY3Rpb24qKTsKK3N0YXRpYyBDYWxsSWRlbnRpZmllciBjcmVhdGVDYWxsSWRlbnRpZmllckZy
b21GdW5jdGlvbkltcChFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKik7CiAKIFByb2ZpbGVyKiBQcm9m
aWxlcjo6c19zaGFyZWRQcm9maWxlciA9IDA7CiBQcm9maWxlciogUHJvZmlsZXI6OnNfc2hhcmVk
RW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlID0gMDsKQEAgLTEwOSwxNCArMTA5LDE0IEBAIHZvaWQg
UHJvZmlsZXI6OndpbGxFeGVjdXRlKEV4ZWNTdGF0ZSogZXgKIHsKICAgICBBU1NFUlQoIW1fY3Vy
cmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKLSAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxl
cyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRlLCBjcmVh
dGVDYWxsSWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBmdW5jdGlvbiwgIiIsIDApLCBl
eGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKKyAgICBkaXNwYXRj
aEZ1bmN0aW9uVG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6
OndpbGxFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBmdW5jdGlvbiwgIiIsIDAp
LCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKIH0KIAogdm9p
ZCBQcm9maWxlcjo6d2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBz
b3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCiB7CiAgICAgQVNTRVJUKCFtX2N1cnJl
bnRQcm9maWxlcy5pc0VtcHR5KCkpOwogCi0gICAgQ2FsbElkZW50aWZpZXIgY2FsbElkZW50aWZp
ZXIgPSBjcmVhdGVDYWxsSWRlbnRpZmllcigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBKU1ZhbHVlKCks
IHNvdXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKyAgICBDYWxsSWRlbnRpZmllciBjYWxs
SWRlbnRpZmllciA9IGNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMsIEpTVmFsdWUoKSwgc291cmNl
VVJMLCBzdGFydGluZ0xpbmVOdW1iZXIpOwogCiAgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmls
ZXMobV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjp3aWxsRXhlY3V0ZSwgY2Fs
bElkZW50aWZpZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkp
OwogfQpAQCAtMTI1LDE3ICsxMjUsMTcgQEAgdm9pZCBQcm9maWxlcjo6ZGlkRXhlY3V0ZShFeGVj
U3RhdGUqIGV4ZQogewogICAgIEFTU0VSVCghbV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsK
IAotICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJv
ZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZSwgY3JlYXRlQ2FsbElkZW50aWZpZXIoJmV4ZWMtPmds
b2JhbERhdGEoKSwgZnVuY3Rpb24sICIiLCAwKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5wcm9maWxlR3JvdXAoKSk7CisgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJy
ZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRl
bnRpZmllcihleGVjLCBmdW5jdGlvbiwgIiIsIDApLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPnByb2ZpbGVHcm91cCgpKTsKIH0KIAogdm9pZCBQcm9maWxlcjo6ZGlkRXhlY3V0ZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51
bWJlcikKIHsKICAgICBBU1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKLSAg
ICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVH
ZW5lcmF0b3I6OmRpZEV4ZWN1dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKCZleGVjLT5nbG9iYWxE
YXRhKCksIEpTVmFsdWUoKSwgc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIpLCBleGVjLT5s
ZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKKyAgICBkaXNwYXRjaEZ1bmN0
aW9uVG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4
ZWN1dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMsIEpTVmFsdWUoKSwgc291cmNlVVJMLCBz
dGFydGluZ0xpbmVOdW1iZXIpLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVH
cm91cCgpKTsKIH0KIAotQ2FsbElkZW50aWZpZXIgUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlm
aWVyKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSBmdW5jdGlvblZhbHVlLCBjb25z
dCBVU3RyaW5nJiBkZWZhdWx0U291cmNlVVJMLCBpbnQgZGVmYXVsdExpbmVOdW1iZXIpCitDYWxs
SWRlbnRpZmllciBQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50aWZpZXIoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGZ1bmN0aW9uVmFsdWUsIGNvbnN0IFVTdHJpbmcmIGRlZmF1bHRTb3VyY2VVUkws
IGludCBkZWZhdWx0TGluZU51bWJlcikKIHsKICAgICBpZiAoIWZ1bmN0aW9uVmFsdWUpCiAgICAg
ICAgIHJldHVybiBDYWxsSWRlbnRpZmllcihHbG9iYWxDb2RlRXhlY3V0aW9uLCBkZWZhdWx0U291
cmNlVVJMLCBkZWZhdWx0TGluZU51bWJlcik7CkBAIC0xNDQsMTcgKzE0NCwxNyBAQCBDYWxsSWRl
bnRpZmllciBQcm9maWxlcjo6Y3JlYXRlQ2FsbElkZW50CiAgICAgaWYgKGFzT2JqZWN0KGZ1bmN0
aW9uVmFsdWUpLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6aW5mbykpIHsKICAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBhc0Z1bmN0aW9uKGZ1bmN0aW9uVmFsdWUpOwogICAgICAgICBpZiAo
IWZ1bmN0aW9uLT5leGVjdXRhYmxlKCktPmlzSG9zdEZ1bmN0aW9uKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlQ2FsbElkZW50aWZpZXJGcm9tRnVuY3Rpb25JbXAoZ2xvYmFsRGF0YSwgZnVu
Y3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUNhbGxJZGVudGlmaWVyRnJvbUZ1bmN0
aW9uSW1wKGV4ZWMsIGZ1bmN0aW9uKTsKICAgICB9CiAgICAgaWYgKGFzT2JqZWN0KGZ1bmN0aW9u
VmFsdWUpLT5pbmhlcml0cygmSW50ZXJuYWxGdW5jdGlvbjo6aW5mbykpCi0gICAgICAgIHJldHVy
biBDYWxsSWRlbnRpZmllcihzdGF0aWNfY2FzdDxJbnRlcm5hbEZ1bmN0aW9uKj4oYXNPYmplY3Qo
ZnVuY3Rpb25WYWx1ZSkpLT5uYW1lKGdsb2JhbERhdGEpLCBkZWZhdWx0U291cmNlVVJMLCBkZWZh
dWx0TGluZU51bWJlcik7CisgICAgICAgIHJldHVybiBDYWxsSWRlbnRpZmllcihzdGF0aWNfY2Fz
dDxJbnRlcm5hbEZ1bmN0aW9uKj4oYXNPYmplY3QoZnVuY3Rpb25WYWx1ZSkpLT5uYW1lKGV4ZWMp
LCBkZWZhdWx0U291cmNlVVJMLCBkZWZhdWx0TGluZU51bWJlcik7CiAgICAgcmV0dXJuIENhbGxJ
ZGVudGlmaWVyKCIoIiArIGFzT2JqZWN0KGZ1bmN0aW9uVmFsdWUpLT5jbGFzc05hbWUoKSArICIg
b2JqZWN0KSIsIGRlZmF1bHRTb3VyY2VVUkwsIGRlZmF1bHRMaW5lTnVtYmVyKTsKIH0KIAotQ2Fs
bElkZW50aWZpZXIgY3JlYXRlQ2FsbElkZW50aWZpZXJGcm9tRnVuY3Rpb25JbXAoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbikKK0NhbGxJZGVudGlmaWVyIGNy
ZWF0ZUNhbGxJZGVudGlmaWVyRnJvbUZ1bmN0aW9uSW1wKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5j
dGlvbiogZnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKCFmdW5jdGlvbi0+aXNIb3N0RnVuY3Rpb24o
KSk7Ci0gICAgY29uc3QgVVN0cmluZyYgbmFtZSA9IGZ1bmN0aW9uLT5jYWxjdWxhdGVkRGlzcGxh
eU5hbWUoZ2xvYmFsRGF0YSk7CisgICAgY29uc3QgVVN0cmluZyYgbmFtZSA9IGZ1bmN0aW9uLT5j
YWxjdWxhdGVkRGlzcGxheU5hbWUoZXhlYyk7CiAgICAgcmV0dXJuIENhbGxJZGVudGlmaWVyKG5h
bWUuaXNFbXB0eSgpID8gQW5vbnltb3VzRnVuY3Rpb24gOiBuYW1lLCBmdW5jdGlvbi0+anNFeGVj
dXRhYmxlKCktPnNvdXJjZVVSTCgpLCBmdW5jdGlvbi0+anNFeGVjdXRhYmxlKCktPmxpbmVObygp
KTsKIH0KIApJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5oCShyZXZpc2lvbiA1MTcw
OCkKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTUyLDcgKzUyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICBz
dGF0aWMgUHJvZmlsZXIqIHByb2ZpbGVyKCk7IAotICAgICAgICBzdGF0aWMgQ2FsbElkZW50aWZp
ZXIgY3JlYXRlQ2FsbElkZW50aWZpZXIoSlNHbG9iYWxEYXRhKiwgSlNWYWx1ZSwgY29uc3QgVVN0
cmluZyYgc291cmNlVVJMLCBpbnQgbGluZU51bWJlcik7CisgICAgICAgIHN0YXRpYyBDYWxsSWRl
bnRpZmllciBjcmVhdGVDYWxsSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUsIGNv
bnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IGxpbmVOdW1iZXIpOwogCiAgICAgICAgIHZvaWQg
c3RhcnRQcm9maWxpbmcoRXhlY1N0YXRlKiwgY29uc3QgVVN0cmluZyYgdGl0bGUpOwogICAgICAg
ICBQYXNzUmVmUHRyPFByb2ZpbGU+IHN0b3BQcm9maWxpbmcoRXhlY1N0YXRlKiwgY29uc3QgVVN0
cmluZyYgdGl0bGUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlw
ZS5jcHAJKHJldmlzaW9uIDUxNzA4KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVBy
b3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzQsNyArMTAzNCw3IEBAIEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheVByb3RvRnVuY0luZGUKICAgICAgICAgSlNWYWx1ZSBlID0gZ2V0
UHJvcGVydHkoZXhlYywgdGhpc09iaiwgaW5kZXgpOwogICAgICAgICBpZiAoIWUpCiAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgaWYgKEpTVmFsdWU6OnN0cmljdEVxdWFsKHNlYXJjaEVs
ZW1lbnQsIGUpKQorICAgICAgICBpZiAoSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgc2VhcmNo
RWxlbWVudCwgZSkpCiAgICAgICAgICAgICByZXR1cm4ganNOdW1iZXIoZXhlYywgaW5kZXgpOwog
ICAgIH0KIApAQCAtMTA2NSw3ICsxMDY1LDcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
UHJvdG9GdW5jTGFzdAogICAgICAgICBKU1ZhbHVlIGUgPSBnZXRQcm9wZXJ0eShleGVjLCB0aGlz
T2JqLCBpbmRleCk7CiAgICAgICAgIGlmICghZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICBpZiAoSlNWYWx1ZTo6c3RyaWN0RXF1YWwoc2VhcmNoRWxlbWVudCwgZSkpCisgICAgICAg
IGlmIChKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBzZWFyY2hFbGVtZW50LCBlKSkKICAgICAg
ICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBpbmRleCk7CiAgICAgfQogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiA1MTcwOCkK
KysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODQsNyArODQsNyBAQCBKU09iamVjdCogY29uc3RydWN0RGF0ZShFeGVjU3RhdGUq
IGV4ZWMsCiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgSlNWYWx1ZSBwcmltaXRpdmUgPSBh
cmdzLmF0KDApLnRvUHJpbWl0aXZlKGV4ZWMpOwogICAgICAgICAgICAgaWYgKHByaW1pdGl2ZS5p
c1N0cmluZygpKQotICAgICAgICAgICAgICAgIHZhbHVlID0gcGFyc2VEYXRlKGV4ZWMsIHByaW1p
dGl2ZS5nZXRTdHJpbmcoKSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBwYXJzZURhdGUoZXhl
YywgcHJpbWl0aXZlLmdldFN0cmluZyhleGVjKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgdmFsdWUgPSBwcmltaXRpdmUudG9OdW1iZXIoZXhlYyk7CiAgICAgICAgIH0KSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCShyZXZp
c2lvbiA1MTcwOCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRnVuY3Rpb25Qcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MCwxMyArOTAsMTMgQEAgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGZ1bmN0aW9uUHJvdG9GdW5jVAogICAgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlID0gZnVuY3Rpb24tPmpzRXhlY3V0YWJsZSgpOwogICAgICAgICAgICAgVVN0cmlu
ZyBzb3VyY2VTdHJpbmcgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS50b1N0cmluZygpOwogICAgICAg
ICAgICAgaW5zZXJ0U2VtaWNvbG9uSWZOZWVkZWQoc291cmNlU3RyaW5nKTsKLSAgICAgICAgICAg
IHJldHVybiBqc1N0cmluZyhleGVjLCAiZnVuY3Rpb24gIiArIGZ1bmN0aW9uLT5uYW1lKCZleGVj
LT5nbG9iYWxEYXRhKCkpICsgIigiICsgZXhlY3V0YWJsZS0+cGFyYW1TdHJpbmcoKSArICIpICIg
KyBzb3VyY2VTdHJpbmcpOworICAgICAgICAgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJmdW5j
dGlvbiAiICsgZnVuY3Rpb24tPm5hbWUoZXhlYykgKyAiKCIgKyBleGVjdXRhYmxlLT5wYXJhbVN0
cmluZygpICsgIikgIiArIHNvdXJjZVN0cmluZyk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBp
ZiAodGhpc1ZhbHVlLmluaGVyaXRzKCZJbnRlcm5hbEZ1bmN0aW9uOjppbmZvKSkgewogICAgICAg
ICBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiA9IGFzSW50ZXJuYWxGdW5jdGlvbih0aGlzVmFs
dWUpOwotICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgImZ1bmN0aW9uICIgKyBmdW5jdGlv
bi0+bmFtZSgmZXhlYy0+Z2xvYmFsRGF0YSgpKSArICIoKSB7XG4gICAgW25hdGl2ZSBjb2RlXVxu
fSIpOworICAgICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgImZ1bmN0aW9uICIgKyBmdW5jdGlv
bi0+bmFtZShleGVjKSArICIoKSB7XG4gICAgW25hdGl2ZSBjb2RlXVxufSIpOwogICAgIH0KIAog
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvcik7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDUxNzA4KQorKysg
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDMsMjkgKzQzLDI5IEBAIEludGVybmFsRnVuY3Rpb246OkludGVybmFsRnVuY3Rpb24o
SlNHbG8KICAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+bmFtZSwganNT
dHJpbmcoZ2xvYmFsRGF0YSwgbmFtZS51c3RyaW5nKCkpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkg
fCBEb250RW51bSk7CiB9CiAKLWNvbnN0IFVTdHJpbmcmIEludGVybmFsRnVuY3Rpb246Om5hbWUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorY29uc3QgVVN0cmluZyYgSW50ZXJuYWxGdW5jdGlv
bjo6bmFtZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgcmV0dXJuIGFzU3RyaW5nKGdldERpcmVj
dChnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5uYW1lKSktPnZhbHVlKCk7CisgICAgcmV0dXJu
IGFzU3RyaW5nKGdldERpcmVjdChleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bmFt
ZSkpLT52YWx1ZShleGVjKTsKIH0KIAotY29uc3QgVVN0cmluZyBJbnRlcm5hbEZ1bmN0aW9uOjpk
aXNwbGF5TmFtZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCitjb25zdCBVU3RyaW5nIEludGVy
bmFsRnVuY3Rpb246OmRpc3BsYXlOYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICBKU1ZhbHVl
IGRpc3BsYXlOYW1lID0gZ2V0RGlyZWN0KGdsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmRpc3Bs
YXlOYW1lKTsKKyAgICBKU1ZhbHVlIGRpc3BsYXlOYW1lID0gZ2V0RGlyZWN0KGV4ZWMtPmdsb2Jh
bERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5kaXNwbGF5TmFtZSk7CiAgICAgCi0gICAgaWYgKGRpc3Bs
YXlOYW1lICYmIGlzSlNTdHJpbmcoZ2xvYmFsRGF0YSwgZGlzcGxheU5hbWUpKQotICAgICAgICBy
ZXR1cm4gYXNTdHJpbmcoZGlzcGxheU5hbWUpLT52YWx1ZSgpOworICAgIGlmIChkaXNwbGF5TmFt
ZSAmJiBpc0pTU3RyaW5nKCZleGVjLT5nbG9iYWxEYXRhKCksIGRpc3BsYXlOYW1lKSkKKyAgICAg
ICAgcmV0dXJuIGFzU3RyaW5nKGRpc3BsYXlOYW1lKS0+dmFsdWUoZXhlYyk7CiAgICAgCiAgICAg
cmV0dXJuIFVTdHJpbmc6Om51bGwoKTsKIH0KIAotY29uc3QgVVN0cmluZyBJbnRlcm5hbEZ1bmN0
aW9uOjpjYWxjdWxhdGVkRGlzcGxheU5hbWUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQorY29u
c3QgVVN0cmluZyBJbnRlcm5hbEZ1bmN0aW9uOjpjYWxjdWxhdGVkRGlzcGxheU5hbWUoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIGNvbnN0IFVTdHJpbmcgZXhwbGljaXROYW1lID0gZGlzcGxheU5h
bWUoZ2xvYmFsRGF0YSk7CisgICAgY29uc3QgVVN0cmluZyBleHBsaWNpdE5hbWUgPSBkaXNwbGF5
TmFtZShleGVjKTsKICAgICAKICAgICBpZiAoIWV4cGxpY2l0TmFtZS5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiBleHBsaWNpdE5hbWU7CiAgICAgCi0gICAgcmV0dXJuIG5hbWUoZ2xvYmFsRGF0
YSk7CisgICAgcmV0dXJuIG5hbWUoZXhlYyk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHJldmlzaW9uIDUx
NzA4KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDkgKzM2LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZpcnR1
YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdDsgCiAgICAgICAgIHN0YXRpYyBK
U19FWFBPUlREQVRBIGNvbnN0IENsYXNzSW5mbyBpbmZvOwogCi0gICAgICAgIGNvbnN0IFVTdHJp
bmcmIG5hbWUoSlNHbG9iYWxEYXRhKik7Ci0gICAgICAgIGNvbnN0IFVTdHJpbmcgZGlzcGxheU5h
bWUoSlNHbG9iYWxEYXRhKik7Ci0gICAgICAgIGNvbnN0IFVTdHJpbmcgY2FsY3VsYXRlZERpc3Bs
YXlOYW1lKEpTR2xvYmFsRGF0YSopOworICAgICAgICBjb25zdCBVU3RyaW5nJiBuYW1lKEV4ZWNT
dGF0ZSopOworICAgICAgICBjb25zdCBVU3RyaW5nIGRpc3BsYXlOYW1lKEV4ZWNTdGF0ZSopOwor
ICAgICAgICBjb25zdCBVU3RyaW5nIGNhbGN1bGF0ZWREaXNwbGF5TmFtZShFeGVjU3RhdGUqKTsK
IAogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVjdHVyZShK
U1ZhbHVlIHByb3RvKSAKICAgICAgICAgeyAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5j
cHAJKHJldmlzaW9uIDUxNzA4KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NiwxNyArODYsMTcgQEAgYm9vbCBKU0NlbGw6OmdldFVJbnQz
Mih1aW50MzJfdCYpIGNvbnN0CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIEpTQ2VsbDo6
Z2V0U3RyaW5nKFVTdHJpbmcmc3RyaW5nVmFsdWUpIGNvbnN0Citib29sIEpTQ2VsbDo6Z2V0U3Ry
aW5nKEV4ZWNTdGF0ZSogZXhlYywgVVN0cmluZyZzdHJpbmdWYWx1ZSkgY29uc3QKIHsKICAgICBp
ZiAoIWlzU3RyaW5nKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBzdHJpbmdWYWx1ZSA9
IHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhpcyktPnZhbHVlKCk7CisgICAgc3RyaW5n
VmFsdWUgPSBzdGF0aWNfY2FzdDxjb25zdCBKU1N0cmluZyo+KHRoaXMpLT52YWx1ZShleGVjKTsK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotVVN0cmluZyBKU0NlbGw6OmdldFN0cmluZygpIGNvbnN0
CitVU3RyaW5nIEpTQ2VsbDo6Z2V0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKLSAg
ICByZXR1cm4gaXNTdHJpbmcoKSA/IHN0YXRpY19jYXN0PGNvbnN0IEpTU3RyaW5nKj4odGhpcykt
PnZhbHVlKCkgOiBVU3RyaW5nKCk7CisgICAgcmV0dXJuIGlzU3RyaW5nKCkgPyBzdGF0aWNfY2Fz
dDxjb25zdCBKU1N0cmluZyo+KHRoaXMpLT52YWx1ZShleGVjKSA6IFVTdHJpbmcoKTsKIH0KIAog
SlNPYmplY3QqIEpTQ2VsbDo6Z2V0T2JqZWN0KCkKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNDZWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSgpIGNvbnN0OwogCiAgICAgICAgIC8vIEV4dHJhY3RpbmcgdGhl
IHZhbHVlLgotICAgICAgICBib29sIGdldFN0cmluZyhVU3RyaW5nJikgY29uc3Q7Ci0gICAgICAg
IFVTdHJpbmcgZ2V0U3RyaW5nKCkgY29uc3Q7IC8vIG51bGwgc3RyaW5nIGlmIG5vdCBhIHN0cmlu
ZworICAgICAgICBib29sIGdldFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIFVTdHJpbmcmKSBjb25z
dDsKKyAgICAgICAgVVN0cmluZyBnZXRTdHJpbmcoRXhlY1N0YXRlKiBleGVjKSBjb25zdDsgLy8g
bnVsbCBzdHJpbmcgaWYgbm90IGEgc3RyaW5nCiAgICAgICAgIEpTT2JqZWN0KiBnZXRPYmplY3Qo
KTsgLy8gTlVMTCBpZiBub3QgYW4gb2JqZWN0CiAgICAgICAgIGNvbnN0IEpTT2JqZWN0KiBnZXRP
YmplY3QoKSBjb25zdDsgLy8gTlVMTCBpZiBub3QgYW4gb2JqZWN0CiAgICAgICAgIApAQCAtMTc5
LDE0ICsxNzksMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHJldHVybiBpc0NlbGwoKSAm
JiBhc0NlbGwoKS0+aXNPYmplY3QoKTsKICAgICB9CiAKLSAgICBpbmxpbmUgYm9vbCBKU1ZhbHVl
OjpnZXRTdHJpbmcoVVN0cmluZyYgcykgY29uc3QKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpn
ZXRTdHJpbmcoRXhlY1N0YXRlKiBleGVjLCBVU3RyaW5nJiBzKSBjb25zdAogICAgIHsKLSAgICAg
ICAgcmV0dXJuIGlzQ2VsbCgpICYmIGFzQ2VsbCgpLT5nZXRTdHJpbmcocyk7CisgICAgICAgIHJl
dHVybiBpc0NlbGwoKSAmJiBhc0NlbGwoKS0+Z2V0U3RyaW5nKGV4ZWMsIHMpOwogICAgIH0KIAot
ICAgIGlubGluZSBVU3RyaW5nIEpTVmFsdWU6OmdldFN0cmluZygpIGNvbnN0CisgICAgaW5saW5l
IFVTdHJpbmcgSlNWYWx1ZTo6Z2V0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBpc0NlbGwoKSA/IGFzQ2VsbCgpLT5nZXRTdHJpbmcoKSA6IFVTdHJp
bmcoKTsKKyAgICAgICAgcmV0dXJuIGlzQ2VsbCgpID8gYXNDZWxsKCktPmdldFN0cmluZyhleGVj
KSA6IFVTdHJpbmcoKTsKICAgICB9CiAKICAgICBpbmxpbmUgSlNPYmplY3QqIEpTVmFsdWU6Omdl
dE9iamVjdCgpIGNvbnN0CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAJ
KHJldmlzaW9uIDUxNzA4KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIHN0YXRpYyBpbmxpbmUgVVN0cmlu
ZyBnYXAoRXhlY1N0YXRlKiBleGUKICAgICB9CiAKICAgICAvLyBJZiB0aGUgc3BhY2UgdmFsdWUg
aXMgYSBzdHJpbmcsIHVzZSBpdCBhcyB0aGUgZ2FwIHN0cmluZywgb3RoZXJ3aXNlIHVzZSBubyBn
YXAgc3RyaW5nLgotICAgIFVTdHJpbmcgc3BhY2VzID0gc3BhY2UuZ2V0U3RyaW5nKCk7CisgICAg
VVN0cmluZyBzcGFjZXMgPSBzcGFjZS5nZXRTdHJpbmcoZXhlYyk7CiAgICAgaWYgKHNwYWNlcy5z
aXplKCkgPiBtYXhHYXBMZW5ndGgpIHsKICAgICAgICAgc3BhY2VzID0gc3BhY2VzLnN1YnN0cigw
LCBtYXhHYXBMZW5ndGgpOwogICAgIH0KQEAgLTIyOSw3ICsyMjksNyBAQCBTdHJpbmdpZmllcjo6
U3RyaW5naWZpZXIoRXhlY1N0YXRlKiBleGVjCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAg
ICAgICAgICAgIFVTdHJpbmcgcHJvcGVydHlOYW1lOwotICAgICAgICAgICAgaWYgKG5hbWUuZ2V0
U3RyaW5nKHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgICAgIGlmIChuYW1lLmdldFN0cmluZyhl
eGVjLCBwcm9wZXJ0eU5hbWUpKSB7CiAgICAgICAgICAgICAgICAgbV9hcnJheVJlcGxhY2VyUHJv
cGVydHlOYW1lcy5hZGQoSWRlbnRpZmllcihleGVjLCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KQEAgLTQwNyw3ICs0MDcsNyBAQCBTdHJp
bmdpZmllcjo6U3RyaW5naWZ5UmVzdWx0IFN0cmluZ2lmaWVyCiAgICAgfQogCiAgICAgVVN0cmlu
ZyBzdHJpbmdWYWx1ZTsKLSAgICBpZiAodmFsdWUuZ2V0U3RyaW5nKHN0cmluZ1ZhbHVlKSkgewor
ICAgIGlmICh2YWx1ZS5nZXRTdHJpbmcobV9leGVjLCBzdHJpbmdWYWx1ZSkpIHsKICAgICAgICAg
YXBwZW5kUXVvdGVkU3RyaW5nKGJ1aWxkZXIsIHN0cmluZ1ZhbHVlKTsKICAgICAgICAgcmV0dXJu
IFN0cmluZ2lmeVN1Y2NlZWRlZDsKICAgICB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkocmV2aXNpb24gNTE3MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIyLDEyICs1MjIsMTIgQEAgdm9pZCBKU09iamVj
dDo6cmVtb3ZlRGlyZWN0KGNvbnN0IElkZW50aQogCiB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RG
dW5jdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCB1bnNp
Z25lZCBhdHRyKQogewotICAgIHB1dERpcmVjdEZ1bmN0aW9uKElkZW50aWZpZXIoZXhlYywgZnVu
Y3Rpb24tPm5hbWUoJmV4ZWMtPmdsb2JhbERhdGEoKSkpLCBmdW5jdGlvbiwgYXR0cik7CisgICAg
cHV0RGlyZWN0RnVuY3Rpb24oSWRlbnRpZmllcihleGVjLCBmdW5jdGlvbi0+bmFtZShleGVjKSks
IGZ1bmN0aW9uLCBhdHRyKTsKIH0KIAogdm9pZCBKU09iamVjdDo6cHV0RGlyZWN0RnVuY3Rpb25X
aXRob3V0VHJhbnNpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0
aW9uLCB1bnNpZ25lZCBhdHRyKQogewotICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5z
aXRpb24oSWRlbnRpZmllcihleGVjLCBmdW5jdGlvbi0+bmFtZSgmZXhlYy0+Z2xvYmFsRGF0YSgp
KSksIGZ1bmN0aW9uLCBhdHRyKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0
aW9uKElkZW50aWZpZXIoZXhlYywgZnVuY3Rpb24tPm5hbWUoZXhlYykpLCBmdW5jdGlvbiwgYXR0
cik7CiB9CiAKIE5FVkVSX0lOTElORSB2b2lkIEpTT2JqZWN0OjpmaWxsR2V0dGVyUHJvcGVydHlT
bG90KFByb3BlcnR5U2xvdCYgc2xvdCwgSlNWYWx1ZSogbG9jYXRpb24pCkBAIC01OTksNyArNTk5
LDcgQEAgYm9vbCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoRXhlY1N0YQogICAgIGlmIChk
ZXNjcmlwdG9yLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoY3Vy
cmVudC5lcXVhbFRvKGRlc2NyaXB0b3IpKQorICAgIGlmIChjdXJyZW50LmVxdWFsVG8oZXhlYywg
ZGVzY3JpcHRvcikpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAgICAgLy8gRmlsdGVyIG91dCBp
bnZhbGlkIGNoYW5nZXMKQEAgLTY0NSw3ICs2NDUsNyBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVP
d25Qcm9wZXJ0eShFeGVjU3RhCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKCFjdXJyZW50LndyaXRhYmxlKCkpIHsKLSAgICAgICAg
ICAgICAgICBpZiAoZGVzY3JpcHRvci52YWx1ZSgpIHx8ICFKU1ZhbHVlOjpzdHJpY3RFcXVhbChj
dXJyZW50LnZhbHVlKCksIGRlc2NyaXB0b3IudmFsdWUoKSkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoZGVzY3JpcHRvci52YWx1ZSgpIHx8ICFKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBjdXJy
ZW50LnZhbHVlKCksIGRlc2NyaXB0b3IudmFsdWUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAg
aWYgKHRocm93RXhjZXB0aW9uKQogICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3dFcnJvcihl
eGVjLCBUeXBlRXJyb3IsICJBdHRlbXB0aW5nIHRvIGNoYW5nZSB2YWx1ZSBvZiBhIHJlYWRvbmx5
IHByb3BlcnR5LiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02Njcs
MTIgKzY2NywxMiBAQCBib29sIEpTT2JqZWN0OjpkZWZpbmVPd25Qcm9wZXJ0eShFeGVjU3RhCiAg
ICAgLy8gQ2hhbmdpbmcgdGhlIGFjY2Vzc29yIGZ1bmN0aW9ucyBvZiBhbiBleGlzdGluZyBhY2Nl
c3NvciBwcm9wZXJ0eQogICAgIEFTU0VSVChkZXNjcmlwdG9yLmlzQWNjZXNzb3JEZXNjcmlwdG9y
KCkpOwogICAgIGlmICghY3VycmVudC5jb25maWd1cmFibGUoKSkgewotICAgICAgICBpZiAoZGVz
Y3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgIShjdXJyZW50LnNldHRlcigpICYmIEpTVmFsdWU6
OnN0cmljdEVxdWFsKGN1cnJlbnQuc2V0dGVyKCksIGRlc2NyaXB0b3Iuc2V0dGVyKCkpKSkgewor
ICAgICAgICBpZiAoZGVzY3JpcHRvci5zZXR0ZXJQcmVzZW50KCkgJiYgIShjdXJyZW50LnNldHRl
cigpICYmIEpTVmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIGN1cnJlbnQuc2V0dGVyKCksIGRlc2Ny
aXB0b3Iuc2V0dGVyKCkpKSkgewogICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uKQogICAg
ICAgICAgICAgICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiQXR0ZW1wdGluZyB0byBj
aGFuZ2UgdGhlIHNldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQotICAgICAgICBpZiAoZGVzY3JpcHRvci5n
ZXR0ZXJQcmVzZW50KCkgJiYgIShjdXJyZW50LmdldHRlcigpICYmIEpTVmFsdWU6OnN0cmljdEVx
dWFsKGN1cnJlbnQuZ2V0dGVyKCksIGRlc2NyaXB0b3IuZ2V0dGVyKCkpKSkgeworICAgICAgICBp
ZiAoZGVzY3JpcHRvci5nZXR0ZXJQcmVzZW50KCkgJiYgIShjdXJyZW50LmdldHRlcigpICYmIEpT
VmFsdWU6OnN0cmljdEVxdWFsKGV4ZWMsIGN1cnJlbnQuZ2V0dGVyKCksIGRlc2NyaXB0b3IuZ2V0
dGVyKCkpKSkgewogICAgICAgICAgICAgaWYgKHRocm93RXhjZXB0aW9uKQogICAgICAgICAgICAg
ICAgIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiQXR0ZW1wdGluZyB0byBjaGFuZ2UgdGhl
IGdldHRlciBvZiBhbiB1bmNvbmZpZ3VyYWJsZSBwcm9wZXJ0eS4iKTsKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJldmlzaW9uIDUx
NzA4KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzQsNyArMjM0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVzaW5nIEpTQ2Vs
bDo6aXNHZXR0ZXJTZXR0ZXI7CiAgICAgICAgIHVzaW5nIEpTQ2VsbDo6dG9PYmplY3Q7CiAgICAg
ICAgIHZvaWQgZ2V0T2JqZWN0KCk7Ci0gICAgICAgIHZvaWQgZ2V0U3RyaW5nKCk7CisgICAgICAg
IHZvaWQgZ2V0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYyk7CiAgICAgICAgIHZvaWQgaXNPYmplY3Qo
KTsKICAgICAgICAgdm9pZCBpc1N0cmluZygpOwogI2lmIFVTRShKU1ZBTFVFMzIpCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJ
KHJldmlzaW9uIDUxNzA4KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb3BlcnR5TmFt
ZUl0ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNyArNzcsNyBAQCBKU1ZhbHVlIEpT
UHJvcGVydHlOYW1lSXRlcmF0b3I6OmdldChFeGVjCiAgICAgaWYgKG1fY2FjaGVkU3RydWN0dXJl
ID09IGJhc2UtPnN0cnVjdHVyZSgpICYmIG1fY2FjaGVkUHJvdG90eXBlQ2hhaW4gPT0gYmFzZS0+
c3RydWN0dXJlKCktPnByb3RvdHlwZUNoYWluKGV4ZWMpKQogICAgICAgICByZXR1cm4gaWRlbnRp
ZmllcjsKIAotICAgIGlmICghYmFzZS0+aGFzUHJvcGVydHkoZXhlYywgSWRlbnRpZmllcihleGVj
LCBhc1N0cmluZyhpZGVudGlmaWVyKS0+dmFsdWUoKSkpKQorICAgIGlmICghYmFzZS0+aGFzUHJv
cGVydHkoZXhlYywgSWRlbnRpZmllcihleGVjLCBhc1N0cmluZyhpZGVudGlmaWVyKS0+dmFsdWUo
ZXhlYykpKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICByZXR1cm4gaWRlbnRpZmll
cjsKIH0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiA1MTcw
OCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yNSw2ICsyNSw3IEBACiAKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1
ZGUgIkpTT2JqZWN0LmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlN0cmlu
Z09iamVjdC5oIgogI2luY2x1ZGUgIlN0cmluZ1Byb3RvdHlwZS5oIgogCkBAIC0zOCw2ICszOSw3
IEBAIEpTU3RyaW5nOjpSb3BlOjp+Um9wZSgpCiAgICAgICAgICAgICBmaWJlci5yb3BlKCktPmRl
cmVmKCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGZpYmVyLnN0cmluZygpLT5kZXJlZigp
OworICAgICAgICBmaWJlciA9IEZpYmVyKHJlaW50ZXJwcmV0X2Nhc3Q8VVN0cmluZzo6UmVwKj4o
MHhmZWVkYmVlZSkpOwogICAgIH0KIH0KIApAQCAtNjUsMTIgKzY3LDIwIEBAIHN0YXRpYyBpbmxp
bmUgdm9pZCBjb3B5Q2hhcnMoVUNoYXIqIGRlc3QKIC8vIFZlY3RvciBiZWZvcmUgcGVyZm9ybWlu
ZyBhbnkgY29uY2F0ZW5hdGlvbiwgYnV0IGJ5IHdvcmtpbmcgYmFja3dhcmRzIHdlIGxpa2VseQog
Ly8gb25seSBmaWxsIHRoZSBxdWV1ZSB3aXRoIHRoZSBudW1iZXIgb2Ygc3Vic3RyaW5ncyBhdCBh
bnkgZ2l2ZW4gbGV2ZWwgaW4gYQogLy8gcm9wZS1vZi1yb3Blcy4pCi12b2lkIEpTU3RyaW5nOjpy
ZXNvbHZlUm9wZSgpIGNvbnN0Cit2b2lkIEpTU3RyaW5nOjpyZXNvbHZlUm9wZShFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGlzUm9wZSgpKTsKIAogICAgIC8vIEFsbG9jYXRl
IHRoZSBidWZmZXIgdG8gaG9sZCB0aGUgZmluYWwgc3RyaW5nLCBwb3NpdGlvbiBpbml0aWFsbHkg
cG9pbnRzIHRvIHRoZSBlbmQuCi0gICAgVUNoYXIqIGJ1ZmZlciA9IHN0YXRpY19jYXN0PFVDaGFy
Kj4oZmFzdE1hbGxvYyhtX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpKTsKKyAgICBVQ2hhciogYnVm
ZmVyOworICAgIGlmICghdHJ5RmFzdE1hbGxvYyhtX2xlbmd0aCAqIHNpemVvZihVQ2hhcikpLmdl
dFZhbHVlKGJ1ZmZlcikpIHsKKyAgICAgICAgbV9yb3BlLmNsZWFyKCk7CisgICAgICAgIEFTU0VS
VCghaXNSb3BlKCkpOworICAgICAgICBBU1NFUlQobV92YWx1ZSA9PSBVU3RyaW5nKCkpOworCisg
ICAgICAgIHRocm93T3V0T2ZNZW1vcnlFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KICAgICBVQ2hhciogcG9zaXRpb24gPSBidWZmZXIgKyBtX2xlbmd0aDsKIAogICAgIC8vIFN0
YXJ0IHdpdGggdGhlIGN1cnJlbnQgUm9wZS4KQEAgLTkzLDggKzEwMywxNiBAQCB2b2lkIEpTU3Ry
aW5nOjpyZXNvbHZlUm9wZSgpIGNvbnN0CiAgICAgICAgICAgICBjb3B5Q2hhcnMocG9zaXRpb24s
IHN0cmluZy0+ZGF0YSgpLCBsZW5ndGgpOwogCiAgICAgICAgICAgICAvLyBXYXMgdGhpcyB0aGUg
bGFzdCBpdGVtIGluIHRoZSB3b3JrIHF1ZXVlPwotICAgICAgICAgICAgaWYgKHdvcmtRdWV1ZS5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgZ290byBicmVha091dE9mVHdvTG9vcHM7CisgICAg
ICAgICAgICBpZiAod29ya1F1ZXVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIC8vIENy
ZWF0ZSBhIHN0cmluZyBmcm9tIHRoZSBVQ2hhciBidWZmZXIsIGNsZWFyIHRoZSByb3BlIFJlZlB0
ci4KKyAgICAgICAgICAgICAgICBBU1NFUlQoYnVmZmVyID09IHBvc2l0aW9uKTsKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlID0gVVN0cmluZyhidWZmZXIsIG1fbGVuZ3RoLCBmYWxzZSk7CisgICAg
ICAgICAgICAgICAgbV9yb3BlLmNsZWFyKCk7CisKKyAgICAgICAgICAgICAgICBBU1NFUlQoIWlz
Um9wZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKICAgICAg
ICAgICAgIC8vIE5vISAtIHNldCB0aGUgbmV4dCBpdGVtIHVwIHRvIHByb2Nlc3MuCiAgICAgICAg
ICAgICBjdXJyZW50RmliZXIgPSB3b3JrUXVldWUubGFzdCgpOwogICAgICAgICAgICAgd29ya1F1
ZXVlLnJlbW92ZUxhc3QoKTsKQEAgLTEwNSwxNCArMTIzLDYgQEAgdm9pZCBKU1N0cmluZzo6cmVz
b2x2ZVJvcGUoKSBjb25zdAogICAgICAgICBBU1NFUlQoY3VycmVudEZpYmVyLmlzUm9wZSgpKTsK
ICAgICAgICAgcm9wZSA9IGN1cnJlbnRGaWJlci5yb3BlKCk7CiAgICAgfQotYnJlYWtPdXRPZlR3
b0xvb3BzOgotCi0gICAgLy8gQ3JlYXRlIGEgc3RyaW5nIGZyb20gdGhlIFVDaGFyIGJ1ZmZlciwg
Y2xlYXIgdGhlIHJvcGUgUmVmUHRyLgotICAgIEFTU0VSVChidWZmZXIgPT0gcG9zaXRpb24pOwot
ICAgIG1fdmFsdWUgPSBVU3RyaW5nOjpSZXA6OmNyZWF0ZShidWZmZXIsIG1fbGVuZ3RoLCBmYWxz
ZSk7Ci0gICAgbV9yb3BlLmNsZWFyKCk7Ci0KLSAgICBBU1NFUlQoIWlzUm9wZSgpKTsKIH0KIAog
SlNWYWx1ZSBKU1N0cmluZzo6dG9QcmltaXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0
aXZlVHlwZSkgY29uc3QKQEAgLTEyMCwxMCArMTMwLDEwIEBAIEpTVmFsdWUgSlNTdHJpbmc6OnRv
UHJpbWl0aXZlKEV4ZWNTdGF0ZSoKICAgICByZXR1cm4gY29uc3RfY2FzdDxKU1N0cmluZyo+KHRo
aXMpOwogfQogCi1ib29sIEpTU3RyaW5nOjpnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwg
ZG91YmxlJiBudW1iZXIsIEpTVmFsdWUmIHJlc3VsdCkKK2Jvb2wgSlNTdHJpbmc6OmdldFByaW1p
dGl2ZU51bWJlcihFeGVjU3RhdGUqIGV4ZWMsIGRvdWJsZSYgbnVtYmVyLCBKU1ZhbHVlJiByZXN1
bHQpCiB7CiAgICAgcmVzdWx0ID0gdGhpczsKLSAgICBudW1iZXIgPSB2YWx1ZSgpLnRvRG91Ymxl
KCk7CisgICAgbnVtYmVyID0gdmFsdWUoZXhlYykudG9Eb3VibGUoKTsKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKQEAgLTEzMiwxOSArMTQyLDE5IEBAIGJvb2wgSlNTdHJpbmc6OnRvQm9vbGVhbihF
eGVjU3RhdGUqKSBjb24KICAgICByZXR1cm4gbV9sZW5ndGg7CiB9CiAKLWRvdWJsZSBKU1N0cmlu
Zzo6dG9OdW1iZXIoRXhlY1N0YXRlKikgY29uc3QKK2RvdWJsZSBKU1N0cmluZzo6dG9OdW1iZXIo
RXhlY1N0YXRlKiBleGVjKSBjb25zdAogewotICAgIHJldHVybiB2YWx1ZSgpLnRvRG91YmxlKCk7
CisgICAgcmV0dXJuIHZhbHVlKGV4ZWMpLnRvRG91YmxlKCk7CiB9CiAKLVVTdHJpbmcgSlNTdHJp
bmc6OnRvU3RyaW5nKEV4ZWNTdGF0ZSopIGNvbnN0CitVU3RyaW5nIEpTU3RyaW5nOjp0b1N0cmlu
ZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHZhbHVlKCk7CisgICAgcmV0
dXJuIHZhbHVlKGV4ZWMpOwogfQogCi1VU3RyaW5nIEpTU3RyaW5nOjp0b1RoaXNTdHJpbmcoRXhl
Y1N0YXRlKikgY29uc3QKK1VTdHJpbmcgSlNTdHJpbmc6OnRvVGhpc1N0cmluZyhFeGVjU3RhdGUq
IGV4ZWMpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHZhbHVlKCk7CisgICAgcmV0dXJuIHZhbHVlKGV4
ZWMpOwogfQogCiBKU1N0cmluZyogSlNTdHJpbmc6OnRvVGhpc0pTU3RyaW5nKEV4ZWNTdGF0ZSop
CkBAIC0xOTgsNyArMjA4LDcgQEAgYm9vbCBKU1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlEZXNj
cmlwdAogICAgIGJvb2wgaXNTdHJpY3RVSW50MzI7CiAgICAgdW5zaWduZWQgaSA9IHByb3BlcnR5
TmFtZS50b1N0cmljdFVJbnQzMigmaXNTdHJpY3RVSW50MzIpOwogICAgIGlmIChpc1N0cmljdFVJ
bnQzMiAmJiBpIDwgbV9sZW5ndGgpIHsKLSAgICAgICAgZGVzY3JpcHRvci5zZXREZXNjcmlwdG9y
KGpzU2luZ2xlQ2hhcmFjdGVyU3Vic3RyaW5nKGV4ZWMsIHZhbHVlKCksIGkpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpOworICAgICAgICBkZXNjcmlwdG9yLnNldERlc2NyaXB0b3IoanNTaW5nbGVD
aGFyYWN0ZXJTdWJzdHJpbmcoZXhlYywgdmFsdWUoZXhlYyksIGkpLCBEb250RGVsZXRlIHwgUmVh
ZE9ubHkpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5oCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsMTMgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgICAgIC8vIENyZWF0ZXMgYSBSb3BlIGNvbXByaXNpbmcgb2Yg
J3JvcGVMZW5ndGgnIEZpYmVycy4KICAgICAgICAgICAgIC8vIFRoZSBSb3BlIGlzIGNvbnN0cnVj
dGVkIGluIGFuIHVuaW5pdGlhbGl6ZWQgc3RhdGUgLSBpbml0aWFsaXplIG11c3QgYmUgY2FsbGVk
IGZvciBlYWNoIEZpYmVyIGluIHRoZSBSb3BlLgotICAgICAgICAgICAgc3RhdGljIFBhc3NSZWZQ
dHI8Um9wZT4gY3JlYXRlKHVuc2lnbmVkIHJvcGVMZW5ndGgpIHsgcmV0dXJuIGFkb3B0UmVmKG5l
dyAocm9wZUxlbmd0aCkgUm9wZShyb3BlTGVuZ3RoKSk7IH0KKyAgICAgICAgICAgIHN0YXRpYyBQ
YXNzUmVmUHRyPFJvcGU+IGNyZWF0ZU9yTnVsbCh1bnNpZ25lZCByb3BlTGVuZ3RoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHZvaWQqIGFsbG9jYXRpb247CisgICAgICAgICAgICAg
ICAgaWYgKHRyeUZhc3RNYWxsb2Moc2l6ZW9mKFJvcGUpICsgKHJvcGVMZW5ndGggLSAxKSAqIHNp
emVvZihGaWJlcikpLmdldFZhbHVlKGFsbG9jYXRpb24pKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IChhbGxvY2F0aW9uKSBSb3BlKHJvcGVMZW5ndGgpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgflJvcGUo
KTsKIApAQCAtMTE2LDcgKzEyMiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHByaXZh
dGU6CiAgICAgICAgICAgICBSb3BlKHVuc2lnbmVkIHJvcGVMZW5ndGgpIDogbV9yb3BlTGVuZ3Ro
KHJvcGVMZW5ndGgpLCBtX3N0cmluZ0xlbmd0aCgwKSB7fQotICAgICAgICAgICAgdm9pZCogb3Bl
cmF0b3IgbmV3KHNpemVfdCwgdW5zaWduZWQgcm9wZUxlbmd0aCkgeyByZXR1cm4gZmFzdE1hbGxv
YyhzaXplb2YoUm9wZSkgKyAocm9wZUxlbmd0aCAtIDEpICogc2l6ZW9mKFVTdHJpbmc6OlJlcCop
KTsgfQorICAgICAgICAgICAgdm9pZCogb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCogaW5QbGFj
ZSkgeyByZXR1cm4gaW5QbGFjZTsgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICB1bnNpZ25l
ZCBtX3JvcGVMZW5ndGg7CiAgICAgICAgICAgICB1bnNpZ25lZCBtX3N0cmluZ0xlbmd0aDsKQEAg
LTE1MCwxMSArMTU2LDE3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgLCBtX3JvcGUo
cm9wZSkKICAgICAgICAgewogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBjb25zdCBVU3Ry
aW5nJiB2YWx1ZSgpIGNvbnN0CisKKyAgICAgICAgY29uc3QgVVN0cmluZyYgdmFsdWUoRXhlY1N0
YXRlKiBleGVjKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9yb3BlKQorICAg
ICAgICAgICAgICAgIHJlc29sdmVSb3BlKGV4ZWMpOworICAgICAgICAgICAgcmV0dXJuIG1fdmFs
dWU7CisgICAgICAgIH0KKyAgICAgICAgY29uc3QgVVN0cmluZyB0cnlHZXRWYWx1ZSgpIGNvbnN0
CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmIChtX3JvcGUpCi0gICAgICAgICAgICAgICAgcmVz
b2x2ZVJvcGUoKTsKKyAgICAgICAgICAgICAgICBVU3RyaW5nKCk7CiAgICAgICAgICAgICByZXR1
cm4gbV92YWx1ZTsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCBsZW5ndGgoKSB7IHJldHVy
biBtX2xlbmd0aDsgfQpAQCAtMTY4LDcgKzE4MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBib29sIGdldFN0cmluZ1Byb3BlcnR5RGVzY3JpcHRvcihFeGVjU3RhdGUqLCBjb25zdCBJZGVu
dGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYpOwogCiAgICAgICAgIGJv
b2wgY2FuR2V0SW5kZXgodW5zaWduZWQgaSkgeyByZXR1cm4gaSA8IG1fbGVuZ3RoOyB9Ci0gICAg
ICAgIEpTU3RyaW5nKiBnZXRJbmRleChKU0dsb2JhbERhdGEqLCB1bnNpZ25lZCk7CisgICAgICAg
IEpTU3RyaW5nKiBnZXRJbmRleChFeGVjU3RhdGUqLCB1bnNpZ25lZCk7CiAKICAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8U3RydWN0dXJlPiBjcmVhdGVTdHJ1Y3R1cmUoSlNWYWx1ZSBwcm90bykg
eyByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUocHJvdG8sIFR5cGVJbmZvKFN0cmluZ1R5cGUsIE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IE5lZWRzVGhpc0NvbnZlcnNpb24pKTsgfQogCkBA
IC0xNzksNyArMTkxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQog
Ci0gICAgICAgIHZvaWQgcmVzb2x2ZVJvcGUoKSBjb25zdDsKKyAgICAgICAgdm9pZCByZXNvbHZl
Um9wZShFeGVjU3RhdGUqKSBjb25zdDsKIAogICAgICAgICB2aXJ0dWFsIEpTVmFsdWUgdG9Qcmlt
aXRpdmUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAgICAgICAg
IHZpcnR1YWwgYm9vbCBnZXRQcmltaXRpdmVOdW1iZXIoRXhlY1N0YXRlKiwgZG91YmxlJiBudW1i
ZXIsIEpTVmFsdWUmIHZhbHVlKTsKQEAgLTI0NiwxMCArMjU4LDEwIEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICByZXR1cm4gbmV3IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCBz
KTsKICAgICB9CiAKLSAgICBpbmxpbmUgSlNTdHJpbmcqIEpTU3RyaW5nOjpnZXRJbmRleChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIHVuc2lnbmVkIGkpCisgICAgaW5saW5lIEpTU3RyaW5nKiBK
U1N0cmluZzo6Z2V0SW5kZXgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGNhbkdldEluZGV4KGkpKTsKLSAgICAgICAgcmV0dXJuIGpzU2luZ2xlQ2hh
cmFjdGVyU3Vic3RyaW5nKGdsb2JhbERhdGEsIHZhbHVlKCksIGkpOworICAgICAgICByZXR1cm4g
anNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoJmV4ZWMtPmdsb2JhbERhdGEoKSwgdmFsdWUoZXhl
YyksIGkpOwogICAgIH0KIAogICAgIGlubGluZSBKU1N0cmluZyoganNTdHJpbmcoSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBzKQpAQCAtMzEyLDcgKzMyNCw3IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBib29sIGlzU3RyaWN0VUludDMyOwogICAgICAgICB1bnNp
Z25lZCBpID0gcHJvcGVydHlOYW1lLnRvU3RyaWN0VUludDMyKCZpc1N0cmljdFVJbnQzMik7CiAg
ICAgICAgIGlmIChpc1N0cmljdFVJbnQzMiAmJiBpIDwgbV9sZW5ndGgpIHsKLSAgICAgICAgICAg
IHNsb3Quc2V0VmFsdWUoanNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoZXhlYywgdmFsdWUoKSwg
aSkpOworICAgICAgICAgICAgc2xvdC5zZXRWYWx1ZShqc1NpbmdsZUNoYXJhY3RlclN1YnN0cmlu
ZyhleGVjLCB2YWx1ZShleGVjKSwgaSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KIApAQCAtMzIyLDcgKzMzNCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIEFMV0FZU19J
TkxJTkUgYm9vbCBKU1N0cmluZzo6Z2V0U3RyaW5nUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSogZXhl
YywgdW5zaWduZWQgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiAgICAgewogICAg
ICAgICBpZiAocHJvcGVydHlOYW1lIDwgbV9sZW5ndGgpIHsKLSAgICAgICAgICAgIHNsb3Quc2V0
VmFsdWUoanNTaW5nbGVDaGFyYWN0ZXJTdWJzdHJpbmcoZXhlYywgdmFsdWUoKSwgcHJvcGVydHlO
YW1lKSk7CisgICAgICAgICAgICBzbG90LnNldFZhbHVlKGpzU2luZ2xlQ2hhcmFjdGVyU3Vic3Ry
aW5nKGV4ZWMsIHZhbHVlKGV4ZWMpLCBwcm9wZXJ0eU5hbWUpKTsKICAgICAgICAgICAgIHJldHVy
biB0cnVlOwogICAgICAgICB9CiAKQEAgLTM0MSw3ICszNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICBpbmxpbmUgVVN0cmluZyBKU1ZhbHVlOjp0b1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CiAgICAgewogICAgICAgICBpZiAoaXNTdHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxKU1N0cmluZyo+KGFzQ2VsbCgpKS0+dmFsdWUoKTsKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGFzQ2VsbCgpKS0+dmFsdWUoZXhlYyk7CiAgICAg
ICAgIGlmIChpc0ludDMyKCkpCiAgICAgICAgICAgICByZXR1cm4gZXhlYy0+Z2xvYmFsRGF0YSgp
Lm51bWVyaWNTdHJpbmdzLmFkZChhc0ludDMyKCkpOwogICAgICAgICBpZiAoaXNEb3VibGUoKSkK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsOCArMTM3
LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wgZ2V0Qm9vbGVhbigpIGNvbnN0OyAv
LyBmYWxzZSBpZiBub3QgYSBib29sZWFuCiAgICAgICAgIGJvb2wgZ2V0TnVtYmVyKGRvdWJsZSYp
IGNvbnN0OwogICAgICAgICBkb3VibGUgdW5jaGVja2VkR2V0TnVtYmVyKCkgY29uc3Q7Ci0gICAg
ICAgIGJvb2wgZ2V0U3RyaW5nKFVTdHJpbmcmKSBjb25zdDsKLSAgICAgICAgVVN0cmluZyBnZXRT
dHJpbmcoKSBjb25zdDsgLy8gbnVsbCBzdHJpbmcgaWYgbm90IGEgc3RyaW5nCisgICAgICAgIGJv
b2wgZ2V0U3RyaW5nKEV4ZWNTdGF0ZSogZXhlYywgVVN0cmluZyYpIGNvbnN0OworICAgICAgICBV
U3RyaW5nIGdldFN0cmluZyhFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0OyAvLyBudWxsIHN0cmluZyBp
ZiBub3QgYSBzdHJpbmcKICAgICAgICAgSlNPYmplY3QqIGdldE9iamVjdCgpIGNvbnN0OyAvLyAw
IGlmIG5vdCBhbiBvYmplY3QKIAogICAgICAgICBDYWxsVHlwZSBnZXRDYWxsRGF0YShDYWxsRGF0
YSYpOwpAQCAtMTkyLDkgKzE5Miw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMg
Ym9vbCBlcXVhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpOwogICAg
ICAgICBzdGF0aWMgYm9vbCBlcXVhbFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2
MSwgSlNWYWx1ZSB2Mik7CiAgICAgICAgIHN0YXRpYyBib29sIGVxdWFsU2xvd0Nhc2VJbmxpbmUo
RXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKTsKLSAgICAgICAgc3RhdGlj
IGJvb2wgc3RyaWN0RXF1YWwoSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2Mik7Ci0gICAgICAgIHN0YXRp
YyBib29sIHN0cmljdEVxdWFsU2xvd0Nhc2UoSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2Mik7Ci0gICAg
ICAgIHN0YXRpYyBib29sIHN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUoSlNWYWx1ZSB2MSwgSlNW
YWx1ZSB2Mik7CisgICAgICAgIHN0YXRpYyBib29sIHN0cmljdEVxdWFsKEV4ZWNTdGF0ZSogZXhl
YywgSlNWYWx1ZSB2MSwgSlNWYWx1ZSB2Mik7CisgICAgICAgIHN0YXRpYyBib29sIHN0cmljdEVx
dWFsU2xvd0Nhc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKTsKKyAg
ICAgICAgc3RhdGljIGJvb2wgc3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZShFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpOwogCiAgICAgICAgIEpTVmFsdWUgZ2V0SlNOdW1i
ZXIoKTsgLy8gSlNWYWx1ZSgpIGlmIHRoaXMgaXMgbm90IGEgSlNOdW1iZXIgb3IgbnVtYmVyIG9i
amVjdAogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDUxNzA4KQorKysgSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMs
NyBAQCBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKE5hdGl2ZUVycm9yQ29uCiBjb25zdCBDbGFz
c0luZm8gTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6aW5mbyA9IHsgIkZ1bmN0aW9uIiwgJkludGVy
bmFsRnVuY3Rpb246OmluZm8sIDAsIDAgfTsKIAogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvcjo6TmF0
aXZlRXJyb3JDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIE5vbk51bGxQYXNzUmVmUHRyPFN0
cnVjdHVyZT4gc3RydWN0dXJlLCBOYXRpdmVFcnJvclByb3RvdHlwZSogbmF0aXZlRXJyb3JQcm90
b3R5cGUpCi0gICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVj
dHVyZSwgSWRlbnRpZmllcihleGVjLCBuYXRpdmVFcnJvclByb3RvdHlwZS0+Z2V0RGlyZWN0KGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lKS5nZXRTdHJpbmcoKSkpCisgICAgOiBJbnRlcm5hbEZ1
bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBu
YXRpdmVFcnJvclByb3RvdHlwZS0+Z2V0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1l
KS5nZXRTdHJpbmcoZXhlYykpKQogICAgICwgbV9lcnJvclN0cnVjdHVyZShFcnJvckluc3RhbmNl
OjpjcmVhdGVTdHJ1Y3R1cmUobmF0aXZlRXJyb3JQcm90b3R5cGUpKQogewogICAgIHB1dERpcmVj
dChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5IHwgRG9udEVudW0pOyAvLyBFQ01BIDE1LjExLjcuNQpJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDkg
KzM2LDkgQEAgYm9vbCBKU1ZhbHVlOjplcXVhbFNsb3dDYXNlKEV4ZWNTdGF0ZSogZQogICAgIHJl
dHVybiBlcXVhbFNsb3dDYXNlSW5saW5lKGV4ZWMsIHYxLCB2Mik7CiB9CiAKLWJvb2wgSlNWYWx1
ZTo6c3RyaWN0RXF1YWxTbG93Q2FzZShKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQorYm9vbCBKU1Zh
bHVlOjpzdHJpY3RFcXVhbFNsb3dDYXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2MSwgSlNW
YWx1ZSB2MikKIHsKLSAgICByZXR1cm4gc3RyaWN0RXF1YWxTbG93Q2FzZUlubGluZSh2MSwgdjIp
OworICAgIHJldHVybiBzdHJpY3RFcXVhbFNsb3dDYXNlSW5saW5lKGV4ZWMsIHYxLCB2Mik7CiB9
CiAKIE5FVkVSX0lOTElORSBKU1ZhbHVlIHRocm93T3V0T2ZNZW1vcnlFcnJvcihFeGVjU3RhdGUq
IGV4ZWMpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkocmV2aXNpb24gNTE3
MDgpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtNTMsNyArNTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIGJvb2wgczEg
PSB2MS5pc1N0cmluZygpOwogICAgICAgICAgICAgYm9vbCBzMiA9IHYyLmlzU3RyaW5nKCk7CiAg
ICAgICAgICAgICBpZiAoczEgJiYgczIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGFzU3RyaW5n
KHYxKS0+dmFsdWUoKSA9PSBhc1N0cmluZyh2MiktPnZhbHVlKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGFzU3RyaW5nKHYxKS0+dmFsdWUoZXhlYykgPT0gYXNTdHJpbmcodjIpLT52YWx1ZShl
eGVjKTsKIAogICAgICAgICAgICAgaWYgKHYxLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKICAgICAg
ICAgICAgICAgICBpZiAodjIuaXNVbmRlZmluZWRPck51bGwoKSkKQEAgLTExMCwxNyArMTEwLDE3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIH0KIAogICAgIC8vIEVDTUEgMTEuOS4zCi0gICAgQUxX
QVlTX0lOTElORSBib29sIEpTVmFsdWU6OnN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUoSlNWYWx1
ZSB2MSwgSlNWYWx1ZSB2MikKKyAgICBBTFdBWVNfSU5MSU5FIGJvb2wgSlNWYWx1ZTo6c3RyaWN0
RXF1YWxTbG93Q2FzZUlubGluZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdjEsIEpTVmFsdWUg
djIpCiAgICAgewogICAgICAgICBBU1NFUlQodjEuaXNDZWxsKCkgJiYgdjIuaXNDZWxsKCkpOwog
CiAgICAgICAgIGlmICh2MS5hc0NlbGwoKS0+aXNTdHJpbmcoKSAmJiB2Mi5hc0NlbGwoKS0+aXNT
dHJpbmcoKSkKLSAgICAgICAgICAgIHJldHVybiBhc1N0cmluZyh2MSktPnZhbHVlKCkgPT0gYXNT
dHJpbmcodjIpLT52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIGFzU3RyaW5nKHYxKS0+dmFs
dWUoZXhlYykgPT0gYXNTdHJpbmcodjIpLT52YWx1ZShleGVjKTsKIAogICAgICAgICByZXR1cm4g
djEgPT0gdjI7CiAgICAgfQogCi0gICAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6c3RyaWN0RXF1YWwo
SlNWYWx1ZSB2MSwgSlNWYWx1ZSB2MikKKyAgICBpbmxpbmUgYm9vbCBKU1ZhbHVlOjpzdHJpY3RF
cXVhbChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCiAgICAgewogICAg
ICAgICBpZiAodjEuaXNJbnQzMigpICYmIHYyLmlzSW50MzIoKSkKICAgICAgICAgICAgIHJldHVy
biB2MSA9PSB2MjsKQEAgLTEzMSw3ICsxMzEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
aWYgKCF2MS5pc0NlbGwoKSB8fCAhdjIuaXNDZWxsKCkpCiAgICAgICAgICAgICByZXR1cm4gdjEg
PT0gdjI7CiAKLSAgICAgICAgcmV0dXJuIHN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUodjEsIHYy
KTsKKyAgICAgICAgcmV0dXJuIHN0cmljdEVxdWFsU2xvd0Nhc2VJbmxpbmUoZXhlYywgdjEsIHYy
KTsKICAgICB9CiAKICAgICBpbmxpbmUgYm9vbCBqc0xlc3MoQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IEpTVmFsdWUgdjEsIEpTVmFsdWUgdjIpCkBAIC0xNDYsNyArMTQ2LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKICAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpOwogICAgICAgICBpZiAoaXNKU1N0cmluZyhnbG9iYWxEYXRhLCB2MSkgJiYgaXNK
U1N0cmluZyhnbG9iYWxEYXRhLCB2MikpCi0gICAgICAgICAgICByZXR1cm4gYXNTdHJpbmcodjEp
LT52YWx1ZSgpIDwgYXNTdHJpbmcodjIpLT52YWx1ZSgpOworICAgICAgICAgICAgcmV0dXJuIGFz
U3RyaW5nKHYxKS0+dmFsdWUoY2FsbEZyYW1lKSA8IGFzU3RyaW5nKHYyKS0+dmFsdWUoY2FsbEZy
YW1lKTsKIAogICAgICAgICBKU1ZhbHVlIHAxOwogICAgICAgICBKU1ZhbHVlIHAyOwpAQCAtMTU2
LDcgKzE1Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpZiAod2FzTm90U3RyaW5nMSB8
IHdhc05vdFN0cmluZzIpCiAgICAgICAgICAgICByZXR1cm4gbjEgPCBuMjsKIAotICAgICAgICBy
ZXR1cm4gYXNTdHJpbmcocDEpLT52YWx1ZSgpIDwgYXNTdHJpbmcocDIpLT52YWx1ZSgpOworICAg
ICAgICByZXR1cm4gYXNTdHJpbmcocDEpLT52YWx1ZShjYWxsRnJhbWUpIDwgYXNTdHJpbmcocDIp
LT52YWx1ZShjYWxsRnJhbWUpOwogICAgIH0KIAogICAgIGlubGluZSBib29sIGpzTGVzc0VxKENh
bGxGcmFtZSogY2FsbEZyYW1lLCBKU1ZhbHVlIHYxLCBKU1ZhbHVlIHYyKQpAQCAtMTcxLDcgKzE3
MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKICAgICAgICAgaWYgKGlzSlNTdHJpbmcoZ2xv
YmFsRGF0YSwgdjEpICYmIGlzSlNTdHJpbmcoZ2xvYmFsRGF0YSwgdjIpKQotICAgICAgICAgICAg
cmV0dXJuICEoYXNTdHJpbmcodjIpLT52YWx1ZSgpIDwgYXNTdHJpbmcodjEpLT52YWx1ZSgpKTsK
KyAgICAgICAgICAgIHJldHVybiAhKGFzU3RyaW5nKHYyKS0+dmFsdWUoY2FsbEZyYW1lKSA8IGFz
U3RyaW5nKHYxKS0+dmFsdWUoY2FsbEZyYW1lKSk7CiAKICAgICAgICAgSlNWYWx1ZSBwMTsKICAg
ICAgICAgSlNWYWx1ZSBwMjsKQEAgLTE4MSw3ICsxODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgaWYgKHdhc05vdFN0cmluZzEgfCB3YXNOb3RTdHJpbmcyKQogICAgICAgICAgICAgcmV0
dXJuIG4xIDw9IG4yOwogCi0gICAgICAgIHJldHVybiAhKGFzU3RyaW5nKHAyKS0+dmFsdWUoKSA8
IGFzU3RyaW5nKHAxKS0+dmFsdWUoKSk7CisgICAgICAgIHJldHVybiAhKGFzU3RyaW5nKHAyKS0+
dmFsdWUoY2FsbEZyYW1lKSA8IGFzU3RyaW5nKHAxKS0+dmFsdWUoY2FsbEZyYW1lKSk7CiAgICAg
fQogCiAgICAgLy8gRmFzdC1wYXRoIGNob2ljZXMgaGVyZSBhcmUgYmFzZWQgb24gZnJlcXVlbmN5
IGRhdGEgZnJvbSBTdW5TcGlkZXI6CkBAIC0yMDUsMTQgKzIwNSwxNiBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgYm9vbCBsZWZ0SXNTdHJpbmcgPSB2MS5pc1N0cmluZygpOwogICAgICAgICBp
ZiAobGVmdElzU3RyaW5nICYmIHYyLmlzU3RyaW5nKCkpIHsKICAgICAgICAgICAgIGlmIChhc1N0
cmluZyh2MSktPmlzUm9wZSgpIHx8IGFzU3RyaW5nKHYyKS0+aXNSb3BlKCkpIHsKLSAgICAgICAg
ICAgICAgICBSZWZQdHI8SlNTdHJpbmc6OlJvcGU+IHJvcGUgPSBKU1N0cmluZzo6Um9wZTo6Y3Jl
YXRlKDIpOworICAgICAgICAgICAgICAgIFJlZlB0cjxKU1N0cmluZzo6Um9wZT4gcm9wZSA9IEpT
U3RyaW5nOjpSb3BlOjpjcmVhdGVPck51bGwoMik7CisgICAgICAgICAgICAgICAgaWYgKFVOTElL
RUxZKCFyb3BlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlF
cnJvcihjYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIHJvcGUtPmluaXRpYWxpemVGaWJlcigw
LCBhc1N0cmluZyh2MSkpOwogICAgICAgICAgICAgICAgIHJvcGUtPmluaXRpYWxpemVGaWJlcigx
LCBhc1N0cmluZyh2MikpOwogICAgICAgICAgICAgICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSA9ICZjYWxsRnJhbWUtPmdsb2JhbERhdGEoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbmV3
IChnbG9iYWxEYXRhKSBKU1N0cmluZyhnbG9iYWxEYXRhLCByb3BlLnJlbGVhc2UoKSk7CiAgICAg
ICAgICAgICB9CiAKLSAgICAgICAgICAgIFJlZlB0cjxVU3RyaW5nOjpSZXA+IHZhbHVlID0gY29u
Y2F0ZW5hdGUoYXNTdHJpbmcodjEpLT52YWx1ZSgpLnJlcCgpLCBhc1N0cmluZyh2MiktPnZhbHVl
KCkucmVwKCkpOworICAgICAgICAgICAgUmVmUHRyPFVTdHJpbmc6OlJlcD4gdmFsdWUgPSBjb25j
YXRlbmF0ZShhc1N0cmluZyh2MSktPnZhbHVlKGNhbGxGcmFtZSkucmVwKCksIGFzU3RyaW5nKHYy
KS0+dmFsdWUoY2FsbEZyYW1lKS5yZXAoKSk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAg
ICAgICAgICAgICAgIHJldHVybiB0aHJvd091dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKICAg
ICAgICAgICAgIHJldHVybiBqc1N0cmluZyhjYWxsRnJhbWUsIHZhbHVlLnJlbGVhc2UoKSk7CkBA
IC0yMjAsOCArMjIyLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgaWYgKHJpZ2h0SXNO
dW1iZXIgJiBsZWZ0SXNTdHJpbmcpIHsKICAgICAgICAgICAgIFJlZlB0cjxVU3RyaW5nOjpSZXA+
IHZhbHVlID0gdjIuaXNJbnQzMigpID8KLSAgICAgICAgICAgICAgICBjb25jYXRlbmF0ZShhc1N0
cmluZyh2MSktPnZhbHVlKCkucmVwKCksIHYyLmFzSW50MzIoKSkgOgotICAgICAgICAgICAgICAg
IGNvbmNhdGVuYXRlKGFzU3RyaW5nKHYxKS0+dmFsdWUoKS5yZXAoKSwgcmlnaHQpOworICAgICAg
ICAgICAgICAgIGNvbmNhdGVuYXRlKGFzU3RyaW5nKHYxKS0+dmFsdWUoY2FsbEZyYW1lKS5yZXAo
KSwgdjIuYXNJbnQzMigpKSA6CisgICAgICAgICAgICAgICAgY29uY2F0ZW5hdGUoYXNTdHJpbmco
djEpLT52YWx1ZShjYWxsRnJhbWUpLnJlcCgpLCByaWdodCk7CiAKICAgICAgICAgICAgIGlmICgh
dmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93T3V0T2ZNZW1vcnlFcnJvcihjYWxs
RnJhbWUpOwpAQCAtMzA2LDcgKzMwOCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHsKICAgICAg
ICAgQVNTRVJUKGNvdW50ID49IDMpOwogCi0gICAgICAgIFJlZlB0cjxKU1N0cmluZzo6Um9wZT4g
cm9wZSA9IEpTU3RyaW5nOjpSb3BlOjpjcmVhdGUoY291bnQpOworICAgICAgICBSZWZQdHI8SlNT
dHJpbmc6OlJvcGU+IHJvcGUgPSBKU1N0cmluZzo6Um9wZTo6Y3JlYXRlT3JOdWxsKGNvdW50KTsK
KyAgICAgICAgaWYgKFVOTElLRUxZKCFyb3BlKSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd091
dE9mTWVtb3J5RXJyb3IoY2FsbEZyYW1lKTsKIAogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgY291bnQ7ICsraSkgewogICAgICAgICAgICAgSlNWYWx1ZSB2ID0gc3RyaW5nc1tpXS5q
c1ZhbHVlKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2Ny
aXB0b3IuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJv
cGVydHlEZXNjcmlwdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDE1ICsxNTMsMTUgQEAg
dm9pZCBQcm9wZXJ0eURlc2NyaXB0b3I6OnNldEdldHRlcihKU1ZhbAogICAgIG1fYXR0cmlidXRl
cyAmPSB+UmVhZE9ubHk7CiB9CiAKLWJvb2wgUHJvcGVydHlEZXNjcmlwdG9yOjplcXVhbFRvKGNv
bnN0IFByb3BlcnR5RGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0Citib29sIFByb3BlcnR5RGVzY3Jp
cHRvcjo6ZXF1YWxUbyhFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYg
b3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKCFvdGhlci5tX3ZhbHVlID09IG1fdmFsdWUgfHwKICAg
ICAgICAgIW90aGVyLm1fZ2V0dGVyID09IG1fZ2V0dGVyIHx8CiAgICAgICAgICFvdGhlci5tX3Nl
dHRlciA9PSBtX3NldHRlcikKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiAoIW1f
dmFsdWUgfHwgSlNWYWx1ZTo6c3RyaWN0RXF1YWwob3RoZXIubV92YWx1ZSwgbV92YWx1ZSkpICYm
IAotICAgICAgICAgICAoIW1fZ2V0dGVyIHx8IEpTVmFsdWU6OnN0cmljdEVxdWFsKG90aGVyLm1f
Z2V0dGVyLCBtX2dldHRlcikpICYmIAotICAgICAgICAgICAoIW1fc2V0dGVyIHx8IEpTVmFsdWU6
OnN0cmljdEVxdWFsKG90aGVyLm1fc2V0dGVyLCBtX3NldHRlcikpICYmCisgICAgcmV0dXJuICgh
bV92YWx1ZSB8fCBKU1ZhbHVlOjpzdHJpY3RFcXVhbChleGVjLCBvdGhlci5tX3ZhbHVlLCBtX3Zh
bHVlKSkgJiYgCisgICAgICAgICAgICghbV9nZXR0ZXIgfHwgSlNWYWx1ZTo6c3RyaWN0RXF1YWwo
ZXhlYywgb3RoZXIubV9nZXR0ZXIsIG1fZ2V0dGVyKSkgJiYgCisgICAgICAgICAgICghbV9zZXR0
ZXIgfHwgSlNWYWx1ZTo6c3RyaWN0RXF1YWwoZXhlYywgb3RoZXIubV9zZXR0ZXIsIG1fc2V0dGVy
KSkgJiYKICAgICAgICAgICAgYXR0cmlidXRlc0VxdWFsKG90aGVyKTsKIH0KIApJbmRleDogSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Qcm9wZXJ0eURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1Byb3BlcnR5RGVzY3JpcHRvci5oCShyZXZpc2lvbiA1MTcw
OCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHJvcGVydHlEZXNjcmlwdG9yLmgJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDcgKzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGJvb2wg
Y29uZmlndXJhYmxlUHJlc2VudCgpIGNvbnN0IHsgcmV0dXJuIG1fc2VlbkF0dHJpYnV0ZXMgJiBD
b25maWd1cmFibGVQcmVzZW50OyB9CiAgICAgICAgIGJvb2wgc2V0dGVyUHJlc2VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2V0dGVyOyB9CiAgICAgICAgIGJvb2wgZ2V0dGVyUHJlc2VudCgpIGNvbnN0
IHsgcmV0dXJuIG1fZ2V0dGVyOyB9Ci0gICAgICAgIGJvb2wgZXF1YWxUbyhjb25zdCBQcm9wZXJ0
eURlc2NyaXB0b3ImIG90aGVyKSBjb25zdDsKKyAgICAgICAgYm9vbCBlcXVhbFRvKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgUHJvcGVydHlEZXNjcmlwdG9yJiBvdGhlcikgY29uc3Q7CiAgICAgICAg
IGJvb2wgYXR0cmlidXRlc0VxdWFsKGNvbnN0IFByb3BlcnR5RGVzY3JpcHRvciYgb3RoZXIpIGNv
bnN0OwogICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzV2l0aE92ZXJyaWRlKGNvbnN0IFByb3Bl
cnR5RGVzY3JpcHRvciYgb3RoZXIpIGNvbnN0OwogICAgIHByaXZhdGU6CkluZGV4OiBKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cmluZ1Byb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysr
IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI0LDcgKzIyNCw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGxvY2FsZUNvbXBhcmUoY29u
c3QgVVMKIEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNSZXBsYWNlKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKICAgICBKU1N0cmluZyogc291cmNlVmFsID0gdGhpc1ZhbHVlLnRvVGhpc0pTU3Ry
aW5nKGV4ZWMpOwotICAgIGNvbnN0IFVTdHJpbmcmIHNvdXJjZSA9IHNvdXJjZVZhbC0+dmFsdWUo
KTsKKyAgICBjb25zdCBVU3RyaW5nJiBzb3VyY2UgPSBzb3VyY2VWYWwtPnZhbHVlKGV4ZWMpOwog
CiAgICAgSlNWYWx1ZSBwYXR0ZXJuID0gYXJncy5hdCgwKTsKIApAQCAtNjk3LDcgKzY5Nyw3IEBA
IEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNTdWIKIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBzdHJpbmdQcm90b0Z1bmNUb0xvd2VyQ2FzZShFeGVjU3RhdGUqIGV4ZWMsIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKQogewogICAgIEpTU3RyaW5n
KiBzVmFsID0gdGhpc1ZhbHVlLnRvVGhpc0pTU3RyaW5nKGV4ZWMpOwotICAgIGNvbnN0IFVTdHJp
bmcmIHMgPSBzVmFsLT52YWx1ZSgpOworICAgIGNvbnN0IFVTdHJpbmcmIHMgPSBzVmFsLT52YWx1
ZShleGVjKTsKIAogICAgIGludCBzU2l6ZSA9IHMuc2l6ZSgpOwogICAgIGlmICghc1NpemUpCkBA
IC03MzEsNyArNzMxLDcgQEAgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1Rv
TAogSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHN0cmluZ1Byb3RvRnVuY1RvVXBwZXJDYXNlKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlIHRoaXNWYWx1ZSwgY29uc3QgQXJnTGlzdCYp
CiB7CiAgICAgSlNTdHJpbmcqIHNWYWwgPSB0aGlzVmFsdWUudG9UaGlzSlNTdHJpbmcoZXhlYyk7
Ci0gICAgY29uc3QgVVN0cmluZyYgcyA9IHNWYWwtPnZhbHVlKCk7CisgICAgY29uc3QgVVN0cmlu
ZyYgcyA9IHNWYWwtPnZhbHVlKGV4ZWMpOwogCiAgICAgaW50IHNTaXplID0gcy5zaXplKCk7CiAg
ICAgaWYgKCFzU2l6ZSkKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvU2NyaXB0Q29udHJvbGxlckJh
c2UuY3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvU2NyaXB0Q29udHJv
bGxlckJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw5IEBAIGJvb2wgU2NyaXB0
Q29udHJvbGxlcjo6ZXhlY3V0ZUlmSmF2YVNjcmkKICAgICAgICAgcmVzdWx0ID0gZXhlY3V0ZVNj
cmlwdChzY3JpcHQsIHVzZXJHZXN0dXJlKTsKIAogICAgIFN0cmluZyBzY3JpcHRSZXN1bHQ7Ci0g
ICAgaWYgKCFyZXN1bHQuZ2V0U3RyaW5nKHNjcmlwdFJlc3VsdCkpCisgICAgSlNET01XaW5kb3dT
aGVsbCogc2hlbGwgPSB3aW5kb3dTaGVsbChtYWluVGhyZWFkTm9ybWFsV29ybGQoKSk7CisgICAg
SlNDOjpFeGVjU3RhdGUqIGV4ZWMgPSBzaGVsbC0+d2luZG93KCktPmdsb2JhbEV4ZWMoKTsKKyAg
ICBpZiAoIXJlc3VsdC5nZXRTdHJpbmcoZXhlYywgc2NyaXB0UmVzdWx0KSkKICAgICAgICAgcmV0
dXJuIHRydWU7CiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFsd2F5cyByZXBsYWNlIHRoZSBk
b2N1bWVudCwgYnV0IGRvaW5nIHNvCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3VzdG9tLmNwcAkocmV2aXNpb24gNTE3
MDgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEQ3Vz
dG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTAgKzUxLDEwIEBAIHN0YXRpYyBKU1ZhbHVl
IHRvSlMoRXhlY1N0YXRlKiBleGVjLCBDYW4KICAgICByZXR1cm4ganNTdHJpbmcoZXhlYywgc3R5
bGUtPmNvbG9yKCkpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDYW52YXNTdHlsZT4gdG9IVE1M
Q2FudmFzU3R5bGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSB2YWx1ZSkKK3N0YXRpYyBQYXNzUmVmUHRy
PENhbnZhc1N0eWxlPiB0b0hUTUxDYW52YXNTdHlsZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
dmFsdWUpCiB7CiAgICAgaWYgKHZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHJldHVybiBDYW52
YXNTdHlsZTo6Y3JlYXRlKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoKSk7CisgICAgICAgIHJldHVy
biBDYW52YXNTdHlsZTo6Y3JlYXRlKGFzU3RyaW5nKHZhbHVlKS0+dmFsdWUoZXhlYykpOwogICAg
IGlmICghdmFsdWUuaXNPYmplY3QoKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgSlNPYmplY3Qq
IG9iamVjdCA9IGFzT2JqZWN0KHZhbHVlKTsKQEAgLTEwMiwxMyArMTAyLDEzIEBAIEpTVmFsdWUg
SlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEYKICAgICBzd2l0Y2ggKGFyZ3Muc2l6ZSgp
KSB7CiAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgIGlmIChhcmdzLmF0KDApLmlzU3RyaW5n
KCkpCi0gICAgICAgICAgICAgICAgY29udGV4dC0+c2V0RmlsbENvbG9yKGFzU3RyaW5nKGFyZ3Mu
YXQoMCkpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3Io
YXNTdHJpbmcoYXJncy5hdCgwKSktPnZhbHVlKGV4ZWMpKTsKICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4
ZWMpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICBp
ZiAoYXJncy5hdCgwKS5pc1N0cmluZygpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZp
bGxDb2xvcihhc1N0cmluZyhhcmdzLmF0KDApKS0+dmFsdWUoKSwgYXJncy5hdCgxKS50b0Zsb2F0
KGV4ZWMpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRGaWxsQ29sb3IoYXNTdHJpbmco
YXJncy5hdCgwKSktPnZhbHVlKGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYykpOwogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcihhcmdz
LmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTEzOSwxMyArMTM5LDEzIEBAIEpTVmFsdWUgSlNDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkQ6OnNldFMKICAgICBzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7CiAgICAgICAgIGNh
c2UgMToKICAgICAgICAgICAgIGlmIChhcmdzLmF0KDApLmlzU3RyaW5nKCkpCi0gICAgICAgICAg
ICAgICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYXNTdHJpbmcoYXJncy5hdCgwKSktPnZhbHVl
KCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGFzU3RyaW5nKGFy
Z3MuYXQoMCkpLT52YWx1ZShleGVjKSk7CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgY29udGV4dC0+c2V0U3Ryb2tlQ29sb3IoYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpKTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICBpZiAoYXJncy5h
dCgwKS5pc1N0cmluZygpKQotICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9y
KGFzU3RyaW5nKGFyZ3MuYXQoMCkpLT52YWx1ZSgpLCBhcmdzLmF0KDEpLnRvRmxvYXQoZXhlYykp
OworICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFN0cm9rZUNvbG9yKGFzU3RyaW5nKGFyZ3Mu
YXQoMCkpLT52YWx1ZShleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpKTsKICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICBjb250ZXh0LT5zZXRTdHJva2VDb2xvcihhcmdzLmF0
KDApLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSk7CiAgICAgICAgICAg
ICBicmVhazsKQEAgLTI5OCw3ICsyOTgsNyBAQCBKU1ZhbHVlIEpTQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEOjpzZXRTCiAgICAgICAgIGNhc2UgNDoKICAgICAgICAgICAgIGlmIChhcmdzLmF0KDMp
LmlzU3RyaW5nKCkpCiAgICAgICAgICAgICAgICAgY29udGV4dC0+c2V0U2hhZG93KGFyZ3MuYXQo
MCkudG9GbG9hdChleGVjKSwgYXJncy5hdCgxKS50b0Zsb2F0KGV4ZWMpLAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhcmdzLmF0KDIpLnRvRmxvYXQoZXhlYyksIGFzU3RyaW5n
KGFyZ3MuYXQoMykpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYXJncy5hdCgyKS50b0Zsb2F0KGV4ZWMpLCBhc1N0cmluZyhhcmdzLmF0KDMpKS0+dmFsdWUo
ZXhlYykpOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGNvbnRleHQtPnNldFNo
YWRvdyhhcmdzLmF0KDApLnRvRmxvYXQoZXhlYyksIGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJncy5hdCgyKS50b0Zsb2F0KGV4
ZWMpLCBhcmdzLmF0KDMpLnRvRmxvYXQoZXhlYykpOwpAQCAtMzA2LDcgKzMwNiw3IEBAIEpTVmFs
dWUgSlNDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldFMKICAgICAgICAgY2FzZSA1OgogICAg
ICAgICAgICAgaWYgKGFyZ3MuYXQoMykuaXNTdHJpbmcoKSkKICAgICAgICAgICAgICAgICBjb250
ZXh0LT5zZXRTaGFkb3coYXJncy5hdCgwKS50b0Zsb2F0KGV4ZWMpLCBhcmdzLmF0KDEpLnRvRmxv
YXQoZXhlYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMiku
dG9GbG9hdChleGVjKSwgYXNTdHJpbmcoYXJncy5hdCgzKSktPnZhbHVlKCksCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3MuYXQoMikudG9GbG9hdChleGVjKSwgYXNTdHJp
bmcoYXJncy5hdCgzKSktPnZhbHVlKGV4ZWMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhcmdzLmF0KDQpLnRvRmxvYXQoZXhlYykpOwogICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgIGNvbnRleHQtPnNldFNoYWRvdyhhcmdzLmF0KDApLnRvRmxvYXQoZXhlYyks
IGFyZ3MuYXQoMSkudG9GbG9hdChleGVjKSwKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2Ny
aXB0Q2FsbFN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dENhbGxTdGFjay5jcHAJKHJldmlzaW9uIDUxNzA4KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9T
Y3JpcHRDYWxsU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1Nyw3IEBAIFNjcmlw
dENhbGxTdGFjazo6U2NyaXB0Q2FsbFN0YWNrKEV4ZWNTdGEKICAgICBpZiAoZnVuY3Rpb24pIHsK
ICAgICAgICAgbV9jYWxsZXIgPSBhc0ludGVybmFsRnVuY3Rpb24oZnVuY3Rpb24pOwogICAgICAg
ICB1bnNpZ25lZCBsaW5lTnVtYmVyID0gc2lnbmVkTGluZU51bWJlciA+PSAwID8gc2lnbmVkTGlu
ZU51bWJlciA6IDA7Ci0gICAgICAgIG1fZnJhbWVzLmFwcGVuZChTY3JpcHRDYWxsRnJhbWUobV9j
YWxsZXItPm5hbWUoJm1fZXhlYy0+Z2xvYmFsRGF0YSgpKSwgdXJsU3RyaW5nLCBsaW5lTnVtYmVy
LCBhcmdzLCBza2lwQXJndW1lbnRDb3VudCkpOworICAgICAgICBtX2ZyYW1lcy5hcHBlbmQoU2Ny
aXB0Q2FsbEZyYW1lKG1fY2FsbGVyLT5uYW1lKG1fZXhlYyksIHVybFN0cmluZywgbGluZU51bWJl
ciwgYXJncywgc2tpcEFyZ3VtZW50Q291bnQpKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBD
YWxsZXIgaXMgdW5rbm93biwgYnV0IHdlIHNob3VsZCBzdGlsbCBhZGQgdGhlIGZyYW1lLCBiZWNh
dXNlCiAgICAgICAgIC8vIHNvbWV0aGluZyBjYWxsZWQgdXMsIGFuZCBnYXZlIHVzIGFyZ3VtZW50
cy4KQEAgLTk0LDcgKzk0LDcgQEAgdm9pZCBTY3JpcHRDYWxsU3RhY2s6OmluaXRpYWxpemUoKQog
ICAgIHdoaWxlICghZnVuYy5pc051bGwoKSkgewogICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKiBp
bnRlcm5hbEZ1bmN0aW9uID0gYXNJbnRlcm5hbEZ1bmN0aW9uKGZ1bmMpOwogICAgICAgICBBcmdM
aXN0IGVtcHR5QXJnTGlzdDsKLSAgICAgICAgbV9mcmFtZXMuYXBwZW5kKFNjcmlwdENhbGxGcmFt
ZShpbnRlcm5hbEZ1bmN0aW9uLT5uYW1lKCZtX2V4ZWMtPmdsb2JhbERhdGEoKSksIFVTdHJpbmco
KSwgMCwgZW1wdHlBcmdMaXN0LCAwKSk7CisgICAgICAgIG1fZnJhbWVzLmFwcGVuZChTY3JpcHRD
YWxsRnJhbWUoaW50ZXJuYWxGdW5jdGlvbi0+bmFtZShtX2V4ZWMpLCBVU3RyaW5nKCksIDAsIGVt
cHR5QXJnTGlzdCwgMCkpOwogICAgICAgICBmdW5jID0gbV9leGVjLT5pbnRlcnByZXRlcigpLT5y
ZXRyaWV2ZUNhbGxlcihtX2V4ZWMsIGludGVybmFsRnVuY3Rpb24pOwogICAgIH0KICAgICBtX2lu
aXRpYWxpemVkID0gdHJ1ZTsKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCShy
ZXZpc2lvbiA1MTcwOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00OCwxMyArNDgsMTMgQEAgU2NyaXB0VmFsdWUgU2NyaXB0VmFsdWU6
OnF1YXJhbnRpbmVWYWx1ZQogICAgIHJldHVybiBTY3JpcHRWYWx1ZShKU0luc3BlY3RlZE9iamVj
dFdyYXBwZXI6OndyYXAoc2NyaXB0U3RhdGUsIHZhbHVlLmpzVmFsdWUoKSkpOwogfQogCi1ib29s
IFNjcmlwdFZhbHVlOjpnZXRTdHJpbmcoU3RyaW5nJiByZXN1bHQpIGNvbnN0Citib29sIFNjcmlw
dFZhbHVlOjpnZXRTdHJpbmcoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTdHJpbmcmIHJlc3Vs
dCkgY29uc3QKIHsKICAgICBpZiAoIW1fdmFsdWUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICBKU0xvY2sgbG9jayhTaWxlbmNlQXNzZXJ0aW9uc09ubHkpOwogICAgIFVTdHJpbmcgdXN0cmlu
ZzsKLSAgICBpZiAoIW1fdmFsdWUuZ2V0KCkuZ2V0U3RyaW5nKHVzdHJpbmcpKQorICAgIGlmICgh
bV92YWx1ZS5nZXQoKS5nZXRTdHJpbmcoc2NyaXB0U3RhdGUsIHVzdHJpbmcpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0ID0gdXN0cmluZzsKICAgICByZXR1cm4gdHJ1ZTsKSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JpbmRpbmdzL2pzL1NjcmlwdFZhbHVlLmgJKHJldmlzaW9uIDUxNzA4KQorKysgV2ViQ29y
ZS9iaW5kaW5ncy9qcy9TY3JpcHRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5TY3JpcHRWYWx1ZSgpIHt9CiAKICAgICBKU0M6OkpT
VmFsdWUganNWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLSAgICBib29s
IGdldFN0cmluZyhTdHJpbmcmIHJlc3VsdCkgY29uc3Q7CisgICAgYm9vbCBnZXRTdHJpbmcoU2Ny
aXB0U3RhdGUqIHNjcmlwdFN0YXRlLCBTdHJpbmcmIHJlc3VsdCkgY29uc3Q7CiAgICAgU3RyaW5n
IHRvU3RyaW5nKFNjcmlwdFN0YXRlKiBzY3JpcHRTdGF0ZSkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZS5nZXQoKS50b1N0cmluZyhzY3JpcHRTdGF0ZSk7IH0KICAgICBib29sIGlzRXF1YWwoU2NyaXB0
U3RhdGUqLCBjb25zdCBTY3JpcHRWYWx1ZSYpIGNvbnN0OwogICAgIGJvb2wgaXNOdWxsKCkgY29u
c3Q7CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL1NlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9TZXJpYWxpemVkU2NyaXB0VmFsdWUu
Y3BwCShyZXZpc2lvbiA1MTcwOCkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvU2VyaWFsaXplZFNj
cmlwdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgxLDcgKzQ4MSw3IEBAIHN0cnVjdCBT
ZXJpYWxpemluZ1RyZWVXYWxrZXIgOiBwdWJsaWMgQmEKICAgICAgICAgICAgIHJldHVybiBTZXJp
YWxpemVkU2NyaXB0VmFsdWVEYXRhKHZhbHVlKTsKIAogICAgICAgICBpZiAodmFsdWUuaXNTdHJp
bmcoKSkKLSAgICAgICAgICAgIHJldHVybiBTZXJpYWxpemVkU2NyaXB0VmFsdWVEYXRhKGFzU3Ry
aW5nKHZhbHVlKS0+dmFsdWUoKSk7CisgICAgICAgICAgICByZXR1cm4gU2VyaWFsaXplZFNjcmlw
dFZhbHVlRGF0YShhc1N0cmluZyh2YWx1ZSktPnZhbHVlKG1fZXhlYykpOwogCiAgICAgICAgIGlm
ICh2YWx1ZS5pc051bWJlcigpKQogICAgICAgICAgICAgcmV0dXJuIFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZURhdGEoU2VyaWFsaXplZFNjcmlwdFZhbHVlRGF0YTo6TnVtYmVyVHlwZSwgdmFsdWUudW5j
aGVja2VkR2V0TnVtYmVyKCkpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9vYmpjL1dlYlNjcmlw
dE9iamVjdC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL29iamMvV2ViU2NyaXB0
T2JqZWN0Lm1tCShyZXZpc2lvbiA1MTcwOCkKKysrIFdlYkNvcmUvYmluZGluZ3Mvb2JqYy9XZWJT
Y3JpcHRPYmplY3QubW0JKHdvcmtpbmcgY29weSkKQEAgLTUyOSw3ICs1MjksOCBAQCBzdGF0aWMg
dm9pZCBnZXRMaXN0RnJvbU5TQXJyYXkoRXhlY1N0YXRlCiAgICAgfQogCiAgICAgaWYgKHZhbHVl
LmlzU3RyaW5nKCkpIHsKLSAgICAgICAgY29uc3QgVVN0cmluZyYgdSA9IGFzU3RyaW5nKHZhbHVl
KS0+dmFsdWUoKTsKKyAgICAgICAgRXhlY1N0YXRlKiBleGVjID0gcm9vdE9iamVjdC0+Z2xvYmFs
T2JqZWN0KCktPmdsb2JhbEV4ZWMoKTsKKyAgICAgICAgY29uc3QgVVN0cmluZyYgdSA9IGFzU3Ry
aW5nKHZhbHVlKS0+dmFsdWUoZXhlYyk7CiAgICAgICAgIHJldHVybiBbTlNTdHJpbmcgc3RyaW5n
V2l0aENoYXJhY3RlcnM6dS5kYXRhKCkgbGVuZ3RoOnUuc2l6ZSgpXTsKICAgICB9CiAKSW5kZXg6
IFdlYkNvcmUvcGFnZS9Db25zb2xlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvQ29u
c29sZS5jcHAJKHJldmlzaW9uIDUxNzA4KQorKysgV2ViQ29yZS9wYWdlL0NvbnNvbGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xOTEsNyArMTkxLDcgQEAgdm9pZCBDb25zb2xlOjphZGRNZXNzYWdl
KE1lc3NhZ2VUeXBlIHR5cAogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxhc3RDYWxs
ZXIuYXJndW1lbnRDb3VudCgpOyArK2kpIHsKICAgICAgICAgU3RyaW5nIGFyZ0FzU3RyaW5nOwot
ICAgICAgICBpZiAobGFzdENhbGxlci5hcmd1bWVudEF0KGkpLmdldFN0cmluZyhhcmdBc1N0cmlu
ZykpCisgICAgICAgIGlmIChsYXN0Q2FsbGVyLmFyZ3VtZW50QXQoaSkuZ2V0U3RyaW5nKGNhbGxT
dGFjay0+c3RhdGUoKSwgYXJnQXNTdHJpbmcpKQogICAgICAgICAgICAgcHJpbnRmKCIgJXMiLCBh
cmdBc1N0cmluZy51dGY4KCkuZGF0YSgpKTsKICAgICB9CiAgICAgcHJpbnRmKCJcbiIpOwpJbmRl
eDogV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDUxNzA4KQorKysgV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAgLTQwNDYsNyArNDA0Niw3IEBAIHN0YXRp
YyBOU0FwcGxlRXZlbnREZXNjcmlwdG9yKiBhZURlc2NGcm8KICAgICBpZiAoanNWYWx1ZS5pc0Jv
b2xlYW4oKSkKICAgICAgICAgcmV0dXJuIFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIGRlc2NyaXB0
b3JXaXRoQm9vbGVhbjpqc1ZhbHVlLmdldEJvb2xlYW4oKV07CiAgICAgaWYgKGpzVmFsdWUuaXNT
dHJpbmcoKSkKLSAgICAgICAgcmV0dXJuIFtOU0FwcGxlRXZlbnREZXNjcmlwdG9yIGRlc2NyaXB0
b3JXaXRoU3RyaW5nOlN0cmluZyhqc1ZhbHVlLmdldFN0cmluZygpKV07CisgICAgICAgIHJldHVy
biBbTlNBcHBsZUV2ZW50RGVzY3JpcHRvciBkZXNjcmlwdG9yV2l0aFN0cmluZzpTdHJpbmcoanNW
YWx1ZS5nZXRTdHJpbmcoZXhlYykpXTsKICAgICBpZiAoanNWYWx1ZS5pc051bWJlcigpKSB7CiAg
ICAgICAgIGRvdWJsZSB2YWx1ZSA9IGpzVmFsdWUudW5jaGVja2VkR2V0TnVtYmVyKCk7CiAgICAg
ICAgIGludCBpbnRWYWx1ZSA9IHZhbHVlOwo=
</data>
<flag name="review"
          id="26283"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>