From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 90015 invoked by alias); 1 May 2015 13:37:53 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 89972 invoked by uid 89); 1 May 2015 13:37:52 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.3 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=ham version=3.3.2 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-ie0-f179.google.com Received: from mail-ie0-f179.google.com (HELO mail-ie0-f179.google.com) (209.85.223.179) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Fri, 01 May 2015 13:37:48 +0000 Received: by iecrt8 with SMTP id rt8so88998660iec.0; Fri, 01 May 2015 06:37:45 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.50.79.164 with SMTP id k4mr10261157igx.23.1430487465755; Fri, 01 May 2015 06:37:45 -0700 (PDT) Received: by 10.36.213.70 with HTTP; Fri, 1 May 2015 06:37:45 -0700 (PDT) Date: Fri, 01 May 2015 13:37:00 -0000 Message-ID: Subject: [libstdc++ PATCH] Implement observer_ptr From: Ville Voutilainen To: "gcc-patches@gcc.gnu.org" , libstdc++@gcc.gnu.org Content-Type: multipart/mixed; boundary=089e012947844142870515055189 X-SW-Source: 2015-05/txt/msg00048.txt.bz2 --089e012947844142870515055189 Content-Type: text/plain; charset=UTF-8 Content-length: 844 Tested on Linux-x64. 2015-05-01 Ville Voutilainen Implement observer_ptr. * include/Makefile.am: Add new exported header. * include/Makefile.in: Regenerate. * include/experimental/memory: New. * testsuite/experimental/memory/observer_ptr/assignment/assign.cc: Likewise. * testsuite/experimental/memory/observer_ptr/cons/cons.cc: Likewise. * testsuite/experimental/memory/observer_ptr/hash/hash.cc: Likewise. * testsuite/experimental/memory/observer_ptr/make_observer.cc: Likewise. * testsuite/experimental/memory/observer_ptr/relops/relops.cc: Likewise. * testsuite/experimental/memory/observer_ptr/requirements.cc: Likewise. * testsuite/experimental/memory/observer_ptr/swap/swap.cc: Likewise. * testsuite/experimental/memory/observer_ptr/typedefs.cc: Likewise. --089e012947844142870515055189 Content-Type: text/plain; charset=UTF-8; name="observer_ptr.diff" Content-Disposition: attachment; filename="observer_ptr.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_i95n99k00 Content-length: 31586 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxlLmFt IGIvbGlic3RkYysrLXYzL2luY2x1ZGUvTWFrZWZpbGUuYW0KaW5kZXggMjY3 NzEzMi4uNTk2MmUyMyAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2luY2x1 ZGUvTWFrZWZpbGUuYW0KKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvTWFr ZWZpbGUuYW0KQEAgLTY0Nyw2ICs2NDcsNyBAQCBleHBlcmltZW50YWxfaGVh ZGVycyA9IFwKIAkke2V4cGVyaW1lbnRhbF9zcmNkaXJ9L2FueSBcCiAJJHtl eHBlcmltZW50YWxfc3JjZGlyfS9jaHJvbm8gXAogCSR7ZXhwZXJpbWVudGFs X3NyY2Rpcn0vZnVuY3Rpb25hbCBcCisJJHtleHBlcmltZW50YWxfc3JjZGly fS9tZW1vcnkgXAogCSR7ZXhwZXJpbWVudGFsX3NyY2Rpcn0vb3B0aW9uYWwg XAogCSR7ZXhwZXJpbWVudGFsX3NyY2Rpcn0vcmF0aW8gXAogCSR7ZXhwZXJp bWVudGFsX3NyY2Rpcn0vc3RyaW5nX3ZpZXcgXApkaWZmIC0tZ2l0IGEvbGli c3RkYysrLXYzL2luY2x1ZGUvTWFrZWZpbGUuaW4gYi9saWJzdGRjKystdjMv aW5jbHVkZS9NYWtlZmlsZS5pbgppbmRleCA5YzQyM2NiLi4xYTEzYjg5IDEw MDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9NYWtlZmlsZS5pbgor KysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9NYWtlZmlsZS5pbgpAQCAtOTE0 LDYgKzkxNCw3IEBAIGV4cGVyaW1lbnRhbF9oZWFkZXJzID0gXAogCSR7ZXhw ZXJpbWVudGFsX3NyY2Rpcn0vYW55IFwKIAkke2V4cGVyaW1lbnRhbF9zcmNk aXJ9L2Nocm9ubyBcCiAJJHtleHBlcmltZW50YWxfc3JjZGlyfS9mdW5jdGlv bmFsIFwKKwkke2V4cGVyaW1lbnRhbF9zcmNkaXJ9L21lbW9yeSBcCiAJJHtl eHBlcmltZW50YWxfc3JjZGlyfS9vcHRpb25hbCBcCiAJJHtleHBlcmltZW50 YWxfc3JjZGlyfS9yYXRpbyBcCiAJJHtleHBlcmltZW50YWxfc3JjZGlyfS9z dHJpbmdfdmlldyBcCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvaW5jbHVk ZS9leHBlcmltZW50YWwvbWVtb3J5IGIvbGlic3RkYysrLXYzL2luY2x1ZGUv ZXhwZXJpbWVudGFsL21lbW9yeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwLi42YjJlNzhlCi0tLSAvZGV2L251bGwKKysrIGIvbGlic3Rk YysrLXYzL2luY2x1ZGUvZXhwZXJpbWVudGFsL21lbW9yeQpAQCAtMCwwICsx LDIzMyBAQAorLy8gPGV4cGVyaW1lbnRhbC9tZW1vcnk+IC0qLSBDKysgLSot CisKKy8vIENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg R05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisv LyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChh dCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBU aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBVbmRlciBTZWN0aW9uIDcgb2Yg R1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8v IHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGli cmFyeSBFeGNlcHRpb24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVk IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKy8vIFlvdSBz aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVu dGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bTsKKy8vIHNlZSB0aGUgZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVO VElNRSByZXNwZWN0aXZlbHkuICBJZiBub3QsIHNlZQorLy8gPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgZXhwZXJpbWVu dGFsL21lbW9yeQorICogIFRoaXMgaXMgYSBUUyBDKysgTGlicmFyeSBoZWFk ZXIuCisgKi8KKworLy8KKy8vIE40MzM2IFdvcmtpbmcgRHJhZnQsIEMrKyBF eHRlbnNpb25zIGZvciBMaWJyYXJ5IEZ1bmRhbWVudGFscywgVmVyc2lvbiAy CisvLworCisjaWZuZGVmIF9HTElCQ1hYX0VYUEVSSU1FTlRBTF9NRU1PUlkK KyNkZWZpbmUgX0dMSUJDWFhfRVhQRVJJTUVOVEFMX01FTU9SWSAxCisKKyNw cmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2lmIF9fY3BsdXNwbHVzIDw9 IDIwMTEwM0wKKyMgaW5jbHVkZSA8Yml0cy9jKysxNF93YXJuaW5nLmg+Cisj ZWxzZQorCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHR5cGVfdHJh aXRzPgorI2luY2x1ZGUgPHV0aWxpdHk+CisjaW5jbHVkZSA8ZnVuY3Rpb25h bD4KKworbmFtZXNwYWNlIHN0ZCBfR0xJQkNYWF9WSVNJQklMSVRZKGRlZmF1 bHQpCit7CituYW1lc3BhY2UgZXhwZXJpbWVudGFsCit7CitpbmxpbmUgbmFt ZXNwYWNlIGZ1bmRhbWVudGFsc192MgoreworX0dMSUJDWFhfQkVHSU5fTkFN RVNQQUNFX1ZFUlNJT04KKwordGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4gY2xh c3Mgb2JzZXJ2ZXJfcHRyIHsKK3B1YmxpYzoKKyAgLy8gcHVibGlzaCBvdXIg dGVtcGxhdGUgcGFyYW1ldGVyIGFuZCB2YXJpYXRpb25zIHRoZXJlb2YKKyAg dXNpbmcgZWxlbWVudF90eXBlID0gX1RwOworICB1c2luZyBfX3BvaW50ZXIg PSBhZGRfcG9pbnRlcl90PF9UcD47ICAgICAgICAgICAgLy8gZXhwb3NpdGlv bi1vbmx5CisgIHVzaW5nIF9fcmVmZXJlbmNlID0gYWRkX2x2YWx1ZV9yZWZl cmVuY2VfdDxfVHA+OyAvLyBleHBvc2l0aW9uLW9ubHkKKyAgCisgIC8vIDMu Mi4yLCBvYnNlcnZlcl9wdHIgY29uc3RydWN0b3JzCisgIC8vIGRlZmF1bHQg Y+KAmXRvcgorICBjb25zdGV4cHIgb2JzZXJ2ZXJfcHRyKCkgbm9leGNlcHQK KyAgOiBfX3QoKQorICB7IH0KKworICAvLyBwb2ludGVyLWFjY2VwdGluZyBj 4oCZdG9ycworICBjb25zdGV4cHIgb2JzZXJ2ZXJfcHRyKG51bGxwdHJfdCkg bm9leGNlcHQKKyAgOiBfX3QoKQorICB7IH0KKyAgCisgIGNvbnN0ZXhwciBl eHBsaWNpdCBvYnNlcnZlcl9wdHIoX19wb2ludGVyIF9fcCkgbm9leGNlcHQK KyAgOiBfX3QoX19wKQorICB7IH0KKworICAvLyBjb3B5aW5nIGPigJl0b3Jz IChpbiBhZGRpdGlvbiB0byBjb21waWxlci1nZW5lcmF0ZWQgY29weSBj4oCZ dG9yKQorICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1VwLAorICAgICAgICAgICAg dHlwZW5hbWUgPSB0eXBlbmFtZSBlbmFibGVfaWY8CisgICAgICAgICAgICAg IGlzX2NvbnZlcnRpYmxlPHR5cGVuYW1lIGFkZF9wb2ludGVyPF9VcD46OnR5 cGUsIF9fcG9pbnRlcgorICAgICAgICAgICAgICA+Ojp2YWx1ZQorICAgICAg ICAgICAgPjo6dHlwZT4gCisgIGNvbnN0ZXhwciBvYnNlcnZlcl9wdHIob2Jz ZXJ2ZXJfcHRyPF9VcD4gX19wKSBub2V4Y2VwdAorICA6IF9fdChfX3AuZ2V0 KCkpCisgIHsKKyAgfQorCisgIC8vIDMuMi4zLCBvYnNlcnZlcl9wdHIgb2Jz ZXJ2ZXJzCisgIGNvbnN0ZXhwciBfX3BvaW50ZXIgZ2V0KCkgY29uc3Qgbm9l eGNlcHQKKyAgeworICAgIHJldHVybiBfX3Q7CisgIH0KKworICBjb25zdGV4 cHIgX19yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QKKyAgeworICAgIHJl dHVybiAqZ2V0KCk7CisgIH0KKworICBjb25zdGV4cHIgX19wb2ludGVyIG9w ZXJhdG9yLT4oKSBjb25zdCBub2V4Y2VwdAorICB7CisgICAgcmV0dXJuIGdl dCgpOworICB9CisKKyAgY29uc3RleHByIGV4cGxpY2l0IG9wZXJhdG9yIGJv b2woKSBjb25zdCBub2V4Y2VwdAorICB7CisgICAgcmV0dXJuIGdldCgpICE9 IG51bGxwdHI7CisgIH0KKworICAvLyAzLjIuNCwgb2JzZXJ2ZXJfcHRyIGNv bnZlcnNpb25zCisgIGNvbnN0ZXhwciBleHBsaWNpdCBvcGVyYXRvciBfX3Bv aW50ZXIoKSBjb25zdCBub2V4Y2VwdAorICB7CisgICAgcmV0dXJuIGdldCgp OworICB9CisKKyAgLy8gMy4yLjUsIG9ic2VydmVyX3B0ciBtb2RpZmllcnMK KyAgY29uc3RleHByIF9fcG9pbnRlciByZWxlYXNlKCkgbm9leGNlcHQKKyAg eworICAgIF9fcG9pbnRlciB0bXAgPSBnZXQoKTsKKyAgICByZXNldCgpOwor ICAgIHJldHVybiB0bXA7CisgIH0KKworICBjb25zdGV4cHIgdm9pZCByZXNl dChfX3BvaW50ZXIgX19wID0gbnVsbHB0cikgbm9leGNlcHQKKyAgeworICAg IF9fdCA9IF9fcDsKKyAgfQorCisgIGNvbnN0ZXhwciB2b2lkIHN3YXAob2Jz ZXJ2ZXJfcHRyJiBfX3ApIG5vZXhjZXB0CisgIHsKKyAgICBzdGQ6OnN3YXAo X190LCBfX3AuX190KTsKKyAgfQorCitwcml2YXRlOgorICBfX3BvaW50ZXIg X190OworfTsgLy8gb2JzZXJ2ZXJfcHRyPD4KKworICB0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgorICB2b2lkIHN3YXAob2JzZXJ2ZXJfcHRyPF9UcD4mIF9fcDEs IG9ic2VydmVyX3B0cjxfVHA+JiBfX3AyKSBub2V4Y2VwdAorICB7CisgICAg X19wMS5zd2FwKF9fcDIpOworICB9CisgICAgCisgIHRlbXBsYXRlIDxjbGFz cyBfVHA+IG9ic2VydmVyX3B0cjxfVHA+IG1ha2Vfb2JzZXJ2ZXIoX1RwKiBf X3ApIG5vZXhjZXB0CisgIHsKKyAgICByZXR1cm4gb2JzZXJ2ZXJfcHRyPF9U cD4oX19wKTsKKyAgfQorICAKKyAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX1VwPgorICBib29sIG9wZXJhdG9yPT0ob2JzZXJ2ZXJfcHRyPF9UcD4g X19wMSwgb2JzZXJ2ZXJfcHRyPF9VcD4gX19wMikKKyAgeworICAgIHJldHVy biBfX3AxLmdldCgpID09IF9fcDIuZ2V0KCk7CisgIH0KKyAgCisgIHRlbXBs YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9VcD4KKyAgYm9vbCBvcGVyYXRvciE9 KG9ic2VydmVyX3B0cjxfVHA+IF9fcDEsIG9ic2VydmVyX3B0cjxfVXA+IF9f cDIpCisgIHsKKyAgcmV0dXJuICEoX19wMSA9PSBfX3AyKTsKKyAgfQorCisg IHRlbXBsYXRlIDxjbGFzcyBfVHA+CisgIGJvb2wgb3BlcmF0b3I9PShvYnNl cnZlcl9wdHI8X1RwPiBfX3AsIG51bGxwdHJfdCkgbm9leGNlcHQKKyAgewor ICAgIHJldHVybiAhX19wOworICB9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9U cD4KKyAgYm9vbCBvcGVyYXRvcj09KG51bGxwdHJfdCwgb2JzZXJ2ZXJfcHRy PF9UcD4gX19wKSBub2V4Y2VwdAorICB7CisgICAgcmV0dXJuICFfX3A7Cisg IH0KKworICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgorICBib29sIG9wZXJhdG9y IT0ob2JzZXJ2ZXJfcHRyPF9UcD4gX19wLCBudWxscHRyX3QpIG5vZXhjZXB0 CisgIHsKKyAgICByZXR1cm4gYm9vbChfX3ApOworICB9CisKKyAgdGVtcGxh dGUgPGNsYXNzIF9UcD4KKyAgYm9vbCBvcGVyYXRvciE9KG51bGxwdHJfdCwg b2JzZXJ2ZXJfcHRyPF9UcD4gX19wKSBub2V4Y2VwdAorICB7CisgICAgcmV0 dXJuIGJvb2woX19wKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9VcD4KKyAgYm9vbCBvcGVyYXRvcjwob2JzZXJ2ZXJfcHRyPF9U cD4gX19wMSwgb2JzZXJ2ZXJfcHRyPF9VcD4gX19wMikKKyAgeworICAgIHJl dHVybiBzdGQ6Omxlc3M8dHlwZW5hbWUgY29tbW9uX3R5cGU8dHlwZW5hbWUg YWRkX3BvaW50ZXI8X1RwPjo6dHlwZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGFkZF9wb2ludGVyPF9V cD46OnR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgID46OnR5cGUKKyAgICAgICAgICAgICAgICAgICAgID57fShfX3Ax LmdldCgpLCBfX3AyLmdldCgpKTsKKyAgfQorCisgIHRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9VcD4KKyAgYm9vbCBvcGVyYXRvcj4ob2JzZXJ2ZXJf cHRyPF9UcD4gX19wMSwgb2JzZXJ2ZXJfcHRyPF9VcD4gX19wMikKKyAgewor ICAgIHJldHVybiBfX3AyIDwgX19wMTsKKyAgfQorCisgIHRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9VcD4KKyAgYm9vbCBvcGVyYXRvcjw9KG9ic2Vy dmVyX3B0cjxfVHA+IF9fcDEsIG9ic2VydmVyX3B0cjxfVXA+IF9fcDIpCisg IHsKKyAgICByZXR1cm4gIShfX3AyIDwgX19wMSk7CisgIH0KKworICB0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVXA+CisgIGJvb2wgb3BlcmF0b3I+ PShvYnNlcnZlcl9wdHI8X1RwPiBfX3AxLCBvYnNlcnZlcl9wdHI8X1VwPiBf X3AyKQorICB7CisgICAgcmV0dXJuICEoX19wMSA8IF9fcDIpOworICB9CisK K19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1lc3Bh Y2UgZnVuZGFtZW50YWxzX3YyCit9IC8vIG5hbWVzcGFjZSBleHBlcmltZW50 YWwKKwordGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4gCisgIHN0cnVjdCBoYXNo PGV4cGVyaW1lbnRhbDo6b2JzZXJ2ZXJfcHRyPF9UcD4+CisgIHsKKyAgICB1 c2luZyByZXN1bHRfdHlwZSA9IHNpemVfdDsKKyAgICB1c2luZyBhcmd1bWVu dF90eXBlID0gZXhwZXJpbWVudGFsOjpvYnNlcnZlcl9wdHI8X1RwPjsKKyAg ICBzaXplX3QKKyAgICAgIG9wZXJhdG9yKCkoY29uc3QgZXhwZXJpbWVudGFs OjpvYnNlcnZlcl9wdHI8X1RwPiYgX190KSBjb25zdAorICAgICAgbm9leGNl cHQobm9leGNlcHQoaGFzaDx0eXBlbmFtZSBhZGRfcG9pbnRlcjxfVHA+Ojp0 eXBlPiB7fShfX3QuZ2V0KCkpKSkKKyAgICB7CisgICAgICByZXR1cm4gaGFz aDx0eXBlbmFtZSBhZGRfcG9pbnRlcjxfVHA+Ojp0eXBlPiB7fShfX3QuZ2V0 KCkpOworICAgIH0KKyAgICAKKyAgfTsKKworfSAvLyBuYW1lc3BhY2Ugc3Rk CisKKyNlbmRpZiAvLyBfX2NwbHVzcGx1cyA8PSAyMDExMDNMCisKKyNlbmRp ZiAvLyBfR0xJQkNYWF9FWFBFUklNRU5UQUxfTUVNT1JZCmRpZmYgLS1naXQg YS9saWJzdGRjKystdjMvdGVzdHN1aXRlL2V4cGVyaW1lbnRhbC9tZW1vcnkv b2JzZXJ2ZXJfcHRyL2Fzc2lnbm1lbnQvYXNzaWduLmNjIGIvbGlic3RkYysr LXYzL3Rlc3RzdWl0ZS9leHBlcmltZW50YWwvbWVtb3J5L29ic2VydmVyX3B0 ci9hc3NpZ25tZW50L2Fzc2lnbi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi42Y2NmNDA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGli c3RkYysrLXYzL3Rlc3RzdWl0ZS9leHBlcmltZW50YWwvbWVtb3J5L29ic2Vy dmVyX3B0ci9hc3NpZ25tZW50L2Fzc2lnbi5jYwpAQCAtMCwwICsxLDg5IEBA CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9Z251KysxNCIgfQorLy8geyBkZy1k byBydW4gfQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQg b2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMg ZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQor Ly8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz LCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4K KworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv ZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgbW92ZWRfdG8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl IHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93 d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjaW5jbHVkZSA8ZXhwZXJpbWVu dGFsL21lbW9yeT4KKyNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KKwor dXNpbmcgc3RkOjpleHBlcmltZW50YWw6Om9ic2VydmVyX3B0cjsKKworc3Ry dWN0IEIge307CitzdHJ1Y3QgRCA6IEIge307CisKK3ZvaWQgdGVzdDAxKCkK K3sKKyAgb2JzZXJ2ZXJfcHRyPGludD4gYSwgYjsKKyAgYSA9IGI7CisgIFZF UklGWShhID09IGIpOworfQorCit2b2lkIHRlc3QwMigpCit7CisgIGludCB4 e307CisgIG9ic2VydmVyX3B0cjxpbnQ+IGE7CisgIG9ic2VydmVyX3B0cjxp bnQ+IGJ7Jnh9OworICBWRVJJRlkoYSAhPSBiKTsKKyAgYSA9IGI7CisgIFZF UklGWShhID09IGIpOworfQorCit2b2lkIHRlc3QwMygpCit7CisgIGludCB4 e307CisgIG9ic2VydmVyX3B0cjxjb25zdCBpbnQ+IGE7CisgIG9ic2VydmVy X3B0cjxpbnQ+IGJ7Jnh9OworICBWRVJJRlkoYSAhPSBiKTsKKyAgYSA9IGI7 CisgIFZFUklGWShhID09IGIpOworfQorCit2b2lkIHRlc3QwNCgpCit7Cisg IEQgeHt9OworICBvYnNlcnZlcl9wdHI8Qj4gYTsKKyAgb2JzZXJ2ZXJfcHRy PEQ+IGJ7Jnh9OworICBWRVJJRlkoYSAhPSBiKTsKKyAgYSA9IGI7CisgIFZF UklGWShhID09IGIpOworfQorCitjb25zdGV4cHIgYm9vbCB0ZXN0MDVfaGVs cGVyKG9ic2VydmVyX3B0cjxjb25zdCBpbnQ+IGEsIAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBvYnNlcnZlcl9wdHI8Y29uc3QgaW50PiBiKQor eworICBhID0gYjsKKyAgcmV0dXJuIChhLmdldCgpID09IGIuZ2V0KCkpOwor fQorCit2b2lkIHRlc3QwNSgpCit7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50 IHh7fTsKKyAgY29uc3RleHByIG9ic2VydmVyX3B0cjxjb25zdCBpbnQ+IGE7 CisgIGNvbnN0ZXhwciBvYnNlcnZlcl9wdHI8Y29uc3QgaW50PiBieyZ4fTsK KyAgY29uc3RleHByIGJvb2wgYXNzaWduZWQgPSB0ZXN0MDVfaGVscGVyKGEs IGIpOworICBWRVJJRlkoYXNzaWduZWQpOworfQorCitpbnQgbWFpbigpCit7 CisgIHRlc3QwMSgpOworICB0ZXN0MDIoKTsKKyAgdGVzdDAzKCk7CisgIHRl c3QwNCgpOworICB0ZXN0MDUoKTsKK30KZGlmZiAtLWdpdCBhL2xpYnN0ZGMr Ky12My90ZXN0c3VpdGUvZXhwZXJpbWVudGFsL21lbW9yeS9vYnNlcnZlcl9w dHIvY29ucy9jb25zLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS9leHBl cmltZW50YWwvbWVtb3J5L29ic2VydmVyX3B0ci9jb25zL2NvbnMuY2MKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZjNDM1YgotLS0g L2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvZXhwZXJp bWVudGFsL21lbW9yeS9vYnNlcnZlcl9wdHIvY29ucy9jb25zLmNjCkBAIC0w LDAgKzEsOTIgQEAKKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1nbnUrKzE0IiB9 CisvLyB7IGRnLWRvIHJ1biB9CisKKy8vIENvcHlyaWdodCAoQykgMjAxNSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZp bGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMg bGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl ciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRl ciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBtb3ZlZF90byBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBs aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisv LyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyNpbmNsdWRl IDxleHBlcmltZW50YWwvbWVtb3J5PgorI2luY2x1ZGUgPHRlc3RzdWl0ZV9o b29rcy5oPgorI2luY2x1ZGUgPHV0aWxpdHk+CisKK3VzaW5nIHN0ZDo6ZXhw ZXJpbWVudGFsOjpvYnNlcnZlcl9wdHI7CisKK3N0cnVjdCBCIHt9Oworc3Ry dWN0IEQgOiBCIHt9OworCit2b2lkIHRlc3QwMSgpCit7CisgIG9ic2VydmVy X3B0cjxpbnQ+IGE7CisgIFZFUklGWSghYSk7CisgIG9ic2VydmVyX3B0cjxp bnQ+IGJ7bnVsbHB0cn07CisgIFZFUklGWSghYik7Cit9CisKK3ZvaWQgdGVz dDAyKCkKK3sKKyAgaW50IHh7fTsKKyAgb2JzZXJ2ZXJfcHRyPGludD4gYXsm eH07CisgIG9ic2VydmVyX3B0cjxpbnQ+IGJ7YX07CisgIFZFUklGWShhID09 IGIpOworfQorCit2b2lkIHRlc3QwMygpCit7CisgIGludCB4e307CisgIG9i c2VydmVyX3B0cjxpbnQ+IGE7CisgIG9ic2VydmVyX3B0cjxjb25zdCBpbnQ+ IGJ7YX07CisgIFZFUklGWShhID09IGIpOworfQorCit2b2lkIHRlc3QwNCgp Cit7CisgIEQgeHt9OworICBvYnNlcnZlcl9wdHI8RD4gYXsmeH07CisgIG9i c2VydmVyX3B0cjxCPiBie2F9OworICBWRVJJRlkoYSA9PSBiKTsKK30KKwor dm9pZCB0ZXN0MDUoKQoreworICBEIHh7fTsKKyAgb2JzZXJ2ZXJfcHRyPEQ+ IGF7Jnh9OworICBvYnNlcnZlcl9wdHI8Qj4gYntzdGQ6Om1vdmUoYSl9Owor ICBWRVJJRlkoYSA9PSBiKTsKK30KKwordm9pZCB0ZXN0MDYoKQoreworICBz dGF0aWMgY29uc3RleHByIEQgeHt9OworICBjb25zdGV4cHIgb2JzZXJ2ZXJf cHRyPGNvbnN0IEQ+IGF7Jnh9OworICBjb25zdGV4cHIgb2JzZXJ2ZXJfcHRy PGNvbnN0IEI+IGJ7c3RkOjptb3ZlKGEpfTsKKyAgVkVSSUZZKGEgPT0gYik7 CisgIGNvbnN0ZXhwciBvYnNlcnZlcl9wdHI8Y29uc3QgQj4gY3thfTsKKyAg VkVSSUZZKGEgPT0gYiAmJiBhID09IGMgJiYgYiA9PSBjKTsKKyAgY29uc3Rl eHByIG9ic2VydmVyX3B0cjxpbnQ+IGQ7CisgIGNvbnN0ZXhwciBvYnNlcnZl cl9wdHI8aW50PiBle251bGxwdHJ9OworICBWRVJJRlkoIWQpOworICBWRVJJ RlkoIWUpOworfQorCitpbnQgbWFpbigpCit7CisgIHRlc3QwMSgpOworICB0 ZXN0MDIoKTsKKyAgdGVzdDAzKCk7CisgIHRlc3QwNCgpOworICB0ZXN0MDUo KTsKKyAgdGVzdDA2KCk7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMv dGVzdHN1aXRlL2V4cGVyaW1lbnRhbC9tZW1vcnkvb2JzZXJ2ZXJfcHRyL2hh c2gvaGFzaC5jYyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvZXhwZXJpbWVu dGFsL21lbW9yeS9vYnNlcnZlcl9wdHIvaGFzaC9oYXNoLmNjCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViMzE4ZmMKLS0tIC9kZXYv bnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlL2V4cGVyaW1lbnRh bC9tZW1vcnkvb2JzZXJ2ZXJfcHRyL2hhc2gvaGFzaC5jYwpAQCAtMCwwICsx LDQ2IEBACisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9Z251KysxNCIgfQorLy8g eyBkZy1kbyBydW4gfQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxlIGlz IHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxpYnJh cnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVy c2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgbW92ZWRfdG8gb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGlicmFy eTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8gPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjaW5jbHVkZSA8ZXhw ZXJpbWVudGFsL21lbW9yeT4KKyNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9va3Mu aD4KKwordXNpbmcgc3RkOjpleHBlcmltZW50YWw6Om9ic2VydmVyX3B0cjsK Kworc3RydWN0IEIge307CitzdHJ1Y3QgRCA6IEIge307CisKK3ZvaWQgdGVz dDAxKCkKK3sKKyAgb2JzZXJ2ZXJfcHRyPGludD4gYTsKKyAgVkVSSUZZKHN0 ZDo6aGFzaDxvYnNlcnZlcl9wdHI8aW50Pj57fShhKSA9PSBzdGQ6Omhhc2g8 aW50Kj57fShudWxscHRyKSk7Cit9CisKK3ZvaWQgdGVzdDAyKCkKK3sKKyAg aW50IHh7fTsKKyAgb2JzZXJ2ZXJfcHRyPGludD4gYXsmeH07CisgIFZFUklG WShzdGQ6Omhhc2g8b2JzZXJ2ZXJfcHRyPGludD4+e30oYSkgPT0gc3RkOjpo YXNoPGludCo+e30oJngpKTsKK30KKworaW50IG1haW4oKQoreworICB0ZXN0 MDEoKTsKKyAgdGVzdDAyKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKyst djMvdGVzdHN1aXRlL2V4cGVyaW1lbnRhbC9tZW1vcnkvb2JzZXJ2ZXJfcHRy L21ha2Vfb2JzZXJ2ZXIuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlL2V4 cGVyaW1lbnRhbC9tZW1vcnkvb2JzZXJ2ZXJfcHRyL21ha2Vfb2JzZXJ2ZXIu Y2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYwNzVm YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUv ZXhwZXJpbWVudGFsL21lbW9yeS9vYnNlcnZlcl9wdHIvbWFrZV9vYnNlcnZl ci5jYwpAQCAtMCwwICsxLDMyIEBACisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9 Z251KysxNCIgfQorLy8geyBkZy1kbyBydW4gfQorCisvLyBDb3B5cmlnaHQg KEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLwor Ly8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJh cnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhl CisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisv LyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRp c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws CisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9y IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQor Ly8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgbW92ZWRfdG8g b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3 aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYg bm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgor CisjaW5jbHVkZSA8ZXhwZXJpbWVudGFsL21lbW9yeT4KKyNpbmNsdWRlIDx0 ZXN0c3VpdGVfaG9va3MuaD4KKworaW50IG1haW4oKQoreworICBjb25zdCBp bnQgaSA9IDQyOworICBhdXRvIG8gPSBzdGQ6OmV4cGVyaW1lbnRhbDo6bWFr ZV9vYnNlcnZlcigmaSk7CisgIHN0YXRpY19hc3NlcnQoIHN0ZDo6aXNfc2Ft ZTxkZWNsdHlwZShvKSwKKyAgICAgICAgICAgICAgICAgc3RkOjpleHBlcmlt ZW50YWw6Om9ic2VydmVyX3B0cjxjb25zdCBpbnQ+PigpLCAiIiApOworICBW RVJJRlkoIG8gJiYgKm8gPT0gNDIgKTsKKyAgVkVSSUZZKCBvLmdldCgpID09 ICZpICk7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvdGVzdHN1aXRl L2V4cGVyaW1lbnRhbC9tZW1vcnkvb2JzZXJ2ZXJfcHRyL3JlbG9wcy9yZWxv cHMuY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlL2V4cGVyaW1lbnRhbC9t ZW1vcnkvb2JzZXJ2ZXJfcHRyL3JlbG9wcy9yZWxvcHMuY2MKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNmMzlkZQotLS0gL2Rldi9u dWxsCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvZXhwZXJpbWVudGFs L21lbW9yeS9vYnNlcnZlcl9wdHIvcmVsb3BzL3JlbG9wcy5jYwpAQCAtMCww ICsxLDgwIEBACisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9Z251KysxNCIgfQor Ly8geyBkZy1kbyBydW4gfQorCisvLyBDb3B5cmlnaHQgKEMpIDIwMTUgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxl IGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxp YnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIg dmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lU SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gWW91 IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgbW92ZWRfdG8gb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGli cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8g PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjaW5jbHVkZSA8 ZXhwZXJpbWVudGFsL21lbW9yeT4KKyNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9v a3MuaD4KKwordXNpbmcgc3RkOjpleHBlcmltZW50YWw6Om9ic2VydmVyX3B0 cjsKKwordm9pZCB0ZXN0MDEoKQoreworICBvYnNlcnZlcl9wdHI8aW50PiBh LCBiOworICBWRVJJRlkoYSA9PSBiKTsKK30KKwordm9pZCB0ZXN0MDIoKQor eworICBpbnQgeFsyXXt9OworICBvYnNlcnZlcl9wdHI8aW50PiBheyZ4WzBd fTsKKyAgb2JzZXJ2ZXJfcHRyPGludD4gYnsmeFsxXX07CisgIFZFUklGWShh ICE9IGIpOworICBWRVJJRlkoYSA8IGIpOworICBWRVJJRlkoYSA8PSBiKTsK KyAgVkVSSUZZKGIgPj0gYSk7CisgIFZFUklGWShiID4gYSk7Cit9CisKK3Zv aWQgdGVzdDAzKCkKK3sKKyAgaW50IHh7fTsKKyAgb2JzZXJ2ZXJfcHRyPGlu dD4gYXsmeH07CisgIG9ic2VydmVyX3B0cjxpbnQ+IGJ7Jnh9OworICBWRVJJ RlkoYSA9PSBiKTsKK30KKwordm9pZCB0ZXN0MDQoKQoreworICBzdGF0aWMg Y29uc3RleHByIGludCB4WzJde307CisgIGNvbnN0ZXhwciBvYnNlcnZlcl9w dHI8Y29uc3QgaW50PiBheyZ4WzBdfTsKKyAgY29uc3RleHByIG9ic2VydmVy X3B0cjxjb25zdCBpbnQ+IGJ7JnhbMV19OworICBWRVJJRlkoYSAhPSBiKTsK KyAgVkVSSUZZKGEgPCBiKTsKKyAgVkVSSUZZKGEgPD0gYik7CisgIFZFUklG WShiID49IGEpOworICBWRVJJRlkoYiA+IGEpOworfQorCit2b2lkIHRlc3Qw NSgpCit7CisgIHN0YXRpYyBjb25zdGV4cHIgaW50IHh7fTsKKyAgY29uc3Rl eHByIG9ic2VydmVyX3B0cjxjb25zdCBpbnQ+IGF7Jnh9OworICBjb25zdGV4 cHIgb2JzZXJ2ZXJfcHRyPGNvbnN0IGludD4gYnsmeH07CisgIFZFUklGWShh ID09IGIpOworfQorCisKK2ludCBtYWluKCkKK3sKKyAgdGVzdDAxKCk7Cisg IHRlc3QwMigpOworICB0ZXN0MDMoKTsKKyAgdGVzdDA0KCk7CisgIHRlc3Qw NSgpOworfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS9l eHBlcmltZW50YWwvbWVtb3J5L29ic2VydmVyX3B0ci9yZXF1aXJlbWVudHMu Y2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlL2V4cGVyaW1lbnRhbC9tZW1v cnkvb2JzZXJ2ZXJfcHRyL3JlcXVpcmVtZW50cy5jYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmZmY2FiCi0tLSAvZGV2L251bGwK KysrIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS9leHBlcmltZW50YWwvbWVt b3J5L29ic2VydmVyX3B0ci9yZXF1aXJlbWVudHMuY2MKQEAgLTAsMCArMSw2 NSBAQAorLy8geyBkZy1vcHRpb25zICItc3RkPWdudSsrMTQiIH0KKy8vIHsg ZGctZG8gY29tcGlsZSB9CisKKy8vIENvcHlyaWdodCAoQykgMjAxNSBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8vCisvLyBUaGlzIGZpbGUg aXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGli cmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQg YnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2 ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2 ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBtb3ZlZF90byBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKKy8vIHdpdGggdGhpcyBsaWJy YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisvLyA8 aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyNpbmNsdWRlIDxl eHBlcmltZW50YWwvbWVtb3J5PgorCit1c2luZyBzdGQ6OmV4cGVyaW1lbnRh bDo6b2JzZXJ2ZXJfcHRyOworCitzdHJ1Y3Qgbm9udHJpdmlhbCB7bm9udHJp dmlhbCgpIHt9fTsKK3N0cnVjdCBvdGhlciB7fTsKK3N0cnVjdCBiYXNlIHt9 Oworc3RydWN0IGRlcml2ZWQgOiBiYXNlIHt9OworCitzdGF0aWNfYXNzZXJ0 KCFzdGQ6OmlzX3RyaXZpYWxseV9jb25zdHJ1Y3RpYmxlPAorICAgICAgICAg ICAgICBvYnNlcnZlcl9wdHI8bm9udHJpdmlhbD4+Ojp2YWx1ZSwgIiIpOwor c3RhdGljX2Fzc2VydChzdGQ6OmlzX3RyaXZpYWxseV9jb3B5YWJsZTwKKyAg ICAgICAgICAgICAgb2JzZXJ2ZXJfcHRyPG5vbnRyaXZpYWw+Pjo6dmFsdWUs ICIiKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc190cml2aWFsbHlfZGVzdHJ1 Y3RpYmxlPAorICAgICAgICAgICAgICBvYnNlcnZlcl9wdHI8bm9udHJpdmlh bD4+Ojp2YWx1ZSwgIiIpOworCitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29u c3RydWN0aWJsZTwKKyAgICAgICAgICAgICAgb2JzZXJ2ZXJfcHRyPG5vbnRy aXZpYWw+LCBub250cml2aWFsKj46OnZhbHVlLAorICAgICAgICAgICAgICAi Iik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfY29uc3RydWN0aWJsZTxvYnNl cnZlcl9wdHI8YmFzZT4sIGJhc2UqPjo6dmFsdWUsICIiKTsKK3N0YXRpY19h c3NlcnQoc3RkOjppc19jb25zdHJ1Y3RpYmxlPG9ic2VydmVyX3B0cjxiYXNl PiwgZGVyaXZlZCo+Ojp2YWx1ZSwgIiIpOworc3RhdGljX2Fzc2VydCghc3Rk Ojppc19jb25zdHJ1Y3RpYmxlPG9ic2VydmVyX3B0cjxiYXNlPiwgb3RoZXIq Pjo6dmFsdWUsICIiKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19jb25zdHJ1 Y3RpYmxlPAorICAgICAgICAgICAgICAgIG9ic2VydmVyX3B0cjxiYXNlPiwg b2JzZXJ2ZXJfcHRyPGJhc2U+Pjo6dmFsdWUsICIiKTsKK3N0YXRpY19hc3Nl cnQoc3RkOjppc19jb25zdHJ1Y3RpYmxlPAorICAgICAgICAgICAgICAgIG9i c2VydmVyX3B0cjxiYXNlPiwgb2JzZXJ2ZXJfcHRyPGRlcml2ZWQ+Pjo6dmFs dWUsICIiKTsKK3N0YXRpY19hc3NlcnQoIXN0ZDo6aXNfY29uc3RydWN0aWJs ZTwKKyAgICAgICAgICAgICAgICBvYnNlcnZlcl9wdHI8YmFzZT4sIG9ic2Vy dmVyX3B0cjxvdGhlcj4+Ojp2YWx1ZSwgIiIpOworCitzdGF0aWNfYXNzZXJ0 KCFzdGQ6OmlzX2Fzc2lnbmFibGU8CisgICAgICAgICAgICAgIG9ic2VydmVy X3B0cjxub250cml2aWFsPiwgbm9udHJpdmlhbCo+Ojp2YWx1ZSwKKyAgICAg ICAgICAgICAgIiIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX2Fzc2lnbmFi bGU8CisgICAgICAgICAgICAgIG9ic2VydmVyX3B0cjxub250cml2aWFsPiwg b2JzZXJ2ZXJfcHRyPG5vbnRyaXZpYWw+Pjo6dmFsdWUsCisgICAgICAgICAg ICAgICIiKTsKK3N0YXRpY19hc3NlcnQoc3RkOjppc19hc3NpZ25hYmxlPG9i c2VydmVyX3B0cjxiYXNlPiwgCisgICAgICAgICAgICAgIG9ic2VydmVyX3B0 cjxiYXNlPj46OnZhbHVlLCAiIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNf YXNzaWduYWJsZTxvYnNlcnZlcl9wdHI8YmFzZT4sIAorICAgICAgICAgICAg ICBvYnNlcnZlcl9wdHI8ZGVyaXZlZD4+Ojp2YWx1ZSwgIiIpOworc3RhdGlj X2Fzc2VydCghc3RkOjppc19hc3NpZ25hYmxlPAorICAgICAgICAgICAgICAg IG9ic2VydmVyX3B0cjxiYXNlPiwgb2JzZXJ2ZXJfcHRyPG90aGVyPj46OnZh bHVlLCAiIik7CitzdGF0aWNfYXNzZXJ0KHN0ZDo6aXNfYXNzaWduYWJsZTxv YnNlcnZlcl9wdHI8Y29uc3QgaW50PiwgCisgICAgICAgICAgICAgIG9ic2Vy dmVyX3B0cjxpbnQ+Pjo6dmFsdWUsICIiKTsKK3N0YXRpY19hc3NlcnQoIXN0 ZDo6aXNfYXNzaWduYWJsZTxvYnNlcnZlcl9wdHI8aW50PiwgCisgICAgICAg ICAgICAgIG9ic2VydmVyX3B0cjxjb25zdCBpbnQ+Pjo6dmFsdWUsICIiKTsK ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvZXhwZXJpbWVu dGFsL21lbW9yeS9vYnNlcnZlcl9wdHIvc3dhcC9zd2FwLmNjIGIvbGlic3Rk YysrLXYzL3Rlc3RzdWl0ZS9leHBlcmltZW50YWwvbWVtb3J5L29ic2VydmVy X3B0ci9zd2FwL3N3YXAuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uZjdiZmMyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMr Ky12My90ZXN0c3VpdGUvZXhwZXJpbWVudGFsL21lbW9yeS9vYnNlcnZlcl9w dHIvc3dhcC9zd2FwLmNjCkBAIC0wLDAgKzEsNjcgQEAKKy8vIHsgZGctb3B0 aW9ucyAiLXN0ZD1nbnUrKzE0IiB9CisvLyB7IGRnLWRvIHJ1biB9CisKKy8v IENvcHlyaWdodCAoQykgMjAxNSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s IEluYy4KKy8vCisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElT TyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBp dCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3Vy IG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxp YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg YSBtb3ZlZF90byBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YWxvbmcKKy8vIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q WUlORzMuICBJZiBub3Qgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCisKKyNpbmNsdWRlIDxleHBlcmltZW50YWwvbWVtb3J5Pgor I2luY2x1ZGUgPHRlc3RzdWl0ZV9ob29rcy5oPgorCit1c2luZyBzdGQ6OmV4 cGVyaW1lbnRhbDo6b2JzZXJ2ZXJfcHRyOworCitzdHJ1Y3QgQiB7fTsKK3N0 cnVjdCBEIDogQiB7fTsKKwordm9pZCB0ZXN0MDEoKQoreworICBvYnNlcnZl cl9wdHI8aW50PiBhLCBiOworICBWRVJJRlkoYSA9PSBiKTsKKyAgc3dhcChh LCBiKTsKKyAgVkVSSUZZKGEgPT0gYik7Cit9CisKK3ZvaWQgdGVzdDAyKCkK K3sKKyAgaW50IHh7fTsKKyAgb2JzZXJ2ZXJfcHRyPGludD4gYTsKKyAgb2Jz ZXJ2ZXJfcHRyPGludD4gYnsmeH07CisgIFZFUklGWSghYSk7CisgIFZFUklG WShiKTsKKyAgc3dhcChhLCBiKTsKKyAgVkVSSUZZKGEpOworICBWRVJJRlko IWIpOworfQorCit2b2lkIHRlc3QwMygpCit7CisgIGludCB4WzJdezEsMn07 CisgIG9ic2VydmVyX3B0cjxpbnQ+IGF7JnhbMF19OworICBvYnNlcnZlcl9w dHI8aW50PiBieyZ4WzFdfTsKKyAgVkVSSUZZKCphID09IDEpOworICBWRVJJ RlkoKmIgPT0gMik7CisgIHN3YXAoYSwgYik7CisgIFZFUklGWSgqYSA9PSAy KTsKKyAgVkVSSUZZKCpiID09IDEpOworfQorCisKK2ludCBtYWluKCkKK3sK KyAgdGVzdDAxKCk7CisgIHRlc3QwMigpOworICB0ZXN0MDMoKTsKK30KZGlm ZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvZXhwZXJpbWVudGFs L21lbW9yeS9vYnNlcnZlcl9wdHIvdHlwZWRlZnMuY2MgYi9saWJzdGRjKyst djMvdGVzdHN1aXRlL2V4cGVyaW1lbnRhbC9tZW1vcnkvb2JzZXJ2ZXJfcHRy L3R5cGVkZWZzLmNjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmI3MzgyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMv dGVzdHN1aXRlL2V4cGVyaW1lbnRhbC9tZW1vcnkvb2JzZXJ2ZXJfcHRyL3R5 cGVkZWZzLmNjCkBAIC0wLDAgKzEsMzIgQEAKKy8vIHsgZGctb3B0aW9ucyAi LXN0ZD1nbnUrKzE0IiB9CisvLyB7IGRnLWRvIGNvbXBpbGUgfQorCisvLyBD b3B5cmlnaHQgKEMpIDIwMTUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08g QysrIExpYnJhcnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQg dW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBv cHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJy YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg U2VlIHRoZQorLy8gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg bW92ZWRfdG8gb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFs b25nCisvLyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ TkczLiAgSWYgbm90IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorCisjaW5jbHVkZSA8ZXhwZXJpbWVudGFsL21lbW9yeT4KKyNp bmNsdWRlIDx0eXBlX3RyYWl0cz4KKworc3RhdGljX2Fzc2VydChzdGQ6Omlz X3NhbWU8CisgICAgICAgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjpvYnNl cnZlcl9wdHI8aW50Pjo6ZWxlbWVudF90eXBlLAorICAgICAgICAgICAgICBp bnQ+Ojp2YWx1ZSwgIiIpOworc3RhdGljX2Fzc2VydChzdGQ6OmlzX3NhbWU8 CisgICAgICAgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjpvYnNlcnZlcl9w dHI8Y29uc3QgaW50Pjo6ZWxlbWVudF90eXBlLAorICAgICAgICAgICAgICBj b25zdCBpbnQ+Ojp2YWx1ZSwgIiIpOworc3RhdGljX2Fzc2VydChzdGQ6Omlz X3NhbWU8CisgICAgICAgICAgICAgIHN0ZDo6ZXhwZXJpbWVudGFsOjpvYnNl cnZlcl9wdHI8dm9sYXRpbGUgaW50Pjo6ZWxlbWVudF90eXBlLAorICAgICAg ICAgICAgICB2b2xhdGlsZSBpbnQ+Ojp2YWx1ZSwgIiIpOwo= --089e012947844142870515055189--