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.0 required=3.0 tests=AWL,BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_BL_SPAMCOP_NET, RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS,UNPARSEABLE_RELAY 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 702491F910 for ; Tue, 15 Nov 2022 12:10:41 +0000 (UTC) Authentication-Results: dcvr.yhbt.net; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=ruby-lang.org header.i=@ruby-lang.org header.b="NSr7u5vH"; dkim-atps=neutral Received: from neon.ruby-lang.org (localhost [IPv6:::1]) by neon.ruby-lang.org (Postfix) with ESMTP id 6D51B120FBB; Tue, 15 Nov 2022 21:10:28 +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 AD5E71212D3 for ; Tue, 15 Nov 2022 21:10:24 +0900 (JST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ruby-lang.org; h=from:references:subject:mime-version:content-type: content-transfer-encoding:list-id:to:cc; s=s1; bh=pDyoJF7jMHX5XLr1iGEfBM0nfwm6OJLhco7P3fTnB2g=; b=NSr7u5vHx1qfuFybw5rkvVVSnQcjTmtCUyyO9j6fXpvcX1gcFJNeI608aP3ai7a3SMYW 7cqoy0AS/AohyIhsv0yG1DWF79Mu72WjwbUMDz0tfA2z/NI/digIOPGn6OVrydJB6Kt2xC LUM+tdYYUl3v0fuGX9YtJj4ey3NhmaBq5B/MXfUQCtNYp38faGDFy0C8TwOaZ1PIKruMbW Ojb0NRu7eRfQuw8VIQye5hL19eVXofwLNVXyuGYrjzW5q+l6uqA08odzbIRWnZ/p2wWkUY lA9noD8BRdDe9wtoqkLVeF5TkoIeKD1gHz3DEoJ9iBzLR8m/OYIm+up4uyEpsPjA== Received: by filterdrecv-584d94948b-rjl2b with SMTP id filterdrecv-584d94948b-rjl2b-1-637381A8-E 2022-11-15 12:10:16.359001679 +0000 UTC m=+404626.237951525 Received: from herokuapp.com (unknown) by geopod-ismtpd-4-3 (SG) with ESMTP id 8y0pGFE6TeeGhsjpynhUJw for ; Tue, 15 Nov 2022 12:10:16.203 +0000 (UTC) Date: Tue, 15 Nov 2022 12:10:16 +0000 (UTC) From: "kjtsanaktsidis (KJ Tsanaktsidis)" Message-ID: References: Mime-Version: 1.0 X-Redmine-Project: ruby-master X-Redmine-Issue-Tracker: Feature X-Redmine-Issue-Id: 19119 X-Redmine-Issue-Author: kjtsanaktsidis X-Redmine-Sender: kjtsanaktsidis 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: 87214 X-SG-EID: =?us-ascii?Q?bpuAnwiv5wR3AMKfH76hNK7PI5khDDZ1kji5+D8yFrgaUvTZzAkIlQXnVriLYY?= =?us-ascii?Q?wZntoXP0DUH6R9LNgqzTU1esCZ4KY8M9zX8WDhO?= =?us-ascii?Q?VCp0C7oOgZHrJeoZSWtLTU5fCTcA5p2zh4rCfbR?= =?us-ascii?Q?t6FtgtVnWVw6Frdp218+DUBqT+5IhjKe5pzwGqF?= =?us-ascii?Q?cjy4ztJh0WA3cZYY2chhovQiJjCJDlzYbZB+Uiy?= =?us-ascii?Q?0QN=2FKgWXvBfTY=2FsQBJAL9Cgmqu1=2FxE9lSeeomVq?= =?us-ascii?Q?iVb16MNnwwArIRkWVmMJ=2FYcZpWl4LDoNINUgoAh?= =?us-ascii?Q?YlU=3D?= To: ruby-core@neon.ruby-lang.org X-Entity-ID: b/2+PoftWZ6GuOu3b0IycA== X-ML-Name: ruby-core X-Mail-Count: 110762 Subject: [ruby-core:110762] [Ruby master Feature#19119] Add an interface for out-of-process profiling tools to access Ruby information 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" SXNzdWUgIzE5MTE5IGhhcyBiZWVuIHVwZGF0ZWQgYnkga2p0c2FuYWt0c2lkaXMgKEtKIFRzYW5h a3RzaWRpcykuCgoKRXJlZ29uIChCZW5vaXQgRGFsb3plKSB3cm90ZSBpbiAjbm90ZS03OgoKPiBT byBiYXNpY2FsbHkgdGhlcmUgd291bGQgYmUgc29tZSBjb3JlIEFQSSB0byBzdGFydCBwcm9maWxp bmcgKGFuZCBpdCB3b3VsZCBzYW1wbGUgZXZlcnkgTiBtaWxsaXNlY29uZHMpLCBzdG9wIHByb2Zp bGluZywgYW5kIHJldHJpZXZlIHRoZSByZXN1bHRzLiBUaGF0J3MgYWdub3N0aWMgb2YgUnVieSBW TSBkZXRhaWxzLCBhbmQgY2FuIHVzZSB0aGUgbW9zdCBlZmZpY2llbnQgd2F5IHRvIHByb2ZpbGUg aW4tcHJvY2Vzcy4KCk9LIC0gaXQgc291bmRzIGxpa2UgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIHB1 c2ggdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcHJvZmlsaW5nIG9mZiB0byBhIHNl cGFyYXRlIG91dC1vZi10cmVlIHRvb2wsIHRoYXQgeW91IHRoaW5rIHRoZSBSdWJ5IFZNIHNob3Vs ZCBqdXN0IHRha2UgcmVzcG9uc2liaWxpdHkgZm9yIGRvaW5nIHRoZSBwcm9maWxpbmcgaXRzZWxm IChhbmQgcG90ZW50aWFsbHkgZXhwb3NpbmcgdGhlIHJlc3VsdHMgdmlhIGJvdGggaW4tcHJvY2Vz cyBBUElzICYgb3V0LW9mLXByb2Nlc3MgQVBJcyBsaWtlIHNvY2tldHMgZXRjKS4gCgo+IEZvciBU cnVmZmxlUnVieSBJIGhhdmUgd3JpdHRlbiBzb21lIHRob3VnaHRzIG9uIGhvdyB0byBwcm9maWxl IGVmZmljaWVudGx5IGFuZCBwcm92aWRlIGEgUnVieSBBUEkgZm9yIGl0IGluIGh0dHBzOi8vZ2l0 aHViLmNvbS9vcmFjbGUvdHJ1ZmZsZXJ1YnkvaXNzdWVzLzIwNDQjaXNzdWVjb21tZW50LTY1NDg0 ODMyNC4KClRoYW5rIHlvdSBmb3IgcG9pbnRpbmcgdGhpcyBvdXQgdG8gbWUuIEkgaGFkbid0IGNv bnNpZGVyZWQgYXQgYWxsIG5vbi1DcnVieSBpbXBsZW1lbnRhdGlvbnMgYnV0IHllYWggaWYgdGhl IGhpZ2gtbGV2ZWwgaW50ZXJmYWNlIGlzICJkdW1wIGEgQ1BVIHNhbXBsZSAob3IgYSB3aG9sZSBw cm9maWxlLCBhcyB5b3Ugc3VnZ2VzdGVkKSBpbiBhIHN0YW5kYXJkIGZvcm1hdCIgdGhhdCBjYW4g YmUgaW1wbGVtZW50ZWQgaW4gYW55IHdheSBhcHByb3ByaWF0ZSBmb3IgYSBnaXZlbiBSdWJ5IGlt cGxlbWVudGF0aW9uLgoKLS0tLS0tLS0KCldoYXQgSSdtIGhlYXJpbmcgaXMsIHJhdGhlciB0aGFu IGV4cG9zaW5nIENydWJ5IGludGVybmFscyBpbiBhIHdheSB0aGF0IGNhbiBiZSByZWxpYWJseSBj b25zdW1lZCBieSBleHRlcm5hbCBwcm9maWxpbmcgdG9vbHMsIGl0IHdvdWxkIGJlIGJldHRlciB0 byBpbXBsZW1lbnQgbW9zdCBvZiB0aGUgcHJvZmlsaW5nIGxvZ2ljIGluc2lkZSB0aGUgUnVieSBp bnRlcnByZXRlciBpdHNlbGYuIFRoaXMgd291bGQgYXZvaWQgYWRkaW5nIGEgbmV3LCBzcGVjaWFs LCBicml0dGxlIEFQSSBiYXNlZCBvbiByZWFkaW5nIHByb2Nlc3MgbWVtb3J5LCBwbHVzIGVuc3Vy aW5nIHRoYXQgb3RoZXIgUnViaWVzIGNhbiBwcm92aWRlIHNlbnNpYmxlIGltcGxlbWVudGF0aW9u cyB0b28uIFRoZSBkb3duc2lkZSBpcyBvZiBjb3Vyc2UgdGhhdCBpdCByZXN1bHRzIGluIG1vcmUg Y29kZSBpbi10cmVlIGJ1dCB0aGF0IHNlZW1zIGxpa2UgYSBzZW5zaWJsZSB0cmFkZS1vZmYuCgpT b3VuZHMgbGlrZSBJIHNob3VsZCBnbyBiYWNrIHRvIHRoZSBkcmF3aW5nIGJvYXJkLCBoYXZlIGEg c2hvdCBhdCBpbXBsZW1lbnRpbmcgdGhpcyBraW5kIG9mIGluLXRyZWUgcHJvZmlsZXIsIGFuZCBz ZWUgaWYgSSBjYW4gZG8gc28gd2hpbHN0IG92ZXJjb21pbmcgc29tZSBvZiB0aGUgbm90ZWQgc2hv cnRjb21pbmdzIG9mIHRoZSBzdGFja3Byb2YvcmJzcHkgYXBwcm9hY2hlcyBmcm9tIHRoaXMgdGhy ZWFkLiBJJ2xsIGFsc28gdXNlIHdoYXQncyBhbHJlYWR5IGV4aXN0aW5nIGluIHRydWZmbGVydWJ5 IGFzIGEgYmFzaXMgZm9yIEFQSS4gVGhlbiwgaWYgZG9pbmcgdGhhdCBsb29rcyBwb3NzaWJsZSwg SSBjYW4gb3BlbiBhIG5ldyBpc3N1ZSBwcm9wb3NpbmcgYWRkaW5nIHRoYXQgdG8gQ3J1Ynk/CgpU aGFua3MgYWdhaW4gZXZlcnlvbmUgZm9yIHlvdXIgZmVlZGJhY2sgaGVyZSAtIEknbSBvYnZpb3Vz bHkgbmV3IHRvIHRoZSB3b3JsZCBvZiBoYWNraW5nIG9uIFJ1Ynkgc28gSSBhcHByZWNpYXRlIHlv dSBhbGwgdGFraW5nIHRoZSB0aW1lIHRvIHJlYWQgdGhyb3VnaCB0aGlzIGFuZCBzdWdnZXN0IHNv bWUgYWx0ZXJuYXRlIGFwcHJvYWNoZXMuCgotLS0tLS0tLQoKU21hbGwsIG1vc3RseSBpcnJlbGV2 YW50IHNpZGViYXIgYWJvdXQgYHBlcmZgOgoKPiBUaGUgYXBwcm9hY2ggdXNpbmcgcGVyZiBhcyBp biBDUHl0aG9uIHNlZW1zIG11Y2ggc2ltcGxlciwgYnV0IGlzIGEgbGl0dGxlIGJpdCBoYWNreSBh bmQgbm90IHBvcnRhYmxlIChvbmx5IHdvcmtzIG9uIExpbnV4KS4KCkknbSBub3QgcmVhbGx5IHN1 cmUgdGhpcyBpcyB0cnVlIC0gdGhlIENQeXRob24vcGVyZiBhcHByb2FjaCBwdXNoZXMgYSBmcmFt ZSBvbnRvIHRoZSBuYXRpdmUgc3RhY2sgKGkuZS4gdGhlIG5hdGl2ZSB0cmFtcG9saW5lIGZvciB0 aGF0IFJ1YnkgZnVuY3Rpb24pIG1pcnJvcmluZyBldmVyeSBmcmFtZSBwdXNoZWQgb250byB0aGUg Vk0gc3RhY2suIEl0IHNlZW1zIHRvIG1lIGxpa2UgdGhpcyB3b3VsZCBiZSBzdHJpY3RseSBtb3Jl IG92ZXJoZWFkIHRoYW4ganVzdCBwdXNoaW5nIGEgZmV3IGV4dHJhIGJ5dGVzIG9udG8gdGhlIFZN IHN0YWNrIHdoaWxzdCB3ZSdyZSBhbHJlYWR5IHdyaXRpbmcgdGhlIHJlc3Qgb2YgYHJiX2NvbnRy b2xfZnJhbWVfdGAgdGhlcmUuIEkgY2FuIGNlcnRhaW5seSB0cnkgdGhpcyBvdXQgdGhvdWdoLgoK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpGZWF0dXJlICMxOTExOTog QWRkIGFuIGludGVyZmFjZSBmb3Igb3V0LW9mLXByb2Nlc3MgcHJvZmlsaW5nIHRvb2xzIHRvIGFj Y2VzcyBSdWJ5IGluZm9ybWF0aW9uCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnL2lzc3Vlcy8x OTExOSNjaGFuZ2UtMTAwMTA2CgoqIEF1dGhvcjoga2p0c2FuYWt0c2lkaXMgKEtKIFRzYW5ha3Rz aWRpcykKKiBTdGF0dXM6IE9wZW4KKiBQcmlvcml0eTogTm9ybWFsCi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCldhcm5pbmc6IHRoaXMgaXMgYSB2ZXJ5IGxvbmcgcHJv cG9zYWwgOiggSSBkb24ndCByZWFsbHkga25vdyB3aGF0IHRoZSBtb3N0IHByb2R1Y3RpdmUgd2F5 IHRvIGVuZ2FnZSB3aXRoIHRoZSBSdWJ5IGNvbW11bml0eSBhYm91dCB0aGlzIGlzIC0gaWYgdGhl cmUncyBhIGJldHRlciBwbGFjZSB0byB0YWtlIHRoaXMsIHBsZWFzZSBsZXQgbWUga25vdyEKCkkg YWxzbyB3YW50IHRvIGFja25vd2xlZGdlIEBpdm9hbmpvIGZvciBjb250cmlidXRpbmcgdG8gdGhp cyBwcm9wb3NhbCAtIEkgYm91bmNlZCBtYW55IGlkZWFzIGFib3V0IHByb2ZpbGluZyBvZmYgaGlt IGFuZCB0aGUgaW1wcm92ZWQtYmFja3RyYWNlIHN0dWZmIGlzIGFsbCBiYXNlZCBvbiBoaXMgW2Jh Y2t0cmFjaWVdKGh0dHBzOi8vZ2l0aHViLmNvbS9pdm9hbmpvL2JhY2t0cmFjaWUpIGdlbS4KCiMj IE1vdGl2YXRpb24KCldoZW4gZGVhbGluZyB3aXRoIGxhcmdlIGFuZCBvbGQgUnVieSBhcHBzLCB0 aGVyZSBpcyBvZnRlbiBib3RoIGEgbmVlZCB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiBz b21lIG9wZXJhdGlvbnMsIGFzIHdlbGwgYXMgYSBsYWNrIG9mIHVuZGVyc3RhbmRpbmcgYXMgdG8g aG93LCBwcmVjaXNlbHksIHRoZSBjb2RlIHdvcmtzLCBhbmQgd2hhdCBhc3BlY3Qgb2YgaXQgaXMg YWN0dWFsbHkgc2xvdy4gRnVydGhlcm1vcmUsIHRoZSBwZXJmb3JtYW5jZSBpc3N1ZXMgaW4gcXVl c3Rpb24gb2Z0ZW4gb25seSBhcHBlYXIgaW4gYSBsaXZlLCBwcm9kdWN0aW9uIGVudmlyb25tZW50 LCB3aGVyZSB0aGVyZSBpcyBzb21lIHRyYWZmaWMgcGF0dGVybiBvciB1c2VyIGRhdGEgY2F1c2lu ZyB0aGUgcHJvYmxlbS4gSW4gc2l0dWF0aW9ucyBsaWtlIHRoaXMsIHByb2ZpbGluZyB0b29scyBj YW4gcHJvdmUgaW52YWx1YWJsZSBpbiBoZWxwaW5nIHRvIHVuZGVyc3RhbmQgYXBwbGljYXRpb24g cGVyZm9ybWFuY2UgaW4tc2l0dSBpbiBwcm9kdWN0aW9uLgoKVGhlIHRoaW5ncyB3aGljaCBhbiBl bmdpbmVlciBtaWdodCB1c2UgYSBwcm9maWxlciB0byBtZWFzdXJlIGluY2x1ZGU6CiAgKiBXYWxs IGNsb2NrIHRpbWU7IGhvdyBsb25nIGRvIHBhcnRpY3VsYXIgbWV0aG9kIGNhbGxzIHRha2U/CiAg KiBDUFUgdGltZTsgb2YgdGhlIHRpbWUgYSBtZXRob2QgdGFrZXMsIGhvdyBsb25nIGlzIHNwZW50 IGFjdHVhbGx5IF9ydW5uaW5nXyBvbiB0aGUgQ1BVLCBhbmQgaG93IG11Y2ggaXMgc3BlbnQgYmxv Y2tlZCB3YWl0aW5nIGZvciBlLmcuIGEgbmV0d29yayByZXNwb25zZT8KICAqIEdWTCBjb250ZW50 aW9uOyBpcyBhbiBhcHBsaWNhdGlvbiB1c2luZyBsb3RzIG9mIHRocmVhZHMganVzdCB3YWl0aW5n IGZvciB0aGUgR1ZMIHRvIGJlY29tZSBhdmFpbGFibGU/CiAgKiBHQyB0aW1lOyBpcyBhIHBhcnRp Y3VsYXIgcGllY2Ugb2YgY29kZSBfYWN0dWFsbHlfIHNsb3csIG9yIGlzIGl0cyBzbG93bmVzcyBq dXN0IGEgcmVzdWx0IG9mIF9vdGhlcl8gY29kZSBjYXVzaW5nIHRoZSBHQyB0byBiZSBpbnZva2Vk PwogICogQWxsb2NhdGlvbnM7IGhvdyBtYW55IG9iamVjdHMgaXMgYSBwYXJ0aWN1bGFyIHBpZWNl IG9mIGNvZGUgYWxsb2NhdGluZywgYW5kIHdoYXQgaW1wYWN0IGlzIHRoaXMgaGF2aW5nIG9uIEdD PwogICogSGVhcDsgb2YgdGhlIG9iamVjdHMgYSBwYXJ0aWN1bGFyIHBpZWNlIG9mIGNvZGUgYWxs b2NhdGVkLCBob3cgbWFueSBvZiB0aGVtIGFyZSBzdGlsbCBsaXZlPyBJcyB0aGVyZSBzb21lIGtp bmQgb2YgbGVhaz8KCkdlbmVyYWxseSwgaW4gb3JkZXIgdG8gY29sbGVjdCB0aGlzIGluZm9ybWF0 aW9uIGZyb20gcHJvZHVjdGlvbiBpbiBhIG1pbmltYWxseS1pbXBhY3RmdWwgd2F5LCBhIHNhbXBs aW5nIGFwcHJvYWNoIGlzIHVzZWQuIEEgcHJvZmlsaW5nIHRvb2wgcGVyaW9kaWNhbGx5IHRha2Vz IGEgc25hcHNob3Qgb2YgdGhlIGN1cnJlbnQgY2FsbC1zdGFjayBvZiBhIFJ1YnkgcHJvZ3JhbTsg ZGVwZW5kaW5nIG9uIHdoYXQgaXMgYmVpbmcgbWVhc3VyZWQsIHRoaXMgcGVyaW9kaWNpdHkgbWln aHQgYmUgZS5nLiBzaW1wbHkgZXZlcnkgTiBtcyAoZm9yIHdhbGwtY2xvY2sgcHJvZmlsaW5nKSwg ZXZlcnkgTiBhbGxvY2F0aW9ucyAoZm9yIGFsbG9jYXRpb24gcHJvZmlsaW5nKSwgZXRjLiBUaGVu LCB0aGUgZGF0YSB3aWxsIGdlbmVyYWxseSBiZSBjb21iaW5lZCBhY3Jvc3MgbWFueSBpbnN0YW5j ZXMgb2YgYSBwcm9ncmFtIHRvIGdldCBhbiBhZ2dyZWdhdGUgdmlldyAodGhyb3VnaCBlLmcuIGEg ZmxhbWUgZ3JhcGgpLgoKSW4gYWRkaXRpb24gdG8gdGhpcyBmbGVldC13aWRlIGFnZ3JlZ2F0aW9u LCBpdCdzIHNvbWV0aW1lcyB1c2VmdWwgdG8gcHJvZmlsZSBhIHBhcnRpY3VsYXIgcHJvY2VzcyB3 aGljaCBoYXMgc3VkZGVubHkgc3RhcnRlZCBkaXNwbGF5aW5nIHNvbWUgcGF0aG9sb2d5IG9mIGlu dGVyZXN0LiBGb3IgZXhhbXBsZSwgaWYgeW91IGhhZCBhIHdlYnNlcnZlciBwcm9jZXNzIHRoYXQg aGFkIHN1ZGRlbmx5IGJlY29tZSBzdHVjaywgeW91IG1pZ2h0IHdhbnQgdG8gYXR0YWNoIGEgcHJv ZmlsZXIgdG8gZmluZCBvdXQgX3doeV8uIEluIHNjZW5hcmlvcyBsaWtlIHRoaXMsIGl0J3Mgb2Z0 ZW4gaW1wb3NzaWJsZSB0byBtYWtlIHNvbWUgYWRqdXN0bWVudCB0byB0aGUgcHJvZ3JhbSB0byBl bmFibGUgcHJvZmlsaW5nIGFuZCByZXN0YXJ0IGl0OyB0aGUgYWN0IG9mIHJlc3RhcnRpbmcgaXQg d291bGQgbWFrZSB0aGUgcHJvYmxlbSBnbyBhd2F5IChmb3Igbm93ISkuCgojIyBDdXJyZW50IHN0 YXRlIG9mIHRoZSBhcnQKClRoaXMgcmVwcmVzZW50cyBteSBiZXN0IHVuZGVyc3RhbmRpbmcgb2Yg dGhlIHdheXMgaW4gd2hpY2ggbW9zdCBSdWJ5IHByb2ZpbGluZyB0b29scyB3b3JrIHRvZGF5LiBJ J20gc3VyZSBJJ3ZlIG1pc3NlZCBzb21lIGltcG9ydGFudCBkZXRhaWxzIGFuZCBvdGhlciB0b29s cywgZm9yIHdoaWNoIEknbSBkZWVwbHkgc29ycnkuCgojIyMgU2lnbmFsLWJhc2VkIHByb2ZpbGlu ZwoKU2lnbmFsLWJhc2VkIHByb2ZpbGVycyBjYW4gYmUgdXNlZCB0byBtZWFzdXJlIENQVSBhbmQg d2FsbCBjbG9jayB0aW1lLiBJbiB0aGlzIHNjaGVtZSwgYSBwcm9maWxlciAoaW4gdGhlIGZvcm0g b2YgYW4gZXh0ZW5zaW9uIGdlbSkgc2V0cyB1cCBhIHNpZ25hbCBoYW5kbGVyIGZvciBTSUdQUk9G IGluIEMsIGFuZCB0aGVuIGFycmFuZ2VzIGZvciBTSUdQUk9GIHRvIGJlIGRlbGl2ZXJlZCB0byB0 aGUgcHJvY2VzcyByZXBlYXRlZGx5IGluIHNvbWUga2luZCBvZiBsb29wLiBUaGUgc2lnbmFsIGhh bmRsZXIgdGhlbiBjYXB0dXJlcyBhIHN0YWNrIHRyYWNlIHVzaW5nIHRoZSBgcmJfcHJvZmlsZV9m cmFtZXNgIEFQSSBmcm9tIHRoZSBDIGV4dGVuc2lvbiBhbmQgcmVjb3JkcyB0aGlzIGFzIGEgc2lu Z2xlIHNhbXBsZS4KClRoaXMgaXMgdGhlIG1lY2hhbmlzbSB1c2VkIGZvciBDUFUvd2FsbCBjbG9j ayBwcm9maWxpbmcgaW4gW1N0YWNrcHJvZl0oaHR0cHM6Ly9naXRodWIuY29tL3RtbTEvc3RhY2tw cm9mKSwgdGhlIFtEYXRhZG9nIGNvbnRpbnVvdXMgcHJvZmlsZXJdKGh0dHBzOi8vZ2l0aHViLmNv bS9EYXRhRG9nL2RkLXRyYWNlLXJiKSwgYW5kIEknbSBzdXJlIG90aGVycy4gSXQncyBhbHNvIGEg d2VsbC1rbm93biBtZWNoYW5pc20gdXNlZCBpbiBvdGhlciBub24tUnVieSB0b29scyBsaWtlIFtn cGVyZnRvb2xzXShodHRwczovL2dwZXJmdG9vbHMuZ2l0aHViLmlvL2dwZXJmdG9vbHMvY3B1cHJv ZmlsZS5odG1sKQoKT25lIGJlbmVmaXQgb2YgdGhpcyBtZWNoYW5pc20gaXMgdGhhdCBpdCBzaG91 bGQgYmUgcXVpdGUgZmFzdC4gVHJpZ2dlcmluZyB0aGUgc2lnbmFsIGNhdXNlcyBhIGNvbnRleHQg c3dpdGNoIGludG8gdGhlIGtlcm5lbCAmIGJhY2sgaW50byB0aGUgaGFuZGxlciwgYnV0IGV4ZWN1 dGlvbiBzdGF5cyBpbnNpZGUgdGhlIGN1cnJlbnQgcHJvZ3JhbTsgdGhlcmUncyBubyBuZWVkIGZv ciB0aGUgZXhlY3V0aW9uIHRvIHN3aXRjaCB0byBhbm90aGVyIHByb2dyYW0gKGFuZCBjb25zZXF1 ZW50bHkgY2hhbmdlIGFkZHJlc3Mgc3BhY2UpLgoKVGhlIGRvd25zaWRlIG9mIHRoaXMgYXBwcm9h Y2ggaXMgdGhhdCBpdCByZXF1aXJlcyBzb21lIGxldmVsIG9mIGNvb3BlcmF0aW9uIGZyb20gdGhl IHByb2dyYW0gYmVpbmcgcHJvZmlsZWQuIFNvbWV0aGluZyBpbnNpZGUgdGhlIHByb2Nlc3MgbXVz dCBpbnN0YWxsIHRoZSBTSUdQUk9GIGhhbmRsZXI7IGlmIHlvdSBoYXZlIHNvbWUgZXhpc3Rpbmcs IHJ1bm5pbmcgUnVieSBwcm9jZXNzIGZvciB3aGljaCBhIHByb2ZpbGVyIGlzIG5vdCBsb2FkZWQs IHlvdSBjYW5ub3QgYmVnaW4gcHJvZmlsaW5nIGl0IHdpdGhvdXQgcmVzdGFydGluZyBpdCAoYW5k IHVzaW5nIHNvbWUgbWVjaGFuaXNtIGxpa2UgYSBgLXJteV9wcm9maWxlci9hdXRvbG9hZGAgZmxh ZykuCgpBbm90aGVyIHByb2JsZW0gd2l0aCB0aGlzIGFwcHJvYWNoIGlzIHRoZSBlZmZlY3QgdGhl c2UgU0lHUFJPRiBzaWduYWxzIGhhdmUgb24gdGhlIGFwcGxpY2F0aW9uLiBOb3JtYWxseSwgdGhl IHByb2ZpbGVyIGluc3RhbGxzIHRoZSBzaWduYWwgaGFuZGxlciB3aXRoIHRoZSBTQV9SRVNUQVJU IGZsYWc7IHRoaXMgX3Nob3VsZF8gbWVhbiB0aGF0IGFueSBpbi1wcm9ncmVzcyBzeXN0ZW0gY2Fs bCB0aGUgYXBwbGljYXRpb24gaXMgZG9pbmcgd2hlbiB0aGUgU0lHUFJPRiBhcnJpdmVzIGdldHMg dHJhbnNwYXJlbnRseSByZXN0YXJ0ZWQgd2hlbiB0aGUgaGFuZGxlciBmaW5pc2hlcyBjb2xsZWN0 aW5nIGl0cyBzYW1wbGUuIEhvd2V2ZXIsIG9uIExpbnV4IGF0IGxlYXN0LCB0aGVyZSBhcmUgc29t ZSBzeXN0ZW0gY2FsbHMgd2hpY2ggYXJlIF9OT1RfIHJlc3RhcnRlZCB3aGVuIFNBX1JFU1RBUlQg aGFwcGVucyAtIG5vdGFibHkgc29tZSBuZXR3b3JrIHJlbGF0ZWQgb25lcyBsaWtlIHBvbGwsIGVw b2xsLCBhbmQgc2VuZC9yZWN2IHdoZW4gYSBzb2NrZXQgdGltZW91dCBpcyBzZXQuIFRoZXNlIHN5 c3RlbSBjYWxscyB3aWxsIGluc3RlYWQgZmFpbCB3aXRoIEVJTlRSOyB3ZWxsIGJlaGF2ZWQgcHJv Z3JhbXMgYW5kIGxpYnJhcmllcyBfU0hPVUxEXyByZXRyeSB0aGlzLgoKU2FkbHksIGhvd2V2ZXIs IHRoZSByZXBlYXRlZCBkZWxpdmVyeSBvZiBTSUdQUk9GIHRlbnMgb3IgaHVuZHJlZHMgb2YgdGlt ZXMgcGVyIHNlY29uZCBkb2VzIGhhdmUgYSB3YXkgb2Ygc2hha2luZyBvdXQgY29ybmVyLWNhc2Vz IGluIGxpYnJhcmllcyB3aGVyZSB0aGlzIGlzbid0IGJlaW5nIGRvbmUgcHJvcGVybHkuIEZvciBl eGFtcGxlLCBJIGhhdmUgcGVyc29uYWxseSBkaXNjb3ZlcmVkIHRoZSBoYXJkIHdheSB0aGF0IGxp Ym15c3FsY2xpZW50IHZlcnNpb24gNS43IGRvZXMgdGhpcyB3cm9uZyBpbiBvbmUgcGxhY2UsIHNv IGVuYWJsaW5nIGEgU0lHUFJPRi1iYXNlZCBwcm9maWxlciBjYW4gY2F1c2UgbGlibXlzcWxjbGll bnQgdG8gZXJyb25lb3VzbHkgdGhpbmsgdGhhdCBkYXRhYmFzZSBjb25uZWN0aW9ucyB3ZXJlIGNs b3NlZC4gVGhpcyBpcyB1bmRvdWJ0ZWRseSBhIGJ1ZyBpbiBsaWJteXNxbGNsaWVudCAod2hpY2gs IGJ5IHRoZSB3YXksIHNlZW1zIHRvIGJlIGZpeGVkIGluIHZlcnNpb24gOCksIHRoYXQgX2NvdWxk XyBiZSB0cmlnZ2VyZWQgYnkgYW55IG90aGVyIHNpZ25hbC4gVGhlcmUncyBubyBkZW55aW5nIHRo b3VnaCB0aGF0IFNJR1BST0YtYmFzZWQgcHJvZmlsaW5nIGlzIGEgcmVhbCB0b3J0dXJlLXRlc3Qg Zm9yIEVJTlRSIGhhbmRsaW5nLCBhbmQgdGhlcmUgdW5kb3VidGVkbHkgX2FyZV8gYnVnZ3kgbGli cmFyaWVzIG91dCB0aGVyZSBpbiB0aGUgd2lsZCB0aGF0IHBlb3BsZSBhcmUgdXNpbmcgaW4gdGhl aXIgYXBwbGljYXRpb25zLiBJdCB3b3VsZCBiZSBuaWNlIGlmIFJ1YnkgcHJvZmlsZXJzIGNvdWxk IHdvcmsgYXJvdW5kIHRoaXMgcHJvYmxlbS4KCiMjIyBSVUJZX0lOVEVSTkFMX0VWRU5UX05FV09C SiBwcm9maWxpbmcKCkNvbGxlY3Rpb24gb2Ygc3RhY2tzIGZyb20gU0lHUFJPRiB3b3JrcyBmb3Ig Q1BVL3dhbGwgdGltZSBwcm9maWxpbmcsIGJ1dCBhIGRpZmZlcmVudCBhcHByb2FjaCBpcyBuZWVk ZWQgZm9yIGluLXByb2Nlc3MgcHJvZmlsZXJzIHRvIGNvbGxlY3QgYWxsb2NhdGlvbiBwcm9maWxl cy4gVGhpcyBpcyBub3JtYWxseSBkb25lIGJ5IHJlZ2lzdGVyaW5nIGEgdHJhY2Vwb2ludCBoYW5k bGVyIGZvciBSVUJZX0lOVEVSTkFMX0VWRU5UX05FV09CSiBpbiB0aGUgcHJvZmlsZXIgZXh0ZW5z aW9uIGdlbTsgdGhpcyBpcyBjYWxsZWQgZXZlcnkgdGltZSBhIFJ1Ynkgb2JqZWN0IGlzIGFsbG9j YXRlZC4gRnJvbSB0aGlzIGhhbmRsZXIsIHRoZSBwcm9maWxlciBjYW4gdXNlIGByYl9wcm9maWxl X2ZyYW1lc2AgYWdhaW4gdG8gY29sbGVjdCBhIFJ1YnkgYmFja3RyYWNlIG9mIHRoZSBjb2RlIHJl c3BvbnNpYmxlIGZvciBhbGxvY2F0aW5nIHRoaXMgb2JqZWN0LgoKIyMjIFB0cmFjZS1iYXNlZCBw cm9maWxpbmcKCkFub3RoZXIgYXBwcm9hY2ggdGhhdCBoYXMgYmVlbiB1c2VkIGlzIHRvIGNvbnRy b2wgdGhlIFJ1YnkgcHJvZ3JhbSB0byBiZSBwcm9maWxlZCB3aXRoIGFub3RoZXIsIHNlcGFyYXRl IHByb2Nlc3MsIHVzaW5nIGFuIGFwcHJvcHJpYXRlIHBsYXRmb3JtIEFQSSAoZS5nLiBwdHJhY2Ug b24gTGludXgpLiBQZXJpb2RpY2FsbHksIHRoZSBwcm9maWxlciBwcm9jZXNzIGNhbiB1c2UgcHRy YWNlIHRvIHN1c3BlbmQgZXhlY3V0aW9uIG9mIHRoZSB0YXJnZXQgUnVieSBwcm9ncmFtLCBhbmQg Y29sbGVjdCBhIHN0YWNrIHRyYWNlIG9mIGl0LiBUaGlzIGlzIHRoZSBhcHByb2FjaCB1c2VkIGJ5 IHRoZSBbcmJzcHldKGh0dHBzOi8vZ2l0aHViLmNvbS9yYnNweS9yYnNweSkgcHJvZmlsZXIsIHdo aWNoIGlzIGl0c2VsZiBhY3R1YWxseSBhIFJ1c3QgcHJvZ3JhbS4KClRoZSBtYWluIHN0cmVuZ3Ro IG9mIHRoaXMgYXBwcm9hY2ggaXMgdGhhdCBpdCBhbGxvd3Mgb25lIHRvIGJlZ2luIHRyYWNpbmcg YSBSdWJ5IHByb2dyYW0gd2hpY2ggaXMgYWxyZWFkeSBydW5uaW5nLCBfd2l0aG91dCByZXN0YXJ0 aW5nIGl0XzsgcmJzcHkgY2FuIHB0cmFjZS1hdHRhY2ggdG8gYSBydW5uaW5nIHByb2Nlc3MgYW5k IGJlZ2luIGNvbGxlY3Rpbmcgc2FtcGxlcyBzdHJhaWdodCBhd2F5LiBUaGlzIGFsbG93cyBvbmUg dG8gZ2FpbiBpbnNpZ2h0IGludG8gaW50ZXJtaXR0ZW50IHByb2JsZW1zIG9uY2UgdGhleSBzdGFy dCBoYXBwZW5pbmchCgpVbmZvcnR1bmF0ZWx5LCAiY29sbGVjdCBhIHN0YWNrIHRyYWNlIiBpcyBx dWl0ZSB0cmlja3kgdG8gZG8gZnJvbSBvdXRzaWRlIHRoZSBwcm9jZXNzOyB3ZSB3YW50IHRoZSBf UnVieV8gbGV2ZWwgc3RhY2sgdHJhY2UsIG5vdCAob3IgYXQgbGVhc3QsIGFzIHdlbGwgYXMpIHRo ZSBtYWNoaW5lIHN0YWNrIHRyYWNlICh3aGljaCBjb3VsZCBiZSBjb2xsZWN0ZWQgZS5nLiB2aWEg RFdBUkYgdW53aW5kaW5nIG9yIGZyYW1lLXBvaW50ZXIgY2hhc2luZykuIFRvIGdldCB0aGUgUnVi eSBzdGFjayB0cmFjZSByZXF1aXJlcyBydW1tYWdpbmcgYXJvdW5kIGluc2lkZSB0aGUgbWVtb3J5 IG9mIHRoZSB0YXJnZXQgcHJvY2VzcyAoZS5nLiB3aXRoIGAvcHJvYy97cGlkfS9tZW1gIG9uIExp bnV4KSwgdG8gZmluZCB0aGUgcmVsZXZhbnQgYHJiX2NvbnRyb2xfZnJhbWVfdGAgc3RydWN0dXJl cy4gUmJzcHkgY29udGFpbnMgYSBodWdlIGxpc3Qgb2Ygc3RydWN0dXJlIGRlZmluaXRpb25zIGZv ciB2YXJpb3VzIHZlcnNpb25zIG9mIFJ1YnkgdG8gbWFrZSB0aGlzIHBvc3NpYmxlLCBidXQgYW55 IHRpbWUgYSBuZXcgdmVyc2lvbiBvZiBSdWJ5IGlzIHJlbGVhc2VkLCBhIG5ldyB2ZXJzaW9uIG9m IFJic3B5IG11c3QgYWxzbyBiZSByZWxlYXNlZCB0byBhY2NvdW50IGZvciBhbnkgY2hhbmdlcyB0 byB0aGUgbGF5b3V0IG9mIFJ1YnkncyBpbnRlcm5hbCBzdHJ1Y3R1cmVzLgoKSW4gdGhlb3J5LCB0 aGUgcHRyYWNlIGFwcHJvYWNoIGlzIGFsc28gd29yc2UgZnJvbSBhIHBlcmZvcm1hbmNlIHBlcnNw ZWN0aXZlOyB0byBjb2xsZWN0IGEgc2FtcGxlLCBleGVjdXRpb24gbXVzdCBzd2l0Y2ggZnJvbSB0 aGUgcHJvY2VzcyB0byBiZSBwcm9maWxlZCB0byB0aGUgcHJvZmlsZXIgcHJvY2Vzcywgd2hpY2gg cmVxdWlyZXMgc3dpdGNoaW5nIG1lbW9yeSBtYXBwaW5ncy4gUmVjYWxsIHRoYXQgd2l0aCBpbi1w cm9jZXNzIFNJR1BST0YgcHJvZmlsaW5nLCB0aGUgcHJvZmlsZXIgd29yayBpcyBkb25lIGluIHRo ZSBzYW1lIHByb2Nlc3Mgd2l0aCB0aGUgc2FtZSBtZW1vcnkgbWFwcGluZ3MuIEhvd2V2ZXIsIHRo aXMgY29uY2VybiBzZWVtcyB0byBiZSBsYXJnZWx5IHRoZW9yZXRpY2FsOyBJIGhhdmUgbm90IF9h Y3R1YWxseV8gc2VlbiBvciBoZWFyZCBvZiBhbnlib2R5IHNheWluZyB0aGF0IHRoaXMgaXMgbWFr aW5nIHJic3B5IHRvbyBzbG93IGZvciB0aGVpciB1c2VjYXNlLgoKRmluYWxseSwgYWx0aG91Z2gg cHRyYWNlLWJhc2VkIHByb2ZpbGluZyBnZXRzIHVzIF9jbG9zZV8gdG8gdGhlIGlkZWFsIG9mIG5v dCByZXF1aXJpbmcgYW55IGZvcmVzaWdodCB0byBiZWdpbiBwcm9maWxpbmcgYSBydW5uaW5nIHBy b2dyYW0sIHRoZXJlIGlzIF9vbmVfIHNtYWxsIHJlcXVpcmVtZW50IHdoaWNoIG11c3QgYmUgc2F0 aXNmaWVkIGFoZWFkIG9mIHRpbWUgLSB0aGUgUnVieSBpbnRlcnByZXRlciBuZWVkcyB0byBoYXZl IG5vdCBoYWQgaXRzIHN5bWJvbHMgc3RyaXBwZWQgc28gdGhhdCByYnNweSBjYW4gZmluZCB0aGUg YHJ1YnlfY3VycmVudF92bV9wdHJgIGdsb2JhbC4gSSBiZWxpZXZlIHJic3B5IG1ha2VzIGFuIF9h dHRlbXB0XyB0byBmaW5kIGl0IHdpdGhvdXQgdGhlIHN5bWJvbCBidXQgaXQgZG9lcyBub3QgY2xh aW0gdG8gYmUgcmVsaWFibGUuCgojIyMgQWxsb2NhdGlvbiBzYW1wbGluZyBmcm9tIHB0cmFjZS1i YXNlZCBwcm9maWxpbmcKClRvIHBlcmZvcm0gYWxsb2NhdGlvbiBwcm9maWxpbmcgZnJvbSBvdXRz aWRlIHRoZSBSdWJ5IHByb2Nlc3MsIHdlIHdvdWxkIG5lZWQgc29tZSBhbmFsb2d1ZSB0byBSVUJZ X0lOVEVSTkFMX0VWRU5UX05FV09CSi4gSSBiZWxpZXZlIHRoaXMgX2NvdWxkXyBiZSBhY2hpZXZl ZCBieSBjb21waWxpbmcgUnVieSB3aXRoIGR0cmFjZS9zeXN0ZW10YXAvVVNEVCBwcm9iZXMgZW5h YmxlZCwgYW5kIGhhdmluZyB0aGUgcHJvZmlsZXIgcHJvY2VzcyB3cml0ZSBhIHRyYXAgaW5zdHJ1 Y3Rpb24gb3ZlciB0aGUgdG9wIG9mIHRoZSBwcm9iZSAod2hpY2ggaXMgaG93IGUuZy4gZGVidWdn ZXJzIHdvcmspLiBJIGRvbid0IGJlbGlldmUgcmJzcHkgb3IgYW55IG90aGVyIHByb2ZpbGVyIHRo YXQgSSBmb3VuZCBhY3R1YWxseSBkb2VzIHRoaXMgdGhvdWdoLgoKIyMjIFBlcmYtYmFzZWQgcHJv ZmlsaW5nCgpMaW51eCBoYXMgYSBkZWRpY2F0ZWQgc3Vic3lzdGVtIGNhbGxlZCBwZXJmIHdoaWNo IChhbW9uZ3N0IG1hbnkgb3RoZXIgdGhpbmdzKSBjYW4gZG8gbG93LW92ZXJoZWFkIHByb2ZpbGlu ZyBvZiBhcmJpdHJhcnkgcHJvY2Vzc2VzLiBUaGUgc2FtcGxpbmcgaXMgZG9uZSBpbnNpZGUgdGhl IGtlcm5lbCwgc28gbGlrZSBTSUdQUk9GIChhbmQgdW5saWtlIHB0cmFjZSkgY29sbGVjdGluZyBh IHNhbXBsZSByZXF1aXJlcyBubyBzd2l0Y2ggb2YgYWRkcmVzcyBzcGFjZS4gSG93ZXZlciwgb2Yg Y291cnNlLCBwZXJmIG9ubHkgdW5kZXJzdGFuZHMgdGhlIG1hY2hpbmUgc3RhY2ssIG5vdCB0aGUg UnVieSBzdGFjaywgc28gdXNpbmcgcGVyZiB0byBwcm9maWxlIGEgUnVieSBwcm9ncmFtIGlzIG5v dCBjdXJyZW50bHkgZXh0cmFvcmRpbmFyaWx5IHVzZWZ1bCAodW5sZXNzIHlvdSdyZSBwcm9maWxp bmcgdGhlIFJ1YnkgVk0gaXRzZWxmIG9yIGEgQyBleHRlbnNpb24pLgoKUGVyZiBhY3R1YWxseSBo YXMgYSBbbWVjaGFuaXNtXShodHRwczovL3d3dy5icmVuZGFuZ3JlZ2cuY29tL3BlcmYuaHRtbCNK SVRfU3ltYm9scykgdG8gaGVscCBnaXZlIG1lYW5pbmdmdWwgc3RhY2sgdHJhY2VzIGZvciBsYW5n dWFnZXMgd2l0aCBKSVRzOyB0aGUgYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQgdG8gd3JpdGUgb3V0 IGEgbWFwcGluZyBvZiBmdW5jdGlvbiBhZGRyZXNzIC0+IG5hbWUgdG8gYSBmaWxlIGAvdG1wL3Bl cmYtJFBJRC5tYXBgOyBwZXJmIHdpbGwgdXNlIHRoaXMgZmlsZSB0byBzeW1ib2xpY2F0ZSBzdGFj a3MuIFB5dGhvbiBbcmVjZW50bHkgYWRkZWRdKGh0dHBzOi8vZG9jcy5weXRob24ub3JnL2Rldi9o b3d0by9wZXJmX3Byb2ZpbGluZy5odG1sKSBzdXBwb3J0IGZvciB0aGlzIG1lY2hhbmlzbSBhcyB3 ZWxsOyBob3dldmVyLCBiZWNhdXNlIENQeXRob24gZG9lcyBub3QgaGF2ZSBhIEpJVCwgaXQgd29y a3MgYnkgZ2VuZXJhdGluZyBhIG5hdGl2ZSB0cmFtcG9saW5lIGZvciBlYWNoIGZ1bmN0aW9uICh3 aXRoIGEgdW5pcXVlIGFkZHJlc3MpLCBhbmQgY2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgdHJhbXBv bGluZXMgZHVyaW5nIFB5dGhvbiBtZXRob2QgZXhlY3V0aW9uIHRvIG1ha2UgdGhlIG1hY2hpbmUg c3RhY2sgbWlycm9yIHRoZSBWTSBvbmUuIFRoaXMgbWVjaGFuaXNtIGlzIG5vdCBpbXBsZW1lbnRl ZCBpbiBDUnVieSBjdXJyZW50bHkuCgojIyBUaGUgcHJvcG9zYWw6IHByb3ZpZGUgYW4gImV4dGVy bmFsIGRlYnVnIHNlY3Rpb24iCgpXZSBpZGVhbGx5IHdvdWxkIGxpa2UgdG8gaGF2ZSBhIHdheSB0 byBwcm9maWxlIFJ1YnkgYXBwbGljYXRpb25zIHdoaWNoIGNvbWJpbmVzIHRoZSBiZW5lZml0cyBv ZiB0aGUgU0lHUFJPRiBtZWNoYW5pc20gKGVhc3ksIGRvY3VtZW50ZWQgYWNjZXNzIHRvIFJ1Ynkg Y2FsbCBzdGFja3MpLCB0aGUgcHRyYWNlIG1lY2hhbmlzbSAodGhlIGFiaWxpdHkgdG8gYXR0YWNo IHRvIHJ1bm5pbmcgcHJvY2Vzc2VzIHdpdGggYSBtaW5pbXVtIG9mIGZvcmVzaWdodCByZXF1aXJl ZCksIGFuZCB0aGUgcGVyZiBtZWNoYW5pc20gKGxvdyBvdmVyaGVhZCBzYW1wbGUgY29sbGVjdGlv biB3aXRob3V0IHJlcXVpcmluZyBhIHByb2Nlc3MgYWRkcmVzcyBzcGFjZSBzd2l0Y2gpLiBUaGlz IHByb3Bvc2FsIGFpbXMgdG8gcHJvdmlkZSBleGFjdGx5IHRoYXQuCgpUaGUgUnVieSBpbnRlcnBy ZXRlciB3b3VsZCBoYXZlIGEgbmV3IGdsb2JhbCB2YXJpYWJsZSBgcmJfZGVidWdfZXh0X3NlY3Rp b25gLCB3aGljaCBpcyBkZWZpbmVkIHdpdGggYF9fYXR0cmlidXRlX18oKHNlY3Rpb24oInJiX2Rl YnVnX2V4dCIpKSlgIHNvIHRoYXQgaXQgYXBwZWFyZWQgaW4gYSBzZXBhcmF0ZSBzZWN0aW9uIGlu IHRoZSBFTEYgYmluYXJ5LiBUaGlzIHZhcmlhYmxlIHdvdWxkIGJlIGNvbnN0YW50bHkga2VwdCBw b3B1bGF0ZWQgd2l0aCB1cC10by1kYXRlIGluZm9ybWF0aW9uIGFib3V0IGFsbCB0aGUgY2FsbC1z dGFja3Mgb2YgYWxsIHRocmVhZHMvZmliZXJzIGluIHRoZSBwcm9ncmFtLiBBbiBleHRlcm5hbCBk ZWJ1Z2dpbmcgdG9vbCBjb3VsZCBlYXNpbHkgKCJlYXNpbHkiKSBwdHJhY2UgYSBydW5uaW5nIFJ1 YnkgcHJvZ3JhbSwgYW5kIGZpbmQgdGhlIGFkZHJlc3Mgb2YgdGhpcyBzZWN0aW9uIGluIGl0cyBy dW5uaW5nIG1lbW9yeSwgZXZlbiBpZiBzeW1ib2xzIGhhdmUgYmVlbiBzdHJpcHBlZC4gT25jZSBh biBleHRlcm5hbCB0b29sIGhhcyBmb3VuZCB0aGlzIHZhcmlhYmxlLCBpdCBuZWVkcyB0byBtYWtl IHNlbnNlIG9mIGl0LiBSdWJ5IHdvdWxkIHByb3ZpZGUgYSBuZXcgaGVhZGVyIGZpbGUgYGluY2x1 ZGUvcnVieS9kZWJ1Z19leHRlcm5hbC5oYCB3aGljaCBkZXNjcmliZWQgdGhlIGxheW91dCBvZiB0 aGlzIHN0cnVjdHVyZS4KClRoZSBzaW1wbGUsIHNsb3cgdmVyc2lvbiBvZiBhbiBleHRlcm5hbCBw cm9maWxlciB1c2luZyB0aGlzIGludGVyZmFjZSB3b3VsZCBiZSBhIGxvdCBsaWtlIHJic3B5OyBp dCB3b3VsZCB1c2UgcHRyYWNlIHRvIHBlcmlvZGljYWxseSBzdG9wIHRoZSBSdWJ5IHByb2Nlc3Ms IGFuZCB0aGVuIHVzZSB0aGUgY29udGVudHMgb2YgYHJiX2RlYnVnX2V4dF9zZWN0aW9uYCB0byBj b2xsZWN0IFJ1YnkgYmFja3RyYWNlcyBmb3IgQ1BVL3dhbGwtY2xvY2sgcHJvZmlsaW5nLiBUaGUg YmVuZWZpdCwgb2YgY291cnNlLCBpcyB0aGF0IGl0J3MgdXNpbmcgYSBkb2N1bWVudGVkIGludGVy ZmFjZSB0aGF0IGNhbiBiZSB2ZXJzaW9uZWQgYW5kIGtlcHQgYmFja3dhcmRzIGNvbXBhdGlibGUs IHJhdGhlciB0aGFuIGhhdmluZyB0byBjb25zdGFudGx5IGNoYXNlIGJyZWFraW5nIGNoYW5nZXMg dG8gaW50ZXJuYWwgUnVieSBWTSBzdHJ1Y3R1cmVzLgoKSG93ZXZlciwgdGhlIGJlbmVmaXQgb2Yg dGhpcyBhcHByb2FjaCBpcyB0aGF0IHdlIGNhbiBkbyBiZXR0ZXIhIFRoZSBwZXJmIHN1YnN5c3Rl bSBvbiBMaW51eCBpcyBhYmxlIHRvIGludm9rZSBhbiBlQlBGIHByb2dyYW0gdG8gYWN0dWFsbHkg Y29sbGVjdCBzYW1wbGVzICh1c2luZywgSSB0aGluaywgYFBFUkZfRVZFTlRfSU9DX1NFVF9CUEZg IGJ1dCBJJ20gbm90IDEwMCUgc3VyZSkgYW5kIHdyaXRlIHRoZW0gdG8gYSByaW5nLWJ1ZmZlci4g VGhlIGVCUEYgcHJvZ3JhbSBjYW4gYWN0dWFsbHkgdXNlIHRoZSBgZGVidWdfZXh0ZXJuYWwuaGAg aGVhZGVyIGZpbGUgdG8gZmlndXJlIG91dCB0aGUgY3VycmVudCBSdWJ5IHN0YWNrIHRyYWNlKHMp IGl0c2VsZiwgd2l0aG91dCBuZWVkaW5nIHRvIHN3aXRjaCBiYWNrIGludG8gdGhlIHByb2ZpbGVy IGFkZHJlc3Mgc3BhY2UhIFRoZSBwcm9maWxlciBwcm9ncmFtIG9ubHkgbmVlZHMgdG8gcnVuIHBl cmlvZGljYWxseSB0byBlbXB0eSB0aGUgcmluZy1idWZmZXIgYW5kIHdyaXRlIHNhbXBsZXMgdG8g ZGlzay4KCiMjIFRoZSByaWRlcjogYmV0dGVyIHN0YWNrIHRyYWNlIG91dHB1dAoKU28gZmFyLCB3 ZSd2ZSBtZW50aW9uZWQgdGhhdCB0aGUgcHJvZmlsZXIgcHJvY2VzcyB3aWxsIGV4dHJhY3QgYSBz dGFjayB0cmFjZSBvdXQgb2YgYHJiX2RlYnVnX2V4dF9zZWN0aW9uYC4gTGV0J3MgdHVybiBvdXIg YXR0ZW50aW9uIHRvIHdoYXQgdGhhdCBzdGFjayB0cmFjZSB3b3VsZCBhY3R1YWxseSBfYmVfLgoK VHJhZGl0aW9uYWwgcHJvZmlsaW5nIHRvb2xzIGZvciBub24tZHluYW1pYyBsYW5ndWFnZXMgdXN1 YWxseSB3b3JrIGJ5IGNhcHR1cmluZyBtZW1vcnkgYWRkcmVzc2VzIGZvciBmdW5jdGlvbnMsIGFu ZCB0aGVuIGRlZmVycmluZyB0aGUgdHJhbnNsYXRpb24gb2YgYWRkcmVzc2VzIC0+IG5hbWVzIHVu dGlsIGxhdGVyIChwb3NzaWJseSBldmVuIG9uIGEgZGlmZmVyZW50IG1hY2hpbmUpLiBSdWJ5LCBo b3dldmVyLCBpcyBJIGJlbGlldmUgbXVjaCB0b28gZHluYW1pYyBmb3IgYSBzaW1pbGFyIGFwcHJv YWNoLiBNZXRob2RzIGFuZCBjbGFzc2VzIGNhbiBiZSBkZWZpbmVkIGFuZCB1bmRlZmluZWQgZHlu YW1pY2FsbHkgb3ZlciB0aGUgbGlmZXRpbWUgb2YgdGhlIHByb2dyYW0uIEluc3RydWN0aW9uIHNl cXVlbmNlcyBjYW4gYmUgY3JlYXRlZCBhbmQgR0MnZCBhcyBhIHJlc3VsdCBvZiB1c2luZyB0aGlu Z3MgbGlrZSBgZXZhbGAuIEEgbWVtb3J5IGFkZHJlc3Mgb2NjdXBpZWQgYnkgb25lIGNsYXNzIG9y IGlzZXEgbWlnaHQgbGF0ZXIgYmUgb2NjdXBpZWQgYnkgYSBkaWZmZXJlbnQgb25lIC0gZXNwZWNp YWxseSBiZWNhdXNlIHdlIG5vdyBoYXZlIEdDIGNvbXBhY3Rpb24uCgpUaHVzLCBJIHRoaW5rIHRo ZSBvbmx5IHNlbnNpYmxlIHRoaW5nIHRvIGRvIGlzIHRvIHN0b3JlIHN0cmluZ3MgaW4gdGhlIGBy Yl9kZWJ1Z19leHRfc2VjdGlvbmAgc3RydWN0dXJlLiBUaGVzZSBzdHJpbmdzIG5lZWQgdG8gYmUg dmFsaWQsIGVzc2VudGlhbGx5LCB3aGlsc3QgdGhlIGNhbGxlZCBtZXRob2QvaXNlcSBpcyBzdGls bCBvbiB0aGUgc3RhY2sgLSB0aGVyZSdzIG5vIHJlcXVpcmVtZW50IHRvIHJldGFpbiB0aGVtIHVu dGlsIGxhdGVyLiBUaGUgZXh0ZXJuYWwgdG9vbCB3b3VsZCBuZWVkIHRvIGNvcHkgdGhlc2Ugc3Ry aW5ncyBpbnRvIGl0cyBvd24gcHJvY2Vzcy4KCldoYXQgc2hvdWxkIHRob3NlIGFjdHVhbGx5IF9j b250YWluXz8gQSB0cmFkaXRpb25hbCBSdWJ5IGJhY2t0cmFjZSBjb250YWlucyBhIGZpbGUsIGxp bmUgbnVtYmVyLCBhIG1ldGhvZCBuYW1lIChpZiBhdmFpbGFibGUpLCBhbmQgc29tZSBvdGhlciBk ZXRhaWxzIGFib3V0IHRoZSBpc2VxIGlmIHByZXNlbnQgKGUuZy4gd2hldGhlciBpdCdzIGEgYmxv Y2sgb3IgZXZhbCwgd2hldGhlciBpdCdzIDxtYWluPiwgZXRjKS4KCmBgYHJ1YnkKaXJiIzEobWFp bik6MDAzOjA+IGRlZiBmb287IHJhaXNlICJvaCBubyI7IGVuZDsKPT4gOmZvbwppcmIjMShtYWlu KTowMDQ6MD4gZm9vCihpcmIjMSk6MzppbiBgZm9vJzogb2ggbm8gKFJ1bnRpbWVFcnJvcikKCWZy b20gKGlyYiMxKTo0OmluIGA8bWFpbj4nCmBgYAoKSSBkbyBub3QgYmVsaWV2ZSB0aGlzIGlzIHRo ZSBtb3N0IHVzZWZ1bCB3YXkgdG8gcHJlc2VudCB0aGlzIGluZm9ybWF0aW9uIGZyb20gYSBwcm9m aWxpbmcgcGVyc3BlY3RpdmUsIGhvd2V2ZXIuIFdoZW4gZGVhbGluZyB3aXRoIGEgbGFyZ2UgbW9u b2xpdGhpYyBhcHBsaWNhdGlvbiwgcHJvZmlsZXMgd2lsbCBiZSBjb2xsZWN0ZWQgcHJvY2Vzcy13 aWRlIGFuZCBhZ2dyZWdhdGVkIG9uIHNvbWUga2luZCBvZiBjZW50cmFsIGRhc2hib2FyZDsgdGhl cmUgY291bGQgYmUgbWFueSBtZXRob2RzIGNhbGxlZCB0aGUgc2FtZSB0aGluZyAodGhpbmsgYGRl ZiBjcmVhdGVgIGluIGEgUmFpbHMgY29udHJvbGxlciwgZm9yIGV4YW1wbGUpLiBUaGUgZmlsZW5h bWUgY2FuIGhlbHAgZGlzYW1iaWd1YXRlIGluIGNpcmN1bXN0YW5jZXMgbGlrZSB0aGlzLCBidXQg QyBmdW5jdGlvbnMgZG9uJ3QgZXZlbiBfaGF2ZV8gYSBmaWxlbmFtZSwgc28ganVzdCBwcmludCB0 aGUgZmlsZW5hbWUgb2YgdGhlIHRoaW5nIHRoYXQgY2FsbGVkIHRoZW06CgpgYGBydWJ5CmlyYiMx KG1haW4pOjAwNTowPiAxLnRpbWVzIHsgcmFpc2UgIm9oIG5vIiB9CihpcmIjMSk6NTppbiBgYmxv Y2sgaW4gPG1haW4+Jzogb2ggbm8gKFJ1bnRpbWVFcnJvcikKCWZyb20gKGlyYiMxKTo1OmluIGB0 aW1lcycgIyBJIGRpZCBub3QgZGVmaW5lIEludGVnZXIjdGltZXMgaW4gSVJCIQoJZnJvbSAoaXJi IzEpOjU6aW4gYDxtYWluPicKYGBgCgpBbGwgb2YgdGhpcyBjYW4gYmUgZ2VuZXJhbGx5IGZpZ3Vy ZWQgb3V0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvZGUsIGJ1dCBvZnRlbiB3aGVuIHdlJ3JlIGxvb2tp bmcgYXQgZS5nLiBhIHByb2ZpbGluZyBkYXNoYm9hcmQsIGhhdmluZyB0byBrZWVwIGxvb2tpbmcg YmV0d2VlbiB0aGUgZmxhbWUgZ3JhcGggYW5kIHRoZSBjb2RlIGNhbiBiZSByYXRoZXIgYW5ub3lp bmcuCgpJdCB3b3VsZCBiZSBuaWNlIGlmIGluc3RlYWQsIG91ciBwcm9maWxlcyBjb250YWluZWQg dGhlIG5hbWUgb2YgdGhlIGNsYXNzIG9uIHdoaWNoIGEgbWV0aG9kIGlzIGRlZmluZWQ7IHNvbWV0 aGluZyBsaWtlIGBGb29DbGFzcyN0aGVfbWV0aG9kYC4gUnVieSBoYXMgYSBtZXRob2QgYHJiX3By b2ZpbGVfZnJhbWVfcXVhbGlmaWVkX21ldGhvZF9uYW1lYCB3aGljaCBjYW4gZ2l2ZSB1c2VmdWwg b3V0cHV0IGxpa2UgdGhpcyBpbiBtYW55IGNhc2VzLiBIb3dldmVyLCBpbiBtYW55IGNvbW1vbiBj YXNlcyBsaWtlIGUuZy4gYW5vbnltb3VzIGNsYXNzZXMsIGl0IHdpbGwgcHJlc2VudCB0aGUgbmFt ZSBvZiB0aGUgY2xhc3MgYXMgc29tZXRoaW5nIGxpa2UgIiM8Q2xhc3M6MHgwMDAwMDAwMDAwZGI0 OGUwPiIuIFRoaXMgaXMgd29yc2UgdGhhbiB1c2VsZXNzIGZvciBwcm9maWxpbmc7IHRoYXQgYWRk cmVzcyB3aWxsIGJlIGRpZmZlcmVudCBhbW9uZ3N0IGRpZmZlcmVudCBwcm9jZXNzZXMgYmVpbmcg cHJvZmlsZWQsIHNvIG11bHRpcGxlIHByb2ZpbGVzIGNhbid0IGJlIGFnZ3JlZ2F0ZWQgdG9nZXRo ZXIuIEluIGZhY3QsIHRoYXQgYWRkcmVzcyBpc24ndCBldmVuIGd1YXJhbnRlZWQgdG8gYmUgY29u c3RhbnQgd2l0aGluIHRoZSBzYW1lIHByb2Nlc3MgYW55bW9yZSwgYmVjYXVzZSBvZiBjb21wYWN0 aW9uLgoKSSB3b3VsZCBwcm9wb3NlIHRoYXQgd2UgaGF2ZSBhIG5ldyB3YXkgb2YgbmFtaW5nIG1l dGhvZHMgd2hpY2ggcHJvZHVjZXMgdXNlZnVsIHN0cmluZ3MgaW4gYWxsIGNhc2VzLCB3aXRob3V0 IGFueSBhZGRyZXNzZXMgaW4gdGhlbS4gVGhlIHJ1bGVzIEkgaGF2ZSBjb21lIHVwIHdpdGggc28g ZmFyIGFyZToKCiogYCIjPHJlZmluZW1lbnQgRm9vIG9mIEJhcj4iYCBmb3IgYSByZWZpbmVtZW50 IG1vZHVsZSBhZGRpbmcgbWV0aG9kcyB0bwogIEJhcgoqIGAiIzxpbnN0YW5jZSBvZiBGb28+ImAg Zm9yIGEgcGFydGljdWxhciBpbnN0YW5jZSBvZiBGb28KKiBgIiM8c2luZ2xldG9uIG9mIEZvbz4i YCBmb3IgRm9vJ3Mgc2luZ2xldG9uIGNsYXNzLgoqIGAiIzxhbm9ueW1vdXMgc3ViY2xhc3Mgb2Yg Rm9vPiJgIGZvciBhbiBhbm9ueW1vdXMgc3ViY2xhc3MKKiBUaGUgdXN1YWwgY2xhc3NwYXRoIHN0 cmluZyBvdGhlcndpc2UKCk5vdGUgdGhhdCBuZXN0aW5nIGlzIE9LIHRvbyAtIHNvIGEgbWV0aG9k IGRlZmluZWQgb24gdGhlIHNpbmdsZXRvbiBjbGFzcyBvZiBhIHBhcnRpY3VsYXIgRm9vIG9iamVj dCB3b3VsZCBiZSAiIzxzaW5nbGV0b24gb2YgIzxpbnN0YW5jZSBvZiBGb28+PiN0aGVfbWV0aG9k Ii4KClNvLCBteSBwcm9wb3NhbCBpcyB0aGF0IHRoaXMgaXMgdGhlIGZvcm1hdCBvZiB0aGUgbWV0 aG9kIG5hbWUgdGhhdCBhcHBlYXJzIGluIHRoZSBgcmJfZGVidWdfZXh0X3NlY3Rpb25gIHN0cnVj dHVyZS4KCiMjIFdoZXJlIGhhdmUgSSBnb3QgdG8gc28gZmFyPwoKT0ssIHNvIEkgaGF2ZSBhIGRy YWZ0IFBSIHVwIHdoaWNoIHNob3VsZCBob3BlZnVsbHkgaGVscCBtYWtlIHNvbWUgb2YgdGhpcyBj bGVhcmVyOiBodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcwNi4gSXQgaXMgb2Yg Y291cnNlIGluIG5vIHdheSBldmVuIGNsb3NlIHRvIG1lcmdlIHJlYWR5LCBidXQgSSdtIGhvcGlu ZyBpdCBoZWxwcyBpbGx1c3RyYXRlIHNvbWUgb2YgbXkgaWRlYXMgaGVyZToKCiogW1RoZSBkZWJ1 Z19leHRlcm5hbC5oIGZpbGVdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NzA2 L2ZpbGVzI2RpZmYtNjYxZjkyNjkwMDllYzgyNzE4NWVhZmE1ZWUwNWJkNzI1MWJiZTBhNTVkZWMz NjFjOWM1YzI1YmIyYTQzYTA5OCkgdGhhdCBkZWZpbmVzIHRoZSBleHRlcm5hbGx5LXZpc2libGUg c3RydWN0dXJlcwoqIFdoZXJlIHRocmVhZHMgYXJlIFthZGRlZF0oaHR0cHM6Ly9naXRodWIuY29t L3J1YnkvcnVieS9wdWxsLzY3MDYvZmlsZXMjZGlmZi1hYTJhZGRiOTI5NzQ5YTRhMDMzMGI5M2Nl ZWNlYzViYzU0ODU3NTFhMzYyNTI0ZjVjYjM3YmYyMmRmZjE5MzZlUjY1KSBhbmQgW3JlbW92ZWRd KGh0dHBzOi8vZ2l0aHViLmNvbS9ydWJ5L3J1YnkvcHVsbC82NzA2L2ZpbGVzI2RpZmYtYWEyYWRk YjkyOTc0OWE0YTAzMzBiOTNjZWVjZWM1YmM1NDg1NzUxYTM2MjUyNGY1Y2IzN2JmMjJkZmYxOTM2 ZVIxMTApIGZyb20gdGhlIGByYl9kZWJ1Z19leHRfc2VjdGlvbmAgc3RydWN0dXJlCiogV2hlcmUg ZnJhbWVzIGFyZSBbcHVzaGVkXShodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcw Ni9maWxlcyNkaWZmLWY4YzE3NDM0N2U2ZWE4ODg5YjUwMzYwNjRhMWZmNGZlNWU3YzUzYTgyMWJl ZmE5YmRjNWNjYmYxNzgwMGE2NDlSNDA3KSBhbmQgW3BvcHBlZF0oaHR0cHM6Ly9naXRodWIuY29t L3J1YnkvcnVieS9wdWxsLzY3MDYvZmlsZXMjZGlmZi1mOGMxNzQzNDdlNmVhODg4OWI1MDM2MDY0 YTFmZjRmZTVlN2M1M2E4MjFiZWZhOWJkYzVjY2JmMTc4MDBhNjQ5UjQzNykgZnJvbSB0aGUgYHJi X2RlYnVnX2V4dF9zZWN0aW9uYCBzdHJ1Y3R1cmUKKiBUaGUgW3Rlc3RzXShodHRwczovL2dpdGh1 Yi5jb20vcnVieS9ydWJ5L3B1bGwvNjcwNi9maWxlcyNkaWZmLTg5YTY3YTRkNWIzNDhhYzZmOWNh YmU1NmQyODQ3NTQ1YmU2NzgwOWIwMWQ4NTZiMzU0MWU5NjQ3MTAxNGJkOTlSNTczKSBpbGx1c3Ry YXRlIHdoYXQgdGhlIG5ldyBxdWFsaWZpZWQgbWV0aG9kIG5hbWUgb3V0cHV0IGxvb2tzIGxpa2Uu CgojIyBXaGF0IGRvIEkgd2FudCBmZWVkYmFjayBvbj8KClRoaXMgd2hvbGUgcHJvamVjdCBpcyBv YnZpb3VzbHkgc3RpbGwgYWJvdXQgMjAlIGNvb2tlZCwgc28sIGFueXRoaW5nIGFuZCBldmVyeXRo aW5nLiBCdXQgbW9yZSBzcGVjaWZpY2FsbHksIHRoZXNlIGFyZSB0aGUgcXVlc3Rpb25zIEkgd291 bGQgcmVhbGx5IGxpa2Ugc29tZSBoZWxwIHdpdGggOikKCiogRG9lcyB0aGlzIF9hcHByb2FjaF8g c2VlbSBzZW5zaWJsZT8gSXMgdGhlIGJhc2ljIF9pZGVhXyBvZiAiZXhwb3NlIHNvbWUgZG9jdW1l bnRlZCBkYXRhIHN0cnVjdHVyZSB0byBvdGhlciBwcm9jZXNzZXMgdGhhdCBhcmUgYWJsZSB0byBy ZWFkIG15IG1lbW9yeSIgYSBzb3VuZCBvbmU/CiogV2hhdCBzaG91bGQgSSBkbyB3aXRoIHRoZSBx dWFsaWZpZWQtbWV0aG9kLW5hbWUtd2l0aG91dC1hZGRyZXNzZXMgd29yaz8gQXQgdGhlIG1vbWVu dCBJIGV4cG9zZWQgdGhhdCBsb2dpYyBiZWhpbmQgbmV3IG1ldGhvZHMgYE1ldGhvZCNkZWJ1Z19u YW1lYCBhbmQgYFRocmVhZDo6QmFja3RyYWNlOjpFeHRlcm5hbCNkZWJ1Z19sYWJlbGAuIElzIHRo ZXJlIHNvbWUgYXBwZXRpdGUgdG8gb3BlbiBhIHByb3Bvc2FsIHRvIGhhdmUgdGhhdCBpbiBDUnVi eT8KKiBTaG91bGQgd2UgZXZlbiBjb25zaWRlciBfY2hhbmdpbmcgdGhlIGRlZmF1bHQgb3V0cHV0 XyBvZiB0aHJlYWQgYmFja3RyYWNlcyB0byBwcmludCB0aGVzZSBxdWFsaWZpZWQgbmFtZXM/Ciog VGhlcmUgYXJlIHNvbWUgJ2luZnJhc3RydWN0dXJhbCcgY29tbWl0cyBvbiB0aGF0IGJyYW5jaCBv ZiBtaW5lIC0gb25lIHRvIFtmaW5kIHNvbWUgZXh0cmEgc3BhY2UgaW4gYHJiX21ldGhvZF9lbnRy eV90YF0oaHR0cHM6Ly9naXRodWIuY29tL3J1YnkvcnVieS9wdWxsLzY3MDYvY29tbWl0cy9mNDQ2 ZjUyODFmNThlODc2MWQxODI2YjZiMWM0YTk4ZmFjZDA0NzJlKSBhbmQgb25lIHRvIFthZGQgc29t ZSBuZXcgYXRvbWljIGhlbHBlcnNdKGBodHRwczovL2dpdGh1Yi5jb20vcnVieS9ydWJ5L3B1bGwv NjcwNi9jb21taXRzLzE3ZDRiMTU2Y2ZlOGYwYzMyOTEwOTA4ODUzYzE4YzdmYzgwMTIxZWNgKS4g SXMgdGhpcyB0aGUgc29ydCBvZiB0aGluZyB0aGF0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gdHJ5IGFu ZCBsYW5kIG5vdyBvciBvbmx5IHdoZW4gdGhpcyBpcyBhbGwgY2xvc2VyIHRvIGRvbmU/CiogSSBo YXZlbid0IHlldCBhY3R1YWxseSBpbXBsZW1lbnRlZCBhbnl0aGluZyB0byB0cnkgYW5kIF9yZWFk XyB0aGlzIGV4dGVybmFsIGRlYnVnIHNlY3Rpb24uIFNob3VsZCBpdCBiZQogIDEpIHNvbWUgZXh0 ZXJuYWwgcmVwbywgaW4gYSBub24tUnVieSBsYW5ndWFnZSBlLmcuIFJ1c3Qgb3Igc29tZXRoaW5n PwogIDIpIEEgUnVieSBnZW0sIHdpdGggYSBDIGV4dGVuc2lvbiB0byBoYW5kbGUgYWxsIHRoZSBw dHJhY2UvYnBmJ3kgYml0cz8KICAzKSBUaGUgZ2VtLCBidXQgaW5zaWRlIHRoZSBDUnVieSBzb3Vy Y2UgdHJlZT8KICBJJ20gbGVhbmluZyB0b3dhcmRzIDIsIGJ1dCBub3QgcmVhbGx5IHN1cmUuCgpU aGFuayB5b3UsIHRvIGFueWJvZHkgd2hvIGFjdHVhbGx5IGdvdCB0byB0aGUgYm90dG9tIG9mIHRo aXMgd2FsbCBvZiB0ZXh0LCBhbmQgdGhhbmtzIGRvdWJseSB0byBhbnlib2R5IHdobyBwcm92aWRl cyBmZWVkYmFjayEKCgoKLS0gCmh0dHBzOi8vYnVncy5ydWJ5LWxhbmcub3JnLwo=