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=-2.6 required=3.0 tests=BAYES_00,BODY_8BITS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,SPF_PASS 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 ADA3A20248 for ; Wed, 27 Feb 2019 22:13:21 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id A4160121C90; Thu, 28 Feb 2019 07:13:17 +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 97619120F34 for ; Thu, 28 Feb 2019 07:13:14 +0900 (JST) Received: by filter0032p3iad2.sendgrid.net with SMTP id filter0032p3iad2-17613-5C770B78-1C 2019-02-27 22:13:12.451208221 +0000 UTC m=+316216.857974017 Received: from herokuapp.com (ec2-54-91-101-91.compute-1.amazonaws.com [54.91.101.91]) by ismtpd0025p1mdw1.sendgrid.net (SG) with ESMTP id 8azVgf15TYaI6dwk-PRXAQ for ; Wed, 27 Feb 2019 22:13:10.867 +0000 (UTC) Date: Wed, 27 Feb 2019 22:13:13 +0000 (UTC) From: tenderlove@ruby-lang.org To: ruby-core@ruby-lang.org Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 67084 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 15626 X-Redmine-Issue-Author: tenderlovemaking 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-SG-EID: ync6xU2WACa70kv/Ymy4QrNMhiuLXJG8OTL2vJD1yS6e/dNnEoorlzAQDfKGcPfYEQj+UZzp3BiJAb 5MEgdn6sZ+LvpJxQYRZI1WCMpmONpkBE16GiA1tTCfnkdwctvmATL9XE2vf28rV3Uaqe2VnCMJ2msl 22/bDiWttZrgp19fSxN0VTCfGktfc71LQjrOU1knwLEVDjlzC2rHBWdWHA== X-ML-Name: ruby-core X-Mail-Count: 91634 Subject: [ruby-core:91634] [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" SXNzdWUgIzE1NjI2IGhhcyBiZWVuIHJlcG9ydGVkIGJ5IHRlbmRlcmxvdmVtYWtpbmcgKEFhcm9u IFBhdHRlcnNvbikuDQoNCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0N CkZlYXR1cmUgIzE1NjI2OiBNYW51YWwgQ29tcGFjdGlvbiBmb3IgTVJJJ3MgR0MgKGBHQy5jb21w YWN0YCkNCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8xNTYyNg0KDQoqIEF1dGhv cjogdGVuZGVybG92ZW1ha2luZyAoQWFyb24gUGF0dGVyc29uKQ0KKiBTdGF0dXM6IE9wZW4NCiog UHJpb3JpdHk6IE5vcm1hbA0KKiBBc3NpZ25lZTogDQoqIFRhcmdldCB2ZXJzaW9uOiANCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCkhpLA0KDQpJJ3ZlIGF0dGFjaGVk IGEgcGF0Y2ggdGhhdCBpbXBsZW1lbnRzIGEgY29tcGFjdG9yIGZvciBNUkkuICBJJ2xsIHRyeSB0 byBkZXNjcmliZSB0aGUgcGF0Y2ggaW4gZGV0YWlsIGJlbG93LCBidXQgdGhlIGJpZ2dlc3QgdXNl ciBmYWNpbmcgY2hhbmdlcyBhcmU6DQoNCjEuIEEgbmV3IG1ldGhvZCBgR0MuY29tcGFjdGAgdGhh dCBjYW4gYmUgY2FsbGVkIGZyb20gUnVieQ0KMi4gQyBleHRlbnNpb25zIGhhdmUgYSBuZXcgImFm dGVyIGNvbXBhY3Rpb24iIGNhbGxiYWNrIHRoZXkgY2FuIHJlZ2lzdGVyDQozLiBJbnRyb2R1Y3Rp b24gb2YgbmV3IG1hcmtpbmcgZnVuY3Rpb25zIHRoYXQgYWxsb3cgb2JqZWN0cyB0byBiZSBtYXJr ZWQsIGJ1dCBub3QgInBpbm5lZCIgdG8gdGhlIHNhbWUgbG9jYXRpb24NCjQuIEEgZnVuY3Rpb24g dG8gZ2V0IHRoZSBuZXcgbG9jYXRpb24gb2YgYW4gb2JqZWN0ICh0byBiZSB1c2VkIGZyb20gdGhl ICJhZnRlciBjb21wYWN0aW9uIiBjYWxsYmFjaykNCg0KIyBDb21wYWN0b3IgZm9yIFJHZW5HQw0K DQpUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgY29tcGFjdG9yIGltcGxlbWVudGF0aW9uIGZv ciBSR2VuR0MuICBUaGlzIHBhdGNoDQphZGRzIGEgbmV3IG1ldGhvZCB0byBSdWJ5LCBgR0MuY29t cGFjdGAgd2hpY2ggd2lsbCBjb21wYWN0IHRoZSBvYmplY3RzIGluIHRoZQ0KaGVhcC4gIFdoYXQg Zm9sbG93cyBpcyBhIGRlc2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG0sIGFsb25nIHdpdGggYWNo aWV2ZW1lbnRzDQphbmQgdGVjaG5pY2FsIGNoYWxsZW5nZXMuDQoNCiMjIFN0ZXBzIGZvciBDb21w YWN0aW9uDQoNClRoZXNlIGFyZSB0aGUgaGlnaCBsZXZlbCBzdGVwcyB0YWtlbiBpbiBgR0MuY29t cGFjdGAgYXJlIGFzIGZvbGxvd3M6DQoNCjEuIEZ1bGwgR0MNCjIuIE1vdmUgb2JqZWN0cw0KMy4g VXBkYXRlIHJlZmVyZW5jZXMNCjQuIEZ1bGwgR0MNCg0KIyMjIFN0ZXAgT25lLCBGdWxsIEdDDQoN Ck5vdCBhbGwgb2JqZWN0cyBpbiBSdWJ5J3MgaGVhcCBjYW4gbW92ZS4gIEluIHBhcnRpY3VsYXIs IEMgZXh0ZW5zaW9ucyBtYXkgaG9sZA0KcmVmZXJlbmNlcyB0byBWQUxVRSBwb2ludGVycy4gIElm IHRoZSBWQUxVRSBwb2ludGVycyBtb3ZlLCB0aGUgQyBleHRlbnNpb24gbWF5DQpub3QgYmUgYWJs ZSB0byBmaW5kIHRoZW0gYW5kIHdpbGwgZ2V0IGEgU0VHViBvciBwb3NzaWJseSB3cm9uZyBkYXRh Lg0KDQpUbyBwcmV2ZW50IHRoaXMsIGEgbmV3ICJwaW5uaW5nIiB0YWJsZSB3YXMgaW50cm9kdWNl ZC4gIEFueSBvYmplY3QgbWFya2VkIHZpYQ0KYHJiX2djX21hcmtgIGlzICJwaW5uZWQiIGFuZCBp cyBub3QgYWxsb3dlZCB0byBtb3ZlLiAgQyBleHRlbnNpb25zIG11c3QgbWFyaw0KdGhlaXIgcmVm ZXJlbmNlcyBpbiBvcmRlciB0byBrZWVwIHRoZW0gYWxpdmUuICBTaW5jZSBDIGV4dGVuc2lvbnMg dXNlDQpgcmJfZ2NfbWFya2AgdG8gbWFyayBhIHJlZmVyZW5jZSwgd2Uga25vdyBub3QgdG8gbW92 ZSB0aGF0IHJlZmVyZW5jZS4gIEluIG9yZGVyDQp0byBlbnN1cmUgYWxsIHJlZmVyZW5jZXMgZ2V0 IG1hcmtlZCwgd2UgcGVyZm9ybSBhIGZ1bGwgR0MuDQoNCk5ldyBmdW5jdGlvbnMsIGByYl9nY19t YXJrX25vX3BpbmAsIGV0YyB3ZXJlIGludHJvZHVjZWQgYW5kIHVzZWQgaW50ZXJuYWxseS4NClRo ZXNlIGZ1bmN0aW9ucyBrZWVwcyB0aGUgb2JqZWN0IGFsaXZlIGJ1dCB3aXRob3V0IHBpbm5pbmcg dGhlIHJlZmVyZW5jZS4NCg0KU3VtbWFyeTogUGVyZm9ybSBhIGZ1bGwgR0Mgc28gdGhhdCBvYmpl Y3RzIG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYCBkbyBub3QgbW92ZS4NCg0KIyMjIFN0ZXAgVHdv LCBNb3ZlIE9iamVjdHMNCg0KVGhpcyBjb21wYWN0b3IgdXNlcyBhICJ0d28gZmluZ2VyIiBhbGdv cml0aG0gd2hpY2ggd2FzIGludHJvZHVjZWQgaW4gIlRoZQ0KUHJvZ3JhbW1pbmcgTGFuZ3VhZ2Ug TElTUDogSXRzIE9wZXJhdGlvbiBhbmQgQXBwbGljYXRpb25zIiAocGFnZSAyMjgpW14xXS4gIFR3 bw0KcG9pbnRlcnMgcG9pbnQgYXQgZWFjaCBzaWRlIG9mIHRoZSBoZWFwLCBpZiBvbmUgc2xvdCBp cyBlbXB0eSwgYW5kIHRoZSBvdGhlciBpcw0KbW92ZWFibGUsIGl0IHN3YXBzIHBsYWNlcyBhbmQg bGVhdmVzIGEgYFRfTU9WRURgIG9iamVjdCB0aGF0IGNvbnRhaW5zIGENCmZvcndhcmRpbmcgYWRk cmVzcy4NCg0KSW4gUnVieSwgdGhlIGFsZ29yaXRobSBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlz Og0KDQpgYGBydWJ5DQpkZWYgY29tcGFjdA0KICBoZWFwID0gWyAuLi4gXSAjIG1hbnkgc2xvdHMN CiAgbGVmdCAgPSAwDQogIHJpZ2h0ID0gaGVhcC5sZW5ndGggLSAxDQoNCiAgd2hpbGUgbGVmdCA8 IHJpZ2h0DQogICAgbGVmdF9zbG90ID0gaGVhcFtsZWZ0XQ0KICAgIHJpZ2h0X3Nsb3QgPSBoZWFw W3JpZ2h0XQ0KDQogICAgaWYgaXNfZW1wdHk/KGxlZnRfc2xvdCkgJiYgIWlzX2VtcHR5PyhyaWdo dF9zbG90KSAmJiBjYW5fbW92ZT8ocmlnaHRfc2xvdCkNCiAgICAgIHN3YXAobGVmdCwgcmlnaHQp DQogICAgICBoZWFwW3JpZ2h0XSA9IFRfTU9WRUQubmV3KGxlZnQpICMgbGVhdmUgZm9yd2FyZGlu ZyBhZGRyZXNzDQogICAgZW5kDQoNCiAgICB3aGlsZSAhaXNfZW1wdHk/KGhlYXBbbGVmdF0pDQog ICAgICBsZWZ0ICs9IDENCiAgICBlbmQNCg0KICAgIHdoaWxlIGlzX2VtcHR5PyhoZWFwW3JpZ2h0 XSkgfHwgIWNhbl9tb3ZlPyhoZWFwW3JpZ2h0XSkNCiAgICAgIHJpZ2h0IC09IDENCiAgICBlbmQN CiAgZW5kDQplbmQNCmBgYA0KDQpJZiB3ZSBoYXZlIGEgaGVhcCB3aXRoIDYgc2xvdHMsIGJlZm9y ZSBjb21wYWN0aW9uIGl0IG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2UNCnRoaXM6DQoNCmBgYA0K ICAgICAgICAgICAgICAgICAgICAg4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIENvbXBh Y3Rpb24gICDilIIgICAgICAgDQogICAgICAgICAgICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICDi lIzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzi lIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilJANCiBT bG90IEluZGV4ICAgIOKUgiAgMSAg4pSCICAyICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIg IDYgIOKUgg0KICAgICAgICAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA 4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA 4pS84pSA4pSA4pSA4pSA4pSA4pSkDQpTbG90IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSC RW1wdHnilIJFbXB0eeKUgiAgQyAg4pSCICBEICDilIINCiAgICAgICAgICAgICAgIOKUgiAgICAg 4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgg0KICAgICAgICAgICAg ICAg4pSU4pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA 4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSY DQpgYGANCg0KQWZ0ZXIgY29tcGFjdGlvbiwgYnV0IGJlZm9yZSByZWZlcmVuY2UgdXBkYXRlLCBp dCB3aWxsIGxvb2sgbGlrZSB0aGlzOg0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgIOKUjCDi lIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAg ICAgICAgICAgICAgICAgICAgICBBZnRlciBDb21wYWN0aW9uICAg4pSCICAgICAgIA0KICAgICAg ICAgICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKU gCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA 4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA 4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRleCAgICDilIIgIDEgIOKUgiAg MiAg4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIINCiAgICAgICAgICAgICAgIOKU nOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKU gOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUpA0KU2xv dCBDb250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgiAgRCAg4pSCICBDICDilIJNT1ZFROKUgk1P VkVE4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKU glRPIDQg4pSCVE8gMyDilIINCiAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUtOKU gOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKU gOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KYGBgDQoNClNsb3RzIDUgYW5kIDYgY29u dGFpbiBgVF9NT1ZFRGAgb2JqZWN0cyB0aGF0IHBvaW50IHRvIHRoZSBuZXcgbG9jYXRpb25zIG9m IEQgYW5kDQpDIG9iamVjdHMuDQoNCiMjIyBTdGVwIFRocmVlLCBVcGRhdGUgUmVmZXJlbmNlcw0K DQpBZnRlciBvYmplY3RzIGhhdmUgbW92ZWQsIHJlZmVyZW5jZXMgYXJlIHVwZGF0ZWQuICBUaGlz IGlzIGEgbWF0dGVyIG9mIHVwZGF0aW5nDQphbnkgcmVmZXJlbmNlcyB0byB1c2UgdGhlIGZvcndh cmRpbmcgYWRkcmVzcyByYXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwgbG9jYXRpb24uDQoNCkZvciBl eGFtcGxlLCBpZiBvYmplY3QgQSBoYXMgYSByZWZlcmVuY2UgdG8gQywgYW5kIEIgYSByZWZlcmVu Y2UgdG8gRDoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSA IOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAg ICAgICBCZWZvcmUgQ29tcGFjdGlvbiAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAg IOKUlCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICAN CiAgICAgICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKU gOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKU gOKUgOKUgOKUgOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSC ICA0ICDilIIgIDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDi lIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDi lLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKU giAgQSAg4pSCICBCICDilIJFbXB0eeKUgkVtcHR54pSCICBDICDilIIgIEQgIOKUgg0KICAgICAg ICAgICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg 4pSCDQogICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDi lLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTi lIDilIDilIDilIDilIDilJgNCiAgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICAgICAg ICAgICAgICDilrIgICAgIOKWsiAgIA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAg ICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgDQogICAgICAgICAgICAgICAgICDilJTilIDilIDi lIDilIDilIDilLzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilJggICAgIOKUgiAgIA0KICAgICAgICAgICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSYICAgDQpgYGANCg0KQWZ0ZXIgY29tcGFjdGlvbiwgYnV0IGJlZm9yZSB1cGRhdGluZyBy ZWZlcmVuY2VzLCB0aGUgaGVhcCB3aWxsIGxvb2sgbGlrZSB0aGlzOg0KDQpgYGANCiAgICAgICAg ICAgICAgICAgICAgIOKUjCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAICAgICAgICANCiAgICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBDb21wYWN0aW9uICAg 4pSCICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA 4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA 4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRl eCAgICDilIIgIDEgIOKUgiAgMiAg4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIIN CiAgICAgICAgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKU gOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKU gOKUgOKUgOKUgOKUpA0KU2xvdCBDb250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgiAgRCAg4pSC ICBDICDilIJNT1ZFROKUgk1PVkVE4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg 4pSCICAgICDilIIgICAgIOKUglRPIDQg4pSCVE8gMyDilIINCiAgICAgICAgICAgICAgIOKUlOKU gOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKU gOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KICAgICAg ICAgICAgICAgICAg4pSCICAgICDilIIgICAgICAgICAgICAgICAgIOKWsiAgICAg4payICAgDQog ICAgICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAgICAgICAgICAgICAg4pSCICAgICDilIIg ICANCiAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAg4pSCICAgDQogICAg ICAgICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICANCmBgYA0KDQpUaGUgdXBk YXRlIHJlZmVyZW5jZXMgc3RlcCBsb29rcyBhdCBlYWNoIG9iamVjdCBpbiB0aGUgaGVhcCwgY2hl Y2tzIHRvIHNlZSBpZiBpdA0KcmVmZXJlbmNlcyBhbnkgbW92ZWQgc2xvdHMsIHRoZW4gdXBkYXRl cyB0aGUgcmVmZXJlbmNlIHRvIHVzZSB0aGUgbmV3IGxvY2F0aW9uLg0KSW4gUnVieSwgaXQgbG9v a3MgbGlrZSB0aGlzOg0KDQpgYGBydWJ5DQpkZWYgdXBkYXRlX3JlZmVyZW5jZXMNCiAgaGVhcC5l YWNoIGRvIHxzbG90fA0KICAgIG5leHQgaWYgaXNfZW1wdHk/KHNsb3QpIHx8IGlzX21vdmVkPyhz bG90KQ0KDQogICAgc2xvdC5yZWZlcmVuY2VzLmVhY2hfd2l0aF9pbmRleCBkbyB8Y2hpbGQsIGl8 DQogICAgICBpZiBpc19tb3ZlZD8oY2hpbGQpDQogICAgICAgIHNsb3Quc2V0X3JlZmVyZW5jZShp LCBjaGlsZC5uZXdfbG9jYXRpb24pDQogICAgICBlbmQNCiAgICBlbmQNCiAgZW5kDQplbmQNCmBg YA0KDQpBZnRlciByZWZlcmVuY2UgdXBkYXRlcywgdGhlIGhlYXAgd2lsbCBsb29rIGxpa2UgdGhp czoNCg0KYGBgDQogICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSAIOKUgCDi lIAg4pSAIOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBB ZnRlciBSZWYgVXBkYXRlcyAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIOKUlCDi lIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAg ICAgICAgICAgIOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKU gOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKU gOKUgOKUkA0KIFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSCICA0ICDi lIIgIDUgIOKUgiAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDilIDilLzi lIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDi lIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKUgiAgQSAg 4pSCICBCICDilIIgIEQgIOKUgiAgQyAg4pSCTU9WRUTilIJNT1ZFROKUgg0KICAgICAgICAgICAg ICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIJUTyA0IOKUglRPIDMg4pSCDQog ICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDi lIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDi lIDilIDilIDilJgNCiAgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilrIgICAgIOKW siAgICAgICAgICAgICAgIA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgIOKUgiAg ICAg4pSCICAgICAgICAgICAgICAgDQogICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDi lIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilJggICAgICAgICAgICAgICAN CiAgICAgICAgICAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgICAg ICAgICAgICAgIA0KYGBgDQoNCiMjIyBTdGVwIEZvdXIsIEZ1bGwgR0MNCg0KQWZ0ZXIgcmVmZXJl bmNlcyBoYXZlIGJlZW4gdXBkYXRlZCwgYSBmdWxsIEdDIGlzIHBlcmZvcm1lZC4gIFRoaXMgY29u dmVydHMgdGhlDQpgVF9NT1ZFRGAgc2xvdHMgYmFjayBpbiB0byBgVF9FTVBUWWAgc2xvdHMuICBU aGUgR0MgYXV0b21hdGljYWxseSB0YWtlcyBjYXJlIG9mDQp0aGlzIGJlY2F1c2Ugbm8gb2JqZWN0 IHNob3VsZCByZWZlcmVuY2UgYSBgVF9NT1ZFRGAgc2xvdC4NCg0KIyMgTm9uIE1vdmluZyBPYmpl Y3RzDQoNCk5vbiBtb3Zpbmcgb2JqZWN0cyBhcmU6DQoNCjEuIE9iamVjdHMgb24gdGhlIHN0YWNr DQoyLiBPYmplY3RzIG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYA0KMy4gSGFzaCBrZXkgb2JqZWN0 cw0KDQojIyMgT2JqZWN0cyBvbiB0aGUgc3RhY2sNCg0KVGhlIHN0YWNrIHNob3VsZCBub3QgYmUg bXV0YXRlZCwgc28gdGhlc2UgYXJlIHBpbm5lZC4NCg0KIyMjIE9iamVjdHMgbWFya2VkIHdpdGgg YHJiX2djX21hcmtgDQoNCkFzIG1lbnRpb25lZCBlYXJsaWVyLCBhbnkgb2JqZWN0IG1hcmtlZCB3 aXRoIGByYl9nY19tYXJrYCBtYXkgbm90IG1vdmUgYmVjYXVzZSBhDQpDIGV4dGVuc2lvbiBtYXkg aG9sZCBhIHJlZmVyZW5jZS4gIEhlcmUgaXMgYW4gZXhjZXJwdCBmcm9tIFlhamwsIGEgSlNPTiBw YXJzZXIuDQpUaGlzIGlzIHRoZSBtYXJrIGZ1bmN0aW9uIGl0IHVzZXM6DQoNCmBgYGMNCnN0YXRp YyB2b2lkIHlhamxfZW5jb2Rlcl93cmFwcGVyX21hcmsodm9pZCAqIHdyYXBwZXIpIHsNCiAgICB5 YWpsX2VuY29kZXJfd3JhcHBlciAqIHcgPSB3cmFwcGVyOw0KICAgIGlmICh3KSB7DQogICAgICAg IHJiX2djX21hcmsody0+b25fcHJvZ3Jlc3NfY2FsbGJhY2spOw0KICAgICAgICByYl9nY19tYXJr KHctPnRlcm1pbmF0b3IpOw0KICAgIH0NCn0NCg0KDQpvYmogPSBEYXRhX01ha2VfU3RydWN0KGts YXNzLCB5YWpsX2VuY29kZXJfd3JhcHBlciwgeWFqbF9lbmNvZGVyX3dyYXBwZXJfbWFyaywgeWFq bF9lbmNvZGVyX3dyYXBwZXJfZnJlZSwgd3JhcHBlcik7DQpgYGANCg0KVGhlIHZhbHVlcyBpbiB0 aGlzIG1hcmsgZnVuY3Rpb24gYHctPm9uX3Byb2dyZXNzX2NhbGxiYWNrYCBhbmQgYHctPnRlcm1p bmF0b3JgDQp3aWxsIG5vdCBtb3ZlIHNpbmNlIHRoZXkgYXJlIHBpbm5lZCBieSBgcmJfZ2NfbWFy a2AuDQoNCiMjIyBIYXNoIGtleSBvYmplY3RzDQoNCkNlcnRhaW4gaGFzaCBrZXlzIHdpbGwgbm90 IG1vdmUuICBNb3N0IG9iamVjdHMgdXNlIHRoZWlyIGFkZHJlc3MgYXMgdGhlIGhhc2gNCnZhbHVl LiAgSWYgdGhlIG9iamVjdCBtb3ZlcywgdGhlIGhhc2ggdmFsdWUgY291bGQgY2hhbmdlLCBzbyBo YXNoIGtleXMgYXJlIG5vdA0KYWxsb3dlZCB0byBtb3ZlLg0KDQpUaGVyZSBpcyBhbiBleGNlcHRp b24gZm9yIHN0cmluZyBvYmplY3RzLiAgU3RyaW5nIG9iamVjdHMgY2FsY3VsYXRlIHRoZWlyIGhh c2gNCmJhc2VkIG9uIHRoZSBieXRlcyBpbiB0aGUgc3RyaW5nLiAgU2luY2UgdGhlIGJ5dGVzIGlu IHRoZSBzdHJpbmcgZG8gbm90IGNoYW5nZQ0KYWZ0ZXIgbW92ZSwgdGhleSBhcmUgYWxsb3dlZCB0 byBtb3ZlLiAgTW9zdCBoYXNoIGtleXMgaW4gbGFyZ2UgcHJvZ3JhbXMgYXJlDQpzdHJpbmdzLCBz byBvbmx5IGFsbG93aW5nIHN0cmluZyBrZXlzIHRvIG1vdmUgc2VlbWVkIGVub3VnaC4NCg0KIyMg U3BlY2lhbCBDb25zaWRlcmF0aW9ucw0KDQojIyMgT2JqZWN0IElEDQoNCmBPYmplY3Qjb2JqZWN0 X2lkYCBiYXNlcyBpdHMgdmFsdWUgZnJvbSB0aGUgYWRkcmVzcyBvZiB0aGUgb2JqZWN0LiAgRm9y IGV4YW1wbGU6DQoNCmBgYHJ1YnkNCnggPSBPYmplY3QubmV3DQppZCA9IHgub2JqZWN0X2lkDQpH Qy5jb21wYWN0ICAgICAgICAjIGB4YCBtb3Zlcw0KaWQgPT0geC5vYmplY3RfaWQgIyBgaWRgIHNo b3VsZCBiZSBzYW1lIGFzIGB4Lm9iamVjdF9pZGANCmBgYA0KDQpXZSBleHBlY3QgdGhlIG9iamVj dCBpZCB0byByZW1haW4gdGhlIHNhbWUgcmVnYXJkbGVzcyBvZiBjb21wYWN0aW9uLiAgVG8gZGVh bA0Kd2l0aCBgb2JqZWN0X2lkYCwgdHdvIGhhc2hlcyB3ZXJlIGludHJvZHVjZWQuICBPbmUgaGFz aCBjb250YWlucyBhIG1hcCBvZiB0aGUNCm9iamVjdCB0byB0aGUgKnNlZW4qIG9iamVjdCBpZC4g IFRoZSBzZWNvbmQgbWFwIGNvbnRhaW5zIGFsbCBzZWVuIG9iamVjdCBpZHMuDQpUaGUgbWFwcyBh cmUgdXBkYXRlZCBhbnkgdGltZSBgb2JqZWN0X2lkYCBpcyBjYWxsZWQsIGFuIG9iamVjdCBtb3Zl cywgb3IgYW4NCm9iamVjdCBpcyBmcmVlZC4NCg0Kb2JqZWN0X2lkIGltcGxlbWVudGF0aW9uIGlu IFJ1Ynk6DQoNCmBgYHJ1YnkNCiRvYmpfdG9faWQgPSB7fQ0KJGlkX3RvX29iaiA9IHt9DQoNCmNs YXNzIE9iamVjdA0KICBkZWYgb2JqZWN0X2lkDQogICAgaWYgJG9ial90b19pZC5rZXk/KGFkZHJl c3MpDQogICAgICAjIFNlY29uZCBjYWxsIHRvIG9iamVjdF9pZCBvbiB0aGlzIG9iamVjdA0KICAg ICAgcmV0dXJuICRvYmpfdG9faWRbYWRkcmVzc10NCiAgICBlbHNlDQogICAgICAjIEZpcnN0IGNh bGwgdG8gb2JqZWN0X2lkIG9uIHRoaXMgb2JqZWN0DQoNCiAgICAgIGFkZHIgPSBzZWxmLmFkZHJl c3MNCg0KICAgICAgbG9vcCBkbw0KICAgICAgICBpZiAkc2Vlbl9pZHMua2V5PyhhZGRyKQ0KICAg ICAgICAgICMgUmVzb2x2ZSBjb25mbGljdA0KICAgICAgICAgIGFkZHIgKz0gc2l6ZW9mKFJWQUxV RSkNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICRvYmpfdG9faWRbc2VsZi5hZGRyZXNzXSA9IGFk ZHINCiAgICAgICAgICAkaWRfdG9fb2JqW2FkZHJdICAgICAgICAgPSBzZWxmDQogICAgICAgICAg cmV0dXJuIGFkZHINCiAgICAgICAgZW5kDQogICAgICBlbmQNCiAgICBlbmQNCiAgZW5kDQoNCiAg cHJpdmF0ZQ0KDQogIGRlZiBhZGRyZXNzDQogICAgIyByZXR1cm5zIGFkZHJlc3MgaW4gbWVtb3J5 IG9mIG9iamVjdA0KICBlbmQNCmVuZA0KYGBgDQoNCkR1cmluZyBjb21wYWN0aW9uOg0KDQpgYGBy dWJ5DQpkZWYgY29tcGFjdA0KICBoZWFwID0gWyAuLi4gXSAjIG1hbnkgc2xvdHMNCg0KICB3aGls ZSBsZWZ0IDwgcmlnaHQNCiAgICBkZXN0X3Nsb3QgPSBoZWFwW2xlZnRdDQogICAgc291cmNlX3Ns b3QgPSBoZWFwW3JpZ2h0XQ0KDQogICAgaWYgbW92aW5nPyhzb3VyY2Vfc2xvdCkNCiAgICAgIGlm ICRvYmpfdG9faWQua2V5Pyhzb3VyY2Vfc2xvdC5hZGRyZXNzKQ0KICAgICAgICBpZCA9ICRvYmpf dG9faWQuZGVsZXRlKHNvdXJjZV9zbG90LmFkZHJlc3MpDQogICAgICAgICRvYmpfdG9faWRbZGVz dF9zbG90LmFkZHJlc3NdID0gaWQNCiAgICAgICAgJGlkX3RvX29ialtpZF0gICAgICAgICAgICAg ICAgPSBkZXN0X3Nsb3QuYWRkcmVzcw0KICAgICAgZW5kDQoNCiAgICAgICMgZXRjDQogICAgZW5k DQogIGVuZA0KZW5kDQpgYGANCg0KRHVyaW5nIEZyZWU6DQoNCmBgYHJ1YnkNCmRlZiBmcmVlKG9i aikNCiAgaWYgJG9ial90b19pZC5rZXk/KG9iai5hZGRyZXNzKQ0KICAgICRzZWVuX2lkcy5kZWxl dGUoJG9ial90b19pZC5kZWxldGUob2JqLmFkZHJlc3MpKQ0KICBlbmQNCmVuZA0KYGBgDQoNCiMj IyBPYmplY3RTcGFjZS5faWQycmVmDQoNCldoZW4gZ2VuZXJhdGluZyBhbiBvYmplY3QgaWQsIGlu IHRoZSBjYXNlIG9mIGEgY29sbGlzaW9uLCB0aGUgYWRkcmVzcyBpcw0KaW5jcmVtZW50ZWQgYnkg NDAuICBUaGlzIGVuYWJsZXMgYF9pZDJyZWZgIHRvIGRldGVybWluZSB0aGVyZSBpcyBhIFZBTFVF IHBvaW50ZXINCmFuZCByb3VuZCB0cmlwIHRoZSBvYmplY3QgY29ycmVjdGx5Lg0KDQojIyBDb21w YWN0aW9uIFN1cHBvcnQgZm9yIEMgZXh0ZW5zaW9ucw0KDQpBbnkgb2JqZWN0IG1hcmtlZCB3aXRo IGByYl9nY19tYXJrYCB3aWxsIGJlICJwaW5uZWQiIGFuZCBjYW5ub3QgbW92ZS4gIEMNCmV4dGVu c2lvbnMgbWFyayBvYmplY3RzIHZpYSBgcmJfZ2NfbWFya2AsIHNvIHRoaXMgZW5zdXJlcyB0aGF0 IHBvaW50ZXJzIGluIEMNCnN0YXkgdmFsaWQuDQoNCkhvd2V2ZXIsIHNvbWUgQyBleHRlbnNpb25z IG1heSB3YW50IHRvIHN1cHBvcnQgcmVmZXJlbmNlIG1vdmVtZW50Lg0KDQojIyMgUmVmZXJlbmNl IE1vdmVtZW50IGluIEMgZXh0ZW5zaW9ucw0KDQpJbiBvcmRlciB0byBtYWludGFpbiBiYWNrd2Fy ZHMgY29tcGF0aWJpbGl0eSwgaWYgYSBDIGV4dGVuc2lvbiBob2xkcyBhIHJlZmVyZW5jZQ0KdG8g YSBWQUxVRSwgdGhlIFZBTFVFIHNob3VsZCBub3QgbW92ZS4gIEdvaW5nIGZvcndhcmQsIEMgZXh0 ZW5zaW9ucyBjYW4gc3VwcG9ydA0KbW92aW5nIFZBTFVFcy4gIFRvIHN1cHBvcnQgbW92aW5nIFZB TFVFcywgYSBDIGV4dGVuc2lvbiBzaG91bGQgY2hhbmdlDQpgcmJfZ2NfbWFya2AgdG8gYHJiX2dj X21hcmtfbm9fcGluYCwgdGhlbiBpbXBsZW1lbnQgYSBuZXcgY2FsbGJhY2sgdGhhdCBpcw0KY2Fs bGVkIGR1cmluZyBjb21wYWN0aW9uIHRoYXQgZ2l2ZXMgdGhlIGV4dGVuc2lvbiBhbiBvcHBvcnR1 bml0eSB0byB1cGRhdGUgaXRzDQpvd24gcmVmZXJlbmNlcy4gIEEgbmV3IGZ1bmN0aW9uIGByYl9n Y19uZXdfbG9jYXRpb25gIHdpbGwgcmV0dXJuIHRoZSBuZXcNCmxvY2F0aW9uIGZvciBhIHBhcnRp Y3VsYXIgVkFMVUUuDQoNCkhlcmUgaXMgYW4gZXhhbXBsZSBmb3IgYXV0b2xvYWQgZnJvbSBgdmFy aWFibGUuY2AuICBBIG5ldyBjb21wYWN0aW9uIGNhbGxiYWNrIGlzDQpyZWdpc3RlcmVkLCBgYXV0 b2xvYWRfaV9jb21wYWN0YDoNCg0KYGBgYw0Kc3RhdGljIGNvbnN0IHJiX2RhdGFfdHlwZV90IGF1 dG9sb2FkX2RhdGFfaV90eXBlID0gew0KICAgICJhdXRvbG9hZF9pIiwNCiAgICB7YXV0b2xvYWRf aV9tYXJrLCBhdXRvbG9hZF9pX2ZyZWUsIGF1dG9sb2FkX2lfbWVtc2l6ZSwgYXV0b2xvYWRfaV9j b21wYWN0fSwNCiAgICAwLCAwLCBSVUJZX1RZUEVEX0ZSRUVfSU1NRURJQVRFTFkNCn07DQpgYGAN Cg0KVGhlIG1hcmsgZnVuY3Rpb24gY2hhbmdlcyB0byAqbWFyayogcmVmZXJlbmNlcywgYnV0ICpu b3QqIHBpbiB0aGVtOg0KDQpgYGBjDQpzdGF0aWMgdm9pZA0KYXV0b2xvYWRfaV9tYXJrKHZvaWQg KnB0cikNCnsNCiAgICBzdHJ1Y3QgYXV0b2xvYWRfZGF0YV9pICpwID0gcHRyOw0KDQogICAgcmJf Z2NfbWFya19ub19waW4ocC0+ZmVhdHVyZSk7DQoNCiAgICAvKiBhbGxvdyBHQyB0byBmcmVlIHVz IGlmIG5vIG1vZHVsZXMgcmVmZXIgdG8gdGhpcyB2aWEgYXV0b2xvYWRfY29uc3QuYWQgKi8NCiAg ICBpZiAobGlzdF9lbXB0eSgmcC0+Y29uc3RhbnRzKSkgew0KICAgICAgICByYl9oYXNoX2RlbGV0 ZShhdXRvbG9hZF9mZWF0dXJlbWFwLCBwLT5mZWF0dXJlKTsNCiAgICB9DQp9DQpgYGANCg0KQWZ0 ZXIgdGhlIGhlYXAgaXMgY29tcGFjdGVkLCBhbnkgQyBleHRlbnNpb25zIHRoYXQgcmVnaXN0ZXJl ZCBhICJjb21wYWN0aW9uIg0KY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgYW5kIGhhdmUgYSBjaGFu Y2UgdG8gdXBkYXRlIGludGVybmFsIHJlZmVyZW5jZXMuICBUaGUNCmF1dG9sb2FkIGNvbXBhY3Rp b24gZnVuY3Rpb24gaXMgbGlrZSB0aGlzOg0KDQpgYGBjDQpzdGF0aWMgdm9pZA0KYXV0b2xvYWRf aV9jb21wYWN0KHZvaWQgKnB0cikNCnsNCiAgICBzdHJ1Y3QgYXV0b2xvYWRfZGF0YV9pICpwID0g cHRyOw0KICAgIHAtPmZlYXR1cmUgPSByYl9nY19uZXdfbG9jYXRpb24ocC0+ZmVhdHVyZSk7DQpg YGANCg0KVGhlIGNvbXBhY3Rpb24gY2FsbGJhY2sgYXNrcyBmb3IgdGhlIG5ldyBsb2NhdGlvbiBm b3IgdGhlIGBwLT5mZWF0dXJlYA0KcmVmZXJlbmNlLiAgYHJiX2djX25ld19sb2NhdGlvbmAgd2ls bCBlaXRoZXIgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlIG9mDQpgcC0+ZmVhdHVyZWAgKGluIHRo ZSBjYXNlIHRoZSBWQUxVRSBkaWQgbm90IG1vdmUpLCBvciB0aGUgbmV3IGxvY2F0aW9uLg0KDQoj IyBSZWZlcmVuY2UgVmVyaWZpY2F0aW9uIGFuZCBUZXN0aW5nDQoNCkFmdGVyIGNvbXBhY3Rpb24s IG9iamVjdHMgdGhhdCBoYXZlIG1vdmVkIGFyZSBjaGFuZ2VkIHRvIGBUX01PVkVEYCBvYmplY3Rz IHdpdGgNCmZvcndhcmRpbmcgYWRkcmVzc2VzLiAgT25jZSBhbGwgcmVmZXJlbmNlcyBhcmUgdXBk YXRlZCwgbm8gb2JqZWN0IHNob3VsZCBwb2ludA0KdG8gYSBgVF9NT1ZFRGAgc2xvdC4gIFdlIGNh biBzYXkgdGhhdCBiZWZvcmUgYW5kIGFmdGVyIGNvbXBhY3Rpb24sIG5vIG9iamVjdA0Kc2hvdWxk IGV2ZXIgcG9pbnQgYXQgYSBgVF9NT1ZFRGAgc2xvdC4gIFNvIGlmIGEgYFRfTU9WRURgIG9iamVj dCBpcyBldmVyIHB1c2hlZA0Kb24gdG8gdGhlIG1hcmsgcXVldWUsIHRoZXJlIGlzIGEgYnVnLiAg YHB1c2hfbWFya19zdGFja2AgaGFzIGEgY2hlY2sgZm9yDQpgVF9NT1ZFRGAgb2JqZWN0cywgYW5k IHdpbGwgY3Jhc2ggaWYgYSBgVF9NT1ZFRGAgb2JqZWN0IGlzIGV2ZXIgcHVzaGVkIG9uIHRvIHRo ZQ0KbWFyayBzdGFjay4NCg0KQSBtZXRob2QgYEdDLnZlcmlmeV9jb21wYWN0aW9uX3JlZmVyZW5j ZXNgIHdhcyBhZGRlZCB0aGF0IGRvdWJsZXMgdGhlIGF2YWlsYWJsZQ0KaGVhcCBzaXplLCB0aGVu IGNvbXBhY3RzIHRoZSBoZWFwLiAgU2luY2UgdGhlIGhlYXAgaGFzIGRvdWJsZWQgaW4gc2l6ZSwg YW55DQpvYmplY3QgdGhhdCBjYW4gbW92ZSB3aWxsIG1vdmUuICBBbnkgcmVmZXJlbmNlcyB0byBg VF9NT1ZFRGAgb2JqZWN0cyB3aWxsIGJlDQpjYXVnaHQgZHVyaW5nIHRoZSBHQyBwaGFzZSBhZnRl ciBjb21wYWN0aW9uLg0KDQojIyBLbm93biBJc3N1ZQ0KDQpTYWZldHkgZm9yIEMgZXh0ZW5zaW9u cyBkZXBlbmRzIGVudGlyZWx5IG9uIEMgZXh0ZW5zaW9ucyBtYXJraW5nIHRoZWlyDQpyZWZlcmVu Y2VzLiAgSWYgYSBDIGV4dGVuc2lvbiBkb2VzIG5vdCBtYXJrIGEgcmVmZXJlbmNlLCB0aGUgY29t cGFjdG9yIGFzc3VtZXMNCnRoYXQgdGhlIG9iamVjdCBpcyBzYWZlIHRvIG1vdmUuICBUaGlzIGNh biBjYXVzZSBhbiBlcnJvciBpbiB0aGUgZm9sbG93aW5nDQpzaXR1YXRpb24sIHdoZW4gdGhlcmUg aXMgYW4gb2JqZWN0IGdyYXBoIGxpa2UgdGhpczoNCg0KDQpgYGANCiDilIzilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAg4pSM4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQIA0KIOKUgiAgUnVieSBPYmplY3Qg IOKUgiAgICAgICDilIIgIFJ1YnkgT2JqZWN0ICDilIIgDQog4pSCICBJbXBsZW1lbnRlZCAg4pSC ICAgICAgIOKUgiAgSW1wbGVtZW50ZWQgIOKUgiANCiDilIIgICAgaW4gUnVieSAgICDilIIgICAg ICAg4pSCICAgICBpbiBDICAgICAg4pSCIA0KIOKUgiAgICAgICAgICAgICAgIOKUgiAgICAgICDi lIIgICAgICAgICAgICAgICDilIIgDQog4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSYICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUmCANCiAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAg 4pSCICAgICAgICAgDQogICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICANCiAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgTk9UICAgDQogTWFy a2VkICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgIE1hcmtlZCANCiAgICAgICAgIOKUgiAg ICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgDQogICAgICAgICDilIIgICDilIzilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgICAgICAg DQogICAgICAgICDilIIgICDilIIgICAgICAgICAgICAgICDilIIgICDilIIgICAgICAgICANCiAg ICAgICAgIOKUgiAgIOKUgiAgUnVieSBPYmplY3QgIOKUgiAgICAgICAgICAgICANCiAgICAgICAg IOKUlOKUgOKUgOKWtuKUgiAgICAgICAgICAgICAgIOKUguKXgOKUgCDilJggICAgICAgICANCiAg ICAgICAgICAgICDilIIgICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgDQogICAgICAgICAg ICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAg ICAgICAgICAgIA0KYGBgDQoNCklmIHRoZSBDIGV4dGVuc2lvbiBjb250YWlucyBhIHJlZmVyZW5j ZSB0byBhbiBvYmplY3QsIGJ1dCBleHBlY3RzIHRoZSBvYmplY3QNCm5vdCB0byBtb3ZlIGJlY2F1 c2UgYSBSdWJ5IG9iamVjdCBjb250YWlucyBhIHJlZmVyZW5jZSwgdGhlbiB0aGUgdGFyZ2V0IFJ1 YnkNCm9iamVjdCAqbWF5KiBtb3ZlIGFuZCB0aGUgcmVmZXJlbmNlIGluIHRoZSBDIGV4dGVuc2lv biB3aWxsIGJlIHdyb25nLiAgSSBsaWtlIHRvDQpjYWxsIHRoZXNlICJnaG9zdCByZWZlcmVuY2Vz IiBiZWNhdXNlIHRoZSBHQyBjYW5ub3Qgc2VlIHRoZW0gYnV0IHRoZXkgd2lsbCBjb21lDQpiYWNr IHRvIGhhdW50IHlvdS4NCg0KVGhlIHNvbHV0aW9uIHRvIHRoaXMgaXMgZWl0aGVyOg0KDQoxLiBD aGFuZ2UgdGhlIEMgZXh0ZW5zaW9uIHRvIGByYl9nY19tYXJrYCB0aGUgb2JqZWN0DQoyLiBSZW1v dmUgdGhlIHJlZmVyZW5jZSBmcm9tIHRoZSBDIGV4dGVuc2lvbg0KDQpPbmUgZXhhbXBsZSBvZiB0 aGlzIHNpdHVhdGlvbiB3YXMgZml4ZWQgaGVyZToNCg0KICBodHRwczovL2dpdGh1Yi5jb20vbXNn cGFjay9tc2dwYWNrLXJ1YnkvaXNzdWVzLzEzMw0KDQojIyBTdW1tYXJ5DQoNCkJhY2t3YXJkcyBj b21wYXRpYmlsaXR5IHdpdGggQyBleHRlbnNpb25zIGlzIG1haW50YWluZWQgYnkgInBpbm5pbmci IGFueQ0KcmVmZXJlbmNlcyBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2AuICBBIGZ1bGwgbWFyayAq bXVzdCogYmUgZG9uZSBiZWZvcmUNCmNvbXBhY3RpbmcgdG8gZGlzY292ZXIgYWxsIHBpbm5lZCBy ZWZlcmVuY2VzLg0KDQpBIG5ldyBjYWxsYmFjayBmb3IgQyBleHRlbnNpb25zIGlzIGludHJvZHVj ZWQgc28gdGhhdCBDIGV4dGVuc2lvbnMgY2FuIHN1cHBvcnQNCmNvbXBhY3Rpb24uICBDIGV4dGVu c2lvbnMgdGhhdCB3aXNoIHRvIHN1cHBvcnQgY29tcGFjdGlvbiBtdXN0IHVzZSB0aGUgbmV3DQpj YWxsYmFjaywgYHJiX2djX21hcmtfbm9fcGluYCwgYW5kIGByYl9nY19uZXdfbG9jYXRpb25gLg0K DQpDIGV4dGVuc2lvbnMgdGhhdCBtYWludGFpbiBwb2ludGVycyBidXQgZG8gbm90IG1hcmsgdGhv c2UgcG9pbnRlcnMgbWF5IFNFR1YuICBXZQ0KY2FuIHVzZSBgR0MudmVyaWZ5X2NvbXBhY3Rpb25f cmVmZXJlbmNlc2AgdG8gZGlzY292ZXIgdGhlc2UgaXNzdWVzLg0KDQpbXjFdOiBTZWUgYWxzbyAi VGhlIEdhcmJhZ2UgQ29sbGVjdGlvbiBIYW5kYm9vayIgcGFnZSAzMg0KDQoNCi0tLUZpbGVzLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCjAwMDEtQ29tcGFjdGluZy1HQy1mb3ItTVJJ LnBhdGNoICg3Ni41IEtCKQ0KDQoNCi0tIA0KaHR0cHM6Ly9idWdzLnJ1YnktbGFuZy5vcmcvDQo=