From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id DBE133858C74 for ; Thu, 8 Sep 2022 20:39:15 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org DBE133858C74 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.93,300,1654588800"; d="scan'208,223";a="82675765" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa4.mentor.iphmx.com with ESMTP; 08 Sep 2022 12:39:12 -0800 IronPort-SDR: ZRd3YKkrS4Pv0+CeOjiYEf1WOyFZ7mHF0lfge6Uk3MNdJ0ZN1sfrXTGIoEYsJynGAX+dtCl8uw ADYjwPBp5NyDh48AXzQyvm5GkZkEBxU8JUCpOjZNSO+JgHp5hCQMYWc9FvBz7nXLrPGg0RORfk HSBex8VYzMia1mWaYRuVlZGELno+Ev/8s//F1SY8qlho881AvNjBgVdElWPKUkCNR4Fj3Fl3gy lL8jZS0Or5j3xONYY/gjhgqjF/NqhOrSh9vUYdyKfRXAUeDfnkWoVS7WZr4kU2brqkLbEmh2m7 91s= Content-Type: multipart/mixed; boundary="------------UThsy7OtKdJ1IZKHrTodCrO0" Message-ID: Date: Thu, 8 Sep 2022 21:38:54 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.2.2 From: Kwok Cheung Yeung To: gcc-patches , Andrew Stubbs Subject: [PATCH] amdgcn: Add support for additional natively supported floating-point operations X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,SPF_HELO_PASS,SPF_PASS,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: --------------UThsy7OtKdJ1IZKHrTodCrO0 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit Hello This patch adds support for some additional floating-point operations, in scalar and vector modes, which are natively supported by the AMD GCN instruction set, but haven't been implemented in GCC yet. With the exception of frexp, these implement standard RTL names, and should be utilised automatically by GCC. The instructions for the transcendental functions are documented to have limited numerical precision, so they are only used if unsafe_math_optimizations are enabled for now. The sin and cos instructions for some reason are scaled by 2*PI radians (i.e. 1.0 == 2*PI radians/360 degrees), so their inputs need to be scaled by 1/(2*PI) first. I've implemented this as an expander to two instructions - one to do the pre-scaling, one to do the sin/cos. 1/(2*PI) is a builtin constant for GCN, but the syntax to use it in the LLVM assembler was wrong - now fixed. I have also added some extra GCN-specific builtins to access the vector versions of some of these operations (to implement vectorized versions of library math routines) and to access the frexp operations. Okay for trunk? Thanks Kwok --------------UThsy7OtKdJ1IZKHrTodCrO0 Content-Type: text/plain; charset="UTF-8"; name="0001-amdgcn-Add-support-for-additional-natively-supported.patch" Content-Disposition: attachment; filename*0="0001-amdgcn-Add-support-for-additional-natively-supported.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1NTkyYzQ1MTIyMTJiYTc0YTdhNjkwODIxNjUwZGRjYmEwNWRmODQ4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBLd29rIENoZXVuZyBZZXVuZyA8a2N5QGNvZGVzb3Vy Y2VyeS5jb20+CkRhdGU6IFRodSwgOCBTZXAgMjAyMiAxNzozNzoyNiArMDAwMApTdWJqZWN0 OiBbUEFUQ0hdIGFtZGdjbjogQWRkIHN1cHBvcnQgZm9yIGFkZGl0aW9uYWwgbmF0aXZlbHkg c3VwcG9ydGVkCiBmbG9hdGluZy1wb2ludCBvcGVyYXRpb25zCgpUaGlzIGFkZHMgc3VwcG9y dCBmb3IgdGhlIGZvbGxvd2luZyBuYXRpdmVseSBzdXBwb3J0ZWQgZmxvYXRpbmctcG9pbnQK b3BlcmF0aW9ucywgaW4gc2NhbGFyIGFuZCB2ZWN0b3JpemVkIG1vZGVzOgoKZmxvb3IsIGNl aWwsIGV4cDIqLCBsb2cyKiwgc2luKiwgY29zKiwgbGRleHAsIGZyZXhwCgoqIFRoZXNlIG9w ZXJhdGlvbnMgYXJlIHNpbmdsZS1wcmVjaXNpb24gZmxvYXQgb25seSBhbmQgYXJlIG9ubHkg YWN0aXZlCmlmIHVuc2FmZV9tYXRoX29wdGltaXphdGlvbnMgYXJlIGVuYWJsZWQgKGR1ZSB0 byBwb3RlbnRpYWwgbnVtZXJpY2FsCnByZWNpc2lvbiBpc3N1ZXMpLgoKMjAyMi0wOS0wOCAg S3dvayBDaGV1bmcgWWV1bmcgIDxrY3lAY29kZXNvdXJjZXJ5LmNvbT4KCglnY2MvCgkqIGNv bmZpZy9nY24vZ2NuLWJ1aWx0aW5zLmRlZiAoRkFCU1ZGLCBMREVYUFZGLCBMREVYUFYsIEZS RVhQVkZfRVhQLAoJRlJFWFBWRl9NQU5ULCBGUkVYUFZfRVhQLCBGUkVYUFZfTUFOVCk6IEFk ZCBuZXcgYnVpbHRpbnMuCgkqIGNvbmZpZy9nY24vZ2NuLXByb3Rvcy5oIChnY25fZGNvbnN0 MW92ZXIycGkpOiBOZXcgcHJvdG90eXBlLgoJKiBjb25maWcvZ2NuL2djbi12YWx1Lm1kIChN QVRIX1VOT1BfMU9SMlJFRywgTUFUSF9VTk9QXzFSRUcsCglNQVRIX1VOT1BfVFJJRyk6IE5l dyBpdGVyYXRvcnMuCgkobWF0aF91bm9wKTogTmV3IGF0dHJpYnV0ZXMuCgkoPG1hdGhfdW5v cD48bW9kZT4yLCA8bWF0aF91bm9wPjxtb2RlPjI8ZXhlYz4sCgk8bWF0aF91bm9wPjxtb2Rl PjIsIDxtYXRoX3Vub3A+PG1vZGU+MjxleGVjPiwKCTxtYXRoX3Vub3A+PG1vZGU+Ml9pbnNu LCA8bWF0aF91bm9wPjxtb2RlPjI8ZXhlYz5faW5zbiwKCWxkZXhwPG1vZGU+MywgbGRleHA8 bW9kZT4zPGV4ZWM+LAoJZnJleHA8bW9kZT5fZXhwMiwgZnJleHA8bW9kZT5fbWFudDIsCglm cmV4cDxtb2RlPl9leHAyPGV4ZWM+LCBmcmV4cDxtb2RlPl9tYW50MjxleGVjPik6IE5ldyBp bnN0cnVjdGlvbnMuCgkoPG1hdGhfdW5vcD48bW9kZT4yLCA8bWF0aF91bm9wPjxtb2RlPjI8 ZXhlYz4pOiBOZXcgZXhwYW5kZXJzLgoJKiBjb25maWcvZ2NuL2djbi5jYyAoaW5pdF9leHRf Z2NuX2NvbnN0YW50cyk6IFVwZGF0ZSBkZWZpbml0aW9uIG9mCglkY29uc3Qxb3ZlcjJwaS4K CShnY25fZGNvbnN0MW92ZXIycGkpOiBOZXcuCgkoZ2NuX2J1aWx0aW5fdHlwZV9pbmRleCk6 IEFkZCBlbnRyeSBmb3IgdjY0ZGYgdHlwZS4KCSh2NjRkZl90eXBlX25vZGUpOiBOZXcuCgko Z2NuX2luaXRfYnVpbHRpbl90eXBlcyk6IEluaXRpYWxpemUgdjY0ZGZfdHlwZV9ub2RlLgoJ KGdjbl9leHBhbmRfYnVpbHRpbl8xKTogRXhwYW5kIG5ldyBidWlsdGlucyB0byBpbnN0cnVj dGlvbnMuCgkocHJpbnRfb3BlcmFuZCk6IEZpeCBhc3NlbWJsZXIgb3V0cHV0IGZvciAxLygy KlBJKSBjb25zdGFudC4KCSogY29uZmlnL2djbi9nY24ubWQgKHVuc3BlYyk6IEFkZCBuZXcg ZW50cmllcy4KLS0tCiBnY2MvY29uZmlnL2djbi9nY24tYnVpbHRpbnMuZGVmIHwgIDM1ICsr KysrKwogZ2NjL2NvbmZpZy9nY24vZ2NuLXByb3Rvcy5oICAgICB8ICAgMSArCiBnY2MvY29u ZmlnL2djbi9nY24tdmFsdS5tZCAgICAgIHwgMTgxICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrCiBnY2MvY29uZmlnL2djbi9nY24uY2MgICAgICAgICAgIHwgMTE0ICsrKysr KysrKysrKysrKysrKystCiBnY2MvY29uZmlnL2djbi9nY24ubWQgICAgICAgICAgIHwgICA0 ICstCiA1IGZpbGVzIGNoYW5nZWQsIDMzMiBpbnNlcnRpb25zKCspLCAzIGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvZ2NuL2djbi1idWlsdGlucy5kZWYgYi9nY2Mv Y29uZmlnL2djbi9nY24tYnVpbHRpbnMuZGVmCmluZGV4IDU0ZTRlYTRlOTUzLi4yNzY5MTkw OTkyNSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9nY24vZ2NuLWJ1aWx0aW5zLmRlZgorKysg Yi9nY2MvY29uZmlnL2djbi9nY24tYnVpbHRpbnMuZGVmCkBAIC01OSw2ICs1OSw0MSBAQCBE RUZfQlVJTFRJTiAoU1FSVEYsIDMgLypDT0RFX0ZPUl9zcXJ0ZiAqLywKIAkgICAgIF9BMiAo R0NOX0JUSV9TRiwgR0NOX0JUSV9TRiksCiAJICAgICBnY25fZXhwYW5kX2J1aWx0aW5fMSkK IAorREVGX0JVSUxUSU4gKEZBQlNWRiwgMyAvKkNPREVfRk9SX2ZhYnN2ZiAqLywKKwkgICAg ICJmYWJzdmYiLCBCX0lOU04sCisJICAgICBfQTIgKEdDTl9CVElfVjY0U0YsIEdDTl9CVElf VjY0U0YpLAorCSAgICAgZ2NuX2V4cGFuZF9idWlsdGluXzEpCisKK0RFRl9CVUlMVElOIChM REVYUFZGLCAzIC8qQ09ERV9GT1JfbGRleHB2ZiAqLywKKwkgICAgICJsZGV4cHZmIiwgQl9J TlNOLAorCSAgICAgX0EzIChHQ05fQlRJX1Y2NFNGLCBHQ05fQlRJX1Y2NFNGLCBHQ05fQlRJ X1Y2NFNJKSwKKwkgICAgIGdjbl9leHBhbmRfYnVpbHRpbl8xKQorCitERUZfQlVJTFRJTiAo TERFWFBWLCAzIC8qQ09ERV9GT1JfbGRleHB2ICovLAorCSAgICAgImxkZXhwdiIsIEJfSU5T TiwKKwkgICAgIF9BMyAoR0NOX0JUSV9WNjRERiwgR0NOX0JUSV9WNjRERiwgR0NOX0JUSV9W NjRTSSksCisJICAgICBnY25fZXhwYW5kX2J1aWx0aW5fMSkKKworREVGX0JVSUxUSU4gKEZS RVhQVkZfRVhQLCAzIC8qQ09ERV9GT1JfZnJleHB2Zl9leHAgKi8sCisJICAgICAiZnJleHB2 Zl9leHAiLCBCX0lOU04sCisJICAgICBfQTIgKEdDTl9CVElfVjY0U0ksIEdDTl9CVElfVjY0 U0YpLAorCSAgICAgZ2NuX2V4cGFuZF9idWlsdGluXzEpCisKK0RFRl9CVUlMVElOIChGUkVY UFZGX01BTlQsIDMgLypDT0RFX0ZPUl9mcmV4cHZmX21hbnQgKi8sCisJICAgICAiZnJleHB2 Zl9tYW50IiwgQl9JTlNOLAorCSAgICAgX0EyIChHQ05fQlRJX1Y2NFNGLCBHQ05fQlRJX1Y2 NFNGKSwKKwkgICAgIGdjbl9leHBhbmRfYnVpbHRpbl8xKQorCitERUZfQlVJTFRJTiAoRlJF WFBWX0VYUCwgMyAvKkNPREVfRk9SX2ZyZXhwdl9leHAgKi8sCisJICAgICAiZnJleHB2X2V4 cCIsIEJfSU5TTiwKKwkgICAgIF9BMiAoR0NOX0JUSV9WNjRTSSwgR0NOX0JUSV9WNjRERiks CisJICAgICBnY25fZXhwYW5kX2J1aWx0aW5fMSkKKworREVGX0JVSUxUSU4gKEZSRVhQVl9N QU5ULCAzIC8qQ09ERV9GT1JfZnJleHB2X21hbnQgKi8sCisJICAgICAiZnJleHB2X21hbnQi LCBCX0lOU04sCisJICAgICBfQTIgKEdDTl9CVElfVjY0REYsIEdDTl9CVElfVjY0REYpLAor CSAgICAgZ2NuX2V4cGFuZF9idWlsdGluXzEpCisKIERFRl9CVUlMVElOIChDTVBfU1dBUCwg LTEsCiAJICAgICJjbXBfc3dhcCIsIEJfSU5TTiwKIAkgICAgX0E0IChHQ05fQlRJX1VJTlQs IEdDTl9CVElfVk9JRFBUUiwgR0NOX0JUSV9VSU5ULCBHQ05fQlRJX1VJTlQpLApkaWZmIC0t Z2l0IGEvZ2NjL2NvbmZpZy9nY24vZ2NuLXByb3Rvcy5oIGIvZ2NjL2NvbmZpZy9nY24vZ2Nu LXByb3Rvcy5oCmluZGV4IDM4MTk3YjkyOWZkLi5jYTgwNDYwOWMwOSAxMDA2NDQKLS0tIGEv Z2NjL2NvbmZpZy9nY24vZ2NuLXByb3Rvcy5oCisrKyBiL2djYy9jb25maWcvZ2NuL2djbi1w cm90b3MuaApAQCAtNTQsNiArNTQsNyBAQCBleHRlcm4gaW50IGdjbl9oYXJkX3JlZ25vX25y ZWdzIChpbnQgcmVnbm8sIG1hY2hpbmVfbW9kZSBtb2RlKTsKIGV4dGVybiB2b2lkIGdjbl9o c2FfZGVjbGFyZV9mdW5jdGlvbl9uYW1lIChGSUxFICpmaWxlLCBjb25zdCBjaGFyICpuYW1l LAogCQkJCQkgICB0cmVlIGRlY2wpOwogZXh0ZXJuIEhPU1RfV0lERV9JTlQgZ2NuX2luaXRp YWxfZWxpbWluYXRpb25fb2Zmc2V0IChpbnQsIGludCk7CitleHRlcm4gUkVBTF9WQUxVRV9U WVBFIGdjbl9kY29uc3Qxb3ZlcjJwaSAodm9pZCk7CiBleHRlcm4gYm9vbCBnY25faW5saW5l X2NvbnN0YW50NjRfcCAocnR4LCBib29sKTsKIGV4dGVybiBib29sIGdjbl9pbmxpbmVfY29u c3RhbnRfcCAocnR4KTsKIGV4dGVybiBpbnQgZ2NuX2lubGluZV9mcF9jb25zdGFudF9wIChy dHgsIGJvb2wpOwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9nY24vZ2NuLXZhbHUubWQgYi9n Y2MvY29uZmlnL2djbi9nY24tdmFsdS5tZAppbmRleCA4YzMzYWUwYzcxNy4uM2JmZGY4MjEz ZmMgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvZ2NuL2djbi12YWx1Lm1kCisrKyBiL2djYy9j b25maWcvZ2NuL2djbi12YWx1Lm1kCkBAIC0yMjkwLDYgKzIyOTAsMTg3IEBACiAgIFsoc2V0 X2F0dHIgInR5cGUiICJ2b3AxIikKICAgIChzZXRfYXR0ciAibGVuZ3RoIiAiOCIpXSkKIAor OyBUaGVzZSBGUCB1bm9wcyBoYXZlIGY2NCwgZjMyIGFuZCBmMTYgdmVyc2lvbnMuCisoZGVm aW5lX2ludF9pdGVyYXRvciBNQVRIX1VOT1BfMU9SMlJFRworICBbVU5TUEVDX0ZMT09SIFVO U1BFQ19DRUlMXSkKKworOyBUaGVzZSBGUCB1bm9wcyBvbmx5IGhhdmUgZjE2L2YzMiB2ZXJz aW9ucy4KKyhkZWZpbmVfaW50X2l0ZXJhdG9yIE1BVEhfVU5PUF8xUkVHCisgIFtVTlNQRUNf RVhQMiBVTlNQRUNfTE9HMl0pCisKKyhkZWZpbmVfaW50X2l0ZXJhdG9yIE1BVEhfVU5PUF9U UklHCisgIFtVTlNQRUNfU0lOIFVOU1BFQ19DT1NdKQorCisoZGVmaW5lX2ludF9hdHRyIG1h dGhfdW5vcAorICBbKFVOU1BFQ19GTE9PUiAiZmxvb3IiKQorICAgKFVOU1BFQ19DRUlMICJj ZWlsIikKKyAgIChVTlNQRUNfRVhQMiAiZXhwMiIpCisgICAoVU5TUEVDX0xPRzIgImxvZzIi KQorICAgKFVOU1BFQ19TSU4gInNpbiIpCisgICAoVU5TUEVDX0NPUyAiY29zIildKQorCiso ZGVmaW5lX2luc24gIjxtYXRoX3Vub3A+PG1vZGU+MiIKKyAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6RlAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICI9ICB2IikKKwkodW5zcGVjOkZQCisJICBb KG1hdGNoX29wZXJhbmQ6RlAgMSAiZ2NuX2FsdV9vcGVyYW5kIiAidlN2QiIpXQorCSAgTUFU SF9VTk9QXzFPUjJSRUcpKV0KKyAgIiIKKyAgInZfPG1hdGhfdW5vcD4laTBcdCUwLCAlMSIK KyAgWyhzZXRfYXR0ciAidHlwZSIgInZvcDEiKQorICAgKHNldF9hdHRyICJsZW5ndGgiICI4 IildKQorCisoZGVmaW5lX2luc24gIjxtYXRoX3Vub3A+PG1vZGU+MjxleGVjPiIKKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6Vl9GUCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgIj0gIHYiKQor CSh1bnNwZWM6Vl9GUAorCSAgWyhtYXRjaF9vcGVyYW5kOlZfRlAgMSAiZ2NuX2FsdV9vcGVy YW5kIiAidlN2QiIpXQorCSAgTUFUSF9VTk9QXzFPUjJSRUcpKV0KKyAgIiIKKyAgInZfPG1h dGhfdW5vcD4laTBcdCUwLCAlMSIKKyAgWyhzZXRfYXR0ciAidHlwZSIgInZvcDEiKQorICAg KHNldF9hdHRyICJsZW5ndGgiICI4IildKQorCisoZGVmaW5lX2luc24gIjxtYXRoX3Vub3A+ PG1vZGU+MiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6RlBfMVJFRyAwICJyZWdpc3Rlcl9v cGVyYW5kIiAgIj0gIHYiKQorCSh1bnNwZWM6RlBfMVJFRworCSAgWyhtYXRjaF9vcGVyYW5k OkZQXzFSRUcgMSAiZ2NuX2FsdV9vcGVyYW5kIiAidlN2QiIpXQorCSAgTUFUSF9VTk9QXzFS RUcpKV0KKyAgImZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9ucyIKKyAgInZfPG1hdGhf dW5vcD4laTBcdCUwLCAlMSIKKyAgWyhzZXRfYXR0ciAidHlwZSIgInZvcDEiKQorICAgKHNl dF9hdHRyICJsZW5ndGgiICI4IildKQorCisoZGVmaW5lX2luc24gIjxtYXRoX3Vub3A+PG1v ZGU+MjxleGVjPiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Vl9GUF8xUkVHIDAgInJlZ2lz dGVyX29wZXJhbmQiICAiPSAgdiIpCisJKHVuc3BlYzpWX0ZQXzFSRUcKKwkgIFsobWF0Y2hf b3BlcmFuZDpWX0ZQXzFSRUcgMSAiZ2NuX2FsdV9vcGVyYW5kIiAidlN2QiIpXQorCSAgTUFU SF9VTk9QXzFSRUcpKV0KKyAgImZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9ucyIKKyAg InZfPG1hdGhfdW5vcD4laTBcdCUwLCAlMSIKKyAgWyhzZXRfYXR0ciAidHlwZSIgInZvcDEi KQorICAgKHNldF9hdHRyICJsZW5ndGgiICI4IildKQorCisoZGVmaW5lX2luc24gIio8bWF0 aF91bm9wPjxtb2RlPjJfaW5zbiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6RlBfMVJFRyAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAgIj0gIHYiKQorCSh1bnNwZWM6RlBfMVJFRworCSAgWyht YXRjaF9vcGVyYW5kOkZQXzFSRUcgMSAiZ2NuX2FsdV9vcGVyYW5kIiAidlN2QiIpXQorCSAg TUFUSF9VTk9QX1RSSUcpKV0KKyAgImZsYWdfdW5zYWZlX21hdGhfb3B0aW1pemF0aW9ucyIK KyAgInZfPG1hdGhfdW5vcD4laTBcdCUwLCAlMSIKKyAgWyhzZXRfYXR0ciAidHlwZSIgInZv cDEiKQorICAgKHNldF9hdHRyICJsZW5ndGgiICI4IildKQorCisoZGVmaW5lX2luc24gIio8 bWF0aF91bm9wPjxtb2RlPjI8ZXhlYz5faW5zbiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 Vl9GUF8xUkVHIDAgInJlZ2lzdGVyX29wZXJhbmQiICAiPSAgdiIpCisJKHVuc3BlYzpWX0ZQ XzFSRUcKKwkgIFsobWF0Y2hfb3BlcmFuZDpWX0ZQXzFSRUcgMSAiZ2NuX2FsdV9vcGVyYW5k IiAidlN2QiIpXQorCSAgTUFUSF9VTk9QX1RSSUcpKV0KKyAgImZsYWdfdW5zYWZlX21hdGhf b3B0aW1pemF0aW9ucyIKKyAgInZfPG1hdGhfdW5vcD4laTBcdCUwLCAlMSIKKyAgWyhzZXRf YXR0ciAidHlwZSIgInZvcDEiKQorICAgKHNldF9hdHRyICJsZW5ndGgiICI4IildKQorCis7 IFRyaWdvbm9tZXRyaWMgZnVuY3Rpb25zIG5lZWQgdGhlaXIgaW5wdXQgc2NhbGVkIGJ5IDEv KDIqUEkpIGZpcnN0LgorCisoZGVmaW5lX2V4cGFuZCAiPG1hdGhfdW5vcD48bW9kZT4yIgor ICBbKHNldCAobWF0Y2hfZHVwIDIpCisJKG11bHQ6RlBfMVJFRworCSAgKG1hdGNoX2R1cCAz KQorCSAgKG1hdGNoX29wZXJhbmQ6RlBfMVJFRyAxICJnY25fYWx1X29wZXJhbmQiKSkpCisg ICAoc2V0IChtYXRjaF9vcGVyYW5kOkZQXzFSRUcgMCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJ KHVuc3BlYzpGUF8xUkVHCisJICBbKG1hdGNoX2R1cCAyKV0KKwkgIE1BVEhfVU5PUF9UUklH KSldCisgICJmbGFnX3Vuc2FmZV9tYXRoX29wdGltaXphdGlvbnMiCisgIHsKKyAgICBvcGVy YW5kc1syXSA9IGdlbl9yZWdfcnR4ICg8TU9ERT5tb2RlKTsKKyAgICBvcGVyYW5kc1szXSA9 IGNvbnN0X2RvdWJsZV9mcm9tX3JlYWxfdmFsdWUgKGdjbl9kY29uc3Qxb3ZlcjJwaSAoKSwK KwkJCQkJCTxNT0RFPm1vZGUpOworICB9KQorCisoZGVmaW5lX2V4cGFuZCAiPG1hdGhfdW5v cD48bW9kZT4yPGV4ZWM+IgorICBbKHNldCAobWF0Y2hfZHVwIDIpCisJKG11bHQ6Vl9GUF8x UkVHCisJICAobWF0Y2hfZHVwIDMpCisJICAobWF0Y2hfb3BlcmFuZDpWX0ZQXzFSRUcgMSAi Z2NuX2FsdV9vcGVyYW5kIikpKQorICAgKHNldCAobWF0Y2hfb3BlcmFuZDpWX0ZQXzFSRUcg MCAicmVnaXN0ZXJfb3BlcmFuZCIpCisJKHVuc3BlYzpWX0ZQXzFSRUcKKwkgIFsobWF0Y2hf ZHVwIDIpXQorCSAgTUFUSF9VTk9QX1RSSUcpKV0KKyAgImZsYWdfdW5zYWZlX21hdGhfb3B0 aW1pemF0aW9ucyIKKyAgeworICAgIG9wZXJhbmRzWzJdID0gZ2VuX3JlZ19ydHggKDxNT0RF Pm1vZGUpOworICAgIG9wZXJhbmRzWzNdID0KKwlnY25fdmVjX2NvbnN0YW50ICg8TU9ERT5t b2RlLAorCQkJICBjb25zdF9kb3VibGVfZnJvbV9yZWFsX3ZhbHVlIChnY25fZGNvbnN0MW92 ZXIycGkgKCksCisJCQkJCQkJPFNDQUxBUl9NT0RFPm1vZGUpKTsKKyAgfSkKKworOyBJbXBs ZW1lbnQgbGRleHAgcGF0dGVybgorCisoZGVmaW5lX2luc24gImxkZXhwPG1vZGU+MyIKKyAg WyhzZXQgKG1hdGNoX29wZXJhbmQ6RlAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICI9diIpCisJ KHVuc3BlYzpGUAorCSAgWyhtYXRjaF9vcGVyYW5kOkZQIDEgImdjbl9hbHVfb3BlcmFuZCIg InZCIikKKwkgICAobWF0Y2hfb3BlcmFuZDpTSSAyICJnY25fYWx1X29wZXJhbmQiICJ2U3ZB IildCisJICBVTlNQRUNfTERFWFApKV0KKyAgIiIKKyAgInZfbGRleHAlaTBcdCUwLCAlMSwg JTIiCisgIFsoc2V0X2F0dHIgInR5cGUiICJ2b3AzYSIpCisgICAoc2V0X2F0dHIgImxlbmd0 aCIgIjgiKV0pCisKKyhkZWZpbmVfaW5zbiAibGRleHA8bW9kZT4zPGV4ZWM+IgorICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpWX0ZQIDAgInJlZ2lzdGVyX29wZXJhbmQiICAiPXYiKQorCSh1 bnNwZWM6Vl9GUAorCSAgWyhtYXRjaF9vcGVyYW5kOlZfRlAgMSAiZ2NuX2FsdV9vcGVyYW5k IiAidkIiKQorCSAgIChtYXRjaF9vcGVyYW5kOlY2NFNJIDIgImdjbl9hbHVfb3BlcmFuZCIg InZTdkEiKV0KKwkgIFVOU1BFQ19MREVYUCkpXQorICAiIgorICAidl9sZGV4cCVpMFx0JTAs ICUxLCAlMiIKKyAgWyhzZXRfYXR0ciAidHlwZSIgInZvcDNhIikKKyAgIChzZXRfYXR0ciAi bGVuZ3RoIiAiOCIpXSkKKworOyBJbXBsZW1lbnQgZnJleHAgcGF0dGVybnMKKworKGRlZmlu ZV9pbnNuICJmcmV4cDxtb2RlPl9leHAyIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXYiKQorCSh1bnNwZWM6U0kKKwkgIFsobWF0Y2hfb3Bl cmFuZDpGUCAxICJnY25fYWx1X29wZXJhbmQiICJ2QiIpXQorCSAgVU5TUEVDX0ZSRVhQX0VY UCkpXQorICAiIgorICAidl9mcmV4cF9leHBfaTMyJWkxXHQlMCwgJTEiCisgIFsoc2V0X2F0 dHIgInR5cGUiICJ2b3AxIikKKyAgIChzZXRfYXR0ciAibGVuZ3RoIiAiOCIpXSkKKworKGRl ZmluZV9pbnNuICJmcmV4cDxtb2RlPl9tYW50MiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 RlAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj12IikKKwkodW5zcGVjOkZQCisJICBbKG1hdGNo X29wZXJhbmQ6RlAgMSAiZ2NuX2FsdV9vcGVyYW5kIiAidkIiKV0KKwkgIFVOU1BFQ19GUkVY UF9NQU5UKSldCisgICIiCisgICJ2X2ZyZXhwX21hbnQlaTFcdCUwLCAlMSIKKyAgWyhzZXRf YXR0ciAidHlwZSIgInZvcDEiKQorICAgKHNldF9hdHRyICJsZW5ndGgiICI4IildKQorCiso ZGVmaW5lX2luc24gImZyZXhwPG1vZGU+X2V4cDI8ZXhlYz4iCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOlY2NFNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9diIpCisJKHVuc3BlYzpWNjRT SQorCSAgWyhtYXRjaF9vcGVyYW5kOlZfRlAgMSAiZ2NuX2FsdV9vcGVyYW5kIiAidkIiKV0K KwkgIFVOU1BFQ19GUkVYUF9FWFApKV0KKyAgIiIKKyAgInZfZnJleHBfZXhwX2kzMiVpMVx0 JTAsICUxIgorICBbKHNldF9hdHRyICJ0eXBlIiAidm9wMSIpCisgICAoc2V0X2F0dHIgImxl bmd0aCIgIjgiKV0pCisKKyhkZWZpbmVfaW5zbiAiZnJleHA8bW9kZT5fbWFudDI8ZXhlYz4i CisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZfRlAgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj12 IikKKwkodW5zcGVjOlZfRlAKKwkgIFsobWF0Y2hfb3BlcmFuZDpWX0ZQIDEgImdjbl9hbHVf b3BlcmFuZCIgInZCIildCisJICBVTlNQRUNfRlJFWFBfTUFOVCkpXQorICAiIgorICAidl9m cmV4cF9tYW50JWkxXHQlMCwgJTEiCisgIFsoc2V0X2F0dHIgInR5cGUiICJ2b3AxIikKKyAg IChzZXRfYXR0ciAibGVuZ3RoIiAiOCIpXSkKKwogOzsgfX19CiA7OyB7e3sgRlAgZnVzZWQg bXVsdGlwbHkgYW5kIGFkZAogCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2djbi9nY24uY2Mg Yi9nY2MvY29uZmlnL2djbi9nY24uY2MKaW5kZXggODI2Njc1NTY1MTIuLmViODIyZTIwZGQx IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2djbi9nY24uY2MKKysrIGIvZ2NjL2NvbmZpZy9n Y24vZ2NuLmNjCkBAIC03NzksMTIgKzc3OSwyMCBAQCBpbml0X2V4dF9nY25fY29uc3RhbnRz ICh2b2lkKQogICAvKiBGSVhNRTogdGhpcyBjb25zdGFudCBwcm9iYWJseSBkb2VzIG5vdCBt YXRjaCB3aGF0IGhhcmR3YXJlIHJlYWxseSBsb2Fkcy4KICAgICAgUmVhbGl0eSBjaGVjayBp dCBldmVudHVhbGx5LiAgKi8KICAgcmVhbF9mcm9tX3N0cmluZyAoJmRjb25zdDFvdmVyMnBp LAotCQkgICAgIjAuMTU5MTU0OTQzMDkxODk1MzM1NzY2MzQyMzQ1NTk2ODg2NjgzOSIpOwor CQkgICAgIjAuMTU5MTU0OTQzMDkxODk1MzIiKTsKICAgcmVhbF9jb252ZXJ0ICgmZGNvbnN0 MW92ZXIycGksIFNGbW9kZSwgJmRjb25zdDFvdmVyMnBpKTsKIAogICBleHRfZ2NuX2NvbnN0 YW50c19pbml0ID0gMTsKIH0KIAorUkVBTF9WQUxVRV9UWVBFCitnY25fZGNvbnN0MW92ZXIy cGkgKHZvaWQpCit7CisgIGlmICghZXh0X2djbl9jb25zdGFudHNfaW5pdCkKKyAgICBpbml0 X2V4dF9nY25fY29uc3RhbnRzICgpOworICByZXR1cm4gZGNvbnN0MW92ZXIycGk7Cit9CisK IC8qIFJldHVybiBub24temVybyBpZiBYIGlzIGEgY29uc3RhbnQgdGhhdCBjYW4gYXBwZWFy IGFzIGFuIGlubGluZSBvcGVyYW5kLgogICAgVGhpcyBpcyAwLCAwLjUsIC0wLjUsIDEsIC0x LCAyLCAtMiwgNCwtNCwgMS8oMipwaSkKICAgIE9yIGEgdmVjdG9yIG9mIHRob3NlLgpAQCAt MzYwNSw2ICszNjEzLDcgQEAgZW51bSBnY25fYnVpbHRpbl90eXBlX2luZGV4CiAgIEdDTl9C VElfU0YsCiAgIEdDTl9CVElfVjY0U0ksCiAgIEdDTl9CVElfVjY0U0YsCisgIEdDTl9CVElf VjY0REYsCiAgIEdDTl9CVElfVjY0UFRSLAogICBHQ05fQlRJX1NJUFRSLAogICBHQ05fQlRJ X1NGUFRSLApAQCAtMzYyMSw2ICszNjMwLDcgQEAgc3RhdGljIEdUWSgoKSkgdHJlZSBnY25f YnVpbHRpbl90eXBlc1tHQ05fQlRJX01BWF07CiAjZGVmaW5lIHNmX3R5cGVfbm9kZSAoZ2Nu X2J1aWx0aW5fdHlwZXNbR0NOX0JUSV9TRl0pCiAjZGVmaW5lIHY2NHNpX3R5cGVfbm9kZSAo Z2NuX2J1aWx0aW5fdHlwZXNbR0NOX0JUSV9WNjRTSV0pCiAjZGVmaW5lIHY2NHNmX3R5cGVf bm9kZSAoZ2NuX2J1aWx0aW5fdHlwZXNbR0NOX0JUSV9WNjRTRl0pCisjZGVmaW5lIHY2NGRm X3R5cGVfbm9kZSAoZ2NuX2J1aWx0aW5fdHlwZXNbR0NOX0JUSV9WNjRERl0pCiAjZGVmaW5l IHY2NHB0cl90eXBlX25vZGUgKGdjbl9idWlsdGluX3R5cGVzW0dDTl9CVElfVjY0UFRSXSkK ICNkZWZpbmUgc2lwdHJfdHlwZV9ub2RlIChnY25fYnVpbHRpbl90eXBlc1tHQ05fQlRJX1NJ UFRSXSkKICNkZWZpbmUgc2ZwdHJfdHlwZV9ub2RlIChnY25fYnVpbHRpbl90eXBlc1tHQ05f QlRJX1NGUFRSXSkKQEAgLTM3MTAsNiArMzcyMCw3IEBAIGdjbl9pbml0X2J1aWx0aW5fdHlw ZXMgKHZvaWQpCiAgIHNmX3R5cGVfbm9kZSA9IGZsb2F0MzJfdHlwZV9ub2RlOwogICB2NjRz aV90eXBlX25vZGUgPSBidWlsZF92ZWN0b3JfdHlwZSAoaW50U0lfdHlwZV9ub2RlLCA2NCk7 CiAgIHY2NHNmX3R5cGVfbm9kZSA9IGJ1aWxkX3ZlY3Rvcl90eXBlIChmbG9hdF90eXBlX25v ZGUsIDY0KTsKKyAgdjY0ZGZfdHlwZV9ub2RlID0gYnVpbGRfdmVjdG9yX3R5cGUgKGRvdWJs ZV90eXBlX25vZGUsIDY0KTsKICAgdjY0cHRyX3R5cGVfbm9kZSA9IGJ1aWxkX3ZlY3Rvcl90 eXBlICh1bnNpZ25lZF9pbnRESV90eXBlX25vZGUKIAkJCQkJLypidWlsZF9wb2ludGVyX3R5 cGUKIAkJCQkJICAoaW50ZWdlcl90eXBlX25vZGUpICovCkBAIC0zOTc3LDYgKzM5ODgsMTA1 IEBAIGdjbl9leHBhbmRfYnVpbHRpbl8xICh0cmVlIGV4cCwgcnR4IHRhcmdldCwgcnR4IC8q c3VidGFyZ2V0ICovICwKIAllbWl0X2luc24gKGdlbl9zcXJ0c2YyICh0YXJnZXQsIGFyZykp OwogCXJldHVybiB0YXJnZXQ7CiAgICAgICB9CisgICAgY2FzZSBHQ05fQlVJTFRJTl9GQUJT VkY6CisgICAgICB7CisJaWYgKGlnbm9yZSkKKwkgIHJldHVybiB0YXJnZXQ7CisJcnR4IGV4 ZWMgPSBnY25fZnVsbF9leGVjX3JlZyAoKTsKKwlydHggYXJnID0gZm9yY2VfcmVnIChWNjRT Rm1vZGUsCisJCQkgICAgIGV4cGFuZF9leHByIChDQUxMX0VYUFJfQVJHIChleHAsIDApLCBO VUxMX1JUWCwKKwkJCQkJICBWNjRTRm1vZGUsCisJCQkJCSAgRVhQQU5EX05PUk1BTCkpOwor CWVtaXRfaW5zbiAoZ2VuX2Fic3Y2NHNmMl9leGVjCisJCSAgICh0YXJnZXQsIGFyZywgZ2Nu X2dlbl91bmRlZiAoVjY0U0Ztb2RlKSwgZXhlYykpOworCXJldHVybiB0YXJnZXQ7CisgICAg ICB9CisgICAgY2FzZSBHQ05fQlVJTFRJTl9MREVYUFZGOgorICAgICAgeworCWlmIChpZ25v cmUpCisJICByZXR1cm4gdGFyZ2V0OworCXJ0eCBleGVjID0gZ2NuX2Z1bGxfZXhlY19yZWcg KCk7CisJcnR4IGFyZzEgPSBmb3JjZV9yZWcgKFY2NFNGbW9kZSwKKwkJCSAgICAgIGV4cGFu ZF9leHByIChDQUxMX0VYUFJfQVJHIChleHAsIDApLCBOVUxMX1JUWCwKKwkJCQkJICAgVjY0 U0Ztb2RlLAorCQkJCQkgICBFWFBBTkRfTk9STUFMKSk7CisJcnR4IGFyZzIgPSBmb3JjZV9y ZWcgKFY2NFNJbW9kZSwKKwkJCSAgICAgIGV4cGFuZF9leHByIChDQUxMX0VYUFJfQVJHIChl eHAsIDEpLCBOVUxMX1JUWCwKKwkJCQkJICAgVjY0U0ltb2RlLAorCQkJCQkgICBFWFBBTkRf Tk9STUFMKSk7CisJZW1pdF9pbnNuIChnZW5fbGRleHB2NjRzZjNfZXhlYworCQkgICAodGFy Z2V0LCBhcmcxLCBhcmcyLCBnY25fZ2VuX3VuZGVmIChWNjRTRm1vZGUpLCBleGVjKSk7CisJ cmV0dXJuIHRhcmdldDsKKyAgICAgIH0KKyAgICBjYXNlIEdDTl9CVUlMVElOX0xERVhQVjoK KyAgICAgIHsKKwlpZiAoaWdub3JlKQorCSAgcmV0dXJuIHRhcmdldDsKKwlydHggZXhlYyA9 IGdjbl9mdWxsX2V4ZWNfcmVnICgpOworCXJ0eCBhcmcxID0gZm9yY2VfcmVnIChWNjRERm1v ZGUsCisJCQkgICAgICBleHBhbmRfZXhwciAoQ0FMTF9FWFBSX0FSRyAoZXhwLCAwKSwgTlVM TF9SVFgsCisJCQkJCSAgIFY2NFNGbW9kZSwKKwkJCQkJICAgRVhQQU5EX05PUk1BTCkpOwor CXJ0eCBhcmcyID0gZm9yY2VfcmVnIChWNjRTSW1vZGUsCisJCQkgICAgICBleHBhbmRfZXhw ciAoQ0FMTF9FWFBSX0FSRyAoZXhwLCAxKSwgTlVMTF9SVFgsCisJCQkJCSAgIFY2NFNJbW9k ZSwKKwkJCQkJICAgRVhQQU5EX05PUk1BTCkpOworCWVtaXRfaW5zbiAoZ2VuX2xkZXhwdjY0 ZGYzX2V4ZWMKKwkJICAgKHRhcmdldCwgYXJnMSwgYXJnMiwgZ2NuX2dlbl91bmRlZiAoVjY0 REZtb2RlKSwgZXhlYykpOworCXJldHVybiB0YXJnZXQ7CisgICAgICB9CisgICAgY2FzZSBH Q05fQlVJTFRJTl9GUkVYUFZGX0VYUDoKKyAgICAgIHsKKwlpZiAoaWdub3JlKQorCSAgcmV0 dXJuIHRhcmdldDsKKwlydHggZXhlYyA9IGdjbl9mdWxsX2V4ZWNfcmVnICgpOworCXJ0eCBh cmcgPSBmb3JjZV9yZWcgKFY2NFNGbW9kZSwKKwkJCSAgICAgZXhwYW5kX2V4cHIgKENBTExf RVhQUl9BUkcgKGV4cCwgMCksIE5VTExfUlRYLAorCQkJCQkgIFY2NFNGbW9kZSwKKwkJCQkJ ICBFWFBBTkRfTk9STUFMKSk7CisJZW1pdF9pbnNuIChnZW5fZnJleHB2NjRzZl9leHAyX2V4 ZWMKKwkJICAgKHRhcmdldCwgYXJnLCBnY25fZ2VuX3VuZGVmIChWNjRTSW1vZGUpLCBleGVj KSk7CisJcmV0dXJuIHRhcmdldDsKKyAgICAgIH0KKyAgICBjYXNlIEdDTl9CVUlMVElOX0ZS RVhQVkZfTUFOVDoKKyAgICAgIHsKKwlpZiAoaWdub3JlKQorCSAgcmV0dXJuIHRhcmdldDsK KwlydHggZXhlYyA9IGdjbl9mdWxsX2V4ZWNfcmVnICgpOworCXJ0eCBhcmcgPSBmb3JjZV9y ZWcgKFY2NFNGbW9kZSwKKwkJCSAgICAgZXhwYW5kX2V4cHIgKENBTExfRVhQUl9BUkcgKGV4 cCwgMCksIE5VTExfUlRYLAorCQkJCQkgIFY2NFNGbW9kZSwKKwkJCQkJICBFWFBBTkRfTk9S TUFMKSk7CisJZW1pdF9pbnNuIChnZW5fZnJleHB2NjRzZl9tYW50Ml9leGVjCisJCSAgICh0 YXJnZXQsIGFyZywgZ2NuX2dlbl91bmRlZiAoVjY0U0Ztb2RlKSwgZXhlYykpOworCXJldHVy biB0YXJnZXQ7CisgICAgICB9CisgICAgY2FzZSBHQ05fQlVJTFRJTl9GUkVYUFZfRVhQOgor ICAgICAgeworCWlmIChpZ25vcmUpCisJICByZXR1cm4gdGFyZ2V0OworCXJ0eCBleGVjID0g Z2NuX2Z1bGxfZXhlY19yZWcgKCk7CisJcnR4IGFyZyA9IGZvcmNlX3JlZyAoVjY0REZtb2Rl LAorCQkJICAgICBleHBhbmRfZXhwciAoQ0FMTF9FWFBSX0FSRyAoZXhwLCAwKSwgTlVMTF9S VFgsCisJCQkJCSAgVjY0REZtb2RlLAorCQkJCQkgIEVYUEFORF9OT1JNQUwpKTsKKwllbWl0 X2luc24gKGdlbl9mcmV4cHY2NGRmX2V4cDJfZXhlYworCQkgICAodGFyZ2V0LCBhcmcsIGdj bl9nZW5fdW5kZWYgKFY2NFNJbW9kZSksIGV4ZWMpKTsKKwlyZXR1cm4gdGFyZ2V0OworICAg ICAgfQorICAgIGNhc2UgR0NOX0JVSUxUSU5fRlJFWFBWX01BTlQ6CisgICAgICB7CisJaWYg KGlnbm9yZSkKKwkgIHJldHVybiB0YXJnZXQ7CisJcnR4IGV4ZWMgPSBnY25fZnVsbF9leGVj X3JlZyAoKTsKKwlydHggYXJnID0gZm9yY2VfcmVnIChWNjRERm1vZGUsCisJCQkgICAgIGV4 cGFuZF9leHByIChDQUxMX0VYUFJfQVJHIChleHAsIDApLCBOVUxMX1JUWCwKKwkJCQkJICBW NjRERm1vZGUsCisJCQkJCSAgRVhQQU5EX05PUk1BTCkpOworCWVtaXRfaW5zbiAoZ2VuX2Zy ZXhwdjY0ZGZfbWFudDJfZXhlYworCQkgICAodGFyZ2V0LCBhcmcsIGdjbl9nZW5fdW5kZWYg KFY2NERGbW9kZSksIGV4ZWMpKTsKKwlyZXR1cm4gdGFyZ2V0OworICAgICAgfQogICAgIGNh c2UgR0NOX0JVSUxUSU5fT01QX0RJTV9TSVpFOgogICAgICAgewogCWlmIChpZ25vcmUpCkBA IC02NDc2LDcgKzY1ODYsNyBAQCBwcmludF9vcGVyYW5kIChGSUxFICpmaWxlLCBydHggeCwg aW50IGNvZGUpCiAJICAgICAgc3RyID0gIi00LjAiOwogCSAgICAgIGJyZWFrOwogCSAgICBj YXNlIDI0ODoKLQkgICAgICBzdHIgPSAiMS9waSI7CisJICAgICAgc3RyID0gIjAuMTU5MTU0 OTQiOwogCSAgICAgIGJyZWFrOwogCSAgICBkZWZhdWx0OgogCSAgICAgIHJ0eCBpeCA9IHNp bXBsaWZ5X2dlbl9zdWJyZWcgKEdFVF9NT0RFICh4KSA9PSBERm1vZGUKZGlmZiAtLWdpdCBh L2djYy9jb25maWcvZ2NuL2djbi5tZCBiL2djYy9jb25maWcvZ2NuL2djbi5tZAppbmRleCA3 ODA1ZTg2NzkwMS4uYTNjOTUyM2NkNmQgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvZ2NuL2dj bi5tZAorKysgYi9nY2MvY29uZmlnL2djbi9nY24ubWQKQEAgLTgyLDcgKzgyLDkgQEAKICAg VU5TUEVDX0dBVEhFUgogICBVTlNQRUNfU0NBVFRFUgogICBVTlNQRUNfUkNQCi0gIFVOU1BF Q19GTEJJVF9JTlRdKQorICBVTlNQRUNfRkxCSVRfSU5UCisgIFVOU1BFQ19GTE9PUiBVTlNQ RUNfQ0VJTCBVTlNQRUNfU0lOIFVOU1BFQ19DT1MgVU5TUEVDX0VYUDIgVU5TUEVDX0xPRzIK KyAgVU5TUEVDX0xERVhQIFVOU1BFQ19GUkVYUF9FWFAgVU5TUEVDX0ZSRVhQX01BTlRdKQog CiA7OyB9fX0KIDs7IHt7eyBBdHRyaWJ1dGVzCi0tIAoyLjMwLjAuMzM1LmdlNjM2MjgyCgo= --------------UThsy7OtKdJ1IZKHrTodCrO0--