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, SPF_PASS,T_SCC_BODY_TEXT_LINE,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 17A151F4D7 for ; Thu, 12 May 2022 20:20:43 +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="OUs/0sJm"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 28E55120A61; Fri, 13 May 2022 05:20:39 +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 D1B72120A3E for ; Fri, 13 May 2022 05:20:36 +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; s=smtpapi; bh=E18u8CnAS0BmjAc6Xl5yK4nZ41dt2euOdvIezIBxIzg=; b=OUs/0sJmD5pOo7TBzZLzVd/PG0QoOVCbQU88ISRhDABv2iYMCZy7mWYUkHnIYBNFST8Z BfOhcYLbj7+g1Viu5wg9a5eJ6Iq5xrJxvhwxcX4PqNLrw57EaST/qxamOWJhHAVbrcBrhg IEAdZWeaxNT0UN9lx830S3MFhePQ1iWkM= Received: by filterdrecv-74cbf9986b-stf76 with SMTP id filterdrecv-74cbf9986b-stf76-1-627D6C13-4 2022-05-12 20:20:35.102782714 +0000 UTC m=+3105358.441494302 Received: from herokuapp.com (unknown) by geopod-ismtpd-2-0 (SG) with ESMTP id rk26brBpQ1qix8FY_o3eiA for ; Thu, 12 May 2022 20:20:34.998 +0000 (UTC) Date: Thu, 12 May 2022 20:20:35 +0000 (UTC) From: "byroot (Jean Boussier)" 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: byroot 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: 84902 X-SG-EID: =?us-ascii?Q?Dq8GNIcVqP8cs5uR+EIAabfg3LE9XdC6dZ5KYNrMpf6VzBWG6HqArcu5raQjXL?= =?us-ascii?Q?IGTFdxKHUt7++67+KD54pNYXheirMcsUIf3sdgF?= =?us-ascii?Q?Riq06jm1oyg+Nq2ChTlgmfArsjbyoTxYHXmriyl?= =?us-ascii?Q?DdEfL7iO5hQF4hEvs0GbnPyNNfD=2F0EYZz6qdIxn?= =?us-ascii?Q?n5Fzi055NukjfDJEFMJDz+747uJwKK+pIJlu2hS?= =?us-ascii?Q?xL4H5DePX2sm5sOL9Tpdf81xx8pP+5=2Fb0JM1kVk?= =?us-ascii?Q?rfiLU8NjwNy1zdOIECkJg=3D=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 108533 Subject: [ruby-core:108533] [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" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgYnlyb290IChKZWFuIEJvdXNzaWVyKS4K Cgo+IElmIHlvdSBjYWxsIG1lbW9pemVkIG1ldGhvZHMgaW4gYSBkaWZmZXJlbnQgb3JkZXIsIHdv dWxkIHRoYXQgY2F1c2UgaW5zdGFuY2VzIG9mIHRoZSBzYW1lIGNsYXNzIHRvIGhhdmUgbXVsdGlw bGUgc2hhcGVzPwoKWWVzLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQpGZWF0dXJlICMxODc3NjogT2JqZWN0IFNoYXBlcwpodHRwczovL2J1Z3MucnVieS1sYW5nLm9y Zy9pc3N1ZXMvMTg3NzYjY2hhbmdlLTk3NTc3CgoqIEF1dGhvcjogamVtbWFpIChKZW1tYSBJc3Ny b2ZmKQoqIFN0YXR1czogT3BlbgoqIFByaW9yaXR5OiBOb3JtYWwKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE9iamVjdCBTaGFwZXMgaW1wbGVtZW50YXRpb24KCkFh cm9uIFBhdHRlcnNvbiwgRWlsZWVuIFVjaGl0ZWxsZSBhbmQgSSBoYXZlIGJlZW4gd29ya2luZyBv biBhbiBpbXBsZW1lbnRhdGlvbiBvZiBPYmplY3QgU2hhcGVzIGZvciBSdWJ5LiAgV2UgYXJlIGZp bGluZyBhIHRpY2tldCB0byBzaGFyZSB3aGF0IHdlJ3ZlIGJlZW4gZG9pbmcsIGFzIHdlbGwgYXMg Z2V0IGZlZWRiYWNrIG9uIHRoZSBwcm9qZWN0IGluIGl0cyBjdXJyZW50IHN0YXRlLgoKV2UgaG9w ZSB0byBldmVudHVhbGx5IHN1Ym1pdCB0aGUgZmluYWxpemVkIHByb2plY3QgdXBzdHJlYW0gYWZ0 ZXIgdmVyaWZ5aW5nIGVmZmljYWN5LgoKIyMgV2hhdCBhcmUgT2JqZWN0IFNoYXBlcz8KCk9iamVj dCBzaGFwZXMgYXJlIGEgdGVjaG5pcXVlIGZvciByZXByZXNlbnRpbmcgcHJvcGVydGllcyBvZiBh biBvYmplY3QuIE90aGVyIGxhbmd1YWdlIGltcGxlbWVudGF0aW9ucywgaW5jbHVkaW5nIFtUcnVm ZmxlUnVieV0oaHR0cHM6Ly9naXRodWIuY29tL29yYWNsZS90cnVmZmxlcnVieSkgYW5kIFtWOF0o aHR0cHM6Ly92OC5kZXYvKSwgdXNlIHRoaXMgdGVjaG5pcXVlLiBDaHJpcyBTZWF0b24sIHRoZSBj cmVhdG9yIG9mIFRydWZmbGVSdWJ5LCBkaXNjdXNzZWQgb2JqZWN0IHNoYXBlcyBpbiBoaXMgW1J1 YnlLYWlnaSAyMDIxIEtleW5vdGVdKGh0dHBzOi8vcnVieWthaWdpLm9yZy8yMDIxLXRha2VvdXQv cHJlc2VudGF0aW9ucy9jaHJpc2dzZWF0b24uaHRtbCkgYW5kIE1heGltZSBDaGV2YWxpZXItQm9p c3ZlcnQgZGlzY3Vzc2VkIHRoZSBpbXBsaWNhdGlvbnMgZm9yIFlKSVQgaW4gdGhlIGxhdHRlciBw YXJ0IG9mIFtoZXIgdGFsayBhdCBSdWJ5S2FpZ2kgMjAyMV0oaHR0cHM6Ly93d3cueW91dHViZS5j b20vd2F0Y2g/dj1QQlZMZjN5Zk1zOCZ0PTExMDBzKS4gVGhlIG9yaWdpbmFsIGlkZWEgb2Ygb2Jq ZWN0IHNoYXBlcyBbb3JpZ2luYXRlcyBmcm9tIHRoZSBTZWxmIGxhbmd1YWdlXShodHRwczovL2Jp Ymxpb2dyYXBoeS5zZWxmbGFuZ3VhZ2Uub3JnL19zdGF0aWMvaW1wbGVtZW50YXRpb24ucGRmKSwg d2hpY2ggaXMgY29uc2lkZXJlZCBhIGRpcmVjdCBkZXNjZW5kYW50IG9mIFNtYWxsdGFsay4KCkVh Y2ggc2hhcGUgcmVwcmVzZW50cyBhIHNwZWNpZmljIHNldCBvZiBhdHRyaWJ1dGVzIChpbnN0YW5j ZSB2YXJpYWJsZXMgYW5kIG90aGVyIHByb3BlcnRpZXMpIGFuZCB0aGVpciB2YWx1ZXMuIEluIG91 ciBpbXBsZW1lbnRhdGlvbiwgYWxsIG9iamVjdHMgaGF2ZSBhIHNoYXBlLiBUaGUgc2hhcGVzIGFy ZSBub2RlcyBpbiBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUuIEV2ZXJ5IGVkZ2UgaW4gdGhlIHRyZWUg cmVwcmVzZW50cyBhbiBhdHRyaWJ1dGUgdHJhbnNpdGlvbi4KCk1vcmUgc3BlY2lmaWNhbGx5LCBz ZXR0aW5nIGFuIGluc3RhbmNlIHZhcmlhYmxlIG9uIGFuIGluc3RhbmNlIG9mIGFuIG9iamVjdCBj cmVhdGVzIGFuIG91dGdvaW5nIGVkZ2UgZnJvbSB0aGUgaW5zdGFuY2UncyBjdXJyZW50IHNoYXBl LiBUaGlzIGlzIGEgdHJhbnNpdGlvbiBmcm9tIG9uZSBzaGFwZSB0byBhbm90aGVyLiBUaGUgZWRn ZSByZXByZXNlbnRzIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSB0aGF0IGlzIHNldC4KCkZvciBleGFt cGxlOgoKYGBgcnVieQpjbGFzcyBGb28KICBkZWYgaW5pdGlhbGl6ZQogICAgIyBDdXJyZW50bHkg dGhpcyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkKICAgIEBhID0gMSAjIFRyYW5z aXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBhIChJRCAxKQogICAgQGIgPSAyICMgVHJh bnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGIgKElEIDIpCiAgZW5kCmVuZAoKZm9v ID0gRm9vLm5ldwpgYGAKCldoZW4gYEZvb2AgaXMgaW50aWFsaXplZCwgaXRzIHNoYXBlIGlzIHRo ZSByb290IHNoYXBlIHdpdGggSUQgMC4gIFRoZSByb290IHNoYXBlIHJlcHJlc2VudHMgYW4gZW1w dHkgb2JqZWN0IHdpdGggbm8gaW5zdGFuY2UgdmFyaWFibGVzLiBFYWNoIHRpbWUgYW4gaW5zdGFu Y2UgdmFyaWFibGUgaXMgc2V0IG9uIGBmb29gLCB0aGUgc2hhcGUgb2YgdGhlIGluc3RhbmNlIGNo YW5nZXMuIEl0IGZpcnN0IHRyYW5zaXRpb25zIHdpdGggYEBhYCB0byBhIHNoYXBlIHdpdGggSUQg MSwgYW5kIHRoZW4gdHJhbnNpdGlvbnMgd2l0aCBgQGJgIHRvIGEgc2hhcGUgd2l0aCBJRCAyLiBJ ZiBgQGFgIGlzIHRoZW4gc2V0IHRvIGEgZGlmZmVyZW50IHZhbHVlLCBpdHMgc2hhcGUgd2lsbCBy ZW1haW4gdGhlIHNoYXBlIHdpdGggSUQgMiwgc2luY2UgdGhpcyBzaGFwZSBhbHJlYWR5IGluY2x1 ZGVzIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSBgQGFgLiAgCgohW10oaHR0cHM6Ly91c2VyLWltYWdl cy5naXRodWJ1c2VyY29udGVudC5jb20vMTk4ODU2MC8xNjc5MTgzNjAtMGE2YzkxYWEtMjU4Ny00 OGNiLThmZjItN2YzYTk1ODMyODhlLnN2ZykKClRoZXJlIGlzIG9uZSBnbG9iYWwgc2hhcGUgdHJl ZSBhbmQgb2JqZWN0cyB3aGljaCB1bmRlcmdvIHRoZSBzYW1lIHNoYXBlIHRyYW5zaXRpb25zIGlu IHRoZSBzYW1lIG9yZGVyIHdpbGwgZW5kIHVwIHdpdGggdGhlIHNhbWUgZmluYWwgc2hhcGUuCgpG b3IgaW5zdGFuY2UsIGlmIHdlIGhhdmUgYSBjbGFzcyBgQmFyYCBkZWZpbmVkIGFzIGZvbGxvd3Ms IHRoZSBmaXJzdCB0cmFuc2l0aW9uIG9uIGBCYXIubmV3YCB0aHJvdWdoIHRoZSBpbnN0YW5jZSB2 YXJpYWJsZSBgQGFgIHdpbGwgYmUgdGhlIHNhbWUgYXMgYEZvby5uZXdgJ3MgZmlyc3QgdHJhbnNp dGlvbjoKCmBgYHJ1YnkKY2xhc3MgRm9vCiAgZGVmIGluaXRpYWxpemUKICAgICMgQ3VycmVudGx5 IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApCiAgICBAYSA9IDEgIyBUcmFu c2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYSAoSUQgMSkKICAgIEBiID0gMiAjIFRy YW5zaXRpb25zIHRvIGEgbmV3IHNoYXBlIHZpYSBlZGdlIEBiIChJRCAyKQogIGVuZAplbmQKCmNs YXNzIEJhcgogIGRlZiBpbml0aWFsaXplCiAgICAjIEN1cnJlbnRseSB0aGlzIGluc3RhbmNlIGlz IHRoZSByb290IHNoYXBlIChJRCAwKQogICAgQGEgPSAxICMgVHJhbnNpdGlvbnMgdG8gc2hhcGUg ZGVmaW5lZCBlYXJsaWVyIHZpYSBlZGdlIEBhIChJRCAxKQogICAgQGMgPSAxICMgVHJhbnNpdGlv bnMgdG8gYSBuZXcgc2hhcGUgdmlhIGVkZ2UgQGMgKElEIDMpCiAgICBAYiA9IDEgIyBUcmFuc2l0 aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYiAoSUQgNCkKICBlbmQKZW5kCgpmb28gPSBG b28ubmV3ICMgYmx1ZSBpbiB0aGUgZGlhZ3JhbQpiYXIgPSBCYXIubmV3ICMgcmVkIGluIHRoZSBk aWFncmFtCmBgYAoKSW4gdGhlIGRpYWdyYW0gYmVsb3csIHB1cnBsZSByZXByZXNlbnRzIHNoYXJl ZCB0cmFuc2l0aW9ucywgYmx1ZSByZXByZXNlbnRzIHRyYW5zaXRpb25zIGZvciBvbmx5IGBmb29g LCBhbmQgcmVkIHJlcHJlc2VudHMgdHJhbnNpdGlvbnMgZm9yIG9ubHkgYGJhcmAuCgohW10oaHR0 cHM6Ly91c2VyLWltYWdlcy5naXRodWJ1c2VyY29udGVudC5jb20vMTk4ODU2MC8xNjc5MTg4OTkt ZjFhNmYzNDQtYWU1ZS00ZGMwLWIxN2EtZmIxNTZkMWQ1NTBmLnN2ZykKCiMjIyBDYWNoZSBzdHJ1 Y3R1cmUKCkZvciBpbnN0YW5jZSB2YXJpYWJsZSB3cml0ZXJzLCB0aGUgY3VycmVudCBzaGFwZSBJ RCwgdGhlIHNoYXBlIElEIHRoYXQgaXZhciB3cml0ZSB3b3VsZCB0cmFuc2l0aW9uIHRvIGFuZCBp bnN0YW5jZSB2YXJpYWJsZSBpbmRleCBhcmUgYWxsIHN0b3JlZCBpbiB0aGUgaW5saW5lIGNhY2hl LiBUaGUgc2hhcGUgSUQgaXMgdGhlIGtleSB0byB0aGUgY2FjaGUuCgpGb3IgaW5zdGFuY2UgdmFy aWFibGUgcmVhZGVycywgdGhlIHNoYXBlIElEIGFuZCBpbnN0YW5jZSB2YXJpYWJsZSBpbmRleCBh cmUgc3RvcmVkIGluIHRoZSBpbmxpbmUgY2FjaGUuICBBZ2FpbiwgdGhlIHNoYXBlIElEIGlzIHRo ZSBjYWNoZSBrZXkuCgpgYGBydWJ5CmNsYXNzIEZvbwogIGRlZiBpbml0aWFsaXplCiAgICBAYSA9 IDEgIyBJQyBzaGFwZV9pZDogMCwgbmV4dCBzaGFwZTogMSwgaXYgaW5kZXggMAogICAgQGIgPSAx ICMgSUMgc2hhcGVfaWQ6IDEsIG5leHQgc2hhcGU6IDIsIGl2IGluZGV4IDEKICBlbmQKICAgIAog IGRlZiBhCiAgICBAYSAjIElDIHNoYXBlX2lkOiAyLCBpdiBpbmRleCAwCiAgZW5kCmVuZApgYGAK CiMjIFJhdGlvbmFsZQoKV2UgdGhpbmsgdGhhdCBhbiBvYmplY3Qgc2hhcGUgaW1wbGVtZW50YXRp b24gd2lsbCBzaW1wbGlmeSBjYWNoZSBjaGVja3MsIGluY3JlYXNlIGlubGluZSBjYWNoZSBoaXRz LCBkZWNyZWFzZSBydW50aW1lIGNoZWNrcywgYW5kIGVuYWJsZSBvdGhlciBwb3RlbnRpYWwgZnV0 dXJlIG9wdGltaXphdGlvbnMuIFRoZXNlIGFyZSBhbGwgZXhwbGFpbmVkIGJlbG93LiAKCiMjIyBT aW1wbGlmeSBjYWNoaW5nCgpUaGUgY3VycmVudCBjYWNoZSBpbXBsZW1lbnRhdGlvbiBkZXBlbmRz IG9uIHRoZSBjbGFzcyBvZiB0aGUgcmVjZWl2ZXIuIFNpbmNlIHRoZSBhZGRyZXNzIG9mIHRoZSBj bGFzcyBjYW4gYmUgcmV1c2VkLCB0aGUgY3VycmVudCBjYWNoZSBpbXBsZW1lbnRhdGlvbiBhbHNv IGRlcGVuZHMgb24gYW4gaW5jcmVtZW50aW5nIHNlcmlhbCBudW1iZXIgc2V0IG9uIHRoZSBjbGFz cyAodGhlIGNsYXNzIHNlcmlhbCkuICBUaGUgc2hhcGUgaW1wbGVtZW50YXRpb24gaGFzIG5vIHN1 Y2ggZGVwZW5kZW5jeS4gSXQgb25seSByZXF1aXJlcyBjaGVja2luZyB0aGUgc2hhcGUgSUQgdG8g ZGV0ZXJtaW5lIGlmIHRoZSBjYWNoZSBpcyB2YWxpZC4KCiMjIyBDYWNoZSBoaXRzCgpPYmplY3Rz IHRoYXQgc2V0IHByb3BlcnRpZXMgaW4gdGhlIHNhbWUgb3JkZXIgY2FuIHNoYXJlIHNoYXBlcy4g IEZvciBleGFtcGxlOgoKYGBgcnVieQpjbGFzcyBIb2dlCiAgZGVmIGluaXRpYWxpemUKICAgICMg Q3VycmVudGx5IHRoaXMgaW5zdGFuY2UgaXMgdGhlIHJvb3Qgc2hhcGUgKElEIDApCiAgICBAYSA9 IDEgIyBUcmFuc2l0aW9ucyB0byB0aGUgbmV4dCBzaGFwZSB2aWEgZWRnZSBuYW1lZCBAYQogICAg QGIgPSAyICMgVHJhbnNpdGlvbnMgdG8gbmV4dCBzaGFwZSB2aWEgZWRnZSBuYW1lZCBAYgogIGVu ZAplbmQKCmNsYXNzIEZ1Z2EgPCBIb2dlOyBlbmQKCmhvZ2UgPSBIb2dlLm5ldwpmdWdhID0gRnVn YS5uZXcKYGBgCgpJbiB0aGUgYWJvdmUgZXhhbXBsZSwgdGhlIGluc3RhbmNlcyBgaG9nZWAgYW5k IGBmdWdhYCB3aWxsIHNoYXJlIHRoZSBzYW1lIHNoYXBlIElELiAgVGhpcyBtZWFucyBpbmxpbmUg Y2FjaGVzIGluIGBpbml0aWFsaXplYCB3aWxsIGhpdCBpbiBib3RoIGNhc2VzLiAgVGhpcyBjb250 cmFzdHMgd2l0aCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB0aGF0IHVzZXMgdGhlIGNsYXNz IGFzIHRoZSBjYWNoZSBrZXkuICBJbiBvdGhlciB3b3Jkcywgd2l0aCBvYmplY3Qgc2hhcGVzIHRo ZSBhYm92ZSBjb2RlIHdpbGwgaGl0IGlubGluZSBjYWNoZXMgd2hlcmUgdGhlIGN1cnJlbnQgaW1w bGVtZW50YXRpb24gd2lsbCBtaXNzLgoKSWYgcGVyZm9ybWFuY2UgdGVzdGluZyByZXZlYWxzIHRo YXQgY2FjaGUgaGl0cyBhcmUgKm5vdCogc3Vic3RhbnRpYWxseSBpbXByb3ZlZCwgdGhlbiB3ZSBj YW4gdXNlIHNoYXBlcyB0byByZWNsYWltIG1lbW9yeSBmcm9tIGBSQmFzaWNgLiBXZSBjYW4gYWNj b21wbGlzaCB0aGlzIGJ5IGVuY29kaW5nIHRoZSBjbGFzcyB3aXRoaW4gdGhlIHNoYXBlIHRyZWUu IFRoaXMgd2lsbCBoYXZlIGFuIGVxdWl2YWxlbnQgY2FjaGUgaGl0IHJhdGUgdG8gdGhlIGN1cnJl bnQgaW1wbGVtZW50YXRpb24uIE9uY2UgdGhlIGNsYXNzIGlzIGVuY29kZWQgd2l0aGluIHRoZSBz aGFwZSB0cmVlLCB3ZSBjYW4gcmVtb3ZlIHRoZSBjbGFzcyBwb2ludGVyIGZyb20gYFJCYXNpY2Ag YW5kIGVpdGhlciByZWNsYWltIHRoYXQgbWVtb3J5IG9yIGZyZWUgaXQgZm9yIGFub3RoZXIgdXNl LgoKIyMjIERlY3JlYXNlcyBydW50aW1lIGNoZWNraW5nCgpXZSBjYW4gZW5jb2RlIGF0dHJpYnV0 ZXMgdGhhdCBhcmVuJ3QgaW5zdGFuY2UgdmFyaWFibGVzIGludG8gYW4gb2JqZWN0J3Mgc2hhcGUu IEN1cnJlbnRseSwgd2UgYWxzbyBpbmNsdWRlIGZyb3plbiB3aXRoaW4gdGhlIHNoYXBlLiBUaGlz IG1lYW5zIHdlIGNhbiBsaW1pdCBmcm96ZW4gY2hlY2tzIHRvIG9ubHkgY2FjaGUgbWlzc2VzLgoK Rm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgY29kZToKCmBgYHJ1YnkKY2xhc3MgVG90bwogIGRl ZiBzZXRfYQogICAgQGEgPSAxICMgY2FjaGU6IHNoYXBlOiAwLCBuZXh0IHNoYXBlOiAxLCBJViBp ZHg6IDAKICBlbmQKZW5kCgp0b3RvID0gVG90by5uZXcgIyBzaGFwZSAwCnRvdG8uc2V0X2EgICAg ICMgc2hhcGUgMQoKdG90byA9IFRvdG8ubmV3ICMgc2hhcGUgMAp0b3RvLmZyZWV6ZSAgICAjIHNo YXBlIDIKdG90by5zZXRfYSAgICAgIyBDYWNoZSBtaXNzLCBFeGNlcHRpb24hCmBgYAoKIVtdKGh0 dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3OTIwMDAx LWM0ZTYzMjZiLTNhM2MtNDgzYi1hNzk3LTllMDIzMTc2NDdkNy5zdmcpCgpXaXRob3V0IHNoYXBl cywgYWxsIGluc3RhbmNlIHZhcmlhYmxlIHNldHMgcmVxdWlyZSBjaGVja2luZyB0aGUgZnJvemVu IHN0YXR1cyBvZiB0aGUgb2JqZWN0LiBXaXRoIHNoYXBlcywgd2Ugb25seSBuZWVkIHRvIGNoZWNr IHRoZSBmcm96ZW4gc3RhdHVzIG9uIGNhY2hlIG1pc3Nlcy4KCldlIGNhbiBhbHNvIGVsaW1pbmF0 ZSBlbWJlZGRlZCBhbmQgZXh0ZW5kZWQgY2hlY2tzIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBv YmplY3Qgc2hhcGVzLiBBbnkgcGFydGljdWxhciBzaGFwZSByZXByZXNlbnRzIGFuIG9iamVjdCB0 aGF0IGlzIF9laXRoZXJfIGV4dGVuZGVkIG9yIGVtYmVkZGVkLiBKSVRzIGNhbiBwb3NzaWJseSB0 YWtlIGFkdmFudGFnZSBvZiB0aGlzIGZhY3QgYnkgZ2VuZXJhdGluZyBzcGVjaWFsaXplZCBtYWNo aW5lIGNvZGUgYmFzZWQgb24gdGhlIHNoYXBlcy4gCiAgICAKIyMjIENsYXNzIGluc3RhbmNlIHZh cmlhYmxlcyBjYW4gYmUgc3RvcmVkIGluIGFuIGFycmF5CgpDdXJyZW50bHksIGBUX0NMQVNTYCBh bmQgYFRfTU9EVUxFYCBpbnN0YW5jZXMgY2Fubm90IHVzZSB0aGUgc2FtZSBJViBpbmRleCB0YWJs ZSBvcHRpbWl6YXRpb24gdGhhdCBgVF9PQkpFQ1RgIGluc3RhbmNlcyB1c2UuICBXZSB0aGluayB0 aGF0IHRoZSBvYmplY3Qgc2hhcGVzIHRlY2huaXF1ZSBjYW4gYmUgbGV2ZXJhZ2VkIGJ5IGNsYXNz IGluc3RhbmNlcyB0byB1c2UgYXJyYXlzIGZvciBjbGFzcyBpbnN0YW5jZSB2YXJpYWJsZSBzdG9y YWdlIGFuZCBtYXkgcG9zc2libHkgbGVhZCB0byBhIHJlZHVjdGlvbiBpbiBtZW1vcnkgdXNhZ2Ug KHRob3VnaCB3ZSBoYXZlIHlldCB0byB0ZXN0IHRoaXMpLgoKIyMgSW1wbGVtZW50YXRpb24gRGV0 YWlscwoKW0hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9qZW1tYWlzc3JvZmYvcnVieS9jb21taXQv NGU5NWQwMTY1NGYyNGNlZmY2YzgzMzBjZjRlNWM3ZGFjNTA0NzM5ZSkgaXMgYSBsaW5rIHRvIG91 ciBjb2RlIHNvIGZhci4KCkFzIG1lbnRpb25lZCBlYXJsaWVyLCBzaGFwZSBvYmplY3RzIGZvcm0g YSB0cmVlIGRhdGEgc3RydWN0dXJlLiAgSW4gb3JkZXIgdG8gbG9vayB1cCB0aGUgc2hhcGUgcXVp Y2tseSwgd2UgYWxzbyBzdG9yZSB0aGUgc2hhcGVzIGluIGEgd2VhayBhcnJheSB0aGF0IGlzIHN0 b3JlZCBvbiB0aGUgVk0uICBUaGUgSUQgb2YgdGhlIHNoYXBlIGlzIHRoZSBpbmRleCBpbiB0byB0 aGUgYXJyYXksIGFuZCB0aGUgSUQgaXMgc3RvcmVkIG9uIHRoZSBvYmplY3QuCgpGb3IgYFRfT0JK RUNUYCBvYmplY3RzLCB3ZSBzdG9yZSB0aGUgc2hhcGUgSUQgaW4gdGhlIG9iamVjdCdzIGhlYWRl ci4gT24gNjQgYml0IHN5c3RlbXMsIHRoZSB1cHBlciAzMiBiaXRzIGFyZSB1c2VkIGJ5IFJhY3Rv cnMuICBXZSB3YW50IG9iamVjdCBzaGFwZXMgdG8gYmUgZW5hYmxlZCBvbiAzMiBiaXQgc3lzdGVt cyBhbmQgNjQgYml0IHN5c3RlbXMgc28gdGhhdCBsaW1pdHMgdXMgdG8gdGhlIGJvdHRvbSAzMiBi aXRzIG9mIHRoZSBPYmplY3QgaGVhZGVyLiAgVGhlIHRvcCAyMCBiaXRzIGZvciBgVF9PQkpFQ1Rg IG9iamVjdHMgd2FzIHVudXNlZCwgc28gd2UgdXNlZCB0aGUgdG9wIDE2IGJpdHMgZm9yIHRoZSBz aGFwZSBpZC4gIFdlIGNob3NlIHRoZSB0b3AgMTYgYml0cyBiZWNhdXNlIHRoaXMgYWxsb3dzIHVz IHRvIHVzZSBgdWludDE2X3RgIGFuZCBtYXNraW5nIHRoZSBoZWFkZXIgYml0cyBpcyBlYXNpZXIu CgpUaGlzIGltcGxlbWVudGF0aW9uIGRldGFpbCBsaW1pdHMgdXMgdG8gfjY1ayBzaGFwZXMuIFdl IG1lYXN1cmVkIHRoZSBudW1iZXIgb2Ygc2hhcGVzIHVzZWQgb24gYSBzaW1wbGUgW0Rpc2NvdXJz ZV0oaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvdXJzZS9kaXNjb3Vyc2UpIGFwcGxpY2F0aW9uICh+ My41ayksIFtSYWlsc0JlbmNoXShodHRwczovL2dpdGh1Yi5jb20vazBrdWJ1bi9yYWlsc2JlbmNo KSAofjRrKSwgYW5kIFNob3BpZnkncyBtb25vbGl0aCdzIHRlc3Qgc3VpdGUgKH40MGspLiBBY2Nv cmRpbmdseSwgd2UgZGVjaWRlZCB0byBpbXBsZW1lbnQgZ2FyYmFnZSBjb2xsZWN0aW9uIG9uIG9i amVjdCBzaGFwZXMgc28gd2UgY2FuIHJlY3ljbGUgc2hhcGUgSURzIHdoaWNoIGFyZSBubyBsb25n ZXIgaW4gdXNlLiAgV2UgYXJlIGN1cnJlbnRseSB3b3JraW5nIG9uIHNoYXBlIEdDLgoKRXZlbiB0 aG91Z2ggaXQncyB1bmxpa2VseSwgaXQncyBzdGlsbCBwb3NzaWJsZSBmb3IgYW4gYXBwbGljYXRp b24gdG8gcnVuIG91dCBvZiBzaGFwZXMuIE9uY2UgYWxsIHNoYXBlIElEcyBhcmUgaW4gdXNlLCBh bnkgb2JqZWN0cyB0aGF0IG5lZWQgbmV3IHNoYXBlIElEcyB3aWxsIG5ldmVyIGhpdCBvbiBpbmxp bmUgY2FjaGVzLgoKIyMgRXZhbHVhdGlvbgoKV2UgaGF2ZSBzbyBmYXIgdGVzdGVkIHRoaXMgYnJh bmNoIHdpdGggW0Rpc2NvdXJzZV0oaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvdXJzZS9kaXNjb3Vy c2UpLCBbUmFpbHNCZW5jaF0oaHR0cHM6Ly9naXRodWIuY29tL2swa3VidW4vcmFpbHNiZW5jaCkg YW5kIFNob3BpZnkncyBtb25vbGl0aC4gV2UgcGxhbiB0byB0ZXN0IHRoaXMgYnJhbmNoIG1vcmUg YnJvYWRseSBhZ2FpbnN0IHNldmVyYWwgb3BlbiBzb3VyY2UgUnVieSBhbmQgUmFpbHMgYXBwbGlj YXRpb25zLiAKCkJlZm9yZSB3ZSBjb25zaWRlciB0aGlzIGJyYW5jaCB0byBiZSByZWFkeSBmb3Ig Zm9ybWFsIHJldmlldywgd2Ugd2FudCB0aGUgcnVudGltZSBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5 IHVzYWdlIG9mIHRoZXNlIGJlbmNobWFya3MgdG8gYmUgZXF1aXZhbGVudCBvciBiZXR0ZXIgdGhh biBpdCBpcyBjdXJyZW50bHkuIEluIG91ciBvcGluaW9uLCBldmVuIHdpdGggZXF1aXZhbGVudCBy dW50aW1lIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgdXNhZ2UsIHRoZSBmdXR1cmUgYmVuZWZpdHMg b2YgdGhpcyBhcHByb2FjaCBtYWtlIHRoZSBjaGFuZ2Ugc2VlbSB3b3J0aHdoaWxlLgoKIyMgRmVl ZGJhY2sKCklmIHlvdSBoYXZlIGFueSBmZWVkYmFjaywgY29tbWVudHMsIG9yIHF1ZXN0aW9ucywg cGxlYXNlIGxldCB1cyBrbm93IGFuZCB3ZSdsbCBkbyBvdXIgYmVzdCB0byBhZGRyZXNzIGl0LiBU aGFuayB5b3UhCgoKCi0tIApodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8K