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 4A0701F54E for ; Thu, 18 Aug 2022 18:06:56 +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="Bf9eyc2T"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 3534C120F02; Fri, 19 Aug 2022 03:06:55 +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 2EBA1120EE9 for ; Fri, 19 Aug 2022 03:06:52 +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=IpNgRJZU9PDcCBJDOTLucY03ojzBrtrMCmKrbxsCM4I=; b=Bf9eyc2TqxyJBbuktDy/LnDEuEuJHyjYO5Y39MziYl3FEuv+sP55p6TGXyQqR8kbkihP 6lIbgy2u1nEVByLn8cVRhlzQQVGZUcqLHHgaGeegoOaqsZxYWV9U04iuJBIylF+/FjrOsE Rv5KXz8JT+UknMTWZF+Y+meNEHoDkGrf8= Received: by filterdrecv-66b95c5ffd-xw4vx with SMTP id filterdrecv-66b95c5ffd-xw4vx-1-62FE7FBB-66 2022-08-18 18:06:51.497219907 +0000 UTC m=+2412062.812851410 Received: from herokuapp.com (unknown) by geopod-ismtpd-4-2 (SG) with ESMTP id XVttASuwQBKtz3aHX5Kcpw for ; Thu, 18 Aug 2022 18:06:51.440 +0000 (UTC) Date: Thu, 18 Aug 2022 18:06:51 +0000 (UTC) From: "tenderlovemaking (Aaron Patterson)" 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: tenderlovemaking 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: 85965 X-SG-EID: =?us-ascii?Q?BKB5GcL7X6C0rbmtNyuS4vu6kpqmF4QQnKhBtJ3bB9xFaNZ3GycY7zB6Wl8eil?= =?us-ascii?Q?ZkydIZDAItvjzOlfamM+7a5D1pUwROaGAI=2FXJho?= =?us-ascii?Q?sWvhCBDfmwujVlwyMFiR80eGDebcMxbAssU=2Fk1M?= =?us-ascii?Q?alBJZDsI41DwfngkRHWrNOLG8+Q3TbJFG4wibMq?= =?us-ascii?Q?FG9QcfpATzjUb47Tik8E3AsjOLJhhGkEk=2FlqDNi?= =?us-ascii?Q?5npB91n5wp1EK1lRGarhIatP6+o9o9XqlSd4Z17?= =?us-ascii?Q?XSDpJYltwofY5IXqr4gztpll=2FT691wp6vFlJiml?= =?us-ascii?Q?mgI=3D?= To: ruby-core@ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 109557 Subject: [ruby-core:109557] [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" SXNzdWUgIzE4Nzc2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgdGVuZGVybG92ZW1ha2luZyAoQWFyb24g UGF0dGVyc29uKS4NCg0KDQpEYW4wMDQyIChEYW5pZWwgRGVMb3JtZSkgd3JvdGUgaW4gI25vdGUt MTk6DQo+IFRoYW5rIHlvdSBmb3IgdGhpcyBpbXBvcnRhbnQgd29yay4gSW4gcGFydGljdWxhciBJ IHRoaW5rIHNoYXBlcyB3aWxsIGJlIHZlcnkgdXNlZnVsIGluIHRoZSBmdXR1cmUgdG8gaW1wcm92 ZSB0aGUgcGVyZm9ybWFuY2Ugb2Yga2V5d29yZCBhcmd1bWVudHMuDQoNCkkgZG9uJ3QgdGhpbmsg dGhpcyB3aWxsIGhhdmUgYW55IGltcGFjdCBvbiBrZXl3b3JkIGFyZ3VtZW50cy4NCg0KPiAoMikg SXQgbG9va3MgdG8gbWUgbGlrZSBgcmJfc2hhcGVfZ2V0X2l2X2luZGV4YCBpcyByZWFsbHkgY3Jp dGljYWwgdG8gcGVyZm9ybWFuY2UsIGJ1dCB0aGUgbGlua2VkLWxpc3Qgc3RydWN0dXJlIGhhcyBi YWQgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIGZvciBsb2NhbGl0eSBvZiBtZW1vcnkgYWNj ZXNzLiBJZiBhbiBvYmplY3QgaGFzIDYgaXZhcnMgeW91IG5lZWQgdG8gcmVhZCA3IG5vbi1jb250 aWd1b3VzIHN0cnVjdHMgZm9yICplYWNoKiBpdmFyIGFjY2Vzcy4gSXQgc2hvdWxkIGJlIG11Y2gg ZmFzdGVyIGlmIGVhY2ggc2hhcGUgc3RydWN0IGhhZCB0aGUgZnVsbCBsaXN0IG9mIElEcyBpbiB0 aGUgc2hhcGUuIFdpdGggYSBTSU1EIGluc3RydWN0aW9uIGl0IHdvdWxkIGJlIHN1cGVyLWZhc3Qg dG8gZmluZCB0aGUgaW5kZXggZm9yIGEgZ2l2ZW4gSUQsIGJ1dCBldmVuIHdpdGhvdXQgU0lNRCB0 aGUgbWVtb3J5IGxvY2FsaXR5IHdvdWxkIGJlIG11Y2ggYmV0dGVyLg0KDQpgcmJfc2hhcGVfZ2V0 X2l2X2luZGV4YCBpcyByYXJlbHkgY2FsbGVkIGJlY2F1c2UgdGhlIGluZGV4IGlzIHN0b3JlZCBp biB0aGUgaW5saW5lIGNhY2hlLiAgV2Ugb25seSBuZWVkIHRvIGNhbGwgdGhpcyB3aGVuIHRoZSBj YWNoZSBtaXNzZXMuICBJdCBkb2VzIG1ha2UgY2FjaGUgbWlzc2VzIGV4cGVuc2l2ZSBpbiB0ZXJt cyBvZiBDUFUsIGJ1dCBtZW1vcnkgaXMgcmVkdWNlZC4NCg0KPiAoMykgVGhlIGZyb3plbiBmbGFn IGlzIHJlcHJlc2VudGVkIGFzIGEgZGlmZmVyZW50IHJvb3Qgc2hhcGUsIGJ1dCB0aGlzIHJlc3Vs dHMgaW4gbWFueSBleHRyYSBzaGFwZXMgdGhhdCBhcmUgbm90IHVzZWQgYnkgYW55IG9iamVjdDoN Cj4gDQo+IGBgYHJ1YnkNCj4gZGVmIGluaXRpYWxpemUoYSxiLGMsZCkNCj4gICBAYSxAYixAYyxA ZCA9IGEsYixjLGQNCj4gICBmcmVlemUNCj4gZW5kDQo+IGBgYA0KPiAgICAgMChyb290KSAtPiAy KEBhKSAtPiAzKEBhLEBiKSAtPiA0KEBhLEBiLEBjKSAtPiA1KEBhLEBiLEBjLEBkKQ0KPiAgICAg DQo+ICAgICAxKGZyb3plbikgLT4gNihAYSkgLT4gNyhAYSxAYikgLT4gOChAYSxAYixAYykgLT4g OShAYSxAYixAYyxAZCkNCg0KVGhpcyBjYXNlIGNhbid0IGhhcHBlbiBiZWNhdXNlIHlvdSBjYW4n dCBhZGQgaXZhcnMgYWZ0ZXIgYW4gb2JqZWN0IGhhcyBiZWVuIGZyb3plbi4NCg0KV2UgaGF2ZSBh ICJmcm96ZW4gcm9vdCBzaGFwZSIganVzdCBhcyBhbiBvcHRpbWl6YXRpb24gZm9yIG9iamVjdHMg dGhhdCBnbyBmcm9tIHRoZSByb290IHNoYXBlIGFuZCBhcmUgaW1tZWRpYXRlbHkgZnJvemVuLiAg Rm9yIGV4YW1wbGUgd2hlbiB1c2luZyB0aGUgYGZyb3ppbmdfc3RyaW5nX2xpdGVyYWxzYCBkaXJl Y3RpdmUuICBPYmplY3RzIHRoYXQgYXJlIG5vdCBUX09CSkVDVCwgVF9DTEFTUywgb3IgVF9NT0RV TEUgc3RvcmUgdGhlaXIgc2hhcGUgaWQgaW4gdGhlIGdlbiBpdiB0YWJsZS4gIFdlIGRpZG4ndCB3 YW50IHRvIG1ha2UgYSBnZW5pdiB0YWJsZSBmb3IgZXZlcnkgb2JqZWN0IHRoYXQgZ29lcyBmcm9t IHJvb3QgLT4gZnJvemVuIChhZ2FpbiB0aGluayBvZiB0aGUgbnVtYmVyIG9mIGZyb3plbiBzdHJp bmcgbGl0ZXJhbHMgaW4gYW4gYXBwbGljYXRpb24pLCBzbyB3ZSBwcmUtYWxsb2NhdGUgdGhhdCBz aGFwZSwgdGhlbiBhc3NpZ24gaXQgImF0IGJpcnRoIiAodXNpbmcgdGhlIGZyb3plbiBiaXQgdG8g aW5kaWNhdGUgdGhhdCB3ZSdyZSB1c2luZyB0aGUgImZyb3plbiByb290IHNoYXBlIiBzaW5nbGV0 b24pLg0KIA0KPiBJZiB0aGUgZnJvemVuIGZsYWcgd2FzIHJlcHJlc2VudGVkIGJ5IGEgbGVhZiBu b2RlLCB0aGlzIHdvdWxkIHVzZSBmZXdlciBzaGFwZXMuIChJdCB3b3VsZCBhbHNvIG1pcnJvciB0 aGUgb3JkZXIgb2Ygb3BlcmF0aW9ucyBhbmQgdGhlIGZhY3QgdGhhdCBhZnRlciBmcmVlemluZyBp dCdzIG5vdCBwb3NzaWJsZSBhZGQgbW9yZSBpdmFycy4pDQo+IA0KPiAgICAgMChyb290KSAtPiAx KEBhKSAtPiAyKEBhLEBiKSAtPiAzKEBhLEBiLEBjKSAtPiA0KEBhLEBiLEBjLEBkKQ0KPiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8DQo+ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDUoQGEsQGIsQGMs QGQsZnJvemVuKQ0KDQpJdCdzIGN1cnJlbnRseSBpbXBsZW1lbnRlZCB0aGlzIHdheS4gOikNCg0K DQoNCm5hcnVzZSAoWXVpIE5BUlVTRSkgd3JvdGUgaW4gI25vdGUtMTg6DQo+IEFib3V0IHRoZSBn ZW5lcmFsIHByaW5jaXBsZSwgc2luY2UgUnVieSBpcyB1c2VkIG9uIG1hbnkgcHJvZHVjdGlvbiBl bnZpcm9ubWVudCBieSBtYW55IGNvbXBhbmllcywgbm9uLW9wdGlvbmFsIGZlYXR1cmUgbmVlZHMg dG8gYmUgcHJvZHVjdGlvbiByZWFkeS4NCj4gDQo+IEl0IG1lYW5zIGl0IHNob3VsZG4ndCBoYXZl IGEgZG93bnNpZGUgaW5jbHVkaW5nIENQVSBwZXJmb3JtYW5jZSwgTWVtb3J5IGNvbnN1bXB0aW9u LCBhbmQgc28gb24uIFNpbmNlIFlKSVQgaXMgYWxyZWFkeSBjb25jZXJuZWQgYXMgYSBwcm9kdWN0 aW9uIGZlYXR1cmUsIGl0J3MgYWxzbyBhIGRvd25zaWRlIGlmIGl0IGNhdXNlIHNsb3cgZG93biBv ZiBZSklULiBBbHNvIG5vdGUgdGhhdCBpbmNyZWFzaW5nIGNvZGUgY29tcGxleGl0eSBpcyBhbHNv IGEgZG93bnNpZGUuDQo+IA0KPiBUaG91Z2ggYSBjcml0aWNhbCBkb3duc2lkZSBuZWVkcyB0byBi ZSBmaXhlZCwgYSBzbWFsbCBkb3duc2lkZSBjYW4gYmUgYWNjZXB0ZWQgaWYgaXQgaGFzIGEgbGFy Z2VyIHVwc2lkZS4gRm9yIGV4YW1wbGUgY29kZSBjb21wbGV4aXR5LCBpdCBpcyBhY2NlcHRlZCB3 aGlsZSBpdCBpbnRyb2R1Y2VzIGEgZW5vdWdoIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IGNvbXBh cmVkIHRvIHRoZSBjb21wbGV4aXR5Lg0KPiANCj4gQXMgZmFyIGFzIEkgdW5kZXJzdGFuZCwgdGhl IE9iamVjdCBTaGFwZSBpcyBpbnRyb2R1Y2UgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZSBhbmQgaXQn cyBjb21wbGV4LiBUaGVyZWZvcmUgaXQgbmVlZHMgdG8gc2hvdyBzb21lIHBlcmZvcm1hbmNlIGlt cHJvdmVtZW50IGNvbXBhcmVkIHRvIHRoZSBjb2RlIGNvbXBsZXhpdHkgYmVmb3JlIHdlIG1lcmdl IGl0IHRvIHJ1YnktbWFzdGVyLg0KDQpXZSdyZSB3b3JraW5nIHRvIGZpeCB0aGUgWUpJVCBjYXNl cy4gIEkgdGhpbmsgd2UgY2FuIHNlZSBoaWdoZXIgc3BlZWRzIGluIFlKSVQgdXNpbmcgT2JqZWN0 IFNoYXBlcyB0aGFuIHRoZSBjdXJyZW50IGNhY2hpbmcgbWVjaGFuaXNtcyBhcyB0aGUgbWFjaGlu ZSBjb2RlIFlKSVQgZ2VuZXJhdGVzIGNhbiBiZSBtdWNoIG1vcmUgc2ltcGxlLg0KDQpGb3IgdGhl IG5vbi1KSVQgY2FzZSwgd2UncmUgc2VlaW5nIGdvb2QgaW1wcm92ZW1lbnRzIGluIHNvbWUgYmVu Y2htYXJrcyBsaWtlIHRoaXM6DQoNCmBgYA0KfHZtX2l2YXJfaW5pdF9zdWJjbGFzcyAgICAgIHwg ICAgICA2LjEwNE18ICAgMTIuOTI4TXwNCnwgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg ICAgICAgICAtfCAgICAgMi4xMnh8DQpgYGANCg0KVGhpcyBpcyBhIGNhc2Ugd2hlcmUgc2hhcGVz IGNhbiBoaXQgaW5saW5lIGNhY2hlcyBidXQgdGhlIGN1cnJlbnQgbWVjaGFuaXNtIGNhbm5vdCwg bGlrZSB0aGlzIGNvZGU6DQoNCmBgYHJ1YnkNCmNsYXNzIEENCiAgZGVmIGluaXRpYWxpemUNCiAg ICBAYSA9IDENCiAgICBAYiA9IDENCiAgZW5kDQplbmQNCg0KY2xhc3MgQiA8IEE7IGVuZA0KDQps b29wIGRvDQogIEEubmV3DQogIEIubmV3DQplbmQNCmBgYA0KDQpPdXIgY3VycmVudCBjYWNoZSBj YW5ub3QgaGl0IGJlY2F1c2UgdGhlIGNsYXNzZXMgY2hhbmdlLCBidXQgc2hhcGVzIF9jYW5fIGhp dCBiZWNhdXNlIHRoZSBzaGFwZXMgYXJlIHRoZSBzYW1lLg0KDQpBcyBmb3IgY29tcGxleGl0eSwg SSB0aGluayB0aGUgc3RyYXRlZ3kgaXMgZWFzaWVyIHRvIHVuZGVyc3RhbmQgdGhhbiBvdXIgY3Vy cmVudCBjYWNoaW5nIG1lY2hhbmlzbSBhbmQgaXQgYWN0dWFsbHkgc2ltcGxpZmllcyBjYWNoZSBj aGVja3MuICBXZSBvbmx5IG5lZWQgdG8gY29tcGFyZSBzaGFwZSBpZCwgbm90IGNsYXNzIHNlcmlh bCArIGZyb3plbiBzdGF0dXMuICBDb2RlIGNvbXBsZXhpdHkgaXMgaGFyZCB0byBtZWFzdXJlIHRo b3VnaCwgYW5kIEkgYWRtaXQgdGhpcyBwYXRjaCBpcyBwcmV0dHkgYmlnLiDwn5iFDQoNCg0KLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRmVhdHVyZSAjMTg3NzY6IE9i amVjdCBTaGFwZXMNCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xODc3NiNjaGFu Z2UtOTg3MjgNCg0KKiBBdXRob3I6IGplbW1haSAoSmVtbWEgSXNzcm9mZikNCiogU3RhdHVzOiBP cGVuDQoqIFByaW9yaXR5OiBOb3JtYWwNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0NCiMgT2JqZWN0IFNoYXBlcyBpbXBsZW1lbnRhdGlvbg0KDQpBYXJvbiBQYXR0ZXJz b24sIEVpbGVlbiBVY2hpdGVsbGUgYW5kIEkgaGF2ZSBiZWVuIHdvcmtpbmcgb24gYW4gaW1wbGVt ZW50YXRpb24gb2YgT2JqZWN0IFNoYXBlcyBmb3IgUnVieS4gIFdlIGFyZSBmaWxpbmcgYSB0aWNr ZXQgdG8gc2hhcmUgd2hhdCB3ZSd2ZSBiZWVuIGRvaW5nLCBhcyB3ZWxsIGFzIGdldCBmZWVkYmFj ayBvbiB0aGUgcHJvamVjdCBpbiBpdHMgY3VycmVudCBzdGF0ZS4NCg0KV2UgaG9wZSB0byBldmVu dHVhbGx5IHN1Ym1pdCB0aGUgZmluYWxpemVkIHByb2plY3QgdXBzdHJlYW0gYWZ0ZXIgdmVyaWZ5 aW5nIGVmZmljYWN5Lg0KDQojIyBXaGF0IGFyZSBPYmplY3QgU2hhcGVzPw0KDQpPYmplY3Qgc2hh cGVzIGFyZSBhIHRlY2huaXF1ZSBmb3IgcmVwcmVzZW50aW5nIHByb3BlcnRpZXMgb2YgYW4gb2Jq ZWN0LiBPdGhlciBsYW5ndWFnZSBpbXBsZW1lbnRhdGlvbnMsIGluY2x1ZGluZyBbVHJ1ZmZsZVJ1 YnldKGh0dHBzOi8vZ2l0aHViLmNvbS9vcmFjbGUvdHJ1ZmZsZXJ1YnkpIGFuZCBbVjhdKGh0dHBz Oi8vdjguZGV2LyksIHVzZSB0aGlzIHRlY2huaXF1ZS4gQ2hyaXMgU2VhdG9uLCB0aGUgY3JlYXRv ciBvZiBUcnVmZmxlUnVieSwgZGlzY3Vzc2VkIG9iamVjdCBzaGFwZXMgaW4gaGlzIFtSdWJ5S2Fp Z2kgMjAyMSBLZXlub3RlXShodHRwczovL3J1YnlrYWlnaS5vcmcvMjAyMS10YWtlb3V0L3ByZXNl bnRhdGlvbnMvY2hyaXNnc2VhdG9uLmh0bWwpIGFuZCBNYXhpbWUgQ2hldmFsaWVyLUJvaXN2ZXJ0 IGRpc2N1c3NlZCB0aGUgaW1wbGljYXRpb25zIGZvciBZSklUIGluIHRoZSBsYXR0ZXIgcGFydCBv ZiBbaGVyIHRhbGsgYXQgUnVieUthaWdpIDIwMjFdKGh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL3dh dGNoP3Y9UEJWTGYzeWZNczgmdD0xMTAwcykuIFRoZSBvcmlnaW5hbCBpZGVhIG9mIG9iamVjdCBz aGFwZXMgW29yaWdpbmF0ZXMgZnJvbSB0aGUgU2VsZiBsYW5ndWFnZV0oaHR0cHM6Ly9iaWJsaW9n cmFwaHkuc2VsZmxhbmd1YWdlLm9yZy9fc3RhdGljL2ltcGxlbWVudGF0aW9uLnBkZiksIHdoaWNo IGlzIGNvbnNpZGVyZWQgYSBkaXJlY3QgZGVzY2VuZGFudCBvZiBTbWFsbHRhbGsuDQoNCkVhY2gg c2hhcGUgcmVwcmVzZW50cyBhIHNwZWNpZmljIHNldCBvZiBhdHRyaWJ1dGVzIChpbnN0YW5jZSB2 YXJpYWJsZXMgYW5kIG90aGVyIHByb3BlcnRpZXMpIGFuZCB0aGVpciB2YWx1ZXMuIEluIG91ciBp bXBsZW1lbnRhdGlvbiwgYWxsIG9iamVjdHMgaGF2ZSBhIHNoYXBlLiBUaGUgc2hhcGVzIGFyZSBu b2RlcyBpbiBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUuIEV2ZXJ5IGVkZ2UgaW4gdGhlIHRyZWUgcmVw cmVzZW50cyBhbiBhdHRyaWJ1dGUgdHJhbnNpdGlvbi4NCg0KTW9yZSBzcGVjaWZpY2FsbHksIHNl dHRpbmcgYW4gaW5zdGFuY2UgdmFyaWFibGUgb24gYW4gaW5zdGFuY2Ugb2YgYW4gb2JqZWN0IGNy ZWF0ZXMgYW4gb3V0Z29pbmcgZWRnZSBmcm9tIHRoZSBpbnN0YW5jZSdzIGN1cnJlbnQgc2hhcGUu IFRoaXMgaXMgYSB0cmFuc2l0aW9uIGZyb20gb25lIHNoYXBlIHRvIGFub3RoZXIuIFRoZSBlZGdl IHJlcHJlc2VudHMgdGhlIGluc3RhbmNlIHZhcmlhYmxlIHRoYXQgaXMgc2V0Lg0KDQpGb3IgZXhh bXBsZToNCg0KYGBgcnVieQ0KY2xhc3MgRm9vDQogIGRlZiBpbml0aWFsaXplDQogICAgIyBDdXJy ZW50bHkgdGhpcyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkNCiAgICBAYSA9IDEg IyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYSAoSUQgMSkNCiAgICBAYiA9 IDIgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRnZSBAYiAoSUQgMikNCiAgZW5k DQplbmQNCg0KZm9vID0gRm9vLm5ldw0KYGBgDQoNCldoZW4gYEZvb2AgaXMgaW50aWFsaXplZCwg aXRzIHNoYXBlIGlzIHRoZSByb290IHNoYXBlIHdpdGggSUQgMC4gIFRoZSByb290IHNoYXBlIHJl cHJlc2VudHMgYW4gZW1wdHkgb2JqZWN0IHdpdGggbm8gaW5zdGFuY2UgdmFyaWFibGVzLiBFYWNo IHRpbWUgYW4gaW5zdGFuY2UgdmFyaWFibGUgaXMgc2V0IG9uIGBmb29gLCB0aGUgc2hhcGUgb2Yg dGhlIGluc3RhbmNlIGNoYW5nZXMuIEl0IGZpcnN0IHRyYW5zaXRpb25zIHdpdGggYEBhYCB0byBh IHNoYXBlIHdpdGggSUQgMSwgYW5kIHRoZW4gdHJhbnNpdGlvbnMgd2l0aCBgQGJgIHRvIGEgc2hh cGUgd2l0aCBJRCAyLiBJZiBgQGFgIGlzIHRoZW4gc2V0IHRvIGEgZGlmZmVyZW50IHZhbHVlLCBp dHMgc2hhcGUgd2lsbCByZW1haW4gdGhlIHNoYXBlIHdpdGggSUQgMiwgc2luY2UgdGhpcyBzaGFw ZSBhbHJlYWR5IGluY2x1ZGVzIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSBgQGFgLiAgDQoNCiFbXSho dHRwczovL3VzZXItaW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xOTg4NTYwLzE2NzkxODM2 MC0wYTZjOTFhYS0yNTg3LTQ4Y2ItOGZmMi03ZjNhOTU4MzI4OGUuc3ZnKQ0KDQpUaGVyZSBpcyBv bmUgZ2xvYmFsIHNoYXBlIHRyZWUgYW5kIG9iamVjdHMgd2hpY2ggdW5kZXJnbyB0aGUgc2FtZSBz aGFwZSB0cmFuc2l0aW9ucyBpbiB0aGUgc2FtZSBvcmRlciB3aWxsIGVuZCB1cCB3aXRoIHRoZSBz YW1lIGZpbmFsIHNoYXBlLg0KDQpGb3IgaW5zdGFuY2UsIGlmIHdlIGhhdmUgYSBjbGFzcyBgQmFy YCBkZWZpbmVkIGFzIGZvbGxvd3MsIHRoZSBmaXJzdCB0cmFuc2l0aW9uIG9uIGBCYXIubmV3YCB0 aHJvdWdoIHRoZSBpbnN0YW5jZSB2YXJpYWJsZSBgQGFgIHdpbGwgYmUgdGhlIHNhbWUgYXMgYEZv by5uZXdgJ3MgZmlyc3QgdHJhbnNpdGlvbjoNCg0KYGBgcnVieQ0KY2xhc3MgRm9vDQogIGRlZiBp bml0aWFsaXplDQogICAgIyBDdXJyZW50bHkgdGhpcyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFw ZSAoSUQgMCkNCiAgICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEgZWRn ZSBAYSAoSUQgMSkNCiAgICBAYiA9IDIgIyBUcmFuc2l0aW9ucyB0byBhIG5ldyBzaGFwZSB2aWEg ZWRnZSBAYiAoSUQgMikNCiAgZW5kDQplbmQNCg0KY2xhc3MgQmFyDQogIGRlZiBpbml0aWFsaXpl DQogICAgIyBDdXJyZW50bHkgdGhpcyBpbnN0YW5jZSBpcyB0aGUgcm9vdCBzaGFwZSAoSUQgMCkN CiAgICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byBzaGFwZSBkZWZpbmVkIGVhcmxpZXIgdmlhIGVk Z2UgQGEgKElEIDEpDQogICAgQGMgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUgdmlh IGVkZ2UgQGMgKElEIDMpDQogICAgQGIgPSAxICMgVHJhbnNpdGlvbnMgdG8gYSBuZXcgc2hhcGUg dmlhIGVkZ2UgQGIgKElEIDQpDQogIGVuZA0KZW5kDQoNCmZvbyA9IEZvby5uZXcgIyBibHVlIGlu IHRoZSBkaWFncmFtDQpiYXIgPSBCYXIubmV3ICMgcmVkIGluIHRoZSBkaWFncmFtDQpgYGANCg0K SW4gdGhlIGRpYWdyYW0gYmVsb3csIHB1cnBsZSByZXByZXNlbnRzIHNoYXJlZCB0cmFuc2l0aW9u cywgYmx1ZSByZXByZXNlbnRzIHRyYW5zaXRpb25zIGZvciBvbmx5IGBmb29gLCBhbmQgcmVkIHJl cHJlc2VudHMgdHJhbnNpdGlvbnMgZm9yIG9ubHkgYGJhcmAuDQoNCiFbXShodHRwczovL3VzZXIt aW1hZ2VzLmdpdGh1YnVzZXJjb250ZW50LmNvbS8xOTg4NTYwLzE2NzkxODg5OS1mMWE2ZjM0NC1h ZTVlLTRkYzAtYjE3YS1mYjE1NmQxZDU1MGYuc3ZnKQ0KDQojIyMgQ2FjaGUgc3RydWN0dXJlDQoN CkZvciBpbnN0YW5jZSB2YXJpYWJsZSB3cml0ZXJzLCB0aGUgY3VycmVudCBzaGFwZSBJRCwgdGhl IHNoYXBlIElEIHRoYXQgaXZhciB3cml0ZSB3b3VsZCB0cmFuc2l0aW9uIHRvIGFuZCBpbnN0YW5j ZSB2YXJpYWJsZSBpbmRleCBhcmUgYWxsIHN0b3JlZCBpbiB0aGUgaW5saW5lIGNhY2hlLiBUaGUg c2hhcGUgSUQgaXMgdGhlIGtleSB0byB0aGUgY2FjaGUuDQoNCkZvciBpbnN0YW5jZSB2YXJpYWJs ZSByZWFkZXJzLCB0aGUgc2hhcGUgSUQgYW5kIGluc3RhbmNlIHZhcmlhYmxlIGluZGV4IGFyZSBz dG9yZWQgaW4gdGhlIGlubGluZSBjYWNoZS4gIEFnYWluLCB0aGUgc2hhcGUgSUQgaXMgdGhlIGNh Y2hlIGtleS4NCg0KYGBgcnVieQ0KY2xhc3MgRm9vDQogIGRlZiBpbml0aWFsaXplDQogICAgQGEg PSAxICMgSUMgc2hhcGVfaWQ6IDAsIG5leHQgc2hhcGU6IDEsIGl2IGluZGV4IDANCiAgICBAYiA9 IDEgIyBJQyBzaGFwZV9pZDogMSwgbmV4dCBzaGFwZTogMiwgaXYgaW5kZXggMQ0KICBlbmQNCiAg ICANCiAgZGVmIGENCiAgICBAYSAjIElDIHNoYXBlX2lkOiAyLCBpdiBpbmRleCAwDQogIGVuZA0K ZW5kDQpgYGANCg0KIyMgUmF0aW9uYWxlDQoNCldlIHRoaW5rIHRoYXQgYW4gb2JqZWN0IHNoYXBl IGltcGxlbWVudGF0aW9uIHdpbGwgc2ltcGxpZnkgY2FjaGUgY2hlY2tzLCBpbmNyZWFzZSBpbmxp bmUgY2FjaGUgaGl0cywgZGVjcmVhc2UgcnVudGltZSBjaGVja3MsIGFuZCBlbmFibGUgb3RoZXIg cG90ZW50aWFsIGZ1dHVyZSBvcHRpbWl6YXRpb25zLiBUaGVzZSBhcmUgYWxsIGV4cGxhaW5lZCBi ZWxvdy4gDQoNCiMjIyBTaW1wbGlmeSBjYWNoaW5nDQoNClRoZSBjdXJyZW50IGNhY2hlIGltcGxl bWVudGF0aW9uIGRlcGVuZHMgb24gdGhlIGNsYXNzIG9mIHRoZSByZWNlaXZlci4gU2luY2UgdGhl IGFkZHJlc3Mgb2YgdGhlIGNsYXNzIGNhbiBiZSByZXVzZWQsIHRoZSBjdXJyZW50IGNhY2hlIGlt cGxlbWVudGF0aW9uIGFsc28gZGVwZW5kcyBvbiBhbiBpbmNyZW1lbnRpbmcgc2VyaWFsIG51bWJl ciBzZXQgb24gdGhlIGNsYXNzICh0aGUgY2xhc3Mgc2VyaWFsKS4gIFRoZSBzaGFwZSBpbXBsZW1l bnRhdGlvbiBoYXMgbm8gc3VjaCBkZXBlbmRlbmN5LiBJdCBvbmx5IHJlcXVpcmVzIGNoZWNraW5n IHRoZSBzaGFwZSBJRCB0byBkZXRlcm1pbmUgaWYgdGhlIGNhY2hlIGlzIHZhbGlkLg0KDQojIyMg Q2FjaGUgaGl0cw0KDQpPYmplY3RzIHRoYXQgc2V0IHByb3BlcnRpZXMgaW4gdGhlIHNhbWUgb3Jk ZXIgY2FuIHNoYXJlIHNoYXBlcy4gIEZvciBleGFtcGxlOg0KDQpgYGBydWJ5DQpjbGFzcyBIb2dl DQogIGRlZiBpbml0aWFsaXplDQogICAgIyBDdXJyZW50bHkgdGhpcyBpbnN0YW5jZSBpcyB0aGUg cm9vdCBzaGFwZSAoSUQgMCkNCiAgICBAYSA9IDEgIyBUcmFuc2l0aW9ucyB0byB0aGUgbmV4dCBz aGFwZSB2aWEgZWRnZSBuYW1lZCBAYQ0KICAgIEBiID0gMiAjIFRyYW5zaXRpb25zIHRvIG5leHQg c2hhcGUgdmlhIGVkZ2UgbmFtZWQgQGINCiAgZW5kDQplbmQNCg0KY2xhc3MgRnVnYSA8IEhvZ2U7 IGVuZA0KDQpob2dlID0gSG9nZS5uZXcNCmZ1Z2EgPSBGdWdhLm5ldw0KYGBgDQoNCkluIHRoZSBh Ym92ZSBleGFtcGxlLCB0aGUgaW5zdGFuY2VzIGBob2dlYCBhbmQgYGZ1Z2FgIHdpbGwgc2hhcmUg dGhlIHNhbWUgc2hhcGUgSUQuICBUaGlzIG1lYW5zIGlubGluZSBjYWNoZXMgaW4gYGluaXRpYWxp emVgIHdpbGwgaGl0IGluIGJvdGggY2FzZXMuICBUaGlzIGNvbnRyYXN0cyB3aXRoIHRoZSBjdXJy ZW50IGltcGxlbWVudGF0aW9uIHRoYXQgdXNlcyB0aGUgY2xhc3MgYXMgdGhlIGNhY2hlIGtleS4g IEluIG90aGVyIHdvcmRzLCB3aXRoIG9iamVjdCBzaGFwZXMgdGhlIGFib3ZlIGNvZGUgd2lsbCBo aXQgaW5saW5lIGNhY2hlcyB3aGVyZSB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiB3aWxsIG1p c3MuDQoNCklmIHBlcmZvcm1hbmNlIHRlc3RpbmcgcmV2ZWFscyB0aGF0IGNhY2hlIGhpdHMgYXJl ICpub3QqIHN1YnN0YW50aWFsbHkgaW1wcm92ZWQsIHRoZW4gd2UgY2FuIHVzZSBzaGFwZXMgdG8g cmVjbGFpbSBtZW1vcnkgZnJvbSBgUkJhc2ljYC4gV2UgY2FuIGFjY29tcGxpc2ggdGhpcyBieSBl bmNvZGluZyB0aGUgY2xhc3Mgd2l0aGluIHRoZSBzaGFwZSB0cmVlLiBUaGlzIHdpbGwgaGF2ZSBh biBlcXVpdmFsZW50IGNhY2hlIGhpdCByYXRlIHRvIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u LiBPbmNlIHRoZSBjbGFzcyBpcyBlbmNvZGVkIHdpdGhpbiB0aGUgc2hhcGUgdHJlZSwgd2UgY2Fu IHJlbW92ZSB0aGUgY2xhc3MgcG9pbnRlciBmcm9tIGBSQmFzaWNgIGFuZCBlaXRoZXIgcmVjbGFp bSB0aGF0IG1lbW9yeSBvciBmcmVlIGl0IGZvciBhbm90aGVyIHVzZS4NCg0KIyMjIERlY3JlYXNl cyBydW50aW1lIGNoZWNraW5nDQoNCldlIGNhbiBlbmNvZGUgYXR0cmlidXRlcyB0aGF0IGFyZW4n dCBpbnN0YW5jZSB2YXJpYWJsZXMgaW50byBhbiBvYmplY3QncyBzaGFwZS4gQ3VycmVudGx5LCB3 ZSBhbHNvIGluY2x1ZGUgZnJvemVuIHdpdGhpbiB0aGUgc2hhcGUuIFRoaXMgbWVhbnMgd2UgY2Fu IGxpbWl0IGZyb3plbiBjaGVja3MgdG8gb25seSBjYWNoZSBtaXNzZXMuDQoNCkZvciBleGFtcGxl LCB0aGUgZm9sbG93aW5nIGNvZGU6DQoNCmBgYHJ1YnkNCmNsYXNzIFRvdG8NCiAgZGVmIHNldF9h DQogICAgQGEgPSAxICMgY2FjaGU6IHNoYXBlOiAwLCBuZXh0IHNoYXBlOiAxLCBJViBpZHg6IDAN CiAgZW5kDQplbmQNCg0KdG90byA9IFRvdG8ubmV3ICMgc2hhcGUgMA0KdG90by5zZXRfYSAgICAg IyBzaGFwZSAxDQoNCnRvdG8gPSBUb3RvLm5ldyAjIHNoYXBlIDANCnRvdG8uZnJlZXplICAgICMg c2hhcGUgMg0KdG90by5zZXRfYSAgICAgIyBDYWNoZSBtaXNzLCBFeGNlcHRpb24hDQpgYGANCg0K IVtdKGh0dHBzOi8vdXNlci1pbWFnZXMuZ2l0aHVidXNlcmNvbnRlbnQuY29tLzE5ODg1NjAvMTY3 OTIwMDAxLWM0ZTYzMjZiLTNhM2MtNDgzYi1hNzk3LTllMDIzMTc2NDdkNy5zdmcpDQoNCldpdGhv dXQgc2hhcGVzLCBhbGwgaW5zdGFuY2UgdmFyaWFibGUgc2V0cyByZXF1aXJlIGNoZWNraW5nIHRo ZSBmcm96ZW4gc3RhdHVzIG9mIHRoZSBvYmplY3QuIFdpdGggc2hhcGVzLCB3ZSBvbmx5IG5lZWQg dG8gY2hlY2sgdGhlIGZyb3plbiBzdGF0dXMgb24gY2FjaGUgbWlzc2VzLg0KDQpXZSBjYW4gYWxz byBlbGltaW5hdGUgZW1iZWRkZWQgYW5kIGV4dGVuZGVkIGNoZWNrcyB3aXRoIHRoZSBpbnRyb2R1 Y3Rpb24gb2Ygb2JqZWN0IHNoYXBlcy4gQW55IHBhcnRpY3VsYXIgc2hhcGUgcmVwcmVzZW50cyBh biBvYmplY3QgdGhhdCBpcyBfZWl0aGVyXyBleHRlbmRlZCBvciBlbWJlZGRlZC4gSklUcyBjYW4g cG9zc2libHkgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmYWN0IGJ5IGdlbmVyYXRpbmcgc3BlY2lh bGl6ZWQgbWFjaGluZSBjb2RlIGJhc2VkIG9uIHRoZSBzaGFwZXMuIA0KICAgIA0KIyMjIENsYXNz IGluc3RhbmNlIHZhcmlhYmxlcyBjYW4gYmUgc3RvcmVkIGluIGFuIGFycmF5DQoNCkN1cnJlbnRs eSwgYFRfQ0xBU1NgIGFuZCBgVF9NT0RVTEVgIGluc3RhbmNlcyBjYW5ub3QgdXNlIHRoZSBzYW1l IElWIGluZGV4IHRhYmxlIG9wdGltaXphdGlvbiB0aGF0IGBUX09CSkVDVGAgaW5zdGFuY2VzIHVz ZS4gIFdlIHRoaW5rIHRoYXQgdGhlIG9iamVjdCBzaGFwZXMgdGVjaG5pcXVlIGNhbiBiZSBsZXZl cmFnZWQgYnkgY2xhc3MgaW5zdGFuY2VzIHRvIHVzZSBhcnJheXMgZm9yIGNsYXNzIGluc3RhbmNl IHZhcmlhYmxlIHN0b3JhZ2UgYW5kIG1heSBwb3NzaWJseSBsZWFkIHRvIGEgcmVkdWN0aW9uIGlu IG1lbW9yeSB1c2FnZSAodGhvdWdoIHdlIGhhdmUgeWV0IHRvIHRlc3QgdGhpcykuDQoNCiMjIElt cGxlbWVudGF0aW9uIERldGFpbHMNCg0KW0hlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9qZW1tYWlz c3JvZmYvcnVieS9jb21taXQvNGU5NWQwMTY1NGYyNGNlZmY2YzgzMzBjZjRlNWM3ZGFjNTA0NzM5 ZSkgaXMgYSBsaW5rIHRvIG91ciBjb2RlIHNvIGZhci4NCg0KQXMgbWVudGlvbmVkIGVhcmxpZXIs IHNoYXBlIG9iamVjdHMgZm9ybSBhIHRyZWUgZGF0YSBzdHJ1Y3R1cmUuICBJbiBvcmRlciB0byBs b29rIHVwIHRoZSBzaGFwZSBxdWlja2x5LCB3ZSBhbHNvIHN0b3JlIHRoZSBzaGFwZXMgaW4gYSB3 ZWFrIGFycmF5IHRoYXQgaXMgc3RvcmVkIG9uIHRoZSBWTS4gIFRoZSBJRCBvZiB0aGUgc2hhcGUg aXMgdGhlIGluZGV4IGluIHRvIHRoZSBhcnJheSwgYW5kIHRoZSBJRCBpcyBzdG9yZWQgb24gdGhl IG9iamVjdC4NCg0KRm9yIGBUX09CSkVDVGAgb2JqZWN0cywgd2Ugc3RvcmUgdGhlIHNoYXBlIElE IGluIHRoZSBvYmplY3QncyBoZWFkZXIuIE9uIDY0IGJpdCBzeXN0ZW1zLCB0aGUgdXBwZXIgMzIg Yml0cyBhcmUgdXNlZCBieSBSYWN0b3JzLiAgV2Ugd2FudCBvYmplY3Qgc2hhcGVzIHRvIGJlIGVu YWJsZWQgb24gMzIgYml0IHN5c3RlbXMgYW5kIDY0IGJpdCBzeXN0ZW1zIHNvIHRoYXQgbGltaXRz IHVzIHRvIHRoZSBib3R0b20gMzIgYml0cyBvZiB0aGUgT2JqZWN0IGhlYWRlci4gIFRoZSB0b3Ag MjAgYml0cyBmb3IgYFRfT0JKRUNUYCBvYmplY3RzIHdhcyB1bnVzZWQsIHNvIHdlIHVzZWQgdGhl IHRvcCAxNiBiaXRzIGZvciB0aGUgc2hhcGUgaWQuICBXZSBjaG9zZSB0aGUgdG9wIDE2IGJpdHMg YmVjYXVzZSB0aGlzIGFsbG93cyB1cyB0byB1c2UgYHVpbnQxNl90YCBhbmQgbWFza2luZyB0aGUg aGVhZGVyIGJpdHMgaXMgZWFzaWVyLg0KDQpUaGlzIGltcGxlbWVudGF0aW9uIGRldGFpbCBsaW1p dHMgdXMgdG8gfjY1ayBzaGFwZXMuIFdlIG1lYXN1cmVkIHRoZSBudW1iZXIgb2Ygc2hhcGVzIHVz ZWQgb24gYSBzaW1wbGUgW0Rpc2NvdXJzZV0oaHR0cHM6Ly9naXRodWIuY29tL2Rpc2NvdXJzZS9k aXNjb3Vyc2UpIGFwcGxpY2F0aW9uICh+My41ayksIFtSYWlsc0JlbmNoXShodHRwczovL2dpdGh1 Yi5jb20vazBrdWJ1bi9yYWlsc2JlbmNoKSAofjRrKSwgYW5kIFNob3BpZnkncyBtb25vbGl0aCdz IHRlc3Qgc3VpdGUgKH40MGspLiBBY2NvcmRpbmdseSwgd2UgZGVjaWRlZCB0byBpbXBsZW1lbnQg Z2FyYmFnZSBjb2xsZWN0aW9uIG9uIG9iamVjdCBzaGFwZXMgc28gd2UgY2FuIHJlY3ljbGUgc2hh cGUgSURzIHdoaWNoIGFyZSBubyBsb25nZXIgaW4gdXNlLiAgV2UgYXJlIGN1cnJlbnRseSB3b3Jr aW5nIG9uIHNoYXBlIEdDLg0KDQpFdmVuIHRob3VnaCBpdCdzIHVubGlrZWx5LCBpdCdzIHN0aWxs IHBvc3NpYmxlIGZvciBhbiBhcHBsaWNhdGlvbiB0byBydW4gb3V0IG9mIHNoYXBlcy4gT25jZSBh bGwgc2hhcGUgSURzIGFyZSBpbiB1c2UsIGFueSBvYmplY3RzIHRoYXQgbmVlZCBuZXcgc2hhcGUg SURzIHdpbGwgbmV2ZXIgaGl0IG9uIGlubGluZSBjYWNoZXMuDQoNCiMjIEV2YWx1YXRpb24NCg0K V2UgaGF2ZSBzbyBmYXIgdGVzdGVkIHRoaXMgYnJhbmNoIHdpdGggW0Rpc2NvdXJzZV0oaHR0cHM6 Ly9naXRodWIuY29tL2Rpc2NvdXJzZS9kaXNjb3Vyc2UpLCBbUmFpbHNCZW5jaF0oaHR0cHM6Ly9n aXRodWIuY29tL2swa3VidW4vcmFpbHNiZW5jaCkgYW5kIFNob3BpZnkncyBtb25vbGl0aC4gV2Ug cGxhbiB0byB0ZXN0IHRoaXMgYnJhbmNoIG1vcmUgYnJvYWRseSBhZ2FpbnN0IHNldmVyYWwgb3Bl biBzb3VyY2UgUnVieSBhbmQgUmFpbHMgYXBwbGljYXRpb25zLiANCg0KQmVmb3JlIHdlIGNvbnNp ZGVyIHRoaXMgYnJhbmNoIHRvIGJlIHJlYWR5IGZvciBmb3JtYWwgcmV2aWV3LCB3ZSB3YW50IHRo ZSBydW50aW1lIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgdXNhZ2Ugb2YgdGhlc2UgYmVuY2htYXJr cyB0byBiZSBlcXVpdmFsZW50IG9yIGJldHRlciB0aGFuIGl0IGlzIGN1cnJlbnRseS4gSW4gb3Vy IG9waW5pb24sIGV2ZW4gd2l0aCBlcXVpdmFsZW50IHJ1bnRpbWUgcGVyZm9ybWFuY2UgYW5kIG1l bW9yeSB1c2FnZSwgdGhlIGZ1dHVyZSBiZW5lZml0cyBvZiB0aGlzIGFwcHJvYWNoIG1ha2UgdGhl IGNoYW5nZSBzZWVtIHdvcnRod2hpbGUuDQoNCiMjIEZlZWRiYWNrDQoNCklmIHlvdSBoYXZlIGFu eSBmZWVkYmFjaywgY29tbWVudHMsIG9yIHF1ZXN0aW9ucywgcGxlYXNlIGxldCB1cyBrbm93IGFu ZCB3ZSdsbCBkbyBvdXIgYmVzdCB0byBhZGRyZXNzIGl0LiBUaGFuayB5b3UhDQoNCi0tLUZpbGVz LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCm9iamVjdC1zaGFwZXMucGF0Y2ggKDE4 MCBLQikNCg0KDQotLSANCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLw0K