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 E1BA91F54E for ; Thu, 18 Aug 2022 18:49:30 +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="geV7N6U2"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 238D1121556; Fri, 19 Aug 2022 03:49:29 +0900 (JST) Received: from o1678948x4.outbound-mail.sendgrid.net (o1678948x4.outbound-mail.sendgrid.net [167.89.48.4]) by neon.ruby-lang.org (Postfix) with ESMTPS id C883E121046 for ; Fri, 19 Aug 2022 03:49:25 +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=Y8J4Wk31hyql6h8qK4RP2wZyRPegX76hH/vKEajqlRo=; b=geV7N6U21FFlkrfekUByYed8z5JTeGk6zosdXlvcvEHcmaehLR9rO7B/+vztBgr+Uj4X Ml2IZF7rnJ6VXCvhV8O/O072AAuu7fYHqYBpeC5stl4qHS9r7zfuFjSkmcHj5j7JsnF4i8 nWqlBgwb0Vah+K+k9U9TLtLh8UQhHblzI= Received: by filterdrecv-67c4c66ffd-7x6lx with SMTP id filterdrecv-67c4c66ffd-7x6lx-1-62FE89B4-18 2022-08-18 18:49:24.220700268 +0000 UTC m=+2414604.662091477 Received: from herokuapp.com (unknown) by geopod-ismtpd-4-1 (SG) with ESMTP id 9LhhkGGpQ1i2i30GSzGMow for ; Thu, 18 Aug 2022 18:49:24.171 +0000 (UTC) Date: Thu, 18 Aug 2022 18:49:24 +0000 (UTC) From: "Dan0042 (Daniel DeLorme)" 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: Dan0042 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: 85969 X-SG-EID: =?us-ascii?Q?9vnO9kNFlf1pwhty1clU3mt9eNWYniufdXqocdsQQtaDTWZk4+b5g5js0Akvaj?= =?us-ascii?Q?32LW=2F+fGSAom3tt8Jo+=2FGW3uDD0ktbmu7qAbln0?= =?us-ascii?Q?uJrjIDuBnl3S6oj3XBhkRsBfaOSRUZQr8eFCMEY?= =?us-ascii?Q?JtTjNFgr4ZvMiTYkAOFbZUjVAuFe5obYgoDKd8l?= =?us-ascii?Q?k=2FyfzSIBPZgoBDqFatvmRCAlmWBShA+qPsI4s03?= =?us-ascii?Q?t8Qqi3u4pyJ=2FWfeZg2L4VFZXy76wUNDxM7RdSYd?= =?us-ascii?Q?Gsh2nk4agZNqyRKFfip8A=3D=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 109561 Subject: [ruby-core:109561] [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" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgRGFuMDA0MiAoRGFuaWVsIERlTG9ybWUp LgoKCnRlbmRlcmxvdmVtYWtpbmcgKEFhcm9uIFBhdHRlcnNvbikgd3JvdGUgaW4gI25vdGUtMjE6 Cj4gSXQncyBjdXJyZW50bHkgaW1wbGVtZW50ZWQgdGhpcyB3YXkuIDopCgpPaywgdGhhbmsgeW91 IGZvciB0aGUgZXhwbGFuYXRpb24uIEkgZ290IGNvbXBsZXRlbHkgY29uZnVzZWQgYnkgdGhlIHJv bGUgb2YgdGhlIGZyb3plbiByb290IG9iamVjdC4gU29ycnkgZm9yIHRoZSBub2lzZS4KCmplcmVt eWV2YW5zMCAoSmVyZW15IEV2YW5zKSB3cm90ZSBpbiAjbm90ZS0yMDoKPiBDYW4geW91IGV4cGxh aW4gaG93IHNoYXBlcyBjb3VsZCBpbXByb3ZlIHBlcmZvcm1hbmNlIG9mIGtleXdvcmQgYXJndW1l bnRzPyAgTm9ib2R5IGVsc2UgaGFzIG1lbnRpb25lZCB0aGUgcG9zc2liaWxpdHkgeWV0LCBhbmQg SSdtIG5vdCBzdXJlIGhvdyB0aGV5IGFyZSByZWxhdGVkLgoKV2VsbCwgSSBiZWxpZXZlIHNoYXBl cyBjYW4gYmUgY29uc2lkZXJlZCBhIGdlbmVyYWwtcHVycG9zZSBtZWNoYW5pc20gdG8gc3RvcmUg Im5hbWVkIHR1cGxlcyIgb3IgImhhc2ggb2Ygc3ltYm9scyIga2luZCBvZiBkYXRhIHN0cnVjdHVy ZXMuCgpLZXl3b3JkIGFyZ3VtZW50cyBsaWtlIGBmb28oYToxLCBiOjIpYCBhcmUgYWxyZWFkeSBw cmV0dHkgZWZmaWNpZW50IGJlY2F1c2UgdGhleSB1c2UgYSBzdHJhdGVneSBzaW1pbGFyIHRvIHNo YXBlcyAoVk1fQ0FMTF9LV0FSRykgd2hlcmUga2V5cyB7YSxifSBhcmUgc3RvcmVkIG9uY2UgcGVy LWNhbGxzaXRlIGFuZCB2YWx1ZXMgWzEsMl0gYXJlIHBhc3NlZCBvbiB0aGUgc3RhY2sgKElJUkMp LgoKQnV0IGFzIHNvb24gYXMgeW91IGhhdmUgYSBzcGxhdCB5b3UgbmVlZCB0byBhbGxvY2F0ZSBh IGhhc2ggb24gdGhlIGhlYXAuIChWTV9DQUxMX0tXX1NQTEFUKQpgYGBydWJ5CmggPSB7YzozLCBk OjR9CmZvbyhhOjEsIGI6MiwgKipoKQpgYGAKV2l0aCBzaGFwZXMgeW91IGNvdWxkIHN0YXJ0IHdp dGgge2EsYn0gYW5kIHRoZW4gYWRkIHRoZSBoYXNoIGtleXMgdG8gZ2V0IHNoYXBlIHthLGIsYyxk fSBhbmQgcGFzcyBhbGwgdmFsdWVzIFsxLDIsMyw0XSBwbHVzIHRoZSBzaGFwZSBpZCBvbiB0aGUg c3RhY2suIE5vIG5lZWQgdG8gYWxsb2NhdGUgYSBoYXNoIGFuZCBhc3NvY2lhdGVkIHN0X3RhYmxl L2FyX3RhYmxlLiBJIHRoaW5rLgoKCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KRmVhdHVyZSAjMTg3NzY6IE9iamVjdCBTaGFwZXMKaHR0cHM6Ly9idWdzLnJ1YnktbGFu Zy5vcmcvaXNzdWVzLzE4Nzc2I2NoYW5nZS05ODczMgoKKiBBdXRob3I6IGplbW1haSAoSmVtbWEg SXNzcm9mZikKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBPYmplY3QgU2hhcGVzIGltcGxlbWVudGF0aW9u CgpBYXJvbiBQYXR0ZXJzb24sIEVpbGVlbiBVY2hpdGVsbGUgYW5kIEkgaGF2ZSBiZWVuIHdvcmtp bmcgb24gYW4gaW1wbGVtZW50YXRpb24gb2YgT2JqZWN0IFNoYXBlcyBmb3IgUnVieS4gIFdlIGFy ZSBmaWxpbmcgYSB0aWNrZXQgdG8gc2hhcmUgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5nLCBhcyB3ZWxs IGFzIGdldCBmZWVkYmFjayBvbiB0aGUgcHJvamVjdCBpbiBpdHMgY3VycmVudCBzdGF0ZS4KCldl IGhvcGUgdG8gZXZlbnR1YWxseSBzdWJtaXQgdGhlIGZpbmFsaXplZCBwcm9qZWN0IHVwc3RyZWFt IGFmdGVyIHZlcmlmeWluZyBlZmZpY2FjeS4KCiMjIFdoYXQgYXJlIE9iamVjdCBTaGFwZXM/CgpP YmplY3Qgc2hhcGVzIGFyZSBhIHRlY2huaXF1ZSBmb3IgcmVwcmVzZW50aW5nIHByb3BlcnRpZXMg b2YgYW4gb2JqZWN0LiBPdGhlciBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbnMsIGluY2x1ZGluZyBb VHJ1ZmZsZVJ1YnldKGh0dHBzOi8vZ2l0aHViLmNvbS9vcmFjbGUvdHJ1ZmZsZXJ1YnkpIGFuZCBb VjhdKGh0dHBzOi8vdjguZGV2LyksIHVzZSB0aGlzIHRlY2huaXF1ZS4gQ2hyaXMgU2VhdG9uLCB0 aGUgY3JlYXRvciBvZiBUcnVmZmxlUnVieSwgZGlzY3Vzc2VkIG9iamVjdCBzaGFwZXMgaW4gaGlz IFtSdWJ5S2FpZ2kgMjAyMSBLZXlub3RlXShodHRwczovL3J1YnlrYWlnaS5vcmcvMjAyMS10YWtl b3V0L3ByZXNlbnRhdGlvbnMvY2hyaXNnc2VhdG9uLmh0bWwpIGFuZCBNYXhpbWUgQ2hldmFsaWVy LUJvaXN2ZXJ0IGRpc2N1c3NlZCB0aGUgaW1wbGljYXRpb25zIGZvciBZSklUIGluIHRoZSBsYXR0 ZXIgcGFydCBvZiBbaGVyIHRhbGsgYXQgUnVieUthaWdpIDIwMjFdKGh0dHBzOi8vd3d3LnlvdXR1 YmUuY29tL3dhdGNoP3Y9UEJWTGYzeWZNczgmdD0xMTAwcykuIFRoZSBvcmlnaW5hbCBpZGVhIG9m IG9iamVjdCBzaGFwZXMgW29yaWdpbmF0ZXMgZnJvbSB0aGUgU2VsZiBsYW5ndWFnZV0oaHR0cHM6 Ly9iaWJsaW9ncmFwaHkuc2VsZmxhbmd1YWdlLm9yZy9fc3RhdGljL2ltcGxlbWVudGF0aW9uLnBk ZiksIHdoaWNoIGlzIGNvbnNpZGVyZWQgYSBkaXJlY3QgZGVzY2VuZGFudCBvZiBTbWFsbHRhbGsu CgpFYWNoIHNoYXBlIHJlcHJlc2VudHMgYSBzcGVjaWZpYyBzZXQgb2YgYXR0cmlidXRlcyAoaW5z dGFuY2UgdmFyaWFibGVzIGFuZCBvdGhlciBwcm9wZXJ0aWVzKSBhbmQgdGhlaXIgdmFsdWVzLiBJ biBvdXIgaW1wbGVtZW50YXRpb24sIGFsbCBvYmplY3RzIGhhdmUgYSBzaGFwZS4gVGhlIHNoYXBl cyBhcmUgbm9kZXMgaW4gYSB0cmVlIGRhdGEgc3RydWN0dXJlLiBFdmVyeSBlZGdlIGluIHRoZSB0 cmVlIHJlcHJlc2VudHMgYW4gYXR0cmlidXRlIHRyYW5zaXRpb24uCgpNb3JlIHNwZWNpZmljYWxs eSwgc2V0dGluZyBhbiBpbnN0YW5jZSB2YXJpYWJsZSBvbiBhbiBpbnN0YW5jZSBvZiBhbiBvYmpl Y3QgY3JlYXRlcyBhbiBvdXRnb2luZyBlZGdlIGZyb20gdGhlIGluc3RhbmNlJ3MgY3VycmVudCBz aGFwZS4gVGhpcyBpcyBhIHRyYW5zaXRpb24gZnJvbSBvbmUgc2hhcGUgdG8gYW5vdGhlci4gVGhl IGVkZ2UgcmVwcmVzZW50cyB0aGUgaW5zdGFuY2UgdmFyaWFibGUgdGhhdCBpcyBzZXQuCgpGb3Ig ZXhhbXBsZToKCmBgYHJ1YnkKY2xhc3MgRm9vCiAgZGVmIGluaXRpYWxpemUKICAgICMgQ3VycmVu dGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApCiAgICBAYSA9IDEgIyBU cmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYSAoSUQgMSkKICAgIEBiID0gMiAj IFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBiIChJRCAyKQogIGVuZAplbmQK CmZvbyA9IEZvby5uZXcKYGBgCgpXaGVuIGBGb29gIGlzIGludGlhbGl6ZWQsIGl0cyBzaGFwZSBp cyB0aGUgcm9vdCBzaGFwZSB3aXRoIElEIDAuICBUaGUgcm9vdCBzaGFwZSByZXByZXNlbnRzIGFu IGVtcHR5IG9iamVjdCB3aXRoIG5vIGluc3RhbmNlIHZhcmlhYmxlcy4gRWFjaCB0aW1lIGFuIGlu c3RhbmNlIHZhcmlhYmxlIGlzIHNldCBvbiBgZm9vYCwgdGhlIHNoYXBlIG9mIHRoZSBpbnN0YW5j ZSBjaGFuZ2VzLiBJdCBmaXJzdCB0cmFuc2l0aW9ucyB3aXRoIGBAYWAgdG8gYSBzaGFwZSB3aXRo IElEIDEsIGFuZCB0aGVuIHRyYW5zaXRpb25zIHdpdGggYEBiYCB0byBhIHNoYXBlIHdpdGggSUQg Mi4gSWYgYEBhYCBpcyB0aGVuIHNldCB0byBhIGRpZmZlcmVudCB2YWx1ZSwgaXRzIHNoYXBlIHdp bGwgcmVtYWluIHRoZSBzaGFwZSB3aXRoIElEIDIsIHNpbmNlIHRoaXMgc2hhcGUgYWxyZWFkeSBp bmNsdWRlcyB0aGUgaW5zdGFuY2UgdmFyaWFibGUgYEBhYC4gIAoKIVtdKGh0dHBzOi8vdXNlci1p bWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3OTE4MzYwLTBhNmM5MWFhLTI1 ODctNDhjYi04ZmYyLTdmM2E5NTgzMjg4ZS5zdmcpCgpUaGVyZSBpcyBvbmUgZ2xvYmFsIHNoYXBl IHRyZWUgYW5kIG9iamVjdHMgd2hpY2ggdW5kZXJnbyB0aGUgc2FtZSBzaGFwZSB0cmFuc2l0aW9u cyBpbiB0aGUgc2FtZSBvcmRlciB3aWxsIGVuZCB1cCB3aXRoIHRoZSBzYW1lIGZpbmFsIHNoYXBl LgoKRm9yIGluc3RhbmNlLCBpZiB3ZSBoYXZlIGEgY2xhc3MgYEJhcmAgZGVmaW5lZCBhcyBmb2xs b3dzLCB0aGUgZmlyc3QgdHJhbnNpdGlvbiBvbiBgQmFyLm5ld2AgdGhyb3VnaCB0aGUgaW5zdGFu Y2UgdmFyaWFibGUgYEBhYCB3aWxsIGJlIHRoZSBzYW1lIGFzIGBGb28ubmV3YCdzIGZpcnN0IHRy YW5zaXRpb246CgpgYGBydWJ5CmNsYXNzIEZvbwogIGRlZiBpbml0aWFsaXplCiAgICAjIEN1cnJl bnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAgQGEgPSAxICMg VHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGEgKElEIDEpCiAgICBAYiA9IDIg IyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYiAoSUQgMikKICBlbmQKZW5k CgpjbGFzcyBCYXIKICBkZWYgaW5pdGlhbGl6ZQogICAgIyBDdXJyZW50bHkgdGhpcyBpbnN0YW5j ZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkKICAgIEBhID0gMSAjIFRyYW5zaXRpb25zIHRvIHNo YXBlIGRlZmluZWQgZWFybGllciB2aWEgZWRnZSBAYSAoSUQgMSkKICAgIEBjID0gMSAjIFRyYW5z aXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBjIChJRCAzKQogICAgQGIgPSAxICMgVHJh bnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElEIDQpCiAgZW5kCmVuZAoKZm9v ID0gRm9vLm5ldyAjIGJsdWUgaW4gdGhlIGRpYWdyYW0KYmFyID0gQmFyLm5ldyAjIHJlZCBpbiB0 aGUgZGlhZ3JhbQpgYGAKCkluIHRoZSBkaWFncmFtIGJlbG93LCBwdXJwbGUgcmVwcmVzZW50cyBz aGFyZWQgdHJhbnNpdGlvbnMsIGJsdWUgcmVwcmVzZW50cyB0cmFuc2l0aW9ucyBmb3Igb25seSBg Zm9vYCwgYW5kIHJlZCByZXByZXNlbnRzIHRyYW5zaXRpb25zIGZvciBvbmx5IGBiYXJgLgoKIVtd KGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3OTE4 ODk5LWYxYTZmMzQ0LWFlNWUtNGRjMC1iMTdhLWZiMTU2ZDFkNTUwZi5zdmcpCgojIyMgQ2FjaGUg c3RydWN0dXJlCgpGb3IgaW5zdGFuY2UgdmFyaWFibGUgd3JpdGVycywgdGhlIGN1cnJlbnQgc2hh cGUgSUQsIHRoZSBzaGFwZSBJRCB0aGF0IGl2YXIgd3JpdGUgd291bGQgdHJhbnNpdGlvbiB0byBh bmQgaW5zdGFuY2UgdmFyaWFibGUgaW5kZXggYXJlIGFsbCBzdG9yZWQgaW4gdGhlIGlubGluZSBj YWNoZS4gVGhlIHNoYXBlIElEIGlzIHRoZSBrZXkgdG8gdGhlIGNhY2hlLgoKRm9yIGluc3RhbmNl IHZhcmlhYmxlIHJlYWRlcnMsIHRoZSBzaGFwZSBJRCBhbmQgaW5zdGFuY2UgdmFyaWFibGUgaW5k ZXggYXJlIHN0b3JlZCBpbiB0aGUgaW5saW5lIGNhY2hlLiAgQWdhaW4sIHRoZSBzaGFwZSBJRCBp cyB0aGUgY2FjaGUga2V5LgoKYGBgcnVieQpjbGFzcyBGb28KICBkZWYgaW5pdGlhbGl6ZQogICAg QGEgPSAxICMgSUMgc2hhcGVfaWQ6IDAsIG5leHQgc2hhcGU6IDEsIGl2IGluZGV4IDAKICAgIEBi ID0gMSAjIElDIHNoYXBlX2lkOiAxLCBuZXh0IHNoYXBlOiAyLCBpdiBpbmRleCAxCiAgZW5kCiAg ICAKICBkZWYgYQogICAgQGEgIyBJQyBzaGFwZV9pZDogMiwgaXYgaW5kZXggMAogIGVuZAplbmQK YGBgCgojIyBSYXRpb25hbGUKCldlIHRoaW5rIHRoYXQgYW4gb2JqZWN0IHNoYXBlIGltcGxlbWVu dGF0aW9uIHdpbGwgc2ltcGxpZnkgY2FjaGUgY2hlY2tzLCBpbmNyZWFzZSBpbmxpbmUgY2FjaGUg aGl0cywgZGVjcmVhc2UgcnVudGltZSBjaGVja3MsIGFuZCBlbmFibGUgb3RoZXIgcG90ZW50aWFs IGZ1dHVyZSBvcHRpbWl6YXRpb25zLiBUaGVzZSBhcmUgYWxsIGV4cGxhaW5lZCBiZWxvdy4gCgoj IyMgU2ltcGxpZnkgY2FjaGluZwoKVGhlIGN1cnJlbnQgY2FjaGUgaW1wbGVtZW50YXRpb24gZGVw ZW5kcyBvbiB0aGUgY2xhc3Mgb2YgdGhlIHJlY2VpdmVyLiBTaW5jZSB0aGUgYWRkcmVzcyBvZiB0 aGUgY2xhc3MgY2FuIGJlIHJldXNlZCwgdGhlIGN1cnJlbnQgY2FjaGUgaW1wbGVtZW50YXRpb24g YWxzbyBkZXBlbmRzIG9uIGFuIGluY3JlbWVudGluZyBzZXJpYWwgbnVtYmVyIHNldCBvbiB0aGUg Y2xhc3MgKHRoZSBjbGFzcyBzZXJpYWwpLiAgVGhlIHNoYXBlIGltcGxlbWVudGF0aW9uIGhhcyBu byBzdWNoIGRlcGVuZGVuY3kuIEl0IG9ubHkgcmVxdWlyZXMgY2hlY2tpbmcgdGhlIHNoYXBlIElE IHRvIGRldGVybWluZSBpZiB0aGUgY2FjaGUgaXMgdmFsaWQuCgojIyMgQ2FjaGUgaGl0cwoKT2Jq ZWN0cyB0aGF0IHNldCBwcm9wZXJ0aWVzIGluIHRoZSBzYW1lIG9yZGVyIGNhbiBzaGFyZSBzaGFw ZXMuICBGb3IgZXhhbXBsZToKCmBgYHJ1YnkKY2xhc3MgSG9nZQogIGRlZiBpbml0aWFsaXplCiAg ICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAg QGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gdGhlIG5leHQgc2hhcGUgdmlhIGVkZ2UgbmFtZWQgQGEK ICAgIEBiID0gMiAjIFRyYW5zaXRpb25zIHRvIG5leHQgc2hhcGUgdmlhIGVkZ2UgbmFtZWQgQGIK ICBlbmQKZW5kCgpjbGFzcyBGdWdhIDwgSG9nZTsgZW5kCgpob2dlID0gSG9nZS5uZXcKZnVnYSA9 IEZ1Z2EubmV3CmBgYAoKSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBpbnN0YW5jZXMgYGhvZ2Vg IGFuZCBgZnVnYWAgd2lsbCBzaGFyZSB0aGUgc2FtZSBzaGFwZSBJRC4gIFRoaXMgbWVhbnMgaW5s aW5lIGNhY2hlcyBpbiBgaW5pdGlhbGl6ZWAgd2lsbCBoaXQgaW4gYm90aCBjYXNlcy4gIFRoaXMg Y29udHJhc3RzIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdGhhdCB1c2VzIHRoZSBj bGFzcyBhcyB0aGUgY2FjaGUga2V5LiAgSW4gb3RoZXIgd29yZHMsIHdpdGggb2JqZWN0IHNoYXBl cyB0aGUgYWJvdmUgY29kZSB3aWxsIGhpdCBpbmxpbmUgY2FjaGVzIHdoZXJlIHRoZSBjdXJyZW50 IGltcGxlbWVudGF0aW9uIHdpbGwgbWlzcy4KCklmIHBlcmZvcm1hbmNlIHRlc3RpbmcgcmV2ZWFs cyB0aGF0IGNhY2hlIGhpdHMgYXJlICpub3QqIHN1YnN0YW50aWFsbHkgaW1wcm92ZWQsIHRoZW4g d2UgY2FuIHVzZSBzaGFwZXMgdG8gcmVjbGFpbSBtZW1vcnkgZnJvbSBgUkJhc2ljYC4gV2UgY2Fu IGFjY29tcGxpc2ggdGhpcyBieSBlbmNvZGluZyB0aGUgY2xhc3Mgd2l0aGluIHRoZSBzaGFwZSB0 cmVlLiBUaGlzIHdpbGwgaGF2ZSBhbiBlcXVpdmFsZW50IGNhY2hlIGhpdCByYXRlIHRvIHRoZSBj dXJyZW50IGltcGxlbWVudGF0aW9uLiBPbmNlIHRoZSBjbGFzcyBpcyBlbmNvZGVkIHdpdGhpbiB0 aGUgc2hhcGUgdHJlZSwgd2UgY2FuIHJlbW92ZSB0aGUgY2xhc3MgcG9pbnRlciBmcm9tIGBSQmFz aWNgIGFuZCBlaXRoZXIgcmVjbGFpbSB0aGF0IG1lbW9yeSBvciBmcmVlIGl0IGZvciBhbm90aGVy IHVzZS4KCiMjIyBEZWNyZWFzZXMgcnVudGltZSBjaGVja2luZwoKV2UgY2FuIGVuY29kZSBhdHRy aWJ1dGVzIHRoYXQgYXJlbid0IGluc3RhbmNlIHZhcmlhYmxlcyBpbnRvIGFuIG9iamVjdCdzIHNo YXBlLiBDdXJyZW50bHksIHdlIGFsc28gaW5jbHVkZSBmcm96ZW4gd2l0aGluIHRoZSBzaGFwZS4g VGhpcyBtZWFucyB3ZSBjYW4gbGltaXQgZnJvemVuIGNoZWNrcyB0byBvbmx5IGNhY2hlIG1pc3Nl cy4KCkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGU6CgpgYGBydWJ5CmNsYXNzIFRvdG8K ICBkZWYgc2V0X2EKICAgIEBhID0gMSAjIGNhY2hlOiBzaGFwZTogMCwgbmV4dCBzaGFwZTogMSwg SVYgaWR4OiAwCiAgZW5kCmVuZAoKdG90byA9IFRvdG8ubmV3ICMgc2hhcGUgMAp0b3RvLnNldF9h ICAgICAjIHNoYXBlIDEKCnRvdG8gPSBUb3RvLm5ldyAjIHNoYXBlIDAKdG90by5mcmVlemUgICAg IyBzaGFwZSAyCnRvdG8uc2V0X2EgICAgICMgQ2FjaGUgbWlzcywgRXhjZXB0aW9uIQpgYGAKCiFb XShodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xOTg4NTYwLzE2Nzky MDAwMS1jNGU2MzI2Yi0zYTNjLTQ4M2ItYTc5Ny05ZTAyMzE3NjQ3ZDcuc3ZnKQoKV2l0aG91dCBz aGFwZXMsIGFsbCBpbnN0YW5jZSB2YXJpYWJsZSBzZXRzIHJlcXVpcmUgY2hlY2tpbmcgdGhlIGZy b3plbiBzdGF0dXMgb2YgdGhlIG9iamVjdC4gV2l0aCBzaGFwZXMsIHdlIG9ubHkgbmVlZCB0byBj aGVjayB0aGUgZnJvemVuIHN0YXR1cyBvbiBjYWNoZSBtaXNzZXMuCgpXZSBjYW4gYWxzbyBlbGlt aW5hdGUgZW1iZWRkZWQgYW5kIGV4dGVuZGVkIGNoZWNrcyB3aXRoIHRoZSBpbnRyb2R1Y3Rpb24g b2Ygb2JqZWN0IHNoYXBlcy4gQW55IHBhcnRpY3VsYXIgc2hhcGUgcmVwcmVzZW50cyBhbiBvYmpl Y3QgdGhhdCBpcyBfZWl0aGVyXyBleHRlbmRlZCBvciBlbWJlZGRlZC4gSklUcyBjYW4gcG9zc2li bHkgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmYWN0IGJ5IGdlbmVyYXRpbmcgc3BlY2lhbGl6ZWQg bWFjaGluZSBjb2RlIGJhc2VkIG9uIHRoZSBzaGFwZXMuIAogICAgCiMjIyBDbGFzcyBpbnN0YW5j ZSB2YXJpYWJsZXMgY2FuIGJlIHN0b3JlZCBpbiBhbiBhcnJheQoKQ3VycmVudGx5LCBgVF9DTEFT U2AgYW5kIGBUX01PRFVMRWAgaW5zdGFuY2VzIGNhbm5vdCB1c2UgdGhlIHNhbWUgSVYgaW5kZXgg dGFibGUgb3B0aW1pemF0aW9uIHRoYXQgYFRfT0JKRUNUYCBpbnN0YW5jZXMgdXNlLiAgV2UgdGhp bmsgdGhhdCB0aGUgb2JqZWN0IHNoYXBlcyB0ZWNobmlxdWUgY2FuIGJlIGxldmVyYWdlZCBieSBj bGFzcyBpbnN0YW5jZXMgdG8gdXNlIGFycmF5cyBmb3IgY2xhc3MgaW5zdGFuY2UgdmFyaWFibGUg c3RvcmFnZSBhbmQgbWF5IHBvc3NpYmx5IGxlYWQgdG8gYSByZWR1Y3Rpb24gaW4gbWVtb3J5IHVz YWdlICh0aG91Z2ggd2UgaGF2ZSB5ZXQgdG8gdGVzdCB0aGlzKS4KCiMjIEltcGxlbWVudGF0aW9u IERldGFpbHMKCltIZXJlXShodHRwczovL2dpdGh1Yi5jb20vamVtbWFpc3Nyb2ZmL3J1YnkvY29t bWl0LzRlOTVkMDE2NTRmMjRjZWZmNmM4MzMwY2Y0ZTVjN2RhYzUwNDczOWUpIGlzIGEgbGluayB0 byBvdXIgY29kZSBzbyBmYXIuCgpBcyBtZW50aW9uZWQgZWFybGllciwgc2hhcGUgb2JqZWN0cyBm b3JtIGEgdHJlZSBkYXRhIHN0cnVjdHVyZS4gIEluIG9yZGVyIHRvIGxvb2sgdXAgdGhlIHNoYXBl IHF1aWNrbHksIHdlIGFsc28gc3RvcmUgdGhlIHNoYXBlcyBpbiBhIHdlYWsgYXJyYXkgdGhhdCBp cyBzdG9yZWQgb24gdGhlIFZNLiAgVGhlIElEIG9mIHRoZSBzaGFwZSBpcyB0aGUgaW5kZXggaW4g dG8gdGhlIGFycmF5LCBhbmQgdGhlIElEIGlzIHN0b3JlZCBvbiB0aGUgb2JqZWN0LgoKRm9yIGBU X09CSkVDVGAgb2JqZWN0cywgd2Ugc3RvcmUgdGhlIHNoYXBlIElEIGluIHRoZSBvYmplY3QncyBo ZWFkZXIuIE9uIDY0IGJpdCBzeXN0ZW1zLCB0aGUgdXBwZXIgMzIgYml0cyBhcmUgdXNlZCBieSBS YWN0b3JzLiAgV2Ugd2FudCBvYmplY3Qgc2hhcGVzIHRvIGJlIGVuYWJsZWQgb24gMzIgYml0IHN5 c3RlbXMgYW5kIDY0IGJpdCBzeXN0ZW1zIHNvIHRoYXQgbGltaXRzIHVzIHRvIHRoZSBib3R0b20g MzIgYml0cyBvZiB0aGUgT2JqZWN0IGhlYWRlci4gIFRoZSB0b3AgMjAgYml0cyBmb3IgYFRfT0JK RUNUYCBvYmplY3RzIHdhcyB1bnVzZWQsIHNvIHdlIHVzZWQgdGhlIHRvcCAxNiBiaXRzIGZvciB0 aGUgc2hhcGUgaWQuICBXZSBjaG9zZSB0aGUgdG9wIDE2IGJpdHMgYmVjYXVzZSB0aGlzIGFsbG93 cyB1cyB0byB1c2UgYHVpbnQxNl90YCBhbmQgbWFza2luZyB0aGUgaGVhZGVyIGJpdHMgaXMgZWFz aWVyLgoKVGhpcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgbGltaXRzIHVzIHRvIH42NWsgc2hhcGVz LiBXZSBtZWFzdXJlZCB0aGUgbnVtYmVyIG9mIHNoYXBlcyB1c2VkIG9uIGEgc2ltcGxlIFtEaXNj b3Vyc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3Vyc2UvZGlzY291cnNlKSBhcHBsaWNhdGlv biAofjMuNWspLCBbUmFpbHNCZW5jaF0oaHR0cHM6Ly9naXRodWIuY29tL2swa3VidW4vcmFpbHNi ZW5jaCkgKH40ayksIGFuZCBTaG9waWZ5J3MgbW9ub2xpdGgncyB0ZXN0IHN1aXRlICh+NDBrKS4g QWNjb3JkaW5nbHksIHdlIGRlY2lkZWQgdG8gaW1wbGVtZW50IGdhcmJhZ2UgY29sbGVjdGlvbiBv biBvYmplY3Qgc2hhcGVzIHNvIHdlIGNhbiByZWN5Y2xlIHNoYXBlIElEcyB3aGljaCBhcmUgbm8g bG9uZ2VyIGluIHVzZS4gIFdlIGFyZSBjdXJyZW50bHkgd29ya2luZyBvbiBzaGFwZSBHQy4KCkV2 ZW4gdGhvdWdoIGl0J3MgdW5saWtlbHksIGl0J3Mgc3RpbGwgcG9zc2libGUgZm9yIGFuIGFwcGxp Y2F0aW9uIHRvIHJ1biBvdXQgb2Ygc2hhcGVzLiBPbmNlIGFsbCBzaGFwZSBJRHMgYXJlIGluIHVz ZSwgYW55IG9iamVjdHMgdGhhdCBuZWVkIG5ldyBzaGFwZSBJRHMgd2lsbCBuZXZlciBoaXQgb24g aW5saW5lIGNhY2hlcy4KCiMjIEV2YWx1YXRpb24KCldlIGhhdmUgc28gZmFyIHRlc3RlZCB0aGlz IGJyYW5jaCB3aXRoIFtEaXNjb3Vyc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3Vyc2UvZGlz Y291cnNlKSwgW1JhaWxzQmVuY2hdKGh0dHBzOi8vZ2l0aHViLmNvbS9rMGt1YnVuL3JhaWxzYmVu Y2gpIGFuZCBTaG9waWZ5J3MgbW9ub2xpdGguIFdlIHBsYW4gdG8gdGVzdCB0aGlzIGJyYW5jaCBt b3JlIGJyb2FkbHkgYWdhaW5zdCBzZXZlcmFsIG9wZW4gc291cmNlIFJ1YnkgYW5kIFJhaWxzIGFw cGxpY2F0aW9ucy4gCgpCZWZvcmUgd2UgY29uc2lkZXIgdGhpcyBicmFuY2ggdG8gYmUgcmVhZHkg Zm9yIGZvcm1hbCByZXZpZXcsIHdlIHdhbnQgdGhlIHJ1bnRpbWUgcGVyZm9ybWFuY2UgYW5kIG1l bW9yeSB1c2FnZSBvZiB0aGVzZSBiZW5jaG1hcmtzIHRvIGJlIGVxdWl2YWxlbnQgb3IgYmV0dGVy IHRoYW4gaXQgaXMgY3VycmVudGx5LiBJbiBvdXIgb3BpbmlvbiwgZXZlbiB3aXRoIGVxdWl2YWxl bnQgcnVudGltZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHVzYWdlLCB0aGUgZnV0dXJlIGJlbmVm aXRzIG9mIHRoaXMgYXBwcm9hY2ggbWFrZSB0aGUgY2hhbmdlIHNlZW0gd29ydGh3aGlsZS4KCiMj IEZlZWRiYWNrCgpJZiB5b3UgaGF2ZSBhbnkgZmVlZGJhY2ssIGNvbW1lbnRzLCBvciBxdWVzdGlv bnMsIHBsZWFzZSBsZXQgdXMga25vdyBhbmQgd2UnbGwgZG8gb3VyIGJlc3QgdG8gYWRkcmVzcyBp dC4gVGhhbmsgeW91IQoKLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpv YmplY3Qtc2hhcGVzLnBhdGNoICgxODAgS0IpCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcu b3JnLwo=