From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: [PATCH v9 05/27] libxc: Implementation of XEN_XSPLICE_op in libxc Date: Mon, 25 Apr 2016 11:34:52 -0400 Message-ID: <1461598514-5440-6-git-send-email-konrad.wilk@oracle.com> References: <1461598514-5440-1-git-send-email-konrad.wilk@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta14.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1auiYM-0003vv-8q for xen-devel@lists.xenproject.org; Mon, 25 Apr 2016 15:36:02 +0000 In-Reply-To: <1461598514-5440-1-git-send-email-konrad.wilk@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: konrad@kernel.org, xen-devel@lists.xenproject.org, sasha.levin@oracle.com, andrew.cooper3@citrix.com, ross.lagerwall@citrix.com, mpohlack@amazon.de Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Konrad Rzeszutek Wilk List-Id: xen-devel@lists.xenproject.org VGhlIHVuZGVybGF5aW5nIHRvb2xzdGFjayBjb2RlIHRvIGRvIHRoZSBiYXNpYwpvcGVyYXRpb25z IHdoZW4gdXNpbmcgdGhlIFhFTl9YU1BMSUNFX29wIHN5c2NhbGxzOgogLSB1cGxvYWQgdGhlIHBh eWxvYWQsCiAtIGdldCBzdGF0dXMgb2YgYW4gcGF5bG9hZCwKIC0gbGlzdCBhbGwgdGhlIHBheWxv YWRzLAogLSBhcHBseSwgY2hlY2ssIHJlcGxhY2UsIGFuZCByZXZlcnQgdGhlIHBheWxvYWQuCgpT aWduZWQtb2ZmLWJ5OiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53aWxrQG9yYWNsZS5j b20+ClNpZ25lZC1vZmYtYnk6IFJvc3MgTGFnZXJ3YWxsIDxyb3NzLmxhZ2Vyd2FsbEBjaXRyaXgu Y29tPgpBY2tlZC1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KUmV2aWV3ZWQtYnk6 IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5jb20+CgotLS0KQ2M6IElhbiBK YWNrc29uIDxpYW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogU3RlZmFubyBTdGFiZWxsaW5p IDxzc3RhYmVsbGluaUBrZXJuZWwub3JnPgpDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNv bT4KCnYyOiBBY3R1YWxseSBzZXQgemVybyBmb3IgdGhlIF9wYWQgZW50cmllcy4KdjM6IFNwbGl0 IHN0YXR1cyBpbnRvIHN0YXRlIGFuZCBlcnJvciBjb2RlLgogICAgQWRkIFJFUExBQ0UgYWN0aW9u LgogLSBVc2UgdGltZW91dCBhbmQgdXRpbGl6ZSBwYWRzLgogLSBVcGRhdGUgcGVyIFdlaSdzIHJl dmlldy4KIC0gRXh0cmEgc3BhY2Ugc2xpcHBlZCBpbiwgcmVtb3ZlIGl0CnY0OiBBZGQgV2VpJ3Mg cmV2aWV3LCB1cGRhdGUgY29tbWVudCBhbmQgQWNrLgp2NzogU3ByaW5rbGUgZXJybm89LUVJTlZB TCBvbiBhbGwgdGhlICdpZiAoIWxlbiknLCBldGMgY2hlY2tzLgogICAgQWRkZWQgUmV2aWV3ZWQt YnkgZnJvbSBBbmRyZXcuCi0tLQotLS0KIHRvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oIHwg IDYyICsrKysrKysrCiB0b29scy9saWJ4Yy94Y19taXNjLmMgICAgICAgICB8IDM1NSArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNDE3 IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS90b29scy9saWJ4Yy9pbmNsdWRlL3hlbmN0cmwu aCBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oCmluZGV4IDQyZjIwMWIuLjU0NDMxZGUg MTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGVuY3RybC5oCisrKyBiL3Rvb2xzL2xp YnhjL2luY2x1ZGUveGVuY3RybC5oCkBAIC0yNjEwLDYgKzI2MTAsNjggQEAgY29uc3QgdWludDMy X3QgKnhjX2dldF9mZWF0dXJlX2RlZXBfZGVwcyh1aW50MzJfdCBmZWF0dXJlKTsKIAogI2VuZGlm CiAKK2ludCB4Y194c3BsaWNlX3VwbG9hZCh4Y19pbnRlcmZhY2UgKnhjaCwKKyAgICAgICAgICAg ICAgICAgICAgICBjaGFyICpuYW1lLCB1bnNpZ25lZCBjaGFyICpwYXlsb2FkLCB1aW50MzJfdCBz aXplKTsKKworaW50IHhjX3hzcGxpY2VfZ2V0KHhjX2ludGVyZmFjZSAqeGNoLAorICAgICAgICAg ICAgICAgICAgIGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgeGVuX3hzcGxpY2Vfc3Rh dHVzX3QgKnN0YXR1cyk7CisKKy8qCisgKiBUaGUgaGVhcnQgb2YgdGhpcyBmdW5jdGlvbiBpcyB0 byBnZXQgYW4gYXJyYXkgb2YgeGVuX3hzcGxpY2Vfc3RhdHVzX3QuCisgKgorICogSG93ZXZlciBp dCBpcyBjb21wbGV4IGJlY2F1c2UgaXQgaGFzIHRvIGRlYWwgd2l0aCB0aGUgaHlwZXJ2aXNvcgor ICogcmV0dXJuaW5nIHNvbWUgb2YgdGhlIHJlcXVlc3RlZCBkYXRhIG9yIGRhdGEgYmVpbmcgc3Rh bGUKKyAqIChhbm90aGVyIGh5cGVyY2FsbCBtaWdodCBhbHRlciB0aGUgbGlzdCkuCisgKgorICog VGhlIHBhcmFtZXRlcnMgdGhhdCB0aGUgZnVuY3Rpb24gZXhwZWN0cyB0byBjb250YWluIGRhdGEg ZnJvbQorICogdGhlIGh5cGVydmlzb3IgYXJlOiAnaW5mbycsICduYW1lJywgYW5kICdsZW4nLiBU aGUgJ2RvbmUnIGFuZAorICogJ2xlZnQnIGFyZSBhbHNvIHVwZGF0ZWQgd2l0aCB0aGUgbnVtYmVy IG9mIGVudHJpZXMgZmlsbGVkIG91dAorICogYW5kIHJlc3BlY3RpdmVseSB0aGUgbnVtYmVyIG9m IGVudHJpZXMgbGVmdCB0byBnZXQgZnJvbSBoeXBlcnZpc29yLgorICoKKyAqIEl0IGlzIGV4cGVj dGVkIHRoYXQgdGhlIGNhbGxlciBvZiB0aGlzIGZ1bmN0aW9uIHdpbGwgdGFrZSB0aGUKKyAqICds ZWZ0JyBhbmQgdXNlIHRoZSB2YWx1ZSBmb3IgJ3N0YXJ0Jy4gVGhpcyB3YXkgd2UgaGF2ZSBhbgor ICogY3Vyc29yIGluIHRoZSBhcnJheS4gTm90ZSB0aGF0IHRoZSAnaW5mbycsJ25hbWUnLCBhbmQg J2xlbicgd2lsbAorICogYmUgdXBkYXRlZCBhdCB0aGUgc3Vic2VxdWVudCBjYWxscy4KKyAqCisg KiBUaGUgJ21heCcgaXMgdG8gYmUgcHJvdmlkZWQgYnkgdGhlIGNhbGxlciB3aXRoIHRoZSBtYXhp bXVtCisgKiBudW1iZXIgb2YgZW50cmllcyB0aGF0ICdpbmZvJywgJ25hbWUnLCBhbmQgJ2xlbicg YXJyYXlzIGNhbgorICogYmUgZmlsbGVkIHVwIHdpdGguCisgKgorICogRWFjaCBlbnRyeSBpbiB0 aGUgJ25hbWUnIGFycmF5IGlzIGV4cGVjdGVkIHRvIGJlIG9mIFhFTl9YU1BMSUNFX05BTUVfU0la RQorICogbGVuZ3RoLgorICoKKyAqIEVhY2ggZW50cnkgaW4gdGhlICdpbmZvJyBhcnJheSBpcyBl eHBlY3RlZCB0byBiZSBvZiB4ZW5feHNwbGljZV9zdGF0dXNfdAorICogc3RydWN0dXJlIHNpemUu CisgKgorICogRWFjaCBlbnRyeSBpbiB0aGUgJ2xlbicgYXJyYXkgaXMgZXhwZWN0ZWQgdG8gYmUg b2YgdWludDMyX3Qgc2l6ZS4KKyAqCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIHplcm8gaWYgdGhl IGh5cGVyY2FsbCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LgorICogTm90ZSB0aGF0IHRoZSByZXR1 cm4gdmFsdWUgaXMgX25vdF8gdGhlIGFtb3VudCBvZiBlbnRyaWVzIGZpbGxlZAorICogb3V0IC0g dGhhdCBpcyBzYXZlZCBpbiAnZG9uZScuCisgKgorICogSWYgdGhlcmUgd2FzIGFuIGVycm9yIHBl cmZvcm1pbmcgdGhlIG9wZXJhdGlvbiwgdGhlIHJldHVybiB2YWx1ZQorICogd2lsbCBjb250YWlu IGFuIG5lZ2F0aXZlIC1FWFggdHlwZSB2YWx1ZS4gVGhlICdkb25lJyBhbmQgJ2xlZnQnCisgKiB3 aWxsIGNvbnRhaW4gdGhlIG51bWJlciBvZiBlbnRyaWVzIHRoYXQgaGFkIGJlZW4gc3VjY2VzZnVs bHkKKyAqIHJldHJpZXZlZCAoaWYgYW55KS4KKyAqLworaW50IHhjX3hzcGxpY2VfbGlzdCh4Y19p bnRlcmZhY2UgKnhjaCwgdW5zaWduZWQgaW50IG1heCwgdW5zaWduZWQgaW50IHN0YXJ0LAorICAg ICAgICAgICAgICAgICAgICB4ZW5feHNwbGljZV9zdGF0dXNfdCAqaW5mbywgY2hhciAqbmFtZSwK KyAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgKmxlbiwgdW5zaWduZWQgaW50ICpkb25lLAor ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmxlZnQpOworCisvKgorICogVGhlIG9w ZXJhdGlvbnMgYXJlIGFzeW5jaHJvbm91cyBhbmQgdGhlIGh5cGVydmlzb3IgbWF5IHRha2UgYSB3 aGlsZQorICogdG8gY29tcGxldGUgdGhlbS4gVGhlIGB0aW1lb3V0YCBvZmZlcnMgYW4gb3B0aW9u IHRvIGV4cGlyZSB0aGUKKyAqIG9wZXJhdGlvbiBpZiBpdCBjb3VsZCBub3QgYmUgY29tcGxldGVk IHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUKKyAqIChpbiBtcykuIFZhbHVlIG9mIDAgbWVhbnMg bGV0IGh5cGVydmlzb3IgZGVjaWRlIHRoZSBiZXN0IHRpbWVvdXQuCisgKi8KK2ludCB4Y194c3Bs aWNlX2FwcGx5KHhjX2ludGVyZmFjZSAqeGNoLCBjaGFyICpuYW1lLCB1aW50MzJfdCB0aW1lb3V0 KTsKK2ludCB4Y194c3BsaWNlX3JldmVydCh4Y19pbnRlcmZhY2UgKnhjaCwgY2hhciAqbmFtZSwg dWludDMyX3QgdGltZW91dCk7CitpbnQgeGNfeHNwbGljZV91bmxvYWQoeGNfaW50ZXJmYWNlICp4 Y2gsIGNoYXIgKm5hbWUsIHVpbnQzMl90IHRpbWVvdXQpOworaW50IHhjX3hzcGxpY2VfY2hlY2so eGNfaW50ZXJmYWNlICp4Y2gsIGNoYXIgKm5hbWUsIHVpbnQzMl90IHRpbWVvdXQpOworaW50IHhj X3hzcGxpY2VfcmVwbGFjZSh4Y19pbnRlcmZhY2UgKnhjaCwgY2hhciAqbmFtZSwgdWludDMyX3Qg dGltZW91dCk7CisKIC8qIENvbXBhdCBzaGltcyAqLwogI2luY2x1ZGUgInhlbmN0cmxfY29tcGF0 LmgiCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhjL3hjX21pc2MuYyBiL3Rvb2xzL2xpYnhjL3hj X21pc2MuYwppbmRleCA3ZDk5N2Q5Li44Y2QzOThiIDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy94 Y19taXNjLmMKKysrIGIvdG9vbHMvbGlieGMveGNfbWlzYy5jCkBAIC02OTYsNiArNjk2LDM2MSBA QCBpbnQgeGNfaHZtX2luamVjdF90cmFwKAogICAgIHJldHVybiByYzsKIH0KIAoraW50IHhjX3hz cGxpY2VfdXBsb2FkKHhjX2ludGVyZmFjZSAqeGNoLAorICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcGF5bG9hZCwK KyAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBzaXplKQoreworICAgIGludCByYzsKKyAg ICBERUNMQVJFX1NZU0NUTDsKKyAgICBERUNMQVJFX0hZUEVSQ0FMTF9CVUZGRVIoY2hhciwgbG9j YWwpOworICAgIERFQ0xBUkVfSFlQRVJDQUxMX0JPVU5DRShuYW1lLCAwIC8qIGxhdGVyICovLCBY Q19IWVBFUkNBTExfQlVGRkVSX0JPVU5DRV9JTik7CisgICAgeGVuX3hzcGxpY2VfbmFtZV90IGRl Zl9uYW1lID0geyAucGFkID0geyAwLCAwLCAwIH0gfTsKKworICAgIGlmICggIW5hbWUgfHwgIXBh eWxvYWQgKQorICAgIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAt MTsKKyAgICB9CisKKyAgICBkZWZfbmFtZS5zaXplID0gc3RybGVuKG5hbWUpICsgMTsKKyAgICBp ZiAoIGRlZl9uYW1lLnNpemUgPiBYRU5fWFNQTElDRV9OQU1FX1NJWkUgKQorICAgIHsKKyAgICAg ICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBIWVBF UkNBTExfQk9VTkNFX1NFVF9TSVpFKG5hbWUsIGRlZl9uYW1lLnNpemUpOworCisgICAgaWYgKCB4 Y19oeXBlcmNhbGxfYm91bmNlX3ByZSh4Y2gsIG5hbWUpICkKKyAgICAgICAgcmV0dXJuIC0xOwor CisgICAgbG9jYWwgPSB4Y19oeXBlcmNhbGxfYnVmZmVyX2FsbG9jKHhjaCwgbG9jYWwsIHNpemUp OworICAgIGlmICggIWxvY2FsICkKKyAgICB7CisgICAgICAgIHhjX2h5cGVyY2FsbF9ib3VuY2Vf cG9zdCh4Y2gsIG5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG1lbWNweShs b2NhbCwgcGF5bG9hZCwgc2l6ZSk7CisKKyAgICBzeXNjdGwuY21kID0gWEVOX1NZU0NUTF94c3Bs aWNlX29wOworICAgIHN5c2N0bC51LnhzcGxpY2UuY21kID0gWEVOX1NZU0NUTF9YU1BMSUNFX1VQ TE9BRDsKKyAgICBzeXNjdGwudS54c3BsaWNlLnBhZCA9IDA7CisgICAgc3lzY3RsLnUueHNwbGlj ZS51LnVwbG9hZC5zaXplID0gc2l6ZTsKKyAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShzeXNjdGwu dS54c3BsaWNlLnUudXBsb2FkLnBheWxvYWQsIGxvY2FsKTsKKworICAgIHN5c2N0bC51LnhzcGxp Y2UudS51cGxvYWQubmFtZSA9IGRlZl9uYW1lOworICAgIHNldF94ZW5fZ3Vlc3RfaGFuZGxlKHN5 c2N0bC51LnhzcGxpY2UudS51cGxvYWQubmFtZS5uYW1lLCBuYW1lKTsKKworICAgIHJjID0gZG9f c3lzY3RsKHhjaCwgJnN5c2N0bCk7CisKKyAgICB4Y19oeXBlcmNhbGxfYnVmZmVyX2ZyZWUoeGNo LCBsb2NhbCk7CisgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9wb3N0KHhjaCwgbmFtZSk7CisKKyAg ICByZXR1cm4gcmM7Cit9CisKK2ludCB4Y194c3BsaWNlX2dldCh4Y19pbnRlcmZhY2UgKnhjaCwK KyAgICAgICAgICAgICAgICAgICBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgIHhlbl94 c3BsaWNlX3N0YXR1c190ICpzdGF0dXMpCit7CisgICAgaW50IHJjOworICAgIERFQ0xBUkVfU1lT Q1RMOworICAgIERFQ0xBUkVfSFlQRVJDQUxMX0JPVU5DRShuYW1lLCAwIC8qYWRqdXN0IGxhdGVy ICovLCBYQ19IWVBFUkNBTExfQlVGRkVSX0JPVU5DRV9JTik7CisgICAgeGVuX3hzcGxpY2VfbmFt ZV90IGRlZl9uYW1lID0geyAucGFkID0geyAwLCAwLCAwIH0gfTsKKworICAgIGlmICggIW5hbWUg KQorICAgIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAg ICB9CisKKyAgICBkZWZfbmFtZS5zaXplID0gc3RybGVuKG5hbWUpICsgMTsKKyAgICBpZiAoIGRl Zl9uYW1lLnNpemUgPiBYRU5fWFNQTElDRV9OQU1FX1NJWkUgKQorICAgIHsKKyAgICAgICAgZXJy bm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBIWVBFUkNBTExf Qk9VTkNFX1NFVF9TSVpFKG5hbWUsIGRlZl9uYW1lLnNpemUpOworCisgICAgaWYgKCB4Y19oeXBl cmNhbGxfYm91bmNlX3ByZSh4Y2gsIG5hbWUpICkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAg c3lzY3RsLmNtZCA9IFhFTl9TWVNDVExfeHNwbGljZV9vcDsKKyAgICBzeXNjdGwudS54c3BsaWNl LmNtZCA9IFhFTl9TWVNDVExfWFNQTElDRV9HRVQ7CisgICAgc3lzY3RsLnUueHNwbGljZS5wYWQg PSAwOworCisgICAgc3lzY3RsLnUueHNwbGljZS51LmdldC5zdGF0dXMuc3RhdGUgPSAwOworICAg IHN5c2N0bC51LnhzcGxpY2UudS5nZXQuc3RhdHVzLnJjID0gMDsKKworICAgIHN5c2N0bC51Lnhz cGxpY2UudS5nZXQubmFtZSA9IGRlZl9uYW1lOworICAgIHNldF94ZW5fZ3Vlc3RfaGFuZGxlKHN5 c2N0bC51LnhzcGxpY2UudS5nZXQubmFtZS5uYW1lLCBuYW1lKTsKKworICAgIHJjID0gZG9fc3lz Y3RsKHhjaCwgJnN5c2N0bCk7CisKKyAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNoLCBu YW1lKTsKKworICAgIG1lbWNweShzdGF0dXMsICZzeXNjdGwudS54c3BsaWNlLnUuZ2V0LnN0YXR1 cywgc2l6ZW9mKCpzdGF0dXMpKTsKKworICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIFRoZSBo ZWFydCBvZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdldCBhbiBhcnJheSBvZiB4ZW5feHNwbGljZV9z dGF0dXNfdC4KKyAqCisgKiBIb3dldmVyIGl0IGlzIGNvbXBsZXggYmVjYXVzZSBpdCBoYXMgdG8g ZGVhbCB3aXRoIHRoZSBoeXBlcnZpc29yCisgKiByZXR1cm5pbmcgc29tZSBvZiB0aGUgcmVxdWVz dGVkIGRhdGEgb3IgZGF0YSBiZWluZyBzdGFsZQorICogKGFub3RoZXIgaHlwZXJjYWxsIG1pZ2h0 IGFsdGVyIHRoZSBsaXN0KS4KKyAqCisgKiBUaGUgcGFyYW1ldGVycyB0aGF0IHRoZSBmdW5jdGlv biBleHBlY3RzIHRvIGNvbnRhaW4gZGF0YSBmcm9tCisgKiB0aGUgaHlwZXJ2aXNvciBhcmU6ICdp bmZvJywgJ25hbWUnLCBhbmQgJ2xlbicuIFRoZSAnZG9uZScgYW5kCisgKiAnbGVmdCcgYXJlIGFs c28gdXBkYXRlZCB3aXRoIHRoZSBudW1iZXIgb2YgZW50cmllcyBmaWxsZWQgb3V0CisgKiBhbmQg cmVzcGVjdGl2ZWx5IHRoZSBudW1iZXIgb2YgZW50cmllcyBsZWZ0IHRvIGdldCBmcm9tIGh5cGVy dmlzb3IuCisgKgorICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgY2FsbGVyIG9mIHRoaXMgZnVu Y3Rpb24gd2lsbCB0YWtlIHRoZQorICogJ2xlZnQnIGFuZCB1c2UgdGhlIHZhbHVlIGZvciAnc3Rh cnQnLiBUaGlzIHdheSB3ZSBoYXZlIGFuCisgKiBjdXJzb3IgaW4gdGhlIGFycmF5LiBOb3RlIHRo YXQgdGhlICdpbmZvJywnbmFtZScsIGFuZCAnbGVuJyB3aWxsCisgKiBiZSB1cGRhdGVkIGF0IHRo ZSBzdWJzZXF1ZW50IGNhbGxzLgorICoKKyAqIFRoZSAnbWF4JyBpcyB0byBiZSBwcm92aWRlZCBi eSB0aGUgY2FsbGVyIHdpdGggdGhlIG1heGltdW0KKyAqIG51bWJlciBvZiBlbnRyaWVzIHRoYXQg J2luZm8nLCAnbmFtZScsIGFuZCAnbGVuJyBhcnJheXMgY2FuCisgKiBiZSBmaWxsZWQgdXAgd2l0 aC4KKyAqCisgKiBFYWNoIGVudHJ5IGluIHRoZSAnbmFtZScgYXJyYXkgaXMgZXhwZWN0ZWQgdG8g YmUgb2YgWEVOX1hTUExJQ0VfTkFNRV9TSVpFCisgKiBsZW5ndGguCisgKgorICogRWFjaCBlbnRy eSBpbiB0aGUgJ2luZm8nIGFycmF5IGlzIGV4cGVjdGVkIHRvIGJlIG9mIHhlbl94c3BsaWNlX3N0 YXR1c190CisgKiBzdHJ1Y3R1cmUgc2l6ZS4KKyAqCisgKiBFYWNoIGVudHJ5IGluIHRoZSAnbGVu JyBhcnJheSBpcyBleHBlY3RlZCB0byBiZSBvZiB1aW50MzJfdCBzaXplLgorICoKKyAqIFRoZSBy ZXR1cm4gdmFsdWUgaXMgemVybyBpZiB0aGUgaHlwZXJjYWxsIGNvbXBsZXRlZCBzdWNjZXNzZnVs bHkuCisgKiBOb3RlIHRoYXQgdGhlIHJldHVybiB2YWx1ZSBpcyBfbm90XyB0aGUgYW1vdW50IG9m IGVudHJpZXMgZmlsbGVkCisgKiBvdXQgLSB0aGF0IGlzIHNhdmVkIGluICdkb25lJy4KKyAqCisg KiBJZiB0aGVyZSB3YXMgYW4gZXJyb3IgcGVyZm9ybWluZyB0aGUgb3BlcmF0aW9uLCB0aGUgcmV0 dXJuIHZhbHVlCisgKiB3aWxsIGNvbnRhaW4gYW4gbmVnYXRpdmUgLUVYWCB0eXBlIHZhbHVlLiBU aGUgJ2RvbmUnIGFuZCAnbGVmdCcKKyAqIHdpbGwgY29udGFpbiB0aGUgbnVtYmVyIG9mIGVudHJp ZXMgdGhhdCBoYWQgYmVlbiBzdWNjZXNmdWxseQorICogcmV0cmlldmVkIChpZiBhbnkpLgorICov CitpbnQgeGNfeHNwbGljZV9saXN0KHhjX2ludGVyZmFjZSAqeGNoLCB1bnNpZ25lZCBpbnQgbWF4 LCB1bnNpZ25lZCBpbnQgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgIHhlbl94c3BsaWNlX3N0 YXR1c190ICppbmZvLAorICAgICAgICAgICAgICAgICAgICBjaGFyICpuYW1lLCB1aW50MzJfdCAq bGVuLAorICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmRvbmUsCisgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCAqbGVmdCkKK3sKKyAgICBpbnQgcmM7CisgICAgREVDTEFS RV9TWVNDVEw7CisgICAgLyogVGhlIHNpemVzIGFyZSBhZGp1c3RlZCBsYXRlciAtIGhlbmNlIHpl cm8uICovCisgICAgREVDTEFSRV9IWVBFUkNBTExfQk9VTkNFKGluZm8sIDAsIFhDX0hZUEVSQ0FM TF9CVUZGRVJfQk9VTkNFX09VVCk7CisgICAgREVDTEFSRV9IWVBFUkNBTExfQk9VTkNFKG5hbWUs IDAsIFhDX0hZUEVSQ0FMTF9CVUZGRVJfQk9VTkNFX09VVCk7CisgICAgREVDTEFSRV9IWVBFUkNB TExfQk9VTkNFKGxlbiwgMCwgWENfSFlQRVJDQUxMX0JVRkZFUl9CT1VOQ0VfT1VUKTsKKyAgICB1 aW50MzJfdCBtYXhfYmF0Y2hfc3osIG5yOworICAgIHVpbnQzMl90IHZlcnNpb24gPSAwLCByZXRy aWVzID0gMDsKKyAgICB1aW50MzJfdCBhZGp1c3QgPSAwOworICAgIHNzaXplX3Qgc3o7CisKKyAg ICBpZiAoICFtYXggfHwgIWluZm8gfHwgIW5hbWUgfHwgIWxlbiApCisgICAgeworICAgICAgICBl cnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHN5c2N0bC5j bWQgPSBYRU5fU1lTQ1RMX3hzcGxpY2Vfb3A7CisgICAgc3lzY3RsLnUueHNwbGljZS5jbWQgPSBY RU5fU1lTQ1RMX1hTUExJQ0VfTElTVDsKKyAgICBzeXNjdGwudS54c3BsaWNlLnBhZCA9IDA7Cisg ICAgc3lzY3RsLnUueHNwbGljZS51Lmxpc3QudmVyc2lvbiA9IDA7CisgICAgc3lzY3RsLnUueHNw bGljZS51Lmxpc3QuaWR4ID0gc3RhcnQ7CisgICAgc3lzY3RsLnUueHNwbGljZS51Lmxpc3QucGFk ID0gMDsKKworICAgIG1heF9iYXRjaF9zeiA9IG1heDsKKyAgICAvKiBDb252aWVuY2UgdmFsdWUu ICovCisgICAgc3ogPSBzaXplb2YoKm5hbWUpICogWEVOX1hTUExJQ0VfTkFNRV9TSVpFOworICAg ICpkb25lID0gMDsKKyAgICAqbGVmdCA9IDA7CisgICAgZG8geworICAgICAgICAvKgorICAgICAg ICAgKiBUaGUgZmlyc3QgdGltZSB3ZSBnbyBpbiB0aGlzIGxvb3Agb3VyICdtYXgnIG1heSBiZSBi aWdnZXIKKyAgICAgICAgICogdGhhbiB3aGF0IHRoZSBoeXBlcnZpc29yIGlzIGNvbWZvcnRhYmxl IHdpdGggLSBoZW5jZSB0aGUgZmlyc3QKKyAgICAgICAgICogY291cGxlIG9mIGxvb3BzIG1heSBh ZGp1c3QgdGhlIG51bWJlciBvZiBlbnRyaWVzIHdlIHdpbGwKKyAgICAgICAgICogd2FudCBmaWxs ZWQgKHRyYWNrZWQgYnkgJ25yJykuCisgICAgICAgICAqCisgICAgICAgICAqIE4uQi4gVGhpcyBp cyBhIGRvIHsgfSB3aGlsZSBsb29wIGFuZCB0aGUgcmlnaHQgaGFuZCBzaWRlIG9mCisgICAgICAg ICAqIHRoZSBjb25kaXRpb25hbCB3aGVuIGFkanVzdGluZyB3aWxsIGV2YWx1YXRlIHRvIGZhbHNl IChhcworICAgICAgICAgKiAqbGVmdCBpcyBzZXQgdG8gemVybyBiZWZvcmUgdGhlIGxvb3AuIEhl bmNlIHdlIG5lZWQgdGhpcworICAgICAgICAgKiBhZGp1c3QgLSBldmVuIGlmIHdlIHJlc2V0IGl0 IGF0IHRoZSBzdGFydCBvZiB0aGUgbG9vcC4KKyAgICAgICAgICovCisgICAgICAgIGlmICggYWRq dXN0ICkKKyAgICAgICAgICAgIGFkanVzdCA9IDA7IC8qIFVzZWQgd2hlbiBhZGp1c3RpbmcgdGhl ICdtYXhfYmF0Y2hfc3onIG9yICdyZXRyaWVzJy4gKi8KKworICAgICAgICBuciA9IG1pbihtYXgg LSAqZG9uZSwgbWF4X2JhdGNoX3N6KTsKKworICAgICAgICBzeXNjdGwudS54c3BsaWNlLnUubGlz dC5uciA9IG5yOworICAgICAgICAvKiBGaXggdGhlIHNpemUgKG1heSB2YXJ5IGJldHdlZW4gaHlw ZXJjYWxscykuICovCisgICAgICAgIEhZUEVSQ0FMTF9CT1VOQ0VfU0VUX1NJWkUoaW5mbywgbnIg KiBzaXplb2YoKmluZm8pKTsKKyAgICAgICAgSFlQRVJDQUxMX0JPVU5DRV9TRVRfU0laRShuYW1l LCBuciAqIG5yKTsKKyAgICAgICAgSFlQRVJDQUxMX0JPVU5DRV9TRVRfU0laRShsZW4sIG5yICog c2l6ZW9mKCpsZW4pKTsKKyAgICAgICAgLyogTW92ZSB0aGUgcG9pbnRlciB0byBwcm9wZXIgb2Zm c2V0IGludG8gJ2luZm8nLiAqLworICAgICAgICAoSFlQRVJDQUxMX0JVRkZFUihpbmZvKSktPnVi dWYgPSBpbmZvICsgKmRvbmU7CisgICAgICAgIChIWVBFUkNBTExfQlVGRkVSKG5hbWUpKS0+dWJ1 ZiA9IG5hbWUgKyAoc3ogKiAqZG9uZSk7CisgICAgICAgIChIWVBFUkNBTExfQlVGRkVSKGxlbikp LT51YnVmID0gbGVuICsgKmRvbmU7CisgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeS4gKi8KKyAg ICAgICAgcmMgPSB4Y19oeXBlcmNhbGxfYm91bmNlX3ByZSh4Y2gsIGluZm8pOworICAgICAgICBp ZiAoIHJjICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIHJjID0geGNfaHlwZXJjYWxs X2JvdW5jZV9wcmUoeGNoLCBuYW1lKTsKKyAgICAgICAgaWYgKCByYyApCisgICAgICAgICAgICBi cmVhazsKKworICAgICAgICByYyA9IHhjX2h5cGVyY2FsbF9ib3VuY2VfcHJlKHhjaCwgbGVuKTsK KyAgICAgICAgaWYgKCByYyApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBzZXRfeGVu X2d1ZXN0X2hhbmRsZShzeXNjdGwudS54c3BsaWNlLnUubGlzdC5zdGF0dXMsIGluZm8pOworICAg ICAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShzeXNjdGwudS54c3BsaWNlLnUubGlzdC5uYW1lLCBu YW1lKTsKKyAgICAgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUoc3lzY3RsLnUueHNwbGljZS51Lmxp c3QubGVuLCBsZW4pOworCisgICAgICAgIHJjID0gZG9fc3lzY3RsKHhjaCwgJnN5c2N0bCk7Cisg ICAgICAgIC8qCisgICAgICAgICAqIEZyb20gaGVyZSBvbiB3ZSBNVVNUIGNhbGwgeGNfaHlwZXJj YWxsX2JvdW5jZS4gSWYgcmMgPCAwIHdlCisgICAgICAgICAqIGVuZCB1cCBkb2luZyBpdCAob3V0 c2lkZSB0aGUgbG9vcCksIHNvIHVzaW5nIGEgYnJlYWsgaXMgT0suCisgICAgICAgICAqLworICAg ICAgICBpZiAoIHJjIDwgMCAmJiBlcnJubyA9PSBFMkJJRyApCisgICAgICAgIHsKKyAgICAgICAg ICAgIGlmICggbWF4X2JhdGNoX3N6IDw9IDEgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgbWF4X2JhdGNoX3N6ID4+PSAxOworICAgICAgICAgICAgYWRqdXN0ID0gMTsgLyog Rm9yIHRoZSBsb29wIGNvbmRpdGlvbmFsIHRvIGxldCB1cyBsb29wIGFnYWluLiAqLworICAgICAg ICAgICAgLyogTm8gbWVtb3J5IGxlYWtzISAqLworICAgICAgICAgICAgeGNfaHlwZXJjYWxsX2Jv dW5jZV9wb3N0KHhjaCwgaW5mbyk7CisgICAgICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bv c3QoeGNoLCBuYW1lKTsKKyAgICAgICAgICAgIHhjX2h5cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gs IGxlbik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlm ICggcmMgPCAwICkgLyogRm9yIGFsbCBvdGhlciBlcnJvcnMgd2UgYmFpbCBvdXQuICovCisgICAg ICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoICF2ZXJzaW9uICkKKyAgICAgICAgICAgIHZl cnNpb24gPSBzeXNjdGwudS54c3BsaWNlLnUubGlzdC52ZXJzaW9uOworCisgICAgICAgIGlmICgg c3lzY3RsLnUueHNwbGljZS51Lmxpc3QudmVyc2lvbiAhPSB2ZXJzaW9uICkKKyAgICAgICAgewor ICAgICAgICAgICAgLyogV2UgY291bGQgbWFrZSB0aGlzIGNvbmZpZ3VyYWJsZSBhcyBwYXJhbWV0 ZXI/ICovCisgICAgICAgICAgICBpZiAoIHJldHJpZXMrKyA+IDMgKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICAgICAgZXJybm8gPSBFQlVTWTsK KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpkb25l ID0gMDsgLyogUmV0cnkgZnJvbSBzY3JhdGNoLiAqLworICAgICAgICAgICAgdmVyc2lvbiA9IHN5 c2N0bC51LnhzcGxpY2UudS5saXN0LnZlcnNpb247CisgICAgICAgICAgICBhZGp1c3QgPSAxOyAv KiBBbmQgbWFrZSBzdXJlIHdlIGNvbnRpbnVlIGluIHRoZSBsb29wLiAqLworICAgICAgICAgICAg LyogTm8gbWVtb3J5IGxlYWtzLiAqLworICAgICAgICAgICAgeGNfaHlwZXJjYWxsX2JvdW5jZV9w b3N0KHhjaCwgaW5mbyk7CisgICAgICAgICAgICB4Y19oeXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNo LCBuYW1lKTsKKyAgICAgICAgICAgIHhjX2h5cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIGxlbik7 CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFdlIHNob3Vs ZCBuZXZlciBoaXQgdGhpcywgYnV0IGp1c3QgaW4gY2FzZS4gKi8KKyAgICAgICAgaWYgKCByYyA+ IG5yICkKKyAgICAgICAgeworICAgICAgICAgICAgZXJybm8gPSBFT1ZFUkZMT1c7IC8qIE92ZXJm bG93ISAqLworICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisgICAgICAgICpsZWZ0ID0gc3lzY3RsLnUueHNwbGljZS51Lmxpc3QubnI7IC8qIFRvdGFs IHJlbWFpbmluZyBjb3VudC4gKi8KKyAgICAgICAgLyogQ29weSBvbmx5IHVwICdyYycgb2YgZGF0 YScgLSB3ZSBjb3VsZCBhZGQgJ21pbihyYyxucikgaWYgZGVzaXJlZC4gKi8KKyAgICAgICAgSFlQ RVJDQUxMX0JPVU5DRV9TRVRfU0laRShpbmZvLCAocmMgKiBzaXplb2YoKmluZm8pKSk7CisgICAg ICAgIEhZUEVSQ0FMTF9CT1VOQ0VfU0VUX1NJWkUobmFtZSwgKHJjICogc3opKTsKKyAgICAgICAg SFlQRVJDQUxMX0JPVU5DRV9TRVRfU0laRShsZW4sIChyYyAqIHNpemVvZigqbGVuKSkpOworICAg ICAgICAvKiBCb3VuY2UgdGhlIGRhdGEgYW5kIGZyZWUgdGhlIGJvdW5jZSBidWZmZXIuICovCisg ICAgICAgIHhjX2h5cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIGluZm8pOworICAgICAgICB4Y19o eXBlcmNhbGxfYm91bmNlX3Bvc3QoeGNoLCBuYW1lKTsKKyAgICAgICAgeGNfaHlwZXJjYWxsX2Jv dW5jZV9wb3N0KHhjaCwgbGVuKTsKKyAgICAgICAgLyogQW5kIHVwZGF0ZSBob3cgbWFueSBlbGVt ZW50cyBvZiBpbmZvIHdlIGhhdmUgY29waWVkIGludG8uICovCisgICAgICAgICpkb25lICs9IHJj OworICAgICAgICAvKiBVcGRhdGUgaWR4LiAqLworICAgICAgICBzeXNjdGwudS54c3BsaWNlLnUu bGlzdC5pZHggPSAqZG9uZTsKKyAgICB9IHdoaWxlICggYWRqdXN0IHx8ICgqZG9uZSA8IG1heCAm JiAqbGVmdCAhPSAwKSApOworCisgICAgaWYgKCByYyA8IDAgKQorICAgIHsKKyAgICAgICAgeGNf aHlwZXJjYWxsX2JvdW5jZV9wb3N0KHhjaCwgbGVuKTsKKyAgICAgICAgeGNfaHlwZXJjYWxsX2Jv dW5jZV9wb3N0KHhjaCwgbmFtZSk7CisgICAgICAgIHhjX2h5cGVyY2FsbF9ib3VuY2VfcG9zdCh4 Y2gsIGluZm8pOworICAgIH0KKworICAgIHJldHVybiByYyA+IDAgPyAwIDogcmM7Cit9CisKK3N0 YXRpYyBpbnQgX3hjX3hzcGxpY2VfYWN0aW9uKHhjX2ludGVyZmFjZSAqeGNoLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHVuc2lnbmVkIGludCBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCB0aW1lb3V0KQoreworICAgIGludCByYzsKKyAgICBERUNMQVJFX1NZU0NUTDsK KyAgICAvKiBUaGUgc2l6ZSBpcyBmaWd1cmVkIG91dCB3aGVuIHdlIHN0cmxlbihuYW1lKSAqLwor ICAgIERFQ0xBUkVfSFlQRVJDQUxMX0JPVU5DRShuYW1lLCAwLCBYQ19IWVBFUkNBTExfQlVGRkVS X0JPVU5DRV9JTik7CisgICAgeGVuX3hzcGxpY2VfbmFtZV90IGRlZl9uYW1lID0geyAucGFkID0g eyAwLCAwLCAwIH0gfTsKKworICAgIGRlZl9uYW1lLnNpemUgPSBzdHJsZW4obmFtZSkgKyAxOwor CisgICAgaWYgKCBkZWZfbmFtZS5zaXplID4gWEVOX1hTUExJQ0VfTkFNRV9TSVpFICkKKyAgICB7 CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisg ICAgSFlQRVJDQUxMX0JPVU5DRV9TRVRfU0laRShuYW1lLCBkZWZfbmFtZS5zaXplKTsKKworICAg IGlmICggeGNfaHlwZXJjYWxsX2JvdW5jZV9wcmUoeGNoLCBuYW1lKSApCisgICAgICAgIHJldHVy biAtMTsKKworICAgIHN5c2N0bC5jbWQgPSBYRU5fU1lTQ1RMX3hzcGxpY2Vfb3A7CisgICAgc3lz Y3RsLnUueHNwbGljZS5jbWQgPSBYRU5fU1lTQ1RMX1hTUExJQ0VfQUNUSU9OOworICAgIHN5c2N0 bC51LnhzcGxpY2UucGFkID0gMDsKKyAgICBzeXNjdGwudS54c3BsaWNlLnUuYWN0aW9uLmNtZCA9 IGFjdGlvbjsKKyAgICBzeXNjdGwudS54c3BsaWNlLnUuYWN0aW9uLnRpbWVvdXQgPSB0aW1lb3V0 OworCisgICAgc3lzY3RsLnUueHNwbGljZS51LmFjdGlvbi5uYW1lID0gZGVmX25hbWU7CisgICAg c2V0X3hlbl9ndWVzdF9oYW5kbGUoc3lzY3RsLnUueHNwbGljZS51LmFjdGlvbi5uYW1lLm5hbWUs IG5hbWUpOworCisgICAgcmMgPSBkb19zeXNjdGwoeGNoLCAmc3lzY3RsKTsKKworICAgIHhjX2h5 cGVyY2FsbF9ib3VuY2VfcG9zdCh4Y2gsIG5hbWUpOworCisgICAgcmV0dXJuIHJjOworfQorCitp bnQgeGNfeHNwbGljZV9hcHBseSh4Y19pbnRlcmZhY2UgKnhjaCwgY2hhciAqbmFtZSwgdWludDMy X3QgdGltZW91dCkKK3sKKyAgICByZXR1cm4gX3hjX3hzcGxpY2VfYWN0aW9uKHhjaCwgbmFtZSwg WFNQTElDRV9BQ1RJT05fQVBQTFksIHRpbWVvdXQpOworfQorCitpbnQgeGNfeHNwbGljZV9yZXZl cnQoeGNfaW50ZXJmYWNlICp4Y2gsIGNoYXIgKm5hbWUsIHVpbnQzMl90IHRpbWVvdXQpCit7Cisg ICAgcmV0dXJuIF94Y194c3BsaWNlX2FjdGlvbih4Y2gsIG5hbWUsIFhTUExJQ0VfQUNUSU9OX1JF VkVSVCwgdGltZW91dCk7Cit9CisKK2ludCB4Y194c3BsaWNlX3VubG9hZCh4Y19pbnRlcmZhY2Ug KnhjaCwgY2hhciAqbmFtZSwgdWludDMyX3QgdGltZW91dCkKK3sKKyAgICByZXR1cm4gX3hjX3hz cGxpY2VfYWN0aW9uKHhjaCwgbmFtZSwgWFNQTElDRV9BQ1RJT05fVU5MT0FELCB0aW1lb3V0KTsK K30KKworaW50IHhjX3hzcGxpY2VfY2hlY2soeGNfaW50ZXJmYWNlICp4Y2gsIGNoYXIgKm5hbWUs IHVpbnQzMl90IHRpbWVvdXQpCit7CisgICAgcmV0dXJuIF94Y194c3BsaWNlX2FjdGlvbih4Y2gs IG5hbWUsIFhTUExJQ0VfQUNUSU9OX0NIRUNLLCB0aW1lb3V0KTsKK30KKworaW50IHhjX3hzcGxp Y2VfcmVwbGFjZSh4Y19pbnRlcmZhY2UgKnhjaCwgY2hhciAqbmFtZSwgdWludDMyX3QgdGltZW91 dCkKK3sKKyAgICByZXR1cm4gX3hjX3hzcGxpY2VfYWN0aW9uKHhjaCwgbmFtZSwgWFNQTElDRV9B Q1RJT05fUkVQTEFDRSwgdGltZW91dCk7Cit9CisKIC8qCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAg KiBtb2RlOiBDCi0tIAoyLjUuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5v cmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==