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_HI,SPF_HELO_NONE, T_SPF_PERMERROR,UNPARSEABLE_RELAY,URIBL_GREY shortcircuit=no autolearn=ham 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 28B911F506 for ; Fri, 16 Sep 2022 19:55:27 +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="ZI/h+eNm"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 8F4A2120DFC; Sat, 17 Sep 2022 04:55:22 +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 43A8912092F for ; Sat, 17 Sep 2022 04:55:20 +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=rUdd55ClDAm5G693dX64bJikfGKe2a37bB6G/LjGhWs=; b=ZI/h+eNmqE+p6YAKXEqBbOKgqDKHBdrMwo3Vg9aqcqc5xBtQpUtcWennI9wghi7TkSKx lxaLcWNdCZDByoPW4cthDdHnrXHdcS2vNOSVaXMB61LH8/QC+205GaR5SE/SBIgvfiewt7 MGp9lbDBjNFQFLPy8bQWZsM/5R8w+DzuM= Received: by filterdrecv-c8bd8574f-278pj with SMTP id filterdrecv-c8bd8574f-278pj-1-6324D4A1-2A 2022-09-16 19:55:13.580486875 +0000 UTC m=+340370.362006292 Received: from herokuapp.com (unknown) by geopod-ismtpd-2-0 (SG) with ESMTP id d02dnWW3QyqnBfKDx6T_LQ for ; Fri, 16 Sep 2022 19:55:13.536 +0000 (UTC) Date: Fri, 16 Sep 2022 19:55:13 +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: 86363 X-SG-EID: =?us-ascii?Q?zIopk+GYrfxaFZKR2ztRFb8ZuWMKjJeXK89gL2DuKjDTCcLghUd1QuIXZZobz3?= =?us-ascii?Q?Z1at4TymivivM=2FBXJOZa0t64dFZwPq5ijbJTlRa?= =?us-ascii?Q?mYCMySsCljKF8Ds3yskkJbIhzWpOzighoZWVT7X?= =?us-ascii?Q?YW+Qyn+fMzw2bzZBRC=2FzfIr65aFbXvJETKrQN=2Fd?= =?us-ascii?Q?pRoNOpp0mJILiC7q61qXtWmwnzOlEeYyY1Fo94=2F?= =?us-ascii?Q?6tp+uIXsItCAMuMeFUAHW22U3Di9vamTb32HywG?= =?us-ascii?Q?1QxfimzKxYJBbB0CJj+1PE+qXLFhnVNCP5vw=2FQk?= =?us-ascii?Q?ttk=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 109922 Subject: [ruby-core:109922] [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 ZXItQm9pc3ZlcnQpLgoKClRoZSBwZXJmb3JtYW5jZSBudW1iZXJzIGxvb2sgZ29vZCBhbmQgSSdt IHZlcnkgaGFwcHkgd2l0aCB0aGUgaW1wcm92ZW1lbnRzIHRoYXQgeW91J3ZlIG1hZGUgd3J0IHNo YXBlIGlkcyBiZWluZyAzMiBiaXRzLiBJdCdzIGFsc28gbmljZSB0byBzZWUgdGhhdCB0aGUgZ2Vu ZXJhdGVkIGNvZGUgZm9yIHByb3BlcnR5IGFjY2Vzc2VzIGluIFlKSVQgaXMgc2hvcnRlciB0aGFu IGJlZm9yZS4KClRoZXJlIHNlZW1zIHRvIGJlIGEgKGxpa2VseSBtaW5vcikgYnVnIGluIHRoZSBQ UiB0aGF0IHNob3VsZCBiZSBmaXhlZCBiZWZvcmUgd2UgbWVyZ2UgYnV0IGJlc2lkZXMgdGhhdCB0 aGUgUFIgbG9va3MgdG8gbWUgbGlrZSBpdCdzIGluIGEgbWVyZ2VhYmxlIHN0YXRlLCBpdCBkZWxp dmVycyBvbiB3aGF0IHdhcyBwcm9taXNlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KRmVhdHVyZSAjMTg3NzY6IE9iamVjdCBTaGFwZXMKaHR0cHM6Ly9idWdzLnJ1 YnktbGFuZy5vcmcvaXNzdWVzLzE4Nzc2I2NoYW5nZS05OTE3MAoKKiBBdXRob3I6IGplbW1haSAo SmVtbWEgSXNzcm9mZikKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBPYmplY3QgU2hhcGVzIGltcGxlbWVu dGF0aW9uCgpBYXJvbiBQYXR0ZXJzb24sIEVpbGVlbiBVY2hpdGVsbGUgYW5kIEkgaGF2ZSBiZWVu IHdvcmtpbmcgb24gYW4gaW1wbGVtZW50YXRpb24gb2YgT2JqZWN0IFNoYXBlcyBmb3IgUnVieS4g IFdlIGFyZSBmaWxpbmcgYSB0aWNrZXQgdG8gc2hhcmUgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5nLCBh cyB3ZWxsIGFzIGdldCBmZWVkYmFjayBvbiB0aGUgcHJvamVjdCBpbiBpdHMgY3VycmVudCBzdGF0 ZS4KCldlIGhvcGUgdG8gZXZlbnR1YWxseSBzdWJtaXQgdGhlIGZpbmFsaXplZCBwcm9qZWN0IHVw c3RyZWFtIGFmdGVyIHZlcmlmeWluZyBlZmZpY2FjeS4KCiMjIFdoYXQgYXJlIE9iamVjdCBTaGFw ZXM/CgpPYmplY3Qgc2hhcGVzIGFyZSBhIHRlY2huaXF1ZSBmb3IgcmVwcmVzZW50aW5nIHByb3Bl cnRpZXMgb2YgYW4gb2JqZWN0LiBPdGhlciBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbnMsIGluY2x1 ZGluZyBbVHJ1ZmZsZVJ1YnldKGh0dHBzOi8vZ2l0aHViLmNvbS9vcmFjbGUvdHJ1ZmZsZXJ1Ynkp IGFuZCBbVjhdKGh0dHBzOi8vdjguZGV2LyksIHVzZSB0aGlzIHRlY2huaXF1ZS4gQ2hyaXMgU2Vh dG9uLCB0aGUgY3JlYXRvciBvZiBUcnVmZmxlUnVieSwgZGlzY3Vzc2VkIG9iamVjdCBzaGFwZXMg aW4gaGlzIFtSdWJ5S2FpZ2kgMjAyMSBLZXlub3RlXShodHRwczovL3J1YnlrYWlnaS5vcmcvMjAy MS10YWtlb3V0L3ByZXNlbnRhdGlvbnMvY2hyaXNnc2VhdG9uLmh0bWwpIGFuZCBNYXhpbWUgQ2hl dmFsaWVyLUJvaXN2ZXJ0IGRpc2N1c3NlZCB0aGUgaW1wbGljYXRpb25zIGZvciBZSklUIGluIHRo ZSBsYXR0ZXIgcGFydCBvZiBbaGVyIHRhbGsgYXQgUnVieUthaWdpIDIwMjFdKGh0dHBzOi8vd3d3 LnlvdXR1YmUuY29tL3dhdGNoP3Y9UEJWTGYzeWZNczgmdD0xMTAwcykuIFRoZSBvcmlnaW5hbCBp ZGVhIG9mIG9iamVjdCBzaGFwZXMgW29yaWdpbmF0ZXMgZnJvbSB0aGUgU2VsZiBsYW5ndWFnZV0o aHR0cHM6Ly9iaWJsaW9ncmFwaHkuc2VsZmxhbmd1YWdlLm9yZy9fc3RhdGljL2ltcGxlbWVudGF0 aW9uLnBkZiksIHdoaWNoIGlzIGNvbnNpZGVyZWQgYSBkaXJlY3QgZGVzY2VuZGFudCBvZiBTbWFs bHRhbGsuCgpFYWNoIHNoYXBlIHJlcHJlc2VudHMgYSBzcGVjaWZpYyBzZXQgb2YgYXR0cmlidXRl cyAoaW5zdGFuY2UgdmFyaWFibGVzIGFuZCBvdGhlciBwcm9wZXJ0aWVzKSBhbmQgdGhlaXIgdmFs dWVzLiBJbiBvdXIgaW1wbGVtZW50YXRpb24sIGFsbCBvYmplY3RzIGhhdmUgYSBzaGFwZS4gVGhl IHNoYXBlcyBhcmUgbm9kZXMgaW4gYSB0cmVlIGRhdGEgc3RydWN0dXJlLiBFdmVyeSBlZGdlIGlu IHRoZSB0cmVlIHJlcHJlc2VudHMgYW4gYXR0cmlidXRlIHRyYW5zaXRpb24uCgpNb3JlIHNwZWNp ZmljYWxseSwgc2V0dGluZyBhbiBpbnN0YW5jZSB2YXJpYWJsZSBvbiBhbiBpbnN0YW5jZSBvZiBh biBvYmplY3QgY3JlYXRlcyBhbiBvdXRnb2luZyBlZGdlIGZyb20gdGhlIGluc3RhbmNlJ3MgY3Vy cmVudCBzaGFwZS4gVGhpcyBpcyBhIHRyYW5zaXRpb24gZnJvbSBvbmUgc2hhcGUgdG8gYW5vdGhl ci4gVGhlIGVkZ2UgcmVwcmVzZW50cyB0aGUgaW5zdGFuY2UgdmFyaWFibGUgdGhhdCBpcyBzZXQu CgpGb3IgZXhhbXBsZToKCmBgYHJ1YnkKY2xhc3MgRm9vCiAgZGVmIGluaXRpYWxpemUKICAgICMg Q3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApCiAgICBAYSA9 IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYSAoSUQgMSkKICAgIEBi ID0gMiAjIFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBiIChJRCAyKQogIGVu ZAplbmQKCmZvbyA9IEZvby5uZXcKYGBgCgpXaGVuIGBGb29gIGlzIGludGlhbGl6ZWQsIGl0cyBz aGFwZSBpcyB0aGUgcm9vdCBzaGFwZSB3aXRoIElEIDAuICBUaGUgcm9vdCBzaGFwZSByZXByZXNl bnRzIGFuIGVtcHR5IG9iamVjdCB3aXRoIG5vIGluc3RhbmNlIHZhcmlhYmxlcy4gRWFjaCB0aW1l IGFuIGluc3RhbmNlIHZhcmlhYmxlIGlzIHNldCBvbiBgZm9vYCwgdGhlIHNoYXBlIG9mIHRoZSBp bnN0YW5jZSBjaGFuZ2VzLiBJdCBmaXJzdCB0cmFuc2l0aW9ucyB3aXRoIGBAYWAgdG8gYSBzaGFw ZSB3aXRoIElEIDEsIGFuZCB0aGVuIHRyYW5zaXRpb25zIHdpdGggYEBiYCB0byBhIHNoYXBlIHdp dGggSUQgMi4gSWYgYEBhYCBpcyB0aGVuIHNldCB0byBhIGRpZmZlcmVudCB2YWx1ZSwgaXRzIHNo YXBlIHdpbGwgcmVtYWluIHRoZSBzaGFwZSB3aXRoIElEIDIsIHNpbmNlIHRoaXMgc2hhcGUgYWxy ZWFkeSBpbmNsdWRlcyB0aGUgaW5zdGFuY2UgdmFyaWFibGUgYEBhYC4gIAoKIVtdKGh0dHBzOi8v dXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3OTE4MzYwLTBhNmM5 MWFhLTI1ODctNDhjYi04ZmYyLTdmM2E5NTgzMjg4ZS5zdmcpCgpUaGVyZSBpcyBvbmUgZ2xvYmFs IHNoYXBlIHRyZWUgYW5kIG9iamVjdHMgd2hpY2ggdW5kZXJnbyB0aGUgc2FtZSBzaGFwZSB0cmFu c2l0aW9ucyBpbiB0aGUgc2FtZSBvcmRlciB3aWxsIGVuZCB1cCB3aXRoIHRoZSBzYW1lIGZpbmFs IHNoYXBlLgoKRm9yIGluc3RhbmNlLCBpZiB3ZSBoYXZlIGEgY2xhc3MgYEJhcmAgZGVmaW5lZCBh cyBmb2xsb3dzLCB0aGUgZmlyc3QgdHJhbnNpdGlvbiBvbiBgQmFyLm5ld2AgdGhyb3VnaCB0aGUg aW5zdGFuY2UgdmFyaWFibGUgYEBhYCB3aWxsIGJlIHRoZSBzYW1lIGFzIGBGb28ubmV3YCdzIGZp cnN0IHRyYW5zaXRpb246CgpgYGBydWJ5CmNsYXNzIEZvbwogIGRlZiBpbml0aWFsaXplCiAgICAj IEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAwKQogICAgQGEg PSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGEgKElEIDEpCiAgICBA YiA9IDIgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYiAoSUQgMikKICBl bmQKZW5kCgpjbGFzcyBCYXIKICBkZWYgaW5pdGlhbGl6ZQogICAgIyBDdXJyZW50bHkgdGhpcyBp bnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkKICAgIEBhID0gMSAjIFRyYW5zaXRpb25z IHRvIHNoYXBlIGRlZmluZWQgZWFybGllciB2aWEgZWRnZSBAYSAoSUQgMSkKICAgIEBjID0gMSAj IFRyYW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBjIChJRCAzKQogICAgQGIgPSAx ICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElEIDQpCiAgZW5kCmVu ZAoKZm9vID0gRm9vLm5ldyAjIGJsdWUgaW4gdGhlIGRpYWdyYW0KYmFyID0gQmFyLm5ldyAjIHJl ZCBpbiB0aGUgZGlhZ3JhbQpgYGAKCkluIHRoZSBkaWFncmFtIGJlbG93LCBwdXJwbGUgcmVwcmVz ZW50cyBzaGFyZWQgdHJhbnNpdGlvbnMsIGJsdWUgcmVwcmVzZW50cyB0cmFuc2l0aW9ucyBmb3Ig b25seSBgZm9vYCwgYW5kIHJlZCByZXByZXNlbnRzIHRyYW5zaXRpb25zIGZvciBvbmx5IGBiYXJg LgoKIVtdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1NjAv MTY3OTE4ODk5LWYxYTZmMzQ0LWFlNWUtNGRjMC1iMTdhLWZiMTU2ZDFkNTUwZi5zdmcpCgojIyMg Q2FjaGUgc3RydWN0dXJlCgpGb3IgaW5zdGFuY2UgdmFyaWFibGUgd3JpdGVycywgdGhlIGN1cnJl bnQgc2hhcGUgSUQsIHRoZSBzaGFwZSBJRCB0aGF0IGl2YXIgd3JpdGUgd291bGQgdHJhbnNpdGlv biB0byBhbmQgaW5zdGFuY2UgdmFyaWFibGUgaW5kZXggYXJlIGFsbCBzdG9yZWQgaW4gdGhlIGlu bGluZSBjYWNoZS4gVGhlIHNoYXBlIElEIGlzIHRoZSBrZXkgdG8gdGhlIGNhY2hlLgoKRm9yIGlu c3RhbmNlIHZhcmlhYmxlIHJlYWRlcnMsIHRoZSBzaGFwZSBJRCBhbmQgaW5zdGFuY2UgdmFyaWFi bGUgaW5kZXggYXJlIHN0b3JlZCBpbiB0aGUgaW5saW5lIGNhY2hlLiAgQWdhaW4sIHRoZSBzaGFw ZSBJRCBpcyB0aGUgY2FjaGUga2V5LgoKYGBgcnVieQpjbGFzcyBGb28KICBkZWYgaW5pdGlhbGl6 ZQogICAgQGEgPSAxICMgSUMgc2hhcGVfaWQ6IDAsIG5leHQgc2hhcGU6IDEsIGl2IGluZGV4IDAK ICAgIEBiID0gMSAjIElDIHNoYXBlX2lkOiAxLCBuZXh0IHNoYXBlOiAyLCBpdiBpbmRleCAxCiAg ZW5kCiAgICAKICBkZWYgYQogICAgQGEgIyBJQyBzaGFwZV9pZDogMiwgaXYgaW5kZXggMAogIGVu ZAplbmQKYGBgCgojIyBSYXRpb25hbGUKCldlIHRoaW5rIHRoYXQgYW4gb2JqZWN0IHNoYXBlIGlt cGxlbWVudGF0aW9uIHdpbGwgc2ltcGxpZnkgY2FjaGUgY2hlY2tzLCBpbmNyZWFzZSBpbmxpbmUg Y2FjaGUgaGl0cywgZGVjcmVhc2UgcnVudGltZSBjaGVja3MsIGFuZCBlbmFibGUgb3RoZXIgcG90 ZW50aWFsIGZ1dHVyZSBvcHRpbWl6YXRpb25zLiBUaGVzZSBhcmUgYWxsIGV4cGxhaW5lZCBiZWxv dy4gCgojIyMgU2ltcGxpZnkgY2FjaGluZwoKVGhlIGN1cnJlbnQgY2FjaGUgaW1wbGVtZW50YXRp b24gZGVwZW5kcyBvbiB0aGUgY2xhc3Mgb2YgdGhlIHJlY2VpdmVyLiBTaW5jZSB0aGUgYWRkcmVz cyBvZiB0aGUgY2xhc3MgY2FuIGJlIHJldXNlZCwgdGhlIGN1cnJlbnQgY2FjaGUgaW1wbGVtZW50 YXRpb24gYWxzbyBkZXBlbmRzIG9uIGFuIGluY3JlbWVudGluZyBzZXJpYWwgbnVtYmVyIHNldCBv biB0aGUgY2xhc3MgKHRoZSBjbGFzcyBzZXJpYWwpLiAgVGhlIHNoYXBlIGltcGxlbWVudGF0aW9u IGhhcyBubyBzdWNoIGRlcGVuZGVuY3kuIEl0IG9ubHkgcmVxdWlyZXMgY2hlY2tpbmcgdGhlIHNo YXBlIElEIHRvIGRldGVybWluZSBpZiB0aGUgY2FjaGUgaXMgdmFsaWQuCgojIyMgQ2FjaGUgaGl0 cwoKT2JqZWN0cyB0aGF0IHNldCBwcm9wZXJ0aWVzIGluIHRoZSBzYW1lIG9yZGVyIGNhbiBzaGFy ZSBzaGFwZXMuICBGb3IgZXhhbXBsZToKCmBgYHJ1YnkKY2xhc3MgSG9nZQogIGRlZiBpbml0aWFs aXplCiAgICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlzIHRoZSByb290IHNoYXBlIChJRCAw KQogICAgQGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gdGhlIG5leHQgc2hhcGUgdmlhIGVkZ2UgbmFt ZWQgQGEKICAgIEBiID0gMiAjIFRyYW5zaXRpb25zIHRvIG5leHQgc2hhcGUgdmlhIGVkZ2UgbmFt ZWQgQGIKICBlbmQKZW5kCgpjbGFzcyBGdWdhIDwgSG9nZTsgZW5kCgpob2dlID0gSG9nZS5uZXcK ZnVnYSA9IEZ1Z2EubmV3CmBgYAoKSW4gdGhlIGFib3ZlIGV4YW1wbGUsIHRoZSBpbnN0YW5jZXMg YGhvZ2VgIGFuZCBgZnVnYWAgd2lsbCBzaGFyZSB0aGUgc2FtZSBzaGFwZSBJRC4gIFRoaXMgbWVh bnMgaW5saW5lIGNhY2hlcyBpbiBgaW5pdGlhbGl6ZWAgd2lsbCBoaXQgaW4gYm90aCBjYXNlcy4g IFRoaXMgY29udHJhc3RzIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdGhhdCB1c2Vz IHRoZSBjbGFzcyBhcyB0aGUgY2FjaGUga2V5LiAgSW4gb3RoZXIgd29yZHMsIHdpdGggb2JqZWN0 IHNoYXBlcyB0aGUgYWJvdmUgY29kZSB3aWxsIGhpdCBpbmxpbmUgY2FjaGVzIHdoZXJlIHRoZSBj dXJyZW50IGltcGxlbWVudGF0aW9uIHdpbGwgbWlzcy4KCklmIHBlcmZvcm1hbmNlIHRlc3Rpbmcg cmV2ZWFscyB0aGF0IGNhY2hlIGhpdHMgYXJlICpub3QqIHN1YnN0YW50aWFsbHkgaW1wcm92ZWQs IHRoZW4gd2UgY2FuIHVzZSBzaGFwZXMgdG8gcmVjbGFpbSBtZW1vcnkgZnJvbSBgUkJhc2ljYC4g V2UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSBlbmNvZGluZyB0aGUgY2xhc3Mgd2l0aGluIHRoZSBz aGFwZSB0cmVlLiBUaGlzIHdpbGwgaGF2ZSBhbiBlcXVpdmFsZW50IGNhY2hlIGhpdCByYXRlIHRv IHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiBPbmNlIHRoZSBjbGFzcyBpcyBlbmNvZGVkIHdp dGhpbiB0aGUgc2hhcGUgdHJlZSwgd2UgY2FuIHJlbW92ZSB0aGUgY2xhc3MgcG9pbnRlciBmcm9t IGBSQmFzaWNgIGFuZCBlaXRoZXIgcmVjbGFpbSB0aGF0IG1lbW9yeSBvciBmcmVlIGl0IGZvciBh bm90aGVyIHVzZS4KCiMjIyBEZWNyZWFzZXMgcnVudGltZSBjaGVja2luZwoKV2UgY2FuIGVuY29k ZSBhdHRyaWJ1dGVzIHRoYXQgYXJlbid0IGluc3RhbmNlIHZhcmlhYmxlcyBpbnRvIGFuIG9iamVj dCdzIHNoYXBlLiBDdXJyZW50bHksIHdlIGFsc28gaW5jbHVkZSBmcm96ZW4gd2l0aGluIHRoZSBz aGFwZS4gVGhpcyBtZWFucyB3ZSBjYW4gbGltaXQgZnJvemVuIGNoZWNrcyB0byBvbmx5IGNhY2hl IG1pc3Nlcy4KCkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGU6CgpgYGBydWJ5CmNsYXNz IFRvdG8KICBkZWYgc2V0X2EKICAgIEBhID0gMSAjIGNhY2hlOiBzaGFwZTogMCwgbmV4dCBzaGFw ZTogMSwgSVYgaWR4OiAwCiAgZW5kCmVuZAoKdG90byA9IFRvdG8ubmV3ICMgc2hhcGUgMAp0b3Rv LnNldF9hICAgICAjIHNoYXBlIDEKCnRvdG8gPSBUb3RvLm5ldyAjIHNoYXBlIDAKdG90by5mcmVl emUgICAgIyBzaGFwZSAyCnRvdG8uc2V0X2EgICAgICMgQ2FjaGUgbWlzcywgRXhjZXB0aW9uIQpg YGAKCiFbXShodHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xOTg4NTYw LzE2NzkyMDAwMS1jNGU2MzI2Yi0zYTNjLTQ4M2ItYTc5Ny05ZTAyMzE3NjQ3ZDcuc3ZnKQoKV2l0 aG91dCBzaGFwZXMsIGFsbCBpbnN0YW5jZSB2YXJpYWJsZSBzZXRzIHJlcXVpcmUgY2hlY2tpbmcg dGhlIGZyb3plbiBzdGF0dXMgb2YgdGhlIG9iamVjdC4gV2l0aCBzaGFwZXMsIHdlIG9ubHkgbmVl ZCB0byBjaGVjayB0aGUgZnJvemVuIHN0YXR1cyBvbiBjYWNoZSBtaXNzZXMuCgpXZSBjYW4gYWxz byBlbGltaW5hdGUgZW1iZWRkZWQgYW5kIGV4dGVuZGVkIGNoZWNrcyB3aXRoIHRoZSBpbnRyb2R1 Y3Rpb24gb2Ygb2JqZWN0IHNoYXBlcy4gQW55IHBhcnRpY3VsYXIgc2hhcGUgcmVwcmVzZW50cyBh biBvYmplY3QgdGhhdCBpcyBfZWl0aGVyXyBleHRlbmRlZCBvciBlbWJlZGRlZC4gSklUcyBjYW4g cG9zc2libHkgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmYWN0IGJ5IGdlbmVyYXRpbmcgc3BlY2lh bGl6ZWQgbWFjaGluZSBjb2RlIGJhc2VkIG9uIHRoZSBzaGFwZXMuIAogICAgCiMjIyBDbGFzcyBp bnN0YW5jZSB2YXJpYWJsZXMgY2FuIGJlIHN0b3JlZCBpbiBhbiBhcnJheQoKQ3VycmVudGx5LCBg VF9DTEFTU2AgYW5kIGBUX01PRFVMRWAgaW5zdGFuY2VzIGNhbm5vdCB1c2UgdGhlIHNhbWUgSVYg aW5kZXggdGFibGUgb3B0aW1pemF0aW9uIHRoYXQgYFRfT0JKRUNUYCBpbnN0YW5jZXMgdXNlLiAg V2UgdGhpbmsgdGhhdCB0aGUgb2JqZWN0IHNoYXBlcyB0ZWNobmlxdWUgY2FuIGJlIGxldmVyYWdl ZCBieSBjbGFzcyBpbnN0YW5jZXMgdG8gdXNlIGFycmF5cyBmb3IgY2xhc3MgaW5zdGFuY2UgdmFy aWFibGUgc3RvcmFnZSBhbmQgbWF5IHBvc3NpYmx5IGxlYWQgdG8gYSByZWR1Y3Rpb24gaW4gbWVt b3J5IHVzYWdlICh0aG91Z2ggd2UgaGF2ZSB5ZXQgdG8gdGVzdCB0aGlzKS4KCiMjIEltcGxlbWVu dGF0aW9uIERldGFpbHMKCltIZXJlXShodHRwczovL2dpdGh1Yi5jb20vamVtbWFpc3Nyb2ZmL3J1 YnkvY29tbWl0LzRlOTVkMDE2NTRmMjRjZWZmNmM4MzMwY2Y0ZTVjN2RhYzUwNDczOWUpIGlzIGEg bGluayB0byBvdXIgY29kZSBzbyBmYXIuCgpBcyBtZW50aW9uZWQgZWFybGllciwgc2hhcGUgb2Jq ZWN0cyBmb3JtIGEgdHJlZSBkYXRhIHN0cnVjdHVyZS4gIEluIG9yZGVyIHRvIGxvb2sgdXAgdGhl IHNoYXBlIHF1aWNrbHksIHdlIGFsc28gc3RvcmUgdGhlIHNoYXBlcyBpbiBhIHdlYWsgYXJyYXkg dGhhdCBpcyBzdG9yZWQgb24gdGhlIFZNLiAgVGhlIElEIG9mIHRoZSBzaGFwZSBpcyB0aGUgaW5k ZXggaW4gdG8gdGhlIGFycmF5LCBhbmQgdGhlIElEIGlzIHN0b3JlZCBvbiB0aGUgb2JqZWN0LgoK Rm9yIGBUX09CSkVDVGAgb2JqZWN0cywgd2Ugc3RvcmUgdGhlIHNoYXBlIElEIGluIHRoZSBvYmpl Y3QncyBoZWFkZXIuIE9uIDY0IGJpdCBzeXN0ZW1zLCB0aGUgdXBwZXIgMzIgYml0cyBhcmUgdXNl ZCBieSBSYWN0b3JzLiAgV2Ugd2FudCBvYmplY3Qgc2hhcGVzIHRvIGJlIGVuYWJsZWQgb24gMzIg Yml0IHN5c3RlbXMgYW5kIDY0IGJpdCBzeXN0ZW1zIHNvIHRoYXQgbGltaXRzIHVzIHRvIHRoZSBi b3R0b20gMzIgYml0cyBvZiB0aGUgT2JqZWN0IGhlYWRlci4gIFRoZSB0b3AgMjAgYml0cyBmb3Ig YFRfT0JKRUNUYCBvYmplY3RzIHdhcyB1bnVzZWQsIHNvIHdlIHVzZWQgdGhlIHRvcCAxNiBiaXRz IGZvciB0aGUgc2hhcGUgaWQuICBXZSBjaG9zZSB0aGUgdG9wIDE2IGJpdHMgYmVjYXVzZSB0aGlz IGFsbG93cyB1cyB0byB1c2UgYHVpbnQxNl90YCBhbmQgbWFza2luZyB0aGUgaGVhZGVyIGJpdHMg aXMgZWFzaWVyLgoKVGhpcyBpbXBsZW1lbnRhdGlvbiBkZXRhaWwgbGltaXRzIHVzIHRvIH42NWsg c2hhcGVzLiBXZSBtZWFzdXJlZCB0aGUgbnVtYmVyIG9mIHNoYXBlcyB1c2VkIG9uIGEgc2ltcGxl IFtEaXNjb3Vyc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3Vyc2UvZGlzY291cnNlKSBhcHBs aWNhdGlvbiAofjMuNWspLCBbUmFpbHNCZW5jaF0oaHR0cHM6Ly9naXRodWIuY29tL2swa3VidW4v cmFpbHNiZW5jaCkgKH40ayksIGFuZCBTaG9waWZ5J3MgbW9ub2xpdGgncyB0ZXN0IHN1aXRlICh+ NDBrKS4gQWNjb3JkaW5nbHksIHdlIGRlY2lkZWQgdG8gaW1wbGVtZW50IGdhcmJhZ2UgY29sbGVj dGlvbiBvbiBvYmplY3Qgc2hhcGVzIHNvIHdlIGNhbiByZWN5Y2xlIHNoYXBlIElEcyB3aGljaCBh cmUgbm8gbG9uZ2VyIGluIHVzZS4gIFdlIGFyZSBjdXJyZW50bHkgd29ya2luZyBvbiBzaGFwZSBH Qy4KCkV2ZW4gdGhvdWdoIGl0J3MgdW5saWtlbHksIGl0J3Mgc3RpbGwgcG9zc2libGUgZm9yIGFu IGFwcGxpY2F0aW9uIHRvIHJ1biBvdXQgb2Ygc2hhcGVzLiBPbmNlIGFsbCBzaGFwZSBJRHMgYXJl IGluIHVzZSwgYW55IG9iamVjdHMgdGhhdCBuZWVkIG5ldyBzaGFwZSBJRHMgd2lsbCBuZXZlciBo aXQgb24gaW5saW5lIGNhY2hlcy4KCiMjIEV2YWx1YXRpb24KCldlIGhhdmUgc28gZmFyIHRlc3Rl ZCB0aGlzIGJyYW5jaCB3aXRoIFtEaXNjb3Vyc2VdKGh0dHBzOi8vZ2l0aHViLmNvbS9kaXNjb3Vy c2UvZGlzY291cnNlKSwgW1JhaWxzQmVuY2hdKGh0dHBzOi8vZ2l0aHViLmNvbS9rMGt1YnVuL3Jh aWxzYmVuY2gpIGFuZCBTaG9waWZ5J3MgbW9ub2xpdGguIFdlIHBsYW4gdG8gdGVzdCB0aGlzIGJy YW5jaCBtb3JlIGJyb2FkbHkgYWdhaW5zdCBzZXZlcmFsIG9wZW4gc291cmNlIFJ1YnkgYW5kIFJh aWxzIGFwcGxpY2F0aW9ucy4gCgpCZWZvcmUgd2UgY29uc2lkZXIgdGhpcyBicmFuY2ggdG8gYmUg cmVhZHkgZm9yIGZvcm1hbCByZXZpZXcsIHdlIHdhbnQgdGhlIHJ1bnRpbWUgcGVyZm9ybWFuY2Ug YW5kIG1lbW9yeSB1c2FnZSBvZiB0aGVzZSBiZW5jaG1hcmtzIHRvIGJlIGVxdWl2YWxlbnQgb3Ig YmV0dGVyIHRoYW4gaXQgaXMgY3VycmVudGx5LiBJbiBvdXIgb3BpbmlvbiwgZXZlbiB3aXRoIGVx dWl2YWxlbnQgcnVudGltZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IHVzYWdlLCB0aGUgZnV0dXJl IGJlbmVmaXRzIG9mIHRoaXMgYXBwcm9hY2ggbWFrZSB0aGUgY2hhbmdlIHNlZW0gd29ydGh3aGls ZS4KCiMjIEZlZWRiYWNrCgpJZiB5b3UgaGF2ZSBhbnkgZmVlZGJhY2ssIGNvbW1lbnRzLCBvciBx dWVzdGlvbnMsIHBsZWFzZSBsZXQgdXMga25vdyBhbmQgd2UnbGwgZG8gb3VyIGJlc3QgdG8gYWRk cmVzcyBpdC4gVGhhbmsgeW91IQoKLS0tRmlsZXMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQpvYmplY3Qtc2hhcGVzLnBhdGNoICgxODAgS0IpCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5 LWxhbmcub3JnLwo=