From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS4713 221.184.0.0/13 X-Spam-Status: No, score=-3.5 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, T_SCC_BODY_TEXT_LINE,T_SPF_PERMERROR,UNPARSEABLE_RELAY,URIBL_GREY shortcircuit=no autolearn=no autolearn_force=no version=3.4.2 Received: from neon.ruby-lang.org (neon.ruby-lang.org [221.186.184.75]) by dcvr.yhbt.net (Postfix) with ESMTP id 3507A1F54E for ; Wed, 17 Aug 2022 18:05:40 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=sendgrid.me header.i=@sendgrid.me header.b="mKwL1Jkz"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 54681120E73; Thu, 18 Aug 2022 03:05:39 +0900 (JST) Received: from xtrwkhkc.outbound-mail.sendgrid.net (xtrwkhkc.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 31224120E5E for ; Thu, 18 Aug 2022 03:05:37 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sendgrid.me; h=from:references:subject:mime-version:content-type: content-transfer-encoding:list-id:to:cc; s=smtpapi; bh=TxsOqw3O1jDl0ULCIEAUHxBeVnLmmFnN+AB81nMjjUc=; b=mKwL1Jkz9fW4rF1hGWeGjtBbaLByTXYsfr1zlRopruFU5VXw/H2txgUJLOv4Z5VEY1Ou /V13jQ90hlTvmxg4K7FwekXA1hq0QCoV8Sf9P8mTfEeRFea2TfD+4Nx8VhaGLPe3oehufH kWJw6Y4iFLnXxvXlVgGfl88qjl2kJ2FVM= Received: by filterdrecv-66b95c5ffd-4bwhz with SMTP id filterdrecv-66b95c5ffd-4bwhz-1-62FD2DEE-76 2022-08-17 18:05:34.585705275 +0000 UTC m=+2325642.818419556 Received: from herokuapp.com (unknown) by geopod-ismtpd-6-6 (SG) with ESMTP id TQH8GMG9QoWlrF84TAOYTA for ; Wed, 17 Aug 2022 18:05:34.462 +0000 (UTC) Date: Wed, 17 Aug 2022 18:05:34 +0000 (UTC) From: "maximecb (Maxime Chevalier-Boisvert)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 18776 X-Redmine-Issue-Author: jemmai X-Redmine-Sender: maximecb X-Mailer: Redmine X-Redmine-Host: bugs.ruby-lang.org X-Redmine-Site: Ruby Issue Tracking System X-Auto-Response-Suppress: All Auto-Submitted: auto-generated X-Redmine-MailingListIntegration-Message-Ids: 85926 X-SG-EID: =?us-ascii?Q?zIopk+GYrfxaFZKR2ztRFb8ZuWMKjJeXK89gL2DuKjDTCcLghUd1QuIXZZobz3?= =?us-ascii?Q?Z1at4TymivivM=2FBXJOZa0t64dFZwPq5ijbJTlRa?= =?us-ascii?Q?mYCMySNIT+jWA9Yfi7qYqd8+dBxAsVZdnI7enHa?= =?us-ascii?Q?koFvbN512a0DFF6QOkdIctNVg4nx5qjimYvlInp?= =?us-ascii?Q?uvzuej6WIFVbmJ2atTZaDcm8ugskfBGtPnOjDCT?= =?us-ascii?Q?W1WrCRdjZZpcxmsgy9UZDNRMWkcKWr+51PcaEu0?= =?us-ascii?Q?Ov436C+H08Bp1awts7UgP4Kb3AB=2FWXY2AXLhN4V?= =?us-ascii?Q?GVA=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 109518 Subject: [ruby-core:109518] [Ruby master Feature#18776] Object Shapes X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Reply-To: Ruby developers Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbWF4aW1lY2IgKE1heGltZSBDaGV2YWxp ZXItQm9pc3ZlcnQpLgoKCj4gVGhlc2UgYXJlIG91ciBwcm9wb3NlZCBjb2RlIGNoYW5nZXMgdG8g aW1wbGVtZW50IE9iamVjdCBTaGFwZXMgaW4gQ1J1YnkuCgpJIHRoaW5rIGl0IHdvdWxkIGJlIGEg Z29vZCBpZGVhIHRvIG9wZW4gYSBkcmFmdCBwdWxsIHJlcXVlc3Qgc28gdGhhdCBpdCdzIGVhc2ll ciB0byBsb29rIGF0IHRoZSBkaWZmIGFuZCBjb21tZW50IG9uIGl0LgoKPiBXZSBhbHNvIHJhbiBZ SklULWJlbmNoIGFuZCBnb3QgdGhlIGZvbGxvd2luZyByZXN1bHRzOgoKQ2FuIHlvdSBndXlzIGlu dmVzdGlnYXRlIGEgYml0IHdoeSB0aGVyZSBhcmUgbGFyZ2Ugc2xvd2Rvd25zIHdpdGggWUpJVD8K CkkgYmVsaWV2ZSB5b3Ugc2FpZCB5b3UgaGFkIHdyaXR0ZW4gY29kZSB0byBtYWtlIHVzZSBvZiBv YmplY3Qgc2hhcGVzIGluIFlKSVQuIEkgd291bGQgaGF2ZSBleHBlY3RlZCB0aGUgcGVyZm9ybWFu Y2UgZGlmZmVyZW5jZSB0byBiZSBzbWFsbC4gU2luY2UgaXQncyBzbyBiaWcsCkkgc3VzcGVjdCB0 aGF0IG1heWJlIHRoZXJlIGFyZSBhIGxhcmdlIG51bWJlciBvZiBzaWRlLWV4aXRzIGhhcHBlbmlu Zywgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC4KCldlIGNvdWxkIHBhaXIgb3ZlciBpdCB0b21vcnJv dyBpZiB0aGF0J3MgaGVscGZ1bC4gSXQncyBwcm9iYWJseSBub3QgZGlmZmljdWx0IHRvIGZpeC4K Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KRmVhdHVyZSAjMTg3NzY6 IE9iamVjdCBTaGFwZXMKaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE4Nzc2I2No YW5nZS05ODY4NwoKKiBBdXRob3I6IGplbW1haSAoSmVtbWEgSXNzcm9mZikKKiBTdGF0dXM6IE9w ZW4KKiBQcmlvcml0eTogTm9ybWFsCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KIyBPYmplY3QgU2hhcGVzIGltcGxlbWVudGF0aW9uCgpBYXJvbiBQYXR0ZXJzb24sIEVp bGVlbiBVY2hpdGVsbGUgYW5kIEkgaGF2ZSBiZWVuIHdvcmtpbmcgb24gYW4gaW1wbGVtZW50YXRp b24gb2YgT2JqZWN0IFNoYXBlcyBmb3IgUnVieS4gIFdlIGFyZSBmaWxpbmcgYSB0aWNrZXQgdG8g c2hhcmUgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5nLCBhcyB3ZWxsIGFzIGdldCBmZWVkYmFjayBvbiB0 aGUgcHJvamVjdCBpbiBpdHMgY3VycmVudCBzdGF0ZS4KCldlIGhvcGUgdG8gZXZlbnR1YWxseSBz dWJtaXQgdGhlIGZpbmFsaXplZCBwcm9qZWN0IHVwc3RyZWFtIGFmdGVyIHZlcmlmeWluZyBlZmZp Y2FjeS4KCiMjIFdoYXQgYXJlIE9iamVjdCBTaGFwZXM/CgpPYmplY3Qgc2hhcGVzIGFyZSBhIHRl Y2huaXF1ZSBmb3IgcmVwcmVzZW50aW5nIHByb3BlcnRpZXMgb2YgYW4gb2JqZWN0LiBPdGhlciBs YW5ndWFnZSBpbXBsZW1lbnRhdGlvbnMsIGluY2x1ZGluZyBbVHJ1ZmZsZVJ1YnldKGh0dHBzOi8v Z2l0aHViLmNvbS9vcmFjbGUvdHJ1ZmZsZXJ1YnkpIGFuZCBbVjhdKGh0dHBzOi8vdjguZGV2Lyks IHVzZSB0aGlzIHRlY2huaXF1ZS4gQ2hyaXMgU2VhdG9uLCB0aGUgY3JlYXRvciBvZiBUcnVmZmxl UnVieSwgZGlzY3Vzc2VkIG9iamVjdCBzaGFwZXMgaW4gaGlzIFtSdWJ5S2FpZ2kgMjAyMSBLZXlu b3RlXShodHRwczovL3J1YnlrYWlnaS5vcmcvMjAyMS10YWtlb3V0L3ByZXNlbnRhdGlvbnMvY2hy aXNnc2VhdG9uLmh0bWwpIGFuZCBNYXhpbWUgQ2hldmFsaWVyLUJvaXN2ZXJ0IGRpc2N1c3NlZCB0 aGUgaW1wbGljYXRpb25zIGZvciBZSklUIGluIHRoZSBsYXR0ZXIgcGFydCBvZiBbaGVyIHRhbGsg YXQgUnVieUthaWdpIDIwMjFdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dhdGNoP3Y9UEJWTGYz eWZNczgmdD0xMTAwcykuIFRoZSBvcmlnaW5hbCBpZGVhIG9mIG9iamVjdCBzaGFwZXMgW29yaWdp bmF0ZXMgZnJvbSB0aGUgU2VsZiBsYW5ndWFnZV0oaHR0cHM6Ly9iaWJsaW9ncmFwaHkuc2VsZmxh bmd1YWdlLm9yZy9fc3RhdGljL2ltcGxlbWVudGF0aW9uLnBkZiksIHdoaWNoIGlzIGNvbnNpZGVy ZWQgYSBkaXJlY3QgZGVzY2VuZGFudCBvZiBTbWFsbHRhbGsuCgpFYWNoIHNoYXBlIHJlcHJlc2Vu dHMgYSBzcGVjaWZpYyBzZXQgb2YgYXR0cmlidXRlcyAoaW5zdGFuY2UgdmFyaWFibGVzIGFuZCBv dGhlciBwcm9wZXJ0aWVzKSBhbmQgdGhlaXIgdmFsdWVzLiBJbiBvdXIgaW1wbGVtZW50YXRpb24s IGFsbCBvYmplY3RzIGhhdmUgYSBzaGFwZS4gVGhlIHNoYXBlcyBhcmUgbm9kZXMgaW4gYSB0cmVl IGRhdGEgc3RydWN0dXJlLiBFdmVyeSBlZGdlIGluIHRoZSB0cmVlIHJlcHJlc2VudHMgYW4gYXR0 cmlidXRlIHRyYW5zaXRpb24uCgpNb3JlIHNwZWNpZmljYWxseSwgc2V0dGluZyBhbiBpbnN0YW5j ZSB2YXJpYWJsZSBvbiBhbiBpbnN0YW5jZSBvZiBhbiBvYmplY3QgY3JlYXRlcyBhbiBvdXRnb2lu ZyBlZGdlIGZyb20gdGhlIGluc3RhbmNlJ3MgY3VycmVudCBzaGFwZS4gVGhpcyBpcyBhIHRyYW5z aXRpb24gZnJvbSBvbmUgc2hhcGUgdG8gYW5vdGhlci4gVGhlIGVkZ2UgcmVwcmVzZW50cyB0aGUg aW5zdGFuY2UgdmFyaWFibGUgdGhhdCBpcyBzZXQuCgpGb3IgZXhhbXBsZToKCmBgYHJ1YnkKY2xh c3MgRm9vCiAgZGVmIGluaXRpYWxpemUKICAgICMgQ3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMg dGhlIHJvb3Qgc2hhcGUgKElEIDApCiAgICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBz aGFwZSB2aWEgZWRnZSBAYSAoSUQgMSkKICAgIEBiID0gMiAjIFRyYW5zaXRpb25zIHRvIGEgbmV3 IHNoYXBlIHZpYSBlZGdlIEBiIChJRCAyKQogIGVuZAplbmQKCmZvbyA9IEZvby5uZXcKYGBgCgpX aGVuIGBGb29gIGlzIGludGlhbGl6ZWQsIGl0cyBzaGFwZSBpcyB0aGUgcm9vdCBzaGFwZSB3aXRo IElEIDAuICBUaGUgcm9vdCBzaGFwZSByZXByZXNlbnRzIGFuIGVtcHR5IG9iamVjdCB3aXRoIG5v IGluc3RhbmNlIHZhcmlhYmxlcy4gRWFjaCB0aW1lIGFuIGluc3RhbmNlIHZhcmlhYmxlIGlzIHNl dCBvbiBgZm9vYCwgdGhlIHNoYXBlIG9mIHRoZSBpbnN0YW5jZSBjaGFuZ2VzLiBJdCBmaXJzdCB0 cmFuc2l0aW9ucyB3aXRoIGBAYWAgdG8gYSBzaGFwZSB3aXRoIElEIDEsIGFuZCB0aGVuIHRyYW5z aXRpb25zIHdpdGggYEBiYCB0byBhIHNoYXBlIHdpdGggSUQgMi4gSWYgYEBhYCBpcyB0aGVuIHNl dCB0byBhIGRpZmZlcmVudCB2YWx1ZSwgaXRzIHNoYXBlIHdpbGwgcmVtYWluIHRoZSBzaGFwZSB3 aXRoIElEIDIsIHNpbmNlIHRoaXMgc2hhcGUgYWxyZWFkeSBpbmNsdWRlcyB0aGUgaW5zdGFuY2Ug dmFyaWFibGUgYEBhYC4gIAoKIVtdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRl bnQuY29tLzE5ODg1NjAvMTY3OTE4MzYwLTBhNmM5MWFhLTI1ODctNDhjYi04ZmYyLTdmM2E5NTgz Mjg4ZS5zdmcpCgpUaGVyZSBpcyBvbmUgZ2xvYmFsIHNoYXBlIHRyZWUgYW5kIG9iamVjdHMgd2hp Y2ggdW5kZXJnbyB0aGUgc2FtZSBzaGFwZSB0cmFuc2l0aW9ucyBpbiB0aGUgc2FtZSBvcmRlciB3 aWxsIGVuZCB1cCB3aXRoIHRoZSBzYW1lIGZpbmFsIHNoYXBlLgoKRm9yIGluc3RhbmNlLCBpZiB3 ZSBoYXZlIGEgY2xhc3MgYEJhcmAgZGVmaW5lZCBhcyBmb2xsb3dzLCB0aGUgZmlyc3QgdHJhbnNp dGlvbiBvbiBgQmFyLm5ld2AgdGhyb3VnaCB0aGUgaW5zdGFuY2UgdmFyaWFibGUgYEBhYCB3aWxs IGJlIHRoZSBzYW1lIGFzIGBGb28ubmV3YCdzIGZpcnN0IHRyYW5zaXRpb246CgpgYGBydWJ5CmNs YXNzIEZvbwogIGRlZiBpbml0aWFsaXplCiAgICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlz IHRoZSByb290IHNoYXBlIChJRCAwKQogICAgQGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcg c2hhcGUgdmlhIGVkZ2UgQGEgKElEIDEpCiAgICBAYiA9IDIgIyBUcmFuc2l0aW9ucyB0byBhIG5l dyBzaGFwZSB2aWEgZWRnZSBAYiAoSUQgMikKICBlbmQKZW5kCgpjbGFzcyBCYXIKICBkZWYgaW5p dGlhbGl6ZQogICAgIyBDdXJyZW50bHkgdGhpcyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAo SUQgMCkKICAgIEBhID0gMSAjIFRyYW5zaXRpb25zIHRvIHNoYXBlIGRlZmluZWQgZWFybGllciB2 aWEgZWRnZSBAYSAoSUQgMSkKICAgIEBjID0gMSAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBl IHZpYSBlZGdlIEBjIChJRCAzKQogICAgQGIgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hh cGUgdmlhIGVkZ2UgQGIgKElEIDQpCiAgZW5kCmVuZAoKZm9vID0gRm9vLm5ldyAjIGJsdWUgaW4g dGhlIGRpYWdyYW0KYmFyID0gQmFyLm5ldyAjIHJlZCBpbiB0aGUgZGlhZ3JhbQpgYGAKCkluIHRo ZSBkaWFncmFtIGJlbG93LCBwdXJwbGUgcmVwcmVzZW50cyBzaGFyZWQgdHJhbnNpdGlvbnMsIGJs dWUgcmVwcmVzZW50cyB0cmFuc2l0aW9ucyBmb3Igb25seSBgZm9vYCwgYW5kIHJlZCByZXByZXNl bnRzIHRyYW5zaXRpb25zIGZvciBvbmx5IGBiYXJgLgoKIVtdKGh0dHBzOi8vdXNlci1pbWFnZXMu Z2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3OTE4ODk5LWYxYTZmMzQ0LWFlNWUtNGRj MC1iMTdhLWZiMTU2ZDFkNTUwZi5zdmcpCgojIyMgQ2FjaGUgc3RydWN0dXJlCgpGb3IgaW5zdGFu Y2UgdmFyaWFibGUgd3JpdGVycywgdGhlIGN1cnJlbnQgc2hhcGUgSUQsIHRoZSBzaGFwZSBJRCB0 aGF0IGl2YXIgd3JpdGUgd291bGQgdHJhbnNpdGlvbiB0byBhbmQgaW5zdGFuY2UgdmFyaWFibGUg aW5kZXggYXJlIGFsbCBzdG9yZWQgaW4gdGhlIGlubGluZSBjYWNoZS4gVGhlIHNoYXBlIElEIGlz IHRoZSBrZXkgdG8gdGhlIGNhY2hlLgoKRm9yIGluc3RhbmNlIHZhcmlhYmxlIHJlYWRlcnMsIHRo ZSBzaGFwZSBJRCBhbmQgaW5zdGFuY2UgdmFyaWFibGUgaW5kZXggYXJlIHN0b3JlZCBpbiB0aGUg aW5saW5lIGNhY2hlLiAgQWdhaW4sIHRoZSBzaGFwZSBJRCBpcyB0aGUgY2FjaGUga2V5LgoKYGBg cnVieQpjbGFzcyBGb28KICBkZWYgaW5pdGlhbGl6ZQogICAgQGEgPSAxICMgSUMgc2hhcGVfaWQ6 IDAsIG5leHQgc2hhcGU6IDEsIGl2IGluZGV4IDAKICAgIEBiID0gMSAjIElDIHNoYXBlX2lkOiAx LCBuZXh0IHNoYXBlOiAyLCBpdiBpbmRleCAxCiAgZW5kCiAgICAKICBkZWYgYQogICAgQGEgIyBJ QyBzaGFwZV9pZDogMiwgaXYgaW5kZXggMAogIGVuZAplbmQKYGBgCgojIyBSYXRpb25hbGUKCldl IHRoaW5rIHRoYXQgYW4gb2JqZWN0IHNoYXBlIGltcGxlbWVudGF0aW9uIHdpbGwgc2ltcGxpZnkg Y2FjaGUgY2hlY2tzLCBpbmNyZWFzZSBpbmxpbmUgY2FjaGUgaGl0cywgZGVjcmVhc2UgcnVudGlt ZSBjaGVja3MsIGFuZCBlbmFibGUgb3RoZXIgcG90ZW50aWFsIGZ1dHVyZSBvcHRpbWl6YXRpb25z LiBUaGVzZSBhcmUgYWxsIGV4cGxhaW5lZCBiZWxvdy4gCgojIyMgU2ltcGxpZnkgY2FjaGluZwoK VGhlIGN1cnJlbnQgY2FjaGUgaW1wbGVtZW50YXRpb24gZGVwZW5kcyBvbiB0aGUgY2xhc3Mgb2Yg dGhlIHJlY2VpdmVyLiBTaW5jZSB0aGUgYWRkcmVzcyBvZiB0aGUgY2xhc3MgY2FuIGJlIHJldXNl ZCwgdGhlIGN1cnJlbnQgY2FjaGUgaW1wbGVtZW50YXRpb24gYWxzbyBkZXBlbmRzIG9uIGFuIGlu Y3JlbWVudGluZyBzZXJpYWwgbnVtYmVyIHNldCBvbiB0aGUgY2xhc3MgKHRoZSBjbGFzcyBzZXJp YWwpLiAgVGhlIHNoYXBlIGltcGxlbWVudGF0aW9uIGhhcyBubyBzdWNoIGRlcGVuZGVuY3kuIEl0 IG9ubHkgcmVxdWlyZXMgY2hlY2tpbmcgdGhlIHNoYXBlIElEIHRvIGRldGVybWluZSBpZiB0aGUg Y2FjaGUgaXMgdmFsaWQuCgojIyMgQ2FjaGUgaGl0cwoKT2JqZWN0cyB0aGF0IHNldCBwcm9wZXJ0 aWVzIGluIHRoZSBzYW1lIG9yZGVyIGNhbiBzaGFyZSBzaGFwZXMuICBGb3IgZXhhbXBsZToKCmBg YHJ1YnkKY2xhc3MgSG9nZQogIGRlZiBpbml0aWFsaXplCiAgICAjIEN1cnJlbnRseSB0aGlzIGlu c3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAgQGEgPSAxICMgVHJhbnNpdGlvbnMg dG8gdGhlIG5leHQgc2hhcGUgdmlhIGVkZ2UgbmFtZWQgQGEKICAgIEBiID0gMiAjIFRyYW5zaXRp b25zIHRvIG5leHQgc2hhcGUgdmlhIGVkZ2UgbmFtZWQgQGIKICBlbmQKZW5kCgpjbGFzcyBGdWdh IDwgSG9nZTsgZW5kCgpob2dlID0gSG9nZS5uZXcKZnVnYSA9IEZ1Z2EubmV3CmBgYAoKSW4gdGhl IGFib3ZlIGV4YW1wbGUsIHRoZSBpbnN0YW5jZXMgYGhvZ2VgIGFuZCBgZnVnYWAgd2lsbCBzaGFy ZSB0aGUgc2FtZSBzaGFwZSBJRC4gIFRoaXMgbWVhbnMgaW5saW5lIGNhY2hlcyBpbiBgaW5pdGlh bGl6ZWAgd2lsbCBoaXQgaW4gYm90aCBjYXNlcy4gIFRoaXMgY29udHJhc3RzIHdpdGggdGhlIGN1 cnJlbnQgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIHRoZSBjbGFzcyBhcyB0aGUgY2FjaGUga2V5 LiAgSW4gb3RoZXIgd29yZHMsIHdpdGggb2JqZWN0IHNoYXBlcyB0aGUgYWJvdmUgY29kZSB3aWxs IGhpdCBpbmxpbmUgY2FjaGVzIHdoZXJlIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIHdpbGwg bWlzcy4KCklmIHBlcmZvcm1hbmNlIHRlc3RpbmcgcmV2ZWFscyB0aGF0IGNhY2hlIGhpdHMgYXJl ICpub3QqIHN1YnN0YW50aWFsbHkgaW1wcm92ZWQsIHRoZW4gd2UgY2FuIHVzZSBzaGFwZXMgdG8g cmVjbGFpbSBtZW1vcnkgZnJvbSBgUkJhc2ljYC4gV2UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSBl bmNvZGluZyB0aGUgY2xhc3Mgd2l0aGluIHRoZSBzaGFwZSB0cmVlLiBUaGlzIHdpbGwgaGF2ZSBh biBlcXVpdmFsZW50IGNhY2hlIGhpdCByYXRlIHRvIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u LiBPbmNlIHRoZSBjbGFzcyBpcyBlbmNvZGVkIHdpdGhpbiB0aGUgc2hhcGUgdHJlZSwgd2UgY2Fu IHJlbW92ZSB0aGUgY2xhc3MgcG9pbnRlciBmcm9tIGBSQmFzaWNgIGFuZCBlaXRoZXIgcmVjbGFp bSB0aGF0IG1lbW9yeSBvciBmcmVlIGl0IGZvciBhbm90aGVyIHVzZS4KCiMjIyBEZWNyZWFzZXMg cnVudGltZSBjaGVja2luZwoKV2UgY2FuIGVuY29kZSBhdHRyaWJ1dGVzIHRoYXQgYXJlbid0IGlu c3RhbmNlIHZhcmlhYmxlcyBpbnRvIGFuIG9iamVjdCdzIHNoYXBlLiBDdXJyZW50bHksIHdlIGFs c28gaW5jbHVkZSBmcm96ZW4gd2l0aGluIHRoZSBzaGFwZS4gVGhpcyBtZWFucyB3ZSBjYW4gbGlt aXQgZnJvemVuIGNoZWNrcyB0byBvbmx5IGNhY2hlIG1pc3Nlcy4KCkZvciBleGFtcGxlLCB0aGUg Zm9sbG93aW5nIGNvZGU6CgpgYGBydWJ5CmNsYXNzIFRvdG8KICBkZWYgc2V0X2EKICAgIEBhID0g MSAjIGNhY2hlOiBzaGFwZTogMCwgbmV4dCBzaGFwZTogMSwgSVYgaWR4OiAwCiAgZW5kCmVuZAoK dG90byA9IFRvdG8ubmV3ICMgc2hhcGUgMAp0b3RvLnNldF9hICAgICAjIHNoYXBlIDEKCnRvdG8g PSBUb3RvLm5ldyAjIHNoYXBlIDAKdG90by5mcmVlemUgICAgIyBzaGFwZSAyCnRvdG8uc2V0X2Eg ICAgICMgQ2FjaGUgbWlzcywgRXhjZXB0aW9uIQpgYGAKCiFbXShodHRwczovL3VzZXItaW1hZ2Vz LmdpdGh1YnVzZXJjb250ZW50LmNvbS8xOTg4NTYwLzE2NzkyMDAwMS1jNGU2MzI2Yi0zYTNjLTQ4 M2ItYTc5Ny05ZTAyMzE3NjQ3ZDcuc3ZnKQoKV2l0aG91dCBzaGFwZXMsIGFsbCBpbnN0YW5jZSB2 YXJpYWJsZSBzZXRzIHJlcXVpcmUgY2hlY2tpbmcgdGhlIGZyb3plbiBzdGF0dXMgb2YgdGhlIG9i amVjdC4gV2l0aCBzaGFwZXMsIHdlIG9ubHkgbmVlZCB0byBjaGVjayB0aGUgZnJvemVuIHN0YXR1 cyBvbiBjYWNoZSBtaXNzZXMuCgpXZSBjYW4gYWxzbyBlbGltaW5hdGUgZW1iZWRkZWQgYW5kIGV4 dGVuZGVkIGNoZWNrcyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24gb2Ygb2JqZWN0IHNoYXBlcy4gQW55 IHBhcnRpY3VsYXIgc2hhcGUgcmVwcmVzZW50cyBhbiBvYmplY3QgdGhhdCBpcyBfZWl0aGVyXyBl eHRlbmRlZCBvciBlbWJlZGRlZC4gSklUcyBjYW4gcG9zc2libHkgdGFrZSBhZHZhbnRhZ2Ugb2Yg dGhpcyBmYWN0IGJ5IGdlbmVyYXRpbmcgc3BlY2lhbGl6ZWQgbWFjaGluZSBjb2RlIGJhc2VkIG9u IHRoZSBzaGFwZXMuIAogICAgCiMjIyBDbGFzcyBpbnN0YW5jZSB2YXJpYWJsZXMgY2FuIGJlIHN0 b3JlZCBpbiBhbiBhcnJheQoKQ3VycmVudGx5LCBgVF9DTEFTU2AgYW5kIGBUX01PRFVMRWAgaW5z dGFuY2VzIGNhbm5vdCB1c2UgdGhlIHNhbWUgSVYgaW5kZXggdGFibGUgb3B0aW1pemF0aW9uIHRo YXQgYFRfT0JKRUNUYCBpbnN0YW5jZXMgdXNlLiAgV2UgdGhpbmsgdGhhdCB0aGUgb2JqZWN0IHNo YXBlcyB0ZWNobmlxdWUgY2FuIGJlIGxldmVyYWdlZCBieSBjbGFzcyBpbnN0YW5jZXMgdG8gdXNl IGFycmF5cyBmb3IgY2xhc3MgaW5zdGFuY2UgdmFyaWFibGUgc3RvcmFnZSBhbmQgbWF5IHBvc3Np Ymx5IGxlYWQgdG8gYSByZWR1Y3Rpb24gaW4gbWVtb3J5IHVzYWdlICh0aG91Z2ggd2UgaGF2ZSB5 ZXQgdG8gdGVzdCB0aGlzKS4KCiMjIEltcGxlbWVudGF0aW9uIERldGFpbHMKCltIZXJlXShodHRw czovL2dpdGh1Yi5jb20vamVtbWFpc3Nyb2ZmL3J1YnkvY29tbWl0LzRlOTVkMDE2NTRmMjRjZWZm NmM4MzMwY2Y0ZTVjN2RhYzUwNDczOWUpIGlzIGEgbGluayB0byBvdXIgY29kZSBzbyBmYXIuCgpB cyBtZW50aW9uZWQgZWFybGllciwgc2hhcGUgb2JqZWN0cyBmb3JtIGEgdHJlZSBkYXRhIHN0cnVj dHVyZS4gIEluIG9yZGVyIHRvIGxvb2sgdXAgdGhlIHNoYXBlIHF1aWNrbHksIHdlIGFsc28gc3Rv cmUgdGhlIHNoYXBlcyBpbiBhIHdlYWsgYXJyYXkgdGhhdCBpcyBzdG9yZWQgb24gdGhlIFZNLiAg VGhlIElEIG9mIHRoZSBzaGFwZSBpcyB0aGUgaW5kZXggaW4gdG8gdGhlIGFycmF5LCBhbmQgdGhl IElEIGlzIHN0b3JlZCBvbiB0aGUgb2JqZWN0LgoKRm9yIGBUX09CSkVDVGAgb2JqZWN0cywgd2Ug c3RvcmUgdGhlIHNoYXBlIElEIGluIHRoZSBvYmplY3QncyBoZWFkZXIuIE9uIDY0IGJpdCBzeXN0 ZW1zLCB0aGUgdXBwZXIgMzIgYml0cyBhcmUgdXNlZCBieSBSYWN0b3JzLiAgV2Ugd2FudCBvYmpl Y3Qgc2hhcGVzIHRvIGJlIGVuYWJsZWQgb24gMzIgYml0IHN5c3RlbXMgYW5kIDY0IGJpdCBzeXN0 ZW1zIHNvIHRoYXQgbGltaXRzIHVzIHRvIHRoZSBib3R0b20gMzIgYml0cyBvZiB0aGUgT2JqZWN0 IGhlYWRlci4gIFRoZSB0b3AgMjAgYml0cyBmb3IgYFRfT0JKRUNUYCBvYmplY3RzIHdhcyB1bnVz ZWQsIHNvIHdlIHVzZWQgdGhlIHRvcCAxNiBiaXRzIGZvciB0aGUgc2hhcGUgaWQuICBXZSBjaG9z ZSB0aGUgdG9wIDE2IGJpdHMgYmVjYXVzZSB0aGlzIGFsbG93cyB1cyB0byB1c2UgYHVpbnQxNl90 YCBhbmQgbWFza2luZyB0aGUgaGVhZGVyIGJpdHMgaXMgZWFzaWVyLgoKVGhpcyBpbXBsZW1lbnRh dGlvbiBkZXRhaWwgbGltaXRzIHVzIHRvIH42NWsgc2hhcGVzLiBXZSBtZWFzdXJlZCB0aGUgbnVt YmVyIG9mIHNoYXBlcyB1c2VkIG9uIGEgc2ltcGxlIFtEaXNjb3Vyc2VdKGh0dHBzOi8vZ2l0aHVi LmNvbS9kaXNjb3Vyc2UvZGlzY291cnNlKSBhcHBsaWNhdGlvbiAofjMuNWspLCBbUmFpbHNCZW5j aF0oaHR0cHM6Ly9naXRodWIuY29tL2swa3VidW4vcmFpbHNiZW5jaCkgKH40ayksIGFuZCBTaG9w aWZ5J3MgbW9ub2xpdGgncyB0ZXN0IHN1aXRlICh+NDBrKS4gQWNjb3JkaW5nbHksIHdlIGRlY2lk ZWQgdG8gaW1wbGVtZW50IGdhcmJhZ2UgY29sbGVjdGlvbiBvbiBvYmplY3Qgc2hhcGVzIHNvIHdl IGNhbiByZWN5Y2xlIHNoYXBlIElEcyB3aGljaCBhcmUgbm8gbG9uZ2VyIGluIHVzZS4gIFdlIGFy ZSBjdXJyZW50bHkgd29ya2luZyBvbiBzaGFwZSBHQy4KCkV2ZW4gdGhvdWdoIGl0J3MgdW5saWtl bHksIGl0J3Mgc3RpbGwgcG9zc2libGUgZm9yIGFuIGFwcGxpY2F0aW9uIHRvIHJ1biBvdXQgb2Yg c2hhcGVzLiBPbmNlIGFsbCBzaGFwZSBJRHMgYXJlIGluIHVzZSwgYW55IG9iamVjdHMgdGhhdCBu ZWVkIG5ldyBzaGFwZSBJRHMgd2lsbCBuZXZlciBoaXQgb24gaW5saW5lIGNhY2hlcy4KCiMjIEV2 YWx1YXRpb24KCldlIGhhdmUgc28gZmFyIHRlc3RlZCB0aGlzIGJyYW5jaCB3aXRoIFtEaXNjb3Vy c2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3Vyc2UvZGlzY291cnNlKSwgW1JhaWxzQmVuY2hd KGh0dHBzOi8vZ2l0aHViLmNvbS9rMGt1YnVuL3JhaWxzYmVuY2gpIGFuZCBTaG9waWZ5J3MgbW9u b2xpdGguIFdlIHBsYW4gdG8gdGVzdCB0aGlzIGJyYW5jaCBtb3JlIGJyb2FkbHkgYWdhaW5zdCBz ZXZlcmFsIG9wZW4gc291cmNlIFJ1YnkgYW5kIFJhaWxzIGFwcGxpY2F0aW9ucy4gCgpCZWZvcmUg d2UgY29uc2lkZXIgdGhpcyBicmFuY2ggdG8gYmUgcmVhZHkgZm9yIGZvcm1hbCByZXZpZXcsIHdl IHdhbnQgdGhlIHJ1bnRpbWUgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1c2FnZSBvZiB0aGVzZSBi ZW5jaG1hcmtzIHRvIGJlIGVxdWl2YWxlbnQgb3IgYmV0dGVyIHRoYW4gaXQgaXMgY3VycmVudGx5 LiBJbiBvdXIgb3BpbmlvbiwgZXZlbiB3aXRoIGVxdWl2YWxlbnQgcnVudGltZSBwZXJmb3JtYW5j ZSBhbmQgbWVtb3J5IHVzYWdlLCB0aGUgZnV0dXJlIGJlbmVmaXRzIG9mIHRoaXMgYXBwcm9hY2gg bWFrZSB0aGUgY2hhbmdlIHNlZW0gd29ydGh3aGlsZS4KCiMjIEZlZWRiYWNrCgpJZiB5b3UgaGF2 ZSBhbnkgZmVlZGJhY2ssIGNvbW1lbnRzLCBvciBxdWVzdGlvbnMsIHBsZWFzZSBsZXQgdXMga25v dyBhbmQgd2UnbGwgZG8gb3VyIGJlc3QgdG8gYWRkcmVzcyBpdC4gVGhhbmsgeW91IQoKLS0tRmls ZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpvYmplY3Qtc2hhcGVzLnBhdGNoICgx ODAgS0IpCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwo=