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=-1.3 required=3.0 tests=BAYES_00,BODY_8BITS, DKIM_ADSP_CUSTOM_MED,FORGED_GMAIL_RCVD,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_DNSWL_MED,SPF_PASS 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 4A25920248 for ; Mon, 25 Mar 2019 02:52:29 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id BF51C121408; Mon, 25 Mar 2019 11:52:23 +0900 (JST) Received: from o1678916x28.outbound-mail.sendgrid.net (o1678916x28.outbound-mail.sendgrid.net [167.89.16.28]) by neon.ruby-lang.org (Postfix) with ESMTPS id 71E6D1212D0 for ; Mon, 25 Mar 2019 11:52:21 +0900 (JST) Received: by filter0043p3iad2.sendgrid.net with SMTP id filter0043p3iad2-5608-5C984264-1A 2019-03-25 02:52:20.418237484 +0000 UTC m=+546916.133393717 Received: from herokuapp.com (unknown [3.87.70.209]) by ismtpd0040p1mdw1.sendgrid.net (SG) with ESMTP id WT3Osp1fSK-32Zq5FTYeWQ for ; Mon, 25 Mar 2019 02:52:20.430 +0000 (UTC) Date: Mon, 25 Mar 2019 02:52:21 +0000 (UTC) From: pikachuexe@gmail.com Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 67457 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 15626 X-Redmine-Issue-Author: tenderlovemaking X-Redmine-Sender: PikachuEXE 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-SG-EID: =?us-ascii?Q?S=2FVJxd5DjN7C4oaYOB3YxeRSd30GQKKAs2lKNqXFcsvaCyeWYhTRjWEv6bq=2Fpl?= =?us-ascii?Q?ico4CZ4xuYClGYeFJnGHIxnmpLvRVSxzYbyD7Oe?= =?us-ascii?Q?BCcOqx78YvhIY5AX8ixhJeHXuPYu2TvsEx9X9PK?= =?us-ascii?Q?iB9xZP8xdM7sVSdYA3tJekuw80SZtnPmbGFTodV?= =?us-ascii?Q?GlF5nvC9jXXNpCSG7U6vSr0DACqnTZl1anw=3D=3D?= To: ruby-core@ruby-lang.org X-ML-Name: ruby-core X-Mail-Count: 91971 Subject: [ruby-core:91971] [Ruby trunk Feature#15626] Manual Compaction for MRI's GC (`GC.compact`) X-BeenThere: ruby-core@ruby-lang.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: Ruby developers List-Id: Ruby developers List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ruby-core-bounces@ruby-lang.org Sender: "ruby-core" SXNzdWUgIzE1NjI2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgUGlrYWNodUVYRSAoUGlrYWNodSBMZXVu ZykuDQoNCg0KPiBJJ2xsIHRha2UgYSBsb29rIGF0IHRoZSBjb3JlIGZpbGUsIGJ1dCBjYW4geW91 IGdpdmUgbW9yZSBpbmZvIHNvIEkgY2FuIHRyeSBsb2NhbGx5Pw0KDQpJIGp1c3Qgc3RhcnQgbXkg Y3VycmVudCBwcm9qZWN0IHdpdGggcGFzc2VuZ2VyIGluc3RhbGxlZA0KSSB3aWxsIGNyZWF0ZSBh IHNhbXBsZSBwcm9qZWN0IHRvIHJlcHJvZHVjZSB0aGlzIGlzc3VlDQpUYWtlcyB0aW1lIHRob3Vn aCAoc3RlYWxpbmcgd29yayB0aW1lIHRvIGRvIHRoaXMsIHRob3VnaCB0aGlzIGlzIGFsc28gbGVn aXQgd29yayA+OikNCg0KQW55IGluZm8gSSBjYW4gcHJvdmlkZSB3aXRob3V0IGNyZWF0aW5nIHRo ZSBzYW1wbGUgcHJvamVjdD8NCg0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQ0KRmVhdHVyZSAjMTU2MjY6IE1hbnVhbCBDb21wYWN0aW9uIGZvciBNUkkncyBHQyAoYEdD LmNvbXBhY3RgKQ0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvaXNzdWVzLzE1NjI2I2NoYW5n ZS03NzMwMw0KDQoqIEF1dGhvcjogdGVuZGVybG92ZW1ha2luZyAoQWFyb24gUGF0dGVyc29uKQ0K KiBTdGF0dXM6IE9wZW4NCiogUHJpb3JpdHk6IE5vcm1hbA0KKiBBc3NpZ25lZTogDQoqIFRhcmdl dCB2ZXJzaW9uOiANCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkhp LA0KDQpJJ3ZlIGF0dGFjaGVkIGEgcGF0Y2ggdGhhdCBpbXBsZW1lbnRzIGEgY29tcGFjdG9yIGZv ciBNUkkuICBJJ2xsIHRyeSB0byBkZXNjcmliZSB0aGUgcGF0Y2ggaW4gZGV0YWlsIGJlbG93LCBi dXQgdGhlIGJpZ2dlc3QgdXNlciBmYWNpbmcgY2hhbmdlcyBhcmU6DQoNCjEuIEEgbmV3IG1ldGhv ZCBgR0MuY29tcGFjdGAgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gUnVieQ0KMi4gQyBleHRlbnNp b25zIGhhdmUgYSBuZXcgImFmdGVyIGNvbXBhY3Rpb24iIGNhbGxiYWNrIHRoZXkgY2FuIHJlZ2lz dGVyDQozLiBJbnRyb2R1Y3Rpb24gb2YgbmV3IG1hcmtpbmcgZnVuY3Rpb25zIHRoYXQgYWxsb3cg b2JqZWN0cyB0byBiZSBtYXJrZWQsIGJ1dCBub3QgInBpbm5lZCIgdG8gdGhlIHNhbWUgbG9jYXRp b24NCjQuIEEgZnVuY3Rpb24gdG8gZ2V0IHRoZSBuZXcgbG9jYXRpb24gb2YgYW4gb2JqZWN0ICh0 byBiZSB1c2VkIGZyb20gdGhlICJhZnRlciBjb21wYWN0aW9uIiBjYWxsYmFjaykNCg0KIyBDb21w YWN0b3IgZm9yIFJHZW5HQw0KDQpUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgY29tcGFjdG9y IGltcGxlbWVudGF0aW9uIGZvciBSR2VuR0MuICBUaGlzIHBhdGNoDQphZGRzIGEgbmV3IG1ldGhv ZCB0byBSdWJ5LCBgR0MuY29tcGFjdGAgd2hpY2ggd2lsbCBjb21wYWN0IHRoZSBvYmplY3RzIGlu IHRoZQ0KaGVhcC4gIFdoYXQgZm9sbG93cyBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0 aG0sIGFsb25nIHdpdGggYWNoaWV2ZW1lbnRzDQphbmQgdGVjaG5pY2FsIGNoYWxsZW5nZXMuDQoN CiMjIFN0ZXBzIGZvciBDb21wYWN0aW9uDQoNClRoZXNlIGFyZSB0aGUgaGlnaCBsZXZlbCBzdGVw cyB0YWtlbiBpbiBgR0MuY29tcGFjdGAgYXJlIGFzIGZvbGxvd3M6DQoNCjEuIEZ1bGwgR0MNCjIu IE1vdmUgb2JqZWN0cw0KMy4gVXBkYXRlIHJlZmVyZW5jZXMNCjQuIEZ1bGwgR0MNCg0KIyMjIFN0 ZXAgT25lLCBGdWxsIEdDDQoNCk5vdCBhbGwgb2JqZWN0cyBpbiBSdWJ5J3MgaGVhcCBjYW4gbW92 ZS4gIEluIHBhcnRpY3VsYXIsIEMgZXh0ZW5zaW9ucyBtYXkgaG9sZA0KcmVmZXJlbmNlcyB0byBW QUxVRSBwb2ludGVycy4gIElmIHRoZSBWQUxVRSBwb2ludGVycyBtb3ZlLCB0aGUgQyBleHRlbnNp b24gbWF5DQpub3QgYmUgYWJsZSB0byBmaW5kIHRoZW0gYW5kIHdpbGwgZ2V0IGEgU0VHViBvciBw b3NzaWJseSB3cm9uZyBkYXRhLg0KDQpUbyBwcmV2ZW50IHRoaXMsIGEgbmV3ICJwaW5uaW5nIiB0 YWJsZSB3YXMgaW50cm9kdWNlZC4gIEFueSBvYmplY3QgbWFya2VkIHZpYQ0KYHJiX2djX21hcmtg IGlzICJwaW5uZWQiIGFuZCBpcyBub3QgYWxsb3dlZCB0byBtb3ZlLiAgQyBleHRlbnNpb25zIG11 c3QgbWFyaw0KdGhlaXIgcmVmZXJlbmNlcyBpbiBvcmRlciB0byBrZWVwIHRoZW0gYWxpdmUuICBT aW5jZSBDIGV4dGVuc2lvbnMgdXNlDQpgcmJfZ2NfbWFya2AgdG8gbWFyayBhIHJlZmVyZW5jZSwg d2Uga25vdyBub3QgdG8gbW92ZSB0aGF0IHJlZmVyZW5jZS4gIEluIG9yZGVyDQp0byBlbnN1cmUg YWxsIHJlZmVyZW5jZXMgZ2V0IG1hcmtlZCwgd2UgcGVyZm9ybSBhIGZ1bGwgR0MuDQoNCk5ldyBm dW5jdGlvbnMsIGByYl9nY19tYXJrX25vX3BpbmAsIGV0YyB3ZXJlIGludHJvZHVjZWQgYW5kIHVz ZWQgaW50ZXJuYWxseS4NClRoZXNlIGZ1bmN0aW9ucyBrZWVwcyB0aGUgb2JqZWN0IGFsaXZlIGJ1 dCB3aXRob3V0IHBpbm5pbmcgdGhlIHJlZmVyZW5jZS4NCg0KU3VtbWFyeTogUGVyZm9ybSBhIGZ1 bGwgR0Mgc28gdGhhdCBvYmplY3RzIG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYCBkbyBub3QgbW92 ZS4NCg0KIyMjIFN0ZXAgVHdvLCBNb3ZlIE9iamVjdHMNCg0KVGhpcyBjb21wYWN0b3IgdXNlcyBh ICJ0d28gZmluZ2VyIiBhbGdvcml0aG0gd2hpY2ggd2FzIGludHJvZHVjZWQgaW4gIlRoZQ0KUHJv Z3JhbW1pbmcgTGFuZ3VhZ2UgTElTUDogSXRzIE9wZXJhdGlvbiBhbmQgQXBwbGljYXRpb25zIiAo cGFnZSAyMjgpW14xXS4gIFR3bw0KcG9pbnRlcnMgcG9pbnQgYXQgZWFjaCBzaWRlIG9mIHRoZSBo ZWFwLCBpZiBvbmUgc2xvdCBpcyBlbXB0eSwgYW5kIHRoZSBvdGhlciBpcw0KbW92ZWFibGUsIGl0 IHN3YXBzIHBsYWNlcyBhbmQgbGVhdmVzIGEgYFRfTU9WRURgIG9iamVjdCB0aGF0IGNvbnRhaW5z IGENCmZvcndhcmRpbmcgYWRkcmVzcy4NCg0KSW4gUnVieSwgdGhlIGFsZ29yaXRobSBsb29rcyBz b21ldGhpbmcgbGlrZSB0aGlzOg0KDQpgYGBydWJ5DQpkZWYgY29tcGFjdA0KICBoZWFwID0gWyAu Li4gXSAjIG1hbnkgc2xvdHMNCiAgbGVmdCAgPSAwDQogIHJpZ2h0ID0gaGVhcC5sZW5ndGggLSAx DQoNCiAgd2hpbGUgbGVmdCA8IHJpZ2h0DQogICAgbGVmdF9zbG90ID0gaGVhcFtsZWZ0XQ0KICAg IHJpZ2h0X3Nsb3QgPSBoZWFwW3JpZ2h0XQ0KDQogICAgaWYgaXNfZW1wdHk/KGxlZnRfc2xvdCkg JiYgIWlzX2VtcHR5PyhyaWdodF9zbG90KSAmJiBjYW5fbW92ZT8ocmlnaHRfc2xvdCkNCiAgICAg IHN3YXAobGVmdCwgcmlnaHQpDQogICAgICBoZWFwW3JpZ2h0XSA9IFRfTU9WRUQubmV3KGxlZnQp ICMgbGVhdmUgZm9yd2FyZGluZyBhZGRyZXNzDQogICAgZW5kDQoNCiAgICB3aGlsZSAhaXNfZW1w dHk/KGhlYXBbbGVmdF0pDQogICAgICBsZWZ0ICs9IDENCiAgICBlbmQNCg0KICAgIHdoaWxlIGlz X2VtcHR5PyhoZWFwW3JpZ2h0XSkgfHwgIWNhbl9tb3ZlPyhoZWFwW3JpZ2h0XSkNCiAgICAgIHJp Z2h0IC09IDENCiAgICBlbmQNCiAgZW5kDQplbmQNCmBgYA0KDQpJZiB3ZSBoYXZlIGEgaGVhcCB3 aXRoIDYgc2xvdHMsIGJlZm9yZSBjb21wYWN0aW9uIGl0IG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxp a2UNCnRoaXM6DQoNCmBgYA0KICAgICAgICAgICAgICAgICAgICAg4pSMIOKUgCDilIAg4pSAIOKU gCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAgICAg ICAgICAgQmVmb3JlIENvbXBhY3Rpb24gICDilIIgICAgICAgDQogICAgICAgICAgICAgICAgICAg ICDilJQg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAg DQogICAgICAgICAgICAgICDilIzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzi lIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDi lIDilIDilIDilIDilJANCiBTbG90IEluZGV4ICAgIOKUgiAgMSAg4pSCICAyICDilIIgIDMgIOKU giAgNCAg4pSCICA1ICDilIIgIDYgIOKUgg0KICAgICAgICAgICAgICAg4pSc4pSA4pSA4pSA4pSA 4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA 4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pSkDQpTbG90IENvbnRlbnRzICDi lIIgIEEgIOKUgiAgQiAg4pSCRW1wdHnilIJFbXB0eeKUgiAgQyAg4pSCICBEICDilIINCiAgICAg ICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAg IOKUgg0KICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA 4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS0 4pSA4pSA4pSA4pSA4pSA4pSYDQpgYGANCg0KQWZ0ZXIgY29tcGFjdGlvbiwgYnV0IGJlZm9yZSBy ZWZlcmVuY2UgdXBkYXRlLCBpdCB3aWxsIGxvb2sgbGlrZSB0aGlzOg0KDQpgYGANCiAgICAgICAg ICAgICAgICAgICAgIOKUjCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBDb21wYWN0aW9uICAg 4pSCICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA 4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA 4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRl eCAgICDilIIgIDEgIOKUgiAgMiAg4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIIN CiAgICAgICAgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKU gOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKU gOKUgOKUgOKUgOKUpA0KU2xvdCBDb250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgiAgRCAg4pSC ICBDICDilIJNT1ZFROKUgk1PVkVE4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg 4pSCICAgICDilIIgICAgIOKUglRPIDQg4pSCVE8gMyDilIINCiAgICAgICAgICAgICAgIOKUlOKU gOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKU gOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KYGBgDQoN ClNsb3RzIDUgYW5kIDYgY29udGFpbiBgVF9NT1ZFRGAgb2JqZWN0cyB0aGF0IHBvaW50IHRvIHRo ZSBuZXcgbG9jYXRpb25zIG9mIEQgYW5kDQpDIG9iamVjdHMuDQoNCiMjIyBTdGVwIFRocmVlLCBV cGRhdGUgUmVmZXJlbmNlcw0KDQpBZnRlciBvYmplY3RzIGhhdmUgbW92ZWQsIHJlZmVyZW5jZXMg YXJlIHVwZGF0ZWQuICBUaGlzIGlzIGEgbWF0dGVyIG9mIHVwZGF0aW5nDQphbnkgcmVmZXJlbmNl cyB0byB1c2UgdGhlIGZvcndhcmRpbmcgYWRkcmVzcyByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwg bG9jYXRpb24uDQoNCkZvciBleGFtcGxlLCBpZiBvYmplY3QgQSBoYXMgYSByZWZlcmVuY2UgdG8g QywgYW5kIEIgYSByZWZlcmVuY2UgdG8gRDoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDi lIwg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQog ICAgICAgICAgICAgICAgICAgICAgICBCZWZvcmUgQ29tcGFjdGlvbiAgIOKUgiAgICAgICANCiAg ICAgICAgICAgICAgICAgICAgIOKUlCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKU gCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKU gOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKU gOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDi lIIgIDIgIOKUgiAgMyAg4pSCICA0ICDilIIgIDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAg ICDilJzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDi lLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilKQN ClNsb3QgQ29udGVudHMgIOKUgiAgQSAg4pSCICBCICDilIJFbXB0eeKUgkVtcHR54pSCICBDICDi lIIgIEQgIOKUgg0KICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAg ICDilIIgICAgIOKUgiAgICAg4pSCDQogICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDi lLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTi lIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilJgNCiAgICAgICAgICAgICAgICAgIOKU giAgICAg4pSCICAgICAgICAgICAgICAgICDilrIgICAgIOKWsiAgIA0KICAgICAgICAgICAgICAg ICAg4pSCICAgICDilIIgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgDQogICAgICAgICAg ICAgICAgICDilJTilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilJggICAgIOKUgiAgIA0KICAgICAgICAgICAgICAgICAg ICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgDQpgYGANCg0KQWZ0ZXIgY29tcGFjdGlvbiwgYnV0 IGJlZm9yZSB1cGRhdGluZyByZWZlcmVuY2VzLCB0aGUgaGVhcCB3aWxsIGxvb2sgbGlrZSB0aGlz Og0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgIOKUjCDilIAg4pSAIOKUgCDilIAg4pSAIOKU gCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICBB ZnRlciBDb21wYWN0aW9uICAg4pSCICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAg4pSUIOKU gCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAg ICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA 4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA 4pSA4pSQDQogU2xvdCBJbmRleCAgICDilIIgIDEgIOKUgiAgMiAg4pSCICAzICDilIIgIDQgIOKU giAgNSAg4pSCICA2ICDilIINCiAgICAgICAgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUvOKU gOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKU gOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUpA0KU2xvdCBDb250ZW50cyAg4pSCICBBICDi lIIgIEIgIOKUgiAgRCAg4pSCICBDICDilIJNT1ZFROKUgk1PVkVE4pSCDQogICAgICAgICAgICAg ICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUglRPIDQg4pSCVE8gMyDilIINCiAg ICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKU gOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKU gOKUgOKUgOKUmA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgICAgICAgICAgICAg IOKWsiAgICAg4payICAgDQogICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAgICAgICAg ICAgICAg4pSCICAgICDilIIgICANCiAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKU gOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU mCAgICAg4pSCICAgDQogICAgICAgICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJgg ICANCmBgYA0KDQpUaGUgdXBkYXRlIHJlZmVyZW5jZXMgc3RlcCBsb29rcyBhdCBlYWNoIG9iamVj dCBpbiB0aGUgaGVhcCwgY2hlY2tzIHRvIHNlZSBpZiBpdA0KcmVmZXJlbmNlcyBhbnkgbW92ZWQg c2xvdHMsIHRoZW4gdXBkYXRlcyB0aGUgcmVmZXJlbmNlIHRvIHVzZSB0aGUgbmV3IGxvY2F0aW9u Lg0KSW4gUnVieSwgaXQgbG9va3MgbGlrZSB0aGlzOg0KDQpgYGBydWJ5DQpkZWYgdXBkYXRlX3Jl ZmVyZW5jZXMNCiAgaGVhcC5lYWNoIGRvIHxzbG90fA0KICAgIG5leHQgaWYgaXNfZW1wdHk/KHNs b3QpIHx8IGlzX21vdmVkPyhzbG90KQ0KDQogICAgc2xvdC5yZWZlcmVuY2VzLmVhY2hfd2l0aF9p bmRleCBkbyB8Y2hpbGQsIGl8DQogICAgICBpZiBpc19tb3ZlZD8oY2hpbGQpDQogICAgICAgIHNs b3Quc2V0X3JlZmVyZW5jZShpLCBjaGlsZC5uZXdfbG9jYXRpb24pDQogICAgICBlbmQNCiAgICBl bmQNCiAgZW5kDQplbmQNCmBgYA0KDQpBZnRlciByZWZlcmVuY2UgdXBkYXRlcywgdGhlIGhlYXAg d2lsbCBsb29rIGxpa2UgdGhpczoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDilIwg4pSA IOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAg ICAgICAgICAgICAgICAgICBBZnRlciBSZWYgVXBkYXRlcyAgIOKUgiAgICAgICANCiAgICAgICAg ICAgICAgICAgICAgIOKUlCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAICAgICAgICANCiAgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKU gOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKU gOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIg IOKUgiAgMyAg4pSCICA0ICDilIIgIDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzi lIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDi lIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilKQNClNsb3Qg Q29udGVudHMgIOKUgiAgQSAg4pSCICBCICDilIIgIEQgIOKUgiAgQyAg4pSCTU9WRUTilIJNT1ZF ROKUgg0KICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIJU TyA0IOKUglRPIDMg4pSCDQogICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLTilIDi lIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDi lIDilIDilIDilLTilIDilIDilIDilIDilIDilJgNCiAgICAgICAgICAgICAgICAgIOKUgiAgICAg 4pSCICAgICDilrIgICAgIOKWsiAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAg4pSC ICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAg ICDilJTilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDi lJggICAgICAgICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKU gOKUgOKUmCAgICAgICAgICAgICAgICAgICAgIA0KYGBgDQoNCiMjIyBTdGVwIEZvdXIsIEZ1bGwg R0MNCg0KQWZ0ZXIgcmVmZXJlbmNlcyBoYXZlIGJlZW4gdXBkYXRlZCwgYSBmdWxsIEdDIGlzIHBl cmZvcm1lZC4gIFRoaXMgY29udmVydHMgdGhlDQpgVF9NT1ZFRGAgc2xvdHMgYmFjayBpbiB0byBg VF9FTVBUWWAgc2xvdHMuICBUaGUgR0MgYXV0b21hdGljYWxseSB0YWtlcyBjYXJlIG9mDQp0aGlz IGJlY2F1c2Ugbm8gb2JqZWN0IHNob3VsZCByZWZlcmVuY2UgYSBgVF9NT1ZFRGAgc2xvdC4NCg0K IyMgTm9uIE1vdmluZyBPYmplY3RzDQoNCk5vbiBtb3Zpbmcgb2JqZWN0cyBhcmU6DQoNCjEuIE9i amVjdHMgb24gdGhlIHN0YWNrDQoyLiBPYmplY3RzIG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYA0K My4gSGFzaCBrZXkgb2JqZWN0cw0KDQojIyMgT2JqZWN0cyBvbiB0aGUgc3RhY2sNCg0KVGhlIHN0 YWNrIHNob3VsZCBub3QgYmUgbXV0YXRlZCwgc28gdGhlc2UgYXJlIHBpbm5lZC4NCg0KIyMjIE9i amVjdHMgbWFya2VkIHdpdGggYHJiX2djX21hcmtgDQoNCkFzIG1lbnRpb25lZCBlYXJsaWVyLCBh bnkgb2JqZWN0IG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYCBtYXkgbm90IG1vdmUgYmVjYXVzZSBh DQpDIGV4dGVuc2lvbiBtYXkgaG9sZCBhIHJlZmVyZW5jZS4gIEhlcmUgaXMgYW4gZXhjZXJwdCBm cm9tIFlhamwsIGEgSlNPTiBwYXJzZXIuDQpUaGlzIGlzIHRoZSBtYXJrIGZ1bmN0aW9uIGl0IHVz ZXM6DQoNCmBgYGMNCnN0YXRpYyB2b2lkIHlhamxfZW5jb2Rlcl93cmFwcGVyX21hcmsodm9pZCAq IHdyYXBwZXIpIHsNCiAgICB5YWpsX2VuY29kZXJfd3JhcHBlciAqIHcgPSB3cmFwcGVyOw0KICAg IGlmICh3KSB7DQogICAgICAgIHJiX2djX21hcmsody0+b25fcHJvZ3Jlc3NfY2FsbGJhY2spOw0K ICAgICAgICByYl9nY19tYXJrKHctPnRlcm1pbmF0b3IpOw0KICAgIH0NCn0NCg0KDQpvYmogPSBE YXRhX01ha2VfU3RydWN0KGtsYXNzLCB5YWpsX2VuY29kZXJfd3JhcHBlciwgeWFqbF9lbmNvZGVy X3dyYXBwZXJfbWFyaywgeWFqbF9lbmNvZGVyX3dyYXBwZXJfZnJlZSwgd3JhcHBlcik7DQpgYGAN Cg0KVGhlIHZhbHVlcyBpbiB0aGlzIG1hcmsgZnVuY3Rpb24gYHctPm9uX3Byb2dyZXNzX2NhbGxi YWNrYCBhbmQgYHctPnRlcm1pbmF0b3JgDQp3aWxsIG5vdCBtb3ZlIHNpbmNlIHRoZXkgYXJlIHBp bm5lZCBieSBgcmJfZ2NfbWFya2AuDQoNCiMjIyBIYXNoIGtleSBvYmplY3RzDQoNCkNlcnRhaW4g aGFzaCBrZXlzIHdpbGwgbm90IG1vdmUuICBNb3N0IG9iamVjdHMgdXNlIHRoZWlyIGFkZHJlc3Mg YXMgdGhlIGhhc2gNCnZhbHVlLiAgSWYgdGhlIG9iamVjdCBtb3ZlcywgdGhlIGhhc2ggdmFsdWUg Y291bGQgY2hhbmdlLCBzbyBoYXNoIGtleXMgYXJlIG5vdA0KYWxsb3dlZCB0byBtb3ZlLg0KDQpU aGVyZSBpcyBhbiBleGNlcHRpb24gZm9yIHN0cmluZyBvYmplY3RzLiAgU3RyaW5nIG9iamVjdHMg Y2FsY3VsYXRlIHRoZWlyIGhhc2gNCmJhc2VkIG9uIHRoZSBieXRlcyBpbiB0aGUgc3RyaW5nLiAg U2luY2UgdGhlIGJ5dGVzIGluIHRoZSBzdHJpbmcgZG8gbm90IGNoYW5nZQ0KYWZ0ZXIgbW92ZSwg dGhleSBhcmUgYWxsb3dlZCB0byBtb3ZlLiAgTW9zdCBoYXNoIGtleXMgaW4gbGFyZ2UgcHJvZ3Jh bXMgYXJlDQpzdHJpbmdzLCBzbyBvbmx5IGFsbG93aW5nIHN0cmluZyBrZXlzIHRvIG1vdmUgc2Vl bWVkIGVub3VnaC4NCg0KIyMgU3BlY2lhbCBDb25zaWRlcmF0aW9ucw0KDQojIyMgT2JqZWN0IElE DQoNCmBPYmplY3Qjb2JqZWN0X2lkYCBiYXNlcyBpdHMgdmFsdWUgZnJvbSB0aGUgYWRkcmVzcyBv ZiB0aGUgb2JqZWN0LiAgRm9yIGV4YW1wbGU6DQoNCmBgYHJ1YnkNCnggPSBPYmplY3QubmV3DQpp ZCA9IHgub2JqZWN0X2lkDQpHQy5jb21wYWN0ICAgICAgICAjIGB4YCBtb3Zlcw0KaWQgPT0geC5v YmplY3RfaWQgIyBgaWRgIHNob3VsZCBiZSBzYW1lIGFzIGB4Lm9iamVjdF9pZGANCmBgYA0KDQpX ZSBleHBlY3QgdGhlIG9iamVjdCBpZCB0byByZW1haW4gdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiBj b21wYWN0aW9uLiAgVG8gZGVhbA0Kd2l0aCBgb2JqZWN0X2lkYCwgdHdvIGhhc2hlcyB3ZXJlIGlu dHJvZHVjZWQuICBPbmUgaGFzaCBjb250YWlucyBhIG1hcCBvZiB0aGUNCm9iamVjdCB0byB0aGUg KnNlZW4qIG9iamVjdCBpZC4gIFRoZSBzZWNvbmQgbWFwIGNvbnRhaW5zIGFsbCBzZWVuIG9iamVj dCBpZHMuDQpUaGUgbWFwcyBhcmUgdXBkYXRlZCBhbnkgdGltZSBgb2JqZWN0X2lkYCBpcyBjYWxs ZWQsIGFuIG9iamVjdCBtb3Zlcywgb3IgYW4NCm9iamVjdCBpcyBmcmVlZC4NCg0Kb2JqZWN0X2lk IGltcGxlbWVudGF0aW9uIGluIFJ1Ynk6DQoNCmBgYHJ1YnkNCiRvYmpfdG9faWQgPSB7fQ0KJGlk X3RvX29iaiA9IHt9DQoNCmNsYXNzIE9iamVjdA0KICBkZWYgb2JqZWN0X2lkDQogICAgaWYgJG9i al90b19pZC5rZXk/KGFkZHJlc3MpDQogICAgICAjIFNlY29uZCBjYWxsIHRvIG9iamVjdF9pZCBv biB0aGlzIG9iamVjdA0KICAgICAgcmV0dXJuICRvYmpfdG9faWRbYWRkcmVzc10NCiAgICBlbHNl DQogICAgICAjIEZpcnN0IGNhbGwgdG8gb2JqZWN0X2lkIG9uIHRoaXMgb2JqZWN0DQoNCiAgICAg IGFkZHIgPSBzZWxmLmFkZHJlc3MNCg0KICAgICAgbG9vcCBkbw0KICAgICAgICBpZiAkc2Vlbl9p ZHMua2V5PyhhZGRyKQ0KICAgICAgICAgICMgUmVzb2x2ZSBjb25mbGljdA0KICAgICAgICAgIGFk ZHIgKz0gc2l6ZW9mKFJWQUxVRSkNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICRvYmpfdG9faWRb c2VsZi5hZGRyZXNzXSA9IGFkZHINCiAgICAgICAgICAkaWRfdG9fb2JqW2FkZHJdICAgICAgICAg PSBzZWxmDQogICAgICAgICAgcmV0dXJuIGFkZHINCiAgICAgICAgZW5kDQogICAgICBlbmQNCiAg ICBlbmQNCiAgZW5kDQoNCiAgcHJpdmF0ZQ0KDQogIGRlZiBhZGRyZXNzDQogICAgIyByZXR1cm5z IGFkZHJlc3MgaW4gbWVtb3J5IG9mIG9iamVjdA0KICBlbmQNCmVuZA0KYGBgDQoNCkR1cmluZyBj b21wYWN0aW9uOg0KDQpgYGBydWJ5DQpkZWYgY29tcGFjdA0KICBoZWFwID0gWyAuLi4gXSAjIG1h bnkgc2xvdHMNCg0KICB3aGlsZSBsZWZ0IDwgcmlnaHQNCiAgICBkZXN0X3Nsb3QgPSBoZWFwW2xl ZnRdDQogICAgc291cmNlX3Nsb3QgPSBoZWFwW3JpZ2h0XQ0KDQogICAgaWYgbW92aW5nPyhzb3Vy Y2Vfc2xvdCkNCiAgICAgIGlmICRvYmpfdG9faWQua2V5Pyhzb3VyY2Vfc2xvdC5hZGRyZXNzKQ0K ICAgICAgICBpZCA9ICRvYmpfdG9faWQuZGVsZXRlKHNvdXJjZV9zbG90LmFkZHJlc3MpDQogICAg ICAgICRvYmpfdG9faWRbZGVzdF9zbG90LmFkZHJlc3NdID0gaWQNCiAgICAgICAgJGlkX3RvX29i altpZF0gICAgICAgICAgICAgICAgPSBkZXN0X3Nsb3QuYWRkcmVzcw0KICAgICAgZW5kDQoNCiAg ICAgICMgZXRjDQogICAgZW5kDQogIGVuZA0KZW5kDQpgYGANCg0KRHVyaW5nIEZyZWU6DQoNCmBg YHJ1YnkNCmRlZiBmcmVlKG9iaikNCiAgaWYgJG9ial90b19pZC5rZXk/KG9iai5hZGRyZXNzKQ0K ICAgICRzZWVuX2lkcy5kZWxldGUoJG9ial90b19pZC5kZWxldGUob2JqLmFkZHJlc3MpKQ0KICBl bmQNCmVuZA0KYGBgDQoNCiMjIyBPYmplY3RTcGFjZS5faWQycmVmDQoNCldoZW4gZ2VuZXJhdGlu ZyBhbiBvYmplY3QgaWQsIGluIHRoZSBjYXNlIG9mIGEgY29sbGlzaW9uLCB0aGUgYWRkcmVzcyBp cw0KaW5jcmVtZW50ZWQgYnkgNDAuICBUaGlzIGVuYWJsZXMgYF9pZDJyZWZgIHRvIGRldGVybWlu ZSB0aGVyZSBpcyBhIFZBTFVFIHBvaW50ZXINCmFuZCByb3VuZCB0cmlwIHRoZSBvYmplY3QgY29y cmVjdGx5Lg0KDQojIyBDb21wYWN0aW9uIFN1cHBvcnQgZm9yIEMgZXh0ZW5zaW9ucw0KDQpBbnkg b2JqZWN0IG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYCB3aWxsIGJlICJwaW5uZWQiIGFuZCBjYW5u b3QgbW92ZS4gIEMNCmV4dGVuc2lvbnMgbWFyayBvYmplY3RzIHZpYSBgcmJfZ2NfbWFya2AsIHNv IHRoaXMgZW5zdXJlcyB0aGF0IHBvaW50ZXJzIGluIEMNCnN0YXkgdmFsaWQuDQoNCkhvd2V2ZXIs IHNvbWUgQyBleHRlbnNpb25zIG1heSB3YW50IHRvIHN1cHBvcnQgcmVmZXJlbmNlIG1vdmVtZW50 Lg0KDQojIyMgUmVmZXJlbmNlIE1vdmVtZW50IGluIEMgZXh0ZW5zaW9ucw0KDQpJbiBvcmRlciB0 byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgaWYgYSBDIGV4dGVuc2lvbiBob2xk cyBhIHJlZmVyZW5jZQ0KdG8gYSBWQUxVRSwgdGhlIFZBTFVFIHNob3VsZCBub3QgbW92ZS4gIEdv aW5nIGZvcndhcmQsIEMgZXh0ZW5zaW9ucyBjYW4gc3VwcG9ydA0KbW92aW5nIFZBTFVFcy4gIFRv IHN1cHBvcnQgbW92aW5nIFZBTFVFcywgYSBDIGV4dGVuc2lvbiBzaG91bGQgY2hhbmdlDQpgcmJf Z2NfbWFya2AgdG8gYHJiX2djX21hcmtfbm9fcGluYCwgdGhlbiBpbXBsZW1lbnQgYSBuZXcgY2Fs bGJhY2sgdGhhdCBpcw0KY2FsbGVkIGR1cmluZyBjb21wYWN0aW9uIHRoYXQgZ2l2ZXMgdGhlIGV4 dGVuc2lvbiBhbiBvcHBvcnR1bml0eSB0byB1cGRhdGUgaXRzDQpvd24gcmVmZXJlbmNlcy4gIEEg bmV3IGZ1bmN0aW9uIGByYl9nY19uZXdfbG9jYXRpb25gIHdpbGwgcmV0dXJuIHRoZSBuZXcNCmxv Y2F0aW9uIGZvciBhIHBhcnRpY3VsYXIgVkFMVUUuDQoNCkhlcmUgaXMgYW4gZXhhbXBsZSBmb3Ig YXV0b2xvYWQgZnJvbSBgdmFyaWFibGUuY2AuICBBIG5ldyBjb21wYWN0aW9uIGNhbGxiYWNrIGlz DQpyZWdpc3RlcmVkLCBgYXV0b2xvYWRfaV9jb21wYWN0YDoNCg0KYGBgYw0Kc3RhdGljIGNvbnN0 IHJiX2RhdGFfdHlwZV90IGF1dG9sb2FkX2RhdGFfaV90eXBlID0gew0KICAgICJhdXRvbG9hZF9p IiwNCiAgICB7YXV0b2xvYWRfaV9tYXJrLCBhdXRvbG9hZF9pX2ZyZWUsIGF1dG9sb2FkX2lfbWVt c2l6ZSwgYXV0b2xvYWRfaV9jb21wYWN0fSwNCiAgICAwLCAwLCBSVUJZX1RZUEVEX0ZSRUVfSU1N RURJQVRFTFkNCn07DQpgYGANCg0KVGhlIG1hcmsgZnVuY3Rpb24gY2hhbmdlcyB0byAqbWFyayog cmVmZXJlbmNlcywgYnV0ICpub3QqIHBpbiB0aGVtOg0KDQpgYGBjDQpzdGF0aWMgdm9pZA0KYXV0 b2xvYWRfaV9tYXJrKHZvaWQgKnB0cikNCnsNCiAgICBzdHJ1Y3QgYXV0b2xvYWRfZGF0YV9pICpw ID0gcHRyOw0KDQogICAgcmJfZ2NfbWFya19ub19waW4ocC0+ZmVhdHVyZSk7DQoNCiAgICAvKiBh bGxvdyBHQyB0byBmcmVlIHVzIGlmIG5vIG1vZHVsZXMgcmVmZXIgdG8gdGhpcyB2aWEgYXV0b2xv YWRfY29uc3QuYWQgKi8NCiAgICBpZiAobGlzdF9lbXB0eSgmcC0+Y29uc3RhbnRzKSkgew0KICAg ICAgICByYl9oYXNoX2RlbGV0ZShhdXRvbG9hZF9mZWF0dXJlbWFwLCBwLT5mZWF0dXJlKTsNCiAg ICB9DQp9DQpgYGANCg0KQWZ0ZXIgdGhlIGhlYXAgaXMgY29tcGFjdGVkLCBhbnkgQyBleHRlbnNp b25zIHRoYXQgcmVnaXN0ZXJlZCBhICJjb21wYWN0aW9uIg0KY2FsbGJhY2sgd2lsbCBiZSBjYWxs ZWQgYW5kIGhhdmUgYSBjaGFuY2UgdG8gdXBkYXRlIGludGVybmFsIHJlZmVyZW5jZXMuICBUaGUN CmF1dG9sb2FkIGNvbXBhY3Rpb24gZnVuY3Rpb24gaXMgbGlrZSB0aGlzOg0KDQpgYGBjDQpzdGF0 aWMgdm9pZA0KYXV0b2xvYWRfaV9jb21wYWN0KHZvaWQgKnB0cikNCnsNCiAgICBzdHJ1Y3QgYXV0 b2xvYWRfZGF0YV9pICpwID0gcHRyOw0KICAgIHAtPmZlYXR1cmUgPSByYl9nY19uZXdfbG9jYXRp b24ocC0+ZmVhdHVyZSk7DQpgYGANCg0KVGhlIGNvbXBhY3Rpb24gY2FsbGJhY2sgYXNrcyBmb3Ig dGhlIG5ldyBsb2NhdGlvbiBmb3IgdGhlIGBwLT5mZWF0dXJlYA0KcmVmZXJlbmNlLiAgYHJiX2dj X25ld19sb2NhdGlvbmAgd2lsbCBlaXRoZXIgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mDQpg cC0+ZmVhdHVyZWAgKGluIHRoZSBjYXNlIHRoZSBWQUxVRSBkaWQgbm90IG1vdmUpLCBvciB0aGUg bmV3IGxvY2F0aW9uLg0KDQojIyBSZWZlcmVuY2UgVmVyaWZpY2F0aW9uIGFuZCBUZXN0aW5nDQoN CkFmdGVyIGNvbXBhY3Rpb24sIG9iamVjdHMgdGhhdCBoYXZlIG1vdmVkIGFyZSBjaGFuZ2VkIHRv IGBUX01PVkVEYCBvYmplY3RzIHdpdGgNCmZvcndhcmRpbmcgYWRkcmVzc2VzLiAgT25jZSBhbGwg cmVmZXJlbmNlcyBhcmUgdXBkYXRlZCwgbm8gb2JqZWN0IHNob3VsZCBwb2ludA0KdG8gYSBgVF9N T1ZFRGAgc2xvdC4gIFdlIGNhbiBzYXkgdGhhdCBiZWZvcmUgYW5kIGFmdGVyIGNvbXBhY3Rpb24s IG5vIG9iamVjdA0Kc2hvdWxkIGV2ZXIgcG9pbnQgYXQgYSBgVF9NT1ZFRGAgc2xvdC4gIFNvIGlm IGEgYFRfTU9WRURgIG9iamVjdCBpcyBldmVyIHB1c2hlZA0Kb24gdG8gdGhlIG1hcmsgcXVldWUs IHRoZXJlIGlzIGEgYnVnLiAgYHB1c2hfbWFya19zdGFja2AgaGFzIGEgY2hlY2sgZm9yDQpgVF9N T1ZFRGAgb2JqZWN0cywgYW5kIHdpbGwgY3Jhc2ggaWYgYSBgVF9NT1ZFRGAgb2JqZWN0IGlzIGV2 ZXIgcHVzaGVkIG9uIHRvIHRoZQ0KbWFyayBzdGFjay4NCg0KQSBtZXRob2QgYEdDLnZlcmlmeV9j b21wYWN0aW9uX3JlZmVyZW5jZXNgIHdhcyBhZGRlZCB0aGF0IGRvdWJsZXMgdGhlIGF2YWlsYWJs ZQ0KaGVhcCBzaXplLCB0aGVuIGNvbXBhY3RzIHRoZSBoZWFwLiAgU2luY2UgdGhlIGhlYXAgaGFz IGRvdWJsZWQgaW4gc2l6ZSwgYW55DQpvYmplY3QgdGhhdCBjYW4gbW92ZSB3aWxsIG1vdmUuICBB bnkgcmVmZXJlbmNlcyB0byBgVF9NT1ZFRGAgb2JqZWN0cyB3aWxsIGJlDQpjYXVnaHQgZHVyaW5n IHRoZSBHQyBwaGFzZSBhZnRlciBjb21wYWN0aW9uLg0KDQojIyBLbm93biBJc3N1ZQ0KDQpTYWZl dHkgZm9yIEMgZXh0ZW5zaW9ucyBkZXBlbmRzIGVudGlyZWx5IG9uIEMgZXh0ZW5zaW9ucyBtYXJr aW5nIHRoZWlyDQpyZWZlcmVuY2VzLiAgSWYgYSBDIGV4dGVuc2lvbiBkb2VzIG5vdCBtYXJrIGEg cmVmZXJlbmNlLCB0aGUgY29tcGFjdG9yIGFzc3VtZXMNCnRoYXQgdGhlIG9iamVjdCBpcyBzYWZl IHRvIG1vdmUuICBUaGlzIGNhbiBjYXVzZSBhbiBlcnJvciBpbiB0aGUgZm9sbG93aW5nDQpzaXR1 YXRpb24sIHdoZW4gdGhlcmUgaXMgYW4gb2JqZWN0IGdyYXBoIGxpa2UgdGhpczoNCg0KDQpgYGAN CiDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAg ICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIA0K IOKUgiAgUnVieSBPYmplY3QgIOKUgiAgICAgICDilIIgIFJ1YnkgT2JqZWN0ICDilIIgDQog4pSC ICBJbXBsZW1lbnRlZCAg4pSCICAgICAgIOKUgiAgSW1wbGVtZW50ZWQgIOKUgiANCiDilIIgICAg aW4gUnVieSAgICDilIIgICAgICAg4pSCICAgICBpbiBDICAgICAg4pSCIA0KIOKUgiAgICAgICAg ICAgICAgIOKUgiAgICAgICDilIIgICAgICAgICAgICAgICDilIIgDQog4pSU4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICAgIOKUlOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCANCiAgICAgICAgIOKUgiAgICAg ICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgDQogICAgICAgICDilIIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAg 4pSCICAgTk9UICAgDQogTWFya2VkICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtl ZCANCiAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgDQogICAg ICAgICDilIIgICDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilJAgICAgICAgICAgICAgDQogICAgICAgICDilIIgICDilIIgICAgICAgICAgICAgICDilIIg ICDilIIgICAgICAgICANCiAgICAgICAgIOKUgiAgIOKUgiAgUnVieSBPYmplY3QgIOKUgiAgICAg ICAgICAgICANCiAgICAgICAgIOKUlOKUgOKUgOKWtuKUgiAgICAgICAgICAgICAgIOKUguKXgOKU gCDilJggICAgICAgICANCiAgICAgICAgICAgICDilIIgICAgICAgICAgICAgICDilIIgICAgICAg ICAgICAgDQogICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSYICAgICAgICAgICAgIA0KYGBgDQoNCklmIHRoZSBDIGV4dGVuc2lvbiBj b250YWlucyBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3QsIGJ1dCBleHBlY3RzIHRoZSBvYmplY3QN Cm5vdCB0byBtb3ZlIGJlY2F1c2UgYSBSdWJ5IG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSwg dGhlbiB0aGUgdGFyZ2V0IFJ1YnkNCm9iamVjdCAqbWF5KiBtb3ZlIGFuZCB0aGUgcmVmZXJlbmNl IGluIHRoZSBDIGV4dGVuc2lvbiB3aWxsIGJlIHdyb25nLiAgSSBsaWtlIHRvDQpjYWxsIHRoZXNl ICJnaG9zdCByZWZlcmVuY2VzIiBiZWNhdXNlIHRoZSBHQyBjYW5ub3Qgc2VlIHRoZW0gYnV0IHRo ZXkgd2lsbCBjb21lDQpiYWNrIHRvIGhhdW50IHlvdS4NCg0KVGhlIHNvbHV0aW9uIHRvIHRoaXMg aXMgZWl0aGVyOg0KDQoxLiBDaGFuZ2UgdGhlIEMgZXh0ZW5zaW9uIHRvIGByYl9nY19tYXJrYCB0 aGUgb2JqZWN0DQoyLiBSZW1vdmUgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBDIGV4dGVuc2lvbg0K DQpPbmUgZXhhbXBsZSBvZiB0aGlzIHNpdHVhdGlvbiB3YXMgZml4ZWQgaGVyZToNCg0KICBodHRw czovL2dpdGh1Yi5jb20vbXNncGFjay9tc2dwYWNrLXJ1YnkvaXNzdWVzLzEzMw0KDQojIyBTdW1t YXJ5DQoNCkJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdpdGggQyBleHRlbnNpb25zIGlzIG1haW50 YWluZWQgYnkgInBpbm5pbmciIGFueQ0KcmVmZXJlbmNlcyBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFy a2AuICBBIGZ1bGwgbWFyayAqbXVzdCogYmUgZG9uZSBiZWZvcmUNCmNvbXBhY3RpbmcgdG8gZGlz Y292ZXIgYWxsIHBpbm5lZCByZWZlcmVuY2VzLg0KDQpBIG5ldyBjYWxsYmFjayBmb3IgQyBleHRl bnNpb25zIGlzIGludHJvZHVjZWQgc28gdGhhdCBDIGV4dGVuc2lvbnMgY2FuIHN1cHBvcnQNCmNv bXBhY3Rpb24uICBDIGV4dGVuc2lvbnMgdGhhdCB3aXNoIHRvIHN1cHBvcnQgY29tcGFjdGlvbiBt dXN0IHVzZSB0aGUgbmV3DQpjYWxsYmFjaywgYHJiX2djX21hcmtfbm9fcGluYCwgYW5kIGByYl9n Y19uZXdfbG9jYXRpb25gLg0KDQpDIGV4dGVuc2lvbnMgdGhhdCBtYWludGFpbiBwb2ludGVycyBi dXQgZG8gbm90IG1hcmsgdGhvc2UgcG9pbnRlcnMgbWF5IFNFR1YuICBXZQ0KY2FuIHVzZSBgR0Mu dmVyaWZ5X2NvbXBhY3Rpb25fcmVmZXJlbmNlc2AgdG8gZGlzY292ZXIgdGhlc2UgaXNzdWVzLg0K DQpbXjFdOiBTZWUgYWxzbyAiVGhlIEdhcmJhZ2UgQ29sbGVjdGlvbiBIYW5kYm9vayIgcGFnZSAz Mg0KDQoNCi0tLUZpbGVzLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCmJlZm9yZV9j b21wYWN0LTAucG5nICgxMTEgS0IpDQphZnRlcl9jb21wYWN0LTAucG5nICg4MC42IEtCKQ0KYmVm b3JlX2NvbXBhY3QtMS5wbmcgKDgxLjIgS0IpDQphZnRlcl9jb21wYWN0LTEucG5nICg3OS40IEtC KQ0KMDAwMS1HQy1Db21wYWN0aW9uLWZvci1NUkkucGF0Y2ggKDc3LjQgS0IpDQpydWJ5XzIwMTkt MDMtMjItMTcxODM5X1Bpa2FjaHVFWEVzLU1CUC0yMDE4LmNyYXNoICg3MS40IEtCKQ0KcnVieV8y MDE5LTAzLTIyLTE3MTgzOS0xX1Bpa2FjaHVFWEVzLU1CUC0yMDE4LmNyYXNoICg3MS40IEtCKQ0K DQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvDQo=