Received: from makus.postgresql.org (makus.postgresql.org [98.129.198.125]) by mail.postgresql.org (Postfix) with ESMTP id CB6281BA1319 for ; Thu, 5 Apr 2012 09:10:36 -0300 (ADT) Received: from mail-pz0-f46.google.com ([209.85.210.46]) by makus.postgresql.org with esmtp (Exim 4.72) (envelope-from ) id 1SFlWJ-0001sF-GZ for pgsql-hackers@postgresql.org; Thu, 05 Apr 2012 12:10:36 +0000 Received: by dadz9 with SMTP id z9so1853533dad.33 for ; Thu, 05 Apr 2012 05:10:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=message-id:date:from:user-agent:mime-version:to:cc:subject :references:in-reply-to:content-type; bh=zaryesbbv+tBg5hfoz6UKjMHTJqDqYDxNb9m6av8NII=; b=aBzyoi0/NtKna+GJrKWwq7yCIBKncjuFc8EUEq4YfKg+zABEDImTmw6WmjiqKsJ/0e W5Ow128MJdtPUugxT4lLcPPsl9cV6L8Y+1jUBOTF+ZaOXqpsFhtxUAytYvr+kbddkM0s 8nkh46NUBfUQ1GnSV4fBCrwwMCMTYzd7Td0ITdbh6uhw04XLyr7sFhMMz8QzLUmJjUX2 M1R4IVOEiY+yZEMrlAS8N8svbW2mSTC7KXzXJgXMFZAacWeOp6+9furlaEnbshbawy13 aVI/a8CMPijGfIhUu9cz/pvSWqVCSYSH0pJW2png1QbbFIrFNrNzgr9wyQKmNvvkrJBD SBEw== Received: by 10.68.74.197 with SMTP id w5mr6648255pbv.129.1333627818411; Thu, 05 Apr 2012 05:10:18 -0700 (PDT) Received: from [192.168.1.99] ([61.199.203.168]) by mx.google.com with ESMTPS id i8sm3105664pbi.47.2012.04.05.05.10.13 (version=SSLv3 cipher=OTHER); Thu, 05 Apr 2012 05:10:15 -0700 (PDT) Message-ID: <4F7D8BBF.4050004@gmail.com> Date: Thu, 05 Apr 2012 21:10:39 +0900 From: Shigeru HANADA User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:11.0) Gecko/20120327 Thunderbird/11.0.1 MIME-Version: 1.0 To: Etsuro Fujita CC: pgsql-hackers@postgresql.org Subject: Re: WIP: Collecting statistics on CSV file data References: <4E6DE18B.4010505@lab.ntt.co.jp> <4E7861C1.2000607@gmail.com> <4E8EC1D8.3080700@lab.ntt.co.jp> <4E9C6573.8050507@gmail.com> <4E9FF04B.3050504@lab.ntt.co.jp> <4EB7C07A.5030205@gmail.com> <4EC60883.2050905@lab.ntt.co.jp> <4EC648CA.5050904@gmail.com> <4EC9CBC5.3070500@lab.ntt.co.jp> <4EE1FC38.5080707@lab.ntt.co.jp> <4EE5D862.1080809@gmail.com> <4EE74C5F.3000309@lab.ntt.co.jp> In-Reply-To: <4EE74C5F.3000309@lab.ntt.co.jp> Content-Type: multipart/mixed; boundary="------------060007020107080602060004" X-Pg-Spam-Score: -2.6 (--) X-Archive-Number: 201204/209 X-Sequence-Number: 206012 This is a multi-part message in MIME format. --------------060007020107080602060004 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit (2011/12/13 22:00), Etsuro Fujita wrote: > Thank you for your effectiveness experiments and proposals for > improvements. I updated the patch according to your proposals. > Attached is the updated version of the patch. Hi all, I've revised the v6.1 patch and created v7 patch, though dead line of this CF is coming closer. I think that this feature provides a way to improve plans for foreign tables significantly, so I hope that this feature is available in 9.2. I'd like to show overview of the patch again for ease of review. New FDW API function ==================== This patch adds new FDW API function AnalyzeForeignTable to FdwRoutine which can be used to support updating local statistics of foreign table. This function is invoked when ANALYZE command is executed against a foreign table explicitly. This handler function is optional, so if underlying FDW set NULL for the pointer, PostgreSQL doesn't touch statistics but emits a message about skipping. It's not required to FDWs to implement fully featured analyzer by itself. They can use core routines, do_analyze_rel and others, for most difficult part of analyzing. What FDWs should do is to provide a sampling function and call do_analyze_rel with passing the sampling function as argument in their concrete AnalyzeForeignTable. AnalyzeForeignTable (or sampling function) can report FDW-specific additional information by calling ereport() with given elevel. Once we've considered an idea that FDW stores statistics information without calling do_analyze_rel, but it seems very hard to implement, and not so efficient. I tried to implement such handler in pgsql_fdw (which seeems easiest to achieve) by getting remote statistics by "SELECT * FROM pg_statistics", but it has several issues such as: 1) Highly privileged user on remote side should be mapped to ANALYZE invoker 2) Structure and semantics might be difficult on remote side, if versions are not same. 3) We need to convert anyarray to anyarray through text representation. We know type of elements, but bothering works are needed. DDL changes =========== ALTER FOREIGN TABLE supports SET STATISTICS clause and n_distinct option. Former changes per-attribute statistics target, and latter overrides calculated statistics. n_distinct_inherited is not available because foreign tables can't be inherited. psql support ============ psql completes foreign table names after the keyword "ANALYZE" in addition to ordinary tables. Of course newly added statistics target is shown in \d+ command. file_fdw ======== This patch contains a use case of new handler function in contrib/file_fdw. Since file_fdw reads data from a flat file, fileAnalyzeForeignTable uses similar algorithm to ordinary tables; it samples first N rows first, and replaces them randomly with subsequent rows. Also file_fdw updates pg_class.relpages by calculating number of pages from size of the data file. To allow FDWs to implement sampling argorighm like this, several functions are exported from analyze.c, e.g. random_fract, init_selection_state, and get_next_S. pgsql_fdw ========= Though it's not fully finished, I've implemented ANALYZE handler for pgsql_fdw. Please extract pgsql_fdw.tar.gz into contrib (or use pgxs) to try it. Regards, -- Shigeru HANADA --------------060007020107080602060004 Content-Type: text/plain; charset=Shift_JIS; name="postgresql-analyze-v7.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="postgresql-analyze-v7.patch" ZGlmZiAtLWdpdCBhL2NvbnRyaWIvZmlsZV9mZHcvZmlsZV9mZHcuYyBiL2NvbnRyaWIvZmls ZV9mZHcvZmlsZV9mZHcuYwppbmRleCBlODkwNzcwLi5mODRhMDFmIDEwMDY0NAoqKiogYS9j b250cmliL2ZpbGVfZmR3L2ZpbGVfZmR3LmMKLS0tIGIvY29udHJpYi9maWxlX2Zkdy9maWxl X2Zkdy5jCioqKioqKioqKioqKioqKgoqKiogMjAsMjUgKioqKgotLS0gMjAsMjYgLS0tLQog ICNpbmNsdWRlICJjb21tYW5kcy9jb3B5LmgiCiAgI2luY2x1ZGUgImNvbW1hbmRzL2RlZnJl bS5oIgogICNpbmNsdWRlICJjb21tYW5kcy9leHBsYWluLmgiCisgI2luY2x1ZGUgImNvbW1h bmRzL3ZhY3V1bS5oIgogICNpbmNsdWRlICJmb3JlaWduL2Zkd2FwaS5oIgogICNpbmNsdWRl ICJmb3JlaWduL2ZvcmVpZ24uaCIKICAjaW5jbHVkZSAibWlzY2FkbWluLmgiCioqKioqKioq KioqKioqKiBzdGF0aWMgdm9pZCBmaWxlQmVnaW5Gb3JlaWduU2NhbihGb3JlaWduCioqKiAx MjMsMTI4ICoqKioKLS0tIDEyNCwxMzIgLS0tLQogIHN0YXRpYyBUdXBsZVRhYmxlU2xvdCAq ZmlsZUl0ZXJhdGVGb3JlaWduU2NhbihGb3JlaWduU2NhblN0YXRlICpub2RlKTsKICBzdGF0 aWMgdm9pZCBmaWxlUmVTY2FuRm9yZWlnblNjYW4oRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSk7 CiAgc3RhdGljIHZvaWQgZmlsZUVuZEZvcmVpZ25TY2FuKEZvcmVpZ25TY2FuU3RhdGUgKm5v ZGUpOworIHN0YXRpYyB2b2lkIGZpbGVBbmFseXplRm9yZWlnblRhYmxlKFJlbGF0aW9uIG9u ZXJlbCwKKyAJCQkJCVZhY3V1bVN0bXQgKnZhY3N0bXQsCisgCQkJCQlpbnQgZWxldmVsKTsK ICAKICAvKgogICAqIEhlbHBlciBmdW5jdGlvbnMKKioqKioqKioqKioqKioqIHN0YXRpYyB2 b2lkIGVzdGltYXRlX3NpemUoUGxhbm5lckluZm8gKnIKKioqIDEzNiwxNDIgKioqKgogIHN0 YXRpYyB2b2lkIGVzdGltYXRlX2Nvc3RzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpiYXNlcmVsLAogIAkJCSAgIEZpbGVGZHdQbGFuU3RhdGUgKmZkd19wcml2YXRlLAogIAkJ CSAgIENvc3QgKnN0YXJ0dXBfY29zdCwgQ29zdCAqdG90YWxfY29zdCk7CiEgCiAgCiAgLyoK ICAgKiBGb3JlaWduLWRhdGEgd3JhcHBlciBoYW5kbGVyIGZ1bmN0aW9uOiByZXR1cm4gYSBz dHJ1Y3Qgd2l0aCBwb2ludGVycwotLS0gMTQwLDE0OSAtLS0tCiAgc3RhdGljIHZvaWQgZXN0 aW1hdGVfY29zdHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKmJhc2VyZWwsCiAg CQkJICAgRmlsZUZkd1BsYW5TdGF0ZSAqZmR3X3ByaXZhdGUsCiAgCQkJICAgQ29zdCAqc3Rh cnR1cF9jb3N0LCBDb3N0ICp0b3RhbF9jb3N0KTsKISBzdGF0aWMgaW50CWFjcXVpcmVfc2Ft cGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLAohIAkJCSAgIEhlYXBUdXBsZSAqcm93cywgaW50 IHRhcmdyb3dzLAohIAkJCSAgIGRvdWJsZSAqdG90YWxyb3dzLCBkb3VibGUgKnRvdGFsZGVh ZHJvd3MsCiEgCQkJICAgQmxvY2tOdW1iZXIgKnRvdGFscGFnZXMsIGludCBlbGV2ZWwpOwog IAogIC8qCiAgICogRm9yZWlnbi1kYXRhIHdyYXBwZXIgaGFuZGxlciBmdW5jdGlvbjogcmV0 dXJuIGEgc3RydWN0IHdpdGggcG9pbnRlcnMKKioqKioqKioqKioqKioqIGZpbGVfZmR3X2hh bmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKKioqIDE1NSwxNjAgKioqKgotLS0gMTYyLDE2OCAt LS0tCiAgCWZkd3JvdXRpbmUtPkl0ZXJhdGVGb3JlaWduU2NhbiA9IGZpbGVJdGVyYXRlRm9y ZWlnblNjYW47CiAgCWZkd3JvdXRpbmUtPlJlU2NhbkZvcmVpZ25TY2FuID0gZmlsZVJlU2Nh bkZvcmVpZ25TY2FuOwogIAlmZHdyb3V0aW5lLT5FbmRGb3JlaWduU2NhbiA9IGZpbGVFbmRG b3JlaWduU2NhbjsKKyAJZmR3cm91dGluZS0+QW5hbHl6ZUZvcmVpZ25UYWJsZSA9IGZpbGVB bmFseXplRm9yZWlnblRhYmxlOwogIAogIAlQR19SRVRVUk5fUE9JTlRFUihmZHdyb3V0aW5l KTsKICB9CioqKioqKioqKioqKioqKiBlc3RpbWF0ZV9zaXplKFBsYW5uZXJJbmZvICpyb290 LCBSZWxPcHRJCioqKiA2NjIsNjkzICoqKioKICAJZG91YmxlCQlucm93czsKICAKICAJLyoK ISAJICogR2V0IHNpemUgb2YgdGhlIGZpbGUuICBJdCBtaWdodCBub3QgYmUgdGhlcmUgYXQg cGxhbiB0aW1lLCB0aG91Z2gsIGluCiEgCSAqIHdoaWNoIGNhc2Ugd2UgaGF2ZSB0byB1c2Ug YSBkZWZhdWx0IGVzdGltYXRlLgogIAkgKi8KISAJaWYgKHN0YXQoZmR3X3ByaXZhdGUtPmZp bGVuYW1lLCAmc3RhdF9idWYpIDwgMCkKISAJCXN0YXRfYnVmLnN0X3NpemUgPSAxMCAqIEJM Q0tTWjsKICAKISAJLyoKISAJICogQ29udmVydCBzaXplIHRvIHBhZ2VzIGZvciB1c2UgaW4g SS9PIGNvc3QgZXN0aW1hdGUgbGF0ZXIuCiEgCSAqLwohIAlwYWdlcyA9IChzdGF0X2J1Zi5z dF9zaXplICsgKEJMQ0tTWiAtIDEpKSAvIEJMQ0tTWjsKISAJaWYgKHBhZ2VzIDwgMSkKISAJ CXBhZ2VzID0gMTsKICAKISAJZmR3X3ByaXZhdGUtPnBhZ2VzID0gcGFnZXM7CiAgCiEgCS8q CiEgCSAqIEVzdGltYXRlIHRoZSBudW1iZXIgb2YgdHVwbGVzIGluIHRoZSBmaWxlLiAgV2Ug YmFjayBpbnRvIHRoaXMgZXN0aW1hdGUKISAJICogdXNpbmcgdGhlIHBsYW5uZXIncyBpZGVh IG9mIHRoZSByZWxhdGlvbiB3aWR0aDsgd2hpY2ggaXMgYm9ndXMgaWYgbm90CiEgCSAqIGFs bCBjb2x1bW5zIGFyZSBiZWluZyByZWFkLCBub3QgdG8gbWVudGlvbiB0aGF0IHRoZSB0ZXh0 IHJlcHJlc2VudGF0aW9uCiEgCSAqIG9mIGEgcm93IHByb2JhYmx5IGlzbid0IHRoZSBzYW1l IHNpemUgYXMgaXRzIGludGVybmFsIHJlcHJlc2VudGF0aW9uLgohIAkgKiBGSVhNRSBsYXRl ci4KISAJICovCiEgCXR1cGxlX3dpZHRoID0gTUFYQUxJR04oYmFzZXJlbC0+d2lkdGgpICsg TUFYQUxJR04oc2l6ZW9mKEhlYXBUdXBsZUhlYWRlckRhdGEpKTsKICAKISAJbnR1cGxlcyA9 IGNsYW1wX3Jvd19lc3QoKGRvdWJsZSkgc3RhdF9idWYuc3Rfc2l6ZSAvIChkb3VibGUpIHR1 cGxlX3dpZHRoKTsKICAKICAJZmR3X3ByaXZhdGUtPm50dXBsZXMgPSBudHVwbGVzOwogIAog IAkvKgotLS0gNjcwLDcxNiAtLS0tCiAgCWRvdWJsZQkJbnJvd3M7CiAgCiAgCS8qCiEgCSAq IFVzZSBzdGF0aXN0aWNzIHN0b3JlZCBpbiBwZ19jbGFzcyBhcyBpcyBpZiBhbnkuICBPdGhl cndpc2UsIGNhbGN1bGF0ZQohIAkgKiB0aGVtIGZyb20gZmlsZSBzaXplIGFuZCBhdmVyYWdl IHR1cGxlIHdpZHRoLgogIAkgKi8KISAJaWYgKGJhc2VyZWwtPnBhZ2VzID4gMCkKISAJewoh IAkJcGFnZXMgPSBiYXNlcmVsLT5wYWdlczsKISAJCW50dXBsZXMgPSBiYXNlcmVsLT50dXBs ZXM7CiEgCX0KISAJZWxzZQohIAl7CiEgCQkvKgohIAkJICogR2V0IHNpemUgb2YgdGhlIGZp bGUuICBJdCBtaWdodCBub3QgYmUgdGhlcmUgYXQgcGxhbiB0aW1lLCB0aG91Z2gsCiEgCQkg KiBpbiB3aGljaCBjYXNlIHdlIGhhdmUgdG8gdXNlIGEgZGVmYXVsdCBlc3RpbWF0ZS4KISAJ CSAqLwohIAkJaWYgKHN0YXQoZmR3X3ByaXZhdGUtPmZpbGVuYW1lLCAmc3RhdF9idWYpIDwg MCkKISAJCQlzdGF0X2J1Zi5zdF9zaXplID0gMTAgKiBCTENLU1o7CiAgCiEgCQkvKgohIAkJ ICogQ29udmVydCBzaXplIHRvIHBhZ2VzIGZvciB1c2UgaW4gSS9PIGNvc3QgZXN0aW1hdGUg bGF0ZXIuCiEgCQkgKi8KISAJCXBhZ2VzID0gKHN0YXRfYnVmLnN0X3NpemUgKyAoQkxDS1Na IC0gMSkpIC8gQkxDS1NaOwohIAkJaWYgKHBhZ2VzIDwgMSkKISAJCQlwYWdlcyA9IDE7CiAg CiEgCQkvKgohIAkJICogRXN0aW1hdGUgdGhlIG51bWJlciBvZiB0dXBsZXMgaW4gdGhlIGZp bGUuICBXZSBiYWNrIGludG8gdGhpcwohIAkJICogZXN0aW1hdGUgdXNpbmcgdGhlIHBsYW5u ZXIncyBpZGVhIG9mIHRoZSByZWxhdGlvbiB3aWR0aDsgd2hpY2ggaXMKISAJCSAqIGJvZ3Vz IGlmIG5vdCBhbGwgY29sdW1ucyBhcmUgYmVpbmcgcmVhZCwgbm90IHRvIG1lbnRpb24gdGhh dCB0aGUKISAJCSAqIHRleHQgcmVwcmVzZW50YXRpb24gb2YgYSByb3cgcHJvYmFibHkgaXNu J3QgdGhlIHNhbWUgc2l6ZSBhcyBpdHMKISAJCSAqIGludGVybmFsIHJlcHJlc2VudGF0aW9u LiAgRklYTUUgbGF0ZXIuCiEgCQkgKi8KISAJCXR1cGxlX3dpZHRoID0gTUFYQUxJR04oYmFz ZXJlbC0+d2lkdGgpICsKISAJCQkJCSAgTUFYQUxJR04oc2l6ZW9mKEhlYXBUdXBsZUhlYWRl ckRhdGEpKTsKICAKISAJCW50dXBsZXMgPSBjbGFtcF9yb3dfZXN0KChkb3VibGUpIHN0YXRf YnVmLnN0X3NpemUgLwohIAkJCQkJCQkJKGRvdWJsZSkgdHVwbGVfd2lkdGgpOwogIAohIAl9 CiAgCisgCS8qIFBhc3MgZXN0aW1hdGVzIHRvIHN1YnNlcXVlbnQgZnVuY3Rpb25zIHZpYSBG aWxlRmR3UGxhblN0YXRlLiAqLworIAlmZHdfcHJpdmF0ZS0+cGFnZXMgPSBwYWdlczsKICAJ ZmR3X3ByaXZhdGUtPm50dXBsZXMgPSBudHVwbGVzOwogIAogIAkvKgoqKioqKioqKioqKioq KiogZXN0aW1hdGVfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SQoqKiogNzA5LDcx NCAqKioqCi0tLSA3MzIsNzQ3IC0tLS0KICB9CiAgCiAgLyoKKyAgKiBmaWxlQW5hbHl6ZUZv cmVpZ25UYWJsZQorICAqCQlBbmFseXplIGZvcmVpZ24gdGFibGUKKyAgKi8KKyBzdGF0aWMg dm9pZAorIGZpbGVBbmFseXplRm9yZWlnblRhYmxlKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVt U3RtdCAqdmFjc3RtdCwgaW50IGVsZXZlbCkKKyB7CisgCWRvX2FuYWx5emVfcmVsKG9uZXJl bCwgdmFjc3RtdCwgZWxldmVsLCBmYWxzZSwgYWNxdWlyZV9zYW1wbGVfcm93cyk7CisgfQor IAorIC8qCiAgICogRXN0aW1hdGUgY29zdHMgb2Ygc2Nhbm5pbmcgYSBmb3JlaWduIHRhYmxl LgogICAqCiAgICogUmVzdWx0cyBhcmUgcmV0dXJuZWQgaW4gKnN0YXJ0dXBfY29zdCBhbmQg KnRvdGFsX2Nvc3QuCioqKioqKioqKioqKioqKiBlc3RpbWF0ZV9jb3N0cyhQbGFubmVySW5m byAqcm9vdCwgUmVsT3B0CioqKiA3MzYsNzM4ICoqKioKLS0tIDc2OSw5NTcgLS0tLQogIAly dW5fY29zdCArPSBjcHVfcGVyX3R1cGxlICogbnR1cGxlczsKICAJKnRvdGFsX2Nvc3QgPSAq c3RhcnR1cF9jb3N0ICsgcnVuX2Nvc3Q7CiAgfQorIAorIC8qCisgICogYWNxdWlyZV9zYW1w bGVfcm93cyAtLSBhY3F1aXJlIGEgcmFuZG9tIHNhbXBsZSBvZiByb3dzIGZyb20gdGhlIHRh YmxlCisgICoKKyAgKiBTZWxlY3RlZCByb3dzIGFyZSByZXR1cm5lZCBpbiB0aGUgY2FsbGVy LWFsbG9jYXRlZCBhcnJheSByb3dzW10sIHdoaWNoIG11c3QKKyAgKiBoYXZlIGF0IGxlYXN0 IHRhcmdyb3dzIGVudHJpZXMuICBUaGUgYWN0dWFsIG51bWJlciBvZiByb3dzIHNlbGVjdGVk IGlzIAorICAqIHJldHVybmVkIGFzIHRoZSBmdW5jdGlvbiByZXN1bHQuICBXZSBhbHNvIGNv dW50IHRoZSBudW1iZXIgb2YgdmFsaWQgcm93cyBpbgorICAqIHRoZSB0YWJsZSwgYW5kIHJl dHVybiBpdCBpbnRvICp0b3RhbHJvd3MuCisgICoKKyAgKiBUaGUgcmV0dXJuZWQgbGlzdCBv ZiB0dXBsZXMgaXMgaW4gb3JkZXIgYnkgcGh5c2ljYWwgcG9zaXRpb24gaW4gdGhlIHRhYmxl LgorICAqIChXZSB3aWxsIHJlbHkgb24gdGhpcyBsYXRlciB0byBkZXJpdmUgY29ycmVsYXRp b24gZXN0aW1hdGVzLikKKyAgKi8KKyBzdGF0aWMgaW50CisgYWNxdWlyZV9zYW1wbGVfcm93 cyhSZWxhdGlvbiBvbmVyZWwsIEhlYXBUdXBsZSAqcm93cywgaW50IHRhcmdyb3dzLAorIAkJ CQkJZG91YmxlICp0b3RhbHJvd3MsIGRvdWJsZSAqdG90YWxkZWFkcm93cywKKyAJCQkJCUJs b2NrTnVtYmVyICp0b3RhbHBhZ2VzLCBpbnQgZWxldmVsKQorIHsKKyAJaW50CQkJbnVtcm93 cyA9IDA7CisgCWludAkJCWludmFscm93cyA9IDA7IC8qIHRvdGFsICMgcm93cyB2aW9sYXRp bmcKKyAJCQkJCQkJCSAgdGhlIE5PVCBOVUxMIGNvbnN0cmFpbnRzICovCisgCWRvdWJsZQkJ dmFsaWRyb3dzID0gMDsgLyogdG90YWwgIyByb3dzIGNvbGxlY3RlZCAqLworIAlkb3VibGUJ CXJvd3N0b3NraXAgPSAtMTsgLyogLTEgbWVhbnMgbm90IHNldCB5ZXQgKi8KKyAJZG91Ymxl CQlyc3RhdGU7CisgCUhlYXBUdXBsZQl0dXBsZTsKKyAJVHVwbGVEZXNjCXR1cERlc2M7Cisg CVR1cGxlQ29uc3RyICpjb25zdHI7CisgCWludAkJCW5hdHRzOworIAlpbnQJCQlhdHRyQ2hr OworIAlEYXR1bQkgICAqdmFsdWVzOworIAlib29sCSAgICpudWxsczsKKyAJYm9vbAkJZm91 bmQ7CisgCWJvb2wJCXNhbXBsZV9pdCA9IGZhbHNlOworIAljaGFyCSAgICpmaWxlbmFtZTsK KyAJc3RydWN0IHN0YXQJc3RhdF9idWY7CisgCUxpc3QJICAgKm9wdGlvbnM7CisgCUNvcHlT dGF0ZQljc3RhdGU7CisgCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNvbnRleHQ7CisgCisg CUFzc2VydChvbmVyZWwpOworIAlBc3NlcnQodGFyZ3Jvd3MgPiAwKTsKKyAKKyAJdHVwRGVz YyA9IFJlbGF0aW9uR2V0RGVzY3Iob25lcmVsKTsKKyAJY29uc3RyID0gdHVwRGVzYy0+Y29u c3RyOworIAluYXR0cyA9IHR1cERlc2MtPm5hdHRzOworIAl2YWx1ZXMgPSAoRGF0dW0gKikg cGFsbG9jKHR1cERlc2MtPm5hdHRzICogc2l6ZW9mKERhdHVtKSk7CisgCW51bGxzID0gKGJv b2wgKikgcGFsbG9jKHR1cERlc2MtPm5hdHRzICogc2l6ZW9mKGJvb2wpKTsKKyAKKyAJLyog RmV0Y2ggb3B0aW9ucyBvZiBmb3JlaWduIHRhYmxlICovCisgCWZpbGVHZXRPcHRpb25zKFJl bGF0aW9uR2V0UmVsaWQob25lcmVsKSwgJmZpbGVuYW1lLCAmb3B0aW9ucyk7CisgCisgCS8q CisgCSAqIEdldCBzaXplIG9mIHRoZSBmaWxlLgorIAkgKi8KKyAJaWYgKHN0YXQoZmlsZW5h bWUsICZzdGF0X2J1ZikgPCAwKQorIAkJZXJlcG9ydChFUlJPUiwKKyAJCQkJKGVycmNvZGVf Zm9yX2ZpbGVfYWNjZXNzKCksCisgCQkJCSBlcnJtc2coImNvdWxkIG5vdCBzdGF0IGZpbGUg XCIlc1wiOiAlbSIsCisgCQkJCQkJZmlsZW5hbWUpKSk7CisgCisgCS8qCisgCSAqIENvbnZl cnQgc2l6ZSB0byBwYWdlcyBmb3IgdXNlIGluIEkvTyBjb3N0IGVzdGltYXRlLgorIAkgKi8K KyAJKnRvdGFscGFnZXMgPSAoc3RhdF9idWYuc3Rfc2l6ZSArIChCTENLU1ogLSAxKSkgLyBC TENLU1o7CisgCWlmICgqdG90YWxwYWdlcyA8IDEpCisgCQkqdG90YWxwYWdlcyA9IDE7Cisg CisgCS8qCisgCSAqIENyZWF0ZSBDb3B5U3RhdGUgZnJvbSBGRFcgb3B0aW9ucy4gIFdlIGFs d2F5cyBhY3F1aXJlIGFsbCBjb2x1bW5zLCBzbworIAkgKiBhcyB0byBtYXRjaCB0aGUgZXhw ZWN0ZWQgU2NhblR1cGxlU2xvdCBzaWduYXR1cmUuCisgCSAqLworIAljc3RhdGUgPSBCZWdp bkNvcHlGcm9tKG9uZXJlbCwgZmlsZW5hbWUsIE5JTCwgb3B0aW9ucyk7CisgCisgCS8qIFBy ZXBhcmUgZm9yIHNhbXBsaW5nIHJvd3MgKi8KKyAJcnN0YXRlID0gaW5pdF9zZWxlY3Rpb25f c3RhdGUodGFyZ3Jvd3MpOworIAorIAkvKiBTZXQgdXAgY2FsbGJhY2sgdG8gaWRlbnRpZnkg ZXJyb3IgbGluZSBudW1iZXIuICovCisgCWVycmNvbnRleHQuY2FsbGJhY2sgPSBDb3B5RnJv bUVycm9yQ2FsbGJhY2s7CisgCWVycmNvbnRleHQuYXJnID0gKHZvaWQgKikgY3N0YXRlOwor IAllcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKyAJZXJyb3Jf Y29udGV4dF9zdGFjayA9ICZlcnJjb250ZXh0OworIAorIAlmb3IgKDs7KQorIAl7CisgCQlz YW1wbGVfaXQgPSB0cnVlOworIAorIAkJLyoKKyAJCSAqIENoZWNrIGZvciB1c2VyLXJlcXVl c3RlZCBhYm9ydC4KKyAJCSAqLworIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKyAKKyAJ CWZvdW5kID0gTmV4dENvcHlGcm9tKGNzdGF0ZSwgTlVMTCwgdmFsdWVzLCBudWxscywgTlVM TCk7CisgCisgCQlpZiAoIWZvdW5kKQorIAkJCWJyZWFrOworIAorIAkJdHVwbGUgPSBoZWFw X2Zvcm1fdHVwbGUodHVwRGVzYywgdmFsdWVzLCBudWxscyk7CisgCisgCQlpZiAoY29uc3Ry ICYmIGNvbnN0ci0+aGFzX25vdF9udWxsKQorIAkJeworIAkJCWZvciAoYXR0ckNoayA9IDE7 IGF0dHJDaGsgPD0gbmF0dHM7IGF0dHJDaGsrKykKKyAJCQl7CisgCQkJCWlmIChvbmVyZWwt PnJkX2F0dC0+YXR0cnNbYXR0ckNoayAtIDFdLT5hdHRub3RudWxsICYmCisgCQkJCQloZWFw X2F0dGlzbnVsbCh0dXBsZSwgYXR0ckNoaykpCisgCQkJCXsKKyAJCQkJCXNhbXBsZV9pdCA9 IGZhbHNlOworIAkJCQkJYnJlYWs7CisgCQkJCX0KKyAJCQl9CisgCQl9CisgCisgCQlpZiAo IXNhbXBsZV9pdCkKKyAJCXsKKyAJCQlpbnZhbHJvd3MgKz0gMTsKKyAJCQloZWFwX2ZyZWV0 dXBsZSh0dXBsZSk7CisgCQkJY29udGludWU7CisgCQl9CisgCisgCQkvKgorIAkJICogVGhl IGZpcnN0IHRhcmdyb3dzIHNhbXBsZSByb3dzIGFyZSBzaW1wbHkgY29waWVkIGludG8gdGhl CisgCQkgKiByZXNlcnZvaXIuIFRoZW4gd2Ugc3RhcnQgcmVwbGFjaW5nIHR1cGxlcyBpbiB0 aGUgc2FtcGxlCisgCQkgKiB1bnRpbCB3ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSByZWxhdGlv bi4JVGhpcyBhbGdvcml0aG0gaXMKKyAJCSAqIGZyb20gSmVmZiBWaXR0ZXIncyBwYXBlciAo c2VlIGZ1bGwgY2l0YXRpb24gYmVsb3cpLiBJdAorIAkJICogd29ya3MgYnkgcmVwZWF0ZWRs eSBjb21wdXRpbmcgdGhlIG51bWJlciBvZiB0dXBsZXMgdG8gc2tpcAorIAkJICogYmVmb3Jl IHNlbGVjdGluZyBhIHR1cGxlLCB3aGljaCByZXBsYWNlcyBhIHJhbmRvbWx5IGNob3Nlbgor IAkJICogZWxlbWVudCBvZiB0aGUgcmVzZXJ2b2lyIChjdXJyZW50IHNldCBvZiB0dXBsZXMp LiAgQXQgYWxsCisgCQkgKiB0aW1lcyB0aGUgcmVzZXJ2b2lyIGlzIGEgdHJ1ZSByYW5kb20g c2FtcGxlIG9mIHRoZSB0dXBsZXMKKyAJCSAqIHdlJ3ZlIHBhc3NlZCBvdmVyIHNvIGZhciwg c28gd2hlbiB3ZSBmYWxsIG9mZiB0aGUgZW5kIG9mCisgCQkgKiB0aGUgcmVsYXRpb24gd2Un cmUgZG9uZS4KKyAJCSAqLworIAkJaWYgKG51bXJvd3MgPCB0YXJncm93cykKKyAJCQlyb3dz W251bXJvd3MrK10gPSBoZWFwX2NvcHl0dXBsZSh0dXBsZSk7CisgCQllbHNlCisgCQl7Cisg CQkJLyoKKyAJCQkgKiB0IGluIFZpdHRlcidzIHBhcGVyIGlzIHRoZSBudW1iZXIgb2YgcmVj b3JkcyBhbHJlYWR5CisgCQkJICogcHJvY2Vzc2VkLiAgSWYgd2UgbmVlZCB0byBjb21wdXRl IGEgbmV3IFMgdmFsdWUsIHdlCisgCQkJICogbXVzdCB1c2UgdGhlIG5vdC15ZXQtaW5jcmVt ZW50ZWQgdmFsdWUgb2Ygc2FtcGxlcm93cyBhcworIAkJCSAqIHQuCisgCQkJICovCisgCQkJ aWYgKHJvd3N0b3NraXAgPCAwKQorIAkJCQlyb3dzdG9za2lwID0gZ2V0X25leHRfUyh2YWxp ZHJvd3MsIHRhcmdyb3dzLCAmcnN0YXRlKTsKKyAKKyAJCQlpZiAocm93c3Rvc2tpcCA8PSAw KQorIAkJCXsKKyAJCQkJLyoKKyAJCQkJICogRm91bmQgYSBzdWl0YWJsZSB0dXBsZSwgc28g c2F2ZSBpdCwgcmVwbGFjaW5nIG9uZQorIAkJCQkgKiBvbGQgdHVwbGUgYXQgcmFuZG9tCisg CQkJCSAqLworIAkJCQlpbnQgayA9IChpbnQpICh0YXJncm93cyAqIHJhbmRvbV9mcmFjdCgp KTsKKyAKKyAJCQkJQXNzZXJ0KGsgPj0gMCAmJiBrIDwgdGFyZ3Jvd3MpOworIAkJCQloZWFw X2ZyZWV0dXBsZShyb3dzW2tdKTsKKyAJCQkJcm93c1trXSA9IGhlYXBfY29weXR1cGxlKHR1 cGxlKTsKKyAJCQl9CisgCisgCQkJcm93c3Rvc2tpcCAtPSAxOworIAkJfQorIAorIAkJdmFs aWRyb3dzICs9IDE7CisgCQloZWFwX2ZyZWV0dXBsZSh0dXBsZSk7CisgCX0KKyAKKyAJLyog UmVtb3ZlIGVycm9yIGNhbGxiYWNrLiAqLworIAllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJy Y29udGV4dC5wcmV2aW91czsKKyAKKyAJKnRvdGFscm93cyA9IHZhbGlkcm93czsKKyAJKnRv dGFsZGVhZHJvd3MgPSAwOworIAorIAlFbmRDb3B5RnJvbShjc3RhdGUpOworIAorIAlwZnJl ZSh2YWx1ZXMpOworIAlwZnJlZShudWxscyk7CisgCisgCS8qCisgCSAqIEVtaXQgc29tZSBp bnRlcmVzdGluZyByZWxhdGlvbiBpbmZvCisgCSAqLworIAllcmVwb3J0KGVsZXZlbCwKKyAJ CQkoZXJybXNnKCJcIiVzXCI6IHNjYW5uZWQsICIKKyAJCQkJCSJjb250YWluaW5nICVkIHZh bGlkIHJvd3MgYW5kICVkIGludmFsaWQgcm93czsgIgorIAkJCQkJIiVkIHJvd3MgaW4gc2Ft cGxlLCAlZCB0b3RhbCByb3dzIiwKKyAJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG9u ZXJlbCksCisgCQkJCQkoaW50KSB2YWxpZHJvd3MsIGludmFscm93cywKKyAJCQkJCW51bXJv d3MsIChpbnQpICp0b3RhbHJvd3MpKSk7CisgCisgCXJldHVybiBudW1yb3dzOworIH0KZGlm ZiAtLWdpdCBhL2NvbnRyaWIvZmlsZV9mZHcvaW5wdXQvZmlsZV9mZHcuc291cmNlIGIvY29u dHJpYi9maWxlX2Zkdy9pbnB1dC9maWxlX2Zkdy5zb3VyY2UKaW5kZXggOGUzZDU1My4uZmRk ZDljZCAxMDA2NDQKKioqIGEvY29udHJpYi9maWxlX2Zkdy9pbnB1dC9maWxlX2Zkdy5zb3Vy Y2UKLS0tIGIvY29udHJpYi9maWxlX2Zkdy9pbnB1dC9maWxlX2Zkdy5zb3VyY2UKKioqKioq KioqKioqKioqIEVYRUNVVEUgc3QoMTAwKTsKKioqIDExMSwxMTYgKioqKgotLS0gMTExLDEy MSAtLS0tCiAgRVhFQ1VURSBzdCgxMDApOwogIERFQUxMT0NBVEUgc3Q7CiAgCisgLS0gc3Rh dGlzdGljcyBjb2xsZWN0aW9uIHRlc3RzCisgQU5BTFlaRSBhZ2dfY3N2OworIFNFTEVDVCBy ZWxwYWdlcywgcmVsdHVwbGVzIEZST00gcGdfY2xhc3MgV0hFUkUgcmVsbmFtZSA9ICdhZ2df Y3N2JzsKKyBTRUxFQ1QgKiBGUk9NIHBnX3N0YXRzIFdIRVJFIHRhYmxlbmFtZSA9ICdhZ2df Y3N2JyBPUkRFUiBCWSBhdHRuYW1lOworIAogIC0tIHRhYmxlb2lkCiAgU0VMRUNUIHRhYmxl b2lkOjpyZWdjbGFzcywgYiBGUk9NIGFnZ19jc3Y7CiAgCmRpZmYgLS1naXQgYS9jb250cmli L2ZpbGVfZmR3L291dHB1dC9maWxlX2Zkdy5zb3VyY2UgYi9jb250cmliL2ZpbGVfZmR3L291 dHB1dC9maWxlX2Zkdy5zb3VyY2UKaW5kZXggODRmMDc1MC4uNWJlNWZlMCAxMDA2NDQKKioq IGEvY29udHJpYi9maWxlX2Zkdy9vdXRwdXQvZmlsZV9mZHcuc291cmNlCi0tLSBiL2NvbnRy aWIvZmlsZV9mZHcvb3V0cHV0L2ZpbGVfZmR3LnNvdXJjZQoqKioqKioqKioqKioqKiogRVhF Q1VURSBzdCgxMDApOwoqKiogMTc0LDE3OSAqKioqCi0tLSAxNzQsMTk0IC0tLS0KICAoMSBy b3cpCiAgCiAgREVBTExPQ0FURSBzdDsKKyAtLSBzdGF0aXN0aWNzIGNvbGxlY3Rpb24gdGVz dHMKKyBBTkFMWVpFIGFnZ19jc3Y7CisgU0VMRUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMgRlJP TSBwZ19jbGFzcyBXSEVSRSByZWxuYW1lID0gJ2FnZ19jc3YnOworICByZWxwYWdlcyB8IHJl bHR1cGxlcyAKKyAtLS0tLS0tLS0tKy0tLS0tLS0tLS0tCisgICAgICAgICAxIHwgICAgICAg ICAzCisgKDEgcm93KQorIAorIFNFTEVDVCAqIEZST00gcGdfc3RhdHMgV0hFUkUgdGFibGVu YW1lID0gJ2FnZ19jc3YnIE9SREVSIEJZIGF0dG5hbWU7CisgIHNjaGVtYW5hbWUgfCB0YWJs ZW5hbWUgfCBhdHRuYW1lIHwgaW5oZXJpdGVkIHwgbnVsbF9mcmFjIHwgYXZnX3dpZHRoIHwg bl9kaXN0aW5jdCB8IG1vc3RfY29tbW9uX3ZhbHMgfCBtb3N0X2NvbW1vbl9mcmVxcyB8ICAg IGhpc3RvZ3JhbV9ib3VuZHMgICAgIHwgY29ycmVsYXRpb24gfCBtb3N0X2NvbW1vbl9lbGVt cyB8IG1vc3RfY29tbW9uX2VsZW1fZnJlcXMgfCBlbGVtX2NvdW50X2hpc3RvZ3JhbSAKKyAt LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorICBwdWJsaWMgICAgIHwgYWdnX2NzdiAgIHwgYSAgICAgICB8IGYg ICAgICAgICB8ICAgICAgICAgMCB8ICAgICAgICAgMiB8ICAgICAgICAgLTEgfCAgICAgICAg ICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgfCB7MCw0MiwxMDB9ICAgICAgICAgICAg ICB8ICAgICAgICAtMC41IHwgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAg ICAgICAgIHwgCisgIHB1YmxpYyAgICAgfCBhZ2dfY3N2ICAgfCBiICAgICAgIHwgZiAgICAg ICAgIHwgICAgICAgICAwIHwgICAgICAgICA0IHwgICAgICAgICAtMSB8ICAgICAgICAgICAg ICAgICAgfCAgICAgICAgICAgICAgICAgICB8IHswLjA5NTYxLDk5LjA5NywzMjQuNzh9IHwg ICAgICAgICAwLjUgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAg ICAgfCAKKyAoMiByb3dzKQorIAogIC0tIHRhYmxlb2lkCiAgU0VMRUNUIHRhYmxlb2lkOjpy ZWdjbGFzcywgYiBGUk9NIGFnZ19jc3Y7CiAgIHRhYmxlb2lkIHwgICAgYiAgICAKZGlmZiAt LWdpdCBhL2RvYy9zcmMvc2dtbC9mZHdoYW5kbGVyLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZmR3 aGFuZGxlci5zZ21sCmluZGV4IGY3YmYzZDguLjRmOTYyYjcgMTAwNjQ0CioqKiBhL2RvYy9z cmMvc2dtbC9mZHdoYW5kbGVyLnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL2Zkd2hhbmRsZXIu c2dtbAoqKioqKioqKioqKioqKiogRW5kRm9yZWlnblNjYW4gKEZvcmVpZ25TY2FuU3RhdGUg Km5vZGUpOwoqKiogMjc3LDI4MiAqKioqCi0tLSAyNzcsMzA1IC0tLS0KICAgICAgPC9wYXJh PgogIAogICAgICA8cGFyYT4KKyA8cHJvZ3JhbWxpc3Rpbmc+Cisgdm9pZAorIEFuYWx5emVG b3JlaWduVGFibGUgKFJlbGF0aW9uIG9uZXJlbCwKKyAgICAgICAgICAgICAgICAgICAgICBW YWN1dW1TdG10ICp2YWNzdG10LAorICAgICAgICAgICAgICAgICAgICAgIGludCBlbGV2ZWwp OworIDwvcHJvZ3JhbWxpc3Rpbmc+CisgCisgICAgICBDb2xsZWN0IHN0YXRpc3RpY3Mgb24g YSBmb3JlaWduIHRhYmxlIGFuZCBzdG9yZSB0aGUgcmVzdWx0cyBpbiB0aGUKKyAgICAgIHBn X2NsYXNzIGFuZCBwZ19zdGF0aXN0aWNzIHN5c3RlbSBjYXRhbG9ncy4KKyAgICAgIFRoaXMg aXMgb3B0aW9uYWwsIGFuZCBpZiBpbXBsZW1lbnRlZCwgY2FsbGVkIHdoZW4gPGNvbW1hbmQ+ QU5BTFlaRTwvPgorICAgICAgY29tbWFuZCBpcyBydW4uICBUaGUgc3RhdGlzdGljcyBhcmUg dXNlZCBieSB0aGUgcXVlcnkgcGxhbm5lciBpbiBvcmRlciB0bworICAgICAgbWFrZSBnb29k IGNob2ljZXMgb2YgcXVlcnkgcGxhbnMuCisgICAgIDwvcGFyYT4KKyAKKyAgICAgPHBhcmE+ CisgICAgICBUaGUgZnVuY3Rpb24gY2FuIGJlIGltcGxlbWVudGVkIGJ5IHdyaXRpbmcgYSBz YW1wbGluZyBmdW5jdGlvbiB0aGF0CisgICAgICBhY3F1aXJlcyBhIHJhbmRvbSBzYW1wbGUg b2Ygcm93cyBmcm9tIGFuIGV4dGVybmFsIGRhdGEgc291cmNlIGFuZAorICAgICAgdGhlbiBi eSBjYWxsaW5nIDxmdW5jdGlvbj5kb19hbmFseXplX3JlbDwvPiwgd2hlcmUgeW91IHNob3Vs ZCBwYXNzCisgICAgICB0aGUgc2FtcGxpbmcgZnVuY3Rpb24gYXMgYW4gYXJndW1lbnQuCisg ICAgICBUaGUgZnVuY3Rpb24gbXVzdCBiZSBzZXQgdG8gTlVMTCBpZiBpdCBpc24ndCBpbXBs ZW1lbnRlZC4KKyAgICAgPC9wYXJhPgorIAorICAgICA8cGFyYT4KICAgICAgIFRoZSA8c3Ry dWN0bmFtZT5GZHdSb3V0aW5lPC8+IHN0cnVjdCB0eXBlIGlzIGRlY2xhcmVkIGluCiAgICAg ICA8ZmlsZW5hbWU+c3JjL2luY2x1ZGUvZm9yZWlnbi9mZHdhcGkuaDwvPiwgd2hpY2ggc2Vl IGZvciBhZGRpdGlvbmFsCiAgICAgICBkZXRhaWxzLgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL21haW50ZW5hbmNlLnNnbWwgYi9kb2Mvc3JjL3NnbWwvbWFpbnRlbmFuY2Uuc2dtbApp bmRleCA5M2MzZmY1Li41NGQwODM4IDEwMDY0NAoqKiogYS9kb2Mvc3JjL3NnbWwvbWFpbnRl bmFuY2Uuc2dtbAotLS0gYi9kb2Mvc3JjL3NnbWwvbWFpbnRlbmFuY2Uuc2dtbAoqKioqKioq KioqKioqKioKKioqIDI4NCwyODkgKioqKgotLS0gMjg0LDI5MyAtLS0tCiAgICAgIDxjb21t YW5kPkFOQUxZWkU8Lz4gc3RyaWN0bHkgYXMgYSBmdW5jdGlvbiBvZiB0aGUgbnVtYmVyIG9m IHJvd3MKICAgICAgaW5zZXJ0ZWQgb3IgdXBkYXRlZDsgaXQgaGFzIG5vIGtub3dsZWRnZSBv ZiB3aGV0aGVyIHRoYXQgd2lsbCBsZWFkCiAgICAgIHRvIG1lYW5pbmdmdWwgc3RhdGlzdGlj YWwgY2hhbmdlcy4KKyAgICAgTm90ZSB0aGF0IHRoZSBhdXRvdmFjdXVtIGRhZW1vbiBkb2Vz IG5vdCBpc3N1ZSA8Y29tbWFuZD5BTkFMWVpFPC8+CisgICAgIGNvbW1hbmRzIG9uIGZvcmVp Z24gdGFibGVzLiAgSXQgaXMgcmVjb21tZW5kZWQgdG8gcnVuIG1hbnVhbGx5LW1hbmFnZWQK KyAgICAgPGNvbW1hbmQ+QU5BTFlaRTwvPiBjb21tYW5kcyBhcyBuZWVkZWQsIHdoaWNoIHR5 cGljYWxseSBhcmUgZXhlY3V0ZWQKKyAgICAgYWNjb3JkaW5nIHRvIGEgc2NoZWR1bGUgYnkg Y3JvbiBvciBUYXNrIFNjaGVkdWxlciBzY3JpcHRzLgogICAgIDwvcGFyYT4KICAKICAgICA8 cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYWx0ZXJfZm9yZWlnbl90YWJs ZS5zZ21sIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9mb3JlaWduX3RhYmxlLnNnbWwKaW5k ZXggYzRjZGFhOC4uYWY1YzBhOCAxMDA2NDQKKioqIGEvZG9jL3NyYy9zZ21sL3JlZi9hbHRl cl9mb3JlaWduX3RhYmxlLnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL3JlZi9hbHRlcl9mb3Jl aWduX3RhYmxlLnNnbWwKKioqKioqKioqKioqKioqIEFMVEVSIEZPUkVJR04gVEFCTEUgWyBJ RiBFWElTVFMgXSA8cmVwbGEKKioqIDM2LDQxICoqKioKLS0tIDM2LDQ0IC0tLS0KICAgICAg RFJPUCBbIENPTFVNTiBdIFsgSUYgRVhJU1RTIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJB TUVURVIiPmNvbHVtbjwvcmVwbGFjZWFibGU+IFsgUkVTVFJJQ1QgfCBDQVNDQURFIF0KICAg ICAgQUxURVIgWyBDT0xVTU4gXSA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+Y29s dW1uPC9yZXBsYWNlYWJsZT4gWyBTRVQgREFUQSBdIFRZUEUgPHJlcGxhY2VhYmxlIGNsYXNz PSJQQVJBTUVURVIiPnR5cGU8L3JlcGxhY2VhYmxlPgogICAgICBBTFRFUiBbIENPTFVNTiBd IDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1bW48L3JlcGxhY2VhYmxlPiB7 IFNFVCB8IERST1AgfSBOT1QgTlVMTAorICAgICBBTFRFUiBbIENPTFVNTiBdIDxyZXBsYWNl YWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5jb2x1bW48L3JlcGxhY2VhYmxlPiBTRVQgU1RBVElT VElDUyA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+aW50ZWdlcjwvcmVwbGFjZWFi bGU+CisgICAgIEFMVEVSIFsgQ09MVU1OIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVU RVIiPmNvbHVtbjwvcmVwbGFjZWFibGU+IFNFVCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFS QU1FVEVSIj5hdHRyaWJ1dGVfb3B0aW9uPC9yZXBsYWNlYWJsZT4gPSA8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApCisgICAg IEFMVEVSIFsgQ09MVU1OIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbHVt bjwvcmVwbGFjZWFibGU+IFJFU0VUICggPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIi PmF0dHJpYnV0ZV9vcHRpb248L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApCiAgICAgIEFMVEVS IFsgQ09MVU1OIF0gPHJlcGxhY2VhYmxlIGNsYXNzPSJQQVJBTUVURVIiPmNvbHVtbjwvcmVw bGFjZWFibGU+IE9QVElPTlMgKCBbIEFERCB8IFNFVCB8IERST1AgXSA8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+b3B0aW9uPC9yZXBsYWNlYWJsZT4gWyc8cmVwbGFjZWFibGUg Y2xhc3M9IlBBUkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxlPiddIFssIC4uLiBdKQogICAg ICBPV05FUiBUTyA8cmVwbGFjZWFibGUgY2xhc3M9IlBBUkFNRVRFUiI+bmV3X293bmVyPC9y ZXBsYWNlYWJsZT4KICAgICAgT1BUSU9OUyAoIFsgQUREIHwgU0VUIHwgRFJPUCBdIDxyZXBs YWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5vcHRpb248L3JlcGxhY2VhYmxlPiBbJzxyZXBs YWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj52YWx1ZTwvcmVwbGFjZWFibGU+J10gWywgLi4u IF0pCioqKioqKioqKioqKioqKiBBTFRFUiBGT1JFSUdOIFRBQkxFIFsgSUYgRVhJU1RTIF0g PHJlcGxhCioqKiAxMDQsMTA5ICoqKioKLS0tIDEwNywxNTYgLS0tLQogICAgIDwvdmFybGlz dGVudHJ5PgogIAogICAgIDx2YXJsaXN0ZW50cnk+CisgICAgIDx0ZXJtPjxsaXRlcmFsPlNF VCBTVEFUSVNUSUNTPC9saXRlcmFsPjwvdGVybT4KKyAgICAgPGxpc3RpdGVtPgorICAgICAg PHBhcmE+CisgICAgICAgVGhpcyBmb3JtCisgICAgICAgc2V0cyB0aGUgcGVyLWNvbHVtbiBz dGF0aXN0aWNzLWdhdGhlcmluZyB0YXJnZXQgZm9yIHN1YnNlcXVlbnQKKyAgICAgICA8eHJl ZiBsaW5rZW5kPSJzcWwtYW5hbHl6ZSI+IG9wZXJhdGlvbnMuCisgICAgICAgVGhlIHRhcmdl dCBjYW4gYmUgc2V0IGluIHRoZSByYW5nZSAwIHRvIDEwMDAwOyBhbHRlcm5hdGl2ZWx5LCBz ZXQgaXQKKyAgICAgICB0byAtMSB0byByZXZlcnQgdG8gdXNpbmcgdGhlIHN5c3RlbSBkZWZh dWx0IHN0YXRpc3RpY3MKKyAgICAgICB0YXJnZXQgKDx4cmVmIGxpbmtlbmQ9Imd1Yy1kZWZh dWx0LXN0YXRpc3RpY3MtdGFyZ2V0Ij4pLgorICAgICAgPC9wYXJhPgorICAgICA8L2xpc3Rp dGVtPgorICAgIDwvdmFybGlzdGVudHJ5PgorIAorICAgIDx2YXJsaXN0ZW50cnk+CisgICAg IDx0ZXJtPjxsaXRlcmFsPlNFVCAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iUEFSQU1FVEVSIj5h dHRyaWJ1dGVfb3B0aW9uPC9yZXBsYWNlYWJsZT4gPSA8cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+dmFsdWU8L3JlcGxhY2VhYmxlPiBbLCAuLi4gXSApPC9saXRlcmFsPjwvdGVy bT4KKyAgICAgPHRlcm0+PGxpdGVyYWw+UkVTRVQgKCA8cmVwbGFjZWFibGUgY2xhc3M9IlBB UkFNRVRFUiI+YXR0cmlidXRlX29wdGlvbjwvcmVwbGFjZWFibGU+IFssIC4uLiBdICk8L2xp dGVyYWw+PC90ZXJtPgorICAgICA8bGlzdGl0ZW0+CisgICAgICA8cGFyYT4KKyAgICAgICBU aGlzIGZvcm0KKyAgICAgICBzZXRzIG9yIHJlc2V0cyBhIHBlci1hdHRyaWJ1dGUgb3B0aW9u LiAgQ3VycmVudGx5LCB0aGUgb25seSBkZWZpbmVkCisgICAgICAgcGVyLWF0dHJpYnV0ZSBv cHRpb24gaXMgPGxpdGVyYWw+bl9kaXN0aW5jdDwvPiwgd2hpY2ggb3ZlcnJpZGVzCisgICAg ICAgdGhlIG51bWJlci1vZi1kaXN0aW5jdC12YWx1ZXMgZXN0aW1hdGVzIG1hZGUgYnkgc3Vi c2VxdWVudAorICAgICAgIDx4cmVmIGxpbmtlbmQ9InNxbC1hbmFseXplIj4gb3BlcmF0aW9u cy4gCisgICAgICAgV2hlbiBzZXQgdG8gYSBwb3NpdGl2ZSB2YWx1ZSwgPGNvbW1hbmQ+QU5B TFlaRTwvPiB3aWxsIGFzc3VtZSB0aGF0CisgICAgICAgdGhlIGNvbHVtbiBjb250YWlucyBl eGFjdGx5IHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIGRpc3RpbmN0IG5vbm51bGwKKyAgICAg ICB2YWx1ZXMuCisgICAgICAgV2hlbiBzZXQgdG8gYSBuZWdhdGl2ZSB2YWx1ZSwgd2hpY2gg bXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwKKyAgICAgICB0byAtMSwgPGNvbW1hbmQ+ QU5BTFlaRTwvPiB3aWxsIGFzc3VtZSB0aGF0IHRoZSBudW1iZXIgb2YgZGlzdGluY3QKKyAg ICAgICBub25udWxsIHZhbHVlcyBpbiB0aGUgY29sdW1uIGlzIGxpbmVhciBpbiB0aGUgc2l6 ZSBvZiB0aGUgZm9yZWlnbgorICAgICAgIHRhYmxlOyB0aGUgZXhhY3QgY291bnQgaXMgdG8g YmUgY29tcHV0ZWQgYnkgbXVsdGlwbHlpbmcgdGhlIGVzdGltYXRlZAorICAgICAgIGZvcmVp Z24gdGFibGUgc2l6ZSBieSB0aGUgYWJzb2x1dGUgdmFsdWUgb2YgdGhlIGdpdmVuIG51bWJl ci4KKyAgICAgICBGb3IgZXhhbXBsZSwKKyAgICAgICBhIHZhbHVlIG9mIC0xIGltcGxpZXMg dGhhdCBhbGwgdmFsdWVzIGluIHRoZSBjb2x1bW4gYXJlIGRpc3RpbmN0LAorICAgICAgIHdo aWxlIGEgdmFsdWUgb2YgLTAuNSBpbXBsaWVzIHRoYXQgZWFjaCB2YWx1ZSBhcHBlYXJzIHR3 aWNlIG9uIHRoZQorICAgICAgIGF2ZXJhZ2UuCisgICAgICAgVGhpcyBjYW4gYmUgdXNlZnVs IHdoZW4gdGhlIHNpemUgb2YgdGhlIGZvcmVpZ24gdGFibGUgY2hhbmdlcyBvdmVyCisgICAg ICAgdGltZSwgc2luY2UgdGhlIG11bHRpcGxpY2F0aW9uIGJ5IHRoZSBudW1iZXIgb2Ygcm93 cyBpbiB0aGUgZm9yZWlnbgorICAgICAgIHRhYmxlIGlzIG5vdCBwZXJmb3JtZWQgdW50aWwg cXVlcnkgcGxhbm5pbmcgdGltZS4gIFNwZWNpZnkgYSB2YWx1ZQorICAgICAgIG9mIDAgdG8g cmV2ZXJ0IHRvIGVzdGltYXRpbmcgdGhlIG51bWJlciBvZiBkaXN0aW5jdCB2YWx1ZXMgbm9y bWFsbHkuCisgICAgICA8L3BhcmE+CisgICAgIDwvbGlzdGl0ZW0+CisgICAgPC92YXJsaXN0 ZW50cnk+CisgCisgICAgPHZhcmxpc3RlbnRyeT4KICAgICAgPHRlcm0+PGxpdGVyYWw+T1dO RVI8L2xpdGVyYWw+PC90ZXJtPgogICAgICA8bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KZGlm ZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvYW5hbHl6ZS5zZ21sIGIvZG9jL3NyYy9zZ21s L3JlZi9hbmFseXplLnNnbWwKaW5kZXggOGM5MDU3Yi4uOTdlOWFkNiAxMDA2NDQKKioqIGEv ZG9jL3NyYy9zZ21sL3JlZi9hbmFseXplLnNnbWwKLS0tIGIvZG9jL3NyYy9zZ21sL3JlZi9h bmFseXplLnNnbWwKKioqKioqKioqKioqKioqIEFOQUxZWkUgWyBWRVJCT1NFIF0gWyA8cmVw bGFjZWFibGUgY2xhc3MKKioqIDM5LDQ3ICoqKioKICAKICAgIDxwYXJhPgogICAgIFdpdGgg bm8gcGFyYW1ldGVyLCA8Y29tbWFuZD5BTkFMWVpFPC9jb21tYW5kPiBleGFtaW5lcyBldmVy eSB0YWJsZSBpbiB0aGUKISAgICBjdXJyZW50IGRhdGFiYXNlLiAgV2l0aCBhIHBhcmFtZXRl ciwgPGNvbW1hbmQ+QU5BTFlaRTwvY29tbWFuZD4gZXhhbWluZXMKISAgICBvbmx5IHRoYXQg dGFibGUuICBJdCBpcyBmdXJ0aGVyIHBvc3NpYmxlIHRvIGdpdmUgYSBsaXN0IG9mIGNvbHVt biBuYW1lcywKISAgICBpbiB3aGljaCBjYXNlIG9ubHkgdGhlIHN0YXRpc3RpY3MgZm9yIHRo b3NlIGNvbHVtbnMgYXJlIGNvbGxlY3RlZC4KICAgIDwvcGFyYT4KICAgPC9yZWZzZWN0MT4K ICAKLS0tIDM5LDQ5IC0tLS0KICAKICAgIDxwYXJhPgogICAgIFdpdGggbm8gcGFyYW1ldGVy LCA8Y29tbWFuZD5BTkFMWVpFPC9jb21tYW5kPiBleGFtaW5lcyBldmVyeSB0YWJsZSBpbiB0 aGUKISAgICBjdXJyZW50IGRhdGFiYXNlIGV4Y2VwdCBmb3IgZm9yZWlnbiB0YWJsZXMuICBX aXRoIGEgcGFyYW1ldGVyLAohICAgIDxjb21tYW5kPkFOQUxZWkU8L2NvbW1hbmQ+IGV4YW1p bmVzIG9ubHkgdGhhdCB0YWJsZS4gIEZvciBhIGZvcmVpZ24gdGFibGUsCiEgICAgaXQgaXMg bmVjZXNzYXJ5IHRvIHNwZWNpZnkgdGhlIG5hbWUgb2YgdGhhdCB0YWJsZS4gIEl0IGlzIGZ1 cnRoZXIgcG9zc2libGUKISAgICB0byBnaXZlIGEgbGlzdCBvZiBjb2x1bW4gbmFtZXMsIGlu IHdoaWNoIGNhc2Ugb25seSB0aGUgc3RhdGlzdGljcyBmb3IgdGhvc2UKISAgICBjb2x1bW5z IGFyZSBjb2xsZWN0ZWQuCiAgICA8L3BhcmE+CiAgIDwvcmVmc2VjdDE+CiAgCioqKioqKioq KioqKioqKiBBTkFMWVpFIFsgVkVSQk9TRSBdIFsgPHJlcGxhY2VhYmxlIGNsYXNzCioqKiA2 Myw2OSAqKioqCiAgICAgIDxsaXN0aXRlbT4KICAgICAgIDxwYXJhPgogICAgICAgIFRoZSBu YW1lIChwb3NzaWJseSBzY2hlbWEtcXVhbGlmaWVkKSBvZiBhIHNwZWNpZmljIHRhYmxlIHRv CiEgICAgICAgYW5hbHl6ZS4gRGVmYXVsdHMgdG8gYWxsIHRhYmxlcyBpbiB0aGUgY3VycmVu dCBkYXRhYmFzZS4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zh cmxpc3RlbnRyeT4KLS0tIDY1LDcyIC0tLS0KICAgICAgPGxpc3RpdGVtPgogICAgICAgPHBh cmE+CiAgICAgICAgVGhlIG5hbWUgKHBvc3NpYmx5IHNjaGVtYS1xdWFsaWZpZWQpIG9mIGEg c3BlY2lmaWMgdGFibGUgdG8KISAgICAgICBhbmFseXplLiBEZWZhdWx0cyB0byBhbGwgdGFi bGVzIGluIHRoZSBjdXJyZW50IGRhdGFiYXNlIGV4Y2VwdAohICAgICAgIGZvciBmb3JlaWdu IHRhYmxlcy4KICAgICAgIDwvcGFyYT4KICAgICAgPC9saXN0aXRlbT4KICAgICA8L3Zhcmxp c3RlbnRyeT4KKioqKioqKioqKioqKioqIEFOQUxZWkUgWyBWRVJCT1NFIF0gWyA8cmVwbGFj ZWFibGUgY2xhc3MKKioqIDEzNywxNDMgKioqKgogICAgIEluIHJhcmUgc2l0dWF0aW9ucywg dGhpcyBub24tZGV0ZXJtaW5pc20gd2lsbCBjYXVzZSB0aGUgcGxhbm5lcidzCiAgICAgY2hv aWNlcyBvZiBxdWVyeSBwbGFucyB0byBjaGFuZ2UgYWZ0ZXIgPGNvbW1hbmQ+QU5BTFlaRTwv Y29tbWFuZD4gaXMgcnVuLgogICAgIFRvIGF2b2lkIHRoaXMsIHJhaXNlIHRoZSBhbW91bnQg b2Ygc3RhdGlzdGljcyBjb2xsZWN0ZWQgYnkKISAgICA8Y29tbWFuZD5BTkFMWVpFPC9jb21t YW5kPiwgYXMgZGVzY3JpYmVkIGJlbG93LgogICAgPC9wYXJhPgogIAogICAgPHBhcmE+Ci0t LSAxNDAsMTQ4IC0tLS0KICAgICBJbiByYXJlIHNpdHVhdGlvbnMsIHRoaXMgbm9uLWRldGVy bWluaXNtIHdpbGwgY2F1c2UgdGhlIHBsYW5uZXIncwogICAgIGNob2ljZXMgb2YgcXVlcnkg cGxhbnMgdG8gY2hhbmdlIGFmdGVyIDxjb21tYW5kPkFOQUxZWkU8L2NvbW1hbmQ+IGlzIHJ1 bi4KICAgICBUbyBhdm9pZCB0aGlzLCByYWlzZSB0aGUgYW1vdW50IG9mIHN0YXRpc3RpY3Mg Y29sbGVjdGVkIGJ5CiEgICAgPGNvbW1hbmQ+QU5BTFlaRTwvY29tbWFuZD4sIGFzIGRlc2Ny aWJlZCBiZWxvdy4gIE5vdGUgdGhhdCB0aGUgdGltZQohICAgIG5lZWRlZCB0byBhbmFseXpl IG9uIGZvcmVpZ24gdGFibGVzIGRlcGVuZHMgb24gdGhlIGltcGxlbWVudGF0aW9uIG9mCiEg ICAgdGhlIGZvcmVpZ24gZGF0YSB3cmFwcGVyIHZpYSB3aGljaCBzdWNoIHRhYmxlcyBhcmUg YXR0YWNoZWQuCiAgICA8L3BhcmE+CiAgCiAgICA8cGFyYT4KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL2FuYWx5emUuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2FuYWx5 emUuYwppbmRleCA5Y2Q2ZTY3Li42YWM5YWVlIDEwMDY0NAoqKiogYS9zcmMvYmFja2VuZC9j b21tYW5kcy9hbmFseXplLmMKLS0tIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvYW5hbHl6ZS5j CioqKioqKioqKioqKioqKgoqKiogMjMsMjggKioqKgotLS0gMjMsMjkgLS0tLQogICNpbmNs dWRlICJhY2Nlc3MveGFjdC5oIgogICNpbmNsdWRlICJjYXRhbG9nL2luZGV4LmgiCiAgI2lu Y2x1ZGUgImNhdGFsb2cvaW5kZXhpbmcuaCIKKyAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFz cy5oIgogICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogICNpbmNsdWRlICJj YXRhbG9nL3BnX2luaGVyaXRzX2ZuLmgiCiAgI2luY2x1ZGUgImNhdGFsb2cvcGdfbmFtZXNw YWNlLmgiCioqKioqKioqKioqKioqKgoqKiogMzAsMzUgKioqKgotLS0gMzEsMzggLS0tLQog ICNpbmNsdWRlICJjb21tYW5kcy90YWJsZWNtZHMuaCIKICAjaW5jbHVkZSAiY29tbWFuZHMv dmFjdXVtLmgiCiAgI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCisgI2luY2x1ZGUg ImZvcmVpZ24vZm9yZWlnbi5oIgorICNpbmNsdWRlICJmb3JlaWduL2Zkd2FwaS5oIgogICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCiAg I2luY2x1ZGUgInBhcnNlci9wYXJzZV9vcGVyLmgiCioqKioqKioqKioqKioqKiB0eXBlZGVm IHN0cnVjdCBBbmxJbmRleERhdGEKKioqIDc4LDkxICoqKioKICBpbnQJCQlkZWZhdWx0X3N0 YXRpc3RpY3NfdGFyZ2V0ID0gMTAwOwogIAogIC8qIEEgZmV3IHZhcmlhYmxlcyB0aGF0IGRv bid0IHNlZW0gd29ydGggcGFzc2luZyBhcm91bmQgYXMgcGFyYW1ldGVycyAqLwotIHN0YXRp YyBpbnQJZWxldmVsID0gLTE7Ci0gCiAgc3RhdGljIE1lbW9yeUNvbnRleHQgYW5sX2NvbnRl eHQgPSBOVUxMOwogIAogIHN0YXRpYyBCdWZmZXJBY2Nlc3NTdHJhdGVneSB2YWNfc3RyYXRl Z3k7CiAgCiAgCi0gc3RhdGljIHZvaWQgZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVs LCBWYWN1dW1TdG10ICp2YWNzdG10LCBib29sIGluaCk7CiAgc3RhdGljIHZvaWQgQmxvY2tT YW1wbGVyX0luaXQoQmxvY2tTYW1wbGVyIGJzLCBCbG9ja051bWJlciBuYmxvY2tzLAogIAkJ CQkgIGludCBzYW1wbGVzaXplKTsKICBzdGF0aWMgYm9vbCBCbG9ja1NhbXBsZXJfSGFzTW9y ZShCbG9ja1NhbXBsZXIgYnMpOwotLS0gODEsOTEgLS0tLQoqKioqKioqKioqKioqKiogc3Rh dGljIHZvaWQgY29tcHV0ZV9pbmRleF9zdGF0cyhSZWxhdGlvbgoqKiogOTcsMTEwICoqKioK ICBzdGF0aWMgVmFjQXR0clN0YXRzICpleGFtaW5lX2F0dHJpYnV0ZShSZWxhdGlvbiBvbmVy ZWwsIGludCBhdHRudW0sCiAgCQkJCSAgTm9kZSAqaW5kZXhfZXhwcik7CiAgc3RhdGljIGlu dCBhY3F1aXJlX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJlbCwgSGVhcFR1cGxlICpyb3dz LAohIAkJCQkJaW50IHRhcmdyb3dzLCBkb3VibGUgKnRvdGFscm93cywgZG91YmxlICp0b3Rh bGRlYWRyb3dzKTsKISBzdGF0aWMgZG91YmxlIHJhbmRvbV9mcmFjdCh2b2lkKTsKISBzdGF0 aWMgZG91YmxlIGluaXRfc2VsZWN0aW9uX3N0YXRlKGludCBuKTsKISBzdGF0aWMgZG91Ymxl IGdldF9uZXh0X1MoZG91YmxlIHQsIGludCBuLCBkb3VibGUgKnN0YXRlcHRyKTsKICBzdGF0 aWMgaW50CWNvbXBhcmVfcm93cyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKTsKICBz dGF0aWMgaW50IGFjcXVpcmVfaW5oZXJpdGVkX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9uZXJl bCwKICAJCQkJCQkJICBIZWFwVHVwbGUgKnJvd3MsIGludCB0YXJncm93cywKISAJCQkJCQkJ ICBkb3VibGUgKnRvdGFscm93cywgZG91YmxlICp0b3RhbGRlYWRyb3dzKTsKICBzdGF0aWMg dm9pZCB1cGRhdGVfYXR0c3RhdHMoT2lkIHJlbGlkLCBib29sIGluaCwKICAJCQkJaW50IG5h dHRzLCBWYWNBdHRyU3RhdHMgKip2YWNhdHRyc3RhdHMpOwogIHN0YXRpYyBEYXR1bSBzdGRf ZmV0Y2hfZnVuYyhWYWNBdHRyU3RhdHNQIHN0YXRzLCBpbnQgcm93bnVtLCBib29sICppc051 bGwpOwotLS0gOTcsMTA5IC0tLS0KICBzdGF0aWMgVmFjQXR0clN0YXRzICpleGFtaW5lX2F0 dHJpYnV0ZShSZWxhdGlvbiBvbmVyZWwsIGludCBhdHRudW0sCiAgCQkJCSAgTm9kZSAqaW5k ZXhfZXhwcik7CiAgc3RhdGljIGludCBhY3F1aXJlX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG9u ZXJlbCwgSGVhcFR1cGxlICpyb3dzLAohIAkJCQkJaW50IHRhcmdyb3dzLCBkb3VibGUgKnRv dGFscm93cywgZG91YmxlICp0b3RhbGRlYWRyb3dzLAohIAkJCQkJQmxvY2tOdW1iZXIgKnRv dGFscGFnZXMsIGludCBlbGV2ZWwpOwogIHN0YXRpYyBpbnQJY29tcGFyZV9yb3dzKGNvbnN0 IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpOwogIHN0YXRpYyBpbnQgYWNxdWlyZV9pbmhlcml0 ZWRfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLAogIAkJCQkJCQkgIEhlYXBUdXBsZSAq cm93cywgaW50IHRhcmdyb3dzLAohIAkJCQkJCQkgIGRvdWJsZSAqdG90YWxyb3dzLCBkb3Vi bGUgKnRvdGFsZGVhZHJvd3MsCiEgCQkJCQkJCSAgQmxvY2tOdW1iZXIgKnRvdGFscGFnZXMs IGludCBlbGV2ZWwpOwogIHN0YXRpYyB2b2lkIHVwZGF0ZV9hdHRzdGF0cyhPaWQgcmVsaWQs IGJvb2wgaW5oLAogIAkJCQlpbnQgbmF0dHMsIFZhY0F0dHJTdGF0cyAqKnZhY2F0dHJzdGF0 cyk7CiAgc3RhdGljIERhdHVtIHN0ZF9mZXRjaF9mdW5jKFZhY0F0dHJTdGF0c1Agc3RhdHMs IGludCByb3dudW0sIGJvb2wgKmlzTnVsbCk7CioqKioqKioqKioqKioqKiB2b2lkCioqKiAx MTgsMTIzICoqKioKLS0tIDExNywxMjQgLS0tLQogIGFuYWx5emVfcmVsKE9pZCByZWxpZCwg VmFjdXVtU3RtdCAqdmFjc3RtdCwgQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KQog IHsKICAJUmVsYXRpb24Jb25lcmVsOworIAlpbnQJCQllbGV2ZWw7CisgCUZkd1JvdXRpbmUg KmZkd3JvdXRpbmU7CiAgCiAgCS8qIFNldCB1cCBzdGF0aWMgdmFyaWFibGVzICovCiAgCWlm ICh2YWNzdG10LT5vcHRpb25zICYgVkFDT1BUX1ZFUkJPU0UpCioqKioqKioqKioqKioqKiBh bmFseXplX3JlbChPaWQgcmVsaWQsIFZhY3V1bVN0bXQgKnZhY3N0CioqKiAxODIsMTkxICoq KioKICAJfQogIAogIAkvKgohIAkgKiBDaGVjayB0aGF0IGl0J3MgYSBwbGFpbiB0YWJsZTsg d2UgdXNlZCB0byBkbyB0aGlzIGluIGdldF9yZWxfb2lkcygpIGJ1dAohIAkgKiBzZWVtcyBz YWZlciB0byBjaGVjayBhZnRlciB3ZSd2ZSBsb2NrZWQgdGhlIHJlbGF0aW9uLgogIAkgKi8K ISAJaWYgKG9uZXJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUkVMQVRJT04pCiAg CXsKICAJCS8qIE5vIG5lZWQgZm9yIGEgV0FSTklORyBpZiB3ZSBhbHJlYWR5IGNvbXBsYWlu ZWQgZHVyaW5nIFZBQ1VVTSAqLwogIAkJaWYgKCEodmFjc3RtdC0+b3B0aW9ucyAmIFZBQ09Q VF9WQUNVVU0pKQotLS0gMTgzLDE5NCAtLS0tCiAgCX0KICAKICAJLyoKISAJICogQ2hlY2sg dGhhdCBpdCdzIGEgcGxhaW4gdGFibGUgb3IgZm9yZWlnbiB0YWJsZTsgd2UgdXNlZCB0byBk byB0aGlzCiEgCSAqIGluIGdldF9yZWxfb2lkcygpIGJ1dCBzZWVtcyBzYWZlciB0byBjaGVj ayBhZnRlciB3ZSd2ZSBsb2NrZWQgdGhlCiEgCSAqIHJlbGF0aW9uLgogIAkgKi8KISAJaWYg KG9uZXJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfUkVMQVRJT04gJiYKISAJCW9u ZXJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKICAJewog IAkJLyogTm8gbmVlZCBmb3IgYSBXQVJOSU5HIGlmIHdlIGFscmVhZHkgY29tcGxhaW5lZCBk dXJpbmcgVkFDVVVNICovCiAgCQlpZiAoISh2YWNzdG10LT5vcHRpb25zICYgVkFDT1BUX1ZB Q1VVTSkpCioqKioqKioqKioqKioqKiBhbmFseXplX3JlbChPaWQgcmVsaWQsIFZhY3V1bVN0 bXQgKnZhY3N0CioqKiAyMDksMjE1ICoqKioKICAJfQogIAogIAkvKgohIAkgKiBXZSBjYW4g QU5BTFlaRSBhbnkgdGFibGUgZXhjZXB0IHBnX3N0YXRpc3RpYy4gU2VlIHVwZGF0ZV9hdHRz dGF0cwogIAkgKi8KICAJaWYgKFJlbGF0aW9uR2V0UmVsaWQob25lcmVsKSA9PSBTdGF0aXN0 aWNSZWxhdGlvbklkKQogIAl7Ci0tLSAyMTIsMjIwIC0tLS0KICAJfQogIAogIAkvKgohIAkg KiBXZSBjYW4gQU5BTFlaRSBhbnkgdGFibGUgZXhjZXB0IHBnX3N0YXRpc3RpYy4gIFNlZSB1 cGRhdGVfYXR0c3RhdHMuCiEgCSAqIEluIGFkZGl0aW9uLCB3ZSBjYW4gQU5BTFlaRSBmb3Jl aWduIHRhYmxlcyBpZiBBbmFseXplRm9yZWlnblRhYmxlCiEgCSAqIGNhbGxiYWNrIHJvdXRp bmVzIG9mIHVuZGVybHlpbmcgZm9yZWlnbi1kYXRhIHdyYXBwZXJzIGFyZSBpbXBsZW1lbnRl ZC4KICAJICovCiAgCWlmIChSZWxhdGlvbkdldFJlbGlkKG9uZXJlbCkgPT0gU3RhdGlzdGlj UmVsYXRpb25JZCkKICAJewoqKioqKioqKioqKioqKiogYW5hbHl6ZV9yZWwoT2lkIHJlbGlk LCBWYWN1dW1TdG10ICp2YWNzdAoqKiogMjE3LDIyMiAqKioqCi0tLSAyMjIsMjQxIC0tLS0K ICAJCXJldHVybjsKICAJfQogIAorIAlpZiAob25lcmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0g UkVMS0lORF9GT1JFSUdOX1RBQkxFKQorIAl7CisgIAkJZmR3cm91dGluZSA9IEdldEZkd1Jv dXRpbmVCeVJlbElkKFJlbGF0aW9uR2V0UmVsaWQob25lcmVsKSk7CisgCisgCQlpZiAoZmR3 cm91dGluZS0+QW5hbHl6ZUZvcmVpZ25UYWJsZSA9PSBOVUxMKQorIAkJeworIAkJCWVyZXBv cnQoV0FSTklORywKKyAJCQkJCShlcnJtc2coInNraXBwaW5nIFwiJXNcIiAtLS0gdW5kZXJs eWluZyBmb3JlaWduLWRhdGEgd3JhcHBlciBjYW5ub3QgYW5hbHl6ZSBpdCIsCisgCQkJCQkJ CVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG9uZXJlbCkpKSk7CisgCQkJcmVsYXRpb25fY2xv c2Uob25lcmVsLCBTaGFyZVVwZGF0ZUV4Y2x1c2l2ZUxvY2spOworIAkJCXJldHVybjsKKyAJ CX0KKyAJfQorIAogIAkvKgogIAkgKiBPSywgbGV0J3MgZG8gaXQuICBGaXJzdCBsZXQgb3Ro ZXIgYmFja2VuZHMga25vdyBJJ20gaW4gQU5BTFlaRS4KICAJICovCioqKioqKioqKioqKioq KiBhbmFseXplX3JlbChPaWQgcmVsaWQsIFZhY3V1bVN0bXQgKnZhY3N0CioqKiAyMjQsMjM5 ICoqKioKICAJTXlQZ1hhY3QtPnZhY3V1bUZsYWdzIHw9IFBST0NfSU5fQU5BTFlaRTsKICAJ TFdMb2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKICAKISAJLyoKISAJICogRG8gdGhlIG5v cm1hbCBub24tcmVjdXJzaXZlIEFOQUxZWkUuCiEgCSAqLwohIAlkb19hbmFseXplX3JlbChv bmVyZWwsIHZhY3N0bXQsIGZhbHNlKTsKICAKISAJLyoKISAJICogSWYgdGhlcmUgYXJlIGNo aWxkIHRhYmxlcywgZG8gcmVjdXJzaXZlIEFOQUxZWkUuCiEgCSAqLwohIAlpZiAob25lcmVs LT5yZF9yZWwtPnJlbGhhc3N1YmNsYXNzKQohIAkJZG9fYW5hbHl6ZV9yZWwob25lcmVsLCB2 YWNzdG10LCB0cnVlKTsKICAKICAJLyoKICAJICogQ2xvc2Ugc291cmNlIHJlbGF0aW9uIG5v dywgYnV0IGtlZXAgbG9jayBzbyB0aGF0IG5vIG9uZSBkZWxldGVzIGl0Ci0tLSAyNDMsMjgw IC0tLS0KICAJTXlQZ1hhY3QtPnZhY3V1bUZsYWdzIHw9IFBST0NfSU5fQU5BTFlaRTsKICAJ TFdMb2NrUmVsZWFzZShQcm9jQXJyYXlMb2NrKTsKICAKISAJaWYgKG9uZXJlbC0+cmRfcmVs LT5yZWxraW5kID09IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkKISAJewohIAkJZXJlcG9ydChl bGV2ZWwsCiEgCQkJCShlcnJtc2coImFuYWx5emluZyBcIiVzLiVzXCIiLAohIAkJCQkJCWdl dF9uYW1lc3BhY2VfbmFtZShSZWxhdGlvbkdldE5hbWVzcGFjZShvbmVyZWwpKSwKISAJCQkJ CQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShvbmVyZWwpKSkpOwohIAkJZmR3cm91dGluZS0+ QW5hbHl6ZUZvcmVpZ25UYWJsZShvbmVyZWwsIHZhY3N0bXQsIGVsZXZlbCk7CiEgCX0KISAJ ZWxzZQohIAl7CiEgCQkvKgohIAkJICogRG8gdGhlIG5vcm1hbCBub24tcmVjdXJzaXZlIEFO QUxZWkUuCiEgCQkgKi8KISAJCWVyZXBvcnQoZWxldmVsLAohIAkJCQkoZXJybXNnKCJhbmFs eXppbmcgXCIlcy4lc1wiIiwKISAJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25H ZXROYW1lc3BhY2Uob25lcmVsKSksCiEgCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo b25lcmVsKSkpKTsKISAJCWRvX2FuYWx5emVfcmVsKG9uZXJlbCwgdmFjc3RtdCwgZWxldmVs LCBmYWxzZSwgYWNxdWlyZV9zYW1wbGVfcm93cyk7CiAgCiEgCQkvKgohIAkJICogSWYgdGhl cmUgYXJlIGNoaWxkIHRhYmxlcywgZG8gcmVjdXJzaXZlIEFOQUxZWkUuCiEgCQkgKi8KISAJ CWlmIChvbmVyZWwtPnJkX3JlbC0+cmVsaGFzc3ViY2xhc3MpCiEgCQl7CiEgCQkJZXJlcG9y dChlbGV2ZWwsCiEgCQkJCQkoZXJybXNnKCJhbmFseXppbmcgXCIlcy4lc1wiIGluaGVyaXRh bmNlIHRyZWUiLAohIAkJCQkJCQlnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXROYW1l c3BhY2Uob25lcmVsKSksCiEgCQkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG9uZXJl bCkpKSk7CiEgCQkJZG9fYW5hbHl6ZV9yZWwob25lcmVsLCB2YWNzdG10LCBlbGV2ZWwsIHRy dWUsCiEgCQkJCQkJICAgYWNxdWlyZV9pbmhlcml0ZWRfc2FtcGxlX3Jvd3MpOwohIAkJfQoh IAl9CiAgCiAgCS8qCiAgCSAqIENsb3NlIHNvdXJjZSByZWxhdGlvbiBub3csIGJ1dCBrZWVw IGxvY2sgc28gdGhhdCBubyBvbmUgZGVsZXRlcyBpdAoqKioqKioqKioqKioqKiogYW5hbHl6 ZV9yZWwoT2lkIHJlbGlkLCBWYWN1dW1TdG10ICp2YWNzdAoqKiogMjU1LDI2MiAqKioqCiAg LyoKICAgKglkb19hbmFseXplX3JlbCgpIC0tIGFuYWx5emUgb25lIHJlbGF0aW9uLCByZWN1 cnNpdmVseSBvciBub3QKICAgKi8KISBzdGF0aWMgdm9pZAohIGRvX2FuYWx5emVfcmVsKFJl bGF0aW9uIG9uZXJlbCwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgYm9vbCBpbmgpCiAgewogIAlp bnQJCQlhdHRyX2NudCwKICAJCQkJdGNudCwKLS0tIDI5NiwzMDQgLS0tLQogIC8qCiAgICoJ ZG9fYW5hbHl6ZV9yZWwoKSAtLSBhbmFseXplIG9uZSByZWxhdGlvbiwgcmVjdXJzaXZlbHkg b3Igbm90CiAgICovCiEgdm9pZAohIGRvX2FuYWx5emVfcmVsKFJlbGF0aW9uIG9uZXJlbCwg VmFjdXVtU3RtdCAqdmFjc3RtdCwgaW50IGVsZXZlbCwgCiEgCQkJICAgYm9vbCBpbmgsIFNh bXBsZVJvd0FjcXVpcmVGdW5jIGFjcXVpcmVmdW5jKQogIHsKICAJaW50CQkJYXR0cl9jbnQs CiAgCQkJCXRjbnQsCioqKioqKioqKioqKioqKiBkb19hbmFseXplX3JlbChSZWxhdGlvbiBv bmVyZWwsIFZhY3V1bVN0CioqKiAyNzEsMjc2ICoqKioKLS0tIDMxMywzMTkgLS0tLQogIAkJ CQludW1yb3dzOwogIAlkb3VibGUJCXRvdGFscm93cywKICAJCQkJdG90YWxkZWFkcm93czsK KyAJQmxvY2tOdW1iZXIgdG90YWxwYWdlczsKICAJSGVhcFR1cGxlICAqcm93czsKICAJUEdS VXNhZ2UJcnUwOwogIAlUaW1lc3RhbXBUeiBzdGFydHRpbWUgPSAwOwoqKioqKioqKioqKioq KiogZG9fYW5hbHl6ZV9yZWwoUmVsYXRpb24gb25lcmVsLCBWYWN1dW1TdAoqKiogMjc5LDI5 NSAqKioqCiAgCWludAkJCXNhdmVfc2VjX2NvbnRleHQ7CiAgCWludAkJCXNhdmVfbmVzdGxl dmVsOwogIAotIAlpZiAoaW5oKQotIAkJZXJlcG9ydChlbGV2ZWwsCi0gCQkJCShlcnJtc2co ImFuYWx5emluZyBcIiVzLiVzXCIgaW5oZXJpdGFuY2UgdHJlZSIsCi0gCQkJCQkJZ2V0X25h bWVzcGFjZV9uYW1lKFJlbGF0aW9uR2V0TmFtZXNwYWNlKG9uZXJlbCkpLAotIAkJCQkJCVJl bGF0aW9uR2V0UmVsYXRpb25OYW1lKG9uZXJlbCkpKSk7Ci0gCWVsc2UKLSAJCWVyZXBvcnQo ZWxldmVsLAotIAkJCQkoZXJybXNnKCJhbmFseXppbmcgXCIlcy4lc1wiIiwKLSAJCQkJCQln ZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXROYW1lc3BhY2Uob25lcmVsKSksCi0gCQkJ CQkJUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUob25lcmVsKSkpKTsKLSAKICAJLyoKICAJICog U2V0IHVwIGEgd29ya2luZyBjb250ZXh0IHNvIHRoYXQgd2UgY2FuIGVhc2lseSBmcmVlIHdo YXRldmVyIGp1bmsgZ2V0cwogIAkgKiBjcmVhdGVkLgotLS0gMzIyLDMyNyAtLS0tCioqKioq KioqKioqKioqKiBkb19hbmFseXplX3JlbChSZWxhdGlvbiBvbmVyZWwsIFZhY3V1bVN0Cioq KiA0NDcsNDU3ICoqKioKICAJICovCiAgCXJvd3MgPSAoSGVhcFR1cGxlICopIHBhbGxvYyh0 YXJncm93cyAqIHNpemVvZihIZWFwVHVwbGUpKTsKICAJaWYgKGluaCkKISAJCW51bXJvd3Mg PSBhY3F1aXJlX2luaGVyaXRlZF9zYW1wbGVfcm93cyhvbmVyZWwsIHJvd3MsIHRhcmdyb3dz LAohIAkJCQkJCQkJCQkJCSZ0b3RhbHJvd3MsICZ0b3RhbGRlYWRyb3dzKTsKICAJZWxzZQoh IAkJbnVtcm93cyA9IGFjcXVpcmVfc2FtcGxlX3Jvd3Mob25lcmVsLCByb3dzLCB0YXJncm93 cywKISAJCQkJCQkJCQkgICZ0b3RhbHJvd3MsICZ0b3RhbGRlYWRyb3dzKTsKICAKICAJLyoK ICAJICogQ29tcHV0ZSB0aGUgc3RhdGlzdGljcy4JVGVtcG9yYXJ5IHJlc3VsdHMgZHVyaW5n IHRoZSBjYWxjdWxhdGlvbnMgZm9yCi0tLSA0NzksNDkxIC0tLS0KICAJICovCiAgCXJvd3Mg PSAoSGVhcFR1cGxlICopIHBhbGxvYyh0YXJncm93cyAqIHNpemVvZihIZWFwVHVwbGUpKTsK ICAJaWYgKGluaCkKISAJCW51bXJvd3MgPSBhY3F1aXJlZnVuYyhvbmVyZWwsIHJvd3MsIHRh cmdyb3dzLAohIAkJCQkJCQkgICZ0b3RhbHJvd3MsICZ0b3RhbGRlYWRyb3dzLAohIAkJCQkJ CQkgIE5VTEwsIGVsZXZlbCk7CiAgCWVsc2UKISAJCW51bXJvd3MgPSBhY3F1aXJlZnVuYyhv bmVyZWwsIHJvd3MsIHRhcmdyb3dzLAohIAkJCQkJCQkgICZ0b3RhbHJvd3MsICZ0b3RhbGRl YWRyb3dzLAohIAkJCQkJCQkgICZ0b3RhbHBhZ2VzLCBlbGV2ZWwpOwogIAogIAkvKgogIAkg KiBDb21wdXRlIHRoZSBzdGF0aXN0aWNzLglUZW1wb3JhcnkgcmVzdWx0cyBkdXJpbmcgdGhl IGNhbGN1bGF0aW9ucyBmb3IKKioqKioqKioqKioqKioqIGRvX2FuYWx5emVfcmVsKFJlbGF0 aW9uIG9uZXJlbCwgVmFjdXVtU3QKKioqIDUzMiw1MzggKioqKgogIAkgKi8KICAJaWYgKCFp bmgpCiAgCQl2YWNfdXBkYXRlX3JlbHN0YXRzKG9uZXJlbCwKISAJCQkJCQkJUmVsYXRpb25H ZXROdW1iZXJPZkJsb2NrcyhvbmVyZWwpLAogIAkJCQkJCQl0b3RhbHJvd3MsCiAgCQkJCQkJ CXZpc2liaWxpdHltYXBfY291bnQob25lcmVsKSwKICAJCQkJCQkJaGFzaW5kZXgsCi0tLSA1 NjYsNTcyIC0tLS0KICAJICovCiAgCWlmICghaW5oKQogIAkJdmFjX3VwZGF0ZV9yZWxzdGF0 cyhvbmVyZWwsCiEgCQkJCQkJCXRvdGFscGFnZXMsCiAgCQkJCQkJCXRvdGFscm93cywKICAJ CQkJCQkJdmlzaWJpbGl0eW1hcF9jb3VudChvbmVyZWwpLAogIAkJCQkJCQloYXNpbmRleCwK KioqKioqKioqKioqKioqIEJsb2NrU2FtcGxlcl9OZXh0KEJsb2NrU2FtcGxlciBicykKKioq IDEwMTUsMTAyMSAqKioqCiAgICovCiAgc3RhdGljIGludAogIGFjcXVpcmVfc2FtcGxlX3Jv d3MoUmVsYXRpb24gb25lcmVsLCBIZWFwVHVwbGUgKnJvd3MsIGludCB0YXJncm93cywKISAJ CQkJCWRvdWJsZSAqdG90YWxyb3dzLCBkb3VibGUgKnRvdGFsZGVhZHJvd3MpCiAgewogIAlp bnQJCQludW1yb3dzID0gMDsJLyogIyByb3dzIG5vdyBpbiByZXNlcnZvaXIgKi8KICAJZG91 YmxlCQlzYW1wbGVyb3dzID0gMDsgLyogdG90YWwgIyByb3dzIGNvbGxlY3RlZCAqLwotLS0g MTA0OSwxMDU2IC0tLS0KICAgKi8KICBzdGF0aWMgaW50CiAgYWNxdWlyZV9zYW1wbGVfcm93 cyhSZWxhdGlvbiBvbmVyZWwsIEhlYXBUdXBsZSAqcm93cywgaW50IHRhcmdyb3dzLAohIAkJ CQkJZG91YmxlICp0b3RhbHJvd3MsIGRvdWJsZSAqdG90YWxkZWFkcm93cywKISAJCQkJCUJs b2NrTnVtYmVyICp0b3RhbHBhZ2VzLCBpbnQgZWxldmVsKQogIHsKICAJaW50CQkJbnVtcm93 cyA9IDA7CS8qICMgcm93cyBub3cgaW4gcmVzZXJ2b2lyICovCiAgCWRvdWJsZQkJc2FtcGxl cm93cyA9IDA7IC8qIHRvdGFsICMgcm93cyBjb2xsZWN0ZWQgKi8KKioqKioqKioqKioqKioq IGFjcXVpcmVfc2FtcGxlX3Jvd3MoUmVsYXRpb24gb25lcmVsLCBIZWEKKioqIDEwMzAsMTAz NSAqKioqCi0tLSAxMDY1LDEwNzIgLS0tLQogIAlBc3NlcnQodGFyZ3Jvd3MgPiAwKTsKICAK ICAJdG90YWxibG9ja3MgPSBSZWxhdGlvbkdldE51bWJlck9mQmxvY2tzKG9uZXJlbCk7Cisg CWlmICh0b3RhbHBhZ2VzKQorIAkJKnRvdGFscGFnZXMgPSB0b3RhbGJsb2NrczsKICAKICAJ LyogTmVlZCBhIGN1dG9mZiB4bWluIGZvciBIZWFwVHVwbGVTYXRpc2ZpZXNWYWN1dW0gKi8K ICAJT2xkZXN0WG1pbiA9IEdldE9sZGVzdFhtaW4ob25lcmVsLT5yZF9yZWwtPnJlbGlzc2hh cmVkLCB0cnVlKTsKKioqKioqKioqKioqKioqIGFjcXVpcmVfc2FtcGxlX3Jvd3MoUmVsYXRp b24gb25lcmVsLCBIZWEKKioqIDEyNTIsMTI1OCAqKioqCiAgfQogIAogIC8qIFNlbGVjdCBh IHJhbmRvbSB2YWx1ZSBSIHVuaWZvcm1seSBkaXN0cmlidXRlZCBpbiAoMCAtIDEpICovCiEg c3RhdGljIGRvdWJsZQogIHJhbmRvbV9mcmFjdCh2b2lkKQogIHsKICAJcmV0dXJuICgoZG91 YmxlKSByYW5kb20oKSArIDEpIC8gKChkb3VibGUpIE1BWF9SQU5ET01fVkFMVUUgKyAyKTsK LS0tIDEyODksMTI5NSAtLS0tCiAgfQogIAogIC8qIFNlbGVjdCBhIHJhbmRvbSB2YWx1ZSBS IHVuaWZvcm1seSBkaXN0cmlidXRlZCBpbiAoMCAtIDEpICovCiEgZG91YmxlCiAgcmFuZG9t X2ZyYWN0KHZvaWQpCiAgewogIAlyZXR1cm4gKChkb3VibGUpIHJhbmRvbSgpICsgMSkgLyAo KGRvdWJsZSkgTUFYX1JBTkRPTV9WQUxVRSArIDIpOwoqKioqKioqKioqKioqKiogcmFuZG9t X2ZyYWN0KHZvaWQpCioqKiAxMjcyLDEyODUgKioqKgogICAqIGRldGVybWluZXMgdGhlIG51 bWJlciBvZiByZWNvcmRzIHRvIHNraXAgYmVmb3JlIHRoZSBuZXh0IHJlY29yZCBpcwogICAq IHByb2Nlc3NlZC4KICAgKi8KISBzdGF0aWMgZG91YmxlCiAgaW5pdF9zZWxlY3Rpb25fc3Rh dGUoaW50IG4pCiAgewogIAkvKiBJbml0aWFsIHZhbHVlIG9mIFcgKGZvciB1c2Ugd2hlbiBB bGdvcml0aG0gWiBpcyBmaXJzdCBhcHBsaWVkKSAqLwogIAlyZXR1cm4gZXhwKC1sb2cocmFu ZG9tX2ZyYWN0KCkpIC8gbik7CiAgfQogIAohIHN0YXRpYyBkb3VibGUKICBnZXRfbmV4dF9T KGRvdWJsZSB0LCBpbnQgbiwgZG91YmxlICpzdGF0ZXB0cikKICB7CiAgCWRvdWJsZQkJUzsK LS0tIDEzMDksMTMyMiAtLS0tCiAgICogZGV0ZXJtaW5lcyB0aGUgbnVtYmVyIG9mIHJlY29y ZHMgdG8gc2tpcCBiZWZvcmUgdGhlIG5leHQgcmVjb3JkIGlzCiAgICogcHJvY2Vzc2VkLgog ICAqLwohIGRvdWJsZQogIGluaXRfc2VsZWN0aW9uX3N0YXRlKGludCBuKQogIHsKICAJLyog SW5pdGlhbCB2YWx1ZSBvZiBXIChmb3IgdXNlIHdoZW4gQWxnb3JpdGhtIFogaXMgZmlyc3Qg YXBwbGllZCkgKi8KICAJcmV0dXJuIGV4cCgtbG9nKHJhbmRvbV9mcmFjdCgpKSAvIG4pOwog IH0KICAKISBkb3VibGUKICBnZXRfbmV4dF9TKGRvdWJsZSB0LCBpbnQgbiwgZG91YmxlICpz dGF0ZXB0cikKICB7CiAgCWRvdWJsZQkJUzsKKioqKioqKioqKioqKioqIGNvbXBhcmVfcm93 cyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICoKKioqIDEzOTUsMTQwMSAqKioqCiAgICov CiAgc3RhdGljIGludAogIGFjcXVpcmVfaW5oZXJpdGVkX3NhbXBsZV9yb3dzKFJlbGF0aW9u IG9uZXJlbCwgSGVhcFR1cGxlICpyb3dzLCBpbnQgdGFyZ3Jvd3MsCiEgCQkJCQkJCSAgZG91 YmxlICp0b3RhbHJvd3MsIGRvdWJsZSAqdG90YWxkZWFkcm93cykKICB7CiAgCUxpc3QJICAg KnRhYmxlT0lEczsKICAJUmVsYXRpb24gICAqcmVsczsKLS0tIDE0MzIsMTQzOSAtLS0tCiAg ICovCiAgc3RhdGljIGludAogIGFjcXVpcmVfaW5oZXJpdGVkX3NhbXBsZV9yb3dzKFJlbGF0 aW9uIG9uZXJlbCwgSGVhcFR1cGxlICpyb3dzLCBpbnQgdGFyZ3Jvd3MsCiEgCQkJCQkJCSAg ZG91YmxlICp0b3RhbHJvd3MsIGRvdWJsZSAqdG90YWxkZWFkcm93cywKISAJCQkJCQkJICBC bG9ja051bWJlciAqdG90YWxwYWdlcywgaW50IGVsZXZlbCkKICB7CiAgCUxpc3QJICAgKnRh YmxlT0lEczsKICAJUmVsYXRpb24gICAqcmVsczsKKioqKioqKioqKioqKioqIGFjcXVpcmVf aW5oZXJpdGVkX3NhbXBsZV9yb3dzKFJlbGF0aW9uIG8KKioqIDE0NTgsMTQ2MyAqKioqCi0t LSAxNDk2LDE1MDMgLS0tLQogIAkJdG90YWxibG9ja3MgKz0gcmVsYmxvY2tzW25yZWxzXTsK ICAJCW5yZWxzKys7CiAgCX0KKyAJaWYgKHRvdGFscGFnZXMpCisgCSAgKnRvdGFscGFnZXMg PSB0b3RhbGJsb2NrczsKICAKICAJLyoKICAJICogTm93IHNhbXBsZSByb3dzIGZyb20gZWFj aCByZWxhdGlvbiwgcHJvcG9ydGlvbmFsbHkgdG8gaXRzIGZyYWN0aW9uIG9mCioqKioqKioq KioqKioqKiBhY3F1aXJlX2luaGVyaXRlZF9zYW1wbGVfcm93cyhSZWxhdGlvbiBvCioqKiAx NDkxLDE0OTcgKioqKgogIAkJCQkJCQkJCQkJCXJvd3MgKyBudW1yb3dzLAogIAkJCQkJCQkJ CQkJCWNoaWxkdGFyZ3Jvd3MsCiAgCQkJCQkJCQkJCQkJJnRyb3dzLAohIAkJCQkJCQkJCQkJ CSZ0ZHJvd3MpOwogIAogIAkJCQkvKiBXZSBtYXkgbmVlZCB0byBjb252ZXJ0IGZyb20gY2hp bGQncyByb3d0eXBlIHRvIHBhcmVudCdzICovCiAgCQkJCWlmIChjaGlsZHJvd3MgPiAwICYm Ci0tLSAxNTMxLDE1MzkgLS0tLQogIAkJCQkJCQkJCQkJCXJvd3MgKyBudW1yb3dzLAogIAkJ CQkJCQkJCQkJCWNoaWxkdGFyZ3Jvd3MsCiAgCQkJCQkJCQkJCQkJJnRyb3dzLAohIAkJCQkJ CQkJCQkJCSZ0ZHJvd3MsCiEgCQkJCQkJCQkJCQkJTlVMTCwKISAJCQkJCQkJCQkJCQllbGV2 ZWwpOwogIAogIAkJCQkvKiBXZSBtYXkgbmVlZCB0byBjb252ZXJ0IGZyb20gY2hpbGQncyBy b3d0eXBlIHRvIHBhcmVudCdzICovCiAgCQkJCWlmIChjaGlsZHJvd3MgPiAwICYmCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCmluZGV4IDk4NTM2ODYuLjMwMzE0OTYgMTAwNjQ0Cioq KiBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3RhYmxlY21kcy5jCi0tLSBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RhYmxlY21kcy5jCioqKioqKioqKioqKioqKiBzdGF0aWMgdm9pZCBBVFBy ZXBTZXRTdGF0aXN0aWNzKFJlbGF0aW9uCioqKiAzMjAsMzI1ICoqKioKLS0tIDMyMCwzMjcg LS0tLQogIAkJCQkJTm9kZSAqbmV3VmFsdWUsIExPQ0tNT0RFIGxvY2ttb2RlKTsKICBzdGF0 aWMgdm9pZCBBVEV4ZWNTZXRTdGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAq Y29sTmFtZSwKICAJCQkJCU5vZGUgKm5ld1ZhbHVlLCBMT0NLTU9ERSBsb2NrbW9kZSk7Cisg c3RhdGljIHZvaWQgQVRQcmVwU2V0T3B0aW9ucyhSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIg KmNvbE5hbWUsCisgCQkJCSBOb2RlICpvcHRpb25zLCBMT0NLTU9ERSBsb2NrbW9kZSk7CiAg c3RhdGljIHZvaWQgQVRFeGVjU2V0T3B0aW9ucyhSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIg KmNvbE5hbWUsCiAgCQkJCSBOb2RlICpvcHRpb25zLCBib29sIGlzUmVzZXQsIExPQ0tNT0RF IGxvY2ttb2RlKTsKICBzdGF0aWMgdm9pZCBBVEV4ZWNTZXRTdG9yYWdlKFJlbGF0aW9uIHJl bCwgY29uc3QgY2hhciAqY29sTmFtZSwKKioqKioqKioqKioqKioqIEFUUHJlcENtZChMaXN0 ICoqd3F1ZXVlLCBSZWxhdGlvbiByZWwsIEEKKioqIDMwMjEsMzAyNyAqKioqCiAgCQkJYnJl YWs7CiAgCQljYXNlIEFUX1NldE9wdGlvbnM6CQkvKiBBTFRFUiBDT0xVTU4gU0VUICggb3B0 aW9ucyApICovCiAgCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoJLyogQUxURVIgQ09MVU1OIFJF U0VUICggb3B0aW9ucyApICovCiEgCQkJQVRTaW1wbGVQZXJtaXNzaW9ucyhyZWwsIEFUVF9U QUJMRSB8IEFUVF9JTkRFWCk7CiAgCQkJLyogVGhpcyBjb21tYW5kIG5ldmVyIHJlY3Vyc2Vz ICovCiAgCQkJcGFzcyA9IEFUX1BBU1NfTUlTQzsKICAJCQlicmVhazsKLS0tIDMwMjMsMzAz MCAtLS0tCiAgCQkJYnJlYWs7CiAgCQljYXNlIEFUX1NldE9wdGlvbnM6CQkvKiBBTFRFUiBD T0xVTU4gU0VUICggb3B0aW9ucyApICovCiAgCQljYXNlIEFUX1Jlc2V0T3B0aW9uczoJLyog QUxURVIgQ09MVU1OIFJFU0VUICggb3B0aW9ucyApICovCiEgCQkJQVRTaW1wbGVQZXJtaXNz aW9ucyhyZWwsIEFUVF9UQUJMRSB8IEFUVF9JTkRFWCB8IEFUVF9GT1JFSUdOX1RBQkxFKTsK ISAJCQlBVFByZXBTZXRPcHRpb25zKHJlbCwgY21kLT5uYW1lLCBjbWQtPmRlZiwgbG9ja21v ZGUpOwogIAkJCS8qIFRoaXMgY29tbWFuZCBuZXZlciByZWN1cnNlcyAqLwogIAkJCXBhc3Mg PSBBVF9QQVNTX01JU0M7CiAgCQkJYnJlYWs7CioqKioqKioqKioqKioqKiBBVFByZXBTZXRT dGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwgY29uc3QgCioqKiA0OTk5LDUwMDggKioqKgogIAkg KiBhbGxvd1N5c3RlbVRhYmxlTW9kcyB0byBiZSB0dXJuZWQgb24uCiAgCSAqLwogIAlpZiAo cmVsLT5yZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9SRUxBVElPTiAmJgohIAkJcmVsLT5y ZF9yZWwtPnJlbGtpbmQgIT0gUkVMS0lORF9JTkRFWCkKICAJCWVyZXBvcnQoRVJST1IsCiAg CQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNUX1RZUEUpLAohIAkJCQkgZXJybXNn KCJcIiVzXCIgaXMgbm90IGEgdGFibGUgb3IgaW5kZXgiLAogIAkJCQkJCVJlbGF0aW9uR2V0 UmVsYXRpb25OYW1lKHJlbCkpKSk7CiAgCiAgCS8qIFBlcm1pc3Npb25zIGNoZWNrcyAqLwot LS0gNTAwMiw1MDEyIC0tLS0KICAJICogYWxsb3dTeXN0ZW1UYWJsZU1vZHMgdG8gYmUgdHVy bmVkIG9uLgogIAkgKi8KICAJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRf UkVMQVRJT04gJiYKISAJCXJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfSU5ERVgg JiYKISAJCXJlbC0+cmRfcmVsLT5yZWxraW5kICE9IFJFTEtJTkRfRk9SRUlHTl9UQUJMRSkK ICAJCWVyZXBvcnQoRVJST1IsCiAgCQkJCShlcnJjb2RlKEVSUkNPREVfV1JPTkdfT0JKRUNU X1RZUEUpLAohIAkJCQkgZXJybXNnKCJcIiVzXCIgaXMgbm90IGEgdGFibGUsIGluZGV4IG9y IGZvcmVpZ24gdGFibGUiLAogIAkJCQkJCVJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbCkp KSk7CiAgCiAgCS8qIFBlcm1pc3Npb25zIGNoZWNrcyAqLwoqKioqKioqKioqKioqKiogQVRF eGVjU2V0U3RhdGlzdGljcyhSZWxhdGlvbiByZWwsIGNvbnN0IAoqKiogNTA3MSw1MDc2ICoq KioKLS0tIDUwNzUsNTEwMCAtLS0tCiAgfQogIAogIHN0YXRpYyB2b2lkCisgQVRQcmVwU2V0 T3B0aW9ucyhSZWxhdGlvbiByZWwsIGNvbnN0IGNoYXIgKmNvbE5hbWUsIE5vZGUgKm9wdGlv bnMsCisgCQkJCSBMT0NLTU9ERSBsb2NrbW9kZSkKKyB7CisgCWlmIChyZWwtPnJkX3JlbC0+ cmVsa2luZCA9PSBSRUxLSU5EX0ZPUkVJR05fVEFCTEUpCisgCXsKKyAJCUxpc3RDZWxsICAg KmNlbGw7CisgCisgCQlmb3JlYWNoKGNlbGwsIChMaXN0ICopIG9wdGlvbnMpCisgCQl7Cisg CQkJRGVmRWxlbSAgICAqZGVmID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworIAorIAkJ CWlmIChwZ19zdHJjYXNlY21wKGRlZi0+ZGVmbmFtZSwgIm5fZGlzdGluY3RfaW5oZXJpdGVk IikgPT0gMCkKKyAJCQkJZXJlcG9ydChFUlJPUiwKKyAJCQkJCQkoZXJyY29kZShFUlJDT0RF X0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisgCQkJCQkJIGVycm1zZygiY2Fubm90IHNldCBc Im5fZGlzdGluY3RfaW5oZXJpdGVkXCIgZm9yIGZvcmVpZ24gdGFibGVzIikpKTsKKyAJCX0K KyAJfQorIH0KKyAKKyBzdGF0aWMgdm9pZAogIEFURXhlY1NldE9wdGlvbnMoUmVsYXRpb24g cmVsLCBjb25zdCBjaGFyICpjb2xOYW1lLCBOb2RlICpvcHRpb25zLAogIAkJCQkgYm9vbCBp c1Jlc2V0LCBMT0NLTU9ERSBsb2NrbW9kZSkKICB7CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bz cWwvZGVzY3JpYmUuYyBiL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCmluZGV4IGRjMjI0OGIu LmIzZDIwNzggMTAwNjQ0CioqKiBhL3NyYy9iaW4vcHNxbC9kZXNjcmliZS5jCi0tLSBiL3Ny Yy9iaW4vcHNxbC9kZXNjcmliZS5jCioqKioqKioqKioqKioqKiBkZXNjcmliZU9uZVRhYmxl RGV0YWlscyhjb25zdCBjaGFyICpzY2hlCioqKiAxMTA0LDExMTAgKioqKgogIAlib29sCQlw cmludFRhYmxlSW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAJaW50CQkJaTsKICAJY2hhcgkgICAq dmlld19kZWYgPSBOVUxMOwohIAljaGFyCSAgICpoZWFkZXJzWzZdOwogIAljaGFyCSAgKipz ZXFfdmFsdWVzID0gTlVMTDsKICAJY2hhcgkgICoqbW9kaWZpZXJzID0gTlVMTDsKICAJY2hh cgkgICoqcHRyOwotLS0gMTEwNCwxMTEwIC0tLS0KICAJYm9vbAkJcHJpbnRUYWJsZUluaXRp YWxpemVkID0gZmFsc2U7CiAgCWludAkJCWk7CiAgCWNoYXIJICAgKnZpZXdfZGVmID0gTlVM TDsKISAJY2hhcgkgICAqaGVhZGVyc1s3XTsKICAJY2hhcgkgICoqc2VxX3ZhbHVlcyA9IE5V TEw7CiAgCWNoYXIJICAqKm1vZGlmaWVycyA9IE5VTEw7CiAgCWNoYXIJICAqKnB0cjsKKioq KioqKioqKioqKioqIGRlc2NyaWJlT25lVGFibGVEZXRhaWxzKGNvbnN0IGNoYXIgKnNjaGUK KioqIDEzOTUsMTQwMSAqKioqCiAgCWlmICh2ZXJib3NlKQogIAl7CiAgCQloZWFkZXJzW2Nv bHMrK10gPSBnZXR0ZXh0X25vb3AoIlN0b3JhZ2UiKTsKISAJCWlmICh0YWJsZWluZm8ucmVs a2luZCA9PSAncicpCiAgCQkJaGVhZGVyc1tjb2xzKytdID0gZ2V0dGV4dF9ub29wKCJTdGF0 cyB0YXJnZXQiKTsKICAJCS8qIENvbHVtbiBjb21tZW50cywgaWYgdGhlIHJlbGtpbmQgc3Vw cG9ydHMgdGhpcyBmZWF0dXJlLiAqLwogIAkJaWYgKHRhYmxlaW5mby5yZWxraW5kID09ICdy JyB8fCB0YWJsZWluZm8ucmVsa2luZCA9PSAndicgfHwKLS0tIDEzOTUsMTQwMSAtLS0tCiAg CWlmICh2ZXJib3NlKQogIAl7CiAgCQloZWFkZXJzW2NvbHMrK10gPSBnZXR0ZXh0X25vb3Ao IlN0b3JhZ2UiKTsKISAJCWlmICh0YWJsZWluZm8ucmVsa2luZCA9PSAncicgfHwgdGFibGVp bmZvLnJlbGtpbmQgPT0gJ2YnKQogIAkJCWhlYWRlcnNbY29scysrXSA9IGdldHRleHRfbm9v cCgiU3RhdHMgdGFyZ2V0Iik7CiAgCQkvKiBDb2x1bW4gY29tbWVudHMsIGlmIHRoZSByZWxr aW5kIHN1cHBvcnRzIHRoaXMgZmVhdHVyZS4gKi8KICAJCWlmICh0YWJsZWluZm8ucmVsa2lu ZCA9PSAncicgfHwgdGFibGVpbmZvLnJlbGtpbmQgPT0gJ3YnIHx8CioqKioqKioqKioqKioq KiBkZXNjcmliZU9uZVRhYmxlRGV0YWlscyhjb25zdCBjaGFyICpzY2hlCioqKiAxNDk4LDE1 MDQgKioqKgogIAkJCQkJCQkgIGZhbHNlLCBmYWxzZSk7CiAgCiAgCQkJLyogU3RhdGlzdGlj cyB0YXJnZXQsIGlmIHRoZSByZWxraW5kIHN1cHBvcnRzIHRoaXMgZmVhdHVyZSAqLwohIAkJ CWlmICh0YWJsZWluZm8ucmVsa2luZCA9PSAncicpCiAgCQkJewogIAkJCQlwcmludFRhYmxl QWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1ZShyZXMsIGksIGZpcnN0dmNvbCArIDEpLAogIAkJ CQkJCQkJICBmYWxzZSwgZmFsc2UpOwotLS0gMTQ5OCwxNTA0IC0tLS0KICAJCQkJCQkJICBm YWxzZSwgZmFsc2UpOwogIAogIAkJCS8qIFN0YXRpc3RpY3MgdGFyZ2V0LCBpZiB0aGUgcmVs a2luZCBzdXBwb3J0cyB0aGlzIGZlYXR1cmUgKi8KISAJCQlpZiAodGFibGVpbmZvLnJlbGtp bmQgPT0gJ3InIHx8IHRhYmxlaW5mby5yZWxraW5kID09ICdmJykKICAJCQl7CiAgCQkJCXBy aW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgZmlyc3R2Y29sICsg MSksCiAgCQkJCQkJCQkgIGZhbHNlLCBmYWxzZSk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bz cWwvdGFiLWNvbXBsZXRlLmMgYi9zcmMvYmluL3BzcWwvdGFiLWNvbXBsZXRlLmMKaW5kZXgg OTc1ZDY1NS4uZDExM2FkZiAxMDA2NDQKKioqIGEvc3JjL2Jpbi9wc3FsL3RhYi1jb21wbGV0 ZS5jCi0tLSBiL3NyYy9iaW4vcHNxbC90YWItY29tcGxldGUuYwoqKioqKioqKioqKioqKiog c3RhdGljIGNvbnN0IFNjaGVtYVF1ZXJ5IFF1ZXJ5X2Zvcl9saXN0XwoqKiogNDA5LDQxNCAq KioqCi0tLSA0MDksNDI5IC0tLS0KICAJTlVMTAogIH07CiAgCisgc3RhdGljIGNvbnN0IFNj aGVtYVF1ZXJ5IFF1ZXJ5X2Zvcl9saXN0X29mX3RmID0geworIAkvKiBjYXRuYW1lICovCisg CSJwZ19jYXRhbG9nLnBnX2NsYXNzIGMiLAorIAkvKiBzZWxjb25kaXRpb24gKi8KKyAJImMu cmVsa2luZCBJTiAoJ3InLCAnZicpIiwKKyAJLyogdmlzY29uZGl0aW9uICovCisgCSJwZ19j YXRhbG9nLnBnX3RhYmxlX2lzX3Zpc2libGUoYy5vaWQpIiwKKyAJLyogbmFtZXNwYWNlICov CisgCSJjLnJlbG5hbWVzcGFjZSIsCisgCS8qIHJlc3VsdCAqLworIAkicGdfY2F0YWxvZy5x dW90ZV9pZGVudChjLnJlbG5hbWUpIiwKKyAJLyogcXVhbHJlc3VsdCAqLworIAlOVUxMCisg fTsKKyAKICBzdGF0aWMgY29uc3QgU2NoZW1hUXVlcnkgUXVlcnlfZm9yX2xpc3Rfb2Zfdmll d3MgPSB7CiAgCS8qIGNhdG5hbWUgKi8KICAJInBnX2NhdGFsb2cucGdfY2xhc3MgYyIsCioq KioqKioqKioqKioqKiBwc3FsX2NvbXBsZXRpb24oY2hhciAqdGV4dCwgaW50IHN0YXJ0LCBp CioqKiAyODMzLDI4MzkgKioqKgogIC8qIEFOQUxZWkUgKi8KICAJLyogSWYgdGhlIHByZXZp b3VzIHdvcmQgaXMgQU5BTFlaRSwgcHJvZHVjZSBsaXN0IG9mIHRhYmxlcyAqLwogIAllbHNl IGlmIChwZ19zdHJjYXNlY21wKHByZXZfd2QsICJBTkFMWVpFIikgPT0gMCkKISAJCUNPTVBM RVRFX1dJVEhfU0NIRU1BX1FVRVJZKFF1ZXJ5X2Zvcl9saXN0X29mX3RhYmxlcywgTlVMTCk7 CiAgCiAgLyogV0hFUkUgKi8KICAJLyogU2ltcGxlIGNhc2Ugb2YgdGhlIHdvcmQgYmVmb3Jl IHRoZSB3aGVyZSBiZWluZyB0aGUgdGFibGUgbmFtZSAqLwotLS0gMjg0OCwyODU0IC0tLS0K ICAvKiBBTkFMWVpFICovCiAgCS8qIElmIHRoZSBwcmV2aW91cyB3b3JkIGlzIEFOQUxZWkUs IHByb2R1Y2UgbGlzdCBvZiB0YWJsZXMgKi8KICAJZWxzZSBpZiAocGdfc3RyY2FzZWNtcChw cmV2X3dkLCAiQU5BTFlaRSIpID09IDApCiEgCQlDT01QTEVURV9XSVRIX1NDSEVNQV9RVUVS WShRdWVyeV9mb3JfbGlzdF9vZl90ZiwgTlVMTCk7CiAgCiAgLyogV0hFUkUgKi8KICAJLyog U2ltcGxlIGNhc2Ugb2YgdGhlIHdvcmQgYmVmb3JlIHRoZSB3aGVyZSBiZWluZyB0aGUgdGFi bGUgbmFtZSAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvdmFjdXVtLmgg Yi9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAppbmRleCAzZGVlZTY2Li4zZTg5ZTgy IDEwMDY0NAoqKiogYS9zcmMvaW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAotLS0gYi9zcmMv aW5jbHVkZS9jb21tYW5kcy92YWN1dW0uaAoqKioqKioqKioqKioqKiogZXh0ZXJuIHZvaWQg bGF6eV92YWN1dW1fcmVsKFJlbGF0aW9uIG9uZQoqKiogMTcwLDE3NCAqKioqCi0tLSAxNzAs MTgzIC0tLS0KICBleHRlcm4gdm9pZCBhbmFseXplX3JlbChPaWQgcmVsaWQsIFZhY3V1bVN0 bXQgKnZhY3N0bXQsCiAgCQkJQnVmZmVyQWNjZXNzU3RyYXRlZ3kgYnN0cmF0ZWd5KTsKICBl eHRlcm4gYm9vbCBzdGRfdHlwYW5hbHl6ZShWYWNBdHRyU3RhdHMgKnN0YXRzKTsKKyB0eXBl ZGVmIGludCAoKlNhbXBsZVJvd0FjcXVpcmVGdW5jKSAoUmVsYXRpb24gb25lcmVsLCBIZWFw VHVwbGUgKnJvd3MsCisgCQkJCQkJCQkJIGludCB0YXJncm93cywgZG91YmxlICp0b3RhbHJv d3MsCisgCQkJCQkJCQkJIGRvdWJsZSAqdG90YWxkZWFkcm93cywKKyAJCQkJCQkJCQkgQmxv Y2tOdW1iZXIgKnRvdGFscGFnZXMsIGludCBlbGV2ZWwpOworIGV4dGVybiB2b2lkIGRvX2Fu YWx5emVfcmVsKFJlbGF0aW9uIG9uZXJlbCwgVmFjdXVtU3RtdCAqdmFjc3RtdCwgaW50IGVs ZXZlbCwKKyAJCQkJCQkgICBib29sIGluaCwgU2FtcGxlUm93QWNxdWlyZUZ1bmMgYWNxdWly ZWZ1bmMpOworIGV4dGVybiBkb3VibGUgcmFuZG9tX2ZyYWN0KHZvaWQpOworIGV4dGVybiBk b3VibGUgaW5pdF9zZWxlY3Rpb25fc3RhdGUoaW50IG4pOworIGV4dGVybiBkb3VibGUgZ2V0 X25leHRfUyhkb3VibGUgdCwgaW50IG4sIGRvdWJsZSAqc3RhdGVwdHIpOwogIAogICNlbmRp ZiAgIC8qIFZBQ1VVTV9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9mb3JlaWduL2Zk d2FwaS5oIGIvc3JjL2luY2x1ZGUvZm9yZWlnbi9mZHdhcGkuaAppbmRleCA4NTRmMTc3Li5k NzE4MWM3IDEwMDY0NAoqKiogYS9zcmMvaW5jbHVkZS9mb3JlaWduL2Zkd2FwaS5oCi0tLSBi L3NyYy9pbmNsdWRlL2ZvcmVpZ24vZmR3YXBpLmgKKioqKioqKioqKioqKioqCioqKiAxMiwx OSAqKioqCi0tLSAxMiwyMSAtLS0tCiAgI2lmbmRlZiBGRFdBUElfSAogICNkZWZpbmUgRkRX QVBJX0gKICAKKyAjaW5jbHVkZSAiZm9yZWlnbi9mb3JlaWduLmgiCiAgI2luY2x1ZGUgIm5v ZGVzL2V4ZWNub2Rlcy5oIgogICNpbmNsdWRlICJub2Rlcy9yZWxhdGlvbi5oIgorICNpbmNs dWRlICJ1dGlscy9yZWwuaCIKICAKICAvKiBUbyBhdm9pZCBpbmNsdWRpbmcgZXhwbGFpbi5o IGhlcmUsIHJlZmVyZW5jZSBFeHBsYWluU3RhdGUgdGh1czogKi8KICBzdHJ1Y3QgRXhwbGFp blN0YXRlOwoqKioqKioqKioqKioqKiogdHlwZWRlZiB2b2lkICgqUmVTY2FuRm9yZWlnblNj YW5fZnVuY3RpbwoqKiogNTAsNTUgKioqKgotLS0gNTIsNjAgLS0tLQogIAogIHR5cGVkZWYg dm9pZCAoKkVuZEZvcmVpZ25TY2FuX2Z1bmN0aW9uKSAoRm9yZWlnblNjYW5TdGF0ZSAqbm9k ZSk7CiAgCisgdHlwZWRlZiB2b2lkICgqQW5hbHl6ZUZvcmVpZ25UYWJsZV9mdW5jdGlvbikg KFJlbGF0aW9uIHJlbGF0aW9uLAorIAkJCQkJCQkJCQkJICBWYWN1dW1TdG10ICp2YWNzdG10 LAorIAkJCQkJCQkJCQkJICBpbnQgZWxldmVsKTsKICAKICAvKgogICAqIEZkd1JvdXRpbmUg aXMgdGhlIHN0cnVjdCByZXR1cm5lZCBieSBhIGZvcmVpZ24tZGF0YSB3cmFwcGVyJ3MgaGFu ZGxlcgoqKioqKioqKioqKioqKiogdHlwZWRlZiBzdHJ1Y3QgRmR3Um91dGluZQoqKiogNjQs NjkgKioqKgotLS0gNjksNzggLS0tLQogIHsKICAJTm9kZVRhZwkJdHlwZTsKICAKKyAJLyoK KyAJICogVGhlc2UgaGFuZGxlcnMgYXJlIHJlcXVpcmVkIHRvIGV4ZWN1dGUgYSBzY2FuIG9u IGEgZm9yZWlnbiB0YWJsZS4gIElmCisgCSAqIGFueSBvZiB0aGVtIHdhcyBOVUxMLCBzY2Fu cyBvbiBhIGZvcmVpZ24gdGFibGUgbWFuYWdlZCBieSBzdWNoIEZEVyBmYWlsLgorIAkgKi8K ICAJR2V0Rm9yZWlnblJlbFNpemVfZnVuY3Rpb24gR2V0Rm9yZWlnblJlbFNpemU7CiAgCUdl dEZvcmVpZ25QYXRoc19mdW5jdGlvbiBHZXRGb3JlaWduUGF0aHM7CiAgCUdldEZvcmVpZ25Q bGFuX2Z1bmN0aW9uIEdldEZvcmVpZ25QbGFuOwoqKioqKioqKioqKioqKiogdHlwZWRlZiBz dHJ1Y3QgRmR3Um91dGluZQoqKiogNzIsNzcgKioqKgotLS0gODEsOTIgLS0tLQogIAlJdGVy YXRlRm9yZWlnblNjYW5fZnVuY3Rpb24gSXRlcmF0ZUZvcmVpZ25TY2FuOwogIAlSZVNjYW5G b3JlaWduU2Nhbl9mdW5jdGlvbiBSZVNjYW5Gb3JlaWduU2NhbjsKICAJRW5kRm9yZWlnblNj YW5fZnVuY3Rpb24gRW5kRm9yZWlnblNjYW47CisgCisgCS8qCisgCSAqIEhhbmRsZXJzIGJl bG93IGFyZSBvcHRpb25hbC4gIFlvdSBjYW4gc2V0IGFueSBvZiB0aGVtIHRvIE5VTEwgdG8g dGVsbAorIAkgKiBQb3N0Z3JlU1FMIGJhY2tlbmQgdGhhdCB0aGUgRkRXIGRvZXNuJ3QgaGF2 ZSB0aGUgY2FwYWJpbGl0eS4KKyAJICovCisgCUFuYWx5emVGb3JlaWduVGFibGVfZnVuY3Rp b24gQW5hbHl6ZUZvcmVpZ25UYWJsZTsKICB9IEZkd1JvdXRpbmU7CiAgCiAgCmRpZmYgLS1n aXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fZGF0YS5vdXQgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ZvcmVpZ25fZGF0YS5vdXQKaW5kZXggYmE4Njg4My4u ZjEzNzlhNiAxMDA2NDQKKioqIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9mb3JlaWdu X2RhdGEub3V0Ci0tLSBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvZm9yZWlnbl9kYXRh Lm91dAoqKioqKioqKioqKioqKiogQ1JFQVRFIEZPUkVJR04gVEFCTEUgZnQxICgKKioqIDY3 OSw2OTAgKioqKgogIENPTU1FTlQgT04gRk9SRUlHTiBUQUJMRSBmdDEgSVMgJ2Z0MSc7CiAg Q09NTUVOVCBPTiBDT0xVTU4gZnQxLmMxIElTICdmdDEuYzEnOwogIFxkKyBmdDEKISAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZWlnbiB0YWJsZSAicHVibGljLmZ0MSIK ISAgQ29sdW1uIHwgIFR5cGUgICB8IE1vZGlmaWVycyB8ICAgICAgICAgIEZEVyBPcHRpb25z ICAgICAgICAgICB8IFN0b3JhZ2UgIHwgRGVzY3JpcHRpb24gCiEgLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLQohICBjMSAgICAgfCBpbnRlZ2VyIHwgbm90IG51bGwgIHwg KCJwYXJhbSAxIiAndmFsMScpICAgICAgICAgICAgIHwgcGxhaW4gICAgfCBmdDEuYzEKISAg YzIgICAgIHwgdGV4dCAgICB8ICAgICAgICAgICB8IChwYXJhbTIgJ3ZhbDInLCBwYXJhbTMg J3ZhbDMnKSB8IGV4dGVuZGVkIHwgCiEgIGMzICAgICB8IGRhdGUgICAgfCAgICAgICAgICAg fCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFpbiAgICB8IAogIFNlcnZl cjogczAKICBGRFcgT3B0aW9uczogKGRlbGltaXRlciAnLCcsIHF1b3RlICciJywgImJlIHF1 b3RlZCIgJ3ZhbHVlJykKICBIYXMgT0lEczogbm8KLS0tIDY3OSw2OTAgLS0tLQogIENPTU1F TlQgT04gRk9SRUlHTiBUQUJMRSBmdDEgSVMgJ2Z0MSc7CiAgQ09NTUVOVCBPTiBDT0xVTU4g ZnQxLmMxIElTICdmdDEuYzEnOwogIFxkKyBmdDEKISAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEZvcmVpZ24gdGFibGUgInB1YmxpYy5mdDEiCiEgIENvbHVtbiB8 ICBUeXBlICAgfCBNb2RpZmllcnMgfCAgICAgICAgICBGRFcgT3B0aW9ucyAgICAgICAgICAg fCBTdG9yYWdlICB8IFN0YXRzIHRhcmdldCB8IERlc2NyaXB0aW9uIAohIC0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KISAgYzEgICAgIHwgaW50 ZWdlciB8IG5vdCBudWxsICB8ICgicGFyYW0gMSIgJ3ZhbDEnKSAgICAgICAgICAgICB8IHBs YWluICAgIHwgICAgICAgICAgICAgIHwgZnQxLmMxCiEgIGMyICAgICB8IHRleHQgICAgfCAg ICAgICAgICAgfCAocGFyYW0yICd2YWwyJywgcGFyYW0zICd2YWwzJykgfCBleHRlbmRlZCB8 ICAgICAgICAgICAgICB8IAohICBjMyAgICAgfCBkYXRlICAgIHwgICAgICAgICAgIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAg fCAKICBTZXJ2ZXI6IHMwCiAgRkRXIE9wdGlvbnM6IChkZWxpbWl0ZXIgJywnLCBxdW90ZSAn IicsICJiZSBxdW90ZWQiICd2YWx1ZScpCiAgSGFzIE9JRHM6IG5vCioqKioqKioqKioqKioq KiBFUlJPUjogIGNhbm5vdCBhbHRlciBzeXN0ZW0gY29sdW1uICJ4bWluCioqKiA3MzAsNzQ4 ICoqKioKICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzcgT1BUSU9O UyAoQUREIHAxICd2MScsIEFERCBwMiAndjInKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICBBTFRFUiBDT0xVTU4gYzggT1BUSU9OUyAoQUREIHAxICd2MScsIEFERCBwMiAndjInKTsK ICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzggT1BUSU9OUyAoU0VU IHAyICdWMicsIERST1AgcDEpOwogIFxkKyBmdDEKISAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRm9yZWlnbiB0YWJsZSAicHVibGljLmZ0MSIKISAgQ29sdW1uIHwgIFR5cGUg ICB8IE1vZGlmaWVycyB8ICAgICAgICAgIEZEVyBPcHRpb25zICAgICAgICAgICB8IFN0b3Jh Z2UgIHwgRGVzY3JpcHRpb24gCiEgLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LQohICBjMSAgICAgfCBpbnRlZ2VyIHwgbm90IG51bGwgIHwgKCJwYXJhbSAxIiAndmFsMScp ICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAKISAgYzIgICAgIHwgdGV4dCAgICB8ICAgICAg ICAgICB8IChwYXJhbTIgJ3ZhbDInLCBwYXJhbTMgJ3ZhbDMnKSB8IGV4dGVuZGVkIHwgCiEg IGMzICAgICB8IGRhdGUgICAgfCAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCBwbGFpbiAgICB8IAohICBjNCAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAg IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAKISAgYzYg ICAgIHwgaW50ZWdlciB8IG5vdCBudWxsICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8IHBsYWluICAgIHwgCiEgIGM3ICAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAo cDEgJ3YxJywgcDIgJ3YyJykgICAgICAgICAgICAgfCBwbGFpbiAgICB8IAohICBjOCAgICAg fCB0ZXh0ICAgIHwgICAgICAgICAgIHwgKHAyICdWMicpICAgICAgICAgICAgICAgICAgICAg IHwgZXh0ZW5kZWQgfCAKISAgYzkgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWluICAgIHwgCiEgIGMxMCAgICB8IGlu dGVnZXIgfCAgICAgICAgICAgfCAocDEgJ3YxJykgICAgICAgICAgICAgICAgICAgICAgfCBw bGFpbiAgICB8IAogIFNlcnZlcjogczAKICBGRFcgT3B0aW9uczogKGRlbGltaXRlciAnLCcs IHF1b3RlICciJywgImJlIHF1b3RlZCIgJ3ZhbHVlJykKICBIYXMgT0lEczogbm8KLS0tIDcz MCw3NTMgLS0tLQogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjNyBP UFRJT05TIChBREQgcDEgJ3YxJywgQUREIHAyICd2MicpLAogICAgICAgICAgICAgICAgICAg ICAgICAgIEFMVEVSIENPTFVNTiBjOCBPUFRJT05TIChBREQgcDEgJ3YxJywgQUREIHAyICd2 MicpOwogIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjOCBPUFRJT05T IChTRVQgcDIgJ1YyJywgRFJPUCBwMSk7CisgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUxU RVIgQ09MVU1OIGMxIFNFVCBTVEFUSVNUSUNTIDEwMDAwOworIEFMVEVSIEZPUkVJR04gVEFC TEUgZnQxIEFMVEVSIENPTFVNTiBjMSBTRVQgKG5fZGlzdGluY3QgPSAxMDApOworIEFMVEVS IEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjMSBTRVQgKG5fZGlzdGluY3RfaW5o ZXJpdGVkID0gMTAwKTsgLS0gRVJST1IKKyBFUlJPUjogIGNhbm5vdCBzZXQgIm5fZGlzdGlu Y3RfaW5oZXJpdGVkIiBmb3IgZm9yZWlnbiB0YWJsZXMKKyBBTFRFUiBGT1JFSUdOIFRBQkxF IGZ0MSBBTFRFUiBDT0xVTU4gYzggU0VUIFNUQVRJU1RJQ1MgLTE7CiAgXGQrIGZ0MQohICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yZWlnbiB0YWJsZSAicHVi bGljLmZ0MSIKISAgQ29sdW1uIHwgIFR5cGUgICB8IE1vZGlmaWVycyB8ICAgICAgICAgIEZE VyBPcHRpb25zICAgICAgICAgICB8IFN0b3JhZ2UgIHwgU3RhdHMgdGFyZ2V0IHwgRGVzY3Jp cHRpb24gCiEgLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tLQohICBjMSAgICAgfCBpbnRlZ2VyIHwgbm90IG51bGwgIHwgKCJwYXJhbSAxIiAndmFs MScpICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAxMDAwMCAgICAgICAgfCAKISAgYzIgICAg IHwgdGV4dCAgICB8ICAgICAgICAgICB8IChwYXJhbTIgJ3ZhbDInLCBwYXJhbTMgJ3ZhbDMn KSB8IGV4dGVuZGVkIHwgICAgICAgICAgICAgIHwgCiEgIGMzICAgICB8IGRhdGUgICAgfCAg ICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBwbGFpbiAgICB8 ICAgICAgICAgICAgICB8IAohICBjNCAgICAgfCBpbnRlZ2VyIHwgICAgICAgICAgIHwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgcGxhaW4gICAgfCAgICAgICAgICAgICAg fCAKISAgYzYgICAgIHwgaW50ZWdlciB8IG5vdCBudWxsICB8ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAgIHwgCiEgIGM3ICAgICB8 IGludGVnZXIgfCAgICAgICAgICAgfCAocDEgJ3YxJywgcDIgJ3YyJykgICAgICAgICAgICAg fCBwbGFpbiAgICB8ICAgICAgICAgICAgICB8IAohICBjOCAgICAgfCB0ZXh0ICAgIHwgICAg ICAgICAgIHwgKHAyICdWMicpICAgICAgICAgICAgICAgICAgICAgIHwgZXh0ZW5kZWQgfCAg ICAgICAgICAgICAgfCAKISAgYzkgICAgIHwgaW50ZWdlciB8ICAgICAgICAgICB8ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHBsYWluICAgIHwgICAgICAgICAgICAgIHwg CiEgIGMxMCAgICB8IGludGVnZXIgfCAgICAgICAgICAgfCAocDEgJ3YxJykgICAgICAgICAg ICAgICAgICAgICAgfCBwbGFpbiAgICB8ICAgICAgICAgICAgICB8IAogIFNlcnZlcjogczAK ICBGRFcgT3B0aW9uczogKGRlbGltaXRlciAnLCcsIHF1b3RlICciJywgImJlIHF1b3RlZCIg J3ZhbHVlJykKICBIYXMgT0lEczogbm8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL2ZvcmVpZ25fZGF0YS5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9mb3JlaWduX2Rh dGEuc3FsCmluZGV4IDBjOTU2NzIuLjAzYjU2ODAgMTAwNjQ0CioqKiBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2ZvcmVpZ25fZGF0YS5zcWwKLS0tIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwv Zm9yZWlnbl9kYXRhLnNxbAoqKioqKioqKioqKioqKiogQUxURVIgRk9SRUlHTiBUQUJMRSBm dDEgQUxURVIgQ09MVU1OIHhtaQoqKiogMzA3LDMxMiAqKioqCi0tLSAzMDcsMzE2IC0tLS0K ICBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzcgT1BUSU9OUyAoQURE IHAxICd2MScsIEFERCBwMiAndjInKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBBTFRF UiBDT0xVTU4gYzggT1BUSU9OUyAoQUREIHAxICd2MScsIEFERCBwMiAndjInKTsKICBBTFRF UiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzggT1BUSU9OUyAoU0VUIHAyICdW MicsIERST1AgcDEpOworIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBj MSBTRVQgU1RBVElTVElDUyAxMDAwMDsKKyBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MSBBTFRF UiBDT0xVTU4gYzEgU0VUIChuX2Rpc3RpbmN0ID0gMTAwKTsKKyBBTFRFUiBGT1JFSUdOIFRB QkxFIGZ0MSBBTFRFUiBDT0xVTU4gYzEgU0VUIChuX2Rpc3RpbmN0X2luaGVyaXRlZCA9IDEw MCk7IC0tIEVSUk9SCisgQUxURVIgRk9SRUlHTiBUQUJMRSBmdDEgQUxURVIgQ09MVU1OIGM4 IFNFVCBTVEFUSVNUSUNTIC0xOwogIFxkKyBmdDEKICAtLSBjYW4ndCBjaGFuZ2UgdGhlIGNv bHVtbiB0eXBlIGlmIGl0J3MgdXNlZCBlbHNld2hlcmUKICBDUkVBVEUgVEFCTEUgdXNlX2Z0 MV9jb2x1bW5fdHlwZSAoeCBmdDEpOwo= --------------060007020107080602060004 Content-Type: application/gzip; name="pgsql_fdw.tar.gz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="pgsql_fdw.tar.gz" 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 --------------060007020107080602060004--