From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 5908D385734D for ; Mon, 3 Jul 2023 22:13:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 5908D385734D Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1688422399; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type; bh=5M2pZmu3sjoQodh2oY14ISTFLRGDXVtXU8/UgXORazo=; b=AXeVqZviChLVJANKkN+Qe/NYKFiABl7NWwcGSJojrjWRIvvT0sOOgVXdjWTZuSUdwQpgpb CzN/lk9RI6sIP+WwjmFRyQ1yLjQdxKZXjy51EIssU8/xl8wZrqYSXyQ2i9AIxGkdoACf3M HHnf8iZhsG1jIXSYRkhQ2YLStxeUxXA= Received: from mail-pj1-f70.google.com (mail-pj1-f70.google.com [209.85.216.70]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-43-Jut5J3I5PfSaIgfxDnKm2g-1; Mon, 03 Jul 2023 18:13:17 -0400 X-MC-Unique: Jut5J3I5PfSaIgfxDnKm2g-1 Received: by mail-pj1-f70.google.com with SMTP id 98e67ed59e1d1-262d505f44cso4939704a91.1 for ; Mon, 03 Jul 2023 15:13:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688422397; x=1691014397; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=jlPfrTknACvPG7J2XoT7LoJunagIKX5S4xtGHCyslj8=; b=FIvBo2KX0bBf2pLHs1p+4U7Ujn95EHwi3h3k0K/i0ThsZzaAA+NbXKsDgrFcXzm2Yd tAIB2hhYnfh10/8FB7L48GbnbDjQ/YJLQM2l4q/ohFpe0waoMecmc998AGaTO8cZHpkl dGOEUYm2YO3pzuPWRJyMvDUxb202vj2rCo4J2HrM5nqrty5ieGql4SgNOvIm2vAgksU9 CdRvOcBPjOmcmP5brtW+fFxoV2p96jD76YHgA5JgqcfPb3C2OuqINg2KJLIKrGrLKhlY UmBylGw+hu/GMLDz6BLlRUjxUyw+mZLVZgShb+25UMBem/NddOHVcBtjKjWE1J5AzDON Od9w== X-Gm-Message-State: ABy/qLav9Gw0ziAFY9es7MjdsehAH9yY5fqJFyOf6oBYmTFzKEQBEh4J FBxCHJ13qDKtB2NZb49UQrInP+4zq7UnPgcSUb8DHhpTFf/MBoNalcBJbMRvAdSqc9LcX8aDH9a NcpCnYN2C1Rak/8X/IUN/VRMD/0bi29O0D56rbWf5bw== X-Received: by 2002:a17:90a:f0d7:b0:263:5702:d4c5 with SMTP id fa23-20020a17090af0d700b002635702d4c5mr9781208pjb.19.1688422396850; Mon, 03 Jul 2023 15:13:16 -0700 (PDT) X-Google-Smtp-Source: APBJJlHXOlcSzL+TlOtOHava55/C7RxQiJ9QaTB2+Dm0BUJmmBhu+jqoIhcN2MI5L6rmWg7JB8I9KLO+xSYpAl7fPRY= X-Received: by 2002:a17:90a:f0d7:b0:263:5702:d4c5 with SMTP id fa23-20020a17090af0d700b002635702d4c5mr9781185pjb.19.1688422396394; Mon, 03 Jul 2023 15:13:16 -0700 (PDT) MIME-Version: 1.0 From: Thomas Rodgers Date: Mon, 3 Jul 2023 15:13:05 -0700 Message-ID: Subject: [PATCH] libstdc++: Split up pstl/set.cc testcase To: "libstdc++" , gcc Patches X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="0000000000002b3d5005ff9c790a" X-Spam-Status: No, score=-13.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,HTML_MESSAGE,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE 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: --0000000000002b3d5005ff9c790a Content-Type: multipart/alternative; boundary="0000000000002b3d4f05ff9c7908" --0000000000002b3d4f05ff9c7908 Content-Type: text/plain; charset="UTF-8" This testcase is causing some timeout issues. This patch splits the testcase up by individual set algorithm. --0000000000002b3d4f05ff9c7908-- --0000000000002b3d5005ff9c790a Content-Type: text/x-patch; charset="US-ASCII"; name="0001-libstdc-Split-up-pstl-set.cc-testcase.patch" Content-Disposition: attachment; filename="0001-libstdc-Split-up-pstl-set.cc-testcase.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ljnf1xxv0 RnJvbSA4NTczNTliNzJmODg4NmI2ZTkwZGIzYjU5NmQwNGYwODU1OWQyYjUx IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUaG9tYXMgUm9kZ2Vy cyA8dHJvZGdlcnNAcmVkaGF0LmNvbT4KRGF0ZTogTW9uLCAzIEp1bCAyMDIz IDE1OjA0OjQ1IC0wNzAwClN1YmplY3Q6IFtQQVRDSF0gbGlic3RkYysrOiBT cGxpdCB1cCBwc3RsL3NldC5jYyB0ZXN0Y2FzZQoKVGhpcyB0ZXN0Y2FzZSBp cyBjYXVzaW5nIHNvbWUgdGltZW91dCBpc3N1ZXMuIFRoaXMgcGF0Y2ggc3Bs aXRzIHRoZQp0ZXN0Y2FzZSB1cCBieSBpbmRpdmlkdWFsIHNldCBhbGdvcml0 aG0uCgpsaWJzdGRjKystdjM6L0NoYW5nZUxvZzoKCSogdGVzdHN1aXRlLzI1 X2FsZ29yaXRobXMvcHN0bC9hbGdfc29ydGluZy9zZXQuY2M6IERlbGV0ZQoJ ZmlsZS4KCSogdGVzdHN1aXRlLzI1X2FsZ29yaXRobXMvcHN0bC9hbGdfc29y dGluZy9zZXRfZGlmZmVyZW5jZS5jYzoKCU5ldyBmaWxlLgoJKiB0ZXN0c3Vp dGUvMjVfYWxnb3JpdGhtcy9wc3RsL2FsZ19zb3J0aW5nL3NldF9pbnRlcnNl Y3Rpb24uY2M6CglMaWtld2lzZS4KCSogdGVzdHN1aXRlLzI1X2FsZ29yaXRo bXMvcHN0bC9hbGdfc29ydGluZy9zZXRfc3ltbWV0cmljX2RpZmZlcmVuY2Uu Y2M6CglMaWtld2lzZS4KCSogdGVzdHN1aXRlLzI1X2FsZ29yaXRobXMvcHN0 bC9hbGdfc29ydGluZy9zZXRfdW5pb24uY2M6CglMaWtld2lzZS4KCSogdGVz dHN1aXRlLzI1X2FsZ29yaXRobXMvcHN0bC9hbGdfc29ydGluZy9zZXRfdXRp bC5oOgoJTGlrZXdpc2UuCi0tLQogLi4uLzI1X2FsZ29yaXRobXMvcHN0bC9h bGdfc29ydGluZy9zZXQuY2MgICAgIHwgMjg5IC0tLS0tLS0tLS0tLS0tLS0t LQogLi4uL3BzdGwvYWxnX3NvcnRpbmcvc2V0X2RpZmZlcmVuY2UuY2MgICAg ICAgIHwgIDkwICsrKysrKwogLi4uL3BzdGwvYWxnX3NvcnRpbmcvc2V0X2lu dGVyc2VjdGlvbi5jYyAgICAgIHwgIDkxICsrKysrKwogLi4uL2FsZ19zb3J0 aW5nL3NldF9zeW1tZXRyaWNfZGlmZmVyZW5jZS5jYyAgIHwgIDkyICsrKysr KwogLi4uL3BzdGwvYWxnX3NvcnRpbmcvc2V0X3VuaW9uLmNjICAgICAgICAg ICAgIHwgIDkwICsrKysrKwogLi4uLzI1X2FsZ29yaXRobXMvcHN0bC9hbGdf c29ydGluZy9zZXRfdXRpbC5oIHwgIDcyICsrKysrCiA2IGZpbGVzIGNoYW5n ZWQsIDQzNSBpbnNlcnRpb25zKCspLCAyODkgZGVsZXRpb25zKC0pCiBkZWxl dGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdv cml0aG1zL3BzdGwvYWxnX3NvcnRpbmcvc2V0LmNjCiBjcmVhdGUgbW9kZSAx MDA2NDQgbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL3Bz dGwvYWxnX3NvcnRpbmcvc2V0X2RpZmZlcmVuY2UuY2MKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBsaWJzdGRjKystdjMvdGVzdHN1aXRlLzI1X2FsZ29yaXRobXMv cHN0bC9hbGdfc29ydGluZy9zZXRfaW50ZXJzZWN0aW9uLmNjCiBjcmVhdGUg bW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdvcml0 aG1zL3BzdGwvYWxnX3NvcnRpbmcvc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNl LmNjCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL3Rlc3RzdWl0 ZS8yNV9hbGdvcml0aG1zL3BzdGwvYWxnX3NvcnRpbmcvc2V0X3VuaW9uLmNj CiBjcmVhdGUgbW9kZSAxMDA2NDQgbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8y NV9hbGdvcml0aG1zL3BzdGwvYWxnX3NvcnRpbmcvc2V0X3V0aWwuaAoKZGlm ZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjVfYWxnb3JpdGht cy9wc3RsL2FsZ19zb3J0aW5nL3NldC5jYyBiL2xpYnN0ZGMrKy12My90ZXN0 c3VpdGUvMjVfYWxnb3JpdGhtcy9wc3RsL2FsZ19zb3J0aW5nL3NldC5jYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM0MzczOWRmZDEuLjAw MDAwMDAwMDAwCi0tLSBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjVfYWxn b3JpdGhtcy9wc3RsL2FsZ19zb3J0aW5nL3NldC5jYworKysgL2Rldi9udWxs CkBAIC0xLDI4OSArMCwwIEBACi0vLyAtKi0gQysrIC0qLQotLy8geyBkZy1v cHRpb25zICItbHRiYiIgfQotLy8geyBkZy1kbyBydW4geyB0YXJnZXQgYysr MTcgfSB9Ci0vLyB7IGRnLXRpbWVvdXQtZmFjdG9yIDMgfQotLy8geyBkZy1y ZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgdGJiX2JhY2tlbmQgfQotCi0vLz09 PS0tIHNldC5wYXNzLmNwcCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS09PT0vLwotLy8KLS8vIFBhcnQg b2YgdGhlIExMVk0gUHJvamVjdCwgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNl IHYyLjAgd2l0aCBMTFZNIEV4Y2VwdGlvbnMuCi0vLyBTZWUgaHR0cHM6Ly9s bHZtLm9yZy9MSUNFTlNFLnR4dCBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbi4K LS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wIFdJVEgg TExWTS1leGNlcHRpb24KLS8vCi0vLz09PS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS09PT0vLwotCi0jaW5jbHVkZSAicHN0bC9wc3RsX3Rlc3RfY29uZmln LmgiCi0KLSNpZmRlZiBQU1RMX1NUQU5EQUxPTkVfVEVTVFMKLQotI2luY2x1 ZGUgPGNtYXRoPgotI2luY2x1ZGUgPGNocm9ubz4KLQotI2luY2x1ZGUgInBz dGwvZXhlY3V0aW9uIgotI2luY2x1ZGUgInBzdGwvYWxnb3JpdGhtIgotI2Vs c2UKLSNpbmNsdWRlIDxleGVjdXRpb24+Ci0jaW5jbHVkZSA8YWxnb3JpdGht PgotI2VuZGlmIC8vIFBTVExfU1RBTkRBTE9ORV9URVNUUwotCi0jaW5jbHVk ZSAicHN0bC90ZXN0X3V0aWxzLmgiCi0KLXVzaW5nIG5hbWVzcGFjZSBUZXN0 VXRpbHM7Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IE51bQot ewotICAgIFQgdmFsOwotCi0gICAgTnVtKCkgOiB2YWx7fSB7fQotICAgIE51 bShjb25zdCBUJiB2KSA6IHZhbCh2KSB7fQotCi0gICAgLy9mb3IgImluY2x1 ZGVzIiBjaGVja3MKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDE+Ci0gICAg Ym9vbAotICAgIG9wZXJhdG9yPChjb25zdCBOdW08VDE+JiB2MSkgY29uc3QK LSAgICB7Ci0gICAgICAgIHJldHVybiB2YWwgPCB2MS52YWw7Ci0gICAgfQot Ci0gICAgLy9UaGUgdHlwZXMgVHlwZTEgYW5kIFR5cGUyIG11c3QgYmUgc3Vj aCB0aGF0IGFuIG9iamVjdCBvZiB0eXBlIElucHV0SXQgY2FuIGJlIGRlcmVm ZXJlbmNlZCBhbmQgdGhlbiBpbXBsaWNpdGx5IGNvbnZlcnRlZCB0byBib3Ro IG9mIHRoZW0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVDE+Ci0gICAgb3Bl cmF0b3IgTnVtPFQxPigpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g TnVtPFQxPigoVDEpdmFsKTsKLSAgICB9Ci0KLSAgICBmcmllbmQgYm9vbAot ICAgIG9wZXJhdG9yPT0oY29uc3QgTnVtJiB2MSwgY29uc3QgTnVtJiB2MikK LSAgICB7Ci0gICAgICAgIHJldHVybiB2MS52YWwgPT0gdjIudmFsOwotICAg IH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgotc3RydWN0IHRl c3Rfc2V0X3VuaW9uCi17Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBvbGlj eSwgdHlwZW5hbWUgSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIElucHV0SXRl cmF0b3IyLCB0eXBlbmFtZSBDb21wYXJlPgotICAgIHR5cGVuYW1lIHN0ZDo6 ZW5hYmxlX2lmPCFUZXN0VXRpbHM6OmlzUmV2ZXJzZTxJbnB1dEl0ZXJhdG9y MT46OnZhbHVlLCB2b2lkPjo6dHlwZQotICAgIG9wZXJhdG9yKCkoUG9saWN5 JiYgZXhlYywgSW5wdXRJdGVyYXRvcjEgZmlyc3QxLCBJbnB1dEl0ZXJhdG9y MSBsYXN0MSwgSW5wdXRJdGVyYXRvcjIgZmlyc3QyLCBJbnB1dEl0ZXJhdG9y MiBsYXN0MiwKLSAgICAgICAgICAgICAgIENvbXBhcmUgY29tcCkKLSAgICB7 Ci0gICAgICAgIHVzaW5nIFQxID0gdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90 cmFpdHM8SW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlOwotCi0gICAgICAg IGF1dG8gbjEgPSBzdGQ6OmRpc3RhbmNlKGZpcnN0MSwgbGFzdDEpOwotICAg ICAgICBhdXRvIG4yID0gc3RkOjpkaXN0YW5jZShmaXJzdDIsIGxhc3QyKTsK LSAgICAgICAgYXV0byBuID0gbjEgKyBuMjsKLSAgICAgICAgU2VxdWVuY2U8 VDE+IGV4cGVjdChuKTsKLSAgICAgICAgU2VxdWVuY2U8VDE+IG91dChuKTsK LQotICAgICAgICBhdXRvIGV4cGVjdF9yZXMgPSBzdGQ6OnNldF91bmlvbihm aXJzdDEsIGxhc3QxLCBmaXJzdDIsIGxhc3QyLCBleHBlY3QuYmVnaW4oKSwg Y29tcCk7Ci0gICAgICAgIGF1dG8gcmVzID0gc3RkOjpzZXRfdW5pb24oZXhl YywgZmlyc3QxLCBsYXN0MSwgZmlyc3QyLCBsYXN0Miwgb3V0LmJlZ2luKCks IGNvbXApOwotCi0gICAgICAgIEVYUEVDVF9UUlVFKGV4cGVjdF9yZXMgLSBl eHBlY3QuYmVnaW4oKSA9PSByZXMgLSBvdXQuYmVnaW4oKSwgIndyb25nIHJl c3VsdCBmb3Igc2V0X3VuaW9uIik7Ci0gICAgICAgIEVYUEVDVF9FUV9OKGV4 cGVjdC5iZWdpbigpLCBvdXQuYmVnaW4oKSwgc3RkOjpkaXN0YW5jZShvdXQu YmVnaW4oKSwgcmVzKSwgIndyb25nIHNldF91bmlvbiBlZmZlY3QiKTsKLSAg ICB9Ci0KLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUG9saWN5LCB0eXBlbmFt ZSBJbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgSW5wdXRJdGVyYXRvcjIsIHR5 cGVuYW1lIENvbXBhcmU+Ci0gICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8 VGVzdFV0aWxzOjppc1JldmVyc2U8SW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZSwg dm9pZD46OnR5cGUKLSAgICBvcGVyYXRvcigpKFBvbGljeSYmLCBJbnB1dEl0 ZXJhdG9yMSwgSW5wdXRJdGVyYXRvcjEsIElucHV0SXRlcmF0b3IyLCBJbnB1 dEl0ZXJhdG9yMiwgQ29tcGFyZSkKLSAgICB7Ci0gICAgfQotfTsKLQotdGVt cGxhdGUgPHR5cGVuYW1lIFR5cGU+Ci1zdHJ1Y3QgdGVzdF9zZXRfaW50ZXJz ZWN0aW9uCi17Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBvbGljeSwgdHlw ZW5hbWUgSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIElucHV0SXRlcmF0b3Iy LCB0eXBlbmFtZSBDb21wYXJlPgotICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxl X2lmPCFUZXN0VXRpbHM6OmlzUmV2ZXJzZTxJbnB1dEl0ZXJhdG9yMT46OnZh bHVlLCB2b2lkPjo6dHlwZQotICAgIG9wZXJhdG9yKCkoUG9saWN5JiYgZXhl YywgSW5wdXRJdGVyYXRvcjEgZmlyc3QxLCBJbnB1dEl0ZXJhdG9yMSBsYXN0 MSwgSW5wdXRJdGVyYXRvcjIgZmlyc3QyLCBJbnB1dEl0ZXJhdG9yMiBsYXN0 MiwKLSAgICAgICAgICAgICAgIENvbXBhcmUgY29tcCkKLSAgICB7Ci0gICAg ICAgIHVzaW5nIFQxID0gdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8 SW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlOwotCi0gICAgICAgIGF1dG8g bjEgPSBzdGQ6OmRpc3RhbmNlKGZpcnN0MSwgbGFzdDEpOwotICAgICAgICBh dXRvIG4yID0gc3RkOjpkaXN0YW5jZShmaXJzdDIsIGxhc3QyKTsKLSAgICAg ICAgYXV0byBuID0gbjEgKyBuMjsKLSAgICAgICAgU2VxdWVuY2U8VDE+IGV4 cGVjdChuKTsKLSAgICAgICAgU2VxdWVuY2U8VDE+IG91dChuKTsKLQotICAg ICAgICBhdXRvIGV4cGVjdF9yZXMgPSBzdGQ6OnNldF9pbnRlcnNlY3Rpb24o Zmlyc3QxLCBsYXN0MSwgZmlyc3QyLCBsYXN0MiwgZXhwZWN0LmJlZ2luKCks IGNvbXApOwotICAgICAgICBhdXRvIHJlcyA9IHN0ZDo6c2V0X2ludGVyc2Vj dGlvbihleGVjLCBmaXJzdDEsIGxhc3QxLCBmaXJzdDIsIGxhc3QyLCBvdXQu YmVnaW4oKSwgY29tcCk7Ci0KLSAgICAgICAgRVhQRUNUX1RSVUUoZXhwZWN0 X3JlcyAtIGV4cGVjdC5iZWdpbigpID09IHJlcyAtIG91dC5iZWdpbigpLCAi d3JvbmcgcmVzdWx0IGZvciBzZXRfaW50ZXJzZWN0aW9uIik7Ci0gICAgICAg IEVYUEVDVF9FUV9OKGV4cGVjdC5iZWdpbigpLCBvdXQuYmVnaW4oKSwgc3Rk OjpkaXN0YW5jZShvdXQuYmVnaW4oKSwgcmVzKSwgIndyb25nIHNldF9pbnRl cnNlY3Rpb24gZWZmZWN0Iik7Ci0gICAgfQotCi0gICAgdGVtcGxhdGUgPHR5 cGVuYW1lIFBvbGljeSwgdHlwZW5hbWUgSW5wdXRJdGVyYXRvcjEsIHR5cGVu YW1lIElucHV0SXRlcmF0b3IyLCB0eXBlbmFtZSBDb21wYXJlPgotICAgIHR5 cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPFRlc3RVdGlsczo6aXNSZXZlcnNlPElu cHV0SXRlcmF0b3IxPjo6dmFsdWUsIHZvaWQ+Ojp0eXBlCi0gICAgb3BlcmF0 b3IoKShQb2xpY3kmJiwgSW5wdXRJdGVyYXRvcjEsIElucHV0SXRlcmF0b3Ix LCBJbnB1dEl0ZXJhdG9yMiwgSW5wdXRJdGVyYXRvcjIsIENvbXBhcmUpCi0g ICAgewotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgot c3RydWN0IHRlc3Rfc2V0X2RpZmZlcmVuY2UKLXsKLSAgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgUG9saWN5LCB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yMSwgdHlw ZW5hbWUgSW5wdXRJdGVyYXRvcjIsIHR5cGVuYW1lIENvbXBhcmU+Ci0gICAg dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IVRlc3RVdGlsczo6aXNSZXZlcnNl PElucHV0SXRlcmF0b3IxPjo6dmFsdWUsIHZvaWQ+Ojp0eXBlCi0gICAgb3Bl cmF0b3IoKShQb2xpY3kmJiBleGVjLCBJbnB1dEl0ZXJhdG9yMSBmaXJzdDEs IElucHV0SXRlcmF0b3IxIGxhc3QxLCBJbnB1dEl0ZXJhdG9yMiBmaXJzdDIs IElucHV0SXRlcmF0b3IyIGxhc3QyLAotICAgICAgICAgICAgICAgQ29tcGFy ZSBjb21wKQotICAgIHsKLSAgICAgICAgdXNpbmcgVDEgPSB0eXBlbmFtZSBz dGQ6Oml0ZXJhdG9yX3RyYWl0czxJbnB1dEl0ZXJhdG9yMT46OnZhbHVlX3R5 cGU7Ci0KLSAgICAgICAgYXV0byBuMSA9IHN0ZDo6ZGlzdGFuY2UoZmlyc3Qx LCBsYXN0MSk7Ci0gICAgICAgIGF1dG8gbjIgPSBzdGQ6OmRpc3RhbmNlKGZp cnN0MiwgbGFzdDIpOwotICAgICAgICBhdXRvIG4gPSBuMSArIG4yOwotICAg ICAgICBTZXF1ZW5jZTxUMT4gZXhwZWN0KG4pOwotICAgICAgICBTZXF1ZW5j ZTxUMT4gb3V0KG4pOwotCi0gICAgICAgIGF1dG8gZXhwZWN0X3JlcyA9IHN0 ZDo6c2V0X2RpZmZlcmVuY2UoZmlyc3QxLCBsYXN0MSwgZmlyc3QyLCBsYXN0 MiwgZXhwZWN0LmJlZ2luKCksIGNvbXApOwotICAgICAgICBhdXRvIHJlcyA9 IHN0ZDo6c2V0X2RpZmZlcmVuY2UoZXhlYywgZmlyc3QxLCBsYXN0MSwgZmly c3QyLCBsYXN0Miwgb3V0LmJlZ2luKCksIGNvbXApOwotCi0gICAgICAgIEVY UEVDVF9UUlVFKGV4cGVjdF9yZXMgLSBleHBlY3QuYmVnaW4oKSA9PSByZXMg LSBvdXQuYmVnaW4oKSwgIndyb25nIHJlc3VsdCBmb3Igc2V0X2RpZmZlcmVu Y2UiKTsKLSAgICAgICAgRVhQRUNUX0VRX04oZXhwZWN0LmJlZ2luKCksIG91 dC5iZWdpbigpLCBzdGQ6OmRpc3RhbmNlKG91dC5iZWdpbigpLCByZXMpLCAi d3Jvbmcgc2V0X2RpZmZlcmVuY2UgZWZmZWN0Iik7Ci0gICAgfQotCi0gICAg dGVtcGxhdGUgPHR5cGVuYW1lIFBvbGljeSwgdHlwZW5hbWUgSW5wdXRJdGVy YXRvcjEsIHR5cGVuYW1lIElucHV0SXRlcmF0b3IyLCB0eXBlbmFtZSBDb21w YXJlPgotICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPFRlc3RVdGlsczo6 aXNSZXZlcnNlPElucHV0SXRlcmF0b3IxPjo6dmFsdWUsIHZvaWQ+Ojp0eXBl Ci0gICAgb3BlcmF0b3IoKShQb2xpY3kmJiwgSW5wdXRJdGVyYXRvcjEsIElu cHV0SXRlcmF0b3IxLCBJbnB1dEl0ZXJhdG9yMiwgSW5wdXRJdGVyYXRvcjIs IENvbXBhcmUpCi0gICAgewotICAgIH0KLX07Ci0KLXRlbXBsYXRlIDx0eXBl bmFtZSBUeXBlPgotc3RydWN0IHRlc3Rfc2V0X3N5bW1ldHJpY19kaWZmZXJl bmNlCi17Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBvbGljeSwgdHlwZW5h bWUgSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIElucHV0SXRlcmF0b3IyLCB0 eXBlbmFtZSBDb21wYXJlPgotICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lm PCFUZXN0VXRpbHM6OmlzUmV2ZXJzZTxJbnB1dEl0ZXJhdG9yMT46OnZhbHVl LCB2b2lkPjo6dHlwZQotICAgIG9wZXJhdG9yKCkoUG9saWN5JiYgZXhlYywg SW5wdXRJdGVyYXRvcjEgZmlyc3QxLCBJbnB1dEl0ZXJhdG9yMSBsYXN0MSwg SW5wdXRJdGVyYXRvcjIgZmlyc3QyLCBJbnB1dEl0ZXJhdG9yMiBsYXN0MiwK LSAgICAgICAgICAgICAgIENvbXBhcmUgY29tcCkKLSAgICB7Ci0gICAgICAg IHVzaW5nIFQxID0gdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SW5w dXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlOwotCi0gICAgICAgIGF1dG8gbjEg PSBzdGQ6OmRpc3RhbmNlKGZpcnN0MSwgbGFzdDEpOwotICAgICAgICBhdXRv IG4yID0gc3RkOjpkaXN0YW5jZShmaXJzdDIsIGxhc3QyKTsKLSAgICAgICAg YXV0byBuID0gbjEgKyBuMjsKLSAgICAgICAgU2VxdWVuY2U8VDE+IGV4cGVj dChuKTsKLSAgICAgICAgU2VxdWVuY2U8VDE+IG91dChuKTsKLQotICAgICAg ICBhdXRvIGV4cGVjdF9yZXMgPSBzdGQ6OnNldF9zeW1tZXRyaWNfZGlmZmVy ZW5jZShmaXJzdDEsIGxhc3QxLCBmaXJzdDIsIGxhc3QyLCBleHBlY3QuYmVn aW4oKSwgY29tcCk7Ci0gICAgICAgIGF1dG8gcmVzID0gc3RkOjpzZXRfc3lt bWV0cmljX2RpZmZlcmVuY2UoZXhlYywgZmlyc3QxLCBsYXN0MSwgZmlyc3Qy LCBsYXN0Miwgb3V0LmJlZ2luKCksIGNvbXApOwotCi0gICAgICAgIEVYUEVD VF9UUlVFKGV4cGVjdF9yZXMgLSBleHBlY3QuYmVnaW4oKSA9PSByZXMgLSBv dXQuYmVnaW4oKSwgIndyb25nIHJlc3VsdCBmb3Igc2V0X3N5bW1ldHJpY19k aWZmZXJlbmNlIik7Ci0gICAgICAgIEVYUEVDVF9FUV9OKGV4cGVjdC5iZWdp bigpLCBvdXQuYmVnaW4oKSwgc3RkOjpkaXN0YW5jZShvdXQuYmVnaW4oKSwg cmVzKSwKLSAgICAgICAgICAgICAgICAgICAgIndyb25nIHNldF9zeW1tZXRy aWNfZGlmZmVyZW5jZSBlZmZlY3QiKTsKLSAgICB9Ci0KLSAgICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgUG9saWN5LCB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yMSwg dHlwZW5hbWUgSW5wdXRJdGVyYXRvcjIsIHR5cGVuYW1lIENvbXBhcmU+Ci0g ICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8VGVzdFV0aWxzOjppc1JldmVy c2U8SW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZSwgdm9pZD46OnR5cGUKLSAgICBv cGVyYXRvcigpKFBvbGljeSYmLCBJbnB1dEl0ZXJhdG9yMSwgSW5wdXRJdGVy YXRvcjEsIElucHV0SXRlcmF0b3IyLCBJbnB1dEl0ZXJhdG9yMiwgQ29tcGFy ZSkKLSAgICB7Ci0gICAgfQotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQx LCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgQ29tcGFyZT4KLXZvaWQKLXRlc3Rf c2V0KENvbXBhcmUgY29tcGFyZSkKLXsKLQotICAgIGNvbnN0IHN0ZDo6c2l6 ZV90IG5fbWF4ID0gMTAwMDAwOwotCi0gICAgLy8gVGhlIHJhbmQoKSUoMipu KzEpIGVuY291cmFnZXMgZ2VuZXJhdGlvbiBvZiBzb21lIGR1cGxpY2F0ZXMu Ci0gICAgc3RkOjpzcmFuZCg0MjAwKTsKLQotICAgIGZvciAoc3RkOjpzaXpl X3QgbiA9IDA7IG4gPCBuX21heDsgbiA9IG4gPD0gMTYgPyBuICsgMSA6IHNp emVfdCgzLjE0MTUgKiBuKSkKLSAgICB7Ci0gICAgICAgIGZvciAoc3RkOjpz aXplX3QgbSA9IDA7IG0gPCBuX21heDsgbSA9IG0gPD0gMTYgPyBtICsgMSA6 IHNpemVfdCgyLjcxODI4ICogbSkpCi0gICAgICAgIHsKLSAgICAgICAgICAg IC8vcHJlcGFyZSB0aGUgaW5wdXQgcmFuZ2VzCi0gICAgICAgICAgICBTZXF1 ZW5jZTxUMT4gaW4xKG4sIFtdKHN0ZDo6c2l6ZV90IGspIHsgcmV0dXJuIHJh bmQoKSAlICgyICogayArIDEpOyB9KTsKLSAgICAgICAgICAgIFNlcXVlbmNl PFQyPiBpbjIobSwgW21dKHN0ZDo6c2l6ZV90IGspIHsgcmV0dXJuIChtICUg MikgKiByYW5kKCkgKyByYW5kKCkgJSAoayArIDEpOyB9KTsKLQotICAgICAg ICAgICAgc3RkOjpzb3J0KGluMS5iZWdpbigpLCBpbjEuZW5kKCksIGNvbXBh cmUpOwotICAgICAgICAgICAgc3RkOjpzb3J0KGluMi5iZWdpbigpLCBpbjIu ZW5kKCksIGNvbXBhcmUpOwotCi0gICAgICAgICAgICBpbnZva2Vfb25fYWxs X3BvbGljaWVzKHRlc3Rfc2V0X3VuaW9uPFQxPigpLCBpbjEuYmVnaW4oKSwg aW4xLmVuZCgpLCBpbjIuY2JlZ2luKCksIGluMi5jZW5kKCksCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZSk7Ci0K LSAgICAgICAgICAgIGludm9rZV9vbl9hbGxfcG9saWNpZXModGVzdF9zZXRf aW50ZXJzZWN0aW9uPFQxPigpLCBpbjEuYmVnaW4oKSwgaW4xLmVuZCgpLCBp bjIuY2JlZ2luKCksIGluMi5jZW5kKCksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29tcGFyZSk7Ci0KLSAgICAgICAgICAg IGludm9rZV9vbl9hbGxfcG9saWNpZXModGVzdF9zZXRfZGlmZmVyZW5jZTxU MT4oKSwgaW4xLmJlZ2luKCksIGluMS5lbmQoKSwgaW4yLmNiZWdpbigpLCBp bjIuY2VuZCgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbXBhcmUpOwotCi0gICAgICAgICAgICBpbnZva2Vfb25fYWxs X3BvbGljaWVzKHRlc3Rfc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlPFQxPigp LCBpbjEuYmVnaW4oKSwgaW4xLmVuZCgpLCBpbjIuY2JlZ2luKCksCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4yLmNlbmQo KSwgY29tcGFyZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXRlbXBsYXRl IDx0eXBlbmFtZSBUPgotc3RydWN0IHRlc3Rfbm9uX2NvbnN0X3NldF9kaWZm ZXJlbmNlCi17Ci0gICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBvbGljeSwgdHlw ZW5hbWUgSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgT3V0cHV0SW50ZXJhdG9y PgotICAgIHZvaWQKLSAgICBvcGVyYXRvcigpKFBvbGljeSYmIGV4ZWMsIElu cHV0SXRlcmF0b3IgaW5wdXRfaXRlciwgT3V0cHV0SW50ZXJhdG9yIG91dF9p dGVyKQotICAgIHsKLSAgICAgICAgc2V0X2RpZmZlcmVuY2UoZXhlYywgaW5w dXRfaXRlciwgaW5wdXRfaXRlciwgaW5wdXRfaXRlciwgaW5wdXRfaXRlciwg b3V0X2l0ZXIsIG5vbl9jb25zdChzdGQ6Omxlc3M8VD4oKSkpOwotICAgIH0K LX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotc3RydWN0IHRlc3Rfbm9u X2NvbnN0X3NldF9pbnRlcnNlY3Rpb24KLXsKLSAgICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgUG9saWN5LCB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yLCB0eXBlbmFt ZSBPdXRwdXRJbnRlcmF0b3I+Ci0gICAgdm9pZAotICAgIG9wZXJhdG9yKCko UG9saWN5JiYgZXhlYywgSW5wdXRJdGVyYXRvciBpbnB1dF9pdGVyLCBPdXRw dXRJbnRlcmF0b3Igb3V0X2l0ZXIpCi0gICAgewotICAgICAgICBzZXRfaW50 ZXJzZWN0aW9uKGV4ZWMsIGlucHV0X2l0ZXIsIGlucHV0X2l0ZXIsIGlucHV0 X2l0ZXIsIGlucHV0X2l0ZXIsIG91dF9pdGVyLCBub25fY29uc3Qoc3RkOjps ZXNzPFQ+KCkpKTsKLSAgICB9Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KLXN0cnVjdCB0ZXN0X25vbl9jb25zdF9zZXRfc3ltbWV0cmljX2RpZmZl cmVuY2UKLXsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUG9saWN5LCB0eXBl bmFtZSBJbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBPdXRwdXRJbnRlcmF0b3I+ Ci0gICAgdm9pZAotICAgIG9wZXJhdG9yKCkoUG9saWN5JiYgZXhlYywgSW5w dXRJdGVyYXRvciBpbnB1dF9pdGVyLCBPdXRwdXRJbnRlcmF0b3Igb3V0X2l0 ZXIpCi0gICAgewotICAgICAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2Uo ZXhlYywgaW5wdXRfaXRlciwgaW5wdXRfaXRlciwgaW5wdXRfaXRlciwgaW5w dXRfaXRlciwgb3V0X2l0ZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBub25fY29uc3Qoc3RkOjpsZXNzPFQ+KCkpKTsKLSAgICB9Ci19 OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLXN0cnVjdCB0ZXN0X25vbl9j b25zdF9zZXRfdW5pb24KLXsKLSAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUG9s aWN5LCB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yLCB0eXBlbmFtZSBPdXRwdXRJ bnRlcmF0b3I+Ci0gICAgdm9pZAotICAgIG9wZXJhdG9yKCkoUG9saWN5JiYg ZXhlYywgSW5wdXRJdGVyYXRvciBpbnB1dF9pdGVyLCBPdXRwdXRJbnRlcmF0 b3Igb3V0X2l0ZXIpCi0gICAgewotICAgICAgICBzZXRfdW5pb24oZXhlYywg aW5wdXRfaXRlciwgaW5wdXRfaXRlciwgaW5wdXRfaXRlciwgaW5wdXRfaXRl ciwgb3V0X2l0ZXIsIG5vbl9jb25zdChzdGQ6Omxlc3M8VD4oKSkpOwotICAg IH0KLX07Ci0KLWludAotbWFpbigpCi17Ci0KLSAgICB0ZXN0X3NldDxmbG9h dDY0X3QsIGZsb2F0NjRfdD4oc3RkOjpsZXNzPD4oKSk7Ci0gICAgdGVzdF9z ZXQ8TnVtPGludDY0X3Q+LCBOdW08aW50MzJfdD4+KFtdKGNvbnN0IE51bTxp bnQ2NF90PiYgeCwgY29uc3QgTnVtPGludDMyX3Q+JiB5KSB7IHJldHVybiB4 IDwgeTsgfSk7Ci0KLSAgICB0ZXN0X3NldDxNZW1vcnlDaGVja2VyLCBNZW1v cnlDaGVja2VyPihbXShjb25zdCBNZW1vcnlDaGVja2VyJiB2YWwxLCBjb25z dCBNZW1vcnlDaGVja2VyJiB2YWwyKSAtPiBib29sIHsKLSAgICAgICAgcmV0 dXJuIHZhbDEudmFsdWUoKSA8IHZhbDIudmFsdWUoKTsKLSAgICB9KTsKLSAg ICBFWFBFQ1RfRkFMU0UoTWVtb3J5Q2hlY2tlcjo6YWxpdmVfb2JqZWN0cygp IDwgMCwgIndyb25nIGVmZmVjdCBmcm9tIHNldCBhbGdvcml0aG1zOiBudW1i ZXIgb2YgY3RvcnMgY2FsbHMgPCBudW0gb2YgZHRvcnMgY2FsbHMiKTsKLSAg ICBFWFBFQ1RfRkFMU0UoTWVtb3J5Q2hlY2tlcjo6YWxpdmVfb2JqZWN0cygp ID4gMCwgIndyb25nIGVmZmVjdCBmcm9tIHNldCBhbGdvcml0aG1zOiBudW1i ZXIgb2YgY3RvcnMgY2FsbHMgPiBudW0gb2YgZHRvcnMgY2FsbHMiKTsKLQot ICAgIHRlc3RfYWxnb19iYXNpY19kb3VibGU8aW50MzJfdD4ocnVuX2Zvcl9y bmRfZnc8dGVzdF9ub25fY29uc3Rfc2V0X2RpZmZlcmVuY2U8aW50MzJfdD4+ KCkpOwotCi0gICAgdGVzdF9hbGdvX2Jhc2ljX2RvdWJsZTxpbnQzMl90Pihy dW5fZm9yX3JuZF9mdzx0ZXN0X25vbl9jb25zdF9zZXRfaW50ZXJzZWN0aW9u PGludDMyX3Q+PigpKTsKLQotICAgIHRlc3RfYWxnb19iYXNpY19kb3VibGU8 aW50MzJfdD4ocnVuX2Zvcl9ybmRfZnc8dGVzdF9ub25fY29uc3Rfc2V0X3N5 bW1ldHJpY19kaWZmZXJlbmNlPGludDMyX3Q+PigpKTsKLQotICAgIHRlc3Rf YWxnb19iYXNpY19kb3VibGU8aW50MzJfdD4ocnVuX2Zvcl9ybmRfZnc8dGVz dF9ub25fY29uc3Rfc2V0X3VuaW9uPGludDMyX3Q+PigpKTsKLQotICAgIHN0 ZDo6Y291dCA8PCBkb25lKCkgPDwgc3RkOjplbmRsOwotCi0gICAgcmV0dXJu IDA7Ci19CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvdGVzdHN1aXRlLzI1 X2FsZ29yaXRobXMvcHN0bC9hbGdfc29ydGluZy9zZXRfZGlmZmVyZW5jZS5j YyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9wc3Rs L2FsZ19zb3J0aW5nL3NldF9kaWZmZXJlbmNlLmNjCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4xM2RiOTU1MGU3MQotLS0gL2Rl di9udWxsCisrKyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjVfYWxnb3Jp dGhtcy9wc3RsL2FsZ19zb3J0aW5nL3NldF9kaWZmZXJlbmNlLmNjCkBAIC0w LDAgKzEsOTAgQEAKKy8vIC0qLSBDKysgLSotCisvLyB7IGRnLW9wdGlvbnMg Ii1sdGJiIiB9CisvLyB7IGRnLWRvIHJ1biB7IHRhcmdldCBjKysxNyB9IH0K Ky8vIHsgZGctdGltZW91dC1mYWN0b3IgMyB9CisvLyB7IGRnLXJlcXVpcmUt ZWZmZWN0aXZlLXRhcmdldCB0YmJfYmFja2VuZCB9CisKKy8vPT09LS0gc2V0 LnBhc3MuY3BwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gUGFydCBvZiB0aGUg TExWTSBQcm9qZWN0LCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgdjIuMCB3 aXRoIExMVk0gRXhjZXB0aW9ucy4KKy8vIFNlZSBodHRwczovL2xsdm0ub3Jn L0xJQ0VOU0UudHh0IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLgorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgV0lUSCBMTFZNLWV4 Y2VwdGlvbgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09 PS8vCisKKyNpbmNsdWRlICJwc3RsL3BzdGxfdGVzdF9jb25maWcuaCIKKwor I2lmZGVmIFBTVExfU1RBTkRBTE9ORV9URVNUUworCisjaW5jbHVkZSA8Y21h dGg+CisjaW5jbHVkZSA8Y2hyb25vPgorCisjaW5jbHVkZSAicHN0bC9leGVj dXRpb24iCisjaW5jbHVkZSAicHN0bC9hbGdvcml0aG0iCisjZWxzZQorI2lu Y2x1ZGUgPGV4ZWN1dGlvbj4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjZW5k aWYgLy8gUFNUTF9TVEFOREFMT05FX1RFU1RTCisKKyNpbmNsdWRlICJwc3Rs L3Rlc3RfdXRpbHMuaCIKKworI2luY2x1ZGUgInNldF91dGlsLmgiCisKK3Vz aW5nIG5hbWVzcGFjZSBUZXN0VXRpbHM7CisKK3RlbXBsYXRlIDx0eXBlbmFt ZSBUeXBlPgorc3RydWN0IHRlc3Rfc2V0X2RpZmZlcmVuY2UKK3sKKyAgICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgUG9saWN5LCB0eXBlbmFtZSBJbnB1dEl0ZXJh dG9yMSwgdHlwZW5hbWUgSW5wdXRJdGVyYXRvcjIsIHR5cGVuYW1lIENvbXBh cmU+CisgICAgdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8IVRlc3RVdGlsczo6 aXNSZXZlcnNlPElucHV0SXRlcmF0b3IxPjo6dmFsdWUsIHZvaWQ+Ojp0eXBl CisgICAgb3BlcmF0b3IoKShQb2xpY3kmJiBleGVjLCBJbnB1dEl0ZXJhdG9y MSBmaXJzdDEsIElucHV0SXRlcmF0b3IxIGxhc3QxLCBJbnB1dEl0ZXJhdG9y MiBmaXJzdDIsIElucHV0SXRlcmF0b3IyIGxhc3QyLAorICAgICAgICAgICAg ICAgQ29tcGFyZSBjb21wKQorICAgIHsKKyAgICAgICAgdXNpbmcgVDEgPSB0 eXBlbmFtZSBzdGQ6Oml0ZXJhdG9yX3RyYWl0czxJbnB1dEl0ZXJhdG9yMT46 OnZhbHVlX3R5cGU7CisKKyAgICAgICAgYXV0byBuMSA9IHN0ZDo6ZGlzdGFu Y2UoZmlyc3QxLCBsYXN0MSk7CisgICAgICAgIGF1dG8gbjIgPSBzdGQ6OmRp c3RhbmNlKGZpcnN0MiwgbGFzdDIpOworICAgICAgICBhdXRvIG4gPSBuMSAr IG4yOworICAgICAgICBTZXF1ZW5jZTxUMT4gZXhwZWN0KG4pOworICAgICAg ICBTZXF1ZW5jZTxUMT4gb3V0KG4pOworCisgICAgICAgIGF1dG8gZXhwZWN0 X3JlcyA9IHN0ZDo6c2V0X2RpZmZlcmVuY2UoZmlyc3QxLCBsYXN0MSwgZmly c3QyLCBsYXN0MiwgZXhwZWN0LmJlZ2luKCksIGNvbXApOworICAgICAgICBh dXRvIHJlcyA9IHN0ZDo6c2V0X2RpZmZlcmVuY2UoZXhlYywgZmlyc3QxLCBs YXN0MSwgZmlyc3QyLCBsYXN0Miwgb3V0LmJlZ2luKCksIGNvbXApOworCisg ICAgICAgIEVYUEVDVF9UUlVFKGV4cGVjdF9yZXMgLSBleHBlY3QuYmVnaW4o KSA9PSByZXMgLSBvdXQuYmVnaW4oKSwgIndyb25nIHJlc3VsdCBmb3Igc2V0 X2RpZmZlcmVuY2UiKTsKKyAgICAgICAgRVhQRUNUX0VRX04oZXhwZWN0LmJl Z2luKCksIG91dC5iZWdpbigpLCBzdGQ6OmRpc3RhbmNlKG91dC5iZWdpbigp LCByZXMpLCAid3Jvbmcgc2V0X2RpZmZlcmVuY2UgZWZmZWN0Iik7CisgICAg fQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBvbGljeSwgdHlwZW5hbWUg SW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIElucHV0SXRlcmF0b3IyLCB0eXBl bmFtZSBDb21wYXJlPgorICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPFRl c3RVdGlsczo6aXNSZXZlcnNlPElucHV0SXRlcmF0b3IxPjo6dmFsdWUsIHZv aWQ+Ojp0eXBlCisgICAgb3BlcmF0b3IoKShQb2xpY3kmJiwgSW5wdXRJdGVy YXRvcjEsIElucHV0SXRlcmF0b3IxLCBJbnB1dEl0ZXJhdG9yMiwgSW5wdXRJ dGVyYXRvcjIsIENvbXBhcmUpCisgICAgeworICAgIH0KK307CisKK3RlbXBs YXRlIDx0eXBlbmFtZSBUPgorc3RydWN0IHRlc3Rfbm9uX2NvbnN0X3NldF9k aWZmZXJlbmNlCit7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBvbGljeSwg dHlwZW5hbWUgSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgT3V0cHV0SW50ZXJh dG9yPgorICAgIHZvaWQKKyAgICBvcGVyYXRvcigpKFBvbGljeSYmIGV4ZWMs IElucHV0SXRlcmF0b3IgaW5wdXRfaXRlciwgT3V0cHV0SW50ZXJhdG9yIG91 dF9pdGVyKQorICAgIHsKKyAgICAgICAgc2V0X2RpZmZlcmVuY2UoZXhlYywg aW5wdXRfaXRlciwgaW5wdXRfaXRlciwgaW5wdXRfaXRlciwgaW5wdXRfaXRl ciwgb3V0X2l0ZXIsIG5vbl9jb25zdChzdGQ6Omxlc3M8VD4oKSkpOworICAg IH0KK307CisKK2ludAorbWFpbigpCit7CisgICAgdGVzdF9zZXRfb3A8dGVz dF9zZXRfZGlmZmVyZW5jZTxmbG9hdDY0X3Q+LCBmbG9hdDY0X3QsIGZsb2F0 NjRfdD4oc3RkOjpsZXNzPD4oKSk7CisgICAgdGVzdF9zZXRfb3A8dGVzdF9z ZXRfZGlmZmVyZW5jZTxOdW08aW50NjRfdD4+LCBOdW08aW50NjRfdD4sIE51 bTxpbnQzMl90Pj4oW10oY29uc3QgTnVtPGludDY0X3Q+JiB4LCBjb25zdCBO dW08aW50MzJfdD4mIHkpIHsgcmV0dXJuIHggPCB5OyB9KTsKKyAgICB0ZXN0 X3NldF9vcDx0ZXN0X3NldF9kaWZmZXJlbmNlPE1lbW9yeUNoZWNrZXI+LCBN ZW1vcnlDaGVja2VyLCBNZW1vcnlDaGVja2VyPihbXShjb25zdCBNZW1vcnlD aGVja2VyJiB2YWwxLCBjb25zdCBNZW1vcnlDaGVja2VyJiB2YWwyKSAtPiBi b29sIHsKKyAgICAgICAgcmV0dXJuIHZhbDEudmFsdWUoKSA8IHZhbDIudmFs dWUoKTsKKyAgICB9KTsKKyAgICBFWFBFQ1RfRkFMU0UoTWVtb3J5Q2hlY2tl cjo6YWxpdmVfb2JqZWN0cygpIDwgMCwgIndyb25nIGVmZmVjdCBmcm9tIHNl dCBhbGdvcml0aG1zOiBudW1iZXIgb2YgY3RvcnMgY2FsbHMgPCBudW0gb2Yg ZHRvcnMgY2FsbHMiKTsKKyAgICBFWFBFQ1RfRkFMU0UoTWVtb3J5Q2hlY2tl cjo6YWxpdmVfb2JqZWN0cygpID4gMCwgIndyb25nIGVmZmVjdCBmcm9tIHNl dCBhbGdvcml0aG1zOiBudW1iZXIgb2YgY3RvcnMgY2FsbHMgPiBudW0gb2Yg ZHRvcnMgY2FsbHMiKTsKKworICAgIHRlc3RfYWxnb19iYXNpY19kb3VibGU8 aW50MzJfdD4ocnVuX2Zvcl9ybmRfZnc8dGVzdF9ub25fY29uc3Rfc2V0X2Rp ZmZlcmVuY2U8aW50MzJfdD4+KCkpOworCisgICAgc3RkOjpjb3V0IDw8IGRv bmUoKSA8PCBzdGQ6OmVuZGw7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKyst djMvdGVzdHN1aXRlLzI1X2FsZ29yaXRobXMvcHN0bC9hbGdfc29ydGluZy9z ZXRfaW50ZXJzZWN0aW9uLmNjIGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8y NV9hbGdvcml0aG1zL3BzdGwvYWxnX3NvcnRpbmcvc2V0X2ludGVyc2VjdGlv bi5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u YTRkNGZkMjQ0YjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMv dGVzdHN1aXRlLzI1X2FsZ29yaXRobXMvcHN0bC9hbGdfc29ydGluZy9zZXRf aW50ZXJzZWN0aW9uLmNjCkBAIC0wLDAgKzEsOTEgQEAKKy8vIC0qLSBDKysg LSotCisvLyB7IGRnLW9wdGlvbnMgIi1sdGJiIiB9CisvLyB7IGRnLWRvIHJ1 biB7IHRhcmdldCBjKysxNyB9IH0KKy8vIHsgZGctdGltZW91dC1mYWN0b3Ig MyB9CisvLyB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCB0YmJfYmFj a2VuZCB9CisKKy8vPT09LS0gc2V0LnBhc3MuY3BwIC0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8v CisvLworLy8gUGFydCBvZiB0aGUgTExWTSBQcm9qZWN0LCB1bmRlciB0aGUg QXBhY2hlIExpY2Vuc2UgdjIuMCB3aXRoIExMVk0gRXhjZXB0aW9ucy4KKy8v IFNlZSBodHRwczovL2xsdm0ub3JnL0xJQ0VOU0UudHh0IGZvciBsaWNlbnNl IGluZm9ybWF0aW9uLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFw YWNoZS0yLjAgV0lUSCBMTFZNLWV4Y2VwdGlvbgorLy8KKy8vPT09LS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKyNpbmNsdWRlICJwc3RsL3Bz dGxfdGVzdF9jb25maWcuaCIKKworI2lmZGVmIFBTVExfU1RBTkRBTE9ORV9U RVNUUworCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8Y2hyb25vPgor CisjaW5jbHVkZSAicHN0bC9leGVjdXRpb24iCisjaW5jbHVkZSAicHN0bC9h bGdvcml0aG0iCisjZWxzZQorI2luY2x1ZGUgPGV4ZWN1dGlvbj4KKyNpbmNs dWRlIDxhbGdvcml0aG0+CisjZW5kaWYgLy8gUFNUTF9TVEFOREFMT05FX1RF U1RTCisKKyNpbmNsdWRlICJwc3RsL3Rlc3RfdXRpbHMuaCIKKworI2luY2x1 ZGUgInNldF91dGlsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBUZXN0VXRpbHM7 CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgorc3RydWN0IHRlc3Rfc2V0 X2ludGVyc2VjdGlvbgoreworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBQb2xp Y3ksIHR5cGVuYW1lIElucHV0SXRlcmF0b3IxLCB0eXBlbmFtZSBJbnB1dEl0 ZXJhdG9yMiwgdHlwZW5hbWUgQ29tcGFyZT4KKyAgICB0eXBlbmFtZSBzdGQ6 OmVuYWJsZV9pZjwhVGVzdFV0aWxzOjppc1JldmVyc2U8SW5wdXRJdGVyYXRv cjE+Ojp2YWx1ZSwgdm9pZD46OnR5cGUKKyAgICBvcGVyYXRvcigpKFBvbGlj eSYmIGV4ZWMsIElucHV0SXRlcmF0b3IxIGZpcnN0MSwgSW5wdXRJdGVyYXRv cjEgbGFzdDEsIElucHV0SXRlcmF0b3IyIGZpcnN0MiwgSW5wdXRJdGVyYXRv cjIgbGFzdDIsCisgICAgICAgICAgICAgICBDb21wYXJlIGNvbXApCisgICAg eworICAgICAgICB1c2luZyBUMSA9IHR5cGVuYW1lIHN0ZDo6aXRlcmF0b3Jf dHJhaXRzPElucHV0SXRlcmF0b3IxPjo6dmFsdWVfdHlwZTsKKworICAgICAg ICBhdXRvIG4xID0gc3RkOjpkaXN0YW5jZShmaXJzdDEsIGxhc3QxKTsKKyAg ICAgICAgYXV0byBuMiA9IHN0ZDo6ZGlzdGFuY2UoZmlyc3QyLCBsYXN0Mik7 CisgICAgICAgIGF1dG8gbiA9IG4xICsgbjI7CisgICAgICAgIFNlcXVlbmNl PFQxPiBleHBlY3Qobik7CisgICAgICAgIFNlcXVlbmNlPFQxPiBvdXQobik7 CisKKyAgICAgICAgYXV0byBleHBlY3RfcmVzID0gc3RkOjpzZXRfaW50ZXJz ZWN0aW9uKGZpcnN0MSwgbGFzdDEsIGZpcnN0MiwgbGFzdDIsIGV4cGVjdC5i ZWdpbigpLCBjb21wKTsKKyAgICAgICAgYXV0byByZXMgPSBzdGQ6OnNldF9p bnRlcnNlY3Rpb24oZXhlYywgZmlyc3QxLCBsYXN0MSwgZmlyc3QyLCBsYXN0 Miwgb3V0LmJlZ2luKCksIGNvbXApOworCisgICAgICAgIEVYUEVDVF9UUlVF KGV4cGVjdF9yZXMgLSBleHBlY3QuYmVnaW4oKSA9PSByZXMgLSBvdXQuYmVn aW4oKSwgIndyb25nIHJlc3VsdCBmb3Igc2V0X2ludGVyc2VjdGlvbiIpOwor ICAgICAgICBFWFBFQ1RfRVFfTihleHBlY3QuYmVnaW4oKSwgb3V0LmJlZ2lu KCksIHN0ZDo6ZGlzdGFuY2Uob3V0LmJlZ2luKCksIHJlcyksICJ3cm9uZyBz ZXRfaW50ZXJzZWN0aW9uIGVmZmVjdCIpOworICAgIH0KKworICAgIHRlbXBs YXRlIDx0eXBlbmFtZSBQb2xpY3ksIHR5cGVuYW1lIElucHV0SXRlcmF0b3Ix LCB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yMiwgdHlwZW5hbWUgQ29tcGFyZT4K KyAgICB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxUZXN0VXRpbHM6OmlzUmV2 ZXJzZTxJbnB1dEl0ZXJhdG9yMT46OnZhbHVlLCB2b2lkPjo6dHlwZQorICAg IG9wZXJhdG9yKCkoUG9saWN5JiYsIElucHV0SXRlcmF0b3IxLCBJbnB1dEl0 ZXJhdG9yMSwgSW5wdXRJdGVyYXRvcjIsIElucHV0SXRlcmF0b3IyLCBDb21w YXJlKQorICAgIHsKKyAgICB9Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KK3N0cnVjdCB0ZXN0X25vbl9jb25zdF9zZXRfaW50ZXJzZWN0aW9uCit7 CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBvbGljeSwgdHlwZW5hbWUgSW5w dXRJdGVyYXRvciwgdHlwZW5hbWUgT3V0cHV0SW50ZXJhdG9yPgorICAgIHZv aWQKKyAgICBvcGVyYXRvcigpKFBvbGljeSYmIGV4ZWMsIElucHV0SXRlcmF0 b3IgaW5wdXRfaXRlciwgT3V0cHV0SW50ZXJhdG9yIG91dF9pdGVyKQorICAg IHsKKyAgICAgICAgc2V0X2ludGVyc2VjdGlvbihleGVjLCBpbnB1dF9pdGVy LCBpbnB1dF9pdGVyLCBpbnB1dF9pdGVyLCBpbnB1dF9pdGVyLCBvdXRfaXRl ciwgbm9uX2NvbnN0KHN0ZDo6bGVzczxUPigpKSk7CisgICAgfQorfTsKKwor aW50CittYWluKCkKK3sKKyAgICB0ZXN0X3NldF9vcDx0ZXN0X3NldF9pbnRl cnNlY3Rpb248ZmxvYXQ2NF90PiwgZmxvYXQ2NF90LCBmbG9hdDY0X3Q+KHN0 ZDo6bGVzczw+KCkpOworICAgIHRlc3Rfc2V0X29wPHRlc3Rfc2V0X2ludGVy c2VjdGlvbjxOdW08aW50NjRfdD4+LCBOdW08aW50NjRfdD4sIE51bTxpbnQz Ml90Pj4oW10oY29uc3QgTnVtPGludDY0X3Q+JiB4LCBjb25zdCBOdW08aW50 MzJfdD4mIHkpIHsgcmV0dXJuIHggPCB5OyB9KTsKKworICAgIHRlc3Rfc2V0 X29wPHRlc3Rfc2V0X2ludGVyc2VjdGlvbjxNZW1vcnlDaGVja2VyPiwgTWVt b3J5Q2hlY2tlciwgTWVtb3J5Q2hlY2tlcj4oW10oY29uc3QgTWVtb3J5Q2hl Y2tlciYgdmFsMSwgY29uc3QgTWVtb3J5Q2hlY2tlciYgdmFsMikgLT4gYm9v bCB7CisgICAgICAgIHJldHVybiB2YWwxLnZhbHVlKCkgPCB2YWwyLnZhbHVl KCk7CisgICAgfSk7CisgICAgRVhQRUNUX0ZBTFNFKE1lbW9yeUNoZWNrZXI6 OmFsaXZlX29iamVjdHMoKSA8IDAsICJ3cm9uZyBlZmZlY3QgZnJvbSBzZXQg YWxnb3JpdGhtczogbnVtYmVyIG9mIGN0b3JzIGNhbGxzIDwgbnVtIG9mIGR0 b3JzIGNhbGxzIik7CisgICAgRVhQRUNUX0ZBTFNFKE1lbW9yeUNoZWNrZXI6 OmFsaXZlX29iamVjdHMoKSA+IDAsICJ3cm9uZyBlZmZlY3QgZnJvbSBzZXQg YWxnb3JpdGhtczogbnVtYmVyIG9mIGN0b3JzIGNhbGxzID4gbnVtIG9mIGR0 b3JzIGNhbGxzIik7CisKKyAgICBzdGQ6OmNvdXQgPDwgZG9uZSgpIDw8IHN0 ZDo6ZW5kbDsKKworICAgIHRlc3RfYWxnb19iYXNpY19kb3VibGU8aW50MzJf dD4ocnVuX2Zvcl9ybmRfZnc8dGVzdF9ub25fY29uc3Rfc2V0X2ludGVyc2Vj dGlvbjxpbnQzMl90Pj4oKSk7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKyst djMvdGVzdHN1aXRlLzI1X2FsZ29yaXRobXMvcHN0bC9hbGdfc29ydGluZy9z ZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UuY2MgYi9saWJzdGRjKystdjMvdGVz dHN1aXRlLzI1X2FsZ29yaXRobXMvcHN0bC9hbGdfc29ydGluZy9zZXRfc3lt bWV0cmljX2RpZmZlcmVuY2UuY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjI5OTZjNzViZGQ0Ci0tLSAvZGV2L251bGwKKysr IGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL3BzdGwv YWxnX3NvcnRpbmcvc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlLmNjCkBAIC0w LDAgKzEsOTIgQEAKKy8vIC0qLSBDKysgLSotCisvLyB7IGRnLW9wdGlvbnMg Ii1sdGJiIiB9CisvLyB7IGRnLWRvIHJ1biB7IHRhcmdldCBjKysxNyB9IH0K Ky8vIHsgZGctdGltZW91dC1mYWN0b3IgMyB9CisvLyB7IGRnLXJlcXVpcmUt ZWZmZWN0aXZlLXRhcmdldCB0YmJfYmFja2VuZCB9CisKKy8vPT09LS0gc2V0 LnBhc3MuY3BwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisvLworLy8gUGFydCBvZiB0aGUg TExWTSBQcm9qZWN0LCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgdjIuMCB3 aXRoIExMVk0gRXhjZXB0aW9ucy4KKy8vIFNlZSBodHRwczovL2xsdm0ub3Jn L0xJQ0VOU0UudHh0IGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLgorLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAgV0lUSCBMTFZNLWV4 Y2VwdGlvbgorLy8KKy8vPT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09 PS8vCisKKyNpbmNsdWRlICJwc3RsL3BzdGxfdGVzdF9jb25maWcuaCIKKwor I2lmZGVmIFBTVExfU1RBTkRBTE9ORV9URVNUUworCisjaW5jbHVkZSA8Y21h dGg+CisjaW5jbHVkZSA8Y2hyb25vPgorCisjaW5jbHVkZSAicHN0bC9leGVj dXRpb24iCisjaW5jbHVkZSAicHN0bC9hbGdvcml0aG0iCisjZWxzZQorI2lu Y2x1ZGUgPGV4ZWN1dGlvbj4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjZW5k aWYgLy8gUFNUTF9TVEFOREFMT05FX1RFU1RTCisKKyNpbmNsdWRlICJwc3Rs L3Rlc3RfdXRpbHMuaCIKKworI2luY2x1ZGUgInNldF91dGlsLmgiCisKK3Vz aW5nIG5hbWVzcGFjZSBUZXN0VXRpbHM7CisKK3RlbXBsYXRlIDx0eXBlbmFt ZSBUeXBlPgorc3RydWN0IHRlc3Rfc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNl Cit7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBvbGljeSwgdHlwZW5hbWUg SW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIElucHV0SXRlcmF0b3IyLCB0eXBl bmFtZSBDb21wYXJlPgorICAgIHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPCFU ZXN0VXRpbHM6OmlzUmV2ZXJzZTxJbnB1dEl0ZXJhdG9yMT46OnZhbHVlLCB2 b2lkPjo6dHlwZQorICAgIG9wZXJhdG9yKCkoUG9saWN5JiYgZXhlYywgSW5w dXRJdGVyYXRvcjEgZmlyc3QxLCBJbnB1dEl0ZXJhdG9yMSBsYXN0MSwgSW5w dXRJdGVyYXRvcjIgZmlyc3QyLCBJbnB1dEl0ZXJhdG9yMiBsYXN0MiwKKyAg ICAgICAgICAgICAgIENvbXBhcmUgY29tcCkKKyAgICB7CisgICAgICAgIHVz aW5nIFQxID0gdHlwZW5hbWUgc3RkOjppdGVyYXRvcl90cmFpdHM8SW5wdXRJ dGVyYXRvcjE+Ojp2YWx1ZV90eXBlOworCisgICAgICAgIGF1dG8gbjEgPSBz dGQ6OmRpc3RhbmNlKGZpcnN0MSwgbGFzdDEpOworICAgICAgICBhdXRvIG4y ID0gc3RkOjpkaXN0YW5jZShmaXJzdDIsIGxhc3QyKTsKKyAgICAgICAgYXV0 byBuID0gbjEgKyBuMjsKKyAgICAgICAgU2VxdWVuY2U8VDE+IGV4cGVjdChu KTsKKyAgICAgICAgU2VxdWVuY2U8VDE+IG91dChuKTsKKworICAgICAgICBh dXRvIGV4cGVjdF9yZXMgPSBzdGQ6OnNldF9zeW1tZXRyaWNfZGlmZmVyZW5j ZShmaXJzdDEsIGxhc3QxLCBmaXJzdDIsIGxhc3QyLCBleHBlY3QuYmVnaW4o KSwgY29tcCk7CisgICAgICAgIGF1dG8gcmVzID0gc3RkOjpzZXRfc3ltbWV0 cmljX2RpZmZlcmVuY2UoZXhlYywgZmlyc3QxLCBsYXN0MSwgZmlyc3QyLCBs YXN0Miwgb3V0LmJlZ2luKCksIGNvbXApOworCisgICAgICAgIEVYUEVDVF9U UlVFKGV4cGVjdF9yZXMgLSBleHBlY3QuYmVnaW4oKSA9PSByZXMgLSBvdXQu YmVnaW4oKSwgIndyb25nIHJlc3VsdCBmb3Igc2V0X3N5bW1ldHJpY19kaWZm ZXJlbmNlIik7CisgICAgICAgIEVYUEVDVF9FUV9OKGV4cGVjdC5iZWdpbigp LCBvdXQuYmVnaW4oKSwgc3RkOjpkaXN0YW5jZShvdXQuYmVnaW4oKSwgcmVz KSwKKyAgICAgICAgICAgICAgICAgICAgIndyb25nIHNldF9zeW1tZXRyaWNf ZGlmZmVyZW5jZSBlZmZlY3QiKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgUG9saWN5LCB0eXBlbmFtZSBJbnB1dEl0ZXJhdG9yMSwgdHlw ZW5hbWUgSW5wdXRJdGVyYXRvcjIsIHR5cGVuYW1lIENvbXBhcmU+CisgICAg dHlwZW5hbWUgc3RkOjplbmFibGVfaWY8VGVzdFV0aWxzOjppc1JldmVyc2U8 SW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZSwgdm9pZD46OnR5cGUKKyAgICBvcGVy YXRvcigpKFBvbGljeSYmLCBJbnB1dEl0ZXJhdG9yMSwgSW5wdXRJdGVyYXRv cjEsIElucHV0SXRlcmF0b3IyLCBJbnB1dEl0ZXJhdG9yMiwgQ29tcGFyZSkK KyAgICB7CisgICAgfQorfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citz dHJ1Y3QgdGVzdF9ub25fY29uc3Rfc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNl Cit7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBvbGljeSwgdHlwZW5hbWUg SW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgT3V0cHV0SW50ZXJhdG9yPgorICAg IHZvaWQKKyAgICBvcGVyYXRvcigpKFBvbGljeSYmIGV4ZWMsIElucHV0SXRl cmF0b3IgaW5wdXRfaXRlciwgT3V0cHV0SW50ZXJhdG9yIG91dF9pdGVyKQor ICAgIHsKKyAgICAgICAgc2V0X3N5bW1ldHJpY19kaWZmZXJlbmNlKGV4ZWMs IGlucHV0X2l0ZXIsIGlucHV0X2l0ZXIsIGlucHV0X2l0ZXIsIGlucHV0X2l0 ZXIsIG91dF9pdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbm9uX2NvbnN0KHN0ZDo6bGVzczxUPigpKSk7CisgICAgfQorfTsKKwor aW50CittYWluKCkKK3sKKyAgICB0ZXN0X3NldF9vcDx0ZXN0X3NldF9zeW1t ZXRyaWNfZGlmZmVyZW5jZTxmbG9hdDY0X3Q+LCBmbG9hdDY0X3QsIGZsb2F0 NjRfdD4oc3RkOjpsZXNzPD4oKSk7CisgICAgdGVzdF9zZXRfb3A8dGVzdF9z ZXRfc3ltbWV0cmljX2RpZmZlcmVuY2U8TnVtPGludDY0X3Q+PiwgTnVtPGlu dDY0X3Q+LCBOdW08aW50MzJfdD4+KFtdKGNvbnN0IE51bTxpbnQ2NF90PiYg eCwgY29uc3QgTnVtPGludDMyX3Q+JiB5KSB7IHJldHVybiB4IDwgeTsgfSk7 CisgICAgdGVzdF9zZXRfb3A8dGVzdF9zZXRfc3ltbWV0cmljX2RpZmZlcmVu Y2U8TWVtb3J5Q2hlY2tlcj4sIE1lbW9yeUNoZWNrZXIsIE1lbW9yeUNoZWNr ZXI+KFtdKGNvbnN0IE1lbW9yeUNoZWNrZXImIHZhbDEsIGNvbnN0IE1lbW9y eUNoZWNrZXImIHZhbDIpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gdmFs MS52YWx1ZSgpIDwgdmFsMi52YWx1ZSgpOworICAgIH0pOworICAgIEVYUEVD VF9GQUxTRShNZW1vcnlDaGVja2VyOjphbGl2ZV9vYmplY3RzKCkgPCAwLCAi d3JvbmcgZWZmZWN0IGZyb20gc2V0IGFsZ29yaXRobXM6IG51bWJlciBvZiBj dG9ycyBjYWxscyA8IG51bSBvZiBkdG9ycyBjYWxscyIpOworICAgIEVYUEVD VF9GQUxTRShNZW1vcnlDaGVja2VyOjphbGl2ZV9vYmplY3RzKCkgPiAwLCAi d3JvbmcgZWZmZWN0IGZyb20gc2V0IGFsZ29yaXRobXM6IG51bWJlciBvZiBj dG9ycyBjYWxscyA+IG51bSBvZiBkdG9ycyBjYWxscyIpOworCisgICAgdGVz dF9hbGdvX2Jhc2ljX2RvdWJsZTxpbnQzMl90PihydW5fZm9yX3JuZF9mdzx0 ZXN0X25vbl9jb25zdF9zZXRfc3ltbWV0cmljX2RpZmZlcmVuY2U8aW50MzJf dD4+KCkpOworCisgICAgc3RkOjpjb3V0IDw8IGRvbmUoKSA8PCBzdGQ6OmVu ZGw7Cit9CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvdGVzdHN1aXRlLzI1 X2FsZ29yaXRobXMvcHN0bC9hbGdfc29ydGluZy9zZXRfdW5pb24uY2MgYi9s aWJzdGRjKystdjMvdGVzdHN1aXRlLzI1X2FsZ29yaXRobXMvcHN0bC9hbGdf c29ydGluZy9zZXRfdW5pb24uY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLmI1NTJhYjY3NzhhCi0tLSAvZGV2L251bGwKKysr IGIvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yNV9hbGdvcml0aG1zL3BzdGwv YWxnX3NvcnRpbmcvc2V0X3VuaW9uLmNjCkBAIC0wLDAgKzEsOTAgQEAKKy8v IC0qLSBDKysgLSotCisvLyB7IGRnLW9wdGlvbnMgIi1sdGJiIiB9CisvLyB7 IGRnLWRvIHJ1biB7IHRhcmdldCBjKysxNyB9IH0KKy8vIHsgZGctdGltZW91 dC1mYWN0b3IgMyB9CisvLyB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdl dCB0YmJfYmFja2VuZCB9CisKKy8vPT09LS0gc2V0LnBhc3MuY3BwIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLT09PS8vCisvLworLy8gUGFydCBvZiB0aGUgTExWTSBQcm9qZWN0LCB1 bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgdjIuMCB3aXRoIExMVk0gRXhjZXB0 aW9ucy4KKy8vIFNlZSBodHRwczovL2xsdm0ub3JnL0xJQ0VOU0UudHh0IGZv ciBsaWNlbnNlIGluZm9ybWF0aW9uLgorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEFwYWNoZS0yLjAgV0lUSCBMTFZNLWV4Y2VwdGlvbgorLy8KKy8v PT09LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLT09PS8vCisKKyNpbmNsdWRl ICJwc3RsL3BzdGxfdGVzdF9jb25maWcuaCIKKworI2lmZGVmIFBTVExfU1RB TkRBTE9ORV9URVNUUworCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8 Y2hyb25vPgorCisjaW5jbHVkZSAicHN0bC9leGVjdXRpb24iCisjaW5jbHVk ZSAicHN0bC9hbGdvcml0aG0iCisjZWxzZQorI2luY2x1ZGUgPGV4ZWN1dGlv bj4KKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjZW5kaWYgLy8gUFNUTF9TVEFO REFMT05FX1RFU1RTCisKKyNpbmNsdWRlICJwc3RsL3Rlc3RfdXRpbHMuaCIK KworI2luY2x1ZGUgInNldF91dGlsLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBU ZXN0VXRpbHM7CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUeXBlPgorc3RydWN0 IHRlc3Rfc2V0X3VuaW9uCit7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBv bGljeSwgdHlwZW5hbWUgSW5wdXRJdGVyYXRvcjEsIHR5cGVuYW1lIElucHV0 SXRlcmF0b3IyLCB0eXBlbmFtZSBDb21wYXJlPgorICAgIHR5cGVuYW1lIHN0 ZDo6ZW5hYmxlX2lmPCFUZXN0VXRpbHM6OmlzUmV2ZXJzZTxJbnB1dEl0ZXJh dG9yMT46OnZhbHVlLCB2b2lkPjo6dHlwZQorICAgIG9wZXJhdG9yKCkoUG9s aWN5JiYgZXhlYywgSW5wdXRJdGVyYXRvcjEgZmlyc3QxLCBJbnB1dEl0ZXJh dG9yMSBsYXN0MSwgSW5wdXRJdGVyYXRvcjIgZmlyc3QyLCBJbnB1dEl0ZXJh dG9yMiBsYXN0MiwKKyAgICAgICAgICAgICAgIENvbXBhcmUgY29tcCkKKyAg ICB7CisgICAgICAgIHVzaW5nIFQxID0gdHlwZW5hbWUgc3RkOjppdGVyYXRv cl90cmFpdHM8SW5wdXRJdGVyYXRvcjE+Ojp2YWx1ZV90eXBlOworCisgICAg ICAgIGF1dG8gbjEgPSBzdGQ6OmRpc3RhbmNlKGZpcnN0MSwgbGFzdDEpOwor ICAgICAgICBhdXRvIG4yID0gc3RkOjpkaXN0YW5jZShmaXJzdDIsIGxhc3Qy KTsKKyAgICAgICAgYXV0byBuID0gbjEgKyBuMjsKKyAgICAgICAgU2VxdWVu Y2U8VDE+IGV4cGVjdChuKTsKKyAgICAgICAgU2VxdWVuY2U8VDE+IG91dChu KTsKKworICAgICAgICBhdXRvIGV4cGVjdF9yZXMgPSBzdGQ6OnNldF91bmlv bihmaXJzdDEsIGxhc3QxLCBmaXJzdDIsIGxhc3QyLCBleHBlY3QuYmVnaW4o KSwgY29tcCk7CisgICAgICAgIGF1dG8gcmVzID0gc3RkOjpzZXRfdW5pb24o ZXhlYywgZmlyc3QxLCBsYXN0MSwgZmlyc3QyLCBsYXN0Miwgb3V0LmJlZ2lu KCksIGNvbXApOworCisgICAgICAgIEVYUEVDVF9UUlVFKGV4cGVjdF9yZXMg LSBleHBlY3QuYmVnaW4oKSA9PSByZXMgLSBvdXQuYmVnaW4oKSwgIndyb25n IHJlc3VsdCBmb3Igc2V0X3VuaW9uIik7CisgICAgICAgIEVYUEVDVF9FUV9O KGV4cGVjdC5iZWdpbigpLCBvdXQuYmVnaW4oKSwgc3RkOjpkaXN0YW5jZShv dXQuYmVnaW4oKSwgcmVzKSwgIndyb25nIHNldF91bmlvbiBlZmZlY3QiKTsK KyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUG9saWN5LCB0eXBl bmFtZSBJbnB1dEl0ZXJhdG9yMSwgdHlwZW5hbWUgSW5wdXRJdGVyYXRvcjIs IHR5cGVuYW1lIENvbXBhcmU+CisgICAgdHlwZW5hbWUgc3RkOjplbmFibGVf aWY8VGVzdFV0aWxzOjppc1JldmVyc2U8SW5wdXRJdGVyYXRvcjE+Ojp2YWx1 ZSwgdm9pZD46OnR5cGUKKyAgICBvcGVyYXRvcigpKFBvbGljeSYmLCBJbnB1 dEl0ZXJhdG9yMSwgSW5wdXRJdGVyYXRvcjEsIElucHV0SXRlcmF0b3IyLCBJ bnB1dEl0ZXJhdG9yMiwgQ29tcGFyZSkKKyAgICB7CisgICAgfQorfTsKKwor dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitzdHJ1Y3QgdGVzdF9ub25fY29uc3Rf c2V0X3VuaW9uCit7CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFBvbGljeSwg dHlwZW5hbWUgSW5wdXRJdGVyYXRvciwgdHlwZW5hbWUgT3V0cHV0SW50ZXJh dG9yPgorICAgIHZvaWQKKyAgICBvcGVyYXRvcigpKFBvbGljeSYmIGV4ZWMs IElucHV0SXRlcmF0b3IgaW5wdXRfaXRlciwgT3V0cHV0SW50ZXJhdG9yIG91 dF9pdGVyKQorICAgIHsKKyAgICAgICAgc2V0X3VuaW9uKGV4ZWMsIGlucHV0 X2l0ZXIsIGlucHV0X2l0ZXIsIGlucHV0X2l0ZXIsIGlucHV0X2l0ZXIsIG91 dF9pdGVyLCBub25fY29uc3Qoc3RkOjpsZXNzPFQ+KCkpKTsKKyAgICB9Cit9 OworCitpbnQKK21haW4oKQoreworICAgIHRlc3Rfc2V0X29wPHRlc3Rfc2V0 X3VuaW9uPGZsb2F0NjRfdD4sIGZsb2F0NjRfdCwgZmxvYXQ2NF90PihzdGQ6 Omxlc3M8PigpKTsKKyAgICB0ZXN0X3NldF9vcDx0ZXN0X3NldF91bmlvbjxO dW08aW50NjRfdD4+LCBOdW08aW50NjRfdD4sIE51bTxpbnQzMl90Pj4oW10o Y29uc3QgTnVtPGludDY0X3Q+JiB4LCBjb25zdCBOdW08aW50MzJfdD4mIHkp IHsgcmV0dXJuIHggPCB5OyB9KTsKKyAgICB0ZXN0X3NldF9vcDx0ZXN0X3Nl dF91bmlvbjxNZW1vcnlDaGVja2VyPiwgTWVtb3J5Q2hlY2tlciwgTWVtb3J5 Q2hlY2tlcj4oW10oY29uc3QgTWVtb3J5Q2hlY2tlciYgdmFsMSwgY29uc3Qg TWVtb3J5Q2hlY2tlciYgdmFsMikgLT4gYm9vbCB7CisgICAgICAgIHJldHVy biB2YWwxLnZhbHVlKCkgPCB2YWwyLnZhbHVlKCk7CisgICAgfSk7CisgICAg RVhQRUNUX0ZBTFNFKE1lbW9yeUNoZWNrZXI6OmFsaXZlX29iamVjdHMoKSA8 IDAsICJ3cm9uZyBlZmZlY3QgZnJvbSBzZXQgYWxnb3JpdGhtczogbnVtYmVy IG9mIGN0b3JzIGNhbGxzIDwgbnVtIG9mIGR0b3JzIGNhbGxzIik7CisgICAg RVhQRUNUX0ZBTFNFKE1lbW9yeUNoZWNrZXI6OmFsaXZlX29iamVjdHMoKSA+ IDAsICJ3cm9uZyBlZmZlY3QgZnJvbSBzZXQgYWxnb3JpdGhtczogbnVtYmVy IG9mIGN0b3JzIGNhbGxzID4gbnVtIG9mIGR0b3JzIGNhbGxzIik7CisKKyAg ICB0ZXN0X2FsZ29fYmFzaWNfZG91YmxlPGludDMyX3Q+KHJ1bl9mb3Jfcm5k X2Z3PHRlc3Rfbm9uX2NvbnN0X3NldF91bmlvbjxpbnQzMl90Pj4oKSk7CisK KyAgICBzdGQ6OmNvdXQgPDwgZG9uZSgpIDw8IHN0ZDo6ZW5kbDsKK30KZGlm ZiAtLWdpdCBhL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvMjVfYWxnb3JpdGht cy9wc3RsL2FsZ19zb3J0aW5nL3NldF91dGlsLmggYi9saWJzdGRjKystdjMv dGVzdHN1aXRlLzI1X2FsZ29yaXRobXMvcHN0bC9hbGdfc29ydGluZy9zZXRf dXRpbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li45MGUzN2MyM2U5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYnN0ZGMrKy12 My90ZXN0c3VpdGUvMjVfYWxnb3JpdGhtcy9wc3RsL2FsZ19zb3J0aW5nL3Nl dF91dGlsLmgKQEAgLTAsMCArMSw3MiBAQAorLy8gLSotIEMrKyAtKi0KKwor Ly89PT0tLSBzZXQucGFzcy5jcHAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPT09Ly8KKy8vCisvLyBQ YXJ0IG9mIHRoZSBMTFZNIFByb2plY3QsIHVuZGVyIHRoZSBBcGFjaGUgTGlj ZW5zZSB2Mi4wIHdpdGggTExWTSBFeGNlcHRpb25zLgorLy8gU2VlIGh0dHBz Oi8vbGx2bS5vcmcvTElDRU5TRS50eHQgZm9yIGxpY2Vuc2UgaW5mb3JtYXRp b24uCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCBX SVRIIExMVk0tZXhjZXB0aW9uCisvLworLy89PT0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tPT09Ly8KKyNpZm5kZWYgX19QU1RMX1RFU1RfU0VUX1VUSUxf SAorI2RlZmluZSBfX1BTVExfVEVTVF9TRVRfVVRJTF9ICisKK25hbWVzcGFj ZSBUZXN0VXRpbHMKK3sKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAg ICBzdHJ1Y3QgTnVtCisgICAgeworICAgICAgICBUIHZhbDsKKworICAgICAg ICBOdW0oKSA6IHZhbHt9IHt9CisgICAgICAgIE51bShjb25zdCBUJiB2KSA6 IHZhbCh2KSB7fQorCisgICAgICAgIC8vZm9yICJpbmNsdWRlcyIgY2hlY2tz CisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMT4KKyAgICAgICAgYm9v bAorICAgICAgICBvcGVyYXRvcjwoY29uc3QgTnVtPFQxPiYgdjEpIGNvbnN0 CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB2YWwgPCB2MS52YWw7 CisgICAgICAgIH0KKworICAgICAgICAvL1RoZSB0eXBlcyBUeXBlMSBhbmQg VHlwZTIgbXVzdCBiZSBzdWNoIHRoYXQgYW4gb2JqZWN0IG9mIHR5cGUgSW5w dXRJdCBjYW4gYmUgZGVyZWZlcmVuY2VkIGFuZCB0aGVuIGltcGxpY2l0bHkg Y29udmVydGVkIHRvIGJvdGggb2YgdGhlbQorICAgICAgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgVDE+CisgICAgICAgIG9wZXJhdG9yIE51bTxUMT4oKSBjb25z dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gTnVtPFQxPigoVDEp dmFsKTsKKyAgICAgICAgfQorCisgICAgICAgIGZyaWVuZCBib29sCisgICAg ICAgIG9wZXJhdG9yPT0oY29uc3QgTnVtJiB2MSwgY29uc3QgTnVtJiB2MikK KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHYxLnZhbCA9PSB2Mi52 YWw7CisgICAgICAgIH0KKyAgICB9OworCisgICAgdGVtcGxhdGUgPHR5cGVu YW1lIE9wZXJhdGlvbiwKKyAgICAgICAgICAgICAgdHlwZW5hbWUgVDEsIHR5 cGVuYW1lIFQyLCB0eXBlbmFtZSBDb21wYXJlPgorICAgIHZvaWQKKyAgICB0 ZXN0X3NldF9vcChDb21wYXJlIGNvbXBhcmUpCisgICAgeworICAgICAgICBj b25zdCBzdGQ6OnNpemVfdCBuX21heCA9IDEwMDAwMDsKKworICAgICAgICAv LyBUaGUgcmFuZCgpJSgyKm4rMSkgZW5jb3VyYWdlcyBnZW5lcmF0aW9uIG9m IHNvbWUgZHVwbGljYXRlcy4KKyAgICAgICAgc3RkOjpzcmFuZCg0MjAwKTsK KworICAgICAgICBmb3IgKHN0ZDo6c2l6ZV90IG4gPSAwOyBuIDwgbl9tYXg7 IG4gPSBuIDw9IDE2ID8gbiArIDEgOiBzaXplX3QoMy4xNDE1ICogbikpCisg ICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoc3RkOjpzaXplX3QgbSA9IDA7 IG0gPCBuX21heDsgbSA9IG0gPD0gMTYgPyBtICsgMSA6IHNpemVfdCgyLjcx ODI4ICogbSkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLy9w cmVwYXJlIHRoZSBpbnB1dCByYW5nZXMKKyAgICAgICAgICAgICAgICBTZXF1 ZW5jZTxUMT4gaW4xKG4sIFtdKHN0ZDo6c2l6ZV90IGspIHsgcmV0dXJuIHJh bmQoKSAlICgyICogayArIDEpOyB9KTsKKyAgICAgICAgICAgICAgICBTZXF1 ZW5jZTxUMj4gaW4yKG0sIFttXShzdGQ6OnNpemVfdCBrKSB7IHJldHVybiAo bSAlIDIpICogcmFuZCgpICsgcmFuZCgpICUgKGsgKyAxKTsgfSk7CisKKyAg ICAgICAgICAgICAgICBzdGQ6OnNvcnQoaW4xLmJlZ2luKCksIGluMS5lbmQo KSwgY29tcGFyZSk7CisgICAgICAgICAgICAgICAgc3RkOjpzb3J0KGluMi5i ZWdpbigpLCBpbjIuZW5kKCksIGNvbXBhcmUpOworCisgICAgICAgICAgICAg ICAgaW52b2tlX29uX2FsbF9wb2xpY2llcyhPcGVyYXRpb24oKSwgaW4xLmJl Z2luKCksIGluMS5lbmQoKSwgaW4yLmNiZWdpbigpLCBpbjIuY2VuZCgpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29t cGFyZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9IC8v IG5hbWVzcGFjZSBUZXN0VXRpbHMKKyNlbmRpZiAvLyBfX1BTVExfVEVTVF9T RVRfVVRJTF9ICi0tIAoyLjQwLjEKCg== --0000000000002b3d5005ff9c790a--