<?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>6894</bug_id>
          
          <creation_ts>2006-01-28 18:05:48 -0800</creation_ts>
          <short_desc>add a Vector class</short_desc>
          <delta_ts>2006-01-28 20:16:58 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</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="Maciej Stachowiak">mjs</reporter>
          <assigned_to name="Maciej Stachowiak">mjs</assigned_to>
          <cc>gavin.sharp</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>30441</commentid>
    <comment_count>0</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-28 18:05:48 -0800</bug_when>
    <thetext>We could use a good Vector class to replace Array, QPtrVector, QValueVector, and one-off hacks to do resizable buffers or static stack buffers. Attached is my first cut at this. It should be really efficient for both POD and non-POD types, and supports an inline buffer for &quot;fixed-size stack buffer&quot; use cases.

Potentially useful things that are not in this version (yet):

- detecting allocation failures
- versions of fill, the constructor and append which take start and end iterators
- fill-style append
- swap
- generalized insert/remove (won&apos;t add these until it is clear they are needed)
- reverse iterators (is this really at all useful?)
- optional bounds checking w/ compile time switch
- debug mode iterator checking like for HashTable</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30442</commentid>
    <comment_count>1</comment_count>
      <attachid>6055</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2006-01-28 18:09:49 -0800</bug_when>
    <thetext>Created attachment 6055
implement Vector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>30443</commentid>
    <comment_count>2</comment_count>
      <attachid>6055</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2006-01-28 18:15:04 -0800</bug_when>
    <thetext>Comment on attachment 6055
implement Vector

r=me, since you&apos;re turning it on and actually using it, make sure to run perf tests.  We want to be really sure it&apos;s fast.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>6055</attachid>
            <date>2006-01-28 18:09:49 -0800</date>
            <delta_ts>2006-01-28 18:15:04 -0800</delta_ts>
            <desc>implement Vector</desc>
            <filename>vector.patch.txt</filename>
            <type>text/plain</type>
            <size>31375</size>
            <attacher name="Maciej Stachowiak">mjs</attacher>
            
              <data encoding="base64">SW5kZXg6IGt4bWxjb3JlL1ZlY3RvclRyYWl0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGt4bWxjb3JlL1Zl
Y3RvclRyYWl0cy5oCShyZXZpc2lvbiAwKQorKysga3htbGNvcmUvVmVjdG9yVHJhaXRzLmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTEzIEBACisvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9m
ZnNldDogNCAtKi0KKy8qCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmll
cworICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IEtYTUxDT1JFX1ZFQ1RPUl9UUkFJVFNfSAorI2RlZmluZSBLWE1MQ09SRV9WRUNUT1JfVFJBSVRT
X0gKKworI2luY2x1ZGUgIlJlZlB0ci5oIgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK3VzaW5nIHN0
ZDo6cGFpcjsKKworbmFtZXNwYWNlIEtYTUxDb3JlIHsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSXNQb2QgICAgICAgICAgIHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBm
YWxzZTsgfTsKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSXNQb2Q8Ym9vbD4gICAgICAgICAgICAg
ICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKyAgICB0ZW1wbGF0ZSA8PiBz
dHJ1Y3QgSXNQb2Q8Y2hhcj4gICAgICAgICAgICAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl
ID0gdHJ1ZTsgfTsKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSXNQb2Q8c2lnbmVkIGNoYXI+ICAg
ICAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKyAgICB0ZW1wbGF0ZSA8
PiBzdHJ1Y3QgSXNQb2Q8dW5zaWduZWQgY2hhcj4gICAgICB7IHN0YXRpYyBjb25zdCBib29sIHZh
bHVlID0gdHJ1ZTsgfTsKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSXNQb2Q8c2hvcnQ+ICAgICAg
ICAgICAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKyAgICB0ZW1wbGF0
ZSA8PiBzdHJ1Y3QgSXNQb2Q8dW5zaWduZWQgc2hvcnQ+ICAgICB7IHN0YXRpYyBjb25zdCBib29s
IHZhbHVlID0gdHJ1ZTsgfTsKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSXNQb2Q8aW50PiAgICAg
ICAgICAgICAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKyAgICB0ZW1w
bGF0ZSA8PiBzdHJ1Y3QgSXNQb2Q8dW5zaWduZWQgaW50PiAgICAgICB7IHN0YXRpYyBjb25zdCBi
b29sIHZhbHVlID0gdHJ1ZTsgfTsKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSXNQb2Q8bG9uZz4g
ICAgICAgICAgICAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKyAgICB0
ZW1wbGF0ZSA8PiBzdHJ1Y3QgSXNQb2Q8dW5zaWduZWQgbG9uZz4gICAgICB7IHN0YXRpYyBjb25z
dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSXNQb2Q8bG9u
ZyBsb25nPiAgICAgICAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKyAg
ICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSXNQb2Q8dW5zaWduZWQgbG9uZyBsb25nPiB7IHN0YXRpYyBj
b25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSXNQb2Q8
ZmxvYXQ+ICAgICAgICAgICAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK
KyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSXNQb2Q8ZG91YmxlPiAgICAgICAgICAgICB7IHN0YXRp
YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKyAgICB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgSXNQ
b2Q8bG9uZyBkb3VibGU+ICAgICAgICB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg
fTsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUD4gc3RydWN0IElzUG9kPFAgKj4gICAgICB7IHN0
YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKKworICAgIHRlbXBsYXRlPGJvb2wgaXNQ
b2QsIHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgVmVjdG9yVHJhaXRzQmFzZTsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IFZlY3RvclRyYWl0c0Jhc2U8ZmFsc2UsIFQ+Cisg
ICAgeworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNJbml0aWFsaXphdGlvbiA9IHRydWU7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gdHJ1ZTsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuTW92ZVdpdGhNZW1jcHkgPSBmYWxzZTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuQ29weVdpdGhNZW1jcHkgPSBmYWxzZTsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuRmlsbFdpdGhNZW1zZXQgPSBmYWxzZTsKKyAgICB9Owor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBzdHJ1Y3QgVmVjdG9yVHJhaXRzQmFzZTx0
cnVlLCBUPgorICAgIHsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlv
biA9IGZhbHNlOworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0luaXRpYWxpemF0aW9u
ID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVt
c2V0ID0gZmFsc2U7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbk1vdmVXaXRoTWVtY3B5
ID0gdHJ1ZTsKKyAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuQ29weVdpdGhNZW1jcHkgPSB0
cnVlOworICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBjYW5GaWxsV2l0aE1lbXNldCA9IHNpemVv
ZihUKSA9PSBzaXplb2YoY2hhcik7CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
CisgICAgc3RydWN0IFZlY3RvclRyYWl0cyA6IFZlY3RvclRyYWl0c0Jhc2U8SXNQb2Q8VD46OnZh
bHVlLCBUPiB7IH07CisKKyAgICBzdHJ1Y3QgU2ltcGxlQ2xhc3NWZWN0b3JUcmFpdHMKKyAgICB7
CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBmYWxzZTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNJbml0aWFsaXphdGlvbiA9IHRydWU7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gdHJ1ZTsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgY2FuTW92ZVdpdGhNZW1jcHkgPSB0cnVlOworICAgICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBjYW5Db3B5V2l0aE1lbWNweSA9IGZhbHNlOworICAgICAgICBz
dGF0aWMgY29uc3QgYm9vbCBjYW5GaWxsV2l0aE1lbXNldCA9IGZhbHNlOworICAgIH07CisKKyAg
ICAvLyB3ZSBrbm93IFJlZlB0ciBpcyBzaW1wbGUgZW5vdWdoIHRoYXQgaW5pdGlhbGl6aW5nIHRv
IDAgYW5kIG1vdmluZyB3aXRoIG1lbWNweQorICAgIC8vIChhbmQgdGhlbiBub3QgZGVzdHJ1Y3Rp
bmcgdGhlIG9yaWdpbmFsKSB3aWxsIHRvdGFsbHkgd29yaworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFA+CisgICAgc3RydWN0IFZlY3RvclRyYWl0czxSZWZQdHI8UD4gPiA6IFNpbXBsZUNsYXNzVmVj
dG9yVHJhaXRzIHsgfTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGaXJzdCwgdHlwZW5h
bWUgU2Vjb25kPgorICAgIHN0cnVjdCBWZWN0b3JUcmFpdHM8cGFpcjxGaXJzdCwgU2Vjb25kPiA+
CisgICAgeworICAgICAgICB0eXBlZGVmIFZlY3RvclRyYWl0czxGaXJzdD4gRmlyc3RUcmFpdHM7
CisgICAgICAgIHR5cGVkZWYgVmVjdG9yVHJhaXRzPFNlY29uZD4gU2Vjb25kVHJhaXRzOworCisg
ICAgICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSBGaXJzdFRyYWl0czo6
bmVlZHNEZXN0cnVjdGlvbiB8fCBTZWNvbmRUcmFpdHM6Om5lZWRzRGVzdHJ1Y3Rpb247CisgICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzSW5pdGlhbGl6YXRpb24gPSBGaXJzdFRyYWl0czo6
bmVlZHNJbml0aWFsaXphdGlvbiB8fCBTZWNvbmRUcmFpdHM6Om5lZWRzSW5pdGlhbGl6YXRpb247
CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkluaXRpYWxpemVXaXRoTWVtc2V0ID0gRmly
c3RUcmFpdHM6OmNhbkluaXRpYWxpemVXaXRoTWVtc2V0ICYmIFNlY29uZFRyYWl0czo6Y2FuSW5p
dGlhbGl6ZVdpdGhNZW1zZXQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbk1vdmVXaXRo
TWVtY3B5ID0gRmlyc3RUcmFpdHM6OmNhbk1vdmVXaXRoTWVtY3B5ICYmIFNlY29uZFRyYWl0czo6
Y2FuTW92ZVdpdGhNZW1jcHk7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkNvcHlXaXRo
TWVtY3B5ID0gRmlyc3RUcmFpdHM6OmNhbkNvcHlXaXRoTWVtY3B5ICYmIFNlY29uZFRyYWl0czo6
Y2FuQ29weVdpdGhNZW1jcHk7CisgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGNhbkZpbGxXaXRo
TWVtc2V0ID0gZmFsc2U7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgS1hNTENvcmUKKwordXNp
bmcgS1hNTENvcmU6OlZlY3RvclRyYWl0czsKK3VzaW5nIEtYTUxDb3JlOjpTaW1wbGVDbGFzc1Zl
Y3RvclRyYWl0czsKKworI2VuZGlmIC8vIEtYTUxDT1JFX1ZFQ1RPUl9UUkFJVFNfSApJbmRleDog
a3htbGNvcmUvVmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3htbGNvcmUvVmVjdG9yLmgJKHJldmlz
aW9uIDApCisrKyBreG1sY29yZS9WZWN0b3IuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0Njcg
QEAKKy8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQorLyoKKyAqICBUaGlz
IGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIGxpYnJhcmllcworICogIENvcHlyaWdodCAoQykgMjAw
NSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBLWE1M
Q09SRV9WRUNUT1JfSAorI2RlZmluZSBLWE1MQ09SRV9WRUNUT1JfSAorCisjaW5jbHVkZSAiQXNz
ZXJ0aW9ucy5oIgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgIlZlY3RvclRyYWl0cy5o
IgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK25hbWVzcGFjZSBLWE1MQ29yZSB7CisKKyAgICB1c2lu
ZyBzdGQ6Om1pbjsKKyAgICB1c2luZyBzdGQ6Om1heDsKKyAgICAKKyAgICB0ZW1wbGF0ZSA8Ym9v
bCBuZWVkc0Rlc3RydWN0aW9uLCB0eXBlbmFtZSBUPgorICAgIGNsYXNzIFZlY3RvckRlc3RydWN0
b3I7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWZWN0b3JEZXN0cnVj
dG9yPGZhbHNlLCBUPgorICAgIHsKKyAgICAgICAgc3RhdGljIHZvaWQgZGVzdHJ1Y3QoVCosIFQq
KSB7fQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWZWN0
b3JEZXN0cnVjdG9yPHRydWUsIFQ+CisgICAgeworICAgICAgICBzdGF0aWMgdm9pZCBkZXN0cnVj
dChUKiBiZWdpbiwgVCogZW5kKSAKKyAgICAgICAgeworICAgICAgICAgICAgZm9yIChUKiBjdXIg
PSBiZWdpbjsgY3VyICE9IGVuZDsgKytjdXIpCisgICAgICAgICAgICAgICAgY3VyLT5+VCgpOwor
ICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlIDxib29sIG5lZWRzSW5pdGlhbGl6YXRp
b24sIGJvb2wgY2FuSW5pdGlhbGl6ZVdpdGhNZW1zZXQsIHR5cGVuYW1lIFQ+CisgICAgY2xhc3Mg
VmVjdG9ySW5pdGlhbGl6ZXI7CisKKyAgICB0ZW1wbGF0ZTxib29sIGlnbm9yZSwgdHlwZW5hbWUg
VD4KKyAgICBzdHJ1Y3QgVmVjdG9ySW5pdGlhbGl6ZXI8ZmFsc2UsIGlnbm9yZSwgVD4KKyAgICB7
CisgICAgICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVCosIFQqKSB7fQorICAgIH07CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWZWN0b3JJbml0aWFsaXplcjx0cnVl
LCBmYWxzZSwgVD4KKyAgICB7CisgICAgICAgIHN0YXRpYyB2b2lkIGluaXRpYWxpemUoVCogYmVn
aW4sIFQqIGVuZCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoVCogY3VyID0gYmVnaW47
IGN1ciAhPSBlbmQ7ICsrY3VyKQorICAgICAgICAgICAgICAgIG5ldyAoY3VyKSBUOworICAgICAg
ICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3RydWN0IFZlY3Rv
ckluaXRpYWxpemVyPHRydWUsIHRydWUsIFQ+CisgICAgeworICAgICAgICBzdGF0aWMgdm9pZCBp
bml0aWFsaXplKFQqIGJlZ2luLCBUKiBlbmQpIAorICAgICAgICB7CisgICAgICAgICAgICBtZW1z
ZXQoYmVnaW4sIDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqPihlbmQpIC0gcmVpbnRlcnByZXRf
Y2FzdDxjaGFyICo+KGJlZ2luKSk7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGUg
PGJvb2wgY2FuTW92ZVdpdGhNZW1jcHksIHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgVmVjdG9yTW92
ZXI7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHN0cnVjdCBWZWN0b3JNb3Zlcjxm
YWxzZSwgVD4KKyAgICB7CisgICAgICAgIHN0YXRpYyB2b2lkIG1vdmUoVCogc3JjLCBUKiBzcmNF
bmQsIFQqIGRzdCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChzcmMgIT0gc3JjRW5k
KSB7CisgICAgICAgICAgICAgICAgbmV3IChkc3QpIFQoKnNyYyk7CisgICAgICAgICAgICAgICAg
c3JjLT5+VCgpOworICAgICAgICAgICAgICAgICsrZHN0OworICAgICAgICAgICAgICAgICsrc3Jj
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgc3RydWN0IFZlY3Rvck1vdmVyPHRydWUsIFQ+CisgICAgeworICAgICAgICBz
dGF0aWMgdm9pZCBtb3ZlKFQqIHNyYywgVCogc3JjRW5kLCBUKiBkc3QpIAorICAgICAgICB7Cisg
ICAgICAgICAgICBtZW1jcHkoZHN0LCBzcmMsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciAqPihzcmNF
bmQpIC0gcmVpbnRlcnByZXRfY2FzdDxjaGFyICo+KHNyYykpOworICAgICAgICB9CisgICAgfTsK
KworICAgIHRlbXBsYXRlIDxib29sIGNhbkNvcHlXaXRoTWVtY3B5LCB0eXBlbmFtZSBUPgorICAg
IGNsYXNzIFZlY3RvckNvcGllcjsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3Ry
dWN0IFZlY3RvckNvcGllcjxmYWxzZSwgVD4KKyAgICB7CisgICAgICAgIHN0YXRpYyB2b2lkIHVu
aW5pdGlhbGl6ZWRDb3B5KFQqIHNyYywgVCogc3JjRW5kLCBUKiBkc3QpIAorICAgICAgICB7Cisg
ICAgICAgICAgICB3aGlsZSAoc3JjICE9IHNyY0VuZCkgeworICAgICAgICAgICAgICAgIG5ldyAo
ZHN0KSBUKCpzcmMpOworICAgICAgICAgICAgICAgICsrZHN0OworICAgICAgICAgICAgICAgICsr
c3JjOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgc3RydWN0IFZlY3RvckNvcGllcjx0cnVlLCBUPgorICAgIHsKKyAgICAg
ICAgc3RhdGljIHZvaWQgdW5pbml0aWFsaXplZENvcHkoVCogc3JjLCBUKiBzcmNFbmQsIFQqIGRz
dCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbWNweShkc3QsIHNyYywgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyICo+KHNyY0VuZCkgLSByZWludGVycHJldF9jYXN0PGNoYXIgKj4oc3JjKSk7Cisg
ICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGUgPGJvb2wgY2FuRmlsbFdpdGhNZW1zZXQs
IHR5cGVuYW1lIFQ+CisgICAgY2xhc3MgVmVjdG9yRmlsbGVyOworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBzdHJ1Y3QgVmVjdG9yRmlsbGVyPGZhbHNlLCBUPgorICAgIHsKKyAgICAg
ICAgc3RhdGljIHZvaWQgdW5pbml0aWFsaXplZEZpbGwoVCogZHN0LCBUKiBkc3RFbmQsIGNvbnN0
IFQmIHZhbCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChkc3QgIT0gZHN0RW5kKSB7
CisgICAgICAgICAgICAgICAgbmV3IChkc3QpIFQodmFsKTsKKyAgICAgICAgICAgICAgICArK2Rz
dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorICAgIHN0cnVjdCBWZWN0b3JGaWxsZXI8dHJ1ZSwgVD4KKyAgICB7CisgICAgICAg
IHN0YXRpYyB2b2lkIHVuaW5pdGlhbGl6ZWRGaWxsKFQqIGRzdCwgVCogZHN0RW5kLCBjb25zdCBU
JiB2YWwpIAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZW9mKFQpID09IHNpemVv
ZihjaGFyKSk7CisgICAgICAgICAgICBtZW1zZXQoZHN0LCB2YWwsIGRzdEVuZCAtIGRzdCk7Cisg
ICAgICAgIH0KKyAgICB9OworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgc3Ry
dWN0IFZlY3RvclR5cGVPcGVyYXRpb25zCisgICAgeworICAgICAgICBzdGF0aWMgdm9pZCBkZXN0
cnVjdChUKiBiZWdpbiwgVCogZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBWZWN0b3JEZXN0
cnVjdG9yPFZlY3RvclRyYWl0czxUPjo6bmVlZHNEZXN0cnVjdGlvbiwgVD46OmRlc3RydWN0KGJl
Z2luLCBlbmQpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZShU
KiBiZWdpbiwgVCogZW5kKQorICAgICAgICB7CisgICAgICAgICAgICBWZWN0b3JJbml0aWFsaXpl
cjxWZWN0b3JUcmFpdHM8VD46Om5lZWRzSW5pdGlhbGl6YXRpb24sIFZlY3RvclRyYWl0czxUPjo6
Y2FuSW5pdGlhbGl6ZVdpdGhNZW1zZXQsIFQ+Ojppbml0aWFsaXplKGJlZ2luLCBlbmQpOworICAg
ICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgbW92ZShUKiBzcmMsIFQqIHNyY0VuZCwgVCog
ZHN0KQorICAgICAgICB7CisgICAgICAgICAgICBWZWN0b3JNb3ZlcjxWZWN0b3JUcmFpdHM8VD46
OmNhbk1vdmVXaXRoTWVtY3B5LCBUPjo6bW92ZShzcmMsIHNyY0VuZCwgZHN0KTsKKyAgICAgICAg
fQorCisgICAgICAgIHN0YXRpYyB2b2lkIHVuaW5pdGlhbGl6ZWRDb3B5KFQqIHNyYywgVCogc3Jj
RW5kLCBUKiBkc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIFZlY3RvckNvcGllcjxWZWN0b3JU
cmFpdHM8VD46OmNhbkNvcHlXaXRoTWVtY3B5LCBUPjo6dW5pbml0aWFsaXplZENvcHkoc3JjLCBz
cmNFbmQsIGRzdCk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCB1bmluaXRpYWxp
emVkRmlsbChUKiBkc3QsIFQqIGRzdEVuZCwgY29uc3QgVCYgdmFsKQorICAgICAgICB7CisgICAg
ICAgICAgICBWZWN0b3JGaWxsZXI8VmVjdG9yVHJhaXRzPFQ+OjpjYW5GaWxsV2l0aE1lbXNldCwg
VD46OnVuaW5pdGlhbGl6ZWRGaWxsKGRzdCwgZHN0RW5kLCB2YWwpOworICAgICAgICB9CisgICAg
fTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eT4KKyAg
ICBjbGFzcyBWZWN0b3JCdWZmZXI7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNs
YXNzIFZlY3RvckJ1ZmZlcjxULCAwPiAKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBWZWN0
b3JCdWZmZXIoKQorICAgICAgICAgICAgOiBtX2NhcGFjaXR5KDApCisgICAgICAgICAgICAsIG1f
YnVmZmVyKDApCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmVjdG9y
QnVmZmVyKHNpemVfdCBjYXBhY2l0eSkKKyAgICAgICAgICAgIDogbV9jYXBhY2l0eSgwKQorICAg
ICAgICB7CisgICAgICAgICAgICBhbGxvY2F0ZUJ1ZmZlcihjYXBhY2l0eSk7CisgICAgICAgIH0K
KworICAgICAgICB+VmVjdG9yQnVmZmVyKCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVhbGxv
Y2F0ZUJ1ZmZlcihtX2J1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQg
ZGVhbGxvY2F0ZUJ1ZmZlcihUKiBidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGZhc3RG
cmVlKGJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgYWxsb2NhdGVC
dWZmZXIoc2l6ZV90IG5ld0NhcGFjaXR5KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
bmV3Q2FwYWNpdHkgPj0gbV9jYXBhY2l0eSk7CisgICAgICAgICAgICBtX2NhcGFjaXR5ID0gbmV3
Q2FwYWNpdHk7CisgICAgICAgICAgICBtX2J1ZmZlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8VCo+KGZh
c3RNYWxsb2MobmV3Q2FwYWNpdHkgKiBzaXplb2YoVCkpKTsKKyAgICAgICAgfQorCisgICAgICAg
IFQqIGJ1ZmZlcigpIHsgcmV0dXJuIG1fYnVmZmVyOyB9CisgICAgICAgIGNvbnN0IFQqIGJ1ZmZl
cigpIGNvbnN0IHsgcmV0dXJuIG1fYnVmZmVyOyB9CisgICAgICAgIHNpemVfdCBjYXBhY2l0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fY2FwYWNpdHk7IH0KKworICAgIHByb3RlY3RlZDoKKyAgICAgICAg
VmVjdG9yQnVmZmVyKFQqIGJ1ZmZlciwgc2l6ZV90IGNhcGFjaXR5KQorICAgICAgICAgICAgOiBt
X2NhcGFjaXR5KGNhcGFjaXR5KQorICAgICAgICAgICAgLCBtX2J1ZmZlcihidWZmZXIpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBtX2NhcGFjaXR5OworICAgICAgICBU
ICptX2J1ZmZlcjsKKyAgICB9OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgc2l6ZV90IGlu
bGluZUNhcGFjaXR5PgorICAgIGNsYXNzIFZlY3RvckJ1ZmZlciA6IHB1YmxpYyBWZWN0b3JCdWZm
ZXI8VCwgMD4geworICAgIHByaXZhdGU6CisgICAgICAgIHR5cGVkZWYgVmVjdG9yQnVmZmVyPFQs
IDA+IEJhc2VCdWZmZXI7CisgICAgcHVibGljOgorICAgICAgICBWZWN0b3JCdWZmZXIoKSAKKyAg
ICAgICAgICAgIDogQmFzZUJ1ZmZlcihpbmxpbmVCdWZmZXIoKSwgaW5saW5lQ2FwYWNpdHkpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFZlY3RvckJ1ZmZlcihzaXplX3QgY2FwYWNp
dHkpCisgICAgICAgICAgICA6IEJhc2VCdWZmZXIoaW5saW5lQnVmZmVyKCksIGlubGluZUNhcGFj
aXR5KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoY2FwYWNpdHkgPiBpbmxpbmVDYXBhY2l0
eSkKKyAgICAgICAgICAgICAgICBCYXNlQnVmZmVyOjphbGxvY2F0ZUJ1ZmZlcihjYXBhY2l0eSk7
CisgICAgICAgIH0KKworICAgICAgICB+VmVjdG9yQnVmZmVyKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKEJhc2VCdWZmZXI6OmJ1ZmZlcigpID09IGlubGluZUJ1ZmZlcigpKQorICAgICAg
ICAgICAgICAgIEJhc2VCdWZmZXI6Om1fYnVmZmVyID0gMDsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgZGVhbGxvY2F0ZUJ1ZmZlcihUKiBidWZmZXIpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChidWZmZXIgIT0gaW5saW5lQnVmZmVyKCkpCisgICAgICAgICAgICAgICAgQmFzZUJ1ZmZl
cjo6ZGVhbGxvY2F0ZUJ1ZmZlcihidWZmZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG1faW5saW5lQnVmZmVyU2l6ZSA9IGlubGluZUNh
cGFjaXR5ICogc2l6ZW9mKFQpOworICAgICAgICBUICppbmxpbmVCdWZmZXIoKSB7IHJldHVybiBy
ZWludGVycHJldF9jYXN0PFQgKj4oJm1faW5saW5lQnVmZmVyKTsgfQorICAgICAgICBjaGFyIG1f
aW5saW5lQnVmZmVyW21faW5saW5lQnVmZmVyU2l6ZV07CisgICAgfTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0eSA9IDA+CisgICAgY2xhc3MgVmVjdG9y
IHsKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBlZGVmIFZlY3RvckJ1ZmZlcjxULCBpbmxpbmVD
YXBhY2l0eT4gSW1wbDsKKyAgICAgICAgdHlwZWRlZiBWZWN0b3JUeXBlT3BlcmF0aW9uczxUPiBU
eXBlT3BlcmF0aW9uczsKKworICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBUKiBpdGVyYXRv
cjsKKyAgICAgICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdF9pdGVyYXRvcjsKKworICAgICAgICBW
ZWN0b3IoKSAKKyAgICAgICAgICAgIDogbV9zaXplKDApCisgICAgICAgIHsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZXhwbGljaXQgVmVjdG9yKHNpemVfdCBzaXplKSAKKyAgICAgICAg
ICAgIDogbV9zaXplKDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlc2l6ZShzaXplKTsKKyAg
ICAgICAgfQorCisgICAgICAgIH5WZWN0b3IoKQorICAgICAgICB7CisgICAgICAgICAgICBjbGVh
cigpOworICAgICAgICB9CisKKyAgICAgICAgVmVjdG9yKGNvbnN0IFZlY3RvciYpOworICAgICAg
ICB0ZW1wbGF0ZTxzaXplX3Qgb3RoZXJDYXBhY2l0eT4gCisgICAgICAgIFZlY3Rvcihjb25zdCBW
ZWN0b3I8VCwgb3RoZXJDYXBhY2l0eT4mKTsKKworICAgICAgICB0ZW1wbGF0ZTxzaXplX3Qgb3Ro
ZXJDYXBhY2l0eT4gCisgICAgICAgIFZlY3RvciYgb3BlcmF0b3I9KGNvbnN0IFZlY3RvcjxULCBv
dGhlckNhcGFjaXR5PiYpOworCisgICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9zaXplOyB9CisgICAgICAgIHNpemVfdCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1faW1w
bC5jYXBhY2l0eSgpOyB9CisgICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuICFz
aXplKCk7IH0KKworICAgICAgICBUJiBhdChzaXplX3QgaSkgeyByZXR1cm4gbV9pbXBsLmJ1ZmZl
cigpW2ldOyB9CisgICAgICAgIGNvbnN0IFQmIGF0KHNpemVfdCBpKSBjb25zdCB7IHJldHVybiBt
X2ltcGwuYnVmZmVyKClbaV07IH0KKyAgICAgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgeyBy
ZXR1cm4gYXQoaSk7IH0KKyAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXShzaXplX3QgaSkgY29u
c3QgeyByZXR1cm4gYXQoaSk7IH0KKyAgICAgICAgVCYgb3BlcmF0b3JbXShpbnQgaSkgeyByZXR1
cm4gYXQoaSk7IH0KKyAgICAgICAgY29uc3QgVCYgb3BlcmF0b3JbXShpbnQgaSkgY29uc3QgeyBy
ZXR1cm4gYXQoaSk7IH0KKworICAgICAgICBUKiBkYXRhKCkgeyByZXR1cm4gbV9pbXBsLmJ1ZmZl
cigpOyB9CisgICAgICAgIGNvbnN0IFQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2ltcGwuYnVm
ZmVyKCk7IH0KKyAgICAgICAgb3BlcmF0b3IgVCooKSB7IHJldHVybiBkYXRhKCk7IH0KKyAgICAg
ICAgb3BlcmF0b3IgY29uc3QgVCooKSBjb25zdCB7IHJldHVybiBkYXRhKCk7IH0KKworICAgICAg
ICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGRhdGEoKTsgfQorICAgICAgICBpdGVyYXRvciBl
bmQoKSB7IHJldHVybiBiZWdpbigpICsgbV9zaXplOyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gZGF0YSgpOyB9CisgICAgICAgIGNvbnN0X2l0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgKyBtX3NpemU7IH0KKyAgICAgICAgCisgICAg
ICAgIHZvaWQgcmVzaXplKHNpemVfdCBzaXplKTsKKyAgICAgICAgdm9pZCByZXNlcnZlQ2FwYWNp
dHkoc2l6ZV90IG5ld0NhcGFjaXR5KTsKKworICAgICAgICB2b2lkIGNsZWFyKCkgeyByZXNpemUo
MCk7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgICAgICB2b2lkIGFwcGVu
ZChjb25zdCBVJiB1KTsKKworICAgICAgICBWZWN0b3Ioc2l6ZV90IHNpemUsIGNvbnN0IFQmIHZh
bCkKKyAgICAgICAgICAgIDogbV9zaXplKHNpemUpCisgICAgICAgICAgICAsIG1faW1wbChzaXpl
KQorICAgICAgICB7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXplZEZp
bGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZpbGwo
Y29uc3QgVCYgdmFsLCBzaXplX3Qgc2l6ZSk7CisgICAgICAgIHZvaWQgZmlsbChjb25zdCBUJiB2
YWwpIHsgZmlsbCh2YWwsIHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQg
ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KTsKKworICAgICAgICBWZWN0b3Im
IG9wZXJhdG9yPShjb25zdCBWZWN0b3ImKSB7IHJldHVybiAqdGhpczsgfQorCisgICAgICAgIHNp
emVfdCBtX3NpemU7CisgICAgICAgIEltcGwgbV9pbXBsOworICAgIH07CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+CisgICAgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5Pjo6VmVjdG9yKGNvbnN0IFZlY3RvciYgb3RoZXIpCisgICAgICAgIDogbV9zaXpl
KG90aGVyLnNpemUoKSkKKyAgICAgICAgLCBtX2ltcGwob3RoZXIuY2FwYWNpdHkoKSkKKyAgICB7
CisgICAgICAgIFR5cGVPcGVyYXRpb25zOjp1bmluaXRpYWxpemVkQ29weShvdGhlci5iZWdpbigp
LCBvdGhlci5lbmQoKSwgYmVnaW4oKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHRlbXBsYXRlPHNpemVfdCBvdGhlckNhcGFj
aXR5PiAKKyAgICBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjpWZWN0b3IoY29uc3QgVmVjdG9y
PFQsIG90aGVyQ2FwYWNpdHk+JiBvdGhlcikKKyAgICAgICAgOiBtX3NpemUob3RoZXIuc2l6ZSgp
KQorICAgICAgICAsIG1faW1wbChvdGhlci5jYXBhY2l0eSgpKQorICAgIHsKKyAgICAgICAgVHlw
ZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCksIG90aGVyLmVuZCgp
LCBiZWdpbigpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5s
aW5lQ2FwYWNpdHk+CisgICAgdGVtcGxhdGU8c2l6ZV90IG90aGVyQ2FwYWNpdHk+IAorICAgIFZl
Y3RvcjxULCBpbmxpbmVDYXBhY2l0eT4mIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46Om9wZXJh
dG9yPShjb25zdCBWZWN0b3I8VCwgb3RoZXJDYXBhY2l0eT4mIG90aGVyKQorICAgIHsKKyAgICAg
ICAgaWYgKCZvdGhlciA9PSB0aGlzKQorICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg
ICAKKyAgICAgICAgaWYgKHNpemUoKSA+IG90aGVyLnNpemUoKSkKKyAgICAgICAgICAgIHJlc2l6
ZShvdGhlci5zaXplKCkpOworICAgICAgICBlbHNlIGlmIChvdGhlci5zaXplKCkgPiBjYXBhY2l0
eSgpKSB7CisgICAgICAgICAgICBjbGVhcigpOworICAgICAgICAgICAgcmVzZXJ2ZUNhcGFjaXR5
KG90aGVyLnNpemUoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZDo6Y29weShv
dGhlci5iZWdpbigpLCBvdGhlci5iZWdpbigpICsgc2l6ZSgpLCBiZWdpbigpKTsKKyAgICAgICAg
VHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5KG90aGVyLmJlZ2luKCkgKyBzaXplKCks
IG90aGVyLmVuZCgpLCBlbmQoKSk7CisgICAgICAgIG1fc2l6ZSA9IG90aGVyLnNpemUoKTsKKwor
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwg
c2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHZvaWQgVmVjdG9yPFQsIGlubGluZUNhcGFjaXR5
Pjo6ZmlsbChjb25zdCBUJiB2YWwsIHNpemVfdCBuZXdTaXplKQorICAgIHsKKyAgICAgICAgaWYg
KHNpemUoKSA+IG5ld1NpemUpCisgICAgICAgICAgICByZXNpemUobmV3U2l6ZSk7CisgICAgICAg
IGVsc2UgaWYgKG5ld1NpemUgPiBjYXBhY2l0eSgpKSB7CisgICAgICAgICAgICBjbGVhcigpOwor
ICAgICAgICAgICAgcmVzZXJ2ZUNhcGFjaXR5KG5ld1NpemUpOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBzdGQ6OmZpbGwoYmVnaW4oKSwgZW5kKCksIHZhbCk7CisgICAgICAgIFR5cGVP
cGVyYXRpb25zOjp1bmluaXRpYWxpemVkRmlsbChlbmQoKSwgYmVnaW4oKSArIG5ld1NpemUsIHZh
bCk7CisgICAgICAgIG1fc2l6ZSA9IG5ld1NpemU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVCwgc2l6ZV90IGlubGluZUNhcGFjaXR5PgorICAgIHZvaWQgVmVjdG9yPFQsIGlubGlu
ZUNhcGFjaXR5Pjo6ZXhwYW5kQ2FwYWNpdHkoc2l6ZV90IG5ld01pbkNhcGFjaXR5KQorICAgIHsK
KyAgICAgICAgcmVzZXJ2ZUNhcGFjaXR5KG1heChuZXdNaW5DYXBhY2l0eSwgbWF4KHN0YXRpY19j
YXN0PHNpemVfdD4oMTYpLCBjYXBhY2l0eSgpICsgY2FwYWNpdHkoKSAvIDQgKyAxKSkpOworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBzaXplX3QgaW5saW5lQ2FwYWNpdHk+
CisgICAgdm9pZCBWZWN0b3I8VCwgaW5saW5lQ2FwYWNpdHk+OjpyZXNpemUoc2l6ZV90IHNpemUp
CisgICAgeworICAgICAgICBpZiAoc2l6ZSA8PSBtX3NpemUpCisgICAgICAgICAgICBUeXBlT3Bl
cmF0aW9uczo6ZGVzdHJ1Y3QoYmVnaW4oKSArIHNpemUsIGVuZCgpKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBpZiAoc2l6ZSA+IGNhcGFjaXR5KCkpCisgICAgICAgICAgICAgICAgZXhw
YW5kQ2FwYWNpdHkoc2l6ZSk7CisgICAgICAgICAgICBUeXBlT3BlcmF0aW9uczo6aW5pdGlhbGl6
ZShlbmQoKSwgYmVnaW4oKSArIHNpemUpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBt
X3NpemUgPSBzaXplOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBp
bmxpbmVDYXBhY2l0eT4KKyAgICB2b2lkIFZlY3RvcjxULCBpbmxpbmVDYXBhY2l0eT46OnJlc2Vy
dmVDYXBhY2l0eShzaXplX3QgbmV3Q2FwYWNpdHkpCisgICAgeworICAgICAgICBpZiAobmV3Q2Fw
YWNpdHkgPCBjYXBhY2l0eSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBUKiBvbGRC
dWZmZXIgPSBiZWdpbigpOworICAgICAgICBUKiBvbGRFbmQgPSBlbmQoKTsKKyAgICAgICAgbV9p
bXBsLmFsbG9jYXRlQnVmZmVyKG5ld0NhcGFjaXR5KTsKKyAgICAgICAgVHlwZU9wZXJhdGlvbnM6
Om1vdmUob2xkQnVmZmVyLCBvbGRFbmQsIGJlZ2luKCkpOworICAgICAgICBtX2ltcGwuZGVhbGxv
Y2F0ZUJ1ZmZlcihvbGRCdWZmZXIpOworICAgIH0KKworICAgIC8vIHRlbXBsYXRpemluZyB0aGlz
IGlzIGJldHRlciB0aGFuIGp1c3QgbGV0dGluZyB0aGUgY29udmVyc2lvbiBoYXBwZW4gaW1wbGlj
aXRseSwKKyAgICAvLyBiZWNhdXNlIGZvciBpbnN0YW5jZSBpdCBhbGxvd3MgYSBQYXNzUmVmUHRy
IHRvIGJlIGFwcGVuZGVkIHRvIGEgUmVmUHRyIHZlY3RvcgorICAgIC8vIHdpdGhvdXQgcmVmY291
bnQgdGhyYXNoLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxpbmVDYXBhY2l0
eT4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBVPgorICAgIGlubGluZSB2b2lkIFZlY3RvcjxULCBp
bmxpbmVDYXBhY2l0eT46OmFwcGVuZChjb25zdCBVJiB2YWwpCisgICAgeworICAgICAgICBpZiAo
c2l6ZSgpID09IGNhcGFjaXR5KCkpCisgICAgICAgICAgICBleHBhbmRDYXBhY2l0eShzaXplKCkg
KyAxKTsKKyAgICAgICAgCisgICAgICAgIG5ldyAoZW5kKCkpIFQodmFsKTsKKyAgICAgICAgKytt
X3NpemU7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHNpemVfdCBpbmxp
bmVDYXBhY2l0eT4KKyAgICB2b2lkIGRlbGV0ZUFsbFZhbHVlcyhWZWN0b3I8VCwgaW5saW5lQ2Fw
YWNpdHk+JiBjb2xsZWN0aW9uKQorICAgIHsKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8VCwgaW5s
aW5lQ2FwYWNpdHk+IFZlYzsKKyAgICAgICAgdHlwZW5hbWUgVmVjOjppdGVyYXRvciBlbmQgPSBj
b2xsZWN0aW9uLmVuZCgpOworICAgICAgICBmb3IgKHR5cGVuYW1lIFZlYzo6aXRlcmF0b3IgaXQg
PSBjb2xsZWN0aW9uLmJlZ2luKCk7IGl0ICE9IGNvbGxlY3Rpb24uZW5kKCk7ICsraXQpCisgICAg
ICAgICAgICBkZWxldGUgKml0OworICAgIH0KKworfSAvLyBuYW1lc3BhY2UgS1hNTENvcmUKKwor
dXNpbmcgS1hNTENvcmU6OlZlY3RvcjsKKworI2VuZGlmIC8vIEtYTUxDT1JFX1ZFQ1RPUl9ICklu
ZGV4OiBreG1sY29yZS9IYXNoTWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga3htbGNvcmUvSGFzaE1hcC5o
CShyZXZpc2lvbiAxMjQyNykKKysrIGt4bWxjb3JlL0hhc2hNYXAuaAkod29ya2luZyBjb3B5KQpA
QCAtMjI2LDEyICsyMjYsMTMgQEAgdm9pZCBIYXNoTWFwPEtleSwgTWFwcGVkLCBIYXNoRnVuY3Rp
b25zLAogICAgIG1faW1wbC5jbGVhcigpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBUPgotdm9p
ZCBkZWxldGVBbGxWYWx1ZXMoVCYgY29sbGVjdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgTWFwcGVkLCB0eXBlbmFtZSBIYXNoRnVuY3Rpb25zLCB0eXBlbmFtZSBLZXlUcmFp
dHMsIHR5cGVuYW1lIE1hcHBlZFRyYWl0cz4KK3ZvaWQgZGVsZXRlQWxsVmFsdWVzKEhhc2hNYXA8
S2V5LCBNYXBwZWQsIEhhc2hGdW5jdGlvbnMsIEtleVRyYWl0cywgTWFwcGVkVHJhaXRzPiYgY29s
bGVjdGlvbikKIHsKLSAgICBmb3IgKHR5cGVuYW1lIFQ6Oml0ZXJhdG9yIGl0ID0gY29sbGVjdGlv
bi5iZWdpbigpOyBpdCAhPSBjb2xsZWN0aW9uLmVuZCgpOyArK2l0KSB7CisgICAgdHlwZWRlZiBI
YXNoTWFwPEtleSwgTWFwcGVkLCBIYXNoRnVuY3Rpb25zLCBLZXlUcmFpdHMsIE1hcHBlZFRyYWl0
cz4gVDsKKyAgICB0eXBlbmFtZSBUOjppdGVyYXRvciBlbmQgPSBjb2xsZWN0aW9uLmVuZCgpOwor
ICAgIGZvciAodHlwZW5hbWUgVDo6aXRlcmF0b3IgaXQgPSBjb2xsZWN0aW9uLmJlZ2luKCk7IGl0
ICE9IGVuZDsgKytpdCkKICAgICAgICAgZGVsZXRlIGl0LT5zZWNvbmQ7Ci0gICAgfQogfQogCiB9
IC8vIG5hbWVzcGFjZSBLWE1MQ29yZQpJbmRleDoga2pzL2ludGVybmFsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBranMvaW50ZXJuYWwuY3BwCShyZXZpc2lvbiAxMjQyNykKKysrIGtqcy9pbnRlcm5hbC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJzdHJpbmdfb2Jq
ZWN0LmgiCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8a3htbGNvcmUvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPGt4bWxjb3JlL1ZlY3Rvci5oPgogI2luY2x1ZGUgPG1hdGguaD4KICNpbmNs
dWRlIDxzdGRpby5oPgogCkBAIC0zNTIsMzMgKzM1MywyOCBAQCB2b2lkIENvbnRleHRJbXA6Om1h
cmsoKQogc3RhdGljIFJlZlB0cjxQcm9ncmFtTm9kZT4gKnByb2dOb2RlOwogaW50IFBhcnNlcjo6
c2lkID0gMDsKIAotY29uc3QgaW50IGluaXRpYWxDYXBhY2l0eSA9IDY0OwotY29uc3QgaW50IGdy
b3d0aEZhY3RvciA9IDI7Ci0KLXN0YXRpYyBpbnQgbnVtTmV3Tm9kZXM7Ci1zdGF0aWMgaW50IG5l
d05vZGVzQ2FwYWNpdHk7Ci1zdGF0aWMgTm9kZSAqKm5ld05vZGVzOworc3RhdGljIFZlY3RvcjxO
b2RlKj4qIG5ld05vZGVzOwogCiB2b2lkIFBhcnNlcjo6c2F2ZU5ld05vZGUoTm9kZSAqbm9kZSkK
IHsKLSAgaWYgKG51bU5ld05vZGVzID09IG5ld05vZGVzQ2FwYWNpdHkpIHsKLSAgICBuZXdOb2Rl
c0NhcGFjaXR5ID0gKG5ld05vZGVzQ2FwYWNpdHkgPT0gMCkgPyBpbml0aWFsQ2FwYWNpdHkgOiBu
ZXdOb2Rlc0NhcGFjaXR5ICogZ3Jvd3RoRmFjdG9yOwotICAgIG5ld05vZGVzID0gKE5vZGUgKiop
ZmFzdFJlYWxsb2MobmV3Tm9kZXMsIHNpemVvZihOb2RlICopICogbmV3Tm9kZXNDYXBhY2l0eSk7
Ci0gIH0KKyAgICBpZiAoIW5ld05vZGVzKQorICAgICAgICBuZXdOb2RlcyA9IG5ldyBWZWN0b3I8
Tm9kZSo+OwogCi0gIG5ld05vZGVzW251bU5ld05vZGVzKytdID0gbm9kZTsKKyAgICBuZXdOb2Rl
cy0+YXBwZW5kKG5vZGUpOwogfQogCiBzdGF0aWMgdm9pZCBjbGVhck5ld05vZGVzKCkKIHsKLSAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1OZXdOb2RlczsgaSsrKSB7Ci0gICAgaWYgKG5ld05vZGVz
W2ldLT5yZWZjb3VudCgpID09IDApCi0gICAgICBkZWxldGUgbmV3Tm9kZXNbaV07Ci0gIH0KLSAg
ZmFzdEZyZWUobmV3Tm9kZXMpOwotICBuZXdOb2RlcyA9IDA7Ci0gIG51bU5ld05vZGVzID0gMDsK
LSAgbmV3Tm9kZXNDYXBhY2l0eSA9IDA7CisgICAgaWYgKCFuZXdOb2RlcykKKyAgICAgICAgcmV0
dXJuOworCisgICAgVmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbmV3Tm9kZXMtPmVuZCgp
OworICAgIGZvciAoVmVjdG9yPE5vZGUqPjo6aXRlcmF0b3IgaXQgPSBuZXdOb2Rlcy0+YmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpZiAoaXRbMF0tPnJlZmNvdW50KCkgPT0gMCkK
KyAgICAgICAgICAgIGRlbGV0ZSAqaXQ7CisgICAgCisgICAgZGVsZXRlIG5ld05vZGVzOworICAg
IG5ld05vZGVzID0gMDsKIH0KIAogUmVmUHRyPFByb2dyYW1Ob2RlPiBQYXJzZXI6OnBhcnNlKGNv
bnN0IFVTdHJpbmcgJnNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlciwKSW5kZXg6IGtq
cy91c3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvdXN0cmluZy5jcHAJKHJldmlzaW9uIDEy
NDI3KQorKysga2pzL3VzdHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBA
CiAjaW5jbHVkZSA8bWF0aC5oPgogI2luY2x1ZGUgImR0b2EuaCIKIAotI2luY2x1ZGUgPGFsZ29y
aXRobT4KKyNpbmNsdWRlIDxreG1sY29yZS9WZWN0b3IuaD4KIAogdXNpbmcgc3RkOjptYXg7CiAK
QEAgLTEzMDMsMTcgKzEzMDMsMTAgQEAgQ1N0cmluZyBVU3RyaW5nOjpVVEY4U3RyaW5nKCkgY29u
c3QKIHsKICAgLy8gQWxsb2NhdGUgYSBidWZmZXIgYmlnIGVub3VnaCB0byBob2xkIGFsbCB0aGUg
Y2hhcmFjdGVycy4KICAgY29uc3QgaW50IGxlbmd0aCA9IHNpemUoKTsKLSAgY29uc3QgdW5zaWdu
ZWQgYnVmZmVyU2l6ZSA9IGxlbmd0aCAqIDM7Ci0gIGNoYXIgZml4ZWRTaXplQnVmZmVyWzEwMjRd
OwotICBjaGFyICpidWZmZXI7Ci0gIGlmIChidWZmZXJTaXplID4gc2l6ZW9mKGZpeGVkU2l6ZUJ1
ZmZlcikpIHsKLSAgICBidWZmZXIgPSBuZXcgY2hhciBbYnVmZmVyU2l6ZV07Ci0gIH0gZWxzZSB7
Ci0gICAgYnVmZmVyID0gZml4ZWRTaXplQnVmZmVyOwotICB9CisgIFZlY3RvcjxjaGFyLCAxMDI0
PiBidWZmZXIobGVuZ3RoICogMyk7CiAKICAgLy8gQ29udmVydCB0byBydW5zIG9mIDgtYml0IGNo
YXJhY3RlcnMuCi0gIGNoYXIgKnAgPSBidWZmZXI7CisgIGNoYXIgKnAgPSBidWZmZXIuYmVnaW4o
KTsKICAgY29uc3QgVUNoYXIgKmQgPSBkYXRhKCk7CiAgIGZvciAoaW50IGkgPSAwOyBpICE9IGxl
bmd0aDsgKytpKSB7CiAgICAgdW5zaWduZWQgc2hvcnQgYyA9IGRbaV0udW5pY29kZSgpOwpAQCAt
MTMzOCw5ICsxMzMxLDcgQEAgQ1N0cmluZyBVU3RyaW5nOjpVVEY4U3RyaW5nKCkgY29uc3QKIAog
ICAvLyBSZXR1cm4gdGhlIHJlc3VsdCBhcyBhIEMgc3RyaW5nLgogICBDU3RyaW5nIHJlc3VsdChi
dWZmZXIsIHAgLSBidWZmZXIpOwotICBpZiAoYnVmZmVyICE9IGZpeGVkU2l6ZUJ1ZmZlcikgewot
ICAgIGRlbGV0ZSBbXSBidWZmZXI7Ci0gIH0KKwogICByZXR1cm4gcmVzdWx0OwogfQogCkluZGV4
OiBranMvbnVtYmVyX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL251bWJlcl9vYmplY3Qu
Y3BwCShyZXZpc2lvbiAxMjQyNykKKysrIGtqcy9udW1iZXJfb2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjksMTAgKzI5LDEzIEBACiAjaW5jbHVkZSAiZXJyb3Jfb2JqZWN0LmgiCiAjaW5j
bHVkZSAiZHRvYS5oIgogCisjaW5jbHVkZSA8a3htbGNvcmUvVmVjdG9yLmg+CisKICNpbmNsdWRl
ICJudW1iZXJfb2JqZWN0Lmx1dC5oIgogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAjaW5jbHVkZSA8
bWF0aC5oPgorCiB1c2luZyBuYW1lc3BhY2UgS0pTOwogCiAKQEAgLTk0LDIwICs5NywxNiBAQCBz
dGF0aWMgVVN0cmluZyBpbnRlZ2VyX3BhcnRfbm9leHAoZG91YmxlCiAgICAgfSBlbHNlIGlmIChk
ZWNpbWFsUG9pbnQgPD0gMCkgewogICAgICAgICBzdHIgKz0gVVN0cmluZygiMCIpOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIGNoYXIgKmJ1ZjsKKyAgICAgICAgVmVjdG9yPGNoYXIsIDEwMjQ+IGJ1
ZihkZWNpbWFsUG9pbnQgKyAxKTsKICAgICAgICAgCiAgICAgICAgIGlmIChsZW5ndGggPD0gZGVj
aW1hbFBvaW50KSB7Ci0gICAgICAgICAgICBidWYgPSAoY2hhciopZmFzdE1hbGxvYyhkZWNpbWFs
UG9pbnQrMSk7Ci0gICAgICAgICAgICBzdHJjcHkoYnVmLHJlc3VsdCk7Ci0gICAgICAgICAgICBt
ZW1zZXQoYnVmK2xlbmd0aCwnMCcsZGVjaW1hbFBvaW50LWxlbmd0aCk7Ci0gICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICBidWYgPSAoY2hhciopZmFzdE1hbGxvYyhkZWNpbWFsUG9pbnQrMSk7
Ci0gICAgICAgICAgICBzdHJuY3B5KGJ1ZixyZXN1bHQsZGVjaW1hbFBvaW50KTsKLSAgICAgICAg
fQorICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgcmVzdWx0KTsKKyAgICAgICAgICAgIG1lbXNldChi
dWYgKyBsZW5ndGgsICcwJywgZGVjaW1hbFBvaW50IC0gbGVuZ3RoKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBzdHJuY3B5KGJ1ZiwgcmVzdWx0LCBkZWNpbWFsUG9pbnQpOwogICAgICAg
ICAKICAgICAgICAgYnVmW2RlY2ltYWxQb2ludF0gPSAnXDAnOwogICAgICAgICBzdHIgKz0gVVN0
cmluZyhidWYpOwotICAgICAgICBmYXN0RnJlZShidWYpOwogICAgIH0KICAgICAKICAgICBranNf
ZnJlZWR0b2EocmVzdWx0KTsKQEAgLTExNywxMiArMTE2LDEwIEBAIHN0YXRpYyBVU3RyaW5nIGlu
dGVnZXJfcGFydF9ub2V4cChkb3VibGUKIAogc3RhdGljIFVTdHJpbmcgY2hhcl9zZXF1ZW5jZShj
aGFyIGMsIGludCBjb3VudCkKIHsKLSAgICBjaGFyICpidWYgPSAoY2hhciopZmFzdE1hbGxvYyhj
b3VudCsxKTsKLSAgICBtZW1zZXQoYnVmLGMsY291bnQpOworICAgIFZlY3RvcjxjaGFyLCAyMDQ4
PiBidWYoY291bnQgKyAxLCBjKTsKICAgICBidWZbY291bnRdID0gJ1wwJzsKLSAgICBVU3RyaW5n
IHMoYnVmKTsKLSAgICBmYXN0RnJlZShidWYpOwotICAgIHJldHVybiBzOworCisgICAgcmV0dXJu
IFVTdHJpbmcoYnVmKTsKIH0KIAogLy8gRUNNQSAxNS43LjQuMiAtIDE1LjcuNC43CkluZGV4OiBD
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gQ2hhbmdlTG9nCShyZXZpc2lvbiAxMjQzMikKKysrIENo
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYzIEBACisyMDA2LTAxLTI4ICBNYWNp
ZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICAtIGFkZGVkIGEgVmVjdG9yIGNsYXNzCisg
ICAgICAgIGh0dHA6Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg5
NAorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBranMvaW50ZXJuYWwuY3BwOgorICAgICAgICAoS0pTOjpQYXJzZXI6OnNhdmVO
ZXdOb2RlKTogQXBwbHkgVmVjdG9yLgorICAgICAgICAoS0pTOjpjbGVhck5ld05vZGVzKTogZGl0
dG8KKyAgICAgICAgKiBranMvbnVtYmVyX29iamVjdC5jcHA6CisgICAgICAgIChpbnRlZ2VyX3Bh
cnRfbm9leHApOiBkaXR0bworICAgICAgICAoY2hhcl9zZXF1ZW5jZSk6IGRpdHRvCisgICAgICAg
ICoga2pzL3VzdHJpbmcuY3BwOgorICAgICAgICAoS0pTOjpVU3RyaW5nOjpVVEY4U3RyaW5nKTog
ZGl0dG8KKyAgICAgICAgKiBreG1sY29yZS9IYXNoTWFwLmg6CisgICAgICAgIChLWE1MQ29yZTo6
ZGVsZXRlQWxsVmFsdWVzKTogVHdlYWtlZCB0aGlzIHRvIG9ubHkgYXBwbHkgdG8gSGFzaE1hcCwK
KyAgICAgICAgb3RoZXIgdmVyc2lvbnMgYXJlIHVzZWZ1bCBmb3Igb3RoZXIgY29udGFpbmVycy4K
KyAgICAgICAgKiBreG1sY29yZS9WZWN0b3IuaDogQWRkZWQuIEltcGxlbWVudGVkIGEgVmVjdG9y
IGNsYXNzLCB3aGljaCBzaG91bGQKKyAgICAgICAgYmUgdXNhYmxlIGZvciBhbGwgQXJyYXkvUVZl
Y3RvciBzdHlsZSBwdXJwb3NlcywgYW5kIGFsc28gYXMgYSBzdGFjayBidWZmZXIKKyAgICAgICAg
d2l0aCBvdmVyc2l6ZSBoYW5kbGluZy4gQWxzbyBzb21lIGhlbHBlciBjbGFzc2VzIHRvIG1ha2Ug
dmVjdG9yIG9wZXJhdGlvbnMKKyAgICAgICAgYXMgZWZmaWNpZW50IGFzIHBvc3NpYmxlIGZvciBQ
T0QgdHlwZXMgYW5kIGZvciBzaW1wbGUgbm9uLVBPRHMgbGlrZSBSZWZQdHIuCisgICAgICAgIChL
WE1MQ29yZTo6KToKKyAgICAgICAgKEtYTUxDb3JlOjpWZWN0b3JUeXBlT3BlcmF0aW9uczo6ZGVz
dHJ1Y3QpOgorICAgICAgICAoS1hNTENvcmU6OlZlY3RvclR5cGVPcGVyYXRpb25zOjppbml0aWFs
aXplKToKKyAgICAgICAgKEtYTUxDb3JlOjpWZWN0b3JUeXBlT3BlcmF0aW9uczo6bW92ZSk6Cisg
ICAgICAgIChLWE1MQ29yZTo6VmVjdG9yVHlwZU9wZXJhdGlvbnM6OnVuaW5pdGlhbGl6ZWRDb3B5
KToKKyAgICAgICAgKEtYTUxDb3JlOjpWZWN0b3JUeXBlT3BlcmF0aW9uczo6dW5pbml0aWFsaXpl
ZEZpbGwpOgorICAgICAgICAoS1hNTENvcmU6OlZlY3RvckJ1ZmZlcjo6VmVjdG9yQnVmZmVyKToK
KyAgICAgICAgKEtYTUxDb3JlOjpWZWN0b3JCdWZmZXI6On5WZWN0b3JCdWZmZXIpOgorICAgICAg
ICAoS1hNTENvcmU6OlZlY3RvckJ1ZmZlcjo6ZGVhbGxvY2F0ZUJ1ZmZlcik6CisgICAgICAgIChL
WE1MQ29yZTo6VmVjdG9yQnVmZmVyOjppbmxpbmVCdWZmZXIpOgorICAgICAgICAoS1hNTENvcmU6
OlZlY3Rvcjo6VmVjdG9yKToKKyAgICAgICAgKEtYTUxDb3JlOjpWZWN0b3I6On5WZWN0b3IpOgor
ICAgICAgICAoS1hNTENvcmU6OlZlY3Rvcjo6c2l6ZSk6CisgICAgICAgIChLWE1MQ29yZTo6VmVj
dG9yOjpjYXBhY2l0eSk6CisgICAgICAgIChLWE1MQ29yZTo6VmVjdG9yOjppc0VtcHR5KToKKyAg
ICAgICAgKEtYTUxDb3JlOjpWZWN0b3I6OmF0KToKKyAgICAgICAgKEtYTUxDb3JlOjpWZWN0b3I6
Om9wZXJhdG9yW10pOgorICAgICAgICAoS1hNTENvcmU6OlZlY3Rvcjo6ZGF0YSk6CisgICAgICAg
IChLWE1MQ29yZTo6VmVjdG9yOjpvcGVyYXRvciBUKik6CisgICAgICAgIChLWE1MQ29yZTo6VmVj
dG9yOjpvcGVyYXRvciBjb25zdCBUKik6CisgICAgICAgIChLWE1MQ29yZTo6VmVjdG9yOjpiZWdp
bik6CisgICAgICAgIChLWE1MQ29yZTo6VmVjdG9yOjplbmQpOgorICAgICAgICAoS1hNTENvcmU6
OlZlY3Rvcjo6Y2xlYXIpOgorICAgICAgICAoS1hNTENvcmU6OlZlY3Rvcjo6ZmlsbCk6CisgICAg
ICAgIChLWE1MQ29yZTo6VmVjdG9yOjpvcGVyYXRvcj0pOgorICAgICAgICAoS1hNTENvcmU6Ojo6
VmVjdG9yKToKKyAgICAgICAgKEtYTUxDb3JlOjo6Om9wZXJhdG9yKToKKyAgICAgICAgKEtYTUxD
b3JlOjo6OmZpbGwpOgorICAgICAgICAoS1hNTENvcmU6Ojo6ZXhwYW5kQ2FwYWNpdHkpOgorICAg
ICAgICAoS1hNTENvcmU6Ojo6cmVzaXplKToKKyAgICAgICAgKEtYTUxDb3JlOjo6OnJlc2VydmVD
YXBhY2l0eSk6CisgICAgICAgIChLWE1MQ29yZTo6OjphcHBlbmQpOgorICAgICAgICAoS1hNTENv
cmU6OmRlbGV0ZUFsbFZhbHVlcyk6CisgICAgICAgICoga3htbGNvcmUvVmVjdG9yVHJhaXRzLmg6
IEFkZGVkLgorICAgICAgICAoS1hNTENvcmU6OlZlY3RvclRyYWl0cyk6IFRyYWl0cyB0byBlbmFi
bGUgbWFraW5nIFZlY3RvciBlZmZpY2llbnQgZm9yCisgICAgICAgIHNpbXBsZSB0eXBlcy4KKwog
MjAwNi0wMS0yOCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQG55cG9wLmNvbT4KIAogICAgICAg
ICBSZXZpZXdlZCBieSBEYXJpbi4KSW5kZXg6IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTI0MjcpCisrKyBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw4IEBACiAJCTY1NjIx
RTZFMDg5RTg1OTcwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTYyMUU2QzA4OUU4NTk3MDA3NjBGMzUgLyog
cHJvcGVydHlfc2xvdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTY1N0VFQkMwMDk0RTQ0NUUwMDhDOUM3QiAvKiBIYXNoQ291bnRlZFNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU3RUVCQkYwOTRF
NDQ1RTAwOEM5QzdCIC8qIEhhc2hDb3VudGVkU2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjU4MEY3OTYwOTQwNzA1NjAwODJDMjE5IC8qIFBh
c3NSZWZQdHIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1ODBGNzk1MDk0MDcwNTYwMDgyQzIxOSAvKiBQYXNzUmVmUHRyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNjU5MkMzMTgwOThCN0RFMTAwMDNE
NEY2IC8qIFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjU5MkMzMTYwOThCN0RFMTAwMDNENEY2IC8qIFZlY3Rvci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTY1OTJDMzE5MDk4QjdERTEwMDAz
RDRGNiAvKiBWZWN0b3JUcmFpdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDY1OTJDMzE3MDk4QjdERTEwMDAzRDRGNiAvKiBWZWN0b3JUcmFpdHMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NUM2NDdC
NDA5M0VGOEQ2MDAyMkMzODAgLyogUmVmUHRyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2NUM2NDdCMzA5M0VGOEQ2MDAyMkMzODAgLyogUmVmUHRyLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjVEN0Qx
OUMwOEYxMEI1QjAwMTVBQkQ4IC8qIEZhc3RNYWxsb2NJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVEN0QxOUIwOEYxMEI1QjAwMTVBQkQ4
IC8qIEZhc3RNYWxsb2NJbnRlcm5hbC5oICovOyB9OwogCQk2NURGQzkzMDA4RUExNzNBMDBGNzMw
MEIgLyogSGFzaEZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNjVERkM5MkEwOEVBMTczQTAwRjczMDBCIC8qIEhhc2hGdW5jdGlvbnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMzQwLDYg
KzM0Miw4IEBACiAJCTY1NjIxRTZDMDg5RTg1OTcwMDc2MEYzNSAvKiBwcm9wZXJ0eV9zbG90Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdp
ZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IHByb3Bl
cnR5X3Nsb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk2
NTdFRUJCRjA5NEU0NDVFMDA4QzlDN0IgLyogSGFzaENvdW50ZWRTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSGFzaENvdW50ZWRTZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk2NTgwRjc5NTA5NDA3
MDU2MDA4MkMyMTkgLyogUGFzc1JlZlB0ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQYXNzUmVmUHRyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IHRhYldpZHRoID0gODsgfTsKKwkJNjU5MkMzMTYwOThCN0RFMTAwMDNENEY2IC8qIFZlY3Rv
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmVjdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1OTJDMzE3MDk4QjdERTEwMDAzRDRGNiAvKiBWZWN0b3JU
cmFpdHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZlY3RvclRyYWl0cy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUMwMkZCQjA2Mzc0NjJBMDAzRTdFRTYg
LyogcHJvdGVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBwcm90ZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsg
fTsKIAkJNjVDNjQ3QjMwOTNFRjhENjAwMjJDMzgwIC8qIFJlZlB0ci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWZQdHIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQk2NUQ3RDE5QjA4RjEwQjVCMDAxNUFC
RDggLyogRmFzdE1hbGxvY0ludGVybmFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEZhc3RNYWxsb2NJbnRlcm5hbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IH07CkBAIC02NjQsNiArNjY4LDggQEAKIAkJNjUxNjJF
RjEwOEU2QTIxQzAwNzU1NkNEIC8qIGt4bWxjb3JlICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk2NTkyQzMxNjA5OEI3REUxMDAwM0Q0RjYgLyogVmVjdG9y
LmggKi8sCisJCQkJNjU5MkMzMTcwOThCN0RFMTAwMDNENEY2IC8qIFZlY3RvclRyYWl0cy5oICov
LAogCQkJCTY1N0VFQkJGMDk0RTQ0NUUwMDhDOUM3QiAvKiBIYXNoQ291bnRlZFNldC5oICovLAog
CQkJCTY1QzY0N0IzMDkzRUY4RDYwMDIyQzM4MCAvKiBSZWZQdHIuaCAqLywKIAkJCQk2NTgwRjc5
NTA5NDA3MDU2MDA4MkMyMTkgLyogUGFzc1JlZlB0ci5oICovLApAQCAtODU2LDYgKzg2Miw4IEBA
CiAJCQkJNjU3RUVCQzAwOTRFNDQ1RTAwOEM5QzdCIC8qIEhhc2hDb3VudGVkU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5M0FBNEY3ODA5NTcyNTFGMDA4NEIzQTcgLyogQWx3YXlzSW5saW5lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNDhBMTYyNzA5NUQxNkJCMDA2NjZEMEQgLyogTGlzdFJlZlB0
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjU5MkMzMTgwOThCN0RFMTAwMDNENEY2IC8qIFZlY3Rv
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjU5MkMzMTkwOThCN0RFMTAwMDNENEY2IC8qIFZlY3Rv
clRyYWl0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQ
b3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cg==
</data>
<flag name="review"
          id="1448"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
      

    </bug>

</bugzilla>