From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-yw1-x1129.google.com (mail-yw1-x1129.google.com [IPv6:2607:f8b0:4864:20::1129]) by sourceware.org (Postfix) with ESMTPS id E05863856948 for ; Mon, 23 Oct 2023 21:09:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E05863856948 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=golang.org Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=golang.org ARC-Filter: OpenARC Filter v1.0.0 sourceware.org E05863856948 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::1129 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698095352; cv=none; b=RAl0kYtwKLhhT7r2Yz0DI+OoWUH3Tg588NM+fTi5Nhnk0jXzx400JJIzPDzrDNqKdH496pEZCOo9UjiQVbgs8ZalBqjWd059//l82CXopBlaxsnm+Ntn8AH10Md5IoEI+5aIIFhr2cleuL+bk2x/dPSJBhaqbHQgeV29kGadbno= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698095352; c=relaxed/simple; bh=+BTXLtThqp9flKb9W2CK7l4a0BrXdAv6yvox4oEYYVw=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=OdHkj5DjgVvfLdrDiMCgTtYs5FbJxyO1G4tocG7OvSNuX63y/sr1Us/ESiqpqNpv/PREhcxTLrhs3IMz3RoQcxgdWBeVD/jOXf5siTqQ5iUVNg11ww217ch76pqTj7j0GIet52D5EwDj57lmpI1JuwzmsYFv9y+tpmLt5b6dt2U= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-yw1-x1129.google.com with SMTP id 00721157ae682-5a7ac4c3666so37675637b3.3 for ; Mon, 23 Oct 2023 14:09:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=golang-org.20230601.gappssmtp.com; s=20230601; t=1698095342; x=1698700142; darn=gcc.gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=jOMQL8ikn07LJLW3tNmWYLiI8D7GnfYoGTzcG1yeCeI=; b=Rdyit5rnPFz0MSJTo4UVyIKhVAzc3Ct6cVz3jo97MSmSwcUmF6hvCW0x2R/DUbp5KW 3O0oZGAME9x8IlaeV6ymh0oEiPFjIylHR82yVyVLXR7eysfsjh/YWJet9lZDD+jgjqM/ +FN2VoVoXUTKslG8eugBNH6sBFAs8YUgBUoBxSyPbLsJGQSHws/1uw8/Ewh4tamMmt3D kaD3Z25O41FYRmpeMZpOhmCW4/2NdcZd3RizYuHclReoGTmC8nKA19XzVnt1B/tvMdbT wy17EW/v0NLh1pJcUZ9TCSlmxsLjspyhA3Ctw5EYi9UoBX2gmZjtVKiE3/l4HIF6ptrC 7v8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698095342; x=1698700142; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=jOMQL8ikn07LJLW3tNmWYLiI8D7GnfYoGTzcG1yeCeI=; b=dj0oIuxMIeD45mV8+nJH26jlcAzmwdVTJ6Y+D8p0Gkf4RWiT6mjEqIrQPbNF/ExNVu eeBWnh3J4hZQsp+p2rnIiyJwnQ2zMY1x3RPBLgG3YRqOrHJDExQahmZ+oYxB6273sQfi SXE3Kc7WjFZYFgNWOX9ocRUBDzAMxe4MwkwkXIcArL5hZm9mV2XUGatyVCgpZIZNmUKT FSG10A9uv9hp5jnfmMiAHgUteH4Uzj9iyedLHrafCGYnl1GamkxKVntxFT9lWxf4vszi HN5plD2AECNAOM67EhF0GtnMkpOHTCVW+9PtfIHqNWFpIanyIYpiw8mtNN/qs2wI8Q3X 9THQ== X-Gm-Message-State: AOJu0Yx3dGBrzOPaAewJEGYNNIMUZ0SlLy3km33XfCne+td+gtrQ7N39 rEdi237XQu4j1RCS1pmtbSzBykKvwtCrv9U8YE2aALTGHVvk/gGqbCo= X-Google-Smtp-Source: AGHT+IEQ0+BQtHDKx77bbjBvRFd4k3M3bcG1pleji3savXpMELdrAorcOAtw/SaAKcMMpBcx7CA6EbkeWR8PIN568P8= X-Received: by 2002:a0d:e84f:0:b0:5a8:5079:422 with SMTP id r76-20020a0de84f000000b005a850790422mr11275661ywe.26.1698095342639; Mon, 23 Oct 2023 14:09:02 -0700 (PDT) MIME-Version: 1.0 From: Ian Lance Taylor Date: Mon, 23 Oct 2023 14:08:51 -0700 Message-ID: Subject: Go patch committed: Pass Gogo to Runtime::make_call To: gcc-patches , gofrontend-dev Content-Type: multipart/mixed; boundary="000000000000b1beba060868a113" X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000b1beba060868a113 Content-Type: text/plain; charset="UTF-8" This Go frontend patches passes the Gogo IR pointer to Runtime::make_call. This is a boilerplate change that doesn't affect compiler output. It's not currently used but will be used by later CLs in this series. Bootstrapped and ran Go testsuite on x86_64-pc-linux-gnu. Committed to mainline. Ian --000000000000b1beba060868a113 Content-Type: text/plain; charset="US-ASCII"; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lo3e40di0 NDVhNWFiMDUwMzU2OWU1Nzg4M2RjYTRkOGU3NmQ4M2RjM2E2MGZmNgpkaWZmIC0tZ2l0IGEvZ2Nj L2dvL2dvZnJvbnRlbmQvTUVSR0UgYi9nY2MvZ28vZ29mcm9udGVuZC9NRVJHRQppbmRleCBkNDA5 NTYzN2NlYS4uZDk2MmM0ZjU3NzAgMTAwNjQ0Ci0tLSBhL2djYy9nby9nb2Zyb250ZW5kL01FUkdF CisrKyBiL2djYy9nby9nb2Zyb250ZW5kL01FUkdFCkBAIC0xLDQgKzEsNCBAQAotMWMwYTdjOTMz ODgwMWQxNWFmYmE3ZTM5MTA5NTU0ZWQzNDA2NjU0ZQorODA2MjE3ODI3ZmUzMDU1M2Q1MzVmODc2 ZjE4MmE5ZTkyZjVmNjQ4ZQogCiBUaGUgZmlyc3QgbGluZSBvZiB0aGlzIGZpbGUgaG9sZHMgdGhl IGdpdCByZXZpc2lvbiBudW1iZXIgb2YgdGhlIGxhc3QKIG1lcmdlIGRvbmUgZnJvbSB0aGUgZ29m cm9udGVuZCByZXBvc2l0b3J5LgpkaWZmIC0tZ2l0IGEvZ2NjL2dvL2dvZnJvbnRlbmQvZXhwcmVz c2lvbnMuY2MgYi9nY2MvZ28vZ29mcm9udGVuZC9leHByZXNzaW9ucy5jYwppbmRleCA1YmVhNjIz OGRlZi4uYzdiNDQyZDNhMDMgMTAwNjQ0Ci0tLSBhL2djYy9nby9nb2Zyb250ZW5kL2V4cHJlc3Np b25zLmNjCisrKyBiL2djYy9nby9nb2Zyb250ZW5kL2V4cHJlc3Npb25zLmNjCkBAIC0zMDUsOCAr MzA1LDggQEAgRXhwcmVzc2lvbjo6Y29udmVydF9mb3JfYXNzaWdubWVudChHb2dvKiBnb2dvLCBU eXBlKiBsaHNfdHlwZSwKICAgICB7CiAgICAgICAvLyBUeXBlIHRvIGludGVyZmFjZSBjb252ZXJz aW9ucyBoYXZlIGJlZW4gbWFkZSBleHBsaWNpdCBlYXJseS4KICAgICAgIGdvX2Fzc2VydChyaHNf dHlwZS0+aW50ZXJmYWNlX3R5cGUoKSAhPSBOVUxMKTsKLSAgICAgIHJldHVybiBFeHByZXNzaW9u Ojpjb252ZXJ0X2ludGVyZmFjZV90b19pbnRlcmZhY2UobGhzX3R5cGUsIHJocywgZmFsc2UsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxv Y2F0aW9uKTsKKyAgICAgIHJldHVybiBFeHByZXNzaW9uOjpjb252ZXJ0X2ludGVyZmFjZV90b19p bnRlcmZhY2UoZ29nbywgbGhzX3R5cGUsIHJocywKKwkJCQkJCQlmYWxzZSwgbG9jYXRpb24pOwog ICAgIH0KICAgZWxzZSBpZiAoIWFyZV9pZGVudGljYWwgJiYgcmhzX3R5cGUtPmludGVyZmFjZV90 eXBlKCkgIT0gTlVMTCkKICAgICByZXR1cm4gRXhwcmVzc2lvbjo6Y29udmVydF9pbnRlcmZhY2Vf dG9fdHlwZShnb2dvLCBsaHNfdHlwZSwgcmhzLCBsb2NhdGlvbik7CkBAIC01MjUsNyArNTI1LDgg QEAgRXhwcmVzc2lvbjo6Z2V0X2ludGVyZmFjZV90eXBlX2Rlc2NyaXB0b3IoRXhwcmVzc2lvbiog cmhzKQogLy8gaW50ZXJmYWNlIHR5cGUuCiAKIEV4cHJlc3Npb24qCi1FeHByZXNzaW9uOjpjb252 ZXJ0X2ludGVyZmFjZV90b19pbnRlcmZhY2UoVHlwZSAqbGhzX3R5cGUsIEV4cHJlc3Npb24qIHJo cywKK0V4cHJlc3Npb246OmNvbnZlcnRfaW50ZXJmYWNlX3RvX2ludGVyZmFjZShHb2dvKiBnb2dv LCBUeXBlICpsaHNfdHlwZSwKKwkJCQkJICAgRXhwcmVzc2lvbiogcmhzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZm9yX3R5cGVfZ3VhcmQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTG9jYXRpb24gbG9jYXRpb24p CiB7CkBAIC01NTgsNyArNTU5LDcgQEAgRXhwcmVzc2lvbjo6Y29udmVydF9pbnRlcmZhY2VfdG9f aW50ZXJmYWNlKFR5cGUgKmxoc190eXBlLCBFeHByZXNzaW9uKiByaHMsCiAgIGlmIChmb3JfdHlw ZV9ndWFyZCkKICAgICB7CiAgICAgICAvLyBBIHR5cGUgYXNzZXJ0aW9uIGZhaWxzIHdoZW4gY29u dmVydGluZyBhIG5pbCBpbnRlcmZhY2UuCi0gICAgICBmaXJzdF9maWVsZCA9IFJ1bnRpbWU6Om1h a2VfY2FsbChSdW50aW1lOjpBU1NFUlRJVEFCLCBsb2NhdGlvbiwgMiwKKyAgICAgIGZpcnN0X2Zp ZWxkID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OkFTU0VSVElUQUIsIGxvY2F0 aW9uLCAyLAogCQkJCSAgICAgICBsaHNfdHlwZV9leHByLCByaHNfdHlwZV9leHByKTsKICAgICB9 CiAgIGVsc2UgaWYgKGxoc19pc19lbXB0eSkKQEAgLTU3MSw3ICs1NzIsNyBAQCBFeHByZXNzaW9u Ojpjb252ZXJ0X2ludGVyZmFjZV90b19pbnRlcmZhY2UoVHlwZSAqbGhzX3R5cGUsIEV4cHJlc3Np b24qIHJocywKICAgICB7CiAgICAgICAvLyBBIGNvbnZlcnNpb24gdG8gYSBub24tZW1wdHkgaW50 ZXJmYWNlIG1heSBmYWlsLCBidXQgdW5saWtlIGEKICAgICAgIC8vIHR5cGUgYXNzZXJ0aW9uIGNv bnZlcnRpbmcgbmlsIHdpbGwgYWx3YXlzIHN1Y2NlZWQuCi0gICAgICBmaXJzdF9maWVsZCA9IFJ1 bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpSRVFVSVJFSVRBQiwgbG9jYXRpb24sIDIsCisgICAg ICBmaXJzdF9maWVsZCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChnb2dvLCBSdW50aW1lOjpSRVFVSVJF SVRBQiwgbG9jYXRpb24sIDIsCiAJCQkJICAgICAgIGxoc190eXBlX2V4cHIsIHJoc190eXBlX2V4 cHIpOwogICAgIH0KIApAQCAtNjEwLDcgKzYxMSw3IEBAIEV4cHJlc3Npb246OmNvbnZlcnRfaW50 ZXJmYWNlX3RvX3R5cGUoR29nbyogZ29nbywgVHlwZSAqbGhzX3R5cGUsIEV4cHJlc3Npb24qIHJo CiAKICAgRXhwcmVzc2lvbiogY29uZDsKICAgaWYgKGdvZ28tPm5lZWRfZXF0eXBlKCkpIHsKLSAg ICBjb25kID0gUnVudGltZTo6bWFrZV9jYWxsKFJ1bnRpbWU6OkVRVFlQRSwgbG9jYXRpb24sCisg ICAgY29uZCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChnb2dvLCBSdW50aW1lOjpFUVRZUEUsIGxvY2F0 aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMiwgbGhzX3R5cGVfZXhwciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJoc19kZXNjcmlwdG9yKTsKICAgfSBlbHNlIHsK QEAgLTYxOSw3ICs2MjAsNyBAQCBFeHByZXNzaW9uOjpjb252ZXJ0X2ludGVyZmFjZV90b190eXBl KEdvZ28qIGdvZ28sIFR5cGUgKmxoc190eXBlLCBFeHByZXNzaW9uKiByaAogICB9CiAKICAgcmhz X2Rlc2NyaXB0b3IgPSBFeHByZXNzaW9uOjpnZXRfaW50ZXJmYWNlX3R5cGVfZGVzY3JpcHRvcihy aHMpOwotICBFeHByZXNzaW9uKiBwYW5pYyA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpQ QU5JQ0RPVFRZUEUsIGxvY2F0aW9uLAorICBFeHByZXNzaW9uKiBwYW5pYyA9IFJ1bnRpbWU6Om1h a2VfY2FsbChnb2dvLCBSdW50aW1lOjpQQU5JQ0RPVFRZUEUsIGxvY2F0aW9uLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLCBsaHNfdHlwZV9leHByLT5jb3B5KCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJoc19kZXNjcmlwdG9y LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaHNfaW50ZXJfZXhw cik7CkBAIC03MTksNyArNzIwLDggQEAgRXhwcmVzc2lvbjo6YmFja2VuZF9udW1lcmljX2NvbnN0 YW50X2V4cHJlc3Npb24oVHJhbnNsYXRlX2NvbnRleHQqIGNvbnRleHQsCiAvLyBmdW5jdGlvbnMs IHdoaWNoIHdpbGwgcGFuaWMuCiAKIHZvaWQKLUV4cHJlc3Npb246OmNoZWNrX2JvdW5kcyhFeHBy ZXNzaW9uKiB2YWwsIE9wZXJhdG9yIG9wLCBFeHByZXNzaW9uKiBib3VuZCwKK0V4cHJlc3Npb246 OmNoZWNrX2JvdW5kcyhHb2dvKiBnb2dvLCBFeHByZXNzaW9uKiB2YWwsIE9wZXJhdG9yIG9wLAor CQkJIEV4cHJlc3Npb24qIGJvdW5kLAogCQkJIFJ1bnRpbWU6OkZ1bmN0aW9uIGNvZGUsCiAJCQkg UnVudGltZTo6RnVuY3Rpb24gY29kZV91LAogCQkJIFJ1bnRpbWU6OkZ1bmN0aW9uIGNvZGVfZXh0 ZW5kLApAQCAtODEzLDcgKzgxNSw3IEBAIEV4cHJlc3Npb246OmNoZWNrX2JvdW5kcyhFeHByZXNz aW9uKiB2YWwsIE9wZXJhdG9yIG9wLCBFeHByZXNzaW9uKiBib3VuZCwKICAgICB9CiAKICAgRXhw cmVzc2lvbiogaWdub3JlID0gRXhwcmVzc2lvbjo6bWFrZV9ib29sZWFuKHRydWUsIGxvYyk7Ci0g IEV4cHJlc3Npb24qIGNyYXNoID0gUnVudGltZTo6bWFrZV9jYWxsKGMsIGxvYywgMiwKKyAgRXhw cmVzc2lvbiogY3Jhc2ggPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgYywgbG9jLCAyLAogCQkJ CQkgdmFsLT5jb3B5KCksIGJvdW5kLT5jb3B5KCkpOwogICBFeHByZXNzaW9uKiBjb25kID0gRXhw cmVzc2lvbjo6bWFrZV9jb25kaXRpb25hbChjaGVjaywgaWdub3JlLCBjcmFzaCwgbG9jKTsKICAg aW5zZXJ0ZXItPmluc2VydChTdGF0ZW1lbnQ6Om1ha2Vfc3RhdGVtZW50KGNvbmQsIHRydWUpKTsK QEAgLTM5MTYsNyArMzkxOCw3IEBAIFR5cGVfY29udmVyc2lvbl9leHByZXNzaW9uOjpkb190cmF2 ZXJzZShUcmF2ZXJzZSogdHJhdmVyc2UpCiAvLyBmcm9tIHNsaWNlIHRvIHBvaW50ZXItdG8tYXJy YXksIGFzIHRoZXkgY2FuIHBhbmljLgogCiBFeHByZXNzaW9uKgotVHlwZV9jb252ZXJzaW9uX2V4 cHJlc3Npb246OmRvX2xvd2VyKEdvZ28qLCBOYW1lZF9vYmplY3QqLAorVHlwZV9jb252ZXJzaW9u X2V4cHJlc3Npb246OmRvX2xvd2VyKEdvZ28qIGdvZ28sIE5hbWVkX29iamVjdCosCiAJCQkJICAg ICBTdGF0ZW1lbnRfaW5zZXJ0ZXIqIGluc2VydGVyLCBpbnQpCiB7CiAgIFR5cGUqIHR5cGUgPSB0 aGlzLT50eXBlXzsKQEAgLTQwMzcsNyArNDAzOSw3IEBAIFR5cGVfY29udmVyc2lvbl9leHByZXNz aW9uOjpkb19sb3dlcihHb2dvKiwgTmFtZWRfb2JqZWN0KiwKIAkJCQkJCSBsb2NhdGlvbik7CiAK ICAgICAgIHZhbGxlbiA9IEV4cHJlc3Npb246Om1ha2VfdGVtcG9yYXJ5X3JlZmVyZW5jZSh2YWxs ZW5fdGVtcCwgbG9jYXRpb24pOwotICAgICAgRXhwcmVzc2lvbiogcGFuaWMgPSBSdW50aW1lOjpt YWtlX2NhbGwoUnVudGltZTo6UEFOSUNfU0xJQ0VfQ09OVkVSVCwKKyAgICAgIEV4cHJlc3Npb24q IHBhbmljID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OlBBTklDX1NMSUNFX0NP TlZFUlQsCiAJCQkJCSAgICAgbG9jYXRpb24sIDIsIGFycmxlbiwgdmFsbGVuKTsKIAogICAgICAg RXhwcmVzc2lvbiogbmlsID0gRXhwcmVzc2lvbjo6bWFrZV9uaWwobG9jYXRpb24pOwpAQCAtNDM1 OCw3ICs0MzYwLDcgQEAgVHlwZV9jb252ZXJzaW9uX2V4cHJlc3Npb246OmRvX2dldF9iYWNrZW5k KFRyYW5zbGF0ZV9jb250ZXh0KiBjb250ZXh0KQogICAgICAgZWxzZQogICAgICAgICBidWYgPSBF eHByZXNzaW9uOjptYWtlX25pbChsb2MpOwogICAgICAgRXhwcmVzc2lvbiogaTJzX2V4cHIgPQot ICAgICAgICBSdW50aW1lOjptYWtlX2NhbGwoUnVudGltZTo6SU5UU1RSSU5HLCBsb2MsIDIsIGJ1 ZiwgdGhpcy0+ZXhwcl8pOworICAgICAgICBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGlt ZTo6SU5UU1RSSU5HLCBsb2MsIDIsIGJ1ZiwgdGhpcy0+ZXhwcl8pOwogICAgICAgcmV0dXJuIEV4 cHJlc3Npb246Om1ha2VfY2FzdCh0eXBlLCBpMnNfZXhwciwgbG9jKS0+Z2V0X2JhY2tlbmQoY29u dGV4dCk7CiAgICAgfQogICBlbHNlIGlmICh0eXBlLT5pc19zdHJpbmdfdHlwZSgpICYmIGV4cHJf dHlwZS0+aXNfc2xpY2VfdHlwZSgpKQpAQCAtNDM5NiwxNCArNDM5OCwxNCBAQCBUeXBlX2NvbnZl cnNpb25fZXhwcmVzc2lvbjo6ZG9fZ2V0X2JhY2tlbmQoVHJhbnNsYXRlX2NvbnRleHQqIGNvbnRl eHQpCiAgICAgICAgICAgICAgIEV4cHJlc3Npb24qIHN0ciA9IEV4cHJlc3Npb246Om1ha2Vfc3Ry aW5nX3ZhbHVlKHB0ciwgbGVuLCBsb2MpOwogICAgICAgICAgICAgICByZXR1cm4gc3RyLT5nZXRf YmFja2VuZChjb250ZXh0KTsKICAgICAgICAgICAgIH0KLQkgIHJldHVybiBSdW50aW1lOjptYWtl X2NhbGwoUnVudGltZTo6U0xJQ0VCWVRFVE9TVFJJTkcsIGxvYywgMywgYnVmLAotCQkJCSAgICBw dHIsIGxlbiktPmdldF9iYWNrZW5kKGNvbnRleHQpOworCSAgcmV0dXJuIFJ1bnRpbWU6Om1ha2Vf Y2FsbChnb2dvLCBSdW50aW1lOjpTTElDRUJZVEVUT1NUUklORywgbG9jLCAzLAorCQkJCSAgICBi dWYsIHB0ciwgbGVuKS0+Z2V0X2JhY2tlbmQoY29udGV4dCk7CiAgICAgICAgIH0KICAgICAgIGVs c2UKICAgICAgICAgewogICAgICAgICAgIGdvX2Fzc2VydChlLT5pbnRlZ2VyX3R5cGUoKS0+aXNf cnVuZSgpKTsKLQkgIHJldHVybiBSdW50aW1lOjptYWtlX2NhbGwoUnVudGltZTo6U0xJQ0VSVU5F VE9TVFJJTkcsIGxvYywgMiwgYnVmLAotCQkJCSAgICB0aGlzLT5leHByXyktPmdldF9iYWNrZW5k KGNvbnRleHQpOworCSAgcmV0dXJuIFJ1bnRpbWU6Om1ha2VfY2FsbChnb2dvLCBSdW50aW1lOjpT TElDRVJVTkVUT1NUUklORywgbG9jLCAyLAorCQkJCSAgICBidWYsIHRoaXMtPmV4cHJfKS0+Z2V0 X2JhY2tlbmQoY29udGV4dCk7CiAJfQogICAgIH0KICAgZWxzZSBpZiAodHlwZS0+aXNfc2xpY2Vf dHlwZSgpICYmIGV4cHJfdHlwZS0+aXNfc3RyaW5nX3R5cGUoKSkKQEAgLTQ0MzIsNyArNDQzNCw4 IEBAIFR5cGVfY29udmVyc2lvbl9leHByZXNzaW9uOjpkb19nZXRfYmFja2VuZChUcmFuc2xhdGVf Y29udGV4dCogY29udGV4dCkKICAgICAgICAgfQogICAgICAgZWxzZQogICAgICAgICBidWYgPSBF eHByZXNzaW9uOjptYWtlX25pbChsb2MpOwotICAgICAgRXhwcmVzc2lvbiogczJhID0gUnVudGlt ZTo6bWFrZV9jYWxsKGNvZGUsIGxvYywgMiwgYnVmLCB0aGlzLT5leHByXyk7CisgICAgICBFeHBy ZXNzaW9uKiBzMmEgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgY29kZSwgbG9jLCAyLCBidWYs CisJCQkJCSAgIHRoaXMtPmV4cHJfKTsKICAgICAgIHJldHVybiBFeHByZXNzaW9uOjptYWtlX3Vu c2FmZV9jYXN0KHR5cGUsIHMyYSwgbG9jKS0+Z2V0X2JhY2tlbmQoY29udGV4dCk7CiAgICAgfQog ICBlbHNlIGlmICh0eXBlLT5pc19udW1lcmljX3R5cGUoKSkKQEAgLTU0ODAsNyArNTQ4Myw3IEBA IFVuYXJ5X2V4cHJlc3Npb246OmRvX2dldF9iYWNrZW5kKFRyYW5zbGF0ZV9jb250ZXh0KiBjb250 ZXh0KQogICAgICAgICAgICAgICAgIEJleHByZXNzaW9uKiBjb21wYXJlID0KICAgICAgICAgICAg ICAgICAgICAgZ29nby0+YmFja2VuZCgpLT5iaW5hcnlfZXhwcmVzc2lvbihPUEVSQVRPUl9FUUVR LCB0YmV4cHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbmlsLCBsb2MpOwotCQlFeHByZXNzaW9uKiBjcmFzaCA9IFJ1bnRpbWU6Om1ha2Vf Y2FsbChSdW50aW1lOjpQQU5JQ19NRU0sCisJCUV4cHJlc3Npb24qIGNyYXNoID0gUnVudGltZTo6 bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OlBBTklDX01FTSwKIAkJCQkJCSAgICAgICBsb2MsIDAp OwogCQlCZXhwcmVzc2lvbiogYmNyYXNoID0gY3Jhc2gtPmdldF9iYWNrZW5kKGNvbnRleHQpOwog ICAgICAgICAgICAgICAgIEJmdW5jdGlvbiogYmZuID0gY29udGV4dC0+ZnVuY3Rpb24oKS0+ZnVu Y192YWx1ZSgpLT5nZXRfZGVjbCgpOwpAQCAtNjYyNiw3ICs2NjI5LDggQEAgQmluYXJ5X2V4cHJl c3Npb246Omxvd2VyX2ludGVyZmFjZV92YWx1ZV9jb21wYXJpc29uKEdvZ28qLAogLy8gTG93ZXIg YSBzdHJ1Y3Qgb3IgYXJyYXkgY29tcGFyaXNvbiB0byBhIGNhbGwgdG8gbWVtY21wLgogCiBFeHBy ZXNzaW9uKgotQmluYXJ5X2V4cHJlc3Npb246Omxvd2VyX2NvbXBhcmVfdG9fbWVtY21wKEdvZ28q LCBTdGF0ZW1lbnRfaW5zZXJ0ZXIqIGluc2VydGVyKQorQmluYXJ5X2V4cHJlc3Npb246Omxvd2Vy X2NvbXBhcmVfdG9fbWVtY21wKEdvZ28qIGdvZ28sCisJCQkJCSAgIFN0YXRlbWVudF9pbnNlcnRl ciogaW5zZXJ0ZXIpCiB7CiAgIExvY2F0aW9uIGxvYyA9IHRoaXMtPmxvY2F0aW9uKCk7CiAKQEAg LTY2MzUsNyArNjYzOSw4IEBAIEJpbmFyeV9leHByZXNzaW9uOjpsb3dlcl9jb21wYXJlX3RvX21l bWNtcChHb2dvKiwgU3RhdGVtZW50X2luc2VydGVyKiBpbnNlcnRlcikKICAgRXhwcmVzc2lvbiog bGVuID0gRXhwcmVzc2lvbjo6bWFrZV90eXBlX2luZm8odGhpcy0+bGVmdF8tPnR5cGUoKSwKIAkJ CQkJICAgICAgIFRZUEVfSU5GT19TSVpFKTsKIAotICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGlt ZTo6bWFrZV9jYWxsKFJ1bnRpbWU6Ok1FTUNNUCwgbG9jLCAzLCBhMSwgYTIsIGxlbik7CisgIEV4 cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGltZTo6TUVNQ01Q LCBsb2MsIDMsCisJCQkJCWExLCBhMiwgbGVuKTsKICAgVHlwZSogaW50MzJfdHlwZSA9IFR5cGU6 Omxvb2t1cF9pbnRlZ2VyX3R5cGUoImludDMyIik7CiAgIEV4cHJlc3Npb24qIHplcm8gPSBFeHBy ZXNzaW9uOjptYWtlX2ludGVnZXJfdWwoMCwgaW50MzJfdHlwZSwgbG9jKTsKICAgcmV0dXJuIEV4 cHJlc3Npb246Om1ha2VfYmluYXJ5KHRoaXMtPm9wXywgY2FsbCwgemVybywgbG9jKTsKQEAgLTcz MzcsNyArNzM0Miw3IEBAIEJpbmFyeV9leHByZXNzaW9uOjpkb19nZXRfYmFja2VuZChUcmFuc2xh dGVfY29udGV4dCogY29udGV4dCkKIAkgIEJleHByZXNzaW9uKiBjb21wYXJlID0KIAkgICAgZ29n by0+YmFja2VuZCgpLT5iaW5hcnlfZXhwcmVzc2lvbihPUEVSQVRPUl9MVCwgcmlnaHQsIHplcm9f ZXhwciwKIAkJCQkJICAgICAgIGxvYyk7Ci0JICBFeHByZXNzaW9uKiBjcmFzaCA9IFJ1bnRpbWU6 Om1ha2VfY2FsbChSdW50aW1lOjpQQU5JQ19TSElGVCwKKwkgIEV4cHJlc3Npb24qIGNyYXNoID0g UnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OlBBTklDX1NISUZULAogCQkJCQkJIGxv YywgMCk7CiAJICBCZXhwcmVzc2lvbiogYmNyYXNoID0gY3Jhc2gtPmdldF9iYWNrZW5kKGNvbnRl eHQpOwogCSAgQmZ1bmN0aW9uKiBiZm4gPSBjb250ZXh0LT5mdW5jdGlvbigpLT5mdW5jX3ZhbHVl KCktPmdldF9kZWNsKCk7CkBAIC03MzU4LDcgKzczNjMsNyBAQCBCaW5hcnlfZXhwcmVzc2lvbjo6 ZG9fZ2V0X2JhY2tlbmQoVHJhbnNsYXRlX2NvbnRleHQqIGNvbnRleHQpCiAgICAgICAgICAgICAg IGdvZ28tPmJhY2tlbmQoKS0+YmluYXJ5X2V4cHJlc3Npb24oT1BFUkFUT1JfRVFFUSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodCwgemVyb19l eHByLCBsb2MpOwogCi0JICBFeHByZXNzaW9uKiBjcmFzaCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChS dW50aW1lOjpQQU5JQ19ESVZJREUsCisJICBFeHByZXNzaW9uKiBjcmFzaCA9IFJ1bnRpbWU6Om1h a2VfY2FsbChnb2dvLCBSdW50aW1lOjpQQU5JQ19ESVZJREUsCiAJCQkJCQkgbG9jLCAwKTsKIAkg IEJleHByZXNzaW9uKiBiY3Jhc2ggPSBjcmFzaC0+Z2V0X2JhY2tlbmQoY29udGV4dCk7CiAKQEAg LTc2NjEsNiArNzY2Niw3IEBAIEV4cHJlc3Npb246OmNvbXBhcmlzb24oVHJhbnNsYXRlX2NvbnRl eHQqIGNvbnRleHQsIFR5cGUqIHJlc3VsdF90eXBlLAogCQkgICAgICAgT3BlcmF0b3Igb3AsIEV4 cHJlc3Npb24qIGxlZnQsIEV4cHJlc3Npb24qIHJpZ2h0LAogCQkgICAgICAgTG9jYXRpb24gbG9j YXRpb24pCiB7CisgIEdvZ28qIGdvZ28gPSBjb250ZXh0LT5nb2dvKCk7CiAgIFR5cGUqIGxlZnRf dHlwZSA9IGxlZnQtPnR5cGUoKTsKICAgVHlwZSogcmlnaHRfdHlwZSA9IHJpZ2h0LT50eXBlKCk7 CiAKQEAgLTc2OTMsNyArNzY5OSw4IEBAIEV4cHJlc3Npb246OmNvbXBhcmlzb24oVHJhbnNsYXRl X2NvbnRleHQqIGNvbnRleHQsIFR5cGUqIHJlc3VsdF90eXBlLAogICAgICAgICAgIEV4cHJlc3Np b24qIHB0cmVxID0gRXhwcmVzc2lvbjo6bWFrZV9iaW5hcnkoT1BFUkFUT1JfRVFFUSwgbHB0ciwg cnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxvY2F0aW9uKTsKICAgICAgICAgICBFeHByZXNzaW9uKiBidHJ1ZSA9IEV4cHJlc3Npb246 Om1ha2VfYm9vbGVhbih0cnVlLCBsb2NhdGlvbik7Ci0gICAgICAgICAgRXhwcmVzc2lvbiogY2Fs bCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpNRU1DTVAsIGxvY2F0aW9uLCAzLAorICAg ICAgICAgIEV4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGlt ZTo6TUVNQ01QLAorCQkJCQkJbG9jYXRpb24sIDMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBscHRyLT5jb3B5KCksIHJwdHItPmNvcHkoKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJsZW4tPmNvcHkoKSk7 CiAgICAgICAgICAgVHlwZSogaW50MzJfdHlwZSA9IFR5cGU6Omxvb2t1cF9pbnRlZ2VyX3R5cGUo ImludDMyIik7CkBAIC03NzA4LDcgKzc3MTUsNyBAQCBFeHByZXNzaW9uOjpjb21wYXJpc29uKFRy YW5zbGF0ZV9jb250ZXh0KiBjb250ZXh0LCBUeXBlKiByZXN1bHRfdHlwZSwKIAl9CiAgICAgICBl bHNlCiAJewotCSAgbGVmdCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpDTVBTVFJJTkcs IGxvY2F0aW9uLCAyLAorCSAgbGVmdCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChnb2dvLCBSdW50aW1l OjpDTVBTVFJJTkcsIGxvY2F0aW9uLCAyLAogCQkJCSAgICBsZWZ0LCByaWdodCk7CiAJICByaWdo dCA9IHpleHByOwogCX0KQEAgLTc3NDIsOSArNzc0OSwxMCBAQCBFeHByZXNzaW9uOjpjb21wYXJp c29uKFRyYW5zbGF0ZV9jb250ZXh0KiBjb250ZXh0LCBUeXBlKiByZXN1bHRfdHlwZSwKICAgICAg IEV4cHJlc3Npb24qIGRlc2NyaXB0b3IgPQogICAgICAgICAgIEV4cHJlc3Npb246Om1ha2VfdHlw ZV9kZXNjcmlwdG9yKHJpZ2h0X3R5cGUsIGxvY2F0aW9uKTsKICAgICAgIGxlZnQgPQotICAgICAg ICAgIFJ1bnRpbWU6Om1ha2VfY2FsbCgobGVmdF90eXBlLT5pbnRlcmZhY2VfdHlwZSgpLT5pc19l bXB0eSgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IFJ1bnRpbWU6OkVGQUNFVkFM RVEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogUnVudGltZTo6SUZBQ0VWQUxFUSks CisgICAgICAgICAgUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sCisJCQkgICAgIChsZWZ0X3R5cGUt PmludGVyZmFjZV90eXBlKCktPmlzX2VtcHR5KCkKKwkJCSAgICAgID8gUnVudGltZTo6RUZBQ0VW QUxFUQorCQkJICAgICAgOiBSdW50aW1lOjpJRkFDRVZBTEVRKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgbG9jYXRpb24sIDMsIGxlZnQsIGRlc2NyaXB0b3IsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHBvaW50ZXJfYXJnKTsKICAgICAgIGdvX2Fzc2VydChvcCA9PSBPUEVS QVRPUl9FUUVRIHx8IG9wID09IE9QRVJBVE9SX05PVEVRKTsKQEAgLTc3NzIsNyArNzc4MCw4IEBA IEV4cHJlc3Npb246OmNvbXBhcmlzb24oVHJhbnNsYXRlX2NvbnRleHQqIGNvbnRleHQsIFR5cGUq IHJlc3VsdF90eXBlLAogCSAgY29tcGFyZV9mdW5jdGlvbiA9IFJ1bnRpbWU6OklGQUNFRUZBQ0VF UTsKIAl9CiAKLSAgICAgIGxlZnQgPSBSdW50aW1lOjptYWtlX2NhbGwoY29tcGFyZV9mdW5jdGlv biwgbG9jYXRpb24sIDIsIGxlZnQsIHJpZ2h0KTsKKyAgICAgIGxlZnQgPSBSdW50aW1lOjptYWtl X2NhbGwoZ29nbywgY29tcGFyZV9mdW5jdGlvbiwgbG9jYXRpb24sIDIsCisJCQkJbGVmdCwgcmln aHQpOwogICAgICAgZ29fYXNzZXJ0KG9wID09IE9QRVJBVE9SX0VRRVEgfHwgb3AgPT0gT1BFUkFU T1JfTk9URVEpOwogICAgICAgcmlnaHQgPSBFeHByZXNzaW9uOjptYWtlX2Jvb2xlYW4odHJ1ZSwg bG9jYXRpb24pOwogICAgIH0KQEAgLTc4MDMsNyArNzgxMiw2IEBAIEV4cHJlc3Npb246OmNvbXBh cmlzb24oVHJhbnNsYXRlX2NvbnRleHQqIGNvbnRleHQsIFR5cGUqIHJlc3VsdF90eXBlLAogICBC ZXhwcmVzc2lvbiogbGVmdF9iZXhwciA9IGxlZnQtPmdldF9iYWNrZW5kKGNvbnRleHQpOwogICBC ZXhwcmVzc2lvbiogcmlnaHRfYmV4cHIgPSByaWdodC0+Z2V0X2JhY2tlbmQoY29udGV4dCk7CiAK LSAgR29nbyogZ29nbyA9IGNvbnRleHQtPmdvZ28oKTsKICAgQmV4cHJlc3Npb24qIHJldCA9IGdv Z28tPmJhY2tlbmQoKS0+YmluYXJ5X2V4cHJlc3Npb24ob3AsIGxlZnRfYmV4cHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpZ2h0X2Jl eHByLCBsb2NhdGlvbik7CiAgIGlmIChyZXN1bHRfdHlwZSAhPSBOVUxMKQpAQCAtNzk0MSw3ICs3 OTQ5LDcgQEAgU3RyaW5nX2NvbmNhdF9leHByZXNzaW9uOjpkb19jaGVja190eXBlcyhHb2dvKikK IH0KIAogRXhwcmVzc2lvbioKLVN0cmluZ19jb25jYXRfZXhwcmVzc2lvbjo6ZG9fZmxhdHRlbihH b2dvKiwgTmFtZWRfb2JqZWN0KiwKK1N0cmluZ19jb25jYXRfZXhwcmVzc2lvbjo6ZG9fZmxhdHRl bihHb2dvKiBnb2dvLCBOYW1lZF9vYmplY3QqLAogCQkJCSAgICAgU3RhdGVtZW50X2luc2VydGVy KiBpbnNlcnRlcikKIHsKICAgaWYgKHRoaXMtPmlzX2Vycm9yX2V4cHJlc3Npb24oKSkKQEAgLTgw MTEsOCArODAxOSw4IEBAIFN0cmluZ19jb25jYXRfZXhwcmVzc2lvbjo6ZG9fZmxhdHRlbihHb2dv KiwgTmFtZWRfb2JqZWN0KiwKICAgRXhwcmVzc2lvbiogcmVmID0gRXhwcmVzc2lvbjo6bWFrZV90 ZW1wb3JhcnlfcmVmZXJlbmNlKHRzLCBsb2MpOwogICByZWYgPSBFeHByZXNzaW9uOjptYWtlX3Vu YXJ5KE9QRVJBVE9SX0FORCwgcmVmLCBsb2MpOwogCUV4cHJlc3Npb24qIGNhbGwgPQotICAgIFJ1 bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpDT05DQVRTVFJJTkdTLCBsb2MsIDMsIGJ1ZiwKLSAg ICAgICAgICAgICAgICAgICAgICAgcmVmLCBsZW4tPmNvcHkoKSk7CisgICAgUnVudGltZTo6bWFr ZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OkNPTkNBVFNUUklOR1MsIGxvYywgMywKKwkJICAgICAgIGJ1 ZiwgcmVmLCBsZW4tPmNvcHkoKSk7CiAgIHJldHVybiBFeHByZXNzaW9uOjptYWtlX2Nhc3QodHlw ZSwgY2FsbCwgbG9jKTsKIH0KIApAQCAtODM3Nyw3ICs4Mzg1LDcgQEAgQm91bmRfbWV0aG9kX2V4 cHJlc3Npb246OmRvX2ZsYXR0ZW4oR29nbyogZ29nbywgTmFtZWRfb2JqZWN0KiwKIAogICBpZiAo bmlsX2NoZWNrICE9IE5VTEwpCiAgICAgewotICAgICAgRXhwcmVzc2lvbiogY3Jhc2ggPSBSdW50 aW1lOjptYWtlX2NhbGwoUnVudGltZTo6UEFOSUNfTUVNLCBsb2MsIDApOworICAgICAgRXhwcmVz c2lvbiogY3Jhc2ggPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGltZTo6UEFOSUNfTUVN LCBsb2MsIDApOwogICAgICAgLy8gRml4IHRoZSB0eXBlIG9mIHRoZSBjb25kaXRpb25hbCBleHBy ZXNzaW9uIGJ5IHByZXRlbmRpbmcgdG8KICAgICAgIC8vIGV2YWx1YXRlIHRvIFJFVCBlaXRoZXIg d2F5IHRocm91Z2ggdGhlIGNvbmRpdGlvbmFsLgogICAgICAgY3Jhc2ggPSBFeHByZXNzaW9uOjpt YWtlX2NvbXBvdW5kKGNyYXNoLCByZXQsIGxvYyk7CkBAIC04NzMwLDcgKzg3MzgsNyBAQCBCdWls dGluX2NhbGxfZXhwcmVzc2lvbjo6ZG9fZmxhdHRlbihHb2dvKiBnb2dvLCBOYW1lZF9vYmplY3Qq IGZ1bmN0aW9uLAogCSAgICAgIEV4cHJlc3Npb246Om1ha2Vfc2xpY2VfaW5mbyhhcmcyLCBTTElD RV9JTkZPX1ZBTFVFX1BPSU5URVIsIGxvYyk7CiAJICAgIEV4cHJlc3Npb24qIGxzID0KIAkgICAg ICBFeHByZXNzaW9uOjptYWtlX3NsaWNlX2luZm8oYXJnMiwgU0xJQ0VfSU5GT19MRU5HVEgsIGxv Yyk7Ci0gICAgICAgICAgICByZXQgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVudGltZTo6VFlQRURT TElDRUNPUFksIGxvYywKKyAgICAgICAgICAgIHJldCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChnb2dv LCBSdW50aW1lOjpUWVBFRFNMSUNFQ09QWSwgbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDUsIHRkLCBwZCwgbGQsIHBzLCBscyk7CiAgICAgICAgICAgfQogICAgICAg ICBlbHNlCkBAIC04Nzg2LDcgKzg3OTQsOSBAQCBCdWlsdGluX2NhbGxfZXhwcmVzc2lvbjo6ZG9f ZmxhdHRlbihHb2dvKiBnb2dvLCBOYW1lZF9vYmplY3QqIGZ1bmN0aW9uLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOiBFeHByZXNzaW9uOjptYWtlX3NsaWNlX2luZm8oYXJnMiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFNMSUNFX0lORk9fVkFMVUVfUE9JTlRFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYykpOwotICAgICAgICAgICAgRXhwcmVz c2lvbiogY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpCVUlMVElOX01FTU1PVkUs IGxvYywgMywKKyAgICAgICAgICAgIEV4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2Nh bGwoZ29nbywKKwkJCQkJCSAgUnVudGltZTo6QlVJTFRJTl9NRU1NT1ZFLAorCQkJCQkJICBsb2Ms IDMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAx LCBwMiwgc3opOwogCiAgICAgICAgICAgICAvLyBuIGlzIHRoZSByZXR1cm4gdmFsdWUgb2YgY29w eQpAQCAtODkxNiw3ICs4OTI2LDcgQEAgQnVpbHRpbl9jYWxsX2V4cHJlc3Npb246OmRvX2ZsYXR0 ZW4oR29nbyogZ29nbywgTmFtZWRfb2JqZWN0KiBmdW5jdGlvbiwKICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgfQogCi0gICAgICAgIHJldHVybiBSdW50aW1lOjptYWtlX2NhbGwoY29kZSwg bG9jLCAzLCBlMSwgZTIsIGUzKTsKKyAgICAgICAgcmV0dXJuIFJ1bnRpbWU6Om1ha2VfY2FsbChn b2dvLCBjb2RlLCBsb2MsIDMsIGUxLCBlMiwgZTMpOwogICAgICAgfQogCiAgICAgY2FzZSBCVUlM VElOX0FERDoKQEAgLTg5ODAsNyArODk5MCw3IEBAIEJ1aWx0aW5fY2FsbF9leHByZXNzaW9uOjpk b19mbGF0dGVuKEdvZ28qIGdvZ28sIE5hbWVkX29iamVjdCogZnVuY3Rpb24sCiAJCQkJICA6IFJ1 bnRpbWU6OlVOU0FGRVNMSUNFNjQpOwogCUV4cHJlc3Npb24qIHRkID0KIAkgIEV4cHJlc3Npb246 Om1ha2VfdHlwZV9kZXNjcmlwdG9yKHB0ci0+dHlwZSgpLT5wb2ludHNfdG8oKSwgbG9jKTsKLQlF eHByZXNzaW9uKiBjaGVjayA9IFJ1bnRpbWU6Om1ha2VfY2FsbChjb2RlLCBsb2MsIDMsCisJRXhw cmVzc2lvbiogY2hlY2sgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgY29kZSwgbG9jLCAzLAog CQkJCQkgICAgICAgdGQsIHB0ciwgbGVuKTsKIAogCWlmIChwdHJfdGVtcCA9PSBOVUxMKQpAQCAt OTE4MSw4ICs5MTkxLDggQEAgQnVpbHRpbl9jYWxsX2V4cHJlc3Npb246Omxvd2VyX21ha2UoR29n byogZ29nbywgU3RhdGVtZW50X2luc2VydGVyKiBpbnNlcnRlcikKICAgICAgIFJ1bnRpbWU6OkZ1 bmN0aW9uIGNvZGUgPSBSdW50aW1lOjpNQUtFU0xJQ0U7CiAgICAgICBpZiAoIWxlbl9zbWFsbCB8 fCAhY2FwX3NtYWxsKQogCWNvZGUgPSBSdW50aW1lOjpNQUtFU0xJQ0U2NDsKLSAgICAgIEV4cHJl c3Npb24qIG1lbSA9IFJ1bnRpbWU6Om1ha2VfY2FsbChjb2RlLCBsb2MsIDMsIHR5cGVfYXJnLCBs ZW5fYXJnLAotCQkJCQkgICBjYXBfYXJnKTsKKyAgICAgIEV4cHJlc3Npb24qIG1lbSA9IFJ1bnRp bWU6Om1ha2VfY2FsbChnb2dvLCBjb2RlLCBsb2MsIDMsCisJCQkJCSAgIHR5cGVfYXJnLCBsZW5f YXJnLCBjYXBfYXJnKTsKICAgICAgIG1lbSA9IEV4cHJlc3Npb246Om1ha2VfdW5zYWZlX2Nhc3Qo VHlwZTo6bWFrZV9wb2ludGVyX3R5cGUoZXQpLCBtZW0sCiAJCQkJCSBsb2MpOwogICAgICAgVHlw ZSogaW50X3R5cGUgPSBUeXBlOjpsb29rdXBfaW50ZWdlcl90eXBlKCJpbnQiKTsKQEAgLTkxOTQs NyArOTIwNCw3IEBAIEJ1aWx0aW5fY2FsbF9leHByZXNzaW9uOjpsb3dlcl9tYWtlKEdvZ28qIGdv Z28sIFN0YXRlbWVudF9pbnNlcnRlciogaW5zZXJ0ZXIpCiAgICAgewogICAgICAgRXhwcmVzc2lv biogdHlwZV9hcmcgPSBFeHByZXNzaW9uOjptYWtlX3R5cGVfZGVzY3JpcHRvcih0eXBlLCB0eXBl X2xvYyk7CiAgICAgICBpZiAoIWxlbl9zbWFsbCkKLQljYWxsID0gUnVudGltZTo6bWFrZV9jYWxs KFJ1bnRpbWU6Ok1BS0VNQVA2NCwgbG9jLCAzLCB0eXBlX2FyZywKKwljYWxsID0gUnVudGltZTo6 bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6Ok1BS0VNQVA2NCwgbG9jLCAzLCB0eXBlX2FyZywKIAkJ CQkgIGxlbl9hcmcsCiAJCQkJICBFeHByZXNzaW9uOjptYWtlX25pbChsb2MpKTsKICAgICAgIGVs c2UKQEAgLTkyMDIsOSArOTIxMiw5IEBAIEJ1aWx0aW5fY2FsbF9leHByZXNzaW9uOjpsb3dlcl9t YWtlKEdvZ28qIGdvZ28sIFN0YXRlbWVudF9pbnNlcnRlciogaW5zZXJ0ZXIpCiAJICBpZiAobGVu X2FyZy0+bnVtZXJpY19jb25zdGFudF92YWx1ZSgmbmNsZW4pCiAJICAgICAgJiYgbmNsZW4udG9f dW5zaWduZWRfbG9uZygmdmxlbikgPT0gTnVtZXJpY19jb25zdGFudDo6TkNfVUxfVkFMSUQKIAkg ICAgICAmJiB2bGVuIDw9IE1hcF90eXBlOjpidWNrZXRfc2l6ZSkKLQkgICAgY2FsbCA9IFJ1bnRp bWU6Om1ha2VfY2FsbChSdW50aW1lOjpNQUtFTUFQX1NNQUxMLCBsb2MsIDApOworCSAgICBjYWxs ID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6Ok1BS0VNQVBfU01BTEwsIGxvYywg MCk7CiAJICBlbHNlCi0JICAgIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVudGltZTo6TUFL RU1BUCwgbG9jLCAzLCB0eXBlX2FyZywKKwkgICAgY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChn b2dvLCBSdW50aW1lOjpNQUtFTUFQLCBsb2MsIDMsIHR5cGVfYXJnLAogCQkJCSAgICAgIGxlbl9h cmcsCiAJCQkJICAgICAgRXhwcmVzc2lvbjo6bWFrZV9uaWwobG9jKSk7CiAJfQpAQCAtOTIxNSw3 ICs5MjI1LDcgQEAgQnVpbHRpbl9jYWxsX2V4cHJlc3Npb246Omxvd2VyX21ha2UoR29nbyogZ29n bywgU3RhdGVtZW50X2luc2VydGVyKiBpbnNlcnRlcikKICAgICAgIFJ1bnRpbWU6OkZ1bmN0aW9u IGNvZGUgPSBSdW50aW1lOjpNQUtFQ0hBTjsKICAgICAgIGlmICghbGVuX3NtYWxsKQogCWNvZGUg PSBSdW50aW1lOjpNQUtFQ0hBTjY0OwotICAgICAgY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChj b2RlLCBsb2MsIDIsIHR5cGVfYXJnLCBsZW5fYXJnKTsKKyAgICAgIGNhbGwgPSBSdW50aW1lOjpt YWtlX2NhbGwoZ29nbywgY29kZSwgbG9jLCAyLCB0eXBlX2FyZywgbGVuX2FyZyk7CiAgICAgfQog ICBlbHNlCiAgICAgZ29fdW5yZWFjaGFibGUoKTsKQEAgLTkzMjUsNyArOTMzNSw4IEBAIEJ1aWx0 aW5fY2FsbF9leHByZXNzaW9uOjpmbGF0dGVuX2FwcGVuZChHb2dvKiBnb2dvLCBOYW1lZF9vYmpl Y3QqIGZ1bmN0aW9uLAogCQkJCQkJCSAgICAgIGxvYyk7CiAgICAgICAgICAgbGVuMiA9IEV4cHJl c3Npb246Om1ha2VfdGVtcG9yYXJ5X3JlZmVyZW5jZShsMnRtcCwgbG9jKTsKICAgICAgICAgICBF eHByZXNzaW9uKiBjYXAyID0gRXhwcmVzc2lvbjo6bWFrZV90ZW1wb3JhcnlfcmVmZXJlbmNlKGMy dG1wLCBsb2MpOwotCSAgRXhwcmVzc2lvbiogY2hlY2sgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVu dGltZTo6Q0hFQ0tfTUFLRV9TTElDRSwKKwkgIEV4cHJlc3Npb24qIGNoZWNrID0gUnVudGltZTo6 bWFrZV9jYWxsKGdvZ28sCisJCQkJCQkgUnVudGltZTo6Q0hFQ0tfTUFLRV9TTElDRSwKIAkJCQkJ CSBsb2MsIDMsIGVsZW0sIGxlbjIsIGNhcDIpOwogICAgICAgICAgIGdvZ28tPmxvd2VyX2V4cHJl c3Npb24oZnVuY3Rpb24sIGluc2VydGVyLCAmY2hlY2spOwogICAgICAgICAgIGdvZ28tPmZsYXR0 ZW5fZXhwcmVzc2lvbihmdW5jdGlvbiwgaW5zZXJ0ZXIsICZjaGVjayk7CkBAIC05NDIxLDcgKzk0 MzIsNyBAQCBCdWlsdGluX2NhbGxfZXhwcmVzc2lvbjo6ZmxhdHRlbl9hcHBlbmQoR29nbyogZ29n bywgTmFtZWRfb2JqZWN0KiBmdW5jdGlvbiwKICAgRXhwcmVzc2lvbiogYTMgPSBFeHByZXNzaW9u OjptYWtlX3RlbXBvcmFyeV9yZWZlcmVuY2UobDF0bXAsIGxvYyk7CiAgIEV4cHJlc3Npb24qIGE0 ID0gRXhwcmVzc2lvbjo6bWFrZV90ZW1wb3JhcnlfcmVmZXJlbmNlKGMxdG1wLCBsb2MpOwogICBF eHByZXNzaW9uKiBhNSA9IEV4cHJlc3Npb246Om1ha2VfdGVtcG9yYXJ5X3JlZmVyZW5jZShudG1w LCBsb2MpOwotICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKFJ1bnRpbWU6 OkdST1dTTElDRSwgbG9jLCA1LAorICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9j YWxsKGdvZ28sIFJ1bnRpbWU6OkdST1dTTElDRSwgbG9jLCA1LAogCQkJCQlhMSwgYTIsIGEzLCBh NCwgYTUpOwogICBjYWxsID0gRXhwcmVzc2lvbjo6bWFrZV91bnNhZmVfY2FzdChzbGljZV90eXBl LCBjYWxsLCBsb2MpOwogCkBAIC05NDkxLDEzICs5NTAyLDE0IEBAIEJ1aWx0aW5fY2FsbF9leHBy ZXNzaW9uOjpmbGF0dGVuX2FwcGVuZChHb2dvKiBnb2dvLCBOYW1lZF9vYmplY3QqIGZ1bmN0aW9u LAogICAgICAgICAgIGEyID0gRXhwcmVzc2lvbjo6bWFrZV9iaW5hcnkoT1BFUkFUT1JfTVVMVCwg YTIsIHJlZiwgbG9jKTsKIAogICAgICAgICAgIGlmIChlbGVtZW50X3R5cGUtPmhhc19wb2ludGVy KCkpCi0gICAgICAgICAgICBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKFJ1bnRpbWU6Ok1FTUNM UkhBU1BUUiwgbG9jLCAyLCBhMSwgYTIpOworICAgICAgICAgICAgY2FsbCA9IFJ1bnRpbWU6Om1h a2VfY2FsbChnb2dvLCBSdW50aW1lOjpNRU1DTFJIQVNQVFIsIGxvYywgMiwKKwkJCQkgICAgICBh MSwgYTIpOwogICAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgVHlw ZSogaW50MzJfdHlwZSA9IFR5cGU6Omxvb2t1cF9pbnRlZ2VyX3R5cGUoImludDMyIik7CiAgICAg ICAgICAgICAgIHplcm8gPSBFeHByZXNzaW9uOjptYWtlX2ludGVnZXJfdWwoMCwgaW50MzJfdHlw ZSwgbG9jKTsKLSAgICAgICAgICAgICAgY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1l OjpCVUlMVElOX01FTVNFVCwgbG9jLCAzLCBhMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB6ZXJvLCBhMik7CisgICAgICAgICAgICAgIGNhbGwgPSBSdW50aW1lOjpt YWtlX2NhbGwoZ29nbywgUnVudGltZTo6QlVJTFRJTl9NRU1TRVQsIGxvYywgMywKKwkJCQkJYTEs IHplcm8sIGEyKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgIGlmIChlbGVtZW50X3R5cGUt Pmhhc19wb2ludGVyKCkpCkBAIC05NTU3LDcgKzk1NjksNyBAQCBCdWlsdGluX2NhbGxfZXhwcmVz c2lvbjo6ZmxhdHRlbl9hcHBlbmQoR29nbyogZ29nbywgTmFtZWRfb2JqZWN0KiBmdW5jdGlvbiwK ICAgICAgICAgICAgICAgYTMgPSBFeHByZXNzaW9uOjptYWtlX3R5cGVfaW5mbyhlbGVtZW50X3R5 cGUsIFRZUEVfSU5GT19TSVpFKTsKICAgICAgICAgICAgICAgYTMgPSBFeHByZXNzaW9uOjptYWtl X2JpbmFyeShPUEVSQVRPUl9NVUxULCBhMywgcmVmLCBsb2MpOwogCi0gICAgICAgICAgICAgIGNh bGwgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVudGltZTo6QlVJTFRJTl9NRU1NT1ZFLCBsb2MsIDMs CisgICAgICAgICAgICAgIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGltZTo6 QlVJTFRJTl9NRU1NT1ZFLCBsb2MsIDMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYTEsIGEyLCBhMyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTExMDAx LDcgKzExMDEzLDcgQEAgQnVpbHRpbl9jYWxsX2V4cHJlc3Npb246OmRvX2dldF9iYWNrZW5kKFRy YW5zbGF0ZV9jb250ZXh0KiBjb250ZXh0KQogICAgICAgewogCWNvbnN0IGJvb2wgaXNfbG4gPSB0 aGlzLT5jb2RlXyA9PSBCVUlMVElOX1BSSU5UTE47CiAKLQlFeHByZXNzaW9uKiBwcmludF9zdG10 cyA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpQUklOVExPQ0ssCisJRXhwcmVzc2lvbiog cHJpbnRfc3RtdHMgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGltZTo6UFJJTlRMT0NL LAogCQkJCQkJICAgICBsb2NhdGlvbiwgMCk7CiAKIAljb25zdCBFeHByZXNzaW9uX2xpc3QqIGNh bGxfYXJncyA9IHRoaXMtPmFyZ3MoKTsKQEAgLTExMDE0LDcgKzExMDI2LDcgQEAgQnVpbHRpbl9j YWxsX2V4cHJlc3Npb246OmRvX2dldF9iYWNrZW5kKFRyYW5zbGF0ZV9jb250ZXh0KiBjb250ZXh0 KQogCQlpZiAoaXNfbG4gJiYgcCAhPSBjYWxsX2FyZ3MtPmJlZ2luKCkpCiAJCSAgewogICAgICAg ICAgICAgICAgICAgICBFeHByZXNzaW9uKiBwcmludF9zcGFjZSA9Ci0JCSAgICAgIFJ1bnRpbWU6 Om1ha2VfY2FsbChSdW50aW1lOjpQUklOVFNQLCBsb2NhdGlvbiwgMCk7CisJCSAgICAgIFJ1bnRp bWU6Om1ha2VfY2FsbChnb2dvLCBSdW50aW1lOjpQUklOVFNQLCBsb2NhdGlvbiwgMCk7CiAKICAg ICAgICAgICAgICAgICAgICAgcHJpbnRfc3RtdHMgPQogICAgICAgICAgICAgICAgICAgICAgICAg RXhwcmVzc2lvbjo6bWFrZV9jb21wb3VuZChwcmludF9zdG10cywgcHJpbnRfc3BhY2UsCkBAIC0x MTA4Miw3ICsxMTA5NCw4IEBAIEJ1aWx0aW5fY2FsbF9leHByZXNzaW9uOjpkb19nZXRfYmFja2Vu ZChUcmFuc2xhdGVfY29udGV4dCogY29udGV4dCkKIAkJICAgIHJldHVybiBjb250ZXh0LT5iYWNr ZW5kKCktPmVycm9yX2V4cHJlc3Npb24oKTsKIAkJICB9CiAKLSAgICAgICAgICAgICAgICBFeHBy ZXNzaW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGNvZGUsIGxvY2F0aW9uLCAxLCBhcmcp OworICAgICAgICAgICAgICAgIEV4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwo Z29nbywgY29kZSwgbG9jYXRpb24sIDEsCisJCQkJCQkgICAgICBhcmcpOwogCQlwcmludF9zdG10 cyA9IEV4cHJlc3Npb246Om1ha2VfY29tcG91bmQocHJpbnRfc3RtdHMsIGNhbGwsCiAJCQkJCQkJ bG9jYXRpb24pOwogCSAgICAgIH0KQEAgLTExMDkxLDEyICsxMTEwNCwxMiBAQCBCdWlsdGluX2Nh bGxfZXhwcmVzc2lvbjo6ZG9fZ2V0X2JhY2tlbmQoVHJhbnNsYXRlX2NvbnRleHQqIGNvbnRleHQp CiAJaWYgKGlzX2xuKQogCSAgewogICAgICAgICAgICAgRXhwcmVzc2lvbiogcHJpbnRfbmwgPQot ICAgICAgICAgICAgICAgIFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpQUklOVE5MLCBsb2Nh dGlvbiwgMCk7CisgICAgICAgICAgICAgICAgUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRp bWU6OlBSSU5UTkwsIGxvY2F0aW9uLCAwKTsKIAkgICAgcHJpbnRfc3RtdHMgPSBFeHByZXNzaW9u OjptYWtlX2NvbXBvdW5kKHByaW50X3N0bXRzLCBwcmludF9ubCwKIAkJCQkJCSAgICBsb2NhdGlv bik7CiAJICB9CiAKLQlFeHByZXNzaW9uKiB1bmxvY2sgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVu dGltZTo6UFJJTlRVTkxPQ0ssCisJRXhwcmVzc2lvbiogdW5sb2NrID0gUnVudGltZTo6bWFrZV9j YWxsKGdvZ28sIFJ1bnRpbWU6OlBSSU5UVU5MT0NLLAogCQkJCQkJbG9jYXRpb24sIDApOwogCXBy aW50X3N0bXRzID0gRXhwcmVzc2lvbjo6bWFrZV9jb21wb3VuZChwcmludF9zdG10cywgdW5sb2Nr LCBsb2NhdGlvbik7CiAKQEAgLTExMTEzLDcgKzExMTI2LDcgQEAgQnVpbHRpbl9jYWxsX2V4cHJl c3Npb246OmRvX2dldF9iYWNrZW5kKFRyYW5zbGF0ZV9jb250ZXh0KiBjb250ZXh0KQogICAgICAg ICBhcmcgPSBFeHByZXNzaW9uOjpjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KGdvZ28sIGVtcHR5LCBh cmcsIGxvY2F0aW9uKTsKIAogICAgICAgICBFeHByZXNzaW9uKiBwYW5pYyA9Ci0gICAgICAgICAg ICBSdW50aW1lOjptYWtlX2NhbGwoUnVudGltZTo6R09QQU5JQywgbG9jYXRpb24sIDEsIGFyZyk7 CisgICAgICAgICAgICBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGltZTo6R09QQU5JQywg bG9jYXRpb24sIDEsIGFyZyk7CiAgICAgICAgIHJldHVybiBwYW5pYy0+Z2V0X2JhY2tlbmQoY29u dGV4dCk7CiAgICAgICB9CiAKQEAgLTExMTMzLDcgKzExMTQ2LDggQEAgQnVpbHRpbl9jYWxsX2V4 cHJlc3Npb246OmRvX2dldF9iYWNrZW5kKFRyYW5zbGF0ZV9jb250ZXh0KiBjb250ZXh0KQogCS8v IFdlIG5lZWQgdG8gaGFuZGxlIGEgZGVmZXJyZWQgY2FsbCB0byByZWNvdmVyIHNwZWNpYWxseSwK IAkvLyBiZWNhdXNlIGl0IGNoYW5nZXMgd2hldGhlciBpdCBjYW4gcmVjb3ZlciBhIHBhbmljIG9y IG5vdC4KIAkvLyBTZWUgdGVzdDcgaW4gdGVzdC9yZWNvdmVyMS5nby4KLSAgICAgICAgRXhwcmVz c2lvbiogcmVjb3ZlciA9IFJ1bnRpbWU6Om1ha2VfY2FsbCgodGhpcy0+aXNfZGVmZXJyZWQoKQor ICAgICAgICBFeHByZXNzaW9uKiByZWNvdmVyID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sCisJ CQkJCQkgKHRoaXMtPmlzX2RlZmVycmVkKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgPyBSdW50aW1lOjpERUZFUlJFRFJFQ09WRVIKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBSdW50aW1lOjpHT1JF Q09WRVIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxvY2F0aW9uLCAwKTsKQEAgLTExMTQ3LDcgKzExMTYxLDcgQEAgQnVpbHRpbl9jYWxsX2V4cHJl c3Npb246OmRvX2dldF9iYWNrZW5kKFRyYW5zbGF0ZV9jb250ZXh0KiBjb250ZXh0KQogCWNvbnN0 IEV4cHJlc3Npb25fbGlzdCogYXJncyA9IHRoaXMtPmFyZ3MoKTsKIAlnb19hc3NlcnQoYXJncyAh PSBOVUxMICYmIGFyZ3MtPnNpemUoKSA9PSAxKTsKIAlFeHByZXNzaW9uKiBhcmcgPSBhcmdzLT5m cm9udCgpOwotICAgICAgICBFeHByZXNzaW9uKiBjbG9zZSA9IFJ1bnRpbWU6Om1ha2VfY2FsbChS dW50aW1lOjpDTE9TRSwgbG9jYXRpb24sCisgICAgICAgIEV4cHJlc3Npb24qIGNsb3NlID0gUnVu dGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OkNMT1NFLCBsb2NhdGlvbiwKIAkJCQkJICAg ICAgIDEsIGFyZyk7CiAgICAgICAgIHJldHVybiBjbG9zZS0+Z2V0X2JhY2tlbmQoY29udGV4dCk7 CiAgICAgICB9CkBAIC0xMTkyNSw3ICsxMTkzOSw3IEBAIENhbGxfZXhwcmVzc2lvbjo6aW50cmlu c2lmeShHb2dvKiBnb2dvLAogICAgICAgICB7CiAgICAgICAgICAgRXhwcmVzc2lvbiogYXJnID0g RXhwcmVzc2lvbjo6bWFrZV9pbnRlZ2VyX3VsKDAsIHVpbnQzMl90eXBlLCBsb2MpOwogICAgICAg ICAgIEV4cHJlc3Npb24qIGNhbGwgPQotICAgICAgICAgICAgUnVudGltZTo6bWFrZV9jYWxsKFJ1 bnRpbWU6OkJVSUxUSU5fUkVUVVJOX0FERFJFU1MsIGxvYywKKyAgICAgICAgICAgIFJ1bnRpbWU6 Om1ha2VfY2FsbChnb2dvLCBSdW50aW1lOjpCVUlMVElOX1JFVFVSTl9BRERSRVNTLCBsb2MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgYXJnKTsKICAgICAgICAgICAvLyBUaGUg YnVpbHRpbiBmdW5jdGlvbnMgcmV0dXJuIHZvaWQqLCBidXQgdGhlIEdvIGZ1bmN0aW9ucyByZXR1 cm4gdWludHB0ci4KICAgICAgICAgICByZXR1cm4gRXhwcmVzc2lvbjo6bWFrZV9jYXN0KHVpbnRw dHJfdHlwZSwgY2FsbCwgbG9jKTsKQEAgLTExOTM1LDcgKzExOTQ5LDcgQEAgQ2FsbF9leHByZXNz aW9uOjppbnRyaW5zaWZ5KEdvZ28qIGdvZ28sCiAKICAgICAgICAgewogICAgICAgICAgIEV4cHJl c3Npb24qIGNhbGwgPQotICAgICAgICAgICAgUnVudGltZTo6bWFrZV9jYWxsKFJ1bnRpbWU6OkJV SUxUSU5fRFdBUkZfQ0ZBLCBsb2MsIDApOworICAgICAgICAgICAgUnVudGltZTo6bWFrZV9jYWxs KGdvZ28sIFJ1bnRpbWU6OkJVSUxUSU5fRFdBUkZfQ0ZBLCBsb2MsIDApOwogICAgICAgICAgIC8v IFRoZSBidWlsdGluIGZ1bmN0aW9ucyByZXR1cm4gdm9pZCosIGJ1dCB0aGUgR28gZnVuY3Rpb25z IHJldHVybiB1aW50cHRyLgogICAgICAgICAgIHJldHVybiBFeHByZXNzaW9uOjptYWtlX2Nhc3Qo dWludHB0cl90eXBlLCBjYWxsLCBsb2MpOwogICAgICAgICB9CkBAIC0xMTk2MSw3ICsxMTk3NSw3 IEBAIENhbGxfZXhwcmVzc2lvbjo6aW50cmluc2lmeShHb2dvKiBnb2dvLAogICAgICAgICAgIGVs c2UKICAgICAgICAgICAgIGdvX3VucmVhY2hhYmxlKCk7CiAgICAgICAgICAgRXhwcmVzc2lvbiog YXJnID0gdGhpcy0+YXJnc18tPmZyb250KCk7Ci0gICAgICAgICAgRXhwcmVzc2lvbiogY2FsbCA9 IFJ1bnRpbWU6Om1ha2VfY2FsbChjb2RlLCBsb2MsIDEsIGFyZyk7CisgICAgICAgICAgRXhwcmVz c2lvbiogY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChnb2dvLCBjb2RlLCBsb2MsIDEsIGFyZyk7 CiAgICAgICAgICAgaWYgKG5hbWUgPT0gIlJldmVyc2VCeXRlcyIpCiAgICAgICAgICAgICByZXR1 cm4gRXhwcmVzc2lvbjo6bWFrZV9jYXN0KHVpbnRfdHlwZSwgY2FsbCwgbG9jKTsKICAgICAgICAg ICByZXR1cm4gY2FsbDsKQEAgLTExOTc2LDcgKzExOTkwLDggQEAgQ2FsbF9leHByZXNzaW9uOjpp bnRyaW5zaWZ5KEdvZ28qIGdvZ28sCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gKG5h bWUgPT0gIlRyYWlsaW5nWmVyb3M4IiA/IDB4MTAwIDogMHgxMDAwMCk7CiAgICAgICAgICAgRXhw cmVzc2lvbiogYyA9IEV4cHJlc3Npb246Om1ha2VfaW50ZWdlcl91bChtYXNrLCB1aW50MzJfdHlw ZSwgbG9jKTsKICAgICAgICAgICBhcmcgPSBFeHByZXNzaW9uOjptYWtlX2JpbmFyeShPUEVSQVRP Ul9PUiwgYXJnLCBjLCBsb2MpOwotICAgICAgICAgIEV4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1l OjptYWtlX2NhbGwoUnVudGltZTo6QlVJTFRJTl9DVFosIGxvYywgMSwgYXJnKTsKKyAgICAgICAg ICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OkJV SUxUSU5fQ1RaLAorCQkJCQkJbG9jLCAxLCBhcmcpOwogICAgICAgICAgIHJldHVybiBFeHByZXNz aW9uOjptYWtlX2Nhc3QoaW50X3R5cGUsIGNhbGwsIGxvYyk7CiAgICAgICAgIH0KICAgICAgIGVs c2UgaWYgKChuYW1lID09ICJUcmFpbGluZ1plcm9zMzIiCkBAIC0xMTk5NCw3ICsxMjAwOSw4IEBA IENhbGxfZXhwcmVzc2lvbjo6aW50cmluc2lmeShHb2dvKiBnb2dvLAogICAgICAgICAgIEV4cHJl c3Npb24qIHplcm8gPSBFeHByZXNzaW9uOjptYWtlX2ludGVnZXJfdWwoMCwgdWludDMyX3R5cGUs IGxvYyk7CiAgICAgICAgICAgRXhwcmVzc2lvbiogY21wID0gRXhwcmVzc2lvbjo6bWFrZV9iaW5h cnkoT1BFUkFUT1JfRVFFUSwgYXJnLCB6ZXJvLCBsb2MpOwogICAgICAgICAgIEV4cHJlc3Npb24q IGMzMiA9IEV4cHJlc3Npb246Om1ha2VfaW50ZWdlcl91bCgzMiwgaW50X3R5cGUsIGxvYyk7Ci0g ICAgICAgICAgRXhwcmVzc2lvbiogY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpC VUlMVElOX0NUWiwgbG9jLCAxLCBhcmctPmNvcHkoKSk7CisgICAgICAgICAgRXhwcmVzc2lvbiog Y2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChnb2dvLCBSdW50aW1lOjpCVUlMVElOX0NUWiwKKwkJ CQkJCWxvYywgMSwgYXJnLT5jb3B5KCkpOwogICAgICAgICAgIGNhbGwgPSBFeHByZXNzaW9uOjpt YWtlX2Nhc3QoaW50X3R5cGUsIGNhbGwsIGxvYyk7CiAgICAgICAgICAgcmV0dXJuIEV4cHJlc3Np b246Om1ha2VfY29uZGl0aW9uYWwoY21wLCBjMzIsIGNhbGwsIGxvYyk7CiAgICAgICAgIH0KQEAg LTEyMDEzLDcgKzEyMDI5LDggQEAgQ2FsbF9leHByZXNzaW9uOjppbnRyaW5zaWZ5KEdvZ28qIGdv Z28sCiAgICAgICAgICAgRXhwcmVzc2lvbiogemVybyA9IEV4cHJlc3Npb246Om1ha2VfaW50ZWdl cl91bCgwLCB1aW50NjRfdHlwZSwgbG9jKTsKICAgICAgICAgICBFeHByZXNzaW9uKiBjbXAgPSBF eHByZXNzaW9uOjptYWtlX2JpbmFyeShPUEVSQVRPUl9FUUVRLCBhcmcsIHplcm8sIGxvYyk7CiAg ICAgICAgICAgRXhwcmVzc2lvbiogYzY0ID0gRXhwcmVzc2lvbjo6bWFrZV9pbnRlZ2VyX3VsKDY0 LCBpbnRfdHlwZSwgbG9jKTsKLSAgICAgICAgICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGltZTo6 bWFrZV9jYWxsKFJ1bnRpbWU6OkJVSUxUSU5fQ1RaTEwsIGxvYywgMSwgYXJnLT5jb3B5KCkpOwor ICAgICAgICAgIEV4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVu dGltZTo6QlVJTFRJTl9DVFpMTCwKKwkJCQkJCWxvYywgMSwgYXJnLT5jb3B5KCkpOwogICAgICAg ICAgIGNhbGwgPSBFeHByZXNzaW9uOjptYWtlX2Nhc3QoaW50X3R5cGUsIGNhbGwsIGxvYyk7CiAg ICAgICAgICAgcmV0dXJuIEV4cHJlc3Npb246Om1ha2VfY29uZGl0aW9uYWwoY21wLCBjNjQsIGNh bGwsIGxvYyk7CiAgICAgICAgIH0KQEAgLTEyMDMzLDcgKzEyMDUwLDggQEAgQ2FsbF9leHByZXNz aW9uOjppbnRyaW5zaWZ5KEdvZ28qIGdvZ28sCiAgICAgICAgICAgICAoKG5hbWUgPT0gIkxlYWRp bmdaZXJvczgiIHx8IG5hbWUgPT0gIkxlbjgiKSA/IDB4ZmZmZmZmIDogMHhmZmZmKTsKICAgICAg ICAgICBjID0gRXhwcmVzc2lvbjo6bWFrZV9pbnRlZ2VyX3VsKG1hc2ssIHVpbnQzMl90eXBlLCBs b2MpOwogICAgICAgICAgIGFyZyA9IEV4cHJlc3Npb246Om1ha2VfYmluYXJ5KE9QRVJBVE9SX09S LCBhcmcsIGMsIGxvYyk7Ci0gICAgICAgICAgRXhwcmVzc2lvbiogY2FsbCA9IFJ1bnRpbWU6Om1h a2VfY2FsbChSdW50aW1lOjpCVUlMVElOX0NMWiwgbG9jLCAxLCBhcmcpOworICAgICAgICAgIEV4 cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGltZTo6QlVJTFRJ Tl9DTFosCisJCQkJCQlsb2MsIDEsIGFyZyk7CiAgICAgICAgICAgY2FsbCA9IEV4cHJlc3Npb246 Om1ha2VfY2FzdChpbnRfdHlwZSwgY2FsbCwgbG9jKTsKICAgICAgICAgICAvLyBsZW4gPSB3aWR0 aCAtIGNsegogICAgICAgICAgIGlmIChuYW1lID09ICJMZW44IikKQEAgLTEyMDYzLDcgKzEyMDgx LDggQEAgQ2FsbF9leHByZXNzaW9uOjppbnRyaW5zaWZ5KEdvZ28qIGdvZ28sCiAgICAgICAgICAg RXhwcmVzc2lvbiogemVybyA9IEV4cHJlc3Npb246Om1ha2VfaW50ZWdlcl91bCgwLCB1aW50MzJf dHlwZSwgbG9jKTsKICAgICAgICAgICBFeHByZXNzaW9uKiBjbXAgPSBFeHByZXNzaW9uOjptYWtl X2JpbmFyeShPUEVSQVRPUl9FUUVRLCBhcmcsIHplcm8sIGxvYyk7CiAgICAgICAgICAgRXhwcmVz c2lvbiogYzMyID0gRXhwcmVzc2lvbjo6bWFrZV9pbnRlZ2VyX3VsKDMyLCBpbnRfdHlwZSwgbG9j KTsKLSAgICAgICAgICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKFJ1bnRp bWU6OkJVSUxUSU5fQ0xaLCBsb2MsIDEsIGFyZy0+Y29weSgpKTsKKyAgICAgICAgICBFeHByZXNz aW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OkJVSUxUSU5fQ0xa LAorCQkJCQkJbG9jLCAxLCBhcmctPmNvcHkoKSk7CiAgICAgICAgICAgY2FsbCA9IEV4cHJlc3Np b246Om1ha2VfY2FzdChpbnRfdHlwZSwgY2FsbCwgbG9jKTsKICAgICAgICAgICBFeHByZXNzaW9u KiBjb25kID0gRXhwcmVzc2lvbjo6bWFrZV9jb25kaXRpb25hbChjbXAsIGMzMiwgY2FsbCwgbG9j KTsKICAgICAgICAgICAvLyBsZW4gPSAzMiAtIGNsegpAQCAtMTIwODYsNyArMTIxMDUsOCBAQCBD YWxsX2V4cHJlc3Npb246OmludHJpbnNpZnkoR29nbyogZ29nbywKICAgICAgICAgICBFeHByZXNz aW9uKiB6ZXJvID0gRXhwcmVzc2lvbjo6bWFrZV9pbnRlZ2VyX3VsKDAsIHVpbnQ2NF90eXBlLCBs b2MpOwogICAgICAgICAgIEV4cHJlc3Npb24qIGNtcCA9IEV4cHJlc3Npb246Om1ha2VfYmluYXJ5 KE9QRVJBVE9SX0VRRVEsIGFyZywgemVybywgbG9jKTsKICAgICAgICAgICBFeHByZXNzaW9uKiBj NjQgPSBFeHByZXNzaW9uOjptYWtlX2ludGVnZXJfdWwoNjQsIGludF90eXBlLCBsb2MpOwotICAg ICAgICAgIEV4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVudGltZTo6QlVJ TFRJTl9DTFpMTCwgbG9jLCAxLCBhcmctPmNvcHkoKSk7CisgICAgICAgICAgRXhwcmVzc2lvbiog Y2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChnb2dvLCBSdW50aW1lOjpCVUlMVElOX0NMWkxMLAor CQkJCQkJbG9jLCAxLCBhcmctPmNvcHkoKSk7CiAgICAgICAgICAgY2FsbCA9IEV4cHJlc3Npb246 Om1ha2VfY2FzdChpbnRfdHlwZSwgY2FsbCwgbG9jKTsKICAgICAgICAgICBFeHByZXNzaW9uKiBj b25kID0gRXhwcmVzc2lvbjo6bWFrZV9jb25kaXRpb25hbChjbXAsIGM2NCwgY2FsbCwgbG9jKTsK ICAgICAgICAgICAvLyBsZW4gPSA2NCAtIGNsegpAQCAtMTIxMDcsNyArMTIxMjcsNyBAQCBDYWxs X2V4cHJlc3Npb246OmludHJpbnNpZnkoR29nbyogZ29nbywKICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICBjb2RlID0gUnVudGltZTo6QlVJTFRJTl9QT1BDT1VOVDsKICAgICAgICAgICBFeHBy ZXNzaW9uKiBhcmcgPSB0aGlzLT5hcmdzXy0+ZnJvbnQoKTsKLSAgICAgICAgICBFeHByZXNzaW9u KiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGNvZGUsIGxvYywgMSwgYXJnKTsKKyAgICAgICAg ICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIGNvZGUsIGxvYywg MSwgYXJnKTsKICAgICAgICAgICByZXR1cm4gRXhwcmVzc2lvbjo6bWFrZV9jYXN0KGludF90eXBl LCBjYWxsLCBsb2MpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTIzMTEsNyArMTIzMzEsNyBAQCBD YWxsX2V4cHJlc3Npb246OmludHJpbnNpZnkoR29nbyogZ29nbywKICAgICAgICAgICAgIGdvX3Vu cmVhY2hhYmxlKCk7CiAgICAgICAgICAgRXhwcmVzc2lvbiogYTEgPSB0aGlzLT5hcmdzXy0+ZnJv bnQoKTsKICAgICAgICAgICBFeHByZXNzaW9uKiBhMiA9IEV4cHJlc3Npb246Om1ha2VfaW50ZWdl cl91bChtZW1vcmRlciwgaW50MzJfdHlwZSwgbG9jKTsKLSAgICAgICAgICBFeHByZXNzaW9uKiBj YWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGNvZGUsIGxvYywgMiwgYTEsIGEyKTsKKyAgICAgICAg ICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIGNvZGUsIGxvYywg MiwgYTEsIGEyKTsKICAgICAgICAgICByZXR1cm4gRXhwcmVzc2lvbjo6bWFrZV91bnNhZmVfY2Fz dChyZXNfdHlwZSwgY2FsbCwgbG9jKTsKICAgICAgICAgfQogCkBAIC0xMjM1Miw3ICsxMjM3Miw3 IEBAIENhbGxfZXhwcmVzc2lvbjo6aW50cmluc2lmeShHb2dvKiBnb2dvLAogICAgICAgICAgIGVs c2UKICAgICAgICAgICAgIGdvX3VucmVhY2hhYmxlKCk7CiAgICAgICAgICAgRXhwcmVzc2lvbiog YTMgPSBFeHByZXNzaW9uOjptYWtlX2ludGVnZXJfdWwobWVtb3JkZXIsIGludDMyX3R5cGUsIGxv Yyk7Ci0gICAgICAgICAgcmV0dXJuIFJ1bnRpbWU6Om1ha2VfY2FsbChjb2RlLCBsb2MsIDMsIGEx LCBhMiwgYTMpOworICAgICAgICAgIHJldHVybiBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgY29k ZSwgbG9jLCAzLCBhMSwgYTIsIGEzKTsKICAgICAgICAgfQogCiAgICAgICBpZiAoKG5hbWUgPT0g IlhjaGciIHx8IG5hbWUgPT0gIlhjaGc2NCIgfHwgbmFtZSA9PSAiWGNoZ3VpbnRwdHIiCkBAIC0x MjM5Niw3ICsxMjQxNiw3IEBAIENhbGxfZXhwcmVzc2lvbjo6aW50cmluc2lmeShHb2dvKiBnb2dv LAogICAgICAgICAgIEV4cHJlc3Npb24qIGExID0gdGhpcy0+YXJnc18tPmF0KDApOwogICAgICAg ICAgIEV4cHJlc3Npb24qIGEyID0gdGhpcy0+YXJnc18tPmF0KDEpOwogICAgICAgICAgIEV4cHJl c3Npb24qIGEzID0gRXhwcmVzc2lvbjo6bWFrZV9pbnRlZ2VyX3VsKG1lbW9yZGVyLCBpbnQzMl90 eXBlLCBsb2MpOwotICAgICAgICAgIEV4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2Nh bGwoY29kZSwgbG9jLCAzLCBhMSwgYTIsIGEzKTsKKyAgICAgICAgICBFeHByZXNzaW9uKiBjYWxs ID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIGNvZGUsIGxvYywgMywgYTEsIGEyLCBhMyk7CiAg ICAgICAgICAgcmV0dXJuIEV4cHJlc3Npb246Om1ha2VfY2FzdChyZXNfdHlwZSwgY2FsbCwgbG9j KTsKICAgICAgICAgfQogCkBAIC0xMjQ1MCw3ICsxMjQ3MCw3IEBAIENhbGxfZXhwcmVzc2lvbjo6 aW50cmluc2lmeShHb2dvKiBnb2dvLAogICAgICAgICAgIEV4cHJlc3Npb24qIGE0ID0gRXhwcmVz c2lvbjo6bWFrZV9ib29sZWFuKGZhbHNlLCBsb2MpOwogICAgICAgICAgIEV4cHJlc3Npb24qIGE1 ID0gRXhwcmVzc2lvbjo6bWFrZV9pbnRlZ2VyX3VsKG1lbW9yZGVyLCBpbnQzMl90eXBlLCBsb2Mp OwogICAgICAgICAgIEV4cHJlc3Npb24qIGE2ID0gRXhwcmVzc2lvbjo6bWFrZV9pbnRlZ2VyX3Vs KF9fQVRPTUlDX1JFTEFYRUQsIGludDMyX3R5cGUsIGxvYyk7Ci0gICAgICAgICAgcmV0dXJuIFJ1 bnRpbWU6Om1ha2VfY2FsbChjb2RlLCBsb2MsIDYsIGExLCBhMiwgYTMsIGE0LCBhNSwgYTYpOwor ICAgICAgICAgIHJldHVybiBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgY29kZSwgbG9jLCA2LCBh MSwgYTIsIGEzLCBhNCwgYTUsIGE2KTsKICAgICAgICAgfQogCiAgICAgICBpZiAoKG5hbWUgPT0g IlhhZGQiIHx8IG5hbWUgPT0gIlhhZGQ2NCIgfHwgbmFtZSA9PSAiWGFkZGludDY0IgpAQCAtMTI0 OTQsNyArMTI1MTQsNyBAQCBDYWxsX2V4cHJlc3Npb246OmludHJpbnNpZnkoR29nbyogZ29nbywK ICAgICAgICAgICBFeHByZXNzaW9uKiBhMSA9IHRoaXMtPmFyZ3NfLT5hdCgwKTsKICAgICAgICAg ICBFeHByZXNzaW9uKiBhMiA9IHRoaXMtPmFyZ3NfLT5hdCgxKTsKICAgICAgICAgICBFeHByZXNz aW9uKiBhMyA9IEV4cHJlc3Npb246Om1ha2VfaW50ZWdlcl91bChtZW1vcmRlciwgaW50MzJfdHlw ZSwgbG9jKTsKLSAgICAgICAgICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxs KGNvZGUsIGxvYywgMywgYTEsIGEyLCBhMyk7CisgICAgICAgICAgRXhwcmVzc2lvbiogY2FsbCA9 IFJ1bnRpbWU6Om1ha2VfY2FsbChnb2dvLCBjb2RlLCBsb2MsIDMsIGExLCBhMiwgYTMpOwogICAg ICAgICAgIHJldHVybiBFeHByZXNzaW9uOjptYWtlX2Nhc3QocmVzX3R5cGUsIGNhbGwsIGxvYyk7 CiAgICAgICAgIH0KIApAQCAtMTI1MTEsNyArMTI1MzEsNyBAQCBDYWxsX2V4cHJlc3Npb246Omlu dHJpbnNpZnkoR29nbyogZ29nbywKICAgICAgICAgICBFeHByZXNzaW9uKiBhMSA9IHRoaXMtPmFy Z3NfLT5hdCgwKTsKICAgICAgICAgICBFeHByZXNzaW9uKiBhMiA9IHRoaXMtPmFyZ3NfLT5hdCgx KTsKICAgICAgICAgICBFeHByZXNzaW9uKiBhMyA9IEV4cHJlc3Npb246Om1ha2VfaW50ZWdlcl91 bChtZW1vcmRlciwgaW50MzJfdHlwZSwgbG9jKTsKLSAgICAgICAgICByZXR1cm4gUnVudGltZTo6 bWFrZV9jYWxsKGNvZGUsIGxvYywgMywgYTEsIGEyLCBhMyk7CisgICAgICAgICAgcmV0dXJuIFJ1 bnRpbWU6Om1ha2VfY2FsbChnb2dvLCBjb2RlLCBsb2MsIDMsIGExLCBhMiwgYTMpOwogICAgICAg ICB9CiAgICAgfQogICBlbHNlIGlmIChwYWNrYWdlID09ICJpbnRlcm5hbC9hYmkiCkBAIC0xMzg2 MSwxNCArMTM4ODEsMTQgQEAgQXJyYXlfaW5kZXhfZXhwcmVzc2lvbjo6ZG9fZmxhdHRlbihHb2dv KiBnb2dvLCBOYW1lZF9vYmplY3QqLAogICBpZiAoY2FwICE9IE5VTEwpCiAgICAgewogICAgICAg aWYgKGFycmF5X3R5cGUtPmlzX3NsaWNlX3R5cGUoKSkKLQlFeHByZXNzaW9uOjpjaGVja19ib3Vu ZHMoY2FwLCBPUEVSQVRPUl9MRSwgc2NhcCwKKwlFeHByZXNzaW9uOjpjaGVja19ib3VuZHMoZ29n bywgY2FwLCBPUEVSQVRPUl9MRSwgc2NhcCwKIAkJCQkgUnVudGltZTo6UEFOSUNfU0xJQ0UzX0FD QVAsCiAJCQkJIFJ1bnRpbWU6OlBBTklDX1NMSUNFM19BQ0FQX1UsCiAJCQkJIFJ1bnRpbWU6OlBB TklDX0VYVEVORF9TTElDRTNfQUNBUCwKIAkJCQkgUnVudGltZTo6UEFOSUNfRVhURU5EX1NMSUNF M19BQ0FQX1UsCiAJCQkJIGluc2VydGVyLCBsb2MpOwogICAgICAgZWxzZQotCUV4cHJlc3Npb246 OmNoZWNrX2JvdW5kcyhjYXAsIE9QRVJBVE9SX0xFLCBsZW4sCisJRXhwcmVzc2lvbjo6Y2hlY2tf Ym91bmRzKGdvZ28sIGNhcCwgT1BFUkFUT1JfTEUsIGxlbiwKIAkJCQkgUnVudGltZTo6UEFOSUNf U0xJQ0UzX0FMRU4sCiAJCQkJIFJ1bnRpbWU6OlBBTklDX1NMSUNFM19BTEVOX1UsCiAJCQkJIFJ1 bnRpbWU6OlBBTklDX0VYVEVORF9TTElDRTNfQUxFTiwKQEAgLTEzODc4LDcgKzEzODk4LDcgQEAg QXJyYXlfaW5kZXhfZXhwcmVzc2lvbjo6ZG9fZmxhdHRlbihHb2dvKiBnb2dvLCBOYW1lZF9vYmpl Y3QqLAogICAgICAgRXhwcmVzc2lvbiogc3RhcnRfYm91bmQgPSBjYXA7CiAgICAgICBpZiAoZW5k ICE9IE5VTEwgJiYgIWVuZC0+aXNfbmlsX2V4cHJlc3Npb24oKSkKIAl7Ci0JICBFeHByZXNzaW9u OjpjaGVja19ib3VuZHMoZW5kLCBPUEVSQVRPUl9MRSwgY2FwLAorCSAgRXhwcmVzc2lvbjo6Y2hl Y2tfYm91bmRzKGdvZ28sIGVuZCwgT1BFUkFUT1JfTEUsIGNhcCwKIAkJCQkgICBSdW50aW1lOjpQ QU5JQ19TTElDRTNfQiwKIAkJCQkgICBSdW50aW1lOjpQQU5JQ19TTElDRTNfQl9VLAogCQkJCSAg IFJ1bnRpbWU6OlBBTklDX0VYVEVORF9TTElDRTNfQiwKQEAgLTEzODg3LDcgKzEzOTA3LDcgQEAg QXJyYXlfaW5kZXhfZXhwcmVzc2lvbjo6ZG9fZmxhdHRlbihHb2dvKiBnb2dvLCBOYW1lZF9vYmpl Y3QqLAogCSAgc3RhcnRfYm91bmQgPSBlbmQ7CiAJfQogCi0gICAgICBFeHByZXNzaW9uOjpjaGVj a19ib3VuZHMoc3RhcnQsIE9QRVJBVE9SX0xFLCBzdGFydF9ib3VuZCwKKyAgICAgIEV4cHJlc3Np b246OmNoZWNrX2JvdW5kcyhnb2dvLCBzdGFydCwgT1BFUkFUT1JfTEUsIHN0YXJ0X2JvdW5kLAog CQkJICAgICAgIFJ1bnRpbWU6OlBBTklDX1NMSUNFM19DLAogCQkJICAgICAgIFJ1bnRpbWU6OlBB TklDX1NMSUNFM19DX1UsCiAJCQkgICAgICAgUnVudGltZTo6UEFOSUNfRVhURU5EX1NMSUNFM19D LApAQCAtMTM4OTcsMjEgKzEzOTE3LDIxIEBAIEFycmF5X2luZGV4X2V4cHJlc3Npb246OmRvX2Zs YXR0ZW4oR29nbyogZ29nbywgTmFtZWRfb2JqZWN0KiwKICAgZWxzZSBpZiAoZW5kICE9IE5VTEwg JiYgIWVuZC0+aXNfbmlsX2V4cHJlc3Npb24oKSkKICAgICB7CiAgICAgICBpZiAoYXJyYXlfdHlw ZS0+aXNfc2xpY2VfdHlwZSgpKQotCUV4cHJlc3Npb246OmNoZWNrX2JvdW5kcyhlbmQsIE9QRVJB VE9SX0xFLCBzY2FwLAorCUV4cHJlc3Npb246OmNoZWNrX2JvdW5kcyhnb2dvLCBlbmQsIE9QRVJB VE9SX0xFLCBzY2FwLAogCQkJCSBSdW50aW1lOjpQQU5JQ19TTElDRV9BQ0FQLAogCQkJCSBSdW50 aW1lOjpQQU5JQ19TTElDRV9BQ0FQX1UsCiAJCQkJIFJ1bnRpbWU6OlBBTklDX0VYVEVORF9TTElD RV9BQ0FQLAogCQkJCSBSdW50aW1lOjpQQU5JQ19FWFRFTkRfU0xJQ0VfQUNBUF9VLAogCQkJCSBp bnNlcnRlciwgbG9jKTsKICAgICAgIGVsc2UKLQlFeHByZXNzaW9uOjpjaGVja19ib3VuZHMoZW5k LCBPUEVSQVRPUl9MRSwgbGVuLAorCUV4cHJlc3Npb246OmNoZWNrX2JvdW5kcyhnb2dvLCBlbmQs IE9QRVJBVE9SX0xFLCBsZW4sCiAJCQkJIFJ1bnRpbWU6OlBBTklDX1NMSUNFX0FMRU4sCiAJCQkJ IFJ1bnRpbWU6OlBBTklDX1NMSUNFX0FMRU5fVSwKIAkJCQkgUnVudGltZTo6UEFOSUNfRVhURU5E X1NMSUNFX0FMRU4sCiAJCQkJIFJ1bnRpbWU6OlBBTklDX0VYVEVORF9TTElDRV9BTEVOX1UsCiAJ CQkJIGluc2VydGVyLCBsb2MpOwogCi0gICAgICBFeHByZXNzaW9uOjpjaGVja19ib3VuZHMoc3Rh cnQsIE9QRVJBVE9SX0xFLCBlbmQsCisgICAgICBFeHByZXNzaW9uOjpjaGVja19ib3VuZHMoZ29n bywgc3RhcnQsIE9QRVJBVE9SX0xFLCBlbmQsCiAJCQkgICAgICAgUnVudGltZTo6UEFOSUNfU0xJ Q0VfQiwKIAkJCSAgICAgICBSdW50aW1lOjpQQU5JQ19TTElDRV9CX1UsCiAJCQkgICAgICAgUnVu dGltZTo6UEFOSUNfRVhURU5EX1NMSUNFX0IsCkBAIC0xMzkyNSw3ICsxMzk0NSw3IEBAIEFycmF5 X2luZGV4X2V4cHJlc3Npb246OmRvX2ZsYXR0ZW4oR29nbyogZ29nbywgTmFtZWRfb2JqZWN0KiwK IAlzdGFydF9ib3VuZCA9IHNjYXA7CiAgICAgICBlbHNlCiAJc3RhcnRfYm91bmQgPSBsZW47Ci0g ICAgICBFeHByZXNzaW9uOjpjaGVja19ib3VuZHMoc3RhcnQsIE9QRVJBVE9SX0xFLCBzdGFydF9i b3VuZCwKKyAgICAgIEV4cHJlc3Npb246OmNoZWNrX2JvdW5kcyhnb2dvLCBzdGFydCwgT1BFUkFU T1JfTEUsIHN0YXJ0X2JvdW5kLAogCQkJICAgICAgIFJ1bnRpbWU6OlBBTklDX1NMSUNFX0IsCiAJ CQkgICAgICAgUnVudGltZTo6UEFOSUNfU0xJQ0VfQl9VLAogCQkJICAgICAgIFJ1bnRpbWU6OlBB TklDX0VYVEVORF9TTElDRV9CLApAQCAtMTM5MzMsNyArMTM5NTMsNyBAQCBBcnJheV9pbmRleF9l eHByZXNzaW9uOjpkb19mbGF0dGVuKEdvZ28qIGdvZ28sIE5hbWVkX29iamVjdCosCiAJCQkgICAg ICAgaW5zZXJ0ZXIsIGxvYyk7CiAgICAgfQogICBlbHNlCi0gICAgRXhwcmVzc2lvbjo6Y2hlY2tf Ym91bmRzKHN0YXJ0LCBPUEVSQVRPUl9MVCwgbGVuLAorICAgIEV4cHJlc3Npb246OmNoZWNrX2Jv dW5kcyhnb2dvLCBzdGFydCwgT1BFUkFUT1JfTFQsIGxlbiwKIAkJCSAgICAgUnVudGltZTo6UEFO SUNfSU5ERVgsCiAJCQkgICAgIFJ1bnRpbWU6OlBBTklDX0lOREVYX1UsCiAJCQkgICAgIFJ1bnRp bWU6OlBBTklDX0VYVEVORF9JTkRFWCwKQEAgLTE0MTY2LDcgKzE0MTg2LDcgQEAgU3RyaW5nX2lu ZGV4X2V4cHJlc3Npb246OmRvX3RyYXZlcnNlKFRyYXZlcnNlKiB0cmF2ZXJzZSkKIH0KIAogRXhw cmVzc2lvbioKLVN0cmluZ19pbmRleF9leHByZXNzaW9uOjpkb19mbGF0dGVuKEdvZ28qLCBOYW1l ZF9vYmplY3QqLAorU3RyaW5nX2luZGV4X2V4cHJlc3Npb246OmRvX2ZsYXR0ZW4oR29nbyogZ29n bywgTmFtZWRfb2JqZWN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0 YXRlbWVudF9pbnNlcnRlciogaW5zZXJ0ZXIpCiB7CiAgIGlmICh0aGlzLT5pc19mbGF0dGVuZWRf KQpAQCAtMTQyMjgsMTMgKzE0MjQ4LDEzIEBAIFN0cmluZ19pbmRleF9leHByZXNzaW9uOjpkb19m bGF0dGVuKEdvZ28qLCBOYW1lZF9vYmplY3QqLAogCiAgIGlmIChlbmQgIT0gTlVMTCAmJiAhZW5k LT5pc19uaWxfZXhwcmVzc2lvbigpKQogICAgIHsKLSAgICAgIEV4cHJlc3Npb246OmNoZWNrX2Jv dW5kcyhlbmQsIE9QRVJBVE9SX0xFLCBsZW4sCisgICAgICBFeHByZXNzaW9uOjpjaGVja19ib3Vu ZHMoZ29nbywgZW5kLCBPUEVSQVRPUl9MRSwgbGVuLAogCQkJICAgICAgIFJ1bnRpbWU6OlBBTklD X1NMSUNFX0FMRU4sCiAJCQkgICAgICAgUnVudGltZTo6UEFOSUNfU0xJQ0VfQUxFTl9VLAogCQkJ ICAgICAgIFJ1bnRpbWU6OlBBTklDX0VYVEVORF9TTElDRV9BTEVOLAogCQkJICAgICAgIFJ1bnRp bWU6OlBBTklDX0VYVEVORF9TTElDRV9BTEVOX1UsCiAJCQkgICAgICAgaW5zZXJ0ZXIsIGxvYyk7 Ci0gICAgICBFeHByZXNzaW9uOjpjaGVja19ib3VuZHMoc3RhcnQsIE9QRVJBVE9SX0xFLCBlbmQs CisgICAgICBFeHByZXNzaW9uOjpjaGVja19ib3VuZHMoZ29nbywgc3RhcnQsIE9QRVJBVE9SX0xF LCBlbmQsCiAJCQkgICAgICAgUnVudGltZTo6UEFOSUNfU0xJQ0VfQiwKIAkJCSAgICAgICBSdW50 aW1lOjpQQU5JQ19TTElDRV9CX1UsCiAJCQkgICAgICAgUnVudGltZTo6UEFOSUNfRVhURU5EX1NM SUNFX0IsCkBAIC0xNDI0MiwxNCArMTQyNjIsMTQgQEAgU3RyaW5nX2luZGV4X2V4cHJlc3Npb246 OmRvX2ZsYXR0ZW4oR29nbyosIE5hbWVkX29iamVjdCosCiAJCQkgICAgICAgaW5zZXJ0ZXIsIGxv Yyk7CiAgICAgfQogICBlbHNlIGlmIChlbmQgIT0gTlVMTCkKLSAgICBFeHByZXNzaW9uOjpjaGVj a19ib3VuZHMoc3RhcnQsIE9QRVJBVE9SX0xFLCBsZW4sCisgICAgRXhwcmVzc2lvbjo6Y2hlY2tf Ym91bmRzKGdvZ28sIHN0YXJ0LCBPUEVSQVRPUl9MRSwgbGVuLAogCQkJICAgICBSdW50aW1lOjpQ QU5JQ19TTElDRV9CLAogCQkJICAgICBSdW50aW1lOjpQQU5JQ19TTElDRV9CX1UsCiAJCQkgICAg IFJ1bnRpbWU6OlBBTklDX0VYVEVORF9TTElDRV9CLAogCQkJICAgICBSdW50aW1lOjpQQU5JQ19F WFRFTkRfU0xJQ0VfQl9VLAogCQkJICAgICBpbnNlcnRlciwgbG9jKTsKICAgZWxzZQotICAgIEV4 cHJlc3Npb246OmNoZWNrX2JvdW5kcyhzdGFydCwgT1BFUkFUT1JfTFQsIGxlbiwKKyAgICBFeHBy ZXNzaW9uOjpjaGVja19ib3VuZHMoZ29nbywgc3RhcnQsIE9QRVJBVE9SX0xULCBsZW4sCiAJCQkg ICAgIFJ1bnRpbWU6OlBBTklDX0lOREVYLAogCQkJICAgICBSdW50aW1lOjpQQU5JQ19JTkRFWF9V LAogCQkJICAgICBSdW50aW1lOjpQQU5JQ19FWFRFTkRfSU5ERVgsCkBAIC0xNDcwNSwxMSArMTQ3 MjUsMTEgQEAgTWFwX2luZGV4X2V4cHJlc3Npb246OmdldF92YWx1ZV9wb2ludGVyKEdvZ28qIGdv Z28pCiAgICAgICAgICAgICAgICAgY29kZSA9IFJ1bnRpbWU6Ok1BUEFDQ0VTUzE7CiAgICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgbWFwX2luZGV4ID0gUnVu dGltZTo6bWFrZV9jYWxsKGNvZGUsIGxvYywgMywKKyAgICAgICAgICBtYXBfaW5kZXggPSBSdW50 aW1lOjptYWtlX2NhbGwoZ29nbywgY29kZSwgbG9jLCAzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB0eXBlX2V4cHIsIG1hcF9yZWYsIGtleSk7CiAgICAgICAgIH0K ICAgICAgIGVsc2UKLSAgICAgICAgbWFwX2luZGV4ID0gUnVudGltZTo6bWFrZV9jYWxsKFJ1bnRp bWU6Ok1BUEFDQ0VTUzFfRkFULCBsb2MsIDQsCisgICAgICAgIG1hcF9pbmRleCA9IFJ1bnRpbWU6 Om1ha2VfY2FsbChnb2dvLCBSdW50aW1lOjpNQVBBQ0NFU1MxX0ZBVCwgbG9jLCA0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZV9leHByLCBtYXBfcmVmLCBpbmRl eF9wdHIsIHplcm8pOwogCiAgICAgICBUeXBlKiB2YWxfdHlwZSA9IHR5cGUtPnZhbF90eXBlKCk7 CkBAIC0xNDg0Myw3ICsxNDg2Myw3IEBAIEZpZWxkX3JlZmVyZW5jZV9leHByZXNzaW9uOjpkb19s b3dlcihHb2dvKiBnb2dvLCBOYW1lZF9vYmplY3QqIGZ1bmN0aW9uLAogICBlID0gRXhwcmVzc2lv bjo6bWFrZV92YXJfcmVmZXJlbmNlKG5vLCBsb2MpOwogICBlID0gRXhwcmVzc2lvbjo6bWFrZV91 bmFyeShPUEVSQVRPUl9BTkQsIGUsIGxvYyk7CiAKLSAgRXhwcmVzc2lvbiogY2FsbCA9IFJ1bnRp bWU6Om1ha2VfY2FsbChSdW50aW1lOjpGSUVMRFRSQUNLLCBsb2MsIDEsIGUpOworICBFeHByZXNz aW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OkZJRUxEVFJBQ0ss IGxvYywgMSwgZSk7CiAgIGdvZ28tPmxvd2VyX2V4cHJlc3Npb24oZnVuY3Rpb24sIGluc2VydGVy LCAmY2FsbCk7CiAgIGluc2VydGVyLT5pbnNlcnQoU3RhdGVtZW50OjptYWtlX3N0YXRlbWVudChj YWxsLCBmYWxzZSkpOwogCkBAIC0xNTI0Miw3ICsxNTI2Miw3IEBAIEludGVyZmFjZV9maWVsZF9y ZWZlcmVuY2VfZXhwcmVzc2lvbjo6ZG9fZ2V0X2JhY2tlbmQoVHJhbnNsYXRlX2NvbnRleHQqIGNv bnRleHQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeHByZXNzaW9uOjptYWtlX25p bChsb2MpLCBsb2MpOwogICBCZXhwcmVzc2lvbiogYm5pbF9jaGVjayA9IG5pbF9jaGVjay0+Z2V0 X2JhY2tlbmQoY29udGV4dCk7CiAKLSAgRXhwcmVzc2lvbiogY3Jhc2ggPSBSdW50aW1lOjptYWtl X2NhbGwoUnVudGltZTo6UEFOSUNfTUVNLCBsb2MsIDApOworICBFeHByZXNzaW9uKiBjcmFzaCA9 IFJ1bnRpbWU6Om1ha2VfY2FsbChnb2dvLCBSdW50aW1lOjpQQU5JQ19NRU0sIGxvYywgMCk7CiAg IEJleHByZXNzaW9uKiBiY3Jhc2ggPSBjcmFzaC0+Z2V0X2JhY2tlbmQoY29udGV4dCk7CiAKICAg QmZ1bmN0aW9uKiBiZm4gPSBjb250ZXh0LT5mdW5jdGlvbigpLT5mdW5jX3ZhbHVlKCktPmdldF9k ZWNsKCk7CkBAIC0xNjc2Myw4ICsxNjc4Myw4IEBAIE1hcF9jb25zdHJ1Y3Rpb25fZXhwcmVzc2lv bjo6ZG9fZ2V0X2JhY2tlbmQoVHJhbnNsYXRlX2NvbnRleHQqIGNvbnRleHQpCiAgICAgICBFeHBy ZXNzaW9uOjptYWtlX3N0cnVjdF9maWVsZF9vZmZzZXQodGhpcy0+ZWxlbWVudF90eXBlXywgdmFs ZmllbGQpOwogCiAgIEV4cHJlc3Npb24qIG1hcF9jdG9yID0KLSAgICAgIFJ1bnRpbWU6Om1ha2Vf Y2FsbChSdW50aW1lOjpDT05TVFJVQ1RfTUFQLCBsb2MsIDUsIGRlc2NyaXB0b3IsIGNvdW50LAot ICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5X3NpemUsIHZhbF9vZmZzZXQsIHZlbnRyaWVz KTsKKyAgICBSdW50aW1lOjptYWtlX2NhbGwoY29udGV4dC0+Z29nbygpLCBSdW50aW1lOjpDT05T VFJVQ1RfTUFQLCBsb2MsIDUsCisJCSAgICAgICBkZXNjcmlwdG9yLCBjb3VudCwgZW50cnlfc2l6 ZSwgdmFsX29mZnNldCwgdmVudHJpZXMpOwogICByZXR1cm4gbWFwX2N0b3ItPmdldF9iYWNrZW5k KGNvbnRleHQpOwogfQogCkBAIC0xNzg0MSwxMyArMTc4NjEsMTYgQEAgVHlwZV9ndWFyZF9leHBy ZXNzaW9uOjpkb19nZXRfYmFja2VuZChUcmFuc2xhdGVfY29udGV4dCogY29udGV4dCkKIHsKICAg RXhwcmVzc2lvbiogY29udmVyc2lvbjsKICAgaWYgKHRoaXMtPnR5cGVfLT5pbnRlcmZhY2VfdHlw ZSgpICE9IE5VTEwpCi0gICAgY29udmVyc2lvbiA9Ci0gICAgICAgIEV4cHJlc3Npb246OmNvbnZl cnRfaW50ZXJmYWNlX3RvX2ludGVyZmFjZSh0aGlzLT50eXBlXywgdGhpcy0+ZXhwcl8sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlLCB0aGlz LT5sb2NhdGlvbigpKTsKKyAgICBjb252ZXJzaW9uID0gRXhwcmVzc2lvbjo6Y29udmVydF9pbnRl cmZhY2VfdG9faW50ZXJmYWNlKGNvbnRleHQtPmdvZ28oKSwKKwkJCQkJCQkgICAgdGhpcy0+dHlw ZV8sCisJCQkJCQkJICAgIHRoaXMtPmV4cHJfLAorCQkJCQkJCSAgICB0cnVlLAorCQkJCQkJCSAg ICB0aGlzLT5sb2NhdGlvbigpKTsKICAgZWxzZQotICAgIGNvbnZlcnNpb24gPQotICAgICAgICBF eHByZXNzaW9uOjpjb252ZXJ0X2Zvcl9hc3NpZ25tZW50KGNvbnRleHQtPmdvZ28oKSwgdGhpcy0+ dHlwZV8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+ ZXhwcl8sIHRoaXMtPmxvY2F0aW9uKCkpOworICAgIGNvbnZlcnNpb24gPSBFeHByZXNzaW9uOjpj b252ZXJ0X2Zvcl9hc3NpZ25tZW50KGNvbnRleHQtPmdvZ28oKSwKKwkJCQkJCSAgICB0aGlzLT50 eXBlXywKKwkJCQkJCSAgICB0aGlzLT5leHByXywKKwkJCQkJCSAgICB0aGlzLT5sb2NhdGlvbigp KTsKIAogICBHb2dvKiBnb2dvID0gY29udGV4dC0+Z29nbygpOwogICBCdHlwZSogYnQgPSB0aGlz LT50eXBlXy0+Z2V0X2JhY2tlbmQoZ29nbyk7CkBAIC0xNzk0Nyw3ICsxNzk3MCw3IEBAIEhlYXBf ZXhwcmVzc2lvbjo6ZG9fZ2V0X2JhY2tlbmQoVHJhbnNsYXRlX2NvbnRleHQqIGNvbnRleHQpCiAg ICAgICAgICAgZXJocyA9IEV4cHJlc3Npb246Om1ha2VfYmFja2VuZChidGVtcHJlZiwgZXR5cGUs IGxvYyk7CiAgICAgICAgICAgZXJocyA9IEV4cHJlc3Npb246OnVucGFja19kaXJlY3RfaWZhY2Uo ZXJocywgbG9jKTsKICAgICAgICAgICBlcmhzID0gRXhwcmVzc2lvbjo6bWFrZV91bnNhZmVfY2Fz dCh1aW50cHRyX3R5cGUsIGVyaHMsIGxvYyk7Ci0gICAgICAgICAgY2FsbCA9IFJ1bnRpbWU6Om1h a2VfY2FsbChSdW50aW1lOjpHQ1dSSVRFQkFSUklFUiwgbG9jLCAyLAorICAgICAgICAgIGNhbGwg PSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGltZTo6R0NXUklURUJBUlJJRVIsIGxvYywg MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsaHMsIGVyaHMpOwogICAg ICAgICB9CiAgICAgICBlbHNlCkBAIC0xNzk1Niw3ICsxNzk3OSw3IEBAIEhlYXBfZXhwcmVzc2lv bjo6ZG9fZ2V0X2JhY2tlbmQoVHJhbnNsYXRlX2NvbnRleHQqIGNvbnRleHQpCiAgICAgICAgICAg QmV4cHJlc3Npb24qIGFkZHIgPQogICAgICAgICAgICAgZ29nby0+YmFja2VuZCgpLT5hZGRyZXNz X2V4cHJlc3Npb24oYnRlbXByZWYsIGxvYyk7CiAgICAgICAgICAgZXJocyA9IEV4cHJlc3Npb246 Om1ha2VfYmFja2VuZChhZGRyLCBldHlwZV9wdHIsIGxvYyk7Ci0gICAgICAgICAgY2FsbCA9IFJ1 bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpUWVBFRE1FTU1PVkUsIGxvYywgMywKKyAgICAgICAg ICBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OlRZUEVETUVNTU9WRSwg bG9jLCAzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGQsIGVsaHMsIGVy aHMpOwogICAgICAgICB9CiAgICAgICBTdGF0ZW1lbnQqIGNzID0gU3RhdGVtZW50OjptYWtlX3N0 YXRlbWVudChjYWxsLCBmYWxzZSk7CkBAIC0xODA4NSwxMiArMTgxMDgsMTMgQEAgUmVjZWl2ZV9l eHByZXNzaW9uOjpkb19nZXRfYmFja2VuZChUcmFuc2xhdGVfY29udGV4dCogY29udGV4dCkKICAg ICAgIHJldHVybiBjb250ZXh0LT5iYWNrZW5kKCktPmVycm9yX2V4cHJlc3Npb24oKTsKICAgICB9 CiAKKyAgR29nbyogZ29nbyA9IGNvbnRleHQtPmdvZ28oKTsKICAgRXhwcmVzc2lvbiogcmVjdl9y ZWYgPQogICAgIEV4cHJlc3Npb246Om1ha2VfdGVtcG9yYXJ5X3JlZmVyZW5jZSh0aGlzLT50ZW1w X3JlY2VpdmVyXywgbG9jKTsKICAgRXhwcmVzc2lvbiogcmVjdl9hZGRyID0KICAgICBFeHByZXNz aW9uOjptYWtlX3RlbXBvcmFyeV9yZWZlcmVuY2UodGhpcy0+dGVtcF9yZWNlaXZlcl8sIGxvYyk7 CiAgIHJlY3ZfYWRkciA9IEV4cHJlc3Npb246Om1ha2VfdW5hcnkoT1BFUkFUT1JfQU5ELCByZWN2 X2FkZHIsIGxvYyk7Ci0gIEV4cHJlc3Npb24qIHJlY3YgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVu dGltZTo6Q0hBTlJFQ1YxLCBsb2MsIDIsCisgIEV4cHJlc3Npb24qIHJlY3YgPSBSdW50aW1lOjpt YWtlX2NhbGwoZ29nbywgUnVudGltZTo6Q0hBTlJFQ1YxLCBsb2MsIDIsCiAJCQkJCXRoaXMtPmNo YW5uZWxfLCByZWN2X2FkZHIpOwogICByZXR1cm4gRXhwcmVzc2lvbjo6bWFrZV9jb21wb3VuZChy ZWN2LCByZWN2X3JlZiwgbG9jKS0+Z2V0X2JhY2tlbmQoY29udGV4dCk7CiB9CmRpZmYgLS1naXQg YS9nY2MvZ28vZ29mcm9udGVuZC9leHByZXNzaW9ucy5oIGIvZ2NjL2dvL2dvZnJvbnRlbmQvZXhw cmVzc2lvbnMuaAppbmRleCA0OTE0MGQxMDBhNC4uM2I4YWU2OGY1MDAgMTAwNjQ0Ci0tLSBhL2dj Yy9nby9nb2Zyb250ZW5kL2V4cHJlc3Npb25zLmgKKysrIGIvZ2NjL2dvL2dvZnJvbnRlbmQvZXhw cmVzc2lvbnMuaApAQCAtMTA5MCw3ICsxMDkwLDcgQEAgY2xhc3MgRXhwcmVzc2lvbgogICAvLyBp bnRlcmZhY2UgdHlwZS4gIElmIEZPUl9UWVBFX0dVQVJEIGlzIHRydWUgdGhpcyBpcyBmb3IgYSB0 eXBlCiAgIC8vIGFzc2VydGlvbi4KICAgc3RhdGljIEV4cHJlc3Npb24qCi0gIGNvbnZlcnRfaW50 ZXJmYWNlX3RvX2ludGVyZmFjZShUeXBlKiBsaHNfdHlwZSwKKyAgY29udmVydF9pbnRlcmZhY2Vf dG9faW50ZXJmYWNlKEdvZ28qLCBUeXBlKiBsaHNfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEV4cHJlc3Npb24qIHJocywgYm9vbCBmb3JfdHlwZV9ndWFyZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2F0aW9uKTsKIApAQCAtMTEyNSw5ICsxMTI1 LDkgQEAgY2xhc3MgRXhwcmVzc2lvbgogCiAgIC8vIEluc2VydCBib3VuZHMgY2hlY2tzIGZvciBh biBpbmRleCBleHByZXNzaW9uLgogICBzdGF0aWMgdm9pZAotICBjaGVja19ib3VuZHMoRXhwcmVz c2lvbiogdmFsLCBPcGVyYXRvciwgRXhwcmVzc2lvbiogYm91bmQsIFJ1bnRpbWU6OkZ1bmN0aW9u LAorICBjaGVja19ib3VuZHMoR29nbyosIEV4cHJlc3Npb24qIHZhbCwgT3BlcmF0b3IsIEV4cHJl c3Npb24qIGJvdW5kLAogCSAgICAgICBSdW50aW1lOjpGdW5jdGlvbiwgUnVudGltZTo6RnVuY3Rp b24sIFJ1bnRpbWU6OkZ1bmN0aW9uLAotCSAgICAgICBTdGF0ZW1lbnRfaW5zZXJ0ZXIqLCBMb2Nh dGlvbik7CisJICAgICAgIFJ1bnRpbWU6OkZ1bmN0aW9uLCBTdGF0ZW1lbnRfaW5zZXJ0ZXIqLCBM b2NhdGlvbik7CiAKICAgLy8gUmV0dXJuIGFuIGV4cHJlc3Npb24gZm9yIGNvbnN0cnVjdGluZyBh IGRpcmVjdCBpbnRlcmZhY2UgdHlwZSBmcm9tIGEKICAgLy8gcG9pbnRlci4KZGlmZiAtLWdpdCBh L2djYy9nby9nb2Zyb250ZW5kL2dvZ28uY2MgYi9nY2MvZ28vZ29mcm9udGVuZC9nb2dvLmNjCmlu ZGV4IDQ5OTQ1OWI1MzY2Li4zYzAyMWI5ODViOSAxMDA2NDQKLS0tIGEvZ2NjL2dvL2dvZnJvbnRl bmQvZ29nby5jYworKysgYi9nY2MvZ28vZ29mcm9udGVuZC9nb2dvLmNjCkBAIC04OTgsNyArODk4 LDggQEAgR29nbzo6cmVnaXN0ZXJfZ2NfdmFycyhjb25zdCBzdGQ6OnZlY3RvcjxOYW1lZF9vYmpl Y3QqPiYgdmFyX2djLAogICBFeHByZXNzaW9uKiByb290X2FkZHIgPSBFeHByZXNzaW9uOjptYWtl X3VuYXJ5KE9QRVJBVE9SX0FORCwgcm9vdF9saXN0X2N0b3IsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbHRpbl9sb2MpOwogICByb290X2FkZHIt PnVuYXJ5X2V4cHJlc3Npb24oKS0+c2V0X2lzX2djX3Jvb3QoKTsKLSAgRXhwcmVzc2lvbiogcmVn aXN0ZXJfcm9vdHMgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVudGltZTo6UkVHSVNURVJfR0NfUk9P VFMsCisgIEV4cHJlc3Npb24qIHJlZ2lzdGVyX3Jvb3RzID0gUnVudGltZTo6bWFrZV9jYWxsKHRo aXMsCisJCQkJCQkgIFJ1bnRpbWU6OlJFR0lTVEVSX0dDX1JPT1RTLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsdGluX2xvYywgMSwgcm9vdF9h ZGRyKTsKIAogICBUcmFuc2xhdGVfY29udGV4dCBjb250ZXh0KHRoaXMsIE5VTEwsIE5VTEwsIE5V TEwpOwpAQCAtMTAzOSw3ICsxMDQwLDcgQEAgR29nbzo6cmVnaXN0ZXJfdHlwZV9kZXNjcmlwdG9y cyhzdGQ6OnZlY3RvcjxCc3RhdGVtZW50Kj4mIGluaXRfc3RtdHMsCiAgIFR5cGUqIGFycmF5X3B0 cl90eXBlID0gVHlwZTo6bWFrZV9wb2ludGVyX3R5cGUobGlzdF9hcnJheV90eXBlKTsKICAgRXhw cmVzc2lvbiogZXhwciA9IEV4cHJlc3Npb246Om1ha2VfYmFja2VuZChiZXhwciwgYXJyYXlfcHRy X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVp bHRpbl9sb2MpOwotICBleHByID0gUnVudGltZTo6bWFrZV9jYWxsKFJ1bnRpbWU6OlJFR0lTVEVS X1RZUEVfREVTQ1JJUFRPUlMsCisgIGV4cHIgPSBSdW50aW1lOjptYWtlX2NhbGwodGhpcywgUnVu dGltZTo6UkVHSVNURVJfVFlQRV9ERVNDUklQVE9SUywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBidWlsdGluX2xvYywgMiwgbGVuX2V4cHItPmNvcHkoKSwgZXhwcik7CiAgIEJleHByZXNz aW9uKiBiY2FsbCA9IGV4cHItPmdldF9iYWNrZW5kKCZjb250ZXh0KTsKICAgaW5pdF9zdG10cy5w dXNoX2JhY2sodGhpcy0+YmFja2VuZCgpLT5leHByZXNzaW9uX3N0YXRlbWVudChpbml0X2JmbiwK QEAgLTQ5MjgsNyArNDkyOSw4IEBAIEJ1aWxkX3JlY292ZXJfdGh1bmtzOjpjYW5fcmVjb3Zlcl9h cmcoTG9jYXRpb24gbG9jYXRpb24pCiAgICAgfQogCiAgIEV4cHJlc3Npb24qIHpleHByID0gRXhw cmVzc2lvbjo6bWFrZV9pbnRlZ2VyX3VsKDAsIE5VTEwsIGxvY2F0aW9uKTsKLSAgRXhwcmVzc2lv biogY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpCVUlMVElOX1JFVFVSTl9BRERS RVNTLAorICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKHRoaXMtPmdvZ29f LAorCQkJCQlSdW50aW1lOjpCVUlMVElOX1JFVFVSTl9BRERSRVNTLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uLCAxLCB6ZXhwcik7CiAgIGNhbGwgPSBF eHByZXNzaW9uOjptYWtlX3Vuc2FmZV9jYXN0KHVpbnRwdHJfdHlwZSwgY2FsbCwgbG9jYXRpb24p OwogCkBAIC01MDc4LDcgKzUwODAsNyBAQCBFeHByZXNzaW9uKgogR29nbzo6YWxsb2NhdGVfbWVt b3J5KFR5cGUqIHR5cGUsIExvY2F0aW9uIGxvY2F0aW9uKQogewogICBFeHByZXNzaW9uKiB0ZCA9 IEV4cHJlc3Npb246Om1ha2VfdHlwZV9kZXNjcmlwdG9yKHR5cGUsIGxvY2F0aW9uKTsKLSAgcmV0 dXJuIFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpORVcsIGxvY2F0aW9uLCAxLCB0ZCk7Cisg IHJldHVybiBSdW50aW1lOjptYWtlX2NhbGwodGhpcywgUnVudGltZTo6TkVXLCBsb2NhdGlvbiwg MSwgdGQpOwogfQogCiAvLyBUcmF2ZXJzYWwgY2xhc3MgdXNlZCB0byBjaGVjayBmb3IgcmV0dXJu IHN0YXRlbWVudHMuCkBAIC02Nzc4LDcgKzY3ODAsNyBAQCBGdW5jdGlvbjo6YnVpbGRfZGVmZXJf d3JhcHBlcihHb2dvKiBnb2dvLCBOYW1lZF9vYmplY3QqIG5hbWVkX2Z1bmN0aW9uLAogICAvLyBs aWJnby9ydW50aW1lL2dvLXVud2luZC5jLgogCiAgIHN0ZDo6dmVjdG9yPEJzdGF0ZW1lbnQqPiBz dG10czsKLSAgRXhwcmVzc2lvbiogY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpD SEVDS0RFRkVSLCBlbmRfbG9jLCAxLAorICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGltZTo6bWFr ZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OkNIRUNLREVGRVIsIGVuZF9sb2MsIDEsCiAJCQkJCXRoaXMt PmRlZmVyX3N0YWNrKGVuZF9sb2MpKTsKICAgVHJhbnNsYXRlX2NvbnRleHQgY29udGV4dChnb2dv LCBuYW1lZF9mdW5jdGlvbiwgTlVMTCwgTlVMTCk7CiAgIEJleHByZXNzaW9uKiBkZWZlciA9IGNh bGwtPmdldF9iYWNrZW5kKCZjb250ZXh0KTsKQEAgLTY3OTEsMTEgKzY3OTMsMTEgQEAgRnVuY3Rp b246OmJ1aWxkX2RlZmVyX3dyYXBwZXIoR29nbyogZ29nbywgTmFtZWRfb2JqZWN0KiBuYW1lZF9m dW5jdGlvbiwKICAgZ29fYXNzZXJ0KCpleGNlcHQgPT0gTlVMTCk7CiAgICpleGNlcHQgPSBnb2dv LT5iYWNrZW5kKCktPnN0YXRlbWVudF9saXN0KHN0bXRzKTsKIAotICBjYWxsID0gUnVudGltZTo6 bWFrZV9jYWxsKFJ1bnRpbWU6OkNIRUNLREVGRVIsIGVuZF9sb2MsIDEsCisgIGNhbGwgPSBSdW50 aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGltZTo6Q0hFQ0tERUZFUiwgZW5kX2xvYywgMSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5kZWZlcl9zdGFjayhlbmRfbG9jKSk7CiAg IGRlZmVyID0gY2FsbC0+Z2V0X2JhY2tlbmQoJmNvbnRleHQpOwogCi0gIGNhbGwgPSBSdW50aW1l OjptYWtlX2NhbGwoUnVudGltZTo6REVGRVJSRVRVUk4sIGVuZF9sb2MsIDEsCisgIGNhbGwgPSBS dW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGltZTo6REVGRVJSRVRVUk4sIGVuZF9sb2MsIDEs CiAgICAgICAgIAkJICAgIHRoaXMtPmRlZmVyX3N0YWNrKGVuZF9sb2MpKTsKICAgQmV4cHJlc3Np b24qIHVuZGVmZXIgPSBjYWxsLT5nZXRfYmFja2VuZCgmY29udGV4dCk7CiAgIEJzdGF0ZW1lbnQq IGZ1bmN0aW9uX2RlZmVyID0KZGlmZiAtLWdpdCBhL2djYy9nby9nb2Zyb250ZW5kL3J1bnRpbWUu Y2MgYi9nY2MvZ28vZ29mcm9udGVuZC9ydW50aW1lLmNjCmluZGV4IGUxMTNhMWFkZmM5Li4yNzRh YTRhN2MxZSAxMDA2NDQKLS0tIGEvZ2NjL2dvL2dvZnJvbnRlbmQvcnVudGltZS5jYworKysgYi9n Y2MvZ28vZ29mcm9udGVuZC9ydW50aW1lLmNjCkBAIC00MTQsNyArNDE0LDcgQEAgUnVudGltZTo6 cnVudGltZV9kZWNsYXJhdGlvbihGdW5jdGlvbiBjb2RlKQogLy8gTWFrZSBhIGNhbGwgdG8gYSBy dW50aW1lIGZ1bmN0aW9uLgogCiBDYWxsX2V4cHJlc3Npb24qCi1SdW50aW1lOjptYWtlX2NhbGwo UnVudGltZTo6RnVuY3Rpb24gY29kZSwgTG9jYXRpb24gbG9jLAorUnVudGltZTo6bWFrZV9jYWxs KEdvZ28qLCBSdW50aW1lOjpGdW5jdGlvbiBjb2RlLCBMb2NhdGlvbiBsb2MsCiAJCSAgIGludCBw YXJhbV9jb3VudCwgLi4uKQogewogICBnb19hc3NlcnQoY29kZSA8IFJ1bnRpbWU6Ok5VTUJFUl9P Rl9GVU5DVElPTlMpOwpkaWZmIC0tZ2l0IGEvZ2NjL2dvL2dvZnJvbnRlbmQvcnVudGltZS5oIGIv Z2NjL2dvL2dvZnJvbnRlbmQvcnVudGltZS5oCmluZGV4IGU5MjUxMGIzM2RiLi5iZWEyZGJlMzNh NSAxMDA2NDQKLS0tIGEvZ2NjL2dvL2dvZnJvbnRlbmQvcnVudGltZS5oCisrKyBiL2djYy9nby9n b2Zyb250ZW5kL3J1bnRpbWUuaApAQCAtMzIsNyArMzIsNyBAQCBjbGFzcyBSdW50aW1lCiAKICAg Ly8gTWFrZSBhIGNhbGwgdG8gYSBydW50aW1lIGZ1bmN0aW9uLgogICBzdGF0aWMgQ2FsbF9leHBy ZXNzaW9uKgotICBtYWtlX2NhbGwoRnVuY3Rpb24sIExvY2F0aW9uLCBpbnQsIC4uLik7CisgIG1h a2VfY2FsbChHb2dvKiwgRnVuY3Rpb24sIExvY2F0aW9uLCBpbnQsIC4uLik7CiAKICAgLy8gQ29u dmVydCBhbGwgdGhlIHR5cGVzIHVzZWQgYnkgcnVudGltZSBmdW5jdGlvbnMgdG8gdGhlIGJhY2tl bmQKICAgLy8gcmVwcmVzZW50YXRpb24uCmRpZmYgLS1naXQgYS9nY2MvZ28vZ29mcm9udGVuZC9z dGF0ZW1lbnRzLmNjIGIvZ2NjL2dvL2dvZnJvbnRlbmQvc3RhdGVtZW50cy5jYwppbmRleCA5MWM3 NjI3YTBlMy4uNWQ2NTJhMTExOWQgMTAwNjQ0Ci0tLSBhL2djYy9nby9nb2Zyb250ZW5kL3N0YXRl bWVudHMuY2MKKysrIGIvZ2NjL2dvL2dvZnJvbnRlbmQvc3RhdGVtZW50cy5jYwpAQCAtOTYxLDcg Kzk2MSw3IEBAIEFzc2lnbm1lbnRfc3RhdGVtZW50Ojpkb19sb3dlcihHb2dvKiBnb2dvLCBOYW1l ZF9vYmplY3QqLCBCbG9jayogZW5jbG9zaW5nLAogICAgICAgICAgICAgY29kZSA9IFJ1bnRpbWU6 Ok1BUEFTU0lHTjsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICBFeHByZXNz aW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGNvZGUsIGxvYywgMywKKyAgICAgIEV4cHJl c3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgY29kZSwgbG9jLCAzLAogCQkJ CQkgICAgYTEsIGEyLCBhMyk7CiAgICAgICBUeXBlKiBwdHJ2YWxfdHlwZSA9IFR5cGU6Om1ha2Vf cG9pbnRlcl90eXBlKG10LT52YWxfdHlwZSgpKTsKICAgICAgIGNhbGwgPSBFeHByZXNzaW9uOjpt YWtlX2Nhc3QocHRydmFsX3R5cGUsIGNhbGwsIGxvYyk7CkBAIC0xNTk3LDEwICsxNTk3LDExIEBA IFR1cGxlX21hcF9hc3NpZ25tZW50X3N0YXRlbWVudDo6ZG9fbG93ZXIoR29nbyogZ29nbywgTmFt ZWRfb2JqZWN0KiwKICAgICAgICAgICAgIGNvZGUgPSBSdW50aW1lOjpNQVBBQ0NFU1MyOwogICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgIGNhbGwgPSBSdW50aW1lOjptYWtlX2Nh bGwoY29kZSwgbG9jLCAzLCBhMSwgYTIsIGEzKTsKKyAgICAgIGNhbGwgPSBSdW50aW1lOjptYWtl X2NhbGwoZ29nbywgY29kZSwgbG9jLCAzLCBhMSwgYTIsIGEzKTsKICAgICB9CiAgIGVsc2UKLSAg ICBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKFJ1bnRpbWU6Ok1BUEFDQ0VTUzJfRkFULCBsb2Ms IDQsIGExLCBhMiwgYTMsIGE0KTsKKyAgICBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28s IFJ1bnRpbWU6Ok1BUEFDQ0VTUzJfRkFULCBsb2MsIDQsCisJCQkgICAgICBhMSwgYTIsIGEzLCBh NCk7CiAgIHJlZiA9IEV4cHJlc3Npb246Om1ha2VfdGVtcG9yYXJ5X3JlZmVyZW5jZSh2YWxfcHRy X3RlbXAsIGxvYyk7CiAgIHJlZi0+c2V0X2lzX2x2YWx1ZSgpOwogICBFeHByZXNzaW9uKiByZXMg PSBFeHByZXNzaW9uOjptYWtlX2NhbGxfcmVzdWx0KGNhbGwsIDApOwpAQCAtMTcwMSw3ICsxNzAy LDcgQEAgVHVwbGVfcmVjZWl2ZV9hc3NpZ25tZW50X3N0YXRlbWVudDo6ZG9fdHJhdmVyc2UoVHJh dmVyc2UqIHRyYXZlcnNlKQogLy8gTG93ZXIgdG8gYSBmdW5jdGlvbiBjYWxsLgogCiBTdGF0ZW1l bnQqCi1UdXBsZV9yZWNlaXZlX2Fzc2lnbm1lbnRfc3RhdGVtZW50Ojpkb19sb3dlcihHb2dvKiwg TmFtZWRfb2JqZWN0KiwKK1R1cGxlX3JlY2VpdmVfYXNzaWdubWVudF9zdGF0ZW1lbnQ6OmRvX2xv d2VyKEdvZ28qIGdvZ28sIE5hbWVkX29iamVjdCosCiAJCQkJCSAgICAgQmxvY2sqIGVuY2xvc2lu ZywKIAkJCQkJICAgICBTdGF0ZW1lbnRfaW5zZXJ0ZXIqKQogewpAQCAtMTc0NCw3ICsxNzQ1LDcg QEAgVHVwbGVfcmVjZWl2ZV9hc3NpZ25tZW50X3N0YXRlbWVudDo6ZG9fbG93ZXIoR29nbyosIE5h bWVkX29iamVjdCosCiAgIFRlbXBvcmFyeV9yZWZlcmVuY2VfZXhwcmVzc2lvbiogcmVmID0KICAg ICBFeHByZXNzaW9uOjptYWtlX3RlbXBvcmFyeV9yZWZlcmVuY2UodmFsX3RlbXAsIGxvYyk7CiAg IEV4cHJlc3Npb24qIHAyID0gRXhwcmVzc2lvbjo6bWFrZV91bmFyeShPUEVSQVRPUl9BTkQsIHJl ZiwgbG9jKTsKLSAgRXhwcmVzc2lvbiogY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1l OjpDSEFOUkVDVjIsCisgIEV4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29n bywgUnVudGltZTo6Q0hBTlJFQ1YyLAogCQkJCQlsb2MsIDIsIHRoaXMtPmNoYW5uZWxfLCBwMik7 CiAgIHJlZiA9IEV4cHJlc3Npb246Om1ha2VfdGVtcG9yYXJ5X3JlZmVyZW5jZShjbG9zZWRfdGVt cCwgbG9jKTsKICAgcmVmLT5zZXRfaXNfbHZhbHVlKCk7CkBAIC0xODE5LDEwICsxODIwLDEwIEBA IGNsYXNzIFR1cGxlX3R5cGVfZ3VhcmRfYXNzaWdubWVudF9zdGF0ZW1lbnQgOiBwdWJsaWMgU3Rh dGVtZW50CiAKICBwcml2YXRlOgogICBDYWxsX2V4cHJlc3Npb24qCi0gIGxvd2VyX3RvX3R5cGUo UnVudGltZTo6RnVuY3Rpb24pOworICBsb3dlcl90b190eXBlKEdvZ28qLCBSdW50aW1lOjpGdW5j dGlvbik7CiAKICAgdm9pZAotICBsb3dlcl90b19vYmplY3RfdHlwZShCbG9jayosIFJ1bnRpbWU6 OkZ1bmN0aW9uKTsKKyAgbG93ZXJfdG9fb2JqZWN0X3R5cGUoR29nbyosIEJsb2NrKiwgUnVudGlt ZTo6RnVuY3Rpb24pOwogCiAgIC8vIFRoZSB2YXJpYWJsZSB3aGljaCByZWNpZXZlcyB0aGUgY29u dmVydGVkIHZhbHVlLgogICBFeHByZXNzaW9uKiB2YWxfOwpAQCAtMTg0OSw3ICsxODUwLDcgQEAg VHVwbGVfdHlwZV9ndWFyZF9hc3NpZ25tZW50X3N0YXRlbWVudDo6ZG9fdHJhdmVyc2UoVHJhdmVy c2UqIHRyYXZlcnNlKQogLy8gTG93ZXIgdG8gYSBmdW5jdGlvbiBjYWxsLgogCiBTdGF0ZW1lbnQq Ci1UdXBsZV90eXBlX2d1YXJkX2Fzc2lnbm1lbnRfc3RhdGVtZW50Ojpkb19sb3dlcihHb2dvKiwg TmFtZWRfb2JqZWN0KiwKK1R1cGxlX3R5cGVfZ3VhcmRfYXNzaWdubWVudF9zdGF0ZW1lbnQ6OmRv X2xvd2VyKEdvZ28qIGdvZ28sIE5hbWVkX29iamVjdCosCiAJCQkJCQlCbG9jayogZW5jbG9zaW5n LAogCQkJCQkJU3RhdGVtZW50X2luc2VydGVyKikKIHsKQEAgLTE4NzYsMjIgKzE4NzcsMjUgQEAg VHVwbGVfdHlwZV9ndWFyZF9hc3NpZ25tZW50X3N0YXRlbWVudDo6ZG9fbG93ZXIoR29nbyosIE5h bWVkX29iamVjdCosCiAgIGlmICh0aGlzLT50eXBlXy0+aW50ZXJmYWNlX3R5cGUoKSAhPSBOVUxM KQogICAgIHsKICAgICAgIGlmICh0aGlzLT50eXBlXy0+aW50ZXJmYWNlX3R5cGUoKS0+aXNfZW1w dHkoKSkKLQljYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKChleHByX2lzX2VtcHR5CisJY2FsbCA9 IFJ1bnRpbWU6Om1ha2VfY2FsbChnb2dvLAorCQkJCSAgKGV4cHJfaXNfZW1wdHkKIAkJCQkgICA/ IFJ1bnRpbWU6OklGQUNFRTJFMgogCQkJCSAgIDogUnVudGltZTo6SUZBQ0VJMkUyKSwKIAkJCQkg IGxvYywgMSwgdGhpcy0+ZXhwcl8pOwogICAgICAgZWxzZQotCWNhbGwgPSB0aGlzLT5sb3dlcl90 b190eXBlKGV4cHJfaXNfZW1wdHkKLQkJCQkgICA/IFJ1bnRpbWU6OklGQUNFRTJJMgotCQkJCSAg IDogUnVudGltZTo6SUZBQ0VJMkkyKTsKKwljYWxsID0gdGhpcy0+bG93ZXJfdG9fdHlwZShnb2dv LAorCQkJCSAgIChleHByX2lzX2VtcHR5CisJCQkJICAgID8gUnVudGltZTo6SUZBQ0VFMkkyCisJ CQkJICAgIDogUnVudGltZTo6SUZBQ0VJMkkyKSk7CiAgICAgfQogICBlbHNlIGlmICh0aGlzLT50 eXBlXy0+cG9pbnRzX3RvKCkgIT0gTlVMTCkKLSAgICBjYWxsID0gdGhpcy0+bG93ZXJfdG9fdHlw ZShleHByX2lzX2VtcHR5Ci0JCQkgICAgICAgPyBSdW50aW1lOjpJRkFDRUUyVDJQCi0JCQkgICAg ICAgOiBSdW50aW1lOjpJRkFDRUkyVDJQKTsKKyAgICBjYWxsID0gdGhpcy0+bG93ZXJfdG9fdHlw ZShnb2dvLAorCQkJICAgICAgIChleHByX2lzX2VtcHR5CisJCQkJPyBSdW50aW1lOjpJRkFDRUUy VDJQCisJCQkJOiBSdW50aW1lOjpJRkFDRUkyVDJQKSk7CiAgIGVsc2UKICAgICB7Ci0gICAgICB0 aGlzLT5sb3dlcl90b19vYmplY3RfdHlwZShiLAorICAgICAgdGhpcy0+bG93ZXJfdG9fb2JqZWN0 X3R5cGUoZ29nbywgYiwKIAkJCQkgKGV4cHJfaXNfZW1wdHkKIAkJCQkgID8gUnVudGltZTo6SUZB Q0VFMlQyCiAJCQkJICA6IFJ1bnRpbWU6OklGQUNFSTJUMikpOwpAQCAtMTkxOCwxMCArMTkyMiwx MSBAQCBUdXBsZV90eXBlX2d1YXJkX2Fzc2lnbm1lbnRfc3RhdGVtZW50Ojpkb19sb3dlcihHb2dv KiwgTmFtZWRfb2JqZWN0KiwKIC8vIExvd2VyIGEgY29udmVyc2lvbiB0byBhIG5vbi1lbXB0eSBp bnRlcmZhY2UgdHlwZSBvciBhIHBvaW50ZXIgdHlwZS4KIAogQ2FsbF9leHByZXNzaW9uKgotVHVw bGVfdHlwZV9ndWFyZF9hc3NpZ25tZW50X3N0YXRlbWVudDo6bG93ZXJfdG9fdHlwZShSdW50aW1l OjpGdW5jdGlvbiBjb2RlKQorVHVwbGVfdHlwZV9ndWFyZF9hc3NpZ25tZW50X3N0YXRlbWVudDo6 bG93ZXJfdG9fdHlwZShHb2dvKiBnb2dvLAorCQkJCQkJICAgICBSdW50aW1lOjpGdW5jdGlvbiBj b2RlKQogewogICBMb2NhdGlvbiBsb2MgPSB0aGlzLT5sb2NhdGlvbigpOwotICByZXR1cm4gUnVu dGltZTo6bWFrZV9jYWxsKGNvZGUsIGxvYywgMiwKKyAgcmV0dXJuIFJ1bnRpbWU6Om1ha2VfY2Fs bChnb2dvLCBjb2RlLCBsb2MsIDIsCiAJCQkgICAgRXhwcmVzc2lvbjo6bWFrZV90eXBlX2Rlc2Ny aXB0b3IodGhpcy0+dHlwZV8sIGxvYyksCiAJCQkgICAgdGhpcy0+ZXhwcl8pOwogfQpAQCAtMTkz MCw2ICsxOTM1LDcgQEAgVHVwbGVfdHlwZV9ndWFyZF9hc3NpZ25tZW50X3N0YXRlbWVudDo6bG93 ZXJfdG9fdHlwZShSdW50aW1lOjpGdW5jdGlvbiBjb2RlKQogCiB2b2lkCiBUdXBsZV90eXBlX2d1 YXJkX2Fzc2lnbm1lbnRfc3RhdGVtZW50Ojpsb3dlcl90b19vYmplY3RfdHlwZSgKKyAgICBHb2dv KiBnb2dvLAogICAgIEJsb2NrKiBiLAogICAgIFJ1bnRpbWU6OkZ1bmN0aW9uIGNvZGUpCiB7CkBA IC0xOTU1LDcgKzE5NjEsOCBAQCBUdXBsZV90eXBlX2d1YXJkX2Fzc2lnbm1lbnRfc3RhdGVtZW50 Ojpsb3dlcl90b19vYmplY3RfdHlwZSgKICAgRXhwcmVzc2lvbiogcDEgPSBFeHByZXNzaW9uOjpt YWtlX3R5cGVfZGVzY3JpcHRvcih0aGlzLT50eXBlXywgbG9jKTsKICAgRXhwcmVzc2lvbiogcmVm ID0gRXhwcmVzc2lvbjo6bWFrZV90ZW1wb3JhcnlfcmVmZXJlbmNlKHZhbF90ZW1wLCBsb2MpOwog ICBFeHByZXNzaW9uKiBwMyA9IEV4cHJlc3Npb246Om1ha2VfdW5hcnkoT1BFUkFUT1JfQU5ELCBy ZWYsIGxvYyk7Ci0gIEV4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoY29kZSwg bG9jLCAzLCBwMSwgdGhpcy0+ZXhwcl8sIHAzKTsKKyAgRXhwcmVzc2lvbiogY2FsbCA9IFJ1bnRp bWU6Om1ha2VfY2FsbChnb2dvLCBjb2RlLCBsb2MsIDMsCisJCQkJCXAxLCB0aGlzLT5leHByXywg cDMpOwogICBTdGF0ZW1lbnQqIHM7CiAgIGlmIChva190ZW1wID09IE5VTEwpCiAgICAgcyA9IFN0 YXRlbWVudDo6bWFrZV9zdGF0ZW1lbnQoY2FsbCwgdHJ1ZSk7CkBAIC0yNTY1LDcgKzI1NzIsNyBA QCBUaHVua19zdGF0ZW1lbnQ6OnNpbXBsaWZ5X3N0YXRlbWVudChHb2dvKiBnb2dvLCBOYW1lZF9v YmplY3QqIGZ1bmN0aW9uLAogICAgICAgRXhwcmVzc2lvbiogbmlsID0gRXhwcmVzc2lvbjo6bWFr ZV9uaWwobG9jYXRpb24pOwogICAgICAgRXhwcmVzc2lvbiogaXNuaWwgPSBFeHByZXNzaW9uOjpt YWtlX2JpbmFyeShPUEVSQVRPUl9FUUVRLCBmbiwgbmlsLAogCQkJCQkJICBsb2NhdGlvbik7Ci0g ICAgICBFeHByZXNzaW9uKiBjcmFzaCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpQQU5J Q19HT19OSUwsCisgICAgICBFeHByZXNzaW9uKiBjcmFzaCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChn b2dvLCBSdW50aW1lOjpQQU5JQ19HT19OSUwsCiAJCQkJCSAgICAgbG9jYXRpb24sIDApOwogICAg ICAgY3Jhc2ggPSBFeHByZXNzaW9uOjptYWtlX2NvbmRpdGlvbmFsKGlzbmlsLCBjcmFzaCwKIAkJ CQkJICAgRXhwcmVzc2lvbjo6bWFrZV9uaWwobG9jYXRpb24pLApAQCAtMjc0OSw3ICsyNzU2LDcg QEAgVGh1bmtfc3RhdGVtZW50OjpidWlsZF90aHVuayhHb2dvKiBnb2dvLCBjb25zdCBzdGQ6OnN0 cmluZyYgdGh1bmtfbmFtZSwKICAgICB7CiAgICAgICByZXRhZGRyX2xhYmVsID0gZ29nby0+YWRk X2xhYmVsX3JlZmVyZW5jZSgicmV0YWRkciIsIGxvY2F0aW9uLCBmYWxzZSk7CiAgICAgICBFeHBy ZXNzaW9uKiBhcmcgPSBFeHByZXNzaW9uOjptYWtlX2xhYmVsX2FkZHIocmV0YWRkcl9sYWJlbCwg bG9jYXRpb24pOwotICAgICAgRXhwcmVzc2lvbiogY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChS dW50aW1lOjpTRVRERUZFUlJFVEFERFIsCisgICAgICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGlt ZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OlNFVERFRkVSUkVUQUREUiwKIAkJCQkJICAgIGxv Y2F0aW9uLCAxLCBhcmcpOwogCiAgICAgICAvLyBUaGlzIGlzIGEgaGFjayB0byBwcmV2ZW50IHRo ZSBtaWRkbGUtZW5kIGZyb20gZGVsZXRpbmcgdGhlCkBAIC0yOTczLDcgKzI5ODAsOCBAQCBHb19z dGF0ZW1lbnQ6OmRvX2dldF9iYWNrZW5kKFRyYW5zbGF0ZV9jb250ZXh0KiBjb250ZXh0KQogICBp ZiAoIXRoaXMtPmdldF9mbl9hbmRfYXJnKCZmbiwgJmFyZykpCiAgICAgcmV0dXJuIGNvbnRleHQt PmJhY2tlbmQoKS0+ZXJyb3Jfc3RhdGVtZW50KCk7CiAKLSAgRXhwcmVzc2lvbiogY2FsbCA9IFJ1 bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpHTywgdGhpcy0+bG9jYXRpb24oKSwgMiwKKyAgR29n byogZ29nbyA9IGNvbnRleHQtPmdvZ28oKTsKKyAgRXhwcmVzc2lvbiogY2FsbCA9IFJ1bnRpbWU6 Om1ha2VfY2FsbChnb2dvLCBSdW50aW1lOjpHTywgdGhpcy0+bG9jYXRpb24oKSwgMiwKIAkJCQkJ Zm4sIGFyZyk7CiAgIEJleHByZXNzaW9uKiBiY2FsbCA9IGNhbGwtPmdldF9iYWNrZW5kKGNvbnRl eHQpOwogICBCZnVuY3Rpb24qIGJmdW5jdGlvbiA9IGNvbnRleHQtPmZ1bmN0aW9uKCktPmZ1bmNf dmFsdWUoKS0+Z2V0X2RlY2woKTsKQEAgLTMwMDksNiArMzAxNyw3IEBAIERlZmVyX3N0YXRlbWVu dDo6ZG9fZ2V0X2JhY2tlbmQoVHJhbnNsYXRlX2NvbnRleHQqIGNvbnRleHQpCiAgIGlmICghdGhp cy0+Z2V0X2ZuX2FuZF9hcmcoJmZuLCAmYXJnKSkKICAgICByZXR1cm4gY29udGV4dC0+YmFja2Vu ZCgpLT5lcnJvcl9zdGF0ZW1lbnQoKTsKIAorICBHb2dvKiBnb2dvID0gY29udGV4dC0+Z29nbygp OwogICBMb2NhdGlvbiBsb2MgPSB0aGlzLT5sb2NhdGlvbigpOwogICBFeHByZXNzaW9uKiBkcyA9 IGNvbnRleHQtPmZ1bmN0aW9uKCktPmZ1bmNfdmFsdWUoKS0+ZGVmZXJfc3RhY2sobG9jKTsKIApA QCAtMzAyMiwxMSArMzAzMSwxMSBAQCBEZWZlcl9zdGF0ZW1lbnQ6OmRvX2dldF9iYWNrZW5kKFRy YW5zbGF0ZV9jb250ZXh0KiBjb250ZXh0KQogICAgICAgRXhwcmVzc2lvbiogZGVmZXIgPSBFeHBy ZXNzaW9uOjptYWtlX2FsbG9jYXRpb24oZGVmZXJfdHlwZSwgbG9jKTsKICAgICAgIGRlZmVyLT5h bGxvY2F0aW9uX2V4cHJlc3Npb24oKS0+c2V0X2FsbG9jYXRlX29uX3N0YWNrKCk7CiAgICAgICBk ZWZlci0+YWxsb2NhdGlvbl9leHByZXNzaW9uKCktPnNldF9ub196ZXJvKCk7Ci0gICAgICBjYWxs ID0gUnVudGltZTo6bWFrZV9jYWxsKFJ1bnRpbWU6OkRFRkVSUFJPQ1NUQUNLLCBsb2MsIDQsCisg ICAgICBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OkRFRkVSUFJPQ1NU QUNLLCBsb2MsIDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmVyLCBkcywg Zm4sIGFyZyk7CiAgICAgfQogICBlbHNlCi0gICAgY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChS dW50aW1lOjpERUZFUlBST0MsIGxvYywgMywKKyAgICBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxs KGdvZ28sIFJ1bnRpbWU6OkRFRkVSUFJPQywgbG9jLCAzLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZHMsIGZuLCBhcmcpOwogICBCZXhwcmVzc2lvbiogYmNhbGwgPSBjYWxsLT5nZXRf YmFja2VuZChjb250ZXh0KTsKICAgQmZ1bmN0aW9uKiBiZnVuY3Rpb24gPSBjb250ZXh0LT5mdW5j dGlvbigpLT5mdW5jX3ZhbHVlKCktPmdldF9kZWNsKCk7CkBAIC00NjMyLDEyICs0NjQxLDEyIEBA IFR5cGVfY2FzZV9jbGF1c2VzOjpUeXBlX2Nhc2VfY2xhdXNlOjpsb3dlcihHb2dvKiBnb2dvLAog CQkJCSAgICAgICAgICAgRXhwcmVzc2lvbjo6bWFrZV90eXBlX2Rlc2NyaXB0b3IodHlwZSwgbG9j KSwKIAkJCQkgICAgICAgICAgIGxvYyk7CiAJICBlbHNlCi0JICAgIGNvbmQgPSBSdW50aW1lOjpt YWtlX2NhbGwoUnVudGltZTo6RVFUWVBFLCBsb2MsIDIsCisJICAgIGNvbmQgPSBSdW50aW1lOjpt YWtlX2NhbGwoZ29nbywgUnVudGltZTo6RVFUWVBFLCBsb2MsIDIsCiAJCQkJICAgICAgRXhwcmVz c2lvbjo6bWFrZV90eXBlX2Rlc2NyaXB0b3IodHlwZSwgbG9jKSwKIAkJCQkgICAgICByZWYpOwog CX0KICAgICAgIGVsc2UKLQljb25kID0gUnVudGltZTo6bWFrZV9jYWxsKFJ1bnRpbWU6OklGQUNF VDJJUCwgbG9jLCAyLAorCWNvbmQgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGltZTo6 SUZBQ0VUMklQLCBsb2MsIDIsCiAJCQkJICBFeHByZXNzaW9uOjptYWtlX3R5cGVfZGVzY3JpcHRv cih0eXBlLCBsb2MpLAogCQkJCSAgcmVmKTsKIApAQCAtNTA3Niw2ICs1MDg1LDcgQEAgU2VuZF9z dGF0ZW1lbnQ6OmRvX2FkZF9jb252ZXJzaW9ucygpCiBCc3RhdGVtZW50KgogU2VuZF9zdGF0ZW1l bnQ6OmRvX2dldF9iYWNrZW5kKFRyYW5zbGF0ZV9jb250ZXh0KiBjb250ZXh0KQogeworICBHb2dv KiBnb2dvID0gY29udGV4dC0+Z29nbygpOwogICBMb2NhdGlvbiBsb2MgPSB0aGlzLT5sb2NhdGlv bigpOwogCiAgIENoYW5uZWxfdHlwZSogY2hhbm5lbF90eXBlID0gdGhpcy0+Y2hhbm5lbF8tPnR5 cGUoKS0+Y2hhbm5lbF90eXBlKCk7CkBAIC01MTQ3LDcgKzUxNTcsNyBAQCBTZW5kX3N0YXRlbWVu dDo6ZG9fZ2V0X2JhY2tlbmQoVHJhbnNsYXRlX2NvbnRleHQqIGNvbnRleHQpCiAgICAgICBidGVt cCA9IHRlbXAtPmdldF9iYWNrZW5kKGNvbnRleHQpOwogICAgIH0KIAotICBFeHByZXNzaW9uKiBj YWxsID0gUnVudGltZTo6bWFrZV9jYWxsKFJ1bnRpbWU6OkNIQU5TRU5ELCBsb2MsIDIsCisgIEV4 cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVudGltZTo6Q0hBTlNF TkQsIGxvYywgMiwKIAkJCQkJdGhpcy0+Y2hhbm5lbF8sIHZhbCk7CiAKICAgY29udGV4dC0+Z29n bygpLT5sb3dlcl9leHByZXNzaW9uKGNvbnRleHQtPmZ1bmN0aW9uKCksIE5VTEwsICZjYWxsKTsK QEAgLTU2NjAsNyArNTY3MCw5IEBAIFNlbGVjdF9jbGF1c2VzOjpnZXRfYmFja2VuZChUcmFuc2xh dGVfY29udGV4dCogY29udGV4dCwKICAgaWYgKGNvdW50ID09IDApCiAgICAgcmV0dXJuIGNvbnRl eHQtPmJhY2tlbmQoKS0+ZXhwcmVzc2lvbl9zdGF0ZW1lbnQoYmZ1bmN0aW9uLCBiaW5kZXgpOwog Ci0gIEV4cHJlc3Npb24qIGNyYXNoID0gUnVudGltZTo6bWFrZV9jYWxsKFJ1bnRpbWU6OlVOUkVB Q0hBQkxFLCBsb2NhdGlvbiwgMCk7CisgIEdvZ28qIGdvZ28gPSBjb250ZXh0LT5nb2dvKCk7Cisg IEV4cHJlc3Npb24qIGNyYXNoID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRpbWU6OlVO UkVBQ0hBQkxFLAorCQkJCQkgbG9jYXRpb24sIDApOwogICBCZXhwcmVzc2lvbiogYmNyYXNoID0g Y3Jhc2gtPmdldF9iYWNrZW5kKGNvbnRleHQpOwogICBjbGF1c2VzW2NvdW50XSA9IGNvbnRleHQt PmJhY2tlbmQoKS0+ZXhwcmVzc2lvbl9zdGF0ZW1lbnQoYmZ1bmN0aW9uLCBiY3Jhc2gpOwogCkBA IC01NzI2LDcgKzU3MzgsNyBAQCBTZWxlY3Rfc3RhdGVtZW50Ojpkb19sb3dlcihHb2dvKiBnb2dv LCBOYW1lZF9vYmplY3QqIGZ1bmN0aW9uLAogICAvLyBaZXJvLWNhc2Ugc2VsZWN0LiAgSnVzdCBi bG9jayB0aGUgZXhlY3V0aW9uLgogICBpZiAobmNhc2VzID09IDApCiAgICAgewotICAgICAgRXhw cmVzc2lvbiogY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpCTE9DSywgbG9jLCAw KTsKKyAgICAgIEV4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVu dGltZTo6QkxPQ0ssIGxvYywgMCk7CiAgICAgICBTdGF0ZW1lbnQgKnMgPSBTdGF0ZW1lbnQ6Om1h a2Vfc3RhdGVtZW50KGNhbGwsIGZhbHNlKTsKICAgICAgIGItPmFkZF9zdGF0ZW1lbnQocyk7CiAg ICAgICB0aGlzLT5pc19sb3dlcmVkXyA9IHRydWU7CkBAIC01NzM1LDEyICs1NzQ3LDEyIEBAIFNl bGVjdF9zdGF0ZW1lbnQ6OmRvX2xvd2VyKEdvZ28qIGdvZ28sIE5hbWVkX29iamVjdCogZnVuY3Rp b24sCiAKICAgLy8gT25lLWNhc2Ugc2VsZWN0LiAgSXQgaXMgbW9zdGx5IGp1c3QgdG8gcnVuIHRo ZSBjYXNlLgogICBpZiAobmNhc2VzID09IDEpCi0gICAgcmV0dXJuIHRoaXMtPmxvd2VyX29uZV9j YXNlKGIpOworICAgIHJldHVybiB0aGlzLT5sb3dlcl9vbmVfY2FzZShnb2dvLCBiKTsKIAogICAv LyBUd28tY2FzZSBzZWxlY3Qgd2l0aCBvbmUgZGVmYXVsdCBjYXNlLiAgSXQgaXMgYSBub24tYmxv Y2tpbmcKICAgLy8gc2VuZC9yZWNlaXZlLgogICBpZiAobmNhc2VzID09IDIgJiYgaGFzX2RlZmF1 bHQpCi0gICAgcmV0dXJuIHRoaXMtPmxvd2VyX3R3b19jYXNlKGIpOworICAgIHJldHVybiB0aGlz LT5sb3dlcl90d29fY2FzZShnb2dvLCBiKTsKIAogICAvLyBXZSBkb24ndCBhbGxvY2F0ZSBhbiBl bnRyeSBpbiBzY2FzZXMgZm9yIHRoZSBkZWZhdWx0IGNhc2UuCiAgIGlmIChoYXNfZGVmYXVsdCkK QEAgLTU4MDMsNyArNTgxNSw3IEBAIFNlbGVjdF9zdGF0ZW1lbnQ6OmRvX2xvd2VyKEdvZ28qIGdv Z28sIE5hbWVkX29iamVjdCogZnVuY3Rpb24sCiAJCQkJCQkJICAgIGxvYyk7CiAgIEV4cHJlc3Np b24qIGJsb2NrX2V4cHIgPSBFeHByZXNzaW9uOjptYWtlX2Jvb2xlYW4oIWhhc19kZWZhdWx0LCBs b2MpOwogCi0gIENhbGxfZXhwcmVzc2lvbiogY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50 aW1lOjpTRUxFQ1RHTywgbG9jLCA1LAorICBDYWxsX2V4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1l OjptYWtlX2NhbGwoZ29nbywgUnVudGltZTo6U0VMRUNUR08sIGxvYywgNSwKIAkJCQkJICAgICBz Y2FzZXNfcmVmLCBvcmRlcl9yZWYsCiAJCQkJCSAgICAgc2VuZF9jb3VudF9leHByLCByZWN2X2Nv dW50X2V4cHIsCiAJCQkJCSAgICAgYmxvY2tfZXhwcik7CkBAIC01ODI3LDcgKzU4MzksNyBAQCBT ZWxlY3Rfc3RhdGVtZW50Ojpkb19sb3dlcihHb2dvKiBnb2dvLCBOYW1lZF9vYmplY3QqIGZ1bmN0 aW9uLAogLy8gTG93ZXIgYSBvbmUtY2FzZSBzZWxlY3Qgc3RhdGVtZW50LgogCiBTdGF0ZW1lbnQq Ci1TZWxlY3Rfc3RhdGVtZW50Ojpsb3dlcl9vbmVfY2FzZShCbG9jayogYikKK1NlbGVjdF9zdGF0 ZW1lbnQ6Omxvd2VyX29uZV9jYXNlKEdvZ28qIGdvZ28sIEJsb2NrKiBiKQogewogICBTZWxlY3Rf Y2xhdXNlczo6U2VsZWN0X2NsYXVzZSYgc2Nhc2UgPSB0aGlzLT5jbGF1c2VzXy0+YXQoMCk7CiAg IExvY2F0aW9uIGxvYyA9IHRoaXMtPmxvY2F0aW9uKCk7CkBAIC01ODQzLDcgKzU4NTUsNyBAQCBT ZWxlY3Rfc3RhdGVtZW50Ojpsb3dlcl9vbmVfY2FzZShCbG9jayogYikKICAgICAgIEV4cHJlc3Np b24qIG5pbCA9IEV4cHJlc3Npb246Om1ha2VfbmlsKGxvYyk7CiAgICAgICBFeHByZXNzaW9uKiBj b25kID0gRXhwcmVzc2lvbjo6bWFrZV9iaW5hcnkoT1BFUkFUT1JfRVFFUSwgY2hhbnJlZiwgbmls LCBsb2MpOwogICAgICAgQmxvY2sqIGJuaWwgPSBuZXcgQmxvY2soYiwgbG9jKTsKLSAgICAgIEV4 cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVudGltZTo6QkxPQ0ssIGxvYywg MCk7CisgICAgICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1 bnRpbWU6OkJMT0NLLCBsb2MsIDApOwogICAgICAgU3RhdGVtZW50KiBzID0gU3RhdGVtZW50Ojpt YWtlX3N0YXRlbWVudChjYWxsLCBmYWxzZSk7CiAgICAgICBibmlsLT5hZGRfc3RhdGVtZW50KHMp OwogICAgICAgU3RhdGVtZW50KiBpZnMgPSBTdGF0ZW1lbnQ6Om1ha2VfaWZfc3RhdGVtZW50KGNv bmQsIGJuaWwsIE5VTEwsIGxvYyk7CkBAIC01OTM1LDcgKzU5NDcsNyBAQCBTZWxlY3Rfc3RhdGVt ZW50Ojpsb3dlcl9vbmVfY2FzZShCbG9jayogYikKIC8vIExvd2VyIGEgdHdvLWNhc2Ugc2VsZWN0 IHN0YXRlbWVudCB3aXRoIG9uZSBkZWZhdWx0IGNhc2UuCiAKIFN0YXRlbWVudCoKLVNlbGVjdF9z dGF0ZW1lbnQ6Omxvd2VyX3R3b19jYXNlKEJsb2NrKiBiKQorU2VsZWN0X3N0YXRlbWVudDo6bG93 ZXJfdHdvX2Nhc2UoR29nbyogZ29nbywgQmxvY2sqIGIpCiB7CiAgIFNlbGVjdF9jbGF1c2VzOjpT ZWxlY3RfY2xhdXNlJiBjaGFuY2FzZSA9CiAgICAgKHRoaXMtPmNsYXVzZXNfLT5hdCgwKS5pc19k ZWZhdWx0KCkKQEAgLTU5NjgsNyArNTk4MCw4IEBAIFNlbGVjdF9zdGF0ZW1lbnQ6Omxvd2VyX3R3 b19jYXNlKEJsb2NrKiBiKQogCiAgICAgICBFeHByZXNzaW9uKiByZWYgPSBFeHByZXNzaW9uOjpt YWtlX3RlbXBvcmFyeV9yZWZlcmVuY2UodHMsIGxvYyk7CiAgICAgICBFeHByZXNzaW9uKiBhZGRy ID0gRXhwcmVzc2lvbjo6bWFrZV91bmFyeShPUEVSQVRPUl9BTkQsIHJlZiwgbG9jKTsKLSAgICAg IGNvbmQgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVudGltZTo6U0VMRUNUTkJTRU5ELCBsb2MsIDIs IGNoYW5yZWYsIGFkZHIpOworICAgICAgY29uZCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChnb2dvLCBS dW50aW1lOjpTRUxFQ1ROQlNFTkQsIGxvYywgMiwKKwkJCQljaGFucmVmLCBhZGRyKTsKICAgICAg IGJjaGFuID0gY2hhbmNhc2Uuc3RhdGVtZW50cygpOwogICAgIH0KICAgZWxzZQpAQCAtNTk4MCw4 ICs1OTkzLDggQEAgU2VsZWN0X3N0YXRlbWVudDo6bG93ZXJfdHdvX2Nhc2UoQmxvY2sqIGIpCiAg ICAgICBFeHByZXNzaW9uKiBhZGRyID0gRXhwcmVzc2lvbjo6bWFrZV91bmFyeShPUEVSQVRPUl9B TkQsIHJlZiwgbG9jKTsKIAogICAgICAgLy8gc2VsZWN0ZWQsIG9rID0gc2VsZWN0bmJyZWN2KCZs aHMsIGNoYW4pCi0gICAgICBDYWxsX2V4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2Nh bGwoUnVudGltZTo6U0VMRUNUTkJSRUNWLCBsb2MsIDIsCi0JCQkJCQkgYWRkciwgY2hhbnJlZik7 CisgICAgICBDYWxsX2V4cHJlc3Npb24qIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywg UnVudGltZTo6U0VMRUNUTkJSRUNWLAorCQkJCQkJIGxvYywgMiwgYWRkciwgY2hhbnJlZik7CiAK ICAgICAgIFRlbXBvcmFyeV9zdGF0ZW1lbnQqIHNlbGVjdGVkX3RlbXAgPQogCVN0YXRlbWVudDo6 bWFrZV90ZW1wb3JhcnkoVHlwZTo6bWFrZV9ib29sZWFuX3R5cGUoKSwKQEAgLTYzODksNyArNjQw Miw4IEBAIEZvcl9yYW5nZV9zdGF0ZW1lbnQ6OmRvX2xvd2VyKEdvZ28qIGdvZ28sIE5hbWVkX29i amVjdCosIEJsb2NrKiBlbmNsb3NpbmcsCiAgIC8vIGNhbGxzLgogICBpZiAocmFuZ2VfdHlwZS0+ bWFwX3R5cGUoKSAhPSBOVUxMKQogICAgIHsKLSAgICAgIFN0YXRlbWVudCogY2xlYXIgPSB0aGlz LT5sb3dlcl9tYXBfcmFuZ2VfY2xlYXIocmFuZ2VfdHlwZSwKKyAgICAgIFN0YXRlbWVudCogY2xl YXIgPSB0aGlzLT5sb3dlcl9tYXBfcmFuZ2VfY2xlYXIoZ29nbywKKwkJCQkJCSAgICAgcmFuZ2Vf dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZW5jbG9zaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvcmlnX3JhbmdlX2V4cHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX29iamVjdCwKQEAgLTY4NTYsNyArNjg3MCw3 IEBAIEZvcl9yYW5nZV9zdGF0ZW1lbnQ6Omxvd2VyX3JhbmdlX3N0cmluZyhHb2dvKiBnb2dvLAog CiAgIHJlZiA9IHRoaXMtPm1ha2VfcmFuZ2VfcmVmKHJhbmdlX29iamVjdCwgcmFuZ2VfdGVtcCwg bG9jKTsKICAgaW5kZXhfcmVmID0gRXhwcmVzc2lvbjo6bWFrZV90ZW1wb3JhcnlfcmVmZXJlbmNl KGluZGV4X3RlbXAsIGxvYyk7Ci0gIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVudGltZTo6 REVDT0RFUlVORSwgbG9jLCAyLCByZWYsIGluZGV4X3JlZik7CisgIGNhbGwgPSBSdW50aW1lOjpt YWtlX2NhbGwoZ29nbywgUnVudGltZTo6REVDT0RFUlVORSwgbG9jLCAyLCByZWYsIGluZGV4X3Jl Zik7CiAKICAgdmFsdWVfcmVmID0gRXhwcmVzc2lvbjo6bWFrZV90ZW1wb3JhcnlfcmVmZXJlbmNl KHZhbHVlX3RlbXAsIGxvYyk7CiAgIHZhbHVlX3JlZi0+c2V0X2lzX2x2YWx1ZSgpOwpAQCAtNjkz NSw3ICs2OTQ5LDcgQEAgRm9yX3JhbmdlX3N0YXRlbWVudDo6bG93ZXJfcmFuZ2VfbWFwKEdvZ28q IGdvZ28sCiAgIEV4cHJlc3Npb24qIHAyID0gdGhpcy0+bWFrZV9yYW5nZV9yZWYocmFuZ2Vfb2Jq ZWN0LCByYW5nZV90ZW1wLCBsb2MpOwogICBFeHByZXNzaW9uKiByZWYgPSBFeHByZXNzaW9uOjpt YWtlX3RlbXBvcmFyeV9yZWZlcmVuY2UoaGl0ZXIsIGxvYyk7CiAgIEV4cHJlc3Npb24qIHAzID0g RXhwcmVzc2lvbjo6bWFrZV91bmFyeShPUEVSQVRPUl9BTkQsIHJlZiwgbG9jKTsKLSAgRXhwcmVz c2lvbiogY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpNQVBJVEVSSU5JVCwgbG9j LCAzLAorICBFeHByZXNzaW9uKiBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKGdvZ28sIFJ1bnRp bWU6Ok1BUElURVJJTklULCBsb2MsIDMsCiAJCQkJCXAxLCBwMiwgcDMpOwogICBpbml0LT5hZGRf c3RhdGVtZW50KFN0YXRlbWVudDo6bWFrZV9zdGF0ZW1lbnQoY2FsbCwgdHJ1ZSkpOwogCkBAIC02 OTg1LDcgKzY5OTksNyBAQCBGb3JfcmFuZ2Vfc3RhdGVtZW50Ojpsb3dlcl9yYW5nZV9tYXAoR29n byogZ29nbywKIAogICByZWYgPSBFeHByZXNzaW9uOjptYWtlX3RlbXBvcmFyeV9yZWZlcmVuY2Uo aGl0ZXIsIGxvYyk7CiAgIHAxID0gRXhwcmVzc2lvbjo6bWFrZV91bmFyeShPUEVSQVRPUl9BTkQs IHJlZiwgbG9jKTsKLSAgY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpNQVBJVEVS TkVYVCwgbG9jLCAxLCBwMSk7CisgIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoZ29nbywgUnVu dGltZTo6TUFQSVRFUk5FWFQsIGxvYywgMSwgcDEpOwogICBwb3N0LT5hZGRfc3RhdGVtZW50KFN0 YXRlbWVudDo6bWFrZV9zdGF0ZW1lbnQoY2FsbCwgdHJ1ZSkpOwogCiAgICpwcG9zdCA9IHBvc3Q7 CkBAIC03MDY5LDcgKzcwODMsOCBAQCBGb3JfcmFuZ2Vfc3RhdGVtZW50Ojpsb3dlcl9yYW5nZV9j aGFubmVsKEdvZ28qLAogLy8gY29udGFpbmluZyB0aGUgY2FsbC4gIFJldHVybiBOVUxMIG90aGVy d2lzZS4KIAogU3RhdGVtZW50KgotRm9yX3JhbmdlX3N0YXRlbWVudDo6bG93ZXJfbWFwX3Jhbmdl X2NsZWFyKFR5cGUqIG1hcF90eXBlLAorRm9yX3JhbmdlX3N0YXRlbWVudDo6bG93ZXJfbWFwX3Jh bmdlX2NsZWFyKEdvZ28qIGdvZ28sCisJCQkJCSAgIFR5cGUqIG1hcF90eXBlLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrKiBlbmNsb3NpbmcsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbiogb3JpZ19y YW5nZV9leHByLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5h bWVkX29iamVjdCogcmFuZ2Vfb2JqZWN0LApAQCAtNzEwOSw3ICs3MTI0LDcgQEAgRm9yX3Jhbmdl X3N0YXRlbWVudDo6bG93ZXJfbWFwX3JhbmdlX2NsZWFyKFR5cGUqIG1hcF90eXBlLAogICAvLyBF dmVyeXRoaW5nIG1hdGNoZXMuIFJld3JpdGUgdG8gbWFwY2xlYXIoVFlQRSwgTUFQKS4KICAgRXhw cmVzc2lvbiogZTEgPSBFeHByZXNzaW9uOjptYWtlX3R5cGVfZGVzY3JpcHRvcihtYXBfdHlwZSwg bG9jKTsKICAgRXhwcmVzc2lvbiogZTIgPSB0aGlzLT5tYWtlX3JhbmdlX3JlZihyYW5nZV9vYmpl Y3QsIHJhbmdlX3RlbXAsIGxvYyk7Ci0gIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVudGlt ZTo6TUFQQ0xFQVIsIGxvYywgMiwgZTEsIGUyKTsKKyAgY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2Fs bChnb2dvLCBSdW50aW1lOjpNQVBDTEVBUiwgbG9jLCAyLCBlMSwgZTIpOwogICByZXR1cm4gU3Rh dGVtZW50OjptYWtlX3N0YXRlbWVudChjYWxsLCB0cnVlKTsKIH0KIApAQCAtNzE5OCwxMiArNzIx MywxMyBAQCBGb3JfcmFuZ2Vfc3RhdGVtZW50Ojpsb3dlcl9hcnJheV9yYW5nZV9jbGVhcihHb2dv KiBnb2dvLAogICBFeHByZXNzaW9uKiBzel9hcmcgPSBFeHByZXNzaW9uOjptYWtlX3RlbXBvcmFy eV9yZWZlcmVuY2UodHMyLCBsb2MpOwogICBFeHByZXNzaW9uKiBjYWxsOwogICBpZiAoZWxlbV90 eXBlLT5oYXNfcG9pbnRlcigpKQotICAgIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwoUnVudGlt ZTo6TUVNQ0xSSEFTUFRSLCBsb2MsIDIsIHB0cl9hcmcsIHN6X2FyZyk7CisgICAgY2FsbCA9IFJ1 bnRpbWU6Om1ha2VfY2FsbChnb2dvLCBSdW50aW1lOjpNRU1DTFJIQVNQVFIsIGxvYywgMiwKKwkJ CSAgICAgIHB0cl9hcmcsIHN6X2FyZyk7CiAgIGVsc2UKICAgICB7CiAgICAgICBUeXBlKiBpbnQz Ml90eXBlID0gVHlwZTo6bG9va3VwX2ludGVnZXJfdHlwZSgiaW50MzIiKTsKICAgICAgIEV4cHJl c3Npb24qIHplcm8zMiA9IEV4cHJlc3Npb246Om1ha2VfaW50ZWdlcl91bCgwLCBpbnQzMl90eXBl LCBsb2MpOwotICAgICAgY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpCVUlMVElO X01FTVNFVCwgbG9jLCAzLCBwdHJfYXJnLAorICAgICAgY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2Fs bChnb2dvLCBSdW50aW1lOjpCVUlMVElOX01FTVNFVCwgbG9jLCAzLCBwdHJfYXJnLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvMzIsIHN6X2FyZyk7CiAgICAgfQogICBTdGF0 ZW1lbnQqIGNzMyA9IFN0YXRlbWVudDo6bWFrZV9zdGF0ZW1lbnQoY2FsbCwgdHJ1ZSk7CmRpZmYg LS1naXQgYS9nY2MvZ28vZ29mcm9udGVuZC9zdGF0ZW1lbnRzLmggYi9nY2MvZ28vZ29mcm9udGVu ZC9zdGF0ZW1lbnRzLmgKaW5kZXggNWZhYzAxYjkxNmUuLjlhOTIwYmE2OTcwIDEwMDY0NAotLS0g YS9nY2MvZ28vZ29mcm9udGVuZC9zdGF0ZW1lbnRzLmgKKysrIGIvZ2NjL2dvL2dvZnJvbnRlbmQv c3RhdGVtZW50cy5oCkBAIC0xMjg0LDExICsxMjg0LDExIEBAIGNsYXNzIFNlbGVjdF9zdGF0ZW1l bnQgOiBwdWJsaWMgU3RhdGVtZW50CiAgcHJpdmF0ZToKICAgLy8gTG93ZXIgYSBvbmUtY2FzZSBz ZWxlY3Qgc3RhdGVtZW50LgogICBTdGF0ZW1lbnQqCi0gIGxvd2VyX29uZV9jYXNlKEJsb2NrKik7 CisgIGxvd2VyX29uZV9jYXNlKEdvZ28qLCBCbG9jayopOwogCiAgIC8vIExvd2VyIGEgdHdvLWNh c2Ugc2VsZWN0IHN0YXRlbWVudCB3aXRoIG9uZSBkZWZ1YWx0IGNhc2UuCiAgIFN0YXRlbWVudCoK LSAgbG93ZXJfdHdvX2Nhc2UoQmxvY2sqKTsKKyAgbG93ZXJfdHdvX2Nhc2UoR29nbyosIEJsb2Nr Kik7CiAKICAgLy8gVGhlIHNlbGVjdCBjbGF1c2VzLgogICBTZWxlY3RfY2xhdXNlcyogY2xhdXNl c187CkBAIC0xNzYwLDcgKzE3NjAsNyBAQCBjbGFzcyBGb3JfcmFuZ2Vfc3RhdGVtZW50IDogcHVi bGljIFN0YXRlbWVudAogCQkgICAgICBCbG9jayoqKTsKIAogICBTdGF0ZW1lbnQqCi0gIGxvd2Vy X21hcF9yYW5nZV9jbGVhcihUeXBlKiwgQmxvY2sqLCBFeHByZXNzaW9uKiwgTmFtZWRfb2JqZWN0 KiwKKyAgbG93ZXJfbWFwX3JhbmdlX2NsZWFyKEdvZ28qLCBUeXBlKiwgQmxvY2sqLCBFeHByZXNz aW9uKiwgTmFtZWRfb2JqZWN0KiwKICAgICAgICAgICAgICAgICAgICAgICAgIFRlbXBvcmFyeV9z dGF0ZW1lbnQqLCBMb2NhdGlvbik7CiAKICAgU3RhdGVtZW50KgpkaWZmIC0tZ2l0IGEvZ2NjL2dv L2dvZnJvbnRlbmQvd2IuY2MgYi9nY2MvZ28vZ29mcm9udGVuZC93Yi5jYwppbmRleCBlMDM5YzY2 ODg0Ny4uMDYyMTAxNDMyYjkgMTAwNjQ0Ci0tLSBhL2djYy9nby9nb2Zyb250ZW5kL3diLmNjCisr KyBiL2djYy9nby9nb2Zyb250ZW5kL3diLmNjCkBAIC05MjMsNyArOTIzLDggQEAgR29nbzo6YXNz aWduX3dpdGhfd3JpdGVfYmFycmllcihGdW5jdGlvbiogZnVuY3Rpb24sIEJsb2NrKiBlbmNsb3Np bmcsCiAgICAgICB7CiAJLy8gVGhlc2UgdHlwZXMgYXJlIGFsbCByZXByZXNlbnRlZCBieSBhIHNp bmdsZSBwb2ludGVyLgogCXJocyA9IEV4cHJlc3Npb246Om1ha2VfdW5zYWZlX2Nhc3QodWludHB0 cl90eXBlLCByaHMsIGxvYyk7Ci0JY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpH Q1dSSVRFQkFSUklFUiwgbG9jLCAyLCBsaHMsIHJocyk7CisJY2FsbCA9IFJ1bnRpbWU6Om1ha2Vf Y2FsbCh0aGlzLCBSdW50aW1lOjpHQ1dSSVRFQkFSUklFUiwgbG9jLCAyLAorCQkJCSAgbGhzLCBy aHMpOwogICAgICAgfQogICAgICAgYnJlYWs7CiAKQEAgLTk1Myw3ICs5NTQsOCBAQCBHb2dvOjph c3NpZ25fd2l0aF93cml0ZV9iYXJyaWVyKEZ1bmN0aW9uKiBmdW5jdGlvbiwgQmxvY2sqIGVuY2xv c2luZywKICAgICAgICAgYXNzaWduID0gU3RhdGVtZW50OjptYWtlX2Fzc2lnbm1lbnQobGhzLCBy aHMsIGxvYyk7CiAgICAgICAgIGxocyA9IEV4cHJlc3Npb246Om1ha2VfdW5hcnkoT1BFUkFUT1Jf QU5ELCBsaHMsIGxvYyk7CiAgICAgICAgIHJocyA9IEV4cHJlc3Npb246Om1ha2VfdW5zYWZlX2Nh c3QodWludHB0cl90eXBlLCByaHMsIGxvYyk7Ci0gICAgICAgIGNhbGwgPSBSdW50aW1lOjptYWtl X2NhbGwoUnVudGltZTo6R0NXUklURUJBUlJJRVIsIGxvYywgMiwgbGhzLCByaHMpOworICAgICAg ICBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKHRoaXMsIFJ1bnRpbWU6OkdDV1JJVEVCQVJSSUVS LCBsb2MsIDIsCisJCQkJICBsaHMsIHJocyk7CiAgICAgICB9CiAgICAgICBicmVhazsKIApAQCAt OTkwLDcgKzk5Miw4IEBAIEdvZ286OmFzc2lnbl93aXRoX3dyaXRlX2JhcnJpZXIoRnVuY3Rpb24q IGZ1bmN0aW9uLCBCbG9jayogZW5jbG9zaW5nLAogICAgICAgICBhc3NpZ24gPSBTdGF0ZW1lbnQ6 Om1ha2VfYXNzaWdubWVudChsaHMsIHJocywgbG9jKTsKICAgICAgICAgbGhzID0gRXhwcmVzc2lv bjo6bWFrZV91bmFyeShPUEVSQVRPUl9BTkQsIGxocywgbG9jKTsKICAgICAgICAgcmhzID0gRXhw cmVzc2lvbjo6bWFrZV91bnNhZmVfY2FzdCh1aW50cHRyX3R5cGUsIHJocywgbG9jKTsKLSAgICAg ICAgY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbChSdW50aW1lOjpHQ1dSSVRFQkFSUklFUiwgbG9j LCAyLCBsaHMsIHJocyk7CisgICAgICAgIGNhbGwgPSBSdW50aW1lOjptYWtlX2NhbGwodGhpcywg UnVudGltZTo6R0NXUklURUJBUlJJRVIsIGxvYywgMiwKKwkJCQkgIGxocywgcmhzKTsKICAgICAg IH0KICAgICAgIGJyZWFrOwogCkBAIC0xMDMzLDcgKzEwMzYsOCBAQCBHb2dvOjphc3NpZ25fd2l0 aF93cml0ZV9iYXJyaWVyKEZ1bmN0aW9uKiBmdW5jdGlvbiwgQmxvY2sqIGVuY2xvc2luZywKICAg ICAgICAgICBhc3NpZ24gPSBTdGF0ZW1lbnQ6Om1ha2VfYXNzaWdubWVudChsaHMsIHJocywgbG9j KTsKICAgICAgICAgICBsaHMgPSBFeHByZXNzaW9uOjptYWtlX3VuYXJ5KE9QRVJBVE9SX0FORCwg bGhzLCBsb2MpOwogICAgICAgICAgIHJocyA9IEV4cHJlc3Npb246Om1ha2VfdW5zYWZlX2Nhc3Qo dWludHB0cl90eXBlLCByaHMsIGxvYyk7Ci0gICAgICAgICAgY2FsbCA9IFJ1bnRpbWU6Om1ha2Vf Y2FsbChSdW50aW1lOjpHQ1dSSVRFQkFSUklFUiwgbG9jLCAyLCBsaHMsIHJocyk7CisgICAgICAg ICAgY2FsbCA9IFJ1bnRpbWU6Om1ha2VfY2FsbCh0aGlzLCBSdW50aW1lOjpHQ1dSSVRFQkFSUklF UiwgbG9jLCAyLAorCQkJCSAgICBsaHMsIHJocyk7CiAgICAgICAgICAgYnJlYWs7CiAgICAgICAg IH0KICAgICAgIC8vIGZhbGx0aHJvdWdoCkBAIC0xMDQzLDE0ICsxMDQ3LDE1IEBAIEdvZ286OmFz c2lnbl93aXRoX3dyaXRlX2JhcnJpZXIoRnVuY3Rpb24qIGZ1bmN0aW9uLCBCbG9jayogZW5jbG9z aW5nLAogICAgICAgICB7CiAgICAgICAgICAgcmhzID0gRXhwcmVzc2lvbjo6dW5wYWNrX2RpcmVj dF9pZmFjZShyaHMsIGxvYyk7CiAgICAgICAgICAgcmhzID0gRXhwcmVzc2lvbjo6bWFrZV91bnNh ZmVfY2FzdCh1aW50cHRyX3R5cGUsIHJocywgbG9jKTsKLSAgICAgICAgICBjYWxsID0gUnVudGlt ZTo6bWFrZV9jYWxsKFJ1bnRpbWU6OkdDV1JJVEVCQVJSSUVSLCBsb2MsIDIsIGxocywgcmhzKTsK KyAgICAgICAgICBjYWxsID0gUnVudGltZTo6bWFrZV9jYWxsKHRoaXMsIFJ1bnRpbWU6OkdDV1JJ VEVCQVJSSUVSLCBsb2MsIDIsCisJCQkJICAgIGxocywgcmhzKTsKICAgICAgICAgfQogICAgICAg ZWxzZQogICAgICAgICB7CiAgICAgICAgICAgLy8gVE9ETzogc3BsaXQgYXNzaWdubWVudHMgZm9y IHNtYWxsIHN0cnVjdC9hcnJheT8KICAgICAgICAgICByaHMgPSBFeHByZXNzaW9uOjptYWtlX3Vu YXJ5KE9QRVJBVE9SX0FORCwgcmhzLCBsb2MpOwogICAgICAgICAgIHJocy0+dW5hcnlfZXhwcmVz c2lvbigpLT5zZXRfZG9lc19ub3RfZXNjYXBlKCk7Ci0gICAgICAgICAgY2FsbCA9IFJ1bnRpbWU6 Om1ha2VfY2FsbChSdW50aW1lOjpUWVBFRE1FTU1PVkUsIGxvYywgMywKKyAgICAgICAgICBjYWxs ID0gUnVudGltZTo6bWFrZV9jYWxsKHRoaXMsIFJ1bnRpbWU6OlRZUEVETUVNTU9WRSwgbG9jLCAz LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXhwcmVzc2lvbjo6bWFrZV90 eXBlX2Rlc2NyaXB0b3IodHlwZSwgbG9jKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxocywgcmhzKTsKICAgICAgICAgfQo= --000000000000b1beba060868a113--