From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Keith David Bershatsky Newsgroups: gmane.emacs.bugs Subject: bug#22873: #22873 (multiple fake cursors); and, #17684 (crosshairs). Date: Wed, 27 Dec 2017 09:13:37 -0800 Message-ID: References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Wed_Dec_27_09:13:37_2017-1" X-Trace: blaine.gmane.org 1514394748 4350 195.159.176.226 (27 Dec 2017 17:12:28 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Wed, 27 Dec 2017 17:12:28 +0000 (UTC) Cc: John Wiegley , Marcin Borkowski , Richard Stallman To: 22873@debbugs.gnu.org,17684@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Wed Dec 27 18:12:24 2017 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eUFFc-0000Gn-5X for geb-bug-gnu-emacs@m.gmane.org; Wed, 27 Dec 2017 18:12:22 +0100 Original-Received: from localhost ([::1]:40229 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eUFHX-0003L6-Nl for geb-bug-gnu-emacs@m.gmane.org; Wed, 27 Dec 2017 12:14:19 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:48739) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eUFHM-0003KF-Rn for bug-gnu-emacs@gnu.org; Wed, 27 Dec 2017 12:14:12 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eUFHI-00054f-Gh for bug-gnu-emacs@gnu.org; Wed, 27 Dec 2017 12:14:08 -0500 Original-Received: from debbugs.gnu.org ([208.118.235.43]:45425) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eUFHG-00051H-I2 for bug-gnu-emacs@gnu.org; Wed, 27 Dec 2017 12:14:03 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1eUFHG-0000uT-An for bug-gnu-emacs@gnu.org; Wed, 27 Dec 2017 12:14:02 -0500 X-Loop: help-debbugs@gnu.org In-Reply-To: Resent-From: Keith David Bershatsky Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 27 Dec 2017 17:14:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 22873 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 22873-submit@debbugs.gnu.org id=B22873.15143948333468 (code B ref 22873); Wed, 27 Dec 2017 17:14:02 +0000 Original-Received: (at 22873) by debbugs.gnu.org; 27 Dec 2017 17:13:53 +0000 Original-Received: from localhost ([127.0.0.1]:54106 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eUFH7-0000tr-M4 for submit@debbugs.gnu.org; Wed, 27 Dec 2017 12:13:53 -0500 Original-Received: from gateway22.websitewelcome.com ([192.185.47.129]:39958) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eUFH5-0000ti-IZ for 22873@debbugs.gnu.org; Wed, 27 Dec 2017 12:13:51 -0500 Original-Received: from cm12.websitewelcome.com (cm12.websitewelcome.com [100.42.49.8]) by gateway22.websitewelcome.com (Postfix) with ESMTP id 623F217952 for <22873@debbugs.gnu.org>; Wed, 27 Dec 2017 11:13:41 -0600 (CST) Original-Received: from gator3053.hostgator.com ([50.87.144.69]) by cmsmtp with SMTP id UFGueJWiizzFjUFGue4FlU; Wed, 27 Dec 2017 11:13:41 -0600 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lawlist.com ; s=default; h=Content-Type:MIME-Version:Subject:Cc:To:From:Message-ID:Date: Sender:Reply-To:Content-Transfer-Encoding:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: In-Reply-To:References:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=NRTJeWWjSGIg0pJlsvCcvW+qan3smddS3z2pneLecx4=; b=ZKghtyq+W9QhUiRkdDvT2DdAbV f7+ibhS9Te6up9rP8/cE0KECl123cvneGanQldxG+qShuk3Om/6csHCgV5zUz7N+RrKd9ogUjp6cl 6hXCfdOfVHCo99IfshwhoiUggLP0JRWx3HOW1omb7JnZcNAPC/Isppo/rH5u+rk+gpO+Fh/s+xW85 CESbtoRCNMz33MN6kMIh87z5txgh40t+AhWDBTg5iq2joZUVemBjVS6XwccbrbG45hcHndCN19Z8E HUeBVOzwchF1Th2PS+A19DjquFLwW9PuZ3jyEJQQ3f0oFDGcXNJ1mBYO4dbKswORAVhEN9LYCixRh tYqGmlBw==; Original-Received: from cpe-45-48-239-195.socal.res.rr.com ([45.48.239.195]:50886 helo=server.private) by gator3053.hostgator.com with esmtpsa (TLSv1:DHE-RSA-AES256-SHA:256) (Exim 4.89) (envelope-from ) id 1eUFGs-0039uk-9f; Wed, 27 Dec 2017 11:13:39 -0600 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - gator3053.hostgator.com X-AntiAbuse: Original Domain - debbugs.gnu.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - lawlist.com X-BWhitelist: no X-Source-IP: 45.48.239.195 X-Source-L: No X-Exim-ID: 1eUFGs-0039uk-9f X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: cpe-45-48-239-195.socal.res.rr.com (server.private) [45.48.239.195]:50886 X-Source-Auth: lawlist X-Email-Count: 6 X-Source-Cap: bGF3bGlzdDtsYXdsaXN0O2dhdG9yMzA1My5ob3N0Z2F0b3IuY29t X-Local-Domain: yes X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:141539 Archived-At: --Multipart_Wed_Dec_27_09:13:37_2017-1 Content-Type: text/plain; charset=US-ASCII The attached draft patch.diff applies to the Emacs 26 branch; bearing last commit da94ea92bc3ba6c236b394c00e6bbb725131a149; dated 12/26/2017. Feature request #17684 (crosshairs) uses the same mechanism as #22873 (multiple fake cursors), and the former was actually what inspired me to work on the latter. There is still no support to deal with placing fake cursors on text containing fancy overlays, text properties or combined characters. At this time, multiple fake cursors that persist are redrawn each command loop -- which can someday be optimized. Crosshairs are on an idle-timer. In my own setup, I have incorporated #22873 to work with Magnar's multiple cursors library using just a slight modification to a couple of his functions, and can provide that if anyone is interested. In a nutshell, Emacs can draw multiple fake cursors using #22873 instead of using the rectangle overlay chosen by Magnar. +-mode is pretty straight forward. Evaluate or load +-mode.el and type: M-x +-mode A simple interactive function demonstrating multiple fake cursors is named mc-test, which is within +-mode.el I will continue to work on this project as time goes by -- it is still a work in progress ... Keith --Multipart_Wed_Dec_27_09:13:37_2017-1 Content-Type: application/diff; type=patch Content-Disposition: attachment; filename="patch.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9idWZmZXIuYyBiL3NyYy9idWZmZXIuYwppbmRleCA3YWU4ODlkLi5l YjdhNGJlIDEwMDY0NAotLS0gYS9zcmMvYnVmZmVyLmMKKysrIGIvc3JjL2J1ZmZlci5jCkBAIC01 MTI2LDYgKzUxMjYsMTUgQEAgaW5pdF9idWZmZXJfb25jZSAodm9pZCkKICAgYnNldF9sYXN0X3Nl bGVjdGVkX3dpbmRvdyAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgbWFrZV9udW1iZXIgKDApKTsKIAog ICBpZHggPSAxOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3Jz ICovCisKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIG1jX2dseXBo X2xpc3QpLCBpZHgpOyArK2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxf ZmxhZ3MsIGNyb3NzaGFpcnMpLCBpZHgpOyArK2lkeDsKKyAgWFNFVEZBU1RJTlQgKEJWQVIgKCZi dWZmZXJfbG9jYWxfZmxhZ3MsIGNyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlciksIGlkeCk7ICsr aWR4OworICBYU0VURkFTVElOVCAoQlZBUiAoJmJ1ZmZlcl9sb2NhbF9mbGFncywgY3Jvc3NoYWly c192ZXJ0aWNhbF9ydWxlciksIGlkeCk7ICsraWR4OworCisvKiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiog Ki8KICAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxfZmxhZ3MsIG1vZGVfbGluZV9m b3JtYXQpLCBpZHgpOyArK2lkeDsKICAgWFNFVEZBU1RJTlQgKEJWQVIgKCZidWZmZXJfbG9jYWxf ZmxhZ3MsIGFiYnJldl9tb2RlKSwgaWR4KTsgKytpZHg7CiAgIFhTRVRGQVNUSU5UIChCVkFSICgm YnVmZmVyX2xvY2FsX2ZsYWdzLCBvdmVyd3JpdGVfbW9kZSksIGlkeCk7ICsraWR4OwpAQCAtNTIw NSw2ICs1MjE0LDE1IEBAIGluaXRfYnVmZmVyX29uY2UgKHZvaWQpCiAgIC8qIE11c3QgZG8gdGhl c2UgYmVmb3JlIG1ha2luZyB0aGUgZmlyc3QgYnVmZmVyISAqLwogCiAgIC8qIHJlYWwgc2V0dXAg aXMgZG9uZSBpbiBiaW5kaW5ncy5lbCAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBt dWx0aXBsZSBjdXJzb3JzICovCisKKyAgYnNldF9ibHZfbWNfZ2x5cGhfbGlzdCAoJmJ1ZmZlcl9k ZWZhdWx0cywgUW5pbCk7CisgIGJzZXRfYmx2X2Nyb3NzaGFpcnMgKCZidWZmZXJfZGVmYXVsdHMs IFFuaWwpOworICBic2V0X2Jsdl9jcm9zc2hhaXJzX2hvcml6b250YWxfcnVsZXIgKCZidWZmZXJf ZGVmYXVsdHMsIFF0KTsKKyAgYnNldF9ibHZfY3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxlciAoJmJ1 ZmZlcl9kZWZhdWx0cywgUXQpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KICAgYnNldF9t b2RlX2xpbmVfZm9ybWF0ICgmYnVmZmVyX2RlZmF1bHRzLCBidWlsZF9wdXJlX2Nfc3RyaW5nICgi JS0iKSk7CiAgIGJzZXRfaGVhZGVyX2xpbmVfZm9ybWF0ICgmYnVmZmVyX2RlZmF1bHRzLCBRbmls KTsKICAgYnNldF9hYmJyZXZfbW9kZSAoJmJ1ZmZlcl9kZWZhdWx0cywgUW5pbCk7CkBAIC01NDUz LDYgKzU0NzEsMTYgQEAgc3ltc19vZl9idWZmZXIgKHZvaWQpCiAgIHN0YXRpY3BybyAoJlFTRnVu ZGFtZW50YWwpOwogICBzdGF0aWNwcm8gKCZWYnVmZmVyX2FsaXN0KTsKIAorLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgREVGU1lNIChRbWNfZ2x5 cGhfbGlzdCwgIm1jLWdseXBoLWxpc3QiKTsKKyAgREVGU1lNIChRY3Jvc3NoYWlycywgImNyb3Nz aGFpcnMiKTsKKyAgREVGU1lNIChRY3Jvc3NoYWlyc19ob3Jpem9udGFsX3J1bGVyLCAiY3Jvc3No YWlycy1ob3Jpem9udGFsLXJ1bGVyIik7CisgIERFRlNZTSAoUWNyb3NzaGFpcnNfdmVydGljYWxf cnVsZXIsICJjcm9zc2hhaXJzLXZlcnRpY2FsLXJ1bGVyIik7CisKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworCiAgIERFRlNZTSAoUWNob2ljZSwgImNob2ljZSIpOwogICBERUZTWU0gKFFsZWZ0 LCAibGVmdCIpOwogICBERUZTWU0gKFFyaWdodCwgInJpZ2h0Iik7CkBAIC01NDkwLDYgKzU1MTgs MjQgQEAgc3ltc19vZl9idWZmZXIgKHZvaWQpCiAgIEZwdXQgKFFwcm90ZWN0ZWRfZmllbGQsIFFl cnJvcl9tZXNzYWdlLAogCWJ1aWxkX3B1cmVfY19zdHJpbmcgKCJBdHRlbXB0IHRvIG1vZGlmeSBh IHByb3RlY3RlZCBmaWVsZCIpKTsKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0 aXBsZSBjdXJzb3JzICovCisKKyAgREVGVkFSX1BFUl9CVUZGRVIgKCJtYy1nbHlwaC1saXN0Iiwg JkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBtY19nbHlwaF9saXN0KSwgUW5pbCwKKyAgICBkb2M6IC8q IEEgYnVmZXItbG9jYWwgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHZhbHVlIG9mIHRoZSBtdWx0aXBs ZSBjdXJzb3JzIHRvIGJlIGRpc3BsYXllZAorZHVyaW5nIHRoZSBuZXh0IHJlZGlzcGxheS4gICov KTsKKworICBERUZWQVJfUEVSX0JVRkZFUiAoImNyb3NzaGFpcnMiLCAmQlZBUiAoY3VycmVudF9i dWZmZXIsIGNyb3NzaGFpcnMpLCBRbmlsLAorICAgIGRvYzogLyogQSBidWZlci1sb2NhbCB2YXJp YWJsZSB0byBhY3RpdmF0ZS9kZWFjdGl2YXRlIGNyb3NzaGFpcnMuICAqLyk7CisKKyAgREVGVkFS X1BFUl9CVUZGRVIgKCJjcm9zc2hhaXJzLWhvcml6b250YWwtcnVsZXIiLCAmQlZBUiAoY3VycmVu dF9idWZmZXIsIGNyb3NzaGFpcnNfaG9yaXpvbnRhbF9ydWxlciksIFFuaWwsCisgICAgZG9jOiAv KiBBIGJ1ZmVyLWxvY2FsIHZhcmlhYmxlIHRvIGFjdGl2YXRlL2RlYWN0aXZhdGUgdGhlIGNyb3Nz aGFpcnMgaG9yaXpvbnRhbCBydWxlci4gICovKTsKKworICBERUZWQVJfUEVSX0JVRkZFUiAoImNy b3NzaGFpcnMtdmVydGljYWwtcnVsZXIiLCAmQlZBUiAoY3VycmVudF9idWZmZXIsIGNyb3NzaGFp cnNfdmVydGljYWxfcnVsZXIpLCBRbmlsLAorICAgIGRvYzogLyogQSBidWZlci1sb2NhbCB2YXJp YWJsZSB0byBhY3RpdmF0ZS9kZWFjdGl2YXRlIHRoZSBjcm9zc2hhaXJzIHZlcnRpY2FsIHJ1bGVy LiAgKi8pOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogICBERUZWQVJfUEVSX0JVRkZF UiAoImhlYWRlci1saW5lLWZvcm1hdCIsCiAJCSAgICAgJkJWQVIgKGN1cnJlbnRfYnVmZmVyLCBo ZWFkZXJfbGluZV9mb3JtYXQpLAogCQkgICAgIFFuaWwsCmRpZmYgLS1naXQgYS9zcmMvYnVmZmVy LmggYi9zcmMvYnVmZmVyLmgKaW5kZXggZWNkMjM2MC4uMmFiNmQyZCAxMDA2NDQKLS0tIGEvc3Jj L2J1ZmZlci5oCisrKyBiL3NyYy9idWZmZXIuaApAQCAtNjU4LDYgKzY1OCwyMyBAQCBzdHJ1Y3Qg YnVmZmVyCiAgICAgIGNhY2hlIGFyZSBlbmFibGVkLiAgU2VlIHNlYXJjaC5jLCBpbmRlbnQuYyBh bmQgYmlkaS5jIGZvciBkZXRhaWxzLiAgKi8KICAgTGlzcF9PYmplY3QgY2FjaGVfbG9uZ19zY2Fu c187CiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVsdGlwbGUgY3Vyc29ycyAqLwor CisgIC8qIFRoZSBuYW1lIG9mIGxpc3QgdXNlZCBieSBtdWx0aXBsZSBjdXJzb3JzIGZvciBuZXh0 IHJlZGlzcGxheS4gICovCisgIExpc3BfT2JqZWN0IG1jX2dseXBoX2xpc3RfOworCisgIC8qIFRo ZSBuYW1lIG9mIGxpc3QuICAqLworICBMaXNwX09iamVjdCBjcm9zc2hhaXJzXzsKKworICAvKiBU aGUgbmFtZSBvZiB0aGUgY3Jvc3NoYWlycyBob3Jpem9udGFsIHJ1bGVyLiAgKi8KKyAgTGlzcF9P YmplY3QgY3Jvc3NoYWlyc19ob3Jpem9udGFsX3J1bGVyXzsKKworICAvKiBUaGUgbmFtZSBvZiB0 aGUgY3Jvc3NoYWlycyB2ZXJ0aWNhbCBydWxlci4gICovCisgIExpc3BfT2JqZWN0IGNyb3NzaGFp cnNfdmVydGljYWxfcnVsZXJfOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogICAvKiBJ ZiB0aGUgd2lkdGggcnVuIGNhY2hlIGlzIGVuYWJsZWQsIHRoaXMgdGFibGUgY29udGFpbnMgdGhl CiAgICAgIGNoYXJhY3RlciB3aWR0aHMgd2lkdGhfcnVuX2NhY2hlIChzZWUgYWJvdmUpIGFzc3Vt ZXMuICBXaGVuIHdlCiAgICAgIGRvIGEgdGhvcm91Z2ggcmVkaXNwbGF5LCB3ZSBjb21wYXJlIHRo aXMgYWdhaW5zdCB0aGUgYnVmZmVyJ3MKQEAgLTkxOCw2ICs5MzUsMzYgQEAgWEJVRkZFUiAoTGlz cF9PYmplY3QgYSkKIC8qIE1vc3QgY29kZSBzaG91bGQgdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBz ZXQgTGlzcCBmaWVsZHMgaW4gc3RydWN0CiAgICBidWZmZXIuICAoU29tZSBzZXR0ZXJzIHRoYXQg YXJlIHByaXZhdGUgdG8gYSBzaW5nbGUgLmMgZmlsZSBhcmUKICAgIGRlZmluZWQgYXMgc3RhdGlj IGluIHRob3NlIGZpbGVzLikgICovCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVs dGlwbGUgY3Vyc29ycyAqLworCitJTkxJTkUgdm9pZAorYnNldF9ibHZfbWNfZ2x5cGhfbGlzdCAo c3RydWN0IGJ1ZmZlciAqYiwgTGlzcF9PYmplY3QgdmFsKQoreworICBiLT5tY19nbHlwaF9saXN0 XyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRfYmx2X2Nyb3NzaGFpcnMgKHN0cnVjdCBi dWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgYi0+Y3Jvc3NoYWlyc18gPSB2YWw7Cit9 CisKK0lOTElORSB2b2lkCitic2V0X2Jsdl9jcm9zc2hhaXJzX2hvcml6b250YWxfcnVsZXIgKHN0 cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sKKyAgYi0+Y3Jvc3NoYWlyc19ob3Jp em9udGFsX3J1bGVyXyA9IHZhbDsKK30KKworSU5MSU5FIHZvaWQKK2JzZXRfYmx2X2Nyb3NzaGFp cnNfdmVydGljYWxfcnVsZXIgKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKK3sK KyAgYi0+Y3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxlcl8gPSB2YWw7Cit9CisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworCiBJTkxJTkUgdm9pZAogYnNldF9iaWRpX3BhcmFncmFwaF9kaXJlY3Rp b24gKHN0cnVjdCBidWZmZXIgKmIsIExpc3BfT2JqZWN0IHZhbCkKIHsKZGlmZiAtLWdpdCBhL3Ny Yy9kaXNwZXh0ZXJuLmggYi9zcmMvZGlzcGV4dGVybi5oCmluZGV4IDQzMGFmYmYuLmYxZDU0MTUg MTAwNjQ0Ci0tLSBhL3NyYy9kaXNwZXh0ZXJuLmgKKysrIGIvc3JjL2Rpc3BleHRlcm4uaApAQCAt Mjg4OSw3ICsyODg5LDEzIEBAIHN0cnVjdCByZWRpc3BsYXlfaW50ZXJmYWNlCiAJCQkgICAgICBz dHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3csCiAJCQkgICAgICBpbnQgeCwgaW50IHksCiAJCQkg ICAgICBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIGN1cnNvcl90eXBlLAotCQkJICAgICAgaW50IGN1 cnNvcl93aWR0aCwgYm9vbCBvbl9wLCBib29sIGFjdGl2ZV9wKTsKKy8qICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKiAqLworLyogbXVsdGlwbGUgY3Vyc29ycyAqLworCisgICAgICAgICBpbnQgY3Vyc29yX3dp ZHRoLCBib29sIG9uX3AsIGJvb2wgYWN0aXZlX3AsCisgICAgICAgICBMaXNwX09iamVjdCBjb2xv cl92ZWN0b3IsIExpc3BfT2JqZWN0IGZsYXZvcik7CisKKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LwogCiAgIC8qIERyYXcgdmVydGljYWwgYm9yZGVyIGZvciB3aW5kb3cgVyBmcm9tIChYLFlfMCkg dG8gKFgsWV8xKS4gICovCiAgIHZvaWQgKCpkcmF3X3ZlcnRpY2FsX3dpbmRvd19ib3JkZXIpIChz dHJ1Y3Qgd2luZG93ICp3LApAQCAtMzI3NCw2ICszMjgwLDEzIEBAIGV4dGVybiB2b2lkIGdldF9m b250X2FzY2VudF9kZXNjZW50IChzdHJ1Y3QgZm9udCAqLCBpbnQgKiwgaW50ICopOwogCiAjaWZk ZWYgSEFWRV9XSU5ET1dfU1lTVEVNCiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVs dGlwbGUgY3Vyc29ycyAqLworCit2b2lkIG1jX3BvcnRhbCAoc3RydWN0IHdpbmRvdyAqLCBib29s KTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKICNpZmRlZiBHTFlQSF9ERUJVRwogZXh0 ZXJuIHZvaWQgZHVtcF9nbHlwaF9zdHJpbmcgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKikgRVhURVJO QUxMWV9WSVNJQkxFOwogI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvZnJpbmdlLmMgYi9zcmMvZnJp bmdlLmMKaW5kZXggMDg3ZWYzMy4uMWI1ZDg3YiAxMDA2NDQKLS0tIGEvc3JjL2ZyaW5nZS5jCisr KyBiL3NyYy9mcmluZ2UuYwpAQCAtNDMxLDYgKzQzMSwyMjQgQEAgc3RhdGljIHVuc2lnbmVkIHNo b3J0IGVtcHR5X2xpbmVfYml0c1tdID0gewogICAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDNj LCAweDAwLCAweDAwLCAweDNjLCAweDAwLAogICAweDAwLCAweDNjLCAweDAwLCAweDAwLCAweDNj LCAweDAwLCAweDAwLCAweDNjLCAweDAwfTsKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisv KiBtdWx0aXBsZSBjdXJzb3JzCisKKy8qICA7OyBBVVRIT1I6ICBOaWtvbGFqIFNjaHVtYWNoZXIg LS0gaHR0cHM6Ly9naXRodWIuY29tL25zY2h1bS9mcmluZ2UtaGVscGVyLmVsCisgICAgKGRlZnVu ICstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbCAoJnJlc3Qgc3RyaW5ncykKKyAgICAiQ29udmVy dCBTVFJJTkdTIGludG8gYSB2ZWN0b3IgdXNhYmxlIGZvciBgZGVmaW5lLWZyaW5nZS1iaXRtYXAn LgorICAgIEVhY2ggc3RyaW5nIGluIFNUUklOR1MgcmVwcmVzZW50cyBhIGxpbmUgb2YgdGhlIGZy aW5nZSBiaXRtYXAuCisgICAgUGVyaW9kcyAoLikgYXJlIGJhY2tncm91bmQtY29sb3JlZCBwaXhl bDsgWHMgYXJlIGZvcmVncm91bmQtY29sb3JlZC4gVGhlCisgICAgZnJpbmdlIGJpdG1hcCBhbHdh eXMgaXMgYWxpZ25lZCB0byB0aGUgcmlnaHQuIElmIHRoZSBmcmluZ2UgaGFzIGhhbGYKKyAgICB3 aWR0aCwgb25seSB0aGUgbGVmdCA0IHBpeGVscyBvZiBhbiA4IHBpeGVsIGJpdG1hcCB3aWxsIGJl IHNob3duLgorICAgIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgZGVmaW5lcyBhIGRp YWdvbmFsIGxpbmUuCisgICAgXCgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICBcIlhY Li4uLi4uXCIKKyAgICBcIi4uWFguLi4uXCIKKyAgICBcIi4uLi5YWC4uXCIKKyAgICBcIi4uLi4u LlhYXCJcKSIKKyAgICAgICh1bmxlc3MgKGNkciBzdHJpbmdzKQorICAgICAgICAoc2V0cSBzdHJp bmdzIChzcGxpdC1zdHJpbmcgKGNhciBzdHJpbmdzKSAiXG4iKSkpCisgICAgICAoYXBwbHkgJ3Zl Y3RvcgorICAgICAgICAobWFwY2FyCisgICAgICAgICAgKGxhbWJkYSAoc3RyKQorICAgICAgICAg ICAgKGxldCAoKG51bSAwKSkKKyAgICAgICAgICAgICAgKGRvbGlzdCAoYyAoc3RyaW5nLXRvLWxp c3Qgc3RyKSkKKyAgICAgICAgICAgICAgICAoc2V0cSBudW0gKCsgKCogbnVtIDIpIChpZiAoZXEg YyA/LikgMCAxKSkpKQorICAgICAgICAgICAgICAoZm9ybWF0ICIlIy14IiBudW0pKSkKKyAgICAg ICAgICBzdHJpbmdzKSkpCisqLworCisvKiAyNAorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRl Y2ltYWwKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4u LiIKKyAgICAgICJ4Li54eC4uLiIKKyAgICAgICJ4Li4ueHguLiIKKyAgICAgICJ4Li4uLnh4LiIK KyAgICAgICJ4Lnh4eHh4eCIKKyAgICAgICJ4Lnh4eHh4eCIKKyAgICAgICJ4Li4uLnh4LiIKKyAg ICAgICJ4Li4ueHguLiIKKyAgICAgICJ4Li54eC4uLiIKKyAgICAgICJ4Li4uLi4uLiIKKyAgICAg ICJ4Li4uLi4uLiIKKyAgICAgICJ4Li4uLi4uLiIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0 IG1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hbmdsZV9iaXRzW10gPXsKKyAgMHg4MCwgMHg4MCwgMHg4 MCwgMHg5OCwgMHg4YywgMHg4NiwgMHhiZiwKKyAgMHhiZiwgMHg4NiwgMHg4YywgMHg5OCwgMHg4 MCwgMHg4MCwgMHg4MH07CisKKy8qIDI1CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1h bAorICAgICAgInh4eHh4eHh4IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54Igor ICAgICAgInguLnh4Li54IgorICAgICAgInguLi54eC54IgorICAgICAgInguLi4ueHh4IgorICAg ICAgIngueHh4eHh4IgorICAgICAgIngueHh4eHh4IgorICAgICAgInguLi4ueHh4IgorICAgICAg InguLi54eC54IgorICAgICAgInguLnh4Li54IgorICAgICAgInguLi4uLi54IgorICAgICAgIngu Li4uLi54IgorICAgICAgInh4eHh4eHh4IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNf aG9sbG93X3JlY3RhbmdsZV9yaWdodF9hbmdsZV9iaXRzW10gPXsKKyAgMHhmZiwgMHg4MSwgMHg4 MSwgMHg5OSwgMHg4ZCwgMHg4NywgMHhiZiwKKyAgMHhiZiwgMHg4NywgMHg4ZCwgMHg5OSwgMHg4 MSwgMHg4MSwgMHhmZn07CisKKy8qIDI2CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1h bAorICAgICAgInh4eHh4eHh4IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54Igor ICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAg ICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAg InguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgInguLi4uLi54IgorICAgICAgIngu Li4uLi54IgorICAgICAgInh4eHh4eHh4IikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNf aG9sbG93X3JlY3RhbmdsZV9iaXRzW10gPXsKKyAgMHhmZiwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4 MSwgMHg4MSwgMHg4MSwKKyAgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHg4MSwgMHhm Zn07CisKKy8qIDI3CisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgIngu Li4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4u Li4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4u IgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgor ICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAgICAgInguLi4uLi4uIgorICAg ICAgInguLi4uLi4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWNfdmVydGljYWxfYmFy X2JpdHNbXSA9eworICAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLAor ICAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwLCAweDgwfTsKKworLyogMjgKKyAg ICAoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsCisgICAgICAieHguLi4uLi4iCisgICAgICAi Lnh4Li4uLi4iCisgICAgICAiLi54eC4uLi4iCisgICAgICAiLi4ueHguLi4iCisgICAgICAiLi4u Lnh4Li4iCisgICAgICAiLi4uLi54eC4iCisgICAgICAiLi4uLi4ueHgiCisgICAgICAiLi4uLi54 eC4iCisgICAgICAiLi4uLnh4Li4iCisgICAgICAiLi4ueHguLi4iCisgICAgICAiLi54eC4uLi4i CisgICAgICAiLnh4Li4uLi4iCisgICAgICAieHguLi4uLi4iKQorKi8KK3N0YXRpYyB1bnNpZ25l ZCBzaG9ydCBtY19yaWdodF9hbmdsZV9iaXRzW10gPXsKKyAgMHhjMCwgMHg2MCwgMHgzMCwgMHgx OCwgMHhjLCAweDYsIDB4MywgMHg2LCAweGMsIDB4MTgsIDB4MzAsIDB4NjAsIDB4YzB9OworCisv KiAyOQorICAgICgrLWZyaW5nZS1oZWxwZXItaGV4YWRlY2ltYWwKKyAgICAgICJ4eC4uLi4uLiIK KyAgICAgICJ4eC4uLi4uLiIKKyAgICAgICIgeHguLi4uLiIKKyAgICAgICIueHguLi4uLiIKKyAg ICAgICIuLnh4Li4uLiIKKyAgICAgICIuLnh4Li4uLiIKKyAgICAgICIuLi54eC4uLiIKKyAgICAg ICIuLi54eC4uLiIKKyAgICAgICIuLi4ueHguLiIKKyAgICAgICIuLi4ueHguLiIKKyAgICAgICIu Li4uLnh4LiIKKyAgICAgICIuLi4uLnh4LiIKKyAgICAgICIuLi4uLi54eCIKKyAgICAgICIuLi4u Li54eCIpCisqLworc3RhdGljIHVuc2lnbmVkIHNob3J0IG1jX2JhY2tzbGFzaF9iaXRzW10gPXsK KyAgMHhjMCwgMHhjMCwgMHhlMCwgMHg2MCwgMHgzMCwgMHgzMCwgMHgxOCwgMHgxOCwgMHhjLCAw eGMsIDB4NiwgMHg2LCAweDMsIDB4M307CisKKy8qIDMwCisgICAgKCstZnJpbmdlLWhlbHBlci1o ZXhhZGVjaW1hbAorICAgICAgInh4Li4uLi4uIgorICAgICAgInh4Li4uLi4uIgorICAgICAgInh4 eC4uLi4uIgorICAgICAgInh4eC4uLi4uIgorICAgICAgIngueHguLi4uIgorICAgICAgIngueHgu Li4uIgorICAgICAgInguLnh4Li4uIgorICAgICAgInguLnh4Li4uIgorICAgICAgInguLi54eC4u IgorICAgICAgInguLi54eC4uIgorICAgICAgInguLi4ueHguIgorICAgICAgInguLi4ueHguIgor ICAgICAgInguLi4uLnh4IgorICAgICAgInguLi4uLnh4IikKKyovCitzdGF0aWMgdW5zaWduZWQg c2hvcnQgbWNfdmVydGljYWxfYmFyX2JhY2tzbGFzaF9iaXRzW10gPXsKKyAgMHhjMCwgMHhjMCwg MHhlMCwgMHhlMCwgMHhiMCwgMHhiMCwgMHg5OCwKKyAgMHg5OCwgMHg4YywgMHg4YywgMHg4Niwg MHg4NiwgMHg4MywgMHg4M307CisKKy8qIDMxCisgICAgKCstZnJpbmdlLWhlbHBlci1oZXhhZGVj aW1hbAorICAgICAgIi54eHh4eHguIgorICAgICAgInh4eHgueC4uIgorICAgICAgInh4eHgueC4u IgorICAgICAgInh4eHgueC4uIgorICAgICAgIi54eHgueC4uIgorICAgICAgIi4uLngueC4uIgor ICAgICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIgorICAg ICAgIi4uLngueC4uIgorICAgICAgIi4uLngueC4uIikKKyovCitzdGF0aWMgdW5zaWduZWQgc2hv cnQgbWNfcGlsY3Jvd19iaXRzW10gPXsKKyAgMHg3ZSwgMHhmNCwgMHhmNCwgMHhmNCwgMHg3NCwg MHgxNCwgMHgxNCwgMHgxNCwgMHgxNCwgMHgxNCwgMHgxNH07CisKKy8qIDMyCisgICAgKCstZnJp bmdlLWhlbHBlci1oZXhhZGVjaW1hbAorICAgICAgInh4Lnh4Li4uIgorICAgICAgIi54eC54eC4u IgorICAgICAgIi4ueHgueHguIgorICAgICAgIi4uLnh4Lnh4IgorICAgICAgIi4ueHgueHguIgor ICAgICAgIi54eC54eC4uIgorICAgICAgInh4Lnh4Li4uIikKKyovCitzdGF0aWMgdW5zaWduZWQg c2hvcnQgbWNfcmlnaHRfZG91YmxlX2FuZ2xlX2JpdHNbXSA9eworICAweGQ4LCAweDZjLCAweDM2 LCAweDFiLCAweDM2LCAweDZjLCAweGQ4fTsKKworLyogMzMKKyAgICAoKy1mcmluZ2UtaGVscGVy LWhleGFkZWNpbWFsCisgICAgICAiLi54eHh4Li4iCisgICAgICAiLnh4eHh4eC4iCisgICAgICAi eC4ueHguLngiCisgICAgICAieC4ueHguLngiCisgICAgICAieHh4eHh4eHgiCisgICAgICAieHgu Li4ueHgiCisgICAgICAieHh4Li54eHgiCisgICAgICAiLnh4eHh4eC4iCisgICAgICAiLi54eHh4 Li4iKQorKi8KK3N0YXRpYyB1bnNpZ25lZCBzaG9ydCBtY19zbWlsZXlfZmFjZV9iaXRzW10gPXsK KyAgMHgzYywgMHg3ZSwgMHg5OSwgMHg5OSwgMHhmZiwgMHhjMywgMHhlNywgMHg3ZSwgMHgzY307 CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCiAjZGVmaW5lIEJZVEVTX1BFUl9CSVRNQVBf Uk9XICAoc2l6ZW9mICh1bnNpZ25lZCBzaG9ydCkpCiAjZGVmaW5lIFNUQU5EQVJEX0JJVE1BUF9I RUlHSFQoYml0cykgKHNpemVvZiAoYml0cykvQllURVNfUEVSX0JJVE1BUF9ST1cpCkBAIC00NjUs NiArNjgzLDMxIEBAIHN0YXRpYyBzdHJ1Y3QgZnJpbmdlX2JpdG1hcCBzdGFuZGFyZF9iaXRtYXBz W10gPQogICB7IEZSQklUUyAodmVydGljYWxfYmFyX2JpdHMpLCAgICAgICA4LCAwLCBBTElHTl9C SVRNQVBfQ0VOVEVSLCAwIH0sCiAgIHsgRlJCSVRTIChob3Jpem9udGFsX2Jhcl9iaXRzKSwgICAg IDgsIDAsIEFMSUdOX0JJVE1BUF9CT1RUT00sIDAgfSwKICAgeyBGUkJJVFMgKGVtcHR5X2xpbmVf Yml0cyksICAgICAgICAgOCwgMywgQUxJR05fQklUTUFQX1RPUCwgICAgMCB9LAorLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgLyogMjQgKi8KKyAg eyBGUkJJVFMgKG1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hbmdsZV9iaXRzKSwgICAgIDgsIDAsIEFM SUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMjUgKi8KKyAgeyBGUkJJVFMgKG1jX2hvbGxv d19yZWN0YW5nbGVfcmlnaHRfYW5nbGVfYml0cyksIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIs IDAgfSwKKyAgLyogMjYgKi8KKyAgeyBGUkJJVFMgKG1jX2hvbGxvd19yZWN0YW5nbGVfYml0cyks ICAgICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMjcgKi8K KyAgeyBGUkJJVFMgKG1jX3ZlcnRpY2FsX2Jhcl9iaXRzKSwgICAgICAgICAgICAgICAgIDgsIDAs IEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMjggKi8KKyAgeyBGUkJJVFMgKG1jX3Jp Z2h0X2FuZ2xlX2JpdHMpLCAgICAgICAgICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5U RVIsIDAgfSwKKyAgLyogMjkgKi8KKyAgeyBGUkJJVFMgKG1jX2JhY2tzbGFzaF9iaXRzKSwgICAg ICAgICAgICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMzAg Ki8KKyAgeyBGUkJJVFMgKG1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xhc2hfYml0cyksICAgICAgIDgs IDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyogMzEgKi8KKyAgeyBGUkJJVFMgKG1j X3BpbGNyb3dfYml0cyksICAgICAgICAgICAgICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9D RU5URVIsIDAgfSwKKyAgLyogMzIgKi8KKyAgeyBGUkJJVFMgKG1jX3JpZ2h0X2RvdWJsZV9hbmds ZV9iaXRzKSwgICAgICAgICAgIDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKyAgLyog MzMgKi8KKyAgeyBGUkJJVFMgKG1jX3NtaWxleV9mYWNlX2JpdHMpLCAgICAgICAgICAgICAgICAg IDgsIDAsIEFMSUdOX0JJVE1BUF9DRU5URVIsIDAgfSwKKworLyogKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq ICovCiB9OwogCiAjZGVmaW5lIE5PX0ZSSU5HRV9CSVRNQVAgMApAQCAtMTcyMiw2ICsxOTY1LDc1 IEBAIElmIG5pbCwgYWxzbyBjb250aW51ZSBsaW5lcyB3aGljaCBhcmUgZXhhY3RseSBhcyB3aWRl IGFzIHRoZSB3aW5kb3cuICAqLyk7CiAgIERFRlZBUl9MSVNQICgiZnJpbmdlLWJpdG1hcHMiLCBW ZnJpbmdlX2JpdG1hcHMsCiAgICAgZG9jOiAvKiBMaXN0IG9mIGZyaW5nZSBiaXRtYXAgc3ltYm9s cy4gICovKTsKICAgVmZyaW5nZV9iaXRtYXBzID0gUW5pbDsKKworLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgLyogKGdldCAnZW1wdHktbGluZSAn ZnJpbmdlKSA9PiAyMyA9PiB0aGUgbGFzdCBzdGFuZGFyZC1iaXRtYXAgYmVmb3JlIHRoaXMgb25l LgorICBTZWUgYGZyaW5nZS5lbGAuICovCisKKyAgLyogMjQgKi8KKyAgREVGU1lNIChRbWNfdmVy dGljYWxfYmFyX3JpZ2h0X2FuZ2xlLCAiKy12ZXJ0aWNhbC1iYXItcmlnaHQtYW5nbGUiKTsKKyAg VmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY192ZXJ0aWNhbF9iYXJfcmlnaHRfYW5nbGUsIFZm cmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY192ZXJ0aWNhbF9iYXJfcmlnaHRfYW5nbGUsIFFm cmluZ2UsIG1ha2VfbnVtYmVyICgyNCkpOworICAvKiAoZ2V0ICcrLXZlcnRpY2FsLWJhci1yaWdo dC1hbmdsZSAnZnJpbmdlKSA9PiAyNCAqLworCisgIC8qIDI1ICovCisgIERFRlNZTSAoUW1jX2hv bGxvd19yZWN0YW5nbGVfcmlnaHRfYW5nbGUsICIrLWhvbGxvdy1yZWN0YW5nbGUtcmlnaHQtYW5n bGUiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19ob2xsb3dfcmVjdGFuZ2xlX3Jp Z2h0X2FuZ2xlLCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfaG9sbG93X3JlY3Rhbmds ZV9yaWdodF9hbmdsZSwgUWZyaW5nZSwgbWFrZV9udW1iZXIgKDI1KSk7CisgIC8qIChnZXQgJyst aG9sbG93LXJlY3RhbmdsZS1yaWdodC1hbmdsZSAnZnJpbmdlKSA9PiAyNSAqLworCisgIC8qIDI2 ICovCisgIERFRlNZTSAoUW1jX2hvbGxvd19yZWN0YW5nbGUsICIrLWhvbGxvdy1yZWN0YW5nbGUi KTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19ob2xsb3dfcmVjdGFuZ2xlLCBWZnJp bmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfaG9sbG93X3JlY3RhbmdsZSwgUWZyaW5nZSwgbWFr ZV9udW1iZXIgKDI2KSk7CisgIC8qIChnZXQgJystaG9sbG93LXJlY3RhbmdsZSAnZnJpbmdlKSA9 PiAyNiAqLworCisgIC8qIDI3ICovCisgIERFRlNZTSAoUW1jX3ZlcnRpY2FsX2JhciwgIistdmVy dGljYWwtYmFyIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdmVydGljYWxfYmFy LCBWZnJpbmdlX2JpdG1hcHMpOworICBGcHV0IChRbWNfdmVydGljYWxfYmFyLCBRZnJpbmdlLCBt YWtlX251bWJlciAoMjcpKTsKKyAgLyogKGdldCAnKy12ZXJ0aWNhbC1iYXIgJ2ZyaW5nZSkgPT4g MjcgKi8KKworICAvKiAyOCAqLworICBERUZTWU0gKFFtY19yaWdodF9hbmdsZSwgIistcmlnaHQt YW5nbGUiKTsKKyAgVmZyaW5nZV9iaXRtYXBzID0gRmNvbnMgKFFtY19yaWdodF9hbmdsZSwgVmZy aW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3JpZ2h0X2FuZ2xlLCBRZnJpbmdlLCBtYWtlX251 bWJlciAoMjgpKTsKKyAgLyogKGdldCAnKy1yaWdodC1hbmdsZSAnZnJpbmdlKSA9PiAyOCAqLwor CisgIC8qIDI5ICovCisgIERFRlNZTSAoUW1jX2JhY2tzbGFzaCwgIistYmFja3NsYXNoIik7Cisg IFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfYmFja3NsYXNoLCBWZnJpbmdlX2JpdG1hcHMp OworICBGcHV0IChRbWNfYmFja3NsYXNoLCBRZnJpbmdlLCBtYWtlX251bWJlciAoMjkpKTsKKyAg LyogKGdldCAnKy1iYWNrc2xhc2ggJ2ZyaW5nZSkgPT4gMjkgKi8KKworICAvKiAzMCAqLworICBE RUZTWU0gKFFtY192ZXJ0aWNhbF9iYXJfYmFja3NsYXNoLCAiKy12ZXJ0aWNhbC1iYXItYmFja3Ns YXNoIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNfdmVydGljYWxfYmFyX2JhY2tz bGFzaCwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xh c2gsIFFmcmluZ2UsIG1ha2VfbnVtYmVyICgzMCkpOworICAvKiAoZ2V0ICcrLXZlcnRpY2FsLWJh ci1iYWNrc2xhc2ggJ2ZyaW5nZSkgPT4gMzAgKi8KKworICAvKiAzMSAqLworICBERUZTWU0gKFFt Y19waWxjcm93LCAiKy1waWxjcm93Iik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZjb25zIChRbWNf cGlsY3JvdywgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3BpbGNyb3csIFFmcmluZ2Us IG1ha2VfbnVtYmVyICgzMSkpOworICAvKiAoZ2V0ICcrLXBpbGNyb3cgJ2ZyaW5nZSkgPT4gMzEg Ki8KKworICAvKiAzMiAqLworICBERUZTWU0gKFFtY19yaWdodF9kb3VibGVfYW5nbGUsICIrLXJp Z2h0LWRvdWJsZS1hbmdsZSIpOworICBWZnJpbmdlX2JpdG1hcHMgPSBGY29ucyAoUW1jX3JpZ2h0 X2RvdWJsZV9hbmdsZSwgVmZyaW5nZV9iaXRtYXBzKTsKKyAgRnB1dCAoUW1jX3JpZ2h0X2RvdWJs ZV9hbmdsZSwgUWZyaW5nZSwgbWFrZV9udW1iZXIgKDMyKSk7CisgIC8qIChnZXQgJystcmlnaHQt ZG91YmxlLWFuZ2xlICdmcmluZ2UpID0+IDMyICovCisKKyAgLyogMzMgKi8KKyAgREVGU1lNIChR bWNfc21pbGV5X2ZhY2UsICIrLXNtaWxleS1mYWNlIik7CisgIFZmcmluZ2VfYml0bWFwcyA9IEZj b25zIChRbWNfc21pbGV5X2ZhY2UsIFZmcmluZ2VfYml0bWFwcyk7CisgIEZwdXQgKFFtY19zbWls ZXlfZmFjZSwgUWZyaW5nZSwgbWFrZV9udW1iZXIgKDMzKSk7CisgIC8qIChnZXQgJystc21pbGV5 LWZhY2UgJ2ZyaW5nZSkgPT4gMzMgKi8KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKIH0K IAogLyogR2FyYmFnZSBjb2xsZWN0aW9uIGhvb2sgKi8KZGlmZiAtLWdpdCBhL3NyYy9rZXlib2Fy ZC5jIGIvc3JjL2tleWJvYXJkLmMKaW5kZXggNTc3NTdjZi4uMGI1NDQzMyAxMDA2NDQKLS0tIGEv c3JjL2tleWJvYXJkLmMKKysrIGIvc3JjL2tleWJvYXJkLmMKQEAgLTEyNTQsNiArMTI1NCwyNyBA QCBzdGF0aWMgaW50IHJlYWRfa2V5X3NlcXVlbmNlIChMaXNwX09iamVjdCAqLCBpbnQsIExpc3Bf T2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCwgYm9vbCwgYm9vbCwg Ym9vbCk7CiBzdGF0aWMgdm9pZCBhZGp1c3RfcG9pbnRfZm9yX3Byb3BlcnR5IChwdHJkaWZmX3Qs IGJvb2wpOwogCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMg Ki8KKworc3RhdGljIHZvaWQKK2tiZF9tY19hY3RpdmF0ZV9jdXJzb3JzICh2b2lkKQoreworICBz dHJ1Y3Qgd2luZG93ICp3ID0gZGVjb2RlX2xpdmVfd2luZG93IChzZWxlY3RlZF93aW5kb3cpOwor ICB3LT5tYy5kcmF3X2dseXBoX2N1cnNvciA9IHRydWU7CisgIHctPm1jLmVyYXNlX2dseXBoX2N1 cnNvciA9IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCitrYmRfbWNfYWN0aXZhdGVfY3Jvc3NoYWly cyAodm9pZCkKK3sKKyAgc3RydWN0IHdpbmRvdyAqdyA9IGRlY29kZV9saXZlX3dpbmRvdyAoc2Vs ZWN0ZWRfd2luZG93KTsKKyAgdy0+bWMuZHJhd19jcm9zc2hhaXJzID0gdHJ1ZTsKKyAgdy0+bWMu ZXJhc2VfY3Jvc3NoYWlycyA9IHRydWU7Cit9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwor CiBMaXNwX09iamVjdAogY29tbWFuZF9sb29wXzEgKHZvaWQpCiB7CkBAIC0xNDUwLDYgKzE0NzEs MTMgQEAgY29tbWFuZF9sb29wXzEgKHZvaWQpCiAgICAgICBWcmVhbF90aGlzX2NvbW1hbmQgPSBj bWQ7CiAgICAgICBzYWZlX3J1bl9ob29rcyAoUXByZV9jb21tYW5kX2hvb2spOwogCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMgKi8KKworICAgICAga2JkX21j X2FjdGl2YXRlX2N1cnNvcnMgKCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiAgICAg ICBhbHJlYWR5X2FkanVzdGVkID0gMDsKIAogICAgICAgaWYgKE5JTFAgKFZ0aGlzX2NvbW1hbmQp KQpkaWZmIC0tZ2l0IGEvc3JjL25zdGVybS5tIGIvc3JjL25zdGVybS5tCmluZGV4IDUwZTA2Yzku Ljk2NzkzNjIgMTAwNjQ0Ci0tLSBhL3NyYy9uc3Rlcm0ubQorKysgYi9zcmMvbnN0ZXJtLm0KQEAg LTExMzQsMTAgKzExMzQsMTIgQEAgc3RhdGljIE5TUmVjdCBjb25zdHJhaW5fZnJhbWVfcmVjdChO U1JlY3QgZnJhbWVSZWN0LCBib29sIGlzRnVsbHNjcmVlbikKICAgICB7CiAgICAgICBibG9ja19p bnB1dCAoKTsKIAotICAgICAgaWYgKGN1cnNvcl9vbl9wKQotCWRpc3BsYXlfYW5kX3NldF9jdXJz b3IgKHcsIDEsCi0JCQkJdy0+b3V0cHV0X2N1cnNvci5ocG9zLCB3LT5vdXRwdXRfY3Vyc29yLnZw b3MsCi0JCQkJdy0+b3V0cHV0X2N1cnNvci54LCB3LT5vdXRwdXRfY3Vyc29yLnkpOworLyogKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgICAgIG1jX3Bv cnRhbCAodywgY3Vyc29yX29uX3ApOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KIAogICAg ICAgaWYgKGRyYXdfd2luZG93X2ZyaW5nZXMgKHcsIDEpKQogCXsKQEAgLTMwMDUsNyArMzAwNywx MyBAQCBzbyBzb21lIGtleSBwcmVzc2VzIChUQUIpIGFyZSBzd2FsbG93ZWQgYnkgdGhlIHN5c3Rl bS4gKi8KIHN0YXRpYyB2b2lkCiBuc19kcmF3X3dpbmRvd19jdXJzb3IgKHN0cnVjdCB3aW5kb3cg KncsIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBoX3JvdywKIAkJICAgICAgIGludCB4LCBpbnQgeSwg ZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBjdXJzb3JfdHlwZSwKLQkJICAgICAgIGludCBjdXJzb3Jf d2lkdGgsIGJvb2wgb25fcCwgYm9vbCBhY3RpdmVfcCkKKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAq LworLyogbXVsdGlwbGUgY3Vyc29ycyAqLworCisgIGludCBjdXJzb3Jfd2lkdGgsIGJvb2wgb25f cCwgYm9vbCBhY3RpdmVfcCwKKyAgTGlzcF9PYmplY3QgY29sb3JfdmVjdG9yLCBMaXNwX09iamVj dCBmbGF2b3IpCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogLyogLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAgICAgRXh0ZXJuYWwgY2FsbCAoUklGKTogZHJhdyBjdXJzb3IuCiAgICAgIE5vdGUgdGhh dCBDVVJTT1JfV0lEVEggaXMgbWVhbmluZ2Z1bCBvbmx5IGZvciAoaCliYXIgY3Vyc29ycy4KQEAg LTMwMzksOCArMzA0NywyOSBAQCBOb3RlIHRoYXQgQ1VSU09SX1dJRFRIIGlzIG1lYW5pbmdmdWwg b25seSBmb3IgKGgpYmFyIGN1cnNvcnMuCiAKICAgaWYgKChwaHlzX2N1cnNvcl9nbHlwaCA9IGdl dF9waHlzX2N1cnNvcl9nbHlwaCAodykpID09IE5VTEwpCiAgICAgewotICAgICAgaWYgKGdseXBo X3Jvdy0+ZXhhY3Rfd2luZG93X3dpZHRoX2xpbmVfcAotICAgICAgICAgICYmIHctPnBoeXNfY3Vy c29yLmhwb3MgPj0gZ2x5cGhfcm93LT51c2VkW1RFWFRfQVJFQV0pCisKKworLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgICAgIC8qIFRoaXMgbW9k aWZpY2F0aW9uIGVuYWJsZXMgcGxhY2VtZW50IG9mIHRoZSBjdXJzb3ItaW4tZnJpbmdlIGJpdG1h cCB3aGVuCisgICAgICB0aGUgd2luZG93LXdpZHRoIGlzIHNsaWdodGx5IGxlc3MgdGhhbiBgZ2x5 cGhfcm93LT5leGFjdF93aW5kb3dfd2lkdGhfbGluZV9wYC4KKyAgICAgIFRoaXMgbW9kaWZpY2F0 aW9uIGFsc28gcHJldmVudHMgZHJhd2luZyB0aGUgcmVhbCBjdXJzb3Igb24gdGhlIGZyaW5nZSAo aW5zdGVhZAorICAgICAgb2YgdXNpbmcgdGhlIGN1cnNvci1pbi1mcmluZ2UgYml0bWFwKSBpbiB0 aGUgYWJvdmUtbWVudGlvbmVkIGNpcmN1bXN0YW5jZS4KKyAgICAgIFNlZSB0aGUgZm9sbG93aW5n IHJlbGF0ZWQgcGF0Y2hlczoKKyAgICAgIC0gIEp1bHkgMTksIDIwMTY6ICBiZjVkZGRlZDcwYzEx ZWRhZjM1MTRiMjVkYTI3ZmM3MWNmYjhlOTY1CisgICAgICAtICBNYXkgMjEsIDIwMTY6ICBlNTAx NWM1ZDk2MzJhMGJmNjg1YzA5MzI0OWFlNGE3ZDNlODI1YjEzCisgICAgICBTZWUgdGhlIGZvbGxv d2luZyBidWcgcmVwb3J0czogICMxNjg1NiBhbmQgIzI5MjMzLiAqLworICAgICAgaW50IGZyYW1l X2NoYXJfd2lkdGggPSBGUkFNRV9DT0xVTU5fV0lEVEggKGYpOworICAgICAgaW50IHRleHRfYXJl YV93aWR0aCA9IHdpbmRvd19ib3hfd2lkdGggKHcsIFRFWFRfQVJFQSk7CisgICAgICBib29sIGN1 cnNvcl9pbl9mcmluZ2VfcCA9IHctPnBoeXNfY3Vyc29yLnggKyBmcmFtZV9jaGFyX3dpZHRoID49 IHRleHRfYXJlYV93aWR0aDsKKyAgICAgIGlmICgoZ2x5cGhfcm93LT5leGFjdF93aW5kb3dfd2lk dGhfbGluZV9wCisgICAgICAgICAgICAmJiB3LT5waHlzX2N1cnNvci5ocG9zID49IGdseXBoX3Jv dy0+dXNlZFtURVhUX0FSRUFdKQorICAgICAgICAgIHx8IGN1cnNvcl9pbl9mcmluZ2VfcCkKKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisKKwogICAgICAgICB7CiAgICAgICAgICAgZ2x5cGhf cm93LT5jdXJzb3JfaW5fZnJpbmdlX3AgPSAxOwogICAgICAgICAgIGRyYXdfZnJpbmdlX2JpdG1h cCAodywgZ2x5cGhfcm93LCAwKTsKQEAgLTMwODUsOCArMzExNCw0NyBAQCBOb3RlIHRoYXQgQ1VS U09SX1dJRFRIIGlzIG1lYW5pbmdmdWwgb25seSBmb3IgKGgpYmFyIGN1cnNvcnMuCiAKIAogICBm YWNlID0gRkFDRV9GUk9NX0lEX09SX05VTEwgKGYsIHBoeXNfY3Vyc29yX2dseXBoLT5mYWNlX2lk KTsKLSAgaWYgKGZhY2UgJiYgTlNfRkFDRV9CQUNLR1JPVU5EIChmYWNlKQotICAgICAgPT0gbnNf aW5kZXhfY29sb3IgKEZSQU1FX0NVUlNPUl9DT0xPUiAoZiksIGYpKQorCisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworLyogbXVsdGlwbGUgY3Vyc29ycyAqLworCisvKiBFWEFNUExFIE9GIEhP VyBUTyBMT09LLVVQIEEgQ09MT1I6CisgIGVudW0gZmFjZV9pZCBmYWNlX2lkID0gbG9va3VwX25h bWVkX2ZhY2UgKGYsIGludGVybiAoIistdmVydGljYWwtYmFyLWZhY2UiKSwgdHJ1ZSk7CisgIHN0 cnVjdCBmYWNlICpmYWNlID0gRkFDRV9GUk9NX0lEIChmLCBmYWNlX2lkKTsKKyAgTlNDb2xvciAq Y29sb3IgPSBuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9GT1JFR1JPVU5EIChmYWNl KSwgZik7CisqLworCisgIGlmIChFUSAoZmxhdm9yLCBRbWNfZ2x5cGgpCisgICAgICB8fCBFUSAo Zmxhdm9yLCBRbWNfZ2x5cGhsZXNzKQorICAgICAgfHwgRVEgKGZsYXZvciwgUW1jX2dseXBoX3Rh YikpCisgICAgeworICAgICAgTGlzcF9PYmplY3QgYnVmID0gdy0+Y29udGVudHM7CisgICAgICBD SEVDS19CVUZGRVIgKGJ1Zik7CisgICAgICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAoYnVm KTsKKyAgICAgIGJvb2wgcmVnaW9uX2FjdGl2ZV9wID0gKCFOSUxQIChWdHJhbnNpZW50X21hcmtf bW9kZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFOSUxQIChCVkFSIChiLCBt YXJrX2FjdGl2ZSkpKTsKKyAgICAgIHB0cmRpZmZfdCByZWdpb25fYmVnaW5uaW5nID0gKHJlZ2lv bl9hY3RpdmVfcCkgPyBYSU5UIChGcmVnaW9uX2JlZ2lubmluZyAoKSkgOiAtMTsKKyAgICAgIHB0 cmRpZmZfdCByZWdpb25fZW5kID0gKHJlZ2lvbl9hY3RpdmVfcCkgPyBYSU5UIChGcmVnaW9uX2Vu ZCAoKSkgOiAtMTsKKyAgICAgIGJvb2wgcmVnaW9uX3AgPSAocmVnaW9uX2FjdGl2ZV9wCisgICAg ICAgICAgICAgICAgICAgICAgICYmIFBUID49IHJlZ2lvbl9iZWdpbm5pbmcKKyAgICAgICAgICAg ICAgICAgICAgICAgJiYgUFQgPCByZWdpb25fZW5kKTsKKyAgICAgIGRvdWJsZSByZWQgPSBYRkxP QVRfREFUQSAoQVJFRiAoY29sb3JfdmVjdG9yLCAwKSk7CisgICAgICBkb3VibGUgZ3JlZW4gPSBY RkxPQVRfREFUQSAoQVJFRiAoY29sb3JfdmVjdG9yLCAxKSk7CisgICAgICBkb3VibGUgYmx1ZSA9 IFhGTE9BVF9EQVRBIChBUkVGIChjb2xvcl92ZWN0b3IsIDIpKTsKKyAgICAgIFtbTlNDb2xvciBj b2xvcldpdGhDYWxpYnJhdGVkUmVkOiByZWQgZ3JlZW46IGdyZWVuIGJsdWU6IGJsdWUgYWxwaGE6 IDEuMF0gc2V0XTsKKyAgICAgIGlmIChyZWdpb25fcCkKKyAgICAgICAgaG9sbG93X2NvbG9yID0g bnNfbG9va3VwX2luZGV4ZWRfY29sb3IgKE5TX0ZBQ0VfQkFDS0dST1VORCAoZmFjZSksIGYpOwor ICAgICAgICBlbHNlIGlmIChmYWNlICYmIE5TX0ZBQ0VfQkFDS0dST1VORCAoZmFjZSkgPT0gbnNf aW5kZXhfY29sb3IgKEZSQU1FX0NVUlNPUl9DT0xPUiAoZiksIGYpKQorICAgICAgICAgIGhvbGxv d19jb2xvciA9IEZSQU1FX0NVUlNPUl9DT0xPUiAoZik7CisgICAgICAvKiBGSVhNRTogIEFkZCBh IGNvbmRpdGlvbiBmb3IgYGhvbGxvd19jb2xvcmAgaWYgdGhlIHJlZ2lvbiBmb3JlZ3JvdW5kIGlz IHRoZQorICAgICAgc2FtZSBhcyB0aGUgZGVmYXVsdCBiYWNrZ3JvdW5kIGFuZCBjaG9vc2UgYW4g YXBwcm9wcmlhdGUgY29sb3IgaWYgc28uICovCisgICAgfQorICBlbHNlIGlmIChmYWNlICYmIE5T X0ZBQ0VfQkFDS0dST1VORCAoZmFjZSkKKyAgICAgICAgICAgPT0gbnNfaW5kZXhfY29sb3IgKEZS QU1FX0NVUlNPUl9DT0xPUiAoZiksIGYpKQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwog ICAgIHsKICAgICAgIFtuc19sb29rdXBfaW5kZXhlZF9jb2xvciAoTlNfRkFDRV9GT1JFR1JPVU5E IChmYWNlKSwgZikgc2V0XTsKICAgICAgIGhvbGxvd19jb2xvciA9IEZSQU1FX0NVUlNPUl9DT0xP UiAoZik7CkBAIC0zMTMzLDkgKzMyMDEsMTYgQEAgTm90ZSB0aGF0IENVUlNPUl9XSURUSCBpcyBt ZWFuaW5nZnVsIG9ubHkgZm9yIChoKWJhciBjdXJzb3JzLgogICAgIH0KICAgbnNfdW5mb2N1cyAo Zik7CiAKLSAgLyogZHJhdyB0aGUgY2hhcmFjdGVyIHVuZGVyIHRoZSBjdXJzb3IgKi8KLSAgaWYg KGN1cnNvcl90eXBlICE9IE5PX0NVUlNPUikKLSAgICBkcmF3X3BoeXNfY3Vyc29yX2dseXBoICh3 LCBnbHlwaF9yb3csIERSQVdfQ1VSU09SKTsKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyog bXVsdGlwbGUgY3Vyc29ycyAqLworCisgICAvKiBkcmF3IHRoZSBjaGFyYWN0ZXIgdW5kZXIgdGhl IGN1cnNvciAqLworICBpZiAoY3Vyc29yX3R5cGUgIT0gTk9fQ1VSU09SCisgICAgICAmJiAhRVEg KGZsYXZvciwgUW1jX2dseXBobGVzcykKKyAgICAgICYmICFFUSAoZmxhdm9yLCBRbWNfZ2x5cGhf dGFiKSkKKyAgICAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5cGhfcm93LCBEUkFXX0NV UlNPUik7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCiAjaWZkZWYgTlNfSU1QTF9DT0NP QQogICBOU0VuYWJsZVNjcmVlblVwZGF0ZXMgKCk7CmRpZmYgLS1naXQgYS9zcmMvdzMydGVybS5j IGIvc3JjL3czMnRlcm0uYwppbmRleCA3YzJkODZiLi5iMDc5MTM1IDEwMDY0NAotLS0gYS9zcmMv dzMydGVybS5jCisrKyBiL3NyYy93MzJ0ZXJtLmMKQEAgLTcwNSwxMCArNzA1LDEyIEBAIHhfdXBk YXRlX3dpbmRvd19lbmQgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgY3Vyc29yX29uX3AsCiAgICAg ewogICAgICAgYmxvY2tfaW5wdXQgKCk7CiAKLSAgICAgIGlmIChjdXJzb3Jfb25fcCkKLQlkaXNw bGF5X2FuZF9zZXRfY3Vyc29yICh3LCB0cnVlLAotCQkJCXctPm91dHB1dF9jdXJzb3IuaHBvcywg dy0+b3V0cHV0X2N1cnNvci52cG9zLAotCQkJCXctPm91dHB1dF9jdXJzb3IueCwgdy0+b3V0cHV0 X2N1cnNvci55KTsKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVsdGlwbGUgY3Vyc29y cyAqLworCisgICAgICBtY19wb3J0YWwgKHcsIGN1cnNvcl9vbl9wKTsKKworLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCiAKICAgICAgIGlmIChkcmF3X3dpbmRvd19mcmluZ2VzICh3LCB0cnVlKSkK IAl7CkBAIC05NzMsNyArOTc1LDExIEBAIHN0YXRpYyB2b2lkIHczMl9kcmF3X2JveF9yZWN0IChz dHJ1Y3QgZ2x5cGhfc3RyaW5nICosIGludCwgaW50LCBpbnQsIGludCwKIHN0YXRpYyB2b2lkCiB4 X3NldF9jdXJzb3JfZ2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMpCiB7Ci0gIGlmIChzLT5mb250 ID09IEZSQU1FX0ZPTlQgKHMtPmYpCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIG11bHRp cGxlIGN1cnNvcnMgKi8KKworICBzdHJ1Y3Qgd2luZG93ICp3ID0gZGVjb2RlX2xpdmVfd2luZG93 IChzZWxlY3RlZF93aW5kb3cpOworICBpZiAoKHMtPmZvbnQgPT0gRlJBTUVfRk9OVCAocy0+ZikK ICAgICAgICYmIHMtPmZhY2UtPmJhY2tncm91bmQgPT0gRlJBTUVfQkFDS0dST1VORF9QSVhFTCAo cy0+ZikKICAgICAgICYmIHMtPmZhY2UtPmZvcmVncm91bmQgPT0gRlJBTUVfRk9SRUdST1VORF9Q SVhFTCAocy0+ZikKICAgICAgIC8qIFNvbWV0aW1lcyB3ZSBhcmUgbm90IGNhbGxlZCBmb3IgZWFj aCBjaGFuZ2UgaW4gdGhlIGRlZmF1bHQKQEAgLTk4MSw2ICs5ODcsOSBAQCB4X3NldF9jdXJzb3Jf Z2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcgKnMpCiAJIHRlc3QgaW4gdGhlIG5leHQgbGluZSBnaXZl cyB1cyBhIGNoYW5jZSB0byByZXN5bmMuICAqLwogICAgICAgJiYgcy0+Zi0+b3V0cHV0X2RhdGEu dzMyLT5jdXJzb3JfZ2MtPmZvcmVncm91bmQgPT0gcy0+ZmFjZS0+YmFja2dyb3VuZAogICAgICAg JiYgIXMtPmNtcCkKKyAgICAgIHx8IHctPm1jLmN1cnNvcl9nY19kZWZhdWx0KQorCisvKiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KICAgICBzLT5nYyA9IHMtPmYtPm91dHB1dF9kYXRhLnczMi0+Y3Vy c29yX2djOwogICBlbHNlCiAgICAgewpAQCAtNTc0Niw3ICs1NzU1LDEzIEBAIHhfZHJhd19iYXJf Y3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfcm93ICpyb3csCiAJIGludmlz aWJsZS4gIFVzZSB0aGUgZ2x5cGgncyBmb3JlZ3JvdW5kIGNvbG9yIGluc3RlYWQgaW4gdGhpcwog CSBjYXNlLCBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBnbHlwaCdzIGNvbG9ycyBhcmUgY2hv c2VuIHNvCiAJIHRoYXQgdGhlIGdseXBoIGlzIGxlZ2libGUuICAqLwotICAgICAgaWYgKGZhY2Ut PmJhY2tncm91bmQgPT0gY3Vyc29yX2NvbG9yKQorLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisv KiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgICAgIGlmIChmYWNlLT5iYWNrZ3JvdW5kID09IGN1 cnNvcl9jb2xvcgorICAgICAgICAgICYmICF3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkp CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCWN1cnNvcl9jb2xvciA9IGZhY2UtPmZvcmVn cm91bmQ7CiAKICAgICAgIHggPSBXSU5ET1dfVEVYVF9UT19GUkFNRV9QSVhFTF9YICh3LCB3LT5w aHlzX2N1cnNvci54KTsKQEAgLTU4MjMsNyArNTgzOCwxMyBAQCB3MzJfY2xlYXJfZnJhbWVfYXJl YSAoc3RydWN0IGZyYW1lICpmLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCkK IHN0YXRpYyB2b2lkCiB3MzJfZHJhd193aW5kb3dfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBz dHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3csCiAJCQlpbnQgeCwgaW50IHksIGVudW0gdGV4dF9j dXJzb3Jfa2luZHMgY3Vyc29yX3R5cGUsCi0JCQlpbnQgY3Vyc29yX3dpZHRoLCBib29sIG9uX3As IGJvb2wgYWN0aXZlX3ApCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1 cnNvcnMgKi8KKworICBpbnQgY3Vyc29yX3dpZHRoLCBib29sIG9uX3AsIGJvb2wgYWN0aXZlX3As CisgIExpc3BfT2JqZWN0IGNvbG9yX3ZlY3RvciwgTGlzcF9PYmplY3QgZmxhdm9yKQorCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KIHsKICAgaWYgKG9uX3ApCiAgICAgewpAQCAtNTg4OCwzMSAr NTkwOSwxMTggQEAgdzMyX2RyYXdfd2luZG93X2N1cnNvciAoc3RydWN0IHdpbmRvdyAqdywgc3Ry dWN0IGdseXBoX3JvdyAqZ2x5cGhfcm93LAogCSAgcmV0dXJuOwogCX0KIAotICAgICAgc3dpdGNo IChjdXJzb3JfdHlwZSkKLQl7Ci0JY2FzZSBIT0xMT1dfQk9YX0NVUlNPUjoKLQkgIHhfZHJhd19o b2xsb3dfY3Vyc29yICh3LCBnbHlwaF9yb3cpOwotCSAgYnJlYWs7Ci0KLQljYXNlIEZJTExFRF9C T1hfQ1VSU09SOgotCSAgZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5cGhfcm93LCBEUkFX X0NVUlNPUik7Ci0JICBicmVhazsKLQotCWNhc2UgQkFSX0NVUlNPUjoKLQkgIHhfZHJhd19iYXJf Y3Vyc29yICh3LCBnbHlwaF9yb3csIGN1cnNvcl93aWR0aCwgQkFSX0NVUlNPUik7Ci0JICBicmVh azsKLQotCWNhc2UgSEJBUl9DVVJTT1I6Ci0JICB4X2RyYXdfYmFyX2N1cnNvciAodywgZ2x5cGhf cm93LCBjdXJzb3Jfd2lkdGgsIEhCQVJfQ1VSU09SKTsKLQkgIGJyZWFrOwotCi0JY2FzZSBOT19D VVJTT1I6Ci0JICB3LT5waHlzX2N1cnNvcl93aWR0aCA9IDA7Ci0JICBicmVhazsKKy8qICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLworLyogQkVHSU4gbXVsdGlwbGUgY3Vyc29ycyAqLworICBkb3VibGUg cmVkID0gWEZMT0FUX0RBVEEgKEFSRUYgKGNvbG9yX3ZlY3RvciwgMCkpOworICBkb3VibGUgZ3Jl ZW4gPSBYRkxPQVRfREFUQSAoQVJFRiAoY29sb3JfdmVjdG9yLCAxKSk7CisgIGRvdWJsZSBibHVl ID0gWEZMT0FUX0RBVEEgKEFSRUYgKGNvbG9yX3ZlY3RvciwgMikpOworICBzd2l0Y2ggKGN1cnNv cl90eXBlKQorICB7CisgICAgY2FzZSBIT0xMT1dfQk9YX0NVUlNPUjoKKyAgICB7CisgICAgICBp ZiAocmVkID49IDAgJiYgYmx1ZSA+PSAwICYmIGdyZWVuID49IDApCisgICAgICAgIC8qIFRlbXBv cmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwnLiAgKi8KKyAg ICAgICAgeworICAgICAgICAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1F ICh3KSk7CisgICAgICAgICAgQ09MT1JSRUYgb3JpZ192YWwgPSBmLT5vdXRwdXRfZGF0YS53MzIt PmN1cnNvcl9waXhlbDsKKyAgICAgICAgICBpbnQgaW50X3JlZCA9IHJlZCAqIDI1NTsKKyAgICAg ICAgICBpbnQgaW50X2dyZWVuID0gZ3JlZW4gKiAyNTU7CisgICAgICAgICAgaW50IGludF9ibHVl ID0gYmx1ZSAqIDI1NTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhl bCA9IFBBTEVUVEVSR0IgKGludF9yZWQsIGludF9ncmVlbiwgaW50X2JsdWUpOworICAgICAgICAg IHhfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBnbHlwaF9yb3cpOworICAgICAgICAgIGYtPm91dHB1 dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gb3JpZ192YWw7CisgICAgICAgIH0KKyAgICAgICAg ZWxzZQorICAgICAgICAgIHhfZHJhd19ob2xsb3dfY3Vyc29yICh3LCBnbHlwaF9yb3cpOworICAg ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgRklMTEVEX0JPWF9DVVJTT1I6CisgICAgeworICAg ICAgaWYgKHJlZCA+PSAwICYmIGJsdWUgPj0gMCAmJiBncmVlbiA+PSAwKQorICAgICAgICAvKiBU ZW1wb3JhcmlseSBoaWphY2sgYGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX2djJyBieSBib3Jy b3dpbmcgdGhlCisgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgYHhfbWFrZV9nYycgaW4gdzMyZm5z LmMuICAqLworICAgICAgICB7CisgICAgICAgICAgYmxvY2tfaW5wdXQgKCk7CisgICAgICAgICAg TGlzcF9PYmplY3Qgd2luZG93ID0gKHNlbGVjdGVkX3dpbmRvdyk7CisgICAgICAgICAgc3RydWN0 IHdpbmRvdyAqdyA9IGRlY29kZV9saXZlX3dpbmRvdyAod2luZG93KTsKKyAgICAgICAgICBzdHJ1 Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAodykpOworICAgICAgICAgIGludCBp bnRfcmVkID0gcmVkICogMjU1OworICAgICAgICAgIGludCBpbnRfZ3JlZW4gPSBncmVlbiAqIDI1 NTsKKyAgICAgICAgICBpbnQgaW50X2JsdWUgPSBibHVlICogMjU1OworICAgICAgICAgIFhHQ1Zh bHVlcyBnY192YWx1ZXM7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gR0NGb250IHwg R0NGb3JlZ3JvdW5kIHwgR0NCYWNrZ3JvdW5kOworICAgICAgICAgIENPTE9SUkVGIG9yaWdfdmFs X2EgPSBGUkFNRV9CQUNLR1JPVU5EX1BJWEVMIChmKTsKKyAgICAgICAgICBDT0xPUlJFRiBvcmln X3ZhbF9iID0gZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWw7CisgICAgICAgICAgZ2Nf dmFsdWVzLmZvbnQgPSBGUkFNRV9GT05UIChmKTsKKyAgICAgICAgICBnY192YWx1ZXMuZm9yZWdy b3VuZCA9IEZSQU1FX0JBQ0tHUk9VTkRfUElYRUwgKGYpOworICAgICAgICAgIGdjX3ZhbHVlcy5i YWNrZ3JvdW5kID0gUEFMRVRURVJHQiAoaW50X3JlZCwgaW50X2dyZWVuLCBpbnRfYmx1ZSk7Cisg ICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfZ2MKKyAgICAgICAgICAgID0gWENy ZWF0ZUdDIChOVUxMLCBGUkFNRV9XMzJfV0lORE9XIChmKSwgbWFzaywgJmdjX3ZhbHVlcyk7Cisg ICAgICAgICAgLyogV2hlbiBgdy0+bWMuY3Vyc29yX2djX2RlZmF1bHQgPSB0cnVlJywgZm9yY2Ug YHhfc2V0X2N1cnNvcl9nYycgdG8KKyAgICAgICAgICB1c2UgYHMtPmYtPm91dHB1dF9kYXRhLncz Mi0+Y3Vyc29yX2djJy4gICovCisgICAgICAgICAgdy0+bWMuY3Vyc29yX2djX2RlZmF1bHQgPSB0 cnVlOworICAgICAgICAgIGRyYXdfcGh5c19jdXJzb3JfZ2x5cGggKHcsIGdseXBoX3JvdywgRFJB V19DVVJTT1IpOworICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19kZWZhdWx0ID0gZmFsc2U7Cisg ICAgICAgICAgZ2NfdmFsdWVzLmZvbnQgPSBGUkFNRV9GT05UIChmKTsKKyAgICAgICAgICBnY192 YWx1ZXMuZm9yZWdyb3VuZCA9IG9yaWdfdmFsX2E7CisgICAgICAgICAgZ2NfdmFsdWVzLmJhY2tn cm91bmQgPSBvcmlnX3ZhbF9iOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29y X2djCisgICAgICAgICAgICA9IFhDcmVhdGVHQyAoTlVMTCwgRlJBTUVfVzMyX1dJTkRPVyAoZiks IG1hc2ssICZnY192YWx1ZXMpOworICAgICAgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgICAg IH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIGRyYXdfcGh5c19jdXJzb3JfZ2x5cGggKHcsIGds eXBoX3JvdywgRFJBV19DVVJTT1IpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQkFS X0NVUlNPUjoKKyAgICB7CisgICAgICBpZiAocmVkID49IDAgJiYgYmx1ZSA+PSAwICYmIGdyZWVu ID49IDApCisgICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEudzMy LT5jdXJzb3JfcGl4ZWwnLiAgKi8KKyAgICAgICAgeworICAgICAgICAgIHN0cnVjdCBmcmFtZSAq ZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7CisgICAgICAgICAgQ09MT1JSRUYgb3JpZ192 YWwgPSBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhlbDsKKyAgICAgICAgICBpbnQgaW50 X3JlZCA9IHJlZCAqIDI1NTsKKyAgICAgICAgICBpbnQgaW50X2dyZWVuID0gZ3JlZW4gKiAyNTU7 CisgICAgICAgICAgaW50IGludF9ibHVlID0gYmx1ZSAqIDI1NTsKKyAgICAgICAgICBmLT5vdXRw dXRfZGF0YS53MzItPmN1cnNvcl9waXhlbCA9IFBBTEVUVEVSR0IgKGludF9yZWQsIGludF9ncmVl biwgaW50X2JsdWUpOworICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19pbnZpc2libGVfb2theSA9 IHRydWU7CisgICAgICAgICAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3JvdywgY3Vyc29y X3dpZHRoLCBCQVJfQ1VSU09SKTsKKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxl X29rYXkgPSBmYWxzZTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS53MzItPmN1cnNvcl9waXhl bCA9IG9yaWdfdmFsOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICB4X2RyYXdf YmFyX2N1cnNvciAodywgZ2x5cGhfcm93LCBjdXJzb3Jfd2lkdGgsIEJBUl9DVVJTT1IpOworICAg ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgSEJBUl9DVVJTT1I6CisgICAgeworICAgICAgaWYg KHJlZCA+PSAwICYmIGJsdWUgPj0gMCAmJiBncmVlbiA+PSAwKQorICAgICAgICAvKiBUZW1wb3Jh cmlseSBoaWphY2sgYGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsJy4gICovCisgICAg ICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKFdJTkRPV19GUkFNRSAo dykpOworICAgICAgICAgIENPTE9SUkVGIG9yaWdfdmFsID0gZi0+b3V0cHV0X2RhdGEudzMyLT5j dXJzb3JfcGl4ZWw7CisgICAgICAgICAgaW50IGludF9yZWQgPSByZWQgKiAyNTU7CisgICAgICAg ICAgaW50IGludF9ncmVlbiA9IGdyZWVuICogMjU1OworICAgICAgICAgIGludCBpbnRfYmx1ZSA9 IGJsdWUgKiAyNTU7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEudzMyLT5jdXJzb3JfcGl4ZWwg PSBQQUxFVFRFUkdCIChpbnRfcmVkLCBpbnRfZ3JlZW4sIGludF9ibHVlKTsKKyAgICAgICAgICB3 LT5tYy5jdXJzb3JfZ2NfaW52aXNpYmxlX29rYXkgPSB0cnVlOworICAgICAgICAgIHhfZHJhd19i YXJfY3Vyc29yICh3LCBnbHlwaF9yb3csIGN1cnNvcl93aWR0aCwgSEJBUl9DVVJTT1IpOworICAg ICAgICAgIHctPm1jLmN1cnNvcl9nY19pbnZpc2libGVfb2theSA9IGZhbHNlOworICAgICAgICAg IGYtPm91dHB1dF9kYXRhLnczMi0+Y3Vyc29yX3BpeGVsID0gb3JpZ192YWw7CisgICAgICAgIH0K KyAgICAgICAgZWxzZQorICAgICAgICAgIHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlwaF9yb3cs IGN1cnNvcl93aWR0aCwgSEJBUl9DVVJTT1IpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh c2UgTk9fQ1VSU09SOgorICAgICAgdy0+cGh5c19jdXJzb3Jfd2lkdGggPSAwOworICAgICAgYnJl YWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGVtYWNzX2Fib3J0ICgpOworICB9CisvKiBFTkQgbXVs dGlwbGUgY3Vyc29ycyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiAKLQlkZWZhdWx0Ogot CSAgZW1hY3NfYWJvcnQgKCk7Ci0JfQogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEvc3JjL3dpbmRv dy5jIGIvc3JjL3dpbmRvdy5jCmluZGV4IDUwNGRjZDMuLjhkYWVlMzUgMTAwNjQ0Ci0tLSBhL3Ny Yy93aW5kb3cuYworKysgYi9zcmMvd2luZG93LmMKQEAgLTY3ODksNiArNjc4OSwyNyBAQCBnZXRf cGh5c19jdXJzb3JfZ2x5cGggKHN0cnVjdCB3aW5kb3cgKncpCiAgIHN0cnVjdCBnbHlwaCAqZ2x5 cGg7CiAgIGludCBocG9zID0gdy0+cGh5c19jdXJzb3IuaHBvczsKIAorLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKy8qIFRoaXMgbW9kaWZpY2F0aW9u IGVuYWJsZXMgcGxhY2VtZW50IG9mIHRoZSBjdXJzb3ItaW4tZnJpbmdlIGJpdG1hcCB3aGVuCit0 aGUgd2luZG93LXdpZHRoIGlzIHNsaWdodGx5IGxlc3MgdGhhbiBgZ2x5cGhfcm93LT5leGFjdF93 aW5kb3dfd2lkdGhfbGluZV9wYC4KK1RoaXMgbW9kaWZpY2F0aW9uIGFsc28gcHJldmVudHMgZHJh d2luZyB0aGUgcmVhbCBjdXJzb3Igb24gdGhlIGZyaW5nZSAoaW5zdGVhZAorb2YgdXNpbmcgdGhl IGN1cnNvci1pbi1mcmluZ2UgYml0bWFwKSBpbiB0aGUgYWJvdmUtbWVudGlvbmVkIGNpcmN1bXN0 YW5jZS4KK1NlZSB0aGUgZm9sbG93aW5nIHJlbGF0ZWQgcGF0Y2hlczoKKy0gIEp1bHkgMTksIDIw MTY6ICBiZjVkZGRlZDcwYzExZWRhZjM1MTRiMjVkYTI3ZmM3MWNmYjhlOTY1CistICBNYXkgMjEs IDIwMTY6ICBlNTAxNWM1ZDk2MzJhMGJmNjg1YzA5MzI0OWFlNGE3ZDNlODI1YjEzCitTZWUgdGhl IGZvbGxvd2luZyBidWcgcmVwb3J0czogICMxNjg1NiBhbmQgIzI5MjMzLiAqLworCisgIHN0cnVj dCBmcmFtZSAqZiA9IFhGUkFNRSAody0+ZnJhbWUpOworICBpbnQgZnJhbWVfY2hhcl93aWR0aCA9 IEZSQU1FX0NPTFVNTl9XSURUSCAoZik7CisgIGludCB0ZXh0X2FyZWFfd2lkdGggPSB3aW5kb3df Ym94X3dpZHRoICh3LCBURVhUX0FSRUEpOworICBib29sIGN1cnNvcl9pbl9mcmluZ2VfcCA9IHct PnBoeXNfY3Vyc29yLnggKyBmcmFtZV9jaGFyX3dpZHRoID49IHRleHRfYXJlYV93aWR0aDsKKyAg aWYgKGN1cnNvcl9pbl9mcmluZ2VfcCkKKyAgICByZXR1cm4gTlVMTDsKKworLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisKICAgaWYgKCEody0+cGh5c19jdXJzb3IudnBvcyA+PSAwCiAJJiYgdy0+ cGh5c19jdXJzb3IudnBvcyA8IHctPmN1cnJlbnRfbWF0cml4LT5ucm93cykpCiAgICAgcmV0dXJu IE5VTEw7CmRpZmYgLS1naXQgYS9zcmMvd2luZG93LmggYi9zcmMvd2luZG93LmgKaW5kZXggNTYz YTZmNi4uNmIzYzlkNSAxMDA2NDQKLS0tIGEvc3JjL3dpbmRvdy5oCisrKyBiL3NyYy93aW5kb3cu aApAQCAtNzYsNiArNzYsMzkgQEAgb25lIGFuZCB0aGUgc2FtZSwgc28gaXRzIHByZXYgYW5kIG5l eHQgbWVtYmVycyBhcmUgbmlsLgogCiBBIGRlYWQgd2luZG93IGhhcyBpdHMgY29udGVudHMgZmll bGQgc2V0IHRvIG5pbC4gICovCiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogQkVHSU4g bXVsdGlwbGUgY3Vyc29ycyAqLworCisvKiBTdWZmaXhlcyBmb3IgdGhlIGBtY2Agd2luZG93IHBv aW50ZXIgcHJlZml4LiAqLworc3RydWN0IG11bHRpcGxlX2N1cnNvcnMKK3sKKyAgLyogVmFsdWVz IGZvciBwcmV2aW91cyBhbmQgY3VycmVudCBgd2luZG93LXN0YXJ0JyBhbmQgYHdpbmRvdy1lbmQn LiAqLworICBFTUFDU19JTlQgY3VycmVudF9zdGFydCwgY3VycmVudF9lbmQsIHByZXZpb3VzX3N0 YXJ0LCBwcmV2aW91c19lbmQsIGN1cnJlbnRfeCwgcHJldmlvdXNfeDsKKworICAvKiBUcnVlIG1l YW5zIHRvIGZvcmNlIGB4X3NldF9jdXJzb3JfZ2MnIHRvIHVzZSBgcy0+Zi0+b3V0cHV0X2RhdGEu dzMyLT5jdXJzb3JfZ2MnCisgIGluIHczMnRlcm0uYyBvciBgcy0+Zi0+b3V0cHV0X2RhdGEueC0+ Y3Vyc29yX2djJyBpbiB4dGVybS5jLiAqLworICBib29sX2JmIGN1cnNvcl9nY19kZWZhdWx0IDog MTsKKworICAvKiBUcnVlIG1lYW5zIGB4X3NldF9jdXJzb3JfZ2MnIHNob3VsZCBwZXJtaXQgdGhl IGZvcmVncm91bmQgYW5kIGJhY2tncm91bmQKKyAgY29sb3JzIHRvIGJlIHRoZSBzYW1lLiAgVGhl IGRlZmF1bHQgYmVoYXZpb3IgZGlzYWxsb3dzIGFuIGludmlzaWJsZSByZXN1bHQuICovCisgIGJv b2xfYmYgY3Vyc29yX2djX2ludmlzaWJsZV9va2F5IDogMTsKKworICAvKiBUcnVlIG1lYW5zIGBt Y19jYWxjJyBoYXMgbm90IHJ1biB5ZXQgZHJhd24gZ2x5cGggZmFrZSBjdXJzb3JzLiAqLworICBi b29sX2JmIGRyYXdfZ2x5cGhfY3Vyc29yIDogMTsKKworICAvKiBUcnVlIG1lYW5zIGBtY19jYWxj JyBoYXMgbm90IHJ1biB5ZXQgZXJhc2VkIGdseXBoIGZha2UgY3Vyc29ycy4gKi8KKyAgYm9vbF9i ZiBlcmFzZV9nbHlwaF9jdXJzb3IgOiAxOworCisgIC8qIFRydWUgbWVhbnMgY3Jvc3NoYWlycyBo YXZlIG5vdCB5ZXQgYmVlbiBkcmF3bi4gKi8KKyAgYm9vbF9iZiBkcmF3X2Nyb3NzaGFpcnMgOiAx OworCisgIC8qIFRydWUgbWVhbnMgY3Jvc3NoYWlycyBoYXZlIG5vdCB5ZXQgYmVlbiBlcmFzZWQu ICovCisgIGJvb2xfYmYgZXJhc2VfY3Jvc3NoYWlycyA6IDE7Cit9OworCisvKiBFTkQgbXVsdGlw bGUgY3Vyc29ycyAqLworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKIHN0cnVjdCBjdXJzb3Jf cG9zCiB7CiAgIC8qIFBpeGVsIHBvc2l0aW9uLiAgVGhlc2UgYXJlIGFsd2F5cyB3aW5kb3cgcmVs YXRpdmUuICAqLwpAQCAtMTc4LDYgKzIxMSwyMCBAQCBzdHJ1Y3Qgd2luZG93CiAgICAgLyogQW4g YWxpc3Qgd2l0aCBwYXJhbWV0ZXJzLiAgKi8KICAgICBMaXNwX09iamVjdCB3aW5kb3dfcGFyYW1l dGVyczsKIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICov CisKKyAgICAvKiBUaGUgY2FjaGUgZm9yIG11bHRpcGxlIGdseXBoIGN1cnNvcnMuICBGb3IgYW4g ZXhhbXBsZSBvZiB0aGUgc3RydWN0dXJlIG9mCisgICAgdGhlIGxpc3QsIHNlZSB0aGUgY29tbWVu dHMgYXQgdGhlIGJlZ2lubmluZyBvZiBgbWNfY2FsYycgaW4geGRpc3AuYy4gICovCisgICAgTGlz cF9PYmplY3QgbWNfZ2x5cGhfY2FjaGU7CisKKyAgICAvKiBUaGUgY2FjaGUgZm9yIG11bHRpcGxl IGdseXBoL2dseXBobGVzcyBjdXJzb3JzIHRoYXQgZm9ybSBjcm9zc2hhaXJzLiAgRm9yIGFuCisg ICAgZXhhbXBsZSBvZiB0aGUgc3RydWN0dXJlIG9mIHRoZSBsaXN0LCBzZWUgdGhlIGNvbW1lbnRz IGF0IHRoZSBiZWdpbm5pbmcgb2YKKyAgICBgbWNfY3Jvc3NoYWlycycgaW4geGRpc3AuYy4gICov CisgICAgTGlzcF9PYmplY3QgY3Jvc3NoYWlyc19jYWNoZTsKKworLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCisKICAgICAvKiBObyBMaXNwIGRhdGEgbWF5IGZvbGxvdyBiZWxvdyB0aGlzIHBvaW50 IHdpdGhvdXQgY2hhbmdpbmcKICAgICAgICBtYXJrX29iamVjdCBpbiBhbGxvYy5jLiAgVGhlIG1l bWJlciBjdXJyZW50X21hdHJpeCBtdXN0IGJlIHRoZQogICAgICAgIGZpcnN0IG5vbi1MaXNwIG1l bWJlci4gICovCkBAIC0yODAsNiArMzI3LDE0IEBAIHN0cnVjdCB3aW5kb3cKIAogI2lmZGVmIEhB VkVfV0lORE9XX1NZU1RFTQogCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxl IGN1cnNvcnMgKi8KKworICAgIC8qIFRoZSBwcmVmaXggZm9yIHdpbmRvdyBwb2ludGVycyByZWxh dGluZyB0byBtdWx0aXBsZSBjdXJzb3JzLiAgKi8KKyAgICBzdHJ1Y3QgbXVsdGlwbGVfY3Vyc29y cyBtYzsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKICAgICAvKiBDdXJzb3IgdHlwZSBv ZiBsYXN0IGN1cnNvciBkcmF3biBvbiB0aGUgd2luZG93LiAgKi8KICAgICBlbnVtIHRleHRfY3Vy c29yX2tpbmRzIHBoeXNfY3Vyc29yX3R5cGU7CiAKQEAgLTQxOCw2ICs0NzMsMjMgQEAgWFdJTkRP VyAoTGlzcF9PYmplY3QgYSkKICAgcmV0dXJuIFhVTlRBRyAoYSwgTGlzcF9WZWN0b3JsaWtlKTsK IH0KIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisK K0lOTElORSB2b2lkCit3c2V0X21jX2dseXBoX2NhY2hlIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNw X09iamVjdCB2YWwpCit7CisgIHctPm1jX2dseXBoX2NhY2hlID0gdmFsOworfQorCitJTkxJTkUg dm9pZAord3NldF9jcm9zc2hhaXJzX2NhY2hlIChzdHJ1Y3Qgd2luZG93ICp3LCBMaXNwX09iamVj dCB2YWwpCit7CisgIHctPmNyb3NzaGFpcnNfY2FjaGUgPSB2YWw7Cit9CisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworCiAvKiBNb3N0IGNvZGUgc2hvdWxkIHVzZSB0aGVzZSBmdW5jdGlvbnMg dG8gc2V0IExpc3AgZmllbGRzIGluIHN0cnVjdAogICAgd2luZG93LiAgKi8KIElOTElORSB2b2lk CmRpZmYgLS1naXQgYS9zcmMveGRpc3AuYyBiL3NyYy94ZGlzcC5jCmluZGV4IGY2ZTk4ZGEuLjI4 ZjI4MWYgMTAwNjQ0Ci0tLSBhL3NyYy94ZGlzcC5jCisrKyBiL3NyYy94ZGlzcC5jCkBAIC05MDcs NiArOTA3LDE1NDYgQEAgc3RhdGljIHZvaWQgcHJvZHVjZV9zcGVjaWFsX2dseXBocyAoc3RydWN0 IGl0ICosIGVudW0gZGlzcGxheV9lbGVtZW50X3R5cGUpOwogc3RhdGljIHZvaWQgc2hvd19tb3Vz ZV9mYWNlIChNb3VzZV9ITEluZm8gKiwgZW51bSBkcmF3X2dseXBoc19mYWNlKTsKIHN0YXRpYyBi b29sIGNvb3Jkc19pbl9tb3VzZV9mYWNlX3AgKHN0cnVjdCB3aW5kb3cgKiwgaW50LCBpbnQpOwog CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIEJFR0lOIG11bHRpcGxlIGN1cnNvcnMgKi8K KworLyogTVVMVElQTEUgQ1VSU09SUzogIEVtYWNzIEJ1ZyAjMjI4NzMgKGZlYXR1cmUgcmVxdWVz dCkKKworICAgQ1JPU1NIQUlSUzogIEVtYWNzIEJ1ZyAjMTc2ODQgKGZlYXR1cmUgcmVxdWVzdCkK KworUEFUQ0ggVkVSU0lPTjogIDAxMQorQXBwbHkgcGF0Y2ggdG8gbWFzdGVyIGJyYW5jaCAoMDMv MjgvMjAxNik6ICBhMzBlN2UxMmVkODQ2NWUyNTY1ZGQzMThkOTIxYmM4N2Y1MmNlMThlCitnaXQg cmVzZXQgLS1oYXJkIGEzMGU3ZTEyZWQ4NDY1ZTI1NjVkZDMxOGQ5MjFiYzg3ZjUyY2UxOGUKKwor RVhBTVBMRSAjMTogIChzZXRxIG1jLWdseXBoLWxpc3QgJygoMSAiaGJhciIgIm1hZ2VudGEiKQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMiAiYmFyIiAicHVycGxlIikKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKDMgImJveCIgIiMwMEZGMDAiKQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoNCAiaG9sbG93IiAiIzAwMDBGRiIpCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICg1ICgiaGJhciIgMykgWzEuMCAwLjAgMS4wXSkKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKDYgKCJiYXIiIDMpIFswLjAgMS4wIDEuMF0pKSkKKworRVhBTVBMRSAjMjog IChzZXRxIG1jLWdseXBoLWxpc3QgbmlsKQorCitUT0RPOgorCistICBTZXQgdXAgYSB1c2VyIG9w dGlvbiBzaW1pbGFyIHRvIGBjdXJzb3ItaW4tbm9uLXNlbGVjdGVkLXdpbmRvd3MnLgorCistICBF eHBsb3JlIHRoZSBpZGVhIG9mIHdoZXRoZXIgd2UgbmVlZCBhZGRpdGlvbmFsIGNvZGUgdG8gaGFu ZGxlIHJlbW92aW5nL3JlZHJhd2luZworICAgZmFrZSBjdXJzb3JzIHdoZW4gd2luZG93cyBjaGFu Z2Ugc2l6ZXMgLyBsYXlvdXRzLgorCistICBGYWtlIGN1cnNvcnMgYXJlIGJlaW5nIHJlZHJhd24g dG9vIG9mdGVuIHdoZW4gbW91c2luZyBvdmVyIHRleHQgKHVuZGVybmVhdGggdGhlCisgICByZWFs IGN1cnNvcikgd2l0aCBtb3VzZS1mYWNlIHByb3BlcnRpZXMsIGFuZCBhbHNvIHdoZW4gbm9uLXNl bGVjdGVkIHdpbmRvd3MvZnJhbWVzCisgICBoYXZlIGFuIG9uZ29pbmcgcHJvY2VzcyB0aGF0IHJl cXVpcmUgZnJlcXVlbnQgcmVkaXNwbGF5IHVwZGF0ZXMuCisKKy0gIE9wdGltaXplIGRyYXdpbmcv ZXJhc2luZyBmYWtlIGN1cnNvcnMuCisKKy0gIEltcGxlbWVudCBhIHdheSB0byBwcm9wZXJseSBj YWxjdWxhdGUgWCwgWSwgSFBPUywgVlBPUyB3aGVuIGRlYWxpbmcgd2l0aCBvdmVybGF5cworICAg dGV4dCBwcm9wZXJ0aWVzLCBjb21wb3NpdGlvbiBjaGFyYWN0ZXJzLCB0YWJzLCBldGMuCisKKy0g IEltcGxlbWVudCBhIHRlc3QgZm9yIGNyb3NzaGFpcnMgdG8gc2VlIGlmIHRoZSBidWZmZXIgdXNl cyBtb25vc3BhY2UgdmVyc3VzCisgICBwcm9wb3J0aW9uYWwgZm9udHMsIGFuZCBzdXBwcmVzcyBj cm9zc2hhaXJzIHdoZW4gdGhlIGxhdHRlci4KKworLSAgSW1wbGVtZW50IGZ1bmN0aW9uYWxpdHkg c2ltaWxhciB0byB0aGUgbXVsdGlwbGUgY3Vyc29ycyBsaWJyYXJ5IGJ5IE1hZ25hciBTdmVlbi4K KworTEVHRU5ECisKK2ZwcmludGYgKHN0ZGVyciwgInN0cmluZzogJXMgfCBpbnQ6ICVkXG4iLCBT U0RBVEEgKGJ1aWxkX3N0cmluZyAoImZvbyIpKSwgNjkpOworCitpZiAoQlVGRkVSUCAody0+Y29u dGVudHMpICYmIFNUUklOR1AgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbmFtZSkpKQor ICBmcHJpbnRmIChzdGRlcnIsICJuc191cGRhdGVfd2luZG93X2VuZDogICVzXG4iLCBTU0RBVEEg KEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbmFtZSkpKTsKKworQVVUT19TVFJJTkcgKG15 X3N0cmluZ19vbmUsICJUaGlzIGlzIHRoZSB2YWx1ZSBvZiBgbXlfb2JqZWN0X29uZSc6ICAlcyIp OworTGlzcF9PYmplY3QgbXlfb2JqZWN0X29uZSA9IG1ha2VfZmxvYXQgKDAuMSk7CitDQUxMTiAo Rm1lc3NhZ2UsIG15X3N0cmluZ19vbmUsIG15X29iamVjdF9vbmUpOworCitBVVRPX1NUUklORyAo bXlfc3RyaW5nX3R3bywgIlRoaXMgaXMgdGhlIHZhbHVlIG9mIGBteV9vYmplY3RfdHdvJzogICVz Iik7CitMaXNwX09iamVjdCBteV9vYmplY3RfdHdvID0gbWFrZV9udW1iZXIgKDc3Nyk7CitDQUxM TiAoRm1lc3NhZ2UsIG15X3N0cmluZ190d28sIG15X29iamVjdF90d28pOworCitXSU5ET1c6ICB3 LT5jb250ZW50cworCitCVUZGRVI6ICBYQlVGRkVSICh3LT5jb250ZW50cykKKworQlVGRkVSIExP Q0FMIFZBUklBQkxFOiAgQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCB2YXJpYWJsZV9uYW1l KQorCitOTyBOQVJST1dJTkc6CisKK0JFRyA9PSBCZWdpbm5pbmcgb2YgQnVmZmVyICh3aW5kb3cg ZGlzcGxheXMgY3VycmVudCBidWZmZXIpCisKK1pWID09IEVuZCBvZiBCdWZmZXIgKHdpbmRvdyBk aXNwbGF5cyBjdXJyZW50IGJ1ZmZlcikKKworQkVHX0JZVEUgPT0gQmVnaW5uaW5nIEJ5dGUgb2Yg QnVmZmVyCisKK1pfQllURSA9PSBFbmRpbmcgQnl0ZSBvZiBCdWZmZXIKKworTkFSUk9XRUQgLS0g IlYiOgorCitCRUdWID09IEJlZ2lubmluZyBvZiBOQVJST1dFRCBCdWZmZXIgKHdpbmRvdyBkaXNw bGF5cyBjdXJyZW50IGJ1ZmZlcikKKworWlYgPT0gRW5kIG9mIE5BUlJPV0VEIEJ1ZmZlciAod2lu ZG93IGRpc3BsYXlzIGN1cnJlbnQgYnVmZmVyKQorCitCRUdWX0JZVEUgPT0gQmVnaW5uaW5nIEJ5 dGUgb2YgTkFSUk9XRUQgQnVmZmVyCisKK1pWX0JZVEUgPT0gRW5kaW5nIEJ5dGUgb2YgTkFSUk9X RUQgYnVmZmVyCisKK1dJTkRPVyBET0VTIE5PVCBORUNFU1NBUklMWSBESVNQTEFZIEJVRkZFUjoK KworYm9iX2Rpc3JlZ2FyZF9uYXJyb3cgPSBCVUZfQkVHIChidWZmZXIpCitlb2JfZGlzcmVnYXJk X25hcnJvdyA9IEJVRl9aIChidWZmZXIpCisKK2JvYl9yZXNwZWN0X25hcnJvdyA9IEJVRl9CRUdW IChidWZmZXIpCitlb2JfcmVzcGVjdF9uYXJyb3cgPSBCVUZfWlYgKGJ1ZmZlcikKKword2luZG93 X3N0YXJ0ID0gbWFya2VyX3Bvc2l0aW9uICh3LT5zdGFydCkKK3dpbmRvd19lbmQgPSBlb2JfZGlz cmVnYXJkX25hcnJvdyAtIHctPndpbmRvd19lbmRfcG9zCisKK2J1ZmZlcl9zaXplID0gZW9iX2Rp c3JlZ2FyZF9uYXJyb3cgLSBib2JfZGlzcmVnYXJkX25hcnJvdworCitidWZmZXJfbmFycm93ZWRf cCA9IChlb2JfcmVzcGVjdF9uYXJyb3cgLSBib2JfcmVzcGVjdF9uYXJyb3cgIT0gYnVmZmVyX3Np emUpCisKK3dpbmRvd19jb250ZW50c192aXNpYmxlX3AgPSAoYm9iX3Jlc3BlY3RfbmFycm93ID09 IHdpbmRvd19zdGFydAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBlb2JfcmVzcGVj dF9uYXJyb3cgPT0gd2luZG93X2VuZCkKKworVGhpcyBpcyB0aGUgQyBbdGVybmFyeSBvcGVyYXRv cl1bMV0gKE9iamVjdGl2ZS1DIGlzIGEgc3VwZXJzZXQgb2YgQyk6CisKKyAgICBsYWJlbC5mcmFt ZSA9IChpblBzZXVkb0VkaXRNb2RlKSA/IGtMYWJlbEluZGVudGVkUmVjdCA6IGtMYWJlbFJlY3Q7 CisKK2lzIHNlbWFudGljYWxseSBlcXVpdmFsZW50IHRvCisKKyAgICBpZihpblBzZXVkb0VkaXRN b2RlKSB7CisgICAgIGxhYmVsLmZyYW1lID0ga0xhYmVsSW5kZW50ZWRSZWN0OworICAgIH0gZWxz ZSB7CisgICAgIGxhYmVsLmZyYW1lID0ga0xhYmVsUmVjdDsKKyAgICB9CisKK1RoZSB0ZXJuYXJ5 IHdpdGggbm8gZmlyc3QgZWxlbWVudCAoZS5nLiBgdmFyaWFibGUgPzogYW5vdGhlclZhcmlhYmxl YCkgbWVhbnMgdGhlIHNhbWUgYXMgYCh2YWxPclZhciAhPSAwKSA/IHZhbE9yVmFyIDogYW5vdGhl clZhbE9yVmFyYAorCitFQVNTRVJUOgorCisgIGVhc3NlcnQgKEJVRl9CRUcgKGIpIDw9IGNoYXJw b3MgJiYgY2hhcnBvcyA8PSBCVUZfWiAoYikpOworICBib29sIGJhcmZfY3Jhc2ggPSAoQlVGX0JF RyAoYikgPD0gWlYgJiYgWlYgPD0gQlVGX1ogKGIpKSA/IGZhbHNlIDogdHJ1ZTsgKi8KKworI2lu Y2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxmdG9hc3RyLmg+CisjaW5jbHVkZSA8bWF0aC5oPgor CisjZGVmaW5lIE5PX0ZSSU5HRV9CSVRNQVAgMAorCisvKiBGdW5jdGlvbiBwcm90b3R5cGVzLiAg Ki8KKworc3RhdGljIHZvaWQgZGVidWdfbWV0aG9kX2FkZCAoc3RydWN0IHdpbmRvdyAqLCBjaGFy IGNvbnN0ICosIC4uLik7CisKK3N0YXRpYyBib29sIGhzY3JvbGxpbmdfY3VycmVudF9saW5lX3Ag KHN0cnVjdCB3aW5kb3cgKncpOworCitzdGF0aWMgaW50IHdpbmRvd19oc2Nyb2xsX2xpbWl0ZWQg KHN0cnVjdCB3aW5kb3cgKncsIHN0cnVjdCBmcmFtZSAqZik7CisKK3N0YXRpYyB2b2lkIHBpbnQy c3RyIChyZWdpc3RlciBjaGFyICosIHJlZ2lzdGVyIGludCwgcmVnaXN0ZXIgcHRyZGlmZl90KTsK KworLyogVGhpcyBpcyBtZWFudCB0byBiZSB1c2VkIHdoZW4gdGFyZ2V0IGlzIHZpc2libGUgYW5k IHdoZW4gY29kZSBpcyBzYW5kd2ljaGVkOgorICAgICB1cGRhdGVfYmVnaW4gKGYpOworICAgICBi bG9ja19pbnB1dCAoKTsKKyAgICAgbWNfZXJhc2VfZ2x5cGhfY3Vyc29yICh3LCB4LCB5LCBocG9z LCB2cG9zLCBjdXJzb3JfdHlwZSk7CisgICAgIHVuYmxvY2tfaW5wdXQgKCk7CisgICAgIHVwZGF0 ZV9lbmQgKGYpOyAqLworc3RhdGljIHZvaWQKK21jX2VyYXNlX2dseXBoX2N1cnNvciAoc3RydWN0 IHdpbmRvdyAqdywgcHRyZGlmZl90IHgsIHB0cmRpZmZfdCB5LCBwdHJkaWZmX3QgaHBvcywKKyAg ICAgICAgICAgICAgICAgICAgICAgcHRyZGlmZl90IHZwb3MsIGVudW0gdGV4dF9jdXJzb3Jfa2lu ZHMgY3Vyc29yX3R5cGUpCit7CisgIC8qIGBtYXRyaXhfcm93JyBpbiBgZGlzcG5ldy5jYCBjb250 YWlucyB0aGUgZm9sbG93aW5nIHRlc3RzLAorICBlYXNzZXJ0IChtYXRyaXggJiYgbWF0cml4LT5y b3dzKTsKKyAgZWFzc2VydCAocm93ID49IDAgJiYgcm93IDwgbWF0cml4LT5ucm93cyk7ICovCisg IGJvb2wgYmFyZl9jcmFzaF9vbmUgPSAody0+Y3VycmVudF9tYXRyaXggJiYgdy0+Y3VycmVudF9t YXRyaXgtPnJvd3MpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF9vbmUpCisgICAg cmV0dXJuOworICBib29sIGJhcmZfY3Jhc2hfdHdvID0gKHZwb3MgPj0gMCAmJiB2cG9zIDwgdy0+ Y3VycmVudF9tYXRyaXgtPm5yb3dzKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2hf dHdvKQorICAgIHJldHVybjsKKyAgaWYgKHggPCAwCisgICAgICB8fCB5IDwgMAorICAgICAgfHwg aHBvcyA8IDAKKyAgICAgIHx8IHZwb3MgPCAwKQorICAgIHJldHVybjsKKyAgLyogUmVjb3JkIHRo ZSBjdXJyZW50IHZhbHVlcyBmb3Igdy0+cGh5c19jdXJzb3IuICovCisgIHB0cmRpZmZfdCBvcmln aW5hbF94ID0gdy0+cGh5c19jdXJzb3IueDsKKyAgcHRyZGlmZl90IG9yaWdpbmFsX3kgPSB3LT5w aHlzX2N1cnNvci55OworICBwdHJkaWZmX3Qgb3JpZ2luYWxfaHBvcyA9IHctPnBoeXNfY3Vyc29y Lmhwb3M7CisgIHB0cmRpZmZfdCBvcmlnaW5hbF92cG9zID0gdy0+cGh5c19jdXJzb3IudnBvczsK KyAgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBvcmlnaW5hbF9jdXJzb3JfdHlwZSA9IHctPnBoeXNf Y3Vyc29yX3R5cGU7CisgIC8qIEhpamFjayB3LT5waHlzX2N1cnNvciBieSBzZXR0aW5nIG5ldyB2 YWx1ZXMuICovCisgIHctPnBoeXNfY3Vyc29yLnggPSB4OworICB3LT5waHlzX2N1cnNvci55ID0g eTsKKyAgdy0+cGh5c19jdXJzb3IuaHBvcyA9IGhwb3M7CisgIHctPnBoeXNfY3Vyc29yLnZwb3Mg PSB2cG9zOworICB3LT5waHlzX2N1cnNvcl90eXBlID0gY3Vyc29yX3R5cGU7CisgIGVyYXNlX3Bo eXNfY3Vyc29yICh3KTsKKyAgLyogUmVzdG9yZSB0aGUgcHJldmlvdXMgdmFsdWVzIGZvciB3LT5w aHlzX2N1cnNvci4gKi8KKyAgdy0+cGh5c19jdXJzb3IueCA9IG9yaWdpbmFsX3g7CisgIHctPnBo eXNfY3Vyc29yLnkgPSBvcmlnaW5hbF95OworICB3LT5waHlzX2N1cnNvci5ocG9zID0gb3JpZ2lu YWxfaHBvczsKKyAgdy0+cGh5c19jdXJzb3IudnBvcyA9IG9yaWdpbmFsX3Zwb3M7CisgIHctPnBo eXNfY3Vyc29yX3R5cGUgPSBvcmlnaW5hbF9jdXJzb3JfdHlwZTsKK30KKworLyogVGhpcyBpcyBt ZWFudCB0byBiZSB1c2VkIHdoZW4gdGFyZ2V0IGlzIHZpc2libGUgYW5kIHdoZW4gY29kZSBpcyBz YW5kd2ljaGVkOgorICAgICB1cGRhdGVfYmVnaW4gKGYpOworICAgICBibG9ja19pbnB1dCAoKTsK KyAgICAgbWNfZHJhd19lcmFzZV9oeWJyaWQgKC4uLik7CisgICAgIHVuYmxvY2tfaW5wdXQgKCk7 CisgICAgIHVwZGF0ZV9lbmQgKGYpOworV2UgY2FsbCB0aGlzIGEgZHJhdy9lcmFzZSBoeWJyaWQg YmVjYXVzZSBpdCBkb2VzIGFsbCBvZiB0aGUgZm9sbG93aW5nOgorLSAgRHJhdyBhbGwgZ2x5cGgg Y3Vyc29ycywgYnV0IGVyYXNlIHdpdGggYG1jX2VyYXNlX2dseXBoX2N1cnNvcicuCistICBEcmF3 L2VyYXNlIGFsbCBmcmluZ2UgYml0bWFwcyByZWxhdGluZyB0byBjcm9zc2hhaXJzLgorLSAgRHJh dy9lcmFzZSBhbGwgZ2x5cGhsZXNzIGN1cnNvcnMuICovCitzdGF0aWMgdm9pZAorbWNfZHJhd19l cmFzZV9oeWJyaWQgKHN0cnVjdCB3aW5kb3cgKncsIHB0cmRpZmZfdCB4LCBwdHJkaWZmX3QgeSwg cHRyZGlmZl90IGhwb3MsIHB0cmRpZmZfdCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgIGVu dW0gdGV4dF9jdXJzb3Jfa2luZHMgY3Vyc29yX3R5cGUsIGludCBjdXJzb3Jfd2lkdGgsCisgICAg ICAgICAgICAgICAgICAgICAgTGlzcF9PYmplY3QgY29sb3JfdmVjdG9yLCBMaXNwX09iamVjdCBm bGF2b3IpCit7CisgIC8qIGBtYXRyaXhfcm93JyBpbiBgZGlzcG5ldy5jYCBjb250YWlucyB0aGUg Zm9sbG93aW5nIHRlc3RzLAorICBlYXNzZXJ0IChtYXRyaXggJiYgbWF0cml4LT5yb3dzKTsKKyAg ZWFzc2VydCAocm93ID49IDAgJiYgcm93IDwgbWF0cml4LT5ucm93cyk7ICovCisgIGJvb2wgYmFy Zl9jcmFzaF9vbmUgPSAody0+Y3VycmVudF9tYXRyaXggJiYgdy0+Y3VycmVudF9tYXRyaXgtPnJv d3MpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF9vbmUpCisgICAgcmV0dXJuOwor ICBib29sIGJhcmZfY3Jhc2hfdHdvID0gKHZwb3MgPj0gMCAmJiB2cG9zIDwgdy0+Y3VycmVudF9t YXRyaXgtPm5yb3dzKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZfY3Jhc2hfdHdvKQorICAg IHJldHVybjsKKyAgaWYgKHggPCAwCisgICAgICB8fCB5IDwgMAorICAgICAgfHwgaHBvcyA8IDAK KyAgICAgIHx8IHZwb3MgPCAwKQorICAgIHJldHVybjsKKyAgc3RydWN0IGZyYW1lICpmID0gWEZS QU1FICh3LT5mcmFtZSk7CisgIHN0cnVjdCBnbHlwaF9yb3cgKmdseXBoX3JvdyA9IE1BVFJJWF9S T1cgKHctPmN1cnJlbnRfbWF0cml4LCB2cG9zKTsKKyAgLyogUmVjb3JkIHNvbWUgb2YgdGhlIGN1 cnJlbnQgdmFsdWVzIGZvciB0aGUgY3Vyc29yIGFuZCBnbHlwaF9yb3cuICovCisgIGJvb2wgb3Jp Z2luYWxfY3Vyc29yX2luX2ZyaW5nZV9wID0gZ2x5cGhfcm93LT5jdXJzb3JfaW5fZnJpbmdlX3A7 CisgIGJvb2wgb3JpZ2luYWxfcmV2ZXJzZWRfcCA9IGdseXBoX3Jvdy0+cmV2ZXJzZWRfcDsKKyAg cHRyZGlmZl90IG9yaWdpbmFsX3ggPSB3LT5waHlzX2N1cnNvci54OworICBwdHJkaWZmX3Qgb3Jp Z2luYWxfeSA9IHctPnBoeXNfY3Vyc29yLnk7CisgIHB0cmRpZmZfdCBvcmlnaW5hbF9ocG9zID0g dy0+cGh5c19jdXJzb3IuaHBvczsKKyAgcHRyZGlmZl90IG9yaWdpbmFsX3Zwb3MgPSB3LT5waHlz X2N1cnNvci52cG9zOworICBwdHJkaWZmX3Qgb3JpZ2luYWxfYXNjZW50ID0gdy0+cGh5c19jdXJz b3JfYXNjZW50OworICBwdHJkaWZmX3Qgb3JpZ2luYWxfaGVpZ2h0ID0gdy0+cGh5c19jdXJzb3Jf aGVpZ2h0OworICBlbnVtIHRleHRfY3Vyc29yX2tpbmRzIG9yaWdpbmFsX2N1cnNvcl90eXBlID0g dy0+cGh5c19jdXJzb3JfdHlwZTsKKyAgLyogSGlqYWNrIHctPnBoeXNfY3Vyc29yLiAqLworICB3 LT5waHlzX2N1cnNvci5ocG9zID0gaHBvczsKKyAgdy0+cGh5c19jdXJzb3IudnBvcyA9IHZwb3M7 CisgIHctPnBoeXNfY3Vyc29yLnggPSB4OworICB3LT5waHlzX2N1cnNvci55ID0gZ2x5cGhfcm93 LT55OworICB3LT5waHlzX2N1cnNvcl90eXBlID0gY3Vyc29yX3R5cGU7CisgIHctPnBoeXNfY3Vy c29yX2FzY2VudCA9IGdseXBoX3Jvdy0+YXNjZW50OworICB3LT5waHlzX2N1cnNvcl9oZWlnaHQg PSBnbHlwaF9yb3ctPmhlaWdodDsKKyAgLyogKGdldCAnKy1sZWZ0LWZyaW5nZS1vdmVybGF5LXBv c2l0aW9uICdvdmVybGF5LWFycm93LWJpdG1hcCkKKyAgICAgPT4gJystb3ZlcmxheS1hcnJvdy1i aXRtYXAKKyAgICAgPT4gUW1jX3NtaWxleV9mYWNlICovCisgIC8qIExpc3BfT2JqZWN0IHZhbCA9 IEZnZXQgKGludGVybiAoIistbGVmdC1mcmluZ2Utb3ZlcmxheS1wb3NpdGlvbiIpLCBRb3Zlcmxh eV9hcnJvd19iaXRtYXApOyAqLworICBMaXNwX09iamVjdCBtYXJrZXIgPSBmaW5kX3N5bWJvbF92 YWx1ZSAoaW50ZXJuICgib3ZlcmxheS1hcnJvdy1wb3NpdGlvbiIpKTsKKyAgaW50IGZyaW5nZV9i aXRtYXAgPSBOT19GUklOR0VfQklUTUFQOworICBpbnQgZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9J RDsKKyAgaWYgKEVRIChmbGF2b3IsIFFvdmVybGF5X2Fycm93X2JpdG1hcCkpCisgICAgeworICAg ICAgTGlzcF9PYmplY3Qgdmxpc3Q7CisgICAgICBmb3IgKHZsaXN0ID0gVm92ZXJsYXlfYXJyb3df dmFyaWFibGVfbGlzdDsKKyAgICAgICAgICAgQ09OU1AgKHZsaXN0KTsKKyAgICAgICAgICAgdmxp c3QgPSBYQ0RSICh2bGlzdCkpCisgICAgICAgIHsKKyAgICAgICAgICBMaXNwX09iamVjdCB2YXIg PSBYQ0FSICh2bGlzdCk7CisgICAgICAgICAgTGlzcF9PYmplY3QgdmFsOworICAgICAgICAgIGlm ICghU1lNQk9MUCAodmFyKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIHZhbCA9 IGZpbmRfc3ltYm9sX3ZhbHVlICh2YXIpOworICAgICAgICAgIGlmICh2YWwgPSBGZ2V0ICh2YXIs IFFvdmVybGF5X2Fycm93X2JpdG1hcCksIFNZTUJPTFAgKHZhbCkpCisgICAgICAgICAgICBmcmlu Z2VfYml0bWFwID0gbG9va3VwX2ZyaW5nZV9iaXRtYXAgKHZhbCk7CisgICAgICAgIH0KKyAgICAg IGdseXBoX3Jvdy0+b3ZlcmxheV9hcnJvd19iaXRtYXAgPSAoY3Vyc29yX3R5cGUgIT0gTk9fQ1VS U09SKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gZnJpbmdlX2Jp dG1hcCAvKiBsb29rdXBfZnJpbmdlX2JpdG1hcCAoZmxhdm9yKSAqLworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDogTk9fRlJJTkdFX0JJVE1BUDsKKyAgICAgIGRyYXdf ZnJpbmdlX2JpdG1hcCAodywgZ2x5cGhfcm93LCB0cnVlKTsKKyAgICAgIC8qIG9wdGltaXphdGlv biAzOiAgRFJBVyB0aGUgYG92ZXJsYXktYXJyb3ctYml0bWFwJyBpZiB0aGVyZSBpcyBhIG1hcmtl ci4gKi8KKyAgICAgIGlmIChNQVJLRVJQIChtYXJrZXIpCisgICAgICAgICAgJiYgWE1BUktFUiAo bWFya2VyKS0+YnVmZmVyCisgICAgICAgICAgJiYgQlVGRkVSX0xJVkVfUCAoWE1BUktFUiAobWFy a2VyKS0+YnVmZmVyKSkKKyAgICAgICAgeworICAgICAgICAgIGdseXBoX3Jvdy0+b3ZlcmxheV9h cnJvd19iaXRtYXAgPSBmcmluZ2VfYml0bWFwOworICAgICAgICAgIGRyYXdfZnJpbmdlX2JpdG1h cCAodywgZ2x5cGhfcm93LCB0cnVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChF USAoZmxhdm9yLCBRbWNfaG9sbG93X3JlY3RhbmdsZV9yaWdodF9hbmdsZSkKKyAgICAgICAgICAg ICB8fCBFUSAoZmxhdm9yLCBRbWNfaG9sbG93X3JlY3RhbmdsZSkKKyAgICAgICAgICAgICB8fCBF USAoZmxhdm9yLCBRbWNfdmVydGljYWxfYmFyX3JpZ2h0X2FuZ2xlKQorICAgICAgICAgICAgIHx8 IEVRIChmbGF2b3IsIFFtY192ZXJ0aWNhbF9iYXIpCisgICAgICAgICAgICAgfHwgRVEgKGZsYXZv ciwgUW1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xhc2gpKQorICAgICAgeworICAgICAgICBmcmluZ2Vf Yml0bWFwID0gKGN1cnNvcl90eXBlICE9IE5PX0NVUlNPUikKKyAgICAgICAgICAgICAgICAgICAg ICAgID8gbG9va3VwX2ZyaW5nZV9iaXRtYXAgKGZsYXZvcikKKyAgICAgICAgICAgICAgICAgICAg ICAgIDogTk9fRlJJTkdFX0JJVE1BUDsKKyAgICAgICAgZmFjZV9pZCA9IChjdXJzb3JfdHlwZSAh PSBOT19DVVJTT1IpCisgICAgICAgICAgICAgICAgICA/IGxvb2t1cF9uYW1lZF9mYWNlIChmLCBp bnRlcm4gKCIrLXZlcnRpY2FsLWJhci1mYWNlIiksIHRydWUpCisgICAgICAgICAgICAgICAgICA6 IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgICAgZ2x5cGhfcm93LT5jdXJzb3JfaW5fZnJpbmdlX3Ag PSBmYWxzZTsKKyAgICAgICAgZ2x5cGhfcm93LT5mcmluZ2VfYml0bWFwX3BlcmlvZGljX3AgPSAw OworICAgICAgICBnbHlwaF9yb3ctPnJpZ2h0X2ZyaW5nZV9iaXRtYXAgPSBmcmluZ2VfYml0bWFw OworICAgICAgICBnbHlwaF9yb3ctPnJpZ2h0X2ZyaW5nZV9mYWNlX2lkID0gZmFjZV9pZDsKKyAg ICAgICAgZ2x5cGhfcm93LT5yaWdodF9mcmluZ2Vfb2Zmc2V0ID0gMDsKKyAgICAgICAgZHJhd19m cmluZ2VfYml0bWFwICh3LCBnbHlwaF9yb3csIGZhbHNlKTsKKyAgICAgIH0KKyAgICAgIGVsc2Ug aWYgKEVRIChmbGF2b3IsIFFtY19nbHlwaCkKKyAgICAgICAgICAgICAgIHx8IEVRIChmbGF2b3Is IFFtY19nbHlwaGxlc3MpCisgICAgICAgICAgICAgICB8fCBFUSAoZmxhdm9yLCBRbWNfZ2x5cGhf dGFiKSkKKyAgICAgICAgRlJBTUVfUklGIChmKS0+ZHJhd193aW5kb3dfY3Vyc29yICh3LCBnbHlw aF9yb3csIHgsIHksIGN1cnNvcl90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGN1cnNvcl93aWR0aCwgdHJ1ZSwgZmFsc2UsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JfdmVjdG9yLCBmbGF2b3IpOworICAvKiBS ZXN0b3JlIHRoZSBwcmV2aW91cyB2YWx1ZXMgZm9yIHctPnBoeXNfY3Vyc29yIGFuZCBnbHlwaF9y b3cuICovCisgIHctPnBoeXNfY3Vyc29yLnggPSBvcmlnaW5hbF94OworICB3LT5waHlzX2N1cnNv ci55ID0gb3JpZ2luYWxfeTsKKyAgdy0+cGh5c19jdXJzb3IuaHBvcyA9IG9yaWdpbmFsX2hwb3M7 CisgIHctPnBoeXNfY3Vyc29yLnZwb3MgPSBvcmlnaW5hbF92cG9zOworICB3LT5waHlzX2N1cnNv cl90eXBlID0gb3JpZ2luYWxfY3Vyc29yX3R5cGU7CisgIGdseXBoX3Jvdy0+Y3Vyc29yX2luX2Zy aW5nZV9wID0gb3JpZ2luYWxfY3Vyc29yX2luX2ZyaW5nZV9wOworICBnbHlwaF9yb3ctPnJldmVy c2VkX3AgPSBvcmlnaW5hbF9yZXZlcnNlZF9wOworICB3LT5waHlzX2N1cnNvcl9hc2NlbnQgPSBv cmlnaW5hbF9hc2NlbnQ7CisgIHctPnBoeXNfY3Vyc29yX2hlaWdodCA9IG9yaWdpbmFsX2hlaWdo dDsKK30KKworc3RhdGljIGludAorbWNfbGlzcF90b19jdXJzb3JfdHlwZSAoTGlzcF9PYmplY3Qg YXJnKQoreworICBjaGFyICpzdHI7CisgIGlmIChYVFlQRSAoYXJnKSA9PSBMaXNwX1N0cmluZykK KyAgICBzdHIgPSBTU0RBVEEgKGFyZyk7CisgIGVsc2UgaWYgKFhUWVBFIChhcmcpID09IExpc3Bf U3ltYm9sKQorICAgIHN0ciA9IFNTREFUQSAoU1lNQk9MX05BTUUgKGFyZykpOworICBlbHNlIHJl dHVybiAtMTsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgImJveCIpKQorICAgIHJldHVybiBGSUxMRURf Qk9YX0NVUlNPUjsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgImhvbGxvdyIpKQorICAgIHJldHVybiBI T0xMT1dfQk9YX0NVUlNPUjsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgImhiYXIiKSkKKyAgICByZXR1 cm4gSEJBUl9DVVJTT1I7CisgIGlmICghc3RyY21wIChzdHIsICJiYXIiKSkKKyAgICByZXR1cm4g QkFSX0NVUlNPUjsKKyAgaWYgKCFzdHJjbXAgKHN0ciwgIm5vIikpCisgICAgcmV0dXJuIE5PX0NV UlNPUjsKKyAgcmV0dXJuIC0xOworfQorCitzdGF0aWMgTGlzcF9PYmplY3QKK21jX2N1cnNvcl90 eXBlX3RvX2xpc3AgKGludCBhcmcpCit7CisgIHN3aXRjaCAoYXJnKQorICAgIHsKKyAgICBjYXNl IEZJTExFRF9CT1hfQ1VSU09SOiByZXR1cm4gUWJveDsKKyAgICBjYXNlIEhPTExPV19CT1hfQ1VS U09SOiByZXR1cm4gUWhvbGxvdzsKKyAgICBjYXNlIEhCQVJfQ1VSU09SOiByZXR1cm4gUWhiYXI7 CisgICAgY2FzZSBCQVJfQ1VSU09SOiByZXR1cm4gUWJhcjsKKyAgICBjYXNlIE5PX0NVUlNPUjoK KyAgICBkZWZhdWx0OiByZXR1cm4gaW50ZXJuICgibm8iKTsKKyAgICB9Cit9CisKK3N0YXRpYyBM aXNwX09iamVjdAorbWNfY29sb3JfdmVjdG9yX2NhbGMgKHN0cnVjdCB3aW5kb3cgKncsIExpc3Bf T2JqZWN0IGNvbG9yKQoreworICBDSEVDS19TVFJJTkcgKGNvbG9yKTsKKyAgTGlzcF9PYmplY3Qg dGFyZ2V0X2ZyYW1lID0gdy0+ZnJhbWU7CisgIExpc3BfT2JqZWN0IGNvbG9yX3ZhbHVlczsKKyAg ZG91YmxlIHZhbG1heCA9IFhJTlQgKFhDQVIgKEZ4d19jb2xvcl92YWx1ZXMgKGJ1aWxkX3N0cmlu ZyAoIiNmZmZmZmYiKSwgdGFyZ2V0X2ZyYW1lKSkpOworICBMaXNwX09iamVjdCB2bGlzdDsKKyAg cHRyZGlmZl90IHg7CisgIGludCBpID0gMDsKKyAgTGlzcF9PYmplY3QgdGVtcCA9IFFuaWw7Cisg IExpc3BfT2JqZWN0IHZlY3RvciA9IChGbWFrZV92ZWN0b3IgKG1ha2VfbnVtYmVyICgzKSwgUW5p bCkpOworICBpZiAoIU5JTFAgKEZtZW1xICgoRmZyYW1lcCAodGFyZ2V0X2ZyYW1lKSksIGxpc3Ru IChDT05TVFlQRV9IRUFQLCAzLCBpbnRlcm4gKCJ4IiksIGludGVybiAoInczMiIpLCBpbnRlcm4g KCJucyIpKSkpKQorICAgIHsKKyAgICAgIGNvbG9yX3ZhbHVlcyA9IChGeHdfY29sb3JfdmFsdWVz IChjb2xvciwgdGFyZ2V0X2ZyYW1lKSk7CisgICAgICBmb3IgKHZsaXN0ID0gY29sb3JfdmFsdWVz OworICAgICAgICAgICBDT05TUCAodmxpc3QpOworICAgICAgICAgICB2bGlzdCA9IFhDRFIgKHZs aXN0KSkKKyAgICAgICAgeworICAgICAgICAgIHggPSBYSU5UIChYQ0FSICh2bGlzdCkpOworICAg ICAgICAgIHRlbXAgPSBtYWtlX2Zsb2F0ICh4IC8gdmFsbWF4KTsKKyAgICAgICAgICBBU0VUICh2 ZWN0b3IsIGksIHRlbXApOworICAgICAgICAgIGkgPSBpICsgMTsKKyAgICAgICAgfQorICAgIH0K KyAgcmV0dXJuIHZlY3RvcjsKK30KKworLyogWW91IG9ubHkgbmVlZCB0byBjYWxsIGxvb2t1cF9i YXNpY19mYWNlIGlmIGl0LmZhY2VfaWQgaXMgYSBiYXNpYyBmYWNlCitBTkQgZmFjZS1yZW1hcHBp bmctYWxpc3QgaXMgbm9uLW5pbC4gIElmIGl0LmZhY2VfaWQgaXMgbm90IGEgYmFzaWMKK2ZhY2Us IGxvb2t1cF9iYXNpY19mYWNlIHdpbGwgYWJvcnQsIGFuZCB5b3Ugc2hvdWxkIGNhbGwgbG9va3Vw X2ZhY2UKK2luc3RlYWQuICBGb3IgYSByZW1hcHBlZCBub24tYmFzaWMgZmFjZSB5b3Ugd2lsbCBo YXZlIHRvIGxvb2sgdXAKK2ZhY2UtcmVtYXBwaW5nLWFsaXN0IG1hbnVhbGx5IGFuZCB0aGVuIHVz ZSBsb29rdXBfbmFtZWRfZmFjZS4gKi8KK3N0YXRpYyBMaXNwX09iamVjdAorbWNfYmdfY29sb3Jf dmVjdG9yIChzdHJ1Y3Qgd2luZG93ICp3LCBlbnVtIGZhY2VfaWQgZmFjZV9pZCkKK3sKKyAgc3Ry dWN0IGZyYW1lICpmID0gWEZSQU1FICh3LT5mcmFtZSk7CisgIHN0cnVjdCBmYWNlICpmYWNlOwor ICBMaXNwX09iamVjdCBjb2xvciwgY29sb3JfdmVjdG9yOworICBpZiAoIU5JTFAgKFZmYWNlX3Jl bWFwcGluZ19hbGlzdCkKKyAgICAgICYmIChmYWNlX2lkID09IERFRkFVTFRfRkFDRV9JRCAvKiBR ZGVmYXVsdCAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gTU9ERV9MSU5FX0ZBQ0VfSUQgLyog UW1vZGVfbGluZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gTU9ERV9MSU5FX0lOQUNUSVZF X0ZBQ0VfSUQgLyogUW1vZGVfbGluZV9pbmFjdGl2ZSAqLworICAgICAgICAgIHx8IGZhY2VfaWQg PT0gSEVBREVSX0xJTkVfRkFDRV9JRCAvKiBRaGVhZGVyX2xpbmUgKi8KKyAgICAgICAgICB8fCBm YWNlX2lkID09IFRPT0xfQkFSX0ZBQ0VfSUQgLyogUXRvb2xfYmFyICovCisgICAgICAgICAgfHwg ZmFjZV9pZCA9PSBGUklOR0VfRkFDRV9JRCAvKiBRZnJpbmdlICovCisgICAgICAgICAgfHwgZmFj ZV9pZCA9PSBTQ1JPTExfQkFSX0ZBQ0VfSUQgLyogUXNjcm9sbF9iYXIgKi8KKyAgICAgICAgICB8 fCBmYWNlX2lkID09IEJPUkRFUl9GQUNFX0lEIC8qIFFib3JkZXIgKi8KKyAgICAgICAgICB8fCBm YWNlX2lkID09IENVUlNPUl9GQUNFX0lEIC8qIFFjdXJzb3IgKi8KKyAgICAgICAgICB8fCBmYWNl X2lkID09IE1PVVNFX0ZBQ0VfSUQgLyogUW1vdXNlICovCisgICAgICAgICAgfHwgZmFjZV9pZCA9 PSBNRU5VX0ZBQ0VfSUQgLyogUW1lbnUgKi8KKyAgICAgICAgICB8fCBmYWNlX2lkID09IFdJTkRP V19ESVZJREVSX0ZBQ0VfSUQgLyogUXdpbmRvd19kaXZpZGVyICovCisgICAgICAgICAgfHwgZmFj ZV9pZCA9PSBXSU5ET1dfRElWSURFUl9GSVJTVF9QSVhFTF9GQUNFX0lEIC8qIFF3aW5kb3dfZGl2 aWRlcl9maXJzdF9waXhlbCAqLworICAgICAgICAgIHx8IGZhY2VfaWQgPT0gV0lORE9XX0RJVklE RVJfTEFTVF9QSVhFTF9GQUNFX0lEIC8qIFF3aW5kb3dfZGl2aWRlcl9sYXN0X3BpeGVsICovCisg ICAgICAgICAgfHwgZmFjZV9pZCA9PSBWRVJUSUNBTF9CT1JERVJfRkFDRV9JRCAvKiBRdmVydGlj YWxfYm9yZGVyICovCisgICAgICAgICAgLyogUWludGVybmFsX2JvcmRlciAqLworICAgICAgICAg IC8qIHx8IGZhY2VfaWQgPT0gSU5URVJOQUxfQk9SREVSX0ZBQ0VfSUQpICovCisgICAgICAgICAg KSkKKyAgICBmYWNlID0gRkFDRV9GUk9NX0lEIChmLCBsb29rdXBfYmFzaWNfZmFjZSAoZiwgZmFj ZV9pZCkpOworICAgIGVsc2UKKyAgICAgIGZhY2UgPSBGQUNFX0ZST01fSUQgKGYsIGZhY2VfaWQp OworICBjb2xvciA9IGZhY2UtPmxmYWNlW0xGQUNFX0JBQ0tHUk9VTkRfSU5ERVhdOworICBDSEVD S19TVFJJTkcgKGNvbG9yKTsKKyAgY29sb3JfdmVjdG9yID0gbWNfY29sb3JfdmVjdG9yX2NhbGMg KHcsIGNvbG9yKTsKKyAgcmV0dXJuIGNvbG9yX3ZlY3RvcjsKK30KKworLyogTUNfR0xZUEhfQ0FD SEU6CistICBUaGUgZmlyc3QgZWxlbWVudCBpcyBjb21wYXJlZCB0byB0aGUgYG1jLWdseXBoLWxp c3QnIHRvIGRldGVybWluZSB3aGV0aGVyIHdlIG5lZWQgdG8KKyAgIHJlY2FsY3VsYXRlIGNvb3Jk aW5hdGVzLiAgW1dlIGFsc28gY2hlY2sgd2hldGhlciB3aW5kb3ctc3RhcnQvd2luZG93LWVuZCBj aGFuZ2VkLl0KKy0gIFRoZSBzZWNvbmQgZWxlbWVudCBjb250YWlucyBhbGwgcHJldmlvdXNseSBj YWxjdWxhdGVkIGNvb3JkaW5hdGVzLgorLSAgVGhlIHRoaXJkIGVsZW1lbnQgaXMgdGhlIGJ1ZmZl ciB3aGVyZSB0aGUgYG1jX2dseXBoX2NhY2hlJyB3YXMgc2V0LiAgQmVjYXVzZSB0aGUKKyAgIGBt Y19nbHlwaF9jYWNoZScgaXMgd2luZG93LWxvY2FsLCB3ZSBuZWVkIHRvIGNoZWNrIGJvdGggdGhl IHdpbmRvdyBhbmQgdGhlIGJ1ZmZlci4KKyAgICAgKCgoMyBoYmFyIFsxLjAgMC4wIDAuMF0pCisg ICAgICAgKDQgYmFyIFswLjAgMS4wIDAuMF0pCisgICAgICAgKDUgYm94IFswLjAgMC4wIDEuMF0p CisgICAgICAgKDYgaG9sbG93IFswLjggMC40IDAuMl0pCisgICAgICAgKDcgKGhiYXIgMykgWzEu MCAwLjAgMS4wXSkKKyAgICAgICAoOCAoYmFyIDMpIFswLjAgMS4wIDEuMF0pKQorICAgICAgKCgo MyBoYmFyIFsxLjAgMC4wIDAuMF0pICgyMiAyMCAyIDApKQorICAgICAgICgoNCBiYXIgWzAuMCAx LjAgMC4wXSkgKDMzIDIwIDMgMCkpCisgICAgICAgKCg1IGJveCBbMC4wIDAuMCAxLjBdKSAoNDQg MjAgNCAwKSkKKyAgICAgICAoKDYgaG9sbG93IFswLjggMC40IDAuMl0pICg1NSAyMCA1IDApKQor ICAgICAgICgoNyAoaGJhciAzKSBbMS4wIDAuMCAxLjBdKSAoNjYgMjAgNiAwKSkKKyAgICAgICAo KDggKGJhciAzKSBbMC4wIDEuMCAxLjBdKSAoNzcgMjAgNyAwKSkpCisgICAgICAoQlVGRkVSIHdo ZXJlIGBtY19nbHlwaF9jYWNoZScgd2FzIHNldC4pKSAqLworLyogSWYgUkVNT1ZFIGlzIDAsIHRo ZW4gZHJhdyBmYWtlIGN1cnNvcnMuICBJZiBSRU1PVkUgaXMgMSwgdGhlbiBlcmFzZSBmYWtlIGN1 cnNvcnMuICovCit2b2lkCittY19jYWxjIChzdHJ1Y3Qgd2luZG93ICp3LCBib29sIHJlbW92ZSkK K3sKKyAgLyogYHN0YXJ0X2Rpc3BsYXknIGNhbGxzIGBpbml0X2l0ZXJhdG9yJyB3aGljaCBjcmFz aGVzIEVtYWNzIGlmOgorICBlYXNzZXJ0IChjaGFycG9zIDwgMCB8fCAoY2hhcnBvcyA+PSBCVUZf QkVHIChjdXJyZW50X2J1ZmZlcikgJiYgY2hhcnBvcyA8PSBaVikpCisgIFRoaXMgaGFwcGVucyB3 aGVuIG11bHRpcGxlIGN1cnNvcnMgYXJlIGFjdGl2ZSBhbmQgdGhlIHVzZXIgdHlwZXM6ICBNLXgg Li4uLiAqLworICBwdHJkaWZmX3QgY2hhcnBvcyA9IG1hcmtlcl9wb3NpdGlvbiAody0+c3RhcnQp OworICBib29sIGJhcmZfY3Jhc2hfb25lID0gKGNoYXJwb3MgPCAwIHx8IChjaGFycG9zID49IEJV Rl9CRUcgKGN1cnJlbnRfYnVmZmVyKSAmJiBjaGFycG9zIDw9IFpWKSkgPyBmYWxzZSA6IHRydWU7 CisgIGlmIChiYXJmX2NyYXNoX29uZSkKKyAgICByZXR1cm47CisgIHN0cnVjdCBmcmFtZSAqZiA9 IFhGUkFNRSAody0+ZnJhbWUpOworICBzdHJ1Y3Qgd2luZG93ICpzdyA9IFhXSU5ET1cgKGYtPnNl bGVjdGVkX3dpbmRvdyk7CisgIExpc3BfT2JqZWN0IGJ1ZiA9IHctPmNvbnRlbnRzOworICBDSEVD S19CVUZGRVIgKGJ1Zik7CisgIHN0cnVjdCBidWZmZXIgKmIgPSBYQlVGRkVSIChidWYpOworICAv KiBXZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSByaWdodCBidWZmZXIgYmVmb3JlIHRl c3RpbmcgYnVmZmVyIGxvY2FsIHZhcmlhYmxlcy4gKi8KKyAgTGlzcF9PYmplY3QgYnVmZmVyX2Rp c3BsYXlfdGFibGUgPSBCVkFSIChiLCBkaXNwbGF5X3RhYmxlKTsKKyAgYm9vbCBidWZmZXJfZGlz cGxheV90YWJsZV9wID0gIU5JTFAgKGJ1ZmZlcl9kaXNwbGF5X3RhYmxlKTsKKyAgTGlzcF9PYmpl Y3QgbGluZV9mZWVkX3ZlY3RvcjsKKyAgaWYgKGJ1ZmZlcl9kaXNwbGF5X3RhYmxlX3ApCisgICAg bGluZV9mZWVkX3ZlY3RvciA9IEZhcmVmIChidWZmZXJfZGlzcGxheV90YWJsZSwgbWFrZV9udW1i ZXIgKDEwKSk7CisgIHN0cnVjdCBpdCBpdDsKKyAgdm9pZCAqaXRkYXRhID0gYmlkaV9zaGVsdmVf Y2FjaGUgKCk7CisgIHN0cnVjdCBpdCBzYXZlZF9pdF9mb3Jfd2luZG93X3N0YXJ0OworICB2b2lk ICpzYXZlZF9pdGRhdGFfZm9yX3dpbmRvd19zdGFydCA9IE5VTEw7CisgIHN0cnVjdCB0ZXh0X3Bv cyBzdGFydF90ZXh0X3Bvc2l0aW9uOworICBwdHJkaWZmX3QgaXRfc3RhcnQ7CisgIGludCBmaXJz dF94LCBsYXN0X3g7CisgIGludCBsbnVtX3dpZHRoID0gMDsKKyAgaW50IGxudW1fcGl4ZWxfd2lk dGggPSAwOworICBib29sIGhzY2wgPSAoIXctPnN1c3BlbmRfYXV0b19oc2Nyb2xsCisgICAgICAg ICAgICAgICAmJiBFUSAoRmJ1ZmZlcl9sb2NhbF92YWx1ZSAoUWF1dG9faHNjcm9sbF9tb2RlLCB3 LT5jb250ZW50cyksIFFjdXJyZW50X2xpbmUpCisgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xs ID4gMCk7CisgIGludCBoc2NsX2ZpcnN0X2hwb3MgPSB3aW5kb3dfaHNjcm9sbF9saW1pdGVkICh3 LCBmKTsKKyAgaW50IGZyYW1lX2NoYXJfd2lkdGggPSBGUkFNRV9DT0xVTU5fV0lEVEggKGYpOwor ICBpbnQgdGV4dF9hcmVhX3dpZHRoID0gd2luZG93X2JveF93aWR0aCAodywgVEVYVF9BUkVBKTsK KyAgaW50IHJpZ2h0X2ZyaW5nZV93aWR0aCA9IFdJTkRPV19SSUdIVF9GUklOR0VfV0lEVEggKHcp OworICBpbnQgaGVhZGVyX2xpbmVfaGVpZ2h0ID0gV0lORE9XX0hFQURFUl9MSU5FX0hFSUdIVCAo dyk7CisgIGVudW0gdGV4dF9jdXJzb3Jfa2luZHMgY3Vyc29yX3R5cGU7CisgIGludCBjdXJzb3Jf d2lkdGggPSAxOworICBwdHJkaWZmX3QgcG9zaW50LCB4LCB5LCBocG9zLCB2cG9zOworICAvKiBB biBpZGxlIHRpbWVyIHNpdHVhdGlvbiBhdCB0aGUgb3V0c2V0IG1heSBub3QgbmVjZXNzYXJpbHkg aW52b2tlIGByZWRpc3BsYXlfd2luZG93JywKKyAgd2hpY2ggaXMgd2hlcmUgY2VydGFpbiBtdWx0 aXBsZSBjdXJzb3IgdmFsdWVzIGFyZSBzZXQgYXQgdGhlIHRhaWwgZW5kIHRoZXJlb2YuICovCisg IGlmICghdy0+bWMuY3VycmVudF9zdGFydCkKKyAgICB3LT5tYy5jdXJyZW50X3N0YXJ0ID0gbWFy a2VyX3Bvc2l0aW9uICh3LT5zdGFydCk7CisgIExpc3BfT2JqZWN0IHNwZWNzLCBsaXNwX3R5cGUs IGNvbG9yX3ZlY3Rvciwgdmxpc3QsIHhfeV9ocG9zX3Zwb3M7CisgIExpc3BfT2JqZWN0IHRlbXAg PSBRbmlsOworICBMaXNwX09iamVjdCByZXN1bHQgPSBRbmlsOworICBTRVRfVEVYVF9QT1NfRlJP TV9NQVJLRVIgKHN0YXJ0X3RleHRfcG9zaXRpb24sIHctPnN0YXJ0KTsKKyAgc3RhcnRfZGlzcGxh eSAoJml0LCB3LCBzdGFydF90ZXh0X3Bvc2l0aW9uKTsKKyAgZmlyc3RfeCA9IGl0LmZpcnN0X3Zp c2libGVfeDsKKyAgbGFzdF94ID0gaXQubGFzdF92aXNpYmxlX3g7CisgIGl0X3N0YXJ0ID0gSVRf Q0hBUlBPUyAoaXQpOworICBTQVZFX0lUIChzYXZlZF9pdF9mb3Jfd2luZG93X3N0YXJ0LCBpdCwg c2F2ZWRfaXRkYXRhX2Zvcl93aW5kb3dfc3RhcnQpOworICAvKiBGaW5pc2ggcHJpbWluZyB0aGUg SVQgZm9yIHBvdGVudGlhbCBsaW5lIG51bWJlcnMuICovCisgIGlmICghTklMUCAoVmRpc3BsYXlf bGluZV9udW1iZXJzKQorICAgICAgJiYgIUVRIChWZGlzcGxheV9saW5lX251bWJlcnMsIFF2aXN1 YWwpKQorICAgIHsKKyAgICAgIGl0LmZpcnN0X3Zpc2libGVfeCA9IDA7CisgICAgICBtb3ZlX2l0 X2J5X2xpbmVzICgmaXQsIDEpOworICAgICAgbG51bV93aWR0aCA9IGl0LmxudW1fd2lkdGg7Cisg ICAgICBsbnVtX3BpeGVsX3dpZHRoID0gaXQubG51bV9waXhlbF93aWR0aDsKKyAgICAgIFJFU1RP UkVfSVQgKCZpdCwgJnNhdmVkX2l0X2Zvcl93aW5kb3dfc3RhcnQsIHNhdmVkX2l0ZGF0YV9mb3Jf d2luZG93X3N0YXJ0KTsKKyAgICAgIGl0LmZpcnN0X3Zpc2libGVfeCA9IGZpcnN0X3g7CisgICAg ICBpdC5sYXN0X3Zpc2libGVfeCA9IGxhc3RfeDsKKyAgICAgIGl0LmxudW1fd2lkdGggPSBsbnVt X3dpZHRoOworICAgICAgaXQubG51bV9waXhlbF93aWR0aCA9IGxudW1fcGl4ZWxfd2lkdGg7Cisg ICAgICBTQVZFX0lUIChzYXZlZF9pdF9mb3Jfd2luZG93X3N0YXJ0LCBpdCwgc2F2ZWRfaXRkYXRh X2Zvcl93aW5kb3dfc3RhcnQpOworICAgIH0KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVNT1ZFIEdMWVBIIENVUlNPUlMKKyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLworICAvKiBSZW1vdmUgdGhlIGN1cnNvcnMgdXNpbmcgdGhlIGNhY2hl IGlmIHRoZSBjb25kaXRpb25zIGFyZSBzYXRpc2ZpZWQuICovCisgIGlmICgocmVtb3ZlICYmICFO SUxQICh3LT5tY19nbHlwaF9jYWNoZSkgJiYgTklMUCAoQlZBUiAoYiwgbWNfZ2x5cGhfbGlzdCkp KQorICAgICAgfHwgKCFOSUxQICh3LT5tY19nbHlwaF9jYWNoZSkgJiYgIU5JTFAgKEJWQVIgKGIs IG1jX2dseXBoX2xpc3QpKSAmJiAocmVtb3ZlIHx8IHcgIT0gc3cpKSkKKyAgICB7CisgICAgICAv KiBFcmFzZSB0aGUgcmVhbCBjdXJzb3Igc28gdGhhdCB0aGUgd2hvbGUgdmVydGljYWwgbGluZSBn ZXRzIHJlbW92ZWQsIG5vdCBqdXN0IHRoZSBmYWtlIGN1cnNvcnMuICovCisgICAgICBtY19lcmFz ZV9nbHlwaF9jdXJzb3IgKHcsIHctPnBoeXNfY3Vyc29yLngsIHctPnBoeXNfY3Vyc29yLnksIHct PnBoeXNfY3Vyc29yLmhwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHctPnBoeXNf Y3Vyc29yLnZwb3MsIHctPnBoeXNfY3Vyc29yX3R5cGUpOworICAgICAgLyogUHJvY2VzcyB0aGUg TUNfR0xZUEhfQ0FDSEUuICovCisgICAgICBpZiAoIU5JTFAgKHctPm1jX2dseXBoX2NhY2hlKSkK KyAgICAgICAgeworICAgICAgICAgIGZvciAodmxpc3QgPSBYQ0FSIChYQ0RSICh3LT5tY19nbHlw aF9jYWNoZSkpOworICAgICAgICAgICAgICAgQ09OU1AgKHZsaXN0KTsKKyAgICAgICAgICAgICAg IHZsaXN0ID0gWENEUiAodmxpc3QpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBzcGVj cyA9IFhDQVIgKFhDQVIgKHZsaXN0KSk7CisgICAgICAgICAgICAgIGxpc3BfdHlwZSA9IEZudGgg KG1ha2VfbnVtYmVyICgxKSwgc3BlY3MpOworICAgICAgICAgICAgIGlmIChDT05TUCAobGlzcF90 eXBlKSkKKyAgICAgICAgICAgICAgICBjdXJzb3JfdHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29yX3R5 cGUgKFhDQVIgKGxpc3BfdHlwZSkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICAgIGN1cnNvcl90eXBlID0gbWNfbGlzcF90b19jdXJzb3JfdHlwZSAobGlzcF90eXBlKTsK KyAgICAgICAgICAgICAgeF95X2hwb3NfdnBvcyA9IFhDQVIgKFhDRFIgKFhDQVIgKHZsaXN0KSkp OworICAgICAgICAgICAgICB4ID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIgKDApLCB4X3lfaHBv c192cG9zKSk7CisgICAgICAgICAgICAgIHkgPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoMSks IHhfeV9ocG9zX3Zwb3MpKTsKKyAgICAgICAgICAgICAgaHBvcyA9IFhJTlQgKEZudGggKG1ha2Vf bnVtYmVyICgyKSwgeF95X2hwb3NfdnBvcykpOworICAgICAgICAgICAgICB2cG9zID0gWElOVCAo Rm50aCAobWFrZV9udW1iZXIgKDMpLCB4X3lfaHBvc192cG9zKSk7CisgICAgICAgICAgICAgIG1j X2VyYXNlX2dseXBoX2N1cnNvciAodywgeCwgeSwgaHBvcywgdnBvcywgY3Vyc29yX3R5cGUpOwor ICAgICAgICAgICAgfQorICAgICAgICAgIGlmIChOSUxQIChCVkFSIChiLCBtY19nbHlwaF9saXN0 KSkpCisgICAgICAgICAgICB3c2V0X21jX2dseXBoX2NhY2hlICh3LCBRbmlsKTsKKyAgICAgICAg fQorICAgICAgdy0+bWMuZXJhc2VfZ2x5cGhfY3Vyc29yID0gZmFsc2U7CisgICAgfQorLyogKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRURSQVcg R0xZUEggQ1VSU09SUworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisgIC8qIElmIHRoZSBmaXJz dCBlbGVtZW50IG9mIHctPm1jX2dseXBoX2NhY2hlIGlzIHRoZSBzYW1lIGFzIHRoZSBsb2NhbCB2 YXJpYWJsZSBtY19nbHlwaF9saXN0LAorICAgICBhbmQgdGhlIHByZXZpb3VzL2N1cnJlbnQgd2lu ZG93LXN0YXJ0L3dpbmRvdy1lbmQgYXJlIHRoZSBzYW1lIChlLmcuLCBubyBzY3JvbGxpbmcpLAor ICAgICB0aGVuIHJlZHJhdyB0aGUgY3Vyc29ycyB1c2luZyB0aGUgY2FjaGUuICBUaGlzIGF2b2lk cyByZWNhbGN1bGF0aW5nIGNvb3JkaW5hdGVzLiAqLworICBpZiAoIXJlbW92ZQorICAgICAgJiYg dyA9PSBzdworICAgICAgJiYgdy0+bWMuY3VycmVudF9zdGFydAorICAgICAgJiYgdy0+bWMuY3Vy cmVudF9lbmQKKyAgICAgICYmIHctPm1jLnByZXZpb3VzX3N0YXJ0CisgICAgICAmJiB3LT5tYy5w cmV2aW91c19lbmQKKyAgICAgICYmIHctPm1jLmN1cnJlbnRfc3RhcnQgPT0gdy0+bWMucHJldmlv dXNfc3RhcnQKKyAgICAgICYmIHctPm1jLmN1cnJlbnRfZW5kID09IHctPm1jLnByZXZpb3VzX2Vu ZAorICAgICAgJiYgIU5JTFAgKEJWQVIgKGIsIG1jX2dseXBoX2xpc3QpKQorICAgICAgJiYgIU5J TFAgKHctPm1jX2dseXBoX2NhY2hlKQorICAgICAgJiYgIU5JTFAgKEZlcXVhbCAoRm50aCAobWFr ZV9udW1iZXIgKDApLCB3LT5tY19nbHlwaF9jYWNoZSksIEJWQVIgKGIsIG1jX2dseXBoX2xpc3Qp KSkpCisgICAgeworICAgICAgZm9yICh2bGlzdCA9IFhDQVIgKFhDRFIgKHctPm1jX2dseXBoX2Nh Y2hlKSk7CisgICAgICAgICAgIENPTlNQICh2bGlzdCk7CisgICAgICAgICAgIHZsaXN0ID0gWENE UiAodmxpc3QpKQorICAgICAgICB7CisgICAgICAgICAgc3BlY3MgPSBYQ0FSIChYQ0FSICh2bGlz dCkpOworICAgICAgICAgIHBvc2ludCA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgwKSwgc3Bl Y3MpKTsKKyAgICAgICAgICBsaXNwX3R5cGUgPSBGbnRoIChtYWtlX251bWJlciAoMSksIHNwZWNz KTsKKyAgICAgICAgICBpZiAoQ09OU1AgKGxpc3BfdHlwZSkpCisgICAgICAgICAgICBjdXJzb3Jf dHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKFhDQVIgKGxpc3BfdHlwZSkpOworICAgICAg ICAgICAgZWxzZQorICAgICAgICAgICAgICBjdXJzb3JfdHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29y X3R5cGUgKGxpc3BfdHlwZSk7CisgICAgICAgICAgaWYgKENPTlNQIChsaXNwX3R5cGUpKQorICAg ICAgICAgICAgY3Vyc29yX3dpZHRoID0gWElOVCAoWENBUiAoWENEUiAobGlzcF90eXBlKSkpOwor ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGggPSAxOworICAgICAg ICAgIGNvbG9yX3ZlY3RvciA9IEZudGggKG1ha2VfbnVtYmVyICgyKSwgc3BlY3MpOworICAgICAg ICAgIGlmIChTVFJJTkdQIChjb2xvcl92ZWN0b3IpKQorICAgICAgICAgICAgY29sb3JfdmVjdG9y ID0gbWNfY29sb3JfdmVjdG9yX2NhbGMgKHcsIGNvbG9yX3ZlY3Rvcik7CisgICAgICAgICAgeF95 X2hwb3NfdnBvcyA9IFhDQVIgKFhDRFIgKFhDQVIgKHZsaXN0KSkpOworICAgICAgICAgIHggPSBY SU5UIChGbnRoIChtYWtlX251bWJlciAoMCksIHhfeV9ocG9zX3Zwb3MpKTsKKyAgICAgICAgICB5 ID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIgKDEpLCB4X3lfaHBvc192cG9zKSk7CisgICAgICAg ICAgaHBvcyA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgyKSwgeF95X2hwb3NfdnBvcykpOwor ICAgICAgICAgIHZwb3MgPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoMyksIHhfeV9ocG9zX3Zw b3MpKTsKKyAgICAgICAgICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywgeCwgeSwgaHBvcywgdnBv cywgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgY29sb3JfdmVjdG9yLCBRbWNfZ2x5cGgpOwor ICAgICAgICB9CisgICAgICB3LT5tYy5kcmF3X2dseXBoX2N1cnNvciA9IGZhbHNlOworICAgIH0K Ky8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBE UkFXIEdMWVBIIENVUlNPUlMgQU5FVworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisgICAgLyog RHJhdyB0aGUgY3Vyc29ycyBhbmV3IGJlY2F1c2Ugc29tZXRoaW5nIGhhcyBjaGFuZ2VkLCBlLmcu LCB0aGUgZmlyc3QgZWxlbWVudCBvZgorICAgICAgIHctPm1jX2dseXBoX2NhY2hlIGlzIE5PVCB0 aGUgc2FtZSBhcyB0aGUgbG9jYWwgdmFyaWFibGUgbWNfZ2x5cGhfbGlzdDsgYW5kL29yLCB0aGUg cHJldmlvdXMvCisgICAgICAgY3VycmVudCB3aW5kb3ctc3RhcnQvd2luZG93LWVuZCBhcmUgTk9U IHRoZSBzYW1lIChlLmcuLCBzY3JvbGxpbmcgaGFzIG9jY3VycmVkKS4KKyAgICAgICBTZW1pLWV4 cGVuc2l2ZSBjYWxjdWxhdGlvbiBvZiBjb29yZGluYXRlcyBpcyByZXF1aXJlZC4gKi8KKyAgICBl bHNlIGlmICghcmVtb3ZlCisgICAgICAgICAgICAgJiYgdyA9PSBzdworICAgICAgICAgICAgICYm IHctPm1jLmN1cnJlbnRfc3RhcnQKKyAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoYiwgbWNf Z2x5cGhfbGlzdCkpKQorICAgICAgeworICAgICAgICBmb3IgKHZsaXN0ID0gQlZBUiAoYiwgbWNf Z2x5cGhfbGlzdCk7CisgICAgICAgICAgICAgQ09OU1AgKHZsaXN0KTsKKyAgICAgICAgICAgICB2 bGlzdCA9IFhDRFIgKHZsaXN0KSkKKyAgICAgICAgICB7CisgICAgICAgICAgICBzcGVjcyA9IFhD QVIgKHZsaXN0KTsKKyAgICAgICAgICAgIHBvc2ludCA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVy ICgwKSwgc3BlY3MpKTsKKyAgICAgICAgICAgIGxpc3BfdHlwZSA9IEZudGggKG1ha2VfbnVtYmVy ICgxKSwgc3BlY3MpOworICAgICAgICAgICAgaWYgKENPTlNQIChsaXNwX3R5cGUpKQorICAgICAg ICAgICAgICBjdXJzb3JfdHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKFhDQVIgKGxpc3Bf dHlwZSkpOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3Vyc29yX3R5cGUg PSBtY19saXNwX3RvX2N1cnNvcl90eXBlIChsaXNwX3R5cGUpOworICAgICAgICAgICAgaWYgKENP TlNQIChsaXNwX3R5cGUpKQorICAgICAgICAgICAgICBjdXJzb3Jfd2lkdGggPSBYSU5UIChYQ0FS IChYQ0RSIChsaXNwX3R5cGUpKSk7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICBjdXJzb3Jfd2lkdGggPSAxOworICAgICAgICAgICAgY29sb3JfdmVjdG9yID0gRm50aCAobWFr ZV9udW1iZXIgKDIpLCBzcGVjcyk7CisgICAgICAgICAgICBpZiAoU1RSSU5HUCAoY29sb3JfdmVj dG9yKSkKKyAgICAgICAgICAgICAgY29sb3JfdmVjdG9yID0gbWNfY29sb3JfdmVjdG9yX2NhbGMg KHcsIGNvbG9yX3ZlY3Rvcik7CisgICAgICAgICAgICBSRVNUT1JFX0lUICgmaXQsICZzYXZlZF9p dF9mb3Jfd2luZG93X3N0YXJ0LCBzYXZlZF9pdGRhdGFfZm9yX3dpbmRvd19zdGFydCk7CisgICAg ICAgICAgICAvKiBGSVhNRTogIFdoZW4gZGVhbGluZyB3aXRoIGEgbGluZSBmZWVkIGBidWZmZXIt ZGlzcGxheS10YWJsZScgaXNzdWUsCisgICAgICAgICAgICBpbXBsZW1lbnQgYSBzeXN0ZW0gdXNp bmcgYG1jX21vdmVfaXRfaW5fZGlzcGxheV9saW5lJyB0byBhdm9pZCBvdmVyc2hvb3RpbmcuCisg ICAgICAgICAgICBUaGUgY3VycmVudCBzdHJhdGVneSB0byBkbyB0aGlzIHdvdWxkIGJlIHRvIGZp cnN0IHVzZSBgbW92ZV9pdF90bycgYW5kIHNlZSBpZgorICAgICAgICAgICAgaXQgZW5jb3VudGVy ZWQgYSBsaW5lIGZlZWQuICBJZiBzbywgdGhlbiBjYWxsIGBtb3ZlX2l0X2J5X2xpbmVzICgmaXQs IDApYCBhbmQKKyAgICAgICAgICAgIHRoZW4gYG1jX21vdmVfaXRfaW5fZGlzcGxheV9saW5lJyAt LSBzdG9wcGluZyBhdCB0aGUgY29ycmVjdCBYLiAqLworICAgICAgICAgICAgbW92ZV9pdF90byAo Jml0LCBwb3NpbnQsIGl0Lmxhc3RfdmlzaWJsZV94LCBpdC5sYXN0X3Zpc2libGVfeSAtIDEsIC0x LCBNT1ZFX1RPX1BPUyB8IE1PVkVfVE9fWCB8IE1PVkVfVE9fWSk7CisgICAgICAgICAgICAvKiAo YXJlZiBidWZmZXItZGlzcGxheS10YWJsZSA/XG4pID09IFsoMTgyIC4gMTI3KSAxMF0gKi8KKyAg ICAgICAgICAgIGJvb2wgbGluZV9mZWVkX292ZXJzaG9vdCA9IChGRVRDSF9CWVRFIChJVF9CWVRF UE9TIChpdCkpID09ICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBidWZmZXJfZGlzcGxheV90YWJsZV9wCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgVkVDVE9SUCAobGluZV9mZWVkX3ZlY3RvcikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBBU0laRSAobGluZV9mZWVkX3ZlY3RvcikgPiAx CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgSVRFUkFUT1JfQVRf RU5EX09GX0xJTkVfUCAoJml0KSk7CisgICAgICAgICAgICBpbnQgYWRqdXN0X3ggPSAobGluZV9m ZWVkX292ZXJzaG9vdCkgPyBmcmFtZV9jaGFyX3dpZHRoIDogMDsKKyAgICAgICAgICAgIGludCBh ZGp1c3RfaHBvcyA9IChsaW5lX2ZlZWRfb3ZlcnNob290KSA/IDEgOiAwOworICAgICAgICAgICAg aWYgKElUX0NIQVJQT1MgKGl0KSAhPSBwb3NpbnQpCisgICAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICB4ID0gLTE7CisgICAgICAgICAgICAgICAgeSA9IC0xOworICAgICAgICAgICAgICAg IGhwb3MgPSAtMTsKKyAgICAgICAgICAgICAgICB2cG9zID0gLTE7CisgICAgICAgICAgICAgICAg Z290byBkb25lX29uZTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgeSA9IGl0LmN1cnJl bnRfeTsKKyAgICAgICAgICAgIGlmIChoZWFkZXJfbGluZV9oZWlnaHQgPiAwKQorICAgICAgICAg ICAgICB2cG9zID0gaXQudnBvcyArIDE7CisgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg ICAgICB2cG9zID0gaXQudnBvczsKKyAgICAgICAgICAgIGlmIChoc2NsKQorICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgeCA9IGl0LmN1cnJlbnRfeCAtIChoc2NsX2ZpcnN0X2hwb3Mg KiBmcmFtZV9jaGFyX3dpZHRoKSAtIGFkanVzdF94OworICAgICAgICAgICAgICAgIGhwb3MgPSBp dC5ocG9zIC0gaHNjbF9maXJzdF9ocG9zIC0gYWRqdXN0X2hwb3M7CisgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg IHggPSBpdC5jdXJyZW50X3ggLSBmaXJzdF94IC0gYWRqdXN0X3g7CisgICAgICAgICAgICAgICAg ICBocG9zID0gaXQuaHBvcyAtIGFkanVzdF9ocG9zOworICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGRvbmVfb25lOgorICAgICAgICAgICAgeF95X2hwb3NfdnBvcyA9IGxpc3RuIChDT05T VFlQRV9IRUFQLCA0LCBtYWtlX251bWJlciAoeCksIG1ha2VfbnVtYmVyICh5KSwgbWFrZV9udW1i ZXIgKGhwb3MpLCBtYWtlX251bWJlciAodnBvcykpOworICAgICAgICAgICAgdGVtcCA9IEZjb25z IChzcGVjcywgRmNvbnMgKHhfeV9ocG9zX3Zwb3MsIFFuaWwpKTsKKyAgICAgICAgICAgIHJlc3Vs dCA9IEZjb25zICh0ZW1wLCByZXN1bHQpOworICAgICAgICAgICAgbWNfZHJhd19lcmFzZV9oeWJy aWQgKHcsIHgsIHksIGhwb3MsIHZwb3MsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lkdGgsIGNvbG9y X3ZlY3RvciwgUW1jX2dseXBoKTsKKyAgICAgICAgICB9CisvKiBgdy0+bWNfZ2x5cGhfY2FjaGUn IGlzIHNldCBmb3IgdGhlIHdpbmRvdywgbm90IGJ1ZmZlcit3aW5kb3cgLS0gaS5lLiwgYWxsIGJ1 ZmZlcnMgYXBwZWFyaW5nCitpbiB0aGUgc2FtZSB3aW5kb3cgdmlhIGBzd2l0Y2gtdG8tYnVmZmVy JyB3aWxsIGhhdmUgYHctPm1jX2dseXBoX2NhY2hlJy4gIFRoaXMgYmVoYXZpb3IKK2lzIGNvbnNp c3RlbnQgd2l0aCBmdW5jdGlvbnMgc3VjaCBhcyBgc2V0LXdpbmRvdy1kaXNwbGF5LXRhYmxlJy4g IFdlIGRlYWwgd2l0aCB0aGlzIGluCitgbnN0ZXJtLm0nIC8gYHczMnRlcm0uYycgLyBgeHRlcm0u YycgYnkgY29tcGFyaW5nIGB3LT5jb250ZW50cycgdG8gdGhlIHZhbHVlIG9mIHRoZSBgYnVmJwor c3RvcmVkIGluIGB3LT5tY19nbHlwaF9jYWNoZSc6ICAoRVEgKHctPmNvbnRlbnRzLCBYQ0FSIChG bnRoIChtYWtlX251bWJlciAoMiksIHctPm1jX2dseXBoX2NhY2hlKSkpKSAqLworICAgICAgICBp ZiAoIU5JTFAgKHJlc3VsdCkpCisgICAgICAgICAgd3NldF9tY19nbHlwaF9jYWNoZSAodywgbGlz dG4gKENPTlNUWVBFX0hFQVAsIDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQlZBUiAoYiwgbWNfZ2x5cGhfbGlzdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRnJldmVyc2UgKHJlc3VsdCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRmNvbnMgKGJ1ZiwgUW5pbCkpKTsKKyAgICAgICAgdy0+bWMuZHJhd19nbHlwaF9j dXJzb3IgPSBmYWxzZTsKKyAgICAgIH0KKyAgYmlkaV91bnNoZWx2ZV9jYWNoZSAoaXRkYXRhLCBm YWxzZSk7Cit9CisKK2ludAorbWNfbW92ZV9pdF9pbl9kaXNwbGF5X2xpbmUgKHN0cnVjdCB3aW5k b3cgKncsIHN0cnVjdCBpdCAqaXQsIGludCB0YXJnZXRfeCkKK3sKKyAgaWYgKElUX0NIQVJQT1Mg KCppdCkgPT0gWlYpCisgICAgcmV0dXJuIE1PVkVfUE9TX01BVENIX09SX1pWOworICBzdHJ1Y3Qg aXQgc2F2ZWRfaXQ7CisgIHZvaWQgKnNhdmVkX2RhdGEgPSBiaWRpX3NoZWx2ZV9jYWNoZSAoKTsK KyAgZW51bSBtb3ZlX2l0X3Jlc3VsdCByYyA9IE1PVkVfWF9SRUFDSEVEOworICBpbnQgbmV3X3gs IHByZXZfeDsKKyAgLyogV2hlbiBgYXV0by1oc2Nyb2xsLW1vZGUnIGlzIHNldCB0byBgY3VycmVu dC1saW5lYCBhbmQgd2UgYXJlIGhvcml6b250YWwgc2Nyb2xsaW5nCisgIGEgbG9uZyBsaW5lIHRo YXQgYXBwcm9hY2hlcyBvciBleGNlZWRzIGFuIGBpdC5jdXJyZW50LnhgIG9mIGFwcHJveGltYXRl bHkgMTAwMCwgYHJjYAorICB3aWxsIGVycm9uZW91c2x5IHJldHVybiBlYXJseSB3aXRoIGEgTU9W RV9MSU5FX1RSVU5DQVRFRCBpbmRpY2F0b3IgIHdpdGhvdXQgcHVzaGluZworICBmb3J3YXJkcyB1 bnRpbCBJVCByZWFjaGVzIHRoZSB0YXJnZXRfeC4gIEFzIGEgd29ya2Fyb3VuZCwgaWdub3JlIE1P VkVfTElORV9UUlVOQ0FURUQuICovCisgIHdoaWxlIChpdC0+Y3VycmVudF94ICsgaXQtPnBpeGVs X3dpZHRoIDw9IHRhcmdldF94CisgICAgICAgICAmJiAocmMgPT0gTU9WRV9YX1JFQUNIRUQKKyAg ICAgICAgICAgICB8fCByYyA9PSBNT1ZFX0xJTkVfVFJVTkNBVEVECisgICAgICAgICAgICAgfHwg KGl0LT5saW5lX3dyYXAgPT0gV09SRF9XUkFQCisgICAgICAgICAgICAgICAgICYmIHJjID09IE1P VkVfUE9TX01BVENIX09SX1pWKSkpCisgICAgeworICAgICAgU0FWRV9JVCAoc2F2ZWRfaXQsICpp dCwgc2F2ZWRfZGF0YSk7CisgICAgICBuZXdfeCA9IGl0LT5jdXJyZW50X3ggKyBpdC0+cGl4ZWxf d2lkdGg7CisgICAgICBpZiAobmV3X3ggPT0gaXQtPmN1cnJlbnRfeCkKKyAgICAgICAgbmV3X3gr KzsKKyAgICAgIHJjID0gbW92ZV9pdF9pbl9kaXNwbGF5X2xpbmVfdG8gKGl0LCBaViwgbmV3X3gs IE1PVkVfVE9fUE9TIHwgTU9WRV9UT19YKTsKKyAgICAgIGlmIChJVEVSQVRPUl9BVF9FTkRfT0Zf TElORV9QIChpdCkKKyAgICAgICAgICB8fCBGRVRDSF9CWVRFIChJVF9CWVRFUE9TICgqaXQpKSA9 PSAnXG4nCisgICAgICAgICAgLyogIzI4OTM2OiAgYG1vdmVfaXRfaW5fZGlzcGxheV9saW5lX3Rv JyByZXR1cm5zIE1PVkVfUE9TX01BVENIX09SX1pWCisgICAgICAgICAgYmVmb3JlIHJlYWNoaW5n IFpWIHdoZW4gdGhlIGxhdHRlciBpcyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lIEFORCBgd29yZC13 cmFwJworICAgICAgICAgIGlzIG5vbi1uaWw6ICBhYmNkZWZnW1pWXS4gIFRoZSB3b3JrYXJvdW5k IGlzIHRvIGFkZCBhbiBleHRyYSBjaGVjayB1c2luZworICAgICAgICAgIElUX0NIQVJQT1MgYW5k IGNvbXBhcmluZyBpdCB0byBaVi4gKi8KKyAgICAgICAgICB8fCAocmMgPT0gTU9WRV9QT1NfTUFU Q0hfT1JfWlYKKyAgICAgICAgICAgICAgJiYgSVRfQ0hBUlBPUyAoKml0KSA9PSBaVikpCisgICAg ICAgIGJyZWFrOworICAgIH0KKyAgLyogV2hlbiB3b3JkLXdyYXAgaXMgb24sIFRPX1ggbWF5IGxp ZSBwYXN0IHRoZSBlbmQgb2YgYSB3cmFwcGVkIGxpbmUuCisgIFRoZW4gaXQtPmN1cnJlbnQgaXMg dGhlIGNoYXJhY3RlciBvbiB0aGUgbmV4dCBsaW5lLCBzbyBiYWNrdHJhY2sgdG8gdGhlCisgIHNw YWNlIGJlZm9yZSB0aGUgd3JhcCBwb2ludC4gICovCisgIGlmIChpdC0+bGluZV93cmFwID09IFdP UkRfV1JBUAorICAgICAgJiYgcmMgPT0gTU9WRV9MSU5FX0NPTlRJTlVFRCkKKyAgICB7CisgICAg ICBwcmV2X3ggPSBtYXggKGl0LT5jdXJyZW50X3ggLSAxLCAwKTsKKyAgICAgIFJFU1RPUkVfSVQg KGl0LCAmc2F2ZWRfaXQsIHNhdmVkX2RhdGEpOworICAgICAgbW92ZV9pdF9pbl9kaXNwbGF5X2xp bmVfdG8gKGl0LCAtMSwgcHJldl94LCBNT1ZFX1RPX1gpOworICAgIH0KKyAgYmlkaV91bnNoZWx2 ZV9jYWNoZSAoc2F2ZWRfZGF0YSwgdHJ1ZSk7CisgIC8qIFdvcmthcm91bmQgZm9yIGJ1ZyAjMjg5 MzYgLS0gY29ycmVjdCB0aGUgZXJyb25lb3VzIE1PVkVfUE9TX01BVENIX09SX1pWLiAqLworICBp ZiAoaXQtPmN1cnJlbnRfeCA9PSB0YXJnZXRfeAorICAgICAgJiYgcmMgPT0gTU9WRV9QT1NfTUFU Q0hfT1JfWlYKKyAgICAgICYmIElUX0NIQVJQT1MgKCppdCkgIT0gWlYpCisgICAgcmMgPSBNT1ZF X1hfUkVBQ0hFRDsKKyAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorbWNfY3Jvc3NoYWly c19oZWxwZXIgKHN0cnVjdCB3aW5kb3cgKncsIHB0cmRpZmZfdCB4LCBwdHJkaWZmX3QgeSwgcHRy ZGlmZl90IGhwb3MsIHB0cmRpZmZfdCB2cG9zLAorICAgICAgICAgICAgICAgICAgICAgIGVudW0g dGV4dF9jdXJzb3Jfa2luZHMgdHlwZSwgaW50IHdpZHRoLAorICAgICAgICAgICAgICAgICAgICAg IExpc3BfT2JqZWN0IGZvcmVncm91bmQsIExpc3BfT2JqZWN0IGJhY2tncm91bmQsCisgICAgICAg ICAgICAgICAgICAgICAgTGlzcF9PYmplY3QgZmxhdm9yLCBwdHJkaWZmX3QgcG9zLCBMaXNwX09i amVjdCAqcmVzdWx0KQoreworICBMaXNwX09iamVjdCB0ZW1wOworICBtY19kcmF3X2VyYXNlX2h5 YnJpZCAodywgeCwgeSwgaHBvcywgdnBvcywgdHlwZSwgd2lkdGgsIGZvcmVncm91bmQsIGZsYXZv cik7CisgIHRlbXAgPSBsaXN0biAoQ09OU1RZUEVfSEVBUCwgMTAsCisgICAgICAgICAgICAgICAg bWFrZV9udW1iZXIgKHgpLAorICAgICAgICAgICAgICAgIG1ha2VfbnVtYmVyICh5KSwKKyAgICAg ICAgICAgICAgICBtYWtlX251bWJlciAoaHBvcyksCisgICAgICAgICAgICAgICAgbWFrZV9udW1i ZXIgKHZwb3MpLAorICAgICAgICAgICAgICAgIG1jX2N1cnNvcl90eXBlX3RvX2xpc3AgKHR5cGUp LAorICAgICAgICAgICAgICAgIG1ha2VfbnVtYmVyICh3aWR0aCksCisgICAgICAgICAgICAgICAg Zm9yZWdyb3VuZCwKKyAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kLAorICAgICAgICAgICAgICAg IGZsYXZvciwKKyAgICAgICAgICAgICAgICBtYWtlX251bWJlciAocG9zKSk7CisgICpyZXN1bHQg PSBGY29ucyAodGVtcCwgKnJlc3VsdCk7Cit9CisKK3ZvaWQKK21jX2RyYXdfY3Jvc3NoYWlycyAo c3RydWN0IHdpbmRvdyAqdykKK3sKKyAgLyogRWxpIFouOiAgVGhpcyBkb2Vzbid0IGZlZWwgcmVs ZXZhbnQuICBZb3UgY2FuIGFsd2F5cyByZWRpc3BsYXkgYSB3aW5kb3cgdGhhdCBpcworICBub3Qg dGhlIHNlbGVjdGVkIHdpbmRvdywgcHJvdmlkZWQgdGhhdCB5b3UgdGFrZSBjYXJlIHRvIHN3aXRj aCB0byBpdHMgYnVmZmVyCisgIChyZWRpc3BsYXkgZG9lcyB0aGF0IGFscmVhZHkpLiAqLworICBp ZiAodyAhPSBYV0lORE9XIChzZWxlY3RlZF93aW5kb3cpKQorICAgIHJldHVybjsKKyAgLyogRWxp IFouOiAgSG93IGRpZCB5b3UgZ2V0IGludG8gdGhpcyBzaXR1YXRpb24/ICBJdCBzaG91bGRuJ3Qg aGFwcGVuIGR1cmluZyByZWRpc3BsYXkuICovCisgIGlmICghV0lORE9XX1ZBTElEX1AgKHNlbGVj dGVkX3dpbmRvdykpCisgICAgcmV0dXJuOworICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHct PmZyYW1lKTsKKyAgTGlzcF9PYmplY3QgYnVmID0gdy0+Y29udGVudHM7CisgIENIRUNLX0JVRkZF UiAoYnVmKTsKKyAgc3RydWN0IGJ1ZmZlciAqYiA9IFhCVUZGRVIgKGJ1Zik7CisvKiBlYXNzZXJ0 IChDSEFSUE9TIChwb3MpID49IEJFR1YgJiYgQ0hBUlBPUyAocG9zKSA8PSBaVik7CisgICBlYXNz ZXJ0IChjaGFycG9zID09IEJZVEVfVE9fQ0hBUiAoYnl0ZXBvcykpOworICAgZWFzc2VydCAoQlVG X0JFR19CWVRFIChiKSA8PSBieXRlcG9zICYmIGJ5dGVwb3MgPD0gQlVGX1pfQllURSAoYikpOyAq LworICBwdHJkaWZmX3QgY2hhcnBvcyA9IG1hcmtlcl9wb3NpdGlvbiAody0+c3RhcnQpOworICBw dHJkaWZmX3QgYnl0ZXBvcyA9IG1hcmtlcl9ieXRlX3Bvc2l0aW9uICh3LT5zdGFydCk7CisgIC8q IEVsaSBaLjogIElmIHdpbmRvdydzIHN0YXJ0IHBvaW50IGlzIGludmFsaWQsIGl0IG1lYW5zIHRo ZSB3aW5kb3cgbmVlZHMgdG8gYmUKKyAgcmVkaXNwbGF5ZWQuICBBZ2FpbiwgSSdtIG5vdCBzdXJl IEkgdW5kZXJzdGFuZCBob3cgZG8geW91IGdldCBpbnRvIHRoaXMgc2l0dWF0aW9uCisgIGluIHRo ZSBtaWRkbGUgb2YgcmVkaXNwbGF5LiAqLworICBib29sIGJhcmZfY3Jhc2hfb25lID0gKGNoYXJw b3MgPj0gQkVHViAmJiBjaGFycG9zIDw9IFpWKSA/IGZhbHNlIDogdHJ1ZTsKKyAgaWYgKGJhcmZf Y3Jhc2hfb25lKQorICAgIHJldHVybjsKKyAgLyogRWxpIFouOiAgTGlrZXdpc2UuICBNYXJrZXJz IGFyZSB1cGRhdGVkIHdoZW4gYSBidWZmZXIgaXMgbW9kaWZpZWQsIHNvIHRoaXMKKyAgc2hvdWxk IG5ldmVyIGhhcHBlbi4gKi8KKyAgYm9vbCBiYXJmX2NyYXNoX3R3byA9IChjaGFycG9zID09IEJZ VEVfVE9fQ0hBUiAoYnl0ZXBvcykpID8gZmFsc2UgOiB0cnVlOworICBpZiAoYmFyZl9jcmFzaF90 d28pCisgICAgcmV0dXJuOworICAvKiBFbGkgWi46ICBTaW5jZSB5b3UgYWxyZWFkeSB2ZXJpZmll ZCB0aGUgc2FtZSBjb25kaXRpb24gYWJvdXQgdGhlIGNoYXJhY3RlcgorICBwb3NpdGlvbiwgYW5k IHlvdSBhbHJlYWR5IHZlcmlmaWVkIHRoYXQgdGhlIGNoYXJhY3RlciBwb3NpdGlvbiBhbmQgdGhl IGJ5dGUKKyAgcG9zaXRpb24gYXJlIGNvbnNpc3RlbnQsIHRoaXMgY29uZGl0aW9uIGlzIHJlZHVu ZGFudC4gKi8KKy8qCisgIGJvb2wgYmFyZl9jcmFzaF90aHJlZSA9IChCVUZfQkVHX0JZVEUgKGIp IDw9IGJ5dGVwb3MgJiYgYnl0ZXBvcyA8PSBCVUZfWl9CWVRFIChiKSkgPyBmYWxzZSA6IHRydWU7 CisgIGlmIChiYXJmX2NyYXNoX3RocmVlKQorICAgIHJldHVybjsKKyovCisgIGlmICghQlVGRkVS UCAoYnVmKSkKKyAgICByZXR1cm47CisgIGlmIChOSUxQIChCVkFSIChiLCBjcm9zc2hhaXJzKSkp CisgICAgcmV0dXJuOworICBpZiAoTklMUCAoQlZBUiAoYiwgY3Jvc3NoYWlyc19ob3Jpem9udGFs X3J1bGVyKSkKKyAgICAgICYmIE5JTFAgKEJWQVIgKGIsIGNyb3NzaGFpcnNfdmVydGljYWxfcnVs ZXIpKSkKKyAgICByZXR1cm47CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEJFR0lOIEpPVVJORVkgLi4uCisqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKy8qCisjaWZkZWYgR0xZUEhfREVCVUcKKyAgY2xvY2tfdCBzdGFydCwgZW5kOworICBk b3VibGUgY3B1X3RpbWVfdXNlZDsKKyAgY2hhciBidWZfdGltZVtEQkxfQlVGU0laRV9CT1VORF07 CisgIHN0YXJ0ID0gY2xvY2soKTsKKyNlbmRpZgorKi8KKyAgc3RydWN0IGl0IGl0OworICB2b2lk ICppdGRhdGEgPSBiaWRpX3NoZWx2ZV9jYWNoZSAoKTsKKyAgc3RydWN0IGl0IHNhdmVkX2l0X2Zv cl93aW5kb3dfc3RhcnQ7CisgIHZvaWQgKnNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0ID0g TlVMTDsKKyAgc3RydWN0IGl0IHNhdmVkX2l0X2Zvcl9ob3Jpem9udGFsX3J1bGVyOworICB2b2lk ICpzYXZlZF9pdGRhdGFfZm9yX2hvcml6b250YWxfcnVsZXIgPSBOVUxMOworICBlbnVtIG1vdmVf aXRfcmVzdWx0IHJjID0gTU9WRV9YX1JFQUNIRUQ7CisgIHN0cnVjdCB0ZXh0X3BvcyBzdGFydF90 ZXh0X3Bvc2l0aW9uOworICBwdHJkaWZmX3QgaXRfc3RhcnQ7CisgIGludCBmaXJzdF94LCBsYXN0 X3g7CisgIGludCBsbnVtX3dpZHRoID0gMDsKKyAgaW50IGxudW1fcGl4ZWxfd2lkdGggPSAwOwor ICBpbnQgZnJhbWVfY2hhcl93aWR0aCA9IEZSQU1FX0NPTFVNTl9XSURUSCAoZik7CisgIGJvb2wg aHNjbCA9ICghdy0+c3VzcGVuZF9hdXRvX2hzY3JvbGwKKyAgICAgICAgICAgICAgICYmIEVRIChG YnVmZmVyX2xvY2FsX3ZhbHVlIChRYXV0b19oc2Nyb2xsX21vZGUsIGJ1ZiksIFFjdXJyZW50X2xp bmUpCisgICAgICAgICAgICAgICAmJiB3LT5oc2Nyb2xsID4gMCk7CisgIGludCBoc2NsX2ZpcnN0 X2hwb3MgPSB3aW5kb3dfaHNjcm9sbF9saW1pdGVkICh3LCBmKTsKKyAgaW50IGhzY2xfZmlyc3Rf eCA9IGhzY2xfZmlyc3RfaHBvcyAqIGZyYW1lX2NoYXJfd2lkdGg7CisgIGludCB0ZXh0X2FyZWFf d2lkdGggPSB3aW5kb3dfYm94X3dpZHRoICh3LCBURVhUX0FSRUEpOworICBib29sIGN1cnNvcl9p bl9mcmluZ2VfcCA9IHctPm91dHB1dF9jdXJzb3IueCArIGZyYW1lX2NoYXJfd2lkdGggPj0gdGV4 dF9hcmVhX3dpZHRoOworICBzdHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3c7CisgIGludCByaWdo dF9mcmluZ2Vfd2lkdGggPSBXSU5ET1dfUklHSFRfRlJJTkdFX1dJRFRIICh3KTsKKyAgaW50IGhl YWRlcl9saW5lX2hlaWdodCA9IFdJTkRPV19IRUFERVJfTElORV9IRUlHSFQgKHcpOworICBpbnQg Y3Vyc29yX3dpZHRoID0gMTsKKyAgcHRyZGlmZl90IG9wb2ludF9wdCA9IFBUOworICBpbnQgcmVs YXRpdmVfeCwgaHBvcywgdnBvczsKKyAgaW50IG9wb2ludF94ID0gdy0+b3V0cHV0X2N1cnNvci54 OworICBpbnQgb3BvaW50X3kgPSB3LT5vdXRwdXRfY3Vyc29yLnk7CisgIGludCBvcG9pbnRfaHBv cyA9IHctPm91dHB1dF9jdXJzb3IuaHBvczsKKyAgaW50IG9wb2ludF92cG9zID0gdy0+b3V0cHV0 X2N1cnNvci52cG9zOworICBwdHJkaWZmX3QgY3VycmVudF9jb2wgPSBjdXJyZW50X2NvbHVtbiAo KTsKKyAgYm9vbCBmaWxsX2NvbHVtbl9wID0gIU5JTFAgKEJWQVIgKGIsIGZpbGxfY29sdW1uKSk7 CisgIHB0cmRpZmZfdCBmaWxsX2NvbCA9IFhJTlQgKEJWQVIgKGIsIGZpbGxfY29sdW1uKSk7Cisg IExpc3BfT2JqZWN0IHJlc3VsdCA9IFFuaWw7CisgIExpc3BfT2JqZWN0IGZsYXZvciA9IFFuaWw7 CisgIC8qIFZhbHVlcyBmb3IgdGhlIGN1cnJlbnQgY29sdW1uIG9mIHRoZSB2ZXJ0aWNhbCBsaW5l LiAqLworICBMaXNwX09iamVjdCBmb3JlZ3JvdW5kID0gRm1ha2VfdmVjdG9yIChtYWtlX251bWJl ciAoMyksIFFuaWwpOworICBzdHJ1Y3QgZ2x5cGggKnBoeXNfY3Vyc29yX2dseXBoOworICBlbnVt IGZhY2VfaWQgZmFjZV9pZCA9ICgocGh5c19jdXJzb3JfZ2x5cGggPSBnZXRfcGh5c19jdXJzb3Jf Z2x5cGggKHcpKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBERUZBVUxU X0ZBQ0VfSUQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcGh5c19jdXJzb3JfZ2x5cGgt PmZhY2VfaWQ7CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQ09MT1IgT0YgQ1JPU1NIQUlSUworKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisg IGVudW0gZmFjZV9pZCBldmVuX2ZhY2VfaWQgPSBsb29rdXBfbmFtZWRfZmFjZSAoZiwgaW50ZXJu ICgiKy1ldmVuLW51bWJlcmVkLWNvbHVtbi1mYWNlIiksIHRydWUpOworICBzdHJ1Y3QgZmFjZSAq ZXZlbl9mYWNlID0gRkFDRV9GUk9NX0lEIChmLCBldmVuX2ZhY2VfaWQpOworICBMaXNwX09iamVj dCBldmVuX2NvbG9yID0gZXZlbl9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsK KyAgQ0hFQ0tfU1RSSU5HIChldmVuX2NvbG9yKTsKKyAgTGlzcF9PYmplY3QgZXZlbl9jb2xvcl92 ZWN0b3IgPSBtY19jb2xvcl92ZWN0b3JfY2FsYyAodywgZXZlbl9jb2xvcik7CisgIGVudW0gZmFj ZV9pZCBvZGRfZmFjZV9pZCA9IGxvb2t1cF9uYW1lZF9mYWNlIChmLCBpbnRlcm4gKCIrLW9kZC1u dW1iZXJlZC1jb2x1bW4tZmFjZSIpLCB0cnVlKTsKKyAgc3RydWN0IGZhY2UgKm9kZF9mYWNlID0g RkFDRV9GUk9NX0lEIChmLCBvZGRfZmFjZV9pZCk7CisgIExpc3BfT2JqZWN0IG9kZF9jb2xvciA9 IG9kZF9mYWNlLT5sZmFjZVtMRkFDRV9GT1JFR1JPVU5EX0lOREVYXTsKKyAgQ0hFQ0tfU1RSSU5H IChvZGRfY29sb3IpOworICBMaXNwX09iamVjdCBvZGRfY29sb3JfdmVjdG9yID0gbWNfY29sb3Jf dmVjdG9yX2NhbGMgKHcsIG9kZF9jb2xvcik7CisgIGVudW0gZmFjZV9pZCBmaWxsX2ZhY2VfaWQg PSBsb29rdXBfbmFtZWRfZmFjZSAoZiwgaW50ZXJuICgiKy1iZXlvbmQtZmlsbC1jb2x1bW4tZmFj ZSIpLCB0cnVlKTsKKyAgc3RydWN0IGZhY2UgKmZpbGxfZmFjZSA9IEZBQ0VfRlJPTV9JRCAoZiwg ZmlsbF9mYWNlX2lkKTsKKyAgTGlzcF9PYmplY3QgZmlsbF9jb2xvciA9IGZpbGxfZmFjZS0+bGZh Y2VbTEZBQ0VfRk9SRUdST1VORF9JTkRFWF07CisgIENIRUNLX1NUUklORyAoZmlsbF9jb2xvcik7 CisgIExpc3BfT2JqZWN0IGZpbGxfY29sb3JfdmVjdG9yID0gbWNfY29sb3JfdmVjdG9yX2NhbGMg KHcsIGZpbGxfY29sb3IpOworICAvKiByZWQgKi8KKyAgaWYgKGN1cnJlbnRfY29sICUgMiAhPSAw CisgICAgICAmJiAhZmlsbF9jb2x1bW5fcCkKKyAgICBmb3JlZ3JvdW5kID0gb2RkX2NvbG9yX3Zl Y3RvcjsKKyAgLyogeWVsbG93ICovCisgIGlmIChjdXJyZW50X2NvbCAlIDIgPT0gMAorICAgICAg JiYgIWZpbGxfY29sdW1uX3ApCisgICAgZm9yZWdyb3VuZCA9IGV2ZW5fY29sb3JfdmVjdG9yOwor ICAvKiByZWQgKi8KKyAgaWYgKGN1cnJlbnRfY29sICUgMiAhPSAwCisgICAgICAmJiBmaWxsX2Nv bHVtbl9wCisgICAgICAmJiBjdXJyZW50X2NvbCA8PSBmaWxsX2NvbCkKKyAgICBmb3JlZ3JvdW5k ID0gb2RkX2NvbG9yX3ZlY3RvcjsKKyAgLyogeWVsbG93ICovCisgIGlmIChjdXJyZW50X2NvbCAl IDIgPT0gMAorICAgICAgJiYgZmlsbF9jb2x1bW5fcAorICAgICAgJiYgY3VycmVudF9jb2wgPD0g ZmlsbF9jb2wpCisgICAgZm9yZWdyb3VuZCA9IGV2ZW5fY29sb3JfdmVjdG9yOworICAvKiBncmVl biAqLworICBpZiAoZmlsbF9jb2x1bW5fcAorICAgICAgJiYgY3VycmVudF9jb2wgPiBmaWxsX2Nv bCkKKyAgICBmb3JlZ3JvdW5kID0gZmlsbF9jb2xvcl92ZWN0b3I7CisvKiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKKyAgICAgICAgICAgICAgICAgICAgICBTVEFSVCBESVNQTEFZIEFORCBQUklNRSBJ VAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqICovCisgIC8qIEJlZ2luIHRoZSBqb3VybmV5IGF0IHct PnN0YXJ0LiAqLworICBTRVRfVEVYVF9QT1NfRlJPTV9NQVJLRVIgKHN0YXJ0X3RleHRfcG9zaXRp b24sIHctPnN0YXJ0KTsKKyAgc3RhcnRfZGlzcGxheSAoJml0LCB3LCBzdGFydF90ZXh0X3Bvc2l0 aW9uKTsKKyAgZmlyc3RfeCA9IGl0LmZpcnN0X3Zpc2libGVfeDsKKyAgbGFzdF94ID0gaXQubGFz dF92aXNpYmxlX3g7CisgIGl0X3N0YXJ0ID0gSVRfQ0hBUlBPUyAoaXQpOworICBTQVZFX0lUIChz YXZlZF9pdF9mb3Jfd2luZG93X3N0YXJ0LCBpdCwgc2F2ZWRfaXRkYXRhX2Zvcl93aW5kb3dfc3Rh cnQpOworICAvKiBGaW5pc2ggcHJpbWluZyB0aGUgSVQgZm9yIHBvdGVudGlhbCBsaW5lIG51bWJl cnMuICovCisgIGlmICghTklMUCAoVmRpc3BsYXlfbGluZV9udW1iZXJzKQorICAgICAgJiYgIUVR IChWZGlzcGxheV9saW5lX251bWJlcnMsIFF2aXN1YWwpKQorICAgIHsKKyAgICAgIGl0LmZpcnN0 X3Zpc2libGVfeCA9IDA7CisgICAgICBtb3ZlX2l0X2J5X2xpbmVzICgmaXQsIDEpOworICAgICAg bG51bV93aWR0aCA9IGl0LmxudW1fd2lkdGg7CisgICAgICBsbnVtX3BpeGVsX3dpZHRoID0gaXQu bG51bV9waXhlbF93aWR0aDsKKyAgICAgIFJFU1RPUkVfSVQgKCZpdCwgJnNhdmVkX2l0X2Zvcl93 aW5kb3dfc3RhcnQsIHNhdmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0KTsKKyAgICAgIGl0LmZp cnN0X3Zpc2libGVfeCA9IGZpcnN0X3g7CisgICAgICBpdC5sYXN0X3Zpc2libGVfeCA9IGxhc3Rf eDsKKyAgICAgIGl0LmxudW1fd2lkdGggPSBsbnVtX3dpZHRoOworICAgICAgaXQubG51bV9waXhl bF93aWR0aCA9IGxudW1fcGl4ZWxfd2lkdGg7CisgICAgICBTQVZFX0lUIChzYXZlZF9pdF9mb3Jf d2luZG93X3N0YXJ0LCBpdCwgc2F2ZWRfaXRkYXRhX2Zvcl93aW5kb3dfc3RhcnQpOworICAgIH0K KyAgLyogVGhpcyBtaWdodCBoYXBwZW4gb24gT1NYIDEwLjExIHdoZW4gcmVzdG9yaW5nIGRlc2t0 b3AgYXQgdGhlIGJlZ2lubmluZworICBvZiBhIG5ldyBzZXNzaW9uPyAqLworICBpZiAoaXRfc3Rh cnQgPiBvcG9pbnRfcHQpCisgICAgcmV0dXJuOworLyogKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisg ICAgICAgICAgICAgICAgICAgICAgICAgUkVQTEFDRSBUSEUgUkVBTCBDVVJTT1IKKyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiAqLworICBlcmFzZV9waHlzX2N1cnNvciAodyk7CisgIGdseXBoX3JvdyA9 IE1BVFJJWF9ST1cgKHctPmN1cnJlbnRfbWF0cml4LCBvcG9pbnRfdnBvcyk7CisgIGlmICghY3Vy c29yX2luX2ZyaW5nZV9wKQorICAgIGZsYXZvciA9IFFtY19nbHlwaDsKKyAgICAvKiBUaGlzIGNv bmRpdGlvbiBwcm9iYWJseSBkb2VzIG5vdCBleGlzdCBmb3IgdGhlIHJlYWwgZmFrZSBjdXJzb3Iu ICovCisgICAgZWxzZSBpZiAoY3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAgICAgJiYgZ2x5 cGhfcm93LT5jb250aW51ZWRfcCkKKyAgICAgIGZsYXZvciA9IFFtY19waWxjcm93OworICAgICAg ZWxzZSBpZiAoY3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAgICAgICAmJiBnbHlwaF9yb3ct PnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICBmbGF2b3IgPSBRbWNfaG9sbG93X3JlY3Rh bmdsZV9yaWdodF9hbmdsZTsKKyAgICAgICAgZWxzZSBpZiAoY3Vyc29yX2luX2ZyaW5nZV9wCisg ICAgICAgICAgICAgICAgICYmICFnbHlwaF9yb3ctPmNvbnRpbnVlZF9wCisgICAgICAgICAgICAg ICAgICYmICFnbHlwaF9yb3ctPnRydW5jYXRlZF9vbl9yaWdodF9wKQorICAgICAgICAgIGZsYXZv ciA9IFFtY19ob2xsb3dfcmVjdGFuZ2xlOworICBtY19jcm9zc2hhaXJzX2hlbHBlciAodywgb3Bv aW50X3gsIG9wb2ludF95LCBvcG9pbnRfaHBvcywgb3BvaW50X3Zwb3MsCisgICAgICAgICAgICAg ICAgICAgICAgICBIT0xMT1dfQk9YX0NVUlNPUiwgY3Vyc29yX3dpZHRoLAorICAgICAgICAgICAg ICAgICAgICAgICAgZm9yZWdyb3VuZCwgbWNfYmdfY29sb3JfdmVjdG9yICh3LCBmYWNlX2lkKSwK KyAgICAgICAgICAgICAgICAgICAgICAgIGZsYXZvciwgb3BvaW50X3B0LCAmcmVzdWx0KTsKKyAg bWNfY3Jvc3NoYWlyc19oZWxwZXIgKHcsIG9wb2ludF94LCBvcG9pbnRfeSwgb3BvaW50X2hwb3Ms IG9wb2ludF92cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgSE9MTE9XX0JPWF9DVVJTT1Is IGN1cnNvcl93aWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQsIG1jX2Jn X2NvbG9yX3ZlY3RvciAodywgZmFjZV9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICBRb3Zl cmxheV9hcnJvd19iaXRtYXAsIG9wb2ludF9wdCwgJnJlc3VsdCk7CisgIGlmIChOSUxQIChCVkFS IChiLCBjcm9zc2hhaXJzX2hvcml6b250YWxfcnVsZXIpKSkKKyAgICBnb3RvIHZlcnRpY2FsX3J1 bGVyOworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgSE9S SVpPTlRBTCBSVUxFUjogIEdPVE8gTElORSBCRUdJTgorKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CisgIC8qIFBsYWNlIHRoZSBJVCBvbiB0aGUgY3VycmVudCBsaW5lIGNvbnRhaW5pbmcgUFQuICov CisgIGludCB2b2Zmc2V0ID0gKGhlYWRlcl9saW5lX2hlaWdodCA+IDAKKyAgICAgICAgICAgICAg ICAgJiYgb3BvaW50X3Zwb3MgPiAwKQorICAgICAgICAgICAgICAgICAgPyBvcG9pbnRfdnBvcyAt IDEKKyAgICAgICAgICAgICAgICAgIDogb3BvaW50X3Zwb3M7CisgIGlmICh2b2Zmc2V0ID4gMCkK KyAgICBtb3ZlX2l0X2J5X2xpbmVzICgmaXQsIHZvZmZzZXQpOworLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqCisgICAgICAgICAgICAgICAgSE9SSVpPTlRBTCBSVUxFUjogIEZJUlNUIFggPT4gUEVO VUxUSU1BVEUgRU9MCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKyAgd2hpbGUgKHRydWUpCisg ICAgeworICAgICAgZmxhdm9yID0gKGl0LmMgIT0gJ1x0JykgPyBRbWNfZ2x5cGggOiBRbWNfZ2x5 cGhfdGFiOworICAgICAgaWYgKGhzY2wpCisgICAgICAgIHsKKyAgICAgICAgICByZWxhdGl2ZV94 ID0gaXQuY3VycmVudF94IC0gKGhzY2xfZmlyc3RfaHBvcyAqIGZyYW1lX2NoYXJfd2lkdGgpOwor ICAgICAgICAgIGhwb3MgPSBpdC5ocG9zIC0gaHNjbF9maXJzdF9ocG9zOworICAgICAgICB9Cisg ICAgICAgIGVsc2UKKyAgICAgICAgICB7CisgICAgICAgICAgICByZWxhdGl2ZV94ID0gaXQuY3Vy cmVudF94IC0gZmlyc3RfeDsKKyAgICAgICAgICAgIGhwb3MgPSBpdC5ocG9zOworICAgICAgICAg IH0KKyAgICAgIGlmIChoZWFkZXJfbGluZV9oZWlnaHQgPiAwKQorICAgICAgICB2cG9zID0gaXQu dnBvcyArIDE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB2cG9zID0gaXQudnBvczsKKyAgICAg IGJvb2wgbHB3X3JlYWNoZWRfcCA9ICgoaHNjbAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmJiBpdC5jdXJyZW50X3ggPj0gaHNjbF9maXJzdF94ICsgbG51bV9waXhlbF93aWR0aCkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoIWhzY2wKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgaXQuY3VycmVudF94ID49IGZpcnN0X3ggKyBsbnVtX3BpeGVsX3dpZHRo KSk7CisgICAgICBib29sIGZpbmFsX2xvb3BfcCA9IChJVEVSQVRPUl9BVF9FTkRfT0ZfTElORV9Q ICgmaXQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBGRVRDSF9CWVRFIChJVF9CWVRF UE9TIChpdCkpID09ICdcbicKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IHJjID09IE1P VkVfUE9TX01BVENIX09SX1pWKTsKKyAgICAgIGJvb2wgdGFiX2ludmlzaWJsZV9wID0gKGl0LmMg PT0gJ1x0Jyk7CisgICAgICBib29sIHRhYl92aXNpYmxlX3AgPSAoaXQuYyAhPSAnXHQnCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJiYgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoaXQpKSA9 PSAnXHQnKTsKKyAgICAgIGJvb2wgcmVhbF9mYWtlX2N1cnNvcl9wID0gKG9wb2ludF94ID09IHJl bGF0aXZlX3gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIG9wb2ludF95ID09 IGl0LmN1cnJlbnRfeQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50 X2hwb3MgPT0gaHBvcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgb3BvaW50 X3Zwb3MgPT0gdnBvcyk7CisgICAgICAvKiBpdC5jID09ICdcdCcgd2hlbiBJVCBpcyBhdCBhIHRh Yi13aWR0aCBzcGFjZXIgZm9sbG93aW5nIGEKKyAgICAgIGBidWZmZXItZGlzcGxheS10YWJsZScg Z2x5cGggc3VjaCBhcyDCuy4gIEFub3RoZXIgd2F5IHRvIHRlc3QKKyAgICAgIGZvciB0aGlzIGNv bmRpdGlvbiBpcyB3aGVuIGl0LmMgPT0gRkVUQ0hfQllURSAoSVRfQllURVBPUyAoaXQpKS4gKi8K KyAgICAgIGlmICghcmVhbF9mYWtlX2N1cnNvcl9wCisgICAgICAgICAgJiYgbHB3X3JlYWNoZWRf cAorICAgICAgICAgICYmICF0YWJfaW52aXNpYmxlX3ApCisgICAgICAgIG1jX2Nyb3NzaGFpcnNf aGVscGVyICh3LCByZWxhdGl2ZV94LCBpdC5jdXJyZW50X3ksIGhwb3MsIHZwb3MsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBIQkFSX0NVUlNPUiwgY3Vyc29yX3dpZHRoLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZCwgbWNfYmdfY29sb3JfdmVjdG9yICh3 LCBpdC5mYWNlX2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYXZvciwgSVRf Q0hBUlBPUyAoaXQpLCAmcmVzdWx0KTsKKyAgICAgIC8qIEZJWE1FOiAgRHJhd2luZyBhIFFtY19n bHlwaCBIQkFSX0NVUlNPUiBvbiBjZXJ0YWluIGxldHRlcnMgKEEsIG0sIE0sIHcsIFcpCisgICAg ICBsb2NhdGVkIHRvIHRoZSBpbW1lZGlhdGUgcmlnaHQgb2YgYSB0YWIgc3BhY2VyLCBjYXVzZSB0 aGUgUW1jX2dseXBobGVzcworICAgICAgSEJBUl9DVVJTT1IgdG8gdGhlIGltbWVkaWF0ZSBsZWZ0 IHRvIGJlIGVyYXNlZC4gIFRoaXMgaXMgcHJvYmFibHkgYW4KKyAgICAgIG92ZXJoYW5nIHNpdHVh dGlvbi4gIEFuIG9idmlvdXMgd29ya2Fyb3VuZCB3b3VsZCBiZSB0byByZWNvcmQgdGhlCisgICAg ICBjb29yZGluYXRlcyBmb3IgdGhlIFFtY19nbHlwaGxlc3MgY3Vyc29ycyBhbmQgdGhlbiBkcmF3 IHRoZW0gYWxsIEFGVEVSIHRoZQorICAgICAgUW1jX2dseXBoIGN1cnNvcnMgaGF2ZSBiZWVuIGxh aWQuICBIb3cgYWJvdXQgcHVzaGluZyBhbGwgdGhlIGNvb3JkaW5hdGVzCisgICAgICB0byB0aGUg Y2FjaGUsIGFuZCB0aGVuIGV4ZWN1dGluZyBhIHZhcmlhdGlvbiBvZiBgbWNfcmVkcmF3X2Nyb3Nz aGFpcnMnCisgICAgICBbd2l0aCBzYWlkIHZlcnNpb24gYmVpbmcgcmV3cml0dGVuXSB0byBsb29w IHR3aWNlIG92ZXIgdGhlIGxpc3QsIGZpcnN0CisgICAgICBmb3IgUW1jX2dseXBoLCBhbmQgdGhl biBmb3IgUW1jX2dseXBobGVzcz8gKi8KKyAgICAgIGlmICghcmVhbF9mYWtlX2N1cnNvcl9wCisg ICAgICAgICAgJiYgbHB3X3JlYWNoZWRfcAorICAgICAgICAgICYmIHRhYl9pbnZpc2libGVfcCkK KyAgICAgICAgeworICAgICAgICAgIGludCBpLCBjb3VudCA9IGl0LnBpeGVsX3dpZHRoIC8gZnJh bWVfY2hhcl93aWR0aDsKKyAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgbWNfY3Jvc3NoYWlyc19oZWxwZXIgKHcsIHJlbGF0 aXZlX3gsIGl0LmN1cnJlbnRfeSwgaHBvcywgdnBvcywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEhCQVJfQ1VSU09SLCBjdXJzb3Jfd2lkdGgsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmb3JlZ3JvdW5kLCBtY19iZ19jb2xvcl92ZWN0b3IgKHcsIGl0 LmZhY2VfaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhdm9yLCBJ VF9DSEFSUE9TIChpdCksICZyZXN1bHQpOworICAgICAgICAgICAgICByZWxhdGl2ZV94ID0gcmVs YXRpdmVfeCArIGZyYW1lX2NoYXJfd2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg ICAgIGlmIChmaW5hbF9sb29wX3ApCisgICAgICAgIGJyZWFrOworICAgICAgcmMgPSBtY19tb3Zl X2l0X2luX2Rpc3BsYXlfbGluZSAodywgJml0LCBpdC5jdXJyZW50X3ggKyBpdC5waXhlbF93aWR0 aCk7CisgICAgICBpZiAocmMgPT0gTU9WRV9MSU5FX0NPTlRJTlVFRCkKKyAgICAgICAgYnJlYWs7 CisgICAgICByZWxhdGl2ZV94ID0gKGhzY2wpCisgICAgICAgICAgICAgICAgICAgPyBpdC5jdXJy ZW50X3ggLSAoaHNjbF9maXJzdF9ocG9zICogZnJhbWVfY2hhcl93aWR0aCkKKyAgICAgICAgICAg ICAgICAgICA6IGl0LmN1cnJlbnRfeCAtIGZpcnN0X3g7CisgICAgICBpZiAocmVsYXRpdmVfeCAr IGZyYW1lX2NoYXJfd2lkdGggPj0gdGV4dF9hcmVhX3dpZHRoKQorICAgICAgICBicmVhazsKKyAg ICB9CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICBIT1JJWk9OVEFMIFJVTEVSOiAg RFJBVyBGTE9BVElORyBHTFlQSExFU1MgTElORSAoUE9TVC1FT0wgVE8gRlJJTkdFKQorKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqICovCisgIGlmIChJVEVSQVRPUl9BVF9FTkRfT0ZfTElORV9QICgmaXQp CisgICAgICAgfHwgRkVUQ0hfQllURSAoSVRfQllURVBPUyAoaXQpKSA9PSAnXG4nCisgICAgICAg fHwgcmMgPT0gTU9WRV9QT1NfTUFUQ0hfT1JfWlYKKyAgICAgICB8fCByYyA9PSBNT1ZFX0xJTkVf Q09OVElOVUVEKQorICAgIHsKKyAgICAgIC8qIFdlIHdhbnQgdG8gc3RhcnQgZHJhd2luZyB0aGUg ZmxvYXRpbmcgaG9yaXpvbnRhbCBsaW5lIGZyb20ganVzdCBhZnRlciBJVAorICAgICAgKGxpbmUg ZmVlZDsgWlY7IG9yIHNwYWNlLXdvcmRfd3JhcCkgdW50aWwgdGhlIHJpZ2h0IGZyaW5nZS4gIFdl IGFyZSBOT1QKKyAgICAgIHVzaW5nIGBpdC5waXhlbF93aWR0aGAgYmVjYXVzZSBpdHMgdmFsdWUg d2lsbCBiZSB6ZXJvIGlmIHRoZXJlIGlzIG9ubHkgYQorICAgICAgbGluZSBmZWVkIGF0IHRoZSBl bmQgb2YgdGhlIGJ1ZmZlcjsgZS5nLiwgYSBzaXR1YXRpb24gd2hlcmUgbGluZSBudW1iZXJzCisg ICAgICBhcmUgaW5oaWJpdGVkLCBidXQgQGxhd2xpc3QgcHJlZmVycyBzZWVpbmcgY3Jvc3NoYWly cyBpbiB0aGF0IHNpdHVhdGlvbi4KKyAgICAgIElmIHRoZSBsaW5lIGlzIGVtcHR5IG9yIGhpZGRl biBieSBob3Jpem9udGFsIHNjcm9sbGluZywgdGhlbiBgaXQuY3VycmVudF94YAorICAgICAgbWF5 IGJlIHNvbWV3aGVyZSBiZWZvcmUgYGxudW1fcGl4ZWxfd2lkdGhgLiAgVGhlIHJlYWwgY3Vyc29y IHdpbGwgYmUgdG8gdGhlCisgICAgICBsZWZ0IG9mIGBsbnVtX3BpeGVsX3dpZHRoYCBpZiB3ZSBh cmUgaG9yaXpvbnRhbCBzY3JvbGxpbmcgYW5kIHBvaW50IGlzCisgICAgICBoaWRkZW4gc29tZXdo ZXJlIHRvIHRoZSBsZWZ0IHRoZXJlb2YuICovCisgICAgICBpZiAoKGhzY2wKKyAgICAgICAgICAg JiYgaXQuY3VycmVudF94IDwgaHNjbF9maXJzdF94ICsgbG51bV9waXhlbF93aWR0aCkKKyAgICAg ICAgICB8fCAoIWhzY2wKKyAgICAgICAgICAgICAgJiYgaXQuY3VycmVudF94IDwgZmlyc3RfeCAr IGxudW1fcGl4ZWxfd2lkdGgpKQorICAgICAgICByZWxhdGl2ZV94ID0gbG51bV9waXhlbF93aWR0 aDsKKyAgICAgICAgZWxzZQorICAgICAgICAgIHJlbGF0aXZlX3ggPSByZWxhdGl2ZV94ICsgZnJh bWVfY2hhcl93aWR0aDsKKyAgICAgIC8qIENPUk5FUiBDQVNFUzoKKyAgICAgIC0gIFdoZW4gdGhl IGJlZ2lubmluZyBvZiB0aGUgYWN0aXZlIHJlZ2lvbiBpcyBhdCB0aGUgbGluZSBmZWVkIGNoYXJh Y3RlcgorICAgICAgICAgb2YgYSBjdXJyZW50IGxpbmUgdGhhdCBpcyBob3Jpem9udGFsbHkgc2Ny b2xsZWQuICBpdC5mYWNlX2lkIHJldHVybnMKKyAgICAgICAgIHRoZSBmb3JlZ3JvdW5kIG9mIHRo ZSBmcmFtZSwgaW5zdGVhZCBvZiB0aGUgYWN0aXZlIHJlZ2lvbi4KKyAgICAgIC0gIEFuIGVtcHR5 IGxpbmUgZW5kaW5nIGluIGEgbGluZSBmZWVkIGNoYXJhY3RlciByZXR1cm5zIHRoZSBmb3JlZ3Jv dW5kCisgICAgICAgICBvZiB0aGUgZnJhbWUsIGluc3RlYWQgb2YgdGhlIGFjdGl2ZSByZWdpb24u ICBUaGlzIGhhcHBlbnMgYmVjYXVzZSB3ZQorICAgICAgICAgZG8gbm90IGZvcmNlIGBtY19tb3Zl X2l0X2luX2Rpc3BsYXlfbGluZScgdG8ga2VlcCB0cmF2ZWxsaW5nIHRvCisgICAgICAgICBgZmly c3RfeCArIGxudW1fcGl4ZWxfd2lkdGhgLgorICAgICAgLSAgV2hlbiB0aGVyZSBpcyBhbiBpbWFn aW5hcnkgZW1wdHkgbGluZSBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgd2l0aAorICAgICAgICAg bm90aGluZyBvdGhlciB0aGFuIFpWLCB3ZSB3YW50IHRvIHVzZSB0aGUgZnJhbWUgZGVmYXVsdCBm YWNlIGlmIFpWCisgICAgICAgICBpcyBhdCB0aGUgZW5kIG9mIGFuIGFjdGl2ZSByZWdpb24uICAq LworICAgICAgaWYgKChoc2NsCisgICAgICAgICAgICYmIChJVEVSQVRPUl9BVF9FTkRfT0ZfTElO RV9QICgmaXQpCisgICAgICAgICAgICAgICB8fCBGRVRDSF9CWVRFIChJVF9CWVRFUE9TIChpdCkp ID09ICdcbicpCisgICAgICAgICAgICYmIGl0LmN1cnJlbnRfeCAtIGhzY2xfZmlyc3RfeCA9PSBv cG9pbnRfeCkKKyAgICAgICAgICB8fAorICAgICAgICAgICghaHNjbAorICAgICAgICAgICAmJiAo SVRFUkFUT1JfQVRfRU5EX09GX0xJTkVfUCAoJml0KQorICAgICAgICAgICAgICAgfHwgRkVUQ0hf QllURSAoSVRfQllURVBPUyAoaXQpKSA9PSAnXG4nKQorICAgICAgICAgICAmJiBpdC5jdXJyZW50 X3ggLSBmaXJzdF94IDwgbG51bV9waXhlbF93aWR0aCkpCisgICAgICAgIGl0LmZhY2VfaWQgPSBm YWNlX2lkOworICAgICAgICBlbHNlIGlmIChJVF9DSEFSUE9TIChpdCkgPT0gWlYpCisgICAgICAg ICAgaXQuZmFjZV9pZCA9IERFRkFVTFRfRkFDRV9JRDsKKyAgICAgIHdoaWxlIChyZWxhdGl2ZV94 ICsgZnJhbWVfY2hhcl93aWR0aCA8IHRleHRfYXJlYV93aWR0aCkKKyAgICAgICAgeworICAgICAg ICAgIG1jX2Nyb3NzaGFpcnNfaGVscGVyICh3LCByZWxhdGl2ZV94LCBpdC5jdXJyZW50X3ksIGhw b3MsIHZwb3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhCQVJfQ1VSU09SLCBj dXJzb3Jfd2lkdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVncm91bmQs IG1jX2JnX2NvbG9yX3ZlY3RvciAodywgaXQuZmFjZV9pZCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFFtY19nbHlwaGxlc3MsIElUX0NIQVJQT1MgKGl0KSwgJnJlc3VsdCk7Cisg ICAgICAgICAgcmVsYXRpdmVfeCA9IHJlbGF0aXZlX3ggKyBmcmFtZV9jaGFyX3dpZHRoOworICAg ICAgICB9CisgICAgfQorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAgIFZFUlRJ Q0FMIFJVTEVSOiAgQ09NQklOQVRJT04gT0YgR0xZUEggJiBHTFlQSExFU1MgQ1VSU09SUworKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisgIHZlcnRpY2FsX3J1bGVyOgorICBpZiAoTklMUCAoQlZB UiAoYiwgY3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxlcikpKQorICAgIGdvdG8gY3Jvc3NoYWlyc19m aW5pc2g7CisgIFJFU1RPUkVfSVQgKCZpdCwgJnNhdmVkX2l0X2Zvcl93aW5kb3dfc3RhcnQsIHNh dmVkX2l0ZGF0YV9mb3Jfd2luZG93X3N0YXJ0KTsKKyAgcmMgPSBNT1ZFX1hfUkVBQ0hFRDsKKyAg d2hpbGUgKHRydWUpCisgICAgeworICAgICAgcmMgPSBtY19tb3ZlX2l0X2luX2Rpc3BsYXlfbGlu ZSAodywgJml0LCBmaXJzdF94ICsgb3BvaW50X3gpOworICAgICAgcmVsYXRpdmVfeCA9IGl0LmN1 cnJlbnRfeCAtIGZpcnN0X3g7CisvKgorI2lmZGVmIEdMWVBIX0RFQlVHCisgIGRlYnVnX21ldGhv ZF9hZGQgKHcsICJ3LT5taW5faHNjcm9sbDogJWQiLCB3LT5taW5faHNjcm9sbCk7CisjZW5kaWYK KyovCisgICAgICAvKiBObyBuZWVkIHRvIHNwZWNpYWxseSBzZXQgSFBPUy4gIEEgZ2x5cGggY3Vy c29yIHdpbGwgcmVseSB1cG9uIGBvcG9pbnRfeCcgYW5kIGBvcG9pbnRfaHBvcycuCisgICAgICBB IGdseXBobGVzcyBjdXJzb3Igd2lsbCByZWx5IHVwb24gYGl0Lmhwb3MnIGJlY2F1c2UgaXQgaXMg YmV5b25kIGFueSBnbHlwaCB0aGF0IG1pZ2h0IGV4aXN0LiAqLworICAgICAgaWYgKGhlYWRlcl9s aW5lX2hlaWdodCA+IDApCisgICAgICAgIHZwb3MgPSBpdC52cG9zICsgMTsKKyAgICAgICAgZWxz ZQorICAgICAgICAgIHZwb3MgPSBpdC52cG9zOworICAgICAgYm9vbCByZWFsX2Zha2VfY3Vyc29y X3AgPSAob3BvaW50X3kgPT0gaXQuY3VycmVudF95CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJiYgdnBvcyA9PSBvcG9pbnRfdnBvcyk7CisgICAgICBnbHlwaF9yb3cgPSBNQVRSSVhf Uk9XICh3LT5jdXJyZW50X21hdHJpeCwgdnBvcyk7CisgICAgICBpZiAoY3Vyc29yX2luX2ZyaW5n ZV9wCisgICAgICAgICAgJiYgZ2x5cGhfcm93LT50cnVuY2F0ZWRfb25fcmlnaHRfcCkKKyAgICAg ICAgZmxhdm9yID0gUW1jX3ZlcnRpY2FsX2Jhcl9yaWdodF9hbmdsZTsKKyAgICAgICAgZWxzZSBp ZiAoY3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAgICAgICAgICYmIGdseXBoX3Jvdy0+Y29u dGludWVkX3ApCisgICAgICAgICAgZmxhdm9yID0gUW1jX3ZlcnRpY2FsX2Jhcl9iYWNrc2xhc2g7 CisgICAgICAgICAgZWxzZSBpZiAoY3Vyc29yX2luX2ZyaW5nZV9wCisgICAgICAgICAgICAgICAg ICAgJiYgIWdseXBoX3Jvdy0+dHJ1bmNhdGVkX29uX3JpZ2h0X3AKKyAgICAgICAgICAgICAgICAg ICAmJiAhZ2x5cGhfcm93LT5jb250aW51ZWRfcCkKKyAgICAgICAgICAgIGZsYXZvciA9IFFtY192 ZXJ0aWNhbF9iYXI7CisgICAgICAgICAgICBlbHNlIGlmICgoRkVUQ0hfQllURSAoSVRfQllURVBP UyAoaXQpKSAhPSAnXG4nCisgICAgICAgICAgICAgICAgICAgICAgLyogV2UgYXJlIGF0IGEgbGlu ZSBmZWVkIGNoYXJhY3RlciBhbmQgdGhlIHZlcnRpY2FsIHJ1bGVyIGludGVyc2VjdHMuICovCisg ICAgICAgICAgICAgICAgICAgICAgfHwgKEZFVENIX0JZVEUgKElUX0JZVEVQT1MgKGl0KSkgPT0g J1xuJworICAgICAgICAgICAgICAgICAgICAgICAgICAmJiByZWxhdGl2ZV94ID09IG9wb2ludF94 KSkKKyAgICAgICAgICAgICAgICAgICAgIC8qIElmIHdlIGFyZSBhdCBaViwgd2Ugd2FudCB0byB1 c2UgYSBnbHlwaGxlc3MgY3Vyc29yIGJlY2F1c2UgaXQgd2lsbAorICAgICAgICAgICAgICAgICAg ICAgbW9zdCBsaWtlbHkgYmUgZmxvYXRpbmcgc29tZXdoZXJlIG9mZiB0byB0aGUgcmlnaHQgb2Yg WlYuICBXZSBjb3VsZAorICAgICAgICAgICAgICAgICAgICAgcHJvYmFibHkgcGxhY2UgYSBnbHlw aCBjdXJzb3IgYXQgZXhhY3RseSBaViBieSBjcmVhdGluZyBhbiBhZGRpdGlvbmFsCisgICAgICAg ICAgICAgICAgICAgICBjb25kaXRpb24gaW4gdGhlIG5leHQgc2VjdGlvbiwgYnV0IGl0IGlzIG5v dCB0aGF0IGltcG9ydGFudC4gKi8KKyAgICAgICAgICAgICAgICAgICAgICYmIHJjICE9IE1PVkVf UE9TX01BVENIX09SX1pWCisgICAgICAgICAgICAgICAgICAgICAmJiAhcmVhbF9mYWtlX2N1cnNv cl9wCisgICAgICAgICAgICAgICAgICAgICAmJiBpdC5jICE9ICdcdCcKKyAgICAgICAgICAgICAg ICAgICAgICYmIHJlbGF0aXZlX3ggLyBmcmFtZV9jaGFyX3dpZHRoID49IGxudW1fcGl4ZWxfd2lk dGgKKyAgICAgICAgICAgICAgICAgICAgICYmIHJjICE9IE1PVkVfTElORV9DT05USU5VRUQpCisg ICAgICAgICAgICAgIGZsYXZvciA9IFFtY19nbHlwaDsKKyAgICAgICAgICAgICAgZWxzZSBpZiAo aXQuYyA9PSAnXHQnKQorICAgICAgICAgICAgICAgIGZsYXZvciA9IFFtY19nbHlwaF90YWI7Cisg ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGZsYXZvciA9IFFtY19n bHlwaGxlc3M7CisgICAgICAvKiBDT1JORVIgQ0FTRVM6CisgICAgICAtICBXaGVuIHRoZSB2ZXJ0 aWNhbCBsaW5lIGlzIHRvIHRoZSBsZWZ0IG9mIHRoZSB0ZXh0IGFuZCBqdXN0IHRvIHRoZSByaWdo dAorICAgICAgICAgb2YgdGhlIGxpbmUgbnVtYmVycywgd2Ugd2FudCB0aGUgZGVmYXVsdCBmYWNl LgorICAgICAgLSAgV2hlbiB0aGVyZSBpcyBhbiBpbWFnaW5hcnkgZW1wdHkgbGluZSBhdCB0aGUg ZW5kIG9mIHRoZSBidWZmZXIgd2l0aAorICAgICAgICAgbm90aGluZyBvdGhlciB0aGFuIFpWLCB3 ZSB3YW50IHRvIHVzZSB0aGUgZnJhbWUgZGVmYXVsdCBmYWNlIGlmIFpWCisgICAgICAgICBpcyBh dCB0aGUgZW5kIG9mIGFuIGFjdGl2ZSByZWdpb24uICAqLworICAgICAgaWYgKChyZWxhdGl2ZV94 IDw9IGxudW1fcGl4ZWxfd2lkdGgKKyAgICAgICAgICAgJiYgdy0+aHNjcm9sbCA+IDApCisgICAg ICAgICAgfHwgSVRfQ0hBUlBPUyAoaXQpID09IFpWKQorICAgICAgICBpdC5mYWNlX2lkID0gREVG QVVMVF9GQUNFX0lEOworICAgICAgaWYgKCFyZWFsX2Zha2VfY3Vyc29yX3ApCisgICAgICAgIG1j X2Nyb3NzaGFpcnNfaGVscGVyICh3LCBvcG9pbnRfeCwgaXQuY3VycmVudF95LCBpdC5ocG9zLCB2 cG9zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQkFSX0NVUlNPUiwgY3Vyc29yX3dp ZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWdyb3VuZCwgbWNfYmdfY29s b3JfdmVjdG9yICh3LCBpdC5mYWNlX2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGZsYXZvciwgSVRfQ0hBUlBPUyAoaXQpLCAmcmVzdWx0KTsKKyAgICAgIC8qIFRoaXMgY29tYmlu YXRpb24gb2YgYSBaViBjaGVjayBiZWZvcmUgYG1vdmVfaXRfYnlfbGluZXMnIGZvbGxvd2VkIGJ5 IGEKKyAgICAgIFkgY2hlY2sgc3Vic2VxdWVudCB0aGVyZXRvIGdpdmVzIHVzIHRoZSBGRUFUVVJF IG9mIGhhdmluZyBhIHZlcnRpY2FsIGxpbmUKKyAgICAgIGZvbGxvd2luZyBhIGxpbmUgdGVybWlu YXRpbmcgd2l0aCBaVi4gIFdoZXJlYXMgYGRpc3BsYXktbGluZS1udW1iZXJzLW1vZGUnCisgICAg ICBoYXMgYSBGRUFUVVJFIG9mIHN1cHByZXNzaW5nIHRoZSBsaW5lIG51bWJlcnMgaW4gdGhpcyBz aXR1YXRpb24sIHdlIGRyYXcKKyAgICAgIGNyb3NzaGFpcnMgaW4gdGhhdCBzaXR1YXRpb24uICBg bWNfbW92ZV9pdF9pbl9kaXNwbGF5X2xpbmUnIGhhcyBiZWVuCisgICAgICBlcXVpcHBlZCB3aXRo IGEgY29uZGl0aW9uIHRvIHRlc3QgZm9yIFpWIGF0IHRoZSBvdXRzZXQgYW5kIHJldHVybiBpZiB0 cnVlLAorICAgICAgd2hpY2ggcHJldmVudHMgRW1hY3MgZnJvbSBjcmFzaGluZy4gKi8KKyAgICAg IGlmIChJVF9DSEFSUE9TIChpdCkgPT0gWlYpCisgICAgICAgIGJyZWFrOworICAgICAgbW92ZV9p dF9ieV9saW5lcyAoJml0LCAxKTsKKyAgICAgIGlmIChpdC5jdXJyZW50X3kgPj0gaXQubGFzdF92 aXNpYmxlX3kpCisgICAgICAgIGJyZWFrOworICAgIH0KKy8qICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTRVQgVEhFIENBQ0hFCisqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiogKi8KKyAgY3Jvc3NoYWlyc19maW5pc2g6CisgIGlmICghTklMUCAocmVz dWx0KSkKKyAgICB3c2V0X2Nyb3NzaGFpcnNfY2FjaGUgKHcsIGxpc3RuIChDT05TVFlQRV9IRUFQ LCAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZyZXZlcnNlIChyZXN1 bHQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZjb25zIChzZWxlY3Rl ZF93aW5kb3csIFFuaWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZj b25zIChidWYsIFFuaWwpKSk7CisgIHctPm1jLmRyYXdfY3Jvc3NoYWlycyA9IGZhbHNlOworICBi aWRpX3Vuc2hlbHZlX2NhY2hlIChpdGRhdGEsIGZhbHNlKTsKKy8qCisjaWZkZWYgR0xZUEhfREVC VUcKKyAgZW5kID0gY2xvY2soKTsKKyAgY3B1X3RpbWVfdXNlZCA9ICgoZG91YmxlKSAoZW5kIC0g c3RhcnQpKSAvIENMT0NLU19QRVJfU0VDOworICBkdG9hc3RyIChidWZfdGltZSwgc2l6ZW9mIGJ1 Zl90aW1lLCAwLCAwLCBjcHVfdGltZV91c2VkKTsKKyAgZGVidWdfbWV0aG9kX2FkZCAodywgIm1j X2RyYXdfY3Jvc3NoYWlyczogIFRJTUUgKCVzKSIsIGJ1Zl90aW1lKTsKKyNlbmRpZgorKi8KK30K Kwordm9pZAorbWNfcmVkcmF3X2Nyb3NzaGFpcnMgKHN0cnVjdCB3aW5kb3cgKncpCit7CisvKgor I2lmZGVmIEdMWVBIX0RFQlVHCisgIGNsb2NrX3Qgc3RhcnQsIGVuZDsKKyAgZG91YmxlIGNwdV90 aW1lX3VzZWQ7CisgIGNoYXIgYnVmX3RpbWVbREJMX0JVRlNJWkVfQk9VTkRdOworICBzdGFydCA9 IGNsb2NrKCk7CisjZW5kaWYKKyovCisgIExpc3BfT2JqZWN0IHZsaXN0ID0gUW5pbDsKKyAgTGlz cF9PYmplY3Qgc3BlY3MgPSBRbmlsOworICBpbnQgeCwgeSwgaHBvcywgdnBvczsKKyAgZW51bSB0 ZXh0X2N1cnNvcl9raW5kcyBjdXJzb3JfdHlwZTsKKyAgaW50IGN1cnNvcl93aWR0aDsKKyAgTGlz cF9PYmplY3QgZm9yZWdyb3VuZCA9IFFuaWw7CisgIExpc3BfT2JqZWN0IGJhY2tncm91bmQgPSBR bmlsOworICBMaXNwX09iamVjdCBmbGF2b3IgPSBRbmlsOworICBwdHJkaWZmX3QgcG9zOworICBm b3IgKHZsaXN0ID0gWENBUiAody0+Y3Jvc3NoYWlyc19jYWNoZSk7CisgICAgICAgQ09OU1AgKHZs aXN0KTsKKyAgICAgICB2bGlzdCA9IFhDRFIgKHZsaXN0KSkKKyAgICB7CisgICAgICBzcGVjcyA9 IFhDQVIgKHZsaXN0KTsKKyAgICAgIHggPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoMCksIHNw ZWNzKSk7CisgICAgICB5ID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIgKDEpLCBzcGVjcykpOwor ICAgICAgaHBvcyA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgyKSwgc3BlY3MpKTsKKyAgICAg IHZwb3MgPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoMyksIHNwZWNzKSk7CisgICAgICBjdXJz b3JfdHlwZSA9IG1jX2xpc3BfdG9fY3Vyc29yX3R5cGUgKEZudGggKG1ha2VfbnVtYmVyICg0KSwg c3BlY3MpKTsKKyAgICAgIGN1cnNvcl93aWR0aCA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICg1 KSwgc3BlY3MpKTsKKyAgICAgIGZvcmVncm91bmQgPSBGbnRoIChtYWtlX251bWJlciAoNiksIHNw ZWNzKTsKKyAgICAgIGJhY2tncm91bmQgPSBGbnRoIChtYWtlX251bWJlciAoNyksIHNwZWNzKTsK KyAgICAgIGZsYXZvciA9IEZudGggKG1ha2VfbnVtYmVyICg4KSwgc3BlY3MpOworICAgICAgcG9z ID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIgKDkpLCBzcGVjcykpOworICAgICAgbWNfZHJhd19l cmFzZV9oeWJyaWQgKHcsIHgsIHksIGhwb3MsIHZwb3MsIGN1cnNvcl90eXBlLCBjdXJzb3Jfd2lk dGgsIGZvcmVncm91bmQsIGZsYXZvcik7CisgICAgfQorLyoKKyNpZmRlZiBHTFlQSF9ERUJVRwor ICBlbmQgPSBjbG9jaygpOworICBjcHVfdGltZV91c2VkID0gKChkb3VibGUpIChlbmQgLSBzdGFy dCkpIC8gQ0xPQ0tTX1BFUl9TRUM7CisgIGR0b2FzdHIgKGJ1Zl90aW1lLCBzaXplb2YgYnVmX3Rp bWUsIDAsIDAsIGNwdV90aW1lX3VzZWQpOworICBkZWJ1Z19tZXRob2RfYWRkICh3LCAibWNfcmVk cmF3X2Nyb3NzaGFpcnM6ICBUSU1FICglcykiLCBidWZfdGltZSk7CisjZW5kaWYKKyovCit9CisK K3ZvaWQKK21jX2VyYXNlX2Nyb3NzaGFpcnMgKHN0cnVjdCB3aW5kb3cgKncsIGJvb2wgZGVsZXRl X2NhY2hlKQoreworLyoKKyNpZmRlZiBHTFlQSF9ERUJVRworICBjbG9ja190IHN0YXJ0LCBlbmQ7 CisgIGRvdWJsZSBjcHVfdGltZV91c2VkOworICBjaGFyIGJ1Zl90aW1lW0RCTF9CVUZTSVpFX0JP VU5EXTsKKyAgc3RhcnQgPSBjbG9jaygpOworI2VuZGlmCisqLworICBMaXNwX09iamVjdCB2bGlz dCA9IFFuaWw7CisgIExpc3BfT2JqZWN0IHNwZWNzID0gUW5pbDsKKyAgaW50IHgsIHksIGhwb3Ms IHZwb3M7CisgIGVudW0gdGV4dF9jdXJzb3Jfa2luZHMgY3Vyc29yX3R5cGU7CisgIGludCBjdXJz b3Jfd2lkdGg7CisgIExpc3BfT2JqZWN0IGZvcmVncm91bmQgPSBRbmlsOworICBMaXNwX09iamVj dCBiYWNrZ3JvdW5kID0gUW5pbDsKKyAgTGlzcF9PYmplY3QgZmxhdm9yID0gUW5pbDsKKyAgcHRy ZGlmZl90IHBvczsKKyAgLyogRGVwZW5kaW5nIHVwb24gdGhlIGRpcmVjdGlvbiBvZiBtb3ZlbWVu dCBhbmQgZGlzdGFuY2UgZnJvbSB0aGUgcmVhbCBjdXJzb3IgdGhlIGN1cnJlbnQgY29tbWFuZAor ICB0YWtlcyB1cywgdGhlIHByZXZpb3VzIHJlYWwgY3Vyc29yIHdpbGwgYmUgbGVmdCBiZWhpbmQu ICBJIHRyaWVkIHJlc3RvcmluZyBwb2ludCBhZnRlciBkcmF3L2VyYXNlLAorICBidXQgdGhhdCBk aWRuJ3QgZml4IHRoZSBpc3N1ZS4gIFNvIGZvciBub3csIHdlIGp1c3QgZXJhc2UgdGhlIHJlYWwg Y3Vyc29yLiAqLworICBtY19lcmFzZV9nbHlwaF9jdXJzb3IgKHcsIHctPnBoeXNfY3Vyc29yLngs IHctPnBoeXNfY3Vyc29yLnksIHctPnBoeXNfY3Vyc29yLmhwb3MsCisgICAgICAgICAgICAgICAg ICAgICAgICAgdy0+cGh5c19jdXJzb3IudnBvcywgdy0+cGh5c19jdXJzb3JfdHlwZSk7CisgIGZv ciAodmxpc3QgPSBYQ0FSICh3LT5jcm9zc2hhaXJzX2NhY2hlKTsKKyAgICAgICBDT05TUCAodmxp c3QpOworICAgICAgIHZsaXN0ID0gWENEUiAodmxpc3QpKQorICAgIHsKKyAgICAgIHNwZWNzID0g WENBUiAodmxpc3QpOworICAgICAgeCA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgwKSwgc3Bl Y3MpKTsKKyAgICAgIHkgPSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoMSksIHNwZWNzKSk7Cisg ICAgICBocG9zID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIgKDIpLCBzcGVjcykpOworICAgICAg dnBvcyA9IFhJTlQgKEZudGggKG1ha2VfbnVtYmVyICgzKSwgc3BlY3MpKTsKKyAgICAgIGN1cnNv cl90eXBlID0gbWNfbGlzcF90b19jdXJzb3JfdHlwZSAoRm50aCAobWFrZV9udW1iZXIgKDQpLCBz cGVjcykpOworICAgICAgY3Vyc29yX3dpZHRoID0gWElOVCAoRm50aCAobWFrZV9udW1iZXIgKDUp LCBzcGVjcykpOworICAgICAgZm9yZWdyb3VuZCA9IEZudGggKG1ha2VfbnVtYmVyICg2KSwgc3Bl Y3MpOworICAgICAgYmFja2dyb3VuZCA9IEZudGggKG1ha2VfbnVtYmVyICg3KSwgc3BlY3MpOwor ICAgICAgZmxhdm9yID0gRm50aCAobWFrZV9udW1iZXIgKDgpLCBzcGVjcyk7CisgICAgICBwb3Mg PSBYSU5UIChGbnRoIChtYWtlX251bWJlciAoOSksIHNwZWNzKSk7CisgICAgICBpZiAoRVEgKGZs YXZvciwgUW1jX2dseXBoKSkKKyAgICAgICAgbWNfZXJhc2VfZ2x5cGhfY3Vyc29yICh3LCB4LCB5 LCBocG9zLCB2cG9zLCBjdXJzb3JfdHlwZSk7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAg eworICAgICAgICAgICAgICBpZiAoRVEgKGZsYXZvciwgUW92ZXJsYXlfYXJyb3dfYml0bWFwKQor ICAgICAgICAgICAgICAgICAgfHwgRVEgKGZsYXZvciwgUW1jX2hvbGxvd19yZWN0YW5nbGVfcmln aHRfYW5nbGUpCisgICAgICAgICAgICAgICAgICB8fCBFUSAoZmxhdm9yLCBRbWNfaG9sbG93X3Jl Y3RhbmdsZSkKKyAgICAgICAgICAgICAgICAgIHx8IEVRIChmbGF2b3IsIFFtY192ZXJ0aWNhbF9i YXJfcmlnaHRfYW5nbGUpCisgICAgICAgICAgICAgICAgICB8fCBFUSAoZmxhdm9yLCBRbWNfdmVy dGljYWxfYmFyKQorICAgICAgICAgICAgICAgICAgfHwgRVEgKGZsYXZvciwgUW1jX3ZlcnRpY2Fs X2Jhcl9iYWNrc2xhc2gpKQorICAgICAgICAgICAgICAgIGN1cnNvcl90eXBlID0gTk9fQ1VSU09S OworICAgICAgICAgICAgICBtY19kcmF3X2VyYXNlX2h5YnJpZCAodywgeCwgeSwgaHBvcywgdnBv cywgY3Vyc29yX3R5cGUsIGN1cnNvcl93aWR0aCwgYmFja2dyb3VuZCwgZmxhdm9yKTsKKyAgICAg ICAgICAgIH0KKyAgICB9CisgIGlmIChkZWxldGVfY2FjaGUpCisgICAgd3NldF9jcm9zc2hhaXJz X2NhY2hlICh3LCBRbmlsKTsKKyAgdy0+bWMuZXJhc2VfY3Jvc3NoYWlycyA9IGZhbHNlOworLyoK KyNpZmRlZiBHTFlQSF9ERUJVRworICBlbmQgPSBjbG9jaygpOworICBjcHVfdGltZV91c2VkID0g KChkb3VibGUpIChlbmQgLSBzdGFydCkpIC8gQ0xPQ0tTX1BFUl9TRUM7CisgIGR0b2FzdHIgKGJ1 Zl90aW1lLCBzaXplb2YgYnVmX3RpbWUsIDAsIDAsIGNwdV90aW1lX3VzZWQpOworICBkZWJ1Z19t ZXRob2RfYWRkICh3LCAibWNfZXJhc2VfY3Jvc3NoYWlyczogIFRJTUUgKCVzKSIsIGJ1Zl90aW1l KTsKKyNlbmRpZgorKi8KK30KKwordm9pZAorbWNfcG9ydGFsIChzdHJ1Y3Qgd2luZG93ICp3LCBi b29sIGN1cnNvcl9vbl9wKQoreworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBNVUxUSVBMRSBDVVJTT1JTCisqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKyAgaWYgKCFNSU5JX1dJTkRPV19QICh3KQorICAgICAgJiYgdy0+bWMuZXJhc2VfZ2x5 cGhfY3Vyc29yCisgICAgICAmJiAhTklMUCAody0+bWNfZ2x5cGhfY2FjaGUpCisgICAgICAmJiBF USAody0+Y29udGVudHMsIFhDQVIgKEZudGggKG1ha2VfbnVtYmVyICgyKSwgdy0+bWNfZ2x5cGhf Y2FjaGUpKSkpCisgICAgbWNfY2FsYyAodywgMSk7CisgIGlmICh3ID09IFhXSU5ET1cgKHNlbGVj dGVkX3dpbmRvdykKKyAgICAgICYmIFdJTkRPV19WQUxJRF9QIChzZWxlY3RlZF93aW5kb3cpCisg ICAgICAmJiAhTUlOSV9XSU5ET1dfUCAodykKKyAgICAgICYmIHctPm1jLmRyYXdfZ2x5cGhfY3Vy c29yCisgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBtY19nbHlw aF9saXN0KSkpCisgICAgLyogRHJhdyBmYWtlIGN1cnNvcnMgKi8KKyAgICBtY19jYWxjICh3LCAw KTsKKyAgICAvKiBGaXJzdCBhdHRlbXB0IGF0IGRlYWxpbmcgd2l0aCBhIGByZWRpc3BsYXlfcHJl c2VydmVfZWNob19hcmVhJyBzaXR1YXRpb24uICovCisgICAgZWxzZSBpZiAoIU1JTklfV0lORE9X X1AgKHcpCisgICAgICAgICAgICAgJiYgIXctPm1jLmRyYXdfZ2x5cGhfY3Vyc29yCisgICAgICAg ICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgbWNfZ2x5cGhfbGlz dCkpCisgICAgICAgICAgICAgJiYgIU5JTFAgKHctPm1jX2dseXBoX2NhY2hlKQorICAgICAgICAg ICAgICYmIEVRICh3LT5jb250ZW50cywgWENBUiAoRm50aCAobWFrZV9udW1iZXIgKDIpLCB3LT5t Y19nbHlwaF9jYWNoZSkpKSkKKyAgICAgIHsKKyAgICAgICAgLyogUmVtb3ZlIGZha2UgY3Vyc29y cy4gKi8KKyAgICAgICAgbWNfY2FsYyAodywgMSk7CisgICAgICAgIC8qIERyYXcgZmFrZSBjdXJz b3JzICovCisgICAgICAgIG1jX2NhbGMgKHcsIDApOworICAgICAgfQorLyogKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUk9TU0hBSVJTCisqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKyAgLyogUmVtb3ZlIGNyb3NzaGFpcnMgYW5kIGRlbGV0ZSB0 aGUgY2FjaGUsIGJ1dCBPTkxZIGlmIHdlIHBsYW4gb24gcmVkcmF3aW5nIHRoZW0uCisgIEluIGEg dGltZXIgc2l0dWF0aW9uLCB3ZSB3YW50IHRvIGVyYXNlIGFuZCByZWRyYXcgLS0gd2UgZ28gZnJv bSBgY2hlY2twb2ludF8yJworICBpbiBgcmVkaXNwbGF5X2ludGVybmFsJyBhbmQgZm9yY2Ugb3Vy IHdheSBvdmVyIHRvIGB1cGRhdGVfZnJhbWUnIDIgb2YgMy4KKyAgRW1hY3MgcmVmcmVzaGVzIHRo ZSBzZWxlY3RlZCB3aW5kb3cgYWZ0ZXIgYWJvdXQgMSB0byAyIG1pbnV0ZXMgb2Ygbm8gYWN0aXZp dHkKKyAgZXZlbiB0aG91Z2ggdGhlcmUgaXMgbm90aGluZyBhdHRhY2hlZCB0byB0aGUgYHRpbWVf bGlzdCcvYGlkbGVfdGltZXJfbGlzdCcuCisgIEluIHRoYXQgcmVmcmVzaCBuby10aW1lciBzaXR1 YXRpb24sIHdlIHdhbnQgdG8gZXJhc2UvZHJhdyB1c2luZyB0aGUgY2FjaGUuICovCisgIGlmICgh TUlOSV9XSU5ET1dfUCAodykKKyAgICAgICYmIHctPm1jLmVyYXNlX2Nyb3NzaGFpcnMKKyAgICAg ICYmIHctPm1jLmRyYXdfY3Jvc3NoYWlycworICAgICAgJiYgIU5JTFAgKHctPmNyb3NzaGFpcnNf Y2FjaGUpCisgICAgICAmJiB3ID09IFhXSU5ET1cgKFhDQVIgKEZudGggKG1ha2VfbnVtYmVyICgx KSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKQorICAgICAgJiYgRVEgKHctPmNvbnRlbnRzLCBYQ0FS IChGbnRoIChtYWtlX251bWJlciAoMiksIHctPmNyb3NzaGFpcnNfY2FjaGUpKSkpCisgICAgbWNf ZXJhc2VfY3Jvc3NoYWlycyAodywgdHJ1ZSk7CisgIGlmICh3ID09IFhXSU5ET1cgKHNlbGVjdGVk X3dpbmRvdykKKyAgICAgICYmIFdJTkRPV19WQUxJRF9QIChzZWxlY3RlZF93aW5kb3cpCisgICAg ICAmJiAhTUlOSV9XSU5ET1dfUCAodykKKyAgICAgICYmICghTklMUCAoQlZBUiAoWEJVRkZFUiAo dy0+Y29udGVudHMpLCBjcm9zc2hhaXJzKSkKKyAgICAgICAgICAvKiBBIHJhcmUgY2lyY3Vtc3Rh bmNlIHdoZXJlIGNyb3NzaGFpcnMgbW9kZSBpcyBub24tbmlsLCBidXQgdGhlCisgICAgICAgICAg dXNlciBoYXMgdW53aXR0aW5nbHkgc2V0IGJvdGggYGNyb3NzaGFpcnMtaG9yaXpvbnRhbC1ydWxl cicgdG8gbmlsIGFuZCBhbHNvCisgICAgICAgICAgc2V0IGBjcm9zc2hhaXJzLXZlcnRpY2FsLXJ1 bGVyJyB0byBuaWwgLS0gaS5lLiwgdGhlcmUgaXMgbm90aGluZyB0byBkby4gKi8KKyAgICAgICAg ICAmJiAoIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlyc19ob3Jp em9udGFsX3J1bGVyKSkKKyAgICAgICAgICAgICAgfHwgIU5JTFAgKEJWQVIgKFhCVUZGRVIgKHct PmNvbnRlbnRzKSwgY3Jvc3NoYWlyc192ZXJ0aWNhbF9ydWxlcikpKSkKKyAgICAgICYmIHctPm1j LmRyYXdfY3Jvc3NoYWlycykKKyAgICAvKiBEcmF3IGNyb3NzaGFpcnMuICovCisgICAgbWNfZHJh d19jcm9zc2hhaXJzICh3KTsKKyAgICAvKiBBIHNpdHVhdGlvbiB0aGF0IG9jY3VycyB3aXRoIGBy ZWRpc3BsYXlfcHJlc2VydmVfZWNob19hcmVhJy4gKi8KKyAgICBlbHNlIGlmICghTUlOSV9XSU5E T1dfUCAodykKKyAgICAgICAgICAgICAmJiAhdy0+bWMuZHJhd19jcm9zc2hhaXJzCisgICAgICAg ICAgICAgJiYgIU5JTFAgKHctPmNyb3NzaGFpcnNfY2FjaGUpCisgICAgICAgICAgICAgJiYgIU5J TFAgKEJWQVIgKFhCVUZGRVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAgICAg ICAgJiYgdyA9PSBYV0lORE9XIChYQ0FSIChGbnRoIChtYWtlX251bWJlciAoMSksIHctPmNyb3Nz aGFpcnNfY2FjaGUpKSkKKyAgICAgICAgICAgICAmJiBFUSAody0+Y29udGVudHMsIFhDQVIgKEZu dGggKG1ha2VfbnVtYmVyICgyKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKSkKKyAgICAgIHsKKyAg ICAgICAgLyogUmVtb3ZlIGNyb3NzaGFpcnMsIGJ1dCBkbyBOT1QgZGVsZXRlIHRoZSBjYWNoZS4g Ki8KKyAgICAgICAgbWNfZXJhc2VfY3Jvc3NoYWlycyAodywgZmFsc2UpOworICAgICAgICAvKiBS ZWRyYXcgdGhlIGNyb3NzaGFpcnMgdXNpbmcgdGhlIGNhY2hlLiAqLworICAgICAgICBtY19yZWRy YXdfY3Jvc3NoYWlycyAodyk7CisgICAgICB9CisgICAgICAvKiBDQVRDSEFMTDogIERSQVcgVEhF IFJFQUwgQ1VSU09SIChtYXliZSkhICovCisgICAgICBlbHNlIGlmIChjdXJzb3Jfb25fcCkKKyAg ICAgICAgZGlzcGxheV9hbmRfc2V0X2N1cnNvciAodywgMSwgdy0+b3V0cHV0X2N1cnNvci5ocG9z LCB3LT5vdXRwdXRfY3Vyc29yLnZwb3MsIHctPm91dHB1dF9jdXJzb3IueCwgdy0+b3V0cHV0X2N1 cnNvci55KTsKK30KKwordm9pZAorbWNfcmVjb3JkX3hfd3N0YXJ0X3dlbmQgKHN0cnVjdCB3aW5k b3cgKncpCit7CisgIC8qIFJlY29yZCBwcmlvciB2YWx1ZXMgZm9yIGN1cnNvciBYLCB3aW5kb3ct c3RhcnQgYW5kIHdpbmRvdy1lbmQuCisgIFRoZSBnb2FsIGhlcmUgaXMgdG8gZmFjaWxpdGF0ZSBg bWNfY2FsYycgcmVkcmF3IG11bHRpcGxlIGZha2UKKyAgY3Vyc29ycyB1c2luZyB0aGUgY2FjaGUg aWYgbm90aGluZyBoYXMgY2hhbmdlZC4gKi8KKyAgaWYgKCFNSU5JX1dJTkRPV19QICh3KQorICAg ICAgJiYgdy0+bWMuZHJhd19nbHlwaF9jdXJzb3IKKyAgICAgICYmICghTklMUCAoQlZBUiAoWEJV RkZFUiAody0+Y29udGVudHMpLCBtY19nbHlwaF9saXN0KSkKKyAgICAgICAgICB8fCAhTklMUCAo dy0+bWNfZ2x5cGhfY2FjaGUpKSkKKyAgICB7CisgICAgICBpZiAody0+bWMuY3VycmVudF9zdGFy dCkKKyAgICAgICAgdy0+bWMucHJldmlvdXNfc3RhcnQgPSB3LT5tYy5jdXJyZW50X3N0YXJ0Owor ICAgICAgICBlbHNlCisgICAgICAgICAgdy0+bWMucHJldmlvdXNfc3RhcnQgPSAtMTsKKyAgICAg IGlmICh3LT5tYy5jdXJyZW50X2VuZCkKKyAgICAgICAgdy0+bWMucHJldmlvdXNfZW5kID0gdy0+ bWMuY3VycmVudF9lbmQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICB3LT5tYy5wcmV2aW91c19l bmQgPSAtMTsKKyAgICAgIHctPm1jLmN1cnJlbnRfc3RhcnQgPSBtYXJrZXJfcG9zaXRpb24gKHct PnN0YXJ0KTsKKyAgICAgIHctPm1jLmN1cnJlbnRfZW5kID0gQlVGX1ogKFhCVUZGRVIgKHctPmNv bnRlbnRzKSkgLSB3LT53aW5kb3dfZW5kX3BvczsKKyAgICAgIC8qIFRoZSBhc3N1bXB0aW9uIGlz IHRoYXQgYHctPm91dHB1dF9jdXJzb3IueGAgaXMgdXBkYXRlZCBBRlRFUiBgcmVkaXNwbGF5X3dp bmRvdycuCisgICAgICBUaGlzIGlzIG9ubHkgcmVsZXZhbnQgd2hlbiB1c2luZyBnbHlwaGxlc3Mg bXVsdGlwbGUgZmFrZSBjdXJzb3JzIGJlY2F1c2UgaXQgaXMKKyAgICAgIHBvc3NpYmxlIHRoYXQg dGhlIGJ1ZmZlciBwb2ludHMgcmVtYWluIHRoZSBzYW1lLCBidXQgdGhlIFggbWF5IGhhdmUgY2hh bmdlZC4KKyAgICAgIENyb3NzaGFpcnMgZG8gbm90IHVzZSBgdy0+bWMucHJldmlvdXNfeGAuICBJ ZiBpdCB0dXJucyBvdXQgdGhhdCBgdy0+b3V0cHV0X2N1cnNvci54YAorICAgICAgaXMgdXBkYXRl ZCBEVVJJTkcgYHJlZGlzcGxheV93aW5kb3cnLCB0aGVuIGl0IHdpbGwgYmUgbmVjZXNzYXJ5IHRv IGNoYW5nZSB0aGlzCisgICAgICB0byB1c2UgYGl0LmN1cnJlbnRfeCcgYW5kIHBlcmhhcHMgcnVu IGBzdGFydF9kaXNwbGF5JyB0byBnZXQgdGhhdCB2YWx1ZS4gKi8KKyAgICAgIGlmICh3LT5vdXRw dXRfY3Vyc29yLngpCisgICAgICAgIHctPm1jLnByZXZpb3VzX3ggPSB3LT5vdXRwdXRfY3Vyc29y Lng7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgdy0+bWMucHJldmlvdXNfeCA9IC0xOwor ICAgIH0KK30KKwordm9pZAorbWNfcmVtb3ZlX2V2ZXJ5dGhpbmcgKHN0cnVjdCB3aW5kb3cgKncp Cit7CisgIC8qIFJlbW92ZSBmYWtlIGN1cnNvcnMuICBJZiB3ZSByZWx5IHVwb24gYHVwZGF0ZV9m cmFtZScgdG8gcmVtb3ZlIGZha2UgY3Vyc29ycywKKyAgdGhlbiBpdCB3b3VsZCBiZSB0b28gbGF0 ZSB0byByZW1vdmUgZmFrZSBjdXJzb3JzIGZyb20gYWxsIGFyZWFzIG9mIHRoZSB2aXNpYmxlCisg IHdpbmRvdyB3aGVuIGN1dHRpbmcvcGFzdGluZyB0ZXh0IGFuZCBwZXJoYXBzIGEgZmV3IG90aGVy IHNpdHVhdGlvbnMgdGhhdCBtYXkgZXhpc3QuCisgIEZJWE1FOiAgVGhlIHVzZXIgY2FuIHNlZSB0 aGUgY3Vyc29ycyBiZWluZyByZW1vdmVkIGF0IHRoZSBvdXRzZXQgb2YgcmVkaXNwbGF5LiAqLwor ICBib29sIHJlbW92ZV9jdXJzb3JzID0gZmFsc2U7CisgIGJvb2wgcmVtb3ZlX2Nyb3NzaGFpcnMg PSBmYWxzZTsKKyAgaWYgKCF3LT5wc2V1ZG9fd2luZG93X3AKKyAgICAgICYmIHcgPT0gWFdJTkRP VyAoc2VsZWN0ZWRfd2luZG93KQorICAgICAgJiYgIU1JTklfV0lORE9XX1AgKHcpCisgICAgICAm JiAhTklMUCAody0+bWNfZ2x5cGhfY2FjaGUpCisgICAgICAmJiBFUSAody0+Y29udGVudHMsIFhD QVIgKEZudGggKG1ha2VfbnVtYmVyICgyKSwgdy0+bWNfZ2x5cGhfY2FjaGUpKSkpCisgICAgcmVt b3ZlX2N1cnNvcnMgPSB0cnVlOworICBpZiAoIXctPnBzZXVkb193aW5kb3dfcAorICAgICAgLyog VGhlIGNyb3NzaGFpcnMgaW50ZXJmZXJlIHdpdGggdGhlIGJyb3dzZS1raWxsLXJpbmcgbGlicmFy eS4gKi8KKyAgICAgIC8qICYmIHcgPT0gWFdJTkRPVyAoc2VsZWN0ZWRfd2luZG93KSAqLworICAg ICAgJiYgIU1JTklfV0lORE9XX1AgKHcpCisgICAgICAmJiAhTklMUCAody0+Y3Jvc3NoYWlyc19j YWNoZSkKKyAgICAgICYmIHcgPT0gWFdJTkRPVyAoWENBUiAoRm50aCAobWFrZV9udW1iZXIgKDEp LCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkpCisgICAgICAmJiBFUSAody0+Y29udGVudHMsIFhDQVIg KEZudGggKG1ha2VfbnVtYmVyICgyKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKSkKKyAgICByZW1v dmVfY3Jvc3NoYWlycyA9IHRydWU7CisgIGlmIChyZW1vdmVfY3Vyc29ycworICAgICAgfHwgcmVt b3ZlX2Nyb3NzaGFpcnMpCisgICAgeworICAgICAgc3RydWN0IGZyYW1lICpmID0gWEZSQU1FICh3 LT5mcmFtZSk7CisgICAgICB1cGRhdGVfYmVnaW4gKGYpOworICAgICAgYmxvY2tfaW5wdXQgKCk7 CisgICAgICBpZiAocmVtb3ZlX2N1cnNvcnMpCisgICAgICAgIG1jX2NhbGMgKHcsIDEpOworICAg ICAgLyogUmVtb3ZlIGNyb3NzaGFpcnMgYW5kIGRlbGV0ZSB0aGUgY2FjaGUuICovCisgICAgICBp ZiAocmVtb3ZlX2Nyb3NzaGFpcnMpCisgICAgICAgIG1jX2VyYXNlX2Nyb3NzaGFpcnMgKHcsIHRy dWUpOworICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAgIHVwZGF0ZV9lbmQgKGYpOworICAg IH0KK30KKworaW50CittY19jcm9zc2hhaXJzX3AgKHN0cnVjdCB3aW5kb3cgKncpCit7CisvKiBN b3ZpbmcgdGhlIG1vdXNlIHRyaWdnZXJzIGB1cGRhdGVfd2luZG93X2N1cnNvcicgd2hpY2ggY2Fs bHMKK2BkaXNwbGF5X2FuZF9zZXRfY3Vyc29yJyB0aGF0IHdvdWxkIG90aGVyd2lzZSByZW1vdmUg YSBwb3J0aW9uIG9mIHRoZSBob3Jpem9udGFsCitydWxlciBhdCBwb2ludCBhbmQvb3IgZnJvbSBw b2ludCBhdCBlbmQgb2YgdmlzdWFsIGxpbmUgdG8gd2luZG93IGVkZ2UuICovCisgIGlmICghTUlO SV9XSU5ET1dfUCAodykKKyAgICAgICYmICF3LT5tYy5kcmF3X2Nyb3NzaGFpcnMKKyAgICAgICYm ICFOSUxQICh3LT5jcm9zc2hhaXJzX2NhY2hlKQorICAgICAgJiYgIU5JTFAgKEJWQVIgKFhCVUZG RVIgKHctPmNvbnRlbnRzKSwgY3Jvc3NoYWlycykpCisgICAgICAmJiB3ID09IFhXSU5ET1cgKFhD QVIgKEZudGggKG1ha2VfbnVtYmVyICgxKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKQorICAgICAg JiYgRVEgKHctPmNvbnRlbnRzLCBYQ0FSIChGbnRoIChtYWtlX251bWJlciAoMiksIHctPmNyb3Nz aGFpcnNfY2FjaGUpKSkpCisgICAgcmV0dXJuIHRydWU7CisgICAgZWxzZQorICAgICAgcmV0dXJu IGZhbHNlOworfQorCitpbnQKK21jX3dpdGhvdXRfdXBkYXRlX2ZyYW1lIChzdHJ1Y3Qgd2luZG93 ICp3KQoreworLyogYHRpbWVyLWxpc3QnIC8gYHRpbWVyLWlkbGUtbGlzdCc6ICBUaGUgYm9vbGVh biBzd2l0Y2hlcyBhcmUgbm90IGF1dG9tYXRpY2FsbHkKK3R1cm5lZCBvbiB3aGVuIGEgZnVuY3Rp b24gYXR0YWNoZWQgdG8gYSB0aW1lciBpcyBjYWxsZWQuICBXZSBoYXZlIHN3aXRjaGVzIHRoYXQg YXJlCitzZXQgaW4gYGtleWJvYXJkLmNgIGZvciBtdWx0aXBsZSBmYWtlIGN1cnNvcnMgKGUuZy4s IGEga2V5Ym9hcmQgcHJlc3MpLiAgV2Ugc2V0Cit0aGUgc3dpdGNoZXMgbWFudWFsbHkgZm9yIGJv dGggbXVsdGlwbGUgY3Vyc29ycyBhbmQgY3Jvc3NoYWlycyBpbiBjb25qdW5jdGlvbiB3aXRoCit0 aW1lciBmdW5jdGlvbnMuICBgdXBkYXRlX2ZyYW1lJyBtYXkgbm90IGJlIGNhbGxlZCBpZiB0aGVy ZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUKK3dpbmRvdy9idWZmZXIuICBUbyB0ZXN0IHRoaXMgdGhl b3J5LCB0aHJvdyB0aGUgc3dpdGNoZXMgZm9yIGNyb3NzaGFpcnMgZnJvbSBhbiBpZGxlCit0aW1l ciB3aXRob3V0IGRyYXdpbmcvZXJhc2luZyBhbnkgb3ZlcmxheXMgaW4gdGhlIGJ1ZmZlci4gIGBr YmRfbWNfYWN0aXZhdGVfY3Vyc29ycycKK3NldHMgdGhlIG11bHRpcGxlIGN1cnNvcnMgYm9vbGVh biBzd2l0Y2hlcyB0byBgdHJ1ZWAgd2hlbmV2ZXIgdGhlcmUgaXMgYSBrZXlib2FyZAordHJpZ2dl cmVkIGNvbW1hbmQuICBIb3dldmVyLCB0aGF0IGRvZXMgbm90IG5lY2Vzc2FyaWx5IG1lYW4gdGhh dCB3ZSBuZWVkIHRvIGRyYXcKK211bHRpcGxlIGN1cnNvcnMuICBJbmFzbXVjaCBhcyB0aGUgbXVs dGlwbGUgY3Vyc29ycyBib29sZWFuIHN3aXRjaGVzIG1pZ2h0IGhhdmUKK2JlZW4gc2V0IHRocm91 Z2ggYSB0aW1lciBmdW5jdGlvbiwgaXQgaXMgYmV0dGVyIHRvIGNoZWNrIHRoZSBidWZmZXIgbG9j YWwgdmFyaWFibGVzCithbmQgdGhlIHdpbmRvdyBjYWNoZXMuICBJbiB0aGUgY2FzZSBvZiBjcm9z c2hhaXJzLCB0aGUgY29ycmVzcG9uZGluZyBib29sZWFuCitzd2l0Y2hlcyBhcmUgb25seSBzZXQg d2hlbiB3ZSByZWFsbHkgd2FudCB0byBkcmF3IHRoZSBjcm9zc2hhaXJzLgorLSAgV2UgYWxzbyB1 c2UgdGhpcyBmdW5jdGlvbiBhcyBwYXJ0IG9mIGB1cGRhdGVfd2luZG93X2N1cnNvcicgd2hlbiBt b3VzaW5nIG92ZXIKK3NvbWV0aGluZyB0aGF0IHdvdWxkIG9yZGluYXJpbHkgY2F1c2UgdGhlIHJl YWwgY3Vyc29yIHRvIGJlIHJlZHJhd24uICovCisgICAgICBpZiAoIU5JTFAgKHctPm1jX2dseXBo X2NhY2hlKQorICAgICAgICAgIHx8ICFOSUxQIChCVkFSIChYQlVGRkVSICh3LT5jb250ZW50cyks IG1jX2dseXBoX2xpc3QpKQorICAgICAgICAgIHx8IHctPm1jLmRyYXdfY3Jvc3NoYWlycworICAg ICAgICAgIHx8IG1jX2Nyb3NzaGFpcnNfcCAodykpCisgICAgICAgIHsKKyAgICAgICAgICAvKiBX ZSBhcmUgYnlwYXNzaW5nIGB1cGRhdGVfZnJhbWUnIGFuZCBnb2luZyBzdHJhaWdodCB0byBgbWNf cG9ydGFsJy4gKi8KKyAgICAgICAgICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUgKHctPmZyYW1l KTsKKyAgICAgICAgICB1cGRhdGVfYmVnaW4gKGYpOworICAgICAgICAgIGJsb2NrX2lucHV0ICgp OworICAgICAgICAgIG1jX3BvcnRhbCAodywgdHJ1ZSk7CisgICAgICAgICAgdW5ibG9ja19pbnB1 dCAoKTsKKyAgICAgICAgICB1cGRhdGVfZW5kIChmKTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsK KyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgcmV0dXJuIGZhbHNlOworfQorCitE RUZVTiAoIm1jLWFjdGl2YXRlLWNyb3NzaGFpcnMiLCBGbWNfYWN0aXZhdGVfY3Jvc3NoYWlycywg U21jX2FjdGl2YXRlX2Nyb3NzaGFpcnMsIDEsIDEsIDAsCisgICAgICAgZG9jOiAvKiBEb2Mtc3Ry aW5nLiAqLykKKyAgKExpc3BfT2JqZWN0IHdpbmRvdykKK3sKKyAgc3RydWN0IHdpbmRvdyAqdyA9 IGRlY29kZV9saXZlX3dpbmRvdyAod2luZG93KTsKKyAgdy0+bWMuZHJhd19jcm9zc2hhaXJzID0g dHJ1ZTsKKyAgdy0+bWMuZXJhc2VfY3Jvc3NoYWlycyA9IHRydWU7CisgIHJldHVybiBRbmlsOwor fQorCitERUZVTiAoIm1jLWFjdGl2YXRlLWN1cnNvcnMiLCBGbWNfYWN0aXZhdGVfY3Vyc29ycywg U21jX2FjdGl2YXRlX2N1cnNvcnMsIDEsIDEsIDAsCisgICAgICAgZG9jOiAvKiBXaGVuIHVzaW5n IGEgdGltZXIsIGBrYmRfbWNfYWN0aXZhdGVfY3Vyc29ycycgaW4gYGtleWJvYXJkLmMnIGlzIG5v dCBjYWxsZWQuCitUaGVyZSBhcmUgYWxzbyBzb21lIG90aGVyIGNpcmN1bXN0YW5jZXMgd2hlcmUg YG1jLWFjdGl2YXRlLWN1cnNvcnMnIGlzIGhlbHBmdWwuICovKQorICAoTGlzcF9PYmplY3Qgd2lu ZG93KQoreworICBzdHJ1Y3Qgd2luZG93ICp3ID0gZGVjb2RlX2xpdmVfd2luZG93ICh3aW5kb3cp OworICB3LT5tYy5kcmF3X2dseXBoX2N1cnNvciA9IHRydWU7CisgIHctPm1jLmVyYXNlX2dseXBo X2N1cnNvciA9IHRydWU7CisgIHJldHVybiBRbmlsOworfQorCitERUZVTiAoImJ1Zy0yODkzNiIs IEZidWdfMjg5MzYsIFNidWdfMjg5MzYsIDEsIDEsIDAsCisgICAgICAgZG9jOiAvKiBEZW1vbnN0 cmF0ZSB0aGUgRW1hY3MgYnVnICMgMjg5MzYuICovKQorICAoTGlzcF9PYmplY3Qgd2luZG93KQor eworICBzdHJ1Y3Qgd2luZG93ICp3ID0gZGVjb2RlX2xpdmVfd2luZG93ICh3aW5kb3cpOworICBz dHJ1Y3QgaXQgaXQ7CisgIHZvaWQgKml0ZGF0YSA9IGJpZGlfc2hlbHZlX2NhY2hlICgpOworICBz dHJ1Y3QgdGV4dF9wb3Mgc3RhcnRfdGV4dF9wb3NpdGlvbjsKKyAgaW50IHRhcmdldF94OworICBl bnVtIG1vdmVfaXRfcmVzdWx0IHJjOworICBzdHJ1Y3QgYnVmZmVyICpiID0gWEJVRkZFUiAody0+ Y29udGVudHMpOworICBiLT53b3JkX3dyYXBfID0gUXQ7CisgIFNFVF9URVhUX1BPU19GUk9NX01B UktFUiAoc3RhcnRfdGV4dF9wb3NpdGlvbiwgdy0+c3RhcnQpOworICBzdGFydF9kaXNwbGF5ICgm aXQsIHcsIHN0YXJ0X3RleHRfcG9zaXRpb24pOworICBtb3ZlX2l0X3RvICgmaXQsIFBULCBpdC5s YXN0X3Zpc2libGVfeCwgaXQubGFzdF92aXNpYmxlX3kgLSAxLCAtMSwgTU9WRV9UT19QT1MgfCBN T1ZFX1RPX1ggfCBNT1ZFX1RPX1kpOworICB0YXJnZXRfeCA9IGl0LmN1cnJlbnRfeDsKKyAgbW92 ZV9pdF9ieV9saW5lcyAoJml0LCAwKTsKKyAgcmMgPSBtY19tb3ZlX2l0X2luX2Rpc3BsYXlfbGlu ZSAodywgJml0LCB0YXJnZXRfeCk7CisgIGJpZGlfdW5zaGVsdmVfY2FjaGUgKGl0ZGF0YSwgZmFs c2UpOworICByZXR1cm4gbWFrZV9udW1iZXIgKHJjKTsKK30KKworLyogRU5EIG11bHRpcGxlIGN1 cnNvcnMgKi8KKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCiAMCiAvKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK QEAgLTE0MTYyLDYgKzE1NzAyLDE5IEBAIHJlZGlzcGxheV9pbnRlcm5hbCAodm9pZCkKICNpZmRl ZiBIQVZFX1dJTkRPV19TWVNURU0KIAkgICAgICB1cGRhdGVfd2luZG93X2ZyaW5nZXMgKHcsIGZh bHNlKTsKICNlbmRpZgorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1 cnNvcnMgKi8KKworLyogTk9URTogIEFuIGlkbGUtdGltZXIgZnVuY3Rpb24gbWF5IG5vdCBuZWNl c3NhcmlseSB0cmlnZ2VyIGByZWRpc3BsYXlfd2luZG93Jy4KK2BvcHRpbWl6YXRpb24gMWAgKHdo aWNoIGluY2x1ZGVzIGxlZnQvcmlnaHQgY3Vyc29yIG1vdmVtZW50IG9uIHRoZSBmaXJzdCBzY3Jl ZW4KK2xpbmUpLCBhbmQgYG9wdGltaXphdGlvbiAzYCAod2hpY2ggaW5jbHVkZXMgbGVmdC9yaWdo dCBjdXJzb3IgbW92ZW1lbnQgb24gc2NyZWVuCitsaW5lcyBzdWJzZXF1ZW50IHRvIHRoZSBmaXJz dCBzY3JlZW4gbGluZSksIGJ5cGFzcyBgcmVkaXNwbGF5X3dpbmRvdycuICovCisKKyAgICAgIG1j X3JlbW92ZV9ldmVyeXRoaW5nICh3KTsKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisKIAkg ICAgICBnb3RvIHVwZGF0ZTsKIAkgICAgfQogCSAgZWxzZQpAQCAtMTQxODQsNiArMTU3MzcsMTYg QEAgcmVkaXNwbGF5X2ludGVybmFsICh2b2lkKQogCQkgICYmICh3ID0gWFdJTkRPVyAoc2VsZWN0 ZWRfd2luZG93KSkgIT0gc3cpCiAJCWdvdG8gcmV0cnk7CiAKKworLyogKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgICAgICBpZiAobWNfd2l0aG91dF91 cGRhdGVfZnJhbWUgKHcpKQorICAgICAgICAgZ290byBlbmRfb2ZfcmVkaXNwbGF5OworCisvKiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiogKi8KKworCiAJICAgICAgLyogV2UgdXNlZCB0byBhbHdheXMgZ290 byBlbmRfb2ZfcmVkaXNwbGF5IGhlcmUsIGJ1dCB0aGlzCiAJCSBpc24ndCBlbm91Z2ggaWYgd2Ug aGF2ZSBhIGJsaW5raW5nIGN1cnNvci4gICovCiAJICAgICAgaWYgKHctPmN1cnNvcl9vZmZfcCA9 PSB3LT5sYXN0X2N1cnNvcl9vZmZfcCkKQEAgLTE0MjI1LDYgKzE1Nzg4LDE5IEBAIHJlZGlzcGxh eV9pbnRlcm5hbCAodm9pZCkKIAkJICAqdy0+ZGVzaXJlZF9tYXRyaXgtPm1ldGhvZCA9IDA7CiAJ CSAgZGVidWdfbWV0aG9kX2FkZCAodywgIm9wdGltaXphdGlvbiAzIik7CiAjZW5kaWYKKworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKy8qIE5PVEU6 ICBBbiBpZGxlLXRpbWVyIGZ1bmN0aW9uIG1heSBub3QgbmVjZXNzYXJpbHkgdHJpZ2dlciBgcmVk aXNwbGF5X3dpbmRvdycuCitgb3B0aW1pemF0aW9uIDFgICh3aGljaCBpbmNsdWRlcyBsZWZ0L3Jp Z2h0IGN1cnNvciBtb3ZlbWVudCBvbiB0aGUgZmlyc3Qgc2NyZWVuCitsaW5lKSwgYW5kIGBvcHRp bWl6YXRpb24gM2AgKHdoaWNoIGluY2x1ZGVzIGxlZnQvcmlnaHQgY3Vyc29yIG1vdmVtZW50IG9u IHNjcmVlbgorbGluZXMgc3Vic2VxdWVudCB0byB0aGUgZmlyc3Qgc2NyZWVuIGxpbmUpLCBieXBh c3MgYHJlZGlzcGxheV93aW5kb3cnLiAqLworCisgICAgICBtY19yZW1vdmVfZXZlcnl0aGluZyAo dyk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiAJCSAgZ290byB1cGRhdGU7CiAJCX0K IAkgICAgICBlbHNlCkBAIC0xNDM1OCw2ICsxNTkzNCwxOCBAQCByZWRpc3BsYXlfaW50ZXJuYWwg KHZvaWQpCiAJCSAgICB1bnJlcXVlc3Rfc2lnaW8gKCk7CiAJCSAgU1RPUF9QT0xMSU5HOwogCisv KiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMgKi8KKworICAgIC8q IE9uIEVtYWNzIGZvciBXaW5kb3dzLCBjcm9zc2hhaXJzIHdpbGwgbm90IGRyYXcgYXQgdGhlIGJl Z2lubmluZyBvZiB0aGUgYnVmZmVyCisgICAgd2l0aG91dCB0aGlzIGNvbmRpdGlvbiB3aGVuIHRo ZSBpZGxlLXRpbWVyIHN3aXRjaGVzIGFyZSB0b2dnbGVkLiAgVGhpcyBtYXkgaGF2ZQorICAgIGJl ZW4gZHVlIHRvIHRoZSBwYXJlbnRoZXNlcyBvdmVybGF5cyB0aGF0IHdlcmUgcmVtb3ZlZCBhbmQg ZGlkIG5vdCBuZWVkIHRvIGJlCisgICAgcmVkcmF3biBzaW5jZSBvcGVuaW5nIHBhcmVudGhlc2Vz IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciBhcmUgbm90IGhpZ2hsaWdodGVkLiAqLwor ICAgIGlmICh3LT5tYy5kcmF3X2Nyb3NzaGFpcnMpCisgICAgICB3LT5tdXN0X2JlX3VwZGF0ZWRf cCA9IHRydWU7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiAJCSAgcGVuZGluZyB8PSB1 cGRhdGVfZnJhbWUgKGYsIGZhbHNlLCBmYWxzZSk7CiAJCSAgZi0+Y3Vyc29yX3R5cGVfY2hhbmdl ZCA9IGZhbHNlOwogCQkgIGYtPnVwZGF0ZWRfcCA9IHRydWU7CkBAIC0xNzU2NCw2ICsxOTE1Miwy MCBAQCByZWRpc3BsYXlfd2luZG93IChMaXNwX09iamVjdCB3aW5kb3csIGJvb2wganVzdF90aGlz X29uZV9wKQogICBlbHNlCiAgICAgVEVNUF9TRVRfUFRfQk9USCAoQ0hBUlBPUyAob3BvaW50KSwg QllURVBPUyAob3BvaW50KSk7CiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogQkVHSU4g bXVsdGlwbGUgY3Vyc29ycyAqLworCisvKiBOT1RFOiAgQW4gaWRsZS10aW1lciBmdW5jdGlvbiBt YXkgbm90IG5lY2Vzc2FyaWx5IHRyaWdnZXIgYHJlZGlzcGxheV93aW5kb3cnLgorYG9wdGltaXph dGlvbiAxYCAod2hpY2ggaW5jbHVkZXMgbGVmdC9yaWdodCBjdXJzb3IgbW92ZW1lbnQgb24gdGhl IGZpcnN0IHNjcmVlbgorbGluZSksIGFuZCBgb3B0aW1pemF0aW9uIDNgICh3aGljaCBpbmNsdWRl cyBsZWZ0L3JpZ2h0IGN1cnNvciBtb3ZlbWVudCBvbiBzY3JlZW4KK2xpbmVzIHN1YnNlcXVlbnQg dG8gdGhlIGZpcnN0IHNjcmVlbiBsaW5lKSwgYnlwYXNzIGByZWRpc3BsYXlfd2luZG93Jy4gKi8K KworICBtY19yZWNvcmRfeF93c3RhcnRfd2VuZCAodyk7CisKKyAgbWNfcmVtb3ZlX2V2ZXJ5dGhp bmcgKHcpOworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogICBzZXRfYnVmZmVyX2ludGVy bmFsXzEgKG9sZCk7CiAgIC8qIEF2b2lkIGFuIGFib3J0IGluIFRFTVBfU0VUX1BUX0JPVEggaWYg dGhlIGJ1ZmZlciBoYXMgYmVjb21lCiAgICAgIHNob3J0ZXIuICBUaGlzIGNhbiBiZSBjYXVzZWQg YnkgbG9nIHRydW5jYXRpb24gaW4gKk1lc3NhZ2VzKi4gICovCkBAIC0yNDY0MCw2ICsyNjI0Miwy NSBAQCBkZWNvZGVfbW9kZV9zcGVjIChzdHJ1Y3Qgd2luZG93ICp3LCByZWdpc3RlciBpbnQgYywg aW50IGZpZWxkX3dpZHRoLAogCSAgcmV0dXJuICJAIjsKICAgICAgIH0KIAorLyogKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgICBjYXNlICd3JzoKKyAg ICAgIHsKKyAgcHRyZGlmZl90IHdpbmRvd19zdGFydCA9IG1hcmtlcl9wb3NpdGlvbiAody0+c3Rh cnQpOworICBwaW50MnN0ciAoZGVjb2RlX21vZGVfc3BlY19idWYsIHdpZHRoLCB3aW5kb3dfc3Rh cnQpOworICByZXR1cm4gZGVjb2RlX21vZGVfc3BlY19idWY7CisgICAgICB9CisKKyAgICBjYXNl ICdXJzoKKyAgICAgIHsKKyAgcHRyZGlmZl90IHdpbmRvd19lbmQgPSBCVUZfWiAoYikgLSB3LT53 aW5kb3dfZW5kX3BvczsKKyAgcGludDJzdHIgKGRlY29kZV9tb2RlX3NwZWNfYnVmLCB3aWR0aCwg d2luZG93X2VuZCk7CisgIHJldHVybiBkZWNvZGVfbW9kZV9zcGVjX2J1ZjsKKyAgICAgIH0KKwor LyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqICovCisKICAgICBjYXNlICd6JzoKICAgICAgIC8qIGNvZGlu Zy1zeXN0ZW0gKG5vdCBpbmNsdWRpbmcgZW5kLW9mLWxpbmUgZm9ybWF0KSAqLwogICAgIGNhc2Ug J1onOgpAQCAtMjk1MDYsOSArMzExMjcsMTkgQEAgZGlzcGxheV9hbmRfc2V0X2N1cnNvciAoc3Ry dWN0IHdpbmRvdyAqdywgYm9vbCBvbiwKICAgICAgIHctPnBoeXNfY3Vyc29yLnZwb3MgPSB2cG9z OwogICAgIH0KIAorLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3Jz ICovCisKKyAgTGlzcF9PYmplY3QgY29sb3JfdmVjdG9yID0gKEZtYWtlX3ZlY3RvciAobWFrZV9u dW1iZXIgKDMpLCBRbmlsKSk7CisgIEFTRVQgKGNvbG9yX3ZlY3RvciwgMCwgbWFrZV9mbG9hdCAo LTEuMCkpOworICBBU0VUIChjb2xvcl92ZWN0b3IsIDEsIG1ha2VfZmxvYXQgKC0xLjApKTsKKyAg QVNFVCAoY29sb3JfdmVjdG9yLCAyLCBtYWtlX2Zsb2F0ICgtMS4wKSk7CiAgIEZSQU1FX1JJRiAo ZiktPmRyYXdfd2luZG93X2N1cnNvciAodywgZ2x5cGhfcm93LCB4LCB5LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19jdXJzb3JfdHlwZSwgbmV3X2N1cnNvcl93aWR0 aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiwgYWN0aXZlX2N1cnNv cik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24sIGFjdGl2ZV9jdXJz b3IsIGNvbG9yX3ZlY3RvciwgUW5pbCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCiB9 CiAKIApAQCAtMjk1NDAsMTAgKzMxMTcxLDI4IEBAIHVwZGF0ZV93aW5kb3dfY3Vyc29yIChzdHJ1 Y3Qgd2luZG93ICp3LCBib29sIG9uKQogICAgICAgaWYgKHJvdy0+cmV2ZXJzZWRfcCAmJiBocG9z ID49IHJvdy0+dXNlZFtURVhUX0FSRUFdKQogCWhwb3MgPSByb3ctPnVzZWRbVEVYVF9BUkVBXSAt IDE7CiAKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogbXVsdGlwbGUgY3Vyc29ycyAqLwor CisgICAgICAvKiBNb3ZpbmcgdGhlIG1vdXNlIHRyaWdnZXJzIGB1cGRhdGVfd2luZG93X2N1cnNv cicgd2hpY2ggY2FsbHMKKyAgICAgIGBkaXNwbGF5X2FuZF9zZXRfY3Vyc29yJyB0aGF0IHdvdWxk IG90aGVyd2lzZSByZW1vdmUgYSBwb3J0aW9uIG9mIHRoZQorICAgICAgaG9yaXpvbnRhbCBydWxl ciBmcm9tIHBvaW50IGF0IGVuZCBvZiB2aXN1YWwgbGluZSB0byB3aW5kb3cgZWRnZS4gKi8KKyAg ICAgIGJvb2wgY3Jvc3NoYWlyc19wID0gKCFNSU5JX1dJTkRPV19QICh3KQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgJiYgIXctPm1jLmRyYXdfY3Jvc3NoYWlycworICAgICAgICAgICAgICAg ICAgICAgICAgICAgJiYgIU5JTFAgKHctPmNyb3NzaGFpcnNfY2FjaGUpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAmJiAhTklMUCAoQlZBUiAoWEJVRkZFUiAody0+Y29udGVudHMpLCBjcm9z c2hhaXJzKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHcgPT0gWFdJTkRPVyAoWENB UiAoRm50aCAobWFrZV9udW1iZXIgKDEpLCB3LT5jcm9zc2hhaXJzX2NhY2hlKSkpCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAmJiBFUSAody0+Y29udGVudHMsIFhDQVIgKEZudGggKG1ha2Vf bnVtYmVyICgyKSwgdy0+Y3Jvc3NoYWlyc19jYWNoZSkpKSk7CisgICAgICBpZiAoIWNyb3NzaGFp cnNfcCkKKyAgICAgICAgewogICAgICAgYmxvY2tfaW5wdXQgKCk7CiAgICAgICBkaXNwbGF5X2Fu ZF9zZXRfY3Vyc29yICh3LCBvbiwgaHBvcywgdnBvcywKIAkJCSAgICAgIHctPnBoeXNfY3Vyc29y LngsIHctPnBoeXNfY3Vyc29yLnkpOwogICAgICAgdW5ibG9ja19pbnB1dCAoKTsKKyAgICAgICAg fQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKwogICAgIH0KIH0KIApAQCAtMzIyNTQsNiAr MzM5MDMsMjYgQEAgeF9pbnRlcnNlY3RfcmVjdGFuZ2xlcyAoWFJlY3RhbmdsZSAqcjEsIFhSZWN0 YW5nbGUgKnIyLCBYUmVjdGFuZ2xlICpyZXN1bHQpCiB2b2lkCiBzeW1zX29mX3hkaXNwICh2b2lk KQogeworCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8qIEJFR0lOIG11bHRpcGxlIGN1cnNv cnMgKi8KKworICBERUZTWU0gKFFtY19nbHlwaCwgIm1jLWdseXBoLWN1cnNvciIpOworICBERUZT WU0gKFFtY19nbHlwaGxlc3MsICJtYy1nbHlwbGVzcy1jdXJzb3IiKTsKKyAgREVGU1lNIChRbWNf Z2x5cGhfdGFiLCAibWMtZ2x5cGgtdGFiIik7CisKKyAgZGVmc3ViciAoJlNtY19hY3RpdmF0ZV9j dXJzb3JzKTsKKyAgREVGU1lNIChRbWNfYWN0aXZhdGVfY3Vyc29ycywgIm1jLWFjdGl2YXRlLWN1 cnNvcnMiKTsKKworICBkZWZzdWJyICgmU21jX2FjdGl2YXRlX2Nyb3NzaGFpcnMpOworICBERUZT WU0gKFFtY19hY3RpdmF0ZV9jcm9zc2hhaXJzLCAibWMtYWN0aXZhdGUtY3Jvc3NoYWlycyIpOwor CisgIGRlZnN1YnIgKCZTYnVnXzI4OTM2KTsKKyAgREVGU1lNIChRYnVnXzI4OTM2LCAiYnVnLTI4 OTM2Iik7CisKKy8qIEVORCBtdWx0aXBsZSBjdXJzb3JzICovCisvKiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiogKi8KKwogICBWd2l0aF9lY2hvX2FyZWFfc2F2ZV92ZWN0b3IgPSBRbmlsOwogICBzdGF0aWNw cm8gKCZWd2l0aF9lY2hvX2FyZWFfc2F2ZV92ZWN0b3IpOwogCmRpZmYgLS1naXQgYS9zcmMveGZh Y2VzLmMgYi9zcmMveGZhY2VzLmMKaW5kZXggYjMwOWMxNi4uNjRjNTZkMyAxMDA2NDQKLS0tIGEv c3JjL3hmYWNlcy5jCisrKyBiL3NyYy94ZmFjZXMuYwpAQCAtNDQ4Niw2ICs0NDg2LDEwIEBAIGxv b2t1cF9iYXNpY19mYWNlIChzdHJ1Y3QgZnJhbWUgKmYsIGludCBmYWNlX2lkKQogICAgIGNhc2Ug Q1VSU09SX0ZBQ0VfSUQ6CQluYW1lID0gUWN1cnNvcjsJCQlicmVhazsKICAgICBjYXNlIE1PVVNF X0ZBQ0VfSUQ6CQkJbmFtZSA9IFFtb3VzZTsJCQlicmVhazsKICAgICBjYXNlIE1FTlVfRkFDRV9J RDoJCQluYW1lID0gUW1lbnU7CQkJYnJlYWs7CisvKiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKy8q IG11bHRpcGxlIGN1cnNvcnMgKi8KKyAgICBjYXNlIFZFUlRJQ0FMX0JPUkRFUl9GQUNFX0lEOiBu YW1lID0gUXZlcnRpY2FsX2JvcmRlcjsgYnJlYWs7CisvKiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8K ICAgICBjYXNlIFdJTkRPV19ESVZJREVSX0ZBQ0VfSUQ6CW5hbWUgPSBRd2luZG93X2RpdmlkZXI7 CQlicmVhazsKICAgICBjYXNlIFdJTkRPV19ESVZJREVSX0ZJUlNUX1BJWEVMX0ZBQ0VfSUQ6CW5h bWUgPSBRd2luZG93X2RpdmlkZXJfZmlyc3RfcGl4ZWw7CWJyZWFrOwogICAgIGNhc2UgV0lORE9X X0RJVklERVJfTEFTVF9QSVhFTF9GQUNFX0lEOgluYW1lID0gUXdpbmRvd19kaXZpZGVyX2xhc3Rf cGl4ZWw7CWJyZWFrOwpkaWZmIC0tZ2l0IGEvc3JjL3h0ZXJtLmMgYi9zcmMveHRlcm0uYwppbmRl eCBlNDIyMTY4Li4xM2M1ZGJjIDEwMDY0NAotLS0gYS9zcmMveHRlcm0uYworKysgYi9zcmMveHRl cm0uYwpAQCAtMTE2MywxMCArMTE2MywxMiBAQCB4X3VwZGF0ZV93aW5kb3dfZW5kIChzdHJ1Y3Qg d2luZG93ICp3LCBib29sIGN1cnNvcl9vbl9wLAogICAgIHsKICAgICAgIGJsb2NrX2lucHV0ICgp OwogCi0gICAgICBpZiAoY3Vyc29yX29uX3ApCi0JZGlzcGxheV9hbmRfc2V0X2N1cnNvciAodywg dHJ1ZSwKLQkJCQl3LT5vdXRwdXRfY3Vyc29yLmhwb3MsIHctPm91dHB1dF9jdXJzb3IudnBvcywK LQkJCQl3LT5vdXRwdXRfY3Vyc29yLngsIHctPm91dHB1dF9jdXJzb3IueSk7CisvKiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMgKi8KKworICAgICAgbWNfcG9ydGFs ICh3LCBjdXJzb3Jfb25fcCk7CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwogCiAgICAgICBp ZiAoZHJhd193aW5kb3dfZnJpbmdlcyAodywgdHJ1ZSkpCiAJewpAQCAtMTU1MCwxMCArMTU1Miwx NyBAQCBzdGF0aWMgdm9pZCB4X2NoZWNrX2ZvbnQgKHN0cnVjdCBmcmFtZSAqLCBzdHJ1Y3QgZm9u dCAqKTsKIHN0YXRpYyB2b2lkCiB4X3NldF9jdXJzb3JfZ2MgKHN0cnVjdCBnbHlwaF9zdHJpbmcg KnMpCiB7Ci0gIGlmIChzLT5mb250ID09IEZSQU1FX0ZPTlQgKHMtPmYpCisvKiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiogKi8KKy8qIG11bHRpcGxlIGN1cnNvcnMgKi8KKworICBzdHJ1Y3Qgd2luZG93ICp3 ID0gZGVjb2RlX2xpdmVfd2luZG93IChzZWxlY3RlZF93aW5kb3cpOworICBpZiAoKHMtPmZvbnQg PT0gRlJBTUVfRk9OVCAocy0+ZikKICAgICAgICYmIHMtPmZhY2UtPmJhY2tncm91bmQgPT0gRlJB TUVfQkFDS0dST1VORF9QSVhFTCAocy0+ZikKICAgICAgICYmIHMtPmZhY2UtPmZvcmVncm91bmQg PT0gRlJBTUVfRk9SRUdST1VORF9QSVhFTCAocy0+ZikKICAgICAgICYmICFzLT5jbXApCisgICAg ICB8fCB3LT5tYy5jdXJzb3JfZ2NfZGVmYXVsdCkKKworLyogKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICov CiAgICAgcy0+Z2MgPSBzLT5mLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2M7CiAgIGVsc2UKICAg ICB7CkBAIC05MzEwLDcgKzkzMTksMTYgQEAgeF9kcmF3X2Jhcl9jdXJzb3IgKHN0cnVjdCB3aW5k b3cgKncsIHN0cnVjdCBnbHlwaF9yb3cgKnJvdywgaW50IHdpZHRoLCBlbnVtIHRleHQKIAkgaW52 aXNpYmxlLiAgVXNlIHRoZSBnbHlwaCdzIGZvcmVncm91bmQgY29sb3IgaW5zdGVhZCBpbiB0aGlz CiAJIGNhc2UsIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGdseXBoJ3MgY29sb3JzIGFyZSBj aG9zZW4gc28KIAkgdGhhdCB0aGUgZ2x5cGggaXMgbGVnaWJsZS4gICovCi0gICAgICBpZiAoZmFj ZS0+YmFja2dyb3VuZCA9PSBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwpCisKKy8qICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKiAqLworLyogbXVsdGlwbGUgY3Vyc29ycyAqLworCisgICAgICBpZiAo ZmFjZS0+YmFja2dyb3VuZCA9PSBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwKKyAgICAg ICAgICAmJiAhdy0+bWMuY3Vyc29yX2djX2ludmlzaWJsZV9va2F5KQorCisKKy8qICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKiAqLworCiAJeGdjdi5iYWNrZ3JvdW5kID0geGdjdi5mb3JlZ3JvdW5kID0gZmFj ZS0+Zm9yZWdyb3VuZDsKICAgICAgIGVsc2UKIAl4Z2N2LmJhY2tncm91bmQgPSB4Z2N2LmZvcmVn cm91bmQgPSBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWw7CkBAIC05Mzk4LDcgKzk0MTYs MTMgQEAgeF9jbGVhcl9mcmFtZV9hcmVhIChzdHJ1Y3QgZnJhbWUgKmYsIGludCB4LCBpbnQgeSwg aW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogc3RhdGljIHZvaWQKIHhfZHJhd193aW5kb3dfY3Vyc29y IChzdHJ1Y3Qgd2luZG93ICp3LCBzdHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3csIGludCB4LAog CQkgICAgICBpbnQgeSwgZW51bSB0ZXh0X2N1cnNvcl9raW5kcyBjdXJzb3JfdHlwZSwKLQkJICAg ICAgaW50IGN1cnNvcl93aWR0aCwgYm9vbCBvbl9wLCBib29sIGFjdGl2ZV9wKQorLyogKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqICovCisvKiBtdWx0aXBsZSBjdXJzb3JzICovCisKKyAgaW50IGN1cnNvcl93 aWR0aCwgYm9vbCBvbl9wLCBib29sIGFjdGl2ZV9wLAorICBMaXNwX09iamVjdCBjb2xvcl92ZWN0 b3IsIExpc3BfT2JqZWN0IGZsYXZvcikKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovCiB7CiAg IHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7CiAKQEAgLTk0MTcs MzEgKzk0NDEsMTI0IEBAIHhfZHJhd193aW5kb3dfY3Vyc29yIChzdHJ1Y3Qgd2luZG93ICp3LCBz dHJ1Y3QgZ2x5cGhfcm93ICpnbHlwaF9yb3csIGludCB4LAogCX0KICAgICAgIGVsc2UKIAl7Ci0J ICBzd2l0Y2ggKGN1cnNvcl90eXBlKQotCSAgICB7Ci0JICAgIGNhc2UgSE9MTE9XX0JPWF9DVVJT T1I6Ci0JICAgICAgeF9kcmF3X2hvbGxvd19jdXJzb3IgKHcsIGdseXBoX3Jvdyk7Ci0JICAgICAg YnJlYWs7CiAKLQkgICAgY2FzZSBGSUxMRURfQk9YX0NVUlNPUjoKLQkgICAgICBkcmF3X3BoeXNf Y3Vyc29yX2dseXBoICh3LCBnbHlwaF9yb3csIERSQVdfQ1VSU09SKTsKLQkgICAgICBicmVhazsK LQotCSAgICBjYXNlIEJBUl9DVVJTT1I6Ci0JICAgICAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGds eXBoX3JvdywgY3Vyc29yX3dpZHRoLCBCQVJfQ1VSU09SKTsKLQkgICAgICBicmVhazsKLQotCSAg ICBjYXNlIEhCQVJfQ1VSU09SOgotCSAgICAgIHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlwaF9y b3csIGN1cnNvcl93aWR0aCwgSEJBUl9DVVJTT1IpOwotCSAgICAgIGJyZWFrOwotCi0JICAgIGNh c2UgTk9fQ1VSU09SOgotCSAgICAgIHctPnBoeXNfY3Vyc29yX3dpZHRoID0gMDsKLQkgICAgICBi cmVhazsKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworLyogQkVHSU4gbXVsdGlwbGUgY3Vyc29y cyAqLworICBkb3VibGUgcmVkID0gWEZMT0FUX0RBVEEgKEFSRUYgKGNvbG9yX3ZlY3RvciwgMCkp OworICBkb3VibGUgZ3JlZW4gPSBYRkxPQVRfREFUQSAoQVJFRiAoY29sb3JfdmVjdG9yLCAxKSk7 CisgIGRvdWJsZSBibHVlID0gWEZMT0FUX0RBVEEgKEFSRUYgKGNvbG9yX3ZlY3RvciwgMikpOwor ICBzd2l0Y2ggKGN1cnNvcl90eXBlKQorICB7CisgICAgY2FzZSBIT0xMT1dfQk9YX0NVUlNPUjoK KyAgICB7CisgICAgICBpZiAocmVkID49IDAgJiYgYmx1ZSA+PSAwICYmIGdyZWVuID49IDApCisg ICAgICAgIC8qIFRlbXBvcmFyaWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX3Bp eGVsJy4gICovCisgICAgICAgIHsKKyAgICAgICAgICBzdHJ1Y3QgZnJhbWUgKmYgPSBYRlJBTUUg KFdJTkRPV19GUkFNRSAodykpOworICAgICAgICAgIHN0cnVjdCB4X2Rpc3BsYXlfaW5mbyAqZHB5 aW5mbyA9IEZSQU1FX0RJU1BMQVlfSU5GTyAoZik7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyBv cmlnX3ZhbCA9IGYtPm91dHB1dF9kYXRhLngtPmN1cnNvcl9waXhlbDsKKyAgICAgICAgICBpbnQg aW50X3JlZCA9IHJlZCAqIDY1NTM1OworICAgICAgICAgIGludCBpbnRfZ3JlZW4gPSBncmVlbiAq IDY1NTM1OworICAgICAgICAgIGludCBpbnRfYmx1ZSA9IGJsdWUgKiA2NTUzNTsKKyAgICAgICAg ICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwgPSB4X21ha2VfdHJ1ZWNvbG9yX3BpeGVs IChkcHlpbmZvLCBpbnRfcmVkLCBpbnRfZ3JlZW4sIGludF9ibHVlKTsKKyAgICAgICAgICB4X2Ry YXdfaG9sbG93X2N1cnNvciAodywgZ2x5cGhfcm93KTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0 YS54LT5jdXJzb3JfcGl4ZWwgPSBvcmlnX3ZhbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisg ICAgICAgICAgeF9kcmF3X2hvbGxvd19jdXJzb3IgKHcsIGdseXBoX3Jvdyk7CisgICAgICBicmVh azsKKyAgICB9CisgICAgY2FzZSBGSUxMRURfQk9YX0NVUlNPUjoKKyAgICB7CisgICAgICBpZiAo cmVkID49IDAgJiYgYmx1ZSA+PSAwICYmIGdyZWVuID49IDApCisgICAgICAgIC8qIFRlbXBvcmFy aWx5IGhpamFjayBgZi0+b3V0cHV0X2RhdGEueC0+Y3Vyc29yX2djJyBieSBib3Jyb3dpbmcgdGhl CisgICAgICAgIGZ1bmN0aW9uYWxpdHkgb2YgYHhfbWFrZV9nYycgaW4geGZucy5jLiAgKi8KKyAg ICAgICAgeworICAgICAgICAgIGJsb2NrX2lucHV0ICgpOworICAgICAgICAgIExpc3BfT2JqZWN0 IHdpbmRvdyA9IChzZWxlY3RlZF93aW5kb3cpOworICAgICAgICAgIHN0cnVjdCB3aW5kb3cgKncg PSBkZWNvZGVfbGl2ZV93aW5kb3cgKHdpbmRvdyk7CisgICAgICAgICAgc3RydWN0IGZyYW1lICpm ID0gWEZSQU1FIChXSU5ET1dfRlJBTUUgKHcpKTsKKyAgICAgICAgICBzdHJ1Y3QgeF9kaXNwbGF5 X2luZm8gKmRweWluZm8gPSBGUkFNRV9ESVNQTEFZX0lORk8gKGYpOworICAgICAgICAgIGludCBp bnRfcmVkID0gcmVkICogNjU1MzU7CisgICAgICAgICAgaW50IGludF9ncmVlbiA9IGdyZWVuICog NjU1MzU7CisgICAgICAgICAgaW50IGludF9ibHVlID0gYmx1ZSAqIDY1NTM1OworICAgICAgICAg IFhHQ1ZhbHVlcyBnY192YWx1ZXM7CisgICAgICAgICAgdW5zaWduZWQgbG9uZyBtYXNrID0gR0NG b3JlZ3JvdW5kIHwgR0NCYWNrZ3JvdW5kIHwgR0NGaWxsU3R5bGUgfCBHQ0xpbmVXaWR0aDsKKyAg ICAgICAgICB1bnNpZ25lZCBsb25nIG9yaWdfdmFsX2EgPSBGUkFNRV9CQUNLR1JPVU5EX1BJWEVM IChmKTsKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIG9yaWdfdmFsX2IgPSBmLT5vdXRwdXRfZGF0 YS54LT5jdXJzb3JfcGl4ZWw7CisgICAgICAgICAgZ2NfdmFsdWVzLmxpbmVfd2lkdGggPSAwOyAg LyogTWVhbnMgMSB1c2luZyBmYXN0IGFsZ29yaXRobS4gICovCisgICAgICAgICAgZ2NfdmFsdWVz LmZvcmVncm91bmQgPSBGUkFNRV9CQUNLR1JPVU5EX1BJWEVMIChmKTsKKyAgICAgICAgICBnY192 YWx1ZXMuYmFja2dyb3VuZCA9IHhfbWFrZV90cnVlY29sb3JfcGl4ZWwgKGRweWluZm8sIGludF9y ZWQsIGludF9ncmVlbiwgaW50X2JsdWUpOworICAgICAgICAgIGdjX3ZhbHVlcy5maWxsX3N0eWxl ID0gRmlsbE9wYXF1ZVN0aXBwbGVkOworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLngtPmN1cnNv cl9nYworICAgICAgICAgICAgPSBYQ3JlYXRlR0MgKEZSQU1FX1hfRElTUExBWSAoZiksIEZSQU1F X1hfV0lORE9XIChmKSwgbWFzaywgJmdjX3ZhbHVlcyk7CisgICAgICAgICAgLyogRm9yY2UgYHhf c2V0X2N1cnNvcl9nYycgdG8gdXNlIGBzLT5mLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfZ2MnLiAg Ki8KKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfZGVmYXVsdCA9IHRydWU7CisgICAgICAgICAg ZHJhd19waHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5cGhfcm93LCBEUkFXX0NVUlNPUik7CisgICAg ICAgICAgdy0+bWMuY3Vyc29yX2djX2RlZmF1bHQgPSBmYWxzZTsKKyAgICAgICAgICBnY192YWx1 ZXMubGluZV93aWR0aCA9IDA7ICAvKiBNZWFucyAxIHVzaW5nIGZhc3QgYWxnb3JpdGhtLiAgKi8K KyAgICAgICAgICBnY192YWx1ZXMuZm9yZWdyb3VuZCA9IG9yaWdfdmFsX2E7CisgICAgICAgICAg Z2NfdmFsdWVzLmJhY2tncm91bmQgPSBvcmlnX3ZhbF9iOworICAgICAgICAgIGdjX3ZhbHVlcy5m aWxsX3N0eWxlID0gRmlsbE9wYXF1ZVN0aXBwbGVkOworICAgICAgICAgIGYtPm91dHB1dF9kYXRh LngtPmN1cnNvcl9nYworICAgICAgICAgICAgPSBYQ3JlYXRlR0MgKEZSQU1FX1hfRElTUExBWSAo ZiksIEZSQU1FX1hfV0lORE9XIChmKSwgbWFzaywgJmdjX3ZhbHVlcyk7CisgICAgICAgICAgdW5i bG9ja19pbnB1dCAoKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgZHJhd19w aHlzX2N1cnNvcl9nbHlwaCAodywgZ2x5cGhfcm93LCBEUkFXX0NVUlNPUik7CisgICAgICBicmVh azsKKyAgICB9CisgICAgY2FzZSBCQVJfQ1VSU09SOgorICAgIHsKKyAgICAgIGlmIChyZWQgPj0g MCAmJiBibHVlID49IDAgJiYgZ3JlZW4gPj0gMCkKKyAgICAgICAgLyogVGVtcG9yYXJpbHkgaGlq YWNrIGBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwnLiAgKi8KKyAgICAgICAgeworICAg ICAgICAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3KSk7CisgICAg ICAgICAgc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvID0gRlJBTUVfRElTUExBWV9JTkZP IChmKTsKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIG9yaWdfdmFsID0gZi0+b3V0cHV0X2RhdGEu eC0+Y3Vyc29yX3BpeGVsOworICAgICAgICAgIGludCBpbnRfcmVkID0gcmVkICogNjU1MzU7Cisg ICAgICAgICAgaW50IGludF9ncmVlbiA9IGdyZWVuICogNjU1MzU7CisgICAgICAgICAgaW50IGlu dF9ibHVlID0gYmx1ZSAqIDY1NTM1OworICAgICAgICAgIGYtPm91dHB1dF9kYXRhLngtPmN1cnNv cl9waXhlbCA9IHhfbWFrZV90cnVlY29sb3JfcGl4ZWwgKGRweWluZm8sIGludF9yZWQsIGludF9n cmVlbiwgaW50X2JsdWUpOworICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19pbnZpc2libGVfb2th eSA9IHRydWU7CisgICAgICAgICAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3JvdywgY3Vy c29yX3dpZHRoLCBCQVJfQ1VSU09SKTsKKyAgICAgICAgICB3LT5tYy5jdXJzb3JfZ2NfaW52aXNp YmxlX29rYXkgPSBmYWxzZTsKKyAgICAgICAgICBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4 ZWwgPSBvcmlnX3ZhbDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgeF9kcmF3 X2Jhcl9jdXJzb3IgKHcsIGdseXBoX3JvdywgY3Vyc29yX3dpZHRoLCBCQVJfQ1VSU09SKTsKKyAg ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEhCQVJfQ1VSU09SOgorICAgIHsKKyAgICAgIGlm IChyZWQgPj0gMCAmJiBibHVlID49IDAgJiYgZ3JlZW4gPj0gMCkKKyAgICAgICAgLyogVGVtcG9y YXJpbHkgaGlqYWNrIGBmLT5vdXRwdXRfZGF0YS54LT5jdXJzb3JfcGl4ZWwnLiAgKi8KKyAgICAg ICAgeworICAgICAgICAgIHN0cnVjdCBmcmFtZSAqZiA9IFhGUkFNRSAoV0lORE9XX0ZSQU1FICh3 KSk7CisgICAgICAgICAgc3RydWN0IHhfZGlzcGxheV9pbmZvICpkcHlpbmZvID0gRlJBTUVfRElT UExBWV9JTkZPIChmKTsKKyAgICAgICAgICB1bnNpZ25lZCBsb25nIG9yaWdfdmFsID0gZi0+b3V0 cHV0X2RhdGEueC0+Y3Vyc29yX3BpeGVsOworICAgICAgICAgIGludCBpbnRfcmVkID0gcmVkICog NjU1MzU7CisgICAgICAgICAgaW50IGludF9ncmVlbiA9IGdyZWVuICogNjU1MzU7CisgICAgICAg ICAgaW50IGludF9ibHVlID0gYmx1ZSAqIDY1NTM1OworICAgICAgICAgIGYtPm91dHB1dF9kYXRh LngtPmN1cnNvcl9waXhlbCA9IHhfbWFrZV90cnVlY29sb3JfcGl4ZWwgKGRweWluZm8sIGludF9y ZWQsIGludF9ncmVlbiwgaW50X2JsdWUpOworICAgICAgICAgIHctPm1jLmN1cnNvcl9nY19pbnZp c2libGVfb2theSA9IHRydWU7CisgICAgICAgICAgeF9kcmF3X2Jhcl9jdXJzb3IgKHcsIGdseXBo X3JvdywgY3Vyc29yX3dpZHRoLCBIQkFSX0NVUlNPUik7CisgICAgICAgICAgdy0+bWMuY3Vyc29y X2djX2ludmlzaWJsZV9va2F5ID0gZmFsc2U7CisgICAgICAgICAgZi0+b3V0cHV0X2RhdGEueC0+ Y3Vyc29yX3BpeGVsID0gb3JpZ192YWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAg ICAgIHhfZHJhd19iYXJfY3Vyc29yICh3LCBnbHlwaF9yb3csIGN1cnNvcl93aWR0aCwgSEJBUl9D VVJTT1IpOworICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgTk9fQ1VSU09SOgorICAgICAg dy0+cGh5c19jdXJzb3Jfd2lkdGggPSAwOworICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg ICAgIGVtYWNzX2Fib3J0ICgpOworICB9CisvKiBFTkQgbXVsdGlwbGUgY3Vyc29ycyAqLworLyog KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqICovCiAKLQkgICAgZGVmYXVsdDoKLQkgICAgICBlbWFjc19hYm9y dCAoKTsKLQkgICAgfQogCX0KIAogI2lmZGVmIEhBVkVfWF9JMThOCg== --Multipart_Wed_Dec_27_09:13:37_2017-1 Content-Type: application/el; type=lawlist-elisp Content-Disposition: attachment; filename="+-mode.el" Content-Transfer-Encoding: base64 KGRlZnVuIG1jLXRlc3QgKCkKIkRyYXcgZmFrZSBjdXJzb3JzIGF0IGFsbCBQT1MgZGVmaW5lZCBp biB0aGUgYG1jLWdseXBoLWxpc3QnLiAgTXVsdGlwbGUgZmFrZSBjdXJzb3JzCmFyZSBzdXBwb3J0 ZWQgYnkgR1VJIHZlcnNpb25zIG9mIEVtYWNzIGJ1aWx0IGZvciBYLCBXaW5kb3dzIGFuZCBPU1gu ClBvcHVsYXIgZm9ybXMgb2Ygc3BlY2lmeWluZyBjb2xvcnMgc3VjaCBhcyBcInJlZFwiIGFuZCBc IiNGRjAwMDBcIiBhcmUgbm93CnN1cHBvcnRlZCwgYXMgd2VsbCBhcyBMU0wgY29sb3IgdmVjdG9y cyBzdWNoIGFzIFsxLjAgMC4wIDAuMF0uICBGb3IgdGhvc2UgdXNlcnMKd2hvIGNob29zZSB0aGUg Zm9ybWVyIGZhbWlsaWFyIG1ldGhvZHMgb2Ygc3BlY2lmeWluZyBjb2xvcnMgd2l0aCBzdHJpbmdz LApgbWNfY29sb3JfdmVjdG9yX2NhbGN1bGF0ZScgd2lsbCBjb252ZXJ0IHRob3NlIHN0cmluZ3Mg dG8gTFNMIGNvbG9yIHZlY3RvcnMuClRoZSBjb2xvciB2ZWN0b3JzIGFyZSBjb21tb25seSByZWZl cnJlZCB0byBhcyBMU0wgKFRoZSBMaW5kZW4gU2NyaXB0aW5nIExhbmd1YWdlKS4KYG5zdGVybS5t JyB1c2VzIGBOU0NvbG9yJywgd2hpY2ggd29ya3Mgd2VsbCB3aXRoIExTTC4gIGB3MzJ0ZXJtLmMn IHVzZXMKYFBBTEVUVEVSR0InIG9yIGBSR0InLCBhbmQgdGhlIGNvbnZlcnNpb24gZnJvbSBMU0wg aXMgZG9uZSBpbnRlcm5hbGx5IGJ5Cm11bHRpcGx5aW5nIGVhY2ggZWxlbWVudCBvZiB0aGUgTFNM IGNvbG9yIHZlY3RvciBieSAyNTUuICBgeHRlcm0uYycgdXNlcwpgeF9tYWtlX3RydWVjb2xvcl9w aXhlbCcsIHdoaWNoIHVzZXMgMTYtYml0IFJHQiAtLSB0aGUgY29udmVyc2lvbiBmcm9tIExTTApo YXBwZW5zIGludGVybmFsbHkgYnkgbXVsdGlwbHlpbmcgZWFjaCBlbGVtZW50IG9mIHRoZSBMU0wg Y29sb3IgdmVjdG9yIGJ5IDY1NTM1LiIKKGludGVyYWN0aXZlKQogIChsZXQgKChidWZmZXIgKGdl dC1idWZmZXItY3JlYXRlICIqTUMtVEVTVCoiKSkpCiAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBi dWZmZXIKICAgICAgKGVyYXNlLWJ1ZmZlcikKICAgICAgKGluc2VydCAiVGhpcyBpcyBhIHRlc3Qh IikKICAgICAgKHNldHEgbWMtZ2x5cGgtbGlzdCAnKCgxICJoYmFyIiAibWFnZW50YSIpCiAgICAg ICAgICAgICAgICAgICAgICAoMiAiYmFyIiAicHVycGxlIikKICAgICAgICAgICAgICAgICAgICAg ICgzICJib3giICIjMDBGRjAwIikKICAgICAgICAgICAgICAgICAgICAgICg0ICJob2xsb3ciICIj MDAwMEZGIikKICAgICAgICAgICAgICAgICAgICAgICg1ICgiaGJhciIgMykgWzEuMCAwLjAgMS4w XSkKICAgICAgICAgICAgICAgICAgICAgICg2ICgiYmFyIiAzKSBbMC4wIDEuMCAxLjBdKSkpKQog ICAgKHNlbGVjdC13aW5kb3cgKGRpc3BsYXktYnVmZmVyIGJ1ZmZlcikpCiAgICA7OzsgVGhlIHRy aWdnZXIgaW4gYGtleWJvYXJkLmNgIGlzIG5vdCBhY3RpdmF0ZWQgaW4gdGhpcyBleGFtcGxlLCBz byB3ZQogICAgOzs7IGZvcmNlIHRoZSBtdWx0aXBsZSBjdXJzb3JzIHRvIGJlIGRyYXduLgogICAg KG1jLWFjdGl2YXRlLWN1cnNvcnMgKHNlbGVjdGVkLXdpbmRvdykpKSkKCjs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7OwoKKGRlZnVuICstdGltZXItZm4gKCkKIlNpbmNlIHRoaXMgZmlyZXMgZ2xvYmFs bHksIHdlIG11c3QgY29udHJvbCB3aGljaCBidWZmZXJzIGNyb3NzaGFpcnMgYXBwZWFyIGluLiIK ICAod2hlbiArLW1vZGUKICAgIChzZXRxIG92ZXJsYXktYXJyb3ctcG9zaXRpb24gbmlsKQogICAg KHNldHEtbG9jYWwgZmFjZS1yZW1hcHBpbmctYWxpc3QgJygoKy1vdmVybGF5LWFycm93LWZhY2Ug Ky1sZWZ0LWZyaW5nZS1jdXJzb3ItYWx0LXR3by1mYWNlKSkpCiAgICAodW5sZXNzIChtZW1xIGxh c3QtY29tbWFuZCAnKG13aGVlbC1zY3JvbGwpKQogICAgICAoKy1wYXJlbnMtZm4pKQogICAgKHdo ZW4gdnItdGltZXIKICAgICAgKHNldHEgdGltZXItaWRsZS1saXN0IChkZWxxIHZyLXRpbWVyIHRp bWVyLWlkbGUtbGlzdCkpCiAgICAgIChzZXRxIHZyLXRpbWVyIG5pbCkpCiAgICAobWMtYWN0aXZh dGUtY3Jvc3NoYWlycyAoc2VsZWN0ZWQtd2luZG93KSkpKQoKKGRlZnVuICstcmVkcmF3LWZvcnRo d2l0aCAoKQoiRm9yY2UgYm90aCBydWxlcyB0byBiZSByZWRyYXduLiIKICAoKy1kcmF3LWhvcml6 b250YWwtcnVsZXIgJ2ZvcmNlKSkKCihkZWZ1biArLWRyYXctaG9yaXpvbnRhbC1ydWxlciAoJm9w dGlvbmFsIGZvcmNlKQogICh3aGVuICstbW9kZQogICAgKHNldHEtbG9jYWwgZmFjZS1yZW1hcHBp bmctYWxpc3QgJygoKy1vdmVybGF5LWFycm93LWZhY2UgKy1sZWZ0LWZyaW5nZS1jdXJzb3ItYWx0 LW9uZS1mYWNlKSkpCiAgICA7OzsgVGhlcmUgaXMgYSBzdWJzdGFudGlhbCBzbG93LWRvd24gd2hl biBzZXR0aW5nIHRoZSBvdmVybGF5IGFycm93IGV2ZXJ5CiAgICA7OzsgY29tbWFuZCBsb29wIHdo ZW4gdGhlIGJ1ZmZlciBpcyBkaXNwbGF5ZWQgaW4gbW9yZSB0aGFuIG9uZSB3aW5kb3csCiAgICA7 OzsgZXNwZWNpYWxseSB3aGVuIGluIGRpZmZlcmVudCBmcmFtZXMuICBUaGlzIGNhbiBiZSB2ZXJp ZmllZCBieSByZWR1Y2luZwogICAgOzs7IHRoZSBudW1iZXIgb2Ygd2luZG93cyB0byBqdXN0IHRo ZSBvbmUgZGlzcGxheWluZyB0aGUgb3ZlcmxheSBhcnJvdywKICAgIDs7OyBhbmQgdGhlIHNwZWVk IHJldHVybnMgdG8gYW4gYWNjZXB0YWJsZSBsZXZlbC4gYGJzZXRfcmVkaXNwbGF5JyBjYWxscwog ICAgOzs7IGByZWRpc3BsYXlfb3RoZXJfd2luZG93cycgaW4gdGhhdCBzaXR1YXRpb24sIGFuZCB0 aGF0IHNsb3dzIHVzIGRvd24uCiAgICAoaWYgKG5vdCAoYW5kIChlb2JwKSAoYm9scCkpKQogICAg ICAoc2V0cSBvdmVybGF5LWFycm93LXBvc2l0aW9uIChjb3B5LW1hcmtlciAobGluZS1iZWdpbm5p bmctcG9zaXRpb24pKSkKICAgICAgKHNldHEgb3ZlcmxheS1hcnJvdy1wb3NpdGlvbiBuaWwpKQog ICAgKHdoZW4gdnItdGltZXIKICAgICAgKHNldHEgdGltZXItaWRsZS1saXN0IChkZWxxIHZyLXRp bWVyIHRpbWVyLWlkbGUtbGlzdCkpCiAgICAgIChzZXRxIHZyLXRpbWVyIG5pbCkpCiAgICAodW5s ZXNzIChtZW1xIHRoaXMtY29tbWFuZCAnKG13aGVlbC1zY3JvbGwpKQogICAgICAoKy1kZWxldGUt cGFyZW5zLW92ZXJsYXlzKSkKICAgIChpZiBmb3JjZQogICAgICAocHJvZ24KICAgICAgICAoKy1w YXJlbnMtZm4pCiAgICAgICAgKG1jLWFjdGl2YXRlLWNyb3NzaGFpcnMgKHNlbGVjdGVkLXdpbmRv dykpKQogICAgICAgIChzZXRxIHZyLXRpbWVyIChydW4td2l0aC1pZGxlLXRpbWVyIDAuNSBuaWwg IycrLXRpbWVyLWZuKSkpKSkKCihkZWZpbmUtbWlub3ItbW9kZSArLW1vZGUKIk1pbm9yIG1vZGUg Zm9yIGRpc3BsYXlpbmcgYSBob3Jpem9udGFsIHJ1bGVyLiIKICA6aW5pdC12YWx1ZSBuaWwKICA6 bGlnaHRlciAiICsiCiAgOmtleW1hcCBuaWwKICA6Z2xvYmFsIG5pbAogIDpncm91cCAnKy1tb2Rl CiAgKGNvbmQKICAgICgrLW1vZGUKICAgICAgKHNldHEgY3Jvc3NoYWlycyB0KQogICAgICA7Ozsg UkVNSU5ERVI6ICBUaGUgdXNlciBjYW4gc3VwcHJlc3MgZWl0aGVyIG9yIGJvdGggb2YgdGhlIHJ1 bGVyczoKICAgICAgOzsgKHNldHEgY3Jvc3NoYWlycy1ob3Jpem9udGFsLXJ1bGVyIG5pbCkKICAg ICAgOzsgKHNldHEgY3Jvc3NoYWlycy12ZXJ0aWNhbC1ydWxlciBuaWwpCiAgICAgIChzZXQgKG1h a2UtbG9jYWwtdmFyaWFibGUgJystLXNhdmVkLXN0YXRlKSBuaWwpCiAgICAgIDs7IFNhdmUgdGhl IGxvY2FsIHZhbHVlcyBvZiBzb21lIHZhcmlhYmxlcywgdG8gYmUgcmVzdG9yZWQgaWYgdmwtbW9k ZSBpcyB0dXJuZWQgb2ZmLgogICAgICAoZG9saXN0ICh2YXIgJygKICAgICAgICAgICAgICAgICAg ICAgIHRhYi13aWR0aAogICAgICAgICAgICAgICAgICAgICAgYnVmZmVyLWRpc3BsYXktdGFibGUK ICAgICAgICAgICAgICAgICAgICAgIGxpbmUtbW92ZS12aXN1YWwKICAgICAgICAgICAgICAgICAg ICAgIHRydW5jYXRlLXBhcnRpYWwtd2lkdGgtd2luZG93cwogICAgICAgICAgICAgICAgICAgICAg dHJ1bmNhdGUtbGluZXMKICAgICAgICAgICAgICAgICAgICAgIHdvcmQtd3JhcAogICAgICAgICAg ICAgICAgICAgICAgZnJpbmdlLWluZGljYXRvci1hbGlzdCkpCiAgICAgICAgKHdoZW4gKGxvY2Fs LXZhcmlhYmxlLXAgdmFyKQogICAgICAgICAgKHB1c2ggKGNvbnMgdmFyIChzeW1ib2wtdmFsdWUg dmFyKSkgKy0tc2F2ZWQtc3RhdGUpKSkKICAgICAgKHNldHEgZGlzcGxheS1saW5lLW51bWJlcnMg dCkKICAgICAgKHNldHEtbG9jYWwgYXV0by1oc2Nyb2xsLW1vZGUgJ2N1cnJlbnQtbGluZSkKICAg ICAgKHNldHEtbG9jYWwgaHNjcm9sbC1zdGVwIDUpCiAgICAgIChzZXRxIHRhYi13aWR0aCAyKQog ICAgICAoc2V0cSBidWZmZXItZGlzcGxheS10YWJsZSArLWJ1ZmZlci1kaXNwbGF5LXRhYmxlKQog ICAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICdsaW5lLW1vdmUtdmlzdWFsKSB0KQogICAg ICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlICd0cnVuY2F0ZS1wYXJ0aWFsLXdpZHRoLXdpbmRv d3MpIG5pbCkKICAgICAgKHNldHEgdHJ1bmNhdGUtbGluZXMgbmlsKQogICAgICAoc2V0cSB3b3Jk LXdyYXAgdCkKICAgICAgKHNldHEgaW5kaWNhdGUtZW1wdHktbGluZXMgdCkKICAgICAgKHNldHEg aW5kaWNhdGUtYnVmZmVyLWJvdW5kYXJpZXMgJ2xlZnQpCiAgICAgIChzZXRxIGZyaW5nZS1pbmRp Y2F0b3ItYWxpc3QgJygKICAgICAgICAodHJ1bmNhdGlvbiAuICgrLWZyaW5nZS1sZWZ0LWFycm93 ICstZnJpbmdlLXJpZ2h0LWFycm93KSkKICAgICAgICAoY29udGludWF0aW9uIC4gKCstZnJpbmdl LWxlZnQtY3VybHktYXJyb3cgKy1iYWNrc2xhc2gpKQogICAgICAgIChvdmVybGF5LWFycm93IC4g Ky1mcmluZ2UtcmlnaHQtdHJpYW5nbGUpCiAgICAgICAgKHVwIC4gKy1mcmluZ2UtdXAtYXJyb3cp CiAgICAgICAgKGRvd24gLiArLWZyaW5nZS1kb3duLWFycm93KQogICAgICAgICh0b3AgLiArLWZy aW5nZS10b3AtbGVmdC1hbmdsZSkKICAgICAgICAoYm90dG9tIC4gKy1mcmluZ2UtYm90dG9tLXJp Z2h0LWFuZ2xlKQogICAgICAgICh0b3AtYm90dG9tIC4gKCstZnJpbmdlLWxlZnQtYnJhY2tldAog ICAgICAgICAgICAgICAgICAgICAgICstZnJpbmdlLXJpZ2h0LWJyYWNrZXQKICAgICAgICAgICAg ICAgICAgICAgICArLWZyaW5nZS10b3AtcmlnaHQtYW5nbGUKICAgICAgICAgICAgICAgICAgICAg ICArLWZyaW5nZS10b3AtbGVmdC1hbmdsZSkpCiAgICAgICAgKGVtcHR5LWxpbmUgLiArLWZyaW5n ZS1lbXB0eS1saW5lKQogICAgICAgICh1bmtub3duIC4gKy1mcmluZ2UtcXVlc3Rpb24tbWFyaykp KQogICAgICA7OzsgUkVNQVAgREVGQVVMVCBCRUhBVklPUiAoaWYgdGhlIHVzZXIgd2FudHMgc29t ZXRoaW5nIGRpZmZlcmVudCkuCiAgICAgIChzZXRxIGZyaW5nZS1jdXJzb3ItYWxpc3QgJygoYm94 IC4gKy1mcmluZ2UtbGVmdC10cmlhbmdsZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChob2xsb3cgLiArLWhvbGxvdy1yZWN0YW5nbGUpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoYmFyIC4gKy12ZXJ0aWNhbC1iYXIpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoaGJhciAuICstZnJpbmdlLWhvcml6b250YWwtYmFyKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKGhvbGxvdy1zbWFsbCAuICstZnJpbmdlLWhvbGxvdy1zcXVh cmUpKSkKICAgICAgKHNldHEgdGFiLXN0b3AtbGlzdCAobnVtYmVyLXNlcXVlbmNlIDAgMTAwMCAy KSkKICAgICAgKHNldHEgZmlsbC1jb2x1bW4gODApCiAgICAgIChhZGQtaG9vayAncG9zdC1jb21t YW5kLWhvb2sgJystZHJhdy1ob3Jpem9udGFsLXJ1bGVyICdhcHBlbmQgJ2xvY2FsKQogICAgICAo YWRkLWhvb2sgJ3dpbmRvdy1jb25maWd1cmF0aW9uLWNoYW5nZS1ob29rICcrLXJlZHJhdy1mb3J0 aHdpdGggbmlsICdsb2NhbCkKICAgICAgKGFkZC1ob29rICdjaGFuZ2UtbWFqb3ItbW9kZS1ob29r ICd0dXJuLW9mZi0rLW1vZGUgbmlsICdsb2NhbCkKICAgICAgKHdoZW4gKGNhbGxlZC1pbnRlcmFj dGl2ZWx5LXAgJ2FueSkKICAgICAgICAobWVzc2FnZSAiVHVybmVkIE9OIGArLW1vZGUnLiIpKSkK ICAgICh0CiAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdjcm9zc2hhaXJzKQogICAgICAoa2ls bC1sb2NhbC12YXJpYWJsZSAnZGlzcGxheS1saW5lLW51bWJlcnMpCiAgICAgIChraWxsLWxvY2Fs LXZhcmlhYmxlICdkaXNwbGF5LWxpbmUtbnVtYmVycy13aWR0aCkKICAgICAgKGtpbGwtbG9jYWwt dmFyaWFibGUgJ21jLWdseXBoLWxpc3QpCiAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdtYy1n bHlwaGxlc3MtbGlzdCkKICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ3RhYi13aWR0aCkKICAg ICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2J1ZmZlci1kaXNwbGF5LXRhYmxlKQogICAgICAoa2ls bC1sb2NhbC12YXJpYWJsZSAnbGluZS1tb3ZlLXZpc3VhbCkKICAgICAgKGtpbGwtbG9jYWwtdmFy aWFibGUgJ3RydW5jYXRlLXBhcnRpYWwtd2lkdGgtd2luZG93cykKICAgICAgKGtpbGwtbG9jYWwt dmFyaWFibGUgJ3RydW5jYXRlLWxpbmVzKQogICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnd29y ZC13cmFwKQogICAgICAoa2lsbC1sb2NhbC12YXJpYWJsZSAnaW5kaWNhdGUtZW1wdHktbGluZXMp CiAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICdpbmRpY2F0ZS1idWZmZXItYm91bmRhcmllcykK ICAgICAgKGtpbGwtbG9jYWwtdmFyaWFibGUgJ2ZyaW5nZS1pbmRpY2F0b3ItYWxpc3QpCiAgICAg IChraWxsLWxvY2FsLXZhcmlhYmxlICdmcmluZ2UtY3Vyc29yLWFsaXN0KQogICAgICAoZG9saXN0 IChzYXZlZCArLS1zYXZlZC1zdGF0ZSkKICAgICAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxl IChjYXIgc2F2ZWQpKSAoY2RyIHNhdmVkKSkpCiAgICAgIChraWxsLWxvY2FsLXZhcmlhYmxlICcr LS1zYXZlZC1zdGF0ZSkKICAgICAgKHNldHEtbG9jYWwgZmFjZS1yZW1hcHBpbmctYWxpc3Qgbmls KQogICAgICAoKy1kZWxldGUtcGFyZW5zLW92ZXJsYXlzKQogICAgICAocmVtb3ZlLWhvb2sgJ3Bv c3QtY29tbWFuZC1ob29rICcrLWRyYXctaG9yaXpvbnRhbC1ydWxlciAnbG9jYWwpCiAgICAgIChy ZW1vdmUtaG9vayAnd2luZG93LWNvbmZpZ3VyYXRpb24tY2hhbmdlLWhvb2sgJystcmVkcmF3LWZv cnRod2l0aCAnbG9jYWwpCiAgICAgIChyZW1vdmUtaG9vayAnY2hhbmdlLW1ham9yLW1vZGUtaG9v ayAndHVybi1vZmYtKy1tb2RlICdsb2NhbCkKICAgICAgKHdoZW4gdnItdGltZXIKICAgICAgICAo c2V0cSB0aW1lci1pZGxlLWxpc3QgKGRlbHEgdnItdGltZXIgdGltZXItaWRsZS1saXN0KSkKICAg ICAgICAoc2V0cSB2ci10aW1lciBuaWwpKQogICAgICAoc2V0cSBvdmVybGF5LWFycm93LXBvc2l0 aW9uIG5pbCkKICAgICAgKHdoZW4gKGNhbGxlZC1pbnRlcmFjdGl2ZWx5LXAgJ2FueSkKICAgICAg ICAobWVzc2FnZSAiVHVybmVkIE9GRiBgKy1tb2RlJy4iKSkpKSkKCihkZWZ1biB0dXJuLW9mZi0r LW1vZGUgKCkKICAoKy1tb2RlIC0xKSkKCjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OwoKKGRlZnVu ICstcGFyZW5zLWZuICgpCiJEb2Mtc3RyaW5nLiIKICAobGV0KiAoKG9wb2ludCAocG9pbnQpKQog ICAgICAgICAoZnJvbQogICAgICAgICAgIChjb25kCiAgICAgICAgICAgICAoKG1lbXEgbWFqb3It bW9kZSAnKGMtbW9kZSBvYmpjLW1vZGUpKQogICAgICAgICAgICAgICAgKGNvbmRpdGlvbi1jYXNl IG5pbAogICAgICAgICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgICAgICAgICAgICAg ICAoYy1iZWdpbm5pbmctb2YtZGVmdW4pCiAgICAgICAgICAgICAgICAgICAgKHBvaW50KSkKICAg ICAgICAgICAgICAgICAgKGVycm9yIChwb2ludC1taW4pKSkpCiAgICAgICAgICAgICAoKGVxIG1h am9yLW1vZGUgJ2VsaXNwLW1vZGUpCiAgICAgICAgICAgICAgICAoY29uZGl0aW9uLWNhc2Ugbmls CiAgICAgICAgICAgICAgICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICAgICAgICAgICAgICAgIChi ZWdpbm5pbmctb2YtZGVmdW4pCiAgICAgICAgICAgICAgICAgICAgKHBvaW50KSkKICAgICAgICAg ICAgICAgICAgKHBvaW50LW1pbikpKQogICAgICAgICAgICAgKHQKICAgICAgICAgICAgICAgICht YXggKHBvaW50LW1pbikgKC0gb3BvaW50IDIwMDApKSkpKQogICAgICAgICAod2luIChzZWxlY3Rl ZC13aW5kb3cpKQogICAgICAgICAoaSAwKQogICAgICAgICAocHJlY2VkaW5nLWNoYXIgKHByZWNl ZGluZy1jaGFyKSkKICAgICAgICAgKG9jaGFyIChjaGFyLWFmdGVyIG9wb2ludCkpCiAgICAgICAg IChwb3MxCiAgICAgICAgICAgKGNvbmQKICAgICAgICAgICAgICgoYW5kIG9jaGFyCiAgICAgICAg ICAgICAgICAgICAob3IgOzs7IChjaGFyLXRvLXN0cmluZyA0MCkgPT4gb3BlbmluZyBwYXJlbnRo ZXNpcwogICAgICAgICAgICAgICAgICAgICAgICg9IG9jaGFyIDQwKQogICAgICAgICAgICAgICAg ICAgICAgIDs7OyAoY2hhci10by1zdHJpbmcgOTEpID0+IG9wZW5pbmcgc3F1YXJlIGJyYWNrZXQK ICAgICAgICAgICAgICAgICAgICAgICAoPSBvY2hhciA5MSkKICAgICAgICAgICAgICAgICAgICAg ICA7OzsgKGNoYXItdG8tc3RyaW5nIDEyMykgPT4gb3BlbmluZyB3YXZ5IGJyYWNrZXQKICAgICAg ICAgICAgICAgICAgICAgICAoPSBvY2hhciAxMjMpKSkKICAgICAgICAgICAgICAgIChtaW4gKDEr IG9wb2ludCkgKHBvaW50LW1heCkpKQogICAgICAgICAgICAgKChvciA7OzsgKGNoYXItdG8tc3Ry aW5nIDQxKSA9PiBjbG9zaW5nIHBhcmVudGhlc2lzCiAgICAgICAgICAgICAgICAgICg9IHByZWNl ZGluZy1jaGFyIDQxKQogICAgICAgICAgICAgICAgICA7OzsgKGNoYXItdG8tc3RyaW5nIDkzKSA9 PiBjbG9zaW5nIHNxdWFyZSBicmFja2V0CiAgICAgICAgICAgICAgICAgICg9IHByZWNlZGluZy1j aGFyIDkzKQogICAgICAgICAgICAgICAgICA7OzsgKGNoYXItdG8tc3RyaW5nIDEyNSkgPT4gY2xv c2luZyB3YXZ5IGJyYWNrZXQKICAgICAgICAgICAgICAgICAgKD0gcHJlY2VkaW5nLWNoYXIgMTI1 KSkKICAgICAgICAgICAgICAgIChtYXggKHBvaW50LW1pbikgKDEtIG9wb2ludCkpKQogICAgICAg ICAgICAgKHQKICAgICAgICAgICAgICAgIG9wb2ludCkpKQogICAgICAgICBwb3MyCiAgICAgICAg IHNlbGVjdGVkLWZhY2UpCiAgICAoc2F2ZS1leGN1cnNpb24KICAgICAgKGNvbmRpdGlvbi1jYXNl IG5pbAogICAgICAgICh3aGlsZSAoc2V0cSBwb3MxIChudGggMSAocGFyc2UtcGFydGlhbC1zZXhw IGZyb20gcG9zMSkpKQogICAgICAgICAgKHNldHEgcG9zMiAoc2Nhbi1zZXhwcyBwb3MxIDEpKQog ICAgICAgICAgKGlmICg9IGkgMTApCiAgICAgICAgICAgIChzZXRxIGkgMSkKICAgICAgICAgICAg KGluY2YgaSkpCiAgICAgICAgICAoc2V0cSBzZWxlY3RlZC1mYWNlIChjb25kCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKCg9IGkgMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICcrLXBhcmVucy1vbmUtZmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoKD0gaSAyKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLXR3 by1mYWNlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDMpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAnKy1wYXJlbnMtdGhyZWUtZmFjZSkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKD0gaSA0KQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJystcGFyZW5zLWZvdXItZmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAoKD0gaSA1KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5z LWZpdmUtZmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKD0gaSA2KQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFyZW5zLXNpeC1mYWNlKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICgoPSBpIDcpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAnKy1wYXJlbnMtc2V2ZW4tZmFjZSkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoKD0gaSA4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJystcGFy ZW5zLWVpZ2h0LWZhY2UpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCg9IGkgOSkK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcrLXBhcmVucy1uaW5lLWZhY2UpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCg9IGkgMTApCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAnKy1wYXJlbnMtdGVuLWZhY2UpKSkKICAgICAgICAgIChsZXQgKChv diAobWFrZS1vdmVybGF5IHBvczEgKDErIHBvczEpKSkpCiAgICAgICAgICAgIChvdmVybGF5LXB1 dCBvdiAnd2luZG93IHdpbikKICAgICAgICAgICAgKG92ZXJsYXktcHV0IG92ICdmYWNlIHNlbGVj dGVkLWZhY2UpKQogICAgICAgICAgKHdoZW4gcG9zMgogICAgICAgICAgICAobGV0ICgob3YgKG1h a2Utb3ZlcmxheSAoMS0gcG9zMikgcG9zMikpKQogICAgICAgICAgICAgIChvdmVybGF5LXB1dCBv diAnd2luZG93IHdpbikKICAgICAgICAgICAgICAob3ZlcmxheS1wdXQgb3YgJ2ZhY2Ugc2VsZWN0 ZWQtZmFjZSkpKSkKICAgICAgICAoZXJyb3IgbmlsKSkpCiAgICAoc2V0cSArLXBhcmVucy1vdmVy bGF5cy1leGlzdC1wIHQpKSkKCihkZWZ1biArLXJlbW92ZS1vdmVybGF5cyAoYmVnIGVuZCBuYW1l IHZhbCkKIlJlbW92ZSB0aGUgb3ZlcmxheXMgdGhhdCBhcmUgYGVxdWFsLWluY2x1ZGluZy1wcm9w ZXJ0aWVzYC4KSW5jbHVkZXMgYSB1bmlxdWUgc2l0dWF0aW9uIHdoZW4gYW4gb3ZlcmxheSB3aXRo IGFuIGAnYWZ0ZXItc3RyaW5nYCBwcm9wZXJ0eQppcyBhdCB0aGUgdmVyeSBlbmQgb2YgYSBuYXJy b3dlZC1idWZmZXIuIgogIChsZXQqICgKICAgICAgKHBvaW50LW1heCAocG9pbnQtbWF4KSkKICAg ICAgKHBvaW50LW1pbiAocG9pbnQtbWluKSkKICAgICAgKG5hcnJvd2VkLXAgKGJ1ZmZlci1uYXJy b3dlZC1wKSkKICAgICAgKGJlZyAoaWYgYmVnIGJlZyBwb2ludC1taW4pKQogICAgICAoZW5kCiAg ICAgICAgKGNvbmQKICAgICAgICAgICgoYW5kCiAgICAgICAgICAgICAgKG5vdCBuYXJyb3dlZC1w KQogICAgICAgICAgICAgIGVuZCkKICAgICAgICAgICAgZW5kKQogICAgICAgICAgKChhbmQKICAg ICAgICAgICAgICAobm90IG5hcnJvd2VkLXApCiAgICAgICAgICAgICAgKG51bGwgZW5kKSkKICAg ICAgICAgICAgcG9pbnQtbWF4KQogICAgICAgICAgKChhbmQKICAgICAgICAgICAgICBuYXJyb3dl ZC1wCiAgICAgICAgICAgICAgZW5kCiAgICAgICAgICAgICAgKDwgZW5kIHBvaW50LW1heCkpCiAg ICAgICAgICAgIGVuZCkKICAgICAgICAgICgoYW5kCiAgICAgICAgICAgICAgbmFycm93ZWQtcAog ICAgICAgICAgICAgIGVuZAogICAgICAgICAgICAgICg9IGVuZCBwb2ludC1tYXgpKQogICAgICAg ICAgICAoMSsgZW5kKSkKICAgICAgICAgICgoYW5kCiAgICAgICAgICAgICAgbmFycm93ZWQtcAog ICAgICAgICAgICAgIChudWxsIGVuZCkpCiAgICAgICAgICAgICgxKyBwb2ludC1tYXgpKSApKQog ICAgICAob3ZlcmxheXMKICAgICAgICAocHJvZ24KICAgICAgICAgIChvdmVybGF5LXJlY2VudGVy IGVuZCkKICAgICAgICAgIChvdmVybGF5cy1pbiBiZWcgZW5kKSkpICkKICAgICh3aGVuIChhbmQg YmVnIGVuZCBuYW1lIHZhbCkKICAgICAgKGRvbGlzdCAobyBvdmVybGF5cykKICAgICAgICAoY29u ZAogICAgICAgICAgKChhbmQKICAgICAgICAgICAgICAgIChlcSBuYW1lICdmYWNlKQogICAgICAg ICAgICAgICAgKGVxIChvdmVybGF5LWdldCBvIG5hbWUpIHZhbCkpCiAgICAgICAgICAgIDs7IEVp dGhlciBwdXNoIHRoaXMgb3ZlcmxheSBvdXRzaWRlIGJlZy4uLmVuZAogICAgICAgICAgICA7OyBv ciBzcGxpdCBpdCB0byBleGNsdWRlIGJlZy4uLmVuZAogICAgICAgICAgICA7OyBvciBkZWxldGUg aXQgZW50aXJlbHkgKGlmIGl0IGlzIGNvbnRhaW5lZCBpbiBiZWcuLi5lbmQpLgogICAgICAgICAg ICAoaWYgKDwgKG92ZXJsYXktc3RhcnQgbykgYmVnKQogICAgICAgICAgICAgICAgKGlmICg+IChv dmVybGF5LWVuZCBvKSBlbmQpCiAgICAgICAgICAgICAgKHByb2duCiAgICAgICAgICAgICAgICAo bW92ZS1vdmVybGF5IChjb3B5LW92ZXJsYXkgbykKICAgICAgICAgICAgICAgICAgKG92ZXJsYXkt c3RhcnQgbykgYmVnKQogICAgICAgICAgICAgICAgKG1vdmUtb3ZlcmxheSBvIGVuZCAob3Zlcmxh eS1lbmQgbykpKQogICAgICAgICAgICAgICAgICAobW92ZS1vdmVybGF5IG8gKG92ZXJsYXktc3Rh cnQgbykgYmVnKSkKICAgICAgICAgICAgICAoaWYgKD4gKG92ZXJsYXktZW5kIG8pIGVuZCkKICAg ICAgICAgICAgICAgICAgKG1vdmUtb3ZlcmxheSBvIGVuZCAob3ZlcmxheS1lbmQgbykpCiAgICAg ICAgICAgICAgICAoZGVsZXRlLW92ZXJsYXkgbykpKSkKICAgICAgICAgICgoYW5kCiAgICAgICAg ICAgICAgICAobm90IChlcSBuYW1lICdmYWNlKSkKICAgICAgICAgICAgICAgIChlcXVhbC1pbmNs dWRpbmctcHJvcGVydGllcyAob3ZlcmxheS1nZXQgbyBuYW1lKSB2YWwpKQogICAgICAgICAgICAo ZGVsZXRlLW92ZXJsYXkgbykpKSkpKSkKCihkZWZ1biArLWRlbGV0ZS1wYXJlbnMtb3ZlcmxheXMg KCkKICAod2hlbiArLXBhcmVucy1vdmVybGF5cy1leGlzdC1wCiAgICAoZG9saXN0IChmYWNlICco CiAgICAgICAgKy1wYXJlbnMtb25lLWZhY2UKICAgICAgICArLXBhcmVucy10d28tZmFjZQogICAg ICAgICstcGFyZW5zLXRocmVlLWZhY2UKICAgICAgICArLXBhcmVucy1mb3VyLWZhY2UKICAgICAg ICArLXBhcmVucy1maXZlLWZhY2UKICAgICAgICArLXBhcmVucy1zaXgtZmFjZQogICAgICAgICst cGFyZW5zLXNldmVuLWZhY2UKICAgICAgICArLXBhcmVucy1laWdodC1mYWNlCiAgICAgICAgKy1w YXJlbnMtbmluZS1mYWNlCiAgICAgICAgKy1wYXJlbnMtdGVuLWZhY2UpKQogICAgICAoKy1yZW1v dmUtb3ZlcmxheXMgbmlsIG5pbCAnZmFjZSBmYWNlKSkKICAgIChzZXRxICstcGFyZW5zLW92ZXJs YXlzLWV4aXN0LXAgbmlsKSkpCgo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKOzsgZmFjZXMKCihk ZWZncm91cCArLW1vZGUgbmlsCiAgIkZhY2VzIGZvciB0aGUgdmVydGljYWwgcnVsZXIuIgogIDpn cm91cCAnY29udmVuaWVuY2UpCgooZGVmZmFjZSArLWZvcm0tZmVlZC1mYWNlCiAgKGNvbmQKICAg ICgoZXEgc3lzdGVtLXR5cGUgJ2RhcndpbikKICAgICAgJygodCAoOmZvcmVncm91bmQgIm1hZ2Vu dGEiKSkpKQogICAgKChlcSBzeXN0ZW0tdHlwZSAnd2luZG93cy1udCkKICAgICAgJygodCAoOmZv cmVncm91bmQgIm1hZ2VudGEiKSkpKSkKICAiRmFjZSBmb3IgYCstZm9ybS1mZWVkLWZhY2UnLiIK ICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstbmV3bGluZS1mYWNlCiAgJygodCAoOmZvcmVn cm91bmQgIiM1NTU1NTUiKSkpCiAgIkZhY2UgZm9yIGArLW5ld2xpbmUtZmFjZScuIgogIDpncm91 cCAnKy1tb2RlKQoKKGRlZmZhY2UgKy1zcGFjZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgIkRh cmtSZWQiKSkpCiAgIkZhY2UgZm9yIGArLXNwYWNlLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkK CihkZWZmYWNlICstdGFiLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiY3lhbiIpKSkKICAiRmFj ZSBmb3IgYCstdGFiLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstdGFiLXNw YWNlci1mYWNlCiAgJygodCAoOmJhY2tncm91bmQgImdyZXkyNSIpKSkKICAiRmFjZSBmb3IgYCst dGFiLXNwYWNlci1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSArLXBhcmVucy1v bmUtZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJtYWdlbnRhIikpKQogICJGYWNlIGZvciBgKy1w YXJlbnMtb25lLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstcGFyZW5zLXR3 by1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgInJlZCIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5z LXR3by1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSArLXBhcmVucy10aHJlZS1m YWNlCiAgJygodCAoOmZvcmVncm91bmQgInllbGxvdyIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5z LXRocmVlLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstcGFyZW5zLWZvdXIt ZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJncmVlbiIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5z LWZvdXItZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKGRlZmZhY2UgKy1wYXJlbnMtZml2ZS1m YWNlCiAgJygodCAoOmZvcmVncm91bmQgImN5YW4iKSkpCiAgIkZhY2UgZm9yIGArLXBhcmVucy1m aXZlLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstcGFyZW5zLXNpeC1mYWNl CiAgJygodCAoOmZvcmVncm91bmQgIm9yYW5nZSIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5zLXNp eC1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSArLXBhcmVucy1zZXZlbi1mYWNl CiAgJygodCAoOmZvcmVncm91bmQgInB1cnBsZSIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5zLXNl dmVuLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstcGFyZW5zLWVpZ2h0LWZh Y2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiYmx1ZSIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5zLWVp Z2h0LWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstcGFyZW5zLW5pbmUtZmFj ZQogICcoKHQgKDpmb3JlZ3JvdW5kICJicm93biIpKSkKICAiRmFjZSBmb3IgYCstcGFyZW5zLW5p bmUtZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKGRlZmZhY2UgKy1wYXJlbnMtdGVuLWZhY2UK ICAnKCh0ICg6Zm9yZWdyb3VuZCAid2hpdGUiKSkpCiAgIkZhY2UgZm9yIGArLXBhcmVucy10ZW4t ZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Cjs7ICB2 YXJpYWJsZXMKCihkZWZ2YXIgKy0tc2F2ZWQtc3RhdGUgbmlsKQoKKGRlZnZhciArLWJ1ZmZlci1k aXNwbGF5LXRhYmxlCiAgKGxldCogKAogICAgICAoZGlzcGxheS10YWJsZSAobWFrZS1kaXNwbGF5 LXRhYmxlKSkKICAgICAgKGZmLWNoYXIKICAgICAgICAoY29uZAogICAgICAgICAgKChlcSBzeXN0 ZW0tdHlwZSAnZGFyd2luKQogICAgICAgICAgICA/XFUwMDAxRDRENSkKICAgICAgICAgICgoZXEg c3lzdGVtLXR5cGUgJ3dpbmRvd3MtbnQpCiAgICAgICAgICAgID9cdTAwNDYpKSkKICAgICAgKGds eXBoLWZvcm0tZmVlZCAobWFrZS1nbHlwaC1jb2RlIGZmLWNoYXIgJystZm9ybS1mZWVkLWZhY2Up KQogICAgICAoZ2x5cGgtcGlsY3JvdyAobWFrZS1nbHlwaC1jb2RlID9cdTAwQjYgJystbmV3bGlu ZS1mYWNlKSkKICAgICAgKGdseXBoLXNwYWNlIChtYWtlLWdseXBoLWNvZGUgP1x1MDBCNyAnKy1z cGFjZS1mYWNlKSkKICAgICAgKGdseXBoLXRhYiAobWFrZS1nbHlwaC1jb2RlID9cdTAwQkIgJyst dGFiLWZhY2UpKQogICAgICAoZ2x5cGgtdGFiLXNwYWNlciAobWFrZS1nbHlwaC1jb2RlID9cdCAn Ky10YWItc3BhY2VyLWZhY2UpKSkKICAgIChhc2V0IGRpc3BsYXktdGFibGUgP1xuIGBbLGdseXBo LXBpbGNyb3cgP1xuXSkKICAgIChhc2V0IGRpc3BsYXktdGFibGUgP1xmIGBbLGdseXBoLWZvcm0t ZmVlZF0pCiAgICA7OzsgbWluaW11bSB0YWItd2lkdGggaXMgYDJgCiAgICA7OyAoYXNldCBkaXNw bGF5LXRhYmxlID9cdCBgWyxnbHlwaC10YWIgP1x0XSkKICAgIChhc2V0IGRpc3BsYXktdGFibGUg P1x0IGBbLGdseXBoLXRhYiAsZ2x5cGgtdGFiLXNwYWNlcl0pCiAgICA7OzsgdGFiLXdpZHRoIGFs d2F5cyBlcXVhbHMgYDFgCiAgICA7OyAoYXNldCBkaXNwbGF5LXRhYmxlID9cdCBgWyxnbHlwaC10 YWJdKQogICAgKGFzZXQgZGlzcGxheS10YWJsZSA/XHMgYFssZ2x5cGgtc3BhY2VdKQogICAgZGlz cGxheS10YWJsZSkKICAiVGhlIGBidWZmZXItZGlzcGxheS10YWJsZScgdGhhdCBpcyB1c2VkIHdo ZW4gYCstbW9kZScgaXMgYWN0aXZlLiIpCgooZGVmdmFyIHZyLXRpbWVyIG5pbAoiVGltZXIgdXNl ZCB0byBoaWdobGlnaHQgY3VycmVudCBjb2x1bW4gd2hlbmV2ZXIgRW1hY3MgaXMgaWRsZS4iKQoK KGRlZnZhciArLXBhcmVucy1vdmVybGF5cy1leGlzdC1wIG5pbAoiU2ltcGxlIHRlc3QgdG8gc2Vl IHdoZXRoZXIgdGhlIHBhcmVucyBvdmVybGF5cyBoYXZlIGJlZW4gcGxhY2VkLgpUaGlzIGNvdWxk IGJlIGEgZGlmZmVyZW50IGtpbmQgb2YgdGVzdCAtLSBlLmcuLCBzY2FubmluZyBmb3IgdGhlCnBy ZXNlbmNlIG9mIHNwZWNpZmljIG92ZXJsYXlzLCBidXQgcGVyaGFwcyB0aGF0IGlzIG92ZXJraWxs LiIpCihtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnKy1wYXJlbnMtb3ZlcmxheXMtZXhpc3Qt cCkKCjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Owo7OyBmcmluZ2UgYml0bWFwcywgZnVuY3Rp b25zIGFuZCBmYWNlcy4KCihkZWZmYWNlICstdmVydGljYWwtYmFyLWZhY2UKICAnKCh0ICg6Zm9y ZWdyb3VuZCAiY3lhbiIpKSkKICAiRmFjZSBmb3IgYCstdmVydGljYWwtYmFyLWZhY2UnLiIKICA6 Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstZXZlbi1udW1iZXJlZC1jb2x1bW4tZmFjZQogICco KHQgKDpmb3JlZ3JvdW5kICJ5ZWxsb3ciKSkpCiAgIkZhY2UgZm9yIGArLWV2ZW4tbnVtYmVyZWQt Y29sdW1uLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihkZWZmYWNlICstb2RkLW51bWJlcmVk LWNvbHVtbi1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgInJlZCIpKSkKICAiRmFjZSBmb3IgYCst b2RkLW51bWJlcmVkLWNvbHVtbi1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSAr LWJleW9uZC1maWxsLWNvbHVtbi1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgImdyZWVuIikpKQog ICJGYWNlIGZvciBgKy1iZXlvbmQtZmlsbC1jb2x1bW4tZmFjZScuIgogIDpncm91cCAnKy1tb2Rl KQoKCihkZWZmYWNlICstb3ZlcmxheS1hcnJvdy1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgImdy ZWVuIikpKQogICJGYWNlIGZvciBgKy1vdmVybGF5LWFycm93LWZhY2UnLiIKICA6Z3JvdXAgJyst bW9kZSkKCihkZWZmYWNlICstbGVmdC1mcmluZ2UtY3Vyc29yLWFsdC1vbmUtZmFjZQogICcoKHQg KDpmb3JlZ3JvdW5kICJibHVlIikpKQogICJGYWNlIGZvciBgKy1sZWZ0LWZyaW5nZS1jdXJzb3It YWx0LW9uZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooZGVmZmFjZSArLWxlZnQtZnJpbmdl LWN1cnNvci1hbHQtdHdvLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAicmVkIikpKQogICJGYWNl IGZvciBgKy1sZWZ0LWZyaW5nZS1jdXJzb3ItYWx0LXR3by1mYWNlJy4iCiAgOmdyb3VwICcrLW1v ZGUpCgo7OzsgYG92ZXJsYXktYXJyb3ctYml0bWFwJyBpcyBhIHNwZWNpYWwgU1lNQk9MIGRlZmlu ZWQgaW4geGRpc3AuYy4KCjs7ICAoZGVmdmFyICstbGVmdC1mcmluZ2Utb3ZlcmxheS1wb3NpdGlv biBuaWwKOzsgICJUbyBiZSB1c2VkIHdpdGggdGhlIGZvbGxvd2luZyBleGFtcGxlOgo7OyAgICAo aWYgKG5vdCAoYW5kIChlb2JwKSAoYm9scCkpKQo7OyAgICAgIChzZXRxICstbGVmdC1mcmluZ2Ut b3ZlcmxheS1wb3NpdGlvbiAoY29weS1tYXJrZXIgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkp Cjs7ICAgICAgKHNldHEgKy1sZWZ0LWZyaW5nZS1vdmVybGF5LXBvc2l0aW9uICBuaWwpKQoKOzsg IChtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnKy1sZWZ0LWZyaW5nZS1vdmVybGF5LXBvc2l0 aW9uKQoKOzsgIChhZGQtdG8tbGlzdCAnb3ZlcmxheS1hcnJvdy12YXJpYWJsZS1saXN0ICcrLWxl ZnQtZnJpbmdlLW92ZXJsYXktcG9zaXRpb24pCgo7OyAgKHB1dCAnKy1sZWZ0LWZyaW5nZS1vdmVy bGF5LXBvc2l0aW9uICdvdmVybGF5LWFycm93LWJpdG1hcCAnKy1yaWdodC1hbmdsZSkKCihwdXQg J292ZXJsYXktYXJyb3ctcG9zaXRpb24gJ292ZXJsYXktYXJyb3ctYml0bWFwICcrLXNtaWxleS1m YWNlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystc21pbGV5LWZhY2UgJystb3ZlcmxheS1h cnJvdy1mYWNlKQoKKGRlZmZhY2UgKy1ob2xsb3ctcmVjdGFuZ2xlLWZhY2UKICAnKCh0ICg6Zm9y ZWdyb3VuZCAiY2hhcnRyZXVzZSIpKSkKICAiRmFjZSBmb3IgYCstaG9sbG93LXJlY3RhbmdsZS1m YWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1ob2xs b3ctcmVjdGFuZ2xlICcrLWhvbGxvdy1yZWN0YW5nbGUtZmFjZSkKCihkZWZmYWNlICstYmFja3Ns YXNoLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiZ3JleTI1IikpKQogICJGYWNlIGZvciBgKy1i YWNrc2xhc2gtZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZh Y2UgJystYmFja3NsYXNoICcrLWJhY2tzbGFzaC1mYWNlKQoKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Cgo7OyBBVVRIT1I6ICBOaWtvbGFqIFNjaHVtYWNoZXIgLS0gaHR0cHM6Ly9naXRodWIuY29t L25zY2h1bS9mcmluZ2UtaGVscGVyLmVsCihkZWZ1biArLWZyaW5nZS1oZWxwZXItZGVjaW1hbCAo JnJlc3Qgc3RyaW5ncykKIkNvbnZlcnQgU1RSSU5HUyBpbnRvIGEgdmVjdG9yIHVzYWJsZSBmb3Ig YGRlZmluZS1mcmluZ2UtYml0bWFwJy4KRWFjaCBzdHJpbmcgaW4gU1RSSU5HUyByZXByZXNlbnRz IGEgbGluZSBvZiB0aGUgZnJpbmdlIGJpdG1hcC4KUGVyaW9kcyAoLikgYXJlIGJhY2tncm91bmQt Y29sb3JlZCBwaXhlbDsgWHMgYXJlIGZvcmVncm91bmQtY29sb3JlZC4gVGhlCmZyaW5nZSBiaXRt YXAgYWx3YXlzIGlzIGFsaWduZWQgdG8gdGhlIHJpZ2h0LiBJZiB0aGUgZnJpbmdlIGhhcyBoYWxm CndpZHRoLCBvbmx5IHRoZSBsZWZ0IDQgcGl4ZWxzIG9mIGFuIDggcGl4ZWwgYml0bWFwIHdpbGwg YmUgc2hvd24uCkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgZGVmaW5lcyBhIGRpYWdv bmFsIGxpbmUuClwoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKXCJYWC4uLi4uLlwiClwiLi5YWC4u Li5cIgpcIi4uLi5YWC4uXCIKXCIuLi4uLi5YWFwiXCkiCiAgKHVubGVzcyAoY2RyIHN0cmluZ3Mp CiAgICAoc2V0cSBzdHJpbmdzIChzcGxpdC1zdHJpbmcgKGNhciBzdHJpbmdzKSAiXG4iKSkpCiAg KGFwcGx5ICd2ZWN0b3IKICAgIChtYXBjYXIKICAgICAgKGxhbWJkYSAoc3RyKQogICAgICAgIChs ZXQgKChudW0gMCkpCiAgICAgICAgICAoZG9saXN0IChjIChzdHJpbmctdG8tbGlzdCBzdHIpKQog ICAgICAgICAgICAoc2V0cSBudW0gKCsgKCogbnVtIDIpIChpZiAoZXEgYyA/LikgMCAxKSkpKQog ICAgICAgICAgbnVtKSkKICAgICAgc3RyaW5ncykpKQoKKGRlZnVuICstZnJpbmdlLWhlbHBlci1o ZXhhZGVjaW1hbCAoJnJlc3Qgc3RyaW5ncykKIkNvbnZlcnQgU1RSSU5HUyBpbnRvIGEgdmVjdG9y IHVzYWJsZSBmb3IgYGRlZmluZS1mcmluZ2UtYml0bWFwJy4KRWFjaCBzdHJpbmcgaW4gU1RSSU5H UyByZXByZXNlbnRzIGEgbGluZSBvZiB0aGUgZnJpbmdlIGJpdG1hcC4KUGVyaW9kcyAoLikgYXJl IGJhY2tncm91bmQtY29sb3JlZCBwaXhlbDsgWHMgYXJlIGZvcmVncm91bmQtY29sb3JlZC4gVGhl CmZyaW5nZSBiaXRtYXAgYWx3YXlzIGlzIGFsaWduZWQgdG8gdGhlIHJpZ2h0LiBJZiB0aGUgZnJp bmdlIGhhcyBoYWxmCndpZHRoLCBvbmx5IHRoZSBsZWZ0IDQgcGl4ZWxzIG9mIGFuIDggcGl4ZWwg Yml0bWFwIHdpbGwgYmUgc2hvd24uCkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvZGUgZGVm aW5lcyBhIGRpYWdvbmFsIGxpbmUuClwoKy1mcmluZ2UtaGVscGVyLWhleGFkZWNpbWFsClwiWFgu Li4uLi5cIgpcIi4uWFguLi4uXCIKXCIuLi4uWFguLlwiClwiLi4uLi4uWFhcIlwpIgogICh1bmxl c3MgKGNkciBzdHJpbmdzKQogICAgKHNldHEgc3RyaW5ncyAoc3BsaXQtc3RyaW5nIChjYXIgc3Ry aW5ncykgIlxuIikpKQogIChhcHBseSAndmVjdG9yCiAgICAobWFwY2FyCiAgICAgIChsYW1iZGEg KHN0cikKICAgICAgICAobGV0ICgobnVtIDApKQogICAgICAgICAgKGRvbGlzdCAoYyAoc3RyaW5n LXRvLWxpc3Qgc3RyKSkKICAgICAgICAgICAgKHNldHEgbnVtICgrICgqIG51bSAyKSAoaWYgKGVx IGMgPy4pIDAgMSkpKSkKICAgICAgICAgIChmb3JtYXQgIiUjLXgiIG51bSkpKQogICAgICBzdHJp bmdzKSkpCgo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAn Ky1mcmluZ2UtcXVlc3Rpb24tbWFyayAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKIi4ueHh4eC4u IgoiLnh4eHh4eC4iCiJ4eC4uLi54eCIKInh4Li4uLnh4IgoiLi4uLnh4Li4iCiIuLi54eC4uLiIK Ii4uLnh4Li4uIgoiLi4uLi4uLi4iCiIuLi54eC4uLiIKIi4uLnh4Li4uIikgbmlsIG5pbCAnY2Vu dGVyKQoKKGRlZmZhY2UgKy1mcmluZ2UtcXVlc3Rpb24tbWFyay1mYWNlCiAgJygodCAoOmZvcmVn cm91bmQgImdyZWVuIikpKQogICJGYWNlIGZvciBgKy1mcmluZ2UtcXVlc3Rpb24tbWFyay1mYWNl Jy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2Ut cXVlc3Rpb24tbWFyayAnKy1mcmluZ2UtcXVlc3Rpb24tbWFyay1mYWNlKQoKCihkZWZpbmUtZnJp bmdlLWJpdG1hcCAnKy1mcmluZ2UtZXhjbGFtYXRpb24tbWFyayAoKy1mcmluZ2UtaGVscGVyLWRl Y2ltYWwKIi4uLlhYLi4uIgoiLi4uWFguLi4iCiIuLi5YWC4uLiIKIi4uLlhYLi4uIgoiLi4uWFgu Li4iCiIuLi5YWC4uLiIKIi4uLlhYLi4uIgoiLi4uLi4uLi4iCiIuLi5YWC4uLiIKIi4uLlhYLi4u IikgbmlsIG5pbCAnY2VudGVyKQoKKGRlZmZhY2UgKy1mcmluZ2UtZXhjbGFtYXRpb24tbWFyay1m YWNlCiAgJygodCAoOmZvcmVncm91bmQgImN5YW4iKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5nZS1l eGNsYW1hdGlvbi1tYXJrLWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJp dG1hcC1mYWNlICcrLWZyaW5nZS1leGNsYW1hdGlvbi1tYXJrICcrLWZyaW5nZS1leGNsYW1hdGlv bi1tYXJrLWZhY2UpCgoKKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1sZWZ0LWFycm93 ICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLi4ueHguLi4iCiIuLnh4Li4uLiIKIi54eC4uLi4u IgoieHh4eHh4Li4iCiJ4eHh4eHguLiIKIi54eC4uLi4uIgoiLi54eC4uLi4iCiIuLi54eC4uLiIp IG5pbCBuaWwgJ2NlbnRlcikKCihkZWZmYWNlICstZnJpbmdlLWxlZnQtYXJyb3ctZmFjZQogICco KHQgKDpmb3JlZ3JvdW5kICJwdXJwbGUiKSkpCiAgIkZhY2UgZm9yIGArLWZyaW5nZS1sZWZ0LWFy cm93LWZhY2UnLiIKICA6Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcr LWZyaW5nZS1sZWZ0LWFycm93ICcrLWZyaW5nZS1sZWZ0LWFycm93LWZhY2UpCgoKKGRlZmluZS1m cmluZ2UtYml0bWFwICcrLWZyaW5nZS1yaWdodC1hcnJvdyAoKy1mcmluZ2UtaGVscGVyLWRlY2lt YWwKIi4uLnh4Li4uIgoiLi4uLnh4Li4iCiIuLi4uLnh4LiIKIi4ueHh4eHh4IgoiLi54eHh4eHgi CiIuLi4uLnh4LiIKIi4uLi54eC4uIgoiLi4ueHguLi4iKSBuaWwgbmlsICdjZW50ZXIpCgooZGVm ZmFjZSArLWZyaW5nZS1yaWdodC1hcnJvdy1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgIk9yYW5n ZVJlZCIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLXJpZ2h0LWFycm93LWZhY2UnLiIKICA6Z3Jv dXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1yaWdodC1hcnJv dyAnKy1mcmluZ2UtcmlnaHQtYXJyb3ctZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1iaXRtYXAgJyst ZnJpbmdlLXVwLWFycm93ICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLi4ueHguLi4iCiIuLnh4 eHguLiIKIi54eHh4eHguIgoieHh4eHh4eHgiCiIuLi54eC4uLiIKIi4uLnh4Li4uIgoiLi4ueHgu Li4iCiIuLi54eC4uLiIpIG5pbCBuaWwgJ3RvcCkKCihkZWZmYWNlICstZnJpbmdlLXVwLWFycm93 LWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiUm95YWxCbHVlIikpKQogICJGYWNlIGZvciBgKy1m cmluZ2UtdXAtYXJyb3ctZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKHNldC1mcmluZ2UtYml0 bWFwLWZhY2UgJystZnJpbmdlLXVwLWFycm93ICcrLWZyaW5nZS11cC1hcnJvdy1mYWNlKQoKCihk ZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtZG93bi1hcnJvdyAoKy1mcmluZ2UtaGVscGVy LWRlY2ltYWwKIi4uLnh4Li4uIgoiLi4ueHguLi4iCiIuLi54eC4uLiIKIi4uLnh4Li4uIgoieHh4 eHh4eHgiCiIueHh4eHh4LiIKIi4ueHh4eC4uIgoiLi4ueHguLi4iKSBuaWwgbmlsICdib3R0b20p CgooZGVmZmFjZSArLWZyaW5nZS1kb3duLWFycm93LWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAi Y3lhbiIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLWRvd24tYXJyb3ctZmFjZScuIgogIDpncm91 cCAnKy1tb2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLWRvd24tYXJyb3cg JystZnJpbmdlLWRvd24tYXJyb3ctZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJp bmdlLWxlZnQtY3VybHktYXJyb3cgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiIuLi54eHh4LiIK Ii4ueHh4eHguIgoiLnh4Li4uLi4iCiIueHh4Li54LiIKIi54eHh4eHguIgoiLi54eHh4eC4iCiIu Li54eHh4LiIKIi4ueHh4eHguIikgbmlsIG5pbCAnY2VudGVyKQoKKGRlZmZhY2UgKy1mcmluZ2Ut bGVmdC1jdXJseS1hcnJvdy1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgImdyZXkyNSIpKSkKICAi RmFjZSBmb3IgYCstZnJpbmdlLWxlZnQtY3VybHktYXJyb3ctZmFjZScuIgogIDpncm91cCAnKy1t b2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLWxlZnQtY3VybHktYXJyb3cg JystZnJpbmdlLWxlZnQtY3VybHktYXJyb3ctZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1iaXRtYXAg JystZnJpbmdlLXJpZ2h0LWN1cmx5LWFycm93ICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLnh4 eHguLi4iCiIueHh4eHguLiIKIi4uLi4ueHguIgoiLnguLnh4eC4iCiIueHh4eHh4LiIKIi54eHh4 eC4uIgoiLnh4eHguLi4iCiIueHh4eHguLiIpIG5pbCBuaWwgJ2NlbnRlcikKCihkZWZmYWNlICst ZnJpbmdlLXJpZ2h0LWN1cmx5LWFycm93LWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiIzNjM2Mz YyIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLXJpZ2h0LWN1cmx5LWFycm93LWZhY2UnLiIKICA6 Z3JvdXAgJystbW9kZSkKCihzZXQtZnJpbmdlLWJpdG1hcC1mYWNlICcrLWZyaW5nZS1yaWdodC1j dXJseS1hcnJvdyAnKy1mcmluZ2UtcmlnaHQtY3VybHktYXJyb3ctZmFjZSkKCgooZGVmaW5lLWZy aW5nZS1iaXRtYXAgJystZnJpbmdlLWxlZnQtdHJpYW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNp bWFsCiIuLi4uLi54eCIKIi4uLi54eHh4IgoiLi4ueHh4eHgiCiIuLnh4eHh4eCIKIi4ueHh4eHh4 IgoiLi4ueHh4eHgiCiIuLi4ueHh4eCIKIi4uLi4uLnh4IikgbmlsIG5pbCAnY2VudGVyKQoKKGRl ZmZhY2UgKy1mcmluZ2UtbGVmdC10cmlhbmdsZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgInJl ZCIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLWxlZnQtdHJpYW5nbGUtZmFjZScuIgogIDpncm91 cCAnKy1tb2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLWxlZnQtdHJpYW5n bGUgJystZnJpbmdlLWxlZnQtdHJpYW5nbGUtZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1iaXRtYXAg JystZnJpbmdlLXJpZ2h0LXRyaWFuZ2xlICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoieHguLi4u Li4iCiJ4eHh4Li4uLiIKInh4eHh4Li4uIgoieHh4eHh4Li4iCiJ4eHh4eHguLiIKInh4eHh4Li4u IgoieHh4eC4uLi4iCiJ4eC4uLi4uLiIpIG5pbCBuaWwgJ2NlbnRlcikKCihkZWZmYWNlICstZnJp bmdlLXJpZ2h0LXRyaWFuZ2xlLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAieWVsbG93IikpKQog ICJGYWNlIGZvciBgKy1mcmluZ2UtcmlnaHQtdHJpYW5nbGUtZmFjZScuIgogIDpncm91cCAnKy1t b2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLXJpZ2h0LXRyaWFuZ2xlICcr LWZyaW5nZS1yaWdodC10cmlhbmdsZS1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1m cmluZ2UtdG9wLWxlZnQtYW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiJ4eHh4eHguLiIK Inh4eHh4eC4uIgoieHguLi4uLi4iCiJ4eC4uLi4uLiIKInh4Li4uLi4uIgoieHguLi4uLi4iCiJ4 eC4uLi4uLiIKIi4uLi4uLi4uIikgbmlsIG5pbCAndG9wKQoKKGRlZmZhY2UgKy1mcmluZ2UtdG9w LWxlZnQtYW5nbGUtZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJtYWdlbnRhIikpKQogICJGYWNl IGZvciBgKy1mcmluZ2UtdG9wLWxlZnQtYW5nbGUtZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoK KHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLXRvcC1sZWZ0LWFuZ2xlICcrLWZyaW5n ZS10b3AtbGVmdC1hbmdsZS1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2Ut dG9wLXJpZ2h0LWFuZ2xlICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoiLi54eHh4eHgiCiIuLnh4 eHh4eCIKIi4uLi4uLnh4IgoiLi4uLi4ueHgiCiIuLi4uLi54eCIKIi4uLi4uLnh4IgoiLi4uLi4u eHgiCiIuLi4uLi4uLiIpIG5pbCBuaWwgJ3RvcCkKCihkZWZmYWNlICstZnJpbmdlLXRvcC1yaWdo dC1hbmdsZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgIm9yYW5nZSIpKSkKICAiRmFjZSBmb3Ig YCstZnJpbmdlLXRvcC1yaWdodC1hbmdsZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0 LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtdG9wLXJpZ2h0LWFuZ2xlICcrLWZyaW5nZS10 b3AtcmlnaHQtYW5nbGUtZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWJv dHRvbS1sZWZ0LWFuZ2xlICgrLWZyaW5nZS1oZWxwZXItZGVjaW1hbAoieHguLi4uLi4iCiJ4eC4u Li4uLiIKInh4Li4uLi4uIgoieHguLi4uLi4iCiJ4eC4uLi4uLiIKInh4eHh4eC4uIgoieHh4eHh4 Li4iKSBuaWwgbmlsICdib3R0b20pCgooZGVmZmFjZSArLWZyaW5nZS1ib3R0b20tbGVmdC1hbmds ZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgIm1hZ2VudGEiKSkpCiAgIkZhY2UgZm9yIGArLWZy aW5nZS1ib3R0b20tbGVmdC1hbmdsZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZy aW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtYm90dG9tLWxlZnQtYW5nbGUgJystZnJpbmdlLWJv dHRvbS1sZWZ0LWFuZ2xlLWZhY2UpCgoKKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZyaW5nZS1i b3R0b20tcmlnaHQtYW5nbGUgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiIuLi4uLi54eCIKIi4u Li4uLnh4IgoiLi4uLi4ueHgiCiIuLi4uLi54eCIKIi4uLi4uLnh4IgoiLi54eHh4eHgiCiIuLnh4 eHh4eCIpIG5pbCBuaWwgJ2JvdHRvbSkKCihkZWZmYWNlICstZnJpbmdlLWJvdHRvbS1yaWdodC1h bmdsZS1mYWNlCiAgJygodCAoOmZvcmVncm91bmQgIm1hZ2VudGEiKSkpCiAgIkZhY2UgZm9yIGAr LWZyaW5nZS1ib3R0b20tcmlnaHQtYW5nbGUtZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKHNl dC1mcmluZ2UtYml0bWFwLWZhY2UgJystZnJpbmdlLWJvdHRvbS1yaWdodC1hbmdsZSAnKy1mcmlu Z2UtYm90dG9tLXJpZ2h0LWFuZ2xlLWZhY2UpCgoKKGRlZmluZS1mcmluZ2UtYml0bWFwICcrLWZy aW5nZS1sZWZ0LWJyYWNrZXQgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiJ4eHh4eHguLiIKInh4 eHh4eC4uIgoieHguLi4uLi4iCiJ4eC4uLi4uLiIKInh4Li4uLi4uIgoieHguLi4uLi4iCiJ4eC4u Li4uLiIKInh4Li4uLi4uIgoieHh4eHh4Li4iCiJ4eHh4eHguLiIpIG5pbCBuaWwgJ2NlbnRlcikK OzsKCihkZWZmYWNlICstZnJpbmdlLWxlZnQtYnJhY2tldC1mYWNlCiAgJygodCAoOmZvcmVncm91 bmQgInllbGxvdyIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLWxlZnQtYnJhY2tldC1mYWNlJy4i CiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtbGVm dC1icmFja2V0ICcrLWZyaW5nZS1sZWZ0LWJyYWNrZXQtZmFjZSkKCgooZGVmaW5lLWZyaW5nZS1i aXRtYXAgJystZnJpbmdlLXJpZ2h0LWJyYWNrZXQgKCstZnJpbmdlLWhlbHBlci1kZWNpbWFsCiIu Lnh4eHh4eCIKIi4ueHh4eHh4IgoiLi4uLi4ueHgiCiIuLi4uLi54eCIKIi4uLi4uLnh4IgoiLi4u Li4ueHgiCiIuLi4uLi54eCIKIi4uLi4uLnh4IgoiLi54eHh4eHgiCiIuLnh4eHh4eCIpIG5pbCBu aWwgJ2NlbnRlcikKCihkZWZmYWNlICstZnJpbmdlLXJpZ2h0LWJyYWNrZXQtZmFjZQogICcoKHQg KDpmb3JlZ3JvdW5kICJncmVlbiIpKSkKICAiRmFjZSBmb3IgYCstZnJpbmdlLXJpZ2h0LWJyYWNr ZXQtZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJyst ZnJpbmdlLXJpZ2h0LWJyYWNrZXQgJystZnJpbmdlLXJpZ2h0LWJyYWNrZXQtZmFjZSkKCgooZGVm aW5lLWZyaW5nZS1iaXRtYXAgJystZnJpbmdlLWZpbGxlZC1yZWN0YW5nbGUgKCstZnJpbmdlLWhl bHBlci1kZWNpbWFsCiJ4eHh4eHh4LiIKInh4eHh4eHguIgoieHh4eHh4eC4iCiJ4eHh4eHh4LiIK Inh4eHh4eHguIgoieHh4eHh4eC4iCiJ4eHh4eHh4LiIKInh4eHh4eHguIgoieHh4eHh4eC4iCiJ4 eHh4eHh4LiIKInh4eHh4eHguIgoieHh4eHh4eC4iCiJ4eHh4eHh4LiIpIG5pbCBuaWwgJ2NlbnRl cikKCihkZWZmYWNlICstZnJpbmdlLWZpbGxlZC1yZWN0YW5nbGUtZmFjZQogICcoKHQgKDpmb3Jl Z3JvdW5kICJjaGFydHJldXNlIikpKQogICJGYWNlIGZvciBgKy1mcmluZ2UtZmlsbGVkLXJlY3Rh bmdsZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAn Ky1mcmluZ2UtZmlsbGVkLXJlY3RhbmdsZSAnKy1mcmluZ2UtZmlsbGVkLXJlY3RhbmdsZS1mYWNl KQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtaG9sbG93LXNxdWFyZSAoKy1mcmlu Z2UtaGVscGVyLWRlY2ltYWwKIi54eHh4eHguIgoiLnguLi4ueC4iCiIueC4uLi54LiIKIi54Li4u LnguIgoiLnguLi4ueC4iCiIueHh4eHh4LiIpIG5pbCBuaWwgJ2NlbnRlcikKCihkZWZmYWNlICst ZnJpbmdlLWhvbGxvdy1zcXVhcmUtZmFjZQogICcoKHQgKDpmb3JlZ3JvdW5kICJjaGFydHJldXNl IikpKQogICJGYWNlIGZvciBgKy1mcmluZ2UtaG9sbG93LXNxdWFyZS1mYWNlJy4iCiAgOmdyb3Vw ICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtaG9sbG93LXNxdWFy ZSAnKy1mcmluZ2UtaG9sbG93LXNxdWFyZS1mYWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAn Ky1mcmluZ2UtZmlsbGVkLXNxdWFyZSAoKy1mcmluZ2UtaGVscGVyLWRlY2ltYWwKIi54eHh4eHgu IgoiLnh4eHh4eC4iCiIueHh4eHh4LiIKIi54eHh4eHguIgoiLnh4eHh4eC4iCiIueHh4eHh4LiIp IG5pbCBuaWwgJ2NlbnRlcikKCihkZWZmYWNlICstZnJpbmdlLWZpbGxlZC1zcXVhcmUtZmFjZQog ICcoKHQgKDpmb3JlZ3JvdW5kICJjaGFydHJldXNlIikpKQogICJGYWNlIGZvciBgKy1mcmluZ2Ut ZmlsbGVkLXNxdWFyZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0LWZyaW5nZS1iaXRt YXAtZmFjZSAnKy1mcmluZ2UtZmlsbGVkLXNxdWFyZSAnKy1mcmluZ2UtZmlsbGVkLXNxdWFyZS1m YWNlKQoKCihkZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtaG9yaXpvbnRhbC1iYXIgKCst ZnJpbmdlLWhlbHBlci1kZWNpbWFsCiJ4eHh4eHh4LiIKInh4eHh4eHguIikgbmlsIG5pbCAnYm90 dG9tKQoKKGRlZmZhY2UgKy1mcmluZ2UtaG9yaXpvbnRhbC1iYXItZmFjZQogICcoKHQgKDpmb3Jl Z3JvdW5kICJjaGFydHJldXNlIikpKQogICJGYWNlIGZvciBgKy1mcmluZ2UtaG9yaXpvbnRhbC1i YXItZmFjZScuIgogIDpncm91cCAnKy1tb2RlKQoKKHNldC1mcmluZ2UtYml0bWFwLWZhY2UgJyst ZnJpbmdlLWhvcml6b250YWwtYmFyICcrLWZyaW5nZS1ob3Jpem9udGFsLWJhci1mYWNlKQoKCihk ZWZpbmUtZnJpbmdlLWJpdG1hcCAnKy1mcmluZ2UtZW1wdHktbGluZSAoKy1mcmluZ2UtaGVscGVy LWRlY2ltYWwKIi4uLi4uLi4uIgoiLi54eHh4Li4iCiIuLi4uLi4uLiIKIi4uLi4uLi4uIgoiLi54 eHh4Li4iCiIuLi4uLi4uLiIpIG5pbCBuaWwgJyh0b3AgdCkpCgooZGVmZmFjZSArLWZyaW5nZS1l bXB0eS1saW5lLWZhY2UKICAnKCh0ICg6Zm9yZWdyb3VuZCAiRGFya0dyZWVuIikpKQogICJGYWNl IGZvciBgKy1mcmluZ2UtZW1wdHktbGluZS1mYWNlJy4iCiAgOmdyb3VwICcrLW1vZGUpCgooc2V0 LWZyaW5nZS1iaXRtYXAtZmFjZSAnKy1mcmluZ2UtZW1wdHktbGluZSAnKy1mcmluZ2UtZW1wdHkt bGluZS1mYWNlKQoKOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7 Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7CgooYmxpbmstY3Vyc29yLW1vZGUg LTEp --Multipart_Wed_Dec_27_09:13:37_2017-1--