From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ed1-x52c.google.com (mail-ed1-x52c.google.com [IPv6:2a00:1450:4864:20::52c]) by sourceware.org (Postfix) with ESMTPS id E3087385842E; Sun, 13 Nov 2022 11:01:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org E3087385842E Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ed1-x52c.google.com with SMTP id e13so4451113edj.7; Sun, 13 Nov 2022 03:01:25 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=12WPpFXqfewc+/ASQb7Pip+KIiPLF+tawdeAZ1bHamQ=; b=GT5RpR12E7f3Cufm0l76BLobuhgpqT1LK+R0d6ARTBYuooVmFj5tnCnhbfYu57YtMP jXPA45qbJeEipD8HhJ4zGaM/i3+oDe77xZmGZG9pyR2VmIDhM4L4G2uvR6wJPtr4eRuk 6XbLYdgcsnH9VCIu9uXWw+2joii5xtKnPiLcwURobhyy7XiuUtZisoio1A2zMDMo7oHW Y1fVskn7dFXsB3kYjUoVapmHF5P85g+Nv2Gs8mH5IIrKcoLJgKSuPeAPsQylV1rqC5C+ rfN5kYTkhtKfQYe9OmO8rrdtyXnRH+14MZzwRrgZSXc+LETxmRp0F+5zHbJf3RDeLm05 VTyA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=12WPpFXqfewc+/ASQb7Pip+KIiPLF+tawdeAZ1bHamQ=; b=2nczVj8YI9kYbolXnxsrj6OJkIJ5dMVswD66Nbwiq13TtGUy7/oVe+1m3wHPJxg/qX Aaw1bEfWfuHgENbr+VuEU8QtIffxyc1JeQfmYjfBdrYIMIcIlJGPGlAb5q9zjxLdufki CurHjsfxUwvH3BlRSTcKCV6yZM8N+GzVW5V5fPfY70WkrcWFllh9PCPSnyUSdoq63CaF BTK2N6siG4JOXB/7bQL/+qZLFvXvegmq5VrITQ8vtoy1Tas+HHhNtsmm5Vj8Mi2paLWp opQdJkihe39v6XCoGIpeMqjKX23nHWoCgz0zF7RmuE4yaTGVFtaMSzPBpJbbgcrFNFQm vTPg== X-Gm-Message-State: ANoB5plq92DR8z0Q1Db/s6hTzN8xtWQk+DZAc5OdGWnpA0y5sh9xbjs1 VG9hLk3uIlqOi5A6NkGKdmgI8uoQrBm86y4cGGk= X-Google-Smtp-Source: AA0mqf5XcWqpzvZLOMZmx7GX1/mr/5PmXLmrImcIWZQ45vRsdIEe5Yto4pT2cgesI6oQiZNrTVnKUm1NwGjI7fv0LFI= X-Received: by 2002:a50:9557:0:b0:45c:f13b:4b96 with SMTP id v23-20020a509557000000b0045cf13b4b96mr7753038eda.129.1668337284127; Sun, 13 Nov 2022 03:01:24 -0800 (PST) MIME-Version: 1.0 References: <20221113011640.920781-1-jwakely@redhat.com> In-Reply-To: <20221113011640.920781-1-jwakely@redhat.com> From: Jonathan Wakely Date: Sun, 13 Nov 2022 11:01:12 +0000 Message-ID: Subject: Re: [committed] libstdc++: Add C++20 clocks To: Jonathan Wakely Cc: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org Content-Type: multipart/mixed; boundary="0000000000002fd44d05ed580bcf" X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,KAM_SHORT,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: --0000000000002fd44d05ed580bcf Content-Type: text/plain; charset="UTF-8" On Sun, 13 Nov 2022 at 01:17, Jonathan Wakely via Libstdc++ wrote: > > Tested x86_64-linux and powerpc64le-linux. Pushed to trunk. > > -- >8 -- > > Also add the basic types for timezones, without the non-inline > definitions needed to actually use them. This is the patch for the rest of the time zone support. Not pushed yet. --0000000000002fd44d05ed580bcf 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_laf8xf4x0 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9jb25maWcvYWJpL3ByZS9nbnUudmVyIGIvbGlic3Rk YysrLXYzL2NvbmZpZy9hYmkvcHJlL2dudS52ZXIKaW5kZXggMjI1ZDZkYzQ4MmIuLjhlNWQwYmYw ODFmIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvY29uZmlnL2FiaS9wcmUvZ251LnZlcgorKysg Yi9saWJzdGRjKystdjMvY29uZmlnL2FiaS9wcmUvZ251LnZlcgpAQCAtMjQ4NSw2ICsyNDg1LDE0 IEBAIEdMSUJDWFhfMy40LjMxIHsKIAogICAgIF9aU3QxNV9fdHJ5X3VzZV9mYWNldCo7CiAKKyAg ICBfWk5TdDZjaHJvbm8xMXJlbG9hZF90emRiRXY7CisgICAgX1pOU3Q2Y2hyb25vOGdldF90emRi RXY7CisgICAgX1pOU3Q2Y2hyb25vMTNnZXRfdHpkYl9saXN0RXY7CisgICAgX1pOU3Q2Y2hyb25v MTRyZW1vdGVfdmVyc2lvbkI1Y3h4MTFFdjsKKyAgICBfWk5TdDZjaHJvbm8xNHJlbW90ZV92ZXJz aW9uRXY7CisgICAgX1pOS1N0NmNocm9ubzR0emRiMTJjdXJyZW50X3pvbmVFdjsKKyAgICBfWk5L U3Q2Y2hyb25vNHR6ZGIxMWxvY2F0ZV96b25lRVN0MTdiYXNpY19zdHJpbmdfdmlld0ljU3QxMWNo YXJfdHJhaXRzSWNFRTsKKwogfSBHTElCQ1hYXzMuNC4zMDsKIAogIyBTeW1ib2xzIGluIHRoZSBz dXBwb3J0IGxpYnJhcnkgKGxpYnN1cGMrKykgaGF2ZSB0aGVpciBvd24gdGFnLgpkaWZmIC0tZ2l0 IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvTWFrZWZpbGUuYW0gYi9saWJzdGRjKystdjMvaW5jbHVk ZS9NYWtlZmlsZS5hbQppbmRleCAyN2RmYTJiZTJmMy4uMDhjZTlhYmJjYmMgMTAwNjQ0Ci0tLSBh L2xpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxlLmFtCisrKyBiL2xpYnN0ZGMrKy12My9pbmNs dWRlL01ha2VmaWxlLmFtCkBAIC0xNzUsNiArMTc1LDcgQEAgYml0c19oZWFkZXJzID0gXAogCSR7 Yml0c19zcmNkaXJ9L2NoYXJfdHJhaXRzLmggXAogCSR7Yml0c19zcmNkaXJ9L2NoYXJjb252Lmgg XAogCSR7Yml0c19zcmNkaXJ9L2Nocm9uby5oIFwKKwkke2JpdHNfc3JjZGlyfS9jaHJvbm9faW8u aCBcCiAJJHtiaXRzX3NyY2Rpcn0vY29kZWN2dC5oIFwKIAkke2JpdHNfc3JjZGlyfS9jb3dfc3Ry aW5nLmggXAogCSR7Yml0c19zcmNkaXJ9L2RlcXVlLnRjYyBcCmRpZmYgLS1naXQgYS9saWJzdGRj KystdjMvaW5jbHVkZS9NYWtlZmlsZS5pbiBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxl LmluCmluZGV4IDY0NjIxOTIyZjc3Li40MDFkMGVlYWQ1OCAxMDA2NDQKLS0tIGEvbGlic3RkYysr LXYzL2luY2x1ZGUvTWFrZWZpbGUuaW4KKysrIGIvbGlic3RkYysrLXYzL2luY2x1ZGUvTWFrZWZp bGUuaW4KQEAgLTUyOCw2ICs1MjgsNyBAQCBiaXRzX2ZyZWVzdGFuZGluZyA9IFwKIEBHTElCQ1hY X0hPU1RFRF9UUlVFQAkke2JpdHNfc3JjZGlyfS9jaGFyX3RyYWl0cy5oIFwKIEBHTElCQ1hYX0hP U1RFRF9UUlVFQAkke2JpdHNfc3JjZGlyfS9jaGFyY29udi5oIFwKIEBHTElCQ1hYX0hPU1RFRF9U UlVFQAkke2JpdHNfc3JjZGlyfS9jaHJvbm8uaCBcCitAR0xJQkNYWF9IT1NURURfVFJVRUAJJHti aXRzX3NyY2Rpcn0vY2hyb25vX2lvLmggXAogQEdMSUJDWFhfSE9TVEVEX1RSVUVACSR7Yml0c19z cmNkaXJ9L2NvZGVjdnQuaCBcCiBAR0xJQkNYWF9IT1NURURfVFJVRUAJJHtiaXRzX3NyY2Rpcn0v Y293X3N0cmluZy5oIFwKIEBHTElCQ1hYX0hPU1RFRF9UUlVFQAkke2JpdHNfc3JjZGlyfS9kZXF1 ZS50Y2MgXApkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9jaHJvbm8uaCBi L2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvY2hyb25vLmgKaW5kZXggMDU5ODdjYTA5ZGYuLjQz MmIyNWFmZmVhIDEwMDY0NAotLS0gYS9saWJzdGRjKystdjMvaW5jbHVkZS9iaXRzL2Nocm9uby5o CisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2JpdHMvY2hyb25vLmgKQEAgLTEwNjksNiArMTA2 OSwxNyBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCQkgY29uc3QgdGltZV9w b2ludDxfQ2xvY2ssIF9EdXIyPiYgX19yaHMpCiAgICAgICB7IHJldHVybiAhKF9fbGhzIDwgX19y aHMpOyB9CiAKKyNpZiBfX2NwcF92YXJpYWJsZV90ZW1wbGF0ZXMKKyAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CisgICAgICBpbmxpbmUgY29uc3RleHByIGJvb2wgX19pc19kdXJhdGlvbl92ID0g ZmFsc2U7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUgX1BlcmlvZD4KKyAg ICAgIGlubGluZSBjb25zdGV4cHIgYm9vbCBfX2lzX2R1cmF0aW9uX3Y8ZHVyYXRpb248X1JlcCwg X1BlcmlvZD4+ID0gdHJ1ZTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CisgICAgICBpbmxp bmUgY29uc3RleHByIGJvb2wgX19pc190aW1lX3BvaW50X3YgPSBmYWxzZTsKKyAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2xvY2ssIHR5cGVuYW1lIF9EdXI+CisgICAgICBpbmxpbmUgY29uc3RleHBy IGJvb2wgX19pc190aW1lX3BvaW50X3Y8dGltZV9wb2ludDxfQ2xvY2ssIF9EdXI+PiA9IHRydWU7 CisjZW5kaWYKKwogICAgIC8vLyBAfQogICAgIC8vLyBAfSBncm91cCBjaHJvbm8KIApkaWZmIC0t Z2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvYml0cy9jaHJvbm9faW8uaCBiL2xpYnN0ZGMrKy12 My9pbmNsdWRlL2JpdHMvY2hyb25vX2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjc3OWE2NWVjZTkxCi0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysrLXYzL2lu Y2x1ZGUvYml0cy9jaHJvbm9faW8uaApAQCAtMCwwICsxLDE2MzMgQEAKKy8vIDxmb3JtYXQ+IEZv cm1hdHRpbmcgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IFRoZSBHTlUgVG9vbGNoYWluIEF1 dGhvcnMuCisvLworLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBJU08gQysrIExpYnJh cnkuICBUaGlzIGxpYnJhcnkgaXMgZnJlZQorLy8gc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlCisvLyB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorLy8gRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisvLyBh bnkgbGF0ZXIgdmVyc2lvbi4KKworLy8gVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworLy8gVW5kZXIgU2Vj dGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisvLyBw ZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9u LCB2ZXJzaW9uCisvLyAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKy8vIGEgY29weSBvZiB0aGUgR0NDIFJ1bnRpbWUg TGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07CisvLyBzZWUgdGhlIGZp bGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVzcGVjdGl2ZWx5LiAgSWYgbm90LCBz ZWUKKy8vIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworLyoqIEBmaWxlIGluY2x1 ZGUvYml0cy9jaHJvbm9faW8uaAorICogIFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUs IGluY2x1ZGVkIGJ5IG90aGVyIGxpYnJhcnkgaGVhZGVycy4KKyAqICBEbyBub3QgYXR0ZW1wdCB0 byB1c2UgaXQgZGlyZWN0bHkuIEBoZWFkZXJuYW1le2Nocm9ub30KKyAqLworCisjaWZuZGVmIF9H TElCQ1hYX0NIUk9OT19JT19ICisjZGVmaW5lIF9HTElCQ1hYX0NIUk9OT19JT19IIDEKKworI3By YWdtYSBHQ0Mgc3lzdGVtX2hlYWRlcgorCisjaWYgX19jcGx1c3BsdXMgPj0gMjAyMDAyTAorCisj aW5jbHVkZSA8c3N0cmVhbT4gLy8gb3N0cmluZ3N0cmVhbQorI2luY2x1ZGUgPGlvbWFuaXA+IC8v IHNldHcsIHNldGZpbGwKKyNpbmNsdWRlIDxmb3JtYXQ+CisKKyNpbmNsdWRlIDxiaXRzL2NoYXJj b252Lmg+CisKK25hbWVzcGFjZSBzdGQgX0dMSUJDWFhfVklTSUJJTElUWShkZWZhdWx0KQorewor X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KKworbmFtZXNwYWNlIGNocm9ubworewor Ly8vIEBhZGR0b2dyb3VwIGNocm9ubworLy8vIEB7CisKKy8vLyBAY29uZCB1bmRvY3VtZW50ZWQK K25hbWVzcGFjZSBfX2RldGFpbAoreworICAvLyBTVEFUSUNBTExZLVdJREVOLCBzZWUgQysrMjAg W3RpbWUuZ2VuZXJhbF0KKyAgLy8gSXQgZG9lc24ndCBtYXR0ZXIgZm9yIGZvcm1hdCBzdHJpbmdz ICh3aGljaCBjYW4gb25seSBiZSBjaGFyIG9yIHdjaGFyX3QpCisgIC8vIGJ1dCB0aGlzIHJldHVy bnMgdGhlIG5hcnJvdyBzdHJpbmcgZm9yIGFueXRoaW5nIHRoYXQgaXNuJ3Qgd2NoYXJfdC4gVGhp cworICAvLyBpcyBkb25lIGJlY2F1c2UgY29uc3QgY2hhciogY2FuIGJlIGluc2VydGVkIGludG8g YW55IG9zdHJlYW0gdHlwZSwgYW5kCisgIC8vIHdpbGwgYmUgd2lkZW5lZCBhdCBydW50aW1lIGlm IG5lY2Vzc2FyeS4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIGNvbnN0ZXZhbCBh dXRvCisgICAgX1dpZGVuKGNvbnN0IGNoYXIqIF9fbmFycm93LCBjb25zdCB3Y2hhcl90KiBfX3dp ZGUpCisgICAgeworICAgICAgaWYgY29uc3RleHByIChpc19zYW1lX3Y8X0NoYXJULCB3Y2hhcl90 PikKKwlyZXR1cm4gX193aWRlOworICAgICAgZWxzZQorCXJldHVybiBfX25hcnJvdzsKKyAgICB9 CisjZGVmaW5lIF9HTElCQ1hYX1dJREVOXyhDLCBTKSA6OnN0ZDo6Y2hyb25vOjpfX2RldGFpbDo6 X1dpZGVuPEM+KFMsIEwjI1MpCisjZGVmaW5lIF9HTElCQ1hYX1dJREVOKFMpIF9HTElCQ1hYX1dJ REVOXyhfQ2hhclQsIFMpCisKKworICAvLyBXcml0ZSBhbiBhcmJpdHJhcnkgZHVyYXRpb24gc3Vm Zml4IGludG8gdGhlIGJ1ZmZlci4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1BlcmlvZD4KKyAgICBj b25zdGV4cHIgY29uc3QgY2hhcioKKyAgICBfX3VuaXRzX3N1ZmZpeF9taXNjKGNoYXIqIF9fYnVm LCBzaXplX3QgLyogVE9ETyBjaGVjayBsZW5ndGg/ICovKSBub2V4Y2VwdAorICAgIHsKKyAgICAg IG5hbWVzcGFjZSBfX3RjID0gc3RkOjpfX2RldGFpbDsKKyAgICAgIGNoYXIqIF9fcCA9IF9fYnVm OworICAgICAgX19wWzBdID0gJ1snOworICAgICAgdW5zaWduZWQgX19ubGVuID0gX190Yzo6X190 b19jaGFyc19sZW4oKHVpbnRtYXhfdClfUGVyaW9kOjpudW0pOworICAgICAgX190Yzo6X190b19j aGFyc18xMF9pbXBsKF9fcCArIDEsIF9fbmxlbiwgKHVpbnRtYXhfdClfUGVyaW9kOjpudW0pOwor ICAgICAgX19wICs9IDEgKyBfX25sZW47CisgICAgICBpZiBjb25zdGV4cHIgKF9QZXJpb2Q6OmRl biAhPSAxKQorCXsKKwkgIF9fcFswXSA9ICcvJzsKKwkgIHVuc2lnbmVkIF9fZGxlbiA9IF9fdGM6 Ol9fdG9fY2hhcnNfbGVuKCh1aW50bWF4X3QpX1BlcmlvZDo6ZGVuKTsKKwkgIF9fdGM6Ol9fdG9f Y2hhcnNfMTBfaW1wbChfX3AgKyAxLCBfX2RsZW4sICh1aW50bWF4X3QpX1BlcmlvZDo6ZGVuKTsK KwkgIF9fcCArPSAxICsgX19kbGVuOworCX0KKyAgICAgIF9fcFswXSA9ICddJzsKKyAgICAgIF9f cFsxXSA9ICdzJzsKKyAgICAgIF9fcFsyXSA9ICdcMCc7CisgICAgICByZXR1cm4gX19idWY7Cisg ICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9QZXJpb2QsIHR5cGVuYW1lIF9DaGFyVD4KKyAg ICBjb25zdGV4cHIgYXV0bworICAgIF9fdW5pdHNfc3VmZml4KGNoYXIqIF9fYnVmLCBzaXplX3Qg X19uKSBub2V4Y2VwdAorICAgIHsKKyAgICAgIC8vIFRoZSBzdGFuZGFyZCBzYXkgdGhlc2UgYXJl IGFsbCBuYXJyb3cgc3RyaW5ncywgd2hpY2ggd291bGQgbmVlZCB0bworICAgICAgLy8gYmUgd2lk ZW5lZCBhdCBydW4tdGltZSB3aGVuIGluc2VydGVkIGludG8gYSB3aWRlIHN0cmVhbS4gV2UgdXNl CisgICAgICAvLyBTVEFUSUNBTExZLVdJREVOIHRvIHdpZGVuIGF0IGNvbXBpbGUtdGltZS4KKyNk ZWZpbmUgX0dMSUJDWFhfVU5JVFNfU1VGRklYKHBlcmlvZCwgc3VmZml4KSBcCisgICAgaWYgY29u c3RleHByIChpc19zYW1lX3Y8X1BlcmlvZCwgcGVyaW9kPikgXAorICAgICAgcmV0dXJuIF9HTElC Q1hYX1dJREVOKHN1ZmZpeCk7CSAgICAgIFwKKyAgICBlbHNlCisKKyAgICAgIF9HTElCQ1hYX1VO SVRTX1NVRkZJWChhdHRvLCAgImFzIikKKyAgICAgIF9HTElCQ1hYX1VOSVRTX1NVRkZJWChmZW10 bywgImZzIikKKyAgICAgIF9HTElCQ1hYX1VOSVRTX1NVRkZJWChwaWNvLCAgInBzIikKKyAgICAg IF9HTElCQ1hYX1VOSVRTX1NVRkZJWChuYW5vLCAgIm5zIikKKyAgICAgIF9HTElCQ1hYX1VOSVRT X1NVRkZJWChtaWxsaSwgIm1zIikKKyNpZiBfR0xJQkNYWF9VU0VfQUxUX01JQ1JPU0VDT05EU19T VUZGSVgKKyAgICAgIC8vIERlY2lkaW5nIHRoaXMgYXQgY29tcGlsZS10aW1lIGlzIHdyb25nLCBt YXliZSB1c2UgbmxfbGFuZ2luZm8oQ09ERVNFVCkKKyAgICAgIC8vIHRvIGNoZWNrIHJ1bnRpbWUg ZW52aXJvbm1lbnQgYW5kIHJldHVybiB1OCJcdTAwYjVzIiwgIlx4YjVzIiwgb3IgInVzIi4KKyAg ICAgIF9HTElCQ1hYX1VOSVRTX1NVRkZJWChtaWNybywgIlx1MDBiNXMiKQorI2Vsc2UKKyAgICAg IF9HTElCQ1hYX1VOSVRTX1NVRkZJWChtaWNybywgInVzIikKKyNlbmRpZgorICAgICAgX0dMSUJD WFhfVU5JVFNfU1VGRklYKGNlbnRpLCAiY3MiKQorICAgICAgX0dMSUJDWFhfVU5JVFNfU1VGRklY KGRlY2ksICAiZHMiKQorICAgICAgX0dMSUJDWFhfVU5JVFNfU1VGRklYKHJhdGlvPDE+LCAicyIp CisgICAgICBfR0xJQkNYWF9VTklUU19TVUZGSVgoZGVjYSwgICJkYXMiKQorICAgICAgX0dMSUJD WFhfVU5JVFNfU1VGRklYKGhlY3RvLCAiaHMiKQorICAgICAgX0dMSUJDWFhfVU5JVFNfU1VGRklY KGtpbG8sICAia3MiKQorICAgICAgX0dMSUJDWFhfVU5JVFNfU1VGRklYKG1lZ2EsICAiTXMiKQor ICAgICAgX0dMSUJDWFhfVU5JVFNfU1VGRklYKGdpZ2EsICAiR3MiKQorICAgICAgX0dMSUJDWFhf VU5JVFNfU1VGRklYKHRlcmEsICAiVHMiKQorICAgICAgX0dMSUJDWFhfVU5JVFNfU1VGRklYKHRl cmEsICAiVHMiKQorICAgICAgX0dMSUJDWFhfVU5JVFNfU1VGRklYKHBldGEsICAiUHMiKQorICAg ICAgX0dMSUJDWFhfVU5JVFNfU1VGRklYKGV4YSwgICAiRXMiKQorICAgICAgX0dMSUJDWFhfVU5J VFNfU1VGRklYKHJhdGlvPDYwPiwgICAgIm1pbiIpCisgICAgICBfR0xJQkNYWF9VTklUU19TVUZG SVgocmF0aW88MzYwMD4sICAiaCIpCisgICAgICBfR0xJQkNYWF9VTklUU19TVUZGSVgocmF0aW88 ODY0MDA+LCAiZCIpCisjdW5kZWYgX0dMSUJDWFhfVU5JVFNfU1VGRklYCisgICAgICByZXR1cm4g X19kZXRhaWw6Ol9fdW5pdHNfc3VmZml4X21pc2M8X1BlcmlvZD4oX19idWYsIF9fbik7CisgICAg fQorfSAvLyBuYW1lc3BhY2UgX19kZXRhaWwKKy8vLyBAZW5kY29uZAorCisgIC8qKiBXcml0ZSBh IGBjaHJvbm86OmR1cmF0aW9uYCB0byBhbiBvc3RyZWFtLgorICAgKgorICAgKiBAc2luY2UgQysr MjAKKyAgICovCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywK KwkgICB0eXBlbmFtZSBfUmVwLCB0eXBlbmFtZSBfUGVyaW9kPgorICAgIGlubGluZSBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChzdGQ6OmJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZHVyYXRpb248X1JlcCwg X1BlcmlvZD4mIF9fZCkKKyAgICB7CisgICAgICB1c2luZyBwZXJpb2QgPSB0eXBlbmFtZSBfUGVy aW9kOjp0eXBlOworICAgICAgY2hhciBfX2J1ZltzaXplb2YoIlsvXXMiKSArIDIgKiBudW1lcmlj X2xpbWl0czxpbnRtYXhfdD46OmRpZ2l0czEwXTsKKyAgICAgIHN0ZDo6YmFzaWNfb3N0cmluZ3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fczsKKyAgICAgIF9fcy5mbGFncyhfX29zLmZsYWdzKCkp OworICAgICAgX19zLmltYnVlKF9fb3MuZ2V0bG9jKCkpOworICAgICAgX19zLnByZWNpc2lvbihf X29zLnByZWNpc2lvbigpKTsKKyAgICAgIF9fcyA8PCBfX2QuY291bnQoKTsKKyAgICAgIF9fcyA8 PCBfX2RldGFpbDo6X191bml0c19zdWZmaXg8cGVyaW9kLCBfQ2hhclQ+KF9fYnVmLCBzaXplb2Yo X19idWYpKTsKKyAgICAgIF9fb3MgPDwgc3RkOjptb3ZlKF9fcykuc3RyKCk7CisgICAgICByZXR1 cm4gX19vczsKKyAgICB9CisKKy8vLyBAY29uZCB1bmRvY3VtZW50ZWQKK25hbWVzcGFjZSBfX2Rl dGFpbAoreworICAvLyBBbiB1bnNwZWNpZmllZCB0eXBlIHJldHVybmVkIGJ5IGBjaHJvbm86Omxv Y2FsX3RpbWVfZm9ybWF0YC4KKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1cmF0aW9uPgorICAgIHN0 cnVjdCBfX2xvY2FsX3RpbWVfZm10CisgICAgeworICAgICAgbG9jYWxfdGltZTxfRHVyYXRpb24+ IF9NX3RpbWU7CisgICAgICBjb25zdCBzdHJpbmcqIF9NX2FiYnJldjsKKyAgICAgIGNvbnN0IHNl Y29uZHMqIF9NX29mZnNldF9zZWM7CisgICAgfTsKKworICBzdHJ1Y3QgX19sb2NhbF9mbXRfdDsK K30KKy8vLyBAZW5kY29uZAorCisgIC8qKiBSZXR1cm4gYW4gb2JqZWN0IHRoYXQgYXNzc29jaWF0 ZXMgdGltZXpvbmUgaW5mbyB3aXRoIGEgbG9jYWwgdGltZS4KKyAgICoKKyAgICogQSBgY2hyb25v Ojpsb2NhbF90aW1lYCBvYmplY3QgaGFzIG5vIHRpbWV6b25lIGFzc29jaWF0ZWQgd2l0aCBpdC4g VGhpcworICAgKiBmdW5jdGlvbiBjcmVhdGVzIGFuIG9iamVjdCB0aGF0IGFsbG93cyBmb3JtYXR0 aW5nIGEgYGxvY2FsX3RpbWVgIGFzCisgICAqIHRob3VnaCBpdCByZWZlcnMgdG8gYSB0aW1lem9u ZSB3aXRoIHRoZSBnaXZlbiBhYmJyZXZpYXRlZCBuYW1lIGFuZAorICAgKiBvZmZzZXQgZnJvbSBV VEMuCisgICAqCisgICAqIEBzaW5jZSBDKysyMAorICAgKi8KKyAgdGVtcGxhdGU8dHlwZW5hbWUg X0R1cmF0aW9uPgorICAgIGlubGluZSBfX2RldGFpbDo6X19sb2NhbF90aW1lX2ZtdDxfRHVyYXRp b24+CisgICAgbG9jYWxfdGltZV9mb3JtYXQobG9jYWxfdGltZTxfRHVyYXRpb24+IF9fdGltZSwK KwkJICAgICAgY29uc3Qgc3RyaW5nKiBfX2FiYnJldiA9IG51bGxwdHIsCisJCSAgICAgIGNvbnN0 IHNlY29uZHMqIF9fb2Zmc2V0X3NlYyA9IG51bGxwdHIpCisgICAgeyByZXR1cm4ge19fdGltZSwg X19hYmJyZXYsIF9fb2Zmc2V0X3NlY307IH0KKworICAvLy8gQH0KK30gLy8gbmFtZXNwYWNlIGNo cm9ubworCisvLy8gQGNvbmQgdW5kb2N1bWVudGVkCituYW1lc3BhY2UgX19mb3JtYXQKK3sKKyAg W1tub3JldHVybixfX2dudV9fOjpfX2Fsd2F5c19pbmxpbmVfX11dCisgIGlubGluZSB2b2lkCisg IF9fbm9fdGltZXpvbmVfYXZhaWxhYmxlKCkKKyAgeyBfX3Rocm93X2Zvcm1hdF9lcnJvcigiZm9y bWF0IGVycm9yOiBubyB0aW1lem9uZSBhdmFpbGFibGUgZm9yICVaIG9yICV6Iik7IH0KKworICBb W25vcmV0dXJuLF9fZ251X186Ol9fYWx3YXlzX2lubGluZV9fXV0KKyAgaW5saW5lIHZvaWQKKyAg X19ub3RfdmFsaWRfZm9yX2R1cmF0aW9uKCkKKyAgeyBfX3Rocm93X2Zvcm1hdF9lcnJvcigiZm9y bWF0IGVycm9yOiBjaHJvbm8tZm9ybWF0LXNwZWMgbm90IHZhbGlkIGZvciAiCisJCQkgImNocm9u bzo6ZHVyYXRpb24iKTsgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzdHJ1 Y3QgX0Nocm9ub1NwZWMgOiBfU3BlYzxfQ2hhclQ+CisgICAgeworICAgICAgYmFzaWNfc3RyaW5n X3ZpZXc8X0NoYXJUPiBfTV9jaHJvbm9fc3BlY3M7CisgICAgfTsKKworICAvLyBSZXByZXNlbnRz IHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBhIGNocm9ubyB0eXBlLgorICAvLyBlLmcuIG1v bnRoX3dlZWtkYXkgaGFzIG1vbnRoIGFuZCB3ZWVrZGF5IGJ1dCBubyB5ZWFyIG9yIHRpbWUgb2Yg ZGF5LAorICAvLyBoaF9tbV9zcyBoYXMgdGltZSBvZiBkYXkgYnV0IG5vIGRhdGUsIHV0Y190aW1l IGlzIHRpbWVfcG9pbnQrdGltZXpvbmUuCisgIGVudW0gX0Nocm9ub1BhcnRzIHsKKyAgICBfWWVh ciA9IDEsIF9Nb250aCA9IDIsIF9EYXkgPSA0LCBfV2Vla2RheSA9IDgsIF9UaW1lT2ZEYXkgPSAx NiwKKyAgICBfVGltZVpvbmUgPSAzMiwKKyAgICBfRGF0ZSA9IF9ZZWFyIHwgX01vbnRoIHwgX0Rh eSB8IF9XZWVrZGF5LAorICAgIF9EYXRlVGltZSA9IF9EYXRlIHwgX1RpbWVPZkRheSwKKyAgfTsK KworICBjb25zdGV4cHIgX0Nocm9ub1BhcnRzCisgIG9wZXJhdG9yfChfQ2hyb25vUGFydHMgX194 LCBfQ2hyb25vUGFydHMgX195KQorICB7IHJldHVybiBzdGF0aWNfY2FzdDxfQ2hyb25vUGFydHM+ KChpbnQpX194IHwgKGludClfX3kpOyB9CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgor ICAgIHN0cnVjdCBfX2Zvcm1hdHRlcl9jaHJvbm8KKyAgICB7CisgICAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfUGFyc2VDb250ZXh0PgorCWNvbnN0ZXhwciB0eXBlbmFtZSBfUGFyc2VDb250ZXh0Ojpp dGVyYXRvcgorCV9NX3BhcnNlKF9QYXJzZUNvbnRleHQmIF9fcGMsIF9DaHJvbm9QYXJ0cyBfX3Bh cnRzKQorCXsKKwkgIGF1dG8gX19maXJzdCA9IF9fcGMuYmVnaW4oKTsKKwkgIGNvbnN0IGF1dG8g X19sYXN0ID0gX19wYy5lbmQoKTsKKwkgIF9DaHJvbm9TcGVjPF9DaGFyVD4gX19zcGVje307CisK KwkgIGF1dG8gX19maW5hbGl6ZSA9IFt0aGlzLCAmX19zcGVjXSB7CisJICAgIF9NX3NwZWMgPSBf X3NwZWM7CisJICB9OworCisJICBhdXRvIF9fZmluaXNoZWQgPSBbJl0geworCSAgICBpZiAoX19m aXJzdCA9PSBfX2xhc3QgfHwgKl9fZmlyc3QgPT0gJ30nKQorCSAgICAgIHsKKwkJX19maW5hbGl6 ZSgpOworCQlyZXR1cm4gdHJ1ZTsKKwkgICAgICB9CisJICAgIHJldHVybiBmYWxzZTsKKwkgIH07 CisKKwkgIGlmIChfX2ZpbmlzaGVkKCkpCisJICAgIHJldHVybiBfX2ZpcnN0OworCisJICBfX2Zp cnN0ID0gX19zcGVjLl9NX3BhcnNlX2ZpbGxfYW5kX2FsaWduKF9fZmlyc3QsIF9fbGFzdCk7CisJ ICBpZiAoX19maW5pc2hlZCgpKQorCSAgICByZXR1cm4gX19maXJzdDsKKworCSAgX19maXJzdCA9 IF9fc3BlYy5fTV9wYXJzZV93aWR0aChfX2ZpcnN0LCBfX2xhc3QsIF9fcGMpOworCSAgaWYgKF9f ZmluaXNoZWQoKSkKKwkgICAgcmV0dXJuIF9fZmlyc3Q7CisKKwkgIF9fZmlyc3QgPSBfX3NwZWMu X01fcGFyc2VfcHJlY2lzaW9uKF9fZmlyc3QsIF9fbGFzdCwgX19wYyk7CisJICBpZiAoX19maW5p c2hlZCgpKQorCSAgICByZXR1cm4gX19maXJzdDsKKworCSAgX19maXJzdCA9IF9fc3BlYy5fTV9w YXJzZV9sb2NhbGUoX19maXJzdCwgX19sYXN0KTsKKwkgIGlmIChfX2ZpbmlzaGVkKCkpCisJICAg IHJldHVybiBfX2ZpcnN0OworCisJICAvLyBUT0RPIHBhcnNlIGNocm9uby1zcGVjcywgc3RvcCBh dCBfX2xhc3Qgb3IgJ30nIG9yICd7JworCSAgLy8gY2hlY2sgZWFjaCBjb252ZXJzaW9uLXNwZWMg YWdhaW5zdCBfX3BhcnRzCisJICAvLyAoc28gZmFpbCBmb3IgJVkgaWYgbm8geWVhciBpbiBwYXJ0 cykKKwkgIC8vIHNhdmUgcmFuZ2UgaW4gX19zcGVjLl9NX2Nocm9ub19zcGVjcworCisJICBjb25z dCBhdXRvIF9fY2hyb25vX3NwZWNzID0gX19maXJzdDsKKworCSAgd2hpbGUgKCFfX2ZpbmlzaGVk KCkpCisJICAgIHsKKwkgICAgICBpZiAoKl9fZmlyc3QgPT0gJ3snKQorCQlfX3Rocm93X2Zvcm1h dF9lcnJvcigiY2hyb25vIGZvcm1hdCBlcnJvcjogJ3snIGluIGNocm9uby1zcGVjcyIpOworCSAg ICAgIGlmICgqX19maXJzdCAhPSAnJScpCisJCXsKKwkJICAvLyBsaXRlcmFsLWNoYXIKKwkJICAr K19fZmlyc3Q7CisJCSAgY29udGludWU7CisJCX0KKworCSAgICAgIGlmIChfX2ZpcnN0ID09IF9f bGFzdCkKKwkJX190aHJvd19mb3JtYXRfZXJyb3IoImNocm9ubyBmb3JtYXQgZXJyb3I6IHVuZXNj YXBlZCAnJScgIgorCQkJCSAgICAgIiBpbiBjaHJvbm8tc3BlY3MiKTsKKworCSAgICAgIGlmICgq X19maXJzdCA9PSAnJScgfHwgKl9fZmlyc3QgPT0gJ24nIHx8ICpfX2ZpcnN0ID09ICd0JykKKwkJ eworCQkgIC8vIGVzY2FwZWQgY2hhcmFjdGVyCisJCSAgKytfX2ZpcnN0OworCQkgIGNvbnRpbnVl OworCQl9CisKKwkgICAgICBjaGFyIF9fbW9kaWZpZXIgPSAwOworCSAgICAgIGlmICgqX19maXJz dCA9PSAnRScgfHwgKl9fZmlyc3QgPT0gJ08nKQorCQlfX21vZGlmaWVyID0gKl9fZmlyc3QrKzsK KworCSAgICAgIHN3aXRjaCAoKl9fZmlyc3QpCisJICAgICAgeworCQkvLyBUeXBlcyB0aGF0IGRv IG5vdCBzdXBwb3J0IGEgbW9kaWZpZXIuCisJCWNhc2UgJ2EnOgorCQljYXNlICdBJzoKKwkJY2Fz ZSAnYic6CisJCWNhc2UgJ0InOgorCQljYXNlICdEJzoKKwkJY2FzZSAnRic6CisJCWNhc2UgJ2cn OgorCQljYXNlICdHJzoKKwkJY2FzZSAnaCc6CisJCWNhc2UgJ2onOgorCQljYXNlICdwJzoKKwkJ Y2FzZSAncSc6CisJCWNhc2UgJ1EnOgorCQljYXNlICdyJzoKKwkJY2FzZSAnUic6CisJCWNhc2Ug J1QnOgorCQljYXNlICdaJzoKKwkJICBpZiAoX19tb2RpZmllcikKKwkJICAgIF9fbW9kaWZpZXIg PSAneCc7CisJCSAgYnJlYWs7CisJCS8vIFR5cGVzIHRoYXQgZG8gbm90IHN1cHBvcnQgdGhlIE8g bW9kaWZpZXIuCisJCWNhc2UgJ2MnOgorCQljYXNlICdDJzoKKwkJY2FzZSAneCc6CisJCWNhc2Ug J1gnOgorCQljYXNlICdZJzoKKwkJICBpZiAoX19tb2RpZmllciA9PSAnTycpCisJCSAgICBfX21v ZGlmaWVyID0gJ3gnOworCQkgIGJyZWFrOworCQkvLyBUeXBlcyB0aGF0IGRvIG5vdCBzdXBwb3J0 IHRoZSBFIG1vZGlmaWVyLgorCQljYXNlICdkJzoKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ0gnOgor CQljYXNlICdJJzoKKwkJY2FzZSAnbSc6CisJCWNhc2UgJ00nOgorCQljYXNlICdTJzoKKwkJY2Fz ZSAndSc6CisJCWNhc2UgJ1UnOgorCQljYXNlICdWJzoKKwkJY2FzZSAndyc6CisJCWNhc2UgJ1cn OgorCQkgIGlmIChfX21vZGlmaWVyID09ICdFJykKKwkJICAgIF9fbW9kaWZpZXIgPSAneCc7CisJ CSAgYnJlYWs7CisJCS8vIFR5cGVzIHRoYXQgc3VwcG9ydCBib3RoIHRoZSBFIGFuZCBPIG1vZGlm aWVycy4KKwkJY2FzZSAneSc6CisJCWNhc2UgJ3onOgorCQkgIGJyZWFrOworCQlkZWZhdWx0Ogor CQkgIF9fdGhyb3dfZm9ybWF0X2Vycm9yKCJjaHJvbm8gZm9ybWF0IGVycm9yOiBpbnZhbGlkICIK KwkJCQkgICAgICAgImNvbnZlcnNpb24gc3BlY2lmaWVyIik7CisJICAgICAgfQorCSAgICAgIGlm IChfX21vZGlmaWVyID09ICd4JykKKwkJX190aHJvd19mb3JtYXRfZXJyb3IoImNocm9ubyBmb3Jt YXQgZXJyb3I6IGludmFsaWQgbW9kaWZpZXIiKTsKKworCSAgICAgIF9DaHJvbm9QYXJ0cyBfX25l ZWRlZHt9OworCSAgICAgIHN3aXRjaCAoKl9fZmlyc3QpCisJICAgICAgeworCQljYXNlICdhJzoK KwkJY2FzZSAnQSc6CisJCWNhc2UgJ3cnOgorCQkgIF9fbmVlZGVkID0gX1dlZWtkYXk7CisJCSAg YnJlYWs7CisJCWNhc2UgJ2InOgorCQljYXNlICdoJzoKKwkJY2FzZSAnQic6CisJCWNhc2UgJ20n OgorCQkgIF9fbmVlZGVkID0gX01vbnRoOworCQkgIGJyZWFrOworCQljYXNlICdjJzoKKwkJICBf X25lZWRlZCA9IF9EYXRlVGltZTsKKwkJICBicmVhazsKKwkJY2FzZSAnQyc6CisJCWNhc2UgJ2cn OgorCQljYXNlICd5JzoKKwkJY2FzZSAnWSc6CisJCSAgX19uZWVkZWQgPSBfWWVhcjsKKwkJICBi cmVhazsKKwkJY2FzZSAnZCc6CisJCWNhc2UgJ2UnOgorCQkgIC8vIFRPRE8gZGF5IG9mIHRoZSBt b250aAorCQkgIGJyZWFrOworCQljYXNlICdEJzoKKwkJY2FzZSAnRic6CisJCWNhc2UgJ0cnOgor CQljYXNlICd1JzoKKwkJY2FzZSAneCc6CisJCSAgX19uZWVkZWQgPSBfRGF0ZTsKKwkJICBicmVh azsKKwkJY2FzZSAnSCc6CisJCWNhc2UgJ0knOgorCQljYXNlICdNJzoKKwkJY2FzZSAncCc6CisJ CWNhc2UgJ3InOgorCQljYXNlICdSJzoKKwkJY2FzZSAnUyc6CisJCWNhc2UgJ1QnOgorCQljYXNl ICdYJzoKKwkJICBfX25lZWRlZCA9IF9UaW1lT2ZEYXk7CisJCSAgYnJlYWs7CisJCWNhc2UgJ2on OgorCQljYXNlICdxJzoKKwkJY2FzZSAnUSc6CisJCSAgLy8gVE9ETyBuZWVkcyBzcGVjaWFsIGhh bmRsaW5nCisJCSAgYnJlYWs7CisJCWNhc2UgJ1UnOgorCQljYXNlICdWJzoKKwkJY2FzZSAnVyc6 CisJCSAgX19uZWVkZWQgPSBfTW9udGggfCBfRGF5OworCQkgIGJyZWFrOworCQljYXNlICd6JzoK KwkJY2FzZSAnWic6CisJCSAgX19uZWVkZWQgPSBfVGltZVpvbmU7CisJCSAgYnJlYWs7CisJICAg ICAgfQorCSAgICAgIGlmICgoX19uZWVkZWQgJiBfX3BhcnRzKSAhPSBfX25lZWRlZCkKKwkJX190 aHJvd19mb3JtYXRfZXJyb3IoImNocm9ubyBmb3JtYXQgZXJyb3I6IGZvcm1hdCBhcmd1bWVudCAi CisJCQkJICAgICAiZG9lcyBub3QgY29udGFpbiB0aGUgaW5mb3JtYXRpb24gIgorCQkJCSAgICAg InJlcXVlc3RlZCBieSB0aGUgY2hyb25vLXNwZWNzIik7CisJICAgICAgKytfX2ZpcnN0OworCSAg ICB9CisJICBzaXplX3QgX19uID0gX19maXJzdCAtIF9fY2hyb25vX3NwZWNzOworCSAgX01fc3Bl Yy5fTV9jaHJvbm9fc3BlY3MgPSB7X19jaHJvbm9fc3BlY3MsIF9fbn07CisJICByZXR1cm4gX19m aXJzdDsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Zvcm1h dENvbnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yCisJX01fZm9ybWF0 KGNvbnN0IF9UcCYgX190LCBfRm9ybWF0Q29udGV4dCYgX19jdHgpIGNvbnN0CisJeworCSAgYmFz aWNfb3N0cmluZ3N0cmVhbTxfQ2hhclQ+IF9fb3M7CisJICBpZiAoIV9NX3NwZWMuX01fbG9jYWxp emVkKQorCSAgICBfX29zLmltYnVlKHN0ZDo6bG9jYWxlOjpjbGFzc2ljKCkpOworCSAgZWxzZQor CSAgICBfX29zLmltYnVlKF9fY3R4LmxvY2FsZSgpKTsKKworCSAgaWYgY29uc3RleHByIChjaHJv bm86Ol9faXNfZHVyYXRpb25fdjxfVHA+CisJCQkgIHx8X19pc19zcGVjaWFsaXphdGlvbl9vZjxf VHAsIGNocm9ubzo6aGhfbW1fc3M+KQorCSAgICB7CisJICAgICAgaWYgKF9fdCA8IF9fdC56ZXJv KCkpCisJCXsKKwkJICBfX29zIDw8IF9TX3BsdXNfbWludXNbMV07CisJCSAgX190ID0gY2hyb25v OjphYnMoX190KTsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIGNvbnN0ZXhwciAoX19pc19zcGVj aWFsaXphdGlvbl9vZjxfVHAsIGNocm9ubzo6aGhfbW1fc3M+KQorCisJICBpZiAoX01fc3BlYy5f TV9jaHJvbm9fc3BlY3MuZW1wdHkoKSkKKwkgICAgeworCSAgICAgIC8vIFRPRE8gd3JpdGUgdG8g c3RyZWFtCisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8vIFRPRE8KKwkgICAgfQor CSAgcmV0dXJuIF9fY3R4Lm91dCgpOworCX0KKworICAgIHByaXZhdGU6CisgICAgICBzdGF0aWMg Y29uc3RleHByIGNvbnN0IF9DaGFyVCogX1NfY2hhcnM9X0dMSUJDWFhfV0lERU4oIjAxMjM0NTY3 ODkrLTovIik7CisgICAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IF9DaGFyVCogX1NfcGx1c19t aW51cyA9IF9TX2NoYXJzICsgMTA7CisgICAgICBzdGF0aWMgY29uc3RleHByIF9DaGFyVCBfU19j b2xvbiA9IF9TX2NoYXJzWzEyXTsKKyAgICAgIHN0YXRpYyBjb25zdGV4cHIgX0NoYXJUIF9TX3Ns YXNoID0gX1NfY2hhcnNbMTNdOworCisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KKwlz dGF0aWMgYXV0bworCV9TX3RpbWVfc2luY2VfbWlkbmlnaHQoY29uc3QgX1RwJiBfX3QpCisJewor CSAgdXNpbmcgOjpzdGQ6OmNocm9ubzo6X19kZXRhaWw6Ol9fbG9jYWxfdGltZV9mbXQ7CisJICBp ZiBjb25zdGV4cHIgKGNocm9ubzo6X19pc19kdXJhdGlvbl92PF9UcD4pCisJICAgIHJldHVybiBf X3Q7CisJICBlbHNlIGlmIGNvbnN0ZXhwciAoY2hyb25vOjpfX2lzX3RpbWVfcG9pbnRfdjxfVHA+ KQorCSAgICByZXR1cm4gX190IC0gY2hyb25vOjpmbG9vcjxjaHJvbm86OmRheXM+KF9fdCk7CisJ ICBlbHNlIGlmIGNvbnN0ZXhwciAoX19pc19zcGVjaWFsaXphdGlvbl9vZjxfVHAsIF9fbG9jYWxf dGltZV9mbXQ+KQorCSAgICByZXR1cm4gX190Ll9NX3RpbWUgLSBjaHJvbm86OmZsb29yPGNocm9u bzo6ZGF5cz4oX190Ll9NX3RpbWUpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgorCXN0YXRpYyBhdXRvCisJX1NfeW1kX2htcyhjb25zdCBfVHAmIF9fdCkKKwl7CisJICBpZiBj b25zdGV4cHIgKGNocm9ubzo6X19pc19kdXJhdGlvbl92PF9UcD4pCisJICAgIF9fbm90X3ZhbGlk X2Zvcl9kdXJhdGlvbigpOworCSAgLy8gVE9ETzogaGFuZGxlIF9fbG9jYWxfdGltZV9mbXQ/CisK KwkgIGNvbnN0IGF1dG8gX19kYXlzID0gY2hyb25vOjpmbG9vcjxjaHJvbm86OmRheXM+KF9fdCk7 CisJICBjb25zdCBhdXRvIF9feW1kID0gY2hyb25vOjp5ZWFyX21vbnRoX2RheXtfX2RheXN9Owor CSAgY29uc3QgYXV0byBfX2htcyA9IGNocm9ubzo6aGhfbW1fc3N7X190IC0gX19kYXlzfTsKKwkg IHJldHVybiBwYWlyKF9feW1kLCBfX2htcyk7CisJfQorCisKKyAgICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRl eHQ6Oml0ZXJhdG9yCisJX01fYV9BKGNvbnN0IF9UcCYgX190LCB0eXBlbmFtZSBfRm9ybWF0Q29u dGV4dDo6aXRlcmF0b3IgX19vdXQsCisJICAgICAgIF9Gb3JtYXRDb250ZXh0JiBfX2N0eCwgYm9v bCBfX2Z1bGwpIGNvbnN0CisJeworCSAgaWYgY29uc3RleHByIChjaHJvbm86Ol9faXNfZHVyYXRp b25fdjxfVHA+KQorCSAgICBfX25vdF92YWxpZF9mb3JfZHVyYXRpb24oKTsKKwl9CisKKyAgICAg IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ+CisJdHlwZW5h bWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yCisJX01fYl9CKGNvbnN0IF9UcCYgX190LCB0eXBl bmFtZSBfRm9ybWF0Q29udGV4dDo6aXRlcmF0b3IgX19vdXQsCisJICAgICAgIF9Gb3JtYXRDb250 ZXh0JiBfX2N0eCwgYm9vbCBfX2Z1bGwpIGNvbnN0CisJeworCSAgaWYgY29uc3RleHByIChjaHJv bm86Ol9faXNfZHVyYXRpb25fdjxfVHA+KQorCSAgICBfX25vdF92YWxpZF9mb3JfZHVyYXRpb24o KTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Zvcm1hdENv bnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yCisJX01fYyhjb25zdCBf VHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yIF9fb3V0LAorCSAgICAg X0Zvcm1hdENvbnRleHQmIF9fY3R4LCBib29sIF9fbW9kID0gZmFsc2UpIGNvbnN0CisJeworCSAg aWYgY29uc3RleHByIChjaHJvbm86Ol9faXNfZHVyYXRpb25fdjxfVHA+KQorCSAgICBfX25vdF92 YWxpZF9mb3JfZHVyYXRpb24oKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg dHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJh dG9yCisJX01fQyhjb25zdCBfVHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJh dG9yIF9fb3V0LAorCSAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4LCBib29sIF9fbW9kID0gZmFs c2UpIGNvbnN0CisJeworCSAgaWYgY29uc3RleHByIChjaHJvbm86Ol9faXNfZHVyYXRpb25fdjxf VHA+KQorCSAgICBfX25vdF92YWxpZF9mb3JfZHVyYXRpb24oKTsKKwl9CisKKyAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ+CisJdHlwZW5hbWUgX0Zv cm1hdENvbnRleHQ6Oml0ZXJhdG9yCisJX01fZChjb25zdCBfVHAmIF9fdCwgdHlwZW5hbWUgX0Zv cm1hdENvbnRleHQ6Oml0ZXJhdG9yIF9fb3V0LAorCSAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4 LCBib29sIF9fbW9kID0gZmFsc2UpIGNvbnN0CisJeworCSAgaWYgY29uc3RleHByIChjaHJvbm86 Ol9faXNfZHVyYXRpb25fdjxfVHA+KQorCSAgICBfX25vdF92YWxpZF9mb3JfZHVyYXRpb24oKTsK Kwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRl eHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yCisJX01fRChjb25zdCBfVHAm IF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yIF9fb3V0LAorCSAgICAgX0Zv cm1hdENvbnRleHQmIF9fY3R4KSBjb25zdAorCXsKKwkgIF9fb3V0ID0gX01fbShfX3QsIHN0ZDo6 bW92ZShfX291dCksIF9fY3R4KTsKKwkgIF9fZm9ybWF0OjpfX3dyaXRlKHN0ZDo6bW92ZShfX291 dCksIF9TX3NsYXNoKTsKKwkgIF9fb3V0ID0gX01fZChfX3QsIHN0ZDo6bW92ZShfX291dCksIF9f Y3R4KTsKKwkgIF9fZm9ybWF0OjpfX3dyaXRlKHN0ZDo6bW92ZShfX291dCksIF9TX3NsYXNoKTsK KwkgIF9fb3V0ID0gX01feShfX3QsIHN0ZDo6bW92ZShfX291dCksIF9fY3R4KTsKKwl9CisKKyAg ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ+CisJdHlw ZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yCisJX01fZShjb25zdCBfVHAmIF9fdCwgdHlw ZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yIF9fb3V0LAorCSAgICAgX0Zvcm1hdENvbnRl eHQmIF9fY3R4LCBib29sIF9fbW9kID0gZmFsc2UpIGNvbnN0CisJeworCSAgaWYgY29uc3RleHBy IChjaHJvbm86Ol9faXNfZHVyYXRpb25fdjxfVHA+KQorCSAgICBfX25vdF92YWxpZF9mb3JfZHVy YXRpb24oKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Zv cm1hdENvbnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yCisJX01fRihj b25zdCBfVHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yIF9fb3V0LAor CSAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4KSBjb25zdAorCXsKKwkgIF9fb3V0ID0gX01fWShf X3QsIHN0ZDo6bW92ZShfX291dCksIF9fY3R4KTsKKwkgIF9fZm9ybWF0OjpfX3dyaXRlKHN0ZDo6 bW92ZShfX291dCksIF9TX3BsdXNfbWludXNbMV0pOworCSAgX19vdXQgPSBfTV9tKF9fdCwgc3Rk Ojptb3ZlKF9fb3V0KSwgX19jdHgpOworCSAgX19mb3JtYXQ6Ol9fd3JpdGUoc3RkOjptb3ZlKF9f b3V0KSwgX1NfcGx1c19taW51c1sxXSk7CisJICBfX291dCA9IF9NX2QoX190LCBzdGQ6Om1vdmUo X19vdXQpLCBfX2N0eCk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9Gb3JtYXRDb250ZXh0PgorCXR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvcgor CV9NX2dfRyhjb25zdCBfVHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9y IF9fb3V0LAorCSAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4LCBib29sIF9fZnVsbCkgY29uc3QK Kwl7CisJICBpZiBjb25zdGV4cHIgKGNocm9ubzo6X19pc19kdXJhdGlvbl92PF9UcD4pCisJICAg IF9fbm90X3ZhbGlkX2Zvcl9kdXJhdGlvbigpOworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwLCB0eXBlbmFtZSBfRm9ybWF0Q29udGV4dD4KKwl0eXBlbmFtZSBfRm9ybWF0Q29udGV4 dDo6aXRlcmF0b3IKKwlfTV9IKGNvbnN0IF9UcCYgX190LCB0eXBlbmFtZSBfRm9ybWF0Q29udGV4 dDo6aXRlcmF0b3IgX19vdXQsCisJICAgICBfRm9ybWF0Q29udGV4dCYgX19jdHgsIGJvb2wgX19t b2QgPSBmYWxzZSkgY29uc3QKKwl7CisJICBhdXRvIF9feCA9IF9TX3RpbWVfc2luY2VfbWlkbmln aHQoX190KTsKKwkgIGlmIChfX21vZCkKKwkgICAgeworCSAgICAgIC8vIFRPRE86IGxvY2FsZSdz IGFsdGVybmF0aXZlIHJlcHJlc2VudGF0aW9uCisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAg ICB9CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Gb3JtYXRD b250ZXh0PgorCXR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvcgorCV9NX0koY29uc3Qg X1RwJiBfX3QsIHR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvciBfX291dCwKKwkgICAg IF9Gb3JtYXRDb250ZXh0JiBfX2N0eCwgYm9vbCBfX21vZCA9IGZhbHNlKSBjb25zdAorCXsKKwkg IGF1dG8gX194ID0gX1NfdGltZV9zaW5jZV9taWRuaWdodChfX3QpOworCSAgYXV0byBfX2ggPSBj aHJvbm86OmR1cmF0aW9uX2Nhc3Q8Y2hyb25vOjpob3Vycz4oX194KTsKKwkgIGlmIChfX21vZCkK KwkgICAgeworCSAgICAgIC8vIFRPRE86IGxvY2FsZSdzIGFsdGVybmF0aXZlIHJlcHJlc2VudGF0 aW9uCisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIF9DaGFyVCBfX2J1ZlsyXTsKKwkg ICAgfQorCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRm9ybWF0 Q29udGV4dD4KKwl0eXBlbmFtZSBfRm9ybWF0Q29udGV4dDo6aXRlcmF0b3IKKwlfTV9qKGNvbnN0 IF9UcCYgX190LCB0eXBlbmFtZSBfRm9ybWF0Q29udGV4dDo6aXRlcmF0b3IgX19vdXQsCisJICAg ICBfRm9ybWF0Q29udGV4dCYgX19jdHgpIGNvbnN0CisJeworCSAgaW50IF9fZDsKKwkgIGlmIGNv bnN0ZXhwciAoY2hyb25vOjpfX2lzX2R1cmF0aW9uX3Y8X1RwPikKKwkgICAgX19kID0gY2hyb25v OjpkdXJhdGlvbl9jYXN0PGNocm9ubzo6ZGF5cz4oX190KS5jb3VudCgpOworCSAgZWxzZQorCSAg ICB7CisJICAgIH0KKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg X0Zvcm1hdENvbnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yCisJX01f bShjb25zdCBfVHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yIF9fb3V0 LAorCSAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4LCBib29sIF9fbW9kID0gZmFsc2UpIGNvbnN0 CisJeworCSAgaWYgY29uc3RleHByIChjaHJvbm86Ol9faXNfZHVyYXRpb25fdjxfVHA+KQorCSAg ICBfX25vdF92YWxpZF9mb3JfZHVyYXRpb24oKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9UcCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRl eHQ6Oml0ZXJhdG9yCisJX01fTShjb25zdCBfVHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRl eHQ6Oml0ZXJhdG9yIF9fb3V0LAorCSAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4LCBib29sIF9f bW9kID0gZmFsc2UpIGNvbnN0CisJeworCSAgaWYgY29uc3RleHByIChjaHJvbm86Ol9faXNfZHVy YXRpb25fdjxfVHA+KQorCSAgICBfX25vdF92YWxpZF9mb3JfZHVyYXRpb24oKTsKKwl9CisKKyAg ICAgIC8vICVuIGhhbmRsZWQgaW4gX01fZm9ybWF0CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6 Oml0ZXJhdG9yCisJX01fcChjb25zdCBfVHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6 Oml0ZXJhdG9yIF9fb3V0LAorCSAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4KSBjb25zdAorCXsK KwkgIGlmIGNvbnN0ZXhwciAoY2hyb25vOjpfX2lzX2R1cmF0aW9uX3Y8X1RwPikKKwkgICAgX19u b3RfdmFsaWRfZm9yX2R1cmF0aW9uKCk7CisJfQorCisgICAgICAvLyAlcSBhbmQgJVEgaGFuZGxl ZCBpbiBfTV9mb3JtYXQKKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf Rm9ybWF0Q29udGV4dD4KKwl0eXBlbmFtZSBfRm9ybWF0Q29udGV4dDo6aXRlcmF0b3IKKwlfTV9y KGNvbnN0IF9UcCYgX190LCB0eXBlbmFtZSBfRm9ybWF0Q29udGV4dDo6aXRlcmF0b3IgX19vdXQs CisJICAgICBfRm9ybWF0Q29udGV4dCYgX19jdHgpIGNvbnN0CisJeworCSAgaWYgY29uc3RleHBy IChjaHJvbm86Ol9faXNfZHVyYXRpb25fdjxfVHA+KQorCSAgICB7CisJICAgIH0KKwkgIGVsc2UK KwkgICAgeworCSAgICB9CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9Gb3JtYXRDb250ZXh0PgorCXR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvcgor CV9NX1IoY29uc3QgX1RwJiBfX3QsIHR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvciBf X291dCwKKwkgICAgIF9Gb3JtYXRDb250ZXh0JiBfX2N0eCkgY29uc3QKKwl7CisJICBfX291dCA9 IF9NX0goX190LCBzdGQ6Om1vdmUoX19vdXQpLCBfX2N0eCk7CisJICBfX2Zvcm1hdDo6X193cml0 ZShzdGQ6Om1vdmUoX19vdXQpLCBfU19jb2xvbik7CisJICByZXR1cm4gX01fTShfX3QsIHN0ZDo6 bW92ZShfX291dCksIF9fY3R4KTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg dHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJh dG9yCisJX01fUyhjb25zdCBfVHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJh dG9yIF9fb3V0LAorCSAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4LCBib29sIF9fbW9kID0gZmFs c2UpIGNvbnN0CisJeworCSAgYXV0byBfX3ggPSBfU190aW1lX3NpbmNlX21pZG5pZ2h0KF9fdCk7 CisJICB1c2luZyBfWHJlcCA9IHR5cGVuYW1lIGRlY2x0eXBlKF9feCk6OnJlcDsKKwkgIGlmIGNv bnN0ZXhwciAoY2hyb25vOjp0cmVhdF9hc19mbG9hdGluZ19wb2ludF92PF9YcmVwPikKKwkgICAg eworCSAgICAgIC8vIFRPRE86IGxvY2FsZSdzIGFsdGVybmF0aXZlIHJlcAorCSAgICB9CisJICBl bHNlCisJICAgIHsKKwkgICAgICBhdXRvIF9fcyA9IGNocm9ubzo6ZHVyYXRpb25fY2FzdDxjaHJv bm86OnNlY29uZHM+KF9feCkuY291bnQoKTsKKwkgICAgICBfX3MgJT0gNjA7CisJICAgICAgX0No YXJUIF9fYnVmWzJdOworCSAgICAgIF9fYnVmWzBdID0gX1NfY2hhcnNbX19zIC8gMTBdOworCSAg ICAgIF9fYnVmWzFdID0gX1NfY2hhcnNbX19zICUgMTBdOworCSAgICAgIHJldHVybiBfX2Zvcm1h dDo6X193cml0ZShzdGQ6Om1vdmUoX19vdXQpLCB7X19idWYsIDJ9KTsKKwkgICAgfQorCX0KKwor ICAgICAgLy8gJXQgaGFuZGxlZCBpbiBfTV9mb3JtYXQKKworICAgICAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwLCB0eXBlbmFtZSBfRm9ybWF0Q29udGV4dD4KKwl0eXBlbmFtZSBfRm9ybWF0Q29udGV4 dDo6aXRlcmF0b3IKKwlfTV9UKGNvbnN0IF9UcCYgX190LCB0eXBlbmFtZSBfRm9ybWF0Q29udGV4 dDo6aXRlcmF0b3IgX19vdXQsCisJICAgICBfRm9ybWF0Q29udGV4dCYgX19jdHgpIGNvbnN0CisJ eworCSAgX19vdXQgPSBfTV9IKF9fdCwgc3RkOjptb3ZlKF9fb3V0KSwgX19jdHgpOworCSAgX19m b3JtYXQ6Ol9fd3JpdGUoc3RkOjptb3ZlKF9fb3V0KSwgX1NfY29sb24pOworCSAgX19vdXQgPSBf TV9NKF9fdCwgc3RkOjptb3ZlKF9fb3V0KSwgX19jdHgpOworCSAgX19mb3JtYXQ6Ol9fd3JpdGUo c3RkOjptb3ZlKF9fb3V0KSwgX1NfY29sb24pOworCSAgcmV0dXJuIF9NX1MoX190LCBzdGQ6Om1v dmUoX19vdXQpLCBfX2N0eCk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5 cGVuYW1lIF9Gb3JtYXRDb250ZXh0PgorCXR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRv cgorCV9NX3UoY29uc3QgX1RwJiBfX3QsIHR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRv ciBfX291dCwKKwkgICAgIF9Gb3JtYXRDb250ZXh0JiBfX2N0eCwgYm9vbCBfX21vZCA9IGZhbHNl KSBjb25zdAorCXsKKwkgIC8vIElTTyB3ZWVrZGF5IGFzIGEgZGVjaW1hbCBudW1iZXIgKDEtNyks IHdoZXJlIE1vbmRheSBpcyAxLgorCSAgaWYgKF9fbW9kKQorCSAgICB7CisJICAgICAgLy8gVE9E TzogbG9jYWxlJ3MgYWx0IHJlcAorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvLyBU T0RPCisJICAgIH0KKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg X0Zvcm1hdENvbnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yCisJX01f VShjb25zdCBfVHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yIF9fb3V0 LAorCSAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4LCBib29sIF9fbW9kID0gZmFsc2UpIGNvbnN0 CisJeworCSAgLy8gV2VlayBudW1iZXIgb2YgdGhlIHllYXIgYXMgYSBkZWNpbWFsIG51bWJlci4K KwkgIGlmIChfX21vZCkKKwkgICAgeworCSAgICAgIC8vIFRPRE86IGxvY2FsZSdzIGFsdCByZXAK KwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLy8gVE9ETworCSAgICB9CisJfQorCisg ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0PgorCXR5 cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvcgorCV9NX1YoY29uc3QgX1RwJiBfX3QsIHR5 cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvciBfX291dCwKKwkgICAgIF9Gb3JtYXRDb250 ZXh0JiBfX2N0eCwgYm9vbCBfX21vZCA9IGZhbHNlKSBjb25zdAorCXsKKwkgIC8vIElTTyB3ZWVr LWJhc2VkIHdlZWsgbnVtYmVyIGFzIGEgZGVjaW1hbCBudW1iZXIuCisJICBpZiAoX19tb2QpCisJ ICAgIHsKKwkgICAgICAvLyBUT0RPOiBsb2NhbGUncyBhbHQgcmVwCisJICAgIH0KKwkgIGVsc2UK KwkgICAgeworCSAgICAgIC8vIFRPRE8KKwkgICAgfQorCX0KKworICAgICAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCB0eXBlbmFtZSBfRm9ybWF0Q29udGV4dD4KKwl0eXBlbmFtZSBfRm9ybWF0Q29u dGV4dDo6aXRlcmF0b3IKKwlfTV93KGNvbnN0IF9UcCYgX190LCB0eXBlbmFtZSBfRm9ybWF0Q29u dGV4dDo6aXRlcmF0b3IgX19vdXQsCisJICAgICBfRm9ybWF0Q29udGV4dCYgX19jdHgsIGJvb2wg X19tb2QgPSBmYWxzZSkgY29uc3QKKwl7CisJICAvLyBXZWVrZGF5IGFzIGEgZGVjaW1hbCBudW1i ZXIgKDAtNiksIHdoZXJlIFN1bmRheSBpcyAwLgorCSAgaWYgKF9fbW9kKQorCSAgICB7CisJICAg ICAgLy8gVE9ETzogbG9jYWxlJ3MgYWx0IHJlcAorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkg ICAgICAvLyBUT0RPCisJICAgIH0KKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg dHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJh dG9yCisJX01fVyhjb25zdCBfVHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJh dG9yIF9fb3V0LAorCSAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4LCBib29sIF9fbW9kID0gZmFs c2UpIGNvbnN0CisJeworCSAgLy8gV2VlayBudW1iZXIgb2YgdGhlIHllYXIgYXMgYSBkZWNpbWFs IG51bWJlci4KKwkgIGlmIChfX21vZCkKKwkgICAgeworCSAgICAgIC8vIFRPRE86IGxvY2FsZSdz IGFsdCByZXAKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgLy8gVE9ETworCSAgICB9 CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Gb3JtYXRDb250 ZXh0PgorCXR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvcgorCV9NX3goY29uc3QgX1Rw JiBfX3QsIHR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvciBfX291dCwKKwkgICAgIF9G b3JtYXRDb250ZXh0JiBfX2N0eCwgYm9vbCBfX21vZCA9IGZhbHNlKSBjb25zdAorCXsKKwkgIC8v IExvY2FsZSdzIGRhdGUgcmVwCisJICBpZiAoX19tb2QpCisJICAgIHsKKwkgICAgICAvLyBUT0RP OiBsb2NhbGUncyBhbHQgcmVwCisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8vIFRP RE8KKwkgICAgfQorCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf Rm9ybWF0Q29udGV4dD4KKwl0eXBlbmFtZSBfRm9ybWF0Q29udGV4dDo6aXRlcmF0b3IKKwlfTV9Y KGNvbnN0IF9UcCYgX190LCB0eXBlbmFtZSBfRm9ybWF0Q29udGV4dDo6aXRlcmF0b3IgX19vdXQs CisJICAgICBfRm9ybWF0Q29udGV4dCYgX19jdHgsIGJvb2wgX19tb2QgPSBmYWxzZSkgY29uc3QK Kwl7CisJICAvLyBMb2NhbGUncyB0aW1lIHJlcAorCSAgaWYgKF9fbW9kKQorCSAgICB7CisJICAg ICAgLy8gVE9ETzogbG9jYWxlJ3MgYWx0IHJlcAorCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkg ICAgICAvLyBUT0RPCisJICAgIH0KKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwg dHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJh dG9yCisJX01feShjb25zdCBfVHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJh dG9yIF9fb3V0LAorCSAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4LCBjaGFyIF9fbW9kID0gMCkg Y29uc3QKKwl7CisJICAvLyBMYXN0IHR3byBkZWNpbWFsIGRpZ2l0cyBvZiB0aGUgeWVhci4KKwkg IGlmIGNvbnN0ZXhwciAoY2hyb25vOjpfX2lzX2R1cmF0aW9uX3Y8X1RwPikKKwkgICAgX19ub3Rf dmFsaWRfZm9yX2R1cmF0aW9uKCk7CisJICBpZiAoX19tb2QgPT0gJ08nKQorCSAgICB7CisJICAg ICAgLy8gVE9ETzogbG9jYWxlJ3MgYWx0IHJlcAorCSAgICB9CisJICBlbHNlIGlmIChfX21vZCA9 PSAnRScpCisJICAgIHsKKwkgICAgICAvLyBUT0RPOiBsb2NhbGUncyBhbHQgcmVwIG9mIG9mZnNl dCBmcm9tICVFQworCSAgICB9CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvLyBUT0RPCisJICAg IH0KKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Zvcm1hdENv bnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yCisJX01fWShjb25zdCBf VHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yIF9fb3V0LAorCSAgICAg X0Zvcm1hdENvbnRleHQmIF9fY3R4LCBib29sIF9fbW9kID0gZmFsc2UpIGNvbnN0CisJeworCSAg Ly8gWWVhciBhcyBhIGRlY2ltYWwgbnVtYmVyLgorCSAgaWYgY29uc3RleHByIChjaHJvbm86Ol9f aXNfZHVyYXRpb25fdjxfVHA+KQorCSAgICBfX25vdF92YWxpZF9mb3JfZHVyYXRpb24oKTsKKwkg IGlmIChfX21vZCkKKwkgICAgeworCSAgICAgIC8vIFRPRE86IGxvY2FsZSdzIGFsdCBmdWxsIHll YXIgcmVwCisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8vIFRPRE8KKwkgICAgfQor CX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfRm9ybWF0Q29udGV4 dD4KKwl0eXBlbmFtZSBfRm9ybWF0Q29udGV4dDo6aXRlcmF0b3IKKwlfTV96KGNvbnN0IF9UcCYg X190LCB0eXBlbmFtZSBfRm9ybWF0Q29udGV4dDo6aXRlcmF0b3IgX19vdXQsCisJICAgICBfRm9y bWF0Q29udGV4dCYgX19jdHgsIGJvb2wgX19tb2QgPSBmYWxzZSkgY29uc3QKKwl7CisJICB1c2lu ZyA6OnN0ZDo6Y2hyb25vOjpfX2RldGFpbDo6X19sb2NhbF90aW1lX2ZtdDsKKworCSAgaW50IF9f bmVnID0gMCwgX19oaCA9IDAsIF9fbW0gPSAwOworCSAgaWYgY29uc3RleHByIChjaHJvbm86Ol9f aXNfdGltZV9wb2ludF92PF9UcD4pCisJICAgIHsKKwkgICAgICB1c2luZyBfQ2xvY2sgPSB0eXBl bmFtZSBfVHA6OmNsb2NrOworCSAgICAgIGlmIGNvbnN0ZXhwciAoaXNfc2FtZV92PF9DbG9jaywg Y2hyb25vOjpzeXN0ZW1fY2xvY2s+CisJCQkgICAgICB8fCBpc19zYW1lX3Y8X0Nsb2NrLCBjaHJv bm86OnV0Y19jbG9jaz4KKwkJCSAgICAgIHx8IGlzX3NhbWVfdjxfQ2xvY2ssIGNocm9ubzo6dGFp X2Nsb2NrPgorCQkJICAgICAgfHwgaXNfc2FtZV92PF9DbG9jaywgY2hyb25vOjpncHNfY2xvY2s+ KQorCQlfX25lZyA9IF9faGggPSBfX21tID0gMDsKKwkgICAgICBlbHNlCisJCV9fbm9fdGltZXpv bmVfYXZhaWxhYmxlKCk7CisJICAgIH0KKwkgIGVsc2UgaWYgY29uc3RleHByIChfX2lzX3NwZWNp YWxpemF0aW9uX29mPF9UcCwgX19sb2NhbF90aW1lX2ZtdD4pCisJICAgIHsKKwkgICAgICBpZiAo IV9fdC5fTV9vZmZzZXRfc2VjKQorCQlfX25vX3RpbWV6b25lX2F2YWlsYWJsZSgpOworCisJICAg ICAgY2hyb25vOjpzZWNvbmRzIF9fcyA9IGNocm9ubzo6YWJzKCpfX3QuX01fb2Zmc2V0X3NlYyk7 CisJICAgICAgYXV0byBfX2hvdXJzID0gY2hyb25vOjpkdXJhdGlvbl9jYXN0PGNocm9ubzo6aG91 cnM+KF9fcyk7CisJICAgICAgYXV0byBfX21pbnV0ZXMgPSBjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8 Y2hyb25vOjptaW51dGVzPihfX3MpOworCSAgICAgIF9fbW0gPSAoX19taW51dGVzIC0gX19ob3Vy cykuY291bnQoKTsKKwkgICAgICBfX2hoID0gX19ob3Vycy5jb3VudCgpOworCSAgICB9CisJICBl bHNlCisJICAgIF9fbm9fdGltZXpvbmVfYXZhaWxhYmxlKCk7CisKKwkgIF9DaGFyVCBfX2J1Zls2 XSA9IHsKKwkgICAgX1NfcGx1c19taW51c1tfX25lZ10sIF9TX2NoYXJzW19faGggLyAxMF0sIF9T X2NoYXJzW19faGggJSAxMF0KKwkgIH07CisJICBfX2J1ZlszXSA9IF9TX2NvbG9uOworCSAgX19i dWZbMyArIF9fbW9kXSA9IF9TX2NoYXJzW19fbW0gLyAxMF07CisJICBfX2J1Zls0ICsgX19tb2Rd ID0gX1NfY2hhcnNbX19tbSAlIDEwXTsKKwkgIHJldHVybiBfX2Zvcm1hdDo6X193cml0ZShzdGQ6 Om1vdmUoX19vdXQpLCB7X19idWYsIDV1ICsgX19tb2R9KTsKKwl9CisKKyAgICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ+CisJdHlwZW5hbWUgX0Zvcm1h dENvbnRleHQ6Oml0ZXJhdG9yCisJX01fWihjb25zdCBfVHAmIF9fdCwgdHlwZW5hbWUgX0Zvcm1h dENvbnRleHQ6Oml0ZXJhdG9yIF9fb3V0LAorCSAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4KSBj b25zdAorCXsKKwkgIHVzaW5nIDo6c3RkOjpjaHJvbm86Ol9fZGV0YWlsOjpfX2xvY2FsX3RpbWVf Zm10OworCisJICBiYXNpY19zdHJpbmdfdmlldzxfQ2hhclQ+IF9fYWJicmV2e251bGxwdHIsIDB9 OworCSAgaWYgY29uc3RleHByIChjaHJvbm86Ol9faXNfdGltZV9wb2ludF92PF9UcD4pCisJICAg IHsKKwkgICAgICBjb25zdCBfQ2hhclQqIF9fdXRjdGFpZ3BzID0gX0dMSUJDWFhfV0lERU4oIlVU Q1RBSUdQUyIpOworCisJICAgICAgdXNpbmcgX0Nsb2NrID0gdHlwZW5hbWUgX1RwOjpjbG9jazsK KwkgICAgICBpZiBjb25zdGV4cHIgKGlzX3NhbWVfdjxfQ2xvY2ssIGNocm9ubzo6c3lzdGVtX2Ns b2NrPgorCQkJICAgICAgfHwgaXNfc2FtZV92PF9DbG9jaywgY2hyb25vOjp1dGNfY2xvY2s+KQor CQlfX2FiYnJldiA9IHtfX3V0Y3RhaWdwcywgM307CisJICAgICAgZWxzZSBpZiBjb25zdGV4cHIg KGlzX3NhbWVfdjxfQ2xvY2ssIGNocm9ubzo6dGFpX2Nsb2NrPikKKwkJX19hYmJyZXYgPSB7X191 dGN0YWlncHMgKyAzLCAzfTsKKwkgICAgICBlbHNlIGlmIGNvbnN0ZXhwciAoaXNfc2FtZV92PF9D bG9jaywgY2hyb25vOjpncHNfY2xvY2s+KQorCQlfX2FiYnJldiA9IHtfX3V0Y3RhaWdwcyArIDYs IDN9OworCSAgICB9CisJICBlbHNlIGlmIGNvbnN0ZXhwciAoX19pc19zcGVjaWFsaXphdGlvbl9v ZjxfVHAsIF9fbG9jYWxfdGltZV9mbXQ+KQorCSAgICB7CisJICAgICAgaWYgKF9fdC5fTV9hYmJy ZXYpCisJCV9fYWJicmV2ID0gX190Ll9NX2FiYnJldjsgLy8gVE9ETzogd2lkZW4KKwkgICAgfQor CisJICBpZiAoIV9fYWJicmV2LmRhdGEoKSkKKwkgICAgX19ub190aW1lem9uZV9hdmFpbGFibGUo KTsKKworCSAgcmV0dXJuIF9fZm9ybWF0OjpfX3dyaXRlKHN0ZDo6bW92ZShfX291dCksIF9fYWJi cmV2KTsKKwl9CisKKyAgICAgIC8vICUlIGhhbmRsZWQgaW4gX01fZm9ybWF0CisKKyAgICAgIF9D aHJvbm9TcGVjPF9DaGFyVD4gX01fc3BlYzsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBfX2Zv cm1hdAorLy8vIEBlbmRjb25kCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX1JlcCwgdHlwZW5hbWUg X1BlcmlvZCwgdHlwZW5hbWUgX0NoYXJUPgorICAgIHN0cnVjdCBmb3JtYXR0ZXI8Y2hyb25vOjpk dXJhdGlvbjxfUmVwLCBfUGVyaW9kPiwgX0NoYXJUPgorICAgIHsKKyAgICAgIGNvbnN0ZXhwciB0 eXBlbmFtZSBiYXNpY19mb3JtYXRfcGFyc2VfY29udGV4dDxfQ2hhclQ+OjppdGVyYXRvcgorICAg ICAgcGFyc2UoYmFzaWNfZm9ybWF0X3BhcnNlX2NvbnRleHQ8X0NoYXJUPiYgX19wYykKKyAgICAg IHsKKwlhdXRvIF9faXQgPSBfTV9mLl9NX3BhcnNlKF9fcGMsIF9fZm9ybWF0OjpfVGltZU9mRGF5 KTsKKwlpZiBjb25zdGV4cHIgKCFpc19mbG9hdGluZ19wb2ludF92PF9SZXA+KQorCSAgaWYgKF9N X2YuX01fc3BlYy5fTV9wcmVjX2tpbmQgIT0gX19mb3JtYXQ6Ol9XUF9ub25lKQorCSAgICBfX3Ro cm93X2Zvcm1hdF9lcnJvcigiZm9ybWF0IGVycm9yOiBpbnZhbGlkIHByZWNpc2lvbiBmb3IgZHVy YXRpb24iKTsKKwlyZXR1cm4gX19pdDsKKyAgICAgIH0KKworICAgICAgdGVtcGxhdGU8dHlwZW5h bWUgX091dD4KKwl0eXBlbmFtZSBiYXNpY19mb3JtYXRfY29udGV4dDxfT3V0LCBfQ2hhclQ+Ojpp dGVyYXRvcgorCWZvcm1hdChjb25zdCBjaHJvbm86OmR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBf X2QsCisJICAgICAgIGJhc2ljX2Zvcm1hdF9jb250ZXh0PF9PdXQsIF9DaGFyVD4mIF9fZmMpIGNv bnN0CisJeworCSAgcmV0dXJuIF9NX2YuX01fZm9ybWF0KF9fZCwgX19mYyk7CisJfQorCisgICAg cHJpdmF0ZToKKyAgICAgIF9fZm9ybWF0OjpfX2Zvcm1hdHRlcl9jaHJvbm88X0NoYXJUPiBfTV9m OworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHN0cnVjdCBmb3Jt YXR0ZXI8Y2hyb25vOjpkYXksIF9DaGFyVD47CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K KyAgICBzdHJ1Y3QgZm9ybWF0dGVyPGNocm9ubzo6bW9udGgsIF9DaGFyVD47CisgIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzdHJ1Y3QgZm9ybWF0dGVyPGNocm9ubzo6eWVhciwgX0No YXJUPjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgc3RydWN0IGZvcm1hdHRl cjxjaHJvbm86OndlZWtkYXksIF9DaGFyVD4KKyAgICB7CisKKworCisgICAgcHJpdmF0ZToKKyAg ICAgIF9fZm9ybWF0OjpfX2Zvcm1hdHRlcl9jaHJvbm88X0NoYXJUPiBfTV9mOworICAgIH07CisK KworICAvLyBUT0RPIGRlZmluZSB0aGVzZQorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+Cisg ICAgc3RydWN0IGZvcm1hdHRlcjxjaHJvbm86OndlZWtkYXlfaW5kZXhlZCwgX0NoYXJUPjsKKyAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgorICAgIHN0cnVjdCBmb3JtYXR0ZXI8Y2hyb25vOjp3 ZWVrZGF5X2xhc3QsIF9DaGFyVD47CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBz dHJ1Y3QgZm9ybWF0dGVyPGNocm9ubzo6bW9udGhfZGF5LCBfQ2hhclQ+OworICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+CisgICAgc3RydWN0IGZvcm1hdHRlcjxjaHJvbm86Om1vbnRoX2RheV9s YXN0LCBfQ2hhclQ+OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgc3RydWN0IGZv cm1hdHRlcjxjaHJvbm86Om1vbnRoX3dlZWtkYXksIF9DaGFyVD47CisgIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KKyAgICBzdHJ1Y3QgZm9ybWF0dGVyPGNocm9ubzo6bW9udGhfd2Vla2RheV9s YXN0LCBfQ2hhclQ+OworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CisgICAgc3RydWN0IGZv cm1hdHRlcjxjaHJvbm86OnllYXJfbW9udGgsIF9DaGFyVD47CisgIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KKyAgICBzdHJ1Y3QgZm9ybWF0dGVyPGNocm9ubzo6eWVhcl9tb250aF9kYXksIF9D aGFyVD47CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzdHJ1Y3QgZm9ybWF0dGVy PGNocm9ubzo6eWVhcl9tb250aF9kYXlfbGFzdCwgX0NoYXJUPjsKKyAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgorICAgIHN0cnVjdCBmb3JtYXR0ZXI8Y2hyb25vOjp5ZWFyX21vbnRoX3dlZWtk YXksIF9DaGFyVD47CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzdHJ1Y3QgZm9y bWF0dGVyPGNocm9ubzo6eWVhcl9tb250aF93ZWVrZGF5X2xhc3QsIF9DaGFyVD47CisgIHRlbXBs YXRlPHR5cGVuYW1lIF9SZXAsIHR5cGVuYW1lIF9QZXJpb2QsIHR5cGVuYW1lIF9DaGFyVD4KKyAg ICBzdHJ1Y3QgZm9ybWF0dGVyPGNocm9ubzo6aGhfbW1fc3M8Y2hyb25vOjpkdXJhdGlvbjxfUmVw LCBfUGVyaW9kPj4sIF9DaGFyVD47CisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KKyAgICBz dHJ1Y3QgZm9ybWF0dGVyPGNocm9ubzo6c3lzX2luZm8sIF9DaGFyVD47CisgIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KKyAgICBzdHJ1Y3QgZm9ybWF0dGVyPGNocm9ubzo6bG9jYWxfaW5mbywg X0NoYXJUPjsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVyYXRpb24sIHR5cGVuYW1lIF9DaGFy VD4KKyAgICBzdHJ1Y3QgZm9ybWF0dGVyPGNocm9ubzo6c3lzX3RpbWU8X0R1cmF0aW9uPiwgX0No YXJUPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYXJzZUNvbnRleHQ+CisJY29u c3RleHByIHR5cGVuYW1lIF9QYXJzZUNvbnRleHQ6Oml0ZXJhdG9yCisJcGFyc2UoX1BhcnNlQ29u dGV4dCYgX19wYykKKwl7CisJICByZXR1cm4gX01fZi5fTV9wYXJzZShfX3BjLCBfX2Zvcm1hdDo6 X0RhdGVUaW1lKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0 PgorCXR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvcgorCWZvcm1hdChjb25zdCBjaHJv bm86OnN5c190aW1lPF9EdXJhdGlvbj4mIF9fdCwKKwkgICAgICAgX0Zvcm1hdENvbnRleHQmIF9f cGMpIGNvbnN0CisJeworCSAgcmV0dXJuIF9NX2YuX01fZm9ybWF0KF9fdCwgX19wYyk7CisJfQor CisgICAgcHJpdmF0ZToKKyAgICAgIF9fZm9ybWF0OjpfX2Zvcm1hdHRlcl9jaHJvbm88X0NoYXJU PiBfTV9mOworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1cmF0aW9uLCB0eXBlbmFt ZSBfQ2hhclQ+CisgICAgc3RydWN0IGZvcm1hdHRlcjxjaHJvbm86OnV0Y190aW1lPF9EdXJhdGlv bj4sIF9DaGFyVD4KKyAgICA6IF9fZm9ybWF0OjpfX2Zvcm1hdHRlcl9jaHJvbm88X0NoYXJUPgor ICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYXJzZUNvbnRleHQ+CisJY29uc3RleHBy IHR5cGVuYW1lIF9QYXJzZUNvbnRleHQ6Oml0ZXJhdG9yCisJcGFyc2UoX1BhcnNlQ29udGV4dCYg X19wYykKKwl7CisJICByZXR1cm4gX01fZi5fTV9wYXJzZShfX3BjLCBfX2Zvcm1hdDo6X0RhdGVU aW1lKTsKKwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0PgorCXR5 cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvcgorCWZvcm1hdChjb25zdCBjaHJvbm86OnV0 Y190aW1lPF9EdXJhdGlvbj4mIF9fdCwKKwkgICAgICAgX0Zvcm1hdENvbnRleHQmIF9fcGMpIGNv bnN0CisJeworCSAgcmV0dXJuIF9NX2YuX01fZm9ybWF0KF9fdCwgX19wYyk7CisJfQorCisgICAg cHJpdmF0ZToKKyAgICAgIF9fZm9ybWF0OjpfX2Zvcm1hdHRlcl9jaHJvbm88X0NoYXJUPiBfTV9m OworICAgIH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1cmF0aW9uLCB0eXBlbmFtZSBfQ2hh clQ+CisgICAgc3RydWN0IGZvcm1hdHRlcjxjaHJvbm86OnRhaV90aW1lPF9EdXJhdGlvbj4sIF9D aGFyVD4KKyAgICA6IF9fZm9ybWF0OjpfX2Zvcm1hdHRlcl9jaHJvbm88X0NoYXJUPgorICAgIHsK KyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYXJzZUNvbnRleHQ+CisJY29uc3RleHByIHR5cGVu YW1lIF9QYXJzZUNvbnRleHQ6Oml0ZXJhdG9yCisJcGFyc2UoX1BhcnNlQ29udGV4dCYgX19wYykK Kwl7CisJICByZXR1cm4gX01fZi5fTV9wYXJzZShfX3BjLCBfX2Zvcm1hdDo6X0RhdGVUaW1lKTsK Kwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0PgorCXR5cGVuYW1l IF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvcgorCWZvcm1hdChjb25zdCBjaHJvbm86OnRhaV90aW1l PF9EdXJhdGlvbj4mIF9fdCwKKwkgICAgICAgX0Zvcm1hdENvbnRleHQmIF9fcGMpIGNvbnN0CisJ eworCSAgcmV0dXJuIF9NX2YuX01fZm9ybWF0KF9fdCwgX19wYyk7CisJfQorCisgICAgcHJpdmF0 ZToKKyAgICAgIF9fZm9ybWF0OjpfX2Zvcm1hdHRlcl9jaHJvbm88X0NoYXJUPiBfTV9mOworICAg IH07CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1cmF0aW9uLCB0eXBlbmFtZSBfQ2hhclQ+Cisg ICAgc3RydWN0IGZvcm1hdHRlcjxjaHJvbm86Omdwc190aW1lPF9EdXJhdGlvbj4sIF9DaGFyVD4K KyAgICA6IF9fZm9ybWF0OjpfX2Zvcm1hdHRlcl9jaHJvbm88X0NoYXJUPgorICAgIHsKKyAgICAg IHRlbXBsYXRlPHR5cGVuYW1lIF9QYXJzZUNvbnRleHQ+CisJY29uc3RleHByIHR5cGVuYW1lIF9Q YXJzZUNvbnRleHQ6Oml0ZXJhdG9yCisJcGFyc2UoX1BhcnNlQ29udGV4dCYgX19wYykKKwl7CisJ ICByZXR1cm4gX01fZi5fTV9wYXJzZShfX3BjLCBfX2Zvcm1hdDo6X0RhdGVUaW1lKTsKKwl9CisK KyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0PgorCXR5cGVuYW1lIF9Gb3Jt YXRDb250ZXh0OjppdGVyYXRvcgorCWZvcm1hdChjb25zdCBjaHJvbm86Omdwc190aW1lPF9EdXJh dGlvbj4mIF9fdCwKKwkgICAgICAgX0Zvcm1hdENvbnRleHQmIF9fcGMpIGNvbnN0CisJeworCSAg cmV0dXJuIF9NX2YuX01fZm9ybWF0KF9fdCwgX19wYyk7CisJfQorCisgICAgcHJpdmF0ZToKKyAg ICAgIF9fZm9ybWF0OjpfX2Zvcm1hdHRlcl9jaHJvbm88X0NoYXJUPiBfTV9mOworICAgIH07CisK KyAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1cmF0aW9uLCB0eXBlbmFtZSBfQ2hhclQ+CisgICAgc3Ry dWN0IGZvcm1hdHRlcjxjaHJvbm86OmZpbGVfdGltZTxfRHVyYXRpb24+LCBfQ2hhclQ+CisgICAg eworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1BhcnNlQ29udGV4dD4KKwljb25zdGV4cHIgdHlw ZW5hbWUgX1BhcnNlQ29udGV4dDo6aXRlcmF0b3IKKwlwYXJzZShfUGFyc2VDb250ZXh0JiBfX3Bj KQorCXsKKwkgIHJldHVybiBfTV9mLl9NX3BhcnNlKF9fcGMsIF9fZm9ybWF0OjpfRGF0ZVRpbWUp OworCX0KKworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcm1hdENvbnRleHQ+CisJdHlwZW5h bWUgX0Zvcm1hdENvbnRleHQ6Oml0ZXJhdG9yCisJZm9ybWF0KGNvbnN0IGNocm9ubzo6ZmlsZV90 aW1lPF9EdXJhdGlvbj4mIF9fdCwKKwkgICAgICAgX0Zvcm1hdENvbnRleHQmIF9fY3R4KSBjb25z dAorCXsKKwkgIHVzaW5nIG5hbWVzcGFjZSBjaHJvbm87CisJICByZXR1cm4gX01fZi5fTV9mb3Jt YXQoY2xvY2tfY2FzdDxzeXN0ZW1fY2xvY2s+KF9fdCksIF9fY3R4KTsKKwl9CisKKyAgICBwcml2 YXRlOgorICAgICAgX19mb3JtYXQ6Ol9fZm9ybWF0dGVyX2Nocm9ubzxfQ2hhclQ+IF9NX2Y7Cisg ICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVyYXRpb24sIHR5cGVuYW1lIF9DaGFyVD4K KyAgICBzdHJ1Y3QgZm9ybWF0dGVyPGNocm9ubzo6bG9jYWxfdGltZTxfRHVyYXRpb24+LCBfQ2hh clQ+CisgICAgeworICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1BhcnNlQ29udGV4dD4KKwljb25z dGV4cHIgdHlwZW5hbWUgX1BhcnNlQ29udGV4dDo6aXRlcmF0b3IKKwlwYXJzZShfUGFyc2VDb250 ZXh0JiBfX3BjKQorCXsKKwkgIHJldHVybiBfTV9mLl9NX3BhcnNlKF9fcGMsIF9fZm9ybWF0Ojpf RGF0ZXxfX2Zvcm1hdDo6X1RpbWVPZkRheSk7CisJfQorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRm9ybWF0Q29udGV4dD4KKwl0eXBlbmFtZSBfRm9ybWF0Q29udGV4dDo6aXRlcmF0b3IKKwlm b3JtYXQoY29uc3QgY2hyb25vOjpsb2NhbF90aW1lPF9EdXJhdGlvbj4mIF9fdCwKKwkgICAgICAg X0Zvcm1hdENvbnRleHQmIF9fY3R4KSBjb25zdAorCXsKKwkgIHJldHVybiBfTV9mLl9NX2Zvcm1h dChfX3QsIF9fY3R4KTsKKwl9CisKKyAgICBwcml2YXRlOgorICAgICAgX19mb3JtYXQ6Ol9fZm9y bWF0dGVyX2Nocm9ubzxfQ2hhclQ+IF9NX2Y7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRHVyYXRpb24sIHR5cGVuYW1lIF9DaGFyVD4KKyAgICBzdHJ1Y3QgZm9ybWF0dGVyPGNocm9u bzo6X19kZXRhaWw6Ol9fbG9jYWxfdGltZV9mbXQ8X0R1cmF0aW9uPiwgX0NoYXJUPgorICAgIHsK KyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9QYXJzZUNvbnRleHQ+CisJY29uc3RleHByIHR5cGVu YW1lIF9QYXJzZUNvbnRleHQ6Oml0ZXJhdG9yCisJcGFyc2UoX1BhcnNlQ29udGV4dCYgX19wYykK Kwl7CisJICByZXR1cm4gX01fZi5fTV9wYXJzZShfX3BjLCBfX2Zvcm1hdDo6X0RhdGVUaW1lKTsK Kwl9CisKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0PgorCXR5cGVuYW1l IF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvcgorCWZvcm1hdChjb25zdCBjaHJvbm86Ol9fZGV0YWls OjpfX2xvY2FsX3RpbWVfZm10PF9EdXJhdGlvbj4mIF9fdCwKKwkgICAgICAgX0Zvcm1hdENvbnRl eHQmIF9fY3R4KSBjb25zdAorCXsKKwkgIHJldHVybiBfTV9mLl9NX2Zvcm1hdChfX3QsIF9fY3R4 KTsKKwl9CisKKyAgICBwcml2YXRlOgorICAgICAgX19mb3JtYXQ6Ol9fZm9ybWF0dGVyX2Nocm9u bzxfQ2hhclQ+IF9NX2Y7CisgICAgfTsKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVyYXRpb24s IHR5cGVuYW1lIF9UaW1lWm9uZVB0ciwgdHlwZW5hbWUgX0NoYXJUPgorICAgIHN0cnVjdCBmb3Jt YXR0ZXI8Y2hyb25vOjp6b25lZF90aW1lPF9EdXJhdGlvbiwgX1RpbWVab25lUHRyPiwgX0NoYXJU PgorICAgIDogZm9ybWF0dGVyPGNocm9ubzo6X19kZXRhaWw6Ol9fbG9jYWxfdGltZV9mbXQ8X0R1 cmF0aW9uPiwgX0NoYXJUPgorICAgIHsKKyAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3JtYXRD b250ZXh0PgorCXR5cGVuYW1lIF9Gb3JtYXRDb250ZXh0OjppdGVyYXRvcgorCWZvcm1hdChjb25z dCBjaHJvbm86OnpvbmVkX3RpbWU8X0R1cmF0aW9uLCBfVGltZVpvbmVQdHI+JiBfX3RwLAorCSAg ICAgICBfRm9ybWF0Q29udGV4dCYgX19jdHgpIGNvbnN0CisJeworCSAgdXNpbmcgY2hyb25vOjpf X2RldGFpbDo6X19sb2NhbF90aW1lX2ZtdDsKKwkgIHVzaW5nIF9CYXNlID0gZm9ybWF0dGVyPF9f bG9jYWxfdGltZV9mbXQ8X0R1cmF0aW9uPiwgX0NoYXJUPjsKKwkgIGNvbnN0IGNocm9ubzo6c3lz X2luZm8gX19pbmZvID0gX190cC5nZXRfaW5mbygpOworCSAgcmV0dXJuIF9CYXNlOjpmb3JtYXQo e19fdHAuZ2V0X2xvY2FsX3RpbWUoKSwgJl9faW5mby5hYmJyZXYsCisJCQkJJl9faW5mby5vZmZz ZXR9LCBfX2N0eCk7CisJfQorICAgIH07CisKK25hbWVzcGFjZSBjaHJvbm8KK3sKKy8vLyBAYWRk dG9ncm91cCBjaHJvbm8KKy8vLyBAeworCisgIC8vIFRPRE86IGZyb21fc3RyZWFtIGZvciBkdXJh dGlvbgorI2lmIDAKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfUmVwLCB0eXBlbmFtZSBfUGVyaW9kLAorCSAgIHR5cGVuYW1lIF9BbGxvYyA9 IGFsbG9jYXRvcjxfQ2hhclQ+PgorICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK KyAgICBmcm9tX3N0cmVhbShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsIGNv bnN0IF9DaGFyVCogX19mbXQsCisJCWR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBfX2QsCisJCWJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4qIF9fYWJicmV2ID0gbnVsbHB0ciwK KwkJbWludXRlcyogX19vZmZzZXQgPSBudWxscHRyKQorICAgIHsKKyAgICB9CisjZW5kaWYKKwor ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5l IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywgY29uc3QgZGF5JiBfX2QpCisgICAgeworICAg ICAgdXNpbmcgX0N0eCA9IF9fY29uZGl0aW9uYWxfdDxpc19zYW1lX3Y8X0NoYXJULCBjaGFyPiwK KwkJCQkgICBmb3JtYXRfY29udGV4dCwgd2Zvcm1hdF9jb250ZXh0PjsKKyAgICAgIHVzaW5nIF9T dHIgPSBiYXNpY19zdHJpbmdfdmlldzxfQ2hhclQ+OworICAgICAgX1N0ciBfX3MgPSBfR0xJQkNY WF9XSURFTigiezolMDJkfSBpcyBub3QgYSB2YWxpZCBkYXkiKTsKKyAgICAgIGlmIChfX2Qub2so KSkKKwlfX3MgPSBfX3Muc3Vic3RyKDAsIDcpOworICAgICAgX19vcyA8PCBzdGQ6OnZmb3JtYXQo X19zLCBtYWtlX2Zvcm1hdF9hcmdzPF9DdHg+KCh1bnNpZ25lZClfX2QpKTsKKyAgICAgIHJldHVy biBfX29zOworICAgIH0KKworICAvLyBUT0RPIGZyb21fc3RyZWFtIGZvciBkYXkKKworICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYgX19vcywgY29uc3QgbW9udGgmIF9fbSkKKyAgICB7CisgICAgICB1 c2luZyBfQ3R4ID0gX19jb25kaXRpb25hbF90PGlzX3NhbWVfdjxfQ2hhclQsIGNoYXI+LAorCQkJ CSAgIGZvcm1hdF9jb250ZXh0LCB3Zm9ybWF0X2NvbnRleHQ+OworICAgICAgdXNpbmcgX1N0ciA9 IGJhc2ljX3N0cmluZ192aWV3PF9DaGFyVD47CisgICAgICBfU3RyIF9fcyA9IF9HTElCQ1hYX1dJ REVOKCJ7OkwlYn17fSBpcyBub3QgYSB2YWxpZCBtb250aCIpOworICAgICAgaWYgKF9fbS5vaygp KQorCV9fb3MgPDwgc3RkOjp2Zm9ybWF0KF9fb3MuZ2V0bG9jKCksIF9fcy5zdWJzdHIoMCwgNiks CisJCQkgICAgIG1ha2VfZm9ybWF0X2FyZ3M8X0N0eD4oX19tKSk7CisgICAgICBlbHNlCisJX19v cyA8PCBzdGQ6OnZmb3JtYXQoX19zLnN1YnN0cig2KSwKKwkJCSAgICAgbWFrZV9mb3JtYXRfYXJn czxfQ3R4PigodW5zaWduZWQpX19tKSk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAg Ly8gVE9ETyBmcm9tX3N0cmVhbSBmb3IgbW9udGgKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg X19vcywgY29uc3QgeWVhciYgX195KQorICAgIHsKKyAgICAgIHVzaW5nIF9DdHggPSBfX2NvbmRp dGlvbmFsX3Q8aXNfc2FtZV92PF9DaGFyVCwgY2hhcj4sCisJCQkJICAgZm9ybWF0X2NvbnRleHQs IHdmb3JtYXRfY29udGV4dD47CisgICAgICB1c2luZyBfU3RyID0gYmFzaWNfc3RyaW5nX3ZpZXc8 X0NoYXJUPjsKKyAgICAgIF9TdHIgX19zID0gX0dMSUJDWFhfV0lERU4oIns6JTA0ZH0gaXMgbm90 IGEgdmFsaWQgeWVhciIpOworICAgICAgaWYgKF9feS5vaygpKQorCV9fcyA9IF9fcy5zdWJzdHIo MCwgNyk7CisgICAgICBfX29zIDw8IHN0ZDo6dmZvcm1hdChfX3MsIG1ha2VfZm9ybWF0X2FyZ3M8 X0N0eD4oKGludClfX3kpKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICAvLyBUT0RP IGZyb21fc3RyZWFtIGZvciB5ZWFyCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIGNv bnN0IHdlZWtkYXkmIF9fd2QpCisgICAgeworICAgICAgdXNpbmcgX0N0eCA9IF9fY29uZGl0aW9u YWxfdDxpc19zYW1lX3Y8X0NoYXJULCBjaGFyPiwKKwkJCQkgICBmb3JtYXRfY29udGV4dCwgd2Zv cm1hdF9jb250ZXh0PjsKKyAgICAgIHVzaW5nIF9TdHIgPSBiYXNpY19zdHJpbmdfdmlldzxfQ2hh clQ+OworICAgICAgX1N0ciBfX3MgPSBfR0xJQkNYWF9XSURFTigiezpMJWF9e30gaXMgbm90IGEg dmFsaWQgd2Vla2RheSIpOworICAgICAgaWYgKF9fd2Qub2soKSkKKwlfX29zIDw8IHN0ZDo6dmZv cm1hdChfX29zLmdldGxvYygpLCBfX3Muc3Vic3RyKDAsIDYpLAorCQkJICAgICBtYWtlX2Zvcm1h dF9hcmdzPF9DdHg+KF9fd2QpKTsKKyAgICAgIGVsc2UKKwlfX29zIDw8IHN0ZDo6dmZvcm1hdChf X3Muc3Vic3RyKDYpLAorCQkJICAgICBtYWtlX2Zvcm1hdF9hcmdzPF9DdHg+KCh1bnNpZ25lZClf X3dkKSk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgLy8gVE9ETyBmcm9tX3N0cmVh bSBmb3Igd2Vla2RheQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9w ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBj b25zdCB3ZWVrZGF5X2luZGV4ZWQmIF9fd2RpKQorICAgIHsKKyAgICAgIC8vIFRoZSBzdGFuZGFy ZCBzYXlzIHRvIGZvcm1hdCB3ZGkud2Vla2RheSgpIGFuZCB3ZGkuaW5kZXgoKSB1c2luZworICAg ICAgLy8gZWl0aGVyICJ7Okx9W3t9XSIgb3IgIns6TH1be30gaXMgbm90IGEgdmFsaWQgaW5kZXhd Ii4gVGhlIHs6TH0gc3BlYworICAgICAgLy8gbWVhbnMgdG8gZm9ybWF0IHRoZSB3ZWVrZGF5IHVz aW5nIG9zdHJpbmdzdHJlYW0sIHNvIGp1c3QgZG8gdGhhdC4KKyAgICAgIGJhc2ljX3N0cmluZ3N0 cmVhbTxfQ2hhclQ+IF9fb3MyOworICAgICAgX19vczIuaW1idWUoX19vcy5nZXRsb2MpOworICAg ICAgX19vczIgPDwgX193ZGkud2Vla2RheSgpOworICAgICAgY29uc3QgYXV0byBfX2kgPSBfX3dk aS5pbmRleCgpOworICAgICAgaWYgY29uc3RleHByIChpc19zYW1lX3Y8X0NoYXJULCBjaGFyPikK KwlfX29zMiA8PCBzdGQ6OmZvcm1hdCgiW3t9IiwgX19pKTsKKyAgICAgIGVsc2UKKwlfX29zMiA8 PCBzdGQ6OmZvcm1hdChMIlt7fSIsIF9faSk7CisgICAgICBiYXNpY19zdHJpbmdfdmlldzxfQ2hh clQ+IF9fcyA9IF9HTElCQ1hYX1dJREVOKCIgaXMgbm90IGEgdmFsaWQgaW5kZXhdIik7CisgICAg ICBpZiAoX19pID49IDEgJiYgX19pIDw9IDUpCisJX19vczIgPDwgX19zLmJhY2soKTsKKyAgICAg IGVsc2UKKwlfX29zMiA8PCBfX3M7CisgICAgICBfX29zIDw8IF9fb3MyLnZpZXcoKTsKKyAgICAg IHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK KyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkg ICAgICAgY29uc3Qgd2Vla2RheV9sYXN0JiBfX3dkbCkKKyAgICB7CisgICAgICAvLyBBcyBhYm92 ZSwganVzdCB3cml0ZSBzdHJhaWdodCB0byBhIHN0cmluZ3N0cmVhbSwgYXMgaWYgYnkgIns6TH1b bGFzdF0iCisgICAgICBiYXNpY19zdHJpbmdzdHJlYW08X0NoYXJUPiBfX29zMjsKKyAgICAgIF9f b3MyLmltYnVlKF9fb3MuZ2V0bG9jKTsKKyAgICAgIF9fb3MyIDw8IF9fd2RsLndlZWtkYXkoKSA8 PCBfR0xJQkNYWF9XSURFTigiW2xhc3RdIik7CisgICAgICBfX29zIDw8IF9fb3MyLnZpZXcoKTsK KyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v cywgY29uc3QgbW9udGhfZGF5JiBfX21kKQorICAgIHsKKyAgICAgIC8vIEFzIGFib3ZlLCBqdXN0 IHdyaXRlIHN0cmFpZ2h0IHRvIGEgc3RyaW5nc3RyZWFtLCBhcyBpZiBieSAiezpMfS97fSIKKyAg ICAgIGJhc2ljX3N0cmluZ3N0cmVhbTxfQ2hhclQ+IF9fb3MyOworICAgICAgX19vczIuaW1idWUo X19vcy5nZXRsb2MpOworICAgICAgX19vczIgPDwgX19tZC5tb250aCgpOworICAgICAgaWYgY29u c3RleHByIChpc19zYW1lX3Y8X0NoYXJULCBjaGFyPikKKwlfX29zMiA8PCAnLyc7CisgICAgICBl bHNlCisJX19vczIgPDwgTCcvJzsKKyAgICAgIF9fb3MyIDw8IF9fbWQuZGF5KCk7CisgICAgICBf X29zIDw8IF9fb3MyLnZpZXcoKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICAvLyBU T0RPIGZyb21fc3RyZWFtIGZvciBtb250aF9kYXkKKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg X19vcywKKwkgICAgICAgY29uc3QgbW9udGhfZGF5X2xhc3QmIF9fbWRsKQorICAgIHsKKyAgICAg IC8vIEFzIGFib3ZlLCBqdXN0IHdyaXRlIHN0cmFpZ2h0IHRvIGEgc3RyaW5nc3RyZWFtLCBhcyBp ZiBieSAiezpMfS9sYXN0IgorICAgICAgYmFzaWNfc3RyaW5nc3RyZWFtPF9DaGFyVD4gX19vczI7 CisgICAgICBfX29zMi5pbWJ1ZShfX29zLmdldGxvYyk7CisgICAgICBfX29zMiA8PCBfX21kbC5t b250aCgpOworICAgICAgaWYgY29uc3RleHByIChpc19zYW1lX3Y8X0NoYXJULCBjaGFyPikKKwlf X29zMiA8PCAiL2xhc3QiOworICAgICAgZWxzZQorCV9fb3MyIDw8IEwiL2xhc3QiOworICAgICAg X19vcyA8PCBfX29zMi52aWV3KCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IG1vbnRoX3dlZWtkYXkmIF9f bXdkKQorICAgIHsKKyAgICAgIC8vIEFzIGFib3ZlLCBqdXN0IHdyaXRlIHN0cmFpZ2h0IHRvIGEg c3RyaW5nc3RyZWFtLCBhcyBpZiBieSAiezpMfS97Okx9IgorICAgICAgYmFzaWNfc3RyaW5nc3Ry ZWFtPF9DaGFyVD4gX19vczI7CisgICAgICBfX29zMi5pbWJ1ZShfX29zLmdldGxvYyk7CisgICAg ICBfX29zMiA8PCBfX213ZC5tb250aCgpOworICAgICAgaWYgY29uc3RleHByIChpc19zYW1lX3Y8 X0NoYXJULCBjaGFyPikKKwlfX29zMiA8PCAnLyc7CisgICAgICBlbHNlCisJX19vczIgPDwgTCcv JzsKKyAgICAgIF9fb3MyIDw8IF9fbXdkLndlZWtkYXlfaW5kZXhlZCgpOworICAgICAgX19vcyA8 PCBfX29zMi52aWV3KCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgorICAgIGlubGluZSBiYXNpY19vc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IG1vbnRoX3dlZWtkYXlfbGFzdCYgX19t d2RsKQorICAgIHsKKyAgICAgIC8vIEFzIGFib3ZlLCBqdXN0IHdyaXRlIHN0cmFpZ2h0IHRvIGEg c3RyaW5nc3RyZWFtLCBhcyBpZiBieSAiezpMfS97Okx9IgorICAgICAgYmFzaWNfc3RyaW5nc3Ry ZWFtPF9DaGFyVD4gX19vczI7CisgICAgICBfX29zMi5pbWJ1ZShfX29zLmdldGxvYyk7CisgICAg ICBfX29zMiA8PCBfX213ZGwubW9udGgoKTsKKyAgICAgIGlmIGNvbnN0ZXhwciAoaXNfc2FtZV92 PF9DaGFyVCwgY2hhcj4pCisJX19vczIgPDwgJy8nOworICAgICAgZWxzZQorCV9fb3MyIDw8IEwn Lyc7CisgICAgICBfX29zMiA8PCBfX213ZGwud2Vla2RheV9sYXN0KCk7CisgICAgICBfX29zIDw8 IF9fb3MyLnZpZXcoKTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYgX19vcywgY29uc3QgeWVhcl9tb250aCYgX195bSkKKyAgICB7CisgICAgICAv LyBBcyBhYm92ZSwganVzdCB3cml0ZSBzdHJhaWdodCB0byBhIHN0cmluZ3N0cmVhbSwgYXMgaWYg YnkgInt9L3s6TH0iCisgICAgICBiYXNpY19zdHJpbmdzdHJlYW08X0NoYXJUPiBfX29zMjsKKyAg ICAgIF9fb3MyLmltYnVlKF9fb3MuZ2V0bG9jKTsKKyAgICAgIF9fb3MyIDw8IF9feW0ueWVhcigp OworICAgICAgaWYgY29uc3RleHByIChpc19zYW1lX3Y8X0NoYXJULCBjaGFyPikKKwlfX29zMiA8 PCAnLyc7CisgICAgICBlbHNlCisJX19vczIgPDwgTCcvJzsKKyAgICAgIF9fb3MyIDw8IF9feW0u bW9udGgoKTsKKyAgICAgIF9fb3MgPDwgX19vczIudmlldygpOworICAgICAgcmV0dXJuIF9fb3M7 CisgICAgfQorCisgIC8vIFRPRE8gZnJvbV9zdHJlYW0gZm9yIHllYXJfbW9udGgKKworICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CisgICAgaW5saW5lIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgeWVhcl9tb250aF9kYXkmIF9f eW1kKQorICAgIHsKKyAgICAgIHVzaW5nIF9DdHggPSBfX2NvbmRpdGlvbmFsX3Q8aXNfc2FtZV92 PF9DaGFyVCwgY2hhcj4sCisJCQkJICAgZm9ybWF0X2NvbnRleHQsIHdmb3JtYXRfY29udGV4dD47 CisgICAgICB1c2luZyBfU3RyID0gYmFzaWNfc3RyaW5nX3ZpZXc8X0NoYXJUPjsKKyAgICAgIF9T dHIgX19zID0gX0dMSUJDWFhfV0lERU4oIns6JUZ9e30gaXMgbm90IGEgdmFsaWQgZGF0ZSIpOwor ICAgICAgX19vcyA8PCBzdGQ6OnZmb3JtYXQoX195bWQub2soKSA/IF9fcy5zdWJzdHIoMCwgNSkg OiBfX3Muc3Vic3RyKDUpLAorCQkJICAgbWFrZV9mb3JtYXRfYXJnczxfQ3R4PihfX3ltZCkpOwor ICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIC8vIFRPRE8gZnJvbV9zdHJlYW0gZm9yIHll YXJfbW9udGhfZGF5CisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgorICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3Bl cmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNv bnN0IHllYXJfbW9udGhfZGF5X2xhc3QmIF9feW1kbCkKKyAgICB7CisgICAgICAvLyBBcyBhYm92 ZSwganVzdCB3cml0ZSBzdHJhaWdodCB0byBhIHN0cmluZ3N0cmVhbSwgYXMgaWYgYnkgInt9L3s6 TH0iCisgICAgICBiYXNpY19zdHJpbmdzdHJlYW08X0NoYXJUPiBfX29zMjsKKyAgICAgIF9fb3My LmltYnVlKF9fb3MuZ2V0bG9jKTsKKyAgICAgIF9fb3MyIDw8IF9feW1kbC55ZWFyKCk7CisgICAg ICBpZiBjb25zdGV4cHIgKGlzX3NhbWVfdjxfQ2hhclQsIGNoYXI+KQorCV9fb3MyIDw8ICcvJzsK KyAgICAgIGVsc2UKKwlfX29zMiA8PCBMJy8nOworICAgICAgX19vczIgPDwgX195bWRsLm1vbnRo X2RheV9sYXN0KCk7CisgICAgICBfX29zIDw8IF9fb3MyLnZpZXcoKTsKKyAgICAgIHJldHVybiBf X29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVy YXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29u c3QgeWVhcl9tb250aF93ZWVrZGF5JiBfX3ltd2QpCisgICAgeworICAgICAgLy8gQXMgYWJvdmUs IGp1c3Qgd3JpdGUgc3RyYWlnaHQgdG8gYSBzdHJpbmdzdHJlYW0sIGFzIGlmIGJ5CisgICAgICAv LyAie30vezpMfS97Okx9IgorICAgICAgYmFzaWNfc3RyaW5nc3RyZWFtPF9DaGFyVD4gX19vczI7 CisgICAgICBfX29zMi5pbWJ1ZShfX29zLmdldGxvYyk7CisgICAgICBfQ2hhclQgX19zbGFzaDsK KyAgICAgIGlmIGNvbnN0ZXhwciAoaXNfc2FtZV92PF9DaGFyVCwgY2hhcj4pCisJX19zbGFzaCA9 ICcvJzsKKyAgICAgIGVsc2UKKwlfX3NsYXNoID0gTCcvJzsKKyAgICAgIF9fb3MyIDw8IF9feW13 ZC55ZWFyKCkgPDwgX19zbGFzaCA8PCBfX3ltd2QubW9udGgoKSA8PCBfX3NsYXNoCisJICAgIDw8 IF9feW13ZC53ZWVrZGF5X2luZGV4ZWQoKTsKKyAgICAgIF9fb3MgPDwgX19vczIudmlldygpOwor ICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29z LAorCSAgICAgICBjb25zdCB5ZWFyX21vbnRoX3dlZWtkYXlfbGFzdCYgX195bXdkbCkKKyAgICB7 CisgICAgICAvLyBBcyBhYm92ZSwganVzdCB3cml0ZSBzdHJhaWdodCB0byBhIHN0cmluZ3N0cmVh bSwgYXMgaWYgYnkKKyAgICAgIC8vICJ7fS97Okx9L3s6TH0iCisgICAgICBiYXNpY19zdHJpbmdz dHJlYW08X0NoYXJUPiBfX29zMjsKKyAgICAgIF9fb3MyLmltYnVlKF9fb3MuZ2V0bG9jKTsKKyAg ICAgIF9DaGFyVCBfX3NsYXNoOworICAgICAgaWYgY29uc3RleHByIChpc19zYW1lX3Y8X0NoYXJU LCBjaGFyPikKKwlfX3NsYXNoID0gJy8nOworICAgICAgZWxzZQorCV9fc2xhc2ggPSBMJy8nOwor ICAgICAgX19vczIgPDwgX195bXdkbC55ZWFyKCkgPDwgX19zbGFzaCA8PCBfX3ltd2RsLm1vbnRo KCkgPDwgX19zbGFzaAorCSAgICA8PCBfX3ltd2RsLndlZWtkYXlfbGFzdCgpOworICAgICAgX19v cyA8PCBfX29zMi52aWV3KCk7CisgICAgICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfRHVyYXRpb24+ CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRv cjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3Qg aGhfbW1fc3M8X0R1cmF0aW9uPiYgX19obXMpCisgICAgeworICAgICAgcmV0dXJuIF9fb3MgPDwg Zm9ybWF0KF9fb3MuZ2V0bG9jKCksIF9HTElCQ1hYX1dJREVOKCJ7OkwlVH0iKSwgX19obXMpOwor ICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+Cisg ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCBjb25zdCBzeXNfaW5mbyYgX19pKQorICAg IHsKKyAgICAgIC8vIFN0cmVhbXMgb3V0IHRoZSBzeXNfaW5mbyBvYmplY3QgciBpbiBhbiB1bnNw ZWNpZmllZCBmb3JtYXQuCisgICAgICBfX29zIDw8ICdbJyA8PCBfX2kuYmVnaW4udGltZV9zaW5j ZV9lcG9jaCgpLmNvdW50KCkKKwkgICA8PCAnICcgPDwgX19pLmVuZC50aW1lX3NpbmNlX2Vwb2No KCkuY291bnQoKQorCSAgIDw8ICcgJyA8PCBfX2kub2Zmc2V0LmNvdW50KCkKKwkgICA8PCAnICcg PDwgX19pLnNhdmUuY291bnQoKQorCSAgIDw8ICcgJyA8PCBfX2kuYWJicmV2CisJICAgPDwgJ10n OworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KKyAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsIGNv bnN0IGxvY2FsX2luZm8mIF9faSkKKyAgICB7CisgICAgICAvLyBTdHJlYW1zIG91dCB0aGUgbG9j YWxfaW5mbyBvYmplY3QgciBpbiBhbiB1bnNwZWNpZmllZCBmb3JtYXQuCisgICAgICBfX29zIDw8 ICdbJyA8PCBfX2kucmVzdWx0CisJICAgPDwgJyAnIDw8IF9faS5maXJzdAorCSAgIDw8ICcgJyA8 PCBfX2kuc2Vjb25kCisJICAgPDwgJ10nOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisg IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0R1 cmF0aW9uLAorCSAgIHR5cGVuYW1lIF9UaW1lWm9uZVB0cj4KKyAgICBpbmxpbmUgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCB6b25lZF90aW1lPF9EdXJhdGlvbiwg X1RpbWVab25lUHRyPiYgX190KQorICAgIHsKKyAgICAgIF9fb3MgPDwgZm9ybWF0KF9fb3MuZ2V0 bG9jKCksIF9HTElCQ1hYX1dJREVOKCJ7OkwlRiAlVCAlWn0iKSwgX190KTsKKyAgICAgIHJldHVy biBfX29zOworICAgIH0KKworCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0R1cmF0aW9uPgorICAgIHJlcXVpcmVzICghdHJlYXRfYXNfZmxv YXRpbmdfcG9pbnRfdjx0eXBlbmFtZSBfRHVyYXRpb246OnJlcD4pCisgICAgICAmJiByYXRpb19s ZXNzX3Y8dHlwZW5hbWUgX0R1cmF0aW9uOjpwZXJpb2QsIGRheXM6OnBlcmlvZD4KKyAgICBpbmxp bmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCBzeXNfdGltZTxf RHVyYXRpb24+JiBfX3RwKQorICAgIHsKKyAgICAgIF9fb3MgPDwgc3RkOjpmb3JtYXQoX19vcy5n ZXRsb2MoKSwgX0dMSUJDWFhfV0lERU4oIns6TCVGICVUfSIpLCBfX3RwKTsKKyAgICAgIHJldHVy biBfX29zOworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9EdXJhdGlvbj4KKyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+JiBfX29zLCBjb25zdCBzeXNfZGF5cyYgX19kcCkKKyAgICB7CisgICAgICBfX29zIDw8IHll YXJfbW9udGhfZGF5e19fZHB9OworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIC8vIFRP RE86IGZyb21fc3RyZWFtIGZvciBzeXNfdGltZQorCisgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0R1cmF0aW9uPgorICAgIGlubGluZSBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCisgICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MsCisJICAgICAgIGNvbnN0IHV0Y190aW1lPF9EdXJhdGlv bj4mIF9fdCkKKyAgICB7CisgICAgICBfX29zIDw8IHN0ZDo6Zm9ybWF0KF9fb3MuZ2V0bG9jKCks IF9HTElCQ1hYX1dJREVOKCJ7OkwlRiAlVH0iKSwgX190KTsKKyAgICAgIHJldHVybiBfX29zOwor ICAgIH0KKworICAvLyBUT0RPOiBmcm9tX3N0cmVhbSBmb3IgdXRjX3RpbWUKKworICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9EdXJhdGlvbj4K KyAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgorICAgIG9wZXJhdG9y PDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLAorCSAgICAgICBjb25zdCB0 YWlfdGltZTxfRHVyYXRpb24+JiBfX3QpCisgICAgeworICAgICAgX19vcyA8PCBzdGQ6OmZvcm1h dChfX29zLmdldGxvYygpLCBfR0xJQkNYWF9XSURFTigiezpMJUYgJVR9IiksIF9fdCk7CisgICAg ICByZXR1cm4gX19vczsKKyAgICB9CisKKyAgLy8gVE9ETzogZnJvbV9zdHJlYW0gZm9yIHRhaV90 aW1lCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfRHVyYXRpb24+CisgICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywK KwkgICAgICAgY29uc3QgZ3BzX3RpbWU8X0R1cmF0aW9uPiYgX190KQorICAgIHsKKyAgICAgIF9f b3MgPDwgc3RkOjpmb3JtYXQoX19vcy5nZXRsb2MoKSwgX0dMSUJDWFhfV0lERU4oIns6TCVGICVU fSIpLCBfX3QpOworICAgICAgcmV0dXJuIF9fb3M7CisgICAgfQorCisgIC8vIFRPRE86IGZyb21f c3RyZWFtIGZvciBncHNfdGltZQorCisKKyAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfRHVyYXRpb24+CisgICAgaW5saW5lIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgZmlsZV90aW1lPF9EdXJhdGlvbj4mIF9f dCkKKyAgICB7CisgICAgICBfX29zIDw8IHN0ZDo6Zm9ybWF0KF9fb3MuZ2V0bG9jKCksIF9HTElC Q1hYX1dJREVOKCJ7OkwlRiAlVH0iKSwgX190KTsKKyAgICAgIHJldHVybiBfX29zOworICAgIH0K KworICAvLyBUT0RPOiBmcm9tX3N0cmVhbSBmb3IgZmlsZV90aW1lCisKKyAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfRHVyYXRpb24+CisgICAg aW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKKyAgICBvcGVyYXRvcjw8KGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywKKwkgICAgICAgY29uc3QgbG9jYWxf dGltZTxfRHVyYXRpb24+JiBfX2x0KQorICAgIHsKKyAgICAgIF9fb3MgPDwgc3lzX3RpbWU8X0R1 cmF0aW9uPntfX2x0LnRpbWVfc2luY2VfZXBvY2goKX07CisgICAgICByZXR1cm4gX19vczsKKyAg ICB9CisKKyAgLy8gVE9ETzogZnJvbV9zdHJlYW0gZm9yIGxvY2FsX3RpbWUKKyN1bmRlZiBfR0xJ QkNYWF9XSURFTgorCisgIC8vLyBAfSBncm91cCBjaHJvbm8KK30gLy8gbmFtZXNwYWNlIGNocm9u bworCitfR0xJQkNYWF9FTkRfTkFNRVNQQUNFX1ZFUlNJT04KK30gLy8gbmFtZXNwYWNlIHN0ZAor CisjZW5kaWYgLy8gQysrMjAKKworI2VuZGlmIC8vX0dMSUJDWFhfQ0hST05PX0lPX0gKZGlmZiAt LWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL3N0ZC9jaHJvbm8gYi9saWJzdGRjKystdjMvaW5j bHVkZS9zdGQvY2hyb25vCmluZGV4IDkwYjczZjgxOThlLi5jMzkxNjExNTJjZSAxMDA2NDQKLS0t IGEvbGlic3RkYysrLXYzL2luY2x1ZGUvc3RkL2Nocm9ubworKysgYi9saWJzdGRjKystdjMvaW5j bHVkZS9zdGQvY2hyb25vCkBAIC00MSwxMSArNDEsOCBAQAogI2luY2x1ZGUgPGJpdHMvY2hyb25v Lmg+CiAKICNpZiBfX2NwbHVzcGx1cyA+PSAyMDIwMDJMCi0jIGluY2x1ZGUgPHNzdHJlYW0+CiAj IGluY2x1ZGUgPHN0cmluZz4KICMgaW5jbHVkZSA8dmVjdG9yPgotIyBpbmNsdWRlIDxiaXRzL2No YXJjb252Lmg+IC8vIF9fdG9fY2hhcnNfbGVuLCBfX3RvX2NoYXJzXzEwX2ltcGwKLSMgaW5jbHVk ZSA8Yml0cy9zdGxfYWxnby5oPiAvLyB1cHBlcl9ib3VuZCBUT0RPOiBtb3ZlIGxlYXBfc2Vjb25k X2luZm8gdG8gLnNvCiAjIGluY2x1ZGUgPGJpdHMvc2hhcmVkX3B0ci5oPgogIyBpbmNsdWRlIDxi aXRzL3VuaXF1ZV9wdHIuaD4KICNlbmRpZgpAQCAtNjE2LDggKzYxMyw2IEBAIF9HTElCQ1hYX0JF R0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAgICAgIGZyaWVuZCBjb25zdGV4cHIgeWVhcl9tb250 aF9kYXkKICAgICAgIG9wZXJhdG9yLyhjb25zdCB5ZWFyX21vbnRoJiBfX3ltLCBjb25zdCBkYXkm IF9fZCkgbm9leGNlcHQ7Ci0KLSAgICAgIC8vIFRPRE86IEltcGxlbWVudCBvcGVyYXRvcjw8LCB0 b19zdHJlYW0sIGZyb21fc3RyZWFtLgogICAgIH07CiAKICAgICAvLyBNT05USApAQCAtNzQwLDgg KzczNSw2IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAgICAgIGZyaWVu ZCBjb25zdGV4cHIgbW9udGhfd2Vla2RheV9sYXN0CiAgICAgICBvcGVyYXRvci8oY29uc3Qgd2Vl a2RheV9sYXN0JiBfX3dkbCwgY29uc3QgbW9udGgmIF9fbSkgbm9leGNlcHQ7Ci0KLSAgICAgIC8v IFRPRE86IEltcGxlbWVudCBvcGVyYXRvcjw8LCB0b19zdHJlYW0sIGZyb21fc3RyZWFtLgogICAg IH07CiAKICAgICBpbmxpbmUgY29uc3RleHByIG1vbnRoIEphbnVhcnl7MX07CkBAIC05MTgsOCAr OTExLDYgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAogICAgICAgZnJpZW5k IGNvbnN0ZXhwciB5ZWFyX21vbnRoX3dlZWtkYXlfbGFzdAogICAgICAgb3BlcmF0b3IvKGNvbnN0 IG1vbnRoX3dlZWtkYXlfbGFzdCYgX19td2RsLCBjb25zdCB5ZWFyJiBfX3kpIG5vZXhjZXB0Owot Ci0gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgb3BlcmF0b3I8PCwgdG9fc3RyZWFtLCBmcm9tX3N0 cmVhbS4KICAgICB9OwogCiAgICAgLy8gV0VFS0RBWQpAQCAtMTA0MSw4ICsxMDMyLDYgQEAgX0dM SUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAlhdXRvIF9fbiA9IHN0YXRpY19jYXN0PGxv bmcgbG9uZz4oX194Ll9NX3dkKSAtIF9feS5fTV93ZDsKIAlyZXR1cm4gZGF5c3tfX2RldGFpbDo6 X19tb2R1bG8oX19uLCA3KX07CiAgICAgICB9Ci0KLSAgICAgIC8vIFRPRE86IG9wZXJhdG9yPDws IGZyb21fc3RyZWFtLgogICAgIH07CiAKICAgICBpbmxpbmUgY29uc3RleHByIHdlZWtkYXkgU3Vu ZGF5ezB9OwpAQCAtMTA5OSw4ICsxMDg4LDYgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZF UlNJT04KIAogICAgICAgZnJpZW5kIGNvbnN0ZXhwciB5ZWFyX21vbnRoX3dlZWtkYXkKICAgICAg IG9wZXJhdG9yLyhjb25zdCB5ZWFyX21vbnRoJiBfX3ltLCBjb25zdCB3ZWVrZGF5X2luZGV4ZWQm IF9fd2RpKSBub2V4Y2VwdDsKLQotICAgICAgLy8gVE9ETzogSW1wbGVtZW50IG9wZXJhdG9yPDwu CiAgICAgfTsKIAogICAgIGNvbnN0ZXhwciB3ZWVrZGF5X2luZGV4ZWQKQEAgLTExNDAsOCArMTEy Nyw2IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAgICAgIGZyaWVuZCBj b25zdGV4cHIgeWVhcl9tb250aF93ZWVrZGF5X2xhc3QKICAgICAgIG9wZXJhdG9yLyhjb25zdCB5 ZWFyX21vbnRoJiBfX3ltLCBjb25zdCB3ZWVrZGF5X2xhc3QmIF9fd2RsKSBub2V4Y2VwdDsKLQot ICAgICAgLy8gVE9ETzogSW1wbGVtZW50IG9wZXJhdG9yPDwuCiAgICAgfTsKIAogICAgIGNvbnN0 ZXhwciB3ZWVrZGF5X2xhc3QKQEAgLTEyMTMsOCArMTE5OCw2IEBAIF9HTElCQ1hYX0JFR0lOX05B TUVTUEFDRV9WRVJTSU9OCiAKICAgICAgIGZyaWVuZCBjb25zdGV4cHIgeWVhcl9tb250aF9kYXkK ICAgICAgIG9wZXJhdG9yLyhjb25zdCBtb250aF9kYXkmIF9fbWQsIGludCBfX3kpIG5vZXhjZXB0 OwotCi0gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgb3BlcmF0b3I8PCwgZnJvbV9zdHJlYW0uCiAg ICAgfTsKIAogICAgIC8vIE1PTlRIX0RBWV9MQVNUCkBAIC0xMjY3LDggKzEyNTAsNiBAQCBfR0xJ QkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogCiAgICAgICBmcmllbmQgY29uc3RleHByIHll YXJfbW9udGhfZGF5X2xhc3QKICAgICAgIG9wZXJhdG9yLyhjb25zdCBtb250aF9kYXlfbGFzdCYg X19tZGwsIGludCBfX3kpIG5vZXhjZXB0OwotCi0gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgb3Bl cmF0b3I8PC4KICAgICB9OwogCiAgICAgLy8gTU9OVEhfV0VFS0RBWQpAQCAtMTMyOCw4ICsxMzA5 LDYgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAogICAgICAgZnJpZW5kIGNv bnN0ZXhwciB5ZWFyX21vbnRoX3dlZWtkYXkKICAgICAgIG9wZXJhdG9yLyhjb25zdCBtb250aF93 ZWVrZGF5JiBfX213ZCwgaW50IF9feSkgbm9leGNlcHQ7Ci0KLSAgICAgIC8vIFRPRE86IEltcGxl bWVudCBvcGVyYXRvcjw8LgogICAgIH07CiAKICAgICAvLyBNT05USF9XRUVLREFZX0xBU1QKQEAg LTEzOTAsOCArMTM2OSw2IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAKICAg ICAgIGZyaWVuZCBjb25zdGV4cHIgeWVhcl9tb250aF93ZWVrZGF5X2xhc3QKICAgICAgIG9wZXJh dG9yLyhjb25zdCBtb250aF93ZWVrZGF5X2xhc3QmIF9fbXdkbCwgaW50IF9feSkgbm9leGNlcHQ7 Ci0KLSAgICAgIC8vIFRPRE86IEltcGxlbWVudCBvcGVyYXRvcjw8LgogICAgIH07CiAKICAgICAv LyBZRUFSX01PTlRICkBAIC0xNTMzLDggKzE1MTAsNiBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BB Q0VfVkVSU0lPTgogCiAgICAgICBmcmllbmQgY29uc3RleHByIHllYXJfbW9udGhfZGF5X2xhc3QK ICAgICAgIG9wZXJhdG9yLyhjb25zdCB5ZWFyX21vbnRoJiBfX3ltLCBsYXN0X3NwZWMpIG5vZXhj ZXB0OwotCi0gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgb3BlcmF0b3I8PCwgZnJvbV9zdHJlYW0u CiAgICAgfTsKIAogICAgIC8vIFlFQVJfTU9OVEhfREFZCkBAIC0xNjg2LDggKzE2NjEsNiBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgZnJpZW5kIGNvbnN0ZXhwciB5 ZWFyX21vbnRoX2RheQogICAgICAgb3BlcmF0b3IvKGNvbnN0IG1vbnRoX2RheSYgX19tZCwgaW50 IF9feSkgbm9leGNlcHQKICAgICAgIHsgcmV0dXJuIGNocm9ubzo6eWVhcihfX3kpIC8gX19tZDsg fQotCi0gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQgb3BlcmF0b3I8PCwgZnJvbV9zdHJlYW0uCiAg ICAgfTsKIAogICAgIC8vIENvbnN0cnVjdCBmcm9tIGRheXMgc2luY2UgMTk3MC8wMS8wMS4KQEAg LTE5MTcsOCArMTg5MCw2IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAg ICBmcmllbmQgY29uc3RleHByIHllYXJfbW9udGhfZGF5X2xhc3QKICAgICAgIG9wZXJhdG9yLyhj b25zdCBjaHJvbm86Om1vbnRoX2RheV9sYXN0JiBfX21kbCwgaW50IF9feSkgbm9leGNlcHQKICAg ICAgIHsgcmV0dXJuIGNocm9ubzo6eWVhcihfX3kpIC8gX19tZGw7IH0KLQotICAgICAgLy8gVE9E TzogSW1wbGVtZW50IG9wZXJhdG9yPDwuCiAgICAgfTsKIAogICAgIC8vIHllYXJfbW9udGhfZGF5 IGN0b3IgZnJvbSB5ZWFyX21vbnRoX2RheV9sYXN0CkBAIC0yMTA3LDggKzIwNzgsNiBAQCBfR0xJ QkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgZnJpZW5kIGNvbnN0ZXhwciB5ZWFy X21vbnRoX3dlZWtkYXkKICAgICAgIG9wZXJhdG9yLyhjb25zdCBtb250aF93ZWVrZGF5JiBfX213 ZCwgaW50IF9feSkgbm9leGNlcHQKICAgICAgIHsgcmV0dXJuIGNocm9ubzo6eWVhcihfX3kpIC8g X19td2Q7IH0KLQotICAgICAgLy8gVE9ETzogSW1wbGVtZW50IG9wZXJhdG9yPDwuCiAgICAgfTsK IAogICAgIC8vIFlFQVJfTU9OVEhfV0VFS0RBWV9MQVNUCkBAIC0yMjU2LDggKzIyMjUsNiBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgZnJpZW5kIGNvbnN0ZXhwciB5 ZWFyX21vbnRoX3dlZWtkYXlfbGFzdAogICAgICAgb3BlcmF0b3IvKGNvbnN0IGNocm9ubzo6bW9u dGhfd2Vla2RheV9sYXN0JiBfX213ZGwsIGludCBfX3kpIG5vZXhjZXB0CiAgICAgICB7IHJldHVy biBjaHJvbm86OnllYXIoX195KSAvIF9fbXdkbDsgfQotCi0gICAgICAvLyBUT0RPOiBJbXBsZW1l bnQgb3BlcmF0b3I8PC4KICAgICB9OwogCiAgICAgLy8gSEhfTU1fU1MKQEAgLTIzNjQsOCArMjMz MSw2IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAJICAgIHJldHVybiBfTV9o ICsgX01fbSArIF9NX3MgKyBfTV9zczsKIAl9CiAKLQkvLyBUT0RPOiBJbXBsZW1lbnQgb3BlcmF0 b3I8PC4KLQogICAgICAgcHJpdmF0ZToKIAlib29sIF9NX2lzX25lZzsKIAljaHJvbm86OmhvdXJz IF9NX2g7CkBAIC0yNDE1LDYgKzIzODAsOCBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVS U0lPTgogCiAgICAgLy8gQysrMjAgW3RpbWUuem9uZXNdIFRpbWUgem9uZXMKIAorICAgIGNsYXNz IHR6ZGI7CisKICAgICBzdHJ1Y3Qgc3lzX2luZm8KICAgICB7CiAgICAgICBzeXNfc2Vjb25kcyBi ZWdpbjsKQEAgLTI0NzMsNiArMjQ0MCw4IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJT SU9OCiAgICAgICB0aW1lX3pvbmUodGltZV96b25lJiYpID0gZGVmYXVsdDsKICAgICAgIHRpbWVf em9uZSYgb3BlcmF0b3I9KHRpbWVfem9uZSYmKSA9IGRlZmF1bHQ7CiAKKyAgICAgIH50aW1lX3pv bmUoKTsKKwogICAgICAgc3RyaW5nX3ZpZXcgbmFtZSgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJu IF9NX25hbWU7IH0KIAogICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1cmF0aW9uPgpAQCAtMjUw NCw4ICsyNDczLDExIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICB7 IHJldHVybiBfX3gubmFtZSgpIDw9PiBfX3kubmFtZSgpOyB9CiAKICAgICBwcml2YXRlOgotICAg ICAgc3RyaW5nIF9NX25hbWU7CisgICAgICBmcmllbmQgY29uc3QgdHpkYiYgcmVsb2FkX3R6ZGIo KTsKKwogICAgICAgc3RydWN0IF9JbXBsOworICAgICAgZXhwbGljaXQgdGltZV96b25lKHVuaXF1 ZV9wdHI8X0ltcGw+IF9fcCk7CisgICAgICBzdHJpbmcgX01fbmFtZTsKICAgICAgIHVuaXF1ZV9w dHI8X0ltcGw+IF9NX2ltcGw7CiAgICAgfTsKIApAQCAtMjUzMiw2ICsyNTA0LDkgQEAgX0dMSUJD WFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KIAogICAgIHByaXZhdGU6CiAgICAgICBmcmllbmQg Y29uc3QgdHpkYiYgcmVsb2FkX3R6ZGIoKTsKKworICAgICAgZXhwbGljaXQgdGltZV96b25lX2xp bmsobnVsbHB0cl90KSB7IH0KKwogICAgICAgLy8gVE9ETyB1bnNwZWNpZmllZCBhZGRpdGlvbmFs IGNvbnN0cnVjdG9ycwogICAgICAgc3RyaW5nIF9NX25hbWU7CiAgICAgICBzdHJpbmcgX01fdGFy Z2V0OwpAQCAtMjYzMiw5ICsyNjA3LDEyIEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJT SU9OCiAgICAgICBleHBsaWNpdCBsZWFwX3NlY29uZChzZWNvbmRzOjpyZXAgX19zKSA6IF9NX3Mo X19zKSB7IH0KIAogICAgICAgZnJpZW5kIGNvbnN0IHR6ZGImIHJlbG9hZF90emRiKCk7Ci0gICAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVyPgorCisgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVy YXRpb24+CiAJZnJpZW5kIGxlYXBfc2Vjb25kX2luZm8KLQlnZXRfbGVhcF9zZWNvbmRfaW5mbyhj b25zdCB1dGNfdGltZTxfRHVyPiYpOworCWdldF9sZWFwX3NlY29uZF9pbmZvKGNvbnN0IHV0Y190 aW1lPF9EdXJhdGlvbj4mKTsKKworICAgICAgc3RhdGljIGxlYXBfc2Vjb25kX2luZm8gX1NfZ2V0 X2luZm8oY29uc3QgdXRjX3NlY29uZHMmKTsKIAogICAgICAgc2Vjb25kcyBfTV9zOyAvLyA9PSBk YXRlKCkudGltZV9zaW5jZV9lcG9jaCgpICogdmFsdWUoKS5jb3VudCgpCiAgICAgfTsKQEAgLTI3 MDUsMTEgKzI2ODMsMTMgQEAgX0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAg IHByaXZhdGU6CiAJZXhwbGljaXQgY29uc3RfaXRlcmF0b3IoY29uc3Qgc2hhcmVkX3B0cjxfTm9k ZT4mKSBub2V4Y2VwdDsKIAorCWZyaWVuZCBjbGFzcyB0emRiX2xpc3Q7CisKIAlzaGFyZWRfcHRy PF9Ob2RlPiBfTV9ub2RlOwogCXZvaWQqIF9NX3Jlc2VydmVkID0gbnVsbHB0cjsKICAgICAgIH07 CiAKLSAgICAgIC8vIFRPRE8gY29uc3QgdHpkYiYgZnJvbnQoKSBjb25zdCBub2V4Y2VwdDsKKyAg ICAgIGNvbnN0IHR6ZGImIGZyb250KCkgY29uc3Qgbm9leGNlcHQ7CiAKICAgICAgIGNvbnN0X2l0 ZXJhdG9yIGVyYXNlX2FmdGVyKGNvbnN0X2l0ZXJhdG9yKTsKIApAQCAtMjcxOCw5ICsyNjk4LDE0 IEBAIF9HTElCQ1hYX0JFR0lOX05BTUVTUEFDRV9WRVJTSU9OCiAgICAgICBjb25zdF9pdGVyYXRv ciBjYmVnaW4oKSBjb25zdCBub2V4Y2VwdCB7IHJldHVybiBiZWdpbigpOyB9CiAgICAgICBjb25z dF9pdGVyYXRvciBjZW5kKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gZW5kKCk7IH0KIAorI2lm bmRlZiBfR0xJQkNYWF9ERUZJTklOR19UWkRCCiAgICAgcHJpdmF0ZToKKyNlbmRpZgogICAgICAg Y29uc3RleHByIGV4cGxpY2l0IHR6ZGJfbGlzdChudWxscHRyX3QpOwogCisgICAgICBzdGF0aWMg c3RyaW5nIF9TX2xhdGVzdF92ZXJzaW9uKCk7CisgICAgICBzaGFyZWRfcHRyPF9Ob2RlPiBfU19s b2FkKHN0cmluZ192aWV3KTsKKwogICAgICAgZnJpZW5kIGNvbnN0IHR6ZGJfbGlzdCYgZ2V0X3R6 ZGJfbGlzdCgpOwogICAgICAgZnJpZW5kIGNvbnN0IHR6ZGImIGdldF90emRiKCk7CiAgICAgICBm cmllbmQgY29uc3QgdHpkYiYgcmVsb2FkX3R6ZGIoKTsKQEAgLTI3MjksMTIgKzI3MTQsMTEgQEAg X0dMSUJDWFhfQkVHSU5fTkFNRVNQQUNFX1ZFUlNJT04KICAgICAgIHN0YXRpYyBzaGFyZWRfcHRy PF9Ob2RlPiBfU19oZWFkX293bmVyOwogICAgIH07CiAKLSAgICAvLyBUT0RPCi0gICAgLy8gY29u c3QgdHpkYl9saXN0JiBnZXRfdHpkYl9saXN0KCk7Ci0gICAgLy8gY29uc3QgdHpkYiYgZ2V0X3R6 ZGIoKTsKKyAgICBjb25zdCB0emRiX2xpc3QmIGdldF90emRiX2xpc3QoKTsKKyAgICBjb25zdCB0 emRiJiBnZXRfdHpkYigpOwogCi0gICAgLy8gY29uc3QgdHpkYiYgcmVsb2FkX3R6ZGIoKTsKLSAg ICAvLyBzdHJpbmcgcmVtb3ZlX3ZlcnNpb24oKTsKKyAgICBjb25zdCB0emRiJiByZWxvYWRfdHpk YigpOworICAgIHN0cmluZyByZW1vdGVfdmVyc2lvbigpOwogCiAgICAgdGVtcGxhdGU8dHlwZW5h bWUgX0R1cmF0aW9uLCB0eXBlbmFtZSBfVGltZVpvbmVQdHIgPSBjb25zdCB0aW1lX3pvbmUqPgog ICAgICAgY2xhc3Mgem9uZWRfdGltZTsgLy8gVE9ETwpAQCAtMjc0NSw1MiArMjcyOSwxNSBAQCBf R0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgICAgbGVhcF9zZWNvbmRfaW5mbwog ICAgICAgZ2V0X2xlYXBfc2Vjb25kX2luZm8oY29uc3QgdXRjX3RpbWU8X0R1cmF0aW9uPiYgX191 dCkKICAgICAgIHsKLQlpZiBjb25zdGV4cHIgKGlzX3NhbWVfdjxfRHVyYXRpb24sIHNlY29uZHM+ KQotCSAgewotCSAgICAvLyBUT0RPIG1vdmUgdGhpcyBmdW5jdGlvbiBpbnRvIHRoZSBsaWJyYXJ5 IGFuZCBnZXQgbGVhcHMgZnJvbSB0emRiLgotCSAgICB2ZWN0b3I8c2Vjb25kczo6cmVwPiBfX2xl YXBzCi0JICAgIHsKLQkJNzg3OTY4MDAsIC8vIDEgSnVsIDE5NzIKLQkJOTQ2OTQ0MDAsIC8vIDEg SmFuIDE5NzMKLQkgICAgICAgMTI2MjMwNDAwLCAvLyAxIEphbiAxOTc0Ci0JICAgICAgIDE1Nzc2 NjQwMCwgLy8gMSBKYW4gMTk3NQotCSAgICAgICAxODkzMDI0MDAsIC8vIDEgSmFuIDE5NzYKLQkg ICAgICAgMjIwOTI0ODAwLCAvLyAxIEphbiAxOTc3Ci0JICAgICAgIDI1MjQ2MDgwMCwgLy8gMSBK YW4gMTk3OAotCSAgICAgICAyODM5OTY4MDAsIC8vIDEgSmFuIDE5NzkKLQkgICAgICAgMzE1NTMy ODAwLCAvLyAxIEphbiAxOTgwCi0JICAgICAgIDM2Mjc5MzYwMCwgLy8gMSBKdWwgMTk4MQotCSAg ICAgICAzOTQzMjk2MDAsIC8vIDEgSnVsIDE5ODIKLQkgICAgICAgNDI1ODY1NjAwLCAvLyAxIEp1 bCAxOTgzCi0JICAgICAgIDQ4OTAyNDAwMCwgLy8gMSBKdWwgMTk4NQotCSAgICAgICA1Njc5OTM2 MDAsIC8vIDEgSmFuIDE5ODgKLQkgICAgICAgNjMxMTUyMDAwLCAvLyAxIEphbiAxOTkwCi0JICAg ICAgIDY2MjY4ODAwMCwgLy8gMSBKYW4gMTk5MQotCSAgICAgICA3MDk5NDg4MDAsIC8vIDEgSnVs IDE5OTIKLQkgICAgICAgNzQxNDg0ODAwLCAvLyAxIEp1bCAxOTkzCi0JICAgICAgIDc3MzAyMDgw MCwgLy8gMSBKdWwgMTk5NAotCSAgICAgICA4MjA0NTQ0MDAsIC8vIDEgSmFuIDE5OTYKLQkgICAg ICAgODY3NzE1MjAwLCAvLyAxIEp1bCAxOTk3Ci0JICAgICAgIDkxNTE0ODgwMCwgLy8gMSBKYW4g MTk5OQotCSAgICAgIDExMzYwNzM2MDAsIC8vIDEgSmFuIDIwMDYKLQkgICAgICAxMjMwNzY4MDAw LCAvLyAxIEphbiAyMDA5Ci0JICAgICAgMTM0MTEwMDgwMCwgLy8gMSBKdWwgMjAxMgotCSAgICAg IDE0MzU3MDg4MDAsIC8vIDEgSnVsIDIwMTUKLQkgICAgICAxNDgzMjI4ODAwLCAvLyAxIEphbiAy MDE3Ci0JICAgIH07CisJaWYgKF9fdXQgPCB1dGNfdGltZTxfRHVyYXRpb24+e30pIFtbdW5saWtl bHldXQorCSAgcmV0dXJuIHt9OwogCi0JICAgIGF1dG8gX19zID0gX191dC50aW1lX3NpbmNlX2Vw b2NoKCkuY291bnQoKTsKLQkgICAgYXV0byBfX3BvcyA9IHN0ZDo6dXBwZXJfYm91bmQoX19sZWFw cy5iZWdpbigpLCBfX2xlYXBzLmVuZCgpLCBfX3MpOwotCSAgICByZXR1cm4gewotCSAgICAgIF9f cG9zICE9IF9fbGVhcHMuYmVnaW4oKSAmJiBfX3Bvc1stMV0gPT0gX19zLAotCSAgICAgIHNlY29u ZHN7X19wb3MgLSBfX2xlYXBzLmJlZ2luKCl9Ci0JICAgIH07Ci0JICB9CisJdXRjX3NlY29uZHMg X191czsKKwlpZiBjb25zdGV4cHIgKGlzX3NhbWVfdjxfRHVyYXRpb24sIHNlY29uZHM+KQorCSAg X191cyA9IF9fdXQ7CiAJZWxzZQotCSAgewotCSAgICBhdXRvIF9fcyA9IGNocm9ubzo6dGltZV9w b2ludF9jYXN0PHNlY29uZHM+KF9fdXQpOwotCSAgICByZXR1cm4gY2hyb25vOjpnZXRfbGVhcF9z ZWNvbmRfaW5mbyhfX3MpOwotCSAgfQorCSAgX191cyA9IGNocm9ubzo6dGltZV9wb2ludF9jYXN0 PHNlY29uZHM+KF9fdXQpOworCXJldHVybiBsZWFwX3NlY29uZDo6X1NfZ2V0X2luZm8oX191cyk7 CiAgICAgICB9CiAKICAgICAvLy8gQH0gZ3JvdXAgY2hyb25vCkBAIC0yODIxLDEwNiArMjc2OCwx NSBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfVkVSU0lPTgogICAgIC8vLyBAfQogICB9IC8v IGlubGluZSBuYW1lc3BhY2UgY2hyb25vX2xpdGVyYWxzCiAgIH0gLy8gaW5saW5lIG5hbWVzcGFj ZSBsaXRlcmFscwotCi0gIG5hbWVzcGFjZSBjaHJvbm8KLSAgewotICAgIC8vLyBAYWRkdG9ncm91 cCBjaHJvbm8KLSAgICAvLy8gQHsKLQotICAgIC8vLyBAY29uZCB1bmRvY3VtZW50ZWQKLSAgICBu YW1lc3BhY2UgX19kZXRhaWwKLSAgICB7Ci0gICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUGVyaW9k PgotCWNvbnN0IGNoYXIqCi0JX191bml0c19zdWZmaXhfbWlzYyhjaGFyKiBfX2J1Ziwgc2l6ZV90 IF9fbikgbm9leGNlcHQKLQl7Ci0JICBuYW1lc3BhY2UgX190YyA9IHN0ZDo6X19kZXRhaWw7Ci0J ICBjaGFyKiBfX3AgPSBfX2J1ZjsKLQkgIF9fcFswXSA9ICdbJzsKLQkgIHVuc2lnbmVkIF9fbmxl biA9IF9fdGM6Ol9fdG9fY2hhcnNfbGVuKCh1aW50bWF4X3QpX1BlcmlvZDo6bnVtKTsKLQkgIF9f dGM6Ol9fdG9fY2hhcnNfMTBfaW1wbChfX3AgKyAxLCBfX25sZW4sICh1aW50bWF4X3QpX1Blcmlv ZDo6bnVtKTsKLQkgIF9fcCArPSAxICsgX19ubGVuOwotCSAgaWYgY29uc3RleHByIChfUGVyaW9k OjpkZW4gIT0gMSkKLQkgICAgewotCSAgICAgIF9fcFswXSA9ICcvJzsKLQkgICAgICB1bnNpZ25l ZCBfX2RsZW4gPSBfX3RjOjpfX3RvX2NoYXJzX2xlbigodWludG1heF90KV9QZXJpb2Q6OmRlbik7 Ci0JICAgICAgX190Yzo6X190b19jaGFyc18xMF9pbXBsKF9fcCArIDEsIF9fZGxlbiwgKHVpbnRt YXhfdClfUGVyaW9kOjpkZW4pOwotCSAgICAgIF9fcCArPSAxICsgX19kbGVuOwotCSAgICB9Ci0J ICBfX3BbMF0gPSAnXSc7Ci0JICBfX3BbMV0gPSAncyc7Ci0JICBfX3BbMl0gPSAnXDAnOwotCSAg cmV0dXJuIF9fYnVmOwotCX0KLQotICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1BlcmlvZCwgdHlw ZW5hbWUgX0NoYXJUPgotCWF1dG8KLQlfX3VuaXRzX3N1ZmZpeChjaGFyKiBfX2J1Ziwgc2l6ZV90 IF9fbikgbm9leGNlcHQKLQl7Ci0jZGVmaW5lIF9HTElCQ1hYX1VOSVRTX1NVRkZJWChwZXJpb2Qs IHN1ZmZpeCkgXAotCWlmIGNvbnN0ZXhwciAoaXNfc2FtZV92PF9QZXJpb2QsIHBlcmlvZD4pCVwK LQkgIHsJCQkJCQlcCi0JICAgIGlmIGNvbnN0ZXhwciAoaXNfc2FtZV92PF9DaGFyVCwgd2NoYXJf dD4pCVwKLQkgICAgICByZXR1cm4gTCMjc3VmZml4OwkJCQlcCi0JICAgIGVsc2UJCQkJCVwKLQkg ICAgICByZXR1cm4gc3VmZml4OwkJCQlcCi0JICB9CQkJCQkJXAotCWVsc2UKLQotCSAgX0dMSUJD WFhfVU5JVFNfU1VGRklYKGF0dG8sICJhcyIpCi0JICBfR0xJQkNYWF9VTklUU19TVUZGSVgoZmVt dG8sICJmcyIpCi0JICBfR0xJQkNYWF9VTklUU19TVUZGSVgocGljbywgInBzIikKLQkgIF9HTElC Q1hYX1VOSVRTX1NVRkZJWChuYW5vLCAibnMiKQotCSAgX0dMSUJDWFhfVU5JVFNfU1VGRklYKG1p Y3JvLCAiXHUwMGI1cyIpCi0JICBfR0xJQkNYWF9VTklUU19TVUZGSVgobWlsbGksICJtcyIpCi0J ICBfR0xJQkNYWF9VTklUU19TVUZGSVgoY2VudGksICJjcyIpCi0JICBfR0xJQkNYWF9VTklUU19T VUZGSVgoZGVjaSwgImRzIikKLQkgIF9HTElCQ1hYX1VOSVRTX1NVRkZJWChyYXRpbzwxPiwgInMi KQotCSAgX0dMSUJDWFhfVU5JVFNfU1VGRklYKGRlY2EsICJkYXMiKQotCSAgX0dMSUJDWFhfVU5J VFNfU1VGRklYKGhlY3RvLCAiaHMiKQotCSAgX0dMSUJDWFhfVU5JVFNfU1VGRklYKGtpbG8sICJr cyIpCi0JICBfR0xJQkNYWF9VTklUU19TVUZGSVgobWVnYSwgIk1zIikKLQkgIF9HTElCQ1hYX1VO SVRTX1NVRkZJWChnaWdhLCAiR3MiKQotCSAgX0dMSUJDWFhfVU5JVFNfU1VGRklYKHRlcmEsICJU cyIpCi0JICBfR0xJQkNYWF9VTklUU19TVUZGSVgodGVyYSwgIlRzIikKLQkgIF9HTElCQ1hYX1VO SVRTX1NVRkZJWChwZXRhLCAiUHMiKQotCSAgX0dMSUJDWFhfVU5JVFNfU1VGRklYKGV4YSwgIkVz IikKLQkgIF9HTElCQ1hYX1VOSVRTX1NVRkZJWChyYXRpbzw2MD4sICJtaW4iKQotCSAgX0dMSUJD WFhfVU5JVFNfU1VGRklYKHJhdGlvPDM2MDA+LCAiaCIpCi0JICBfR0xJQkNYWF9VTklUU19TVUZG SVgocmF0aW88ODY0MDA+LCAiZCIpCi0jdW5kZWYgX0dMSUJDWFhfVU5JVFNfU1VGRklYCi0JICBy ZXR1cm4gX19kZXRhaWw6Ol9fdW5pdHNfc3VmZml4X21pc2M8X1BlcmlvZD4oX19idWYsIF9fbik7 Ci0JfQotICAgIH0gLy8gbmFtZXNwYWNlIF9fZGV0YWlsCi0gICAgLy8vIEBlbmRjb25kCi0KLSAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsCi0JICAgICB0eXBl bmFtZSBfUmVwLCB0eXBlbmFtZSBfUGVyaW9kPgotICAgICAgaW5saW5lIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKLSAgICAgIG9wZXJhdG9yPDwoc3RkOjpiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mIF9fb3MsCi0JCWNvbnN0IGR1cmF0aW9uPF9SZXAsIF9QZXJpb2Q+JiBf X2QpCi0gICAgICB7Ci0JdXNpbmcgcGVyaW9kID0gdHlwZW5hbWUgX1BlcmlvZDo6dHlwZTsKLQlj aGFyIF9fYnVmW3NpemVvZigiWy9dcyIpICsgMiAqIG51bWVyaWNfbGltaXRzPGludG1heF90Pjo6 ZGlnaXRzMTBdOwotCXN0ZDo6YmFzaWNfb3N0cmluZ3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9f czsKLQlfX3MuZmxhZ3MoX19vcy5mbGFncygpKTsKLQlfX3MuaW1idWUoX19vcy5nZXRsb2MoKSk7 Ci0JX19zLnByZWNpc2lvbihfX29zLnByZWNpc2lvbigpKTsKLQlfX3MgPDwgX19kLmNvdW50KCk7 Ci0JX19zIDw8IF9fZGV0YWlsOjpfX3VuaXRzX3N1ZmZpeDxwZXJpb2QsIF9DaGFyVD4oX19idWYs IHNpemVvZihfX2J1ZikpOwotCV9fb3MgPDwgc3RkOjptb3ZlKF9fcykuc3RyKCk7Ci0JcmV0dXJu IF9fb3M7Ci0gICAgICB9Ci0KLSAgICAvLyBUT0RPOiBmcm9tX3N0cmVhbSBmb3IgZHVyYXRpb24K LQotICAgIC8vLyBAfSBncm91cCBjaHJvbm8KLSAgfSAvLyBuYW1lc3BhY2UgY2hyb25vCiAjZW5k aWYgLy8gQysrMjAKIAogX0dMSUJDWFhfRU5EX05BTUVTUEFDRV9WRVJTSU9OCiB9IC8vIG5hbWVz cGFjZSBzdGQKIAorI2lmIF9fY3BsdXNwbHVzID49IDIwMjAwMkwKKyMgaW5jbHVkZSA8Yml0cy9j aHJvbm9faW8uaD4KKyNlbmRpZgorCiAjZW5kaWYgLy8gQysrMTEKIAogI2VuZGlmIC8vX0dMSUJD WFhfQ0hST05PCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvc3JjL2MrKzIwL01ha2VmaWxlLmFt IGIvbGlic3RkYysrLXYzL3NyYy9jKysyMC9NYWtlZmlsZS5hbQppbmRleCBkNGMxZTI2ZTQwZS4u YTk1YjhjMjRkMjEgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9zcmMvYysrMjAvTWFrZWZpbGUu YW0KKysrIGIvbGlic3RkYysrLXYzL3NyYy9jKysyMC9NYWtlZmlsZS5hbQpAQCAtMzYsNyArMzYs NyBAQCBlbHNlCiBpbnN0X3NvdXJjZXMgPQogZW5kaWYKIAotc291cmNlcyA9Citzb3VyY2VzID0g dHpkYi5jYwogCiB2cGF0aCAlICQodG9wX3NyY2Rpcikvc3JjL2MrKzIwCiAKZGlmZiAtLWdpdCBh L2xpYnN0ZGMrKy12My9zcmMvYysrMjAvTWFrZWZpbGUuaW4gYi9saWJzdGRjKystdjMvc3JjL2Mr KzIwL01ha2VmaWxlLmluCmluZGV4IDlkYjcwYTNlN2ZiLi4yYWRjMWViNzEyZSAxMDA2NDQKLS0t IGEvbGlic3RkYysrLXYzL3NyYy9jKysyMC9NYWtlZmlsZS5pbgorKysgYi9saWJzdGRjKystdjMv c3JjL2MrKzIwL01ha2VmaWxlLmluCkBAIC0xMjEsNyArMTIxLDcgQEAgQ09ORklHX0NMRUFOX0ZJ TEVTID0KIENPTkZJR19DTEVBTl9WUEFUSF9GSUxFUyA9CiBMVExJQlJBUklFUyA9ICQobm9pbnN0 X0xUTElCUkFSSUVTKQogbGliY19fMjBjb252ZW5pZW5jZV9sYV9MSUJBREQgPQotYW1fX29iamVj dHNfMSA9CithbV9fb2JqZWN0c18xID0gdHpkYi5sbwogQEVOQUJMRV9FWFRFUk5fVEVNUExBVEVf VFJVRUBhbV9fb2JqZWN0c18yID0gc3N0cmVhbS1pbnN0LmxvCiBhbV9saWJjX18yMGNvbnZlbmll bmNlX2xhX09CSkVDVFMgPSAkKGFtX19vYmplY3RzXzEpICQoYW1fX29iamVjdHNfMikKIGxpYmNf XzIwY29udmVuaWVuY2VfbGFfT0JKRUNUUyA9ICQoYW1fbGliY19fMjBjb252ZW5pZW5jZV9sYV9P QkpFQ1RTKQpAQCAtNDMxLDcgKzQzMSw3IEBAIGhlYWRlcnMgPQogQEVOQUJMRV9FWFRFUk5fVEVN UExBVEVfVFJVRUBpbnN0X3NvdXJjZXMgPSBcCiBARU5BQkxFX0VYVEVSTl9URU1QTEFURV9UUlVF QAlzc3RyZWFtLWluc3QuY2MKIAotc291cmNlcyA9IAorc291cmNlcyA9IHR6ZGIuY2MKIGxpYmNf XzIwY29udmVuaWVuY2VfbGFfU09VUkNFUyA9ICQoc291cmNlcykgICQoaW5zdF9zb3VyY2VzKQog CiAjIEFNX0NYWEZMQUdTIG5lZWRzIHRvIGJlIGluIGVhY2ggc3ViZGlyZWN0b3J5IHNvIHRoYXQg aXQgY2FuIGJlCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvc3JjL2MrKzIwL3R6ZGIuY2MgYi9s aWJzdGRjKystdjMvc3JjL2MrKzIwL3R6ZGIuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjFhYWUzOThmODcxCi0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysrLXYz L3NyYy9jKysyMC90emRiLmNjCkBAIC0wLDAgKzEsNTEyIEBACisjZGVmaW5lIF9HTElCQ1hYX0RF RklOSU5HX1RaREIgMQorI2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxmc3RyZWFtPiAgLy8g aWZzdHJlYW0KKyNpbmNsdWRlIDxzc3RyZWFtPiAgLy8gaXN0cmluZ3N0cmVhbQorI2luY2x1ZGUg PGFsZ29yaXRobT4gLy8gcmFuZ2VzOjp1cHBlcl9ib3VuZCwgcmFuZ2VzOjpsb3dlcl9ib3VuZAor I2luY2x1ZGUgPGF0b21pYz4gICAgLy8gYXRvbWljX3JlZgorI2luY2x1ZGUgPG1lbW9yeT4gICAg Ly8gYXRvbWljPHNoYXJlZF9wdHI8VD4+CisjaW5jbHVkZSA8bXV0ZXg+ICAgICAvLyBtdXRleAor I2luY2x1ZGUgPGZpbGVzeXN0ZW0+CisKK25hbWVzcGFjZSBzdGQ6OmNocm9ubworeworICBjb25z dGV4cHIgdHpkYl9saXN0Ojp0emRiX2xpc3QobnVsbHB0cl90KSB7IH0KKworICBuYW1lc3BhY2UK KyAgeworICAgIGNvbnN0aW5pdCBtdXRleCBsaXN0X211dGV4OworICAgIGNvbnN0aW5pdCB0emRi X2xpc3QgdGhlX2xpc3QobnVsbHB0cik7CisgIH0KKworICBzdHJ1Y3QgdHpkYl9saXN0OjpfTm9k ZQorICB7CisgICAgdHpkYiBkYjsKKyAgICBzaGFyZWRfcHRyPF9Ob2RlPiBfTV9uZXh0OworCisg ICAgLy8gc3RhdGljIHNoYXJlZF9wdHI8X05vZGU+IF9TX2xvYWQoKTsKKyAgfTsKKworICBzdHJ1 Y3QgdHpkYjo6X1J1bGUKKyAgeworICAgIHN0cmluZyBuYW1lOyAvLyB0aGUgbmFtZSBvZiB0aGUg cnVsZSBzZXQgdGhhdCBjb250YWlucyB0aGlzIGxpbmUKKyAgICB5ZWFyIGZyb207IC8vIGZpcnN0 IHllYXIgaW4gd2hpY2ggdGhlIHJ1bGUgYXBwbGllcworICAgIHllYXIgdG87ICAgLy8gZmluYWwg eWVhciBpbiB3aGljaCB0aGUgcnVsZSBhcHBsaWVzCisgICAgbW9udGhfZGF5IG9uOyAvLyB0aGUg ZGF5IG9uIHdoaWNoIHRoZSBydWxlIHRha2VzIGVmZmVjdAorICAgIGhoX21tX3NzPHNlY29uZHM+ IGF0OyAvLyB0aGUgdGltZSBvZiBkYXkgYXQgd2hpY2ggdGhlIHJ1bGUgdGFrZXMgZWZmZWN0Cisg ICAgbWludXRlcyBzYXZlOyAvLyB0aGUgYW1vdW50IG9mIHRpbWUgdG8gYmUgYWRkZWQgd2hlbiB0 aGUgcnVsZSBpcyBpbiBlZmZlY3QKKyAgICBzdHJpbmcgbGV0dGVyczsgLy8gdmFyaWFibGUgcGFy dCBvZiBUWiBhYmJyZXZpYXRpb25zIHdoZW4gcnVsZSBpbiBlZmZlY3QKKyAgfTsKKworICAvLyBU aGlzIGlzIHRoZSBvd25pbmcgcmVmZXJlbmNlIHRvIHRoZSBmaXJzdCB0emRiIGluIHRoZSBsaXN0 LgorI2lmIFVTRV9BVE9NSUNfU0hBUkVEX1BUUgorICBjb25zdGluaXQgYXRvbWljPHNoYXJlZF9w dHI8dHpkYl9saXN0OjpfTm9kZT4+IHR6ZGJfbGlzdDo6X1NfaGVhZF9vd25lcnt9OworI2Vsc2UK KyAgLy8gbGlzdF9tdXRleCBtdXN0IGJlIGxvY2tlZCB0byBhY2Nlc3MgdGhpcy4KKyAgY29uc3Rp bml0IHNoYXJlZF9wdHI8dHpkYl9saXN0OjpfTm9kZT4gdHpkYl9saXN0OjpfU19oZWFkX293bmVy ID0gbnVsbHB0cjsKKyNlbmRpZgorICAvLyBMb2NrLWZyZWUgYWNjZXNzIHRvIHRoZSBoZWFkIG9m IHRoZSBsaXN0LgorICAvLyBUaGlzIG11c3QgYmUgYWNjZXNzZWQgYXRvbWljYWxseSwgdXNpbmcg YXRvbWljX3JlZjxfTm9kZSo+LgorICBjb25zdGluaXQgdHpkYl9saXN0OjpfTm9kZSogdHpkYl9s aXN0OjpfU19oZWFkID0gbnVsbHB0cjsKKworICAvLyBUaGVyZSBhcmUgb25seSB0aHJlZSB3YXlz IGZvciB1c2VycyB0byBhY2Nlc3MgdGhlIHR6ZGIgbGlzdC4KKyAgLy8gZ2V0X3R6ZGJfbGlzdCgp IHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGxpc3QgaXRzZWxmLgorICAvLyBnZXRfdHpkYigp IHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIGZyb250IG9mIHRoZSBsaXN0LgorICAvLyByZWxv YWRfdHpkYigpIHJldHVybnMgYSByZWZlcmVuY2UgdG8gdGhlIChwb3NzaWJseSBuZXcpIGZyb250 IG9mIHRoZSBsaXN0LgorICAvLyBUaG9zZSBhcmUgdGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgbmVl ZCB0byBjaGVjayB3aGV0aGVyIHRoZSBsaXN0IGhhcworICAvLyBiZWVuIHBvcHVsYXRlZCBhbHJl YWR5LgorCisgIGNvbnN0IHR6ZGJfbGlzdCYKKyAgZ2V0X3R6ZGJfbGlzdCgpCisgIHsKKyAgICBh dG9taWNfcmVmPHR6ZGJfbGlzdDo6X05vZGUqPiBoZWFkKHR6ZGJfbGlzdDo6X1NfaGVhZCk7Cisg ICAgaWYgKGhlYWQgPT0gbnVsbHB0cikgW1t1bmxpa2VseV1dCisgICAgICByZWxvYWRfdHpkYigp OyAvLyBwb3B1bGF0ZXMgbGlzdAorICAgIHJldHVybiB0aGVfbGlzdDsKKyAgfQorCisgIC8vIFRo aXMgaXMKKyAgY29uc3QgdHpkYiYKKyAgZ2V0X3R6ZGIoKQorICB7CisgICAgYXRvbWljX3JlZjx0 emRiX2xpc3Q6Ol9Ob2RlKj4gaGVhZCh0emRiX2xpc3Q6Ol9TX2hlYWQpOworICAgIGlmIChoZWFk ID09IG51bGxwdHIpIFtbdW5saWtlbHldXQorICAgICAgcmV0dXJuIHJlbG9hZF90emRiKCk7IC8v IHBvcHVsYXRlcyBsaXN0CisgICAgcmV0dXJuIGhlYWQubG9hZCgpLT5kYjsKKyAgfQorCisgIG5h bWVzcGFjZQorICB7CisgICAgc3RyaW5nCisgICAgcmVtb3RlX3ZlcnNpb24oaXN0cmVhbSYgemlm KQorICAgIHsKKyAgICAgIGNoYXIgaGFzaDsKKyAgICAgIHN0cmluZyBsYWJlbDsKKyAgICAgIHN0 cmluZyB2ZXJzaW9uOworICAgICAgaWYgKHppZiA+PiBoYXNoID4+IGxhYmVsID4+IHZlcnNpb24p CisJaWYgKGhhc2ggPT0gJyMnICYmIGxhYmVsID09ICJ2ZXJzaW9uIiAmJiB2ZXJzaW9uLnNpemUo KSA9PSA1KQorCSAgcmV0dXJuIHZlcnNpb247CisgICAgICBfX3Rocm93X3J1bnRpbWVfZXJyb3Io InR6ZGI6IG5vIHZlcnNpb24gZm91bmQgaW4gdHpkYXRhLnppIik7CisgICAgfQorCisgICAgc3Ry dWN0IHppX3J1bGUKKyAgICB7CisgICAgfTsKKyAgfQorCisgIHN0cnVjdCB0aW1lX3pvbmU6Ol9J bXBsCisgIHsKKyAgICBzdHJpbmcgbmFtZTsKKyAgfTsKKworICB0aW1lX3pvbmU6OnRpbWVfem9u ZSh1bmlxdWVfcHRyPF9JbXBsPiBfX3ApIDogX01faW1wbChzdGQ6Om1vdmUoX19wKSkgeyB9CisK KyAgdGltZV96b25lOjp+dGltZV96b25lKCkgPSBkZWZhdWx0OworCisgIHN0cmluZyByZW1vdGVf dmVyc2lvbigpCisgIHsKKyAgICBpZnN0cmVhbSB6aWYoIi91c3Ivc2hhcmUvem9uZWluZm8vdHpk YXRhLnppIik7CisgICAgcmV0dXJuIHJlbW90ZV92ZXJzaW9uKHppZik7CisgIH0KKworICBjb25z dCB0emRiJgorICByZWxvYWRfdHpkYigpCisgIHsKKyAgICBpZnN0cmVhbSB6aWYoIi91c3Ivc2hh cmUvem9uZWluZm8vdHpkYXRhLnppIik7CisgICAgY29uc3Qgc3RyaW5nIHZlcnNpb24gPSByZW1v dGVfdmVyc2lvbih6aWYpOworCisjaWYgVVNFX0FUT01JQ19TSEFSRURfUFRSCisgICAgYXV0byBo ZWFkID0gdHpkYl9saXN0OjpfU19oZWFkX293bmVyLmxvYWQoKTsKKyAgICBpZiAoaGVhZCAhPSBu dWxscHRyICYmIGhlYWQtPmRiLnZlcnNpb24gPT0gdmVyc2lvbikKKyAgICAgIHJldHVybiBoZWFk LT5kYjsKKyNlbHNlCisgICAgYXRvbWljX3JlZjx0emRiX2xpc3Q6Ol9Ob2RlKj4gaGVhZCh0emRi X2xpc3Q6Ol9TX2hlYWQpOworICAgIGlmIChoZWFkICE9IG51bGxwdHIpIFtbbGlrZWx5XV0KKyAg ICB7CisgICAgICBsb2NrX2d1YXJkPG11dGV4PiBsKGxpc3RfbXV0ZXgpOworICAgICAgY29uc3Qg dHpkYiYgY3VycmVudCA9IHR6ZGJfbGlzdDo6X1NfaGVhZF9vd25lci0+ZGI7CisgICAgICBpZiAo Y3VycmVudC52ZXJzaW9uID09IHZlcnNpb24pCisJcmV0dXJuIGN1cnJlbnQ7CisgICAgfQorI2Vu ZGlmCisKKyAgICB2ZWN0b3I8bGVhcF9zZWNvbmQ+IGxlYXBzCisgICAgeworICAgICAgKGxlYXBf c2Vjb25kKSAgNzg3OTY4MDAsIC8vIDEgSnVsIDE5NzIKKyAgICAgIChsZWFwX3NlY29uZCkgIDk0 Njk0NDAwLCAvLyAxIEphbiAxOTczCisgICAgICAobGVhcF9zZWNvbmQpIDEyNjIzMDQwMCwgLy8g MSBKYW4gMTk3NAorICAgICAgKGxlYXBfc2Vjb25kKSAxNTc3NjY0MDAsIC8vIDEgSmFuIDE5NzUK KyAgICAgIChsZWFwX3NlY29uZCkgMTg5MzAyNDAwLCAvLyAxIEphbiAxOTc2CisgICAgICAobGVh cF9zZWNvbmQpIDIyMDkyNDgwMCwgLy8gMSBKYW4gMTk3NworICAgICAgKGxlYXBfc2Vjb25kKSAy NTI0NjA4MDAsIC8vIDEgSmFuIDE5NzgKKyAgICAgIChsZWFwX3NlY29uZCkgMjgzOTk2ODAwLCAv LyAxIEphbiAxOTc5CisgICAgICAobGVhcF9zZWNvbmQpIDMxNTUzMjgwMCwgLy8gMSBKYW4gMTk4 MAorICAgICAgKGxlYXBfc2Vjb25kKSAzNjI3OTM2MDAsIC8vIDEgSnVsIDE5ODEKKyAgICAgIChs ZWFwX3NlY29uZCkgMzk0MzI5NjAwLCAvLyAxIEp1bCAxOTgyCisgICAgICAobGVhcF9zZWNvbmQp IDQyNTg2NTYwMCwgLy8gMSBKdWwgMTk4MworICAgICAgKGxlYXBfc2Vjb25kKSA0ODkwMjQwMDAs IC8vIDEgSnVsIDE5ODUKKyAgICAgIChsZWFwX3NlY29uZCkgNTY3OTkzNjAwLCAvLyAxIEphbiAx OTg4CisgICAgICAobGVhcF9zZWNvbmQpIDYzMTE1MjAwMCwgLy8gMSBKYW4gMTk5MAorICAgICAg KGxlYXBfc2Vjb25kKSA2NjI2ODgwMDAsIC8vIDEgSmFuIDE5OTEKKyAgICAgIChsZWFwX3NlY29u ZCkgNzA5OTQ4ODAwLCAvLyAxIEp1bCAxOTkyCisgICAgICAobGVhcF9zZWNvbmQpIDc0MTQ4NDgw MCwgLy8gMSBKdWwgMTk5MworICAgICAgKGxlYXBfc2Vjb25kKSA3NzMwMjA4MDAsIC8vIDEgSnVs IDE5OTQKKyAgICAgIChsZWFwX3NlY29uZCkgODIwNDU0NDAwLCAvLyAxIEphbiAxOTk2CisgICAg ICAobGVhcF9zZWNvbmQpIDg2NzcxNTIwMCwgLy8gMSBKdWwgMTk5NworICAgICAgKGxlYXBfc2Vj b25kKSA5MTUxNDg4MDAsIC8vIDEgSmFuIDE5OTkKKyAgICAgIChsZWFwX3NlY29uZCkxMTM2MDcz NjAwLCAvLyAxIEphbiAyMDA2CisgICAgICAobGVhcF9zZWNvbmQpMTIzMDc2ODAwMCwgLy8gMSBK YW4gMjAwOQorICAgICAgKGxlYXBfc2Vjb25kKTEzNDExMDA4MDAsIC8vIDEgSnVsIDIwMTIKKyAg ICAgIChsZWFwX3NlY29uZCkxNDM1NzA4ODAwLCAvLyAxIEp1bCAyMDE1CisgICAgICAobGVhcF9z ZWNvbmQpMTQ4MzIyODgwMCwgLy8gMSBKYW4gMjAxNworICAgIH07CisgICAgaWZzdHJlYW0gbHMo Ii91c3Ivc2hhcmUvem9uZWluZm8vbGVhcHNlY29uZHMiKTsKKyAgICBpZiAobHMpCisgICAgICB7 CisJc3RkOjpzdHJpbmcgczsKKwl3aGlsZSAoc3RkOjpnZXRsaW5lKGxzLCBzKSkKKwkgIHsKKwkg ICAgaWYgKCFzLnN0YXJ0c193aXRoKCJMZWFwIikpCisJICAgICAgY29udGludWU7CisJICAgIGlz dHJpbmdzdHJlYW0gbGkoc3RkOjptb3ZlKHMpKTsgLy8gRklYTUU6IHVzZSBpc3BhbnN0cmVhbQor CSAgICBsaS5leGNlcHRpb25zKGlvczo6ZmFpbGJpdCk7CisJICAgIHVuc2lnbmVkIHl2YWw7CisJ ICAgIGNoYXIgbTsKKwkgICAgaWYgKGxpID4+IHMgPj4geXZhbCA+PiBtKQorCSAgICAgIHsKKwkJ aWYgKG0gIT0gJ0onICYmIG0gIT0gJ0QnKQorCQkgIF9fdGhyb3dfcnVudGltZV9lcnJvcigidHpk YjogY2Fubm90IHBhcnNlIGxlYXBzZWNvbmRzIGZpbGUiKTsKKwkJaWYgKHl2YWwgPCAyMDIwKQor CQkgIGNvbnRpbnVlOworCQljb25zdCBpbnQgaXNfZGVjZW1iZXIgPSBtID09ICdEJzsKKwkJeWVh cl9tb250aF9kYXkgeW1ke3llYXIoeXZhbCksCisJCQkJICAgICBtb250aCg2ICsgNiAqIGlzX2Rl Y2VtYmVyKSwKKwkJCQkgICAgIGRheSgzMCArIGlzX2RlY2VtYmVyKX07CisJCXN5c19zZWNvbmRz IHNlY3Moc3lzX2RheXMoeW1kKSArIGRheXMoMSkpOworCQlsaSA+PiBzID4+IHMgPj4gbTsKKwor CQlpZiAobSAhPSAnKycgJiYgbSAhPSAnLScpIHRocm93IDE7IC8vIFhYWAorCisJCXNlY29uZHM6 OnJlcCB2YWwgPSBzZWNzLnRpbWVfc2luY2VfZXBvY2goKS5jb3VudCgpOworCQlpZiAobSA9PSAn LScpIFtbdW5saWtlbHldXQorCQkgIHZhbCA9IC12YWw7CisJCWxlYXBzLnB1c2hfYmFjayhsZWFw X3NlY29uZCh2YWwpKTsKKwkgICAgICB9CisJICB9CisgICAgICB9CisKKyAgICAvLyBTZWUgaHR0 cHM6Ly9tYW43Lm9yZy9saW51eC9tYW4tcGFnZXMvbWFuOC96aWMuOC5odG1sI0ZJTEVTCisgICAg Ly8gZm9yIGRvY3VtZW50YXRpb24gb2YgdGhlIHR6ZGF0YS56aSBmaWxlLgorCisjaWYgVVNFX0FU T01JQ19TSEFSRURfUFRSCisgICAgYXV0byBub2RlID0gc3RkOjptYWtlX3NoYXJlZDx0emRiX2xp c3Q6Ol9Ob2RlPigpOworI2Vsc2UKKyAgICBhdXRvIG5vZGUgPSBzdGQ6Om1ha2VfdW5pcXVlPHR6 ZGJfbGlzdDo6X05vZGU+KCk7CisjZW5kaWYKKworICAgIHN0cmluZyBsaW5lOworICAgIGxpbmUu cmVzZXJ2ZSg1MTEpOworICAgIHN0cmluZyB0eXBlOworICAgIGlzdHJpbmdzdHJlYW0gaXM7IC8v IEZJWE1FOiB1c2UgaXNwYW5zdHJlYW0KKyAgICBpcy5leGNlcHRpb25zKGlvczo6ZmFpbGJpdCk7 CisgICAgd2hpbGUgKHN0ZDo6Z2V0bGluZSh6aWYsIGxpbmUpKQorICAgICAgeworCWlmIChsaW5l LmVtcHR5KCkgfHwgbGluZS5mcm9udCgpID09ICcjJykKKwkgIGNvbnRpbnVlOworCWlzLmNsZWFy KCk7CisJaXMuc3RyKGxpbmUpOworCWlzLmlnbm9yZSgxKTsKKwlzd2l0Y2ggKGxpbmUuZnJvbnQo KSkKKwl7CisJICBjYXNlICdSJzogLy8gUnVsZSAgTkFNRSAgRlJPTSAgVE8gIFRZUEUgIElOICBP TiAgQVQgIFNBVkUgIExFVFRFUi9TCisJICB7CisJICAgIHR6ZGI6Ol9SdWxlIHJ1bGU7CisJICAg IGludCBmcm9tLCB0bzsKKwkgICAgY2hhciB0eXBlOworCSAgICBzdHJpbmcgc3RyOworCSAgICBp cyA+PiBzdGQ6OnF1b3RlZChydWxlLm5hbWUpID4+IGZyb20gPj4gdG8gPj4gdHlwZSA+PiBzdHI7 CisJICAgIGlmICh0eXBlICE9ICctJykKKwkgICAgICBpcy5zZXRzdGF0ZShpb3M6OmZhaWxiaXQp OworCSAgICBydWxlLmZyb20gPSB5ZWFyKGZyb20pOworCSAgICBydWxlLnRvID0geWVhcih0byk7 CisJICAgIG1vbnRoIG07CisJICAgIGRheSBkOworCSAgICBzd2l0Y2ggKHN0clswXSkKKwkgICAg eworCSAgICBjYXNlICdKJzoKKwkgICAgICBzd2l0Y2ggKHN0clsxXSkKKwkgICAgICB7CisJICAg ICAgY2FzZSAnYSc6CisJCW0gPSBKYW51YXJ5OworCQlicmVhazsKKwkgICAgICBjYXNlICd1JzoK KwkJc3dpdGNoIChzdHJbMl0pCisJCXsKKwkJY2FzZSAnbic6CisJCSAgbSA9IEp1bmU7CisJCSAg YnJlYWs7CisJCWNhc2UgJ2wnOgorCQkgIG0gPSBKdWx5OworCQkgIGJyZWFrOworCQlkZWZhdWx0 OgorCQkgIGlzLnNldHN0YXRlKGlvczo6ZmFpbGJpdCk7CisJCX0KKwkJYnJlYWs7CisJICAgICAg ZGVmYXVsdDoKKwkJaXMuc2V0c3RhdGUoaW9zOjpmYWlsYml0KTsKKwkgICAgICB9CisJICAgICAg YnJlYWs7CisJICAgIGNhc2UgJ0YnOgorCSAgICAgIG0gPSBGZWJydWFyeTsKKwkgICAgICBicmVh azsKKwkgICAgY2FzZSAnTSc6CisJICAgICAgaWYgKHN0clsxXSAhPSAnYScpCisJCWlzLnNldHN0 YXRlKGlvczo6ZmFpbGJpdCk7CisJICAgICAgc3dpdGNoIChzdHJbMl0pCisJICAgICAgeworCSAg ICAgIGNhc2UgJ3InOgorCQltID0gTWFyY2g7CisJCWJyZWFrOworCSAgICAgIGNhc2UgJ3knOgor CQltID0gTWF5OworCQlicmVhazsKKwkgICAgICBkZWZhdWx0OgorCQlpcy5zZXRzdGF0ZShpb3M6 OmZhaWxiaXQpOworCSAgICAgIH0KKwkgICAgICBicmVhazsKKwkgICAgY2FzZSAnQSc6CisJICAg ICAgc3dpdGNoIChzdHJbMV0pCisJICAgICAgeworCSAgICAgIGNhc2UgJ3AnOgorCQltID0gQXBy aWw7CisJCWJyZWFrOworCSAgICAgIGNhc2UgJ3UnOgorCQltID0gQXVndXN0OworCQlicmVhazsK KwkgICAgICBkZWZhdWx0OgorCQlpcy5zZXRzdGF0ZShpb3M6OmZhaWxiaXQpOworCSAgICAgIH0K KwkgICAgICBicmVhazsKKwkgICAgY2FzZSAnUyc6CisJICAgICAgbSA9IFNlcHRlbWJlcjsKKwkg ICAgICBicmVhazsKKwkgICAgY2FzZSAnTyc6CisJICAgICAgbSA9IE9jdG9iZXI7CisJICAgICAg YnJlYWs7CisJICAgIGNhc2UgJ04nOgorCSAgICAgIG0gPSBOb3ZlbWJlcjsKKwkgICAgICBicmVh azsKKwkgICAgY2FzZSAnRCc6CisJICAgICAgbSA9IERlY2VtYmVyOworCSAgICAgIGJyZWFrOwor CSAgICBkZWZhdWx0OgorCSAgICAgIGlzLnNldHN0YXRlKGlvczo6ZmFpbGJpdCk7CisJICAgIH0K KwkgICAgaXMgPj4gc3RyOworCSAgICAvLyBUT0RPIHBhcnNlIE9OIGludG8gZAorCSAgICBydWxl Lm9uID0gbW9udGhfZGF5e20sIGR9OworCSAgICBpcyA+PiBzdHI7CisJICAgIC8vIFRPRE8gcGFy c2UgQVQgaW50byBydWxlLmF0CisJICAgIGlzID4+IHN0cjsKKwkgICAgLy8gVE9ETyBwYXJzZSBT QVZFIGludG8gcnVsZS5zYXZlCisJICAgIGlzID4+IHJ1bGUubGV0dGVyczsKKwkgICAgbm9kZS0+ ZGIuX01fcnVsZXMucHVzaF9iYWNrKHN0ZDo6bW92ZShydWxlKSk7CisJICAgIGJyZWFrOworCSAg fQorCSAgY2FzZSAnTCc6IC8vIExpbmsgIFRBUkdFVCAgICAgICAgICAgTElOSy1OQU1FCisJICB7 CisJICAgIHRpbWVfem9uZV9saW5rIGxpbmsobnVsbHB0cik7CisJICAgIGlzID4+IHN0ZDo6cXVv dGVkKGxpbmsuX01fdGFyZ2V0KSA+PiBzdGQ6OnF1b3RlZChsaW5rLl9NX25hbWUpOworCSAgICBu b2RlLT5kYi5saW5rcy5wdXNoX2JhY2soc3RkOjptb3ZlKGxpbmspKTsKKwkgICAgYnJlYWs7CisJ ICB9CisJICBjYXNlICdaJzogLy8gWm9uZSAgTkFNRSAgICAgICAgU1RET0ZGICBSVUxFUyAgIEZP Uk1BVCAgW1VOVElMXQorCSAgeworCSAgICBhdXRvIHR6ID0gc3RkOjptYWtlX3VuaXF1ZTx0aW1l X3pvbmU6Ol9JbXBsPigpOworCSAgICBpcyA+PiBzdGQ6OnF1b3RlZCh0ei0+bmFtZSk7CisJICAg IG5vZGUtPmRiLnpvbmVzLnB1c2hfYmFjayh0aW1lX3pvbmUoc3RkOjptb3ZlKHR6KSkpOworCSAg ICBbW2ZhbGx0aHJvdWdoXV07IC8vIFVzZSBkZWZhdWx0IGNhc2UgdG8gcGFyc2UgcmVzdCBvZiBs aW5lIC4uLgorCSAgfQorCSAgZGVmYXVsdDogLy8gU1RET0ZGICBSVUxFUyAgIEZPUk1BVCAgW1VO VElMXQorCSAgeworCSAgICAvLyBUaGlzIGlzIGEgY29udGludWF0aW9uIG9mIHRoZSBwcmV2aW91 cyBab25lIGxpbmUuCisJICAgIHRpbWVfem9uZSYgdHogPSBub2RlLT5kYi56b25lcy5iYWNrKCk7 CisJICAgIC8vIFRPRE8KKwkgIH0KKwl9CisKKworICAgICAgfQorICAgIC8vIFRPRE86IHBhcnNl IGZpbGUKKworICAgIC8vIFRPRE8gc29ydCB2ZWN0b3JzCisgICAgLy8KKyAgICAvLyBzb3J0IHJ1 bGVzIGZpcnN0LCB0aGVuIGxpbmsgZWFjaCB0aW1lX3pvbmUgdG8gcnVsZXMsCisgICAgLy8gYnkg cmVwbGFjaW5nIHRoZSBjb25zdCBjaGFyKiBwb2ludGluZyB0byB0aGUgcnVsZSBuYW1lCisgICAg Ly8gd2l0aCBjb25zdCBfUnVsZSogcG9pbnRpbmcgdG8gdGhlIHJ1bGUgaXRzZWxmLgorICAgIC8v IEltcGxpZXMgdGltZV96b25lIGltcGwgbmVlZHMgdW5pb24geyBjb25zdCBjaGFyKiBuYW1lOyBj b25zdCBfUnVsZSogcjsgfQorCisjaWYgVVNFX0FUT01JQ19TSEFSRURfUFRSCisgICAgd2hpbGUg KCFfTV9oZWFkX293bmVyLmNvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nKGhlYWQsIG5vZGUpKQorICAg ICAgaWYgKGhlYWQtPmRiLnZlcnNpb24gPT0gdmVyc2lvbikKKwlyZXR1cm4gKmhlYWQ7CisgICAg Ly8gWFhYIHNtYWxsIHdpbmRvdyBoZXJlIHdoZXJlIF9TX2hlYWQgc3RpbGwgcG9pbnRzIHRvIHBy ZXZpb3VzIHR6ZGIuCisgICAgX1NfaGVhZCA9IG5vZGUuZ2V0KCk7CisgICAgcmV0dXJuICpub2Rl OworI2Vsc2UKKyAgICBsb2NrX2d1YXJkPG11dGV4PiBsKGxpc3RfbXV0ZXgpOworICAgIGlmIChj b25zdCB0emRiX2xpc3Q6Ol9Ob2RlKiBoID0gaGVhZCkKKyAgICAgIHsKKwlpZiAoaC0+ZGIudmVy c2lvbiA9PSB2ZXJzaW9uKQorCSAgcmV0dXJuIGgtPmRiOworICAgICAgfQorICAgIGF1dG8qIHBu b2RlID0gbm9kZS5nZXQoKTsKKyAgICB0emRiX2xpc3Q6Ol9TX2hlYWRfb3duZXIgPSBzdGQ6Om1v dmUobm9kZSk7CisgICAgaGVhZCA9IHBub2RlOworICAgIHJldHVybiBwbm9kZS0+ZGI7CisjZW5k aWYKKyAgfQorCisgIC8vIEFueSBjYWxsIHRvIHR6ZGJfbGlzdDo6ZnJvbnQoKSBvciB0emRiX2xp c3Q6OmJlZ2luKCkgbXVzdCBmb2xsb3cgYSBjYWxsCisgIC8vIHRvIGdldF90emRiX2xpc3QoKSBz byB0aGUgbGlzdCBoYXMgYWxyZWFkeSBiZWVuIHBvcHVsYXRlZC4KKworICBjb25zdCB0emRiJgor ICB0emRiX2xpc3Q6OmZyb250KCkgY29uc3Qgbm9leGNlcHQKKyAgeworICAgIGF0b21pY19yZWY8 X05vZGUqPiBoZWFkKF9TX2hlYWQpOworICAgIHJldHVybiBoZWFkLmxvYWQoKS0+ZGI7CisgIH0K KworICBhdXRvCisgIHR6ZGJfbGlzdDo6YmVnaW4oKSBjb25zdCBub2V4Y2VwdAorICAtPiBjb25z dF9pdGVyYXRvcgorICB7CisjaWYgVVNFX0FUT01JQ19TSEFSRURfUFRSCisgICAgcmV0dXJuIGNv bnN0X2l0ZXJhdG9ye19TX2hlYWRfb3duZXIubG9hZCgpfTsKKyNlbHNlCisgICAgbG9ja19ndWFy ZDxtdXRleD4gbChsaXN0X211dGV4KTsKKyAgICByZXR1cm4gY29uc3RfaXRlcmF0b3J7X1NfaGVh ZF9vd25lcn07CisjZW5kaWYKKyAgfQorCisgIGF1dG8KKyAgdHpkYl9saXN0OjplcmFzZV9hZnRl cihjb25zdF9pdGVyYXRvciBwKQorICAtPiBjb25zdF9pdGVyYXRvcgorICB7CisgICAgaWYgKHAu X01fbm9kZSkgW1tsaWtlbHldXQorICAgICAgaWYgKGF1dG8gbmV4dCA9IHAuX01fbm9kZS0+X01f bmV4dCkgW1tsaWtlbHldXQorCXJldHVybiBjb25zdF9pdGVyYXRvcntwLl9NX25vZGUtPl9NX25l eHQgPSBzdGQ6Om1vdmUobmV4dC0+X01fbmV4dCl9OworCisgICAgLy8gVGhpcyBpcyB1bmRlZmlu ZWQsIGJ1dCBsZXQncyBiZSBraW5kOgorICAgIHN0ZDo6X190aHJvd19sb2dpY19lcnJvcigic3Rk Ojp0emRiX2xpc3Q6OmVyYXNlX2FmdGVyOiBpdGVyYXRvciBpcyBub3QgIgorCQkJICAgICAiZGVy ZWZlcmVuY2VhYmxlIik7CisgIH0KKworICBhdXRvCisgIHR6ZGJfbGlzdDo6Y29uc3RfaXRlcmF0 b3I6Om9wZXJhdG9yKigpIGNvbnN0CisgIC0+IHJlZmVyZW5jZQorICB7CisgICAgcmV0dXJuIF9N X25vZGUtPmRiOworICB9CisKKyAgYXV0bworICB0emRiX2xpc3Q6OmNvbnN0X2l0ZXJhdG9yOjpv cGVyYXRvcisrKCkKKyAgLT4gY29uc3RfaXRlcmF0b3ImCisgIHsKKyAgICBhdXRvIGN1ciA9IHN0 ZDo6bW92ZShfTV9ub2RlKTsKKyAgICBfTV9ub2RlID0gY3VyLT5fTV9uZXh0OworICAgIHJldHVy biAqdGhpczsKKyAgfQorCisgIGF1dG8KKyAgdHpkYl9saXN0Ojpjb25zdF9pdGVyYXRvcjo6b3Bl cmF0b3IrKyhpbnQpCisgIC0+IGNvbnN0X2l0ZXJhdG9yCisgIHsKKyAgICBhdXRvIHRtcCA9IHN0 ZDo6bW92ZSgqdGhpcyk7CisgICAgX01fbm9kZSA9IHRtcC5fTV9ub2RlLT5fTV9uZXh0OworICAg IHJldHVybiB0bXA7CisgIH0KKworICBsZWFwX3NlY29uZF9pbmZvCisgIGxlYXBfc2Vjb25kOjpf U19nZXRfaW5mbyhjb25zdCB1dGNfdGltZTxzZWNvbmRzPiYgdXQpCisgIHsKKyAgICBhdXRvIGJl Z2luID0gdGhlX2xpc3QuYmVnaW4oKTsKKyAgICBjb25zdCBhdXRvJiBsZWFwcyA9IGJlZ2luLT5s ZWFwX3NlY29uZHM7CisgICAgbGVhcF9zZWNvbmQgc3t1dC50aW1lX3NpbmNlX2Vwb2NoKCkuY291 bnQoKX07CisgICAgYXV0byBwb3MgPSBzdGQ6OnVwcGVyX2JvdW5kKGxlYXBzLmJlZ2luKCksIGxl YXBzLmVuZCgpLCBzKTsKKyAgICByZXR1cm4geworICAgICAgcG9zICE9IGxlYXBzLmJlZ2luKCkg JiYgcG9zWy0xXSA9PSBzLAorICAgICAgc2Vjb25kc3twb3MgLSBsZWFwcy5iZWdpbigpfQorICAg IH07CisgIH0KKworICBuYW1lc3BhY2UKKyAgeworICAgIGNvbnN0IHRpbWVfem9uZSoKKyAgICBk b19sb2NhdGVfem9uZShjb25zdCB2ZWN0b3I8dGltZV96b25lPiYgem9uZXMsCisJCSAgIGNvbnN0 IHZlY3Rvcjx0aW1lX3pvbmVfbGluaz4mIGxpbmtzLAorCQkgICBzdHJpbmdfdmlldyB0el9uYW1l KSBub2V4Y2VwdAorICAgIHsKKyAgICAgIGF1dG8gZ2V0X25hbWUgPSBbXShjb25zdCBhdXRvJiB4 KSB7IHJldHVybiB4Lm5hbWUoKTsgfTsKKworICAgICAgYXV0byBzZWFyY2ggPSBbZ2V0X25hbWVd KGNvbnN0IGF1dG8mIHYsIHN0cmluZ192aWV3IG5hbWUpIHsKKwlhdXRvIHAgPSByYW5nZXM6Omxv d2VyX2JvdW5kKHYsIG5hbWUsIHt9LCBnZXRfbmFtZSk7CisJaWYgKHAgIT0gdi5lbmQoKSAmJiBw LT5uYW1lKCkgPT0gbmFtZSkKKwkgIHJldHVybiBwLmJhc2UoKTsKKwlyZXR1cm4gc3RhdGljX2Nh c3Q8ZGVjbHR5cGUocC5iYXNlKCkpPihudWxscHRyKTsKKyAgICAgIH07CisKKyAgICAgIGlmIChh dXRvIHR6ID0gc2VhcmNoKHpvbmVzLCB0el9uYW1lKSkKKwlyZXR1cm4gdHo7CisKKyAgICAgIGlm IChhdXRvIHR6X2wgPSBzZWFyY2gobGlua3MsIHR6X25hbWUpKQorCXJldHVybiBzZWFyY2goem9u ZXMsIHR6X2wtPnRhcmdldCgpKTsKKworICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICB9 IC8vIG5hbWVzcGFjZQorCisgIGNvbnN0IHRpbWVfem9uZSoKKyAgdHpkYjo6bG9jYXRlX3pvbmUo c3RyaW5nX3ZpZXcgdHpfbmFtZSkgY29uc3QKKyAgeworICAgIGlmIChhdXRvIHR6ID0gZG9fbG9j YXRlX3pvbmUoem9uZXMsIGxpbmtzLCB0el9uYW1lKSkKKyAgICAgIHJldHVybiB0ejsKKyAgICBz dHJpbmdfdmlldyBlcnIgPSAidHpkYjogY2Fubm90IGxvY2F0ZSB6b25lOiAiOworICAgIHN0cmlu ZyBzdHI7CisgICAgc3RyLnJlc2VydmUoZXJyLnNpemUoKSArIHR6X25hbWUuc2l6ZSgpKTsKKyAg ICBzdHIgKz0gZXJyOworICAgIHN0ciArPSB0el9uYW1lOworICAgIF9fdGhyb3dfcnVudGltZV9l cnJvcihzdHIuY19zdHIoKSk7CisgIH0KKworICBjb25zdCB0aW1lX3pvbmUqCisgIHR6ZGI6OmN1 cnJlbnRfem9uZSgpIGNvbnN0CisgIHsKKyAgICBlcnJvcl9jb2RlIGVjOworICAgIGF1dG8gcGF0 aCA9IGZpbGVzeXN0ZW06OnJlYWRfc3ltbGluaygiL2V0Yy9sb2NhbHRpbWUiLCBlYyk7CisgICAg aWYgKCFlYykKKyAgICAgIHsKKwlhdXRvIGZpcnN0ID0gcGF0aC5iZWdpbigpLCBsYXN0ID0gcGF0 aC5lbmQoKTsKKwlpZiAoc3RkOjpkaXN0YW5jZShmaXJzdCwgbGFzdCkgPiAyKQorCSAgeworCSAg ICAtLWxhc3Q7CisJICAgIHN0cmluZyBuYW1lID0gc3RkOjpwcmV2KGxhc3QpLT5zdHJpbmcoKSAr ICcvJyArIGxhc3QtPnN0cmluZygpOworCSAgICBpZiAoYXV0byB0eiA9IGRvX2xvY2F0ZV96b25l KHpvbmVzLCBsaW5rcywgbmFtZSkpCisJICAgICAgcmV0dXJuIHR6OworCSAgfQorICAgICAgfQor ICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigidHpkYjogY2Fubm90IGRldGVybWluZSBjdXJyZW50 IHpvbmUiKTsKKyAgfQorCisgIGNvbnN0IHRpbWVfem9uZSoKKyAgbG9jYXRlX3pvbmUoc3RyaW5n X3ZpZXcgdHpfbmFtZSkKKyAgeworICAgIHJldHVybiBnZXRfdHpkYl9saXN0KCkuYmVnaW4oKS0+ bG9jYXRlX3pvbmUodHpfbmFtZSk7CisgIH0KKworICBjb25zdCB0aW1lX3pvbmUqCisgIGN1cnJl bnRfem9uZSgpCisgIHsKKyAgICByZXR1cm4gZ2V0X3R6ZGJfbGlzdCgpLmJlZ2luKCktPmN1cnJl bnRfem9uZSgpOworICB9CisKK30gLy8gbmFtZXNwYWNlIHN0ZApkaWZmIC0tZ2l0IGEvbGlic3Rk YysrLXYzL3Rlc3RzdWl0ZS9zdGQvdGltZS9jbG9jay9ncHMvaW8uY2MgYi9saWJzdGRjKystdjMv dGVzdHN1aXRlL3N0ZC90aW1lL2Nsb2NrL2dwcy9pby5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uMjlmMzE0OGNmMTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRj KystdjMvdGVzdHN1aXRlL3N0ZC90aW1lL2Nsb2NrL2dwcy9pby5jYwpAQCAtMCwwICsxLDI0IEBA CisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9Z251KysyMCIgfQorLy8geyBkZy1kbyBydW4geyB0YXJn ZXQgYysrMjAgfSB9CisKKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8Zm9ybWF0PgorI2lu Y2x1ZGUgPHRlc3RzdWl0ZV9ob29rcy5oPgorCit2b2lkCit0ZXN0MDEoKQoreworICB1c2luZyBz dGQ6OmZvcm1hdDsKKyAgdXNpbmcgbmFtZXNwYWNlIHN0ZDo6Y2hyb25vOworCisgIGF1dG8gc3Qg PSBzeXNfZGF5c3syMDAweS9KYW51YXJ5LzF9OworICBhdXRvIGd0ID0gY2xvY2tfY2FzdDxncHNf Y2xvY2s+KHN0KTsKKworICBhdXRvIHMgPSBmb3JtYXQoInswOiVGICVUICVafSA9PSB7MTolRiAl VCAlWn0iLCBzdCwgZ3QpOworICBWRVJJRlkoIHMgPT0gIjIwMDAtMDEtMDEgMDA6MDA6MDAgVVRD ID09IDIwMDAtMDEtMDEgMDA6MDA6MTMgR1BTIiApOworfQorCitpbnQgbWFpbigpCit7CisgIHRl c3QwMSgpOworfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS9zdGQvdGltZS9j bG9jay9zeXN0ZW0vaW8uY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlL3N0ZC90aW1lL2Nsb2Nr L3N5c3RlbS9pby5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDdi YThjODRmNDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlL3N0ZC90 aW1lL2Nsb2NrL3N5c3RlbS9pby5jYwpAQCAtMCwwICsxLDM3IEBACisvLyB7IGRnLW9wdGlvbnMg Ii1zdGQ9Z251KysyMCIgfQorLy8geyBkZy1kbyBydW4geyB0YXJnZXQgYysrMjAgfSB9CisKKyNp bmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8c3N0cmVhbT4KKyNpbmNsdWRlIDx0ZXN0c3VpdGVf aG9va3MuaD4KKwordm9pZAordGVzdDAxKCkKK3sKKyAgdXNpbmcgbmFtZXNwYWNlIHN0ZDo6Y2hy b25vOworICBzdGQ6OnN0cmluZ3N0cmVhbSBzczsKKyAgc3MgPDwgc3lzX3NlY29uZHN7MHN9IDw8 ICdcbic7ICAgICAgICAgICAgICAgIC8vIDE5NzAtMDEtMDEgMDA6MDA6MDAKKyAgc3MgPDwgc3lz X3NlY29uZHN7OTQ2JzY4NCc4MDBzfSA8PCAnXG4nOyAgICAgIC8vIDIwMDAtMDEtMDEgMDA6MDA6 MDAKKyAgc3MgPDwgc3lzX3NlY29uZHN7OTQ2JzY4OCc1MjNzfSA8PCAnXG4nOyAgICAgIC8vIDIw MDAtMDEtMDEgMDE6MDI6MDMKKyAgc3RkOjpzdHJpbmcgczEsIHMyLCBzMzsKKyAgc3RkOjpnZXRs aW5lKHNzLCBzMSk7CisgIHN0ZDo6Z2V0bGluZShzcywgczIpOworICBzdGQ6OmdldGxpbmUoc3Ms IHMzKTsKKyAgVkVSSUZZKCBzMSA9PSAiMTk3MC0wMS0wMSAwMDowMDowMCIgKTsKKyAgVkVSSUZZ KCBzMiA9PSAiMjAwMC0wMS0wMSAwMDowMDowMCIgKTsKKyAgVkVSSUZZKCBzMyA9PSAiMjAwMC0w MS0wMSAwMTowMjowMyIgKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbmNlcHQgc3Ry ZWFtX2luc2VydGFibGUKKyAgPSByZXF1aXJlcyAoc3RkOjpvc3RyZWFtJiBvdXQsIGNvbnN0IFQm IHQpIHsgb3V0IDw8IHQ7IH07CisKK3VzaW5nIGZwX3N5c190aW1lID0gc3RkOjpjaHJvbm86OnN5 c190aW1lPHN0ZDo6Y2hyb25vOjpkdXJhdGlvbjxmbG9hdD4+Oworc3RhdGljX2Fzc2VydCggIXN0 cmVhbV9pbnNlcnRhYmxlPGZwX3N5c190aW1lPiApOworCitzdGF0aWNfYXNzZXJ0KCAhc3RyZWFt X2luc2VydGFibGU8c3RkOjpjaHJvbm86OnN5c19kYXlzPiApOworCitpbnQgbWFpbigpCit7Cisg IHRlc3QwMSgpOworfQpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS9zdGQvdGlt ZS9jbG9jay90YWkvaW8uY2MgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlL3N0ZC90aW1lL2Nsb2Nr L3RhaS9pby5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDAyNTVm NTQzMWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlL3N0ZC90aW1l L2Nsb2NrL3RhaS9pby5jYwpAQCAtMCwwICsxLDI0IEBACisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9 Z251KysyMCIgfQorLy8geyBkZy1kbyBydW4geyB0YXJnZXQgYysrMjAgfSB9CisKKyNpbmNsdWRl IDxjaHJvbm8+CisjaW5jbHVkZSA8Zm9ybWF0PgorI2luY2x1ZGUgPHRlc3RzdWl0ZV9ob29rcy5o PgorCit2b2lkCit0ZXN0MDEoKQoreworICB1c2luZyBzdGQ6OmZvcm1hdDsKKyAgdXNpbmcgbmFt ZXNwYWNlIHN0ZDo6Y2hyb25vOworCisgIGF1dG8gc3QgPSBzeXNfZGF5c3syMDAweS9KYW51YXJ5 LzF9OworICBhdXRvIHR0ID0gY2xvY2tfY2FzdDx0YWlfY2xvY2s+KHN0KTsKKworICBhdXRvIHMg PSBmb3JtYXQoInswOiVGICVUICVafSA9PSB7MTolRiAlVCAlWn0iLCBzdCwgdHQpOworICBWRVJJ RlkoIHMgPT0gIjIwMDAtMDEtMDEgMDA6MDA6MDAgVVRDID09IDIwMDAtMDEtMDEgMDA6MDA6MzIg VEFJIiApOworfQorCitpbnQgbWFpbigpCit7CisgIHRlc3QwMSgpOworfQpkaWZmIC0tZ2l0IGEv bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS9zdGQvdGltZS9jbG9jay91dGMvaW8uY2MgYi9saWJzdGRj KystdjMvdGVzdHN1aXRlL3N0ZC90aW1lL2Nsb2NrL3V0Yy9pby5jYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzVlODlmYzYyYmIKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJzdGRjKystdjMvdGVzdHN1aXRlL3N0ZC90aW1lL2Nsb2NrL3V0Yy9pby5jYwpAQCAtMCwwICsx LDQwIEBACisvLyB7IGRnLW9wdGlvbnMgIi1zdGQ9Z251KysyMCIgfQorLy8geyBkZy1kbyBydW4g eyB0YXJnZXQgYysrMjAgfSB9CisKKyNpbmNsdWRlIDxjaHJvbm8+CisjaW5jbHVkZSA8c3N0cmVh bT4KKyNpbmNsdWRlIDx0ZXN0c3VpdGVfaG9va3MuaD4KKwordm9pZAordGVzdDAxKCkKK3sKKyAg dXNpbmcgc3RkOjpvc3RyaW5nc3RyZWFtOworICB1c2luZyBuYW1lc3BhY2Ugc3RkOjpjaHJvbm87 CisKKyAgYXV0byB0ID0gc3lzX2RheXN7SnVseS8xLzIwMTV9IC0gNTAwbXM7CisgIGF1dG8gdSA9 IGNsb2NrX2Nhc3Q8dXRjX2Nsb2NrPih0KTsKKworICBzdGQ6OnN0cmluZ192aWV3IHJlc3VsdHNb XSA9IHsKKyAgICAiMjAxNS0wNi0zMCAyMzo1OTo1OS41MDAgVVRDIiwKKyAgICAiMjAxNS0wNi0z MCAyMzo1OTo1OS43NTAgVVRDIiwKKyAgICAiMjAxNS0wNi0zMCAyMzo1OTo2MC4wMDAgVVRDIiwK KyAgICAiMjAxNS0wNi0zMCAyMzo1OTo2MC4yNTAgVVRDIiwKKyAgICAiMjAxNS0wNi0zMCAyMzo1 OTo2MC41MDAgVVRDIiwKKyAgICAiMjAxNS0wNi0zMCAyMzo1OTo2MC43NTAgVVRDIiwKKyAgICAi MjAxNS0wNy0wMSAwMDowMDowMC4wMDAgVVRDIiwKKyAgICAiMjAxNS0wNy0wMSAwMDowMDowMC4y NTAgVVRDIiwKKyAgfTsKKworICBmb3IgKGF1dG8gcmVzdWx0IDogcmVzdWx0cykKKyAgeworICAg IG9zdHJpbmdzdHJlYW0gb3V0OworICAgIG91dCA8PCB1IDw8ICIgVVRDIjsKKyAgICBWRVJJRlko IG91dC5zdHIoKSA9PSByZXN1bHQgKTsKKyAgICB1ICs9IDI1MG1zOworICB9Cit9CisKK2ludCBt YWluKCkKK3sKKyAgdGVzdDAxKCk7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvdGVzdHN1 aXRlL3N0ZC90aW1lL2hoX21tX3NzL2lvLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS9zdGQv dGltZS9oaF9tbV9zcy9pby5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uM2I1MGY0MGMxZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRl L3N0ZC90aW1lL2hoX21tX3NzL2lvLmNjCkBAIC0wLDAgKzEsNDYgQEAKKy8vIHsgZGctb3B0aW9u cyAiLXN0ZD1nbnUrKzIwIiB9CisvLyB7IGRnLWRvIHJ1biB7IHRhcmdldCBjKysyMCB9IH0KKwor I2luY2x1ZGUgPGNocm9ubz4KKyNpbmNsdWRlIDxzc3RyZWFtPgorI2luY2x1ZGUgPHRlc3RzdWl0 ZV9ob29rcy5oPgorCit2b2lkCit0ZXN0MDEoKQoreworICB1c2luZyBzdGQ6Om9zdHJpbmdzdHJl YW07CisgIHVzaW5nIHN0ZDo6Y2hyb25vOjpoaF9tbV9zczsKKyAgdXNpbmcgbmFtZXNwYWNlIHN0 ZDo6Y2hyb25vX2xpdGVyYWxzOworCisgIHN0ZDo6bG9jYWxlOjpnbG9iYWwoc3RkOjpsb2NhbGU6 OmNsYXNzaWMoKSk7CisKKyAgeworICAgIGhoX21tX3NzIGhtc3stNDA4MzAwN21zfTsKKyAgICBv c3RyaW5nc3RyZWFtIG91dDsKKyAgICBvdXQgPDwgaG1zOworICAgIFZFUklGWSggb3V0LnN0cigp ID09ICItMDE6MDg6MDMuMDA3IiApOworICB9CisKKyAgeworICAgIGhoX21tX3NzIGhtc3s0MDgz MDA3bXN9OworICAgIG9zdHJpbmdzdHJlYW0gb3V0OworICAgIG91dCA8PCBobXM7CisgICAgVkVS SUZZKCBvdXQuc3RyKCkgPT0gIjAxOjA4OjAzLjAwNyIgKTsKKyAgfQorCisgIHsKKyAgICBoaF9t bV9zcyBobXN7NjU3NDUxMjNtc307CisgICAgb3N0cmluZ3N0cmVhbSBvdXQ7CisgICAgb3V0IDw8 IGhtczsKKyAgICBWRVJJRlkoIG91dC5zdHIoKSA9PSAiMTg6MTU6NDUuMTIzIiApOworICB9CisK KyAgb3N0cmluZ3N0cmVhbSBvdXQ7CisgIG91dCA8PCBoaF9tbV9zc3s2NTc0NXN9OworICBWRVJJ RlkoIG91dC5zdHIoKSA9PSAiMTg6MTU6NDUiICk7Cit9CisKK2ludCBtYWluKCkKK3sKKyAgdGVz dDAxKCk7Cit9Cg== --0000000000002fd44d05ed580bcf--