<?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>122068</bug_id>
          
          <creation_ts>2013-09-28 15:11:09 -0700</creation_ts>
          <short_desc>Switch inline boxes to use const RenderStyle&amp;</short_desc>
          <delta_ts>2013-09-28 21:33:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>eflews.bot</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kling</cc>
    
    <cc>philn</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>934319</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-28 15:11:09 -0700</bug_when>
    <thetext>the usual</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934320</commentid>
    <comment_count>1</comment_count>
      <attachid>212907</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-28 16:12:04 -0700</bug_when>
    <thetext>Created attachment 212907
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934321</commentid>
    <comment_count>2</comment_count>
      <attachid>212907</attachid>
    <who name="EFL EWS Bot">eflews.bot</who>
    <bug_when>2013-09-28 16:23:20 -0700</bug_when>
    <thetext>Comment on attachment 212907
patch

Attachment 212907 did not pass efl-wk2-ews (efl-wk2):
Output: http://webkit-queues.appspot.com/results/2632071</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934322</commentid>
    <comment_count>3</comment_count>
      <attachid>212908</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-28 16:27:38 -0700</bug_when>
    <thetext>Created attachment 212908
try to fix CSS3_TEXT build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>934329</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-09-28 21:33:49 -0700</bug_when>
    <thetext>https://trac.webkit.org/r156613</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212907</attachid>
            <date>2013-09-28 16:12:04 -0700</date>
            <delta_ts>2013-09-28 16:27:38 -0700</delta_ts>
            <desc>patch</desc>
            <filename>inlinebox-style-const.patch</filename>
            <type>text/plain</type>
            <size>89266</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjYxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwIEBACisyMDEzLTA5LTI4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTd2l0Y2ggaW5saW5lIGJveGVz
IHRvIHVzZSBjb25zdCBSZW5kZXJTdHlsZSYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMjA2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCiAyMDEzLTA5LTI4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgZmlyc3QoKS9sYXN0KCkgdG8gRWxlbWVudEl0ZXJhdG9yQWRhcHRlcnMK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNTY2MTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBUZXh0TGF5b3V0IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc05lZWRlZChSZW5kZXJUZXh0KiB0ZXh0LCBjb25z
dCBGb250JiBmb250KQogICAgIHsKLSAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6
Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB0ZXh0LCB0ZXh0LT5zdHlsZSgpKTsKKyAgICAg
ICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250
LCB0ZXh0LCAqdGV4dC0+c3R5bGUoKSk7CiAgICAgICAgIHJldHVybiBmb250LmNvZGVQYXRoKHJ1
bikgPT0gRm9udDo6Q29tcGxleDsKICAgICB9CiAKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclRleHQq
IHRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHhQb3MpCiAgICAgewotICAgICAgICBUZXh0
UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQs
IHRleHQtPnN0eWxlKCkpOworICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQsICp0ZXh0LT5zdHlsZSgpKTsKICAgICAgICAg
cnVuLnNldENoYXJhY3RlcnNMZW5ndGgodGV4dC0+dGV4dExlbmd0aCgpKTsKICAgICAgICAgQVNT
RVJUKHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkgPj0gcnVuLmxlbmd0aCgpKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiAxNTY2MTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw3ICs0NCw3IEBAIEVsbGlwc2lzQm94OjpFbGxpcHNpc0JveChSZW5kZXJCbG9jayYg
cmUKIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBs
aW5lQm90dG9tKQogewogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5j
b250ZXh0OwotICAgIFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsK
KyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAg
ICAgQ29sb3IgdGV4dENvbG9yID0gbGluZVN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpOwogICAgIGlmICh0ZXh0Q29sb3IgIT0gY29udGV4
dC0+ZmlsbENvbG9yKCkpCiAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcih0ZXh0Q29sb3Is
IGxpbmVTdHlsZS5jb2xvclNwYWNlKCkpOwpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIEVsbGlwc2lz
Qm94OjpwYWludChQYWludEluZm8mIHBhaW50CiAKICAgICBjb25zdCBGb250JiBmb250ID0gbGlu
ZVN0eWxlLmZvbnQoKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvbk5vbmUpIHsKLSAgICAgICAgcGFpbnRTZWxlY3Rpb24oY29udGV4dCwgcGFpbnRP
ZmZzZXQsICZsaW5lU3R5bGUsIGZvbnQpOworICAgICAgICBwYWludFNlbGVjdGlvbihjb250ZXh0
LCBwYWludE9mZnNldCwgbGluZVN0eWxlLCBmb250KTsKIAogICAgICAgICAvLyBTZWxlY3QgdGhl
IGNvcnJlY3QgY29sb3IgZm9yIHBhaW50aW5nIHRoZSB0ZXh0LgogICAgICAgICBDb2xvciBmb3Jl
Z3JvdW5kID0gcGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0KCkgPyBDb2xvcjo6YmxhY2sgOiByZW5k
ZXJlcigpLnNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwpAQCAtNjYsNyArNjYsNyBAQCB2b2lk
IEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50CiAgICAgfQogCiAgICAgLy8gRklY
TUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBy
dW4gZmxhZ3MgYmVsb3cuCi0gICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgUmVuZGVyQmxvY2s6
OmNvbnN0cnVjdFRleHRSdW4oJnJlbmRlcmVyKCksIGZvbnQsIG1fc3RyLCAmbGluZVN0eWxlLCBU
ZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgTGF5b3V0UG9pbnQoeCgpICsgcGFpbnRP
ZmZzZXQueCgpLCB5KCkgKyBwYWludE9mZnNldC55KCkgKyBsaW5lU3R5bGUuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSkpOworICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKCZyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgbGluZVN0eWxlLCBUZXh0
UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgTGF5b3V0UG9pbnQoeCgpICsgcGFpbnRPZmZz
ZXQueCgpLCB5KCkgKyBwYWludE9mZnNldC55KCkgKyBsaW5lU3R5bGUuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSkpOwogCiAgICAgLy8gUmVzdG9yZSB0aGUgcmVndWxhciBmaWxsIGNvbG9yLgogICAg
IGlmICh0ZXh0Q29sb3IgIT0gY29udGV4dC0+ZmlsbENvbG9yKCkpCkBAIC03NSw3ICs3NSw3IEBA
IHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICBpZiAoc2V0U2hh
ZG93KQogICAgICAgICBjb250ZXh0LT5jbGVhclNoYWRvdygpOwogCi0gICAgcGFpbnRNYXJrdXBC
b3gocGFpbnRJbmZvLCBwYWludE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSwgJmxpbmVTdHls
ZSk7CisgICAgcGFpbnRNYXJrdXBCb3gocGFpbnRJbmZvLCBwYWludE9mZnNldCwgbGluZVRvcCwg
bGluZUJvdHRvbSwgbGluZVN0eWxlKTsKIH0KIAogSW5saW5lQm94KiBFbGxpcHNpc0JveDo6bWFy
a3VwQm94KCkgY29uc3QKQEAgLTk2LDcgKzk2LDcgQEAgSW5saW5lQm94KiBFbGxpcHNpc0JveDo6
bWFya3VwQm94KCkgY29ucwogICAgIHJldHVybiBhbmNob3JCb3g7CiB9CiAKLXZvaWQgRWxsaXBz
aXNCb3g6OnBhaW50TWFya3VwQm94KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90
dG9tLCBSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIEVsbGlwc2lzQm94OjpwYWludE1hcmt1cEJv
eChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBM
YXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlKQogewogICAgIElubGluZUJveCogbWFya3VwQm94ID0gdGhpcy0+bWFya3VwQm94
KCk7CiAgICAgaWYgKCFtYXJrdXBCb3gpCkBAIC0xMDQsMjIgKzEwNCwyMiBAQCB2b2lkIEVsbGlw
c2lzQm94OjpwYWludE1hcmt1cEJveChQYWludEluCiAKICAgICBMYXlvdXRQb2ludCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CiAgICAgYWRqdXN0ZWRQYWludE9mZnNldC5tb3Zl
KHgoKSArIG1fbG9naWNhbFdpZHRoIC0gbWFya3VwQm94LT54KCksCi0gICAgICAgIHkoKSArIHN0
eWxlLT5mb250TWV0cmljcygpLmFzY2VudCgpIC0gKG1hcmt1cEJveC0+eSgpICsgbWFya3VwQm94
LT5saW5lU3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKSk7CisgICAgICAgIHkoKSArIHN0
eWxlLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSAobWFya3VwQm94LT55KCkgKyBtYXJrdXBCb3gt
PmxpbmVTdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKICAgICBtYXJrdXBCb3gtPnBh
aW50KHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7
CiB9CiAKIEludFJlY3QgRWxsaXBzaXNCb3g6OnNlbGVjdGlvblJlY3QoKQogewotICAgIFJlbmRl
clN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgY29uc3QgRm9udCYgZm9u
dCA9IGxpbmVTdHlsZS5mb250KCk7CiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9
IHJvb3QoKTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExUUj8gRml4IGJ5IHBh
c3NpbmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KLSAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKCZyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgJmxpbmVTdHlsZSwgVGV4dFJ1bjo6QWxs
b3dUcmFpbGluZ0V4cGFuc2lvbiksIEludFBvaW50KHgoKSwgeSgpICsgcm9vdEJveC5zZWxlY3Rp
b25Ub3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkpLCByb290Qm94LnNlbGVjdGlvbkhlaWdo
dEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSkpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4oJnJlbmRlcmVyKCksIGZvbnQsIG1fc3RyLCBsaW5lU3R5bGUsIFRleHRSdW46OkFsbG93VHJh
aWxpbmdFeHBhbnNpb24pLCBJbnRQb2ludCh4KCksIHkoKSArIHJvb3RCb3guc2VsZWN0aW9uVG9w
QWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpKSwgcm9vdEJveC5zZWxlY3Rpb25IZWlnaHRBZGp1
c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkpKTsKIH0KIAotdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRT
ZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKK3ZvaWQgRWxs
aXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnQmIGZvbnQpCiB7Ci0gICAgQ29sb3IgdGV4dENvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKKyAgICBDb2xvciB0ZXh0Q29sb3IgPSBzdHls
ZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgQ29sb3IgYyA9
IHJlbmRlcmVyKCkuc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAgaWYgKCFjLmlzVmFs
aWQoKSB8fCAhYy5hbHBoYSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzgsNyArMTM4LDcgQEAg
dm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpYwogICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAgICAgY29udGV4dC0+Y2xpcChj
bGlwUmVjdCk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBw
YXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCi0gICAgY29udGV4dC0+ZHJhd0hp
Z2hsaWdodEZvclRleHQoZm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oJnJlbmRl
cmVyKCksIGZvbnQsIG1fc3RyLCBzdHlsZSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
biksIHJvdW5kZWRJbnRQb2ludChMYXlvdXRQb2ludCh4KCkgKyBwYWludE9mZnNldC54KCksIHko
KSArIHBhaW50T2Zmc2V0LnkoKSArIHRvcCkpLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsK
KyAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bigmcmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0UnVuOjpB
bGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgcm91bmRlZEludFBvaW50KExheW91dFBvaW50KHgoKSAr
IHBhaW50T2Zmc2V0LngoKSwgeSgpICsgcGFpbnRPZmZzZXQueSgpICsgdG9wKSksIGgsIGMsIHN0
eWxlLmNvbG9yU3BhY2UoKSk7CiB9CiAKIGJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJv
dHRvbSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUCiAKICAgICAvLyBIaXQgdGVzdCB0aGUgbWFya3VwIGJveC4KICAgICBpZiAoSW5s
aW5lQm94KiBtYXJrdXBCb3ggPSB0aGlzLT5tYXJrdXBCb3goKSkgewotICAgICAgICBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CisgICAgICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICAgICAgTGF5b3V0VW5p
dCBtdHggPSBhZGp1c3RlZExvY2F0aW9uLngoKSArIG1fbG9naWNhbFdpZHRoIC0gbWFya3VwQm94
LT54KCk7CiAgICAgICAgIExheW91dFVuaXQgbXR5ID0gYWRqdXN0ZWRMb2NhdGlvbi55KCkgKyBs
aW5lU3R5bGUuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIChtYXJrdXBCb3gtPnkoKSArIG1hcmt1
cEJveC0+bGluZVN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAgIGlmICht
YXJrdXBCb3gtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5l
ciwgTGF5b3V0UG9pbnQobXR4LCBtdHkpLCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDE1NjYxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSwxMCArMzksMTAgQEAgcHVibGljOgogICAgIFJlbmRlckJsb2NrJiByZW5kZXJlcigpIGNv
bnN0IHsgcmV0dXJuIHRvUmVuZGVyQmxvY2soSW5saW5lQm94OjpyZW5kZXJlcigpKTsgfQogCiBw
cml2YXRlOgotICAgIHZvaWQgcGFpbnRNYXJrdXBCb3goUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJv
dHRvbSwgUmVuZGVyU3R5bGUqKTsKKyAgICB2b2lkIHBhaW50TWFya3VwQm94KFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlv
dXRVbml0IGxpbmVCb3R0b20sIGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgdmlydHVhbCBpbnQg
aGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSB7IHJldHVybiBtX3NlbGVjdGlv
blN0YXRlOyB9Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBMYXlvdXRQb2ludCYsIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgcGFp
bnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKICAgICBJbmxpbmVCb3gqIG1hcmt1cEJveCgpIGNv
bnN0OwogCiAgICAgYm9vbCBtX3Nob3VsZFBhaW50TWFya3VwQm94OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24gMTU2NjExKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsNyArMjgwLDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgY29uc3QgeyByZXR1
cm4gcmVuZGVyZXIoKS5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiByZW5kZXJl
cigpLnN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSAhPSBQRV9OT05FOyB9CiAKLSAgICBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuZmlyc3RMaW5lKCkg
PyAqcmVuZGVyZXIoKS5maXJzdExpbmVTdHlsZSgpIDogKnJlbmRlcmVyKCkuc3R5bGUoKTsgfQor
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2JpdGZp
ZWxkcy5maXJzdExpbmUoKSA/ICpyZW5kZXJlcigpLmZpcnN0TGluZVN0eWxlKCkgOiAqcmVuZGVy
ZXIoKS5zdHlsZSgpOyB9CiAgICAgCiAgICAgRVZlcnRpY2FsQWxpZ24gdmVydGljYWxBbGlnbigp
IGNvbnN0IHsgcmV0dXJuIGxpbmVTdHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNTY2
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRvTGlu
ZShJbmxpbmVCb3gqCiAgICAgaWYgKCFjaGlsZC0+cmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSkgewogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY2hpbGRTdHlsZSA9IGNoaWxk
LT5saW5lU3R5bGUoKTsKICAgICAgICAgaWYgKGNoaWxkLT5iZWhhdmVzTGlrZVRleHQoKSkgewot
ICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSAmY2hpbGQtPmxpbmVTdHlsZSgp
OworICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSAmY2hpbGQtPmxp
bmVTdHlsZSgpOwogICAgICAgICAgICAgaWYgKGNoaWxkU3R5bGUtPmxldHRlclNwYWNpbmcoKSA8
IDAgfHwgY2hpbGRTdHlsZS0+dGV4dFNoYWRvdygpIHx8IGNoaWxkU3R5bGUtPnRleHRFbXBoYXNp
c01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSB8fCBjaGlsZFN0eWxlLT50ZXh0U3Ryb2tl
V2lkdGgoKSkKICAgICAgICAgICAgICAgICBjaGlsZC0+Y2xlYXJLbm93blRvSGF2ZU5vT3ZlcmZs
b3coKTsKICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+cmVuZGVyZXIoKS5pc1JlcGxhY2VkKCkp
IHsKQEAgLTY2MSw3ICs2NjEsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNJbkJs
b2NrRGlyCiAgICAgICAgIExheW91dFVuaXQgYm94SGVpZ2h0ID0gY3Vyci0+bG9naWNhbEhlaWdo
dCgpOwogICAgICAgICBMYXlvdXRVbml0IGJveEhlaWdodEluY2x1ZGluZ01hcmdpbnMgPSBib3hI
ZWlnaHQ7CiAKLSAgICAgICAgUmVuZGVyU3R5bGUmIGNoaWxkTGluZVN0eWxlID0gY3Vyci0+bGlu
ZVN0eWxlKCk7CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjaGlsZExpbmVTdHlsZSA9IGN1
cnItPmxpbmVTdHlsZSgpOwogICAgICAgICBpZiAoY3Vyci0+YmVoYXZlc0xpa2VUZXh0KCkgfHwg
Y3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpIHsKICAgICAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNz
JiBmb250TWV0cmljcyA9IGNoaWxkTGluZVN0eWxlLmZvbnRNZXRyaWNzKCk7CiAgICAgICAgICAg
ICBuZXdMb2dpY2FsVG9wICs9IGN1cnItPmJhc2VsaW5lUG9zaXRpb24oYmFzZWxpbmVUeXBlKSAt
IGZvbnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUpOwpAQCAtNzAzLDcgKzcwMyw3IEBAIHZv
aWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXIKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChjdXJyLT5pc0lubGluZVRleHRCb3goKSkgewogICAgICAgICAgICAgICAg
IFRleHRFbXBoYXNpc1Bvc2l0aW9uIGVtcGhhc2lzTWFya1Bvc2l0aW9uOwotICAgICAgICAgICAg
ICAgIGlmICh0b0lubGluZVRleHRCb3goY3VyciktPmdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKCZj
aGlsZExpbmVTdHlsZSwgZW1waGFzaXNNYXJrUG9zaXRpb24pKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRvSW5saW5lVGV4dEJveChjdXJyKS0+Z2V0RW1waGFzaXNNYXJrUG9zaXRpb24oY2hpbGRM
aW5lU3R5bGUsIGVtcGhhc2lzTWFya1Bvc2l0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICBi
b29sIGVtcGhhc2lzTWFya0lzT3ZlciA9IGVtcGhhc2lzTWFya1Bvc2l0aW9uID09IFRleHRFbXBo
YXNpc1Bvc2l0aW9uT3ZlcjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcGhhc2lzTWFya0lz
T3ZlciAhPSBjaGlsZExpbmVTdHlsZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBoYXNBbm5vdGF0aW9uc0JlZm9yZSA9IHRydWU7CkBAIC04NTgs
NyArODU4LDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZpcwogICAg
IGlmICh0ZXh0Qm94LT5rbm93blRvSGF2ZU5vT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOworICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICAKICAg
ICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94
RGF0YU1hcC5maW5kKHRleHRCb3gpOwogICAgIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cg
PSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVlLnNlY29uZDsKQEAg
LTg3Niw3ICs4NzYsNyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94Vmlz
CiAgICAgaW50IHJpZ2h0R2x5cGhPdmVyZmxvdyA9IHN0cm9rZU92ZXJmbG93ICsgcmlnaHRHbHlw
aEVkZ2U7CiAKICAgICBUZXh0RW1waGFzaXNQb3NpdGlvbiBlbXBoYXNpc01hcmtQb3NpdGlvbjsK
LSAgICBpZiAobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJr
Tm9uZSAmJiB0ZXh0Qm94LT5nZXRFbXBoYXNpc01hcmtQb3NpdGlvbigmbGluZVN0eWxlLCBlbXBo
YXNpc01hcmtQb3NpdGlvbikpIHsKKyAgICBpZiAobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmso
KSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSAmJiB0ZXh0Qm94LT5nZXRFbXBoYXNpc01hcmtQb3Np
dGlvbihsaW5lU3R5bGUsIGVtcGhhc2lzTWFya1Bvc2l0aW9uKSkgewogICAgICAgICBpbnQgZW1w
aGFzaXNNYXJrSGVpZ2h0ID0gbGluZVN0eWxlLmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQobGlu
ZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAgIGlmICgoZW1waGFzaXNN
YXJrUG9zaXRpb24gPT0gVGV4dEVtcGhhc2lzUG9zaXRpb25PdmVyKSA9PSAoIWxpbmVTdHlsZS5p
c0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpKQogICAgICAgICAgICAgdG9wR2x5cGhPdmVyZmxv
dyA9IG1pbih0b3BHbHlwaE92ZXJmbG93LCAtZW1waGFzaXNNYXJrSGVpZ2h0KTsKQEAgLTEyMzgs
MTQgKzEyMzgsMTQgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEZpbGxMYXllcihjb25zdAog
ICAgIH0KIH0KIAotdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWlu
dEluZm8mIGluZm8sIFJlbmRlclN0eWxlKiBzLCBTaGFkb3dTdHlsZSBzaGFkb3dTdHlsZSwgY29u
c3QgTGF5b3V0UmVjdCYgcGFpbnRSZWN0KQordm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveFNo
YWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2hh
ZG93U3R5bGUgc2hhZG93U3R5bGUsIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCkKIHsKICAg
ICBpZiAoKCFwcmV2TGluZUJveCgpICYmICFuZXh0TGluZUJveCgpKSB8fCAhcGFyZW50KCkpCi0g
ICAgICAgIGJveE1vZGVsT2JqZWN0KCktPnBhaW50Qm94U2hhZG93KGluZm8sIHBhaW50UmVjdCwg
cywgc2hhZG93U3R5bGUpOworICAgICAgICBib3hNb2RlbE9iamVjdCgpLT5wYWludEJveFNoYWRv
dyhpbmZvLCBwYWludFJlY3QsICZzdHlsZSwgc2hhZG93U3R5bGUpOwogICAgIGVsc2UgewogICAg
ICAgICAvLyBGSVhNRTogV2UgY2FuIGRvIGJldHRlciBoZXJlIGluIHRoZSBtdWx0aS1saW5lIGNh
c2UuIFdlIHdhbnQgdG8gcHVzaCBhIGNsaXAgc28gdGhhdCB0aGUgc2hhZG93IGRvZXNuJ3QKICAg
ICAgICAgLy8gcHJvdHJ1ZGUgaW5jb3JyZWN0bHkgYXQgdGhlIGVkZ2VzLCBhbmQgd2Ugd2FudCB0
byBwb3NzaWJseSBpbmNsdWRlIHNoYWRvd3MgY2FzdCBmcm9tIHRoZSBwcmV2aW91cy9mb2xsb3dp
bmcgbGluZXMKLSAgICAgICAgYm94TW9kZWxPYmplY3QoKS0+cGFpbnRCb3hTaGFkb3coaW5mbywg
cGFpbnRSZWN0LCBzLCBzaGFkb3dTdHlsZSwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSgpLCBpbmNs
dWRlTG9naWNhbFJpZ2h0RWRnZSgpKTsKKyAgICAgICAgYm94TW9kZWxPYmplY3QoKS0+cGFpbnRC
b3hTaGFkb3coaW5mbywgcGFpbnRSZWN0LCAmc3R5bGUsIHNoYWRvd1N0eWxlLCBpbmNsdWRlTG9n
aWNhbExlZnRFZGdlKCksIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKCkpOwogICAgIH0KIH0KIApA
QCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRp
b25zKAogICAgIC8vIGEgbGluZSBtYXkgYWN0dWFsbHkgaGF2ZSB0byBwYWludCBhIGJhY2tncm91
bmQuCiAgICAgaWYgKHBhcmVudCgpICYmICFyZW5kZXJlcigpLmhhc0JveERlY29yYXRpb25zKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGlu
ZVN0eWxlKCk7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVT
dHlsZSgpOwogICAgIGlmICghcGFyZW50KCkgJiYgKCFpc0ZpcnN0TGluZSgpIHx8ICZsaW5lU3R5
bGUgPT0gcmVuZGVyZXIoKS5zdHlsZSgpKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMzIzLDEx
ICsxMzIzLDExIEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0aW9ucygKICAg
ICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IExheW91dFJlY3QoYWRqdXN0ZWRQYWludG9mZnNldCwg
ZnJhbWVSZWN0LnNpemUoKSk7CiAgICAgLy8gU2hhZG93IGNvbWVzIGZpcnN0IGFuZCBpcyBiZWhp
bmQgdGhlIGJhY2tncm91bmQgYW5kIGJvcmRlci4KICAgICBpZiAoIWJveE1vZGVsT2JqZWN0KCkt
PmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChCYWNrZ3JvdW5kQmxlZWROb25l
LCB0aGlzKSkKLSAgICAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLCAmbGluZVN0eWxlLCBO
b3JtYWwsIHBhaW50UmVjdCk7CisgICAgICAgIHBhaW50Qm94U2hhZG93KHBhaW50SW5mbywgbGlu
ZVN0eWxlLCBOb3JtYWwsIHBhaW50UmVjdCk7CiAKICAgICBDb2xvciBjID0gbGluZVN0eWxlLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgcGFp
bnRGaWxsTGF5ZXJzKHBhaW50SW5mbywgYywgbGluZVN0eWxlLmJhY2tncm91bmRMYXllcnMoKSwg
cGFpbnRSZWN0KTsKLSAgICBwYWludEJveFNoYWRvdyhwYWludEluZm8sICZsaW5lU3R5bGUsIElu
c2V0LCBwYWludFJlY3QpOworICAgIHBhaW50Qm94U2hhZG93KHBhaW50SW5mbywgbGluZVN0eWxl
LCBJbnNldCwgcGFpbnRSZWN0KTsKIAogICAgIC8vIDpmaXJzdC1saW5lIGNhbm5vdCBiZSB1c2Vk
IHRvIHB1dCBib3JkZXJzIG9uIGEgbGluZS4gQWx3YXlzIHBhaW50IGJvcmRlcnMgd2l0aCBvdXIK
ICAgICAvLyBub24tZmlyc3QtbGluZSBzdHlsZS4KQEAgLTE1NDEsOSArMTU0MSw5IEBAIExheW91
dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZU92ZXJBbm4KICAgICAgICAgfQogCiAgICAgICAg
IGlmIChjdXJyLT5pc0lubGluZVRleHRCb3goKSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUm
IGNoaWxkTGluZVN0eWxlID0gY3Vyci0+bGluZVN0eWxlKCk7CisgICAgICAgICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgY2hpbGRMaW5lU3R5bGUgPSBjdXJyLT5saW5lU3R5bGUoKTsKICAgICAgICAg
ICAgIFRleHRFbXBoYXNpc1Bvc2l0aW9uIGVtcGhhc2lzTWFya1Bvc2l0aW9uOwotICAgICAgICAg
ICAgaWYgKGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNN
YXJrTm9uZSAmJiB0b0lubGluZVRleHRCb3goY3VyciktPmdldEVtcGhhc2lzTWFya1Bvc2l0aW9u
KCZjaGlsZExpbmVTdHlsZSwgZW1waGFzaXNNYXJrUG9zaXRpb24pICYmIGVtcGhhc2lzTWFya1Bv
c2l0aW9uID09IFRleHRFbXBoYXNpc1Bvc2l0aW9uT3ZlcikgeworICAgICAgICAgICAgaWYgKGNo
aWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSAm
JiB0b0lubGluZVRleHRCb3goY3VyciktPmdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKGNoaWxkTGlu
ZVN0eWxlLCBlbXBoYXNpc01hcmtQb3NpdGlvbikgJiYgZW1waGFzaXNNYXJrUG9zaXRpb24gPT0g
VGV4dEVtcGhhc2lzUG9zaXRpb25PdmVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZExp
bmVTdHlsZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgaW50IHRvcE9mRW1waGFzaXNNYXJrID0gY3Vyci0+bG9naWNhbFRvcCgpIC0gY2hpbGRMaW5l
U3R5bGUuZm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFz
aXNNYXJrU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXgocmVzdWx0
LCBhbGxvd2VkUG9zaXRpb24gLSB0b3BPZkVtcGhhc2lzTWFyayk7CkBAIC0xNTg5LDcgKzE1ODks
NyBAQCBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVVbmRlckFuCiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgIFJl
bmRlclN0eWxlJiBjaGlsZExpbmVTdHlsZSA9IGN1cnItPmxpbmVTdHlsZSgpOworICAgICAgICAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIGNoaWxkTGluZVN0eWxlID0gY3Vyci0+bGluZVN0eWxlKCk7
CiAgICAgICAgICAgICBpZiAoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRl
eHRFbXBoYXNpc01hcmtOb25lICYmIGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc1Bvc2l0aW9u
KCkgPT0gVGV4dEVtcGhhc2lzUG9zaXRpb25VbmRlcikgewogICAgICAgICAgICAgICAgIGlmICgh
Y2hpbGRMaW5lU3R5bGUuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBjdXJyLT5sb2dpY2Fs
Qm90dG9tKCkgKyBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxk
TGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE1NjYxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcg
KzczLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCYgcmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KElubGluZUJveDo6
cmVuZGVyZXIoKSk7IH0KLSAgICBSZW5kZXJTdHlsZSYgbGluZVN0eWxlKCkgY29uc3QgeyByZXR1
cm4gaXNGaXJzdExpbmUoKSA/ICpyZW5kZXJlcigpLmZpcnN0TGluZVN0eWxlKCkgOiAqcmVuZGVy
ZXIoKS5zdHlsZSgpOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIGlzRmlyc3RMaW5lKCkgPyAqcmVuZGVyZXIoKS5maXJzdExpbmVTdHlsZSgpIDog
KnJlbmRlcmVyKCkuc3R5bGUoKTsgfQogCiAgICAgSW5saW5lRmxvd0JveCogcHJldkxpbmVCb3go
KSBjb25zdCB7IHJldHVybiBtX3ByZXZMaW5lQm94OyB9CiAgICAgSW5saW5lRmxvd0JveCogbmV4
dExpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX25leHRMaW5lQm94OyB9CkBAIC0xMTYsNyArMTE2
LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRNYXNrKFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50Jik7CiAgICAgdm9pZCBwYWludEZpbGxMYXllcnMoY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBMYXlvdXRSZWN0JiwgQ29tcG9zaXRl
T3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICB2b2lkIHBhaW50RmlsbExheWVy
KGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVyKiwgY29uc3Qg
TGF5b3V0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7Ci0g
ICAgdm9pZCBwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mLCBSZW5kZXJTdHlsZSosIFNo
YWRvd1N0eWxlLCBjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdm9pZCBwYWludEJveFNoYWRvdyhj
b25zdCBQYWludEluZm8mLCBjb25zdCBSZW5kZXJTdHlsZSYsIFNoYWRvd1N0eWxlLCBjb25zdCBM
YXlvdXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOwog
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBM
YXlvdXRVbml0IGxpbmVCb3R0b20pIE9WRVJSSURFOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNTY2MTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
OSw5ICsxNzksOSBAQCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCCiAg
ICAgcmV0dXJuIHN0YXRlOwogfQogCi1zdGF0aWMgdm9pZCBhZGp1c3RDaGFyYWN0ZXJzQW5kTGVu
Z3RoRm9ySHlwaGVuKEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiYgY2hhcmFjdGVyc1dpdGhIeXBo
ZW4sIFJlbmRlclN0eWxlKiBzdHlsZSwgU3RyaW5nJiBzdHJpbmcsIGludCYgbGVuZ3RoKQorc3Rh
dGljIHZvaWQgYWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZvckh5cGhlbihCdWZmZXJGb3JBcHBl
bmRpbmdIeXBoZW4mIGNoYXJhY3RlcnNXaXRoSHlwaGVuLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbmd0aCkKIHsKLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGh5cGhlblN0cmluZyA9IHN0eWxlLT5oeXBoZW5TdHJpbmcoKTsKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGh5cGhlblN0cmluZyA9IHN0eWxlLmh5cGhlblN0cmluZygpOwogICAgIGNoYXJh
Y3RlcnNXaXRoSHlwaGVuLnJlc2VydmVDYXBhY2l0eShsZW5ndGggKyBoeXBoZW5TdHJpbmcubGVu
Z3RoKCkpOwogICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVuLmFwcGVuZChzdHJpbmcpOwogICAgIGNo
YXJhY3RlcnNXaXRoSHlwaGVuLmFwcGVuZChoeXBoZW5TdHJpbmcpOwpAQCAtMjExLDEyICsyMTEs
MTIgQEAgTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvbgogCiAgICAgTGF5
b3V0VW5pdCBzZWxUb3AgPSBzZWxlY3Rpb25Ub3AoKTsKICAgICBMYXlvdXRVbml0IHNlbEhlaWdo
dCA9IHNlbGVjdGlvbkhlaWdodCgpOwotICAgIFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlz
LT5saW5lU3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+
bGluZVN0eWxlKCk7CiAgICAgY29uc3QgRm9udCYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUs
IHJlbmRlcmVyKCkpOwogCiAgICAgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuIGNoYXJhY3RlcnNX
aXRoSHlwaGVuOwogICAgIGJvb2wgcmVzcGVjdEh5cGhlbiA9IGVQb3MgPT0gbV9sZW4gJiYgaGFz
SHlwaGVuKCk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bigmbGluZVN0
eWxlLCBmb250LCByZXNwZWN0SHlwaGVuID8gJmNoYXJhY3RlcnNXaXRoSHlwaGVuIDogMCk7Cisg
ICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIGZvbnQsIHJl
c3BlY3RIeXBoZW4gPyAmY2hhcmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKICAgICBpZiAocmVzcGVj
dEh5cGhlbikKICAgICAgICAgZW5kUG9zID0gdGV4dFJ1bi5sZW5ndGgoKTsKIApAQCAtNDg1LDEz
ICs0ODUsMTMgQEAgc3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpYwogICAg
IH0gd2hpbGUgKHNoYWRvdyB8fCBzdHJva2VkIHx8ICFvcGFxdWUpOwogfQogCi1ib29sIElubGlu
ZVRleHRCb3g6OmdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4
dEVtcGhhc2lzUG9zaXRpb24mIGVtcGhhc2lzUG9zaXRpb24pIGNvbnN0Citib29sIElubGluZVRl
eHRCb3g6OmdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
VGV4dEVtcGhhc2lzUG9zaXRpb24mIGVtcGhhc2lzUG9zaXRpb24pIGNvbnN0CiB7CiAgICAgLy8g
VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIHRleHQgZW1waGFzaXMgbWFy
a3MgYW5kIHRoZXkgYXJlIHN1cHByZXNzZWQgYnkgcnVieSB0ZXh0LgotICAgIGlmIChzdHlsZS0+
dGV4dEVtcGhhc2lzTWFyaygpID09IFRleHRFbXBoYXNpc01hcmtOb25lKQorICAgIGlmIChzdHls
ZS50ZXh0RW1waGFzaXNNYXJrKCkgPT0gVGV4dEVtcGhhc2lzTWFya05vbmUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGVtcGhhc2lzUG9zaXRpb24gPSBzdHlsZS0+dGV4dEVtcGhhc2lz
UG9zaXRpb24oKTsKKyAgICBlbXBoYXNpc1Bvc2l0aW9uID0gc3R5bGUudGV4dEVtcGhhc2lzUG9z
aXRpb24oKTsKICAgICBpZiAoZW1waGFzaXNQb3NpdGlvbiA9PSBUZXh0RW1waGFzaXNQb3NpdGlv
blVuZGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gUnVieSB0ZXh0IGlzIGFsd2F5cyBvdmVy
LCBzbyBpdCBjYW5ub3Qgc3VwcHJlc3MgZW1waGFzaXMgbWFya3MgdW5kZXIuCiAKQEAgLTU2NCw3
ICs1NjQsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAKICAg
ICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKIAotICAgIFJl
bmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKKyAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgCiAgICAgYWRqdXN0
ZWRQYWludE9mZnNldC5tb3ZlKDAsIGxpbmVTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gMCA6IC1sb2dpY2FsSGVpZ2h0KCkpOwogCkBAIC02ODcsMTQgKzY4NywxNCBAQCB2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAjZW5kaWYKIAogICAgICAgICBpZiAo
Y29udGFpbnNDb21wb3NpdGlvbiAmJiAhdXNlQ3VzdG9tVW5kZXJsaW5lcykKLSAgICAgICAgICAg
IHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKGNvbnRleHQsIGJveE9yaWdpbiwgJmxpbmVTdHls
ZSwgZm9udCwKKyAgICAgICAgICAgIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKGNvbnRleHQs
IGJveE9yaWdpbiwgbGluZVN0eWxlLCBmb250LAogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCku
ZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblN0YXJ0KCksCiAgICAgICAgICAgICAgICAgcmVu
ZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uRW5kKCkpOwogCi0gICAgICAgIHBh
aW50RG9jdW1lbnRNYXJrZXJzKGNvbnRleHQsIGJveE9yaWdpbiwgJmxpbmVTdHlsZSwgZm9udCwg
dHJ1ZSk7CisgICAgICAgIHBhaW50RG9jdW1lbnRNYXJrZXJzKGNvbnRleHQsIGJveE9yaWdpbiwg
bGluZVN0eWxlLCBmb250LCB0cnVlKTsKIAogICAgICAgICBpZiAoaGF2ZVNlbGVjdGlvbiAmJiAh
dXNlQ3VzdG9tVW5kZXJsaW5lcykKLSAgICAgICAgICAgIHBhaW50U2VsZWN0aW9uKGNvbnRleHQs
IGJveE9yaWdpbiwgJmxpbmVTdHlsZSwgZm9udCwgc2VsZWN0aW9uRmlsbENvbG9yKTsKKyAgICAg
ICAgICAgIHBhaW50U2VsZWN0aW9uKGNvbnRleHQsIGJveE9yaWdpbiwgbGluZVN0eWxlLCBmb250
LCBzZWxlY3Rpb25GaWxsQ29sb3IpOwogICAgIH0KIAogICAgIGlmIChQYWdlKiBwYWdlID0gcmVu
ZGVyZXIoKS5mcmFtZSgpLnBhZ2UoKSkgewpAQCAtNzIzLDcgKzcyMyw3IEBAIHZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICB9CiAKICAgICBCdWZmZXJGb3JBcHBl
bmRpbmdIeXBoZW4gY2hhcmFjdGVyc1dpdGhIeXBoZW47Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0g
Y29uc3RydWN0VGV4dFJ1bigmbGluZVN0eWxlLCBmb250LCBzdHJpbmcsIG1heGltdW1MZW5ndGgs
IGhhc0h5cGhlbigpID8gJmNoYXJhY3RlcnNXaXRoSHlwaGVuIDogMCk7CisgICAgVGV4dFJ1biB0
ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIGZvbnQsIHN0cmluZywgbWF4aW11
bUxlbmd0aCwgaGFzSHlwaGVuKCkgPyAmY2hhcmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKICAgICBp
ZiAoaGFzSHlwaGVuKCkpCiAgICAgICAgIGxlbmd0aCA9IHRleHRSdW4ubGVuZ3RoKCk7CiAKQEAg
LTc0MCw3ICs3NDAsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFp
CiAKICAgICBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0ID0gMDsKICAgICBUZXh0RW1waGFzaXNQb3Np
dGlvbiBlbXBoYXNpc01hcmtQb3NpdGlvbjsKLSAgICBib29sIGhhc1RleHRFbXBoYXNpcyA9IGdl
dEVtcGhhc2lzTWFya1Bvc2l0aW9uKCZsaW5lU3R5bGUsIGVtcGhhc2lzTWFya1Bvc2l0aW9uKTsK
KyAgICBib29sIGhhc1RleHRFbXBoYXNpcyA9IGdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKGxpbmVT
dHlsZSwgZW1waGFzaXNNYXJrUG9zaXRpb24pOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZW1w
aGFzaXNNYXJrID0gaGFzVGV4dEVtcGhhc2lzID8gbGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtT
dHJpbmcoKSA6IG51bGxBdG9tOwogICAgIGlmICghZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkKICAg
ICAgICAgZW1waGFzaXNNYXJrT2Zmc2V0ID0gZW1waGFzaXNNYXJrUG9zaXRpb24gPT0gVGV4dEVt
cGhhc2lzUG9zaXRpb25PdmVyID8gLWZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGZvbnQu
ZW1waGFzaXNNYXJrRGVzY2VudChlbXBoYXNpc01hcmspIDogZm9udC5mb250TWV0cmljcygpLmRl
c2NlbnQoKSArIGZvbnQuZW1waGFzaXNNYXJrQXNjZW50KGVtcGhhc2lzTWFyayk7CkBAIC04MTEs
NyArODExLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAg
IH0KIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsK
LSAgICAgICAgcGFpbnREb2N1bWVudE1hcmtlcnMoY29udGV4dCwgYm94T3JpZ2luLCAmbGluZVN0
eWxlLCBmb250LCBmYWxzZSk7CisgICAgICAgIHBhaW50RG9jdW1lbnRNYXJrZXJzKGNvbnRleHQs
IGJveE9yaWdpbiwgbGluZVN0eWxlLCBmb250LCBmYWxzZSk7CiAKICAgICAgICAgaWYgKHVzZUN1
c3RvbVVuZGVybGluZXMpIHsKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVu
ZGVybGluZT4mIHVuZGVybGluZXMgPSByZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY3VzdG9t
Q29tcG9zaXRpb25VbmRlcmxpbmVzKCk7CkBAIC04NjgsNyArODY4LDcgQEAgdm9pZCBhbGlnblNl
bGVjdGlvblJlY3RUb0RldmljZVBpeGVscyhGbAogICAgIHJlY3Quc2V0V2lkdGgocm91bmRmKG1h
eFggLSByZWN0LngoKSkpOwogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9u
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIENvbG9yIHRleHRDb2xvcikKK3Zv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRm9udCYgZm9udCwgQ29sb3IgdGV4dENvbG9yKQogewogICAgIGlmIChjb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTg4OSw3ICs4ODksNyBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoCiAgICAgICAgIGMgPSBDb2xv
cigweGZmIC0gYy5yZWQoKSwgMHhmZiAtIGMuZ3JlZW4oKSwgMHhmZiAtIGMuYmx1ZSgpKTsKIAog
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7Ci0gICAg
dXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIGMsIGMsIDAsIHN0eWxlLT5jb2xvclNwYWNl
KCkpOyAgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKKyAgICB1cGRhdGVHcmFwaGljc0NvbnRl
eHQoY29udGV4dCwgYywgYywgMCwgc3R5bGUuY29sb3JTcGFjZSgpKTsgLy8gRG9uJ3QgZHJhdyB0
ZXh0IGF0IGFsbCEKICAgICAKICAgICAvLyBJZiB0aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIGxldCB0
aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNhdGlvbgogICAgIC8vIGRyYXcgaXRz
IG93biBoaWdobGlnaHQuCkBAIC05MjAsMTAgKzkyMCwxMCBAQCB2b2lkIElubGluZVRleHRCb3g6
OnBhaW50U2VsZWN0aW9uKEdyYXBoCiAKICAgICBjb250ZXh0LT5jbGlwKGNsaXBSZWN0KTsKIAot
ICAgIGNvbnRleHQtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2FsT3Jp
Z2luLCBzZWxIZWlnaHQsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOworICAg
IGNvbnRleHQtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2FsT3JpZ2lu
LCBzZWxIZWlnaHQsIGMsIHN0eWxlLmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7CiB9CiAKLXZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgRm9udCYgZm9udCwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKQordm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBGb250JiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCiB7CiAg
ICAgaW50IG9mZnNldCA9IG1fc3RhcnQ7CiAgICAgaW50IHNQb3MgPSBtYXgoc3RhcnRQb3MgLSBv
ZmZzZXQsIDApOwpAQCAtOTM2LDEyICs5MzYsMTIgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dENvbXBvc2l0aW9uQmFjawogCiAgICAgQ29sb3IgYyA9IENvbG9yKDIyNSwgMjIxLCA4NSk7CiAg
ICAgCi0gICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIGMsIGMsIDAsIHN0eWxlLT5j
b2xvclNwYWNlKCkpOyAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQorICAgIHVwZGF0ZUdyYXBo
aWNzQ29udGV4dChjb250ZXh0LCBjLCBjLCAwLCBzdHlsZS5jb2xvclNwYWNlKCkpOyAvLyBEb24n
dCBkcmF3IHRleHQgYXQgYWxsIQogCiAgICAgaW50IGRlbHRhWSA9IHJlbmRlcmVyKCkuc3R5bGUo
KS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dp
Y2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKICAgICBpbnQgc2Vs
SGVpZ2h0ID0gc2VsZWN0aW9uSGVpZ2h0KCk7CiAgICAgRmxvYXRQb2ludCBsb2NhbE9yaWdpbihi
b3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZKTsKLSAgICBjb250ZXh0LT5kcmF3
SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmb250KSwgbG9j
YWxPcmlnaW4sIHNlbEhlaWdodCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7
CisgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgY29uc3RydWN0VGV4dFJ1
bihzdHlsZSwgZm9udCksIGxvY2FsT3JpZ2luLCBzZWxIZWlnaHQsIGMsIHN0eWxlLmNvbG9yU3Bh
Y2UoKSwgc1BvcywgZVBvcyk7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC0xMTY3LDcgKzEx
NjcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwCiAKICAgICBi
b29sIGxpbmVzQXJlT3BhcXVlID0gIWlzUHJpbnRpbmcgJiYgKCEoZGVjbyAmIFRleHREZWNvcmF0
aW9uVW5kZXJsaW5lKSB8fCB1bmRlcmxpbmUuYWxwaGEoKSA9PSAyNTUpICYmICghKGRlY28gJiBU
ZXh0RGVjb3JhdGlvbk92ZXJsaW5lKSB8fCBvdmVybGluZS5hbHBoYSgpID09IDI1NSkgJiYgKCEo
ZGVjbyAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpIHx8IGxpbmV0aHJvdWdoLmFscGhhKCkg
PT0gMjU1KTsKIAotICAgIFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUo
KTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7
CiAgICAgaW50IGJhc2VsaW5lID0gbGluZVN0eWxlLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CiAK
ICAgICBib29sIHNldENsaXAgPSBmYWxzZTsKQEAgLTEzMDAsNyArMTMwMCw3IEBAIHN0YXRpYyBH
cmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGkKICAgICB9CiB9CiAKLXZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBG
bG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBncmFtbWFyKQordm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2
ZXIgcHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQogICAgIGlmIChyZW5k
ZXJlcigpLmRvY3VtZW50KCkucHJpbnRpbmcoKSkKQEAgLTEzNjksNyArMTM2OSw3IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcigKICAgICBwdC0+ZHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlcihGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2lu
LnkoKSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCBsaW5lU3R5bGVGb3JNYXJrZXJUeXBlKG1h
cmtlci0+dHlwZSgpKSk7CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hN
YXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBE
b2N1bWVudE1hcmtlciogbWFya2VyLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZv
bnQpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29u
dGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqIG1h
cmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250KQogewogICAg
IC8vIFVzZSBzYW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2VsZWN0aW9uLCBz
byB0aGF0IHdoZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBoaWdobGlnaHQgYXJlIG9uCiAgICAg
Ly8gdGhlIHNhbWUgd29yZCB0aGVyZSBhcmUgbm8gcGllY2VzIHN0aWNraW5nIG91dC4KQEAgLTEz
OTEsMTMgKzEzOTEsMTMgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtl
cgogICAgICAgICAgICAgcmVuZGVyZXIoKS50aGVtZSgpLT5wbGF0Zm9ybUFjdGl2ZVRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcigpIDoKICAgICAgICAgICAgIHJlbmRlcmVyKCkudGhlbWUoKS0+cGxh
dGZvcm1JbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpOwogICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnB0KTsKLSAgICAgICAgdXBkYXRlR3JhcGhp
Y3NDb250ZXh0KHB0LCBjb2xvciwgY29sb3IsIDAsIHN0eWxlLT5jb2xvclNwYWNlKCkpOyAgLy8g
RG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKKyAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KHB0
LCBjb2xvciwgY29sb3IsIDAsIHN0eWxlLmNvbG9yU3BhY2UoKSk7IC8vIERvbid0IGRyYXcgdGV4
dCBhdCBhbGwhCiAgICAgICAgIHB0LT5jbGlwKEZsb2F0UmVjdChib3hPcmlnaW4ueCgpLCBib3hP
cmlnaW4ueSgpIC0gZGVsdGFZLCBtX2xvZ2ljYWxXaWR0aCwgc2VsSGVpZ2h0KSk7Ci0gICAgICAg
IHB0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBydW4sIEZsb2F0UG9pbnQoYm94T3JpZ2lu
LngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSksIHNlbEhlaWdodCwgY29sb3IsIHN0eWxlLT5j
b2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOworICAgICAgICBwdC0+ZHJhd0hpZ2hsaWdodEZvclRl
eHQoZm9udCwgcnVuLCBGbG9hdFBvaW50KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBk
ZWx0YVkpLCBzZWxIZWlnaHQsIGNvbG9yLCBzdHlsZS5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3Mp
OwogICAgIH0KIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhY2Vt
ZW50TWFya2VyKERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgRm9udCYgZm9udCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNl
bWVudE1hcmtlcihEb2N1bWVudE1hcmtlciogbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgLy8gUmVwbGFjZW1lbnQgbWFya2VycyBhcmUg
bm90IGFjdHVhbGx5IGRyYXduLCBidXQgdGhlaXIgcmVjdHMgbmVlZCB0byBiZSBjb21wdXRlZCBm
b3IgaGl0IHRlc3RpbmcuCiAgICAgaW50IHRvcCA9IHNlbGVjdGlvblRvcCgpOwpAQCAtMTQxNCw3
ICsxNDE0LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhYwogICAg
IHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihtYXJrZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2Vy
UmVjdCk7CiB9CiAgICAgCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJz
KEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGJhY2tncm91bmQpCit2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCogcHQsIGNv
bnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBGb250JiBmb250LCBib29sIGJhY2tncm91bmQpCiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLnRl
eHROb2RlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NTMsOSArMTU1Myw5IEBAIGludCBJbmxp
bmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbihmbG8KIAogICAgIEZvbnRDYWNoZVB1cmdlUHJl
dmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwogCi0gICAgUmVuZGVyU3R5bGUmIGxpbmVT
dHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5
bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICBjb25zdCBGb250JiBmb250ID0gZm9udFRvVXNl
KGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7Ci0gICAgcmV0dXJuIGZvbnQub2Zmc2V0Rm9yUG9zaXRp
b24oY29uc3RydWN0VGV4dFJ1bigmbGluZVN0eWxlLCBmb250KSwgbGluZU9mZnNldCAtIGxvZ2lj
YWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKKyAgICByZXR1cm4gZm9udC5vZmZzZXRG
b3JQb3NpdGlvbihjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwgZm9udCksIGxpbmVPZmZzZXQg
LSBsb2dpY2FsTGVmdCgpLCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiB9CiAKIGZsb2F0IElubGlu
ZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CkBAIC0xNTY4LDEy
ICsxNTY4LDEyIEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGkKIAog
ICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwogCi0g
ICAgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOworICAgIGNvbnN0
IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICBjb25zdCBG
b250JiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAgICAgaW50IGZy
b20gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb2Zmc2V0IC0gbV9zdGFydCA6IDA7CiAg
ICAgaW50IHRvID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1fbGVuIDogb2Zmc2V0IC0g
bV9zdGFydDsKICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBhZGQgcmlnaHRCZWFyaW5nIGhl
cmU/Ci0gICAgcmV0dXJuIGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3RydWN0VGV4dFJ1
bigmbGluZVN0eWxlLCBmb250KSwgSW50UG9pbnQobG9naWNhbExlZnQoKSwgMCksIDAsIGZyb20s
IHRvKS5tYXhYKCk7CisgICAgcmV0dXJuIGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Ry
dWN0VGV4dFJ1bihsaW5lU3R5bGUsIGZvbnQpLCBJbnRQb2ludChsb2dpY2FsTGVmdCgpLCAwKSwg
MCwgZnJvbSwgdG8pLm1heFgoKTsKIH0KIAogYm9vbCBJbmxpbmVUZXh0Qm94Ojpjb250YWluc0Nh
cmV0T2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CkBAIC0xNjAwLDkgKzE2MDAsOCBAQCBib29sIElu
bGluZVRleHRCb3g6OmNvbnRhaW5zQ2FyZXRPZmZzZXQoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LVRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSogc3R5
bGUsIGNvbnN0IEZvbnQmIGZvbnQsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogY2hhcmFjdGVy
c1dpdGhIeXBoZW4pIGNvbnN0CitUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRS
dW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBCdWZmZXJGb3JB
cHBlbmRpbmdIeXBoZW4qIGNoYXJhY3RlcnNXaXRoSHlwaGVuKSBjb25zdAogewotICAgIEFTU0VS
VChzdHlsZSk7CiAgICAgQVNTRVJUKHJlbmRlcmVyKCkudGV4dCgpKTsKIAogICAgIFN0cmluZyBz
dHJpbmcgPSByZW5kZXJlcigpLnRleHQoKTsKQEAgLTE2MTUsMTAgKzE2MTQsOCBAQCBUZXh0UnVu
IElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oCiAgICAgcmV0dXJuIGNvbnN0cnVjdFRl
eHRSdW4oc3R5bGUsIGZvbnQsIHN0cmluZywgcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBzdGFy
dFBvcywgY2hhcmFjdGVyc1dpdGhIeXBoZW4pOwogfQogCi1UZXh0UnVuIElubGluZVRleHRCb3g6
OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBT
dHJpbmcgc3RyaW5nLCBpbnQgbWF4aW11bUxlbmd0aCwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVu
KiBjaGFyYWN0ZXJzV2l0aEh5cGhlbikgY29uc3QKK1RleHRSdW4gSW5saW5lVGV4dEJveDo6Y29u
c3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQs
IFN0cmluZyBzdHJpbmcsIGludCBtYXhpbXVtTGVuZ3RoLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBo
ZW4qIGNoYXJhY3RlcnNXaXRoSHlwaGVuKSBjb25zdAogewotICAgIEFTU0VSVChzdHlsZSk7Ci0K
ICAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogCiAgICAgaWYgKGNoYXJhY3RlcnNX
aXRoSHlwaGVuKSB7CkBAIC0xNjI4LDggKzE2MjUsOCBAQCBUZXh0UnVuIElubGluZVRleHRCb3g6
OmNvbnN0cnVjdFRleHRSdW4oCiAKICAgICBBU1NFUlQobWF4aW11bUxlbmd0aCA+PSBsZW5ndGgp
OwogCi0gICAgVGV4dFJ1biBydW4oc3RyaW5nLCB0ZXh0UG9zKCksIGV4cGFuc2lvbigpLCBleHBh
bnNpb25CZWhhdmlvcigpLCBkaXJlY3Rpb24oKSwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS0+cnRs
T3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciwgIXJlbmRlcmVyKCkuY2FuVXNlU2ltcGxlRm9udENv
ZGVQYXRoKCkpOwotICAgIHJ1bi5zZXRUYWJTaXplKCFzdHlsZS0+Y29sbGFwc2VXaGl0ZVNwYWNl
KCksIHN0eWxlLT50YWJTaXplKCkpOworICAgIFRleHRSdW4gcnVuKHN0cmluZywgdGV4dFBvcygp
LCBleHBhbnNpb24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGlyZWN0aW9uKCksIGRpck92ZXJy
aWRlKCkgfHwgc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciwgIXJlbmRlcmVyKCku
Y2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkpOworICAgIHJ1bi5zZXRUYWJTaXplKCFzdHlsZS5j
b2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKICAgICBpZiAodGV4dFJ1bk5l
ZWRzUmVuZGVyaW5nQ29udGV4dChmb250KSkKICAgICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRl
eHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSgmcmVuZGVyZXIoKSkpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDE1
NjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFJlbmRlclRl
eHQmIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gdG9SZW5kZXJUZXh0KElubGluZUJveDo6cmVu
ZGVyZXIoKSk7IH0KLSAgICBSZW5kZXJTdHlsZSYgbGluZVN0eWxlKCkgY29uc3QgeyByZXR1cm4g
aXNGaXJzdExpbmUoKSA/ICpyZW5kZXJlcigpLmZpcnN0TGluZVN0eWxlKCkgOiAqcmVuZGVyZXIo
KS5zdHlsZSgpOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIGlzRmlyc3RMaW5lKCkgPyAqcmVuZGVyZXIoKS5maXJzdExpbmVTdHlsZSgpIDogKnJl
bmRlcmVyKCkuc3R5bGUoKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koUmVuZGVyQXJl
bmEmKSBPVkVSUklERSBGSU5BTDsKIApAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUpIGNvbnN0IE9WRVJSSURFIEZJ
TkFMOwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KCkgY29uc3QgT1ZFUlJJREUg
RklOQUw7CiAKLSAgICBib29sIGdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKFJlbmRlclN0eWxlKiwg
VGV4dEVtcGhhc2lzUG9zaXRpb24mKSBjb25zdDsKKyAgICBib29sIGdldEVtcGhhc2lzTWFya1Bv
c2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiwgVGV4dEVtcGhhc2lzUG9zaXRpb24mKSBjb25zdDsK
IAogICAgIExheW91dFJlY3QgbG9naWNhbE92ZXJmbG93UmVjdCgpIGNvbnN0OwogICAgIHZvaWQg
c2V0TG9naWNhbE92ZXJmbG93UmVjdChjb25zdCBMYXlvdXRSZWN0Jik7CkBAIC0xMTAsOCArMTEw
LDggQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSgpOwogICAgIExh
eW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0KCk7CiAKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRS
dW4oUmVuZGVyU3R5bGUqLCBjb25zdCBGb250JiwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiA9
IDApIGNvbnN0OwotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSosIGNv
bnN0IEZvbnQmLCBTdHJpbmcsIGludCBtYXhpbXVtTGVuZ3RoLCBCdWZmZXJGb3JBcHBlbmRpbmdI
eXBoZW4qID0gMCkgY29uc3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgRm9udCYsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSAwKSBj
b25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBGb250JiwgU3RyaW5nLCBpbnQgbWF4aW11bUxlbmd0aCwgQnVmZmVyRm9yQXBwZW5kaW5n
SHlwaGVuKiA9IDApIGNvbnN0OwogCiBwdWJsaWM6CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgY2Fs
Y3VsYXRlQm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCh4KCksIHkoKSwgd2lk
dGgoKSwgaGVpZ2h0KCkpOyB9CkBAIC0xNzYsOCArMTc2LDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAvLyBkZW5vdGUgbm8gdHJ1bmNhdGlvbiAodGhlIHdob2xlIHJ1biBwYWlu
dHMpIGFuZCBmdWxsIHRydW5jYXRpb24gKG5vdGhpbmcgcGFpbnRzIGF0IGFsbCkuCiAKIHByb3Rl
Y3RlZDoKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250
JiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKLSAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJr
ZXJzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVy
U3R5bGUqLCBjb25zdCBGb250JiwgYm9vbCBiYWNrZ3JvdW5kKTsKKyAgICB2b2lkIHBhaW50Q29t
cG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJv
eE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgaW50IHN0YXJ0UG9zLCBp
bnQgZW5kUG9zKTsKKyAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25z
dCBGb250JiwgYm9vbCBiYWNrZ3JvdW5kKTsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRl
cmxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25z
dCBDb21wb3NpdGlvblVuZGVybGluZSYpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHBh
aW50Q3VzdG9tSGlnaGxpZ2h0KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlKTsKQEAgLTE4NSwxMCArMTg1LDEwIEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAg
ICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50
JiBib3hPcmlnaW4sIFRleHREZWNvcmF0aW9uLCBUZXh0RGVjb3JhdGlvblN0eWxlLCBjb25zdCBT
aGFkb3dEYXRhKik7Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYsIENv
bG9yIHRleHRDb2xvcik7Ci0gICAgdm9pZCBwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBSZW5k
ZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBib29sIGdyYW1tYXIpOwotICAgIHZvaWQgcGFpbnRUZXh0
TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBEb2N1bWVudE1hcmtlciosIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOwotICAgIHZvaWQg
Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihEb2N1bWVudE1hcmtlciosIFJlbmRlclN0
eWxlKiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNv
bnN0IEZvbnQmLCBDb2xvciB0ZXh0Q29sb3IpOworICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtl
cihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50
TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsK
KyAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIo
RG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKIAogICAg
IFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKICAg
ICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlz
aW9uIDE1NjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxNjMsNyArNTE2Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBz
dHJpcFRyYWlsaW5nU3BhY2UoZmwKICAgICAgICAgUmVuZGVyVGV4dCogdCA9IHRvUmVuZGVyVGV4
dCh0cmFpbGluZ1NwYWNlQ2hpbGQpOwogICAgICAgICBjb25zdCBVQ2hhciBzcGFjZSA9ICcgJzsK
ICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHQtPnN0eWxlKCktPmZvbnQoKTsgLy8gRklYTUU6
IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgotICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9u
dC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0LCBmb250LCAmc3BhY2UsIDEs
IHQtPnN0eWxlKCkpKTsKKyAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odCwgZm9udCwgJnNwYWNlLCAxLCAqdC0+c3R5bGUo
KSkpOwogICAgICAgICBpbmxpbmVNYXggLT0gc3BhY2VXaWR0aCArIGZvbnQud29yZFNwYWNpbmco
KTsKICAgICAgICAgaWYgKGlubGluZU1pbiA+IGlubGluZU1heCkKICAgICAgICAgICAgIGlubGlu
ZU1pbiA9IGlubGluZU1heDsKQEAgLTY3MjQsMTIgKzY3MjQsMTAgQEAgdm9pZCBSZW5kZXJCbG9j
azo6Y3JlYXRlRmxvYXRpbmdPYmplY3RzKAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwo
UmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW46
OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK3N0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25z
dHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBm
b250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikK
IHsKLSAgICBBU1NFUlQoc3R5bGUpOwotCiAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9u
ID0gTFRSOwotICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLT5ydGxPcmRlcmlu
ZygpID09IFZpc3VhbE9yZGVyOworICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxl
LnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CiAKICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0
ZXJzLCBsZW5ndGgsIDAsIDAsIGV4cGFuc2lvbiwgdGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uYWxP
dmVycmlkZSk7CiAgICAgaWYgKHRleHRSdW5OZWVkc1JlbmRlcmluZ0NvbnRleHQoZm9udCkpCkBA
IC02NzM5LDE3ICs2NzM3LDE1IEBAIHN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0
UnVuSW4KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5s
aW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4
dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgaW50
IGxlbmd0aCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBl
eHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKK3N0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25z
dHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBm
b250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwg
VGV4dFJ1bkZsYWdzIGZsYWdzKQogewotICAgIEFTU0VSVChzdHlsZSk7Ci0KICAgICBUZXh0RGly
ZWN0aW9uIHRleHREaXJlY3Rpb24gPSBMVFI7Ci0gICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRl
ID0gc3R5bGUtPnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CisgICAgYm9vbCBkaXJlY3Rp
b25hbE92ZXJyaWRlID0gc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlcjsKICAgICBp
ZiAoZmxhZ3MgIT0gRGVmYXVsdFRleHRSdW5GbGFncykgewogICAgICAgICBpZiAoZmxhZ3MgJiBS
ZXNwZWN0RGlyZWN0aW9uKQotICAgICAgICAgICAgdGV4dERpcmVjdGlvbiA9IHN0eWxlLT5kaXJl
Y3Rpb24oKTsKKyAgICAgICAgICAgIHRleHREaXJlY3Rpb24gPSBzdHlsZS5kaXJlY3Rpb24oKTsK
ICAgICAgICAgaWYgKGZsYWdzICYgUmVzcGVjdERpcmVjdGlvbk92ZXJyaWRlKQotICAgICAgICAg
ICAgZGlyZWN0aW9uYWxPdmVycmlkZSB8PSBpc092ZXJyaWRlKHN0eWxlLT51bmljb2RlQmlkaSgp
KTsKKyAgICAgICAgICAgIGRpcmVjdGlvbmFsT3ZlcnJpZGUgfD0gaXNPdmVycmlkZShzdHlsZS51
bmljb2RlQmlkaSgpKTsKICAgICB9CiAgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3Ro
LCAwLCAwLCBleHBhbnNpb24sIHRleHREaXJlY3Rpb24sIGRpcmVjdGlvbmFsT3ZlcnJpZGUpOwog
ICAgIGlmICh0ZXh0UnVuTmVlZHNSZW5kZXJpbmdDb250ZXh0KGZvbnQpKQpAQCAtNjc1OSwxOCAr
Njc1NSwxOCBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkluCiB9CiAK
ICNpZiBFTkFCTEUoOEJJVF9URVhUUlVOKQotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0
VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW46
OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25z
dCBMQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgcmV0dXJuIGNv
bnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgs
IHN0eWxlLCBleHBhbnNpb24pOwogfQogI2VuZGlmCiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNv
bnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBU
ZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2Nr
Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIHJl
dHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgY2hhcmFjdGVycywg
bGVuZ3RoLCBzdHlsZSwgZXhwYW5zaW9uKTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFJlbmRlclRleHQqIHRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFJlbmRl
clRleHQqIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uKQogewogI2lmIEVOQUJMRSg4QklUX1RFWFRSVU4pCiAgICAgaWYg
KHRleHQtPmlzOEJpdCgpKQpAQCAtNjc4MSw3ICs2Nzc3LDcgQEAgVGV4dFJ1biBSZW5kZXJCbG9j
azo6Y29uc3RydWN0VGV4dFJ1bihSZQogI2VuZGlmCiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6
OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250
LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNp
b24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCog
Y29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgUmVuZGVyVGV4dCogdGV4dCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4
dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIEFTU0VSVChvZmZzZXQg
KyBsZW5ndGggPD0gdGV4dC0+dGV4dExlbmd0aCgpKTsKICNpZiBFTkFCTEUoOEJJVF9URVhUUlVO
KQpAQCAtNjc5Myw3ICs2Nzg5LDcgQEAgVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihSZQogI2VuZGlmCiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBTdHJpbmcm
IHN0cmluZywgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBl
eHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25z
dCBTdHJpbmcmIHN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBh
bnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKIHsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAxNTY2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDI0ICsyOTcsMjQg
QEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3QoQmlk
aVJ1bkxpc3Q8QmlkaVJ1bj4mLCBpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9iamVjdCosIElu
bGluZUJpZGlSZXNvbHZlciYpOwogCi0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1
bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBSZW5kZXJTdHlsZSogc3R5bGUsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0
VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9y
ID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRp
bmdFeHBhbnNpb24sIFRleHRSdW5GbGFncyA9IERlZmF1bHRUZXh0UnVuRmxhZ3MpOwogCi0gICAg
c3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFJlbmRlclRleHQqIHRleHQsIFJlbmRlclN0eWxlKiBzdHls
ZSwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29u
dGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCBjb25zdCBSZW5kZXJTdHlsZSYs
CiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFp
bGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogCi0gICAg
c3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBSZW5kZXJTdHlsZSogc3R5bGUsCisgICAgc3RhdGljIFRleHRSdW4g
Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25z
dCBSZW5kZXJUZXh0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJl
bmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVu
OjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lv
bik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCog
Y29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgUmVuZGVyVGV4dCogdGV4dCwgdW5zaWdu
ZWQgb2Zmc2V0LCBSZW5kZXJTdHlsZSogc3R5bGUsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3Ry
dWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBSZW5k
ZXJUZXh0KiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRl
eHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
biB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogCiAjaWYgRU5BQkxFKDhCSVRf
VEVYVFJVTikKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVj
dCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgsIFJlbmRlclN0eWxlKiBzdHlsZSwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRl
eHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
biB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogI2VuZGlmCiAKLSAgICBzdGF0
aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIFJlbmRlclN0
eWxlKiBzdHlsZSwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9i
amVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
bGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJl
aGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJp
ZExlYWRpbmdFeHBhbnNpb24pOwogCiAgICAgQ29sdW1uSW5mbyogY29sdW1uSW5mbygpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAJKHJldmlzaW9uIDE1NjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDEsOCArNjAx
LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0TWFyZ2luc0ZvclJ1YnlSdW4oQgogCiBzdGF0aWMg
aW5saW5lIGZsb2F0IG1lYXN1cmVIeXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29u
c3QgRm9udCYgZm9udCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzID0gMCkKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsK
LSAgICByZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5k
ZXJlciwgZm9udCwgc3R5bGUtPmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHlsZSksIGZhbGxi
YWNrRm9udHMpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9ICpyZW5kZXJlci0+c3R5
bGUoKTsKKyAgICByZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bihyZW5kZXJlciwgZm9udCwgc3R5bGUuaHlwaGVuU3RyaW5nKCkuc3RyaW5nKCksIHN0eWxlKSwg
ZmFsbGJhY2tGb250cyk7CiB9CiAKIGNsYXNzIFdvcmRNZWFzdXJlbWVudCB7CkBAIC02MjIsNyAr
NjIyLDcgQEAgcHVibGljOgogICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBmYWxs
YmFja0ZvbnRzOwogfTsKIAotc3RhdGljIGlubGluZSBSZW5kZXJTdHlsZSYgbGluZVN0eWxlKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8pCitzdGF0aWMg
aW5saW5lIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbykKIHsKICAgICByZXR1cm4gbGluZUluZm8uaXNG
aXJzdExpbmUoKSA/ICpyZW5kZXJlci5maXJzdExpbmVTdHlsZSgpIDogKnJlbmRlcmVyLnN0eWxl
KCk7CiB9CkBAIC03OTAsNyArNzkwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6dXBkYXRlTG9naWNh
bFdpZHRoRm9yQQogICAgIH0KIH0KIAotc3RhdGljIEluZGVudFRleHRPck5vdCByZXF1aXJlc0lu
ZGVudChib29sIGlzRmlyc3RMaW5lLCBib29sIGlzQWZ0ZXJIYXJkTGluZUJyZWFrLCBSZW5kZXJT
dHlsZSogc3R5bGUpCitzdGF0aWMgSW5kZW50VGV4dE9yTm90IHJlcXVpcmVzSW5kZW50KGJvb2wg
aXNGaXJzdExpbmUsIGJvb2wgaXNBZnRlckhhcmRMaW5lQnJlYWssIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSkKIHsKICAgICBJbmRlbnRUZXh0T3JOb3Qgc2hvdWxkSW5kZW50VGV4dCA9IERvTm90
SW5kZW50VGV4dDsKICAgICBpZiAoaXNGaXJzdExpbmUpCkBAIC04MjcsNyArODI3LDcgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvbgogICAgIC8vIGJ1dCBkb2VzIG5v
dCBhZmZlY3QgbGluZXMgYWZ0ZXIgYSBzb2Z0IHdyYXAgYnJlYWsuCiAgICAgYm9vbCBpc0ZpcnN0
TGluZSA9IGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkgJiYgIShpc0Fub255bW91c0Jsb2NrKCkgJiYg
cGFyZW50KCktPmZpcnN0Q2hpbGQoKSAhPSB0aGlzKTsKICAgICBib29sIGlzQWZ0ZXJIYXJkTGlu
ZUJyZWFrID0gbGluZUJveC0+cHJldlJvb3RCb3goKSAmJiBsaW5lQm94LT5wcmV2Um9vdEJveCgp
LT5lbmRzV2l0aEJyZWFrKCk7Ci0gICAgSW5kZW50VGV4dE9yTm90IHNob3VsZEluZGVudFRleHQg
PSByZXF1aXJlc0luZGVudChpc0ZpcnN0TGluZSwgaXNBZnRlckhhcmRMaW5lQnJlYWssIHN0eWxl
KCkpOworICAgIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0ID0gcmVxdWlyZXNJbmRl
bnQoaXNGaXJzdExpbmUsIGlzQWZ0ZXJIYXJkTGluZUJyZWFrLCAqc3R5bGUoKSk7CiAgICAgZmxv
YXQgbGluZUxvZ2ljYWxMZWZ0OwogICAgIGZsb2F0IGxpbmVMb2dpY2FsUmlnaHQ7CiAgICAgZmxv
YXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoOwpAQCAtMjM1MCwxNCArMjM1MCwxNiBAQCBzdGF0aWMg
Ym9vbCBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhCiAKIHN0YXRpYyBBTFdBWVNfSU5MSU5F
IGZsb2F0IHRleHRXaWR0aChSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBmcm9tLCB1bnNpZ25l
ZCBsZW4sIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHhQb3MsIGJvb2wgaXNGaXhlZFBpdGNoLCBi
b29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBm
YWxsYmFja0ZvbnRzLCBUZXh0TGF5b3V0KiBsYXlvdXQgPSAwKQogeworICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSA9ICp0ZXh0LT5zdHlsZSgpOworCiAgICAgR2x5cGhPdmVyZmxvdyBnbHlw
aE92ZXJmbG93OwotICAgIGlmIChpc0ZpeGVkUGl0Y2ggfHwgKCFmcm9tICYmIGxlbiA9PSB0ZXh0
LT50ZXh0TGVuZ3RoKCkpIHx8IHRleHQtPnN0eWxlKCktPmhhc1RleHRDb21iaW5lKCkpCisgICAg
aWYgKGlzRml4ZWRQaXRjaCB8fCAoIWZyb20gJiYgbGVuID09IHRleHQtPnRleHRMZW5ndGgoKSkg
fHwgc3R5bGUuaGFzVGV4dENvbWJpbmUoKSkKICAgICAgICAgcmV0dXJuIHRleHQtPndpZHRoKGZy
b20sIGxlbiwgZm9udCwgeFBvcywgJmZhbGxiYWNrRm9udHMsICZnbHlwaE92ZXJmbG93KTsKIAog
ICAgIGlmIChsYXlvdXQpCiAgICAgICAgIHJldHVybiBGb250Ojp3aWR0aCgqbGF5b3V0LCBmcm9t
LCBsZW4sICZmYWxsYmFja0ZvbnRzKTsKIAotICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6
OmNvbnN0cnVjdFRleHRSdW4odGV4dCwgZm9udCwgdGV4dCwgZnJvbSwgbGVuLCB0ZXh0LT5zdHls
ZSgpKTsKKyAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRl
eHQsIGZvbnQsIHRleHQsIGZyb20sIGxlbiwgc3R5bGUpOwogICAgIHJ1bi5zZXRDaGFyYWN0ZXJz
TGVuZ3RoKHRleHQtPnRleHRMZW5ndGgoKSAtIGZyb20pOwogICAgIEFTU0VSVChydW4uY2hhcmFj
dGVyc0xlbmd0aCgpID49IHJ1bi5sZW5ndGgoKSk7CiAKQEAgLTIzOTcsMTEgKzIzOTksMTIgQEAg
c3RhdGljIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCogdAogICAgIGlmIChtYXhQcmVm
aXhXaWR0aCA8PSBmb250LnBpeGVsU2l6ZSgpICogNSAvIDQpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGV4dCwgZm9u
dCwgdGV4dCwgbGFzdFNwYWNlLCBwb3MgLSBsYXN0U3BhY2UsIHRleHQtPnN0eWxlKCkpOworICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9ICp0ZXh0LT5zdHlsZSgpOworICAgIFRleHRSdW4g
cnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGV4dCwgZm9udCwgdGV4dCwgbGFz
dFNwYWNlLCBwb3MgLSBsYXN0U3BhY2UsIHN0eWxlKTsKICAgICBydW4uc2V0Q2hhcmFjdGVyc0xl
bmd0aCh0ZXh0LT50ZXh0TGVuZ3RoKCkgLSBsYXN0U3BhY2UpOwogICAgIEFTU0VSVChydW4uY2hh
cmFjdGVyc0xlbmd0aCgpID49IHJ1bi5sZW5ndGgoKSk7CiAKLSAgICBydW4uc2V0VGFiU2l6ZSgh
Y29sbGFwc2VXaGl0ZVNwYWNlLCB0ZXh0LT5zdHlsZSgpLT50YWJTaXplKCkpOworICAgIHJ1bi5z
ZXRUYWJTaXplKCFjb2xsYXBzZVdoaXRlU3BhY2UsIHN0eWxlLnRhYlNpemUoKSk7CiAgICAgcnVu
LnNldFhQb3MoeFBvcyArIGxhc3RTcGFjZVdvcmRTcGFjaW5nKTsKIAogICAgIHVuc2lnbmVkIHBy
ZWZpeExlbmd0aCA9IGZvbnQub2Zmc2V0Rm9yUG9zaXRpb24ocnVuLCBtYXhQcmVmaXhXaWR0aCwg
ZmFsc2UpOwpAQCAtMjY4Miw3ICsyNjg1LDcgQEAgSW5saW5lSXRlcmF0b3IgTGluZUJyZWFrZXI6
Om5leHRTZWdtZW50QgogICAgIGJvb2wgaW5jbHVkZUVuZFdpZHRoID0gdHJ1ZTsKICAgICBMaW5l
TWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5taWRwb2ludFN0YXRl
KCk7CiAKLSAgICBMaW5lV2lkdGggd2lkdGgoKm1fYmxvY2ssIGxpbmVJbmZvLmlzRmlyc3RMaW5l
KCksIHJlcXVpcmVzSW5kZW50KGxpbmVJbmZvLmlzRmlyc3RMaW5lKCksIGxpbmVJbmZvLnByZXZp
b3VzTGluZUJyb2tlQ2xlYW5seSgpLCBtX2Jsb2NrLT5zdHlsZSgpKSk7CisgICAgTGluZVdpZHRo
IHdpZHRoKCptX2Jsb2NrLCBsaW5lSW5mby5pc0ZpcnN0TGluZSgpLCByZXF1aXJlc0luZGVudChs
aW5lSW5mby5pc0ZpcnN0TGluZSgpLCBsaW5lSW5mby5wcmV2aW91c0xpbmVCcm9rZUNsZWFubHko
KSwgKm1fYmxvY2stPnN0eWxlKCkpKTsKIAogICAgIHNraXBMZWFkaW5nV2hpdGVzcGFjZShyZXNv
bHZlciwgbGluZUluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIHdpZHRoKTsKIApAQCAt
MjcxOCwxOCArMjcyMSwxOCBAQCBJbmxpbmVJdGVyYXRvciBMaW5lQnJlYWtlcjo6bmV4dFNlZ21l
bnRCCiAgICAgLy8gRmlyZWZveCBhbmQgT3BlcmEgd2lsbCBhbGxvdyBhIHRhYmxlIGNlbGwgdG8g
Z3JvdyB0byBmaXQgYW4gaW1hZ2UgaW5zaWRlIGl0IHVuZGVyCiAgICAgLy8gdmVyeSBzcGVjaWZp
YyBjaXJjdW1zdGFuY2VzIChpbiBvcmRlciB0byBtYXRjaCBjb21tb24gV2luSUUgcmVuZGVyaW5n
cykuCiAgICAgLy8gTm90IHN1cHBvcnRpbmcgdGhlIHF1aXJrIGhhcyBjYXVzZWQgdXMgdG8gbWlz
LXJlbmRlciBzb21lIHJlYWwgc2l0ZXMuIChTZWUgQnVnemlsbGEgMTA1MTcuKQotICAgIFJlbmRl
clN0eWxlKiBibG9ja1N0eWxlID0gbV9ibG9jay0+c3R5bGUoKTsKLSAgICBib29sIGFsbG93SW1h
Z2VzVG9CcmVhayA9ICFtX2Jsb2NrLT5kb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpIHx8ICFtX2Js
b2NrLT5pc1RhYmxlQ2VsbCgpIHx8ICFibG9ja1N0eWxlLT5sb2dpY2FsV2lkdGgoKS5pc0ludHJp
bnNpY09yQXV0bygpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBibG9ja1N0eWxlID0gKm1fYmxv
Y2stPnN0eWxlKCk7CisgICAgYm9vbCBhbGxvd0ltYWdlc1RvQnJlYWsgPSAhbV9ibG9jay0+ZG9j
dW1lbnQoKS5pblF1aXJrc01vZGUoKSB8fCAhbV9ibG9jay0+aXNUYWJsZUNlbGwoKSB8fCAhYmxv
Y2tTdHlsZS5sb2dpY2FsV2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpOwogCi0gICAgRVdoaXRl
U3BhY2UgY3VycldTID0gYmxvY2tTdHlsZS0+d2hpdGVTcGFjZSgpOworICAgIEVXaGl0ZVNwYWNl
IGN1cnJXUyA9IGJsb2NrU3R5bGUud2hpdGVTcGFjZSgpOwogICAgIEVXaGl0ZVNwYWNlIGxhc3RX
UyA9IGN1cnJXUzsKICAgICB3aGlsZSAoY3VycmVudC5tX29iaikgewotICAgICAgICBSZW5kZXJT
dHlsZSogY3VycmVudFN0eWxlID0gY3VycmVudC5tX29iai0+c3R5bGUoKTsKKyAgICAgICAgY29u
c3QgUmVuZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSA9ICpjdXJyZW50Lm1fb2JqLT5zdHlsZSgpOwog
ICAgICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBiaWRpTmV4dFNraXBwaW5nRW1wdHlJbmxpbmVz
KG1fYmxvY2ssIGN1cnJlbnQubV9vYmopOwogICAgICAgICBpZiAobmV4dCAmJiBuZXh0LT5wYXJl
bnQoKSAmJiAhbmV4dC0+cGFyZW50KCktPmlzRGVzY2VuZGFudE9mKGN1cnJlbnQubV9vYmotPnBh
cmVudCgpKSkKICAgICAgICAgICAgIGluY2x1ZGVFbmRXaWR0aCA9IHRydWU7CiAKLSAgICAgICAg
Y3VycldTID0gY3VycmVudC5tX29iai0+aXNSZXBsYWNlZCgpID8gY3VycmVudC5tX29iai0+cGFy
ZW50KCktPnN0eWxlKCktPndoaXRlU3BhY2UoKSA6IGN1cnJlbnRTdHlsZS0+d2hpdGVTcGFjZSgp
OworICAgICAgICBjdXJyV1MgPSBjdXJyZW50Lm1fb2JqLT5pc1JlcGxhY2VkKCkgPyBjdXJyZW50
Lm1fb2JqLT5wYXJlbnQoKS0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpIDogY3VycmVudFN0eWxlLndo
aXRlU3BhY2UoKTsKICAgICAgICAgbGFzdFdTID0gbGFzdC0+aXNSZXBsYWNlZCgpID8gbGFzdC0+
cGFyZW50KCktPnN0eWxlKCktPndoaXRlU3BhY2UoKSA6IGxhc3QtPnN0eWxlKCktPndoaXRlU3Bh
Y2UoKTsKIAogICAgICAgICBib29sIGF1dG9XcmFwID0gUmVuZGVyU3R5bGU6OmF1dG9XcmFwKGN1
cnJXUyk7CkBAIC0yNzYxLDE2ICsyNzY0LDE2IEBAIElubGluZUl0ZXJhdG9yIExpbmVCcmVha2Vy
OjpuZXh0U2VnbWVudEIKICAgICAgICAgICAgICAgICAvLyBBIDxicj4gd2l0aCBjbGVhcmFuY2Ug
YWx3YXlzIG5lZWRzIGEgbGluZWJveCBpbiBjYXNlIHRoZSBsaW5lcyBiZWxvdyBpdCBnZXQgZGly
dGllZCBsYXRlciBhbmQgCiAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBjaGVjayBmb3IgZmxv
YXRzIHRvIGNsZWFyIC0gc28gaWYgd2UncmUgaWdub3Jpbmcgc3BhY2VzLCBzdG9wIGlnbm9yaW5n
IHRoZW0gYW5kIGFkZCBhCiAgICAgICAgICAgICAgICAgLy8gcnVuIGZvciB0aGlzIG9iamVjdC4K
LSAgICAgICAgICAgICAgICBpZiAoaWdub3JpbmdTcGFjZXMgJiYgY3VycmVudFN0eWxlLT5jbGVh
cigpICE9IENOT05FKQorICAgICAgICAgICAgICAgIGlmIChpZ25vcmluZ1NwYWNlcyAmJiBjdXJy
ZW50U3R5bGUuY2xlYXIoKSAhPSBDTk9ORSkKICAgICAgICAgICAgICAgICAgICAgZW5zdXJlTGlu
ZUJveEluc2lkZUlnbm9yZWRTcGFjZXMobGluZU1pZHBvaW50U3RhdGUsIGN1cnJlbnQubV9vYmop
OwogICAgICAgICAgICAgICAgIC8vIElmIHdlIHdlcmUgcHJlY2VkZWQgYnkgY29sbGFwc2luZyBz
cGFjZSBhbmQgYXJlIGluIGEgcmlnaHQtYWxpZ25lZCBjb250YWluZXIgd2UgbmVlZCB0byBlbnN1
cmUgdGhlIHNwYWNlIGdldHMKICAgICAgICAgICAgICAgICAvLyBjb2xsYXBzZWQgYXdheSBzbyB0
aGF0IGl0IGRvZXNuJ3QgcHVzaCB0aGUgdGV4dCBvdXQgZnJvbSB0aGUgY29udGFpbmVyJ3Mgcmln
aHQtaGFuZCBlZGdlLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0aGlzIHJlZ2FyZGxl
c3Mgb2YgdGhlIGNvbnRhaW5lcidzIGFsaWdubWVudCAtIHdpbGwgcmVxdWlyZSByZWJhc2VsaW5p
bmcgYSBsb3Qgb2YgdGVzdCByZXN1bHRzLgotICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlnbm9y
aW5nU3BhY2VzICYmIChibG9ja1N0eWxlLT50ZXh0QWxpZ24oKSA9PSBSSUdIVCB8fCBibG9ja1N0
eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfUklHSFQpKQorICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGlnbm9yaW5nU3BhY2VzICYmIChibG9ja1N0eWxlLnRleHRBbGlnbigpID09IFJJR0hUIHx8
IGJsb2NrU3R5bGUudGV4dEFsaWduKCkgPT0gV0VCS0lUX1JJR0hUKSkKICAgICAgICAgICAgICAg
ICAgICAgc3RvcElnbm9yaW5nU3BhY2VzKGxpbmVNaWRwb2ludFN0YXRlLCBJbmxpbmVJdGVyYXRv
cigwLCBjdXJyZW50Lm1fb2JqLCBjdXJyZW50Lm1fcG9zKSk7CiAKICAgICAgICAgICAgICAgICBp
ZiAoIWxpbmVJbmZvLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9jbGVhciA9IGN1
cnJlbnRTdHlsZS0+Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jbGVhciA9IGN1cnJl
bnRTdHlsZS5jbGVhcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgZ290byBlbmQ7CiAg
ICAgICAgIH0KQEAgLTI4MzUsNyArMjgzOCw3IEBAIElubGluZUl0ZXJhdG9yIExpbmVCcmVha2Vy
OjpuZXh0U2VnbWVudEIKICAgICAgICAgICAgICAgICBpZiAoaWdub3JpbmdTcGFjZXMpIHsKICAg
ICAgICAgICAgICAgICAgICAgdHJhaWxpbmdPYmplY3RzLmNsZWFyKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKGxpbmVNaWRwb2ludFN0YXRl
LCBjdXJyZW50Lm1fb2JqKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJsb2NrU3R5bGUt
PmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHJlc29sdmVyLnBvc2l0aW9uKCkubV9vYmogPT0gY3Vy
cmVudC5tX29iagorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmxvY2tTdHlsZS5jb2xsYXBz
ZVdoaXRlU3BhY2UoKSAmJiByZXNvbHZlci5wb3NpdGlvbigpLm1fb2JqID09IGN1cnJlbnQubV9v
YmoKICAgICAgICAgICAgICAgICAgICAgJiYgc2hvdWxkU2tpcFdoaXRlc3BhY2VBZnRlclN0YXJ0
T2JqZWN0KG1fYmxvY2ssIGN1cnJlbnQubV9vYmosIGxpbmVNaWRwb2ludFN0YXRlKSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBMaWtlIHdpdGggbGlzdCBtYXJrZXJzLCB3ZSBzdGFydCBpZ25v
cmluZyBzcGFjZXMgdG8gbWFrZSBzdXJlIHRoYXQgYW55CiAgICAgICAgICAgICAgICAgICAgIC8v
IGFkZGl0aW9uYWwgc3BhY2VzIHdlIHNlZSB3aWxsIGJlIGRpc2NhcmRlZC4KQEAgLTI4NzEsNyAr
Mjg3NCw3IEBAIElubGluZUl0ZXJhdG9yIExpbmVCcmVha2VyOjpuZXh0U2VnbWVudEIKICAgICAg
ICAgICAgIC8vIGl0ZW0sIHRoZW4gdGhpcyBpcyBhbGwgbW9vdC4KICAgICAgICAgICAgIExheW91
dFVuaXQgcmVwbGFjZWRMb2dpY2FsV2lkdGggPSBtX2Jsb2NrLT5sb2dpY2FsV2lkdGhGb3JDaGls
ZChyZXBsYWNlZEJveCkgKyBtX2Jsb2NrLT5tYXJnaW5TdGFydEZvckNoaWxkKHJlcGxhY2VkQm94
KSArIG1fYmxvY2stPm1hcmdpbkVuZEZvckNoaWxkKHJlcGxhY2VkQm94KSArIGlubGluZUxvZ2lj
YWxXaWR0aChjdXJyZW50Lm1fb2JqKTsKICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fb2JqLT5p
c0xpc3RNYXJrZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChibG9ja1N0eWxlLT5jb2xsYXBz
ZVdoaXRlU3BhY2UoKSAmJiBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhcnRPYmplY3QobV9i
bG9jaywgY3VycmVudC5tX29iaiwgbGluZU1pZHBvaW50U3RhdGUpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGJsb2NrU3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgc2hvdWxkU2tpcFdoaXRl
c3BhY2VBZnRlclN0YXJ0T2JqZWN0KG1fYmxvY2ssIGN1cnJlbnQubV9vYmosIGxpbmVNaWRwb2lu
dFN0YXRlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBMaWtlIHdpdGggaW5saW5lIGZsb3dz
LCB3ZSBzdGFydCBpZ25vcmluZyBzcGFjZXMgdG8gbWFrZSBzdXJlIHRoYXQgYW55CiAgICAgICAg
ICAgICAgICAgICAgIC8vIGFkZGl0aW9uYWwgc3BhY2VzIHdlIHNlZSB3aWxsIGJlIGRpc2NhcmRl
ZC4KICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcklzU3BhY2UgPSB0cnVlOwpA
QCAtMjkxMiwyNCArMjkxNSwyNCBAQCBJbmxpbmVJdGVyYXRvciBMaW5lQnJlYWtlcjo6bmV4dFNl
Z21lbnRCCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBS
ZW5kZXJTdHlsZSYgc3R5bGUgPSBsaW5lU3R5bGUoKnQtPnBhcmVudCgpLCBsaW5lSW5mbyk7Cisg
ICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBsaW5lU3R5bGUoKnQtPnBhcmVu
dCgpLCBsaW5lSW5mbyk7CiAgICAgICAgICAgICBjb25zdCBGb250JiBmID0gc3R5bGUuZm9udCgp
OwogICAgICAgICAgICAgYm9vbCBpc0ZpeGVkUGl0Y2ggPSBmLmlzRml4ZWRQaXRjaCgpOwogICAg
ICAgICAgICAgYm9vbCBjYW5IeXBoZW5hdGUgPSBzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuc0F1
dG8gJiYgV2ViQ29yZTo6Y2FuSHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgpKTsKIAogICAgICAgICAg
ICAgdW5zaWduZWQgbGFzdFNwYWNlID0gY3VycmVudC5tX3BvczsKLSAgICAgICAgICAgIGZsb2F0
IHdvcmRTcGFjaW5nID0gY3VycmVudFN0eWxlLT53b3JkU3BhY2luZygpOworICAgICAgICAgICAg
ZmxvYXQgd29yZFNwYWNpbmcgPSBjdXJyZW50U3R5bGUud29yZFNwYWNpbmcoKTsKICAgICAgICAg
ICAgIGZsb2F0IGxhc3RTcGFjZVdvcmRTcGFjaW5nID0gMDsKICAgICAgICAgICAgIGZsb2F0IHdv
cmRTcGFjaW5nRm9yV29yZE1lYXN1cmVtZW50ID0gMDsKIAogICAgICAgICAgICAgZmxvYXQgd3Jh
cFcgPSB3aWR0aC51bmNvbW1pdHRlZFdpZHRoKCkgKyBpbmxpbmVMb2dpY2FsV2lkdGgoY3VycmVu
dC5tX29iaiwgIWFwcGxpZWRTdGFydFdpZHRoLCB0cnVlKTsKICAgICAgICAgICAgIGZsb2F0IGNo
YXJXaWR0aCA9IDA7Ci0gICAgICAgICAgICBib29sIGJyZWFrTkJTUCA9IGF1dG9XcmFwICYmIGN1
cnJlbnRTdHlsZS0+bmJzcE1vZGUoKSA9PSBTUEFDRTsKKyAgICAgICAgICAgIGJvb2wgYnJlYWtO
QlNQID0gYXV0b1dyYXAgJiYgY3VycmVudFN0eWxlLm5ic3BNb2RlKCkgPT0gU1BBQ0U7CiAgICAg
ICAgICAgICAvLyBBdXRvLXdyYXBwaW5nIHRleHQgc2hvdWxkIHdyYXAgaW4gdGhlIG1pZGRsZSBv
ZiBhIHdvcmQgb25seSBpZiBpdCBjb3VsZCBub3Qgd3JhcCBiZWZvcmUgdGhlIHdvcmQsCiAgICAg
ICAgICAgICAvLyB3aGljaCBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZSB3b3JkIGlzIHRoZSBmaXJz
dCB0aGluZyBvbiB0aGUgbGluZSwgdGhhdCBpcywgaWYgfHd8IGlzIHplcm8uCi0gICAgICAgICAg
ICBib29sIGJyZWFrV29yZHMgPSBjdXJyZW50U3R5bGUtPmJyZWFrV29yZHMoKSAmJiAoKGF1dG9X
cmFwICYmICF3aWR0aC5jb21taXR0ZWRXaWR0aCgpKSB8fCBjdXJyV1MgPT0gUFJFKTsKKyAgICAg
ICAgICAgIGJvb2wgYnJlYWtXb3JkcyA9IGN1cnJlbnRTdHlsZS5icmVha1dvcmRzKCkgJiYgKChh
dXRvV3JhcCAmJiAhd2lkdGguY29tbWl0dGVkV2lkdGgoKSkgfHwgY3VycldTID09IFBSRSk7CiAg
ICAgICAgICAgICBib29sIG1pZFdvcmRCcmVhayA9IGZhbHNlOwotICAgICAgICAgICAgYm9vbCBi
cmVha0FsbCA9IGN1cnJlbnRTdHlsZS0+d29yZEJyZWFrKCkgPT0gQnJlYWtBbGxXb3JkQnJlYWsg
JiYgYXV0b1dyYXA7CisgICAgICAgICAgICBib29sIGJyZWFrQWxsID0gY3VycmVudFN0eWxlLndv
cmRCcmVhaygpID09IEJyZWFrQWxsV29yZEJyZWFrICYmIGF1dG9XcmFwOwogICAgICAgICAgICAg
ZmxvYXQgaHlwaGVuV2lkdGggPSAwOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgICAgICBpZiAo
aXNTVkdUZXh0KSB7CkBAIC0yOTU0LDcgKzI5NTcsNyBAQCBJbmxpbmVJdGVyYXRvciBMaW5lQnJl
YWtlcjo6bmV4dFNlZ21lbnRCCiAgICAgICAgICAgICAvLyBOb24temVybyBvbmx5IHdoZW4ga2Vy
bmluZyBpcyBlbmFibGVkIGFuZCBUZXh0TGF5b3V0IGlzbid0IHVzZWQsIGluIHdoaWNoIGNhc2Ug
d2UgbWVhc3VyZQogICAgICAgICAgICAgLy8gd29yZHMgd2l0aCB0aGVpciB0cmFpbGluZyBzcGFj
ZSwgdGhlbiBzdWJ0cmFjdCBpdHMgd2lkdGguCiAgICAgICAgICAgICBIYXNoU2V0PGNvbnN0IFNp
bXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKLSAgICAgICAgICAgIGZsb2F0IHdvcmRUcmFp
bGluZ1NwYWNlV2lkdGggPSAoZi50eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiBLZXJuaW5nKSAmJiAh
dGV4dExheW91dCA/IGYud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odCwgZiwg
JnNwYWNlLCAxLCAmc3R5bGUpLCAmZmFsbGJhY2tGb250cykgKyB3b3JkU3BhY2luZyA6IDA7Cisg
ICAgICAgICAgICBmbG9hdCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gKGYudHlwZXNldHRpbmdG
ZWF0dXJlcygpICYgS2VybmluZykgJiYgIXRleHRMYXlvdXQgPyBmLndpZHRoKFJlbmRlckJsb2Nr
Ojpjb25zdHJ1Y3RUZXh0UnVuKHQsIGYsICZzcGFjZSwgMSwgc3R5bGUpLCAmZmFsbGJhY2tGb250
cykgKyB3b3JkU3BhY2luZyA6IDA7CiAKICAgICAgICAgICAgIFVDaGFyIGxhc3RDaGFyYWN0ZXIg
PSByZW5kZXJUZXh0SW5mby5tX2xpbmVCcmVha0l0ZXJhdG9yLmxhc3RDaGFyYWN0ZXIoKTsKICAg
ICAgICAgICAgIFVDaGFyIHNlY29uZFRvTGFzdENoYXJhY3RlciA9IHJlbmRlclRleHRJbmZvLm1f
bGluZUJyZWFrSXRlcmF0b3Iuc2Vjb25kVG9MYXN0Q2hhcmFjdGVyKCk7CkBAIC0zMDQ2LDcgKzMw
NDksNyBAQCBJbmxpbmVJdGVyYXRvciBMaW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBicmVhayBvbmx5IGFmdGVyIHdoaXRlLXNwYWNlLCBj
b25zaWRlciB0aGUgY3VycmVudCBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IGFzIGNhbmRpZGF0ZSB3aWR0aCBmb3IgdGhpcyBsaW5lLgogICAgICAgICAgICAgICAgICAgICAg
ICAgYm9vbCBsaW5lV2FzVG9vV2lkZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKHdpZHRoLmZpdHNPbkxpbmUoKSAmJiBjdXJyZW50Q2hhcmFjdGVySXNXUyAmJiBjdXJyZW50
U3R5bGUtPmJyZWFrT25seUFmdGVyV2hpdGVTcGFjZSgpICYmICFtaWRXb3JkQnJlYWspIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aC5maXRzT25MaW5lKCkgJiYgY3VycmVudENo
YXJhY3RlcklzV1MgJiYgY3VycmVudFN0eWxlLmJyZWFrT25seUFmdGVyV2hpdGVTcGFjZSgpICYm
ICFtaWRXb3JkQnJlYWspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBjaGFy
V2lkdGggPSB0ZXh0V2lkdGgodCwgY3VycmVudC5tX3BvcywgMSwgZiwgd2lkdGguY3VycmVudFdp
ZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VXaGl0ZVNwYWNlLCB3b3JkTWVhc3VyZW1lbnQu
ZmFsbGJhY2tGb250cywgdGV4dExheW91dCkgKyAoYXBwbHlXb3JkU3BhY2luZyA/IHdvcmRTcGFj
aW5nIDogMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgaWYgbGluZSBp
cyB0b28gYmlnIGV2ZW4gd2l0aG91dCB0aGUgZXh0cmEgc3BhY2UKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiBJZiBpdCBpcyBub3QsIGRvIG5v
dGhpbmcuCkBAIC0zMDYxLDcgKzMwNjQsNyBAQCBJbmxpbmVJdGVyYXRvciBMaW5lQnJlYWtlcjo6
bmV4dFNlZ21lbnRCCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobGluZVdhc1Rvb1dpZGUgfHwgIXdpZHRoLmZpdHNPbkxpbmUoKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5IeXBoZW5hdGUgJiYgIXdpZHRoLmZpdHNP
bkxpbmUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnlIeXBoZW5hdGlu
Zyh0LCBmLCBzdHlsZS5sb2NhbGUoKSwgY29uc2VjdXRpdmVIeXBoZW5hdGVkTGluZXMsIGJsb2Nr
U3R5bGUtPmh5cGhlbmF0aW9uTGltaXRMaW5lcygpLCBzdHlsZS5oeXBoZW5hdGlvbkxpbWl0QmVm
b3JlKCksIHN0eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigpLCBsYXN0U3BhY2UsIGN1cnJlbnQu
bV9wb3MsIHdpZHRoLmN1cnJlbnRXaWR0aCgpIC0gYWRkaXRpb25hbFRlbXBXaWR0aCwgd2lkdGgu
YXZhaWxhYmxlV2lkdGgoKSwgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3BhY2UsIGxhc3RT
cGFjZVdvcmRTcGFjaW5nLCBsQnJlYWssIGN1cnJlbnQubV9uZXh0QnJlYWthYmxlUG9zaXRpb24s
IG1faHlwaGVuYXRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeUh5cGhl
bmF0aW5nKHQsIGYsIHN0eWxlLmxvY2FsZSgpLCBjb25zZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywg
YmxvY2tTdHlsZS5oeXBoZW5hdGlvbkxpbWl0TGluZXMoKSwgc3R5bGUuaHlwaGVuYXRpb25MaW1p
dEJlZm9yZSgpLCBzdHlsZS5oeXBoZW5hdGlvbkxpbWl0QWZ0ZXIoKSwgbGFzdFNwYWNlLCBjdXJy
ZW50Lm1fcG9zLCB3aWR0aC5jdXJyZW50V2lkdGgoKSAtIGFkZGl0aW9uYWxUZW1wV2lkdGgsIHdp
ZHRoLmF2YWlsYWJsZVdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VXaGl0ZVNwYWNlLCBs
YXN0U3BhY2VXb3JkU3BhY2luZywgbEJyZWFrLCBjdXJyZW50Lm1fbmV4dEJyZWFrYWJsZVBvc2l0
aW9uLCBtX2h5cGhlbmF0ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
bV9oeXBoZW5hdGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBl
bmQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzEyNCw3ICszMTI3LDcgQEAg
SW5saW5lSXRlcmF0b3IgTGluZUJyZWFrZXI6Om5leHRTZWdtZW50QgogICAgICAgICAgICAgICAg
ICAgICAgICAgbGFzdFNwYWNlID0gY3VycmVudC5tX3BvczsKICAgICAgICAgICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JpbmdTcGFjZXMgJiYgY3VycmVudFN0
eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWln
bm9yaW5nU3BhY2VzICYmIGN1cnJlbnRTdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSkgewogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIGEgbmV3bGluZSwgb3IgaWYg
d2UgZW5jb3VudGVyIGEKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNlY29uZCBzcGFjZSwg
d2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgYnJlYWsgdXAgdGhpcwogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gcnVuIGFuZCBlbnRlciBhIG1vZGUgd2hlcmUgd2Ugc3RhcnQgY29sbGFwc2luZyBz
cGFjZXMuCkBAIC0zMTYyLDcgKzMxNjUsNyBAQCBJbmxpbmVJdGVyYXRvciBMaW5lQnJlYWtlcjo6
bmV4dFNlZ21lbnRCCiAgICAgICAgICAgICAgICAgICAgIC8vIFNwYWNlcyBhZnRlciByaWdodC1h
bGlnbmVkIHRleHQgYW5kIGJlZm9yZSBhIGxpbmUtYnJlYWsgZ2V0IGNvbGxhcHNlZCBhd2F5IGNv
bXBsZXRlbHkgc28gdGhhdCB0aGUgdHJhaWxpbmcKICAgICAgICAgICAgICAgICAgICAgLy8gc3Bh
Y2UgZG9lc24ndCBzZWVtIHRvIHB1c2ggdGhlIHRleHQgb3V0IGZyb20gdGhlIHJpZ2h0LWhhbmQg
ZWRnZS4KICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMgcmVnYXJkbGVzcyBv
ZiB0aGUgY29udGFpbmVyJ3MgYWxpZ25tZW50IC0gd2lsbCByZXF1aXJlIHJlYmFzZWxpbmluZyBh
IGxvdCBvZiB0ZXN0IHJlc3VsdHMuCi0gICAgICAgICAgICAgICAgICAgIGlmIChuZXh0ICYmIG5l
eHQtPmlzQlIoKSAmJiAoYmxvY2tTdHlsZS0+dGV4dEFsaWduKCkgPT0gUklHSFQgfHwgYmxvY2tT
dHlsZS0+dGV4dEFsaWduKCkgPT0gV0VCS0lUX1JJR0hUKSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAobmV4dCAmJiBuZXh0LT5pc0JSKCkgJiYgKGJsb2NrU3R5bGUudGV4dEFsaWduKCkgPT0g
UklHSFQgfHwgYmxvY2tTdHlsZS50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfUklHSFQpKSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZ25vcmVTdGFydC5tX3Bvcy0tOwogICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gSWYgdGhlcmUncyBqdXN0IGEgc2luZ2xlIHRyYWlsaW5nIHNwYWNlIHN0YXJ0
IGlnbm9yaW5nIGl0IG5vdyBzbyBpdCBjb2xsYXBzZXMgYXdheS4KICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChjdXJyZW50Lm1fcG9zID09IHQtPnRleHRMZW5ndGgoKSAtIDEpCkBAIC0zMTcx
LDEzICszMTc0LDEzIEBAIElubGluZUl0ZXJhdG9yIExpbmVCcmVha2VyOjpuZXh0U2VnbWVudEIK
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnRDaGFyYWN0
ZXJJc1dTICYmIHByZXZpb3VzQ2hhcmFjdGVySXNXUykgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoYXV0b1dyYXAgJiYgY3VycmVudFN0eWxlLT5icmVha09ubHlBZnRlcldoaXRlU3BhY2UoKSkK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9XcmFwICYmIGN1cnJlbnRTdHlsZS5icmVha09u
bHlBZnRlcldoaXRlU3BhY2UoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5tb3Zl
VG8oY3VycmVudC5tX29iaiwgY3VycmVudC5tX3BvcywgY3VycmVudC5tX25leHRCcmVha2FibGVQ
b3NpdGlvbik7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGNvbGxh
cHNlV2hpdGVTcGFjZSAmJiBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZSAmJiAhaWdub3JpbmdTcGFj
ZXMpCiAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nT2JqZWN0cy5zZXRUcmFpbGluZ1doaXRl
c3BhY2UodG9SZW5kZXJUZXh0KGN1cnJlbnQubV9vYmopKTsKLSAgICAgICAgICAgICAgICBlbHNl
IGlmICghY3VycmVudFN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSB8fCAhY3VycmVudENoYXJh
Y3RlcklzU3BhY2UpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWN1cnJlbnRTdHlsZS5jb2xs
YXBzZVdoaXRlU3BhY2UoKSB8fCAhY3VycmVudENoYXJhY3RlcklzU3BhY2UpCiAgICAgICAgICAg
ICAgICAgICAgIHRyYWlsaW5nT2JqZWN0cy5jbGVhcigpOwogCiAgICAgICAgICAgICAgICAgYXRT
dGFydCA9IGZhbHNlOwpAQCAtMzIxMyw3ICszMjE2LDcgQEAgSW5saW5lSXRlcmF0b3IgTGluZUJy
ZWFrZXI6Om5leHRTZWdtZW50QgogCiAgICAgICAgICAgICBpZiAoIXdpZHRoLmZpdHNPbkxpbmUo
KSkgewogICAgICAgICAgICAgICAgIGlmIChjYW5IeXBoZW5hdGUpCi0gICAgICAgICAgICAgICAg
ICAgIHRyeUh5cGhlbmF0aW5nKHQsIGYsIHN0eWxlLmxvY2FsZSgpLCBjb25zZWN1dGl2ZUh5cGhl
bmF0ZWRMaW5lcywgYmxvY2tTdHlsZS0+aHlwaGVuYXRpb25MaW1pdExpbmVzKCksIHN0eWxlLmh5
cGhlbmF0aW9uTGltaXRCZWZvcmUoKSwgc3R5bGUuaHlwaGVuYXRpb25MaW1pdEFmdGVyKCksIGxh
c3RTcGFjZSwgY3VycmVudC5tX3Bvcywgd2lkdGguY3VycmVudFdpZHRoKCkgLSBhZGRpdGlvbmFs
VGVtcFdpZHRoLCB3aWR0aC5hdmFpbGFibGVXaWR0aCgpLCBpc0ZpeGVkUGl0Y2gsIGNvbGxhcHNl
V2hpdGVTcGFjZSwgbGFzdFNwYWNlV29yZFNwYWNpbmcsIGxCcmVhaywgY3VycmVudC5tX25leHRC
cmVha2FibGVQb3NpdGlvbiwgbV9oeXBoZW5hdGVkKTsKKyAgICAgICAgICAgICAgICAgICAgdHJ5
SHlwaGVuYXRpbmcodCwgZiwgc3R5bGUubG9jYWxlKCksIGNvbnNlY3V0aXZlSHlwaGVuYXRlZExp
bmVzLCBibG9ja1N0eWxlLmh5cGhlbmF0aW9uTGltaXRMaW5lcygpLCBzdHlsZS5oeXBoZW5hdGlv
bkxpbWl0QmVmb3JlKCksIHN0eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigpLCBsYXN0U3BhY2Us
IGN1cnJlbnQubV9wb3MsIHdpZHRoLmN1cnJlbnRXaWR0aCgpIC0gYWRkaXRpb25hbFRlbXBXaWR0
aCwgd2lkdGguYXZhaWxhYmxlV2lkdGgoKSwgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRlU3Bh
Y2UsIGxhc3RTcGFjZVdvcmRTcGFjaW5nLCBsQnJlYWssIGN1cnJlbnQubV9uZXh0QnJlYWthYmxl
UG9zaXRpb24sIG1faHlwaGVuYXRlZCk7CiAKICAgICAgICAgICAgICAgICBpZiAoIW1faHlwaGVu
YXRlZCAmJiBsQnJlYWsucHJldmlvdXNJblNhbWVOb2RlKCkgPT0gc29mdEh5cGhlbiAmJiBzdHls
ZS5oeXBoZW5zKCkgIT0gSHlwaGVuc05vbmUpCiAgICAgICAgICAgICAgICAgICAgIG1faHlwaGVu
YXRlZCA9IHRydWU7CkBAIC0zMjI5LDcgKzMyMzIsNyBAQCBJbmxpbmVJdGVyYXRvciBMaW5lQnJl
YWtlcjo6bmV4dFNlZ21lbnRCCiAgICAgICAgIGJvb2wgY2FuQnJlYWtIZXJlID0gY2FuQnJlYWtB
dFRoaXNQb3NpdGlvbihhdXRvV3JhcCwgd2lkdGgsIGxCcmVhaywgbmV4dCwgY3VycmVudCwgY3Vy
cldTLCBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZSwgYXV0b1dyYXBXYXNFdmVyVHJ1ZU9uTGluZSk7
CiAgICAgICAgIGlmIChjYW5CcmVha0hlcmUgJiYgIXdpZHRoLmZpdHNPbkxpbmUoaWdub3JpbmdT
cGFjZXMpKSB7CiAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGZsb2F0cywgdHJ5IHRvIGdldCBi
ZWxvdyB0aGVtLgotICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlICYmICFp
Z25vcmluZ1NwYWNlcyAmJiBjdXJyZW50U3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpKQorICAg
ICAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlICYmICFpZ25vcmluZ1NwYWNlcyAm
JiBjdXJyZW50U3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkpCiAgICAgICAgICAgICAgICAgdHJh
aWxpbmdPYmplY3RzLmNsZWFyKCk7CiAKICAgICAgICAgICAgIGlmICh3aWR0aC5jb21taXR0ZWRX
aWR0aCgpKQpAQCAtMzI0Miw3ICszMjQ1LDcgQEAgSW5saW5lSXRlcmF0b3IgTGluZUJyZWFrZXI6
Om5leHRTZWdtZW50QgogICAgICAgICAgICAgLy8gdGhlIGVuZCBsYWJlbCBpZiB3ZSBzdGlsbCBk
b24ndCBmaXQgb24gdGhlIGxpbmUuIC1kd2gKICAgICAgICAgICAgIGlmICghd2lkdGguZml0c09u
TGluZShpZ25vcmluZ1NwYWNlcykpCiAgICAgICAgICAgICAgICAgZ290byBlbmQ7Ci0gICAgICAg
IH0gZWxzZSBpZiAoYmxvY2tTdHlsZS0+YXV0b1dyYXAoKSAmJiAhd2lkdGguZml0c09uTGluZSgp
ICYmICF3aWR0aC5jb21taXR0ZWRXaWR0aCgpKSB7CisgICAgICAgIH0gZWxzZSBpZiAoYmxvY2tT
dHlsZS5hdXRvV3JhcCgpICYmICF3aWR0aC5maXRzT25MaW5lKCkgJiYgIXdpZHRoLmNvbW1pdHRl
ZFdpZHRoKCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBjb250YWluZXIgYXV0b3dyYXBzIGJ1
dCB0aGUgY3VycmVudCBjaGlsZCBkb2VzIG5vdCB0aGVuIHdlIHN0aWxsIG5lZWQgdG8gZW5zdXJl
IHRoYXQgaXQKICAgICAgICAgICAgIC8vIHdyYXBzIGFuZCBtb3ZlcyBiZWxvdyBhbnkgZmxvYXRz
LgogICAgICAgICAgICAgd2lkdGguZml0QmVsb3dGbG9hdHMoKTsKQEAgLTMyNzgsNyArMzI4MSw3
IEBAIElubGluZUl0ZXJhdG9yIExpbmVCcmVha2VyOjpuZXh0U2VnbWVudEIKICAgICAgICAgaWYg
KGxCcmVhayA9PSByZXNvbHZlci5wb3NpdGlvbigpKSB7CiAgICAgICAgICAgICBpZiAoIWxCcmVh
ay5tX29iaiB8fCAhbEJyZWFrLm1fb2JqLT5pc0JSKCkpIHsKICAgICAgICAgICAgICAgICAvLyB3
ZSBqdXN0IGFkZCBhcyBtdWNoIGFzIHBvc3NpYmxlCi0gICAgICAgICAgICAgICAgaWYgKGJsb2Nr
U3R5bGUtPndoaXRlU3BhY2UoKSA9PSBQUkUgJiYgIWN1cnJlbnQubV9wb3MpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYmxvY2tTdHlsZS53aGl0ZVNwYWNlKCkgPT0gUFJFICYmICFjdXJyZW50Lm1f
cG9zKSB7CiAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5tb3ZlVG8obGFzdCwgbGFzdC0+aXNU
ZXh0KCkgPyBsYXN0LT5sZW5ndGgoKSA6IDApOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAo
bEJyZWFrLm1fb2JqKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0IGV2ZXIgYnJlYWsg
aW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQgaWYgd2UgY2FuIGhlbHAgaXQuCkBAIC0zMzY2LDggKzMz
NjksOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjaGVja0xpbmVzRm9yVGV4dE92ZXJmCiAgICAgY29u
c3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEF0b21pY1N0cmluZywgZWxsaXBzaXNTdHIsICgmaG9yaXpvbnRhbEVsbGlwc2lzLCAxKSk7CiAg
ICAgY29uc3QgRm9udCYgZmlyc3RMaW5lRm9udCA9IGZpcnN0TGluZVN0eWxlKCktPmZvbnQoKTsK
LSAgICBpbnQgZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA9IGZpcnN0TGluZUZvbnQud2lkdGgoY29u
c3RydWN0VGV4dFJ1bih0aGlzLCBmaXJzdExpbmVGb250LCAmaG9yaXpvbnRhbEVsbGlwc2lzLCAx
LCBmaXJzdExpbmVTdHlsZSgpKSk7Ci0gICAgaW50IGVsbGlwc2lzV2lkdGggPSAoZm9udCA9PSBm
aXJzdExpbmVGb250KSA/IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggOiBmb250LndpZHRoKGNvbnN0
cnVjdFRleHRSdW4odGhpcywgZm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwgc3R5bGUoKSkp
OworICAgIGludCBmaXJzdExpbmVFbGxpcHNpc1dpZHRoID0gZmlyc3RMaW5lRm9udC53aWR0aChj
b25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZpcnN0TGluZUZvbnQsICZob3Jpem9udGFsRWxsaXBzaXMs
IDEsICpmaXJzdExpbmVTdHlsZSgpKSk7CisgICAgaW50IGVsbGlwc2lzV2lkdGggPSAoZm9udCA9
PSBmaXJzdExpbmVGb250KSA/IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggOiBmb250LndpZHRoKGNv
bnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgJmhvcml6b250YWxFbGxpcHNpcywgMSwgKnN0eWxl
KCkpKTsKIAogICAgIC8vIEZvciBMVFIgdGV4dCB0cnVuY2F0aW9uLCB3ZSB3YW50IHRvIGdldCB0
aGUgcmlnaHQgZWRnZSBvZiBvdXIgcGFkZGluZyBib3gsIGFuZCB0aGVuIHdlIHdhbnQgdG8gc2Vl
CiAgICAgLy8gaWYgdGhlIHJpZ2h0IGVkZ2Ugb2YgYSBsaW5lIGJveCBleGNlZWRzIHRoYXQuICBG
b3IgUlRMLCB3ZSB1c2UgdGhlIGxlZnQgZWRnZSBvZiB0aGUgcGFkZGluZyBib3ggYW5kCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5lVGV4dC5jcHAJKHJl
dmlzaW9uIDE1NjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5l
VGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIFJlbmRlckNv
bWJpbmVUZXh0Ojpjb21iaW5lVGV4dCgpCiAgICAgaWYgKHN0eWxlKCktPmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRleHRSdW4gcnVuID0gUmVuZGVy
QmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgb3JpZ2luYWxGb250KCksIHRoaXMsIHN0eWxl
KCkpOworICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhp
cywgb3JpZ2luYWxGb250KCksIHRoaXMsICpzdHlsZSgpKTsKICAgICBGb250RGVzY3JpcHRpb24g
ZGVzY3JpcHRpb24gPSBvcmlnaW5hbEZvbnQoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmbG9h
dCBlbVdpZHRoID0gZGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiB0ZXh0Q29tYmluZU1hcmdp
bjsKICAgICBib29sIHNob3VsZFVwZGF0ZUZvbnQgPSBmYWxzZTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3gu
Y3BwCShyZXZpc2lvbiAxNTY2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxNSwxMCArMTAx
NSwxMCBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6YXBwbHlMCiAgICAgICAg
IExheW91dFVuaXQgdG90YWxXaWR0aDsKICAgICAgICAgSW5saW5lQm94KiBhbmNob3JCb3ggPSBs
YXN0TGluZS0+bGFzdENoaWxkKCk7CiAgICAgICAgIGlmIChhbmNob3JCb3ggJiYgYW5jaG9yQm94
LT5yZW5kZXJlcigpLnN0eWxlKCktPmlzTGluaygpKQotICAgICAgICAgICAgdG90YWxXaWR0aCA9
IGFuY2hvckJveC0+bG9naWNhbFdpZHRoKCkgKyBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4o
dGhpcywgZm9udCwgZWxsaXBzaXNBbmRTcGFjZSwgMiwgc3R5bGUoKSkpOworICAgICAgICAgICAg
dG90YWxXaWR0aCA9IGFuY2hvckJveC0+bG9naWNhbFdpZHRoKCkgKyBmb250LndpZHRoKGNvbnN0
cnVjdFRleHRSdW4odGhpcywgZm9udCwgZWxsaXBzaXNBbmRTcGFjZSwgMiwgKnN0eWxlKCkpKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBhbmNob3JCb3ggPSAwOwotICAgICAgICAgICAg
dG90YWxXaWR0aCA9IGZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCAmaG9y
aXpvbnRhbEVsbGlwc2lzLCAxLCBzdHlsZSgpKSk7CisgICAgICAgICAgICB0b3RhbFdpZHRoID0g
Zm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsICZob3Jpem9udGFsRWxsaXBz
aXMsIDEsICpzdHlsZSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBTZWUgaWYgdGhpcyB3
aWR0aCBjYW4gYmUgYWNjb21tb2RhdGVkIG9uIHRoZSBsYXN0IHZpc2libGUgbGluZQpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wuY3BwCShyZXZpc2lvbiAxNTY2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDcg
QEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogICAgIGlmIChwYWlu
dEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKICAgICAgICAgY29uc3QgU3Ry
aW5nJiBkaXNwbGF5ZWRGaWxlbmFtZSA9IGZpbGVUZXh0VmFsdWUoKTsKICAgICAgICAgY29uc3Qg
Rm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKLSAgICAgICAgVGV4dFJ1biB0ZXh0UnVuID0g
Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBkaXNwbGF5ZWRGaWxlbmFtZSwgc3R5bGUoKSwg
VGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgUmVzcGVjdERpcmVjdGlvbiB8IFJlc3Bl
Y3REaXJlY3Rpb25PdmVycmlkZSk7CisgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IGNvbnN0cnVj
dFRleHRSdW4odGhpcywgZm9udCwgZGlzcGxheWVkRmlsZW5hbWUsICpzdHlsZSgpLCBUZXh0UnVu
OjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uLCBSZXNwZWN0RGlyZWN0aW9uIHwgUmVzcGVjdERpcmVj
dGlvbk92ZXJyaWRlKTsKICAgICAgICAgdGV4dFJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwog
CiAgICAgICAgIC8vIERldGVybWluZSB3aGVyZSB0aGUgZmlsZW5hbWUgc2hvdWxkIGJlIHBsYWNl
ZApAQCAtMTc4LDEwICsxNzgsMTAgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y29t
cHV0ZUludAogICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CiAgICAgLy8g
RklYTUU6IFJlbW92ZSB0aGUgbmVlZCBmb3IgdGhpcyBjb25zdF9jYXN0IGJ5IG1ha2luZyBjb25z
dHJ1Y3RUZXh0UnVuIHRha2UgYSBjb25zdCBSZW5kZXJPYmplY3QqLgogICAgIFJlbmRlckZpbGVV
cGxvYWRDb250cm9sKiByZW5kZXJlciA9IGNvbnN0X2Nhc3Q8UmVuZGVyRmlsZVVwbG9hZENvbnRy
b2wqPih0aGlzKTsKLSAgICBmbG9hdCBtaW5EZWZhdWx0TGFiZWxXaWR0aCA9IGRlZmF1bHRXaWR0
aE51bUNoYXJzICogZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBmb250LCBj
aGFyYWN0ZXJBc1N0cmluZywgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
bikpOworICAgIGZsb2F0IG1pbkRlZmF1bHRMYWJlbFdpZHRoID0gZGVmYXVsdFdpZHRoTnVtQ2hh
cnMgKiBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZvbnQsIGNoYXJhY3Rl
ckFzU3RyaW5nLCAqc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbikpOwog
CiAgICAgY29uc3QgU3RyaW5nIGxhYmVsID0gdGhlbWUoKS0+ZmlsZUxpc3REZWZhdWx0TGFiZWwo
aW5wdXRFbGVtZW50KCkubXVsdGlwbGUoKSk7Ci0gICAgZmxvYXQgZGVmYXVsdExhYmVsV2lkdGgg
PSBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZvbnQsIGxhYmVsLCBzdHls
ZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSk7CisgICAgZmxvYXQgZGVmYXVs
dExhYmVsV2lkdGggPSBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZvbnQs
IGxhYmVsLCAqc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbikpOwogICAg
IGlmIChIVE1MSW5wdXRFbGVtZW50KiBidXR0b24gPSB1cGxvYWRCdXR0b24oKSkKICAgICAgICAg
aWYgKFJlbmRlck9iamVjdCogYnV0dG9uUmVuZGVyZXIgPSBidXR0b24tPnJlbmRlcmVyKCkpCiAg
ICAgICAgICAgICBkZWZhdWx0TGFiZWxXaWR0aCArPSBidXR0b25SZW5kZXJlci0+bWF4UHJlZmVy
cmVkTG9naWNhbFdpZHRoKCkgKyBhZnRlckJ1dHRvblNwYWNpbmc7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDE1NjYxMSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEy
Nyw3ICsxMjcsNyBAQCBib29sIFJlbmRlckltYWdlOjpzZXRJbWFnZVNpemVGb3JBbHRUZXh0CiAg
ICAgICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwog
CiAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAgICAgIElu
dFNpemUgcGFkZGVkVGV4dFNpemUocGFkZGluZ1dpZHRoICsgbWluKGNlaWxmKGZvbnQud2lkdGgo
UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV9hbHRUZXh0LCBzdHls
ZSgpKSkpLCBtYXhBbHRUZXh0V2lkdGgpLCBwYWRkaW5nSGVpZ2h0ICsgbWluKGZvbnQuZm9udE1l
dHJpY3MoKS5oZWlnaHQoKSwgbWF4QWx0VGV4dEhlaWdodCkpOworICAgICAgICBJbnRTaXplIHBh
ZGRlZFRleHRTaXplKHBhZGRpbmdXaWR0aCArIG1pbihjZWlsZihmb250LndpZHRoKFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIG1fYWx0VGV4dCwgKnN0eWxlKCkpKSks
IG1heEFsdFRleHRXaWR0aCksIHBhZGRpbmdIZWlnaHQgKyBtaW4oZm9udC5mb250TWV0cmljcygp
LmhlaWdodCgpLCBtYXhBbHRUZXh0SGVpZ2h0KSk7CiAgICAgICAgIGltYWdlU2l6ZSA9IGltYWdl
U2l6ZS5leHBhbmRlZFRvKHBhZGRlZFRleHRTaXplKTsKICAgICB9CiAKQEAgLTM5Miw3ICszOTIs
NyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAKICAgICAgICAg
ICAgICAgICAvLyBPbmx5IGRyYXcgdGhlIGFsdCB0ZXh0IGlmIGl0J2xsIGZpdCB3aXRoaW4gdGhl
IGNvbnRlbnQgYm94LAogICAgICAgICAgICAgICAgIC8vIGFuZCBvbmx5IGlmIGl0IGZpdHMgYWJv
dmUgdGhlIGVycm9yIGltYWdlLgotICAgICAgICAgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IFJl
bmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQsIHN0eWxlKCkpOwor
ICAgICAgICAgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQsICpzdHlsZSgpKTsKICAgICAgICAgICAgICAgICBMYXlv
dXRVbml0IHRleHRXaWR0aCA9IGZvbnQud2lkdGgodGV4dFJ1bik7CiAgICAgICAgICAgICAgICAg
aWYgKGVycm9yUGljdHVyZURyYXduKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh1c2FibGVX
aWR0aCA+PSB0ZXh0V2lkdGggJiYgZm9udE1ldHJpY3MuaGVpZ2h0KCkgPD0gaW1hZ2VPZmZzZXQu
aGVpZ2h0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RCb3gu
Y3BwCShyZXZpc2lvbiAxNTY2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBAQCB2b2lkIFJlbmRl
ckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgICAgIGlmICghdGV4dC5pc0Vt
cHR5KCkpIHsKICAgICAgICAgICAgICAgICBhcHBseVRleHRUcmFuc2Zvcm0oc3R5bGUoKSwgdGV4
dCwgJyAnKTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExU
Uj8gQ2FuJ3QgdGV4dCBkaXJlY3Rpb24gYWZmZWN0IHRoZSB3aWR0aD8KLSAgICAgICAgICAgICAg
ICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGl0ZW1Gb250LCB0ZXh0
LCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKTsKKyAgICAgICAgICAg
ICAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGl0ZW1Gb250LCB0
ZXh0LCAqc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbik7CiAgICAgICAg
ICAgICAgICAgdGV4dFJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogICAgICAgICAgICAgICAg
IGZsb2F0IHRleHRXaWR0aCA9IGl0ZW1Gb250LndpZHRoKHRleHRSdW4pOwogICAgICAgICAgICAg
ICAgIHdpZHRoID0gbWF4KHdpZHRoLCB0ZXh0V2lkdGgpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gMTU2NjExKQorKysg
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzM3LDcgKzEzMzcsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBh
aW50SW5mbyYgCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHls
ZSgpLT5mb250KCk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4odGhpcywgZm9udCwgbV90ZXh0LCBzdHlsZSgpKTsKKyAgICBUZXh0UnVuIHRleHRS
dW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBtX3RleHQsICpz
dHlsZSgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29u
dGV4dCwgZmFsc2UpOwogICAgIGlmICghc3R5bGUoKS0+aXNIb3Jpem9udGFsV3JpdGluZ01vZGUo
KSkgewpAQCAtMTM3MiwxMCArMTM3MiwxMCBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50
KFBhaW50SW5mbyYgCiAgICAgICAgICAgICBpbnQgd2lkdGggPSBmb250LndpZHRoKHRleHRSdW4p
OwogICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgdGV4dE9yaWdp
bik7CiAgICAgICAgICAgICBVQ2hhciBzdWZmaXhTcGFjZVsyXSA9IHsgc3VmZml4LCAnICcgfTsK
LSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHN1ZmZpeFNwYWNlLCAyLCBzdHlsZSgpKSwgdGV4dE9yaWdp
biArIEludFNpemUod2lkdGgsIDApKTsKKyAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KGZv
bnQsIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHN1ZmZpeFNwYWNl
LCAyLCAqc3R5bGUoKSksIHRleHRPcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAwKSk7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBVQ2hhciBzcGFjZVN1ZmZpeFsyXSA9IHsgJyAnLCBzdWZm
aXggfTsKLSAgICAgICAgICAgIFRleHRSdW4gc3BhY2VTdWZmaXhSdW4gPSBSZW5kZXJCbG9jazo6
Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBzcGFjZVN1ZmZpeCwgMiwgc3R5bGUoKSk7Cisg
ICAgICAgICAgICBUZXh0UnVuIHNwYWNlU3VmZml4UnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4odGhpcywgZm9udCwgc3BhY2VTdWZmaXgsIDIsICpzdHlsZSgpKTsKICAgICAgICAg
ICAgIGludCB3aWR0aCA9IGZvbnQud2lkdGgoc3BhY2VTdWZmaXhSdW4pOwogICAgICAgICAgICAg
Y29udGV4dC0+ZHJhd1RleHQoZm9udCwgc3BhY2VTdWZmaXhSdW4sIHRleHRPcmlnaW4pOwogICAg
ICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgdGV4dE9yaWdpbiArIElu
dFNpemUod2lkdGgsIDApKTsKQEAgLTE2NDUsNyArMTY0NSw3IEBAIHZvaWQgUmVuZGVyTGlzdE1h
cmtlcjo6Y29tcHV0ZVByZWZlcnJlZEwKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgIExheW91dFVuaXQgaXRlbVdpZHRoID0gZm9udC53aWR0aChtX3RleHQpOwogICAgICAgICAg
ICAgICAgIFVDaGFyIHN1ZmZpeFNwYWNlWzJdID0geyBsaXN0TWFya2VyU3VmZml4KHR5cGUsIG1f
bGlzdEl0ZW0udmFsdWUoKSksICcgJyB9OwotICAgICAgICAgICAgICAgIExheW91dFVuaXQgc3Vm
Zml4U3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4o
dGhpcywgZm9udCwgc3VmZml4U3BhY2UsIDIsIHN0eWxlKCkpKTsKKyAgICAgICAgICAgICAgICBM
YXlvdXRVbml0IHN1ZmZpeFNwYWNlV2lkdGggPSBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHN1ZmZpeFNwYWNlLCAyLCAqc3R5bGUoKSkpOwogICAg
ICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IGl0ZW1XaWR0aCArIHN1ZmZpeFNwYWNlV2lkdGg7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4NzAsNyArMTg3MCw3IEBA
IEludFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXIKICAgICAgICAgICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CiAgICAgICAgICAgICBpbnQgaXRlbVdp
ZHRoID0gZm9udC53aWR0aChtX3RleHQpOwogICAgICAgICAgICAgVUNoYXIgc3VmZml4U3BhY2Vb
Ml0gPSB7IGxpc3RNYXJrZXJTdWZmaXgodHlwZSwgbV9saXN0SXRlbS52YWx1ZSgpKSwgJyAnIH07
Ci0gICAgICAgICAgICBpbnQgc3VmZml4U3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgc3VmZml4U3BhY2UsIDIsIHN0eWxlKCkp
KTsKKyAgICAgICAgICAgIGludCBzdWZmaXhTcGFjZVdpZHRoID0gZm9udC53aWR0aChSZW5kZXJC
bG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBzdWZmaXhTcGFjZSwgMiwgKnN0eWxl
KCkpKTsKICAgICAgICAgICAgIHJlbGF0aXZlUmVjdCA9IEludFJlY3QoMCwgMCwgaXRlbVdpZHRo
ICsgc3VmZml4U3BhY2VXaWR0aCwgZm9udC5mb250TWV0cmljcygpLmhlaWdodCgpKTsKICAgICB9
CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9u
IDE1NjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzA0LDcgKzcwNCw3IEBAIEFMV0FZU19JTkxJTkUgZmxvYXQgUmVuZGVy
VGV4dDo6d2lkdGhGcm8KICAgICAgICAgcmV0dXJuIHc7CiAgICAgfQogCi0gICAgVGV4dFJ1biBy
dW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihjb25zdF9jYXN0PFJlbmRlclRleHQq
Pih0aGlzKSwgZiwgdGhpcywgc3RhcnQsIGxlbiwgc3R5bGUoKSk7CisgICAgVGV4dFJ1biBydW4g
PSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihjb25zdF9jYXN0PFJlbmRlclRleHQqPih0
aGlzKSwgZiwgdGhpcywgc3RhcnQsIGxlbiwgKnN0eWxlKCkpOwogICAgIHJ1bi5zZXRDaGFyYWN0
ZXJzTGVuZ3RoKHRleHRMZW5ndGgoKSAtIHN0YXJ0KTsKICAgICBBU1NFUlQocnVuLmNoYXJhY3Rl
cnNMZW5ndGgoKSA+PSBydW4ubGVuZ3RoKCkpOwogCkBAIC03NTksNyArNzU5LDcgQEAgdm9pZCBS
ZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyhmbG9hdAogICAgICAgICBjb25zdCBGb250JiBm
b250ID0gc3R5bGUoKS0+Zm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUu
CiAgICAgICAgIGlmIChzdHJpcEZyb250U3BhY2VzKSB7CiAgICAgICAgICAgICBjb25zdCBVQ2hh
ciBzcGFjZSA9ICcgJzsKLSAgICAgICAgICAgIGZsb2F0IHNwYWNlV2lkdGggPSBmb250LndpZHRo
KFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsICZzcGFjZSwgMSwgc3R5
bGUoKSkpOworICAgICAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVy
QmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgJnNwYWNlLCAxLCAqc3R5bGUoKSkp
OwogICAgICAgICAgICAgbWF4VyAtPSBzcGFjZVdpZHRoOwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIG1heFcgKz0gZm9udC53b3JkU3BhY2luZygpOwpAQCAtODAzLDkgKzgwMyw5IEBAIHZv
aWQgUmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMoZmxvYXQKICAgICB9CiB9CiAKLXN0YXRp
YyBpbmxpbmUgYm9vbCBpc1NwYWNlQWNjb3JkaW5nVG9TdHlsZShVQ2hhciBjLCBSZW5kZXJTdHls
ZSogc3R5bGUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTcGFjZUFjY29yZGluZ1RvU3R5bGUoVUNo
YXIgYywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIHJldHVybiBjID09ICcgJyB8
fCAoYyA9PSBub0JyZWFrU3BhY2UgJiYgc3R5bGUtPm5ic3BNb2RlKCkgPT0gU1BBQ0UpOworICAg
IHJldHVybiBjID09ICcgJyB8fCAoYyA9PSBub0JyZWFrU3BhY2UgJiYgc3R5bGUubmJzcE1vZGUo
KSA9PSBTUEFDRSk7CiB9CiAKIGZsb2F0IFJlbmRlclRleHQ6Om1pbkxvZ2ljYWxXaWR0aCgpIGNv
bnN0CkBAIC04MzYsMTAgKzgzNiwxMCBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJy
ZWRMb2dpY2FsCiBzdGF0aWMgaW5saW5lIGZsb2F0IGh5cGhlbldpZHRoKFJlbmRlclRleHQqIHJl
bmRlcmVyLCBjb25zdCBGb250JiBmb250KQogewogICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IHJl
bmRlcmVyLT5zdHlsZSgpOwotICAgIHJldHVybiBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBmb250LCBzdHlsZS0+aHlwaGVuU3RyaW5nKCkuc3RyaW5n
KCksIHN0eWxlKSk7CisgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4ocmVuZGVyZXIsIGZvbnQsIHN0eWxlLT5oeXBoZW5TdHJpbmcoKS5zdHJpbmcoKSwg
KnN0eWxlKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0aChSZW5kZXJU
ZXh0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBjb25z
dCBVQ2hhciogd29yZCwgaW50IHdvcmRMZW5ndGgsIGludCBtaW5pbXVtUHJlZml4TGVuZ3RoLCBp
bnQgbWluaW11bVN1ZmZpeExlbmd0aCwgaW50JiBzdWZmaXhTdGFydCwgSGFzaFNldDxjb25zdCBT
aW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93JiBnbHlwaE92ZXJm
bG93KQorc3RhdGljIGZsb2F0IG1heFdvcmRGcmFnbWVudFdpZHRoKFJlbmRlclRleHQqIHJlbmRl
cmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFVD
aGFyKiB3b3JkLCBpbnQgd29yZExlbmd0aCwgaW50IG1pbmltdW1QcmVmaXhMZW5ndGgsIGludCBt
aW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQmIHN1ZmZpeFN0YXJ0LCBIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGdseXBoT3ZlcmZsb3cp
CiB7CiAgICAgc3VmZml4U3RhcnQgPSAwOwogICAgIGlmICh3b3JkTGVuZ3RoIDw9IG1pbmltdW1T
dWZmaXhMZW5ndGgpCkBAIC04NDcsNyArODQ3LDcgQEAgc3RhdGljIGZsb2F0IG1heFdvcmRGcmFn
bWVudFdpZHRoKFJlbmRlcgogCiAgICAgVmVjdG9yPGludCwgOD4gaHlwaGVuTG9jYXRpb25zOwog
ICAgIGludCBoeXBoZW5Mb2NhdGlvbiA9IHdvcmRMZW5ndGggLSBtaW5pbXVtU3VmZml4TGVuZ3Ro
OwotICAgIHdoaWxlICgoaHlwaGVuTG9jYXRpb24gPSBsYXN0SHlwaGVuTG9jYXRpb24od29yZCwg
d29yZExlbmd0aCwgaHlwaGVuTG9jYXRpb24sIHN0eWxlLT5sb2NhbGUoKSkpID49IG1pbmltdW1Q
cmVmaXhMZW5ndGgpCisgICAgd2hpbGUgKChoeXBoZW5Mb2NhdGlvbiA9IGxhc3RIeXBoZW5Mb2Nh
dGlvbih3b3JkLCB3b3JkTGVuZ3RoLCBoeXBoZW5Mb2NhdGlvbiwgc3R5bGUubG9jYWxlKCkpKSA+
PSBtaW5pbXVtUHJlZml4TGVuZ3RoKQogICAgICAgICBoeXBoZW5Mb2NhdGlvbnMuYXBwZW5kKGh5
cGhlbkxvY2F0aW9uKTsKIAogICAgIGlmIChoeXBoZW5Mb2NhdGlvbnMuaXNFbXB0eSgpKQpAQCAt
ODYxLDcgKzg2MSw3IEBAIHN0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRXaWR0aChSZW5kZXIK
ICAgICAgICAgaW50IGZyYWdtZW50TGVuZ3RoID0gaHlwaGVuTG9jYXRpb25zW2tdIC0gc3VmZml4
U3RhcnQ7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgZnJhZ21lbnRXaXRoSHlwaGVuOwogICAgICAg
ICBmcmFnbWVudFdpdGhIeXBoZW4uYXBwZW5kKHdvcmQgKyBzdWZmaXhTdGFydCwgZnJhZ21lbnRM
ZW5ndGgpOwotICAgICAgICBmcmFnbWVudFdpdGhIeXBoZW4uYXBwZW5kKHN0eWxlLT5oeXBoZW5T
dHJpbmcoKSk7CisgICAgICAgIGZyYWdtZW50V2l0aEh5cGhlbi5hcHBlbmQoc3R5bGUuaHlwaGVu
U3RyaW5nKCkpOwogCiAgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4ocmVuZGVyZXIsIGZvbnQsIGZyYWdtZW50V2l0aEh5cGhlbi5jaGFyYWN0ZXJzKCks
IGZyYWdtZW50V2l0aEh5cGhlbi5sZW5ndGgoKSwgc3R5bGUpOwogICAgICAgICBydW4uc2V0Q2hh
cmFjdGVyc0xlbmd0aChmcmFnbWVudFdpdGhIeXBoZW4ubGVuZ3RoKCkpOwpAQCAtODk2LDExICs4
OTYsMTEgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbAogICAgIG1f
aGFzQmVnaW5XUyA9IGZhbHNlOwogICAgIG1faGFzRW5kV1MgPSBmYWxzZTsKIAotICAgIFJlbmRl
clN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKLSAgICBjb25zdCBGb250JiBmID0gc3R5bGVU
b1VzZS0+Zm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCi0gICAgZmxv
YXQgd29yZFNwYWNpbmcgPSBzdHlsZVRvVXNlLT53b3JkU3BhY2luZygpOworICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSA9ICp0aGlzLT5zdHlsZSgpOworICAgIGNvbnN0IEZvbnQmIGYgPSBz
dHlsZS5mb250KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KKyAgICBmbG9h
dCB3b3JkU3BhY2luZyA9IHN0eWxlLndvcmRTcGFjaW5nKCk7CiAgICAgaW50IGxlbiA9IHRleHRM
ZW5ndGgoKTsKLSAgICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgYnJlYWtJdGVyYXRvcihtX3RleHQs
IHN0eWxlVG9Vc2UtPmxvY2FsZSgpKTsKKyAgICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgYnJlYWtJ
dGVyYXRvcihtX3RleHQsIHN0eWxlLmxvY2FsZSgpKTsKICAgICBib29sIG5lZWRzV29yZFNwYWNp
bmcgPSBmYWxzZTsKICAgICBib29sIGlnbm9yaW5nU3BhY2VzID0gZmFsc2U7CiAgICAgYm9vbCBp
c1NwYWNlID0gZmFsc2U7CkBAIC05MTEsMzAgKzkxMSwzMCBAQCB2b2lkIFJlbmRlclRleHQ6OmNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAKICAgICAvLyBOb24temVybyBvbmx5IHdoZW4ga2Vybmlu
ZyBpcyBlbmFibGVkLCBpbiB3aGljaCBjYXNlIHdlIG1lYXN1cmUgd29yZHMgd2l0aCB0aGVpciB0
cmFpbGluZwogICAgIC8vIHNwYWNlLCB0aGVuIHN1YnRyYWN0IGl0cyB3aWR0aC4KLSAgICBmbG9h
dCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gZi50eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiBLZXJu
aW5nID8gZi53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmLCAmc3Bh
Y2UsIDEsIHN0eWxlVG9Vc2UpLCAmZmFsbGJhY2tGb250cykgKyB3b3JkU3BhY2luZyA6IDA7Cisg
ICAgZmxvYXQgd29yZFRyYWlsaW5nU3BhY2VXaWR0aCA9IGYudHlwZXNldHRpbmdGZWF0dXJlcygp
ICYgS2VybmluZyA/IGYud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywg
ZiwgJnNwYWNlLCAxLCBzdHlsZSksICZmYWxsYmFja0ZvbnRzKSArIHdvcmRTcGFjaW5nIDogMDsK
IAogICAgIC8vIElmIGF1dG9tYXRpYyBoeXBoZW5hdGlvbiBpcyBhbGxvd2VkLCB3ZSBrZWVwIHRy
YWNrIG9mIHRoZSB3aWR0aCBvZiB0aGUgd2lkZXN0IHdvcmQgKG9yIHdvcmQKICAgICAvLyBmcmFn
bWVudCkgZW5jb3VudGVyZWQgc28gZmFyLCBhbmQgb25seSB0cnkgaHlwaGVuYXRpbmcgd29yZHMg
dGhhdCBhcmUgd2lkZXIuCiAgICAgZmxvYXQgbWF4V29yZFdpZHRoID0gbnVtZXJpY19saW1pdHM8
ZmxvYXQ+OjptYXgoKTsKICAgICBpbnQgbWluaW11bVByZWZpeExlbmd0aCA9IDA7CiAgICAgaW50
IG1pbmltdW1TdWZmaXhMZW5ndGggPSAwOwotICAgIGlmIChzdHlsZVRvVXNlLT5oeXBoZW5zKCkg
PT0gSHlwaGVuc0F1dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlVG9Vc2UtPmxvY2FsZSgpKSkgewor
ICAgIGlmIChzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuc0F1dG8gJiYgY2FuSHlwaGVuYXRlKHN0
eWxlLmxvY2FsZSgpKSkgewogICAgICAgICBtYXhXb3JkV2lkdGggPSAwOwogCiAgICAgICAgIC8v
IE1hcCAnaHlwaGVuYXRlLWxpbWl0LXtiZWZvcmUsYWZ0ZXJ9OiBhdXRvOycgdG8gMi4KLSAgICAg
ICAgbWluaW11bVByZWZpeExlbmd0aCA9IHN0eWxlVG9Vc2UtPmh5cGhlbmF0aW9uTGltaXRCZWZv
cmUoKTsKKyAgICAgICAgbWluaW11bVByZWZpeExlbmd0aCA9IHN0eWxlLmh5cGhlbmF0aW9uTGlt
aXRCZWZvcmUoKTsKICAgICAgICAgaWYgKG1pbmltdW1QcmVmaXhMZW5ndGggPCAwKQogICAgICAg
ICAgICAgbWluaW11bVByZWZpeExlbmd0aCA9IDI7CiAKLSAgICAgICAgbWluaW11bVN1ZmZpeExl
bmd0aCA9IHN0eWxlVG9Vc2UtPmh5cGhlbmF0aW9uTGltaXRBZnRlcigpOworICAgICAgICBtaW5p
bXVtU3VmZml4TGVuZ3RoID0gc3R5bGUuaHlwaGVuYXRpb25MaW1pdEFmdGVyKCk7CiAgICAgICAg
IGlmIChtaW5pbXVtU3VmZml4TGVuZ3RoIDwgMCkKICAgICAgICAgICAgIG1pbmltdW1TdWZmaXhM
ZW5ndGggPSAyOwogICAgIH0KIAogICAgIGludCBmaXJzdEdseXBoTGVmdE92ZXJmbG93ID0gLTE7
CiAKLSAgICBib29sIGJyZWFrTkJTUCA9IHN0eWxlVG9Vc2UtPmF1dG9XcmFwKCkgJiYgc3R5bGVU
b1VzZS0+bmJzcE1vZGUoKSA9PSBTUEFDRTsKLSAgICBib29sIGJyZWFrQWxsID0gKHN0eWxlVG9V
c2UtPndvcmRCcmVhaygpID09IEJyZWFrQWxsV29yZEJyZWFrIHx8IHN0eWxlVG9Vc2UtPndvcmRC
cmVhaygpID09IEJyZWFrV29yZEJyZWFrKSAmJiBzdHlsZVRvVXNlLT5hdXRvV3JhcCgpOworICAg
IGJvb2wgYnJlYWtOQlNQID0gc3R5bGUuYXV0b1dyYXAoKSAmJiBzdHlsZS5uYnNwTW9kZSgpID09
IFNQQUNFOworICAgIGJvb2wgYnJlYWtBbGwgPSAoc3R5bGUud29yZEJyZWFrKCkgPT0gQnJlYWtB
bGxXb3JkQnJlYWsgfHwgc3R5bGUud29yZEJyZWFrKCkgPT0gQnJlYWtXb3JkQnJlYWspICYmIHN0
eWxlLmF1dG9XcmFwKCk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAg
ICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJBdChpKTsKQEAgLTk0MywxNCArOTQzLDE0IEBAIHZv
aWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWwKIAogICAgICAgICBib29sIGlz
TmV3bGluZSA9IGZhbHNlOwogICAgICAgICBpZiAoYyA9PSAnXG4nKSB7Ci0gICAgICAgICAgICBp
ZiAoc3R5bGVUb1VzZS0+cHJlc2VydmVOZXdsaW5lKCkpIHsKKyAgICAgICAgICAgIGlmIChzdHls
ZS5wcmVzZXJ2ZU5ld2xpbmUoKSkgewogICAgICAgICAgICAgICAgIG1faGFzQnJlYWsgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGlzTmV3bGluZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgaXNT
cGFjZSA9IGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgaXNTcGFj
ZSA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXHQnKSB7Ci0gICAgICAgICAgICBp
ZiAoIXN0eWxlVG9Vc2UtPmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7CisgICAgICAgICAgICBpZiAo
IXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7CiAgICAgICAgICAgICAgICAgbV9oYXNUYWIg
PSB0cnVlOwogICAgICAgICAgICAgICAgIGlzU3BhY2UgPSBmYWxzZTsKICAgICAgICAgICAgIH0g
ZWxzZQpAQCAtOTYzLDcgKzk2Myw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJl
ZExvZ2ljYWwKICAgICAgICAgaWYgKChpc1NwYWNlIHx8IGlzTmV3bGluZSkgJiYgaSA9PSBsZW4g
LSAxKQogICAgICAgICAgICAgbV9oYXNFbmRXUyA9IHRydWU7CiAKLSAgICAgICAgaWYgKCFpZ25v
cmluZ1NwYWNlcyAmJiBzdHlsZVRvVXNlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBwcmV2aW91
c0NoYXJhY3RlcklzU3BhY2UgJiYgaXNTcGFjZSkKKyAgICAgICAgaWYgKCFpZ25vcmluZ1NwYWNl
cyAmJiBzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBwcmV2aW91c0NoYXJhY3RlcklzU3Bh
Y2UgJiYgaXNTcGFjZSkKICAgICAgICAgICAgIGlnbm9yaW5nU3BhY2VzID0gdHJ1ZTsKIAogICAg
ICAgICBpZiAoaWdub3JpbmdTcGFjZXMgJiYgIWlzU3BhY2UpCkBAIC05NzQsNyArOTc0LDcgQEAg
dm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbAogICAgICAgICAgICAgQVNT
RVJUKGxhc3RXb3JkQm91bmRhcnkgPT0gaSk7CiAgICAgICAgICAgICBsYXN0V29yZEJvdW5kYXJ5
Kys7CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIGlmIChjID09IHNvZnRI
eXBoZW4gJiYgc3R5bGVUb1VzZS0+aHlwaGVucygpICE9IEh5cGhlbnNOb25lKSB7CisgICAgICAg
IH0gZWxzZSBpZiAoYyA9PSBzb2Z0SHlwaGVuICYmIHN0eWxlLmh5cGhlbnMoKSAhPSBIeXBoZW5z
Tm9uZSkgewogICAgICAgICAgICAgY3Vyck1heFdpZHRoICs9IHdpZHRoRnJvbUNhY2hlKGYsIGxh
c3RXb3JkQm91bmRhcnksIGkgLSBsYXN0V29yZEJvdW5kYXJ5LCBsZWFkV2lkdGggKyBjdXJyTWF4
V2lkdGgsICZmYWxsYmFja0ZvbnRzLCAmZ2x5cGhPdmVyZmxvdyk7CiAgICAgICAgICAgICBpZiAo
Zmlyc3RHbHlwaExlZnRPdmVyZmxvdyA8IDApCiAgICAgICAgICAgICAgICAgZmlyc3RHbHlwaExl
ZnRPdmVyZmxvdyA9IGdseXBoT3ZlcmZsb3cubGVmdDsKQEAgLTk4NSw3ICs5ODUsNyBAQCB2b2lk
IFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAgICAgICAgIGJvb2wgaGFzQnJl
YWsgPSBicmVha0FsbCB8fCBpc0JyZWFrYWJsZShicmVha0l0ZXJhdG9yLCBpLCBuZXh0QnJlYWth
YmxlLCBicmVha05CU1ApOwogICAgICAgICBib29sIGJldHdlZW5Xb3JkcyA9IHRydWU7CiAgICAg
ICAgIGludCBqID0gaTsKLSAgICAgICAgd2hpbGUgKGMgIT0gJ1xuJyAmJiAhaXNTcGFjZUFjY29y
ZGluZ1RvU3R5bGUoYywgc3R5bGVUb1VzZSkgJiYgYyAhPSAnXHQnICYmIChjICE9IHNvZnRIeXBo
ZW4gfHwgc3R5bGVUb1VzZS0+aHlwaGVucygpID09IEh5cGhlbnNOb25lKSkgeworICAgICAgICB3
aGlsZSAoYyAhPSAnXG4nICYmICFpc1NwYWNlQWNjb3JkaW5nVG9TdHlsZShjLCBzdHlsZSkgJiYg
YyAhPSAnXHQnICYmIChjICE9IHNvZnRIeXBoZW4gfHwgc3R5bGUuaHlwaGVucygpID09IEh5cGhl
bnNOb25lKSkgewogICAgICAgICAgICAgaisrOwogICAgICAgICAgICAgaWYgKGogPT0gbGVuKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwMCwxOSArMTAwMCwxOSBAQCB2b2lkIFJlbmRl
clRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAKICAgICAgICAgaW50IHdvcmRMZW4gPSBq
IC0gaTsKICAgICAgICAgaWYgKHdvcmRMZW4pIHsKLSAgICAgICAgICAgIGJvb2wgaXNTcGFjZSA9
IChqIDwgbGVuKSAmJiBpc1NwYWNlQWNjb3JkaW5nVG9TdHlsZShjLCBzdHlsZVRvVXNlKTsKKyAg
ICAgICAgICAgIGJvb2wgaXNTcGFjZSA9IChqIDwgbGVuKSAmJiBpc1NwYWNlQWNjb3JkaW5nVG9T
dHlsZShjLCBzdHlsZSk7CiAgICAgICAgICAgICBmbG9hdCB3OwogICAgICAgICAgICAgaWYgKHdv
cmRUcmFpbGluZ1NwYWNlV2lkdGggJiYgaXNTcGFjZSkKICAgICAgICAgICAgICAgICB3ID0gd2lk
dGhGcm9tQ2FjaGUoZiwgaSwgd29yZExlbiArIDEsIGxlYWRXaWR0aCArIGN1cnJNYXhXaWR0aCwg
JmZhbGxiYWNrRm9udHMsICZnbHlwaE92ZXJmbG93KSAtIHdvcmRUcmFpbGluZ1NwYWNlV2lkdGg7
CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICB3ID0gd2lkdGhGcm9tQ2FjaGUo
ZiwgaSwgd29yZExlbiwgbGVhZFdpZHRoICsgY3Vyck1heFdpZHRoLCAmZmFsbGJhY2tGb250cywg
JmdseXBoT3ZlcmZsb3cpOwotICAgICAgICAgICAgICAgIGlmIChjID09IHNvZnRIeXBoZW4gJiYg
c3R5bGVUb1VzZS0+aHlwaGVucygpICE9IEh5cGhlbnNOb25lKQorICAgICAgICAgICAgICAgIGlm
IChjID09IHNvZnRIeXBoZW4gJiYgc3R5bGUuaHlwaGVucygpICE9IEh5cGhlbnNOb25lKQogICAg
ICAgICAgICAgICAgICAgICBjdXJyTWluV2lkdGggKz0gaHlwaGVuV2lkdGgodGhpcywgZik7CiAg
ICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh3ID4gbWF4V29yZFdpZHRoKSB7CiAgICAg
ICAgICAgICAgICAgaW50IHN1ZmZpeFN0YXJ0OwotICAgICAgICAgICAgICAgIGZsb2F0IG1heEZy
YWdtZW50V2lkdGggPSBtYXhXb3JkRnJhZ21lbnRXaWR0aCh0aGlzLCBzdHlsZVRvVXNlLCBmLCBj
aGFyYWN0ZXJzKCkgKyBpLCB3b3JkTGVuLCBtaW5pbXVtUHJlZml4TGVuZ3RoLCBtaW5pbXVtU3Vm
Zml4TGVuZ3RoLCBzdWZmaXhTdGFydCwgZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7Cisg
ICAgICAgICAgICAgICAgZmxvYXQgbWF4RnJhZ21lbnRXaWR0aCA9IG1heFdvcmRGcmFnbWVudFdp
ZHRoKHRoaXMsIHN0eWxlLCBmLCBjaGFyYWN0ZXJzKCkgKyBpLCB3b3JkTGVuLCBtaW5pbXVtUHJl
Zml4TGVuZ3RoLCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBzdWZmaXhTdGFydCwgZmFsbGJhY2tGb250
cywgZ2x5cGhPdmVyZmxvdyk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3VmZml4U3RhcnQpIHsK
ICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc3VmZml4V2lkdGg7CkBAIC0xMDQwLDggKzEwNDAs
OCBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAgICAgICAgICAg
ICAgICAgbGFzdFdvcmRCb3VuZGFyeSA9IGo7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg
IGJvb2wgaXNDb2xsYXBzaWJsZVdoaXRlU3BhY2UgPSAoaiA8IGxlbikgJiYgc3R5bGVUb1VzZS0+
aXNDb2xsYXBzaWJsZVdoaXRlU3BhY2UoYyk7Ci0gICAgICAgICAgICBpZiAoaiA8IGxlbiAmJiBz
dHlsZVRvVXNlLT5hdXRvV3JhcCgpKQorICAgICAgICAgICAgYm9vbCBpc0NvbGxhcHNpYmxlV2hp
dGVTcGFjZSA9IChqIDwgbGVuKSAmJiBzdHlsZS5pc0NvbGxhcHNpYmxlV2hpdGVTcGFjZShjKTsK
KyAgICAgICAgICAgIGlmIChqIDwgbGVuICYmIHN0eWxlLmF1dG9XcmFwKCkpCiAgICAgICAgICAg
ICAgICAgbV9oYXNCcmVha2FibGVDaGFyID0gdHJ1ZTsKIAogICAgICAgICAgICAgLy8gQWRkIGlu
IHdvcmRTcGFjaW5nIHRvIG91ciBjdXJyTWF4V2lkdGgsIGJ1dCBub3QgaWYgdGhpcyBpcyB0aGUg
bGFzdCB3b3JkIG9uIGEgbGluZSBvciB0aGUKQEAgLTEwNjgsNyArMTA2OCw3IEBAIHZvaWQgUmVu
ZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWwKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIC8vIE5vd3JhcCBjYW4gbmV2ZXIgYmUgYnJva2VuLCBzbyBkb24ndCBib3RoZXIgc2V0
dGluZyB0aGUKICAgICAgICAgICAgIC8vIGJyZWFrYWJsZSBjaGFyYWN0ZXIgYm9vbGVhbi4gUHJl
IGNhbiBvbmx5IGJlIGJyb2tlbiBpZiB3ZSBlbmNvdW50ZXIgYSBuZXdsaW5lLgotICAgICAgICAg
ICAgaWYgKHN0eWxlKCktPmF1dG9XcmFwKCkgfHwgaXNOZXdsaW5lKQorICAgICAgICAgICAgaWYg
KHN0eWxlLmF1dG9XcmFwKCkgfHwgaXNOZXdsaW5lKQogICAgICAgICAgICAgICAgIG1faGFzQnJl
YWthYmxlQ2hhciA9IHRydWU7CiAKICAgICAgICAgICAgIGlmIChjdXJyTWluV2lkdGggPiBtX21p
bldpZHRoKQpAQCAtMTA3OSw3ICsxMDc5LDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJl
ZmVycmVkTG9naWNhbAogICAgICAgICAgICAgICAgIGlmIChmaXJzdExpbmUpIHsKICAgICAgICAg
ICAgICAgICAgICAgZmlyc3RMaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgIGxlYWRX
aWR0aCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGVUb1VzZS0+YXV0b1dyYXAo
KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHlsZS5hdXRvV3JhcCgpKQogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9iZWdpbk1pbldpZHRoID0gY3Vyck1heFdpZHRoOwogICAgICAgICAg
ICAgICAgIH0KIApAQCAtMTA4NywxMCArMTA4NywxMCBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1
dGVQcmVmZXJyZWRMb2dpY2FsCiAgICAgICAgICAgICAgICAgICAgIG1fbWF4V2lkdGggPSBjdXJy
TWF4V2lkdGg7CiAgICAgICAgICAgICAgICAgY3Vyck1heFdpZHRoID0gMDsKICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bih0aGlzLCBmLCB0aGlzLCBpLCAxLCBzdHlsZVRvVXNlKTsKKyAgICAgICAg
ICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMs
IGYsIHRoaXMsIGksIDEsIHN0eWxlKTsKICAgICAgICAgICAgICAgICBydW4uc2V0Q2hhcmFjdGVy
c0xlbmd0aChsZW4gLSBpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocnVuLmNoYXJhY3RlcnNM
ZW5ndGgoKSA+PSBydW4ubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIHJ1bi5zZXRUYWJTaXpl
KCFzdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUoKS0+dGFiU2l6ZSgpKTsKKyAg
ICAgICAgICAgICAgICBydW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCks
IHN0eWxlLnRhYlNpemUoKSk7CiAgICAgICAgICAgICAgICAgcnVuLnNldFhQb3MobGVhZFdpZHRo
ICsgY3Vyck1heFdpZHRoKTsKIAogICAgICAgICAgICAgICAgIGN1cnJNYXhXaWR0aCArPSBmLndp
ZHRoKHJ1biwgJmZhbGxiYWNrRm9udHMpOwpAQCAtMTExMSwxMCArMTExMSwxMCBAQCB2b2lkIFJl
bmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAgICAgbV9taW5XaWR0aCA9IG1heChj
dXJyTWluV2lkdGgsIG1fbWluV2lkdGgpOwogICAgIG1fbWF4V2lkdGggPSBtYXgoY3Vyck1heFdp
ZHRoLCBtX21heFdpZHRoKTsKIAotICAgIGlmICghc3R5bGVUb1VzZS0+YXV0b1dyYXAoKSkKKyAg
ICBpZiAoIXN0eWxlLmF1dG9XcmFwKCkpCiAgICAgICAgIG1fbWluV2lkdGggPSBtX21heFdpZHRo
OwogCi0gICAgaWYgKHN0eWxlVG9Vc2UtPndoaXRlU3BhY2UoKSA9PSBQUkUpIHsKKyAgICBpZiAo
c3R5bGUud2hpdGVTcGFjZSgpID09IFBSRSkgewogICAgICAgICBpZiAoZmlyc3RMaW5lKQogICAg
ICAgICAgICAgbV9iZWdpbk1pbldpZHRoID0gbV9tYXhXaWR0aDsKICAgICAgICAgbV9lbmRNaW5X
aWR0aCA9IGN1cnJNYXhXaWR0aDsKQEAgLTE1MDUsNyArMTUwNSw3IEBAIGZsb2F0IFJlbmRlclRl
eHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHUKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICB3
ID0gd2lkdGhGcm9tQ2FjaGUoZiwgZnJvbSwgbGVuLCB4UG9zLCBmYWxsYmFja0ZvbnRzLCBnbHlw
aE92ZXJmbG93KTsKICAgICB9IGVsc2UgewotICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0X2Nhc3Q8UmVuZGVyVGV4dCo+KHRoaXMpLCBmLCB0
aGlzLCBmcm9tLCBsZW4sIHN0eWxlKCkpOworICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0X2Nhc3Q8UmVuZGVyVGV4dCo+KHRoaXMpLCBmLCB0
aGlzLCBmcm9tLCBsZW4sICpzdHlsZSgpKTsKICAgICAgICAgcnVuLnNldENoYXJhY3RlcnNMZW5n
dGgodGV4dExlbmd0aCgpIC0gZnJvbSk7CiAgICAgICAgIEFTU0VSVChydW4uY2hhcmFjdGVyc0xl
bmd0aCgpID49IHJ1bi5sZW5ndGgoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gMTU2NjExKQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI5LDcgKzIyOSw3IEBAIGZsb2F0IFJlbmRlclRleHRDb250cm9sOjpnZXRBdmdDaGFyV2lk
dGgKICAgICBjb25zdCBVQ2hhciBjaCA9ICcwJzsKICAgICBjb25zdCBTdHJpbmcgc3RyID0gU3Ry
aW5nKCZjaCwgMSk7CiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKLSAg
ICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHN0ciwgc3R5
bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbik7CisgICAgVGV4dFJ1biB0ZXh0
UnVuID0gY29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBzdHIsICpzdHlsZSgpLCBUZXh0UnVu
OjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKTsKICAgICB0ZXh0UnVuLmRpc2FibGVSb3VuZGluZ0hh
Y2tzKCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgodGV4dFJ1bik7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2aXNpb24gMTU2NjEx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0eWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc0NSw4ICs3NDUsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCBnZXRUZXh0U2hh
ZG93RXh0ZW50KExheW91dFVuaXQmIHRvcCwgTGF5b3V0VW5pdCYgcmlnaHQsIExheW91dFVuaXQm
IGJvdHRvbSwgTGF5b3V0VW5pdCYgbGVmdCkgY29uc3QgeyBnZXRTaGFkb3dFeHRlbnQodGV4dFNo
YWRvdygpLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOyB9CiAgICAgdm9pZCBnZXRUZXh0U2hh
ZG93SG9yaXpvbnRhbEV4dGVudChMYXlvdXRVbml0JiBsZWZ0LCBMYXlvdXRVbml0JiByaWdodCkg
Y29uc3QgeyBnZXRTaGFkb3dIb3Jpem9udGFsRXh0ZW50KHRleHRTaGFkb3coKSwgbGVmdCwgcmln
aHQpOyB9CiAgICAgdm9pZCBnZXRUZXh0U2hhZG93VmVydGljYWxFeHRlbnQoTGF5b3V0VW5pdCYg
dG9wLCBMYXlvdXRVbml0JiBib3R0b20pIGNvbnN0IHsgZ2V0U2hhZG93VmVydGljYWxFeHRlbnQo
dGV4dFNoYWRvdygpLCB0b3AsIGJvdHRvbSk7IH0KLSAgICB2b2lkIGdldFRleHRTaGFkb3dJbmxp
bmVEaXJlY3Rpb25FeHRlbnQoTGF5b3V0VW5pdCYgbG9naWNhbExlZnQsIExheW91dFVuaXQmIGxv
Z2ljYWxSaWdodCkgeyBnZXRTaGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRlbnQodGV4dFNoYWRvdygp
LCBsb2dpY2FsTGVmdCwgbG9naWNhbFJpZ2h0KTsgfQotICAgIHZvaWQgZ2V0VGV4dFNoYWRvd0Js
b2NrRGlyZWN0aW9uRXh0ZW50KExheW91dFVuaXQmIGxvZ2ljYWxUb3AsIExheW91dFVuaXQmIGxv
Z2ljYWxCb3R0b20pIHsgZ2V0U2hhZG93QmxvY2tEaXJlY3Rpb25FeHRlbnQodGV4dFNoYWRvdygp
LCBsb2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tKTsgfQorICAgIHZvaWQgZ2V0VGV4dFNoYWRvd0lu
bGluZURpcmVjdGlvbkV4dGVudChMYXlvdXRVbml0JiBsb2dpY2FsTGVmdCwgTGF5b3V0VW5pdCYg
bG9naWNhbFJpZ2h0KSBjb25zdCB7IGdldFNoYWRvd0lubGluZURpcmVjdGlvbkV4dGVudCh0ZXh0
U2hhZG93KCksIGxvZ2ljYWxMZWZ0LCBsb2dpY2FsUmlnaHQpOyB9CisgICAgdm9pZCBnZXRUZXh0
U2hhZG93QmxvY2tEaXJlY3Rpb25FeHRlbnQoTGF5b3V0VW5pdCYgbG9naWNhbFRvcCwgTGF5b3V0
VW5pdCYgbG9naWNhbEJvdHRvbSkgY29uc3QgeyBnZXRTaGFkb3dCbG9ja0RpcmVjdGlvbkV4dGVu
dCh0ZXh0U2hhZG93KCksIGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOyB9CiAKICAgICBmbG9h
dCB0ZXh0U3Ryb2tlV2lkdGgoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJpdGVkRGF0YS0+dGV4
dFN0cm9rZVdpZHRoOyB9CiAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkgY29uc3QgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Q29sb3JTcGFjZT4ocmFyZUluaGVyaXRlZERhdGEtPmNvbG9yU3BhY2Up
OyB9Cg==
</data>
<flag name="commit-queue"
          id="235187"
          type_id="3"
          status="-"
          setter="eflews.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>212908</attachid>
            <date>2013-09-28 16:27:38 -0700</date>
            <delta_ts>2013-09-28 19:18:54 -0700</delta_ts>
            <desc>try to fix CSS3_TEXT build</desc>
            <filename>inlinebox-style-const-2.patch</filename>
            <type>text/plain</type>
            <size>89791</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1NjYxMikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwIEBACisyMDEzLTA5LTI4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTd2l0Y2ggaW5saW5lIGJveGVz
IHRvIHVzZSBjb25zdCBSZW5kZXJTdHlsZSYKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyMjA2OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCiAyMDEzLTA5LTI4ICBBbnR0aSBLb2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4K
IAogICAgICAgICBBZGQgZmlyc3QoKS9sYXN0KCkgdG8gRWxlbWVudEl0ZXJhdG9yQWRhcHRlcnMK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENv
bnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNTY2MTEpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNyBAQCBjbGFzcyBUZXh0TGF5b3V0IHsK
IHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc05lZWRlZChSZW5kZXJUZXh0KiB0ZXh0LCBjb25z
dCBGb250JiBmb250KQogICAgIHsKLSAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6
Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250LCB0ZXh0LCB0ZXh0LT5zdHlsZSgpKTsKKyAgICAg
ICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0ZXh0LCBmb250
LCB0ZXh0LCAqdGV4dC0+c3R5bGUoKSk7CiAgICAgICAgIHJldHVybiBmb250LmNvZGVQYXRoKHJ1
bikgPT0gRm9udDo6Q29tcGxleDsKICAgICB9CiAKQEAgLTY4LDcgKzY4LDcgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlclRleHQq
IHRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHhQb3MpCiAgICAgewotICAgICAgICBUZXh0
UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQs
IHRleHQtPnN0eWxlKCkpOworICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25z
dHJ1Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQsICp0ZXh0LT5zdHlsZSgpKTsKICAgICAgICAg
cnVuLnNldENoYXJhY3RlcnNMZW5ndGgodGV4dC0+dGV4dExlbmd0aCgpKTsKICAgICAgICAgQVNT
RVJUKHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkgPj0gcnVuLmxlbmd0aCgpKTsKIApJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCShyZXZpc2lvbiAxNTY2MTEpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvRWxsaXBzaXNCb3guY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00NCw3ICs0NCw3IEBAIEVsbGlwc2lzQm94OjpFbGxpcHNpc0JveChSZW5kZXJCbG9jayYg
cmUKIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBM
YXlvdXRQb2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBs
aW5lQm90dG9tKQogewogICAgIEdyYXBoaWNzQ29udGV4dCogY29udGV4dCA9IHBhaW50SW5mby5j
b250ZXh0OwotICAgIFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsK
KyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAg
ICAgQ29sb3IgdGV4dENvbG9yID0gbGluZVN0eWxlLnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IpOwogICAgIGlmICh0ZXh0Q29sb3IgIT0gY29udGV4
dC0+ZmlsbENvbG9yKCkpCiAgICAgICAgIGNvbnRleHQtPnNldEZpbGxDb2xvcih0ZXh0Q29sb3Is
IGxpbmVTdHlsZS5jb2xvclNwYWNlKCkpOwpAQCAtNTcsNyArNTcsNyBAQCB2b2lkIEVsbGlwc2lz
Qm94OjpwYWludChQYWludEluZm8mIHBhaW50CiAKICAgICBjb25zdCBGb250JiBmb250ID0gbGlu
ZVN0eWxlLmZvbnQoKTsKICAgICBpZiAoc2VsZWN0aW9uU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6
OlNlbGVjdGlvbk5vbmUpIHsKLSAgICAgICAgcGFpbnRTZWxlY3Rpb24oY29udGV4dCwgcGFpbnRP
ZmZzZXQsICZsaW5lU3R5bGUsIGZvbnQpOworICAgICAgICBwYWludFNlbGVjdGlvbihjb250ZXh0
LCBwYWludE9mZnNldCwgbGluZVN0eWxlLCBmb250KTsKIAogICAgICAgICAvLyBTZWxlY3QgdGhl
IGNvcnJlY3QgY29sb3IgZm9yIHBhaW50aW5nIHRoZSB0ZXh0LgogICAgICAgICBDb2xvciBmb3Jl
Z3JvdW5kID0gcGFpbnRJbmZvLmZvcmNlQmxhY2tUZXh0KCkgPyBDb2xvcjo6YmxhY2sgOiByZW5k
ZXJlcigpLnNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpOwpAQCAtNjYsNyArNjYsNyBAQCB2b2lk
IEVsbGlwc2lzQm94OjpwYWludChQYWludEluZm8mIHBhaW50CiAgICAgfQogCiAgICAgLy8gRklY
TUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBwYXNzaW5nIGNvcnJlY3QgdGV4dCBy
dW4gZmxhZ3MgYmVsb3cuCi0gICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgUmVuZGVyQmxvY2s6
OmNvbnN0cnVjdFRleHRSdW4oJnJlbmRlcmVyKCksIGZvbnQsIG1fc3RyLCAmbGluZVN0eWxlLCBU
ZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgTGF5b3V0UG9pbnQoeCgpICsgcGFpbnRP
ZmZzZXQueCgpLCB5KCkgKyBwYWludE9mZnNldC55KCkgKyBsaW5lU3R5bGUuZm9udE1ldHJpY3Mo
KS5hc2NlbnQoKSkpOworICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpj
b25zdHJ1Y3RUZXh0UnVuKCZyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgbGluZVN0eWxlLCBUZXh0
UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgTGF5b3V0UG9pbnQoeCgpICsgcGFpbnRPZmZz
ZXQueCgpLCB5KCkgKyBwYWludE9mZnNldC55KCkgKyBsaW5lU3R5bGUuZm9udE1ldHJpY3MoKS5h
c2NlbnQoKSkpOwogCiAgICAgLy8gUmVzdG9yZSB0aGUgcmVndWxhciBmaWxsIGNvbG9yLgogICAg
IGlmICh0ZXh0Q29sb3IgIT0gY29udGV4dC0+ZmlsbENvbG9yKCkpCkBAIC03NSw3ICs3NSw3IEBA
IHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAgICBpZiAoc2V0U2hh
ZG93KQogICAgICAgICBjb250ZXh0LT5jbGVhclNoYWRvdygpOwogCi0gICAgcGFpbnRNYXJrdXBC
b3gocGFpbnRJbmZvLCBwYWludE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSwgJmxpbmVTdHls
ZSk7CisgICAgcGFpbnRNYXJrdXBCb3gocGFpbnRJbmZvLCBwYWludE9mZnNldCwgbGluZVRvcCwg
bGluZUJvdHRvbSwgbGluZVN0eWxlKTsKIH0KIAogSW5saW5lQm94KiBFbGxpcHNpc0JveDo6bWFy
a3VwQm94KCkgY29uc3QKQEAgLTk2LDcgKzk2LDcgQEAgSW5saW5lQm94KiBFbGxpcHNpc0JveDo6
bWFya3VwQm94KCkgY29ucwogICAgIHJldHVybiBhbmNob3JCb3g7CiB9CiAKLXZvaWQgRWxsaXBz
aXNCb3g6OnBhaW50TWFya3VwQm94KFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQ
b2ludCYgcGFpbnRPZmZzZXQsIExheW91dFVuaXQgbGluZVRvcCwgTGF5b3V0VW5pdCBsaW5lQm90
dG9tLCBSZW5kZXJTdHlsZSogc3R5bGUpCit2b2lkIEVsbGlwc2lzQm94OjpwYWludE1hcmt1cEJv
eChQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgTGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBM
YXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJvdHRvbSwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlKQogewogICAgIElubGluZUJveCogbWFya3VwQm94ID0gdGhpcy0+bWFya3VwQm94
KCk7CiAgICAgaWYgKCFtYXJrdXBCb3gpCkBAIC0xMDQsMjIgKzEwNCwyMiBAQCB2b2lkIEVsbGlw
c2lzQm94OjpwYWludE1hcmt1cEJveChQYWludEluCiAKICAgICBMYXlvdXRQb2ludCBhZGp1c3Rl
ZFBhaW50T2Zmc2V0ID0gcGFpbnRPZmZzZXQ7CiAgICAgYWRqdXN0ZWRQYWludE9mZnNldC5tb3Zl
KHgoKSArIG1fbG9naWNhbFdpZHRoIC0gbWFya3VwQm94LT54KCksCi0gICAgICAgIHkoKSArIHN0
eWxlLT5mb250TWV0cmljcygpLmFzY2VudCgpIC0gKG1hcmt1cEJveC0+eSgpICsgbWFya3VwQm94
LT5saW5lU3R5bGUoKS5mb250TWV0cmljcygpLmFzY2VudCgpKSk7CisgICAgICAgIHkoKSArIHN0
eWxlLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkgLSAobWFya3VwQm94LT55KCkgKyBtYXJrdXBCb3gt
PmxpbmVTdHlsZSgpLmZvbnRNZXRyaWNzKCkuYXNjZW50KCkpKTsKICAgICBtYXJrdXBCb3gtPnBh
aW50KHBhaW50SW5mbywgYWRqdXN0ZWRQYWludE9mZnNldCwgbGluZVRvcCwgbGluZUJvdHRvbSk7
CiB9CiAKIEludFJlY3QgRWxsaXBzaXNCb3g6OnNlbGVjdGlvblJlY3QoKQogewotICAgIFJlbmRl
clN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgY29uc3QgRm9udCYgZm9u
dCA9IGxpbmVTdHlsZS5mb250KCk7CiAgICAgY29uc3QgUm9vdElubGluZUJveCYgcm9vdEJveCA9
IHJvb3QoKTsKICAgICAvLyBGSVhNRTogV2h5IGlzIHRoaXMgYWx3YXlzIExUUj8gRml4IGJ5IHBh
c3NpbmcgY29ycmVjdCB0ZXh0IHJ1biBmbGFncyBiZWxvdy4KLSAgICByZXR1cm4gZW5jbG9zaW5n
SW50UmVjdChmb250LnNlbGVjdGlvblJlY3RGb3JUZXh0KFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKCZyZW5kZXJlcigpLCBmb250LCBtX3N0ciwgJmxpbmVTdHlsZSwgVGV4dFJ1bjo6QWxs
b3dUcmFpbGluZ0V4cGFuc2lvbiksIEludFBvaW50KHgoKSwgeSgpICsgcm9vdEJveC5zZWxlY3Rp
b25Ub3BBZGp1c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkpLCByb290Qm94LnNlbGVjdGlvbkhlaWdo
dEFkanVzdGVkRm9yUHJlY2VkaW5nQmxvY2soKSkpOworICAgIHJldHVybiBlbmNsb3NpbmdJbnRS
ZWN0KGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4oJnJlbmRlcmVyKCksIGZvbnQsIG1fc3RyLCBsaW5lU3R5bGUsIFRleHRSdW46OkFsbG93VHJh
aWxpbmdFeHBhbnNpb24pLCBJbnRQb2ludCh4KCksIHkoKSArIHJvb3RCb3guc2VsZWN0aW9uVG9w
QWRqdXN0ZWRGb3JQcmVjZWRpbmdCbG9jaygpKSwgcm9vdEJveC5zZWxlY3Rpb25IZWlnaHRBZGp1
c3RlZEZvclByZWNlZGluZ0Jsb2NrKCkpKTsKIH0KIAotdm9pZCBFbGxpcHNpc0JveDo6cGFpbnRT
ZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBMYXlvdXRQb2ludCYgcGFp
bnRPZmZzZXQsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCkKK3ZvaWQgRWxs
aXBzaXNCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3Qg
TGF5b3V0UG9pbnQmIHBhaW50T2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0
IEZvbnQmIGZvbnQpCiB7Ci0gICAgQ29sb3IgdGV4dENvbG9yID0gc3R5bGUtPnZpc2l0ZWREZXBl
bmRlbnRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yKTsKKyAgICBDb2xvciB0ZXh0Q29sb3IgPSBzdHls
ZS52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlDb2xvcik7CiAgICAgQ29sb3IgYyA9
IHJlbmRlcmVyKCkuc2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCk7CiAgICAgaWYgKCFjLmlzVmFs
aWQoKSB8fCAhYy5hbHBoYSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMzgsNyArMTM4LDcgQEAg
dm9pZCBFbGxpcHNpc0JveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpYwogICAgIEdyYXBoaWNzQ29u
dGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7CiAgICAgY29udGV4dC0+Y2xpcChj
bGlwUmVjdCk7CiAgICAgLy8gRklYTUU6IFdoeSBpcyB0aGlzIGFsd2F5cyBMVFI/IEZpeCBieSBw
YXNzaW5nIGNvcnJlY3QgdGV4dCBydW4gZmxhZ3MgYmVsb3cuCi0gICAgY29udGV4dC0+ZHJhd0hp
Z2hsaWdodEZvclRleHQoZm9udCwgUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4oJnJlbmRl
cmVyKCksIGZvbnQsIG1fc3RyLCBzdHlsZSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
biksIHJvdW5kZWRJbnRQb2ludChMYXlvdXRQb2ludCh4KCkgKyBwYWludE9mZnNldC54KCksIHko
KSArIHBhaW50T2Zmc2V0LnkoKSArIHRvcCkpLCBoLCBjLCBzdHlsZS0+Y29sb3JTcGFjZSgpKTsK
KyAgICBjb250ZXh0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bigmcmVuZGVyZXIoKSwgZm9udCwgbV9zdHIsIHN0eWxlLCBUZXh0UnVuOjpB
bGxvd1RyYWlsaW5nRXhwYW5zaW9uKSwgcm91bmRlZEludFBvaW50KExheW91dFBvaW50KHgoKSAr
IHBhaW50T2Zmc2V0LngoKSwgeSgpICsgcGFpbnRPZmZzZXQueSgpICsgdG9wKSksIGgsIGMsIHN0
eWxlLmNvbG9yU3BhY2UoKSk7CiB9CiAKIGJvb2wgRWxsaXBzaXNCb3g6Om5vZGVBdFBvaW50KGNv
bnN0IEhpdFRlc3RSZXF1ZXN0JiByZXF1ZXN0LCBIaXRUZXN0UmVzdWx0JiByZXN1bHQsIGNvbnN0
IEhpdFRlc3RMb2NhdGlvbiYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29uc3QgTGF5b3V0UG9pbnQm
IGFjY3VtdWxhdGVkT2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJv
dHRvbSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBib29sIEVsbGlwc2lzQm94Ojpub2RlQXRQb2ludChj
b25zdCBIaXRUCiAKICAgICAvLyBIaXQgdGVzdCB0aGUgbWFya3VwIGJveC4KICAgICBpZiAoSW5s
aW5lQm94KiBtYXJrdXBCb3ggPSB0aGlzLT5tYXJrdXBCb3goKSkgewotICAgICAgICBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CisgICAgICAgIGNvbnN0IFJlbmRl
clN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICAgICAgTGF5b3V0VW5p
dCBtdHggPSBhZGp1c3RlZExvY2F0aW9uLngoKSArIG1fbG9naWNhbFdpZHRoIC0gbWFya3VwQm94
LT54KCk7CiAgICAgICAgIExheW91dFVuaXQgbXR5ID0gYWRqdXN0ZWRMb2NhdGlvbi55KCkgKyBs
aW5lU3R5bGUuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIChtYXJrdXBCb3gtPnkoKSArIG1hcmt1
cEJveC0+bGluZVN0eWxlKCkuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSk7CiAgICAgICAgIGlmICht
YXJrdXBCb3gtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgbG9jYXRpb25JbkNvbnRhaW5l
ciwgTGF5b3V0UG9pbnQobXR4LCBtdHkpLCBsaW5lVG9wLCBsaW5lQm90dG9tKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0VsbGlwc2lzQm94LmgJKHJldmlzaW9uIDE1NjYxMSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9FbGxpcHNpc0JveC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zOSwxMCArMzksMTAgQEAgcHVibGljOgogICAgIFJlbmRlckJsb2NrJiByZW5kZXJlcigpIGNv
bnN0IHsgcmV0dXJuIHRvUmVuZGVyQmxvY2soSW5saW5lQm94OjpyZW5kZXJlcigpKTsgfQogCiBw
cml2YXRlOgotICAgIHZvaWQgcGFpbnRNYXJrdXBCb3goUGFpbnRJbmZvJiwgY29uc3QgTGF5b3V0
UG9pbnQmIHBhaW50T2Zmc2V0LCBMYXlvdXRVbml0IGxpbmVUb3AsIExheW91dFVuaXQgbGluZUJv
dHRvbSwgUmVuZGVyU3R5bGUqKTsKKyAgICB2b2lkIHBhaW50TWFya3VwQm94KFBhaW50SW5mbyYs
IGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlv
dXRVbml0IGxpbmVCb3R0b20sIGNvbnN0IFJlbmRlclN0eWxlJik7CiAgICAgdmlydHVhbCBpbnQg
aGVpZ2h0KCkgY29uc3QgeyByZXR1cm4gbV9oZWlnaHQ7IH0KICAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdDo6U2VsZWN0aW9uU3RhdGUgc2VsZWN0aW9uU3RhdGUoKSB7IHJldHVybiBtX3NlbGVjdGlv
blN0YXRlOyB9Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBMYXlvdXRQb2ludCYsIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgcGFp
bnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgTGF5b3V0UG9pbnQmLCBjb25zdCBS
ZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKICAgICBJbmxpbmVCb3gqIG1hcmt1cEJveCgpIGNv
bnN0OwogCiAgICAgYm9vbCBtX3Nob3VsZFBhaW50TWFya3VwQm94OwpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL0lubGluZUJveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVCb3guaAkocmV2aXNpb24gMTU2NjExKQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsNyArMjgwLDcg
QEAgcHVibGljOgogCiAgICAgYm9vbCB2aXNpYmxlVG9IaXRUZXN0aW5nKCkgY29uc3QgeyByZXR1
cm4gcmVuZGVyZXIoKS5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiByZW5kZXJl
cigpLnN0eWxlKCktPnBvaW50ZXJFdmVudHMoKSAhPSBQRV9OT05FOyB9CiAKLSAgICBSZW5kZXJT
dHlsZSYgbGluZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuZmlyc3RMaW5lKCkg
PyAqcmVuZGVyZXIoKS5maXJzdExpbmVTdHlsZSgpIDogKnJlbmRlcmVyKCkuc3R5bGUoKTsgfQor
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2JpdGZp
ZWxkcy5maXJzdExpbmUoKSA/ICpyZW5kZXJlcigpLmZpcnN0TGluZVN0eWxlKCkgOiAqcmVuZGVy
ZXIoKS5zdHlsZSgpOyB9CiAgICAgCiAgICAgRVZlcnRpY2FsQWxpZ24gdmVydGljYWxBbGlnbigp
IGNvbnN0IHsgcmV0dXJuIGxpbmVTdHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsgfQogCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAxNTY2
MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MCw3ICsxNjAsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OmFkZFRvTGlu
ZShJbmxpbmVCb3gqCiAgICAgaWYgKCFjaGlsZC0+cmVuZGVyZXIoKS5pc091dE9mRmxvd1Bvc2l0
aW9uZWQoKSkgewogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgY2hpbGRTdHlsZSA9IGNoaWxk
LT5saW5lU3R5bGUoKTsKICAgICAgICAgaWYgKGNoaWxkLT5iZWhhdmVzTGlrZVRleHQoKSkgewot
ICAgICAgICAgICAgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSAmY2hpbGQtPmxpbmVTdHlsZSgp
OworICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGNoaWxkU3R5bGUgPSAmY2hpbGQtPmxp
bmVTdHlsZSgpOwogICAgICAgICAgICAgaWYgKGNoaWxkU3R5bGUtPmxldHRlclNwYWNpbmcoKSA8
IDAgfHwgY2hpbGRTdHlsZS0+dGV4dFNoYWRvdygpIHx8IGNoaWxkU3R5bGUtPnRleHRFbXBoYXNp
c01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSB8fCBjaGlsZFN0eWxlLT50ZXh0U3Ryb2tl
V2lkdGgoKSkKICAgICAgICAgICAgICAgICBjaGlsZC0+Y2xlYXJLbm93blRvSGF2ZU5vT3ZlcmZs
b3coKTsKICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+cmVuZGVyZXIoKS5pc1JlcGxhY2VkKCkp
IHsKQEAgLTY2MSw3ICs2NjEsNyBAQCB2b2lkIElubGluZUZsb3dCb3g6OnBsYWNlQm94ZXNJbkJs
b2NrRGlyCiAgICAgICAgIExheW91dFVuaXQgYm94SGVpZ2h0ID0gY3Vyci0+bG9naWNhbEhlaWdo
dCgpOwogICAgICAgICBMYXlvdXRVbml0IGJveEhlaWdodEluY2x1ZGluZ01hcmdpbnMgPSBib3hI
ZWlnaHQ7CiAKLSAgICAgICAgUmVuZGVyU3R5bGUmIGNoaWxkTGluZVN0eWxlID0gY3Vyci0+bGlu
ZVN0eWxlKCk7CisgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjaGlsZExpbmVTdHlsZSA9IGN1
cnItPmxpbmVTdHlsZSgpOwogICAgICAgICBpZiAoY3Vyci0+YmVoYXZlc0xpa2VUZXh0KCkgfHwg
Y3Vyci0+aXNJbmxpbmVGbG93Qm94KCkpIHsKICAgICAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNz
JiBmb250TWV0cmljcyA9IGNoaWxkTGluZVN0eWxlLmZvbnRNZXRyaWNzKCk7CiAgICAgICAgICAg
ICBuZXdMb2dpY2FsVG9wICs9IGN1cnItPmJhc2VsaW5lUG9zaXRpb24oYmFzZWxpbmVUeXBlKSAt
IGZvbnRNZXRyaWNzLmFzY2VudChiYXNlbGluZVR5cGUpOwpAQCAtNzAzLDcgKzcwMyw3IEBAIHZv
aWQgSW5saW5lRmxvd0JveDo6cGxhY2VCb3hlc0luQmxvY2tEaXIKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGlmIChjdXJyLT5pc0lubGluZVRleHRCb3goKSkgewogICAgICAgICAgICAgICAg
IFRleHRFbXBoYXNpc1Bvc2l0aW9uIGVtcGhhc2lzTWFya1Bvc2l0aW9uOwotICAgICAgICAgICAg
ICAgIGlmICh0b0lubGluZVRleHRCb3goY3VyciktPmdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKCZj
aGlsZExpbmVTdHlsZSwgZW1waGFzaXNNYXJrUG9zaXRpb24pKSB7CisgICAgICAgICAgICAgICAg
aWYgKHRvSW5saW5lVGV4dEJveChjdXJyKS0+Z2V0RW1waGFzaXNNYXJrUG9zaXRpb24oY2hpbGRM
aW5lU3R5bGUsIGVtcGhhc2lzTWFya1Bvc2l0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICBi
b29sIGVtcGhhc2lzTWFya0lzT3ZlciA9IGVtcGhhc2lzTWFya1Bvc2l0aW9uID09IFRleHRFbXBo
YXNpc1Bvc2l0aW9uT3ZlcjsKICAgICAgICAgICAgICAgICAgICAgaWYgKGVtcGhhc2lzTWFya0lz
T3ZlciAhPSBjaGlsZExpbmVTdHlsZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpCiAgICAg
ICAgICAgICAgICAgICAgICAgICBoYXNBbm5vdGF0aW9uc0JlZm9yZSA9IHRydWU7CkBAIC04NTgs
NyArODU4LDcgQEAgaW5saW5lIHZvaWQgSW5saW5lRmxvd0JveDo6YWRkVGV4dEJveFZpcwogICAg
IGlmICh0ZXh0Qm94LT5rbm93blRvSGF2ZU5vT3ZlcmZsb3coKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOworICAgIGNv
bnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICAKICAg
ICBHbHlwaE92ZXJmbG93QW5kRmFsbGJhY2tGb250c01hcDo6aXRlcmF0b3IgaXQgPSB0ZXh0Qm94
RGF0YU1hcC5maW5kKHRleHRCb3gpOwogICAgIEdseXBoT3ZlcmZsb3cqIGdseXBoT3ZlcmZsb3cg
PSBpdCA9PSB0ZXh0Qm94RGF0YU1hcC5lbmQoKSA/IDAgOiAmaXQtPnZhbHVlLnNlY29uZDsKQEAg
LTg3Niw3ICs4NzYsNyBAQCBpbmxpbmUgdm9pZCBJbmxpbmVGbG93Qm94OjphZGRUZXh0Qm94Vmlz
CiAgICAgaW50IHJpZ2h0R2x5cGhPdmVyZmxvdyA9IHN0cm9rZU92ZXJmbG93ICsgcmlnaHRHbHlw
aEVkZ2U7CiAKICAgICBUZXh0RW1waGFzaXNQb3NpdGlvbiBlbXBoYXNpc01hcmtQb3NpdGlvbjsK
LSAgICBpZiAobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJr
Tm9uZSAmJiB0ZXh0Qm94LT5nZXRFbXBoYXNpc01hcmtQb3NpdGlvbigmbGluZVN0eWxlLCBlbXBo
YXNpc01hcmtQb3NpdGlvbikpIHsKKyAgICBpZiAobGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmso
KSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSAmJiB0ZXh0Qm94LT5nZXRFbXBoYXNpc01hcmtQb3Np
dGlvbihsaW5lU3R5bGUsIGVtcGhhc2lzTWFya1Bvc2l0aW9uKSkgewogICAgICAgICBpbnQgZW1w
aGFzaXNNYXJrSGVpZ2h0ID0gbGluZVN0eWxlLmZvbnQoKS5lbXBoYXNpc01hcmtIZWlnaHQobGlu
ZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CiAgICAgICAgIGlmICgoZW1waGFzaXNN
YXJrUG9zaXRpb24gPT0gVGV4dEVtcGhhc2lzUG9zaXRpb25PdmVyKSA9PSAoIWxpbmVTdHlsZS5p
c0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpKQogICAgICAgICAgICAgdG9wR2x5cGhPdmVyZmxv
dyA9IG1pbih0b3BHbHlwaE92ZXJmbG93LCAtZW1waGFzaXNNYXJrSGVpZ2h0KTsKQEAgLTEyMzgs
MTQgKzEyMzgsMTQgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEZpbGxMYXllcihjb25zdAog
ICAgIH0KIH0KIAotdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveFNoYWRvdyhjb25zdCBQYWlu
dEluZm8mIGluZm8sIFJlbmRlclN0eWxlKiBzLCBTaGFkb3dTdHlsZSBzaGFkb3dTdHlsZSwgY29u
c3QgTGF5b3V0UmVjdCYgcGFpbnRSZWN0KQordm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveFNo
YWRvdyhjb25zdCBQYWludEluZm8mIGluZm8sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgU2hh
ZG93U3R5bGUgc2hhZG93U3R5bGUsIGNvbnN0IExheW91dFJlY3QmIHBhaW50UmVjdCkKIHsKICAg
ICBpZiAoKCFwcmV2TGluZUJveCgpICYmICFuZXh0TGluZUJveCgpKSB8fCAhcGFyZW50KCkpCi0g
ICAgICAgIGJveE1vZGVsT2JqZWN0KCktPnBhaW50Qm94U2hhZG93KGluZm8sIHBhaW50UmVjdCwg
cywgc2hhZG93U3R5bGUpOworICAgICAgICBib3hNb2RlbE9iamVjdCgpLT5wYWludEJveFNoYWRv
dyhpbmZvLCBwYWludFJlY3QsICZzdHlsZSwgc2hhZG93U3R5bGUpOwogICAgIGVsc2UgewogICAg
ICAgICAvLyBGSVhNRTogV2UgY2FuIGRvIGJldHRlciBoZXJlIGluIHRoZSBtdWx0aS1saW5lIGNh
c2UuIFdlIHdhbnQgdG8gcHVzaCBhIGNsaXAgc28gdGhhdCB0aGUgc2hhZG93IGRvZXNuJ3QKICAg
ICAgICAgLy8gcHJvdHJ1ZGUgaW5jb3JyZWN0bHkgYXQgdGhlIGVkZ2VzLCBhbmQgd2Ugd2FudCB0
byBwb3NzaWJseSBpbmNsdWRlIHNoYWRvd3MgY2FzdCBmcm9tIHRoZSBwcmV2aW91cy9mb2xsb3dp
bmcgbGluZXMKLSAgICAgICAgYm94TW9kZWxPYmplY3QoKS0+cGFpbnRCb3hTaGFkb3coaW5mbywg
cGFpbnRSZWN0LCBzLCBzaGFkb3dTdHlsZSwgaW5jbHVkZUxvZ2ljYWxMZWZ0RWRnZSgpLCBpbmNs
dWRlTG9naWNhbFJpZ2h0RWRnZSgpKTsKKyAgICAgICAgYm94TW9kZWxPYmplY3QoKS0+cGFpbnRC
b3hTaGFkb3coaW5mbywgcGFpbnRSZWN0LCAmc3R5bGUsIHNoYWRvd1N0eWxlLCBpbmNsdWRlTG9n
aWNhbExlZnRFZGdlKCksIGluY2x1ZGVMb2dpY2FsUmlnaHRFZGdlKCkpOwogICAgIH0KIH0KIApA
QCAtMTMxNCw3ICsxMzE0LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludEJveERlY29yYXRp
b25zKAogICAgIC8vIGEgbGluZSBtYXkgYWN0dWFsbHkgaGF2ZSB0byBwYWludCBhIGJhY2tncm91
bmQuCiAgICAgaWYgKHBhcmVudCgpICYmICFyZW5kZXJlcigpLmhhc0JveERlY29yYXRpb25zKCkp
CiAgICAgICAgIHJldHVybjsKLSAgICBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGlu
ZVN0eWxlKCk7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVT
dHlsZSgpOwogICAgIGlmICghcGFyZW50KCkgJiYgKCFpc0ZpcnN0TGluZSgpIHx8ICZsaW5lU3R5
bGUgPT0gcmVuZGVyZXIoKS5zdHlsZSgpKSkKICAgICAgICAgcmV0dXJuOwogCkBAIC0xMzIzLDEx
ICsxMzIzLDExIEBAIHZvaWQgSW5saW5lRmxvd0JveDo6cGFpbnRCb3hEZWNvcmF0aW9ucygKICAg
ICBMYXlvdXRSZWN0IHBhaW50UmVjdCA9IExheW91dFJlY3QoYWRqdXN0ZWRQYWludG9mZnNldCwg
ZnJhbWVSZWN0LnNpemUoKSk7CiAgICAgLy8gU2hhZG93IGNvbWVzIGZpcnN0IGFuZCBpcyBiZWhp
bmQgdGhlIGJhY2tncm91bmQgYW5kIGJvcmRlci4KICAgICBpZiAoIWJveE1vZGVsT2JqZWN0KCkt
PmJveFNoYWRvd1Nob3VsZEJlQXBwbGllZFRvQmFja2dyb3VuZChCYWNrZ3JvdW5kQmxlZWROb25l
LCB0aGlzKSkKLSAgICAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLCAmbGluZVN0eWxlLCBO
b3JtYWwsIHBhaW50UmVjdCk7CisgICAgICAgIHBhaW50Qm94U2hhZG93KHBhaW50SW5mbywgbGlu
ZVN0eWxlLCBOb3JtYWwsIHBhaW50UmVjdCk7CiAKICAgICBDb2xvciBjID0gbGluZVN0eWxlLnZp
c2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CiAgICAgcGFp
bnRGaWxsTGF5ZXJzKHBhaW50SW5mbywgYywgbGluZVN0eWxlLmJhY2tncm91bmRMYXllcnMoKSwg
cGFpbnRSZWN0KTsKLSAgICBwYWludEJveFNoYWRvdyhwYWludEluZm8sICZsaW5lU3R5bGUsIElu
c2V0LCBwYWludFJlY3QpOworICAgIHBhaW50Qm94U2hhZG93KHBhaW50SW5mbywgbGluZVN0eWxl
LCBJbnNldCwgcGFpbnRSZWN0KTsKIAogICAgIC8vIDpmaXJzdC1saW5lIGNhbm5vdCBiZSB1c2Vk
IHRvIHB1dCBib3JkZXJzIG9uIGEgbGluZS4gQWx3YXlzIHBhaW50IGJvcmRlcnMgd2l0aCBvdXIK
ICAgICAvLyBub24tZmlyc3QtbGluZSBzdHlsZS4KQEAgLTE1NDEsOSArMTU0MSw5IEBAIExheW91
dFVuaXQgSW5saW5lRmxvd0JveDo6Y29tcHV0ZU92ZXJBbm4KICAgICAgICAgfQogCiAgICAgICAg
IGlmIChjdXJyLT5pc0lubGluZVRleHRCb3goKSkgewotICAgICAgICAgICAgUmVuZGVyU3R5bGUm
IGNoaWxkTGluZVN0eWxlID0gY3Vyci0+bGluZVN0eWxlKCk7CisgICAgICAgICAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgY2hpbGRMaW5lU3R5bGUgPSBjdXJyLT5saW5lU3R5bGUoKTsKICAgICAgICAg
ICAgIFRleHRFbXBoYXNpc1Bvc2l0aW9uIGVtcGhhc2lzTWFya1Bvc2l0aW9uOwotICAgICAgICAg
ICAgaWYgKGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNN
YXJrTm9uZSAmJiB0b0lubGluZVRleHRCb3goY3VyciktPmdldEVtcGhhc2lzTWFya1Bvc2l0aW9u
KCZjaGlsZExpbmVTdHlsZSwgZW1waGFzaXNNYXJrUG9zaXRpb24pICYmIGVtcGhhc2lzTWFya1Bv
c2l0aW9uID09IFRleHRFbXBoYXNpc1Bvc2l0aW9uT3ZlcikgeworICAgICAgICAgICAgaWYgKGNo
aWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1waGFzaXNNYXJrTm9uZSAm
JiB0b0lubGluZVRleHRCb3goY3VyciktPmdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKGNoaWxkTGlu
ZVN0eWxlLCBlbXBoYXNpc01hcmtQb3NpdGlvbikgJiYgZW1waGFzaXNNYXJrUG9zaXRpb24gPT0g
VGV4dEVtcGhhc2lzUG9zaXRpb25PdmVyKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFjaGlsZExp
bmVTdHlsZS5pc0ZsaXBwZWRMaW5lc1dyaXRpbmdNb2RlKCkpIHsKICAgICAgICAgICAgICAgICAg
ICAgaW50IHRvcE9mRW1waGFzaXNNYXJrID0gY3Vyci0+bG9naWNhbFRvcCgpIC0gY2hpbGRMaW5l
U3R5bGUuZm9udCgpLmVtcGhhc2lzTWFya0hlaWdodChjaGlsZExpbmVTdHlsZS50ZXh0RW1waGFz
aXNNYXJrU3RyaW5nKCkpOwogICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBtYXgocmVzdWx0
LCBhbGxvd2VkUG9zaXRpb24gLSB0b3BPZkVtcGhhc2lzTWFyayk7CkBAIC0xNTg5LDcgKzE1ODks
NyBAQCBMYXlvdXRVbml0IElubGluZUZsb3dCb3g6OmNvbXB1dGVVbmRlckFuCiAgICAgICAgIH0K
IAogICAgICAgICBpZiAoY3Vyci0+aXNJbmxpbmVUZXh0Qm94KCkpIHsKLSAgICAgICAgICAgIFJl
bmRlclN0eWxlJiBjaGlsZExpbmVTdHlsZSA9IGN1cnItPmxpbmVTdHlsZSgpOworICAgICAgICAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIGNoaWxkTGluZVN0eWxlID0gY3Vyci0+bGluZVN0eWxlKCk7
CiAgICAgICAgICAgICBpZiAoY2hpbGRMaW5lU3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRl
eHRFbXBoYXNpc01hcmtOb25lICYmIGNoaWxkTGluZVN0eWxlLnRleHRFbXBoYXNpc1Bvc2l0aW9u
KCkgPT0gVGV4dEVtcGhhc2lzUG9zaXRpb25VbmRlcikgewogICAgICAgICAgICAgICAgIGlmICgh
Y2hpbGRMaW5lU3R5bGUuaXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgYm90dG9tT2ZFbXBoYXNpc01hcmsgPSBjdXJyLT5sb2dpY2Fs
Qm90dG9tKCkgKyBjaGlsZExpbmVTdHlsZS5mb250KCkuZW1waGFzaXNNYXJrSGVpZ2h0KGNoaWxk
TGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtTdHJpbmcoKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDE1NjYxMSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTczLDcg
KzczLDcgQEAgcHVibGljOgogI2VuZGlmCiAKICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCYgcmVu
ZGVyZXIoKSBjb25zdCB7IHJldHVybiB0b1JlbmRlckJveE1vZGVsT2JqZWN0KElubGluZUJveDo6
cmVuZGVyZXIoKSk7IH0KLSAgICBSZW5kZXJTdHlsZSYgbGluZVN0eWxlKCkgY29uc3QgeyByZXR1
cm4gaXNGaXJzdExpbmUoKSA/ICpyZW5kZXJlcigpLmZpcnN0TGluZVN0eWxlKCkgOiAqcmVuZGVy
ZXIoKS5zdHlsZSgpOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIGlzRmlyc3RMaW5lKCkgPyAqcmVuZGVyZXIoKS5maXJzdExpbmVTdHlsZSgpIDog
KnJlbmRlcmVyKCkuc3R5bGUoKTsgfQogCiAgICAgSW5saW5lRmxvd0JveCogcHJldkxpbmVCb3go
KSBjb25zdCB7IHJldHVybiBtX3ByZXZMaW5lQm94OyB9CiAgICAgSW5saW5lRmxvd0JveCogbmV4
dExpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX25leHRMaW5lQm94OyB9CkBAIC0xMTYsNyArMTE2
LDcgQEAgcHVibGljOgogICAgIHZvaWQgcGFpbnRNYXNrKFBhaW50SW5mbyYsIGNvbnN0IExheW91
dFBvaW50Jik7CiAgICAgdm9pZCBwYWludEZpbGxMYXllcnMoY29uc3QgUGFpbnRJbmZvJiwgY29u
c3QgQ29sb3ImLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBMYXlvdXRSZWN0JiwgQ29tcG9zaXRl
T3BlcmF0b3IgPSBDb21wb3NpdGVTb3VyY2VPdmVyKTsKICAgICB2b2lkIHBhaW50RmlsbExheWVy
KGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IENvbG9yJiwgY29uc3QgRmlsbExheWVyKiwgY29uc3Qg
TGF5b3V0UmVjdCYsIENvbXBvc2l0ZU9wZXJhdG9yID0gQ29tcG9zaXRlU291cmNlT3Zlcik7Ci0g
ICAgdm9pZCBwYWludEJveFNoYWRvdyhjb25zdCBQYWludEluZm8mLCBSZW5kZXJTdHlsZSosIFNo
YWRvd1N0eWxlLCBjb25zdCBMYXlvdXRSZWN0Jik7CisgICAgdm9pZCBwYWludEJveFNoYWRvdyhj
b25zdCBQYWludEluZm8mLCBjb25zdCBSZW5kZXJTdHlsZSYsIFNoYWRvd1N0eWxlLCBjb25zdCBM
YXlvdXRSZWN0Jik7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGNvbnN0IExh
eW91dFBvaW50JiwgTGF5b3V0VW5pdCBsaW5lVG9wLCBMYXlvdXRVbml0IGxpbmVCb3R0b20pOwog
ICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRl
c3RSZXN1bHQmLCBjb25zdCBIaXRUZXN0TG9jYXRpb24mIGxvY2F0aW9uSW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCwgTGF5b3V0VW5pdCBsaW5lVG9wLCBM
YXlvdXRVbml0IGxpbmVCb3R0b20pIE9WRVJSSURFOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShyZXZpc2lvbiAxNTY2MTEpCisrKyBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3
OSw5ICsxNzksOSBAQCBSZW5kZXJPYmplY3Q6OlNlbGVjdGlvblN0YXRlIElubGluZVRleHRCCiAg
ICAgcmV0dXJuIHN0YXRlOwogfQogCi1zdGF0aWMgdm9pZCBhZGp1c3RDaGFyYWN0ZXJzQW5kTGVu
Z3RoRm9ySHlwaGVuKEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiYgY2hhcmFjdGVyc1dpdGhIeXBo
ZW4sIFJlbmRlclN0eWxlKiBzdHlsZSwgU3RyaW5nJiBzdHJpbmcsIGludCYgbGVuZ3RoKQorc3Rh
dGljIHZvaWQgYWRqdXN0Q2hhcmFjdGVyc0FuZExlbmd0aEZvckh5cGhlbihCdWZmZXJGb3JBcHBl
bmRpbmdIeXBoZW4mIGNoYXJhY3RlcnNXaXRoSHlwaGVuLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIFN0cmluZyYgc3RyaW5nLCBpbnQmIGxlbmd0aCkKIHsKLSAgICBjb25zdCBBdG9taWNTdHJp
bmcmIGh5cGhlblN0cmluZyA9IHN0eWxlLT5oeXBoZW5TdHJpbmcoKTsKKyAgICBjb25zdCBBdG9t
aWNTdHJpbmcmIGh5cGhlblN0cmluZyA9IHN0eWxlLmh5cGhlblN0cmluZygpOwogICAgIGNoYXJh
Y3RlcnNXaXRoSHlwaGVuLnJlc2VydmVDYXBhY2l0eShsZW5ndGggKyBoeXBoZW5TdHJpbmcubGVu
Z3RoKCkpOwogICAgIGNoYXJhY3RlcnNXaXRoSHlwaGVuLmFwcGVuZChzdHJpbmcpOwogICAgIGNo
YXJhY3RlcnNXaXRoSHlwaGVuLmFwcGVuZChoeXBoZW5TdHJpbmcpOwpAQCAtMjExLDEyICsyMTEs
MTIgQEAgTGF5b3V0UmVjdCBJbmxpbmVUZXh0Qm94Ojpsb2NhbFNlbGVjdGlvbgogCiAgICAgTGF5
b3V0VW5pdCBzZWxUb3AgPSBzZWxlY3Rpb25Ub3AoKTsKICAgICBMYXlvdXRVbml0IHNlbEhlaWdo
dCA9IHNlbGVjdGlvbkhlaWdodCgpOwotICAgIFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlz
LT5saW5lU3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+
bGluZVN0eWxlKCk7CiAgICAgY29uc3QgRm9udCYgZm9udCA9IGZvbnRUb1VzZShsaW5lU3R5bGUs
IHJlbmRlcmVyKCkpOwogCiAgICAgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuIGNoYXJhY3RlcnNX
aXRoSHlwaGVuOwogICAgIGJvb2wgcmVzcGVjdEh5cGhlbiA9IGVQb3MgPT0gbV9sZW4gJiYgaGFz
SHlwaGVuKCk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bigmbGluZVN0
eWxlLCBmb250LCByZXNwZWN0SHlwaGVuID8gJmNoYXJhY3RlcnNXaXRoSHlwaGVuIDogMCk7Cisg
ICAgVGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIGZvbnQsIHJl
c3BlY3RIeXBoZW4gPyAmY2hhcmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKICAgICBpZiAocmVzcGVj
dEh5cGhlbikKICAgICAgICAgZW5kUG9zID0gdGV4dFJ1bi5sZW5ndGgoKTsKIApAQCAtNDg1LDEz
ICs0ODUsMTMgQEAgc3RhdGljIHZvaWQgcGFpbnRUZXh0V2l0aFNoYWRvd3MoR3JhcGhpYwogICAg
IH0gd2hpbGUgKHNoYWRvdyB8fCBzdHJva2VkIHx8ICFvcGFxdWUpOwogfQogCi1ib29sIElubGlu
ZVRleHRCb3g6OmdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4
dEVtcGhhc2lzUG9zaXRpb24mIGVtcGhhc2lzUG9zaXRpb24pIGNvbnN0Citib29sIElubGluZVRl
eHRCb3g6OmdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
VGV4dEVtcGhhc2lzUG9zaXRpb24mIGVtcGhhc2lzUG9zaXRpb24pIGNvbnN0CiB7CiAgICAgLy8g
VGhpcyBmdW5jdGlvbiByZXR1cm5zIHRydWUgaWYgdGhlcmUgYXJlIHRleHQgZW1waGFzaXMgbWFy
a3MgYW5kIHRoZXkgYXJlIHN1cHByZXNzZWQgYnkgcnVieSB0ZXh0LgotICAgIGlmIChzdHlsZS0+
dGV4dEVtcGhhc2lzTWFyaygpID09IFRleHRFbXBoYXNpc01hcmtOb25lKQorICAgIGlmIChzdHls
ZS50ZXh0RW1waGFzaXNNYXJrKCkgPT0gVGV4dEVtcGhhc2lzTWFya05vbmUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKIAotICAgIGVtcGhhc2lzUG9zaXRpb24gPSBzdHlsZS0+dGV4dEVtcGhhc2lz
UG9zaXRpb24oKTsKKyAgICBlbXBoYXNpc1Bvc2l0aW9uID0gc3R5bGUudGV4dEVtcGhhc2lzUG9z
aXRpb24oKTsKICAgICBpZiAoZW1waGFzaXNQb3NpdGlvbiA9PSBUZXh0RW1waGFzaXNQb3NpdGlv
blVuZGVyKQogICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gUnVieSB0ZXh0IGlzIGFsd2F5cyBvdmVy
LCBzbyBpdCBjYW5ub3Qgc3VwcHJlc3MgZW1waGFzaXMgbWFya3MgdW5kZXIuCiAKQEAgLTU2NCw3
ICs1NjQsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAKICAg
ICBHcmFwaGljc0NvbnRleHQqIGNvbnRleHQgPSBwYWludEluZm8uY29udGV4dDsKIAotICAgIFJl
bmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKKyAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7CiAgICAgCiAgICAgYWRqdXN0
ZWRQYWludE9mZnNldC5tb3ZlKDAsIGxpbmVTdHlsZS5pc0hvcml6b250YWxXcml0aW5nTW9kZSgp
ID8gMCA6IC1sb2dpY2FsSGVpZ2h0KCkpOwogCkBAIC02ODcsMTQgKzY4NywxNCBAQCB2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFpCiAjZW5kaWYKIAogICAgICAgICBpZiAo
Y29udGFpbnNDb21wb3NpdGlvbiAmJiAhdXNlQ3VzdG9tVW5kZXJsaW5lcykKLSAgICAgICAgICAg
IHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKGNvbnRleHQsIGJveE9yaWdpbiwgJmxpbmVTdHls
ZSwgZm9udCwKKyAgICAgICAgICAgIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKGNvbnRleHQs
IGJveE9yaWdpbiwgbGluZVN0eWxlLCBmb250LAogICAgICAgICAgICAgICAgIHJlbmRlcmVyKCku
ZnJhbWUoKS5lZGl0b3IoKS5jb21wb3NpdGlvblN0YXJ0KCksCiAgICAgICAgICAgICAgICAgcmVu
ZGVyZXIoKS5mcmFtZSgpLmVkaXRvcigpLmNvbXBvc2l0aW9uRW5kKCkpOwogCi0gICAgICAgIHBh
aW50RG9jdW1lbnRNYXJrZXJzKGNvbnRleHQsIGJveE9yaWdpbiwgJmxpbmVTdHlsZSwgZm9udCwg
dHJ1ZSk7CisgICAgICAgIHBhaW50RG9jdW1lbnRNYXJrZXJzKGNvbnRleHQsIGJveE9yaWdpbiwg
bGluZVN0eWxlLCBmb250LCB0cnVlKTsKIAogICAgICAgICBpZiAoaGF2ZVNlbGVjdGlvbiAmJiAh
dXNlQ3VzdG9tVW5kZXJsaW5lcykKLSAgICAgICAgICAgIHBhaW50U2VsZWN0aW9uKGNvbnRleHQs
IGJveE9yaWdpbiwgJmxpbmVTdHlsZSwgZm9udCwgc2VsZWN0aW9uRmlsbENvbG9yKTsKKyAgICAg
ICAgICAgIHBhaW50U2VsZWN0aW9uKGNvbnRleHQsIGJveE9yaWdpbiwgbGluZVN0eWxlLCBmb250
LCBzZWxlY3Rpb25GaWxsQ29sb3IpOwogICAgIH0KIAogICAgIGlmIChQYWdlKiBwYWdlID0gcmVu
ZGVyZXIoKS5mcmFtZSgpLnBhZ2UoKSkgewpAQCAtNzIzLDcgKzcyMyw3IEBAIHZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnQoUGFpbnRJbmZvJiBwYWkKICAgICB9CiAKICAgICBCdWZmZXJGb3JBcHBl
bmRpbmdIeXBoZW4gY2hhcmFjdGVyc1dpdGhIeXBoZW47Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0g
Y29uc3RydWN0VGV4dFJ1bigmbGluZVN0eWxlLCBmb250LCBzdHJpbmcsIG1heGltdW1MZW5ndGgs
IGhhc0h5cGhlbigpID8gJmNoYXJhY3RlcnNXaXRoSHlwaGVuIDogMCk7CisgICAgVGV4dFJ1biB0
ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bihsaW5lU3R5bGUsIGZvbnQsIHN0cmluZywgbWF4aW11
bUxlbmd0aCwgaGFzSHlwaGVuKCkgPyAmY2hhcmFjdGVyc1dpdGhIeXBoZW4gOiAwKTsKICAgICBp
ZiAoaGFzSHlwaGVuKCkpCiAgICAgICAgIGxlbmd0aCA9IHRleHRSdW4ubGVuZ3RoKCk7CiAKQEAg
LTc0MCw3ICs3NDAsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFBhaW50SW5mbyYgcGFp
CiAKICAgICBpbnQgZW1waGFzaXNNYXJrT2Zmc2V0ID0gMDsKICAgICBUZXh0RW1waGFzaXNQb3Np
dGlvbiBlbXBoYXNpc01hcmtQb3NpdGlvbjsKLSAgICBib29sIGhhc1RleHRFbXBoYXNpcyA9IGdl
dEVtcGhhc2lzTWFya1Bvc2l0aW9uKCZsaW5lU3R5bGUsIGVtcGhhc2lzTWFya1Bvc2l0aW9uKTsK
KyAgICBib29sIGhhc1RleHRFbXBoYXNpcyA9IGdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKGxpbmVT
dHlsZSwgZW1waGFzaXNNYXJrUG9zaXRpb24pOwogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZW1w
aGFzaXNNYXJrID0gaGFzVGV4dEVtcGhhc2lzID8gbGluZVN0eWxlLnRleHRFbXBoYXNpc01hcmtT
dHJpbmcoKSA6IG51bGxBdG9tOwogICAgIGlmICghZW1waGFzaXNNYXJrLmlzRW1wdHkoKSkKICAg
ICAgICAgZW1waGFzaXNNYXJrT2Zmc2V0ID0gZW1waGFzaXNNYXJrUG9zaXRpb24gPT0gVGV4dEVt
cGhhc2lzUG9zaXRpb25PdmVyID8gLWZvbnQuZm9udE1ldHJpY3MoKS5hc2NlbnQoKSAtIGZvbnQu
ZW1waGFzaXNNYXJrRGVzY2VudChlbXBoYXNpc01hcmspIDogZm9udC5mb250TWV0cmljcygpLmRl
c2NlbnQoKSArIGZvbnQuZW1waGFzaXNNYXJrQXNjZW50KGVtcGhhc2lzTWFyayk7CkBAIC04MTEs
NyArODExLDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChQYWludEluZm8mIHBhaQogICAg
IH0KIAogICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsK
LSAgICAgICAgcGFpbnREb2N1bWVudE1hcmtlcnMoY29udGV4dCwgYm94T3JpZ2luLCAmbGluZVN0
eWxlLCBmb250LCBmYWxzZSk7CisgICAgICAgIHBhaW50RG9jdW1lbnRNYXJrZXJzKGNvbnRleHQs
IGJveE9yaWdpbiwgbGluZVN0eWxlLCBmb250LCBmYWxzZSk7CiAKICAgICAgICAgaWYgKHVzZUN1
c3RvbVVuZGVybGluZXMpIHsKICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxDb21wb3NpdGlvblVu
ZGVybGluZT4mIHVuZGVybGluZXMgPSByZW5kZXJlcigpLmZyYW1lKCkuZWRpdG9yKCkuY3VzdG9t
Q29tcG9zaXRpb25VbmRlcmxpbmVzKCk7CkBAIC04NjgsNyArODY4LDcgQEAgdm9pZCBhbGlnblNl
bGVjdGlvblJlY3RUb0RldmljZVBpeGVscyhGbAogICAgIHJlY3Quc2V0V2lkdGgocm91bmRmKG1h
eFggLSByZWN0LngoKSkpOwogfQogCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9u
KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBS
ZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQsIENvbG9yIHRleHRDb2xvcikKK3Zv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwg
Y29uc3QgRm9udCYgZm9udCwgQ29sb3IgdGV4dENvbG9yKQogewogICAgIGlmIChjb250ZXh0LT5w
YWludGluZ0Rpc2FibGVkKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTg4OSw3ICs4ODksNyBAQCB2
b2lkIElubGluZVRleHRCb3g6OnBhaW50U2VsZWN0aW9uKEdyYXBoCiAgICAgICAgIGMgPSBDb2xv
cigweGZmIC0gYy5yZWQoKSwgMHhmZiAtIGMuZ3JlZW4oKSwgMHhmZiAtIGMuYmx1ZSgpKTsKIAog
ICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY29udGV4dCk7Ci0gICAg
dXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIGMsIGMsIDAsIHN0eWxlLT5jb2xvclNwYWNl
KCkpOyAgLy8gRG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKKyAgICB1cGRhdGVHcmFwaGljc0NvbnRl
eHQoY29udGV4dCwgYywgYywgMCwgc3R5bGUuY29sb3JTcGFjZSgpKTsgLy8gRG9uJ3QgZHJhdyB0
ZXh0IGF0IGFsbCEKICAgICAKICAgICAvLyBJZiB0aGUgdGV4dCBpcyB0cnVuY2F0ZWQsIGxldCB0
aGUgdGhpbmcgYmVpbmcgcGFpbnRlZCBpbiB0aGUgdHJ1bmNhdGlvbgogICAgIC8vIGRyYXcgaXRz
IG93biBoaWdobGlnaHQuCkBAIC05MjAsMTAgKzkyMCwxMCBAQCB2b2lkIElubGluZVRleHRCb3g6
OnBhaW50U2VsZWN0aW9uKEdyYXBoCiAKICAgICBjb250ZXh0LT5jbGlwKGNsaXBSZWN0KTsKIAot
ICAgIGNvbnRleHQtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2FsT3Jp
Z2luLCBzZWxIZWlnaHQsIGMsIHN0eWxlLT5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOworICAg
IGNvbnRleHQtPmRyYXdIaWdobGlnaHRGb3JUZXh0KGZvbnQsIHRleHRSdW4sIGxvY2FsT3JpZ2lu
LCBzZWxIZWlnaHQsIGMsIHN0eWxlLmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7CiB9CiAKLXZv
aWQgSW5saW5lVGV4dEJveDo6cGFpbnRDb21wb3NpdGlvbkJhY2tncm91bmQoR3JhcGhpY3NDb250
ZXh0KiBjb250ZXh0LCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiBz
dHlsZSwgY29uc3QgRm9udCYgZm9udCwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKQordm9pZCBJ
bmxpbmVUZXh0Qm94OjpwYWludENvbXBvc2l0aW9uQmFja2dyb3VuZChHcmFwaGljc0NvbnRleHQq
IGNvbnRleHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBjb25zdCBGb250JiBmb250LCBpbnQgc3RhcnRQb3MsIGludCBlbmRQb3MpCiB7CiAg
ICAgaW50IG9mZnNldCA9IG1fc3RhcnQ7CiAgICAgaW50IHNQb3MgPSBtYXgoc3RhcnRQb3MgLSBv
ZmZzZXQsIDApOwpAQCAtOTM2LDEyICs5MzYsMTIgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWlu
dENvbXBvc2l0aW9uQmFjawogCiAgICAgQ29sb3IgYyA9IENvbG9yKDIyNSwgMjIxLCA4NSk7CiAg
ICAgCi0gICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KGNvbnRleHQsIGMsIGMsIDAsIHN0eWxlLT5j
b2xvclNwYWNlKCkpOyAvLyBEb24ndCBkcmF3IHRleHQgYXQgYWxsIQorICAgIHVwZGF0ZUdyYXBo
aWNzQ29udGV4dChjb250ZXh0LCBjLCBjLCAwLCBzdHlsZS5jb2xvclNwYWNlKCkpOyAvLyBEb24n
dCBkcmF3IHRleHQgYXQgYWxsIQogCiAgICAgaW50IGRlbHRhWSA9IHJlbmRlcmVyKCkuc3R5bGUo
KS0+aXNGbGlwcGVkTGluZXNXcml0aW5nTW9kZSgpID8gc2VsZWN0aW9uQm90dG9tKCkgLSBsb2dp
Y2FsQm90dG9tKCkgOiBsb2dpY2FsVG9wKCkgLSBzZWxlY3Rpb25Ub3AoKTsKICAgICBpbnQgc2Vs
SGVpZ2h0ID0gc2VsZWN0aW9uSGVpZ2h0KCk7CiAgICAgRmxvYXRQb2ludCBsb2NhbE9yaWdpbihi
b3hPcmlnaW4ueCgpLCBib3hPcmlnaW4ueSgpIC0gZGVsdGFZKTsKLSAgICBjb250ZXh0LT5kcmF3
SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBjb25zdHJ1Y3RUZXh0UnVuKHN0eWxlLCBmb250KSwgbG9j
YWxPcmlnaW4sIHNlbEhlaWdodCwgYywgc3R5bGUtPmNvbG9yU3BhY2UoKSwgc1BvcywgZVBvcyk7
CisgICAgY29udGV4dC0+ZHJhd0hpZ2hsaWdodEZvclRleHQoZm9udCwgY29uc3RydWN0VGV4dFJ1
bihzdHlsZSwgZm9udCksIGxvY2FsT3JpZ2luLCBzZWxIZWlnaHQsIGMsIHN0eWxlLmNvbG9yU3Bh
Y2UoKSwgc1BvcywgZVBvcyk7CiB9CiAKICNpZiBQTEFURk9STShNQUMpCkBAIC0xMTY3LDcgKzEx
NjcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50RGVjb3JhdGlvbihHcmFwCiAKICAgICBi
b29sIGxpbmVzQXJlT3BhcXVlID0gIWlzUHJpbnRpbmcgJiYgKCEoZGVjbyAmIFRleHREZWNvcmF0
aW9uVW5kZXJsaW5lKSB8fCB1bmRlcmxpbmUuYWxwaGEoKSA9PSAyNTUpICYmICghKGRlY28gJiBU
ZXh0RGVjb3JhdGlvbk92ZXJsaW5lKSB8fCBvdmVybGluZS5hbHBoYSgpID09IDI1NSkgJiYgKCEo
ZGVjbyAmIFRleHREZWNvcmF0aW9uTGluZVRocm91Z2gpIHx8IGxpbmV0aHJvdWdoLmFscGhhKCkg
PT0gMjU1KTsKIAotICAgIFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUo
KTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbGluZVN0eWxlID0gdGhpcy0+bGluZVN0eWxlKCk7
CiAgICAgaW50IGJhc2VsaW5lID0gbGluZVN0eWxlLmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7CiAK
ICAgICBib29sIHNldENsaXAgPSBmYWxzZTsKQEAgLTEzMDAsNyArMTMwMCw3IEBAIHN0YXRpYyBH
cmFwaGljc0NvbnRleHQ6OkRvY3VtZW50TWFya2VyTGkKICAgICB9CiB9CiAKLXZvaWQgSW5saW5l
VGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcihHcmFwaGljc0NvbnRleHQqIHB0LCBjb25zdCBG
bG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgRm9udCYgZm9udCwgYm9vbCBncmFtbWFyKQordm9pZCBJbmxpbmVUZXh0
Qm94OjpwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0
UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqIG1hcmtlciwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGdyYW1tYXIpCiB7CiAgICAgLy8gTmV2
ZXIgcHJpbnQgc3BlbGxpbmcvZ3JhbW1hciBtYXJrZXJzICg1MzI3ODg3KQogICAgIGlmIChyZW5k
ZXJlcigpLmRvY3VtZW50KCkucHJpbnRpbmcoKSkKQEAgLTEzNjksNyArMTM2OSw3IEBAIHZvaWQg
SW5saW5lVGV4dEJveDo6cGFpbnREb2N1bWVudE1hcmtlcigKICAgICBwdC0+ZHJhd0xpbmVGb3JE
b2N1bWVudE1hcmtlcihGbG9hdFBvaW50KGJveE9yaWdpbi54KCkgKyBzdGFydCwgYm94T3JpZ2lu
LnkoKSArIHVuZGVybGluZU9mZnNldCksIHdpZHRoLCBsaW5lU3R5bGVGb3JNYXJrZXJUeXBlKG1h
cmtlci0+dHlwZSgpKSk7CiB9CiAKLXZvaWQgSW5saW5lVGV4dEJveDo6cGFpbnRUZXh0TWF0Y2hN
YXJrZXIoR3JhcGhpY3NDb250ZXh0KiBwdCwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBE
b2N1bWVudE1hcmtlciogbWFya2VyLCBSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IEZvbnQmIGZv
bnQpCit2b2lkIElubGluZVRleHRCb3g6OnBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29u
dGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqIG1h
cmtlciwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250KQogewogICAg
IC8vIFVzZSBzYW1lIHkgcG9zaXRpb25pbmcgYW5kIGhlaWdodCBhcyBmb3Igc2VsZWN0aW9uLCBz
byB0aGF0IHdoZW4gdGhlIHNlbGVjdGlvbiBhbmQgdGhpcyBoaWdobGlnaHQgYXJlIG9uCiAgICAg
Ly8gdGhlIHNhbWUgd29yZCB0aGVyZSBhcmUgbm8gcGllY2VzIHN0aWNraW5nIG91dC4KQEAgLTEz
OTEsMTMgKzEzOTEsMTMgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludFRleHRNYXRjaE1hcmtl
cgogICAgICAgICAgICAgcmVuZGVyZXIoKS50aGVtZSgpLT5wbGF0Zm9ybUFjdGl2ZVRleHRTZWFy
Y2hIaWdobGlnaHRDb2xvcigpIDoKICAgICAgICAgICAgIHJlbmRlcmVyKCkudGhlbWUoKS0+cGxh
dGZvcm1JbmFjdGl2ZVRleHRTZWFyY2hIaWdobGlnaHRDb2xvcigpOwogICAgICAgICBHcmFwaGlj
c0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKnB0KTsKLSAgICAgICAgdXBkYXRlR3JhcGhp
Y3NDb250ZXh0KHB0LCBjb2xvciwgY29sb3IsIDAsIHN0eWxlLT5jb2xvclNwYWNlKCkpOyAgLy8g
RG9uJ3QgZHJhdyB0ZXh0IGF0IGFsbCEKKyAgICAgICAgdXBkYXRlR3JhcGhpY3NDb250ZXh0KHB0
LCBjb2xvciwgY29sb3IsIDAsIHN0eWxlLmNvbG9yU3BhY2UoKSk7IC8vIERvbid0IGRyYXcgdGV4
dCBhdCBhbGwhCiAgICAgICAgIHB0LT5jbGlwKEZsb2F0UmVjdChib3hPcmlnaW4ueCgpLCBib3hP
cmlnaW4ueSgpIC0gZGVsdGFZLCBtX2xvZ2ljYWxXaWR0aCwgc2VsSGVpZ2h0KSk7Ci0gICAgICAg
IHB0LT5kcmF3SGlnaGxpZ2h0Rm9yVGV4dChmb250LCBydW4sIEZsb2F0UG9pbnQoYm94T3JpZ2lu
LngoKSwgYm94T3JpZ2luLnkoKSAtIGRlbHRhWSksIHNlbEhlaWdodCwgY29sb3IsIHN0eWxlLT5j
b2xvclNwYWNlKCksIHNQb3MsIGVQb3MpOworICAgICAgICBwdC0+ZHJhd0hpZ2hsaWdodEZvclRl
eHQoZm9udCwgcnVuLCBGbG9hdFBvaW50KGJveE9yaWdpbi54KCksIGJveE9yaWdpbi55KCkgLSBk
ZWx0YVkpLCBzZWxIZWlnaHQsIGNvbG9yLCBzdHlsZS5jb2xvclNwYWNlKCksIHNQb3MsIGVQb3Mp
OwogICAgIH0KIH0KIAotdm9pZCBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhY2Vt
ZW50TWFya2VyKERvY3VtZW50TWFya2VyKiBtYXJrZXIsIFJlbmRlclN0eWxlKiBzdHlsZSwgY29u
c3QgRm9udCYgZm9udCkKK3ZvaWQgSW5saW5lVGV4dEJveDo6Y29tcHV0ZVJlY3RGb3JSZXBsYWNl
bWVudE1hcmtlcihEb2N1bWVudE1hcmtlciogbWFya2VyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAgICAgLy8gUmVwbGFjZW1lbnQgbWFya2VycyBhcmUg
bm90IGFjdHVhbGx5IGRyYXduLCBidXQgdGhlaXIgcmVjdHMgbmVlZCB0byBiZSBjb21wdXRlZCBm
b3IgaGl0IHRlc3RpbmcuCiAgICAgaW50IHRvcCA9IHNlbGVjdGlvblRvcCgpOwpAQCAtMTQxNCw3
ICsxNDE0LDcgQEAgdm9pZCBJbmxpbmVUZXh0Qm94Ojpjb21wdXRlUmVjdEZvclJlcGxhYwogICAg
IHRvUmVuZGVyZWREb2N1bWVudE1hcmtlcihtYXJrZXIpLT5zZXRSZW5kZXJlZFJlY3QobWFya2Vy
UmVjdCk7CiB9CiAgICAgCi12b2lkIElubGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJz
KEdyYXBoaWNzQ29udGV4dCogcHQsIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVy
U3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBib29sIGJhY2tncm91bmQpCit2b2lkIElu
bGluZVRleHRCb3g6OnBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4dCogcHQsIGNv
bnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25z
dCBGb250JiBmb250LCBib29sIGJhY2tncm91bmQpCiB7CiAgICAgaWYgKCFyZW5kZXJlcigpLnRl
eHROb2RlKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTE1NTMsOSArMTU1Myw5IEBAIGludCBJbmxp
bmVUZXh0Qm94OjpvZmZzZXRGb3JQb3NpdGlvbihmbG8KIAogICAgIEZvbnRDYWNoZVB1cmdlUHJl
dmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwogCi0gICAgUmVuZGVyU3R5bGUmIGxpbmVT
dHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5
bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICBjb25zdCBGb250JiBmb250ID0gZm9udFRvVXNl
KGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7Ci0gICAgcmV0dXJuIGZvbnQub2Zmc2V0Rm9yUG9zaXRp
b24oY29uc3RydWN0VGV4dFJ1bigmbGluZVN0eWxlLCBmb250KSwgbGluZU9mZnNldCAtIGxvZ2lj
YWxMZWZ0KCksIGluY2x1ZGVQYXJ0aWFsR2x5cGhzKTsKKyAgICByZXR1cm4gZm9udC5vZmZzZXRG
b3JQb3NpdGlvbihjb25zdHJ1Y3RUZXh0UnVuKGxpbmVTdHlsZSwgZm9udCksIGxpbmVPZmZzZXQg
LSBsb2dpY2FsTGVmdCgpLCBpbmNsdWRlUGFydGlhbEdseXBocyk7CiB9CiAKIGZsb2F0IElubGlu
ZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CkBAIC0xNTY4LDEy
ICsxNTY4LDEyIEBAIGZsb2F0IElubGluZVRleHRCb3g6OnBvc2l0aW9uRm9yT2Zmc2V0KGkKIAog
ICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwogCi0g
ICAgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSA9IHRoaXMtPmxpbmVTdHlsZSgpOworICAgIGNvbnN0
IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUgPSB0aGlzLT5saW5lU3R5bGUoKTsKICAgICBjb25zdCBG
b250JiBmb250ID0gZm9udFRvVXNlKGxpbmVTdHlsZSwgcmVuZGVyZXIoKSk7CiAgICAgaW50IGZy
b20gPSAhaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gb2Zmc2V0IC0gbV9zdGFydCA6IDA7CiAg
ICAgaW50IHRvID0gIWlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG1fbGVuIDogb2Zmc2V0IC0g
bV9zdGFydDsKICAgICAvLyBGSVhNRTogRG8gd2UgbmVlZCB0byBhZGQgcmlnaHRCZWFyaW5nIGhl
cmU/Ci0gICAgcmV0dXJuIGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3RydWN0VGV4dFJ1
bigmbGluZVN0eWxlLCBmb250KSwgSW50UG9pbnQobG9naWNhbExlZnQoKSwgMCksIDAsIGZyb20s
IHRvKS5tYXhYKCk7CisgICAgcmV0dXJuIGZvbnQuc2VsZWN0aW9uUmVjdEZvclRleHQoY29uc3Ry
dWN0VGV4dFJ1bihsaW5lU3R5bGUsIGZvbnQpLCBJbnRQb2ludChsb2dpY2FsTGVmdCgpLCAwKSwg
MCwgZnJvbSwgdG8pLm1heFgoKTsKIH0KIAogYm9vbCBJbmxpbmVUZXh0Qm94Ojpjb250YWluc0Nh
cmV0T2Zmc2V0KGludCBvZmZzZXQpIGNvbnN0CkBAIC0xNjAwLDkgKzE2MDAsOCBAQCBib29sIElu
bGluZVRleHRCb3g6OmNvbnRhaW5zQ2FyZXRPZmZzZXQoCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LVRleHRSdW4gSW5saW5lVGV4dEJveDo6Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSogc3R5
bGUsIGNvbnN0IEZvbnQmIGZvbnQsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogY2hhcmFjdGVy
c1dpdGhIeXBoZW4pIGNvbnN0CitUZXh0UnVuIElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRS
dW4oY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBCdWZmZXJGb3JB
cHBlbmRpbmdIeXBoZW4qIGNoYXJhY3RlcnNXaXRoSHlwaGVuKSBjb25zdAogewotICAgIEFTU0VS
VChzdHlsZSk7CiAgICAgQVNTRVJUKHJlbmRlcmVyKCkudGV4dCgpKTsKIAogICAgIFN0cmluZyBz
dHJpbmcgPSByZW5kZXJlcigpLnRleHQoKTsKQEAgLTE2MTUsMTAgKzE2MTQsOCBAQCBUZXh0UnVu
IElubGluZVRleHRCb3g6OmNvbnN0cnVjdFRleHRSdW4oCiAgICAgcmV0dXJuIGNvbnN0cnVjdFRl
eHRSdW4oc3R5bGUsIGZvbnQsIHN0cmluZywgcmVuZGVyZXIoKS50ZXh0TGVuZ3RoKCkgLSBzdGFy
dFBvcywgY2hhcmFjdGVyc1dpdGhIeXBoZW4pOwogfQogCi1UZXh0UnVuIElubGluZVRleHRCb3g6
OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250JiBmb250LCBT
dHJpbmcgc3RyaW5nLCBpbnQgbWF4aW11bUxlbmd0aCwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVu
KiBjaGFyYWN0ZXJzV2l0aEh5cGhlbikgY29uc3QKK1RleHRSdW4gSW5saW5lVGV4dEJveDo6Y29u
c3RydWN0VGV4dFJ1bihjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZvbnQs
IFN0cmluZyBzdHJpbmcsIGludCBtYXhpbXVtTGVuZ3RoLCBCdWZmZXJGb3JBcHBlbmRpbmdIeXBo
ZW4qIGNoYXJhY3RlcnNXaXRoSHlwaGVuKSBjb25zdAogewotICAgIEFTU0VSVChzdHlsZSk7Ci0K
ICAgICBpbnQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogCiAgICAgaWYgKGNoYXJhY3RlcnNX
aXRoSHlwaGVuKSB7CkBAIC0xNjI4LDggKzE2MjUsOCBAQCBUZXh0UnVuIElubGluZVRleHRCb3g6
OmNvbnN0cnVjdFRleHRSdW4oCiAKICAgICBBU1NFUlQobWF4aW11bUxlbmd0aCA+PSBsZW5ndGgp
OwogCi0gICAgVGV4dFJ1biBydW4oc3RyaW5nLCB0ZXh0UG9zKCksIGV4cGFuc2lvbigpLCBleHBh
bnNpb25CZWhhdmlvcigpLCBkaXJlY3Rpb24oKSwgZGlyT3ZlcnJpZGUoKSB8fCBzdHlsZS0+cnRs
T3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciwgIXJlbmRlcmVyKCkuY2FuVXNlU2ltcGxlRm9udENv
ZGVQYXRoKCkpOwotICAgIHJ1bi5zZXRUYWJTaXplKCFzdHlsZS0+Y29sbGFwc2VXaGl0ZVNwYWNl
KCksIHN0eWxlLT50YWJTaXplKCkpOworICAgIFRleHRSdW4gcnVuKHN0cmluZywgdGV4dFBvcygp
LCBleHBhbnNpb24oKSwgZXhwYW5zaW9uQmVoYXZpb3IoKSwgZGlyZWN0aW9uKCksIGRpck92ZXJy
aWRlKCkgfHwgc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlciwgIXJlbmRlcmVyKCku
Y2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKCkpOworICAgIHJ1bi5zZXRUYWJTaXplKCFzdHlsZS5j
b2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUudGFiU2l6ZSgpKTsKICAgICBpZiAodGV4dFJ1bk5l
ZWRzUmVuZGVyaW5nQ29udGV4dChmb250KSkKICAgICAgICAgcnVuLnNldFJlbmRlcmluZ0NvbnRl
eHQoU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQ6OmNyZWF0ZSgmcmVuZGVyZXIoKSkpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHJldmlzaW9uIDE1
NjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmgJKHdvcmtp
bmcgY29weSkKQEAgLTU4LDcgKzU4LDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIFJlbmRlclRl
eHQmIHJlbmRlcmVyKCkgY29uc3QgeyByZXR1cm4gdG9SZW5kZXJUZXh0KElubGluZUJveDo6cmVu
ZGVyZXIoKSk7IH0KLSAgICBSZW5kZXJTdHlsZSYgbGluZVN0eWxlKCkgY29uc3QgeyByZXR1cm4g
aXNGaXJzdExpbmUoKSA/ICpyZW5kZXJlcigpLmZpcnN0TGluZVN0eWxlKCkgOiAqcmVuZGVyZXIo
KS5zdHlsZSgpOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGxpbmVTdHlsZSgpIGNvbnN0IHsg
cmV0dXJuIGlzRmlyc3RMaW5lKCkgPyAqcmVuZGVyZXIoKS5maXJzdExpbmVTdHlsZSgpIDogKnJl
bmRlcmVyKCkuc3R5bGUoKTsgfQogCiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koUmVuZGVyQXJl
bmEmKSBPVkVSUklERSBGSU5BTDsKIApAQCAtOTEsNyArOTEsNyBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihGb250QmFzZWxpbmUpIGNvbnN0IE9WRVJSSURFIEZJ
TkFMOwogICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBsaW5lSGVpZ2h0KCkgY29uc3QgT1ZFUlJJREUg
RklOQUw7CiAKLSAgICBib29sIGdldEVtcGhhc2lzTWFya1Bvc2l0aW9uKFJlbmRlclN0eWxlKiwg
VGV4dEVtcGhhc2lzUG9zaXRpb24mKSBjb25zdDsKKyAgICBib29sIGdldEVtcGhhc2lzTWFya1Bv
c2l0aW9uKGNvbnN0IFJlbmRlclN0eWxlJiwgVGV4dEVtcGhhc2lzUG9zaXRpb24mKSBjb25zdDsK
IAogICAgIExheW91dFJlY3QgbG9naWNhbE92ZXJmbG93UmVjdCgpIGNvbnN0OwogICAgIHZvaWQg
c2V0TG9naWNhbE92ZXJmbG93UmVjdChjb25zdCBMYXlvdXRSZWN0Jik7CkBAIC0xMTAsOCArMTEw
LDggQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IHNlbGVjdGlvbkJvdHRvbSgpOwogICAgIExh
eW91dFVuaXQgc2VsZWN0aW9uSGVpZ2h0KCk7CiAKLSAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRS
dW4oUmVuZGVyU3R5bGUqLCBjb25zdCBGb250JiwgQnVmZmVyRm9yQXBwZW5kaW5nSHlwaGVuKiA9
IDApIGNvbnN0OwotICAgIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJTdHlsZSosIGNv
bnN0IEZvbnQmLCBTdHJpbmcsIGludCBtYXhpbXVtTGVuZ3RoLCBCdWZmZXJGb3JBcHBlbmRpbmdI
eXBoZW4qID0gMCkgY29uc3Q7CisgICAgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0IFJl
bmRlclN0eWxlJiwgY29uc3QgRm9udCYsIEJ1ZmZlckZvckFwcGVuZGluZ0h5cGhlbiogPSAwKSBj
b25zdDsKKyAgICBUZXh0UnVuIGNvbnN0cnVjdFRleHRSdW4oY29uc3QgUmVuZGVyU3R5bGUmLCBj
b25zdCBGb250JiwgU3RyaW5nLCBpbnQgbWF4aW11bUxlbmd0aCwgQnVmZmVyRm9yQXBwZW5kaW5n
SHlwaGVuKiA9IDApIGNvbnN0OwogCiBwdWJsaWM6CiAgICAgdmlydHVhbCBGbG9hdFJlY3QgY2Fs
Y3VsYXRlQm91bmRhcmllcygpIGNvbnN0IHsgcmV0dXJuIEZsb2F0UmVjdCh4KCksIHkoKSwgd2lk
dGgoKSwgaGVpZ2h0KCkpOyB9CkBAIC0xNzYsOCArMTc2LDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgICAvLyBkZW5vdGUgbm8gdHJ1bmNhdGlvbiAodGhlIHdob2xlIHJ1biBwYWlu
dHMpIGFuZCBmdWxsIHRydW5jYXRpb24gKG5vdGhpbmcgcGFpbnRzIGF0IGFsbCkuCiAKIHByb3Rl
Y3RlZDoKLSAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVyU3R5bGUqLCBjb25zdCBGb250
JiwgaW50IHN0YXJ0UG9zLCBpbnQgZW5kUG9zKTsKLSAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJr
ZXJzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgUmVuZGVy
U3R5bGUqLCBjb25zdCBGb250JiwgYm9vbCBiYWNrZ3JvdW5kKTsKKyAgICB2b2lkIHBhaW50Q29t
cG9zaXRpb25CYWNrZ3JvdW5kKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJv
eE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgaW50IHN0YXJ0UG9zLCBp
bnQgZW5kUG9zKTsKKyAgICB2b2lkIHBhaW50RG9jdW1lbnRNYXJrZXJzKEdyYXBoaWNzQ29udGV4
dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25z
dCBGb250JiwgYm9vbCBiYWNrZ3JvdW5kKTsKICAgICB2b2lkIHBhaW50Q29tcG9zaXRpb25VbmRl
cmxpbmUoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25z
dCBDb21wb3NpdGlvblVuZGVybGluZSYpOwogI2lmIFBMQVRGT1JNKE1BQykKICAgICB2b2lkIHBh
aW50Q3VzdG9tSGlnaGxpZ2h0KGNvbnN0IExheW91dFBvaW50JiwgY29uc3QgQXRvbWljU3RyaW5n
JiB0eXBlKTsKQEAgLTE4NSwxMCArMTg1LDEwIEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAg
ICB2b2lkIHBhaW50RGVjb3JhdGlvbihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50
JiBib3hPcmlnaW4sIFRleHREZWNvcmF0aW9uLCBUZXh0RGVjb3JhdGlvblN0eWxlLCBjb25zdCBT
aGFkb3dEYXRhKik7Ci0gICAgdm9pZCBwYWludFNlbGVjdGlvbihHcmFwaGljc0NvbnRleHQqLCBj
b25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYsIENv
bG9yIHRleHRDb2xvcik7Ci0gICAgdm9pZCBwYWludERvY3VtZW50TWFya2VyKEdyYXBoaWNzQ29u
dGV4dCosIGNvbnN0IEZsb2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBSZW5k
ZXJTdHlsZSosIGNvbnN0IEZvbnQmLCBib29sIGdyYW1tYXIpOwotICAgIHZvaWQgcGFpbnRUZXh0
TWF0Y2hNYXJrZXIoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2lu
LCBEb2N1bWVudE1hcmtlciosIFJlbmRlclN0eWxlKiwgY29uc3QgRm9udCYpOwotICAgIHZvaWQg
Y29tcHV0ZVJlY3RGb3JSZXBsYWNlbWVudE1hcmtlcihEb2N1bWVudE1hcmtlciosIFJlbmRlclN0
eWxlKiwgY29uc3QgRm9udCYpOworICAgIHZvaWQgcGFpbnRTZWxlY3Rpb24oR3JhcGhpY3NDb250
ZXh0KiwgY29uc3QgRmxvYXRQb2ludCYgYm94T3JpZ2luLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNv
bnN0IEZvbnQmLCBDb2xvciB0ZXh0Q29sb3IpOworICAgIHZvaWQgcGFpbnREb2N1bWVudE1hcmtl
cihHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGbG9hdFBvaW50JiBib3hPcmlnaW4sIERvY3VtZW50
TWFya2VyKiwgY29uc3QgUmVuZGVyU3R5bGUmLCBjb25zdCBGb250JiwgYm9vbCBncmFtbWFyKTsK
KyAgICB2b2lkIHBhaW50VGV4dE1hdGNoTWFya2VyKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZs
b2F0UG9pbnQmIGJveE9yaWdpbiwgRG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5kZXJTdHlsZSYs
IGNvbnN0IEZvbnQmKTsKKyAgICB2b2lkIGNvbXB1dGVSZWN0Rm9yUmVwbGFjZW1lbnRNYXJrZXIo
RG9jdW1lbnRNYXJrZXIqLCBjb25zdCBSZW5kZXJTdHlsZSYsIGNvbnN0IEZvbnQmKTsKIAogICAg
IFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yKCkgY29uc3QKICAg
ICB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlz
aW9uIDE1NjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUxNjMsNyArNTE2Myw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBz
dHJpcFRyYWlsaW5nU3BhY2UoZmwKICAgICAgICAgUmVuZGVyVGV4dCogdCA9IHRvUmVuZGVyVGV4
dCh0cmFpbGluZ1NwYWNlQ2hpbGQpOwogICAgICAgICBjb25zdCBVQ2hhciBzcGFjZSA9ICcgJzsK
ICAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHQtPnN0eWxlKCktPmZvbnQoKTsgLy8gRklYTUU6
IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgotICAgICAgICBmbG9hdCBzcGFjZVdpZHRoID0gZm9u
dC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0LCBmb250LCAmc3BhY2UsIDEs
IHQtPnN0eWxlKCkpKTsKKyAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVu
ZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odCwgZm9udCwgJnNwYWNlLCAxLCAqdC0+c3R5bGUo
KSkpOwogICAgICAgICBpbmxpbmVNYXggLT0gc3BhY2VXaWR0aCArIGZvbnQud29yZFNwYWNpbmco
KTsKICAgICAgICAgaWYgKGlubGluZU1pbiA+IGlubGluZU1heCkKICAgICAgICAgICAgIGlubGlu
ZU1pbiA9IGlubGluZU1heDsKQEAgLTY3MjQsMTIgKzY3MjQsMTAgQEAgdm9pZCBSZW5kZXJCbG9j
azo6Y3JlYXRlRmxvYXRpbmdPYmplY3RzKAogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFj
dGVyVHlwZT4KLXN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwo
UmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBDaGFyYWN0ZXJU
eXBlKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW46
OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK3N0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25z
dHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBm
b250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikK
IHsKLSAgICBBU1NFUlQoc3R5bGUpOwotCiAgICAgVGV4dERpcmVjdGlvbiB0ZXh0RGlyZWN0aW9u
ID0gTFRSOwotICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxlLT5ydGxPcmRlcmlu
ZygpID09IFZpc3VhbE9yZGVyOworICAgIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IHN0eWxl
LnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CiAKICAgICBUZXh0UnVuIHJ1bihjaGFyYWN0
ZXJzLCBsZW5ndGgsIDAsIDAsIGV4cGFuc2lvbiwgdGV4dERpcmVjdGlvbiwgZGlyZWN0aW9uYWxP
dmVycmlkZSk7CiAgICAgaWYgKHRleHRSdW5OZWVkc1JlbmRlcmluZ0NvbnRleHQoZm9udCkpCkBA
IC02NzM5LDE3ICs2NzM3LDE1IEBAIHN0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0
UnVuSW4KIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgaW5s
aW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkludGVybmFsKFJlbmRlck9iamVjdCogY29udGV4
dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgQ2hhcmFjdGVyVHlwZSogY2hhcmFjdGVycywgaW50
IGxlbmd0aCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBl
eHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKK3N0YXRpYyBpbmxpbmUgVGV4dFJ1biBjb25z
dHJ1Y3RUZXh0UnVuSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBm
b250LCBjb25zdCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUsIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbiwg
VGV4dFJ1bkZsYWdzIGZsYWdzKQogewotICAgIEFTU0VSVChzdHlsZSk7Ci0KICAgICBUZXh0RGly
ZWN0aW9uIHRleHREaXJlY3Rpb24gPSBMVFI7Ci0gICAgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRl
ID0gc3R5bGUtPnJ0bE9yZGVyaW5nKCkgPT0gVmlzdWFsT3JkZXI7CisgICAgYm9vbCBkaXJlY3Rp
b25hbE92ZXJyaWRlID0gc3R5bGUucnRsT3JkZXJpbmcoKSA9PSBWaXN1YWxPcmRlcjsKICAgICBp
ZiAoZmxhZ3MgIT0gRGVmYXVsdFRleHRSdW5GbGFncykgewogICAgICAgICBpZiAoZmxhZ3MgJiBS
ZXNwZWN0RGlyZWN0aW9uKQotICAgICAgICAgICAgdGV4dERpcmVjdGlvbiA9IHN0eWxlLT5kaXJl
Y3Rpb24oKTsKKyAgICAgICAgICAgIHRleHREaXJlY3Rpb24gPSBzdHlsZS5kaXJlY3Rpb24oKTsK
ICAgICAgICAgaWYgKGZsYWdzICYgUmVzcGVjdERpcmVjdGlvbk92ZXJyaWRlKQotICAgICAgICAg
ICAgZGlyZWN0aW9uYWxPdmVycmlkZSB8PSBpc092ZXJyaWRlKHN0eWxlLT51bmljb2RlQmlkaSgp
KTsKKyAgICAgICAgICAgIGRpcmVjdGlvbmFsT3ZlcnJpZGUgfD0gaXNPdmVycmlkZShzdHlsZS51
bmljb2RlQmlkaSgpKTsKICAgICB9CiAgICAgVGV4dFJ1biBydW4oY2hhcmFjdGVycywgbGVuZ3Ro
LCAwLCAwLCBleHBhbnNpb24sIHRleHREaXJlY3Rpb24sIGRpcmVjdGlvbmFsT3ZlcnJpZGUpOwog
ICAgIGlmICh0ZXh0UnVuTmVlZHNSZW5kZXJpbmdDb250ZXh0KGZvbnQpKQpAQCAtNjc1OSwxOCAr
Njc1NSwxOCBAQCBzdGF0aWMgaW5saW5lIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bkluCiB9CiAK
ICNpZiBFTkFCTEUoOEJJVF9URVhUUlVOKQotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0
VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IExD
aGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBSZW5kZXJTdHlsZSogc3R5bGUsIFRleHRSdW46
OkV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbikKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25z
dCBMQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
LCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCiB7CiAgICAgcmV0dXJuIGNv
bnN0cnVjdFRleHRSdW5JbnRlcm5hbChjb250ZXh0LCBmb250LCBjaGFyYWN0ZXJzLCBsZW5ndGgs
IHN0eWxlLCBleHBhbnNpb24pOwogfQogI2VuZGlmCiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNv
bnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBU
ZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb24pCitUZXh0UnVuIFJlbmRlckJsb2Nr
Ojpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYgZm9u
dCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIHJl
dHVybiBjb25zdHJ1Y3RUZXh0UnVuSW50ZXJuYWwoY29udGV4dCwgZm9udCwgY2hhcmFjdGVycywg
bGVuZ3RoLCBzdHlsZSwgZXhwYW5zaW9uKTsKIH0KIAotVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29u
c3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNv
bnN0IFJlbmRlclRleHQqIHRleHQsIFJlbmRlclN0eWxlKiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5z
aW9uQmVoYXZpb3IgZXhwYW5zaW9uKQorVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFJlbmRl
clRleHQqIHRleHQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4dFJ1bjo6RXhwYW5zaW9u
QmVoYXZpb3IgZXhwYW5zaW9uKQogewogI2lmIEVOQUJMRSg4QklUX1RFWFRSVU4pCiAgICAgaWYg
KHRleHQtPmlzOEJpdCgpKQpAQCAtNjc4MSw3ICs2Nzc3LDcgQEAgVGV4dFJ1biBSZW5kZXJCbG9j
azo6Y29uc3RydWN0VGV4dFJ1bihSZQogI2VuZGlmCiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6
OmNvbnN0cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250
LCBjb25zdCBSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCwgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBleHBhbnNp
b24pCitUZXh0UnVuIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCog
Y29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgUmVuZGVyVGV4dCogdGV4dCwgdW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgVGV4
dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uKQogewogICAgIEFTU0VSVChvZmZzZXQg
KyBsZW5ndGggPD0gdGV4dC0+dGV4dExlbmd0aCgpKTsKICNpZiBFTkFCTEUoOEJJVF9URVhUUlVO
KQpAQCAtNjc5Myw3ICs2Nzg5LDcgQEAgVGV4dFJ1biBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4
dFJ1bihSZQogI2VuZGlmCiB9CiAKLVRleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25zdCBTdHJpbmcm
IHN0cmluZywgUmVuZGVyU3R5bGUqIHN0eWxlLCBUZXh0UnVuOjpFeHBhbnNpb25CZWhhdmlvciBl
eHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKK1RleHRSdW4gUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4oUmVuZGVyT2JqZWN0KiBjb250ZXh0LCBjb25zdCBGb250JiBmb250LCBjb25z
dCBTdHJpbmcmIHN0cmluZywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBUZXh0UnVuOjpFeHBh
bnNpb25CZWhhdmlvciBleHBhbnNpb24sIFRleHRSdW5GbGFncyBmbGFncykKIHsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJCbG9jay5oCShyZXZpc2lvbiAxNTY2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjk3LDI0ICsyOTcsMjQg
QEAgcHVibGljOgogICAgIAogICAgIHN0YXRpYyB2b2lkIGFwcGVuZFJ1bnNGb3JPYmplY3QoQmlk
aVJ1bkxpc3Q8QmlkaVJ1bj4mLCBpbnQgc3RhcnQsIGludCBlbmQsIFJlbmRlck9iamVjdCosIElu
bGluZUJpZGlSZXNvbHZlciYpOwogCi0gICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1
bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmIGZvbnQsIGNvbnN0IFN0cmluZyYg
c3RyaW5nLCBSZW5kZXJTdHlsZSogc3R5bGUsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3RydWN0
VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBTdHJpbmcm
LCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9y
ID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRp
bmdFeHBhbnNpb24sIFRleHRSdW5GbGFncyA9IERlZmF1bHRUZXh0UnVuRmxhZ3MpOwogCi0gICAg
c3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFJlbmRlclRleHQqIHRleHQsIFJlbmRlclN0eWxlKiBzdHls
ZSwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29u
dGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFJlbmRlclRleHQqLCBjb25zdCBSZW5kZXJTdHlsZSYs
CiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFp
bGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogCi0gICAg
c3RhdGljIFRleHRSdW4gY29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNv
bnN0IEZvbnQmIGZvbnQsIGNvbnN0IFJlbmRlclRleHQqIHRleHQsIHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoLCBSZW5kZXJTdHlsZSogc3R5bGUsCisgICAgc3RhdGljIFRleHRSdW4g
Y29uc3RydWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25z
dCBSZW5kZXJUZXh0KiwgdW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IFJl
bmRlclN0eWxlJiwKICAgICAgICAgVGV4dFJ1bjo6RXhwYW5zaW9uQmVoYXZpb3IgPSBUZXh0UnVu
OjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgVGV4dFJ1bjo6Rm9yYmlkTGVhZGluZ0V4cGFuc2lv
bik7CiAKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCog
Y29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgUmVuZGVyVGV4dCogdGV4dCwgdW5zaWdu
ZWQgb2Zmc2V0LCBSZW5kZXJTdHlsZSogc3R5bGUsCisgICAgc3RhdGljIFRleHRSdW4gY29uc3Ry
dWN0VGV4dFJ1bihSZW5kZXJPYmplY3QqIGNvbnRleHQsIGNvbnN0IEZvbnQmLCBjb25zdCBSZW5k
ZXJUZXh0KiwgdW5zaWduZWQgb2Zmc2V0LCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRl
eHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
biB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogCiAjaWYgRU5BQkxFKDhCSVRf
VEVYVFJVTikKLSAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVj
dCogY29udGV4dCwgY29uc3QgRm9udCYgZm9udCwgY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIGlu
dCBsZW5ndGgsIFJlbmRlclN0eWxlKiBzdHlsZSwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1
Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRl
eHRSdW46OkV4cGFuc2lvbkJlaGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
biB8IFRleHRSdW46OkZvcmJpZExlYWRpbmdFeHBhbnNpb24pOwogI2VuZGlmCiAKLSAgICBzdGF0
aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9iamVjdCogY29udGV4dCwgY29uc3Qg
Rm9udCYgZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgsIFJlbmRlclN0
eWxlKiBzdHlsZSwKKyAgICBzdGF0aWMgVGV4dFJ1biBjb25zdHJ1Y3RUZXh0UnVuKFJlbmRlck9i
amVjdCogY29udGV4dCwgY29uc3QgRm9udCYsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQg
bGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYsCiAgICAgICAgIFRleHRSdW46OkV4cGFuc2lvbkJl
aGF2aW9yID0gVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IFRleHRSdW46OkZvcmJp
ZExlYWRpbmdFeHBhbnNpb24pOwogCiAgICAgQ29sdW1uSW5mbyogY29sdW1uSW5mbygpIGNvbnN0
OwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGluZUxheW91dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrTGlu
ZUxheW91dC5jcHAJKHJldmlzaW9uIDE1NjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0xpbmVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MDEsOCArNjAx
LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6c2V0TWFyZ2luc0ZvclJ1YnlSdW4oQgogCiBzdGF0aWMg
aW5saW5lIGZsb2F0IG1lYXN1cmVIeXBoZW5XaWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgY29u
c3QgRm9udCYgZm9udCwgSGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+KiBmYWxsYmFja0Zv
bnRzID0gMCkKIHsKLSAgICBSZW5kZXJTdHlsZSogc3R5bGUgPSByZW5kZXJlci0+c3R5bGUoKTsK
LSAgICByZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihyZW5k
ZXJlciwgZm9udCwgc3R5bGUtPmh5cGhlblN0cmluZygpLnN0cmluZygpLCBzdHlsZSksIGZhbGxi
YWNrRm9udHMpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9ICpyZW5kZXJlci0+c3R5
bGUoKTsKKyAgICByZXR1cm4gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bihyZW5kZXJlciwgZm9udCwgc3R5bGUuaHlwaGVuU3RyaW5nKCkuc3RyaW5nKCksIHN0eWxlKSwg
ZmFsbGJhY2tGb250cyk7CiB9CiAKIGNsYXNzIFdvcmRNZWFzdXJlbWVudCB7CkBAIC02MjIsNyAr
NjIyLDcgQEAgcHVibGljOgogICAgIEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPiBmYWxs
YmFja0ZvbnRzOwogfTsKIAotc3RhdGljIGlubGluZSBSZW5kZXJTdHlsZSYgbGluZVN0eWxlKFJl
bmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBMaW5lSW5mbyYgbGluZUluZm8pCitzdGF0aWMg
aW5saW5lIGNvbnN0IFJlbmRlclN0eWxlJiBsaW5lU3R5bGUoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIGNvbnN0IExpbmVJbmZvJiBsaW5lSW5mbykKIHsKICAgICByZXR1cm4gbGluZUluZm8uaXNG
aXJzdExpbmUoKSA/ICpyZW5kZXJlci5maXJzdExpbmVTdHlsZSgpIDogKnJlbmRlcmVyLnN0eWxl
KCk7CiB9CkBAIC03OTAsMTYgKzc5MCwxNiBAQCB2b2lkIFJlbmRlckJsb2NrOjp1cGRhdGVMb2dp
Y2FsV2lkdGhGb3JBCiAgICAgfQogfQogCi1zdGF0aWMgSW5kZW50VGV4dE9yTm90IHJlcXVpcmVz
SW5kZW50KGJvb2wgaXNGaXJzdExpbmUsIGJvb2wgaXNBZnRlckhhcmRMaW5lQnJlYWssIFJlbmRl
clN0eWxlKiBzdHlsZSkKK3N0YXRpYyBJbmRlbnRUZXh0T3JOb3QgcmVxdWlyZXNJbmRlbnQoYm9v
bCBpc0ZpcnN0TGluZSwgYm9vbCBpc0FmdGVySGFyZExpbmVCcmVhaywgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlKQogewogICAgIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0ID0gRG9O
b3RJbmRlbnRUZXh0OwogICAgIGlmIChpc0ZpcnN0TGluZSkKICAgICAgICAgc2hvdWxkSW5kZW50
VGV4dCA9IEluZGVudFRleHQ7CiAjaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICBlbHNlIGlmIChp
c0FmdGVySGFyZExpbmVCcmVhayAmJiBzdHlsZS0+dGV4dEluZGVudExpbmUoKSA9PSBUZXh0SW5k
ZW50RWFjaExpbmUpIAorICAgIGVsc2UgaWYgKGlzQWZ0ZXJIYXJkTGluZUJyZWFrICYmIHN0eWxl
LnRleHRJbmRlbnRMaW5lKCkgPT0gVGV4dEluZGVudEVhY2hMaW5lKQogICAgICAgICBzaG91bGRJ
bmRlbnRUZXh0ID0gSW5kZW50VGV4dDsKIAotICAgIGlmIChzdHlsZS0+dGV4dEluZGVudFR5cGUo
KSA9PSBUZXh0SW5kZW50SGFuZ2luZykKKyAgICBpZiAoc3R5bGUudGV4dEluZGVudFR5cGUoKSA9
PSBUZXh0SW5kZW50SGFuZ2luZykKICAgICAgICAgc2hvdWxkSW5kZW50VGV4dCA9IHNob3VsZElu
ZGVudFRleHQgPT0gSW5kZW50VGV4dCA/IERvTm90SW5kZW50VGV4dCA6IEluZGVudFRleHQ7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTShpc0FmdGVySGFyZExpbmVCcmVhayk7CkBAIC04MjcsNyAr
ODI3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZURpcmVjdGlvbgogICAgIC8v
IGJ1dCBkb2VzIG5vdCBhZmZlY3QgbGluZXMgYWZ0ZXIgYSBzb2Z0IHdyYXAgYnJlYWsuCiAgICAg
Ym9vbCBpc0ZpcnN0TGluZSA9IGxpbmVJbmZvLmlzRmlyc3RMaW5lKCkgJiYgIShpc0Fub255bW91
c0Jsb2NrKCkgJiYgcGFyZW50KCktPmZpcnN0Q2hpbGQoKSAhPSB0aGlzKTsKICAgICBib29sIGlz
QWZ0ZXJIYXJkTGluZUJyZWFrID0gbGluZUJveC0+cHJldlJvb3RCb3goKSAmJiBsaW5lQm94LT5w
cmV2Um9vdEJveCgpLT5lbmRzV2l0aEJyZWFrKCk7Ci0gICAgSW5kZW50VGV4dE9yTm90IHNob3Vs
ZEluZGVudFRleHQgPSByZXF1aXJlc0luZGVudChpc0ZpcnN0TGluZSwgaXNBZnRlckhhcmRMaW5l
QnJlYWssIHN0eWxlKCkpOworICAgIEluZGVudFRleHRPck5vdCBzaG91bGRJbmRlbnRUZXh0ID0g
cmVxdWlyZXNJbmRlbnQoaXNGaXJzdExpbmUsIGlzQWZ0ZXJIYXJkTGluZUJyZWFrLCAqc3R5bGUo
KSk7CiAgICAgZmxvYXQgbGluZUxvZ2ljYWxMZWZ0OwogICAgIGZsb2F0IGxpbmVMb2dpY2FsUmln
aHQ7CiAgICAgZmxvYXQgYXZhaWxhYmxlTG9naWNhbFdpZHRoOwpAQCAtMjM1MCwxNCArMjM1MCwx
NiBAQCBzdGF0aWMgYm9vbCBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3RhCiAKIHN0YXRpYyBB
TFdBWVNfSU5MSU5FIGZsb2F0IHRleHRXaWR0aChSZW5kZXJUZXh0KiB0ZXh0LCB1bnNpZ25lZCBm
cm9tLCB1bnNpZ25lZCBsZW4sIGNvbnN0IEZvbnQmIGZvbnQsIGZsb2F0IHhQb3MsIGJvb2wgaXNG
aXhlZFBpdGNoLCBib29sIGNvbGxhcHNlV2hpdGVTcGFjZSwgSGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBUZXh0TGF5b3V0KiBsYXlvdXQgPSAwKQogeworICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9ICp0ZXh0LT5zdHlsZSgpOworCiAgICAgR2x5cGhP
dmVyZmxvdyBnbHlwaE92ZXJmbG93OwotICAgIGlmIChpc0ZpeGVkUGl0Y2ggfHwgKCFmcm9tICYm
IGxlbiA9PSB0ZXh0LT50ZXh0TGVuZ3RoKCkpIHx8IHRleHQtPnN0eWxlKCktPmhhc1RleHRDb21i
aW5lKCkpCisgICAgaWYgKGlzRml4ZWRQaXRjaCB8fCAoIWZyb20gJiYgbGVuID09IHRleHQtPnRl
eHRMZW5ndGgoKSkgfHwgc3R5bGUuaGFzVGV4dENvbWJpbmUoKSkKICAgICAgICAgcmV0dXJuIHRl
eHQtPndpZHRoKGZyb20sIGxlbiwgZm9udCwgeFBvcywgJmZhbGxiYWNrRm9udHMsICZnbHlwaE92
ZXJmbG93KTsKIAogICAgIGlmIChsYXlvdXQpCiAgICAgICAgIHJldHVybiBGb250Ojp3aWR0aCgq
bGF5b3V0LCBmcm9tLCBsZW4sICZmYWxsYmFja0ZvbnRzKTsKIAotICAgIFRleHRSdW4gcnVuID0g
UmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGV4dCwgZm9udCwgdGV4dCwgZnJvbSwgbGVu
LCB0ZXh0LT5zdHlsZSgpKTsKKyAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1
Y3RUZXh0UnVuKHRleHQsIGZvbnQsIHRleHQsIGZyb20sIGxlbiwgc3R5bGUpOwogICAgIHJ1bi5z
ZXRDaGFyYWN0ZXJzTGVuZ3RoKHRleHQtPnRleHRMZW5ndGgoKSAtIGZyb20pOwogICAgIEFTU0VS
VChydW4uY2hhcmFjdGVyc0xlbmd0aCgpID49IHJ1bi5sZW5ndGgoKSk7CiAKQEAgLTIzOTcsMTEg
KzIzOTksMTIgQEAgc3RhdGljIHZvaWQgdHJ5SHlwaGVuYXRpbmcoUmVuZGVyVGV4dCogdAogICAg
IGlmIChtYXhQcmVmaXhXaWR0aCA8PSBmb250LnBpeGVsU2l6ZSgpICogNSAvIDQpCiAgICAgICAg
IHJldHVybjsKIAotICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4odGV4dCwgZm9udCwgdGV4dCwgbGFzdFNwYWNlLCBwb3MgLSBsYXN0U3BhY2UsIHRleHQtPnN0
eWxlKCkpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9ICp0ZXh0LT5zdHlsZSgpOwor
ICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGV4dCwgZm9u
dCwgdGV4dCwgbGFzdFNwYWNlLCBwb3MgLSBsYXN0U3BhY2UsIHN0eWxlKTsKICAgICBydW4uc2V0
Q2hhcmFjdGVyc0xlbmd0aCh0ZXh0LT50ZXh0TGVuZ3RoKCkgLSBsYXN0U3BhY2UpOwogICAgIEFT
U0VSVChydW4uY2hhcmFjdGVyc0xlbmd0aCgpID49IHJ1bi5sZW5ndGgoKSk7CiAKLSAgICBydW4u
c2V0VGFiU2l6ZSghY29sbGFwc2VXaGl0ZVNwYWNlLCB0ZXh0LT5zdHlsZSgpLT50YWJTaXplKCkp
OworICAgIHJ1bi5zZXRUYWJTaXplKCFjb2xsYXBzZVdoaXRlU3BhY2UsIHN0eWxlLnRhYlNpemUo
KSk7CiAgICAgcnVuLnNldFhQb3MoeFBvcyArIGxhc3RTcGFjZVdvcmRTcGFjaW5nKTsKIAogICAg
IHVuc2lnbmVkIHByZWZpeExlbmd0aCA9IGZvbnQub2Zmc2V0Rm9yUG9zaXRpb24ocnVuLCBtYXhQ
cmVmaXhXaWR0aCwgZmFsc2UpOwpAQCAtMjY4Miw3ICsyNjg1LDcgQEAgSW5saW5lSXRlcmF0b3Ig
TGluZUJyZWFrZXI6Om5leHRTZWdtZW50QgogICAgIGJvb2wgaW5jbHVkZUVuZFdpZHRoID0gdHJ1
ZTsKICAgICBMaW5lTWlkcG9pbnRTdGF0ZSYgbGluZU1pZHBvaW50U3RhdGUgPSByZXNvbHZlci5t
aWRwb2ludFN0YXRlKCk7CiAKLSAgICBMaW5lV2lkdGggd2lkdGgoKm1fYmxvY2ssIGxpbmVJbmZv
LmlzRmlyc3RMaW5lKCksIHJlcXVpcmVzSW5kZW50KGxpbmVJbmZvLmlzRmlyc3RMaW5lKCksIGxp
bmVJbmZvLnByZXZpb3VzTGluZUJyb2tlQ2xlYW5seSgpLCBtX2Jsb2NrLT5zdHlsZSgpKSk7Cisg
ICAgTGluZVdpZHRoIHdpZHRoKCptX2Jsb2NrLCBsaW5lSW5mby5pc0ZpcnN0TGluZSgpLCByZXF1
aXJlc0luZGVudChsaW5lSW5mby5pc0ZpcnN0TGluZSgpLCBsaW5lSW5mby5wcmV2aW91c0xpbmVC
cm9rZUNsZWFubHkoKSwgKm1fYmxvY2stPnN0eWxlKCkpKTsKIAogICAgIHNraXBMZWFkaW5nV2hp
dGVzcGFjZShyZXNvbHZlciwgbGluZUluZm8sIGxhc3RGbG9hdEZyb21QcmV2aW91c0xpbmUsIHdp
ZHRoKTsKIApAQCAtMjcxOCwxOCArMjcyMSwxOCBAQCBJbmxpbmVJdGVyYXRvciBMaW5lQnJlYWtl
cjo6bmV4dFNlZ21lbnRCCiAgICAgLy8gRmlyZWZveCBhbmQgT3BlcmEgd2lsbCBhbGxvdyBhIHRh
YmxlIGNlbGwgdG8gZ3JvdyB0byBmaXQgYW4gaW1hZ2UgaW5zaWRlIGl0IHVuZGVyCiAgICAgLy8g
dmVyeSBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzIChpbiBvcmRlciB0byBtYXRjaCBjb21tb24gV2lu
SUUgcmVuZGVyaW5ncykuCiAgICAgLy8gTm90IHN1cHBvcnRpbmcgdGhlIHF1aXJrIGhhcyBjYXVz
ZWQgdXMgdG8gbWlzLXJlbmRlciBzb21lIHJlYWwgc2l0ZXMuIChTZWUgQnVnemlsbGEgMTA1MTcu
KQotICAgIFJlbmRlclN0eWxlKiBibG9ja1N0eWxlID0gbV9ibG9jay0+c3R5bGUoKTsKLSAgICBi
b29sIGFsbG93SW1hZ2VzVG9CcmVhayA9ICFtX2Jsb2NrLT5kb2N1bWVudCgpLmluUXVpcmtzTW9k
ZSgpIHx8ICFtX2Jsb2NrLT5pc1RhYmxlQ2VsbCgpIHx8ICFibG9ja1N0eWxlLT5sb2dpY2FsV2lk
dGgoKS5pc0ludHJpbnNpY09yQXV0bygpOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBibG9ja1N0
eWxlID0gKm1fYmxvY2stPnN0eWxlKCk7CisgICAgYm9vbCBhbGxvd0ltYWdlc1RvQnJlYWsgPSAh
bV9ibG9jay0+ZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSB8fCAhbV9ibG9jay0+aXNUYWJsZUNl
bGwoKSB8fCAhYmxvY2tTdHlsZS5sb2dpY2FsV2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpOwog
Ci0gICAgRVdoaXRlU3BhY2UgY3VycldTID0gYmxvY2tTdHlsZS0+d2hpdGVTcGFjZSgpOworICAg
IEVXaGl0ZVNwYWNlIGN1cnJXUyA9IGJsb2NrU3R5bGUud2hpdGVTcGFjZSgpOwogICAgIEVXaGl0
ZVNwYWNlIGxhc3RXUyA9IGN1cnJXUzsKICAgICB3aGlsZSAoY3VycmVudC5tX29iaikgewotICAg
ICAgICBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlID0gY3VycmVudC5tX29iai0+c3R5bGUoKTsK
KyAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSA9ICpjdXJyZW50Lm1fb2Jq
LT5zdHlsZSgpOwogICAgICAgICBSZW5kZXJPYmplY3QqIG5leHQgPSBiaWRpTmV4dFNraXBwaW5n
RW1wdHlJbmxpbmVzKG1fYmxvY2ssIGN1cnJlbnQubV9vYmopOwogICAgICAgICBpZiAobmV4dCAm
JiBuZXh0LT5wYXJlbnQoKSAmJiAhbmV4dC0+cGFyZW50KCktPmlzRGVzY2VuZGFudE9mKGN1cnJl
bnQubV9vYmotPnBhcmVudCgpKSkKICAgICAgICAgICAgIGluY2x1ZGVFbmRXaWR0aCA9IHRydWU7
CiAKLSAgICAgICAgY3VycldTID0gY3VycmVudC5tX29iai0+aXNSZXBsYWNlZCgpID8gY3VycmVu
dC5tX29iai0+cGFyZW50KCktPnN0eWxlKCktPndoaXRlU3BhY2UoKSA6IGN1cnJlbnRTdHlsZS0+
d2hpdGVTcGFjZSgpOworICAgICAgICBjdXJyV1MgPSBjdXJyZW50Lm1fb2JqLT5pc1JlcGxhY2Vk
KCkgPyBjdXJyZW50Lm1fb2JqLT5wYXJlbnQoKS0+c3R5bGUoKS0+d2hpdGVTcGFjZSgpIDogY3Vy
cmVudFN0eWxlLndoaXRlU3BhY2UoKTsKICAgICAgICAgbGFzdFdTID0gbGFzdC0+aXNSZXBsYWNl
ZCgpID8gbGFzdC0+cGFyZW50KCktPnN0eWxlKCktPndoaXRlU3BhY2UoKSA6IGxhc3QtPnN0eWxl
KCktPndoaXRlU3BhY2UoKTsKIAogICAgICAgICBib29sIGF1dG9XcmFwID0gUmVuZGVyU3R5bGU6
OmF1dG9XcmFwKGN1cnJXUyk7CkBAIC0yNzYxLDE2ICsyNzY0LDE2IEBAIElubGluZUl0ZXJhdG9y
IExpbmVCcmVha2VyOjpuZXh0U2VnbWVudEIKICAgICAgICAgICAgICAgICAvLyBBIDxicj4gd2l0
aCBjbGVhcmFuY2UgYWx3YXlzIG5lZWRzIGEgbGluZWJveCBpbiBjYXNlIHRoZSBsaW5lcyBiZWxv
dyBpdCBnZXQgZGlydGllZCBsYXRlciBhbmQgCiAgICAgICAgICAgICAgICAgLy8gbmVlZCB0byBj
aGVjayBmb3IgZmxvYXRzIHRvIGNsZWFyIC0gc28gaWYgd2UncmUgaWdub3Jpbmcgc3BhY2VzLCBz
dG9wIGlnbm9yaW5nIHRoZW0gYW5kIGFkZCBhCiAgICAgICAgICAgICAgICAgLy8gcnVuIGZvciB0
aGlzIG9iamVjdC4KLSAgICAgICAgICAgICAgICBpZiAoaWdub3JpbmdTcGFjZXMgJiYgY3VycmVu
dFN0eWxlLT5jbGVhcigpICE9IENOT05FKQorICAgICAgICAgICAgICAgIGlmIChpZ25vcmluZ1Nw
YWNlcyAmJiBjdXJyZW50U3R5bGUuY2xlYXIoKSAhPSBDTk9ORSkKICAgICAgICAgICAgICAgICAg
ICAgZW5zdXJlTGluZUJveEluc2lkZUlnbm9yZWRTcGFjZXMobGluZU1pZHBvaW50U3RhdGUsIGN1
cnJlbnQubV9vYmopOwogICAgICAgICAgICAgICAgIC8vIElmIHdlIHdlcmUgcHJlY2VkZWQgYnkg
Y29sbGFwc2luZyBzcGFjZSBhbmQgYXJlIGluIGEgcmlnaHQtYWxpZ25lZCBjb250YWluZXIgd2Ug
bmVlZCB0byBlbnN1cmUgdGhlIHNwYWNlIGdldHMKICAgICAgICAgICAgICAgICAvLyBjb2xsYXBz
ZWQgYXdheSBzbyB0aGF0IGl0IGRvZXNuJ3QgcHVzaCB0aGUgdGV4dCBvdXQgZnJvbSB0aGUgY29u
dGFpbmVyJ3MgcmlnaHQtaGFuZCBlZGdlLgogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBEbyB0
aGlzIHJlZ2FyZGxlc3Mgb2YgdGhlIGNvbnRhaW5lcidzIGFsaWdubWVudCAtIHdpbGwgcmVxdWly
ZSByZWJhc2VsaW5pbmcgYSBsb3Qgb2YgdGVzdCByZXN1bHRzLgotICAgICAgICAgICAgICAgIGVs
c2UgaWYgKGlnbm9yaW5nU3BhY2VzICYmIChibG9ja1N0eWxlLT50ZXh0QWxpZ24oKSA9PSBSSUdI
VCB8fCBibG9ja1N0eWxlLT50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfUklHSFQpKQorICAgICAgICAg
ICAgICAgIGVsc2UgaWYgKGlnbm9yaW5nU3BhY2VzICYmIChibG9ja1N0eWxlLnRleHRBbGlnbigp
ID09IFJJR0hUIHx8IGJsb2NrU3R5bGUudGV4dEFsaWduKCkgPT0gV0VCS0lUX1JJR0hUKSkKICAg
ICAgICAgICAgICAgICAgICAgc3RvcElnbm9yaW5nU3BhY2VzKGxpbmVNaWRwb2ludFN0YXRlLCBJ
bmxpbmVJdGVyYXRvcigwLCBjdXJyZW50Lm1fb2JqLCBjdXJyZW50Lm1fcG9zKSk7CiAKICAgICAg
ICAgICAgICAgICBpZiAoIWxpbmVJbmZvLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAg
bV9jbGVhciA9IGN1cnJlbnRTdHlsZS0+Y2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9j
bGVhciA9IGN1cnJlbnRTdHlsZS5jbGVhcigpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Z290byBlbmQ7CiAgICAgICAgIH0KQEAgLTI4MzUsNyArMjgzOCw3IEBAIElubGluZUl0ZXJhdG9y
IExpbmVCcmVha2VyOjpuZXh0U2VnbWVudEIKICAgICAgICAgICAgICAgICBpZiAoaWdub3JpbmdT
cGFjZXMpIHsKICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdPYmplY3RzLmNsZWFyKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGVuc3VyZUxpbmVCb3hJbnNpZGVJZ25vcmVkU3BhY2VzKGxpbmVN
aWRwb2ludFN0YXRlLCBjdXJyZW50Lm1fb2JqKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KGJsb2NrU3R5bGUtPmNvbGxhcHNlV2hpdGVTcGFjZSgpICYmIHJlc29sdmVyLnBvc2l0aW9uKCku
bV9vYmogPT0gY3VycmVudC5tX29iagorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYmxvY2tT
dHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiByZXNvbHZlci5wb3NpdGlvbigpLm1fb2JqID09
IGN1cnJlbnQubV9vYmoKICAgICAgICAgICAgICAgICAgICAgJiYgc2hvdWxkU2tpcFdoaXRlc3Bh
Y2VBZnRlclN0YXJ0T2JqZWN0KG1fYmxvY2ssIGN1cnJlbnQubV9vYmosIGxpbmVNaWRwb2ludFN0
YXRlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBMaWtlIHdpdGggbGlzdCBtYXJrZXJzLCB3
ZSBzdGFydCBpZ25vcmluZyBzcGFjZXMgdG8gbWFrZSBzdXJlIHRoYXQgYW55CiAgICAgICAgICAg
ICAgICAgICAgIC8vIGFkZGl0aW9uYWwgc3BhY2VzIHdlIHNlZSB3aWxsIGJlIGRpc2NhcmRlZC4K
QEAgLTI4NzEsNyArMjg3NCw3IEBAIElubGluZUl0ZXJhdG9yIExpbmVCcmVha2VyOjpuZXh0U2Vn
bWVudEIKICAgICAgICAgICAgIC8vIGl0ZW0sIHRoZW4gdGhpcyBpcyBhbGwgbW9vdC4KICAgICAg
ICAgICAgIExheW91dFVuaXQgcmVwbGFjZWRMb2dpY2FsV2lkdGggPSBtX2Jsb2NrLT5sb2dpY2Fs
V2lkdGhGb3JDaGlsZChyZXBsYWNlZEJveCkgKyBtX2Jsb2NrLT5tYXJnaW5TdGFydEZvckNoaWxk
KHJlcGxhY2VkQm94KSArIG1fYmxvY2stPm1hcmdpbkVuZEZvckNoaWxkKHJlcGxhY2VkQm94KSAr
IGlubGluZUxvZ2ljYWxXaWR0aChjdXJyZW50Lm1fb2JqKTsKICAgICAgICAgICAgIGlmIChjdXJy
ZW50Lm1fb2JqLT5pc0xpc3RNYXJrZXIoKSkgewotICAgICAgICAgICAgICAgIGlmIChibG9ja1N0
eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBzaG91bGRTa2lwV2hpdGVzcGFjZUFmdGVyU3Rh
cnRPYmplY3QobV9ibG9jaywgY3VycmVudC5tX29iaiwgbGluZU1pZHBvaW50U3RhdGUpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGJsb2NrU3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkgJiYgc2hv
dWxkU2tpcFdoaXRlc3BhY2VBZnRlclN0YXJ0T2JqZWN0KG1fYmxvY2ssIGN1cnJlbnQubV9vYmos
IGxpbmVNaWRwb2ludFN0YXRlKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBMaWtlIHdpdGgg
aW5saW5lIGZsb3dzLCB3ZSBzdGFydCBpZ25vcmluZyBzcGFjZXMgdG8gbWFrZSBzdXJlIHRoYXQg
YW55CiAgICAgICAgICAgICAgICAgICAgIC8vIGFkZGl0aW9uYWwgc3BhY2VzIHdlIHNlZSB3aWxs
IGJlIGRpc2NhcmRlZC4KICAgICAgICAgICAgICAgICAgICAgY3VycmVudENoYXJhY3RlcklzU3Bh
Y2UgPSB0cnVlOwpAQCAtMjkxMiwyNCArMjkxNSwyNCBAQCBJbmxpbmVJdGVyYXRvciBMaW5lQnJl
YWtlcjo6bmV4dFNlZ21lbnRCCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0g
ICAgICAgICAgICBSZW5kZXJTdHlsZSYgc3R5bGUgPSBsaW5lU3R5bGUoKnQtPnBhcmVudCgpLCBs
aW5lSW5mbyk7CisgICAgICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUgPSBsaW5lU3R5
bGUoKnQtPnBhcmVudCgpLCBsaW5lSW5mbyk7CiAgICAgICAgICAgICBjb25zdCBGb250JiBmID0g
c3R5bGUuZm9udCgpOwogICAgICAgICAgICAgYm9vbCBpc0ZpeGVkUGl0Y2ggPSBmLmlzRml4ZWRQ
aXRjaCgpOwogICAgICAgICAgICAgYm9vbCBjYW5IeXBoZW5hdGUgPSBzdHlsZS5oeXBoZW5zKCkg
PT0gSHlwaGVuc0F1dG8gJiYgV2ViQ29yZTo6Y2FuSHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgpKTsK
IAogICAgICAgICAgICAgdW5zaWduZWQgbGFzdFNwYWNlID0gY3VycmVudC5tX3BvczsKLSAgICAg
ICAgICAgIGZsb2F0IHdvcmRTcGFjaW5nID0gY3VycmVudFN0eWxlLT53b3JkU3BhY2luZygpOwor
ICAgICAgICAgICAgZmxvYXQgd29yZFNwYWNpbmcgPSBjdXJyZW50U3R5bGUud29yZFNwYWNpbmco
KTsKICAgICAgICAgICAgIGZsb2F0IGxhc3RTcGFjZVdvcmRTcGFjaW5nID0gMDsKICAgICAgICAg
ICAgIGZsb2F0IHdvcmRTcGFjaW5nRm9yV29yZE1lYXN1cmVtZW50ID0gMDsKIAogICAgICAgICAg
ICAgZmxvYXQgd3JhcFcgPSB3aWR0aC51bmNvbW1pdHRlZFdpZHRoKCkgKyBpbmxpbmVMb2dpY2Fs
V2lkdGgoY3VycmVudC5tX29iaiwgIWFwcGxpZWRTdGFydFdpZHRoLCB0cnVlKTsKICAgICAgICAg
ICAgIGZsb2F0IGNoYXJXaWR0aCA9IDA7Ci0gICAgICAgICAgICBib29sIGJyZWFrTkJTUCA9IGF1
dG9XcmFwICYmIGN1cnJlbnRTdHlsZS0+bmJzcE1vZGUoKSA9PSBTUEFDRTsKKyAgICAgICAgICAg
IGJvb2wgYnJlYWtOQlNQID0gYXV0b1dyYXAgJiYgY3VycmVudFN0eWxlLm5ic3BNb2RlKCkgPT0g
U1BBQ0U7CiAgICAgICAgICAgICAvLyBBdXRvLXdyYXBwaW5nIHRleHQgc2hvdWxkIHdyYXAgaW4g
dGhlIG1pZGRsZSBvZiBhIHdvcmQgb25seSBpZiBpdCBjb3VsZCBub3Qgd3JhcCBiZWZvcmUgdGhl
IHdvcmQsCiAgICAgICAgICAgICAvLyB3aGljaCBpcyBvbmx5IHBvc3NpYmxlIGlmIHRoZSB3b3Jk
IGlzIHRoZSBmaXJzdCB0aGluZyBvbiB0aGUgbGluZSwgdGhhdCBpcywgaWYgfHd8IGlzIHplcm8u
Ci0gICAgICAgICAgICBib29sIGJyZWFrV29yZHMgPSBjdXJyZW50U3R5bGUtPmJyZWFrV29yZHMo
KSAmJiAoKGF1dG9XcmFwICYmICF3aWR0aC5jb21taXR0ZWRXaWR0aCgpKSB8fCBjdXJyV1MgPT0g
UFJFKTsKKyAgICAgICAgICAgIGJvb2wgYnJlYWtXb3JkcyA9IGN1cnJlbnRTdHlsZS5icmVha1dv
cmRzKCkgJiYgKChhdXRvV3JhcCAmJiAhd2lkdGguY29tbWl0dGVkV2lkdGgoKSkgfHwgY3VycldT
ID09IFBSRSk7CiAgICAgICAgICAgICBib29sIG1pZFdvcmRCcmVhayA9IGZhbHNlOwotICAgICAg
ICAgICAgYm9vbCBicmVha0FsbCA9IGN1cnJlbnRTdHlsZS0+d29yZEJyZWFrKCkgPT0gQnJlYWtB
bGxXb3JkQnJlYWsgJiYgYXV0b1dyYXA7CisgICAgICAgICAgICBib29sIGJyZWFrQWxsID0gY3Vy
cmVudFN0eWxlLndvcmRCcmVhaygpID09IEJyZWFrQWxsV29yZEJyZWFrICYmIGF1dG9XcmFwOwog
ICAgICAgICAgICAgZmxvYXQgaHlwaGVuV2lkdGggPSAwOwogI2lmIEVOQUJMRShTVkcpCiAgICAg
ICAgICAgICBpZiAoaXNTVkdUZXh0KSB7CkBAIC0yOTU0LDcgKzI5NTcsNyBAQCBJbmxpbmVJdGVy
YXRvciBMaW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCCiAgICAgICAgICAgICAvLyBOb24temVybyBv
bmx5IHdoZW4ga2VybmluZyBpcyBlbmFibGVkIGFuZCBUZXh0TGF5b3V0IGlzbid0IHVzZWQsIGlu
IHdoaWNoIGNhc2Ugd2UgbWVhc3VyZQogICAgICAgICAgICAgLy8gd29yZHMgd2l0aCB0aGVpciB0
cmFpbGluZyBzcGFjZSwgdGhlbiBzdWJ0cmFjdCBpdHMgd2lkdGguCiAgICAgICAgICAgICBIYXNo
U2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4gZmFsbGJhY2tGb250czsKLSAgICAgICAgICAgIGZs
b2F0IHdvcmRUcmFpbGluZ1NwYWNlV2lkdGggPSAoZi50eXBlc2V0dGluZ0ZlYXR1cmVzKCkgJiBL
ZXJuaW5nKSAmJiAhdGV4dExheW91dCA/IGYud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRl
eHRSdW4odCwgZiwgJnNwYWNlLCAxLCAmc3R5bGUpLCAmZmFsbGJhY2tGb250cykgKyB3b3JkU3Bh
Y2luZyA6IDA7CisgICAgICAgICAgICBmbG9hdCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gKGYu
dHlwZXNldHRpbmdGZWF0dXJlcygpICYgS2VybmluZykgJiYgIXRleHRMYXlvdXQgPyBmLndpZHRo
KFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHQsIGYsICZzcGFjZSwgMSwgc3R5bGUpLCAm
ZmFsbGJhY2tGb250cykgKyB3b3JkU3BhY2luZyA6IDA7CiAKICAgICAgICAgICAgIFVDaGFyIGxh
c3RDaGFyYWN0ZXIgPSByZW5kZXJUZXh0SW5mby5tX2xpbmVCcmVha0l0ZXJhdG9yLmxhc3RDaGFy
YWN0ZXIoKTsKICAgICAgICAgICAgIFVDaGFyIHNlY29uZFRvTGFzdENoYXJhY3RlciA9IHJlbmRl
clRleHRJbmZvLm1fbGluZUJyZWFrSXRlcmF0b3Iuc2Vjb25kVG9MYXN0Q2hhcmFjdGVyKCk7CkBA
IC0zMDQ2LDcgKzMwNDksNyBAQCBJbmxpbmVJdGVyYXRvciBMaW5lQnJlYWtlcjo6bmV4dFNlZ21l
bnRCCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBicmVhayBvbmx5IGFmdGVyIHdo
aXRlLXNwYWNlLCBjb25zaWRlciB0aGUgY3VycmVudCBjaGFyYWN0ZXIKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFzIGNhbmRpZGF0ZSB3aWR0aCBmb3IgdGhpcyBsaW5lLgogICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCBsaW5lV2FzVG9vV2lkZSA9IGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKHdpZHRoLmZpdHNPbkxpbmUoKSAmJiBjdXJyZW50Q2hhcmFjdGVySXNX
UyAmJiBjdXJyZW50U3R5bGUtPmJyZWFrT25seUFmdGVyV2hpdGVTcGFjZSgpICYmICFtaWRXb3Jk
QnJlYWspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aWR0aC5maXRzT25MaW5lKCkg
JiYgY3VycmVudENoYXJhY3RlcklzV1MgJiYgY3VycmVudFN0eWxlLmJyZWFrT25seUFmdGVyV2hp
dGVTcGFjZSgpICYmICFtaWRXb3JkQnJlYWspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBjaGFyV2lkdGggPSB0ZXh0V2lkdGgodCwgY3VycmVudC5tX3BvcywgMSwgZiwgd2lk
dGguY3VycmVudFdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VXaGl0ZVNwYWNlLCB3b3Jk
TWVhc3VyZW1lbnQuZmFsbGJhY2tGb250cywgdGV4dExheW91dCkgKyAoYXBwbHlXb3JkU3BhY2lu
ZyA/IHdvcmRTcGFjaW5nIDogMCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gQ2hl
Y2sgaWYgbGluZSBpcyB0b28gYmlnIGV2ZW4gd2l0aG91dCB0aGUgZXh0cmEgc3BhY2UKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLiBJZiBpdCBp
cyBub3QsIGRvIG5vdGhpbmcuCkBAIC0zMDYxLDcgKzMwNjQsNyBAQCBJbmxpbmVJdGVyYXRvciBM
aW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobGluZVdhc1Rvb1dpZGUgfHwgIXdpZHRoLmZpdHNPbkxp
bmUoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjYW5IeXBoZW5hdGUgJiYg
IXdpZHRoLmZpdHNPbkxpbmUoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cnlIeXBoZW5hdGluZyh0LCBmLCBzdHlsZS5sb2NhbGUoKSwgY29uc2VjdXRpdmVIeXBoZW5hdGVk
TGluZXMsIGJsb2NrU3R5bGUtPmh5cGhlbmF0aW9uTGltaXRMaW5lcygpLCBzdHlsZS5oeXBoZW5h
dGlvbkxpbWl0QmVmb3JlKCksIHN0eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigpLCBsYXN0U3Bh
Y2UsIGN1cnJlbnQubV9wb3MsIHdpZHRoLmN1cnJlbnRXaWR0aCgpIC0gYWRkaXRpb25hbFRlbXBX
aWR0aCwgd2lkdGguYXZhaWxhYmxlV2lkdGgoKSwgaXNGaXhlZFBpdGNoLCBjb2xsYXBzZVdoaXRl
U3BhY2UsIGxhc3RTcGFjZVdvcmRTcGFjaW5nLCBsQnJlYWssIGN1cnJlbnQubV9uZXh0QnJlYWth
YmxlUG9zaXRpb24sIG1faHlwaGVuYXRlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRyeUh5cGhlbmF0aW5nKHQsIGYsIHN0eWxlLmxvY2FsZSgpLCBjb25zZWN1dGl2ZUh5cGhl
bmF0ZWRMaW5lcywgYmxvY2tTdHlsZS5oeXBoZW5hdGlvbkxpbWl0TGluZXMoKSwgc3R5bGUuaHlw
aGVuYXRpb25MaW1pdEJlZm9yZSgpLCBzdHlsZS5oeXBoZW5hdGlvbkxpbWl0QWZ0ZXIoKSwgbGFz
dFNwYWNlLCBjdXJyZW50Lm1fcG9zLCB3aWR0aC5jdXJyZW50V2lkdGgoKSAtIGFkZGl0aW9uYWxU
ZW1wV2lkdGgsIHdpZHRoLmF2YWlsYWJsZVdpZHRoKCksIGlzRml4ZWRQaXRjaCwgY29sbGFwc2VX
aGl0ZVNwYWNlLCBsYXN0U3BhY2VXb3JkU3BhY2luZywgbEJyZWFrLCBjdXJyZW50Lm1fbmV4dEJy
ZWFrYWJsZVBvc2l0aW9uLCBtX2h5cGhlbmF0ZWQpOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAobV9oeXBoZW5hdGVkKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ290byBlbmQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMzEyNCw3
ICszMTI3LDcgQEAgSW5saW5lSXRlcmF0b3IgTGluZUJyZWFrZXI6Om5leHRTZWdtZW50QgogICAg
ICAgICAgICAgICAgICAgICAgICAgbGFzdFNwYWNlID0gY3VycmVudC5tX3BvczsKICAgICAgICAg
ICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgICAgIGlmICghaWdub3JpbmdTcGFjZXMg
JiYgY3VycmVudFN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoIWlnbm9yaW5nU3BhY2VzICYmIGN1cnJlbnRTdHlsZS5jb2xsYXBzZVdoaXRlU3Bh
Y2UoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2UgZW5jb3VudGVyIGEgbmV3
bGluZSwgb3IgaWYgd2UgZW5jb3VudGVyIGEKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNl
Y29uZCBzcGFjZSwgd2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgYnJlYWsgdXAgdGhpcwogICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gcnVuIGFuZCBlbnRlciBhIG1vZGUgd2hlcmUgd2Ugc3RhcnQg
Y29sbGFwc2luZyBzcGFjZXMuCkBAIC0zMTYyLDcgKzMxNjUsNyBAQCBJbmxpbmVJdGVyYXRvciBM
aW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCCiAgICAgICAgICAgICAgICAgICAgIC8vIFNwYWNlcyBh
ZnRlciByaWdodC1hbGlnbmVkIHRleHQgYW5kIGJlZm9yZSBhIGxpbmUtYnJlYWsgZ2V0IGNvbGxh
cHNlZCBhd2F5IGNvbXBsZXRlbHkgc28gdGhhdCB0aGUgdHJhaWxpbmcKICAgICAgICAgICAgICAg
ICAgICAgLy8gc3BhY2UgZG9lc24ndCBzZWVtIHRvIHB1c2ggdGhlIHRleHQgb3V0IGZyb20gdGhl
IHJpZ2h0LWhhbmQgZWRnZS4KICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IERvIHRoaXMg
cmVnYXJkbGVzcyBvZiB0aGUgY29udGFpbmVyJ3MgYWxpZ25tZW50IC0gd2lsbCByZXF1aXJlIHJl
YmFzZWxpbmluZyBhIGxvdCBvZiB0ZXN0IHJlc3VsdHMuCi0gICAgICAgICAgICAgICAgICAgIGlm
IChuZXh0ICYmIG5leHQtPmlzQlIoKSAmJiAoYmxvY2tTdHlsZS0+dGV4dEFsaWduKCkgPT0gUklH
SFQgfHwgYmxvY2tTdHlsZS0+dGV4dEFsaWduKCkgPT0gV0VCS0lUX1JJR0hUKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAobmV4dCAmJiBuZXh0LT5pc0JSKCkgJiYgKGJsb2NrU3R5bGUudGV4
dEFsaWduKCkgPT0gUklHSFQgfHwgYmxvY2tTdHlsZS50ZXh0QWxpZ24oKSA9PSBXRUJLSVRfUklH
SFQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVTdGFydC5tX3Bvcy0tOwogICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBqdXN0IGEgc2luZ2xlIHRyYWlsaW5n
IHNwYWNlIHN0YXJ0IGlnbm9yaW5nIGl0IG5vdyBzbyBpdCBjb2xsYXBzZXMgYXdheS4KICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Lm1fcG9zID09IHQtPnRleHRMZW5ndGgoKSAt
IDEpCkBAIC0zMTcxLDEzICszMTc0LDEzIEBAIElubGluZUl0ZXJhdG9yIExpbmVCcmVha2VyOjpu
ZXh0U2VnbWVudEIKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoIWN1
cnJlbnRDaGFyYWN0ZXJJc1dTICYmIHByZXZpb3VzQ2hhcmFjdGVySXNXUykgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoYXV0b1dyYXAgJiYgY3VycmVudFN0eWxlLT5icmVha09ubHlBZnRlcldo
aXRlU3BhY2UoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG9XcmFwICYmIGN1cnJlbnRT
dHlsZS5icmVha09ubHlBZnRlcldoaXRlU3BhY2UoKSkKICAgICAgICAgICAgICAgICAgICAgICAg
IGxCcmVhay5tb3ZlVG8oY3VycmVudC5tX29iaiwgY3VycmVudC5tX3BvcywgY3VycmVudC5tX25l
eHRCcmVha2FibGVQb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAg
ICAgaWYgKGNvbGxhcHNlV2hpdGVTcGFjZSAmJiBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZSAmJiAh
aWdub3JpbmdTcGFjZXMpCiAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nT2JqZWN0cy5zZXRU
cmFpbGluZ1doaXRlc3BhY2UodG9SZW5kZXJUZXh0KGN1cnJlbnQubV9vYmopKTsKLSAgICAgICAg
ICAgICAgICBlbHNlIGlmICghY3VycmVudFN0eWxlLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSB8fCAh
Y3VycmVudENoYXJhY3RlcklzU3BhY2UpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIWN1cnJl
bnRTdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSB8fCAhY3VycmVudENoYXJhY3RlcklzU3BhY2Up
CiAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nT2JqZWN0cy5jbGVhcigpOwogCiAgICAgICAg
ICAgICAgICAgYXRTdGFydCA9IGZhbHNlOwpAQCAtMzIxMyw3ICszMjE2LDcgQEAgSW5saW5lSXRl
cmF0b3IgTGluZUJyZWFrZXI6Om5leHRTZWdtZW50QgogCiAgICAgICAgICAgICBpZiAoIXdpZHRo
LmZpdHNPbkxpbmUoKSkgewogICAgICAgICAgICAgICAgIGlmIChjYW5IeXBoZW5hdGUpCi0gICAg
ICAgICAgICAgICAgICAgIHRyeUh5cGhlbmF0aW5nKHQsIGYsIHN0eWxlLmxvY2FsZSgpLCBjb25z
ZWN1dGl2ZUh5cGhlbmF0ZWRMaW5lcywgYmxvY2tTdHlsZS0+aHlwaGVuYXRpb25MaW1pdExpbmVz
KCksIHN0eWxlLmh5cGhlbmF0aW9uTGltaXRCZWZvcmUoKSwgc3R5bGUuaHlwaGVuYXRpb25MaW1p
dEFmdGVyKCksIGxhc3RTcGFjZSwgY3VycmVudC5tX3Bvcywgd2lkdGguY3VycmVudFdpZHRoKCkg
LSBhZGRpdGlvbmFsVGVtcFdpZHRoLCB3aWR0aC5hdmFpbGFibGVXaWR0aCgpLCBpc0ZpeGVkUGl0
Y2gsIGNvbGxhcHNlV2hpdGVTcGFjZSwgbGFzdFNwYWNlV29yZFNwYWNpbmcsIGxCcmVhaywgY3Vy
cmVudC5tX25leHRCcmVha2FibGVQb3NpdGlvbiwgbV9oeXBoZW5hdGVkKTsKKyAgICAgICAgICAg
ICAgICAgICAgdHJ5SHlwaGVuYXRpbmcodCwgZiwgc3R5bGUubG9jYWxlKCksIGNvbnNlY3V0aXZl
SHlwaGVuYXRlZExpbmVzLCBibG9ja1N0eWxlLmh5cGhlbmF0aW9uTGltaXRMaW5lcygpLCBzdHls
ZS5oeXBoZW5hdGlvbkxpbWl0QmVmb3JlKCksIHN0eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigp
LCBsYXN0U3BhY2UsIGN1cnJlbnQubV9wb3MsIHdpZHRoLmN1cnJlbnRXaWR0aCgpIC0gYWRkaXRp
b25hbFRlbXBXaWR0aCwgd2lkdGguYXZhaWxhYmxlV2lkdGgoKSwgaXNGaXhlZFBpdGNoLCBjb2xs
YXBzZVdoaXRlU3BhY2UsIGxhc3RTcGFjZVdvcmRTcGFjaW5nLCBsQnJlYWssIGN1cnJlbnQubV9u
ZXh0QnJlYWthYmxlUG9zaXRpb24sIG1faHlwaGVuYXRlZCk7CiAKICAgICAgICAgICAgICAgICBp
ZiAoIW1faHlwaGVuYXRlZCAmJiBsQnJlYWsucHJldmlvdXNJblNhbWVOb2RlKCkgPT0gc29mdEh5
cGhlbiAmJiBzdHlsZS5oeXBoZW5zKCkgIT0gSHlwaGVuc05vbmUpCiAgICAgICAgICAgICAgICAg
ICAgIG1faHlwaGVuYXRlZCA9IHRydWU7CkBAIC0zMjI5LDcgKzMyMzIsNyBAQCBJbmxpbmVJdGVy
YXRvciBMaW5lQnJlYWtlcjo6bmV4dFNlZ21lbnRCCiAgICAgICAgIGJvb2wgY2FuQnJlYWtIZXJl
ID0gY2FuQnJlYWtBdFRoaXNQb3NpdGlvbihhdXRvV3JhcCwgd2lkdGgsIGxCcmVhaywgbmV4dCwg
Y3VycmVudCwgY3VycldTLCBjdXJyZW50Q2hhcmFjdGVySXNTcGFjZSwgYXV0b1dyYXBXYXNFdmVy
VHJ1ZU9uTGluZSk7CiAgICAgICAgIGlmIChjYW5CcmVha0hlcmUgJiYgIXdpZHRoLmZpdHNPbkxp
bmUoaWdub3JpbmdTcGFjZXMpKSB7CiAgICAgICAgICAgICAvLyBpZiB3ZSBoYXZlIGZsb2F0cywg
dHJ5IHRvIGdldCBiZWxvdyB0aGVtLgotICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXJJ
c1NwYWNlICYmICFpZ25vcmluZ1NwYWNlcyAmJiBjdXJyZW50U3R5bGUtPmNvbGxhcHNlV2hpdGVT
cGFjZSgpKQorICAgICAgICAgICAgaWYgKGN1cnJlbnRDaGFyYWN0ZXJJc1NwYWNlICYmICFpZ25v
cmluZ1NwYWNlcyAmJiBjdXJyZW50U3R5bGUuY29sbGFwc2VXaGl0ZVNwYWNlKCkpCiAgICAgICAg
ICAgICAgICAgdHJhaWxpbmdPYmplY3RzLmNsZWFyKCk7CiAKICAgICAgICAgICAgIGlmICh3aWR0
aC5jb21taXR0ZWRXaWR0aCgpKQpAQCAtMzI0Miw3ICszMjQ1LDcgQEAgSW5saW5lSXRlcmF0b3Ig
TGluZUJyZWFrZXI6Om5leHRTZWdtZW50QgogICAgICAgICAgICAgLy8gdGhlIGVuZCBsYWJlbCBp
ZiB3ZSBzdGlsbCBkb24ndCBmaXQgb24gdGhlIGxpbmUuIC1kd2gKICAgICAgICAgICAgIGlmICgh
d2lkdGguZml0c09uTGluZShpZ25vcmluZ1NwYWNlcykpCiAgICAgICAgICAgICAgICAgZ290byBl
bmQ7Ci0gICAgICAgIH0gZWxzZSBpZiAoYmxvY2tTdHlsZS0+YXV0b1dyYXAoKSAmJiAhd2lkdGgu
Zml0c09uTGluZSgpICYmICF3aWR0aC5jb21taXR0ZWRXaWR0aCgpKSB7CisgICAgICAgIH0gZWxz
ZSBpZiAoYmxvY2tTdHlsZS5hdXRvV3JhcCgpICYmICF3aWR0aC5maXRzT25MaW5lKCkgJiYgIXdp
ZHRoLmNvbW1pdHRlZFdpZHRoKCkpIHsKICAgICAgICAgICAgIC8vIElmIHRoZSBjb250YWluZXIg
YXV0b3dyYXBzIGJ1dCB0aGUgY3VycmVudCBjaGlsZCBkb2VzIG5vdCB0aGVuIHdlIHN0aWxsIG5l
ZWQgdG8gZW5zdXJlIHRoYXQgaXQKICAgICAgICAgICAgIC8vIHdyYXBzIGFuZCBtb3ZlcyBiZWxv
dyBhbnkgZmxvYXRzLgogICAgICAgICAgICAgd2lkdGguZml0QmVsb3dGbG9hdHMoKTsKQEAgLTMy
NzgsNyArMzI4MSw3IEBAIElubGluZUl0ZXJhdG9yIExpbmVCcmVha2VyOjpuZXh0U2VnbWVudEIK
ICAgICAgICAgaWYgKGxCcmVhayA9PSByZXNvbHZlci5wb3NpdGlvbigpKSB7CiAgICAgICAgICAg
ICBpZiAoIWxCcmVhay5tX29iaiB8fCAhbEJyZWFrLm1fb2JqLT5pc0JSKCkpIHsKICAgICAgICAg
ICAgICAgICAvLyB3ZSBqdXN0IGFkZCBhcyBtdWNoIGFzIHBvc3NpYmxlCi0gICAgICAgICAgICAg
ICAgaWYgKGJsb2NrU3R5bGUtPndoaXRlU3BhY2UoKSA9PSBQUkUgJiYgIWN1cnJlbnQubV9wb3Mp
IHsKKyAgICAgICAgICAgICAgICBpZiAoYmxvY2tTdHlsZS53aGl0ZVNwYWNlKCkgPT0gUFJFICYm
ICFjdXJyZW50Lm1fcG9zKSB7CiAgICAgICAgICAgICAgICAgICAgIGxCcmVhay5tb3ZlVG8obGFz
dCwgbGFzdC0+aXNUZXh0KCkgPyBsYXN0LT5sZW5ndGgoKSA6IDApOwogICAgICAgICAgICAgICAg
IH0gZWxzZSBpZiAobEJyZWFrLm1fb2JqKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIERvbid0
IGV2ZXIgYnJlYWsgaW4gdGhlIG1pZGRsZSBvZiBhIHdvcmQgaWYgd2UgY2FuIGhlbHAgaXQuCkBA
IC0zMzY2LDggKzMzNjksOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjaGVja0xpbmVzRm9yVGV4dE92
ZXJmCiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEF0b21pY1N0cmluZywgZWxsaXBzaXNTdHIsICgmaG9yaXpvbnRhbEVsbGlw
c2lzLCAxKSk7CiAgICAgY29uc3QgRm9udCYgZmlyc3RMaW5lRm9udCA9IGZpcnN0TGluZVN0eWxl
KCktPmZvbnQoKTsKLSAgICBpbnQgZmlyc3RMaW5lRWxsaXBzaXNXaWR0aCA9IGZpcnN0TGluZUZv
bnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bih0aGlzLCBmaXJzdExpbmVGb250LCAmaG9yaXpvbnRh
bEVsbGlwc2lzLCAxLCBmaXJzdExpbmVTdHlsZSgpKSk7Ci0gICAgaW50IGVsbGlwc2lzV2lkdGgg
PSAoZm9udCA9PSBmaXJzdExpbmVGb250KSA/IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggOiBmb250
LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgJmhvcml6b250YWxFbGxpcHNpcywg
MSwgc3R5bGUoKSkpOworICAgIGludCBmaXJzdExpbmVFbGxpcHNpc1dpZHRoID0gZmlyc3RMaW5l
Rm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZpcnN0TGluZUZvbnQsICZob3Jpem9u
dGFsRWxsaXBzaXMsIDEsICpmaXJzdExpbmVTdHlsZSgpKSk7CisgICAgaW50IGVsbGlwc2lzV2lk
dGggPSAoZm9udCA9PSBmaXJzdExpbmVGb250KSA/IGZpcnN0TGluZUVsbGlwc2lzV2lkdGggOiBm
b250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgJmhvcml6b250YWxFbGxpcHNp
cywgMSwgKnN0eWxlKCkpKTsKIAogICAgIC8vIEZvciBMVFIgdGV4dCB0cnVuY2F0aW9uLCB3ZSB3
YW50IHRvIGdldCB0aGUgcmlnaHQgZWRnZSBvZiBvdXIgcGFkZGluZyBib3gsIGFuZCB0aGVuIHdl
IHdhbnQgdG8gc2VlCiAgICAgLy8gaWYgdGhlIHJpZ2h0IGVkZ2Ugb2YgYSBsaW5lIGJveCBleGNl
ZWRzIHRoYXQuICBGb3IgUlRMLCB3ZSB1c2UgdGhlIGxlZnQgZWRnZSBvZiB0aGUgcGFkZGluZyBi
b3ggYW5kCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ29tYmluZVRleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb21iaW5l
VGV4dC5jcHAJKHJldmlzaW9uIDE1NjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb21iaW5lVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMCw3ICsxMDAsNyBAQCB2
b2lkIFJlbmRlckNvbWJpbmVUZXh0Ojpjb21iaW5lVGV4dCgpCiAgICAgaWYgKHN0eWxlKCktPmlz
SG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFRleHRSdW4g
cnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgb3JpZ2luYWxGb250KCks
IHRoaXMsIHN0eWxlKCkpOworICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxvY2s6OmNvbnN0cnVj
dFRleHRSdW4odGhpcywgb3JpZ2luYWxGb250KCksIHRoaXMsICpzdHlsZSgpKTsKICAgICBGb250
RGVzY3JpcHRpb24gZGVzY3JpcHRpb24gPSBvcmlnaW5hbEZvbnQoKS5mb250RGVzY3JpcHRpb24o
KTsKICAgICBmbG9hdCBlbVdpZHRoID0gZGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkgKiB0ZXh0
Q29tYmluZU1hcmdpbjsKICAgICBib29sIHNob3VsZFVwZGF0ZUZvbnQgPSBmYWxzZTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVkRmxleGlibGVCb3guY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJEZXByZWNhdGVk
RmxleGlibGVCb3guY3BwCShyZXZpc2lvbiAxNTY2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAxNSwxMCArMTAxNSwxMCBAQCB2b2lkIFJlbmRlckRlcHJlY2F0ZWRGbGV4aWJsZUJveDo6YXBw
bHlMCiAgICAgICAgIExheW91dFVuaXQgdG90YWxXaWR0aDsKICAgICAgICAgSW5saW5lQm94KiBh
bmNob3JCb3ggPSBsYXN0TGluZS0+bGFzdENoaWxkKCk7CiAgICAgICAgIGlmIChhbmNob3JCb3gg
JiYgYW5jaG9yQm94LT5yZW5kZXJlcigpLnN0eWxlKCktPmlzTGluaygpKQotICAgICAgICAgICAg
dG90YWxXaWR0aCA9IGFuY2hvckJveC0+bG9naWNhbFdpZHRoKCkgKyBmb250LndpZHRoKGNvbnN0
cnVjdFRleHRSdW4odGhpcywgZm9udCwgZWxsaXBzaXNBbmRTcGFjZSwgMiwgc3R5bGUoKSkpOwor
ICAgICAgICAgICAgdG90YWxXaWR0aCA9IGFuY2hvckJveC0+bG9naWNhbFdpZHRoKCkgKyBmb250
LndpZHRoKGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgZWxsaXBzaXNBbmRTcGFjZSwgMiwg
KnN0eWxlKCkpKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBhbmNob3JCb3ggPSAwOwot
ICAgICAgICAgICAgdG90YWxXaWR0aCA9IGZvbnQud2lkdGgoY29uc3RydWN0VGV4dFJ1bih0aGlz
LCBmb250LCAmaG9yaXpvbnRhbEVsbGlwc2lzLCAxLCBzdHlsZSgpKSk7CisgICAgICAgICAgICB0
b3RhbFdpZHRoID0gZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsICZob3Jp
em9udGFsRWxsaXBzaXMsIDEsICpzdHlsZSgpKSk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBT
ZWUgaWYgdGhpcyB3aWR0aCBjYW4gYmUgYWNjb21tb2RhdGVkIG9uIHRoZSBsYXN0IHZpc2libGUg
bGluZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250
cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wuY3BwCShyZXZpc2lvbiAxNTY2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjAsNyArMTIwLDcgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwog
ICAgIGlmIChwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQaGFzZUZvcmVncm91bmQpIHsKICAgICAg
ICAgY29uc3QgU3RyaW5nJiBkaXNwbGF5ZWRGaWxlbmFtZSA9IGZpbGVUZXh0VmFsdWUoKTsKICAg
ICAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCktPmZvbnQoKTsKLSAgICAgICAgVGV4dFJ1
biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBkaXNwbGF5ZWRGaWxlbmFt
ZSwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiwgUmVzcGVjdERpcmVj
dGlvbiB8IFJlc3BlY3REaXJlY3Rpb25PdmVycmlkZSk7CisgICAgICAgIFRleHRSdW4gdGV4dFJ1
biA9IGNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgZGlzcGxheWVkRmlsZW5hbWUsICpzdHls
ZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uLCBSZXNwZWN0RGlyZWN0aW9uIHwg
UmVzcGVjdERpcmVjdGlvbk92ZXJyaWRlKTsKICAgICAgICAgdGV4dFJ1bi5kaXNhYmxlUm91bmRp
bmdIYWNrcygpOwogCiAgICAgICAgIC8vIERldGVybWluZSB3aGVyZSB0aGUgZmlsZW5hbWUgc2hv
dWxkIGJlIHBsYWNlZApAQCAtMTc4LDEwICsxNzgsMTAgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbDo6Y29tcHV0ZUludAogICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250
KCk7CiAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGUgbmVlZCBmb3IgdGhpcyBjb25zdF9jYXN0IGJ5
IG1ha2luZyBjb25zdHJ1Y3RUZXh0UnVuIHRha2UgYSBjb25zdCBSZW5kZXJPYmplY3QqLgogICAg
IFJlbmRlckZpbGVVcGxvYWRDb250cm9sKiByZW5kZXJlciA9IGNvbnN0X2Nhc3Q8UmVuZGVyRmls
ZVVwbG9hZENvbnRyb2wqPih0aGlzKTsKLSAgICBmbG9hdCBtaW5EZWZhdWx0TGFiZWxXaWR0aCA9
IGRlZmF1bHRXaWR0aE51bUNoYXJzICogZm9udC53aWR0aChjb25zdHJ1Y3RUZXh0UnVuKHJlbmRl
cmVyLCBmb250LCBjaGFyYWN0ZXJBc1N0cmluZywgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFp
bGluZ0V4cGFuc2lvbikpOworICAgIGZsb2F0IG1pbkRlZmF1bHRMYWJlbFdpZHRoID0gZGVmYXVs
dFdpZHRoTnVtQ2hhcnMgKiBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZv
bnQsIGNoYXJhY3RlckFzU3RyaW5nLCAqc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4
cGFuc2lvbikpOwogCiAgICAgY29uc3QgU3RyaW5nIGxhYmVsID0gdGhlbWUoKS0+ZmlsZUxpc3RE
ZWZhdWx0TGFiZWwoaW5wdXRFbGVtZW50KCkubXVsdGlwbGUoKSk7Ci0gICAgZmxvYXQgZGVmYXVs
dExhYmVsV2lkdGggPSBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZvbnQs
IGxhYmVsLCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKSk7CisgICAg
ZmxvYXQgZGVmYXVsdExhYmVsV2lkdGggPSBmb250LndpZHRoKGNvbnN0cnVjdFRleHRSdW4ocmVu
ZGVyZXIsIGZvbnQsIGxhYmVsLCAqc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFu
c2lvbikpOwogICAgIGlmIChIVE1MSW5wdXRFbGVtZW50KiBidXR0b24gPSB1cGxvYWRCdXR0b24o
KSkKICAgICAgICAgaWYgKFJlbmRlck9iamVjdCogYnV0dG9uUmVuZGVyZXIgPSBidXR0b24tPnJl
bmRlcmVyKCkpCiAgICAgICAgICAgICBkZWZhdWx0TGFiZWxXaWR0aCArPSBidXR0b25SZW5kZXJl
ci0+bWF4UHJlZmVycmVkTG9naWNhbFdpZHRoKCkgKyBhZnRlckJ1dHRvblNwYWNpbmc7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDE1NjYx
MSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBib29sIFJlbmRlckltYWdlOjpzZXRJbWFnZVNpemVG
b3JBbHRUZXh0CiAgICAgICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdl
UHJldmVudGVyOwogCiAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7
Ci0gICAgICAgIEludFNpemUgcGFkZGVkVGV4dFNpemUocGFkZGluZ1dpZHRoICsgbWluKGNlaWxm
KGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV9h
bHRUZXh0LCBzdHlsZSgpKSkpLCBtYXhBbHRUZXh0V2lkdGgpLCBwYWRkaW5nSGVpZ2h0ICsgbWlu
KGZvbnQuZm9udE1ldHJpY3MoKS5oZWlnaHQoKSwgbWF4QWx0VGV4dEhlaWdodCkpOworICAgICAg
ICBJbnRTaXplIHBhZGRlZFRleHRTaXplKHBhZGRpbmdXaWR0aCArIG1pbihjZWlsZihmb250Lndp
ZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIG1fYWx0VGV4dCwg
KnN0eWxlKCkpKSksIG1heEFsdFRleHRXaWR0aCksIHBhZGRpbmdIZWlnaHQgKyBtaW4oZm9udC5m
b250TWV0cmljcygpLmhlaWdodCgpLCBtYXhBbHRUZXh0SGVpZ2h0KSk7CiAgICAgICAgIGltYWdl
U2l6ZSA9IGltYWdlU2l6ZS5leHBhbmRlZFRvKHBhZGRlZFRleHRTaXplKTsKICAgICB9CiAKQEAg
LTM5Miw3ICszOTIsNyBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBhaW50SW5m
CiAKICAgICAgICAgICAgICAgICAvLyBPbmx5IGRyYXcgdGhlIGFsdCB0ZXh0IGlmIGl0J2xsIGZp
dCB3aXRoaW4gdGhlIGNvbnRlbnQgYm94LAogICAgICAgICAgICAgICAgIC8vIGFuZCBvbmx5IGlm
IGl0IGZpdHMgYWJvdmUgdGhlIGVycm9yIGltYWdlLgotICAgICAgICAgICAgICAgIFRleHRSdW4g
dGV4dFJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQs
IHN0eWxlKCkpOworICAgICAgICAgICAgICAgIFRleHRSdW4gdGV4dFJ1biA9IFJlbmRlckJsb2Nr
Ojpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHRleHQsICpzdHlsZSgpKTsKICAgICAgICAg
ICAgICAgICBMYXlvdXRVbml0IHRleHRXaWR0aCA9IGZvbnQud2lkdGgodGV4dFJ1bik7CiAgICAg
ICAgICAgICAgICAgaWYgKGVycm9yUGljdHVyZURyYXduKSB7CiAgICAgICAgICAgICAgICAgICAg
IGlmICh1c2FibGVXaWR0aCA+PSB0ZXh0V2lkdGggJiYgZm9udE1ldHJpY3MuaGVpZ2h0KCkgPD0g
aW1hZ2VPZmZzZXQuaGVpZ2h0KCkpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAxNTY2MTEpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAsNyBA
QCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAgICAgICAgIGlm
ICghdGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICBhcHBseVRleHRUcmFuc2Zvcm0o
c3R5bGUoKSwgdGV4dCwgJyAnKTsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogV2h5IGlzIHRo
aXMgYWx3YXlzIExUUj8gQ2FuJ3QgdGV4dCBkaXJlY3Rpb24gYWZmZWN0IHRoZSB3aWR0aD8KLSAg
ICAgICAgICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGl0
ZW1Gb250LCB0ZXh0LCBzdHlsZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKTsK
KyAgICAgICAgICAgICAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHRoaXMs
IGl0ZW1Gb250LCB0ZXh0LCAqc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lv
bik7CiAgICAgICAgICAgICAgICAgdGV4dFJ1bi5kaXNhYmxlUm91bmRpbmdIYWNrcygpOwogICAg
ICAgICAgICAgICAgIGZsb2F0IHRleHRXaWR0aCA9IGl0ZW1Gb250LndpZHRoKHRleHRSdW4pOwog
ICAgICAgICAgICAgICAgIHdpZHRoID0gbWF4KHdpZHRoLCB0ZXh0V2lkdGgpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24g
MTU2NjExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzM3LDcgKzEzMzcsNyBAQCB2b2lkIFJlbmRlckxpc3RNYXJr
ZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgICAgIHJldHVybjsKIAogICAgIGNvbnN0IEZvbnQm
IGZvbnQgPSBzdHlsZSgpLT5mb250KCk7Ci0gICAgVGV4dFJ1biB0ZXh0UnVuID0gUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgbV90ZXh0LCBzdHlsZSgpKTsKKyAgICBU
ZXh0UnVuIHRleHRSdW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250
LCBtX3RleHQsICpzdHlsZSgpKTsKIAogICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3Rh
dGVTYXZlcigqY29udGV4dCwgZmFsc2UpOwogICAgIGlmICghc3R5bGUoKS0+aXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkgewpAQCAtMTM3MiwxMCArMTM3MiwxMCBAQCB2b2lkIFJlbmRlckxpc3RN
YXJrZXI6OnBhaW50KFBhaW50SW5mbyYgCiAgICAgICAgICAgICBpbnQgd2lkdGggPSBmb250Lndp
ZHRoKHRleHRSdW4pOwogICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1
biwgdGV4dE9yaWdpbik7CiAgICAgICAgICAgICBVQ2hhciBzdWZmaXhTcGFjZVsyXSA9IHsgc3Vm
Zml4LCAnICcgfTsKLSAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KGZvbnQsIFJlbmRlckJs
b2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHN1ZmZpeFNwYWNlLCAyLCBzdHlsZSgp
KSwgdGV4dE9yaWdpbiArIEludFNpemUod2lkdGgsIDApKTsKKyAgICAgICAgICAgIGNvbnRleHQt
PmRyYXdUZXh0KGZvbnQsIFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQs
IHN1ZmZpeFNwYWNlLCAyLCAqc3R5bGUoKSksIHRleHRPcmlnaW4gKyBJbnRTaXplKHdpZHRoLCAw
KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBVQ2hhciBzcGFjZVN1ZmZpeFsyXSA9
IHsgJyAnLCBzdWZmaXggfTsKLSAgICAgICAgICAgIFRleHRSdW4gc3BhY2VTdWZmaXhSdW4gPSBS
ZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBzcGFjZVN1ZmZpeCwgMiwg
c3R5bGUoKSk7CisgICAgICAgICAgICBUZXh0UnVuIHNwYWNlU3VmZml4UnVuID0gUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgc3BhY2VTdWZmaXgsIDIsICpzdHlsZSgp
KTsKICAgICAgICAgICAgIGludCB3aWR0aCA9IGZvbnQud2lkdGgoc3BhY2VTdWZmaXhSdW4pOwog
ICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgc3BhY2VTdWZmaXhSdW4sIHRleHRP
cmlnaW4pOwogICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQoZm9udCwgdGV4dFJ1biwgdGV4
dE9yaWdpbiArIEludFNpemUod2lkdGgsIDApKTsKQEAgLTE2NDUsNyArMTY0NSw3IEBAIHZvaWQg
UmVuZGVyTGlzdE1hcmtlcjo6Y29tcHV0ZVByZWZlcnJlZEwKICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgIExheW91dFVuaXQgaXRlbVdpZHRoID0gZm9udC53aWR0aChtX3RleHQp
OwogICAgICAgICAgICAgICAgIFVDaGFyIHN1ZmZpeFNwYWNlWzJdID0geyBsaXN0TWFya2VyU3Vm
Zml4KHR5cGUsIG1fbGlzdEl0ZW0udmFsdWUoKSksICcgJyB9OwotICAgICAgICAgICAgICAgIExh
eW91dFVuaXQgc3VmZml4U3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0
cnVjdFRleHRSdW4odGhpcywgZm9udCwgc3VmZml4U3BhY2UsIDIsIHN0eWxlKCkpKTsKKyAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IHN1ZmZpeFNwYWNlV2lkdGggPSBmb250LndpZHRoKFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsIHN1ZmZpeFNwYWNlLCAyLCAqc3R5
bGUoKSkpOwogICAgICAgICAgICAgICAgIGxvZ2ljYWxXaWR0aCA9IGl0ZW1XaWR0aCArIHN1ZmZp
eFNwYWNlV2lkdGg7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTE4NzAs
NyArMTg3MCw3IEBAIEludFJlY3QgUmVuZGVyTGlzdE1hcmtlcjo6Z2V0UmVsYXRpdmVNYXIKICAg
ICAgICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CiAgICAgICAgICAg
ICBpbnQgaXRlbVdpZHRoID0gZm9udC53aWR0aChtX3RleHQpOwogICAgICAgICAgICAgVUNoYXIg
c3VmZml4U3BhY2VbMl0gPSB7IGxpc3RNYXJrZXJTdWZmaXgodHlwZSwgbV9saXN0SXRlbS52YWx1
ZSgpKSwgJyAnIH07Ci0gICAgICAgICAgICBpbnQgc3VmZml4U3BhY2VXaWR0aCA9IGZvbnQud2lk
dGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgc3VmZml4U3BhY2Us
IDIsIHN0eWxlKCkpKTsKKyAgICAgICAgICAgIGludCBzdWZmaXhTcGFjZVdpZHRoID0gZm9udC53
aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBzdWZmaXhTcGFj
ZSwgMiwgKnN0eWxlKCkpKTsKICAgICAgICAgICAgIHJlbGF0aXZlUmVjdCA9IEludFJlY3QoMCwg
MCwgaXRlbVdpZHRoICsgc3VmZml4U3BhY2VXaWR0aCwgZm9udC5mb250TWV0cmljcygpLmhlaWdo
dCgpKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHJldmlzaW9uIDE1NjYxMSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzA0LDcgKzcwNCw3IEBAIEFMV0FZU19JTkxJTkUg
ZmxvYXQgUmVuZGVyVGV4dDo6d2lkdGhGcm8KICAgICAgICAgcmV0dXJuIHc7CiAgICAgfQogCi0g
ICAgVGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihjb25zdF9jYXN0
PFJlbmRlclRleHQqPih0aGlzKSwgZiwgdGhpcywgc3RhcnQsIGxlbiwgc3R5bGUoKSk7CisgICAg
VGV4dFJ1biBydW4gPSBSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bihjb25zdF9jYXN0PFJl
bmRlclRleHQqPih0aGlzKSwgZiwgdGhpcywgc3RhcnQsIGxlbiwgKnN0eWxlKCkpOwogICAgIHJ1
bi5zZXRDaGFyYWN0ZXJzTGVuZ3RoKHRleHRMZW5ndGgoKSAtIHN0YXJ0KTsKICAgICBBU1NFUlQo
cnVuLmNoYXJhY3RlcnNMZW5ndGgoKSA+PSBydW4ubGVuZ3RoKCkpOwogCkBAIC03NTksNyArNzU5
LDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyhmbG9hdAogICAgICAgICBj
b25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVz
IGZpcnN0LWxpbmUuCiAgICAgICAgIGlmIChzdHJpcEZyb250U3BhY2VzKSB7CiAgICAgICAgICAg
ICBjb25zdCBVQ2hhciBzcGFjZSA9ICcgJzsKLSAgICAgICAgICAgIGZsb2F0IHNwYWNlV2lkdGgg
PSBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZvbnQsICZz
cGFjZSwgMSwgc3R5bGUoKSkpOworICAgICAgICAgICAgZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQu
d2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odGhpcywgZm9udCwgJnNwYWNlLCAx
LCAqc3R5bGUoKSkpOwogICAgICAgICAgICAgbWF4VyAtPSBzcGFjZVdpZHRoOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIG1heFcgKz0gZm9udC53b3JkU3BhY2luZygpOwpAQCAtODAzLDkg
KzgwMyw5IEBAIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMoZmxvYXQKICAgICB9
CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1NwYWNlQWNjb3JkaW5nVG9TdHlsZShVQ2hhciBj
LCBSZW5kZXJTdHlsZSogc3R5bGUpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNTcGFjZUFjY29yZGlu
Z1RvU3R5bGUoVUNoYXIgYywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogewotICAgIHJldHVy
biBjID09ICcgJyB8fCAoYyA9PSBub0JyZWFrU3BhY2UgJiYgc3R5bGUtPm5ic3BNb2RlKCkgPT0g
U1BBQ0UpOworICAgIHJldHVybiBjID09ICcgJyB8fCAoYyA9PSBub0JyZWFrU3BhY2UgJiYgc3R5
bGUubmJzcE1vZGUoKSA9PSBTUEFDRSk7CiB9CiAKIGZsb2F0IFJlbmRlclRleHQ6Om1pbkxvZ2lj
YWxXaWR0aCgpIGNvbnN0CkBAIC04MzYsMTAgKzgzNiwxMCBAQCB2b2lkIFJlbmRlclRleHQ6OmNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsCiBzdGF0aWMgaW5saW5lIGZsb2F0IGh5cGhlbldpZHRoKFJl
bmRlclRleHQqIHJlbmRlcmVyLCBjb25zdCBGb250JiBmb250KQogewogICAgIFJlbmRlclN0eWxl
KiBzdHlsZSA9IHJlbmRlcmVyLT5zdHlsZSgpOwotICAgIHJldHVybiBmb250LndpZHRoKFJlbmRl
ckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHJlbmRlcmVyLCBmb250LCBzdHlsZS0+aHlwaGVuU3Ry
aW5nKCkuc3RyaW5nKCksIHN0eWxlKSk7CisgICAgcmV0dXJuIGZvbnQud2lkdGgoUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZvbnQsIHN0eWxlLT5oeXBoZW5TdHJpbmco
KS5zdHJpbmcoKSwgKnN0eWxlKSk7CiB9CiAKLXN0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRX
aWR0aChSZW5kZXJUZXh0KiByZW5kZXJlciwgUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBGb250
JiBmb250LCBjb25zdCBVQ2hhciogd29yZCwgaW50IHdvcmRMZW5ndGgsIGludCBtaW5pbXVtUHJl
Zml4TGVuZ3RoLCBpbnQgbWluaW11bVN1ZmZpeExlbmd0aCwgaW50JiBzdWZmaXhTdGFydCwgSGFz
aFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+JiBmYWxsYmFja0ZvbnRzLCBHbHlwaE92ZXJmbG93
JiBnbHlwaE92ZXJmbG93KQorc3RhdGljIGZsb2F0IG1heFdvcmRGcmFnbWVudFdpZHRoKFJlbmRl
clRleHQqIHJlbmRlcmVyLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IEZvbnQmIGZv
bnQsIGNvbnN0IFVDaGFyKiB3b3JkLCBpbnQgd29yZExlbmd0aCwgaW50IG1pbmltdW1QcmVmaXhM
ZW5ndGgsIGludCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBpbnQmIHN1ZmZpeFN0YXJ0LCBIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4mIGZhbGxiYWNrRm9udHMsIEdseXBoT3ZlcmZsb3cmIGds
eXBoT3ZlcmZsb3cpCiB7CiAgICAgc3VmZml4U3RhcnQgPSAwOwogICAgIGlmICh3b3JkTGVuZ3Ro
IDw9IG1pbmltdW1TdWZmaXhMZW5ndGgpCkBAIC04NDcsNyArODQ3LDcgQEAgc3RhdGljIGZsb2F0
IG1heFdvcmRGcmFnbWVudFdpZHRoKFJlbmRlcgogCiAgICAgVmVjdG9yPGludCwgOD4gaHlwaGVu
TG9jYXRpb25zOwogICAgIGludCBoeXBoZW5Mb2NhdGlvbiA9IHdvcmRMZW5ndGggLSBtaW5pbXVt
U3VmZml4TGVuZ3RoOwotICAgIHdoaWxlICgoaHlwaGVuTG9jYXRpb24gPSBsYXN0SHlwaGVuTG9j
YXRpb24od29yZCwgd29yZExlbmd0aCwgaHlwaGVuTG9jYXRpb24sIHN0eWxlLT5sb2NhbGUoKSkp
ID49IG1pbmltdW1QcmVmaXhMZW5ndGgpCisgICAgd2hpbGUgKChoeXBoZW5Mb2NhdGlvbiA9IGxh
c3RIeXBoZW5Mb2NhdGlvbih3b3JkLCB3b3JkTGVuZ3RoLCBoeXBoZW5Mb2NhdGlvbiwgc3R5bGUu
bG9jYWxlKCkpKSA+PSBtaW5pbXVtUHJlZml4TGVuZ3RoKQogICAgICAgICBoeXBoZW5Mb2NhdGlv
bnMuYXBwZW5kKGh5cGhlbkxvY2F0aW9uKTsKIAogICAgIGlmIChoeXBoZW5Mb2NhdGlvbnMuaXNF
bXB0eSgpKQpAQCAtODYxLDcgKzg2MSw3IEBAIHN0YXRpYyBmbG9hdCBtYXhXb3JkRnJhZ21lbnRX
aWR0aChSZW5kZXIKICAgICAgICAgaW50IGZyYWdtZW50TGVuZ3RoID0gaHlwaGVuTG9jYXRpb25z
W2tdIC0gc3VmZml4U3RhcnQ7CiAgICAgICAgIFN0cmluZ0J1aWxkZXIgZnJhZ21lbnRXaXRoSHlw
aGVuOwogICAgICAgICBmcmFnbWVudFdpdGhIeXBoZW4uYXBwZW5kKHdvcmQgKyBzdWZmaXhTdGFy
dCwgZnJhZ21lbnRMZW5ndGgpOwotICAgICAgICBmcmFnbWVudFdpdGhIeXBoZW4uYXBwZW5kKHN0
eWxlLT5oeXBoZW5TdHJpbmcoKSk7CisgICAgICAgIGZyYWdtZW50V2l0aEh5cGhlbi5hcHBlbmQo
c3R5bGUuaHlwaGVuU3RyaW5nKCkpOwogCiAgICAgICAgIFRleHRSdW4gcnVuID0gUmVuZGVyQmxv
Y2s6OmNvbnN0cnVjdFRleHRSdW4ocmVuZGVyZXIsIGZvbnQsIGZyYWdtZW50V2l0aEh5cGhlbi5j
aGFyYWN0ZXJzKCksIGZyYWdtZW50V2l0aEh5cGhlbi5sZW5ndGgoKSwgc3R5bGUpOwogICAgICAg
ICBydW4uc2V0Q2hhcmFjdGVyc0xlbmd0aChmcmFnbWVudFdpdGhIeXBoZW4ubGVuZ3RoKCkpOwpA
QCAtODk2LDExICs4OTYsMTEgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9n
aWNhbAogICAgIG1faGFzQmVnaW5XUyA9IGZhbHNlOwogICAgIG1faGFzRW5kV1MgPSBmYWxzZTsK
IAotICAgIFJlbmRlclN0eWxlKiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKLSAgICBjb25zdCBGb250
JiBmID0gc3R5bGVUb1VzZS0+Zm9udCgpOyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxp
bmUuCi0gICAgZmxvYXQgd29yZFNwYWNpbmcgPSBzdHlsZVRvVXNlLT53b3JkU3BhY2luZygpOwor
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSA9ICp0aGlzLT5zdHlsZSgpOworICAgIGNvbnN0
IEZvbnQmIGYgPSBzdHlsZS5mb250KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGlu
ZS4KKyAgICBmbG9hdCB3b3JkU3BhY2luZyA9IHN0eWxlLndvcmRTcGFjaW5nKCk7CiAgICAgaW50
IGxlbiA9IHRleHRMZW5ndGgoKTsKLSAgICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgYnJlYWtJdGVy
YXRvcihtX3RleHQsIHN0eWxlVG9Vc2UtPmxvY2FsZSgpKTsKKyAgICBMYXp5TGluZUJyZWFrSXRl
cmF0b3IgYnJlYWtJdGVyYXRvcihtX3RleHQsIHN0eWxlLmxvY2FsZSgpKTsKICAgICBib29sIG5l
ZWRzV29yZFNwYWNpbmcgPSBmYWxzZTsKICAgICBib29sIGlnbm9yaW5nU3BhY2VzID0gZmFsc2U7
CiAgICAgYm9vbCBpc1NwYWNlID0gZmFsc2U7CkBAIC05MTEsMzAgKzkxMSwzMCBAQCB2b2lkIFJl
bmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAKICAgICAvLyBOb24temVybyBvbmx5
IHdoZW4ga2VybmluZyBpcyBlbmFibGVkLCBpbiB3aGljaCBjYXNlIHdlIG1lYXN1cmUgd29yZHMg
d2l0aCB0aGVpciB0cmFpbGluZwogICAgIC8vIHNwYWNlLCB0aGVuIHN1YnRyYWN0IGl0cyB3aWR0
aC4KLSAgICBmbG9hdCB3b3JkVHJhaWxpbmdTcGFjZVdpZHRoID0gZi50eXBlc2V0dGluZ0ZlYXR1
cmVzKCkgJiBLZXJuaW5nID8gZi53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0
aGlzLCBmLCAmc3BhY2UsIDEsIHN0eWxlVG9Vc2UpLCAmZmFsbGJhY2tGb250cykgKyB3b3JkU3Bh
Y2luZyA6IDA7CisgICAgZmxvYXQgd29yZFRyYWlsaW5nU3BhY2VXaWR0aCA9IGYudHlwZXNldHRp
bmdGZWF0dXJlcygpICYgS2VybmluZyA/IGYud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRl
eHRSdW4odGhpcywgZiwgJnNwYWNlLCAxLCBzdHlsZSksICZmYWxsYmFja0ZvbnRzKSArIHdvcmRT
cGFjaW5nIDogMDsKIAogICAgIC8vIElmIGF1dG9tYXRpYyBoeXBoZW5hdGlvbiBpcyBhbGxvd2Vk
LCB3ZSBrZWVwIHRyYWNrIG9mIHRoZSB3aWR0aCBvZiB0aGUgd2lkZXN0IHdvcmQgKG9yIHdvcmQK
ICAgICAvLyBmcmFnbWVudCkgZW5jb3VudGVyZWQgc28gZmFyLCBhbmQgb25seSB0cnkgaHlwaGVu
YXRpbmcgd29yZHMgdGhhdCBhcmUgd2lkZXIuCiAgICAgZmxvYXQgbWF4V29yZFdpZHRoID0gbnVt
ZXJpY19saW1pdHM8ZmxvYXQ+OjptYXgoKTsKICAgICBpbnQgbWluaW11bVByZWZpeExlbmd0aCA9
IDA7CiAgICAgaW50IG1pbmltdW1TdWZmaXhMZW5ndGggPSAwOwotICAgIGlmIChzdHlsZVRvVXNl
LT5oeXBoZW5zKCkgPT0gSHlwaGVuc0F1dG8gJiYgY2FuSHlwaGVuYXRlKHN0eWxlVG9Vc2UtPmxv
Y2FsZSgpKSkgeworICAgIGlmIChzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuc0F1dG8gJiYgY2Fu
SHlwaGVuYXRlKHN0eWxlLmxvY2FsZSgpKSkgewogICAgICAgICBtYXhXb3JkV2lkdGggPSAwOwog
CiAgICAgICAgIC8vIE1hcCAnaHlwaGVuYXRlLWxpbWl0LXtiZWZvcmUsYWZ0ZXJ9OiBhdXRvOycg
dG8gMi4KLSAgICAgICAgbWluaW11bVByZWZpeExlbmd0aCA9IHN0eWxlVG9Vc2UtPmh5cGhlbmF0
aW9uTGltaXRCZWZvcmUoKTsKKyAgICAgICAgbWluaW11bVByZWZpeExlbmd0aCA9IHN0eWxlLmh5
cGhlbmF0aW9uTGltaXRCZWZvcmUoKTsKICAgICAgICAgaWYgKG1pbmltdW1QcmVmaXhMZW5ndGgg
PCAwKQogICAgICAgICAgICAgbWluaW11bVByZWZpeExlbmd0aCA9IDI7CiAKLSAgICAgICAgbWlu
aW11bVN1ZmZpeExlbmd0aCA9IHN0eWxlVG9Vc2UtPmh5cGhlbmF0aW9uTGltaXRBZnRlcigpOwor
ICAgICAgICBtaW5pbXVtU3VmZml4TGVuZ3RoID0gc3R5bGUuaHlwaGVuYXRpb25MaW1pdEFmdGVy
KCk7CiAgICAgICAgIGlmIChtaW5pbXVtU3VmZml4TGVuZ3RoIDwgMCkKICAgICAgICAgICAgIG1p
bmltdW1TdWZmaXhMZW5ndGggPSAyOwogICAgIH0KIAogICAgIGludCBmaXJzdEdseXBoTGVmdE92
ZXJmbG93ID0gLTE7CiAKLSAgICBib29sIGJyZWFrTkJTUCA9IHN0eWxlVG9Vc2UtPmF1dG9XcmFw
KCkgJiYgc3R5bGVUb1VzZS0+bmJzcE1vZGUoKSA9PSBTUEFDRTsKLSAgICBib29sIGJyZWFrQWxs
ID0gKHN0eWxlVG9Vc2UtPndvcmRCcmVhaygpID09IEJyZWFrQWxsV29yZEJyZWFrIHx8IHN0eWxl
VG9Vc2UtPndvcmRCcmVhaygpID09IEJyZWFrV29yZEJyZWFrKSAmJiBzdHlsZVRvVXNlLT5hdXRv
V3JhcCgpOworICAgIGJvb2wgYnJlYWtOQlNQID0gc3R5bGUuYXV0b1dyYXAoKSAmJiBzdHlsZS5u
YnNwTW9kZSgpID09IFNQQUNFOworICAgIGJvb2wgYnJlYWtBbGwgPSAoc3R5bGUud29yZEJyZWFr
KCkgPT0gQnJlYWtBbGxXb3JkQnJlYWsgfHwgc3R5bGUud29yZEJyZWFrKCkgPT0gQnJlYWtXb3Jk
QnJlYWspICYmIHN0eWxlLmF1dG9XcmFwKCk7CiAKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxl
bjsgaSsrKSB7CiAgICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJBdChpKTsKQEAgLTk0MywxNCAr
OTQzLDE0IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWwKIAogICAg
ICAgICBib29sIGlzTmV3bGluZSA9IGZhbHNlOwogICAgICAgICBpZiAoYyA9PSAnXG4nKSB7Ci0g
ICAgICAgICAgICBpZiAoc3R5bGVUb1VzZS0+cHJlc2VydmVOZXdsaW5lKCkpIHsKKyAgICAgICAg
ICAgIGlmIChzdHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkgewogICAgICAgICAgICAgICAgIG1faGFz
QnJlYWsgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlzTmV3bGluZSA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgaXNTcGFjZSA9IGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAg
ICAgICAgaXNTcGFjZSA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXHQnKSB7Ci0g
ICAgICAgICAgICBpZiAoIXN0eWxlVG9Vc2UtPmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7CisgICAg
ICAgICAgICBpZiAoIXN0eWxlLmNvbGxhcHNlV2hpdGVTcGFjZSgpKSB7CiAgICAgICAgICAgICAg
ICAgbV9oYXNUYWIgPSB0cnVlOwogICAgICAgICAgICAgICAgIGlzU3BhY2UgPSBmYWxzZTsKICAg
ICAgICAgICAgIH0gZWxzZQpAQCAtOTYzLDcgKzk2Myw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29t
cHV0ZVByZWZlcnJlZExvZ2ljYWwKICAgICAgICAgaWYgKChpc1NwYWNlIHx8IGlzTmV3bGluZSkg
JiYgaSA9PSBsZW4gLSAxKQogICAgICAgICAgICAgbV9oYXNFbmRXUyA9IHRydWU7CiAKLSAgICAg
ICAgaWYgKCFpZ25vcmluZ1NwYWNlcyAmJiBzdHlsZVRvVXNlLT5jb2xsYXBzZVdoaXRlU3BhY2Uo
KSAmJiBwcmV2aW91c0NoYXJhY3RlcklzU3BhY2UgJiYgaXNTcGFjZSkKKyAgICAgICAgaWYgKCFp
Z25vcmluZ1NwYWNlcyAmJiBzdHlsZS5jb2xsYXBzZVdoaXRlU3BhY2UoKSAmJiBwcmV2aW91c0No
YXJhY3RlcklzU3BhY2UgJiYgaXNTcGFjZSkKICAgICAgICAgICAgIGlnbm9yaW5nU3BhY2VzID0g
dHJ1ZTsKIAogICAgICAgICBpZiAoaWdub3JpbmdTcGFjZXMgJiYgIWlzU3BhY2UpCkBAIC05NzQs
NyArOTc0LDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbAogICAg
ICAgICAgICAgQVNTRVJUKGxhc3RXb3JkQm91bmRhcnkgPT0gaSk7CiAgICAgICAgICAgICBsYXN0
V29yZEJvdW5kYXJ5Kys7CiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfSBlbHNlIGlm
IChjID09IHNvZnRIeXBoZW4gJiYgc3R5bGVUb1VzZS0+aHlwaGVucygpICE9IEh5cGhlbnNOb25l
KSB7CisgICAgICAgIH0gZWxzZSBpZiAoYyA9PSBzb2Z0SHlwaGVuICYmIHN0eWxlLmh5cGhlbnMo
KSAhPSBIeXBoZW5zTm9uZSkgewogICAgICAgICAgICAgY3Vyck1heFdpZHRoICs9IHdpZHRoRnJv
bUNhY2hlKGYsIGxhc3RXb3JkQm91bmRhcnksIGkgLSBsYXN0V29yZEJvdW5kYXJ5LCBsZWFkV2lk
dGggKyBjdXJyTWF4V2lkdGgsICZmYWxsYmFja0ZvbnRzLCAmZ2x5cGhPdmVyZmxvdyk7CiAgICAg
ICAgICAgICBpZiAoZmlyc3RHbHlwaExlZnRPdmVyZmxvdyA8IDApCiAgICAgICAgICAgICAgICAg
Zmlyc3RHbHlwaExlZnRPdmVyZmxvdyA9IGdseXBoT3ZlcmZsb3cubGVmdDsKQEAgLTk4NSw3ICs5
ODUsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAgICAgICAg
IGJvb2wgaGFzQnJlYWsgPSBicmVha0FsbCB8fCBpc0JyZWFrYWJsZShicmVha0l0ZXJhdG9yLCBp
LCBuZXh0QnJlYWthYmxlLCBicmVha05CU1ApOwogICAgICAgICBib29sIGJldHdlZW5Xb3JkcyA9
IHRydWU7CiAgICAgICAgIGludCBqID0gaTsKLSAgICAgICAgd2hpbGUgKGMgIT0gJ1xuJyAmJiAh
aXNTcGFjZUFjY29yZGluZ1RvU3R5bGUoYywgc3R5bGVUb1VzZSkgJiYgYyAhPSAnXHQnICYmIChj
ICE9IHNvZnRIeXBoZW4gfHwgc3R5bGVUb1VzZS0+aHlwaGVucygpID09IEh5cGhlbnNOb25lKSkg
eworICAgICAgICB3aGlsZSAoYyAhPSAnXG4nICYmICFpc1NwYWNlQWNjb3JkaW5nVG9TdHlsZShj
LCBzdHlsZSkgJiYgYyAhPSAnXHQnICYmIChjICE9IHNvZnRIeXBoZW4gfHwgc3R5bGUuaHlwaGVu
cygpID09IEh5cGhlbnNOb25lKSkgewogICAgICAgICAgICAgaisrOwogICAgICAgICAgICAgaWYg
KGogPT0gbGVuKQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTAwMCwxOSArMTAwMCwxOSBA
QCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAKICAgICAgICAgaW50
IHdvcmRMZW4gPSBqIC0gaTsKICAgICAgICAgaWYgKHdvcmRMZW4pIHsKLSAgICAgICAgICAgIGJv
b2wgaXNTcGFjZSA9IChqIDwgbGVuKSAmJiBpc1NwYWNlQWNjb3JkaW5nVG9TdHlsZShjLCBzdHls
ZVRvVXNlKTsKKyAgICAgICAgICAgIGJvb2wgaXNTcGFjZSA9IChqIDwgbGVuKSAmJiBpc1NwYWNl
QWNjb3JkaW5nVG9TdHlsZShjLCBzdHlsZSk7CiAgICAgICAgICAgICBmbG9hdCB3OwogICAgICAg
ICAgICAgaWYgKHdvcmRUcmFpbGluZ1NwYWNlV2lkdGggJiYgaXNTcGFjZSkKICAgICAgICAgICAg
ICAgICB3ID0gd2lkdGhGcm9tQ2FjaGUoZiwgaSwgd29yZExlbiArIDEsIGxlYWRXaWR0aCArIGN1
cnJNYXhXaWR0aCwgJmZhbGxiYWNrRm9udHMsICZnbHlwaE92ZXJmbG93KSAtIHdvcmRUcmFpbGlu
Z1NwYWNlV2lkdGg7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICB3ID0gd2lk
dGhGcm9tQ2FjaGUoZiwgaSwgd29yZExlbiwgbGVhZFdpZHRoICsgY3Vyck1heFdpZHRoLCAmZmFs
bGJhY2tGb250cywgJmdseXBoT3ZlcmZsb3cpOwotICAgICAgICAgICAgICAgIGlmIChjID09IHNv
ZnRIeXBoZW4gJiYgc3R5bGVUb1VzZS0+aHlwaGVucygpICE9IEh5cGhlbnNOb25lKQorICAgICAg
ICAgICAgICAgIGlmIChjID09IHNvZnRIeXBoZW4gJiYgc3R5bGUuaHlwaGVucygpICE9IEh5cGhl
bnNOb25lKQogICAgICAgICAgICAgICAgICAgICBjdXJyTWluV2lkdGggKz0gaHlwaGVuV2lkdGgo
dGhpcywgZik7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmICh3ID4gbWF4V29yZFdp
ZHRoKSB7CiAgICAgICAgICAgICAgICAgaW50IHN1ZmZpeFN0YXJ0OwotICAgICAgICAgICAgICAg
IGZsb2F0IG1heEZyYWdtZW50V2lkdGggPSBtYXhXb3JkRnJhZ21lbnRXaWR0aCh0aGlzLCBzdHls
ZVRvVXNlLCBmLCBjaGFyYWN0ZXJzKCkgKyBpLCB3b3JkTGVuLCBtaW5pbXVtUHJlZml4TGVuZ3Ro
LCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBzdWZmaXhTdGFydCwgZmFsbGJhY2tGb250cywgZ2x5cGhP
dmVyZmxvdyk7CisgICAgICAgICAgICAgICAgZmxvYXQgbWF4RnJhZ21lbnRXaWR0aCA9IG1heFdv
cmRGcmFnbWVudFdpZHRoKHRoaXMsIHN0eWxlLCBmLCBjaGFyYWN0ZXJzKCkgKyBpLCB3b3JkTGVu
LCBtaW5pbXVtUHJlZml4TGVuZ3RoLCBtaW5pbXVtU3VmZml4TGVuZ3RoLCBzdWZmaXhTdGFydCwg
ZmFsbGJhY2tGb250cywgZ2x5cGhPdmVyZmxvdyk7CiAKICAgICAgICAgICAgICAgICBpZiAoc3Vm
Zml4U3RhcnQpIHsKICAgICAgICAgICAgICAgICAgICAgZmxvYXQgc3VmZml4V2lkdGg7CkBAIC0x
MDQwLDggKzEwNDAsOCBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
CiAgICAgICAgICAgICAgICAgbGFzdFdvcmRCb3VuZGFyeSA9IGo7CiAgICAgICAgICAgICB9CiAK
LSAgICAgICAgICAgIGJvb2wgaXNDb2xsYXBzaWJsZVdoaXRlU3BhY2UgPSAoaiA8IGxlbikgJiYg
c3R5bGVUb1VzZS0+aXNDb2xsYXBzaWJsZVdoaXRlU3BhY2UoYyk7Ci0gICAgICAgICAgICBpZiAo
aiA8IGxlbiAmJiBzdHlsZVRvVXNlLT5hdXRvV3JhcCgpKQorICAgICAgICAgICAgYm9vbCBpc0Nv
bGxhcHNpYmxlV2hpdGVTcGFjZSA9IChqIDwgbGVuKSAmJiBzdHlsZS5pc0NvbGxhcHNpYmxlV2hp
dGVTcGFjZShjKTsKKyAgICAgICAgICAgIGlmIChqIDwgbGVuICYmIHN0eWxlLmF1dG9XcmFwKCkp
CiAgICAgICAgICAgICAgICAgbV9oYXNCcmVha2FibGVDaGFyID0gdHJ1ZTsKIAogICAgICAgICAg
ICAgLy8gQWRkIGluIHdvcmRTcGFjaW5nIHRvIG91ciBjdXJyTWF4V2lkdGgsIGJ1dCBub3QgaWYg
dGhpcyBpcyB0aGUgbGFzdCB3b3JkIG9uIGEgbGluZSBvciB0aGUKQEAgLTEwNjgsNyArMTA2OCw3
IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWwKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIC8vIE5vd3JhcCBjYW4gbmV2ZXIgYmUgYnJva2VuLCBzbyBkb24n
dCBib3RoZXIgc2V0dGluZyB0aGUKICAgICAgICAgICAgIC8vIGJyZWFrYWJsZSBjaGFyYWN0ZXIg
Ym9vbGVhbi4gUHJlIGNhbiBvbmx5IGJlIGJyb2tlbiBpZiB3ZSBlbmNvdW50ZXIgYSBuZXdsaW5l
LgotICAgICAgICAgICAgaWYgKHN0eWxlKCktPmF1dG9XcmFwKCkgfHwgaXNOZXdsaW5lKQorICAg
ICAgICAgICAgaWYgKHN0eWxlLmF1dG9XcmFwKCkgfHwgaXNOZXdsaW5lKQogICAgICAgICAgICAg
ICAgIG1faGFzQnJlYWthYmxlQ2hhciA9IHRydWU7CiAKICAgICAgICAgICAgIGlmIChjdXJyTWlu
V2lkdGggPiBtX21pbldpZHRoKQpAQCAtMTA3OSw3ICsxMDc5LDcgQEAgdm9pZCBSZW5kZXJUZXh0
Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbAogICAgICAgICAgICAgICAgIGlmIChmaXJzdExpbmUp
IHsKICAgICAgICAgICAgICAgICAgICAgZmlyc3RMaW5lID0gZmFsc2U7CiAgICAgICAgICAgICAg
ICAgICAgIGxlYWRXaWR0aCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghc3R5bGVUb1Vz
ZS0+YXV0b1dyYXAoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzdHlsZS5hdXRvV3JhcCgp
KQogICAgICAgICAgICAgICAgICAgICAgICAgbV9iZWdpbk1pbldpZHRoID0gY3Vyck1heFdpZHRo
OwogICAgICAgICAgICAgICAgIH0KIApAQCAtMTA4NywxMCArMTA4NywxMCBAQCB2b2lkIFJlbmRl
clRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAgICAgICAgICAgICAgICAgICAgIG1fbWF4
V2lkdGggPSBjdXJyTWF4V2lkdGg7CiAgICAgICAgICAgICAgICAgY3Vyck1heFdpZHRoID0gMDsK
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgVGV4dFJ1biBydW4gPSBSZW5k
ZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1bih0aGlzLCBmLCB0aGlzLCBpLCAxLCBzdHlsZVRvVXNl
KTsKKyAgICAgICAgICAgICAgICBUZXh0UnVuIHJ1biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RU
ZXh0UnVuKHRoaXMsIGYsIHRoaXMsIGksIDEsIHN0eWxlKTsKICAgICAgICAgICAgICAgICBydW4u
c2V0Q2hhcmFjdGVyc0xlbmd0aChsZW4gLSBpKTsKICAgICAgICAgICAgICAgICBBU1NFUlQocnVu
LmNoYXJhY3RlcnNMZW5ndGgoKSA+PSBydW4ubGVuZ3RoKCkpOwotICAgICAgICAgICAgICAgIHJ1
bi5zZXRUYWJTaXplKCFzdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSwgc3R5bGUoKS0+dGFi
U2l6ZSgpKTsKKyAgICAgICAgICAgICAgICBydW4uc2V0VGFiU2l6ZSghc3R5bGUuY29sbGFwc2VX
aGl0ZVNwYWNlKCksIHN0eWxlLnRhYlNpemUoKSk7CiAgICAgICAgICAgICAgICAgcnVuLnNldFhQ
b3MobGVhZFdpZHRoICsgY3Vyck1heFdpZHRoKTsKIAogICAgICAgICAgICAgICAgIGN1cnJNYXhX
aWR0aCArPSBmLndpZHRoKHJ1biwgJmZhbGxiYWNrRm9udHMpOwpAQCAtMTExMSwxMCArMTExMSwx
MCBAQCB2b2lkIFJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAgICAgbV9taW5X
aWR0aCA9IG1heChjdXJyTWluV2lkdGgsIG1fbWluV2lkdGgpOwogICAgIG1fbWF4V2lkdGggPSBt
YXgoY3Vyck1heFdpZHRoLCBtX21heFdpZHRoKTsKIAotICAgIGlmICghc3R5bGVUb1VzZS0+YXV0
b1dyYXAoKSkKKyAgICBpZiAoIXN0eWxlLmF1dG9XcmFwKCkpCiAgICAgICAgIG1fbWluV2lkdGgg
PSBtX21heFdpZHRoOwogCi0gICAgaWYgKHN0eWxlVG9Vc2UtPndoaXRlU3BhY2UoKSA9PSBQUkUp
IHsKKyAgICBpZiAoc3R5bGUud2hpdGVTcGFjZSgpID09IFBSRSkgewogICAgICAgICBpZiAoZmly
c3RMaW5lKQogICAgICAgICAgICAgbV9iZWdpbk1pbldpZHRoID0gbV9tYXhXaWR0aDsKICAgICAg
ICAgbV9lbmRNaW5XaWR0aCA9IGN1cnJNYXhXaWR0aDsKQEAgLTE1MDUsNyArMTUwNSw3IEBAIGZs
b2F0IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIGZyb20sIHUKICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICB3ID0gd2lkdGhGcm9tQ2FjaGUoZiwgZnJvbSwgbGVuLCB4UG9zLCBmYWxsYmFj
a0ZvbnRzLCBnbHlwaE92ZXJmbG93KTsKICAgICB9IGVsc2UgewotICAgICAgICBUZXh0UnVuIHJ1
biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0X2Nhc3Q8UmVuZGVyVGV4dCo+
KHRoaXMpLCBmLCB0aGlzLCBmcm9tLCBsZW4sIHN0eWxlKCkpOworICAgICAgICBUZXh0UnVuIHJ1
biA9IFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKGNvbnN0X2Nhc3Q8UmVuZGVyVGV4dCo+
KHRoaXMpLCBmLCB0aGlzLCBmcm9tLCBsZW4sICpzdHlsZSgpKTsKICAgICAgICAgcnVuLnNldENo
YXJhY3RlcnNMZW5ndGgodGV4dExlbmd0aCgpIC0gZnJvbSk7CiAgICAgICAgIEFTU0VSVChydW4u
Y2hhcmFjdGVyc0xlbmd0aCgpID49IHJ1bi5sZW5ndGgoKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkocmV2aXNpb24gMTU2NjEx
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjI5LDcgKzIyOSw3IEBAIGZsb2F0IFJlbmRlclRleHRDb250cm9sOjpn
ZXRBdmdDaGFyV2lkdGgKICAgICBjb25zdCBVQ2hhciBjaCA9ICcwJzsKICAgICBjb25zdCBTdHJp
bmcgc3RyID0gU3RyaW5nKCZjaCwgMSk7CiAgICAgY29uc3QgRm9udCYgZm9udCA9IHN0eWxlKCkt
PmZvbnQoKTsKLSAgICBUZXh0UnVuIHRleHRSdW4gPSBjb25zdHJ1Y3RUZXh0UnVuKHRoaXMsIGZv
bnQsIHN0ciwgc3R5bGUoKSwgVGV4dFJ1bjo6QWxsb3dUcmFpbGluZ0V4cGFuc2lvbik7CisgICAg
VGV4dFJ1biB0ZXh0UnVuID0gY29uc3RydWN0VGV4dFJ1bih0aGlzLCBmb250LCBzdHIsICpzdHls
ZSgpLCBUZXh0UnVuOjpBbGxvd1RyYWlsaW5nRXhwYW5zaW9uKTsKICAgICB0ZXh0UnVuLmRpc2Fi
bGVSb3VuZGluZ0hhY2tzKCk7CiAgICAgcmV0dXJuIGZvbnQud2lkdGgodGV4dFJ1bik7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvUmVuZGVyU3R5bGUuaAkocmV2
aXNpb24gMTU2NjExKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL1JlbmRlclN0
eWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0NSw4ICs3NDUsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBnZXRUZXh0U2hhZG93RXh0ZW50KExheW91dFVuaXQmIHRvcCwgTGF5b3V0VW5pdCYgcmlnaHQs
IExheW91dFVuaXQmIGJvdHRvbSwgTGF5b3V0VW5pdCYgbGVmdCkgY29uc3QgeyBnZXRTaGFkb3dF
eHRlbnQodGV4dFNoYWRvdygpLCB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQpOyB9CiAgICAgdm9p
ZCBnZXRUZXh0U2hhZG93SG9yaXpvbnRhbEV4dGVudChMYXlvdXRVbml0JiBsZWZ0LCBMYXlvdXRV
bml0JiByaWdodCkgY29uc3QgeyBnZXRTaGFkb3dIb3Jpem9udGFsRXh0ZW50KHRleHRTaGFkb3co
KSwgbGVmdCwgcmlnaHQpOyB9CiAgICAgdm9pZCBnZXRUZXh0U2hhZG93VmVydGljYWxFeHRlbnQo
TGF5b3V0VW5pdCYgdG9wLCBMYXlvdXRVbml0JiBib3R0b20pIGNvbnN0IHsgZ2V0U2hhZG93VmVy
dGljYWxFeHRlbnQodGV4dFNoYWRvdygpLCB0b3AsIGJvdHRvbSk7IH0KLSAgICB2b2lkIGdldFRl
eHRTaGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRlbnQoTGF5b3V0VW5pdCYgbG9naWNhbExlZnQsIExh
eW91dFVuaXQmIGxvZ2ljYWxSaWdodCkgeyBnZXRTaGFkb3dJbmxpbmVEaXJlY3Rpb25FeHRlbnQo
dGV4dFNoYWRvdygpLCBsb2dpY2FsTGVmdCwgbG9naWNhbFJpZ2h0KTsgfQotICAgIHZvaWQgZ2V0
VGV4dFNoYWRvd0Jsb2NrRGlyZWN0aW9uRXh0ZW50KExheW91dFVuaXQmIGxvZ2ljYWxUb3AsIExh
eW91dFVuaXQmIGxvZ2ljYWxCb3R0b20pIHsgZ2V0U2hhZG93QmxvY2tEaXJlY3Rpb25FeHRlbnQo
dGV4dFNoYWRvdygpLCBsb2dpY2FsVG9wLCBsb2dpY2FsQm90dG9tKTsgfQorICAgIHZvaWQgZ2V0
VGV4dFNoYWRvd0lubGluZURpcmVjdGlvbkV4dGVudChMYXlvdXRVbml0JiBsb2dpY2FsTGVmdCwg
TGF5b3V0VW5pdCYgbG9naWNhbFJpZ2h0KSBjb25zdCB7IGdldFNoYWRvd0lubGluZURpcmVjdGlv
bkV4dGVudCh0ZXh0U2hhZG93KCksIGxvZ2ljYWxMZWZ0LCBsb2dpY2FsUmlnaHQpOyB9CisgICAg
dm9pZCBnZXRUZXh0U2hhZG93QmxvY2tEaXJlY3Rpb25FeHRlbnQoTGF5b3V0VW5pdCYgbG9naWNh
bFRvcCwgTGF5b3V0VW5pdCYgbG9naWNhbEJvdHRvbSkgY29uc3QgeyBnZXRTaGFkb3dCbG9ja0Rp
cmVjdGlvbkV4dGVudCh0ZXh0U2hhZG93KCksIGxvZ2ljYWxUb3AsIGxvZ2ljYWxCb3R0b20pOyB9
CiAKICAgICBmbG9hdCB0ZXh0U3Ryb2tlV2lkdGgoKSBjb25zdCB7IHJldHVybiByYXJlSW5oZXJp
dGVkRGF0YS0+dGV4dFN0cm9rZVdpZHRoOyB9CiAgICAgQ29sb3JTcGFjZSBjb2xvclNwYWNlKCkg
Y29uc3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Q29sb3JTcGFjZT4ocmFyZUluaGVyaXRlZERhdGEt
PmNvbG9yU3BhY2UpOyB9Cg==
</data>
<flag name="review"
          id="235188"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>