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.9 required=3.0 tests=AWL,BAYES_00,BODY_8BITS, HEADER_FROM_DIFFERENT_DOMAINS,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 4F9A420248 for ; Mon, 11 Mar 2019 09:03:08 +0000 (UTC) Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id A767C120BA3; Mon, 11 Mar 2019 18:02:58 +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 66CC8120BA3 for ; Mon, 11 Mar 2019 18:02:54 +0900 (JST) Received: by filter0186p3mdw1.sendgrid.net with SMTP id filter0186p3mdw1-11989-5C8623BD-39 2019-03-11 09:00:45.571043402 +0000 UTC m=+204220.781328954 Received: from herokuapp.com (unknown [3.84.97.177]) by ismtpd0032p1iad2.sendgrid.net (SG) with ESMTP id kM4_vg9yS0yZCYA-5JpkvA for ; Mon, 11 Mar 2019 09:00:45.520 +0000 (UTC) Date: Mon, 11 Mar 2019 09:02:53 +0000 (UTC) From: naruse@airemix.jp Message-ID: References: Mime-Version: 1.0 X-Redmine-MailingListIntegration-Message-Ids: 67218 X-Redmine-Project: ruby-trunk X-Redmine-Issue-Id: 15626 X-Redmine-Issue-Author: tenderlovemaking X-Redmine-Sender: naruse 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?UqoG4vcRhHM9V1I4f4J7DhjzUfTg+8muXbMD6UD+LVSRytaVArSYlEaTJFr5+V?= =?us-ascii?Q?dsYjt8OWYrXYh=2FLgNOt=2FxuIPJ0626CCJ0XM5TUL?= =?us-ascii?Q?o2lmV5exMIKy5b5eScvH+29COnLwipRIW8rxaH8?= =?us-ascii?Q?1292W66v1n1f=2FzqMjUfSXUIaUIsF37H1DdWJVQA?= =?us-ascii?Q?khDPRVYYxp4ziQIrN9p1zCplNRtX2HS6aXA=3D=3D?= To: ruby-core@ruby-lang.org X-ML-Name: ruby-core X-Mail-Count: 91767 Subject: [ruby-core:91767] [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" SXNzdWUgIzE1NjI2IGhhcyBiZWVuIHVwZGF0ZWQgYnkgbmFydXNlIChZdWkgTkFSVVNFKS4NCg0K DQpJIHdhbnQgdG8gaW50cm9kdWNlIHRoaXMgZmVhdHVyZSBpbiBSdWJ5IDIuNy4wLXByZXZpZXcx Lg0KVGhlcmVmb3JlIGNvdWxkIHlvdSB3cml0ZSBhbiBpdGVtIGZvciB0aGUgcmVsZWFzZSBub3Rl Pw0KDQpUaGUgYXJ0aWNsZSBzaG91bGQgYmUgbGlrZSAiSklUIFtFeHBlcmltZW50YWxdIiBpbiAy LjYuMC4NCmh0dHBzOi8vd3d3LnJ1YnktbGFuZy5vcmcvZW4vbmV3cy8yMDE4LzEyLzI1L3J1Ynkt Mi02LTAtcmVsZWFzZWQvDQoNClRoZSBkZXNjcmlwdGlvbiBzaG91bGQgZXhwbGFpbg0KKiBXaGF0 IGlzIHRoZSBtZXJpdCBvZiB0aGlzIENvbXBhY3Rpb24gR0MuDQogICh0aGUgYXVkaWVuY2Ugb2Yg dGhpcyBzZW50ZW5jZSBpcyBOZXdzIG1lZGlhKQ0KKiBUaGUgdGVjaG5pY2FsIGRldGFpbCAoYXBw ZWFsKSBvZiB0aGlzIGZlYXR1cmUuDQogICh0aGUgYXVkaWVuY2Ugb2YgdGhpcyBzZW50ZW5jZXMg aXMgUnVieSBkZXZlbG9wZXIpDQoqIEFib3V0IHRoZSBrbm93biBpc3N1ZSBhbmQgaG93IHRvIGRl YnVnIGFuZCB3b3JrYXJvdW5kDQogICogSWYgeW91IGhpdCBTRUdWLCBjb21tZW50IG91dCBgR0Mu Y29tcGFjdGAgYW5kIHRyeTsgaWYgaXQgd29ya3MgaXQncyBiZWNhdXNlIG9mIENvbXBhY3Rpb24g R0MNCiAgKiBjaGVjayBleHRlbnNpb24gbGlicmFyaWVzIGFuZCBpZiB5b3UgY2FuIGlkZW50aWZ5 IGl0IHVzZSBgcmJfZ2NfbWFya2Agb3Igc29tZXRoaW5nDQogICogQWRkIG1vcmUgZGVidWcgbW9k ZSBmb3IgZXhhbXBsZSBqdXN0IGRvIGNvbXBhY3Rpb24gYnV0IG5vdCB1bm1hcCB0aGUgb2xkIHBh Z2U7IHNldCBndWFyZCBwYWdlIG9yIHdyaXRlIGdhcmJhZ2UgZGF0YS4NCg0KLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KRmVhdHVyZSAjMTU2MjY6IE1hbnVhbCBDb21w YWN0aW9uIGZvciBNUkkncyBHQyAoYEdDLmNvbXBhY3RgKQ0KaHR0cHM6Ly9idWdzLnJ1YnktbGFu Zy5vcmcvaXNzdWVzLzE1NjI2I2NoYW5nZS03NzA0Mw0KDQoqIEF1dGhvcjogdGVuZGVybG92ZW1h a2luZyAoQWFyb24gUGF0dGVyc29uKQ0KKiBTdGF0dXM6IE9wZW4NCiogUHJpb3JpdHk6IE5vcm1h bA0KKiBBc3NpZ25lZTogDQoqIFRhcmdldCB2ZXJzaW9uOiANCi0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0NCkhpLA0KDQpJJ3ZlIGF0dGFjaGVkIGEgcGF0Y2ggdGhhdCBp bXBsZW1lbnRzIGEgY29tcGFjdG9yIGZvciBNUkkuICBJJ2xsIHRyeSB0byBkZXNjcmliZSB0aGUg cGF0Y2ggaW4gZGV0YWlsIGJlbG93LCBidXQgdGhlIGJpZ2dlc3QgdXNlciBmYWNpbmcgY2hhbmdl cyBhcmU6DQoNCjEuIEEgbmV3IG1ldGhvZCBgR0MuY29tcGFjdGAgdGhhdCBjYW4gYmUgY2FsbGVk IGZyb20gUnVieQ0KMi4gQyBleHRlbnNpb25zIGhhdmUgYSBuZXcgImFmdGVyIGNvbXBhY3Rpb24i IGNhbGxiYWNrIHRoZXkgY2FuIHJlZ2lzdGVyDQozLiBJbnRyb2R1Y3Rpb24gb2YgbmV3IG1hcmtp bmcgZnVuY3Rpb25zIHRoYXQgYWxsb3cgb2JqZWN0cyB0byBiZSBtYXJrZWQsIGJ1dCBub3QgInBp bm5lZCIgdG8gdGhlIHNhbWUgbG9jYXRpb24NCjQuIEEgZnVuY3Rpb24gdG8gZ2V0IHRoZSBuZXcg bG9jYXRpb24gb2YgYW4gb2JqZWN0ICh0byBiZSB1c2VkIGZyb20gdGhlICJhZnRlciBjb21wYWN0 aW9uIiBjYWxsYmFjaykNCg0KIyBDb21wYWN0b3IgZm9yIFJHZW5HQw0KDQpUaGlzIGRvY3VtZW50 IGRlc2NyaWJlcyB0aGUgY29tcGFjdG9yIGltcGxlbWVudGF0aW9uIGZvciBSR2VuR0MuICBUaGlz IHBhdGNoDQphZGRzIGEgbmV3IG1ldGhvZCB0byBSdWJ5LCBgR0MuY29tcGFjdGAgd2hpY2ggd2ls bCBjb21wYWN0IHRoZSBvYmplY3RzIGluIHRoZQ0KaGVhcC4gIFdoYXQgZm9sbG93cyBpcyBhIGRl c2NyaXB0aW9uIG9mIHRoZSBhbGdvcml0aG0sIGFsb25nIHdpdGggYWNoaWV2ZW1lbnRzDQphbmQg dGVjaG5pY2FsIGNoYWxsZW5nZXMuDQoNCiMjIFN0ZXBzIGZvciBDb21wYWN0aW9uDQoNClRoZXNl IGFyZSB0aGUgaGlnaCBsZXZlbCBzdGVwcyB0YWtlbiBpbiBgR0MuY29tcGFjdGAgYXJlIGFzIGZv bGxvd3M6DQoNCjEuIEZ1bGwgR0MNCjIuIE1vdmUgb2JqZWN0cw0KMy4gVXBkYXRlIHJlZmVyZW5j ZXMNCjQuIEZ1bGwgR0MNCg0KIyMjIFN0ZXAgT25lLCBGdWxsIEdDDQoNCk5vdCBhbGwgb2JqZWN0 cyBpbiBSdWJ5J3MgaGVhcCBjYW4gbW92ZS4gIEluIHBhcnRpY3VsYXIsIEMgZXh0ZW5zaW9ucyBt YXkgaG9sZA0KcmVmZXJlbmNlcyB0byBWQUxVRSBwb2ludGVycy4gIElmIHRoZSBWQUxVRSBwb2lu dGVycyBtb3ZlLCB0aGUgQyBleHRlbnNpb24gbWF5DQpub3QgYmUgYWJsZSB0byBmaW5kIHRoZW0g YW5kIHdpbGwgZ2V0IGEgU0VHViBvciBwb3NzaWJseSB3cm9uZyBkYXRhLg0KDQpUbyBwcmV2ZW50 IHRoaXMsIGEgbmV3ICJwaW5uaW5nIiB0YWJsZSB3YXMgaW50cm9kdWNlZC4gIEFueSBvYmplY3Qg bWFya2VkIHZpYQ0KYHJiX2djX21hcmtgIGlzICJwaW5uZWQiIGFuZCBpcyBub3QgYWxsb3dlZCB0 byBtb3ZlLiAgQyBleHRlbnNpb25zIG11c3QgbWFyaw0KdGhlaXIgcmVmZXJlbmNlcyBpbiBvcmRl ciB0byBrZWVwIHRoZW0gYWxpdmUuICBTaW5jZSBDIGV4dGVuc2lvbnMgdXNlDQpgcmJfZ2NfbWFy a2AgdG8gbWFyayBhIHJlZmVyZW5jZSwgd2Uga25vdyBub3QgdG8gbW92ZSB0aGF0IHJlZmVyZW5j ZS4gIEluIG9yZGVyDQp0byBlbnN1cmUgYWxsIHJlZmVyZW5jZXMgZ2V0IG1hcmtlZCwgd2UgcGVy Zm9ybSBhIGZ1bGwgR0MuDQoNCk5ldyBmdW5jdGlvbnMsIGByYl9nY19tYXJrX25vX3BpbmAsIGV0 YyB3ZXJlIGludHJvZHVjZWQgYW5kIHVzZWQgaW50ZXJuYWxseS4NClRoZXNlIGZ1bmN0aW9ucyBr ZWVwcyB0aGUgb2JqZWN0IGFsaXZlIGJ1dCB3aXRob3V0IHBpbm5pbmcgdGhlIHJlZmVyZW5jZS4N Cg0KU3VtbWFyeTogUGVyZm9ybSBhIGZ1bGwgR0Mgc28gdGhhdCBvYmplY3RzIG1hcmtlZCB3aXRo IGByYl9nY19tYXJrYCBkbyBub3QgbW92ZS4NCg0KIyMjIFN0ZXAgVHdvLCBNb3ZlIE9iamVjdHMN Cg0KVGhpcyBjb21wYWN0b3IgdXNlcyBhICJ0d28gZmluZ2VyIiBhbGdvcml0aG0gd2hpY2ggd2Fz IGludHJvZHVjZWQgaW4gIlRoZQ0KUHJvZ3JhbW1pbmcgTGFuZ3VhZ2UgTElTUDogSXRzIE9wZXJh dGlvbiBhbmQgQXBwbGljYXRpb25zIiAocGFnZSAyMjgpW14xXS4gIFR3bw0KcG9pbnRlcnMgcG9p bnQgYXQgZWFjaCBzaWRlIG9mIHRoZSBoZWFwLCBpZiBvbmUgc2xvdCBpcyBlbXB0eSwgYW5kIHRo ZSBvdGhlciBpcw0KbW92ZWFibGUsIGl0IHN3YXBzIHBsYWNlcyBhbmQgbGVhdmVzIGEgYFRfTU9W RURgIG9iamVjdCB0aGF0IGNvbnRhaW5zIGENCmZvcndhcmRpbmcgYWRkcmVzcy4NCg0KSW4gUnVi eSwgdGhlIGFsZ29yaXRobSBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOg0KDQpgYGBydWJ5DQpk ZWYgY29tcGFjdA0KICBoZWFwID0gWyAuLi4gXSAjIG1hbnkgc2xvdHMNCiAgbGVmdCAgPSAwDQog IHJpZ2h0ID0gaGVhcC5sZW5ndGggLSAxDQoNCiAgd2hpbGUgbGVmdCA8IHJpZ2h0DQogICAgbGVm dF9zbG90ID0gaGVhcFtsZWZ0XQ0KICAgIHJpZ2h0X3Nsb3QgPSBoZWFwW3JpZ2h0XQ0KDQogICAg aWYgaXNfZW1wdHk/KGxlZnRfc2xvdCkgJiYgIWlzX2VtcHR5PyhyaWdodF9zbG90KSAmJiBjYW5f bW92ZT8ocmlnaHRfc2xvdCkNCiAgICAgIHN3YXAobGVmdCwgcmlnaHQpDQogICAgICBoZWFwW3Jp Z2h0XSA9IFRfTU9WRUQubmV3KGxlZnQpICMgbGVhdmUgZm9yd2FyZGluZyBhZGRyZXNzDQogICAg ZW5kDQoNCiAgICB3aGlsZSAhaXNfZW1wdHk/KGhlYXBbbGVmdF0pDQogICAgICBsZWZ0ICs9IDEN CiAgICBlbmQNCg0KICAgIHdoaWxlIGlzX2VtcHR5PyhoZWFwW3JpZ2h0XSkgfHwgIWNhbl9tb3Zl PyhoZWFwW3JpZ2h0XSkNCiAgICAgIHJpZ2h0IC09IDENCiAgICBlbmQNCiAgZW5kDQplbmQNCmBg YA0KDQpJZiB3ZSBoYXZlIGEgaGVhcCB3aXRoIDYgc2xvdHMsIGJlZm9yZSBjb21wYWN0aW9uIGl0 IG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2UNCnRoaXM6DQoNCmBgYA0KICAgICAgICAgICAgICAg ICAgICAg4pSMIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAg ICAgIA0KICAgICAgICAgICAgICAgICAgICAgICAgQmVmb3JlIENvbXBhY3Rpb24gICDilIIgICAg ICAgDQogICAgICAgICAgICAgICAgICAgICDilJQg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA IOKUgCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICDilIzilIDilIDilIDilIDi lIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDi lKzilIDilIDilIDilIDilIDilKzilIDilIDilIDilIDilIDilJANCiBTbG90IEluZGV4ICAgIOKU giAgMSAg4pSCICAyICDilIIgIDMgIOKUgiAgNCAg4pSCICA1ICDilIIgIDYgIOKUgg0KICAgICAg ICAgICAgICAg4pSc4pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA 4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA4pSA4pS84pSA4pSA4pSA4pSA 4pSA4pSkDQpTbG90IENvbnRlbnRzICDilIIgIEEgIOKUgiAgQiAg4pSCRW1wdHnilIJFbXB0eeKU giAgQyAg4pSCICBEICDilIINCiAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAg IOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgg0KICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA 4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA 4pSA4pS04pSA4pSA4pSA4pSA4pSA4pS04pSA4pSA4pSA4pSA4pSA4pSYDQpgYGANCg0KQWZ0ZXIg Y29tcGFjdGlvbiwgYnV0IGJlZm9yZSByZWZlcmVuY2UgdXBkYXRlLCBpdCB3aWxsIGxvb2sgbGlr ZSB0aGlzOg0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgIOKUjCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAgICAgICAg ICAgICBBZnRlciBDb21wYWN0aW9uICAg4pSCICAgICAgIA0KICAgICAgICAgICAgICAgICAgICAg 4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAgICAgICAgIA0K ICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA 4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA 4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRleCAgICDilIIgIDEgIOKUgiAgMiAg4pSCICAzICDilIIg IDQgIOKUgiAgNSAg4pSCICA2ICDilIINCiAgICAgICAgICAgICAgIOKUnOKUgOKUgOKUgOKUgOKU gOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKU vOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUpA0KU2xvdCBDb250ZW50cyAg4pSC ICBBICDilIIgIEIgIOKUgiAgRCAg4pSCICBDICDilIJNT1ZFROKUgk1PVkVE4pSCDQogICAgICAg ICAgICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUglRPIDQg4pSCVE8gMyDi lIINCiAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKU tOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKU gOKUgOKUgOKUgOKUgOKUmA0KYGBgDQoNClNsb3RzIDUgYW5kIDYgY29udGFpbiBgVF9NT1ZFRGAg b2JqZWN0cyB0aGF0IHBvaW50IHRvIHRoZSBuZXcgbG9jYXRpb25zIG9mIEQgYW5kDQpDIG9iamVj dHMuDQoNCiMjIyBTdGVwIFRocmVlLCBVcGRhdGUgUmVmZXJlbmNlcw0KDQpBZnRlciBvYmplY3Rz IGhhdmUgbW92ZWQsIHJlZmVyZW5jZXMgYXJlIHVwZGF0ZWQuICBUaGlzIGlzIGEgbWF0dGVyIG9m IHVwZGF0aW5nDQphbnkgcmVmZXJlbmNlcyB0byB1c2UgdGhlIGZvcndhcmRpbmcgYWRkcmVzcyBy YXRoZXIgdGhhbiB0aGUgb3JpZ2luYWwgbG9jYXRpb24uDQoNCkZvciBleGFtcGxlLCBpZiBvYmpl Y3QgQSBoYXMgYSByZWZlcmVuY2UgdG8gQywgYW5kIEIgYSByZWZlcmVuY2UgdG8gRDoNCg0KYGBg DQogICAgICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKU gCDilIAg4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBCZWZvcmUgQ29t cGFjdGlvbiAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIOKUlCDilIAg4pSAIOKU gCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAg IOKUjOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKU rOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUkA0K IFNsb3QgSW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSCICA0ICDilIIgIDUgIOKU giAgNiAg4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDilIDilLzilIDilIDilIDi lIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDi lIDilLzilIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKUgiAgQSAg4pSCICBCICDi lIJFbXB0eeKUgkVtcHR54pSCICBDICDilIIgIEQgIOKUgg0KICAgICAgICAgICAgICAg4pSCICAg ICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCDQogICAgICAgICAg ICAgICDilJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDi lIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDi lJgNCiAgICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICAgICAgICAgICAgICDilrIgICAg IOKWsiAgIA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgICAgICAgICAgICAgIOKU giAgICAg4pSCICAgDQogICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLzilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJggICAgIOKU giAgIA0KICAgICAgICAgICAgICAgICAgICAgICAg4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgDQpgYGAN Cg0KQWZ0ZXIgY29tcGFjdGlvbiwgYnV0IGJlZm9yZSB1cGRhdGluZyByZWZlcmVuY2VzLCB0aGUg aGVhcCB3aWxsIGxvb2sgbGlrZSB0aGlzOg0KDQpgYGANCiAgICAgICAgICAgICAgICAgICAgIOKU jCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAg ICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBDb21wYWN0aW9uICAg4pSCICAgICAgIA0KICAg ICAgICAgICAgICAgICAgICAg4pSUIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSA IOKUgCDilIAgICAgICAgIA0KICAgICAgICAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSs4pSA 4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSs4pSA4pSA 4pSA4pSA4pSA4pSs4pSA4pSA4pSA4pSA4pSA4pSQDQogU2xvdCBJbmRleCAgICDilIIgIDEgIOKU giAgMiAg4pSCICAzICDilIIgIDQgIOKUgiAgNSAg4pSCICA2ICDilIINCiAgICAgICAgICAgICAg IOKUnOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKU vOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUpA0K U2xvdCBDb250ZW50cyAg4pSCICBBICDilIIgIEIgIOKUgiAgRCAg4pSCICBDICDilIJNT1ZFROKU gk1PVkVE4pSCDQogICAgICAgICAgICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICDilIIgICAg IOKUglRPIDQg4pSCVE8gMyDilIINCiAgICAgICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKU tOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUtOKU gOKUgOKUgOKUgOKUgOKUtOKUgOKUgOKUgOKUgOKUgOKUmA0KICAgICAgICAgICAgICAgICAg4pSC ICAgICDilIIgICAgICAgICAgICAgICAgIOKWsiAgICAg4payICAgDQogICAgICAgICAgICAgICAg ICDilIIgICAgIOKUgiAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICANCiAgICAgICAgICAg ICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUvOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmCAgICAg4pSCICAgDQogICAgICAgICAgICAgICAgICAg ICAgICDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilJggICANCmBgYA0KDQpUaGUgdXBkYXRlIHJlZmVyZW5jZXMg c3RlcCBsb29rcyBhdCBlYWNoIG9iamVjdCBpbiB0aGUgaGVhcCwgY2hlY2tzIHRvIHNlZSBpZiBp dA0KcmVmZXJlbmNlcyBhbnkgbW92ZWQgc2xvdHMsIHRoZW4gdXBkYXRlcyB0aGUgcmVmZXJlbmNl IHRvIHVzZSB0aGUgbmV3IGxvY2F0aW9uLg0KSW4gUnVieSwgaXQgbG9va3MgbGlrZSB0aGlzOg0K DQpgYGBydWJ5DQpkZWYgdXBkYXRlX3JlZmVyZW5jZXMNCiAgaGVhcC5lYWNoIGRvIHxzbG90fA0K ICAgIG5leHQgaWYgaXNfZW1wdHk/KHNsb3QpIHx8IGlzX21vdmVkPyhzbG90KQ0KDQogICAgc2xv dC5yZWZlcmVuY2VzLmVhY2hfd2l0aF9pbmRleCBkbyB8Y2hpbGQsIGl8DQogICAgICBpZiBpc19t b3ZlZD8oY2hpbGQpDQogICAgICAgIHNsb3Quc2V0X3JlZmVyZW5jZShpLCBjaGlsZC5uZXdfbG9j YXRpb24pDQogICAgICBlbmQNCiAgICBlbmQNCiAgZW5kDQplbmQNCmBgYA0KDQpBZnRlciByZWZl cmVuY2UgdXBkYXRlcywgdGhlIGhlYXAgd2lsbCBsb29rIGxpa2UgdGhpczoNCg0KYGBgDQogICAg ICAgICAgICAgICAgICAgICDilIwg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCAgICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgICBBZnRlciBSZWYgVXBkYXRl cyAgIOKUgiAgICAgICANCiAgICAgICAgICAgICAgICAgICAgIOKUlCDilIAg4pSAIOKUgCDilIAg 4pSAIOKUgCDilIAg4pSAIOKUgCDilIAg4pSAICAgICAgICANCiAgICAgICAgICAgICAgIOKUjOKU gOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKU gOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUrOKUgOKUgOKUgOKUgOKUgOKUkA0KIFNsb3Qg SW5kZXggICAg4pSCICAxICDilIIgIDIgIOKUgiAgMyAg4pSCICA0ICDilIIgIDUgIOKUgiAgNiAg 4pSCDQogICAgICAgICAgICAgICDilJzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDi lLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzilIDilIDilIDilIDilIDilLzi lIDilIDilIDilIDilIDilKQNClNsb3QgQ29udGVudHMgIOKUgiAgQSAg4pSCICBCICDilIIgIEQg IOKUgiAgQyAg4pSCTU9WRUTilIJNT1ZFROKUgg0KICAgICAgICAgICAgICAg4pSCICAgICDilIIg ICAgIOKUgiAgICAg4pSCICAgICDilIJUTyA0IOKUglRPIDMg4pSCDQogICAgICAgICAgICAgICDi lJTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTi lIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilLTilIDilIDilIDilIDilIDilJgNCiAg ICAgICAgICAgICAgICAgIOKUgiAgICAg4pSCICAgICDilrIgICAgIOKWsiAgICAgICAgICAgICAg IA0KICAgICAgICAgICAgICAgICAg4pSCICAgICDilIIgICAgIOKUgiAgICAg4pSCICAgICAgICAg ICAgICAgDQogICAgICAgICAgICAgICAgICDilJTilIDilIDilIDilIDilIDilLzilIDilIDilIDi lIDilIDilLzilIDilIDilIDilIDilIDilJggICAgICAgICAgICAgICANCiAgICAgICAgICAgICAg ICAgICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUmCAgICAgICAgICAgICAgICAgICAgIA0KYGBg DQoNCiMjIyBTdGVwIEZvdXIsIEZ1bGwgR0MNCg0KQWZ0ZXIgcmVmZXJlbmNlcyBoYXZlIGJlZW4g dXBkYXRlZCwgYSBmdWxsIEdDIGlzIHBlcmZvcm1lZC4gIFRoaXMgY29udmVydHMgdGhlDQpgVF9N T1ZFRGAgc2xvdHMgYmFjayBpbiB0byBgVF9FTVBUWWAgc2xvdHMuICBUaGUgR0MgYXV0b21hdGlj YWxseSB0YWtlcyBjYXJlIG9mDQp0aGlzIGJlY2F1c2Ugbm8gb2JqZWN0IHNob3VsZCByZWZlcmVu Y2UgYSBgVF9NT1ZFRGAgc2xvdC4NCg0KIyMgTm9uIE1vdmluZyBPYmplY3RzDQoNCk5vbiBtb3Zp bmcgb2JqZWN0cyBhcmU6DQoNCjEuIE9iamVjdHMgb24gdGhlIHN0YWNrDQoyLiBPYmplY3RzIG1h cmtlZCB3aXRoIGByYl9nY19tYXJrYA0KMy4gSGFzaCBrZXkgb2JqZWN0cw0KDQojIyMgT2JqZWN0 cyBvbiB0aGUgc3RhY2sNCg0KVGhlIHN0YWNrIHNob3VsZCBub3QgYmUgbXV0YXRlZCwgc28gdGhl c2UgYXJlIHBpbm5lZC4NCg0KIyMjIE9iamVjdHMgbWFya2VkIHdpdGggYHJiX2djX21hcmtgDQoN CkFzIG1lbnRpb25lZCBlYXJsaWVyLCBhbnkgb2JqZWN0IG1hcmtlZCB3aXRoIGByYl9nY19tYXJr YCBtYXkgbm90IG1vdmUgYmVjYXVzZSBhDQpDIGV4dGVuc2lvbiBtYXkgaG9sZCBhIHJlZmVyZW5j ZS4gIEhlcmUgaXMgYW4gZXhjZXJwdCBmcm9tIFlhamwsIGEgSlNPTiBwYXJzZXIuDQpUaGlzIGlz IHRoZSBtYXJrIGZ1bmN0aW9uIGl0IHVzZXM6DQoNCmBgYGMNCnN0YXRpYyB2b2lkIHlhamxfZW5j b2Rlcl93cmFwcGVyX21hcmsodm9pZCAqIHdyYXBwZXIpIHsNCiAgICB5YWpsX2VuY29kZXJfd3Jh cHBlciAqIHcgPSB3cmFwcGVyOw0KICAgIGlmICh3KSB7DQogICAgICAgIHJiX2djX21hcmsody0+ b25fcHJvZ3Jlc3NfY2FsbGJhY2spOw0KICAgICAgICByYl9nY19tYXJrKHctPnRlcm1pbmF0b3Ip Ow0KICAgIH0NCn0NCg0KDQpvYmogPSBEYXRhX01ha2VfU3RydWN0KGtsYXNzLCB5YWpsX2VuY29k ZXJfd3JhcHBlciwgeWFqbF9lbmNvZGVyX3dyYXBwZXJfbWFyaywgeWFqbF9lbmNvZGVyX3dyYXBw ZXJfZnJlZSwgd3JhcHBlcik7DQpgYGANCg0KVGhlIHZhbHVlcyBpbiB0aGlzIG1hcmsgZnVuY3Rp b24gYHctPm9uX3Byb2dyZXNzX2NhbGxiYWNrYCBhbmQgYHctPnRlcm1pbmF0b3JgDQp3aWxsIG5v dCBtb3ZlIHNpbmNlIHRoZXkgYXJlIHBpbm5lZCBieSBgcmJfZ2NfbWFya2AuDQoNCiMjIyBIYXNo IGtleSBvYmplY3RzDQoNCkNlcnRhaW4gaGFzaCBrZXlzIHdpbGwgbm90IG1vdmUuICBNb3N0IG9i amVjdHMgdXNlIHRoZWlyIGFkZHJlc3MgYXMgdGhlIGhhc2gNCnZhbHVlLiAgSWYgdGhlIG9iamVj dCBtb3ZlcywgdGhlIGhhc2ggdmFsdWUgY291bGQgY2hhbmdlLCBzbyBoYXNoIGtleXMgYXJlIG5v dA0KYWxsb3dlZCB0byBtb3ZlLg0KDQpUaGVyZSBpcyBhbiBleGNlcHRpb24gZm9yIHN0cmluZyBv YmplY3RzLiAgU3RyaW5nIG9iamVjdHMgY2FsY3VsYXRlIHRoZWlyIGhhc2gNCmJhc2VkIG9uIHRo ZSBieXRlcyBpbiB0aGUgc3RyaW5nLiAgU2luY2UgdGhlIGJ5dGVzIGluIHRoZSBzdHJpbmcgZG8g bm90IGNoYW5nZQ0KYWZ0ZXIgbW92ZSwgdGhleSBhcmUgYWxsb3dlZCB0byBtb3ZlLiAgTW9zdCBo YXNoIGtleXMgaW4gbGFyZ2UgcHJvZ3JhbXMgYXJlDQpzdHJpbmdzLCBzbyBvbmx5IGFsbG93aW5n IHN0cmluZyBrZXlzIHRvIG1vdmUgc2VlbWVkIGVub3VnaC4NCg0KIyMgU3BlY2lhbCBDb25zaWRl cmF0aW9ucw0KDQojIyMgT2JqZWN0IElEDQoNCmBPYmplY3Qjb2JqZWN0X2lkYCBiYXNlcyBpdHMg dmFsdWUgZnJvbSB0aGUgYWRkcmVzcyBvZiB0aGUgb2JqZWN0LiAgRm9yIGV4YW1wbGU6DQoNCmBg YHJ1YnkNCnggPSBPYmplY3QubmV3DQppZCA9IHgub2JqZWN0X2lkDQpHQy5jb21wYWN0ICAgICAg ICAjIGB4YCBtb3Zlcw0KaWQgPT0geC5vYmplY3RfaWQgIyBgaWRgIHNob3VsZCBiZSBzYW1lIGFz IGB4Lm9iamVjdF9pZGANCmBgYA0KDQpXZSBleHBlY3QgdGhlIG9iamVjdCBpZCB0byByZW1haW4g dGhlIHNhbWUgcmVnYXJkbGVzcyBvZiBjb21wYWN0aW9uLiAgVG8gZGVhbA0Kd2l0aCBgb2JqZWN0 X2lkYCwgdHdvIGhhc2hlcyB3ZXJlIGludHJvZHVjZWQuICBPbmUgaGFzaCBjb250YWlucyBhIG1h cCBvZiB0aGUNCm9iamVjdCB0byB0aGUgKnNlZW4qIG9iamVjdCBpZC4gIFRoZSBzZWNvbmQgbWFw IGNvbnRhaW5zIGFsbCBzZWVuIG9iamVjdCBpZHMuDQpUaGUgbWFwcyBhcmUgdXBkYXRlZCBhbnkg dGltZSBgb2JqZWN0X2lkYCBpcyBjYWxsZWQsIGFuIG9iamVjdCBtb3Zlcywgb3IgYW4NCm9iamVj dCBpcyBmcmVlZC4NCg0Kb2JqZWN0X2lkIGltcGxlbWVudGF0aW9uIGluIFJ1Ynk6DQoNCmBgYHJ1 YnkNCiRvYmpfdG9faWQgPSB7fQ0KJGlkX3RvX29iaiA9IHt9DQoNCmNsYXNzIE9iamVjdA0KICBk ZWYgb2JqZWN0X2lkDQogICAgaWYgJG9ial90b19pZC5rZXk/KGFkZHJlc3MpDQogICAgICAjIFNl Y29uZCBjYWxsIHRvIG9iamVjdF9pZCBvbiB0aGlzIG9iamVjdA0KICAgICAgcmV0dXJuICRvYmpf dG9faWRbYWRkcmVzc10NCiAgICBlbHNlDQogICAgICAjIEZpcnN0IGNhbGwgdG8gb2JqZWN0X2lk IG9uIHRoaXMgb2JqZWN0DQoNCiAgICAgIGFkZHIgPSBzZWxmLmFkZHJlc3MNCg0KICAgICAgbG9v cCBkbw0KICAgICAgICBpZiAkc2Vlbl9pZHMua2V5PyhhZGRyKQ0KICAgICAgICAgICMgUmVzb2x2 ZSBjb25mbGljdA0KICAgICAgICAgIGFkZHIgKz0gc2l6ZW9mKFJWQUxVRSkNCiAgICAgICAgZWxz ZQ0KICAgICAgICAgICRvYmpfdG9faWRbc2VsZi5hZGRyZXNzXSA9IGFkZHINCiAgICAgICAgICAk aWRfdG9fb2JqW2FkZHJdICAgICAgICAgPSBzZWxmDQogICAgICAgICAgcmV0dXJuIGFkZHINCiAg ICAgICAgZW5kDQogICAgICBlbmQNCiAgICBlbmQNCiAgZW5kDQoNCiAgcHJpdmF0ZQ0KDQogIGRl ZiBhZGRyZXNzDQogICAgIyByZXR1cm5zIGFkZHJlc3MgaW4gbWVtb3J5IG9mIG9iamVjdA0KICBl bmQNCmVuZA0KYGBgDQoNCkR1cmluZyBjb21wYWN0aW9uOg0KDQpgYGBydWJ5DQpkZWYgY29tcGFj dA0KICBoZWFwID0gWyAuLi4gXSAjIG1hbnkgc2xvdHMNCg0KICB3aGlsZSBsZWZ0IDwgcmlnaHQN CiAgICBkZXN0X3Nsb3QgPSBoZWFwW2xlZnRdDQogICAgc291cmNlX3Nsb3QgPSBoZWFwW3JpZ2h0 XQ0KDQogICAgaWYgbW92aW5nPyhzb3VyY2Vfc2xvdCkNCiAgICAgIGlmICRvYmpfdG9faWQua2V5 Pyhzb3VyY2Vfc2xvdC5hZGRyZXNzKQ0KICAgICAgICBpZCA9ICRvYmpfdG9faWQuZGVsZXRlKHNv dXJjZV9zbG90LmFkZHJlc3MpDQogICAgICAgICRvYmpfdG9faWRbZGVzdF9zbG90LmFkZHJlc3Nd ID0gaWQNCiAgICAgICAgJGlkX3RvX29ialtpZF0gICAgICAgICAgICAgICAgPSBkZXN0X3Nsb3Qu YWRkcmVzcw0KICAgICAgZW5kDQoNCiAgICAgICMgZXRjDQogICAgZW5kDQogIGVuZA0KZW5kDQpg YGANCg0KRHVyaW5nIEZyZWU6DQoNCmBgYHJ1YnkNCmRlZiBmcmVlKG9iaikNCiAgaWYgJG9ial90 b19pZC5rZXk/KG9iai5hZGRyZXNzKQ0KICAgICRzZWVuX2lkcy5kZWxldGUoJG9ial90b19pZC5k ZWxldGUob2JqLmFkZHJlc3MpKQ0KICBlbmQNCmVuZA0KYGBgDQoNCiMjIyBPYmplY3RTcGFjZS5f aWQycmVmDQoNCldoZW4gZ2VuZXJhdGluZyBhbiBvYmplY3QgaWQsIGluIHRoZSBjYXNlIG9mIGEg Y29sbGlzaW9uLCB0aGUgYWRkcmVzcyBpcw0KaW5jcmVtZW50ZWQgYnkgNDAuICBUaGlzIGVuYWJs ZXMgYF9pZDJyZWZgIHRvIGRldGVybWluZSB0aGVyZSBpcyBhIFZBTFVFIHBvaW50ZXINCmFuZCBy b3VuZCB0cmlwIHRoZSBvYmplY3QgY29ycmVjdGx5Lg0KDQojIyBDb21wYWN0aW9uIFN1cHBvcnQg Zm9yIEMgZXh0ZW5zaW9ucw0KDQpBbnkgb2JqZWN0IG1hcmtlZCB3aXRoIGByYl9nY19tYXJrYCB3 aWxsIGJlICJwaW5uZWQiIGFuZCBjYW5ub3QgbW92ZS4gIEMNCmV4dGVuc2lvbnMgbWFyayBvYmpl Y3RzIHZpYSBgcmJfZ2NfbWFya2AsIHNvIHRoaXMgZW5zdXJlcyB0aGF0IHBvaW50ZXJzIGluIEMN CnN0YXkgdmFsaWQuDQoNCkhvd2V2ZXIsIHNvbWUgQyBleHRlbnNpb25zIG1heSB3YW50IHRvIHN1 cHBvcnQgcmVmZXJlbmNlIG1vdmVtZW50Lg0KDQojIyMgUmVmZXJlbmNlIE1vdmVtZW50IGluIEMg ZXh0ZW5zaW9ucw0KDQpJbiBvcmRlciB0byBtYWludGFpbiBiYWNrd2FyZHMgY29tcGF0aWJpbGl0 eSwgaWYgYSBDIGV4dGVuc2lvbiBob2xkcyBhIHJlZmVyZW5jZQ0KdG8gYSBWQUxVRSwgdGhlIFZB TFVFIHNob3VsZCBub3QgbW92ZS4gIEdvaW5nIGZvcndhcmQsIEMgZXh0ZW5zaW9ucyBjYW4gc3Vw cG9ydA0KbW92aW5nIFZBTFVFcy4gIFRvIHN1cHBvcnQgbW92aW5nIFZBTFVFcywgYSBDIGV4dGVu c2lvbiBzaG91bGQgY2hhbmdlDQpgcmJfZ2NfbWFya2AgdG8gYHJiX2djX21hcmtfbm9fcGluYCwg dGhlbiBpbXBsZW1lbnQgYSBuZXcgY2FsbGJhY2sgdGhhdCBpcw0KY2FsbGVkIGR1cmluZyBjb21w YWN0aW9uIHRoYXQgZ2l2ZXMgdGhlIGV4dGVuc2lvbiBhbiBvcHBvcnR1bml0eSB0byB1cGRhdGUg aXRzDQpvd24gcmVmZXJlbmNlcy4gIEEgbmV3IGZ1bmN0aW9uIGByYl9nY19uZXdfbG9jYXRpb25g IHdpbGwgcmV0dXJuIHRoZSBuZXcNCmxvY2F0aW9uIGZvciBhIHBhcnRpY3VsYXIgVkFMVUUuDQoN CkhlcmUgaXMgYW4gZXhhbXBsZSBmb3IgYXV0b2xvYWQgZnJvbSBgdmFyaWFibGUuY2AuICBBIG5l dyBjb21wYWN0aW9uIGNhbGxiYWNrIGlzDQpyZWdpc3RlcmVkLCBgYXV0b2xvYWRfaV9jb21wYWN0 YDoNCg0KYGBgYw0Kc3RhdGljIGNvbnN0IHJiX2RhdGFfdHlwZV90IGF1dG9sb2FkX2RhdGFfaV90 eXBlID0gew0KICAgICJhdXRvbG9hZF9pIiwNCiAgICB7YXV0b2xvYWRfaV9tYXJrLCBhdXRvbG9h ZF9pX2ZyZWUsIGF1dG9sb2FkX2lfbWVtc2l6ZSwgYXV0b2xvYWRfaV9jb21wYWN0fSwNCiAgICAw LCAwLCBSVUJZX1RZUEVEX0ZSRUVfSU1NRURJQVRFTFkNCn07DQpgYGANCg0KVGhlIG1hcmsgZnVu Y3Rpb24gY2hhbmdlcyB0byAqbWFyayogcmVmZXJlbmNlcywgYnV0ICpub3QqIHBpbiB0aGVtOg0K DQpgYGBjDQpzdGF0aWMgdm9pZA0KYXV0b2xvYWRfaV9tYXJrKHZvaWQgKnB0cikNCnsNCiAgICBz dHJ1Y3QgYXV0b2xvYWRfZGF0YV9pICpwID0gcHRyOw0KDQogICAgcmJfZ2NfbWFya19ub19waW4o cC0+ZmVhdHVyZSk7DQoNCiAgICAvKiBhbGxvdyBHQyB0byBmcmVlIHVzIGlmIG5vIG1vZHVsZXMg cmVmZXIgdG8gdGhpcyB2aWEgYXV0b2xvYWRfY29uc3QuYWQgKi8NCiAgICBpZiAobGlzdF9lbXB0 eSgmcC0+Y29uc3RhbnRzKSkgew0KICAgICAgICByYl9oYXNoX2RlbGV0ZShhdXRvbG9hZF9mZWF0 dXJlbWFwLCBwLT5mZWF0dXJlKTsNCiAgICB9DQp9DQpgYGANCg0KQWZ0ZXIgdGhlIGhlYXAgaXMg Y29tcGFjdGVkLCBhbnkgQyBleHRlbnNpb25zIHRoYXQgcmVnaXN0ZXJlZCBhICJjb21wYWN0aW9u Ig0KY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgYW5kIGhhdmUgYSBjaGFuY2UgdG8gdXBkYXRlIGlu dGVybmFsIHJlZmVyZW5jZXMuICBUaGUNCmF1dG9sb2FkIGNvbXBhY3Rpb24gZnVuY3Rpb24gaXMg bGlrZSB0aGlzOg0KDQpgYGBjDQpzdGF0aWMgdm9pZA0KYXV0b2xvYWRfaV9jb21wYWN0KHZvaWQg KnB0cikNCnsNCiAgICBzdHJ1Y3QgYXV0b2xvYWRfZGF0YV9pICpwID0gcHRyOw0KICAgIHAtPmZl YXR1cmUgPSByYl9nY19uZXdfbG9jYXRpb24ocC0+ZmVhdHVyZSk7DQpgYGANCg0KVGhlIGNvbXBh Y3Rpb24gY2FsbGJhY2sgYXNrcyBmb3IgdGhlIG5ldyBsb2NhdGlvbiBmb3IgdGhlIGBwLT5mZWF0 dXJlYA0KcmVmZXJlbmNlLiAgYHJiX2djX25ld19sb2NhdGlvbmAgd2lsbCBlaXRoZXIgcmV0dXJu IHRoZSBjdXJyZW50IHZhbHVlIG9mDQpgcC0+ZmVhdHVyZWAgKGluIHRoZSBjYXNlIHRoZSBWQUxV RSBkaWQgbm90IG1vdmUpLCBvciB0aGUgbmV3IGxvY2F0aW9uLg0KDQojIyBSZWZlcmVuY2UgVmVy aWZpY2F0aW9uIGFuZCBUZXN0aW5nDQoNCkFmdGVyIGNvbXBhY3Rpb24sIG9iamVjdHMgdGhhdCBo YXZlIG1vdmVkIGFyZSBjaGFuZ2VkIHRvIGBUX01PVkVEYCBvYmplY3RzIHdpdGgNCmZvcndhcmRp bmcgYWRkcmVzc2VzLiAgT25jZSBhbGwgcmVmZXJlbmNlcyBhcmUgdXBkYXRlZCwgbm8gb2JqZWN0 IHNob3VsZCBwb2ludA0KdG8gYSBgVF9NT1ZFRGAgc2xvdC4gIFdlIGNhbiBzYXkgdGhhdCBiZWZv cmUgYW5kIGFmdGVyIGNvbXBhY3Rpb24sIG5vIG9iamVjdA0Kc2hvdWxkIGV2ZXIgcG9pbnQgYXQg YSBgVF9NT1ZFRGAgc2xvdC4gIFNvIGlmIGEgYFRfTU9WRURgIG9iamVjdCBpcyBldmVyIHB1c2hl ZA0Kb24gdG8gdGhlIG1hcmsgcXVldWUsIHRoZXJlIGlzIGEgYnVnLiAgYHB1c2hfbWFya19zdGFj a2AgaGFzIGEgY2hlY2sgZm9yDQpgVF9NT1ZFRGAgb2JqZWN0cywgYW5kIHdpbGwgY3Jhc2ggaWYg YSBgVF9NT1ZFRGAgb2JqZWN0IGlzIGV2ZXIgcHVzaGVkIG9uIHRvIHRoZQ0KbWFyayBzdGFjay4N Cg0KQSBtZXRob2QgYEdDLnZlcmlmeV9jb21wYWN0aW9uX3JlZmVyZW5jZXNgIHdhcyBhZGRlZCB0 aGF0IGRvdWJsZXMgdGhlIGF2YWlsYWJsZQ0KaGVhcCBzaXplLCB0aGVuIGNvbXBhY3RzIHRoZSBo ZWFwLiAgU2luY2UgdGhlIGhlYXAgaGFzIGRvdWJsZWQgaW4gc2l6ZSwgYW55DQpvYmplY3QgdGhh dCBjYW4gbW92ZSB3aWxsIG1vdmUuICBBbnkgcmVmZXJlbmNlcyB0byBgVF9NT1ZFRGAgb2JqZWN0 cyB3aWxsIGJlDQpjYXVnaHQgZHVyaW5nIHRoZSBHQyBwaGFzZSBhZnRlciBjb21wYWN0aW9uLg0K DQojIyBLbm93biBJc3N1ZQ0KDQpTYWZldHkgZm9yIEMgZXh0ZW5zaW9ucyBkZXBlbmRzIGVudGly ZWx5IG9uIEMgZXh0ZW5zaW9ucyBtYXJraW5nIHRoZWlyDQpyZWZlcmVuY2VzLiAgSWYgYSBDIGV4 dGVuc2lvbiBkb2VzIG5vdCBtYXJrIGEgcmVmZXJlbmNlLCB0aGUgY29tcGFjdG9yIGFzc3VtZXMN CnRoYXQgdGhlIG9iamVjdCBpcyBzYWZlIHRvIG1vdmUuICBUaGlzIGNhbiBjYXVzZSBhbiBlcnJv ciBpbiB0aGUgZm9sbG93aW5nDQpzaXR1YXRpb24sIHdoZW4gdGhlcmUgaXMgYW4gb2JqZWN0IGdy YXBoIGxpa2UgdGhpczoNCg0KDQpgYGANCiDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilJAgICAgICAg4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSQIA0KIOKUgiAgUnVieSBPYmplY3QgIOKUgiAgICAgICDilIIg IFJ1YnkgT2JqZWN0ICDilIIgDQog4pSCICBJbXBsZW1lbnRlZCAg4pSCICAgICAgIOKUgiAgSW1w bGVtZW50ZWQgIOKUgiANCiDilIIgICAgaW4gUnVieSAgICDilIIgICAgICAg4pSCICAgICBpbiBD ICAgICAg4pSCIA0KIOKUgiAgICAgICAgICAgICAgIOKUgiAgICAgICDilIIgICAgICAgICAgICAg ICDilIIgDQog4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA 4pSYICAgICAgIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKU gOKUmCANCiAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgICAgICAgDQog ICAgICAgICDilIIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCiAgICAgICAgIOKU giAgICAgICAgICAgICAgICAgICAgICAg4pSCICAgTk9UICAgDQogTWFya2VkICDilIIgICAgICAg ICAgICAgICAgICAgICAgICAgIE1hcmtlZCANCiAgICAgICAgIOKUgiAgICAgICAgICAgICAgICAg ICAgICAg4pSCICAgICAgICAgDQogICAgICAgICDilIIgICDilIzilIDilIDilIDilIDilIDilIDi lIDilIDilIDilIDilIDilIDilIDilIDilIDilJAgICAgICAgICAgICAgDQogICAgICAgICDilIIg ICDilIIgICAgICAgICAgICAgICDilIIgICDilIIgICAgICAgICANCiAgICAgICAgIOKUgiAgIOKU giAgUnVieSBPYmplY3QgIOKUgiAgICAgICAgICAgICANCiAgICAgICAgIOKUlOKUgOKUgOKWtuKU giAgICAgICAgICAgICAgIOKUguKXgOKUgCDilJggICAgICAgICANCiAgICAgICAgICAgICDilIIg ICAgICAgICAgICAgICDilIIgICAgICAgICAgICAgDQogICAgICAgICAgICAg4pSU4pSA4pSA4pSA 4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYICAgICAgICAgICAgIA0KYGBg DQoNCklmIHRoZSBDIGV4dGVuc2lvbiBjb250YWlucyBhIHJlZmVyZW5jZSB0byBhbiBvYmplY3Qs IGJ1dCBleHBlY3RzIHRoZSBvYmplY3QNCm5vdCB0byBtb3ZlIGJlY2F1c2UgYSBSdWJ5IG9iamVj dCBjb250YWlucyBhIHJlZmVyZW5jZSwgdGhlbiB0aGUgdGFyZ2V0IFJ1YnkNCm9iamVjdCAqbWF5 KiBtb3ZlIGFuZCB0aGUgcmVmZXJlbmNlIGluIHRoZSBDIGV4dGVuc2lvbiB3aWxsIGJlIHdyb25n LiAgSSBsaWtlIHRvDQpjYWxsIHRoZXNlICJnaG9zdCByZWZlcmVuY2VzIiBiZWNhdXNlIHRoZSBH QyBjYW5ub3Qgc2VlIHRoZW0gYnV0IHRoZXkgd2lsbCBjb21lDQpiYWNrIHRvIGhhdW50IHlvdS4N Cg0KVGhlIHNvbHV0aW9uIHRvIHRoaXMgaXMgZWl0aGVyOg0KDQoxLiBDaGFuZ2UgdGhlIEMgZXh0 ZW5zaW9uIHRvIGByYl9nY19tYXJrYCB0aGUgb2JqZWN0DQoyLiBSZW1vdmUgdGhlIHJlZmVyZW5j ZSBmcm9tIHRoZSBDIGV4dGVuc2lvbg0KDQpPbmUgZXhhbXBsZSBvZiB0aGlzIHNpdHVhdGlvbiB3 YXMgZml4ZWQgaGVyZToNCg0KICBodHRwczovL2dpdGh1Yi5jb20vbXNncGFjay9tc2dwYWNrLXJ1 YnkvaXNzdWVzLzEzMw0KDQojIyBTdW1tYXJ5DQoNCkJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IHdp dGggQyBleHRlbnNpb25zIGlzIG1haW50YWluZWQgYnkgInBpbm5pbmciIGFueQ0KcmVmZXJlbmNl cyBtYXJrZWQgd2l0aCBgcmJfZ2NfbWFya2AuICBBIGZ1bGwgbWFyayAqbXVzdCogYmUgZG9uZSBi ZWZvcmUNCmNvbXBhY3RpbmcgdG8gZGlzY292ZXIgYWxsIHBpbm5lZCByZWZlcmVuY2VzLg0KDQpB IG5ldyBjYWxsYmFjayBmb3IgQyBleHRlbnNpb25zIGlzIGludHJvZHVjZWQgc28gdGhhdCBDIGV4 dGVuc2lvbnMgY2FuIHN1cHBvcnQNCmNvbXBhY3Rpb24uICBDIGV4dGVuc2lvbnMgdGhhdCB3aXNo IHRvIHN1cHBvcnQgY29tcGFjdGlvbiBtdXN0IHVzZSB0aGUgbmV3DQpjYWxsYmFjaywgYHJiX2dj X21hcmtfbm9fcGluYCwgYW5kIGByYl9nY19uZXdfbG9jYXRpb25gLg0KDQpDIGV4dGVuc2lvbnMg dGhhdCBtYWludGFpbiBwb2ludGVycyBidXQgZG8gbm90IG1hcmsgdGhvc2UgcG9pbnRlcnMgbWF5 IFNFR1YuICBXZQ0KY2FuIHVzZSBgR0MudmVyaWZ5X2NvbXBhY3Rpb25fcmVmZXJlbmNlc2AgdG8g ZGlzY292ZXIgdGhlc2UgaXNzdWVzLg0KDQpbXjFdOiBTZWUgYWxzbyAiVGhlIEdhcmJhZ2UgQ29s bGVjdGlvbiBIYW5kYm9vayIgcGFnZSAzMg0KDQoNCi0tLUZpbGVzLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0NCmJlZm9yZV9jb21wYWN0LTAucG5nICgxMTEgS0IpDQphZnRlcl9jb21w YWN0LTAucG5nICg4MC42IEtCKQ0KYmVmb3JlX2NvbXBhY3QtMS5wbmcgKDgxLjIgS0IpDQphZnRl cl9jb21wYWN0LTEucG5nICg3OS40IEtCKQ0KMDAwMS1HQy1Db21wYWN0aW9uLWZvci1NUkkucGF0 Y2ggKDc3LjQgS0IpDQoNCg0KLS0gDQpodHRwczovL2J1Z3MucnVieS1sYW5nLm9yZy8NCg==