From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms0.migadu.com with LMTPS id QBCmBMF6G2LaAAAAgWs5BA (envelope-from ) for ; Sun, 27 Feb 2022 14:21:05 +0100 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id 0IveAcF6G2L1/QAA9RJhRA (envelope-from ) for ; Sun, 27 Feb 2022 14:21:05 +0100 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 69BFF2BFE8 for ; Sun, 27 Feb 2022 14:21:03 +0100 (CET) Received: from localhost ([::1]:51044 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1nOJTy-0001jS-60 for larch@yhetil.org; Sun, 27 Feb 2022 08:21:02 -0500 Received: from eggs.gnu.org ([209.51.188.92]:41706) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nOJRK-0001eR-9g for emacs-orgmode@gnu.org; Sun, 27 Feb 2022 08:18:19 -0500 Received: from mail.ut.ac.ir ([80.66.177.10]:36410) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1nOJR9-0004W0-4b for emacs-orgmode@gnu.org; Sun, 27 Feb 2022 08:18:17 -0500 Received: from localhost (localhost [127.0.0.1]) by mail.ut.ac.ir (Postfix) with ESMTP id 818D61DB044 for ; Sun, 27 Feb 2022 16:47:53 +0330 (+0330) Received: from mail.ut.ac.ir ([127.0.0.1]) by localhost (mail.ut.ac.ir [127.0.0.1]) (amavisd-new, port 10024) with LMTP id BHBSIXkDLQEr for ; Sun, 27 Feb 2022 16:47:37 +0330 (+0330) Received: from mail.ut.ac.ir (mail.ut.ac.ir [194.225.0.10]) by mail.ut.ac.ir (Postfix) with ESMTP id 0E7561DB518 for ; Sun, 27 Feb 2022 16:47:37 +0330 (+0330) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_b2fc833ba09e367b4fc6998f8a235e35" Date: Sun, 27 Feb 2022 16:47:36 +0330 From: Sajad Hosseini Balef To: emacs-orgmode@gnu.org Subject: [Translation] Add Persian/Farsi to org-export Message-ID: X-Sender: shosseinib@ut.ac.ir User-Agent: Roundcube Webmail/1.3.6 Received-SPF: pass client-ip=80.66.177.10; envelope-from=shosseinib@ut.ac.ir; helo=mail.ut.ac.ir X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: "Emacs-orgmode" X-Migadu-Flow: FLOW_IN X-Migadu-Country: US ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1645968064; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:list-id:list-help:list-unsubscribe: list-subscribe:list-post; bh=bWDoujxmgwvAzxAQcTmG9NvJQvHEuofzyHxK1abTKtc=; b=dv0U0PbdG0sfkrk+cfnaRnZRosB1VnZkOx4mf8v/o+YyVzX1aYKoLJ+dx0P5yLWQKfqmCB Tdkac01gaA4ZNw7bXkk/s/ICiOorINj3eoVwDAw85lvc5389aGstC1m1hLMSdMUt27QcBs 30yczNmyr8KEFnjENYd9K9ZQrTilRbYQT0EMcjPfr+KV5fZRFq9xxm1QZZ1PzDRLjVrvwO PxjLqb8/KQqZ7iWYHYimc9yrveuAFuDIJ6ggsuEhpGgPvuN27CSRPllvCPdOXzRumLUNW6 MCtaG1ea9CbWOzVedYVr0mlDSL+yb5jtdzB8EXCsQ5V8w2F0fo5/SXgYU0DKPg== ARC-Seal: i=1; s=key1; d=yhetil.org; t=1645968064; a=rsa-sha256; cv=none; b=Xx1Dlqnixo0nQ1mHcNHixeu4QHro9cPZTedGKt87QB+DfHoZk4o7nnBXWBsFH3Vo+u73Gj 1/f5qdpeEzIsqwuwHs6a/a3T64Qc5ewgHf44cNb9OE7nt/mw50Lk2S/Y4SQg1WxhvWzJ1J g8pu/P1XZKHqeSIJitc/IiSauXKVZW0nw0Nw+O0GQRqVt4uUvS9G+nKOWW68yb2o1UfNC6 +d2PLdk4DmZgzUGxu4bcnORvQrWA3I3+cTFfYG0zhyoW81laS1TOY++0mrLZKnO/TWUuej Mc86cfUMIYZQIKZzBahRgcw1G4HhWzIYuzI6OJimUDXQ6LEpPv7b5Nxkz+gnoQ== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Spam-Score: -3.51 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-Migadu-Queue-Id: 69BFF2BFE8 X-Spam-Score: -3.51 X-Migadu-Scanner: scn0.migadu.com X-TUID: +HSgHDKze/G+ --=_b2fc833ba09e367b4fc6998f8a235e35 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed lisp/ox.el: Add Persian/Farsi to org-export * Add Persian/Farsi translation to the org-export-dictionary variable at lisp/ox.el. - Persian/Farsi is the native language to ~ 110 million speakers worldwide (mostly in Iran, Afghanistan, Tajikistan, Uzbekistan, and Iraq). - "fa" abbreviation stands for "Farsi" according to [[ISO 639-1][https://en.wikipedia.org/wiki/ISO_639-1]]. - the ```diff``` file and the ```patch``` are enclosed in the mail attachment. Sincerely and Peace. shosseinib --=_b2fc833ba09e367b4fc6998f8a235e35 Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=ox.el.diff Content-Disposition: attachment; filename=ox.el.diff; size=8730 ZGlmZiAtLWdpdCBhL2xpc3Avb3guZWwgYi9saXNwL294LmVsCmluZGV4IDZiNjhmYzJkYS4uNTY2 OWQ0NGJiIDEwMDY0NAotLS0gYS9saXNwL294LmVsCisrKyBiL2xpc3Avb3guZWwKQEAgLTU1MTMs NiArNTUxMywxOCBAQCB0cmFuc2NvZGluZyBpdC4iCiAgICAgIChzZWNvbmRhcnktb3BlbmluZyA6 dXRmLTggIuKAnCIgOmh0bWwgIiZsZHF1bzsiIDpsYXRleCAiYGAiIDp0ZXhpbmZvICJgYCIpCiAg ICAgIChzZWNvbmRhcnktY2xvc2luZyA6dXRmLTggIuKAnSIgOmh0bWwgIiZyZHF1bzsiIDpsYXRl eCAiJyciIDp0ZXhpbmZvICInJyIpCiAgICAgIChhcG9zdHJvcGhlIDp1dGYtOCAi4oCZIiA6aHRt bCAiJnJzcXVvOyIpKQorICAgICgiZmEiCisgICAgIChwcmltYXJ5LW9wZW5pbmcKKyAgICAgIDp1 dGYtOCAiwqsiIDpodG1sICImbGFxdW87IiA6bGF0ZXggIlxcZ3VpbGxlbW90bGVmdHt9IgorICAg ICAgOnRleGluZm8gIkBndWlsbGVtZXRsZWZ0e30iKQorICAgICAocHJpbWFyeS1jbG9zaW5nCisg ICAgICA6dXRmLTggIsK7IiA6aHRtbCAiJnJhcXVvOyIgOmxhdGV4ICJcXGd1aWxsZW1vdHJpZ2h0 e30iCisgICAgICA6dGV4aW5mbyAiQGd1aWxsZW1ldHJpZ2h0e30iKQorICAgICAoc2Vjb25kYXJ5 LW9wZW5pbmcgOnV0Zi04ICLigLkiIDpodG1sICImbHNhcXVvOyIgOmxhdGV4ICJcXGd1aWxzaW5n bGxlZnR7fSIKKwkJCTp0ZXhpbmZvICJAZ3VpbHNpbmdsbGVmdHt9IikKKyAgICAgKHNlY29uZGFy eS1jbG9zaW5nIDp1dGYtOCAi4oC6IiA6aHRtbCAiJnJzYXF1bzsiIDpsYXRleCAiXFxndWlsc2lu Z2xyaWdodHt9IgorCQkJOnRleGluZm8gIkBndWlsc2luZ2xyaWdodHt9IikKKyAgICAgKGFwb3N0 cm9waGUgOnV0Zi04ICLigJkiIDpodG1sICImcnNxdW87IikpCiAgICAgKCJmciIKICAgICAgKHBy aW1hcnktb3BlbmluZwogICAgICAgOnV0Zi04ICLCq8KgIiA6aHRtbCAiJmxhcXVvOyZuYnNwOyIg OmxhdGV4ICJcXG9nICIKQEAgLTU4MzQsNiArNTg0Niw3IEBAIHRoZW0uIgogICAgICAoImVvIiA6 aHRtbCAiQSYjMzY1O3Rvcm8iKQogICAgICAoImVzIiA6ZGVmYXVsdCAiQXV0b3IiKQogICAgICAo ImV0IiA6ZGVmYXVsdCAiQXV0b3IiKQorICAgICAoImZhIiA6ZGVmYXVsdCAi2YbZiNuM2LPZhtiv 2YciKQogICAgICAoImZpIiA6aHRtbCAiVGVraWomYXVtbDsiKQogICAgICAoImZyIiA6ZGVmYXVs dCAiQXV0ZXVyIikKICAgICAgKCJodSIgOmRlZmF1bHQgIlN6ZXJ6Jm90aWxkZTsiKQpAQCAtNTg1 OSw2ICs1ODcyLDcgQEAgdGhlbS4iCiAgICAgICgiY3MiIDpkZWZhdWx0ICJQb2tyYcSNb3bDoW7D rSB6IHDFmWVkY2hvesOtIHN0cmFueSIpCiAgICAgICgiZGUiIDpkZWZhdWx0ICJGb3J0c2V0enVu ZyB2b24gdm9yaGVyaWdlciBTZWl0ZSIpCiAgICAgICgiZXMiIDpodG1sICJDb250aW4mdWFjdXRl O2EgZGUgbGEgcCZhYWN1dGU7Z2luYSBhbnRlcmlvciIgOmFzY2lpICJDb250aW51YSBkZSBsYSBw YWdpbmEgYW50ZXJpb3IiIDpkZWZhdWx0ICJDb250aW7DumEgZGUgbGEgcMOhZ2luYSBhbnRlcmlv ciIpCisgICAgICgiZmEiIDpkZWZhdWx0ICLYp9iv2KfZhdmHINin2LIg2LXZgdit2YfZlCDZgtio 2YQiKQogICAgICAoImZyIiA6ZGVmYXVsdCAiU3VpdGUgZGUgbGEgcGFnZSBwcsOpY8OpZGVudGUi KQogICAgICAoIml0IiA6ZGVmYXVsdCAiQ29udGludWEgZGEgcGFnaW5hIHByZWNlZGVudGUiKQog ICAgICAoImphIiA6ZGVmYXVsdCAi5YmN44Oa44O844K444GL44KJ44Gu57aa44GNIikKQEAgLTU4 NzYsNiArNTg5MCw3IEBAIHRoZW0uIgogICAgICAoImNzIiA6ZGVmYXVsdCAiUG9rcmHEjXVqZSBu YSBkYWzFocOtIHN0csOhbmNlIikKICAgICAgKCJkZSIgOmRlZmF1bHQgIkZvcnRzZXR6dW5nIG7D pGNoc3RlIFNlaXRlIikKICAgICAgKCJlcyIgOmh0bWwgIkNvbnRpbiZ1YWN1dGU7YSBlbiBsYSBz aWd1aWVudGUgcCZhYWN1dGU7Z2luYSIgOmFzY2lpICJDb250aW51YSBlbiBsYSBzaWd1aWVudGUg cGFnaW5hIiA6ZGVmYXVsdCAiQ29udGluw7phIGVuIGxhIHNpZ3VpZW50ZSBww6FnaW5hIikKKyAg ICAgKCJmYSIgOmRlZmF1bHQgItin2K/Yp9mF2Ycg2K/YsSDYtdmB2K3Zh9mUINio2LnYryIpCiAg ICAgICgiZnIiIDpkZWZhdWx0ICJTdWl0ZSBwYWdlIHN1aXZhbnRlIikKICAgICAgKCJpdCIgOmRl ZmF1bHQgIkNvbnRpbnVhIGFsbGEgcGFnaW5hIHN1Y2Nlc3NpdmEiKQogICAgICAoImphIiA6ZGVm YXVsdCAi5qyh44Oa44O844K444Gr57aa44GPIikKQEAgLTU4OTAsNiArNTkwNSw3IEBAIHRoZW0u IgogICAgICAoInRyIiA6ZGVmYXVsdCAiRGV2YW3EsSBzb25yYWtpIHNheWZhZGEiKSkKICAgICAo IkNyZWF0ZWQiCiAgICAgICgiY3MiIDpkZWZhdWx0ICJWeXR2b8WZZW5vIikKKyAgICAgKCJmYSIg OmRlZmF1bHQgItiz2KfYrtiq2Ycg2LTYr9mHIikKICAgICAgKCJubCIgOmRlZmF1bHQgIkdlbWFh a3Qgb3AiKSAgOzsgbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRhdGUgb3IgZGF0ZSt0aW1lCiAgICAg ICgicHRfQlIiIDpkZWZhdWx0ICJDcmlhZG8gZW0iKQogICAgICAoInJvIiA6ZGVmYXVsdCAiQ3Jl YXQiKQpAQCAtNTkwNCw2ICs1OTIwLDcgQEAgdGhlbS4iCiAgICAgICgiZW8iIDpkZWZhdWx0ICJE YXRvIikKICAgICAgKCJlcyIgOmRlZmF1bHQgIkZlY2hhIikKICAgICAgKCJldCIgOmh0bWwgIkt1 dXAmIzIyODtldiIgOnV0Zi04ICJLdXVww6RldiIpCisgICAgICgiZmEiIDpkZWZhdWx0ICLYqtin 2LHbjNiuIikKICAgICAgKCJmaSIgOmh0bWwgIlAmYXVtbDtpdiZhdW1sO20mYXVtbDsmYXVtbDty JmF1bWw7IikKICAgICAgKCJodSIgOmh0bWwgIkQmYWFjdXRlO3R1bSIpCiAgICAgICgiaXMiIDpk ZWZhdWx0ICJEYWdzZXRuaW5nIikKQEAgLTU5MzAsNiArNTk0Nyw3IEBAIHRoZW0uIgogICAgICAo ImRlIiA6ZGVmYXVsdCAiR2xlaWNodW5nIikKICAgICAgKCJlcyIgOmFzY2lpICJFY3VhY2lvbiIg Omh0bWwgIkVjdWFjaSZvYWN1dGU7biIgOmRlZmF1bHQgIkVjdWFjacOzbiIpCiAgICAgICgiZXQi IDpodG1sICJWJiMyNDU7cnJhbmQiIDp1dGYtOCAiVsO1cnJhbmQiKQorICAgICAoImZhIiA6ZGVm YXVsdCAi2YXYudin2K/ZhNmHIikKICAgICAgKCJmciIgOmFzY2lpICJFcXVhdGlvbiIgOmRlZmF1 bHQgIsOJcXVhdGlvbiIpCiAgICAgICgiaXMiIDpkZWZhdWx0ICJKYWZuYSIpCiAgICAgICgiamEi IDpkZWZhdWx0ICLmlrnnqIvlvI8iKQpAQCAtNTk1Miw2ICs1OTcwLDcgQEAgdGhlbS4iCiAgICAg ICgiZGUiIDpkZWZhdWx0ICJBYmJpbGR1bmciKQogICAgICAoImVzIiA6ZGVmYXVsdCAiRmlndXJh IikKICAgICAgKCJldCIgOmRlZmF1bHQgIkpvb25pcyIpCisgICAgICgiZmEiIDpkZWZhdWx0ICLY tNqp2YQiKQogICAgICAoImlzIiA6ZGVmYXVsdCAiTXluZCIpCiAgICAgICgiaXQiIDpkZWZhdWx0 ICJGaWd1cmEiKQogICAgICAoImphIiA6ZGVmYXVsdCAi5ZuzIiA6aHRtbCAiJiMyMjI1OTsiKQpA QCAtNTk3Miw2ICs1OTkxLDcgQEAgdGhlbS4iCiAgICAgICgiZGUiIDpkZWZhdWx0ICJBYmJpbGR1 bmcgJWQ6IikKICAgICAgKCJlcyIgOmRlZmF1bHQgIkZpZ3VyYSAlZDoiKQogICAgICAoImV0IiA6 ZGVmYXVsdCAiSm9vbmlzICVkOiIpCisgICAgICgiZmEiIDpkZWZhdWx0ICLYtNqp2YQgJWQ6IikK ICAgICAgKCJmciIgOmRlZmF1bHQgIkZpZ3VyZSAlZCA6IiA6aHRtbCAiRmlndXJlJm5ic3A7JWQm bmJzcDs6IikKICAgICAgKCJpcyIgOmRlZmF1bHQgIk15bmQgJWQiKQogICAgICAoIml0IiA6ZGVm YXVsdCAiRmlndXJhICVkOiIpCkBAIC01OTk2LDYgKzYwMTYsNyBAQCB0aGVtLiIKICAgICAgKCJl byIgOmRlZmF1bHQgIlBpZWRub3RvaiIpCiAgICAgICgiZXMiIDphc2NpaSAiTm90YXMgYWwgcGll IGRlIHBhZ2luYSIgOmh0bWwgIk5vdGFzIGFsIHBpZSBkZSBwJmFhY3V0ZTtnaW5hIiA6ZGVmYXVs dCAiTm90YXMgYWwgcGllIGRlIHDDoWdpbmEiKQogICAgICAoImV0IiA6aHRtbCAiQWxsbSYjMjI4 O3JrdXNlZCIgOnV0Zi04ICJBbGxtw6Rya3VzZWQiKQorICAgICAoImZhIiA6ZGVmYXVsdCAi2b7Y p9mG2YjYtNiq4oCM2YfYpyIpCiAgICAgICgiZmkiIDpkZWZhdWx0ICJBbGF2aWl0dGVldCIpCiAg ICAgICgiZnIiIDpkZWZhdWx0ICJOb3RlcyBkZSBiYXMgZGUgcGFnZSIpCiAgICAgICgiaHUiIDpo dG1sICJMJmFhY3V0ZTtiamVneXpldCIpCkBAIC02MDI0LDYgKzYwNDUsNyBAQCB0aGVtLiIKICAg ICAgKCJkZSIgOmRlZmF1bHQgIlByb2dyYW1tYXVmbGlzdHVuZ3N2ZXJ6ZWljaG5pcyIpCiAgICAg ICgiZXMiIDphc2NpaSAiSW5kaWNlIGRlIExpc3RhZG9zIGRlIHByb2dyYW1hcyIgOmh0bWwgIiZJ YWN1dGU7bmRpY2UgZGUgTGlzdGFkb3MgZGUgcHJvZ3JhbWFzIiA6ZGVmYXVsdCAiw41uZGljZSBk ZSBMaXN0YWRvcyBkZSBwcm9ncmFtYXMiKQogICAgICAoImV0IiA6ZGVmYXVsdCAiTG9lbmRpdGUg bmltZWtpcmkiKQorICAgICAoImZhIiA6ZGVmYXVsdCAi2YHZh9ix2LPYqiDYqNix2YbYp9mF2Yfi gIzYsduM2LLbjOKAjNmH2KciKQogICAgICAoImZyIiA6ZGVmYXVsdCAiTGlzdGUgZGVzIHByb2dy YW1tZXMiKQogICAgICAoImphIiA6ZGVmYXVsdCAi44K944O844K544Kz44O844OJ55uu5qyhIikK ICAgICAgKCJubCIgOmRlZmF1bHQgIkxpanN0IHZhbiBwcm9ncmFtbWEncyIpCkBAIC02MDQyLDYg KzYwNjQsNyBAQCB0aGVtLiIKICAgICAgKCJkZSIgOmRlZmF1bHQgIlRhYmVsbGVudmVyemVpY2hu aXMiKQogICAgICAoImVzIiA6YXNjaWkgIkluZGljZSBkZSB0YWJsYXMiIDpodG1sICImSWFjdXRl O25kaWNlIGRlIHRhYmxhcyIgOmRlZmF1bHQgIsONbmRpY2UgZGUgdGFibGFzIikKICAgICAgKCJl dCIgOmRlZmF1bHQgIlRhYmVsaXRlIG5pbWVraXJpIikKKyAgICAgKCJmYSIgOmRlZmF1bHQgItmB 2YfYsdiz2Kog2KzYr9mI2YTigIzZh9inIikKICAgICAgKCJmciIgOmRlZmF1bHQgIkxpc3RlIGRl cyB0YWJsZWF1eCIpCiAgICAgICgiaXMiIDpkZWZhdWx0ICJUw7ZmbHVza3LDoSIgOmh0bWwgIlQm b3VtbDtmbHVza3ImYWFjdXRlOyIpCiAgICAgICgiaXQiIDpkZWZhdWx0ICJJbmRpY2UgZGVsbGUg dGFiZWxsZSIpCkBAIC02MDY1LDYgKzYwODgsNyBAQCB0aGVtLiIKICAgICAgKCJkZSIgOmRlZmF1 bHQgIlByb2dyYW1tbGlzdGluZyIpCiAgICAgICgiZXMiIDpkZWZhdWx0ICJMaXN0YWRvIGRlIHBy b2dyYW1hIikKICAgICAgKCJldCIgOmRlZmF1bHQgIkxvZW5kIikKKyAgICAgKCJmYSIgOmRlZmF1 bHQgItio2LHZhtin2YXZh+KAjNix24zYstuMIikKICAgICAgKCJmciIgOmRlZmF1bHQgIlByb2dy YW1tZSIgOmh0bWwgIlByb2dyYW1tZSIpCiAgICAgICgiaXQiIDpkZWZhdWx0ICJMaXN0YXRvIikK ICAgICAgKCJqYSIgOmRlZmF1bHQgIuOCveODvOOCueOCs+ODvOODiSIpCkBAIC02MDg1LDYgKzYx MDksNyBAQCB0aGVtLiIKICAgICAgKCJkZSIgOmRlZmF1bHQgIlByb2dyYW1tbGlzdGluZyAlZCIp CiAgICAgICgiZXMiIDpkZWZhdWx0ICJMaXN0YWRvIGRlIHByb2dyYW1hICVkIikKICAgICAgKCJl dCIgOmRlZmF1bHQgIkxvZW5kICVkIikKKyAgICAgKCJmYSIgOmRlZmF1bHQgItio2LHZhtin2YXZ h+KAjNix24zYstuMICVkOiIpCiAgICAgICgiZnIiIDpkZWZhdWx0ICJQcm9ncmFtbWUgJWQgOiIg Omh0bWwgIlByb2dyYW1tZSZuYnNwOyVkJm5ic3A7OiIpCiAgICAgICgiaXQiIDpkZWZhdWx0ICJM aXN0YXRvICVkIDoiKQogICAgICAoImphIiA6ZGVmYXVsdCAi44K944O844K544Kz44O844OJJWQ6 IikKQEAgLTYxMDMsNiArNjEyOCw3IEBAIHRoZW0uIgogICAgICAoImNzIiA6ZGVmYXVsdCAiUmVm ZXJlbmNlIikKICAgICAgKCJkZSIgOmRlZmF1bHQgIlF1ZWxsZW4iKQogICAgICAoImVzIiA6ZGVm YXVsdCAiUmVmZXJlbmNpYXMiKQorICAgICAoImZhIiA6ZGVmYXVsdCAi2YXZhtin2KjYuSIpCiAg ICAgICgiZnIiIDphc2NpaSAiUmVmZXJlbmNlcyIgOmRlZmF1bHQgIlLDqWbDqXJlbmNlcyIpCiAg ICAgICgiaXQiIDpkZWZhdWx0ICJSaWZlcmltZW50aSIpCiAgICAgICgibmwiIDpkZWZhdWx0ICJC cm9udmVyd2lqemluZ2VuIikKQEAgLTYxMTIsNiArNjEzOCw3IEBAIHRoZW0uIgogICAgICAoInRy IiA6ZGVmYXVsdCAiUmVmZXJhbnNsYXIiKSkKICAgICAoIlNlZSBmaWd1cmUgJXMiCiAgICAgICgi Y3MiIDpkZWZhdWx0ICJWaXogb2Jyw6F6ZWsgJXMiKQorICAgICAoImZhIiA6ZGVmYXVsdCAi2YbZ hdin24zYtCDYtNqp2YQgJXMiKQogICAgICAoImZyIiA6ZGVmYXVsdCAiY2YuIGZpZ3VyZSAlcyIK ICAgICAgIDpodG1sICJjZi4mbmJzcDtmaWd1cmUmbmJzcDslcyIgOmxhdGV4ICJjZi5+ZmlndXJl fiVzIikKICAgICAgKCJpdCIgOmRlZmF1bHQgIlZlZGkgZmlndXJhICVzIikKQEAgLTYxMjMsNiAr NjE1MCw3IEBAIHRoZW0uIgogICAgICAoInRyIiA6ZGVmYXVsdCAiYmt6LiDFn2VraWwgJXMiKSkK ICAgICAoIlNlZSBsaXN0aW5nICVzIgogICAgICAoImNzIiA6ZGVmYXVsdCAiVml6IHByb2dyYW0g JXMiKQorICAgICAoImZhIiA6ZGVmYXVsdCAi2YbZhdin24zYtCDYqNix2YbYp9mF2YfigIzYsduM 2LLbjCAlcyIpCiAgICAgICgiZnIiIDpkZWZhdWx0ICJjZi4gcHJvZ3JhbW1lICVzIgogICAgICAg Omh0bWwgImNmLiZuYnNwO3Byb2dyYW1tZSZuYnNwOyVzIiA6bGF0ZXggImNmLn5wcm9ncmFtbWV+ JXMiKQogICAgICAoIm5sIiA6ZGVmYXVsdCAiWmllIHByb2dyYW1tYSAlcyIKQEAgLTYxMzgsNiAr NjE2Niw3IEBAIHRoZW0uIgogICAgICAoImRlIiA6ZGVmYXVsdCAic2llaGUgQWJzY2huaXR0ICVz IikKICAgICAgKCJlcyIgOmFzY2lpICJWZWEgc2VjY2lvbiAlcyIgOmh0bWwgIlZlYSBzZWNjaSZv YWN1dGU7biAlcyIgOmRlZmF1bHQgIlZlYSBzZWNjacOzbiAlcyIpCiAgICAgICgiZXQiIDpodG1s ICJWYWF0YSBwZWF0JiMyNTI7a2tpICVzIiA6dXRmLTggIlZhYXRhIHBlYXTDvGtraSAlcyIpCisg ICAgICgiZmEiIDpkZWZhdWx0ICLZhtmF2KfbjNi0INio2K7YtCAlcyIpCiAgICAgICgiZnIiIDpk ZWZhdWx0ICJjZi4gc2VjdGlvbiAlcyIpCiAgICAgICgiaXQiIDpkZWZhdWx0ICJWZWRpIHNlemlv bmUgJXMiKQogICAgICAoImphIiA6ZGVmYXVsdCAi44K744Kv44K344On44OzICVzIOOCkuWPgueF pyIpCkBAIC02MTUzLDYgKzYxODIsNyBAQCB0aGVtLiIKICAgICAgKCJ6aC1DTiIgOmh0bWwgIiYj MjE0NDI7JiMzNTI2NTsmIzMxNTMyOyVzJiMzMzQxMDsiIDp1dGYtOCAi5Y+C6KeB56ysJXPoioIi KSkKICAgICAoIlNlZSB0YWJsZSAlcyIKICAgICAgKCJjcyIgOmRlZmF1bHQgIlZpeiB0YWJ1bGth ICVzIikKKyAgICAgKCJmYSIgOmRlZmF1bHQgItmG2YXYp9uM2LQg2KzYr9mI2YQgJXMiKQogICAg ICAoImZyIiA6ZGVmYXVsdCAiY2YuIHRhYmxlYXUgJXMiCiAgICAgICA6aHRtbCAiY2YuJm5ic3A7 dGFibGVhdSZuYnNwOyVzIiA6bGF0ZXggImNmLn50YWJsZWF1fiVzIikKICAgICAgKCJpdCIgOmRl ZmF1bHQgIlZlZGkgdGFiZWxsYSAlcyIpCkBAIC02MTY4LDYgKzYxOTgsNyBAQCB0aGVtLiIKICAg ICAgKCJkZSIgOmRlZmF1bHQgIlRhYmVsbGUiKQogICAgICAoImVzIiA6ZGVmYXVsdCAiVGFibGEi KQogICAgICAoImV0IiA6ZGVmYXVsdCAiVGFiZWwiKQorICAgICAoImZhIiA6ZGVmYXVsdCAi2KzY r9mI2YQiKQogICAgICAoImZyIiA6ZGVmYXVsdCAiVGFibGVhdSIpCiAgICAgICgiaXMiIDpkZWZh dWx0ICJUYWZsYSIpCiAgICAgICgiaXQiIDpkZWZhdWx0ICJUYWJlbGxhIikKQEAgLTYxODYsNiAr NjIxNyw3IEBAIHRoZW0uIgogICAgICAoImRlIiA6ZGVmYXVsdCAiVGFiZWxsZSAlZCIpCiAgICAg ICgiZXMiIDpkZWZhdWx0ICJUYWJsYSAlZCIpCiAgICAgICgiZXQiIDpkZWZhdWx0ICJUYWJlbCAl ZCIpCisgICAgICgiZmEiIDpkZWZhdWx0ICLYrNiv2YjZhCAlZCIpCiAgICAgICgiZnIiIDpkZWZh dWx0ICJUYWJsZWF1ICVkIDoiKQogICAgICAoImlzIiA6ZGVmYXVsdCAiVGFmbGEgJWQiKQogICAg ICAoIml0IiA6ZGVmYXVsdCAiVGFiZWxsYSAlZDoiKQpAQCAtNjIxMSw2ICs2MjQzLDcgQEAgdGhl bS4iCiAgICAgICgiZW8iIDpkZWZhdWx0ICJFbmhhdm8iKQogICAgICAoImVzIiA6YXNjaWkgIklu ZGljZSIgOmh0bWwgIiZJYWN1dGU7bmRpY2UiIDpkZWZhdWx0ICLDjW5kaWNlIikKICAgICAgKCJl dCIgOmRlZmF1bHQgIlNpc3Vrb3JkIikKKyAgICAgKCJmYSIgOmRlZmF1bHQgItmB2YfYsdiz2Koi KQogICAgICAoImZpIiA6aHRtbCAiU2lzJmF1bWw7bGx5c2x1ZXR0ZWxvIikKICAgICAgKCJmciIg OmFzY2lpICJTb21tYWlyZSIgOmRlZmF1bHQgIlRhYmxlIGRlcyBtYXRpw6hyZXMiKQogICAgICAo Imh1IiA6aHRtbCAiVGFydGFsb21qZWd5eiZlYWN1dGU7ayIpCkBAIC02MjM4LDYgKzYyNzEsNyBA QCB0aGVtLiIKICAgICAgKCJkZSIgOmRlZmF1bHQgIlVuYmVrYW5udGVyIFZlcndlaXMiKQogICAg ICAoImVzIiA6ZGVmYXVsdCAiUmVmZXJlbmNpYSBkZXNjb25vY2lkYSIpCiAgICAgICgiZXQiIDpk ZWZhdWx0ICJUdW5kbWF0dSB2aWlkZSIpCisgICAgICgiZmEiIDpkZWZhdWx0ICLZhdmG2KjYuSDZ htin2LTZhtin2LMiKQogICAgICAoImZyIiA6YXNjaWkgIkRlc3RpbmF0aW9uIGluY29ubnVlIiA6 ZGVmYXVsdCAiUsOpZsOpcmVuY2UgaW5jb25udWUiKQogICAgICAoIml0IiA6ZGVmYXVsdCAiUmlm ZXJpbWVudG8gc2Nvbm9zY2l1dG8iKQogICAgICAoImphIiA6ZGVmYXVsdCAi5LiN5piO44Gq5Y+C 54Wn5YWIIikK --=_b2fc833ba09e367b4fc6998f8a235e35 Content-Transfer-Encoding: base64 Content-Type: text/x-lisp; name=ox.el Content-Disposition: attachment; filename=ox.el; size=282205 Ozs7IG94LmVsIC0tLSBFeHBvcnQgRnJhbWV3b3JrIGZvciBPcmcgTW9kZSAgICAgICAgICAtKi0g bGV4aWNhbC1iaW5kaW5nOiB0OyAtKi0KCjs7IENvcHlyaWdodCAoQykgMjAxMi0yMDIyIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgoKOzsgQXV0aG9yOiBOaWNvbGFzIEdvYXppb3UgPG1h aWxAbmljb2xhc2dvYXppb3UuZnI+Cjs7IE1haW50YWluZXI6IE5pY29sYXMgR29hemlvdSA8bWFp bEBuaWNvbGFzZ29hemlvdS5mcj4KOzsgS2V5d29yZHM6IG91dGxpbmVzLCBoeXBlcm1lZGlhLCBj YWxlbmRhciwgd3AKCjs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KCjs7IEdOVSBF bWFjcyBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9k aWZ5Cjs7IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYXMgcHVibGlzaGVkIGJ5Cjs7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhl ciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCjs7IChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCgo7OyBHTlUgRW1hY3MgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh dCBpdCB3aWxsIGJlIHVzZWZ1bCwKOzsgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0 IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo7OyBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKOzsgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKOzsgYWxvbmcgd2l0aCBH TlUgRW1hY3MuICBJZiBub3QsIHNlZSA8aHR0cHM6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoK Ozs7IENvbW1lbnRhcnk6Cjs7Cjs7IFRoaXMgbGlicmFyeSBpbXBsZW1lbnRzIGEgZ2VuZXJpYyBl eHBvcnQgZW5naW5lIGZvciBPcmcsIGJ1aWx0IG9uCjs7IGl0cyBzeW50YWN0aWNhbCBwYXJzZXI6 IE9yZyBFbGVtZW50cy4KOzsKOzsgQmVzaWRlcyB0aGF0IHBhcnNlciwgdGhlIGdlbmVyaWMgZXhw b3J0ZXIgaXMgbWFkZSBvZiB0aHJlZSBkaXN0aW5jdAo7OyBwYXJ0czoKOzsKOzsgLSBUaGUgY29t bXVuaWNhdGlvbiBjaGFubmVsIGNvbnNpc3RzIG9mIGEgcHJvcGVydHkgbGlzdCwgd2hpY2ggaXMK OzsgICBjcmVhdGVkIGFuZCB1cGRhdGVkIGR1cmluZyB0aGUgcHJvY2Vzcy4gIEl0cyB1c2UgaXMg dG8gb2ZmZXIKOzsgICBldmVyeSBwaWVjZSBvZiBpbmZvcm1hdGlvbiwgd291bGQgaXQgYmUgYWJv dXQgaW5pdGlhbCBlbnZpcm9ubWVudAo7OyAgIG9yIGNvbnRleHR1YWwgZGF0YSwgYWxsIGluIGEg c2luZ2xlIHBsYWNlLgo7Owo7OyAtIFRoZSB0cmFuc2NvZGVyIHdhbGtzIHRoZSBwYXJzZSB0cmVl LCBpZ25vcmVzIG9yIHRyZWF0IGFzIHBsYWluCjs7ICAgdGV4dCBlbGVtZW50cyBhbmQgb2JqZWN0 cyBhY2NvcmRpbmcgdG8gZXhwb3J0IG9wdGlvbnMsIGFuZAo7OyAgIGV2ZW50dWFsbHkgY2FsbHMg YmFjay1lbmQgc3BlY2lmaWMgZnVuY3Rpb25zIHRvIGRvIHRoZSByZWFsCjs7ICAgdHJhbnNjb2Rp bmcsIGNvbmNhdGVuYXRpbmcgdGhlaXIgcmV0dXJuIHZhbHVlIGFsb25nIHRoZSB3YXkuCjs7Cjs7 IC0gVGhlIGZpbHRlciBzeXN0ZW0gaXMgYWN0aXZhdGVkIGF0IHRoZSB2ZXJ5IGJlZ2lubmluZyBh bmQgdGhlIHZlcnkKOzsgICBlbmQgb2YgdGhlIGV4cG9ydCBwcm9jZXNzLCBhbmQgZWFjaCB0aW1l IGFuIGVsZW1lbnQgb3IgYW4gb2JqZWN0Cjs7ICAgaGFzIGJlZW4gY29udmVydGVkLiAgSXQgaXMg dGhlIGVudHJ5IHBvaW50IHRvIGZpbmUtdHVuZSBzdGFuZGFyZAo7OyAgIG91dHB1dCBmcm9tIGJh Y2stZW5kIHRyYW5zY29kZXJzLiAgU2VlICJUaGUgRmlsdGVyIFN5c3RlbSIKOzsgICBzZWN0aW9u IGZvciBtb3JlIGluZm9ybWF0aW9uLgo7Owo7OyBUaGUgY29yZSBmdW5jdGlvbnMgaXMgYG9yZy1l eHBvcnQtYXMnLiAgSXQgcmV0dXJucyB0aGUgdHJhbnNjb2RlZAo7OyBidWZmZXIgYXMgYSBzdHJp bmcuICBJdHMgZGVyaXZhdGl2ZXMgYXJlIGBvcmctZXhwb3J0LXRvLWJ1ZmZlcicgYW5kCjs7IGBv cmctZXhwb3J0LXRvLWZpbGUnLgo7Owo7OyBBbiBleHBvcnQgYmFjay1lbmQgaXMgZGVmaW5lZCB3 aXRoIGBvcmctZXhwb3J0LWRlZmluZS1iYWNrZW5kJy4KOzsgVGhpcyBmdW5jdGlvbiBjYW4gYWxz byBzdXBwb3J0IHNwZWNpZmljIGJ1ZmZlciBrZXl3b3JkcywgT1BUSU9OCjs7IGtleXdvcmQncyBp dGVtcyBhbmQgZmlsdGVycy4gIFJlZmVyIHRvIGZ1bmN0aW9uJ3MgZG9jdW1lbnRhdGlvbiBmb3IK OzsgbW9yZSBpbmZvcm1hdGlvbi4KOzsKOzsgSWYgdGhlIG5ldyBiYWNrLWVuZCBzaGFyZXMgbW9z dCBwcm9wZXJ0aWVzIHdpdGggYW5vdGhlciBvbmUsCjs7IGBvcmctZXhwb3J0LWRlZmluZS1kZXJp dmVkLWJhY2tlbmQnIGNhbiBiZSB1c2VkIHRvIHNpbXBsaWZ5IHRoZQo7OyBwcm9jZXNzLgo7Owo7 OyBBbnkgYmFjay1lbmQgY2FuIGRlZmluZSBpdHMgb3duIHZhcmlhYmxlcy4gIEFtb25nIHRoZW0s IHRob3NlCjs7IGN1c3RvbWl6YWJsZSBzaG91bGQgYmVsb25nIHRvIHRoZSBgb3JnLWV4cG9ydC1C QUNLRU5EJyBncm91cC4KOzsKOzsgVG9vbHMgZm9yIGNvbW1vbiB0YXNrcyBhY3Jvc3MgYmFjay1l bmRzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGUKOzsgZm9sbG93aW5nIHBhcnQgb2YgdGhlIGZpbGUu Cjs7Cjs7IEV2ZW50dWFsbHksIGEgZGlzcGF0Y2hlciAoYG9yZy1leHBvcnQtZGlzcGF0Y2gnKSBp cyBwcm92aWRlZCBpbiB0aGUKOzsgbGFzdCBvbmUuCjs7Cjs7IFNlZSA8aHR0cHM6Ly9vcmdtb2Rl Lm9yZy93b3JnL2Rldi9vcmctZXhwb3J0LXJlZmVyZW5jZS5odG1sPiBmb3IKOzsgbW9yZSBpbmZv cm1hdGlvbi4KCjs7OyBDb2RlOgoKKHJlcXVpcmUgJ2NsLWxpYikKKHJlcXVpcmUgJ29iLWV4cCkK KHJlcXVpcmUgJ29jKQoocmVxdWlyZSAnb2wpCihyZXF1aXJlICdvcmctZWxlbWVudCkKKHJlcXVp cmUgJ29yZy1tYWNybykKKHJlcXVpcmUgJ3RhYnVsYXRlZC1saXN0KQoKKGRlY2xhcmUtZnVuY3Rp b24gb3JnLXNyYy1jb2RlcmVmLWZvcm1hdCAib3JnLXNyYyIgKCZvcHRpb25hbCBlbGVtZW50KSkK KGRlY2xhcmUtZnVuY3Rpb24gb3JnLXNyYy1jb2RlcmVmLXJlZ2V4cCAib3JnLXNyYyIgKGZtdCAm b3B0aW9uYWwgbGFiZWwpKQooZGVjbGFyZS1mdW5jdGlvbiBvcmctcHVibGlzaCAib3gtcHVibGlz aCIgKHByb2plY3QgJm9wdGlvbmFsIGZvcmNlIGFzeW5jKSkKKGRlY2xhcmUtZnVuY3Rpb24gb3Jn LXB1Ymxpc2gtYWxsICJveC1wdWJsaXNoIiAoJm9wdGlvbmFsIGZvcmNlIGFzeW5jKSkKKGRlY2xh cmUtZnVuY3Rpb24gb3JnLXB1Ymxpc2gtY3VycmVudC1maWxlICJveC1wdWJsaXNoIiAoJm9wdGlv bmFsIGZvcmNlIGFzeW5jKSkKKGRlY2xhcmUtZnVuY3Rpb24gb3JnLXB1Ymxpc2gtY3VycmVudC1w cm9qZWN0ICJveC1wdWJsaXNoIiAoJm9wdGlvbmFsIGZvcmNlIGFzeW5jKSkKCihkZWZ2YXIgb3Jn LXB1Ymxpc2gtcHJvamVjdC1hbGlzdCkKKGRlZnZhciBvcmctdGFibGUtbnVtYmVyLWZyYWN0aW9u KQooZGVmdmFyIG9yZy10YWJsZS1udW1iZXItcmVnZXhwKQoKDAo7OzsgSW50ZXJuYWwgVmFyaWFi bGVzCjs7Cjs7IEFtb25nIGludGVybmFsIHZhcmlhYmxlcywgdGhlIG1vc3QgaW1wb3J0YW50IGlz Cjs7IGBvcmctZXhwb3J0LW9wdGlvbnMtYWxpc3QnLiAgVGhpcyB2YXJpYWJsZSBkZWZpbmUgdGhl IGdsb2JhbCBleHBvcnQKOzsgb3B0aW9ucywgc2hhcmVkIGJldHdlZW4gZXZlcnkgZXhwb3J0ZXIs IGFuZCBob3cgdGhleSBhcmUgYWNxdWlyZWQuCgooZGVmY29uc3Qgb3JnLWV4cG9ydC1tYXgtZGVw dGggMTkKICAiTWF4aW11bSBuZXN0aW5nIGRlcHRoIGZvciBoZWFkbGluZXMsIGNvdW50aW5nIGZy b20gMC4iKQoKKGRlZmNvbnN0IG9yZy1leHBvcnQtb3B0aW9ucy1hbGlzdAogICcoKDp0aXRsZSAi VElUTEUiIG5pbCBuaWwgcGFyc2UpCiAgICAoOmRhdGUgIkRBVEUiIG5pbCBuaWwgcGFyc2UpCiAg ICAoOmF1dGhvciAiQVVUSE9SIiBuaWwgdXNlci1mdWxsLW5hbWUgcGFyc2UpCiAgICAoOmVtYWls ICJFTUFJTCIgbmlsIHVzZXItbWFpbC1hZGRyZXNzIHQpCiAgICAoOmxhbmd1YWdlICJMQU5HVUFH RSIgbmlsIG9yZy1leHBvcnQtZGVmYXVsdC1sYW5ndWFnZSB0KQogICAgKDpzZWxlY3QtdGFncyAi U0VMRUNUX1RBR1MiIG5pbCBvcmctZXhwb3J0LXNlbGVjdC10YWdzIHNwbGl0KQogICAgKDpleGNs dWRlLXRhZ3MgIkVYQ0xVREVfVEFHUyIgbmlsIG9yZy1leHBvcnQtZXhjbHVkZS10YWdzIHNwbGl0 KQogICAgKDpjcmVhdG9yICJDUkVBVE9SIiBuaWwgb3JnLWV4cG9ydC1jcmVhdG9yLXN0cmluZykK ICAgICg6aGVhZGxpbmUtbGV2ZWxzIG5pbCAiSCIgb3JnLWV4cG9ydC1oZWFkbGluZS1sZXZlbHMp CiAgICAoOnByZXNlcnZlLWJyZWFrcyBuaWwgIlxcbiIgb3JnLWV4cG9ydC1wcmVzZXJ2ZS1icmVh a3MpCiAgICAoOnNlY3Rpb24tbnVtYmVycyBuaWwgIm51bSIgb3JnLWV4cG9ydC13aXRoLXNlY3Rp b24tbnVtYmVycykKICAgICg6dGltZS1zdGFtcC1maWxlIG5pbCAidGltZXN0YW1wIiBvcmctZXhw b3J0LXRpbWUtc3RhbXAtZmlsZSkKICAgICg6d2l0aC1hcmNoaXZlZC10cmVlcyBuaWwgImFyY2gi IG9yZy1leHBvcnQtd2l0aC1hcmNoaXZlZC10cmVlcykKICAgICg6d2l0aC1hdXRob3IgbmlsICJh dXRob3IiIG9yZy1leHBvcnQtd2l0aC1hdXRob3IpCiAgICAoOndpdGgtYnJva2VuLWxpbmtzIG5p bCAiYnJva2VuLWxpbmtzIiBvcmctZXhwb3J0LXdpdGgtYnJva2VuLWxpbmtzKQogICAgKDp3aXRo LWNsb2NrcyBuaWwgImMiIG9yZy1leHBvcnQtd2l0aC1jbG9ja3MpCiAgICAoOndpdGgtY3JlYXRv ciBuaWwgImNyZWF0b3IiIG9yZy1leHBvcnQtd2l0aC1jcmVhdG9yKQogICAgKDp3aXRoLWRhdGUg bmlsICJkYXRlIiBvcmctZXhwb3J0LXdpdGgtZGF0ZSkKICAgICg6d2l0aC1kcmF3ZXJzIG5pbCAi ZCIgb3JnLWV4cG9ydC13aXRoLWRyYXdlcnMpCiAgICAoOndpdGgtZW1haWwgbmlsICJlbWFpbCIg b3JnLWV4cG9ydC13aXRoLWVtYWlsKQogICAgKDp3aXRoLWVtcGhhc2l6ZSBuaWwgIioiIG9yZy1l eHBvcnQtd2l0aC1lbXBoYXNpemUpCiAgICAoOndpdGgtZW50aXRpZXMgbmlsICJlIiBvcmctZXhw b3J0LXdpdGgtZW50aXRpZXMpCiAgICAoOndpdGgtZml4ZWQtd2lkdGggbmlsICI6IiBvcmctZXhw b3J0LXdpdGgtZml4ZWQtd2lkdGgpCiAgICAoOndpdGgtZm9vdG5vdGVzIG5pbCAiZiIgb3JnLWV4 cG9ydC13aXRoLWZvb3Rub3RlcykKICAgICg6d2l0aC1pbmxpbmV0YXNrcyBuaWwgImlubGluZSIg b3JnLWV4cG9ydC13aXRoLWlubGluZXRhc2tzKQogICAgKDp3aXRoLWxhdGV4IG5pbCAidGV4IiBv cmctZXhwb3J0LXdpdGgtbGF0ZXgpCiAgICAoOndpdGgtcGxhbm5pbmcgbmlsICJwIiBvcmctZXhw b3J0LXdpdGgtcGxhbm5pbmcpCiAgICAoOndpdGgtcHJpb3JpdHkgbmlsICJwcmkiIG9yZy1leHBv cnQtd2l0aC1wcmlvcml0eSkKICAgICg6d2l0aC1wcm9wZXJ0aWVzIG5pbCAicHJvcCIgb3JnLWV4 cG9ydC13aXRoLXByb3BlcnRpZXMpCiAgICAoOndpdGgtc21hcnQtcXVvdGVzIG5pbCAiJyIgb3Jn LWV4cG9ydC13aXRoLXNtYXJ0LXF1b3RlcykKICAgICg6d2l0aC1zcGVjaWFsLXN0cmluZ3Mgbmls ICItIiBvcmctZXhwb3J0LXdpdGgtc3BlY2lhbC1zdHJpbmdzKQogICAgKDp3aXRoLXN0YXRpc3Rp Y3MtY29va2llcyBuaWwgInN0YXQiIG9yZy1leHBvcnQtd2l0aC1zdGF0aXN0aWNzLWNvb2tpZXMp CiAgICAoOndpdGgtc3ViLXN1cGVyc2NyaXB0IG5pbCAiXiIgb3JnLWV4cG9ydC13aXRoLXN1Yi1z dXBlcnNjcmlwdHMpCiAgICAoOndpdGgtdG9jIG5pbCAidG9jIiBvcmctZXhwb3J0LXdpdGgtdG9j KQogICAgKDp3aXRoLXRhYmxlcyBuaWwgInwiIG9yZy1leHBvcnQtd2l0aC10YWJsZXMpCiAgICAo OndpdGgtdGFncyBuaWwgInRhZ3MiIG9yZy1leHBvcnQtd2l0aC10YWdzKQogICAgKDp3aXRoLXRh c2tzIG5pbCAidGFza3MiIG9yZy1leHBvcnQtd2l0aC10YXNrcykKICAgICg6d2l0aC10aW1lc3Rh bXBzIG5pbCAiPCIgb3JnLWV4cG9ydC13aXRoLXRpbWVzdGFtcHMpCiAgICAoOndpdGgtdGl0bGUg bmlsICJ0aXRsZSIgb3JnLWV4cG9ydC13aXRoLXRpdGxlKQogICAgKDp3aXRoLXRvZG8ta2V5d29y ZHMgbmlsICJ0b2RvIiBvcmctZXhwb3J0LXdpdGgtdG9kby1rZXl3b3JkcykKICAgIDs7IENpdGF0 aW9ucyBwcm9jZXNzaW5nLgogICAgKDpjaXRlLWV4cG9ydCAiQ0lURV9FWFBPUlQiIG5pbCBvcmct Y2l0ZS1leHBvcnQtcHJvY2Vzc29ycykpCiAgIkFsaXN0IGJldHdlZW4gZXhwb3J0IHByb3BlcnRp ZXMgYW5kIHdheXMgdG8gc2V0IHRoZW0uCgpUaGUga2V5IG9mIHRoZSBhbGlzdCBpcyB0aGUgcHJv cGVydHkgbmFtZSwgYW5kIHRoZSB2YWx1ZSBpcyBhIGxpc3QKbGlrZSAoS0VZV09SRCBPUFRJT04g REVGQVVMVCBCRUhBVklPUikgd2hlcmU6CgpLRVlXT1JEIGlzIGEgc3RyaW5nIHJlcHJlc2VudGlu ZyBhIGJ1ZmZlciBrZXl3b3JkLCBvciBuaWwuICBFYWNoCiAgcHJvcGVydHkgZGVmaW5lZCB0aGlz IHdheSBjYW4gYWxzbyBiZSBzZXQsIGR1cmluZyBzdWJ0cmVlCiAgZXhwb3J0LCB0aHJvdWdoIGEg aGVhZGxpbmUgcHJvcGVydHkgbmFtZWQgYWZ0ZXIgdGhlIGtleXdvcmQKICB3aXRoIHRoZSBcIkVY UE9SVF9cIiBwcmVmaXggKGkuZS4gREFURSBrZXl3b3JkIGFuZCBFWFBPUlRfREFURQogIHByb3Bl cnR5KS4KT1BUSU9OIGlzIGEgc3RyaW5nIHRoYXQgY291bGQgYmUgZm91bmQgaW4gYW4gIytPUFRJ T05TOiBsaW5lLgpERUZBVUxUIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgcHJvcGVydHku CkJFSEFWSU9SIGRldGVybWluZXMgaG93IE9yZyBzaG91bGQgaGFuZGxlIG11bHRpcGxlIGtleXdv cmRzIGZvcgogIHRoZSBzYW1lIHByb3BlcnR5LiAgSXQgaXMgYSBzeW1ib2wgYW1vbmc6CiAgbmls ICAgICAgIEtlZXAgb2xkIHZhbHVlIGFuZCBkaXNjYXJkIHRoZSBuZXcgb25lLgogIHQgICAgICAg ICBSZXBsYWNlIG9sZCB2YWx1ZSB3aXRoIHRoZSBuZXcgb25lLgogIGBzcGFjZScgICBDb25jYXRl bmF0ZSB0aGUgdmFsdWVzLCBzZXBhcmF0aW5nIHRoZW0gd2l0aCBhIHNwYWNlLgogIGBuZXdsaW5l JyBDb25jYXRlbmF0ZSB0aGUgdmFsdWVzLCBzZXBhcmF0aW5nIHRoZW0gd2l0aAoJICAgIGEgbmV3 bGluZS4KICBgc3BsaXQnICAgU3BsaXQgdmFsdWVzIGF0IHdoaXRlIHNwYWNlcywgYW5kIGNvbnMg dGhlbSB0byB0aGUKCSAgICBwcmV2aW91cyBsaXN0LgogIGBwYXJzZScgICBQYXJzZSB2YWx1ZSBh cyBhIGxpc3Qgb2Ygc3RyaW5ncyBhbmQgT3JnIG9iamVjdHMsCiAgICAgICAgICAgIHdoaWNoIGNh biB0aGVuIGJlIHRyYW5zY29kZWQgd2l0aCwgZS5nLiwKICAgICAgICAgICAgYG9yZy1leHBvcnQt ZGF0YScuICBJdCBpbXBsaWVzIGBzcGFjZScgYmVoYXZpb3IuCgpWYWx1ZXMgc2V0IHRocm91Z2gg S0VZV09SRCBhbmQgT1BUSU9OIGhhdmUgcHJlY2VkZW5jZSBvdmVyCkRFRkFVTFQuCgpBbGwgdGhl c2UgcHJvcGVydGllcyBzaG91bGQgYmUgYmFjay1lbmQgYWdub3N0aWMuICBCYWNrLWVuZApzcGVj aWZpYyBwcm9wZXJ0aWVzIGFyZSBzZXQgdGhyb3VnaCBgb3JnLWV4cG9ydC1kZWZpbmUtYmFja2Vu ZCcuClByb3BlcnRpZXMgcmVkZWZpbmVkIHRoZXJlIGhhdmUgcHJlY2VkZW5jZSBvdmVyIHRoZXNl LiIpCgooZGVmY29uc3Qgb3JnLWV4cG9ydC1maWx0ZXJzLWFsaXN0CiAgJygoOmZpbHRlci1ib2R5 IC4gb3JnLWV4cG9ydC1maWx0ZXItYm9keS1mdW5jdGlvbnMpCiAgICAoOmZpbHRlci1ib2xkIC4g b3JnLWV4cG9ydC1maWx0ZXItYm9sZC1mdW5jdGlvbnMpCiAgICAoOmZpbHRlci1iYWJlbC1jYWxs IC4gb3JnLWV4cG9ydC1maWx0ZXItYmFiZWwtY2FsbC1mdW5jdGlvbnMpCiAgICAoOmZpbHRlci1j ZW50ZXItYmxvY2sgLiBvcmctZXhwb3J0LWZpbHRlci1jZW50ZXItYmxvY2stZnVuY3Rpb25zKQog ICAgKDpmaWx0ZXItY2xvY2sgLiBvcmctZXhwb3J0LWZpbHRlci1jbG9jay1mdW5jdGlvbnMpCiAg ICAoOmZpbHRlci1jb2RlIC4gb3JnLWV4cG9ydC1maWx0ZXItY29kZS1mdW5jdGlvbnMpCiAgICAo OmZpbHRlci1kaWFyeS1zZXhwIC4gb3JnLWV4cG9ydC1maWx0ZXItZGlhcnktc2V4cC1mdW5jdGlv bnMpCiAgICAoOmZpbHRlci1kcmF3ZXIgLiBvcmctZXhwb3J0LWZpbHRlci1kcmF3ZXItZnVuY3Rp b25zKQogICAgKDpmaWx0ZXItZHluYW1pYy1ibG9jayAuIG9yZy1leHBvcnQtZmlsdGVyLWR5bmFt aWMtYmxvY2stZnVuY3Rpb25zKQogICAgKDpmaWx0ZXItZW50aXR5IC4gb3JnLWV4cG9ydC1maWx0 ZXItZW50aXR5LWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLWV4YW1wbGUtYmxvY2sgLiBvcmctZXhw b3J0LWZpbHRlci1leGFtcGxlLWJsb2NrLWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLWV4cG9ydC1i bG9jayAuIG9yZy1leHBvcnQtZmlsdGVyLWV4cG9ydC1ibG9jay1mdW5jdGlvbnMpCiAgICAoOmZp bHRlci1leHBvcnQtc25pcHBldCAuIG9yZy1leHBvcnQtZmlsdGVyLWV4cG9ydC1zbmlwcGV0LWZ1 bmN0aW9ucykKICAgICg6ZmlsdGVyLWZpbmFsLW91dHB1dCAuIG9yZy1leHBvcnQtZmlsdGVyLWZp bmFsLW91dHB1dC1mdW5jdGlvbnMpCiAgICAoOmZpbHRlci1maXhlZC13aWR0aCAuIG9yZy1leHBv cnQtZmlsdGVyLWZpeGVkLXdpZHRoLWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLWZvb3Rub3RlLWRl ZmluaXRpb24gLiBvcmctZXhwb3J0LWZpbHRlci1mb290bm90ZS1kZWZpbml0aW9uLWZ1bmN0aW9u cykKICAgICg6ZmlsdGVyLWZvb3Rub3RlLXJlZmVyZW5jZSAuIG9yZy1leHBvcnQtZmlsdGVyLWZv b3Rub3RlLXJlZmVyZW5jZS1mdW5jdGlvbnMpCiAgICAoOmZpbHRlci1oZWFkbGluZSAuIG9yZy1l eHBvcnQtZmlsdGVyLWhlYWRsaW5lLWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLWhvcml6b250YWwt cnVsZSAuIG9yZy1leHBvcnQtZmlsdGVyLWhvcml6b250YWwtcnVsZS1mdW5jdGlvbnMpCiAgICAo OmZpbHRlci1pbmxpbmUtYmFiZWwtY2FsbCAuIG9yZy1leHBvcnQtZmlsdGVyLWlubGluZS1iYWJl bC1jYWxsLWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLWlubGluZS1zcmMtYmxvY2sgLiBvcmctZXhw b3J0LWZpbHRlci1pbmxpbmUtc3JjLWJsb2NrLWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLWlubGlu ZXRhc2sgLiBvcmctZXhwb3J0LWZpbHRlci1pbmxpbmV0YXNrLWZ1bmN0aW9ucykKICAgICg6Zmls dGVyLWl0YWxpYyAuIG9yZy1leHBvcnQtZmlsdGVyLWl0YWxpYy1mdW5jdGlvbnMpCiAgICAoOmZp bHRlci1pdGVtIC4gb3JnLWV4cG9ydC1maWx0ZXItaXRlbS1mdW5jdGlvbnMpCiAgICAoOmZpbHRl ci1rZXl3b3JkIC4gb3JnLWV4cG9ydC1maWx0ZXIta2V5d29yZC1mdW5jdGlvbnMpCiAgICAoOmZp bHRlci1sYXRleC1lbnZpcm9ubWVudCAuIG9yZy1leHBvcnQtZmlsdGVyLWxhdGV4LWVudmlyb25t ZW50LWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLWxhdGV4LWZyYWdtZW50IC4gb3JnLWV4cG9ydC1m aWx0ZXItbGF0ZXgtZnJhZ21lbnQtZnVuY3Rpb25zKQogICAgKDpmaWx0ZXItbGluZS1icmVhayAu IG9yZy1leHBvcnQtZmlsdGVyLWxpbmUtYnJlYWstZnVuY3Rpb25zKQogICAgKDpmaWx0ZXItbGlu ayAuIG9yZy1leHBvcnQtZmlsdGVyLWxpbmstZnVuY3Rpb25zKQogICAgKDpmaWx0ZXItbm9kZS1w cm9wZXJ0eSAuIG9yZy1leHBvcnQtZmlsdGVyLW5vZGUtcHJvcGVydHktZnVuY3Rpb25zKQogICAg KDpmaWx0ZXItb3B0aW9ucyAuIG9yZy1leHBvcnQtZmlsdGVyLW9wdGlvbnMtZnVuY3Rpb25zKQog ICAgKDpmaWx0ZXItcGFyYWdyYXBoIC4gb3JnLWV4cG9ydC1maWx0ZXItcGFyYWdyYXBoLWZ1bmN0 aW9ucykKICAgICg6ZmlsdGVyLXBhcnNlLXRyZWUgLiBvcmctZXhwb3J0LWZpbHRlci1wYXJzZS10 cmVlLWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLXBsYWluLWxpc3QgLiBvcmctZXhwb3J0LWZpbHRl ci1wbGFpbi1saXN0LWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLXBsYWluLXRleHQgLiBvcmctZXhw b3J0LWZpbHRlci1wbGFpbi10ZXh0LWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLXBsYW5uaW5nIC4g b3JnLWV4cG9ydC1maWx0ZXItcGxhbm5pbmctZnVuY3Rpb25zKQogICAgKDpmaWx0ZXItcHJvcGVy dHktZHJhd2VyIC4gb3JnLWV4cG9ydC1maWx0ZXItcHJvcGVydHktZHJhd2VyLWZ1bmN0aW9ucykK ICAgICg6ZmlsdGVyLXF1b3RlLWJsb2NrIC4gb3JnLWV4cG9ydC1maWx0ZXItcXVvdGUtYmxvY2st ZnVuY3Rpb25zKQogICAgKDpmaWx0ZXItcmFkaW8tdGFyZ2V0IC4gb3JnLWV4cG9ydC1maWx0ZXIt cmFkaW8tdGFyZ2V0LWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLXNlY3Rpb24gLiBvcmctZXhwb3J0 LWZpbHRlci1zZWN0aW9uLWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLXNwZWNpYWwtYmxvY2sgLiBv cmctZXhwb3J0LWZpbHRlci1zcGVjaWFsLWJsb2NrLWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLXNy Yy1ibG9jayAuIG9yZy1leHBvcnQtZmlsdGVyLXNyYy1ibG9jay1mdW5jdGlvbnMpCiAgICAoOmZp bHRlci1zdGF0aXN0aWNzLWNvb2tpZSAuIG9yZy1leHBvcnQtZmlsdGVyLXN0YXRpc3RpY3MtY29v a2llLWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLXN0cmlrZS10aHJvdWdoIC4gb3JnLWV4cG9ydC1m aWx0ZXItc3RyaWtlLXRocm91Z2gtZnVuY3Rpb25zKQogICAgKDpmaWx0ZXItc3Vic2NyaXB0IC4g b3JnLWV4cG9ydC1maWx0ZXItc3Vic2NyaXB0LWZ1bmN0aW9ucykKICAgICg6ZmlsdGVyLXN1cGVy c2NyaXB0IC4gb3JnLWV4cG9ydC1maWx0ZXItc3VwZXJzY3JpcHQtZnVuY3Rpb25zKQogICAgKDpm aWx0ZXItdGFibGUgLiBvcmctZXhwb3J0LWZpbHRlci10YWJsZS1mdW5jdGlvbnMpCiAgICAoOmZp bHRlci10YWJsZS1jZWxsIC4gb3JnLWV4cG9ydC1maWx0ZXItdGFibGUtY2VsbC1mdW5jdGlvbnMp CiAgICAoOmZpbHRlci10YWJsZS1yb3cgLiBvcmctZXhwb3J0LWZpbHRlci10YWJsZS1yb3ctZnVu Y3Rpb25zKQogICAgKDpmaWx0ZXItdGFyZ2V0IC4gb3JnLWV4cG9ydC1maWx0ZXItdGFyZ2V0LWZ1 bmN0aW9ucykKICAgICg6ZmlsdGVyLXRpbWVzdGFtcCAuIG9yZy1leHBvcnQtZmlsdGVyLXRpbWVz dGFtcC1mdW5jdGlvbnMpCiAgICAoOmZpbHRlci11bmRlcmxpbmUgLiBvcmctZXhwb3J0LWZpbHRl ci11bmRlcmxpbmUtZnVuY3Rpb25zKQogICAgKDpmaWx0ZXItdmVyYmF0aW0gLiBvcmctZXhwb3J0 LWZpbHRlci12ZXJiYXRpbS1mdW5jdGlvbnMpCiAgICAoOmZpbHRlci12ZXJzZS1ibG9jayAuIG9y Zy1leHBvcnQtZmlsdGVyLXZlcnNlLWJsb2NrLWZ1bmN0aW9ucykpCiAgIkFsaXN0IGJldHdlZW4g ZmlsdGVycyBwcm9wZXJ0aWVzIGFuZCBpbml0aWFsIHZhbHVlcy4KClRoZSBrZXkgb2YgZWFjaCBh c3NvY2lhdGlvbiBpcyBhIHByb3BlcnR5IG5hbWUgYWNjZXNzaWJsZSB0aHJvdWdoCnRoZSBjb21t dW5pY2F0aW9uIGNoYW5uZWwuICBJdHMgdmFsdWUgaXMgYSBjb25maWd1cmFibGUgZ2xvYmFsCnZh cmlhYmxlIGRlZmluaW5nIGluaXRpYWwgZmlsdGVycy4KClRoaXMgbGlzdCBpcyBtZWFudCB0byBp bnN0YWxsIHVzZXIgc3BlY2lmaWVkIGZpbHRlcnMuICBCYWNrLWVuZApkZXZlbG9wZXJzIG1heSBp bnN0YWxsIHRoZWlyIG93biBmaWx0ZXJzIHVzaW5nCmBvcmctZXhwb3J0LWRlZmluZS1iYWNrZW5k Jy4gIEZpbHRlcnMgZGVmaW5lZCB0aGVyZSB3aWxsIGFsd2F5cwpiZSBwcmVwZW5kZWQgdG8gdGhl IGN1cnJlbnQgbGlzdCwgc28gdGhleSBhbHdheXMgZ2V0IGFwcGxpZWQKZmlyc3QuIikKCihkZWZj b25zdCBvcmctZXhwb3J0LWRlZmF1bHQtaW5saW5lLWltYWdlLXJ1bGUKICBgKCgiZmlsZSIgLgog ICAgICwoZm9ybWF0ICJcXC4lc1xcJyIKCSAgICAgIChyZWdleHAtb3B0CgkgICAgICAgJygicG5n IiAianBlZyIgImpwZyIgImdpZiIgInRpZmYiICJ0aWYiICJ4Ym0iCgkJICJ4cG0iICJwYm0iICJw Z20iICJwcG0iKSB0KSkpKQogICJEZWZhdWx0IHJ1bGUgZm9yIGxpbmsgbWF0Y2hpbmcgYW4gaW5s aW5lIGltYWdlLgpUaGlzIHJ1bGUgYXBwbGllcyB0byBsaW5rcyB3aXRoIG5vIGRlc2NyaXB0aW9u LiAgQnkgZGVmYXVsdCwgaXQKd2lsbCBiZSBjb25zaWRlcmVkIGFzIGFuIGlubGluZSBpbWFnZSBp ZiBpdCB0YXJnZXRzIGEgbG9jYWwgZmlsZQp3aG9zZSBleHRlbnNpb24gaXMgZWl0aGVyIFwicG5n XCIsIFwianBlZ1wiLCBcImpwZ1wiLCBcImdpZlwiLApcInRpZmZcIiwgXCJ0aWZcIiwgXCJ4Ym1c IiwgXCJ4cG1cIiwgXCJwYm1cIiwgXCJwZ21cIiBvciBcInBwbVwiLgpTZWUgYG9yZy1leHBvcnQt aW5saW5lLWltYWdlLXAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0CnJ1bGVzLiIpCgooZGVm Y29uc3Qgb3JnLWV4cG9ydC1pZ25vcmVkLWxvY2FsLXZhcmlhYmxlcwogICcob3JnLWZvbnQtbG9j ay1rZXl3b3JkcwogICAgb3JnLWVsZW1lbnQtLWNhY2hlLWNoYW5nZS10aWMgb3JnLWVsZW1lbnQt LWNhY2hlLWNoYW5nZS10aWMgb3JnLWVsZW1lbnQtLWNhY2hlLXNpemUKICAgIG9yZy1lbGVtZW50 LS1jYWNoZS1zeW5jLWtleXMtdmFsdWUgb3JnLWVsZW1lbnQtLWNhY2hlLWNoYW5nZS13YXJuaW5n CiAgICBvcmctZWxlbWVudC0tY2FjaGUgb3JnLWVsZW1lbnQtLWNhY2hlLW9iamVjdHMgb3JnLWVs ZW1lbnQtLWNhY2hlLXN5bmMta2V5cwogICAgb3JnLWVsZW1lbnQtLWNhY2hlLXN5bmMtcmVxdWVz dHMgb3JnLWVsZW1lbnQtLWNhY2hlLXN5bmMtdGltZXIpCiAgIkxpc3Qgb2YgdmFyaWFibGVzIG5v dCBjb3BpZWQgdGhyb3VnaCB1cG9uIGJ1ZmZlciBkdXBsaWNhdGlvbi4KRXhwb3J0IHByb2Nlc3Mg dGFrZXMgcGxhY2Ugb24gYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCBidWZmZXIuCldoZW4gdGhpcyBj b3B5IGlzIGNyZWF0ZWQsIGFsbCBPcmcgcmVsYXRlZCBsb2NhbCB2YXJpYWJsZXMgbm90IGluCnRo aXMgbGlzdCBhcmUgY29waWVkIHRvIHRoZSBuZXcgYnVmZmVyLiAgVmFyaWFibGVzIHdpdGggYW4K dW5yZWFkYWJsZSB2YWx1ZSBhcmUgYWxzbyBpZ25vcmVkLiIpCgooZGVmdmFyIG9yZy1leHBvcnQt YXN5bmMtZGVidWcgbmlsCiAgIk5vbi1uaWwgbWVhbnMgYXN5bmNocm9ub3VzIGV4cG9ydCBwcm9j ZXNzIHNob3VsZCBsZWF2ZSBkYXRhIGJlaGluZC4KClRoaXMgZGF0YSBpcyBmb3VuZCBpbiB0aGUg YXBwcm9wcmlhdGUgXCIqT3JnIEV4cG9ydCBQcm9jZXNzKlwiCmJ1ZmZlciwgYW5kIGluIGZpbGVz IHByZWZpeGVkIHdpdGggXCJvcmctZXhwb3J0LXByb2Nlc3NcIiBhbmQKbG9jYXRlZCBpbiBgdGVt cG9yYXJ5LWZpbGUtZGlyZWN0b3J5Jy4KCldoZW4gbm9uLW5pbCwgaXQgd2lsbCBhbHNvIHNldCBg ZGVidWctb24tZXJyb3InIHRvIGEgbm9uLW5pbAp2YWx1ZSBpbiB0aGUgZXh0ZXJuYWwgcHJvY2Vz cy4iKQoKKGRlZnZhciBvcmctZXhwb3J0LXN0YWNrLWNvbnRlbnRzIG5pbAogICJSZWNvcmQgYXN5 bmNocm9ub3VzbHkgZ2VuZXJhdGVkIGV4cG9ydCByZXN1bHRzIGFuZCBwcm9jZXNzZXMuClRoaXMg aXMgYW4gYWxpc3Q6IGl0cyBDQVIgaXMgdGhlIHNvdXJjZSBvZiB0aGUKcmVzdWx0IChkZXN0aW5h dGlvbiBmaWxlIG9yIGJ1ZmZlciBmb3IgYSBmaW5pc2hlZCBwcm9jZXNzLApvcmlnaW5hbCBidWZm ZXIgZm9yIGEgcnVubmluZyBvbmUpIGFuZCBpdHMgQ0RSIGlzIGEgbGlzdApjb250YWluaW5nIHRo ZSBiYWNrLWVuZCB1c2VkLCBhcyBhIHN5bWJvbCwgYW5kIGVpdGhlciBhIHByb2Nlc3MKb3IgdGhl IHRpbWUgYXQgd2hpY2ggaXQgZmluaXNoZWQuICBJdCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBtZW51 CmZyb20gYG9yZy1leHBvcnQtc3RhY2snLiIpCgooZGVmdmFyIG9yZy1leHBvcnQtcmVnaXN0ZXJl ZC1iYWNrZW5kcyBuaWwKICAiTGlzdCBvZiBiYWNrZW5kcyBjdXJyZW50bHkgYXZhaWxhYmxlIGlu IHRoZSBleHBvcnRlci4KVGhpcyB2YXJpYWJsZSBpcyBzZXQgd2l0aCBgb3JnLWV4cG9ydC1kZWZp bmUtYmFja2VuZCcgYW5kCmBvcmctZXhwb3J0LWRlZmluZS1kZXJpdmVkLWJhY2tlbmQnIGZ1bmN0 aW9ucy4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWRpc3BhdGNoLWxhc3QtYWN0aW9uIG5pbAogICJM YXN0IGNvbW1hbmQgY2FsbGVkIGZyb20gdGhlIGRpc3BhdGNoZXIuClRoZSB2YWx1ZSBzaG91bGQg YmUgYSBsaXN0LiAgSXRzIENBUiBpcyB0aGUgYWN0aW9uLCBhcyBhIHN5bWJvbCwKYW5kIGl0cyBD RFIgaXMgYSBsaXN0IG9mIGV4cG9ydCBvcHRpb25zLiIpCgooZGVmdmFyIG9yZy1leHBvcnQtZGlz cGF0Y2gtbGFzdC1wb3NpdGlvbiAobWFrZS1tYXJrZXIpCiAgIlRoZSBwb3NpdGlvbiB3aGVyZSB0 aGUgbGFzdCBleHBvcnQgY29tbWFuZCB3YXMgY3JlYXRlZCB1c2luZyB0aGUgZGlzcGF0Y2hlci4K VGhpcyBtYXJrZXIgd2lsbCBiZSB1c2VkIHdpdGggYFxcW3VuaXZlcnNhbC1hcmd1bWVudF0gQy1j IEMtZScgdG8gbWFrZSBzdXJlIGV4cG9ydCByZXBldGl0aW9uCnVzZXMgdGhlIHNhbWUgc3VidHJl ZSBpZiB0aGUgcHJldmlvdXMgY29tbWFuZCB3YXMgcmVzdHJpY3RlZCB0byBhIHN1YnRyZWUuIikK Cjs7IEZvciBjb21wYXRpYmlsaXR5IHdpdGggT3JnIDwgOAooZGVmdmFyIG9yZy1leHBvcnQtY3Vy cmVudC1iYWNrZW5kIG5pbAogICJOYW1lLCBpZiBhbnksIG9mIHRoZSBiYWNrLWVuZCB1c2VkIGR1 cmluZyBhbiBleHBvcnQgcHJvY2Vzcy4KCkl0cyB2YWx1ZSBpcyBhIHN5bWJvbCBzdWNoIGFzIGBo dG1sJywgYGxhdGV4JywgYGFzY2lpJywgb3IgbmlsIGlmCnRoZSBiYWNrLWVuZCBpcyBhbm9ueW1v dXMgKHNlZSBgb3JnLWV4cG9ydC1jcmVhdGUtYmFja2VuZCcpIG9yIGlmCnRoZXJlIGlzIG5vIGV4 cG9ydCBwcm9jZXNzIGluIHByb2dyZXNzLgoKSXQgY2FuIGJlIHVzZWQgdG8gdGVhY2ggQmFiZWwg YmxvY2tzIGhvdyB0byBhY3QgZGlmZmVyZW50bHkKYWNjb3JkaW5nIHRvIHRoZSBiYWNrLWVuZCB1 c2VkLiIpCgoKDAo7OzsgVXNlci1jb25maWd1cmFibGUgVmFyaWFibGVzCjs7Cjs7IENvbmZpZ3Vy YXRpb24gZm9yIHRoZSBtYXNzZXMuCjs7Cjs7IFRoZXkgc2hvdWxkIG5ldmVyIGJlIGFjY2Vzc2Vk IGRpcmVjdGx5LCBhcyB0aGVpciB2YWx1ZSBpcyB0byBiZQo7OyBzdG9yZWQgaW4gYSBwcm9wZXJ0 eSBsaXN0IChjZi4gYG9yZy1leHBvcnQtb3B0aW9ucy1hbGlzdCcpLgo7OyBCYWNrLWVuZHMgd2ls bCByZWFkIHRoZWlyIHZhbHVlIGZyb20gdGhlcmUgaW5zdGVhZC4KCihkZWZncm91cCBvcmctZXhw b3J0IG5pbAogICJPcHRpb25zIGZvciBleHBvcnRpbmcgT3JnIG1vZGUgZmlsZXMuIgogIDp0YWcg Ik9yZyBFeHBvcnQiCiAgOmdyb3VwICdvcmcpCgooZGVmZ3JvdXAgb3JnLWV4cG9ydC1nZW5lcmFs IG5pbAogICJHZW5lcmFsIG9wdGlvbnMgZm9yIGV4cG9ydCBlbmdpbmUuIgogIDp0YWcgIk9yZyBF eHBvcnQgR2VuZXJhbCIKICA6Z3JvdXAgJ29yZy1leHBvcnQpCgooZGVmY3VzdG9tIG9yZy1leHBv cnQtd2l0aC1hcmNoaXZlZC10cmVlcyAnaGVhZGxpbmUKICAiV2hldGhlciBzdWItdHJlZXMgd2l0 aCB0aGUgQVJDSElWRSB0YWcgc2hvdWxkIGJlIGV4cG9ydGVkLgoKVGhpcyBjYW4gaGF2ZSB0aHJl ZSBkaWZmZXJlbnQgdmFsdWVzOgpuaWwgICAgICAgICBEbyBub3QgZXhwb3J0LCBwcmV0ZW5kIHRo aXMgdHJlZSBpcyBub3QgcHJlc2VudC4KdCAgICAgICAgICAgRG8gZXhwb3J0IHRoZSBlbnRpcmUg dHJlZS4KYGhlYWRsaW5lJyAgT25seSBleHBvcnQgdGhlIGhlYWRsaW5lLCBidXQgc2tpcCB0aGUg dHJlZSBiZWxvdyBpdC4KClRoaXMgb3B0aW9uIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSBPUFRJ T05TIGtleXdvcmQsCmUuZy4gXCJhcmNoOm5pbFwiLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2Vu ZXJhbAogIDp0eXBlICcoY2hvaWNlCgkgIChjb25zdCA6dGFnICJOb3QgYXQgYWxsIiBuaWwpCgkg IChjb25zdCA6dGFnICJIZWFkbGluZSBvbmx5IiBoZWFkbGluZSkKCSAgKGNvbnN0IDp0YWcgIkVu dGlyZWx5IiB0KSkKICA6c2FmZSAobGFtYmRhICh4KSAobWVtcSB4ICcodCBuaWwgaGVhZGxpbmUp KSkpCgooZGVmY3VzdG9tIG9yZy1leHBvcnQtd2l0aC1hdXRob3IgdAogICJOb24tbmlsIG1lYW5z IGluc2VydCBhdXRob3IgbmFtZSBpbnRvIHRoZSBleHBvcnRlZCBmaWxlLgpUaGlzIG9wdGlvbiBj YW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgT1BUSU9OUyBrZXl3b3JkLAplLmcuIFwiYXV0aG9yOm5p bFwiLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAogIDp0eXBlICdib29sZWFuCiAgOnNh ZmUgIydib29sZWFucCkKCihkZWZjdXN0b20gb3JnLWV4cG9ydC13aXRoLWNsb2NrcyBuaWwKICAi Tm9uLW5pbCBtZWFucyBleHBvcnQgQ0xPQ0sga2V5d29yZHMuClRoaXMgb3B0aW9uIGNhbiBhbHNv IGJlIHNldCB3aXRoIHRoZSBPUFRJT05TIGtleXdvcmQsCmUuZy4gXCJjOnRcIi4iCiAgOmdyb3Vw ICdvcmctZXhwb3J0LWdlbmVyYWwKICA6dHlwZSAnYm9vbGVhbgogIDpzYWZlICMnYm9vbGVhbnAp CgooZGVmY3VzdG9tIG9yZy1leHBvcnQtd2l0aC1jcmVhdG9yIG5pbAogICJOb24tbmlsIG1lYW5z IHRoZSBwb3N0YW1ibGUgc2hvdWxkIGNvbnRhaW4gYSBjcmVhdG9yIHNlbnRlbmNlLgoKVGhlIHNl bnRlbmNlIGNhbiBiZSBzZXQgaW4gYG9yZy1leHBvcnQtY3JlYXRvci1zdHJpbmcnLCB3aGljaApz ZWUuCgpUaGlzIG9wdGlvbiBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgT1BUSU9OUyBrZXl3b3Jk LCBlLmcuLApcImNyZWF0b3I6dFwiLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAogIDp2 ZXJzaW9uICIyNi4xIgogIDpwYWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOC4zIikKICA6dHlwZSAn Ym9vbGVhbgogIDpzYWZlICMnYm9vbGVhbnApCgooZGVmY3VzdG9tIG9yZy1leHBvcnQtd2l0aC1k YXRlIHQKICAiTm9uLW5pbCBtZWFucyBpbnNlcnQgZGF0ZSBpbiB0aGUgZXhwb3J0ZWQgZG9jdW1l bnQuClRoaXMgb3B0aW9uIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSBPUFRJT05TIGtleXdvcmQs CmUuZy4gXCJkYXRlOm5pbFwiLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAogIDp0eXBl ICdib29sZWFuCiAgOnNhZmUgIydib29sZWFucCkKCihkZWZjdXN0b20gb3JnLWV4cG9ydC1kYXRl LXRpbWVzdGFtcC1mb3JtYXQgbmlsCiAgIlRpbWUtc3RhbXAgZm9ybWF0IHN0cmluZyB0byB1c2Ug Zm9yIERBVEUga2V5d29yZC4KClRoZSBmb3JtYXQgc3RyaW5nLCB3aGVuIHNwZWNpZmllZCwgb25s eSBhcHBsaWVzIGlmIGRhdGUgY29uc2lzdHMKaW4gYSBzaW5nbGUgdGltZS1zdGFtcC4gIE90aGVy d2lzZSBpdHMgdmFsdWUgd2lsbCBiZSBpZ25vcmVkLgoKU2VlIGBmb3JtYXQtdGltZS1zdHJpbmcn IGZvciBkZXRhaWxzIG9uIGhvdyB0byBidWlsZCB0aGlzCnN0cmluZy4iCiAgOmdyb3VwICdvcmct ZXhwb3J0LWdlbmVyYWwKICA6dHlwZSAnKGNob2ljZQoJICAoc3RyaW5nIDp0YWcgIlRpbWUtc3Rh bXAgZm9ybWF0IHN0cmluZyIpCgkgIChjb25zdCA6dGFnICJObyBmb3JtYXQgc3RyaW5nIiBuaWwp KQogIDpzYWZlIChsYW1iZGEgKHgpIChvciAobnVsbCB4KSAoc3RyaW5ncCB4KSkpKQoKKGRlZmN1 c3RvbSBvcmctZXhwb3J0LWNyZWF0b3Itc3RyaW5nCiAgKGZvcm1hdCAiRW1hY3MgJXMgKE9yZyBt b2RlICVzKSIKCSAgZW1hY3MtdmVyc2lvbgoJICAoaWYgKGZib3VuZHAgJ29yZy12ZXJzaW9uKSAo b3JnLXZlcnNpb24pICJ1bmtub3duIHZlcnNpb24iKSkKICAiSW5mb3JtYXRpb24gYWJvdXQgdGhl IGNyZWF0b3Igb2YgdGhlIGRvY3VtZW50LgpUaGlzIG9wdGlvbiBjYW4gYWxzbyBiZSBzZXQgb24g d2l0aCB0aGUgQ1JFQVRPUiBrZXl3b3JkLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAog IDp0eXBlICcoc3RyaW5nIDp0YWcgIkNyZWF0b3Igc3RyaW5nIikKICA6c2FmZSAjJ3N0cmluZ3Ap CgooZGVmY3VzdG9tIG9yZy1leHBvcnQtd2l0aC1kcmF3ZXJzICcobm90ICJMT0dCT09LIikKICAi Tm9uLW5pbCBtZWFucyBleHBvcnQgY29udGVudHMgb2Ygc3RhbmRhcmQgZHJhd2Vycy4KCldoZW4g dCwgYWxsIGRyYXdlcnMgYXJlIGV4cG9ydGVkLiAgVGhpcyBtYXkgYWxzbyBiZSBhIGxpc3Qgb2YK ZHJhd2VyIG5hbWVzIHRvIGV4cG9ydCwgYXMgc3RyaW5ncy4gIElmIHRoYXQgbGlzdCBzdGFydHMg d2l0aApgbm90Jywgb25seSBkcmF3ZXJzIHdpdGggc3VjaCBuYW1lcyB3aWxsIGJlIGlnbm9yZWQu CgpUaGlzIHZhcmlhYmxlIGRvZXNuJ3QgYXBwbHkgdG8gcHJvcGVydGllcyBkcmF3ZXJzLiAgU2Vl CmBvcmctZXhwb3J0LXdpdGgtcHJvcGVydGllcycgaW5zdGVhZC4KClRoaXMgb3B0aW9uIGNhbiBh bHNvIGJlIHNldCB3aXRoIHRoZSBPUFRJT05TIGtleXdvcmQsCmUuZy4gXCJkOm5pbFwiLiIKICA6 Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAogIDp2ZXJzaW9uICIyNC40IgogIDpwYWNrYWdlLXZl cnNpb24gJyhPcmcgLiAiOC4wIikKICA6dHlwZSAnKGNob2ljZQoJICAoY29uc3QgOnRhZyAiQWxs IGRyYXdlcnMiIHQpCgkgIChjb25zdCA6dGFnICJOb25lIiBuaWwpCgkgIChyZXBlYXQgOnRhZyAi U2VsZWN0ZWQgZHJhd2VycyIKCQkgIChzdHJpbmcgOnRhZyAiRHJhd2VyIG5hbWUiKSkKCSAgKGxp c3QgOnRhZyAiSWdub3JlZCBkcmF3ZXJzIgoJCShjb25zdCA6Zm9ybWF0ICIiIG5vdCkKCQkocmVw ZWF0IDp0YWcgIlNwZWNpZnkgbmFtZXMgb2YgZHJhd2VycyB0byBpZ25vcmUgZHVyaW5nIGV4cG9y dCIKCQkJOmlubGluZSB0CgkJCShzdHJpbmcgOnRhZyAiRHJhd2VyIG5hbWUiKSkpKQogIDpzYWZl IChsYW1iZGEgKHgpIChvciAoYm9vbGVhbnAgeCkgKGNvbnNwIHgpKSkpCgooZGVmY3VzdG9tIG9y Zy1leHBvcnQtd2l0aC1lbWFpbCBuaWwKICAiTm9uLW5pbCBtZWFucyBpbnNlcnQgYXV0aG9yIGVt YWlsIGludG8gdGhlIGV4cG9ydGVkIGZpbGUuClRoaXMgb3B0aW9uIGNhbiBhbHNvIGJlIHNldCB3 aXRoIHRoZSBPUFRJT05TIGtleXdvcmQsCmUuZy4gXCJlbWFpbDp0XCIuIgogIDpncm91cCAnb3Jn LWV4cG9ydC1nZW5lcmFsCiAgOnR5cGUgJ2Jvb2xlYW4KICA6c2FmZSAjJ2Jvb2xlYW5wKQoKKGRl ZmN1c3RvbSBvcmctZXhwb3J0LXdpdGgtZW1waGFzaXplIHQKICAiTm9uLW5pbCBtZWFucyBpbnRl cnByZXQgKndvcmQqLCAvd29yZC8sIF93b3JkXyBhbmQgK3dvcmQrLgoKSWYgdGhlIGV4cG9ydCB0 YXJnZXQgc3VwcG9ydHMgZW1waGFzaXppbmcgdGV4dCwgdGhlIHdvcmQgd2lsbCBiZQp0eXBlc2V0 IGluIGJvbGQsIGl0YWxpYywgd2l0aCBhbiB1bmRlcmxpbmUgb3Igc3RyaWtlLXRocm91Z2gsCnJl c3BlY3RpdmVseS4KClRoaXMgb3B0aW9uIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSBPUFRJT05T IGtleXdvcmQsCmUuZy4gXCIqOm5pbFwiLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAog IDp0eXBlICdib29sZWFuCiAgOnNhZmUgIydib29sZWFucCkKCihkZWZjdXN0b20gb3JnLWV4cG9y dC1leGNsdWRlLXRhZ3MgJygibm9leHBvcnQiKQogICJUYWdzIHRoYXQgZXhjbHVkZSBhIHRyZWUg ZnJvbSBleHBvcnQuCgpBbGwgdHJlZXMgY2FycnlpbmcgYW55IG9mIHRoZXNlIHRhZ3Mgd2lsbCBi ZSBleGNsdWRlZCBmcm9tCmV4cG9ydC4gIFRoaXMgaXMgd2l0aG91dCBjb25kaXRpb24sIHNvIGV2 ZW4gc3VidHJlZXMgaW5zaWRlIHRoYXQKY2Fycnkgb25lIG9mIHRoZSBgb3JnLWV4cG9ydC1zZWxl Y3QtdGFncycgd2lsbCBiZSByZW1vdmVkLgoKVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgc2V0IHdp dGggdGhlIEVYQ0xVREVfVEFHUyBrZXl3b3JkLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJh bAogIDp0eXBlICcocmVwZWF0IChzdHJpbmcgOnRhZyAiVGFnIikpCiAgOnNhZmUgKGxhbWJkYSAo eCkgKGFuZCAobGlzdHAgeCkgKGNsLWV2ZXJ5ICMnc3RyaW5ncCB4KSkpKQoKKGRlZmN1c3RvbSBv cmctZXhwb3J0LXdpdGgtZml4ZWQtd2lkdGggdAogICJOb24tbmlsIG1lYW5zIGV4cG9ydCBsaW5l cyBzdGFydGluZyB3aXRoIFwiOlwiLgpUaGlzIG9wdGlvbiBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0 aGUgT1BUSU9OUyBrZXl3b3JkLAplLmcuIFwiOjpuaWxcIi4iCiAgOmdyb3VwICdvcmctZXhwb3J0 LWdlbmVyYWwKICA6dmVyc2lvbiAiMjQuNCIKICA6cGFja2FnZS12ZXJzaW9uICcoT3JnIC4gIjgu MCIpCiAgOnR5cGUgJ2Jvb2xlYW4KICA6c2FmZSAjJ2Jvb2xlYW5wKQoKKGRlZmN1c3RvbSBvcmct ZXhwb3J0LXdpdGgtZm9vdG5vdGVzIHQKICAiTm9uLW5pbCBtZWFucyBPcmcgZm9vdG5vdGVzIHNo b3VsZCBiZSBleHBvcnRlZC4KVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIE9Q VElPTlMga2V5d29yZCwKZS5nLiBcImY6bmlsXCIuIgogIDpncm91cCAnb3JnLWV4cG9ydC1nZW5l cmFsCiAgOnR5cGUgJ2Jvb2xlYW4KICA6c2FmZSAjJ2Jvb2xlYW5wKQoKKGRlZmN1c3RvbSBvcmct ZXhwb3J0LXdpdGgtbGF0ZXggdAogICJOb24tbmlsIG1lYW5zIHByb2Nlc3MgTGFUZVggZW52aXJv bm1lbnRzIGFuZCBmcmFnbWVudHMuCgpUaGlzIG9wdGlvbiBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0 aGUgT1BUSU9OUyBsaW5lLAplLmcuIFwidGV4OnZlcmJhdGltXCIuICBBbGxvd2VkIHZhbHVlcyBh cmU6CgpuaWwgICAgICAgICBJZ25vcmUgbWF0aCBzbmlwcGV0cy4KYHZlcmJhdGltJyAgS2VlcCBl dmVyeXRoaW5nIGluIHZlcmJhdGltLgp0ICAgICAgICAgICBBbGxvdyBleHBvcnQgb2YgbWF0aCBz bmlwcGV0cy4iCiAgOmdyb3VwICdvcmctZXhwb3J0LWdlbmVyYWwKICA6dmVyc2lvbiAiMjQuNCIK ICA6cGFja2FnZS12ZXJzaW9uICcoT3JnIC4gIjguMCIpCiAgOnR5cGUgJyhjaG9pY2UKCSAgKGNv bnN0IDp0YWcgIkRvIG5vdCBwcm9jZXNzIG1hdGggaW4gYW55IHdheSIgbmlsKQoJICAoY29uc3Qg OnRhZyAiSW50ZXJwcmV0IG1hdGggc25pcHBldHMiIHQpCgkgIChjb25zdCA6dGFnICJMZWF2ZSBt YXRoIHZlcmJhdGltIiB2ZXJiYXRpbSkpCiAgOnNhZmUgKGxhbWJkYSAoeCkgKG1lbXEgeCAnKHQg bmlsIHZlcmJhdGltKSkpKQoKKGRlZmN1c3RvbSBvcmctZXhwb3J0LWhlYWRsaW5lLWxldmVscyAz CiAgIlRoZSBsYXN0IGxldmVsIHdoaWNoIGlzIHN0aWxsIGV4cG9ydGVkIGFzIGEgaGVhZGxpbmUu CgpJbmZlcmlvciBsZXZlbHMgd2lsbCB1c3VhbGx5IHByb2R1Y2UgaXRlbWl6ZSBvciBlbnVtZXJh dGUgbGlzdHMKd2hlbiBleHBvcnRlZCwgYnV0IGJhY2stZW5kIGJlaGF2aW9yIG1heSBkaWZmZXIu CgpUaGlzIG9wdGlvbiBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgT1BUSU9OUyBrZXl3b3JkLApl LmcuIFwiSDoyXCIuIgogIDpncm91cCAnb3JnLWV4cG9ydC1nZW5lcmFsCiAgOnR5cGUgJ2ludGVn ZXIKICA6c2FmZSAjJ2ludGVnZXJwKQoKKGRlZmN1c3RvbSBvcmctZXhwb3J0LWRlZmF1bHQtbGFu Z3VhZ2UgImVuIgogICJUaGUgZGVmYXVsdCBsYW5ndWFnZSBmb3IgZXhwb3J0IGFuZCBjbG9ja3Rh YmxlIHRyYW5zbGF0aW9ucywgYXMgYSBzdHJpbmcuClRoaXMgbWF5IGhhdmUgYW4gYXNzb2NpYXRp b24gaW4KYG9yZy1jbG9jay1jbG9ja3RhYmxlLWxhbmd1YWdlLXNldHVwJywKYG9yZy1leHBvcnQt c21hcnQtcXVvdGVzLWFsaXN0JyBhbmQgYG9yZy1leHBvcnQtZGljdGlvbmFyeScuClRoaXMgb3B0 aW9uIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSBMQU5HVUFHRSBrZXl3b3JkLiIKICA6Z3JvdXAg J29yZy1leHBvcnQtZ2VuZXJhbAogIDp0eXBlICcoc3RyaW5nIDp0YWcgIkxhbmd1YWdlIikKICA6 c2FmZSAjJ3N0cmluZ3ApCgooZGVmY3VzdG9tIG9yZy1leHBvcnQtcHJlc2VydmUtYnJlYWtzIG5p bAogICJOb24tbmlsIG1lYW5zIHByZXNlcnZlIGFsbCBsaW5lIGJyZWFrcyB3aGVuIGV4cG9ydGlu Zy4KVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIE9QVElPTlMga2V5d29yZCwK ZS5nLiBcIlxcbjp0XCIuIgogIDpncm91cCAnb3JnLWV4cG9ydC1nZW5lcmFsCiAgOnR5cGUgJ2Jv b2xlYW4KICA6c2FmZSAjJ2Jvb2xlYW5wKQoKKGRlZmN1c3RvbSBvcmctZXhwb3J0LXdpdGgtZW50 aXRpZXMgdAogICJOb24tbmlsIG1lYW5zIGludGVycHJldCBlbnRpdGllcyB3aGVuIGV4cG9ydGlu Zy4KCkZvciBleGFtcGxlLCBIVE1MIGV4cG9ydCBjb252ZXJ0cyBcXGFscGhhIHRvICZhbHBoYTsg YW5kIFxcQUEgdG8KJkFyaW5nOy4KCkZvciBhIGxpc3Qgb2Ygc3VwcG9ydGVkIG5hbWVzLCBzZWUg dGhlIGNvbnN0YW50IGBvcmctZW50aXRpZXMnCmFuZCB0aGUgdXNlciBvcHRpb24gYG9yZy1lbnRp dGllcy11c2VyJy4KClRoaXMgb3B0aW9uIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSBPUFRJT05T IGtleXdvcmQsCmUuZy4gXCJlOm5pbFwiLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAog IDp0eXBlICdib29sZWFuCiAgOnNhZmUgIydib29sZWFucCkKCihkZWZjdXN0b20gb3JnLWV4cG9y dC13aXRoLWlubGluZXRhc2tzIHQKICAiTm9uLW5pbCBtZWFucyBpbmxpbmV0YXNrcyBzaG91bGQg YmUgZXhwb3J0ZWQuClRoaXMgb3B0aW9uIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSBPUFRJT05T IGtleXdvcmQsCmUuZy4gXCJpbmxpbmU6bmlsXCIuIgogIDpncm91cCAnb3JnLWV4cG9ydC1nZW5l cmFsCiAgOnZlcnNpb24gIjI0LjQiCiAgOnBhY2thZ2UtdmVyc2lvbiAnKE9yZyAuICI4LjAiKQog IDp0eXBlICdib29sZWFuCiAgOnNhZmUgIydib29sZWFucCkKCihkZWZjdXN0b20gb3JnLWV4cG9y dC13aXRoLXBsYW5uaW5nIG5pbAogICJOb24tbmlsIG1lYW5zIGluY2x1ZGUgcGxhbm5pbmcgaW5m byBpbiBleHBvcnQuCgpQbGFubmluZyBpbmZvIGlzIHRoZSBsaW5lIGNvbnRhaW5pbmcgZWl0aGVy IFNDSEVEVUxFRDosCkRFQURMSU5FOiwgQ0xPU0VEOiB0aW1lLXN0YW1wcywgb3IgYSBjb21iaW5h dGlvbiBvZiB0aGVtLgoKVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIE9QVElP TlMga2V5d29yZCwKZS5nLiBcInA6dFwiLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAog IDp2ZXJzaW9uICIyNC40IgogIDpwYWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOC4wIikKICA6dHlw ZSAnYm9vbGVhbgogIDpzYWZlICMnYm9vbGVhbnApCgooZGVmY3VzdG9tIG9yZy1leHBvcnQtd2l0 aC1wcmlvcml0eSBuaWwKICAiTm9uLW5pbCBtZWFucyBpbmNsdWRlIHByaW9yaXR5IGNvb2tpZXMg aW4gZXhwb3J0LgpUaGlzIG9wdGlvbiBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgT1BUSU9OUyBr ZXl3b3JkLAplLmcuIFwicHJpOnRcIi4iCiAgOmdyb3VwICdvcmctZXhwb3J0LWdlbmVyYWwKICA6 dHlwZSAnYm9vbGVhbgogIDpzYWZlICMnYm9vbGVhbnApCgooZGVmY3VzdG9tIG9yZy1leHBvcnQt d2l0aC1wcm9wZXJ0aWVzIG5pbAogICJOb24tbmlsIG1lYW5zIGV4cG9ydCBjb250ZW50cyBvZiBw cm9wZXJ0aWVzIGRyYXdlcnMuCgpXaGVuIHQsIGFsbCBwcm9wZXJ0aWVzIGFyZSBleHBvcnRlZC4g IFRoaXMgbWF5IGFsc28gYmUgYSBsaXN0IG9mCnByb3BlcnRpZXMgdG8gZXhwb3J0LCBhcyBzdHJp bmdzLgoKVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIE9QVElPTlMga2V5d29y ZCwKZS5nLiBcInByb3A6dFwiLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAogIDp2ZXJz aW9uICIyNi4xIgogIDpwYWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOC4zIikKICA6dHlwZSAnKGNo b2ljZQoJICAoY29uc3QgOnRhZyAiQWxsIHByb3BlcnRpZXMiIHQpCgkgIChjb25zdCA6dGFnICJO b25lIiBuaWwpCgkgIChyZXBlYXQgOnRhZyAiU2VsZWN0ZWQgcHJvcGVydGllcyIKCQkgIChzdHJp bmcgOnRhZyAiUHJvcGVydHkgbmFtZSIpKSkKICA6c2FmZSAobGFtYmRhICh4KSAob3IgKGJvb2xl YW5wIHgpCgkJCShhbmQgKGxpc3RwIHgpIChjbC1ldmVyeSAjJ3N0cmluZ3AgeCkpKSkpCgooZGVm Y3VzdG9tIG9yZy1leHBvcnQtd2l0aC1zZWN0aW9uLW51bWJlcnMgdAogICJOb24tbmlsIG1lYW5z IGFkZCBzZWN0aW9uIG51bWJlcnMgdG8gaGVhZGxpbmVzIHdoZW4gZXhwb3J0aW5nLgoKV2hlbiBz ZXQgdG8gYW4gaW50ZWdlciBuLCBudW1iZXJpbmcgd2lsbCBvbmx5IGhhcHBlbiBmb3IKaGVhZGxp bmVzIHdob3NlIHJlbGF0aXZlIGxldmVsIGlzIGhpZ2hlciBvciBlcXVhbCB0byBuLgoKVGhpcyBv cHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIE9QVElPTlMga2V5d29yZCwKZS5nLiBcIm51 bTp0XCIuIgogIDpncm91cCAnb3JnLWV4cG9ydC1nZW5lcmFsCiAgOnR5cGUgJ2Jvb2xlYW4KICA6 c2FmZSAjJ2Jvb2xlYW5wKQoKKGRlZmN1c3RvbSBvcmctZXhwb3J0LXNlbGVjdC10YWdzICcoImV4 cG9ydCIpCiAgIlRhZ3MgdGhhdCBzZWxlY3QgYSB0cmVlIGZvciBleHBvcnQuCgpJZiBhbnkgc3Vj aCB0YWcgaXMgZm91bmQgaW4gYSBidWZmZXIsIGFsbCB0cmVlcyB0aGF0IGRvIG5vdCBjYXJyeQpv bmUgb2YgdGhlc2UgdGFncyB3aWxsIGJlIGlnbm9yZWQgZHVyaW5nIGV4cG9ydC4gIEluc2lkZSB0 cmVlcwp0aGF0IGFyZSBzZWxlY3RlZCBsaWtlIHRoaXMsIHlvdSBjYW4gc3RpbGwgZGVzZWxlY3Qg YSBzdWJ0cmVlIGJ5CnRhZ2dpbmcgaXQgd2l0aCBvbmUgb2YgdGhlIGBvcmctZXhwb3J0LWV4Y2x1 ZGUtdGFncycuCgpUaGlzIG9wdGlvbiBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgU0VMRUNUX1RB R1Mga2V5d29yZC4iCiAgOmdyb3VwICdvcmctZXhwb3J0LWdlbmVyYWwKICA6dHlwZSAnKHJlcGVh dCAoc3RyaW5nIDp0YWcgIlRhZyIpKQogIDpzYWZlIChsYW1iZGEgKHgpIChhbmQgKGxpc3RwIHgp IChjbC1ldmVyeSAjJ3N0cmluZ3AgeCkpKSkKCihkZWZjdXN0b20gb3JnLWV4cG9ydC13aXRoLXNt YXJ0LXF1b3RlcyBuaWwKICAiTm9uLW5pbCBtZWFucyBhY3RpdmF0ZSBzbWFydCBxdW90ZXMgZHVy aW5nIGV4cG9ydC4KVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIE9QVElPTlMg a2V5d29yZCwKZS5nLiwgXCJcXD0nOnRcIi4KCldoZW4gc2V0dGluZyB0aGlzIHRvIG5vbi1uaWws IHlvdSBuZWVkIHRvIHRha2UgY2FyZSBvZgp1c2luZyB0aGUgY29ycmVjdCBCYWJlbCBwYWNrYWdl IHdoZW4gZXhwb3J0aW5nIHRvIExhVGVYLgpFLmcuLCB5b3UgY2FuIGxvYWQgQmFiZWwgZm9yIGZy ZW5jaCBsaWtlIHRoaXM6CgojK0xBVEVYX0hFQURFUjogXFx1c2VwYWNrYWdlW2ZyZW5jaF17YmFi ZWx9IgogIDpncm91cCAnb3JnLWV4cG9ydC1nZW5lcmFsCiAgOnZlcnNpb24gIjI0LjQiCiAgOnBh Y2thZ2UtdmVyc2lvbiAnKE9yZyAuICI4LjAiKQogIDp0eXBlICdib29sZWFuCiAgOnNhZmUgIydi b29sZWFucCkKCihkZWZjdXN0b20gb3JnLWV4cG9ydC13aXRoLXNwZWNpYWwtc3RyaW5ncyB0CiAg Ik5vbi1uaWwgbWVhbnMgaW50ZXJwcmV0IFwiXFwtXCIsIFwiLS1cIiBhbmQgXCItLS1cIiBmb3Ig ZXhwb3J0LgoKV2hlbiB0aGlzIG9wdGlvbiBpcyB0dXJuZWQgb24sIHRoZXNlIHN0cmluZ3Mgd2ls bCBiZSBleHBvcnRlZCBhczoKCiAgIE9yZyAgICAgSFRNTCAgICAgTGFUZVggICAgVVRGLTgKICAt LS0tLSstLS0tLS0tLS0tKy0tLS0tLS0tKy0tLS0tLS0KICAgXFwtICAgICZzaHk7ICAgICAgXFwt CiAgIC0tICAgICZuZGFzaDsgICAgLS0gICAgICAgICDigJMKICAgLS0tICAgJm1kYXNoOyAgICAt LS0gICAgICAgIOKAlAogICAuLi4gICAmaGVsbGlwOyAgIFxcbGRvdHMgICAgIOKApgoKVGhpcyBv cHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIE9QVElPTlMga2V5d29yZCwKZS5nLiBcIi06 bmlsXCIuIgogIDpncm91cCAnb3JnLWV4cG9ydC1nZW5lcmFsCiAgOnR5cGUgJ2Jvb2xlYW4KICA6 c2FmZSAjJ2Jvb2xlYW5wKQoKKGRlZmN1c3RvbSBvcmctZXhwb3J0LXdpdGgtc3RhdGlzdGljcy1j b29raWVzIHQKICAiTm9uLW5pbCBtZWFucyBpbmNsdWRlIHN0YXRpc3RpY3MgY29va2llcyBpbiBl eHBvcnQuClRoaXMgb3B0aW9uIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSBPUFRJT05TIGtleXdv cmQsCmUuZy4gXCJzdGF0Om5pbFwiIgogIDpncm91cCAnb3JnLWV4cG9ydC1nZW5lcmFsCiAgOnZl cnNpb24gIjI0LjQiCiAgOnBhY2thZ2UtdmVyc2lvbiAnKE9yZyAuICI4LjAiKQogIDp0eXBlICdi b29sZWFuCiAgOnNhZmUgIydib29sZWFucCkKCihkZWZjdXN0b20gb3JnLWV4cG9ydC13aXRoLXN1 Yi1zdXBlcnNjcmlwdHMgdAogICJOb24tbmlsIG1lYW5zIGludGVycHJldCBcIl9cIiBhbmQgXCJe XCIgZm9yIGV4cG9ydC4KCklmIHlvdSB3YW50IHRvIGNvbnRyb2wgaG93IE9yZyBkaXNwbGF5cyB0 aG9zZSBjaGFyYWN0ZXJzLCBzZWUKYG9yZy11c2Utc3ViLXN1cGVyc2NyaXB0cycuICBgb3JnLWV4 cG9ydC13aXRoLXN1Yi1zdXBlcnNjcmlwdHMnCnVzZWQgdG8gYmUgYW4gYWxpYXMgZm9yIGBvcmct dXNlLXN1Yi1zdXBlcnNjcmlwdHMnIGluIE9yZyA8OC4wLAppdCBpcyBub3QgYW55bW9yZS4KCldo ZW4gdGhpcyBvcHRpb24gaXMgdHVybmVkIG9uLCB5b3UgY2FuIHVzZSBUZVgtbGlrZSBzeW50YXgg Zm9yCnN1Yi0gYW5kIHN1cGVyc2NyaXB0cyBhbmQgc2VlIHRoZW0gZXhwb3J0ZWQgY29ycmVjdGx5 LgoKWW91IGNhbiBhbHNvIHNldCB0aGUgb3B0aW9uIHdpdGggIytPUFRJT05TOiBeOnQKClNldmVy YWwgY2hhcmFjdGVycyBhZnRlciBcIl9cIiBvciBcIl5cIiB3aWxsIGJlIGNvbnNpZGVyZWQgYXMg YQpzaW5nbGUgaXRlbSAtIHNvIGdyb3VwaW5nIHdpdGgge30gaXMgbm9ybWFsbHkgbm90IG5lZWRl ZC4gIEZvcgpleGFtcGxlLCB0aGUgZm9sbG93aW5nIHRoaW5ncyB3aWxsIGJlIHBhcnNlZCBhcyBz aW5nbGUgc3ViLSBvcgpzdXBlcnNjcmlwdHM6CgogMTBeMjQgICBvciAgIDEwXnRhdSAgICAgc2V2 ZXJhbCBkaWdpdHMgd2lsbCBiZSBjb25zaWRlcmVkIDEgaXRlbS4KIDEwXi0xMiAgb3IgICAxMF4t dGF1ICAgIGEgbGVhZGluZyBzaWduIHdpdGggZGlnaXRzIG9yIGEgd29yZAogeF4yLXleMyAgICAg ICAgICAgICAgICAgd2lsbCBiZSByZWFkIGFzIHheMiAtIHleMywgYmVjYXVzZSBpdGVtcyBhcmUK CQkJIHRlcm1pbmF0ZWQgYnkgYWxtb3N0IGFueSBub253b3JkL25vbmRpZ2l0IGNoYXIuCiB4X3tp XjJ9IG9yICAgeF4oMi1pKSAgICBicmFjZXMgb3IgcGFyZW50aGVzaXMgZG8gZ3JvdXBpbmcuCgpT dGlsbCwgYW1iaWd1aXR5IGlzIHBvc3NpYmxlLiAgU28gd2hlbiBpbiBkb3VidCwgdXNlIHt9IHRv IGVuY2xvc2UKdGhlIHN1Yi9zdXBlcnNjcmlwdC4gIElmIHlvdSBzZXQgdGhpcyB2YXJpYWJsZSB0 byB0aGUgc3ltYm9sIGB7fScsCnRoZSBicmFjZXMgYXJlICpyZXF1aXJlZCogaW4gb3JkZXIgdG8g dHJpZ2dlciBpbnRlcnByZXRhdGlvbnMgYXMKc3ViL3N1cGVyc2NyaXB0LiAgVGhpcyBjYW4gYmUg aGVscGZ1bCBpbiBkb2N1bWVudHMgdGhhdCBuZWVkIFwiX1wiCmZyZXF1ZW50bHkgaW4gcGxhaW4g dGV4dC4iCiAgOmdyb3VwICdvcmctZXhwb3J0LWdlbmVyYWwKICA6dmVyc2lvbiAiMjQuNCIKICA6 cGFja2FnZS12ZXJzaW9uICcoT3JnIC4gIjguMCIpCiAgOnR5cGUgJyhjaG9pY2UKCSAgKGNvbnN0 IDp0YWcgIkludGVycHJldCB0aGVtIiB0KQoJICAoY29uc3QgOnRhZyAiQ3VybHkgYnJhY2tldHMg b25seSIge30pCgkgIChjb25zdCA6dGFnICJEbyBub3QgaW50ZXJwcmV0IHRoZW0iIG5pbCkpCiAg OnNhZmUgKGxhbWJkYSAoeCkgKG1lbXEgeCAnKHQgbmlsIHt9KSkpKQoKKGRlZmN1c3RvbSBvcmct ZXhwb3J0LXdpdGgtdG9jIHQKICAiTm9uLW5pbCBtZWFucyBjcmVhdGUgYSB0YWJsZSBvZiBjb250 ZW50cyBpbiBleHBvcnRlZCBmaWxlcy4KClRoZSB0YWJsZSBvZiBjb250ZW50cyBjb250YWlucyBo ZWFkbGluZXMgd2l0aCBsZXZlbHMgdXAgdG8KYG9yZy1leHBvcnQtaGVhZGxpbmUtbGV2ZWxzJy4K CldoZW4gdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gYW4gaW50ZWdlciBOLCBpbmNsdWRlIGxldmVs cyB1cCB0bwpOIGluIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIEFsdGhvdWdoIGl0IG1heSB0aGVu IGJlIGRpZmZlcmVudApmcm9tIGBvcmctZXhwb3J0LWhlYWRsaW5lLWxldmVscycsIGl0IGlzIGNh bm5vdCBiZSBsYXJnZXIgdGhhbgp0aGUgbnVtYmVyIG9mIGhlYWRsaW5lIGxldmVscy4KCldoZW4g bmlsLCBubyB0YWJsZSBvZiBjb250ZW50cyBpcyBjcmVhdGVkLgoKVGhpcyBvcHRpb24gY2FuIGFs c28gYmUgc2V0IHdpdGggdGhlIE9QVElPTlMga2V5d29yZCwKZS5nLiBcInRvYzpuaWxcIiBvciBc InRvYzozXCIuIgogIDpncm91cCAnb3JnLWV4cG9ydC1nZW5lcmFsCiAgOnR5cGUgJyhjaG9pY2UK CSAgKGNvbnN0IDp0YWcgIk5vIFRhYmxlIG9mIENvbnRlbnRzIiBuaWwpCgkgIChjb25zdCA6dGFn ICJGdWxsIFRhYmxlIG9mIENvbnRlbnRzIiB0KQoJICAoaW50ZWdlciA6dGFnICJUT0MgdG8gbGV2 ZWwiKSkKICA6c2FmZSAobGFtYmRhICh4KQoJICAob3IgKGJvb2xlYW5wIHgpCgkgICAgICAoaW50 ZWdlcnAgeCkpKSkKCihkZWZjdXN0b20gb3JnLWV4cG9ydC13aXRoLXRhYmxlcyB0CiAgIk5vbi1u aWwgbWVhbnMgZXhwb3J0IHRhYmxlcy4KVGhpcyBvcHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGgg dGhlIE9QVElPTlMga2V5d29yZCwKZS5nLiBcInw6bmlsXCIuIgogIDpncm91cCAnb3JnLWV4cG9y dC1nZW5lcmFsCiAgOnZlcnNpb24gIjI0LjQiCiAgOnBhY2thZ2UtdmVyc2lvbiAnKE9yZyAuICI4 LjAiKQogIDp0eXBlICdib29sZWFuCiAgOnNhZmUgIydib29sZWFucCkKCihkZWZjdXN0b20gb3Jn LWV4cG9ydC13aXRoLXRhZ3MgdAogICJJZiBuaWwsIGRvIG5vdCBleHBvcnQgdGFncywganVzdCBy ZW1vdmUgdGhlbSBmcm9tIGhlYWRsaW5lcy4KCklmIHRoaXMgaXMgdGhlIHN5bWJvbCBgbm90LWlu LXRvYycsIHRhZ3Mgd2lsbCBiZSByZW1vdmVkIGZyb20KdGFibGUgb2YgY29udGVudHMgZW50cmll cywgYnV0IHN0aWxsIGJlIHNob3duIGluIHRoZSBoZWFkbGluZXMgb2YKdGhlIGRvY3VtZW50LgoK VGhpcyBvcHRpb24gY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIE9QVElPTlMga2V5d29yZCwKZS5n LiBcInRhZ3M6bmlsXCIuIgogIDpncm91cCAnb3JnLWV4cG9ydC1nZW5lcmFsCiAgOnR5cGUgJyhj aG9pY2UKCSAgKGNvbnN0IDp0YWcgIk9mZiIgbmlsKQoJICAoY29uc3QgOnRhZyAiTm90IGluIFRP QyIgbm90LWluLXRvYykKCSAgKGNvbnN0IDp0YWcgIk9uIiB0KSkKICA6c2FmZSAobGFtYmRhICh4 KSAobWVtcSB4ICcodCBuaWwgbm90LWluLXRvYykpKSkKCihkZWZjdXN0b20gb3JnLWV4cG9ydC13 aXRoLXRhc2tzIHQKICAiTm9uLW5pbCBtZWFucyBpbmNsdWRlIFRPRE8gaXRlbXMgZm9yIGV4cG9y dC4KClRoaXMgbWF5IGhhdmUgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CnQgICAgICAgICAgICAgICAg ICAgIGluY2x1ZGUgdGFza3MgaW5kZXBlbmRlbnQgb2Ygc3RhdGUuCmB0b2RvJyAgICAgICAgICAg ICAgIGluY2x1ZGUgb25seSB0YXNrcyB0aGF0IGFyZSBub3QgeWV0IGRvbmUuCmBkb25lJyAgICAg ICAgICAgICAgIGluY2x1ZGUgb25seSB0YXNrcyB0aGF0IGFyZSBhbHJlYWR5IGRvbmUuCm5pbCAg ICAgICAgICAgICAgICAgIGlnbm9yZSBhbGwgdGFza3MuCmxpc3Qgb2Yga2V5d29yZHMgICAgIGlu Y2x1ZGUgdGFza3Mgd2l0aCB0aGVzZSBrZXl3b3Jkcy4KClRoaXMgb3B0aW9uIGNhbiBhbHNvIGJl IHNldCB3aXRoIHRoZSBPUFRJT05TIGtleXdvcmQsCmUuZy4gXCJ0YXNrczpuaWxcIi4iCiAgOmdy b3VwICdvcmctZXhwb3J0LWdlbmVyYWwKICA6dHlwZSAnKGNob2ljZQoJICAoY29uc3QgOnRhZyAi QWxsIHRhc2tzIiB0KQoJICAoY29uc3QgOnRhZyAiTm8gdGFza3MiIG5pbCkKCSAgKGNvbnN0IDp0 YWcgIk5vdC1kb25lIHRhc2tzIiB0b2RvKQoJICAoY29uc3QgOnRhZyAiT25seSBkb25lIHRhc2tz IiBkb25lKQoJICAocmVwZWF0IDp0YWcgIlNwZWNpZmljIFRPRE8ga2V5d29yZHMiCgkJICAoc3Ry aW5nIDp0YWcgIktleXdvcmQiKSkpCiAgOnNhZmUgKGxhbWJkYSAoeCkgKG9yIChtZW1xIHggJyhu aWwgdCB0b2RvIGRvbmUpKQoJCQkoYW5kIChsaXN0cCB4KQoJCQkgICAgIChjbC1ldmVyeSAjJ3N0 cmluZ3AgeCkpKSkpCgooZGVmY3VzdG9tIG9yZy1leHBvcnQtd2l0aC10aXRsZSB0CiAgIk5vbi1u aWwgbWVhbnMgcHJpbnQgdGl0bGUgaW50byB0aGUgZXhwb3J0ZWQgZmlsZS4KVGhpcyBvcHRpb24g Y2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIE9QVElPTlMga2V5d29yZCwKZS5nLiBcInRpdGxlOm5p bFwiLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAogIDp2ZXJzaW9uICIyNi4xIgogIDpw YWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOC4zIikKICA6dHlwZSAnYm9vbGVhbgogIDpzYWZlICMn Ym9vbGVhbnApCgooZGVmY3VzdG9tIG9yZy1leHBvcnQtdGltZS1zdGFtcC1maWxlIHQKICAiTm9u LW5pbCBtZWFucyBpbnNlcnQgYSB0aW1lIHN0YW1wIGludG8gdGhlIGV4cG9ydGVkIGZpbGUuClRo ZSB0aW1lIHN0YW1wIHNob3dzIHdoZW4gdGhlIGZpbGUgd2FzIGNyZWF0ZWQuICBUaGlzIG9wdGlv biBjYW4KYWxzbyBiZSBzZXQgd2l0aCB0aGUgT1BUSU9OUyBrZXl3b3JkLCBlLmcuIFwidGltZXN0 YW1wOm5pbFwiLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAogIDp0eXBlICdib29sZWFu CiAgOnNhZmUgIydib29sZWFucCkKCihkZWZjdXN0b20gb3JnLWV4cG9ydC13aXRoLXRpbWVzdGFt cHMgdAogICJOb24tbmlsIG1lYW5zIGFsbG93IHRpbWVzdGFtcHMgaW4gZXhwb3J0LgoKSXQgY2Fu IGJlIHNldCB0byBhbnkgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6CiAgdCAgICAgICAgICBleHBv cnQgYWxsIHRpbWVzdGFtcHMuCiAgYGFjdGl2ZScgICBleHBvcnQgYWN0aXZlIHRpbWVzdGFtcHMg b25seS4KICBgaW5hY3RpdmUnIGV4cG9ydCBpbmFjdGl2ZSB0aW1lc3RhbXBzIG9ubHkuCiAgbmls ICAgICAgICBkbyBub3QgZXhwb3J0IHRpbWVzdGFtcHMKClRoaXMgb25seSBhcHBsaWVzIHRvIHRp bWVzdGFtcHMgaXNvbGF0ZWQgaW4gYSBwYXJhZ3JhcGgKY29udGFpbmluZyBvbmx5IHRpbWVzdGFt cHMuICBPdGhlciB0aW1lc3RhbXBzIGFyZSBhbHdheXMKZXhwb3J0ZWQuCgpUaGlzIG9wdGlvbiBj YW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgT1BUSU9OUyBrZXl3b3JkLCBlLmcuClwiPDpuaWxcIi4i CiAgOmdyb3VwICdvcmctZXhwb3J0LWdlbmVyYWwKICA6dHlwZSAnKGNob2ljZQoJICAoY29uc3Qg OnRhZyAiQWxsIHRpbWVzdGFtcHMiIHQpCgkgIChjb25zdCA6dGFnICJPbmx5IGFjdGl2ZSB0aW1l c3RhbXBzIiBhY3RpdmUpCgkgIChjb25zdCA6dGFnICJPbmx5IGluYWN0aXZlIHRpbWVzdGFtcHMi IGluYWN0aXZlKQoJICAoY29uc3QgOnRhZyAiTm8gdGltZXN0YW1wIiBuaWwpKQogIDpzYWZlIChs YW1iZGEgKHgpIChtZW1xIHggJyh0IG5pbCBhY3RpdmUgaW5hY3RpdmUpKSkpCgooZGVmY3VzdG9t IG9yZy1leHBvcnQtd2l0aC10b2RvLWtleXdvcmRzIHQKICAiTm9uLW5pbCBtZWFucyBpbmNsdWRl IFRPRE8ga2V5d29yZHMgaW4gZXhwb3J0LgpXaGVuIG5pbCwgcmVtb3ZlIGFsbCB0aGVzZSBrZXl3 b3JkcyBmcm9tIHRoZSBleHBvcnQuICBUaGlzIG9wdGlvbgpjYW4gYWxzbyBiZSBzZXQgd2l0aCB0 aGUgT1BUSU9OUyBrZXl3b3JkLCBlLmcuICBcInRvZG86bmlsXCIuIgogIDpncm91cCAnb3JnLWV4 cG9ydC1nZW5lcmFsCiAgOnR5cGUgJ2Jvb2xlYW4pCgooZGVmY3VzdG9tIG9yZy1leHBvcnQtYWxs b3ctYmluZC1rZXl3b3JkcyBuaWwKICAiTm9uLW5pbCBtZWFucyBCSU5EIGtleXdvcmRzIGNhbiBk ZWZpbmUgbG9jYWwgdmFyaWFibGUgdmFsdWVzLgpUaGlzIGlzIGEgcG90ZW50aWFsIHNlY3VyaXR5 IHJpc2ssIHdoaWNoIGlzIHdoeSB0aGUgZGVmYXVsdCB2YWx1ZQppcyBuaWwuICBZb3UgY2FuIGFs c28gYWxsb3cgdGhlbSB0aHJvdWdoIGxvY2FsIGJ1ZmZlciB2YXJpYWJsZXMuIgogIDpncm91cCAn b3JnLWV4cG9ydC1nZW5lcmFsCiAgOnZlcnNpb24gIjI0LjQiCiAgOnBhY2thZ2UtdmVyc2lvbiAn KE9yZyAuICI4LjAiKQogIDp0eXBlICdib29sZWFuKQoKKGRlZmN1c3RvbSBvcmctZXhwb3J0LXdp dGgtYnJva2VuLWxpbmtzIG5pbAogICJOb24tbmlsIG1lYW5zIGRvIG5vdCByYWlzZSBhbiBlcnJv ciBvbiBicm9rZW4gbGlua3MuCgpXaGVuIHRoaXMgdmFyaWFibGUgaXMgbm9uLW5pbCwgYnJva2Vu IGxpbmtzIGFyZSBpZ25vcmVkLCB3aXRob3V0CnN0b3BwaW5nIHRoZSBleHBvcnQgcHJvY2Vzcy4g IElmIGl0IGlzIHNldCB0byBgbWFyaycsIGJyb2tlbgpsaW5rcyBhcmUgbWFya2VkIGFzIHN1Y2gg aW4gdGhlIG91dHB1dCwgd2l0aCBhIHN0cmluZyBsaWtlCgogIFtCUk9LRU4gTElOSzogcGF0aF0K CndoZXJlIFBBVEggaXMgdGhlIHVuLXJlc29sdmFibGUgcmVmZXJlbmNlLgoKVGhpcyBvcHRpb24g Y2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIE9QVElPTlMga2V5d29yZCwgZS5nLiwKXCJicm9rZW4t bGlua3M6bWFya1wiLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAogIDp2ZXJzaW9uICIy Ni4xIgogIDpwYWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOS4wIikKICA6dHlwZSAnKGNob2ljZQoJ ICAoY29uc3QgOnRhZyAiSWdub3JlIGJyb2tlbiBsaW5rcyIgdCkKCSAgKGNvbnN0IDp0YWcgIk1h cmsgYnJva2VuIGxpbmtzIGluIG91dHB1dCIgbWFyaykKCSAgKGNvbnN0IDp0YWcgIlJhaXNlIGFu IGVycm9yIiBuaWwpKSkKCihkZWZjdXN0b20gb3JnLWV4cG9ydC1zbmlwcGV0LXRyYW5zbGF0aW9u LWFsaXN0IG5pbAogICJBbGlzdCBiZXR3ZWVuIGV4cG9ydCBzbmlwcGV0cyBiYWNrLWVuZHMgYW5k IGV4cG9ydGVyIGJhY2stZW5kcy4KClRoaXMgdmFyaWFibGUgYWxsb3dzIHByb3ZpZGluZyBzaG9y dGN1dHMgZm9yIGV4cG9ydCBzbmlwcGV0cy4KCkZvciBleGFtcGxlLCB3aXRoIGEgdmFsdWUgb2Yg XFw9JygoXCJoXCIgLiBcImh0bWxcIikpLCB0aGUKSFRNTCBiYWNrLWVuZCB3aWxsIHJlY29nbml6 ZSB0aGUgY29udGVudHMgb2YgXCJAQGg6PGI+QEBcIiBhcwpIVE1MIGNvZGUgd2hpbGUgZXZlcnkg b3RoZXIgYmFjay1lbmQgd2lsbCBpZ25vcmUgaXQuIgogIDpncm91cCAnb3JnLWV4cG9ydC1nZW5l cmFsCiAgOnZlcnNpb24gIjI0LjQiCiAgOnBhY2thZ2UtdmVyc2lvbiAnKE9yZyAuICI4LjAiKQog IDp0eXBlICcocmVwZWF0CgkgIChjb25zIChzdHJpbmcgOnRhZyAiU2hvcnRjdXQiKQoJCShzdHJp bmcgOnRhZyAiQmFjay1lbmQiKSkpCiAgOnNhZmUgKGxhbWJkYSAoeCkKCSAgKGFuZCAobGlzdHAg eCkKCSAgICAgICAoY2wtZXZlcnkgIydjb25zcCB4KQoJICAgICAgIChjbC1ldmVyeSAjJ3N0cmlu Z3AgKG1hcGNhciAjJ2NhciB4KSkKCSAgICAgICAoY2wtZXZlcnkgIydzdHJpbmdwIChtYXBjYXIg IydjZHIgeCkpKSkpCgooZGVmY3VzdG9tIG9yZy1leHBvcnQtZ2xvYmFsLW1hY3JvcyBuaWwKICAi QWxpc3QgYmV0d2VlbiBtYWNybyBuYW1lcyBhbmQgZXhwYW5zaW9uIHRlbXBsYXRlcy4KClRoaXMg dmFyaWFibGUgZGVmaW5lcyBtYWNybyBleHBhbnNpb24gdGVtcGxhdGVzIGF2YWlsYWJsZQpnbG9i YWxseS4gIEFzc29jaWF0aW9ucyBmb2xsb3cgdGhlIHBhdHRlcm4KCiAgKE5BTUUgLiBURU1QTEFU RSkKCndoZXJlIE5BTUUgaXMgYSBzdHJpbmcgYmVnaW5uaW5nIHdpdGggYSBsZXR0ZXIgYW5kIGNv bnNpc3Rpbmcgb2YKYWxwaGFudW1lcmljIGNoYXJhY3RlcnMgb25seS4KClRFTVBMQVRFIGlzIHRo ZSBzdHJpbmcgdG8gd2hpY2ggdGhlIG1hY3JvIGlzIGdvaW5nIHRvIGJlCmV4cGFuZGVkLiAgSW5z aWRlLCBcIiQxXCIsIFwiJDJcIi4uLiBhcmUgcGxhY2UtaG9sZGVycyBmb3IKbWFjcm8ncyBhcmd1 bWVudHMuICBNb3Jlb3ZlciwgaWYgdGhlIHRlbXBsYXRlIHN0YXJ0cyB3aXRoClwiKGV2YWxcIiwg aXQgd2lsbCBiZSBwYXJzZWQgYXMgYW4gRWxpc3AgZXhwcmVzc2lvbiBhbmQgZXZhbHVhdGVkCmFj Y29yZGluZ2x5LiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAogIDp2ZXJzaW9uICIyNi4x IgogIDpwYWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOS4xIikKICA6dHlwZSAnKHJlcGVhdAoJICAo Y29ucyAoc3RyaW5nIDp0YWcgIk5hbWUiKQoJCShzdHJpbmcgOnRhZyAiVGVtcGxhdGUiKSkpKQoK KGRlZmN1c3RvbSBvcmctZXhwb3J0LWNvZGluZy1zeXN0ZW0gbmlsCiAgIkNvZGluZyBzeXN0ZW0g Zm9yIHRoZSBleHBvcnRlZCBmaWxlLiIKICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAogIDp2 ZXJzaW9uICIyNC40IgogIDpwYWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOC4wIikKICA6dHlwZSAn Y29kaW5nLXN5c3RlbSkKCihkZWZjdXN0b20gb3JnLWV4cG9ydC1jb3B5LXRvLWtpbGwtcmluZyBu aWwKICAiTm9uLW5pbCBtZWFucyBwdXNoaW5nIGV4cG9ydCBvdXRwdXQgdG8gdGhlIGtpbGwgcmlu Zy4KVGhpcyB2YXJpYWJsZSBpcyBpZ25vcmVkIGR1cmluZyBhc3luY2hyb25vdXMgZXhwb3J0LiIK ICA6Z3JvdXAgJ29yZy1leHBvcnQtZ2VuZXJhbAogIDp2ZXJzaW9uICIyNi4xIgogIDpwYWNrYWdl LXZlcnNpb24gJyhPcmcgLiAiOC4zIikKICA6dHlwZSAnKGNob2ljZQoJICAoY29uc3QgOnRhZyAi QWx3YXlzIiB0KQoJICAoY29uc3QgOnRhZyAiV2hlbiBleHBvcnQgaXMgZG9uZSBpbnRlcmFjdGl2 ZWx5IiBpZi1pbnRlcmFjdGl2ZSkKCSAgKGNvbnN0IDp0YWcgIk5ldmVyIiBuaWwpKSkKCihkZWZj dXN0b20gb3JnLWV4cG9ydC1pbml0aWFsLXNjb3BlICdidWZmZXIKICAiVGhlIGluaXRpYWwgc2Nv cGUgd2hlbiBleHBvcnRpbmcgd2l0aCBgb3JnLWV4cG9ydC1kaXNwYXRjaCcuClRoaXMgdmFyaWFi bGUgY2FuIGJlIGVpdGhlciBzZXQgdG8gYGJ1ZmZlcicgb3IgYHN1YnRyZWUnLiIKICA6Z3JvdXAg J29yZy1leHBvcnQtZ2VuZXJhbAogIDp0eXBlICcoY2hvaWNlCgkgIChjb25zdCA6dGFnICJFeHBv cnQgY3VycmVudCBidWZmZXIiIGJ1ZmZlcikKCSAgKGNvbnN0IDp0YWcgIkV4cG9ydCBjdXJyZW50 IHN1YnRyZWUiIHN1YnRyZWUpKSkKCihkZWZjdXN0b20gb3JnLWV4cG9ydC1zaG93LXRlbXBvcmFy eS1leHBvcnQtYnVmZmVyIHQKICAiTm9uLW5pbCBtZWFucyBzaG93IGJ1ZmZlciBhZnRlciBleHBv cnRpbmcgdG8gdGVtcCBidWZmZXIuCldoZW4gT3JnIGV4cG9ydHMgdG8gYSBmaWxlLCB0aGUgYnVm ZmVyIHZpc2l0aW5nIHRoYXQgZmlsZSBpcyBuZXZlcgpzaG93biwgYnV0IHJlbWFpbnMgYnVyaWVk LiAgSG93ZXZlciwgd2hlbiBleHBvcnRpbmcgdG8KYSB0ZW1wb3JhcnkgYnVmZmVyLCB0aGF0IGJ1 ZmZlciBpcyBwb3BwZWQgdXAgaW4gYSBzZWNvbmQgd2luZG93LgpXaGVuIHRoaXMgdmFyaWFibGUg aXMgbmlsLCB0aGUgYnVmZmVyIHJlbWFpbnMgYnVyaWVkIGFsc28gaW4KdGhlc2UgY2FzZXMuIgog IDpncm91cCAnb3JnLWV4cG9ydC1nZW5lcmFsCiAgOnR5cGUgJ2Jvb2xlYW4pCgooZGVmY3VzdG9t IG9yZy1leHBvcnQtaW4tYmFja2dyb3VuZCBuaWwKICAiTm9uLW5pbCBtZWFucyBleHBvcnQgYW5k IHB1Ymxpc2hpbmcgY29tbWFuZHMgd2lsbCBydW4gaW4gYmFja2dyb3VuZC4KUmVzdWx0cyBmcm9t IGFuIGFzeW5jaHJvbm91cyBleHBvcnQgYXJlIG5ldmVyIGRpc3BsYXllZAphdXRvbWF0aWNhbGx5 LiAgQnV0IHlvdSBjYW4gcmV0cmlldmUgdGhlbSB3aXRoIGBcXFtvcmctZXhwb3J0LXN0YWNrXScu IgogIDpncm91cCAnb3JnLWV4cG9ydC1nZW5lcmFsCiAgOnZlcnNpb24gIjI0LjQiCiAgOnBhY2th Z2UtdmVyc2lvbiAnKE9yZyAuICI4LjAiKQogIDp0eXBlICdib29sZWFuKQoKKGRlZmN1c3RvbSBv cmctZXhwb3J0LWFzeW5jLWluaXQtZmlsZSBuaWwKICAiRmlsZSB1c2VkIHRvIGluaXRpYWxpemUg ZXh0ZXJuYWwgZXhwb3J0IHByb2Nlc3MuCgpWYWx1ZSBtdXN0IGJlIGVpdGhlciBuaWwgb3IgYW4g YWJzb2x1dGUgZmlsZSBuYW1lLiAgV2hlbiBuaWwsIHRoZQpleHRlcm5hbCBwcm9jZXNzIGlzIGxh dW5jaGVkIGxpa2UgYSByZWd1bGFyIEVtYWNzIHNlc3Npb24sCmxvYWRpbmcgdXNlcidzIGluaXRp YWxpemF0aW9uIGZpbGUgYW5kIGFueSBzaXRlIHNwZWNpZmljCmNvbmZpZ3VyYXRpb24uICBJZiBh IGZpbGUgaXMgcHJvdmlkZWQsIGl0LCBhbmQgb25seSBpdCwgaXMgbG9hZGVkCmF0IHN0YXJ0LXVw LgoKVGhlcmVmb3JlLCB1c2luZyBhIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gbWFrZXMgdGhlIHBy b2Nlc3MgdG8KbG9hZCBmYXN0ZXIgYW5kIHRoZSBleHBvcnQgbW9yZSBwb3J0YWJsZS4iCiAgOmdy b3VwICdvcmctZXhwb3J0LWdlbmVyYWwKICA6dmVyc2lvbiAiMjQuNCIKICA6cGFja2FnZS12ZXJz aW9uICcoT3JnIC4gIjguMCIpCiAgOnR5cGUgJyhjaG9pY2UKCSAgKGNvbnN0IDp0YWcgIlJlZ3Vs YXIgc3RhcnR1cCIgbmlsKQoJICAoZmlsZSA6dGFnICJTcGVjaWZpYyBzdGFydC11cCBmaWxlIiA6 bXVzdC1tYXRjaCB0KSkpCgooZGVmY3VzdG9tIG9yZy1leHBvcnQtZGlzcGF0Y2gtdXNlLWV4cGVy dC11aSBuaWwKICAiTm9uLW5pbCBtZWFucyB1c2luZyBhIG5vbi1pbnRydXNpdmUgYG9yZy1leHBv cnQtZGlzcGF0Y2gnLgpJbiB0aGF0IGNhc2UsIG5vIGhlbHAgYnVmZmVyIGlzIGRpc3BsYXllZC4g IFRob3VnaCwgYW4gaW5kaWNhdG9yCmZvciBjdXJyZW50IGV4cG9ydCBzY29wZSBpcyBhZGRlZCB0 byB0aGUgcHJvbXB0IChcImJcIiB3aGVuCm91dHB1dCBpcyByZXN0cmljdGVkIHRvIGJvZHkgb25s eSwgXCJzXCIgd2hlbiBpdCBpcyByZXN0cmljdGVkIHRvCnRoZSBjdXJyZW50IHN1YnRyZWUsIFwi dlwiIHdoZW4gb25seSB2aXNpYmxlIGVsZW1lbnRzIGFyZQpjb25zaWRlcmVkIGZvciBleHBvcnQs IFwiZlwiIHdoZW4gcHVibGlzaGluZyBmdW5jdGlvbnMgc2hvdWxkIGJlCnBhc3NlZCB0aGUgRk9S Q0UgYXJndW1lbnQgYW5kIFwiYVwiIHdoZW4gdGhlIGV4cG9ydCBzaG91bGQgYmUKYXN5bmNocm9u b3VzKS4gIEFsc28sIFs/XSBhbGxvd3Mgc3dpdGNoaW5nIGJhY2sgdG8gc3RhbmRhcmQKbW9kZS4i CiAgOmdyb3VwICdvcmctZXhwb3J0LWdlbmVyYWwKICA6dmVyc2lvbiAiMjQuNCIKICA6cGFja2Fn ZS12ZXJzaW9uICcoT3JnIC4gIjguMCIpCiAgOnR5cGUgJ2Jvb2xlYW4pCgoKDAo7OzsgRGVmaW5p bmcgQmFjay1lbmRzCjs7Cjs7IEFuIGV4cG9ydCBiYWNrLWVuZCBpcyBhIHN0cnVjdHVyZSB3aXRo IGBvcmctZXhwb3J0LWJhY2tlbmQnIHR5cGUKOzsgYW5kIGBuYW1lJywgYHBhcmVudCcsIGB0cmFu c2NvZGVycycsIGBvcHRpb25zJywgYGZpbHRlcnMnLCBgYmxvY2tzJwo7OyBhbmQgYG1lbnUnIHNs b3RzLgo7Owo7OyBBdCB0aGUgbG93ZXN0IGxldmVsLCBhIGJhY2stZW5kIGlzIGNyZWF0ZWQgd2l0 aAo7OyBgb3JnLWV4cG9ydC1jcmVhdGUtYmFja2VuZCcgZnVuY3Rpb24uCjs7Cjs7IEEgbmFtZWQg YmFjay1lbmQgY2FuIGJlIHJlZ2lzdGVyZWQgd2l0aAo7OyBgb3JnLWV4cG9ydC1yZWdpc3Rlci1i YWNrZW5kJyBmdW5jdGlvbi4gIEEgcmVnaXN0ZXJlZCBiYWNrLWVuZCBjYW4KOzsgbGF0ZXIgYmUg cmVmZXJyZWQgdG8gYnkgaXRzIG5hbWUsIHdpdGggYG9yZy1leHBvcnQtZ2V0LWJhY2tlbmQnCjs7 IGZ1bmN0aW9uLiAgQWxzbywgc3VjaCBhIGJhY2stZW5kIGNhbiBiZWNvbWUgdGhlIHBhcmVudCBv ZiBhIGRlcml2ZWQKOzsgYmFjay1lbmQgZnJvbSB3aGljaCBzbG90IHZhbHVlcyB3aWxsIGJlIGlu aGVyaXRlZCBieSBkZWZhdWx0Lgo7OyBgb3JnLWV4cG9ydC1kZXJpdmVkLWJhY2tlbmQtcCcgY2Fu IGNoZWNrIGlmIGEgZ2l2ZW4gYmFjay1lbmQgaXMKOzsgZGVyaXZlZCBmcm9tIGEgbGlzdCBvZiBi YWNrLWVuZCBuYW1lcy4KOzsKOzsgYG9yZy1leHBvcnQtZ2V0LWFsbC10cmFuc2NvZGVycycsIGBv cmctZXhwb3J0LWdldC1hbGwtb3B0aW9ucycgYW5kCjs7IGBvcmctZXhwb3J0LWdldC1hbGwtZmls dGVycycgcmV0dXJuIHRoZSBmdWxsIGFsaXN0IG9mIHRyYW5zY29kZXJzLAo7OyBvcHRpb25zIGFu ZCBmaWx0ZXJzLCBpbmNsdWRpbmcgdGhvc2UgaW5oZXJpdGVkIGZyb20gYW5jZXN0b3JzLgo7Owo7 OyBBdCBhIGhpZ2hlciBsZXZlbCwgYG9yZy1leHBvcnQtZGVmaW5lLWJhY2tlbmQnIGlzIHRoZSBz dGFuZGFyZCB3YXkKOzsgdG8gZGVmaW5lIGFuIGV4cG9ydCBiYWNrLWVuZC4gIElmIHRoZSBuZXcg YmFjay1lbmQgaXMgc2ltaWxhciB0bwo7OyBhIHJlZ2lzdGVyZWQgYmFjay1lbmQsIGBvcmctZXhw b3J0LWRlZmluZS1kZXJpdmVkLWJhY2tlbmQnIG1heSBiZQo7OyB1c2VkIGluc3RlYWQuCjs7Cjs7 IEV2ZW50dWFsbHkgYG9yZy1leHBvcnQtYmFyZi1pZi1pbnZhbGlkLWJhY2tlbmQnIHJldHVybnMg YW4gZXJyb3IKOzsgd2hlbiBhIGdpdmVuIGJhY2stZW5kIGhhc24ndCBiZWVuIHJlZ2lzdGVyZWQg eWV0LgoKKGNsLWRlZnN0cnVjdCAob3JnLWV4cG9ydC1iYWNrZW5kICg6Y29uc3RydWN0b3Igb3Jn LWV4cG9ydC1jcmVhdGUtYmFja2VuZCkKCQkJCSAgKDpjb3BpZXIgbmlsKSkKICBuYW1lIHBhcmVu dCB0cmFuc2NvZGVycyBvcHRpb25zIGZpbHRlcnMgYmxvY2tzIG1lbnUpCgo7OzsjIyNhdXRvbG9h ZAooZGVmdW4gb3JnLWV4cG9ydC1nZXQtYmFja2VuZCAobmFtZSkKICAiUmV0dXJuIGV4cG9ydCBi YWNrLWVuZCBuYW1lZCBhZnRlciBOQU1FLgpOQU1FIGlzIGEgc3ltYm9sLiAgUmV0dXJuIG5pbCBp ZiBubyBzdWNoIGJhY2stZW5kIGlzIGZvdW5kLiIKICAoY2wtZmluZC1pZiAobGFtYmRhIChiKSAo YW5kIChlcSBuYW1lIChvcmctZXhwb3J0LWJhY2tlbmQtbmFtZSBiKSkpKQoJICAgICAgb3JnLWV4 cG9ydC1yZWdpc3RlcmVkLWJhY2tlbmRzKSkKCihkZWZ1biBvcmctZXhwb3J0LXJlZ2lzdGVyLWJh Y2tlbmQgKGJhY2tlbmQpCiAgIlJlZ2lzdGVyIEJBQ0tFTkQgYXMgYSBrbm93biBleHBvcnQgYmFj ay1lbmQuCkJBQ0tFTkQgaXMgYSBzdHJ1Y3R1cmUgd2l0aCBgb3JnLWV4cG9ydC1iYWNrZW5kJyB0 eXBlLiIKICA7OyBSZWZ1c2UgdG8gcmVnaXN0ZXIgYW4gdW5uYW1lZCBiYWNrLWVuZC4KICAodW5s ZXNzIChvcmctZXhwb3J0LWJhY2tlbmQtbmFtZSBiYWNrZW5kKQogICAgKGVycm9yICJDYW5ub3Qg cmVnaXN0ZXIgYSB1bm5hbWVkIGV4cG9ydCBiYWNrLWVuZCIpKQogIDs7IFJlZnVzZSB0byByZWdp c3RlciBhIGJhY2stZW5kIHdpdGggYW4gdW5rbm93biBwYXJlbnQuCiAgKGxldCAoKHBhcmVudCAo b3JnLWV4cG9ydC1iYWNrZW5kLXBhcmVudCBiYWNrZW5kKSkpCiAgICAod2hlbiAoYW5kIHBhcmVu dCAobm90IChvcmctZXhwb3J0LWdldC1iYWNrZW5kIHBhcmVudCkpKQogICAgICAoZXJyb3IgIkNh bm5vdCB1c2UgdW5rbm93biBcIiVzXCIgYmFjay1lbmQgYXMgYSBwYXJlbnQiIHBhcmVudCkpKQog IDs7IElmIGEgYmFjay1lbmQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIEJBQ0tFTkQgaXMgYWxyZWFk eQogIDs7IHJlZ2lzdGVyZWQsIHJlcGxhY2UgaXQgd2l0aCBCQUNLRU5ELiAgT3RoZXJ3aXNlLCBz aW1wbHkgYWRkCiAgOzsgQkFDS0VORCB0byB0aGUgbGlzdCBvZiByZWdpc3RlcmVkIGJhY2stZW5k cy4KICAobGV0ICgob2xkIChvcmctZXhwb3J0LWdldC1iYWNrZW5kIChvcmctZXhwb3J0LWJhY2tl bmQtbmFtZSBiYWNrZW5kKSkpKQogICAgKGlmIG9sZCAoc2V0Y2FyIChtZW1xIG9sZCBvcmctZXhw b3J0LXJlZ2lzdGVyZWQtYmFja2VuZHMpIGJhY2tlbmQpCiAgICAgIChwdXNoIGJhY2tlbmQgb3Jn LWV4cG9ydC1yZWdpc3RlcmVkLWJhY2tlbmRzKSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtYmFyZi1p Zi1pbnZhbGlkLWJhY2tlbmQgKGJhY2tlbmQpCiAgIlNpZ25hbCBhbiBlcnJvciBpZiBCQUNLRU5E IGlzbid0IGRlZmluZWQuIgogICh1bmxlc3MgKG9yZy1leHBvcnQtYmFja2VuZC1wIGJhY2tlbmQp CiAgICAoZXJyb3IgIlVua25vd24gXCIlc1wiIGJhY2stZW5kOiBBYm9ydGluZyBleHBvcnQiIGJh Y2tlbmQpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBvcmctZXhwb3J0LWRlcml2ZWQtYmFja2Vu ZC1wIChiYWNrZW5kICZyZXN0IGJhY2tlbmRzKQogICJOb24tbmlsIGlmIEJBQ0tFTkQgaXMgZGVy aXZlZCBmcm9tIG9uZSBvZiBCQUNLRU5EUy4KQkFDS0VORCBpcyBhbiBleHBvcnQgYmFjay1lbmQs IGFzIHJldHVybmVkIGJ5LCBlLmcuLApgb3JnLWV4cG9ydC1jcmVhdGUtYmFja2VuZCcsIG9yIGEg c3ltYm9sIHJlZmVycmluZyB0bwphIHJlZ2lzdGVyZWQgYmFjay1lbmQuICBCQUNLRU5EUyBpcyBj b25zdGl0dXRlZCBvZiBzeW1ib2xzLiIKICAod2hlbiAoc3ltYm9scCBiYWNrZW5kKSAoc2V0cSBi YWNrZW5kIChvcmctZXhwb3J0LWdldC1iYWNrZW5kIGJhY2tlbmQpKSkKICAod2hlbiBiYWNrZW5k CiAgICAoY2F0Y2ggJ2V4aXQKICAgICAgKHdoaWxlIChvcmctZXhwb3J0LWJhY2tlbmQtcGFyZW50 IGJhY2tlbmQpCgkod2hlbiAobWVtcSAob3JnLWV4cG9ydC1iYWNrZW5kLW5hbWUgYmFja2VuZCkg YmFja2VuZHMpCgkgICh0aHJvdyAnZXhpdCB0KSkKCShzZXRxIGJhY2tlbmQKCSAgICAgIChvcmct ZXhwb3J0LWdldC1iYWNrZW5kIChvcmctZXhwb3J0LWJhY2tlbmQtcGFyZW50IGJhY2tlbmQpKSkp CiAgICAgIChtZW1xIChvcmctZXhwb3J0LWJhY2tlbmQtbmFtZSBiYWNrZW5kKSBiYWNrZW5kcykp KSkKCihkZWZ1biBvcmctZXhwb3J0LWdldC1hbGwtdHJhbnNjb2RlcnMgKGJhY2tlbmQpCiAgIlJl dHVybiBmdWxsIHRyYW5zbGF0aW9uIHRhYmxlIGZvciBCQUNLRU5ELgoKQkFDS0VORCBpcyBhbiBl eHBvcnQgYmFjay1lbmQsIGFzIHJldHVybiBieSwgZS5nLCwKYG9yZy1leHBvcnQtY3JlYXRlLWJh Y2tlbmQnLiAgUmV0dXJuIHZhbHVlIGlzIGFuIGFsaXN0IHdoZXJlCmtleXMgYXJlIGVsZW1lbnQg b3Igb2JqZWN0IHR5cGVzLCBhcyBzeW1ib2xzLCBhbmQgdmFsdWVzIGFyZQp0cmFuc2NvZGVycy4K ClVubGlrZSB0byBgb3JnLWV4cG9ydC1iYWNrZW5kLXRyYW5zY29kZXJzJywgdGhpcyBmdW5jdGlv bgphbHNvIHJldHVybnMgdHJhbnNjb2RlcnMgaW5oZXJpdGVkIGZyb20gcGFyZW50IGJhY2stZW5k cywKaWYgYW55LiIKICAod2hlbiAoc3ltYm9scCBiYWNrZW5kKSAoc2V0cSBiYWNrZW5kIChvcmct ZXhwb3J0LWdldC1iYWNrZW5kIGJhY2tlbmQpKSkKICAod2hlbiBiYWNrZW5kCiAgICAobGV0ICgo dHJhbnNjb2RlcnMgKG9yZy1leHBvcnQtYmFja2VuZC10cmFuc2NvZGVycyBiYWNrZW5kKSkKCSAg cGFyZW50KQogICAgICAod2hpbGUgKHNldHEgcGFyZW50IChvcmctZXhwb3J0LWJhY2tlbmQtcGFy ZW50IGJhY2tlbmQpKQoJKHNldHEgYmFja2VuZCAob3JnLWV4cG9ydC1nZXQtYmFja2VuZCBwYXJl bnQpKQoJKHNldHEgdHJhbnNjb2RlcnMKCSAgICAgIChhcHBlbmQgdHJhbnNjb2RlcnMgKG9yZy1l eHBvcnQtYmFja2VuZC10cmFuc2NvZGVycyBiYWNrZW5kKSkpKQogICAgICB0cmFuc2NvZGVycykp KQoKKGRlZnVuIG9yZy1leHBvcnQtZ2V0LWFsbC1vcHRpb25zIChiYWNrZW5kKQogICJSZXR1cm4g ZXhwb3J0IG9wdGlvbnMgZm9yIEJBQ0tFTkQuCgpCQUNLRU5EIGlzIGFuIGV4cG9ydCBiYWNrLWVu ZCwgYXMgcmV0dXJuIGJ5LCBlLmcsLApgb3JnLWV4cG9ydC1jcmVhdGUtYmFja2VuZCcuICBTZWUg YG9yZy1leHBvcnQtb3B0aW9ucy1hbGlzdCcKZm9yIHRoZSBzaGFwZSBvZiB0aGUgcmV0dXJuIHZh bHVlLgoKVW5saWtlIHRvIGBvcmctZXhwb3J0LWJhY2tlbmQtb3B0aW9ucycsIHRoaXMgZnVuY3Rp b24gYWxzbwpyZXR1cm5zIG9wdGlvbnMgaW5oZXJpdGVkIGZyb20gcGFyZW50IGJhY2stZW5kcywg aWYgYW55LgoKUmV0dXJuIG5pbCBpZiBCQUNLRU5EIGlzIHVua25vd24uIgogICh3aGVuIChzeW1i b2xwIGJhY2tlbmQpIChzZXRxIGJhY2tlbmQgKG9yZy1leHBvcnQtZ2V0LWJhY2tlbmQgYmFja2Vu ZCkpKQogICh3aGVuIGJhY2tlbmQKICAgIChsZXQgKChvcHRpb25zIChvcmctZXhwb3J0LWJhY2tl bmQtb3B0aW9ucyBiYWNrZW5kKSkKCSAgcGFyZW50KQogICAgICAod2hpbGUgKHNldHEgcGFyZW50 IChvcmctZXhwb3J0LWJhY2tlbmQtcGFyZW50IGJhY2tlbmQpKQoJKHNldHEgYmFja2VuZCAob3Jn LWV4cG9ydC1nZXQtYmFja2VuZCBwYXJlbnQpKQoJKHNldHEgb3B0aW9ucyAoYXBwZW5kIG9wdGlv bnMgKG9yZy1leHBvcnQtYmFja2VuZC1vcHRpb25zIGJhY2tlbmQpKSkpCiAgICAgIG9wdGlvbnMp KSkKCihkZWZ1biBvcmctZXhwb3J0LWdldC1hbGwtZmlsdGVycyAoYmFja2VuZCkKICAiUmV0dXJu IGNvbXBsZXRlIGxpc3Qgb2YgZmlsdGVycyBmb3IgQkFDS0VORC4KCkJBQ0tFTkQgaXMgYW4gZXhw b3J0IGJhY2stZW5kLCBhcyByZXR1cm4gYnksIGUuZywsCmBvcmctZXhwb3J0LWNyZWF0ZS1iYWNr ZW5kJy4gIFJldHVybiB2YWx1ZSBpcyBhbiBhbGlzdCB3aGVyZQprZXlzIGFyZSBzeW1ib2xzIGFu ZCB2YWx1ZXMgbGlzdHMgb2YgZnVuY3Rpb25zLgoKVW5saWtlIHRvIGBvcmctZXhwb3J0LWJhY2tl bmQtZmlsdGVycycsIHRoaXMgZnVuY3Rpb24gYWxzbwpyZXR1cm5zIGZpbHRlcnMgaW5oZXJpdGVk IGZyb20gcGFyZW50IGJhY2stZW5kcywgaWYgYW55LiIKICAod2hlbiAoc3ltYm9scCBiYWNrZW5k KSAoc2V0cSBiYWNrZW5kIChvcmctZXhwb3J0LWdldC1iYWNrZW5kIGJhY2tlbmQpKSkKICAod2hl biBiYWNrZW5kCiAgICAobGV0ICgoZmlsdGVycyAob3JnLWV4cG9ydC1iYWNrZW5kLWZpbHRlcnMg YmFja2VuZCkpCgkgIHBhcmVudCkKICAgICAgKHdoaWxlIChzZXRxIHBhcmVudCAob3JnLWV4cG9y dC1iYWNrZW5kLXBhcmVudCBiYWNrZW5kKSkKCShzZXRxIGJhY2tlbmQgKG9yZy1leHBvcnQtZ2V0 LWJhY2tlbmQgcGFyZW50KSkKCShzZXRxIGZpbHRlcnMgKGFwcGVuZCBmaWx0ZXJzIChvcmctZXhw b3J0LWJhY2tlbmQtZmlsdGVycyBiYWNrZW5kKSkpKQogICAgICBmaWx0ZXJzKSkpCgooZGVmdW4g b3JnLWV4cG9ydC1kZWZpbmUtYmFja2VuZCAoYmFja2VuZCB0cmFuc2NvZGVycyAmcmVzdCBib2R5 KQogICJEZWZpbmUgYSBuZXcgYmFjay1lbmQgQkFDS0VORC4KClRSQU5TQ09ERVJTIGlzIGFuIGFs aXN0IGJldHdlZW4gb2JqZWN0IG9yIGVsZW1lbnQgdHlwZXMgYW5kCmZ1bmN0aW9ucyBoYW5kbGlu ZyB0aGVtLgoKVGhlc2UgZnVuY3Rpb25zIHNob3VsZCByZXR1cm4gYSBzdHJpbmcgd2l0aG91dCBh bnkgdHJhaWxpbmcKc3BhY2UsIG9yIG5pbC4gIFRoZXkgbXVzdCBhY2NlcHQgdGhyZWUgYXJndW1l bnRzOiB0aGUgb2JqZWN0IG9yCmVsZW1lbnQgaXRzZWxmLCBpdHMgY29udGVudHMgb3IgbmlsIHdo ZW4gaXQgaXNuJ3QgcmVjdXJzaXZlIGFuZAp0aGUgcHJvcGVydHkgbGlzdCB1c2VkIGFzIGEgY29t bXVuaWNhdGlvbiBjaGFubmVsLgoKQ29udGVudHMsIHdoZW4gbm90IG5pbCwgYXJlIHN0cmlwcGVk IGZyb20gYW55IGdsb2JhbCBpbmRlbnRhdGlvbgpcKGFsdGhvdWdoIHRoZSByZWxhdGl2ZSBvbmUg aXMgcHJlc2VydmVkKS4gIFRoZXkgYWxzbyBhbHdheXMgZW5kCndpdGggYSBzaW5nbGUgbmV3bGlu ZSBjaGFyYWN0ZXIuCgpJZiwgZm9yIGEgZ2l2ZW4gdHlwZSwgbm8gZnVuY3Rpb24gaXMgZm91bmQs IHRoYXQgZWxlbWVudCBvcgpvYmplY3QgdHlwZSB3aWxsIHNpbXBseSBiZSBpZ25vcmVkLCBhbG9u ZyB3aXRoIGFueSBibGFuayBsaW5lIG9yCndoaXRlIHNwYWNlIGF0IGl0cyBlbmQuICBUaGUgc2Ft ZSB3aWxsIGhhcHBlbiBpZiB0aGUgZnVuY3Rpb24KcmV0dXJucyB0aGUgbmlsIHZhbHVlLiAgSWYg dGhhdCBmdW5jdGlvbiByZXR1cm5zIHRoZSBlbXB0eQpzdHJpbmcsIHRoZSB0eXBlIHdpbGwgYmUg aWdub3JlZCwgYnV0IHRoZSBibGFuayBsaW5lcyBvciB3aGl0ZQpzcGFjZXMgd2lsbCBiZSBrZXB0 LgoKSW4gYWRkaXRpb24gdG8gZWxlbWVudCBhbmQgb2JqZWN0IHR5cGVzLCBvbmUgZnVuY3Rpb24g Y2FuIGJlCmFzc29jaWF0ZWQgdG8gdGhlIGB0ZW1wbGF0ZScgKG9yIGBpbm5lci10ZW1wbGF0ZScp IHN5bWJvbCBhbmQKYW5vdGhlciBvbmUgdG8gdGhlIGBwbGFpbi10ZXh0JyBzeW1ib2wuCgpUaGUg Zm9ybWVyIHJldHVybnMgdGhlIGZpbmFsIHRyYW5zY29kZWQgc3RyaW5nLCBhbmQgY2FuIGJlIHVz ZWQKdG8gYWRkIGEgcHJlYW1ibGUgYW5kIGEgcG9zdGFtYmxlIHRvIGRvY3VtZW50J3MgYm9keS4g IEl0IG11c3QKYWNjZXB0IHR3byBhcmd1bWVudHM6IHRoZSB0cmFuc2NvZGVkIHN0cmluZyBhbmQg dGhlIHByb3BlcnR5IGxpc3QKY29udGFpbmluZyBleHBvcnQgb3B0aW9ucy4gIEEgZnVuY3Rpb24g YXNzb2NpYXRlZCB0byBgdGVtcGxhdGUnCndpbGwgbm90IGJlIGFwcGxpZWQgaWYgZXhwb3J0IGhh cyBvcHRpb24gXCJib2R5LW9ubHlcIi4KQSBmdW5jdGlvbiBhc3NvY2lhdGVkIHRvIGBpbm5lci10 ZW1wbGF0ZScgaXMgYWx3YXlzIGFwcGxpZWQuCgpUaGUgbGF0dGVyLCB3aGVuIGRlZmluZWQsIGlz IHRvIGJlIGNhbGxlZCBvbiBldmVyeSB0ZXh0IG5vdApyZWNvZ25pemVkIGFzIGFuIGVsZW1lbnQg b3IgYW4gb2JqZWN0LiAgSXQgbXVzdCBhY2NlcHQgdHdvCmFyZ3VtZW50czogdGhlIHRleHQgc3Ry aW5nIGFuZCB0aGUgaW5mb3JtYXRpb24gY2hhbm5lbC4gIEl0IGlzIGFuCmFwcHJvcHJpYXRlIHBs YWNlIHRvIHByb3RlY3Qgc3BlY2lhbCBjaGFycyByZWxhdGl2ZSB0byB0aGUKYmFjay1lbmQuCgpC T0RZIGNhbiBzdGFydCB3aXRoIHByZS1kZWZpbmVkIGtleXdvcmQgYXJndW1lbnRzLiAgVGhlIGZv bGxvd2luZwprZXl3b3JkcyBhcmUgdW5kZXJzdG9vZDoKCiAgOmZpbHRlcnMtYWxpc3QKCiAgICBB bGlzdCBiZXR3ZWVuIGZpbHRlcnMgYW5kIGZ1bmN0aW9uLCBvciBsaXN0IG9mIGZ1bmN0aW9ucywK ICAgIHNwZWNpZmljIHRvIHRoZSBiYWNrLWVuZC4gIFNlZSBgb3JnLWV4cG9ydC1maWx0ZXJzLWFs aXN0JyBmb3IKICAgIGEgbGlzdCBvZiBhbGwgYWxsb3dlZCBmaWx0ZXJzLiAgRmlsdGVycyBkZWZp bmVkIGhlcmUKICAgIHNob3VsZG4ndCBtYWtlIGEgYmFjay1lbmQgdGVzdCwgYXMgaXQgbWF5IHBy ZXZlbnQgYmFjay1lbmRzCiAgICBkZXJpdmVkIGZyb20gdGhpcyBvbmUgdG8gYmVoYXZlIHByb3Bl cmx5LgoKICA6bWVudS1lbnRyeQoKICAgIE1lbnUgZW50cnkgZm9yIHRoZSBleHBvcnQgZGlzcGF0 Y2hlci4gIEl0IHNob3VsZCBiZSBhIGxpc3QKICAgIGxpa2U6CgogICAgICBcXD0nKEtFWSBERVND UklQVElPTi1PUi1PUkRJTkFMIEFDVElPTi1PUi1NRU5VKQoKICAgIHdoZXJlIDoKCiAgICAgIEtF WSBpcyBhIGZyZWUgY2hhcmFjdGVyIHNlbGVjdGluZyB0aGUgYmFjay1lbmQuCgogICAgICBERVND UklQVElPTi1PUi1PUkRJTkFMIGlzIGVpdGhlciBhIHN0cmluZyBvciBhIG51bWJlci4KCiAgICAg IElmIGl0IGlzIGEgc3RyaW5nLCBpcyB3aWxsIGJlIHVzZWQgdG8gbmFtZSB0aGUgYmFjay1lbmQg aW4KICAgICAgaXRzIG1lbnUgZW50cnkuICBJZiBpdCBpcyBhIG51bWJlciwgdGhlIGZvbGxvd2lu ZyBtZW51IHdpbGwKICAgICAgYmUgZGlzcGxheWVkIGFzIGEgc3ViLW1lbnUgb2YgdGhlIGJhY2st ZW5kIHdpdGggdGhlIHNhbWUKICAgICAgS0VZLiAgQWxzbywgdGhlIG51bWJlciB3aWxsIGJlIHVz ZWQgdG8gZGV0ZXJtaW5lIGluIHdoaWNoCiAgICAgIG9yZGVyIHN1Y2ggc3ViLW1lbnVzIHdpbGwg YXBwZWFyIChsb3dlc3QgZmlyc3QpLgoKICAgICAgQUNUSU9OLU9SLU1FTlUgaXMgZWl0aGVyIGEg ZnVuY3Rpb24gb3IgYW4gYWxpc3QuCgogICAgICBJZiBpdCBpcyBhbiBhY3Rpb24sIGl0IHdpbGwg YmUgY2FsbGVkIHdpdGggZm91cgogICAgICBhcmd1bWVudHMgKGJvb2xlYW5zKTogQVNZTkMsIFNV QlRSRUVQLCBWSVNJQkxFLU9OTFkgYW5kCiAgICAgIEJPRFktT05MWS4gIFNlZSBgb3JnLWV4cG9y dC1hcycgZm9yIGZ1cnRoZXIgZXhwbGFuYXRpb25zIG9uCiAgICAgIHNvbWUgb2YgdGhlbS4KCiAg ICAgIElmIGl0IGlzIGFuIGFsaXN0LCBhc3NvY2lhdGlvbnMgc2hvdWxkIGZvbGxvdyB0aGUKICAg ICAgcGF0dGVybjoKCiAgICAgICAgXFw9JyhLRVkgREVTQ1JJUFRJT04gQUNUSU9OKQoKICAgICAg d2hlcmUgS0VZLCBERVNDUklQVElPTiBhbmQgQUNUSU9OIGFyZSBkZXNjcmliZWQgYWJvdmUuCgog ICAgVmFsaWQgdmFsdWVzIGluY2x1ZGU6CgogICAgICBcXD0nKD9tIFwiTXkgU3BlY2lhbCBCYWNr LWVuZFwiIG15LXNwZWNpYWwtZXhwb3J0LWZ1bmN0aW9uKQoKICAgICAgb3IKCiAgICAgIFxcPSco P2wgXCJFeHBvcnQgdG8gTGFUZVhcIgogICAgICAgICAgICgoP3AgXCJBcyBQREYgZmlsZVwiIG9y Zy1sYXRleC1leHBvcnQtdG8tcGRmKQogICAgICAgICAgICAoP28gXCJBcyBQREYgZmlsZSBhbmQg b3BlblwiCiAgICAgICAgICAgICAgICAobGFtYmRhIChhIHMgdiBiKQogICAgICAgICAgICAgICAg ICAoaWYgYSAob3JnLWxhdGV4LWV4cG9ydC10by1wZGYgdCBzIHYgYikKICAgICAgICAgICAgICAg ICAgICAob3JnLW9wZW4tZmlsZQogICAgICAgICAgICAgICAgICAgICAob3JnLWxhdGV4LWV4cG9y dC10by1wZGYgbmlsIHMgdiBiKSkpKSkpKQoKICAgICAgb3IgdGhlIGZvbGxvd2luZywgd2hpY2gg d2lsbCBiZSBhZGRlZCB0byB0aGUgcHJldmlvdXMKICAgICAgc3ViLW1lbnUsCgogICAgICBcXD0n KD9sIDEKICAgICAgICAgICgoP0IgXCJBcyBURVggYnVmZmVyIChCZWFtZXIpXCIgb3JnLWJlYW1l ci1leHBvcnQtYXMtbGF0ZXgpCiAgICAgICAgICAgKD9QIFwiQXMgUERGIGZpbGUgKEJlYW1lcilc IiBvcmctYmVhbWVyLWV4cG9ydC10by1wZGYpKSkKCiAgOm9wdGlvbnMtYWxpc3QKCiAgICBBbGlz dCBiZXR3ZWVuIGJhY2stZW5kIHNwZWNpZmljIHByb3BlcnRpZXMgaW50cm9kdWNlZCBpbgogICAg Y29tbXVuaWNhdGlvbiBjaGFubmVsIGFuZCBob3cgdGhlaXIgdmFsdWUgYXJlIGFjcXVpcmVkLiAg U2VlCiAgICBgb3JnLWV4cG9ydC1vcHRpb25zLWFsaXN0JyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBh Ym91dAogICAgc3RydWN0dXJlIG9mIHRoZSB2YWx1ZXMuIgogIChkZWNsYXJlIChpbmRlbnQgMSkp CiAgKGxldCAoZmlsdGVycyBtZW51LWVudHJ5IG9wdGlvbnMpCiAgICAod2hpbGUgKGtleXdvcmRw IChjYXIgYm9keSkpCiAgICAgIChsZXQgKChrZXl3b3JkIChwb3AgYm9keSkpKQoJKHBjYXNlIGtl eXdvcmQKCSAgKDpmaWx0ZXJzLWFsaXN0IChzZXRxIGZpbHRlcnMgKHBvcCBib2R5KSkpCgkgICg6 bWVudS1lbnRyeSAoc2V0cSBtZW51LWVudHJ5IChwb3AgYm9keSkpKQoJICAoOm9wdGlvbnMtYWxp c3QgKHNldHEgb3B0aW9ucyAocG9wIGJvZHkpKSkKCSAgKF8gKGVycm9yICJVbmtub3duIGtleXdv cmQ6ICVzIiBrZXl3b3JkKSkpKSkKICAgIChvcmctZXhwb3J0LXJlZ2lzdGVyLWJhY2tlbmQKICAg ICAob3JnLWV4cG9ydC1jcmVhdGUtYmFja2VuZCA6bmFtZSBiYWNrZW5kCgkJCQk6dHJhbnNjb2Rl cnMgdHJhbnNjb2RlcnMKCQkJCTpvcHRpb25zIG9wdGlvbnMKCQkJCTpmaWx0ZXJzIGZpbHRlcnMK CQkJCTptZW51IG1lbnUtZW50cnkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1kZWZpbmUtZGVyaXZl ZC1iYWNrZW5kIChjaGlsZCBwYXJlbnQgJnJlc3QgYm9keSkKICAiQ3JlYXRlIGEgbmV3IGJhY2st ZW5kIGFzIGEgdmFyaWFudCBvZiBhbiBleGlzdGluZyBvbmUuCgpDSElMRCBpcyB0aGUgbmFtZSBv ZiB0aGUgZGVyaXZlZCBiYWNrLWVuZC4gIFBBUkVOVCBpcyB0aGUgbmFtZSBvZgp0aGUgcGFyZW50 IGJhY2stZW5kLgoKQk9EWSBjYW4gc3RhcnQgd2l0aCBwcmUtZGVmaW5lZCBrZXl3b3JkIGFyZ3Vt ZW50cy4gIFRoZSBmb2xsb3dpbmcKa2V5d29yZHMgYXJlIHVuZGVyc3Rvb2Q6CgogIDpmaWx0ZXJz LWFsaXN0CgogICAgQWxpc3Qgb2YgZmlsdGVycyB0aGF0IHdpbGwgb3ZlcndyaXRlIG9yIGNvbXBs ZXRlIGZpbHRlcnMKICAgIGRlZmluZWQgaW4gUEFSRU5UIGJhY2stZW5kLiAgU2VlIGBvcmctZXhw b3J0LWZpbHRlcnMtYWxpc3QnCiAgICBmb3IgYSBsaXN0IG9mIGFsbG93ZWQgZmlsdGVycy4KCiAg Om1lbnUtZW50cnkKCiAgICBNZW51IGVudHJ5IGZvciB0aGUgZXhwb3J0IGRpc3BhdGNoZXIuICBT ZWUKICAgIGBvcmctZXhwb3J0LWRlZmluZS1iYWNrZW5kJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBh Ym91dCB0aGUKICAgIGV4cGVjdGVkIHZhbHVlLgoKICA6b3B0aW9ucy1hbGlzdAoKICAgIEFsaXN0 IG9mIGJhY2stZW5kIHNwZWNpZmljIHByb3BlcnRpZXMgdGhhdCB3aWxsIG92ZXJ3cml0ZSBvcgog ICAgY29tcGxldGUgdGhvc2UgZGVmaW5lZCBpbiBQQVJFTlQgYmFjay1lbmQuICBSZWZlciB0bwog ICAgYG9yZy1leHBvcnQtb3B0aW9ucy1hbGlzdCcgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQK ICAgIHN0cnVjdHVyZSBvZiB0aGUgdmFsdWVzLgoKICA6dHJhbnNsYXRlLWFsaXN0CgogICAgQWxp c3Qgb2YgZWxlbWVudCBhbmQgb2JqZWN0IHR5cGVzIGFuZCB0cmFuc2NvZGVycyB0aGF0IHdpbGwK ICAgIG92ZXJ3cml0ZSBvciBjb21wbGV0ZSB0cmFuc2NvZGUgdGFibGUgZnJvbSBQQVJFTlQgYmFj ay1lbmQuCiAgICBSZWZlciB0byBgb3JnLWV4cG9ydC1kZWZpbmUtYmFja2VuZCcgZm9yIGRldGFp bGVkIGluZm9ybWF0aW9uCiAgICBhYm91dCB0cmFuc2NvZGVycy4KCkFzIGFuIGV4YW1wbGUsIGhl cmUgaXMgaG93IG9uZSBjb3VsZCBkZWZpbmUgXCJteS1sYXRleFwiIGJhY2stZW5kCmFzIGEgdmFy aWFudCBvZiBgbGF0ZXgnIGJhY2stZW5kIHdpdGggYSBjdXN0b20gdGVtcGxhdGUgZnVuY3Rpb246 CgogIChvcmctZXhwb3J0LWRlZmluZS1kZXJpdmVkLWJhY2tlbmQgXFw9J215LWxhdGV4IFxcPSds YXRleAogICAgIDp0cmFuc2xhdGUtYWxpc3QgXFw9JygodGVtcGxhdGUgLiBteS1sYXRleC10ZW1w bGF0ZS1mdW4pKSkKClRoZSBiYWNrLWVuZCBjb3VsZCB0aGVuIGJlIGNhbGxlZCB3aXRoLCBmb3Ig ZXhhbXBsZToKCiAgKG9yZy1leHBvcnQtdG8tYnVmZmVyIFxcPSdteS1sYXRleCBcIipUZXN0IG15 LWxhdGV4KlwiKSIKICAoZGVjbGFyZSAoaW5kZW50IDIpKQogIChsZXQgKGZpbHRlcnMgbWVudS1l bnRyeSBvcHRpb25zIHRyYW5zY29kZXJzKQogICAgKHdoaWxlIChrZXl3b3JkcCAoY2FyIGJvZHkp KQogICAgICAobGV0ICgoa2V5d29yZCAocG9wIGJvZHkpKSkKCShwY2FzZSBrZXl3b3JkCgkgICg6 ZmlsdGVycy1hbGlzdCAoc2V0cSBmaWx0ZXJzIChwb3AgYm9keSkpKQoJICAoOm1lbnUtZW50cnkg KHNldHEgbWVudS1lbnRyeSAocG9wIGJvZHkpKSkKCSAgKDpvcHRpb25zLWFsaXN0IChzZXRxIG9w dGlvbnMgKHBvcCBib2R5KSkpCgkgICg6dHJhbnNsYXRlLWFsaXN0IChzZXRxIHRyYW5zY29kZXJz IChwb3AgYm9keSkpKQoJICAoXyAoZXJyb3IgIlVua25vd24ga2V5d29yZDogJXMiIGtleXdvcmQp KSkpKQogICAgKG9yZy1leHBvcnQtcmVnaXN0ZXItYmFja2VuZAogICAgIChvcmctZXhwb3J0LWNy ZWF0ZS1iYWNrZW5kIDpuYW1lIGNoaWxkCgkJCQk6cGFyZW50IHBhcmVudAoJCQkJOnRyYW5zY29k ZXJzIHRyYW5zY29kZXJzCgkJCQk6b3B0aW9ucyBvcHRpb25zCgkJCQk6ZmlsdGVycyBmaWx0ZXJz CgkJCQk6bWVudSBtZW51LWVudHJ5KSkpKQoKCgwKOzs7IFRoZSBDb21tdW5pY2F0aW9uIENoYW5u ZWwKOzsKOzsgRHVyaW5nIGV4cG9ydCBwcm9jZXNzLCBldmVyeSBmdW5jdGlvbiBoYXMgYWNjZXNz IHRvIGEgbnVtYmVyIG9mCjs7IHByb3BlcnRpZXMuICBUaGV5IGFyZSBvZiB0d28gdHlwZXM6Cjs7 Cjs7IDEuIEVudmlyb25tZW50IG9wdGlvbnMgYXJlIGNvbGxlY3RlZCBvbmNlIGF0IHRoZSB2ZXJ5 IGJlZ2lubmluZyBvZgo7OyAgICB0aGUgcHJvY2Vzcywgb3V0IG9mIHRoZSBvcmlnaW5hbCBidWZm ZXIgYW5kIGNvbmZpZ3VyYXRpb24uCjs7ICAgIENvbGxlY3RpbmcgdGhlbSBpcyBoYW5kbGVkIGJ5 IGBvcmctZXhwb3J0LWdldC1lbnZpcm9ubWVudCcKOzsgICAgZnVuY3Rpb24uCjs7Cjs7ICAgIE1v c3QgZW52aXJvbm1lbnQgb3B0aW9ucyBhcmUgZGVmaW5lZCB0aHJvdWdoIHRoZQo7OyAgICBgb3Jn LWV4cG9ydC1vcHRpb25zLWFsaXN0JyB2YXJpYWJsZS4KOzsKOzsgMi4gVHJlZSBwcm9wZXJ0aWVz IGFyZSBleHRyYWN0ZWQgZGlyZWN0bHkgZnJvbSB0aGUgcGFyc2VkIHRyZWUsCjs7ICAgIGp1c3Qg YmVmb3JlIGV4cG9ydCwgYnkgYG9yZy1leHBvcnQtLWNvbGxlY3QtdHJlZS1wcm9wZXJ0aWVzJy4K Cjs7OzsgRW52aXJvbm1lbnQgT3B0aW9ucwo7Owo7OyBFbnZpcm9ubWVudCBvcHRpb25zIGVuY29t cGFzcyBhbGwgcGFyYW1ldGVycyBkZWZpbmVkIG91dHNpZGUgdGhlCjs7IHNjb3BlIG9mIHRoZSBw YXJzZWQgZGF0YS4gIFRoZXkgY29tZSBmcm9tIGZpdmUgc291cmNlcywgaW4KOzsgaW5jcmVhc2lu ZyBwcmVjZWRlbmNlIG9yZGVyOgo7Owo7OyAtIEdsb2JhbCB2YXJpYWJsZXMsCjs7IC0gQnVmZmVy J3MgYXR0cmlidXRlcywKOzsgLSBPcHRpb25zIGtleXdvcmQgc3ltYm9scywKOzsgLSBCdWZmZXIg a2V5d29yZHMsCjs7IC0gU3VidHJlZSBwcm9wZXJ0aWVzLgo7Owo7OyBUaGUgY2VudHJhbCBpbnRl cm5hbCBmdW5jdGlvbiB3aXRoIHJlZ2FyZHMgdG8gZW52aXJvbm1lbnQgb3B0aW9ucwo7OyBpcyBg b3JnLWV4cG9ydC1nZXQtZW52aXJvbm1lbnQnLiAgSXQgdXBkYXRlcyBnbG9iYWwgdmFyaWFibGVz IHdpdGgKOzsgIiMrQklORDoiIGtleXdvcmRzLCB0aGVuIHJldHJpZXZlIGFuZCBwcmlvcml0aXpl IHByb3BlcnRpZXMgZnJvbQo7OyB0aGUgZGlmZmVyZW50IHNvdXJjZXMuCjs7Cjs7ICBUaGUgaW50 ZXJuYWwgZnVuY3Rpb25zIGRvaW5nIHRoZSByZXRyaWV2YWwgYXJlOgo7OyAgYG9yZy1leHBvcnQt LWdldC1nbG9iYWwtb3B0aW9ucycsCjs7ICBgb3JnLWV4cG9ydC0tZ2V0LWJ1ZmZlci1hdHRyaWJ1 dGVzJywKOzsgIGBvcmctZXhwb3J0LS1wYXJzZS1vcHRpb24ta2V5d29yZCcsCjs7ICBgb3JnLWV4 cG9ydC0tZ2V0LXN1YnRyZWUtb3B0aW9ucycgYW5kCjs7ICBgb3JnLWV4cG9ydC0tZ2V0LWluYnVm ZmVyLW9wdGlvbnMnCjs7Cjs7IEFsc28sIGBvcmctZXhwb3J0LS1saXN0LWJvdW5kLXZhcmlhYmxl cycgY29sbGVjdHMgYm91bmQgdmFyaWFibGVzCjs7IGFsb25nIHdpdGggdGhlaXIgdmFsdWUgaW4g b3JkZXIgdG8gc2V0IHRoZW0gYXMgYnVmZmVyIGxvY2FsCjs7IHZhcmlhYmxlcyBsYXRlciBpbiB0 aGUgcHJvY2Vzcy4KCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBvcmctZXhwb3J0LWdldC1lbnZpcm9u bWVudCAoJm9wdGlvbmFsIGJhY2tlbmQgc3VidHJlZXAgZXh0LXBsaXN0KQogICJDb2xsZWN0IGV4 cG9ydCBvcHRpb25zIGZyb20gdGhlIGN1cnJlbnQgYnVmZmVyLgoKT3B0aW9uYWwgYXJndW1lbnQg QkFDS0VORCBpcyBhbiBleHBvcnQgYmFjay1lbmQsIGFzIHJldHVybmVkIGJ5CmBvcmctZXhwb3J0 LWNyZWF0ZS1iYWNrZW5kJy4KCldoZW4gb3B0aW9uYWwgYXJndW1lbnQgU1VCVFJFRVAgaXMgbm9u LW5pbCwgYXNzdW1lIHRoZSBleHBvcnQgaXMKZG9uZSBhZ2FpbnN0IHRoZSBjdXJyZW50IHN1Yi10 cmVlLgoKVGhpcmQgb3B0aW9uYWwgYXJndW1lbnQgRVhULVBMSVNUIGlzIGEgcHJvcGVydHkgbGlz dCB3aXRoCmV4dGVybmFsIHBhcmFtZXRlcnMgb3ZlcnJpZGluZyBPcmcgZGVmYXVsdCBzZXR0aW5n cywgYnV0IHN0aWxsCmluZmVyaW9yIHRvIGZpbGUtbG9jYWwgc2V0dGluZ3MuIgogIDs7IEZpcnN0 IGluc3RhbGwgIytCSU5EIHZhcmlhYmxlcyBzaW5jZSB0aGVzZSBtdXN0IGJlIHNldCBiZWZvcmUK ICA7OyBnbG9iYWwgb3B0aW9ucyBhcmUgcmVhZC4KICAoZG9saXN0IChwYWlyIChvcmctZXhwb3J0 LS1saXN0LWJvdW5kLXZhcmlhYmxlcykpCiAgICAoc2V0IChtYWtlLWxvY2FsLXZhcmlhYmxlIChj YXIgcGFpcikpIChudGggMSBwYWlyKSkpCiAgOzsgR2V0IGFuZCBwcmlvcml0aXplIGV4cG9ydCBv cHRpb25zLi4uCiAgKG9yZy1jb21iaW5lLXBsaXN0cwogICA7OyAuLi4gZnJvbSBnbG9iYWwgdmFy aWFibGVzLi4uCiAgIChvcmctZXhwb3J0LS1nZXQtZ2xvYmFsLW9wdGlvbnMgYmFja2VuZCkKICAg OzsgLi4uIGZyb20gYW4gZXh0ZXJuYWwgcHJvcGVydHkgbGlzdC4uLgogICBleHQtcGxpc3QKICAg OzsgLi4uIGZyb20gaW4tYnVmZmVyIHNldHRpbmdzLi4uCiAgIChvcmctZXhwb3J0LS1nZXQtaW5i dWZmZXItb3B0aW9ucyBiYWNrZW5kKQogICA7OyAuLi4gYW5kIGZyb20gc3VidHJlZSwgd2hlbiBh cHByb3ByaWF0ZS4KICAgKGFuZCBzdWJ0cmVlcCAob3JnLWV4cG9ydC0tZ2V0LXN1YnRyZWUtb3B0 aW9ucyBiYWNrZW5kKSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtLXBhcnNlLW9wdGlvbi1rZXl3b3Jk IChvcHRpb25zICZvcHRpb25hbCBiYWNrZW5kKQogICJQYXJzZSBhbiBPUFRJT05TIGxpbmUgYW5k IHJldHVybiB2YWx1ZXMgYXMgYSBwbGlzdC4KT3B0aW9uYWwgYXJndW1lbnQgQkFDS0VORCBpcyBh biBleHBvcnQgYmFjay1lbmQsIGFzIHJldHVybmVkIGJ5LAplLmcuLCBgb3JnLWV4cG9ydC1jcmVh dGUtYmFja2VuZCcuICBJdCBzcGVjaWZpZXMgd2hpY2ggYmFjay1lbmQKc3BlY2lmaWMgaXRlbXMg dG8gcmVhZCwgaWYgYW55LiIKICAobGV0ICgobGluZQoJIChsZXQgKChzIDApIGFsaXN0KQoJICAg KHdoaWxlIChzdHJpbmctbWF0Y2ggIlxcKC4rP1xcKTpcXCgoLio/KVxcfFxcUy0rXFwpP1sgXHRd KiIgb3B0aW9ucyBzKQoJICAgICAoc2V0cSBzIChtYXRjaC1lbmQgMCkpCgkgICAgIChsZXQgKCh2 YWx1ZSAobWF0Y2gtc3RyaW5nIDIgb3B0aW9ucykpKQogICAgICAgICAgICAgICAod2hlbiB2YWx1 ZQogICAgICAgICAgICAgICAgIChwdXNoIChjb25zIChtYXRjaC1zdHJpbmcgMSBvcHRpb25zKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZWFkIHZhbHVlKSkKCQkgICAgICAgYWxpc3Qp KSkpCgkgICBhbGlzdCkpCgk7OyBQcmlvcml0eSBpcyBnaXZlbiB0byBiYWNrLWVuZCBzcGVjaWZp YyBvcHRpb25zLgoJKGFsbCAoYXBwZW5kIChvcmctZXhwb3J0LWdldC1hbGwtb3B0aW9ucyBiYWNr ZW5kKQoJCSAgICAgb3JnLWV4cG9ydC1vcHRpb25zLWFsaXN0KSkKCShwbGlzdCkpCiAgICAod2hl biBsaW5lCiAgICAgIChkb2xpc3QgKGVudHJ5IGFsbCBwbGlzdCkKCShsZXQgKChpdGVtIChudGgg MiBlbnRyeSkpKQoJICAod2hlbiBpdGVtCgkgICAgKGxldCAoKHYgKGFzc29jLXN0cmluZyBpdGVt IGxpbmUgdCkpKQoJICAgICAgKHdoZW4gdiAoc2V0cSBwbGlzdCAocGxpc3QtcHV0IHBsaXN0IChj YXIgZW50cnkpIChjZHIgdikpKSkpKSkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC0tZ2V0LXN1YnRy ZWUtb3B0aW9ucyAoJm9wdGlvbmFsIGJhY2tlbmQpCiAgIkdldCBleHBvcnQgb3B0aW9ucyBpbiBz dWJ0cmVlIGF0IHBvaW50LgpPcHRpb25hbCBhcmd1bWVudCBCQUNLRU5EIGlzIGFuIGV4cG9ydCBi YWNrLWVuZCwgYXMgcmV0dXJuZWQgYnksCmUuZy4sIGBvcmctZXhwb3J0LWNyZWF0ZS1iYWNrZW5k Jy4gIEl0IHNwZWNpZmllcyBiYWNrLWVuZCB1c2VkCmZvciBleHBvcnQuICBSZXR1cm4gb3B0aW9u cyBhcyBhIHBsaXN0LiIKICA7OyBGb3IgZWFjaCBidWZmZXIga2V5d29yZCwgY3JlYXRlIGEgaGVh ZGxpbmUgcHJvcGVydHkgc2V0dGluZyB0aGUKICA7OyBzYW1lIHByb3BlcnR5IGluIGNvbW11bmlj YXRpb24gY2hhbm5lbC4gIFRoZSBuYW1lIGZvciB0aGUKICA7OyBwcm9wZXJ0eSBpcyB0aGUga2V5 d29yZCB3aXRoICJFWFBPUlRfIiBhcHBlbmRlZCB0byBpdC4KICAob3JnLXdpdGgtd2lkZS1idWZm ZXIKICAgOzsgTWFrZSBzdXJlIHBvaW50IGlzIGF0IGEgaGVhZGluZy4KICAgKGlmIChvcmctYXQt aGVhZGluZy1wKSAob3JnLXVwLWhlYWRpbmctc2FmZSkgKG9yZy1iYWNrLXRvLWhlYWRpbmcgdCkp CiAgIChsZXQgKChwbGlzdAoJICA7OyBFWFBPUlRfT1BUSU9OUyBhcmUgcGFyc2VkIGluIGEgbm9u LXN0YW5kYXJkIHdheS4gIFRha2UKCSAgOzsgY2FyZSBvZiB0aGVtIHJpZ2h0IGZyb20gdGhlIHN0 YXJ0LgoJICAobGV0ICgobyAob3JnLWVudHJ5LWdldCAocG9pbnQpICJFWFBPUlRfT1BUSU9OUyIg J3NlbGVjdGl2ZSkpKQoJICAgIChhbmQgbyAob3JnLWV4cG9ydC0tcGFyc2Utb3B0aW9uLWtleXdv cmQgbyBiYWNrZW5kKSkpKQoJIDs7IFRha2UgY2FyZSBvZiBFWFBPUlRfVElUTEUuICBJZiBpdCBp c24ndCBkZWZpbmVkLCB1c2UKCSA7OyBoZWFkbGluZSdzIHRpdGxlICh3aXRoIG5vIHRvZG8ga2V5 d29yZCwgcHJpb3JpdHkgY29va2llIG9yCgkgOzsgdGFnKSBhcyBpdHMgZmFsbGJhY2sgdmFsdWUu CgkgKGNhY2hlIChsaXN0CgkJIChjb25zICJUSVRMRSIKCQkgICAgICAgKG9yIChvcmctZW50cnkt Z2V0IChwb2ludCkgIkVYUE9SVF9USVRMRSIgJ3NlbGVjdGl2ZSkKCQkJICAgKGxldCAoKGNhc2Ut Zm9sZC1zZWFyY2ggbmlsKSkKCQkJICAgICAobG9va2luZy1hdCBvcmctY29tcGxleC1oZWFkaW5n LXJlZ2V4cCkKCQkJICAgICAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgNCkpKSkpKQoJIDs7 IExvb2sgZm9yIGJvdGggZ2VuZXJhbCBrZXl3b3JkcyBhbmQgYmFjay1lbmQgc3BlY2lmaWMKCSA7 OyBvcHRpb25zLCB3aXRoIHByaW9yaXR5IGdpdmVuIHRvIHRoZSBsYXR0ZXIuCgkgKG9wdGlvbnMg KGFwcGVuZCAob3JnLWV4cG9ydC1nZXQtYWxsLW9wdGlvbnMgYmFja2VuZCkKCQkJICBvcmctZXhw b3J0LW9wdGlvbnMtYWxpc3QpKSkKICAgICA7OyBIYW5kbGUgb3RoZXIga2V5d29yZHMuICBUaGVu IHJldHVybiBQTElTVC4KICAgICAoZG9saXN0IChvcHRpb24gb3B0aW9ucyBwbGlzdCkKICAgICAg IChsZXQgKChwcm9wZXJ0eSAoY2FyIG9wdGlvbikpCgkgICAgIChrZXl3b3JkIChudGggMSBvcHRp b24pKSkKCSAod2hlbiBrZXl3b3JkCgkgICAobGV0ICgodmFsdWUKCQkgIChvciAoY2RyIChhc3Nv YyBrZXl3b3JkIGNhY2hlKSkKCQkgICAgICAobGV0ICgodiAob3JnLWVudHJ5LWdldCAocG9pbnQp CgkJCQkJICAgICAgKGNvbmNhdCAiRVhQT1JUXyIga2V5d29yZCkKCQkJCQkgICAgICAnc2VsZWN0 aXZlKSkpCgkJCShwdXNoIChjb25zIGtleXdvcmQgdikgY2FjaGUpIHYpKSkpCgkgICAgICh3aGVu IHZhbHVlCgkgICAgICAgKHNldHEgcGxpc3QKCQkgICAgIChwbGlzdC1wdXQgcGxpc3QKCQkJCXBy b3BlcnR5CgkJCQkoY2wtY2FzZSAobnRoIDQgb3B0aW9uKQoJCQkJICAocGFyc2UKCQkJCSAgIChv cmctZWxlbWVudC1wYXJzZS1zZWNvbmRhcnktc3RyaW5nCgkJCQkgICAgdmFsdWUgKG9yZy1lbGVt ZW50LXJlc3RyaWN0aW9uICdrZXl3b3JkKSkpCgkJCQkgIChzcGxpdCAoc3BsaXQtc3RyaW5nIHZh bHVlKSkKCQkJCSAgKHQgdmFsdWUpKSkpKSkpKSkpKSkKCihkZWZ1biBvcmctZXhwb3J0LS1nZXQt aW5idWZmZXItb3B0aW9ucyAoJm9wdGlvbmFsIGJhY2tlbmQpCiAgIlJldHVybiBjdXJyZW50IGJ1 ZmZlciBleHBvcnQgb3B0aW9ucywgYXMgYSBwbGlzdC4KCk9wdGlvbmFsIGFyZ3VtZW50IEJBQ0tF TkQsIHdoZW4gbm9uLW5pbCwgaXMgYW4gZXhwb3J0IGJhY2stZW5kLAphcyByZXR1cm5lZCBieSwg ZS5nLiwgYG9yZy1leHBvcnQtY3JlYXRlLWJhY2tlbmQnLiAgSXQgc3BlY2lmaWVzCndoaWNoIGJh Y2stZW5kIHNwZWNpZmljIG9wdGlvbnMgc2hvdWxkIGFsc28gYmUgcmVhZCBpbiB0aGUKcHJvY2Vz cy4KCkFzc3VtZSBidWZmZXIgaXMgaW4gT3JnIG1vZGUuICBOYXJyb3dpbmcsIGlmIGFueSwgaXMg aWdub3JlZC4iCiAgKGxldCogKChjYXNlLWZvbGQtc2VhcmNoIHQpCgkgKG9wdGlvbnMgKGFwcGVu ZAoJCSAgIDs7IFByaW9yaXR5IGlzIGdpdmVuIHRvIGJhY2stZW5kIHNwZWNpZmljIG9wdGlvbnMu CgkJICAgKG9yZy1leHBvcnQtZ2V0LWFsbC1vcHRpb25zIGJhY2tlbmQpCgkJICAgb3JnLWV4cG9y dC1vcHRpb25zLWFsaXN0KSkKCSBwbGlzdCB0by1wYXJzZSkKICAgIChsZXQgKChmaW5kLXByb3Bl cnRpZXMKCSAgIChsYW1iZGEgKGtleXdvcmQpCgkgICAgIDs7IFJldHVybiBhbGwgcHJvcGVydGll cyBhc3NvY2lhdGVkIHRvIEtFWVdPUkQuCgkgICAgIChsZXQgKHByb3BlcnRpZXMpCgkgICAgICAg KGRvbGlzdCAob3B0aW9uIG9wdGlvbnMgcHJvcGVydGllcykKCQkgKHdoZW4gKGVxdWFsIChudGgg MSBvcHRpb24pIGtleXdvcmQpCgkJICAgKGNsLXB1c2huZXcgKGNhciBvcHRpb24pIHByb3BlcnRp ZXMpKSkpKSkpCiAgICAgIDs7IFJlYWQgb3B0aW9ucyBpbiB0aGUgY3VycmVudCBidWZmZXIgYW5k IHJldHVybiB2YWx1ZS4KICAgICAgKGRvbGlzdCAoZW50cnkgKG9yZy1jb2xsZWN0LWtleXdvcmRz CgkJICAgICAgKG5jb25jIChkZWxxIG5pbCAobWFwY2FyICMnY2FkciBvcHRpb25zKSkKCQkJICAg ICAnKCJGSUxFVEFHUyIgIk9QVElPTlMiKSkpKQoJKHBjYXNlIGVudHJ5CgkgIChgKCJPUFRJT05T IiAuICx2YWx1ZXMpCgkgICAoc2V0cSBwbGlzdAoJCSAoYXBwbHkgIydvcmctY29tYmluZS1wbGlz dHMKCQkJcGxpc3QKCQkJKG1hcGNhciAobGFtYmRhICh2KQoJCQkJICAob3JnLWV4cG9ydC0tcGFy c2Utb3B0aW9uLWtleXdvcmQgdiBiYWNrZW5kKSkKCQkJCXZhbHVlcykpKSkKCSAgKGAoIkZJTEVU QUdTIiAuICx2YWx1ZXMpCgkgICAoc2V0cSBwbGlzdAoJCSAocGxpc3QtcHV0IHBsaXN0CgkJCSAg ICA6ZmlsZXRhZ3MKCQkJICAgIChvcmctdW5pcXVpZnkKCQkJICAgICAoY2wtbWFwY2FuIChsYW1i ZGEgKHYpIChvcmctc3BsaXQtc3RyaW5nIHYgIjoiKSkKCQkJCQl2YWx1ZXMpKSkpKQoJICAoYCgs a2V5d29yZCAuICx2YWx1ZXMpCgkgICAoZG9saXN0IChwcm9wZXJ0eSAoZnVuY2FsbCBmaW5kLXBy b3BlcnRpZXMga2V5d29yZCkpCgkgICAgIChzZXRxIHBsaXN0CgkJICAgKHBsaXN0LXB1dAoJCSAg ICBwbGlzdCBwcm9wZXJ0eQoJCSAgICA7OyBIYW5kbGUgdmFsdWUgZGVwZW5kaW5nIG9uIHNwZWNp ZmllZCBCRUhBVklPUi4KCQkgICAgKGNsLWNhc2UgKG50aCA0IChhc3NxIHByb3BlcnR5IG9wdGlv bnMpKQoJCSAgICAgIChwYXJzZQoJCSAgICAgICAodW5sZXNzIChtZW1xIHByb3BlcnR5IHRvLXBh cnNlKQoJCQkgKHB1c2ggcHJvcGVydHkgdG8tcGFyc2UpKQoJCSAgICAgICA7OyBFdmVuIGlmIGBw YXJzZScgaW1wbGllcyBgc3BhY2UnIGJlaGF2aW9yLCB3ZQoJCSAgICAgICA7OyBzZXBhcmF0ZSBs aW5lIHdpdGggIlxuIiBzbyBhcyB0byBwcmVzZXJ2ZQoJCSAgICAgICA7OyBsaW5lLWJyZWFrcy4K CQkgICAgICAgKG1hcGNvbmNhdCAjJ2lkZW50aXR5IHZhbHVlcyAiXG4iKSkKCQkgICAgICAoc3Bh Y2UKCQkgICAgICAgKG1hcGNvbmNhdCAjJ2lkZW50aXR5IHZhbHVlcyAiICIpKQoJCSAgICAgIChu ZXdsaW5lCgkJICAgICAgIChtYXBjb25jYXQgIydpZGVudGl0eSB2YWx1ZXMgIlxuIikpCgkJICAg ICAgKHNwbGl0CgkJICAgICAgIChjbC1tYXBjYW4gKGxhbWJkYSAodikgKHNwbGl0LXN0cmluZyB2 KSkgdmFsdWVzKSkKCQkgICAgICAoKHQpCgkJICAgICAgIChvcmctbGFzdCB2YWx1ZXMpKQoJCSAg ICAgIChvdGhlcndpc2UKCQkgICAgICAgKGNhciB2YWx1ZXMpKSkpKSkpKSkKICAgICAgOzsgUGFy c2UgcHJvcGVydGllcyBpbiBUTy1QQVJTRS4gIFJlbW92ZSBuZXdsaW5lIGNoYXJhY3RlcnMgbm90 CiAgICAgIDs7IGludm9sdmVkIGluIGxpbmUgYnJlYWtzIHRvIHNpbXVsYXRlIGBzcGFjZScgYmVo YXZpb3IuCiAgICAgIDs7IEZpbmFsbHkgcmV0dXJuIG9wdGlvbnMuCiAgICAgIChkb2xpc3QgKHAg dG8tcGFyc2UgcGxpc3QpCgkobGV0ICgodmFsdWUgKG9yZy1lbGVtZW50LXBhcnNlLXNlY29uZGFy eS1zdHJpbmcKCQkgICAgICAocGxpc3QtZ2V0IHBsaXN0IHApCgkJICAgICAgKG9yZy1lbGVtZW50 LXJlc3RyaWN0aW9uICdrZXl3b3JkKSkpKQoJICAob3JnLWVsZW1lbnQtbWFwIHZhbHVlICdwbGFp bi10ZXh0CgkgICAgKGxhbWJkYSAocykKCSAgICAgIChvcmctZWxlbWVudC1zZXQtZWxlbWVudAoJ ICAgICAgIHMgKHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZyAiXG4iICIgIiBzKSkpKQoJICAoc2V0 cSBwbGlzdCAocGxpc3QtcHV0IHBsaXN0IHAgdmFsdWUpKSkpKSkpCgooZGVmdW4gb3JnLWV4cG9y dC0tZ2V0LWV4cG9ydC1hdHRyaWJ1dGVzCiAgICAoJm9wdGlvbmFsIGJhY2tlbmQgc3VidHJlZXAg dmlzaWJsZS1vbmx5IGJvZHktb25seSkKICAiUmV0dXJuIHByb3BlcnRpZXMgcmVsYXRlZCB0byBl eHBvcnQgcHJvY2VzcywgYXMgYSBwbGlzdC4KT3B0aW9uYWwgYXJndW1lbnRzIEJBQ0tFTkQsIFNV QlRSRUVQLCBWSVNJQkxFLU9OTFkgYW5kIEJPRFktT05MWQphcmUgbGlrZSB0aGUgYXJndW1lbnRz IHdpdGggdGhlIHNhbWUgbmFtZXMgb2YgZnVuY3Rpb24KYG9yZy1leHBvcnQtYXMnLiIKICAobGlz dCA6ZXhwb3J0LW9wdGlvbnMgKGRlbHEgbmlsCgkJCSAgICAgIChsaXN0IChhbmQgc3VidHJlZXAg J3N1YnRyZWUpCgkJCQkgICAgKGFuZCB2aXNpYmxlLW9ubHkgJ3Zpc2libGUtb25seSkKCQkJCSAg ICAoYW5kIGJvZHktb25seSAnYm9keS1vbmx5KSkpCgk6YmFjay1lbmQgYmFja2VuZAoJOnRyYW5z bGF0ZS1hbGlzdCAob3JnLWV4cG9ydC1nZXQtYWxsLXRyYW5zY29kZXJzIGJhY2tlbmQpCgk6ZXhw b3J0ZWQtZGF0YSAobWFrZS1oYXNoLXRhYmxlIDp0ZXN0ICMnZXEgOnNpemUgNDAwMSkpKQoKKGRl ZnVuIG9yZy1leHBvcnQtLWdldC1idWZmZXItYXR0cmlidXRlcyAoKQogICJSZXR1cm4gcHJvcGVy dGllcyByZWxhdGVkIHRvIGJ1ZmZlciBhdHRyaWJ1dGVzLCBhcyBhIHBsaXN0LiIKICAobGlzdCA6 aW5wdXQtYnVmZmVyIChidWZmZXItbmFtZSAoYnVmZmVyLWJhc2UtYnVmZmVyKSkKCTppbnB1dC1m aWxlIChidWZmZXItZmlsZS1uYW1lIChidWZmZXItYmFzZS1idWZmZXIpKSkpCgooZGVmdW4gb3Jn LWV4cG9ydC0tZ2V0LWdsb2JhbC1vcHRpb25zICgmb3B0aW9uYWwgYmFja2VuZCkKICAiUmV0dXJu IGdsb2JhbCBleHBvcnQgb3B0aW9ucyBhcyBhIHBsaXN0LgpPcHRpb25hbCBhcmd1bWVudCBCQUNL RU5ELCBpZiBub24tbmlsLCBpcyBhbiBleHBvcnQgYmFjay1lbmQsIGFzCnJldHVybmVkIGJ5LCBl LmcuLCBgb3JnLWV4cG9ydC1jcmVhdGUtYmFja2VuZCcuICBJdCBzcGVjaWZpZXMKd2hpY2ggYmFj ay1lbmQgc3BlY2lmaWMgZXhwb3J0IG9wdGlvbnMgc2hvdWxkIGFsc28gYmUgcmVhZCBpbiB0aGUK cHJvY2Vzcy4iCiAgKGxldCAocGxpc3QKCTs7IFByaW9yaXR5IGlzIGdpdmVuIHRvIGJhY2stZW5k IHNwZWNpZmljIG9wdGlvbnMuCgkoYWxsIChhcHBlbmQgKG9yZy1leHBvcnQtZ2V0LWFsbC1vcHRp b25zIGJhY2tlbmQpCgkJICAgICBvcmctZXhwb3J0LW9wdGlvbnMtYWxpc3QpKSkKICAgIChkb2xp c3QgKGNlbGwgYWxsIHBsaXN0KQogICAgICAobGV0ICgocHJvcCAoY2FyIGNlbGwpKSkKCSh1bmxl c3MgKHBsaXN0LW1lbWJlciBwbGlzdCBwcm9wKQoJICAoc2V0cSBwbGlzdAoJCShwbGlzdC1wdXQK CQkgcGxpc3QKCQkgcHJvcAoJCSA7OyBFdmFsdWF0ZSBkZWZhdWx0IHZhbHVlIHByb3ZpZGVkLgoJ CSAobGV0ICgodmFsdWUgKGV2YWwgKG50aCAzIGNlbGwpIHQpKSkKCQkgICAoaWYgKGVxIChudGgg NCBjZWxsKSAncGFyc2UpCgkJICAgICAgIChvcmctZWxlbWVudC1wYXJzZS1zZWNvbmRhcnktc3Ry aW5nCgkJCXZhbHVlIChvcmctZWxlbWVudC1yZXN0cmljdGlvbiAna2V5d29yZCkpCgkJICAgICB2 YWx1ZSkpKSkpKSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtLWxpc3QtYm91bmQtdmFyaWFibGVzICgp CiAgIlJldHVybiB2YXJpYWJsZXMgYm91bmQgZnJvbSBCSU5EIGtleXdvcmRzIGluIGN1cnJlbnQg YnVmZmVyLgpBbHNvIGxvb2sgZm9yIEJJTkQga2V5d29yZHMgaW4gc2V0dXAgZmlsZXMuICBUaGUg cmV0dXJuIHZhbHVlIGlzCmFuIGFsaXN0IHdoZXJlIGFzc29jaWF0aW9ucyBhcmUgKFZBUklBQkxF LU5BTUUgVkFMVUUpLiIKICAod2hlbiBvcmctZXhwb3J0LWFsbG93LWJpbmQta2V5d29yZHMKICAg IChwY2FzZSAob3JnLWNvbGxlY3Qta2V5d29yZHMgJygiQklORCIpKQogICAgICAoYCgoIkJJTkQi IC4gLHZhbHVlcykpCiAgICAgICAobWFwY2FyIChsYW1iZGEgKHYpIChyZWFkIChmb3JtYXQgIigl cykiIHYpKSkKCSAgICAgICB2YWx1ZXMpKSkpKQoKOzsgZGVmc3Vic3Qgb3JnLWV4cG9ydC1nZXQt cGFyZW50IG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgZmlyc3QgdXNlLAo7OyB3YXMgb3JpZ2luYWxs eSBkZWZpbmVkIGluIHRoZSB0b3BvbG9neSBzZWN0aW9uCgooZGVmc3Vic3Qgb3JnLWV4cG9ydC1n ZXQtcGFyZW50IChibG9iKQogICJSZXR1cm4gQkxPQiBwYXJlbnQgb3IgbmlsLgpCTE9CIGlzIHRo ZSBlbGVtZW50IG9yIG9iamVjdCBjb25zaWRlcmVkLiIKICAob3JnLWVsZW1lbnQtcHJvcGVydHkg OnBhcmVudCBibG9iKSkKCjs7OzsgVHJlZSBQcm9wZXJ0aWVzCjs7Cjs7IFRyZWUgcHJvcGVydGll cyBhcmUgaW5mb3JtYXRpb24gZXh0cmFjdGVkIGZyb20gcGFyc2UgdHJlZS4gIFRoZXkKOzsgYXJl IGluaXRpYWxpemVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRyYW5zY29kaW5nIHByb2Nlc3Mg YnkKOzsgYG9yZy1leHBvcnQtLWNvbGxlY3QtdHJlZS1wcm9wZXJ0aWVzJy4KOzsKOzsgRGVkaWNh dGVkIGZ1bmN0aW9ucyBmb2N1cyBvbiBjb21wdXRpbmcgdGhlIHZhbHVlIG9mIHNwZWNpZmljIHRy ZWUKOzsgcHJvcGVydGllcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24uICBUaHVzLAo7OyBgb3JnLWV4 cG9ydC0tcG9wdWxhdGUtaWdub3JlLWxpc3QnIGxpc3RzIGVsZW1lbnRzIGFuZCBvYmplY3RzIHRo YXQKOzsgc2hvdWxkIGJlIHNraXBwZWQgZHVyaW5nIGV4cG9ydCwgYG9yZy1leHBvcnQtLWdldC1t aW4tbGV2ZWwnIGdldHMKOzsgdGhlIG1pbmltYWwgZXhwb3J0YWJsZSBsZXZlbCwgdXNlZCBhcyBh IGJhc2lzIHRvIGNvbXB1dGUgcmVsYXRpdmUKOzsgbGV2ZWwgZm9yIGhlYWRsaW5lcy4gIEV2ZW50 dWFsbHkKOzsgYG9yZy1leHBvcnQtLWNvbGxlY3QtaGVhZGxpbmUtbnVtYmVyaW5nJyBidWlsZHMg YW4gYWxpc3QgYmV0d2Vlbgo7OyBoZWFkbGluZXMgYW5kIHRoZWlyIG51bWJlcmluZy4KCihkZWZ1 biBvcmctZXhwb3J0LS1jb2xsZWN0LXRyZWUtcHJvcGVydGllcyAoZGF0YSBpbmZvKQogICJFeHRy YWN0IHRyZWUgcHJvcGVydGllcyBmcm9tIHBhcnNlIHRyZWUuCgpEQVRBIGlzIHRoZSBwYXJzZSB0 cmVlIGZyb20gd2hpY2ggaW5mb3JtYXRpb24gaXMgcmV0cmlldmVkLiAgSU5GTwppcyBhIGxpc3Qg aG9sZGluZyBleHBvcnQgb3B0aW9ucy4KCkZvbGxvd2luZyB0cmVlIHByb3BlcnRpZXMgYXJlIHNl dCBvciB1cGRhdGVkOgoKYDpoZWFkbGluZS1vZmZzZXQnIE9mZnNldCBiZXR3ZWVuIHRydWUgbGV2 ZWwgb2YgaGVhZGxpbmVzIGFuZAoJCSAgIGxvY2FsIGxldmVsLiAgQW4gb2Zmc2V0IG9mIC0xIG1l YW5zIGEgaGVhZGxpbmUKCQkgICBvZiBsZXZlbCAyIHNob3VsZCBiZSBjb25zaWRlcmVkIGFzIGEg bGV2ZWwKCQkgICAxIGhlYWRsaW5lIGluIHRoZSBjb250ZXh0LgoKYDpoZWFkbGluZS1udW1iZXJp bmcnIEFsaXN0IG9mIGFsbCBoZWFkbGluZXMgYXMga2V5IGFuZCB0aGUKCQkgICAgICBhc3NvY2lh dGVkIG51bWJlcmluZyBhcyB2YWx1ZS4KCmA6aWQtYWxpc3QnIEFsaXN0IG9mIGFsbCBJRCByZWZl cmVuY2VzIGFzIGtleSBhbmQgYXNzb2NpYXRlZCBmaWxlCiAgICAgICAgICAgIGFzIHZhbHVlLgoK UmV0dXJuIHVwZGF0ZWQgcGxpc3QuIgogIDs7IEluc3RhbGwgdGhlIHBhcnNlIHRyZWUgaW4gdGhl IGNvbW11bmljYXRpb24gY2hhbm5lbC4KICAoc2V0cSBpbmZvIChwbGlzdC1wdXQgaW5mbyA6cGFy c2UtdHJlZSBkYXRhKSkKICA7OyBDb21wdXRlIGA6aGVhZGxpbmUtb2Zmc2V0JyBpbiBvcmRlciB0 byBiZSBhYmxlIHRvIHVzZQogIDs7IGBvcmctZXhwb3J0LWdldC1yZWxhdGl2ZS1sZXZlbCcuCiAg KHNldHEgaW5mbwoJKHBsaXN0LXB1dCBpbmZvCgkJICAgOmhlYWRsaW5lLW9mZnNldAoJCSAgICgt IDEgKG9yZy1leHBvcnQtLWdldC1taW4tbGV2ZWwgZGF0YSBpbmZvKSkpKQogIDs7IEZyb20gbm93 IG9uLCBwcm9wZXJ0aWVzIG9yZGVyIGRvZXNuJ3QgbWF0dGVyOiBnZXQgdGhlIHJlc3Qgb2YgdGhl CiAgOzsgdHJlZSBwcm9wZXJ0aWVzLgogIChvcmctY29tYmluZS1wbGlzdHMKICAgaW5mbwogICAo bGlzdCA6aGVhZGxpbmUtbnVtYmVyaW5nIChvcmctZXhwb3J0LS1jb2xsZWN0LWhlYWRsaW5lLW51 bWJlcmluZyBkYXRhIGluZm8pCgkgOmlkLWFsaXN0CgkgKG9yZy1lbGVtZW50LW1hcCBkYXRhICds aW5rCgkgICAobGFtYmRhIChsKQoJICAgICAoYW5kIChzdHJpbmc9IChvcmctZWxlbWVudC1wcm9w ZXJ0eSA6dHlwZSBsKSAiaWQiKQoJCSAgKGxldCogKChpZCAob3JnLWVsZW1lbnQtcHJvcGVydHkg OnBhdGggbCkpCgkJCSAoZmlsZSAoY2FyIChvcmctaWQtZmluZCBpZCkpKSkKCQkgICAgKGFuZCBm aWxlIChjb25zIGlkIChmaWxlLXJlbGF0aXZlLW5hbWUgZmlsZSkpKSkpKSkpKSkKCihkZWZ1biBv cmctZXhwb3J0LS1nZXQtbWluLWxldmVsIChkYXRhIG9wdGlvbnMpCiAgIlJldHVybiBtaW5pbXVt IGV4cG9ydGFibGUgaGVhZGxpbmUncyBsZXZlbCBpbiBEQVRBLgpEQVRBIGlzIHBhcnNlZCB0cmVl IGFzIHJldHVybmVkIGJ5IGBvcmctZWxlbWVudC1wYXJzZS1idWZmZXInLgpPUFRJT05TIGlzIGEg cGxpc3QgaG9sZGluZyBleHBvcnQgb3B0aW9ucy4iCiAgKGNhdGNoICdleGl0CiAgICAobGV0ICgo bWluLWxldmVsIDEwMDAwKSkKICAgICAgKGRvbGlzdCAoZGF0dW0gKG9yZy1lbGVtZW50LWNvbnRl bnRzIGRhdGEpKQoJKHdoZW4gKGFuZCAoZXEgKG9yZy1lbGVtZW50LXR5cGUgZGF0dW0pICdoZWFk bGluZSkKCQkgICAobm90IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Zm9vdG5vdGUtc2VjdGlvbi1w IGRhdHVtKSkKCQkgICAobm90IChtZW1xIGRhdHVtIChwbGlzdC1nZXQgb3B0aW9ucyA6aWdub3Jl LWxpc3QpKSkpCgkgIChzZXRxIG1pbi1sZXZlbCAobWluIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6 bGV2ZWwgZGF0dW0pIG1pbi1sZXZlbCkpCgkgICh3aGVuICg9IG1pbi1sZXZlbCAxKSAodGhyb3cg J2V4aXQgMSkpKSkKICAgICAgOzsgSWYgbm8gaGVhZGxpbmUgd2FzIGZvdW5kLCBmb3IgdGhlIHNh a2Ugb2YgY29uc2lzdGVuY3ksIHNldAogICAgICA7OyBtaW5pbXVtIGxldmVsIHRvIDEgbm9uZXRo ZWxlc3MuCiAgICAgIChpZiAoPSBtaW4tbGV2ZWwgMTAwMDApIDEgbWluLWxldmVsKSkpKQoKKGRl ZnVuIG9yZy1leHBvcnQtLWNvbGxlY3QtaGVhZGxpbmUtbnVtYmVyaW5nIChkYXRhIG9wdGlvbnMp CiAgIlJldHVybiBudW1iZXJpbmcgb2YgYWxsIGV4cG9ydGFibGUsIG51bWJlcmVkIGhlYWRsaW5l cyBpbiBhIHBhcnNlIHRyZWUuCgpEQVRBIGlzIHRoZSBwYXJzZSB0cmVlLiAgT1BUSU9OUyBpcyB0 aGUgcGxpc3QgaG9sZGluZyBleHBvcnQKb3B0aW9ucy4KClJldHVybiBhbiBhbGlzdCB3aG9zZSBr ZXkgaXMgYSBoZWFkbGluZSBhbmQgdmFsdWUgaXMgaXRzCmFzc29jaWF0ZWQgbnVtYmVyaW5nIFwo aW4gdGhlIHNoYXBlIG9mIGEgbGlzdCBvZiBudW1iZXJzKSBvciBuaWwKZm9yIGEgZm9vdG5vdGVz IHNlY3Rpb24uIgogIChsZXQgKChudW1iZXJpbmcgKG1ha2UtdmVjdG9yIG9yZy1leHBvcnQtbWF4 LWRlcHRoIDApKSkKICAgIChvcmctZWxlbWVudC1tYXAgZGF0YSAnaGVhZGxpbmUKICAgICAgKGxh bWJkYSAoaGVhZGxpbmUpCgkod2hlbiAoYW5kIChvcmctZXhwb3J0LW51bWJlcmVkLWhlYWRsaW5l LXAgaGVhZGxpbmUgb3B0aW9ucykKCQkgICAobm90IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Zm9v dG5vdGUtc2VjdGlvbi1wIGhlYWRsaW5lKSkpCgkgIChsZXQgKChyZWxhdGl2ZS1sZXZlbAoJCSAo MS0gKG9yZy1leHBvcnQtZ2V0LXJlbGF0aXZlLWxldmVsIGhlYWRsaW5lIG9wdGlvbnMpKSkpCgkg ICAgKGNvbnMKCSAgICAgaGVhZGxpbmUKCSAgICAgKGNsLWxvb3AKCSAgICAgIGZvciBuIGFjcm9z cyBudW1iZXJpbmcKCSAgICAgIGZvciBpZHggZnJvbSAwIHRvIG9yZy1leHBvcnQtbWF4LWRlcHRo CgkgICAgICB3aGVuICg8IGlkeCByZWxhdGl2ZS1sZXZlbCkgY29sbGVjdCBuCgkgICAgICB3aGVu ICg9IGlkeCByZWxhdGl2ZS1sZXZlbCkgY29sbGVjdCAoYXNldCBudW1iZXJpbmcgaWR4ICgxKyBu KSkKCSAgICAgIHdoZW4gKD4gaWR4IHJlbGF0aXZlLWxldmVsKSBkbyAoYXNldCBudW1iZXJpbmcg aWR4IDApKSkpKSkKICAgICAgb3B0aW9ucykpKQoKKGRlZnVuIG9yZy1leHBvcnQtLXNlbGVjdGVk LXRyZWVzIChkYXRhIGluZm8pCiAgIkxpc3QgaGVhZGxpbmVzIGFuZCBpbmxpbmV0YXNrcyB3aXRo IGEgc2VsZWN0IHRhZyBpbiB0aGVpciB0cmVlLgpEQVRBIGlzIHBhcnNlZCBkYXRhIGFzIHJldHVy bmVkIGJ5IGBvcmctZWxlbWVudC1wYXJzZS1idWZmZXInLgpJTkZPIGlzIGEgcGxpc3QgaG9sZGlu ZyBleHBvcnQgb3B0aW9ucy4iCiAgKGxldCAoKHNlbGVjdCAoY2wtbWFwY2FuIChsYW1iZGEgKHRh ZykgKG9yZy10YWdzLWV4cGFuZCB0YWcgdCkpCgkJCSAgIChwbGlzdC1nZXQgaW5mbyA6c2VsZWN0 LXRhZ3MpKSkpCiAgICAoaWYgKGNsLXNvbWUgKGxhbWJkYSAodGFnKSAobWVtYmVyIHRhZyBzZWxl Y3QpKSAocGxpc3QtZ2V0IGluZm8gOmZpbGV0YWdzKSkKCTs7IElmIEZJTEVUQUdTIGNvbnRhaW5z IGEgc2VsZWN0IHRhZywgZXZlcnkgaGVhZGxpbmUgb3IKCTs7IGlubGluZXRhc2sgaXMgcmV0dXJu ZWQuCgkob3JnLWVsZW1lbnQtbWFwIGRhdGEgJyhoZWFkbGluZSBpbmxpbmV0YXNrKSAjJ2lkZW50 aXR5KQogICAgICAobGV0cmVjICgoc2VsZWN0ZWQtdHJlZXMgbmlsKQoJICAgICAgICh3YWxrLWRh dGEKCQkobGFtYmRhIChkYXRhIGdlbmVhbG9neSkKCQkgIChsZXQgKCh0eXBlIChvcmctZWxlbWVu dC10eXBlIGRhdGEpKSkKCQkgICAgKGNvbmQKCQkgICAgICgobWVtcSB0eXBlICcoaGVhZGxpbmUg aW5saW5ldGFzaykpCgkJICAgICAgKGxldCAoKHRhZ3MgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0 YWdzIGRhdGEpKSkKCQkJKGlmIChjbC1zb21lIChsYW1iZGEgKHRhZykgKG1lbWJlciB0YWcgc2Vs ZWN0KSkgdGFncykKCQkJICAgIDs7IFdoZW4gYSBzZWxlY3QgdGFnIGlzIGZvdW5kLCBtYXJrIGZ1 bGwKCQkJICAgIDs7IGdlbmVhbG9neSBhbmQgZXZlcnkgaGVhZGxpbmUgd2l0aGluIHRoZQoJCQkg ICAgOzsgdHJlZSBhcyBhY2NlcHRhYmxlLgoJCQkgICAgKHNldHEgc2VsZWN0ZWQtdHJlZXMKCQkJ CSAgKGFwcGVuZAoJCQkJICAgZ2VuZWFsb2d5CgkJCQkgICAob3JnLWVsZW1lbnQtbWFwIGRhdGEg JyhoZWFkbGluZSBpbmxpbmV0YXNrKQoJCQkJICAgICAjJ2lkZW50aXR5KQoJCQkJICAgc2VsZWN0 ZWQtdHJlZXMpKQoJCQkgIDs7IElmIGF0IGEgaGVhZGxpbmUsIGNvbnRpbnVlIHNlYXJjaGluZyBp bgoJCQkgIDs7IHRyZWUsIHJlY3Vyc2l2ZWx5LgoJCQkgICh3aGVuIChlcSB0eXBlICdoZWFkbGlu ZSkKCQkJICAgIChkb2xpc3QgKGVsIChvcmctZWxlbWVudC1jb250ZW50cyBkYXRhKSkKCQkJICAg ICAgKGZ1bmNhbGwgd2Fsay1kYXRhIGVsIChjb25zIGRhdGEgZ2VuZWFsb2d5KSkpKSkpKQoJCSAg ICAgKChvciAoZXEgdHlwZSAnb3JnLWRhdGEpCgkJCSAgKG1lbXEgdHlwZSBvcmctZWxlbWVudC1n cmVhdGVyLWVsZW1lbnRzKSkKCQkgICAgICAoZG9saXN0IChlbCAob3JnLWVsZW1lbnQtY29udGVu dHMgZGF0YSkpCgkJCShmdW5jYWxsIHdhbGstZGF0YSBlbCBnZW5lYWxvZ3kpKSkpKSkpKQoJKGZ1 bmNhbGwgd2Fsay1kYXRhIGRhdGEgbmlsKQoJc2VsZWN0ZWQtdHJlZXMpKSkpCgooZGVmdW4gb3Jn LWV4cG9ydC0tc2tpcC1wIChkYXR1bSBvcHRpb25zIHNlbGVjdGVkIGV4Y2x1ZGVkKQogICJOb24t bmlsIHdoZW4gZWxlbWVudCBvciBvYmplY3QgREFUVU0gc2hvdWxkIGJlIHNraXBwZWQgZHVyaW5n IGV4cG9ydC4KT1BUSU9OUyBpcyB0aGUgcGxpc3QgaG9sZGluZyBleHBvcnQgb3B0aW9ucy4gIFNF TEVDVEVELCB3aGVuCm5vbi1uaWwsIGlzIGEgbGlzdCBvZiBoZWFkbGluZXMgb3IgaW5saW5ldGFz a3MgYmVsb25naW5nIHRvCmEgdHJlZSB3aXRoIGEgc2VsZWN0IHRhZy4gIEVYQ0xVREVEIGlzIGEg bGlzdCBvZiB0YWdzLCBhcwpzdHJpbmdzLiAgQW55IGhlYWRsaW5lIG9yIGlubGluZXRhc2sgbWFy a2VkIHdpdGggb25lIG9mIHRob3NlIGlzCm5vdCBleHBvcnRlZC4iCiAgKGNsLWNhc2UgKG9yZy1l bGVtZW50LXR5cGUgZGF0dW0pCiAgICAoKGNvbW1lbnQgY29tbWVudC1ibG9jaykKICAgICA7OyBT a2lwIGFsbCBjb21tZW50cyBhbmQgY29tbWVudCBibG9ja3MuICBNYWtlIHRvIGtlZXAgbWF4aW11 bQogICAgIDs7IG51bWJlciBvZiBibGFuayBsaW5lcyBhcm91bmQgdGhlIGNvbW1lbnQgc28gYXMg dG8gcHJlc2VydmUKICAgICA7OyBsb2NhbCBzdHJ1Y3R1cmUgb2YgdGhlIGRvY3VtZW50IHVwb24g aW50ZXJwcmV0aW5nIGl0IGJhY2sgaW50bwogICAgIDs7IE9yZyBzeW50YXguCiAgICAgKGxldCog KChwcmV2aW91cyAob3JnLWV4cG9ydC1nZXQtcHJldmlvdXMtZWxlbWVudCBkYXR1bSBvcHRpb25z KSkKCSAgICAoYmVmb3JlIChvciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnBvc3QtYmxhbmsgcHJl dmlvdXMpIDApKQoJICAgIChhZnRlciAob3IgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpwb3N0LWJs YW5rIGRhdHVtKSAwKSkpCiAgICAgICAod2hlbiBwcmV2aW91cwoJIChvcmctZWxlbWVudC1wdXQt cHJvcGVydHkgcHJldmlvdXMgOnBvc3QtYmxhbmsgKG1heCBiZWZvcmUgYWZ0ZXIgMSkpKSkKICAg ICB0KQogICAgKGNsb2NrIChub3QgKHBsaXN0LWdldCBvcHRpb25zIDp3aXRoLWNsb2NrcykpKQog ICAgKGRyYXdlcgogICAgIChsZXQgKCh3aXRoLWRyYXdlcnMtcCAocGxpc3QtZ2V0IG9wdGlvbnMg OndpdGgtZHJhd2VycykpKQogICAgICAgKG9yIChub3Qgd2l0aC1kcmF3ZXJzLXApCgkgICAoYW5k IChjb25zcCB3aXRoLWRyYXdlcnMtcCkKCQk7OyBJZiBgOndpdGgtZHJhd2VycycgdmFsdWUgc3Rh cnRzIHdpdGggYG5vdCcsIGlnbm9yZQoJCTs7IGV2ZXJ5IGRyYXdlciB3aG9zZSBuYW1lIGJlbG9u ZyB0byB0aGF0IGxpc3QuCgkJOzsgT3RoZXJ3aXNlLCBpZ25vcmUgZHJhd2VycyB3aG9zZSBuYW1l IGlzbid0IGluIHRoYXQKCQk7OyBsaXN0LgoJCShsZXQgKChuYW1lIChvcmctZWxlbWVudC1wcm9w ZXJ0eSA6ZHJhd2VyLW5hbWUgZGF0dW0pKSkKCQkgIChpZiAoZXEgKGNhciB3aXRoLWRyYXdlcnMt cCkgJ25vdCkKCQkgICAgICAobWVtYmVyLWlnbm9yZS1jYXNlIG5hbWUgKGNkciB3aXRoLWRyYXdl cnMtcCkpCgkJICAgIChub3QgKG1lbWJlci1pZ25vcmUtY2FzZSBuYW1lIHdpdGgtZHJhd2Vycy1w KSkpKSkpKSkKICAgIChmaXhlZC13aWR0aCAobm90IChwbGlzdC1nZXQgb3B0aW9ucyA6d2l0aC1m aXhlZC13aWR0aCkpKQogICAgKChmb290bm90ZS1kZWZpbml0aW9uIGZvb3Rub3RlLXJlZmVyZW5j ZSkKICAgICAobm90IChwbGlzdC1nZXQgb3B0aW9ucyA6d2l0aC1mb290bm90ZXMpKSkKICAgICgo aGVhZGxpbmUgaW5saW5ldGFzaykKICAgICAobGV0ICgod2l0aC10YXNrcyAocGxpc3QtZ2V0IG9w dGlvbnMgOndpdGgtdGFza3MpKQoJICAgKHRvZG8gKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0b2Rv LWtleXdvcmQgZGF0dW0pKQoJICAgKHRvZG8tdHlwZSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnRv ZG8tdHlwZSBkYXR1bSkpCgkgICAoYXJjaGl2ZWQgKHBsaXN0LWdldCBvcHRpb25zIDp3aXRoLWFy Y2hpdmVkLXRyZWVzKSkKCSAgICh0YWdzIChvcmctZXhwb3J0LWdldC10YWdzIGRhdHVtIG9wdGlv bnMgbmlsIHQpKSkKICAgICAgIChvcgoJKGFuZCAoZXEgKG9yZy1lbGVtZW50LXR5cGUgZGF0dW0p ICdpbmxpbmV0YXNrKQoJICAgICAobm90IChwbGlzdC1nZXQgb3B0aW9ucyA6d2l0aC1pbmxpbmV0 YXNrcykpKQoJOzsgSWdub3JlIHN1YnRyZWVzIHdpdGggYW4gZXhjbHVkZSB0YWcuCgkoY2wtc29t ZSAobGFtYmRhICh0YWcpIChtZW1iZXIgdGFnIGV4Y2x1ZGVkKSkgdGFncykKCTs7IFdoZW4gYSBz ZWxlY3QgdGFnIGlzIHByZXNlbnQgaW4gdGhlIGJ1ZmZlciwgaWdub3JlIGFueSB0cmVlCgk7OyB3 aXRob3V0IGl0LgoJKGFuZCBzZWxlY3RlZCAobm90IChtZW1xIGRhdHVtIHNlbGVjdGVkKSkpCgk7 OyBJZ25vcmUgY29tbWVudGVkIHN1Yi10cmVlcy4KCShvcmctZWxlbWVudC1wcm9wZXJ0eSA6Y29t bWVudGVkcCBkYXR1bSkKCTs7IElnbm9yZSBhcmNoaXZlZCBzdWJ0cmVlcyBpZiBgOndpdGgtYXJj aGl2ZWQtdHJlZXMnIGlzIG5pbC4KCShhbmQgKG5vdCBhcmNoaXZlZCkgKG9yZy1lbGVtZW50LXBy b3BlcnR5IDphcmNoaXZlZHAgZGF0dW0pKQoJOzsgSWdub3JlIHRhc2tzLCBpZiBzcGVjaWZpZWQg YnkgYDp3aXRoLXRhc2tzJyBwcm9wZXJ0eS4KCShhbmQgdG9kbwoJICAgICAob3IgKG5vdCB3aXRo LXRhc2tzKQoJCSAoYW5kIChtZW1xIHdpdGgtdGFza3MgJyh0b2RvIGRvbmUpKQoJCSAgICAgIChu b3QgKGVxIHRvZG8tdHlwZSB3aXRoLXRhc2tzKSkpCgkJIChhbmQgKGNvbnNwIHdpdGgtdGFza3Mp IChub3QgKG1lbWJlciB0b2RvIHdpdGgtdGFza3MpKSkpKSkpKQogICAgKChsYXRleC1lbnZpcm9u bWVudCBsYXRleC1mcmFnbWVudCkgKG5vdCAocGxpc3QtZ2V0IG9wdGlvbnMgOndpdGgtbGF0ZXgp KSkKICAgIChub2RlLXByb3BlcnR5CiAgICAgKGxldCAoKHByb3BlcnRpZXMtc2V0IChwbGlzdC1n ZXQgb3B0aW9ucyA6d2l0aC1wcm9wZXJ0aWVzKSkpCiAgICAgICAoY29uZCAoKG51bGwgcHJvcGVy dGllcy1zZXQpIHQpCgkgICAgICgoY29uc3AgcHJvcGVydGllcy1zZXQpCgkgICAgICAobm90ICht ZW1iZXItaWdub3JlLWNhc2UgKG9yZy1lbGVtZW50LXByb3BlcnR5IDprZXkgZGF0dW0pCgkJCQkg ICAgICAgcHJvcGVydGllcy1zZXQpKSkpKSkKICAgIChwbGFubmluZyAobm90IChwbGlzdC1nZXQg b3B0aW9ucyA6d2l0aC1wbGFubmluZykpKQogICAgKHByb3BlcnR5LWRyYXdlciAobm90IChwbGlz dC1nZXQgb3B0aW9ucyA6d2l0aC1wcm9wZXJ0aWVzKSkpCiAgICAoc3RhdGlzdGljcy1jb29raWUg KG5vdCAocGxpc3QtZ2V0IG9wdGlvbnMgOndpdGgtc3RhdGlzdGljcy1jb29raWVzKSkpCiAgICAo dGFibGUgKG5vdCAocGxpc3QtZ2V0IG9wdGlvbnMgOndpdGgtdGFibGVzKSkpCiAgICAodGFibGUt Y2VsbAogICAgIChhbmQgKG9yZy1leHBvcnQtdGFibGUtaGFzLXNwZWNpYWwtY29sdW1uLXAKCSAg IChvcmctZXhwb3J0LWdldC1wYXJlbnQtdGFibGUgZGF0dW0pKQoJICAob3JnLWV4cG9ydC1maXJz dC1zaWJsaW5nLXAgZGF0dW0gb3B0aW9ucykpKQogICAgKHRhYmxlLXJvdyAob3JnLWV4cG9ydC10 YWJsZS1yb3ctaXMtc3BlY2lhbC1wIGRhdHVtIG9wdGlvbnMpKQogICAgKHRpbWVzdGFtcAogICAg IDs7IGA6d2l0aC10aW1lc3RhbXBzJyBvbmx5IGFwcGxpZXMgdG8gaXNvbGF0ZWQgdGltZXN0YW1w cwogICAgIDs7IG9iamVjdHMsIGkuZS4gdGltZXN0YW1wIG9iamVjdHMgaW4gYSBwYXJhZ3JhcGgg Y29udGFpbmluZyBvbmx5CiAgICAgOzsgdGltZXN0YW1wcyBhbmQgd2hpdGVzcGFjZXMuCiAgICAg KHdoZW4gKGxldCAoKHBhcmVudCAob3JnLWV4cG9ydC1nZXQtcGFyZW50LWVsZW1lbnQgZGF0dW0p KSkKCSAgICAgKGFuZCAobWVtcSAob3JnLWVsZW1lbnQtdHlwZSBwYXJlbnQpICcocGFyYWdyYXBo IHZlcnNlLWJsb2NrKSkKCQkgIChub3QgKG9yZy1lbGVtZW50LW1hcCBwYXJlbnQKCQkJICAgKGNv bnMgJ3BsYWluLXRleHQKCQkJCSAocmVtcSAndGltZXN0YW1wIG9yZy1lbGVtZW50LWFsbC1vYmpl Y3RzKSkKCQkJIChsYW1iZGEgKG9iaikKCQkJICAgKG9yIChub3QgKHN0cmluZ3Agb2JqKSkgKG9y Zy1zdHJpbmctbnctcCBvYmopKSkKCQkJIG9wdGlvbnMgdCkpKSkKICAgICAgIChjbC1jYXNlIChw bGlzdC1nZXQgb3B0aW9ucyA6d2l0aC10aW1lc3RhbXBzKQoJICgobmlsKSB0KQoJIChhY3RpdmUK CSAgKG5vdCAobWVtcSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnR5cGUgZGF0dW0pICcoYWN0aXZl IGFjdGl2ZS1yYW5nZSkpKSkKCSAoaW5hY3RpdmUKCSAgKG5vdCAobWVtcSAob3JnLWVsZW1lbnQt cHJvcGVydHkgOnR5cGUgZGF0dW0pCgkJICAgICAnKGluYWN0aXZlIGluYWN0aXZlLXJhbmdlKSkp KSkpKSkpCgoMCjs7OyBUaGUgVHJhbnNjb2Rlcgo7Owo7OyBgb3JnLWV4cG9ydC1kYXRhJyByZWFk cyBhIHBhcnNlIHRyZWUgKG9idGFpbmVkIHdpdGgsIGkuZS4KOzsgYG9yZy1lbGVtZW50LXBhcnNl LWJ1ZmZlcicpIGFuZCB0cmFuc2NvZGVzIGl0IGludG8gYSBzcGVjaWZpZWQKOzsgYmFjay1lbmQg b3V0cHV0LiAgSXQgdGFrZXMgY2FyZSBvZiBmaWx0ZXJpbmcgb3V0IGVsZW1lbnRzIG9yCjs7IG9i amVjdHMgYWNjb3JkaW5nIHRvIGV4cG9ydCBvcHRpb25zIGFuZCBvcmdhbml6aW5nIHRoZSBvdXRw dXQgYmxhbmsKOzsgbGluZXMgYW5kIHdoaXRlIHNwYWNlIGFyZSBwcmVzZXJ2ZWQuICBUaGUgZnVu Y3Rpb24gbWVtb2l6ZXMgaXRzCjs7IHJlc3VsdHMsIHNvIGl0IGlzIGNoZWFwIHRvIGNhbGwgaXQg d2l0aGluIHRyYW5zY29kZXJzLgo7Owo7OyBJdCBpcyBwb3NzaWJsZSB0byBtb2RpZnkgbG9jYWxs eSB0aGUgYmFjay1lbmQgdXNlZCBieQo7OyBgb3JnLWV4cG9ydC1kYXRhJyBvciBldmVuIHVzZSBh IHRlbXBvcmFyeSBiYWNrLWVuZCBieSB1c2luZwo7OyBgb3JnLWV4cG9ydC1kYXRhLXdpdGgtYmFj a2VuZCcuCjs7Cjs7IGBvcmctZXhwb3J0LXRyYW5zY29kZXInIGlzIGFuIGFjY2Vzc29yIHJldHVy bmluZyBhcHByb3ByaWF0ZQo7OyB0cmFuc2xhdG9yIGZ1bmN0aW9uIGZvciBhIGdpdmVuIGVsZW1l bnQgb3Igb2JqZWN0LgoKKGRlZnVuIG9yZy1leHBvcnQtdHJhbnNjb2RlciAoYmxvYiBpbmZvKQog ICJSZXR1cm4gYXBwcm9wcmlhdGUgdHJhbnNjb2RlciBmb3IgQkxPQi4KSU5GTyBpcyBhIHBsaXN0 IGNvbnRhaW5pbmcgZXhwb3J0IGRpcmVjdGl2ZXMuIgogIChsZXQgKCh0eXBlIChvcmctZWxlbWVu dC10eXBlIGJsb2IpKSkKICAgIDs7IFJldHVybiBjb250ZW50cyBvbmx5IGZvciBjb21wbGV0ZSBw YXJzZSB0cmVlcy4KICAgIChpZiAoZXEgdHlwZSAnb3JnLWRhdGEpIChsYW1iZGEgKF9kYXR1bSBj b250ZW50cyBfaW5mbykgY29udGVudHMpCiAgICAgIChsZXQgKCh0cmFuc2NvZGVyIChjZHIgKGFz c3EgdHlwZSAocGxpc3QtZ2V0IGluZm8gOnRyYW5zbGF0ZS1hbGlzdCkpKSkpCgkoYW5kIChmdW5j dGlvbnAgdHJhbnNjb2RlcikgdHJhbnNjb2RlcikpKSkpCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4g b3JnLWV4cG9ydC1kYXRhIChkYXRhIGluZm8pCiAgIkNvbnZlcnQgREFUQSBpbnRvIGN1cnJlbnQg YmFjay1lbmQgZm9ybWF0LgoKREFUQSBpcyBhIHBhcnNlIHRyZWUsIGFuIGVsZW1lbnQgb3IgYW4g b2JqZWN0IG9yIGEgc2Vjb25kYXJ5CnN0cmluZy4gIElORk8gaXMgYSBwbGlzdCBob2xkaW5nIGV4 cG9ydCBvcHRpb25zLgoKUmV0dXJuIGEgc3RyaW5nLiIKICAob3IgKGdldGhhc2ggZGF0YSAocGxp c3QtZ2V0IGluZm8gOmV4cG9ydGVkLWRhdGEpKQogICAgICA7OyBIYW5kbGUgYnJva2VuIGxpbmtz IGFjY29yZGluZyB0bwogICAgICA7OyBgb3JnLWV4cG9ydC13aXRoLWJyb2tlbi1saW5rcycuCiAg ICAgIChjbC1tYWNyb2xldAoJICAoKGJyb2tlbi1saW5rLWhhbmRsZXIKCSAgICAoJnJlc3QgYm9k eSkKCSAgICBgKGNvbmRpdGlvbi1jYXNlIGVycgoJCSAocHJvZ24gLEBib2R5KQoJICAgICAgIChv cmctbGluay1icm9rZW4KCQkocGNhc2UgKHBsaXN0LWdldCBpbmZvIDp3aXRoLWJyb2tlbi1saW5r cykKCQkgIChgbmlsICh1c2VyLWVycm9yICJVbmFibGUgdG8gcmVzb2x2ZSBsaW5rOiAlUyIgKG50 aCAxIGVycikpKQoJCSAgKGBtYXJrIChvcmctZXhwb3J0LWRhdGEKCQkJICAoZm9ybWF0ICJbQlJP S0VOIExJTks6ICVzXSIgKG50aCAxIGVycikpIGluZm8pKQoJCSAgKF8gbmlsKSkpKSkpCgkobGV0 KiAoKHR5cGUgKG9yZy1lbGVtZW50LXR5cGUgZGF0YSkpCgkgICAgICAgKHBhcmVudCAob3JnLWV4 cG9ydC1nZXQtcGFyZW50IGRhdGEpKQoJICAgICAgIChyZXN1bHRzCgkJKGNvbmQKCQkgOzsgSWdu b3JlZCBlbGVtZW50L29iamVjdC4KCQkgKChtZW1xIGRhdGEgKHBsaXN0LWdldCBpbmZvIDppZ25v cmUtbGlzdCkpIG5pbCkKICAgICAgICAgICAgICAgICA7OyBSYXcgY29kZS4KICAgICAgICAgICAg ICAgICAoKGVxIHR5cGUgJ3JhdykgKGNhciAob3JnLWVsZW1lbnQtY29udGVudHMgZGF0YSkpKQoJ CSA7OyBQbGFpbiB0ZXh0LgoJCSAoKGVxIHR5cGUgJ3BsYWluLXRleHQpCgkJICAob3JnLWV4cG9y dC1maWx0ZXItYXBwbHktZnVuY3Rpb25zCgkJICAgKHBsaXN0LWdldCBpbmZvIDpmaWx0ZXItcGxh aW4tdGV4dCkKCQkgICAobGV0ICgodHJhbnNjb2RlciAob3JnLWV4cG9ydC10cmFuc2NvZGVyIGRh dGEgaW5mbykpKQoJCSAgICAgKGlmIHRyYW5zY29kZXIgKGZ1bmNhbGwgdHJhbnNjb2RlciBkYXRh IGluZm8pIGRhdGEpKQoJCSAgIGluZm8pKQoJCSA7OyBTZWNvbmRhcnkgc3RyaW5nLgoJCSAoKG5v dCB0eXBlKQoJCSAgKG1hcGNvbmNhdCAobGFtYmRhIChvYmopIChvcmctZXhwb3J0LWRhdGEgb2Jq IGluZm8pKSBkYXRhICIiKSkKCQkgOzsgRWxlbWVudC9PYmplY3Qgd2l0aG91dCBjb250ZW50cyBv ciwgYXMgYSBzcGVjaWFsCgkJIDs7IGNhc2UsIGhlYWRsaW5lIHdpdGggYXJjaGl2ZSB0YWcgYW5k IGFyY2hpdmVkIHRyZWVzCgkJIDs7IHJlc3RyaWN0ZWQgdG8gdGl0bGUgb25seS4KCQkgKChvciAo bm90IChvcmctZWxlbWVudC1jb250ZW50cyBkYXRhKSkKCQkgICAgICAoYW5kIChlcSB0eXBlICdo ZWFkbGluZSkKCQkJICAgKGVxIChwbGlzdC1nZXQgaW5mbyA6d2l0aC1hcmNoaXZlZC10cmVlcykg J2hlYWRsaW5lKQoJCQkgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmFyY2hpdmVkcCBkYXRhKSkp CgkJICAobGV0ICgodHJhbnNjb2RlciAob3JnLWV4cG9ydC10cmFuc2NvZGVyIGRhdGEgaW5mbykp KQoJCSAgICAob3IgKGFuZCAoZnVuY3Rpb25wIHRyYW5zY29kZXIpCgkJCSAgICAgKGJyb2tlbi1s aW5rLWhhbmRsZXIKCQkJICAgICAgKGZ1bmNhbGwgdHJhbnNjb2RlciBkYXRhIG5pbCBpbmZvKSkp CgkJCTs7IEV4cG9ydCBzbmlwcGV0cyBuZXZlciByZXR1cm4gYSBuaWwgdmFsdWUgc28KCQkJOzsg dGhhdCB3aGl0ZSBzcGFjZXMgZm9sbG93aW5nIHRoZW0gYXJlIG5ldmVyCgkJCTs7IGlnbm9yZWQu CgkJCShhbmQgKGVxIHR5cGUgJ2V4cG9ydC1zbmlwcGV0KSAiIikpKSkKCQkgOzsgRWxlbWVudC9P YmplY3Qgd2l0aCBjb250ZW50cy4KCQkgKHQKCQkgIChsZXQgKCh0cmFuc2NvZGVyIChvcmctZXhw b3J0LXRyYW5zY29kZXIgZGF0YSBpbmZvKSkpCgkJICAgICh3aGVuIHRyYW5zY29kZXIKCQkgICAg ICAobGV0KiAoKGdyZWF0ZXJwIChtZW1xIHR5cGUgb3JnLWVsZW1lbnQtZ3JlYXRlci1lbGVtZW50 cykpCgkJCSAgICAgKG9iamVjdHAKCQkJICAgICAgKGFuZCAobm90IGdyZWF0ZXJwKQoJCQkJICAg KG1lbXEgdHlwZSBvcmctZWxlbWVudC1yZWN1cnNpdmUtb2JqZWN0cykpKQoJCQkgICAgIChjb250 ZW50cwoJCQkgICAgICAobWFwY29uY2F0CgkJCSAgICAgICAobGFtYmRhIChlbGVtZW50KSAob3Jn LWV4cG9ydC1kYXRhIGVsZW1lbnQgaW5mbykpCgkJCSAgICAgICAob3JnLWVsZW1lbnQtY29udGVu dHMKCQkJCShpZiAob3IgZ3JlYXRlcnAgb2JqZWN0cCkgZGF0YQoJCQkJICA7OyBFbGVtZW50cyBk aXJlY3RseSBjb250YWluaW5nCgkJCQkgIDs7IG9iamVjdHMgbXVzdCBoYXZlIHRoZWlyIGluZGVu dGF0aW9uCgkJCQkgIDs7IG5vcm1hbGl6ZWQgZmlyc3QuCgkJCQkgIChvcmctZWxlbWVudC1ub3Jt YWxpemUtY29udGVudHMKCQkJCSAgIGRhdGEKCQkJCSAgIDs7IFdoZW4gbm9ybWFsaXppbmcgZmly c3QgcGFyYWdyYXBoCgkJCQkgICA7OyBvZiBhbiBpdGVtIG9yCgkJCQkgICA7OyBhIGZvb3Rub3Rl LWRlZmluaXRpb24sIGlnbm9yZQoJCQkJICAgOzsgZmlyc3QgbGluZSdzIGluZGVudGF0aW9uLgoJ CQkJICAgKGFuZAoJCQkJICAgIChlcSB0eXBlICdwYXJhZ3JhcGgpCgkJCQkgICAgKG1lbXEgKG9y Zy1lbGVtZW50LXR5cGUgcGFyZW50KQoJCQkJCSAgJyhmb290bm90ZS1kZWZpbml0aW9uIGl0ZW0p KQoJCQkJICAgIChlcSAoY2FyIChvcmctZWxlbWVudC1jb250ZW50cyBwYXJlbnQpKQoJCQkJCWRh dGEpCgkJCQkgICAgKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cHJlLWJsYW5rIHBhcmVudCkK CQkJCQkwKSkpKSkKCQkJICAgICAgICIiKSkpCgkJCShicm9rZW4tbGluay1oYW5kbGVyCgkJCSAo ZnVuY2FsbCB0cmFuc2NvZGVyIGRhdGEKCQkJCSAgKGlmIChub3QgZ3JlYXRlcnApIGNvbnRlbnRz CgkJCQkgICAgKG9yZy1lbGVtZW50LW5vcm1hbGl6ZS1zdHJpbmcgY29udGVudHMpKQoJCQkJICBp bmZvKSkpKSkpKSkpCgkgIDs7IEZpbmFsIHJlc3VsdCB3aWxsIGJlIG1lbW9pemVkIGJlZm9yZSBi ZWluZyByZXR1cm5lZC4KCSAgKHB1dGhhc2gKCSAgIGRhdGEKCSAgIChjb25kCgkgICAgKChub3Qg cmVzdWx0cykgIiIpCgkgICAgKChtZW1xIHR5cGUgJyhuaWwgb3JnLWRhdGEgcGxhaW4tdGV4dCBy YXcpKSByZXN1bHRzKQoJICAgIDs7IEFwcGVuZCB0aGUgc2FtZSB3aGl0ZSBzcGFjZSBiZXR3ZWVu IGVsZW1lbnRzIG9yIG9iamVjdHMKCSAgICA7OyBhcyBpbiB0aGUgb3JpZ2luYWwgYnVmZmVyLCBh bmQgY2FsbCBhcHByb3ByaWF0ZSBmaWx0ZXJzLgoJICAgICh0CgkgICAgIChvcmctZXhwb3J0LWZp bHRlci1hcHBseS1mdW5jdGlvbnMKCSAgICAgIChwbGlzdC1nZXQgaW5mbyAoaW50ZXJuIChmb3Jt YXQgIjpmaWx0ZXItJXMiIHR5cGUpKSkKCSAgICAgIChsZXQgKChibGFuayAob3IgKG9yZy1lbGVt ZW50LXByb3BlcnR5IDpwb3N0LWJsYW5rIGRhdGEpIDApKSkKCQkoaWYgKGVxIChvcmctZWxlbWVu dC1jbGFzcyBkYXRhIHBhcmVudCkgJ29iamVjdCkKCQkgICAgKGNvbmNhdCByZXN1bHRzIChtYWtl LXN0cmluZyBibGFuayA/XHMpKQoJCSAgKGNvbmNhdCAob3JnLWVsZW1lbnQtbm9ybWFsaXplLXN0 cmluZyByZXN1bHRzKQoJCQkgIChtYWtlLXN0cmluZyBibGFuayA/XG4pKSkpCgkgICAgICBpbmZv KSkpCgkgICAocGxpc3QtZ2V0IGluZm8gOmV4cG9ydGVkLWRhdGEpKSkpKSkKCihkZWZ1biBvcmct ZXhwb3J0LWRhdGEtd2l0aC1iYWNrZW5kIChkYXRhIGJhY2tlbmQgaW5mbykKICAiQ29udmVydCBE QVRBIGludG8gQkFDS0VORCBmb3JtYXQuCgpEQVRBIGlzIGFuIGVsZW1lbnQsIGFuIG9iamVjdCwg YSBzZWNvbmRhcnkgc3RyaW5nIG9yIGEgc3RyaW5nLgpCQUNLRU5EIGlzIGEgc3ltYm9sLiAgSU5G TyBpcyBhIHBsaXN0IHVzZWQgYXMgYSBjb21tdW5pY2F0aW9uCmNoYW5uZWwuCgpVbmxpa2UgdG8g YG9yZy1leHBvcnQtd2l0aC1iYWNrZW5kJywgdGhpcyBmdW5jdGlvbiB3aWxsCnJlY3Vyc2l2ZWx5 IGNvbnZlcnQgREFUQSB1c2luZyBCQUNLRU5EIHRyYW5zbGF0aW9uIHRhYmxlLiIKICAod2hlbiAo c3ltYm9scCBiYWNrZW5kKSAoc2V0cSBiYWNrZW5kIChvcmctZXhwb3J0LWdldC1iYWNrZW5kIGJh Y2tlbmQpKSkKICA7OyBTZXQtdXAgYSBuZXcgY29tbXVuaWNhdGlvbiBjaGFubmVsIHdpdGggdHJh bnNsYXRpb25zIGRlZmluZWQgaW4KICA7OyBCQUNLRU5EIGFzIHRoZSB0cmFuc2xhdGUgdGFibGUg YW5kIGEgbmV3IGhhc2ggdGFibGUgZm9yCiAgOzsgbWVtb2l6YXRpb24uCiAgKGxldCAoKG5ldy1p bmZvCgkgKG9yZy1jb21iaW5lLXBsaXN0cwoJICBpbmZvCgkgIChsaXN0IDpiYWNrLWVuZCBiYWNr ZW5kCgkJOnRyYW5zbGF0ZS1hbGlzdCAob3JnLWV4cG9ydC1nZXQtYWxsLXRyYW5zY29kZXJzIGJh Y2tlbmQpCgkJOzsgU2l6ZSBvZiB0aGUgaGFzaCB0YWJsZSBpcyByZWR1Y2VkIHNpbmNlIHRoaXMK CQk7OyBmdW5jdGlvbiB3aWxsIHByb2JhYmx5IGJlIHVzZWQgb24gc21hbGwgdHJlZXMuCgkJOmV4 cG9ydGVkLWRhdGEgKG1ha2UtaGFzaC10YWJsZSA6dGVzdCAnZXEgOnNpemUgNDAxKSkpKSkKICAg IChwcm9nMSAob3JnLWV4cG9ydC1kYXRhIGRhdGEgbmV3LWluZm8pCiAgICAgIDs7IFByZXNlcnZl IGA6aW50ZXJuYWwtcmVmZXJlbmNlcycsIGFzIHRob3NlIGRvIG5vdCBkZXBlbmQgb24KICAgICAg OzsgdGhlIGJhY2stZW5kIHVzZWQ7IHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IG5ldwog ICAgICA7OyByZWZlcmVuY2Ugd2hlbiB0aGUgdGVtcG9yYXJ5IGJhY2stZW5kIHdhcyBhY3RpdmUg Z2V0cyB0aHJvdWdoCiAgICAgIDs7IHRoZSBkZWZhdWx0IG9uZS4KICAgICAgKHBsaXN0LXB1dCBp bmZvIDppbnRlcm5hbC1yZWZlcmVuY2VzCgkJIChwbGlzdC1nZXQgbmV3LWluZm8gOmludGVybmFs LXJlZmVyZW5jZXMpKSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtZXhwYW5kIChibG9iIGNvbnRlbnRz ICZvcHRpb25hbCB3aXRoLWFmZmlsaWF0ZWQpCiAgIkV4cGFuZCBhIHBhcnNlZCBlbGVtZW50IG9y IG9iamVjdCB0byBpdHMgb3JpZ2luYWwgc3RhdGUuCgpCTE9CIGlzIGVpdGhlciBhbiBlbGVtZW50 IG9yIGFuIG9iamVjdC4gIENPTlRFTlRTIGlzIGl0cwpjb250ZW50cywgYXMgYSBzdHJpbmcgb3Ig bmlsLgoKV2hlbiBvcHRpb25hbCBhcmd1bWVudCBXSVRILUFGRklMSUFURUQgaXMgbm9uLW5pbCwg YWRkIGFmZmlsaWF0ZWQKa2V5d29yZHMgYmVmb3JlIG91dHB1dC4iCiAgKGxldCAoKHR5cGUgKG9y Zy1lbGVtZW50LXR5cGUgYmxvYikpKQogICAgKGNvbmNhdCAoYW5kIHdpdGgtYWZmaWxpYXRlZAoJ CSAoZXEgKG9yZy1lbGVtZW50LWNsYXNzIGJsb2IpICdlbGVtZW50KQoJCSAob3JnLWVsZW1lbnQt LWludGVycHJldC1hZmZpbGlhdGVkLWtleXdvcmRzIGJsb2IpKQoJICAgIChmdW5jYWxsIChpbnRl cm4gKGZvcm1hdCAib3JnLWVsZW1lbnQtJXMtaW50ZXJwcmV0ZXIiIHR5cGUpKQoJCSAgICAgYmxv YiBjb250ZW50cykpKSkKCgoMCjs7OyBUaGUgRmlsdGVyIFN5c3RlbQo7Owo7OyBGaWx0ZXJzIGFs bG93IGVuZC11c2VycyB0byB0d2VhayBlYXNpbHkgdGhlIHRyYW5zY29kZWQgb3V0cHV0Lgo7OyBU aGV5IGFyZSB0aGUgZnVuY3Rpb25hbCBjb3VudGVycGFydCBvZiBob29rcywgYXMgZXZlcnkgZmls dGVyIGluCjs7IGEgc2V0IGlzIGFwcGxpZWQgdG8gdGhlIHJldHVybiB2YWx1ZSBvZiB0aGUgcHJl dmlvdXMgb25lLgo7Owo7OyBFdmVyeSBzZXQgaXMgYmFjay1lbmQgYWdub3N0aWMuICBBbHRob3Vn aCwgYSBmaWx0ZXIgaXMgYWx3YXlzCjs7IGNhbGxlZCwgaW4gYWRkaXRpb24gdG8gdGhlIHN0cmlu ZyBpdCBhcHBsaWVzIHRvLCB3aXRoIHRoZSBiYWNrLWVuZAo7OyB1c2VkIGFzIGFyZ3VtZW50LCBz byBpdCdzIGVhc3kgZm9yIHRoZSBlbmQtdXNlciB0byBhZGQgYmFjay1lbmQKOzsgc3BlY2lmaWMg ZmlsdGVycyBpbiB0aGUgc2V0LiAgVGhlIGNvbW11bmljYXRpb24gY2hhbm5lbCwgYXMKOzsgYSBw bGlzdCwgaXMgcmVxdWlyZWQgYXMgdGhlIHRoaXJkIGFyZ3VtZW50Lgo7Owo7OyBGcm9tIHRoZSBk ZXZlbG9wZXIgc2lkZSwgZmlsdGVycyBzZXRzIGNhbiBiZSBpbnN0YWxsZWQgaW4gdGhlCjs7IHBy b2Nlc3Mgd2l0aCB0aGUgaGVscCBvZiBgb3JnLWV4cG9ydC1kZWZpbmUtYmFja2VuZCcsIHdoaWNo Cjs7IGludGVybmFsbHkgc3RvcmVzIGZpbHRlcnMgYXMgYW4gYWxpc3QuICBFYWNoIGFzc29jaWF0 aW9uIGhhcyBhIGtleQo7OyBhbW9uZyB0aGUgZm9sbG93aW5nIHN5bWJvbHMgYW5kIGEgZnVuY3Rp b24gb3IgYSBsaXN0IG9mIGZ1bmN0aW9ucwo7OyBhcyB2YWx1ZS4KOzsKOzsgLSBgOmZpbHRlci1v cHRpb25zJyBhcHBsaWVzIHRvIHRoZSBwcm9wZXJ0eSBsaXN0IGNvbnRhaW5pbmcgZXhwb3J0Cjs7 ICAgb3B0aW9ucy4gIFVubGlrZSB0byBvdGhlciBmaWx0ZXJzLCBmdW5jdGlvbnMgaW4gdGhpcyBs aXN0IGFjY2VwdAo7OyAgIHR3byBhcmd1bWVudHMgaW5zdGVhZCBvZiB0aHJlZTogdGhlIHByb3Bl cnR5IGxpc3QgY29udGFpbmluZwo7OyAgIGV4cG9ydCBvcHRpb25zIGFuZCB0aGUgYmFjay1lbmQu ICBVc2VycyBjYW4gc2V0IGl0cyB2YWx1ZSB0aHJvdWdoCjs7ICAgYG9yZy1leHBvcnQtZmlsdGVy LW9wdGlvbnMtZnVuY3Rpb25zJyB2YXJpYWJsZS4KOzsKOzsgLSBgOmZpbHRlci1wYXJzZS10cmVl JyBhcHBsaWVzIGRpcmVjdGx5IHRvIHRoZSBjb21wbGV0ZSBwYXJzZWQKOzsgICB0cmVlLiAgVXNl cnMgY2FuIHNldCBpdCB0aHJvdWdoCjs7ICAgYG9yZy1leHBvcnQtZmlsdGVyLXBhcnNlLXRyZWUt ZnVuY3Rpb25zJyB2YXJpYWJsZS4KOzsKOzsgLSBgOmZpbHRlci1ib2R5JyBhcHBsaWVzIHRvIHRo ZSBib2R5IG9mIHRoZSBvdXRwdXQsIGJlZm9yZSB0ZW1wbGF0ZQo7OyAgIHRyYW5zbGF0b3IgY2hp bWVzIGluLiAgVXNlcnMgY2FuIHNldCBpdCB0aHJvdWdoCjs7ICAgYG9yZy1leHBvcnQtZmlsdGVy LWJvZHktZnVuY3Rpb25zJyB2YXJpYWJsZS4KOzsKOzsgLSBgOmZpbHRlci1maW5hbC1vdXRwdXQn IGFwcGxpZXMgdG8gdGhlIGZpbmFsIHRyYW5zY29kZWQgc3RyaW5nLgo7OyAgIFVzZXJzIGNhbiBz ZXQgaXQgd2l0aCBgb3JnLWV4cG9ydC1maWx0ZXItZmluYWwtb3V0cHV0LWZ1bmN0aW9ucycKOzsg ICB2YXJpYWJsZS4KOzsKOzsgLSBgOmZpbHRlci1wbGFpbi10ZXh0JyBhcHBsaWVzIHRvIGFueSBz dHJpbmcgbm90IHJlY29nbml6ZWQgYXMgT3JnCjs7ICAgc3ludGF4LiAgYG9yZy1leHBvcnQtZmls dGVyLXBsYWluLXRleHQtZnVuY3Rpb25zJyBhbGxvd3MgdXNlcnMgdG8KOzsgICBjb25maWd1cmUg aXQuCjs7Cjs7IC0gYDpmaWx0ZXItVFlQRScgYXBwbGllcyBvbiB0aGUgc3RyaW5nIHJldHVybmVk IGFmdGVyIGFuIGVsZW1lbnQgb3IKOzsgICBvYmplY3Qgb2YgdHlwZSBUWVBFIGhhcyBiZWVuIHRy YW5zY29kZWQuICBBIHVzZXIgY2FuIG1vZGlmeQo7OyAgIGBvcmctZXhwb3J0LWZpbHRlci1UWVBF LWZ1bmN0aW9ucycgdG8gaW5zdGFsbCB0aGVzZSBmaWx0ZXJzLgo7Owo7OyBBbGwgZmlsdGVycyBz ZXRzIGFyZSBhcHBsaWVkIHdpdGgKOzsgYG9yZy1leHBvcnQtZmlsdGVyLWFwcGx5LWZ1bmN0aW9u cycgZnVuY3Rpb24uICBGaWx0ZXJzIGluIGEgc2V0IGFyZQo7OyBhcHBsaWVkIGluIGEgTElGTyBm YXNoaW9uLiAgSXQgYWxsb3dzIGRldmVsb3BlcnMgdG8gYmUgc3VyZSB0aGF0Cjs7IHRoZWlyIGZp bHRlcnMgd2lsbCBiZSBhcHBsaWVkIGZpcnN0Lgo7Owo7OyBGaWx0ZXJzIHByb3BlcnRpZXMgYXJl IGluc3RhbGxlZCBpbiBjb21tdW5pY2F0aW9uIGNoYW5uZWwgd2l0aAo7OyBgb3JnLWV4cG9ydC1p bnN0YWxsLWZpbHRlcnMnIGZ1bmN0aW9uLgo7Owo7OyBFdmVudHVhbGx5LCB0d28gaG9va3MgKGBv cmctZXhwb3J0LWJlZm9yZS1wcm9jZXNzaW5nLWhvb2snIGFuZAo7OyBgb3JnLWV4cG9ydC1iZWZv cmUtcGFyc2luZy1ob29rJykgYXJlIHJ1biBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQo7OyBleHBv cnQgcHJvY2VzcyBhbmQganVzdCBiZWZvcmUgcGFyc2luZyB0byBhbGxvdyBmb3IgaGVhdnkgc3Ry dWN0dXJlCjs7IG1vZGlmaWNhdGlvbnMuCgoKOzs7OyBIb29rcwoKKGRlZnZhciBvcmctZXhwb3J0 LWJlZm9yZS1wcm9jZXNzaW5nLWhvb2sgbmlsCiAgIkhvb2sgcnVuIGF0IHRoZSBiZWdpbm5pbmcg b2YgdGhlIGV4cG9ydCBwcm9jZXNzLgoKVGhpcyBpcyBydW4gYmVmb3JlIGluY2x1ZGUga2V5d29y ZHMgYW5kIG1hY3JvcyBhcmUgZXhwYW5kZWQgYW5kCkJhYmVsIGNvZGUgYmxvY2tzIGV4ZWN1dGVk LCBvbiBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGJ1ZmZlcgpiZWluZyBleHBvcnRlZC4gIFZpc2li aWxpdHkgYW5kIG5hcnJvd2luZyBhcmUgcHJlc2VydmVkLiAgUG9pbnQKaXMgYXQgdGhlIGJlZ2lu bmluZyBvZiB0aGUgYnVmZmVyLgoKRXZlcnkgZnVuY3Rpb24gaW4gdGhpcyBob29rIHdpbGwgYmUg Y2FsbGVkIHdpdGggb25lIGFyZ3VtZW50OiB0aGUKYmFjay1lbmQgY3VycmVudGx5IHVzZWQsIGFz IGEgc3ltYm9sLiIpCgooZGVmdmFyIG9yZy1leHBvcnQtYmVmb3JlLXBhcnNpbmctaG9vayBuaWwK ICAiSG9vayBydW4gYmVmb3JlIHBhcnNpbmcgYW4gZXhwb3J0IGJ1ZmZlci4KClRoaXMgaXMgcnVu IGFmdGVyIGluY2x1ZGUga2V5d29yZHMgYW5kIG1hY3JvcyBoYXZlIGJlZW4gZXhwYW5kZWQKYW5k IEJhYmVsIGNvZGUgYmxvY2tzIGV4ZWN1dGVkLCBvbiBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIGJ1 ZmZlcgpiZWluZyBleHBvcnRlZC4gIFZpc2liaWxpdHkgYW5kIG5hcnJvd2luZyBhcmUgcHJlc2Vy dmVkLiAgUG9pbnQKaXMgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyLgoKRXZlcnkgZnVu Y3Rpb24gaW4gdGhpcyBob29rIHdpbGwgYmUgY2FsbGVkIHdpdGggb25lIGFyZ3VtZW50OiB0aGUK YmFjay1lbmQgY3VycmVudGx5IHVzZWQsIGFzIGEgc3ltYm9sLiIpCgoKOzs7OyBTcGVjaWFsIEZp bHRlcnMKCihkZWZ2YXIgb3JnLWV4cG9ydC1maWx0ZXItb3B0aW9ucy1mdW5jdGlvbnMgbmlsCiAg Ikxpc3Qgb2YgZnVuY3Rpb25zIGFwcGxpZWQgdG8gdGhlIGV4cG9ydCBvcHRpb25zLgpFYWNoIGZp bHRlciBpcyBjYWxsZWQgd2l0aCB0d28gYXJndW1lbnRzOiB0aGUgZXhwb3J0IG9wdGlvbnMsIGFz CmEgcGxpc3QsIGFuZCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLiAgSXQgbXVzdCByZXR1cm4K YSBwcm9wZXJ0eSBsaXN0IGNvbnRhaW5pbmcgZXhwb3J0IG9wdGlvbnMuIikKCihkZWZ2YXIgb3Jn LWV4cG9ydC1maWx0ZXItcGFyc2UtdHJlZS1mdW5jdGlvbnMgbmlsCiAgIkxpc3Qgb2YgZnVuY3Rp b25zIGFwcGxpZWQgdG8gdGhlIHBhcnNlZCB0cmVlLgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0 aCB0aHJlZSBhcmd1bWVudHM6IHRoZSBwYXJzZSB0cmVlLCBhcwpyZXR1cm5lZCBieSBgb3JnLWVs ZW1lbnQtcGFyc2UtYnVmZmVyJywgdGhlIGJhY2stZW5kLCBhcwphIHN5bWJvbCwgYW5kIHRoZSBj b21tdW5pY2F0aW9uIGNoYW5uZWwsIGFzIGEgcGxpc3QuICBJdCBtdXN0CnJldHVybiB0aGUgbW9k aWZpZWQgcGFyc2UgdHJlZSB0byB0cmFuc2NvZGUuIikKCihkZWZ2YXIgb3JnLWV4cG9ydC1maWx0 ZXItcGxhaW4tdGV4dC1mdW5jdGlvbnMgbmlsCiAgIkxpc3Qgb2YgZnVuY3Rpb25zIGFwcGxpZWQg dG8gcGxhaW4gdGV4dC4KRWFjaCBmaWx0ZXIgaXMgY2FsbGVkIHdpdGggdGhyZWUgYXJndW1lbnRz OiBhIHN0cmluZyB3aGljaApjb250YWlucyBubyBPcmcgc3ludGF4LCB0aGUgYmFjay1lbmQsIGFz IGEgc3ltYm9sLCBhbmQgdGhlCmNvbW11bmljYXRpb24gY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0 IG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yCm5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRl ci1ib2R5LWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5jdGlvbnMgYXBwbGllZCB0byB0cmFu c2NvZGVkIGJvZHkuCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50czog YSBzdHJpbmcgd2hpY2gKY29udGFpbnMgbm8gT3JnIHN5bnRheCwgdGhlIGJhY2stZW5kLCBhcyBh IHN5bWJvbCwgYW5kIHRoZQpjb21tdW5pY2F0aW9uIGNoYW5uZWwsIGFzIGEgcGxpc3QuICBJdCBt dXN0IHJldHVybiBhIHN0cmluZyBvcgpuaWwuIikKCihkZWZ2YXIgb3JnLWV4cG9ydC1maWx0ZXIt ZmluYWwtb3V0cHV0LWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5jdGlvbnMgYXBwbGllZCB0 byB0aGUgdHJhbnNjb2RlZCBzdHJpbmcuCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRoIHRocmVl IGFyZ3VtZW50czogdGhlIGZ1bGwgdHJhbnNjb2RlZApzdHJpbmcsIHRoZSBiYWNrLWVuZCwgYXMg YSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsLAphcyBhIHBsaXN0LiAgSXQg bXVzdCByZXR1cm4gYSBzdHJpbmcgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlCmZpbmFsIGV4cG9y dCBvdXRwdXQuIikKCgo7Ozs7IEVsZW1lbnRzIEZpbHRlcnMKCihkZWZ2YXIgb3JnLWV4cG9ydC1m aWx0ZXItYmFiZWwtY2FsbC1mdW5jdGlvbnMgbmlsCiAgIkxpc3Qgb2YgZnVuY3Rpb25zIGFwcGxp ZWQgdG8gYSB0cmFuc2NvZGVkIGJhYmVsLWNhbGwuCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRo IHRocmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwKYXMgYSBzdHJpbmcsIHRoZSBi YWNrLWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlvbgpjaGFubmVsLCBhcyBh IHBsaXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIpCgooZGVmdmFyIG9yZy1l eHBvcnQtZmlsdGVyLWNlbnRlci1ibG9jay1mdW5jdGlvbnMgbmlsCiAgIkxpc3Qgb2YgZnVuY3Rp b25zIGFwcGxpZWQgdG8gYSB0cmFuc2NvZGVkIGNlbnRlciBibG9jay4KRWFjaCBmaWx0ZXIgaXMg Y2FsbGVkIHdpdGggdGhyZWUgYXJndW1lbnRzOiB0aGUgdHJhbnNjb2RlZCBkYXRhLAphcyBhIHN0 cmluZywgdGhlIGJhY2stZW5kLCBhcyBhIHN5bWJvbCwgYW5kIHRoZSBjb21tdW5pY2F0aW9uCmNo YW5uZWwsIGFzIGEgcGxpc3QuICBJdCBtdXN0IHJldHVybiBhIHN0cmluZyBvciBuaWwuIikKCihk ZWZ2YXIgb3JnLWV4cG9ydC1maWx0ZXItY2xvY2stZnVuY3Rpb25zIG5pbAogICJMaXN0IG9mIGZ1 bmN0aW9ucyBhcHBsaWVkIHRvIGEgdHJhbnNjb2RlZCBjbG9jay4KRWFjaCBmaWx0ZXIgaXMgY2Fs bGVkIHdpdGggdGhyZWUgYXJndW1lbnRzOiB0aGUgdHJhbnNjb2RlZCBkYXRhLAphcyBhIHN0cmlu ZywgdGhlIGJhY2stZW5kLCBhcyBhIHN5bWJvbCwgYW5kIHRoZSBjb21tdW5pY2F0aW9uCmNoYW5u ZWwsIGFzIGEgcGxpc3QuICBJdCBtdXN0IHJldHVybiBhIHN0cmluZyBvciBuaWwuIikKCihkZWZ2 YXIgb3JnLWV4cG9ydC1maWx0ZXItZGlhcnktc2V4cC1mdW5jdGlvbnMgbmlsCiAgIkxpc3Qgb2Yg ZnVuY3Rpb25zIGFwcGxpZWQgdG8gYSB0cmFuc2NvZGVkIGRpYXJ5LXNleHAuCkVhY2ggZmlsdGVy IGlzIGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwKYXMg YSBzdHJpbmcsIHRoZSBiYWNrLWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlv bgpjaGFubmVsLCBhcyBhIHBsaXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIp CgooZGVmdmFyIG9yZy1leHBvcnQtZmlsdGVyLWRyYXdlci1mdW5jdGlvbnMgbmlsCiAgIkxpc3Qg b2YgZnVuY3Rpb25zIGFwcGxpZWQgdG8gYSB0cmFuc2NvZGVkIGRyYXdlci4KRWFjaCBmaWx0ZXIg aXMgY2FsbGVkIHdpdGggdGhyZWUgYXJndW1lbnRzOiB0aGUgdHJhbnNjb2RlZCBkYXRhLAphcyBh IHN0cmluZywgdGhlIGJhY2stZW5kLCBhcyBhIHN5bWJvbCwgYW5kIHRoZSBjb21tdW5pY2F0aW9u CmNoYW5uZWwsIGFzIGEgcGxpc3QuICBJdCBtdXN0IHJldHVybiBhIHN0cmluZyBvciBuaWwuIikK CihkZWZ2YXIgb3JnLWV4cG9ydC1maWx0ZXItZHluYW1pYy1ibG9jay1mdW5jdGlvbnMgbmlsCiAg Ikxpc3Qgb2YgZnVuY3Rpb25zIGFwcGxpZWQgdG8gYSB0cmFuc2NvZGVkIGR5bmFtaWMtYmxvY2su CkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29k ZWQgZGF0YSwKYXMgYSBzdHJpbmcsIHRoZSBiYWNrLWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUg Y29tbXVuaWNhdGlvbgpjaGFubmVsLCBhcyBhIHBsaXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJp bmcgb3IgbmlsLiIpCgooZGVmdmFyIG9yZy1leHBvcnQtZmlsdGVyLWV4YW1wbGUtYmxvY2stZnVu Y3Rpb25zIG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVkIHRvIGEgdHJhbnNjb2RlZCBl eGFtcGxlLWJsb2NrLgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6 IHRoZSB0cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3lt Ym9sLCBhbmQgdGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3Qg cmV0dXJuIGEgc3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci1leHBv cnQtYmxvY2stZnVuY3Rpb25zIG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVkIHRvIGEg dHJhbnNjb2RlZCBleHBvcnQtYmxvY2suCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRoIHRocmVl IGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwKYXMgYSBzdHJpbmcsIHRoZSBiYWNrLWVu ZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlvbgpjaGFubmVsLCBhcyBhIHBsaXN0 LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIpCgooZGVmdmFyIG9yZy1leHBvcnQt ZmlsdGVyLWZpeGVkLXdpZHRoLWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5jdGlvbnMgYXBw bGllZCB0byBhIHRyYW5zY29kZWQgZml4ZWQtd2lkdGguCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3 aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwKYXMgYSBzdHJpbmcsIHRo ZSBiYWNrLWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlvbgpjaGFubmVsLCBh cyBhIHBsaXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIpCgooZGVmdmFyIG9y Zy1leHBvcnQtZmlsdGVyLWZvb3Rub3RlLWRlZmluaXRpb24tZnVuY3Rpb25zIG5pbAogICJMaXN0 IG9mIGZ1bmN0aW9ucyBhcHBsaWVkIHRvIGEgdHJhbnNjb2RlZCBmb290bm90ZS1kZWZpbml0aW9u LgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFuc2Nv ZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQgdGhl IGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0dXJuIGEgc3Ry aW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci1oZWFkbGluZS1mdW5jdGlv bnMgbmlsCiAgIkxpc3Qgb2YgZnVuY3Rpb25zIGFwcGxpZWQgdG8gYSB0cmFuc2NvZGVkIGhlYWRs aW5lLgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFu c2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQg dGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0dXJuIGEg c3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci1ob3Jpem9udGFsLXJ1 bGUtZnVuY3Rpb25zIG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVkIHRvIGEgdHJhbnNj b2RlZCBob3Jpem9udGFsLXJ1bGUuCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRoIHRocmVlIGFy Z3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwKYXMgYSBzdHJpbmcsIHRoZSBiYWNrLWVuZCwg YXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlvbgpjaGFubmVsLCBhcyBhIHBsaXN0LiAg SXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIpCgooZGVmdmFyIG9yZy1leHBvcnQtZmls dGVyLWlubGluZXRhc2stZnVuY3Rpb25zIG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVk IHRvIGEgdHJhbnNjb2RlZCBpbmxpbmV0YXNrLgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0 aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFj ay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQgdGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBw bGlzdC4gIEl0IG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhw b3J0LWZpbHRlci1pdGVtLWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5jdGlvbnMgYXBwbGll ZCB0byBhIHRyYW5zY29kZWQgaXRlbS4KRWFjaCBmaWx0ZXIgaXMgY2FsbGVkIHdpdGggdGhyZWUg YXJndW1lbnRzOiB0aGUgdHJhbnNjb2RlZCBkYXRhLAphcyBhIHN0cmluZywgdGhlIGJhY2stZW5k LCBhcyBhIHN5bWJvbCwgYW5kIHRoZSBjb21tdW5pY2F0aW9uCmNoYW5uZWwsIGFzIGEgcGxpc3Qu ICBJdCBtdXN0IHJldHVybiBhIHN0cmluZyBvciBuaWwuIikKCihkZWZ2YXIgb3JnLWV4cG9ydC1m aWx0ZXIta2V5d29yZC1mdW5jdGlvbnMgbmlsCiAgIkxpc3Qgb2YgZnVuY3Rpb25zIGFwcGxpZWQg dG8gYSB0cmFuc2NvZGVkIGtleXdvcmQuCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRoIHRocmVl IGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwKYXMgYSBzdHJpbmcsIHRoZSBiYWNrLWVu ZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlvbgpjaGFubmVsLCBhcyBhIHBsaXN0 LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIpCgooZGVmdmFyIG9yZy1leHBvcnQt ZmlsdGVyLWxhdGV4LWVudmlyb25tZW50LWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5jdGlv bnMgYXBwbGllZCB0byBhIHRyYW5zY29kZWQgbGF0ZXgtZW52aXJvbm1lbnQuCkVhY2ggZmlsdGVy IGlzIGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwKYXMg YSBzdHJpbmcsIHRoZSBiYWNrLWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlv bgpjaGFubmVsLCBhcyBhIHBsaXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIp CgooZGVmdmFyIG9yZy1leHBvcnQtZmlsdGVyLW5vZGUtcHJvcGVydHktZnVuY3Rpb25zIG5pbAog ICJMaXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVkIHRvIGEgdHJhbnNjb2RlZCBub2RlLXByb3BlcnR5 LgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFuc2Nv ZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQgdGhl IGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0dXJuIGEgc3Ry aW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci1wYXJhZ3JhcGgtZnVuY3Rp b25zIG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVkIHRvIGEgdHJhbnNjb2RlZCBwYXJh Z3JhcGguCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIHRy YW5zY29kZWQgZGF0YSwKYXMgYSBzdHJpbmcsIHRoZSBiYWNrLWVuZCwgYXMgYSBzeW1ib2wsIGFu ZCB0aGUgY29tbXVuaWNhdGlvbgpjaGFubmVsLCBhcyBhIHBsaXN0LiAgSXQgbXVzdCByZXR1cm4g YSBzdHJpbmcgb3IgbmlsLiIpCgooZGVmdmFyIG9yZy1leHBvcnQtZmlsdGVyLXBsYWluLWxpc3Qt ZnVuY3Rpb25zIG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVkIHRvIGEgdHJhbnNjb2Rl ZCBwbGFpbi1saXN0LgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6 IHRoZSB0cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3lt Ym9sLCBhbmQgdGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3Qg cmV0dXJuIGEgc3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci1wbGFu bmluZy1mdW5jdGlvbnMgbmlsCiAgIkxpc3Qgb2YgZnVuY3Rpb25zIGFwcGxpZWQgdG8gYSB0cmFu c2NvZGVkIHBsYW5uaW5nLgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVu dHM6IHRoZSB0cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEg c3ltYm9sLCBhbmQgdGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11 c3QgcmV0dXJuIGEgc3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci1w cm9wZXJ0eS1kcmF3ZXItZnVuY3Rpb25zIG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVk IHRvIGEgdHJhbnNjb2RlZCBwcm9wZXJ0eS1kcmF3ZXIuCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3 aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwKYXMgYSBzdHJpbmcsIHRo ZSBiYWNrLWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlvbgpjaGFubmVsLCBh cyBhIHBsaXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIpCgooZGVmdmFyIG9y Zy1leHBvcnQtZmlsdGVyLXF1b3RlLWJsb2NrLWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5j dGlvbnMgYXBwbGllZCB0byBhIHRyYW5zY29kZWQgcXVvdGUgYmxvY2suCkVhY2ggZmlsdGVyIGlz IGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgcXVvdGUKZGF0YSwg YXMgYSBzdHJpbmcsIHRoZSBiYWNrLWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUKY29tbXVuaWNh dGlvbiBjaGFubmVsLCBhcyBhIHBsaXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IKbmls LiIpCgooZGVmdmFyIG9yZy1leHBvcnQtZmlsdGVyLXNlY3Rpb24tZnVuY3Rpb25zIG5pbAogICJM aXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVkIHRvIGEgdHJhbnNjb2RlZCBzZWN0aW9uLgpFYWNoIGZp bHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFuc2NvZGVkIGRhdGEs CmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQgdGhlIGNvbW11bmlj YXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIG5p bC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci1zcGVjaWFsLWJsb2NrLWZ1bmN0aW9ucyBu aWwKICAiTGlzdCBvZiBmdW5jdGlvbnMgYXBwbGllZCB0byBhIHRyYW5zY29kZWQgc3BlY2lhbCBi bG9jay4KRWFjaCBmaWx0ZXIgaXMgY2FsbGVkIHdpdGggdGhyZWUgYXJndW1lbnRzOiB0aGUgdHJh bnNjb2RlZCBkYXRhLAphcyBhIHN0cmluZywgdGhlIGJhY2stZW5kLCBhcyBhIHN5bWJvbCwgYW5k IHRoZSBjb21tdW5pY2F0aW9uCmNoYW5uZWwsIGFzIGEgcGxpc3QuICBJdCBtdXN0IHJldHVybiBh IHN0cmluZyBvciBuaWwuIikKCihkZWZ2YXIgb3JnLWV4cG9ydC1maWx0ZXItc3JjLWJsb2NrLWZ1 bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5jdGlvbnMgYXBwbGllZCB0byBhIHRyYW5zY29kZWQg c3JjLWJsb2NrLgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRo ZSB0cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9s LCBhbmQgdGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0 dXJuIGEgc3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci10YWJsZS1m dW5jdGlvbnMgbmlsCiAgIkxpc3Qgb2YgZnVuY3Rpb25zIGFwcGxpZWQgdG8gYSB0cmFuc2NvZGVk IHRhYmxlLgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSB0 cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLCBh bmQgdGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0dXJu IGEgc3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci10YWJsZS1jZWxs LWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5jdGlvbnMgYXBwbGllZCB0byBhIHRyYW5zY29k ZWQgdGFibGUtY2VsbC4KRWFjaCBmaWx0ZXIgaXMgY2FsbGVkIHdpdGggdGhyZWUgYXJndW1lbnRz OiB0aGUgdHJhbnNjb2RlZCBkYXRhLAphcyBhIHN0cmluZywgdGhlIGJhY2stZW5kLCBhcyBhIHN5 bWJvbCwgYW5kIHRoZSBjb21tdW5pY2F0aW9uCmNoYW5uZWwsIGFzIGEgcGxpc3QuICBJdCBtdXN0 IHJldHVybiBhIHN0cmluZyBvciBuaWwuIikKCihkZWZ2YXIgb3JnLWV4cG9ydC1maWx0ZXItdGFi bGUtcm93LWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5jdGlvbnMgYXBwbGllZCB0byBhIHRy YW5zY29kZWQgdGFibGUtcm93LgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1 bWVudHM6IHRoZSB0cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFz IGEgc3ltYm9sLCBhbmQgdGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0 IG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRl ci12ZXJzZS1ibG9jay1mdW5jdGlvbnMgbmlsCiAgIkxpc3Qgb2YgZnVuY3Rpb25zIGFwcGxpZWQg dG8gYSB0cmFuc2NvZGVkIHZlcnNlIGJsb2NrLgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0 aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFj ay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQgdGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBw bGlzdC4gIEl0IG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIG5pbC4iKQoKCjs7OzsgT2JqZWN0cyBG aWx0ZXJzCgooZGVmdmFyIG9yZy1leHBvcnQtZmlsdGVyLWJvbGQtZnVuY3Rpb25zIG5pbAogICJM aXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVkIHRvIHRyYW5zY29kZWQgYm9sZCB0ZXh0LgpFYWNoIGZp bHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFuc2NvZGVkIGRhdGEs CmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQgdGhlIGNvbW11bmlj YXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIG5p bC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci1jb2RlLWZ1bmN0aW9ucyBuaWwKICAiTGlz dCBvZiBmdW5jdGlvbnMgYXBwbGllZCB0byB0cmFuc2NvZGVkIGNvZGUgdGV4dC4KRWFjaCBmaWx0 ZXIgaXMgY2FsbGVkIHdpdGggdGhyZWUgYXJndW1lbnRzOiB0aGUgdHJhbnNjb2RlZCBkYXRhLAph cyBhIHN0cmluZywgdGhlIGJhY2stZW5kLCBhcyBhIHN5bWJvbCwgYW5kIHRoZSBjb21tdW5pY2F0 aW9uCmNoYW5uZWwsIGFzIGEgcGxpc3QuICBJdCBtdXN0IHJldHVybiBhIHN0cmluZyBvciBuaWwu IikKCihkZWZ2YXIgb3JnLWV4cG9ydC1maWx0ZXItZW50aXR5LWZ1bmN0aW9ucyBuaWwKICAiTGlz dCBvZiBmdW5jdGlvbnMgYXBwbGllZCB0byBhIHRyYW5zY29kZWQgZW50aXR5LgpFYWNoIGZpbHRl ciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFuc2NvZGVkIGRhdGEsCmFz IGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQgdGhlIGNvbW11bmljYXRp b24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIG5pbC4i KQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci1leHBvcnQtc25pcHBldC1mdW5jdGlvbnMgbmls CiAgIkxpc3Qgb2YgZnVuY3Rpb25zIGFwcGxpZWQgdG8gYSB0cmFuc2NvZGVkIGV4cG9ydC1zbmlw cGV0LgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFu c2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQg dGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0dXJuIGEg c3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci1mb290bm90ZS1yZWZl cmVuY2UtZnVuY3Rpb25zIG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVkIHRvIGEgdHJh bnNjb2RlZCBmb290bm90ZS1yZWZlcmVuY2UuCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRoIHRo cmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwKYXMgYSBzdHJpbmcsIHRoZSBiYWNr LWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlvbgpjaGFubmVsLCBhcyBhIHBs aXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIpCgooZGVmdmFyIG9yZy1leHBv cnQtZmlsdGVyLWlubGluZS1iYWJlbC1jYWxsLWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5j dGlvbnMgYXBwbGllZCB0byBhIHRyYW5zY29kZWQgaW5saW5lLWJhYmVsLWNhbGwuCkVhY2ggZmls dGVyIGlzIGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwK YXMgYSBzdHJpbmcsIHRoZSBiYWNrLWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNh dGlvbgpjaGFubmVsLCBhcyBhIHBsaXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3Igbmls LiIpCgooZGVmdmFyIG9yZy1leHBvcnQtZmlsdGVyLWlubGluZS1zcmMtYmxvY2stZnVuY3Rpb25z IG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVkIHRvIGEgdHJhbnNjb2RlZCBpbmxpbmUt c3JjLWJsb2NrLgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRo ZSB0cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9s LCBhbmQgdGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0 dXJuIGEgc3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci1pdGFsaWMt ZnVuY3Rpb25zIG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVkIHRvIHRyYW5zY29kZWQg aXRhbGljIHRleHQuCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50czog dGhlIHRyYW5zY29kZWQgZGF0YSwKYXMgYSBzdHJpbmcsIHRoZSBiYWNrLWVuZCwgYXMgYSBzeW1i b2wsIGFuZCB0aGUgY29tbXVuaWNhdGlvbgpjaGFubmVsLCBhcyBhIHBsaXN0LiAgSXQgbXVzdCBy ZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIpCgooZGVmdmFyIG9yZy1leHBvcnQtZmlsdGVyLWxhdGV4 LWZyYWdtZW50LWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5jdGlvbnMgYXBwbGllZCB0byBh IHRyYW5zY29kZWQgbGF0ZXgtZnJhZ21lbnQuCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRoIHRo cmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwKYXMgYSBzdHJpbmcsIHRoZSBiYWNr LWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlvbgpjaGFubmVsLCBhcyBhIHBs aXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIpCgooZGVmdmFyIG9yZy1leHBv cnQtZmlsdGVyLWxpbmUtYnJlYWstZnVuY3Rpb25zIG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyBh cHBsaWVkIHRvIGEgdHJhbnNjb2RlZCBsaW5lLWJyZWFrLgpFYWNoIGZpbHRlciBpcyBjYWxsZWQg d2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0 aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQgdGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwg YXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBv cmctZXhwb3J0LWZpbHRlci1saW5rLWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5jdGlvbnMg YXBwbGllZCB0byBhIHRyYW5zY29kZWQgbGluay4KRWFjaCBmaWx0ZXIgaXMgY2FsbGVkIHdpdGgg dGhyZWUgYXJndW1lbnRzOiB0aGUgdHJhbnNjb2RlZCBkYXRhLAphcyBhIHN0cmluZywgdGhlIGJh Y2stZW5kLCBhcyBhIHN5bWJvbCwgYW5kIHRoZSBjb21tdW5pY2F0aW9uCmNoYW5uZWwsIGFzIGEg cGxpc3QuICBJdCBtdXN0IHJldHVybiBhIHN0cmluZyBvciBuaWwuIikKCihkZWZ2YXIgb3JnLWV4 cG9ydC1maWx0ZXItcmFkaW8tdGFyZ2V0LWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5jdGlv bnMgYXBwbGllZCB0byBhIHRyYW5zY29kZWQgcmFkaW8tdGFyZ2V0LgpFYWNoIGZpbHRlciBpcyBj YWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3Ry aW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQgdGhlIGNvbW11bmljYXRpb24KY2hh bm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIG5pbC4iKQoKKGRl ZnZhciBvcmctZXhwb3J0LWZpbHRlci1zdGF0aXN0aWNzLWNvb2tpZS1mdW5jdGlvbnMgbmlsCiAg Ikxpc3Qgb2YgZnVuY3Rpb25zIGFwcGxpZWQgdG8gYSB0cmFuc2NvZGVkIHN0YXRpc3RpY3MtY29v a2llLgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFu c2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQg dGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0dXJuIGEg c3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZpbHRlci1zdHJpa2UtdGhyb3Vn aC1mdW5jdGlvbnMgbmlsCiAgIkxpc3Qgb2YgZnVuY3Rpb25zIGFwcGxpZWQgdG8gdHJhbnNjb2Rl ZCBzdHJpa2UtdGhyb3VnaCB0ZXh0LgpFYWNoIGZpbHRlciBpcyBjYWxsZWQgd2l0aCB0aHJlZSBh cmd1bWVudHM6IHRoZSB0cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3RyaW5nLCB0aGUgYmFjay1lbmQs IGFzIGEgc3ltYm9sLCBhbmQgdGhlIGNvbW11bmljYXRpb24KY2hhbm5lbCwgYXMgYSBwbGlzdC4g IEl0IG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIG5pbC4iKQoKKGRlZnZhciBvcmctZXhwb3J0LWZp bHRlci1zdWJzY3JpcHQtZnVuY3Rpb25zIG5pbAogICJMaXN0IG9mIGZ1bmN0aW9ucyBhcHBsaWVk IHRvIGEgdHJhbnNjb2RlZCBzdWJzY3JpcHQuCkVhY2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRoIHRo cmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwKYXMgYSBzdHJpbmcsIHRoZSBiYWNr LWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlvbgpjaGFubmVsLCBhcyBhIHBs aXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIpCgooZGVmdmFyIG9yZy1leHBv cnQtZmlsdGVyLXN1cGVyc2NyaXB0LWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5jdGlvbnMg YXBwbGllZCB0byBhIHRyYW5zY29kZWQgc3VwZXJzY3JpcHQuCkVhY2ggZmlsdGVyIGlzIGNhbGxl ZCB3aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwKYXMgYSBzdHJpbmcs IHRoZSBiYWNrLWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNhdGlvbgpjaGFubmVs LCBhcyBhIHBsaXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgbmlsLiIpCgooZGVmdmFy IG9yZy1leHBvcnQtZmlsdGVyLXRhcmdldC1mdW5jdGlvbnMgbmlsCiAgIkxpc3Qgb2YgZnVuY3Rp b25zIGFwcGxpZWQgdG8gYSB0cmFuc2NvZGVkIHRhcmdldC4KRWFjaCBmaWx0ZXIgaXMgY2FsbGVk IHdpdGggdGhyZWUgYXJndW1lbnRzOiB0aGUgdHJhbnNjb2RlZCBkYXRhLAphcyBhIHN0cmluZywg dGhlIGJhY2stZW5kLCBhcyBhIHN5bWJvbCwgYW5kIHRoZSBjb21tdW5pY2F0aW9uCmNoYW5uZWws IGFzIGEgcGxpc3QuICBJdCBtdXN0IHJldHVybiBhIHN0cmluZyBvciBuaWwuIikKCihkZWZ2YXIg b3JnLWV4cG9ydC1maWx0ZXItdGltZXN0YW1wLWZ1bmN0aW9ucyBuaWwKICAiTGlzdCBvZiBmdW5j dGlvbnMgYXBwbGllZCB0byBhIHRyYW5zY29kZWQgdGltZXN0YW1wLgpFYWNoIGZpbHRlciBpcyBj YWxsZWQgd2l0aCB0aHJlZSBhcmd1bWVudHM6IHRoZSB0cmFuc2NvZGVkIGRhdGEsCmFzIGEgc3Ry aW5nLCB0aGUgYmFjay1lbmQsIGFzIGEgc3ltYm9sLCBhbmQgdGhlIGNvbW11bmljYXRpb24KY2hh bm5lbCwgYXMgYSBwbGlzdC4gIEl0IG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIG5pbC4iKQoKKGRl ZnZhciBvcmctZXhwb3J0LWZpbHRlci11bmRlcmxpbmUtZnVuY3Rpb25zIG5pbAogICJMaXN0IG9m IGZ1bmN0aW9ucyBhcHBsaWVkIHRvIHRyYW5zY29kZWQgdW5kZXJsaW5lIHRleHQuCkVhY2ggZmls dGVyIGlzIGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQgZGF0YSwK YXMgYSBzdHJpbmcsIHRoZSBiYWNrLWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29tbXVuaWNh dGlvbgpjaGFubmVsLCBhcyBhIHBsaXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3Igbmls LiIpCgooZGVmdmFyIG9yZy1leHBvcnQtZmlsdGVyLXZlcmJhdGltLWZ1bmN0aW9ucyBuaWwKICAi TGlzdCBvZiBmdW5jdGlvbnMgYXBwbGllZCB0byB0cmFuc2NvZGVkIHZlcmJhdGltIHRleHQuCkVh Y2ggZmlsdGVyIGlzIGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogdGhlIHRyYW5zY29kZWQg ZGF0YSwKYXMgYSBzdHJpbmcsIHRoZSBiYWNrLWVuZCwgYXMgYSBzeW1ib2wsIGFuZCB0aGUgY29t bXVuaWNhdGlvbgpjaGFubmVsLCBhcyBhIHBsaXN0LiAgSXQgbXVzdCByZXR1cm4gYSBzdHJpbmcg b3IgbmlsLiIpCgoKOzs7OyBGaWx0ZXJzIFRvb2xzCjs7Cjs7IEludGVybmFsIGZ1bmN0aW9uIGBv cmctZXhwb3J0LWluc3RhbGwtZmlsdGVycycgaW5zdGFsbHMgZmlsdGVycwo7OyBoYXJkLWNvZGVk IGluIGJhY2stZW5kcyAoZGV2ZWxvcGVyIGZpbHRlcnMpIGFuZCBmaWx0ZXJzIGZyb20gZ2xvYmFs Cjs7IHZhcmlhYmxlcyAodXNlciBmaWx0ZXJzKSBpbiB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVs Lgo7Owo7OyBJbnRlcm5hbCBmdW5jdGlvbiBgb3JnLWV4cG9ydC1maWx0ZXItYXBwbHktZnVuY3Rp b25zJyB0YWtlcyBjYXJlCjs7IGFib3V0IGFwcGx5aW5nIGVhY2ggZmlsdGVyIGluIG9yZGVyIHRv IGEgZ2l2ZW4gZGF0YS4gIEl0IGlnbm9yZXMKOzsgZmlsdGVycyByZXR1cm5pbmcgYSBuaWwgdmFs dWUgYnV0IHN0b3BzIHdoZW5ldmVyIGEgZmlsdGVyIHJldHVybnMKOzsgYW4gZW1wdHkgc3RyaW5n LgoKKGRlZnVuIG9yZy1leHBvcnQtZmlsdGVyLWFwcGx5LWZ1bmN0aW9ucyAoZmlsdGVycyB2YWx1 ZSBpbmZvKQogICJDYWxsIGV2ZXJ5IGZ1bmN0aW9uIGluIEZJTFRFUlMuCgpGdW5jdGlvbnMgYXJl IGNhbGxlZCB3aXRoIHRocmVlIGFyZ3VtZW50czogYSB2YWx1ZSwgdGhlIGV4cG9ydApiYWNrLWVu ZCBuYW1lIGFuZCB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsLiAgRmlyc3QgZnVuY3Rpb24gaW4K RklMVEVSUyBpcyBjYWxsZWQgd2l0aCBWQUxVRSBhcyBpdHMgZmlyc3QgYXJndW1lbnQuICBTZWNv bmQKZnVuY3Rpb24gaW4gRklMVEVSUyBpcyBjYWxsZWQgd2l0aCB0aGUgcHJldmlvdXMgcmVzdWx0 IGFzIGl0cwp2YWx1ZSwgZXRjLgoKRnVuY3Rpb25zIHJldHVybmluZyBuaWwgYXJlIHNraXBwZWQu ICBBbnkgZnVuY3Rpb24gcmV0dXJuaW5nIHRoZQplbXB0eSBzdHJpbmcgZW5kcyB0aGUgcHJvY2Vz cywgd2hpY2ggcmV0dXJucyB0aGUgZW1wdHkgc3RyaW5nLgoKQ2FsbCBpcyBkb25lIGluIGEgTElG TyBmYXNoaW9uLCB0byBiZSBzdXJlIHRoYXQgZGV2ZWxvcGVyCnNwZWNpZmllZCBmaWx0ZXJzLCBp ZiBhbnksIGFyZSBjYWxsZWQgZmlyc3QuIgogIChjYXRjaCA6ZXhpdAogICAgKGxldCogKChiYWNr ZW5kIChwbGlzdC1nZXQgaW5mbyA6YmFjay1lbmQpKQoJICAgKGJhY2tlbmQtbmFtZSAoYW5kIGJh Y2tlbmQgKG9yZy1leHBvcnQtYmFja2VuZC1uYW1lIGJhY2tlbmQpKSkpCiAgICAgIChkb2xpc3Qg KGZpbHRlciBmaWx0ZXJzIHZhbHVlKQoJKGxldCAoKHJlc3VsdCAoZnVuY2FsbCBmaWx0ZXIgdmFs dWUgYmFja2VuZC1uYW1lIGluZm8pKSkKCSAgKGNvbmQgKChub3QgcmVzdWx0KSkKCQkoKGVxdWFs IHJlc3VsdCAiIikgKHRocm93IDpleGl0ICIiKSkKCQkodCAoc2V0cSB2YWx1ZSByZXN1bHQpKSkp KSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtaW5zdGFsbC1maWx0ZXJzIChpbmZvKQogICJJbnN0YWxs IGZpbHRlcnMgcHJvcGVydGllcyBpbiBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCklORk8gaXMgYSBw bGlzdCBjb250YWluaW5nIHRoZSBjdXJyZW50IGNvbW11bmljYXRpb24gY2hhbm5lbC4KUmV0dXJu IHRoZSB1cGRhdGVkIGNvbW11bmljYXRpb24gY2hhbm5lbC4iCiAgKGxldCAocGxpc3QpCiAgICA7 OyBJbnN0YWxsIHVzZXItZGVmaW5lZCBmaWx0ZXJzIHdpdGggYG9yZy1leHBvcnQtZmlsdGVycy1h bGlzdCcKICAgIDs7IGFuZCBmaWx0ZXJzIGFscmVhZHkgaW4gSU5GTyAodGhyb3VnaCBleHQtcGxp c3QgbWVjaGFuaXNtKS4KICAgIChkb2xpc3QgKHAgb3JnLWV4cG9ydC1maWx0ZXJzLWFsaXN0KQog ICAgICAobGV0KiAoKHByb3AgKGNhciBwKSkKCSAgICAgKGluZm8tdmFsdWUgKHBsaXN0LWdldCBp bmZvIHByb3ApKQoJICAgICAoZGVmYXVsdC12YWx1ZSAoc3ltYm9sLXZhbHVlIChjZHIgcCkpKSkK CShzZXRxIHBsaXN0CgkgICAgICAocGxpc3QtcHV0IHBsaXN0IHByb3AKCQkJIDs7IEZpbHRlcnMg aW4gSU5GTyB3aWxsIGJlIGNhbGxlZAoJCQkgOzsgYmVmb3JlIHRob3NlIHVzZXIgcHJvdmlkZWQu CgkJCSAoYXBwZW5kIChpZiAobGlzdHAgaW5mby12YWx1ZSkgaW5mby12YWx1ZQoJCQkJICAgKGxp c3QgaW5mby12YWx1ZSkpCgkJCQkgZGVmYXVsdC12YWx1ZSkpKSkpCiAgICA7OyBQcmVwZW5kIGJh Y2stZW5kIHNwZWNpZmljIGZpbHRlcnMgdG8gdGhhdCBsaXN0LgogICAgKGRvbGlzdCAocCAob3Jn LWV4cG9ydC1nZXQtYWxsLWZpbHRlcnMgKHBsaXN0LWdldCBpbmZvIDpiYWNrLWVuZCkpKQogICAg ICA7OyBTaW5nbGUgdmFsdWVzIGdldCBjb25zZWQsIGxpc3RzIGFyZSBhcHBlbmRlZC4KICAgICAg KGxldCAoKGtleSAoY2FyIHApKSAodmFsdWUgKGNkciBwKSkpCgkod2hlbiB2YWx1ZQoJICAoc2V0 cSBwbGlzdAoJCShwbGlzdC1wdXQKCQkgcGxpc3Qga2V5CgkJIChpZiAoYXRvbSB2YWx1ZSkgKGNv bnMgdmFsdWUgKHBsaXN0LWdldCBwbGlzdCBrZXkpKQoJCSAgIChhcHBlbmQgdmFsdWUgKHBsaXN0 LWdldCBwbGlzdCBrZXkpKSkpKSkpKQogICAgOzsgUmV0dXJuIG5ldyBjb21tdW5pY2F0aW9uIGNo YW5uZWwuCiAgICAob3JnLWNvbWJpbmUtcGxpc3RzIGluZm8gcGxpc3QpKSkKCgoMCjs7OyBDb3Jl IGZ1bmN0aW9ucwo7Owo7OyBUaGlzIGlzIHRoZSByb29tIGZvciB0aGUgbWFpbiBmdW5jdGlvbiwg YG9yZy1leHBvcnQtYXMnLCBhbG9uZyB3aXRoCjs7IGl0cyBkZXJpdmF0aXZlLCBgb3JnLWV4cG9y dC1zdHJpbmctYXMnLgo7OyBgb3JnLWV4cG9ydC0tY29weS10by1raWxsLXJpbmctcCcgZGV0ZXJt aW5lcyBpZiBvdXRwdXQgb2YgdGhlc2UKOzsgZnVuY3Rpb24gc2hvdWxkIGJlIGFkZGVkIHRvIGtp bGwgcmluZy4KOzsKOzsgTm90ZSB0aGF0IGBvcmctZXhwb3J0LWFzJyBkb2Vzbid0IHJlYWxseSBw YXJzZSB0aGUgY3VycmVudCBidWZmZXIsCjs7IGJ1dCBhIGNvcHkgb2YgaXQgKHdpdGggdGhlIHNh bWUgYnVmZmVyLWxvY2FsIHZhcmlhYmxlcyBhbmQKOzsgdmlzaWJpbGl0eSksIHdoZXJlIG1hY3Jv cyBhbmQgaW5jbHVkZSBrZXl3b3JkcyBhcmUgZXhwYW5kZWQgYW5kCjs7IEJhYmVsIGJsb2NrcyBh cmUgZXhlY3V0ZWQsIGlmIGFwcHJvcHJpYXRlLgo7OyBgb3JnLWV4cG9ydC13aXRoLWJ1ZmZlci1j b3B5JyBtYWNybyBwcmVwYXJlcyB0aGF0IGNvcHkuCjs7Cjs7IEZpbGUgaW5jbHVzaW9uIGlzIHRh a2VuIGNhcmUgb2YgYnkKOzsgYG9yZy1leHBvcnQtZXhwYW5kLWluY2x1ZGUta2V5d29yZCcgYW5k Cjs7IGBvcmctZXhwb3J0LS1wcmVwYXJlLWZpbGUtY29udGVudHMnLiAgU3RydWN0dXJlIHdpc2Us IGluY2x1ZGluZwo7OyBhIHdob2xlIE9yZyBmaWxlIGluIGEgYnVmZmVyIG9mdGVuIG1ha2VzIGxp dHRsZSBzZW5zZS4gIEZvcgo7OyBleGFtcGxlLCBpZiB0aGUgZmlsZSBjb250YWlucyBhIGhlYWRs aW5lIGFuZCB0aGUgaW5jbHVkZSBrZXl3b3JkCjs7IHdhcyB3aXRoaW4gYW4gaXRlbSwgdGhlIGl0 ZW0gc2hvdWxkIGNvbnRhaW4gdGhlIGhlYWRsaW5lLiAgVGhhdCdzCjs7IHdoeSBmaWxlIGluY2x1 c2lvbiBzaG91bGQgYmUgZG9uZSBiZWZvcmUgYW55IHN0cnVjdHVyZSBjYW4gYmUKOzsgYXNzb2Np YXRlZCB0byB0aGUgZmlsZSwgdGhhdCBpcyBiZWZvcmUgcGFyc2luZy4KOzsKOzsgYG9yZy1leHBv cnQtaW5zZXJ0LWRlZmF1bHQtdGVtcGxhdGUnIGlzIGEgY29tbWFuZCB0byBpbnNlcnQKOzsgYSBk ZWZhdWx0IHRlbXBsYXRlIChvciBhIGJhY2stZW5kIHNwZWNpZmljIHRlbXBsYXRlKSBhdCBwb2lu dCBvciBpbgo7OyBjdXJyZW50IHN1YnRyZWUuCgooZGVmdW4gb3JnLWV4cG9ydC1jb3B5LWJ1ZmZl ciAoKQogICJSZXR1cm4gYSBjb3B5IG9mIHRoZSBjdXJyZW50IGJ1ZmZlci4KVGhlIGNvcHkgcHJl c2VydmVzIE9yZyBidWZmZXItbG9jYWwgdmFyaWFibGVzLCB2aXNpYmlsaXR5IGFuZApuYXJyb3dp bmcuIgogIChsZXQgKChjb3B5LWJ1ZmZlci1mdW4gKG9yZy1leHBvcnQtLWdlbmVyYXRlLWNvcHkt c2NyaXB0IChjdXJyZW50LWJ1ZmZlcikpKQoJKG5ldy1idWYgKGdlbmVyYXRlLW5ldy1idWZmZXIg KGJ1ZmZlci1uYW1lKSkpKQogICAgKHdpdGgtY3VycmVudC1idWZmZXIgbmV3LWJ1ZgogICAgICAo ZnVuY2FsbCBjb3B5LWJ1ZmZlci1mdW4pCiAgICAgIChzZXQtYnVmZmVyLW1vZGlmaWVkLXAgbmls KSkKICAgIG5ldy1idWYpKQoKKGRlZm1hY3JvIG9yZy1leHBvcnQtd2l0aC1idWZmZXItY29weSAo JnJlc3QgYm9keSkKICAiQXBwbHkgQk9EWSBpbiBhIGNvcHkgb2YgdGhlIGN1cnJlbnQgYnVmZmVy LgpUaGUgY29weSBwcmVzZXJ2ZXMgbG9jYWwgdmFyaWFibGVzLCB2aXNpYmlsaXR5IGFuZCBjb250 ZW50cyBvZgp0aGUgb3JpZ2luYWwgYnVmZmVyLiAgUG9pbnQgaXMgYXQgdGhlIGJlZ2lubmluZyBv ZiB0aGUgYnVmZmVyCndoZW4gQk9EWSBpcyBhcHBsaWVkLiIKICAoZGVjbGFyZSAoZGVidWcgdCkp CiAgKG9yZy13aXRoLWdlbnN5bXMgKGJ1Zi1jb3B5KQogICAgYChsZXQgKCgsYnVmLWNvcHkgKG9y Zy1leHBvcnQtY29weS1idWZmZXIpKSkKICAgICAgICh1bndpbmQtcHJvdGVjdAoJICAgKHdpdGgt Y3VycmVudC1idWZmZXIgLGJ1Zi1jb3B5CgkgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCgkg ICAgIChwcm9nbiAsQGJvZHkpKQoJIChhbmQgKGJ1ZmZlci1saXZlLXAgLGJ1Zi1jb3B5KQoJICAg ICAgOzsgS2lsbCBjb3B5IHdpdGhvdXQgY29uZmlybWF0aW9uLgoJICAgICAgKHByb2duICh3aXRo LWN1cnJlbnQtYnVmZmVyICxidWYtY29weQoJCSAgICAgICAocmVzdG9yZS1idWZmZXItbW9kaWZp ZWQtcCBuaWwpKQoJCSAgICAgKGtpbGwtYnVmZmVyICxidWYtY29weSkpKSkpKSkKCihkZWZ1biBv cmctZXhwb3J0LS1nZW5lcmF0ZS1jb3B5LXNjcmlwdCAoYnVmZmVyKQogICJHZW5lcmF0ZSBhIGZ1 bmN0aW9uIGR1cGxpY2F0aW5nIEJVRkZFUi4KClRoZSBjb3B5IHdpbGwgcHJlc2VydmUgbG9jYWwg dmFyaWFibGVzLCB2aXNpYmlsaXR5LCBjb250ZW50cyBhbmQKbmFycm93aW5nIG9mIHRoZSBvcmln aW5hbCBidWZmZXIuICBJZiBhIHJlZ2lvbiB3YXMgYWN0aXZlIGluCkJVRkZFUiwgY29udGVudHMg d2lsbCBiZSBuYXJyb3dlZCB0byB0aGF0IHJlZ2lvbiBpbnN0ZWFkLgoKVGhlIHJlc3VsdGluZyBm dW5jdGlvbiBjYW4gYmUgZXZhbHVhdGVkIGF0IGEgbGF0ZXIgdGltZSwgZnJvbQphbm90aGVyIGJ1 ZmZlciwgZWZmZWN0aXZlbHkgY2xvbmluZyB0aGUgb3JpZ2luYWwgYnVmZmVyIHRoZXJlLgoKVGhl IGZ1bmN0aW9uIGFzc3VtZXMgQlVGRkVSJ3MgbWFqb3IgbW9kZSBpcyBgb3JnLW1vZGUnLiIKICAo d2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKICAgIChsZXQgKChzdHIgKG9yZy13aXRoLXdpZGUt YnVmZmVyIChidWZmZXItc3RyaW5nKSkpCiAgICAgICAgICAobmFycm93aW5nCiAgICAgICAgICAg KGlmIChvcmctcmVnaW9uLWFjdGl2ZS1wKQoJICAgICAgIChsaXN0IChyZWdpb24tYmVnaW5uaW5n KSAocmVnaW9uLWVuZCkpCgkgICAgIChsaXN0IChwb2ludC1taW4pIChwb2ludC1tYXgpKSkpCgkg IChwb3MgKHBvaW50KSkKCSAgKHZhcnZhbHMKCSAgIChsZXQgKChib3VuZC12YXJpYWJsZXMgKG9y Zy1leHBvcnQtLWxpc3QtYm91bmQtdmFyaWFibGVzKSkKCQkgKHZhcnZhbHMgbmlsKSkKCSAgICAg KGRvbGlzdCAoZW50cnkgKGJ1ZmZlci1sb2NhbC12YXJpYWJsZXMgKGJ1ZmZlci1iYXNlLWJ1ZmZl cikpKQoJICAgICAgICh3aGVuIChjb25zcCBlbnRyeSkKCQkgKGxldCAoKHZhciAoY2FyIGVudHJ5 KSkKCQkgICAgICAgKHZhbCAoY2RyIGVudHJ5KSkpCgkJICAgKGFuZCAobm90IChtZW1xIHZhciBv cmctZXhwb3J0LWlnbm9yZWQtbG9jYWwtdmFyaWFibGVzKSkKCQkJKG9yIChtZW1xIHZhcgoJCQkJ ICAnKGRlZmF1bHQtZGlyZWN0b3J5CgkJCQkgICAgIGJ1ZmZlci1maWxlLW5hbWUKCQkJCSAgICAg YnVmZmVyLWZpbGUtY29kaW5nLXN5c3RlbSkpCgkJCSAgICAoYXNzcSB2YXIgYm91bmQtdmFyaWFi bGVzKQoJCQkgICAgKHN0cmluZy1tYXRjaCAiXlxcKG9yZy1cXHxvcmd0YmwtXFwpIgoJCQkJCSAg KHN5bWJvbC1uYW1lIHZhcikpKQoJCQk7OyBTa2lwIHVucmVhZGFibGUgdmFsdWVzLCBhcyB0aGV5 IGNhbm5vdCBiZQoJCQk7OyBzZW50IHRvIGV4dGVybmFsIHByb2Nlc3MuCgkJCShvciAobm90IHZh bCkgKGlnbm9yZS1lcnJvcnMgKHJlYWQgKGZvcm1hdCAiJVMiIHZhbCkpKSkKCQkJKHB1c2ggKGNv bnMgdmFyIHZhbCkgdmFydmFscykpKSkpCiAgICAgICAgICAgICB2YXJ2YWxzKSkKCSAgKG9scwoJ ICAgKGxldCAob3Ytc2V0KQoJICAgICAoZG9saXN0IChvdiAob3ZlcmxheXMtaW4gKHBvaW50LW1p bikgKHBvaW50LW1heCkpKQoJICAgICAgIChsZXQgKChpbnZpcy1wcm9wIChvdmVybGF5LWdldCBv diAnaW52aXNpYmxlKSkpCgkJICh3aGVuIGludmlzLXByb3AKCQkgICAocHVzaCAobGlzdCAob3Zl cmxheS1zdGFydCBvdikgKG92ZXJsYXktZW5kIG92KQoJCQkgICAgICAgaW52aXMtcHJvcCkKCQkJ IG92LXNldCkpKSkKCSAgICAgb3Ytc2V0KSkpCiAgICAgIChsYW1iZGEgKCkKCShsZXQgKChpbmhp Yml0LW1vZGlmaWNhdGlvbi1ob29rcyB0KSkKCSAgOzsgU2V0IG1ham9yIG1vZGUuIElnbm9yZSBg b3JnLW1vZGUtaG9vaycgYXMgaXQgaGFzIGJlZW4gcnVuCgkgIDs7IGFscmVhZHkgaW4gQlVGRkVS LgoJICAobGV0ICgob3JnLW1vZGUtaG9vayBuaWwpIChvcmctaW5oaWJpdC1zdGFydHVwIHQpKSAo b3JnLW1vZGUpKQoJICA7OyBDb3B5IHNwZWNpZmljIGJ1ZmZlciBsb2NhbCB2YXJpYWJsZXMgYW5k IHZhcmlhYmxlcyBzZXQKCSAgOzsgdGhyb3VnaCBCSU5EIGtleXdvcmRzLgoJICAocGNhc2UtZG9s aXN0IChgKCx2YXIgLiAsdmFsKSB2YXJ2YWxzKQoJICAgIChzZXQgKG1ha2UtbG9jYWwtdmFyaWFi bGUgdmFyKSB2YWwpKQoJICA7OyBXaG9sZSBidWZmZXIgY29udGVudHMuCgkgIChpbnNlcnQgc3Ry KQogICAgICAgICAgOzsgTWFrZSBvcmctZWxlbWVudC1jYWNoZSBub3QgY29tcGxhaW4gYWJvdXQg Y2hhbmdlZCBidWZmZXIKICAgICAgICAgIDs7IHN0YXRlLgogICAgICAgICAgKG9yZy1lbGVtZW50 LWNhY2hlLXJlc2V0KQoJICA7OyBOYXJyb3dpbmcuCgkgIChhcHBseSAjJ25hcnJvdy10by1yZWdp b24gbmFycm93aW5nKQoJICA7OyBDdXJyZW50IHBvc2l0aW9uIG9mIHBvaW50LgoJICAoZ290by1j aGFyIHBvcykKCSAgOzsgT3ZlcmxheXMgd2l0aCBpbnZpc2libGUgcHJvcGVydHkuCgkgIChwY2Fz ZS1kb2xpc3QgKGAoLHN0YXJ0ICxlbmQgLGludmlzKSBvbHMpCgkgICAgKG92ZXJsYXktcHV0ICht YWtlLW92ZXJsYXkgc3RhcnQgZW5kKSAnaW52aXNpYmxlIGludmlzKSkpKSkpKQoKKGRlZnVuIG9y Zy1leHBvcnQtLWRlbGV0ZS1jb21tZW50LXRyZWVzICgpCiAgIkRlbGV0ZSBjb21tZW50ZWQgdHJl ZXMgYW5kIGNvbW1lbnRlZCBpbmxpbmV0YXNrcyBpbiB0aGUgYnVmZmVyLgpOYXJyb3dpbmcsIGlm IGFueSwgaXMgaWdub3JlZC4iCiAgKG9yZy13aXRoLXdpZGUtYnVmZmVyCiAgIChnb3RvLWNoYXIg KHBvaW50LW1pbikpCiAgIChsZXQqICgoY2FzZS1mb2xkLXNlYXJjaCB0KQoJICAocmVnZXhwIChj b25jYXQgb3JnLW91dGxpbmUtcmVnZXhwLWJvbCAiLioiIG9yZy1jb21tZW50LXN0cmluZykpKQog ICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgcmVnZXhwIG5pbCB0KQogICAgICAgKGxldCAo KGVsZW1lbnQgKG9yZy1lbGVtZW50LWF0LXBvaW50KSkpCgkgKHdoZW4gKG9yZy1lbGVtZW50LXBy b3BlcnR5IDpjb21tZW50ZWRwIGVsZW1lbnQpCgkgICAoZGVsZXRlLXJlZ2lvbiAob3JnLWVsZW1l bnQtcHJvcGVydHkgOmJlZ2luIGVsZW1lbnQpCgkJCSAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpl bmQgZWxlbWVudCkpKSkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC0tcHJ1bmUtdHJlZSAoZGF0YSBp bmZvKQogICJQcnVuZSBub24gZXhwb3J0YWJsZSBlbGVtZW50cyBmcm9tIERBVEEuCkRBVEEgaXMg dGhlIHBhcnNlIHRyZWUgdG8gdHJhdmVyc2UuICBJTkZPIGlzIHRoZSBwbGlzdCBob2xkaW5nCmV4 cG9ydCBpbmZvLiAgQWxzbyBzZXQgYDppZ25vcmUtbGlzdCcgaW4gSU5GTyB0byBhIGxpc3Qgb2YK b2JqZWN0cyB3aGljaCBzaG91bGQgYmUgaWdub3JlZCBkdXJpbmcgZXhwb3J0LCBidXQgbm90IHJl bW92ZWQKZnJvbSB0cmVlLiIKICAobGV0cmVjICgoaWdub3JlIG5pbCkKCSAgIDs7IEZpcnN0IGZp bmQgdHJlZXMgY29udGFpbmluZyBhIHNlbGVjdCB0YWcsIGlmIGFueS4KCSAgIChzZWxlY3RlZCAo b3JnLWV4cG9ydC0tc2VsZWN0ZWQtdHJlZXMgZGF0YSBpbmZvKSkKCSAgIDs7IExpc3QgdGFncyB0 aGF0IHByZXZlbnQgZXhwb3J0IG9mIGhlYWRsaW5lcy4KCSAgIChleGNsdWRlZCAoY2wtbWFwY2Fu IChsYW1iZGEgKHRhZykgKG9yZy10YWdzLWV4cGFuZCB0YWcgdCkpCgkJCQkocGxpc3QtZ2V0IGlu Zm8gOmV4Y2x1ZGUtdGFncykpKQoJICAgKHdhbGstZGF0YQoJICAgIChsYW1iZGEgKGRhdGEpCgkg ICAgICA7OyBQcnVuZSBub24tZXhwb3J0YWJsZSBlbGVtZW50cyBhbmQgb2JqZWN0cyBmcm9tIHRy ZWUuCgkgICAgICA7OyBBcyBhIHNwZWNpYWwgY2FzZSwgc3BlY2lhbCByb3dzIGFuZCBjZWxscyBm cm9tIHRhYmxlcwoJICAgICAgOzsgYXJlIHN0b3JlZCBpbiBJR05PUkUsIGFzIHRoZXkgc3RpbGwg bmVlZCB0byBiZQoJICAgICAgOzsgYWNjZXNzZWQgZHVyaW5nIGV4cG9ydC4KCSAgICAgICh3aGVu IGRhdGEKCQkobGV0ICgodHlwZSAob3JnLWVsZW1lbnQtdHlwZSBkYXRhKSkpCgkJICAoaWYgKG9y Zy1leHBvcnQtLXNraXAtcCBkYXRhIGluZm8gc2VsZWN0ZWQgZXhjbHVkZWQpCgkJICAgICAgKGlm IChtZW1xIHR5cGUgJyh0YWJsZS1jZWxsIHRhYmxlLXJvdykpIChwdXNoIGRhdGEgaWdub3JlKQoJ CQkob3JnLWVsZW1lbnQtZXh0cmFjdC1lbGVtZW50IGRhdGEpKQoJCSAgICAoaWYgKGFuZCAoZXEg dHlwZSAnaGVhZGxpbmUpCgkJCSAgICAgKGVxIChwbGlzdC1nZXQgaW5mbyA6d2l0aC1hcmNoaXZl ZC10cmVlcykKCQkJCSAnaGVhZGxpbmUpCgkJCSAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDph cmNoaXZlZHAgZGF0YSkpCgkJCTs7IElmIGhlYWRsaW5lIGlzIGFyY2hpdmVkIGJ1dCB0cmVlIGJl bG93IGhhcwoJCQk7OyB0byBiZSBza2lwcGVkLCByZW1vdmUgY29udGVudHMuCgkJCShvcmctZWxl bWVudC1zZXQtY29udGVudHMgZGF0YSkKCQkgICAgICA7OyBNb3ZlIGludG8gcmVjdXJzaXZlIG9i amVjdHMvZWxlbWVudHMuCgkJICAgICAgKG1hcGMgd2Fsay1kYXRhIChvcmctZWxlbWVudC1jb250 ZW50cyBkYXRhKSkpCgkJICAgIDs7IE1vdmUgaW50byBzZWNvbmRhcnkgc3RyaW5nLCBpZiBhbnku CgkJICAgIChkb2xpc3QgKHAgKGNkciAoYXNzcSB0eXBlCgkJCQkJICBvcmctZWxlbWVudC1zZWNv bmRhcnktdmFsdWUtYWxpc3QpKSkKCQkgICAgICAobWFwYyB3YWxrLWRhdGEgKG9yZy1lbGVtZW50 LXByb3BlcnR5IHAgZGF0YSkpKSkpKSkpCgkgICAoZGVmaW5pdGlvbnMKCSAgICAgOzsgQ29sbGVj dCBkZWZpbml0aW9ucyBiZWZvcmUgcG9zc2libHkgcHJ1bmluZyB0aGVtIHNvIGFzCgkgICAgIDs7 IHRvIGF2b2lkIHBhcnNpbmcgdGhlbSBhZ2FpbiBpZiB0aGV5IGFyZSByZXF1aXJlZC4KCSAgICAg KG9yZy1lbGVtZW50LW1hcCBkYXRhICcoZm9vdG5vdGUtZGVmaW5pdGlvbiBmb290bm90ZS1yZWZl cmVuY2UpCgkgICAgICAgKGxhbWJkYSAoZikKCQkgKGNvbmQKCQkgICgoZXEgJ2Zvb3Rub3RlLWRl ZmluaXRpb24gKG9yZy1lbGVtZW50LXR5cGUgZikpIGYpCgkJICAoKGFuZCAoZXEgJ2lubGluZSAo b3JnLWVsZW1lbnQtcHJvcGVydHkgOnR5cGUgZikpCgkJCShvcmctZWxlbWVudC1wcm9wZXJ0eSA6 bGFiZWwgZikpCgkJICAgZikKCQkgICh0IG5pbCkpKSkpKQogICAgOzsgSWYgYSBzZWxlY3QgdGFn IGlzIGFjdGl2ZSwgYWxzbyBpZ25vcmUgdGhlIHNlY3Rpb24gYmVmb3JlIHRoZQogICAgOzsgZmly c3QgaGVhZGxpbmUsIGlmIGFueS4KICAgICh3aGVuIHNlbGVjdGVkCiAgICAgIChsZXQgKChmaXJz dC1lbGVtZW50IChjYXIgKG9yZy1lbGVtZW50LWNvbnRlbnRzIGRhdGEpKSkpCgkod2hlbiAoZXEg KG9yZy1lbGVtZW50LXR5cGUgZmlyc3QtZWxlbWVudCkgJ3NlY3Rpb24pCgkgIChvcmctZWxlbWVu dC1leHRyYWN0LWVsZW1lbnQgZmlyc3QtZWxlbWVudCkpKSkKICAgIDs7IFBydW5lIHRyZWUgYW5k IGNvbW11bmljYXRpb24gY2hhbm5lbC4KICAgIChmdW5jYWxsIHdhbGstZGF0YSBkYXRhKQogICAg KGRvbGlzdCAoZW50cnkgKGFwcGVuZAoJCSAgICA7OyBQcmlvcml0eSBpcyBnaXZlbiB0byBiYWNr LWVuZCBzcGVjaWZpYyBvcHRpb25zLgoJCSAgICAob3JnLWV4cG9ydC1nZXQtYWxsLW9wdGlvbnMg KHBsaXN0LWdldCBpbmZvIDpiYWNrLWVuZCkpCgkJICAgIG9yZy1leHBvcnQtb3B0aW9ucy1hbGlz dCkpCiAgICAgICh3aGVuIChlcSAobnRoIDQgZW50cnkpICdwYXJzZSkKCShmdW5jYWxsIHdhbGst ZGF0YSAocGxpc3QtZ2V0IGluZm8gKGNhciBlbnRyeSkpKSkpCiAgICAobGV0ICgobWlzc2luZyAo b3JnLWV4cG9ydC0tbWlzc2luZy1kZWZpbml0aW9ucyBkYXRhIGRlZmluaXRpb25zKSkpCiAgICAg IChmdW5jYWxsIHdhbGstZGF0YSBtaXNzaW5nKQogICAgICAob3JnLWV4cG9ydC0taW5zdGFsbC1m b290bm90ZS1kZWZpbml0aW9ucyBtaXNzaW5nIGRhdGEpKQogICAgOzsgRXZlbnR1YWxseSBzZXQg YDppZ25vcmUtbGlzdCcuCiAgICAocGxpc3QtcHV0IGluZm8gOmlnbm9yZS1saXN0IGlnbm9yZSkp KQoKKGRlZnVuIG9yZy1leHBvcnQtLW1pc3NpbmctZGVmaW5pdGlvbnMgKHRyZWUgZGVmaW5pdGlv bnMpCiAgIkxpc3QgZm9vdG5vdGUgZGVmaW5pdGlvbnMgbWlzc2luZyBmcm9tIFRSRUUuCk1pc3Np bmcgZGVmaW5pdGlvbnMgYXJlIHNlYXJjaGVkIHdpdGhpbiBERUZJTklUSU9OUywgd2hpY2ggaXMK YSBsaXN0IG9mIGZvb3Rub3RlIGRlZmluaXRpb25zIG9yIGluIHRoZSB3aWRlbmVkIGJ1ZmZlci4i CiAgKGxldCogKChsaXN0LWxhYmVscwoJICAobGFtYmRhIChkYXRhKQoJICAgIDs7IExpc3QgYWxs IGZvb3Rub3RlIGxhYmVscyBlbmNvdW50ZXJlZCBpbiBEQVRBLiAgSW5saW5lCgkgICAgOzsgZm9v dG5vdGUgcmVmZXJlbmNlcyBhcmUgaWdub3JlZC4KCSAgICAob3JnLWVsZW1lbnQtbWFwIGRhdGEg J2Zvb3Rub3RlLXJlZmVyZW5jZQoJICAgICAgKGxhbWJkYSAocmVmZXJlbmNlKQoJCShhbmQgKGVx IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlwZSByZWZlcmVuY2UpICdzdGFuZGFyZCkKCQkgICAg IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6bGFiZWwgcmVmZXJlbmNlKSkpKSkpCgkgZGVmaW5lZCB1 bmRlZmluZWQgbWlzc2luZy1kZWZpbml0aW9ucykKICAgIDs7IFBhcnRpdGlvbiBESVJFQ1QtUkVG RVJFTkNFUyBiZXR3ZWVuIERFRklORUQgYW5kIFVOREVGSU5FRAogICAgOzsgcmVmZXJlbmNlcy4K ICAgIChsZXQgKChrbm93bi1kZWZpbml0aW9ucwoJICAgKG9yZy1lbGVtZW50LW1hcCB0cmVlICco Zm9vdG5vdGUtcmVmZXJlbmNlIGZvb3Rub3RlLWRlZmluaXRpb24pCgkgICAgIChsYW1iZGEgKGYp CgkgICAgICAgKGFuZCAob3IgKGVxIChvcmctZWxlbWVudC10eXBlIGYpICdmb290bm90ZS1kZWZp bml0aW9uKQoJCQkoZXEgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0eXBlIGYpICdpbmxpbmUpKQoJ CSAgICAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxhYmVsIGYpKSkpKQoJICApIDs7IHNlZW4KICAg ICAgKGRvbGlzdCAobCAoZnVuY2FsbCBsaXN0LWxhYmVscyB0cmVlKSkKCShjb25kIDs7ICgobWVt YmVyIGwgc2VlbikpCgkgKChtZW1iZXIgbCBrbm93bi1kZWZpbml0aW9ucykgKHB1c2ggbCBkZWZp bmVkKSkKCSAodCAocHVzaCBsIHVuZGVmaW5lZCkpKSkpCiAgICA7OyBDb21wbGV0ZSBNSVNTSU5H LURFRklOSVRJT05TIGJ5IGZpbmRpbmcgdGhlIGRlZmluaXRpb24gb2YgZXZlcnkKICAgIDs7IHVu ZGVmaW5lZCBsYWJlbCwgZmlyc3QgYnkgbG9va2luZyBpbnRvIERFRklOSVRJT05TLCB0aGVuIGJ5 CiAgICA7OyBzZWFyY2hpbmcgdGhlIHdpZGVuZWQgYnVmZmVyLiAgVGhpcyBpcyBhIHJlY3Vyc2l2 ZSBwcm9jZXNzCiAgICA7OyBzaW5jZSBkZWZpbml0aW9ucyBmb3VuZCBjYW4gdGhlbXNlbHZlcyBj b250YWluIGFuIHVuZGVmaW5lZAogICAgOzsgcmVmZXJlbmNlLgogICAgKHdoaWxlIHVuZGVmaW5l ZAogICAgICAobGV0KiAoKGxhYmVsIChwb3AgdW5kZWZpbmVkKSkKCSAgICAgKGRlZmluaXRpb24K CSAgICAgICAoY29uZAoJCSgoY2wtc29tZQoJCSAgKGxhbWJkYSAoZCkgKGFuZCAoZXF1YWwgKG9y Zy1lbGVtZW50LXByb3BlcnR5IDpsYWJlbCBkKSBsYWJlbCkKCQkJICAgICAgICAgICBkKSkKCQkg IGRlZmluaXRpb25zKSkKCQkoKHBjYXNlIChvcmctZm9vdG5vdGUtZ2V0LWRlZmluaXRpb24gbGFi ZWwpCgkJICAgKGAoLF8gLGJlZyAuICxfKQoJCSAgICAob3JnLXdpdGgtd2lkZS1idWZmZXIKCQkg ICAgIChnb3RvLWNoYXIgYmVnKQoJCSAgICAgKGxldCAoKGRhdHVtIChvcmctZWxlbWVudC1jb250 ZXh0KSkpCgkJICAgICAgIChpZiAoZXEgKG9yZy1lbGVtZW50LXR5cGUgZGF0dW0pICdmb290bm90 ZS1yZWZlcmVuY2UpCgkJCSAgIGRhdHVtCgkJCSA7OyBQYXJzZSBkZWZpbml0aW9uIHdpdGggY29u dGVudHMuCgkJCSAoc2F2ZS1yZXN0cmljdGlvbgoJCQkgICAobmFycm93LXRvLXJlZ2lvbgoJCQkg ICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpiZWdpbiBkYXR1bSkKCQkJICAgIChvcmctZWxlbWVu dC1wcm9wZXJ0eSA6ZW5kIGRhdHVtKSkKCQkJICAgKG9yZy1lbGVtZW50LW1hcCAob3JnLWVsZW1l bnQtcGFyc2UtYnVmZmVyKQoJCQkgICAgICAgJ2Zvb3Rub3RlLWRlZmluaXRpb24gIydpZGVudGl0 eSBuaWwgdCkpKSkpKQoJCSAgIChfIG5pbCkpKQoJCSh0ICh1c2VyLWVycm9yICJEZWZpbml0aW9u IG5vdCBmb3VuZCBmb3IgZm9vdG5vdGUgJXMiIGxhYmVsKSkpKSkKCShwdXNoIGxhYmVsIGRlZmlu ZWQpCgkocHVzaCBkZWZpbml0aW9uIG1pc3NpbmctZGVmaW5pdGlvbnMpCgk7OyBMb29rIGZvciBm b290bm90ZSByZWZlcmVuY2VzIHdpdGhpbiBERUZJTklUSU9OLCBzaW5jZQoJOzsgd2UgbWF5IG5l ZWQgdG8gYWxzbyBmaW5kIHRoZWlyIGRlZmluaXRpb24uCgkoZG9saXN0IChsIChmdW5jYWxsIGxp c3QtbGFiZWxzIGRlZmluaXRpb24pKQoJICAodW5sZXNzIChvciAobWVtYmVyIGwgZGVmaW5lZCkg ICAgO0tub3duIGxhYmVsCgkJICAgICAgKG1lbWJlciBsIHVuZGVmaW5lZCkpIDtQcm9jZXNzZWQg bGF0ZXIKCSAgICAocHVzaCBsIHVuZGVmaW5lZCkpKSkpCiAgICA7OyBNSVNTSU5HLURFRklOSVRJ T05TIG1heSBjb250YWluIGZvb3Rub3RlIHJlZmVyZW5jZXMgd2l0aCBpbmxpbmUKICAgIDs7IGRl ZmluaXRpb25zLiAgTWFrZSBzdXJlIHRob3NlIGFyZSBjaGFuZ2VkIGludG8gcmVhbCBmb290bm90 ZQogICAgOzsgZGVmaW5pdGlvbnMuCiAgICAobWFwY2FyIChsYW1iZGEgKGQpCgkgICAgICAoaWYg KGVxIChvcmctZWxlbWVudC10eXBlIGQpICdmb290bm90ZS1kZWZpbml0aW9uKSBkCgkJKGxldCAo KGxhYmVsIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6bGFiZWwgZCkpKQoJCSAgKGFwcGx5ICMnb3Jn LWVsZW1lbnQtY3JlYXRlCgkJCSAnZm9vdG5vdGUtZGVmaW5pdGlvbiBgKDpsYWJlbCAsbGFiZWwg OnBvc3QtYmxhbmsgMSkKCQkJIChvcmctZWxlbWVudC1jb250ZW50cyBkKSkpKSkKCSAgICBtaXNz aW5nLWRlZmluaXRpb25zKSkpCgooZGVmdW4gb3JnLWV4cG9ydC0taW5zdGFsbC1mb290bm90ZS1k ZWZpbml0aW9ucyAoZGVmaW5pdGlvbnMgdHJlZSkKICAiSW5zdGFsbCBmb290bm90ZSBkZWZpbml0 aW9ucyBpbiB0cmVlLgoKREVGSU5JVElPTlMgaXMgdGhlIGxpc3Qgb2YgZm9vdG5vdGUgZGVmaW5p dGlvbnMgdG8gaW5zdGFsbC4gIFRSRUUKaXMgdGhlIHBhcnNlIHRyZWUuCgpJZiB0aGVyZSBpcyBh IGZvb3Rub3RlIHNlY3Rpb24gaW4gVFJFRSwgZGVmaW5pdGlvbnMgZm91bmQgYXJlCmFwcGVuZGVk IHRvIGl0LiAgSWYgYG9yZy1mb290bm90ZS1zZWN0aW9uJyBpcyBub24tbmlsLCBhIG5ldwpmb290 bm90ZSBzZWN0aW9uIGNvbnRhaW5pbmcgYWxsIGRlZmluaXRpb25zIGlzIGluc2VydGVkIGluIFRS RUUuCk90aGVyd2lzZSwgZGVmaW5pdGlvbnMgYXJlIGFwcGVuZGVkIGF0IHRoZSBlbmQgb2YgdGhl IHNlY3Rpb24KY29udGFpbmluZyB0aGVpciBmaXJzdCByZWZlcmVuY2UuIgogIChjb25kCiAgICgo bnVsbCBkZWZpbml0aW9ucykpCiAgIDs7IElmIHRoZXJlIGlzIGEgZm9vdG5vdGUgc2VjdGlvbiwg aW5zZXJ0IGRlZmluaXRpb25zIHRoZXJlLgogICAoKGxldCAoKGZvb3Rub3RlLXNlY3Rpb24KCSAg IChvcmctZWxlbWVudC1tYXAgdHJlZSAnaGVhZGxpbmUKCSAgICAgKGxhbWJkYSAoaCkgKGFuZCAo b3JnLWVsZW1lbnQtcHJvcGVydHkgOmZvb3Rub3RlLXNlY3Rpb24tcCBoKSBoKSkKCSAgICAgbmls IHQpKSkKICAgICAgKGFuZCBmb290bm90ZS1zZWN0aW9uCgkgICAoYXBwbHkgIydvcmctZWxlbWVu dC1hZG9wdC1lbGVtZW50cwoJCSAgZm9vdG5vdGUtc2VjdGlvbgoJCSAgKG5yZXZlcnNlIGRlZmlu aXRpb25zKSkpKSkKICAgOzsgSWYgdGhlcmUgc2hvdWxkIGJlIGEgZm9vdG5vdGUgc2VjdGlvbiwg Y3JlYXRlIG9uZSBjb250YWluaW5nIGFsbAogICA7OyB0aGUgZGVmaW5pdGlvbnMgYXQgdGhlIGVu ZCBvZiB0aGUgdHJlZS4KICAgKG9yZy1mb290bm90ZS1zZWN0aW9uCiAgICAob3JnLWVsZW1lbnQt YWRvcHQtZWxlbWVudHMKICAgICAgICB0cmVlCiAgICAgIChvcmctZWxlbWVudC1jcmVhdGUgJ2hl YWRsaW5lCgkJCSAgKGxpc3QgOmZvb3Rub3RlLXNlY3Rpb24tcCB0CgkJCSAgICAgICAgOmxldmVs IDEKCQkJICAgICAgICA6dGl0bGUgb3JnLWZvb3Rub3RlLXNlY3Rpb24KCQkJICAgICAgICA6cmF3 LXZhbHVlIG9yZy1mb290bm90ZS1zZWN0aW9uKQoJCQkgIChhcHBseSAjJ29yZy1lbGVtZW50LWNy ZWF0ZQoJCQkJICdzZWN0aW9uCgkJCQkgbmlsCgkJCQkgKG5yZXZlcnNlIGRlZmluaXRpb25zKSkp KSkKICAgOzsgT3RoZXJ3aXNlIGFkZCBlYWNoIGRlZmluaXRpb24gYXQgdGhlIGVuZCBvZiB0aGUg c2VjdGlvbiB3aGVyZSBpdAogICA7OyBpcyBmaXJzdCByZWZlcmVuY2VkLgogICAodAogICAgKGxl dHJlYyAoKHNlZW4gbmlsKQoJICAgICAoaW5zZXJ0LWRlZmluaXRpb25zCgkgICAgICAobGFtYmRh IChkYXRhKQoJCTs7IEluc2VydCBmb290bm90ZSBkZWZpbml0aW9ucyBpbiB0aGUgc2FtZSBzZWN0 aW9uIGFzCgkJOzsgdGhlaXIgZmlyc3QgcmVmZXJlbmNlIGluIERBVEEuCgkJKG9yZy1lbGVtZW50 LW1hcCBkYXRhICdmb290bm90ZS1yZWZlcmVuY2UKCQkgIChsYW1iZGEgKHJlZmVyZW5jZSkKCQkg ICAgKHdoZW4gKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlwZSByZWZlcmVuY2UpICdzdGFu ZGFyZCkKCQkgICAgICAobGV0ICgobGFiZWwgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpsYWJlbCBy ZWZlcmVuY2UpKSkKCQkJKHVubGVzcyAobWVtYmVyIGxhYmVsIHNlZW4pCgkJCSAgKHB1c2ggbGFi ZWwgc2VlbikKCQkJICAobGV0ICgoZGVmaW5pdGlvbgoJCQkJICAoY2wtc29tZQoJCQkJICAgKGxh bWJkYSAoZCkKCQkJCSAgICAgKGFuZCAoZXF1YWwgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpsYWJl bCBkKQoJCQkJCQkgbGFiZWwpCgkJCQkJICBkKSkKCQkJCSAgIGRlZmluaXRpb25zKSkpCgkJCSAg ICAob3JnLWVsZW1lbnQtYWRvcHQtZWxlbWVudHMKCQkJICAgICAgICAob3JnLWVsZW1lbnQtbGlu ZWFnZSByZWZlcmVuY2UgJyhzZWN0aW9uKSkKCQkJICAgICAgZGVmaW5pdGlvbikKCQkJICAgIDs7 IEFsc28gaW5zZXJ0IGRlZmluaXRpb25zIGZvciBuZXN0ZWQKCQkJICAgIDs7IHJlZmVyZW5jZXMs IGlmIGFueS4KCQkJICAgIChmdW5jYWxsIGluc2VydC1kZWZpbml0aW9ucyBkZWZpbml0aW9uKSkp KSkpKSkpKQogICAgICAoZnVuY2FsbCBpbnNlcnQtZGVmaW5pdGlvbnMgdHJlZSkpKSkpCgooZGVm dW4gb3JnLWV4cG9ydC0tcmVtb3ZlLXVuaW50ZXJwcmV0ZWQtZGF0YSAoZGF0YSBpbmZvKQogICJD aGFuZ2UgdW5pbnRlcnByZXRlZCBlbGVtZW50cyBiYWNrIGludG8gT3JnIHN5bnRheC4KREFUQSBp cyBhIHBhcnNlIHRyZWUgb3IgYSBzZWNvbmRhcnkgc3RyaW5nLiAgSU5GTyBpcyBhIHBsaXN0CmNv bnRhaW5pbmcgZXhwb3J0IG9wdGlvbnMuICBJdCBpcyBtb2RpZmllZCBieSBzaWRlIGVmZmVjdCBh bmQKcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uLiIKICAob3JnLWVsZW1lbnQtbWFwIGRhdGEKICAg ICAgJyhlbnRpdHkgYm9sZCBpdGFsaWMgbGF0ZXgtZW52aXJvbm1lbnQgbGF0ZXgtZnJhZ21lbnQg c3RyaWtlLXRocm91Z2gKCSAgICAgICBzdWJzY3JpcHQgc3VwZXJzY3JpcHQgdW5kZXJsaW5lKQog ICAgKGxhbWJkYSAoZGF0dW0pCiAgICAgIChsZXQqICgodHlwZSAob3JnLWVsZW1lbnQtdHlwZSBk YXR1bSkpCgkgICAgIChwb3N0LWJsYW5rCgkgICAgICAocGNhc2UgKG9yZy1lbGVtZW50LXByb3Bl cnR5IDpwb3N0LWJsYW5rIGRhdHVtKQoJCShgbmlsIG5pbCkKCQkobiAobWFrZS1zdHJpbmcgbiAo aWYgKGVxIHR5cGUgJ2xhdGV4LWVudmlyb25tZW50KSA/XG4gP1xzKSkpKSkKCSAgICAgKG5ldwoJ ICAgICAgKGNsLWNhc2UgdHlwZQoJCTs7IC4uLiBlbnRpdGllcy4uLgoJCShlbnRpdHkKCQkgKGFu ZCAobm90IChwbGlzdC1nZXQgaW5mbyA6d2l0aC1lbnRpdGllcykpCgkJICAgICAgKGxpc3QgKGNv bmNhdCAob3JnLWV4cG9ydC1leHBhbmQgZGF0dW0gbmlsKQoJCQkJICAgIHBvc3QtYmxhbmspKSkp CgkJOzsgLi4uIGVtcGhhc2lzLi4uCgkJKChib2xkIGl0YWxpYyBzdHJpa2UtdGhyb3VnaCB1bmRl cmxpbmUpCgkJIChhbmQgKG5vdCAocGxpc3QtZ2V0IGluZm8gOndpdGgtZW1waGFzaXplKSkKCQkg ICAgICAobGV0ICgobWFya2VyIChjbC1jYXNlIHR5cGUKCQkJCSAgICAgIChib2xkICIqIikKCQkJ CSAgICAgIChpdGFsaWMgIi8iKQoJCQkJICAgICAgKHN0cmlrZS10aHJvdWdoICIrIikKCQkJCSAg ICAgICh1bmRlcmxpbmUgIl8iKSkpKQoJCQkoYXBwZW5kCgkJCSAobGlzdCBtYXJrZXIpCgkJCSAo b3JnLWVsZW1lbnQtY29udGVudHMgZGF0dW0pCgkJCSAobGlzdCAoY29uY2F0IG1hcmtlciBwb3N0 LWJsYW5rKSkpKSkpCgkJOzsgLi4uIExhVGVYIGVudmlyb25tZW50cyBhbmQgZnJhZ21lbnRzLi4u CgkJKChsYXRleC1lbnZpcm9ubWVudCBsYXRleC1mcmFnbWVudCkKCQkgKGFuZCAoZXEgKHBsaXN0 LWdldCBpbmZvIDp3aXRoLWxhdGV4KSAndmVyYmF0aW0pCgkJICAgICAgKGxpc3QgKGNvbmNhdCAo b3JnLWV4cG9ydC1leHBhbmQgZGF0dW0gbmlsKQoJCQkJICAgIHBvc3QtYmxhbmspKSkpCgkJOzsg Li4uIHN1Yi9zdXBlcnNjcmlwdHMuLi4KCQkoKHN1YnNjcmlwdCBzdXBlcnNjcmlwdCkKCQkgKGxl dCAoKHN1Yi9zdXBlci1wIChwbGlzdC1nZXQgaW5mbyA6d2l0aC1zdWItc3VwZXJzY3JpcHQpKQoJ CSAgICAgICAoYnJhY2tldHAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp1c2UtYnJhY2tldHMtcCBk YXR1bSkpKQoJCSAgIChhbmQgKG9yIChub3Qgc3ViL3N1cGVyLXApCgkJCSAgICAoYW5kIChlcSBz dWIvc3VwZXItcCAne30pIChub3QgYnJhY2tldHApKSkKCQkJKGFwcGVuZAoJCQkgKGxpc3QgKGNv bmNhdCAoaWYgKGVxIHR5cGUgJ3N1YnNjcmlwdCkgIl8iICJeIikKCQkJCSAgICAgICAoYW5kIGJy YWNrZXRwICJ7IikpKQoJCQkgKG9yZy1lbGVtZW50LWNvbnRlbnRzIGRhdHVtKQoJCQkgKGxpc3Qg KGNvbmNhdCAoYW5kIGJyYWNrZXRwICJ9IikKCQkJCSAgICAgICBwb3N0LWJsYW5rKSkpKSkpKSkp Cgkod2hlbiBuZXcKCSAgOzsgU3BsaWNlIE5FVyBhdCBEQVRVTSBsb2NhdGlvbiBpbiBwYXJzZSB0 cmVlLgoJICAoZG9saXN0IChlIG5ldyAob3JnLWVsZW1lbnQtZXh0cmFjdC1lbGVtZW50IGRhdHVt KSkKCSAgICAodW5sZXNzIChlcXVhbCBlICIiKSAob3JnLWVsZW1lbnQtaW5zZXJ0LWJlZm9yZSBl IGRhdHVtKSkpKSkpCiAgICBpbmZvIG5pbCBuaWwgdCkKICA7OyBSZXR1cm4gbW9kaWZpZWQgcGFy c2UgdHJlZS4KICBkYXRhKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIG9yZy1leHBvcnQtYXMKICAg IChiYWNrZW5kICZvcHRpb25hbCBzdWJ0cmVlcCB2aXNpYmxlLW9ubHkgYm9keS1vbmx5IGV4dC1w bGlzdCkKICAiVHJhbnNjb2RlIGN1cnJlbnQgT3JnIGJ1ZmZlciBpbnRvIEJBQ0tFTkQgY29kZS4K CkJBQ0tFTkQgaXMgZWl0aGVyIGFuIGV4cG9ydCBiYWNrLWVuZCwgYXMgcmV0dXJuZWQgYnksIGUu Zy4sCmBvcmctZXhwb3J0LWNyZWF0ZS1iYWNrZW5kJywgb3IgYSBzeW1ib2wgcmVmZXJyaW5nIHRv CmEgcmVnaXN0ZXJlZCBiYWNrLWVuZC4KCklmIG5hcnJvd2luZyBpcyBhY3RpdmUgaW4gdGhlIGN1 cnJlbnQgYnVmZmVyLCBvbmx5IHRyYW5zY29kZSBpdHMKbmFycm93ZWQgcGFydC4KCklmIGEgcmVn aW9uIGlzIGFjdGl2ZSwgdHJhbnNjb2RlIHRoYXQgcmVnaW9uLgoKV2hlbiBvcHRpb25hbCBhcmd1 bWVudCBTVUJUUkVFUCBpcyBub24tbmlsLCB0cmFuc2NvZGUgdGhlCnN1Yi10cmVlIGF0IHBvaW50 LCBleHRyYWN0aW5nIGluZm9ybWF0aW9uIGZyb20gdGhlIGhlYWRsaW5lCnByb3BlcnRpZXMgZmly c3QuCgpXaGVuIG9wdGlvbmFsIGFyZ3VtZW50IFZJU0lCTEUtT05MWSBpcyBub24tbmlsLCBkb24n dCBleHBvcnQKY29udGVudHMgb2YgaGlkZGVuIGVsZW1lbnRzLgoKV2hlbiBvcHRpb25hbCBhcmd1 bWVudCBCT0RZLU9OTFkgaXMgbm9uLW5pbCwgb25seSByZXR1cm4gYm9keQpjb2RlLCB3aXRob3V0 IHN1cnJvdW5kaW5nIHRlbXBsYXRlLgoKT3B0aW9uYWwgYXJndW1lbnQgRVhULVBMSVNULCB3aGVu IHByb3ZpZGVkLCBpcyBhIHByb3BlcnR5IGxpc3QKd2l0aCBleHRlcm5hbCBwYXJhbWV0ZXJzIG92 ZXJyaWRpbmcgT3JnIGRlZmF1bHQgc2V0dGluZ3MsIGJ1dApzdGlsbCBpbmZlcmlvciB0byBmaWxl LWxvY2FsIHNldHRpbmdzLgoKUmV0dXJuIGNvZGUgYXMgYSBzdHJpbmcuIgogICh3aGVuIChzeW1i b2xwIGJhY2tlbmQpIChzZXRxIGJhY2tlbmQgKG9yZy1leHBvcnQtZ2V0LWJhY2tlbmQgYmFja2Vu ZCkpKQogIChvcmctZXhwb3J0LWJhcmYtaWYtaW52YWxpZC1iYWNrZW5kIGJhY2tlbmQpCiAgKHNh dmUtZXhjdXJzaW9uCiAgICAoc2F2ZS1yZXN0cmljdGlvbgogICAgICA7OyBOYXJyb3cgYnVmZmVy IHRvIGFuIGFwcHJvcHJpYXRlIHJlZ2lvbiBvciBzdWJ0cmVlIGZvcgogICAgICA7OyBwYXJzaW5n LiAgSWYgcGFyc2luZyBzdWJ0cmVlLCBiZSBzdXJlIHRvIHJlbW92ZSBtYWluCiAgICAgIDs7IGhl YWRsaW5lLCBwbGFubmluZyBkYXRhIGFuZCBwcm9wZXJ0eSBkcmF3ZXIuCiAgICAgIChjb25kICgo b3JnLXJlZ2lvbi1hY3RpdmUtcCkKCSAgICAgKG5hcnJvdy10by1yZWdpb24gKHJlZ2lvbi1iZWdp bm5pbmcpIChyZWdpb24tZW5kKSkpCgkgICAgKHN1YnRyZWVwCgkgICAgIChvcmctbmFycm93LXRv LXN1YnRyZWUpCgkgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCgkgICAgIChvcmctZW5kLW9m LW1ldGEtZGF0YSkKCSAgICAgKG5hcnJvdy10by1yZWdpb24gKHBvaW50KSAocG9pbnQtbWF4KSkp KQogICAgICA7OyBJbml0aWFsaXplIGNvbW11bmljYXRpb24gY2hhbm5lbCB3aXRoIG9yaWdpbmFs IGJ1ZmZlcgogICAgICA7OyBhdHRyaWJ1dGVzLCB1bmF2YWlsYWJsZSBpbiBpdHMgY29weS4KICAg ICAgKGxldCogKChvcmctZXhwb3J0LWN1cnJlbnQtYmFja2VuZCAob3JnLWV4cG9ydC1iYWNrZW5k LW5hbWUgYmFja2VuZCkpCgkgICAgIChpbmZvIChvcmctY29tYmluZS1wbGlzdHMKCQkgICAgKG9y Zy1leHBvcnQtLWdldC1leHBvcnQtYXR0cmlidXRlcwoJCSAgICAgYmFja2VuZCBzdWJ0cmVlcCB2 aXNpYmxlLW9ubHkgYm9keS1vbmx5KQoJCSAgICAob3JnLWV4cG9ydC0tZ2V0LWJ1ZmZlci1hdHRy aWJ1dGVzKSkpCgkgICAgIChwYXJzZWQta2V5d29yZHMKCSAgICAgIChkZWxxIG5pbAoJCSAgICAo bWFwY2FyIChsYW1iZGEgKG8pIChhbmQgKGVxIChudGggNCBvKSAncGFyc2UpIChudGggMSBvKSkp CgkJCSAgICAoYXBwZW5kIChvcmctZXhwb3J0LWdldC1hbGwtb3B0aW9ucyBiYWNrZW5kKQoJCQkJ ICAgIG9yZy1leHBvcnQtb3B0aW9ucy1hbGlzdCkpKSkKCSAgICAgdHJlZSkKCTs7IFVwZGF0ZSBj b21tdW5pY2F0aW9uIGNoYW5uZWwgYW5kIGdldCBwYXJzZSB0cmVlLiAgQnVmZmVyCgk7OyBpc24n dCBwYXJzZWQgZGlyZWN0bHkuICBJbnN0ZWFkLCBhbGwgYnVmZmVyIG1vZGlmaWNhdGlvbnMKCTs7 IGFuZCBjb25zZXF1ZW50IHBhcnNpbmcgYXJlIHVuZGVydGFrZW4gaW4gYSB0ZW1wb3JhcnkgY29w eS4KCShvcmctZXhwb3J0LXdpdGgtYnVmZmVyLWNvcHkKCSA7OyBSdW4gZmlyc3QgaG9vayB3aXRo IGN1cnJlbnQgYmFjay1lbmQncyBuYW1lIGFzIGFyZ3VtZW50LgoJIChydW4taG9vay13aXRoLWFy Z3MgJ29yZy1leHBvcnQtYmVmb3JlLXByb2Nlc3NpbmctaG9vawoJCQkgICAgIChvcmctZXhwb3J0 LWJhY2tlbmQtbmFtZSBiYWNrZW5kKSkKCSAob3JnLWV4cG9ydC1leHBhbmQtaW5jbHVkZS1rZXl3 b3JkKQoJIChvcmctZXhwb3J0LS1kZWxldGUtY29tbWVudC10cmVlcykKCSAob3JnLW1hY3JvLWlu aXRpYWxpemUtdGVtcGxhdGVzIG9yZy1leHBvcnQtZ2xvYmFsLW1hY3JvcykKCSAob3JnLW1hY3Jv LXJlcGxhY2UtYWxsIG9yZy1tYWNyby10ZW1wbGF0ZXMgcGFyc2VkLWtleXdvcmRzKQoJIDs7IFJl ZnJlc2ggYnVmZmVyIHByb3BlcnRpZXMgYW5kIHJhZGlvIHRhcmdldHMgYWZ0ZXIgcHJldmlvdXMK CSA7OyBwb3RlbnRpYWxseSBpbnZhc2l2ZSBjaGFuZ2VzLgoJIChvcmctc2V0LXJlZ2V4cHMtYW5k LW9wdGlvbnMpCgkgKG9yZy11cGRhdGUtcmFkaW8tdGFyZ2V0LXJlZ2V4cCkKCSA7OyAgUG9zc2li bHkgZXhlY3V0ZSBCYWJlbCBjb2RlLiAgUmUtcnVuIGEgbWFjcm8gZXhwYW5zaW9uCgkgOzsgIHNw ZWNpZmljYWxseSBmb3Ige3t7cmVzdWx0c319fSBzaW5jZSBpbmxpbmUgc291cmNlIGJsb2NrcwoJ IDs7ICBtYXkgaGF2ZSBnZW5lcmF0ZWQgc29tZSBtb3JlLiAgUmVmcmVzaCBidWZmZXIgcHJvcGVy dGllcwoJIDs7ICBhbmQgcmFkaW8gdGFyZ2V0cyBhbm90aGVyIHRpbWUuCgkgKHdoZW4gb3JnLWV4 cG9ydC11c2UtYmFiZWwKCSAgIChvcmctYmFiZWwtZXhwLXByb2Nlc3MtYnVmZmVyKQoJICAgKG9y Zy1tYWNyby1yZXBsYWNlLWFsbCAnKCgicmVzdWx0cyIgLiAiJDEiKSkgcGFyc2VkLWtleXdvcmRz KQoJICAgKG9yZy1zZXQtcmVnZXhwcy1hbmQtb3B0aW9ucykKCSAgIChvcmctdXBkYXRlLXJhZGlv LXRhcmdldC1yZWdleHApKQoJIDs7IFJ1biBsYXN0IGhvb2sgd2l0aCBjdXJyZW50IGJhY2stZW5k J3MgbmFtZSBhcyBhcmd1bWVudC4KCSA7OyBVcGRhdGUgYnVmZmVyIHByb3BlcnRpZXMgYW5kIHJh ZGlvIHRhcmdldHMgb25lIGxhc3QgdGltZQoJIDs7IGJlZm9yZSBwYXJzaW5nLgoJIChnb3RvLWNo YXIgKHBvaW50LW1pbikpCgkgKHNhdmUtZXhjdXJzaW9uCgkgICAocnVuLWhvb2std2l0aC1hcmdz ICdvcmctZXhwb3J0LWJlZm9yZS1wYXJzaW5nLWhvb2sKCQkJICAgICAgIChvcmctZXhwb3J0LWJh Y2tlbmQtbmFtZSBiYWNrZW5kKSkpCgkgKG9yZy1zZXQtcmVnZXhwcy1hbmQtb3B0aW9ucykKCSAo b3JnLXVwZGF0ZS1yYWRpby10YXJnZXQtcmVnZXhwKQoJIDs7IFVwZGF0ZSBjb21tdW5pY2F0aW9u IGNoYW5uZWwgd2l0aCBlbnZpcm9ubWVudC4KCSAoc2V0cSBpbmZvCgkgICAgICAgKG9yZy1jb21i aW5lLXBsaXN0cwoJCWluZm8gKG9yZy1leHBvcnQtZ2V0LWVudmlyb25tZW50IGJhY2tlbmQgc3Vi dHJlZXAgZXh0LXBsaXN0KSkpCiAgICAgICAgIDs7IFByZS1wcm9jZXNzIGNpdGF0aW9ucyBlbnZp cm9ubWVudCwgaS5lLiBpbnN0YWxsCgkgOzsgYmlibGlvZ3JhcGh5IGxpc3QsIGFuZCBjaXRhdGlv biBwcm9jZXNzb3IgaW4gSU5GTy4KCSAob3JnLWNpdGUtc3RvcmUtYmlibGlvZ3JhcGh5IGluZm8p CiAgICAgICAgIChvcmctY2l0ZS1zdG9yZS1leHBvcnQtcHJvY2Vzc29yIGluZm8pCgkgOzsgRGUt YWN0aXZhdGUgdW5pbnRlcnByZXRlZCBkYXRhIGZyb20gcGFyc2VkIGtleXdvcmRzLgoJIChkb2xp c3QgKGVudHJ5IChhcHBlbmQgKG9yZy1leHBvcnQtZ2V0LWFsbC1vcHRpb25zIGJhY2tlbmQpCgkJ CQlvcmctZXhwb3J0LW9wdGlvbnMtYWxpc3QpKQoJICAgKHBjYXNlIGVudHJ5CgkgICAgIChgKCxw ICxfICxfICxfIHBhcnNlKQoJICAgICAgKGxldCAoKHZhbHVlIChwbGlzdC1nZXQgaW5mbyBwKSkp CgkJKHBsaXN0LXB1dCBpbmZvCgkJCSAgIHAKCQkJICAgKG9yZy1leHBvcnQtLXJlbW92ZS11bmlu dGVycHJldGVkLWRhdGEgdmFsdWUgaW5mbykpKSkKCSAgICAgKF8gbmlsKSkpCgkgOzsgSW5zdGFs bCB1c2VyJ3MgYW5kIGRldmVsb3BlcidzIGZpbHRlcnMuCgkgKHNldHEgaW5mbyAob3JnLWV4cG9y dC1pbnN0YWxsLWZpbHRlcnMgaW5mbykpCgkgOzsgQ2FsbCBvcHRpb25zIGZpbHRlcnMgYW5kIHVw ZGF0ZSBleHBvcnQgb3B0aW9ucy4gIFdlIGRvIG5vdAoJIDs7IHVzZSBgb3JnLWV4cG9ydC1maWx0 ZXItYXBwbHktZnVuY3Rpb25zJyBoZXJlIHNpbmNlIHRoZQoJIDs7IGFyaXR5IG9mIHN1Y2ggZmls dGVycyBpcyBkaWZmZXJlbnQuCgkgKGxldCAoKGJhY2tlbmQtbmFtZSAob3JnLWV4cG9ydC1iYWNr ZW5kLW5hbWUgYmFja2VuZCkpKQoJICAgKGRvbGlzdCAoZmlsdGVyIChwbGlzdC1nZXQgaW5mbyA6 ZmlsdGVyLW9wdGlvbnMpKQoJICAgICAobGV0ICgocmVzdWx0IChmdW5jYWxsIGZpbHRlciBpbmZv IGJhY2tlbmQtbmFtZSkpKQoJICAgICAgICh3aGVuIHJlc3VsdCAoc2V0cSBpbmZvIHJlc3VsdCkp KSkpCgkgOzsgUGFyc2UgYnVmZmVyLgoJIChzZXRxIHRyZWUgKG9yZy1lbGVtZW50LXBhcnNlLWJ1 ZmZlciBuaWwgdmlzaWJsZS1vbmx5KSkKCSA7OyBQcnVuZSB0cmVlIGZyb20gbm9uLWV4cG9ydGVk IGVsZW1lbnRzIGFuZCB0cmFuc2Zvcm0KCSA7OyB1bmludGVycHJldGVkIGVsZW1lbnRzIG9yIG9i amVjdHMgaW4gYm90aCBwYXJzZSB0cmVlIGFuZAoJIDs7IGNvbW11bmljYXRpb24gY2hhbm5lbC4K CSAob3JnLWV4cG9ydC0tcHJ1bmUtdHJlZSB0cmVlIGluZm8pCgkgKG9yZy1leHBvcnQtLXJlbW92 ZS11bmludGVycHJldGVkLWRhdGEgdHJlZSBpbmZvKQoJIDs7IENhbGwgcGFyc2UgdHJlZSBmaWx0 ZXJzLgoJIChzZXRxIHRyZWUKCSAgICAgICAob3JnLWV4cG9ydC1maWx0ZXItYXBwbHktZnVuY3Rp b25zCgkJKHBsaXN0LWdldCBpbmZvIDpmaWx0ZXItcGFyc2UtdHJlZSkgdHJlZSBpbmZvKSkKCSA7 OyBOb3cgdHJlZSBpcyBjb21wbGV0ZSwgY29tcHV0ZSBpdHMgcHJvcGVydGllcyBhbmQgYWRkIHRo ZW0KCSA7OyB0byBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCgkgKHNldHEgaW5mbyAob3JnLWV4cG9y dC0tY29sbGVjdC10cmVlLXByb3BlcnRpZXMgdHJlZSBpbmZvKSkKICAgICAgICAgOzsgUHJvY2Vz cyBjaXRhdGlvbnMgYW5kIGJpYmxpb2dyYXBoeS4gIFJlcGxhY2UgZWFjaCBjaXRhdGlvbgoJIDs7 IGFuZCAicHJpbnRfYmlibGlvZ3JhcGh5IiBrZXl3b3JkIGluIHRoZSBwYXJzZSB0cmVlIHdpdGgK CSA7OyB0aGUgb3V0cHV0IG9mIHRoZSBzZWxlY3RlZCBjaXRhdGlvbiBleHBvcnQgcHJvY2Vzc29y LgogICAgICAgICAob3JnLWNpdGUtcHJvY2Vzcy1jaXRhdGlvbnMgaW5mbykKICAgICAgICAgKG9y Zy1jaXRlLXByb2Nlc3MtYmlibGlvZ3JhcGh5IGluZm8pCgkgOzsgRXZlbnR1YWxseSB0cmFuc2Nv ZGUgVFJFRS4gIFdyYXAgdGhlIHJlc3VsdGluZyBzdHJpbmcgaW50bwoJIDs7IGEgdGVtcGxhdGUu CgkgKGxldCogKChib2R5IChvcmctZWxlbWVudC1ub3JtYWxpemUtc3RyaW5nCgkJICAgICAgIChv ciAob3JnLWV4cG9ydC1kYXRhIHRyZWUgaW5mbykgIiIpKSkKCQkoaW5uZXItdGVtcGxhdGUgKGNk ciAoYXNzcSAnaW5uZXItdGVtcGxhdGUKCQkJCQkgICAocGxpc3QtZ2V0IGluZm8gOnRyYW5zbGF0 ZS1hbGlzdCkpKSkKCQkoZnVsbC1ib2R5IChvcmctZXhwb3J0LWZpbHRlci1hcHBseS1mdW5jdGlv bnMKCQkJICAgIChwbGlzdC1nZXQgaW5mbyA6ZmlsdGVyLWJvZHkpCgkJCSAgICAoaWYgKG5vdCAo ZnVuY3Rpb25wIGlubmVyLXRlbXBsYXRlKSkgYm9keQoJCQkgICAgICAoZnVuY2FsbCBpbm5lci10 ZW1wbGF0ZSBib2R5IGluZm8pKQoJCQkgICAgaW5mbykpCgkJKHRlbXBsYXRlIChjZHIgKGFzc3Eg J3RlbXBsYXRlCgkJCQkgICAgIChwbGlzdC1nZXQgaW5mbyA6dHJhbnNsYXRlLWFsaXN0KSkpKQog ICAgICAgICAgICAgICAgKG91dHB1dAogICAgICAgICAgICAgICAgIChpZiAob3IgKG5vdCAoZnVu Y3Rpb25wIHRlbXBsYXRlKSkgYm9keS1vbmx5KSBmdWxsLWJvZHkKCSAgICAgICAgICAgKGZ1bmNh bGwgdGVtcGxhdGUgZnVsbC1ib2R5IGluZm8pKSkpCiAgICAgICAgICAgOzsgQ2FsbCBjaXRhdGlv biBleHBvcnQgZmluYWxpemVyLgogICAgICAgICAgIChzZXRxIG91dHB1dCAob3JnLWNpdGUtZmlu YWxpemUtZXhwb3J0IG91dHB1dCBpbmZvKSkKCSAgIDs7IFJlbW92ZSBhbGwgdGV4dCBwcm9wZXJ0 aWVzIHNpbmNlIHRoZXkgY2Fubm90IGJlCgkgICA7OyByZXRyaWV2ZWQgZnJvbSBhbiBleHRlcm5h bCBwcm9jZXNzLiAgRmluYWxseSBjYWxsCgkgICA7OyBmaW5hbC1vdXRwdXQgZmlsdGVyIGFuZCBy ZXR1cm4gcmVzdWx0LgoJICAgKG9yZy1uby1wcm9wZXJ0aWVzCgkgICAgKG9yZy1leHBvcnQtZmls dGVyLWFwcGx5LWZ1bmN0aW9ucwoJICAgICAocGxpc3QtZ2V0IGluZm8gOmZpbHRlci1maW5hbC1v dXRwdXQpCgkgICAgIG91dHB1dCBpbmZvKSkpKSkpKSkKCjs7OyMjI2F1dG9sb2FkCihkZWZ1biBv cmctZXhwb3J0LXN0cmluZy1hcyAoc3RyaW5nIGJhY2tlbmQgJm9wdGlvbmFsIGJvZHktb25seSBl eHQtcGxpc3QpCiAgIlRyYW5zY29kZSBTVFJJTkcgaW50byBCQUNLRU5EIGNvZGUuCgpCQUNLRU5E IGlzIGVpdGhlciBhbiBleHBvcnQgYmFjay1lbmQsIGFzIHJldHVybmVkIGJ5LCBlLmcuLApgb3Jn LWV4cG9ydC1jcmVhdGUtYmFja2VuZCcsIG9yIGEgc3ltYm9sIHJlZmVycmluZyB0bwphIHJlZ2lz dGVyZWQgYmFjay1lbmQuCgpXaGVuIG9wdGlvbmFsIGFyZ3VtZW50IEJPRFktT05MWSBpcyBub24t bmlsLCBvbmx5IHJldHVybiBib2R5CmNvZGUsIHdpdGhvdXQgcHJlYW1ibGUgbm9yIHBvc3RhbWJs ZS4KCk9wdGlvbmFsIGFyZ3VtZW50IEVYVC1QTElTVCwgd2hlbiBwcm92aWRlZCwgaXMgYSBwcm9w ZXJ0eSBsaXN0CndpdGggZXh0ZXJuYWwgcGFyYW1ldGVycyBvdmVycmlkaW5nIE9yZyBkZWZhdWx0 IHNldHRpbmdzLCBidXQKc3RpbGwgaW5mZXJpb3IgdG8gZmlsZS1sb2NhbCBzZXR0aW5ncy4KClJl dHVybiBjb2RlIGFzIGEgc3RyaW5nLiIKICAod2l0aC10ZW1wLWJ1ZmZlcgogICAgKGluc2VydCBz dHJpbmcpCiAgICAobGV0ICgob3JnLWluaGliaXQtc3RhcnR1cCB0KSkgKG9yZy1tb2RlKSkKICAg IChvcmctZXhwb3J0LWFzIGJhY2tlbmQgbmlsIG5pbCBib2R5LW9ubHkgZXh0LXBsaXN0KSkpCgo7 OzsjIyNhdXRvbG9hZAooZGVmdW4gb3JnLWV4cG9ydC1yZXBsYWNlLXJlZ2lvbi1ieSAoYmFja2Vu ZCkKICAiUmVwbGFjZSB0aGUgYWN0aXZlIHJlZ2lvbiBieSBpdHMgZXhwb3J0IHRvIEJBQ0tFTkQu CkJBQ0tFTkQgaXMgZWl0aGVyIGFuIGV4cG9ydCBiYWNrLWVuZCwgYXMgcmV0dXJuZWQgYnksIGUu Zy4sCmBvcmctZXhwb3J0LWNyZWF0ZS1iYWNrZW5kJywgb3IgYSBzeW1ib2wgcmVmZXJyaW5nIHRv CmEgcmVnaXN0ZXJlZCBiYWNrLWVuZC4iCiAgKHVubGVzcyAob3JnLXJlZ2lvbi1hY3RpdmUtcCkg KHVzZXItZXJyb3IgIk5vIGFjdGl2ZSByZWdpb24gdG8gcmVwbGFjZSIpKQogIChpbnNlcnQKICAg KG9yZy1leHBvcnQtc3RyaW5nLWFzCiAgICAoZGVsZXRlLWFuZC1leHRyYWN0LXJlZ2lvbiAocmVn aW9uLWJlZ2lubmluZykgKHJlZ2lvbi1lbmQpKSBiYWNrZW5kIHQpKSkKCjs7OyMjI2F1dG9sb2Fk CihkZWZ1biBvcmctZXhwb3J0LWluc2VydC1kZWZhdWx0LXRlbXBsYXRlICgmb3B0aW9uYWwgYmFj a2VuZCBzdWJ0cmVlcCkKICAiSW5zZXJ0IGFsbCBleHBvcnQga2V5d29yZHMgd2l0aCBkZWZhdWx0 IHZhbHVlcyBhdCBiZWdpbm5pbmcgb2YgbGluZS4KCkJBQ0tFTkQgaXMgYSBzeW1ib2wgcmVmZXJy aW5nIHRvIHRoZSBuYW1lIG9mIGEgcmVnaXN0ZXJlZCBleHBvcnQKYmFjay1lbmQsIGZvciB3aGlj aCBzcGVjaWZpYyBleHBvcnQgb3B0aW9ucyBzaG91bGQgYmUgYWRkZWQgdG8KdGhlIHRlbXBsYXRl LCBvciBgZGVmYXVsdCcgZm9yIGRlZmF1bHQgdGVtcGxhdGUuICBXaGVuIGl0IGlzIG5pbCwKdGhl IHVzZXIgd2lsbCBiZSBwcm9tcHRlZCBmb3IgYSBjYXRlZ29yeS4KCklmIFNVQlRSRUVQIGlzIG5v bi1uaWwsIGV4cG9ydCBjb25maWd1cmF0aW9uIHdpbGwgYmUgc2V0IHVwCmxvY2FsbHkgZm9yIHRo ZSBzdWJ0cmVlIHRocm91Z2ggbm9kZSBwcm9wZXJ0aWVzLiIKICAoaW50ZXJhY3RpdmUpCiAgKHVu bGVzcyAoZGVyaXZlZC1tb2RlLXAgJ29yZy1tb2RlKSAodXNlci1lcnJvciAiTm90IGluIGFuIE9y ZyBtb2RlIGJ1ZmZlciIpKQogICh3aGVuIChhbmQgc3VidHJlZXAgKG9yZy1iZWZvcmUtZmlyc3Qt aGVhZGluZy1wKSkKICAgICh1c2VyLWVycm9yICJObyBzdWJ0cmVlIHRvIHNldCBleHBvcnQgb3B0 aW9ucyBmb3IiKSkKICAobGV0ICgobm9kZSAoYW5kIHN1YnRyZWVwIChzYXZlLWV4Y3Vyc2lvbiAo b3JnLWJhY2stdG8taGVhZGluZyB0KSAocG9pbnQpKSkpCgkoYmFja2VuZAoJIChvciBiYWNrZW5k CgkgICAgIChpbnRlcm4KCSAgICAgIChvcmctY29tcGxldGluZy1yZWFkCgkgICAgICAgIk9wdGlv bnMgY2F0ZWdvcnk6ICIKCSAgICAgICAoY29ucyAiZGVmYXVsdCIKCQkgICAgIChtYXBjYXIgKGxh bWJkYSAoYikKCQkJICAgICAgIChzeW1ib2wtbmFtZSAob3JnLWV4cG9ydC1iYWNrZW5kLW5hbWUg YikpKQoJCQkgICAgIG9yZy1leHBvcnQtcmVnaXN0ZXJlZC1iYWNrZW5kcykpCgkgICAgICAgbmls IHQpKSkpCglvcHRpb25zIGtleXdvcmRzKQogICAgOzsgUG9wdWxhdGUgT1BUSU9OUyBhbmQgS0VZ V09SRFMuCiAgICAoZG9saXN0IChlbnRyeSAoY29uZCAoKGVxIGJhY2tlbmQgJ2RlZmF1bHQpIG9y Zy1leHBvcnQtb3B0aW9ucy1hbGlzdCkKCQkJICgob3JnLWV4cG9ydC1iYWNrZW5kLXAgYmFja2Vu ZCkKCQkJICAob3JnLWV4cG9ydC1iYWNrZW5kLW9wdGlvbnMgYmFja2VuZCkpCgkJCSAodCAob3Jn LWV4cG9ydC1iYWNrZW5kLW9wdGlvbnMKCQkJICAgICAob3JnLWV4cG9ydC1nZXQtYmFja2VuZCBi YWNrZW5kKSkpKSkKICAgICAgKGxldCAoKGtleXdvcmQgKG50aCAxIGVudHJ5KSkKICAgICAgICAg ICAgKG9wdGlvbiAobnRoIDIgZW50cnkpKSkKICAgICAgICAoY29uZAogICAgICAgICAoa2V5d29y ZCAodW5sZXNzIChhc3NvYyBrZXl3b3JkIGtleXdvcmRzKQogICAgICAgICAgICAgICAgICAgIChs ZXQgKCh2YWx1ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgKGVxIChudGggNCBlbnRy eSkgJ3NwbGl0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNvbmNhdCAjJ2lk ZW50aXR5IChldmFsIChudGggMyBlbnRyeSkgdCkgIiAiKQogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChldmFsIChudGggMyBlbnRyeSkgdCkpKSkKICAgICAgICAgICAgICAgICAgICAgIChw dXNoIChjb25zIGtleXdvcmQgdmFsdWUpIGtleXdvcmRzKSkpKQogICAgICAgICAob3B0aW9uICh1 bmxlc3MgKGFzc29jIG9wdGlvbiBvcHRpb25zKQogICAgICAgICAgICAgICAgICAgKHB1c2ggKGNv bnMgb3B0aW9uIChldmFsIChudGggMyBlbnRyeSkgdCkpIG9wdGlvbnMpKSkpKSkKICAgIDs7IE1v dmUgdG8gYW4gYXBwcm9wcmlhdGUgbG9jYXRpb24gaW4gb3JkZXIgdG8gaW5zZXJ0IG9wdGlvbnMu CiAgICAodW5sZXNzIHN1YnRyZWVwIChiZWdpbm5pbmctb2YtbGluZSkpCiAgICA7OyBGaXJzdCAo bXVsdGlwbGUpIE9QVElPTlMgbGluZXMuICBOZXZlciBnbyBwYXN0IGZpbGwtY29sdW1uLgogICAg KHdoZW4gb3B0aW9ucwogICAgICAobGV0ICgoaXRlbXMKCSAgICAgKG1hcGNhcgogICAgICAgICAg ICAgIChsYW1iZGEgKG9wdCkgKGZvcm1hdCAiJXM6JVMiIChjYXIgb3B0KSAoY2RyIG9wdCkpKQoJ ICAgICAgKHNvcnQgb3B0aW9ucyAobGFtYmRhIChrMSBrMikgKHN0cmluZzwgKGNhciBrMSkgKGNh ciBrMikpKSkpKSkKCShpZiBzdWJ0cmVlcAoJICAgIChvcmctZW50cnktcHV0CgkgICAgIG5vZGUg IkVYUE9SVF9PUFRJT05TIiAobWFwY29uY2F0ICMnaWRlbnRpdHkgaXRlbXMgIiAiKSkKCSAgKHdo aWxlIGl0ZW1zCgkgICAgKGluc2VydCAiIytvcHRpb25zOiIpCgkgICAgKGxldCAoKHdpZHRoIDEw KSkKCSAgICAgICh3aGlsZSAoYW5kIGl0ZW1zCgkJCSAgKDwgKCsgd2lkdGggKGxlbmd0aCAoY2Fy IGl0ZW1zKSkgMSkgZmlsbC1jb2x1bW4pKQoJCShsZXQgKChpdGVtIChwb3AgaXRlbXMpKSkKCQkg IChpbnNlcnQgIiAiIGl0ZW0pCgkJICAoY2wtaW5jZiB3aWR0aCAoMSsgKGxlbmd0aCBpdGVtKSkp KSkpCgkgICAgKGluc2VydCAiXG4iKSkpKSkKICAgIDs7IFRoZW4gdGhlIHJlc3Qgb2Yga2V5d29y ZHMsIGluIHRoZSBvcmRlciBzcGVjaWZpZWQgaW4gZWl0aGVyCiAgICA7OyBgb3JnLWV4cG9ydC1v cHRpb25zLWFsaXN0JyBvciByZXNwZWN0aXZlIGV4cG9ydCBiYWNrLWVuZHMuCiAgICAoZG9saXN0 IChrZXkgKG5yZXZlcnNlIGtleXdvcmRzKSkKICAgICAgKGxldCAoKHZhbCAoY29uZCAoKGVxdWFs IChjYXIga2V5KSAiREFURSIpCgkJCShvciAoY2RyIGtleSkKCQkJICAgICh3aXRoLXRlbXAtYnVm ZmVyCgkJCSAgICAgIChvcmctaW5zZXJ0LXRpbWUtc3RhbXAgbmlsKSkpKQoJCSAgICAgICAoKGVx dWFsIChjYXIga2V5KSAiVElUTEUiKQoJCQkob3IgKGxldCAoKHZpc2l0ZWQtZmlsZQoJCQkJICAg KGJ1ZmZlci1maWxlLW5hbWUgKGJ1ZmZlci1iYXNlLWJ1ZmZlcikpKSkKCQkJICAgICAgKGFuZCB2 aXNpdGVkLWZpbGUKCQkJCSAgIChmaWxlLW5hbWUtc2Fucy1leHRlbnNpb24KCQkJCSAgICAoZmls ZS1uYW1lLW5vbmRpcmVjdG9yeSB2aXNpdGVkLWZpbGUpKSkpCgkJCSAgICAoYnVmZmVyLW5hbWUg KGJ1ZmZlci1iYXNlLWJ1ZmZlcikpKSkKCQkgICAgICAgKHQgKGNkciBrZXkpKSkpKQoJKGlmIHN1 YnRyZWVwIChvcmctZW50cnktcHV0IG5vZGUgKGNvbmNhdCAiRVhQT1JUXyIgKGNhciBrZXkpKSB2 YWwpCgkgIChpbnNlcnQKCSAgIChmb3JtYXQgIiMrJXM6JXNcbiIKCQkgICAoZG93bmNhc2UgKGNh ciBrZXkpKQoJCSAgIChpZiAob3JnLXN0cmluZy1udy1wIHZhbCkgKGZvcm1hdCAiICVzIiB2YWwp ICIiKSkpKSkpKSkKCihkZWZ1biBvcmctZXhwb3J0LWV4cGFuZC1pbmNsdWRlLWtleXdvcmQgKCZv cHRpb25hbCBpbmNsdWRlZCBkaXIgZm9vdG5vdGVzKQogICJFeHBhbmQgZXZlcnkgaW5jbHVkZSBr ZXl3b3JkIGluIGJ1ZmZlci4KT3B0aW9uYWwgYXJndW1lbnQgSU5DTFVERUQgaXMgYSBsaXN0IG9m IGluY2x1ZGVkIGZpbGUgbmFtZXMgYWxvbmcKd2l0aCB0aGVpciBsaW5lIHJlc3RyaWN0aW9uLCB3 aGVuIGFwcHJvcHJpYXRlLiAgSXQgaXMgdXNlZCB0bwphdm9pZCBpbmZpbml0ZSByZWN1cnNpb24u ICBPcHRpb25hbCBhcmd1bWVudCBESVIgaXMgdGhlIGN1cnJlbnQKd29ya2luZyBkaXJlY3Rvcnku ICBJdCBpcyB1c2VkIHRvIHByb3Blcmx5IHJlc29sdmUgcmVsYXRpdmUKcGF0aHMuICBPcHRpb25h bCBhcmd1bWVudCBGT09UTk9URVMgaXMgYSBoYXNoLXRhYmxlIHVzZWQgZm9yCnN0b3JpbmcgYW5k IHJlc29sdmluZyBmb290bm90ZXMuICBJdCBpcyBjcmVhdGVkIGF1dG9tYXRpY2FsbHkuIgogIChs ZXQgKChpbmNsdWRlci1maWxlIChidWZmZXItZmlsZS1uYW1lIChidWZmZXItYmFzZS1idWZmZXIp KSkKCShjYXNlLWZvbGQtc2VhcmNoIHQpCgkoZmlsZS1wcmVmaXggKG1ha2UtaGFzaC10YWJsZSA6 dGVzdCAjJ2VxdWFsKSkKCShjdXJyZW50LXByZWZpeCAwKQoJKGZvb3Rub3RlcyAob3IgZm9vdG5v dGVzIChtYWtlLWhhc2gtdGFibGUgOnRlc3QgIydlcXVhbCkpKQoJKGluY2x1ZGUtcmUgIl5bIFx0 XSojXFwrSU5DTFVERToiKSkKICAgIDs7IElmIDptaW5sZXZlbCBpcyBub3Qgc2V0IHRoZSB0ZXh0 LXByb3BlcnR5CiAgICA7OyBgOm9yZy1pbmNsdWRlLWluZHVjZWQtbGV2ZWwnIHdpbGwgYmUgdXNl ZCB0byBkZXRlcm1pbmUgdGhlCiAgICA7OyByZWxhdGl2ZSBsZXZlbCB3aGVuIGV4cGFuZGluZyBJ TkNMVURFLgogICAgOzsgT25seSBhZmZlY3RzIGluY2x1ZGVkIE9yZyBkb2N1bWVudHMuCiAgICAo Z290by1jaGFyIChwb2ludC1taW4pKQogICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZCBpbmNs dWRlLXJlIG5pbCB0KQogICAgICAocHV0LXRleHQtcHJvcGVydHkgKGxpbmUtYmVnaW5uaW5nLXBv c2l0aW9uKSAobGluZS1lbmQtcG9zaXRpb24pCgkJCSA6b3JnLWluY2x1ZGUtaW5kdWNlZC1sZXZl bAoJCQkgKDErIChvcmctcmVkdWNlZC1sZXZlbCAob3IgKG9yZy1jdXJyZW50LWxldmVsKSAwKSkp KSkKICAgIDs7IEV4cGFuZCBJTkNMVURFIGtleXdvcmRzLgogICAgKGdvdG8tY2hhciAocG9pbnQt bWluKSkKICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgaW5jbHVkZS1yZSBuaWwgdCkKICAg ICAgKHVubGVzcyAob3JnLWluLWNvbW1lbnRlZC1oZWFkaW5nLXApCgkobGV0ICgoZWxlbWVudCAo c2F2ZS1tYXRjaC1kYXRhIChvcmctZWxlbWVudC1hdC1wb2ludCkpKSkKCSAgKHdoZW4gKGVxIChv cmctZWxlbWVudC10eXBlIGVsZW1lbnQpICdrZXl3b3JkKQoJICAgIChiZWdpbm5pbmctb2YtbGlu ZSkKCSAgICA7OyBFeHRyYWN0IGFyZ3VtZW50cyBmcm9tIGtleXdvcmQncyB2YWx1ZS4KCSAgICAo bGV0KiAoKHZhbHVlIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dmFsdWUgZWxlbWVudCkpCgkJICAg KGluZCAoY3VycmVudC1pbmRlbnRhdGlvbikpCgkJICAgbG9jYXRpb24KCQkgICAoY29kaW5nLXN5 c3RlbS1mb3ItcmVhZAoJCSAgICAob3IgKGFuZCAoc3RyaW5nLW1hdGNoICI6Y29kaW5nICtcXChc XFMtK1xcKT4iIHZhbHVlKQoJCQkgICAgIChwcm9nMSAoaW50ZXJuIChtYXRjaC1zdHJpbmcgMSB2 YWx1ZSkpCgkJCSAgICAgICAoc2V0cSB2YWx1ZSAocmVwbGFjZS1tYXRjaCAiIiBuaWwgbmlsIHZh bHVlKSkpKQoJCQljb2Rpbmctc3lzdGVtLWZvci1yZWFkKSkKCQkgICAoZmlsZQoJCSAgICAoYW5k IChzdHJpbmctbWF0Y2ggIl5cXChcIi4rP1wiXFx8XFxTLStcXClcXCg/Olxccy0rXFx8JFxcKSIK CQkJCSAgICAgICB2YWx1ZSkKCQkJIChwcm9nMQoJCQkgICAgIChzYXZlLW1hdGNoLWRhdGEKCQkJ ICAgICAgIChsZXQgKChtYXRjaGVkIChtYXRjaC1zdHJpbmcgMSB2YWx1ZSkpKQoJCQkJICh3aGVu IChzdHJpbmctbWF0Y2ggIlxcKDo6XFwoLio/XFwpXFwpXCI/XFwnIgoJCQkJCQkgICAgIG1hdGNo ZWQpCgkJCQkgICAoc2V0cSBsb2NhdGlvbiAobWF0Y2gtc3RyaW5nIDIgbWF0Y2hlZCkpCgkJCQkg ICAoc2V0cSBtYXRjaGVkCgkJCQkJIChyZXBsYWNlLW1hdGNoICIiIG5pbCBuaWwgbWF0Y2hlZCAx KSkpCgkJCQkgKGV4cGFuZC1maWxlLW5hbWUgKG9yZy1zdHJpcC1xdW90ZXMgbWF0Y2hlZCkKCQkJ CQkJICAgZGlyKSkpCgkJCSAgIChzZXRxIHZhbHVlIChyZXBsYWNlLW1hdGNoICIiIG5pbCBuaWwg dmFsdWUpKSkpKQoJCSAgIChvbmx5LWNvbnRlbnRzCgkJICAgIChhbmQgKHN0cmluZy1tYXRjaCAi Om9ubHktY29udGVudHMgKlxcKFteOiBcclx0XG5dXFxTLSpcXCk/IgoJCQkJICAgICAgIHZhbHVl KQoJCQkgKHByb2cxIChvcmctbm90LW5pbCAobWF0Y2gtc3RyaW5nIDEgdmFsdWUpKQoJCQkgICAo c2V0cSB2YWx1ZSAocmVwbGFjZS1tYXRjaCAiIiBuaWwgbmlsIHZhbHVlKSkpKSkKCQkgICAobGlu ZXMKCQkgICAgKGFuZCAoc3RyaW5nLW1hdGNoCgkJCSAgIjpsaW5lcyArXCJcXChbMC05XSotWzAt OV0qXFwpXCIiCgkJCSAgdmFsdWUpCgkJCSAocHJvZzEgKG1hdGNoLXN0cmluZyAxIHZhbHVlKQoJ CQkgICAoc2V0cSB2YWx1ZSAocmVwbGFjZS1tYXRjaCAiIiBuaWwgbmlsIHZhbHVlKSkpKSkKCQkg ICAoZW52IChjb25kCgkJCSAoKHN0cmluZy1tYXRjaCAiXFw8ZXhhbXBsZVxcPiIgdmFsdWUpICds aXRlcmFsKQoJCQkgKChzdHJpbmctbWF0Y2ggIlxcPGV4cG9ydFxcKD86ICtcXCguKlxcKVxcKT8i IHZhbHVlKQoJCQkgICdsaXRlcmFsKQoJCQkgKChzdHJpbmctbWF0Y2ggIlxcPHNyY1xcKD86ICtc XCguKlxcKVxcKT8iIHZhbHVlKQoJCQkgICdsaXRlcmFsKSkpCgkJICAgOzsgTWluaW1hbCBsZXZl bCBvZiBpbmNsdWRlZCBmaWxlIGRlZmF1bHRzIHRvIHRoZQoJCSAgIDs7IGNoaWxkIGxldmVsIG9m IHRoZSBjdXJyZW50IGhlYWRsaW5lLCBpZiBhbnksIG9yCgkJICAgOzsgb25lLiAgSXQgb25seSBh cHBsaWVzIGlzIHRoZSBmaWxlIGlzIG1lYW50IHRvIGJlCgkJICAgOzsgaW5jbHVkZWQgYXMgYW4g T3JnIG9uZS4KCQkgICAobWlubGV2ZWwKCQkgICAgKGFuZCAobm90IGVudikKCQkJIChpZiAoc3Ry aW5nLW1hdGNoICI6bWlubGV2ZWwgK1xcKFswLTldK1xcKSIgdmFsdWUpCgkJCSAgICAgKHByb2cx IChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMSB2YWx1ZSkpCgkJCSAgICAgICAoc2V0 cSB2YWx1ZSAocmVwbGFjZS1tYXRjaCAiIiBuaWwgbmlsIHZhbHVlKSkpCgkJCSAgIChnZXQtdGV4 dC1wcm9wZXJ0eSAocG9pbnQpCgkJCQkJICAgICAgOm9yZy1pbmNsdWRlLWluZHVjZWQtbGV2ZWwp KSkpCgkJICAgKGFyZ3MgKGFuZCAoZXEgZW52ICdsaXRlcmFsKSAobWF0Y2gtc3RyaW5nIDEgdmFs dWUpKSkKCQkgICAoYmxvY2sgKGFuZCAoc3RyaW5nLW1hdGNoICJcXDxcXChcXFMtK1xcKVxcPiIg dmFsdWUpCgkJCSAgICAgICAobWF0Y2gtc3RyaW5nIDEgdmFsdWUpKSkpCgkgICAgICA7OyBSZW1v dmUga2V5d29yZC4KCSAgICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKGxpbmUtYmVnaW5uaW5n LXBvc2l0aW9uIDIpKQoJICAgICAgKGNvbmQKCSAgICAgICAoKG5vdCBmaWxlKSBuaWwpCgkgICAg ICAgKChub3QgKGZpbGUtcmVhZGFibGUtcCBmaWxlKSkKCQkoZXJyb3IgIkNhbm5vdCBpbmNsdWRl IGZpbGUgJXMiIGZpbGUpKQoJICAgICAgIDs7IENoZWNrIGlmIGZpbGVzIGhhcyBhbHJlYWR5IGJl ZW4gcGFyc2VkLiAgTG9vayBhZnRlcgoJICAgICAgIDs7IGluY2x1c2lvbiBsaW5lcyB0b28sIGFz IGRpZmZlcmVudCBwYXJ0cyBvZiB0aGUgc2FtZQoJICAgICAgIDs7IGZpbGUgY2FuIGJlIGluY2x1 ZGVkIHRvby4KCSAgICAgICAoKG1lbWJlciAobGlzdCBmaWxlIGxpbmVzKSBpbmNsdWRlZCkKCQko ZXJyb3IgIlJlY3Vyc2l2ZSBmaWxlIGluY2x1c2lvbjogJXMiIGZpbGUpKQoJICAgICAgICh0CgkJ KGNvbmQKCQkgKChlcSBlbnYgJ2xpdGVyYWwpCgkJICAoaW5zZXJ0CgkJICAgKGxldCAoKGluZC1z dHIgKG1ha2Utc3RyaW5nIGluZCA/XHMpKQoJCQkgKGFyZy1zdHIgKGlmIChzdHJpbmdwIGFyZ3Mp IChmb3JtYXQgIiAlcyIgYXJncykgIiIpKQoJCQkgKGNvbnRlbnRzCgkJCSAgKG9yZy1lc2NhcGUt Y29kZS1pbi1zdHJpbmcKCQkJICAgKG9yZy1leHBvcnQtLXByZXBhcmUtZmlsZS1jb250ZW50cyBm aWxlIGxpbmVzKSkpKQoJCSAgICAgKGZvcm1hdCAiJXMjK0JFR0lOXyVzJXNcbiVzJXMjK0VORF8l c1xuIgoJCQkgICAgIGluZC1zdHIgYmxvY2sgYXJnLXN0ciBjb250ZW50cyBpbmQtc3RyIGJsb2Nr KSkpKQoJCSAoKHN0cmluZ3AgYmxvY2spCgkJICAoaW5zZXJ0CgkJICAgKGxldCAoKGluZC1zdHIg KG1ha2Utc3RyaW5nIGluZCA/XHMpKQoJCQkgKGNvbnRlbnRzCgkJCSAgKG9yZy1leHBvcnQtLXBy ZXBhcmUtZmlsZS1jb250ZW50cyBmaWxlIGxpbmVzKSkpCgkJICAgICAoZm9ybWF0ICIlcyMrQkVH SU5fJXNcbiVzJXMjK0VORF8lc1xuIgoJCQkgICAgIGluZC1zdHIgYmxvY2sgY29udGVudHMgaW5k LXN0ciBibG9jaykpKSkKCQkgKHQKCQkgIChpbnNlcnQKCQkgICAod2l0aC10ZW1wLWJ1ZmZlcgoJ CSAgICAgKGxldCAoKG9yZy1pbmhpYml0LXN0YXJ0dXAgdCkKCQkJICAgKGxpbmVzCgkJCSAgICAo aWYgbG9jYXRpb24KCQkJCShvcmctZXhwb3J0LS1pbmNsdXNpb24tYWJzb2x1dGUtbGluZXMKCQkJ CSBmaWxlIGxvY2F0aW9uIG9ubHktY29udGVudHMgbGluZXMpCgkJCSAgICAgIGxpbmVzKSkpCgkJ ICAgICAgIChvcmctbW9kZSkKCQkgICAgICAgKGluc2VydAoJCQkob3JnLWV4cG9ydC0tcHJlcGFy ZS1maWxlLWNvbnRlbnRzCgkJCSBmaWxlIGxpbmVzIGluZCBtaW5sZXZlbAoJCQkgKG9yIChnZXRo YXNoIGZpbGUgZmlsZS1wcmVmaXgpCgkJCSAgICAgKHB1dGhhc2ggZmlsZQoJCQkJICAgICAgKGNs LWluY2YgY3VycmVudC1wcmVmaXgpCgkJCQkgICAgICBmaWxlLXByZWZpeCkpCgkJCSBmb290bm90 ZXMKCQkJIGluY2x1ZGVyLWZpbGUpKSkKCQkgICAgIChvcmctZXhwb3J0LWV4cGFuZC1pbmNsdWRl LWtleXdvcmQKCQkgICAgICAoY29ucyAobGlzdCBmaWxlIGxpbmVzKSBpbmNsdWRlZCkKCQkgICAg ICAoZmlsZS1uYW1lLWRpcmVjdG9yeSBmaWxlKQoJCSAgICAgIGZvb3Rub3RlcykKCQkgICAgIChi dWZmZXItc3RyaW5nKSkpKSkKCQk7OyBFeHBhbmQgZm9vdG5vdGVzIGFmdGVyIGFsbCBmaWxlcyBo YXZlIGJlZW4KCQk7OyBpbmNsdWRlZC4gIEZvb3Rub3RlcyBhcmUgc3RvcmVkIGF0IGVuZCBvZiBi dWZmZXIuCgkJKHVubGVzcyBpbmNsdWRlZAoJCSAgKG9yZy13aXRoLXdpZGUtYnVmZmVyCgkJICAg KGdvdG8tY2hhciAocG9pbnQtbWF4KSkKCQkgICAobWFwaGFzaCAobGFtYmRhIChrIHYpCgkJCSAg ICAgIChpbnNlcnQgKGZvcm1hdCAiXG5bZm46JXNdICVzXG4iIGsgdikpKQoJCQkgICAgZm9vdG5v dGVzKSkpKSkpKSkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC0taW5jbHVzaW9uLWFic29sdXRlLWxp bmVzIChmaWxlIGxvY2F0aW9uIG9ubHktY29udGVudHMgbGluZXMpCiAgIlJlc29sdmUgYWJzb2x1 dGUgbGluZXMgZm9yIGFuIGluY2x1ZGVkIGZpbGUgd2l0aCBmaWxlLWxpbmsuCgpGSUxFIGlzIHN0 cmluZyBmaWxlLW5hbWUgb2YgdGhlIGZpbGUgdG8gaW5jbHVkZS4gIExPQ0FUSU9OIGlzIGEKc3Ry aW5nIG5hbWUgd2l0aGluIEZJTEUgdG8gYmUgaW5jbHVkZWQgKGxvY2F0ZWQgdmlhCmBvcmctbGlu ay1zZWFyY2gnKS4gIElmIE9OTFktQ09OVEVOVFMgaXMgbm9uLW5pbCBvbmx5IHRoZQpjb250ZW50 cyBvZiB0aGUgbmFtZWQgZWxlbWVudCB3aWxsIGJlIGluY2x1ZGVkLCBhcyBkZXRlcm1pbmVkCk9y Zy1FbGVtZW50LiAgSWYgTElORVMgaXMgbm9uLW5pbCBvbmx5IHRob3NlIGxpbmVzIGFyZSBpbmNs dWRlZC4KClJldHVybiBhIHN0cmluZyBvZiBsaW5lcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgZm9y bWF0IGV4cGVjdGVkIGJ5CmBvcmctZXhwb3J0LS1wcmVwYXJlLWZpbGUtY29udGVudHMnLiIKICAo d2l0aC10ZW1wLWJ1ZmZlcgogICAgKGluc2VydC1maWxlLWNvbnRlbnRzIGZpbGUpCiAgICAodW5s ZXNzIChlcSBtYWpvci1tb2RlICdvcmctbW9kZSkKICAgICAgKGxldCAoKG9yZy1pbmhpYml0LXN0 YXJ0dXAgdCkpIChvcmctbW9kZSkpKQogICAgKGNvbmRpdGlvbi1jYXNlIGVycgoJOzsgRW5mb3Jj ZSBjb25zaXN0ZW50IHNlYXJjaC4KCShsZXQgKChvcmctbGluay1zZWFyY2gtbXVzdC1tYXRjaC1l eGFjdC1oZWFkbGluZSBuaWwpKQoJICAob3JnLWxpbmstc2VhcmNoIGxvY2F0aW9uKSkKICAgICAg KGVycm9yCiAgICAgICAoZXJyb3IgIiVzIGZvciAlczo6JXMiIChlcnJvci1tZXNzYWdlLXN0cmlu ZyBlcnIpIGZpbGUgbG9jYXRpb24pKSkKICAgIChsZXQqICgoZWxlbWVudCAob3JnLWVsZW1lbnQt YXQtcG9pbnQpKQoJICAgKGNvbnRlbnRzLWJlZ2luCgkgICAgKGFuZCBvbmx5LWNvbnRlbnRzIChv cmctZWxlbWVudC1wcm9wZXJ0eSA6Y29udGVudHMtYmVnaW4gZWxlbWVudCkpKSkKICAgICAgKG5h cnJvdy10by1yZWdpb24KICAgICAgIChvciBjb250ZW50cy1iZWdpbiAob3JnLWVsZW1lbnQtcHJv cGVydHkgOmJlZ2luIGVsZW1lbnQpKQogICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IChpZiBj b250ZW50cy1iZWdpbiA6Y29udGVudHMtZW5kIDplbmQpIGVsZW1lbnQpKQogICAgICAod2hlbiAo YW5kIG9ubHktY29udGVudHMKCQkgKG1lbXEgKG9yZy1lbGVtZW50LXR5cGUgZWxlbWVudCkgJyho ZWFkbGluZSBpbmxpbmV0YXNrKSkpCgk7OyBTa2lwIHBsYW5uaW5nIGxpbmUgYW5kIHByb3BlcnR5 LWRyYXdlci4KCShnb3RvLWNoYXIgKHBvaW50LW1pbikpCgkod2hlbiAobG9va2luZy1hdC1wIG9y Zy1wbGFubmluZy1saW5lLXJlKSAoZm9yd2FyZC1saW5lKSkKCSh3aGVuIChsb29raW5nLWF0IG9y Zy1wcm9wZXJ0eS1kcmF3ZXItcmUpIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAwKSkpCgkodW5sZXNz IChib2xwKSAoZm9yd2FyZC1saW5lKSkKCShuYXJyb3ctdG8tcmVnaW9uIChwb2ludCkgKHBvaW50 LW1heCkpKSkKICAgICh3aGVuIGxpbmVzCiAgICAgIChvcmctc2tpcC13aGl0ZXNwYWNlKQogICAg ICAoYmVnaW5uaW5nLW9mLWxpbmUpCiAgICAgIChsZXQqICgobGluZXMgKHNwbGl0LXN0cmluZyBs aW5lcyAiLSIpKQoJICAgICAobGJlZyAoc3RyaW5nLXRvLW51bWJlciAoY2FyIGxpbmVzKSkpCgkg ICAgIChsZW5kIChzdHJpbmctdG8tbnVtYmVyIChjYWRyIGxpbmVzKSkpCgkgICAgIChiZWcgKGlm ICh6ZXJvcCBsYmVnKSAocG9pbnQtbWluKQoJCSAgICAoZ290by1jaGFyIChwb2ludC1taW4pKQoJ CSAgICAoZm9yd2FyZC1saW5lICgxLSBsYmVnKSkKCQkgICAgKHBvaW50KSkpCgkgICAgIChlbmQg KGlmICh6ZXJvcCBsZW5kKSAocG9pbnQtbWF4KQoJCSAgICAoZ290by1jaGFyIGJlZykKCQkgICAg KGZvcndhcmQtbGluZSAoMS0gbGVuZCkpCgkJICAgIChwb2ludCkpKSkKCShuYXJyb3ctdG8tcmVn aW9uIGJlZyBlbmQpKSkKICAgIChsZXQgKChlbmQgKHBvaW50LW1heCkpKQogICAgICAoZ290by1j aGFyIChwb2ludC1taW4pKQogICAgICAod2lkZW4pCiAgICAgIChsZXQgKChzdGFydC1saW5lIChs aW5lLW51bWJlci1hdC1wb3MpKSkKCShmb3JtYXQgIiVkLSVkIgoJCXN0YXJ0LWxpbmUKCQkoc2F2 ZS1leGN1cnNpb24KCQkgICgrIHN0YXJ0LWxpbmUKCQkgICAgIChsZXQgKChjb3VudGVyIDApKQoJ CSAgICAgICAod2hpbGUgKDwgKHBvaW50KSBlbmQpIChjbC1pbmNmIGNvdW50ZXIpIChmb3J3YXJk LWxpbmUpKQoJCSAgICAgICBjb3VudGVyKSkpKSkpKSkKCihkZWZ1biBvcmctZXhwb3J0LS11cGRh dGUtaW5jbHVkZWQtbGluayAoZmlsZS1kaXIgaW5jbHVkZXItZGlyKQogICJVcGRhdGUgcmVsYXRp dmUgZmlsZSBuYW1lIG9mIGxpbmsgYXQgcG9pbnQsIGlmIHBvc3NpYmxlLgoKRklMRS1ESVIgaXMg dGhlIGRpcmVjdG9yeSBvZiB0aGUgZmlsZSBiZWluZyBpbmNsdWRlZC4KSU5DTFVERVItRElSIGlz IHRoZSBkaXJlY3Rvcnkgb2YgdGhlIGZpbGUgd2hlcmUgdGhlIGluY2x1c2lvbiBpcwpnb2luZyB0 byBoYXBwZW4uCgpNb3ZlIHBvaW50IGFmdGVyIHRoZSBsaW5rLiIKICAobGV0KiAoKGxpbmsgKG9y Zy1lbGVtZW50LWxpbmstcGFyc2VyKSkKCSAocGF0aCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnBh dGggbGluaykpKQogICAgKGlmIChvciAobm90IChzdHJpbmc9ICJmaWxlIiAob3JnLWVsZW1lbnQt cHJvcGVydHkgOnR5cGUgbGluaykpKQoJICAgIChmaWxlLXJlbW90ZS1wIHBhdGgpCgkgICAgKGZp bGUtbmFtZS1hYnNvbHV0ZS1wIHBhdGgpKQoJKGdvdG8tY2hhciAob3JnLWVsZW1lbnQtcHJvcGVy dHkgOmVuZCBsaW5rKSkKICAgICAgKGxldCAoKG5ldy1wYXRoIChmaWxlLXJlbGF0aXZlLW5hbWUg KGV4cGFuZC1maWxlLW5hbWUgcGF0aCBmaWxlLWRpcikKCQkJCQkgIGluY2x1ZGVyLWRpcikpCgkg ICAgKG5ldy1saW5rIChvcmctZWxlbWVudC1jb3B5IGxpbmspKSkKCShvcmctZWxlbWVudC1wdXQt cHJvcGVydHkgbmV3LWxpbmsgOnBhdGggbmV3LXBhdGgpCgkod2hlbiAob3JnLWVsZW1lbnQtcHJv cGVydHkgOmNvbnRlbnRzLWJlZ2luIGxpbmspCgkgIChvcmctZWxlbWVudC1hZG9wdC1lbGVtZW50 cyBuZXctbGluawoJICAgIChidWZmZXItc3Vic3RyaW5nCgkgICAgIChvcmctZWxlbWVudC1wcm9w ZXJ0eSA6Y29udGVudHMtYmVnaW4gbGluaykKCSAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpj b250ZW50cy1lbmQgbGluaykpKSkKCShkZWxldGUtcmVnaW9uIChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6YmVnaW4gbGluaykKCQkgICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDplbmQgbGluaykp CgkoaW5zZXJ0IChvcmctZWxlbWVudC1pbnRlcnByZXQtZGF0YSBuZXctbGluaykpKSkpKQoKKGRl ZnVuIG9yZy1leHBvcnQtLXByZXBhcmUtZmlsZS1jb250ZW50cwogICAgKGZpbGUgJm9wdGlvbmFs IGxpbmVzIGluZCBtaW5sZXZlbCBpZCBmb290bm90ZXMgaW5jbHVkZXIpCiAgIlByZXBhcmUgY29u dGVudHMgb2YgRklMRSBmb3IgaW5jbHVzaW9uIGFuZCByZXR1cm4gaXQgYXMgYSBzdHJpbmcuCgpX aGVuIG9wdGlvbmFsIGFyZ3VtZW50IExJTkVTIGlzIGEgc3RyaW5nIHNwZWNpZnlpbmcgYSByYW5n ZSBvZgpsaW5lcywgaW5jbHVkZSBvbmx5IHRob3NlIGxpbmVzLgoKT3B0aW9uYWwgYXJndW1lbnQg SU5ELCB3aGVuIG5vbi1uaWwsIGlzIGFuIGludGVnZXIgc3BlY2lmeWluZyB0aGUKZ2xvYmFsIGlu ZGVudGF0aW9uIG9mIHJldHVybmVkIGNvbnRlbnRzLiAgU2luY2UgaXRzIHB1cnBvc2UgaXMgdG8K YWxsb3cgYW4gaW5jbHVkZWQgZmlsZSB0byBzdGF5IGluIHRoZSBzYW1lIGVudmlyb25tZW50IGl0 IHdhcwpjcmVhdGVkIChlLmcuLCBhIGxpc3QgaXRlbSksIGl0IGRvZXNuJ3QgYXBwbHkgcGFzdCB0 aGUgZmlyc3QKaGVhZGxpbmUgZW5jb3VudGVyZWQuCgpPcHRpb25hbCBhcmd1bWVudCBNSU5MRVZF TCwgd2hlbiBub24tbmlsLCBpcyBhbiBpbnRlZ2VyCnNwZWNpZnlpbmcgdGhlIGxldmVsIHRoYXQg YW55IHRvcC1sZXZlbCBoZWFkbGluZSBpbiB0aGUgaW5jbHVkZWQKZmlsZSBzaG91bGQgaGF2ZS4K Ck9wdGlvbmFsIGFyZ3VtZW50IElEIGlzIGFuIGludGVnZXIgdGhhdCB3aWxsIGJlIGluc2VydGVk IGJlZm9yZQplYWNoIGZvb3Rub3RlIGRlZmluaXRpb24gYW5kIHJlZmVyZW5jZSBpZiBGSUxFIGlz IGFuIE9yZyBmaWxlLgpUaGlzIGlzIHVzZWZ1bCB0byBhdm9pZCBjb25mbGljdHMgd2hlbiBtb3Jl IHRoYW4gb25lIE9yZyBmaWxlCndpdGggZm9vdG5vdGVzIGlzIGluY2x1ZGVkIGluIGEgZG9jdW1l bnQuCgpPcHRpb25hbCBhcmd1bWVudCBGT09UTk9URVMgaXMgYSBoYXNoLXRhYmxlIHRvIHN0b3Jl IGZvb3Rub3RlcyBpbgp0aGUgaW5jbHVkZWQgZG9jdW1lbnQuCgpPcHRpb25hbCBhcmd1bWVudCBJ TkNMVURFUiBpcyB0aGUgZmlsZSBuYW1lIHdoZXJlIHRoZSBpbmNsdXNpb24KaXMgdG8gaGFwcGVu LiIKICAod2l0aC10ZW1wLWJ1ZmZlcgogICAgKGluc2VydC1maWxlLWNvbnRlbnRzIGZpbGUpCiAg ICAod2hlbiBsaW5lcwogICAgICAobGV0KiAoKGxpbmVzIChzcGxpdC1zdHJpbmcgbGluZXMgIi0i KSkKCSAgICAgKGxiZWcgKHN0cmluZy10by1udW1iZXIgKGNhciBsaW5lcykpKQoJICAgICAobGVu ZCAoc3RyaW5nLXRvLW51bWJlciAoY2FkciBsaW5lcykpKQoJICAgICAoYmVnIChpZiAoemVyb3Ag bGJlZykgKHBvaW50LW1pbikKCQkgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKCQkgICAgKGZv cndhcmQtbGluZSAoMS0gbGJlZykpCgkJICAgIChwb2ludCkpKQoJICAgICAoZW5kIChpZiAoemVy b3AgbGVuZCkgKHBvaW50LW1heCkKCQkgICAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKCQkgICAg KGZvcndhcmQtbGluZSAoMS0gbGVuZCkpCgkJICAgIChwb2ludCkpKSkKCShuYXJyb3ctdG8tcmVn aW9uIGJlZyBlbmQpKSkKICAgIDs7IEFkYXB0IGFsbCBmaWxlIGxpbmtzIHdpdGhpbiB0aGUgaW5j bHVkZWQgZG9jdW1lbnQgdGhhdCBjb250YWluCiAgICA7OyByZWxhdGl2ZSBwYXRocyBpbiBvcmRl ciB0byBtYWtlIHRoZXNlIHBhdGhzIHJlbGF0aXZlIHRvIHRoZQogICAgOzsgYmFzZSBkb2N1bWVu dCwgb3IgYWJzb2x1dGUuCiAgICAod2hlbiBpbmNsdWRlcgogICAgICAobGV0ICgoZmlsZS1kaXIg KGZpbGUtbmFtZS1kaXJlY3RvcnkgZmlsZSkpCgkgICAgKGluY2x1ZGVyLWRpciAoZmlsZS1uYW1l LWRpcmVjdG9yeSBpbmNsdWRlcikpKQoJKHVubGVzcyAoZmlsZS1lcXVhbC1wIGZpbGUtZGlyIGlu Y2x1ZGVyLWRpcikKCSAgKGdvdG8tY2hhciAocG9pbnQtbWluKSkKCSAgKHVubGVzcyAoZXEgbWFq b3ItbW9kZSAnb3JnLW1vZGUpCgkgICAgKGxldCAoKG9yZy1pbmhpYml0LXN0YXJ0dXAgdCkpIChv cmctbW9kZSkpKQk7c2V0IHJlZ2V4cHMKCSAgKGxldCAoKHJlZ2V4cCAoY29uY2F0IG9yZy1saW5r LXBsYWluLXJlICJcXHwiIG9yZy1saW5rLWFuZ2xlLXJlKSkpCgkgICAgKHdoaWxlIChyZS1zZWFy Y2gtZm9yd2FyZCBvcmctbGluay1hbnktcmUgbmlsIHQpCgkgICAgICAobGV0ICgobGluayAoc2F2 ZS1leGN1cnNpb24KCQkJICAgIChmb3J3YXJkLWNoYXIgLTEpCgkJCSAgICAoc2F2ZS1tYXRjaC1k YXRhIChvcmctZWxlbWVudC1jb250ZXh0KSkpKSkKCQkod2hlbiAoZXEgJ2xpbmsgKG9yZy1lbGVt ZW50LXR5cGUgbGluaykpCgkJICA7OyBMb29rIGZvciBmaWxlIGxpbmtzIHdpdGhpbiBsaW5rJ3Mg ZGVzY3JpcHRpb24uCgkJICA7OyBPcmcgZG9lc24ndCBzdXBwb3J0IHN1Y2ggY29uc3RydWN0LCBi dXQKCQkgIDs7IGBvcmctZXhwb3J0LWluc2VydC1pbWFnZS1saW5rcycgbWF5IGFjdGl2YXRlCgkJ ICA7OyB0aGVtLgoJCSAgKGxldCAoKGNvbnRlbnRzLWJlZ2luCgkJCSAob3JnLWVsZW1lbnQtcHJv cGVydHkgOmNvbnRlbnRzLWJlZ2luIGxpbmspKQoJCQkoYmVnaW4gKG9yZy1lbGVtZW50LXByb3Bl cnR5IDpiZWdpbiBsaW5rKSkpCgkJICAgICh3aGVuIGNvbnRlbnRzLWJlZ2luCgkJICAgICAgKHNh dmUtZXhjdXJzaW9uCgkJCShnb3RvLWNoYXIgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpjb250ZW50 cy1lbmQgbGluaykpCgkJCSh3aGlsZSAocmUtc2VhcmNoLWJhY2t3YXJkIHJlZ2V4cCBjb250ZW50 cy1iZWdpbiB0KQoJCQkgIChzYXZlLW1hdGNoLWRhdGEKCQkJICAgIChvcmctZXhwb3J0LS11cGRh dGUtaW5jbHVkZWQtbGluawoJCQkgICAgIGZpbGUtZGlyIGluY2x1ZGVyLWRpcikpCgkJCSAgKGdv dG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDApKSkpKQoJCSAgICA7OyBVcGRhdGUgY3VycmVudCBs aW5rLCBpZiBuZWNlc3NhcnkuCgkJICAgICh3aGVuIChzdHJpbmc9ICJmaWxlIiAob3JnLWVsZW1l bnQtcHJvcGVydHkgOnR5cGUgbGluaykpCgkJICAgICAgKGdvdG8tY2hhciBiZWdpbikKCQkgICAg ICAob3JnLWV4cG9ydC0tdXBkYXRlLWluY2x1ZGVkLWxpbmsKCQkgICAgICAgZmlsZS1kaXIgaW5j bHVkZXItZGlyKSkpKSkpKSkpKQogICAgOzsgUmVtb3ZlIGJsYW5rIGxpbmVzIGF0IGJlZ2lubmlu ZyBhbmQgZW5kIG9mIGNvbnRlbnRzLiAgVGhlIGxvZ2ljCiAgICA7OyBiZWhpbmQgdGhhdCByZW1v dmFsIGlzIHRoYXQgYmxhbmsgbGluZXMgYXJvdW5kIGluY2x1ZGUga2V5d29yZAogICAgOzsgb3Zl cnJpZGUgYmxhbmsgbGluZXMgaW4gaW5jbHVkZWQgZmlsZS4KICAgIChnb3RvLWNoYXIgKHBvaW50 LW1pbikpCiAgICAob3JnLXNraXAtd2hpdGVzcGFjZSkKICAgIChiZWdpbm5pbmctb2YtbGluZSkK ICAgIChkZWxldGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludCkpCiAgICAoZ290by1jaGFyIChw b2ludC1tYXgpKQogICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcclx0XG4iKQogICAgKGZvcndh cmQtbGluZSkKICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKHBvaW50LW1heCkpCiAgICA7OyBJ ZiBJTkQgaXMgc2V0LCBwcmVzZXJ2ZSBpbmRlbnRhdGlvbiBvZiBpbmNsdWRlIGtleXdvcmQgdW50 aWwKICAgIDs7IHRoZSBmaXJzdCBoZWFkbGluZSBlbmNvdW50ZXJlZC4KICAgICh3aGVuIChhbmQg aW5kICg+IGluZCAwKSkKICAgICAgKHVubGVzcyAoZXEgbWFqb3ItbW9kZSAnb3JnLW1vZGUpCgko bGV0ICgob3JnLWluaGliaXQtc3RhcnR1cCB0KSkgKG9yZy1tb2RlKSkpCiAgICAgIChnb3RvLWNo YXIgKHBvaW50LW1pbikpCiAgICAgIChsZXQgKChpbmQtc3RyIChtYWtlLXN0cmluZyBpbmQgP1xz KSkpCgkod2hpbGUgKG5vdCAob3IgKGVvYnApIChsb29raW5nLWF0IG9yZy1vdXRsaW5lLXJlZ2V4 cC1ib2wpKSkKCSAgOzsgRG8gbm90IG1vdmUgZm9vdG5vdGUgZGVmaW5pdGlvbnMgb3V0IG9mIGNv bHVtbiAwLgoJICAodW5sZXNzIChhbmQgKGxvb2tpbmctYXQgb3JnLWZvb3Rub3RlLWRlZmluaXRp b24tcmUpCgkJICAgICAgIChlcSAob3JnLWVsZW1lbnQtdHlwZSAob3JnLWVsZW1lbnQtYXQtcG9p bnQpKQoJCQkgICAnZm9vdG5vdGUtZGVmaW5pdGlvbikpCgkgICAgKGluc2VydCBpbmQtc3RyKSkK CSAgKGZvcndhcmQtbGluZSkpKSkKICAgIDs7IFdoZW4gTUlOTEVWRUwgaXMgc3BlY2lmaWVkLCBj b21wdXRlIG1pbmltYWwgbGV2ZWwgZm9yIGhlYWRsaW5lcwogICAgOzsgaW4gdGhlIGZpbGUgKENV Ui1NSU4pLCBhbmQgcmVtb3ZlIHN0YXJzIHRvIGVhY2ggaGVhZGxpbmUgc28KICAgIDs7IHRoYXQg aGVhZGxpbmVzIHdpdGggbWluaW1hbCBsZXZlbCBoYXZlIGEgbGV2ZWwgb2YgTUlOTEVWRUwuCiAg ICAod2hlbiBtaW5sZXZlbAogICAgICAodW5sZXNzIChlcSBtYWpvci1tb2RlICdvcmctbW9kZSkK CShsZXQgKChvcmctaW5oaWJpdC1zdGFydHVwIHQpKSAob3JnLW1vZGUpKSkKICAgICAgKG9yZy13 aXRoLWxpbWl0ZWQtbGV2ZWxzCiAgICAgICAobGV0ICgobGV2ZWxzIChvcmctbWFwLWVudHJpZXMK CQkgICAgICAobGFtYmRhICgpIChvcmctcmVkdWNlZC1sZXZlbCAob3JnLWN1cnJlbnQtbGV2ZWwp KSkpKSkKCSAod2hlbiBsZXZlbHMKCSAgIChsZXQgKChvZmZzZXQgKC0gbWlubGV2ZWwgKGFwcGx5 ICMnbWluIGxldmVscykpKSkKCSAgICAgKHVubGVzcyAoemVyb3Agb2Zmc2V0KQoJICAgICAgICh3 aGVuIG9yZy1vZGQtbGV2ZWxzLW9ubHkgKHNldHEgb2Zmc2V0ICgqIG9mZnNldCAyKSkpCgkgICAg ICAgOzsgT25seSBjaGFuZ2Ugc3RhcnMsIGRvbid0IGJvdGhlciBtb3Zpbmcgd2hvbGUKCSAgICAg ICA7OyBzZWN0aW9ucy4KCSAgICAgICAob3JnLW1hcC1lbnRyaWVzCgkJKGxhbWJkYSAoKQoJCSAg KGlmICg8IG9mZnNldCAwKSAoZGVsZXRlLWNoYXIgKGFicyBvZmZzZXQpKQoJCSAgICAoaW5zZXJ0 IChtYWtlLXN0cmluZyBvZmZzZXQgPyopKSkpKSkpKSkpKQogICAgOzsgQXBwZW5kIElEIHRvIGFs bCBmb290bm90ZSByZWZlcmVuY2VzIGFuZCBkZWZpbml0aW9ucywgc28gdGhleQogICAgOzsgYmVj b21lIGZpbGUgc3BlY2lmaWMgYW5kIGNhbm5vdCBjb2xsaWRlIHdpdGggZm9vdG5vdGVzIGluIG90 aGVyCiAgICA7OyBpbmNsdWRlZCBmaWxlcy4gIEZ1cnRoZXIsIGNvbGxlY3QgcmVsZXZhbnQgZm9v dG5vdGUgZGVmaW5pdGlvbnMKICAgIDs7IG91dHNpZGUgb2YgTElORVMsIGluIG9yZGVyIHRvIHJl aW50cm9kdWNlIHRoZW0gbGF0ZXIuCiAgICAod2hlbiBpZAogICAgICAobGV0ICgobWFya2VyLW1p biAocG9pbnQtbWluLW1hcmtlcikpCgkgICAgKG1hcmtlci1tYXggKHBvaW50LW1heC1tYXJrZXIp KQoJICAgIChnZXQtbmV3LWxhYmVsCgkgICAgIChsYW1iZGEgKGxhYmVsKQoJICAgICAgIDs7IEdl bmVyYXRlIG5ldyBsYWJlbCBmcm9tIExBQkVMIGJ5IHByZWZpeGluZyBpdCB3aXRoCgkgICAgICAg OzsgIi1JRC0iLgoJICAgICAgIChmb3JtYXQgIi0lZC0lcyIgaWQgbGFiZWwpKSkKCSAgICAoc2V0 LW5ldy1sYWJlbAoJICAgICAobGFtYmRhIChmIG9sZCBuZXcpCgkgICAgICAgOzsgUmVwbGFjZSBP TEQgbGFiZWwgd2l0aCBORVcgaW4gZm9vdG5vdGUgRi4KCSAgICAgICAoc2F2ZS1leGN1cnNpb24K CQkgKGdvdG8tY2hhciAoKyAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJlZ2luIGYpIDQpKQoJCSAo bG9va2luZy1hdCAocmVnZXhwLXF1b3RlIG9sZCkpCgkJIChyZXBsYWNlLW1hdGNoIG5ldykpKSkK CSAgICAoc2Vlbi1hbGlzdCkpCgkoZ290by1jaGFyIChwb2ludC1taW4pKQoJKHdoaWxlIChyZS1z ZWFyY2gtZm9yd2FyZCBvcmctZm9vdG5vdGUtcmUgbmlsIHQpCgkgIChsZXQgKChmb290bm90ZSAo c2F2ZS1leGN1cnNpb24KCQkJICAgIChiYWNrd2FyZC1jaGFyKQoJCQkgICAgKG9yZy1lbGVtZW50 LWNvbnRleHQpKSkpCgkgICAgKHdoZW4gKG1lbXEgKG9yZy1lbGVtZW50LXR5cGUgZm9vdG5vdGUp CgkJCScoZm9vdG5vdGUtZGVmaW5pdGlvbiBmb290bm90ZS1yZWZlcmVuY2UpKQoJICAgICAgKGxl dCogKChsYWJlbCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxhYmVsIGZvb3Rub3RlKSkpCgkJOzsg VXBkYXRlIHRoZSBmb290bm90ZS1yZWZlcmVuY2UgYXQgcG9pbnQgYW5kIGNvbGxlY3QKCQk7OyB0 aGUgbmV3IGxhYmVsLCB3aGljaCBpcyBvbmx5IHVzZWQgZm9yIGZvb3Rub3RlcwoJCTs7IG91dHNp ZGVzIExJTkVTLgoJCSh3aGVuIGxhYmVsCgkJICAobGV0ICgoc2VlbiAoY2RyIChhc3NvYyBsYWJl bCBzZWVuLWFsaXN0KSkpKQoJCSAgICAoaWYgc2VlbiAoZnVuY2FsbCBzZXQtbmV3LWxhYmVsIGZv b3Rub3RlIGxhYmVsIHNlZW4pCgkJICAgICAgKGxldCAoKG5ldyAoZnVuY2FsbCBnZXQtbmV3LWxh YmVsIGxhYmVsKSkpCgkJCShwdXNoIChjb25zIGxhYmVsIG5ldykgc2Vlbi1hbGlzdCkKCQkJKG9y Zy13aXRoLXdpZGUtYnVmZmVyCgkJCSAobGV0KiAoKGRlZiAob3JnLWZvb3Rub3RlLWdldC1kZWZp bml0aW9uIGxhYmVsKSkKCQkJCShiZWcgKG50aCAxIGRlZikpKQoJCQkgICAod2hlbiAoYW5kIGRl ZgoJCQkJICAgICAgKG9yICg8IGJlZyBtYXJrZXItbWluKQoJCQkJCSAgKD49IGJlZyBtYXJrZXIt bWF4KSkpCgkJCSAgICAgOzsgU3RvcmUgc2luY2UgZm9vdG5vdGUtZGVmaW5pdGlvbiBpcwoJCQkg ICAgIDs7IG91dHNpZGUgb2YgTElORVMuCgkJCSAgICAgKHB1dGhhc2ggbmV3CgkJCQkgICAgICAo b3JnLWVsZW1lbnQtbm9ybWFsaXplLXN0cmluZyAobnRoIDMgZGVmKSkKCQkJCSAgICAgIGZvb3Ru b3RlcykpKSkKCQkJKGZ1bmNhbGwgc2V0LW5ldy1sYWJlbCBmb290bm90ZSBsYWJlbCBuZXcpKSkp KSkpKSkKCShzZXQtbWFya2VyIG1hcmtlci1taW4gbmlsKQoJKHNldC1tYXJrZXIgbWFya2VyLW1h eCBuaWwpKSkKICAgIChvcmctZWxlbWVudC1ub3JtYWxpemUtc3RyaW5nIChidWZmZXItc3RyaW5n KSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtLWNvcHktdG8ta2lsbC1yaW5nLXAgKCkKICAiUmV0dXJu IGEgbm9uLW5pbCB2YWx1ZSB3aGVuIG91dHB1dCBzaG91bGQgYmUgYWRkZWQgdG8gdGhlIGtpbGwg cmluZy4KU2VlIGFsc28gYG9yZy1leHBvcnQtY29weS10by1raWxsLXJpbmcnLiIKICAoaWYgKGVx IG9yZy1leHBvcnQtY29weS10by1raWxsLXJpbmcgJ2lmLWludGVyYWN0aXZlKQogICAgICAobm90 IChvciBleGVjdXRpbmcta2JkLW1hY3JvIG5vbmludGVyYWN0aXZlKSkKICAgIChlcSBvcmctZXhw b3J0LWNvcHktdG8ta2lsbC1yaW5nIHQpKSkKCgoMCjs7OyBUb29scyBGb3IgQmFjay1FbmRzCjs7 Cjs7IEEgd2hvbGUgc2V0IG9mIHRvb2xzIGlzIGF2YWlsYWJsZSB0byBoZWxwIGJ1aWxkIG5ldyBl eHBvcnRlcnMuICBBbnkKOzsgZnVuY3Rpb24gZ2VuZXJhbCBlbm91Z2ggdG8gaGF2ZSBpdHMgdXNl IGFjcm9zcyBtYW55IGJhY2stZW5kcwo7OyBzaG91bGQgYmUgYWRkZWQgaGVyZS4KCjs7OzsgRm9y IEFmZmlsaWF0ZWQgS2V5d29yZHMKOzsKOzsgYG9yZy1leHBvcnQtcmVhZC1hdHRyaWJ1dGUnIHJl YWRzIGEgcHJvcGVydHkgZnJvbSBhIGdpdmVuIGVsZW1lbnQKOzsgIGFzIGEgcGxpc3QuICBJdCBj YW4gYmUgdXNlZCB0byBub3JtYWxpemUgYWZmaWxpYXRlZCBrZXl3b3JkcycKOzsgIHN5bnRheC4K OzsKOzsgU2luY2UgY2FwdGlvbnMgY2FuIHNwYW4gb3ZlciBtdWx0aXBsZSBsaW5lcyBhbmQgYWNj ZXB0IGR1YWwgdmFsdWVzLAo7OyB0aGVpciBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBpcyBhIGJp dCB0cmlja3kuICBUaGVyZWZvcmUsCjs7IGBvcmctZXhwb3J0LWdldC1jYXB0aW9uJyB0cmFuc3Bh cmVudGx5IHJldHVybnMgYSBnaXZlbiBlbGVtZW50J3MKOzsgY2FwdGlvbiBhcyBhIHNlY29uZGFy eSBzdHJpbmcuCgooZGVmdW4gb3JnLWV4cG9ydC1yZWFkLWF0dHJpYnV0ZSAoYXR0cmlidXRlIGVs ZW1lbnQgJm9wdGlvbmFsIHByb3BlcnR5KQogICJUdXJuIEFUVFJJQlVURSBwcm9wZXJ0eSBmcm9t IEVMRU1FTlQgaW50byBhIHBsaXN0LgoKV2hlbiBvcHRpb25hbCBhcmd1bWVudCBQUk9QRVJUWSBp cyBub24tbmlsLCByZXR1cm4gdGhlIHZhbHVlIG9mCnRoYXQgcHJvcGVydHkgd2l0aGluIGF0dHJp YnV0ZXMuCgpUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgYXR0cmlidXRlcyBhcmUgZGVmaW5lZCBhcyBc IjprZXl3b3JkCnZhbHVlXCIgcGFpcnMuICBJdCBpcyBhcHByb3ByaWF0ZSBmb3IgYDphdHRyX2h0 bWwnIGxpa2UKcHJvcGVydGllcy4KCkFsbCB2YWx1ZXMgd2lsbCBiZWNvbWUgc3RyaW5ncyBleGNl cHQgdGhlIGVtcHR5IHN0cmluZyBhbmQKXCJuaWxcIiwgd2hpY2ggd2lsbCBiZWNvbWUgbmlsLiAg QWxzbywgdmFsdWVzIGNvbnRhaW5pbmcgb25seQpkb3VibGUgcXVvdGVzIHdpbGwgYmUgcmVhZCBh cy1pcywgd2hpY2ggbWVhbnMgdGhhdCBcIlwiIHZhbHVlCndpbGwgYmVjb21lIHRoZSBlbXB0eSBz dHJpbmcuIgogIChsZXQqICgocHJlcGFyZS12YWx1ZQoJICAobGFtYmRhIChzdHIpCgkgICAgKHNh dmUtbWF0Y2gtZGF0YQoJICAgICAgKGNvbmQgKChtZW1iZXIgc3RyICcobmlsICIiICJuaWwiKSkg bmlsKQoJCSAgICAoKHN0cmluZy1tYXRjaCAiXlwiXFwoXCIrXFwpP1wiJCIgc3RyKQoJCSAgICAg KG9yIChtYXRjaC1zdHJpbmcgMSBzdHIpICIiKSkKCQkgICAgKHQgc3RyKSkpKSkKCSAoYXR0cmli dXRlcwoJICAobGV0ICgodmFsdWUgKG9yZy1lbGVtZW50LXByb3BlcnR5IGF0dHJpYnV0ZSBlbGVt ZW50KSkpCgkgICAgKHdoZW4gdmFsdWUKCSAgICAgIChsZXQgKChzIChtYXBjb25jYXQgIydpZGVu dGl0eSB2YWx1ZSAiICIpKSByZXN1bHQpCgkJKHdoaWxlIChzdHJpbmctbWF0Y2gKCQkJIlxcKD86 XlxcfFsgXHRdK1xcKVxcKDpbLWEtekEtWjAtOV9dK1xcKVxcKFsgXHRdK1xcfCRcXCkiCgkJCXMp CgkJICAobGV0ICgodmFsdWUgKHN1YnN0cmluZyBzIDAgKG1hdGNoLWJlZ2lubmluZyAwKSkpKQoJ CSAgICAocHVzaCAoZnVuY2FsbCBwcmVwYXJlLXZhbHVlIHZhbHVlKSByZXN1bHQpKQoJCSAgKHB1 c2ggKGludGVybiAobWF0Y2gtc3RyaW5nIDEgcykpIHJlc3VsdCkKCQkgIChzZXRxIHMgKHN1YnN0 cmluZyBzIChtYXRjaC1lbmQgMCkpKSkKCQk7OyBJZ25vcmUgYW55IHN0cmluZyBiZWZvcmUgZmly c3QgcHJvcGVydHkgd2l0aCBgY2RyJy4KCQkoY2RyIChucmV2ZXJzZSAoY29ucyAoZnVuY2FsbCBw cmVwYXJlLXZhbHVlIHMpIHJlc3VsdCkpKSkpKSkpCiAgICAoaWYgcHJvcGVydHkgKHBsaXN0LWdl dCBhdHRyaWJ1dGVzIHByb3BlcnR5KSBhdHRyaWJ1dGVzKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1n ZXQtY2FwdGlvbiAoZWxlbWVudCAmb3B0aW9uYWwgc2hvcnQpCiAgIlJldHVybiBjYXB0aW9uIGZy b20gRUxFTUVOVCBhcyBhIHNlY29uZGFyeSBzdHJpbmcuCgpXaGVuIG9wdGlvbmFsIGFyZ3VtZW50 IFNIT1JUIGlzIG5vbi1uaWwsIHJldHVybiBzaG9ydCBjYXB0aW9uLCBhcwphIHNlY29uZGFyeSBz dHJpbmcsIGluc3RlYWQuCgpDYXB0aW9uIGxpbmVzIGFyZSBzZXBhcmF0ZWQgYnkgYSB3aGl0ZSBz cGFjZS4iCiAgKGxldCAoKGZ1bGwtY2FwdGlvbiAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmNhcHRp b24gZWxlbWVudCkpCgkoZ2V0IChpZiBzaG9ydCAjJ2NkciAjJ2NhcikpCgljYXB0aW9uKQogICAg KGRvbGlzdCAobGluZSBmdWxsLWNhcHRpb24pCiAgICAgIChwY2FzZSAoZnVuY2FsbCBnZXQgbGlu ZSkKCShgbmlsIG5pbCkKCShjCgkgKHNldHEgY2FwdGlvbgoJICAgICAgIChuY29uYyAobGlzdCAi ICIpCgkJICAgICAgKGNvcHktc2VxdWVuY2UgYykgY2FwdGlvbikpKSkpCiAgICAoY2RyIGNhcHRp b24pKSkKCgo7Ozs7IEZvciBEZXJpdmVkIEJhY2stZW5kcwo7Owo7OyBgb3JnLWV4cG9ydC13aXRo LWJhY2tlbmQnIGlzIGEgZnVuY3Rpb24gYWxsb3dpbmcgdG8gbG9jYWxseSB1c2UKOzsgYW5vdGhl ciBiYWNrLWVuZCB0byB0cmFuc2NvZGUgc29tZSBvYmplY3Qgb3IgZWxlbWVudC4gIEluIGEgZGVy aXZlZAo7OyBiYWNrLWVuZCwgaXQgbWF5IGJlIHVzZWQgYXMgYSBmYWxsLWJhY2sgZnVuY3Rpb24g b25jZSBhbGwgc3BlY2lmaWMKOzsgY2FzZXMgaGF2ZSBiZWVuIHRyZWF0ZWQuCgooZGVmdW4gb3Jn LWV4cG9ydC13aXRoLWJhY2tlbmQgKGJhY2tlbmQgZGF0YSAmb3B0aW9uYWwgY29udGVudHMgaW5m bykKICAiQ2FsbCBhIHRyYW5zY29kZXIgZnJvbSBCQUNLRU5EIG9uIERBVEEuCkJBQ0tFTkQgaXMg YW4gZXhwb3J0IGJhY2stZW5kLCBhcyByZXR1cm5lZCBieSwgZS5nLiwKYG9yZy1leHBvcnQtY3Jl YXRlLWJhY2tlbmQnLCBvciBhIHN5bWJvbCByZWZlcnJpbmcgdG8KYSByZWdpc3RlcmVkIGJhY2st ZW5kLiAgREFUQSBpcyBhbiBPcmcgZWxlbWVudCwgb2JqZWN0LCBzZWNvbmRhcnkKc3RyaW5nIG9y IHN0cmluZy4gIENPTlRFTlRTLCB3aGVuIG5vbi1uaWwsIGlzIHRoZSB0cmFuc2NvZGVkCmNvbnRl bnRzIG9mIERBVEEgZWxlbWVudCwgYXMgYSBzdHJpbmcuICBJTkZPLCB3aGVuIG5vbi1uaWwsIGlz CnRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwgdXNlZCBmb3IgZXhwb3J0LCBhcyBhIHBsaXN0LiIK ICAod2hlbiAoc3ltYm9scCBiYWNrZW5kKSAoc2V0cSBiYWNrZW5kIChvcmctZXhwb3J0LWdldC1i YWNrZW5kIGJhY2tlbmQpKSkKICAob3JnLWV4cG9ydC1iYXJmLWlmLWludmFsaWQtYmFja2VuZCBi YWNrZW5kKQogIChsZXQgKCh0eXBlIChvcmctZWxlbWVudC10eXBlIGRhdGEpKSkKICAgICh3aGVu IChtZW1xIHR5cGUgJyhuaWwgb3JnLWRhdGEgcmF3KSkKICAgICAgKGVycm9yICJObyBmb3JlaWdu IHRyYW5zY29kZXIgYXZhaWxhYmxlIikpCiAgICAobGV0KiAoKGFsbC10cmFuc2NvZGVycyAob3Jn LWV4cG9ydC1nZXQtYWxsLXRyYW5zY29kZXJzIGJhY2tlbmQpKQoJICAgKHRyYW5zY29kZXIgKGNk ciAoYXNzcSB0eXBlIGFsbC10cmFuc2NvZGVycykpKSkKICAgICAgKHVubGVzcyAoZnVuY3Rpb25w IHRyYW5zY29kZXIpIChlcnJvciAiTm8gZm9yZWlnbiB0cmFuc2NvZGVyIGF2YWlsYWJsZSIpKQog ICAgICAobGV0ICgobmV3LWluZm8KCSAgICAgKG9yZy1jb21iaW5lLXBsaXN0cwoJICAgICAgaW5m byAobGlzdAoJCSAgICA6YmFjay1lbmQgYmFja2VuZAoJCSAgICA6dHJhbnNsYXRlLWFsaXN0IGFs bC10cmFuc2NvZGVycwoJCSAgICA6ZXhwb3J0ZWQtZGF0YSAobWFrZS1oYXNoLXRhYmxlIDp0ZXN0 ICMnZXEgOnNpemUgNDAxKSkpKSkKCTs7IGA6aW50ZXJuYWwtcmVmZXJlbmNlcycgYXJlIHNoYXJl ZCBhY3Jvc3MgYmFjay1lbmRzLgoJKHByb2cxIChpZiAoZXEgdHlwZSAncGxhaW4tdGV4dCkKCQkg ICAoZnVuY2FsbCB0cmFuc2NvZGVyIGRhdGEgbmV3LWluZm8pCgkJIChmdW5jYWxsIHRyYW5zY29k ZXIgZGF0YSBjb250ZW50cyBuZXctaW5mbykpCgkgIChwbGlzdC1wdXQgaW5mbyA6aW50ZXJuYWwt cmVmZXJlbmNlcwoJCSAgICAgKHBsaXN0LWdldCBuZXctaW5mbyA6aW50ZXJuYWwtcmVmZXJlbmNl cykpKSkpKSkKCgo7Ozs7IEZvciBFeHBvcnQgU25pcHBldHMKOzsKOzsgRXZlcnkgZXhwb3J0IHNu aXBwZXQgaXMgdHJhbnNtaXR0ZWQgdG8gdGhlIGJhY2stZW5kLiAgVGhvdWdoLCB0aGUKOzsgbGF0 dGVyIHdpbGwgb25seSByZXRhaW4gb25lIHR5cGUgb2YgZXhwb3J0LXNuaXBwZXQsIGlnbm9yaW5n Cjs7IG90aGVycywgYmFzZWQgb24gdGhlIGZvcm1lcidzIHRhcmdldCBiYWNrLWVuZC4gIFRoZSBm dW5jdGlvbgo7OyBgb3JnLWV4cG9ydC1zbmlwcGV0LWJhY2tlbmQnIHJldHVybnMgdGhhdCBiYWNr LWVuZCBmb3IgYSBnaXZlbgo7OyBleHBvcnQtc25pcHBldC4KCihkZWZ1biBvcmctZXhwb3J0LXNu aXBwZXQtYmFja2VuZCAoZXhwb3J0LXNuaXBwZXQpCiAgIlJldHVybiBFWFBPUlQtU05JUFBFVCB0 YXJnZXRlZCBiYWNrLWVuZCBhcyBhIHN5bWJvbC4KVHJhbnNsYXRpb24sIHdpdGggYG9yZy1leHBv cnQtc25pcHBldC10cmFuc2xhdGlvbi1hbGlzdCcsIGlzCmFwcGxpZWQuIgogIChsZXQgKChiYWNr LWVuZCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmJhY2stZW5kIGV4cG9ydC1zbmlwcGV0KSkpCiAg ICAoaW50ZXJuCiAgICAgKG9yIChjZHIgKGFzc29jIGJhY2stZW5kIG9yZy1leHBvcnQtc25pcHBl dC10cmFuc2xhdGlvbi1hbGlzdCkpCgkgYmFjay1lbmQpKSkpCgoKOzs7OyBGb3IgRm9vdG5vdGVz Cjs7Cjs7IGBvcmctZXhwb3J0LWNvbGxlY3QtZm9vdG5vdGUtZGVmaW5pdGlvbnMnIGlzIGEgdG9v bCB0byBsaXN0Cjs7IGFjdHVhbGx5IHVzZWQgZm9vdG5vdGVzIGRlZmluaXRpb25zIGluIHRoZSB3 aG9sZSBwYXJzZSB0cmVlLCBvciBpbgo7OyBhIGhlYWRsaW5lLCBpbiBvcmRlciB0byBhZGQgZm9v dG5vdGUgbGlzdGluZ3MgdGhyb3VnaG91dCB0aGUKOzsgdHJhbnNjb2RlZCBkYXRhLgo7Owo7OyBg b3JnLWV4cG9ydC1mb290bm90ZS1maXJzdC1yZWZlcmVuY2UtcCcgaXMgYSBwcmVkaWNhdGUgdXNl ZCBieSBzb21lCjs7IGJhY2stZW5kcywgd2hlbiB0aGV5IG5lZWQgdG8gYXR0YWNoIHRoZSBmb290 bm90ZSBkZWZpbml0aW9uIG9ubHkgdG8KOzsgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgdGhlIGNv cnJlc3BvbmRpbmcgbGFiZWwuCjs7Cjs7IGBvcmctZXhwb3J0LWdldC1mb290bm90ZS1kZWZpbml0 aW9uJyBhbmQKOzsgYG9yZy1leHBvcnQtZ2V0LWZvb3Rub3RlLW51bWJlcicgcHJvdmlkZSBlYXNp ZXIgYWNjZXNzIHRvCjs7IGFkZGl0aW9uYWwgaW5mb3JtYXRpb24gcmVsYXRpdmUgdG8gYSBmb290 bm90ZSByZWZlcmVuY2UuCgooZGVmdW4gb3JnLWV4cG9ydC1nZXQtZm9vdG5vdGUtZGVmaW5pdGlv biAoZm9vdG5vdGUtcmVmZXJlbmNlIGluZm8pCiAgIlJldHVybiBkZWZpbml0aW9uIG9mIEZPT1RO T1RFLVJFRkVSRU5DRSBhcyBwYXJzZWQgZGF0YS4KSU5GTyBpcyB0aGUgcGxpc3QgdXNlZCBhcyBh IGNvbW11bmljYXRpb24gY2hhbm5lbC4gIElmIG5vIHN1Y2gKZGVmaW5pdGlvbiBjYW4gYmUgZm91 bmQsIHJhaXNlIGFuIGVycm9yLiIKICAobGV0ICgobGFiZWwgKG9yZy1lbGVtZW50LXByb3BlcnR5 IDpsYWJlbCBmb290bm90ZS1yZWZlcmVuY2UpKSkKICAgIChpZiAobm90IGxhYmVsKSAob3JnLWVs ZW1lbnQtY29udGVudHMgZm9vdG5vdGUtcmVmZXJlbmNlKQogICAgICAobGV0ICgoY2FjaGUgKG9y IChwbGlzdC1nZXQgaW5mbyA6Zm9vdG5vdGUtZGVmaW5pdGlvbi1jYWNoZSkKCQkgICAgICAgKGxl dCAoKGhhc2ggKG1ha2UtaGFzaC10YWJsZSA6dGVzdCAjJ2VxdWFsKSkpCgkJCSAocGxpc3QtcHV0 IGluZm8gOmZvb3Rub3RlLWRlZmluaXRpb24tY2FjaGUgaGFzaCkKCQkJIGhhc2gpKSkpCgkob3IK CSAoZ2V0aGFzaCBsYWJlbCBjYWNoZSkKCSAocHV0aGFzaCBsYWJlbAoJCSAgKG9yZy1lbGVtZW50 LW1hcCAocGxpc3QtZ2V0IGluZm8gOnBhcnNlLXRyZWUpCgkJICAgICAgJyhmb290bm90ZS1kZWZp bml0aW9uIGZvb3Rub3RlLXJlZmVyZW5jZSkKCQkgICAgKGxhbWJkYSAoZikKCQkgICAgICAoY29u ZAoJCSAgICAgICA7OyBTa2lwIGFueSBmb290bm90ZSB3aXRoIGEgZGlmZmVyZW50IGxhYmVsLgoJ CSAgICAgICA7OyBBbHNvIHNraXAgYW55IHN0YW5kYXJkIGZvb3Rub3RlIHJlZmVyZW5jZQoJCSAg ICAgICA7OyB3aXRoIHRoZSBzYW1lIGxhYmVsIHNpbmNlIHRob3NlIGNhbm5vdAoJCSAgICAgICA7 OyBjb250YWluIGEgZGVmaW5pdGlvbi4KCQkgICAgICAgKChub3QgKGVxdWFsIChvcmctZWxlbWVu dC1wcm9wZXJ0eSA6bGFiZWwgZikgbGFiZWwpKSBuaWwpCgkJICAgICAgICgoZXEgKG9yZy1lbGVt ZW50LXByb3BlcnR5IDp0eXBlIGYpICdzdGFuZGFyZCkgbmlsKQoJCSAgICAgICAoKG9yZy1lbGVt ZW50LWNvbnRlbnRzIGYpKQoJCSAgICAgICA7OyBFdmVuIGlmIHRoZSBjb250ZW50cyBhcmUgZW1w dHksIHdlIGNhbiBub3QKCQkgICAgICAgOzsgcmV0dXJuIG5pbCBzaW5jZSB0aGF0IHdvdWxkIGV2 ZW50dWFsbHkgcmFpc2UKCQkgICAgICAgOzsgdGhlIGVycm9yLiAgSW5zdGVhZCwgcmV0dXJuIHRo ZSBlcXVpdmFsZW50CgkJICAgICAgIDs7IGVtcHR5IHN0cmluZy4KCQkgICAgICAgKHQgIiIpKSkK CQkgICAgaW5mbyB0KQoJCSAgY2FjaGUpCgkgKGVycm9yICJEZWZpbml0aW9uIG5vdCBmb3VuZCBm b3IgZm9vdG5vdGUgJXMiIGxhYmVsKSkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC0tZm9vdG5vdGUt cmVmZXJlbmNlLW1hcAogICAgKGZ1bmN0aW9uIGRhdGEgaW5mbyAmb3B0aW9uYWwgYm9keS1maXJz dCkKICAiQXBwbHkgRlVOQ1RJT04gb24gZXZlcnkgZm9vdG5vdGUgcmVmZXJlbmNlIGluIERBVEEu CklORk8gaXMgYSBwbGlzdCBjb250YWluaW5nIGV4cG9ydCBzdGF0ZS4gIEJ5IGRlZmF1bHQsIGFz IHNvb24gYXMKYSBuZXcgZm9vdG5vdGUgcmVmZXJlbmNlIGlzIGVuY291bnRlcmVkLCBGVU5DVElP TiBpcyBjYWxsZWQgb250bwppdHMgZGVmaW5pdGlvbi4gIEhvd2V2ZXIsIGlmIEJPRFktRklSU1Qg aXMgbm9uLW5pbCwgdGhpcyBzdGVwIGlzCmRlbGF5ZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUgcHJv Y2Vzcy4iCiAgKGxldHJlYyAoKGRlZmluaXRpb25zIG5pbCkKCSAgIChzZWVuLXJlZnMgbmlsKQoJ ICAgKHNlYXJjaC1yZWYKCSAgICAobGFtYmRhIChkYXRhIGRlbGF5cCkKCSAgICAgIDs7IFNlYXJj aCBmb290bm90ZSByZWZlcmVuY2VzIHRocm91Z2ggREFUQSwgZmlsbGluZwoJICAgICAgOzsgU0VF Ti1SRUZTIGFsb25nIHRoZSB3YXkuICBXaGVuIERFTEFZUCBpcyBub24tbmlsLAoJICAgICAgOzsg c3RvcmUgZm9vdG5vdGUgZGVmaW5pdGlvbnMgc28gdGhleSBjYW4gYmUgZW50ZXJlZAoJICAgICAg OzsgbGF0ZXIuCgkgICAgICAob3JnLWVsZW1lbnQtbWFwIGRhdGEgJ2Zvb3Rub3RlLXJlZmVyZW5j ZQoJCShsYW1iZGEgKGYpCgkJICAoZnVuY2FsbCBmdW5jdGlvbiBmKQoJCSAgKGxldCAoKC0tbGFi ZWwgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpsYWJlbCBmKSkpCgkJICAgICh1bmxlc3MgKGFuZCAt LWxhYmVsIChtZW1iZXIgLS1sYWJlbCBzZWVuLXJlZnMpKQoJCSAgICAgICh3aGVuIC0tbGFiZWwg KHB1c2ggLS1sYWJlbCBzZWVuLXJlZnMpKQoJCSAgICAgIDs7IFNlYXJjaCBmb3Igc3Vic2VxdWVu dCByZWZlcmVuY2VzIGluIGZvb3Rub3RlCgkJICAgICAgOzsgZGVmaW5pdGlvbiBzbyBudW1iZXJp bmcgZm9sbG93cyByZWFkaW5nCgkJICAgICAgOzsgbG9naWMsIHVubGVzcyBERUxBWVAgaW4gbm9u LW5pbC4KCQkgICAgICAoY29uZAoJCSAgICAgICAoZGVsYXlwCgkJCShwdXNoIChvcmctZXhwb3J0 LWdldC1mb290bm90ZS1kZWZpbml0aW9uIGYgaW5mbykKCQkJICAgICAgZGVmaW5pdGlvbnMpKQoJ CSAgICAgICA7OyBEbyBub3QgZm9yY2UgZW50ZXJpbmcgaW5saW5lIGRlZmluaXRpb25zLAoJCSAg ICAgICA7OyBzaW5jZSBgb3JnLWVsZW1lbnQtbWFwJyBhbHJlYWR5IHRyYXZlcnNlcwoJCSAgICAg ICA7OyB0aGVtIGF0IHRoZSByaWdodCB0aW1lLgoJCSAgICAgICAoKGVxIChvcmctZWxlbWVudC1w cm9wZXJ0eSA6dHlwZSBmKSAnaW5saW5lKSkKCQkgICAgICAgKHQgKGZ1bmNhbGwgc2VhcmNoLXJl ZgoJCQkJICAgKG9yZy1leHBvcnQtZ2V0LWZvb3Rub3RlLWRlZmluaXRpb24gZiBpbmZvKQoJCQkJ ICAgbmlsKSkpKSkpCgkJaW5mbyBuaWwKCQk7OyBEb24ndCBlbnRlciBmb290bm90ZSBkZWZpbml0 aW9ucyBzaW5jZSBpdCB3aWxsCgkJOzsgaGFwcGVuIHdoZW4gdGhlaXIgZmlyc3QgcmVmZXJlbmNl IGlzIGZvdW5kLgoJCTs7IE1vcmVvdmVyLCBpZiBERUxBWVAgaXMgbm9uLW5pbCwgbWFrZSBzdXJl IHdlCgkJOzsgcG9zdHBvbmUgZW50ZXJpbmcgZGVmaW5pdGlvbnMgb2YgaW5saW5lIHJlZmVyZW5j ZXMuCgkJKGlmIGRlbGF5cCAnKGZvb3Rub3RlLWRlZmluaXRpb24gZm9vdG5vdGUtcmVmZXJlbmNl KQoJCSAgJ2Zvb3Rub3RlLWRlZmluaXRpb24pKSkpKQogICAgKGZ1bmNhbGwgc2VhcmNoLXJlZiBk YXRhIGJvZHktZmlyc3QpCiAgICAoZnVuY2FsbCBzZWFyY2gtcmVmIChucmV2ZXJzZSBkZWZpbml0 aW9ucykgbmlsKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1jb2xsZWN0LWZvb3Rub3RlLWRlZmluaXRp b25zIChpbmZvICZvcHRpb25hbCBkYXRhIGJvZHktZmlyc3QpCiAgIlJldHVybiBhbiBhbGlzdCBi ZXR3ZWVuIGZvb3Rub3RlIG51bWJlcnMsIGxhYmVscyBhbmQgZGVmaW5pdGlvbnMuCgpJTkZPIGlz IHRoZSBjdXJyZW50IGV4cG9ydCBzdGF0ZSwgYXMgYSBwbGlzdC4KCkRlZmluaXRpb25zIGFyZSBj b2xsZWN0ZWQgdGhyb3VnaG91dCB0aGUgd2hvbGUgcGFyc2UgdHJlZSwgb3IKREFUQSB3aGVuIG5v bi1uaWwuCgpTb3J0aW5nIGlzIGRvbmUgYnkgb3JkZXIgb2YgcmVmZXJlbmNlcy4gIEFzIHNvb24g YXMgYSBuZXcKcmVmZXJlbmNlIGlzIGVuY291bnRlcmVkLCBvdGhlciByZWZlcmVuY2VzIGFyZSBz ZWFyY2hlZCB3aXRoaW4KaXRzIGRlZmluaXRpb24uICBIb3dldmVyLCBpZiBCT0RZLUZJUlNUIGlz IG5vbi1uaWwsIHRoaXMgc3RlcCBpcwpkZWxheWVkIGFmdGVyIHRoZSB3aG9sZSB0cmVlIGlzIGNo ZWNrZWQuICBUaGlzIGFsdGVycyByZXN1bHRzCndoZW4gcmVmZXJlbmNlcyBhcmUgZm91bmQgaW4g Zm9vdG5vdGUgZGVmaW5pdGlvbnMuCgpEZWZpbml0aW9ucyBlaXRoZXIgYXBwZWFyIGFzIE9yZyBk YXRhIG9yIGFzIGEgc2Vjb25kYXJ5IHN0cmluZwpmb3IgaW5saW5lZCBmb290bm90ZXMuICBVbnJl ZmVyZW5jZWQgZGVmaW5pdGlvbnMgYXJlIGlnbm9yZWQuIgogIChsZXQgKChuIDApIGxhYmVscyBh bGlzdCkKICAgIChvcmctZXhwb3J0LS1mb290bm90ZS1yZWZlcmVuY2UtbWFwCiAgICAgKGxhbWJk YSAoZikKICAgICAgIDs7IENvbGxlY3QgZm9vdG5vdGUgbnVtYmVyLCBsYWJlbCBhbmQgZGVmaW5p dGlvbi4KICAgICAgIChsZXQgKChsIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6bGFiZWwgZikpKQoJ ICh1bmxlc3MgKGFuZCBsIChtZW1iZXIgbCBsYWJlbHMpKQoJICAgKGNsLWluY2YgbikKCSAgIChw dXNoIChsaXN0IG4gbCAob3JnLWV4cG9ydC1nZXQtZm9vdG5vdGUtZGVmaW5pdGlvbiBmIGluZm8p KSBhbGlzdCkpCgkgKHdoZW4gbCAocHVzaCBsIGxhYmVscykpKSkKICAgICAob3IgZGF0YSAocGxp c3QtZ2V0IGluZm8gOnBhcnNlLXRyZWUpKSBpbmZvIGJvZHktZmlyc3QpCiAgICAobnJldmVyc2Ug YWxpc3QpKSkKCihkZWZ1biBvcmctZXhwb3J0LWZvb3Rub3RlLWZpcnN0LXJlZmVyZW5jZS1wCiAg ICAoZm9vdG5vdGUtcmVmZXJlbmNlIGluZm8gJm9wdGlvbmFsIGRhdGEgYm9keS1maXJzdCkKICAi Tm9uLW5pbCB3aGVuIGEgZm9vdG5vdGUgcmVmZXJlbmNlIGlzIHRoZSBmaXJzdCBvbmUgZm9yIGl0 cyBsYWJlbC4KCkZPT1ROT1RFLVJFRkVSRU5DRSBpcyB0aGUgZm9vdG5vdGUgcmVmZXJlbmNlIGJl aW5nIGNvbnNpZGVyZWQuCklORk8gaXMgYSBwbGlzdCBjb250YWluaW5nIGN1cnJlbnQgZXhwb3J0 IHN0YXRlLgoKU2VhcmNoIGlzIGRvbmUgdGhyb3VnaG91dCB0aGUgd2hvbGUgcGFyc2UgdHJlZSwg b3IgREFUQSB3aGVuCm5vbi1uaWwuCgpCeSBkZWZhdWx0LCBhcyBzb29uIGFzIGEgbmV3IGZvb3Ru b3RlIHJlZmVyZW5jZSBpcyBlbmNvdW50ZXJlZCwKb3RoZXIgcmVmZXJlbmNlcyBhcmUgc2VhcmNo ZWQgd2l0aGluIGl0cyBkZWZpbml0aW9uLiAgSG93ZXZlciwgaWYKQk9EWS1GSVJTVCBpcyBub24t bmlsLCB0aGlzIHN0ZXAgaXMgZGVsYXllZCBhZnRlciB0aGUgd2hvbGUgdHJlZQppcyBjaGVja2Vk LiAgVGhpcyBhbHRlcnMgcmVzdWx0cyB3aGVuIHJlZmVyZW5jZXMgYXJlIGZvdW5kIGluCmZvb3Ru b3RlIGRlZmluaXRpb25zLiIKICAobGV0ICgobGFiZWwgKG9yZy1lbGVtZW50LXByb3BlcnR5IDps YWJlbCBmb290bm90ZS1yZWZlcmVuY2UpKSkKICAgIDs7IEFub255bW91cyBmb290bm90ZXMgYXJl IGFsd2F5cyBhIGZpcnN0IHJlZmVyZW5jZS4KICAgIChvciAobm90IGxhYmVsKQoJKGNhdGNoICdl eGl0CgkgIChvcmctZXhwb3J0LS1mb290bm90ZS1yZWZlcmVuY2UtbWFwCgkgICAobGFtYmRhIChm KQoJICAgICAobGV0ICgobCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxhYmVsIGYpKSkKCSAgICAg ICAod2hlbiAoYW5kIGwgbGFiZWwgKHN0cmluZz0gbGFiZWwgbCkpCgkJICh0aHJvdyAnZXhpdCAo ZXEgZm9vdG5vdGUtcmVmZXJlbmNlIGYpKSkpKQoJICAgKG9yIGRhdGEgKHBsaXN0LWdldCBpbmZv IDpwYXJzZS10cmVlKSkgaW5mbyBib2R5LWZpcnN0KSkpKSkKCihkZWZ1biBvcmctZXhwb3J0LWdl dC1mb290bm90ZS1udW1iZXIgKGZvb3Rub3RlIGluZm8gJm9wdGlvbmFsIGRhdGEgYm9keS1maXJz dCkKICAiUmV0dXJuIG51bWJlciBhc3NvY2lhdGVkIHRvIGEgZm9vdG5vdGUuCgpGT09UTk9URSBp cyBlaXRoZXIgYSBmb290bm90ZSByZWZlcmVuY2Ugb3IgYSBmb290bm90ZSBkZWZpbml0aW9uLgpJ TkZPIGlzIHRoZSBwbGlzdCBjb250YWluaW5nIGV4cG9ydCBzdGF0ZS4KCk51bWJlciBpcyB1bmlx dWUgdGhyb3VnaG91dCB0aGUgd2hvbGUgcGFyc2UgdHJlZSwgb3IgREFUQSwgd2hlbgpub24tbmls LgoKQnkgZGVmYXVsdCwgYXMgc29vbiBhcyBhIG5ldyBmb290bm90ZSByZWZlcmVuY2UgaXMgZW5j b3VudGVyZWQsCmNvdW50aW5nIHByb2Nlc3MgbW92ZXMgaW50byBpdHMgZGVmaW5pdGlvbi4gIEhv d2V2ZXIsIGlmCkJPRFktRklSU1QgaXMgbm9uLW5pbCwgdGhpcyBzdGVwIGlzIGRlbGF5ZWQgdW50 aWwgdGhlIGVuZCBvZiB0aGUKcHJvY2VzcywgbGVhZGluZyB0byBhIGRpZmZlcmVudCBvcmRlciB3 aGVuIGZvb3Rub3RlcyBhcmUgbmVzdGVkLiIKICAobGV0ICgoY291bnQgMCkKCShzZWVuKQoJKGxh YmVsIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6bGFiZWwgZm9vdG5vdGUpKSkKICAgIChjYXRjaCAn ZXhpdAogICAgICAob3JnLWV4cG9ydC0tZm9vdG5vdGUtcmVmZXJlbmNlLW1hcAogICAgICAgKGxh bWJkYSAoZikKCSAobGV0ICgobCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxhYmVsIGYpKSkKCSAg IChjb25kCgkgICAgOzsgQW5vbnltb3VzIGZvb3Rub3RlIG1hdGNoOiByZXR1cm4gbnVtYmVyLgoJ ICAgICgoYW5kIChub3QgbCkgKG5vdCBsYWJlbCkgKGVxIGZvb3Rub3RlIGYpKSAodGhyb3cgJ2V4 aXQgKDErIGNvdW50KSkpCgkgICAgOzsgTGFiZWxzIG1hdGNoOiByZXR1cm4gbnVtYmVyLgoJICAg ICgoYW5kIGxhYmVsIGwgKHN0cmluZz0gbGFiZWwgbCkpICh0aHJvdyAnZXhpdCAoMSsgY291bnQp KSkKCSAgICA7OyBPdGhlcndpc2Ugc3RvcmUgbGFiZWwgYW5kIGluY3JlYXNlIGNvdW50ZXIgaWYg bGFiZWwKCSAgICA7OyB3YXNuJ3QgZW5jb3VudGVyZWQgeWV0LgoJICAgICgobm90IGwpIChjbC1p bmNmIGNvdW50KSkKCSAgICAoKG5vdCAobWVtYmVyIGwgc2VlbikpIChwdXNoIGwgc2VlbikgKGNs LWluY2YgY291bnQpKSkpKQogICAgICAgKG9yIGRhdGEgKHBsaXN0LWdldCBpbmZvIDpwYXJzZS10 cmVlKSkgaW5mbyBib2R5LWZpcnN0KSkpKQoKCjs7OzsgRm9yIEhlYWRsaW5lcwo7Owo7OyBgb3Jn LWV4cG9ydC1nZXQtcmVsYXRpdmUtbGV2ZWwnIGlzIGEgc2hvcnRjdXQgdG8gZ2V0IGhlYWRsaW5l Cjs7IGxldmVsLCByZWxhdGl2ZWx5IHRvIHRoZSBsb3dlciBoZWFkbGluZSBsZXZlbCBpbiB0aGUg cGFyc2VkIHRyZWUuCjs7Cjs7IGBvcmctZXhwb3J0LWdldC1oZWFkbGluZS1udW1iZXInIHJldHVy bnMgdGhlIHNlY3Rpb24gbnVtYmVyIG9mIGFuCjs7IGhlYWRsaW5lLCB3aGlsZSBgb3JnLWV4cG9y dC1udW1iZXItdG8tcm9tYW4nIGFsbG93cyBpdCB0byBiZQo7OyBjb252ZXJ0ZWQgdG8gcm9tYW4g bnVtYmVycy4gIFdpdGggYW4gb3B0aW9uYWwgYXJndW1lbnQsCjs7IGBvcmctZXhwb3J0LWdldC1o ZWFkbGluZS1udW1iZXInIHJldHVybnMgYSBudW1iZXIgdG8gdW5udW1iZXJlZAo7OyBoZWFkbGlu ZXMgKHVzZWQgZm9yIGludGVybmFsIGlkKS4KOzsKOzsgYG9yZy1leHBvcnQtbG93LWxldmVsLXAn LCBgb3JnLWV4cG9ydC1maXJzdC1zaWJsaW5nLXAnIGFuZAo7OyBgb3JnLWV4cG9ydC1sYXN0LXNp YmxpbmctcCcgYXJlIHRocmVlIHVzZWZ1bCBwcmVkaWNhdGVzIHdoZW4gaXQKOzsgY29tZXMgdG8g ZnVsZmlsbCB0aGUgYDpoZWFkbGluZS1sZXZlbHMnIHByb3BlcnR5Lgo7Owo7OyBgb3JnLWV4cG9y dC1nZXQtdGFncycsIGBvcmctZXhwb3J0LWdldC1jYXRlZ29yeScgYW5kCjs7IGBvcmctZXhwb3J0 LWdldC1ub2RlLXByb3BlcnR5JyBleHRyYWN0IHVzZWZ1bCBpbmZvcm1hdGlvbiBmcm9tIGFuCjs7 IGhlYWRsaW5lIG9yIGEgcGFyZW50IGhlYWRsaW5lLiAgVGhleSBhbGwgaGFuZGxlIGluaGVyaXRh bmNlLgo7Owo7OyBgb3JnLWV4cG9ydC1nZXQtYWx0LXRpdGxlJyB0cmllcyB0byByZXRyaWV2ZSBh biBhbHRlcm5hdGl2ZSB0aXRsZSwKOzsgYXMgYSBzZWNvbmRhcnkgc3RyaW5nLCBzdWl0YWJsZSBm b3IgdGFibGUgb2YgY29udGVudHMuICBJdCBmYWxscwo7OyBiYWNrIG9udG8gZGVmYXVsdCB0aXRs ZS4KCihkZWZ1biBvcmctZXhwb3J0LWdldC1yZWxhdGl2ZS1sZXZlbCAoaGVhZGxpbmUgaW5mbykK ICAiUmV0dXJuIEhFQURMSU5FIHJlbGF0aXZlIGxldmVsIHdpdGhpbiBjdXJyZW50IHBhcnNlZCB0 cmVlLgpJTkZPIGlzIGEgcGxpc3QgaG9sZGluZyBjb250ZXh0dWFsIGluZm9ybWF0aW9uLiIKICAo KyAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmxldmVsIGhlYWRsaW5lKQogICAgIChvciAocGxpc3Qt Z2V0IGluZm8gOmhlYWRsaW5lLW9mZnNldCkgMCkpKQoKKGRlZnVuIG9yZy1leHBvcnQtbG93LWxl dmVsLXAgKGhlYWRsaW5lIGluZm8pCiAgIk5vbi1uaWwgd2hlbiBIRUFETElORSBpcyBjb25zaWRl cmVkIGFzIGxvdyBsZXZlbC4KCklORk8gaXMgYSBwbGlzdCB1c2VkIGFzIGEgY29tbXVuaWNhdGlv biBjaGFubmVsLgoKQSBsb3cgbGV2ZWwgaGVhZGxpbmVzIGhhcyBhIHJlbGF0aXZlIGxldmVsIGdy ZWF0ZXIgdGhhbgpgOmhlYWRsaW5lLWxldmVscycgcHJvcGVydHkgdmFsdWUuCgpSZXR1cm4gdmFs dWUgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBIRUFETElORSByZWxhdGl2ZSBsZXZlbAphbmQg dGhlIGxhc3QgbGV2ZWwgYmVpbmcgY29uc2lkZXJlZCBhcyBoaWdoIGVub3VnaCwgb3IgbmlsLiIK ICAobGV0ICgobGltaXQgKHBsaXN0LWdldCBpbmZvIDpoZWFkbGluZS1sZXZlbHMpKSkKICAgICh3 aGVuICh3aG9sZW51bXAgbGltaXQpCiAgICAgIChsZXQgKChsZXZlbCAob3JnLWV4cG9ydC1nZXQt cmVsYXRpdmUtbGV2ZWwgaGVhZGxpbmUgaW5mbykpKQogICAgICAgIChhbmQgKD4gbGV2ZWwgbGlt aXQpICgtIGxldmVsIGxpbWl0KSkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1nZXQtaGVhZGxpbmUt bnVtYmVyIChoZWFkbGluZSBpbmZvKQogICJSZXR1cm4gbnVtYmVyZWQgSEVBRExJTkUgbnVtYmVy aW5nIGFzIGEgbGlzdCBvZiBudW1iZXJzLgpJTkZPIGlzIGEgcGxpc3QgaG9sZGluZyBjb250ZXh0 dWFsIGluZm9ybWF0aW9uLiIKICAoYW5kIChvcmctZXhwb3J0LW51bWJlcmVkLWhlYWRsaW5lLXAg aGVhZGxpbmUgaW5mbykKICAgICAgIChjZHIgKGFzc3EgaGVhZGxpbmUgKHBsaXN0LWdldCBpbmZv IDpoZWFkbGluZS1udW1iZXJpbmcpKSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtbnVtYmVyZWQtaGVh ZGxpbmUtcCAoaGVhZGxpbmUgaW5mbykKICAiUmV0dXJuIGEgbm9uLW5pbCB2YWx1ZSBpZiBIRUFE TElORSBlbGVtZW50IHNob3VsZCBiZSBudW1iZXJlZC4KSU5GTyBpcyBhIHBsaXN0IHVzZWQgYXMg YSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuIgogICh1bmxlc3MgKG9yZy1ub3QtbmlsIChvcmctZXhw b3J0LWdldC1ub2RlLXByb3BlcnR5IDpVTk5VTUJFUkVEIGhlYWRsaW5lIHQpKQogICAgKGxldCAo KHNlYy1udW0gKHBsaXN0LWdldCBpbmZvIDpzZWN0aW9uLW51bWJlcnMpKQoJICAobGV2ZWwgKG9y Zy1leHBvcnQtZ2V0LXJlbGF0aXZlLWxldmVsIGhlYWRsaW5lIGluZm8pKSkKICAgICAgKGlmICh3 aG9sZW51bXAgc2VjLW51bSkgKDw9IGxldmVsIHNlYy1udW0pIHNlYy1udW0pKSkpCgooZGVmdW4g b3JnLWV4cG9ydC1udW1iZXItdG8tcm9tYW4gKG4pCiAgIkNvbnZlcnQgaW50ZWdlciBOIGludG8g YSByb21hbiBudW1lcmFsLiIKICAobGV0ICgocm9tYW4gJygoMTAwMCAuICJNIikgKDkwMCAuICJD TSIpICg1MDAgLiAiRCIpICg0MDAgLiAiQ0QiKQoJCSAoIDEwMCAuICJDIikgKCA5MCAuICJYQyIp ICggNTAgLiAiTCIpICggNDAgLiAiWEwiKQoJCSAoICAxMCAuICJYIikgKCAgOSAuICJJWCIpICgg IDUgLiAiViIpICggIDQgLiAiSVYiKQoJCSAoICAgMSAuICJJIikpKQoJKHJlcyAiIikpCiAgICAo aWYgKDw9IG4gMCkKCShudW1iZXItdG8tc3RyaW5nIG4pCiAgICAgICh3aGlsZSByb21hbgoJKGlm ICg+PSBuIChjYWFyIHJvbWFuKSkKCSAgICAoc2V0cSBuICgtIG4gKGNhYXIgcm9tYW4pKQoJCSAg cmVzIChjb25jYXQgcmVzIChjZGFyIHJvbWFuKSkpCgkgIChwb3Agcm9tYW4pKSkKICAgICAgcmVz KSkpCgooZGVmdW4gb3JnLWV4cG9ydC1nZXQtdGFncyAoZWxlbWVudCBpbmZvICZvcHRpb25hbCB0 YWdzIGluaGVyaXRlZCkKICAiUmV0dXJuIGxpc3Qgb2YgdGFncyBhc3NvY2lhdGVkIHRvIEVMRU1F TlQuCgpFTEVNRU5UIGhhcyBlaXRoZXIgYW4gYGhlYWRsaW5lJyBvciBhbiBgaW5saW5ldGFzaycg dHlwZS4gIElORk8KaXMgYSBwbGlzdCB1c2VkIGFzIGEgY29tbXVuaWNhdGlvbiBjaGFubmVsLgoK V2hlbiBub24tbmlsLCBvcHRpb25hbCBhcmd1bWVudCBUQUdTIHNob3VsZCBiZSBhIGxpc3Qgb2Yg c3RyaW5ncy4KQW55IHRhZyBiZWxvbmdpbmcgdG8gdGhpcyBsaXN0IHdpbGwgYWxzbyBiZSByZW1v dmVkLgoKV2hlbiBvcHRpb25hbCBhcmd1bWVudCBJTkhFUklURUQgaXMgbm9uLW5pbCwgdGFncyBj YW4gYWxzbyBiZQppbmhlcml0ZWQgZnJvbSBwYXJlbnQgaGVhZGxpbmVzIGFuZCBGSUxFVEFHUyBr ZXl3b3Jkcy4iCiAgKGNsLXJlbW92ZS1pZgogICAobGFtYmRhICh0YWcpIChtZW1iZXIgdGFnIHRh Z3MpKQogICAoaWYgKG5vdCBpbmhlcml0ZWQpIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dGFncyBl bGVtZW50KQogICAgIDs7IEJ1aWxkIGNvbXBsZXRlIGxpc3Qgb2YgaW5oZXJpdGVkIHRhZ3MuCiAg ICAgKGxldCAoKGN1cnJlbnQtdGFnLWxpc3QgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0YWdzIGVs ZW1lbnQpKSkKICAgICAgIChkb2xpc3QgKHBhcmVudCAob3JnLWVsZW1lbnQtbGluZWFnZSBlbGVt ZW50KSkKCSAoZG9saXN0ICh0YWcgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0YWdzIHBhcmVudCkp CgkgICAod2hlbiAoYW5kIChtZW1xIChvcmctZWxlbWVudC10eXBlIHBhcmVudCkgJyhoZWFkbGlu ZSBpbmxpbmV0YXNrKSkKCQkgICAgICAobm90IChtZW1iZXIgdGFnIGN1cnJlbnQtdGFnLWxpc3Qp KSkKCSAgICAgKHB1c2ggdGFnIGN1cnJlbnQtdGFnLWxpc3QpKSkpCiAgICAgICA7OyBBZGQgRklM RVRBR1Mga2V5d29yZHMgYW5kIHJldHVybiByZXN1bHRzLgogICAgICAgKG9yZy11bmlxdWlmeSAo YXBwZW5kIChwbGlzdC1nZXQgaW5mbyA6ZmlsZXRhZ3MpIGN1cnJlbnQtdGFnLWxpc3QpKSkpKSkK CihkZWZ1biBvcmctZXhwb3J0LWdldC1ub2RlLXByb3BlcnR5IChwcm9wZXJ0eSBkYXR1bSAmb3B0 aW9uYWwgaW5oZXJpdGVkKQogICJSZXR1cm4gbm9kZSBQUk9QRVJUWSB2YWx1ZSBmb3IgREFUVU0u CgpQUk9QRVJUWSBpcyBhbiB1cGNhc2Ugc3ltYm9sIChlLmcuLCBgOkNPT0tJRV9EQVRBJykuICBE QVRVTSBpcyBhbgplbGVtZW50IG9yIG9iamVjdC4KCklmIG9wdGlvbmFsIGFyZ3VtZW50IElOSEVS SVRFRCBpcyBub24tbmlsLCB0aGUgdmFsdWUgY2FuIGJlCmluaGVyaXRlZCBmcm9tIGEgcGFyZW50 IGhlYWRsaW5lLgoKUmV0dXJuIHZhbHVlIGlzIGEgc3RyaW5nIG9yIG5pbC4iCiAgKGxldCAoKGhl YWRsaW5lIChpZiAoZXEgKG9yZy1lbGVtZW50LXR5cGUgZGF0dW0pICdoZWFkbGluZSkgZGF0dW0K CQkgICAgKG9yZy1leHBvcnQtZ2V0LXBhcmVudC1oZWFkbGluZSBkYXR1bSkpKSkKICAgIChpZiAo bm90IGluaGVyaXRlZCkgKG9yZy1lbGVtZW50LXByb3BlcnR5IHByb3BlcnR5IGRhdHVtKQogICAg ICAobGV0ICgocGFyZW50IGhlYWRsaW5lKSkKCShjYXRjaCAnZm91bmQKCSAgKHdoaWxlIHBhcmVu dAoJICAgICh3aGVuIChwbGlzdC1tZW1iZXIgKG50aCAxIHBhcmVudCkgcHJvcGVydHkpCgkgICAg ICAodGhyb3cgJ2ZvdW5kIChvcmctZWxlbWVudC1wcm9wZXJ0eSBwcm9wZXJ0eSBwYXJlbnQpKSkK CSAgICAoc2V0cSBwYXJlbnQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpwYXJlbnQgcGFyZW50KSkp KSkpKSkKCihkZWZ1biBvcmctZXhwb3J0LWdldC1jYXRlZ29yeSAoYmxvYiBpbmZvKQogICJSZXR1 cm4gY2F0ZWdvcnkgZm9yIGVsZW1lbnQgb3Igb2JqZWN0IEJMT0IuCgpJTkZPIGlzIGEgcGxpc3Qg dXNlZCBhcyBhIGNvbW11bmljYXRpb24gY2hhbm5lbC4KCkNBVEVHT1JZIGlzIGF1dG9tYXRpY2Fs bHkgaW5oZXJpdGVkIGZyb20gYSBwYXJlbnQgaGVhZGxpbmUsIGZyb20KIytDQVRFR09SWToga2V5 d29yZCBvciBjcmVhdGVkIG91dCBvZiBvcmlnaW5hbCBmaWxlIG5hbWUuICBJZiBhbGwKZmFpbCwg dGhlIGZhbGwtYmFjayB2YWx1ZSBpcyBcIj8/P1wiLiIKICAob3IgKG9yZy1leHBvcnQtZ2V0LW5v ZGUtcHJvcGVydHkgOkNBVEVHT1JZIGJsb2IgdCkKICAgICAgKG9yZy1lbGVtZW50LW1hcCAocGxp c3QtZ2V0IGluZm8gOnBhcnNlLXRyZWUpICdrZXl3b3JkCgkobGFtYmRhIChrd2QpCgkgICh3aGVu IChlcXVhbCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOmtleSBrd2QpICJDQVRFR09SWSIpCgkgICAg KG9yZy1lbGVtZW50LXByb3BlcnR5IDp2YWx1ZSBrd2QpKSkKCWluZm8gJ2ZpcnN0LW1hdGNoKQog ICAgICAobGV0ICgoZmlsZSAocGxpc3QtZ2V0IGluZm8gOmlucHV0LWZpbGUpKSkKCShhbmQgZmls ZSAoZmlsZS1uYW1lLXNhbnMtZXh0ZW5zaW9uIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IGZpbGUp KSkpCiAgICAgICI/Pz8iKSkKCihkZWZ1biBvcmctZXhwb3J0LWdldC1hbHQtdGl0bGUgKGhlYWRs aW5lIF8pCiAgIlJldHVybiBhbHRlcm5hdGl2ZSB0aXRsZSBmb3IgSEVBRExJTkUsIGFzIGEgc2Vj b25kYXJ5IHN0cmluZy4KSWYgbm8gb3B0aW9uYWwgdGl0bGUgaXMgZGVmaW5lZCwgZmFsbC1iYWNr IHRvIHRoZSByZWd1bGFyIHRpdGxlLiIKICAobGV0ICgoYWx0IChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6QUxUX1RJVExFIGhlYWRsaW5lKSkpCiAgICAoaWYgYWx0IChvcmctZWxlbWVudC1wYXJzZS1z ZWNvbmRhcnktc3RyaW5nCgkgICAgIGFsdCAob3JnLWVsZW1lbnQtcmVzdHJpY3Rpb24gJ2hlYWRs aW5lKSBoZWFkbGluZSkKICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0aXRsZSBoZWFkbGlu ZSkpKSkKCihkZWZ1biBvcmctZXhwb3J0LWZpcnN0LXNpYmxpbmctcCAoYmxvYiBpbmZvKQogICJO b24tbmlsIHdoZW4gQkxPQiBpcyB0aGUgZmlyc3Qgc2libGluZyBpbiBpdHMgcGFyZW50LgpCTE9C IGlzIGFuIGVsZW1lbnQgb3IgYW4gb2JqZWN0LiAgSWYgQkxPQiBpcyBhIGhlYWRsaW5lLCBub24t bmlsCm1lYW5zIGl0IGlzIHRoZSBmaXJzdCBzaWJsaW5nIGluIHRoZSBzdWItdHJlZS4gIElORk8g aXMgYSBwbGlzdAp1c2VkIGFzIGEgY29tbXVuaWNhdGlvbiBjaGFubmVsLiIKICAobWVtcSAob3Jn LWVsZW1lbnQtdHlwZSAob3JnLWV4cG9ydC1nZXQtcHJldmlvdXMtZWxlbWVudCBibG9iIGluZm8p KQoJJyhuaWwgc2VjdGlvbikpKQoKKGRlZnVuIG9yZy1leHBvcnQtbGFzdC1zaWJsaW5nLXAgKGRh dHVtIGluZm8pCiAgIk5vbi1uaWwgd2hlbiBEQVRVTSBpcyB0aGUgbGFzdCBzaWJsaW5nIGluIGl0 cyBwYXJlbnQuCkRBVFVNIGlzIGFuIGVsZW1lbnQgb3IgYW4gb2JqZWN0LiAgSU5GTyBpcyBhIHBs aXN0IHVzZWQgYXMKYSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuIgogIChsZXQgKChuZXh0IChvcmct ZXhwb3J0LWdldC1uZXh0LWVsZW1lbnQgZGF0dW0gaW5mbykpKQogICAgKG9yIChub3QgbmV4dCkK CShhbmQgKGVxICdoZWFkbGluZSAob3JnLWVsZW1lbnQtdHlwZSBkYXR1bSkpCgkgICAgICg+IChv cmctZWxlbWVudC1wcm9wZXJ0eSA6bGV2ZWwgZGF0dW0pCgkJKG9yZy1lbGVtZW50LXByb3BlcnR5 IDpsZXZlbCBuZXh0KSkpKSkpCgoKOzs7OyBGb3IgS2V5d29yZHMKOzsKOzsgYG9yZy1leHBvcnQt Z2V0LWRhdGUnIHJldHVybnMgYSBkYXRlIGFwcHJvcHJpYXRlIGZvciB0aGUgZG9jdW1lbnQKOzsg IHRvIGFib3V0IHRvIGJlIGV4cG9ydGVkLiAgSW4gcGFydGljdWxhciwgaXQgdGFrZXMgY2FyZSBv Zgo7OyAgYG9yZy1leHBvcnQtZGF0ZS10aW1lc3RhbXAtZm9ybWF0Jy4KCihkZWZ1biBvcmctZXhw b3J0LWdldC1kYXRlIChpbmZvICZvcHRpb25hbCBmbXQpCiAgIlJldHVybiBkYXRlIHZhbHVlIGZv ciB0aGUgY3VycmVudCBkb2N1bWVudC4KCklORk8gaXMgYSBwbGlzdCB1c2VkIGFzIGEgY29tbXVu aWNhdGlvbiBjaGFubmVsLiAgRk1ULCB3aGVuCm5vbi1uaWwsIGlzIGEgdGltZSBmb3JtYXQgc3Ry aW5nIHRoYXQgd2lsbCBiZSBhcHBsaWVkIG9uIHRoZSBkYXRlCmlmIGl0IGNvbnNpc3RzIGluIGEg c2luZ2xlIHRpbWVzdGFtcCBvYmplY3QuICBJdCBkZWZhdWx0cyB0bwpgb3JnLWV4cG9ydC1kYXRl LXRpbWVzdGFtcC1mb3JtYXQnIHdoZW4gbmlsLgoKQSBwcm9wZXIgZGF0ZSBjYW4gYmUgYSBzZWNv bmRhcnkgc3RyaW5nLCBhIHN0cmluZyBvciBuaWwuICBJdCBpcwptZWFudCB0byBiZSB0cmFuc2xh dGVkIHdpdGggYG9yZy1leHBvcnQtZGF0YScgb3IgYWxpa2UuIgogIChsZXQgKChkYXRlIChwbGlz dC1nZXQgaW5mbyA6ZGF0ZSkpCgkoZm10IChvciBmbXQgb3JnLWV4cG9ydC1kYXRlLXRpbWVzdGFt cC1mb3JtYXQpKSkKICAgIChjb25kICgobm90IGRhdGUpIG5pbCkKCSAgKChhbmQgZm10CgkJKG5v dCAoY2RyIGRhdGUpKQoJCShlcSAob3JnLWVsZW1lbnQtdHlwZSAoY2FyIGRhdGUpKSAndGltZXN0 YW1wKSkKCSAgIChvcmctdGltZXN0YW1wLWZvcm1hdCAoY2FyIGRhdGUpIGZtdCkpCgkgICh0IGRh dGUpKSkpCgoKOzs7OyBGb3IgTGlua3MKOzsKOzsgYG9yZy1leHBvcnQtY3VzdG9tLXByb3RvY29s LW1heWJlJyBoYW5kbGVzIGN1c3RvbSBwcm90b2NvbCBkZWZpbmVkCjs7IGluIGBvcmctbGluay1w YXJhbWV0ZXJzJy4KOzsKOzsgYG9yZy1leHBvcnQtZ2V0LWNvZGVyZWYtZm9ybWF0JyByZXR1cm5z IGFuIGFwcHJvcHJpYXRlIGZvcm1hdAo7OyBzdHJpbmcgZm9yIGNvZGVyZWZzLgo7Owo7OyBgb3Jn LWV4cG9ydC1pbmxpbmUtaW1hZ2UtcCcgcmV0dXJucyBhIG5vbi1uaWwgdmFsdWUgd2hlbiB0aGUg bGluawo7OyBwcm92aWRlZCBzaG91bGQgYmUgY29uc2lkZXJlZCBhcyBhbiBpbmxpbmUgaW1hZ2Uu Cjs7Cjs7IGBvcmctZXhwb3J0LXJlc29sdmUtZnV6enktbGluaycgc2VhcmNoZXMgZGVzdGluYXRp b24gb2YgZnV6enkgbGlua3MKOzsgKGkuZS4gbGlua3Mgd2l0aCAiZnV6enkiIGFzIHR5cGUpIHdp dGhpbiB0aGUgcGFyc2VkIHRyZWUsIGFuZAo7OyByZXR1cm5zIGFuIGFwcHJvcHJpYXRlIHVuaXF1 ZSBpZGVudGlmaWVyLgo7Owo7OyBgb3JnLWV4cG9ydC1yZXNvbHZlLWlkLWxpbmsnIHJldHVybnMg dGhlIGZpcnN0IGhlYWRsaW5lIHdpdGgKOzsgc3BlY2lmaWVkIGlkIG9yIGN1c3RvbS1pZCBpbiBw YXJzZSB0cmVlLCB0aGUgcGF0aCB0byB0aGUgZXh0ZXJuYWwKOzsgZmlsZSB3aXRoIHRoZSBpZC4K OzsKOzsgYG9yZy1leHBvcnQtcmVzb2x2ZS1saW5rJyBzZWFyY2hlcyBmb3IgdGhlIGRlc3RpbmF0 aW9uIG9mIGEgbGluawo7OyB3aXRoaW4gdGhlIHBhcnNlZCB0cmVlIGFuZCByZXR1cm5zIHRoZSBl bGVtZW50Lgo7Owo7OyBgb3JnLWV4cG9ydC1yZXNvbHZlLWNvZGVyZWYnIGFzc29jaWF0ZXMgYSBy ZWZlcmVuY2UgdG8gYSBsaW5lCjs7IG51bWJlciBpbiB0aGUgZWxlbWVudCBpdCBiZWxvbmdzLCBv ciByZXR1cm5zIHRoZSByZWZlcmVuY2UgaXRzZWxmCjs7IHdoZW4gdGhlIGVsZW1lbnQgaXNuJ3Qg bnVtYmVyZWQuCjs7Cjs7IGBvcmctZXhwb3J0LWZpbGUtdXJpJyBleHBhbmRzIGEgZmlsZW5hbWUg YXMgc3RvcmVkIGluIDpwYXRoIHZhbHVlCjs7ICBvZiBhICJmaWxlIiBsaW5rIGludG8gYSBmaWxl IFVSSS4KOzsKOzsgQnJva2VuIGxpbmtzIHJhaXNlIGEgYG9yZy1saW5rLWJyb2tlbicgZXJyb3Is IHdoaWNoIGlzIGNhdWdodCBieQo7OyBgb3JnLWV4cG9ydC1kYXRhJyBmb3IgZnVydGhlciBwcm9j ZXNzaW5nLCBkZXBlbmRpbmcgb24KOzsgYG9yZy1leHBvcnQtd2l0aC1icm9rZW4tbGlua3MnIHZh bHVlLgoKKG9yZy1kZWZpbmUtZXJyb3IgJ29yZy1saW5rLWJyb2tlbiAiVW5hYmxlIHRvIHJlc29s dmUgbGluazsgYWJvcnRpbmciKQoKKGRlZnVuIG9yZy1leHBvcnQtY3VzdG9tLXByb3RvY29sLW1h eWJlIChsaW5rIGRlc2MgYmFja2VuZCAmb3B0aW9uYWwgaW5mbykKICAiVHJ5IGV4cG9ydGluZyBM SU5LIG9iamVjdCB3aXRoIGEgZGVkaWNhdGVkIGZ1bmN0aW9uLgoKREVTQyBpcyBpdHMgZGVzY3Jp cHRpb24sIGFzIGEgc3RyaW5nLCBvciBuaWwuICBCQUNLRU5EIGlzIHRoZQpiYWNrLWVuZCB1c2Vk IGZvciBleHBvcnQsIGFzIGEgc3ltYm9sLgoKUmV0dXJuIG91dHB1dCBhcyBhIHN0cmluZywgb3Ig bmlsIGlmIG5vIHByb3RvY29sIGhhbmRsZXMgTElOSy4KCkEgY3VzdG9tIHByb3RvY29sIGhhcyBw cmVjZWRlbmNlIG92ZXIgcmVndWxhciBiYWNrLWVuZCBleHBvcnQuClRoZSBmdW5jdGlvbiBpZ25v cmVzIGxpbmtzIHdpdGggYW4gaW1wbGljaXQgdHlwZSAoZS5nLiwKXCJjdXN0b20taWRcIikuIgog IChsZXQgKCh0eXBlIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlwZSBsaW5rKSkpCiAgICAodW5s ZXNzIChvciAobWVtYmVyIHR5cGUgJygiY29kZXJlZiIgImN1c3RvbS1pZCIgImZ1enp5IiAicmFk aW8iIG5pbCkpCgkJKG5vdCBiYWNrZW5kKSkKICAgICAgKGxldCAoKHByb3RvY29sIChvcmctbGlu ay1nZXQtcGFyYW1ldGVyIHR5cGUgOmV4cG9ydCkpCgkgICAgKHBhdGggKG9yZy1lbGVtZW50LXBy b3BlcnR5IDpwYXRoIGxpbmspKSkKCShhbmQgKGZ1bmN0aW9ucCBwcm90b2NvbCkKCSAgICAgKGNv bmRpdGlvbi1jYXNlIG5pbAoJCSAoZnVuY2FsbCBwcm90b2NvbCBwYXRoIGRlc2MgYmFja2VuZCBp bmZvKQoJICAgICAgIDs7IFhYWDogVGhlIGZ1bmN0aW9uIHVzZWQgKDwgT3JnIDkuNCkgdG8gYWNj ZXB0IG9ubHkKCSAgICAgICA7OyB0aHJlZSBtYW5kYXRvcnkgYXJndW1lbnRzLiAgVHlwZS1zcGVj aWZpYyBgOmV4cG9ydCcKCSAgICAgICA7OyBmdW5jdGlvbnMgaW4gdGhlIHdpbGQgbWF5IG5vdCBo YW5kbGUgY3VycmVudAoJICAgICAgIDs7IHNpZ25hdHVyZS4gIFByb3ZpZGUgYmFja3dhcmQgY29t cGF0aWJpbGl0eSBzdXBwb3J0CgkgICAgICAgOzsgZm9yIHRoZW0uCgkgICAgICAgKHdyb25nLW51 bWJlci1vZi1hcmd1bWVudHMKCQkoZnVuY2FsbCBwcm90b2NvbCBwYXRoIGRlc2MgYmFja2VuZCkp KSkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1nZXQtY29kZXJlZi1mb3JtYXQgKHBhdGggZGVzYykK ICAiUmV0dXJuIGZvcm1hdCBzdHJpbmcgZm9yIGNvZGUgcmVmZXJlbmNlIGxpbmsuClBBVEggaXMg dGhlIGxpbmsgcGF0aC4gIERFU0MgaXMgaXRzIGRlc2NyaXB0aW9uLiIKICAoc2F2ZS1tYXRjaC1k YXRhCiAgICAoY29uZCAoKG5vdCBkZXNjKSAiJXMiKQoJICAoKHN0cmluZy1tYXRjaCAocmVnZXhw LXF1b3RlIChjb25jYXQgIigiIHBhdGggIikiKSkgZGVzYykKCSAgIChyZXBsYWNlLW1hdGNoICIl cyIgdCB0IGRlc2MpKQoJICAodCBkZXNjKSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtaW5saW5lLWlt YWdlLXAgKGxpbmsgJm9wdGlvbmFsIHJ1bGVzKQogICJOb24tbmlsIGlmIExJTksgb2JqZWN0IHBv aW50cyB0byBhbiBpbmxpbmUgaW1hZ2UuCgpPcHRpb25hbCBhcmd1bWVudCBpcyBhIHNldCBvZiBS VUxFUyBkZWZpbmluZyBpbmxpbmUgaW1hZ2VzLiAgSXQKaXMgYW4gYWxpc3Qgd2hlcmUgYXNzb2Np YXRpb25zIGhhdmUgdGhlIGZvbGxvd2luZyBzaGFwZToKCiAgKFRZUEUgLiBSRUdFWFApCgpBcHBs eWluZyBhIHJ1bGUgbWVhbnMgYXBwbHkgUkVHRVhQIGFnYWluc3QgTElOSydzIHBhdGggd2hlbiBp dHMKdHlwZSBpcyBUWVBFLiAgVGhlIGZ1bmN0aW9uIHdpbGwgcmV0dXJuIGEgbm9uLW5pbCB2YWx1 ZSBpZiBhbnkgb2YKdGhlIHByb3ZpZGVkIHJ1bGVzIGlzIG5vbi1uaWwuICBUaGUgZGVmYXVsdCBy dWxlIGlzCmBvcmctZXhwb3J0LWRlZmF1bHQtaW5saW5lLWltYWdlLXJ1bGUnLgoKVGhpcyBvbmx5 IGFwcGxpZXMgdG8gbGlua3Mgd2l0aG91dCBhIGRlc2NyaXB0aW9uLiIKICAoYW5kIChub3QgKG9y Zy1lbGVtZW50LWNvbnRlbnRzIGxpbmspKQogICAgICAgKGxldCAoKGNhc2UtZm9sZC1zZWFyY2gg dCkpCgkgKGNsLXNvbWUgKGxhbWJkYSAocnVsZSkKCQkgICAgKGFuZCAoc3RyaW5nPSAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOnR5cGUgbGluaykgKGNhciBydWxlKSkKCQkJIChzdHJpbmctbWF0Y2gt cCAoY2RyIHJ1bGUpCgkJCQkJIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cGF0aCBsaW5rKSkpKQoJ CSAgKG9yIHJ1bGVzIG9yZy1leHBvcnQtZGVmYXVsdC1pbmxpbmUtaW1hZ2UtcnVsZSkpKSkpCgoo ZGVmdW4gb3JnLWV4cG9ydC1pbnNlcnQtaW1hZ2UtbGlua3MgKGRhdGEgaW5mbyAmb3B0aW9uYWwg cnVsZXMpCiAgIkluc2VydCBpbWFnZSBsaW5rcyBpbiBEQVRBLgoKT3JnIHN5bnRheCBkb2VzIG5v dCBzdXBwb3J0IG5lc3RlZCBsaW5rcy4gIE5ldmVydGhlbGVzcywgc29tZQpleHBvcnQgYmFjay1l bmRzIHN1cHBvcnQgaW1hZ2VzIGFzIGRlc2NyaXB0aW9ucyBvZiBsaW5rcy4gIFNpbmNlCmltYWdl cyBhcmUgcmVhbGx5IGxpbmtzIHRvIGltYWdlIGZpbGVzLCB3ZSBuZWVkIHRvIG1ha2UgYW4KZXhj ZXB0aW9uIGFib3V0IGxpbmtzIG5lc3RpbmcuCgpUaGlzIGZ1bmN0aW9uIHJlY29nbml6ZXMgbGlu a3Mgd2hvc2UgY29udGVudHMgYXJlIHJlYWxseSBpbWFnZXMKYW5kIHR1cm4gdGhlbSBpbnRvIHBy b3BlciBuZXN0ZWQgbGlua3MuICBJdCBpcyBtZWFudCB0byBiZSB1c2VkCmFzIGEgcGFyc2UgdHJl ZSBmaWx0ZXIgaW4gYmFjay1lbmRzIHN1cHBvcnRpbmcgc3VjaCBjb25zdHJ1Y3RzLgoKREFUQSBp cyBhIHBhcnNlIHRyZWUuICBJTkZPIGlzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBleHBvcnQK cHJvY2VzcywgYXMgYSBwbGlzdC4KCkEgZGVzY3JpcHRpb24gaXMgYSB2YWxpZCBpbWFnZXMgaWYg aXQgbWF0Y2hlcyBhbnkgcnVsZSBpbiBSVUxFUywKaWYgbm9uLW5pbCwgb3IgYG9yZy1leHBvcnQt ZGVmYXVsdC1pbmxpbmUtaW1hZ2UtcnVsZScgb3RoZXJ3aXNlLgpTZWUgYG9yZy1leHBvcnQtaW5s aW5lLWltYWdlLXAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZQpzdHJ1Y3R1cmUgb2Yg UlVMRVMuCgpSZXR1cm4gbW9kaWZpZWQgREFUQS4iCiAgKGxldCAoKGxpbmstcmUgKGZvcm1hdCAi XFxgXFwoPzolc1xcfCVzXFwpXFwnIgoJCQkgb3JnLWxpbmstcGxhaW4tcmUKCQkJIG9yZy1saW5r LWFuZ2xlLXJlKSkKCShjYXNlLWZvbGQtc2VhcmNoIHQpKQogICAgKG9yZy1lbGVtZW50LW1hcCBk YXRhICdsaW5rCiAgICAgIChsYW1iZGEgKGwpCgkobGV0ICgoY29udGVudHMgKG9yZy1lbGVtZW50 LWludGVycHJldC1kYXRhIChvcmctZWxlbWVudC1jb250ZW50cyBsKSkpKQoJICAod2hlbiAoYW5k IChvcmctc3RyaW5nLW53LXAgY29udGVudHMpCgkJICAgICAoc3RyaW5nLW1hdGNoIGxpbmstcmUg Y29udGVudHMpKQoJICAgIChsZXQgKCh0eXBlIChtYXRjaC1zdHJpbmcgMSBjb250ZW50cykpCgkJ ICAocGF0aCAobWF0Y2gtc3RyaW5nIDIgY29udGVudHMpKSkKCSAgICAgICh3aGVuIChjbC1zb21l IChsYW1iZGEgKHJ1bGUpCgkJCSAgICAgICAoYW5kIChzdHJpbmc9IHR5cGUgKGNhciBydWxlKSkK CQkJCSAgICAoc3RyaW5nLW1hdGNoLXAgKGNkciBydWxlKSBwYXRoKSkpCgkJCSAgICAgKG9yIHJ1 bGVzIG9yZy1leHBvcnQtZGVmYXVsdC1pbmxpbmUtaW1hZ2UtcnVsZSkpCgkJOzsgUmVwbGFjZSBj b250ZW50cyB3aXRoIGltYWdlIGxpbmsuCgkJKG9yZy1lbGVtZW50LWFkb3B0LWVsZW1lbnRzCgkJ ICAgIChvcmctZWxlbWVudC1zZXQtY29udGVudHMgbCBuaWwpCgkJICAod2l0aC10ZW1wLWJ1ZmZl cgoJCSAgICAoc2F2ZS1leGN1cnNpb24gKGluc2VydCBjb250ZW50cykpCgkJICAgIChvcmctZWxl bWVudC1saW5rLXBhcnNlcikpKSkpKSkpCiAgICAgIGluZm8gbmlsIG5pbCB0KSkKICBkYXRhKQoK KGRlZnVuIG9yZy1leHBvcnQtcmVzb2x2ZS1jb2RlcmVmIChyZWYgaW5mbykKICAiUmVzb2x2ZSBh IGNvZGUgcmVmZXJlbmNlIFJFRi4KCklORk8gaXMgYSBwbGlzdCB1c2VkIGFzIGEgY29tbXVuaWNh dGlvbiBjaGFubmVsLgoKUmV0dXJuIGFzc29jaWF0ZWQgbGluZSBudW1iZXIgaW4gc291cmNlIGNv ZGUsIG9yIFJFRiBpdHNlbGYsCmRlcGVuZGluZyBvbiBzcmMtYmxvY2sgb3IgZXhhbXBsZSBlbGVt ZW50J3Mgc3dpdGNoZXMuICBUaHJvdyBhbgplcnJvciBpZiBubyBibG9jayBjb250YWlucyBSRUYu IgogIChvciAob3JnLWVsZW1lbnQtbWFwIChwbGlzdC1nZXQgaW5mbyA6cGFyc2UtdHJlZSkgJyhl eGFtcGxlLWJsb2NrIHNyYy1ibG9jaykKCShsYW1iZGEgKGVsKQoJICAod2l0aC10ZW1wLWJ1ZmZl cgoJICAgIChpbnNlcnQgKG9yZy10cmltIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dmFsdWUgZWwp KSkKCSAgICAobGV0KiAoKGxhYmVsLWZtdCAob3IgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpsYWJl bC1mbXQgZWwpCgkJCQkgIG9yZy1jb2RlcmVmLWxhYmVsLWZvcm1hdCkpCgkJICAgKHJlZi1yZSAo b3JnLXNyYy1jb2RlcmVmLXJlZ2V4cCBsYWJlbC1mbXQgcmVmKSkpCgkgICAgICA7OyBFbGVtZW50 IGNvbnRhaW5pbmcgUkVGIGlzIGZvdW5kLiAgUmVzb2x2ZSBpdCB0bwoJICAgICAgOzsgZWl0aGVy IGEgbGFiZWwgb3IgYSBsaW5lIG51bWJlciwgYXMgbmVlZGVkLgoJICAgICAgKHdoZW4gKHJlLXNl YXJjaC1iYWNrd2FyZCByZWYtcmUgbmlsIHQpCgkJKGlmIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6 dXNlLWxhYmVscyBlbCkgcmVmCgkJICAoKyAob3IgKG9yZy1leHBvcnQtZ2V0LWxvYyBlbCBpbmZv KSAwKQoJCSAgICAgKGxpbmUtbnVtYmVyLWF0LXBvcykpKSkpKSkKCWluZm8gJ2ZpcnN0LW1hdGNo KQogICAgICAoc2lnbmFsICdvcmctbGluay1icm9rZW4gKGxpc3QgcmVmKSkpKQoKKGRlZnVuIG9y Zy1leHBvcnQtc2VhcmNoLWNlbGxzIChkYXR1bSkKICAiTGlzdCBzZWFyY2ggY2VsbHMgZm9yIGVs ZW1lbnQgb3Igb2JqZWN0IERBVFVNLgoKQSBzZWFyY2ggY2VsbCBmb2xsb3dzIHRoZSBwYXR0ZXJu IChUWVBFIC4gU0VBUkNIKSB3aGVyZQoKICBUWVBFIGlzIGEgc3ltYm9sIGFtb25nIGBoZWFkbGlu ZScsIGBjdXN0b20taWQnLCBgdGFyZ2V0JyBhbmQKICBgb3RoZXInLgoKICBTRUFSQ0ggaXMgdGhl IHN0cmluZyBhIGxpbmsgaXMgZXhwZWN0ZWQgdG8gbWF0Y2guICBNb3JlCiAgYWNjdXJhdGVseSwg aXQgaXMKCiAgICAtIGhlYWRsaW5lJ3MgdGl0bGUsIGFzIGEgbGlzdCBvZiBzdHJpbmdzLCBpZiBU WVBFIGlzCiAgICAgIGBoZWFkbGluZScuCgogICAgLSBDVVNUT01fSUQgdmFsdWUsIGFzIGEgc3Ry aW5nLCBpZiBUWVBFIGlzIGBjdXN0b20taWQnLgoKICAgIC0gdGFyZ2V0J3Mgb3IgcmFkaW8tdGFy Z2V0J3MgbmFtZSBhcyBhIGxpc3Qgb2Ygc3RyaW5ncyBpZgogICAgICBUWVBFIGlzIGB0YXJnZXQn LgoKICAgIC0gTkFNRSBhZmZpbGlhdGVkIGtleXdvcmQgaWYgVFlQRSBpcyBgb3RoZXInLgoKQSBz ZWFyY2ggY2VsbCBpcyB0aGUgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24gb2YgYSBmdXp6eSBsaW5r LiAgSXQKaWdub3JlcyB3aGl0ZSBzcGFjZXMgYW5kIHN0YXRpc3RpY3MgY29va2llcywgaWYgYXBw bGljYWJsZS4iCiAgKHBjYXNlIChvcmctZWxlbWVudC10eXBlIGRhdHVtKQogICAgKGBoZWFkbGlu ZQogICAgIChsZXQgKCh0aXRsZSAoc3BsaXQtc3RyaW5nCgkJICAgKHJlcGxhY2UtcmVnZXhwLWlu LXN0cmluZwoJCSAgICAiXFxbWzAtOV0qXFwoPzolXFx8L1swLTldKlxcKVxcXSIgIiAiCgkJICAg IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cmF3LXZhbHVlIGRhdHVtKSkpKSkKICAgICAgIChkZWxx IG5pbAoJICAgICAobGlzdAoJICAgICAgKGNvbnMgJ2hlYWRsaW5lIHRpdGxlKQoJICAgICAgKGNv bnMgJ290aGVyIHRpdGxlKQoJICAgICAgKGxldCAoKGN1c3RvbS1pZCAob3JnLWVsZW1lbnQtcHJv cGVydHkgOmN1c3RvbS1pZCBkYXR1bSkpKQoJCShhbmQgY3VzdG9tLWlkIChjb25zICdjdXN0b20t aWQgY3VzdG9tLWlkKSkpKSkpKQogICAgKGB0YXJnZXQKICAgICAobGlzdCAoY29ucyAndGFyZ2V0 IChzcGxpdC1zdHJpbmcgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp2YWx1ZSBkYXR1bSkpKSkpCiAg ICAoKGFuZCAobGV0IG5hbWUgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpuYW1lIGRhdHVtKSkKCSAg KGd1YXJkIG5hbWUpKQogICAgIChsaXN0IChjb25zICdvdGhlciAoc3BsaXQtc3RyaW5nIG5hbWUp KSkpCiAgICAoXyBuaWwpKSkKCihkZWZ1biBvcmctZXhwb3J0LXN0cmluZy10by1zZWFyY2gtY2Vs bCAocykKICAiUmV0dXJuIHNlYXJjaCBjZWxscyBhc3NvY2lhdGVkIHRvIHN0cmluZyBTLgpTIGlz IGVpdGhlciB0aGUgcGF0aCBvZiBhIGZ1enp5IGxpbmsgb3IgYSBzZWFyY2ggb3B0aW9uLCBpLmUu LCBpdAp0cmllcyB0byBtYXRjaCBlaXRoZXIgYSBoZWFkbGluZSAodGhyb3VnaCBjdXN0b20gSUQg b3IgdGl0bGUpLAphIHRhcmdldCBvciBhIG5hbWVkIGVsZW1lbnQuIgogIChwY2FzZSAoc3RyaW5n LXRvLWNoYXIgcykKICAgICg/KiAobGlzdCAoY29ucyAnaGVhZGxpbmUgKHNwbGl0LXN0cmluZyAo c3Vic3RyaW5nIHMgMSkpKSkpCiAgICAoPyMgKGxpc3QgKGNvbnMgJ2N1c3RvbS1pZCAoc3Vic3Ry aW5nIHMgMSkpKSkKICAgICgobGV0IHNlYXJjaCAoc3BsaXQtc3RyaW5nIHMpKQogICAgIChsaXN0 IChjb25zICd0YXJnZXQgc2VhcmNoKSAoY29ucyAnb3RoZXIgc2VhcmNoKSkpKSkKCihkZWZ1biBv cmctZXhwb3J0LW1hdGNoLXNlYXJjaC1jZWxsLXAgKGRhdHVtIGNlbGxzKQogICJOb24tbmlsIHdo ZW4gREFUVU0gbWF0Y2hlcyBzZWFyY2ggY2VsbHMgQ0VMTFMuCkRBVFVNIGlzIGFuIGVsZW1lbnQg b3Igb2JqZWN0LiAgQ0VMTFMgaXMgYSBsaXN0IG9mIHNlYXJjaCBjZWxscywKYXMgcmV0dXJuZWQg YnkgYG9yZy1leHBvcnQtc2VhcmNoLWNlbGxzJy4iCiAgKGxldCAoKHRhcmdldHMgKG9yZy1leHBv cnQtc2VhcmNoLWNlbGxzIGRhdHVtKSkpCiAgICAoYW5kIHRhcmdldHMgKGNsLXNvbWUgKGxhbWJk YSAoY2VsbCkgKG1lbWJlciBjZWxsIHRhcmdldHMpKSBjZWxscykpKSkKCihkZWZ1biBvcmctZXhw b3J0LXJlc29sdmUtZnV6enktbGluayAobGluayBpbmZvICZyZXN0IHBzZXVkby10eXBlcykKICAi UmV0dXJuIExJTksgZGVzdGluYXRpb24uCgpJTkZPIGlzIGEgcGxpc3QgaG9sZGluZyBjb250ZXh0 dWFsIGluZm9ybWF0aW9uLgoKUmV0dXJuIHZhbHVlIGNhbiBiZSBhbiBvYmplY3Qgb3IgYW4gZWxl bWVudDoKCi0gSWYgTElOSyBwYXRoIG1hdGNoZXMgYSB0YXJnZXQgb2JqZWN0IChpLmUuIDw8cGF0 aD4+KSByZXR1cm4gaXQuCgotIElmIExJTksgcGF0aCBleGFjdGx5IG1hdGNoZXMgdGhlIG5hbWUg YWZmaWxpYXRlZCBrZXl3b3JkCiAgKGkuZS4gIytOQU1FOiBwYXRoKSBvZiBhbiBlbGVtZW50LCBy ZXR1cm4gdGhhdCBlbGVtZW50LgoKLSBJZiBMSU5LIHBhdGggZXhhY3RseSBtYXRjaGVzIGFueSBo ZWFkbGluZSBuYW1lLCByZXR1cm4gdGhhdAogIGVsZW1lbnQuCgotIE90aGVyd2lzZSwgdGhyb3cg YW4gZXJyb3IuCgpQU0VVRE8tVFlQRVMgYXJlIHBzZXVkby1lbGVtZW50cyB0eXBlcywgaS5lLiwg ZWxlbWVudHMgZGVmaW5lZApzcGVjaWZpY2FsbHkgaW4gYW4gZXhwb3J0IGJhY2stZW5kLCB0aGF0 IGNvdWxkIGhhdmUgYSBuYW1lCmFmZmlsaWF0ZWQga2V5d29yZC4KCkFzc3VtZSBMSU5LIHR5cGUg aXMgXCJmdXp6eVwiLiAgV2hpdGUgc3BhY2VzIGFyZSBub3QKc2lnbmlmaWNhbnQuIgogIChsZXQq ICgoc2VhcmNoLWNlbGxzIChvcmctZXhwb3J0LXN0cmluZy10by1zZWFyY2gtY2VsbAoJCQkob3Jn LWVsZW1lbnQtcHJvcGVydHkgOnBhdGggbGluaykpKQoJIChsaW5rLWNhY2hlIChvciAocGxpc3Qt Z2V0IGluZm8gOnJlc29sdmUtZnV6enktbGluay1jYWNoZSkKCQkJIChsZXQgKCh0YWJsZSAobWFr ZS1oYXNoLXRhYmxlIDp0ZXN0ICMnZXEpKSkKCQkJICAgKHBsaXN0LXB1dCBpbmZvIDpyZXNvbHZl LWZ1enp5LWxpbmstY2FjaGUgdGFibGUpCgkJCSAgIHRhYmxlKSkpCgkgKGNhY2hlZCAoZ2V0aGFz aCBzZWFyY2gtY2VsbHMgbGluay1jYWNoZSAnbm90LWZvdW5kKSkpCiAgICAoaWYgKG5vdCAoZXEg Y2FjaGVkICdub3QtZm91bmQpKSBjYWNoZWQKICAgICAgKGxldCAoKG1hdGNoZXMKCSAgICAgKG9y Zy1lbGVtZW50LW1hcCAocGxpc3QtZ2V0IGluZm8gOnBhcnNlLXRyZWUpCgkJIChhcHBlbmQgcHNl dWRvLXR5cGVzICcodGFyZ2V0KSBvcmctZWxlbWVudC1hbGwtZWxlbWVudHMpCgkgICAgICAgKGxh bWJkYSAoZGF0dW0pCgkJIChhbmQgKG9yZy1leHBvcnQtbWF0Y2gtc2VhcmNoLWNlbGwtcCBkYXR1 bSBzZWFyY2gtY2VsbHMpCgkJICAgICAgZGF0dW0pKSkpKQoJKHVubGVzcyBtYXRjaGVzCgkgIChz aWduYWwgJ29yZy1saW5rLWJyb2tlbiAobGlzdCAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnBhdGgg bGluaykpKSkKCShwdXRoYXNoCgkgc2VhcmNoLWNlbGxzCgkgOzsgVGhlcmUgY2FuIGJlIG11bHRp cGxlIG1hdGNoZXMgZm9yIHVuLXR5cGVkIHNlYXJjaGVzLCBpLmUuLAoJIDs7IGZvciBzZWFyY2hl cyBub3Qgc3RhcnRpbmcgd2l0aCAjIG9yICouICBJbiB0aGlzIGNhc2UsCgkgOzsgcHJpb3JpdGl6 ZSB0YXJnZXRzIGFuZCBuYW1lcyBvdmVyIGhlYWRsaW5lIHRpdGxlcy4KCSA7OyBNYXRjaGluZyBi b3RoIGEgbmFtZSBhbmQgYSB0YXJnZXQgaXMgbm90IHZhbGlkLCBhbmQKCSA7OyB0aGVyZWZvcmUg dW5kZWZpbmVkLgoJIChvciAoY2wtc29tZSAobGFtYmRhIChkYXR1bSkKCQkJKGFuZCAobm90IChl cSAob3JnLWVsZW1lbnQtdHlwZSBkYXR1bSkgJ2hlYWRsaW5lKSkKCQkJICAgICBkYXR1bSkpCgkJ ICAgICAgbWF0Y2hlcykKCSAgICAgKGNhciBtYXRjaGVzKSkKCSBsaW5rLWNhY2hlKSkpKSkKCihk ZWZ1biBvcmctZXhwb3J0LXJlc29sdmUtaWQtbGluayAobGluayBpbmZvKQogICJSZXR1cm4gaGVh ZGxpbmUgcmVmZXJlbmNlZCBhcyBMSU5LIGRlc3RpbmF0aW9uLgoKSU5GTyBpcyBhIHBsaXN0IHVz ZWQgYXMgYSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCgpSZXR1cm4gdmFsdWUgY2FuIGJlIHRoZSBo ZWFkbGluZSBlbGVtZW50IG1hdGNoZWQgaW4gY3VycmVudCBwYXJzZQp0cmVlIG9yIGEgZmlsZSBu YW1lLiAgQXNzdW1lIExJTksgdHlwZSBpcyBlaXRoZXIgXCJpZFwiIG9yClwiY3VzdG9tLWlkXCIu ICBUaHJvdyBhbiBlcnJvciBpZiBubyBtYXRjaCBpcyBmb3VuZC4iCiAgKGxldCAoKGlkIChvcmct ZWxlbWVudC1wcm9wZXJ0eSA6cGF0aCBsaW5rKSkpCiAgICA7OyBGaXJzdCBjaGVjayBpZiBpZCBp cyB3aXRoaW4gdGhlIGN1cnJlbnQgcGFyc2UgdHJlZS4KICAgIChvciAob3JnLWVsZW1lbnQtbWFw IChwbGlzdC1nZXQgaW5mbyA6cGFyc2UtdHJlZSkgJ2hlYWRsaW5lCgkgIChsYW1iZGEgKGhlYWRs aW5lKQoJICAgICh3aGVuIChvciAoZXF1YWwgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpJRCBoZWFk bGluZSkgaWQpCgkJICAgICAgKGVxdWFsIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Q1VTVE9NX0lE IGhlYWRsaW5lKSBpZCkpCgkgICAgICBoZWFkbGluZSkpCgkgIGluZm8gJ2ZpcnN0LW1hdGNoKQoJ OzsgT3RoZXJ3aXNlLCBsb29rIGZvciBleHRlcm5hbCBmaWxlcy4KCShjZHIgKGFzc29jIGlkIChw bGlzdC1nZXQgaW5mbyA6aWQtYWxpc3QpKSkKCShzaWduYWwgJ29yZy1saW5rLWJyb2tlbiAobGlz dCBpZCkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1yZXNvbHZlLXJhZGlvLWxpbmsgKGxpbmsgaW5m bykKICAiUmV0dXJuIHJhZGlvLXRhcmdldCBvYmplY3QgcmVmZXJlbmNlZCBhcyBMSU5LIGRlc3Rp bmF0aW9uLgoKSU5GTyBpcyBhIHBsaXN0IHVzZWQgYXMgYSBjb21tdW5pY2F0aW9uIGNoYW5uZWwu CgpSZXR1cm4gdmFsdWUgY2FuIGJlIGEgcmFkaW8tdGFyZ2V0IG9iamVjdCBvciBuaWwuICBBc3N1 bWUgTElOSwpoYXMgdHlwZSBcInJhZGlvXCIuIgogIChsZXQgKChwYXRoIChyZXBsYWNlLXJlZ2V4 cC1pbi1zdHJpbmcKCSAgICAgICAiWyBcclx0XG5dKyIgIiAiIChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6cGF0aCBsaW5rKSkpKQogICAgKG9yZy1lbGVtZW50LW1hcCAocGxpc3QtZ2V0IGluZm8gOnBh cnNlLXRyZWUpICdyYWRpby10YXJnZXQKICAgICAgKGxhbWJkYSAocmFkaW8pCgkoYW5kIChlcSAo Y29tcGFyZS1zdHJpbmdzCgkJICAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nCgkJICAgIlsgXHJc dFxuXSsiICIgIiAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnZhbHVlIHJhZGlvKSkKCQkgIG5pbCBu aWwgcGF0aCBuaWwgbmlsIHQpCgkJIHQpCgkgICAgIHJhZGlvKSkKICAgICAgaW5mbyAnZmlyc3Qt bWF0Y2gpKSkKCihkZWZ1biBvcmctZXhwb3J0LXJlc29sdmUtbGluayAobGluayBpbmZvKQogICJS ZXR1cm4gTElOSyBkZXN0aW5hdGlvbi4KCkxJTksgaXMgYSBzdHJpbmcgb3IgYSBsaW5rIG9iamVj dC4KCklORk8gaXMgYSBwbGlzdCBob2xkaW5nIGNvbnRleHR1YWwgaW5mb3JtYXRpb24uCgpSZXR1 cm4gdmFsdWUgY2FuIGJlIGFuIG9iamVjdCBvciBhbiBlbGVtZW50OgoKLSBJZiBMSU5LIHBhdGgg bWF0Y2hlcyBhbiBJRCBvciBhIGN1c3RvbSBJRCwgcmV0dXJuIHRoZSBoZWFkbGluZS4KCi0gSWYg TElOSyBwYXRoIG1hdGNoZXMgYSBmdXp6eSBsaW5rLCByZXR1cm4gaXRzIGRlc3RpbmF0aW9uLgoK LSBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yLiIKICA7OyBDb252ZXJ0IHN0cmluZyBsaW5rcyB0 byBsaW5rIG9iamVjdHMuCiAgKHdoZW4gKHN0cmluZ3AgbGluaykKICAgIChzZXRxIGxpbmsgKHdp dGgtdGVtcC1idWZmZXIKCQkgKHNhdmUtZXhjdXJzaW9uCgkJICAgKGluc2VydCAob3JnLWxpbmst bWFrZS1zdHJpbmcgbGluaykpKQoJCSAob3JnLWVsZW1lbnQtbGluay1wYXJzZXIpKSkpCiAgKHBj YXNlIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlwZSBsaW5rKQogICAgKChvciAiY3VzdG9tLWlk IiAiaWQiKSAob3JnLWV4cG9ydC1yZXNvbHZlLWlkLWxpbmsgbGluayBpbmZvKSkKICAgICgiZnV6 enkiIChvcmctZXhwb3J0LXJlc29sdmUtZnV6enktbGluayBsaW5rIGluZm8pKQogICAgKF8gKHNp Z25hbCAnb3JnLWxpbmstYnJva2VuIChsaXN0IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cGF0aCBs aW5rKSkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1maWxlLXVyaSAoZmlsZW5hbWUpCiAgIlJldHVy biBmaWxlIFVSSSBhc3NvY2lhdGVkIHRvIEZJTEVOQU1FLiIKICAoY29uZCAoKHN0cmluZy1wcmVm aXgtcCAiLy8iIGZpbGVuYW1lKSAoY29uY2F0ICJmaWxlOiIgZmlsZW5hbWUpKQoJKChub3QgKGZp bGUtbmFtZS1hYnNvbHV0ZS1wIGZpbGVuYW1lKSkgZmlsZW5hbWUpCgkoKGZpbGUtcmVtb3RlLXAg ZmlsZW5hbWUpIChjb25jYXQgImZpbGU6LyIgZmlsZW5hbWUpKQoJKHQKCSAobGV0ICgoZnVsbG5h bWUgKGV4cGFuZC1maWxlLW5hbWUgZmlsZW5hbWUpKSkKCSAgIChjb25jYXQgKGlmIChzdHJpbmct cHJlZml4LXAgIi8iIGZ1bGxuYW1lKSAiZmlsZTovLyIgImZpbGU6Ly8vIikKCQkgICBmdWxsbmFt ZSkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1saW5rLXJlbW90ZS1wIChsaW5rKQogICJSZXR1cm5z IG5vbi1uaWwgaWYgdGhlIGxpbmsgcmVmZXJzIHRvIGEgcmVtb3RlIHJlc291cmNlLiIKICAob3Ig KG1lbWJlciAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnR5cGUgbGluaykgJygiaHR0cCIgImh0dHBz IiAiZnRwIikpCiAgICAgIChhbmQgKHN0cmluZz0gKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0eXBl IGxpbmspICJmaWxlIikKICAgICAgICAgICAoZmlsZS1yZW1vdGUtcCAob3JnLWVsZW1lbnQtcHJv cGVydHkgOnBhdGggbGluaykpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1saW5rLS1yZW1vdGUtbG9j YWwtY29weSAobGluaykKICAiRG93bmxvYWQgdGhlIHJlbW90ZSByZXNvdXJjZSBzcGVjaWZpZWQg YnkgTElOSywgYW5kIHJldHVybiBpdHMgbG9jYWwgcGF0aC4iCiAgOzsgVE9ETyB3b3JrIHRoaXMg aW50byBvbC5lbCBhcyBhIGxpbmsgcGFyYW1ldGVyLCBzYXkgOmRvd25sb2FkLgogIChsZXQqICgo bG9jYXRpb24tdHlwZQogICAgICAgICAgKHBjYXNlIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlw ZSBsaW5rKQogICAgICAgICAgICAoKG9yICJodHRwIiAiaHR0cHMiICJmdHAiKSAndXJsKQogICAg ICAgICAgICAoKGFuZCAiZmlsZSIgKGd1YXJkIChmaWxlLXJlbW90ZS1wCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6cGF0aCBsaW5rKSkpKQog ICAgICAgICAgICAgJ2ZpbGUpCiAgICAgICAgICAgIChfIChlcnJvciAiQ2Fubm90IGNvcHkgJXM6 JXMgdG8gYSBsb2NhbCBmaWxlIgogICAgICAgICAgICAgICAgICAgICAgKG9yZy1lbGVtZW50LXBy b3BlcnR5IDp0eXBlIGxpbmspCiAgICAgICAgICAgICAgICAgICAgICAob3JnLWVsZW1lbnQtcHJv cGVydHkgOnBhdGggbGluaykpKSkpCiAgICAgICAgIChwYXRoCiAgICAgICAgICAocGNhc2UgbG9j YXRpb24tdHlwZQogICAgICAgICAgICAoJ3VybAogICAgICAgICAgICAgKGNvbmNhdCAob3JnLWVs ZW1lbnQtcHJvcGVydHkgOnR5cGUgbGluaykKICAgICAgICAgICAgICAgICAgICAgIjoiIChvcmct ZWxlbWVudC1wcm9wZXJ0eSA6cGF0aCBsaW5rKSkpCiAgICAgICAgICAgICgnZmlsZQogICAgICAg ICAgICAgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpwYXRoIGxpbmspKSkpKQogICAgKG9yIChvcmct cGVyc2lzdC1yZWFkIGxvY2F0aW9uLXR5cGUgcGF0aCkKICAgICAgICAob3JnLXBlcnNpc3QtcmVn aXN0ZXIgbG9jYXRpb24tdHlwZSBwYXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp3 cml0ZS1pbW1lZGlhdGVseSB0KSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtbGluay1sb2NhbGlzZSAo bGluaykKICAiQ29udmVydCByZW1vdGUgTElOSyB0byBsb2NhbCBsaW5rLgpJZiBMSU5LIHJlZmVy cyB0byBhIHJlbW90ZSByZXNvdXJjZSwgbW9kaWZ5IGl0IHRvIHBvaW50IHRvIGEgbG9jYWwKZG93 bmxvYWRlZCBjb3B5LiAgT3RoZXJ3aXNlLCByZXR1cm4gdW5jaGFuZ2VkIExJTksuIgogICh3aGVu IChvcmctZXhwb3J0LWxpbmstcmVtb3RlLXAgbGluaykKICAgIChsZXQqICgobG9jYWwtcGF0aCAo b3JnLWV4cG9ydC1saW5rLS1yZW1vdGUtbG9jYWwtY29weSBsaW5rKSkpCiAgICAgIChzZXRjZHIg bGluawogICAgICAgICAgICAgICh0aHJlYWQtZmlyc3QgKGNhZHIgbGluaykKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChwbGlzdC1wdXQgOnR5cGUgImZpbGUiKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHBsaXN0LXB1dCA6cGF0aCBsb2NhbC1wYXRoKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHBsaXN0LXB1dCA6cmF3LWxpbmsgKGNvbmNhdCAiZmlsZToiIGxvY2FsLXBh dGgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCkpKSkKICBsaW5rKQoKOzs7OyBG b3IgUmVmZXJlbmNlcwo7Owo7OyBgb3JnLWV4cG9ydC1nZXQtcmVmZXJlbmNlJyBhc3NvY2lhdGUg YSB1bmlxdWUgcmVmZXJlbmNlIGZvciBhbnkKOzsgb2JqZWN0IG9yIGVsZW1lbnQuICBJdCB1c2Vz IGBvcmctZXhwb3J0LW5ldy1yZWZlcmVuY2UnIGFuZAo7OyBgb3JnLWV4cG9ydC1mb3JtYXQtcmVm ZXJlbmNlJyB0bywgcmVzcGVjdGl2ZWx5LCBnZW5lcmF0ZSBuZXcKOzsgaW50ZXJuYWwgcmVmZXJl bmNlcyBhbmQgdHVybiB0aGVtIGludG8gYSBzdHJpbmcgc3VpdGFibGUgZm9yCjs7IG91dHB1dC4K OzsKOzsgYG9yZy1leHBvcnQtZ2V0LW9yZGluYWwnIGFzc29jaWF0ZXMgYSBzZXF1ZW5jZSBudW1i ZXIgdG8gYW55IG9iamVjdAo7OyBvciBlbGVtZW50LgoKKGRlZnVuIG9yZy1leHBvcnQtbmV3LXJl ZmVyZW5jZSAocmVmZXJlbmNlcykKICAiUmV0dXJuIGEgdW5pcXVlIHJlZmVyZW5jZSwgYW1vbmcg UkVGRVJFTkNFUy4KUkVGRVJFTkNFUyBpcyBhbiBhbGlzdCB3aG9zZSB2YWx1ZXMgYXJlIGluLXVz ZSByZWZlcmVuY2VzLCBhcwpudW1iZXJzLiAgUmV0dXJucyBhIG51bWJlciwgd2hpY2ggaXMgdGhl IGludGVybmFsIHJlcHJlc2VudGF0aW9uCm9mIGEgcmVmZXJlbmNlLiAgU2VlIGFsc28gYG9yZy1l eHBvcnQtZm9ybWF0LXJlZmVyZW5jZScuIgogIDs7IEdlbmVyYXRlIHJhbmRvbSA3IGRpZ2l0cyBo ZXhhZGVjaW1hbCBudW1iZXJzLiAgQ29sbGlzaW9ucwogIDs7IGluY3JlYXNlIGV4cG9uZW50aWFs bHkgd2l0aCB0aGUgbnVtYmVycyBvZiByZWZlcmVuY2VzLiAgSG93ZXZlciwKICA7OyB0aGUgb2Rk cyBmb3IgZW5jb3VudGVyaW5nIGF0IGxlYXN0IG9uZSBjb2xsaXNpb24gd2l0aCAxMDAwIGFjdGl2 ZQogIDs7IHJlZmVyZW5jZXMgaW4gdGhlIHNhbWUgZG9jdW1lbnQgYXJlIHJvdWdobHkgMC4yJSwg c28gdGhpcwogIDs7IHNob3VsZG4ndCBiZSB0aGUgYm90dGxlbmVjay4KICAobGV0ICgobmV3IChy YW5kb20gI3gxMDAwMDAwMCkpKQogICAgKHdoaWxlIChyYXNzcSBuZXcgcmVmZXJlbmNlcykgKHNl dHEgbmV3IChyYW5kb20gI3gxMDAwMDAwMCkpKQogICAgbmV3KSkKCihkZWZ1biBvcmctZXhwb3J0 LWZvcm1hdC1yZWZlcmVuY2UgKHJlZmVyZW5jZSkKICAiRm9ybWF0IFJFRkVSRU5DRSBpbnRvIGEg c3RyaW5nLgpSRUZFUkVOQ0UgaXMgYSBudW1iZXIgcmVwcmVzZW50aW5nIGEgcmVmZXJlbmNlLCBh cyByZXR1cm5lZCBieQpgb3JnLWV4cG9ydC1uZXctcmVmZXJlbmNlJywgd2hpY2ggc2VlLiIKICAo Zm9ybWF0ICJvcmclMDd4IiByZWZlcmVuY2UpKQoKKGRlZnVuIG9yZy1leHBvcnQtZ2V0LXJlZmVy ZW5jZSAoZGF0dW0gaW5mbykKICAiUmV0dXJuIGEgdW5pcXVlIHJlZmVyZW5jZSBmb3IgREFUVU0s IGFzIGEgc3RyaW5nLgoKREFUVU0gaXMgZWl0aGVyIGFuIGVsZW1lbnQgb3IgYW4gb2JqZWN0LiAg SU5GTyBpcyB0aGUgY3VycmVudApleHBvcnQgc3RhdGUsIGFzIGEgcGxpc3QuCgpSZWZlcmVuY2Vz IGZvciB0aGUgY3VycmVudCBkb2N1bWVudCBhcmUgc3RvcmVkIGluCmA6aW50ZXJuYWwtcmVmZXJl bmNlcycgcHJvcGVydHkuICBJdHMgdmFsdWUgaXMgYW4gYWxpc3Qgd2l0aAphc3NvY2lhdGlvbnMg b2YgdGhlIGZvbGxvd2luZyB0eXBlczoKCiAgKFJFRkVSRU5DRSAuIERBVFVNKSBhbmQgKFNFQVJD SC1DRUxMIC4gSUQpCgpSRUZFUkVOQ0UgaXMgdGhlIHJlZmVyZW5jZSBzdHJpbmcgdG8gYmUgdXNl ZCBmb3Igb2JqZWN0IG9yCmVsZW1lbnQgREFUVU0uICBTRUFSQ0gtQ0VMTCBpcyBhIHNlYXJjaCBj ZWxsLCBhcyByZXR1cm5lZCBieQpgb3JnLWV4cG9ydC1zZWFyY2gtY2VsbHMnLiAgSUQgaXMgYSBu dW1iZXIgb3IgYSBzdHJpbmcgdW5pcXVlbHkKaWRlbnRpZnlpbmcgREFUVU0gd2l0aGluIHRoZSBk b2N1bWVudC4KClRoaXMgZnVuY3Rpb24gYWxzbyBjaGVja3MgYDpjcm9zc3JlZnMnIHByb3BlcnR5 IGZvciBzZWFyY2ggY2VsbHMKbWF0Y2hpbmcgREFUVU0gYmVmb3JlIGNyZWF0aW5nIGEgbmV3IHJl ZmVyZW5jZS4iCiAgKGxldCAoKGNhY2hlIChwbGlzdC1nZXQgaW5mbyA6aW50ZXJuYWwtcmVmZXJl bmNlcykpKQogICAgKG9yIChjYXIgKHJhc3NxIGRhdHVtIGNhY2hlKSkKCShsZXQqICgoY3Jvc3Ny ZWZzIChwbGlzdC1nZXQgaW5mbyA6Y3Jvc3NyZWZzKSkKCSAgICAgICAoY2VsbHMgKG9yZy1leHBv cnQtc2VhcmNoLWNlbGxzIGRhdHVtKSkKCSAgICAgICA7OyBQcmVzZXJ2ZSBhbnkgcHJlLWV4aXN0 aW5nIGFzc29jaWF0aW9uIGJldHdlZW4KCSAgICAgICA7OyBhIHNlYXJjaCBjZWxsIGFuZCBhIHJl ZmVyZW5jZSwgaS5lLiwgd2hlbiBzb21lCgkgICAgICAgOzsgcHJldmlvdXNseSBwdWJsaXNoZWQg ZG9jdW1lbnQgcmVmZXJlbmNlZCBhIGxvY2F0aW9uCgkgICAgICAgOzsgd2l0aGluIGN1cnJlbnQg ZmlsZSAoc2VlCgkgICAgICAgOzsgYG9yZy1wdWJsaXNoLXJlc29sdmUtZXh0ZXJuYWwtbGluaycp LgoJICAgICAgIDs7CgkgICAgICAgOzsgSG93ZXZlciwgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRo YXQgc2VhcmNoIGNlbGxzIGFyZQoJICAgICAgIDs7IHVuaXF1ZSwgZS5nLiwgdGhlcmUgbWlnaHQg YmUgZHVwbGljYXRlIGN1c3RvbSBJRCBvcgoJICAgICAgIDs7IHR3byBoZWFkaW5ncyB3aXRoIHRo ZSBzYW1lIHRpdGxlIGluIHRoZSBmaWxlLgoJICAgICAgIDs7CgkgICAgICAgOzsgQXMgYSBjb25z ZXF1ZW5jZSwgYmVmb3JlIHJlLXVzaW5nIGFueSByZWZlcmVuY2UgdG8KCSAgICAgICA7OyBhbiBl bGVtZW50IG9yIG9iamVjdCwgd2UgY2hlY2sgdGhhdCBpdCBkb2Vzbid0IHJlZmVyCgkgICAgICAg OzsgdG8gYSBwcmV2aW91cyBlbGVtZW50IG9yIG9iamVjdC4KCSAgICAgICAobmV3IChvciAoY2wt c29tZQoJCQkgKGxhbWJkYSAoY2VsbCkKCQkJICAgKGxldCAoKHN0b3JlZCAoY2RyIChhc3NvYyBj ZWxsIGNyb3NzcmVmcykpKSkKCQkJICAgICAod2hlbiBzdG9yZWQKCQkJICAgICAgIChsZXQgKChv bGQgKG9yZy1leHBvcnQtZm9ybWF0LXJlZmVyZW5jZSBzdG9yZWQpKSkKCQkJCSAoYW5kIChub3Qg KGFzc29jIG9sZCBjYWNoZSkpIHN0b3JlZCkpKSkpCgkJCSBjZWxscykKCQkJKG9yZy1leHBvcnQt bmV3LXJlZmVyZW5jZSBjYWNoZSkpKQoJICAgICAgIChyZWZlcmVuY2Utc3RyaW5nIChvcmctZXhw b3J0LWZvcm1hdC1yZWZlcmVuY2UgbmV3KSkpCgkgIDs7IENhY2hlIGNvbnRhaW5zIGJvdGggZGF0 YSBhbHJlYWR5IGFzc29jaWF0ZWQgdG8KCSAgOzsgYSByZWZlcmVuY2UgYW5kIGluLXVzZSBpbnRl cm5hbCByZWZlcmVuY2VzLCBzbyBhcyB0byBtYWtlCgkgIDs7IHVuaXF1ZSByZWZlcmVuY2VzLgoJ ICAoZG9saXN0IChjZWxsIGNlbGxzKSAocHVzaCAoY29ucyBjZWxsIG5ldykgY2FjaGUpKQoJICA7 OyBSZXRhaW4gYSBkaXJlY3QgYXNzb2NpYXRpb24gYmV0d2VlbiByZWZlcmVuY2Ugc3RyaW5nIGFu ZAoJICA7OyBEQVRVTSBzaW5jZSAoMSkgbm90IGV2ZXJ5IG9iamVjdCBvciBlbGVtZW50IGNhbiBi ZSBnaXZlbgoJICA7OyBhIHNlYXJjaCBjZWxsICgyKSBpdCBwZXJtaXRzIHF1aWNrIGxvb2t1cC4K CSAgKHB1c2ggKGNvbnMgcmVmZXJlbmNlLXN0cmluZyBkYXR1bSkgY2FjaGUpCgkgIChwbGlzdC1w dXQgaW5mbyA6aW50ZXJuYWwtcmVmZXJlbmNlcyBjYWNoZSkKCSAgcmVmZXJlbmNlLXN0cmluZykp KSkKCihkZWZ1biBvcmctZXhwb3J0LWdldC1vcmRpbmFsIChlbGVtZW50IGluZm8gJm9wdGlvbmFs IHR5cGVzIHByZWRpY2F0ZSkKICAiUmV0dXJuIG9yZGluYWwgbnVtYmVyIG9mIGFuIGVsZW1lbnQg b3Igb2JqZWN0LgoKRUxFTUVOVCBpcyB0aGUgZWxlbWVudCBvciBvYmplY3QgY29uc2lkZXJlZC4g IElORk8gaXMgdGhlIHBsaXN0CnVzZWQgYXMgYSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCgpPcHRp b25hbCBhcmd1bWVudCBUWVBFUywgd2hlbiBub24tbmlsLCBpcyBhIGxpc3Qgb2YgZWxlbWVudCBv cgpvYmplY3QgdHlwZXMsIGFzIHN5bWJvbHMsIHRoYXQgc2hvdWxkIGFsc28gYmUgY291bnRlZCBp bi4KT3RoZXJ3aXNlLCBvbmx5IHByb3ZpZGVkIGVsZW1lbnQncyB0eXBlIGlzIGNvbnNpZGVyZWQu CgpPcHRpb25hbCBhcmd1bWVudCBQUkVESUNBVEUgaXMgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBu b24tbmlsCnZhbHVlIGlmIHRoZSBjdXJyZW50IGVsZW1lbnQgb3Igb2JqZWN0IHNob3VsZCBiZSBj b3VudGVkIGluLiAgSXQKYWNjZXB0cyB0d28gYXJndW1lbnRzOiB0aGUgZWxlbWVudCBvciBvYmpl Y3QgYmVpbmcgY29uc2lkZXJlZCBhbmQKdGhlIHBsaXN0IHVzZWQgYXMgYSBjb21tdW5pY2F0aW9u IGNoYW5uZWwuICBUaGlzIGFsbG93cyBjb3VudGluZwpvbmx5IGEgY2VydGFpbiB0eXBlIG9mIG9i amVjdCAoaS5lLiBpbmxpbmUgaW1hZ2VzKS4KClJldHVybiB2YWx1ZSBpcyBhIGxpc3Qgb2YgbnVt YmVycyBpZiBFTEVNRU5UIGlzIGEgaGVhZGxpbmUgb3IgYW4KaXRlbS4gIEl0IGlzIG5pbCBmb3Ig a2V5d29yZHMuICBJdCByZXByZXNlbnRzIHRoZSBmb290bm90ZSBudW1iZXIKZm9yIGZvb3Rub3Rl IGRlZmluaXRpb25zIGFuZCBmb290bm90ZSByZWZlcmVuY2VzLiAgSWYgRUxFTUVOVCBpcwphIHRh cmdldCwgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIGFzIGlmIEVMRU1FTlQgd2FzIHRoZSBjbG9zZXN0 CnRhYmxlLCBpdGVtIG9yIGhlYWRsaW5lIGNvbnRhaW5pbmcgdGhlIHRhcmdldC4gIEluIGFueSBv dGhlcgpjYXNlLCByZXR1cm4gdGhlIHNlcXVlbmNlIG51bWJlciBvZiBFTEVNRU5UIGFtb25nIGVs ZW1lbnRzIG9yCm9iamVjdHMgb2YgdGhlIHNhbWUgdHlwZS4iCiAgOzsgT3JkaW5hbCBvZiBhIHRh cmdldCBvYmplY3QgcmVmZXIgdG8gdGhlIG9yZGluYWwgb2YgdGhlIGNsb3Nlc3QKICA7OyB0YWJs ZSwgaXRlbSwgb3IgaGVhZGxpbmUgY29udGFpbmluZyB0aGUgb2JqZWN0LgogICh3aGVuIChlcSAo b3JnLWVsZW1lbnQtdHlwZSBlbGVtZW50KSAndGFyZ2V0KQogICAgKHNldHEgZWxlbWVudAoJICAo b3JnLWVsZW1lbnQtbGluZWFnZQoJICAgZWxlbWVudAoJICAgJyhmb290bm90ZS1kZWZpbml0aW9u IGZvb3Rub3RlLXJlZmVyZW5jZSBoZWFkbGluZSBpdGVtIHRhYmxlKSkpKQogIChjbC1jYXNlIChv cmctZWxlbWVudC10eXBlIGVsZW1lbnQpCiAgICA7OyBTcGVjaWFsIGNhc2UgMTogQSBoZWFkbGlu ZSByZXR1cm5zIGl0cyBudW1iZXIgYXMgYSBsaXN0LgogICAgKGhlYWRsaW5lIChvcmctZXhwb3J0 LWdldC1oZWFkbGluZS1udW1iZXIgZWxlbWVudCBpbmZvKSkKICAgIDs7IFNwZWNpYWwgY2FzZSAy OiBBbiBpdGVtIHJldHVybnMgaXRzIG51bWJlciBhcyBhIGxpc3QuCiAgICAoaXRlbSAobGV0ICgo c3RydWN0IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6c3RydWN0dXJlIGVsZW1lbnQpKSkKCSAgICAo b3JnLWxpc3QtZ2V0LWl0ZW0tbnVtYmVyCgkgICAgIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6YmVn aW4gZWxlbWVudCkKCSAgICAgc3RydWN0CgkgICAgIChvcmctbGlzdC1wcmV2cy1hbGlzdCBzdHJ1 Y3QpCgkgICAgIChvcmctbGlzdC1wYXJlbnRzLWFsaXN0IHN0cnVjdCkpKSkKICAgICgoZm9vdG5v dGUtZGVmaW5pdGlvbiBmb290bm90ZS1yZWZlcmVuY2UpCiAgICAgKG9yZy1leHBvcnQtZ2V0LWZv b3Rub3RlLW51bWJlciBlbGVtZW50IGluZm8pKQogICAgKG90aGVyd2lzZQogICAgIChsZXQgKChj b3VudGVyIDApKQogICAgICAgOzsgSW5jcmVtZW50IGNvdW50ZXIgdW50aWwgRUxFTUVOVCBpcyBm b3VuZCBhZ2Fpbi4KICAgICAgIChvcmctZWxlbWVudC1tYXAgKHBsaXN0LWdldCBpbmZvIDpwYXJz ZS10cmVlKQoJICAgKG9yIHR5cGVzIChvcmctZWxlbWVudC10eXBlIGVsZW1lbnQpKQoJIChsYW1i ZGEgKGVsKQoJICAgKGNvbmQKCSAgICAoKGVxIGVsZW1lbnQgZWwpICgxKyBjb3VudGVyKSkKCSAg ICAoKG5vdCBwcmVkaWNhdGUpIChjbC1pbmNmIGNvdW50ZXIpIG5pbCkKCSAgICAoKGZ1bmNhbGwg cHJlZGljYXRlIGVsIGluZm8pIChjbC1pbmNmIGNvdW50ZXIpIG5pbCkpKQoJIGluZm8gJ2ZpcnN0 LW1hdGNoKSkpKSkKCjs7OzsgRm9yIFJhdyBvYmplY3RzCjs7Cjs7IGBvcmctZXhwb3J0LXJhdy1z dHJpbmcnIGJ1aWxkcyBhIHBzZXVkby1vYmplY3Qgb3V0IG9mIGEgc3RyaW5nCjs7IHRoYXQgYW55 IGV4cG9ydCBiYWNrLWVuZCByZXR1cm5zIGFzLWlzLgoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIG9y Zy1leHBvcnQtcmF3LXN0cmluZyAocykKICAiUmV0dXJuIGEgcmF3IG9iamVjdCBjb250YWluaW5n IHN0cmluZyBTLgpBIHJhdyBzdHJpbmcgaXMgZXhwb3J0ZWQgYXMtaXMsIHdpdGggbm8gYWRkaXRp b25hbCBwcm9jZXNzaW5nCmZyb20gdGhlIGV4cG9ydCBiYWNrLWVuZC4iCiAgKHVubGVzcyAoc3Ry aW5ncCBzKSAoZXJyb3IgIldyb25nIHJhdyBjb250ZW50cyB0eXBlOiAlUyIgcykpCiAgKG9yZy1l bGVtZW50LWNyZWF0ZSAncmF3IG5pbCBzKSkKCjs7OzsgRm9yIFNyYy1CbG9ja3MKOzsKOzsgYG9y Zy1leHBvcnQtZ2V0LWxvYycgY291bnRzIG51bWJlciBvZiBjb2RlIGxpbmVzIGFjY3VtdWxhdGVk IGluCjs7IHNyYy1ibG9jayBvciBleGFtcGxlLWJsb2NrIGVsZW1lbnRzIHdpdGggYSAiK24iIHN3 aXRjaCB1bnRpbAo7OyBhIGdpdmVuIGVsZW1lbnQsIGV4Y2x1ZGVkLiAgTm90ZTogIi1uIiBzd2l0 Y2hlcyByZXNldCB0aGF0IGNvdW50Lgo7Owo7OyBgb3JnLWV4cG9ydC11bnJhdmVsLWNvZGUnIGV4 dHJhY3RzIHNvdXJjZSBjb2RlIChhbG9uZyB3aXRoIGEgY29kZQo7OyByZWZlcmVuY2VzIGFsaXN0 KSBmcm9tIGFuIGBlbGVtZW50LWJsb2NrJyBvciBgc3JjLWJsb2NrJyB0eXBlCjs7IGVsZW1lbnQu Cjs7Cjs7IGBvcmctZXhwb3J0LWZvcm1hdC1jb2RlJyBhcHBsaWVzIGEgZm9ybWF0dGluZyBmdW5j dGlvbiB0byBlYWNoIGxpbmUKOzsgb2YgY29kZSwgcHJvdmlkaW5nIHJlbGF0aXZlIGxpbmUgbnVt YmVyIGFuZCBjb2RlIHJlZmVyZW5jZSB3aGVuCjs7IGFwcHJvcHJpYXRlLiAgU2luY2UgaXQgZG9l c24ndCBhY2Nlc3MgdGhlIG9yaWdpbmFsIGVsZW1lbnQgZnJvbQo7OyB3aGljaCB0aGUgc291cmNl IGNvZGUgaXMgY29taW5nLCBpdCBleHBlY3RzIGZyb20gdGhlIGNvZGUgY2FsbGluZwo7OyBpdCB0 byBrbm93IGlmIGxpbmVzIHNob3VsZCBiZSBudW1iZXJlZCBhbmQgaWYgY29kZSByZWZlcmVuY2Vz Cjs7IHNob3VsZCBhcHBlYXIuCjs7Cjs7IEV2ZW50dWFsbHksIGBvcmctZXhwb3J0LWZvcm1hdC1j b2RlLWRlZmF1bHQnIGlzIGEgaGlnaGVyLWxldmVsCjs7IGZ1bmN0aW9uIChpdCBtYWtlcyB1c2Ug b2YgdGhlIHR3byBwcmV2aW91cyBmdW5jdGlvbnMpIHdoaWNoIGhhbmRsZXMKOzsgbGluZSBudW1i ZXJpbmcgYW5kIGNvZGUgcmVmZXJlbmNlcyBpbmNsdXNpb24sIGFuZCByZXR1cm5zIHNvdXJjZQo7 OyBjb2RlIGluIGEgZm9ybWF0IHN1aXRhYmxlIGZvciBwbGFpbiB0ZXh0IG9yIHZlcmJhdGltIG91 dHB1dC4KCihkZWZ1biBvcmctZXhwb3J0LWdldC1sb2MgKGVsZW1lbnQgaW5mbykKICAiUmV0dXJu IGNvdW50IG9mIGxpbmVzIG9mIGNvZGUgYmVmb3JlIEVMRU1FTlQuCgpFTEVNRU5UIGlzIGFuIGV4 YW1wbGUtYmxvY2sgb3Igc3JjLWJsb2NrIGVsZW1lbnQuICBJTkZPIGlzIHRoZQpwbGlzdCB1c2Vk IGFzIGEgY29tbXVuaWNhdGlvbiBjaGFubmVsLgoKQ291bnQgaW5jbHVkZXMgZXZlcnkgbGluZSBv ZiBjb2RlIGluIGV4YW1wbGUtYmxvY2sgb3Igc3JjLWJsb2NrCndpdGggYSBcIituXCIgb3IgXCIt blwiIHN3aXRjaCBiZWZvcmUgYmxvY2suICBSZXR1cm4gbmlsIGlmCkVMRU1FTlQgZG9lc24ndCBh bGxvdyBsaW5lIG51bWJlcmluZy4iCiAgKHBjYXNlIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6bnVt YmVyLWxpbmVzIGVsZW1lbnQpCiAgICAoYChuZXcgLiAsbikgbikKICAgIChgKGNvbnRpbnVlZCAu ICxuKQogICAgIChsZXQgKChsb2MgMCkpCiAgICAgICAob3JnLWVsZW1lbnQtbWFwIChwbGlzdC1n ZXQgaW5mbyA6cGFyc2UtdHJlZSkgJyhzcmMtYmxvY2sgZXhhbXBsZS1ibG9jaykKCSAobGFtYmRh IChlbCkKCSAgIDs7IEVMRU1FTlQgaXMgcmVhY2hlZDogUXVpdCBsb29wIGFuZCByZXR1cm4gbG9j cy4KCSAgIChpZiAoZXEgZWwgZWxlbWVudCkgKCsgbG9jIG4pCgkgICAgIDs7IE9ubHkgY291bnQg bGluZXMgZnJvbSBzcmMtYmxvY2sgYW5kIGV4YW1wbGUtYmxvY2sKCSAgICAgOzsgZWxlbWVudHMg d2l0aCBhICIrbiIgb3IgIi1uIiBzd2l0Y2guCgkgICAgIChsZXQgKChsaW51bSAob3JnLWVsZW1l bnQtcHJvcGVydHkgOm51bWJlci1saW5lcyBlbCkpKQoJICAgICAgICh3aGVuIGxpbnVtCgkJIChs ZXQgKChsaW5lcyAob3JnLWNvdW50LWxpbmVzCgkJCSAgICAgICAob3JnLWVsZW1lbnQtcHJvcGVy dHkgOnZhbHVlIGVsKSkpKQoJCSAgIDs7IEFjY3VtdWxhdGUgbG9jcyBvciByZXNldCB0aGVtLgoJ CSAgIChwY2FzZSBsaW51bQoJCSAgICAgKGAobmV3IC4gLG4pIChzZXRxIGxvYyAoKyBuIGxpbmVz KSkpCgkJICAgICAoYChjb250aW51ZWQgLiAsbikgKGNsLWluY2YgbG9jICgrIG4gbGluZXMpKSkp KSkpCgkgICAgIG5pbCkpCQkgICAgICA7UmV0dXJuIG5pbCB0byBzdGF5IGluIHRoZSBsb29wLgoJ IGluZm8gJ2ZpcnN0LW1hdGNoKSkpKSkKCihkZWZ1biBvcmctZXhwb3J0LXVucmF2ZWwtY29kZSAo ZWxlbWVudCkKICAiQ2xlYW4gc291cmNlIGNvZGUgYW5kIGV4dHJhY3QgcmVmZXJlbmNlcyBvdXQg b2YgaXQuCgpFTEVNRU5UIGhhcyBlaXRoZXIgYSBgc3JjLWJsb2NrJyBhbiBgZXhhbXBsZS1ibG9j aycgdHlwZS4KClJldHVybiBhIGNvbnMgY2VsbCB3aG9zZSBDQVIgaXMgdGhlIHNvdXJjZSBjb2Rl LCBjbGVhbmVkIGZyb20gYW55CnJlZmVyZW5jZSwgcHJvdGVjdGl2ZSBjb21tYXMgYW5kIHNwdXJp b3VzIGluZGVudGF0aW9uLCBhbmQgQ0RSIGlzCmFuIGFsaXN0IGJldHdlZW4gcmVsYXRpdmUgbGlu ZSBudW1iZXIgKGludGVnZXIpIGFuZCBuYW1lIG9mIGNvZGUKcmVmZXJlbmNlIG9uIHRoYXQgbGlu ZSAoc3RyaW5nKS4iCiAgKGxldCogKChsaW5lIDApIHJlZnMKCSAodmFsdWUgKG9yZy1lbGVtZW50 LXByb3BlcnR5IDp2YWx1ZSBlbGVtZW50KSkKCSA7OyBSZW1vdmUgZ2xvYmFsIGluZGVudGF0aW9u IGZyb20gY29kZSwgaWYgbmVjZXNzYXJ5LiAgQWxzbwoJIDs7IHJlbW92ZSBmaW5hbCBuZXdsaW5l IGNoYXJhY3Rlciwgc2luY2UgaXQgZG9lc24ndCBiZWxvbmdzCgkgOzsgdG8gdGhlIGNvZGUgcHJv cGVyLgoJIChjb2RlIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKCQkiXG5cXCciICIiCgkJKGlm IChvciBvcmctc3JjLXByZXNlcnZlLWluZGVudGF0aW9uCgkJCShvcmctZWxlbWVudC1wcm9wZXJ0 eSA6cHJlc2VydmUtaW5kZW50IGVsZW1lbnQpKQoJCSAgICB2YWx1ZQoJCSAgKG9yZy1yZW1vdmUt aW5kZW50YXRpb24gdmFsdWUpKSkpCgkgOzsgQnVpbGQgYSByZWdleHAgbWF0Y2hpbmcgYSBsb2Mg d2l0aCBhIHJlZmVyZW5jZS4KCSAocmVmLXJlIChvcmctc3JjLWNvZGVyZWYtcmVnZXhwIChvcmct c3JjLWNvZGVyZWYtZm9ybWF0IGVsZW1lbnQpKSkpCiAgICA7OyBSZXR1cm4gdmFsdWUuCiAgICAo Y29ucwogICAgIDs7IENvZGUgd2l0aCByZWZlcmVuY2VzIHJlbW92ZWQuCiAgICAgKG1hcGNvbmNh dAogICAgICAobGFtYmRhIChsb2MpCgkoY2wtaW5jZiBsaW5lKQoJKGlmIChub3QgKHN0cmluZy1t YXRjaCByZWYtcmUgbG9jKSkgbG9jCgkgIDs7IFJlZiBsaW5lOiByZW1vdmUgcmVmLCBhbmQgYWRk IGl0cyBwb3NpdGlvbiBpbiBSRUZTLgoJICAocHVzaCAoY29ucyBsaW5lIChtYXRjaC1zdHJpbmcg MyBsb2MpKSByZWZzKQoJICAocmVwbGFjZS1tYXRjaCAiIiBuaWwgbmlsIGxvYyAxKSkpCiAgICAg IChzcGxpdC1zdHJpbmcgY29kZSAiXG4iKSAiXG4iKQogICAgIDs7IFJlZmVyZW5jZSBhbGlzdC4K ICAgICByZWZzKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1mb3JtYXQtY29kZSAoY29kZSBmdW4gJm9w dGlvbmFsIG51bS1saW5lcyByZWYtYWxpc3QpCiAgIkZvcm1hdCBDT0RFIGJ5IGFwcGx5aW5nIEZV TiBsaW5lLXdpc2UgYW5kIHJldHVybiBpdC4KCkNPREUgaXMgYSBzdHJpbmcgcmVwcmVzZW50aW5n IHRoZSBjb2RlIHRvIGZvcm1hdC4gIEZVTiBpcwphIGZ1bmN0aW9uLiAgSXQgbXVzdCBhY2NlcHQg dGhyZWUgYXJndW1lbnRzOiBhIGxpbmUgb2YKY29kZSAoc3RyaW5nKSwgdGhlIGN1cnJlbnQgbGlu ZSBudW1iZXIgKGludGVnZXIpIG9yIG5pbCBhbmQgdGhlCnJlZmVyZW5jZSBhc3NvY2lhdGVkIHRv IHRoZSBjdXJyZW50IGxpbmUgKHN0cmluZykgb3IgbmlsLgoKT3B0aW9uYWwgYXJndW1lbnQgTlVN LUxJTkVTIGNhbiBiZSBhbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUKbnVtYmVyIG9mIGNvZGUg bGluZXMgYWNjdW11bGF0ZWQgdW50aWwgdGhlIGN1cnJlbnQgY29kZS4gIExpbmUKbnVtYmVycyBw YXNzZWQgdG8gRlVOIHdpbGwgdGFrZSBpdCBpbnRvIGFjY291bnQuICBJZiBpdCBpcyBuaWwsCkZV TidzIHNlY29uZCBhcmd1bWVudCB3aWxsIGFsd2F5cyBiZSBuaWwuICBUaGlzIG51bWJlciBjYW4g YmUKb2J0YWluZWQgd2l0aCBgb3JnLWV4cG9ydC1nZXQtbG9jJyBmdW5jdGlvbi4KCk9wdGlvbmFs IGFyZ3VtZW50IFJFRi1BTElTVCBjYW4gYmUgYW4gYWxpc3QgYmV0d2VlbiByZWxhdGl2ZSBsaW5l Cm51bWJlciAoaS5lLiBpZ25vcmluZyBOVU0tTElORVMpIGFuZCB0aGUgbmFtZSBvZiB0aGUgY29k ZQpyZWZlcmVuY2Ugb24gaXQuICBJZiBpdCBpcyBuaWwsIEZVTidzIHRoaXJkIGFyZ3VtZW50IHdp bGwgYWx3YXlzCmJlIG5pbC4gIEl0IGNhbiBiZSBvYnRhaW5lZCB0aHJvdWdoIHRoZSB1c2Ugb2YK YG9yZy1leHBvcnQtdW5yYXZlbC1jb2RlJyBmdW5jdGlvbi4iCiAgKGxldCAoKC0tbG9jcyAoc3Bs aXQtc3RyaW5nIGNvZGUgIlxuIikpCgkoLS1saW5lIDApKQogICAgKGNvbmNhdAogICAgIChtYXBj b25jYXQKICAgICAgKGxhbWJkYSAoLS1sb2MpCgkoY2wtaW5jZiAtLWxpbmUpCgkobGV0ICgoLS1y ZWYgKGNkciAoYXNzcSAtLWxpbmUgcmVmLWFsaXN0KSkpKQoJICAoZnVuY2FsbCBmdW4gLS1sb2Mg KGFuZCBudW0tbGluZXMgKCsgbnVtLWxpbmVzIC0tbGluZSkpIC0tcmVmKSkpCiAgICAgIC0tbG9j cyAiXG4iKQogICAgICJcbiIpKSkKCihkZWZ1biBvcmctZXhwb3J0LWZvcm1hdC1jb2RlLWRlZmF1 bHQgKGVsZW1lbnQgaW5mbykKICAiUmV0dXJuIHNvdXJjZSBjb2RlIGZyb20gRUxFTUVOVCwgZm9y bWF0dGVkIGluIGEgc3RhbmRhcmQgd2F5LgoKRUxFTUVOVCBpcyBlaXRoZXIgYSBgc3JjLWJsb2Nr JyBvciBgZXhhbXBsZS1ibG9jaycgZWxlbWVudC4gIElORk8KaXMgYSBwbGlzdCB1c2VkIGFzIGEg Y29tbXVuaWNhdGlvbiBjaGFubmVsLgoKVGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGxpbmUg bnVtYmVyaW5nIGFuZCBjb2RlIHJlZmVyZW5jZXMKaW5jbHVzaW9uLiAgTGluZSBudW1iZXJzLCB3 aGVuIGFwcGxpY2FibGUsIGFwcGVhciBhdCB0aGUKYmVnaW5uaW5nIG9mIHRoZSBsaW5lLCBzZXBh cmF0ZWQgZnJvbSB0aGUgY29kZSBieSB0d28gd2hpdGUKc3BhY2VzLiAgQ29kZSByZWZlcmVuY2Vz LCBvbiB0aGUgb3RoZXIgaGFuZCwgYXBwZWFyIGZsdXNoZWQgdG8KdGhlIHJpZ2h0LCBzZXBhcmF0 ZWQgYnkgc2l4IHdoaXRlIHNwYWNlcyBmcm9tIHRoZSB3aWRlc3QgbGluZSBvZgpjb2RlLiIKICA7 OyBFeHRyYWN0IGNvZGUgYW5kIHJlZmVyZW5jZXMuCiAgKGxldCogKChjb2RlLWluZm8gKG9yZy1l eHBvcnQtdW5yYXZlbC1jb2RlIGVsZW1lbnQpKQogICAgICAgICAoY29kZSAoY2FyIGNvZGUtaW5m bykpCgkgKGNvZGUtbGluZXMgKHNwbGl0LXN0cmluZyBjb2RlICJcbiIpKSkKICAgIChpZiAobnVs bCBjb2RlLWxpbmVzKSAiIgogICAgICAobGV0KiAoKHJlZnMgKGFuZCAob3JnLWVsZW1lbnQtcHJv cGVydHkgOnJldGFpbi1sYWJlbHMgZWxlbWVudCkKCQkJKGNkciBjb2RlLWluZm8pKSkKCSAgICAg OzsgSGFuZGxlIGxpbmUgbnVtYmVyaW5nLgoJICAgICAobnVtLXN0YXJ0IChvcmctZXhwb3J0LWdl dC1sb2MgZWxlbWVudCBpbmZvKSkKCSAgICAgKG51bS1mbXQKCSAgICAgIChhbmQgbnVtLXN0YXJ0 CgkJICAgKGZvcm1hdCAiJSUlZHMgICIKCQkJICAgKGxlbmd0aCAobnVtYmVyLXRvLXN0cmluZwoJ CQkJICAgICgrIChsZW5ndGggY29kZS1saW5lcykgbnVtLXN0YXJ0KSkpKSkpCgkgICAgIDs7IFBy ZXBhcmUgcmVmZXJlbmNlcyBkaXNwbGF5LCBpZiByZXF1aXJlZC4gIEFueSByZWZlcmVuY2UKCSAg ICAgOzsgc2hvdWxkIHN0YXJ0IHNpeCBjb2x1bW5zIGFmdGVyIHRoZSB3aWRlc3QgbGluZSBvZiBj b2RlLAoJICAgICA7OyB3cmFwcGVkIHdpdGggcGFyZW50aGVzaXMuCgkgICAgIChtYXgtd2lkdGgK CSAgICAgICgrIChhcHBseSAjJ21heCAobWFwY2FyICMnbGVuZ3RoIGNvZGUtbGluZXMpKQoJCSAo aWYgKG5vdCBudW0tc3RhcnQpIDAgKGxlbmd0aCAoZm9ybWF0IG51bS1mbXQgbnVtLXN0YXJ0KSkp KSkpCgkob3JnLWV4cG9ydC1mb3JtYXQtY29kZQoJIGNvZGUKCSAobGFtYmRhIChsb2MgbGluZS1u dW0gcmVmKQoJICAgKGxldCAoKG51bWJlci1zdHIgKGFuZCBudW0tZm10IChmb3JtYXQgbnVtLWZt dCBsaW5lLW51bSkpKSkKCSAgICAgKGNvbmNhdAoJICAgICAgbnVtYmVyLXN0cgoJICAgICAgbG9j CgkgICAgICAoYW5kIHJlZgoJCSAgIChjb25jYXQgKG1ha2Utc3RyaW5nICgtICgrIDYgbWF4LXdp ZHRoKQoJCQkJCSAgICgrIChsZW5ndGggbG9jKSAobGVuZ3RoIG51bWJlci1zdHIpKSkKCQkJCQk/ XHMpCgkJCSAgIChmb3JtYXQgIiglcykiIHJlZikpKSkpKQoJIG51bS1zdGFydCByZWZzKSkpKSkK Cgo7Ozs7IEZvciBUYWJsZXMKOzsKOzsgYG9yZy1leHBvcnQtdGFibGUtaGFzLXNwZWNpYWwtY29s dW1uLXAnIGFuZAo7OyBgb3JnLWV4cG9ydC10YWJsZS1yb3ctaXMtc3BlY2lhbC1wJyBhcmUgcHJl ZGljYXRlcyB1c2VkIHRvIGxvb2sgZm9yCjs7IG1ldGEtaW5mb3JtYXRpb24gYWJvdXQgdGhlIHRh YmxlIHN0cnVjdHVyZS4KOzsKOzsgYG9yZy1leHBvcnQtdGFibGUtY2VsbC13aWR0aCcsIGBvcmct ZXhwb3J0LXRhYmxlLWNlbGwtYWxpZ25tZW50Jwo7OyBhbmQgYG9yZy1leHBvcnQtdGFibGUtY2Vs bC1ib3JkZXJzJyBleHRyYWN0IGluZm9ybWF0aW9uIGZyb20KOzsgYSB0YWJsZS1jZWxsIGVsZW1l bnQuCjs7Cjs7IGBvcmctZXhwb3J0LXRhYmxlLWRpbWVuc2lvbnMnIGdpdmVzIHRoZSBudW1iZXIg b24gcm93cyBhbmQgY29sdW1ucwo7OyBpbiB0aGUgdGFibGUsIGlnbm9yaW5nIGhvcml6b250YWwg cnVsZXMgYW5kIHNwZWNpYWwgY29sdW1ucy4KOzsgYG9yZy1leHBvcnQtdGFibGUtY2VsbC1hZGRy ZXNzJywgZ2l2ZW4gYSB0YWJsZS1jZWxsIG9iamVjdCwgcmV0dXJucwo7OyB0aGUgYWJzb2x1dGUg YWRkcmVzcyBvZiBhIGNlbGwuIE9uIHRoZSBvdGhlciBoYW5kLAo7OyBgb3JnLWV4cG9ydC1nZXQt dGFibGUtY2VsbC1hdCcgZG9lcyB0aGUgY29udHJhcnkuCjs7Cjs7IGBvcmctZXhwb3J0LXRhYmxl LWNlbGwtc3RhcnRzLWNvbGdyb3VwLXAnLAo7OyBgb3JnLWV4cG9ydC10YWJsZS1jZWxsLWVuZHMt Y29sZ3JvdXAtcCcsCjs7IGBvcmctZXhwb3J0LXRhYmxlLXJvdy1zdGFydHMtcm93Z3JvdXAtcCcs Cjs7IGBvcmctZXhwb3J0LXRhYmxlLXJvdy1lbmRzLXJvd2dyb3VwLXAnLAo7OyBgb3JnLWV4cG9y dC10YWJsZS1yb3ctc3RhcnRzLWhlYWRlci1wJywKOzsgYG9yZy1leHBvcnQtdGFibGUtcm93LWVu ZHMtaGVhZGVyLXAnIGFuZAo7OyBgb3JnLWV4cG9ydC10YWJsZS1yb3ctaW4taGVhZGVyLXAnIGlu ZGljYXRlIHBvc2l0aW9uIG9mIGN1cnJlbnQgcm93Cjs7IG9yIGNlbGwgd2l0aGluIHRoZSB0YWJs ZS4KCihkZWZ1biBvcmctZXhwb3J0LXRhYmxlLWhhcy1zcGVjaWFsLWNvbHVtbi1wICh0YWJsZSkK ICAiTm9uLW5pbCB3aGVuIFRBQkxFIGhhcyBhIHNwZWNpYWwgY29sdW1uLgpBbGwgc3BlY2lhbCBj b2x1bW5zIHdpbGwgYmUgaWdub3JlZCBkdXJpbmcgZXhwb3J0LiIKICA7OyBUaGUgdGFibGUgaGFz IGEgc3BlY2lhbCBjb2x1bW4gd2hlbiBldmVyeSBmaXJzdCBjZWxsIG9mIGV2ZXJ5IHJvdwogIDs7 IGhhcyBhbiBlbXB0eSB2YWx1ZSBvciBjb250YWlucyBhIHN5bWJvbCBhbW9uZyAiLyIsICIjIiwg IiEiLCAiJCIsCiAgOzsgIioiICJfIiBhbmQgIl4iLiAgVGhvdWdoLCBkbyBub3QgY29uc2lkZXIg YSBmaXJzdCBjb2x1bW4KICA7OyBjb250YWluaW5nIG9ubHkgZW1wdHkgY2VsbHMgYXMgc3BlY2lh bC4KICAobGV0ICgoc3BlY2lhbC1jb2x1bW4/ICdlbXB0eSkpCiAgICAoY2F0Y2ggJ2V4aXQKICAg ICAgKGRvbGlzdCAocm93IChvcmctZWxlbWVudC1jb250ZW50cyB0YWJsZSkpCgkod2hlbiAoZXEg KG9yZy1lbGVtZW50LXByb3BlcnR5IDp0eXBlIHJvdykgJ3N0YW5kYXJkKQoJICAobGV0ICgodmFs dWUgKG9yZy1lbGVtZW50LWNvbnRlbnRzCgkJCShjYXIgKG9yZy1lbGVtZW50LWNvbnRlbnRzIHJv dykpKSkpCgkgICAgKGNvbmQgKChtZW1iZXIgdmFsdWUKCQkJICAgJygoIi8iKSAoIiMiKSAoIiEi KSAoIiQiKSAoIioiKSAoIl8iKSAoIl4iKSkpCgkJICAgKHNldHEgc3BlY2lhbC1jb2x1bW4/ICdz cGVjaWFsKSkKCQkgICgobnVsbCB2YWx1ZSkpCgkJICAodCAodGhyb3cgJ2V4aXQgbmlsKSkpKSkp CiAgICAgIChlcSBzcGVjaWFsLWNvbHVtbj8gJ3NwZWNpYWwpKSkpCgooZGVmdW4gb3JnLWV4cG9y dC10YWJsZS1oYXMtaGVhZGVyLXAgKHRhYmxlIGluZm8pCiAgIk5vbi1uaWwgd2hlbiBUQUJMRSBo YXMgYSBoZWFkZXIuCgpJTkZPIGlzIGEgcGxpc3QgdXNlZCBhcyBhIGNvbW11bmljYXRpb24gY2hh bm5lbC4KCkEgdGFibGUgaGFzIGEgaGVhZGVyIHdoZW4gaXQgY29udGFpbnMgYXQgbGVhc3QgdHdv IHJvdyBncm91cHMuIgogIChsZXQqICgoY2FjaGUgKG9yIChwbGlzdC1nZXQgaW5mbyA6dGFibGUt aGVhZGVyLWNhY2hlKQoJCSAgICAobGV0ICgodGFibGUgKG1ha2UtaGFzaC10YWJsZSA6dGVzdCAj J2VxKSkpCgkJICAgICAgKHBsaXN0LXB1dCBpbmZvIDp0YWJsZS1oZWFkZXItY2FjaGUgdGFibGUp CgkJICAgICAgdGFibGUpKSkKCSAoY2FjaGVkIChnZXRoYXNoIHRhYmxlIGNhY2hlICduby1jYWNo ZSkpKQogICAgKGlmIChub3QgKGVxIGNhY2hlZCAnbm8tY2FjaGUpKSBjYWNoZWQKICAgICAgKGxl dCAoKHJvd2dyb3VwIDEpIHJvdy1mbGFnKQoJKHB1dGhhc2ggdGFibGUKCQkgKG9yZy1lbGVtZW50 LW1hcCB0YWJsZSAndGFibGUtcm93CgkJICAgKGxhbWJkYSAocm93KQoJCSAgICAgKGNvbmQKCQkg ICAgICAoKD4gcm93Z3JvdXAgMSkgdCkKCQkgICAgICAoKGFuZCByb3ctZmxhZwoJCQkgICAgKGVx IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlwZSByb3cpICdydWxlKSkKCQkgICAgICAgKGNsLWlu Y2Ygcm93Z3JvdXApCgkJICAgICAgIChzZXRxIHJvdy1mbGFnIG5pbCkpCgkJICAgICAgKChhbmQg KG5vdCByb3ctZmxhZykKCQkJICAgIChlcSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnR5cGUgcm93 KSAnc3RhbmRhcmQpKQoJCSAgICAgICAoc2V0cSByb3ctZmxhZyB0KQoJCSAgICAgICBuaWwpKSkK CQkgICBpbmZvICdmaXJzdC1tYXRjaCkKCQkgY2FjaGUpKSkpKQoKKGRlZnVuIG9yZy1leHBvcnQt dGFibGUtcm93LWlzLXNwZWNpYWwtcCAodGFibGUtcm93IF8pCiAgIk5vbi1uaWwgaWYgVEFCTEUt Uk9XIGlzIGNvbnNpZGVyZWQgc3BlY2lhbC4KQWxsIHNwZWNpYWwgcm93cyB3aWxsIGJlIGlnbm9y ZWQgZHVyaW5nIGV4cG9ydC4iCiAgKHdoZW4gKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlw ZSB0YWJsZS1yb3cpICdzdGFuZGFyZCkKICAgIChsZXQgKChmaXJzdC1jZWxsIChvcmctZWxlbWVu dC1jb250ZW50cwoJCSAgICAgICAoY2FyIChvcmctZWxlbWVudC1jb250ZW50cyB0YWJsZS1yb3cp KSkpKQogICAgICA7OyBBIHJvdyBpcyBzcGVjaWFsIGVpdGhlciB3aGVuLi4uCiAgICAgIChvcgog ICAgICAgOzsgLi4uIGl0IHN0YXJ0cyB3aXRoIGEgZmllbGQgb25seSBjb250YWluaW5nICIvIiwK ICAgICAgIChlcXVhbCBmaXJzdC1jZWxsICcoIi8iKSkKICAgICAgIDs7IC4uLiB0aGUgdGFibGUg Y29udGFpbnMgYSBzcGVjaWFsIGNvbHVtbiBhbmQgdGhlIHJvdyBzdGFydAogICAgICAgOzsgd2l0 aCBhIG1hcmtpbmcgY2hhcmFjdGVyIGFtb25nLCAiXiIsICJfIiwgIiQiIG9yICIhIiwKICAgICAg IChhbmQgKG9yZy1leHBvcnQtdGFibGUtaGFzLXNwZWNpYWwtY29sdW1uLXAKCSAgICAgKG9yZy1l eHBvcnQtZ2V0LXBhcmVudCB0YWJsZS1yb3cpKQoJICAgIChtZW1iZXIgZmlyc3QtY2VsbCAnKCgi XiIpICgiXyIpICgiJCIpICgiISIpKSkpCiAgICAgICA7OyAuLi4gaXQgY29udGFpbnMgb25seSBh bGlnbm1lbnQgY29va2llcyBhbmQgZW1wdHkgY2VsbHMuCiAgICAgICAobGV0ICgoc3BlY2lhbC1y b3ctcCAnZW1wdHkpKQoJIChjYXRjaCAnZXhpdAoJICAgKGRvbGlzdCAoY2VsbCAob3JnLWVsZW1l bnQtY29udGVudHMgdGFibGUtcm93KSkKCSAgICAgKGxldCAoKHZhbHVlIChvcmctZWxlbWVudC1j b250ZW50cyBjZWxsKSkpCgkgICAgICAgOzsgU2luY2UgVkFMVUUgaXMgYSBzZWNvbmRhcnkgc3Ry aW5nLCB0aGUgZm9sbG93aW5nCgkgICAgICAgOzsgY2hlY2tzIGF2b2lkIGV4cGFuZGluZyBpdCB3 aXRoIGBvcmctZXhwb3J0LWRhdGEnLgoJICAgICAgIChjb25kICgobm90IHZhbHVlKSkKCQkgICAg ICgoYW5kIChub3QgKGNkciB2YWx1ZSkpCgkJCSAgIChzdHJpbmdwIChjYXIgdmFsdWUpKQoJCQkg ICAoc3RyaW5nLW1hdGNoICJcXGA8W2xyY10/XFwoWzAtOV0rXFwpPz5cXCciCgkJCQkJIChjYXIg dmFsdWUpKSkKCQkgICAgICAoc2V0cSBzcGVjaWFsLXJvdy1wICdjb29raWUpKQoJCSAgICAgKHQg KHRocm93ICdleGl0IG5pbCkpKSkpCgkgICAoZXEgc3BlY2lhbC1yb3ctcCAnY29va2llKSkpKSkp KQoKKGRlZnVuIG9yZy1leHBvcnQtdGFibGUtcm93LWdyb3VwICh0YWJsZS1yb3cgaW5mbykKICAi UmV0dXJuIFRBQkxFLVJPVydzIGdyb3VwIG51bWJlciwgYXMgYW4gaW50ZWdlci4KCklORk8gaXMg YSBwbGlzdCB1c2VkIGFzIHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCgpSZXR1cm4gdmFsdWUg aXMgdGhlIGdyb3VwIG51bWJlciwgYXMgYW4gaW50ZWdlciwgb3IgbmlsIGZvcgpzcGVjaWFsIHJv d3MgYW5kIHJvd3Mgc2VwYXJhdG9ycy4gIEZpcnN0IGdyb3VwIGlzIGFsc28gdGFibGUncwpoZWFk ZXIuIgogICh3aGVuIChlcSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnR5cGUgdGFibGUtcm93KSAn c3RhbmRhcmQpCiAgICAobGV0KiAoKGNhY2hlIChvciAocGxpc3QtZ2V0IGluZm8gOnRhYmxlLXJv dy1ncm91cC1jYWNoZSkKCQkgICAgICAobGV0ICgodGFibGUgKG1ha2UtaGFzaC10YWJsZSA6dGVz dCAjJ2VxKSkpCgkJCShwbGlzdC1wdXQgaW5mbyA6dGFibGUtcm93LWdyb3VwLWNhY2hlIHRhYmxl KQoJCQl0YWJsZSkpKQoJICAgKGNhY2hlZCAoZ2V0aGFzaCB0YWJsZS1yb3cgY2FjaGUgJ25vLWNh Y2hlKSkpCiAgICAgIChpZiAobm90IChlcSBjYWNoZWQgJ25vLWNhY2hlKSkgY2FjaGVkCgk7OyBG aXJzdCB0aW1lIGEgcm93IGlzIHF1ZXJpZWQsIHBvcHVsYXRlIGNhY2hlIHdpdGggYWxsIHRoZQoJ Ozsgcm93cyBmcm9tIHRoZSB0YWJsZS4KCShsZXQgKChncm91cCAwKSByb3ctZmxhZykKCSAgKG9y Zy1lbGVtZW50LW1hcCAob3JnLWV4cG9ydC1nZXQtcGFyZW50IHRhYmxlLXJvdykgJ3RhYmxlLXJv dwoJICAgIChsYW1iZGEgKHJvdykKCSAgICAgIChpZiAoZXEgKG9yZy1lbGVtZW50LXByb3BlcnR5 IDp0eXBlIHJvdykgJ3J1bGUpCgkJICAoc2V0cSByb3ctZmxhZyBuaWwpCgkJKHVubGVzcyByb3ct ZmxhZyAoY2wtaW5jZiBncm91cCkgKHNldHEgcm93LWZsYWcgdCkpCgkJKHB1dGhhc2ggcm93IGdy b3VwIGNhY2hlKSkpCgkgICAgaW5mbykpCgkoZ2V0aGFzaCB0YWJsZS1yb3cgY2FjaGUpKSkpKQoK KGRlZnVuIG9yZy1leHBvcnQtdGFibGUtY2VsbC13aWR0aCAodGFibGUtY2VsbCBpbmZvKQogICJS ZXR1cm4gVEFCTEUtQ0VMTCBjb250ZW50cyB3aWR0aC4KCklORk8gaXMgYSBwbGlzdCB1c2VkIGFz IHRoZSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCgpSZXR1cm4gdmFsdWUgaXMgdGhlIHdpZHRoIGdp dmVuIGJ5IHRoZSBsYXN0IHdpZHRoIGNvb2tpZSBpbiB0aGUKc2FtZSBjb2x1bW4gYXMgVEFCTEUt Q0VMTCwgb3IgbmlsLiIKICAobGV0KiAoKHJvdyAob3JnLWV4cG9ydC1nZXQtcGFyZW50IHRhYmxl LWNlbGwpKQoJICh0YWJsZSAob3JnLWV4cG9ydC1nZXQtcGFyZW50IHJvdykpCgkgKGNlbGxzIChv cmctZWxlbWVudC1jb250ZW50cyByb3cpKQoJIChjb2x1bW5zIChsZW5ndGggY2VsbHMpKQoJIChj b2x1bW4gKC0gY29sdW1ucyAobGVuZ3RoIChtZW1xIHRhYmxlLWNlbGwgY2VsbHMpKSkpCgkgKGNh Y2hlIChvciAocGxpc3QtZ2V0IGluZm8gOnRhYmxlLWNlbGwtd2lkdGgtY2FjaGUpCgkJICAgIChs ZXQgKCh0YWJsZSAobWFrZS1oYXNoLXRhYmxlIDp0ZXN0ICMnZXEpKSkKCQkgICAgICAocGxpc3Qt cHV0IGluZm8gOnRhYmxlLWNlbGwtd2lkdGgtY2FjaGUgdGFibGUpCgkJICAgICAgdGFibGUpKSkK CSAod2lkdGgtdmVjdG9yIChvciAoZ2V0aGFzaCB0YWJsZSBjYWNoZSkKCQkJICAgKHB1dGhhc2gg dGFibGUgKG1ha2UtdmVjdG9yIGNvbHVtbnMgJ2VtcHR5KSBjYWNoZSkpKSkKICAgIDs7IFRhYmxl IHJvd3MgbWF5IG5vdCBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBjZWxscy4gIEV4dGVuZAogICAg OzsgV0lEVEgtVkVDVE9SIGFwcHJvcHJpYXRlbHkgaWYgd2UgZW5jb3VudGVyIGEgcm93IGxhcmdl ciB0aGFuCiAgICA7OyBleHBlY3RlZC4KICAgICh3aGVuICg+PSBjb2x1bW4gKGxlbmd0aCB3aWR0 aC12ZWN0b3IpKQogICAgICAoc2V0cSB3aWR0aC12ZWN0b3IKCSAgICAodmNvbmNhdCB3aWR0aC12 ZWN0b3IKCQkgICAgIChtYWtlLWxpc3QgKC0gKDErIGNvbHVtbikgKGxlbmd0aCB3aWR0aC12ZWN0 b3IpKQoJCQkJJ2VtcHR5KSkpCiAgICAgIChwdXRoYXNoIHRhYmxlIHdpZHRoLXZlY3RvciBjYWNo ZSkpCiAgICAocGNhc2UgKGFyZWYgd2lkdGgtdmVjdG9yIGNvbHVtbikKICAgICAgKGBlbXB0eQog ICAgICAgKGNhdGNoICdmb3VuZAoJIChkb2xpc3QgKHJvdyAob3JnLWVsZW1lbnQtY29udGVudHMg dGFibGUpKQoJICAgKHdoZW4gKG9yZy1leHBvcnQtdGFibGUtcm93LWlzLXNwZWNpYWwtcCByb3cg aW5mbykKCSAgICAgOzsgSW4gYSBzcGVjaWFsIHJvdywgdHJ5IHRvIGZpbmQgYSB3aWR0aCBjb29r aWUgYXQKCSAgICAgOzsgQ09MVU1OLiAgVGhlIGZvbGxvd2luZyBjaGVja3MgYXZvaWQgZXhwYW5k aW5nCgkgICAgIDs7IHVubmVjZXNzYXJpbHkgdGhlIGNlbGwgd2l0aCBgb3JnLWV4cG9ydC1kYXRh Jy4KCSAgICAgKHBjYXNlIChvcmctZWxlbWVudC1jb250ZW50cwoJCSAgICAgKGVsdCAob3JnLWVs ZW1lbnQtY29udGVudHMgcm93KSBjb2x1bW4pKQoJICAgICAgIChgKCwoYW5kIChwcmVkIHN0cmlu Z3ApIGNvb2tpZSkpCgkJKHdoZW4gKHN0cmluZy1tYXRjaCAiXFxgPFtscmNdP1xcKFswLTldK1xc KT5cXCciIGNvb2tpZSkKCQkgIChsZXQgKCh3IChzdHJpbmctdG8tbnVtYmVyIChtYXRjaC1zdHJp bmcgMSBjb29raWUpKSkpCgkJICAgICh0aHJvdyAnZm91bmQgKGFzZXQgd2lkdGgtdmVjdG9yIGNv bHVtbiB3KSkpKSkpKSkKCSAoYXNldCB3aWR0aC12ZWN0b3IgY29sdW1uIG5pbCkpKQogICAgICAo dmFsdWUgdmFsdWUpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC10YWJsZS1jZWxsLWFsaWdubWVudCAo dGFibGUtY2VsbCBpbmZvKQogICJSZXR1cm4gVEFCTEUtQ0VMTCBjb250ZW50cyBhbGlnbm1lbnQu CgpJTkZPIGlzIGEgcGxpc3QgdXNlZCBhcyB0aGUgY29tbXVuaWNhdGlvbiBjaGFubmVsLgoKUmV0 dXJuIGFsaWdubWVudCBhcyBzcGVjaWZpZWQgYnkgdGhlIGxhc3QgYWxpZ25tZW50IGNvb2tpZSBp biB0aGUKc2FtZSBjb2x1bW4gYXMgVEFCTEUtQ0VMTC4gIElmIG5vIHN1Y2ggY29va2llIGlzIGZv dW5kLCBhIGRlZmF1bHQKYWxpZ25tZW50IHZhbHVlIHdpbGwgYmUgZGVkdWNlZCBmcm9tIGZyYWN0 aW9uIG9mIG51bWJlcnMgaW4gdGhlCmNvbHVtbiAoc2VlIGBvcmctdGFibGUtbnVtYmVyLWZyYWN0 aW9uJyBmb3IgbW9yZSBpbmZvcm1hdGlvbikuClBvc3NpYmxlIHZhbHVlcyBhcmUgYGxlZnQnLCBg cmlnaHQnIGFuZCBgY2VudGVyJy4iCiAgOzsgTG9hZCBgb3JnLXRhYmxlLW51bWJlci1mcmFjdGlv bicgYW5kIGBvcmctdGFibGUtbnVtYmVyLXJlZ2V4cCcuCiAgKHJlcXVpcmUgJ29yZy10YWJsZSkK ICAobGV0KiAoKHJvdyAob3JnLWV4cG9ydC1nZXQtcGFyZW50IHRhYmxlLWNlbGwpKQoJICh0YWJs ZSAob3JnLWV4cG9ydC1nZXQtcGFyZW50IHJvdykpCgkgKGNlbGxzIChvcmctZWxlbWVudC1jb250 ZW50cyByb3cpKQoJIChjb2x1bW5zIChsZW5ndGggY2VsbHMpKQoJIChjb2x1bW4gKC0gY29sdW1u cyAobGVuZ3RoIChtZW1xIHRhYmxlLWNlbGwgY2VsbHMpKSkpCgkgKGNhY2hlIChvciAocGxpc3Qt Z2V0IGluZm8gOnRhYmxlLWNlbGwtYWxpZ25tZW50LWNhY2hlKQoJCSAgICAobGV0ICgodGFibGUg KG1ha2UtaGFzaC10YWJsZSA6dGVzdCAjJ2VxKSkpCgkJICAgICAgKHBsaXN0LXB1dCBpbmZvIDp0 YWJsZS1jZWxsLWFsaWdubWVudC1jYWNoZSB0YWJsZSkKCQkgICAgICB0YWJsZSkpKQoJIChhbGln bi12ZWN0b3IgKG9yIChnZXRoYXNoIHRhYmxlIGNhY2hlKQoJCQkgICAocHV0aGFzaCB0YWJsZSAo bWFrZS12ZWN0b3IgY29sdW1ucyBuaWwpIGNhY2hlKSkpKQogICAgOzsgVGFibGUgcm93cyBtYXkg bm90IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGNlbGxzLiAgRXh0ZW5kCiAgICA7OyBBTElHTi1W RUNUT1IgYXBwcm9wcmlhdGVseSBpZiB3ZSBlbmNvdW50ZXIgYSByb3cgbGFyZ2VyIHRoYW4KICAg IDs7IGV4cGVjdGVkLgogICAgKHdoZW4gKD49IGNvbHVtbiAobGVuZ3RoIGFsaWduLXZlY3Rvcikp CiAgICAgIChzZXRxIGFsaWduLXZlY3RvcgoJICAgICh2Y29uY2F0IGFsaWduLXZlY3RvcgoJCSAg ICAgKG1ha2UtbGlzdCAoLSAoMSsgY29sdW1uKSAobGVuZ3RoIGFsaWduLXZlY3RvcikpCgkJCQlu aWwpKSkKICAgICAgKHB1dGhhc2ggdGFibGUgYWxpZ24tdmVjdG9yIGNhY2hlKSkKICAgIChvciAo YXJlZiBhbGlnbi12ZWN0b3IgY29sdW1uKQoJKGxldCAoKG51bWJlci1jZWxscyAwKQoJICAgICAg KHRvdGFsLWNlbGxzIDApCgkgICAgICBjb29raWUtYWxpZ24KCSAgICAgIHByZXZpb3VzLWNlbGwt bnVtYmVyLXApCgkgIChkb2xpc3QgKHJvdyAob3JnLWVsZW1lbnQtY29udGVudHMgKG9yZy1leHBv cnQtZ2V0LXBhcmVudCByb3cpKSkKCSAgICAoY29uZAoJICAgICA7OyBJbiBhIHNwZWNpYWwgcm93 LCB0cnkgdG8gZmluZCBhbiBhbGlnbm1lbnQgY29va2llIGF0CgkgICAgIDs7IENPTFVNTi4KCSAg ICAgKChvcmctZXhwb3J0LXRhYmxlLXJvdy1pcy1zcGVjaWFsLXAgcm93IGluZm8pCgkgICAgICAo bGV0ICgodmFsdWUgKG9yZy1lbGVtZW50LWNvbnRlbnRzCgkJCSAgICAoZWx0IChvcmctZWxlbWVu dC1jb250ZW50cyByb3cpIGNvbHVtbikpKSkKCQk7OyBTaW5jZSBWQUxVRSBpcyBhIHNlY29uZGFy eSBzdHJpbmcsIHRoZSBmb2xsb3dpbmcKCQk7OyBjaGVja3MgYXZvaWQgdXNlbGVzcyBleHBhbnNp b24gdGhyb3VnaAoJCTs7IGBvcmctZXhwb3J0LWRhdGEnLgoJCSh3aGVuIChhbmQgdmFsdWUKCQkJ ICAgKG5vdCAoY2RyIHZhbHVlKSkKCQkJICAgKHN0cmluZ3AgKGNhciB2YWx1ZSkpCgkJCSAgIChz dHJpbmctbWF0Y2ggIlxcYDxcXChbbHJjXVxcKT9cXChbMC05XStcXCk/PlxcJyIKCQkJCQkgKGNh ciB2YWx1ZSkpCgkJCSAgIChtYXRjaC1zdHJpbmcgMSAoY2FyIHZhbHVlKSkpCgkJICAoc2V0cSBj b29raWUtYWxpZ24gKG1hdGNoLXN0cmluZyAxIChjYXIgdmFsdWUpKSkpKSkKCSAgICAgOzsgSWdu b3JlIHRhYmxlIHJ1bGVzLgoJICAgICAoKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlwZSBy b3cpICdydWxlKSkKCSAgICAgOzsgSW4gYSBzdGFuZGFyZCByb3csIGNoZWNrIGlmIGNlbGwncyBj b250ZW50cyBhcmUKCSAgICAgOzsgZXhwcmVzc2luZyBzb21lIGtpbmQgb2YgbnVtYmVyLiAgSW5j cmVhc2UgTlVNQkVSLUNFTExTCgkgICAgIDs7IGFjY29yZGluZ2x5LiAgVGhvdWdoLCBkb24ndCBi b3RoZXIgaWYgYW4gYWxpZ25tZW50CgkgICAgIDs7IGNvb2tpZSBoYXMgYWxyZWFkeSBkZWZpbmVk IGNlbGwncyBhbGlnbm1lbnQuCgkgICAgICgobm90IGNvb2tpZS1hbGlnbikKCSAgICAgIChsZXQg KCh2YWx1ZSAob3JnLWV4cG9ydC1kYXRhCgkJCSAgICAob3JnLWVsZW1lbnQtY29udGVudHMKCQkJ ICAgICAoZWx0IChvcmctZWxlbWVudC1jb250ZW50cyByb3cpIGNvbHVtbikpCgkJCSAgICBpbmZv KSkpCgkJKGNsLWluY2YgdG90YWwtY2VsbHMpCgkJOzsgVHJlYXQgYW4gZW1wdHkgY2VsbCBhcyBh IG51bWJlciBpZiBpdCBmb2xsb3dzCgkJOzsgYSBudW1iZXIuCgkJKGlmIChub3QgKG9yIChzdHJp bmctbWF0Y2ggb3JnLXRhYmxlLW51bWJlci1yZWdleHAgdmFsdWUpCgkJCSAgICAgKGFuZCAoc3Ry aW5nPSB2YWx1ZSAiIikgcHJldmlvdXMtY2VsbC1udW1iZXItcCkpKQoJCSAgICAoc2V0cSBwcmV2 aW91cy1jZWxsLW51bWJlci1wIG5pbCkKCQkgIChzZXRxIHByZXZpb3VzLWNlbGwtbnVtYmVyLXAg dCkKCQkgIChjbC1pbmNmIG51bWJlci1jZWxscykpKSkpKQoJICA7OyBSZXR1cm4gdmFsdWUuICBB bGlnbm1lbnQgc3BlY2lmaWVkIGJ5IGNvb2tpZXMgaGFzCgkgIDs7IHByZWNlZGVuY2Ugb3ZlciBh bGlnbm1lbnQgZGVkdWNlZCBmcm9tIGNlbGwncyBjb250ZW50cy4KCSAgKGFzZXQgYWxpZ24tdmVj dG9yCgkJY29sdW1uCgkJKGNvbmQgKChlcXVhbCBjb29raWUtYWxpZ24gImwiKSAnbGVmdCkKCQkg ICAgICAoKGVxdWFsIGNvb2tpZS1hbGlnbiAiciIpICdyaWdodCkKCQkgICAgICAoKGVxdWFsIGNv b2tpZS1hbGlnbiAiYyIpICdjZW50ZXIpCgkJICAgICAgKCg+PSAoLyAoZmxvYXQgbnVtYmVyLWNl bGxzKSB0b3RhbC1jZWxscykKCQkJICAgb3JnLXRhYmxlLW51bWJlci1mcmFjdGlvbikKCQkgICAg ICAgJ3JpZ2h0KQoJCSAgICAgICh0ICdsZWZ0KSkpKSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtdGFi bGUtY2VsbC1ib3JkZXJzICh0YWJsZS1jZWxsIGluZm8pCiAgIlJldHVybiBUQUJMRS1DRUxMIGJv cmRlcnMuCgpJTkZPIGlzIGEgcGxpc3QgdXNlZCBhcyBhIGNvbW11bmljYXRpb24gY2hhbm5lbC4K ClJldHVybiB2YWx1ZSBpcyBhIGxpc3Qgb2Ygc3ltYm9scywgb3IgbmlsLiAgUG9zc2libGUgdmFs dWVzIGFyZToKYHRvcCcsIGBib3R0b20nLCBgYWJvdmUnLCBgYmVsb3cnLCBgbGVmdCcgYW5kIGBy aWdodCcuICBOb3RlOgpgdG9wJyAocmVzcC4gYGJvdHRvbScpIG9ubHkgaGFwcGVuIGZvciBhIGNl bGwgaW4gdGhlIGZpcnN0CnJvdyAocmVzcC4gbGFzdCByb3cpIG9mIHRoZSB0YWJsZSwgaWdub3Jp bmcgdGFibGUgcnVsZXMsIGlmIGFueS4KClJldHVybmVkIGJvcmRlcnMgaWdub3JlIHNwZWNpYWwg cm93cy4iCiAgKGxldCogKChyb3cgKG9yZy1leHBvcnQtZ2V0LXBhcmVudCB0YWJsZS1jZWxsKSkK CSAodGFibGUgKG9yZy1leHBvcnQtZ2V0LXBhcmVudC10YWJsZSB0YWJsZS1jZWxsKSkKCSBib3Jk ZXJzKQogICAgOzsgVG9wL2Fib3ZlIGJvcmRlcj8gIFRBQkxFLUNFTEwgaGFzIGEgYm9yZGVyIGFi b3ZlIHdoZW4gYSBydWxlCiAgICA7OyB1c2VkIHRvIGRlbWFyY2F0ZSByb3cgZ3JvdXBzIGNhbiBi ZSBmb3VuZCBhYm92ZS4gIEhlbmNlLAogICAgOzsgZmluZGluZyBhIHJ1bGUgaXNuJ3Qgc3VmZmlj aWVudCB0byBwdXNoIGBhYm92ZScgaW4gQk9SREVSUzoKICAgIDs7IGFub3RoZXIgcmVndWxhciBy b3cgaGFzIHRvIGJlIGZvdW5kIGFib3ZlIHRoYXQgcnVsZS4KICAgIChsZXQgKHJ1bGUtZmxhZykK ICAgICAgKGNhdGNoICdleGl0Cgk7OyBMb29rIGF0IGV2ZXJ5IHJvdyBiZWZvcmUgdGhlIGN1cnJl bnQgb25lLgoJKGRvbGlzdCAocm93IChjZHIgKG1lbXEgcm93IChyZXZlcnNlIChvcmctZWxlbWVu dC1jb250ZW50cyB0YWJsZSkpKSkpCgkgIChjb25kICgoZXEgKG9yZy1lbGVtZW50LXByb3BlcnR5 IDp0eXBlIHJvdykgJ3J1bGUpCgkJIChzZXRxIHJ1bGUtZmxhZyB0KSkKCQkoKG5vdCAob3JnLWV4 cG9ydC10YWJsZS1yb3ctaXMtc3BlY2lhbC1wIHJvdyBpbmZvKSkKCQkgKGlmIHJ1bGUtZmxhZyAo dGhyb3cgJ2V4aXQgKHB1c2ggJ2Fib3ZlIGJvcmRlcnMpKQoJCSAgICh0aHJvdyAnZXhpdCBuaWwp KSkpKQoJOzsgTm8gcnVsZSBhYm92ZSwgb3IgcnVsZSBmb3VuZCBzdGFydHMgdGhlIHRhYmxlIChp Z25vcmluZyBhbnkKCTs7IHNwZWNpYWwgcm93KTogVEFCTEUtQ0VMTCBpcyBhdCB0aGUgdG9wIG9m IHRoZSB0YWJsZS4KCSh3aGVuIHJ1bGUtZmxhZyAocHVzaCAnYWJvdmUgYm9yZGVycykpCgkocHVz aCAndG9wIGJvcmRlcnMpKSkKICAgIDs7IEJvdHRvbS9iZWxvdyBib3JkZXI/IFRBQkxFLUNFTEwg aGFzIGEgYm9yZGVyIGJlbG93IHdoZW4gbmV4dAogICAgOzsgbm9uLXJlZ3VsYXIgcm93IGJlbG93 IGlzIGEgcnVsZS4KICAgIChsZXQgKHJ1bGUtZmxhZykKICAgICAgKGNhdGNoICdleGl0Cgk7OyBM b29rIGF0IGV2ZXJ5IHJvdyBhZnRlciB0aGUgY3VycmVudCBvbmUuCgkoZG9saXN0IChyb3cgKGNk ciAobWVtcSByb3cgKG9yZy1lbGVtZW50LWNvbnRlbnRzIHRhYmxlKSkpKQoJICAoY29uZCAoKGVx IChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlwZSByb3cpICdydWxlKQoJCSAoc2V0cSBydWxlLWZs YWcgdCkpCgkJKChub3QgKG9yZy1leHBvcnQtdGFibGUtcm93LWlzLXNwZWNpYWwtcCByb3cgaW5m bykpCgkJIChpZiBydWxlLWZsYWcgKHRocm93ICdleGl0IChwdXNoICdiZWxvdyBib3JkZXJzKSkK CQkgICAodGhyb3cgJ2V4aXQgbmlsKSkpKSkKCTs7IE5vIHJ1bGUgYmVsb3csIG9yIHJ1bGUgZm91 bmQgZW5kcyB0aGUgdGFibGUgKG1vZHVsbyBzb21lCgk7OyBzcGVjaWFsIHJvdyk6IFRBQkxFLUNF TEwgaXMgYXQgdGhlIGJvdHRvbSBvZiB0aGUgdGFibGUuCgkod2hlbiBydWxlLWZsYWcgKHB1c2gg J2JlbG93IGJvcmRlcnMpKQoJKHB1c2ggJ2JvdHRvbSBib3JkZXJzKSkpCiAgICA7OyBSaWdodC9s ZWZ0IGJvcmRlcnM/ICBUaGV5IGNhbiBvbmx5IGJlIHNwZWNpZmllZCBieSBjb2x1bW4KICAgIDs7 IGdyb3Vwcy4gIENvbHVtbiBncm91cHMgYXJlIGRlZmluZWQgaW4gYSByb3cgc3RhcnRpbmcgd2l0 aCAiLyIuCiAgICA7OyBBbHNvIGEgY29sdW1uIGdyb3VwcyByb3cgb25seSBjb250YWlucyAiPCIs ICI8PiIsICI+IiBvciBibGFuawogICAgOzsgY2VsbHMuCiAgICAoY2F0Y2ggJ2V4aXQKICAgICAg KGxldCAoKGNvbHVtbiAobGV0ICgoY2VsbHMgKG9yZy1lbGVtZW50LWNvbnRlbnRzIHJvdykpKQoJ CSAgICAgICgtIChsZW5ndGggY2VsbHMpIChsZW5ndGggKG1lbXEgdGFibGUtY2VsbCBjZWxscykp KSkpKQoJOzsgVGFibGUgcm93cyBhcmUgcmVhZCBpbiByZXZlcnNlIG9yZGVyIHNvIGxhc3QgY29s dW1uIGdyb3VwcwoJOzsgcm93IGhhcyBwcmVjZWRlbmNlIG92ZXIgYW55IHByZXZpb3VzIG9uZS4K CShkb2xpc3QgKHJvdyAocmV2ZXJzZSAob3JnLWVsZW1lbnQtY29udGVudHMgdGFibGUpKSkKCSAg KHVubGVzcyAoZXEgKG9yZy1lbGVtZW50LXByb3BlcnR5IDp0eXBlIHJvdykgJ3J1bGUpCgkgICAg KHdoZW4gKGVxdWFsIChvcmctZWxlbWVudC1jb250ZW50cwoJCQkgIChjYXIgKG9yZy1lbGVtZW50 LWNvbnRlbnRzIHJvdykpKQoJCQkgJygiLyIpKQoJICAgICAgKGxldCAoKGNvbHVtbi1ncm91cHMK CQkgICAgIChtYXBjYXIKCQkgICAgICAobGFtYmRhIChjZWxsKQoJCQkobGV0ICgodmFsdWUgKG9y Zy1lbGVtZW50LWNvbnRlbnRzIGNlbGwpKSkKCQkJICAod2hlbiAobWVtYmVyIHZhbHVlICcoKCI8 IikgKCI8PiIpICgiPiIpIG5pbCkpCgkJCSAgICAoY2FyIHZhbHVlKSkpKQoJCSAgICAgIChvcmct ZWxlbWVudC1jb250ZW50cyByb3cpKSkpCgkJOzsgVGhlcmUncyBhIGxlZnQgYm9yZGVyIHdoZW4g cHJldmlvdXMgY2VsbCwgaWYKCQk7OyBhbnksIGVuZHMgYSBncm91cCwgb3IgY3VycmVudCBvbmUg c3RhcnRzIG9uZS4KCQkod2hlbiAob3IgKGFuZCAobm90ICh6ZXJvcCBjb2x1bW4pKQoJCQkgICAg ICAgKG1lbWJlciAoZWx0IGNvbHVtbi1ncm91cHMgKDEtIGNvbHVtbikpCgkJCQkgICAgICAgJygi PiIgIjw+IikpKQoJCQkgIChtZW1iZXIgKGVsdCBjb2x1bW4tZ3JvdXBzIGNvbHVtbikgJygiPCIg Ijw+IikpKQoJCSAgKHB1c2ggJ2xlZnQgYm9yZGVycykpCgkJOzsgVGhlcmUncyBhIHJpZ2h0IGJv cmRlciB3aGVuIG5leHQgY2VsbCwgaWYgYW55LAoJCTs7IHN0YXJ0cyBhIGdyb3VwLCBvciBjdXJy ZW50IG9uZSBlbmRzIG9uZS4KCQkod2hlbiAob3IgKGFuZCAoLz0gKDErIGNvbHVtbikgKGxlbmd0 aCBjb2x1bW4tZ3JvdXBzKSkKCQkJICAgICAgIChtZW1iZXIgKGVsdCBjb2x1bW4tZ3JvdXBzICgx KyBjb2x1bW4pKQoJCQkJICAgICAgICcoIjwiICI8PiIpKSkKCQkJICAobWVtYmVyIChlbHQgY29s dW1uLWdyb3VwcyBjb2x1bW4pICcoIj4iICI8PiIpKSkKCQkgIChwdXNoICdyaWdodCBib3JkZXJz KSkKCQkodGhyb3cgJ2V4aXQgbmlsKSkpKSkpKQogICAgOzsgUmV0dXJuIHZhbHVlLgogICAgYm9y ZGVycykpCgooZGVmdW4gb3JnLWV4cG9ydC10YWJsZS1jZWxsLXN0YXJ0cy1jb2xncm91cC1wICh0 YWJsZS1jZWxsIGluZm8pCiAgIk5vbi1uaWwgd2hlbiBUQUJMRS1DRUxMIGlzIGF0IHRoZSBiZWdp bm5pbmcgb2YgYSBjb2x1bW4gZ3JvdXAuCklORk8gaXMgYSBwbGlzdCB1c2VkIGFzIGEgY29tbXVu aWNhdGlvbiBjaGFubmVsLiIKICA7OyBBIGNlbGwgc3RhcnRzIGEgY29sdW1uIGdyb3VwIGVpdGhl ciB3aGVuIGl0IGlzIGF0IHRoZSBiZWdpbm5pbmcKICA7OyBvZiBhIHJvdyAob3IgYWZ0ZXIgdGhl IHNwZWNpYWwgY29sdW1uLCBpZiBhbnkpIG9yIHdoZW4gaXQgaGFzCiAgOzsgYSBsZWZ0IGJvcmRl ci4KICAob3IgKGVxIChvcmctZWxlbWVudC1tYXAgKG9yZy1leHBvcnQtZ2V0LXBhcmVudCB0YWJs ZS1jZWxsKSAndGFibGUtY2VsbAoJICAgICdpZGVudGl0eSBpbmZvICdmaXJzdC1tYXRjaCkKCSAg dGFibGUtY2VsbCkKICAgICAgKG1lbXEgJ2xlZnQgKG9yZy1leHBvcnQtdGFibGUtY2VsbC1ib3Jk ZXJzIHRhYmxlLWNlbGwgaW5mbykpKSkKCihkZWZ1biBvcmctZXhwb3J0LXRhYmxlLWNlbGwtZW5k cy1jb2xncm91cC1wICh0YWJsZS1jZWxsIGluZm8pCiAgIk5vbi1uaWwgd2hlbiBUQUJMRS1DRUxM IGlzIGF0IHRoZSBlbmQgb2YgYSBjb2x1bW4gZ3JvdXAuCklORk8gaXMgYSBwbGlzdCB1c2VkIGFz IGEgY29tbXVuaWNhdGlvbiBjaGFubmVsLiIKICA7OyBBIGNlbGwgZW5kcyBhIGNvbHVtbiBncm91 cCBlaXRoZXIgd2hlbiBpdCBpcyBhdCB0aGUgZW5kIG9mIGEgcm93CiAgOzsgb3Igd2hlbiBpdCBo YXMgYSByaWdodCBib3JkZXIuCiAgKG9yIChlcSAoY2FyIChsYXN0IChvcmctZWxlbWVudC1jb250 ZW50cwoJCSAgICAgIChvcmctZXhwb3J0LWdldC1wYXJlbnQgdGFibGUtY2VsbCkpKSkKCSAgdGFi bGUtY2VsbCkKICAgICAgKG1lbXEgJ3JpZ2h0IChvcmctZXhwb3J0LXRhYmxlLWNlbGwtYm9yZGVy cyB0YWJsZS1jZWxsIGluZm8pKSkpCgooZGVmdW4gb3JnLWV4cG9ydC10YWJsZS1yb3ctc3RhcnRz LXJvd2dyb3VwLXAgKHRhYmxlLXJvdyBpbmZvKQogICJOb24tbmlsIHdoZW4gVEFCTEUtUk9XIGlz IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSByb3cgZ3JvdXAuCklORk8gaXMgYSBwbGlzdCB1c2VkIGFz IGEgY29tbXVuaWNhdGlvbiBjaGFubmVsLiIKICAodW5sZXNzIChvciAoZXEgKG9yZy1lbGVtZW50 LXByb3BlcnR5IDp0eXBlIHRhYmxlLXJvdykgJ3J1bGUpCgkgICAgICAob3JnLWV4cG9ydC10YWJs ZS1yb3ctaXMtc3BlY2lhbC1wIHRhYmxlLXJvdyBpbmZvKSkKICAgIChsZXQgKChib3JkZXJzIChv cmctZXhwb3J0LXRhYmxlLWNlbGwtYm9yZGVycwoJCSAgICAoY2FyIChvcmctZWxlbWVudC1jb250 ZW50cyB0YWJsZS1yb3cpKSBpbmZvKSkpCiAgICAgIChvciAobWVtcSAndG9wIGJvcmRlcnMpICht ZW1xICdhYm92ZSBib3JkZXJzKSkpKSkKCihkZWZ1biBvcmctZXhwb3J0LXRhYmxlLXJvdy1lbmRz LXJvd2dyb3VwLXAgKHRhYmxlLXJvdyBpbmZvKQogICJOb24tbmlsIHdoZW4gVEFCTEUtUk9XIGlz IGF0IHRoZSBlbmQgb2YgYSByb3cgZ3JvdXAuCklORk8gaXMgYSBwbGlzdCB1c2VkIGFzIGEgY29t bXVuaWNhdGlvbiBjaGFubmVsLiIKICAodW5sZXNzIChvciAoZXEgKG9yZy1lbGVtZW50LXByb3Bl cnR5IDp0eXBlIHRhYmxlLXJvdykgJ3J1bGUpCgkgICAgICAob3JnLWV4cG9ydC10YWJsZS1yb3ct aXMtc3BlY2lhbC1wIHRhYmxlLXJvdyBpbmZvKSkKICAgIChsZXQgKChib3JkZXJzIChvcmctZXhw b3J0LXRhYmxlLWNlbGwtYm9yZGVycwoJCSAgICAoY2FyIChvcmctZWxlbWVudC1jb250ZW50cyB0 YWJsZS1yb3cpKSBpbmZvKSkpCiAgICAgIChvciAobWVtcSAnYm90dG9tIGJvcmRlcnMpIChtZW1x ICdiZWxvdyBib3JkZXJzKSkpKSkKCihkZWZ1biBvcmctZXhwb3J0LXRhYmxlLXJvdy1pbi1oZWFk ZXItcCAodGFibGUtcm93IGluZm8pCiAgIk5vbi1uaWwgd2hlbiBUQUJMRS1ST1cgaXMgbG9jYXRl ZCB3aXRoaW4gdGFibGUncyBoZWFkZXIuCklORk8gaXMgYSBwbGlzdCB1c2VkIGFzIGEgY29tbXVu aWNhdGlvbiBjaGFubmVsLiAgQWx3YXlzIHJldHVybgpuaWwgZm9yIHNwZWNpYWwgcm93cyBhbmQg cm93cyBzZXBhcmF0b3JzLiIKICAoYW5kIChvcmctZXhwb3J0LXRhYmxlLWhhcy1oZWFkZXItcAoJ KG9yZy1leHBvcnQtZ2V0LXBhcmVudC10YWJsZSB0YWJsZS1yb3cpIGluZm8pCiAgICAgICAoZXFs IChvcmctZXhwb3J0LXRhYmxlLXJvdy1ncm91cCB0YWJsZS1yb3cgaW5mbykgMSkpKQoKKGRlZnVu IG9yZy1leHBvcnQtdGFibGUtcm93LXN0YXJ0cy1oZWFkZXItcCAodGFibGUtcm93IGluZm8pCiAg Ik5vbi1uaWwgd2hlbiBUQUJMRS1ST1cgaXMgdGhlIGZpcnN0IHRhYmxlIGhlYWRlcidzIHJvdy4K SU5GTyBpcyBhIHBsaXN0IHVzZWQgYXMgYSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuIgogIChhbmQg KG9yZy1leHBvcnQtdGFibGUtcm93LWluLWhlYWRlci1wIHRhYmxlLXJvdyBpbmZvKQogICAgICAg KG9yZy1leHBvcnQtdGFibGUtcm93LXN0YXJ0cy1yb3dncm91cC1wIHRhYmxlLXJvdyBpbmZvKSkp CgooZGVmdW4gb3JnLWV4cG9ydC10YWJsZS1yb3ctZW5kcy1oZWFkZXItcCAodGFibGUtcm93IGlu Zm8pCiAgIk5vbi1uaWwgd2hlbiBUQUJMRS1ST1cgaXMgdGhlIGxhc3QgdGFibGUgaGVhZGVyJ3Mg cm93LgpJTkZPIGlzIGEgcGxpc3QgdXNlZCBhcyBhIGNvbW11bmljYXRpb24gY2hhbm5lbC4iCiAg KGFuZCAob3JnLWV4cG9ydC10YWJsZS1yb3ctaW4taGVhZGVyLXAgdGFibGUtcm93IGluZm8pCiAg ICAgICAob3JnLWV4cG9ydC10YWJsZS1yb3ctZW5kcy1yb3dncm91cC1wIHRhYmxlLXJvdyBpbmZv KSkpCgooZGVmdW4gb3JnLWV4cG9ydC10YWJsZS1yb3ctbnVtYmVyICh0YWJsZS1yb3cgaW5mbykK ICAiUmV0dXJuIFRBQkxFLVJPVyBudW1iZXIuCklORk8gaXMgYSBwbGlzdCB1c2VkIGFzIGEgY29t bXVuaWNhdGlvbiBjaGFubmVsLiAgUmV0dXJuIHZhbHVlIGlzCnplcm8taW5kZXhlZCBhbmQgaWdu b3JlcyBzZXBhcmF0b3JzLiAgVGhlIGZ1bmN0aW9uIHJldHVybnMgbmlsCmZvciBzcGVjaWFsIHJv d3MgYW5kIHNlcGFyYXRvcnMuIgogICh3aGVuIChlcSAob3JnLWVsZW1lbnQtcHJvcGVydHkgOnR5 cGUgdGFibGUtcm93KSAnc3RhbmRhcmQpCiAgICAobGV0KiAoKGNhY2hlIChvciAocGxpc3QtZ2V0 IGluZm8gOnRhYmxlLXJvdy1udW1iZXItY2FjaGUpCgkJICAgICAgKGxldCAoKHRhYmxlIChtYWtl LWhhc2gtdGFibGUgOnRlc3QgIydlcSkpKQoJCQkocGxpc3QtcHV0IGluZm8gOnRhYmxlLXJvdy1u dW1iZXItY2FjaGUgdGFibGUpCgkJCXRhYmxlKSkpCgkgICAoY2FjaGVkIChnZXRoYXNoIHRhYmxl LXJvdyBjYWNoZSAnbm8tY2FjaGUpKSkKICAgICAgKGlmIChub3QgKGVxIGNhY2hlZCAnbm8tY2Fj aGUpKSBjYWNoZWQKCTs7IEZpcnN0IHRpbWUgYSByb3cgaXMgcXVlcmllZCwgcG9wdWxhdGUgY2Fj aGUgd2l0aCBhbGwgdGhlCgk7OyByb3dzIGZyb20gdGhlIHRhYmxlLgoJKGxldCAoKG51bWJlciAt MSkpCgkgIChvcmctZWxlbWVudC1tYXAgKG9yZy1leHBvcnQtZ2V0LXBhcmVudC10YWJsZSB0YWJs ZS1yb3cpICd0YWJsZS1yb3cKCSAgICAobGFtYmRhIChyb3cpCgkgICAgICAod2hlbiAoZXEgKG9y Zy1lbGVtZW50LXByb3BlcnR5IDp0eXBlIHJvdykgJ3N0YW5kYXJkKQoJCShwdXRoYXNoIHJvdyAo Y2wtaW5jZiBudW1iZXIpIGNhY2hlKSkpCgkgICAgaW5mbykpCgkoZ2V0aGFzaCB0YWJsZS1yb3cg Y2FjaGUpKSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtdGFibGUtZGltZW5zaW9ucyAodGFibGUgaW5m bykKICAiUmV0dXJuIFRBQkxFIGRpbWVuc2lvbnMuCgpJTkZPIGlzIGEgcGxpc3QgdXNlZCBhcyBh IGNvbW11bmljYXRpb24gY2hhbm5lbC4KClJldHVybiB2YWx1ZSBpcyBhIENPTlMgbGlrZSAoUk9X UyAuIENPTFVNTlMpIHdoZXJlClJPV1MgKHJlc3AuIENPTFVNTlMpIGlzIHRoZSBudW1iZXIgb2Yg ZXhwb3J0YWJsZQpyb3dzIChyZXNwLiBjb2x1bW5zKS4iCiAgKGxldCAoZmlyc3Qtcm93IChjb2x1 bW5zIDApIChyb3dzIDApKQogICAgOzsgU2V0IG51bWJlciBvZiByb3dzLCBhbmQgZXh0cmFjdCBm aXJzdCBvbmUuCiAgICAob3JnLWVsZW1lbnQtbWFwIHRhYmxlICd0YWJsZS1yb3cKICAgICAgKGxh bWJkYSAocm93KQoJKHdoZW4gKGVxIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6dHlwZSByb3cpICdz dGFuZGFyZCkKCSAgKGNsLWluY2Ygcm93cykKCSAgKHVubGVzcyBmaXJzdC1yb3cgKHNldHEgZmly c3Qtcm93IHJvdykpKSkKICAgICAgaW5mbykKICAgIDs7IFNldCBudW1iZXIgb2YgY29sdW1ucy4K ICAgIChvcmctZWxlbWVudC1tYXAgZmlyc3Qtcm93ICd0YWJsZS1jZWxsIChsYW1iZGEgKF8pIChj bC1pbmNmIGNvbHVtbnMpKSBpbmZvKQogICAgOzsgUmV0dXJuIHZhbHVlLgogICAgKGNvbnMgcm93 cyBjb2x1bW5zKSkpCgooZGVmdW4gb3JnLWV4cG9ydC10YWJsZS1jZWxsLWFkZHJlc3MgKHRhYmxl LWNlbGwgaW5mbykKICAiUmV0dXJuIGFkZHJlc3Mgb2YgYSByZWd1bGFyIFRBQkxFLUNFTEwgb2Jq ZWN0LgoKVEFCTEUtQ0VMTCBpcyB0aGUgY2VsbCBjb25zaWRlcmVkLiAgSU5GTyBpcyBhIHBsaXN0 IHVzZWQgYXMKYSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCgpBZGRyZXNzIGlzIGEgQ09OUyBjZWxs IChST1cgLiBDT0xVTU4pLCB3aGVyZSBST1cgYW5kIENPTFVNTiBhcmUKemVyby1iYXNlZCBpbmRl eC4gIE9ubHkgZXhwb3J0YWJsZSBjZWxscyBhcmUgY29uc2lkZXJlZC4gIFRoZQpmdW5jdGlvbiBy ZXR1cm5zIG5pbCBmb3Igb3RoZXIgY2VsbHMuIgogIChsZXQqICgodGFibGUtcm93IChvcmctZXhw b3J0LWdldC1wYXJlbnQgdGFibGUtY2VsbCkpCgkgKHJvdy1udW1iZXIgKG9yZy1leHBvcnQtdGFi bGUtcm93LW51bWJlciB0YWJsZS1yb3cgaW5mbykpKQogICAgKHdoZW4gcm93LW51bWJlcgogICAg ICAoY29ucyByb3ctbnVtYmVyCgkgICAgKGxldCAoKGNvbC1jb3VudCAwKSkKCSAgICAgIChvcmct ZWxlbWVudC1tYXAgdGFibGUtcm93ICd0YWJsZS1jZWxsCgkJKGxhbWJkYSAoY2VsbCkKCQkgIChp ZiAoZXEgY2VsbCB0YWJsZS1jZWxsKSBjb2wtY291bnQgKGNsLWluY2YgY29sLWNvdW50KSBuaWwp KQoJCWluZm8gJ2ZpcnN0LW1hdGNoKSkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1nZXQtdGFibGUt Y2VsbC1hdCAoYWRkcmVzcyB0YWJsZSBpbmZvKQogICJSZXR1cm4gcmVndWxhciB0YWJsZS1jZWxs IG9iamVjdCBhdCBBRERSRVNTIGluIFRBQkxFLgoKQWRkcmVzcyBpcyBhIENPTlMgY2VsbCAoUk9X IC4gQ09MVU1OKSwgd2hlcmUgUk9XIGFuZCBDT0xVTU4gYXJlCnplcm8tYmFzZWQgaW5kZXguICBU QUJMRSBpcyBhIHRhYmxlIHR5cGUgZWxlbWVudC4gIElORk8gaXMKYSBwbGlzdCB1c2VkIGFzIGEg Y29tbXVuaWNhdGlvbiBjaGFubmVsLgoKSWYgbm8gdGFibGUtY2VsbCwgYW1vbmcgZXhwb3J0YWJs ZSBjZWxscywgaXMgZm91bmQgYXQgQUREUkVTUywKcmV0dXJuIG5pbC4iCiAgKGxldCAoKGNvbHVt bi1wb3MgKGNkciBhZGRyZXNzKSkgKGNvbHVtbi1jb3VudCAwKSkKICAgIChvcmctZWxlbWVudC1t YXAKCTs7IFJvdyBhdCAoY2FyIGFkZHJlc3MpIG9yIG5pbC4KCShsZXQgKChyb3ctcG9zIChjYXIg YWRkcmVzcykpIChyb3ctY291bnQgMCkpCgkgIChvcmctZWxlbWVudC1tYXAgdGFibGUgJ3RhYmxl LXJvdwoJICAgIChsYW1iZGEgKHJvdykKCSAgICAgIChjb25kICgoZXEgKG9yZy1lbGVtZW50LXBy b3BlcnR5IDp0eXBlIHJvdykgJ3J1bGUpIG5pbCkKCQkgICAgKCg9IHJvdy1jb3VudCByb3ctcG9z KSByb3cpCgkJICAgICh0IChjbC1pbmNmIHJvdy1jb3VudCkgbmlsKSkpCgkgICAgaW5mbyAnZmly c3QtbWF0Y2gpKQoJJ3RhYmxlLWNlbGwKICAgICAgKGxhbWJkYSAoY2VsbCkKCShpZiAoPSBjb2x1 bW4tY291bnQgY29sdW1uLXBvcykgY2VsbAoJICAoY2wtaW5jZiBjb2x1bW4tY291bnQpIG5pbCkp CiAgICAgIGluZm8gJ2ZpcnN0LW1hdGNoKSkpCgoKOzs7OyBGb3IgVGFibGVzIG9mIENvbnRlbnRz Cjs7Cjs7IGBvcmctZXhwb3J0LWNvbGxlY3QtaGVhZGxpbmVzJyBidWlsZHMgYSBsaXN0IG9mIGFs bCBleHBvcnRhYmxlCjs7IGhlYWRsaW5lIGVsZW1lbnRzLCBtYXliZSBsaW1pdGVkIHRvIGEgY2Vy dGFpbiBkZXB0aC4gIE9uZSBjYW4gdGhlbgo7OyBlYXNpbHkgcGFyc2UgaXQgYW5kIHRyYW5zY29k ZSBpdC4KOzsKOzsgQnVpbGRpbmcgbGlzdHMgb2YgdGFibGVzLCBmaWd1cmVzIG9yIGxpc3Rpbmdz IGlzIHF1aXRlIHNpbWlsYXIuCjs7IE9uY2UgdGhlIGdlbmVyaWMgZnVuY3Rpb24gYG9yZy1leHBv cnQtY29sbGVjdC1lbGVtZW50cycgaXMgZGVmaW5lZCwKOzsgYG9yZy1leHBvcnQtY29sbGVjdC10 YWJsZXMnLCBgb3JnLWV4cG9ydC1jb2xsZWN0LWZpZ3VyZXMnIGFuZAo7OyBgb3JnLWV4cG9ydC1j b2xsZWN0LWxpc3RpbmdzJyBjYW4gYmUgZGVyaXZlZCBmcm9tIGl0Lgo7Owo7OyBgb3JnLWV4cG9y dC10b2MtZW50cnktYmFja2VuZCcgYnVpbGRzIGEgc3BlY2lhbCBhbm9ueW1vdXMgYmFjay1lbmQK OzsgdXNlZnVsIHRvIGV4cG9ydCB0YWJsZSBvZiBjb250ZW50cycgZW50cmllcy4KCihkZWZ1biBv cmctZXhwb3J0LWNvbGxlY3QtaGVhZGxpbmVzIChpbmZvICZvcHRpb25hbCBuIHNjb3BlKQogICJD b2xsZWN0IGhlYWRsaW5lcyBpbiBvcmRlciB0byBidWlsZCBhIHRhYmxlIG9mIGNvbnRlbnRzLgoK SU5GTyBpcyBhIHBsaXN0IHVzZWQgYXMgYSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCgpXaGVuIG9w dGlvbmFsIGFyZ3VtZW50IE4gaXMgYW4gaW50ZWdlciwgaXQgc3BlY2lmaWVzIHRoZSBkZXB0aCBv Zgp0aGUgdGFibGUgb2YgY29udGVudHMuICBPdGhlcndpc2UsIGl0IGlzIHNldCB0byB0aGUgdmFs dWUgb2YgdGhlCmxhc3QgaGVhZGxpbmUgbGV2ZWwuICBTZWUgYG9yZy1leHBvcnQtaGVhZGxpbmUt bGV2ZWxzJyBmb3IgbW9yZQppbmZvcm1hdGlvbi4KCk9wdGlvbmFsIGFyZ3VtZW50IFNDT1BFLCB3 aGVuIG5vbi1uaWwsIGlzIGFuIGVsZW1lbnQuICBJZiBpdCBpcwphIGhlYWRsaW5lLCBvbmx5IGNo aWxkcmVuIG9mIFNDT1BFIGFyZSBjb2xsZWN0ZWQuICBPdGhlcndpc2UsCmNvbGxlY3QgY2hpbGRy ZW4gb2YgdGhlIGhlYWRsaW5lIGNvbnRhaW5pbmcgcHJvdmlkZWQgZWxlbWVudC4gIElmCnRoZXJl IGlzIG5vIHN1Y2ggaGVhZGxpbmUsIGNvbGxlY3QgYWxsIGhlYWRsaW5lcy4gIEluIGFueSBjYXNl LAphcmd1bWVudCBOIGJlY29tZXMgcmVsYXRpdmUgdG8gdGhlIGxldmVsIG9mIHRoYXQgaGVhZGxp bmUuCgpSZXR1cm4gYSBsaXN0IG9mIGFsbCBleHBvcnRhYmxlIGhlYWRsaW5lcyBhcyBwYXJzZWQg ZWxlbWVudHMuCkZvb3Rub3RlIHNlY3Rpb25zIGFyZSBpZ25vcmVkLiIKICAobGV0KiAoKHNjb3Bl IChjb25kICgobm90IHNjb3BlKSAocGxpc3QtZ2V0IGluZm8gOnBhcnNlLXRyZWUpKQoJCSAgICAg ICgoZXEgKG9yZy1lbGVtZW50LXR5cGUgc2NvcGUpICdoZWFkbGluZSkgc2NvcGUpCgkJICAgICAg KChvcmctZXhwb3J0LWdldC1wYXJlbnQtaGVhZGxpbmUgc2NvcGUpKQoJCSAgICAgICh0IChwbGlz dC1nZXQgaW5mbyA6cGFyc2UtdHJlZSkpKSkKCSAobGltaXQgKHBsaXN0LWdldCBpbmZvIDpoZWFk bGluZS1sZXZlbHMpKQoJIChuIChpZiAobm90ICh3aG9sZW51bXAgbikpIGxpbWl0CgkgICAgICAo bWluIChpZiAoZXEgKG9yZy1lbGVtZW50LXR5cGUgc2NvcGUpICdvcmctZGF0YSkgbgoJCSAgICAg KCsgKG9yZy1leHBvcnQtZ2V0LXJlbGF0aXZlLWxldmVsIHNjb3BlIGluZm8pIG4pKQoJCSAgIGxp bWl0KSkpKQogICAgKG9yZy1lbGVtZW50LW1hcCAob3JnLWVsZW1lbnQtY29udGVudHMgc2NvcGUp ICdoZWFkbGluZQogICAgICAobGFtYmRhIChoKQoJKGFuZCAobm90IChvcmctZWxlbWVudC1wcm9w ZXJ0eSA6Zm9vdG5vdGUtc2VjdGlvbi1wIGgpKQoJICAgICAobm90IChlcXVhbCAibm90b2MiCgkJ CSAob3JnLWV4cG9ydC1nZXQtbm9kZS1wcm9wZXJ0eSA6VU5OVU1CRVJFRCBoIHQpKSkKCSAgICAg KD49IG4gKG9yZy1leHBvcnQtZ2V0LXJlbGF0aXZlLWxldmVsIGggaW5mbykpCgkgICAgIGgpKQog ICAgICBpbmZvKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1jb2xsZWN0LWVsZW1lbnRzICh0eXBlIGlu Zm8gJm9wdGlvbmFsIHByZWRpY2F0ZSkKICAiQ29sbGVjdCByZWZlcmVuY2VhYmxlIGVsZW1lbnRz IG9mIGEgZGV0ZXJtaW5lZCB0eXBlLgoKVFlQRSBjYW4gYmUgYSBzeW1ib2wgb3IgYSBsaXN0IG9m IHN5bWJvbHMgc3BlY2lmeWluZyBlbGVtZW50CnR5cGVzIHRvIHNlYXJjaC4gIE9ubHkgZWxlbWVu dHMgd2l0aCBhIGNhcHRpb24gYXJlIGNvbGxlY3RlZC4KCklORk8gaXMgYSBwbGlzdCB1c2VkIGFz IGEgY29tbXVuaWNhdGlvbiBjaGFubmVsLgoKV2hlbiBub24tbmlsLCBvcHRpb25hbCBhcmd1bWVu dCBQUkVESUNBVEUgaXMgYSBmdW5jdGlvbiBhY2NlcHRpbmcKb25lIGFyZ3VtZW50LCBhbiBlbGVt ZW50IG9mIHR5cGUgVFlQRS4gIEl0IHJldHVybnMgYSBub24tbmlsCnZhbHVlIHdoZW4gdGhhdCBl bGVtZW50IHNob3VsZCBiZSBjb2xsZWN0ZWQuCgpSZXR1cm4gYSBsaXN0IG9mIGFsbCBlbGVtZW50 cyBmb3VuZCwgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZS4iCiAgKG9yZy1lbGVtZW50LW1hcCAocGxp c3QtZ2V0IGluZm8gOnBhcnNlLXRyZWUpIHR5cGUKICAgIChsYW1iZGEgKGVsZW1lbnQpCiAgICAg IChhbmQgKG9yZy1lbGVtZW50LXByb3BlcnR5IDpjYXB0aW9uIGVsZW1lbnQpCgkgICAob3IgKG5v dCBwcmVkaWNhdGUpIChmdW5jYWxsIHByZWRpY2F0ZSBlbGVtZW50KSkKCSAgIGVsZW1lbnQpKQog ICAgaW5mbykpCgooZGVmdW4gb3JnLWV4cG9ydC1jb2xsZWN0LXRhYmxlcyAoaW5mbykKICAiQnVp bGQgYSBsaXN0IG9mIHRhYmxlcy4KSU5GTyBpcyBhIHBsaXN0IHVzZWQgYXMgYSBjb21tdW5pY2F0 aW9uIGNoYW5uZWwuCgpSZXR1cm4gYSBsaXN0IG9mIHRhYmxlIGVsZW1lbnRzIHdpdGggYSBjYXB0 aW9uLiIKICAob3JnLWV4cG9ydC1jb2xsZWN0LWVsZW1lbnRzICd0YWJsZSBpbmZvKSkKCihkZWZ1 biBvcmctZXhwb3J0LWNvbGxlY3QtZmlndXJlcyAoaW5mbyBwcmVkaWNhdGUpCiAgIkJ1aWxkIGEg bGlzdCBvZiBmaWd1cmVzLgoKSU5GTyBpcyBhIHBsaXN0IHVzZWQgYXMgYSBjb21tdW5pY2F0aW9u IGNoYW5uZWwuICBQUkVESUNBVEUgaXMKYSBmdW5jdGlvbiB3aGljaCBhY2NlcHRzIG9uZSBhcmd1 bWVudDogYSBwYXJhZ3JhcGggZWxlbWVudCBhbmQKd2hvc2UgcmV0dXJuIHZhbHVlIGlzIG5vbi1u aWwgd2hlbiB0aGF0IGVsZW1lbnQgc2hvdWxkIGJlCmNvbGxlY3RlZC4KCkEgZmlndXJlIGlzIGEg cGFyYWdyYXBoIHR5cGUgZWxlbWVudCwgd2l0aCBhIGNhcHRpb24sIHZlcmlmeWluZwpQUkVESUNB VEUuICBUaGUgbGF0dGVyIGhhcyB0byBiZSBwcm92aWRlZCBzaW5jZSBhIFwiZmlndXJlXCIgaXMK YSB2YWd1ZSBjb25jZXB0IHRoYXQgbWF5IGRlcGVuZCBvbiBiYWNrLWVuZC4KClJldHVybiBhIGxp c3Qgb2YgZWxlbWVudHMgcmVjb2duaXplZCBhcyBmaWd1cmVzLiIKICAob3JnLWV4cG9ydC1jb2xs ZWN0LWVsZW1lbnRzICdwYXJhZ3JhcGggaW5mbyBwcmVkaWNhdGUpKQoKKGRlZnVuIG9yZy1leHBv cnQtY29sbGVjdC1saXN0aW5ncyAoaW5mbykKICAiQnVpbGQgYSBsaXN0IG9mIHNvdXJjZSBibG9j a3MuCgpJTkZPIGlzIGEgcGxpc3QgdXNlZCBhcyBhIGNvbW11bmljYXRpb24gY2hhbm5lbC4KClJl dHVybiBhIGxpc3Qgb2YgYHNyYy1ibG9jaycgZWxlbWVudHMgd2l0aCBhIGNhcHRpb24uIgogIChv cmctZXhwb3J0LWNvbGxlY3QtZWxlbWVudHMgJ3NyYy1ibG9jayBpbmZvKSkKCihkZWZ1biBvcmct ZXhwb3J0LWV4Y2x1ZGVkLWZyb20tdG9jLXAgKGhlYWRsaW5lIGluZm8pCiAgIk5vbi1uaWwgaWYg SEVBRExJTkUgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gdGFibGVzIG9mIGNvbnRlbnRzLgoKSU5G TyBpcyBhIHBsaXN0IHVzZWQgYXMgYSBjb21tdW5pY2F0aW9uIGNoYW5uZWwuCgpOb3RlIHRoYXQg c3VjaCBoZWFkbGluZXMgYXJlIGFscmVhZHkgZXhjbHVkZWQgZnJvbQpgb3JnLWV4cG9ydC1jb2xs ZWN0LWhlYWRsaW5lcycuICBUaGVyZWZvcmUsIHRoaXMgZnVuY3Rpb24gaXMgbm90Cm5lY2Vzc2Fy eSBpZiB5b3Ugb25seSBuZWVkIHRvIGxpc3QgaGVhZGxpbmVzIGluIHRoZSB0YWJsZSBvZgpjb250 ZW50cy4gIEhvd2V2ZXIsIGl0IGlzIHVzZWZ1bCBpZiBzb21lIGFkZGl0aW9uYWwgcHJvY2Vzc2lu ZyBpcwpyZXF1aXJlZCBvbiBoZWFkbGluZXMgZXhjbHVkZWQgZnJvbSB0YWJsZSBvZiBjb250ZW50 cy4iCiAgKG9yIChvcmctZWxlbWVudC1wcm9wZXJ0eSA6Zm9vdG5vdGUtc2VjdGlvbi1wIGhlYWRs aW5lKQogICAgICAob3JnLWV4cG9ydC1sb3ctbGV2ZWwtcCBoZWFkbGluZSBpbmZvKQogICAgICAo ZXF1YWwgIm5vdG9jIiAob3JnLWV4cG9ydC1nZXQtbm9kZS1wcm9wZXJ0eSA6VU5OVU1CRVJFRCBo ZWFkbGluZSB0KSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtdG9jLWVudHJ5LWJhY2tlbmQgKHBhcmVu dCAmcmVzdCB0cmFuc2NvZGVycykKICAiUmV0dXJuIGFuIGV4cG9ydCBiYWNrLWVuZCBhcHByb3By aWF0ZSBmb3IgdGFibGUgb2YgY29udGVudHMgZW50cmllcy4KClBBUkVOVCBpcyBhbiBleHBvcnQg YmFjay1lbmQgdGhlIHJldHVybmVkIGJhY2stZW5kIHNob3VsZCBpbmhlcml0CmZyb20uCgpCeSBk ZWZhdWx0LCB0aGUgYmFjay1lbmQgcmVtb3ZlcyBmb290bm90ZSByZWZlcmVuY2VzIGFuZCB0YXJn ZXRzLgpJdCBhbHNvIGNoYW5nZXMgbGlua3MgYW5kIHJhZGlvIHRhcmdldHMgaW50byByZWd1bGFy IHRleHQuClRSQU5TQ09ERVJTIG9wdGlvbmFsIGFyZ3VtZW50LCB3aGVuIG5vbi1uaWwsIHNwZWNp ZmllcyBhZGRpdGlvbmFsCnRyYW5zY29kZXJzLiAgQSB0cmFuc2NvZGVyIGZvbGxvd3MgdGhlIHBh dHRlcm4gKFRZUEUgLiBGVU5DVElPTikKd2hlcmUgdHlwZSBpcyBhbiBlbGVtZW50IG9yIG9iamVj dCB0eXBlIGFuZCBGVU5DVElPTiB0aGUgZnVuY3Rpb24KdHJhbnNjb2RpbmcgaXQuIgogIChkZWNs YXJlIChpbmRlbnQgMSkpCiAgKG9yZy1leHBvcnQtY3JlYXRlLWJhY2tlbmQKICAgOnBhcmVudCBw YXJlbnQKICAgOnRyYW5zY29kZXJzCiAgIChhcHBlbmQgdHJhbnNjb2RlcnMKCSAgIGAoKGZvb3Ru b3RlLXJlZmVyZW5jZSAuICwjJ2lnbm9yZSkKCSAgICAgKGxpbmsgLiAsKGxhbWJkYSAobCBjIGkp CgkJCShvciBjCgkJCSAgICAob3JnLWV4cG9ydC1kYXRhCgkJCSAgICAgKG9yZy1lbGVtZW50LXBy b3BlcnR5IDpyYXctbGluayBsKQoJCQkgICAgIGkpKSkpCgkgICAgIChyYWRpby10YXJnZXQgLiAs KGxhbWJkYSAoX3IgYyBfKSBjKSkKCSAgICAgKHRhcmdldCAuICwjJ2lnbm9yZSkpKSkpCgoKOzs7 OyBTbWFydCBRdW90ZXMKOzsKOzsgVGhlIG1haW4gZnVuY3Rpb24gZm9yIHRoZSBzbWFydCBxdW90 ZXMgc3ViLXN5c3RlbSBpcwo7OyBgb3JnLWV4cG9ydC1hY3RpdmF0ZS1zbWFydC1xdW90ZXMnLCB3 aGljaCByZXBsYWNlcyBldmVyeSBxdW90ZSBpbgo7OyBhIGdpdmVuIHN0cmluZyBmcm9tIHRoZSBw YXJzZSB0cmVlIHdpdGggaXRzICJzbWFydCIgY291bnRlcnBhcnQuCjs7Cjs7IERpY3Rpb25hcnkg Zm9yIHNtYXJ0IHF1b3RlcyBpcyBzdG9yZWQgaW4KOzsgYG9yZy1leHBvcnQtc21hcnQtcXVvdGVz LWFsaXN0Jy4KCihkZWZjb25zdCBvcmctZXhwb3J0LXNtYXJ0LXF1b3Rlcy1hbGlzdAogICcoKCJh ciIKICAgICAocHJpbWFyeS1vcGVuaW5nCiAgICAgIDp1dGYtOCAiwqsiIDpodG1sICImbGFxdW87 IiA6bGF0ZXggIlxcZ3VpbGxlbW90bGVmdHt9IgogICAgICA6dGV4aW5mbyAiQGd1aWxsZW1ldGxl ZnR7fSIpCiAgICAgKHByaW1hcnktY2xvc2luZwogICAgICA6dXRmLTggIsK7IiA6aHRtbCAiJnJh cXVvOyIgOmxhdGV4ICJcXGd1aWxsZW1vdHJpZ2h0e30iCiAgICAgIDp0ZXhpbmZvICJAZ3VpbGxl bWV0cmlnaHR7fSIpCiAgICAgKHNlY29uZGFyeS1vcGVuaW5nIDp1dGYtOCAi4oC5IiA6aHRtbCAi JmxzYXF1bzsiIDpsYXRleCAiXFxndWlsc2luZ2xsZWZ0e30iCgkJCTp0ZXhpbmZvICJAZ3VpbHNp bmdsbGVmdHt9IikKICAgICAoc2Vjb25kYXJ5LWNsb3NpbmcgOnV0Zi04ICLigLoiIDpodG1sICIm cnNhcXVvOyIgOmxhdGV4ICJcXGd1aWxzaW5nbHJpZ2h0e30iCgkJCTp0ZXhpbmZvICJAZ3VpbHNp bmdscmlnaHR7fSIpCiAgICAgKGFwb3N0cm9waGUgOnV0Zi04ICLigJkiIDpodG1sICImcnNxdW87 IikpCiAgICAoImRhIgogICAgIDs7IG9uZSBtYXkgdXNlOiDCuy4uLsKrLCAiLi4uIiwg4oC6Li4u 4oC5LCBvciAnLi4uJy4KICAgICA7OyBodHRwczovL3Nwcm9nZXQuZGsvcmFhZC1vZy1yZWdsZXIv cmV0c2tyaXZuaW5nc3JlZ2xlci9yZXRza3Jpdm5pbmdzcmVnbGVyL2E3LTQwLTYwL2E3LTU4LWFu Zm9yc2Vsc3RlZ24vCiAgICAgOzsgTGFUZVggcXVvdGVzIHJlcXVpcmUgQmFiZWwhCiAgICAgKHBy aW1hcnktb3BlbmluZwogICAgICA6dXRmLTggIsK7IiA6aHRtbCAiJnJhcXVvOyIgOmxhdGV4ICI+ PiIgOnRleGluZm8gIkBndWlsbGVtZXRyaWdodHt9IikKICAgICAocHJpbWFyeS1jbG9zaW5nCiAg ICAgIDp1dGYtOCAiwqsiIDpodG1sICImbGFxdW87IiA6bGF0ZXggIjw8IiA6dGV4aW5mbyAiQGd1 aWxsZW1ldGxlZnR7fSIpCiAgICAgKHNlY29uZGFyeS1vcGVuaW5nCiAgICAgIDp1dGYtOCAi4oC6 IiA6aHRtbCAiJnJzYXF1bzsiIDpsYXRleCAiXFxmcnF7fSIgOnRleGluZm8gIkBndWlsc2luZ2xy aWdodHt9IikKICAgICAoc2Vjb25kYXJ5LWNsb3NpbmcKICAgICAgOnV0Zi04ICLigLkiIDpodG1s ICImbHNhcXVvOyIgOmxhdGV4ICJcXGZscXt9IiA6dGV4aW5mbyAiQGd1aWxzaW5nbGVmdHt9IikK ICAgICAoYXBvc3Ryb3BoZSA6dXRmLTggIuKAmSIgOmh0bWwgIiZyc3F1bzsiKSkKICAgICgiZGUi CiAgICAgKHByaW1hcnktb3BlbmluZwogICAgICA6dXRmLTggIuKAniIgOmh0bWwgIiZiZHF1bzsi IDpsYXRleCAiXCJgIiA6dGV4aW5mbyAiQHF1b3RlZGJsYmFzZXt9IikKICAgICAocHJpbWFyeS1j bG9zaW5nCiAgICAgIDp1dGYtOCAi4oCcIiA6aHRtbCAiJmxkcXVvOyIgOmxhdGV4ICJcIiciIDp0 ZXhpbmZvICJAcXVvdGVkYmxsZWZ0e30iKQogICAgIChzZWNvbmRhcnktb3BlbmluZwogICAgICA6 dXRmLTggIuKAmiIgOmh0bWwgIiZzYnF1bzsiIDpsYXRleCAiXFxnbHF7fSIgOnRleGluZm8gIkBx dW90ZXNpbmdsYmFzZXt9IikKICAgICAoc2Vjb25kYXJ5LWNsb3NpbmcKICAgICAgOnV0Zi04ICLi gJgiIDpodG1sICImbHNxdW87IiA6bGF0ZXggIlxcZ3Jxe30iIDp0ZXhpbmZvICJAcXVvdGVsZWZ0 e30iKQogICAgIChhcG9zdHJvcGhlIDp1dGYtOCAi4oCZIiA6aHRtbCAiJnJzcXVvOyIpKQogICAg KCJlbCIKICAgICAocHJpbWFyeS1vcGVuaW5nCiAgICAgIDp1dGYtOCAiwqsiIDpodG1sICImbGFx dW87IiA6bGF0ZXggIlxcZ3VpbGxlbW90bGVmdHt9IgogICAgICA6dGV4aW5mbyAiQGd1aWxsZW1l dGxlZnR7fSIpCiAgICAgKHByaW1hcnktY2xvc2luZwogICAgICA6dXRmLTggIsK7IiA6aHRtbCAi JnJhcXVvOyIgOmxhdGV4ICJcXGd1aWxsZW1vdHJpZ2h0e30iCiAgICAgIDp0ZXhpbmZvICJAZ3Vp bGxlbWV0cmlnaHR7fSIpCiAgICAgKHNlY29uZGFyeS1vcGVuaW5nIDp1dGYtOCAi4oCcIiA6aHRt bCAiJmxkcXVvOyIgOmxhdGV4ICJgYCIgOnRleGluZm8gImBgIikKICAgICAoc2Vjb25kYXJ5LWNs b3NpbmcgOnV0Zi04ICLigJ0iIDpodG1sICImcmRxdW87IiA6bGF0ZXggIicnIiA6dGV4aW5mbyAi JyciKQogICAgIChhcG9zdHJvcGhlIDp1dGYtOCAi4oCZIiA6aHRtbCAiJnJzcXVvOyIpKQogICAg KCJlbiIKICAgICAocHJpbWFyeS1vcGVuaW5nIDp1dGYtOCAi4oCcIiA6aHRtbCAiJmxkcXVvOyIg OmxhdGV4ICJgYCIgOnRleGluZm8gImBgIikKICAgICAocHJpbWFyeS1jbG9zaW5nIDp1dGYtOCAi 4oCdIiA6aHRtbCAiJnJkcXVvOyIgOmxhdGV4ICInJyIgOnRleGluZm8gIicnIikKICAgICAoc2Vj b25kYXJ5LW9wZW5pbmcgOnV0Zi04ICLigJgiIDpodG1sICImbHNxdW87IiA6bGF0ZXggImAiIDp0 ZXhpbmZvICJgIikKICAgICAoc2Vjb25kYXJ5LWNsb3NpbmcgOnV0Zi04ICLigJkiIDpodG1sICIm cnNxdW87IiA6bGF0ZXggIiciIDp0ZXhpbmZvICInIikKICAgICAoYXBvc3Ryb3BoZSA6dXRmLTgg IuKAmSIgOmh0bWwgIiZyc3F1bzsiKSkKICAgICgiZXMiCiAgICAgKHByaW1hcnktb3BlbmluZwog ICAgICA6dXRmLTggIsKrIiA6aHRtbCAiJmxhcXVvOyIgOmxhdGV4ICJcXGd1aWxsZW1vdGxlZnR7 fSIKICAgICAgOnRleGluZm8gIkBndWlsbGVtZXRsZWZ0e30iKQogICAgIChwcmltYXJ5LWNsb3Np bmcKICAgICAgOnV0Zi04ICLCuyIgOmh0bWwgIiZyYXF1bzsiIDpsYXRleCAiXFxndWlsbGVtb3Ry aWdodHt9IgogICAgICA6dGV4aW5mbyAiQGd1aWxsZW1ldHJpZ2h0e30iKQogICAgIChzZWNvbmRh cnktb3BlbmluZyA6dXRmLTggIuKAnCIgOmh0bWwgIiZsZHF1bzsiIDpsYXRleCAiYGAiIDp0ZXhp bmZvICJgYCIpCiAgICAgKHNlY29uZGFyeS1jbG9zaW5nIDp1dGYtOCAi4oCdIiA6aHRtbCAiJnJk cXVvOyIgOmxhdGV4ICInJyIgOnRleGluZm8gIicnIikKICAgICAoYXBvc3Ryb3BoZSA6dXRmLTgg IuKAmSIgOmh0bWwgIiZyc3F1bzsiKSkKICAgICgiZmEiCiAgICAgKHByaW1hcnktb3BlbmluZwog ICAgICA6dXRmLTggIsKrIiA6aHRtbCAiJmxhcXVvOyIgOmxhdGV4ICJcXGd1aWxsZW1vdGxlZnR7 fSIKICAgICAgOnRleGluZm8gIkBndWlsbGVtZXRsZWZ0e30iKQogICAgIChwcmltYXJ5LWNsb3Np bmcKICAgICAgOnV0Zi04ICLCuyIgOmh0bWwgIiZyYXF1bzsiIDpsYXRleCAiXFxndWlsbGVtb3Ry aWdodHt9IgogICAgICA6dGV4aW5mbyAiQGd1aWxsZW1ldHJpZ2h0e30iKQogICAgIChzZWNvbmRh cnktb3BlbmluZyA6dXRmLTggIuKAuSIgOmh0bWwgIiZsc2FxdW87IiA6bGF0ZXggIlxcZ3VpbHNp bmdsbGVmdHt9IgoJCQk6dGV4aW5mbyAiQGd1aWxzaW5nbGxlZnR7fSIpCiAgICAgKHNlY29uZGFy eS1jbG9zaW5nIDp1dGYtOCAi4oC6IiA6aHRtbCAiJnJzYXF1bzsiIDpsYXRleCAiXFxndWlsc2lu Z2xyaWdodHt9IgoJCQk6dGV4aW5mbyAiQGd1aWxzaW5nbHJpZ2h0e30iKQogICAgIChhcG9zdHJv cGhlIDp1dGYtOCAi4oCZIiA6aHRtbCAiJnJzcXVvOyIpKQogICAgKCJmciIKICAgICAocHJpbWFy eS1vcGVuaW5nCiAgICAgIDp1dGYtOCAiwqvCoCIgOmh0bWwgIiZsYXF1bzsmbmJzcDsiIDpsYXRl eCAiXFxvZyAiCiAgICAgIDp0ZXhpbmZvICJAZ3VpbGxlbWV0bGVmdHt9QHRpZXt9IikKICAgICAo cHJpbWFyeS1jbG9zaW5nCiAgICAgIDp1dGYtOCAiwqDCuyIgOmh0bWwgIiZuYnNwOyZyYXF1bzsi IDpsYXRleCAiXFxmZ3t9IgogICAgICA6dGV4aW5mbyAiQHRpZXt9QGd1aWxsZW1ldHJpZ2h0e30i KQogICAgIChzZWNvbmRhcnktb3BlbmluZwogICAgICA6dXRmLTggIsKrwqAiIDpodG1sICImbGFx dW87Jm5ic3A7IiA6bGF0ZXggIlxcb2cgIgogICAgICA6dGV4aW5mbyAiQGd1aWxsZW1ldGxlZnR7 fUB0aWV7fSIpCiAgICAgKHNlY29uZGFyeS1jbG9zaW5nIDp1dGYtOCAiwqDCuyIgOmh0bWwgIiZu YnNwOyZyYXF1bzsiIDpsYXRleCAiXFxmZ3t9IgoJCQk6dGV4aW5mbyAiQHRpZXt9QGd1aWxsZW1l dHJpZ2h0e30iKQogICAgIChhcG9zdHJvcGhlIDp1dGYtOCAi4oCZIiA6aHRtbCAiJnJzcXVvOyIp KQogICAgKCJpcyIKICAgICAocHJpbWFyeS1vcGVuaW5nCiAgICAgIDp1dGYtOCAi4oCeIiA6aHRt bCAiJmJkcXVvOyIgOmxhdGV4ICJcImAiIDp0ZXhpbmZvICJAcXVvdGVkYmxiYXNle30iKQogICAg IChwcmltYXJ5LWNsb3NpbmcKICAgICAgOnV0Zi04ICLigJwiIDpodG1sICImbGRxdW87IiA6bGF0 ZXggIlwiJyIgOnRleGluZm8gIkBxdW90ZWRibGxlZnR7fSIpCiAgICAgKHNlY29uZGFyeS1vcGVu aW5nCiAgICAgIDp1dGYtOCAi4oCaIiA6aHRtbCAiJnNicXVvOyIgOmxhdGV4ICJcXGdscXt9IiA6 dGV4aW5mbyAiQHF1b3Rlc2luZ2xiYXNle30iKQogICAgIChzZWNvbmRhcnktY2xvc2luZwogICAg ICA6dXRmLTggIuKAmCIgOmh0bWwgIiZsc3F1bzsiIDpsYXRleCAiXFxncnF7fSIgOnRleGluZm8g IkBxdW90ZWxlZnR7fSIpCiAgICAgKGFwb3N0cm9waGUgOnV0Zi04ICLigJkiIDpodG1sICImcnNx dW87IikpCiAgICAoIml0IgogICAgIChwcmltYXJ5LW9wZW5pbmcgOnV0Zi04ICLigJwiIDpodG1s ICImbGRxdW87IiA6bGF0ZXggImBgIiA6dGV4aW5mbyAiYGAiKQogICAgIChwcmltYXJ5LWNsb3Np bmcgOnV0Zi04ICLigJ0iIDpodG1sICImcmRxdW87IiA6bGF0ZXggIicnIiA6dGV4aW5mbyAiJyci KQogICAgIChzZWNvbmRhcnktb3BlbmluZyA6dXRmLTggIuKAmCIgOmh0bWwgIiZsc3F1bzsiIDps YXRleCAiYCIgOnRleGluZm8gImAiKQogICAgIChzZWNvbmRhcnktY2xvc2luZyA6dXRmLTggIuKA mSIgOmh0bWwgIiZyc3F1bzsiIDpsYXRleCAiJyIgOnRleGluZm8gIiciKQogICAgIChhcG9zdHJv cGhlIDp1dGYtOCAi4oCZIiA6aHRtbCAiJnJzcXVvOyIpKQogICAgKCJubyIKICAgICA7OyBodHRw czovL25uLndpa2lwZWRpYS5vcmcvd2lraS9TaXRhdHRlaWtuCiAgICAgKHByaW1hcnktb3Blbmlu ZwogICAgICA6dXRmLTggIsKrIiA6aHRtbCAiJmxhcXVvOyIgOmxhdGV4ICJcXGd1aWxsZW1vdGxl ZnR7fSIKICAgICAgOnRleGluZm8gIkBndWlsbGVtZXRsZWZ0e30iKQogICAgIChwcmltYXJ5LWNs b3NpbmcKICAgICAgOnV0Zi04ICLCuyIgOmh0bWwgIiZyYXF1bzsiIDpsYXRleCAiXFxndWlsbGVt b3RyaWdodHt9IgogICAgICA6dGV4aW5mbyAiQGd1aWxsZW1ldHJpZ2h0e30iKQogICAgIChzZWNv bmRhcnktb3BlbmluZyA6dXRmLTggIuKAmCIgOmh0bWwgIiZsc3F1bzsiIDpsYXRleCAiYCIgOnRl eGluZm8gImAiKQogICAgIChzZWNvbmRhcnktY2xvc2luZyA6dXRmLTggIuKAmSIgOmh0bWwgIiZy c3F1bzsiIDpsYXRleCAiJyIgOnRleGluZm8gIiciKQogICAgIChhcG9zdHJvcGhlIDp1dGYtOCAi 4oCZIiA6aHRtbCAiJnJzcXVvOyIpKQogICAgKCJuYiIKICAgICA7OyBodHRwczovL25uLndpa2lw ZWRpYS5vcmcvd2lraS9TaXRhdHRlaWtuCiAgICAgKHByaW1hcnktb3BlbmluZwogICAgICA6dXRm LTggIsKrIiA6aHRtbCAiJmxhcXVvOyIgOmxhdGV4ICJcXGd1aWxsZW1vdGxlZnR7fSIKICAgICAg OnRleGluZm8gIkBndWlsbGVtZXRsZWZ0e30iKQogICAgIChwcmltYXJ5LWNsb3NpbmcKICAgICAg OnV0Zi04ICLCuyIgOmh0bWwgIiZyYXF1bzsiIDpsYXRleCAiXFxndWlsbGVtb3RyaWdodHt9Igog ICAgICA6dGV4aW5mbyAiQGd1aWxsZW1ldHJpZ2h0e30iKQogICAgIChzZWNvbmRhcnktb3Blbmlu ZyA6dXRmLTggIuKAmCIgOmh0bWwgIiZsc3F1bzsiIDpsYXRleCAiYCIgOnRleGluZm8gImAiKQog ICAgIChzZWNvbmRhcnktY2xvc2luZyA6dXRmLTggIuKAmSIgOmh0bWwgIiZyc3F1bzsiIDpsYXRl eCAiJyIgOnRleGluZm8gIiciKQogICAgIChhcG9zdHJvcGhlIDp1dGYtOCAi4oCZIiA6aHRtbCAi JnJzcXVvOyIpKQogICAgKCJubiIKICAgICA7OyBodHRwczovL25uLndpa2lwZWRpYS5vcmcvd2lr aS9TaXRhdHRlaWtuCiAgICAgKHByaW1hcnktb3BlbmluZwogICAgICA6dXRmLTggIsKrIiA6aHRt bCAiJmxhcXVvOyIgOmxhdGV4ICJcXGd1aWxsZW1vdGxlZnR7fSIKICAgICAgOnRleGluZm8gIkBn dWlsbGVtZXRsZWZ0e30iKQogICAgIChwcmltYXJ5LWNsb3NpbmcKICAgICAgOnV0Zi04ICLCuyIg Omh0bWwgIiZyYXF1bzsiIDpsYXRleCAiXFxndWlsbGVtb3RyaWdodHt9IgogICAgICA6dGV4aW5m byAiQGd1aWxsZW1ldHJpZ2h0e30iKQogICAgIChzZWNvbmRhcnktb3BlbmluZyA6dXRmLTggIuKA mCIgOmh0bWwgIiZsc3F1bzsiIDpsYXRleCAiYCIgOnRleGluZm8gImAiKQogICAgIChzZWNvbmRh cnktY2xvc2luZyA6dXRmLTggIuKAmSIgOmh0bWwgIiZyc3F1bzsiIDpsYXRleCAiJyIgOnRleGlu Zm8gIiciKQogICAgIChhcG9zdHJvcGhlIDp1dGYtOCAi4oCZIiA6aHRtbCAiJnJzcXVvOyIpKQog ICAgKCJybyIKICAgICAocHJpbWFyeS1vcGVuaW5nCiAgICAgIDp1dGYtOCAi4oCeIiA6aHRtbCAi JmJkcXVvOyIgOmxhdGV4ICJcImAiIDp0ZXhpbmZvICJAcXVvdGVkYmxiYXNle30iKQogICAgIChw cmltYXJ5LWNsb3NpbmcgOnV0Zi04ICLigJ0iIDpodG1sICImcmRxdW87IiA6bGF0ZXggIicnIiA6 dGV4aW5mbyAiJyciKQogICAgIChzZWNvbmRhcnktb3BlbmluZwogICAgICA6dXRmLTggIsKrIiA6 aHRtbCAiJmxhcXVvOyIgOmxhdGV4ICJcXGd1aWxsZW1vdGxlZnR7fSIKICAgICAgOnRleGluZm8g IkBndWlsbGVtZXRsZWZ0e30iKQogICAgIChzZWNvbmRhcnktY2xvc2luZwogICAgICA6dXRmLTgg IsK7IiA6aHRtbCAiJnJhcXVvOyIgOmxhdGV4ICJcXGd1aWxsZW1vdHJpZ2h0e30iCiAgICAgIDp0 ZXhpbmZvICJAZ3VpbGxlbWV0cmlnaHR7fSIpCiAgICAgKGFwb3N0cm9waGUgOnV0Zi04ICLigJki IDpodG1sICImcnNxdW87IikpCiAgICAoInJ1IgogICAgIDs7IGh0dHBzOi8vcnUud2lraXBlZGlh Lm9yZy93aWtpLyVEMCU5QSVEMCVCMCVEMCVCMiVEMSU4QiVEMSU4NyVEMCVCQSVEMCVCOCMuRDAu OUEuRDAuQjAuRDAuQjIuRDEuOEIuRDEuODcuRDAuQkEuRDAuQjguMkNfLkQwLkI4LkQxLjgxLkQw LkJGLkQwLkJFLkQwLkJCLkQxLjhDLkQwLkI3LkQxLjgzLkQwLkI1LkQwLkJDLkQxLjhCLkQwLkI1 Xy5EMC5CMl8uRDEuODAuRDEuODMuRDEuODEuRDEuODEuRDAuQkEuRDAuQkUuRDAuQkNfLkQxLjhG LkQwLkI3LkQxLjhCLkQwLkJBLkQwLkI1CiAgICAgOzsgaHR0cHM6Ly93d3cuYXJ0bGViZWRldi5y dS9rb3ZvZHN0dm8vc2VjdGlvbnMvMTA0LwogICAgIChwcmltYXJ5LW9wZW5pbmcgOnV0Zi04ICLC qyIgOmh0bWwgIiZsYXF1bzsiIDpsYXRleCAie308PCIKCQkgICAgICA6dGV4aW5mbyAiQGd1aWxs ZW1ldGxlZnR7fSIpCiAgICAgKHByaW1hcnktY2xvc2luZyA6dXRmLTggIsK7IiA6aHRtbCAiJnJh cXVvOyIgOmxhdGV4ICI+Pnt9IgoJCSAgICAgIDp0ZXhpbmZvICJAZ3VpbGxlbWV0cmlnaHR7fSIp CiAgICAgKHNlY29uZGFyeS1vcGVuaW5nCiAgICAgIDp1dGYtOCAi4oCeIiA6aHRtbCAiJmJkcXVv OyIgOmxhdGV4ICJcXGdscXF7fSIgOnRleGluZm8gIkBxdW90ZWRibGJhc2V7fSIpCiAgICAgKHNl Y29uZGFyeS1jbG9zaW5nCiAgICAgIDp1dGYtOCAi4oCcIiA6aHRtbCAiJmxkcXVvOyIgOmxhdGV4 ICJcXGdycXF7fSIgOnRleGluZm8gIkBxdW90ZWRibGxlZnR7fSIpCiAgICAgKGFwb3N0cm9waGUg OnV0Zi04ICLigJkiIDpodG1sOiAiJiMzOTsiKSkKICAgICgic2wiCiAgICAgOzsgQmFzZWQgb24g aHR0cHM6Ly9zbC53aWtpcGVkaWEub3JnL3dpa2kvTmFyZWtvdmFqCiAgICAgKHByaW1hcnktb3Bl bmluZyA6dXRmLTggIsKrIiA6aHRtbCAiJmxhcXVvOyIgOmxhdGV4ICJ7fTw8IgoJCSAgICAgIDp0 ZXhpbmZvICJAZ3VpbGxlbWV0bGVmdHt9IikKICAgICAocHJpbWFyeS1jbG9zaW5nIDp1dGYtOCAi wrsiIDpodG1sICImcmFxdW87IiA6bGF0ZXggIj4+e30iCgkJICAgICAgOnRleGluZm8gIkBndWls bGVtZXRyaWdodHt9IikKICAgICAoc2Vjb25kYXJ5LW9wZW5pbmcKICAgICAgOnV0Zi04ICLigJ4i IDpodG1sICImYmRxdW87IiA6bGF0ZXggIlxcZ2xxcXt9IiA6dGV4aW5mbyAiQHF1b3RlZGJsYmFz ZXt9IikKICAgICAoc2Vjb25kYXJ5LWNsb3NpbmcKICAgICAgOnV0Zi04ICLigJwiIDpodG1sICIm bGRxdW87IiA6bGF0ZXggIlxcZ3JxcXt9IiA6dGV4aW5mbyAiQHF1b3RlZGJsbGVmdHt9IikKICAg ICAoYXBvc3Ryb3BoZSA6dXRmLTggIuKAmSIgOmh0bWwgIiZyc3F1bzsiKSkKICAgICgic3YiCiAg ICAgOzsgQmFzZWQgb24gaHR0cHM6Ly9zdi53aWtpcGVkaWEub3JnL3dpa2kvQ2l0YXR0ZWNrZW4K ICAgICAocHJpbWFyeS1vcGVuaW5nIDp1dGYtOCAi4oCdIiA6aHRtbCAiJnJkcXVvOyIgOmxhdGV4 ICLigJnigJkiIDp0ZXhpbmZvICLigJnigJkiKQogICAgIChwcmltYXJ5LWNsb3NpbmcgOnV0Zi04 ICLigJ0iIDpodG1sICImcmRxdW87IiA6bGF0ZXggIuKAmeKAmSIgOnRleGluZm8gIuKAmeKAmSIp CiAgICAgKHNlY29uZGFyeS1vcGVuaW5nIDp1dGYtOCAi4oCZIiA6aHRtbCAiJnJzcXVvOyIgOmxh dGV4ICLigJkiIDp0ZXhpbmZvICJgIikKICAgICAoc2Vjb25kYXJ5LWNsb3NpbmcgOnV0Zi04ICLi gJkiIDpodG1sICImcnNxdW87IiA6bGF0ZXggIuKAmSIgOnRleGluZm8gIiciKQogICAgIChhcG9z dHJvcGhlIDp1dGYtOCAi4oCZIiA6aHRtbCAiJnJzcXVvOyIpKSkKICAiU21hcnQgcXVvdGVzIHRy YW5zbGF0aW9ucy4KCkFsaXN0IHdob3NlIENBUiBpcyBhIGxhbmd1YWdlIHN0cmluZyBhbmQgQ0RS IGlzIGFuIGFsaXN0IHdpdGgKcXVvdGUgdHlwZSBhcyBrZXkgYW5kIGEgcGxpc3QgYXNzb2NpYXRp bmcgdmFyaW91cyBlbmNvZGluZ3MgdG8KdGhlaXIgdHJhbnNsYXRpb24gYXMgdmFsdWUuCgpBIHF1 b3RlIHR5cGUgY2FuIGJlIGFueSBzeW1ib2wgYW1vbmcgYHByaW1hcnktb3BlbmluZycsCmBwcmlt YXJ5LWNsb3NpbmcnLCBgc2Vjb25kYXJ5LW9wZW5pbmcnLCBgc2Vjb25kYXJ5LWNsb3NpbmcnIGFu ZApgYXBvc3Ryb3BoZScuCgpWYWxpZCBlbmNvZGluZ3MgaW5jbHVkZSBgOnV0Zi04JywgYDpodG1s JywgYDpsYXRleCcgYW5kCmA6dGV4aW5mbycuCgpJZiBubyB0cmFuc2xhdGlvbiBpcyBmb3VuZCwg dGhlIHF1b3RlIGNoYXJhY3RlciBpcyBsZWZ0IGFzLWlzLiIpCgooZGVmdW4gb3JnLWV4cG9ydC0t c21hcnQtcXVvdGUtc3RhdHVzIChzIGluZm8pCiAgIlJldHVybiBzbWFydCBxdW90ZSBzdGF0dXMg YXQgdGhlIGJlZ2lubmluZyBvZiBzdHJpbmcgUy4KSU5GTyBpcyB0aGUgY3VycmVudCBleHBvcnQg c3RhdGUsIGFzIGEgcGxpc3QuIgogIChsZXQqICgocGFyZW50IChvcmctZWxlbWVudC1wcm9wZXJ0 eSA6cGFyZW50IHMpKQoJIChjYWNoZSAob3IgKHBsaXN0LWdldCBpbmZvIDpzbWFydC1xdW90ZS1j YWNoZSkKCQkgICAgKGxldCAoKHRhYmxlIChtYWtlLWhhc2gtdGFibGUgOnRlc3QgIydlcSkpKQoJ CSAgICAgIChwbGlzdC1wdXQgaW5mbyA6c21hcnQtcXVvdGUtY2FjaGUgdGFibGUpCgkJICAgICAg dGFibGUpKSkKCSAodmFsdWUgKGdldGhhc2ggcGFyZW50IGNhY2hlICdtaXNzaW5nLWRhdGEpKSkK ICAgIChpZiAobm90IChlcSB2YWx1ZSAnbWlzc2luZy1kYXRhKSkgKGNkciAoYXNzcSBzIHZhbHVl KSkKICAgICAgKGxldCAobGV2ZWwxLW9wZW4gZnVsbC1zdGF0dXMpCgkob3JnLWVsZW1lbnQtbWFw CgkgICAgKGxldCAoKHNlY29uZGFyeSAob3JnLWVsZW1lbnQtc2Vjb25kYXJ5LXAgcykpKQoJICAg ICAgKGlmIHNlY29uZGFyeSAob3JnLWVsZW1lbnQtcHJvcGVydHkgc2Vjb25kYXJ5IHBhcmVudCkK CQkob3JnLWVsZW1lbnQtY29udGVudHMgcGFyZW50KSkpCgkgICAgJ3BsYWluLXRleHQKCSAgKGxh bWJkYSAodGV4dCkKCSAgICAobGV0ICgoc3RhcnQgMCkgY3VycmVudC1zdGF0dXMpCgkgICAgICAo d2hpbGUgKHNldHEgc3RhcnQgKHN0cmluZy1tYXRjaCAiWydcIl0iIHRleHQgc3RhcnQpKQoJCShw dXNoCgkJIChjb25kCgkJICAoKGVxdWFsIChtYXRjaC1zdHJpbmcgMCB0ZXh0KSAiXCIiKQoJCSAg IChzZXRmIGxldmVsMS1vcGVuIChub3QgbGV2ZWwxLW9wZW4pKQoJCSAgIChpZiBsZXZlbDEtb3Bl biAncHJpbWFyeS1vcGVuaW5nICdwcmltYXJ5LWNsb3NpbmcpKQoJCSAgOzsgTm90IGFscmVhZHkg aW4gYSBsZXZlbCAxIHF1b3RlOiB0aGlzIGlzIGFuCgkJICA7OyBhcG9zdHJvcGhlLgoJCSAgKChu b3QgbGV2ZWwxLW9wZW4pICdhcG9zdHJvcGhlKQoJCSAgOzsgRXh0cmFjdCBwcmV2aW91cyBjaGFy IGFuZCBuZXh0IGNoYXIuICBBcwoJCSAgOzsgYSBzcGVjaWFsIGNhc2UsIHRoZXkgY2FuIGFsc28g YmUgc2V0IHRvIGBibGFuaycsCgkJICA7OyBgbm8tYmxhbmsnIG9yIG5pbC4gIFRoZW4gZGV0ZXJt aW5lIGlmIGN1cnJlbnQKCQkgIDs7IG1hdGNoIGlzIGFsbG93ZWQgYXMgYW4gb3BlbmluZyBxdW90 ZSBvciBhIGNsb3NpbmcKCQkgIDs7IHF1b3RlLgoJCSAgKHQKCQkgICAobGV0KiAoKHByZXZpb3Vz CgkJCSAgIChpZiAoPiBzdGFydCAwKSAoc3Vic3RyaW5nIHRleHQgKDEtIHN0YXJ0KSBzdGFydCkK CQkJICAgICAobGV0ICgocCAob3JnLWV4cG9ydC1nZXQtcHJldmlvdXMtZWxlbWVudAoJCQkJICAg ICAgIHRleHQgaW5mbykpKQoJCQkgICAgICAgKGNvbmQgKChub3QgcCkgbmlsKQoJCQkJICAgICAo KHN0cmluZ3AgcCkgKHN1YnN0cmluZyBwIC0xKSkKCQkJCSAgICAgKChtZW1xIChvcmctZWxlbWVu dC1wcm9wZXJ0eSA6cG9zdC1ibGFuayBwKQoJCQkJCSAgICAnKDAgbmlsKSkKCQkJCSAgICAgICdu by1ibGFuaykKCQkJCSAgICAgKHQgJ2JsYW5rKSkpKSkKCQkJICAobmV4dAoJCQkgICAoaWYgKDwg KDErIHN0YXJ0KSAobGVuZ3RoIHRleHQpKQoJCQkgICAgICAgKHN1YnN0cmluZyB0ZXh0ICgxKyBz dGFydCkgKCsgc3RhcnQgMikpCgkJCSAgICAgKGxldCAoKG4gKG9yZy1leHBvcnQtZ2V0LW5leHQt ZWxlbWVudCB0ZXh0IGluZm8pKSkKCQkJICAgICAgIChjb25kICgobm90IG4pIG5pbCkKCQkJCSAg ICAgKChzdHJpbmdwIG4pIChzdWJzdHJpbmcgbiAwIDEpKQoJCQkJICAgICAodCAnbm8tYmxhbmsp KSkpKQoJCQkgIChhbGxvdy1vcGVuCgkJCSAgIChhbmQgKGlmIChzdHJpbmdwIHByZXZpb3VzKQoJ CQkJICAgIChzdHJpbmctbWF0Y2ggIlxcc1wiXFx8XFxzLVxcfFxccygiCgkJCQkJCSAgcHJldmlv dXMpCgkJCQkgIChtZW1xIHByZXZpb3VzICcoYmxhbmsgbmlsKSkpCgkJCQkoaWYgKHN0cmluZ3Ag bmV4dCkKCQkJCSAgICAoc3RyaW5nLW1hdGNoICJcXHdcXHxcXHMuXFx8XFxzXyIgbmV4dCkKCQkJ CSAgKGVxIG5leHQgJ25vLWJsYW5rKSkpKQoJCQkgIChhbGxvdy1jbG9zZQoJCQkgICAoYW5kIChp ZiAoc3RyaW5ncCBwcmV2aW91cykKCQkJCSAgICAoc3RyaW5nLW1hdGNoICJcXHdcXHxcXHMuXFx8 XFxzXyIgcHJldmlvdXMpCgkJCQkgIChlcSBwcmV2aW91cyAnbm8tYmxhbmspKQoJCQkJKGlmIChz dHJpbmdwIG5leHQpCgkJCQkgICAgKHN0cmluZy1tYXRjaCAiXFxzLVxcfFxccylcXHxcXHMuXFx8 XFxzXCIiCgkJCQkJCSAgbmV4dCkKCQkJCSAgKG1lbXEgbmV4dCAnKGJsYW5rIG5pbCkpKSkpKQoJ CSAgICAgKGNvbmQKCQkgICAgICAoKGFuZCBhbGxvdy1vcGVuIGFsbG93LWNsb3NlKSAoZXJyb3Ig IlNob3VsZCBub3QgaGFwcGVuIikpCgkJICAgICAgKGFsbG93LW9wZW4gJ3NlY29uZGFyeS1vcGVu aW5nKQoJCSAgICAgIChhbGxvdy1jbG9zZSAnc2Vjb25kYXJ5LWNsb3NpbmcpCgkJICAgICAgKHQg J2Fwb3N0cm9waGUpKSkpKQoJCSBjdXJyZW50LXN0YXR1cykKCQkoY2wtaW5jZiBzdGFydCkpCgkg ICAgICAod2hlbiBjdXJyZW50LXN0YXR1cwoJCShwdXNoIChjb25zIHRleHQgKG5yZXZlcnNlIGN1 cnJlbnQtc3RhdHVzKSkgZnVsbC1zdGF0dXMpKSkpCgkgIGluZm8gbmlsIG9yZy1lbGVtZW50LXJl Y3Vyc2l2ZS1vYmplY3RzKQoJKHB1dGhhc2ggcGFyZW50IGZ1bGwtc3RhdHVzIGNhY2hlKQoJKGNk ciAoYXNzcSBzIGZ1bGwtc3RhdHVzKSkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1hY3RpdmF0ZS1z bWFydC1xdW90ZXMgKHMgZW5jb2RpbmcgaW5mbyAmb3B0aW9uYWwgb3JpZ2luYWwpCiAgIlJlcGxh Y2UgcmVndWxhciBxdW90ZXMgd2l0aCBcInNtYXJ0XCIgcXVvdGVzIGluIHN0cmluZyBTLgoKRU5D T0RJTkcgaXMgYSBzeW1ib2wgYW1vbmcgYDpodG1sJywgYDpsYXRleCcsIGA6dGV4aW5mbycgYW5k CmA6dXRmLTgnLiAgSU5GTyBpcyBhIHBsaXN0IHVzZWQgYXMgYSBjb21tdW5pY2F0aW9uIGNoYW5u ZWwuCgpUaGUgZnVuY3Rpb24gaGFzIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHN0cmlu ZwpzdXJyb3VuZGluZ3MgaW4gcGFyc2UgdHJlZS4gIEl0IGNhbiBvbmx5IGhhcHBlbiB3aXRoIGFu CnVubW9kaWZpZWQgc3RyaW5nLiAgVGh1cywgaWYgUyBoYXMgYWxyZWFkeSBiZWVuIHRocm91Z2gg YW5vdGhlcgpwcm9jZXNzLCBhIG5vbi1uaWwgT1JJR0lOQUwgb3B0aW9uYWwgYXJndW1lbnQgd2ls bCBwcm92aWRlIHRoYXQKb3JpZ2luYWwgc3RyaW5nLgoKUmV0dXJuIHRoZSBuZXcgc3RyaW5nLiIK ICAobGV0ICgocXVvdGUtc3RhdHVzCgkgKGNvcHktc2VxdWVuY2UgKG9yZy1leHBvcnQtLXNtYXJ0 LXF1b3RlLXN0YXR1cyAob3Igb3JpZ2luYWwgcykgaW5mbykpKSkKICAgIChyZXBsYWNlLXJlZ2V4 cC1pbi1zdHJpbmcKICAgICAiWydcIl0iCiAgICAgKGxhbWJkYSAobWF0Y2gpCiAgICAgICAob3Ig KHBsaXN0LWdldAoJICAgIChjZHIgKGFzc3EgKHBvcCBxdW90ZS1zdGF0dXMpCgkJICAgICAgIChj ZHIgKGFzc29jIChwbGlzdC1nZXQgaW5mbyA6bGFuZ3VhZ2UpCgkJCQkgICBvcmctZXhwb3J0LXNt YXJ0LXF1b3Rlcy1hbGlzdCkpKSkKCSAgICBlbmNvZGluZykKCSAgIG1hdGNoKSkKICAgICBzIG5p bCB0KSkpCgo7Ozs7IFRvcG9sb2d5Cjs7Cjs7IEhlcmUgYXJlIHZhcmlvdXMgZnVuY3Rpb25zIHRv IHJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZQo7OyBuZWlnaGJvcmhvb2Qgb2YgYSBnaXZl biBlbGVtZW50IG9yIG9iamVjdC4gIE5laWdoYm9ycyBvZiBpbnRlcmVzdAo7OyBhcmUgZGlyZWN0 IHBhcmVudCAoYG9yZy1leHBvcnQtZ2V0LXBhcmVudCcpLCBwYXJlbnQgaGVhZGxpbmUKOzsgKGBv cmctZXhwb3J0LWdldC1wYXJlbnQtaGVhZGxpbmUnKSwgZmlyc3QgZWxlbWVudCBjb250YWluaW5n IGFuCjs7IG9iamVjdCwgKGBvcmctZXhwb3J0LWdldC1wYXJlbnQtZWxlbWVudCcpLCBwYXJlbnQg dGFibGUKOzsgKGBvcmctZXhwb3J0LWdldC1wYXJlbnQtdGFibGUnKSwgcHJldmlvdXMgZWxlbWVu dCBvciBvYmplY3QKOzsgKGBvcmctZXhwb3J0LWdldC1wcmV2aW91cy1lbGVtZW50JykgYW5kIG5l eHQgZWxlbWVudCBvciBvYmplY3QKOzsgKGBvcmctZXhwb3J0LWdldC1uZXh0LWVsZW1lbnQnKS4K Cjs7IGRlZnN1YnN0IG9yZy1leHBvcnQtZ2V0LXBhcmVudCBtdXN0IGJlIGRlZmluZWQgYmVmb3Jl IGZpcnN0IHVzZQoKKGRlZnVuIG9yZy1leHBvcnQtZ2V0LXBhcmVudC1oZWFkbGluZSAoYmxvYikK ICAiUmV0dXJuIEJMT0IgcGFyZW50IGhlYWRsaW5lIG9yIG5pbC4KQkxPQiBpcyB0aGUgZWxlbWVu dCBvciBvYmplY3QgYmVpbmcgY29uc2lkZXJlZC4iCiAgKG9yZy1lbGVtZW50LWxpbmVhZ2UgYmxv YiAnKGhlYWRsaW5lKSkpCgooZGVmdW4gb3JnLWV4cG9ydC1nZXQtcGFyZW50LWVsZW1lbnQgKG9i amVjdCkKICAiUmV0dXJuIGZpcnN0IGVsZW1lbnQgY29udGFpbmluZyBPQkpFQ1Qgb3IgbmlsLgpP QkpFQ1QgaXMgdGhlIG9iamVjdCB0byBjb25zaWRlci4iCiAgKG9yZy1lbGVtZW50LWxpbmVhZ2Ug b2JqZWN0IG9yZy1lbGVtZW50LWFsbC1lbGVtZW50cykpCgooZGVmdW4gb3JnLWV4cG9ydC1nZXQt cGFyZW50LXRhYmxlIChvYmplY3QpCiAgIlJldHVybiBPQkpFQ1QgcGFyZW50IHRhYmxlIG9yIG5p bC4KT0JKRUNUIGlzIGVpdGhlciBhIGB0YWJsZS1jZWxsJyBvciBgdGFibGUtZWxlbWVudCcgdHlw ZSBvYmplY3QuIgogIChvcmctZWxlbWVudC1saW5lYWdlIG9iamVjdCAnKHRhYmxlKSkpCgooZGVm dW4gb3JnLWV4cG9ydC1nZXQtcHJldmlvdXMtZWxlbWVudCAoYmxvYiBpbmZvICZvcHRpb25hbCBu KQogICJSZXR1cm4gcHJldmlvdXMgZWxlbWVudCBvciBvYmplY3QuCgpCTE9CIGlzIGFuIGVsZW1l bnQgb3Igb2JqZWN0LiAgSU5GTyBpcyBhIHBsaXN0IHVzZWQgYXMKYSBjb21tdW5pY2F0aW9uIGNo YW5uZWwuICBSZXR1cm4gcHJldmlvdXMgZXhwb3J0YWJsZSBlbGVtZW50IG9yCm9iamVjdCwgYSBz dHJpbmcsIG9yIG5pbC4KCldoZW4gb3B0aW9uYWwgYXJndW1lbnQgTiBpcyBhIHBvc2l0aXZlIGlu dGVnZXIsIHJldHVybiBhIGxpc3QKY29udGFpbmluZyB1cCB0byBOIHNpYmxpbmdzIGJlZm9yZSBC TE9CLCBmcm9tIGZhcnRoZXN0IHRvCmNsb3Nlc3QuICBXaXRoIGFueSBvdGhlciBub24tbmlsIHZh bHVlLCByZXR1cm4gYSBsaXN0IGNvbnRhaW5pbmcKYWxsIG9mIHRoZW0uIgogIChsZXQqICgoc2Vj b25kYXJ5IChvcmctZWxlbWVudC1zZWNvbmRhcnktcCBibG9iKSkKCSAocGFyZW50IChvcmctZXhw b3J0LWdldC1wYXJlbnQgYmxvYikpCgkgKHNpYmxpbmdzCgkgIChpZiBzZWNvbmRhcnkgKG9yZy1l bGVtZW50LXByb3BlcnR5IHNlY29uZGFyeSBwYXJlbnQpCgkgICAgKG9yZy1lbGVtZW50LWNvbnRl bnRzIHBhcmVudCkpKQoJIHByZXYpCiAgICAoY2F0Y2ggJ2V4aXQKICAgICAgKGRvbGlzdCAob2Jq IChjZHIgKG1lbXEgYmxvYiAocmV2ZXJzZSBzaWJsaW5ncykpKSBwcmV2KQoJKGNvbmQgKChtZW1x IG9iaiAocGxpc3QtZ2V0IGluZm8gOmlnbm9yZS1saXN0KSkpCgkgICAgICAoKG51bGwgbikgKHRo cm93ICdleGl0IG9iaikpCgkgICAgICAoKG5vdCAod2hvbGVudW1wIG4pKSAocHVzaCBvYmogcHJl dikpCgkgICAgICAoKHplcm9wIG4pICh0aHJvdyAnZXhpdCBwcmV2KSkKCSAgICAgICh0IChjbC1k ZWNmIG4pIChwdXNoIG9iaiBwcmV2KSkpKSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtZ2V0LW5leHQt ZWxlbWVudCAoYmxvYiBpbmZvICZvcHRpb25hbCBuKQogICJSZXR1cm4gbmV4dCBlbGVtZW50IG9y IG9iamVjdC4KCkJMT0IgaXMgYW4gZWxlbWVudCBvciBvYmplY3QuICBJTkZPIGlzIGEgcGxpc3Qg dXNlZCBhcwphIGNvbW11bmljYXRpb24gY2hhbm5lbC4gIFJldHVybiBuZXh0IGV4cG9ydGFibGUg ZWxlbWVudCBvcgpvYmplY3QsIGEgc3RyaW5nLCBvciBuaWwuCgpXaGVuIG9wdGlvbmFsIGFyZ3Vt ZW50IE4gaXMgYSBwb3NpdGl2ZSBpbnRlZ2VyLCByZXR1cm4gYSBsaXN0CmNvbnRhaW5pbmcgdXAg dG8gTiBzaWJsaW5ncyBhZnRlciBCTE9CLCBmcm9tIGNsb3Nlc3QgdG8gZmFydGhlc3QuCldpdGgg YW55IG90aGVyIG5vbi1uaWwgdmFsdWUsIHJldHVybiBhIGxpc3QgY29udGFpbmluZyBhbGwgb2YK dGhlbS4iCiAgKGxldCogKChzZWNvbmRhcnkgKG9yZy1lbGVtZW50LXNlY29uZGFyeS1wIGJsb2Ip KQoJIChwYXJlbnQgKG9yZy1leHBvcnQtZ2V0LXBhcmVudCBibG9iKSkKCSAoc2libGluZ3MKCSAg KGNkciAobWVtcSBibG9iCgkJICAgICAoaWYgc2Vjb25kYXJ5IChvcmctZWxlbWVudC1wcm9wZXJ0 eSBzZWNvbmRhcnkgcGFyZW50KQoJCSAgICAgICAob3JnLWVsZW1lbnQtY29udGVudHMgcGFyZW50 KSkpKSkKCSBuZXh0KQogICAgKGNhdGNoICdleGl0CiAgICAgIChkb2xpc3QgKG9iaiBzaWJsaW5n cyAobnJldmVyc2UgbmV4dCkpCgkoY29uZCAoKG1lbXEgb2JqIChwbGlzdC1nZXQgaW5mbyA6aWdu b3JlLWxpc3QpKSkKCSAgICAgICgobnVsbCBuKSAodGhyb3cgJ2V4aXQgb2JqKSkKCSAgICAgICgo bm90ICh3aG9sZW51bXAgbikpIChwdXNoIG9iaiBuZXh0KSkKCSAgICAgICgoemVyb3AgbikgKHRo cm93ICdleGl0IChucmV2ZXJzZSBuZXh0KSkpCgkgICAgICAodCAoY2wtZGVjZiBuKSAocHVzaCBv YmogbmV4dCkpKSkpKSkKCgo7Ozs7IFRyYW5zbGF0aW9uCjs7Cjs7IGBvcmctZXhwb3J0LXRyYW5z bGF0ZScgdHJhbnNsYXRlcyBhIHN0cmluZyBhY2NvcmRpbmcgdG8gdGhlIGxhbmd1YWdlCjs7IHNw ZWNpZmllZCBieSB0aGUgTEFOR1VBR0Uga2V5d29yZC4gIGBvcmctZXhwb3J0LWRpY3Rpb25hcnkn IGNvbnRhaW5zCjs7IHRoZSBkaWN0aW9uYXJ5IHVzZWQgZm9yIHRoZSB0cmFuc2xhdGlvbi4KCihk ZWZjb25zdCBvcmctZXhwb3J0LWRpY3Rpb25hcnkKICAnKCgiJWUgJW46ICVjIgogICAgICgiZnIi IDpkZWZhdWx0ICIlZSAlbiA6ICVjIiA6aHRtbCAiJWUmbmJzcDslbiZuYnNwOzogJWMiKSkKICAg ICgiQXV0aG9yIgogICAgICgiYXIiIDpkZWZhdWx0ICLYqtij2YTZitmBIikKICAgICAoImNhIiA6 ZGVmYXVsdCAiQXV0b3IiKQogICAgICgiY3MiIDpkZWZhdWx0ICJBdXRvciIpCiAgICAgKCJkYSIg OmRlZmF1bHQgIkZvcmZhdHRlciIpCiAgICAgKCJkZSIgOmRlZmF1bHQgIkF1dG9yIikKICAgICAo ImVvIiA6aHRtbCAiQSYjMzY1O3Rvcm8iKQogICAgICgiZXMiIDpkZWZhdWx0ICJBdXRvciIpCiAg ICAgKCJldCIgOmRlZmF1bHQgIkF1dG9yIikKICAgICAoImZhIiA6ZGVmYXVsdCAi2YbZiNuM2LPZ htiv2YciKQogICAgICgiZmkiIDpodG1sICJUZWtpaiZhdW1sOyIpCiAgICAgKCJmciIgOmRlZmF1 bHQgIkF1dGV1ciIpCiAgICAgKCJodSIgOmRlZmF1bHQgIlN6ZXJ6Jm90aWxkZTsiKQogICAgICgi aXMiIDpodG1sICJIJm91bWw7ZnVuZHVyIikKICAgICAoIml0IiA6ZGVmYXVsdCAiQXV0b3JlIikK ICAgICAoImphIiA6ZGVmYXVsdCAi6JGX6ICFIiA6aHRtbCAiJiMzMzg3OTsmIzMyNzczOyIpCiAg ICAgKCJubCIgOmRlZmF1bHQgIkF1dGV1ciIpCiAgICAgKCJubyIgOmRlZmF1bHQgIkZvcmZhdHRl ciIpCiAgICAgKCJuYiIgOmRlZmF1bHQgIkZvcmZhdHRlciIpCiAgICAgKCJubiIgOmRlZmF1bHQg IkZvcmZhdHRhciIpCiAgICAgKCJwbCIgOmRlZmF1bHQgIkF1dG9yIikKICAgICAoInB0X0JSIiA6 ZGVmYXVsdCAiQXV0b3IiKQogICAgICgicm8iIDpkZWZhdWx0ICJBdXRvciIpCiAgICAgKCJydSIg Omh0bWwgIiYjMTA0MDsmIzEwNzQ7JiMxMDkwOyYjMTA4NjsmIzEwODg7IiA6dXRmLTggItCQ0LLR gtC+0YAiKQogICAgICgic2wiIDpkZWZhdWx0ICJBdnRvciIpCiAgICAgKCJzdiIgOmh0bWwgIkYm b3VtbDtyZmF0dGFyZSIpCiAgICAgKCJ0ciIgOmRlZmF1bHQgIllhemFyIikKICAgICAoInVrIiA6 aHRtbCAiJiMxMDQwOyYjMTA3NDsmIzEwOTA7JiMxMDg2OyYjMTA4ODsiIDp1dGYtOCAi0JDQstGC 0L7RgCIpCiAgICAgKCJ6aC1DTiIgOmh0bWwgIiYjMjAzMTY7JiMzMjc3MzsiIDp1dGYtOCAi5L2c 6ICFIikKICAgICAoInpoLVRXIiA6aHRtbCAiJiMyMDMxNjsmIzMyNzczOyIgOnV0Zi04ICLkvZzo gIUiKSkKICAgICgiQ29udGludWVkIGZyb20gcHJldmlvdXMgcGFnZSIKICAgICAoImFyIiA6ZGVm YXVsdCAi2KrYqtmF2Kkg2KfZhNi12YHYrdipINin2YTYs9in2KjZgtipIikKICAgICAoImNzIiA6 ZGVmYXVsdCAiUG9rcmHEjW92w6Fuw60geiBwxZllZGNob3rDrSBzdHJhbnkiKQogICAgICgiZGUi IDpkZWZhdWx0ICJGb3J0c2V0enVuZyB2b24gdm9yaGVyaWdlciBTZWl0ZSIpCiAgICAgKCJlcyIg Omh0bWwgIkNvbnRpbiZ1YWN1dGU7YSBkZSBsYSBwJmFhY3V0ZTtnaW5hIGFudGVyaW9yIiA6YXNj aWkgIkNvbnRpbnVhIGRlIGxhIHBhZ2luYSBhbnRlcmlvciIgOmRlZmF1bHQgIkNvbnRpbsO6YSBk ZSBsYSBww6FnaW5hIGFudGVyaW9yIikKICAgICAoImZhIiA6ZGVmYXVsdCAi2KfYr9in2YXZhyDY p9iyINi12YHYrdmH2ZQg2YLYqNmEIikKICAgICAoImZyIiA6ZGVmYXVsdCAiU3VpdGUgZGUgbGEg cGFnZSBwcsOpY8OpZGVudGUiKQogICAgICgiaXQiIDpkZWZhdWx0ICJDb250aW51YSBkYSBwYWdp bmEgcHJlY2VkZW50ZSIpCiAgICAgKCJqYSIgOmRlZmF1bHQgIuWJjeODmuODvOOCuOOBi+OCieOB rue2muOBjSIpCiAgICAgKCJubCIgOmRlZmF1bHQgIlZlcnZvbGcgdmFuIHZvcmlnZSBwYWdpbmEi KQogICAgICgicGwiIDpkZWZhdWx0ICJDacSFZyBkYWxzenkgcG9wcnplZG5pZWogc3Ryb255IikK ICAgICAoInB0IiA6ZGVmYXVsdCAiQ29udGludWHDp8OjbyBkYSBww6FnaW5hIGFudGVyaW9yIikK ICAgICAoInB0X0JSIiA6aHRtbCAiQ29udGludWEmY2NlZGlsOyZhdGlsZGU7byBkYSBwJmFhY3V0 ZTtnaW5hIGFudGVyaW9yIiA6YXNjaWkgIkNvbnRpbnVhY2FvIGRhIHBhZ2luYSBhbnRlcmlvciIg OmRlZmF1bHQgIkNvbnRpbnVhw6fDo28gZGEgcMOhZ2luYSBhbnRlcmlvciIpCiAgICAgKCJybyIg OmRlZmF1bHQgIkNvbnRpbnVhcmUgZGUgcGUgcGFnaW5hIHByZWNlZGVudMSDIikKICAgICAoInJ1 IiA6aHRtbCAiKCYjMTA1NTsmIzEwODg7JiMxMDg2OyYjMTA3NjsmIzEwODY7JiMxMDgzOyYjMTA3 ODsmIzEwNzc7JiMxMDg1OyYjMTA4MDsmIzEwNzc7KSIKICAgICAgOnV0Zi04ICIo0J/RgNC+0LTQ vtC70LbQtdC90LjQtSkiKQogICAgICgic2wiIDpkZWZhdWx0ICJOYWRhbGpldmFuamUgcyBwcmVq xaFuamUgc3RyYW5pIikKICAgICAoInRyIiA6ZGVmYXVsdCAiw5ZuY2VraSBzYXlmYWRhbiBkZXZh bSBlZGl5b3IiKSkKICAgICgiQ29udGludWVkIG9uIG5leHQgcGFnZSIKICAgICAoImFyIiA6ZGVm YXVsdCAi2KfZhNiq2KrZhdipINmB2Yog2KfZhNi12YHYrdipINin2YTYqtin2YTZitipIikKICAg ICAoImNzIiA6ZGVmYXVsdCAiUG9rcmHEjXVqZSBuYSBkYWzFocOtIHN0csOhbmNlIikKICAgICAo ImRlIiA6ZGVmYXVsdCAiRm9ydHNldHp1bmcgbsOkY2hzdGUgU2VpdGUiKQogICAgICgiZXMiIDpo dG1sICJDb250aW4mdWFjdXRlO2EgZW4gbGEgc2lndWllbnRlIHAmYWFjdXRlO2dpbmEiIDphc2Np aSAiQ29udGludWEgZW4gbGEgc2lndWllbnRlIHBhZ2luYSIgOmRlZmF1bHQgIkNvbnRpbsO6YSBl biBsYSBzaWd1aWVudGUgcMOhZ2luYSIpCiAgICAgKCJmYSIgOmRlZmF1bHQgItin2K/Yp9mF2Ycg 2K/YsSDYtdmB2K3Zh9mUINio2LnYryIpCiAgICAgKCJmciIgOmRlZmF1bHQgIlN1aXRlIHBhZ2Ug c3VpdmFudGUiKQogICAgICgiaXQiIDpkZWZhdWx0ICJDb250aW51YSBhbGxhIHBhZ2luYSBzdWNj ZXNzaXZhIikKICAgICAoImphIiA6ZGVmYXVsdCAi5qyh44Oa44O844K444Gr57aa44GPIikKICAg ICAoIm5sIiA6ZGVmYXVsdCAiVmVydm9sZyBvcCB2b2xnZW5kZSBwYWdpbmEiKQogICAgICgicGwi IDpkZWZhdWx0ICJLb250eW51YWNqYSBuYSBuYXN0xJlwbmVqIHN0cm9uaWUiKQogICAgICgicHQi IDpkZWZhdWx0ICJDb250aW51YSBuYSBww6FnaW5hIHNlZ3VpbnRlIikKICAgICAoInB0X0JSIiA6 aHRtbCAiQ29udGludWEgbmEgcHImb2FjdXRlO3hpbWEgcCZhYWN1dGU7Z2luYSIgOmFzY2lpICJD b250aW51YSBuYSBwcm94aW1hIHBhZ2luYSIgOmRlZmF1bHQgIkNvbnRpbnVhIG5hIHByw7N4aW1h IHDDoWdpbmEiKQogICAgICgicm8iIDpkZWZhdWx0ICJDb250aW51YXJlIHBlIHBhZ2luYSB1cm3E g3RvYXJlIikKICAgICAoInJ1IiA6aHRtbCAiKCYjMTA1NTsmIzEwODg7JiMxMDg2OyYjMTA3Njsm IzEwODY7JiMxMDgzOyYjMTA3ODsmIzEwNzc7JiMxMDg1OyYjMTA4MDsmIzEwNzc7ICYjMTA4OTsm IzEwODM7JiMxMDc3OyYjMTA3NjsmIzEwOTE7JiMxMDc3OyYjMTA5MDspIgogICAgICA6dXRmLTgg IijQn9GA0L7QtNC+0LvQttC10L3QuNC1INGB0LvQtdC00YPQtdGCKSIpCiAgICAgKCJzbCIgOmRl ZmF1bHQgIk5hZGFsamV2YW5qZSBuYSBuYXNsZWRuamkgc3RyYW5pIikKICAgICAoInRyIiA6ZGVm YXVsdCAiRGV2YW3EsSBzb25yYWtpIHNheWZhZGEiKSkKICAgICgiQ3JlYXRlZCIKICAgICAoImNz IiA6ZGVmYXVsdCAiVnl0dm/FmWVubyIpCiAgICAgKCJmYSIgOmRlZmF1bHQgItiz2KfYrtiq2Ycg 2LTYr9mHIikKICAgICAoIm5sIiA6ZGVmYXVsdCAiR2VtYWFrdCBvcCIpICA7OyBtdXN0IGJlIGZv bGxvd2VkIGJ5IGEgZGF0ZSBvciBkYXRlK3RpbWUKICAgICAoInB0X0JSIiA6ZGVmYXVsdCAiQ3Jp YWRvIGVtIikKICAgICAoInJvIiA6ZGVmYXVsdCAiQ3JlYXQiKQogICAgICgic2wiIDpkZWZhdWx0 ICJVc3R2YXJqZW5vIikKICAgICAoInRyIiA6ZGVmYXVsdCAiT2x1xZ90dXJ1bGR1IikpCiAgICAo IkRhdGUiCiAgICAgKCJhciIgOmRlZmF1bHQgItio2KrYp9ix2YrYriIpCiAgICAgKCJjYSIgOmRl ZmF1bHQgIkRhdGEiKQogICAgICgiY3MiIDpkZWZhdWx0ICJEYXR1bSIpCiAgICAgKCJkYSIgOmRl ZmF1bHQgIkRhdG8iKQogICAgICgiZGUiIDpkZWZhdWx0ICJEYXR1bSIpCiAgICAgKCJlbyIgOmRl ZmF1bHQgIkRhdG8iKQogICAgICgiZXMiIDpkZWZhdWx0ICJGZWNoYSIpCiAgICAgKCJldCIgOmh0 bWwgIkt1dXAmIzIyODtldiIgOnV0Zi04ICJLdXVww6RldiIpCiAgICAgKCJmYSIgOmRlZmF1bHQg Itiq2KfYsduM2K4iKQogICAgICgiZmkiIDpodG1sICJQJmF1bWw7aXYmYXVtbDttJmF1bWw7JmF1 bWw7ciZhdW1sOyIpCiAgICAgKCJodSIgOmh0bWwgIkQmYWFjdXRlO3R1bSIpCiAgICAgKCJpcyIg OmRlZmF1bHQgIkRhZ3NldG5pbmciKQogICAgICgiaXQiIDpkZWZhdWx0ICJEYXRhIikKICAgICAo ImphIiA6ZGVmYXVsdCAi5pel5LuYIiA6aHRtbCAiJiMyNjA4NTsmIzIwMTg0OyIpCiAgICAgKCJu bCIgOmRlZmF1bHQgIkRhdHVtIikKICAgICAoIm5vIiA6ZGVmYXVsdCAiRGF0byIpCiAgICAgKCJu YiIgOmRlZmF1bHQgIkRhdG8iKQogICAgICgibm4iIDpkZWZhdWx0ICJEYXRvIikKICAgICAoInBs IiA6ZGVmYXVsdCAiRGF0YSIpCiAgICAgKCJybyIgOmRlZmF1bHQgIkRhdGEiKQogICAgICgicHRf QlIiIDpkZWZhdWx0ICJEYXRhIikKICAgICAoInJ1IiA6aHRtbCAiJiMxMDQ0OyYjMTA3MjsmIzEw OTA7JiMxMDcyOyIgOnV0Zi04ICLQlNCw0YLQsCIpCiAgICAgKCJzbCIgOmRlZmF1bHQgIkRhdHVt IikKICAgICAoInN2IiA6ZGVmYXVsdCAiRGF0dW0iKQogICAgICgidHIiIDpkZWZhdWx0ICJUYXJp aCIpCiAgICAgKCJ1ayIgOmh0bWwgIiYjMTA0NDsmIzEwNzI7JiMxMDkwOyYjMTA3MjsiIDp1dGYt OCAi0JTQsNGC0LAiKQogICAgICgiemgtQ04iIDpodG1sICImIzI2MDg1OyYjMjYzOTk7IiA6dXRm LTggIuaXpeacnyIpCiAgICAgKCJ6aC1UVyIgOmh0bWwgIiYjMjYwODU7JiMyNjM5OTsiIDp1dGYt OCAi5pel5pyfIikpCiAgICAoIkVxdWF0aW9uIgogICAgICgiYXIiIDpkZWZhdWx0ICLZhdi52KfY r9mE2KkiKQogICAgICgiY3MiIDpkZWZhdWx0ICJSb3ZuaWNlIikKICAgICAoImRhIiA6ZGVmYXVs dCAiTGlnbmluZyIpCiAgICAgKCJkZSIgOmRlZmF1bHQgIkdsZWljaHVuZyIpCiAgICAgKCJlcyIg OmFzY2lpICJFY3VhY2lvbiIgOmh0bWwgIkVjdWFjaSZvYWN1dGU7biIgOmRlZmF1bHQgIkVjdWFj acOzbiIpCiAgICAgKCJldCIgOmh0bWwgIlYmIzI0NTtycmFuZCIgOnV0Zi04ICJWw7VycmFuZCIp CiAgICAgKCJmYSIgOmRlZmF1bHQgItmF2LnYp9iv2YTZhyIpCiAgICAgKCJmciIgOmFzY2lpICJF cXVhdGlvbiIgOmRlZmF1bHQgIsOJcXVhdGlvbiIpCiAgICAgKCJpcyIgOmRlZmF1bHQgIkphZm5h IikKICAgICAoImphIiA6ZGVmYXVsdCAi5pa556iL5byPIikKICAgICAoIm5sIiA6ZGVmYXVsdCAi VmVyZ2VsaWpraW5nIikKICAgICAoIm5vIiA6ZGVmYXVsdCAiTGlnbmluZyIpCiAgICAgKCJuYiIg OmRlZmF1bHQgIkxpZ25pbmciKQogICAgICgibm4iIDpkZWZhdWx0ICJMaWtuaW5nIikKICAgICAo InB0X0JSIiA6aHRtbCAiRXF1YSZjY2VkaWw7JmF0aWxkZTtvIiA6ZGVmYXVsdCAiRXF1YcOnw6Nv IiA6YXNjaWkgIkVxdWFjYW8iKQogICAgICgicm8iIDpkZWZhdWx0ICJFY3VhyJtpYSIpCiAgICAg KCJydSIgOmh0bWwgIiYjMTA1OTsmIzEwODg7JiMxMDcyOyYjMTA3NDsmIzEwODU7JiMxMDc3OyYj MTA4NTsmIzEwODA7JiMxMDc3OyIKICAgICAgOnV0Zi04ICLQo9GA0LDQstC90LXQvdC40LUiKQog ICAgICgic2wiIDpkZWZhdWx0ICJFbmHEjWJhIikKICAgICAoInN2IiA6ZGVmYXVsdCAiRWt2YXRp b24iKQogICAgICgidHIiIDpkZWZhdWx0ICJFxZ9pdGxpayIpCiAgICAgKCJ6aC1DTiIgOmh0bWwg IiYjMjYwNDE7JiMzMTI0MzsiIDp1dGYtOCAi5pa556iLIikpCiAgICAoIkZpZ3VyZSIKICAgICAo ImFyIiA6ZGVmYXVsdCAi2LTZg9mEIikKICAgICAoImNzIiA6ZGVmYXVsdCAiT2Jyw6F6ZWsiKQog ICAgICgiZGEiIDpkZWZhdWx0ICJGaWd1ciIpCiAgICAgKCJkZSIgOmRlZmF1bHQgIkFiYmlsZHVu ZyIpCiAgICAgKCJlcyIgOmRlZmF1bHQgIkZpZ3VyYSIpCiAgICAgKCJldCIgOmRlZmF1bHQgIkpv b25pcyIpCiAgICAgKCJmYSIgOmRlZmF1bHQgIti02qnZhCIpCiAgICAgKCJpcyIgOmRlZmF1bHQg Ik15bmQiKQogICAgICgiaXQiIDpkZWZhdWx0ICJGaWd1cmEiKQogICAgICgiamEiIDpkZWZhdWx0 ICLlm7MiIDpodG1sICImIzIyMjU5OyIpCiAgICAgKCJubCIgOmRlZmF1bHQgIkZpZ3V1ciIpCiAg ICAgKCJubyIgOmRlZmF1bHQgIklsbHVzdHJhc2pvbiIpCiAgICAgKCJuYiIgOmRlZmF1bHQgIkls bHVzdHJhc2pvbiIpCiAgICAgKCJubiIgOmRlZmF1bHQgIklsbHVzdHJhc2pvbiIpCiAgICAgKCJw dF9CUiIgOmRlZmF1bHQgIkZpZ3VyYSIpCiAgICAgKCJybyIgOmRlZmF1bHQgIkltYWdpbmVhIikK ICAgICAoInJ1IiA6aHRtbCAiJiMxMDU2OyYjMTA4MDsmIzEwODk7JiMxMDkxOyYjMTA4NTsmIzEw ODY7JiMxMDgyOyIgOnV0Zi04ICLQoNC40YHRg9C90L7QuiIpCiAgICAgKCJzdiIgOmRlZmF1bHQg IklsbHVzdHJhdGlvbiIpCiAgICAgKCJ0ciIgOmRlZmF1bHQgIsWeZWtpbCIpCiAgICAgKCJ6aC1D TiIgOmh0bWwgIiYjMjIyNzA7IiA6dXRmLTggIuWbviIpKQogICAgKCJGaWd1cmUgJWQ6IgogICAg ICgiYXIiIDpkZWZhdWx0ICLYtNmD2YQgJWQ6IikKICAgICAoImNzIiA6ZGVmYXVsdCAiT2Jyw6F6 ZWsgJWQ6IikKICAgICAoImRhIiA6ZGVmYXVsdCAiRmlndXIgJWQiKQogICAgICgiZGUiIDpkZWZh dWx0ICJBYmJpbGR1bmcgJWQ6IikKICAgICAoImVzIiA6ZGVmYXVsdCAiRmlndXJhICVkOiIpCiAg ICAgKCJldCIgOmRlZmF1bHQgIkpvb25pcyAlZDoiKQogICAgICgiZmEiIDpkZWZhdWx0ICLYtNqp 2YQgJWQ6IikKICAgICAoImZyIiA6ZGVmYXVsdCAiRmlndXJlICVkIDoiIDpodG1sICJGaWd1cmUm bmJzcDslZCZuYnNwOzoiKQogICAgICgiaXMiIDpkZWZhdWx0ICJNeW5kICVkIikKICAgICAoIml0 IiA6ZGVmYXVsdCAiRmlndXJhICVkOiIpCiAgICAgKCJqYSIgOmRlZmF1bHQgIuWbsyVkOiAiIDpo dG1sICImIzIyMjU5OyVkOiAiKQogICAgICgibmwiIDpkZWZhdWx0ICJGaWd1dXIgJWQ6IiA6aHRt bCAiRmlndXVyJm5ic3A7JWQ6IikKICAgICAoIm5vIiA6ZGVmYXVsdCAiSWxsdXN0cmFzam9uICVk IikKICAgICAoIm5iIiA6ZGVmYXVsdCAiSWxsdXN0cmFzam9uICVkIikKICAgICAoIm5uIiA6ZGVm YXVsdCAiSWxsdXN0cmFzam9uICVkIikKICAgICAoInB0X0JSIiA6ZGVmYXVsdCAiRmlndXJhICVk OiIpCiAgICAgKCJybyIgOmRlZmF1bHQgIkltYWdpbmVhICVkOiIpCiAgICAgKCJydSIgOmh0bWwg IiYjMTA1NjsmIzEwODA7JiMxMDg5Oy4gJWQuOiIgOnV0Zi04ICLQoNC40YEuICVkLjoiKQogICAg ICgic2wiIDpkZWZhdWx0ICJTbGlrYSAlZCIpCiAgICAgKCJzdiIgOmRlZmF1bHQgIklsbHVzdHJh dGlvbiAlZCIpCiAgICAgKCJ0ciIgOmRlZmF1bHQgIsWeZWtpbCAlZDoiKQogICAgICgiemgtQ04i IDpodG1sICImIzIyMjcwOyVkJm5ic3A7IiA6dXRmLTggIuWbviVkICIpKQogICAgKCJGb290bm90 ZXMiCiAgICAgKCJhciIgOmRlZmF1bHQgItin2YTZh9mI2KfZhdi0IikKICAgICAoImNhIiA6aHRt bCAiUGV1cyBkZSBwJmFncmF2ZTtnaW5hIikKICAgICAoImNzIiA6ZGVmYXVsdCAiUG96bsOhbWt5 IHBvZCDEjWFyb3UiKQogICAgICgiZGEiIDpkZWZhdWx0ICJGb2Rub3RlciIpCiAgICAgKCJkZSIg Omh0bWwgIkZ1JnN6bGlnO25vdGVuIiA6ZGVmYXVsdCAiRnXDn25vdGVuIikKICAgICAoImVvIiA6 ZGVmYXVsdCAiUGllZG5vdG9qIikKICAgICAoImVzIiA6YXNjaWkgIk5vdGFzIGFsIHBpZSBkZSBw YWdpbmEiIDpodG1sICJOb3RhcyBhbCBwaWUgZGUgcCZhYWN1dGU7Z2luYSIgOmRlZmF1bHQgIk5v dGFzIGFsIHBpZSBkZSBww6FnaW5hIikKICAgICAoImV0IiA6aHRtbCAiQWxsbSYjMjI4O3JrdXNl ZCIgOnV0Zi04ICJBbGxtw6Rya3VzZWQiKQogICAgICgiZmEiIDpkZWZhdWx0ICLZvtin2YbZiNi0 2KrigIzZh9inIikKICAgICAoImZpIiA6ZGVmYXVsdCAiQWxhdmlpdHRlZXQiKQogICAgICgiZnIi IDpkZWZhdWx0ICJOb3RlcyBkZSBiYXMgZGUgcGFnZSIpCiAgICAgKCJodSIgOmh0bWwgIkwmYWFj dXRlO2JqZWd5emV0IikKICAgICAoImlzIiA6aHRtbCAiQWZ0YW5tJmFhY3V0ZTtsc2dyZWluYXIi KQogICAgICgiaXQiIDpodG1sICJOb3RlIGEgcGkmZWdyYXZlOyBkaSBwYWdpbmEiKQogICAgICgi amEiIDpkZWZhdWx0ICLohJrms6giIDpodG1sICImIzMzMDUwOyYjMjc4ODA7IikKICAgICAoIm5s IiA6ZGVmYXVsdCAiVm9ldG5vdGVuIikKICAgICAoIm5vIiA6ZGVmYXVsdCAiRm90bm90ZXIiKQog ICAgICgibmIiIDpkZWZhdWx0ICJGb3Rub3RlciIpCiAgICAgKCJubiIgOmRlZmF1bHQgIkZvdG5v dGFyIikKICAgICAoInBsIiA6ZGVmYXVsdCAiUHJ6eXBpcyIpCiAgICAgKCJwdF9CUiIgOmh0bWwg Ik5vdGFzIGRlIFJvZGFwJmVhY3V0ZTsiIDpkZWZhdWx0ICJOb3RhcyBkZSBSb2RhcMOpIiA6YXNj aWkgIk5vdGFzIGRlIFJvZGFwZSIpCiAgICAgKCJybyIgOmRlZmF1bHQgIk5vdGUgZGUgc3Vic29s IikKICAgICAoInJ1IiA6aHRtbCAiJiMxMDU3OyYjMTA4NTsmIzEwODY7JiMxMDg5OyYjMTA4Mjsm IzEwODA7IiA6dXRmLTggItCh0L3QvtGB0LrQuCIpCiAgICAgKCJzbCIgOmRlZmF1bHQgIk9wb21i ZSIpCiAgICAgKCJzdiIgOmRlZmF1bHQgIkZvdG5vdGVyIikKICAgICAoInRyIiA6ZGVmYXVsdCAi RGlwbm90bGFyIikKICAgICAoInVrIiA6aHRtbCAiJiMxMDU1OyYjMTA4ODsmIzEwODA7JiMxMDg0 OyYjMTExMDsmIzEwOTA7JiMxMDgyOyYjMTA4MDsiCiAgICAgIDp1dGYtOCAi0J/RgNC40LzRltGC 0LrQuCIpCiAgICAgKCJ6aC1DTiIgOmh0bWwgIiYjMzMwNTA7JiMyNzg4MDsiIDp1dGYtOCAi6ISa 5rOoIikKICAgICAoInpoLVRXIiA6aHRtbCAiJiMzMzEzOTsmIzM1Mzg3OyIgOnV0Zi04ICLohbPo qLsiKSkKICAgICgiTGlzdCBvZiBMaXN0aW5ncyIKICAgICAoImFyIiA6ZGVmYXVsdCAi2YLYp9im 2YXYqSDYqNin2YTYqNix2KfZhdisIikKICAgICAoImNzIiA6ZGVmYXVsdCAiU2V6bmFtIHByb2dy YW3FryIpCiAgICAgKCJkYSIgOmRlZmF1bHQgIlByb2dyYW1tZXIiKQogICAgICgiZGUiIDpkZWZh dWx0ICJQcm9ncmFtbWF1Zmxpc3R1bmdzdmVyemVpY2huaXMiKQogICAgICgiZXMiIDphc2NpaSAi SW5kaWNlIGRlIExpc3RhZG9zIGRlIHByb2dyYW1hcyIgOmh0bWwgIiZJYWN1dGU7bmRpY2UgZGUg TGlzdGFkb3MgZGUgcHJvZ3JhbWFzIiA6ZGVmYXVsdCAiw41uZGljZSBkZSBMaXN0YWRvcyBkZSBw cm9ncmFtYXMiKQogICAgICgiZXQiIDpkZWZhdWx0ICJMb2VuZGl0ZSBuaW1la2lyaSIpCiAgICAg KCJmYSIgOmRlZmF1bHQgItmB2YfYsdiz2Kog2KjYsdmG2KfZhdmH4oCM2LHbjNiy24zigIzZh9in IikKICAgICAoImZyIiA6ZGVmYXVsdCAiTGlzdGUgZGVzIHByb2dyYW1tZXMiKQogICAgICgiamEi IDpkZWZhdWx0ICLjgr3jg7zjgrnjgrPjg7zjg4nnm67mrKEiKQogICAgICgibmwiIDpkZWZhdWx0 ICJMaWpzdCB2YW4gcHJvZ3JhbW1hJ3MiKQogICAgICgibm8iIDpkZWZhdWx0ICJEYXRhcHJvZ3Jh bW1lciIpCiAgICAgKCJuYiIgOmRlZmF1bHQgIkRhdGFwcm9ncmFtbWVyIikKICAgICAoInB0X0JS IiA6aHRtbCAiJklhY3V0ZTtuZGljZSBkZSBMaXN0YWdlbnMiIDpkZWZhdWx0ICLDjW5kaWNlIGRl IExpc3RhZ2VucyIgOmFzY2lpICJJbmRpY2UgZGUgTGlzdGFnZW5zIikKICAgICAoInJ1IiA6aHRt bCAiJiMxMDU3OyYjMTA4NzsmIzEwODA7JiMxMDg5OyYjMTA4NjsmIzEwODI7ICYjMTA4ODsmIzEw NzI7JiMxMDg5OyYjMTA4NzsmIzEwNzc7JiMxMDk1OyYjMTA3MjsmIzEwOTA7JiMxMDg2OyYjMTA4 MjsiCiAgICAgIDp1dGYtOCAi0KHQv9C40YHQvtC6INGA0LDRgdC/0LXRh9Cw0YLQvtC6IikKICAg ICAoInNsIiA6ZGVmYXVsdCAiU2V6bmFtIHByb2dyYW1za2loIGl6cGlzb3YiKQogICAgICgidHIi IDpkZWZhdWx0ICJQcm9ncmFtIExpc3Rlc2kiKQogICAgICgiemgtQ04iIDpodG1sICImIzIwMTk1 OyYjMzA3MjE7JiMzMDQ0NjsmIzI0NDA1OyIgOnV0Zi04ICLku6PnoIHnm67lvZUiKSkKICAgICgi TGlzdCBvZiBUYWJsZXMiCiAgICAgKCJhciIgOmRlZmF1bHQgItmC2KfYptmF2Kkg2KjYp9mE2KzY r9in2YjZhCIpCiAgICAgKCJjcyIgOmRlZmF1bHQgIlNlem5hbSB0YWJ1bGVrIikKICAgICAoImRh IiA6ZGVmYXVsdCAiVGFiZWxsZXIiKQogICAgICgiZGUiIDpkZWZhdWx0ICJUYWJlbGxlbnZlcnpl aWNobmlzIikKICAgICAoImVzIiA6YXNjaWkgIkluZGljZSBkZSB0YWJsYXMiIDpodG1sICImSWFj dXRlO25kaWNlIGRlIHRhYmxhcyIgOmRlZmF1bHQgIsONbmRpY2UgZGUgdGFibGFzIikKICAgICAo ImV0IiA6ZGVmYXVsdCAiVGFiZWxpdGUgbmltZWtpcmkiKQogICAgICgiZmEiIDpkZWZhdWx0ICLZ gdmH2LHYs9iqINis2K/ZiNmE4oCM2YfYpyIpCiAgICAgKCJmciIgOmRlZmF1bHQgIkxpc3RlIGRl cyB0YWJsZWF1eCIpCiAgICAgKCJpcyIgOmRlZmF1bHQgIlTDtmZsdXNrcsOhIiA6aHRtbCAiVCZv dW1sO2ZsdXNrciZhYWN1dGU7IikKICAgICAoIml0IiA6ZGVmYXVsdCAiSW5kaWNlIGRlbGxlIHRh YmVsbGUiKQogICAgICgiamEiIDpkZWZhdWx0ICLooajnm67mrKEiKQogICAgICgibmwiIDpkZWZh dWx0ICJMaWpzdCB2YW4gdGFiZWxsZW4iKQogICAgICgibm8iIDpkZWZhdWx0ICJUYWJlbGxlciIp CiAgICAgKCJuYiIgOmRlZmF1bHQgIlRhYmVsbGVyIikKICAgICAoIm5uIiA6ZGVmYXVsdCAiVGFi ZWxsZXIiKQogICAgICgicHRfQlIiIDpodG1sICImSWFjdXRlO25kaWNlIGRlIFRhYmVsYXMiIDpk ZWZhdWx0ICLDjW5kaWNlIGRlIFRhYmVsYXMiIDphc2NpaSAiSW5kaWNlIGRlIFRhYmVsYXMiKQog ICAgICgicm8iIDpkZWZhdWx0ICJUYWJlbGUiKQogICAgICgicnUiIDpodG1sICImIzEwNTc7JiMx MDg3OyYjMTA4MDsmIzEwODk7JiMxMDg2OyYjMTA4MjsgJiMxMDkwOyYjMTA3MjsmIzEwNzM7JiMx MDgzOyYjMTA4MDsmIzEwOTQ7IgogICAgICA6dXRmLTggItCh0L/QuNGB0L7QuiDRgtCw0LHQu9C4 0YYiKQogICAgICgic2wiIDpkZWZhdWx0ICJTZXpuYW0gdGFiZWwiKQogICAgICgic3YiIDpkZWZh dWx0ICJUYWJlbGxlciIpCiAgICAgKCJ0ciIgOmRlZmF1bHQgIlRhYmxvIExpc3Rlc2kiKQogICAg ICgiemgtQ04iIDpodG1sICImIzM0OTIwOyYjMjY2ODQ7JiMzMDQ0NjsmIzI0NDA1OyIgOnV0Zi04 ICLooajmoLznm67lvZUiKSkKICAgICgiTGlzdGluZyIKICAgICAoImFyIiA6ZGVmYXVsdCAi2KjY sdmG2KfZhdisIikKICAgICAoImNzIiA6ZGVmYXVsdCAiUHJvZ3JhbSIpCiAgICAgKCJkYSIgOmRl ZmF1bHQgIlByb2dyYW0iKQogICAgICgiZGUiIDpkZWZhdWx0ICJQcm9ncmFtbWxpc3RpbmciKQog ICAgICgiZXMiIDpkZWZhdWx0ICJMaXN0YWRvIGRlIHByb2dyYW1hIikKICAgICAoImV0IiA6ZGVm YXVsdCAiTG9lbmQiKQogICAgICgiZmEiIDpkZWZhdWx0ICLYqNix2YbYp9mF2YfigIzYsduM2LLb jCIpCiAgICAgKCJmciIgOmRlZmF1bHQgIlByb2dyYW1tZSIgOmh0bWwgIlByb2dyYW1tZSIpCiAg ICAgKCJpdCIgOmRlZmF1bHQgIkxpc3RhdG8iKQogICAgICgiamEiIDpkZWZhdWx0ICLjgr3jg7zj grnjgrPjg7zjg4kiKQogICAgICgibmwiIDpkZWZhdWx0ICJQcm9ncmFtbWEiKQogICAgICgibm8i IDpkZWZhdWx0ICJEYXRhcHJvZ3JhbSIpCiAgICAgKCJuYiIgOmRlZmF1bHQgIkRhdGFwcm9ncmFt IikKICAgICAoInB0X0JSIiA6ZGVmYXVsdCAiTGlzdGFnZW0iKQogICAgICgicm8iIDpkZWZhdWx0 ICJMaXN0YSIpCiAgICAgKCJydSIgOmh0bWwgIiYjMTA1NjsmIzEwNzI7JiMxMDg5OyYjMTA4Nzsm IzEwNzc7JiMxMDk1OyYjMTA3MjsmIzEwOTA7JiMxMDgyOyYjMTA3MjsiCiAgICAgIDp1dGYtOCAi 0KDQsNGB0L/QtdGH0LDRgtC60LAiKQogICAgICgic2wiIDpkZWZhdWx0ICJJenBpcyBwcm9ncmFt YSIpCiAgICAgKCJ0ciIgOmRlZmF1bHQgIlByb2dyYW0iKQogICAgICgiemgtQ04iIDpodG1sICIm IzIwMTk1OyYjMzA3MjE7IiA6dXRmLTggIuS7o+eggSIpKQogICAgKCJMaXN0aW5nICVkOiIKICAg ICAoImFyIiA6ZGVmYXVsdCAi2KjYsdmG2KfZhdisICVkOiIpCiAgICAgKCJjcyIgOmRlZmF1bHQg IlByb2dyYW0gJWQ6IikKICAgICAoImRhIiA6ZGVmYXVsdCAiUHJvZ3JhbSAlZCIpCiAgICAgKCJk ZSIgOmRlZmF1bHQgIlByb2dyYW1tbGlzdGluZyAlZCIpCiAgICAgKCJlcyIgOmRlZmF1bHQgIkxp c3RhZG8gZGUgcHJvZ3JhbWEgJWQiKQogICAgICgiZXQiIDpkZWZhdWx0ICJMb2VuZCAlZCIpCiAg ICAgKCJmYSIgOmRlZmF1bHQgItio2LHZhtin2YXZh+KAjNix24zYstuMICVkOiIpCiAgICAgKCJm ciIgOmRlZmF1bHQgIlByb2dyYW1tZSAlZCA6IiA6aHRtbCAiUHJvZ3JhbW1lJm5ic3A7JWQmbmJz cDs6IikKICAgICAoIml0IiA6ZGVmYXVsdCAiTGlzdGF0byAlZCA6IikKICAgICAoImphIiA6ZGVm YXVsdCAi44K944O844K544Kz44O844OJJWQ6IikKICAgICAoIm5sIiA6ZGVmYXVsdCAiUHJvZ3Jh bW1hICVkOiIgOmh0bWwgIlByb2dyYW1tYSZuYnNwOyVkOiIpCiAgICAgKCJubyIgOmRlZmF1bHQg IkRhdGFwcm9ncmFtICVkIikKICAgICAoIm5iIiA6ZGVmYXVsdCAiRGF0YXByb2dyYW0gJWQiKQog ICAgICgicm8iIDpkZWZhdWx0ICJMaXN0YSAlZCIpCiAgICAgKCJwdF9CUiIgOmRlZmF1bHQgIkxp c3RhZ2VtICVkOiIpCiAgICAgKCJydSIgOmh0bWwgIiYjMTA1NjsmIzEwNzI7JiMxMDg5OyYjMTA4 NzsmIzEwNzc7JiMxMDk1OyYjMTA3MjsmIzEwOTA7JiMxMDgyOyYjMTA3MjsgJWQuOiIKICAgICAg OnV0Zi04ICLQoNCw0YHQv9C10YfQsNGC0LrQsCAlZC46IikKICAgICAoInNsIiA6ZGVmYXVsdCAi SXpwaXMgcHJvZ3JhbWEgJWQiKQogICAgICgidHIiIDpkZWZhdWx0ICJQcm9ncmFtICVkOiIpCiAg ICAgKCJ6aC1DTiIgOmh0bWwgIiYjMjAxOTU7JiMzMDcyMTslZCZuYnNwOyIgOnV0Zi04ICLku6Pn oIElZCAiKSkKICAgICgiUmVmZXJlbmNlcyIKICAgICAoImFyIiA6ZGVmYXVsdCAi2KfZhNmF2LHY p9is2LkiKQogICAgICgiY3MiIDpkZWZhdWx0ICJSZWZlcmVuY2UiKQogICAgICgiZGUiIDpkZWZh dWx0ICJRdWVsbGVuIikKICAgICAoImVzIiA6ZGVmYXVsdCAiUmVmZXJlbmNpYXMiKQogICAgICgi ZmEiIDpkZWZhdWx0ICLZhdmG2KfYqNi5IikKICAgICAoImZyIiA6YXNjaWkgIlJlZmVyZW5jZXMi IDpkZWZhdWx0ICJSw6lmw6lyZW5jZXMiKQogICAgICgiaXQiIDpkZWZhdWx0ICJSaWZlcmltZW50 aSIpCiAgICAgKCJubCIgOmRlZmF1bHQgIkJyb252ZXJ3aWp6aW5nZW4iKQogICAgICgicHRfQlIi IDpodG1sICJSZWZlciZlY2lyYztuY2lhcyIgOmRlZmF1bHQgIlJlZmVyw6puY2lhcyIgOmFzY2lp ICJSZWZlcmVuY2lhcyIpCiAgICAgKCJybyIgOmRlZmF1bHQgIkJpYmxpb2dyYWZpZSIpCiAgICAg KCJzbCIgOmRlZmF1bHQgIlJlZmVyZW5jZSIpCiAgICAgKCJ0ciIgOmRlZmF1bHQgIlJlZmVyYW5z bGFyIikpCiAgICAoIlNlZSBmaWd1cmUgJXMiCiAgICAgKCJjcyIgOmRlZmF1bHQgIlZpeiBvYnLD oXplayAlcyIpCiAgICAgKCJmYSIgOmRlZmF1bHQgItmG2YXYp9uM2LQg2LTaqdmEICVzIikKICAg ICAoImZyIiA6ZGVmYXVsdCAiY2YuIGZpZ3VyZSAlcyIKICAgICAgOmh0bWwgImNmLiZuYnNwO2Zp Z3VyZSZuYnNwOyVzIiA6bGF0ZXggImNmLn5maWd1cmV+JXMiKQogICAgICgiaXQiIDpkZWZhdWx0 ICJWZWRpIGZpZ3VyYSAlcyIpCiAgICAgKCJubCIgOmRlZmF1bHQgIlppZSBmaWd1dXIgJXMiCiAg ICAgIDpodG1sICJaaWUgZmlndXVyJm5ic3A7JXMiIDpsYXRleCAiWmllIGZpZ3V1cn4lcyIpCiAg ICAgKCJwdF9CUiIgOmRlZmF1bHQgIlZlamEgYSBmaWd1cmEgJXMiKQogICAgICgicm8iIDpkZWZh dWx0ICJWZXppIGZpZ3VyYSAlcyIpCiAgICAgKCJzbCIgOmRlZmF1bHQgIkdsZWogc2xpa28gJXMi KQogICAgICgidHIiIDpkZWZhdWx0ICJia3ouIMWfZWtpbCAlcyIpKQogICAgKCJTZWUgbGlzdGlu ZyAlcyIKICAgICAoImNzIiA6ZGVmYXVsdCAiVml6IHByb2dyYW0gJXMiKQogICAgICgiZmEiIDpk ZWZhdWx0ICLZhtmF2KfbjNi0INio2LHZhtin2YXZh+KAjNix24zYstuMICVzIikKICAgICAoImZy IiA6ZGVmYXVsdCAiY2YuIHByb2dyYW1tZSAlcyIKICAgICAgOmh0bWwgImNmLiZuYnNwO3Byb2dy YW1tZSZuYnNwOyVzIiA6bGF0ZXggImNmLn5wcm9ncmFtbWV+JXMiKQogICAgICgibmwiIDpkZWZh dWx0ICJaaWUgcHJvZ3JhbW1hICVzIgogICAgICA6aHRtbCAiWmllIHByb2dyYW1tYSZuYnNwOyVz IiA6bGF0ZXggIlppZSBwcm9ncmFtbWF+JXMiKQogICAgICgicHRfQlIiIDpkZWZhdWx0ICJWZWph IGEgbGlzdGFnZW0gJXMiKQogICAgICgicm8iIDpkZWZhdWx0ICJWZXppIHRhYmVsdWwgJXMiKQog ICAgICgic2wiIDpkZWZhdWx0ICJHbGVqIGl6cGlzIHByb2dyYW1hICVzIikKICAgICAoInRyIiA6 ZGVmYXVsdCAiYmt6LiBwcm9ncmFtICVzIikpCiAgICAoIlNlZSBzZWN0aW9uICVzIgogICAgICgi YXIiIDpkZWZhdWx0ICLYp9mG2LjYsSDZgtiz2YUgJXMiKQogICAgICgiY3MiIDpkZWZhdWx0ICJW aXogc2VrY2UgJXMiKQogICAgICgiZGEiIDpkZWZhdWx0ICJqw6Z2bmbDuHIgYWZzbml0ICVzIikK ICAgICAoImRlIiA6ZGVmYXVsdCAic2llaGUgQWJzY2huaXR0ICVzIikKICAgICAoImVzIiA6YXNj aWkgIlZlYSBzZWNjaW9uICVzIiA6aHRtbCAiVmVhIHNlY2NpJm9hY3V0ZTtuICVzIiA6ZGVmYXVs dCAiVmVhIHNlY2Npw7NuICVzIikKICAgICAoImV0IiA6aHRtbCAiVmFhdGEgcGVhdCYjMjUyO2tr aSAlcyIgOnV0Zi04ICJWYWF0YSBwZWF0w7xra2kgJXMiKQogICAgICgiZmEiIDpkZWZhdWx0ICLZ htmF2KfbjNi0INio2K7YtCAlcyIpCiAgICAgKCJmciIgOmRlZmF1bHQgImNmLiBzZWN0aW9uICVz IikKICAgICAoIml0IiA6ZGVmYXVsdCAiVmVkaSBzZXppb25lICVzIikKICAgICAoImphIiA6ZGVm YXVsdCAi44K744Kv44K344On44OzICVzIOOCkuWPgueFpyIpCiAgICAgKCJubCIgOmRlZmF1bHQg IlppZSBzZWN0aWUgJXMiCiAgICAgIDpodG1sICJaaWUgc2VjdGllJm5ic3A7JXMiIDpsYXRleCAi WmllIHNlY3RpZX4lcyIpCiAgICAgKCJwdF9CUiIgOmh0bWwgIlZlamEgYSBzZSZjY2VkaWw7JmF0 aWxkZTtvICVzIiA6ZGVmYXVsdCAiVmVqYSBhIHNlw6fDo28gJXMiCiAgICAgIDphc2NpaSAiVmVq YSBhIHNlY2FvICVzIikKICAgICAoInJvIiA6ZGVmYXVsdCAiVmV6aSBzZWPIm2l1bmVhICVzIikK ICAgICAoInJ1IiA6aHRtbCAiJiMxMDU3OyYjMTA4NDsuICYjMTA4ODsmIzEwNzI7JiMxMDc5OyYj MTA3NjsmIzEwNzc7JiMxMDgzOyAlcyIKICAgICAgOnV0Zi04ICLQodC8LiDRgNCw0LfQtNC10Lsg JXMiKQogICAgICgic2wiIDpkZWZhdWx0ICJHbGVqIHBvZ2xhdmplICVkIikKICAgICAoInRyIiA6 ZGVmYXVsdCAiYmt6LiBiw7Zsw7xtICVzIikKICAgICAoInpoLUNOIiA6aHRtbCAiJiMyMTQ0Mjsm IzM1MjY1OyYjMzE1MzI7JXMmIzMzNDEwOyIgOnV0Zi04ICLlj4Lop4HnrKwlc+iKgiIpKQogICAg KCJTZWUgdGFibGUgJXMiCiAgICAgKCJjcyIgOmRlZmF1bHQgIlZpeiB0YWJ1bGthICVzIikKICAg ICAoImZhIiA6ZGVmYXVsdCAi2YbZhdin24zYtCDYrNiv2YjZhCAlcyIpCiAgICAgKCJmciIgOmRl ZmF1bHQgImNmLiB0YWJsZWF1ICVzIgogICAgICA6aHRtbCAiY2YuJm5ic3A7dGFibGVhdSZuYnNw OyVzIiA6bGF0ZXggImNmLn50YWJsZWF1fiVzIikKICAgICAoIml0IiA6ZGVmYXVsdCAiVmVkaSB0 YWJlbGxhICVzIikKICAgICAoIm5sIiA6ZGVmYXVsdCAiWmllIHRhYmVsICVzIgogICAgICA6aHRt bCAiWmllIHRhYmVsJm5ic3A7JXMiIDpsYXRleCAiWmllIHRhYmVsfiVzIikKICAgICAoInB0X0JS IiA6ZGVmYXVsdCAiVmVqYSBhIHRhYmVsYSAlcyIpCiAgICAgKCJybyIgOmRlZmF1bHQgIlZlemkg dGFiZWx1bCAlcyIpCiAgICAgKCJzbCIgOmRlZmF1bHQgIkdsZWogdGFiZWxvICVzIikKICAgICAo InRyIiA6ZGVmYXVsdCAiYmt6LiB0YWJsbyAlcyIpKQogICAgKCJUYWJsZSIKICAgICAoImFyIiA6 ZGVmYXVsdCAi2KzYr9mI2YQiKQogICAgICgiY3MiIDpkZWZhdWx0ICJUYWJ1bGthIikKICAgICAo ImRlIiA6ZGVmYXVsdCAiVGFiZWxsZSIpCiAgICAgKCJlcyIgOmRlZmF1bHQgIlRhYmxhIikKICAg ICAoImV0IiA6ZGVmYXVsdCAiVGFiZWwiKQogICAgICgiZmEiIDpkZWZhdWx0ICLYrNiv2YjZhCIp CiAgICAgKCJmciIgOmRlZmF1bHQgIlRhYmxlYXUiKQogICAgICgiaXMiIDpkZWZhdWx0ICJUYWZs YSIpCiAgICAgKCJpdCIgOmRlZmF1bHQgIlRhYmVsbGEiKQogICAgICgiamEiIDpkZWZhdWx0ICLo oagiIDpodG1sICImIzM0OTIwOyIpCiAgICAgKCJubCIgOmRlZmF1bHQgIlRhYmVsIikKICAgICAo InB0X0JSIiA6ZGVmYXVsdCAiVGFiZWxhIikKICAgICAoInJvIiA6ZGVmYXVsdCAiVGFiZWwiKQog ICAgICgicnUiIDpodG1sICImIzEwNTg7JiMxMDcyOyYjMTA3MzsmIzEwODM7JiMxMDgwOyYjMTA5 NDsmIzEwNzI7IgogICAgICA6dXRmLTggItCi0LDQsdC70LjRhtCwIikKICAgICAoInRyIiA6ZGVm YXVsdCAiVGFibG8iKQogICAgICgiemgtQ04iIDpodG1sICImIzM0OTIwOyIgOnV0Zi04ICLooagi KSkKICAgICgiVGFibGUgJWQ6IgogICAgICgiYXIiIDpkZWZhdWx0ICLYrNiv2YjZhCAlZDoiKQog ICAgICgiY3MiIDpkZWZhdWx0ICJUYWJ1bGthICVkOiIpCiAgICAgKCJkYSIgOmRlZmF1bHQgIlRh YmVsICVkIikKICAgICAoImRlIiA6ZGVmYXVsdCAiVGFiZWxsZSAlZCIpCiAgICAgKCJlcyIgOmRl ZmF1bHQgIlRhYmxhICVkIikKICAgICAoImV0IiA6ZGVmYXVsdCAiVGFiZWwgJWQiKQogICAgICgi ZmEiIDpkZWZhdWx0ICLYrNiv2YjZhCAlZCIpCiAgICAgKCJmciIgOmRlZmF1bHQgIlRhYmxlYXUg JWQgOiIpCiAgICAgKCJpcyIgOmRlZmF1bHQgIlRhZmxhICVkIikKICAgICAoIml0IiA6ZGVmYXVs dCAiVGFiZWxsYSAlZDoiKQogICAgICgiamEiIDpkZWZhdWx0ICLooaglZDoiIDpodG1sICImIzM0 OTIwOyVkOiIpCiAgICAgKCJubCIgOmRlZmF1bHQgIlRhYmVsICVkOiIgOmh0bWwgIlRhYmVsJm5i c3A7JWQ6IikKICAgICAoIm5vIiA6ZGVmYXVsdCAiVGFiZWxsICVkIikKICAgICAoIm5iIiA6ZGVm YXVsdCAiVGFiZWxsICVkIikKICAgICAoIm5uIiA6ZGVmYXVsdCAiVGFiZWxsICVkIikKICAgICAo InB0X0JSIiA6ZGVmYXVsdCAiVGFiZWxhICVkOiIpCiAgICAgKCJybyIgOmRlZmF1bHQgIlRhYmVs ICVkIikKICAgICAoInJ1IiA6aHRtbCAiJiMxMDU4OyYjMTA3MjsmIzEwNzM7JiMxMDgzOyYjMTA4 MDsmIzEwOTQ7JiMxMDcyOyAlZC46IgogICAgICA6dXRmLTggItCi0LDQsdC70LjRhtCwICVkLjoi KQogICAgICgic2wiIDpkZWZhdWx0ICJUYWJlbGEgJWQiKQogICAgICgic3YiIDpkZWZhdWx0ICJU YWJlbGwgJWQiKQogICAgICgidHIiIDpkZWZhdWx0ICJUYWJsbyAlZCIpCiAgICAgKCJ6aC1DTiIg Omh0bWwgIiYjMzQ5MjA7JWQmbmJzcDsiIDp1dGYtOCAi6KGoJWQgIikpCiAgICAoIlRhYmxlIG9m IENvbnRlbnRzIgogICAgICgiYXIiIDpkZWZhdWx0ICLZgdmH2LHYs9iqINmF2LfYp9mE2KgiKQog ICAgICgiY2EiIDpodG1sICImSWFjdXRlO25kZXgiKQogICAgICgiY3MiIDpkZWZhdWx0ICJPYnNh aCIpCiAgICAgKCJkYSIgOmRlZmF1bHQgIkluZGhvbGQiKQogICAgICgiZGUiIDpkZWZhdWx0ICJJ bmhhbHRzdmVyemVpY2huaXMiKQogICAgICgiZW8iIDpkZWZhdWx0ICJFbmhhdm8iKQogICAgICgi ZXMiIDphc2NpaSAiSW5kaWNlIiA6aHRtbCAiJklhY3V0ZTtuZGljZSIgOmRlZmF1bHQgIsONbmRp Y2UiKQogICAgICgiZXQiIDpkZWZhdWx0ICJTaXN1a29yZCIpCiAgICAgKCJmYSIgOmRlZmF1bHQg ItmB2YfYsdiz2KoiKQogICAgICgiZmkiIDpodG1sICJTaXMmYXVtbDtsbHlzbHVldHRlbG8iKQog ICAgICgiZnIiIDphc2NpaSAiU29tbWFpcmUiIDpkZWZhdWx0ICJUYWJsZSBkZXMgbWF0acOocmVz IikKICAgICAoImh1IiA6aHRtbCAiVGFydGFsb21qZWd5eiZlYWN1dGU7ayIpCiAgICAgKCJpcyIg OmRlZmF1bHQgIkVmbmlzeWZpcmxpdCIpCiAgICAgKCJpdCIgOmRlZmF1bHQgIkluZGljZSIpCiAg ICAgKCJqYSIgOmRlZmF1bHQgIuebruasoSIgOmh0bWwgIiYjMzA0NDY7JiMyNzQyNTsiKQogICAg ICgibmwiIDpkZWZhdWx0ICJJbmhvdWRzb3BnYXZlIikKICAgICAoIm5vIiA6ZGVmYXVsdCAiSW5u aG9sZCIpCiAgICAgKCJuYiIgOmRlZmF1bHQgIklubmhvbGQiKQogICAgICgibm4iIDpkZWZhdWx0 ICJJbm5oYWxkIikKICAgICAoInBsIiA6aHRtbCAiU3BpcyB0cmUmI3gwMTViO2NpIikKICAgICAo InB0X0JSIiA6aHRtbCAiJklhY3V0ZTtuZGljZSIgOnV0ZjggIsONbmRpY2UiIDphc2NpaSAiSW5k aWNlIikKICAgICAoInJvIiA6ZGVmYXVsdCAiQ3VwcmlucyIpCiAgICAgKCJydSIgOmh0bWwgIiYj MTA1NzsmIzEwODY7JiMxMDc2OyYjMTA3NzsmIzEwODg7JiMxMDc4OyYjMTA3MjsmIzEwODU7JiMx MDgwOyYjMTA3NzsiCiAgICAgIDp1dGYtOCAi0KHQvtC00LXRgNC20LDQvdC40LUiKQogICAgICgi c2wiIDpkZWZhdWx0ICJLYXphbG8iKQogICAgICgic3YiIDpodG1sICJJbm5laCZhcmluZztsbCIp CiAgICAgKCJ0ciIgOmRlZmF1bHQgIsSww6dpbmRla2lsZXIiKQogICAgICgidWsiIDpodG1sICIm IzEwNDc7JiMxMDg0OyYjMTExMDsmIzEwODk7JiMxMDkwOyIgOnV0Zi04ICLQl9C80ZbRgdGCIikK ICAgICAoInpoLUNOIiA6aHRtbCAiJiMzMDQ0NjsmIzI0NDA1OyIgOnV0Zi04ICLnm67lvZUiKQog ICAgICgiemgtVFciIDpodG1sICImIzMwNDQ2OyYjMzc2MzY7IiA6dXRmLTggIuebrumMhCIpKQog ICAgKCJVbmtub3duIHJlZmVyZW5jZSIKICAgICAoImFyIiA6ZGVmYXVsdCAi2YXYsdis2Lkg2LrZ itixINmF2LnYsdmR2YEiKQogICAgICgiZGEiIDpkZWZhdWx0ICJ1a2VuZHQgcmVmZXJlbmNlIikK ICAgICAoImRlIiA6ZGVmYXVsdCAiVW5iZWthbm50ZXIgVmVyd2VpcyIpCiAgICAgKCJlcyIgOmRl ZmF1bHQgIlJlZmVyZW5jaWEgZGVzY29ub2NpZGEiKQogICAgICgiZXQiIDpkZWZhdWx0ICJUdW5k bWF0dSB2aWlkZSIpCiAgICAgKCJmYSIgOmRlZmF1bHQgItmF2YbYqNi5INmG2KfYtNmG2KfYsyIp CiAgICAgKCJmciIgOmFzY2lpICJEZXN0aW5hdGlvbiBpbmNvbm51ZSIgOmRlZmF1bHQgIlLDqWbD qXJlbmNlIGluY29ubnVlIikKICAgICAoIml0IiA6ZGVmYXVsdCAiUmlmZXJpbWVudG8gc2Nvbm9z Y2l1dG8iKQogICAgICgiamEiIDpkZWZhdWx0ICLkuI3mmI7jgarlj4LnhaflhYgiKQogICAgICgi bmwiIDpkZWZhdWx0ICJPbmJla2VuZGUgdmVyd2lqemluZyIpCiAgICAgKCJwdF9CUiIgOmh0bWwg IlJlZmVyJmVjaXJjO25jaWEgZGVzY29uaGVjaWRhIiA6ZGVmYXVsdCAiUmVmZXLDqm5jaWEgZGVz Y29uaGVjaWRhIiA6YXNjaWkgIlJlZmVyZW5jaWEgZGVzY29uaGVjaWRhIikKICAgICAoInJvIiA6 ZGVmYXVsdCAiUmVmZXJpbsibxIMgbmVjdW5vc2N1dMSDIikKICAgICAoInJ1IiA6aHRtbCAiJiMx MDUzOyYjMTA3NzsmIzEwODA7JiMxMDc5OyYjMTA3NDsmIzEwNzc7JiMxMDg5OyYjMTA5MDsmIzEw ODU7JiMxMDcyOyYjMTEwMzsgJiMxMDg5OyYjMTA4OTsmIzEwOTk7JiMxMDgzOyYjMTA4MjsmIzEw NzI7IgogICAgICA6dXRmLTggItCd0LXQuNC30LLQtdGB0YLQvdCw0Y8g0YHRgdGL0LvQutCwIikK ICAgICAoInNsIiA6ZGVmYXVsdCAiTmV6bmFuYSByZWZlcmVuY2EiKQogICAgICgidHIiIDpkZWZh dWx0ICJCaWxpbm1leWVuIHJlZmVyYW5zIikKICAgICAoInpoLUNOIiA6aHRtbCAiJiMyNjQxMDsm IzMwNjkzOyYjMjQzNDE7JiMyOTk5MjsiIDp1dGYtOCAi5pyq55+l5byV55SoIikpKQogICJEaWN0 aW9uYXJ5IGZvciBleHBvcnQgZW5naW5lLgoKQWxpc3Qgd2hvc2UgY2FyIGlzIHRoZSBzdHJpbmcg dG8gdHJhbnNsYXRlIGFuZCBjZHIgaXMgYW4gYWxpc3QKd2hvc2UgY2FyIGlzIHRoZSBsYW5ndWFn ZSBzdHJpbmcgYW5kIGNkciBpcyBhIHBsaXN0IHdob3NlCnByb3BlcnRpZXMgYXJlIHBvc3NpYmxl IGNoYXJzZXRzIGFuZCB2YWx1ZXMgdHJhbnNsYXRlZCB0ZXJtcy4KCkl0IGlzIHVzZWQgYXMgYSBk YXRhYmFzZSBmb3IgYG9yZy1leHBvcnQtdHJhbnNsYXRlJy4gIFNpbmNlIHRoaXMKZnVuY3Rpb24g cmV0dXJucyB0aGUgc3RyaW5nIGFzLWlzIGlmIG5vIHRyYW5zbGF0aW9uIHdhcyBmb3VuZCwKdGhl IHZhcmlhYmxlIG9ubHkgbmVlZHMgdG8gcmVjb3JkIHZhbHVlcyBkaWZmZXJlbnQgZnJvbSB0aGUK ZW50cnkuIikKCihkZWZ1biBvcmctZXhwb3J0LXRyYW5zbGF0ZSAocyBlbmNvZGluZyBpbmZvKQog ICJUcmFuc2xhdGUgc3RyaW5nIFMgYWNjb3JkaW5nIHRvIGxhbmd1YWdlIHNwZWNpZmljYXRpb24u CgpFTkNPRElORyBpcyBhIHN5bWJvbCBhbW9uZyBgOmFzY2lpJywgYDpodG1sJywgYDpsYXRleCcs IGA6bGF0aW4xJwphbmQgYDp1dGYtOCcuICBJTkZPIGlzIGEgcGxpc3QgdXNlZCBhcyBhIGNvbW11 bmljYXRpb24gY2hhbm5lbC4KClRyYW5zbGF0aW9uIGRlcGVuZHMgb24gYDpsYW5ndWFnZScgcHJv cGVydHkuICBSZXR1cm4gdGhlCnRyYW5zbGF0ZWQgc3RyaW5nLiAgSWYgbm8gdHJhbnNsYXRpb24g aXMgZm91bmQsIHRyeSB0byBmYWxsIGJhY2sKdG8gYDpkZWZhdWx0JyBlbmNvZGluZy4gIElmIGl0 IGZhaWxzLCByZXR1cm4gUy4iCiAgKGxldCogKChsYW5nIChwbGlzdC1nZXQgaW5mbyA6bGFuZ3Vh Z2UpKQoJICh0cmFuc2xhdGlvbnMgKGNkciAoYXNzb2MgbGFuZwoJCQkJICAgKGNkciAoYXNzb2Mg cyBvcmctZXhwb3J0LWRpY3Rpb25hcnkpKSkpKSkKICAgIChvciAocGxpc3QtZ2V0IHRyYW5zbGF0 aW9ucyBlbmNvZGluZykKCShwbGlzdC1nZXQgdHJhbnNsYXRpb25zIDpkZWZhdWx0KQoJcykpKQoK CgwKOzs7IEFzeW5jaHJvbm91cyBFeHBvcnQKOzsKOzsgYG9yZy1leHBvcnQtYXN5bmMtc3RhcnQn IGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgYXN5bmNocm9ub3VzCjs7IGV4cG9ydC4gIEl0IHJlY3Jl YXRlcyBjdXJyZW50IGJ1ZmZlciAoaW5jbHVkaW5nIHZpc2liaWxpdHksCjs7IG5hcnJvd2luZyBh bmQgdmlzaXRlZCBmaWxlKSBpbiBhbiBleHRlcm5hbCBFbWFjcyBwcm9jZXNzLCBhbmQKOzsgZXZh bHVhdGVzIGEgY29tbWFuZCB0aGVyZS4gIEl0IHRoZW4gYXBwbGllcyBhIGZ1bmN0aW9uIG9uIHRo ZQo7OyByZXR1cm5lZCByZXN1bHRzIGluIHRoZSBjdXJyZW50IHByb2Nlc3MuCjs7Cjs7IEF0IGEg aGlnaGVyIGxldmVsLCBgb3JnLWV4cG9ydC10by1idWZmZXInIGFuZCBgb3JnLWV4cG9ydC10by1m aWxlJwo7OyBhbGxvdyBleHBvcnRpbmcgdG8gYSBidWZmZXIgb3IgYSBmaWxlLCBhc3luY2hyb25v dXNseSBvciBub3QuCjs7Cjs7IGBvcmctZXhwb3J0LW91dHB1dC1maWxlLW5hbWUnIGlzIGFuIGF1 eGlsaWFyeSBmdW5jdGlvbiBtZWFudCB0byBiZQo7OyB1c2VkIHdpdGggYG9yZy1leHBvcnQtdG8t ZmlsZScuICBXaXRoIGEgZ2l2ZW4gZXh0ZW5zaW9uLCBpdCB0cmllcwo7OyB0byBwcm92aWRlIGEg Y2Fub25pY2FsIGZpbGUgbmFtZSB0byB3cml0ZSBleHBvcnQgb3V0cHV0IHRvLgo7Owo7OyBBc3lu Y2hyb25vdXNseSBnZW5lcmF0ZWQgcmVzdWx0cyBhcmUgbmV2ZXIgZGlzcGxheWVkIGRpcmVjdGx5 Lgo7OyBJbnN0ZWFkLCB0aGV5IGFyZSBzdG9yZWQgaW4gYG9yZy1leHBvcnQtc3RhY2stY29udGVu dHMnLiAgVGhleSBjYW4KOzsgdGhlbiBiZSByZXRyaWV2ZWQgYnkgY2FsbGluZyBgb3JnLWV4cG9y dC1zdGFjaycuCjs7Cjs7IEV4cG9ydCBTdGFjayBpcyB2aWV3ZWQgdGhyb3VnaCBhIGRlZGljYXRl ZCBtYWpvciBtb2RlCjs7YG9yZy1leHBvcnQtc3RhY2stbW9kZScgYW5kIHRvb2xzOiBgb3JnLWV4 cG9ydC1zdGFjay1yZWZyZXNoJywKOztgb3JnLWV4cG9ydC1zdGFjay1kZWxldGUnLCBgb3JnLWV4 cG9ydC1zdGFjay12aWV3JyBhbmQKOztgb3JnLWV4cG9ydC1zdGFjay1jbGVhcicuCjs7Cjs7IEZv ciBiYWNrLWVuZHMsIGBvcmctZXhwb3J0LWFkZC10by1zdGFjaycgYWRkIGEgbmV3IHNvdXJjZSB0 byBzdGFjay4KOzsgSXQgc2hvdWxkIGJlIHVzZWQgd2hlbmV2ZXIgYG9yZy1leHBvcnQtYXN5bmMt c3RhcnQnIGlzIGNhbGxlZC4KCihkZWZ1biBvcmctZXhwb3J0LWFzeW5jLXN0YXJ0ICAoZnVuIGJv ZHkpCiAgIkNhbGwgZnVuY3Rpb24gRlVOIG9uIHRoZSByZXN1bHRzIHJldHVybmVkIGJ5IEJPRFkg ZXZhbHVhdGlvbi4KCkZVTiBpcyBhbiBhbm9ueW1vdXMgZnVuY3Rpb24gb2Ygb25lIGFyZ3VtZW50 LiAgQk9EWSBzaG91bGQgYmUgYSB2YWxpZApFTGlzcCBzb3VyY2UgZXhwcmVzc2lvbi4gIEJPRFkg ZXZhbHVhdGlvbiBoYXBwZW5zIGluIGFuIGFzeW5jaHJvbm91cyBwcm9jZXNzLApmcm9tIGEgYnVm ZmVyIHdoaWNoIGlzIGFuIGV4YWN0IGNvcHkgb2YgdGhlIGN1cnJlbnQgb25lLgoKVXNlIGBvcmct ZXhwb3J0LWFkZC10by1zdGFjaycgaW4gRlVOIGluIG9yZGVyIHRvIHJlZ2lzdGVyIHJlc3VsdHMK aW4gdGhlIHN0YWNrLgoKVGhpcyBpcyBhIGxvdyBsZXZlbCBmdW5jdGlvbi4gIFNlZSBhbHNvIGBv cmctZXhwb3J0LXRvLWJ1ZmZlcicKYW5kIGBvcmctZXhwb3J0LXRvLWZpbGUnIGZvciBtb3JlIHNw ZWNpYWxpemVkIGZ1bmN0aW9ucy4iCiAgKGRlY2xhcmUgKGluZGVudCAxKSkKICA7OyBXcml0ZSB0 aGUgZnVsbCBzZXhwIGV2YWx1YXRpbmcgQk9EWSBpbiBhIGNvcHkgb2YgdGhlIGN1cnJlbnQKICA7 OyBidWZmZXIgdG8gYSB0ZW1wb3JhcnkgZmlsZSwgYXMgaXQgbWF5IGJlIHRvbyBsb25nIGZvciBw cm9ncmFtCiAgOzsgYXJncyBpbiBgc3RhcnQtcHJvY2VzcycuCiAgKHdpdGgtdGVtcC1tZXNzYWdl ICJJbml0aWFsaXppbmcgYXN5bmNocm9ub3VzIGV4cG9ydCBwcm9jZXNzIgogICAgKGxldCAoKGNv cHktZnVuIChvcmctZXhwb3J0LS1nZW5lcmF0ZS1jb3B5LXNjcmlwdCAoY3VycmVudC1idWZmZXIp KSkKICAgICAgICAgICh0ZW1wLWZpbGUgKG1ha2UtdGVtcC1maWxlICJvcmctZXhwb3J0LXByb2Nl c3MiKSkpCiAgICAgIChsZXQgKChjb2Rpbmctc3lzdGVtLWZvci13cml0ZSAndXRmLTgtZW1hY3Mt dW5peCkpCiAgICAgICAgKHdyaXRlLXJlZ2lvbgogICAgICAgICA7OyBOdWxsIGNoYXJhY3RlcnMg KGZyb20gdmFyaWFibGUgdmFsdWVzKSBhcmUgaW5zZXJ0ZWQKICAgICAgICAgOzsgd2l0aGluIHRo ZSBmaWxlLiAgQXMgYSBjb25zZXF1ZW5jZSwgY29kaW5nIHN5c3RlbSBmb3IKICAgICAgICAgOzsg YnVmZmVyIGNvbnRlbnRzIGNvdWxkIGZhaWwgdG8gYmUgcmVjb2duaXplZCBwcm9wZXJseS4KICAg ICAgICAgKGZvcm1hdCAiOzsgLSotIGNvZGluZzogdXRmLTgtZW1hY3MtdW5peDsgbGV4aWNhbC1i aW5kaW5nOnQgLSotXG4lUyIKICAgICAgICAgICAgICAgICBgKHdpdGgtdGVtcC1idWZmZXIKICAg ICAgICAgICAgICAgICAgICAsKHdoZW4gb3JnLWV4cG9ydC1hc3luYy1kZWJ1ZyAnKHNldHEgZGVi dWctb24tZXJyb3IgdCkpCiAgICAgICAgICAgICAgICAgICAgOzsgSWdub3JlIGBraWxsLWVtYWNz LWhvb2snIGFuZCBjb2RlIGV2YWx1YXRpb24KICAgICAgICAgICAgICAgICAgICA7OyBxdWVyaWVz IGZyb20gQmFiZWwgYXMgd2UgbmVlZCBhIHRydWx5CiAgICAgICAgICAgICAgICAgICAgOzsgbm9u LWludGVyYWN0aXZlIHByb2Nlc3MuCiAgICAgICAgICAgICAgICAgICAgKHNldHEga2lsbC1lbWFj cy1ob29rIG5pbAogICAgICAgICAgICAgICAgICAgICAgICAgIG9yZy1iYWJlbC1jb25maXJtLWV2 YWx1YXRlLWFuc3dlci1ubyB0KQogICAgICAgICAgICAgICAgICAgIDs7IEluaXRpYWxpemUgZXhw b3J0IGZyYW1ld29yay4KICAgICAgICAgICAgICAgICAgICAocmVxdWlyZSAnb3gpCiAgICAgICAg ICAgICAgICAgICAgOzsgUmUtY3JlYXRlIGN1cnJlbnQgYnVmZmVyIHRoZXJlLgogICAgICAgICAg ICAgICAgICAgIChmdW5jYWxsICcsY29weS1mdW4pCiAgICAgICAgICAgICAgICAgICAgKHJlc3Rv cmUtYnVmZmVyLW1vZGlmaWVkLXAgbmlsKQogICAgICAgICAgICAgICAgICAgIDs7IFNleHAgdG8g ZXZhbHVhdGUgaW4gdGhlIGJ1ZmZlci4KICAgICAgICAgICAgICAgICAgICAocHJpbnQgLGJvZHkp KSkKICAgICAgICAgbmlsIHRlbXAtZmlsZSBuaWwgJ3NpbGVudCkpCiAgICAgIDs7IFN0YXJ0IGV4 dGVybmFsIHByb2Nlc3MuCiAgICAgIChsZXQqICgocHJvY2Vzcy1jb25uZWN0aW9uLXR5cGUgbmls KQogICAgICAgICAgICAgKHByb2MtYnVmZmVyIChnZW5lcmF0ZS1uZXctYnVmZmVyLW5hbWUgIipP cmcgRXhwb3J0IFByb2Nlc3MqIikpCiAgICAgICAgICAgICAocHJvY2VzcwoJICAgICAgKGFwcGx5 CgkgICAgICAgIydzdGFydC1wcm9jZXNzCgkgICAgICAgKGFwcGVuZAoJCShsaXN0ICJvcmctZXhw b3J0LXByb2Nlc3MiCgkJICAgICAgcHJvYy1idWZmZXIKCQkgICAgICAoZXhwYW5kLWZpbGUtbmFt ZSBpbnZvY2F0aW9uLW5hbWUgaW52b2NhdGlvbi1kaXJlY3RvcnkpCgkJICAgICAgIi0tYmF0Y2gi KQoJCShpZiBvcmctZXhwb3J0LWFzeW5jLWluaXQtZmlsZQoJCSAgICAobGlzdCAiLVEiICItbCIg b3JnLWV4cG9ydC1hc3luYy1pbml0LWZpbGUpCgkJICAobGlzdCAiLWwiIHVzZXItaW5pdC1maWxl KSkKCQkobGlzdCAiLWwiIHRlbXAtZmlsZSkpKSkpCiAgICAgICAgOzsgUmVnaXN0ZXIgcnVubmlu ZyBwcm9jZXNzIGluIHN0YWNrLgogICAgICAgIChvcmctZXhwb3J0LWFkZC10by1zdGFjayAoZ2V0 LWJ1ZmZlciBwcm9jLWJ1ZmZlcikgbmlsIHByb2Nlc3MpCiAgICAgICAgOzsgU2V0LXVwIHNlbnRp bmVsIGluIG9yZGVyIHRvIGNhdGNoIHJlc3VsdHMuCiAgICAgICAgKGxldCAoKGhhbmRsZXIgZnVu KSkKICAgICAgICAgIChzZXQtcHJvY2Vzcy1zZW50aW5lbAogICAgICAgICAgIHByb2Nlc3MKICAg ICAgICAgICAobGFtYmRhIChwIF9zdGF0dXMpCiAgICAgICAgICAgICAobGV0ICgocHJvYy1idWZm ZXIgKHByb2Nlc3MtYnVmZmVyIHApKSkKICAgICAgICAgICAgICAgKHdoZW4gKGVxIChwcm9jZXNz LXN0YXR1cyBwKSAnZXhpdCkKICAgICAgICAgICAgICAgICAodW53aW5kLXByb3RlY3QKICAgICAg ICAgICAgICAgICAgICAgKGlmICh6ZXJvcCAocHJvY2Vzcy1leGl0LXN0YXR1cyBwKSkKICAgICAg ICAgICAgICAgICAgICAgICAgICh1bndpbmQtcHJvdGVjdAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChsZXQgKChyZXN1bHRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICh3aXRoLWN1cnJlbnQtYnVmZmVyIHByb2MtYnVmZmVyCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGdvdG8tY2hhciAocG9pbnQtbWF4KSkKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAoYmFja3dhcmQtc2V4cCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAocmVhZCAoY3VycmVudC1idWZmZXIpKSkpKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGZ1bmNhbGwgaGFuZGxlciByZXN1bHRzKSkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHVubGVzcyBvcmctZXhwb3J0LWFzeW5jLWRlYnVnCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGFuZCAoZ2V0LWJ1ZmZlciBwcm9jLWJ1ZmZlcikKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChraWxsLWJ1ZmZlciBwcm9jLWJ1ZmZlcikpKSkKICAg ICAgICAgICAgICAgICAgICAgICAob3JnLWV4cG9ydC1hZGQtdG8tc3RhY2sgcHJvYy1idWZmZXIg bmlsIHApCiAgICAgICAgICAgICAgICAgICAgICAgKGRpbmcpCiAgICAgICAgICAgICAgICAgICAg ICAgKG1lc3NhZ2UgIlByb2Nlc3MgYCVzJyBleGl0ZWQgYWJub3JtYWxseSIgcCkpCiAgICAgICAg ICAgICAgICAgICAodW5sZXNzIG9yZy1leHBvcnQtYXN5bmMtZGVidWcKICAgICAgICAgICAgICAg ICAgICAgKGRlbGV0ZS1maWxlIHRlbXAtZmlsZSkpKSkpKSkpKSkpKQoKOzs7IyMjYXV0b2xvYWQK KGRlZnVuIG9yZy1leHBvcnQtdG8tYnVmZmVyCiAgICAoYmFja2VuZCBidWZmZXIKCSAgICAgJm9w dGlvbmFsIGFzeW5jIHN1YnRyZWVwIHZpc2libGUtb25seSBib2R5LW9ubHkgZXh0LXBsaXN0Cgkg ICAgIHBvc3QtcHJvY2VzcykKICAiQ2FsbCBgb3JnLWV4cG9ydC1hcycgd2l0aCBvdXRwdXQgdG8g YSBzcGVjaWZpZWQgYnVmZmVyLgoKQkFDS0VORCBpcyBlaXRoZXIgYW4gZXhwb3J0IGJhY2stZW5k LCBhcyByZXR1cm5lZCBieSwgZS5nLiwKYG9yZy1leHBvcnQtY3JlYXRlLWJhY2tlbmQnLCBvciBh IHN5bWJvbCByZWZlcnJpbmcgdG8KYSByZWdpc3RlcmVkIGJhY2stZW5kLgoKQlVGRkVSIGlzIHRo ZSBuYW1lIG9mIHRoZSBvdXRwdXQgYnVmZmVyLiAgSWYgaXQgYWxyZWFkeSBleGlzdHMsCml0IHdp bGwgYmUgZXJhc2VkIGZpcnN0LCBvdGhlcndpc2UsIGl0IHdpbGwgYmUgY3JlYXRlZC4KCkEgbm9u LW5pbCBvcHRpb25hbCBhcmd1bWVudCBBU1lOQyBtZWFucyB0aGUgcHJvY2VzcyBzaG91bGQgaGFw cGVuCmFzeW5jaHJvbm91c2x5LiAgVGhlIHJlc3VsdGluZyBidWZmZXIgc2hvdWxkIHRoZW4gYmUg YWNjZXNzaWJsZQp0aHJvdWdoIHRoZSBgb3JnLWV4cG9ydC1zdGFjaycgaW50ZXJmYWNlLiAgV2hl biBBU1lOQyBpcyBuaWwsIHRoZQpidWZmZXIgaXMgZGlzcGxheWVkIGlmIGBvcmctZXhwb3J0LXNo b3ctdGVtcG9yYXJ5LWV4cG9ydC1idWZmZXInCmlzIG5vbi1uaWwuCgpPcHRpb25hbCBhcmd1bWVu dHMgU1VCVFJFRVAsIFZJU0lCTEUtT05MWSwgQk9EWS1PTkxZIGFuZApFWFQtUExJU1QgYXJlIHNp bWlsYXIgdG8gdGhvc2UgdXNlZCBpbiBgb3JnLWV4cG9ydC1hcycsIHdoaWNoCnNlZS4KCk9wdGlv bmFsIGFyZ3VtZW50IFBPU1QtUFJPQ0VTUyBpcyBhIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCBhY2Nl cHQKbm8gYXJndW1lbnQuICBJdCBpcyBhbHdheXMgY2FsbGVkIHdpdGhpbiB0aGUgY3VycmVudCBw cm9jZXNzLApmcm9tIEJVRkZFUiwgd2l0aCBwb2ludCBhdCBpdHMgYmVnaW5uaW5nLiAgRXhwb3J0 IGJhY2stZW5kcyBjYW4KdXNlIGl0IHRvIHNldCBhIG1ham9yIG1vZGUgdGhlcmUsIGUuZywKCiAg KGRlZnVuIG9yZy1sYXRleC1leHBvcnQtYXMtbGF0ZXgKICAgICgmb3B0aW9uYWwgYXN5bmMgc3Vi dHJlZXAgdmlzaWJsZS1vbmx5IGJvZHktb25seSBleHQtcGxpc3QpCiAgICAoaW50ZXJhY3RpdmUp CiAgICAob3JnLWV4cG9ydC10by1idWZmZXIgXFw9J2xhdGV4IFwiKk9yZyBMQVRFWCBFeHBvcnQq XCIKICAgICAgYXN5bmMgc3VidHJlZXAgdmlzaWJsZS1vbmx5IGJvZHktb25seSBleHQtcGxpc3QK ICAgICAgIydMYVRlWC1tb2RlKSkKCldoZW4gZXhwcmVzc2VkIGFzIGFuIGFub255bW91cyBmdW5j dGlvbiwgdXNpbmcgYGxhbWJkYScsClBPU1QtUFJPQ0VTUyBuZWVkcyB0byBiZSBxdW90ZWQuCgpU aGlzIGZ1bmN0aW9uIHJldHVybnMgQlVGRkVSLiIKICAoZGVjbGFyZSAoaW5kZW50IDIpKQogIChp ZiBhc3luYwogICAgICAob3JnLWV4cG9ydC1hc3luYy1zdGFydAoJICAobGV0ICgoY3MgYnVmZmVy LWZpbGUtY29kaW5nLXN5c3RlbSkpCgkgICAgKGxhbWJkYSAob3V0cHV0KQoJICAgICAgKHdpdGgt Y3VycmVudC1idWZmZXIgKGdldC1idWZmZXItY3JlYXRlIGJ1ZmZlcikKCSAgICAgICAgKGVyYXNl LWJ1ZmZlcikKCSAgICAgICAgKHNldHEgYnVmZmVyLWZpbGUtY29kaW5nLXN5c3RlbSBjcykKCSAg ICAgICAgKGluc2VydCBvdXRwdXQpCgkgICAgICAgIChnb3RvLWNoYXIgKHBvaW50LW1pbikpCgkg ICAgICAgIChvcmctZXhwb3J0LWFkZC10by1zdGFjayAoY3VycmVudC1idWZmZXIpIGJhY2tlbmQp CgkgICAgICAgIChpZ25vcmUtZXJyb3JzIChmdW5jYWxsIHBvc3QtcHJvY2VzcykpKSkpCglgKG9y Zy1leHBvcnQtYXMKCSAgJyxiYWNrZW5kICxzdWJ0cmVlcCAsdmlzaWJsZS1vbmx5ICxib2R5LW9u bHkgJyxleHQtcGxpc3QpKQogICAgKGxldCAoKG91dHB1dAoJICAgKG9yZy1leHBvcnQtYXMgYmFj a2VuZCBzdWJ0cmVlcCB2aXNpYmxlLW9ubHkgYm9keS1vbmx5IGV4dC1wbGlzdCkpCgkgIChidWZm ZXIgKGdldC1idWZmZXItY3JlYXRlIGJ1ZmZlcikpCgkgIChlbmNvZGluZyBidWZmZXItZmlsZS1j b2Rpbmctc3lzdGVtKSkKICAgICAgKHdoZW4gKGFuZCAob3JnLXN0cmluZy1udy1wIG91dHB1dCkg KG9yZy1leHBvcnQtLWNvcHktdG8ta2lsbC1yaW5nLXApKQoJKG9yZy1raWxsLW5ldyBvdXRwdXQp KQogICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKCShlcmFzZS1idWZmZXIpCgkoc2V0 cSBidWZmZXItZmlsZS1jb2Rpbmctc3lzdGVtIGVuY29kaW5nKQoJKGluc2VydCBvdXRwdXQpCgko Z290by1jaGFyIChwb2ludC1taW4pKQoJKGFuZCAoZnVuY3Rpb25wIHBvc3QtcHJvY2VzcykgKGZ1 bmNhbGwgcG9zdC1wcm9jZXNzKSkpCiAgICAgICh3aGVuIG9yZy1leHBvcnQtc2hvdy10ZW1wb3Jh cnktZXhwb3J0LWJ1ZmZlcgoJKHN3aXRjaC10by1idWZmZXItb3RoZXItd2luZG93IGJ1ZmZlcikp CiAgICAgIGJ1ZmZlcikpKQoKOzs7IyMjYXV0b2xvYWQKKGRlZnVuIG9yZy1leHBvcnQtdG8tZmls ZQogICAgKGJhY2tlbmQgZmlsZSAmb3B0aW9uYWwgYXN5bmMgc3VidHJlZXAgdmlzaWJsZS1vbmx5 IGJvZHktb25seSBleHQtcGxpc3QKCSAgICAgcG9zdC1wcm9jZXNzKQogICJDYWxsIGBvcmctZXhw b3J0LWFzJyB3aXRoIG91dHB1dCB0byBhIHNwZWNpZmllZCBmaWxlLgoKQkFDS0VORCBpcyBlaXRo ZXIgYW4gZXhwb3J0IGJhY2stZW5kLCBhcyByZXR1cm5lZCBieSwgZS5nLiwKYG9yZy1leHBvcnQt Y3JlYXRlLWJhY2tlbmQnLCBvciBhIHN5bWJvbCByZWZlcnJpbmcgdG8KYSByZWdpc3RlcmVkIGJh Y2stZW5kLiAgRklMRSBpcyB0aGUgbmFtZSBvZiB0aGUgb3V0cHV0IGZpbGUsIGFzCmEgc3RyaW5n LgoKQSBub24tbmlsIG9wdGlvbmFsIGFyZ3VtZW50IEFTWU5DIG1lYW5zIHRoZSBwcm9jZXNzIHNo b3VsZCBoYXBwZW4KYXN5bmNocm9ub3VzbHkuICBUaGUgcmVzdWx0aW5nIGJ1ZmZlciB3aWxsIHRo ZW4gYmUgYWNjZXNzaWJsZQp0aHJvdWdoIHRoZSBgb3JnLWV4cG9ydC1zdGFjaycgaW50ZXJmYWNl LgoKT3B0aW9uYWwgYXJndW1lbnRzIFNVQlRSRUVQLCBWSVNJQkxFLU9OTFksIEJPRFktT05MWSBh bmQKRVhULVBMSVNUIGFyZSBzaW1pbGFyIHRvIHRob3NlIHVzZWQgaW4gYG9yZy1leHBvcnQtYXMn LCB3aGljaApzZWUuCgpPcHRpb25hbCBhcmd1bWVudCBQT1NULVBST0NFU1MgaXMgY2FsbGVkIHdp dGggRklMRSBhcyBpdHMKYXJndW1lbnQgYW5kIGhhcHBlbnMgYXN5bmNocm9ub3VzbHkgd2hlbiBB U1lOQyBpcyBub24tbmlsLiAgSXQKaGFzIHRvIHJldHVybiBhIGZpbGUgbmFtZSwgb3IgbmlsLiAg RXhwb3J0IGJhY2stZW5kcyBjYW4gdXNlIHRoaXMKdG8gc2VuZCB0aGUgb3V0cHV0IGZpbGUgdGhy b3VnaCBhZGRpdGlvbmFsIHByb2Nlc3NpbmcsIGUuZywKCiAgKGRlZnVuIG9yZy1sYXRleC1leHBv cnQtdG8tbGF0ZXgKICAgICgmb3B0aW9uYWwgYXN5bmMgc3VidHJlZXAgdmlzaWJsZS1vbmx5IGJv ZHktb25seSBleHQtcGxpc3QpCiAgICAoaW50ZXJhY3RpdmUpCiAgICAobGV0ICgob3V0ZmlsZSAo b3JnLWV4cG9ydC1vdXRwdXQtZmlsZS1uYW1lIFwiLnRleFwiIHN1YnRyZWVwKSkpCiAgICAgIChv cmctZXhwb3J0LXRvLWZpbGUgXFw9J2xhdGV4IG91dGZpbGUKICAgICAgICBhc3luYyBzdWJ0cmVl cCB2aXNpYmxlLW9ubHkgYm9keS1vbmx5IGV4dC1wbGlzdAogICAgICAgICMnb3JnLWxhdGV4LWNv bXBpbGUpKSkKCldoZW4gZXhwcmVzc2VkIGFzIGFuIGFub255bW91cyBmdW5jdGlvbiwgdXNpbmcg YGxhbWJkYScsClBPU1QtUFJPQ0VTUyBuZWVkcyB0byBiZSBxdW90ZWQuCgpUaGUgZnVuY3Rpb24g cmV0dXJucyBlaXRoZXIgYSBmaWxlIG5hbWUgcmV0dXJuZWQgYnkgUE9TVC1QUk9DRVNTLApvciBG SUxFLiIKICAoZGVjbGFyZSAoaW5kZW50IDIpKQogIChpZiAobm90IChmaWxlLXdyaXRhYmxlLXAg ZmlsZSkpIChlcnJvciAiT3V0cHV0IGZpbGUgbm90IHdyaXRhYmxlIikKICAgIChsZXQgKChleHQt cGxpc3QgKG9yZy1jb21iaW5lLXBsaXN0cyBgKDpvdXRwdXQtZmlsZSAsZmlsZSkgZXh0LXBsaXN0 KSkKCSAgKGVuY29kaW5nIChvciBvcmctZXhwb3J0LWNvZGluZy1zeXN0ZW0gYnVmZmVyLWZpbGUt Y29kaW5nLXN5c3RlbSkpCiAgICAgICAgICBhdXRvLW1vZGUtYWxpc3QpCiAgICAgIChpZiBhc3lu YwogICAgICAgICAgKG9yZy1leHBvcnQtYXN5bmMtc3RhcnQKCSAgICAgIChsYW1iZGEgKGZpbGUp CgkJKG9yZy1leHBvcnQtYWRkLXRvLXN0YWNrIChleHBhbmQtZmlsZS1uYW1lIGZpbGUpIGJhY2tl bmQpKQoJICAgIGAobGV0ICgob3V0cHV0CgkJICAgIChvcmctZXhwb3J0LWFzCgkJICAgICAnLGJh Y2tlbmQgLHN1YnRyZWVwICx2aXNpYmxlLW9ubHkgLGJvZHktb25seQoJCSAgICAgJyxleHQtcGxp c3QpKSkKCSAgICAgICAod2l0aC10ZW1wLWJ1ZmZlcgoJCSAoaW5zZXJ0IG91dHB1dCkKCQkgKGxl dCAoKGNvZGluZy1zeXN0ZW0tZm9yLXdyaXRlICcsZW5jb2RpbmcpKQoJCSAgICh3cml0ZS1maWxl ICxmaWxlKSkpCgkgICAgICAgKG9yIChpZ25vcmUtZXJyb3JzIChmdW5jYWxsICcscG9zdC1wcm9j ZXNzICxmaWxlKSkgLGZpbGUpKSkKICAgICAgICAobGV0ICgob3V0cHV0IChvcmctZXhwb3J0LWFz CiAgICAgICAgICAgICAgICAgICAgICAgYmFja2VuZCBzdWJ0cmVlcCB2aXNpYmxlLW9ubHkgYm9k eS1vbmx5IGV4dC1wbGlzdCkpKQogICAgICAgICAgKHdpdGgtdGVtcC1idWZmZXIKICAgICAgICAg ICAgKGluc2VydCBvdXRwdXQpCiAgICAgICAgICAgIChsZXQgKChjb2Rpbmctc3lzdGVtLWZvci13 cml0ZSBlbmNvZGluZykpCgkgICAgICAod3JpdGUtZmlsZSBmaWxlKSkpCiAgICAgICAgICAod2hl biAoYW5kIChvcmctZXhwb3J0LS1jb3B5LXRvLWtpbGwtcmluZy1wKSAob3JnLXN0cmluZy1udy1w IG91dHB1dCkpCiAgICAgICAgICAgIChvcmcta2lsbC1uZXcgb3V0cHV0KSkKICAgICAgICAgIDs7 IEdldCBwcm9wZXIgcmV0dXJuIHZhbHVlLgogICAgICAgICAgKG9yIChhbmQgKGZ1bmN0aW9ucCBw b3N0LXByb2Nlc3MpIChmdW5jYWxsIHBvc3QtcHJvY2VzcyBmaWxlKSkKCSAgICAgIGZpbGUpKSkp KSkKCihkZWZ1biBvcmctZXhwb3J0LW91dHB1dC1maWxlLW5hbWUgKGV4dGVuc2lvbiAmb3B0aW9u YWwgc3VidHJlZXAgcHViLWRpcikKICAiUmV0dXJuIG91dHB1dCBmaWxlJ3MgbmFtZSBhY2NvcmRp bmcgdG8gYnVmZmVyIHNwZWNpZmljYXRpb25zLgoKRVhURU5TSU9OIGlzIGEgc3RyaW5nIHJlcHJl c2VudGluZyB0aGUgb3V0cHV0IGZpbGUgZXh0ZW5zaW9uLAp3aXRoIHRoZSBsZWFkaW5nIGRvdC4K CldpdGggYSBub24tbmlsIG9wdGlvbmFsIGFyZ3VtZW50IFNVQlRSRUVQLCB0cnkgdG8gZGV0ZXJt aW5lCm91dHB1dCBmaWxlJ3MgbmFtZSBieSBsb29raW5nIGZvciBcIkVYUE9SVF9GSUxFX05BTUVc IiBwcm9wZXJ0eQpvZiBzdWJ0cmVlIGF0IHBvaW50LgoKV2hlbiBvcHRpb25hbCBhcmd1bWVudCBQ VUItRElSIGlzIHNldCwgdXNlIGl0IGFzIHRoZSBwdWJsaXNoaW5nCmRpcmVjdG9yeS4KClJldHVy biBmaWxlIG5hbWUgYXMgYSBzdHJpbmcuIgogIChsZXQqICgodmlzaXRlZC1maWxlIChidWZmZXIt ZmlsZS1uYW1lIChidWZmZXItYmFzZS1idWZmZXIpKSkKCSAoYmFzZS1uYW1lCgkgIChjb25jYXQK CSAgIChmaWxlLW5hbWUtc2Fucy1leHRlbnNpb24KCSAgICAob3IKCSAgICAgOzsgQ2hlY2sgRVhQ T1JUX0ZJTEVfTkFNRSBzdWJ0cmVlIHByb3BlcnR5LgoJICAgICAoYW5kIHN1YnRyZWVwIChvcmct ZW50cnktZ2V0IG5pbCAiRVhQT1JUX0ZJTEVfTkFNRSIgJ3NlbGVjdGl2ZSkpCgkgICAgIDs7IENo ZWNrICMrRVhQT1JUX0ZJTEVfTkFNRSBrZXl3b3JkLgoJICAgICAob3JnLXdpdGgtcG9pbnQtYXQg KHBvaW50LW1pbikKCSAgICAgICAoY2F0Y2ggOmZvdW5kCgkJIChsZXQgKChjYXNlLWZvbGQtc2Vh cmNoIHQpKQoJCSAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQKCQkJICAgIl5bIFx0XSojXFwr RVhQT1JUX0ZJTEVfTkFNRTpbIFx0XStcXFMtIiBuaWwgdCkKCQkgICAgIChsZXQgKChlbGVtZW50 IChvcmctZWxlbWVudC1hdC1wb2ludCkpKQoJCSAgICAgICAod2hlbiAoZXEgJ2tleXdvcmQgKG9y Zy1lbGVtZW50LXR5cGUgZWxlbWVudCkpCgkJCSAodGhyb3cgOmZvdW5kCgkJCQkob3JnLWVsZW1l bnQtcHJvcGVydHkgOnZhbHVlIGVsZW1lbnQpKSkpKSkpKQoJICAgICA7OyBFeHRyYWN0IGZyb20g YnVmZmVyJ3MgYXNzb2NpYXRlZCBmaWxlLCBpZiBhbnkuCgkgICAgIChhbmQgdmlzaXRlZC1maWxl CiAgICAgICAgICAgICAgICAgIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5CiAgICAgICAgICAgICAg ICAgICA7OyBGb3IgYSAuZ3BnIHZpc2l0ZWQgZmlsZSwgcmVtb3ZlIHRoZSAuZ3BnIGV4dGVuc2lv bjoKICAgICAgICAgICAgICAgICAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcgIlxcLmdwZ1xc JyIgIiIgdmlzaXRlZC1maWxlKSkpCgkgICAgIDs7IENhbid0IGRldGVybWluZSBmaWxlIG5hbWUg b24gb3VyIG93bjogYXNrIHVzZXIuCgkgICAgIChyZWFkLWZpbGUtbmFtZQoJICAgICAgIk91dHB1 dCBmaWxlOiAiIHB1Yi1kaXIgbmlsIG5pbCBuaWwKCSAgICAgIChsYW1iZGEgKG4pIChzdHJpbmc9 IGV4dGVuc2lvbiAoZmlsZS1uYW1lLWV4dGVuc2lvbiBuIHQpKSkpKSkKCSAgIGV4dGVuc2lvbikp CgkgKG91dHB1dC1maWxlCgkgIDs7IEJ1aWxkIGZpbGUgbmFtZS4gIEVuZm9yY2UgRVhURU5TSU9O IG92ZXIgd2hhdGV2ZXIgdXNlcgoJICA7OyBtYXkgaGF2ZSBjb21lIHVwIHdpdGguICBQVUItRElS LCBpZiBkZWZpbmVkLCBhbHdheXMgaGFzCgkgIDs7IHByZWNlZGVuY2Ugb3ZlciBhbnkgcHJvdmlk ZWQgcGF0aC4KCSAgKGNvbmQKCSAgIChwdWItZGlyIChjb25jYXQgKGZpbGUtbmFtZS1hcy1kaXJl Y3RvcnkgcHViLWRpcikKCQkJICAgIChmaWxlLW5hbWUtbm9uZGlyZWN0b3J5IGJhc2UtbmFtZSkp KQoJICAgKChmaWxlLW5hbWUtYWJzb2x1dGUtcCBiYXNlLW5hbWUpIGJhc2UtbmFtZSkKCSAgICh0 IGJhc2UtbmFtZSkpKSkKICAgIDs7IElmIHdyaXRpbmcgdG8gT1VUUFVULUZJTEUgd291bGQgb3Zl cndyaXRlIG9yaWdpbmFsIGZpbGUsIGFwcGVuZAogICAgOzsgRVhURU5TSU9OIGFub3RoZXIgdGlt ZSB0byBmaW5hbCBuYW1lLgogICAgKGlmIChhbmQgdmlzaXRlZC1maWxlIChmaWxlLWVxdWFsLXAg dmlzaXRlZC1maWxlIG91dHB1dC1maWxlKSkKCShjb25jYXQgb3V0cHV0LWZpbGUgZXh0ZW5zaW9u KQogICAgICBvdXRwdXQtZmlsZSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtYWRkLXRvLXN0YWNrIChz b3VyY2UgYmFja2VuZCAmb3B0aW9uYWwgcHJvY2VzcykKICAiQWRkIGEgbmV3IHJlc3VsdCB0byBl eHBvcnQgc3RhY2sgaWYgbm90IHByZXNlbnQgYWxyZWFkeS4KClNPVVJDRSBpcyBhIGJ1ZmZlciBv ciBhIGZpbGUgbmFtZSBjb250YWluaW5nIGV4cG9ydCByZXN1bHRzLgpCQUNLRU5EIGlzIGEgc3lt Ym9sIHJlcHJlc2VudGluZyBleHBvcnQgYmFjay1lbmQgdXNlZCB0byBnZW5lcmF0ZQppdC4KCkVu dHJpZXMgYWxyZWFkeSBwb2ludGluZyB0byBTT1VSQ0UgYW5kIHVuYXZhaWxhYmxlIGVudHJpZXMg YXJlCnJlbW92ZWQgYmVmb3JlaGFuZC4gIFJldHVybiB0aGUgbmV3IHN0YWNrLiIKICAoc2V0cSBv cmctZXhwb3J0LXN0YWNrLWNvbnRlbnRzCgkoY29ucyAobGlzdCBzb3VyY2UgYmFja2VuZCAob3Ig cHJvY2VzcyAoY3VycmVudC10aW1lKSkpCgkgICAgICAob3JnLWV4cG9ydC1zdGFjay1yZW1vdmUg c291cmNlKSkpKQoKKGRlZnVuIG9yZy1leHBvcnQtc3RhY2sgKCkKICAiTWVudSBmb3IgYXN5bmNo cm9ub3VzIGV4cG9ydCByZXN1bHRzIGFuZCBydW5uaW5nIHByb2Nlc3Nlcy4iCiAgKGludGVyYWN0 aXZlKQogIChsZXQgKChidWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqT3JnIEV4cG9ydCBTdGFj ayoiKSkpCiAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKICAgICAgKG9yZy1leHBvcnQt c3RhY2stbW9kZSkKICAgICAgKHRhYnVsYXRlZC1saXN0LXByaW50IHQpKQogICAgKHBvcC10by1i dWZmZXIgYnVmZmVyKSkKICAobWVzc2FnZSAiVHlwZSBcInFcIiB0byBxdWl0LCBcIj9cIiBmb3Ig aGVscCIpKQoKKGRlZnVuIG9yZy1leHBvcnQtc3RhY2stY2xlYXIgKCkKICAiUmVtb3ZlIGFsbCBl bnRyaWVzIGZyb20gZXhwb3J0IHN0YWNrLiIKICAoaW50ZXJhY3RpdmUpCiAgKHNldHEgb3JnLWV4 cG9ydC1zdGFjay1jb250ZW50cyBuaWwpKQoKKGRlZnVuIG9yZy1leHBvcnQtc3RhY2stcmVmcmVz aCAoKQogICJSZWZyZXNoIHRoZSBleHBvcnQgc3RhY2suIgogIChpbnRlcmFjdGl2ZSkKICAodGFi dWxhdGVkLWxpc3QtcHJpbnQgdCkpCgooZGVmdW4gb3JnLWV4cG9ydC1zdGFjay1yZW1vdmUgKCZv cHRpb25hbCBzb3VyY2UpCiAgIlJlbW92ZSBleHBvcnQgcmVzdWx0cyBhdCBwb2ludCBmcm9tIHN0 YWNrLgpJZiBvcHRpb25hbCBhcmd1bWVudCBTT1VSQ0UgaXMgbm9uLW5pbCwgcmVtb3ZlIGl0IGlu c3RlYWQuIgogIChpbnRlcmFjdGl2ZSkKICAobGV0ICgoc291cmNlIChvciBzb3VyY2UgKG9yZy1l eHBvcnQtLXN0YWNrLXNvdXJjZS1hdC1wb2ludCkpKSkKICAgIChzZXRxIG9yZy1leHBvcnQtc3Rh Y2stY29udGVudHMKCSAgKGNsLXJlbW92ZS1pZiAobGFtYmRhIChlbCkgKGVxdWFsIChjYXIgZWwp IHNvdXJjZSkpCgkJCW9yZy1leHBvcnQtc3RhY2stY29udGVudHMpKSkpCgooZGVmdW4gb3JnLWV4 cG9ydC1zdGFjay12aWV3ICgmb3B0aW9uYWwgaW4tZW1hY3MpCiAgIlZpZXcgZXhwb3J0IHJlc3Vs dHMgYXQgcG9pbnQgaW4gc3RhY2suCldpdGggYW4gb3B0aW9uYWwgcHJlZml4IGFyZ3VtZW50IElO LUVNQUNTLCBmb3JjZSB2aWV3aW5nIGZpbGVzCndpdGhpbiBFbWFjcy4iCiAgKGludGVyYWN0aXZl ICJQIikKICAobGV0ICgoc291cmNlIChvcmctZXhwb3J0LS1zdGFjay1zb3VyY2UtYXQtcG9pbnQp KSkKICAgIChjb25kICgocHJvY2Vzc3Agc291cmNlKQoJICAgKG9yZy1zd2l0Y2gtdG8tYnVmZmVy LW90aGVyLXdpbmRvdyAocHJvY2Vzcy1idWZmZXIgc291cmNlKSkpCgkgICgoYnVmZmVycCBzb3Vy Y2UpIChvcmctc3dpdGNoLXRvLWJ1ZmZlci1vdGhlci13aW5kb3cgc291cmNlKSkKCSAgKHQgKG9y Zy1vcGVuLWZpbGUgc291cmNlIGluLWVtYWNzKSkpKSkKCihkZWZ2YXIgb3JnLWV4cG9ydC1zdGFj ay1tb2RlLW1hcAogIChsZXQgKChrbSAobWFrZS1zcGFyc2Uta2V5bWFwKSkpCiAgICAoc2V0LWtl eW1hcC1wYXJlbnQga20gdGFidWxhdGVkLWxpc3QtbW9kZS1tYXApCiAgICAoZGVmaW5lLWtleSBr bSAiICIgIyduZXh0LWxpbmUpCiAgICAoZGVmaW5lLWtleSBrbSAiXEMtbiIgIyduZXh0LWxpbmUp CiAgICAoZGVmaW5lLWtleSBrbSBbZG93bl0gIyduZXh0LWxpbmUpCiAgICAoZGVmaW5lLWtleSBr bSAiXEMtcCIgIydwcmV2aW91cy1saW5lKQogICAgKGRlZmluZS1rZXkga20gIlxDLT8iICMncHJl dmlvdXMtbGluZSkKICAgIChkZWZpbmUta2V5IGttIFt1cF0gIydwcmV2aW91cy1saW5lKQogICAg KGRlZmluZS1rZXkga20gIkMiICAjJ29yZy1leHBvcnQtc3RhY2stY2xlYXIpCiAgICAoZGVmaW5l LWtleSBrbSAidiIgICMnb3JnLWV4cG9ydC1zdGFjay12aWV3KQogICAgKGRlZmluZS1rZXkga20g KGtiZCAiUkVUIikgIydvcmctZXhwb3J0LXN0YWNrLXZpZXcpCiAgICAoZGVmaW5lLWtleSBrbSAi ZCIgIydvcmctZXhwb3J0LXN0YWNrLXJlbW92ZSkKICAgIGttKQogICJLZXltYXAgZm9yIE9yZyBF eHBvcnQgU3RhY2suIikKCihkZWZpbmUtZGVyaXZlZC1tb2RlIG9yZy1leHBvcnQtc3RhY2stbW9k ZSB0YWJ1bGF0ZWQtbGlzdC1tb2RlICJPcmctU3RhY2siCiAgIk1vZGUgZm9yIGRpc3BsYXlpbmcg YXN5bmNocm9ub3VzIGV4cG9ydCBzdGFjay4KClR5cGUgYFxcW29yZy1leHBvcnQtc3RhY2tdJyB0 byB2aXN1YWxpemUgdGhlIGFzeW5jaHJvbm91cyBleHBvcnQKc3RhY2suCgpJbiBhbiBPcmcgRXhw b3J0IFN0YWNrIGJ1ZmZlciwgdXNlIFwKXFw8b3JnLWV4cG9ydC1zdGFjay1tb2RlLW1hcD5gXFxb b3JnLWV4cG9ydC1zdGFjay12aWV3XScgdG8gdmlldyBleHBvcnQgb3V0cHV0Cm9uIGN1cnJlbnQg bGluZSwgYFxcW29yZy1leHBvcnQtc3RhY2stcmVtb3ZlXScgdG8gcmVtb3ZlIGl0IGZyb20gdGhl IHN0YWNrIGFuZCBcCmBcXFtvcmctZXhwb3J0LXN0YWNrLWNsZWFyXScgdG8gY2xlYXIKc3RhY2sg Y29tcGxldGVseS4KClJlbW92aW5nIGVudHJpZXMgaW4gYSBzdGFjayBidWZmZXIgZG9lcyBub3Qg YWZmZWN0IGZpbGVzCm9yIGJ1ZmZlcnMsIG9ubHkgZGlzcGxheS4KClxce29yZy1leHBvcnQtc3Rh Y2stbW9kZS1tYXB9IgogIChzZXRxIHRhYnVsYXRlZC1saXN0LWZvcm1hdAoJKHZlY3RvciAobGlz dCAiIyIgNCAjJ29yZy1leHBvcnQtLXN0YWNrLW51bS1wcmVkaWNhdGUpCgkJKGxpc3QgIkJhY2st RW5kIiAxMiB0KQoJCShsaXN0ICJBZ2UiIDYgbmlsKQoJCShsaXN0ICJTb3VyY2UiIDAgbmlsKSkp CiAgKHNldHEgdGFidWxhdGVkLWxpc3Qtc29ydC1rZXkgKGNvbnMgIiMiIG5pbCkpCiAgKHNldHEg dGFidWxhdGVkLWxpc3QtZW50cmllcyAjJ29yZy1leHBvcnQtLXN0YWNrLWdlbmVyYXRlKQogIChh ZGQtaG9vayAndGFidWxhdGVkLWxpc3QtcmV2ZXJ0LWhvb2sgIydvcmctZXhwb3J0LS1zdGFjay1n ZW5lcmF0ZSBuaWwgdCkKICAoYWRkLWhvb2sgJ3Bvc3QtY29tbWFuZC1ob29rICMnb3JnLWV4cG9y dC1zdGFjay1yZWZyZXNoIG5pbCB0KQogICh0YWJ1bGF0ZWQtbGlzdC1pbml0LWhlYWRlcikpCgoo ZGVmdW4gb3JnLWV4cG9ydC0tc3RhY2stZ2VuZXJhdGUgKCkKICAiR2VuZXJhdGUgdGhlIGFzeW5j aHJvbm91cyBleHBvcnQgc3RhY2sgZm9yIGRpc3BsYXkuClVuYXZhaWxhYmxlIHNvdXJjZXMgYXJl IHJlbW92ZWQgZnJvbSB0aGUgbGlzdC4gIFJldHVybiBhIGxpc3QKYXBwcm9wcmlhdGUgZm9yIGB0 YWJ1bGF0ZWQtbGlzdC1wcmludCcuIgogIDs7IENsZWFyIHN0YWNrIGZyb20gZXhpdGVkIHByb2Nl c3NlcywgZGVhZCBidWZmZXJzIG9yIG5vbi1leGlzdGVudAogIDs7IGZpbGVzLgogIChzZXRxIG9y Zy1leHBvcnQtc3RhY2stY29udGVudHMKCShjbC1yZW1vdmUtaWYtbm90CgkgKGxhbWJkYSAoZWwp CgkgICAoaWYgKHByb2Nlc3NwIChudGggMiBlbCkpCgkgICAgICAgKGJ1ZmZlci1saXZlLXAgKHBy b2Nlc3MtYnVmZmVyIChudGggMiBlbCkpKQoJICAgICAobGV0ICgoc291cmNlIChjYXIgZWwpKSkK CSAgICAgICAoaWYgKGJ1ZmZlcnAgc291cmNlKSAoYnVmZmVyLWxpdmUtcCBzb3VyY2UpCgkJIChm aWxlLWV4aXN0cy1wIHNvdXJjZSkpKSkpCgkgb3JnLWV4cG9ydC1zdGFjay1jb250ZW50cykpCiAg OzsgVXBkYXRlIGB0YWJ1bGF0ZWQtbGlzdC1lbnRyaWVzJy4KICAobGV0ICgoY291bnRlciAwKSkK ICAgIChtYXBjYXIKICAgICAobGFtYmRhIChlbnRyeSkKICAgICAgIChsZXQgKChzb3VyY2UgKGNh ciBlbnRyeSkpKQoJIChsaXN0IHNvdXJjZQoJICAgICAgICh2ZWN0b3IKCQk7OyBDb3VudGVyLgoJ CShudW1iZXItdG8tc3RyaW5nIChjbC1pbmNmIGNvdW50ZXIpKQoJCTs7IEJhY2stRW5kLgoJCShp ZiAobnRoIDEgZW50cnkpIChzeW1ib2wtbmFtZSAobnRoIDEgZW50cnkpKSAiIikKCQk7OyBBZ2Uu CgkJKGxldCAoKGluZm8gKG50aCAyIGVudHJ5KSkpCgkJICAoaWYgKHByb2Nlc3NwIGluZm8pIChz eW1ib2wtbmFtZSAocHJvY2Vzcy1zdGF0dXMgaW5mbykpCgkJICAgIChmb3JtYXQtc2Vjb25kcyAi JWg6JS4ybSIgKGZsb2F0LXRpbWUgKHRpbWUtc2luY2UgaW5mbykpKSkpCgkJOzsgU291cmNlLgoJ CShpZiAoc3RyaW5ncCBzb3VyY2UpIHNvdXJjZSAoYnVmZmVyLW5hbWUgc291cmNlKSkpKSkpCiAg ICAgb3JnLWV4cG9ydC1zdGFjay1jb250ZW50cykpKQoKKGRlZnVuIG9yZy1leHBvcnQtLXN0YWNr LW51bS1wcmVkaWNhdGUgKGEgYikKICAoPCAoc3RyaW5nLXRvLW51bWJlciAoYXJlZiAobnRoIDEg YSkgMCkpCiAgICAgKHN0cmluZy10by1udW1iZXIgKGFyZWYgKG50aCAxIGIpIDApKSkpCgooZGVm dW4gb3JnLWV4cG9ydC0tc3RhY2stc291cmNlLWF0LXBvaW50ICgpCiAgIlJldHVybiBzb3VyY2Ug ZnJvbSBleHBvcnQgcmVzdWx0cyBhdCBwb2ludCBpbiBzdGFjay4iCiAgKGxldCAoKHNvdXJjZSAo Y2FyIChudGggKDEtIChvcmctY3VycmVudC1saW5lKSkgb3JnLWV4cG9ydC1zdGFjay1jb250ZW50 cykpKSkKICAgIChpZiAobm90IHNvdXJjZSkgKGVycm9yICJTb3VyY2UgdW5hdmFpbGFibGUsIHBs ZWFzZSByZWZyZXNoIGJ1ZmZlciIpCiAgICAgIChsZXQgKChzb3VyY2UtbmFtZSAoaWYgKHN0cmlu Z3Agc291cmNlKSBzb3VyY2UgKGJ1ZmZlci1uYW1lIHNvdXJjZSkpKSkKCShpZiAoc2F2ZS1leGN1 cnNpb24KCSAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKCSAgICAgIChsb29raW5nLWF0LXAgKGNv bmNhdCAiLiogKyIgKHJlZ2V4cC1xdW90ZSBzb3VyY2UtbmFtZSkgIiQiKSkpCgkgICAgc291cmNl CgkgIDs7IFNPVVJDRSBpcyBub3QgY29uc2lzdGVudCB3aXRoIGN1cnJlbnQgbGluZS4gIFRoZSBz dGFjawoJICA7OyB2aWV3IGlzIG91dGRhdGVkLgoJICAoZXJyb3IgKHN1YnN0aXR1dGUtY29tbWFu ZC1rZXlzCgkJICAiU291cmNlIHVuYXZhaWxhYmxlOyB0eXBlIGBcXFtvcmctZXhwb3J0LXN0YWNr LXJlZnJlc2hdJyBcCnRvIHJlZnJlc2ggYnVmZmVyIikpKSkpKSkKCgoMCjs7OyBUaGUgRGlzcGF0 Y2hlcgo7Owo7OyBgb3JnLWV4cG9ydC1kaXNwYXRjaCcgaXMgdGhlIHN0YW5kYXJkIGludGVyYWN0 aXZlIHdheSB0byBzdGFydCBhbgo7OyBleHBvcnQgcHJvY2Vzcy4gIEl0IHVzZXMgYG9yZy1leHBv cnQtLWRpc3BhdGNoLXVpJyBhcyBhIHN1YnJvdXRpbmUKOzsgZm9yIGl0cyBpbnRlcmZhY2UsIHdo aWNoLCBpbiB0dXJuLCBkZWxlZ2F0ZXMgcmVzcG9uc2UgdG8ga2V5Cjs7IHByZXNzZWQgdG8gYG9y Zy1leHBvcnQtLWRpc3BhdGNoLWFjdGlvbicuCgo7OzsjIyNhdXRvbG9hZAooZGVmdW4gb3JnLWV4 cG9ydC1kaXNwYXRjaCAoJm9wdGlvbmFsIGFyZykKICAiRXhwb3J0IGRpc3BhdGNoZXIgZm9yIE9y ZyBtb2RlLgoKSXQgcHJvdmlkZXMgYW4gYWNjZXNzIHRvIGNvbW1vbiBleHBvcnQgcmVsYXRlZCB0 YXNrcyBpbiBhIGJ1ZmZlci4KSXRzIGludGVyZmFjZSBjb21lcyBpbiB0d28gZmxhdm9yczogc3Rh bmRhcmQgYW5kIGV4cGVydC4KCldoaWxlIGJvdGggc2hhcmUgdGhlIHNhbWUgc2V0IG9mIGJpbmRp bmdzLCBvbmx5IHRoZSBmb3JtZXIKZGlzcGxheXMgdGhlIHZhbGlkIGtleXMgYXNzb2NpYXRpb25z IGluIGEgZGVkaWNhdGVkIGJ1ZmZlci4KU2Nyb2xsaW5nIChyZXNwLiBsaW5lLXdpc2UgbW90aW9u KSBpbiB0aGlzIGJ1ZmZlciBpcyBkb25lIHdpdGgKU1BDIGFuZCBERUwgKHJlc3AuIEMtbiBhbmQg Qy1wKSBrZXlzLgoKU2V0IHZhcmlhYmxlIGBvcmctZXhwb3J0LWRpc3BhdGNoLXVzZS1leHBlcnQt dWknIHRvIHN3aXRjaCB0byBvbmUKZmxhdm9yIG9yIHRoZSBvdGhlci4KCldoZW4gQVJHIGlzIGBc XFt1bml2ZXJzYWwtYXJndW1lbnRdJywgcmVwZWF0IHRoZSBsYXN0IGV4cG9ydCBhY3Rpb24sIHdp dGggdGhlXAogc2FtZQpzZXQgb2Ygb3B0aW9ucyB1c2VkIGJhY2sgdGhlbiwgb24gdGhlIGN1cnJl bnQgYnVmZmVyLgoKV2hlbiBBUkcgaXMgYFxcW3VuaXZlcnNhbC1hcmd1bWVudF0gXFxbdW5pdmVy c2FsLWFyZ3VtZW50XScsIGRpc3BsYXkgdGhlIFwKYXN5bmNocm9ub3VzIGV4cG9ydCBzdGFjay4i CiAgKGludGVyYWN0aXZlICJQIikKICAobGV0KiAoKGlucHV0CgkgIChjb25kICgoZXF1YWwgYXJn ICcoMTYpKSAnKHN0YWNrKSkKCQkoKGFuZCBhcmcgb3JnLWV4cG9ydC1kaXNwYXRjaC1sYXN0LWFj dGlvbikpCgkJKHQgKHNhdmUtd2luZG93LWV4Y3Vyc2lvbgoJCSAgICAgKHVud2luZC1wcm90ZWN0 CgkJCSAocHJvZ24KCQkJICAgOzsgUmVtZW1iZXIgd2hlcmUgd2UgYXJlCgkJCSAgIChtb3ZlLW1h cmtlciBvcmctZXhwb3J0LWRpc3BhdGNoLWxhc3QtcG9zaXRpb24KCQkJCQkocG9pbnQpCgkJCQkJ KG9yZy1iYXNlLWJ1ZmZlciAoY3VycmVudC1idWZmZXIpKSkKCQkJICAgOzsgR2V0IGFuZCBzdG9y ZSBhbiBleHBvcnQgY29tbWFuZAoJCQkgICAoc2V0cSBvcmctZXhwb3J0LWRpc3BhdGNoLWxhc3Qt YWN0aW9uCgkJCQkgKG9yZy1leHBvcnQtLWRpc3BhdGNoLXVpCgkJCQkgIChsaXN0IG9yZy1leHBv cnQtaW5pdGlhbC1zY29wZQoJCQkJCShhbmQgb3JnLWV4cG9ydC1pbi1iYWNrZ3JvdW5kICdhc3lu YykpCgkJCQkgIG5pbAoJCQkJICBvcmctZXhwb3J0LWRpc3BhdGNoLXVzZS1leHBlcnQtdWkpKSkK CQkgICAgICAgKGFuZCAoZ2V0LWJ1ZmZlciAiKk9yZyBFeHBvcnQgRGlzcGF0Y2hlcioiKQoJCQkg ICAgKGtpbGwtYnVmZmVyICIqT3JnIEV4cG9ydCBEaXNwYXRjaGVyKiIpKSkpKSkpCgkgKGFjdGlv biAoY2FyIGlucHV0KSkKCSAob3B0bnMgKGNkciBpbnB1dCkpKQogICAgKHVubGVzcyAobWVtcSAn c3VidHJlZSBvcHRucykKICAgICAgKG1vdmUtbWFya2VyIG9yZy1leHBvcnQtZGlzcGF0Y2gtbGFz dC1wb3NpdGlvbiBuaWwpKQogICAgKGNsLWNhc2UgYWN0aW9uCiAgICAgIDs7IEZpcnN0IGhhbmRs ZSBzcGVjaWFsIGhhcmQtY29kZWQgYWN0aW9ucy4KICAgICAgKHRlbXBsYXRlIChvcmctZXhwb3J0 LWluc2VydC1kZWZhdWx0LXRlbXBsYXRlIG5pbCBvcHRucykpCiAgICAgIChzdGFjayAob3JnLWV4 cG9ydC1zdGFjaykpCiAgICAgIChwdWJsaXNoLWN1cnJlbnQtZmlsZQogICAgICAgKG9yZy1wdWJs aXNoLWN1cnJlbnQtZmlsZSAobWVtcSAnZm9yY2Ugb3B0bnMpIChtZW1xICdhc3luYyBvcHRucykp KQogICAgICAocHVibGlzaC1jdXJyZW50LXByb2plY3QKICAgICAgIChvcmctcHVibGlzaC1jdXJy ZW50LXByb2plY3QgKG1lbXEgJ2ZvcmNlIG9wdG5zKSAobWVtcSAnYXN5bmMgb3B0bnMpKSkKICAg ICAgKHB1Ymxpc2gtY2hvb3NlLXByb2plY3QKICAgICAgIChvcmctcHVibGlzaCAoYXNzb2MgKGNv bXBsZXRpbmctcmVhZAoJCQkgICAgIlB1Ymxpc2ggcHJvamVjdDogIgoJCQkgICAgb3JnLXB1Ymxp c2gtcHJvamVjdC1hbGlzdCBuaWwgdCkKCQkJICAgb3JnLXB1Ymxpc2gtcHJvamVjdC1hbGlzdCkK CQkgICAgKG1lbXEgJ2ZvcmNlIG9wdG5zKQoJCSAgICAobWVtcSAnYXN5bmMgb3B0bnMpKSkKICAg ICAgKHB1Ymxpc2gtYWxsIChvcmctcHVibGlzaC1hbGwgKG1lbXEgJ2ZvcmNlIG9wdG5zKSAobWVt cSAnYXN5bmMgb3B0bnMpKSkKICAgICAgKG90aGVyd2lzZQogICAgICAgKHNhdmUtZXhjdXJzaW9u CgkgKHdoZW4gYXJnCgkgICA7OyBSZXBlYXRpbmcgY29tbWFuZCwgbWF5YmUgbW92ZSBjdXJzb3Ig dG8gcmVzdG9yZSBzdWJ0cmVlCgkgICA7OyBjb250ZXh0LgoJICAgKGlmIChlcSAobWFya2VyLWJ1 ZmZlciBvcmctZXhwb3J0LWRpc3BhdGNoLWxhc3QtcG9zaXRpb24pCgkJICAgKG9yZy1iYXNlLWJ1 ZmZlciAoY3VycmVudC1idWZmZXIpKSkKCSAgICAgICAoZ290by1jaGFyIG9yZy1leHBvcnQtZGlz cGF0Y2gtbGFzdC1wb3NpdGlvbikKCSAgICAgOzsgV2UgYXJlIGluIGEgZGlmZmVyZW50IGJ1ZmZl ciwgZm9yZ2V0IHBvc2l0aW9uLgoJICAgICAobW92ZS1tYXJrZXIgb3JnLWV4cG9ydC1kaXNwYXRj aC1sYXN0LXBvc2l0aW9uIG5pbCkpKQoJIChmdW5jYWxsIGFjdGlvbgoJCSAgOzsgUmV0dXJuIGEg c3ltYm9sIGluc3RlYWQgb2YgYSBsaXN0IHRvIGVhc2UKCQkgIDs7IGFzeW5jaHJvbm91cyBleHBv cnQgbWFjcm8gdXNlLgoJCSAgKGFuZCAobWVtcSAnYXN5bmMgb3B0bnMpIHQpCgkJICAoYW5kICht ZW1xICdzdWJ0cmVlIG9wdG5zKSB0KQoJCSAgKGFuZCAobWVtcSAndmlzaWJsZSBvcHRucykgdCkK CQkgIChhbmQgKG1lbXEgJ2JvZHkgb3B0bnMpIHQpKSkpKSkpCgooZGVmdW4gb3JnLWV4cG9ydC0t ZGlzcGF0Y2gtdWkgKG9wdGlvbnMgZmlyc3Qta2V5IGV4cGVydHApCiAgIkhhbmRsZSBpbnRlcmZh Y2UgZm9yIGBvcmctZXhwb3J0LWRpc3BhdGNoJy4KCk9QVElPTlMgaXMgYSBsaXN0IGNvbnRhaW5p bmcgY3VycmVudCBpbnRlcmFjdGl2ZSBvcHRpb25zIHNldCBmb3IKZXhwb3J0LiAgSXQgY2FuIGNv bnRhaW4gYW55IG9mIHRoZSBmb2xsb3dpbmcgc3ltYm9sczoKYGJvZHknICAgIHRvZ2dsZXMgYSBi b2R5LW9ubHkgZXhwb3J0CmBzdWJ0cmVlJyByZXN0cmljdHMgZXhwb3J0IHRvIGN1cnJlbnQgc3Vi dHJlZQpgdmlzaWJsZScgcmVzdHJpY3RzIGV4cG9ydCB0byB2aXNpYmxlIHBhcnQgb2YgYnVmZmVy LgpgZm9yY2UnICAgZm9yY2UgcHVibGlzaGluZyBmaWxlcy4KYGFzeW5jJyAgIHVzZSBhc3luY2hy b25vdXMgZXhwb3J0IHByb2Nlc3MKCkZJUlNULUtFWSBpcyB0aGUga2V5IHByZXNzZWQgdG8gc2Vs ZWN0IHRoZSBmaXJzdCBsZXZlbCBtZW51LiAgSXQKaXMgbmlsIHdoZW4gdGhpcyBtZW51IGhhc24n dCBiZWVuIHNlbGVjdGVkIHlldC4KCkVYUEVSVFAsIHdoZW4gbm9uLW5pbCwgdHJpZ2dlcnMgZXhw ZXJ0IFVJLiAgSW4gdGhhdCBjYXNlLCBubyBoZWxwCmJ1ZmZlciBpcyBwcm92aWRlZCwgYnV0IGlu ZGljYXRpb25zIGFib3V0IGN1cnJlbnRseSBhY3RpdmUKb3B0aW9ucyBhcmUgZ2l2ZW4gaW4gdGhl IHByb21wdC4gIE1vcmVvdmVyLCBbP10gYWxsb3dzIHN3aXRjaGluZwpiYWNrIHRvIHN0YW5kYXJk IGludGVyZmFjZS4iCiAgKGxldCogKChmb250aWZ5LWtleQoJICAobGFtYmRhIChrZXkgJm9wdGlv bmFsIGFjY2Vzcy1rZXkpCgkgICAgOzsgRm9udGlmeSBLRVkgc3RyaW5nLiAgT3B0aW9uYWwgYXJn dW1lbnQgQUNDRVNTLUtFWSwgd2hlbgoJICAgIDs7IG5vbi1uaWwgaXMgdGhlIHJlcXVpcmVkIGZp cnN0LWxldmVsIGtleSB0byBhY3RpdmF0ZQoJICAgIDs7IEtFWS4gIFdoZW4gaXRzIHZhbHVlIGlz IHQsIGFjdGl2YXRlIEtFWSBpbmRlcGVuZGVudGx5CgkgICAgOzsgb24gdGhlIGZpcnN0IGtleSwg aWYgYW55LiAgQSBuaWwgdmFsdWUgbWVhbnMgS0VZIHdpbGwKCSAgICA7OyBvbmx5IGJlIGFjdGl2 YXRlZCBhdCBmaXJzdCBsZXZlbC4KCSAgICAoaWYgKG9yIChlcSBhY2Nlc3Mta2V5IHQpIChlcSBh Y2Nlc3Mta2V5IGZpcnN0LWtleSkpCgkJKHByb3BlcnRpemUga2V5ICdmYWNlICdvcmctZGlzcGF0 Y2hlci1oaWdobGlnaHQpCgkgICAgICBrZXkpKSkKCSAoZm9udGlmeS12YWx1ZQoJICAobGFtYmRh ICh2YWx1ZSkKCSAgICA7OyBGb250aWZ5IFZBTFVFIHN0cmluZy4KCSAgICAocHJvcGVydGl6ZSB2 YWx1ZSAnZmFjZSAnZm9udC1sb2NrLXZhcmlhYmxlLW5hbWUtZmFjZSkpKQoJIDs7IFByZXBhcmUg bWVudSBlbnRyaWVzIGJ5IGV4dHJhY3RpbmcgdGhlbSBmcm9tIHJlZ2lzdGVyZWQKCSA7OyBiYWNr LWVuZHMgYW5kIHNvcnRpbmcgdGhlbSBieSBhY2Nlc3Mga2V5IGFuZCBieSBvcmRpbmFsLAoJIDs7 IGlmIGFueS4KCSAoZW50cmllcwoJICAoc29ydCAoc29ydCAoZGVscSBuaWwKCQkJICAgIChtYXBj YXIgIydvcmctZXhwb3J0LWJhY2tlbmQtbWVudQoJCQkJICAgIG9yZy1leHBvcnQtcmVnaXN0ZXJl ZC1iYWNrZW5kcykpCgkJICAgICAgKGxhbWJkYSAoYSBiKQoJCQkobGV0ICgoa2V5LWEgKG50aCAx IGEpKQoJCQkgICAgICAoa2V5LWIgKG50aCAxIGIpKSkKCQkJICAoY29uZCAoKGFuZCAobnVtYmVy cCBrZXktYSkgKG51bWJlcnAga2V5LWIpKQoJCQkJICg8IGtleS1hIGtleS1iKSkKCQkJCSgobnVt YmVycCBrZXktYikgdCkpKSkpCgkJIydjYXItbGVzcy10aGFuLWNhcikpCgkgOzsgQ29tcHV0ZSBh IGxpc3Qgb2YgYWxsb3dlZCBrZXlzIGJhc2VkIG9uIHRoZSBmaXJzdCBrZXkKCSA7OyBwcmVzc2Vk LCBpZiBhbnkuICBTb21lIGtleXMKCSA7OyAoP15CLCA/XlYsID9eUywgP15GLCA/XkEsID8mLCA/ IyBhbmQgP3EpIGFyZSBhbHdheXMKCSA7OyBhdmFpbGFibGUuCgkgKGFsbG93ZWQta2V5cwoJICAo bmNvbmMgKGxpc3QgMiAyMiAxOSA2IDEpCgkJIChpZiAobm90IGZpcnN0LWtleSkgKG9yZy11bmlx dWlmeSAobWFwY2FyICMnY2FyIGVudHJpZXMpKQoJCSAgIChsZXQgKHN1Yi1tZW51KQoJCSAgICAg KGRvbGlzdCAoZW50cnkgZW50cmllcyAoc29ydCAobWFwY2FyICMnY2FyIHN1Yi1tZW51KSAjJzwp KQoJCSAgICAgICAod2hlbiAoZXEgKGNhciBlbnRyeSkgZmlyc3Qta2V5KQoJCQkgKHNldHEgc3Vi LW1lbnUgKGFwcGVuZCAobnRoIDIgZW50cnkpIHN1Yi1tZW51KSkpKSkpCgkJIChjb25kICgoZXEg Zmlyc3Qta2V5ID9QKSAobGlzdCA/ZiA/cCA/eCA/YSkpCgkJICAgICAgICgobm90IGZpcnN0LWtl eSkgKGxpc3QgP1ApKSkKCQkgKGxpc3QgPyYgPyMpCgkJICh3aGVuIGV4cGVydHAgKGxpc3QgPz8p KQoJCSAobGlzdCA/cSkpKQoJIDs7IEJ1aWxkIHRoZSBoZWxwIG1lbnUgZm9yIHN0YW5kYXJkIFVJ LgoJIChoZWxwCgkgICh1bmxlc3MgZXhwZXJ0cAoJICAgIChjb25jYXQKCSAgICAgOzsgT3B0aW9u cyBhcmUgaGFyZC1jb2RlZC4KCSAgICAgKGZvcm1hdCAiWyVzXSBCb2R5IG9ubHk6ICAgICVzICAg ICAgICAgICBbJXNdIFZpc2libGUgb25seTogICAgICVzClxbJXNdIEV4cG9ydCBzY29wZTogJXMg ICAgICAgWyVzXSBGb3JjZSBwdWJsaXNoaW5nOiAlcwpcWyVzXSBBc3luYyBleHBvcnQ6ICVzXG5c biIKCQkgICAgIChmdW5jYWxsIGZvbnRpZnkta2V5ICJDLWIiIHQpCgkJICAgICAoZnVuY2FsbCBm b250aWZ5LXZhbHVlCgkJCSAgICAgIChpZiAobWVtcSAnYm9keSBvcHRpb25zKSAiT24gIiAiT2Zm IikpCgkJICAgICAoZnVuY2FsbCBmb250aWZ5LWtleSAiQy12IiB0KQoJCSAgICAgKGZ1bmNhbGwg Zm9udGlmeS12YWx1ZQoJCQkgICAgICAoaWYgKG1lbXEgJ3Zpc2libGUgb3B0aW9ucykgIk9uICIg Ik9mZiIpKQoJCSAgICAgKGZ1bmNhbGwgZm9udGlmeS1rZXkgIkMtcyIgdCkKCQkgICAgIChmdW5j YWxsIGZvbnRpZnktdmFsdWUKCQkJICAgICAgKGlmIChtZW1xICdzdWJ0cmVlIG9wdGlvbnMpICJT dWJ0cmVlIiAiQnVmZmVyICIpKQoJCSAgICAgKGZ1bmNhbGwgZm9udGlmeS1rZXkgIkMtZiIgdCkK CQkgICAgIChmdW5jYWxsIGZvbnRpZnktdmFsdWUKCQkJICAgICAgKGlmIChtZW1xICdmb3JjZSBv cHRpb25zKSAiT24gIiAiT2ZmIikpCgkJICAgICAoZnVuY2FsbCBmb250aWZ5LWtleSAiQy1hIiB0 KQoJCSAgICAgKGZ1bmNhbGwgZm9udGlmeS12YWx1ZQoJCQkgICAgICAoaWYgKG1lbXEgJ2FzeW5j IG9wdGlvbnMpICJPbiAiICJPZmYiKSkpCgkgICAgIDs7IERpc3BsYXkgcmVnaXN0ZXJlZCBiYWNr LWVuZCBlbnRyaWVzLiAgV2hlbiBhIGtleQoJICAgICA7OyBhcHBlYXJzIGZvciB0aGUgc2Vjb25k IHRpbWUsIGRvIG5vdCBjcmVhdGUgYW5vdGhlcgoJICAgICA7OyBlbnRyeSwgYnV0IGFwcGVuZCBp dHMgc3ViLW1lbnUgdG8gZXhpc3RpbmcgbWVudS4KCSAgICAgKGxldCAobGFzdC1rZXkpCgkgICAg ICAgKG1hcGNvbmNhdAoJCShsYW1iZGEgKGVudHJ5KQoJCSAgKGxldCAoKHRvcC1rZXkgKGNhciBl bnRyeSkpKQoJCSAgICAoY29uY2F0CgkJICAgICAodW5sZXNzIChlcSB0b3Ata2V5IGxhc3Qta2V5 KQoJCSAgICAgICAoc2V0cSBsYXN0LWtleSB0b3Ata2V5KQoJCSAgICAgICAoZm9ybWF0ICJcblsl c10gJXNcbiIKCQkJICAgICAgIChmdW5jYWxsIGZvbnRpZnkta2V5IChjaGFyLXRvLXN0cmluZyB0 b3Ata2V5KSkKCQkJICAgICAgIChudGggMSBlbnRyeSkpKQoJCSAgICAgKGxldCAoKHN1Yi1tZW51 IChudGggMiBlbnRyeSkpKQoJCSAgICAgICAodW5sZXNzIChmdW5jdGlvbnAgc3ViLW1lbnUpCgkJ CSA7OyBTcGxpdCBzdWItbWVudSBpbnRvIHR3byBjb2x1bW5zLgoJCQkgKGxldCAoKGluZGV4IC0x KSkKCQkJICAgKGNvbmNhdAoJCQkgICAgKG1hcGNvbmNhdAoJCQkgICAgIChsYW1iZGEgKHN1Yi1l bnRyeSkKCQkJICAgICAgIChjbC1pbmNmIGluZGV4KQoJCQkgICAgICAgKGZvcm1hdAoJCQkJKGlm ICh6ZXJvcCAobW9kIGluZGV4IDIpKSAiICAgIFslc10gJS0yNnMiCgkJCQkgICJbJXNdICVzXG4i KQoJCQkJKGZ1bmNhbGwgZm9udGlmeS1rZXkKCQkJCQkgKGNoYXItdG8tc3RyaW5nIChjYXIgc3Vi LWVudHJ5KSkKCQkJCQkgdG9wLWtleSkKCQkJCShudGggMSBzdWItZW50cnkpKSkKCQkJICAgICBz dWItbWVudSAiIikKCQkJICAgICh3aGVuICh6ZXJvcCAobW9kIGluZGV4IDIpKSAiXG4iKSkpKSkp KSkKCQllbnRyaWVzICIiKSkKCSAgICAgOzsgUHVibGlzaGluZyBtZW51IGlzIGhhcmQtY29kZWQu CgkgICAgIChmb3JtYXQgIlxuWyVzXSBQdWJsaXNoCiAgICBbJXNdIEN1cnJlbnQgZmlsZSAgICAg ICAgICAgICAgWyVzXSBDdXJyZW50IHByb2plY3QKICAgIFslc10gQ2hvb3NlIHByb2plY3QgICAg ICAgICAgICBbJXNdIEFsbCBwcm9qZWN0c1xuXG5cbiIKCQkgICAgIChmdW5jYWxsIGZvbnRpZnkt a2V5ICJQIikKCQkgICAgIChmdW5jYWxsIGZvbnRpZnkta2V5ICJmIiA/UCkKCQkgICAgIChmdW5j YWxsIGZvbnRpZnkta2V5ICJwIiA/UCkKCQkgICAgIChmdW5jYWxsIGZvbnRpZnkta2V5ICJ4IiA/ UCkKCQkgICAgIChmdW5jYWxsIGZvbnRpZnkta2V5ICJhIiA/UCkpCgkgICAgIChmb3JtYXQgIlsl c10gRXhwb3J0IHN0YWNrICAgICAgICAgICAgICAgICAgWyVzXSBJbnNlcnQgdGVtcGxhdGVcbiIK CQkgICAgIChmdW5jYWxsIGZvbnRpZnkta2V5ICImIiB0KQoJCSAgICAgKGZ1bmNhbGwgZm9udGlm eS1rZXkgIiMiIHQpKQoJICAgICAoZm9ybWF0ICJbJXNdICVzIgoJCSAgICAgKGZ1bmNhbGwgZm9u dGlmeS1rZXkgInEiIHQpCgkJICAgICAoaWYgZmlyc3Qta2V5ICJNYWluIG1lbnUiICJFeGl0Iikp KSkpCgkgOzsgQnVpbGQgcHJvbXB0cyBmb3IgYm90aCBzdGFuZGFyZCBhbmQgZXhwZXJ0IFVJLgoJ IChzdGFuZGFyZC1wcm9tcHQgKHVubGVzcyBleHBlcnRwICJFeHBvcnQgY29tbWFuZDogIikpCgkg KGV4cGVydC1wcm9tcHQKCSAgKHdoZW4gZXhwZXJ0cAoJICAgIChmb3JtYXQKCSAgICAgIkV4cG9y dCBjb21tYW5kIChDLSVzJXMlcyVzJXMpIFslc106ICIKCSAgICAgKGlmIChtZW1xICdib2R5IG9w dGlvbnMpIChmdW5jYWxsIGZvbnRpZnkta2V5ICJiIiB0KSAiYiIpCgkgICAgIChpZiAobWVtcSAn dmlzaWJsZSBvcHRpb25zKSAoZnVuY2FsbCBmb250aWZ5LWtleSAidiIgdCkgInYiKQoJICAgICAo aWYgKG1lbXEgJ3N1YnRyZWUgb3B0aW9ucykgKGZ1bmNhbGwgZm9udGlmeS1rZXkgInMiIHQpICJz IikKCSAgICAgKGlmIChtZW1xICdmb3JjZSBvcHRpb25zKSAoZnVuY2FsbCBmb250aWZ5LWtleSAi ZiIgdCkgImYiKQoJICAgICAoaWYgKG1lbXEgJ2FzeW5jIG9wdGlvbnMpIChmdW5jYWxsIGZvbnRp Znkta2V5ICJhIiB0KSAiYSIpCgkgICAgIChtYXBjb25jYXQgKGxhbWJkYSAoaykKCQkJICA7OyBT dHJpcCBjb250cm9sIGNoYXJhY3RlcnMuCgkJCSAgKHVubGVzcyAoPCBrIDI3KSAoY2hhci10by1z dHJpbmcgaykpKQoJCQlhbGxvd2VkLWtleXMgIiIpKSkpKQogICAgOzsgV2l0aCBleHBlcnQgVUks IGp1c3QgcmVhZCBrZXkgd2l0aCBhIGZhbmN5IHByb21wdC4gIEluIHN0YW5kYXJkCiAgICA7OyBV SSwgZGlzcGxheSBhbiBpbnRydXNpdmUgaGVscCBidWZmZXIuCiAgICAoaWYgZXhwZXJ0cAoJKG9y Zy1leHBvcnQtLWRpc3BhdGNoLWFjdGlvbgoJIGV4cGVydC1wcm9tcHQgYWxsb3dlZC1rZXlzIGVu dHJpZXMgb3B0aW9ucyBmaXJzdC1rZXkgZXhwZXJ0cCkKICAgICAgOzsgQXQgZmlyc3QgY2FsbCwg Y3JlYXRlIGZyYW1lIGxheW91dCBpbiBvcmRlciB0byBkaXNwbGF5IG1lbnUuCiAgICAgICh1bmxl c3MgKGdldC1idWZmZXIgIipPcmcgRXhwb3J0IERpc3BhdGNoZXIqIikKCShkZWxldGUtb3RoZXIt d2luZG93cykKCShvcmctc3dpdGNoLXRvLWJ1ZmZlci1vdGhlci13aW5kb3cKCSAoZ2V0LWJ1ZmZl ci1jcmVhdGUgIipPcmcgRXhwb3J0IERpc3BhdGNoZXIqIikpCgkoc2V0cSBjdXJzb3ItdHlwZSBu aWwKCSAgICAgIGhlYWRlci1saW5lLWZvcm1hdCAiVXNlIFNQQywgREVMLCBDLW4gb3IgQy1wIHRv IG5hdmlnYXRlLiIpCgk7OyBNYWtlIHN1cmUgdGhhdCBpbnZpc2libGUgY3Vyc29yIHdpbGwgbm90 IGhpZ2hsaWdodCBzcXVhcmUKCTs7IGJyYWNrZXRzLgoJKHNldC1zeW50YXgtdGFibGUgKGNvcHkt c3ludGF4LXRhYmxlKSkKCShtb2RpZnktc3ludGF4LWVudHJ5ID9cWyAidyIpKQogICAgICA7OyBB dCB0aGlzIHBvaW50LCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIG1lbnUgZXhpc3RzIGFuZCBp cwogICAgICA7OyB2aXNpYmxlIGluIHRoZSBjdXJyZW50IHdpbmRvdy4gIFNvLCByZWZyZXNoIGl0 LgogICAgICAod2l0aC1jdXJyZW50LWJ1ZmZlciAiKk9yZyBFeHBvcnQgRGlzcGF0Y2hlcioiCgk7 OyBSZWZyZXNoIGhlbHAuICBNYWludGFpbiBkaXNwbGF5IGNvbnRpbnVpdHkgYnkgcmUtdmlzaXRp bmcKCTs7IHByZXZpb3VzIHdpbmRvdyBwb3NpdGlvbi4KCShsZXQgKChwdCAocG9pbnQpKQoJICAg ICAgKHdzdGFydCAod2luZG93LXN0YXJ0KSkpCgkgIChlcmFzZS1idWZmZXIpCgkgIChpbnNlcnQg aGVscCkKCSAgKGdvdG8tY2hhciBwdCkKCSAgKHNldC13aW5kb3ctc3RhcnQgbmlsIHdzdGFydCkp KQogICAgICAob3JnLWZpdC13aW5kb3ctdG8tYnVmZmVyKQogICAgICAob3JnLWV4cG9ydC0tZGlz cGF0Y2gtYWN0aW9uCiAgICAgICBzdGFuZGFyZC1wcm9tcHQgYWxsb3dlZC1rZXlzIGVudHJpZXMg b3B0aW9ucyBmaXJzdC1rZXkgZXhwZXJ0cCkpKSkKCihkZWZ1biBvcmctZXhwb3J0LS1kaXNwYXRj aC1hY3Rpb24KICAgIChwcm9tcHQgYWxsb3dlZC1rZXlzIGVudHJpZXMgb3B0aW9ucyBmaXJzdC1r ZXkgZXhwZXJ0cCkKICAiUmVhZCBhIGNoYXJhY3RlciBmcm9tIGNvbW1hbmQgaW5wdXQgYW5kIGFj dCBhY2NvcmRpbmdseS4KClBST01QVCBpcyB0aGUgZGlzcGxheWVkIHByb21wdCwgYXMgYSBzdHJp bmcuICBBTExPV0VELUtFWVMgaXMKYSBsaXN0IG9mIGNoYXJhY3RlcnMgYXZhaWxhYmxlIGF0IGEg Z2l2ZW4gc3RlcCBpbiB0aGUgcHJvY2Vzcy4KRU5UUklFUyBpcyBhIGxpc3Qgb2YgbWVudSBlbnRy aWVzLiAgT1BUSU9OUywgRklSU1QtS0VZIGFuZApFWFBFUlRQIGFyZSB0aGUgc2FtZSBhcyBkZWZp bmVkIGluIGBvcmctZXhwb3J0LS1kaXNwYXRjaC11aScsCndoaWNoIHNlZS4KClRvZ2dsZSBleHBv cnQgb3B0aW9ucyB3aGVuIHJlcXVpcmVkLiAgT3RoZXJ3aXNlLCByZXR1cm4gdmFsdWUgaXMKYSBs aXN0IHdpdGggYWN0aW9uIGFzIENBUiBhbmQgYSBsaXN0IG9mIGludGVyYWN0aXZlIGV4cG9ydApv cHRpb25zIGFzIENEUi4iCiAgKGxldCAoa2V5KQogICAgOzsgU2Nyb2xsaW5nOiB3aGVuIGluIG5v bi1leHBlcnQgbW9kZSwgYWN0IG9uIG1vdGlvbiBrZXlzIChDLW4sCiAgICA7OyBDLXAsIFNQQywg REVMKS4KICAgICh3aGlsZSAoYW5kIChzZXRxIGtleSAocmVhZC1jaGFyLWV4Y2x1c2l2ZSBwcm9t cHQpKQoJCShub3QgZXhwZXJ0cCkKCQk7OyBGSVhNRTogRG9uJ3QgdXNlIEMtdiAoMjIpIGhlcmUs IGFzIGl0IGlzIHVzZWQgYXMgYQoJCTs7IG1vZGlmaWVyIGtleSBpbiB0aGUgZXhwb3J0IGRpc3Bh dGNoLgoJCShtZW1xIGtleSAnKDE0IDE2ID9ccyA/XGQgMTM0MjE3ODQ2KSkpCiAgICAgIChvcmct c2Nyb2xsIGtleSB0KSkKICAgIChjb25kCiAgICAgOzsgSWdub3JlIHVuZGVmaW5lZCBhc3NvY2lh dGlvbnMuCiAgICAgKChub3QgKG1lbXEga2V5IGFsbG93ZWQta2V5cykpCiAgICAgIChkaW5nKQog ICAgICAodW5sZXNzIGV4cGVydHAgKG1lc3NhZ2UgIkludmFsaWQga2V5IikgKHNpdC1mb3IgMSkp CiAgICAgIChvcmctZXhwb3J0LS1kaXNwYXRjaC11aSBvcHRpb25zIGZpcnN0LWtleSBleHBlcnRw KSkKICAgICA7OyBxIGtleSBhdCBmaXJzdCBsZXZlbCBhYm9ydHMgZXhwb3J0LiAgQXQgc2Vjb25k IGxldmVsLCBjYW5jZWwKICAgICA7OyBmaXJzdCBrZXkgaW5zdGVhZC4KICAgICAoKGVxIGtleSA/ cSkgKGlmIChub3QgZmlyc3Qta2V5KSAodXNlci1lcnJvciAiRXhwb3J0IGFib3J0ZWQiKQoJCSAg ICAob3JnLWV4cG9ydC0tZGlzcGF0Y2gtdWkgb3B0aW9ucyBuaWwgZXhwZXJ0cCkpKQogICAgIDs7 IEhlbHAga2V5OiBTd2l0Y2ggYmFjayB0byBzdGFuZGFyZCBpbnRlcmZhY2UgaWYgZXhwZXJ0IFVJ IHdhcwogICAgIDs7IGFjdGl2ZS4KICAgICAoKGVxIGtleSA/PykgKG9yZy1leHBvcnQtLWRpc3Bh dGNoLXVpIG9wdGlvbnMgZmlyc3Qta2V5IG5pbCkpCiAgICAgOzsgU2VuZCByZXF1ZXN0IGZvciB0 ZW1wbGF0ZSBpbnNlcnRpb24gYWxvbmcgd2l0aCBleHBvcnQgc2NvcGUuCiAgICAgKChlcSBrZXkg PyMpIChjb25zICd0ZW1wbGF0ZSAobWVtcSAnc3VidHJlZSBvcHRpb25zKSkpCiAgICAgOzsgU3dp dGNoIHRvIGFzeW5jaHJvbm91cyBleHBvcnQgc3RhY2suCiAgICAgKChlcSBrZXkgPyYpICcoc3Rh Y2spKQogICAgIDs7IFRvZ2dsZSBvcHRpb25zOiBDLWIgKDIpIEMtdiAoMjIpIEMtcyAoMTkpIEMt ZiAoNikgQy1hICgxKS4KICAgICAoKG1lbXEga2V5ICcoMiAyMiAxOSA2IDEpKQogICAgICAob3Jn LWV4cG9ydC0tZGlzcGF0Y2gtdWkKICAgICAgIChsZXQgKChvcHRpb24gKGNsLWNhc2Uga2V5ICgy ICdib2R5KSAoMjIgJ3Zpc2libGUpICgxOSAnc3VidHJlZSkKCQkJICAgICAgKDYgJ2ZvcmNlKSAo MSAnYXN5bmMpKSkpCgkgKGlmIChtZW1xIG9wdGlvbiBvcHRpb25zKSAocmVtcSBvcHRpb24gb3B0 aW9ucykKCSAgIChjb25zIG9wdGlvbiBvcHRpb25zKSkpCiAgICAgICBmaXJzdC1rZXkgZXhwZXJ0 cCkpCiAgICAgOzsgQWN0aW9uIHNlbGVjdGVkOiBTZW5kIGtleSBhbmQgb3B0aW9ucyBiYWNrIHRv CiAgICAgOzsgYG9yZy1leHBvcnQtZGlzcGF0Y2gnLgogICAgICgob3IgZmlyc3Qta2V5IChmdW5j dGlvbnAgKG50aCAyIChhc3NxIGtleSBlbnRyaWVzKSkpKQogICAgICAoY29ucyAoY29uZAoJICAg ICAoKG5vdCBmaXJzdC1rZXkpIChudGggMiAoYXNzcSBrZXkgZW50cmllcykpKQoJICAgICA7OyBQ dWJsaXNoaW5nIGFjdGlvbnMgYXJlIGhhcmQtY29kZWQuICBTZW5kIGEgc3BlY2lhbAoJICAgICA7 OyBzaWduYWwgdG8gYG9yZy1leHBvcnQtZGlzcGF0Y2gnLgoJICAgICAoKGVxIGZpcnN0LWtleSA/ UCkKCSAgICAgIChjbC1jYXNlIGtleQoJCSg/ZiAncHVibGlzaC1jdXJyZW50LWZpbGUpCgkJKD9w ICdwdWJsaXNoLWN1cnJlbnQtcHJvamVjdCkKCQkoP3ggJ3B1Ymxpc2gtY2hvb3NlLXByb2plY3Qp CgkJKD9hICdwdWJsaXNoLWFsbCkpKQoJICAgICA7OyBSZXR1cm4gZmlyc3QgYWN0aW9uIGFzc29j aWF0ZWQgdG8gRklSU1QtS0VZICsgS0VZCgkgICAgIDs7IHBhdGguIEluZGVlZCwgZGVyaXZlZCBi YWNrZW5kcyBjYW4gc2hhcmUgdGhlIHNhbWUKCSAgICAgOzsgRklSU1QtS0VZLgoJICAgICAodCAo Y2F0Y2ggJ2ZvdW5kCgkJICAoZG9saXN0IChlbnRyeSAobWVtYmVyIChhc3NxIGZpcnN0LWtleSBl bnRyaWVzKSBlbnRyaWVzKSkKCQkgICAgKGxldCAoKG1hdGNoIChhc3NxIGtleSAobnRoIDIgZW50 cnkpKSkpCgkJICAgICAgKHdoZW4gbWF0Y2ggKHRocm93ICdmb3VuZCAobnRoIDIgbWF0Y2gpKSkp KSkpKQoJICAgIG9wdGlvbnMpKQogICAgIDs7IE90aGVyd2lzZSwgZW50ZXIgc3ViLW1lbnUuCiAg ICAgKHQgKG9yZy1leHBvcnQtLWRpc3BhdGNoLXVpIG9wdGlvbnMga2V5IGV4cGVydHApKSkpKQoK CgoocHJvdmlkZSAnb3gpCgo7OyBMb2NhbCB2YXJpYWJsZXM6Cjs7IGdlbmVyYXRlZC1hdXRvbG9h ZC1maWxlOiAib3JnLWxvYWRkZWZzLmVsIgo7OyBFbmQ6Cgo7Ozsgb3guZWwgZW5kcyBoZXJlCg== --=_b2fc833ba09e367b4fc6998f8a235e35--