From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1809 invoked by alias); 1 Aug 2013 14:59:15 -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 1791 invoked by uid 89); 1 Aug 2013 14:59:14 -0000 X-Spam-SWARE-Status: No, score=-2.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_ENVFROM_END_DIGIT,FREEMAIL_FROM,RCVD_IN_DNSWL_LOW,RCVD_IN_HOSTKARMA_NO,RCVD_IN_HOSTKARMA_YE,RDNS_NONE,SPF_PASS autolearn=no version=3.3.1 X-Spam-User: qpsmtpd, 2 recipients Received: from Unknown (HELO mail-ob0-f180.google.com) (209.85.214.180) by sourceware.org (qpsmtpd/0.84/v0.84-167-ge50287c) with ESMTP; Thu, 01 Aug 2013 14:59:13 +0000 Received: by mail-ob0-f180.google.com with SMTP id up14so3990079obb.39 for ; Thu, 01 Aug 2013 07:59:06 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.182.22.5 with SMTP id z5mr1492205obe.42.1375369145802; Thu, 01 Aug 2013 07:59:05 -0700 (PDT) Received: by 10.182.112.101 with HTTP; Thu, 1 Aug 2013 07:59:05 -0700 (PDT) Date: Thu, 01 Aug 2013 14:59:00 -0000 Message-ID: Subject: [Patch] regex bracket expression implementaion From: Tim Shen To: "libstdc++" , gcc-patches Content-Type: multipart/mixed; boundary=001a1133232e5ee64b04e2e415cf X-Virus-Found: No X-SW-Source: 2013-08/txt/msg00033.txt.bz2 --001a1133232e5ee64b04e2e415cf Content-Type: text/plain; charset=ISO-8859-1 Content-length: 218 Fully tested under x86_64. (make bootstrap && make -k check). Next, I'll try to refactor _Grep_matcher using templates instead of virtual functions, to make implementing back-reference easier. Thanks! -- Tim Shen --001a1133232e5ee64b04e2e415cf Content-Type: application/octet-stream; name="bracket.patch" Content-Disposition: attachment; filename="bracket.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hju32hmg0 Content-length: 37060 SW5kZXg6IGluY2x1ZGUvYml0cy9yZWdleC5oCj09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGluY2x1ZGUvYml0cy9yZWdleC5oCShyZXZpc2lvbiAyMDEz OTcpCisrKyBpbmNsdWRlL2JpdHMvcmVnZXguaAkod29ya2luZyBjb3B5KQpA QCAtOTUsMTUgKzk1LDE1IEBACiAgICAgICAgICAgb3BlcmF0b3J+KCkgY29u c3QKICAgICAgICAgICB7IHJldHVybiBfUmVnZXhNYXNrKH5fTV9iYXNlLCB+ X01fZXh0ZW5kZWQpOyB9CiAKLSAgICAgICAgICBjb25zdGV4cHIgX1JlZ2V4 TWFzayYKKyAgICAgICAgICBfUmVnZXhNYXNrJgogICAgICAgICAgIG9wZXJh dG9yJj0oX1JlZ2V4TWFzayBfX290aGVyKQogICAgICAgICAgIHsgcmV0dXJu ICp0aGlzID0gKCp0aGlzKSAmIF9fb3RoZXI7IH0KIAotICAgICAgICAgIGNv bnN0ZXhwciBfUmVnZXhNYXNrJgorICAgICAgICAgIF9SZWdleE1hc2smCiAg ICAgICAgICAgb3BlcmF0b3J8PShfUmVnZXhNYXNrIF9fb3RoZXIpCiAgICAg ICAgICAgeyByZXR1cm4gKnRoaXMgPSAoKnRoaXMpIHwgX19vdGhlcjsgfQog Ci0gICAgICAgICAgY29uc3RleHByIF9SZWdleE1hc2smCisgICAgICAgICAg X1JlZ2V4TWFzayYKICAgICAgICAgICBvcGVyYXRvcl49KF9SZWdleE1hc2sg X19vdGhlcikKICAgICAgICAgICB7IHJldHVybiAqdGhpcyA9ICgqdGhpcykg XiBfX290aGVyOyB9CiAKQEAgLTIyOCw3ICsyMjgsNyBAQAogICAgICAgICAg ICAgICBfX2ZjdHlwLnRvbG93ZXIoJipfX3YuYmVnaW4oKSwgJipfX3YuZW5k KCkpOwogICAgICAgICAgICAgICByZXR1cm4gdGhpcy0+dHJhbnNmb3JtKCYq X192LmJlZ2luKCksICYqX192LmVuZCgpKTsKICAgICAgICAgICAgIH0KLSAg ICAgICAgICBfX2NhdGNoICguLi4pCisgICAgICAgICAgX19jYXRjaCAoc3Rk OjpiYWRfY2FzdCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIH0KICAg ICAgICAgICByZXR1cm4gc3RyaW5nX3R5cGUoKTsKQEAgLTUxOSw3ICs1MTks NiBAQAogICAgICAgICB9OwogCiAgICAgICBzdGQ6OnN0cmluZyBfX3MoX19s YXN0IC0gX19maXJzdCwgJz8nKTsKLSAgICAgIHN0cmluZ190eXBlIGEoX19m aXJzdCwgX19sYXN0KTsKICAgICAgIF9fZmN0eXAubmFycm93KF9fZmlyc3Qs IF9fbGFzdCwgJz8nLCAmKl9fcy5iZWdpbigpKTsKIAogICAgICAgZm9yICh1 bnNpZ25lZCBpbnQgX19pID0gMDsgKl9fY29sbGF0ZW5hbWVzW19faV07IF9f aSsrKQpJbmRleDogaW5jbHVkZS9iaXRzL3JlZ2V4X2NvbXBpbGVyLmgKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gaW5jbHVkZS9iaXRzL3JlZ2V4X2Nv bXBpbGVyLmgJKHJldmlzaW9uIDIwMTM5NykKKysrIGluY2x1ZGUvYml0cy9y ZWdleF9jb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NCw5ICs0NCw4 IEBACiAgIHsKICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBfU3RhdGVUOwog Ci0gICAgc3RhdGljIGNvbnN0ZXhwciBfU3RhdGVUIF9TX3N0YXRlX2F0X3N0 YXJ0ICAgID0gMSA8PCAwOwotICAgIHN0YXRpYyBjb25zdGV4cHIgX1N0YXRl VCBfU19zdGF0ZV9pbl9icmFjZSAgICA9IDEgPDwgMjsKLSAgICBzdGF0aWMg Y29uc3RleHByIF9TdGF0ZVQgX1Nfc3RhdGVfaW5fYnJhY2tldCAgPSAxIDw8 IDM7CisgICAgc3RhdGljIGNvbnN0ZXhwciBfU3RhdGVUIF9TX3N0YXRlX2lu X2JyYWNlICAgID0gMSA8PCAwOworICAgIHN0YXRpYyBjb25zdGV4cHIgX1N0 YXRlVCBfU19zdGF0ZV9pbl9icmFja2V0ICA9IDEgPDwgMTsKIAogICAgIHZp cnR1YWwgfl9TY2FubmVyX2Jhc2UoKSB7IH07CiAgIH07CkBAIC03Nyw4ICs3 Niw4IEBACiAJX1NfdG9rZW5fYW55Y2hhciwKIAlfU190b2tlbl9iYWNrcmVm LAogCV9TX3Rva2VuX2JyYWNrZXRfYmVnaW4sCisJX1NfdG9rZW5fYnJhY2tl dF9pbnZlcnNlX2JlZ2luLAogCV9TX3Rva2VuX2JyYWNrZXRfZW5kLAotCV9T X3Rva2VuX2ludmVyc2VfY2xhc3MsCiAJX1NfdG9rZW5fY2hhcl9jbGFzc19u YW1lLAogCV9TX3Rva2VuX2Nsb3N1cmUwLAogCV9TX3Rva2VuX2Nsb3N1cmUx LApAQCAtOTcsNyArOTYsNiBAQAogCV9TX3Rva2VuX29wdCwKIAlfU190b2tl bl9vciwKIAlfU190b2tlbl9vcmRfY2hhciwKLQlfU190b2tlbl9xdW90ZWRf Y2hhciwKIAlfU190b2tlbl9zdWJleHByX2JlZ2luLAogCV9TX3Rva2VuX3N1 YmV4cHJfZW5kLAogCV9TX3Rva2VuX3dvcmRfYmVnaW4sCkBAIC0xMDgsNyAr MTA2LDcgQEAKICAgICAgIF9TY2FubmVyKF9JdGVyYXRvclQgX19iZWdpbiwg X0l0ZXJhdG9yVCBfX2VuZCwgX0ZsYWdUIF9fZmxhZ3MsCiAJICAgICAgIHN0 ZDo6bG9jYWxlIF9fbG9jKQogICAgICAgOiBfTV9jdXJyZW50KF9fYmVnaW4p ICwgX01fZW5kKF9fZW5kKSAsIF9NX2ZsYWdzKF9fZmxhZ3MpLAotICAgICAg ICBfTV9jdHlwZShzdGQ6OnVzZV9mYWNldDxfQ3R5cGVUPihfX2xvYykpLCBf TV9zdGF0ZShfU19zdGF0ZV9hdF9zdGFydCkKKyAgICAgICAgX01fY3R5cGUo c3RkOjp1c2VfZmFjZXQ8X0N0eXBlVD4oX19sb2MpKSwgX01fc3RhdGUoMCkK ICAgICAgIHsgX01fYWR2YW5jZSgpOyB9CiAKICAgICAgIHZvaWQKQEAgLTIx OSw5ICsyMTcsMTQgQEAKIAl9CiAgICAgICBlbHNlIGlmIChfX2MgPT0gX01f Y3R5cGUud2lkZW4oJ1snKSkKIAl7Ci0JICBfTV9jdXJUb2tlbiA9IF9TX3Rv a2VuX2JyYWNrZXRfYmVnaW47Ci0JICBfTV9zdGF0ZSB8PSAoX1Nfc3RhdGVf aW5fYnJhY2tldCB8IF9TX3N0YXRlX2F0X3N0YXJ0KTsKLQkgICsrX01fY3Vy cmVudDsKKyAgICAgICAgICBpZiAoKisrX01fY3VycmVudCA9PSBfTV9jdHlw ZS53aWRlbignXicpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBf TV9jdXJUb2tlbiA9IF9TX3Rva2VuX2JyYWNrZXRfaW52ZXJzZV9iZWdpbjsK KyAgICAgICAgICAgICAgKytfTV9jdXJyZW50OworICAgICAgICAgICAgfQor ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIF9NX2N1clRva2VuID0gX1Nf dG9rZW5fYnJhY2tldF9iZWdpbjsKKwkgIF9NX3N0YXRlIHw9IF9TX3N0YXRl X2luX2JyYWNrZXQ7CiAJICByZXR1cm47CiAJfQogICAgICAgZWxzZSBpZiAo X19jID09IF9NX2N0eXBlLndpZGVuKCdcXCcpKQpAQCAtMzA0LDE2ICszMDcs OSBAQAogICAgIF9TY2FubmVyPF9JbnB1dEl0ZXJhdG9yPjo6CiAgICAgX01f c2Nhbl9pbl9icmFja2V0KCkKICAgICB7Ci0gICAgICBpZiAoX01fc3RhdGUg JiBfU19zdGF0ZV9hdF9zdGFydCAmJiAqX01fY3VycmVudCA9PSBfTV9jdHlw ZS53aWRlbignXicpKQorICAgICAgaWYgKCpfTV9jdXJyZW50ID09IF9NX2N0 eXBlLndpZGVuKCdbJykpCiAJewotCSAgX01fY3VyVG9rZW4gPSBfU190b2tl bl9pbnZlcnNlX2NsYXNzOwotCSAgX01fc3RhdGUgJj0gfl9TX3N0YXRlX2F0 X3N0YXJ0OwogCSAgKytfTV9jdXJyZW50OwotCSAgcmV0dXJuOwotCX0KLSAg ICAgIGVsc2UgaWYgKCpfTV9jdXJyZW50ID09IF9NX2N0eXBlLndpZGVuKCdb JykpCi0JewotCSAgKytfTV9jdXJyZW50OwogCSAgaWYgKF9NX2N1cnJlbnQg PT0gX01fZW5kKQogCSAgICB7CiAJICAgICAgX01fY3VyVG9rZW4gPSBfU190 b2tlbl9lb2Y7CkBAIC0zNDcsMjEgKzM0MywyMiBAQAogCX0KICAgICAgIGVs c2UgaWYgKCpfTV9jdXJyZW50ID09IF9NX2N0eXBlLndpZGVuKCddJykpCiAJ ewotCSAgaWYgKCEoX01fZmxhZ3MgJiByZWdleF9jb25zdGFudHM6OkVDTUFT Y3JpcHQpCi0JICAgICAgfHwgIShfTV9zdGF0ZSAmIF9TX3N0YXRlX2F0X3N0 YXJ0KSkKLQkgICAgewotCSAgICAgIC8vIHNwZWNpYWwgY2FzZTogb25seSBp ZiAgX25vdF8gY2hyIGZpcnN0IGFmdGVyCi0JICAgICAgLy8gJ1snIG9yICdb XicgYW5kIGlmIG5vdCBFQ01Bc2NyaXB0Ci0JICAgICAgX01fY3VyVG9rZW4g PSBfU190b2tlbl9icmFja2V0X2VuZDsKLQkgICAgICArK19NX2N1cnJlbnQ7 Ci0JICAgICAgcmV0dXJuOwotCSAgICB9CisgICAgICAgICAgX01fY3VyVG9r ZW4gPSBfU190b2tlbl9icmFja2V0X2VuZDsKKyAgICAgICAgICBfTV9zdGF0 ZSAmPSB+X1Nfc3RhdGVfaW5fYnJhY2tldDsKKyAgICAgICAgICArK19NX2N1 cnJlbnQ7CisgICAgICAgICAgcmV0dXJuOwogCX0KKyAgICAgIGVsc2UgaWYg KCpfTV9jdXJyZW50ID09IF9NX2N0eXBlLndpZGVuKCdcXCcpKQorICAgICAg ICB7CisJICBfTV9lYXRfZXNjYXBlKCk7CisJICByZXR1cm47CisgICAgICAg IH0KICAgICAgIF9NX2N1clRva2VuID0gX1NfdG9rZW5fY29sbGVsZW1fc2lu Z2xlOwogICAgICAgX01fY3VyVmFsdWUuYXNzaWduKDEsICpfTV9jdXJyZW50 KTsKICAgICAgICsrX01fY3VycmVudDsKICAgICB9CiAKKyAgLy8gVE9ETyBp bXBsZW1lbnQgaXQuCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJh dG9yPgogICAgIHZvaWQKICAgICBfU2Nhbm5lcjxfSW5wdXRJdGVyYXRvcj46 OgpAQCAtNDYzLDExICs0NjAsMjggQEAKIAkgIF9NX2N1clRva2VuID0gX1Nf dG9rZW5fYmFja3JlZjsKIAkgIF9NX2N1clZhbHVlLmFzc2lnbigxLCBfX2Mp OwogCX0KKyAgICAgIGVsc2UgaWYgKF9NX3N0YXRlICYgX1Nfc3RhdGVfaW5f YnJhY2tldCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChfX2MgPT0gX01f Y3R5cGUud2lkZW4oJy0nKQorICAgICAgICAgICAgICB8fCBfX2MgPT0gX01f Y3R5cGUud2lkZW4oJ1snKQorICAgICAgICAgICAgICB8fCBfX2MgPT0gX01f Y3R5cGUud2lkZW4oJ10nKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgX01fY3VyVG9rZW4gPSBfU190b2tlbl9vcmRfY2hhcjsKKyAgICAgICAg ICAgICAgX01fY3VyVmFsdWUuYXNzaWduKDEsIF9fYyk7CisgICAgICAgICAg ICB9CisgICAgICAgICAgZWxzZSBpZiAoKF9NX2ZsYWdzICYgcmVnZXhfY29u c3RhbnRzOjpFQ01BU2NyaXB0KQorICAgICAgICAgICAgICAgICAgICYmIF9f YyA9PSBfTV9jdHlwZS53aWRlbignYicpKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICBfTV9jdXJUb2tlbiA9IF9TX3Rva2VuX29yZF9jaGFyOwor ICAgICAgICAgICAgICBfTV9jdXJWYWx1ZS5hc3NpZ24oMSwgX01fY3R5cGUu d2lkZW4oJyAnKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgX190aHJvd19yZWdleF9lcnJvcihyZWdleF9jb25zdGFu dHM6OmVycm9yX2VzY2FwZSk7CisgICAgICAgIH0KICAgICAgIGVsc2UKIAlf X3Rocm93X3JlZ2V4X2Vycm9yKHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfZXNj YXBlKTsKICAgICB9CiAKLQogICAvLyBFYXRzIGEgY2hhcmFjdGVyIGNsYXNz IG9yIHRocm93bnMgYW4gZXhjZXB0aW9uLgogICAvLyBjdXJyZW50IHBvaW50 IHRvICc6JyBkZWxpbWl0ZXIgb24gZW50cnksIGNoYXIgYWZ0ZXIgJ10nIG9u IHJldHVybgogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4K QEAgLTU0OSw2ICs1NjMsOSBAQAogCWNhc2UgX1NfdG9rZW5fYnJhY2tldF9i ZWdpbjoKIAkgIG9zdHIgPDwgImJyYWNrZXQtYmVnaW5cbiI7CiAJICBicmVh azsKKwljYXNlIF9TX3Rva2VuX2JyYWNrZXRfaW52ZXJzZV9iZWdpbjoKKyAg ICAgICAgICBvc3RyIDw8ICJicmFja2V0LWludmVyc2UtYmVnaW5cbiI7Cisg ICAgICAgICAgYnJlYWs7CiAJY2FzZSBfU190b2tlbl9icmFja2V0X2VuZDoK IAkgIG9zdHIgPDwgImJyYWNrZXQtZW5kXG4iOwogCSAgYnJlYWs7CkBAIC02 MDYsOSArNjIzLDYgQEAKIAljYXNlIF9TX3Rva2VuX29yZF9jaGFyOgogCSAg b3N0ciA8PCAib3JkaW5hcnkgY2hhcmFjdGVyOiBcIiIgPDwgX01fdmFsdWUo KSA8PCAiXCJcbiI7CiAJICBicmVhazsKLQljYXNlIF9TX3Rva2VuX3F1b3Rl ZF9jaGFyOgotCSAgb3N0ciA8PCAicXVvdGVkIGNoYXJcbiI7Ci0JICBicmVh azsKIAljYXNlIF9TX3Rva2VuX3N1YmV4cHJfYmVnaW46CiAJICBvc3RyIDw8 ICJzdWJleHByIGJlZ2luXG4iOwogCSAgYnJlYWs7CkBAIC02MjQsNiArNjM4 LDggQEAKIAljYXNlIF9TX3Rva2VuX3Vua25vd246CiAJICBvc3RyIDw8ICIt LSB1bmtub3duIHRva2VuIC0tXG4iOwogCSAgYnJlYWs7CisgICAgICAgIGRl ZmF1bHQ6CisgICAgICAgICAgX0dMSUJDWFhfREVCVUdfQVNTRVJUKGZhbHNl KTsKICAgICAgIH0KICAgICAgIHJldHVybiBvc3RyOwogICAgIH0KQEAgLTY1 MCw3ICs2NjYsNyBAQAogICAgICAgdHlwZWRlZiBfU2Nhbm5lcjxfSW5JdGVy PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TY2FubmVyVDsKICAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NjYW5uZXJUOjpfVG9rZW5UICAgICAg ICAgICAgICAgICAgICBfVG9rZW5UOwogICAgICAgdHlwZWRlZiBzdGQ6OnN0 YWNrPF9TdGF0ZVNlcSwgc3RkOjp2ZWN0b3I8X1N0YXRlU2VxPiA+IF9TdGFj a1Q7Ci0gICAgICB0eXBlZGVmIF9SYW5nZU1hdGNoZXI8X0luSXRlciwgX1Ry YWl0c1Q+ICAgICAgICAgICAgICAgX1JNYXRjaGVyVDsKKyAgICAgIHR5cGVk ZWYgX0JyYWNrZXRNYXRjaGVyPF9Jbkl0ZXIsIF9UcmFpdHNUPiAgICAgICAg ICAgICBfQk1hdGNoZXJUOwogCiAgICAgICAvLyBhY2NlcHRzIGEgc3BlY2lm aWMgdG9rZW4gb3IgcmV0dXJucyBmYWxzZS4KICAgICAgIGJvb2wKQEAgLTY1 OSw3ICs2NzUsNyBAQAogICAgICAgdm9pZAogICAgICAgX01fZGlzanVuY3Rp b24oKTsKIAotICAgICAgYm9vbAorICAgICAgdm9pZAogICAgICAgX01fYWx0 ZXJuYXRpdmUoKTsKIAogICAgICAgYm9vbApAQCAtNjY4LDcgKzY4NCw3IEBA CiAgICAgICBib29sCiAgICAgICBfTV9hc3NlcnRpb24oKTsKIAotICAgICAg Ym9vbAorICAgICAgdm9pZAogICAgICAgX01fcXVhbnRpZmllcigpOwogCiAg ICAgICBib29sCkBAIC02NzgsMzIgKzY5NCwyOSBAQAogICAgICAgX01fYnJh Y2tldF9leHByZXNzaW9uKCk7CiAKICAgICAgIGJvb2wKLSAgICAgIF9NX2Jy YWNrZXRfbGlzdChfUk1hdGNoZXJUJiBfX21hdGNoZXIpOworICAgICAgX01f YnJhY2tldF9saXN0KF9CTWF0Y2hlclQmIF9fbWF0Y2hlcik7CiAKICAgICAg IGJvb2wKLSAgICAgIF9NX2ZvbGxvd19saXN0KF9STWF0Y2hlclQmIF9fbWF0 Y2hlcik7CisgICAgICBfTV9mb2xsb3dfbGlzdChfQk1hdGNoZXJUJiBfX21h dGNoZXIpOwogCi0gICAgICBib29sCi0gICAgICBfTV9mb2xsb3dfbGlzdDIo X1JNYXRjaGVyVCYgX19tYXRjaGVyKTsKKyAgICAgIHZvaWQKKyAgICAgIF9N X2V4cHJlc3Npb25fdGVybShfQk1hdGNoZXJUJiBfX21hdGNoZXIpOwogCiAg ICAgICBib29sCi0gICAgICBfTV9leHByZXNzaW9uX3Rlcm0oX1JNYXRjaGVy VCYgX19tYXRjaGVyKTsKKyAgICAgIF9NX3JhbmdlX2V4cHJlc3Npb24oX0JN YXRjaGVyVCYgX19tYXRjaGVyKTsKIAogICAgICAgYm9vbAotICAgICAgX01f cmFuZ2VfZXhwcmVzc2lvbihfUk1hdGNoZXJUJiBfX21hdGNoZXIpOworICAg ICAgX01fc3RhcnRfcmFuZ2UoX0JNYXRjaGVyVCYgX19tYXRjaGVyKTsKIAog ICAgICAgYm9vbAotICAgICAgX01fc3RhcnRfcmFuZ2UoX1JNYXRjaGVyVCYg X19tYXRjaGVyKTsKKyAgICAgIF9NX2NvbGxhdGluZ19zeW1ib2woX0JNYXRj aGVyVCYgX19tYXRjaGVyKTsKIAogICAgICAgYm9vbAotICAgICAgX01fY29s bGF0aW5nX3N5bWJvbChfUk1hdGNoZXJUJiBfX21hdGNoZXIpOworICAgICAg X01fZXF1aXZhbGVuY2VfY2xhc3MoX0JNYXRjaGVyVCYgX19tYXRjaGVyKTsK IAogICAgICAgYm9vbAotICAgICAgX01fZXF1aXZhbGVuY2VfY2xhc3MoX1JN YXRjaGVyVCYgX19tYXRjaGVyKTsKKyAgICAgIF9NX2NoYXJhY3Rlcl9jbGFz cyhfQk1hdGNoZXJUJiBfX21hdGNoZXIpOwogCi0gICAgICBib29sCi0gICAg ICBfTV9jaGFyYWN0ZXJfY2xhc3MoX1JNYXRjaGVyVCYgX19tYXRjaGVyKTsK LQogICAgICAgaW50CiAgICAgICBfTV9jdXJfaW50X3ZhbHVlKGludCBfX3Jh ZGl4KTsKIApAQCAtNzEyLDYgKzcyNSw3IEBACiAgICAgICBfU3RyaW5nVCAg ICAgICBfTV9jdXJfdmFsdWU7CiAgICAgICBfTmZhICAgICAgICAgICBfTV9z dGF0ZV9zdG9yZTsKICAgICAgIF9TdGFja1QgICAgICAgIF9NX3N0YWNrOwor ICAgICAgX0ZsYWdUICAgICAgICAgX01fZmxhZ3M7CiAgICAgfTsKIAogICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfVHJhaXRzVD4K QEAgLTcxOSw3ICs3MzMsNyBAQAogICAgIF9Db21waWxlcihjb25zdCBfSW5J dGVyJiBfX2IsIGNvbnN0IF9Jbkl0ZXImIF9fZSwgX1RyYWl0c1QmIF9fdHJh aXRzLAogCSAgICAgIF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRzVD46Ol9G bGFnVCBfX2ZsYWdzKQogICAgIDogX01fdHJhaXRzKF9fdHJhaXRzKSwgX01f c2Nhbm5lcihfX2IsIF9fZSwgX19mbGFncywgX01fdHJhaXRzLmdldGxvYygp KSwKLSAgICAgIF9NX3N0YXRlX3N0b3JlKF9fZmxhZ3MpCisgICAgICBfTV9z dGF0ZV9zdG9yZShfX2ZsYWdzKSwgX01fZmxhZ3MoX19mbGFncykKICAgICB7 CiAgICAgICB0eXBlZGVmIF9TdGFydFRhZ2dlcjxfSW5JdGVyLCBfVHJhaXRz VD4gX1N0YXJ0OwogICAgICAgdHlwZWRlZiBfRW5kVGFnZ2VyPF9Jbkl0ZXIs IF9UcmFpdHNUPiBfRW5kOwpAQCAtNzQzLDggKzc1Nyw4IEBACiAgICAgeyAK ICAgICAgIGlmICh0b2tlbiA9PSBfTV9zY2FubmVyLl9NX3Rva2VuKCkpCiAJ ewotCSAgX01fY3VyX3ZhbHVlID0gX01fc2Nhbm5lci5fTV92YWx1ZSgpOwot CSAgX01fc2Nhbm5lci5fTV9hZHZhbmNlKCk7CisgICAgICAgICAgX01fY3Vy X3ZhbHVlID0gX01fc2Nhbm5lci5fTV92YWx1ZSgpOworICAgICAgICAgIF9N X3NjYW5uZXIuX01fYWR2YW5jZSgpOwogCSAgcmV0dXJuIHRydWU7CiAJfQog ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzY2LDcgKzc4MCw3IEBACiAgICAg fQogCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9U cmFpdHNUPgotICAgIGJvb2wKKyAgICB2b2lkCiAgICAgX0NvbXBpbGVyPF9J bkl0ZXIsIF9UcmFpdHNUPjo6CiAgICAgX01fYWx0ZXJuYXRpdmUoKQogICAg IHsKQEAgLTc4MCw5ICs3OTQsNyBAQAogCSAgICAgIF9NX3N0YWNrLnBvcCgp OwogCSAgICB9CiAJICBfTV9zdGFjay5wdXNoKF9fcmUpOwotCSAgcmV0dXJu IHRydWU7CiAJfQotICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfVHJhaXRzVD4K QEAgLTgyOSw3ICs4NDEsNyBAQAogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfVHJhaXRzVD4KLSAgICBib29sCisg ICAgdm9pZAogICAgIF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRzVD46Ogog ICAgIF9NX3F1YW50aWZpZXIoKQogICAgIHsKQEAgLTg0MSw3ICs4NTMsNyBA QAogCSAgX19yLl9NX2FwcGVuZChfX3IuX01fZnJvbnQoKSk7CiAJICBfTV9z dGFjay5wb3AoKTsKIAkgIF9NX3N0YWNrLnB1c2goX19yKTsKLQkgIHJldHVy biB0cnVlOworCSAgcmV0dXJuOwogCX0KICAgICAgIGlmIChfTV9tYXRjaF90 b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2Nsb3N1cmUxKSkKIAl7CkBAIC04 NTIsNyArODY0LDcgQEAKIAkJCV9NX2luc2VydF9hbHQoX1NfaW52YWxpZF9z dGF0ZV9pZCwKIAkJCQkgICAgICBfTV9zdGFjay50b3AoKS5fTV9mcm9udCgp KSk7CiAJICBfTV9zdGFjay50b3AoKS5fTV9hcHBlbmQoX19yKTsKLQkgIHJl dHVybiB0cnVlOworCSAgcmV0dXJuOwogCX0KICAgICAgIGlmIChfTV9tYXRj aF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX29wdCkpCiAJewpAQCAtODYx LDcgKzg3Myw3IEBACiAJICBfU3RhdGVTZXEgX19yKF9NX3N0YWNrLnRvcCgp LCAtMSk7CiAJICBfTV9zdGFjay5wb3AoKTsKIAkgIF9NX3N0YWNrLnB1c2go X19yKTsKLQkgIHJldHVybiB0cnVlOworCSAgcmV0dXJuOwogCX0KICAgICAg IGlmIChfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2ludGVy dmFsX2JlZ2luKSkKIAl7CkBAIC04OTcsOSArOTA5LDggQEAKIAkgICAgICB9 CiAJICBpZiAoIV9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5f aW50ZXJ2YWxfZW5kKSkKIAkgICAgX190aHJvd19yZWdleF9lcnJvcihyZWdl eF9jb25zdGFudHM6OmVycm9yX2JyYWNlKTsKLQkgIHJldHVybiB0cnVlOwor CSAgcmV0dXJuOwogCX0KLSAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAK ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX1RyYWl0 c1Q+CkBAIC05MjIsMTcgKzkzMyw5IEBACiAJewogCSAgX01fc3RhY2sucHVz aChfU3RhdGVTZXEoX01fc3RhdGVfc3RvcmUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX01fc3RhdGVfc3RvcmUuX01faW5zZXJ0X21h dGNoZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX0NN YXRjaGVyKF9NX2N1cl92YWx1ZVswXSwgX01fdHJhaXRzKSkpKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX0NNYXRjaGVyKF9NX2N1 cl92YWx1ZVswXSwgX01fZmxhZ3MsIF9NX3RyYWl0cykpKSk7CiAJICByZXR1 cm4gdHJ1ZTsKIAl9Ci0gICAgICBpZiAoX01fbWF0Y2hfdG9rZW4oX1NjYW5u ZXJUOjpfU190b2tlbl9xdW90ZWRfY2hhcikpCi0JewotCSAgLy8gbm90ZSB0 aGF0IGluIHRoZSBFQ01BIGdyYW1tYXIsIHRoaXMgY2FzZSBjb3ZlcnMgYmFj a3JlZnMuCi0JICBfTV9zdGFjay5wdXNoKF9TdGF0ZVNlcShfTV9zdGF0ZV9z dG9yZSwKLQkJCQkgIF9NX3N0YXRlX3N0b3JlLl9NX2luc2VydF9tYXRjaGVy Ci0JCQkJICAoX0NNYXRjaGVyKF9NX2N1cl92YWx1ZVswXSwgX01fdHJhaXRz KSkpKTsKLQkgIHJldHVybiB0cnVlOwotCX0KICAgICAgIGlmIChfTV9tYXRj aF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2JhY2tyZWYpKQogCXsKIAkg IC8vIF9fbS5wdXNoKF9NYXRjaGVyOjpfU19vcGNvZGVfb3JkY2hhciwgX01f Y3VyX3ZhbHVlKTsKQEAgLTk2NiwxMjQgKzk2OSw3NCBAQAogICAgIF9Db21w aWxlcjxfSW5JdGVyLCBfVHJhaXRzVD46OgogICAgIF9NX2JyYWNrZXRfZXhw cmVzc2lvbigpCiAgICAgewotICAgICAgaWYgKF9NX21hdGNoX3Rva2VuKF9T Y2FubmVyVDo6X1NfdG9rZW5fYnJhY2tldF9iZWdpbikpCi0JewotCSAgX1JN YXRjaGVyVCBfX21hdGNoZXIoX01fbWF0Y2hfdG9rZW4oX1NjYW5uZXJUOjpf U190b2tlbl9saW5lX2JlZ2luKSwKLQkJCSAgICAgICBfTV90cmFpdHMpOwot CSAgaWYgKCFfTV9icmFja2V0X2xpc3QoX19tYXRjaGVyKQotCSAgICAgIHx8 ICFfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2JyYWNrZXRf ZW5kKSkKLQkgICAgX190aHJvd19yZWdleF9lcnJvcihyZWdleF9jb25zdGFu dHM6OmVycm9yX2JyYWNrKTsKLQkgIF9NX3N0YWNrLnB1c2goX1N0YXRlU2Vx KF9NX3N0YXRlX3N0b3JlLAotCQkJCSAgX01fc3RhdGVfc3RvcmUuX01faW5z ZXJ0X21hdGNoZXIoX19tYXRjaGVyKSkpOwotCSAgcmV0dXJuIHRydWU7Ci0J fQotICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAvLyBJZiB0aGUg ZGFzaCBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGJyYWNrZXQgZXhw cmVzc2lvbiwgaXQgaXMgbm90Ci0gIC8vIHNwZWNpYWwuCi0gIHRlbXBsYXRl PHR5cGVuYW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9UcmFpdHNUPgotICAgIGJv b2wKLSAgICBfQ29tcGlsZXI8X0luSXRlciwgX1RyYWl0c1Q+OjoKLSAgICBf TV9icmFja2V0X2xpc3QoX1JNYXRjaGVyVCYgX19tYXRjaGVyKQotICAgIHsK LSAgICAgIGlmIChfTV9mb2xsb3dfbGlzdChfX21hdGNoZXIpKQotCXsKLQkg IGlmIChfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2Rhc2gp KQotCSAgICBfX21hdGNoZXIuX01fYWRkX2NoYXIoX01fY3VyX3ZhbHVlWzBd KTsKLQkgIHJldHVybiB0cnVlOwotCX0KLSAgICAgIHJldHVybiBmYWxzZTsK LSAgICB9Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5h bWUgX1RyYWl0c1Q+Ci0gICAgYm9vbAotICAgIF9Db21waWxlcjxfSW5JdGVy LCBfVHJhaXRzVD46OgotICAgIF9NX2ZvbGxvd19saXN0KF9STWF0Y2hlclQm IF9fbWF0Y2hlcikKLSAgICB7IHJldHVybiBfTV9leHByZXNzaW9uX3Rlcm0o X19tYXRjaGVyKSAmJiBfTV9mb2xsb3dfbGlzdDIoX19tYXRjaGVyKTsgfQot Ci0gIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9UcmFp dHNUPgotICAgIGJvb2wKLSAgICBfQ29tcGlsZXI8X0luSXRlciwgX1RyYWl0 c1Q+OjoKLSAgICBfTV9mb2xsb3dfbGlzdDIoX1JNYXRjaGVyVCYgX19tYXRj aGVyKQotICAgIHsKLSAgICAgIGlmIChfTV9leHByZXNzaW9uX3Rlcm0oX19t YXRjaGVyKSkKLQlyZXR1cm4gX01fZm9sbG93X2xpc3QyKF9fbWF0Y2hlcik7 CisgICAgICBib29sIF9faW52ZXJzZSA9CisgICAgICAgIF9NX21hdGNoX3Rv a2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fYnJhY2tldF9pbnZlcnNlX2JlZ2lu KTsKKyAgICAgIGlmICghKF9faW52ZXJzZSB8fCBfTV9tYXRjaF90b2tlbihf U2Nhbm5lclQ6Ol9TX3Rva2VuX2JyYWNrZXRfYmVnaW4pKSkKKyAgICAgICAg cmV0dXJuIGZhbHNlOworICAgICAgX0JNYXRjaGVyVCBfX21hdGNoZXIoIF9f aW52ZXJzZSwgX01fZmxhZ3MsIF9NX3RyYWl0cyk7CisgICAgICAvLyBzcGVj aWFsIGNhc2U6IG9ubHkgaWYgIF9ub3RfIGNociBmaXJzdCBhZnRlcgorICAg ICAgLy8gJ1snIG9yICdbXicgb3IgaWYgRUNNQXNjcmlwdAorICAgICAgaWYg KCFfTV9icmFja2V0X2xpc3QoX19tYXRjaGVyKSAvLyBsaXN0IGlzIGVtcHR5 CisgICAgICAgICAgJiYgIShfTV9mbGFncyAmIHJlZ2V4X2NvbnN0YW50czo6 RUNNQVNjcmlwdCkpCisgICAgICAgIF9fdGhyb3dfcmVnZXhfZXJyb3IocmVn ZXhfY29uc3RhbnRzOjplcnJvcl9icmFjayk7CisgICAgICBfTV9zdGFjay5w dXNoKF9TdGF0ZVNlcShfTV9zdGF0ZV9zdG9yZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9NX3N0YXRlX3N0b3JlLl9NX2luc2VydF9tYXRj aGVyKF9fbWF0Y2hlcikpKTsKICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K IAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyLCB0eXBlbmFtZSBfVHJh aXRzVD4KLSAgICBib29sCisgICAgYm9vbCAvLyBsaXN0IGlzIG5vbi1lbXB0 eQogICAgIF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRzVD46OgotICAgIF9N X2V4cHJlc3Npb25fdGVybShfUk1hdGNoZXJUJiBfX21hdGNoZXIpCisgICAg X01fYnJhY2tldF9saXN0KF9CTWF0Y2hlclQmIF9fbWF0Y2hlcikKICAgICB7 Ci0gICAgICByZXR1cm4gKF9NX2NvbGxhdGluZ19zeW1ib2woX19tYXRjaGVy KQotCSAgICAgIHx8IF9NX2NoYXJhY3Rlcl9jbGFzcyhfX21hdGNoZXIpCi0J ICAgICAgfHwgX01fZXF1aXZhbGVuY2VfY2xhc3MoX19tYXRjaGVyKQotCSAg ICAgIHx8IChfTV9zdGFydF9yYW5nZShfX21hdGNoZXIpCi0JCSAgJiYgX01f cmFuZ2VfZXhwcmVzc2lvbihfX21hdGNoZXIpKSk7Ci0gICAgfQotCi0gIHRl bXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9UcmFpdHNUPgot ICAgIGJvb2wKLSAgICBfQ29tcGlsZXI8X0luSXRlciwgX1RyYWl0c1Q+OjoK LSAgICBfTV9yYW5nZV9leHByZXNzaW9uKF9STWF0Y2hlclQmIF9fbWF0Y2hl cikKLSAgICB7Ci0gICAgICBpZiAoIV9NX2NvbGxhdGluZ19zeW1ib2woX19t YXRjaGVyKSkKLQlpZiAoIV9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1Nf dG9rZW5fZGFzaCkpCi0JICBfX3Rocm93X3JlZ2V4X2Vycm9yKHJlZ2V4X2Nv bnN0YW50czo6ZXJyb3JfcmFuZ2UpOwotICAgICAgX19tYXRjaGVyLl9NX21h a2VfcmFuZ2UoKTsKKyAgICAgIGlmIChfTV9tYXRjaF90b2tlbihfU2Nhbm5l clQ6Ol9TX3Rva2VuX2JyYWNrZXRfZW5kKSkKKyAgICAgICAgcmV0dXJuIGZh bHNlOworICAgICAgX01fZXhwcmVzc2lvbl90ZXJtKF9fbWF0Y2hlcik7Cisg ICAgICBfTV9icmFja2V0X2xpc3QoX19tYXRjaGVyKTsKICAgICAgIHJldHVy biB0cnVlOwogICAgIH0KIAogICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVy LCB0eXBlbmFtZSBfVHJhaXRzVD4KLSAgICBib29sCisgICAgdm9pZAogICAg IF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRzVD46OgotICAgIF9NX3N0YXJ0 X3JhbmdlKF9STWF0Y2hlclQmIF9fbWF0Y2hlcikKLSAgICB7IHJldHVybiBf TV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2VuX2Rhc2gpOyB9Ci0K LSAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX1RyYWl0 c1Q+Ci0gICAgYm9vbAotICAgIF9Db21waWxlcjxfSW5JdGVyLCBfVHJhaXRz VD46OgotICAgIF9NX2NvbGxhdGluZ19zeW1ib2woX1JNYXRjaGVyVCYgX19t YXRjaGVyKQorICAgIF9NX2V4cHJlc3Npb25fdGVybShfQk1hdGNoZXJUJiBf X21hdGNoZXIpCiAgICAgewotICAgICAgaWYgKF9NX21hdGNoX3Rva2VuKF9T Y2FubmVyVDo6X1NfdG9rZW5fY29sbGVsZW1fc2luZ2xlKSkKLQl7Ci0JICBf X21hdGNoZXIuX01fYWRkX2NoYXIoX01fY3VyX3ZhbHVlWzBdKTsKLQkgIHJl dHVybiB0cnVlOwotCX0KICAgICAgIGlmIChfTV9tYXRjaF90b2tlbihfU2Nh bm5lclQ6Ol9TX3Rva2VuX2NvbGxzeW1ib2wpKQogCXsKIAkgIF9fbWF0Y2hl ci5fTV9hZGRfY29sbGF0aW5nX2VsZW1lbnQoX01fY3VyX3ZhbHVlKTsKLQkg IHJldHVybiB0cnVlOworCSAgcmV0dXJuOwogCX0KLSAgICAgIHJldHVybiBm YWxzZTsKLSAgICB9Ci0KLSAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRlciwg dHlwZW5hbWUgX1RyYWl0c1Q+Ci0gICAgYm9vbAotICAgIF9Db21waWxlcjxf SW5JdGVyLCBfVHJhaXRzVD46OgotICAgIF9NX2VxdWl2YWxlbmNlX2NsYXNz KF9STWF0Y2hlclQmIF9fbWF0Y2hlcikKLSAgICB7CiAgICAgICBpZiAoX01f bWF0Y2hfdG9rZW4oX1NjYW5uZXJUOjpfU190b2tlbl9lcXVpdl9jbGFzc19u YW1lKSkKIAl7CiAJICBfX21hdGNoZXIuX01fYWRkX2VxdWl2YWxlbmNlX2Ns YXNzKF9NX2N1cl92YWx1ZSk7Ci0JICByZXR1cm4gdHJ1ZTsKKwkgIHJldHVy bjsKIAl9Ci0gICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gIHRlbXBs YXRlPHR5cGVuYW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9UcmFpdHNUPgotICAg IGJvb2wKLSAgICBfQ29tcGlsZXI8X0luSXRlciwgX1RyYWl0c1Q+OjoKLSAg ICBfTV9jaGFyYWN0ZXJfY2xhc3MoX1JNYXRjaGVyVCYgX19tYXRjaGVyKQot ICAgIHsKICAgICAgIGlmIChfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9T X3Rva2VuX2NoYXJfY2xhc3NfbmFtZSkpCiAJewogCSAgX19tYXRjaGVyLl9N X2FkZF9jaGFyYWN0ZXJfY2xhc3MoX01fY3VyX3ZhbHVlKTsKLQkgIHJldHVy biB0cnVlOworCSAgcmV0dXJuOwogCX0KLSAgICAgIHJldHVybiBmYWxzZTsK KyAgICAgIGlmIChfTV9tYXRjaF90b2tlbihfU2Nhbm5lclQ6Ol9TX3Rva2Vu X2NvbGxlbGVtX3NpbmdsZSkpIC8vIFthCisgICAgICAgIHsKKyAgICAgICAg ICBhdXRvIF9fY2ggPSBfTV9jdXJfdmFsdWVbMF07CisgICAgICAgICAgaWYg KF9NX21hdGNoX3Rva2VuKF9TY2FubmVyVDo6X1NfdG9rZW5fZGFzaCkpIC8v IFthLQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAvLyBJZiB0aGUg ZGFzaCBpcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGJyYWNrZXQgZXhw cmVzc2lvbiwKKyAgICAgICAgICAgICAgLy8gaXQgaXMgbm90IHNwZWNpYWwu CisgICAgICAgICAgICAgIGlmIChfTV9zY2FubmVyLl9NX3Rva2VuKCkgPT0g X1NjYW5uZXJUOjpfU190b2tlbl9icmFja2V0X2VuZCkKKyAgICAgICAgICAg ICAgICBfX21hdGNoZXIuX01fYWRkX2NoYXIoX01fY3VyX3ZhbHVlWzBdKTsg Ly8gW2EtXSA8PT4gW2FcLV0KKyAgICAgICAgICAgICAgZWxzZSAvLyBbYS16 XQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmICgh X01fbWF0Y2hfdG9rZW4oX1NjYW5uZXJUOjpfU190b2tlbl9jb2xsZWxlbV9z aW5nbGUpKQorICAgICAgICAgICAgICAgICAgICBfX3Rocm93X3JlZ2V4X2Vy cm9yKHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfcmFuZ2UpOworICAgICAgICAg ICAgICAgICAgX19tYXRjaGVyLl9NX21ha2VfcmFuZ2UoX19jaCwgX01fY3Vy X3ZhbHVlWzBdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgZWxzZSAvLyBbYV0KKyAgICAgICAgICAgIF9fbWF0Y2hl ci5fTV9hZGRfY2hhcihfX2NoKTsKKyAgICAgICAgICByZXR1cm47CisgICAg ICAgIH0KKyAgICAgIF9fdGhyb3dfcmVnZXhfZXJyb3IocmVnZXhfY29uc3Rh bnRzOjplcnJvcl9icmFjayk7CiAgICAgfQogCiAgIHRlbXBsYXRlPHR5cGVu YW1lIF9Jbkl0ZXIsIHR5cGVuYW1lIF9UcmFpdHNUPgpJbmRleDogaW5jbHVk ZS9iaXRzL3JlZ2V4X25mYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGluY2x1ZGUvYml0cy9yZWdleF9uZmEuaAkocmV2aXNpb24gMjAxMzk3KQor KysgaW5jbHVkZS9iaXRzL3JlZ2V4X25mYS5oCSh3b3JraW5nIGNvcHkpCkBA IC0xMjksNiArMTI5LDI5IEBACiAgICAgICBpbnQgICAgICAgX01faW5kZXg7 CiAgICAgfTsKIAorICAvLyBUT0RPIEZvciBub3cgd2UgdXNlIGFuIGFsbC1p bi1vbmUgY29tcGFyYXRvci4gSW4gdGhlIGZ1dHVyZSB0aGVyZSBtYXkgYmUK KyAgLy8gb3B0aW1pemF0aW9ucyBiYXNlZCBvbiByZWdleF90cmFpdHM6OnRy YW5zbGF0ZSBhbmQgcmVnZXhfdHJhbnNmb3JtLgorICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5JdGVyVCwgdHlwZW5hbWUgX1RyYWl0c1Q+CisgICAgc3RydWN0 IF9Db21wYXJhdG9yCisgICAgeworICAgICAgdHlwZWRlZiByZWdleF9jb25z dGFudHM6OnN5bnRheF9vcHRpb25fdHlwZSBfRmxhZ1Q7CisgICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9UcmFpdHNUOjpjaGFyX3R5cGUgICAgICAgIF9DaGFy VDsKKyAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmc8X0NoYXJUPiAg ICAgICAgICAgX1N0cmluZ1Q7CisKKyAgICAgIF9Db21wYXJhdG9yKF9GbGFn VCBfX2ZsYWdzLCBjb25zdCBfVHJhaXRzVCYgX190cmFpdHMpCisgICAgICA6 IF9NX2ZsYWdzKF9fZmxhZ3MpLCBfTV90cmFpdHMoX190cmFpdHMpCisgICAg ICB7IH0KKworICAgICAgYm9vbAorICAgICAgX01fZXF1KF9DaGFyVCBfX2Es IF9DaGFyVCBfX2IpIGNvbnN0OworCisgICAgICBib29sCisgICAgICBfTV9s ZShfQ2hhclQgX19hLCBfQ2hhclQgX19iKSBjb25zdDsKKworICAgICAgX0Zs YWdUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZmxhZ3M7Cisg ICAgICBfVHJhaXRzVCAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV90 cmFpdHM7CisgICAgfTsKKwogICAvLy8gSW5kaWNhdGVzIGlmIGN1cnJlbnQg c3RhdGUgbWF0Y2hlcyBjdXJzb3IgY3VycmVudC4KICAgdHlwZWRlZiBzdGQ6 OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IF9QYXR0ZXJuQ3Vyc29yJik+IF9NYXRj aGVyOwogCkBAIC0xNDAsMTIgKzE2MywxNSBAQAogICAvLy8gTWF0Y2hlcyBh IHNpbmdsZSBjaGFyYWN0ZXIKICAgdGVtcGxhdGU8dHlwZW5hbWUgX0luSXRl clQsIHR5cGVuYW1lIF9UcmFpdHNUPgogICAgIHN0cnVjdCBfQ2hhck1hdGNo ZXIKKyAgICA6IHB1YmxpYyBfQ29tcGFyYXRvcjxfSW5JdGVyVCwgX1RyYWl0 c1Q+CiAgICAgewotICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVDo6 Y2hhcl90eXBlIGNoYXJfdHlwZTsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmF0 b3I8X0luSXRlclQsIF9UcmFpdHNUPiAgICAgX0Jhc2VUOworICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzVDo6Y2hhcl90eXBlICAgICAgICBfQ2hh clQ7CisgICAgICB0eXBlZGVmIHJlZ2V4X2NvbnN0YW50czo6c3ludGF4X29w dGlvbl90eXBlIF9GbGFnVDsKIAogICAgICAgZXhwbGljaXQKLSAgICAgIF9D aGFyTWF0Y2hlcihjaGFyX3R5cGUgX19jLCBjb25zdCBfVHJhaXRzVCYgX190 ID0gX1RyYWl0c1QoKSkKLSAgICAgIDogX01fdHJhaXRzKF9fdCksIF9NX2Mo X01fdHJhaXRzLnRyYW5zbGF0ZShfX2MpKQorICAgICAgX0NoYXJNYXRjaGVy KF9DaGFyVCBfX2MsIF9GbGFnVCBfX2ZsYWdzLCBjb25zdCBfVHJhaXRzVCYg X190KQorICAgICAgOiBfQmFzZVQoX19mbGFncywgX190KSwgX01fYyhfX2Mp CiAgICAgICB7IH0KIAogICAgICAgYm9vbApAQCAtMTUzLDU1ICsxNzksNzkg QEAKICAgICAgIHsKIAl0eXBlZGVmIGNvbnN0IF9TcGVjaWFsaXplZEN1cnNv cjxfSW5JdGVyVD4mIF9DdXJzb3JUOwogCV9DdXJzb3JUIF9fYyA9IHN0YXRp Y19jYXN0PF9DdXJzb3JUPihfX3BjKTsKLQlyZXR1cm4gX01fdHJhaXRzLnRy YW5zbGF0ZShfX2MuX01fY3VycmVudCgpKSA9PSBfTV9jOworICAgICAgICBy ZXR1cm4gdGhpcy0+X01fZXF1KF9fYy5fTV9jdXJyZW50KCksIF9NX2MpOwog ICAgICAgfQogCi0gICAgICBjb25zdCBfVHJhaXRzVCYgX01fdHJhaXRzOwot ICAgICAgY2hhcl90eXBlICAgICAgIF9NX2M7CisgICAgICBfQ2hhclQgICAg ICAgX01fYzsKICAgICB9OwogCiAgIC8vLyBNYXRjaGVzIGEgY2hhcmFjdGVy IHJhbmdlIChicmFja2V0IGV4cHJlc3Npb24pCiAgIHRlbXBsYXRlPHR5cGVu YW1lIF9Jbkl0ZXJULCB0eXBlbmFtZSBfVHJhaXRzVD4KLSAgICBzdHJ1Y3Qg X1JhbmdlTWF0Y2hlcgorICAgIHN0cnVjdCBfQnJhY2tldE1hdGNoZXIKKyAg ICA6IHB1YmxpYyBfQ29tcGFyYXRvcjxfSW5JdGVyVCwgX1RyYWl0c1Q+CiAg ICAgewotICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzVDo6Y2hhcl90 eXBlIF9DaGFyVDsKLSAgICAgIHR5cGVkZWYgc3RkOjpiYXNpY19zdHJpbmc8 X0NoYXJUPiAgICBfU3RyaW5nVDsKKyAgICAgIHR5cGVkZWYgX0NvbXBhcmF0 b3I8X0luSXRlclQsIF9UcmFpdHNUPiAgICAgX0Jhc2VUOworICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzVDo6Y2hhcl9jbGFzc190eXBlICBfQ2hh ckNsYXNzVDsKKyAgICAgIHR5cGVkZWYgcmVnZXhfY29uc3RhbnRzOjpzeW50 YXhfb3B0aW9uX3R5cGUgX0ZsYWdUOworICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzVDo6Y2hhcl90eXBlICAgICAgICBfQ2hhclQ7CisgICAgICB0 eXBlZGVmIHN0ZDo6YmFzaWNfc3RyaW5nPF9DaGFyVD4gICAgICAgICAgIF9T dHJpbmdUOwogCiAgICAgICBleHBsaWNpdAotICAgICAgX1JhbmdlTWF0Y2hl cihib29sIF9faXNfbm9uX21hdGNoaW5nLCBjb25zdCBfVHJhaXRzVCYgX190 ID0gX1RyYWl0c1QoKSkKLSAgICAgIDogX01fdHJhaXRzKF9fdCksIF9NX2lz X25vbl9tYXRjaGluZyhfX2lzX25vbl9tYXRjaGluZykKKyAgICAgIF9CcmFj a2V0TWF0Y2hlcihib29sIF9faXNfbm9uX21hdGNoaW5nLAorICAgICAgICAg ICAgICAgICAgICBfRmxhZ1QgX19mbGFncywKKyAgICAgICAgICAgICAgICAg ICAgY29uc3QgX1RyYWl0c1QmIF9fdCkKKyAgICAgIDogX0Jhc2VUKF9fZmxh Z3MsIF9fdCksIF9NX2ZsYWdzKF9fZmxhZ3MpLCBfTV90cmFpdHMoX190KSwK KyAgICAgIF9NX2lzX25vbl9tYXRjaGluZyhfX2lzX25vbl9tYXRjaGluZyks IF9NX2NsYXNzX3NldCgwKQogICAgICAgeyB9CiAKICAgICAgIGJvb2wKLSAg ICAgIG9wZXJhdG9yKCkoY29uc3QgX1BhdHRlcm5DdXJzb3ImIF9fcGMpIGNv bnN0Ci0gICAgICB7Ci0JdHlwZWRlZiBjb25zdCBfU3BlY2lhbGl6ZWRDdXJz b3I8X0luSXRlclQ+JiBfQ3Vyc29yVDsKLQlfQ3Vyc29yVCBfX2MgPSBzdGF0 aWNfY2FzdDxfQ3Vyc29yVD4oX19wYyk7Ci0JcmV0dXJuIHRydWU7Ci0gICAg ICB9CisgICAgICBvcGVyYXRvcigpKGNvbnN0IF9QYXR0ZXJuQ3Vyc29yJiBf X3BjKSBjb25zdDsKIAogICAgICAgdm9pZAogICAgICAgX01fYWRkX2NoYXIo X0NoYXJUIF9fYykKLSAgICAgIHsgfQorICAgICAgeyBfTV9jaGFyX3NldC5w dXNoX2JhY2soX19jKTsgfQogCiAgICAgICB2b2lkCiAgICAgICBfTV9hZGRf Y29sbGF0aW5nX2VsZW1lbnQoY29uc3QgX1N0cmluZ1QmIF9fcykKLSAgICAg IHsgfQorICAgICAgeworICAgICAgICBhdXRvIF9fc3QgPSBfTV90cmFpdHMu bG9va3VwX2NvbGxhdGVuYW1lKCYqX19zLmJlZ2luKCksICYqX19zLmVuZCgp KTsKKyAgICAgICAgaWYgKF9fc3QuZW1wdHkoKSkKKyAgICAgICAgICBfX3Ro cm93X3JlZ2V4X2Vycm9yKHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfY29sbGF0 ZSk7CisgICAgICAgIC8vIFRPRE86IGRpZ3JhcGgKKyAgICAgICAgX01fY2hh cl9zZXQucHVzaF9iYWNrKF9fc3RbMF0pOworICAgICAgfQogCiAgICAgICB2 b2lkCiAgICAgICBfTV9hZGRfZXF1aXZhbGVuY2VfY2xhc3MoY29uc3QgX1N0 cmluZ1QmIF9fcykKLSAgICAgIHsgfQorICAgICAgeworICAgICAgICBfTV9h ZGRfY2hhcmFjdGVyX2NsYXNzKAorICAgICAgICAgIF9NX3RyYWl0cy50cmFu c2Zvcm1fcHJpbWFyeSgmKl9fcy5iZWdpbigpLCAmKl9fcy5lbmQoKSkpOwor ICAgICAgfQogCiAgICAgICB2b2lkCiAgICAgICBfTV9hZGRfY2hhcmFjdGVy X2NsYXNzKGNvbnN0IF9TdHJpbmdUJiBfX3MpCi0gICAgICB7IH0KKyAgICAg IHsKKyAgICAgICAgYXV0byBfX3N0ID0gX01fdHJhaXRzLmxvb2t1cF9jbGFz c25hbWUoCisgICAgICAgICAgJipfX3MuYmVnaW4oKSwgJipfX3MuZW5kKCks IChfTV9mbGFncyAmIHJlZ2V4X2NvbnN0YW50czo6aWNhc2UpKTsKKyAgICAg ICAgaWYgKF9fc3QgPT0gMCkKKyAgICAgICAgICBfX3Rocm93X3JlZ2V4X2Vy cm9yKHJlZ2V4X2NvbnN0YW50czo6ZXJyb3JfY3R5cGUpOworICAgICAgICBf TV9jbGFzc19zZXQgfD0gX19zdDsKKyAgICAgIH0KIAogICAgICAgdm9pZAot ICAgICAgX01fbWFrZV9yYW5nZSgpCi0gICAgICB7IH0KKyAgICAgIF9NX21h a2VfcmFuZ2UoX0NoYXJUIF9fbCwgX0NoYXJUIF9fcikKKyAgICAgIHsKKyAg ICAgICAgaWYgKCF0aGlzLT5fTV9sZShfX2wsIF9fcikpCisgICAgICAgICAg X190aHJvd19yZWdleF9lcnJvcihyZWdleF9jb25zdGFudHM6OmVycm9yX3Jh bmdlKTsKKyAgICAgICAgX01fcmFuZ2Vfc2V0LnB1c2hfYmFjayhtYWtlX3Bh aXIoX19sLCBfX3IpKTsKKyAgICAgIH0KIAotICAgICAgY29uc3QgX1RyYWl0 c1QmIF9NX3RyYWl0czsKLSAgICAgIGJvb2wgICAgICAgICAgICBfTV9pc19u b25fbWF0Y2hpbmc7CisgICAgICBfRmxhZ1QgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfTV9mbGFnczsKKyAgICAgIF9UcmFpdHNUICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9NX3RyYWl0czsKKyAgICAgIGJvb2wgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2lzX25vbl9tYXRjaGlu ZzsKKyAgICAgIHN0ZDo6dmVjdG9yPF9DaGFyVD4gICAgICAgICAgICAgICAg IF9NX2NoYXJfc2V0OworICAgICAgc3RkOjp2ZWN0b3I8cGFpcjxfQ2hhclQs IF9DaGFyVD4+ICAgX01fcmFuZ2Vfc2V0OworICAgICAgX0NoYXJDbGFzc1Qg ICAgICAgICAgICAgICAgICAgICAgICAgX01fY2xhc3Nfc2V0OwogICAgIH07 CiAKICAgLy8vIElkZW50aWZpZXMgYSBzdGF0ZSBpbiB0aGUgTkZBLgpJbmRl eDogaW5jbHVkZS9iaXRzL3JlZ2V4X25mYS50Y2MKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gaW5jbHVkZS9iaXRzL3JlZ2V4X25mYS50Y2MJKHJldmlz aW9uIDIwMTM5NykKKysrIGluY2x1ZGUvYml0cy9yZWdleF9uZmEudGNjCSh3 b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw2NCBAQAogewogX0dMSUJDWFhf QkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAorICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5JdGVyVCwgdHlwZW5hbWUgX1RyYWl0c1Q+CisgICAgYm9vbCBfQnJh Y2tldE1hdGNoZXI8X0luSXRlclQsIF9UcmFpdHNUPjo6CisgICAgb3BlcmF0 b3IoKShjb25zdCBfUGF0dGVybkN1cnNvciYgX19wYykgY29uc3QKKyAgICB7 CisgICAgICB0eXBlZGVmIGNvbnN0IF9TcGVjaWFsaXplZEN1cnNvcjxfSW5J dGVyVD4mIF9DdXJzb3JUOworICAgICAgX0N1cnNvclQgX19jID0gc3RhdGlj X2Nhc3Q8X0N1cnNvclQ+KF9fcGMpOworICAgICAgX0NoYXJUIF9fY2ggPSBf X2MuX01fY3VycmVudCgpOworICAgICAgYm9vbCBfX3JldCA9IGZhbHNlOwor ICAgICAgZm9yIChhdXRvIF9fYyA6IF9NX2NoYXJfc2V0KQorICAgICAgICBp ZiAodGhpcy0+X01fZXF1KF9fYywgX19jaCkpCisgICAgICAgICAgeworICAg ICAgICAgICAgX19yZXQgPSB0cnVlOworICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgICAgfQorICAgICAgaWYgKCFfX3JldCAmJiBfTV90cmFpdHMuaXNj dHlwZShfX2NoLCBfTV9jbGFzc19zZXQpKQorICAgICAgICBfX3JldCA9IHRy dWU7CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBmb3IgKGF1 dG8mIF9faXQgOiBfTV9yYW5nZV9zZXQpCisgICAgICAgICAgICBpZiAodGhp cy0+X01fbGUoX19pdC5maXJzdCwgX19jaCkgJiYgdGhpcy0+X01fbGUoX19j aCwgX19pdC5zZWNvbmQpKQorICAgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgX19yZXQgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGlmIChfTV9pc19u b25fbWF0Y2hpbmcpCisgICAgICAgIF9fcmV0ID0gIV9fcmV0OworICAgICAg cmV0dXJuIF9fcmV0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SW5JdGVyVCwgdHlwZW5hbWUgX1RyYWl0c1Q+CisgICAgYm9vbCBfQ29tcGFy YXRvcjxfSW5JdGVyVCwgX1RyYWl0c1Q+OjoKKyAgICBfTV9lcXUoX0NoYXJU IF9fYSwgX0NoYXJUIF9fYikgY29uc3QKKyAgICB7CisgICAgICBpZiAoX01f ZmxhZ3MgJiByZWdleF9jb25zdGFudHM6OmljYXNlKQorICAgICAgICByZXR1 cm4gX01fdHJhaXRzLnRyYW5zbGF0ZV9ub2Nhc2UoX19hKQorICAgICAgICAg ID09IF9NX3RyYWl0cy50cmFuc2xhdGVfbm9jYXNlKF9fYik7CisgICAgICBp ZiAoX01fZmxhZ3MgJiByZWdleF9jb25zdGFudHM6OmNvbGxhdGUpCisgICAg ICAgIHJldHVybiBfTV90cmFpdHMudHJhbnNsYXRlKF9fYSkgPT0gX01fdHJh aXRzLnRyYW5zbGF0ZShfX2IpOworICAgICAgcmV0dXJuIF9fYSA9PSBfX2I7 CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0ZXJULCB0eXBl bmFtZSBfVHJhaXRzVD4KKyAgICBib29sIF9Db21wYXJhdG9yPF9Jbkl0ZXJU LCBfVHJhaXRzVD46OgorICAgIF9NX2xlKF9DaGFyVCBfX2EsIF9DaGFyVCBf X2IpIGNvbnN0CisgICAgeworICAgICAgX1N0cmluZ1QgX19zdHIxID0gX1N0 cmluZ1QoMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N X2ZsYWdzICYgcmVnZXhfY29uc3RhbnRzOjppY2FzZQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPyBfTV90cmFpdHMudHJhbnNsYXRlX25v Y2FzZShfX2EpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6 IF9NX3RyYWl0cy50cmFuc2xhdGUoX19hKSk7CisgICAgICBfU3RyaW5nVCBf X3N0cjIgPSBfU3RyaW5nVCgxLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX01fZmxhZ3MgJiByZWdleF9jb25zdGFudHM6OmljYXNlCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3RyYWl0cy50 cmFuc2xhdGVfbm9jYXNlKF9fYikKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDogX01fdHJhaXRzLnRyYW5zbGF0ZShfX2IpKTsKKyAgICAg IHJldHVybiBfTV90cmFpdHMudHJhbnNmb3JtKF9fc3RyMS5iZWdpbigpLCBf X3N0cjEuZW5kKCkpCisgICAgICAgIDw9IF9NX3RyYWl0cy50cmFuc2Zvcm0o X19zdHIyLmJlZ2luKCksIF9fc3RyMi5lbmQoKSk7CisgICAgfQorCiAjaWZk ZWYgX0dMSUJDWFhfREVCVUcKIGlubGluZSBzdGQ6Om9zdHJlYW0mIF9TdGF0 ZTo6CiBfTV9wcmludChzdGQ6Om9zdHJlYW0mIG9zdHIpIGNvbnN0CkluZGV4 OiB0ZXN0c3VpdGUvMjhfcmVnZXgvYWxnb3JpdGhtcy9yZWdleF9tYXRjaC9l eHRlbmRlZC81MzYyMi5jYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB0 ZXN0c3VpdGUvMjhfcmVnZXgvYWxnb3JpdGhtcy9yZWdleF9tYXRjaC9leHRl bmRlZC81MzYyMi5jYwkocmV2aXNpb24gMjAxMzk3KQorKysgdGVzdHN1aXRl LzI4X3JlZ2V4L2FsZ29yaXRobXMvcmVnZXhfbWF0Y2gvZXh0ZW5kZWQvNTM2 MjIuY2MJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDcgQEAKICAgICBz dGQ6OnN0cmluZyB0YXJnZXQoInp4Y3Yvb25ldHdvYWJjIik7CiAgICAgc3Rk OjpzbWF0Y2ggbTsKIAotICAgIFZFUklGWSggc3RkOjpyZWdleF9zZWFyY2go dGFyZ2V0LCBtLCByZSkgKTsKKyAgICBWRVJJRlkoIHN0ZDo6cmVnZXhfbWF0 Y2godGFyZ2V0LCBtLCByZSkgKTsKICAgICBWRVJJRlkoIG0uc2l6ZSgpID09 IDIgKTsKICAgICBWRVJJRlkoIG1bMF0ubWF0Y2hlZCA9PSB0cnVlICk7CiAg ICAgVkVSSUZZKCBzdGQ6OnN0cmluZyhtWzBdLmZpcnN0LCBtWzBdLnNlY29u ZCkgPT0gInp4Y3Yvb25ldHdvYWJjIiApOwpAQCAtNTAsNyArNTAsNyBAQAog ICAgIHN0ZDo6c3RyaW5nIHRhcmdldCgienhjdi9vbmV0d29hYmMiKTsKICAg ICBzdGQ6OnNtYXRjaCBtOwogCi0gICAgVkVSSUZZKCBzdGQ6OnJlZ2V4X3Nl YXJjaCh0YXJnZXQsIG0sIHJlKSApOworICAgIFZFUklGWSggc3RkOjpyZWdl eF9tYXRjaCh0YXJnZXQsIG0sIHJlKSApOwogICAgIFZFUklGWSggbS5zaXpl KCkgPT0gMyApOwogICAgIFZFUklGWSggbVswXS5tYXRjaGVkID09IHRydWUg KTsKICAgICBWRVJJRlkoIHN0ZDo6c3RyaW5nKG1bMF0uZmlyc3QsIG1bMF0u c2Vjb25kKSA9PSAienhjdi9vbmV0d29hYmMiICk7CkluZGV4OiB0ZXN0c3Vp dGUvMjhfcmVnZXgvYWxnb3JpdGhtcy9yZWdleF9tYXRjaC9leHRlbmRlZC9j c3RyaW5nX2JyYWNrZXRfMDEuY2MKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot LS0gdGVzdHN1aXRlLzI4X3JlZ2V4L2FsZ29yaXRobXMvcmVnZXhfbWF0Y2gv ZXh0ZW5kZWQvY3N0cmluZ19icmFja2V0XzAxLmNjCShyZXZpc2lvbiAwKQor KysgdGVzdHN1aXRlLzI4X3JlZ2V4L2FsZ29yaXRobXMvcmVnZXhfbWF0Y2gv ZXh0ZW5kZWQvY3N0cmluZ19icmFja2V0XzAxLmNjCSh3b3JraW5nIGNvcHkp CkBAIC0wLDAgKzEsNjYgQEAKKy8vIHsgZGctb3B0aW9ucyAiLXN0ZD1nbnUr KzExIiB9CisKKy8vCisvLyAyMDEzLTA4LTAxICBUaW0gU2hlbiA8dGltc2hl bjkxQGdtYWlsLmNvbT4KKy8vCisvLyBDb3B5cmlnaHQgKEMpIDIwMTMgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxl IGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJhcnkuICBUaGlzIGxp YnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIg dmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIg dmVyc2lvbi4KKy8vCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorLy8KKy8v IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCisvLyB3aXRoIHRoaXMgbGli cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQorLy8g PGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvLyAyOC4xMS4y IHJlZ2V4X21hdGNoCisvLyBUZXN0cyBFeHRlbmRlZCBicmFja2V0IGV4cHJl c3Npb24gYWdhaW5zdCBhIEMtc3RyaW5nLgorCisjaW5jbHVkZSA8cmVnZXg+ CisjaW5jbHVkZSA8dGVzdHN1aXRlX2hvb2tzLmg+CisKK3ZvaWQKK3Rlc3Qw MSgpCit7CisgIGJvb2wgdGVzdCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9 IHRydWU7CisKKyAgeworICAgIHN0ZDo6cmVnZXggIHJlKCJwcmUvW3phLXhd Iiwgc3RkOjpyZWdleDo6ZXh0ZW5kZWQpOworICAgIFZFUklGWSggc3RkOjpy ZWdleF9tYXRjaCgicHJlL3oiLCByZSkgKTsKKyAgICBWRVJJRlkoIHN0ZDo6 cmVnZXhfbWF0Y2goInByZS9hIiwgcmUpICk7CisgICAgVkVSSUZZKCAhc3Rk OjpyZWdleF9tYXRjaCgicHJlL3kiLCByZSkgKTsKKyAgfQorICB7CisgICAg c3RkOjpyZWdleCAgcmUoInByZS9bWzp1UFBlcjpdXSIsIHN0ZDo6cmVnZXg6 OmV4dGVuZGVkKTsKKyAgICBWRVJJRlkoIHN0ZDo6cmVnZXhfbWF0Y2goInBy ZS9aIiwgcmUpICk7CisgICAgVkVSSUZZKCAhc3RkOjpyZWdleF9tYXRjaCgi cHJlL18iLCByZSkgKTsKKyAgICBWRVJJRlkoICFzdGQ6OnJlZ2V4X21hdGNo KCJwcmUvYSIsIHJlKSApOworICAgIFZFUklGWSggIXN0ZDo6cmVnZXhfbWF0 Y2goInByZS8wIiwgcmUpICk7CisgIH0KKyAgeworICAgIHN0ZDo6cmVnZXgg IHJlKCJwcmUvW1s6bE9XZXI6XV0iLCBzdGQ6OnJlZ2V4OjpleHRlbmRlZCB8 IHN0ZDo6cmVnZXg6OmljYXNlKTsKKyAgICBWRVJJRlkoIHN0ZDo6cmVnZXhf bWF0Y2goInByZS9aIiwgcmUpICk7CisgICAgVkVSSUZZKCBzdGQ6OnJlZ2V4 X21hdGNoKCJwcmUvYSIsIHJlKSApOworICB9CisgIHsKKyAgICBzdGQ6OnJl Z2V4ICByZSgicHJlL1tbOnc6XVsudGlsZGUuXV0iLCBzdGQ6OnJlZ2V4Ojpl eHRlbmRlZCk7CisgICAgVkVSSUZZKCBzdGQ6OnJlZ2V4X21hdGNoKCJwcmUv fiIsIHJlKSApOworICAgIFZFUklGWSggc3RkOjpyZWdleF9tYXRjaCgicHJl L18iLCByZSkgKTsKKyAgICBWRVJJRlkoIHN0ZDo6cmVnZXhfbWF0Y2goInBy ZS9hIiwgcmUpICk7CisgICAgVkVSSUZZKCBzdGQ6OnJlZ2V4X21hdGNoKCJw cmUvMCIsIHJlKSApOworICB9Cit9CisKK2ludAorbWFpbigpCit7CisgIHRl c3QwMSgpOworICByZXR1cm4gMDsKK30K --001a1133232e5ee64b04e2e415cf Content-Type: application/octet-stream; name=changelog Content-Disposition: attachment; filename=changelog Content-Transfer-Encoding: base64 X-Attachment-Id: f_hju33n5u1 Content-length: 688 MjAxMy0wOC0wMSAgVGltIFNoZW4gIDx0aW1zaGVuOTFAZ21haWwuY29tPgoK CUltcGxlbWVudCBicmFja2V0IGV4cHJlc3Npb24uCgkqIGluY2x1ZGUvYml0 cy9yZWdleC5oOiBSZW1vdmUgY29uc3RleHByIGZyb20gInw9IiwgZXRjLgoJ KiBpbmNsdWRlL2JpdHMvcmVnZXhfY29tcGlsZXIuaDogUGFyc2UgYnJhY2tl dCBleHByZXNzaW9uLgoJKiBpbmNsdWRlL2JpdHMvcmVnZXhfbmZhLmg6IF9D b21wYXJhdG9yIGFuZCBfQnJhY2tldE1hdGNoZXIob2xkCglfUmFuZ2VNYXRj aGVyKS4KCSogaW5jbHVkZS9iaXRzL3JlZ2V4X25mYS50Y2M6IEltcGxlbWVu dCB0aGVtLgoJKiB0ZXN0c3VpdGUvMjhfcmVnZXgvYWxnb3JpdGhtcy9yZWdl eF9tYXRjaC9leHRlbmRlZC81MzYyMi5jYwoJOiBmcm9tIHJlZ2V4X3NlYXJj aCB0byByZWdleF9tYXRjaC4KCSogdGVzdHN1aXRlLzI4X3JlZ2V4L2FsZ29y aXRobXMvcmVnZXhfbWF0Y2gvZXh0ZW5kZWQvCgljc3RyaW5nX2JyYWNrZXRf MDEuY2M6IE5ldy4K --001a1133232e5ee64b04e2e415cf--