From pcazgonz@yahoo.es Mon Oct 4 07:11:06 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 027147505E8 for ; Mon, 4 Oct 2010 07:11:06 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: 0.712 X-Spam-Level: X-Spam-Status: No, score=0.712 tagged_above=-999 required=2 tests=[BAYES_50=0.8, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, T_TO_NO_BRKTS_FREEMAIL=0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id jHBrUhgyqAAX for ; Mon, 4 Oct 2010 07:11:04 +0000 (UTC) Received: from web28604.mail.ukl.yahoo.com (web28604.mail.ukl.yahoo.com [87.248.110.213]) by menubar.gnome.org (Postfix) with SMTP id 8E764750434 for ; Mon, 4 Oct 2010 07:10:54 +0000 (UTC) Received: (qmail 64814 invoked by uid 60001); 4 Oct 2010 07:10:53 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.es; s=s1024; t=1286176253; bh=+iL6g2ojEe0owcVKfQKfEU7jCiHsgkwhqA7FMVv/xzU=; h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:MIME-Version:Content-Type; b=R5+ub9j6WJrdwn7s+Pf09RqRhGiY4YioZWbi52DsjiCk9CAPhPedLuRTTNQBocF+6mp6vH/7GMky+ZG0qRsoNVR4Jnrw37p+WmIRyMit30/KdxmJhiKZk7NJKXi5op4NfXIx/1NpZuvds2LfIYeLKlSLu0KSVhOsmFumlp9Sr6k= DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.es; h=Message-ID:X-YMail-OSG:Received:X-Mailer:Date:From:Subject:To:MIME-Version:Content-Type; b=Di/OKrC3V19bJY/CjIxDPjRumupG/hA/WzCMy2Es9JUYZ75BL/5iy/nV3XTCaSliZesFyXv/AGrKqAAbL4DYKJwzj1TuOPgg7C7Lr7kaOkv7uvdgKs/MXR+E8WLV/x69MqDKZUKb7DKwUVcSQEyZ6vCibkvsfurRH/xxWUGaMRk=; Message-ID: <4204.64586.qm@web28604.mail.ukl.yahoo.com> X-YMail-OSG: Lza2aoMVM1n1HRy_v49.3iIagup3nJDuj6kff_RvcCh.bsT tN8NVPHTnxthATJ3bN_9RAQJgC8_PqhyzBPtU_Wbl9U24exOpTzNSTGnWWBl 4LHqAWhhq1lX3ypBH5kzaohkIS_uAjlnxU5W9ivmwOOpp1B4blUbahu2r9g3 UgByXICj54QCtOesxPAh5SkkHJCKqW3nmTdiawdSyQbJmpF5k6e3SHzStMrJ yBQHY9gZTuHLbpYsmBmr0K2a2Rcp36M9T3ChJRPRQAAPTT7WMe3kzN7Pix6a 0aeIzqiz7HIVkxYQVxpKZuds1fSnKZ9ufihzX6Tgb2FrNA.AngA-- Received: from [193.110.154.183] by web28604.mail.ukl.yahoo.com via HTTP; Mon, 04 Oct 2010 07:10:52 GMT X-Mailer: YahooMailRC/497 YahooMailWebService/0.8.105.279950 Date: Mon, 4 Oct 2010 07:10:52 +0000 (GMT) From: =?iso-8859-1?Q?Pablo_Cazallas_Gonz=FFffffe1lez?= To: xml@gnome.org MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="0-272364803-1286176252=:64586" Subject: [xml] size of executable X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 04 Oct 2010 07:11:06 -0000 --0-272364803-1286176252=:64586 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable Hi all,=0A=0AI'm trying to research some info about the size of the resulti= ng executable =0Aobject when linking sources against libxml, because that s= ize is much bigger =0Athan before linking to the library (more than double)= .=0A=0A=BFAny suggestion to reduce it?, please.=0A=0AThanks and regards,=0A= Pablo.=0A________________________________=0ALRU #493328=0A=0A=0A --0-272364803-1286176252=:64586 Content-Type: text/html; charset=iso-8859-1 Content-Transfer-Encoding: quoted-printable
Hi all,

I'm trying to research some info about t= he size of the resulting executable object when linking sources against lib= xml, because that size is much bigger than before linking to the library (m= ore than double).

=BFAny suggestion to reduce it?, please.

Th= anks and regards,
Pablo.

LRU = #4933= 28


=0A

=0A=0A=0A=0A --0-272364803-1286176252=:64586-- From veillard@redhat.com Tue Oct 5 13:02:38 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id BDB517502C3 for ; Tue, 5 Oct 2010 13:02:38 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -6.681 X-Spam-Level: X-Spam-Status: No, score=-6.681 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, TW_BX=0.077, TW_IB=0.077, TW_PM=0.077, T_RP_MATCHES_RCVD=-0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id fMoR+qAJFZxk for ; Tue, 5 Oct 2010 13:02:36 +0000 (UTC) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by menubar.gnome.org (Postfix) with ESMTP id 362FA7501F3 for ; Tue, 5 Oct 2010 13:02:25 +0000 (UTC) Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o95D2OnR016344 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Tue, 5 Oct 2010 09:02:24 -0400 Received: from paphio.veillard.com (vpn2-11-122.ams2.redhat.com [10.36.11.122]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o95D2LSg002589 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Tue, 5 Oct 2010 09:02:23 -0400 Received: from paphio.veillard.com (localhost.localdomain [127.0.0.1]) by paphio.veillard.com (8.14.4/8.14.3) with ESMTP id o95D2K54031530; Tue, 5 Oct 2010 15:02:20 +0200 Received: (from veillard@localhost) by paphio.veillard.com (8.14.4/8.14.4/Submit) id o95D2Kfi031529; Tue, 5 Oct 2010 15:02:20 +0200 X-Authentication-Warning: paphio.veillard.com: veillard set sender to veillard@redhat.com using -f Date: Tue, 5 Oct 2010 15:02:20 +0200 From: Daniel Veillard To: Pablo Cazallas =?iso-8859-1?Q?Gonz=FFffffe1lez?= Message-ID: <20101005130219.GN25336@redhat.com> References: <4204.64586.qm@web28604.mail.ukl.yahoo.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <4204.64586.qm@web28604.mail.ukl.yahoo.com> User-Agent: Mutt/1.5.20 (2009-08-17) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 Cc: xml@gnome.org Subject: Re: [xml] size of executable X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list Reply-To: veillard@redhat.com List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 13:02:39 -0000 On Mon, Oct 04, 2010 at 07:10:52AM +0000, Pablo Cazallas Gonz˙ffffe1lez wrote: > Hi all, > > I'm trying to research some info about the size of the resulting executable > object when linking sources against libxml, because that size is much bigger > than before linking to the library (more than double). > > żAny suggestion to reduce it?, please. Depends what you use... You can check with xmllint --version to see what was compiled in. Then you can use configure switches --without-xxx to disable some parts. See --with-minimum to build a minimal library and configure --help output to see all the options, Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ From adam@spra.gg Tue Oct 5 21:52:10 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id C7AFB75036F for ; Tue, 5 Oct 2010 21:52:10 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -1.9 X-Spam-Level: X-Spam-Status: No, score=-1.9 tagged_above=-999 required=2 tests=[BAYES_00=-1.9] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id hGw6VlEpYZTH for ; Tue, 5 Oct 2010 21:52:05 +0000 (UTC) Received: from mail.ukfsn.org (mail.ukfsn.org [77.75.108.10]) by menubar.gnome.org (Postfix) with ESMTP id ABD9475016D for ; Tue, 5 Oct 2010 21:51:57 +0000 (UTC) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id B58E2DEBFC for ; Tue, 5 Oct 2010 22:22:31 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id nw+sK6JrFheG for ; Tue, 5 Oct 2010 22:22:31 +0100 (BST) Received: from localhost.localdomain (unknown [78.33.178.113]) by mail.ukfsn.org (Postfix) with ESMTP id 6DFD3DEBFA for ; Tue, 5 Oct 2010 22:22:31 +0100 (BST) From: Adam Spragg To: xml@gnome.org Date: Tue, 5 Oct 2010 22:22:22 +0100 Message-Id: <1286313748-29287-1-git-send-email-adam@spra.gg> X-Mailer: git-send-email 1.7.1 X-Mailman-Approved-At: Wed, 06 Oct 2010 06:55:05 +0000 Subject: [xml] Add new pretty-printing and sorting options for saving XML X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 21:52:11 -0000 libxml developers, Please find for your consideration a series of patches to add 2 new "xmlSaveOption"s to libxml. XML_SAVE_WSNONSIG is a new pretty-printing format which adds whitespace *within* tags, where permitted by the XML standard, to re-line and indent XML files, without changing any element content at all. No whitespace is added to, removed from, or altered in any text node of the document, and no text nodes are are added or removed either. XML_SAVE_SORT is an option which sorts XML nodes whose order is unimportant to XML files. This includes the order of attributes within elements, the order of namespace declarations within elements, and element, attribute & entity declarations within doctypes. The idea of these options is to be able to combine them to produce a "canonical", nearly line-oriented format for XML files. The goal is to be able to produce XML files which can be manipulated with standard POSIX-style command-line tools much better than is currently possible, particularly by diff(1) and patch(1). Of course, once diff and patch can work effectively on XML files (something that they currently do very badly at) then revision control systems (e.g. git) will get much better at storing and merging them too - particularly if combined with hooks to enforce the canonical style. Please let me know what you think of the idea and patches. Are they suitable for libxml? At all? With work? (If so, what?) Thanks, Adam Spragg From adam@spra.gg Tue Oct 5 21:52:11 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 7DC0175016D for ; Tue, 5 Oct 2010 21:52:11 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -1.9 X-Spam-Level: X-Spam-Status: No, score=-1.9 tagged_above=-999 required=2 tests=[BAYES_00=-1.9] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pKgBxDn4Yil7 for ; Tue, 5 Oct 2010 21:52:06 +0000 (UTC) X-Greylist: delayed 1763 seconds by postgrey-1.32 at menubar.gnome.org; Tue, 05 Oct 2010 21:52:05 UTC Received: from mail.ukfsn.org (mail.ukfsn.org [77.75.108.10]) by menubar.gnome.org (Postfix) with ESMTP id A8B277500C9 for ; Tue, 5 Oct 2010 21:51:57 +0000 (UTC) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id 59D3BDEC35; Tue, 5 Oct 2010 22:22:39 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id i9wY3+hDF-NE; Tue, 5 Oct 2010 22:22:39 +0100 (BST) Received: from localhost.localdomain (unknown [78.33.178.113]) by mail.ukfsn.org (Postfix) with ESMTP id E552DDEC34; Tue, 5 Oct 2010 22:22:38 +0100 (BST) From: Adam Spragg To: xml@gnome.org Date: Tue, 5 Oct 2010 22:22:28 +0100 Message-Id: <1286313748-29287-7-git-send-email-adam@spra.gg> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1286313748-29287-1-git-send-email-adam@spra.gg> References: <1286313748-29287-1-git-send-email-adam@spra.gg> X-Mailman-Approved-At: Wed, 06 Oct 2010 06:55:05 +0000 Cc: Adam Spragg Subject: [xml] [PATCH 6/6] When sorting, also do DOCTYPE contents. X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 21:52:11 -0000 Puts a "canonical" order on XML_ELEMENT_DECL, XML_ATTRIBUTE_DECL and XML_ENTITY_DECL nodes. --- xmlsave.c | 143 +++++++++++++++++++++++++++++++++++++++++++++++++------------ 1 files changed, 115 insertions(+), 28 deletions(-) diff --git a/xmlsave.c b/xmlsave.c index 5e9d1eb..e298559 100644 --- a/xmlsave.c +++ b/xmlsave.c @@ -525,6 +525,33 @@ xmlOutputBufferWriteWSNonSig(xmlSaveCtxtPtr ctxt, int extra) } /** + * xmlStrPrefixCmp: + * @prea: Prefix for first string + * @a: First string + * @preb: Prefix for second string + * @b: Second string + * + * Compare two strings with prefixes, similar to strcmp(3). Strings with + * NULL prefixes sort before strings with non-NULL prefixes. + */ +static int +xmlStrPrefixCmp(xmlChar const * prea, xmlChar const * a, xmlChar const * preb, xmlChar const * b) +{ + int i; + if ((prea != NULL) + && (preb == NULL)) + return +1; + if ((preb != NULL) + && (prea == NULL)) + return -1; + if ((prea != NULL) + && (preb != NULL) + && (i = strcmp((char const *) prea, (char const *) preb)) != 0) + return i; + return strcmp((char const *) a, (char const *) b); +} + +/** * xmlNsPtrCmp: * @a: pointer to first xmlNsPtr to compare * @b: pointer to second xmlNsPtr to compare @@ -538,19 +565,7 @@ xmlNsPtrCmp(void const * a, void const * b) { xmlNsPtr x = *((xmlNsPtr *) a); xmlNsPtr y = *((xmlNsPtr *) b); - int i; - if ((x->prefix != NULL) - && (y->prefix == NULL)) - return +1; - if ((y->prefix != NULL) - && (x->prefix == NULL)) - return -1; - if ((x->prefix != NULL) - && (y->prefix != NULL) - && (i = strcmp((char const *) x->prefix, - (char const *) y->prefix)) != 0) - return i; - return strcmp((char const *) x->href, (char const *) y->href); + return xmlStrPrefixCmp(x->prefix, x->href, y->prefix, y->href); } /** @@ -720,19 +735,8 @@ xmlAttrPtrCmp(void const * a, void const * b) { xmlAttrPtr x = *((xmlAttrPtr *) a); xmlAttrPtr y = *((xmlAttrPtr *) b); - int i; - if ((x->ns != NULL) && (x->ns->prefix != NULL) - && ((y->ns == NULL) || (y->ns->prefix == NULL))) - return +1; - if ((y->ns != NULL) && (y->ns->prefix != NULL) - && ((x->ns == NULL) || (x->ns->prefix == NULL))) - return -1; - if ((x->ns != NULL) && (x->ns->prefix != NULL) - && (y->ns != NULL) && (y->ns->prefix != NULL) - && (i = strcmp((char const *) x->ns->prefix, - (char const *) y->ns->prefix)) != 0) - return i; - return strcmp((char const *) x->name, (char const *) y->name); + return xmlStrPrefixCmp(x->ns != NULL ? x->ns->prefix : NULL, x->name, + y->ns != NULL ? y->ns->prefix : NULL, y->name); } /** @@ -802,6 +806,56 @@ xmlAttrListDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) { /** + * xmlNodePtrCmp: + * @a: pointer to first xmlNodePtr to compare + * @b: pointer to second xmlNodePtr to compare + * + * Compare two xmlNodePtrs whose order in XML documents does not matter, as for + * qsort(3). This includes nodes of type XML_ELEMENT_DECL, XML_ATTRIBUTE_DECL + * and XML_ENTITY_DECL, to put them in that order, and then order each type + * by name. + */ +static int +xmlNodePtrCmp(void const * a, void const * b) +{ + xmlNodePtr x = *((xmlNodePtr *) a); + xmlNodePtr y = *((xmlNodePtr *) b); + + if (x->type != y->type) { + if (x->type == XML_ELEMENT_DECL) + return -1; + if (y->type == XML_ELEMENT_DECL) + return +1; + if (x->type == XML_ATTRIBUTE_DECL) + return -1; + if (y->type == XML_ATTRIBUTE_DECL) + return +1; + if (x->type == XML_ENTITY_DECL) + return -1; + if (y->type == XML_ENTITY_DECL) + return +1; + } + + if (x->type == XML_ELEMENT_DECL) { + xmlElementPtr ex = (xmlElementPtr) x; + xmlElementPtr ey = (xmlElementPtr) y; + return xmlStrPrefixCmp(ex->prefix, ex->name, ey->prefix, ey->name); + } + else if (x->type == XML_ATTRIBUTE_DECL) { + xmlAttributePtr ax = (xmlAttributePtr) x; + xmlAttributePtr ay = (xmlAttributePtr) y; + return xmlStrPrefixCmp(ax->prefix, ax->name, ay->prefix, ay->name); + } + else if (x->type == XML_ENTITY_DECL) { + xmlEntityPtr ex = (xmlEntityPtr) x; + xmlEntityPtr ey = (xmlEntityPtr) y; + return strcmp((char const *) ex->name, (char const *) ey->name); + } + + return 0; +} + +/** * xmlNodeDumpOutputInternalFormatted * @ctxt: the context to dump to * @cur: the node to dump @@ -837,8 +891,41 @@ static void xmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { if (cur == NULL) return; while (cur != NULL) { - xmlNodeDumpOutputInternalFormatted(ctxt, cur); - cur = cur->next; + if ((ctxt->options & XML_SAVE_SORT) && + ((cur->type == XML_ELEMENT_DECL) || + (cur->type == XML_ATTRIBUTE_DECL) || + (cur->type == XML_ENTITY_DECL))) + { + int n; + int i; + xmlNodePtr node; + xmlNodePtr next; + + n = 0; + for (node = cur; + node != NULL && + ((node->type == XML_ELEMENT_DECL) || + (node->type == XML_ATTRIBUTE_DECL) || + (node->type == XML_ENTITY_DECL)); + node = node->next) + { + ++n; + } + next = node; + xmlNodePtr nodes[n]; + for (node = cur, i = 0; i < n; node = node->next, ++i) { + nodes[i] = node; + } + qsort(nodes, n, sizeof(nodes[0]), xmlNodePtrCmp); + for (i = 0; i < n; ++i) { + xmlNodeDumpOutputInternalFormatted(ctxt, nodes[i]); + } + cur = next; + } + else { + xmlNodeDumpOutputInternalFormatted(ctxt, cur); + cur = cur->next; + } } } -- 1.7.1 From adam@spra.gg Tue Oct 5 21:52:12 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 220147500C9 for ; Tue, 5 Oct 2010 21:52:12 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -1.9 X-Spam-Level: X-Spam-Status: No, score=-1.9 tagged_above=-999 required=2 tests=[BAYES_00=-1.9] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id kx51hqfikM5X for ; Tue, 5 Oct 2010 21:52:06 +0000 (UTC) Received: from mail.ukfsn.org (mail.ukfsn.org [77.75.108.10]) by menubar.gnome.org (Postfix) with ESMTP id AC914750223 for ; Tue, 5 Oct 2010 21:51:57 +0000 (UTC) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id 5A0DCDEC24; Tue, 5 Oct 2010 22:22:38 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id PaA02HqHL-w7; Tue, 5 Oct 2010 22:22:38 +0100 (BST) Received: from localhost.localdomain (unknown [78.33.178.113]) by mail.ukfsn.org (Postfix) with ESMTP id 070B0DEC34; Tue, 5 Oct 2010 22:22:37 +0100 (BST) From: Adam Spragg To: xml@gnome.org Date: Tue, 5 Oct 2010 22:22:27 +0100 Message-Id: <1286313748-29287-6-git-send-email-adam@spra.gg> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1286313748-29287-1-git-send-email-adam@spra.gg> References: <1286313748-29287-1-git-send-email-adam@spra.gg> X-Mailman-Approved-At: Wed, 06 Oct 2010 06:55:05 +0000 Cc: Adam Spragg Subject: [xml] [PATCH 5/6] Factor out xmlNodeDumpOutputInternalFormatted() X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 21:52:12 -0000 --- xmlsave.c | 41 ++++++++++++++++++++++++++--------------- 1 files changed, 26 insertions(+), 15 deletions(-) diff --git a/xmlsave.c b/xmlsave.c index 086b31e..5e9d1eb 100644 --- a/xmlsave.c +++ b/xmlsave.c @@ -801,6 +801,31 @@ xmlAttrListDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) { } +/** + * xmlNodeDumpOutputInternalFormatted + * @ctxt: the context to dump to + * @cur: the node to dump + * + * Dump a single XML node, with any appropriate formatting. + */ +static void +xmlNodeDumpOutputInternalFormatted(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { + xmlOutputBufferPtr buf; + buf = ctxt->buf; + if ((ctxt->format == 1) && (xmlIndentTreeOutput) && + ((cur->type == XML_ELEMENT_NODE) || + (cur->type == XML_COMMENT_NODE) || + (cur->type == XML_PI_NODE))) + xmlOutputBufferWrite(buf, ctxt->indent_size * + (ctxt->level > ctxt->indent_nr ? + ctxt->indent_nr : ctxt->level), + ctxt->indent); + xmlNodeDumpOutputInternal(ctxt, cur); + if (ctxt->format == 1) { + xmlOutputBufferWrite(buf, 1, "\n"); + } +} + /** * xmlNodeListDumpOutput: @@ -810,23 +835,9 @@ xmlAttrListDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) { */ static void xmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { - xmlOutputBufferPtr buf; - if (cur == NULL) return; - buf = ctxt->buf; while (cur != NULL) { - if ((ctxt->format == 1) && (xmlIndentTreeOutput) && - ((cur->type == XML_ELEMENT_NODE) || - (cur->type == XML_COMMENT_NODE) || - (cur->type == XML_PI_NODE))) - xmlOutputBufferWrite(buf, ctxt->indent_size * - (ctxt->level > ctxt->indent_nr ? - ctxt->indent_nr : ctxt->level), - ctxt->indent); - xmlNodeDumpOutputInternal(ctxt, cur); - if (ctxt->format == 1) { - xmlOutputBufferWrite(buf, 1, "\n"); - } + xmlNodeDumpOutputInternalFormatted(ctxt, cur); cur = cur->next; } } -- 1.7.1 From adam@spra.gg Tue Oct 5 21:52:13 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id E82DE7500C9 for ; Tue, 5 Oct 2010 21:52:12 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -1.9 X-Spam-Level: X-Spam-Status: No, score=-1.9 tagged_above=-999 required=2 tests=[BAYES_00=-1.9] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 4W2qvPIstmdr for ; Tue, 5 Oct 2010 21:52:06 +0000 (UTC) Received: from mail.ukfsn.org (mail.ukfsn.org [77.75.108.10]) by menubar.gnome.org (Postfix) with ESMTP id AC1D375019C for ; Tue, 5 Oct 2010 21:51:57 +0000 (UTC) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id 38A6EDEC00; Tue, 5 Oct 2010 22:22:34 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id KmJqQ9EsP3B6; Tue, 5 Oct 2010 22:22:34 +0100 (BST) Received: from localhost.localdomain (unknown [78.33.178.113]) by mail.ukfsn.org (Postfix) with ESMTP id D483CDEBFA; Tue, 5 Oct 2010 22:22:32 +0100 (BST) From: Adam Spragg To: xml@gnome.org Date: Tue, 5 Oct 2010 22:22:23 +0100 Message-Id: <1286313748-29287-2-git-send-email-adam@spra.gg> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1286313748-29287-1-git-send-email-adam@spra.gg> References: <1286313748-29287-1-git-send-email-adam@spra.gg> X-Mailman-Approved-At: Wed, 06 Oct 2010 06:55:05 +0000 Cc: Adam Spragg Subject: [xml] [PATCH 1/6] Force _xmlSaveCtxt.format to be 0 or 1 X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 21:52:13 -0000 And check accordingly. This will allow other values of "format" to be used for other purposes. --- xmlsave.c | 32 ++++++++++++++++---------------- 1 files changed, 16 insertions(+), 16 deletions(-) diff --git a/xmlsave.c b/xmlsave.c index aaa5da8..745b98d 100644 --- a/xmlsave.c +++ b/xmlsave.c @@ -656,7 +656,7 @@ xmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { if (cur == NULL) return; buf = ctxt->buf; while (cur != NULL) { - if ((ctxt->format) && (xmlIndentTreeOutput) && + if ((ctxt->format == 1) && (xmlIndentTreeOutput) && ((cur->type == XML_ELEMENT_NODE) || (cur->type == XML_COMMENT_NODE) || (cur->type == XML_PI_NODE))) @@ -665,7 +665,7 @@ xmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { ctxt->indent_nr : ctxt->level), ctxt->indent); xmlNodeDumpOutputInternal(ctxt, cur); - if (ctxt->format) { + if (ctxt->format == 1) { xmlOutputBufferWrite(buf, 1, "\n"); } cur = cur->next; @@ -902,11 +902,11 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { xmlOutputBufferWriteEscape(buf, cur->content, ctxt->escape); } if (cur->children != NULL) { - if (ctxt->format) xmlOutputBufferWrite(buf, 1, "\n"); + if (ctxt->format == 1) xmlOutputBufferWrite(buf, 1, "\n"); if (ctxt->level >= 0) ctxt->level++; xmlNodeListDumpOutput(ctxt, cur->children); if (ctxt->level > 0) ctxt->level--; - if ((xmlIndentTreeOutput) && (ctxt->format)) + if ((xmlIndentTreeOutput) && (ctxt->format == 1)) xmlOutputBufferWrite(buf, ctxt->indent_size * (ctxt->level > ctxt->indent_nr ? ctxt->indent_nr : ctxt->level), @@ -1254,14 +1254,14 @@ xhtmlNodeListDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { if (cur == NULL) return; buf = ctxt->buf; while (cur != NULL) { - if ((ctxt->format) && (xmlIndentTreeOutput) && + if ((ctxt->format == 1) && (xmlIndentTreeOutput) && (cur->type == XML_ELEMENT_NODE)) xmlOutputBufferWrite(buf, ctxt->indent_size * (ctxt->level > ctxt->indent_nr ? ctxt->indent_nr : ctxt->level), ctxt->indent); xhtmlNodeDumpOutput(ctxt, cur); - if (ctxt->format) { + if (ctxt->format == 1) { xmlOutputBufferWrite(buf, 1, "\n"); } cur = cur->next; @@ -1458,7 +1458,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { } else { if (addmeta == 1) { xmlOutputBufferWrite(buf, 1, ">"); - if (ctxt->format) { + if (ctxt->format == 1) { xmlOutputBufferWrite(buf, 1, "\n"); if (xmlIndentTreeOutput) xmlOutputBufferWrite(buf, ctxt->indent_size * @@ -1473,7 +1473,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { xmlOutputBufferWrite(buf, 5, "UTF-8"); } xmlOutputBufferWrite(buf, 4, "\" />"); - if (ctxt->format) + if (ctxt->format == 1) xmlOutputBufferWrite(buf, 1, "\n"); } else { xmlOutputBufferWrite(buf, 1, ">"); @@ -1493,7 +1493,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { } xmlOutputBufferWrite(buf, 1, ">"); if (addmeta == 1) { - if (ctxt->format) { + if (ctxt->format == 1) { xmlOutputBufferWrite(buf, 1, "\n"); if (xmlIndentTreeOutput) xmlOutputBufferWrite(buf, ctxt->indent_size * @@ -1588,13 +1588,13 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { if (cur->children != NULL) { int indent = ctxt->format; - if (format) xmlOutputBufferWrite(buf, 1, "\n"); + if (format == 1) xmlOutputBufferWrite(buf, 1, "\n"); if (ctxt->level >= 0) ctxt->level++; ctxt->format = format; xhtmlNodeListDumpOutput(ctxt, cur->children); if (ctxt->level > 0) ctxt->level--; ctxt->format = indent; - if ((xmlIndentTreeOutput) && (format)) + if ((xmlIndentTreeOutput) && (format == 1)) xmlOutputBufferWrite(buf, ctxt->indent_size * (ctxt->level > ctxt->indent_nr ? ctxt->indent_nr : ctxt->level), @@ -2132,7 +2132,7 @@ xmlNodeDumpOutput(xmlOutputBufferPtr buf, xmlDocPtr doc, xmlNodePtr cur, ctxt.doc = doc; ctxt.buf = buf; ctxt.level = level; - ctxt.format = format; + ctxt.format = format ? 1 : 0; ctxt.encoding = (const xmlChar *) encoding; xmlSaveCtxtInit(&ctxt); ctxt.options |= XML_SAVE_AS_XML; @@ -2218,7 +2218,7 @@ xmlDocDumpFormatMemoryEnc(xmlDocPtr out_doc, xmlChar **doc_txt_ptr, ctxt.doc = out_doc; ctxt.buf = out_buff; ctxt.level = 0; - ctxt.format = format; + ctxt.format = format ? 1 : 0; ctxt.encoding = (const xmlChar *) txt_encoding; xmlSaveCtxtInit(&ctxt); ctxt.options |= XML_SAVE_AS_XML; @@ -2337,7 +2337,7 @@ xmlDocFormatDump(FILE *f, xmlDocPtr cur, int format) { ctxt.doc = cur; ctxt.buf = buf; ctxt.level = 0; - ctxt.format = format; + ctxt.format = format ? 1 : 0; ctxt.encoding = (const xmlChar *) encoding; xmlSaveCtxtInit(&ctxt); ctxt.options |= XML_SAVE_AS_XML; @@ -2427,7 +2427,7 @@ xmlSaveFormatFileTo(xmlOutputBufferPtr buf, xmlDocPtr cur, ctxt.doc = cur; ctxt.buf = buf; ctxt.level = 0; - ctxt.format = format; + ctxt.format = format ? 1 : 0; ctxt.encoding = (const xmlChar *) encoding; xmlSaveCtxtInit(&ctxt); ctxt.options |= XML_SAVE_AS_XML; @@ -2482,7 +2482,7 @@ xmlSaveFormatFileEnc( const char * filename, xmlDocPtr cur, ctxt.doc = cur; ctxt.buf = buf; ctxt.level = 0; - ctxt.format = format; + ctxt.format = format ? 1 : 0; ctxt.encoding = (const xmlChar *) encoding; xmlSaveCtxtInit(&ctxt); ctxt.options |= XML_SAVE_AS_XML; -- 1.7.1 From adam@spra.gg Tue Oct 5 21:52:14 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 564E77500C9 for ; Tue, 5 Oct 2010 21:52:14 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -1.9 X-Spam-Level: X-Spam-Status: No, score=-1.9 tagged_above=-999 required=2 tests=[BAYES_00=-1.9] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id OcuRumbO3HVX for ; Tue, 5 Oct 2010 21:52:06 +0000 (UTC) Received: from mail.ukfsn.org (mail.ukfsn.org [77.75.108.10]) by menubar.gnome.org (Postfix) with ESMTP id ABC3C7500F6 for ; Tue, 5 Oct 2010 21:51:57 +0000 (UTC) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id 7B368DEC25; Tue, 5 Oct 2010 22:22:37 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id APfz5uj00X5L; Tue, 5 Oct 2010 22:22:37 +0100 (BST) Received: from localhost.localdomain (unknown [78.33.178.113]) by mail.ukfsn.org (Postfix) with ESMTP id 106E1DEC24; Tue, 5 Oct 2010 22:22:37 +0100 (BST) From: Adam Spragg To: xml@gnome.org Date: Tue, 5 Oct 2010 22:22:26 +0100 Message-Id: <1286313748-29287-5-git-send-email-adam@spra.gg> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1286313748-29287-1-git-send-email-adam@spra.gg> References: <1286313748-29287-1-git-send-email-adam@spra.gg> X-Mailman-Approved-At: Wed, 06 Oct 2010 06:55:05 +0000 Cc: Adam Spragg Subject: [xml] [PATCH 4/6] Add xmlSaveOption XML_SAVE_SORT X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 21:52:14 -0000 Adds option, initial implementation, and xmllint parameter for use. --- include/libxml/xmlsave.h | 1 + xmllint.c | 11 +++++ xmlsave.c | 96 ++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 108 insertions(+), 0 deletions(-) diff --git a/include/libxml/xmlsave.h b/include/libxml/xmlsave.h index 1669733..737df77 100644 --- a/include/libxml/xmlsave.h +++ b/include/libxml/xmlsave.h @@ -35,6 +35,7 @@ typedef enum { XML_SAVE_AS_XML = 1<<5, /* force XML serialization on HTML doc */ XML_SAVE_AS_HTML = 1<<6, /* force HTML serialization on XML doc */ XML_SAVE_WSNONSIG = 1<<7, /* format with non-significant whitespace */ + XML_SAVE_SORT = 1<<8, /* sort "unordered" parts of XML, e.g. attrs */ } xmlSaveOption; diff --git a/xmllint.c b/xmllint.c index b7af32f..9aef364 100644 --- a/xmllint.c +++ b/xmllint.c @@ -135,6 +135,7 @@ static int noout = 0; static int nowrap = 0; #ifdef LIBXML_OUTPUT_ENABLED static int format = 0; +static int sort = 0; static const char *output = NULL; static int compress = 0; static int oldout = 0; @@ -2661,6 +2662,9 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { else if (format == 2) saveOpts |= XML_SAVE_WSNONSIG; + if (sort == 1) + saveOpts |= XML_SAVE_SORT; + #if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED) if (xmlout) saveOpts |= XML_SAVE_AS_XML; @@ -3020,6 +3024,7 @@ static void usage(const char *name) { printf("\t 0 Do not pretty print\n"); printf("\t 1 Format the XML content, as --format\n"); printf("\t 2 Add whitespace inside tags, preserving content\n"); + printf("\t--sort : sort \"unordered\" parts of XML, e.g. attributes\n"); #endif /* LIBXML_OUTPUT_ENABLED */ printf("\t--c14n : save in W3C canonical format v1.0 (with comments)\n"); printf("\t--c14n11 : save in W3C canonical format v1.1 (with comments)\n"); @@ -3355,6 +3360,12 @@ main(int argc, char **argv) { xmlKeepBlanksDefault(0); } } + else if ((!strcmp(argv[i], "-sort")) || + (!strcmp(argv[i], "--sort"))) { +#ifdef LIBXML_OUTPUT_ENABLED + sort = 1; +#endif + } #ifdef LIBXML_READER_ENABLED else if ((!strcmp(argv[i], "-stream")) || (!strcmp(argv[i], "--stream"))) { diff --git a/xmlsave.c b/xmlsave.c index ddf7143..086b31e 100644 --- a/xmlsave.c +++ b/xmlsave.c @@ -525,6 +525,35 @@ xmlOutputBufferWriteWSNonSig(xmlSaveCtxtPtr ctxt, int extra) } /** + * xmlNsPtrCmp: + * @a: pointer to first xmlNsPtr to compare + * @b: pointer to second xmlNsPtr to compare + * + * Compare two xmlNsPtrs by the NS prefix/href, as used by qsort. + * NSs without prefixes sort before those with, and string comparisons + * are done asciibetically, so as to be stable no matter the locale. + */ +static int +xmlNsPtrCmp(void const * a, void const * b) +{ + xmlNsPtr x = *((xmlNsPtr *) a); + xmlNsPtr y = *((xmlNsPtr *) b); + int i; + if ((x->prefix != NULL) + && (y->prefix == NULL)) + return +1; + if ((y->prefix != NULL) + && (x->prefix == NULL)) + return -1; + if ((x->prefix != NULL) + && (y->prefix != NULL) + && (i = strcmp((char const *) x->prefix, + (char const *) y->prefix)) != 0) + return i; + return strcmp((char const *) x->href, (char const *) y->href); +} + +/** * xmlNsDumpOutput: * @buf: the XML buffer output * @cur: a namespace @@ -580,6 +609,25 @@ xmlNsDumpOutputCtxt(xmlSaveCtxtPtr ctxt, xmlNsPtr cur) { */ static void xmlNsListDumpOutputCtxt(xmlSaveCtxtPtr ctxt, xmlNsPtr cur) { + if (ctxt->options & XML_SAVE_SORT) { + int n; + int i; + xmlNsPtr ns; + + n = 0; + for (ns = cur; ns != NULL; ns = ns->next) { + ++n; + } + xmlNsPtr nss[n]; + for (ns = cur, i = 0; ns != NULL; ns = ns->next, ++i) { + nss[i] = ns; + } + qsort(nss, n, sizeof(nss[0]), xmlNsPtrCmp); + for (i = 0; i < n; ++i) { + xmlNsDumpOutput(ctxt->buf, nss[i], ctxt); + } + return; + } while (cur != NULL) { xmlNsDumpOutput(ctxt->buf, cur, ctxt); cur = cur->next; @@ -659,6 +707,35 @@ xmlDtdDumpOutput(xmlSaveCtxtPtr ctxt, xmlDtdPtr dtd) { } /** + * xmlAttrPtrCmp: + * @a: pointer to first xmlAttrPtr to compare + * @b: pointer to second xmlAttrPtr to compare + * + * Compare two xmlAttrPtrs by their name and NS prefix, as used by qsort. + * Attrs without NS prefixes sort before those with, and string comparisons + * are done asciibetically, so as to be stable no matter the locale. + */ +static int +xmlAttrPtrCmp(void const * a, void const * b) +{ + xmlAttrPtr x = *((xmlAttrPtr *) a); + xmlAttrPtr y = *((xmlAttrPtr *) b); + int i; + if ((x->ns != NULL) && (x->ns->prefix != NULL) + && ((y->ns == NULL) || (y->ns->prefix == NULL))) + return +1; + if ((y->ns != NULL) && (y->ns->prefix != NULL) + && ((x->ns == NULL) || (x->ns->prefix == NULL))) + return -1; + if ((x->ns != NULL) && (x->ns->prefix != NULL) + && (y->ns != NULL) && (y->ns->prefix != NULL) + && (i = strcmp((char const *) x->ns->prefix, + (char const *) y->ns->prefix)) != 0) + return i; + return strcmp((char const *) x->name, (char const *) y->name); +} + +/** * xmlAttrDumpOutput: * @buf: the XML buffer output * @cur: the attribute pointer @@ -698,6 +775,25 @@ xmlAttrDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) { static void xmlAttrListDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) { if (cur == NULL) return; + if (ctxt->options & XML_SAVE_SORT) { + int n; + int i; + xmlAttrPtr attr; + + n = 0; + for (attr = cur; attr != NULL; attr = attr->next) { + ++n; + } + xmlAttrPtr attrs[n]; + for (attr = cur, i = 0; attr != NULL; attr = attr->next, ++i) { + attrs[i] = attr; + } + qsort(attrs, n, sizeof(attrs[0]), xmlAttrPtrCmp); + for (i = 0; i < n; ++i) { + xmlAttrDumpOutput(ctxt, attrs[i]); + } + return; + } while (cur != NULL) { xmlAttrDumpOutput(ctxt, cur); cur = cur->next; -- 1.7.1 From adam@spra.gg Tue Oct 5 21:52:18 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id B777375016D for ; Tue, 5 Oct 2010 21:52:18 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -1.9 X-Spam-Level: X-Spam-Status: No, score=-1.9 tagged_above=-999 required=2 tests=[BAYES_00=-1.9] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id s3vBXS3ePAKE for ; Tue, 5 Oct 2010 21:52:16 +0000 (UTC) Received: from mail.ukfsn.org (mail.ukfsn.org [77.75.108.10]) by menubar.gnome.org (Postfix) with ESMTP id D0A247500C9 for ; Tue, 5 Oct 2010 21:52:07 +0000 (UTC) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id 65AF5DEC1E; Tue, 5 Oct 2010 22:22:35 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id TwCUdYvgdelj; Tue, 5 Oct 2010 22:22:35 +0100 (BST) Received: from localhost.localdomain (unknown [78.33.178.113]) by mail.ukfsn.org (Postfix) with ESMTP id EDB27DEBFA; Tue, 5 Oct 2010 22:22:34 +0100 (BST) From: Adam Spragg To: xml@gnome.org Date: Tue, 5 Oct 2010 22:22:24 +0100 Message-Id: <1286313748-29287-3-git-send-email-adam@spra.gg> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1286313748-29287-1-git-send-email-adam@spra.gg> References: <1286313748-29287-1-git-send-email-adam@spra.gg> X-Mailman-Approved-At: Wed, 06 Oct 2010 06:55:05 +0000 Cc: Adam Spragg Subject: [xml] [PATCH 2/6] Allow "format" to take many values. X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 21:52:19 -0000 --- xmllint.c | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-) diff --git a/xmllint.c b/xmllint.c index 88c4a6b..aca0a7d 100644 --- a/xmllint.c +++ b/xmllint.c @@ -2510,14 +2510,14 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { htmlSaveFile(output ? output : "-", doc); } else if (encoding != NULL) { - if ( format ) { + if (format == 1) { htmlSaveFileFormat(output ? output : "-", doc, encoding, 1); } else { htmlSaveFileFormat(output ? output : "-", doc, encoding, 0); } } - else if (format) { + else if (format == 1) { htmlSaveFileFormat(output ? output : "-", doc, NULL, 1); } else { @@ -2589,13 +2589,13 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { int len; if (encoding != NULL) { - if ( format ) { + if (format == 1) { xmlDocDumpFormatMemoryEnc(doc, &result, &len, encoding, 1); } else { xmlDocDumpMemoryEnc(doc, &result, &len, encoding); } } else { - if (format) + if (format == 1) xmlDocDumpFormatMemory(doc, &result, &len, 1); else xmlDocDumpMemory(doc, &result, &len); @@ -2614,7 +2614,7 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { xmlSaveFile(output ? output : "-", doc); } else if (oldout) { if (encoding != NULL) { - if ( format ) { + if (format == 1) { ret = xmlSaveFormatFileEnc(output ? output : "-", doc, encoding, 1); } @@ -2627,7 +2627,7 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { output ? output : "-"); progresult = XMLLINT_ERR_OUT; } - } else if (format) { + } else if (format == 1) { ret = xmlSaveFormatFile(output ? output : "-", doc, 1); if (ret < 0) { fprintf(stderr, "failed save to %s\n", @@ -2656,7 +2656,7 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { xmlSaveCtxtPtr ctxt; int saveOpts = 0; - if (format) + if (format == 1) saveOpts |= XML_SAVE_FORMAT; #if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED) @@ -3334,7 +3334,7 @@ main(int argc, char **argv) { (!strcmp(argv[i], "--format"))) { noblanks++; #ifdef LIBXML_OUTPUT_ENABLED - format++; + format = 1; #endif /* LIBXML_OUTPUT_ENABLED */ xmlKeepBlanksDefault(0); } -- 1.7.1 From adam@spra.gg Tue Oct 5 21:52:20 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id F40287500C9 for ; Tue, 5 Oct 2010 21:52:19 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -1.9 X-Spam-Level: X-Spam-Status: No, score=-1.9 tagged_above=-999 required=2 tests=[BAYES_00=-1.9] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1z-4KRgQMCrB for ; Tue, 5 Oct 2010 21:52:16 +0000 (UTC) Received: from mail.ukfsn.org (mail.ukfsn.org [77.75.108.10]) by menubar.gnome.org (Postfix) with ESMTP id D0F517500F6 for ; Tue, 5 Oct 2010 21:52:07 +0000 (UTC) Received: from localhost (smtp-filter.ukfsn.org [192.168.54.205]) by mail.ukfsn.org (Postfix) with ESMTP id 88079DEC1F; Tue, 5 Oct 2010 22:22:36 +0100 (BST) Received: from mail.ukfsn.org ([192.168.54.25]) by localhost (smtp-filter.ukfsn.org [192.168.54.205]) (amavisd-new, port 10024) with ESMTP id r9eYVyv-Vf78; Tue, 5 Oct 2010 22:22:36 +0100 (BST) Received: from localhost.localdomain (unknown [78.33.178.113]) by mail.ukfsn.org (Postfix) with ESMTP id 04BC1DEBFA; Tue, 5 Oct 2010 22:22:35 +0100 (BST) From: Adam Spragg To: xml@gnome.org Date: Tue, 5 Oct 2010 22:22:25 +0100 Message-Id: <1286313748-29287-4-git-send-email-adam@spra.gg> X-Mailer: git-send-email 1.7.1 In-Reply-To: <1286313748-29287-1-git-send-email-adam@spra.gg> References: <1286313748-29287-1-git-send-email-adam@spra.gg> X-Mailman-Approved-At: Wed, 06 Oct 2010 06:55:05 +0000 Cc: Adam Spragg Subject: [xml] [PATCH 3/6] Add xmlSaveOption XML_SAVE_WSNONSIG X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 21:52:20 -0000 Adds option, initial implementation, and xmllint parameter for use. --- include/libxml/xmlsave.h | 3 +- xmllint.c | 22 +++++++++++ xmlsave.c | 92 +++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 107 insertions(+), 10 deletions(-) diff --git a/include/libxml/xmlsave.h b/include/libxml/xmlsave.h index 4201b4d..1669733 100644 --- a/include/libxml/xmlsave.h +++ b/include/libxml/xmlsave.h @@ -33,7 +33,8 @@ typedef enum { XML_SAVE_NO_XHTML = 1<<3, /* disable XHTML1 specific rules */ XML_SAVE_XHTML = 1<<4, /* force XHTML1 specific rules */ XML_SAVE_AS_XML = 1<<5, /* force XML serialization on HTML doc */ - XML_SAVE_AS_HTML = 1<<6 /* force HTML serialization on XML doc */ + XML_SAVE_AS_HTML = 1<<6, /* force HTML serialization on XML doc */ + XML_SAVE_WSNONSIG = 1<<7, /* format with non-significant whitespace */ } xmlSaveOption; diff --git a/xmllint.c b/xmllint.c index aca0a7d..b7af32f 100644 --- a/xmllint.c +++ b/xmllint.c @@ -2658,6 +2658,8 @@ static void parseAndPrintFile(char *filename, xmlParserCtxtPtr rectxt) { if (format == 1) saveOpts |= XML_SAVE_FORMAT; + else if (format == 2) + saveOpts |= XML_SAVE_WSNONSIG; #if defined(LIBXML_HTML_ENABLED) || defined(LIBXML_VALID_ENABLED) if (xmlout) @@ -3014,6 +3016,10 @@ static void usage(const char *name) { printf("\t--format : reformat/reindent the input\n"); printf("\t--encode encoding : output in the given encoding\n"); printf("\t--dropdtd : remove the DOCTYPE of the input docs\n"); + printf("\t--pretty STYLE : pretty-print in a particular style\n"); + printf("\t 0 Do not pretty print\n"); + printf("\t 1 Format the XML content, as --format\n"); + printf("\t 2 Add whitespace inside tags, preserving content\n"); #endif /* LIBXML_OUTPUT_ENABLED */ printf("\t--c14n : save in W3C canonical format v1.0 (with comments)\n"); printf("\t--c14n11 : save in W3C canonical format v1.1 (with comments)\n"); @@ -3338,6 +3344,17 @@ main(int argc, char **argv) { #endif /* LIBXML_OUTPUT_ENABLED */ xmlKeepBlanksDefault(0); } + else if ((!strcmp(argv[i], "-pretty")) || + (!strcmp(argv[i], "--pretty"))) { + i++; +#ifdef LIBXML_OUTPUT_ENABLED + format = atoi(argv[i]); +#endif /* LIBXML_OUTPUT_ENABLED */ + if (format == 1) { + noblanks++; + xmlKeepBlanksDefault(0); + } + } #ifdef LIBXML_READER_ENABLED else if ((!strcmp(argv[i], "-stream")) || (!strcmp(argv[i], "--stream"))) { @@ -3624,6 +3641,11 @@ main(int argc, char **argv) { i++; continue; } + if ((!strcmp(argv[i], "-pretty")) || + (!strcmp(argv[i], "--pretty"))) { + i++; + continue; + } if ((!strcmp(argv[i], "-schema")) || (!strcmp(argv[i], "--schema"))) { i++; diff --git a/xmlsave.c b/xmlsave.c index 745b98d..ddf7143 100644 --- a/xmlsave.c +++ b/xmlsave.c @@ -408,6 +408,8 @@ xmlNewSaveCtxt(const char *encoding, int options) ret->options = options; if (options & XML_SAVE_FORMAT) ret->format = 1; + else if (options & XML_SAVE_WSNONSIG) + ret->format = 2; return(ret); } @@ -501,32 +503,90 @@ void xmlNsListDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur); static int xmlDocContentDumpOutput(xmlSaveCtxtPtr ctxt, xmlDocPtr cur); /** + * xmlOutputBufferWriteWSNonSig: + * @ctxt: The save context + * @extra: Number of extra indents to apply to ctxt->level + * + * Write out formatting for non-significant whitespace output. + */ +static void +xmlOutputBufferWriteWSNonSig(xmlSaveCtxtPtr ctxt, int extra) +{ + int i; + if ((ctxt == NULL) || (ctxt->buf == NULL)) + return; + xmlOutputBufferWrite(ctxt->buf, 1, "\n"); + for (i = 0; i < (ctxt->level + extra); i += ctxt->indent_nr) { + xmlOutputBufferWrite(ctxt->buf, ctxt->indent_size * + ((ctxt->level + extra - i) > ctxt->indent_nr ? + ctxt->indent_nr : (ctxt->level + extra - i)), + ctxt->indent); + } +} + +/** * xmlNsDumpOutput: * @buf: the XML buffer output * @cur: a namespace + * @ctxt: the output save context. Optional. * * Dump a local Namespace definition. * Should be called in the context of attributes dumps. + * If @ctxt is supplied, @buf should be its buffer. */ static void -xmlNsDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur) { +xmlNsDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur, xmlSaveCtxtPtr ctxt) { if ((cur == NULL) || (buf == NULL)) return; if ((cur->type == XML_LOCAL_NAMESPACE) && (cur->href != NULL)) { if (xmlStrEqual(cur->prefix, BAD_CAST "xml")) return; + if (ctxt != NULL && ctxt->format == 2) + xmlOutputBufferWriteWSNonSig(ctxt, 2); + else + xmlOutputBufferWrite(buf, 1, " "); + /* Within the context of an element attributes */ if (cur->prefix != NULL) { - xmlOutputBufferWrite(buf, 7, " xmlns:"); + xmlOutputBufferWrite(buf, 6, "xmlns:"); xmlOutputBufferWriteString(buf, (const char *)cur->prefix); } else - xmlOutputBufferWrite(buf, 6, " xmlns"); + xmlOutputBufferWrite(buf, 5, "xmlns"); xmlOutputBufferWrite(buf, 1, "="); xmlBufferWriteQuotedString(buf->buffer, cur->href); } } /** + * xmlNsDumpOutputCtxt + * @ctxt: the save context + * @cur: a namespace + * + * Dump a local Namespace definition to a save context. + * Should be called in the context of attribute dumps. + */ +static void +xmlNsDumpOutputCtxt(xmlSaveCtxtPtr ctxt, xmlNsPtr cur) { + xmlNsDumpOutput(ctxt->buf, cur, ctxt); +} + +/** + * xmlNsListDumpOutputCtxt + * @ctxt: the save context + * @cur: the first namespace + * + * Dump a list of local namespace definitions to a save context. + * Should be called in the context of attribute dumps. + */ +static void +xmlNsListDumpOutputCtxt(xmlSaveCtxtPtr ctxt, xmlNsPtr cur) { + while (cur != NULL) { + xmlNsDumpOutput(ctxt->buf, cur, ctxt); + cur = cur->next; + } +} + +/** * xmlNsListDumpOutput: * @buf: the XML buffer output * @cur: the first namespace @@ -537,7 +597,7 @@ xmlNsDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur) { void xmlNsListDumpOutput(xmlOutputBufferPtr buf, xmlNsPtr cur) { while (cur != NULL) { - xmlNsDumpOutput(buf, cur); + xmlNsDumpOutput(buf, cur, NULL); cur = cur->next; } } @@ -612,7 +672,10 @@ xmlAttrDumpOutput(xmlSaveCtxtPtr ctxt, xmlAttrPtr cur) { if (cur == NULL) return; buf = ctxt->buf; if (buf == NULL) return; - xmlOutputBufferWrite(buf, 1, " "); + if (ctxt->format == 2) + xmlOutputBufferWriteWSNonSig(ctxt, 2); + else + xmlOutputBufferWrite(buf, 1, " "); if ((cur->ns != NULL) && (cur->ns->prefix != NULL)) { xmlOutputBufferWriteString(buf, (const char *)cur->ns->prefix); xmlOutputBufferWrite(buf, 1, ":"); @@ -808,13 +871,18 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { xmlOutputBufferWrite(buf, 2, "name); if (cur->content != NULL) { - xmlOutputBufferWrite(buf, 1, " "); + if (ctxt->format == 2) + xmlOutputBufferWriteWSNonSig(ctxt, 0); + else + xmlOutputBufferWrite(buf, 1, " "); xmlOutputBufferWriteString(buf, (const char *)cur->content); } xmlOutputBufferWrite(buf, 2, "?>"); } else { xmlOutputBufferWrite(buf, 2, "name); + if (ctxt->format == 2) + xmlOutputBufferWriteWSNonSig(ctxt, 0); xmlOutputBufferWrite(buf, 2, "?>"); } return; @@ -862,7 +930,7 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { return; } if (cur->type == XML_NAMESPACE_DECL) { - xmlNsDumpOutput(buf, (xmlNsPtr) cur); + xmlNsDumpOutputCtxt(ctxt, (xmlNsPtr) cur); return; } @@ -887,16 +955,20 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { xmlOutputBufferWriteString(buf, (const char *)cur->name); if (cur->nsDef) - xmlNsListDumpOutput(buf, cur->nsDef); + xmlNsListDumpOutputCtxt(ctxt, cur->nsDef); if (cur->properties != NULL) xmlAttrListDumpOutput(ctxt, cur->properties); if (((cur->type == XML_ELEMENT_NODE) || (cur->content == NULL)) && (cur->children == NULL) && ((ctxt->options & XML_SAVE_NO_EMPTY) == 0)) { + if (ctxt->format == 2) + xmlOutputBufferWriteWSNonSig(ctxt, 0); xmlOutputBufferWrite(buf, 2, "/>"); ctxt->format = format; return; } + if (ctxt->format == 2) + xmlOutputBufferWriteWSNonSig(ctxt, 1); xmlOutputBufferWrite(buf, 1, ">"); if ((cur->type != XML_ELEMENT_NODE) && (cur->content != NULL)) { xmlOutputBufferWriteEscape(buf, cur->content, ctxt->escape); @@ -919,6 +991,8 @@ xmlNodeDumpOutputInternal(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { } xmlOutputBufferWriteString(buf, (const char *)cur->name); + if (ctxt->format == 2) + xmlOutputBufferWriteWSNonSig(ctxt, 0); xmlOutputBufferWrite(buf, 1, ">"); ctxt->format = format; } @@ -1410,7 +1484,7 @@ xhtmlNodeDumpOutput(xmlSaveCtxtPtr ctxt, xmlNodePtr cur) { xmlOutputBufferWriteString(buf, (const char *)cur->name); if (cur->nsDef) - xmlNsListDumpOutput(buf, cur->nsDef); + xmlNsListDumpOutputCtxt(ctxt, cur->nsDef); if ((xmlStrEqual(cur->name, BAD_CAST "html") && (cur->ns == NULL) && (cur->nsDef == NULL))) { /* -- 1.7.1 From btwotch@googlemail.com Tue Oct 5 22:18:44 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 06B6275016D for ; Tue, 5 Oct 2010 22:18:44 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: YES X-Spam-Score: 2.454 X-Spam-Level: ** X-Spam-Status: Yes, score=2.454 tagged_above=-999 required=2 tests=[BAYES_50=0.8, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SARE_FRAUD_X3=1.667, SPF_PASS=-0.001, TW_QV=0.077, T_TO_NO_BRKTS_FREEMAIL=0.01] autolearn=no Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id S7OFeYvIdQXR for ; Tue, 5 Oct 2010 22:18:30 +0000 (UTC) Received: from mail-pz0-f54.google.com (mail-pz0-f54.google.com [209.85.210.54]) by menubar.gnome.org (Postfix) with ESMTP id 5075F7500F6 for ; Tue, 5 Oct 2010 22:18:21 +0000 (UTC) Received: by pzk7 with SMTP id 7so134026pzk.27 for ; Tue, 05 Oct 2010 15:18:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type; bh=vNSRRhDRv2Lr5SgZQb8DTdFwlBvXnr6FQmYVP96W/Y4=; b=IWsy+kvGURKajHnaxWBs41iIdoww3QsXs9xrGswsqF3qwrysD/4DuzspdqMMMbKPFA ky5B//jezU9QJRxQOIY2syAfF8oM5SJA3lXuvD0EoOFcqy9FQAfedxMcuXEYkG3gio2Z nxsMvHLENDiJu/y6SHlikBclbbk+uYK0x2PN4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=xcqZZXaonGLGUa3TFOsE80rlEEGsffg64/lNKg9hbkC7rXBbkQ19XnUqBkvlZAXawW HorhZlK9gGRkTO/XdscUaqcyZzNNIN9OnBVa7UONdAAevrcPAWJ9lWq0lRIiC6QgWzoz t/JWiuB8MYR+k1kKiLu1yxXKCMfeaAElAgaQU= MIME-Version: 1.0 Received: by 10.142.222.11 with SMTP id u11mr10802466wfg.331.1286317100493; Tue, 05 Oct 2010 15:18:20 -0700 (PDT) Received: by 10.142.58.7 with HTTP; Tue, 5 Oct 2010 15:18:20 -0700 (PDT) Date: Wed, 6 Oct 2010 00:18:20 +0200 Message-ID: From: Steven Falken To: xml@gnome.org Content-Type: multipart/mixed; boundary=000e0cd32f20d7eb280491e609eb X-Mailman-Approved-At: Wed, 06 Oct 2010 06:55:06 +0000 Subject: [xml] strange end-tag position (parsing html) X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 22:18:44 -0000 --000e0cd32f20d7eb280491e609eb Content-Type: text/plain; charset=UTF-8 Hi, I'm trying to parse bare.txt (attached, yes it is simply cnn.com). For this purpose I'm using parse.c (also attached). The output is output.txt (Attachment!). If you look at bare.txt, you see a ) is in line 784; the problem is, that this end-Tag is in the middle of the javascript-code, which is actually bad :( I hope, you understood what the problem is, if not, don't hesitate to ask via the list or direct(if you want). Thx for your help --000e0cd32f20d7eb280491e609eb Content-Type: text/plain; charset=US-ASCII; name="bare.txt" Content-Disposition: attachment; filename="bare.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gexbj6c80 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs Ly9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj48aHRtbCBsYW5nPSJl biI+PGhlYWQ+PHRpdGxlPkNOTi5jb20gSW50ZXJuYXRpb25hbCAtIEJyZWFraW5nLCBXb3JsZCwg QnVzaW5lc3MsIFNwb3J0cywgRW50ZXJ0YWlubWVudCBhbmQgVmlkZW8gTmV3czwvdGl0bGU+ICAg PG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMTgwMCI+CjxtZXRhIG5hbWU9IkRl c2NyaXB0aW9uIiBjb250ZW50PSJDTk4uY29tIEludGVybmF0aW9uYWwgZGVsaXZlcnMgYnJlYWtp bmcgbmV3cyBmcm9tIGFjcm9zcyB0aGUgZ2xvYmUgYW5kIGluZm9ybWF0aW9uIG9uIHRoZSBsYXRl c3QgdG9wIHN0b3JpZXMsIGJ1c2luZXNzLCBzcG9ydHMgYW5kIGVudGVydGFpbm1lbnQgaGVhZGxp bmVzLiAgRm9sbG93IHRoZSBuZXdzIGFzIGl0IGhhcHBlbnMgdGhyb3VnaDogc3BlY2lhbCByZXBv cnRzLCB2aWRlb3MsIGF1ZGlvLCBwaG90byBnYWxsZXJpZXMgcGx1cyBpbnRlcmFjdGl2ZSBtYXBz IGFuZCB0aW1lbGluZXMuIj4KPG1ldGEgbmFtZT0iS2V5d29yZHMiIGNvbnRlbnQ9IkNOTiwgQ05O IG5ld3MsIENOTiBJbnRlcm5hdGlvbmFsLCBDTk4gSW50ZXJuYXRpb25hbCBuZXdzLCBDTk4gRWRp dGlvbiwgRWRpdGlvbiBuZXdzLCBuZXdzLCBuZXdzIG9ubGluZSwgYnJlYWtpbmcgbmV3cywgVS5T LiBuZXdzLCB3b3JsZCBuZXdzLCBnbG9iYWwgbmV3cywgd2VhdGhlciwgYnVzaW5lc3MsIENOTiBN b25leSwgc3BvcnRzLCBwb2xpdGljcywgbGF3LCB0ZWNobm9sb2d5LCBlbnRlcnRhaW5tZW50LCBl ZHVjYXRpb24sIHRyYXZlbCwgaGVhbHRoLCBzcGVjaWFsIHJlcG9ydHMsIGF1dG9zLCBkZXZlbG9w aW5nIHN0b3J5LCBuZXdzIHZpZGVvLCBDTk4gSW50bCwgcG9kY2FzdHMsIHdvcmxkIGJsb2dzIj4K CjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFy c2V0PWlzby04ODU5LTEiPgo8bGluayByZWw9InNlYXJjaCIgdHlwZT0iYXBwbGljYXRpb24vb3Bl bnNlYXJjaGRlc2NyaXB0aW9uK3htbCIgaHJlZj0iL3Rvb2xzL3NlYXJjaC9jbm5jb20ueG1sIiB0 aXRsZT0iQ05OLmNvbSIgLz4gCjxsaW5rIHJlbD0ic2VhcmNoIiB0eXBlPSJhcHBsaWNhdGlvbi9v cGVuc2VhcmNoZGVzY3JpcHRpb24reG1sIiBocmVmPSIvdG9vbHMvc2VhcmNoL2NubmNvbXZpZGVv LnhtbCIgdGl0bGU9IkNOTi5jb20gVmlkZW8iIC8+Cgo8bGluayByZWw9ImNhbm9uaWNhbCIgaHJl Zj0iaHR0cDovL2VkaXRpb24uY25uLmNvbS8iPiAKPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRl bnQ9IndpZHRoPTEwMjQiIC8+IAoKPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0 aW9uL3Jzcyt4bWwiIHRpdGxlPSJDTk4gLSBUb3AgU3RvcmllcyBbUlNTXSIgaHJlZj0iaHR0cDov L3Jzcy5jbm4uY29tL3Jzcy9lZGl0aW9uLnJzcyI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5 cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQv Y3NzLzMuMC9jb21tb24uY3NzIj4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2Nz cyIgaHJlZj0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2Nzcy8zLjAvbWFp bi5jc3MiPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRw Oi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvY3NzLzMuMC9jb25uZWN0L292ZXJsYXku Y3NzPzIwMTAwNDIxIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKiBodG1sICNoZHItYXV0aCwK KiBodG1sICNwbVVzZXJQYW5lbAp7ZGlzcGxheTpub25lfSAKLmNubl9zaGRjYW10dDEgLmNubl9t dGxwbG5vZGUgeyBoZWlnaHQ6MTI0cHg7IH0KPC9zdHlsZT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0 IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVt ZW50L2Nzcy8zLjAvcGVyc29uYWxpemF0aW9uLmNzcz8yMDEwMDQyMSI+Cgo8bWV0YSBuYW1lPSJm Yl9hcHBfaWQiIGNvbnRlbnQ9IjgwNDAxMzEyNDg5Ii8+CjxtZXRhIHByb3BlcnR5PSJmYjpwYWdl X2lkIiBjb250ZW50PSIxMjkzNDM2OTcxMDY1MzciLz4gCgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0 IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVt ZW50L2Nzcy8zLjAvc3BlY2lhbHMvd29ybGRjdXAvd2NkYXRhLmRheS5jc3MiPgoKPHNjcmlwdCBs YW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij52YXIgY25uQ3VyclRp bWUgPSBuZXcgRGF0ZSgxMjg2MTE5MTI0NTgwKTsgdmFyIGNubkN1cnJIb3VyID0gMTE7IHZhciBj bm5DdXJyTWluID0gMTg7IHZhciBjbm5DdXJyRGF5PSdTdW4nOzwvc2NyaXB0Pgo8c2NyaXB0IHNy Yz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2pzLzMuMC9vbW5pLnRpbWUu anMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0iaHR0cDov L2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2pzLzMuMC9wcm90b2FjdWxvdXMuMS44LjIu bWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0PgoKPHNjcmlwdCBzcmM9Imh0 dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9qcy8zLjAvbWFpbi5qcyIgdHlwZT0i dGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KCTxzY3JpcHQgc3JjPSJodHRwOi8vaS5jZG4udHVy bmVyLmNvbS9jbm4vLmVsZW1lbnQvanMvMy4wL3N3Zm9iamVjdC0yLjIuanMiIHR5cGU9InRleHQv amF2YXNjcmlwdCI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5j b20vY25uLy5lbGVtZW50L2pzLzMuMC9jc2lNYW5hZ2VyLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5l bGVtZW50L2pzLzMuMC9TdG9yYWdlTWFuYWdlci5qcz8yMDEwMDcyOCIgdHlwZT0idGV4dC9qYXZh c2NyaXB0Ij48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0 cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2pzLzMuMC9jb25uZWN0L2Nvbm5lY3Qt bGl0ZS5qcyI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20v Y25uLy5lbGVtZW50L2pzLzMuMC9sb2NhbC5qcz8yMDEwMDgwMiIgdHlwZT0idGV4dC9qYXZhc2Ny aXB0Ij48L3NjcmlwdD4KCgo8c2NyaXB0IHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25u Ly5lbGVtZW50L2pzLzIuMC9jbm5Ta3lwZU9wZW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+ PC9zY3JpcHQ+CgoKCQkJPHNjcmlwdCBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8u ZWxlbWVudC9qcy8zLjAvdmlkZW8vY3ZwX3N1cHBsLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi Pjwvc2NyaXB0PgoJCQk8c2NyaXB0IHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5l bGVtZW50L2pzLzMuMC92aWRlby9jdnAuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3Jp cHQ+CgkJCTxzY3JpcHQgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS94c2xvL2N2cC9hZHMv ZnJlZXdoZWVsL2pzL2Z3anNsaWJfMS4xLmpzP3ZlcnNpb249MS4xIiB0eXBlPSJ0ZXh0L2phdmFz Y3JpcHQiPjwvc2NyaXB0PgoKCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCXZhciBj bm5DVlBBZFNlY3Rpb24gPSAnZWRpdGlvbi5jbm4uY29tX21haW5faG9tZXBhZ2UnOwo8L3Njcmlw dD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgIHZhciBjbm5Jc1NlY3Rpb25Q YWdlID0gdHJ1ZTsKPC9zY3JpcHQ+CgoKCjxzdHlsZT4KI2Nubl9tdHQxcmd0YXJlYSAuY25uX2J1 bGxldGJpbiAuY25uV09PTCB7bWFyZ2luLXJpZ2h0OjRweDt9IAoKI2Nubl9tdHQxbGZ0YXJlYSB1 bCB7IGxpc3Qtc3R5bGUtdHlwZTpub25lOyB9IC8qIHRoZSBGaXhlcyBub24gbGluayBidWxsZXRz IGluIFQxIGJsdXJiLiAyMDEwMDIyNyBQQkIgKi8KPC9zdHlsZT4KCjxzY3JpcHQgdHlwZT0idGV4 dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9q cy8yLjAvYWRfaGVhZDAuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw dCIgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vY25uX2Fkc3BhY2VzL2Nubl9hZHNw YWNlcy5qcyI+PC9zY3JpcHQ+CjwvaGVhZD48Ym9keSBpZD0iY25uTWFpblBhZ2UiPiAgIDwhLS0g YmVnaW4gZGVmYXVsdCBpbnRlcm5hdGlvbmFsIGhlYWRlciAtLT4KPCEtLSBUT0RPOiB1bm9idHJ1 c2l2ZSBqcyByZWZhY3RvciAtLT4KPGRpdiBpZD0iY25uX2hkciI+Cgk8ZGl2IGlkPSJjbm5faGRy LXByb21wdCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgoJCTxkaXYgY2xhc3M9Imhkci13cmFwIiBp ZD0iY25uX2hkci1wcm9tcHRjbnRudCI+CgkJPC9kaXY+Cgk8L2Rpdj4KCTxkaXYgaWQ9ImNubl9o ZHItbWFpbiI+CgkJPGRpdiBjbGFzcz0iaGRyLXdyYXAiPgoJCQk8ZGl2IGlkPSJoZHItYmFubmVy Ij4KCQkJCTxoMT4KCQkJCQk8c3Bhbj5DTk48L3NwYW4+CgkJCQkJPGEgaWQ9Imhkci1iYW5uZXIt dGl0bGUiIGhyZWY9Ii8iIHRpdGxlPSIiPgoJCQkJCQk8aW1nIHNyYz0iaHR0cDovL2kuY2RuLnR1 cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvZ2xvYmFsL2hlYWRlci9pbnRsL2hkci1nbG9i ZS1jZW50cmFsLmdpZiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI4MiIgYWx0PSJDTk4iIC8+CgkJCQkJ PC9hPgoJCQkJPC9oMT4KCQkJPC9kaXY+CgkJCTxkaXYgaWQ9Imhkci1lZGl0aW9ucyI+CgkJCQk8 dWw+CgkJCQkJPGxpIGNsYXNzPSJuby1wYWQtbGVmdCI+PHNwYW4+RURJVElPTjogJm5ic3A7SU5U RVJOQVRJT05BTDwvc3Bhbj48L2xpPgoJCQkJCTxsaT48YSBpZD0iY25uX3N3aXRjaEVkaXRpb25f dXMiIGhyZWY9Imh0dHA6Ly91cy5jbm4uY29tLyIgdGl0bGU9IkNOTiBVUyI+VS5TLjwvYT48L2xp PgoJCQkJCTxsaT48YSBocmVmPSJodHRwOi8vd3d3LmNubm1leGljby5jb20vIiB0aXRsZT0iQ05O IE0mRWFjdXRlO1hJQ08iPk0mRWFjdXRlO1hJQ088L2E+PC9saT4KCQkJCQk8bGkgY2xhc3M9Im5v LWJvcmRlciI+PGEgaHJlZj0iaHR0cDovL2FyYWJpYy5jbm4uY29tLyIgdGl0bGU9IkNOTiBBUkFC SUMiPkFSQUJJQzwvYT48L2xpPgoJCQkJPC91bD4KCQkJCTxkaXYgaWQ9ImNubl9oZHItZWRpdGlv blMiPjxhIGhyZWY9ImphdmFzY3JpcHQ6Y25uX2luaXRlZGl0aW9uaHRtbCgzKTsiPlNldCBlZGl0 aW9uIHByZWZlcmVuY2U8L2E+PC9kaXY+CgkJCTwvZGl2PgoJCQk8ZGl2IGlkPSJoZHItYXV0aCI+ CgkJCQk8dWw+CgkJCQkJPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0i c2hvd092ZXJsYXkoJ3Byb2ZpbGVfc2lnbnVwX292ZXJsYXknKTtyZXR1cm4gZmFsc2U7IiB0aXRs ZT0iIj5TaWduIHVwPC9hPjwvbGk+CgkJCQkJPGxpIGNsYXNzPSJuby1ib3JkZXIgbm8tcGFkLXJp Z2h0Ij48YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNob3dPdmVybGF5KCdw cm9maWxlX3NpZ25pbl9vdmVybGF5Jyk7cmV0dXJuIGZhbHNlOyIgdGl0bGU9IiI+TG9nIGluPC9h PjwvbGk+CgkJCQk8L3VsPgoJCQk8L2Rpdj4KCQkJPGRpdiBpZD0iaGRyLXNlYXJjaCI+CgkJCQk8 Zm9ybSBtZXRob2Q9ImdldCIgYWN0aW9uPSIvc2VhcmNoLyIgb25zdWJtaXQ9InJldHVybiBjbm5T ZWFyY2godGhpcyk7Ij4KCQkJCQk8ZGl2IGNsYXNzPSJmdHItc2VhcmNoLWRhdGFjbnRyIj4KPGRp diBjbGFzcz0iZnRyLXNlYXJjaC10ZmllbGQiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJxdWVy eSIgc2l6ZT0iMTIiIG1heGxlbmd0aD0iNDAiIHZhbHVlPSIiIGlkPSJoZHItc2VhcmNoLWJveCI+ PC9kaXY+CjxkaXYgY2xhc3M9ImZ0ci1zZWFyY2gtc2ljb24iPjxpbnB1dCB0eXBlPSJpbWFnZSIg c3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC9zZWFyY2gv YnRuX3NlYXJjaF9ocF90ZXh0LmdpZiIgd2lkdGg9IjU1IiBoZWlnaHQ9IjIxIiBhbHQ9IiI+PC9k aXY+CjwvZGl2PgoJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InByaW1hcnlUeXBlIiBp ZD0iY25uSGVhZFNyY2hUeXBlIiB2YWx1ZT0ibWl4ZWQiPgoJCQkJPC9mb3JtPgoKPHNjcmlwdD4K Ci8vRXZlbnQub2JzZXJ2ZSh3aW5kb3csICdsb2FkJywgZnVuY3Rpb24oKSB7CgkJLy8kKCdoZHIt c2VhcmNoLWJveCcpLmZvY3VzKCk7CgkvL30pOwkKCQo8L3NjcmlwdD4KCjxzdHlsZT4KCiNoZHIt ZWRpdGlvbnMgYSB7IHRleHQtZGVjb3JhdGlvbjpub25lOyB9CiNjbm5faGRyLWVkaXRpb25TIHsg dGV4dC1hbGlnbjpsZWZ0O2NsZWFyOmJvdGg7IH0KI2Nubl9oZHItZWRpdGlvblMgYSB7IHRleHQt ZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxMHB4O3RvcDo3cHg7bGluZS1oZWlnaHQ6MTJweDtm b250LXdlaWdodDpib2xkOyB9CiNoZHItcHJvbXB0LXRleHQgYiB7IGRpc3BsYXk6aW5saW5lLWJs b2NrO21hcmdpbjowIDAgMCAyMHB4OyB9CiNoZHItZWRpdGlvbnMgbGkgeyBwYWRkaW5nOjAgMTBw eDsgfQoKI2hkci1lZGl0aW9ucyB1bCBsaS5uby1wYWQtbGVmdCBzcGFuIHsgZm9udC1zaXplOjEy cHg7IH0KLmhkci1hcnJvdy1pbnRsLCAuaGRyLWFycm93LXVzLCAuaGRyLWFycm93LXVzMiB7IGxl ZnQ6MTQ4cHg7IH0KLmhkci1hcnJvdy11czIgeyBsZWZ0OjE4MHB4OyB9Cgo8L3N0eWxlPgoKCQkJ PC9kaXY+CgkJPC9kaXY+Cgk8L2Rpdj4KCTxkaXYgaWQ9ImNubl9oZHItbmF2Ij4KCQk8dWwgaWQ9 ImludGwtbWVudSI+CgkJCTxsaSBjbGFzcz0ibm8tYm9yZGVyIj48YSBpZD0ibmF2LWhvbWUiIGNs YXNzPSJuYXYtbWVkaWEgbm8tYm9yZGVyIG5hdi1vbiIgaHJlZj0iLyIgdGl0bGU9IkJyZWFraW5n LCBXb3JsZCwgQnVzaW5lc3MsIFNwb3J0cywgRW50ZXJ0YWlubWVudCBhbmQgVmlkZW8gTmV3cyBm cm9tIENOTi5jb20gSW50ZXJuYXRpb25hbCI+SG9tZTwvYT48L2xpPgoJCQk8bGkgY2xhc3M9Im5v LWJvcmRlciI+PGEgaWQ9Im5hdi12aWRlbyIgY2xhc3M9Im5hdi1tZWRpYSBuby1ib3JkZXIiIGhy ZWY9Ii92aWRlby8iIHRpdGxlPSJCcmVha2luZyBOZXdzIFZpZGVvcyBmcm9tIENOTi5jb20gSW50 ZXJuYXRpb25hbCI+VmlkZW88L2E+PC9saT4KCQkJPGxpPjxhIGlkPSJuYXYtd29ybGQiIGhyZWY9 Ii9XT1JMRC8iIHRpdGxlPSJXb3JsZCBOZXdzIEhlYWRsaW5lcyBhbmQgVmlkZW8gZnJvbSBDTk4u Y29tIEludGVybmF0aW9uYWwiPldvcmxkPC9hPjwvbGk+CgkJCTxsaT48YSBpZD0ibmF2LXVzIiBo cmVmPSIvVVMvIiB0aXRsZT0iVS5TLiBOZXdzIEhlYWRsaW5lcyBhbmQgVmlkZW8gZnJvbSBDTk4u Y29tIEludGVybmF0aW9uYWwiPlUuUy48L2E+PC9saT4KCQkJPGxpPjxhIGlkPSJuYXYtYWZyaWNh IiBocmVmPSIvQUZSSUNBLyIgdGl0bGU9IkFmcmljYSBOZXdzIEhlYWRsaW5lcyBhbmQgVmlkZW8g ZnJvbSBDTk4uY29tIEludGVybmF0aW9uYWwiPkFmcmljYTwvYT48L2xpPgoJCQk8bGk+PGEgaWQ9 Im5hdi1hc2lhIiBocmVmPSIvQVNJQS8iIHRpdGxlPSJBc2lhIE5ld3MgSGVhZGxpbmVzIGFuZCBW aWRlbyBmcm9tIENOTi5jb20gSW50ZXJuYXRpb25hbCI+QXNpYTwvYT48L2xpPgoJCQk8bGk+PGEg aWQ9Im5hdi1ldXJvcGUiIGhyZWY9Ii9FVVJPUEUvIiB0aXRsZT0iRXVyb3BlIE5ld3MgSGVhZGxp bmVzIGFuZCBWaWRlbyBmcm9tIENOTi5jb20gSW50ZXJuYXRpb25hbCI+RXVyb3BlPC9hPjwvbGk+ CgkJCTxsaT48YSBpZD0ibmF2LWxhdGluLWFtZXJpY2EiIGhyZWY9Ii9MQVRJTkFNRVJJQ0EvIiB0 aXRsZT0iTGF0aW4gQW1lcmljYSBOZXdzIEhlYWRsaW5lcyBhbmQgVmlkZW8gZnJvbSBDTk4uY29t IEludGVybmF0aW9uYWwiPkxhdGluIEFtZXJpY2E8L2E+PC9saT4KCQkJPGxpPjxhIGlkPSJuYXYt bWlkZGxlLWVhc3QiIGhyZWY9Ii9NSURETEVFQVNULyIgdGl0bGU9Ik1pZGRsZSBFYXN0IE5ld3Mg SGVhZGxpbmVzIGFuZCBWaWRlbyBmcm9tIENOTi5jb20gSW50ZXJuYXRpb25hbCI+TWlkZGxlIEVh c3Q8L2E+PC9saT4KCQkJPGxpPjxhIGlkPSJuYXYtYnVzaW5lc3MiIGhyZWY9Ii9CVVNJTkVTUy8i IHRpdGxlPSJXb3JsZCBCdXNpbmVzcyBOZXdzIEhlYWRsaW5lcyBhbmQgVmlkZW8gZnJvbSBDTk4u Y29tIEludGVybmF0aW9uYWwiPkJ1c2luZXNzPC9hPjwvbGk+CgkJCTxsaT48YSBpZD0ibmF2LXdv cmxkLXNwb3J0IiBocmVmPSIvU1BPUlQvIiB0aXRsZT0iV29ybGQgU3BvcnQgTmV3cyBIZWFkbGlu ZXMgYW5kIFZpZGVvIGZyb20gQ05OLmNvbSBJbnRlcm5hdGlvbmFsIj5Xb3JsZCBTcG9ydDwvYT48 L2xpPgoJCQk8bGk+PGEgaWQ9Im5hdi1lbnRlcnRhaW5tZW50IiBocmVmPSIvU0hPV0JJWi8iIHRp dGxlPSJFbnRlcnRhaW5tZW50IE5ld3MgSGVhZGxpbmVzIGFuZCBWaWRlbyBmcm9tIENOTi5jb20g SW50ZXJuYXRpb25hbCI+RW50ZXJ0YWlubWVudDwvYT48L2xpPgoJCQk8bGk+PGEgaWQ9Im5hdi10 ZWNoIiBocmVmPSIvVEVDSC8iIHRpdGxlPSJUZWNobm9sb2d5IE5ld3MgSGVhZGxpbmVzIGFuZCBW aWRlbyBmcm9tIENOTi5jb20gSW50ZXJuYXRpb25hbCI+VGVjaDwvYT48L2xpPgoJCQk8bGk+PGEg aWQ9Im5hdi10cmF2ZWwiIGhyZWY9Ii9UUkFWRUwvIiB0aXRsZT0iVHJhdmVsIE5ld3MgSGVhZGxp bmVzIGFuZCBWaWRlbyBmcm9tIENOTi5jb20gSW50ZXJuYXRpb25hbCI+VHJhdmVsPC9hPjwvbGk+ CgkJCTxsaT48YSBpZD0ibmF2LWlyZXBvcnQiIGhyZWY9Imh0dHA6Ly93d3cuaXJlcG9ydC5jb20v IiB0aXRsZT0iQ05OIGlSZXBvcnQgJm5kYXNoOyBTaGFyZSB5b3VyIHN0b3J5LCBkaXNjdXNzIHRo ZSBpc3N1ZXMgd2l0aCBDTk4uY29tIEludGVybmF0aW9uYWwiPmlSZXBvcnQ8L2E+PC9saT4KCQk8 L3VsPgoJPC9kaXY+CjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vIHN3 aXRjaGluZyBiYW5uZXJzIC0gZm9yIHNlY3Rpb25zIHJlbW92ZSB0aGlzIGFuZCBoYXJkY29kZSBw cm9wZXIgZ2xvYmUgaW1hZ2UKdmFyIGNubkNkblBhdGggPSAnaHR0cDovL2kuY2RuLnR1cm5lci5j b20vY25uLy5lbGVtZW50L2ltZy8zLjAvZ2xvYmFsL2hlYWRlci9pbnRsLyc7CnZhciBjbm5JbnRs QmFubmVycyA9IFsKCSc8aW1nIHNyYz0iJyArIGNubkNkblBhdGggKyAnaGRyLWdsb2JlLXdlc3Qu Z2lmIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjgyIiBhbHQ9IiI+JywKCSc8aW1nIHNyYz0iJyArIGNu bkNkblBhdGggKyAnaGRyLWdsb2JlLWNlbnRyYWwuZ2lmIiB3aWR0aD0iMTkwIiBoZWlnaHQ9Ijgy IiBhbHQ9IiI+JywKCSc8aW1nIHNyYz0iJyArIGNubkNkblBhdGggKyAnaGRyLWdsb2JlLWVhc3Qu Z2lmIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjgyIiBhbHQ9IiI+JwpdOwp2YXIgY25uUk51bSA9IE1h dGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNubkludGxCYW5uZXJzLmxlbmd0aCk7CmRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCdoZHItYmFubmVyLXRpdGxlJykuaW5uZXJIVE1MID0gY25uSW50bEJh bm5lcnNbY25uUk51bV07Cjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ Cgo8L3NjcmlwdD4KPCEtLSBlbmQgaGVhZGVyIC0tPgoKCgo8IS0tIFRyYWNraW5nIHZhbHVlcyAt LT4KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K PCEtLQp2YXIgY25uUGFnZU5hbWUgPSAiQ05OIEludGVybmF0aW9uYWwgSG9tZSBQYWdlIjsKdmFy IGNublNlY3Rpb25OYW1lID0gIkNOTiBJbnRlcm5hdGlvbmFsIEhvbWUgUGFnZSI7CnZhciBzZWxl Y3RlZEVkaXRpb24gPSBhbGxDb29raWVzWydTZWxlY3RlZEVkaXRpb24nXTsKLy8tLT48L3Njcmlw dD4KCjxkaXYgYWxpZ249ImNlbnRlciI+PGRpdiBpZD0iY25uX21haW5jbnRuciI+ICAgICAgIDwh LS0gdGhpcyBpcyB3aGVyZSB0aGUgYnJlYWtpbmcgbmV3cyBDU0kgY29kZSB3aWxsIGdvIC0tPgo8 ZGl2IGlkPSJjbm5CYW5uZXJDb250YWluZXIiPjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2 YXNjcmlwdCI+CkNTSU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5jYWxsKCcvLmVsZW1lbnQvc3NpL2lu dGwvYnJlYWtpbmdfbmV3cy8zLjAvYmFubmVyLmh0bWwnLCcnLCdjbm5CYW5uZXJDb250YWluZXIn LGNublJlbmRlckludGVybmF0aW9uYWxCYW5uZXIpOwo8L3NjcmlwdD4KPGRpdiBpZD0iY25uU2V0 RWRpdGlvbkNvbnRhaW5lciI+PC9kaXY+CjxkaXYgaWQ9ImNubk1ha2VIUENvbnRhaW5lciI+PC9k aXY+CgogICAgPGRpdiBjbGFzcz0iY25uX2NvbnRlbnRhcmVhIGNubl9zaGRjYW10dDEiPjxkaXYg aWQ9ImNubl90b3B0c3RtcGFyZWEiPjxzcGFuPk9jdG9iZXIgMywgMjAxMCAtLSBVcGRhdGVkIDE0 MzUgR01UICgyMjM1IEhLVCk8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY25uX3NoZGNhaGVhZGVy Ij48L2Rpdj48ZGl2IGlkPSJjbm5fbWFpbnRvcHQxIj48ZGl2IGlkPSJjbm5fbWFpbnQxbGZ0ZiI+ PGRpdiBpZD0iY25uX21haW50dDFpbWdidWwiPiAgICAgICA8ZGl2IGNsYXNzPSJjbm5fcmVscG9z dG4iPjxkaXYgY2xhc3M9ImNubl9tdHQxaW1nIj48YSBocmVmPSIvMjAxMC9XT1JMRC9hc2lhcGNm LzEwLzAzL2luZGlhLmNvbW1vbndlYWx0aC5nYW1lcy9pbmRleC5odG1sP2hwdD1UMSI+PGltZyBz cmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8yMDEwL1dPUkxEL2FzaWFwY2YvMTAvMDMv aW5kaWEuY29tbW9ud2VhbHRoLmdhbWVzL3QxbWFpbi5jZXJlbW9ueS5kcnVtcy5naS5qcGciIHdp ZHRoPSIyNTAiIGhlaWdodD0iMjUwIiBhbHQ9IkNvbW1vbndlYWx0aCBHYW1lcyBvcGVuaW5nIGNl cmVtb255IGJlZ2lucyIgYm9yZGVyPSIwIiBoc3BhY2U9IjAiIHZzcGFjZT0iMCI+PC9hPjwvZGl2 PjxkaXYgY2xhc3M9ImNubl9tdHQxaW1naCI+PGRpdiBjbGFzcz0iY25uX210dDFpbWdodGl0bGUi PjxoMT48c3Bhbj48YSBocmVmPSIvMjAxMC9XT1JMRC9hc2lhcGNmLzEwLzAzL2luZGlhLmNvbW1v bndlYWx0aC5nYW1lcy9pbmRleC5odG1sP2hwdD1UMSI+Q29tbW9ud2VhbHRoIEdhbWVzIG9wZW5p bmcgY2VyZW1vbnkgYmVnaW5zPC9hPjwvc3Bhbj48L2gxPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYg Y2xhc3M9ImNubl9tdHQxY29udGVudCI+PGRpdiBpZD0iY25uX210dDFsZnRhcmVhIj48cD5UaGUg MjAxMCBDb21tb253ZWFsdGggR2FtZXMgZmluYWxseSBvcGVuIFN1bmRheSBpbiBOZXcgRGVsaGks IGZvbGxvd2luZyBhIGJ1aWxkLXVwIGRvbWluYXRlZCBieSBmZWFycyBJbmRpYSB3b3VsZCBub3Qg YmUgcmVhZHkgdG8gaG9zdCB0aGUgc3BvcnRpbmcgc2hvd2Nhc2UuIDxhIGhyZWY9Ii8yMDEwL1dP UkxEL2FzaWFwY2YvMTAvMDMvaW5kaWEuY29tbW9ud2VhbHRoLmdhbWVzL2luZGV4Lmh0bWw/aHB0 PVQxIj5GVUxMIFNUT1JZPC9hPjwvcD48L2Rpdj48ZGl2IGlkPSJjbm5fbXR0MXJndGFyZWEiPjx1 bCBjbGFzcz0iY25uX2J1bGxldGJpbiI+ICAgIDxsaT4gICAgICAgPGEgaHJlZj0iL3ZpZGVvLyMv dmlkZW8vd29ybGQvMjAxMC8xMC8wMS9zaWRuZXIuaW5kaWEuZ2FtZXMuZXllc29yZS5jbm4iPlJl bW92aW5nICdleWVzb3JlcycgZm9yIEdhbWVzPC9hPiA8YSBocmVmPSIvdmlkZW8vIy92aWRlby93 b3JsZC8yMDEwLzEwLzAxL3NpZG5lci5pbmRpYS5nYW1lcy5leWVzb3JlLmNubiI+PGltZyBzcmM9 Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcvMy4wL2dsb2JhbC9pY29u cy92aWRlb19pY29uLmdpZiIgYWx0PSJWaWRlbyIgYm9yZGVyPSIwIiB3aWR0aD0iMTYiIGhlaWdo dD0iMTAiIGNsYXNzPSJjbm5WaWRlb0ljb24iPjwvYT48L2xpPiAgIDwvdWw+PC9kaXY+PGRpdiBj bGFzcz0iY25uX2NsZWFyIj48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fZGl2bGluZSI+PC9kaXY+PC9k aXY+ICAgPC9kaXY+PGRpdiBjbGFzcz0iY25uX21haW50MWRsaW5lIj48L2Rpdj48ZGl2IGlkPSJj bm5fbWFpbnR0MmJ1bCI+PGRpdiBjbGFzcz0iY25uX210dDFjb250ZW50Ij4gICA8aDQ+VG9wIHN0 b3JpZXM8L2g0Pjx1bCBjbGFzcz0iY25uX2J1bGxldGJpbiI+PGxpPjxhIGhyZWY9Ii8yMDEwL1dP UkxEL2V1cm9wZS8xMC8wMy9ldXJvcGUudGVycm9yLmFkdmlzb3J5L2luZGV4Lmh0bWw/aHB0PVQy Ij5VLlMuIGlzc3VlcyBFdXJvcGUgdHJhdmVsIGFsZXJ0PC9hPiAgICAgICA8L2xpPjxsaT48YSBo cmVmPSIvMjAxMC9XT1JMRC9tZWFzdC8xMC8wMy9pcmFuLm51Y2xlYXIuYXJyZXN0cy9pbmRleC5o dG1sP2hwdD1UMiI+SXJhbiBhZG1pdHMgdG8gYXJyZXN0IG9mICdudWNsZWFyIHNwaWVzJzwvYT4g ICAgICAgPC9saT48bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvYW1lcmljYXMvMTAvMDMvYnJhemls LmVsZWN0aW9uL2luZGV4Lmh0bWw/aHB0PVQyIj5FeC1yZWJlbCBhaGVhZCBhcyBCcmF6aWxpYW5z IGdvIHRvIHBvbGxzPC9hPiAgICAgICA8L2xpPjxsaT48YSBocmVmPSIvMjAxMC9XT1JMRC9hZnJp Y2EvMTAvMDIvbmlnZXJpYS5kZWF0aC50b2xsL2luZGV4Lmh0bWw/aHB0PVQyIj5UaHJlZSBoZWxk IG92ZXIgTmlnZXJpYSB0ZXJyb3IgYXR0YWNrPC9hPiAgICAgICA8L2xpPjxsaT48YSBocmVmPSIv MjAxMC9XT1JMRC9ldXJvcGUvMTAvMDMvYm9zbmlhLmVsZWN0aW9ucy9pbmRleC5odG1sP2hwdD1U MiI+Qm9zbmlhbnMgdm90ZSBmb3IgbmV3IHByZXNpZGVudDwvYT4gICAgICAgPC9saT48bGk+PGEg aHJlZj0iLzIwMTAvV09STEQvbWVhc3QvMTAvMDMvaXNyYWVsLmJvcmRlci5wb2xpY2Uuc2hvb3Rp bmcvaW5kZXguaHRtbD9ocHQ9VDIiPlBhbGVzdGluaWFuIHNob3QgZGVhZCBieSBJc3JhZWxpIHBv bGljZTwvYT4gICAgICAgPC9saT48bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvbWVhc3QvMTAvMDMv aXNyYWVsLmdhemEuY29udmljdGlvbi9pbmRleC5odG1sP2hwdD1UMiI+U29sZGllcnMgY29udmlj dGVkIGZvciBHYXphIGFjdGlvbnM8L2E+ICAgICAgIDwvbGk+PGxpPjxhIGhyZWY9Ii8yMDEwL1dP UkxEL2FzaWFwY2YvMTAvMDMvcGFraXN0YW4ua2lsbGluZ3MvaW5kZXguaHRtbD9ocHQ9VDIiPlRo cmVlICdzcGllcycga2lsbGVkIGluIFBha2lzdGFuPC9hPiAgICAgICA8L2xpPjxsaT48YSBocmVm PSIvMjAxMC9XT1JMRC9hc2lhcGNmLzEwLzAzL2FmZ2hhbmlzdGFuLmJhbm5lZC5maXJtcy9pbmRl eC5odG1sP2hwdD1UMiI+UHJpdmF0ZSBzZWN1cml0eSBmaXJtcyBnaXZlbiBBZmdoYW4gYmFuPC9h PiAgICAgICA8L2xpPjxsaT48YSBocmVmPSIvMjAxMC9XT1JMRC9hZnJpY2EvMTAvMDIvZ3VpbmVh LnJ1bm9mZi9pbmRleC5odG1sP2hwdD1UMiI+R3VpbmVhIHByZXNpZGVudGlhbCBydW5vZmYgZmFj ZXMgZGVsYXlzPC9hPiAgICAgICA8L2xpPjxsaT48YSBocmVmPSJodHRwOi8vbmV3cy5ibG9ncy5j bm4uY29tLzIwMTAvMTAvMDIvYXJtZWQtZ2FuZy1hYmR1Y3RzLWJ1c2xvYWQtb2YtdG91cmlzdHMt aW4tbWV4aWNvLz9ocHQ9VDIiPkd1bm1lbiBhYmR1Y3QgMjIgdG91cmlzdHMgaW4gTWV4aWNvPC9h PiAgICAgICA8L2xpPjxsaT48YSBocmVmPSIvMjAxMC9XT1JMRC9hbWVyaWNhcy8xMC8wMi9wYXJh Z3VheS5wcmVzaWRlbnQuY2FuY2VyL2luZGV4Lmh0bWw/aHB0PVQyIj5QYXJhZ3VheWFuIHByZXNp ZGVudCBob3NwaXRhbGl6ZWQ8L2E+ICAgICAgIDwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cu Z29sZi5jb20vZ29sZi90b3Vyc19uZXdzL2xlYWRlcmJvYXJkL3J5ZGVyY3VwIiB0YXJnZXQ9Im5l dyI+TGF0ZXN0OiBFdXJvcGUgZmlnaHRzIGJhY2sgaW4gUnlkZXIgQ3VwPC9hPiAgICAgICA8L2xp PjxsaT48YSBocmVmPSIvMjAxMC9TUE9SVC9mb290YmFsbC8xMC8wMi9idW5kZXNsaWdhLnNhdHVy ZGF5LnJvdW5kdXAubWFpbnovaW5kZXguaHRtbD9ocHQ9VDIiPk1pbm5vd3MgdGFrZSBHZXJtYW4g Zm9vdGJhbGwgYnkgc3Rvcm08L2E+ICAgICAgIDwvbGk+ICAgPC91bD4gICA8ZGl2IGNsYXNzPSJj bm5fbXR0MW1vcmUiPjxhIGhyZWY9Ii9tb3N0cG9wdWxhci8/aHB0PVQyIiBjbGFzcz0iY25uX210 cHZtc2J0biI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9p bWcvMy4wLzFweC5naWYiIGJvcmRlcj0iMCI+PC9hPjwvZGl2Pgo8L2Rpdj48L2Rpdj48L2Rpdj48 ZGl2IGlkPSJjbm5fbWFpbnRvcGxpdmUiPiAgIDxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRp diBjbGFzcz0iY25uX210dDFpbWciPjxhIGhyZWY9Ii8yMDEwL1NQT1JUL2dvbGYvMTAvMDEvZ29s Zi5yeWRlci5jdXAud2l2ZXMvaW5kZXguaHRtbD9ocHQ9QzEiPjxpbWcgc3JjPSJodHRwOi8vaS5j ZG4udHVybmVyLmNvbS9jbm4vMjAxMC9TUE9SVC9nb2xmLzEwLzAxL2dvbGYucnlkZXIuY3VwLndp dmVzL2MxbWFpbi53aXZlNDkuZ2kuanBnIiB3aWR0aD0iNDE2IiBoZWlnaHQ9IjIzNCIgYWx0PSJC ZWhpbmQgZXZlcnkgZ3JlYXQgZ29sZmVyIGlzLi4uIiBib3JkZXI9IjAiIGhzcGFjZT0iMCIgdnNw YWNlPSIwIj48L2E+PC9kaXY+PGRpdiBjbGFzcz0iY25uX210dDFpbWdoIj48ZGl2IGNsYXNzPSJj bm5fbXR0MWltZ2h0aXRsZSI+PGgxPjxzcGFuPjxhIGhyZWY9Ii8yMDEwL1NQT1JUL2dvbGYvMTAv MDEvZ29sZi5yeWRlci5jdXAud2l2ZXMvaW5kZXguaHRtbD9ocHQ9QzEiPkJlaGluZCBldmVyeSBn cmVhdCBnb2xmZXIgaXMuLi48L2E+PC9zcGFuPjwvaDE+PC9kaXY+PC9kaXY+PC9kaXY+PHA+VGhl IG1lbiBjb21wZXRpbmcgaW4gdGhpcyB3ZWVrZW5kJ3MgUnlkZXIgQ3VwIGJldHdlZW4gRXVyb3Bl IGFuZCBBbWVyaWNhIG1heSBncmFiIHRoZSBhdHRlbnRpb24gb2YgdGhlIHdvcmxkJ3MgbWVkaWEs IGJ1dCB0aGUgcGxheWVycycgd2l2ZXMgaGF2ZSBhbHdheXMgaGFkIGEgcm9sZSB0byBwbGF5IGlu IHRoaXMgY29tcGV0aXRpb24uIDxhIGhyZWY9Ii8yMDEwL1NQT1JUL2dvbGYvMTAvMDEvZ29sZi5y eWRlci5jdXAud2l2ZXMvaW5kZXguaHRtbD9ocHQ9QzEiPkZVTEwgU1RPUlk8L2E+PC9wPjxoMz48 c3Bhbj5ISUdITElHSFRTPC9zcGFuPjwvaDM+PGRpdiBpZD0iY25uX210bHBsYXlsaXN0Ij4gPGRp diBjbGFzcz0iY25uX210bHBsbm9kZSAiPjxkaXYgY2xhc3M9ImNubl9tdGxwbG5pbWciPiAgIDxh IGhyZWY9Ii8yMDEwL1dPUkxEL21lYXN0LzEwLzAzL2lyYW4ubWlkZWFzdC5wZWFjZS50YWxrcy9p bmRleC5odG1sP2hwdD1DMiI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8y MDEwL1dPUkxEL21lYXN0LzEwLzAzL2lyYW4ubWlkZWFzdC5wZWFjZS50YWxrcy90enZpZHMuaXJh bi5haG1hZGluZWphZC5naS5qcGciIHdpZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iSXJhbiBz ZWVrcyBtb3JlIE1pZGVhc3QgaW5mbHVlbmNlIiBib3JkZXI9IjAiPjwvYT48L2Rpdj48YSBocmVm PSIvMjAxMC9XT1JMRC9tZWFzdC8xMC8wMy9pcmFuLm1pZGVhc3QucGVhY2UudGFsa3MvaW5kZXgu aHRtbD9ocHQ9QzIiPklyYW4gc2Vla3MgbW9yZSBNaWRlYXN0IGluZmx1ZW5jZTwvYT4gICAgICAg PC9kaXY+IDxkaXYgY2xhc3M9ImNubl9tdGxwbG5vZGUgIj48ZGl2IGNsYXNzPSJjbm5fbXRscGxu aW1nIj4gICA8YSBocmVmPSJodHRwOi8vcmVsaWdpb24uYmxvZ3MuY25uLmNvbS8yMDEwLzEwLzAy L2JyaXRhaW4tcmVjb2duaXplcy1kcnVpZHJ5LWFzLXJlbGlnaW9uLWZvci1maXJzdC10aW1lLWdp dmVzLWl0LWNoYXJpdGFibGUtc3RhdHVzLz9ocHQ9QzIiPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4u dHVybmVyLmNvbS9jbm4vMjAxMC9pbWFnZXMvMTAvMDMvdHp2aWRzLmRydWlkcy5qcGciIHdpZHRo PSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iQnJpdGFpbidzIGRydWlkcyBzdW1tb24gbG9zdCBzdGF0 dXMiIGJvcmRlcj0iMCI+PC9hPjwvZGl2PjxhIGhyZWY9Imh0dHA6Ly9yZWxpZ2lvbi5ibG9ncy5j bm4uY29tLzIwMTAvMTAvMDIvYnJpdGFpbi1yZWNvZ25pemVzLWRydWlkcnktYXMtcmVsaWdpb24t Zm9yLWZpcnN0LXRpbWUtZ2l2ZXMtaXQtY2hhcml0YWJsZS1zdGF0dXMvP2hwdD1DMiI+QnJpdGFp bidzIGRydWlkcyBzdW1tb24gbG9zdCBzdGF0dXM8L2E+ICAgICAgIDwvZGl2PiA8ZGl2IGNsYXNz PSJjbm5fbXRscGxub2RlICI+PGRpdiBjbGFzcz0iY25uX210bHBsbmltZyI+ICAgPGEgaHJlZj0i LzIwMTAvV09STEQvYWZyaWNhLzEwLzAyL2VneXB0LnBoYXJhb2guc3RhdHVlL2luZGV4Lmh0bWw/ aHB0PUMyIj48aW1nIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvV09STEQv YWZyaWNhLzEwLzAyL2VneXB0LnBoYXJhb2guc3RhdHVlL3R6dmlkcy5lZ3lwdHN0YXR1ZS5naS5q cGciIHdpZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iU3RhdHVlIG9mIGdyYW5kZmF0aGVyIG9m IEtpbmcgVHV0IHVuZWFydGhlZCIgYm9yZGVyPSIwIj48L2E+PC9kaXY+PGEgaHJlZj0iLzIwMTAv V09STEQvYWZyaWNhLzEwLzAyL2VneXB0LnBoYXJhb2guc3RhdHVlL2luZGV4Lmh0bWw/aHB0PUMy Ij5TdGF0dWUgb2YgZ3JhbmRmYXRoZXIgb2YgS2luZyBUdXQgdW5lYXJ0aGVkPC9hPiAgICAgICA8 L2Rpdj48ZGl2IGNsYXNzPSJjbm5fY2xlYXIiPjwvZGl2PiA8ZGl2IGNsYXNzPSJjbm5fbXRscGxu b2RlICI+PGRpdiBjbGFzcz0iY25uX210bHBsbmltZyI+ICAgPGEgaHJlZj0iLzIwMTAvV09STEQv YW1lcmljYXMvMTAvMDIvY2FuYWRhLnBvdXRpbmUvaW5kZXguaHRtbD9ocHQ9QzIiPjxpbWcgc3Jj PSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9XT1JMRC9hbWVyaWNhcy8xMC8wMi9j YW5hZGEucG91dGluZS90enZpZHMucG91dGluZS5hZnAuZ2kuanBnIiB3aWR0aD0iMTIwIiBoZWln aHQ9IjY4IiBhbHQ9IkNhbmFkYSdzIDc0MC1jYWxvcmllIG5hdGlvbmFsIGRpc2giIGJvcmRlcj0i MCI+PC9hPjwvZGl2PjxhIGhyZWY9Ii8yMDEwL1dPUkxEL2FtZXJpY2FzLzEwLzAyL2NhbmFkYS5w b3V0aW5lL2luZGV4Lmh0bWw/aHB0PUMyIj5DYW5hZGEncyA3NDAtY2Fsb3JpZSBuYXRpb25hbCBk aXNoPC9hPiAgICAgICA8L2Rpdj4gPGRpdiBjbGFzcz0iY25uX210bHBsbm9kZSAiPjxkaXYgY2xh c3M9ImNubl9tdGxwbG5pbWciPiAgIDxhIGhyZWY9Ii8yMDEwL0hFQUxUSC8xMC8wMS9oZWFsdGgu am9iLm1ha2luZy5kZXByZXNzZWQvaW5kZXguaHRtbD9ocHQ9QzIiPjxpbWcgc3JjPSJodHRwOi8v aS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9IRUFMVEgvMTAvMDEvaGVhbHRoLmpvYi5tYWtpbmcu ZGVwcmVzc2VkL3R6dmlkcy5kZXByZXNzZWQuam9icy5qcGciIHdpZHRoPSIxMjAiIGhlaWdodD0i NjgiIGFsdD0iSXMgeW91ciBqb2IgbW9yZSBkZXByZXNzaW9uLXByb25lPyIgYm9yZGVyPSIwIj48 L2E+PC9kaXY+PGEgaHJlZj0iLzIwMTAvSEVBTFRILzEwLzAxL2hlYWx0aC5qb2IubWFraW5nLmRl cHJlc3NlZC9pbmRleC5odG1sP2hwdD1DMiI+SXMgeW91ciBqb2IgbW9yZSBkZXByZXNzaW9uLXBy b25lPzwvYT4gICAgICAgPC9kaXY+IDxkaXYgY2xhc3M9ImNubl9tdGxwbG5vZGUgIj48ZGl2IGNs YXNzPSJjbm5fbXRscGxuaW1nIj4gICA8YSBocmVmPSJodHRwOi8vY29ubmVjdHRoZXdvcmxkLmJs b2dzLmNubi5jb20vMjAxMC8xMC8wMS9nbG9iYWwtY29ubmVjdGlvbnMtdHVya2V5LWFuZC1jaGlu YT9ocHQ9QzIiPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9pbWFn ZXMvMTAvMDEvdHp2aWRzLmNoaW5hLnR1cmtleS5ibG9nLmpwZyIgd2lkdGg9IjEyMCIgaGVpZ2h0 PSI2OCIgYWx0PSJDYW4geW91IGNvbm5lY3QgQ2hpbmEgYW5kIFR1cmtleT8iIGJvcmRlcj0iMCI+ PC9hPjwvZGl2PjxhIGhyZWY9Imh0dHA6Ly9jb25uZWN0dGhld29ybGQuYmxvZ3MuY25uLmNvbS8y MDEwLzEwLzAxL2dsb2JhbC1jb25uZWN0aW9ucy10dXJrZXktYW5kLWNoaW5hP2hwdD1DMiI+Q2Fu IHlvdSBjb25uZWN0IENoaW5hIGFuZCBUdXJrZXk/PC9hPiAgICAgICA8L2Rpdj48ZGl2IGNsYXNz PSJjbm5fY2xlYXIiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImNubl9wYWQxOHRvcCI+PC9kaXY+ PC9kaXY+PGRpdiBjbGFzcz0iY25uX2NsZWFybXQxdDIiPjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImNu bl9tYWludG9wcHJvZmlsZSI+PGRpdiBjbGFzcz0iY25uX3NoZGNvbnRlbnQiPiAgIDwhLS0gc3Rh cnQgZmVlZGJhY2sgbGluayAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tLmNubl9zZWN0 dDRjbnRudHtvdmVyZmxvdzogdmlzaWJsZTt9LmNubk9waW4geyBwb3NpdGlvbjphYnNvbHV0ZTt0 b3A6LTE4cHg7cmlnaHQ6N3B4OyB9LmNubk9waW4gYS5yZWFsbUxpbmsge2ZvbnQtd2VpZ2h0OmJv bGQ7Zm9udC1zaXplOjExcHg7Y29sb3I6IzAwNDI3Njt9LS0+PC9zdHlsZT4KPCEtLVtpZiBsdGUg SUUgN10+PHN0eWxlPi5yZWFsbUxpbmt7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0ycHg7fTwvc3R5 bGU+PCFbZW5kaWZdLS0+CjxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO3RvcDowcHg7bGVm dDowcHg7Ij4KCjxkaXYgY2xhc3M9ImNubk9waW4iPgo8IS0tW2lmIElFXT4KPGEgaHJlZiBjbGFz cz0icmVhbG1MaW5rIiBvbmNsaWNrPSJ0aGlzLnN0eWxlLmJlaGF2aW9yPSd1cmwoI2RlZmF1bHQj aG9tZXBhZ2UpJzt0aGlzLnNldEhvbWVQYWdlKHdpbmRvdy5sb2NhdGlvbik7IiBocmVmPSJKYXZh c2NyaXB0OnZvaWQoKTsiPk1ha2UgQ05OIFlvdXIgSG9tZXBhZ2U8L2E+CjxzdHlsZT4jbWFrZUhQ TGlua3tkaXNwbGF5Om5vbmU7fTwvc3R5bGU+CjwhW2VuZGlmXS0tPgo8YSBocmVmPSIjIiBpZD0i bWFrZUhQTGluayIgb25jbGljaz0iY25uTWFrZUhQKCdob21lcGFnZV9zZXRfb3ZlcmxheScpIiBj bGFzcz0icmVhbG1MaW5rIj5NYWtlIENOTiBZb3VyIEhvbWVwYWdlPC9hPjwvZGl2Pgo8c2NyaXB0 IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ClVBc3RyaW5nPW5hdmlnYXRvci51c2VyQWdlbnQ7Cmlm IChVQXN0cmluZy5pbmRleE9mKCdpUGFkJyk+LTEpeyQoJ21ha2VIUExpbmsnKS5oaWRlKCk7fQpm dW5jdGlvbiBjbm5NYWtlSFAoKSB7CmxpbmtUcmFja0NhbGwoJ01ha2UgQ05OIFlvdXIgSFAgQ2xp Y2snKTsKaWYgKFVBc3RyaW5nLmluZGV4T2YoJ01TSUUnKT4tMSl7fQkKZWxzZXsKQ05OX2hhbmRs ZU92ZXJsYXkoJ2hvbWVwYWdlX3NldF9vdmVybGF5Jyl9Cn0KCmZ1bmN0aW9uIGxpbmtUcmFja0Nh bGwobGlua1ZhbHVlKSB7CgkJdmFyIHM9c19naShzX2FjY291bnQpOwoJCXMubGlua1RyYWNrVmFy cz0nbm9uZSc7CgkJcy5saW5rVHJhY2tFdmVudHM9J25vbmUnOwoJCXMudGwodGhpcywnbycsbGlu a1ZhbHVlKQoJfQo8L3NjcmlwdD4KPC9kaXY+IAo8IS0tIC9mZWVkYmFjayBsaW5rIC0tPg0KPGRp dj4NCgk8c3BhbiBpZD0ibWVkaXVtX3JlY3RhbmdsZSIgY2xhc3M9Il9md3BoIj4NCgkJPGZvcm0g aWQ9Il9md19mb3JtX21lZGl1bV9yZWN0YW5nbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPg0KCQkJ PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iX2Z3X2lucHV0X21lZGl1bV9yZWN0YW5nbGUiIGlk PSJfZndfaW5wdXRfbWVkaXVtX3JlY3RhbmdsZSIgdmFsdWU9Inc9MzAwJmg9MjUwJmVudnA9Z19q cyZzZmxnPS1ucnBsOyI+DQoJCTwvZm9ybT4NCgkJPHNwYW4gaWQ9Il9md19jb250YWluZXJfbWVk aXVtX3JlY3RhbmdsZSIgY2xhc3M9Il9md2FjIj4NCgkJPCEtLSBMRUFWRSBUSElTIEFSRUEgRU1Q VFkgLS0+PCEtLSBBRFNQQUNFOiBob21lcGFnZS9tYWluL3JndC4zMDB4MjUwIC0tPg0KDQoNCg0K DQoNCjwhLS0gQ0FMTE9VVHxodHRwOi8vYWRzLmNubi5jb20vaHRtbC5uZy9zaXRlPWNubl9pbnRl cm5hdGlvbmFsJmNubl9pbnRsX3BhZ2V0eXBlPW1haW4mY25uX2ludGxfcG9zaXRpb249MzAweDI1 MF9yZ3QmY25uX2ludGxfcm9sbHVwPWhvbWVwYWdlJnBhZ2UuYWxsb3djb21wZXRlPXllcyZwYXJh bXMuc3R5bGVzPWZzfENBTExPVVQgLS0+DQo8ZGl2IGlkPSJhZC02OTY2NDQiIGFsaWduPSJjZW50 ZXIiIHN0eWxlPSJwYWRkaW5nOiAwOyBtYXJnaW46IDA7IGJvcmRlcjogMDsiPjwvZGl2Pg0KPHNj cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KY25uYWRfY3JlYXRlQWQoIjY5NjY0NCIsImh0 dHA6Ly9hZHMuY25uLmNvbS9odG1sLm5nL3NpdGU9Y25uX2ludGVybmF0aW9uYWwmY25uX2ludGxf cGFnZXR5cGU9bWFpbiZjbm5faW50bF9wb3NpdGlvbj0zMDB4MjUwX3JndCZjbm5faW50bF9yb2xs dXA9aG9tZXBhZ2UmcGFnZS5hbGxvd2NvbXBldGU9eWVzJnBhcmFtcy5zdHlsZXM9ZnMiLCIyNTAi LCIzMDAiKTsNCmNubmFkX3JlZ2lzdGVyU3BhY2UoNjk2NjQ0LDMwMCwyNTApOw0KPC9zY3JpcHQ+ DQoNCg0KDQoNCg0KDQoNCg0KDQoNCgkJPC9zcGFuPg0KCTwvc3Bhbj4NCjwvZGl2Pg0KDQo8ZGl2 IGNsYXNzPSJjbm5fYWR0aXRsZSI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nu bi8uZWxlbWVudC9pbWcvMy4wL2dsb2JhbC9taXNjL2FkdmVydGlzZW1lbnQuZ2lmIiB3aWR0aD0i NTgiIGhlaWdodD0iNSIgYWx0PSIiIGJvcmRlcj0iMCI+PC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNu bl9kaXZsaW5lIj48L2Rpdj4NCg0KPGRpdiBpZD0icG1Db250YWluZXIiPgoKCTwhLS0gIyMjIFVT RVIgUEFORUwgIyMjIC0tPgogCTxkaXYgaWQ9InBtVXNlclBhbmVsIj4NCgkgICAgPGltZyBpZD0i YXZhdGFySW1nIiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcv My4wL3BlcnNvbmFsaXphdGlvbi8zNXgzNV9nZW5lcmljX2F2YXRhci5naWYiIGFsdD0iIiBoZWln aHQ9IjM1IiB3aWR0aD0iMzUiPg0KCQk8ZGl2IGlkPSJwbUxvZ2dlZEluIiBzdHlsZT0iZGlzcGxh eTogbm9uZTsiPg0KCSAgICAgICAgPHNwYW4gaWQ9InBtVXNlck5hbWUiPjwvc3Bhbj4NCgkgICAg ICAgIDxzcGFuIGlkPSJwbVVzZXJPcHRzIj48YSBpZD0icG1Qcm9maWxlIiBocmVmPSIvcHJvZmls ZS8/c2V0VGFiPW15c2V0dGluZ3MiPnNldHRpbmdzPC9hPjwvc3Bhbj4NCgkgICAgICAgIDxkaXYg aWQ9ImNublVzZUZCIiBzdHlsZT0iZGlzcGxheTpub25lIj48YSBocmVmPSJqYXZhc2NyaXB0OkZC LmxvZ2luKGZiU2Vzc2lvbkhhbmRsZXIpOyI+Q29ubmVjdCB5b3VyIENOTiAmYW1wOyBGYWNlYm9v ayBhY2NvdW50czwvYT48L2Rpdj4NCgkgICAgPC9kaXY+DQoJICAgIDxkaXYgaWQ9InBtTG9nZ2Vk T2ZmIj4NCgkgICAgICAgIDxzcGFuPkhpISA8YSBocmVmPSJqYXZhc2NyaXB0OkNOTl9oYW5kbGVP dmVybGF5KCdwcm9maWxlX3NpZ25pbl9vdmVybGF5JykiID5Mb2cgaW48L2E+IG9yIDxhIGhyZWY9 ImphdmFzY3JpcHQ6Q05OX2hhbmRsZU92ZXJsYXkoJ3Byb2ZpbGVfc2lnbnVwX292ZXJsYXknKSI+ c2lnbiB1cDwvYT4gdG8gcGVyc29uYWxpemUhPC9zcGFuPg0KCSAgICA8L2Rpdj4NCgkgICAgPGRp diBpZD0icG1GQkxvZ2dlZEluIiBzdHlsZT0iZGlzcGxheTpub25lIjs+DQoJICAgICAgICA8c3Bh bj5IaSB0aGVyZSE8ZGl2PjxhIGhyZWY9ImphdmFzY3JpcHQ6Q05OX2hhbmRsZU92ZXJsYXkoJ3By b2ZpbGVfc2lnbmluX292ZXJsYXknKSIgPkxvZyBpbjwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0 OkNOTl9oYW5kbGVPdmVybGF5KCdwcm9maWxlX3NpZ251cF9vdmVybGF5JykiPnNpZ24gdXA8L2E+ PC9kaXY+PC9zcGFuPg0KCSAgICA8L2Rpdj4NCg0KCTwvZGl2Pg0KCgkKCTwhLS0gIyMjIEFDQ09S RElPTiBTVEFSVCAjIyMgLS0+Cgk8ZGl2IGlkPSJwbVNsaWRlYm94IiBjbGFzcz0iYWNjb3JkaW9u Ij4KCiAgICAgICAgICAgICAgICA8IS0tIHN0YXJ0b2YgImZhY2Vib29rIGFjdGl2aXR5IiBzbGlk ZSAtLT4KICAgICAgICAgICAgICAgIDwhLS1baWYgbHRlIElFIDZdPgo8c3R5bGU+CiNjbm5fbWFp bnRvcHByb2ZpbGUgI3BtRmFjZWJvb2ssCiNjbm5fbWFpbnRvcHByb2ZpbGUgI3BtRmFjZWJvb2tU b2dnbGUgewoJZGlzcGxheTogbm9uZTsKfQo8L3N0eWxlPgo8IVtlbmRpZl0tLT4KPGRpdiBpZD0i cG1GYWNlYm9va1RvZ2dsZSIgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUiPgoJPHNwYW4gY2xhc3M9 ImFjY1RpdGxlIiBpZD0icG1GYlRpdGxlIj5Qb3B1bGFyIG9uIEZhY2Vib29rPC9zcGFuPgoJPHNw YW4gY2xhc3M9ImFjY0Fycm93Ij4mbmJzcDs8L3NwYW4+CjwvZGl2Pgo8IS0tIHN0YXJ0b2YgImFj dGl2aXR5IiBzbGlkZSAtLT4KPGRpdiBpZD0icG1GYWNlYm9vayIgY2xhc3M9ImFjY29yZGlvbi1j b250ZW50Ij4KCgk8ZGl2IGlkPSJjbm5fRkJhd09MWSIgY2xhc3M9ImNubl9keW5vbmUiPgoJPGRp diBjbGFzcz0iY25uX0ZCYXdvMSI+PGEgaHJlZj0iamF2YXNjcmlwdDpDTk5fRkJwc25semRPQygp OyI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcvMy4w L3BlcnNvbmFsaXphdGlvbi9jbG9zZV9idC5naWYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgYWx0 PSIiIGJvcmRlcj0iMCI+PC9hPjwvZGl2PgoJPGRpdiBpZD0iY25uX0ZCYXdPTFlNIiBjbGFzcz0i Y25uX0ZCYXdvMiI+PC9kaXY+Cgk8L2Rpdj4KCQoJPGRpdiBpZD0iY25uX0ZCYXdESU0iIGNsYXNz PSJjbm5fZHlub25lIj48L2Rpdj4KCgk8ZGl2IGlkPSJmYWNlYm9va1Vwc2VsbCIgc3R5bGU9ImRp c3BsYXk6bm9uZTtmb250LXNpemU6IDlweDsgY29sb3I6ICM2NjY7IGJhY2tncm91bmQ6ICNmNGY0 ZjQ7Ij4KCQk8cD48YSBocmVmPSJqYXZhc2NyaXB0OiB2b2lkKDApOyIgb25jbGljaz0iRkIubG9n aW4oZmJTZXNzaW9uSGFuZGxlcik7IHJldHVybiBmYWxzZTsiPkxvZyBpbiB3aXRoIEZhY2Vib29r PC9hPiB0byBzZWUgeW91ciBmcmllbmRzJyBhY3Rpdml0eSB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6 Q05OX0ZCcHNubHpkT08oKTsiPldoYXQncyB0aGlzPzwvYT48L3A+Cgk8L2Rpdj4KCTxkaXYgaWQ9 ImZhY2Vib29rQ29ubmVjdGVkIiBzdHlsZT0iZGlzcGxheTpub25lO2ZvbnQtc2l6ZTogOXB4OyBj b2xvcjogIzY2NjsgYmFja2dyb3VuZDogI2Y0ZjRmNDsiPgoJCTxwPjxhIGhyZWY9Ii9wcm9maWxl Lz9zZXRUYWI9ZmJmcmllbmRzIj5WaWV3IG1vcmUgZnJpZW5kcycgYWN0aXZpdHk8L2E+IHwgPGEg aHJlZj0iamF2YXNjcmlwdDpDTk5fRkJwc25semRPTygpOyI+V2hhdCdzIHRoaXM/PC9hPjwvcD4K CTwvZGl2PgoJPGRpdiBpZD0icG1UYXJnZXRDb250YWluZXIiPgoJCTxkaXYgaWQ9InBtRmFjZWJv b2tUYWIiIGNsYXNzPSJwbU9uIj4KCQkJCgkJPC9kaXY+CgkJPGRpdiBpZD0icG1BY3Rpdml0eVRh YiIgY2xhc3M9InBtT2ZmIj4KCQkJPGRpdiBpZD0icG1BY3RMaXN0IiBjbGFzcz0ibWFrZVNjcm9s bCI+CgkJCQk8IS0tICBjbGFzcz0ibWFrZVNjcm9sbCIgICAtLT4KCQkJCTx1bD48bGk+PC9saT48 L3VsPgoJCQk8L2Rpdj4KCQkJPCEtLSBzY3JvbGwgYmFyICAtLT4KCQkJPGRpdiBpZD0icG1BY3RM aXN0VHJhY2siPgoJCQkJPGRpdiBpZD0idHJhY2tUaHVtYiI+CgkJCQkJJm5ic3A7CgkJCQk8L2Rp dj4KCQkJPC9kaXY+CgkJCTwhLS0gZW5kIHNjcm9sbCBiYXIgLS0+CgkJPC9kaXY+Cgk8L2Rpdj4K PC9kaXY+CjwhLS0gZW5kb2YgImFjdGl2aXR5IiBzbGlkZSAtLT4KCiAgICAgICAgICAgICAgICA8 IS0tIGVuZCBvZiAiZmFjZWJvb2siIHNsaWRlIC0tPgoJCQoJCTwhLS0gc3RhcnRvZiAibmV3c3B1 bHNlIiBzbGlkZSAtLT4KCQk8ZGl2IGlkPSJwbU5ld3NQdWxzZVRhYlRvZ2dsZSIgY2xhc3M9ImFj Y29yZGlvbi10b2dnbGUiPg0KCTxzcGFuIGNsYXNzPSJhY2NUaXRsZSI+TW9zdCBQb3B1bGFyPC9z cGFuPg0KCTxzcGFuIGNsYXNzPSJhY2NBcnJvdyI+Jm5ic3A7PC9zcGFuPg0KPC9kaXY+DQo8IS0t IHN0YXJ0b2YgImFjdGl2aXR5IiBzbGlkZSAtLT4NCjxkaXYgaWQ9InBtTmV3c1B1bHNlVGFiIiBj bGFzcz0iYWNjb3JkaW9uLWNvbnRlbnQgaW50bCIgc3R5bGU9ImhlaWdodDogMTk0cHg7IGRpc3Bs YXk6IG5vbmU7Ij4NCgk8dWw+DQoJCTxsaSBjbGFzcz0icG1Oc1N0b3J5Ij4KPGRpdiBjbGFzcz0i cG1Oc0hlYWRsaW5lIj4KPGEgaHJlZj0iLzIwMTAvV09STEQvZXVyb3BlLzEwLzAzL2V1cm9wZS50 ZXJyb3IuYWR2aXNvcnkvaW5kZXguaHRtbCI+PHNwYW4gY2xhc3M9InBtSExCdWxsZXQiPiZidWxs Ozwvc3Bhbj5UcmF2ZWwgYWxlcnQgaXNzdWVkIGZvciBVLlMuIGNpdGl6ZW5zIGluIEV1cm9wZTwv YT4KPC9kaXY+CjxkaXYgY2xhc3M9InBtTnNQb3B1bGFyaXR5Ij4KPGRpdiBjbGFzcz0icG1Oc1Bv cEltYWdlIiBzdHlsZT0id2lkdGg6IDElOyI+PC9kaXY+CjwvZGl2Pgo8L2xpPgo8bGkgY2xhc3M9 InBtTnNTdG9yeSI+CjxkaXYgY2xhc3M9InBtTnNIZWFkbGluZSI+CjxhIGhyZWY9Ii8yMDEwL1dP UkxEL2FzaWFwY2YvMTAvMDIvamFwYW4uYW50aS5jaGluYS5wcm90ZXN0L2luZGV4Lmh0bWwiPjxz cGFuIGNsYXNzPSJwbUhMQnVsbGV0Ij4mYnVsbDs8L3NwYW4+Q2hpbmEgYWNjdXNlZCBvZiBpbnZh ZGluZyBkaXNwdXRlZCBpc2xhbmRzPC9hPgo8L2Rpdj4KPGRpdiBjbGFzcz0icG1Oc1BvcHVsYXJp dHkiPgo8ZGl2IGNsYXNzPSJwbU5zUG9wSW1hZ2UiIHN0eWxlPSJ3aWR0aDogMCU7Ij48L2Rpdj4K PC9kaXY+CjwvbGk+CjxsaSBjbGFzcz0icG1Oc1N0b3J5Ij4KPGRpdiBjbGFzcz0icG1Oc0hlYWRs aW5lIj4KPGEgaHJlZj0iLzIwMTAvUE9MSVRJQ1MvMDkvMjkvaG91c2UuOS4xMS5maXJzdC5yZXNw b25kZXJzL2luZGV4Lmh0bWwiPjxzcGFuIGNsYXNzPSJwbUhMQnVsbGV0Ij4mYnVsbDs8L3NwYW4+ SG91c2UgcGFzc2VzIGJpbGwgdG8gaGVscCA5LzExIGZpcnN0IHJlc3BvbmRlcnM8L2E+CjwvZGl2 Pgo8ZGl2IGNsYXNzPSJwbU5zUG9wdWxhcml0eSI+CjxkaXYgY2xhc3M9InBtTnNQb3BJbWFnZSIg c3R5bGU9IndpZHRoOiAwJTsiPjwvZGl2Pgo8L2Rpdj4KPC9saT4KPGxpIGNsYXNzPSJwbU5zU3Rv cnkiPgo8ZGl2IGNsYXNzPSJwbU5zSGVhZGxpbmUiPgo8YSBocmVmPSIvMjAxMC9VUy8xMC8wMy9l dXJvcGUudGVycm9yLmFkdmlzb3J5L2luZGV4Lmh0bWwiPjxzcGFuIGNsYXNzPSJwbUhMQnVsbGV0 Ij4mYnVsbDs8L3NwYW4+VS5TLiBpc3N1ZXMgYWxlcnQgZm9yIEFtZXJpY2FucyBpbiBFdXJvcGU8 L2E+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwbU5zUG9wdWxhcml0eSI+CjxkaXYgY2xhc3M9InBtTnNQ b3BJbWFnZSIgc3R5bGU9IndpZHRoOiAwJTsiPjwvZGl2Pgo8L2Rpdj4KPC9saT4KPGxpIGNsYXNz PSJwbU5zU3RvcnkiPgo8ZGl2IGNsYXNzPSJwbU5zSGVhZGxpbmUiPgo8YSBocmVmPSIvMjAxMC9X T1JMRC9tZWFzdC8xMC8wMy9pcmFuLm1pZGVhc3QucGVhY2UudGFsa3MvaW5kZXguaHRtbCI+PHNw YW4gY2xhc3M9InBtSExCdWxsZXQiPiZidWxsOzwvc3Bhbj5XaXRob3V0IGEgY2hhaXIgYXQgdGhl IHRhYmxlLCBJcmFuIHNlZWtzIGluZmx1ZW5jZSBub25ldGhlbGVzczwvYT4KPC9kaXY+CjxkaXYg Y2xhc3M9InBtTnNQb3B1bGFyaXR5Ij4KPGRpdiBjbGFzcz0icG1Oc1BvcEltYWdlIiBzdHlsZT0i d2lkdGg6IDAlOyI+PC9kaXY+CjwvZGl2Pgo8L2xpPgo8bGkgY2xhc3M9InBtTnNTdG9yeSI+Cjxk aXYgY2xhc3M9InBtTnNIZWFkbGluZSI+CjxhIGhyZWY9Ii8yMDEwL1dPUkxEL21lYXN0LzEwLzAz L2FmZ2hhbmlzdGFuLmFpci5zdHJpa2UvaW5kZXguaHRtbCI+PHNwYW4gY2xhc3M9InBtSExCdWxs ZXQiPiZidWxsOzwvc3Bhbj5BZmdoYW4gb2ZmaWNpYWxzOiBOQVRPIGFpcnN0cmlrZSBraWxscyBU YWxpYmFuIGluc3VyZ2VudHMsIGNpdmlsaWFuczwvYT4KPC9kaXY+CjxkaXYgY2xhc3M9InBtTnNQ b3B1bGFyaXR5Ij4KPGRpdiBjbGFzcz0icG1Oc1BvcEltYWdlIiBzdHlsZT0id2lkdGg6IDAlOyI+ PC9kaXY+CjwvZGl2Pgo8L2xpPgoNCgk8L3VsPg0KCTxkaXYgY2xhc3M9InBtV3JhcHBlciI+DQoJ CTxhIGhyZWY9Ii9tb3N0cG9wdWxhciIgaWQ9InBtSW50bE1vcmVCdG4iPjwvYT4NCgk8L2Rpdj4N CjwvZGl2Pg0KPCEtLSBlbmRvZiAiYWN0aXZpdHkiIHNsaWRlIC0tPg0KCSAgICAJICAgIAoJCTwh LS0gZW5kIG9mICJuZXdzcHVsc2UiIHNsaWRlIC0tPgoJCQoJCTwhLS0gc3RhcnRvZiAid2VhdGhl ciIgc2xpZGUgLS0+CgkJCQk8ZGl2IGlkPSJwbVdlYXRoZXJJbnRsVG9nZ2xlIiBjbGFzcz0iYWNj b3JkaW9uLXRvZ2dsZSI+DQoJCQk8c3BhbiBjbGFzcz0iYWNjVGl0bGUiPldlYXRoZXI8L3NwYW4+ DQoJCQk8c3BhbiBjbGFzcz0iYWNjQXJyb3ciPiZuYnNwOzwvc3Bhbj4NCgkJPC9kaXY+DQoJCQ0K CQk8ZGl2IGlkPSJwbVdlYXRoZXJJbnRsIiBjbGFzcz0iYWNjb3JkaW9uLWNvbnRlbnQiIHN0eWxl PSJoZWlnaHQ6IDE5NHB4OyBkaXNwbGF5OiBub25lOyI+DQoJDQoJCQk8IS0tIERlZmF1bHQgU2Vh cmNoIEJveCAtLT4NCgkJCTxkaXYgaWQ9ImNubkdldExvY2FsQm94IiBzdHlsZT0iZGlzcGxheTog bm9uZTsiPg0KCQkJCTxmb3JtIG9uc3VibWl0PSJNYWluTG9jYWxPYmouV2VhdGhlci5jaGVja0lu cHV0KCd3ZWF0aGVyJyx0aGlzLmlucHV0RmllbGQudmFsdWUpO3JldHVybiBmYWxzZTsiIGlkPSJw bVdlYXRoZXJMb2NhdGlvbiIgbmFtZT0ibG9jYWxBbGxMb29rdXBGb3JtIj4NCgkJCQkJPGZpZWxk c2V0Pg0KCQkJCQkJPGRpdiBjbGFzcz0icG1XcmFwcGVyIj4NCgkJCQkJCQk8bGFiZWwgZm9yPSJ3 ZWF0aGVyTG9jIj4NCgkJCQkJCQkJRWRpdCBsb2NhdGlvbg0KCQkJCQkJCTwvbGFiZWw+DQoJCQkJ CQkJPGlucHV0IHR5cGU9InRleHQiIGlkPSJ3ZWF0aGVyTG9jIiBjbGFzcz0icG1XZWF0aGVySG9s bG93IiBuYW1lPSJpbnB1dEZpZWxkIiB2YWx1ZT0iRW50ZXIgYSBVLlMuIFppcCBvciBJbnRsIGNp dHkiIG9uZm9jdXM9Ik1haW5Mb2NhbE9iai5XZWF0aGVyLmlucHV0Rm9jdXModGhpcyk7IiBvbmJs dXI9Ik1haW5Mb2NhbE9iai5XZWF0aGVyLmlucHV0Qmx1cih0aGlzKTsiIC8+PGEgaWQ9IndlYXRo ZXJMb2NCdG4iIGhyZWY9ImphdmFzY3JpcHQ6TWFpbkxvY2FsT2JqLldlYXRoZXIuY2hlY2tJbnB1 dCgnd2VhdGhlcicsIGRvY3VtZW50LmxvY2FsQWxsTG9va3VwRm9ybS5pbnB1dEZpZWxkLnZhbHVl KTsiPjxzcGFuPkdvPC9zcGFuPjwvYT4NCgkJCQkJCTwvZGl2Pg0KCQkJCQkJPGRpdiBpZD0icG1M b2NSZXN1bHRzQ29udGFpbmVyIj48L2Rpdj4NCgkJCQkJPC9maWVsZHNldD4NCgkJCQk8L2Zvcm0+ DQoJCQk8L2Rpdj4NCgkJCTwhLS0gRW5kIERlZmF1bHQgU2VhcmNoIEJveCAtLT4NCgkJCQ0KCQkJ PCEtLSAgV2VhdGhlciBDb250ZW50IC0tPg0KCQkJPGRpdiBjbGFzcz0icG1XcmFwcGVyIiBpZD0i cG1XZWF0aGVyVGFiIj48L2Rpdj4NCgkJCTxkaXYgY2xhc3M9InBtV3JhcHBlciIgaWQ9InBtV2Vh dGhlclRvbSI+PC9kaXY+DQoJCQk8IS0tICBFbmQgV2VhdGhlciBDb250ZW50IC0tPg0KCQkJDQoJ CTwvZGl2PgkJDQoJICAgIAoJCTwhLS0gZW5kb2YgIndlYXRoZXIiIHNsaWRlIC0tPgoJCQoJCTwh LS0gc3RhcnRvZiAibWFya2V0IiBzbGlkZSAtLT4KCQkJCTxkaXYgaWQ9InBtTWFya2V0c1RvZ2ds ZSIgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUiPg0KCQkJPHNwYW4gY2xhc3M9ImFjY1RpdGxlIj5N YXJrZXRzPC9zcGFuPg0KCQkJPHNwYW4gY2xhc3M9ImFjY0Fycm93Ij4mbmJzcDs8L3NwYW4+DQoJ CTwvZGl2Pg0KCQk8ZGl2IGlkPSJwbU1hcmtldHMiIGNsYXNzPSJhY2NvcmRpb24tY29udGVudCIg c3R5bGU9ImhlaWdodDogMTk0cHg7IGRpc3BsYXk6IG5vbmU7Ij4NCgkJCTxkaXYgaWQ9InBtSW5k ZWNpZXNJbnRsIj4KCTxkaXYgY2xhc3M9InBtV3JhcHBlciI+CgkgICAgPGRpdiBjbGFzcz0ibWFy a2V0VGltZSI+CgkgICAgICAgIFVwZGF0ZWQgPHNwYW4gaWQ9ImluZGV4VXBkYXRlZCI+MTUxOCBH TVQsIE9jdCAzPC9zcGFuPgogICAgICAgICAgICA8YSBpZD0iYWxsTWFya2V0cyIgaHJlZj0iaHR0 cDovL21vbmV5LmNubi5jb20vZGF0YS93b3JsZF9tYXJrZXRzLyIgdGFyZ2V0PSJuZXciPmFsbCBt YXJrZXRzJiMxODc7PC9hPgoJICAgIDwvZGl2PgogICAgICAgCTxhIGlkPSJhc2lhTWFya2V0QnRu IiBjbGFzcz0idG9nZ2xlIHRvZ09uIj48c3Bhbj5Bc2lhPC9zcGFuPjwvYT4KICAgICAgICA8YSBp ZD0iZXVyTWFya2V0QnRuIiBjbGFzcz0idG9nZ2xlIHRvZ09mZiI+PHNwYW4+RXVyb3BlPC9zcGFu PjwvYT4KICAgICAgICA8YSBpZD0idXNNYXJrZXRCdG4iIGNsYXNzPSJ0b2dnbGUgdG9nT2ZmIj48 c3Bhbj5Vczwvc3Bhbj48L2E+Cgk8L2Rpdj4KCTxkaXYgaWQ9ImFzaWFNYXJrZXQiIGNsYXNzPSJ0 YWIgcG1PbiI+Cgk8dWw+CgkJCTxsaSBjbGFzcz0ibWFya2V0LTEgY2xvc2VkIj4gCgkJCSAgICA8 ZGl2IGNsYXNzPSJtYXJrZXRJbmZvLWxlZnQiPiA8IS0tIGxlZnQgc2lkZSAtLT4KCQkJICAgICAg ICA8c3BhbiBjbGFzcz0ibWFya2V0TmFtZSI+SGFuZyBTZW5nPC9zcGFuPgoJCQkgICAgICAgIDxz cGFuIGNsYXNzPSJtYXJrZXRJbmRleCI+MjIsMzU4LjE3PC9zcGFuPgoJCQkgICAgPC9kaXY+CgkJ CSAgICA8ZGl2IGNsYXNzPSJtYXJrZXROdW1zLXJpZ2h0IGRvd24iPgoJCQkJCTxzcGFuIGNsYXNz PSJjbG9zZWRNYXJrZXQiPkNsb3NlZDwvc3Bhbj4KCQkJICAgICAgICA8ZGl2IGNsYXNzPSJwZXJj ZW50RGlmZiI+CgkJCSAgICAgICAgICAgIDxzcGFuPig8c3BhbiBjbGFzcz0icGx1c01pbnVzIj4t PC9zcGFuPjAuMDkmIzM3Oyk8L3NwYW4+CgkJCSAgICAgICAgPC9kaXY+CgkJCSAgICAgICAgPGRp diBjbGFzcz0ibnVtRGlmZiI+CgkJCSAgICAgICAgICAgIDxzcGFuPjxzcGFuIGNsYXNzPSJwbHVz TWludXMiPi08L3NwYW4+MjAuNTwvc3Bhbj4KCQkJICAgICAgICA8L2Rpdj4KCQkJICAgIDwvZGl2 PgoJCQk8L2xpPgoJCQk8bGkgY2xhc3M9Im1hcmtldC0yIGNsb3NlZCI+IAoJCQkgICAgPGRpdiBj bGFzcz0ibWFya2V0SW5mby1sZWZ0Ij4gPCEtLSBsZWZ0IHNpZGUgLS0+CgkJCSAgICAgICAgPHNw YW4gY2xhc3M9Im1hcmtldE5hbWUiPk5pa2tlaTwvc3Bhbj4KCQkJICAgICAgICA8c3BhbiBjbGFz cz0ibWFya2V0SW5kZXgiPjksNDA0LjIzPC9zcGFuPgoJCQkgICAgPC9kaXY+CgkJCSAgICA8ZGl2 IGNsYXNzPSJtYXJrZXROdW1zLXJpZ2h0IHVwIj4KCQkJCQk8c3BhbiBjbGFzcz0iY2xvc2VkTWFy a2V0Ij5DbG9zZWQ8L3NwYW4+CgkJCSAgICAgICAgPGRpdiBjbGFzcz0icGVyY2VudERpZmYiPgoJ CQkgICAgICAgICAgICA8c3Bhbj4oPHNwYW4gY2xhc3M9InBsdXNNaW51cyI+Kzwvc3Bhbj4wLjM3 JiMzNzspPC9zcGFuPgoJCQkgICAgICAgIDwvZGl2PgoJCQkgICAgICAgIDxkaXYgY2xhc3M9Im51 bURpZmYiPgoJCQkgICAgICAgICAgICA8c3Bhbj48c3BhbiBjbGFzcz0icGx1c01pbnVzIj4rPC9z cGFuPjM0Ljg4PC9zcGFuPgoJCQkgICAgICAgIDwvZGl2PgoJCQkgICAgPC9kaXY+CgkJCTwvbGk+ CgkJCTxsaSBjbGFzcz0ibWFya2V0LTMgY2xvc2VkIj4gCgkJCSAgICA8ZGl2IGNsYXNzPSJtYXJr ZXRJbmZvLWxlZnQiPiA8IS0tIGxlZnQgc2lkZSAtLT4KCQkJICAgICAgICA8c3BhbiBjbGFzcz0i bWFya2V0TmFtZSI+QVNYIDEwMDwvc3Bhbj4KCQkJICAgICAgICA8c3BhbiBjbGFzcz0ibWFya2V0 SW5kZXgiPjQsNjM0LjcwPC9zcGFuPgoJCQkgICAgPC9kaXY+CgkJCSAgICA8ZGl2IGNsYXNzPSJt YXJrZXROdW1zLXJpZ2h0IGRvd24iPgoJCQkJCTxzcGFuIGNsYXNzPSJjbG9zZWRNYXJrZXQiPkNs b3NlZDwvc3Bhbj4KCQkJICAgICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50RGlmZiI+CgkJCSAgICAg ICAgICAgIDxzcGFuPig8c3BhbiBjbGFzcz0icGx1c01pbnVzIj4tPC9zcGFuPjAuMDUmIzM3Oyk8 L3NwYW4+CgkJCSAgICAgICAgPC9kaXY+CgkJCSAgICAgICAgPGRpdiBjbGFzcz0ibnVtRGlmZiI+ CgkJCSAgICAgICAgICAgIDxzcGFuPjxzcGFuIGNsYXNzPSJwbHVzTWludXMiPi08L3NwYW4+Mi4y PC9zcGFuPgoJCQkgICAgICAgIDwvZGl2PgoJCQkgICAgPC9kaXY+CgkJCTwvbGk+Cgk8L3VsPgoJ PC9kaXY+Cgk8ZGl2IGlkPSJldXJNYXJrZXQiIGNsYXNzPSJ0YWIgcG1PZmYiPgoJPHVsPgoJCQk8 bGkgY2xhc3M9Im1hcmtldC0xIGNsb3NlZCI+IAoJCQkgICAgPGRpdiBjbGFzcz0ibWFya2V0SW5m by1sZWZ0Ij4gPCEtLSBsZWZ0IHNpZGUgLS0+CgkJCSAgICAgICAgPHNwYW4gY2xhc3M9Im1hcmtl dE5hbWUiPkZUU0UgMTAwPC9zcGFuPgoJCQkgICAgICAgIDxzcGFuIGNsYXNzPSJtYXJrZXRJbmRl eCI+NSw1OTIuOTA8L3NwYW4+CgkJCSAgICA8L2Rpdj4KCQkJICAgIDxkaXYgY2xhc3M9Im1hcmtl dE51bXMtcmlnaHQgdXAiPgoJCQkJCTxzcGFuIGNsYXNzPSJjbG9zZWRNYXJrZXQiPkNsb3NlZDwv c3Bhbj4KCQkJICAgICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50RGlmZiI+CgkJCSAgICAgICAgICAg IDxzcGFuPig8c3BhbiBjbGFzcz0icGx1c01pbnVzIj4rPC9zcGFuPjAuODAmIzM3Oyk8L3NwYW4+ CgkJCSAgICAgICAgPC9kaXY+CgkJCSAgICAgICAgPGRpdiBjbGFzcz0ibnVtRGlmZiI+CgkJCSAg ICAgICAgICAgIDxzcGFuPjxzcGFuIGNsYXNzPSJwbHVzTWludXMiPis8L3NwYW4+NDQuMjg8L3Nw YW4+CgkJCSAgICAgICAgPC9kaXY+CgkJCSAgICA8L2Rpdj4KCQkJPC9saT4KCQkJPGxpIGNsYXNz PSJtYXJrZXQtMiBjbG9zZWQiPiAKCQkJICAgIDxkaXYgY2xhc3M9Im1hcmtldEluZm8tbGVmdCI+ IDwhLS0gbGVmdCBzaWRlIC0tPgoJCQkgICAgICAgIDxzcGFuIGNsYXNzPSJtYXJrZXROYW1lIj5D QUMgNDA8L3NwYW4+CgkJCSAgICAgICAgPHNwYW4gY2xhc3M9Im1hcmtldEluZGV4Ij4zLDY5Mi4w OTwvc3Bhbj4KCQkJICAgIDwvZGl2PgoJCQkgICAgPGRpdiBjbGFzcz0ibWFya2V0TnVtcy1yaWdo dCBkb3duIj4KCQkJCQk8c3BhbiBjbGFzcz0iY2xvc2VkTWFya2V0Ij5DbG9zZWQ8L3NwYW4+CgkJ CSAgICAgICAgPGRpdiBjbGFzcz0icGVyY2VudERpZmYiPgoJCQkgICAgICAgICAgICA8c3Bhbj4o PHNwYW4gY2xhc3M9InBsdXNNaW51cyI+LTwvc3Bhbj4wLjYyJiMzNzspPC9zcGFuPgoJCQkgICAg ICAgIDwvZGl2PgoJCQkgICAgICAgIDxkaXYgY2xhc3M9Im51bURpZmYiPgoJCQkgICAgICAgICAg ICA8c3Bhbj48c3BhbiBjbGFzcz0icGx1c01pbnVzIj4tPC9zcGFuPjIzLjA5PC9zcGFuPgoJCQkg ICAgICAgIDwvZGl2PgoJCQkgICAgPC9kaXY+CgkJCTwvbGk+CgkJCTxsaSBjbGFzcz0ibWFya2V0 LTMgY2xvc2VkIj4gCgkJCSAgICA8ZGl2IGNsYXNzPSJtYXJrZXRJbmZvLWxlZnQiPiA8IS0tIGxl ZnQgc2lkZSAtLT4KCQkJICAgICAgICA8c3BhbiBjbGFzcz0ibWFya2V0TmFtZSI+REFYPC9zcGFu PgoJCQkgICAgICAgIDxzcGFuIGNsYXNzPSJtYXJrZXRJbmRleCI+NiwyMTEuMzQ8L3NwYW4+CgkJ CSAgICA8L2Rpdj4KCQkJICAgIDxkaXYgY2xhc3M9Im1hcmtldE51bXMtcmlnaHQgZG93biI+CgkJ CQkJPHNwYW4gY2xhc3M9ImNsb3NlZE1hcmtldCI+Q2xvc2VkPC9zcGFuPgoJCQkgICAgICAgIDxk aXYgY2xhc3M9InBlcmNlbnREaWZmIj4KCQkJICAgICAgICAgICAgPHNwYW4+KDxzcGFuIGNsYXNz PSJwbHVzTWludXMiPi08L3NwYW4+MC4yOCYjMzc7KTwvc3Bhbj4KCQkJICAgICAgICA8L2Rpdj4K CQkJICAgICAgICA8ZGl2IGNsYXNzPSJudW1EaWZmIj4KCQkJICAgICAgICAgICAgPHNwYW4+PHNw YW4gY2xhc3M9InBsdXNNaW51cyI+LTwvc3Bhbj4xNy42ODwvc3Bhbj4KCQkJICAgICAgICA8L2Rp dj4KCQkJICAgIDwvZGl2PgoJCQk8L2xpPgoJPC91bD4KCTwvZGl2PgoJPGRpdiBpZD0idXNNYXJr ZXQiIGNsYXNzPSJ0YWIgcG1PZmYiPgoJPHVsPgoJCQk8bGkgY2xhc3M9Im1hcmtldC0xIGNsb3Nl ZCI+IAoJCQkgICAgPGRpdiBjbGFzcz0ibWFya2V0SW5mby1sZWZ0Ij4gPCEtLSBsZWZ0IHNpZGUg LS0+CgkJCSAgICAgICAgPHNwYW4gY2xhc3M9Im1hcmtldE5hbWUiPkRvdzwvc3Bhbj4KCQkJICAg ICAgICA8c3BhbiBjbGFzcz0ibWFya2V0SW5kZXgiPjEwLDgyOS42ODwvc3Bhbj4KCQkJICAgIDwv ZGl2PgoJCQkgICAgPGRpdiBjbGFzcz0ibWFya2V0TnVtcy1yaWdodCB1cCI+CgkJCQkJPHNwYW4g Y2xhc3M9ImNsb3NlZE1hcmtldCI+Q2xvc2VkPC9zcGFuPgoJCQkgICAgICAgIDxkaXYgY2xhc3M9 InBlcmNlbnREaWZmIj4KCQkJICAgICAgICAgICAgPHNwYW4+KDxzcGFuIGNsYXNzPSJwbHVzTWlu dXMiPis8L3NwYW4+MC4zOSYjMzc7KTwvc3Bhbj4KCQkJICAgICAgICA8L2Rpdj4KCQkJICAgICAg ICA8ZGl2IGNsYXNzPSJudW1EaWZmIj4KCQkJICAgICAgICAgICAgPHNwYW4+PHNwYW4gY2xhc3M9 InBsdXNNaW51cyI+Kzwvc3Bhbj40MS42Mzwvc3Bhbj4KCQkJICAgICAgICA8L2Rpdj4KCQkJICAg IDwvZGl2PgoJCQk8L2xpPgoJCQk8bGkgY2xhc3M9Im1hcmtldC0yIGNsb3NlZCI+IAoJCQkgICAg PGRpdiBjbGFzcz0ibWFya2V0SW5mby1sZWZ0Ij4gPCEtLSBsZWZ0IHNpZGUgLS0+CgkJCSAgICAg ICAgPHNwYW4gY2xhc3M9Im1hcmtldE5hbWUiPk5hc2RhcTwvc3Bhbj4KCQkJICAgICAgICA8c3Bh biBjbGFzcz0ibWFya2V0SW5kZXgiPjIsMzcwLjc1PC9zcGFuPgoJCQkgICAgPC9kaXY+CgkJCSAg ICA8ZGl2IGNsYXNzPSJtYXJrZXROdW1zLXJpZ2h0IHVwIj4KCQkJCQk8c3BhbiBjbGFzcz0iY2xv c2VkTWFya2V0Ij5DbG9zZWQ8L3NwYW4+CgkJCSAgICAgICAgPGRpdiBjbGFzcz0icGVyY2VudERp ZmYiPgoJCQkgICAgICAgICAgICA8c3Bhbj4oPHNwYW4gY2xhc3M9InBsdXNNaW51cyI+Kzwvc3Bh bj4wLjA5JiMzNzspPC9zcGFuPgoJCQkgICAgICAgIDwvZGl2PgoJCQkgICAgICAgIDxkaXYgY2xh c3M9Im51bURpZmYiPgoJCQkgICAgICAgICAgICA8c3Bhbj48c3BhbiBjbGFzcz0icGx1c01pbnVz Ij4rPC9zcGFuPjIuMTM8L3NwYW4+CgkJCSAgICAgICAgPC9kaXY+CgkJCSAgICA8L2Rpdj4KCQkJ PC9saT4KCQkJPGxpIGNsYXNzPSJtYXJrZXQtMyBjbG9zZWQiPiAKCQkJICAgIDxkaXYgY2xhc3M9 Im1hcmtldEluZm8tbGVmdCI+IDwhLS0gbGVmdCBzaWRlIC0tPgoJCQkgICAgICAgIDxzcGFuIGNs YXNzPSJtYXJrZXROYW1lIj5TJlAgNTAwPC9zcGFuPgoJCQkgICAgICAgIDxzcGFuIGNsYXNzPSJt YXJrZXRJbmRleCI+MSwxNDYuMjQ8L3NwYW4+CgkJCSAgICA8L2Rpdj4KCQkJICAgIDxkaXYgY2xh c3M9Im1hcmtldE51bXMtcmlnaHQgdXAiPgoJCQkJCTxzcGFuIGNsYXNzPSJjbG9zZWRNYXJrZXQi PkNsb3NlZDwvc3Bhbj4KCQkJICAgICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50RGlmZiI+CgkJCSAg ICAgICAgICAgIDxzcGFuPig8c3BhbiBjbGFzcz0icGx1c01pbnVzIj4rPC9zcGFuPjAuNDQmIzM3 Oyk8L3NwYW4+CgkJCSAgICAgICAgPC9kaXY+CgkJCSAgICAgICAgPGRpdiBjbGFzcz0ibnVtRGlm ZiI+CgkJCSAgICAgICAgICAgIDxzcGFuPjxzcGFuIGNsYXNzPSJwbHVzTWludXMiPis8L3NwYW4+ NS4wNDwvc3Bhbj4KCQkJICAgICAgICA8L2Rpdj4KCQkJICAgIDwvZGl2PgoJCQk8L2xpPgoJPC91 bD4KCTwvZGl2PgoJCQkJCQogICAgICAgICAgICAgICAgPGRpdiBpZD0ibW9uZXlTcG9uc29yIiBz dHlsZT0id2lkdGg6MTc1cHgiPjwvZGl2PgoKPC9kaXY+IA0KICAgICAgICA8L2Rpdj4JICAgIAoJ CTwhLS0gZW5kIG9mICJtYXJrZXQiIHNsaWRlIC0tPgoJCQoJPC9kaXY+Cgk8IS0tICMjIyBBQ0NP UkRJT04gRU5EICMjIyAtLT4KCjwvZGl2PgoKPCEtLSBzaGFyZWQgamF2YXNjcmlwdCAtLT4KPHNj cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCUV2ZW50Lm9ic2VydmUod2luZG93LCAnbG9h ZCcsIGZ1bmN0aW9uKCkgew0KCQlNYWluTG9jYWxPYmouaW5pdCgpOw0KCX0pOwkJDQo8L3Njcmlw dD4NCgoKDQoNCjxkaXYgY2xhc3M9ImNubl9wYWQxOHRvcCI+PC9kaXY+DQoNCjwvZGl2PjwvZGl2 PjwhLS0gL2Nubl9tYWludG9wcHJvZmlsZSAtLT48ZGl2IGNsYXNzPSJjbm5fY2xlYXIiPjwvZGl2 PjxkaXYgY2xhc3M9ImNubl9zaGRjYWZvb3RlciI+PC9kaXY+PC9kaXY+ICAgPGRpdiBjbGFzcz0i Y25uX3BhZDJ0b3AgY25uX3NoZHNwYyI+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2NvbnRlbnRhcmVh IGNubl9maWx0ZXJhcmVhYm94Ij48ZGl2IGNsYXNzPSJjbm5fc2RieCI+PGRpdiBjbGFzcz0iY25u X3NkYngxIj48ZGl2IGNsYXNzPSJjbm5fc2RieDIiPjxkaXYgY2xhc3M9ImNubl9zZGJ4MyI+PGRp diBjbGFzcz0iY25uX3NkYng0Ij48ZGl2IGNsYXNzPSJjbm5fc2RieDUiPjxkaXYgY2xhc3M9ImNu bl9zZGJ4Y250bnQiPjxkaXYgc3R5bGU9IndpZHRoOjk4MHB4OyI+PGRpdiBjbGFzcz0iY25uX2Zh YmhlYWRlciI+PGRpdiBjbGFzcz0iY25uX2ZhYmgxIj5FZGl0b3IncyBDaG9pY2U8L2Rpdj48ZGl2 IGlkPSJjbm5HYWxsZXJ5VGFicyIgY2xhc3M9ImNubl9mYWJoMiI+PGEgY2xhc3M9ImNubl9mYWJ0 YWJidG4iIGhyZWY9Ii8uZWxlbWVudC9zc2kvYXV0by8zLjAvc2VjdC9JTlRMRURJVElPTi9NQUlO L211bHRpbWVkaWEvZ2FsbGVyeV9jb250ZW50XzAuaHRtbCI+PHNwYW4+PGI+SGlnaGxpZ2h0czwv Yj48L3NwYW4+PC9hPjxhIGNsYXNzPSJjbm5fZmFidGFiYnRuIiBocmVmPSIvLmVsZW1lbnQvc3Np L2F1dG8vMy4wL3NlY3QvSU5UTEVESVRJT04vTUFJTi9tdWx0aW1lZGlhL2dhbGxlcnlfY29udGVu dF8xLmh0bWwiPjxzcGFuPjxiPkNvbm5lY3RvciBvZiB0aGUgRGF5PC9iPjwvc3Bhbj48L2E+PC9k aXY+PGRpdiBjbGFzcz0iY25uX2NsZWFyIj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJjbm5fZmFiY29u dGVudCIgY2xhc3M9ImNubl9mYWJjb250ZW50YXJlYSI+PGRpdiBpZD0iY25uX2ZhYmNwcmV2IiBj bGFzcz0iY25uX2ZhYmNwcnZfb2ZmIj48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fZmFiY2Fob2xkZXIi PjxkaXYgY2xhc3M9ImNubl9mYWJjYXdpbmRvdyI+PGRpdiBjbGFzcz0iY25uX2ZhYmNhc2xpZGUi PjxkaXYgaWQ9ImNubl9HYWxsZXJ5Vmlld1BvcnQiPjxkaXYgaWQ9ImNubl9HYWxsZXJ5U2xpZGVy Q29udGFpbmVyIj48ZGl2IGNsYXNzPSJjbm5fZmFiY2FzbGFiIj4gPGRpdiBjbGFzcz0iY25uX2Zh YmNhdHoiPjxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdGlt ZyI+ICAgPGEgaHJlZj0iaHR0cDovL21vbmV5LmNubi5jb20vZ2FsbGVyaWVzLzIwMTAvYXV0b3Mv MTAwOS9nYWxsZXJ5LjIwMTBfcGFyaXNfbW90b3Jfc2hvdy9pbmRleC5odG1sP2hwdD1NaWQiPjxp bWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHgu Z2lmIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY4IiBhbHQ9IkNvb2xlc3QgY2FycyBhdCBQYXJpcyBN b3RvciBTaG93IiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgn aHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvaW1hZ2VzLzEwLzAyL3R6dmlkcy5qYWd1 YXIuYXV0b2Jsb2cuanBnJykgMCAwIG5vLXJlcGVhdDtkaXNwbGF5Om5vbmU7IiBjbGFzcz0iY25u Q29udGVudEltZyI+PC9hPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9mYWJjYXR0eHQiPjxhIGhyZWY9 Imh0dHA6Ly9tb25leS5jbm4uY29tL2dhbGxlcmllcy8yMDEwL2F1dG9zLzEwMDkvZ2FsbGVyeS4y MDEwX3BhcmlzX21vdG9yX3Nob3cvaW5kZXguaHRtbD9ocHQ9TWlkIj48c3Bhbj5Db29sZXN0IGNh cnMgYXQgUGFyaXMgTW90b3IgU2hvdzwvc3Bhbj48L2E+PC9kaXY+PC9kaXY+PC9kaXY+IDxkaXYg Y2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9zdG4iPjxkaXYgY2xhc3M9 ImNubl9mYWJjYXRpbWciPiAgIDxhIGhyZWY9Ii8yMDEwL1RFQ0gvZ2FtaW5nLmdhZGdldHMvMTAv MDEvbWVkYWwub2YuaG9ub3IudGFsaWJhbi9pbmRleC5odG1sP2hwdD1NaWQiPjxpbWcgc3JjPSJo dHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lmIiB3aWR0 aD0iMTIwIiBoZWlnaHQ9IjY4IiBhbHQ9IkdhbWUgcmVtb3ZlcyAnVGFsaWJhbicgb3B0aW9uIiBi b3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0cDovL2kuY2Ru LnR1cm5lci5jb20vY25uLzIwMTAvVEVDSC9nYW1pbmcuZ2FkZ2V0cy8xMC8wMS9tZWRhbC5vZi5o b25vci50YWxpYmFuL3R6dmlkcy5tZWRhbC5ob25vci50YWxpYmFuLmpwZycpIDAgMCBuby1yZXBl YXQ7ZGlzcGxheTpub25lOyIgY2xhc3M9ImNubkNvbnRlbnRJbWciPjwvYT48L2Rpdj48ZGl2IGNs YXNzPSJjbm5fZmFiY2F0dHh0Ij48YSBocmVmPSIvMjAxMC9URUNIL2dhbWluZy5nYWRnZXRzLzEw LzAxL21lZGFsLm9mLmhvbm9yLnRhbGliYW4vaW5kZXguaHRtbD9ocHQ9TWlkIj48c3Bhbj5HYW1l IHJlbW92ZXMgJ1RhbGliYW4nIG9wdGlvbjwvc3Bhbj48L2E+PC9kaXY+PC9kaXY+PC9kaXY+IDxk aXYgY2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9zdG4iPjxkaXYgY2xh c3M9ImNubl9mYWJjYXRpbWciPiAgIDxhIGhyZWY9Imh0dHA6Ly9uZXdzLmJsb2dzLmNubi5jb20v MjAxMC8xMC8wMS9saWZlLW9mLWEtbmF2eS1zdXJnZW9uLXJ1bS13b3Jtcy1hbmQtdG9iYWNjby1j dXJlcy8/aHB0PU1pZCI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxl bWVudC9pbWcvMy4wLzFweC5naWYiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iTmF2eSBz dXJnZW9ucycgb2RkIHRyZWF0bWVudHMiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6dHJh bnNwYXJlbnQgdXJsKCdodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9pbWFnZXMvMTAv MDEvdHp2aWRzLnNjdXJ2eS5qb3VybmFsLnVrLmpwZycpIDAgMCBuby1yZXBlYXQ7ZGlzcGxheTpu b25lOyIgY2xhc3M9ImNubkNvbnRlbnRJbWciPjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fZmFi Y2F0dHh0Ij48YSBocmVmPSJodHRwOi8vbmV3cy5ibG9ncy5jbm4uY29tLzIwMTAvMTAvMDEvbGlm ZS1vZi1hLW5hdnktc3VyZ2Vvbi1ydW0td29ybXMtYW5kLXRvYmFjY28tY3VyZXMvP2hwdD1NaWQi PjxzcGFuPk5hdnkgc3VyZ2VvbnMnIG9kZCB0cmVhdG1lbnRzPC9zcGFuPjwvYT48L2Rpdj48L2Rp dj48L2Rpdj4gPGRpdiBjbGFzcz0iY25uX2ZhYmNhdHoiPjxkaXYgY2xhc3M9ImNubl9yZWxwb3N0 biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdGltZyI+ICAgPGEgaHJlZj0iLzIwMTAvSEVBTFRILzEw LzAxL2d1YXRlbWFsYS5zeXBoaWxpcy50dXNrZWdlZS9pbmRleC5odG1sP2hwdD1NaWQiPjxpbWcg c3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lm IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY4IiBhbHQ9IidEYXJrIGNoYXB0ZXInIG9mIG1lZGljYWwg cmVzZWFyY2giIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6dHJhbnNwYXJlbnQgdXJsKCdo dHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9IRUFMVEgvMTAvMDEvZ3VhdGVtYWxhLnN5 cGhpbGlzLnR1c2tlZ2VlL3R6dmlkcy50dXNrZWdlZS5uYXRpb25hbC5hcmNoaXZlcy5qcGcnKSAw IDAgbm8tcmVwZWF0O2Rpc3BsYXk6bm9uZTsiIGNsYXNzPSJjbm5Db250ZW50SW1nIj48L2E+PC9k aXY+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHR4dCI+PGEgaHJlZj0iLzIwMTAvSEVBTFRILzEwLzAx L2d1YXRlbWFsYS5zeXBoaWxpcy50dXNrZWdlZS9pbmRleC5odG1sP2hwdD1NaWQiPjxzcGFuPidE YXJrIGNoYXB0ZXInIG9mIG1lZGljYWwgcmVzZWFyY2g8L3NwYW4+PC9hPjwvZGl2PjwvZGl2Pjwv ZGl2PjxkaXYgY2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9zdG4iPjxk aXYgY2xhc3M9ImNubl9mYWJjYXRpbWciIGlkPSJnYWxsZXJ5XzBfYWRfMCI+PC9kaXY+PC9kaXY+ PGRpdiBpZD0iZ2FsbGVyeV8wX2FkXzBfYWRnaWYiIGNsYXNzPSJjbm5fZmFiY2F0YWQiPjwvZGl2 PjwvZGl2PiA8ZGl2IGNsYXNzPSJjbm5fZmFiY2F0eiI+PGRpdiBjbGFzcz0iY25uX3JlbHBvc3Ru Ij48ZGl2IGNsYXNzPSJjbm5fZmFiY2F0aW1nIj4gICA8YSBocmVmPSIvMjAxMC9XT1JMRC9hZnJp Y2EvMTAvMDEvZWd5cHQuZmVtYWxlLnRheGkuZHJpdmVyL2luZGV4Lmh0bWw/aHB0PU1pZCI+PGlt ZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcvMy4wLzFweC5n aWYiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iRWd5cHRpYW4gd29tZW4gZHJpdmUgdGF4 aXMiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6dHJhbnNwYXJlbnQgdXJsKCdodHRwOi8v aS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9XT1JMRC9hZnJpY2EvMTAvMDEvZWd5cHQuZmVtYWxl LnRheGkuZHJpdmVyL3R6dmlkLmFsaS5jbm4uanBnJykgMCAwIG5vLXJlcGVhdDtkaXNwbGF5Om5v bmU7IiBjbGFzcz0iY25uQ29udGVudEltZyI+PC9hPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9mYWJj YXR0eHQiPjxhIGhyZWY9Ii8yMDEwL1dPUkxEL2FmcmljYS8xMC8wMS9lZ3lwdC5mZW1hbGUudGF4 aS5kcml2ZXIvaW5kZXguaHRtbD9ocHQ9TWlkIj48c3Bhbj5FZ3lwdGlhbiB3b21lbiBkcml2ZSB0 YXhpczwvc3Bhbj48L2E+PC9kaXY+PC9kaXY+PC9kaXY+IDxkaXYgY2xhc3M9ImNubl9mYWJjYXR6 Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9zdG4iPjxkaXYgY2xhc3M9ImNubl9mYWJjYXRpbWciPiAg IDxhIGhyZWY9Ii8yMDEwL09QSU5JT04vMTAvMDEvemFrYXJpYS5jaGluYS50cmFkZS9pbmRleC5o dG1sP2hwdD1NaWQiPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1l bnQvaW1nLzMuMC8xcHguZ2lmIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY4IiBhbHQ9IlUuUy4tQ2hp bmEgcmlmdCAnY2F0YXN0cm9waGljJyIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDp0cmFu c3BhcmVudCB1cmwoJ2h0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8yMDEwL09QSU5JT04vMTAv MDEvemFrYXJpYS5jaGluYS50cmFkZS90enZpZHMud2VuLm9iYW1hLmdpLmpwZycpIDAgMCBuby1y ZXBlYXQ7ZGlzcGxheTpub25lOyIgY2xhc3M9ImNubkNvbnRlbnRJbWciPjwvYT48L2Rpdj48ZGl2 IGNsYXNzPSJjbm5fZmFiY2F0dHh0Ij48YSBocmVmPSIvMjAxMC9PUElOSU9OLzEwLzAxL3pha2Fy aWEuY2hpbmEudHJhZGUvaW5kZXguaHRtbD9ocHQ9TWlkIj48c3Bhbj5VLlMuLUNoaW5hIHJpZnQg J2NhdGFzdHJvcGhpYyc8L3NwYW4+PC9hPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PiA8ZGl2IGNs YXNzPSJjbm5fZmFiY2FzbGFiIj4gPGRpdiBjbGFzcz0iY25uX2ZhYmNhdHoiPjxkaXYgY2xhc3M9 ImNubl9yZWxwb3N0biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdGltZyI+ICAgPGEgaHJlZj0iLzIw MTAvU0hPV0JJWi9Nb3ZpZXMvMTAvMDEvaW5jZXB0aW9uLm1pY2hhZWwuY2FpbmUuZXcvaW5kZXgu aHRtbD9ocHQ9TWlkIj48aW1nIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVt ZW50L2ltZy8zLjAvMXB4LmdpZiIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2OCIgYWx0PSJNaWNoYWVs IENhaW5lIG9uICdJbmNlcHRpb24nIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5z cGFyZW50IHVybCgnaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvU0hPV0JJWi9Nb3Zp ZXMvMTAvMDEvaW5jZXB0aW9uLm1pY2hhZWwuY2FpbmUuZXcvdHp2aWRzLmluY2VwdGlvbi5qcGcn KSAwIDAgbm8tcmVwZWF0O2Rpc3BsYXk6bm9uZTsiIGNsYXNzPSJjbm5Db250ZW50SW1nIj48L2E+ PC9kaXY+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHR4dCI+PGEgaHJlZj0iLzIwMTAvU0hPV0JJWi9N b3ZpZXMvMTAvMDEvaW5jZXB0aW9uLm1pY2hhZWwuY2FpbmUuZXcvaW5kZXguaHRtbD9ocHQ9TWlk Ij48c3Bhbj5NaWNoYWVsIENhaW5lIG9uICdJbmNlcHRpb24nPC9zcGFuPjwvYT48L2Rpdj48L2Rp dj48L2Rpdj4gIDxkaXYgY2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9z dG4iPjxkaXYgY2xhc3M9ImNubl9mYWJjYXRpbWciPiAgIDxhIGhyZWY9Ii92aWRlby8jL3ZpZGVv L3dvcmxkLzIwMTAvMTAvMDEvY3R3LmludHYubGVzbGllLmNubj9ocHQ9TWlkIj48aW1nIHNyYz0i aHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgd2lk dGg9IjEyMCIgaGVpZ2h0PSI2OCIgYWx0PSJGZW1pbmlzbSAnZ29uZSBib25rZXJzJz8iIGJvcmRl cj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6dHJhbnNwYXJlbnQgdXJsKCdodHRwOi8vaS5jZG4udHVy bmVyLmNvbS9jbm4vdmlkZW8vd29ybGQvMjAxMC8xMC8wMS9jdHcuaW50di5sZXNsaWUuY25uLjEy MHg2OC5qcGcnKSAwIDAgbm8tcmVwZWF0O2Rpc3BsYXk6bm9uZTsiIGNsYXNzPSJjbm5Db250ZW50 SW1nIj48L2E+PC9kaXY+PGRpdiBjbGFzcz0iY25uX3ZpZHBseWIzOHgzOCI+PGEgaHJlZj0iL3Zp ZGVvLyMvdmlkZW8vd29ybGQvMjAxMC8xMC8wMS9jdHcuaW50di5sZXNsaWUuY25uP2hwdD1NaWQi PjxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVu dC9pbWcvMy4wLzFweC5naWYiLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHR4dCI+ IDxhIGhyZWY9Ii92aWRlby8jL3ZpZGVvL3dvcmxkLzIwMTAvMTAvMDEvY3R3LmludHYubGVzbGll LmNubj9ocHQ9TWlkIj48c3Bhbj5GZW1pbmlzbSAnZ29uZSBib25rZXJzJz88L3NwYW4+PC9hPjwv ZGl2PjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJjbm5fZmFiY2F0eiI+PGRpdiBjbGFzcz0iY25u X3JlbHBvc3RuIj48ZGl2IGNsYXNzPSJjbm5fZmFiY2F0aW1nIj4gICA8YSBocmVmPSIvMjAxMC9V Uy8xMC8wMS9uYXNhLndvcmtlci5sYXlvZmZzL2luZGV4Lmh0bWw/aHB0PU1pZCI+PGltZyBzcmM9 Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcvMy4wLzFweC5naWYiIHdp ZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iU2h1dHRsZSBsYXlvZmZzIHNldCB3b3JrZXJzIGFk cmlmdCIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDp0cmFuc3BhcmVudCB1cmwoJ2h0dHA6 Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8yMDEwL1VTLzEwLzAxL25hc2Eud29ya2VyLmxheW9mZnMv dHp2aWRzLm5hc2Eud29ya2VyLmNubi5qcGcnKSAwIDAgbm8tcmVwZWF0O2Rpc3BsYXk6bm9uZTsi IGNsYXNzPSJjbm5Db250ZW50SW1nIj48L2E+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHR4 dCI+PGEgaHJlZj0iLzIwMTAvVVMvMTAvMDEvbmFzYS53b3JrZXIubGF5b2Zmcy9pbmRleC5odG1s P2hwdD1NaWQiPjxzcGFuPlNodXR0bGUgbGF5b2ZmcyBzZXQgd29ya2VycyBhZHJpZnQ8L3NwYW4+ PC9hPjwvZGl2PjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJjbm5fZmFiY2F0eiI+PGRpdiBjbGFz cz0iY25uX3JlbHBvc3RuIj48ZGl2IGNsYXNzPSJjbm5fZmFiY2F0aW1nIj4gICA8YSBocmVmPSIv MjAxMC9XT1JMRC9hZnJpY2EvMTAvMDEvc2VuZWdhbGVzZS5mb29kLmNoZWYvaW5kZXguaHRtbD9o cHQ9TWlkIj48aW1nIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2lt Zy8zLjAvMXB4LmdpZiIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2OCIgYWx0PSJUaGUgY2hlZiBzZXJ2 aW5nIEFmcmljYSBvbiBhIHBsYXRlIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5z cGFyZW50IHVybCgnaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvV09STEQvYWZyaWNh LzEwLzAxL3NlbmVnYWxlc2UuZm9vZC5jaGVmL3R6dmlkcy5zZW5lZ2FsLmpwZycpIDAgMCBuby1y ZXBlYXQ7ZGlzcGxheTpub25lOyIgY2xhc3M9ImNubkNvbnRlbnRJbWciPjwvYT48L2Rpdj48ZGl2 IGNsYXNzPSJjbm5fZmFiY2F0dHh0Ij48YSBocmVmPSIvMjAxMC9XT1JMRC9hZnJpY2EvMTAvMDEv c2VuZWdhbGVzZS5mb29kLmNoZWYvaW5kZXguaHRtbD9ocHQ9TWlkIj48c3Bhbj5UaGUgY2hlZiBz ZXJ2aW5nIEFmcmljYSBvbiBhIHBsYXRlPC9zcGFuPjwvYT48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2 IGNsYXNzPSJjbm5fZmFiY2F0eiI+PGRpdiBjbGFzcz0iY25uX3JlbHBvc3RuIj48ZGl2IGNsYXNz PSJjbm5fZmFiY2F0aW1nIiBpZD0iZ2FsbGVyeV8wX2FkXzEiPjwvZGl2PjwvZGl2PjxkaXYgaWQ9 ImdhbGxlcnlfMF9hZF8xX2FkZ2lmIiBjbGFzcz0iY25uX2ZhYmNhdGFkIj48L2Rpdj48L2Rpdj4g PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHoiPjxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRpdiBj bGFzcz0iY25uX2ZhYmNhdGltZyI+ICAgPGEgaHJlZj0iLzIwMTAvV09STEQvYWZyaWNhLzA5LzMw L25pZ2VyaWEuZ29vZGx1Y2svaW5kZXguaHRtbD9ocHQ9TWlkIj48aW1nIHNyYz0iaHR0cDovL2ku Y2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgd2lkdGg9IjEyMCIg aGVpZ2h0PSI2OCIgYWx0PSJOaWdlcmlhbiBsZWFkZXIgb24gcG93ZXIgYW5kIHZpb2xlbmNlIiBi b3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0cDovL2kuY2Ru LnR1cm5lci5jb20vY25uLzIwMTAvV09STEQvYWZyaWNhLzA5LzMwL25pZ2VyaWEuZ29vZGx1Y2sv aW50di5nb29kbHVjay5qb25hdGhhbi5uaWdlcmlhLmNubi4xMjB4NjguanBnJykgMCAwIG5vLXJl cGVhdDtkaXNwbGF5Om5vbmU7IiBjbGFzcz0iY25uQ29udGVudEltZyI+PC9hPjwvZGl2PjxkaXYg Y2xhc3M9ImNubl9mYWJjYXR0eHQiPjxhIGhyZWY9Ii8yMDEwL1dPUkxEL2FmcmljYS8wOS8zMC9u aWdlcmlhLmdvb2RsdWNrL2luZGV4Lmh0bWw/aHB0PU1pZCI+PHNwYW4+TmlnZXJpYW4gbGVhZGVy IG9uIHBvd2VyIGFuZCB2aW9sZW5jZTwvc3Bhbj48L2E+PC9kaXY+PC9kaXY+PC9kaXY+IDxkaXYg Y2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9zdG4iPjxkaXYgY2xhc3M9 ImNubl9mYWJjYXRpbWciPiAgIDxhIGhyZWY9Ii8yMDEwL1dPUkxEL21lYXN0LzEwLzAxL3llbWVu LmNoaWxkLmJyaWRlcy9pbmRleC5odG1sP2hwdD1NaWQiPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4u dHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lmIiB3aWR0aD0iMTIwIiBoZWln aHQ9IjY4IiBhbHQ9IlllbWVuJ3MgZGl2b3JjZWQgY2hpbGQgYnJpZGVzIiBib3JkZXI9IjAiIHN0 eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0cDovL2kuY2RuLnR1cm5lci5jb20v Y25uLzIwMTAvV09STEQvbWVhc3QvMTAvMDEveWVtZW4uY2hpbGQuYnJpZGVzL3R6dmlkcy5naXJs LmNubi5qcGcnKSAwIDAgbm8tcmVwZWF0O2Rpc3BsYXk6bm9uZTsiIGNsYXNzPSJjbm5Db250ZW50 SW1nIj48L2E+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHR4dCI+PGEgaHJlZj0iLzIwMTAv V09STEQvbWVhc3QvMTAvMDEveWVtZW4uY2hpbGQuYnJpZGVzL2luZGV4Lmh0bWw/aHB0PU1pZCI+ PHNwYW4+WWVtZW4ncyBkaXZvcmNlZCBjaGlsZCBicmlkZXM8L3NwYW4+PC9hPjwvZGl2PjwvZGl2 PjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJjbm5fZmFiY2FzbGFiIj4gPGRpdiBjbGFzcz0iY25u X2ZhYmNhdHoiPjxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNh dGltZyI+ICAgPGEgaHJlZj0iLzIwMTAvU1BPUlQvZ29sZi8wOS8zMC9nb2xmLnJ5ZGVyLmN1cC5m YWN0cy9pbmRleC5odG1sP2hwdD1NaWQiPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNv bS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lmIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY4IiBh bHQ9IlJ5ZGVyIEN1cDogVGhpbmdzIHlvdSBkb24ndCBrbm93IiBib3JkZXI9IjAiIHN0eWxlPSJi YWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLzIw MTAvU1BPUlQvZ29sZi8wOS8zMC9nb2xmLnJ5ZGVyLmN1cC5mYWN0cy90enZpZHMuYWJlbWl0Y2hl bGwuZ2kuanBnJykgMCAwIG5vLXJlcGVhdDtkaXNwbGF5Om5vbmU7IiBjbGFzcz0iY25uQ29udGVu dEltZyI+PC9hPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9mYWJjYXR0eHQiPjxhIGhyZWY9Ii8yMDEw L1NQT1JUL2dvbGYvMDkvMzAvZ29sZi5yeWRlci5jdXAuZmFjdHMvaW5kZXguaHRtbD9ocHQ9TWlk Ij48c3Bhbj5SeWRlciBDdXA6IFRoaW5ncyB5b3UgZG9uJ3Qga25vdzwvc3Bhbj48L2E+PC9kaXY+ PC9kaXY+PC9kaXY+IDxkaXYgY2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVs cG9zdG4iPjxkaXYgY2xhc3M9ImNubl9mYWJjYXRpbWciPiAgIDxhIGhyZWY9Ii8yMDEwL0JVU0lO RVNTLzA5LzI5L21iYS5yYW5raW5nLnVwc2V0L2luZGV4Lmh0bWw/aHB0PU1pZCI+PGltZyBzcmM9 Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcvMy4wLzFweC5naWYiIHdp ZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iRXVyb3BlYW4gYnVzaW5lc3Mgc2Nob29scyB0cmFp bCBVLlMuIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0 cDovL2kuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvQlVTSU5FU1MvMDkvMjkvbWJhLnJhbmtpbmcu dXBzZXQvdHp2aWRzLmZpbmFuY2lhbC5jbm4uanBnJykgMCAwIG5vLXJlcGVhdDtkaXNwbGF5Om5v bmU7IiBjbGFzcz0iY25uQ29udGVudEltZyI+PC9hPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9mYWJj YXR0eHQiPjxhIGhyZWY9Ii8yMDEwL0JVU0lORVNTLzA5LzI5L21iYS5yYW5raW5nLnVwc2V0L2lu ZGV4Lmh0bWw/aHB0PU1pZCI+PHNwYW4+RXVyb3BlYW4gYnVzaW5lc3Mgc2Nob29scyB0cmFpbCBV LlMuPC9zcGFuPjwvYT48L2Rpdj48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0iY25uX2ZhYmNhdHoi PjxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdGltZyI+ICAg PGEgaHJlZj0iLzIwMTAvQlVTSU5FU1MvMTAvMDEvcGFyaXMuYXV0by5zaG93L2luZGV4Lmh0bWw/ aHB0PU1pZCI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9p bWcvMy4wLzFweC5naWYiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iQXV0byBpbmR1c3Ry eSBleWVzIGVsZWN0cmljIG1hcmtldCAiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6dHJh bnNwYXJlbnQgdXJsKCdodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9CVVNJTkVTUy8x MC8wMS9wYXJpcy5hdXRvLnNob3cvdHp2aWRzLnBhcmlzLnNob3cuanBnJykgMCAwIG5vLXJlcGVh dDtkaXNwbGF5Om5vbmU7IiBjbGFzcz0iY25uQ29udGVudEltZyI+PC9hPjwvZGl2PjxkaXYgY2xh c3M9ImNubl9mYWJjYXR0eHQiPjxhIGhyZWY9Ii8yMDEwL0JVU0lORVNTLzEwLzAxL3BhcmlzLmF1 dG8uc2hvdy9pbmRleC5odG1sP2hwdD1NaWQiPjxzcGFuPkF1dG8gaW5kdXN0cnkgZXllcyBlbGVj dHJpYyBtYXJrZXQgPC9zcGFuPjwvYT48L2Rpdj48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0iY25u X2ZhYmNhdHoiPjxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNh dGltZyI+ICAgPGEgaHJlZj0iLzIwMTAvQlVTSU5FU1MvMTAvMDEvY2hpbmEuYmlsbGlvbmFpcmVz LnBoaWxhbnRocm9weS5jdWx0dXJlL2luZGV4Lmh0bWw/aHB0PU1pZCI+PGltZyBzcmM9Imh0dHA6 Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcvMy4wLzFweC5naWYiIHdpZHRoPSIx MjAiIGhlaWdodD0iNjgiIGFsdD0iQ2hpbmEncyBiaWxsaW9uYWlyZXMgc2hhcmUgdGhlIHdlYWx0 aD8iIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6dHJhbnNwYXJlbnQgdXJsKCdodHRwOi8v aS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9CVVNJTkVTUy8xMC8wMS9jaGluYS5iaWxsaW9uYWly ZXMucGhpbGFudGhyb3B5LmN1bHR1cmUvdHp2aWRzLmdhdGVzLmJ1ZmZldHQuanBnJykgMCAwIG5v LXJlcGVhdDtkaXNwbGF5Om5vbmU7IiBjbGFzcz0iY25uQ29udGVudEltZyI+PC9hPjwvZGl2Pjxk aXYgY2xhc3M9ImNubl9mYWJjYXR0eHQiPjxhIGhyZWY9Ii8yMDEwL0JVU0lORVNTLzEwLzAxL2No aW5hLmJpbGxpb25haXJlcy5waGlsYW50aHJvcHkuY3VsdHVyZS9pbmRleC5odG1sP2hwdD1NaWQi PjxzcGFuPkNoaW5hJ3MgYmlsbGlvbmFpcmVzIHNoYXJlIHRoZSB3ZWFsdGg/PC9zcGFuPjwvYT48 L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fZmFiY2F0eiI+PGRpdiBjbGFzcz0iY25u X3JlbHBvc3RuIj48ZGl2IGNsYXNzPSJjbm5fZmFiY2F0aW1nIiBpZD0iZ2FsbGVyeV8wX2FkXzIi PjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImdhbGxlcnlfMF9hZF8yX2FkZ2lmIiBjbGFzcz0iY25uX2Zh YmNhdGFkIj48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0iY25uX2ZhYmNhdHoiPjxkaXYgY2xhc3M9 ImNubl9yZWxwb3N0biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdGltZyI+ICAgPGEgaHJlZj0iaHR0 cDovL2J1c2luZXNzLmJsb2dzLmNubi5jb20vMjAxMC8wOS8zMC9ub2JlbC1wcml6ZS13aW5uZXIt cmV0aGlua2luZy1idXNpbmVzcy1hZnRlci10aGUtcmVjZXNzaW9uLz9ocHQ9TWlkIj48aW1nIHNy Yz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIg d2lkdGg9IjEyMCIgaGVpZ2h0PSI2OCIgYWx0PSJBICdOb2JlbCcgaWRlYTogU29jaWFsIGJ1c2lu ZXNzIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0cDov L2kuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvaW1hZ2VzLzEwLzAxL2ludHYubWNlZHdhcmRzLnl1 bnVzLmNubi4xMjB4NjguanBnJykgMCAwIG5vLXJlcGVhdDtkaXNwbGF5Om5vbmU7IiBjbGFzcz0i Y25uQ29udGVudEltZyI+PC9hPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9mYWJjYXR0eHQiPjxhIGhy ZWY9Imh0dHA6Ly9idXNpbmVzcy5ibG9ncy5jbm4uY29tLzIwMTAvMDkvMzAvbm9iZWwtcHJpemUt d2lubmVyLXJldGhpbmtpbmctYnVzaW5lc3MtYWZ0ZXItdGhlLXJlY2Vzc2lvbi8/aHB0PU1pZCI+ PHNwYW4+QSAnTm9iZWwnIGlkZWE6IFNvY2lhbCBidXNpbmVzczwvc3Bhbj48L2E+PC9kaXY+PC9k aXY+PC9kaXY+IDxkaXYgY2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9z dG4iPjxkaXYgY2xhc3M9ImNubl9mYWJjYXRpbWciPiAgIDxhIGhyZWY9Ii8yMDEwL1RSQVZFTC8w OS8zMC9hc2hsZXkuanVkZC5hZnJpY2EvaW5kZXguaHRtbD9ocHQ9TWlkIj48aW1nIHNyYz0iaHR0 cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgd2lkdGg9 IjEyMCIgaGVpZ2h0PSI2OCIgYWx0PSInVGhlIHdvcnN0IHBsYWNlIHRvIGJlIGEgd29tYW4nIiBi b3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0cDovL2kuY2Ru LnR1cm5lci5jb20vY25uLzIwMTAvVFJBVkVMLzA5LzMwL2FzaGxleS5qdWRkLmFmcmljYS90enZp ZHMuanVkZC5qcGcnKSAwIDAgbm8tcmVwZWF0O2Rpc3BsYXk6bm9uZTsiIGNsYXNzPSJjbm5Db250 ZW50SW1nIj48L2E+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHR4dCI+PGEgaHJlZj0iLzIw MTAvVFJBVkVMLzA5LzMwL2FzaGxleS5qdWRkLmFmcmljYS9pbmRleC5odG1sP2hwdD1NaWQiPjxz cGFuPidUaGUgd29yc3QgcGxhY2UgdG8gYmUgYSB3b21hbic8L3NwYW4+PC9hPjwvZGl2PjwvZGl2 PjwvZGl2PjwvZGl2PiA8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJjbm5f ZmFiY25leHQiIGNsYXNzPSJjbm5fZmFiY254dCI+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2NsZWFy Ij48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48 L2Rpdj48L2Rpdj4gICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgoKCXZhciBDTk5f Z2FsbGVyeV8wX2FkXzAgPSAiL2Nubl9hZHNwYWNlcy8zLjAvaG9tZXBhZ2UvbWFpbi9ib3QxLjEy MHg5MC5hZCI7IC8vcGF0aCB0byBhZCBmaWxlCgl2YXIgQ05OX2dhbGxlcnlfMF9hZF8xID0gIi9j bm5fYWRzcGFjZXMvMy4wL2hvbWVwYWdlL21haW4vYm90Mi4xMjB4OTAuYWQiOyAvL3BhdGggdG8g YWQgZmlsZQoJdmFyIENOTl9nYWxsZXJ5XzBfYWRfMiA9ICIvY25uX2Fkc3BhY2VzLzMuMC9ob21l cGFnZS9tYWluL2JvdDMuMTIweDkwLmFkIjsgLy9wYXRoIHRvIGFkIGZpbGUKCgl2YXIgQ05OX2dh bGxlcnlfMV9hZF8wID0gIi9jbm5fYWRzcGFjZXMvMy4wL2hvbWVwYWdlL21haW4vYm90NC4xMjB4 OTAuYWQiOyAvL3BhdGggdG8gYWQgZmlsZQoJdmFyIENOTl9nYWxsZXJ5XzFfYWRfMSA9ICIvY25u X2Fkc3BhY2VzLzMuMC9ob21lcGFnZS9tYWluL2JvdDUuMTIweDkwLmFkIjsgLy9wYXRoIHRvIGFk IGZpbGUKCXZhciBDTk5fZ2FsbGVyeV8xX2FkXzIgPSAiL2Nubl9hZHNwYWNlcy8zLjAvaG9tZXBh Z2UvbWFpbi9ib3Q2LjEyMHg5MC5hZCI7IC8vcGF0aCB0byBhZCBmaWxlCgoJdmFyIENOTl9nYWxs ZXJ5XzJfYWRfMCA9ICIvY25uX2Fkc3BhY2VzLzMuMC9ob21lcGFnZS9tYWluL2JvdDcuMTIweDkw LmFkIjsgLy9wYXRoIHRvIGFkIGZpbGUKCXZhciBDTk5fZ2FsbGVyeV8yX2FkXzEgPSAiL2Nubl9h ZHNwYWNlcy8zLjAvaG9tZXBhZ2UvbWFpbi9ib3Q4LjEyMHg5MC5hZCI7IC8vcGF0aCB0byBhZCBm aWxlCgl2YXIgQ05OX2dhbGxlcnlfMl9hZF8yID0gIi9jbm5fYWRzcGFjZXMvMy4wL2hvbWVwYWdl L21haW4vYm90OS4xMjB4OTAuYWQiOyAvL3BhdGggdG8gYWQgZmlsZQoKCWlmICggJCgnY25uX0dh bGxlcnlTbGlkZXJDb250YWluZXInKSApIHsKCQljbm5fU2VjdGlvbkdhbGxlcnkgPSBuZXcgY25u X0dhbGxlcnlTbGlkZXIoKTsKCX0KCjwvc2NyaXB0PgogICA8ZGl2IGNsYXNzPSJjbm5fcGFkMnRv cCBjbm5fc2hkc3BjIj48L2Rpdj4KPGRpdiBjbGFzcz0iY25uX2NvbnRlbnRhcmVhIGNubl9zaGRz ZWN0YmluIj4KCTxkaXYgY2xhc3M9ImNubl9zaGRjYWhlYWRlciI+PC9kaXY+Cgo8ZGl2IGNsYXNz PSJjbm5fc2VjdGJpbjEiPgoJPGRpdiBjbGFzcz0iY25uX3NlY3RiaW5jbnRudCI+PGRpdiBjbGFz cz0iY25uX3NlY3RiaW5jbnRudDIiPiA8aDQ+PGEgaHJlZj0iL0JVU0lORVNTLz9ocHQ9U2JpbiI+ QnVzaW5lc3M8L2E+PC9oND48ZGl2IGNsYXNzPSJjbm5fY2xlYXIiPjwvZGl2PjxkaXYgY2xhc3M9 ImNubl9kaXZsaW5lIj48L2Rpdj4gPHVsIGNsYXNzPSJjbm5fYnVsbGV0YmluIj48bGk+PGEgaHJl Zj0iLzIwMTAvT1BJTklPTi8xMC8wMS96YWthcmlhLmNoaW5hLnRyYWRlL2luZGV4Lmh0bWw/aHB0 PVNiaW4iPlUuUy4tQ2hpbmEgcmlmdCB3b3VsZCBiZSAnY2F0YXN0cm9waGljJzwvYT48L2xpPjxs aT48YSBocmVmPSIvMjAxMC9CVVNJTkVTUy8xMC8wMS9wYXJpcy5hdXRvLnNob3cvaW5kZXguaHRt bD9ocHQ9U2JpbiI+QXV0byBTaG93OiBQYXJpcyBpcyBlbGVjdHJpYyA8L2E+PC9saT48bGk+PGEg aHJlZj0iaHR0cDovL21vbmV5LmNubi5jb20vMjAxMC8xMC8wMS9tYXJrZXRzL1NFQ19DRlRDX2Zs YXNoX2NyYXNoL2luZGV4Lmh0bT9jbm49eWVzJmFtcDtocHQ9U2JpbiI+VHJhZGluZyBwcm9ibGVt IGNhdXNlZCAnZmxhc2ggY3Jhc2gnPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9tb25leS5j bm4uY29tLzIwMTAvMTAvMDEvbmV3cy9jb21wYW5pZXMvVW5pdGVkX0NvbnRpbmVudGFsL2luZGV4 Lmh0bT9jbm49eWVzJmFtcDtocHQ9U2JpbiI+Q29udGluZW50YWwsIFVuaXRlZCBtZXJnZTwvYT48 L2xpPjxsaT48YSBocmVmPSIvMjAxMC9VUy8xMC8wMS9uYXNhLndvcmtlci5sYXlvZmZzL2luZGV4 Lmh0bWw/aHB0PVNiaW4iPk5BU0Egd29ya2VycyBmYWNlIGxheW9mZnM8L2E+PC9saT48bGk+PGEg aHJlZj0iaHR0cDovL21vbmV5LmNubi5jb20vMjAxMC8xMC8wMS9uZXdzL2NvbXBhbmllcy9nb2xk X2F0bXMvaW5kZXguaHRtP2Nubj15ZXMmYW1wO2hwdD1TYmluIj5Hb2xkIEFUTXMgY29taW5nIHRv IFUuUy48L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvQlVTSU5FU1MvMTAvMDEvaWtlYS5zd2Vk ZW4ucHJvZml0cy5mdC9pbmRleC5odG1sP2hwdD1TYmluIj5Ja2VhIHJldmVhbHMgcHJvZml0cyBm b3IgZmlyc3QgdGltZTwvYT48L2xpPjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0iY25uX210cG1vcmUi PjxhIGhyZWY9Ii9CVVNJTkVTUy8/aHB0PVNiaW4iIGNsYXNzPSJjbm5fbXRwbW9yZWJ0biI+PGlt ZyBhbHQ9Ik1vcmUiIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2lt Zy8zLjAvMXB4LmdpZiIgYm9yZGVyPSIwIj48L2E+PC9kaXY+PC9kaXY+ICAgCjwvZGl2PjwhLS0g L2Nubl9zZWN0YmluMSAtLT4KCgo8ZGl2IGNsYXNzPSJjbm5fc2VjdGJpbjIiPgoJPGRpdiBjbGFz cz0iY25uX3NlY3RiaW5jbnRudCI+PGRpdiBjbGFzcz0iY25uX3NlY3RiaW5jbnRudDIiPiA8aDQ+ PGEgaHJlZj0iL1NQT1JULz9ocHQ9U2JpbiI+V29ybGQgU3BvcnQ8L2E+PC9oND48ZGl2IGNsYXNz PSJjbm5fY2xlYXIiPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9kaXZsaW5lIj48L2Rpdj4gPHVsIGNs YXNzPSJjbm5fYnVsbGV0YmluIj48bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvYXNpYXBjZi8xMC8w My9pbmRpYS5jb21tb253ZWFsdGguZ2FtZXMvaW5kZXguaHRtbD9ocHQ9U2JpbiI+Q29tbW9ud2Vh bHRoIEdhbWVzIG9wZW5pbmc8L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvU1BPUlQvbW90b3Jz cG9ydC8xMC8wMy93b3JsZC5yYWxseS50aXRsZS5sb2ViLmZyYW5jZS9pbmRleC5odG1sP2hwdD1T YmluIj5Nb3RvcnNwb3J0OiBTZXZlbiBzdHJhaWdodCBmb3IgTG9lYjwvYT48L2xpPjxsaT48YSBo cmVmPSIvMjAxMC9TUE9SVC90ZW5uaXMvMTAvMDMvdGhhaWxhbmQuZ2FyY2lhLmxvcGV6Lm5hZGFs LnRva3lvL2luZGV4Lmh0bWw/aHB0PVNiaW4iPlRlbm5pczogTmFkYWwncyBjb25xdWVyb3Igd2lu cyB0aXRsZTwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9TUE9SVC9nb2xmLzEwLzAyL3J5ZGVy LmN1cC5kYXkudHdvL2luZGV4Lmh0bWw/aHB0PVNiaW4iPkdvbGY6IEV1cm9wZSBpbiBmaWdodGJh Y2s8L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvU1BPUlQvZm9vdGJhbGwvMTAvMDIvc3BhaW4u aXRhbHkuc2F0dXJkYXkucmVzdWx0cy9pbmRleC5odG1sP2hwdD1TYmluIj5Gb290YmFsbDogTWls YW4gZ28gdG9wOyBWYWxlbmNpYSB3aW48L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvU1BPUlQv Zm9vdGJhbGwvMTAvMDIvcHJlbWllci5sZWFndWUuc2F0dXJkYXkucmVzdWx0cy9pbmRleC5odG1s P2hwdD1TYmluIj5Gb290YmFsbDogTWFuIFVuaXRlZCBoZWxkOyBTcHVycyB3aW48L2E+PC9saT48 bGk+PGEgaHJlZj0iLzIwMTAvU1BPUlQvZm9vdGJhbGwvMTAvMDIvYnVuZGVzbGlnYS5zYXR1cmRh eS5yb3VuZHVwLm1haW56L2luZGV4Lmh0bWw/aHB0PVNiaW4iPkZvb3RiYWxsOiBTZXZlbnRoIGhl YXZlbiBmb3IgTWFpbno8L2E+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9tdHBtb3Jl Ij48YSBocmVmPSIvU1BPUlQvP2hwdD1TYmluIiBjbGFzcz0iY25uX210cG1vcmVidG4iPjxpbWcg YWx0PSJNb3JlIiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcv My4wLzFweC5naWYiIGJvcmRlcj0iMCI+PC9hPjwvZGl2PjwvZGl2PiAgIAo8L2Rpdj48IS0tIC9j bm5fc2VjdGJpbjIgLS0+CgoKPGRpdiBjbGFzcz0iY25uX3NlY3RiaW4zIj4KCTxkaXYgY2xhc3M9 ImNubl9zZWN0YmluY250bnQiPjxkaXYgY2xhc3M9ImNubl9zZWN0YmluY250bnQyIj4gPGg0PkRh aWx5IFNuYXBzaG90PC9oND48ZGl2IGNsYXNzPSJjbm5fY2xlYXIiPjwvZGl2PjxkaXYgY2xhc3M9 ImNubl9kaXZsaW5lIj48L2Rpdj4gIDxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRpdiBjbGFz cz0iY25uX210dDFpbWciPjxkaXY+ICAgPGEgaHJlZj0iLzIwMTAvVFJBVkVMLzA1LzIzL2RhaWx5 LnNuYXBzaG90L2luZGV4Lmh0bWw/aHB0PVNiaW4iPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVy bmVyLmNvbS9jbm4vMjAxMC9UUkFWRUwvMDUvMjMvZGFpbHkuc25hcHNob3QvdHpiaW5zLm1vdXN0 YWNoZS5hZnAuZ2kuanBnIiB3aWR0aD0iMjIwIiBoZWlnaHQ9Ijg0IiBhbHQ9IlRoZSBjYXQncyB3 aGlza2VycyIgYm9yZGVyPSIwIj48L2E+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY25uX210dDFp bWdoIj48ZGl2IGNsYXNzPSJjbm5fbXR0MWltZ2h0aXRsZSI+PGgyPjxzcGFuPjxhIGhyZWY9Ii8y MDEwL1RSQVZFTC8wNS8yMy9kYWlseS5zbmFwc2hvdC9pbmRleC5odG1sP2hwdD1TYmluIj5UaGUg Y2F0J3Mgd2hpc2tlcnM8L2E+PC9zcGFuPjwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFz cz0iY25uX3BhZDExdG9wIj48L2Rpdj4gPHVsIGNsYXNzPSJjbm5fYnVsbGV0YmluIj48bGk+PGEg aHJlZj0iaHR0cDovL3d3dy5pcmVwb3J0LmNvbS8/aHB0PVNiaW4iPlNlbmQgeW91ciBpbWFnZXMg dG8gaVJlcG9ydDwvYT48L2xpPjwvdWw+PC9kaXY+PC9kaXY+ICAgCgo8ZGl2IGNsYXNzPSJjbm5f YWRzcGMxNTV4MzEiPgo8IS0tIEFEU1BBQ0U6IGhvbWVwYWdlL3Nwb24uODh4MzFfZGFpbHlzbmFw IC0tPg0KDQoNCg0KDQoNCjwhLS0gQ0FMTE9VVHxodHRwOi8vYWRzLmNubi5jb20vaHRtbC5uZy9z aXRlPWNubl9pbnRlcm5hdGlvbmFsJmNubl9pbnRsX3Bvc2l0aW9uPTg4eDMxX3Nwb25fZGFpbHlz bmFwJmNubl9pbnRsX3JvbGx1cD1ob21lcGFnZSZwYWdlLmFsbG93Y29tcGV0ZT15ZXMmcGFyYW1z LnN0eWxlcz1mc3xDQUxMT1VUIC0tPg0KPGRpdiBpZD0iYWQtOTM5MTQ5IiBhbGlnbj0iY2VudGVy IiBzdHlsZT0icGFkZGluZzogMDsgbWFyZ2luOiAwOyBib3JkZXI6IDA7Ij48L2Rpdj4NCjxzY3Jp cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmNubmFkX2NyZWF0ZUFkKCI5MzkxNDkiLCJodHRw Oi8vYWRzLmNubi5jb20vaHRtbC5uZy9zaXRlPWNubl9pbnRlcm5hdGlvbmFsJmNubl9pbnRsX3Bv c2l0aW9uPTg4eDMxX3Nwb25fZGFpbHlzbmFwJmNubl9pbnRsX3JvbGx1cD1ob21lcGFnZSZwYWdl LmFsbG93Y29tcGV0ZT15ZXMmcGFyYW1zLnN0eWxlcz1mcyIsIjMxIiwiODgiKTsNCmNubmFkX3Jl Z2lzdGVyU3BhY2UoOTM5MTQ5LDg4LDMxKTsNCjwvc2NyaXB0Pg0KDQoNCg0KDQoNCg0KDQoNCg0K CjwvZGl2PgoKPC9kaXY+PCEtLSAvY25uX3NlY3RiaW4zIC0tPgoKCjxkaXYgY2xhc3M9ImNubl9z ZWN0YmluNCBjbm5fdHZzZWN0YmluIj4KCTxkaXYgY2xhc3M9ImNubl90dnNiMSI+CgkJPGg0Pjxh IGhyZWY9Ii9DTk5JLz9ocHQ9dHYiPkNOTiBUVjwvYT48L2g0PgoJCTxkaXYgY2xhc3M9ImNubl9j bGVhciI+PC9kaXY+CgkJPGRpdiBjbGFzcz0iY25uX2RpdmxpbmUiPjwvZGl2PgoJCQkJCQkKCQk8 IS0tIC9jbm4gVFYgUHJvbW8gdG9vbCBpbmNsdWRlIC0tPgo8ZGl2IGNsYXNzPSJjbm5fdHNidHoi PgoJPGRpdiBjbGFzcz0iY25uX3RzYnRpbWciPjxhIGhyZWY9Imh0dHA6Ly9lZGl0aW9uLmNubi5j b20vU1BFQ0lBTFMvY25uLmhlcm9lcy9pbmRleC5odG1sP2hwdD10diI+PGltZyBzcmM9IiBodHRw Oi8vaTIuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvaW1hZ2VzLzA5LzIyL2Nubl9oZXJvZXNfcHJv bW9fc3RhbXAuanBnIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY4IiBhbHQ9IiIgYm9yZGVyPSIwIj48 L2E+PC9kaXY+Cgk8ZGl2IGNsYXNzPSJjbm5fdHNidHR4dCI+CgkJPGRpdj48YSBocmVmPSJodHRw Oi8vZWRpdGlvbi5jbm4uY29tL1NQRUNJQUxTL2Nubi5oZXJvZXMvaW5kZXguaHRtbD9ocHQ9dHYi PjxiPklzIFlvdXIgSGVybyBvbiB0aGUgTGlzdD88L2I+PC9hPjxicj48c3Bhbj5Wb3RlIE5vdyE8 L3NwYW4+PC9kaXY+Cgk8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+ CjxkaXYgY2xhc3M9ImNubl90dnNlY3RiaW4iPldobyB3aWxsIGJlIHRoZSAyMDEwIENOTiBIZXJv IG9mIHRoZSBZZWFyPyBNZWV0IHRoZSBUb3AgMTAgSGVyb2VzICYgVm90ZSBmb3IgeW91ciBmYXZv cml0ZSBub3chIDxhIGhyZWY9Imh0dHA6Ly9lZGl0aW9uLmNubi5jb20vU1BFQ0lBTFMvY25uLmhl cm9lcy9pbmRleC5odG1sIj5DbGljayBoZXJlIGZvciBtb3JlITwvYT48L2Rpdj4KPCEtLSAvY25u IFRWIFByb21vIHRvb2wgaW5jbHVkZSAtLT4KCgk8L2Rpdj4KCTxkaXYgY2xhc3M9ImNubl9kaXZs aW5lIj48L2Rpdj4KCTxmb3JtIGNsYXNzPSJjbm5fbWFpbnR2ZHJvcGRvd24iPgoJCTxzZWxlY3Qg b25jaGFuZ2U9ImlmICh0aGlzLm9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUgIT0gJycpIGxv Y2F0aW9uLmhyZWYgPSB0aGlzLm9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWU7Ij4KPG9wdGlv biB2YWx1ZT0iUHJvZ3JhbXMiPlByb2dyYW1zPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IiIgZGlz YWJsZWQ9ImRpc2FibGVkIj4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIvQ05OSS9zY2hlZHVsZXMvZXVyb3BlLyI+ U2NoZWR1bGU8L29wdGlvbj4KPG9wdGlvbiBkaXNhYmxlZD0iZGlzYWJsZWQiIHZhbHVlPSIiPi0t LS0tIEdMT0JBTCBORVdTIC0tLS0tPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9DTk5JL1Byb2dy YW1zL2Nvbm5lY3QudGhlLndvcmxkLyI+Q29ubmVjdCBUaGUgV29ybGQ8L29wdGlvbj4KPG9wdGlv biB2YWx1ZT0iaHR0cDovL2ludGVybmF0aW9uYWxkZXNrLmJsb2dzLmNubi5jb20vIj5JbnRlcm5h dGlvbmFsIERlc2s8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvdzEvIj5X b3JsZCBPbmU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvd29ybGQudmll dy8iPldvcmxkIFZpZXc8L29wdGlvbj4KPG9wdGlvbiBkaXNhYmxlZD0iZGlzYWJsZWQiIHZhbHVl PSIiPi0tLS0tIE5FV1MgRkVBVFVSRVMgLS0tLS08L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NO TkkvUHJvZ3JhbXMvYmFja3N0b3J5LyI+QmFja1N0b3J5PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9 Ii9TUEVDSUFMUy8yMDEwL2lsaXN0LyI+aS1MaXN0PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9T UEVDSUFMUy8yMDA3L2ltcGFjdC8iPkltcGFjdCBZb3VyIFdvcmxkPC9vcHRpb24+CjxvcHRpb24g dmFsdWU9Ii9DTk5JL1Byb2dyYW1zL2luc2lkZWFmcmljYS8iPkluc2lkZSBBZnJpY2E8L29wdGlv bj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvbWlkZGxlLmVhc3QvIj5JbnNpZGUgdGhl IE1pZGRsZSBFYXN0PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9DTk5JL1Byb2dyYW1zL2lyZXBv cnQvIj5pUmVwb3J0IGZvciBDTk48L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3Jh bXMvcG9saXRpY2FsLm1hbm4vIj5Qb2xpdGljYWwgTWFubjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVl PSIvQ05OL1Byb2dyYW1zL3NpdHVhdGlvbi5yb29tLyI+VGhlIFNpdHVhdGlvbiBSb29tPC9vcHRp b24+CjxvcHRpb24gdmFsdWU9Ii9DTk5JL1Byb2dyYW1zL3VudG9sZHN0b3JpZXMvIj5Xb3JsZCdz IFVudG9sZCBTdG9yaWVzPC9vcHRpb24+CjxvcHRpb24gZGlzYWJsZWQ9ImRpc2FibGVkIiB2YWx1 ZT0iIj4tLS0tLSBCVVNJTkVTUyBORVdTIC0tLS0tPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9D Tk5JL1Byb2dyYW1zL21hcmtldHBsYWNlLmFmcmljYS8iPk1hcmtldHBsYWNlIEFmcmljYTwvb3B0 aW9uPgo8b3B0aW9uIHZhbHVlPSIvQ05OSS9Qcm9ncmFtcy9tbWUvIj5NYXJrZXRwbGFjZSBNaWRk bGUgRWFzdDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJodHRwOi8vcXVlc3RtZWFuc2J1c2luZXNz LmJsb2dzLmNubi5jb20vIj5RdWVzdCBNZWFucyBCdXNpbmVzczwvb3B0aW9uPgo8b3B0aW9uIGRp c2FibGVkPSJkaXNhYmxlZCIgdmFsdWU9IiI+LS0tLS0gQlVTSU5FU1MgRkVBVFVSRVMgLS0tLS08 L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvYnVzaW5lc3MudHJhdmVsbGVy LyI+QnVzaW5lc3MgVHJhdmVsbGVyPC9vcHRpb24+CjxvcHRpb24gZGlzYWJsZWQ9ImRpc2FibGVk IiB2YWx1ZT0iIj4tLS0tLSBJTlRFUlZJRVcgYW5kIERFQkFURSAtLS0tLTwvb3B0aW9uPgo8b3B0 aW9uIHZhbHVlPSIvQ05OSS9Qcm9ncmFtcy9hZnJpY2Fudm9pY2VzLyI+QWZyaWNhbiBWb2ljZXM8 L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTi9Qcm9ncmFtcy9mYXJlZWQuemFrYXJpYS5ncHMv Ij5GYXJlZWQgWmFrYXJpYSBHUFM8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3Jh bXMvaW50bC5jb3JyZXNwb25kZW50cy8iPkludGVybmF0aW9uYWwgQ29ycmVzcG9uZGVudHM8L29w dGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTi9Qcm9ncmFtcy9sYXJyeS5raW5nLmxpdmUvIj5MYXJy eSBLaW5nIExpdmU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTi9Qcm9ncmFtcy9zdGF0ZS5v Zi50aGUudW5pb24vIj5TdGF0ZSBvZiB0aGUgVW5pb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0i L0FTSUEvdGFsa2FzaWEvIj5UYWxrIEFzaWE8L29wdGlvbj4KPG9wdGlvbiBkaXNhYmxlZD0iZGlz YWJsZWQiIHZhbHVlPSIiPi0tLS0tIFNQT1JUUyAtLS0tLTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVl PSIvU1BPUlQvZ29sZi8iPkxpdmluZyBHb2xmPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9DTk5J L1Byb2dyYW1zL21haW4uc2FpbC8iPk1haW5TYWlsPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9T UE9SVC90ZW5uaXMvIj5PcGVuIENvdXJ0PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9TUE9SVC8i PldvcmxkIFNwb3J0PC9vcHRpb24+CjxvcHRpb24gZGlzYWJsZWQ9ImRpc2FibGVkIiB2YWx1ZT0i Ij4tLS0tLSBMSUZFU1RZTEUgLS0tLS08L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJv Z3JhbXMvY25uZ28vIj5DTk5Hbzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIvQ05OSS9Qcm9ncmFt cy9lYXJ0aHMuZnJvbnRpZXJzLyI+RWFydGgncyBGcm9udGllcnM8L29wdGlvbj4KPG9wdGlvbiB2 YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvZWNvLnNvbHV0aW9ucy8iPkVjbyBTb2x1dGlvbnM8L29wdGlv bj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvaWNvbi8iPmljb248L29wdGlvbj4KPG9w dGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvcmV2ZWFsZWQvIj5SZXZlYWxlZDwvb3B0aW9uPgo8 b3B0aW9uIHZhbHVlPSIvQ05OSS9Qcm9ncmFtcy9zY3JlZW5pbmcucm9vbS8iPlRoZSBTY3JlZW5p bmcgUm9vbTwvb3B0aW9uPgo8L3NlbGVjdD4KCgk8L2Zvcm0+Cgk8ZGl2IGNsYXNzPSJjbm5fdHZz YjIiPjxhIGhyZWY9Ii9DTk5JL3NjaGVkdWxlcy9ldXJvcGUvP2hwdD10diI+Q05OIFRWIFNjaGVk dWxlPC9hPiAmbmJzcDt8Jm5ic3A7IDxhIGhyZWY9Ii9DTk5JLz9ocHQ9dHYiPldoYXQncyBvbj88 L2E+PC9kaXY+CjwvZGl2PjwhLS0gL2Nubl90dnNlY3RiaW4gLS0+CgoKPGRpdiBjbGFzcz0iY25u X2NsZWFyIj48L2Rpdj4KCjxkaXYgY2xhc3M9ImNubl9zaGRjYWZvb3RlciI+PC9kaXY+Cgo8ZGl2 IGNsYXNzPSJjbm5fcGFkMnRvcCBjbm5fc2hkc3BjIj48L2Rpdj4KCjxkaXYgY2xhc3M9ImNubl9z aGRjYWhlYWRlciI+PC9kaXY+Cgo8ZGl2IGNsYXNzPSJjbm5fc2VjdGJpbjEiPgoJPGRpdiBjbGFz cz0iY25uX3NlY3RiaW5jbnRudCI+PGRpdiBjbGFzcz0iY25uX3NlY3RiaW5jbnRudDIiPiA8aDQ+ PGEgaHJlZj0iL1NQRUNJQUxTLzIwMDkvZW52aXJvbm1lbnQvP2hwdD1TYmluIj5FbnZpcm9ubWVu dDwvYT48L2g0PjxkaXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2Rp dmxpbmUiPjwvZGl2PiA8dWwgY2xhc3M9ImNubl9idWxsZXRiaW4iPjxsaT48YSBocmVmPSIvMjAx MC9XT1JMRC9ldXJvcGUvMDkvMjgvcGxhbnQuZXh0aW5jdGlvbi50aHJlYXQuc3R1ZHkvaW5kZXgu aHRtbD9ocHQ9U2JpbiI+U3R1ZHk6IE9uZSBpbiBmaXZlIHBsYW50cyBpbiBwZXJpbDwvYT48L2xp PiA8bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvZXVyb3BlLzA5LzIyL3J1c3NpYS5hcmN0aWMucmVz b3VyY2VzL2luZGV4Lmh0bWw/aHB0PVNiaW4iPlJ1c3NpYSdzIHZpc2lvbiBmb3IgQXJjdGljIHdl YWx0aDwvYT48L2xpPiA8bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvZXVyb3BlLzA5LzIzL3VrLmxh cmdlc3Qud2luZC5mYXJtL2luZGV4Lmh0bWw/aHB0PVNiaW4iPkh1Z2Ugb2Zmc2hvcmUgd2luZCBm YXJtIG9wZW5zPC9hPjwvbGk+IDxsaT48YSBocmVmPSIvMjAxMC9XT1JMRC9hZnJpY2EvMDkvMjEv ZWxlcGhhbnQuc2hyZXcvaW5kZXguaHRtbD9ocHQ9U2JpbiI+U2NpZW50aXN0cyB0cnVtcGV0ICdz aHJldycgZmluZDwvYT48L2xpPiA8bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvYWZyaWNhLzA5LzIx L3NlcmVuZ2V0aS5taWdyYXRpb24udGhyZWF0LnJvYWQvaW5kZXguaHRtbD9ocHQ9U2JpbiI+U2Np ZW50aXN0czogU2VyZW5nZXRpIG9uIHJvYWQgdG8gcnVpbjwvYT48L2xpPiA8bGk+PGEgaHJlZj0i LzIwMTAvV09STEQvZXVyb3BlLzA5LzE5L3BhcmlzLmJhbGxvb24uYWlyLnF1YWxpdHkvaW5kZXgu aHRtbD9ocHQ9U2JpbiI+QmFsbG9vbiBoZWxwcyBQYXJpc2lhbnMgYnJlYXRoZSBlYXN5PC9hPjwv bGk+IDxsaT48YSBocmVmPSIvMjAxMC9XT1JMRC9hc2lhcGNmLzA5LzE3L2xhb3MuYXNpYW4udW5p Y29ybi5zYW9sYS9pbmRleC5odG1sP2hwdD1TYmluIj5FbmRhbmdlcmVkICd1bmljb3JuJyBjYXB0 dXJlZDwvYT48L2xpPjwvdWw+ICAgICAgICA8L2Rpdj48ZGl2IGNsYXNzPSJjbm5fbXRwbW9yZSI+ PGEgaHJlZj0iL1NQRUNJQUxTLzIwMDkvZW52aXJvbm1lbnQvP2hwdD1TYmluIiBjbGFzcz0iY25u X210cG1vcmVidG4iPjxpbWcgYWx0PSJNb3JlIiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29t L2Nubi8uZWxlbWVudC9pbWcvMy4wLzFweC5naWYiIGJvcmRlcj0iMCI+PC9hPjwvZGl2PjwvZGl2 PiAgIAoKPC9kaXY+PCEtLSAvY25uX3NlY3RiaW4xIC0tPgoKCjxkaXYgY2xhc3M9ImNubl9zZWN0 YmluMiI+Cgk8ZGl2IGNsYXNzPSJjbm5fc2VjdGJpbmNudG50Ij48ZGl2IGNsYXNzPSJjbm5fc2Vj dGJpbmNudG50MiI+IDxoND48YSBocmVmPSIvVEVDSC8/aHB0PVNiaW4iPlRlY2hub2xvZ3k8L2E+ PC9oND48ZGl2IGNsYXNzPSJjbm5fY2xlYXIiPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9kaXZsaW5l Ij48L2Rpdj4gPHVsIGNsYXNzPSJjbm5fYnVsbGV0YmluIj48bGk+PGEgaHJlZj0iLzIwMTAvVEVD SC9nYW1pbmcuZ2FkZ2V0cy8xMC8wMS9tZWRhbC5vZi5ob25vci50YWxpYmFuL2luZGV4Lmh0bWw/ aHB0PVNiaW4iPldhciBnYW1lIGF4ZXMgJ1RhbGliYW4nIG9wdGlvbjwvYT48L2xpPjxsaT48YSBo cmVmPSIvdmlkZW8vIy92aWRlby9zaG93Yml6LzIwMTAvMTAvMDEvYW0uc29jaWFsLm5ldHdvcmsu aW50ZXJ2aWV3LmNubj9ocHQ9U2JpbiI+J1NvY2lhbCBOZXR3b3JrJyBzdGFycyBkaXNjdXNzIGZp bG08L2E+PGEgaHJlZj0iL3ZpZGVvLyMvdmlkZW8vc2hvd2Jpei8yMDEwLzEwLzAxL2FtLnNvY2lh bC5uZXR3b3JrLmludGVydmlldy5jbm4/aHB0PVNiaW4iPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4u dHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC9nbG9iYWwvaWNvbnMvdmlkZW9faWNvbi5n aWYiIGFsdD0iVmlkZW8iIGJvcmRlcj0iMCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjEwIiBjbGFzcz0i Y25uX3ZpZGljb24iPjwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9URUNIL2lubm92YXRpb24v MTAvMDEvdmNoYXR0ZXIuZmFjZWJvb2svaW5kZXguaHRtbD9ocHQ9U2JpbiI+dkNoYXR0ZXI6IFRo ZSBsZXNzLW5ha2VkIENoYXRyb3VsZXR0ZTwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9URUNI L2dhbWluZy5nYWRnZXRzLzEwLzAxL2FwcGxlLnR2LnNlY3JldHMud2lyZWQvaW5kZXguaHRtbD9o cHQ9U2JpbiI+MyBzZW1pLXNlY3JldCBBcHBsZSBUViBmZWF0dXJlczwvYT48L2xpPjxsaT48YSBo cmVmPSIvMjAxMC9URUNIL3NvY2lhbC5tZWRpYS8xMC8wMS9mYWNlYm9vay5waG90b3MudXBncmFk ZWQubWFzaGFibGUvaW5kZXguaHRtbD9ocHQ9U2JpbiI+RmFjZWJvb2sgdXBncmFkZXMgaXRzIHBo b3RvIGZlYXR1cmU8L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvVEVDSC9zb2NpYWwubWVkaWEv MDkvMzAvdGVjaG5vbG9neS5tb3ZpZXMudHYuc2hvd3MvaW5kZXguaHRtbD9ocHQ9U2JpbiI+VGVj aCBrZWVwcyBtb3ZpZXMsIFRWIHJlbGV2YW50PC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii8yMDEwL1RF Q0gvd2ViLzA5LzMwL3dlYi5jaGVja2luLm9uZXRydWVmYW4vaW5kZXguaHRtbD9ocHQ9U2JpbiI+ QnJvd3NlIHRoZSBXZWIsIGVhcm4gcG9pbnRzPC9hPjwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNz PSJjbm5fbXRwbW9yZSI+PGEgaHJlZj0iL1RFQ0gvP2hwdD1TYmluIiBjbGFzcz0iY25uX210cG1v cmVidG4iPjxpbWcgYWx0PSJNb3JlIiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8u ZWxlbWVudC9pbWcvMy4wLzFweC5naWYiIGJvcmRlcj0iMCI+PC9hPjwvZGl2PjwvZGl2PiAgIAo8 L2Rpdj48IS0tIC9jbm5fc2VjdGJpbjIgLS0+CgoKPGRpdiBjbGFzcz0iY25uX3NlY3RiaW4zIj4K CTxkaXYgY2xhc3M9ImNubl9zZWN0YmluY250bnQiPjxkaXYgY2xhc3M9ImNubl9zZWN0YmluY250 bnQyIj4gPGg0PjxhIGhyZWY9Ii9TUEVDSUFMUy8yMDEwL2lsaXN0Lz9ocHQ9U2JpbiI+aS1MaXN0 IDogTmlnZXJpYTwvYT48L2g0PjxkaXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+PGRpdiBjbGFz cz0iY25uX2RpdmxpbmUiPjwvZGl2PiA8dWwgY2xhc3M9ImNubl9idWxsZXRiaW4iPjxsaT48YSBo cmVmPSIvMjAxMC9CVVNJTkVTUy8wOS8yOC9uaWdlcmlhLnJpY2guZGFuZ290ZS9pbmRleC5odG1s P2hwdD1TYmluIj5GaXJzdCBiaWxsaW9uYWlyZSBjZW1lbnRzIGhpcyBmb3J0dW5lPC9hPjwvbGk+ ICA8bGk+PGEgaHJlZj0iL3ZpZGVvLyMvdmlkZW8vd29ybGQvMjAxMC8wOS8yOC9pbnR2LnNlc2F5 LmJlbGxhLm5haWphLmNubj9ocHQ9U2JpbiI+TmlnZXJpYSdzIGNlbGVicml0eSBibG9nZ2VyPC9h PjxhIGhyZWY9Ii92aWRlby8jL3ZpZGVvL3dvcmxkLzIwMTAvMDkvMjgvaW50di5zZXNheS5iZWxs YS5uYWlqYS5jbm4/aHB0PVNiaW4iPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9j bm4vLmVsZW1lbnQvaW1nLzMuMC9nbG9iYWwvaWNvbnMvdmlkZW9faWNvbi5naWYiIGFsdD0iVmlk ZW8iIGJvcmRlcj0iMCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjEwIiBjbGFzcz0iY25uX3ZpZGljb24i PjwvYT48L2xpPiA8bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvYWZyaWNhLzA5LzE3L25pZ2VyaWEu Y291bnRyeS5wcm9maWxlL2luZGV4Lmh0bWw/aHB0PVNiaW4iPk5pZ2VyaWE6IEVjb25vbWljIHBv d2VyaG91c2U8L2E+PC9saT4gIDxsaT48YSBocmVmPSIvdmlkZW8vIy92aWRlby93b3JsZC8yMDEw LzA5LzI2L3B1cmVmb3kubmlnZXJpYS5tb2JpbGVzLmNubj9ocHQ9U2JpbiI+QnVzaW5lc3Mgb2Yg bW9iaWxlcyBpbiBOaWdlcmlhPC9hPjxhIGhyZWY9Ii92aWRlby8jL3ZpZGVvL3dvcmxkLzIwMTAv MDkvMjYvcHVyZWZveS5uaWdlcmlhLm1vYmlsZXMuY25uP2hwdD1TYmluIj48aW1nIHNyYz0iaHR0 cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvZ2xvYmFsL2ljb25zL3Zp ZGVvX2ljb24uZ2lmIiBhbHQ9IlZpZGVvIiBib3JkZXI9IjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIx MCIgY2xhc3M9ImNubl92aWRpY29uIj48L2E+PC9saT4gPGxpPjxhIGhyZWY9Ii8yMDEwL1dPUkxE L2FmcmljYS8wOS8xNy9uaWdlcmlhLmltYWdlcy9pbmRleC5odG1sP2hwdD1TYmluIj5HYWxsZXJ5 OiBOaWdlcmlhJ3MgcGVvcGxlIGFuZCBwbGFjZXM8L2E+PC9saT4gPGxpPjxhIGhyZWY9Ii8yMDEw L1dPUkxEL2FmcmljYS8wOS8xNy9uaWdlcmlhLnF1aXovaW5kZXguaHRtbD9ocHQ9U2JpbiI+UXVp ejogVGVzdCB5b3VyIGtub3dsZWRnZTwvYT48L2xpPiA8bGk+PGEgaHJlZj0iLzIwMTAvV09STEQv YWZyaWNhLzA5LzIxL25pZ2VyaWFuLmF1dGhvcnMvaW5kZXguaHRtbD9ocHQ9U2JpbiI+WW91bmcg d3JpdGVycyBzdGFydCBuZXcgY2hhcHRlcjwvYT48L2xpPjwvdWw+IDwvZGl2PjxkaXYgY2xhc3M9 ImNubl9tdHBtb3JlIj48YSBocmVmPSIvU1BFQ0lBTFMvMjAxMC9pbGlzdC8/aHB0PVNiaW4iIGNs YXNzPSJjbm5fbXRwbW9yZWJ0biI+PGltZyBhbHQ9Ik1vcmUiIHNyYz0iaHR0cDovL2kuY2RuLnR1 cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgYm9yZGVyPSIwIj48L2E+PC9k aXY+PC9kaXY+ICAgCgk8ZGl2IGNsYXNzPSJjbm5fYWRzcGMxNTV4MzEiPgoJCTwhLS0gQURTUEFD RTogaG9tZXBhZ2Uvc3Bvbi44OHgzMV9pbGlzdCAtLT4NCg0KDQoNCg0KPCEtLSBDQUxMT1VUfGh0 dHA6Ly9hZHMuY25uLmNvbS9odG1sLm5nL3NpdGU9Y25uX2ludGVybmF0aW9uYWwmY25uX2ludGxf cG9zaXRpb249ODh4MzFfc3Bvbl9pbGlzdCZjbm5faW50bF9yb2xsdXA9aG9tZXBhZ2UmcGFnZS5h bGxvd2NvbXBldGU9bm8mcGFyYW1zLnN0eWxlcz1mc3xDQUxMT1VUIC0tPg0KPGRpdiBpZD0iYWQt OTUwMDMyIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0icGFkZGluZzogMDsgbWFyZ2luOiAwOyBib3Jk ZXI6IDA7Ij48L2Rpdj4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmNubmFkX2Ny ZWF0ZUFkKCI5NTAwMzIiLCJodHRwOi8vYWRzLmNubi5jb20vaHRtbC5uZy9zaXRlPWNubl9pbnRl cm5hdGlvbmFsJmNubl9pbnRsX3Bvc2l0aW9uPTg4eDMxX3Nwb25faWxpc3QmY25uX2ludGxfcm9s bHVwPWhvbWVwYWdlJnBhZ2UuYWxsb3djb21wZXRlPW5vJnBhcmFtcy5zdHlsZXM9ZnMiLCIwIiwi MCIpOw0KY25uYWRfcmVnaXN0ZXJTcGFjZSg5NTAwMzIsMCwwKTsNCjwvc2NyaXB0Pg0KDQoNCg0K DQoKCTwvZGl2Pgo8L2Rpdj48IS0tIC9jbm5fc2VjdGJpbjMgLS0+CgoKPGRpdiBjbGFzcz0iY25u X3NlY3RiaW40IGNubl9xdWlja3ZvdGViaW4iPgoJPGg0PlF1aWNrdm90ZTwvaDQ+PGRpdiBjbGFz cz0iY25uX2NsZWFyIj48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fZGl2bGluZSI+PC9kaXY+PHNjcmlw dD4gdmFyIHF2cV9jb3VudCA9IDA7IDwvc2NyaXB0PgoKPGRpdiBpZD0iY25uUVZfQ29udGVudF81 MzI3MSI+Cjxmb3JtIGlkPSJxdl9wb2xsXzUzMjcxIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iaHR0 cDovL3BvbGxzLmNubi5jb20vcG9sbCIgdGFyZ2V0PSJxdl9pZnJhbWVfNTMyNzEiPgo8SU5QVVQg VFlQRT1ISURERU4gTkFNRT0icG9sbF9pZCIgVkFMVUU9IjUzMjcxIj4KPGRpdiBjbGFzcz0iY25u X3F2YnYzIj4KPGg1IGlkPSJjbm5RVl9xdWVzVHhUIj5Eb2VzIHlvdXIgam9iIG1ha2UgeW91IGZl ZWwgZGVwcmVzc2VkPzwvaDU+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJjbm5fcXZidjQiPgo8dWw+Cjxs aT48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InF1ZXN0aW9uXzEiIHZhbHVlPSIxIiBpZD0iY25u UG9sbEExIj4gPGxhYmVsIGZvcj0iY25uUG9sbEExIiAgaWQ9ImNublBvbGxfUTFMMSI+WWVzPC9s YWJlbD48L2xpPgo8c2NyaXB0PiBxdnFfY291bnQrKzsgPC9zY3JpcHQ+CjxsaT48aW5wdXQgdHlw ZT0icmFkaW8iIG5hbWU9InF1ZXN0aW9uXzEiIHZhbHVlPSIyIiBpZD0iY25uUG9sbEEyIj4gPGxh YmVsIGZvcj0iY25uUG9sbEEyIiAgaWQ9ImNublBvbGxfUTFMMiI+Tm88L2xhYmVsPjwvbGk+Cjxz Y3JpcHQ+IHF2cV9jb3VudCsrOyA8L3NjcmlwdD4KPGxpPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFt ZT0icXVlc3Rpb25fMSIgdmFsdWU9IjMiIGlkPSJjbm5Qb2xsQTMiPiA8bGFiZWwgZm9yPSJjbm5Q b2xsQTMiICBpZD0iY25uUG9sbF9RMUwzIj5XaGF0IGpvYj88L2xhYmVsPjwvbGk+CjxzY3JpcHQ+ IHF2cV9jb3VudCsrOyA8L3NjcmlwdD4KPC91bD4KPGRpdiBjbGFzcz0iY25uX2NsZWFyIj48L2Rp dj4KPC9kaXY+CjwhLS0gL2VuZCBRdWVzdGlvbiAxIC0tPgo8ZGl2IGNsYXNzPSJjbm5fcXZidm90 ZSI+CjxkaXYgY2xhc3M9ImNubl9xdmJ2MSI+PGEgaHJlZj0iamF2YXNjcmlwdDpxdlN1Ym1pdFZv dGVfNTMyNzEoKTsiIGNsYXNzPSJjbm5fZnJtcXZ0YnRuIj48aW1nIHNyYz0iaHR0cDovL2kuY2Ru LnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgYm9yZGVyPSIwIj48L2E+ PC9kaXY+CjxkaXYgY2xhc3M9ImNubl9xdmJ2MiI+PHNwYW4+b3IgPC9zcGFuPjxhIGhyZWY9Imph dmFzY3JpcHQ6cXZHZXRSZXN1bHRzXzUzMjcxKCk7Ij52aWV3IHJlc3VsdHM8L2E+PC9kaXY+Cjxk aXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+CjwvZGl2Pgo8L2Zvcm0+CjwvZGl2Pgo8aWZyYW1l IHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZyYW1lYm9yZGVyPSIwIiBzdHlsZT0idmlzaWJpbGl0eTpo aWRkZW47aGVpZ2h0OjFweDtib3JkZXI6MHB4IiBpZD0icXZfaWZyYW1lXzUzMjcxIiBuYW1lPSJx dl9pZnJhbWVfNTMyNzEiPjwvaWZyYW1lPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ CgoJdmFyIHF2X3N1Ym1pdHRlZF81MzI3MTsKCWZ1bmN0aW9uIHF2U3VibWl0Vm90ZV81MzI3MSgp IHsgcXZfc3VibWl0dGVkXzUzMjcxID0gMTskKCdxdl9wb2xsXzUzMjcxJykuc3VibWl0KCk7cXZH ZXRSZXN1bHRzXzUzMjcxKCk7IH0KCWZ1bmN0aW9uIHF2R2V0UmVzdWx0c181MzI3MSgpIHsgCgkK CQkJQ1NJTWFuYWdlci5nZXRJbnN0YW5jZSgpLmNhbGwoJ2h0dHA6L1wvd3d3LmNubi5jb20vUE9M TFNFUlZFUi9yZXN1bHRzLzUzMjcxLmNvbnRlbnQuaHRtbCcsICcnLCAnY25uUVZfQ29udGVudF81 MzI3MScsIGNubl9xdkJQSFRNTF81MzI3MSwgdHJ1ZSk7CgkKCX0KCQoJZnVuY3Rpb24gY25uX3F2 QlBIVE1MXzUzMjcxKG9iaiwgaWQsIGNvbmZpZ09iaikgewoJCgkJdmFyIHF2dGVtcF9hcnIgPSBu ZXcgQXJyYXkoKTsKCQlmb3IoaT0xO2kgPD0gcXZxX2NvdW50O2krKykgeyBxdnRlbXBfYXJyWyhp IC0gMSldID0geyAnYV90eHQnIDogJCgnY25uUG9sbF9RMUwnICsgaSkuaW5uZXJIVE1MLCAndm90 ZV9jJyA6IHBhcnNlSW50KG9iai5wb2xsX3ZhbHVlc1tpXS52b3RlX2NvdW50KSwgJ3ZvdGVfcCcg OiBwYXJzZUludChvYmoucG9sbF92YWx1ZXNbaV0udm90ZV9wZXJjZW50KSB9OyB9CgkJcXZ0ZW1w X2Fyci5zb3J0KGNubl9xdkNvbXBSZXMpOwoJCXJldHVybiBjbm5fcXZCUmVzSFRNTChvYmosIHF2 dGVtcF9hcnIsICc1MzI3MScpOwoJCQoJfQoJCgkKCWZ1bmN0aW9uIGNubl9xdkJSZXNIVE1MKG9i aiwgcXZfYXJyLCBwb2xsX2lkKSB7CgkKCQl2YXIgcXZ0ZW1wX2h0bWwgPSAnPGRpdiBjbGFzcz0i Y25uX3F2YnYxNCI+JzsKCQlxdnRlbXBfaHRtbCArPSAnPGRpdiBjbGFzcz0iY25uX3F2YnYxNiI+ JzsKCQlxdnRlbXBfaHRtbCArPSAnPGg1PicgKyAkKCdjbm5RVl9xdWVzVHhUJykuaW5uZXJIVE1M ICsgJzwvaDU+JzsKCQlpZihvYmoucmVsYXRlZF9zdG9yeSkgeyBxdnRlbXBfaHRtbCArPSAnPGRp diBjbGFzcz0iY25uX3F2YnY1Ij48YSBocmVmPSInICsgb2JqLnJlbGF0ZWRfc3RvcnkgKyAnIj5S ZWFkIFJlbGF0ZWQgQXJ0aWNsZXM8L2E+PC9kaXY+JzsgfQoJCXF2dGVtcF9odG1sICs9ICc8L2Rp dj4nOwoJCXF2dGVtcF9odG1sICs9ICc8ZGl2IGNsYXNzPSJjbm5fcXZidjE1Ij5UaGlzIGlzIG5v dCBhIHNjaWVudGlmaWMgcG9sbDwvZGl2Pic7CgkJcXZ0ZW1wX2h0bWwgKz0gJzwvZGl2Pic7CgkJ CgkJcXZ0ZW1wX2h0bWwgKz0gJzxkaXYgY2xhc3M9ImNubl9xdmJ2NiI+JzsKCgoJCWZvcihpPTA7 aSA8IHF2X2Fyci5sZW5ndGg7aSsrKSB7CgkJCgkJCXF2dGVtcF9odG1sICs9ICc8ZGl2IGNsYXNz PSJjbm5fcXZidjcnOwoJCQlpZihpID09IDApIHsgcXZ0ZW1wX2h0bWwgKz0gJyBjbm5fcXZidmFj dHYnOyB9CgkJCXF2dGVtcF9odG1sICs9ICciPic7CgkJCXF2dGVtcF9odG1sICs9ICc8ZGl2IGNs YXNzPSJjbm5fcXZidjgiPicgKyBxdl9hcnJbaV0uYV90eHQgKyAnPC9kaXY+JzsKCQkJcXZ0ZW1w X2h0bWwgKz0gJzxkaXYgY2xhc3M9ImNubl9xdmJ2OSI+PGRpdiBzdHlsZT0iJzsKCQkJaWYocXZf YXJyW2ldLnZvdGVfcCA+IDApIHsgcXZ0ZW1wX2h0bWwgKz0gJ3dpZHRoOicgKyBxdl9hcnJbaV0u dm90ZV9wICsgJ3B4Oyc7IH0KCQkJcXZ0ZW1wX2h0bWwgKz0gJyI+PC9kaXY+PC9kaXY+JzsKCQkJ cXZ0ZW1wX2h0bWwgKz0gJzxkaXYgY2xhc3M9ImNubl9xdmJ2MTAiPicgKyBxdl9hcnJbaV0udm90 ZV9wICsgJyU8L2Rpdj4nOwoJCQlxdnRlbXBfaHRtbCArPSAnPGRpdiBjbGFzcz0iY25uX3F2YnYx MSI+JyArIHF2X2FycltpXS52b3RlX2MgKyAnPC9kaXY+JzsKCQkJcXZ0ZW1wX2h0bWwgKz0gJzxk aXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+JzsKCQkJcXZ0ZW1wX2h0bWwgKz0gJzwvZGl2Pic7 CgoJCX0KCQkKCQlxdnRlbXBfaHRtbCArPSAnPGRpdiBjbGFzcz0iY25uX3F2YnYxMiI+VG90YWwg dm90ZXM6ICcgKyBvYmoudG90YWxfdm90ZV9jb3VudCArICc8L2Rpdj4nOwoJCXF2dGVtcF9odG1s ICs9ICc8ZGl2IGNsYXNzPSJjbm5fcXZidjEzIj5UaGlzIGlzIG5vdCBhIHNjaWVudGlmaWMgcG9s bDwvZGl2Pic7CgkJCgkJcXZ0ZW1wX2h0bWwgKz0gJzwvZGl2Pic7CgoJCXJldHVybiBxdnRlbXBf aHRtbDsKCQkKCX0KCQoJZnVuY3Rpb24gY25uX3F2Q29tcFJlcyhhLCBiKSB7IHJldHVybiBiLnZv dGVfYyAtIGEudm90ZV9jOyB9CgkKPC9zY3JpcHQ+Cgo8L2Rpdj48IS0tIC9jbm5fcXVpY2t2b3Rl YmluIC0tPgoKCjxkaXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+Cgo8ZGl2IGNsYXNzPSJjbm5f c2hkY2Fmb290ZXIiPjwvZGl2PgoKPGRpdiBjbGFzcz0iY25uX3BhZDJ0b3AgY25uX3NoZHNwYyI+ PC9kaXY+Cgo8ZGl2IGNsYXNzPSJjbm5fc2hkY2FoZWFkZXIiPjwvZGl2PgoKPGRpdiBjbGFzcz0i Y25uX3NiYWx0ZXJuYXRlIj4KCjxkaXYgY2xhc3M9ImNubl9zZWN0YmluMSI+Cgk8ZGl2IGNsYXNz PSJjbm5fc2VjdGJpbmNudG50Ij48ZGl2IGNsYXNzPSJjbm5fc2VjdGJpbmNudG50MiI+IDxoND48 YSBocmVmPSIvU0hPV0JJWi8/aHB0PVNiaW4iPkVudGVydGFpbm1lbnQ8L2E+PC9oND48ZGl2IGNs YXNzPSJjbm5fY2xlYXIiPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9kaXZsaW5lIj48L2Rpdj4gPHVs IGNsYXNzPSJjbm5fYnVsbGV0YmluIj48bGk+PGEgaHJlZj0iLzIwMTAvU0hPV0JJWi9jZWxlYnJp dHkubmV3cy5nb3NzaXAvMTAvMDEvc3RlcGhlbi5jYW5uZWxsLm9iaXQvaW5kZXguaHRtbD9ocHQ9 U2JpbiI+VFYgcHJvZHVjZXIgU3RlcGhlbiBKLiBDYW5uZWxsIGRpZXM8L2E+PC9saT48bGk+PGEg aHJlZj0iLzIwMTAvU0hPV0JJWi9Nb3ZpZXMvMTAvMDEvaG9ycm9yLm1vdmllLmNoaWxkcmVuL2lu ZGV4Lmh0bWw/aHB0PVNiaW4iPkdhbGxlcnk6IENyZWVwaWVzdCBraWRzIGluIGhvcnJvciBtb3Zp ZXM8L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvU0hPV0JJWi9Nb3ZpZXMvMDkvMjkvbW92aWVz LndlLndpc2guZXhpc3RlZC9pbmRleC5odG1sP2hwdD1TYmluIj5XaGVyZSBpbiB0aGUgd29ybGQg aXMgUm9uIEJ1cmd1bmR5PzwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9TSE9XQklaL1RWLzEw LzAxL3Npc3Rlci53aXZlcy5wcGwvaW5kZXguaHRtbD9ocHQ9U2JpbiI+J1Npc3RlciBXaXZlcyc6 IFdlJ3JlIG5vcm1hbCA8L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvU0hPV0JJWi9Nb3ZpZXMv MDkvMzAvc29jaWFsLm5ldHdvcmsucmV2aWV3LnJvbGwvaW5kZXguaHRtbD9ocHQ9U2JpbiI+J1Ro ZSBTb2NpYWwgTmV0d29yaycgZGVzZXJ2ZXMgdG8gZ28gdmlyYWw8L2E+PC9saT48bGk+PGEgaHJl Zj0iL3ZpZGVvLyMvdmlkZW8vc2hvd2Jpei8yMDEwLzEwLzAxL2FtLnNlbGxlcnMub3ByYWgud2lu ZnJleS5jbm4/aHB0PVNiaW4iPk9wcmFoIGZlYXJlZCBtYWtpbmcganVtcDwvYT48YSBocmVmPSIv dmlkZW8vIy92aWRlby9zaG93Yml6LzIwMTAvMTAvMDEvYW0uc2VsbGVycy5vcHJhaC53aW5mcmV5 LmNubj9ocHQ9U2JpbiI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxl bWVudC9pbWcvMy4wL2dsb2JhbC9pY29ucy92aWRlb19pY29uLmdpZiIgYWx0PSJWaWRlbyIgYm9y ZGVyPSIwIiB3aWR0aD0iMTYiIGhlaWdodD0iMTAiIGNsYXNzPSJjbm5fdmlkaWNvbiI+PC9hPjwv bGk+PGxpPjxhIGhyZWY9Ii8yMDEwL1NIT1dCSVovY2VsZWJyaXR5Lm5ld3MuZ29zc2lwLzEwLzAx L2pvbi5zdGV3YXJ0LnJhbGx5LnJvbGwvaW5kZXguaHRtbD9ocHQ9U2JpbiI+Sm9uIFN0ZXdhcnQ6 IEl0J3Mgbm90IGFib3V0IEdsZW5uIEJlY2s8L2E+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9 ImNubl9tdHBtb3JlIj48YSBocmVmPSIvU0hPV0JJWi8/aHB0PVNiaW4iIGNsYXNzPSJjbm5fbXRw bW9yZWJ0biI+PGltZyBhbHQ9Ik1vcmUiIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25u Ly5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgYm9yZGVyPSIwIj48L2E+PC9kaXY+PC9kaXY+ICAg CjwvZGl2PjwhLS0gL2Nubl9zZWN0YmluMSAtLT4KCgo8ZGl2IGNsYXNzPSJjbm5fc2VjdGJpbjIi PgoJPGRpdiBjbGFzcz0iY25uX3NlY3RiaW5jbnRudCI+PGRpdiBjbGFzcz0iY25uX3NlY3RiaW5j bnRudDIiPiA8aDQ+PGEgaHJlZj0iL1RSQVZFTC8/aHB0PVNiaW4iPlRyYXZlbDwvYT48L2g0Pjxk aXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2RpdmxpbmUiPjwvZGl2 PiA8dWwgY2xhc3M9ImNubl9idWxsZXRiaW4iPjxsaT48YSBocmVmPSIvMjAxMC9VUy8xMC8wMi9l dXJvcGUuYWR2aXNvcnkuZGlzY3Vzc2lvbnMvaW5kZXguaHRtbD9ocHQ9U2JpbiI+VS5TLiBtYXkg aXNzdWUgdHJhdmVsIGFsZXJ0IGZvciBFdXJvcGU8L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAv VFJBVkVMLzA5LzMwL2Jlcmxpbi5jdWx0dXJlLmd1aWRlL2luZGV4Lmh0bWw/aHB0PVNiaW4iPkNp dHkgZ3VpZGU6IEN1bHR1cmFsLCBoaXAgQmVybGluPC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii8yMDEw L1RSQVZFTC8wOS8zMC9mYWxsLmJlZXIuZmVzdHMvaW5kZXguaHRtbD9ocHQ9U2JpbiI+UmFpc2Ug eW91ciBnbGFzc2VzISBGaXZlIGZhbGwgYmVlciBmZXN0czwvYT48L2xpPjxsaT48YSBocmVmPSJo dHRwOi8vd3d3LmNubmdvLmNvbS9ob25nLWtvbmcvcGxheS9ob25nLWtvbmctbmVvbi1zaWducy0x NzIzNzY/cGFnZT0wLDMiIHRhcmdldD0ibmV3Ij5Ib25nIEtvbmcncyBnYXJpc2ggbmVvbiBzaWdu czwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9XT1JMRC9hbWVyaWNhcy8xMC8wMi9wZXJ1LnBs YW5lLmNyYXNoL2luZGV4Lmh0bWw/aHB0PVNiaW4iPjYgZGllIGluIGNyYXNoIG5lYXIgUGVydSdz IE5hemNhIExpbmVzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9uZXdzLmJsb2dzLmNubi5j b20vMjAxMC8xMC8wMi9hcm1lZC1nYW5nLWFiZHVjdHMtYnVzbG9hZC1vZi10b3VyaXN0cy1pbi1t ZXhpY28vP2hwdD1TYmluIj5HdW5tZW4gYWJkdWN0IDIyIHRvdXJpc3RzIGluIE1leGljbzwvYT48 L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmNubmdvLmNvbS9iYW5na29rL3Zpc2l0L2x1eHVy eS1ob3RlbHMtYmFuZ2tvay0xNTE0MzIiIHRhcmdldD0ibmV3Ij5Nb3JlIGx1eHVyeSBob3RlbHMg b3BlbiBpbiBCYW5na29rPC9hPjwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fbXRwbW9y ZSI+PGEgaHJlZj0iL1RSQVZFTC8/aHB0PVNiaW4iIGNsYXNzPSJjbm5fbXRwbW9yZWJ0biI+PGlt ZyBhbHQ9Ik1vcmUiIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2lt Zy8zLjAvMXB4LmdpZiIgYm9yZGVyPSIwIj48L2E+PC9kaXY+PC9kaXY+ICAgCjwvZGl2PjwhLS0g L2Nubl9zZWN0YmluMiAtLT4KCgo8ZGl2IGNsYXNzPSJjbm5fc2VjdGJpbjMiPgoJPGRpdiBjbGFz cz0iY25uX3NlY3RiaW5jbnRudCI+PGRpdiBjbGFzcz0iY25uX3NlY3RiaW5jbnRudDIiPiA8aDQ+ PGEgaHJlZj0iL09QSU5JT04vP2hwdD1TYmluIj5PcGluaW9uPC9hPjwvaDQ+PGRpdiBjbGFzcz0i Y25uX2NsZWFyIj48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fZGl2bGluZSI+PC9kaXY+IDx1bCBjbGFz cz0iY25uX2J1bGxldGJpbiI+PGxpPjxhIGhyZWY9Ii8yMDEwL09QSU5JT04vMTAvMDMvam9obnNv bi5iaXJ0aC5vZi5pZGVhcy9pbmRleC5odG1sP2hwdD1TYmluIj5UaGUgYW1hemluZyBwb3dlciBv ZiBuZXR3b3JrczwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9PUElOSU9OLzEwLzAzL2dyZWVu ZS5qdXN0aWNlLnN5c3RlbS9pbmRleC5odG1sP2hwdD1TYmluIj5Ib21lIGludmFzaW9uIHZpY3Rp bSdzIG9yZGVhbCBnb2VzIG9uPC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii8yMDEwL09QSU5JT04vMDkv MzAvc3BhdWxkaW5nLnJ1dGdlcnMuc3VpY2lkZS9pbmRleC5odG1sP2hwdD1TYmluIj5XaHkgZGlk IFR5bGVyIENsZW1lbnRpIGRpZT88L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvT1BJTklPTi8x MC8wMS96YWthcmlhLmNoaW5hLnRyYWRlL2luZGV4Lmh0bWw/aHB0PVNiaW4iPlUuUy4tQ2hpbmEg c3BsaXQgd291bGQgYmUgYSBjYXRhc3Ryb3BoZTwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9P UElOSU9OLzEwLzAxL29waW5pb24ubmlnZXJpYS5wZW9wbGUvaW5kZXguaHRtbD9ocHQ9U2JpbiI+ TmlnZXJpYSBuZWVkcyBtb3JlIHRoYW4gbmV3IGxlYWRlcnM8L2E+PC9saT48bGk+PGEgaHJlZj0i LzIwMTAvT1BJTklPTi8xMC8wMS9ncmFuZGVyc29uLmJpc2hvcC5sb25nL2luZGV4Lmh0bWw/aHB0 PVNiaW4iPldoeSBubyBwcmF5ZXJzIGZvciBMb25nJ3MgYWNjdXNlcnM/PC9hPjwvbGk+PGxpPjxh IGhyZWY9Ii8yMDEwL09QSU5JT04vMDkvMzAvc3RlZWxlLm9iamVjdGl2ZS5qb3VybmFsaXNtL2lu ZGV4Lmh0bWw/aHB0PVNiaW4iPkRhbmdlcnMgaW4gYWN0aXZpc3Qgam91cm5hbGlzbTwvYT48L2xp PjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0iY25uX210cG1vcmUiPjxhIGhyZWY9Ii9PUElOSU9OLz9o cHQ9U2JpbiIgY2xhc3M9ImNubl9tdHBtb3JlYnRuIj48aW1nIGFsdD0iTW9yZSIgc3JjPSJodHRw Oi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lmIiBib3JkZXI9 IjAiPjwvYT48L2Rpdj48L2Rpdj4gICAKPC9kaXY+PCEtLSAvY25uX3NlY3RiaW4zIC0tPgoKCjxk aXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+CgoKPGRpdiBjbGFzcz0iY25uX3NoZDc1NXB4Zm9v dGVyIj48L2Rpdj4KCjxkaXYgY2xhc3M9ImNubl9zaGQ3NTVweDJoZWFkZXIiPjwvZGl2PgoKPGRp diBjbGFzcz0iY25uXzcyOGFkYmluIj4KCTxkaXYgY2xhc3M9ImNubl9hZGNudHI3Mjh4OTAiPgoJ CTxkaXYgY2xhc3M9ImNubl9hZHNwYzcyOHg5MCI+CgkJCTxkaXY+PCEtLSBBRFNQQUNFOiBob21l cGFnZS9tYWluL2JvdC43Mjh4OTAgLS0+DQoNCg0KDQoNCg0KPCEtLSBDQUxMT1VUfGh0dHA6Ly9h ZHMuY25uLmNvbS9odG1sLm5nL3NpdGU9Y25uX2ludGVybmF0aW9uYWwmY25uX2ludGxfcGFnZXR5 cGU9bWFpbiZjbm5faW50bF9wb3NpdGlvbj03Mjh4OTBfYm90JmNubl9pbnRsX3JvbGx1cD1ob21l cGFnZSZwYWdlLmFsbG93Y29tcGV0ZT15ZXMmcGFyYW1zLnN0eWxlcz1mc3xDQUxMT1VUIC0tPg0K PGRpdiBpZD0iYWQtMjIzNDA5IiBhbGlnbj0iY2VudGVyIiBzdHlsZT0icGFkZGluZzogMDsgbWFy Z2luOiAwOyBib3JkZXI6IDA7Ij48L2Rpdj4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0 Ij4NCmNubmFkX2NyZWF0ZUFkKCIyMjM0MDkiLCJodHRwOi8vYWRzLmNubi5jb20vaHRtbC5uZy9z aXRlPWNubl9pbnRlcm5hdGlvbmFsJmNubl9pbnRsX3BhZ2V0eXBlPW1haW4mY25uX2ludGxfcG9z aXRpb249NzI4eDkwX2JvdCZjbm5faW50bF9yb2xsdXA9aG9tZXBhZ2UmcGFnZS5hbGxvd2NvbXBl dGU9eWVzJnBhcmFtcy5zdHlsZXM9ZnMiLCI5MCIsIjcyOCIpOw0KY25uYWRfcmVnaXN0ZXJTcGFj ZSgyMjM0MDksNzI4LDkwKTsNCjwvc2NyaXB0Pg0KDQoNCg0KDQoNCg0KDQoNCg0KPC9kaXY+CgkJ CTxkaXYgY2xhc3M9ImNubl9hZHNwY3RpbWciPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVy LmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC9nbG9iYWwvbWlzYy9hZHZlcnRpc2VtZW50LmdpZiIg d2lkdGg9IjU4IiBoZWlnaHQ9IjUiIGFsdD0iIiBib3JkZXI9IjAiPjwvZGl2PgoJCTwvZGl2PgoJ PC9kaXY+CjwvZGl2PjwhLS0gL2Nubl90dnNlY3Rpb25iaW4gLS0+CgoKPC9kaXY+PCEtLSAvY25u X3NiYWx0ZXJuYXRlIC0tPgoKPGRpdiBjbGFzcz0iY25uX3NlY3RiaW40IGNubl9zYmhvdHRvcGlj cyI+CjwhLS0gaG90IHRvcGljIGluY2x1ZGUgLS0+CjxoND48YSBocmVmPSIvdG9waWNzLyI+SG90 IHRvcGljczwvYT48L2g0Pgo8ZGl2IGNsYXNzPSJjbm5fY2xlYXIiPjwvZGl2Pgo8ZGl2IGNsYXNz PSJjbm5fZGl2bGluZSI+PC9kaXY+CgoKPGRpdiBjbGFzcz0iY25uX3NiaHR0b3BpY2NudHIiPgoK CTxhIGhyZWY9Imh0dHA6Ly90b3BpY3MuZWRpdGlvbi5jbm4uY29tL3RvcGljcy9taW5pbmdfYWNj aWRlbnRzX2FuZF9kaXNhc3RlcnM/aHB0PWh0b3BpYyIgY2xhc3M9ImNubl9zYmh0dG9waWNsIGNu bl9zYmh0dGwxIj48c3Bhbj5NaW5pbmcgYWNjaWRlbnRzIGFuZCBkaXNhc3RlcnM8L3NwYW4+PC9h PjxkaXYgY2xhc3M9ImNubl9kaXZsaW5lIj48L2Rpdj4gPGEgaHJlZj0iL1NQRUNJQUxTL25vcnRo a29yZWEvP2hwdD1odG9waWMiIGNsYXNzPSJjbm5fc2JodHRvcGljbCBjbm5fc2JodHRsMiI+PHNw YW4+Tm9ydGggS29yZWE8L3NwYW4+PC9hPjxkaXYgY2xhc3M9ImNubl9kaXZsaW5lIj48L2Rpdj4g PGEgaHJlZj0iaHR0cDovL3RvcGljcy5lZGl0aW9uLmNubi5jb20vdG9waWNzL2lyYW4/aHB0PWh0 b3BpYyIgY2xhc3M9ImNubl9zYmh0dG9waWNsIGNubl9zYmh0dGwzIj48c3Bhbj5JcmFuPC9zcGFu PjwvYT48ZGl2IGNsYXNzPSJjbm5fZGl2bGluZSI+PC9kaXY+IDxhIGhyZWY9Imh0dHA6Ly90b3Bp Y3MuZWRpdGlvbi5jbm4uY29tL3RvcGljcy9sYWR5X2dhZ2E/aHB0PWh0b3BpYyIgY2xhc3M9ImNu bl9zYmh0dG9waWNsIGNubl9zYmh0dGw0Ij48c3Bhbj5MYWR5IEdhZ2E8L3NwYW4+PC9hPjxkaXYg Y2xhc3M9ImNubl9kaXZsaW5lIj48L2Rpdj4gPGEgaHJlZj0iL1NQT1JUL2Zvb3RiYWxsLz9ocHQ9 aHRvcGljIiBjbGFzcz0iY25uX3NiaHR0b3BpY2wgY25uX3NiaHR0bDUiPjxzcGFuPkZvb3RiYWxs PC9zcGFuPjwvYT48ZGl2IGNsYXNzPSJjbm5fZGl2bGluZSI+PC9kaXY+IDxhIGhyZWY9Imh0dHA6 Ly90b3BpY3MuZWRpdGlvbi5jbm4uY29tL3RvcGljcy9wYWtpc3Rhbj9ocHQ9aHRvcGljIiBjbGFz cz0iY25uX3NiaHR0b3BpY2wgY25uX3NiaHR0bDYiPjxzcGFuPlBha2lzdGFuPC9zcGFuPjwvYT48 ZGl2IGNsYXNzPSJjbm5fZGl2bGluZSI+PC9kaXY+IDxhIGhyZWY9Ii9TUEVDSUFMUy8yMDA5L2Vu dmlyb25tZW50L2luZGV4Lmh0bWw/aHB0PWh0b3BpYyIgY2xhc3M9ImNubl9zYmh0dG9waWNsIGNu bl9zYmh0dGw3Ij48c3Bhbj5FbnZpcm9ubWVudDwvc3Bhbj48L2E+PGRpdiBjbGFzcz0iY25uX2Rp dmxpbmUiPjwvZGl2PiA8YSBocmVmPSJodHRwOi8vYWZnaGFuaXN0YW4uYmxvZ3MuY25uLmNvbS8/ aHB0PWh0b3BpYyZhbXA7aHB0PWh0b3BpYyIgY2xhc3M9ImNubl9zYmh0dG9waWNsIGNubl9zYmh0 dGw4Ij48c3Bhbj5BZmdoYW5pc3Rhbjwvc3Bhbj48L2E+PGRpdiBjbGFzcz0iY25uX2RpdmxpbmUi PjwvZGl2PiA8YSBocmVmPSJodHRwOi8vdG9waWNzLmVkaXRpb24uY25uLmNvbS90b3BpY3MvYXBw bGVfaW5jP2hwdD1odG9waWMiIGNsYXNzPSJjbm5fc2JodHRvcGljbCBjbm5fc2JodHRsOSI+PHNw YW4+QXBwbGU8L3NwYW4+PC9hPjxkaXYgY2xhc3M9ImNubl9kaXZsaW5lIj48L2Rpdj4gPGEgaHJl Zj0iL1NQRUNJQUxTL2NoaW5hLz9ocHQ9aHRvcGljIiBjbGFzcz0iY25uX3NiaHR0b3BpY2wgY25u X3NiaHR0bDEwIj48c3Bhbj5DaGluYTwvc3Bhbj48L2E+PGRpdiBjbGFzcz0iY25uX2RpdmxpbmUi PjwvZGl2PiAKCjwvZGl2PjwhLS0gL2Nubl9zYmh0dG9waWNjbnRyIC0tPgoKPGRpdiBjbGFzcz0i Y25uX3BhZDExdG9wIj48L2Rpdj4KPGRpdiBjbGFzcz0iY25uX3BhZDl0b3AiPjwvZGl2PgoKPGRp dj48YSBocmVmPSIvdG9waWNzLyIgY2xhc3M9ImNubl9tdHB2YXRidG4iPjxpbWcgc3JjPSJodHRw Oi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lmIiBib3JkZXI9 IjAiPjwvYT48L2Rpdj4KCjxkaXYgY2xhc3M9ImNubl9wYWQ3dG9wIj48L2Rpdj4KCjwhLS0gL2hv dCB0b3BpYyBpbmNsdWRlIC0tPgoKPC9kaXY+PCEtLSAvY25uX3NiaG90dG9waWNzIC0tPgoKCjxk aXYgY2xhc3M9ImNubl9zaGRtbmZvb3RlciI+PC9kaXY+CgoKCjwvZGl2PjwhLS0gL2Nubl9zaGRz ZWN0YmluIC0tPgoKPGRpdiBjbGFzcz0iY25uX3BhZDJ0b3AgY25uX3NoZHNwYyI+PC9kaXY+Cgo8 IS0tIC9jbm5fY29udGVudGFyZWEgLS0+CiAgICANCg0KPGRpdiBpZD0iY25uX2Z0cmNudG50Ij4K PGRpdiBpZD0iY25uX2Z0cmNudG50aW5uZXIiIGNsYXNzPSJjbGVhcmZpeCI+CjxkaXYgY2xhc3M9 ImNubl9mdHJkaXZsMSI+PC9kaXY+CjxkaXYgaWQ9ImNubkxXUFdlYXRoZXIiIHN0eWxlPSJ2aXNp YmlsaXR5OiBoaWRkZW4iPgoJPHA+PGI+TG9hZGluZyB3ZWF0aGVyIGRhdGEgLi4uPC9iPjwvcD4K PC9kaXY+Cgo8ZGl2IGlkPSJmdHItc2VhcmNoIj4KCTxmb3JtIG1ldGhvZD0iZ2V0IiBhY3Rpb249 Ii9zZWFyY2gvIiBvbnN1Ym1pdD0icmV0dXJuIGNubkZvb3RTZWFyY2godGhpcyk7Ij4KCgoJPGRp diBjbGFzcz0iZnRyLXNlYXJjaC1kYXRhY250ciI+CjxkaXYgY2xhc3M9ImZ0ci1zZWFyY2gtdGZp ZWxkIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icXVlcnkiIHNpemU9IjEyIiBtYXhsZW5ndGg9 IjQwIiB2YWx1ZT0iIiBpZD0iZnRyLXNlYXJjaC1ib3giPjwvZGl2Pgo8ZGl2IGNsYXNzPSJmdHIt c2VhcmNoLXNpY29uIj48aW5wdXQgdHlwZT0iaW1hZ2UiIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5l ci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvc2VhcmNoL3NlYXJjaF9idG5fZm9vdGVyLmdpZiIg d2lkdGg9IjU1IiBoZWlnaHQ9IjIxIiBhbHQ9IiI+PC9kaXY+CjwvZGl2PgoKCgkJPGlucHV0IHR5 cGU9ImhpZGRlbiIgbmFtZT0iY25uRnRyU3JjaFR5cGUiIGlkPSJjbm5GdHJTcmNoVHlwZSIgdmFs dWU9Im1peGVkIj4KCjxkaXYgY2xhc3M9ImNubl9mdHJnZ2xlIj48aW1nIHNyYz0iaHR0cDovL2ku Y2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvZ2xvYmFsL2Zvb3Rlci9wbmdzL2Zv b3Rlcl9nb29nbGUucG5nIiB3aWR0aD0iODgiIGhlaWdodD0iMTMiIGFsdD0iIiBib3JkZXI9IjAi IGNsYXNzPSJjbm5faWU2cG5nIj48L2Rpdj4KCgk8L2Zvcm0+CjwvZGl2PgoKPGRpdiBjbGFzcz0i Y25uX2NsZWFyIj48L2Rpdj4KCjxkaXYgY2xhc3M9ImNubl9kaXZsaW5lIiBzdHlsZT0iYmFja2dy b3VuZC1jb2xvcjojRUJFQkVCOyBtYXJnaW4tdG9wOjNweCI+PC9kaXY+Cgo8ZGl2IGNsYXNzPSJj bm5fZnRybnZsbmtzIj4KCjxkaXY+PGEgaHJlZj0iLyI+SG9tZTwvYT4gfCA8YSBocmVmPSIvdmlk ZW8vIj5WaWRlbzwvYT4gfCA8YSBocmVmPSIvV09STEQvIj5Xb3JsZDwvYT4gfCA8YSBocmVmPSIv VVMvIj5VLlMuPC9hPiB8IDxhIGhyZWY9Ii9BRlJJQ0EvIj5BZnJpY2E8L2E+IHwgPGEgaHJlZj0i L0FTSUEvIj5Bc2lhPC9hPiB8IDxhIGhyZWY9Ii9FVVJPUEUvIj5FdXJvcGU8L2E+IHwgPGEgaHJl Zj0iL0xBVElOQU1FUklDQS8iPkxhdGluIEFtZXJpY2E8L2E+IHwgPGEgaHJlZj0iL01JRERMRUVB U1QvIj5NaWRkbGUgRWFzdDwvYT4gfCA8YSBocmVmPSIvQlVTSU5FU1MvIj5CdXNpbmVzczwvYT4g fCA8YSBocmVmPSIvU1BPUlQvIj5Xb3JsZCBTcG9ydDwvYT4gfCA8YSBocmVmPSIvU0hPV0JJWi8i PkVudGVydGFpbm1lbnQ8L2E+IHwgPGEgaHJlZj0iL1RFQ0gvIj5UZWNoPC9hPiB8IDxhIGhyZWY9 Ii9UUkFWRUwvIj5UcmF2ZWw8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3d3dy5pcmVwb3J0LmNvbS8/ Y25uPXllcyI+aVJlcG9ydDwvYT48L2Rpdj4KCjxkaXY+PGEgaHJlZj0iL3Rvb2xzL2luZGV4Lmh0 bWwiPlRvb2xzICZhbXA7IFdpZGdldHM8L2E+IHwgPGEgaHJlZj0iL3NlcnZpY2VzL3Jzcy8iPlJT UzwvYT4gfCA8YSBocmVmPSIvc2VydmljZXMvcG9kY2FzdGluZy8iPlBvZGNhc3RzPC9hPiB8IDxh IGhyZWY9Ii9leGNoYW5nZS9ibG9ncy9pbmRleC5odG1sIj5CbG9nczwvYT4gfCA8YSBocmVmPSJo dHRwOi8vZWRpdGlvbi5jbm4uY29tL21vYmlsZS8iPkNOTiBNb2JpbGU8L2E+IHwgPGEgaHJlZj0i L3Byb2ZpbGUvIj5NeSBQcm9maWxlPC9hPiB8IDxhIGhyZWY9Ii9wcm9maWxlLyI+RS1tYWlsIEFs ZXJ0czwvYT4gfCA8YSBocmVmPSIvYXVkaW8vcmFkaW8vd2lubWVkaWEuaHRtbCI+Q05OIFJhZGlv PC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93d3cudHVybmVyc3RvcmVvbmxpbmUuY29tLyI+Q05OIFNo b3A8L2E+IHwgPGEgaHJlZj0iL3NpdGVtYXAvIj5TaXRlIG1hcDwvYT4gfCA8YSBocmVmPSJodHRw Oi8vcGFydG5lcnMuY25uLmNvbS8iPkNOTiBQYXJ0bmVyIEhvdGVsczwvYT4gfCA8YSBocmVmPSJo dHRwOi8vd3d3LmNubnRyYXZlbGxlci5jb20iPkNOTiBUcmF2ZWxsZXI8L2E+PC9kaXY+Cgo8L2Rp dj4KCjxkaXYgY2xhc3M9ImNubl9mdHJkaXZsMiI+PC9kaXY+Cgo8ZGl2IGNsYXNzPSJjbm5fZnRy bG5nZ2NudHIiPgo8ZGl2PjxhIGhyZWY9Ii9lc3Bhbm9sLyI+Q05OIGVuIEVTUEEmTnRpbGRlO09M PC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93d3cuY25uY2hpbGUuY29tIj5DTk4gQ2hpbGU8L2E+IHwg PGEgaHJlZj0iaHR0cDovL3d3dy5jbm5tZXhpY28uY29tIj5DTk4gTSZlYWN1dGU7eGljbzwvYT4g fCA8c3BhbiBjbGFzcz0iY25uX2Z0cmxhcmFiaWMiPjxhIGhyZWY9Imh0dHA6Ly9hcmFiaWMuY25u LmNvbS8iIGNsYXNzPSJjbm5faWU2cG5nIj48aW1nIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5j b20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjExIiBh bHQ9IiIgYm9yZGVyPSIwIj48L2E+PC9zcGFuPiB8IDxzcGFuICBjbGFzcz0iY25uX2Z0cmxrb3Jl YW4iPjxhIGhyZWY9Imh0dHA6Ly9jbm4uam9pbnMuY29tLyIgY2xhc3M9ImNubl9pZTZwbmciPjxp bWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHgu Z2lmIiB3aWR0aD0iMzIiIGhlaWdodD0iMTEiIGFsdD0iIiBib3JkZXI9IjAiPjwvYT48L3NwYW4+ IHwgPHNwYW4gY2xhc3M9ImNubl9mdHJsamFwYW4iPjxhIGhyZWY9Imh0dHA6Ly93d3cuY25uLmNv LmpwLyIgY2xhc3M9ImNubl9pZTZwbmciPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNv bS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lmIiB3aWR0aD0iMzIiIGhlaWdodD0iMTEiIGFs dD0iIiBib3JkZXI9IjAiPjwvYT48L3NwYW4+IHwgPHNwYW4gY2xhc3M9ImNubl9mdHJsdHVya2lz aCI+PGEgaHJlZj0iaHR0cDovL3d3dy5jbm50dXJrLmNvbS8iIGNsYXNzPSJjbm5faWU2cG5nIj48 aW1nIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4 LmdpZiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjExIiBhbHQ9IiIgYm9yZGVyPSIwIj48L2E+PC9zcGFu PjwvZGl2PgoKPC9kaXY+Cgo8ZGl2IGNsYXNzPSJjbm5fZnRybGdjcHkiPgo8ZGl2PjxpbWcgc3Jj PSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC9nbG9iYWwvZm9v dGVyL3BuZ3MvZm9vdGVyX2Nubl9sb2dvLnBuZyIgd2lkdGg9IjIzIiBoZWlnaHQ9IjExIiBhbHQ9 IiIgYm9yZGVyPSIwIiBjbGFzcz0iY25uX2llNnBuZyI+JmNvcHk7IDIwMTAgQ2FibGUgTmV3cyBO ZXR3b3JrLiA8YSBocmVmPSJodHRwOi8vd3d3LnR1cm5lci5jb20vIiBjbGFzcz0iY25uX2Z0cnRi c2xpbmsiPlR1cm5lciBCcm9hZGNhc3RpbmcgU3lzdGVtLCBJbmMuPC9hPiBBbGwgUmlnaHRzIFJl c2VydmVkLjwvZGl2Pgo8L2Rpdj4KCjxkaXYgY2xhc3M9ImNubl9mdHJsZ2NweUJvdCI+PGEgaHJl Zj0iL2ludGVyYWN0aXZlX2xlZ2FsLmh0bWwiIHJlbD0ibm9mb2xsb3ciPlRlcm1zIG9mIHNlcnZp Y2U8L2E+IHwgPGEgaHJlZj0iL3ByaXZhY3kuaHRtbCIgcmVsPSJub2ZvbGxvdyI+UHJpdmFjeSBn dWlkZWxpbmVzPC9hPiB8IDxhIGhyZWY9Ii9zZXJ2aWNlcy9hZC5wcmFjdGljZXMvIj5BZHZlcnRp c2luZyBwcmFjdGljZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3d3dy5jbm5tZWRpYWluZm8uY29t LyIgcmVsPSJub2ZvbGxvdyI+QWR2ZXJ0aXNlIHdpdGggdXM8L2E+IHwgPGEgaHJlZj0iL2ludGxz eW5kaWNhdGlvbi8iPkxpY2Vuc2Ugb3VyIGNvbnRlbnQ8L2E+IHwgPGEgaHJlZj0iL2Fib3V0LyI+ QWJvdXQgdXM8L2E+IHwgPGEgaHJlZj0iL2ZlZWRiYWNrLyIgcmVsPSJub2ZvbGxvdyI+Q29udGFj dCB1czwvYT4gfCA8YSBocmVmPSJodHRwOi8vd3d3LnR1cm5lci5jb20vY2FyZWVycy8iIHJlbD0i bm9mb2xsb3ciPldvcmsgZm9yIHVzPC9hPiB8IDxhIGhyZWY9Ii9oZWxwLyIgcmVsPSJub2ZvbGxv dyI+SGVscDwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iY25uX2Z0cmxuZ2djbnRyQm90Ij48YSBocmVm PSIvQ05OSS8iPkNOTiBUVjwvYT4gfCA8YSBocmVmPSIvSExOLyI+SExOPC9hPiB8IDxhIGhyZWY9 Imh0dHA6Ly90cmFuc2NyaXB0cy5jbm4uY29tL1RSQU5TQ1JJUFRTLyI+VHJhbnNjcmlwdHM8L2E+ PC9kaXY+CgoKPGRpdiBjbGFzcz0iY25uX2NsZWFyIj48L2Rpdj4KPC9kaXY+PCEtLSAvY25uX2Z0 cmNudG50aW5uZXIgLS0+CjwvZGl2PjwhLS0gL2Nubl9mdHJjbnRudCAtLT4KPHNjcmlwdCB0eXBl PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVt ZW50L2pzLzMuMC93ZWF0aGVyLmZvb3Rlci5qcz8yMDEwMDgwMiI+PC9zY3JpcHQ+CjxzY3JpcHQ+ Cgl2YXIgY25uX2VkdG5zd3RjaHZlciA9ICJlZGl0aW9uIjsKPC9zY3JpcHQ+CjxzY3JpcHQgdHlw ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxl bWVudC9qcy8zLjAvZWRpdGlvbi52YXJzLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0 L2phdmFzY3JpcHQiPgoJbXNRdWV1ZU1hbmFnZXIuaW5pdCgncmVxdWVzdEZyYW1lJywgbXNfYmxh bmtVUkwpOwo8L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLy5l bGVtZW50L2pzLzMuMC9pbnRsL2VkaXRpb25fZm9vdGVyLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0 eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgppZihtc19pc0xvZ2dlZEluKCkpIHsKCUNOTl9zZXRDb29r aWUoJ0NOTl9tZW1iZXInLCB0cnVlLCA4NTQ0MDAsICcvJywgZG9jdW1lbnQuZG9tYWluKTsKfQo8 L3NjcmlwdD4KCgkKCjxzY3JpcHQgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVs ZW1lbnQvanMvMy4wL3NfY29kZS5pbnRsLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2Ny aXB0Pgo8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KPCEtLQovKioqKioqKioqKioqKiBE TyBOT1QgQUxURVIgQU5ZVEhJTkcgQkVMT1cgVEhJUyBMSU5FICEgKioqKioqKioqKioqKiovCmlm ICh0eXBlb2YoY25uT21uaVNlYXJjaFBhZ2UpID09ICJ1bmRlZmluZWQiKXsKdmFyIHNfY29kZT1z LnQoKTtpZihzX2NvZGUpZG9jdW1lbnQud3JpdGUoc19jb2RlKX0vLy0tPiAKCnRyeXt3aW5kb3cu b25sb2FkID0gY25uQ2hlY2tFbGVtZW50O31jYXRjaChlcnIpe30KPC9zY3JpcHQ+Cgo8c2NyaXB0 IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij48IS0tCmlmKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4 T2YoJ01TSUUnKT49MClkb2N1bWVudC53cml0ZSh1bmVzY2FwZSgnJTNDJykrJ1whLScrJy0nKQov Ly0tPjwvc2NyaXB0Pgo8bm9zY3JpcHQ+PGltZwpzcmM9Imh0dHA6Ly9tZXRyaWNzLmNubi5jb20v Yi9zcy9jbm4yaW50bC8xL0guMS0tTlMvMD9wYWdlTmFtZT1ObyUyMEphdmFzY3JpcHQiCmhlaWdo dD0iMSIgd2lkdGg9IjEiIGJvcmRlcj0iMCIgYWx0PSIiIC8+PC9ub3NjcmlwdD48IS0tL0RPIE5P VCBSRU1PVkUvLS0+Cgo8IS0tIEVuZCBTaXRlQ2F0YWx5c3QgY29kZSAtLT4KCg0KDQo8c2NyaXB0 IHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2pzLzMuMC9ocHNlY3Rp b250cmFja2luZy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCjxpbWcgc3Jj PSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vMS5naWYiIGFsdD0iIiBpZD0iVGFyZ2V0SW1h Z2VERSIgbmFtZT0iVGFyZ2V0SW1hZ2VERSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgb25Mb2FkPSJn ZXRERUFkSGVhZENvb2tpZSh0aGlzKSI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29t L2Nubi9pbWFnZXMvMS5naWYiIGFsdD0iIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIiBib3JkZXI9IjAi IHZzcGFjZT0iMCIgaHNwYWNlPSIwIiBuYW1lPSJjb29raWVDcnVtYiIgaWQ9ImNvb2tpZUNydW1i IiBhbGlnbj0icmlnaHQiPgk8ZGl2IGNsYXNzPSJjbm5fcGFkMTh0b3AiPjwvZGl2PjwvZGl2Pjwv ZGl2PjwvYm9keT48L2h0bWw+ --000e0cd32f20d7eb280491e609eb Content-Type: text/x-csrc; charset=US-ASCII; name="parse.c" Content-Disposition: attachment; filename="parse.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gexbkdsi1 I2luY2x1ZGUgPHN0ZGlvLmg+CgojaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgojaW5jbHVkZSA8 bGlieG1sL0hUTUxwYXJzZXIuaD4KI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPgoKCnN0YXRp YyB2b2lkIF9nZXRwYWdlX3N0YXJ0RWxlbWVudFNBWCAodm9pZCAqIHVzZXJEYXRhLCBjb25zdCB4 bWxDaGFyICogbmFtZSwgY29uc3QgeG1sQ2hhciAqKiBhdHRzKQp7CglpZiAoIXN0cm5jbXAoInNj cmlwdCIsIG5hbWUsIDYpKQoJCXByaW50ZigiPCVzPiIsIG5hbWUpOwp9CgpzdGF0aWMgdm9pZCBf Z2V0cGFnZV9lbmRFbGVtZW50U0FYICh2b2lkICogdXNlckRhdGEsIGNvbnN0IHhtbENoYXIgKiBu YW1lKQp7CglpZiAoIXN0cm5jbXAoInNjcmlwdCIsIG5hbWUsIDYpKQoJCXByaW50ZigiPC8lcz4i LCBuYW1lKTsKfQpzdGF0aWMgdm9pZCBfZ2V0cGFnZV9jaGFyRGF0YVNBWCAodm9pZCAqIHVzZXJE YXRhLCBjb25zdCB4bWxDaGFyICogYnVmZmVyLCBpbnQgbGVuZ3RoKQp7CiAgICAgICAgc3RydWN0 IF9zaXRlX3VzZXJkYXRhICpzdSA9IHVzZXJEYXRhOwogICAgICAgIHByaW50ZigiJS4qcyIsIGxl bmd0aCwgYnVmZmVyKTsKfQoKCmludCBtYWluKCkKewoJaHRtbFNBWEhhbmRsZXIgaHNoOwoJaHRt bFBhcnNlckN0eHRQdHIgY3R4dDsKCUZJTEUgKmZwOwoJY2hhciBidWZbMTAwXTsKCgltZW1zZXQo JmhzaCwgMCwgc2l6ZW9mKGh0bWxTQVhIYW5kbGVyKSk7CgoJaHNoLnN0YXJ0RWxlbWVudCA9IF9n ZXRwYWdlX3N0YXJ0RWxlbWVudFNBWDsKCWhzaC5lbmRFbGVtZW50ID0gX2dldHBhZ2VfZW5kRWxl bWVudFNBWDsKCWhzaC5jaGFyYWN0ZXJzID0gX2dldHBhZ2VfY2hhckRhdGFTQVg7CgoJLy9jdHh0 ID0gaHRtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KCZoc2gsIE5VTEwsIE5VTEwsIDAsIE5VTEwsIFhN TF9DSEFSX0VOQ09ESU5HX1VURjgpOwoJY3R4dCA9IGh0bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCgm aHNoLCBOVUxMLCBOVUxMLCAwLCBOVUxMLCBYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKCglmcCA9 IGZvcGVuKCJiYXJlLnR4dCIsICJyIik7CgkKCXdoaWxlICghZmVvZihmcCkpCgl7CgkJZmdldHMo YnVmLCAxMDAsIGZwKTsKCQlodG1sUGFyc2VDaHVuayhjdHh0LCBidWYsIHN0cmxlbihidWYpLCAw KTsKCX0KCQkKCWZjbG9zZShmcCk7CgoKCWh0bWxQYXJzZUNodW5rKGN0eHQsIE5VTEwsIDAsIDEp Owp9Cg== --000e0cd32f20d7eb280491e609eb Content-Type: text/plain; name="output.txt" Content-Disposition: attachment; filename="output.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gexbl5ne2 Q05OLmNvbSBJbnRlcm5hdGlvbmFsIC0gQnJlYWtpbmcsIFdvcmxkLCBCdXNpbmVzcywgU3BvcnRz LCBFbnRlcnRhaW5tZW50IGFuZCBWaWRlbyBOZXdzCiogaHRtbCAjaGRyLWF1dGgsCiogaHRtbCAj cG1Vc2VyUGFuZWwKe2Rpc3BsYXk6bm9uZX0gCi5jbm5fc2hkY2FtdHQxIC5jbm5fbXRscGxub2Rl IHsgaGVpZ2h0OjEyNHB4OyB9CjxzY3JpcHQ+dmFyIGNubkN1cnJUaW1lID0gbmV3IERhdGUoMTI4 NjExOTEyNDU4MCk7IHZhciBjbm5DdXJySG91ciA9IDExOyB2YXIgY25uQ3Vyck1pbiA9IDE4OyB2 YXIgY25uQ3VyckRheT0nU3VuJzs8L3NjcmlwdD48c2NyaXB0Pjwvc2NyaXB0PjxzY3JpcHQ+PC9z Y3JpcHQ+PHNjcmlwdD48L3NjcmlwdD48c2NyaXB0Pjwvc2NyaXB0PjxzY3JpcHQ+PC9zY3JpcHQ+ PHNjcmlwdD48L3NjcmlwdD48c2NyaXB0Pjwvc2NyaXB0PjxzY3JpcHQ+PC9zY3JpcHQ+PHNjcmlw dD48L3NjcmlwdD48c2NyaXB0Pjwvc2NyaXB0PjxzY3JpcHQ+PC9zY3JpcHQ+PHNjcmlwdD48L3Nj cmlwdD48c2NyaXB0PgoJdmFyIGNubkNWUEFkU2VjdGlvbiA9ICdlZGl0aW9uLmNubi5jb21fbWFp bl9ob21lcGFnZSc7Cjwvc2NyaXB0PjxzY3JpcHQ+CiAgICAgdmFyIGNubklzU2VjdGlvblBhZ2Ug PSB0cnVlOwo8L3NjcmlwdD4KI2Nubl9tdHQxcmd0YXJlYSAuY25uX2J1bGxldGJpbiAuY25uV09P TCB7bWFyZ2luLXJpZ2h0OjRweDt9IAoKI2Nubl9tdHQxbGZ0YXJlYSB1bCB7IGxpc3Qtc3R5bGUt dHlwZTpub25lOyB9IC8qIHRoZSBGaXhlcyBub24gbGluayBidWxsZXRzIGluIFQxIGJsdXJiLiAy MDEwMDIyNyBQQkIgKi8KPHNjcmlwdD48L3NjcmlwdD48c2NyaXB0Pjwvc2NyaXB0PiAgIAoKCgkK CQkKCQkKCQoJCgkJCgkJCQoJCQkJCgkJCQkJQ05OCgkJCQkJCgkJCQkJCQoJCQkJCQoJCQkJCgkJ CQoJCQkKCQkJCQoJCQkJCUVESVRJT046IMKgSU5URVJOQVRJT05BTAoJCQkJCVUuUy4KCQkJCQlN w4lYSUNPCgkJCQkJQVJBQklDCgkJCQkKCQkJCVNldCBlZGl0aW9uIHByZWZlcmVuY2UKCQkJCgkJ CQoJCQkJCgkJCQkJU2lnbiB1cAoJCQkJCUxvZyBpbgoJCQkJCgkJCQoJCQkKCQkJCQoJCQkJCQoK CgoJCQkJCQoJCQkJCgo8c2NyaXB0PgoKLy9FdmVudC5vYnNlcnZlKHdpbmRvdywgJ2xvYWQnLCBm dW5jdGlvbigpIHsKCQkvLyQoJ2hkci1zZWFyY2gtYm94JykuZm9jdXMoKTsKCS8vfSk7CQoJCjwv c2NyaXB0PgoKCgojaGRyLWVkaXRpb25zIGEgeyB0ZXh0LWRlY29yYXRpb246bm9uZTsgfQojY25u X2hkci1lZGl0aW9uUyB7IHRleHQtYWxpZ246bGVmdDtjbGVhcjpib3RoOyB9CiNjbm5faGRyLWVk aXRpb25TIGEgeyB0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXNpemU6MTBweDt0b3A6N3B4O2xp bmUtaGVpZ2h0OjEycHg7Zm9udC13ZWlnaHQ6Ym9sZDsgfQojaGRyLXByb21wdC10ZXh0IGIgeyBk aXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCAwIDAgMjBweDsgfQojaGRyLWVkaXRpb25zIGxp IHsgcGFkZGluZzowIDEwcHg7IH0KCiNoZHItZWRpdGlvbnMgdWwgbGkubm8tcGFkLWxlZnQgc3Bh biB7IGZvbnQtc2l6ZToxMnB4OyB9Ci5oZHItYXJyb3ctaW50bCwgLmhkci1hcnJvdy11cywgLmhk ci1hcnJvdy11czIgeyBsZWZ0OjE0OHB4OyB9Ci5oZHItYXJyb3ctdXMyIHsgbGVmdDoxODBweDsg fQoKCgoJCQkKCQkKCQoJCgkJCgkJCUhvbWUKCQkJVmlkZW8KCQkJV29ybGQKCQkJVS5TLgoJCQlB ZnJpY2EKCQkJQXNpYQoJCQlFdXJvcGUKCQkJTGF0aW4gQW1lcmljYQoJCQlNaWRkbGUgRWFzdAoJ CQlCdXNpbmVzcwoJCQlXb3JsZCBTcG9ydAoJCQlFbnRlcnRhaW5tZW50CgkJCVRlY2gKCQkJVHJh dmVsCgkJCWlSZXBvcnQKCQkKCQoKPHNjcmlwdD4KLy8gc3dpdGNoaW5nIGJhbm5lcnMgLSBmb3Ig c2VjdGlvbnMgcmVtb3ZlIHRoaXMgYW5kIGhhcmRjb2RlIHByb3BlciBnbG9iZSBpbWFnZQp2YXIg Y25uQ2RuUGF0aCA9ICdodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMu MC9nbG9iYWwvaGVhZGVyL2ludGwvJzsKdmFyIGNubkludGxCYW5uZXJzID0gWwoJJzxpbWcgc3Jj PSInICsgY25uQ2RuUGF0aCArICdoZHItZ2xvYmUtd2VzdC5naWYiIHdpZHRoPSIxOTAiIGhlaWdo dD0iODIiIGFsdD0iIj4nLAoJJzxpbWcgc3JjPSInICsgY25uQ2RuUGF0aCArICdoZHItZ2xvYmUt Y2VudHJhbC5naWYiIHdpZHRoPSIxOTAiIGhlaWdodD0iODIiIGFsdD0iIj4nLAoJJzxpbWcgc3Jj PSInICsgY25uQ2RuUGF0aCArICdoZHItZ2xvYmUtZWFzdC5naWYiIHdpZHRoPSIxOTAiIGhlaWdo dD0iODIiIGFsdD0iIj4nCl07CnZhciBjbm5STnVtID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgp ICogY25uSW50bEJhbm5lcnMubGVuZ3RoKTsKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hkci1i YW5uZXItdGl0bGUnKS5pbm5lckhUTUwgPSBjbm5JbnRsQmFubmVyc1tjbm5STnVtXTsKPC9zY3Jp cHQ+CjxzY3JpcHQ+Cgo8L3NjcmlwdD4KCgoKCgo8c2NyaXB0Pgo8IS0tCnZhciBjbm5QYWdlTmFt ZSA9ICJDTk4gSW50ZXJuYXRpb25hbCBIb21lIFBhZ2UiOwp2YXIgY25uU2VjdGlvbk5hbWUgPSAi Q05OIEludGVybmF0aW9uYWwgSG9tZSBQYWdlIjsKdmFyIHNlbGVjdGVkRWRpdGlvbiA9IGFsbENv b2tpZXNbJ1NlbGVjdGVkRWRpdGlvbiddOwovLy0tPjwvc2NyaXB0PgoKICAgICAgIAoKPHNjcmlw dD4KQ1NJTWFuYWdlci5nZXRJbnN0YW5jZSgpLmNhbGwoJy8uZWxlbWVudC9zc2kvaW50bC9icmVh a2luZ19uZXdzLzMuMC9iYW5uZXIuaHRtbCcsJycsJ2NubkJhbm5lckNvbnRhaW5lcicsY25uUmVu ZGVySW50ZXJuYXRpb25hbEJhbm5lcik7Cjwvc2NyaXB0PgoKCgogICAgT2N0b2JlciAzLCAyMDEw IC0tIFVwZGF0ZWQgMTQzNSBHTVQgKDIyMzUgSEtUKSAgICAgICBDb21tb253ZWFsdGggR2FtZXMg b3BlbmluZyBjZXJlbW9ueSBiZWdpbnNUaGUgMjAxMCBDb21tb253ZWFsdGggR2FtZXMgZmluYWxs eSBvcGVuIFN1bmRheSBpbiBOZXcgRGVsaGksIGZvbGxvd2luZyBhIGJ1aWxkLXVwIGRvbWluYXRl ZCBieSBmZWFycyBJbmRpYSB3b3VsZCBub3QgYmUgcmVhZHkgdG8gaG9zdCB0aGUgc3BvcnRpbmcg c2hvd2Nhc2UuIEZVTEwgU1RPUlkgICAgICAgICAgIFJlbW92aW5nICdleWVzb3JlcycgZm9yIEdh bWVzICAgICAgICAgIFRvcCBzdG9yaWVzVS5TLiBpc3N1ZXMgRXVyb3BlIHRyYXZlbCBhbGVydCAg ICAgICBJcmFuIGFkbWl0cyB0byBhcnJlc3Qgb2YgJ251Y2xlYXIgc3BpZXMnICAgICAgIEV4LXJl YmVsIGFoZWFkIGFzIEJyYXppbGlhbnMgZ28gdG8gcG9sbHMgICAgICAgVGhyZWUgaGVsZCBvdmVy IE5pZ2VyaWEgdGVycm9yIGF0dGFjayAgICAgICBCb3NuaWFucyB2b3RlIGZvciBuZXcgcHJlc2lk ZW50ICAgICAgIFBhbGVzdGluaWFuIHNob3QgZGVhZCBieSBJc3JhZWxpIHBvbGljZSAgICAgICBT b2xkaWVycyBjb252aWN0ZWQgZm9yIEdhemEgYWN0aW9ucyAgICAgICBUaHJlZSAnc3BpZXMnIGtp bGxlZCBpbiBQYWtpc3RhbiAgICAgICBQcml2YXRlIHNlY3VyaXR5IGZpcm1zIGdpdmVuIEFmZ2hh biBiYW4gICAgICAgR3VpbmVhIHByZXNpZGVudGlhbCBydW5vZmYgZmFjZXMgZGVsYXlzICAgICAg IEd1bm1lbiBhYmR1Y3QgMjIgdG91cmlzdHMgaW4gTWV4aWNvICAgICAgIFBhcmFndWF5YW4gcHJl c2lkZW50IGhvc3BpdGFsaXplZCAgICAgICBMYXRlc3Q6IEV1cm9wZSBmaWdodHMgYmFjayBpbiBS eWRlciBDdXAgICAgICAgTWlubm93cyB0YWtlIEdlcm1hbiBmb290YmFsbCBieSBzdG9ybSAgICAg ICAgICAgICAKICAgQmVoaW5kIGV2ZXJ5IGdyZWF0IGdvbGZlciBpcy4uLlRoZSBtZW4gY29tcGV0 aW5nIGluIHRoaXMgd2Vla2VuZCdzIFJ5ZGVyIEN1cCBiZXR3ZWVuIEV1cm9wZSBhbmQgQW1lcmlj YSBtYXkgZ3JhYiB0aGUgYXR0ZW50aW9uIG9mIHRoZSB3b3JsZCdzIG1lZGlhLCBidXQgdGhlIHBs YXllcnMnIHdpdmVzIGhhdmUgYWx3YXlzIGhhZCBhIHJvbGUgdG8gcGxheSBpbiB0aGlzIGNvbXBl dGl0aW9uLiBGVUxMIFNUT1JZSElHSExJR0hUUyAgICBJcmFuIHNlZWtzIG1vcmUgTWlkZWFzdCBp bmZsdWVuY2UgICAgICAgICAgIEJyaXRhaW4ncyBkcnVpZHMgc3VtbW9uIGxvc3Qgc3RhdHVzICAg ICAgICAgICBTdGF0dWUgb2YgZ3JhbmRmYXRoZXIgb2YgS2luZyBUdXQgdW5lYXJ0aGVkICAgICAg ICAgICBDYW5hZGEncyA3NDAtY2Fsb3JpZSBuYXRpb25hbCBkaXNoICAgICAgICAgICBJcyB5b3Vy IGpvYiBtb3JlIGRlcHJlc3Npb24tcHJvbmU/ICAgICAgICAgICBDYW4geW91IGNvbm5lY3QgQ2hp bmEgYW5kIFR1cmtleT8gICAgICAgICAgCjwhLS0uY25uX3NlY3R0NGNudG50e292ZXJmbG93OiB2 aXNpYmxlO30uY25uT3BpbiB7IHBvc2l0aW9uOmFic29sdXRlO3RvcDotMThweDtyaWdodDo3cHg7 IH0uY25uT3BpbiBhLnJlYWxtTGluayB7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTFweDtj b2xvcjojMDA0Mjc2O30tLT4KCgoKCgpNYWtlIENOTiBZb3VyIEhvbWVwYWdlCjxzY3JpcHQ+ClVB c3RyaW5nPW5hdmlnYXRvci51c2VyQWdlbnQ7CmlmIChVQXN0cmluZy5pbmRleE9mKCdpUGFkJyk+ LTEpeyQoJ21ha2VIUExpbmsnKS5oaWRlKCk7fQpmdW5jdGlvbiBjbm5NYWtlSFAoKSB7CmxpbmtU cmFja0NhbGwoJ01ha2UgQ05OIFlvdXIgSFAgQ2xpY2snKTsKaWYgKFVBc3RyaW5nLmluZGV4T2Yo J01TSUUnKT4tMSl7fQkKZWxzZXsKQ05OX2hhbmRsZU92ZXJsYXkoJ2hvbWVwYWdlX3NldF9vdmVy bGF5Jyl9Cn0KCmZ1bmN0aW9uIGxpbmtUcmFja0NhbGwobGlua1ZhbHVlKSB7CgkJdmFyIHM9c19n aShzX2FjY291bnQpOwoJCXMubGlua1RyYWNrVmFycz0nbm9uZSc7CgkJcy5saW5rVHJhY2tFdmVu dHM9J25vbmUnOwoJCXMudGwodGhpcywnbycsbGlua1ZhbHVlKQoJfQo8L3NjcmlwdD4KIAoNCg0K CQ0KCQkNCgkJCQ0KCQkNCgkJDQoJCQ0KDQoNCg0KDQoNCg0KDQo8c2NyaXB0Pg0KY25uYWRfY3Jl YXRlQWQoIjY5NjY0NCIsImh0dHA6Ly9hZHMuY25uLmNvbS9odG1sLm5nL3NpdGU9Y25uX2ludGVy bmF0aW9uYWwmY25uX2ludGxfcGFnZXR5cGU9bWFpbiZjbm5faW50bF9wb3NpdGlvbj0zMDB4MjUw X3JndCZjbm5faW50bF9yb2xsdXA9aG9tZXBhZ2UmcGFnZS5hbGxvd2NvbXBldGU9eWVzJnBhcmFt cy5zdHlsZXM9ZnMiLCIyNTAiLCIzMDAiKTsNCmNubmFkX3JlZ2lzdGVyU3BhY2UoNjk2NjQ0LDMw MCwyNTApOw0KPC9zY3JpcHQ+DQoNCg0KDQoNCg0KDQoNCg0KDQoNCgkJDQoJDQoNCg0KDQoNCg0K DQoKCgkKIAkNCgkgICAgDQoJCQ0KCSAgICAgICAgDQoJICAgICAgICBzZXR0aW5ncw0KCSAgICAg ICAgQ29ubmVjdCB5b3VyIENOTiAmIEZhY2Vib29rIGFjY291bnRzDQoJICAgIA0KCSAgICANCgkg ICAgICAgIEhpISBMb2cgaW4gb3Igc2lnbiB1cCB0byBwZXJzb25hbGl6ZSENCgkgICAgDQoJICAg IA0KCSAgICAgICAgSGkgdGhlcmUhTG9nIGluIHwgc2lnbiB1cA0KCSAgICANCg0KCQ0KCgkKCQoJ CgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKCglQb3B1bGFyIG9uIEZhY2Vib29r CgnCoAoKCgoKCQoJCgkKCQoJCgkKCgkKCQlMb2cgaW4gd2l0aCBGYWNlYm9vayB0byBzZWUgeW91 ciBmcmllbmRzJyBhY3Rpdml0eSB8IFdoYXQncyB0aGlzPwoJCgkKCQlWaWV3IG1vcmUgZnJpZW5k cycgYWN0aXZpdHkgfCBXaGF0J3MgdGhpcz8KCQoJCgkJCgkJCQoJCQoJCQoJCQkKCQkJCQoJCQkJ CgkJCQoJCQkKCQkJCgkJCQkKCQkJCQnCoAoJCQkJCgkJCQoJCQkKCQkKCQoKCgogICAgICAgICAg ICAgICAgCgkJCgkJCgkJDQoJTW9zdCBQb3B1bGFyDQoJwqANCg0KDQoNCgkNCgkJCgrigKJUcmF2 ZWwgYWxlcnQgaXNzdWVkIGZvciBVLlMuIGNpdGl6ZW5zIGluIEV1cm9wZQoKCgoKCgoK4oCiQ2hp bmEgYWNjdXNlZCBvZiBpbnZhZGluZyBkaXNwdXRlZCBpc2xhbmRzCgoKCgoKCgrigKJIb3VzZSBw YXNzZXMgYmlsbCB0byBoZWxwIDkvMTEgZmlyc3QgcmVzcG9uZGVycwoKCgoKCgoK4oCiVS5TLiBp c3N1ZXMgYWxlcnQgZm9yIEFtZXJpY2FucyBpbiBFdXJvcGUKCgoKCgoKCuKAoldpdGhvdXQgYSBj aGFpciBhdCB0aGUgdGFibGUsIElyYW4gc2Vla3MgaW5mbHVlbmNlIG5vbmV0aGVsZXNzCgoKCgoK CgrigKJBZmdoYW4gb2ZmaWNpYWxzOiBOQVRPIGFpcnN0cmlrZSBraWxscyBUYWxpYmFuIGluc3Vy Z2VudHMsIGNpdmlsaWFucwoKCgoKCg0KCQ0KCQ0KCQkNCgkNCg0KDQoJICAgIAkgICAgCgkJCgkJ CgkJCgkJCQkNCgkJCVdlYXRoZXINCgkJCcKgDQoJCQ0KCQkNCgkJDQoJDQoJCQkNCgkJCQ0KCQkJ CQ0KCQkJCQkNCgkJCQkJCQ0KCQkJCQkJCQ0KCQkJCQkJCQlFZGl0IGxvY2F0aW9uDQoJCQkJCQkJ DQoJCQkJCQkJR28NCgkJCQkJCQ0KCQkJCQkJDQoJCQkJCQ0KCQkJCQ0KCQkJDQoJCQkNCgkJCQ0K CQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCQkNCgkgICAgCgkJCgkJCgkJCgkJCQkNCgkJCU1h cmtldHMNCgkJCcKgDQoJCQ0KCQkNCgkJCQoJCgkgICAgCgkgICAgICAgIFVwZGF0ZWQgMTUxOCBH TVQsIE9jdCAzCiAgICAgICAgICAgIGFsbCBtYXJrZXRzwrsKCSAgICAKICAgICAgIAlBc2lhCiAg ICAgICAgRXVyb3BlCiAgICAgICAgVXMKCQoJCgkKCQkJIAoJCQkgICAgIAoJCQkgICAgICAgIEhh bmcgU2VuZwoJCQkgICAgICAgIDIyLDM1OC4xNwoJCQkgICAgCgkJCSAgICAKCQkJCQlDbG9zZWQK CQkJICAgICAgICAKCQkJICAgICAgICAgICAgKC0wLjA5JSkKCQkJICAgICAgICAKCQkJICAgICAg ICAKCQkJICAgICAgICAgICAgLTIwLjUKCQkJICAgICAgICAKCQkJICAgIAoJCQkKCQkJIAoJCQkg ICAgIAoJCQkgICAgICAgIE5pa2tlaQoJCQkgICAgICAgIDksNDA0LjIzCgkJCSAgICAKCQkJICAg IAoJCQkJCUNsb3NlZAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAoKzAuMzclKQoJCQkgICAg ICAgIAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICArMzQuODgKCQkJICAgICAgICAKCQkJICAg IAoJCQkKCQkJIAoJCQkgICAgIAoJCQkgICAgICAgIEFTWCAxMDAKCQkJICAgICAgICA0LDYzNC43 MAoJCQkgICAgCgkJCSAgICAKCQkJCQlDbG9zZWQKCQkJICAgICAgICAKCQkJICAgICAgICAgICAg KC0wLjA1JSkKCQkJICAgICAgICAKCQkJICAgICAgICAKCQkJICAgICAgICAgICAgLTIuMgoJCQkg ICAgICAgIAoJCQkgICAgCgkJCQoJCgkKCQoJCgkJCSAKCQkJICAgICAKCQkJICAgICAgICBGVFNF IDEwMAoJCQkgICAgICAgIDUsNTkyLjkwCgkJCSAgICAKCQkJICAgIAoJCQkJCUNsb3NlZAoJCQkg ICAgICAgIAoJCQkgICAgICAgICAgICAoKzAuODAlKQoJCQkgICAgICAgIAoJCQkgICAgICAgIAoJ CQkgICAgICAgICAgICArNDQuMjgKCQkJICAgICAgICAKCQkJICAgIAoJCQkKCQkJIAoJCQkgICAg IAoJCQkgICAgICAgIENBQyA0MAoJCQkgICAgICAgIDMsNjkyLjA5CgkJCSAgICAKCQkJICAgIAoJ CQkJCUNsb3NlZAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAoLTAuNjIlKQoJCQkgICAgICAg IAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAtMjMuMDkKCQkJICAgICAgICAKCQkJICAgIAoJ CQkKCQkJIAoJCQkgICAgIAoJCQkgICAgICAgIERBWAoJCQkgICAgICAgIDYsMjExLjM0CgkJCSAg ICAKCQkJICAgIAoJCQkJCUNsb3NlZAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAoLTAuMjgl KQoJCQkgICAgICAgIAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAtMTcuNjgKCQkJICAgICAg ICAKCQkJICAgIAoJCQkKCQoJCgkKCQoJCQkgCgkJCSAgICAgCgkJCSAgICAgICAgRG93CgkJCSAg ICAgICAgMTAsODI5LjY4CgkJCSAgICAKCQkJICAgIAoJCQkJCUNsb3NlZAoJCQkgICAgICAgIAoJ CQkgICAgICAgICAgICAoKzAuMzklKQoJCQkgICAgICAgIAoJCQkgICAgICAgIAoJCQkgICAgICAg ICAgICArNDEuNjMKCQkJICAgICAgICAKCQkJICAgIAoJCQkKCQkJIAoJCQkgICAgIAoJCQkgICAg ICAgIE5hc2RhcQoJCQkgICAgICAgIDIsMzcwLjc1CgkJCSAgICAKCQkJICAgIAoJCQkJCUNsb3Nl ZAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAoKzAuMDklKQoJCQkgICAgICAgIAoJCQkgICAg ICAgIAoJCQkgICAgICAgICAgICArMi4xMwoJCQkgICAgICAgIAoJCQkgICAgCgkJCQoJCQkgCgkJ CSAgICAgCgkJCSAgICAgICAgUyZQIDUwMAoJCQkgICAgICAgIDEsMTQ2LjI0CgkJCSAgICAKCQkJ ICAgIAoJCQkJCUNsb3NlZAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAoKzAuNDQlKQoJCQkg ICAgICAgIAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICArNS4wNAoJCQkgICAgICAgIAoJCQkg ICAgCgkJCQoJCgkKCQkJCQkKICAgICAgICAgICAgICAgIAoKIA0KICAgICAgICAJICAgIAoJCQoJ CQoJCgkKCgoKCjxzY3JpcHQ+DQoJRXZlbnQub2JzZXJ2ZSh3aW5kb3csICdsb2FkJywgZnVuY3Rp b24oKSB7DQoJCU1haW5Mb2NhbE9iai5pbml0KCk7DQoJfSk7CQkNCjwvc2NyaXB0Pg0KCgoNCg0K DQoNCiAgIEVkaXRvcidzIENob2ljZUhpZ2hsaWdodHNDb25uZWN0b3Igb2YgdGhlIERheSAgICBD b29sZXN0IGNhcnMgYXQgUGFyaXMgTW90b3IgU2hvdyAgICBHYW1lIHJlbW92ZXMgJ1RhbGliYW4n IG9wdGlvbiAgICBOYXZ5IHN1cmdlb25zJyBvZGQgdHJlYXRtZW50cyAgICAnRGFyayBjaGFwdGVy JyBvZiBtZWRpY2FsIHJlc2VhcmNoICAgIEVneXB0aWFuIHdvbWVuIGRyaXZlIHRheGlzICAgIFUu Uy4tQ2hpbmEgcmlmdCAnY2F0YXN0cm9waGljJyAgICAgTWljaGFlbCBDYWluZSBvbiAnSW5jZXB0 aW9uJyAgICAgIEZlbWluaXNtICdnb25lIGJvbmtlcnMnPyAgICBTaHV0dGxlIGxheW9mZnMgc2V0 IHdvcmtlcnMgYWRyaWZ0ICAgIFRoZSBjaGVmIHNlcnZpbmcgQWZyaWNhIG9uIGEgcGxhdGUgICAg TmlnZXJpYW4gbGVhZGVyIG9uIHBvd2VyIGFuZCB2aW9sZW5jZSAgICBZZW1lbidzIGRpdm9yY2Vk IGNoaWxkIGJyaWRlcyAgICAgUnlkZXIgQ3VwOiBUaGluZ3MgeW91IGRvbid0IGtub3cgICAgRXVy b3BlYW4gYnVzaW5lc3Mgc2Nob29scyB0cmFpbCBVLlMuICAgIEF1dG8gaW5kdXN0cnkgZXllcyBl bGVjdHJpYyBtYXJrZXQgICAgIENoaW5hJ3MgYmlsbGlvbmFpcmVzIHNoYXJlIHRoZSB3ZWFsdGg/ ICAgIEEgJ05vYmVsJyBpZGVhOiBTb2NpYWwgYnVzaW5lc3MgICAgJ1RoZSB3b3JzdCBwbGFjZSB0 byBiZSBhIHdvbWFuJyAgICA8c2NyaXB0PgoKCgl2YXIgQ05OX2dhbGxlcnlfMF9hZF8wID0gIi9j bm5fYWRzcGFjZXMvMy4wL2hvbWVwYWdlL21haW4vYm90MS4xMjB4OTAuYWQiOyAvL3BhdGggdG8g YWQgZmlsZQoJdmFyIENOTl9nYWxsZXJ5XzBfYWRfMSA9ICIvY25uX2Fkc3BhY2VzLzMuMC9ob21l cGFnZS9tYWluL2JvdDIuMTIweDkwLmFkIjsgLy9wYXRoIHRvIGFkIGZpbGUKCXZhciBDTk5fZ2Fs bGVyeV8wX2FkXzIgPSAiL2Nubl9hZHNwYWNlcy8zLjAvaG9tZXBhZ2UvbWFpbi9ib3QzLjEyMHg5 MC5hZCI7IC8vcGF0aCB0byBhZCBmaWxlCgoJdmFyIENOTl9nYWxsZXJ5XzFfYWRfMCA9ICIvY25u X2Fkc3BhY2VzLzMuMC9ob21lcGFnZS9tYWluL2JvdDQuMTIweDkwLmFkIjsgLy9wYXRoIHRvIGFk IGZpbGUKCXZhciBDTk5fZ2FsbGVyeV8xX2FkXzEgPSAiL2Nubl9hZHNwYWNlcy8zLjAvaG9tZXBh Z2UvbWFpbi9ib3Q1LjEyMHg5MC5hZCI7IC8vcGF0aCB0byBhZCBmaWxlCgl2YXIgQ05OX2dhbGxl cnlfMV9hZF8yID0gIi9jbm5fYWRzcGFjZXMvMy4wL2hvbWVwYWdlL21haW4vYm90Ni4xMjB4OTAu YWQiOyAvL3BhdGggdG8gYWQgZmlsZQoKCXZhciBDTk5fZ2FsbGVyeV8yX2FkXzAgPSAiL2Nubl9h ZHNwYWNlcy8zLjAvaG9tZXBhZ2UvbWFpbi9ib3Q3LjEyMHg5MC5hZCI7IC8vcGF0aCB0byBhZCBm aWxlCgl2YXIgQ05OX2dhbGxlcnlfMl9hZF8xID0gIi9jbm5fYWRzcGFjZXMvMy4wL2hvbWVwYWdl L21haW4vYm90OC4xMjB4OTAuYWQiOyAvL3BhdGggdG8gYWQgZmlsZQoJdmFyIENOTl9nYWxsZXJ5 XzJfYWRfMiA9ICIvY25uX2Fkc3BhY2VzLzMuMC9ob21lcGFnZS9tYWluL2JvdDkuMTIweDkwLmFk IjsgLy9wYXRoIHRvIGFkIGZpbGUKCglpZiAoICQoJ2Nubl9HYWxsZXJ5U2xpZGVyQ29udGFpbmVy JykgKSB7CgkJY25uX1NlY3Rpb25HYWxsZXJ5ID0gbmV3IGNubl9HYWxsZXJ5U2xpZGVyKCk7Cgl9 Cgo8L3NjcmlwdD4KICAgCgoJCgoKCSBCdXNpbmVzcyBVLlMuLUNoaW5hIHJpZnQgd291bGQgYmUg J2NhdGFzdHJvcGhpYydBdXRvIFNob3c6IFBhcmlzIGlzIGVsZWN0cmljIFRyYWRpbmcgcHJvYmxl bSBjYXVzZWQgJ2ZsYXNoIGNyYXNoJ0NvbnRpbmVudGFsLCBVbml0ZWQgbWVyZ2VOQVNBIHdvcmtl cnMgZmFjZSBsYXlvZmZzR29sZCBBVE1zIGNvbWluZyB0byBVLlMuSWtlYSByZXZlYWxzIHByb2Zp dHMgZm9yIGZpcnN0IHRpbWUgICAKCgoKCgkgV29ybGQgU3BvcnQgQ29tbW9ud2VhbHRoIEdhbWVz IG9wZW5pbmdNb3RvcnNwb3J0OiBTZXZlbiBzdHJhaWdodCBmb3IgTG9lYlRlbm5pczogTmFkYWwn cyBjb25xdWVyb3Igd2lucyB0aXRsZUdvbGY6IEV1cm9wZSBpbiBmaWdodGJhY2tGb290YmFsbDog TWlsYW4gZ28gdG9wOyBWYWxlbmNpYSB3aW5Gb290YmFsbDogTWFuIFVuaXRlZCBoZWxkOyBTcHVy cyB3aW5Gb290YmFsbDogU2V2ZW50aCBoZWF2ZW4gZm9yIE1haW56ICAgCgoKCgoJIERhaWx5IFNu YXBzaG90ICAgICBUaGUgY2F0J3Mgd2hpc2tlcnMgU2VuZCB5b3VyIGltYWdlcyB0byBpUmVwb3J0 ICAgCgoKDQoNCg0KDQoNCg0KDQoNCjxzY3JpcHQ+DQpjbm5hZF9jcmVhdGVBZCgiOTM5MTQ5Iiwi aHR0cDovL2Fkcy5jbm4uY29tL2h0bWwubmcvc2l0ZT1jbm5faW50ZXJuYXRpb25hbCZjbm5faW50 bF9wb3NpdGlvbj04OHgzMV9zcG9uX2RhaWx5c25hcCZjbm5faW50bF9yb2xsdXA9aG9tZXBhZ2Um cGFnZS5hbGxvd2NvbXBldGU9eWVzJnBhcmFtcy5zdHlsZXM9ZnMiLCIzMSIsIjg4Iik7DQpjbm5h ZF9yZWdpc3RlclNwYWNlKDkzOTE0OSw4OCwzMSk7DQo8L3NjcmlwdD4NCg0KDQoNCg0KDQoNCg0K DQoNCgoKCgoKCgoJCgkJQ05OIFRWCgkJCgkJCgkJCQkJCQoJCQoKCQoJCgkJSXMgWW91ciBIZXJv IG9uIHRoZSBMaXN0P1ZvdGUgTm93IQoJCgoKV2hvIHdpbGwgYmUgdGhlIDIwMTAgQ05OIEhlcm8g b2YgdGhlIFllYXI/IE1lZXQgdGhlIFRvcCAxMCBIZXJvZXMgJiBWb3RlIGZvciB5b3VyIGZhdm9y aXRlIG5vdyEgQ2xpY2sgaGVyZSBmb3IgbW9yZSEKCgoJCgkKCQoJCQpQcm9ncmFtcwotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTY2hlZHVsZQotLS0tLSBH TE9CQUwgTkVXUyAtLS0tLQpDb25uZWN0IFRoZSBXb3JsZApJbnRlcm5hdGlvbmFsIERlc2sKV29y bGQgT25lCldvcmxkIFZpZXcKLS0tLS0gTkVXUyBGRUFUVVJFUyAtLS0tLQpCYWNrU3RvcnkKaS1M aXN0CkltcGFjdCBZb3VyIFdvcmxkCkluc2lkZSBBZnJpY2EKSW5zaWRlIHRoZSBNaWRkbGUgRWFz dAppUmVwb3J0IGZvciBDTk4KUG9saXRpY2FsIE1hbm4KVGhlIFNpdHVhdGlvbiBSb29tCldvcmxk J3MgVW50b2xkIFN0b3JpZXMKLS0tLS0gQlVTSU5FU1MgTkVXUyAtLS0tLQpNYXJrZXRwbGFjZSBB ZnJpY2EKTWFya2V0cGxhY2UgTWlkZGxlIEVhc3QKUXVlc3QgTWVhbnMgQnVzaW5lc3MKLS0tLS0g QlVTSU5FU1MgRkVBVFVSRVMgLS0tLS0KQnVzaW5lc3MgVHJhdmVsbGVyCi0tLS0tIElOVEVSVklF VyBhbmQgREVCQVRFIC0tLS0tCkFmcmljYW4gVm9pY2VzCkZhcmVlZCBaYWthcmlhIEdQUwpJbnRl cm5hdGlvbmFsIENvcnJlc3BvbmRlbnRzCkxhcnJ5IEtpbmcgTGl2ZQpTdGF0ZSBvZiB0aGUgVW5p b24KVGFsayBBc2lhCi0tLS0tIFNQT1JUUyAtLS0tLQpMaXZpbmcgR29sZgpNYWluU2FpbApPcGVu IENvdXJ0CldvcmxkIFNwb3J0Ci0tLS0tIExJRkVTVFlMRSAtLS0tLQpDTk5HbwpFYXJ0aCdzIEZy b250aWVycwpFY28gU29sdXRpb25zCmljb24KUmV2ZWFsZWQKVGhlIFNjcmVlbmluZyBSb29tCgoK CQoJQ05OIFRWIFNjaGVkdWxlIMKgfMKgIFdoYXQncyBvbj8KCgoKCgoKCgoKCgoKCSBFbnZpcm9u bWVudCBTdHVkeTogT25lIGluIGZpdmUgcGxhbnRzIGluIHBlcmlsIFJ1c3NpYSdzIHZpc2lvbiBm b3IgQXJjdGljIHdlYWx0aCBIdWdlIG9mZnNob3JlIHdpbmQgZmFybSBvcGVucyBTY2llbnRpc3Rz IHRydW1wZXQgJ3NocmV3JyBmaW5kIFNjaWVudGlzdHM6IFNlcmVuZ2V0aSBvbiByb2FkIHRvIHJ1 aW4gQmFsbG9vbiBoZWxwcyBQYXJpc2lhbnMgYnJlYXRoZSBlYXN5IEVuZGFuZ2VyZWQgJ3VuaWNv cm4nIGNhcHR1cmVkICAgICAgICAgICAKCgoKCgoJIFRlY2hub2xvZ3kgV2FyIGdhbWUgYXhlcyAn VGFsaWJhbicgb3B0aW9uJ1NvY2lhbCBOZXR3b3JrJyBzdGFycyBkaXNjdXNzIGZpbG12Q2hhdHRl cjogVGhlIGxlc3MtbmFrZWQgQ2hhdHJvdWxldHRlMyBzZW1pLXNlY3JldCBBcHBsZSBUViBmZWF0 dXJlc0ZhY2Vib29rIHVwZ3JhZGVzIGl0cyBwaG90byBmZWF0dXJlVGVjaCBrZWVwcyBtb3ZpZXMs IFRWIHJlbGV2YW50QnJvd3NlIHRoZSBXZWIsIGVhcm4gcG9pbnRzICAgCgoKCgoJIGktTGlzdCA6 IE5pZ2VyaWEgRmlyc3QgYmlsbGlvbmFpcmUgY2VtZW50cyBoaXMgZm9ydHVuZSAgTmlnZXJpYSdz IGNlbGVicml0eSBibG9nZ2VyIE5pZ2VyaWE6IEVjb25vbWljIHBvd2VyaG91c2UgIEJ1c2luZXNz IG9mIG1vYmlsZXMgaW4gTmlnZXJpYSBHYWxsZXJ5OiBOaWdlcmlhJ3MgcGVvcGxlIGFuZCBwbGFj ZXMgUXVpejogVGVzdCB5b3VyIGtub3dsZWRnZSBZb3VuZyB3cml0ZXJzIHN0YXJ0IG5ldyBjaGFw dGVyICAgIAoJCgkJDQoNCg0KDQoNCg0KDQo8c2NyaXB0Pg0KY25uYWRfY3JlYXRlQWQoIjk1MDAz MiIsImh0dHA6Ly9hZHMuY25uLmNvbS9odG1sLm5nL3NpdGU9Y25uX2ludGVybmF0aW9uYWwmY25u X2ludGxfcG9zaXRpb249ODh4MzFfc3Bvbl9pbGlzdCZjbm5faW50bF9yb2xsdXA9aG9tZXBhZ2Um cGFnZS5hbGxvd2NvbXBldGU9bm8mcGFyYW1zLnN0eWxlcz1mcyIsIjAiLCIwIik7DQpjbm5hZF9y ZWdpc3RlclNwYWNlKDk1MDAzMiwwLDApOw0KPC9zY3JpcHQ+DQoNCg0KDQoNCgoJCgoKCgoJUXVp Y2t2b3RlPHNjcmlwdD4gdmFyIHF2cV9jb3VudCA9IDA7IDwvc2NyaXB0PgoKCgoKCkRvZXMgeW91 ciBqb2IgbWFrZSB5b3UgZmVlbCBkZXByZXNzZWQ/CgoKCiBZZXMKPHNjcmlwdD4gcXZxX2NvdW50 Kys7IDwvc2NyaXB0PgogTm8KPHNjcmlwdD4gcXZxX2NvdW50Kys7IDwvc2NyaXB0PgogV2hhdCBq b2I/CjxzY3JpcHQ+IHF2cV9jb3VudCsrOyA8L3NjcmlwdD4KCgoKCgoKb3IgdmlldyByZXN1bHRz CgoKCgoKPHNjcmlwdD4KCgl2YXIgcXZfc3VibWl0dGVkXzUzMjcxOwoJZnVuY3Rpb24gcXZTdWJt aXRWb3RlXzUzMjcxKCkgeyBxdl9zdWJtaXR0ZWRfNTMyNzEgPSAxOyQoJ3F2X3BvbGxfNTMyNzEn KS5zdWJtaXQoKTtxdkdldFJlc3VsdHNfNTMyNzEoKTsgfQoJZnVuY3Rpb24gcXZHZXRSZXN1bHRz XzUzMjcxKCkgeyAKCQoJCQlDU0lNYW5hZ2VyLmdldEluc3RhbmNlKCkuY2FsbCgnaHR0cDovXC93 d3cuY25uLmNvbS9QT0xMU0VSVkVSL3Jlc3VsdHMvNTMyNzEuY29udGVudC5odG1sJywgJycsICdj bm5RVl9Db250ZW50XzUzMjcxJywgY25uX3F2QlBIVE1MXzUzMjcxLCB0cnVlKTsKCQoJfQoJCglm dW5jdGlvbiBjbm5fcXZCUEhUTUxfNTMyNzEob2JqLCBpZCwgY29uZmlnT2JqKSB7CgkKCQl2YXIg cXZ0ZW1wX2FyciA9IG5ldyBBcnJheSgpOwoJCWZvcihpPTE7aSA8PSBxdnFfY291bnQ7aSsrKSB7 IHF2dGVtcF9hcnJbKGkgLSAxKV0gPSB7ICdhX3R4dCcgOiAkKCdjbm5Qb2xsX1ExTCcgKyBpKS5p bm5lckhUTUwsICd2b3RlX2MnIDogcGFyc2VJbnQob2JqLnBvbGxfdmFsdWVzW2ldLnZvdGVfY291 bnQpLCAndm90ZV9wJyA6IHBhcnNlSW50KG9iai5wb2xsX3ZhbHVlc1tpXS52b3RlX3BlcmNlbnQp IH07IH0KCQlxdnRlbXBfYXJyLnNvcnQoY25uX3F2Q29tcFJlcyk7CgkJcmV0dXJuIGNubl9xdkJS ZXNIVE1MKG9iaiwgcXZ0ZW1wX2FyciwgJzUzMjcxJyk7CgkJCgl9CgkKCQoJZnVuY3Rpb24gY25u X3F2QlJlc0hUTUwob2JqLCBxdl9hcnIsIHBvbGxfaWQpIHsKCQoJCXZhciBxdnRlbXBfaHRtbCA9 ICc8ZGl2IGNsYXNzPSJjbm5fcXZidjE0Ij4nOwoJCXF2dGVtcF9odG1sICs9ICc8ZGl2IGNsYXNz PSJjbm5fcXZidjE2Ij4nOwoJCXF2dGVtcF9odG1sICs9ICc8aDU+JyArICQoJ2NublFWX3F1ZXNU eFQnKS5pbm5lckhUTUwgKyAnJzsKCQlpZihvYmoucmVsYXRlZF9zdG9yeSkgeyBxdnRlbXBfaHRt bCArPSAnPGRpdiBjbGFzcz0iY25uX3F2YnY1Ij48YSBocmVmPSInICsgb2JqLnJlbGF0ZWRfc3Rv cnkgKyAnIj5SZWFkIFJlbGF0ZWQgQXJ0aWNsZXM8L3NjcmlwdD4nOyB9CgkJcXZ0ZW1wX2h0bWwg Kz0gJyc7CgkJcXZ0ZW1wX2h0bWwgKz0gJ1RoaXMgaXMgbm90IGEgc2NpZW50aWZpYyBwb2xsJzsK CQlxdnRlbXBfaHRtbCArPSAnJzsKCQkKCQlxdnRlbXBfaHRtbCArPSAnJzsKCgoJCWZvcihpPTA7 aSAnOwoJCQlxdnRlbXBfaHRtbCArPSAnJyArIHF2X2FycltpXS5hX3R4dCArICcnOwoJCQlxdnRl bXBfaHRtbCArPSAnJzsKCQkJcXZ0ZW1wX2h0bWwgKz0gJycgKyBxdl9hcnJbaV0udm90ZV9wICsg JyUnOwoJCQlxdnRlbXBfaHRtbCArPSAnJyArIHF2X2FycltpXS52b3RlX2MgKyAnJzsKCQkJcXZ0 ZW1wX2h0bWwgKz0gJyc7CgkJCXF2dGVtcF9odG1sICs9ICcnOwoKCQl9CgkJCgkJcXZ0ZW1wX2h0 bWwgKz0gJ1RvdGFsIHZvdGVzOiAnICsgb2JqLnRvdGFsX3ZvdGVfY291bnQgKyAnJzsKCQlxdnRl bXBfaHRtbCArPSAnVGhpcyBpcyBub3QgYSBzY2llbnRpZmljIHBvbGwnOwoJCQoJCXF2dGVtcF9o dG1sICs9ICcnOwoKCQlyZXR1cm4gcXZ0ZW1wX2h0bWw7CgkJCgl9CgkKCWZ1bmN0aW9uIGNubl9x dkNvbXBSZXMoYSwgYikgeyByZXR1cm4gYi52b3RlX2MgLSBhLnZvdGVfYzsgfQoJCgoKCgoKCgoK CgoKCgoKCgoJIEVudGVydGFpbm1lbnQgVFYgcHJvZHVjZXIgU3RlcGhlbiBKLiBDYW5uZWxsIGRp ZXNHYWxsZXJ5OiBDcmVlcGllc3Qga2lkcyBpbiBob3Jyb3IgbW92aWVzV2hlcmUgaW4gdGhlIHdv cmxkIGlzIFJvbiBCdXJndW5keT8nU2lzdGVyIFdpdmVzJzogV2UncmUgbm9ybWFsICdUaGUgU29j aWFsIE5ldHdvcmsnIGRlc2VydmVzIHRvIGdvIHZpcmFsT3ByYWggZmVhcmVkIG1ha2luZyBqdW1w Sm9uIFN0ZXdhcnQ6IEl0J3Mgbm90IGFib3V0IEdsZW5uIEJlY2sgICAKCgoKCgkgVHJhdmVsIFUu Uy4gbWF5IGlzc3VlIHRyYXZlbCBhbGVydCBmb3IgRXVyb3BlQ2l0eSBndWlkZTogQ3VsdHVyYWws IGhpcCBCZXJsaW5SYWlzZSB5b3VyIGdsYXNzZXMhIEZpdmUgZmFsbCBiZWVyIGZlc3RzSG9uZyBL b25nJ3MgZ2FyaXNoIG5lb24gc2lnbnM2IGRpZSBpbiBjcmFzaCBuZWFyIFBlcnUncyBOYXpjYSBM aW5lc0d1bm1lbiBhYmR1Y3QgMjIgdG91cmlzdHMgaW4gTWV4aWNvTW9yZSBsdXh1cnkgaG90ZWxz IG9wZW4gaW4gQmFuZ2tvayAgIAoKCgoKCSBPcGluaW9uIFRoZSBhbWF6aW5nIHBvd2VyIG9mIG5l dHdvcmtzSG9tZSBpbnZhc2lvbiB2aWN0aW0ncyBvcmRlYWwgZ29lcyBvbldoeSBkaWQgVHlsZXIg Q2xlbWVudGkgZGllP1UuUy4tQ2hpbmEgc3BsaXQgd291bGQgYmUgYSBjYXRhc3Ryb3BoZU5pZ2Vy aWEgbmVlZHMgbW9yZSB0aGFuIG5ldyBsZWFkZXJzV2h5IG5vIHByYXllcnMgZm9yIExvbmcncyBh Y2N1c2Vycz9EYW5nZXJzIGluIGFjdGl2aXN0IGpvdXJuYWxpc20gICAKCgoKCgoKCgoKCgoJCgkJ CgkJCQ0KDQoNCg0KDQoNCg0KDQo8c2NyaXB0Pg0KY25uYWRfY3JlYXRlQWQoIjIyMzQwOSIsImh0 dHA6Ly9hZHMuY25uLmNvbS9odG1sLm5nL3NpdGU9Y25uX2ludGVybmF0aW9uYWwmY25uX2ludGxf cGFnZXR5cGU9bWFpbiZjbm5faW50bF9wb3NpdGlvbj03Mjh4OTBfYm90JmNubl9pbnRsX3JvbGx1 cD1ob21lcGFnZSZwYWdlLmFsbG93Y29tcGV0ZT15ZXMmcGFyYW1zLnN0eWxlcz1mcyIsIjkwIiwi NzI4Iik7DQpjbm5hZF9yZWdpc3RlclNwYWNlKDIyMzQwOSw3MjgsOTApOw0KPC9zY3JpcHQ+DQoN Cg0KDQoNCg0KDQoNCg0KDQoKCQkJCgkJCgkKCgoKCgoKCkhvdCB0b3BpY3MKCgoKCgoKCU1pbmlu ZyBhY2NpZGVudHMgYW5kIGRpc2FzdGVycyBOb3J0aCBLb3JlYSBJcmFuIExhZHkgR2FnYSBGb290 YmFsbCBQYWtpc3RhbiBFbnZpcm9ubWVudCBBZmdoYW5pc3RhbiBBcHBsZSBDaGluYSAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKICAgIA0KDQoKCgoKCUxvYWRpbmcgd2VhdGhlciBkYXRhIC4uLgoK CgoJCgoKCQoKCgoKCgkJCgoKCgkKCgoKCgoKCgpIb21lIHwgVmlkZW8gfCBXb3JsZCB8IFUuUy4g fCBBZnJpY2EgfCBBc2lhIHwgRXVyb3BlIHwgTGF0aW4gQW1lcmljYSB8IE1pZGRsZSBFYXN0IHwg QnVzaW5lc3MgfCBXb3JsZCBTcG9ydCB8IEVudGVydGFpbm1lbnQgfCBUZWNoIHwgVHJhdmVsIHwg aVJlcG9ydAoKVG9vbHMgJiBXaWRnZXRzIHwgUlNTIHwgUG9kY2FzdHMgfCBCbG9ncyB8IENOTiBN b2JpbGUgfCBNeSBQcm9maWxlIHwgRS1tYWlsIEFsZXJ0cyB8IENOTiBSYWRpbyB8IENOTiBTaG9w IHwgU2l0ZSBtYXAgfCBDTk4gUGFydG5lciBIb3RlbHMgfCBDTk4gVHJhdmVsbGVyCgoKCgoKCkNO TiBlbiBFU1BBw5FPTCB8IENOTiBDaGlsZSB8IENOTiBNw6l4aWNvIHwgIHwgIHwgIHwgCgoKCgrC qSAyMDEwIENhYmxlIE5ld3MgTmV0d29yay4gVHVybmVyIEJyb2FkY2FzdGluZyBTeXN0ZW0sIElu Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCgpUZXJtcyBvZiBzZXJ2aWNlIHwgUHJpdmFjeSBndWlk ZWxpbmVzIHwgQWR2ZXJ0aXNpbmcgcHJhY3RpY2VzIHwgQWR2ZXJ0aXNlIHdpdGggdXMgfCBMaWNl bnNlIG91ciBjb250ZW50IHwgQWJvdXQgdXMgfCBDb250YWN0IHVzIHwgV29yayBmb3IgdXMgfCBI ZWxwCkNOTiBUViB8IEhMTiB8IFRyYW5zY3JpcHRzCgoKCgoKPHNjcmlwdD48L3NjcmlwdD4KPHNj cmlwdD4KCXZhciBjbm5fZWR0bnN3dGNodmVyID0gImVkaXRpb24iOwo8L3NjcmlwdD4KPHNjcmlw dD48L3NjcmlwdD4KPHNjcmlwdD4KCW1zUXVldWVNYW5hZ2VyLmluaXQoJ3JlcXVlc3RGcmFtZScs IG1zX2JsYW5rVVJMKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+PC9zY3JpcHQ+CjxzY3JpcHQ+CmlmKG1z X2lzTG9nZ2VkSW4oKSkgewoJQ05OX3NldENvb2tpZSgnQ05OX21lbWJlcicsIHRydWUsIDg1NDQw MCwgJy8nLCBkb2N1bWVudC5kb21haW4pOwp9Cjwvc2NyaXB0PgoKCQoKPHNjcmlwdD48L3Njcmlw dD4KPHNjcmlwdD4KPCEtLQovKioqKioqKioqKioqKiBETyBOT1QgQUxURVIgQU5ZVEhJTkcgQkVM T1cgVEhJUyBMSU5FICEgKioqKioqKioqKioqKiovCmlmICh0eXBlb2YoY25uT21uaVNlYXJjaFBh Z2UpID09ICJ1bmRlZmluZWQiKXsKdmFyIHNfY29kZT1zLnQoKTtpZihzX2NvZGUpZG9jdW1lbnQu d3JpdGUoc19jb2RlKX0vLy0tPiAKCnRyeXt3aW5kb3cub25sb2FkID0gY25uQ2hlY2tFbGVtZW50 O31jYXRjaChlcnIpe30KPC9zY3JpcHQ+Cgo8c2NyaXB0PjwhLS0KaWYobmF2aWdhdG9yLmFwcFZl cnNpb24uaW5kZXhPZignTVNJRScpPj0wKWRvY3VtZW50LndyaXRlKHVuZXNjYXBlKCclM0MnKSsn XCEtJysnLScpCi8vLS0+PC9zY3JpcHQ+CgoKCgoNCg0KPHNjcmlwdD48L3NjcmlwdD4NCgk= --000e0cd32f20d7eb280491e609eb-- From btwotch@googlemail.com Tue Oct 5 23:01:31 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 66AC77501CA for ; Tue, 5 Oct 2010 23:01:31 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: YES X-Spam-Score: 2.454 X-Spam-Level: ** X-Spam-Status: Yes, score=2.454 tagged_above=-999 required=2 tests=[BAYES_50=0.8, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SARE_FRAUD_X3=1.667, SPF_PASS=-0.001, TW_QV=0.077, T_TO_NO_BRKTS_FREEMAIL=0.01] autolearn=no Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5Hs6-Regr3si for ; Tue, 5 Oct 2010 23:01:18 +0000 (UTC) Received: from mail-pw0-f54.google.com (mail-pw0-f54.google.com [209.85.160.54]) by menubar.gnome.org (Postfix) with ESMTP id F093775016D for ; Tue, 5 Oct 2010 23:01:09 +0000 (UTC) Received: by pwi8 with SMTP id 8so2336319pwi.27 for ; Tue, 05 Oct 2010 16:01:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type; bh=UsvJBSwpTOB3p7kPdME9f48vxDsFIf1LCl6fXst+iNo=; b=nyXL1MeVQNvbub7f0JFDmm9C1ke9RbRQX8D0tQfSbCP6MPWzClKlkv1dLAZOsLBRxm yYaGE8k4vdoOcGzZsJYFHeRW106LfFQXiBPn6MUvtq3FJcLJpuT5gRhDShN5K/8r/kxV 2dDPA5mxqX1/6AwCJ5HgPa2m9jleFIHYSAnmQ= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=Wl5ml18Jagmf9wNu8O6xLOxia3Evznqh9gC6OQOWFQRemF5N0oRnZrH1G7j7HFe1wo 6e77CnivJCuuj1Y0wOZYUkrFzFjmr/1nABv/hKkA0wx1mYBRyoSLhVrKsoFIjQfRYoTl P4Efx3/UKLSRtURj5azfxpzvq3NxQKn4+7+u0= MIME-Version: 1.0 Received: by 10.142.11.21 with SMTP id 21mr373603wfk.395.1286319668185; Tue, 05 Oct 2010 16:01:08 -0700 (PDT) Received: by 10.142.58.7 with HTTP; Tue, 5 Oct 2010 16:01:08 -0700 (PDT) Date: Wed, 6 Oct 2010 01:01:08 +0200 Message-ID: From: Steven Falken To: xml@gnome.org Content-Type: multipart/mixed; boundary=000e0cd17cd4e3d28e0491e6a29e X-Mailman-Approved-At: Wed, 06 Oct 2010 06:55:06 +0000 Subject: [xml] html end-tag - strange position X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 05 Oct 2010 23:01:31 -0000 --000e0cd17cd4e3d28e0491e6a29e Content-Type: text/plain; charset=UTF-8 Hi, I'm trying to parse bare.txt (attached, yes it is simply cnn.com). For this purpose I'm using parse.c (also attached). The output is output.txt (Attachment!). If you look at bare.txt, you see a ) is in line 784; the problem is, that this end-Tag is in the middle of the javascript-code, which is actually bad :( I hope, you understood what the problem is, if not, don't hesitate to ask via the list or direct(if you want). Thx for your help --000e0cd17cd4e3d28e0491e6a29e Content-Type: text/plain; charset=US-ASCII; name="bare.txt" Content-Disposition: attachment; filename="bare.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gexdkzbw0 PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFs Ly9FTiIiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQvbG9vc2UuZHRkIj48aHRtbCBsYW5nPSJl biI+PGhlYWQ+PHRpdGxlPkNOTi5jb20gSW50ZXJuYXRpb25hbCAtIEJyZWFraW5nLCBXb3JsZCwg QnVzaW5lc3MsIFNwb3J0cywgRW50ZXJ0YWlubWVudCBhbmQgVmlkZW8gTmV3czwvdGl0bGU+ICAg PG1ldGEgaHR0cC1lcXVpdj0icmVmcmVzaCIgY29udGVudD0iMTgwMCI+CjxtZXRhIG5hbWU9IkRl c2NyaXB0aW9uIiBjb250ZW50PSJDTk4uY29tIEludGVybmF0aW9uYWwgZGVsaXZlcnMgYnJlYWtp bmcgbmV3cyBmcm9tIGFjcm9zcyB0aGUgZ2xvYmUgYW5kIGluZm9ybWF0aW9uIG9uIHRoZSBsYXRl c3QgdG9wIHN0b3JpZXMsIGJ1c2luZXNzLCBzcG9ydHMgYW5kIGVudGVydGFpbm1lbnQgaGVhZGxp bmVzLiAgRm9sbG93IHRoZSBuZXdzIGFzIGl0IGhhcHBlbnMgdGhyb3VnaDogc3BlY2lhbCByZXBv cnRzLCB2aWRlb3MsIGF1ZGlvLCBwaG90byBnYWxsZXJpZXMgcGx1cyBpbnRlcmFjdGl2ZSBtYXBz IGFuZCB0aW1lbGluZXMuIj4KPG1ldGEgbmFtZT0iS2V5d29yZHMiIGNvbnRlbnQ9IkNOTiwgQ05O IG5ld3MsIENOTiBJbnRlcm5hdGlvbmFsLCBDTk4gSW50ZXJuYXRpb25hbCBuZXdzLCBDTk4gRWRp dGlvbiwgRWRpdGlvbiBuZXdzLCBuZXdzLCBuZXdzIG9ubGluZSwgYnJlYWtpbmcgbmV3cywgVS5T LiBuZXdzLCB3b3JsZCBuZXdzLCBnbG9iYWwgbmV3cywgd2VhdGhlciwgYnVzaW5lc3MsIENOTiBN b25leSwgc3BvcnRzLCBwb2xpdGljcywgbGF3LCB0ZWNobm9sb2d5LCBlbnRlcnRhaW5tZW50LCBl ZHVjYXRpb24sIHRyYXZlbCwgaGVhbHRoLCBzcGVjaWFsIHJlcG9ydHMsIGF1dG9zLCBkZXZlbG9w aW5nIHN0b3J5LCBuZXdzIHZpZGVvLCBDTk4gSW50bCwgcG9kY2FzdHMsIHdvcmxkIGJsb2dzIj4K CjxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFy c2V0PWlzby04ODU5LTEiPgo8bGluayByZWw9InNlYXJjaCIgdHlwZT0iYXBwbGljYXRpb24vb3Bl bnNlYXJjaGRlc2NyaXB0aW9uK3htbCIgaHJlZj0iL3Rvb2xzL3NlYXJjaC9jbm5jb20ueG1sIiB0 aXRsZT0iQ05OLmNvbSIgLz4gCjxsaW5rIHJlbD0ic2VhcmNoIiB0eXBlPSJhcHBsaWNhdGlvbi9v cGVuc2VhcmNoZGVzY3JpcHRpb24reG1sIiBocmVmPSIvdG9vbHMvc2VhcmNoL2NubmNvbXZpZGVv LnhtbCIgdGl0bGU9IkNOTi5jb20gVmlkZW8iIC8+Cgo8bGluayByZWw9ImNhbm9uaWNhbCIgaHJl Zj0iaHR0cDovL2VkaXRpb24uY25uLmNvbS8iPiAKPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRl bnQ9IndpZHRoPTEwMjQiIC8+IAoKPGxpbmsgcmVsPSJhbHRlcm5hdGUiIHR5cGU9ImFwcGxpY2F0 aW9uL3Jzcyt4bWwiIHRpdGxlPSJDTk4gLSBUb3AgU3RvcmllcyBbUlNTXSIgaHJlZj0iaHR0cDov L3Jzcy5jbm4uY29tL3Jzcy9lZGl0aW9uLnJzcyI+Cgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5 cGU9InRleHQvY3NzIiBocmVmPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQv Y3NzLzMuMC9jb21tb24uY3NzIj4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2Nz cyIgaHJlZj0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2Nzcy8zLjAvbWFp bi5jc3MiPgo8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSJodHRw Oi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvY3NzLzMuMC9jb25uZWN0L292ZXJsYXku Y3NzPzIwMTAwNDIxIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KKiBodG1sICNoZHItYXV0aCwK KiBodG1sICNwbVVzZXJQYW5lbAp7ZGlzcGxheTpub25lfSAKLmNubl9zaGRjYW10dDEgLmNubl9t dGxwbG5vZGUgeyBoZWlnaHQ6MTI0cHg7IH0KPC9zdHlsZT4KPGxpbmsgcmVsPSJzdHlsZXNoZWV0 IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVt ZW50L2Nzcy8zLjAvcGVyc29uYWxpemF0aW9uLmNzcz8yMDEwMDQyMSI+Cgo8bWV0YSBuYW1lPSJm Yl9hcHBfaWQiIGNvbnRlbnQ9IjgwNDAxMzEyNDg5Ii8+CjxtZXRhIHByb3BlcnR5PSJmYjpwYWdl X2lkIiBjb250ZW50PSIxMjkzNDM2OTcxMDY1MzciLz4gCgoKPGxpbmsgcmVsPSJzdHlsZXNoZWV0 IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVt ZW50L2Nzcy8zLjAvc3BlY2lhbHMvd29ybGRjdXAvd2NkYXRhLmRheS5jc3MiPgoKPHNjcmlwdCBs YW5ndWFnZT0iSmF2YVNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij52YXIgY25uQ3VyclRp bWUgPSBuZXcgRGF0ZSgxMjg2MTE5MTI0NTgwKTsgdmFyIGNubkN1cnJIb3VyID0gMTE7IHZhciBj bm5DdXJyTWluID0gMTg7IHZhciBjbm5DdXJyRGF5PSdTdW4nOzwvc2NyaXB0Pgo8c2NyaXB0IHNy Yz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2pzLzMuMC9vbW5pLnRpbWUu anMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0iaHR0cDov L2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2pzLzMuMC9wcm90b2FjdWxvdXMuMS44LjIu bWluLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2NyaXB0PgoKPHNjcmlwdCBzcmM9Imh0 dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9qcy8zLjAvbWFpbi5qcyIgdHlwZT0i dGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4KCTxzY3JpcHQgc3JjPSJodHRwOi8vaS5jZG4udHVy bmVyLmNvbS9jbm4vLmVsZW1lbnQvanMvMy4wL3N3Zm9iamVjdC0yLjIuanMiIHR5cGU9InRleHQv amF2YXNjcmlwdCI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5j b20vY25uLy5lbGVtZW50L2pzLzMuMC9jc2lNYW5hZ2VyLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3Jp cHQiPjwvc2NyaXB0Pgo8c2NyaXB0IHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5l bGVtZW50L2pzLzMuMC9TdG9yYWdlTWFuYWdlci5qcz8yMDEwMDcyOCIgdHlwZT0idGV4dC9qYXZh c2NyaXB0Ij48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0 cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2pzLzMuMC9jb25uZWN0L2Nvbm5lY3Qt bGl0ZS5qcyI+PC9zY3JpcHQ+Cgo8c2NyaXB0IHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20v Y25uLy5lbGVtZW50L2pzLzMuMC9sb2NhbC5qcz8yMDEwMDgwMiIgdHlwZT0idGV4dC9qYXZhc2Ny aXB0Ij48L3NjcmlwdD4KCgo8c2NyaXB0IHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25u Ly5lbGVtZW50L2pzLzIuMC9jbm5Ta3lwZU9wZW4uanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+ PC9zY3JpcHQ+CgoKCQkJPHNjcmlwdCBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8u ZWxlbWVudC9qcy8zLjAvdmlkZW8vY3ZwX3N1cHBsLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQi Pjwvc2NyaXB0PgoJCQk8c2NyaXB0IHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5l bGVtZW50L2pzLzMuMC92aWRlby9jdnAuanMiIHR5cGU9InRleHQvamF2YXNjcmlwdCI+PC9zY3Jp cHQ+CgkJCTxzY3JpcHQgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS94c2xvL2N2cC9hZHMv ZnJlZXdoZWVsL2pzL2Z3anNsaWJfMS4xLmpzP3ZlcnNpb249MS4xIiB0eXBlPSJ0ZXh0L2phdmFz Y3JpcHQiPjwvc2NyaXB0PgoKCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCXZhciBj bm5DVlBBZFNlY3Rpb24gPSAnZWRpdGlvbi5jbm4uY29tX21haW5faG9tZXBhZ2UnOwo8L3Njcmlw dD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgogICAgIHZhciBjbm5Jc1NlY3Rpb25Q YWdlID0gdHJ1ZTsKPC9zY3JpcHQ+CgoKCjxzdHlsZT4KI2Nubl9tdHQxcmd0YXJlYSAuY25uX2J1 bGxldGJpbiAuY25uV09PTCB7bWFyZ2luLXJpZ2h0OjRweDt9IAoKI2Nubl9tdHQxbGZ0YXJlYSB1 bCB7IGxpc3Qtc3R5bGUtdHlwZTpub25lOyB9IC8qIHRoZSBGaXhlcyBub24gbGluayBidWxsZXRz IGluIFQxIGJsdXJiLiAyMDEwMDIyNyBQQkIgKi8KPC9zdHlsZT4KCjxzY3JpcHQgdHlwZT0idGV4 dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9q cy8yLjAvYWRfaGVhZDAuanMiPjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlw dCIgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vY25uX2Fkc3BhY2VzL2Nubl9hZHNw YWNlcy5qcyI+PC9zY3JpcHQ+CjwvaGVhZD48Ym9keSBpZD0iY25uTWFpblBhZ2UiPiAgIDwhLS0g YmVnaW4gZGVmYXVsdCBpbnRlcm5hdGlvbmFsIGhlYWRlciAtLT4KPCEtLSBUT0RPOiB1bm9idHJ1 c2l2ZSBqcyByZWZhY3RvciAtLT4KPGRpdiBpZD0iY25uX2hkciI+Cgk8ZGl2IGlkPSJjbm5faGRy LXByb21wdCIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgoJCTxkaXYgY2xhc3M9Imhkci13cmFwIiBp ZD0iY25uX2hkci1wcm9tcHRjbnRudCI+CgkJPC9kaXY+Cgk8L2Rpdj4KCTxkaXYgaWQ9ImNubl9o ZHItbWFpbiI+CgkJPGRpdiBjbGFzcz0iaGRyLXdyYXAiPgoJCQk8ZGl2IGlkPSJoZHItYmFubmVy Ij4KCQkJCTxoMT4KCQkJCQk8c3Bhbj5DTk48L3NwYW4+CgkJCQkJPGEgaWQ9Imhkci1iYW5uZXIt dGl0bGUiIGhyZWY9Ii8iIHRpdGxlPSIiPgoJCQkJCQk8aW1nIHNyYz0iaHR0cDovL2kuY2RuLnR1 cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvZ2xvYmFsL2hlYWRlci9pbnRsL2hkci1nbG9i ZS1jZW50cmFsLmdpZiIgd2lkdGg9IjE5MCIgaGVpZ2h0PSI4MiIgYWx0PSJDTk4iIC8+CgkJCQkJ PC9hPgoJCQkJPC9oMT4KCQkJPC9kaXY+CgkJCTxkaXYgaWQ9Imhkci1lZGl0aW9ucyI+CgkJCQk8 dWw+CgkJCQkJPGxpIGNsYXNzPSJuby1wYWQtbGVmdCI+PHNwYW4+RURJVElPTjogJm5ic3A7SU5U RVJOQVRJT05BTDwvc3Bhbj48L2xpPgoJCQkJCTxsaT48YSBpZD0iY25uX3N3aXRjaEVkaXRpb25f dXMiIGhyZWY9Imh0dHA6Ly91cy5jbm4uY29tLyIgdGl0bGU9IkNOTiBVUyI+VS5TLjwvYT48L2xp PgoJCQkJCTxsaT48YSBocmVmPSJodHRwOi8vd3d3LmNubm1leGljby5jb20vIiB0aXRsZT0iQ05O IE0mRWFjdXRlO1hJQ08iPk0mRWFjdXRlO1hJQ088L2E+PC9saT4KCQkJCQk8bGkgY2xhc3M9Im5v LWJvcmRlciI+PGEgaHJlZj0iaHR0cDovL2FyYWJpYy5jbm4uY29tLyIgdGl0bGU9IkNOTiBBUkFC SUMiPkFSQUJJQzwvYT48L2xpPgoJCQkJPC91bD4KCQkJCTxkaXYgaWQ9ImNubl9oZHItZWRpdGlv blMiPjxhIGhyZWY9ImphdmFzY3JpcHQ6Y25uX2luaXRlZGl0aW9uaHRtbCgzKTsiPlNldCBlZGl0 aW9uIHByZWZlcmVuY2U8L2E+PC9kaXY+CgkJCTwvZGl2PgoJCQk8ZGl2IGlkPSJoZHItYXV0aCI+ CgkJCQk8dWw+CgkJCQkJPGxpPjxhIGhyZWY9ImphdmFzY3JpcHQ6dm9pZCgwKSIgb25jbGljaz0i c2hvd092ZXJsYXkoJ3Byb2ZpbGVfc2lnbnVwX292ZXJsYXknKTtyZXR1cm4gZmFsc2U7IiB0aXRs ZT0iIj5TaWduIHVwPC9hPjwvbGk+CgkJCQkJPGxpIGNsYXNzPSJuby1ib3JkZXIgbm8tcGFkLXJp Z2h0Ij48YSBocmVmPSJqYXZhc2NyaXB0OnZvaWQoMCkiIG9uY2xpY2s9InNob3dPdmVybGF5KCdw cm9maWxlX3NpZ25pbl9vdmVybGF5Jyk7cmV0dXJuIGZhbHNlOyIgdGl0bGU9IiI+TG9nIGluPC9h PjwvbGk+CgkJCQk8L3VsPgoJCQk8L2Rpdj4KCQkJPGRpdiBpZD0iaGRyLXNlYXJjaCI+CgkJCQk8 Zm9ybSBtZXRob2Q9ImdldCIgYWN0aW9uPSIvc2VhcmNoLyIgb25zdWJtaXQ9InJldHVybiBjbm5T ZWFyY2godGhpcyk7Ij4KCQkJCQk8ZGl2IGNsYXNzPSJmdHItc2VhcmNoLWRhdGFjbnRyIj4KPGRp diBjbGFzcz0iZnRyLXNlYXJjaC10ZmllbGQiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJxdWVy eSIgc2l6ZT0iMTIiIG1heGxlbmd0aD0iNDAiIHZhbHVlPSIiIGlkPSJoZHItc2VhcmNoLWJveCI+ PC9kaXY+CjxkaXYgY2xhc3M9ImZ0ci1zZWFyY2gtc2ljb24iPjxpbnB1dCB0eXBlPSJpbWFnZSIg c3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC9zZWFyY2gv YnRuX3NlYXJjaF9ocF90ZXh0LmdpZiIgd2lkdGg9IjU1IiBoZWlnaHQ9IjIxIiBhbHQ9IiI+PC9k aXY+CjwvZGl2PgoJCQkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InByaW1hcnlUeXBlIiBp ZD0iY25uSGVhZFNyY2hUeXBlIiB2YWx1ZT0ibWl4ZWQiPgoJCQkJPC9mb3JtPgoKPHNjcmlwdD4K Ci8vRXZlbnQub2JzZXJ2ZSh3aW5kb3csICdsb2FkJywgZnVuY3Rpb24oKSB7CgkJLy8kKCdoZHIt c2VhcmNoLWJveCcpLmZvY3VzKCk7CgkvL30pOwkKCQo8L3NjcmlwdD4KCjxzdHlsZT4KCiNoZHIt ZWRpdGlvbnMgYSB7IHRleHQtZGVjb3JhdGlvbjpub25lOyB9CiNjbm5faGRyLWVkaXRpb25TIHsg dGV4dC1hbGlnbjpsZWZ0O2NsZWFyOmJvdGg7IH0KI2Nubl9oZHItZWRpdGlvblMgYSB7IHRleHQt ZGVjb3JhdGlvbjpub25lO2ZvbnQtc2l6ZToxMHB4O3RvcDo3cHg7bGluZS1oZWlnaHQ6MTJweDtm b250LXdlaWdodDpib2xkOyB9CiNoZHItcHJvbXB0LXRleHQgYiB7IGRpc3BsYXk6aW5saW5lLWJs b2NrO21hcmdpbjowIDAgMCAyMHB4OyB9CiNoZHItZWRpdGlvbnMgbGkgeyBwYWRkaW5nOjAgMTBw eDsgfQoKI2hkci1lZGl0aW9ucyB1bCBsaS5uby1wYWQtbGVmdCBzcGFuIHsgZm9udC1zaXplOjEy cHg7IH0KLmhkci1hcnJvdy1pbnRsLCAuaGRyLWFycm93LXVzLCAuaGRyLWFycm93LXVzMiB7IGxl ZnQ6MTQ4cHg7IH0KLmhkci1hcnJvdy11czIgeyBsZWZ0OjE4MHB4OyB9Cgo8L3N0eWxlPgoKCQkJ PC9kaXY+CgkJPC9kaXY+Cgk8L2Rpdj4KCTxkaXYgaWQ9ImNubl9oZHItbmF2Ij4KCQk8dWwgaWQ9 ImludGwtbWVudSI+CgkJCTxsaSBjbGFzcz0ibm8tYm9yZGVyIj48YSBpZD0ibmF2LWhvbWUiIGNs YXNzPSJuYXYtbWVkaWEgbm8tYm9yZGVyIG5hdi1vbiIgaHJlZj0iLyIgdGl0bGU9IkJyZWFraW5n LCBXb3JsZCwgQnVzaW5lc3MsIFNwb3J0cywgRW50ZXJ0YWlubWVudCBhbmQgVmlkZW8gTmV3cyBm cm9tIENOTi5jb20gSW50ZXJuYXRpb25hbCI+SG9tZTwvYT48L2xpPgoJCQk8bGkgY2xhc3M9Im5v LWJvcmRlciI+PGEgaWQ9Im5hdi12aWRlbyIgY2xhc3M9Im5hdi1tZWRpYSBuby1ib3JkZXIiIGhy ZWY9Ii92aWRlby8iIHRpdGxlPSJCcmVha2luZyBOZXdzIFZpZGVvcyBmcm9tIENOTi5jb20gSW50 ZXJuYXRpb25hbCI+VmlkZW88L2E+PC9saT4KCQkJPGxpPjxhIGlkPSJuYXYtd29ybGQiIGhyZWY9 Ii9XT1JMRC8iIHRpdGxlPSJXb3JsZCBOZXdzIEhlYWRsaW5lcyBhbmQgVmlkZW8gZnJvbSBDTk4u Y29tIEludGVybmF0aW9uYWwiPldvcmxkPC9hPjwvbGk+CgkJCTxsaT48YSBpZD0ibmF2LXVzIiBo cmVmPSIvVVMvIiB0aXRsZT0iVS5TLiBOZXdzIEhlYWRsaW5lcyBhbmQgVmlkZW8gZnJvbSBDTk4u Y29tIEludGVybmF0aW9uYWwiPlUuUy48L2E+PC9saT4KCQkJPGxpPjxhIGlkPSJuYXYtYWZyaWNh IiBocmVmPSIvQUZSSUNBLyIgdGl0bGU9IkFmcmljYSBOZXdzIEhlYWRsaW5lcyBhbmQgVmlkZW8g ZnJvbSBDTk4uY29tIEludGVybmF0aW9uYWwiPkFmcmljYTwvYT48L2xpPgoJCQk8bGk+PGEgaWQ9 Im5hdi1hc2lhIiBocmVmPSIvQVNJQS8iIHRpdGxlPSJBc2lhIE5ld3MgSGVhZGxpbmVzIGFuZCBW aWRlbyBmcm9tIENOTi5jb20gSW50ZXJuYXRpb25hbCI+QXNpYTwvYT48L2xpPgoJCQk8bGk+PGEg aWQ9Im5hdi1ldXJvcGUiIGhyZWY9Ii9FVVJPUEUvIiB0aXRsZT0iRXVyb3BlIE5ld3MgSGVhZGxp bmVzIGFuZCBWaWRlbyBmcm9tIENOTi5jb20gSW50ZXJuYXRpb25hbCI+RXVyb3BlPC9hPjwvbGk+ CgkJCTxsaT48YSBpZD0ibmF2LWxhdGluLWFtZXJpY2EiIGhyZWY9Ii9MQVRJTkFNRVJJQ0EvIiB0 aXRsZT0iTGF0aW4gQW1lcmljYSBOZXdzIEhlYWRsaW5lcyBhbmQgVmlkZW8gZnJvbSBDTk4uY29t IEludGVybmF0aW9uYWwiPkxhdGluIEFtZXJpY2E8L2E+PC9saT4KCQkJPGxpPjxhIGlkPSJuYXYt bWlkZGxlLWVhc3QiIGhyZWY9Ii9NSURETEVFQVNULyIgdGl0bGU9Ik1pZGRsZSBFYXN0IE5ld3Mg SGVhZGxpbmVzIGFuZCBWaWRlbyBmcm9tIENOTi5jb20gSW50ZXJuYXRpb25hbCI+TWlkZGxlIEVh c3Q8L2E+PC9saT4KCQkJPGxpPjxhIGlkPSJuYXYtYnVzaW5lc3MiIGhyZWY9Ii9CVVNJTkVTUy8i IHRpdGxlPSJXb3JsZCBCdXNpbmVzcyBOZXdzIEhlYWRsaW5lcyBhbmQgVmlkZW8gZnJvbSBDTk4u Y29tIEludGVybmF0aW9uYWwiPkJ1c2luZXNzPC9hPjwvbGk+CgkJCTxsaT48YSBpZD0ibmF2LXdv cmxkLXNwb3J0IiBocmVmPSIvU1BPUlQvIiB0aXRsZT0iV29ybGQgU3BvcnQgTmV3cyBIZWFkbGlu ZXMgYW5kIFZpZGVvIGZyb20gQ05OLmNvbSBJbnRlcm5hdGlvbmFsIj5Xb3JsZCBTcG9ydDwvYT48 L2xpPgoJCQk8bGk+PGEgaWQ9Im5hdi1lbnRlcnRhaW5tZW50IiBocmVmPSIvU0hPV0JJWi8iIHRp dGxlPSJFbnRlcnRhaW5tZW50IE5ld3MgSGVhZGxpbmVzIGFuZCBWaWRlbyBmcm9tIENOTi5jb20g SW50ZXJuYXRpb25hbCI+RW50ZXJ0YWlubWVudDwvYT48L2xpPgoJCQk8bGk+PGEgaWQ9Im5hdi10 ZWNoIiBocmVmPSIvVEVDSC8iIHRpdGxlPSJUZWNobm9sb2d5IE5ld3MgSGVhZGxpbmVzIGFuZCBW aWRlbyBmcm9tIENOTi5jb20gSW50ZXJuYXRpb25hbCI+VGVjaDwvYT48L2xpPgoJCQk8bGk+PGEg aWQ9Im5hdi10cmF2ZWwiIGhyZWY9Ii9UUkFWRUwvIiB0aXRsZT0iVHJhdmVsIE5ld3MgSGVhZGxp bmVzIGFuZCBWaWRlbyBmcm9tIENOTi5jb20gSW50ZXJuYXRpb25hbCI+VHJhdmVsPC9hPjwvbGk+ CgkJCTxsaT48YSBpZD0ibmF2LWlyZXBvcnQiIGhyZWY9Imh0dHA6Ly93d3cuaXJlcG9ydC5jb20v IiB0aXRsZT0iQ05OIGlSZXBvcnQgJm5kYXNoOyBTaGFyZSB5b3VyIHN0b3J5LCBkaXNjdXNzIHRo ZSBpc3N1ZXMgd2l0aCBDTk4uY29tIEludGVybmF0aW9uYWwiPmlSZXBvcnQ8L2E+PC9saT4KCQk8 L3VsPgoJPC9kaXY+CjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Ci8vIHN3 aXRjaGluZyBiYW5uZXJzIC0gZm9yIHNlY3Rpb25zIHJlbW92ZSB0aGlzIGFuZCBoYXJkY29kZSBw cm9wZXIgZ2xvYmUgaW1hZ2UKdmFyIGNubkNkblBhdGggPSAnaHR0cDovL2kuY2RuLnR1cm5lci5j b20vY25uLy5lbGVtZW50L2ltZy8zLjAvZ2xvYmFsL2hlYWRlci9pbnRsLyc7CnZhciBjbm5JbnRs QmFubmVycyA9IFsKCSc8aW1nIHNyYz0iJyArIGNubkNkblBhdGggKyAnaGRyLWdsb2JlLXdlc3Qu Z2lmIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjgyIiBhbHQ9IiI+JywKCSc8aW1nIHNyYz0iJyArIGNu bkNkblBhdGggKyAnaGRyLWdsb2JlLWNlbnRyYWwuZ2lmIiB3aWR0aD0iMTkwIiBoZWlnaHQ9Ijgy IiBhbHQ9IiI+JywKCSc8aW1nIHNyYz0iJyArIGNubkNkblBhdGggKyAnaGRyLWdsb2JlLWVhc3Qu Z2lmIiB3aWR0aD0iMTkwIiBoZWlnaHQ9IjgyIiBhbHQ9IiI+JwpdOwp2YXIgY25uUk51bSA9IE1h dGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNubkludGxCYW5uZXJzLmxlbmd0aCk7CmRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCdoZHItYmFubmVyLXRpdGxlJykuaW5uZXJIVE1MID0gY25uSW50bEJh bm5lcnNbY25uUk51bV07Cjwvc2NyaXB0Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ Cgo8L3NjcmlwdD4KPCEtLSBlbmQgaGVhZGVyIC0tPgoKCgo8IS0tIFRyYWNraW5nIHZhbHVlcyAt LT4KPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4K PCEtLQp2YXIgY25uUGFnZU5hbWUgPSAiQ05OIEludGVybmF0aW9uYWwgSG9tZSBQYWdlIjsKdmFy IGNublNlY3Rpb25OYW1lID0gIkNOTiBJbnRlcm5hdGlvbmFsIEhvbWUgUGFnZSI7CnZhciBzZWxl Y3RlZEVkaXRpb24gPSBhbGxDb29raWVzWydTZWxlY3RlZEVkaXRpb24nXTsKLy8tLT48L3Njcmlw dD4KCjxkaXYgYWxpZ249ImNlbnRlciI+PGRpdiBpZD0iY25uX21haW5jbnRuciI+ICAgICAgIDwh LS0gdGhpcyBpcyB3aGVyZSB0aGUgYnJlYWtpbmcgbmV3cyBDU0kgY29kZSB3aWxsIGdvIC0tPgo8 ZGl2IGlkPSJjbm5CYW5uZXJDb250YWluZXIiPjwvZGl2Pgo8c2NyaXB0IHR5cGU9InRleHQvamF2 YXNjcmlwdCI+CkNTSU1hbmFnZXIuZ2V0SW5zdGFuY2UoKS5jYWxsKCcvLmVsZW1lbnQvc3NpL2lu dGwvYnJlYWtpbmdfbmV3cy8zLjAvYmFubmVyLmh0bWwnLCcnLCdjbm5CYW5uZXJDb250YWluZXIn LGNublJlbmRlckludGVybmF0aW9uYWxCYW5uZXIpOwo8L3NjcmlwdD4KPGRpdiBpZD0iY25uU2V0 RWRpdGlvbkNvbnRhaW5lciI+PC9kaXY+CjxkaXYgaWQ9ImNubk1ha2VIUENvbnRhaW5lciI+PC9k aXY+CgogICAgPGRpdiBjbGFzcz0iY25uX2NvbnRlbnRhcmVhIGNubl9zaGRjYW10dDEiPjxkaXYg aWQ9ImNubl90b3B0c3RtcGFyZWEiPjxzcGFuPk9jdG9iZXIgMywgMjAxMCAtLSBVcGRhdGVkIDE0 MzUgR01UICgyMjM1IEhLVCk8L3NwYW4+PC9kaXY+PGRpdiBjbGFzcz0iY25uX3NoZGNhaGVhZGVy Ij48L2Rpdj48ZGl2IGlkPSJjbm5fbWFpbnRvcHQxIj48ZGl2IGlkPSJjbm5fbWFpbnQxbGZ0ZiI+ PGRpdiBpZD0iY25uX21haW50dDFpbWdidWwiPiAgICAgICA8ZGl2IGNsYXNzPSJjbm5fcmVscG9z dG4iPjxkaXYgY2xhc3M9ImNubl9tdHQxaW1nIj48YSBocmVmPSIvMjAxMC9XT1JMRC9hc2lhcGNm LzEwLzAzL2luZGlhLmNvbW1vbndlYWx0aC5nYW1lcy9pbmRleC5odG1sP2hwdD1UMSI+PGltZyBz cmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8yMDEwL1dPUkxEL2FzaWFwY2YvMTAvMDMv aW5kaWEuY29tbW9ud2VhbHRoLmdhbWVzL3QxbWFpbi5jZXJlbW9ueS5kcnVtcy5naS5qcGciIHdp ZHRoPSIyNTAiIGhlaWdodD0iMjUwIiBhbHQ9IkNvbW1vbndlYWx0aCBHYW1lcyBvcGVuaW5nIGNl cmVtb255IGJlZ2lucyIgYm9yZGVyPSIwIiBoc3BhY2U9IjAiIHZzcGFjZT0iMCI+PC9hPjwvZGl2 PjxkaXYgY2xhc3M9ImNubl9tdHQxaW1naCI+PGRpdiBjbGFzcz0iY25uX210dDFpbWdodGl0bGUi PjxoMT48c3Bhbj48YSBocmVmPSIvMjAxMC9XT1JMRC9hc2lhcGNmLzEwLzAzL2luZGlhLmNvbW1v bndlYWx0aC5nYW1lcy9pbmRleC5odG1sP2hwdD1UMSI+Q29tbW9ud2VhbHRoIEdhbWVzIG9wZW5p bmcgY2VyZW1vbnkgYmVnaW5zPC9hPjwvc3Bhbj48L2gxPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYg Y2xhc3M9ImNubl9tdHQxY29udGVudCI+PGRpdiBpZD0iY25uX210dDFsZnRhcmVhIj48cD5UaGUg MjAxMCBDb21tb253ZWFsdGggR2FtZXMgZmluYWxseSBvcGVuIFN1bmRheSBpbiBOZXcgRGVsaGks IGZvbGxvd2luZyBhIGJ1aWxkLXVwIGRvbWluYXRlZCBieSBmZWFycyBJbmRpYSB3b3VsZCBub3Qg YmUgcmVhZHkgdG8gaG9zdCB0aGUgc3BvcnRpbmcgc2hvd2Nhc2UuIDxhIGhyZWY9Ii8yMDEwL1dP UkxEL2FzaWFwY2YvMTAvMDMvaW5kaWEuY29tbW9ud2VhbHRoLmdhbWVzL2luZGV4Lmh0bWw/aHB0 PVQxIj5GVUxMIFNUT1JZPC9hPjwvcD48L2Rpdj48ZGl2IGlkPSJjbm5fbXR0MXJndGFyZWEiPjx1 bCBjbGFzcz0iY25uX2J1bGxldGJpbiI+ICAgIDxsaT4gICAgICAgPGEgaHJlZj0iL3ZpZGVvLyMv dmlkZW8vd29ybGQvMjAxMC8xMC8wMS9zaWRuZXIuaW5kaWEuZ2FtZXMuZXllc29yZS5jbm4iPlJl bW92aW5nICdleWVzb3JlcycgZm9yIEdhbWVzPC9hPiA8YSBocmVmPSIvdmlkZW8vIy92aWRlby93 b3JsZC8yMDEwLzEwLzAxL3NpZG5lci5pbmRpYS5nYW1lcy5leWVzb3JlLmNubiI+PGltZyBzcmM9 Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcvMy4wL2dsb2JhbC9pY29u cy92aWRlb19pY29uLmdpZiIgYWx0PSJWaWRlbyIgYm9yZGVyPSIwIiB3aWR0aD0iMTYiIGhlaWdo dD0iMTAiIGNsYXNzPSJjbm5WaWRlb0ljb24iPjwvYT48L2xpPiAgIDwvdWw+PC9kaXY+PGRpdiBj bGFzcz0iY25uX2NsZWFyIj48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fZGl2bGluZSI+PC9kaXY+PC9k aXY+ICAgPC9kaXY+PGRpdiBjbGFzcz0iY25uX21haW50MWRsaW5lIj48L2Rpdj48ZGl2IGlkPSJj bm5fbWFpbnR0MmJ1bCI+PGRpdiBjbGFzcz0iY25uX210dDFjb250ZW50Ij4gICA8aDQ+VG9wIHN0 b3JpZXM8L2g0Pjx1bCBjbGFzcz0iY25uX2J1bGxldGJpbiI+PGxpPjxhIGhyZWY9Ii8yMDEwL1dP UkxEL2V1cm9wZS8xMC8wMy9ldXJvcGUudGVycm9yLmFkdmlzb3J5L2luZGV4Lmh0bWw/aHB0PVQy Ij5VLlMuIGlzc3VlcyBFdXJvcGUgdHJhdmVsIGFsZXJ0PC9hPiAgICAgICA8L2xpPjxsaT48YSBo cmVmPSIvMjAxMC9XT1JMRC9tZWFzdC8xMC8wMy9pcmFuLm51Y2xlYXIuYXJyZXN0cy9pbmRleC5o dG1sP2hwdD1UMiI+SXJhbiBhZG1pdHMgdG8gYXJyZXN0IG9mICdudWNsZWFyIHNwaWVzJzwvYT4g ICAgICAgPC9saT48bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvYW1lcmljYXMvMTAvMDMvYnJhemls LmVsZWN0aW9uL2luZGV4Lmh0bWw/aHB0PVQyIj5FeC1yZWJlbCBhaGVhZCBhcyBCcmF6aWxpYW5z IGdvIHRvIHBvbGxzPC9hPiAgICAgICA8L2xpPjxsaT48YSBocmVmPSIvMjAxMC9XT1JMRC9hZnJp Y2EvMTAvMDIvbmlnZXJpYS5kZWF0aC50b2xsL2luZGV4Lmh0bWw/aHB0PVQyIj5UaHJlZSBoZWxk IG92ZXIgTmlnZXJpYSB0ZXJyb3IgYXR0YWNrPC9hPiAgICAgICA8L2xpPjxsaT48YSBocmVmPSIv MjAxMC9XT1JMRC9ldXJvcGUvMTAvMDMvYm9zbmlhLmVsZWN0aW9ucy9pbmRleC5odG1sP2hwdD1U MiI+Qm9zbmlhbnMgdm90ZSBmb3IgbmV3IHByZXNpZGVudDwvYT4gICAgICAgPC9saT48bGk+PGEg aHJlZj0iLzIwMTAvV09STEQvbWVhc3QvMTAvMDMvaXNyYWVsLmJvcmRlci5wb2xpY2Uuc2hvb3Rp bmcvaW5kZXguaHRtbD9ocHQ9VDIiPlBhbGVzdGluaWFuIHNob3QgZGVhZCBieSBJc3JhZWxpIHBv bGljZTwvYT4gICAgICAgPC9saT48bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvbWVhc3QvMTAvMDMv aXNyYWVsLmdhemEuY29udmljdGlvbi9pbmRleC5odG1sP2hwdD1UMiI+U29sZGllcnMgY29udmlj dGVkIGZvciBHYXphIGFjdGlvbnM8L2E+ICAgICAgIDwvbGk+PGxpPjxhIGhyZWY9Ii8yMDEwL1dP UkxEL2FzaWFwY2YvMTAvMDMvcGFraXN0YW4ua2lsbGluZ3MvaW5kZXguaHRtbD9ocHQ9VDIiPlRo cmVlICdzcGllcycga2lsbGVkIGluIFBha2lzdGFuPC9hPiAgICAgICA8L2xpPjxsaT48YSBocmVm PSIvMjAxMC9XT1JMRC9hc2lhcGNmLzEwLzAzL2FmZ2hhbmlzdGFuLmJhbm5lZC5maXJtcy9pbmRl eC5odG1sP2hwdD1UMiI+UHJpdmF0ZSBzZWN1cml0eSBmaXJtcyBnaXZlbiBBZmdoYW4gYmFuPC9h PiAgICAgICA8L2xpPjxsaT48YSBocmVmPSIvMjAxMC9XT1JMRC9hZnJpY2EvMTAvMDIvZ3VpbmVh LnJ1bm9mZi9pbmRleC5odG1sP2hwdD1UMiI+R3VpbmVhIHByZXNpZGVudGlhbCBydW5vZmYgZmFj ZXMgZGVsYXlzPC9hPiAgICAgICA8L2xpPjxsaT48YSBocmVmPSJodHRwOi8vbmV3cy5ibG9ncy5j bm4uY29tLzIwMTAvMTAvMDIvYXJtZWQtZ2FuZy1hYmR1Y3RzLWJ1c2xvYWQtb2YtdG91cmlzdHMt aW4tbWV4aWNvLz9ocHQ9VDIiPkd1bm1lbiBhYmR1Y3QgMjIgdG91cmlzdHMgaW4gTWV4aWNvPC9h PiAgICAgICA8L2xpPjxsaT48YSBocmVmPSIvMjAxMC9XT1JMRC9hbWVyaWNhcy8xMC8wMi9wYXJh Z3VheS5wcmVzaWRlbnQuY2FuY2VyL2luZGV4Lmh0bWw/aHB0PVQyIj5QYXJhZ3VheWFuIHByZXNp ZGVudCBob3NwaXRhbGl6ZWQ8L2E+ICAgICAgIDwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cu Z29sZi5jb20vZ29sZi90b3Vyc19uZXdzL2xlYWRlcmJvYXJkL3J5ZGVyY3VwIiB0YXJnZXQ9Im5l dyI+TGF0ZXN0OiBFdXJvcGUgZmlnaHRzIGJhY2sgaW4gUnlkZXIgQ3VwPC9hPiAgICAgICA8L2xp PjxsaT48YSBocmVmPSIvMjAxMC9TUE9SVC9mb290YmFsbC8xMC8wMi9idW5kZXNsaWdhLnNhdHVy ZGF5LnJvdW5kdXAubWFpbnovaW5kZXguaHRtbD9ocHQ9VDIiPk1pbm5vd3MgdGFrZSBHZXJtYW4g Zm9vdGJhbGwgYnkgc3Rvcm08L2E+ICAgICAgIDwvbGk+ICAgPC91bD4gICA8ZGl2IGNsYXNzPSJj bm5fbXR0MW1vcmUiPjxhIGhyZWY9Ii9tb3N0cG9wdWxhci8/aHB0PVQyIiBjbGFzcz0iY25uX210 cHZtc2J0biI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9p bWcvMy4wLzFweC5naWYiIGJvcmRlcj0iMCI+PC9hPjwvZGl2Pgo8L2Rpdj48L2Rpdj48L2Rpdj48 ZGl2IGlkPSJjbm5fbWFpbnRvcGxpdmUiPiAgIDxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRp diBjbGFzcz0iY25uX210dDFpbWciPjxhIGhyZWY9Ii8yMDEwL1NQT1JUL2dvbGYvMTAvMDEvZ29s Zi5yeWRlci5jdXAud2l2ZXMvaW5kZXguaHRtbD9ocHQ9QzEiPjxpbWcgc3JjPSJodHRwOi8vaS5j ZG4udHVybmVyLmNvbS9jbm4vMjAxMC9TUE9SVC9nb2xmLzEwLzAxL2dvbGYucnlkZXIuY3VwLndp dmVzL2MxbWFpbi53aXZlNDkuZ2kuanBnIiB3aWR0aD0iNDE2IiBoZWlnaHQ9IjIzNCIgYWx0PSJC ZWhpbmQgZXZlcnkgZ3JlYXQgZ29sZmVyIGlzLi4uIiBib3JkZXI9IjAiIGhzcGFjZT0iMCIgdnNw YWNlPSIwIj48L2E+PC9kaXY+PGRpdiBjbGFzcz0iY25uX210dDFpbWdoIj48ZGl2IGNsYXNzPSJj bm5fbXR0MWltZ2h0aXRsZSI+PGgxPjxzcGFuPjxhIGhyZWY9Ii8yMDEwL1NQT1JUL2dvbGYvMTAv MDEvZ29sZi5yeWRlci5jdXAud2l2ZXMvaW5kZXguaHRtbD9ocHQ9QzEiPkJlaGluZCBldmVyeSBn cmVhdCBnb2xmZXIgaXMuLi48L2E+PC9zcGFuPjwvaDE+PC9kaXY+PC9kaXY+PC9kaXY+PHA+VGhl IG1lbiBjb21wZXRpbmcgaW4gdGhpcyB3ZWVrZW5kJ3MgUnlkZXIgQ3VwIGJldHdlZW4gRXVyb3Bl IGFuZCBBbWVyaWNhIG1heSBncmFiIHRoZSBhdHRlbnRpb24gb2YgdGhlIHdvcmxkJ3MgbWVkaWEs IGJ1dCB0aGUgcGxheWVycycgd2l2ZXMgaGF2ZSBhbHdheXMgaGFkIGEgcm9sZSB0byBwbGF5IGlu IHRoaXMgY29tcGV0aXRpb24uIDxhIGhyZWY9Ii8yMDEwL1NQT1JUL2dvbGYvMTAvMDEvZ29sZi5y eWRlci5jdXAud2l2ZXMvaW5kZXguaHRtbD9ocHQ9QzEiPkZVTEwgU1RPUlk8L2E+PC9wPjxoMz48 c3Bhbj5ISUdITElHSFRTPC9zcGFuPjwvaDM+PGRpdiBpZD0iY25uX210bHBsYXlsaXN0Ij4gPGRp diBjbGFzcz0iY25uX210bHBsbm9kZSAiPjxkaXYgY2xhc3M9ImNubl9tdGxwbG5pbWciPiAgIDxh IGhyZWY9Ii8yMDEwL1dPUkxEL21lYXN0LzEwLzAzL2lyYW4ubWlkZWFzdC5wZWFjZS50YWxrcy9p bmRleC5odG1sP2hwdD1DMiI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8y MDEwL1dPUkxEL21lYXN0LzEwLzAzL2lyYW4ubWlkZWFzdC5wZWFjZS50YWxrcy90enZpZHMuaXJh bi5haG1hZGluZWphZC5naS5qcGciIHdpZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iSXJhbiBz ZWVrcyBtb3JlIE1pZGVhc3QgaW5mbHVlbmNlIiBib3JkZXI9IjAiPjwvYT48L2Rpdj48YSBocmVm PSIvMjAxMC9XT1JMRC9tZWFzdC8xMC8wMy9pcmFuLm1pZGVhc3QucGVhY2UudGFsa3MvaW5kZXgu aHRtbD9ocHQ9QzIiPklyYW4gc2Vla3MgbW9yZSBNaWRlYXN0IGluZmx1ZW5jZTwvYT4gICAgICAg PC9kaXY+IDxkaXYgY2xhc3M9ImNubl9tdGxwbG5vZGUgIj48ZGl2IGNsYXNzPSJjbm5fbXRscGxu aW1nIj4gICA8YSBocmVmPSJodHRwOi8vcmVsaWdpb24uYmxvZ3MuY25uLmNvbS8yMDEwLzEwLzAy L2JyaXRhaW4tcmVjb2duaXplcy1kcnVpZHJ5LWFzLXJlbGlnaW9uLWZvci1maXJzdC10aW1lLWdp dmVzLWl0LWNoYXJpdGFibGUtc3RhdHVzLz9ocHQ9QzIiPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4u dHVybmVyLmNvbS9jbm4vMjAxMC9pbWFnZXMvMTAvMDMvdHp2aWRzLmRydWlkcy5qcGciIHdpZHRo PSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iQnJpdGFpbidzIGRydWlkcyBzdW1tb24gbG9zdCBzdGF0 dXMiIGJvcmRlcj0iMCI+PC9hPjwvZGl2PjxhIGhyZWY9Imh0dHA6Ly9yZWxpZ2lvbi5ibG9ncy5j bm4uY29tLzIwMTAvMTAvMDIvYnJpdGFpbi1yZWNvZ25pemVzLWRydWlkcnktYXMtcmVsaWdpb24t Zm9yLWZpcnN0LXRpbWUtZ2l2ZXMtaXQtY2hhcml0YWJsZS1zdGF0dXMvP2hwdD1DMiI+QnJpdGFp bidzIGRydWlkcyBzdW1tb24gbG9zdCBzdGF0dXM8L2E+ICAgICAgIDwvZGl2PiA8ZGl2IGNsYXNz PSJjbm5fbXRscGxub2RlICI+PGRpdiBjbGFzcz0iY25uX210bHBsbmltZyI+ICAgPGEgaHJlZj0i LzIwMTAvV09STEQvYWZyaWNhLzEwLzAyL2VneXB0LnBoYXJhb2guc3RhdHVlL2luZGV4Lmh0bWw/ aHB0PUMyIj48aW1nIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvV09STEQv YWZyaWNhLzEwLzAyL2VneXB0LnBoYXJhb2guc3RhdHVlL3R6dmlkcy5lZ3lwdHN0YXR1ZS5naS5q cGciIHdpZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iU3RhdHVlIG9mIGdyYW5kZmF0aGVyIG9m IEtpbmcgVHV0IHVuZWFydGhlZCIgYm9yZGVyPSIwIj48L2E+PC9kaXY+PGEgaHJlZj0iLzIwMTAv V09STEQvYWZyaWNhLzEwLzAyL2VneXB0LnBoYXJhb2guc3RhdHVlL2luZGV4Lmh0bWw/aHB0PUMy Ij5TdGF0dWUgb2YgZ3JhbmRmYXRoZXIgb2YgS2luZyBUdXQgdW5lYXJ0aGVkPC9hPiAgICAgICA8 L2Rpdj48ZGl2IGNsYXNzPSJjbm5fY2xlYXIiPjwvZGl2PiA8ZGl2IGNsYXNzPSJjbm5fbXRscGxu b2RlICI+PGRpdiBjbGFzcz0iY25uX210bHBsbmltZyI+ICAgPGEgaHJlZj0iLzIwMTAvV09STEQv YW1lcmljYXMvMTAvMDIvY2FuYWRhLnBvdXRpbmUvaW5kZXguaHRtbD9ocHQ9QzIiPjxpbWcgc3Jj PSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9XT1JMRC9hbWVyaWNhcy8xMC8wMi9j YW5hZGEucG91dGluZS90enZpZHMucG91dGluZS5hZnAuZ2kuanBnIiB3aWR0aD0iMTIwIiBoZWln aHQ9IjY4IiBhbHQ9IkNhbmFkYSdzIDc0MC1jYWxvcmllIG5hdGlvbmFsIGRpc2giIGJvcmRlcj0i MCI+PC9hPjwvZGl2PjxhIGhyZWY9Ii8yMDEwL1dPUkxEL2FtZXJpY2FzLzEwLzAyL2NhbmFkYS5w b3V0aW5lL2luZGV4Lmh0bWw/aHB0PUMyIj5DYW5hZGEncyA3NDAtY2Fsb3JpZSBuYXRpb25hbCBk aXNoPC9hPiAgICAgICA8L2Rpdj4gPGRpdiBjbGFzcz0iY25uX210bHBsbm9kZSAiPjxkaXYgY2xh c3M9ImNubl9tdGxwbG5pbWciPiAgIDxhIGhyZWY9Ii8yMDEwL0hFQUxUSC8xMC8wMS9oZWFsdGgu am9iLm1ha2luZy5kZXByZXNzZWQvaW5kZXguaHRtbD9ocHQ9QzIiPjxpbWcgc3JjPSJodHRwOi8v aS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9IRUFMVEgvMTAvMDEvaGVhbHRoLmpvYi5tYWtpbmcu ZGVwcmVzc2VkL3R6dmlkcy5kZXByZXNzZWQuam9icy5qcGciIHdpZHRoPSIxMjAiIGhlaWdodD0i NjgiIGFsdD0iSXMgeW91ciBqb2IgbW9yZSBkZXByZXNzaW9uLXByb25lPyIgYm9yZGVyPSIwIj48 L2E+PC9kaXY+PGEgaHJlZj0iLzIwMTAvSEVBTFRILzEwLzAxL2hlYWx0aC5qb2IubWFraW5nLmRl cHJlc3NlZC9pbmRleC5odG1sP2hwdD1DMiI+SXMgeW91ciBqb2IgbW9yZSBkZXByZXNzaW9uLXBy b25lPzwvYT4gICAgICAgPC9kaXY+IDxkaXYgY2xhc3M9ImNubl9tdGxwbG5vZGUgIj48ZGl2IGNs YXNzPSJjbm5fbXRscGxuaW1nIj4gICA8YSBocmVmPSJodHRwOi8vY29ubmVjdHRoZXdvcmxkLmJs b2dzLmNubi5jb20vMjAxMC8xMC8wMS9nbG9iYWwtY29ubmVjdGlvbnMtdHVya2V5LWFuZC1jaGlu YT9ocHQ9QzIiPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9pbWFn ZXMvMTAvMDEvdHp2aWRzLmNoaW5hLnR1cmtleS5ibG9nLmpwZyIgd2lkdGg9IjEyMCIgaGVpZ2h0 PSI2OCIgYWx0PSJDYW4geW91IGNvbm5lY3QgQ2hpbmEgYW5kIFR1cmtleT8iIGJvcmRlcj0iMCI+ PC9hPjwvZGl2PjxhIGhyZWY9Imh0dHA6Ly9jb25uZWN0dGhld29ybGQuYmxvZ3MuY25uLmNvbS8y MDEwLzEwLzAxL2dsb2JhbC1jb25uZWN0aW9ucy10dXJrZXktYW5kLWNoaW5hP2hwdD1DMiI+Q2Fu IHlvdSBjb25uZWN0IENoaW5hIGFuZCBUdXJrZXk/PC9hPiAgICAgICA8L2Rpdj48ZGl2IGNsYXNz PSJjbm5fY2xlYXIiPjwvZGl2PjwvZGl2PjxkaXYgY2xhc3M9ImNubl9wYWQxOHRvcCI+PC9kaXY+ PC9kaXY+PGRpdiBjbGFzcz0iY25uX2NsZWFybXQxdDIiPjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImNu bl9tYWludG9wcHJvZmlsZSI+PGRpdiBjbGFzcz0iY25uX3NoZGNvbnRlbnQiPiAgIDwhLS0gc3Rh cnQgZmVlZGJhY2sgbGluayAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tLmNubl9zZWN0 dDRjbnRudHtvdmVyZmxvdzogdmlzaWJsZTt9LmNubk9waW4geyBwb3NpdGlvbjphYnNvbHV0ZTt0 b3A6LTE4cHg7cmlnaHQ6N3B4OyB9LmNubk9waW4gYS5yZWFsbUxpbmsge2ZvbnQtd2VpZ2h0OmJv bGQ7Zm9udC1zaXplOjExcHg7Y29sb3I6IzAwNDI3Njt9LS0+PC9zdHlsZT4KPCEtLVtpZiBsdGUg SUUgN10+PHN0eWxlPi5yZWFsbUxpbmt7cG9zaXRpb246cmVsYXRpdmU7dG9wOi0ycHg7fTwvc3R5 bGU+PCFbZW5kaWZdLS0+CjxkaXYgc3R5bGU9InBvc2l0aW9uOnJlbGF0aXZlO3RvcDowcHg7bGVm dDowcHg7Ij4KCjxkaXYgY2xhc3M9ImNubk9waW4iPgo8IS0tW2lmIElFXT4KPGEgaHJlZiBjbGFz cz0icmVhbG1MaW5rIiBvbmNsaWNrPSJ0aGlzLnN0eWxlLmJlaGF2aW9yPSd1cmwoI2RlZmF1bHQj aG9tZXBhZ2UpJzt0aGlzLnNldEhvbWVQYWdlKHdpbmRvdy5sb2NhdGlvbik7IiBocmVmPSJKYXZh c2NyaXB0OnZvaWQoKTsiPk1ha2UgQ05OIFlvdXIgSG9tZXBhZ2U8L2E+CjxzdHlsZT4jbWFrZUhQ TGlua3tkaXNwbGF5Om5vbmU7fTwvc3R5bGU+CjwhW2VuZGlmXS0tPgo8YSBocmVmPSIjIiBpZD0i bWFrZUhQTGluayIgb25jbGljaz0iY25uTWFrZUhQKCdob21lcGFnZV9zZXRfb3ZlcmxheScpIiBj bGFzcz0icmVhbG1MaW5rIj5NYWtlIENOTiBZb3VyIEhvbWVwYWdlPC9hPjwvZGl2Pgo8c2NyaXB0 IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ClVBc3RyaW5nPW5hdmlnYXRvci51c2VyQWdlbnQ7Cmlm IChVQXN0cmluZy5pbmRleE9mKCdpUGFkJyk+LTEpeyQoJ21ha2VIUExpbmsnKS5oaWRlKCk7fQpm dW5jdGlvbiBjbm5NYWtlSFAoKSB7CmxpbmtUcmFja0NhbGwoJ01ha2UgQ05OIFlvdXIgSFAgQ2xp Y2snKTsKaWYgKFVBc3RyaW5nLmluZGV4T2YoJ01TSUUnKT4tMSl7fQkKZWxzZXsKQ05OX2hhbmRs ZU92ZXJsYXkoJ2hvbWVwYWdlX3NldF9vdmVybGF5Jyl9Cn0KCmZ1bmN0aW9uIGxpbmtUcmFja0Nh bGwobGlua1ZhbHVlKSB7CgkJdmFyIHM9c19naShzX2FjY291bnQpOwoJCXMubGlua1RyYWNrVmFy cz0nbm9uZSc7CgkJcy5saW5rVHJhY2tFdmVudHM9J25vbmUnOwoJCXMudGwodGhpcywnbycsbGlu a1ZhbHVlKQoJfQo8L3NjcmlwdD4KPC9kaXY+IAo8IS0tIC9mZWVkYmFjayBsaW5rIC0tPg0KPGRp dj4NCgk8c3BhbiBpZD0ibWVkaXVtX3JlY3RhbmdsZSIgY2xhc3M9Il9md3BoIj4NCgkJPGZvcm0g aWQ9Il9md19mb3JtX21lZGl1bV9yZWN0YW5nbGUiIHN0eWxlPSJkaXNwbGF5Om5vbmUiPg0KCQkJ PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iX2Z3X2lucHV0X21lZGl1bV9yZWN0YW5nbGUiIGlk PSJfZndfaW5wdXRfbWVkaXVtX3JlY3RhbmdsZSIgdmFsdWU9Inc9MzAwJmg9MjUwJmVudnA9Z19q cyZzZmxnPS1ucnBsOyI+DQoJCTwvZm9ybT4NCgkJPHNwYW4gaWQ9Il9md19jb250YWluZXJfbWVk aXVtX3JlY3RhbmdsZSIgY2xhc3M9Il9md2FjIj4NCgkJPCEtLSBMRUFWRSBUSElTIEFSRUEgRU1Q VFkgLS0+PCEtLSBBRFNQQUNFOiBob21lcGFnZS9tYWluL3JndC4zMDB4MjUwIC0tPg0KDQoNCg0K DQoNCjwhLS0gQ0FMTE9VVHxodHRwOi8vYWRzLmNubi5jb20vaHRtbC5uZy9zaXRlPWNubl9pbnRl cm5hdGlvbmFsJmNubl9pbnRsX3BhZ2V0eXBlPW1haW4mY25uX2ludGxfcG9zaXRpb249MzAweDI1 MF9yZ3QmY25uX2ludGxfcm9sbHVwPWhvbWVwYWdlJnBhZ2UuYWxsb3djb21wZXRlPXllcyZwYXJh bXMuc3R5bGVzPWZzfENBTExPVVQgLS0+DQo8ZGl2IGlkPSJhZC02OTY2NDQiIGFsaWduPSJjZW50 ZXIiIHN0eWxlPSJwYWRkaW5nOiAwOyBtYXJnaW46IDA7IGJvcmRlcjogMDsiPjwvZGl2Pg0KPHNj cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KY25uYWRfY3JlYXRlQWQoIjY5NjY0NCIsImh0 dHA6Ly9hZHMuY25uLmNvbS9odG1sLm5nL3NpdGU9Y25uX2ludGVybmF0aW9uYWwmY25uX2ludGxf cGFnZXR5cGU9bWFpbiZjbm5faW50bF9wb3NpdGlvbj0zMDB4MjUwX3JndCZjbm5faW50bF9yb2xs dXA9aG9tZXBhZ2UmcGFnZS5hbGxvd2NvbXBldGU9eWVzJnBhcmFtcy5zdHlsZXM9ZnMiLCIyNTAi LCIzMDAiKTsNCmNubmFkX3JlZ2lzdGVyU3BhY2UoNjk2NjQ0LDMwMCwyNTApOw0KPC9zY3JpcHQ+ DQoNCg0KDQoNCg0KDQoNCg0KDQoNCgkJPC9zcGFuPg0KCTwvc3Bhbj4NCjwvZGl2Pg0KDQo8ZGl2 IGNsYXNzPSJjbm5fYWR0aXRsZSI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nu bi8uZWxlbWVudC9pbWcvMy4wL2dsb2JhbC9taXNjL2FkdmVydGlzZW1lbnQuZ2lmIiB3aWR0aD0i NTgiIGhlaWdodD0iNSIgYWx0PSIiIGJvcmRlcj0iMCI+PC9kaXY+DQoNCjxkaXYgY2xhc3M9ImNu bl9kaXZsaW5lIj48L2Rpdj4NCg0KPGRpdiBpZD0icG1Db250YWluZXIiPgoKCTwhLS0gIyMjIFVT RVIgUEFORUwgIyMjIC0tPgogCTxkaXYgaWQ9InBtVXNlclBhbmVsIj4NCgkgICAgPGltZyBpZD0i YXZhdGFySW1nIiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcv My4wL3BlcnNvbmFsaXphdGlvbi8zNXgzNV9nZW5lcmljX2F2YXRhci5naWYiIGFsdD0iIiBoZWln aHQ9IjM1IiB3aWR0aD0iMzUiPg0KCQk8ZGl2IGlkPSJwbUxvZ2dlZEluIiBzdHlsZT0iZGlzcGxh eTogbm9uZTsiPg0KCSAgICAgICAgPHNwYW4gaWQ9InBtVXNlck5hbWUiPjwvc3Bhbj4NCgkgICAg ICAgIDxzcGFuIGlkPSJwbVVzZXJPcHRzIj48YSBpZD0icG1Qcm9maWxlIiBocmVmPSIvcHJvZmls ZS8/c2V0VGFiPW15c2V0dGluZ3MiPnNldHRpbmdzPC9hPjwvc3Bhbj4NCgkgICAgICAgIDxkaXYg aWQ9ImNublVzZUZCIiBzdHlsZT0iZGlzcGxheTpub25lIj48YSBocmVmPSJqYXZhc2NyaXB0OkZC LmxvZ2luKGZiU2Vzc2lvbkhhbmRsZXIpOyI+Q29ubmVjdCB5b3VyIENOTiAmYW1wOyBGYWNlYm9v ayBhY2NvdW50czwvYT48L2Rpdj4NCgkgICAgPC9kaXY+DQoJICAgIDxkaXYgaWQ9InBtTG9nZ2Vk T2ZmIj4NCgkgICAgICAgIDxzcGFuPkhpISA8YSBocmVmPSJqYXZhc2NyaXB0OkNOTl9oYW5kbGVP dmVybGF5KCdwcm9maWxlX3NpZ25pbl9vdmVybGF5JykiID5Mb2cgaW48L2E+IG9yIDxhIGhyZWY9 ImphdmFzY3JpcHQ6Q05OX2hhbmRsZU92ZXJsYXkoJ3Byb2ZpbGVfc2lnbnVwX292ZXJsYXknKSI+ c2lnbiB1cDwvYT4gdG8gcGVyc29uYWxpemUhPC9zcGFuPg0KCSAgICA8L2Rpdj4NCgkgICAgPGRp diBpZD0icG1GQkxvZ2dlZEluIiBzdHlsZT0iZGlzcGxheTpub25lIjs+DQoJICAgICAgICA8c3Bh bj5IaSB0aGVyZSE8ZGl2PjxhIGhyZWY9ImphdmFzY3JpcHQ6Q05OX2hhbmRsZU92ZXJsYXkoJ3By b2ZpbGVfc2lnbmluX292ZXJsYXknKSIgPkxvZyBpbjwvYT4gfCA8YSBocmVmPSJqYXZhc2NyaXB0 OkNOTl9oYW5kbGVPdmVybGF5KCdwcm9maWxlX3NpZ251cF9vdmVybGF5JykiPnNpZ24gdXA8L2E+ PC9kaXY+PC9zcGFuPg0KCSAgICA8L2Rpdj4NCg0KCTwvZGl2Pg0KCgkKCTwhLS0gIyMjIEFDQ09S RElPTiBTVEFSVCAjIyMgLS0+Cgk8ZGl2IGlkPSJwbVNsaWRlYm94IiBjbGFzcz0iYWNjb3JkaW9u Ij4KCiAgICAgICAgICAgICAgICA8IS0tIHN0YXJ0b2YgImZhY2Vib29rIGFjdGl2aXR5IiBzbGlk ZSAtLT4KICAgICAgICAgICAgICAgIDwhLS1baWYgbHRlIElFIDZdPgo8c3R5bGU+CiNjbm5fbWFp bnRvcHByb2ZpbGUgI3BtRmFjZWJvb2ssCiNjbm5fbWFpbnRvcHByb2ZpbGUgI3BtRmFjZWJvb2tU b2dnbGUgewoJZGlzcGxheTogbm9uZTsKfQo8L3N0eWxlPgo8IVtlbmRpZl0tLT4KPGRpdiBpZD0i cG1GYWNlYm9va1RvZ2dsZSIgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUiPgoJPHNwYW4gY2xhc3M9 ImFjY1RpdGxlIiBpZD0icG1GYlRpdGxlIj5Qb3B1bGFyIG9uIEZhY2Vib29rPC9zcGFuPgoJPHNw YW4gY2xhc3M9ImFjY0Fycm93Ij4mbmJzcDs8L3NwYW4+CjwvZGl2Pgo8IS0tIHN0YXJ0b2YgImFj dGl2aXR5IiBzbGlkZSAtLT4KPGRpdiBpZD0icG1GYWNlYm9vayIgY2xhc3M9ImFjY29yZGlvbi1j b250ZW50Ij4KCgk8ZGl2IGlkPSJjbm5fRkJhd09MWSIgY2xhc3M9ImNubl9keW5vbmUiPgoJPGRp diBjbGFzcz0iY25uX0ZCYXdvMSI+PGEgaHJlZj0iamF2YXNjcmlwdDpDTk5fRkJwc25semRPQygp OyI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcvMy4w L3BlcnNvbmFsaXphdGlvbi9jbG9zZV9idC5naWYiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgYWx0 PSIiIGJvcmRlcj0iMCI+PC9hPjwvZGl2PgoJPGRpdiBpZD0iY25uX0ZCYXdPTFlNIiBjbGFzcz0i Y25uX0ZCYXdvMiI+PC9kaXY+Cgk8L2Rpdj4KCQoJPGRpdiBpZD0iY25uX0ZCYXdESU0iIGNsYXNz PSJjbm5fZHlub25lIj48L2Rpdj4KCgk8ZGl2IGlkPSJmYWNlYm9va1Vwc2VsbCIgc3R5bGU9ImRp c3BsYXk6bm9uZTtmb250LXNpemU6IDlweDsgY29sb3I6ICM2NjY7IGJhY2tncm91bmQ6ICNmNGY0 ZjQ7Ij4KCQk8cD48YSBocmVmPSJqYXZhc2NyaXB0OiB2b2lkKDApOyIgb25jbGljaz0iRkIubG9n aW4oZmJTZXNzaW9uSGFuZGxlcik7IHJldHVybiBmYWxzZTsiPkxvZyBpbiB3aXRoIEZhY2Vib29r PC9hPiB0byBzZWUgeW91ciBmcmllbmRzJyBhY3Rpdml0eSB8IDxhIGhyZWY9ImphdmFzY3JpcHQ6 Q05OX0ZCcHNubHpkT08oKTsiPldoYXQncyB0aGlzPzwvYT48L3A+Cgk8L2Rpdj4KCTxkaXYgaWQ9 ImZhY2Vib29rQ29ubmVjdGVkIiBzdHlsZT0iZGlzcGxheTpub25lO2ZvbnQtc2l6ZTogOXB4OyBj b2xvcjogIzY2NjsgYmFja2dyb3VuZDogI2Y0ZjRmNDsiPgoJCTxwPjxhIGhyZWY9Ii9wcm9maWxl Lz9zZXRUYWI9ZmJmcmllbmRzIj5WaWV3IG1vcmUgZnJpZW5kcycgYWN0aXZpdHk8L2E+IHwgPGEg aHJlZj0iamF2YXNjcmlwdDpDTk5fRkJwc25semRPTygpOyI+V2hhdCdzIHRoaXM/PC9hPjwvcD4K CTwvZGl2PgoJPGRpdiBpZD0icG1UYXJnZXRDb250YWluZXIiPgoJCTxkaXYgaWQ9InBtRmFjZWJv b2tUYWIiIGNsYXNzPSJwbU9uIj4KCQkJCgkJPC9kaXY+CgkJPGRpdiBpZD0icG1BY3Rpdml0eVRh YiIgY2xhc3M9InBtT2ZmIj4KCQkJPGRpdiBpZD0icG1BY3RMaXN0IiBjbGFzcz0ibWFrZVNjcm9s bCI+CgkJCQk8IS0tICBjbGFzcz0ibWFrZVNjcm9sbCIgICAtLT4KCQkJCTx1bD48bGk+PC9saT48 L3VsPgoJCQk8L2Rpdj4KCQkJPCEtLSBzY3JvbGwgYmFyICAtLT4KCQkJPGRpdiBpZD0icG1BY3RM aXN0VHJhY2siPgoJCQkJPGRpdiBpZD0idHJhY2tUaHVtYiI+CgkJCQkJJm5ic3A7CgkJCQk8L2Rp dj4KCQkJPC9kaXY+CgkJCTwhLS0gZW5kIHNjcm9sbCBiYXIgLS0+CgkJPC9kaXY+Cgk8L2Rpdj4K PC9kaXY+CjwhLS0gZW5kb2YgImFjdGl2aXR5IiBzbGlkZSAtLT4KCiAgICAgICAgICAgICAgICA8 IS0tIGVuZCBvZiAiZmFjZWJvb2siIHNsaWRlIC0tPgoJCQoJCTwhLS0gc3RhcnRvZiAibmV3c3B1 bHNlIiBzbGlkZSAtLT4KCQk8ZGl2IGlkPSJwbU5ld3NQdWxzZVRhYlRvZ2dsZSIgY2xhc3M9ImFj Y29yZGlvbi10b2dnbGUiPg0KCTxzcGFuIGNsYXNzPSJhY2NUaXRsZSI+TW9zdCBQb3B1bGFyPC9z cGFuPg0KCTxzcGFuIGNsYXNzPSJhY2NBcnJvdyI+Jm5ic3A7PC9zcGFuPg0KPC9kaXY+DQo8IS0t IHN0YXJ0b2YgImFjdGl2aXR5IiBzbGlkZSAtLT4NCjxkaXYgaWQ9InBtTmV3c1B1bHNlVGFiIiBj bGFzcz0iYWNjb3JkaW9uLWNvbnRlbnQgaW50bCIgc3R5bGU9ImhlaWdodDogMTk0cHg7IGRpc3Bs YXk6IG5vbmU7Ij4NCgk8dWw+DQoJCTxsaSBjbGFzcz0icG1Oc1N0b3J5Ij4KPGRpdiBjbGFzcz0i cG1Oc0hlYWRsaW5lIj4KPGEgaHJlZj0iLzIwMTAvV09STEQvZXVyb3BlLzEwLzAzL2V1cm9wZS50 ZXJyb3IuYWR2aXNvcnkvaW5kZXguaHRtbCI+PHNwYW4gY2xhc3M9InBtSExCdWxsZXQiPiZidWxs Ozwvc3Bhbj5UcmF2ZWwgYWxlcnQgaXNzdWVkIGZvciBVLlMuIGNpdGl6ZW5zIGluIEV1cm9wZTwv YT4KPC9kaXY+CjxkaXYgY2xhc3M9InBtTnNQb3B1bGFyaXR5Ij4KPGRpdiBjbGFzcz0icG1Oc1Bv cEltYWdlIiBzdHlsZT0id2lkdGg6IDElOyI+PC9kaXY+CjwvZGl2Pgo8L2xpPgo8bGkgY2xhc3M9 InBtTnNTdG9yeSI+CjxkaXYgY2xhc3M9InBtTnNIZWFkbGluZSI+CjxhIGhyZWY9Ii8yMDEwL1dP UkxEL2FzaWFwY2YvMTAvMDIvamFwYW4uYW50aS5jaGluYS5wcm90ZXN0L2luZGV4Lmh0bWwiPjxz cGFuIGNsYXNzPSJwbUhMQnVsbGV0Ij4mYnVsbDs8L3NwYW4+Q2hpbmEgYWNjdXNlZCBvZiBpbnZh ZGluZyBkaXNwdXRlZCBpc2xhbmRzPC9hPgo8L2Rpdj4KPGRpdiBjbGFzcz0icG1Oc1BvcHVsYXJp dHkiPgo8ZGl2IGNsYXNzPSJwbU5zUG9wSW1hZ2UiIHN0eWxlPSJ3aWR0aDogMCU7Ij48L2Rpdj4K PC9kaXY+CjwvbGk+CjxsaSBjbGFzcz0icG1Oc1N0b3J5Ij4KPGRpdiBjbGFzcz0icG1Oc0hlYWRs aW5lIj4KPGEgaHJlZj0iLzIwMTAvUE9MSVRJQ1MvMDkvMjkvaG91c2UuOS4xMS5maXJzdC5yZXNw b25kZXJzL2luZGV4Lmh0bWwiPjxzcGFuIGNsYXNzPSJwbUhMQnVsbGV0Ij4mYnVsbDs8L3NwYW4+ SG91c2UgcGFzc2VzIGJpbGwgdG8gaGVscCA5LzExIGZpcnN0IHJlc3BvbmRlcnM8L2E+CjwvZGl2 Pgo8ZGl2IGNsYXNzPSJwbU5zUG9wdWxhcml0eSI+CjxkaXYgY2xhc3M9InBtTnNQb3BJbWFnZSIg c3R5bGU9IndpZHRoOiAwJTsiPjwvZGl2Pgo8L2Rpdj4KPC9saT4KPGxpIGNsYXNzPSJwbU5zU3Rv cnkiPgo8ZGl2IGNsYXNzPSJwbU5zSGVhZGxpbmUiPgo8YSBocmVmPSIvMjAxMC9VUy8xMC8wMy9l dXJvcGUudGVycm9yLmFkdmlzb3J5L2luZGV4Lmh0bWwiPjxzcGFuIGNsYXNzPSJwbUhMQnVsbGV0 Ij4mYnVsbDs8L3NwYW4+VS5TLiBpc3N1ZXMgYWxlcnQgZm9yIEFtZXJpY2FucyBpbiBFdXJvcGU8 L2E+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwbU5zUG9wdWxhcml0eSI+CjxkaXYgY2xhc3M9InBtTnNQ b3BJbWFnZSIgc3R5bGU9IndpZHRoOiAwJTsiPjwvZGl2Pgo8L2Rpdj4KPC9saT4KPGxpIGNsYXNz PSJwbU5zU3RvcnkiPgo8ZGl2IGNsYXNzPSJwbU5zSGVhZGxpbmUiPgo8YSBocmVmPSIvMjAxMC9X T1JMRC9tZWFzdC8xMC8wMy9pcmFuLm1pZGVhc3QucGVhY2UudGFsa3MvaW5kZXguaHRtbCI+PHNw YW4gY2xhc3M9InBtSExCdWxsZXQiPiZidWxsOzwvc3Bhbj5XaXRob3V0IGEgY2hhaXIgYXQgdGhl IHRhYmxlLCBJcmFuIHNlZWtzIGluZmx1ZW5jZSBub25ldGhlbGVzczwvYT4KPC9kaXY+CjxkaXYg Y2xhc3M9InBtTnNQb3B1bGFyaXR5Ij4KPGRpdiBjbGFzcz0icG1Oc1BvcEltYWdlIiBzdHlsZT0i d2lkdGg6IDAlOyI+PC9kaXY+CjwvZGl2Pgo8L2xpPgo8bGkgY2xhc3M9InBtTnNTdG9yeSI+Cjxk aXYgY2xhc3M9InBtTnNIZWFkbGluZSI+CjxhIGhyZWY9Ii8yMDEwL1dPUkxEL21lYXN0LzEwLzAz L2FmZ2hhbmlzdGFuLmFpci5zdHJpa2UvaW5kZXguaHRtbCI+PHNwYW4gY2xhc3M9InBtSExCdWxs ZXQiPiZidWxsOzwvc3Bhbj5BZmdoYW4gb2ZmaWNpYWxzOiBOQVRPIGFpcnN0cmlrZSBraWxscyBU YWxpYmFuIGluc3VyZ2VudHMsIGNpdmlsaWFuczwvYT4KPC9kaXY+CjxkaXYgY2xhc3M9InBtTnNQ b3B1bGFyaXR5Ij4KPGRpdiBjbGFzcz0icG1Oc1BvcEltYWdlIiBzdHlsZT0id2lkdGg6IDAlOyI+ PC9kaXY+CjwvZGl2Pgo8L2xpPgoNCgk8L3VsPg0KCTxkaXYgY2xhc3M9InBtV3JhcHBlciI+DQoJ CTxhIGhyZWY9Ii9tb3N0cG9wdWxhciIgaWQ9InBtSW50bE1vcmVCdG4iPjwvYT4NCgk8L2Rpdj4N CjwvZGl2Pg0KPCEtLSBlbmRvZiAiYWN0aXZpdHkiIHNsaWRlIC0tPg0KCSAgICAJICAgIAoJCTwh LS0gZW5kIG9mICJuZXdzcHVsc2UiIHNsaWRlIC0tPgoJCQoJCTwhLS0gc3RhcnRvZiAid2VhdGhl ciIgc2xpZGUgLS0+CgkJCQk8ZGl2IGlkPSJwbVdlYXRoZXJJbnRsVG9nZ2xlIiBjbGFzcz0iYWNj b3JkaW9uLXRvZ2dsZSI+DQoJCQk8c3BhbiBjbGFzcz0iYWNjVGl0bGUiPldlYXRoZXI8L3NwYW4+ DQoJCQk8c3BhbiBjbGFzcz0iYWNjQXJyb3ciPiZuYnNwOzwvc3Bhbj4NCgkJPC9kaXY+DQoJCQ0K CQk8ZGl2IGlkPSJwbVdlYXRoZXJJbnRsIiBjbGFzcz0iYWNjb3JkaW9uLWNvbnRlbnQiIHN0eWxl PSJoZWlnaHQ6IDE5NHB4OyBkaXNwbGF5OiBub25lOyI+DQoJDQoJCQk8IS0tIERlZmF1bHQgU2Vh cmNoIEJveCAtLT4NCgkJCTxkaXYgaWQ9ImNubkdldExvY2FsQm94IiBzdHlsZT0iZGlzcGxheTog bm9uZTsiPg0KCQkJCTxmb3JtIG9uc3VibWl0PSJNYWluTG9jYWxPYmouV2VhdGhlci5jaGVja0lu cHV0KCd3ZWF0aGVyJyx0aGlzLmlucHV0RmllbGQudmFsdWUpO3JldHVybiBmYWxzZTsiIGlkPSJw bVdlYXRoZXJMb2NhdGlvbiIgbmFtZT0ibG9jYWxBbGxMb29rdXBGb3JtIj4NCgkJCQkJPGZpZWxk c2V0Pg0KCQkJCQkJPGRpdiBjbGFzcz0icG1XcmFwcGVyIj4NCgkJCQkJCQk8bGFiZWwgZm9yPSJ3 ZWF0aGVyTG9jIj4NCgkJCQkJCQkJRWRpdCBsb2NhdGlvbg0KCQkJCQkJCTwvbGFiZWw+DQoJCQkJ CQkJPGlucHV0IHR5cGU9InRleHQiIGlkPSJ3ZWF0aGVyTG9jIiBjbGFzcz0icG1XZWF0aGVySG9s bG93IiBuYW1lPSJpbnB1dEZpZWxkIiB2YWx1ZT0iRW50ZXIgYSBVLlMuIFppcCBvciBJbnRsIGNp dHkiIG9uZm9jdXM9Ik1haW5Mb2NhbE9iai5XZWF0aGVyLmlucHV0Rm9jdXModGhpcyk7IiBvbmJs dXI9Ik1haW5Mb2NhbE9iai5XZWF0aGVyLmlucHV0Qmx1cih0aGlzKTsiIC8+PGEgaWQ9IndlYXRo ZXJMb2NCdG4iIGhyZWY9ImphdmFzY3JpcHQ6TWFpbkxvY2FsT2JqLldlYXRoZXIuY2hlY2tJbnB1 dCgnd2VhdGhlcicsIGRvY3VtZW50LmxvY2FsQWxsTG9va3VwRm9ybS5pbnB1dEZpZWxkLnZhbHVl KTsiPjxzcGFuPkdvPC9zcGFuPjwvYT4NCgkJCQkJCTwvZGl2Pg0KCQkJCQkJPGRpdiBpZD0icG1M b2NSZXN1bHRzQ29udGFpbmVyIj48L2Rpdj4NCgkJCQkJPC9maWVsZHNldD4NCgkJCQk8L2Zvcm0+ DQoJCQk8L2Rpdj4NCgkJCTwhLS0gRW5kIERlZmF1bHQgU2VhcmNoIEJveCAtLT4NCgkJCQ0KCQkJ PCEtLSAgV2VhdGhlciBDb250ZW50IC0tPg0KCQkJPGRpdiBjbGFzcz0icG1XcmFwcGVyIiBpZD0i cG1XZWF0aGVyVGFiIj48L2Rpdj4NCgkJCTxkaXYgY2xhc3M9InBtV3JhcHBlciIgaWQ9InBtV2Vh dGhlclRvbSI+PC9kaXY+DQoJCQk8IS0tICBFbmQgV2VhdGhlciBDb250ZW50IC0tPg0KCQkJDQoJ CTwvZGl2PgkJDQoJICAgIAoJCTwhLS0gZW5kb2YgIndlYXRoZXIiIHNsaWRlIC0tPgoJCQoJCTwh LS0gc3RhcnRvZiAibWFya2V0IiBzbGlkZSAtLT4KCQkJCTxkaXYgaWQ9InBtTWFya2V0c1RvZ2ds ZSIgY2xhc3M9ImFjY29yZGlvbi10b2dnbGUiPg0KCQkJPHNwYW4gY2xhc3M9ImFjY1RpdGxlIj5N YXJrZXRzPC9zcGFuPg0KCQkJPHNwYW4gY2xhc3M9ImFjY0Fycm93Ij4mbmJzcDs8L3NwYW4+DQoJ CTwvZGl2Pg0KCQk8ZGl2IGlkPSJwbU1hcmtldHMiIGNsYXNzPSJhY2NvcmRpb24tY29udGVudCIg c3R5bGU9ImhlaWdodDogMTk0cHg7IGRpc3BsYXk6IG5vbmU7Ij4NCgkJCTxkaXYgaWQ9InBtSW5k ZWNpZXNJbnRsIj4KCTxkaXYgY2xhc3M9InBtV3JhcHBlciI+CgkgICAgPGRpdiBjbGFzcz0ibWFy a2V0VGltZSI+CgkgICAgICAgIFVwZGF0ZWQgPHNwYW4gaWQ9ImluZGV4VXBkYXRlZCI+MTUxOCBH TVQsIE9jdCAzPC9zcGFuPgogICAgICAgICAgICA8YSBpZD0iYWxsTWFya2V0cyIgaHJlZj0iaHR0 cDovL21vbmV5LmNubi5jb20vZGF0YS93b3JsZF9tYXJrZXRzLyIgdGFyZ2V0PSJuZXciPmFsbCBt YXJrZXRzJiMxODc7PC9hPgoJICAgIDwvZGl2PgogICAgICAgCTxhIGlkPSJhc2lhTWFya2V0QnRu IiBjbGFzcz0idG9nZ2xlIHRvZ09uIj48c3Bhbj5Bc2lhPC9zcGFuPjwvYT4KICAgICAgICA8YSBp ZD0iZXVyTWFya2V0QnRuIiBjbGFzcz0idG9nZ2xlIHRvZ09mZiI+PHNwYW4+RXVyb3BlPC9zcGFu PjwvYT4KICAgICAgICA8YSBpZD0idXNNYXJrZXRCdG4iIGNsYXNzPSJ0b2dnbGUgdG9nT2ZmIj48 c3Bhbj5Vczwvc3Bhbj48L2E+Cgk8L2Rpdj4KCTxkaXYgaWQ9ImFzaWFNYXJrZXQiIGNsYXNzPSJ0 YWIgcG1PbiI+Cgk8dWw+CgkJCTxsaSBjbGFzcz0ibWFya2V0LTEgY2xvc2VkIj4gCgkJCSAgICA8 ZGl2IGNsYXNzPSJtYXJrZXRJbmZvLWxlZnQiPiA8IS0tIGxlZnQgc2lkZSAtLT4KCQkJICAgICAg ICA8c3BhbiBjbGFzcz0ibWFya2V0TmFtZSI+SGFuZyBTZW5nPC9zcGFuPgoJCQkgICAgICAgIDxz cGFuIGNsYXNzPSJtYXJrZXRJbmRleCI+MjIsMzU4LjE3PC9zcGFuPgoJCQkgICAgPC9kaXY+CgkJ CSAgICA8ZGl2IGNsYXNzPSJtYXJrZXROdW1zLXJpZ2h0IGRvd24iPgoJCQkJCTxzcGFuIGNsYXNz PSJjbG9zZWRNYXJrZXQiPkNsb3NlZDwvc3Bhbj4KCQkJICAgICAgICA8ZGl2IGNsYXNzPSJwZXJj ZW50RGlmZiI+CgkJCSAgICAgICAgICAgIDxzcGFuPig8c3BhbiBjbGFzcz0icGx1c01pbnVzIj4t PC9zcGFuPjAuMDkmIzM3Oyk8L3NwYW4+CgkJCSAgICAgICAgPC9kaXY+CgkJCSAgICAgICAgPGRp diBjbGFzcz0ibnVtRGlmZiI+CgkJCSAgICAgICAgICAgIDxzcGFuPjxzcGFuIGNsYXNzPSJwbHVz TWludXMiPi08L3NwYW4+MjAuNTwvc3Bhbj4KCQkJICAgICAgICA8L2Rpdj4KCQkJICAgIDwvZGl2 PgoJCQk8L2xpPgoJCQk8bGkgY2xhc3M9Im1hcmtldC0yIGNsb3NlZCI+IAoJCQkgICAgPGRpdiBj bGFzcz0ibWFya2V0SW5mby1sZWZ0Ij4gPCEtLSBsZWZ0IHNpZGUgLS0+CgkJCSAgICAgICAgPHNw YW4gY2xhc3M9Im1hcmtldE5hbWUiPk5pa2tlaTwvc3Bhbj4KCQkJICAgICAgICA8c3BhbiBjbGFz cz0ibWFya2V0SW5kZXgiPjksNDA0LjIzPC9zcGFuPgoJCQkgICAgPC9kaXY+CgkJCSAgICA8ZGl2 IGNsYXNzPSJtYXJrZXROdW1zLXJpZ2h0IHVwIj4KCQkJCQk8c3BhbiBjbGFzcz0iY2xvc2VkTWFy a2V0Ij5DbG9zZWQ8L3NwYW4+CgkJCSAgICAgICAgPGRpdiBjbGFzcz0icGVyY2VudERpZmYiPgoJ CQkgICAgICAgICAgICA8c3Bhbj4oPHNwYW4gY2xhc3M9InBsdXNNaW51cyI+Kzwvc3Bhbj4wLjM3 JiMzNzspPC9zcGFuPgoJCQkgICAgICAgIDwvZGl2PgoJCQkgICAgICAgIDxkaXYgY2xhc3M9Im51 bURpZmYiPgoJCQkgICAgICAgICAgICA8c3Bhbj48c3BhbiBjbGFzcz0icGx1c01pbnVzIj4rPC9z cGFuPjM0Ljg4PC9zcGFuPgoJCQkgICAgICAgIDwvZGl2PgoJCQkgICAgPC9kaXY+CgkJCTwvbGk+ CgkJCTxsaSBjbGFzcz0ibWFya2V0LTMgY2xvc2VkIj4gCgkJCSAgICA8ZGl2IGNsYXNzPSJtYXJr ZXRJbmZvLWxlZnQiPiA8IS0tIGxlZnQgc2lkZSAtLT4KCQkJICAgICAgICA8c3BhbiBjbGFzcz0i bWFya2V0TmFtZSI+QVNYIDEwMDwvc3Bhbj4KCQkJICAgICAgICA8c3BhbiBjbGFzcz0ibWFya2V0 SW5kZXgiPjQsNjM0LjcwPC9zcGFuPgoJCQkgICAgPC9kaXY+CgkJCSAgICA8ZGl2IGNsYXNzPSJt YXJrZXROdW1zLXJpZ2h0IGRvd24iPgoJCQkJCTxzcGFuIGNsYXNzPSJjbG9zZWRNYXJrZXQiPkNs b3NlZDwvc3Bhbj4KCQkJICAgICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50RGlmZiI+CgkJCSAgICAg ICAgICAgIDxzcGFuPig8c3BhbiBjbGFzcz0icGx1c01pbnVzIj4tPC9zcGFuPjAuMDUmIzM3Oyk8 L3NwYW4+CgkJCSAgICAgICAgPC9kaXY+CgkJCSAgICAgICAgPGRpdiBjbGFzcz0ibnVtRGlmZiI+ CgkJCSAgICAgICAgICAgIDxzcGFuPjxzcGFuIGNsYXNzPSJwbHVzTWludXMiPi08L3NwYW4+Mi4y PC9zcGFuPgoJCQkgICAgICAgIDwvZGl2PgoJCQkgICAgPC9kaXY+CgkJCTwvbGk+Cgk8L3VsPgoJ PC9kaXY+Cgk8ZGl2IGlkPSJldXJNYXJrZXQiIGNsYXNzPSJ0YWIgcG1PZmYiPgoJPHVsPgoJCQk8 bGkgY2xhc3M9Im1hcmtldC0xIGNsb3NlZCI+IAoJCQkgICAgPGRpdiBjbGFzcz0ibWFya2V0SW5m by1sZWZ0Ij4gPCEtLSBsZWZ0IHNpZGUgLS0+CgkJCSAgICAgICAgPHNwYW4gY2xhc3M9Im1hcmtl dE5hbWUiPkZUU0UgMTAwPC9zcGFuPgoJCQkgICAgICAgIDxzcGFuIGNsYXNzPSJtYXJrZXRJbmRl eCI+NSw1OTIuOTA8L3NwYW4+CgkJCSAgICA8L2Rpdj4KCQkJICAgIDxkaXYgY2xhc3M9Im1hcmtl dE51bXMtcmlnaHQgdXAiPgoJCQkJCTxzcGFuIGNsYXNzPSJjbG9zZWRNYXJrZXQiPkNsb3NlZDwv c3Bhbj4KCQkJICAgICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50RGlmZiI+CgkJCSAgICAgICAgICAg IDxzcGFuPig8c3BhbiBjbGFzcz0icGx1c01pbnVzIj4rPC9zcGFuPjAuODAmIzM3Oyk8L3NwYW4+ CgkJCSAgICAgICAgPC9kaXY+CgkJCSAgICAgICAgPGRpdiBjbGFzcz0ibnVtRGlmZiI+CgkJCSAg ICAgICAgICAgIDxzcGFuPjxzcGFuIGNsYXNzPSJwbHVzTWludXMiPis8L3NwYW4+NDQuMjg8L3Nw YW4+CgkJCSAgICAgICAgPC9kaXY+CgkJCSAgICA8L2Rpdj4KCQkJPC9saT4KCQkJPGxpIGNsYXNz PSJtYXJrZXQtMiBjbG9zZWQiPiAKCQkJICAgIDxkaXYgY2xhc3M9Im1hcmtldEluZm8tbGVmdCI+ IDwhLS0gbGVmdCBzaWRlIC0tPgoJCQkgICAgICAgIDxzcGFuIGNsYXNzPSJtYXJrZXROYW1lIj5D QUMgNDA8L3NwYW4+CgkJCSAgICAgICAgPHNwYW4gY2xhc3M9Im1hcmtldEluZGV4Ij4zLDY5Mi4w OTwvc3Bhbj4KCQkJICAgIDwvZGl2PgoJCQkgICAgPGRpdiBjbGFzcz0ibWFya2V0TnVtcy1yaWdo dCBkb3duIj4KCQkJCQk8c3BhbiBjbGFzcz0iY2xvc2VkTWFya2V0Ij5DbG9zZWQ8L3NwYW4+CgkJ CSAgICAgICAgPGRpdiBjbGFzcz0icGVyY2VudERpZmYiPgoJCQkgICAgICAgICAgICA8c3Bhbj4o PHNwYW4gY2xhc3M9InBsdXNNaW51cyI+LTwvc3Bhbj4wLjYyJiMzNzspPC9zcGFuPgoJCQkgICAg ICAgIDwvZGl2PgoJCQkgICAgICAgIDxkaXYgY2xhc3M9Im51bURpZmYiPgoJCQkgICAgICAgICAg ICA8c3Bhbj48c3BhbiBjbGFzcz0icGx1c01pbnVzIj4tPC9zcGFuPjIzLjA5PC9zcGFuPgoJCQkg ICAgICAgIDwvZGl2PgoJCQkgICAgPC9kaXY+CgkJCTwvbGk+CgkJCTxsaSBjbGFzcz0ibWFya2V0 LTMgY2xvc2VkIj4gCgkJCSAgICA8ZGl2IGNsYXNzPSJtYXJrZXRJbmZvLWxlZnQiPiA8IS0tIGxl ZnQgc2lkZSAtLT4KCQkJICAgICAgICA8c3BhbiBjbGFzcz0ibWFya2V0TmFtZSI+REFYPC9zcGFu PgoJCQkgICAgICAgIDxzcGFuIGNsYXNzPSJtYXJrZXRJbmRleCI+NiwyMTEuMzQ8L3NwYW4+CgkJ CSAgICA8L2Rpdj4KCQkJICAgIDxkaXYgY2xhc3M9Im1hcmtldE51bXMtcmlnaHQgZG93biI+CgkJ CQkJPHNwYW4gY2xhc3M9ImNsb3NlZE1hcmtldCI+Q2xvc2VkPC9zcGFuPgoJCQkgICAgICAgIDxk aXYgY2xhc3M9InBlcmNlbnREaWZmIj4KCQkJICAgICAgICAgICAgPHNwYW4+KDxzcGFuIGNsYXNz PSJwbHVzTWludXMiPi08L3NwYW4+MC4yOCYjMzc7KTwvc3Bhbj4KCQkJICAgICAgICA8L2Rpdj4K CQkJICAgICAgICA8ZGl2IGNsYXNzPSJudW1EaWZmIj4KCQkJICAgICAgICAgICAgPHNwYW4+PHNw YW4gY2xhc3M9InBsdXNNaW51cyI+LTwvc3Bhbj4xNy42ODwvc3Bhbj4KCQkJICAgICAgICA8L2Rp dj4KCQkJICAgIDwvZGl2PgoJCQk8L2xpPgoJPC91bD4KCTwvZGl2PgoJPGRpdiBpZD0idXNNYXJr ZXQiIGNsYXNzPSJ0YWIgcG1PZmYiPgoJPHVsPgoJCQk8bGkgY2xhc3M9Im1hcmtldC0xIGNsb3Nl ZCI+IAoJCQkgICAgPGRpdiBjbGFzcz0ibWFya2V0SW5mby1sZWZ0Ij4gPCEtLSBsZWZ0IHNpZGUg LS0+CgkJCSAgICAgICAgPHNwYW4gY2xhc3M9Im1hcmtldE5hbWUiPkRvdzwvc3Bhbj4KCQkJICAg ICAgICA8c3BhbiBjbGFzcz0ibWFya2V0SW5kZXgiPjEwLDgyOS42ODwvc3Bhbj4KCQkJICAgIDwv ZGl2PgoJCQkgICAgPGRpdiBjbGFzcz0ibWFya2V0TnVtcy1yaWdodCB1cCI+CgkJCQkJPHNwYW4g Y2xhc3M9ImNsb3NlZE1hcmtldCI+Q2xvc2VkPC9zcGFuPgoJCQkgICAgICAgIDxkaXYgY2xhc3M9 InBlcmNlbnREaWZmIj4KCQkJICAgICAgICAgICAgPHNwYW4+KDxzcGFuIGNsYXNzPSJwbHVzTWlu dXMiPis8L3NwYW4+MC4zOSYjMzc7KTwvc3Bhbj4KCQkJICAgICAgICA8L2Rpdj4KCQkJICAgICAg ICA8ZGl2IGNsYXNzPSJudW1EaWZmIj4KCQkJICAgICAgICAgICAgPHNwYW4+PHNwYW4gY2xhc3M9 InBsdXNNaW51cyI+Kzwvc3Bhbj40MS42Mzwvc3Bhbj4KCQkJICAgICAgICA8L2Rpdj4KCQkJICAg IDwvZGl2PgoJCQk8L2xpPgoJCQk8bGkgY2xhc3M9Im1hcmtldC0yIGNsb3NlZCI+IAoJCQkgICAg PGRpdiBjbGFzcz0ibWFya2V0SW5mby1sZWZ0Ij4gPCEtLSBsZWZ0IHNpZGUgLS0+CgkJCSAgICAg ICAgPHNwYW4gY2xhc3M9Im1hcmtldE5hbWUiPk5hc2RhcTwvc3Bhbj4KCQkJICAgICAgICA8c3Bh biBjbGFzcz0ibWFya2V0SW5kZXgiPjIsMzcwLjc1PC9zcGFuPgoJCQkgICAgPC9kaXY+CgkJCSAg ICA8ZGl2IGNsYXNzPSJtYXJrZXROdW1zLXJpZ2h0IHVwIj4KCQkJCQk8c3BhbiBjbGFzcz0iY2xv c2VkTWFya2V0Ij5DbG9zZWQ8L3NwYW4+CgkJCSAgICAgICAgPGRpdiBjbGFzcz0icGVyY2VudERp ZmYiPgoJCQkgICAgICAgICAgICA8c3Bhbj4oPHNwYW4gY2xhc3M9InBsdXNNaW51cyI+Kzwvc3Bh bj4wLjA5JiMzNzspPC9zcGFuPgoJCQkgICAgICAgIDwvZGl2PgoJCQkgICAgICAgIDxkaXYgY2xh c3M9Im51bURpZmYiPgoJCQkgICAgICAgICAgICA8c3Bhbj48c3BhbiBjbGFzcz0icGx1c01pbnVz Ij4rPC9zcGFuPjIuMTM8L3NwYW4+CgkJCSAgICAgICAgPC9kaXY+CgkJCSAgICA8L2Rpdj4KCQkJ PC9saT4KCQkJPGxpIGNsYXNzPSJtYXJrZXQtMyBjbG9zZWQiPiAKCQkJICAgIDxkaXYgY2xhc3M9 Im1hcmtldEluZm8tbGVmdCI+IDwhLS0gbGVmdCBzaWRlIC0tPgoJCQkgICAgICAgIDxzcGFuIGNs YXNzPSJtYXJrZXROYW1lIj5TJlAgNTAwPC9zcGFuPgoJCQkgICAgICAgIDxzcGFuIGNsYXNzPSJt YXJrZXRJbmRleCI+MSwxNDYuMjQ8L3NwYW4+CgkJCSAgICA8L2Rpdj4KCQkJICAgIDxkaXYgY2xh c3M9Im1hcmtldE51bXMtcmlnaHQgdXAiPgoJCQkJCTxzcGFuIGNsYXNzPSJjbG9zZWRNYXJrZXQi PkNsb3NlZDwvc3Bhbj4KCQkJICAgICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50RGlmZiI+CgkJCSAg ICAgICAgICAgIDxzcGFuPig8c3BhbiBjbGFzcz0icGx1c01pbnVzIj4rPC9zcGFuPjAuNDQmIzM3 Oyk8L3NwYW4+CgkJCSAgICAgICAgPC9kaXY+CgkJCSAgICAgICAgPGRpdiBjbGFzcz0ibnVtRGlm ZiI+CgkJCSAgICAgICAgICAgIDxzcGFuPjxzcGFuIGNsYXNzPSJwbHVzTWludXMiPis8L3NwYW4+ NS4wNDwvc3Bhbj4KCQkJICAgICAgICA8L2Rpdj4KCQkJICAgIDwvZGl2PgoJCQk8L2xpPgoJPC91 bD4KCTwvZGl2PgoJCQkJCQogICAgICAgICAgICAgICAgPGRpdiBpZD0ibW9uZXlTcG9uc29yIiBz dHlsZT0id2lkdGg6MTc1cHgiPjwvZGl2PgoKPC9kaXY+IA0KICAgICAgICA8L2Rpdj4JICAgIAoJ CTwhLS0gZW5kIG9mICJtYXJrZXQiIHNsaWRlIC0tPgoJCQoJPC9kaXY+Cgk8IS0tICMjIyBBQ0NP UkRJT04gRU5EICMjIyAtLT4KCjwvZGl2PgoKPCEtLSBzaGFyZWQgamF2YXNjcmlwdCAtLT4KPHNj cmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0KCUV2ZW50Lm9ic2VydmUod2luZG93LCAnbG9h ZCcsIGZ1bmN0aW9uKCkgew0KCQlNYWluTG9jYWxPYmouaW5pdCgpOw0KCX0pOwkJDQo8L3Njcmlw dD4NCgoKDQoNCjxkaXYgY2xhc3M9ImNubl9wYWQxOHRvcCI+PC9kaXY+DQoNCjwvZGl2PjwvZGl2 PjwhLS0gL2Nubl9tYWludG9wcHJvZmlsZSAtLT48ZGl2IGNsYXNzPSJjbm5fY2xlYXIiPjwvZGl2 PjxkaXYgY2xhc3M9ImNubl9zaGRjYWZvb3RlciI+PC9kaXY+PC9kaXY+ICAgPGRpdiBjbGFzcz0i Y25uX3BhZDJ0b3AgY25uX3NoZHNwYyI+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2NvbnRlbnRhcmVh IGNubl9maWx0ZXJhcmVhYm94Ij48ZGl2IGNsYXNzPSJjbm5fc2RieCI+PGRpdiBjbGFzcz0iY25u X3NkYngxIj48ZGl2IGNsYXNzPSJjbm5fc2RieDIiPjxkaXYgY2xhc3M9ImNubl9zZGJ4MyI+PGRp diBjbGFzcz0iY25uX3NkYng0Ij48ZGl2IGNsYXNzPSJjbm5fc2RieDUiPjxkaXYgY2xhc3M9ImNu bl9zZGJ4Y250bnQiPjxkaXYgc3R5bGU9IndpZHRoOjk4MHB4OyI+PGRpdiBjbGFzcz0iY25uX2Zh YmhlYWRlciI+PGRpdiBjbGFzcz0iY25uX2ZhYmgxIj5FZGl0b3IncyBDaG9pY2U8L2Rpdj48ZGl2 IGlkPSJjbm5HYWxsZXJ5VGFicyIgY2xhc3M9ImNubl9mYWJoMiI+PGEgY2xhc3M9ImNubl9mYWJ0 YWJidG4iIGhyZWY9Ii8uZWxlbWVudC9zc2kvYXV0by8zLjAvc2VjdC9JTlRMRURJVElPTi9NQUlO L211bHRpbWVkaWEvZ2FsbGVyeV9jb250ZW50XzAuaHRtbCI+PHNwYW4+PGI+SGlnaGxpZ2h0czwv Yj48L3NwYW4+PC9hPjxhIGNsYXNzPSJjbm5fZmFidGFiYnRuIiBocmVmPSIvLmVsZW1lbnQvc3Np L2F1dG8vMy4wL3NlY3QvSU5UTEVESVRJT04vTUFJTi9tdWx0aW1lZGlhL2dhbGxlcnlfY29udGVu dF8xLmh0bWwiPjxzcGFuPjxiPkNvbm5lY3RvciBvZiB0aGUgRGF5PC9iPjwvc3Bhbj48L2E+PC9k aXY+PGRpdiBjbGFzcz0iY25uX2NsZWFyIj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJjbm5fZmFiY29u dGVudCIgY2xhc3M9ImNubl9mYWJjb250ZW50YXJlYSI+PGRpdiBpZD0iY25uX2ZhYmNwcmV2IiBj bGFzcz0iY25uX2ZhYmNwcnZfb2ZmIj48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fZmFiY2Fob2xkZXIi PjxkaXYgY2xhc3M9ImNubl9mYWJjYXdpbmRvdyI+PGRpdiBjbGFzcz0iY25uX2ZhYmNhc2xpZGUi PjxkaXYgaWQ9ImNubl9HYWxsZXJ5Vmlld1BvcnQiPjxkaXYgaWQ9ImNubl9HYWxsZXJ5U2xpZGVy Q29udGFpbmVyIj48ZGl2IGNsYXNzPSJjbm5fZmFiY2FzbGFiIj4gPGRpdiBjbGFzcz0iY25uX2Zh YmNhdHoiPjxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdGlt ZyI+ICAgPGEgaHJlZj0iaHR0cDovL21vbmV5LmNubi5jb20vZ2FsbGVyaWVzLzIwMTAvYXV0b3Mv MTAwOS9nYWxsZXJ5LjIwMTBfcGFyaXNfbW90b3Jfc2hvdy9pbmRleC5odG1sP2hwdD1NaWQiPjxp bWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHgu Z2lmIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY4IiBhbHQ9IkNvb2xlc3QgY2FycyBhdCBQYXJpcyBN b3RvciBTaG93IiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgn aHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvaW1hZ2VzLzEwLzAyL3R6dmlkcy5qYWd1 YXIuYXV0b2Jsb2cuanBnJykgMCAwIG5vLXJlcGVhdDtkaXNwbGF5Om5vbmU7IiBjbGFzcz0iY25u Q29udGVudEltZyI+PC9hPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9mYWJjYXR0eHQiPjxhIGhyZWY9 Imh0dHA6Ly9tb25leS5jbm4uY29tL2dhbGxlcmllcy8yMDEwL2F1dG9zLzEwMDkvZ2FsbGVyeS4y MDEwX3BhcmlzX21vdG9yX3Nob3cvaW5kZXguaHRtbD9ocHQ9TWlkIj48c3Bhbj5Db29sZXN0IGNh cnMgYXQgUGFyaXMgTW90b3IgU2hvdzwvc3Bhbj48L2E+PC9kaXY+PC9kaXY+PC9kaXY+IDxkaXYg Y2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9zdG4iPjxkaXYgY2xhc3M9 ImNubl9mYWJjYXRpbWciPiAgIDxhIGhyZWY9Ii8yMDEwL1RFQ0gvZ2FtaW5nLmdhZGdldHMvMTAv MDEvbWVkYWwub2YuaG9ub3IudGFsaWJhbi9pbmRleC5odG1sP2hwdD1NaWQiPjxpbWcgc3JjPSJo dHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lmIiB3aWR0 aD0iMTIwIiBoZWlnaHQ9IjY4IiBhbHQ9IkdhbWUgcmVtb3ZlcyAnVGFsaWJhbicgb3B0aW9uIiBi b3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0cDovL2kuY2Ru LnR1cm5lci5jb20vY25uLzIwMTAvVEVDSC9nYW1pbmcuZ2FkZ2V0cy8xMC8wMS9tZWRhbC5vZi5o b25vci50YWxpYmFuL3R6dmlkcy5tZWRhbC5ob25vci50YWxpYmFuLmpwZycpIDAgMCBuby1yZXBl YXQ7ZGlzcGxheTpub25lOyIgY2xhc3M9ImNubkNvbnRlbnRJbWciPjwvYT48L2Rpdj48ZGl2IGNs YXNzPSJjbm5fZmFiY2F0dHh0Ij48YSBocmVmPSIvMjAxMC9URUNIL2dhbWluZy5nYWRnZXRzLzEw LzAxL21lZGFsLm9mLmhvbm9yLnRhbGliYW4vaW5kZXguaHRtbD9ocHQ9TWlkIj48c3Bhbj5HYW1l IHJlbW92ZXMgJ1RhbGliYW4nIG9wdGlvbjwvc3Bhbj48L2E+PC9kaXY+PC9kaXY+PC9kaXY+IDxk aXYgY2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9zdG4iPjxkaXYgY2xh c3M9ImNubl9mYWJjYXRpbWciPiAgIDxhIGhyZWY9Imh0dHA6Ly9uZXdzLmJsb2dzLmNubi5jb20v MjAxMC8xMC8wMS9saWZlLW9mLWEtbmF2eS1zdXJnZW9uLXJ1bS13b3Jtcy1hbmQtdG9iYWNjby1j dXJlcy8/aHB0PU1pZCI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxl bWVudC9pbWcvMy4wLzFweC5naWYiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iTmF2eSBz dXJnZW9ucycgb2RkIHRyZWF0bWVudHMiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6dHJh bnNwYXJlbnQgdXJsKCdodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9pbWFnZXMvMTAv MDEvdHp2aWRzLnNjdXJ2eS5qb3VybmFsLnVrLmpwZycpIDAgMCBuby1yZXBlYXQ7ZGlzcGxheTpu b25lOyIgY2xhc3M9ImNubkNvbnRlbnRJbWciPjwvYT48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fZmFi Y2F0dHh0Ij48YSBocmVmPSJodHRwOi8vbmV3cy5ibG9ncy5jbm4uY29tLzIwMTAvMTAvMDEvbGlm ZS1vZi1hLW5hdnktc3VyZ2Vvbi1ydW0td29ybXMtYW5kLXRvYmFjY28tY3VyZXMvP2hwdD1NaWQi PjxzcGFuPk5hdnkgc3VyZ2VvbnMnIG9kZCB0cmVhdG1lbnRzPC9zcGFuPjwvYT48L2Rpdj48L2Rp dj48L2Rpdj4gPGRpdiBjbGFzcz0iY25uX2ZhYmNhdHoiPjxkaXYgY2xhc3M9ImNubl9yZWxwb3N0 biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdGltZyI+ICAgPGEgaHJlZj0iLzIwMTAvSEVBTFRILzEw LzAxL2d1YXRlbWFsYS5zeXBoaWxpcy50dXNrZWdlZS9pbmRleC5odG1sP2hwdD1NaWQiPjxpbWcg c3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lm IiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY4IiBhbHQ9IidEYXJrIGNoYXB0ZXInIG9mIG1lZGljYWwg cmVzZWFyY2giIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6dHJhbnNwYXJlbnQgdXJsKCdo dHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9IRUFMVEgvMTAvMDEvZ3VhdGVtYWxhLnN5 cGhpbGlzLnR1c2tlZ2VlL3R6dmlkcy50dXNrZWdlZS5uYXRpb25hbC5hcmNoaXZlcy5qcGcnKSAw IDAgbm8tcmVwZWF0O2Rpc3BsYXk6bm9uZTsiIGNsYXNzPSJjbm5Db250ZW50SW1nIj48L2E+PC9k aXY+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHR4dCI+PGEgaHJlZj0iLzIwMTAvSEVBTFRILzEwLzAx L2d1YXRlbWFsYS5zeXBoaWxpcy50dXNrZWdlZS9pbmRleC5odG1sP2hwdD1NaWQiPjxzcGFuPidE YXJrIGNoYXB0ZXInIG9mIG1lZGljYWwgcmVzZWFyY2g8L3NwYW4+PC9hPjwvZGl2PjwvZGl2Pjwv ZGl2PjxkaXYgY2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9zdG4iPjxk aXYgY2xhc3M9ImNubl9mYWJjYXRpbWciIGlkPSJnYWxsZXJ5XzBfYWRfMCI+PC9kaXY+PC9kaXY+ PGRpdiBpZD0iZ2FsbGVyeV8wX2FkXzBfYWRnaWYiIGNsYXNzPSJjbm5fZmFiY2F0YWQiPjwvZGl2 PjwvZGl2PiA8ZGl2IGNsYXNzPSJjbm5fZmFiY2F0eiI+PGRpdiBjbGFzcz0iY25uX3JlbHBvc3Ru Ij48ZGl2IGNsYXNzPSJjbm5fZmFiY2F0aW1nIj4gICA8YSBocmVmPSIvMjAxMC9XT1JMRC9hZnJp Y2EvMTAvMDEvZWd5cHQuZmVtYWxlLnRheGkuZHJpdmVyL2luZGV4Lmh0bWw/aHB0PU1pZCI+PGlt ZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcvMy4wLzFweC5n aWYiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iRWd5cHRpYW4gd29tZW4gZHJpdmUgdGF4 aXMiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6dHJhbnNwYXJlbnQgdXJsKCdodHRwOi8v aS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9XT1JMRC9hZnJpY2EvMTAvMDEvZWd5cHQuZmVtYWxl LnRheGkuZHJpdmVyL3R6dmlkLmFsaS5jbm4uanBnJykgMCAwIG5vLXJlcGVhdDtkaXNwbGF5Om5v bmU7IiBjbGFzcz0iY25uQ29udGVudEltZyI+PC9hPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9mYWJj YXR0eHQiPjxhIGhyZWY9Ii8yMDEwL1dPUkxEL2FmcmljYS8xMC8wMS9lZ3lwdC5mZW1hbGUudGF4 aS5kcml2ZXIvaW5kZXguaHRtbD9ocHQ9TWlkIj48c3Bhbj5FZ3lwdGlhbiB3b21lbiBkcml2ZSB0 YXhpczwvc3Bhbj48L2E+PC9kaXY+PC9kaXY+PC9kaXY+IDxkaXYgY2xhc3M9ImNubl9mYWJjYXR6 Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9zdG4iPjxkaXYgY2xhc3M9ImNubl9mYWJjYXRpbWciPiAg IDxhIGhyZWY9Ii8yMDEwL09QSU5JT04vMTAvMDEvemFrYXJpYS5jaGluYS50cmFkZS9pbmRleC5o dG1sP2hwdD1NaWQiPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1l bnQvaW1nLzMuMC8xcHguZ2lmIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY4IiBhbHQ9IlUuUy4tQ2hp bmEgcmlmdCAnY2F0YXN0cm9waGljJyIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDp0cmFu c3BhcmVudCB1cmwoJ2h0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8yMDEwL09QSU5JT04vMTAv MDEvemFrYXJpYS5jaGluYS50cmFkZS90enZpZHMud2VuLm9iYW1hLmdpLmpwZycpIDAgMCBuby1y ZXBlYXQ7ZGlzcGxheTpub25lOyIgY2xhc3M9ImNubkNvbnRlbnRJbWciPjwvYT48L2Rpdj48ZGl2 IGNsYXNzPSJjbm5fZmFiY2F0dHh0Ij48YSBocmVmPSIvMjAxMC9PUElOSU9OLzEwLzAxL3pha2Fy aWEuY2hpbmEudHJhZGUvaW5kZXguaHRtbD9ocHQ9TWlkIj48c3Bhbj5VLlMuLUNoaW5hIHJpZnQg J2NhdGFzdHJvcGhpYyc8L3NwYW4+PC9hPjwvZGl2PjwvZGl2PjwvZGl2PjwvZGl2PiA8ZGl2IGNs YXNzPSJjbm5fZmFiY2FzbGFiIj4gPGRpdiBjbGFzcz0iY25uX2ZhYmNhdHoiPjxkaXYgY2xhc3M9 ImNubl9yZWxwb3N0biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdGltZyI+ICAgPGEgaHJlZj0iLzIw MTAvU0hPV0JJWi9Nb3ZpZXMvMTAvMDEvaW5jZXB0aW9uLm1pY2hhZWwuY2FpbmUuZXcvaW5kZXgu aHRtbD9ocHQ9TWlkIj48aW1nIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVt ZW50L2ltZy8zLjAvMXB4LmdpZiIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2OCIgYWx0PSJNaWNoYWVs IENhaW5lIG9uICdJbmNlcHRpb24nIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5z cGFyZW50IHVybCgnaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvU0hPV0JJWi9Nb3Zp ZXMvMTAvMDEvaW5jZXB0aW9uLm1pY2hhZWwuY2FpbmUuZXcvdHp2aWRzLmluY2VwdGlvbi5qcGcn KSAwIDAgbm8tcmVwZWF0O2Rpc3BsYXk6bm9uZTsiIGNsYXNzPSJjbm5Db250ZW50SW1nIj48L2E+ PC9kaXY+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHR4dCI+PGEgaHJlZj0iLzIwMTAvU0hPV0JJWi9N b3ZpZXMvMTAvMDEvaW5jZXB0aW9uLm1pY2hhZWwuY2FpbmUuZXcvaW5kZXguaHRtbD9ocHQ9TWlk Ij48c3Bhbj5NaWNoYWVsIENhaW5lIG9uICdJbmNlcHRpb24nPC9zcGFuPjwvYT48L2Rpdj48L2Rp dj48L2Rpdj4gIDxkaXYgY2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9z dG4iPjxkaXYgY2xhc3M9ImNubl9mYWJjYXRpbWciPiAgIDxhIGhyZWY9Ii92aWRlby8jL3ZpZGVv L3dvcmxkLzIwMTAvMTAvMDEvY3R3LmludHYubGVzbGllLmNubj9ocHQ9TWlkIj48aW1nIHNyYz0i aHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgd2lk dGg9IjEyMCIgaGVpZ2h0PSI2OCIgYWx0PSJGZW1pbmlzbSAnZ29uZSBib25rZXJzJz8iIGJvcmRl cj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6dHJhbnNwYXJlbnQgdXJsKCdodHRwOi8vaS5jZG4udHVy bmVyLmNvbS9jbm4vdmlkZW8vd29ybGQvMjAxMC8xMC8wMS9jdHcuaW50di5sZXNsaWUuY25uLjEy MHg2OC5qcGcnKSAwIDAgbm8tcmVwZWF0O2Rpc3BsYXk6bm9uZTsiIGNsYXNzPSJjbm5Db250ZW50 SW1nIj48L2E+PC9kaXY+PGRpdiBjbGFzcz0iY25uX3ZpZHBseWIzOHgzOCI+PGEgaHJlZj0iL3Zp ZGVvLyMvdmlkZW8vd29ybGQvMjAxMC8xMC8wMS9jdHcuaW50di5sZXNsaWUuY25uP2hwdD1NaWQi PjxpbWcgYm9yZGVyPSIwIiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVu dC9pbWcvMy4wLzFweC5naWYiLz48L2E+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHR4dCI+ IDxhIGhyZWY9Ii92aWRlby8jL3ZpZGVvL3dvcmxkLzIwMTAvMTAvMDEvY3R3LmludHYubGVzbGll LmNubj9ocHQ9TWlkIj48c3Bhbj5GZW1pbmlzbSAnZ29uZSBib25rZXJzJz88L3NwYW4+PC9hPjwv ZGl2PjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJjbm5fZmFiY2F0eiI+PGRpdiBjbGFzcz0iY25u X3JlbHBvc3RuIj48ZGl2IGNsYXNzPSJjbm5fZmFiY2F0aW1nIj4gICA8YSBocmVmPSIvMjAxMC9V Uy8xMC8wMS9uYXNhLndvcmtlci5sYXlvZmZzL2luZGV4Lmh0bWw/aHB0PU1pZCI+PGltZyBzcmM9 Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcvMy4wLzFweC5naWYiIHdp ZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iU2h1dHRsZSBsYXlvZmZzIHNldCB3b3JrZXJzIGFk cmlmdCIgYm9yZGVyPSIwIiBzdHlsZT0iYmFja2dyb3VuZDp0cmFuc3BhcmVudCB1cmwoJ2h0dHA6 Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8yMDEwL1VTLzEwLzAxL25hc2Eud29ya2VyLmxheW9mZnMv dHp2aWRzLm5hc2Eud29ya2VyLmNubi5qcGcnKSAwIDAgbm8tcmVwZWF0O2Rpc3BsYXk6bm9uZTsi IGNsYXNzPSJjbm5Db250ZW50SW1nIj48L2E+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHR4 dCI+PGEgaHJlZj0iLzIwMTAvVVMvMTAvMDEvbmFzYS53b3JrZXIubGF5b2Zmcy9pbmRleC5odG1s P2hwdD1NaWQiPjxzcGFuPlNodXR0bGUgbGF5b2ZmcyBzZXQgd29ya2VycyBhZHJpZnQ8L3NwYW4+ PC9hPjwvZGl2PjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJjbm5fZmFiY2F0eiI+PGRpdiBjbGFz cz0iY25uX3JlbHBvc3RuIj48ZGl2IGNsYXNzPSJjbm5fZmFiY2F0aW1nIj4gICA8YSBocmVmPSIv MjAxMC9XT1JMRC9hZnJpY2EvMTAvMDEvc2VuZWdhbGVzZS5mb29kLmNoZWYvaW5kZXguaHRtbD9o cHQ9TWlkIj48aW1nIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2lt Zy8zLjAvMXB4LmdpZiIgd2lkdGg9IjEyMCIgaGVpZ2h0PSI2OCIgYWx0PSJUaGUgY2hlZiBzZXJ2 aW5nIEFmcmljYSBvbiBhIHBsYXRlIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5z cGFyZW50IHVybCgnaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvV09STEQvYWZyaWNh LzEwLzAxL3NlbmVnYWxlc2UuZm9vZC5jaGVmL3R6dmlkcy5zZW5lZ2FsLmpwZycpIDAgMCBuby1y ZXBlYXQ7ZGlzcGxheTpub25lOyIgY2xhc3M9ImNubkNvbnRlbnRJbWciPjwvYT48L2Rpdj48ZGl2 IGNsYXNzPSJjbm5fZmFiY2F0dHh0Ij48YSBocmVmPSIvMjAxMC9XT1JMRC9hZnJpY2EvMTAvMDEv c2VuZWdhbGVzZS5mb29kLmNoZWYvaW5kZXguaHRtbD9ocHQ9TWlkIj48c3Bhbj5UaGUgY2hlZiBz ZXJ2aW5nIEFmcmljYSBvbiBhIHBsYXRlPC9zcGFuPjwvYT48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2 IGNsYXNzPSJjbm5fZmFiY2F0eiI+PGRpdiBjbGFzcz0iY25uX3JlbHBvc3RuIj48ZGl2IGNsYXNz PSJjbm5fZmFiY2F0aW1nIiBpZD0iZ2FsbGVyeV8wX2FkXzEiPjwvZGl2PjwvZGl2PjxkaXYgaWQ9 ImdhbGxlcnlfMF9hZF8xX2FkZ2lmIiBjbGFzcz0iY25uX2ZhYmNhdGFkIj48L2Rpdj48L2Rpdj4g PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHoiPjxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRpdiBj bGFzcz0iY25uX2ZhYmNhdGltZyI+ICAgPGEgaHJlZj0iLzIwMTAvV09STEQvYWZyaWNhLzA5LzMw L25pZ2VyaWEuZ29vZGx1Y2svaW5kZXguaHRtbD9ocHQ9TWlkIj48aW1nIHNyYz0iaHR0cDovL2ku Y2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgd2lkdGg9IjEyMCIg aGVpZ2h0PSI2OCIgYWx0PSJOaWdlcmlhbiBsZWFkZXIgb24gcG93ZXIgYW5kIHZpb2xlbmNlIiBi b3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0cDovL2kuY2Ru LnR1cm5lci5jb20vY25uLzIwMTAvV09STEQvYWZyaWNhLzA5LzMwL25pZ2VyaWEuZ29vZGx1Y2sv aW50di5nb29kbHVjay5qb25hdGhhbi5uaWdlcmlhLmNubi4xMjB4NjguanBnJykgMCAwIG5vLXJl cGVhdDtkaXNwbGF5Om5vbmU7IiBjbGFzcz0iY25uQ29udGVudEltZyI+PC9hPjwvZGl2PjxkaXYg Y2xhc3M9ImNubl9mYWJjYXR0eHQiPjxhIGhyZWY9Ii8yMDEwL1dPUkxEL2FmcmljYS8wOS8zMC9u aWdlcmlhLmdvb2RsdWNrL2luZGV4Lmh0bWw/aHB0PU1pZCI+PHNwYW4+TmlnZXJpYW4gbGVhZGVy IG9uIHBvd2VyIGFuZCB2aW9sZW5jZTwvc3Bhbj48L2E+PC9kaXY+PC9kaXY+PC9kaXY+IDxkaXYg Y2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9zdG4iPjxkaXYgY2xhc3M9 ImNubl9mYWJjYXRpbWciPiAgIDxhIGhyZWY9Ii8yMDEwL1dPUkxEL21lYXN0LzEwLzAxL3llbWVu LmNoaWxkLmJyaWRlcy9pbmRleC5odG1sP2hwdD1NaWQiPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4u dHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lmIiB3aWR0aD0iMTIwIiBoZWln aHQ9IjY4IiBhbHQ9IlllbWVuJ3MgZGl2b3JjZWQgY2hpbGQgYnJpZGVzIiBib3JkZXI9IjAiIHN0 eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0cDovL2kuY2RuLnR1cm5lci5jb20v Y25uLzIwMTAvV09STEQvbWVhc3QvMTAvMDEveWVtZW4uY2hpbGQuYnJpZGVzL3R6dmlkcy5naXJs LmNubi5qcGcnKSAwIDAgbm8tcmVwZWF0O2Rpc3BsYXk6bm9uZTsiIGNsYXNzPSJjbm5Db250ZW50 SW1nIj48L2E+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHR4dCI+PGEgaHJlZj0iLzIwMTAv V09STEQvbWVhc3QvMTAvMDEveWVtZW4uY2hpbGQuYnJpZGVzL2luZGV4Lmh0bWw/aHB0PU1pZCI+ PHNwYW4+WWVtZW4ncyBkaXZvcmNlZCBjaGlsZCBicmlkZXM8L3NwYW4+PC9hPjwvZGl2PjwvZGl2 PjwvZGl2PjwvZGl2PiA8ZGl2IGNsYXNzPSJjbm5fZmFiY2FzbGFiIj4gPGRpdiBjbGFzcz0iY25u X2ZhYmNhdHoiPjxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNh dGltZyI+ICAgPGEgaHJlZj0iLzIwMTAvU1BPUlQvZ29sZi8wOS8zMC9nb2xmLnJ5ZGVyLmN1cC5m YWN0cy9pbmRleC5odG1sP2hwdD1NaWQiPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNv bS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lmIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY4IiBh bHQ9IlJ5ZGVyIEN1cDogVGhpbmdzIHlvdSBkb24ndCBrbm93IiBib3JkZXI9IjAiIHN0eWxlPSJi YWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLzIw MTAvU1BPUlQvZ29sZi8wOS8zMC9nb2xmLnJ5ZGVyLmN1cC5mYWN0cy90enZpZHMuYWJlbWl0Y2hl bGwuZ2kuanBnJykgMCAwIG5vLXJlcGVhdDtkaXNwbGF5Om5vbmU7IiBjbGFzcz0iY25uQ29udGVu dEltZyI+PC9hPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9mYWJjYXR0eHQiPjxhIGhyZWY9Ii8yMDEw L1NQT1JUL2dvbGYvMDkvMzAvZ29sZi5yeWRlci5jdXAuZmFjdHMvaW5kZXguaHRtbD9ocHQ9TWlk Ij48c3Bhbj5SeWRlciBDdXA6IFRoaW5ncyB5b3UgZG9uJ3Qga25vdzwvc3Bhbj48L2E+PC9kaXY+ PC9kaXY+PC9kaXY+IDxkaXYgY2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVs cG9zdG4iPjxkaXYgY2xhc3M9ImNubl9mYWJjYXRpbWciPiAgIDxhIGhyZWY9Ii8yMDEwL0JVU0lO RVNTLzA5LzI5L21iYS5yYW5raW5nLnVwc2V0L2luZGV4Lmh0bWw/aHB0PU1pZCI+PGltZyBzcmM9 Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcvMy4wLzFweC5naWYiIHdp ZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iRXVyb3BlYW4gYnVzaW5lc3Mgc2Nob29scyB0cmFp bCBVLlMuIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0 cDovL2kuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvQlVTSU5FU1MvMDkvMjkvbWJhLnJhbmtpbmcu dXBzZXQvdHp2aWRzLmZpbmFuY2lhbC5jbm4uanBnJykgMCAwIG5vLXJlcGVhdDtkaXNwbGF5Om5v bmU7IiBjbGFzcz0iY25uQ29udGVudEltZyI+PC9hPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9mYWJj YXR0eHQiPjxhIGhyZWY9Ii8yMDEwL0JVU0lORVNTLzA5LzI5L21iYS5yYW5raW5nLnVwc2V0L2lu ZGV4Lmh0bWw/aHB0PU1pZCI+PHNwYW4+RXVyb3BlYW4gYnVzaW5lc3Mgc2Nob29scyB0cmFpbCBV LlMuPC9zcGFuPjwvYT48L2Rpdj48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0iY25uX2ZhYmNhdHoi PjxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdGltZyI+ICAg PGEgaHJlZj0iLzIwMTAvQlVTSU5FU1MvMTAvMDEvcGFyaXMuYXV0by5zaG93L2luZGV4Lmh0bWw/ aHB0PU1pZCI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9p bWcvMy4wLzFweC5naWYiIHdpZHRoPSIxMjAiIGhlaWdodD0iNjgiIGFsdD0iQXV0byBpbmR1c3Ry eSBleWVzIGVsZWN0cmljIG1hcmtldCAiIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6dHJh bnNwYXJlbnQgdXJsKCdodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9CVVNJTkVTUy8x MC8wMS9wYXJpcy5hdXRvLnNob3cvdHp2aWRzLnBhcmlzLnNob3cuanBnJykgMCAwIG5vLXJlcGVh dDtkaXNwbGF5Om5vbmU7IiBjbGFzcz0iY25uQ29udGVudEltZyI+PC9hPjwvZGl2PjxkaXYgY2xh c3M9ImNubl9mYWJjYXR0eHQiPjxhIGhyZWY9Ii8yMDEwL0JVU0lORVNTLzEwLzAxL3BhcmlzLmF1 dG8uc2hvdy9pbmRleC5odG1sP2hwdD1NaWQiPjxzcGFuPkF1dG8gaW5kdXN0cnkgZXllcyBlbGVj dHJpYyBtYXJrZXQgPC9zcGFuPjwvYT48L2Rpdj48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0iY25u X2ZhYmNhdHoiPjxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNh dGltZyI+ICAgPGEgaHJlZj0iLzIwMTAvQlVTSU5FU1MvMTAvMDEvY2hpbmEuYmlsbGlvbmFpcmVz LnBoaWxhbnRocm9weS5jdWx0dXJlL2luZGV4Lmh0bWw/aHB0PU1pZCI+PGltZyBzcmM9Imh0dHA6 Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcvMy4wLzFweC5naWYiIHdpZHRoPSIx MjAiIGhlaWdodD0iNjgiIGFsdD0iQ2hpbmEncyBiaWxsaW9uYWlyZXMgc2hhcmUgdGhlIHdlYWx0 aD8iIGJvcmRlcj0iMCIgc3R5bGU9ImJhY2tncm91bmQ6dHJhbnNwYXJlbnQgdXJsKCdodHRwOi8v aS5jZG4udHVybmVyLmNvbS9jbm4vMjAxMC9CVVNJTkVTUy8xMC8wMS9jaGluYS5iaWxsaW9uYWly ZXMucGhpbGFudGhyb3B5LmN1bHR1cmUvdHp2aWRzLmdhdGVzLmJ1ZmZldHQuanBnJykgMCAwIG5v LXJlcGVhdDtkaXNwbGF5Om5vbmU7IiBjbGFzcz0iY25uQ29udGVudEltZyI+PC9hPjwvZGl2Pjxk aXYgY2xhc3M9ImNubl9mYWJjYXR0eHQiPjxhIGhyZWY9Ii8yMDEwL0JVU0lORVNTLzEwLzAxL2No aW5hLmJpbGxpb25haXJlcy5waGlsYW50aHJvcHkuY3VsdHVyZS9pbmRleC5odG1sP2hwdD1NaWQi PjxzcGFuPkNoaW5hJ3MgYmlsbGlvbmFpcmVzIHNoYXJlIHRoZSB3ZWFsdGg/PC9zcGFuPjwvYT48 L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fZmFiY2F0eiI+PGRpdiBjbGFzcz0iY25u X3JlbHBvc3RuIj48ZGl2IGNsYXNzPSJjbm5fZmFiY2F0aW1nIiBpZD0iZ2FsbGVyeV8wX2FkXzIi PjwvZGl2PjwvZGl2PjxkaXYgaWQ9ImdhbGxlcnlfMF9hZF8yX2FkZ2lmIiBjbGFzcz0iY25uX2Zh YmNhdGFkIj48L2Rpdj48L2Rpdj4gPGRpdiBjbGFzcz0iY25uX2ZhYmNhdHoiPjxkaXYgY2xhc3M9 ImNubl9yZWxwb3N0biI+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdGltZyI+ICAgPGEgaHJlZj0iaHR0 cDovL2J1c2luZXNzLmJsb2dzLmNubi5jb20vMjAxMC8wOS8zMC9ub2JlbC1wcml6ZS13aW5uZXIt cmV0aGlua2luZy1idXNpbmVzcy1hZnRlci10aGUtcmVjZXNzaW9uLz9ocHQ9TWlkIj48aW1nIHNy Yz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIg d2lkdGg9IjEyMCIgaGVpZ2h0PSI2OCIgYWx0PSJBICdOb2JlbCcgaWRlYTogU29jaWFsIGJ1c2lu ZXNzIiBib3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0cDov L2kuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvaW1hZ2VzLzEwLzAxL2ludHYubWNlZHdhcmRzLnl1 bnVzLmNubi4xMjB4NjguanBnJykgMCAwIG5vLXJlcGVhdDtkaXNwbGF5Om5vbmU7IiBjbGFzcz0i Y25uQ29udGVudEltZyI+PC9hPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9mYWJjYXR0eHQiPjxhIGhy ZWY9Imh0dHA6Ly9idXNpbmVzcy5ibG9ncy5jbm4uY29tLzIwMTAvMDkvMzAvbm9iZWwtcHJpemUt d2lubmVyLXJldGhpbmtpbmctYnVzaW5lc3MtYWZ0ZXItdGhlLXJlY2Vzc2lvbi8/aHB0PU1pZCI+ PHNwYW4+QSAnTm9iZWwnIGlkZWE6IFNvY2lhbCBidXNpbmVzczwvc3Bhbj48L2E+PC9kaXY+PC9k aXY+PC9kaXY+IDxkaXYgY2xhc3M9ImNubl9mYWJjYXR6Ij48ZGl2IGNsYXNzPSJjbm5fcmVscG9z dG4iPjxkaXYgY2xhc3M9ImNubl9mYWJjYXRpbWciPiAgIDxhIGhyZWY9Ii8yMDEwL1RSQVZFTC8w OS8zMC9hc2hsZXkuanVkZC5hZnJpY2EvaW5kZXguaHRtbD9ocHQ9TWlkIj48aW1nIHNyYz0iaHR0 cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgd2lkdGg9 IjEyMCIgaGVpZ2h0PSI2OCIgYWx0PSInVGhlIHdvcnN0IHBsYWNlIHRvIGJlIGEgd29tYW4nIiBi b3JkZXI9IjAiIHN0eWxlPSJiYWNrZ3JvdW5kOnRyYW5zcGFyZW50IHVybCgnaHR0cDovL2kuY2Ru LnR1cm5lci5jb20vY25uLzIwMTAvVFJBVkVMLzA5LzMwL2FzaGxleS5qdWRkLmFmcmljYS90enZp ZHMuanVkZC5qcGcnKSAwIDAgbm8tcmVwZWF0O2Rpc3BsYXk6bm9uZTsiIGNsYXNzPSJjbm5Db250 ZW50SW1nIj48L2E+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2ZhYmNhdHR4dCI+PGEgaHJlZj0iLzIw MTAvVFJBVkVMLzA5LzMwL2FzaGxleS5qdWRkLmFmcmljYS9pbmRleC5odG1sP2hwdD1NaWQiPjxz cGFuPidUaGUgd29yc3QgcGxhY2UgdG8gYmUgYSB3b21hbic8L3NwYW4+PC9hPjwvZGl2PjwvZGl2 PjwvZGl2PjwvZGl2PiA8L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48ZGl2IGlkPSJjbm5f ZmFiY25leHQiIGNsYXNzPSJjbm5fZmFiY254dCI+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2NsZWFy Ij48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48L2Rpdj48 L2Rpdj48L2Rpdj4gICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgoKCXZhciBDTk5f Z2FsbGVyeV8wX2FkXzAgPSAiL2Nubl9hZHNwYWNlcy8zLjAvaG9tZXBhZ2UvbWFpbi9ib3QxLjEy MHg5MC5hZCI7IC8vcGF0aCB0byBhZCBmaWxlCgl2YXIgQ05OX2dhbGxlcnlfMF9hZF8xID0gIi9j bm5fYWRzcGFjZXMvMy4wL2hvbWVwYWdlL21haW4vYm90Mi4xMjB4OTAuYWQiOyAvL3BhdGggdG8g YWQgZmlsZQoJdmFyIENOTl9nYWxsZXJ5XzBfYWRfMiA9ICIvY25uX2Fkc3BhY2VzLzMuMC9ob21l cGFnZS9tYWluL2JvdDMuMTIweDkwLmFkIjsgLy9wYXRoIHRvIGFkIGZpbGUKCgl2YXIgQ05OX2dh bGxlcnlfMV9hZF8wID0gIi9jbm5fYWRzcGFjZXMvMy4wL2hvbWVwYWdlL21haW4vYm90NC4xMjB4 OTAuYWQiOyAvL3BhdGggdG8gYWQgZmlsZQoJdmFyIENOTl9nYWxsZXJ5XzFfYWRfMSA9ICIvY25u X2Fkc3BhY2VzLzMuMC9ob21lcGFnZS9tYWluL2JvdDUuMTIweDkwLmFkIjsgLy9wYXRoIHRvIGFk IGZpbGUKCXZhciBDTk5fZ2FsbGVyeV8xX2FkXzIgPSAiL2Nubl9hZHNwYWNlcy8zLjAvaG9tZXBh Z2UvbWFpbi9ib3Q2LjEyMHg5MC5hZCI7IC8vcGF0aCB0byBhZCBmaWxlCgoJdmFyIENOTl9nYWxs ZXJ5XzJfYWRfMCA9ICIvY25uX2Fkc3BhY2VzLzMuMC9ob21lcGFnZS9tYWluL2JvdDcuMTIweDkw LmFkIjsgLy9wYXRoIHRvIGFkIGZpbGUKCXZhciBDTk5fZ2FsbGVyeV8yX2FkXzEgPSAiL2Nubl9h ZHNwYWNlcy8zLjAvaG9tZXBhZ2UvbWFpbi9ib3Q4LjEyMHg5MC5hZCI7IC8vcGF0aCB0byBhZCBm aWxlCgl2YXIgQ05OX2dhbGxlcnlfMl9hZF8yID0gIi9jbm5fYWRzcGFjZXMvMy4wL2hvbWVwYWdl L21haW4vYm90OS4xMjB4OTAuYWQiOyAvL3BhdGggdG8gYWQgZmlsZQoKCWlmICggJCgnY25uX0dh bGxlcnlTbGlkZXJDb250YWluZXInKSApIHsKCQljbm5fU2VjdGlvbkdhbGxlcnkgPSBuZXcgY25u X0dhbGxlcnlTbGlkZXIoKTsKCX0KCjwvc2NyaXB0PgogICA8ZGl2IGNsYXNzPSJjbm5fcGFkMnRv cCBjbm5fc2hkc3BjIj48L2Rpdj4KPGRpdiBjbGFzcz0iY25uX2NvbnRlbnRhcmVhIGNubl9zaGRz ZWN0YmluIj4KCTxkaXYgY2xhc3M9ImNubl9zaGRjYWhlYWRlciI+PC9kaXY+Cgo8ZGl2IGNsYXNz PSJjbm5fc2VjdGJpbjEiPgoJPGRpdiBjbGFzcz0iY25uX3NlY3RiaW5jbnRudCI+PGRpdiBjbGFz cz0iY25uX3NlY3RiaW5jbnRudDIiPiA8aDQ+PGEgaHJlZj0iL0JVU0lORVNTLz9ocHQ9U2JpbiI+ QnVzaW5lc3M8L2E+PC9oND48ZGl2IGNsYXNzPSJjbm5fY2xlYXIiPjwvZGl2PjxkaXYgY2xhc3M9 ImNubl9kaXZsaW5lIj48L2Rpdj4gPHVsIGNsYXNzPSJjbm5fYnVsbGV0YmluIj48bGk+PGEgaHJl Zj0iLzIwMTAvT1BJTklPTi8xMC8wMS96YWthcmlhLmNoaW5hLnRyYWRlL2luZGV4Lmh0bWw/aHB0 PVNiaW4iPlUuUy4tQ2hpbmEgcmlmdCB3b3VsZCBiZSAnY2F0YXN0cm9waGljJzwvYT48L2xpPjxs aT48YSBocmVmPSIvMjAxMC9CVVNJTkVTUy8xMC8wMS9wYXJpcy5hdXRvLnNob3cvaW5kZXguaHRt bD9ocHQ9U2JpbiI+QXV0byBTaG93OiBQYXJpcyBpcyBlbGVjdHJpYyA8L2E+PC9saT48bGk+PGEg aHJlZj0iaHR0cDovL21vbmV5LmNubi5jb20vMjAxMC8xMC8wMS9tYXJrZXRzL1NFQ19DRlRDX2Zs YXNoX2NyYXNoL2luZGV4Lmh0bT9jbm49eWVzJmFtcDtocHQ9U2JpbiI+VHJhZGluZyBwcm9ibGVt IGNhdXNlZCAnZmxhc2ggY3Jhc2gnPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9tb25leS5j bm4uY29tLzIwMTAvMTAvMDEvbmV3cy9jb21wYW5pZXMvVW5pdGVkX0NvbnRpbmVudGFsL2luZGV4 Lmh0bT9jbm49eWVzJmFtcDtocHQ9U2JpbiI+Q29udGluZW50YWwsIFVuaXRlZCBtZXJnZTwvYT48 L2xpPjxsaT48YSBocmVmPSIvMjAxMC9VUy8xMC8wMS9uYXNhLndvcmtlci5sYXlvZmZzL2luZGV4 Lmh0bWw/aHB0PVNiaW4iPk5BU0Egd29ya2VycyBmYWNlIGxheW9mZnM8L2E+PC9saT48bGk+PGEg aHJlZj0iaHR0cDovL21vbmV5LmNubi5jb20vMjAxMC8xMC8wMS9uZXdzL2NvbXBhbmllcy9nb2xk X2F0bXMvaW5kZXguaHRtP2Nubj15ZXMmYW1wO2hwdD1TYmluIj5Hb2xkIEFUTXMgY29taW5nIHRv IFUuUy48L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvQlVTSU5FU1MvMTAvMDEvaWtlYS5zd2Vk ZW4ucHJvZml0cy5mdC9pbmRleC5odG1sP2hwdD1TYmluIj5Ja2VhIHJldmVhbHMgcHJvZml0cyBm b3IgZmlyc3QgdGltZTwvYT48L2xpPjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0iY25uX210cG1vcmUi PjxhIGhyZWY9Ii9CVVNJTkVTUy8/aHB0PVNiaW4iIGNsYXNzPSJjbm5fbXRwbW9yZWJ0biI+PGlt ZyBhbHQ9Ik1vcmUiIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2lt Zy8zLjAvMXB4LmdpZiIgYm9yZGVyPSIwIj48L2E+PC9kaXY+PC9kaXY+ICAgCjwvZGl2PjwhLS0g L2Nubl9zZWN0YmluMSAtLT4KCgo8ZGl2IGNsYXNzPSJjbm5fc2VjdGJpbjIiPgoJPGRpdiBjbGFz cz0iY25uX3NlY3RiaW5jbnRudCI+PGRpdiBjbGFzcz0iY25uX3NlY3RiaW5jbnRudDIiPiA8aDQ+ PGEgaHJlZj0iL1NQT1JULz9ocHQ9U2JpbiI+V29ybGQgU3BvcnQ8L2E+PC9oND48ZGl2IGNsYXNz PSJjbm5fY2xlYXIiPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9kaXZsaW5lIj48L2Rpdj4gPHVsIGNs YXNzPSJjbm5fYnVsbGV0YmluIj48bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvYXNpYXBjZi8xMC8w My9pbmRpYS5jb21tb253ZWFsdGguZ2FtZXMvaW5kZXguaHRtbD9ocHQ9U2JpbiI+Q29tbW9ud2Vh bHRoIEdhbWVzIG9wZW5pbmc8L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvU1BPUlQvbW90b3Jz cG9ydC8xMC8wMy93b3JsZC5yYWxseS50aXRsZS5sb2ViLmZyYW5jZS9pbmRleC5odG1sP2hwdD1T YmluIj5Nb3RvcnNwb3J0OiBTZXZlbiBzdHJhaWdodCBmb3IgTG9lYjwvYT48L2xpPjxsaT48YSBo cmVmPSIvMjAxMC9TUE9SVC90ZW5uaXMvMTAvMDMvdGhhaWxhbmQuZ2FyY2lhLmxvcGV6Lm5hZGFs LnRva3lvL2luZGV4Lmh0bWw/aHB0PVNiaW4iPlRlbm5pczogTmFkYWwncyBjb25xdWVyb3Igd2lu cyB0aXRsZTwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9TUE9SVC9nb2xmLzEwLzAyL3J5ZGVy LmN1cC5kYXkudHdvL2luZGV4Lmh0bWw/aHB0PVNiaW4iPkdvbGY6IEV1cm9wZSBpbiBmaWdodGJh Y2s8L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvU1BPUlQvZm9vdGJhbGwvMTAvMDIvc3BhaW4u aXRhbHkuc2F0dXJkYXkucmVzdWx0cy9pbmRleC5odG1sP2hwdD1TYmluIj5Gb290YmFsbDogTWls YW4gZ28gdG9wOyBWYWxlbmNpYSB3aW48L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvU1BPUlQv Zm9vdGJhbGwvMTAvMDIvcHJlbWllci5sZWFndWUuc2F0dXJkYXkucmVzdWx0cy9pbmRleC5odG1s P2hwdD1TYmluIj5Gb290YmFsbDogTWFuIFVuaXRlZCBoZWxkOyBTcHVycyB3aW48L2E+PC9saT48 bGk+PGEgaHJlZj0iLzIwMTAvU1BPUlQvZm9vdGJhbGwvMTAvMDIvYnVuZGVzbGlnYS5zYXR1cmRh eS5yb3VuZHVwLm1haW56L2luZGV4Lmh0bWw/aHB0PVNiaW4iPkZvb3RiYWxsOiBTZXZlbnRoIGhl YXZlbiBmb3IgTWFpbno8L2E+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9tdHBtb3Jl Ij48YSBocmVmPSIvU1BPUlQvP2hwdD1TYmluIiBjbGFzcz0iY25uX210cG1vcmVidG4iPjxpbWcg YWx0PSJNb3JlIiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxlbWVudC9pbWcv My4wLzFweC5naWYiIGJvcmRlcj0iMCI+PC9hPjwvZGl2PjwvZGl2PiAgIAo8L2Rpdj48IS0tIC9j bm5fc2VjdGJpbjIgLS0+CgoKPGRpdiBjbGFzcz0iY25uX3NlY3RiaW4zIj4KCTxkaXYgY2xhc3M9 ImNubl9zZWN0YmluY250bnQiPjxkaXYgY2xhc3M9ImNubl9zZWN0YmluY250bnQyIj4gPGg0PkRh aWx5IFNuYXBzaG90PC9oND48ZGl2IGNsYXNzPSJjbm5fY2xlYXIiPjwvZGl2PjxkaXYgY2xhc3M9 ImNubl9kaXZsaW5lIj48L2Rpdj4gIDxkaXYgY2xhc3M9ImNubl9yZWxwb3N0biI+PGRpdiBjbGFz cz0iY25uX210dDFpbWciPjxkaXY+ICAgPGEgaHJlZj0iLzIwMTAvVFJBVkVMLzA1LzIzL2RhaWx5 LnNuYXBzaG90L2luZGV4Lmh0bWw/aHB0PVNiaW4iPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVy bmVyLmNvbS9jbm4vMjAxMC9UUkFWRUwvMDUvMjMvZGFpbHkuc25hcHNob3QvdHpiaW5zLm1vdXN0 YWNoZS5hZnAuZ2kuanBnIiB3aWR0aD0iMjIwIiBoZWlnaHQ9Ijg0IiBhbHQ9IlRoZSBjYXQncyB3 aGlza2VycyIgYm9yZGVyPSIwIj48L2E+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iY25uX210dDFp bWdoIj48ZGl2IGNsYXNzPSJjbm5fbXR0MWltZ2h0aXRsZSI+PGgyPjxzcGFuPjxhIGhyZWY9Ii8y MDEwL1RSQVZFTC8wNS8yMy9kYWlseS5zbmFwc2hvdC9pbmRleC5odG1sP2hwdD1TYmluIj5UaGUg Y2F0J3Mgd2hpc2tlcnM8L2E+PC9zcGFuPjwvaDI+PC9kaXY+PC9kaXY+PC9kaXY+PGRpdiBjbGFz cz0iY25uX3BhZDExdG9wIj48L2Rpdj4gPHVsIGNsYXNzPSJjbm5fYnVsbGV0YmluIj48bGk+PGEg aHJlZj0iaHR0cDovL3d3dy5pcmVwb3J0LmNvbS8/aHB0PVNiaW4iPlNlbmQgeW91ciBpbWFnZXMg dG8gaVJlcG9ydDwvYT48L2xpPjwvdWw+PC9kaXY+PC9kaXY+ICAgCgo8ZGl2IGNsYXNzPSJjbm5f YWRzcGMxNTV4MzEiPgo8IS0tIEFEU1BBQ0U6IGhvbWVwYWdlL3Nwb24uODh4MzFfZGFpbHlzbmFw IC0tPg0KDQoNCg0KDQoNCjwhLS0gQ0FMTE9VVHxodHRwOi8vYWRzLmNubi5jb20vaHRtbC5uZy9z aXRlPWNubl9pbnRlcm5hdGlvbmFsJmNubl9pbnRsX3Bvc2l0aW9uPTg4eDMxX3Nwb25fZGFpbHlz bmFwJmNubl9pbnRsX3JvbGx1cD1ob21lcGFnZSZwYWdlLmFsbG93Y29tcGV0ZT15ZXMmcGFyYW1z LnN0eWxlcz1mc3xDQUxMT1VUIC0tPg0KPGRpdiBpZD0iYWQtOTM5MTQ5IiBhbGlnbj0iY2VudGVy IiBzdHlsZT0icGFkZGluZzogMDsgbWFyZ2luOiAwOyBib3JkZXI6IDA7Ij48L2Rpdj4NCjxzY3Jp cHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmNubmFkX2NyZWF0ZUFkKCI5MzkxNDkiLCJodHRw Oi8vYWRzLmNubi5jb20vaHRtbC5uZy9zaXRlPWNubl9pbnRlcm5hdGlvbmFsJmNubl9pbnRsX3Bv c2l0aW9uPTg4eDMxX3Nwb25fZGFpbHlzbmFwJmNubl9pbnRsX3JvbGx1cD1ob21lcGFnZSZwYWdl LmFsbG93Y29tcGV0ZT15ZXMmcGFyYW1zLnN0eWxlcz1mcyIsIjMxIiwiODgiKTsNCmNubmFkX3Jl Z2lzdGVyU3BhY2UoOTM5MTQ5LDg4LDMxKTsNCjwvc2NyaXB0Pg0KDQoNCg0KDQoNCg0KDQoNCg0K CjwvZGl2PgoKPC9kaXY+PCEtLSAvY25uX3NlY3RiaW4zIC0tPgoKCjxkaXYgY2xhc3M9ImNubl9z ZWN0YmluNCBjbm5fdHZzZWN0YmluIj4KCTxkaXYgY2xhc3M9ImNubl90dnNiMSI+CgkJPGg0Pjxh IGhyZWY9Ii9DTk5JLz9ocHQ9dHYiPkNOTiBUVjwvYT48L2g0PgoJCTxkaXYgY2xhc3M9ImNubl9j bGVhciI+PC9kaXY+CgkJPGRpdiBjbGFzcz0iY25uX2RpdmxpbmUiPjwvZGl2PgoJCQkJCQkKCQk8 IS0tIC9jbm4gVFYgUHJvbW8gdG9vbCBpbmNsdWRlIC0tPgo8ZGl2IGNsYXNzPSJjbm5fdHNidHoi PgoJPGRpdiBjbGFzcz0iY25uX3RzYnRpbWciPjxhIGhyZWY9Imh0dHA6Ly9lZGl0aW9uLmNubi5j b20vU1BFQ0lBTFMvY25uLmhlcm9lcy9pbmRleC5odG1sP2hwdD10diI+PGltZyBzcmM9IiBodHRw Oi8vaTIuY2RuLnR1cm5lci5jb20vY25uLzIwMTAvaW1hZ2VzLzA5LzIyL2Nubl9oZXJvZXNfcHJv bW9fc3RhbXAuanBnIiB3aWR0aD0iMTIwIiBoZWlnaHQ9IjY4IiBhbHQ9IiIgYm9yZGVyPSIwIj48 L2E+PC9kaXY+Cgk8ZGl2IGNsYXNzPSJjbm5fdHNidHR4dCI+CgkJPGRpdj48YSBocmVmPSJodHRw Oi8vZWRpdGlvbi5jbm4uY29tL1NQRUNJQUxTL2Nubi5oZXJvZXMvaW5kZXguaHRtbD9ocHQ9dHYi PjxiPklzIFlvdXIgSGVybyBvbiB0aGUgTGlzdD88L2I+PC9hPjxicj48c3Bhbj5Wb3RlIE5vdyE8 L3NwYW4+PC9kaXY+Cgk8L2Rpdj4KPC9kaXY+CjxkaXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+ CjxkaXYgY2xhc3M9ImNubl90dnNlY3RiaW4iPldobyB3aWxsIGJlIHRoZSAyMDEwIENOTiBIZXJv IG9mIHRoZSBZZWFyPyBNZWV0IHRoZSBUb3AgMTAgSGVyb2VzICYgVm90ZSBmb3IgeW91ciBmYXZv cml0ZSBub3chIDxhIGhyZWY9Imh0dHA6Ly9lZGl0aW9uLmNubi5jb20vU1BFQ0lBTFMvY25uLmhl cm9lcy9pbmRleC5odG1sIj5DbGljayBoZXJlIGZvciBtb3JlITwvYT48L2Rpdj4KPCEtLSAvY25u IFRWIFByb21vIHRvb2wgaW5jbHVkZSAtLT4KCgk8L2Rpdj4KCTxkaXYgY2xhc3M9ImNubl9kaXZs aW5lIj48L2Rpdj4KCTxmb3JtIGNsYXNzPSJjbm5fbWFpbnR2ZHJvcGRvd24iPgoJCTxzZWxlY3Qg b25jaGFuZ2U9ImlmICh0aGlzLm9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWUgIT0gJycpIGxv Y2F0aW9uLmhyZWYgPSB0aGlzLm9wdGlvbnNbc2VsZWN0ZWRJbmRleF0udmFsdWU7Ij4KPG9wdGlv biB2YWx1ZT0iUHJvZ3JhbXMiPlByb2dyYW1zPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IiIgZGlz YWJsZWQ9ImRpc2FibGVkIj4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIvQ05OSS9zY2hlZHVsZXMvZXVyb3BlLyI+ U2NoZWR1bGU8L29wdGlvbj4KPG9wdGlvbiBkaXNhYmxlZD0iZGlzYWJsZWQiIHZhbHVlPSIiPi0t LS0tIEdMT0JBTCBORVdTIC0tLS0tPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9DTk5JL1Byb2dy YW1zL2Nvbm5lY3QudGhlLndvcmxkLyI+Q29ubmVjdCBUaGUgV29ybGQ8L29wdGlvbj4KPG9wdGlv biB2YWx1ZT0iaHR0cDovL2ludGVybmF0aW9uYWxkZXNrLmJsb2dzLmNubi5jb20vIj5JbnRlcm5h dGlvbmFsIERlc2s8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvdzEvIj5X b3JsZCBPbmU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvd29ybGQudmll dy8iPldvcmxkIFZpZXc8L29wdGlvbj4KPG9wdGlvbiBkaXNhYmxlZD0iZGlzYWJsZWQiIHZhbHVl PSIiPi0tLS0tIE5FV1MgRkVBVFVSRVMgLS0tLS08L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NO TkkvUHJvZ3JhbXMvYmFja3N0b3J5LyI+QmFja1N0b3J5PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9 Ii9TUEVDSUFMUy8yMDEwL2lsaXN0LyI+aS1MaXN0PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9T UEVDSUFMUy8yMDA3L2ltcGFjdC8iPkltcGFjdCBZb3VyIFdvcmxkPC9vcHRpb24+CjxvcHRpb24g dmFsdWU9Ii9DTk5JL1Byb2dyYW1zL2luc2lkZWFmcmljYS8iPkluc2lkZSBBZnJpY2E8L29wdGlv bj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvbWlkZGxlLmVhc3QvIj5JbnNpZGUgdGhl IE1pZGRsZSBFYXN0PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9DTk5JL1Byb2dyYW1zL2lyZXBv cnQvIj5pUmVwb3J0IGZvciBDTk48L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3Jh bXMvcG9saXRpY2FsLm1hbm4vIj5Qb2xpdGljYWwgTWFubjwvb3B0aW9uPgo8b3B0aW9uIHZhbHVl PSIvQ05OL1Byb2dyYW1zL3NpdHVhdGlvbi5yb29tLyI+VGhlIFNpdHVhdGlvbiBSb29tPC9vcHRp b24+CjxvcHRpb24gdmFsdWU9Ii9DTk5JL1Byb2dyYW1zL3VudG9sZHN0b3JpZXMvIj5Xb3JsZCdz IFVudG9sZCBTdG9yaWVzPC9vcHRpb24+CjxvcHRpb24gZGlzYWJsZWQ9ImRpc2FibGVkIiB2YWx1 ZT0iIj4tLS0tLSBCVVNJTkVTUyBORVdTIC0tLS0tPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9D Tk5JL1Byb2dyYW1zL21hcmtldHBsYWNlLmFmcmljYS8iPk1hcmtldHBsYWNlIEFmcmljYTwvb3B0 aW9uPgo8b3B0aW9uIHZhbHVlPSIvQ05OSS9Qcm9ncmFtcy9tbWUvIj5NYXJrZXRwbGFjZSBNaWRk bGUgRWFzdDwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSJodHRwOi8vcXVlc3RtZWFuc2J1c2luZXNz LmJsb2dzLmNubi5jb20vIj5RdWVzdCBNZWFucyBCdXNpbmVzczwvb3B0aW9uPgo8b3B0aW9uIGRp c2FibGVkPSJkaXNhYmxlZCIgdmFsdWU9IiI+LS0tLS0gQlVTSU5FU1MgRkVBVFVSRVMgLS0tLS08 L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvYnVzaW5lc3MudHJhdmVsbGVy LyI+QnVzaW5lc3MgVHJhdmVsbGVyPC9vcHRpb24+CjxvcHRpb24gZGlzYWJsZWQ9ImRpc2FibGVk IiB2YWx1ZT0iIj4tLS0tLSBJTlRFUlZJRVcgYW5kIERFQkFURSAtLS0tLTwvb3B0aW9uPgo8b3B0 aW9uIHZhbHVlPSIvQ05OSS9Qcm9ncmFtcy9hZnJpY2Fudm9pY2VzLyI+QWZyaWNhbiBWb2ljZXM8 L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTi9Qcm9ncmFtcy9mYXJlZWQuemFrYXJpYS5ncHMv Ij5GYXJlZWQgWmFrYXJpYSBHUFM8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3Jh bXMvaW50bC5jb3JyZXNwb25kZW50cy8iPkludGVybmF0aW9uYWwgQ29ycmVzcG9uZGVudHM8L29w dGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTi9Qcm9ncmFtcy9sYXJyeS5raW5nLmxpdmUvIj5MYXJy eSBLaW5nIExpdmU8L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTi9Qcm9ncmFtcy9zdGF0ZS5v Zi50aGUudW5pb24vIj5TdGF0ZSBvZiB0aGUgVW5pb248L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0i L0FTSUEvdGFsa2FzaWEvIj5UYWxrIEFzaWE8L29wdGlvbj4KPG9wdGlvbiBkaXNhYmxlZD0iZGlz YWJsZWQiIHZhbHVlPSIiPi0tLS0tIFNQT1JUUyAtLS0tLTwvb3B0aW9uPgo8b3B0aW9uIHZhbHVl PSIvU1BPUlQvZ29sZi8iPkxpdmluZyBHb2xmPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9DTk5J L1Byb2dyYW1zL21haW4uc2FpbC8iPk1haW5TYWlsPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9T UE9SVC90ZW5uaXMvIj5PcGVuIENvdXJ0PC9vcHRpb24+CjxvcHRpb24gdmFsdWU9Ii9TUE9SVC8i PldvcmxkIFNwb3J0PC9vcHRpb24+CjxvcHRpb24gZGlzYWJsZWQ9ImRpc2FibGVkIiB2YWx1ZT0i Ij4tLS0tLSBMSUZFU1RZTEUgLS0tLS08L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJv Z3JhbXMvY25uZ28vIj5DTk5Hbzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIvQ05OSS9Qcm9ncmFt cy9lYXJ0aHMuZnJvbnRpZXJzLyI+RWFydGgncyBGcm9udGllcnM8L29wdGlvbj4KPG9wdGlvbiB2 YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvZWNvLnNvbHV0aW9ucy8iPkVjbyBTb2x1dGlvbnM8L29wdGlv bj4KPG9wdGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvaWNvbi8iPmljb248L29wdGlvbj4KPG9w dGlvbiB2YWx1ZT0iL0NOTkkvUHJvZ3JhbXMvcmV2ZWFsZWQvIj5SZXZlYWxlZDwvb3B0aW9uPgo8 b3B0aW9uIHZhbHVlPSIvQ05OSS9Qcm9ncmFtcy9zY3JlZW5pbmcucm9vbS8iPlRoZSBTY3JlZW5p bmcgUm9vbTwvb3B0aW9uPgo8L3NlbGVjdD4KCgk8L2Zvcm0+Cgk8ZGl2IGNsYXNzPSJjbm5fdHZz YjIiPjxhIGhyZWY9Ii9DTk5JL3NjaGVkdWxlcy9ldXJvcGUvP2hwdD10diI+Q05OIFRWIFNjaGVk dWxlPC9hPiAmbmJzcDt8Jm5ic3A7IDxhIGhyZWY9Ii9DTk5JLz9ocHQ9dHYiPldoYXQncyBvbj88 L2E+PC9kaXY+CjwvZGl2PjwhLS0gL2Nubl90dnNlY3RiaW4gLS0+CgoKPGRpdiBjbGFzcz0iY25u X2NsZWFyIj48L2Rpdj4KCjxkaXYgY2xhc3M9ImNubl9zaGRjYWZvb3RlciI+PC9kaXY+Cgo8ZGl2 IGNsYXNzPSJjbm5fcGFkMnRvcCBjbm5fc2hkc3BjIj48L2Rpdj4KCjxkaXYgY2xhc3M9ImNubl9z aGRjYWhlYWRlciI+PC9kaXY+Cgo8ZGl2IGNsYXNzPSJjbm5fc2VjdGJpbjEiPgoJPGRpdiBjbGFz cz0iY25uX3NlY3RiaW5jbnRudCI+PGRpdiBjbGFzcz0iY25uX3NlY3RiaW5jbnRudDIiPiA8aDQ+ PGEgaHJlZj0iL1NQRUNJQUxTLzIwMDkvZW52aXJvbm1lbnQvP2hwdD1TYmluIj5FbnZpcm9ubWVu dDwvYT48L2g0PjxkaXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2Rp dmxpbmUiPjwvZGl2PiA8dWwgY2xhc3M9ImNubl9idWxsZXRiaW4iPjxsaT48YSBocmVmPSIvMjAx MC9XT1JMRC9ldXJvcGUvMDkvMjgvcGxhbnQuZXh0aW5jdGlvbi50aHJlYXQuc3R1ZHkvaW5kZXgu aHRtbD9ocHQ9U2JpbiI+U3R1ZHk6IE9uZSBpbiBmaXZlIHBsYW50cyBpbiBwZXJpbDwvYT48L2xp PiA8bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvZXVyb3BlLzA5LzIyL3J1c3NpYS5hcmN0aWMucmVz b3VyY2VzL2luZGV4Lmh0bWw/aHB0PVNiaW4iPlJ1c3NpYSdzIHZpc2lvbiBmb3IgQXJjdGljIHdl YWx0aDwvYT48L2xpPiA8bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvZXVyb3BlLzA5LzIzL3VrLmxh cmdlc3Qud2luZC5mYXJtL2luZGV4Lmh0bWw/aHB0PVNiaW4iPkh1Z2Ugb2Zmc2hvcmUgd2luZCBm YXJtIG9wZW5zPC9hPjwvbGk+IDxsaT48YSBocmVmPSIvMjAxMC9XT1JMRC9hZnJpY2EvMDkvMjEv ZWxlcGhhbnQuc2hyZXcvaW5kZXguaHRtbD9ocHQ9U2JpbiI+U2NpZW50aXN0cyB0cnVtcGV0ICdz aHJldycgZmluZDwvYT48L2xpPiA8bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvYWZyaWNhLzA5LzIx L3NlcmVuZ2V0aS5taWdyYXRpb24udGhyZWF0LnJvYWQvaW5kZXguaHRtbD9ocHQ9U2JpbiI+U2Np ZW50aXN0czogU2VyZW5nZXRpIG9uIHJvYWQgdG8gcnVpbjwvYT48L2xpPiA8bGk+PGEgaHJlZj0i LzIwMTAvV09STEQvZXVyb3BlLzA5LzE5L3BhcmlzLmJhbGxvb24uYWlyLnF1YWxpdHkvaW5kZXgu aHRtbD9ocHQ9U2JpbiI+QmFsbG9vbiBoZWxwcyBQYXJpc2lhbnMgYnJlYXRoZSBlYXN5PC9hPjwv bGk+IDxsaT48YSBocmVmPSIvMjAxMC9XT1JMRC9hc2lhcGNmLzA5LzE3L2xhb3MuYXNpYW4udW5p Y29ybi5zYW9sYS9pbmRleC5odG1sP2hwdD1TYmluIj5FbmRhbmdlcmVkICd1bmljb3JuJyBjYXB0 dXJlZDwvYT48L2xpPjwvdWw+ICAgICAgICA8L2Rpdj48ZGl2IGNsYXNzPSJjbm5fbXRwbW9yZSI+ PGEgaHJlZj0iL1NQRUNJQUxTLzIwMDkvZW52aXJvbm1lbnQvP2hwdD1TYmluIiBjbGFzcz0iY25u X210cG1vcmVidG4iPjxpbWcgYWx0PSJNb3JlIiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29t L2Nubi8uZWxlbWVudC9pbWcvMy4wLzFweC5naWYiIGJvcmRlcj0iMCI+PC9hPjwvZGl2PjwvZGl2 PiAgIAoKPC9kaXY+PCEtLSAvY25uX3NlY3RiaW4xIC0tPgoKCjxkaXYgY2xhc3M9ImNubl9zZWN0 YmluMiI+Cgk8ZGl2IGNsYXNzPSJjbm5fc2VjdGJpbmNudG50Ij48ZGl2IGNsYXNzPSJjbm5fc2Vj dGJpbmNudG50MiI+IDxoND48YSBocmVmPSIvVEVDSC8/aHB0PVNiaW4iPlRlY2hub2xvZ3k8L2E+ PC9oND48ZGl2IGNsYXNzPSJjbm5fY2xlYXIiPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9kaXZsaW5l Ij48L2Rpdj4gPHVsIGNsYXNzPSJjbm5fYnVsbGV0YmluIj48bGk+PGEgaHJlZj0iLzIwMTAvVEVD SC9nYW1pbmcuZ2FkZ2V0cy8xMC8wMS9tZWRhbC5vZi5ob25vci50YWxpYmFuL2luZGV4Lmh0bWw/ aHB0PVNiaW4iPldhciBnYW1lIGF4ZXMgJ1RhbGliYW4nIG9wdGlvbjwvYT48L2xpPjxsaT48YSBo cmVmPSIvdmlkZW8vIy92aWRlby9zaG93Yml6LzIwMTAvMTAvMDEvYW0uc29jaWFsLm5ldHdvcmsu aW50ZXJ2aWV3LmNubj9ocHQ9U2JpbiI+J1NvY2lhbCBOZXR3b3JrJyBzdGFycyBkaXNjdXNzIGZp bG08L2E+PGEgaHJlZj0iL3ZpZGVvLyMvdmlkZW8vc2hvd2Jpei8yMDEwLzEwLzAxL2FtLnNvY2lh bC5uZXR3b3JrLmludGVydmlldy5jbm4/aHB0PVNiaW4iPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4u dHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC9nbG9iYWwvaWNvbnMvdmlkZW9faWNvbi5n aWYiIGFsdD0iVmlkZW8iIGJvcmRlcj0iMCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjEwIiBjbGFzcz0i Y25uX3ZpZGljb24iPjwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9URUNIL2lubm92YXRpb24v MTAvMDEvdmNoYXR0ZXIuZmFjZWJvb2svaW5kZXguaHRtbD9ocHQ9U2JpbiI+dkNoYXR0ZXI6IFRo ZSBsZXNzLW5ha2VkIENoYXRyb3VsZXR0ZTwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9URUNI L2dhbWluZy5nYWRnZXRzLzEwLzAxL2FwcGxlLnR2LnNlY3JldHMud2lyZWQvaW5kZXguaHRtbD9o cHQ9U2JpbiI+MyBzZW1pLXNlY3JldCBBcHBsZSBUViBmZWF0dXJlczwvYT48L2xpPjxsaT48YSBo cmVmPSIvMjAxMC9URUNIL3NvY2lhbC5tZWRpYS8xMC8wMS9mYWNlYm9vay5waG90b3MudXBncmFk ZWQubWFzaGFibGUvaW5kZXguaHRtbD9ocHQ9U2JpbiI+RmFjZWJvb2sgdXBncmFkZXMgaXRzIHBo b3RvIGZlYXR1cmU8L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvVEVDSC9zb2NpYWwubWVkaWEv MDkvMzAvdGVjaG5vbG9neS5tb3ZpZXMudHYuc2hvd3MvaW5kZXguaHRtbD9ocHQ9U2JpbiI+VGVj aCBrZWVwcyBtb3ZpZXMsIFRWIHJlbGV2YW50PC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii8yMDEwL1RF Q0gvd2ViLzA5LzMwL3dlYi5jaGVja2luLm9uZXRydWVmYW4vaW5kZXguaHRtbD9ocHQ9U2JpbiI+ QnJvd3NlIHRoZSBXZWIsIGVhcm4gcG9pbnRzPC9hPjwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNz PSJjbm5fbXRwbW9yZSI+PGEgaHJlZj0iL1RFQ0gvP2hwdD1TYmluIiBjbGFzcz0iY25uX210cG1v cmVidG4iPjxpbWcgYWx0PSJNb3JlIiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8u ZWxlbWVudC9pbWcvMy4wLzFweC5naWYiIGJvcmRlcj0iMCI+PC9hPjwvZGl2PjwvZGl2PiAgIAo8 L2Rpdj48IS0tIC9jbm5fc2VjdGJpbjIgLS0+CgoKPGRpdiBjbGFzcz0iY25uX3NlY3RiaW4zIj4K CTxkaXYgY2xhc3M9ImNubl9zZWN0YmluY250bnQiPjxkaXYgY2xhc3M9ImNubl9zZWN0YmluY250 bnQyIj4gPGg0PjxhIGhyZWY9Ii9TUEVDSUFMUy8yMDEwL2lsaXN0Lz9ocHQ9U2JpbiI+aS1MaXN0 IDogTmlnZXJpYTwvYT48L2g0PjxkaXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+PGRpdiBjbGFz cz0iY25uX2RpdmxpbmUiPjwvZGl2PiA8dWwgY2xhc3M9ImNubl9idWxsZXRiaW4iPjxsaT48YSBo cmVmPSIvMjAxMC9CVVNJTkVTUy8wOS8yOC9uaWdlcmlhLnJpY2guZGFuZ290ZS9pbmRleC5odG1s P2hwdD1TYmluIj5GaXJzdCBiaWxsaW9uYWlyZSBjZW1lbnRzIGhpcyBmb3J0dW5lPC9hPjwvbGk+ ICA8bGk+PGEgaHJlZj0iL3ZpZGVvLyMvdmlkZW8vd29ybGQvMjAxMC8wOS8yOC9pbnR2LnNlc2F5 LmJlbGxhLm5haWphLmNubj9ocHQ9U2JpbiI+TmlnZXJpYSdzIGNlbGVicml0eSBibG9nZ2VyPC9h PjxhIGhyZWY9Ii92aWRlby8jL3ZpZGVvL3dvcmxkLzIwMTAvMDkvMjgvaW50di5zZXNheS5iZWxs YS5uYWlqYS5jbm4/aHB0PVNiaW4iPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9j bm4vLmVsZW1lbnQvaW1nLzMuMC9nbG9iYWwvaWNvbnMvdmlkZW9faWNvbi5naWYiIGFsdD0iVmlk ZW8iIGJvcmRlcj0iMCIgd2lkdGg9IjE2IiBoZWlnaHQ9IjEwIiBjbGFzcz0iY25uX3ZpZGljb24i PjwvYT48L2xpPiA8bGk+PGEgaHJlZj0iLzIwMTAvV09STEQvYWZyaWNhLzA5LzE3L25pZ2VyaWEu Y291bnRyeS5wcm9maWxlL2luZGV4Lmh0bWw/aHB0PVNiaW4iPk5pZ2VyaWE6IEVjb25vbWljIHBv d2VyaG91c2U8L2E+PC9saT4gIDxsaT48YSBocmVmPSIvdmlkZW8vIy92aWRlby93b3JsZC8yMDEw LzA5LzI2L3B1cmVmb3kubmlnZXJpYS5tb2JpbGVzLmNubj9ocHQ9U2JpbiI+QnVzaW5lc3Mgb2Yg bW9iaWxlcyBpbiBOaWdlcmlhPC9hPjxhIGhyZWY9Ii92aWRlby8jL3ZpZGVvL3dvcmxkLzIwMTAv MDkvMjYvcHVyZWZveS5uaWdlcmlhLm1vYmlsZXMuY25uP2hwdD1TYmluIj48aW1nIHNyYz0iaHR0 cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvZ2xvYmFsL2ljb25zL3Zp ZGVvX2ljb24uZ2lmIiBhbHQ9IlZpZGVvIiBib3JkZXI9IjAiIHdpZHRoPSIxNiIgaGVpZ2h0PSIx MCIgY2xhc3M9ImNubl92aWRpY29uIj48L2E+PC9saT4gPGxpPjxhIGhyZWY9Ii8yMDEwL1dPUkxE L2FmcmljYS8wOS8xNy9uaWdlcmlhLmltYWdlcy9pbmRleC5odG1sP2hwdD1TYmluIj5HYWxsZXJ5 OiBOaWdlcmlhJ3MgcGVvcGxlIGFuZCBwbGFjZXM8L2E+PC9saT4gPGxpPjxhIGhyZWY9Ii8yMDEw L1dPUkxEL2FmcmljYS8wOS8xNy9uaWdlcmlhLnF1aXovaW5kZXguaHRtbD9ocHQ9U2JpbiI+UXVp ejogVGVzdCB5b3VyIGtub3dsZWRnZTwvYT48L2xpPiA8bGk+PGEgaHJlZj0iLzIwMTAvV09STEQv YWZyaWNhLzA5LzIxL25pZ2VyaWFuLmF1dGhvcnMvaW5kZXguaHRtbD9ocHQ9U2JpbiI+WW91bmcg d3JpdGVycyBzdGFydCBuZXcgY2hhcHRlcjwvYT48L2xpPjwvdWw+IDwvZGl2PjxkaXYgY2xhc3M9 ImNubl9tdHBtb3JlIj48YSBocmVmPSIvU1BFQ0lBTFMvMjAxMC9pbGlzdC8/aHB0PVNiaW4iIGNs YXNzPSJjbm5fbXRwbW9yZWJ0biI+PGltZyBhbHQ9Ik1vcmUiIHNyYz0iaHR0cDovL2kuY2RuLnR1 cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgYm9yZGVyPSIwIj48L2E+PC9k aXY+PC9kaXY+ICAgCgk8ZGl2IGNsYXNzPSJjbm5fYWRzcGMxNTV4MzEiPgoJCTwhLS0gQURTUEFD RTogaG9tZXBhZ2Uvc3Bvbi44OHgzMV9pbGlzdCAtLT4NCg0KDQoNCg0KPCEtLSBDQUxMT1VUfGh0 dHA6Ly9hZHMuY25uLmNvbS9odG1sLm5nL3NpdGU9Y25uX2ludGVybmF0aW9uYWwmY25uX2ludGxf cG9zaXRpb249ODh4MzFfc3Bvbl9pbGlzdCZjbm5faW50bF9yb2xsdXA9aG9tZXBhZ2UmcGFnZS5h bGxvd2NvbXBldGU9bm8mcGFyYW1zLnN0eWxlcz1mc3xDQUxMT1VUIC0tPg0KPGRpdiBpZD0iYWQt OTUwMDMyIiBhbGlnbj0iY2VudGVyIiBzdHlsZT0icGFkZGluZzogMDsgbWFyZ2luOiAwOyBib3Jk ZXI6IDA7Ij48L2Rpdj4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4NCmNubmFkX2Ny ZWF0ZUFkKCI5NTAwMzIiLCJodHRwOi8vYWRzLmNubi5jb20vaHRtbC5uZy9zaXRlPWNubl9pbnRl cm5hdGlvbmFsJmNubl9pbnRsX3Bvc2l0aW9uPTg4eDMxX3Nwb25faWxpc3QmY25uX2ludGxfcm9s bHVwPWhvbWVwYWdlJnBhZ2UuYWxsb3djb21wZXRlPW5vJnBhcmFtcy5zdHlsZXM9ZnMiLCIwIiwi MCIpOw0KY25uYWRfcmVnaXN0ZXJTcGFjZSg5NTAwMzIsMCwwKTsNCjwvc2NyaXB0Pg0KDQoNCg0K DQoKCTwvZGl2Pgo8L2Rpdj48IS0tIC9jbm5fc2VjdGJpbjMgLS0+CgoKPGRpdiBjbGFzcz0iY25u X3NlY3RiaW40IGNubl9xdWlja3ZvdGViaW4iPgoJPGg0PlF1aWNrdm90ZTwvaDQ+PGRpdiBjbGFz cz0iY25uX2NsZWFyIj48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fZGl2bGluZSI+PC9kaXY+PHNjcmlw dD4gdmFyIHF2cV9jb3VudCA9IDA7IDwvc2NyaXB0PgoKPGRpdiBpZD0iY25uUVZfQ29udGVudF81 MzI3MSI+Cjxmb3JtIGlkPSJxdl9wb2xsXzUzMjcxIiBtZXRob2Q9InBvc3QiIGFjdGlvbj0iaHR0 cDovL3BvbGxzLmNubi5jb20vcG9sbCIgdGFyZ2V0PSJxdl9pZnJhbWVfNTMyNzEiPgo8SU5QVVQg VFlQRT1ISURERU4gTkFNRT0icG9sbF9pZCIgVkFMVUU9IjUzMjcxIj4KPGRpdiBjbGFzcz0iY25u X3F2YnYzIj4KPGg1IGlkPSJjbm5RVl9xdWVzVHhUIj5Eb2VzIHlvdXIgam9iIG1ha2UgeW91IGZl ZWwgZGVwcmVzc2VkPzwvaDU+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJjbm5fcXZidjQiPgo8dWw+Cjxs aT48aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InF1ZXN0aW9uXzEiIHZhbHVlPSIxIiBpZD0iY25u UG9sbEExIj4gPGxhYmVsIGZvcj0iY25uUG9sbEExIiAgaWQ9ImNublBvbGxfUTFMMSI+WWVzPC9s YWJlbD48L2xpPgo8c2NyaXB0PiBxdnFfY291bnQrKzsgPC9zY3JpcHQ+CjxsaT48aW5wdXQgdHlw ZT0icmFkaW8iIG5hbWU9InF1ZXN0aW9uXzEiIHZhbHVlPSIyIiBpZD0iY25uUG9sbEEyIj4gPGxh YmVsIGZvcj0iY25uUG9sbEEyIiAgaWQ9ImNublBvbGxfUTFMMiI+Tm88L2xhYmVsPjwvbGk+Cjxz Y3JpcHQ+IHF2cV9jb3VudCsrOyA8L3NjcmlwdD4KPGxpPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFt ZT0icXVlc3Rpb25fMSIgdmFsdWU9IjMiIGlkPSJjbm5Qb2xsQTMiPiA8bGFiZWwgZm9yPSJjbm5Q b2xsQTMiICBpZD0iY25uUG9sbF9RMUwzIj5XaGF0IGpvYj88L2xhYmVsPjwvbGk+CjxzY3JpcHQ+ IHF2cV9jb3VudCsrOyA8L3NjcmlwdD4KPC91bD4KPGRpdiBjbGFzcz0iY25uX2NsZWFyIj48L2Rp dj4KPC9kaXY+CjwhLS0gL2VuZCBRdWVzdGlvbiAxIC0tPgo8ZGl2IGNsYXNzPSJjbm5fcXZidm90 ZSI+CjxkaXYgY2xhc3M9ImNubl9xdmJ2MSI+PGEgaHJlZj0iamF2YXNjcmlwdDpxdlN1Ym1pdFZv dGVfNTMyNzEoKTsiIGNsYXNzPSJjbm5fZnJtcXZ0YnRuIj48aW1nIHNyYz0iaHR0cDovL2kuY2Ru LnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgYm9yZGVyPSIwIj48L2E+ PC9kaXY+CjxkaXYgY2xhc3M9ImNubl9xdmJ2MiI+PHNwYW4+b3IgPC9zcGFuPjxhIGhyZWY9Imph dmFzY3JpcHQ6cXZHZXRSZXN1bHRzXzUzMjcxKCk7Ij52aWV3IHJlc3VsdHM8L2E+PC9kaXY+Cjxk aXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+CjwvZGl2Pgo8L2Zvcm0+CjwvZGl2Pgo8aWZyYW1l IHdpZHRoPSIxIiBoZWlnaHQ9IjEiIGZyYW1lYm9yZGVyPSIwIiBzdHlsZT0idmlzaWJpbGl0eTpo aWRkZW47aGVpZ2h0OjFweDtib3JkZXI6MHB4IiBpZD0icXZfaWZyYW1lXzUzMjcxIiBuYW1lPSJx dl9pZnJhbWVfNTMyNzEiPjwvaWZyYW1lPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+ CgoJdmFyIHF2X3N1Ym1pdHRlZF81MzI3MTsKCWZ1bmN0aW9uIHF2U3VibWl0Vm90ZV81MzI3MSgp IHsgcXZfc3VibWl0dGVkXzUzMjcxID0gMTskKCdxdl9wb2xsXzUzMjcxJykuc3VibWl0KCk7cXZH ZXRSZXN1bHRzXzUzMjcxKCk7IH0KCWZ1bmN0aW9uIHF2R2V0UmVzdWx0c181MzI3MSgpIHsgCgkK CQkJQ1NJTWFuYWdlci5nZXRJbnN0YW5jZSgpLmNhbGwoJ2h0dHA6L1wvd3d3LmNubi5jb20vUE9M TFNFUlZFUi9yZXN1bHRzLzUzMjcxLmNvbnRlbnQuaHRtbCcsICcnLCAnY25uUVZfQ29udGVudF81 MzI3MScsIGNubl9xdkJQSFRNTF81MzI3MSwgdHJ1ZSk7CgkKCX0KCQoJZnVuY3Rpb24gY25uX3F2 QlBIVE1MXzUzMjcxKG9iaiwgaWQsIGNvbmZpZ09iaikgewoJCgkJdmFyIHF2dGVtcF9hcnIgPSBu ZXcgQXJyYXkoKTsKCQlmb3IoaT0xO2kgPD0gcXZxX2NvdW50O2krKykgeyBxdnRlbXBfYXJyWyhp IC0gMSldID0geyAnYV90eHQnIDogJCgnY25uUG9sbF9RMUwnICsgaSkuaW5uZXJIVE1MLCAndm90 ZV9jJyA6IHBhcnNlSW50KG9iai5wb2xsX3ZhbHVlc1tpXS52b3RlX2NvdW50KSwgJ3ZvdGVfcCcg OiBwYXJzZUludChvYmoucG9sbF92YWx1ZXNbaV0udm90ZV9wZXJjZW50KSB9OyB9CgkJcXZ0ZW1w X2Fyci5zb3J0KGNubl9xdkNvbXBSZXMpOwoJCXJldHVybiBjbm5fcXZCUmVzSFRNTChvYmosIHF2 dGVtcF9hcnIsICc1MzI3MScpOwoJCQoJfQoJCgkKCWZ1bmN0aW9uIGNubl9xdkJSZXNIVE1MKG9i aiwgcXZfYXJyLCBwb2xsX2lkKSB7CgkKCQl2YXIgcXZ0ZW1wX2h0bWwgPSAnPGRpdiBjbGFzcz0i Y25uX3F2YnYxNCI+JzsKCQlxdnRlbXBfaHRtbCArPSAnPGRpdiBjbGFzcz0iY25uX3F2YnYxNiI+ JzsKCQlxdnRlbXBfaHRtbCArPSAnPGg1PicgKyAkKCdjbm5RVl9xdWVzVHhUJykuaW5uZXJIVE1M ICsgJzwvaDU+JzsKCQlpZihvYmoucmVsYXRlZF9zdG9yeSkgeyBxdnRlbXBfaHRtbCArPSAnPGRp diBjbGFzcz0iY25uX3F2YnY1Ij48YSBocmVmPSInICsgb2JqLnJlbGF0ZWRfc3RvcnkgKyAnIj5S ZWFkIFJlbGF0ZWQgQXJ0aWNsZXM8L2E+PC9kaXY+JzsgfQoJCXF2dGVtcF9odG1sICs9ICc8L2Rp dj4nOwoJCXF2dGVtcF9odG1sICs9ICc8ZGl2IGNsYXNzPSJjbm5fcXZidjE1Ij5UaGlzIGlzIG5v dCBhIHNjaWVudGlmaWMgcG9sbDwvZGl2Pic7CgkJcXZ0ZW1wX2h0bWwgKz0gJzwvZGl2Pic7CgkJ CgkJcXZ0ZW1wX2h0bWwgKz0gJzxkaXYgY2xhc3M9ImNubl9xdmJ2NiI+JzsKCgoJCWZvcihpPTA7 aSA8IHF2X2Fyci5sZW5ndGg7aSsrKSB7CgkJCgkJCXF2dGVtcF9odG1sICs9ICc8ZGl2IGNsYXNz PSJjbm5fcXZidjcnOwoJCQlpZihpID09IDApIHsgcXZ0ZW1wX2h0bWwgKz0gJyBjbm5fcXZidmFj dHYnOyB9CgkJCXF2dGVtcF9odG1sICs9ICciPic7CgkJCXF2dGVtcF9odG1sICs9ICc8ZGl2IGNs YXNzPSJjbm5fcXZidjgiPicgKyBxdl9hcnJbaV0uYV90eHQgKyAnPC9kaXY+JzsKCQkJcXZ0ZW1w X2h0bWwgKz0gJzxkaXYgY2xhc3M9ImNubl9xdmJ2OSI+PGRpdiBzdHlsZT0iJzsKCQkJaWYocXZf YXJyW2ldLnZvdGVfcCA+IDApIHsgcXZ0ZW1wX2h0bWwgKz0gJ3dpZHRoOicgKyBxdl9hcnJbaV0u dm90ZV9wICsgJ3B4Oyc7IH0KCQkJcXZ0ZW1wX2h0bWwgKz0gJyI+PC9kaXY+PC9kaXY+JzsKCQkJ cXZ0ZW1wX2h0bWwgKz0gJzxkaXYgY2xhc3M9ImNubl9xdmJ2MTAiPicgKyBxdl9hcnJbaV0udm90 ZV9wICsgJyU8L2Rpdj4nOwoJCQlxdnRlbXBfaHRtbCArPSAnPGRpdiBjbGFzcz0iY25uX3F2YnYx MSI+JyArIHF2X2FycltpXS52b3RlX2MgKyAnPC9kaXY+JzsKCQkJcXZ0ZW1wX2h0bWwgKz0gJzxk aXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+JzsKCQkJcXZ0ZW1wX2h0bWwgKz0gJzwvZGl2Pic7 CgoJCX0KCQkKCQlxdnRlbXBfaHRtbCArPSAnPGRpdiBjbGFzcz0iY25uX3F2YnYxMiI+VG90YWwg dm90ZXM6ICcgKyBvYmoudG90YWxfdm90ZV9jb3VudCArICc8L2Rpdj4nOwoJCXF2dGVtcF9odG1s ICs9ICc8ZGl2IGNsYXNzPSJjbm5fcXZidjEzIj5UaGlzIGlzIG5vdCBhIHNjaWVudGlmaWMgcG9s bDwvZGl2Pic7CgkJCgkJcXZ0ZW1wX2h0bWwgKz0gJzwvZGl2Pic7CgoJCXJldHVybiBxdnRlbXBf aHRtbDsKCQkKCX0KCQoJZnVuY3Rpb24gY25uX3F2Q29tcFJlcyhhLCBiKSB7IHJldHVybiBiLnZv dGVfYyAtIGEudm90ZV9jOyB9CgkKPC9zY3JpcHQ+Cgo8L2Rpdj48IS0tIC9jbm5fcXVpY2t2b3Rl YmluIC0tPgoKCjxkaXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+Cgo8ZGl2IGNsYXNzPSJjbm5f c2hkY2Fmb290ZXIiPjwvZGl2PgoKPGRpdiBjbGFzcz0iY25uX3BhZDJ0b3AgY25uX3NoZHNwYyI+ PC9kaXY+Cgo8ZGl2IGNsYXNzPSJjbm5fc2hkY2FoZWFkZXIiPjwvZGl2PgoKPGRpdiBjbGFzcz0i Y25uX3NiYWx0ZXJuYXRlIj4KCjxkaXYgY2xhc3M9ImNubl9zZWN0YmluMSI+Cgk8ZGl2IGNsYXNz PSJjbm5fc2VjdGJpbmNudG50Ij48ZGl2IGNsYXNzPSJjbm5fc2VjdGJpbmNudG50MiI+IDxoND48 YSBocmVmPSIvU0hPV0JJWi8/aHB0PVNiaW4iPkVudGVydGFpbm1lbnQ8L2E+PC9oND48ZGl2IGNs YXNzPSJjbm5fY2xlYXIiPjwvZGl2PjxkaXYgY2xhc3M9ImNubl9kaXZsaW5lIj48L2Rpdj4gPHVs IGNsYXNzPSJjbm5fYnVsbGV0YmluIj48bGk+PGEgaHJlZj0iLzIwMTAvU0hPV0JJWi9jZWxlYnJp dHkubmV3cy5nb3NzaXAvMTAvMDEvc3RlcGhlbi5jYW5uZWxsLm9iaXQvaW5kZXguaHRtbD9ocHQ9 U2JpbiI+VFYgcHJvZHVjZXIgU3RlcGhlbiBKLiBDYW5uZWxsIGRpZXM8L2E+PC9saT48bGk+PGEg aHJlZj0iLzIwMTAvU0hPV0JJWi9Nb3ZpZXMvMTAvMDEvaG9ycm9yLm1vdmllLmNoaWxkcmVuL2lu ZGV4Lmh0bWw/aHB0PVNiaW4iPkdhbGxlcnk6IENyZWVwaWVzdCBraWRzIGluIGhvcnJvciBtb3Zp ZXM8L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvU0hPV0JJWi9Nb3ZpZXMvMDkvMjkvbW92aWVz LndlLndpc2guZXhpc3RlZC9pbmRleC5odG1sP2hwdD1TYmluIj5XaGVyZSBpbiB0aGUgd29ybGQg aXMgUm9uIEJ1cmd1bmR5PzwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9TSE9XQklaL1RWLzEw LzAxL3Npc3Rlci53aXZlcy5wcGwvaW5kZXguaHRtbD9ocHQ9U2JpbiI+J1Npc3RlciBXaXZlcyc6 IFdlJ3JlIG5vcm1hbCA8L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvU0hPV0JJWi9Nb3ZpZXMv MDkvMzAvc29jaWFsLm5ldHdvcmsucmV2aWV3LnJvbGwvaW5kZXguaHRtbD9ocHQ9U2JpbiI+J1Ro ZSBTb2NpYWwgTmV0d29yaycgZGVzZXJ2ZXMgdG8gZ28gdmlyYWw8L2E+PC9saT48bGk+PGEgaHJl Zj0iL3ZpZGVvLyMvdmlkZW8vc2hvd2Jpei8yMDEwLzEwLzAxL2FtLnNlbGxlcnMub3ByYWgud2lu ZnJleS5jbm4/aHB0PVNiaW4iPk9wcmFoIGZlYXJlZCBtYWtpbmcganVtcDwvYT48YSBocmVmPSIv dmlkZW8vIy92aWRlby9zaG93Yml6LzIwMTAvMTAvMDEvYW0uc2VsbGVycy5vcHJhaC53aW5mcmV5 LmNubj9ocHQ9U2JpbiI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxl bWVudC9pbWcvMy4wL2dsb2JhbC9pY29ucy92aWRlb19pY29uLmdpZiIgYWx0PSJWaWRlbyIgYm9y ZGVyPSIwIiB3aWR0aD0iMTYiIGhlaWdodD0iMTAiIGNsYXNzPSJjbm5fdmlkaWNvbiI+PC9hPjwv bGk+PGxpPjxhIGhyZWY9Ii8yMDEwL1NIT1dCSVovY2VsZWJyaXR5Lm5ld3MuZ29zc2lwLzEwLzAx L2pvbi5zdGV3YXJ0LnJhbGx5LnJvbGwvaW5kZXguaHRtbD9ocHQ9U2JpbiI+Sm9uIFN0ZXdhcnQ6 IEl0J3Mgbm90IGFib3V0IEdsZW5uIEJlY2s8L2E+PC9saT48L3VsPjwvZGl2PjxkaXYgY2xhc3M9 ImNubl9tdHBtb3JlIj48YSBocmVmPSIvU0hPV0JJWi8/aHB0PVNiaW4iIGNsYXNzPSJjbm5fbXRw bW9yZWJ0biI+PGltZyBhbHQ9Ik1vcmUiIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25u Ly5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgYm9yZGVyPSIwIj48L2E+PC9kaXY+PC9kaXY+ICAg CjwvZGl2PjwhLS0gL2Nubl9zZWN0YmluMSAtLT4KCgo8ZGl2IGNsYXNzPSJjbm5fc2VjdGJpbjIi PgoJPGRpdiBjbGFzcz0iY25uX3NlY3RiaW5jbnRudCI+PGRpdiBjbGFzcz0iY25uX3NlY3RiaW5j bnRudDIiPiA8aDQ+PGEgaHJlZj0iL1RSQVZFTC8/aHB0PVNiaW4iPlRyYXZlbDwvYT48L2g0Pjxk aXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+PGRpdiBjbGFzcz0iY25uX2RpdmxpbmUiPjwvZGl2 PiA8dWwgY2xhc3M9ImNubl9idWxsZXRiaW4iPjxsaT48YSBocmVmPSIvMjAxMC9VUy8xMC8wMi9l dXJvcGUuYWR2aXNvcnkuZGlzY3Vzc2lvbnMvaW5kZXguaHRtbD9ocHQ9U2JpbiI+VS5TLiBtYXkg aXNzdWUgdHJhdmVsIGFsZXJ0IGZvciBFdXJvcGU8L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAv VFJBVkVMLzA5LzMwL2Jlcmxpbi5jdWx0dXJlLmd1aWRlL2luZGV4Lmh0bWw/aHB0PVNiaW4iPkNp dHkgZ3VpZGU6IEN1bHR1cmFsLCBoaXAgQmVybGluPC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii8yMDEw L1RSQVZFTC8wOS8zMC9mYWxsLmJlZXIuZmVzdHMvaW5kZXguaHRtbD9ocHQ9U2JpbiI+UmFpc2Ug eW91ciBnbGFzc2VzISBGaXZlIGZhbGwgYmVlciBmZXN0czwvYT48L2xpPjxsaT48YSBocmVmPSJo dHRwOi8vd3d3LmNubmdvLmNvbS9ob25nLWtvbmcvcGxheS9ob25nLWtvbmctbmVvbi1zaWducy0x NzIzNzY/cGFnZT0wLDMiIHRhcmdldD0ibmV3Ij5Ib25nIEtvbmcncyBnYXJpc2ggbmVvbiBzaWdu czwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9XT1JMRC9hbWVyaWNhcy8xMC8wMi9wZXJ1LnBs YW5lLmNyYXNoL2luZGV4Lmh0bWw/aHB0PVNiaW4iPjYgZGllIGluIGNyYXNoIG5lYXIgUGVydSdz IE5hemNhIExpbmVzPC9hPjwvbGk+PGxpPjxhIGhyZWY9Imh0dHA6Ly9uZXdzLmJsb2dzLmNubi5j b20vMjAxMC8xMC8wMi9hcm1lZC1nYW5nLWFiZHVjdHMtYnVzbG9hZC1vZi10b3VyaXN0cy1pbi1t ZXhpY28vP2hwdD1TYmluIj5HdW5tZW4gYWJkdWN0IDIyIHRvdXJpc3RzIGluIE1leGljbzwvYT48 L2xpPjxsaT48YSBocmVmPSJodHRwOi8vd3d3LmNubmdvLmNvbS9iYW5na29rL3Zpc2l0L2x1eHVy eS1ob3RlbHMtYmFuZ2tvay0xNTE0MzIiIHRhcmdldD0ibmV3Ij5Nb3JlIGx1eHVyeSBob3RlbHMg b3BlbiBpbiBCYW5na29rPC9hPjwvbGk+PC91bD48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fbXRwbW9y ZSI+PGEgaHJlZj0iL1RSQVZFTC8/aHB0PVNiaW4iIGNsYXNzPSJjbm5fbXRwbW9yZWJ0biI+PGlt ZyBhbHQ9Ik1vcmUiIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2lt Zy8zLjAvMXB4LmdpZiIgYm9yZGVyPSIwIj48L2E+PC9kaXY+PC9kaXY+ICAgCjwvZGl2PjwhLS0g L2Nubl9zZWN0YmluMiAtLT4KCgo8ZGl2IGNsYXNzPSJjbm5fc2VjdGJpbjMiPgoJPGRpdiBjbGFz cz0iY25uX3NlY3RiaW5jbnRudCI+PGRpdiBjbGFzcz0iY25uX3NlY3RiaW5jbnRudDIiPiA8aDQ+ PGEgaHJlZj0iL09QSU5JT04vP2hwdD1TYmluIj5PcGluaW9uPC9hPjwvaDQ+PGRpdiBjbGFzcz0i Y25uX2NsZWFyIj48L2Rpdj48ZGl2IGNsYXNzPSJjbm5fZGl2bGluZSI+PC9kaXY+IDx1bCBjbGFz cz0iY25uX2J1bGxldGJpbiI+PGxpPjxhIGhyZWY9Ii8yMDEwL09QSU5JT04vMTAvMDMvam9obnNv bi5iaXJ0aC5vZi5pZGVhcy9pbmRleC5odG1sP2hwdD1TYmluIj5UaGUgYW1hemluZyBwb3dlciBv ZiBuZXR3b3JrczwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9PUElOSU9OLzEwLzAzL2dyZWVu ZS5qdXN0aWNlLnN5c3RlbS9pbmRleC5odG1sP2hwdD1TYmluIj5Ib21lIGludmFzaW9uIHZpY3Rp bSdzIG9yZGVhbCBnb2VzIG9uPC9hPjwvbGk+PGxpPjxhIGhyZWY9Ii8yMDEwL09QSU5JT04vMDkv MzAvc3BhdWxkaW5nLnJ1dGdlcnMuc3VpY2lkZS9pbmRleC5odG1sP2hwdD1TYmluIj5XaHkgZGlk IFR5bGVyIENsZW1lbnRpIGRpZT88L2E+PC9saT48bGk+PGEgaHJlZj0iLzIwMTAvT1BJTklPTi8x MC8wMS96YWthcmlhLmNoaW5hLnRyYWRlL2luZGV4Lmh0bWw/aHB0PVNiaW4iPlUuUy4tQ2hpbmEg c3BsaXQgd291bGQgYmUgYSBjYXRhc3Ryb3BoZTwvYT48L2xpPjxsaT48YSBocmVmPSIvMjAxMC9P UElOSU9OLzEwLzAxL29waW5pb24ubmlnZXJpYS5wZW9wbGUvaW5kZXguaHRtbD9ocHQ9U2JpbiI+ TmlnZXJpYSBuZWVkcyBtb3JlIHRoYW4gbmV3IGxlYWRlcnM8L2E+PC9saT48bGk+PGEgaHJlZj0i LzIwMTAvT1BJTklPTi8xMC8wMS9ncmFuZGVyc29uLmJpc2hvcC5sb25nL2luZGV4Lmh0bWw/aHB0 PVNiaW4iPldoeSBubyBwcmF5ZXJzIGZvciBMb25nJ3MgYWNjdXNlcnM/PC9hPjwvbGk+PGxpPjxh IGhyZWY9Ii8yMDEwL09QSU5JT04vMDkvMzAvc3RlZWxlLm9iamVjdGl2ZS5qb3VybmFsaXNtL2lu ZGV4Lmh0bWw/aHB0PVNiaW4iPkRhbmdlcnMgaW4gYWN0aXZpc3Qgam91cm5hbGlzbTwvYT48L2xp PjwvdWw+PC9kaXY+PGRpdiBjbGFzcz0iY25uX210cG1vcmUiPjxhIGhyZWY9Ii9PUElOSU9OLz9o cHQ9U2JpbiIgY2xhc3M9ImNubl9tdHBtb3JlYnRuIj48aW1nIGFsdD0iTW9yZSIgc3JjPSJodHRw Oi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lmIiBib3JkZXI9 IjAiPjwvYT48L2Rpdj48L2Rpdj4gICAKPC9kaXY+PCEtLSAvY25uX3NlY3RiaW4zIC0tPgoKCjxk aXYgY2xhc3M9ImNubl9jbGVhciI+PC9kaXY+CgoKPGRpdiBjbGFzcz0iY25uX3NoZDc1NXB4Zm9v dGVyIj48L2Rpdj4KCjxkaXYgY2xhc3M9ImNubl9zaGQ3NTVweDJoZWFkZXIiPjwvZGl2PgoKPGRp diBjbGFzcz0iY25uXzcyOGFkYmluIj4KCTxkaXYgY2xhc3M9ImNubl9hZGNudHI3Mjh4OTAiPgoJ CTxkaXYgY2xhc3M9ImNubl9hZHNwYzcyOHg5MCI+CgkJCTxkaXY+PCEtLSBBRFNQQUNFOiBob21l cGFnZS9tYWluL2JvdC43Mjh4OTAgLS0+DQoNCg0KDQoNCg0KPCEtLSBDQUxMT1VUfGh0dHA6Ly9h ZHMuY25uLmNvbS9odG1sLm5nL3NpdGU9Y25uX2ludGVybmF0aW9uYWwmY25uX2ludGxfcGFnZXR5 cGU9bWFpbiZjbm5faW50bF9wb3NpdGlvbj03Mjh4OTBfYm90JmNubl9pbnRsX3JvbGx1cD1ob21l cGFnZSZwYWdlLmFsbG93Y29tcGV0ZT15ZXMmcGFyYW1zLnN0eWxlcz1mc3xDQUxMT1VUIC0tPg0K PGRpdiBpZD0iYWQtMjIzNDA5IiBhbGlnbj0iY2VudGVyIiBzdHlsZT0icGFkZGluZzogMDsgbWFy Z2luOiAwOyBib3JkZXI6IDA7Ij48L2Rpdj4NCjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0 Ij4NCmNubmFkX2NyZWF0ZUFkKCIyMjM0MDkiLCJodHRwOi8vYWRzLmNubi5jb20vaHRtbC5uZy9z aXRlPWNubl9pbnRlcm5hdGlvbmFsJmNubl9pbnRsX3BhZ2V0eXBlPW1haW4mY25uX2ludGxfcG9z aXRpb249NzI4eDkwX2JvdCZjbm5faW50bF9yb2xsdXA9aG9tZXBhZ2UmcGFnZS5hbGxvd2NvbXBl dGU9eWVzJnBhcmFtcy5zdHlsZXM9ZnMiLCI5MCIsIjcyOCIpOw0KY25uYWRfcmVnaXN0ZXJTcGFj ZSgyMjM0MDksNzI4LDkwKTsNCjwvc2NyaXB0Pg0KDQoNCg0KDQoNCg0KDQoNCg0KPC9kaXY+CgkJ CTxkaXYgY2xhc3M9ImNubl9hZHNwY3RpbWciPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVy LmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC9nbG9iYWwvbWlzYy9hZHZlcnRpc2VtZW50LmdpZiIg d2lkdGg9IjU4IiBoZWlnaHQ9IjUiIGFsdD0iIiBib3JkZXI9IjAiPjwvZGl2PgoJCTwvZGl2PgoJ PC9kaXY+CjwvZGl2PjwhLS0gL2Nubl90dnNlY3Rpb25iaW4gLS0+CgoKPC9kaXY+PCEtLSAvY25u X3NiYWx0ZXJuYXRlIC0tPgoKPGRpdiBjbGFzcz0iY25uX3NlY3RiaW40IGNubl9zYmhvdHRvcGlj cyI+CjwhLS0gaG90IHRvcGljIGluY2x1ZGUgLS0+CjxoND48YSBocmVmPSIvdG9waWNzLyI+SG90 IHRvcGljczwvYT48L2g0Pgo8ZGl2IGNsYXNzPSJjbm5fY2xlYXIiPjwvZGl2Pgo8ZGl2IGNsYXNz PSJjbm5fZGl2bGluZSI+PC9kaXY+CgoKPGRpdiBjbGFzcz0iY25uX3NiaHR0b3BpY2NudHIiPgoK CTxhIGhyZWY9Imh0dHA6Ly90b3BpY3MuZWRpdGlvbi5jbm4uY29tL3RvcGljcy9taW5pbmdfYWNj aWRlbnRzX2FuZF9kaXNhc3RlcnM/aHB0PWh0b3BpYyIgY2xhc3M9ImNubl9zYmh0dG9waWNsIGNu bl9zYmh0dGwxIj48c3Bhbj5NaW5pbmcgYWNjaWRlbnRzIGFuZCBkaXNhc3RlcnM8L3NwYW4+PC9h PjxkaXYgY2xhc3M9ImNubl9kaXZsaW5lIj48L2Rpdj4gPGEgaHJlZj0iL1NQRUNJQUxTL25vcnRo a29yZWEvP2hwdD1odG9waWMiIGNsYXNzPSJjbm5fc2JodHRvcGljbCBjbm5fc2JodHRsMiI+PHNw YW4+Tm9ydGggS29yZWE8L3NwYW4+PC9hPjxkaXYgY2xhc3M9ImNubl9kaXZsaW5lIj48L2Rpdj4g PGEgaHJlZj0iaHR0cDovL3RvcGljcy5lZGl0aW9uLmNubi5jb20vdG9waWNzL2lyYW4/aHB0PWh0 b3BpYyIgY2xhc3M9ImNubl9zYmh0dG9waWNsIGNubl9zYmh0dGwzIj48c3Bhbj5JcmFuPC9zcGFu PjwvYT48ZGl2IGNsYXNzPSJjbm5fZGl2bGluZSI+PC9kaXY+IDxhIGhyZWY9Imh0dHA6Ly90b3Bp Y3MuZWRpdGlvbi5jbm4uY29tL3RvcGljcy9sYWR5X2dhZ2E/aHB0PWh0b3BpYyIgY2xhc3M9ImNu bl9zYmh0dG9waWNsIGNubl9zYmh0dGw0Ij48c3Bhbj5MYWR5IEdhZ2E8L3NwYW4+PC9hPjxkaXYg Y2xhc3M9ImNubl9kaXZsaW5lIj48L2Rpdj4gPGEgaHJlZj0iL1NQT1JUL2Zvb3RiYWxsLz9ocHQ9 aHRvcGljIiBjbGFzcz0iY25uX3NiaHR0b3BpY2wgY25uX3NiaHR0bDUiPjxzcGFuPkZvb3RiYWxs PC9zcGFuPjwvYT48ZGl2IGNsYXNzPSJjbm5fZGl2bGluZSI+PC9kaXY+IDxhIGhyZWY9Imh0dHA6 Ly90b3BpY3MuZWRpdGlvbi5jbm4uY29tL3RvcGljcy9wYWtpc3Rhbj9ocHQ9aHRvcGljIiBjbGFz cz0iY25uX3NiaHR0b3BpY2wgY25uX3NiaHR0bDYiPjxzcGFuPlBha2lzdGFuPC9zcGFuPjwvYT48 ZGl2IGNsYXNzPSJjbm5fZGl2bGluZSI+PC9kaXY+IDxhIGhyZWY9Ii9TUEVDSUFMUy8yMDA5L2Vu dmlyb25tZW50L2luZGV4Lmh0bWw/aHB0PWh0b3BpYyIgY2xhc3M9ImNubl9zYmh0dG9waWNsIGNu bl9zYmh0dGw3Ij48c3Bhbj5FbnZpcm9ubWVudDwvc3Bhbj48L2E+PGRpdiBjbGFzcz0iY25uX2Rp dmxpbmUiPjwvZGl2PiA8YSBocmVmPSJodHRwOi8vYWZnaGFuaXN0YW4uYmxvZ3MuY25uLmNvbS8/ aHB0PWh0b3BpYyZhbXA7aHB0PWh0b3BpYyIgY2xhc3M9ImNubl9zYmh0dG9waWNsIGNubl9zYmh0 dGw4Ij48c3Bhbj5BZmdoYW5pc3Rhbjwvc3Bhbj48L2E+PGRpdiBjbGFzcz0iY25uX2RpdmxpbmUi PjwvZGl2PiA8YSBocmVmPSJodHRwOi8vdG9waWNzLmVkaXRpb24uY25uLmNvbS90b3BpY3MvYXBw bGVfaW5jP2hwdD1odG9waWMiIGNsYXNzPSJjbm5fc2JodHRvcGljbCBjbm5fc2JodHRsOSI+PHNw YW4+QXBwbGU8L3NwYW4+PC9hPjxkaXYgY2xhc3M9ImNubl9kaXZsaW5lIj48L2Rpdj4gPGEgaHJl Zj0iL1NQRUNJQUxTL2NoaW5hLz9ocHQ9aHRvcGljIiBjbGFzcz0iY25uX3NiaHR0b3BpY2wgY25u X3NiaHR0bDEwIj48c3Bhbj5DaGluYTwvc3Bhbj48L2E+PGRpdiBjbGFzcz0iY25uX2RpdmxpbmUi PjwvZGl2PiAKCjwvZGl2PjwhLS0gL2Nubl9zYmh0dG9waWNjbnRyIC0tPgoKPGRpdiBjbGFzcz0i Y25uX3BhZDExdG9wIj48L2Rpdj4KPGRpdiBjbGFzcz0iY25uX3BhZDl0b3AiPjwvZGl2PgoKPGRp dj48YSBocmVmPSIvdG9waWNzLyIgY2xhc3M9ImNubl9tdHB2YXRidG4iPjxpbWcgc3JjPSJodHRw Oi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lmIiBib3JkZXI9 IjAiPjwvYT48L2Rpdj4KCjxkaXYgY2xhc3M9ImNubl9wYWQ3dG9wIj48L2Rpdj4KCjwhLS0gL2hv dCB0b3BpYyBpbmNsdWRlIC0tPgoKPC9kaXY+PCEtLSAvY25uX3NiaG90dG9waWNzIC0tPgoKCjxk aXYgY2xhc3M9ImNubl9zaGRtbmZvb3RlciI+PC9kaXY+CgoKCjwvZGl2PjwhLS0gL2Nubl9zaGRz ZWN0YmluIC0tPgoKPGRpdiBjbGFzcz0iY25uX3BhZDJ0b3AgY25uX3NoZHNwYyI+PC9kaXY+Cgo8 IS0tIC9jbm5fY29udGVudGFyZWEgLS0+CiAgICANCg0KPGRpdiBpZD0iY25uX2Z0cmNudG50Ij4K PGRpdiBpZD0iY25uX2Z0cmNudG50aW5uZXIiIGNsYXNzPSJjbGVhcmZpeCI+CjxkaXYgY2xhc3M9 ImNubl9mdHJkaXZsMSI+PC9kaXY+CjxkaXYgaWQ9ImNubkxXUFdlYXRoZXIiIHN0eWxlPSJ2aXNp YmlsaXR5OiBoaWRkZW4iPgoJPHA+PGI+TG9hZGluZyB3ZWF0aGVyIGRhdGEgLi4uPC9iPjwvcD4K PC9kaXY+Cgo8ZGl2IGlkPSJmdHItc2VhcmNoIj4KCTxmb3JtIG1ldGhvZD0iZ2V0IiBhY3Rpb249 Ii9zZWFyY2gvIiBvbnN1Ym1pdD0icmV0dXJuIGNubkZvb3RTZWFyY2godGhpcyk7Ij4KCgoJPGRp diBjbGFzcz0iZnRyLXNlYXJjaC1kYXRhY250ciI+CjxkaXYgY2xhc3M9ImZ0ci1zZWFyY2gtdGZp ZWxkIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icXVlcnkiIHNpemU9IjEyIiBtYXhsZW5ndGg9 IjQwIiB2YWx1ZT0iIiBpZD0iZnRyLXNlYXJjaC1ib3giPjwvZGl2Pgo8ZGl2IGNsYXNzPSJmdHIt c2VhcmNoLXNpY29uIj48aW5wdXQgdHlwZT0iaW1hZ2UiIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5l ci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvc2VhcmNoL3NlYXJjaF9idG5fZm9vdGVyLmdpZiIg d2lkdGg9IjU1IiBoZWlnaHQ9IjIxIiBhbHQ9IiI+PC9kaXY+CjwvZGl2PgoKCgkJPGlucHV0IHR5 cGU9ImhpZGRlbiIgbmFtZT0iY25uRnRyU3JjaFR5cGUiIGlkPSJjbm5GdHJTcmNoVHlwZSIgdmFs dWU9Im1peGVkIj4KCjxkaXYgY2xhc3M9ImNubl9mdHJnZ2xlIj48aW1nIHNyYz0iaHR0cDovL2ku Y2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvZ2xvYmFsL2Zvb3Rlci9wbmdzL2Zv b3Rlcl9nb29nbGUucG5nIiB3aWR0aD0iODgiIGhlaWdodD0iMTMiIGFsdD0iIiBib3JkZXI9IjAi IGNsYXNzPSJjbm5faWU2cG5nIj48L2Rpdj4KCgk8L2Zvcm0+CjwvZGl2PgoKPGRpdiBjbGFzcz0i Y25uX2NsZWFyIj48L2Rpdj4KCjxkaXYgY2xhc3M9ImNubl9kaXZsaW5lIiBzdHlsZT0iYmFja2dy b3VuZC1jb2xvcjojRUJFQkVCOyBtYXJnaW4tdG9wOjNweCI+PC9kaXY+Cgo8ZGl2IGNsYXNzPSJj bm5fZnRybnZsbmtzIj4KCjxkaXY+PGEgaHJlZj0iLyI+SG9tZTwvYT4gfCA8YSBocmVmPSIvdmlk ZW8vIj5WaWRlbzwvYT4gfCA8YSBocmVmPSIvV09STEQvIj5Xb3JsZDwvYT4gfCA8YSBocmVmPSIv VVMvIj5VLlMuPC9hPiB8IDxhIGhyZWY9Ii9BRlJJQ0EvIj5BZnJpY2E8L2E+IHwgPGEgaHJlZj0i L0FTSUEvIj5Bc2lhPC9hPiB8IDxhIGhyZWY9Ii9FVVJPUEUvIj5FdXJvcGU8L2E+IHwgPGEgaHJl Zj0iL0xBVElOQU1FUklDQS8iPkxhdGluIEFtZXJpY2E8L2E+IHwgPGEgaHJlZj0iL01JRERMRUVB U1QvIj5NaWRkbGUgRWFzdDwvYT4gfCA8YSBocmVmPSIvQlVTSU5FU1MvIj5CdXNpbmVzczwvYT4g fCA8YSBocmVmPSIvU1BPUlQvIj5Xb3JsZCBTcG9ydDwvYT4gfCA8YSBocmVmPSIvU0hPV0JJWi8i PkVudGVydGFpbm1lbnQ8L2E+IHwgPGEgaHJlZj0iL1RFQ0gvIj5UZWNoPC9hPiB8IDxhIGhyZWY9 Ii9UUkFWRUwvIj5UcmF2ZWw8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3d3dy5pcmVwb3J0LmNvbS8/ Y25uPXllcyI+aVJlcG9ydDwvYT48L2Rpdj4KCjxkaXY+PGEgaHJlZj0iL3Rvb2xzL2luZGV4Lmh0 bWwiPlRvb2xzICZhbXA7IFdpZGdldHM8L2E+IHwgPGEgaHJlZj0iL3NlcnZpY2VzL3Jzcy8iPlJT UzwvYT4gfCA8YSBocmVmPSIvc2VydmljZXMvcG9kY2FzdGluZy8iPlBvZGNhc3RzPC9hPiB8IDxh IGhyZWY9Ii9leGNoYW5nZS9ibG9ncy9pbmRleC5odG1sIj5CbG9nczwvYT4gfCA8YSBocmVmPSJo dHRwOi8vZWRpdGlvbi5jbm4uY29tL21vYmlsZS8iPkNOTiBNb2JpbGU8L2E+IHwgPGEgaHJlZj0i L3Byb2ZpbGUvIj5NeSBQcm9maWxlPC9hPiB8IDxhIGhyZWY9Ii9wcm9maWxlLyI+RS1tYWlsIEFs ZXJ0czwvYT4gfCA8YSBocmVmPSIvYXVkaW8vcmFkaW8vd2lubWVkaWEuaHRtbCI+Q05OIFJhZGlv PC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93d3cudHVybmVyc3RvcmVvbmxpbmUuY29tLyI+Q05OIFNo b3A8L2E+IHwgPGEgaHJlZj0iL3NpdGVtYXAvIj5TaXRlIG1hcDwvYT4gfCA8YSBocmVmPSJodHRw Oi8vcGFydG5lcnMuY25uLmNvbS8iPkNOTiBQYXJ0bmVyIEhvdGVsczwvYT4gfCA8YSBocmVmPSJo dHRwOi8vd3d3LmNubnRyYXZlbGxlci5jb20iPkNOTiBUcmF2ZWxsZXI8L2E+PC9kaXY+Cgo8L2Rp dj4KCjxkaXYgY2xhc3M9ImNubl9mdHJkaXZsMiI+PC9kaXY+Cgo8ZGl2IGNsYXNzPSJjbm5fZnRy bG5nZ2NudHIiPgo8ZGl2PjxhIGhyZWY9Ii9lc3Bhbm9sLyI+Q05OIGVuIEVTUEEmTnRpbGRlO09M PC9hPiB8IDxhIGhyZWY9Imh0dHA6Ly93d3cuY25uY2hpbGUuY29tIj5DTk4gQ2hpbGU8L2E+IHwg PGEgaHJlZj0iaHR0cDovL3d3dy5jbm5tZXhpY28uY29tIj5DTk4gTSZlYWN1dGU7eGljbzwvYT4g fCA8c3BhbiBjbGFzcz0iY25uX2Z0cmxhcmFiaWMiPjxhIGhyZWY9Imh0dHA6Ly9hcmFiaWMuY25u LmNvbS8iIGNsYXNzPSJjbm5faWU2cG5nIj48aW1nIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5j b20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4LmdpZiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjExIiBh bHQ9IiIgYm9yZGVyPSIwIj48L2E+PC9zcGFuPiB8IDxzcGFuICBjbGFzcz0iY25uX2Z0cmxrb3Jl YW4iPjxhIGhyZWY9Imh0dHA6Ly9jbm4uam9pbnMuY29tLyIgY2xhc3M9ImNubl9pZTZwbmciPjxp bWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHgu Z2lmIiB3aWR0aD0iMzIiIGhlaWdodD0iMTEiIGFsdD0iIiBib3JkZXI9IjAiPjwvYT48L3NwYW4+ IHwgPHNwYW4gY2xhc3M9ImNubl9mdHJsamFwYW4iPjxhIGhyZWY9Imh0dHA6Ly93d3cuY25uLmNv LmpwLyIgY2xhc3M9ImNubl9pZTZwbmciPjxpbWcgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNv bS9jbm4vLmVsZW1lbnQvaW1nLzMuMC8xcHguZ2lmIiB3aWR0aD0iMzIiIGhlaWdodD0iMTEiIGFs dD0iIiBib3JkZXI9IjAiPjwvYT48L3NwYW4+IHwgPHNwYW4gY2xhc3M9ImNubl9mdHJsdHVya2lz aCI+PGEgaHJlZj0iaHR0cDovL3d3dy5jbm50dXJrLmNvbS8iIGNsYXNzPSJjbm5faWU2cG5nIj48 aW1nIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2ltZy8zLjAvMXB4 LmdpZiIgd2lkdGg9IjMyIiBoZWlnaHQ9IjExIiBhbHQ9IiIgYm9yZGVyPSIwIj48L2E+PC9zcGFu PjwvZGl2PgoKPC9kaXY+Cgo8ZGl2IGNsYXNzPSJjbm5fZnRybGdjcHkiPgo8ZGl2PjxpbWcgc3Jj PSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMuMC9nbG9iYWwvZm9v dGVyL3BuZ3MvZm9vdGVyX2Nubl9sb2dvLnBuZyIgd2lkdGg9IjIzIiBoZWlnaHQ9IjExIiBhbHQ9 IiIgYm9yZGVyPSIwIiBjbGFzcz0iY25uX2llNnBuZyI+JmNvcHk7IDIwMTAgQ2FibGUgTmV3cyBO ZXR3b3JrLiA8YSBocmVmPSJodHRwOi8vd3d3LnR1cm5lci5jb20vIiBjbGFzcz0iY25uX2Z0cnRi c2xpbmsiPlR1cm5lciBCcm9hZGNhc3RpbmcgU3lzdGVtLCBJbmMuPC9hPiBBbGwgUmlnaHRzIFJl c2VydmVkLjwvZGl2Pgo8L2Rpdj4KCjxkaXYgY2xhc3M9ImNubl9mdHJsZ2NweUJvdCI+PGEgaHJl Zj0iL2ludGVyYWN0aXZlX2xlZ2FsLmh0bWwiIHJlbD0ibm9mb2xsb3ciPlRlcm1zIG9mIHNlcnZp Y2U8L2E+IHwgPGEgaHJlZj0iL3ByaXZhY3kuaHRtbCIgcmVsPSJub2ZvbGxvdyI+UHJpdmFjeSBn dWlkZWxpbmVzPC9hPiB8IDxhIGhyZWY9Ii9zZXJ2aWNlcy9hZC5wcmFjdGljZXMvIj5BZHZlcnRp c2luZyBwcmFjdGljZXM8L2E+IHwgPGEgaHJlZj0iaHR0cDovL3d3dy5jbm5tZWRpYWluZm8uY29t LyIgcmVsPSJub2ZvbGxvdyI+QWR2ZXJ0aXNlIHdpdGggdXM8L2E+IHwgPGEgaHJlZj0iL2ludGxz eW5kaWNhdGlvbi8iPkxpY2Vuc2Ugb3VyIGNvbnRlbnQ8L2E+IHwgPGEgaHJlZj0iL2Fib3V0LyI+ QWJvdXQgdXM8L2E+IHwgPGEgaHJlZj0iL2ZlZWRiYWNrLyIgcmVsPSJub2ZvbGxvdyI+Q29udGFj dCB1czwvYT4gfCA8YSBocmVmPSJodHRwOi8vd3d3LnR1cm5lci5jb20vY2FyZWVycy8iIHJlbD0i bm9mb2xsb3ciPldvcmsgZm9yIHVzPC9hPiB8IDxhIGhyZWY9Ii9oZWxwLyIgcmVsPSJub2ZvbGxv dyI+SGVscDwvYT48L2Rpdj4KPGRpdiBjbGFzcz0iY25uX2Z0cmxuZ2djbnRyQm90Ij48YSBocmVm PSIvQ05OSS8iPkNOTiBUVjwvYT4gfCA8YSBocmVmPSIvSExOLyI+SExOPC9hPiB8IDxhIGhyZWY9 Imh0dHA6Ly90cmFuc2NyaXB0cy5jbm4uY29tL1RSQU5TQ1JJUFRTLyI+VHJhbnNjcmlwdHM8L2E+ PC9kaXY+CgoKPGRpdiBjbGFzcz0iY25uX2NsZWFyIj48L2Rpdj4KPC9kaXY+PCEtLSAvY25uX2Z0 cmNudG50aW5uZXIgLS0+CjwvZGl2PjwhLS0gL2Nubl9mdHJjbnRudCAtLT4KPHNjcmlwdCB0eXBl PSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVt ZW50L2pzLzMuMC93ZWF0aGVyLmZvb3Rlci5qcz8yMDEwMDgwMiI+PC9zY3JpcHQ+CjxzY3JpcHQ+ Cgl2YXIgY25uX2VkdG5zd3RjaHZlciA9ICJlZGl0aW9uIjsKPC9zY3JpcHQ+CjxzY3JpcHQgdHlw ZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29tL2Nubi8uZWxl bWVudC9qcy8zLjAvZWRpdGlvbi52YXJzLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0 L2phdmFzY3JpcHQiPgoJbXNRdWV1ZU1hbmFnZXIuaW5pdCgncmVxdWVzdEZyYW1lJywgbXNfYmxh bmtVUkwpOwo8L3NjcmlwdD4KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLy5l bGVtZW50L2pzLzMuMC9pbnRsL2VkaXRpb25fZm9vdGVyLmpzIj48L3NjcmlwdD4KPHNjcmlwdCB0 eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgppZihtc19pc0xvZ2dlZEluKCkpIHsKCUNOTl9zZXRDb29r aWUoJ0NOTl9tZW1iZXInLCB0cnVlLCA4NTQ0MDAsICcvJywgZG9jdW1lbnQuZG9tYWluKTsKfQo8 L3NjcmlwdD4KCgkKCjxzY3JpcHQgc3JjPSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVs ZW1lbnQvanMvMy4wL3NfY29kZS5pbnRsLmpzIiB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPjwvc2Ny aXB0Pgo8c2NyaXB0IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij4KPCEtLQovKioqKioqKioqKioqKiBE TyBOT1QgQUxURVIgQU5ZVEhJTkcgQkVMT1cgVEhJUyBMSU5FICEgKioqKioqKioqKioqKiovCmlm ICh0eXBlb2YoY25uT21uaVNlYXJjaFBhZ2UpID09ICJ1bmRlZmluZWQiKXsKdmFyIHNfY29kZT1z LnQoKTtpZihzX2NvZGUpZG9jdW1lbnQud3JpdGUoc19jb2RlKX0vLy0tPiAKCnRyeXt3aW5kb3cu b25sb2FkID0gY25uQ2hlY2tFbGVtZW50O31jYXRjaChlcnIpe30KPC9zY3JpcHQ+Cgo8c2NyaXB0 IGxhbmd1YWdlPSJKYXZhU2NyaXB0Ij48IS0tCmlmKG5hdmlnYXRvci5hcHBWZXJzaW9uLmluZGV4 T2YoJ01TSUUnKT49MClkb2N1bWVudC53cml0ZSh1bmVzY2FwZSgnJTNDJykrJ1whLScrJy0nKQov Ly0tPjwvc2NyaXB0Pgo8bm9zY3JpcHQ+PGltZwpzcmM9Imh0dHA6Ly9tZXRyaWNzLmNubi5jb20v Yi9zcy9jbm4yaW50bC8xL0guMS0tTlMvMD9wYWdlTmFtZT1ObyUyMEphdmFzY3JpcHQiCmhlaWdo dD0iMSIgd2lkdGg9IjEiIGJvcmRlcj0iMCIgYWx0PSIiIC8+PC9ub3NjcmlwdD48IS0tL0RPIE5P VCBSRU1PVkUvLS0+Cgo8IS0tIEVuZCBTaXRlQ2F0YWx5c3QgY29kZSAtLT4KCg0KDQo8c2NyaXB0 IHNyYz0iaHR0cDovL2kuY2RuLnR1cm5lci5jb20vY25uLy5lbGVtZW50L2pzLzMuMC9ocHNlY3Rp b250cmFja2luZy5qcyIgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij48L3NjcmlwdD4NCjxpbWcgc3Jj PSJodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vMS5naWYiIGFsdD0iIiBpZD0iVGFyZ2V0SW1h Z2VERSIgbmFtZT0iVGFyZ2V0SW1hZ2VERSIgd2lkdGg9IjEiIGhlaWdodD0iMSIgb25Mb2FkPSJn ZXRERUFkSGVhZENvb2tpZSh0aGlzKSI+PGltZyBzcmM9Imh0dHA6Ly9pLmNkbi50dXJuZXIuY29t L2Nubi9pbWFnZXMvMS5naWYiIGFsdD0iIiB3aWR0aD0iMCIgaGVpZ2h0PSIwIiBib3JkZXI9IjAi IHZzcGFjZT0iMCIgaHNwYWNlPSIwIiBuYW1lPSJjb29raWVDcnVtYiIgaWQ9ImNvb2tpZUNydW1i IiBhbGlnbj0icmlnaHQiPgk8ZGl2IGNsYXNzPSJjbm5fcGFkMTh0b3AiPjwvZGl2PjwvZGl2Pjwv ZGl2PjwvYm9keT48L2h0bWw+ --000e0cd17cd4e3d28e0491e6a29e Content-Type: text/plain; name="output.txt" Content-Disposition: attachment; filename="output.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gexdl04k1 Q05OLmNvbSBJbnRlcm5hdGlvbmFsIC0gQnJlYWtpbmcsIFdvcmxkLCBCdXNpbmVzcywgU3BvcnRz LCBFbnRlcnRhaW5tZW50IGFuZCBWaWRlbyBOZXdzCiogaHRtbCAjaGRyLWF1dGgsCiogaHRtbCAj cG1Vc2VyUGFuZWwKe2Rpc3BsYXk6bm9uZX0gCi5jbm5fc2hkY2FtdHQxIC5jbm5fbXRscGxub2Rl IHsgaGVpZ2h0OjEyNHB4OyB9CjxzY3JpcHQ+dmFyIGNubkN1cnJUaW1lID0gbmV3IERhdGUoMTI4 NjExOTEyNDU4MCk7IHZhciBjbm5DdXJySG91ciA9IDExOyB2YXIgY25uQ3Vyck1pbiA9IDE4OyB2 YXIgY25uQ3VyckRheT0nU3VuJzs8L3NjcmlwdD48c2NyaXB0Pjwvc2NyaXB0PjxzY3JpcHQ+PC9z Y3JpcHQ+PHNjcmlwdD48L3NjcmlwdD48c2NyaXB0Pjwvc2NyaXB0PjxzY3JpcHQ+PC9zY3JpcHQ+ PHNjcmlwdD48L3NjcmlwdD48c2NyaXB0Pjwvc2NyaXB0PjxzY3JpcHQ+PC9zY3JpcHQ+PHNjcmlw dD48L3NjcmlwdD48c2NyaXB0Pjwvc2NyaXB0PjxzY3JpcHQ+PC9zY3JpcHQ+PHNjcmlwdD48L3Nj cmlwdD48c2NyaXB0PgoJdmFyIGNubkNWUEFkU2VjdGlvbiA9ICdlZGl0aW9uLmNubi5jb21fbWFp bl9ob21lcGFnZSc7Cjwvc2NyaXB0PjxzY3JpcHQ+CiAgICAgdmFyIGNubklzU2VjdGlvblBhZ2Ug PSB0cnVlOwo8L3NjcmlwdD4KI2Nubl9tdHQxcmd0YXJlYSAuY25uX2J1bGxldGJpbiAuY25uV09P TCB7bWFyZ2luLXJpZ2h0OjRweDt9IAoKI2Nubl9tdHQxbGZ0YXJlYSB1bCB7IGxpc3Qtc3R5bGUt dHlwZTpub25lOyB9IC8qIHRoZSBGaXhlcyBub24gbGluayBidWxsZXRzIGluIFQxIGJsdXJiLiAy MDEwMDIyNyBQQkIgKi8KPHNjcmlwdD48L3NjcmlwdD48c2NyaXB0Pjwvc2NyaXB0PiAgIAoKCgkK CQkKCQkKCQoJCgkJCgkJCQoJCQkJCgkJCQkJQ05OCgkJCQkJCgkJCQkJCQoJCQkJCQoJCQkJCgkJ CQoJCQkKCQkJCQoJCQkJCUVESVRJT046IMKgSU5URVJOQVRJT05BTAoJCQkJCVUuUy4KCQkJCQlN w4lYSUNPCgkJCQkJQVJBQklDCgkJCQkKCQkJCVNldCBlZGl0aW9uIHByZWZlcmVuY2UKCQkJCgkJ CQoJCQkJCgkJCQkJU2lnbiB1cAoJCQkJCUxvZyBpbgoJCQkJCgkJCQoJCQkKCQkJCQoJCQkJCQoK CgoJCQkJCQoJCQkJCgo8c2NyaXB0PgoKLy9FdmVudC5vYnNlcnZlKHdpbmRvdywgJ2xvYWQnLCBm dW5jdGlvbigpIHsKCQkvLyQoJ2hkci1zZWFyY2gtYm94JykuZm9jdXMoKTsKCS8vfSk7CQoJCjwv c2NyaXB0PgoKCgojaGRyLWVkaXRpb25zIGEgeyB0ZXh0LWRlY29yYXRpb246bm9uZTsgfQojY25u X2hkci1lZGl0aW9uUyB7IHRleHQtYWxpZ246bGVmdDtjbGVhcjpib3RoOyB9CiNjbm5faGRyLWVk aXRpb25TIGEgeyB0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXNpemU6MTBweDt0b3A6N3B4O2xp bmUtaGVpZ2h0OjEycHg7Zm9udC13ZWlnaHQ6Ym9sZDsgfQojaGRyLXByb21wdC10ZXh0IGIgeyBk aXNwbGF5OmlubGluZS1ibG9jazttYXJnaW46MCAwIDAgMjBweDsgfQojaGRyLWVkaXRpb25zIGxp IHsgcGFkZGluZzowIDEwcHg7IH0KCiNoZHItZWRpdGlvbnMgdWwgbGkubm8tcGFkLWxlZnQgc3Bh biB7IGZvbnQtc2l6ZToxMnB4OyB9Ci5oZHItYXJyb3ctaW50bCwgLmhkci1hcnJvdy11cywgLmhk ci1hcnJvdy11czIgeyBsZWZ0OjE0OHB4OyB9Ci5oZHItYXJyb3ctdXMyIHsgbGVmdDoxODBweDsg fQoKCgoJCQkKCQkKCQoJCgkJCgkJCUhvbWUKCQkJVmlkZW8KCQkJV29ybGQKCQkJVS5TLgoJCQlB ZnJpY2EKCQkJQXNpYQoJCQlFdXJvcGUKCQkJTGF0aW4gQW1lcmljYQoJCQlNaWRkbGUgRWFzdAoJ CQlCdXNpbmVzcwoJCQlXb3JsZCBTcG9ydAoJCQlFbnRlcnRhaW5tZW50CgkJCVRlY2gKCQkJVHJh dmVsCgkJCWlSZXBvcnQKCQkKCQoKPHNjcmlwdD4KLy8gc3dpdGNoaW5nIGJhbm5lcnMgLSBmb3Ig c2VjdGlvbnMgcmVtb3ZlIHRoaXMgYW5kIGhhcmRjb2RlIHByb3BlciBnbG9iZSBpbWFnZQp2YXIg Y25uQ2RuUGF0aCA9ICdodHRwOi8vaS5jZG4udHVybmVyLmNvbS9jbm4vLmVsZW1lbnQvaW1nLzMu MC9nbG9iYWwvaGVhZGVyL2ludGwvJzsKdmFyIGNubkludGxCYW5uZXJzID0gWwoJJzxpbWcgc3Jj PSInICsgY25uQ2RuUGF0aCArICdoZHItZ2xvYmUtd2VzdC5naWYiIHdpZHRoPSIxOTAiIGhlaWdo dD0iODIiIGFsdD0iIj4nLAoJJzxpbWcgc3JjPSInICsgY25uQ2RuUGF0aCArICdoZHItZ2xvYmUt Y2VudHJhbC5naWYiIHdpZHRoPSIxOTAiIGhlaWdodD0iODIiIGFsdD0iIj4nLAoJJzxpbWcgc3Jj PSInICsgY25uQ2RuUGF0aCArICdoZHItZ2xvYmUtZWFzdC5naWYiIHdpZHRoPSIxOTAiIGhlaWdo dD0iODIiIGFsdD0iIj4nCl07CnZhciBjbm5STnVtID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgp ICogY25uSW50bEJhbm5lcnMubGVuZ3RoKTsKZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hkci1i YW5uZXItdGl0bGUnKS5pbm5lckhUTUwgPSBjbm5JbnRsQmFubmVyc1tjbm5STnVtXTsKPC9zY3Jp cHQ+CjxzY3JpcHQ+Cgo8L3NjcmlwdD4KCgoKCgo8c2NyaXB0Pgo8IS0tCnZhciBjbm5QYWdlTmFt ZSA9ICJDTk4gSW50ZXJuYXRpb25hbCBIb21lIFBhZ2UiOwp2YXIgY25uU2VjdGlvbk5hbWUgPSAi Q05OIEludGVybmF0aW9uYWwgSG9tZSBQYWdlIjsKdmFyIHNlbGVjdGVkRWRpdGlvbiA9IGFsbENv b2tpZXNbJ1NlbGVjdGVkRWRpdGlvbiddOwovLy0tPjwvc2NyaXB0PgoKICAgICAgIAoKPHNjcmlw dD4KQ1NJTWFuYWdlci5nZXRJbnN0YW5jZSgpLmNhbGwoJy8uZWxlbWVudC9zc2kvaW50bC9icmVh a2luZ19uZXdzLzMuMC9iYW5uZXIuaHRtbCcsJycsJ2NubkJhbm5lckNvbnRhaW5lcicsY25uUmVu ZGVySW50ZXJuYXRpb25hbEJhbm5lcik7Cjwvc2NyaXB0PgoKCgogICAgT2N0b2JlciAzLCAyMDEw IC0tIFVwZGF0ZWQgMTQzNSBHTVQgKDIyMzUgSEtUKSAgICAgICBDb21tb253ZWFsdGggR2FtZXMg b3BlbmluZyBjZXJlbW9ueSBiZWdpbnNUaGUgMjAxMCBDb21tb253ZWFsdGggR2FtZXMgZmluYWxs eSBvcGVuIFN1bmRheSBpbiBOZXcgRGVsaGksIGZvbGxvd2luZyBhIGJ1aWxkLXVwIGRvbWluYXRl ZCBieSBmZWFycyBJbmRpYSB3b3VsZCBub3QgYmUgcmVhZHkgdG8gaG9zdCB0aGUgc3BvcnRpbmcg c2hvd2Nhc2UuIEZVTEwgU1RPUlkgICAgICAgICAgIFJlbW92aW5nICdleWVzb3JlcycgZm9yIEdh bWVzICAgICAgICAgIFRvcCBzdG9yaWVzVS5TLiBpc3N1ZXMgRXVyb3BlIHRyYXZlbCBhbGVydCAg ICAgICBJcmFuIGFkbWl0cyB0byBhcnJlc3Qgb2YgJ251Y2xlYXIgc3BpZXMnICAgICAgIEV4LXJl YmVsIGFoZWFkIGFzIEJyYXppbGlhbnMgZ28gdG8gcG9sbHMgICAgICAgVGhyZWUgaGVsZCBvdmVy IE5pZ2VyaWEgdGVycm9yIGF0dGFjayAgICAgICBCb3NuaWFucyB2b3RlIGZvciBuZXcgcHJlc2lk ZW50ICAgICAgIFBhbGVzdGluaWFuIHNob3QgZGVhZCBieSBJc3JhZWxpIHBvbGljZSAgICAgICBT b2xkaWVycyBjb252aWN0ZWQgZm9yIEdhemEgYWN0aW9ucyAgICAgICBUaHJlZSAnc3BpZXMnIGtp bGxlZCBpbiBQYWtpc3RhbiAgICAgICBQcml2YXRlIHNlY3VyaXR5IGZpcm1zIGdpdmVuIEFmZ2hh biBiYW4gICAgICAgR3VpbmVhIHByZXNpZGVudGlhbCBydW5vZmYgZmFjZXMgZGVsYXlzICAgICAg IEd1bm1lbiBhYmR1Y3QgMjIgdG91cmlzdHMgaW4gTWV4aWNvICAgICAgIFBhcmFndWF5YW4gcHJl c2lkZW50IGhvc3BpdGFsaXplZCAgICAgICBMYXRlc3Q6IEV1cm9wZSBmaWdodHMgYmFjayBpbiBS eWRlciBDdXAgICAgICAgTWlubm93cyB0YWtlIEdlcm1hbiBmb290YmFsbCBieSBzdG9ybSAgICAg ICAgICAgICAKICAgQmVoaW5kIGV2ZXJ5IGdyZWF0IGdvbGZlciBpcy4uLlRoZSBtZW4gY29tcGV0 aW5nIGluIHRoaXMgd2Vla2VuZCdzIFJ5ZGVyIEN1cCBiZXR3ZWVuIEV1cm9wZSBhbmQgQW1lcmlj YSBtYXkgZ3JhYiB0aGUgYXR0ZW50aW9uIG9mIHRoZSB3b3JsZCdzIG1lZGlhLCBidXQgdGhlIHBs YXllcnMnIHdpdmVzIGhhdmUgYWx3YXlzIGhhZCBhIHJvbGUgdG8gcGxheSBpbiB0aGlzIGNvbXBl dGl0aW9uLiBGVUxMIFNUT1JZSElHSExJR0hUUyAgICBJcmFuIHNlZWtzIG1vcmUgTWlkZWFzdCBp bmZsdWVuY2UgICAgICAgICAgIEJyaXRhaW4ncyBkcnVpZHMgc3VtbW9uIGxvc3Qgc3RhdHVzICAg ICAgICAgICBTdGF0dWUgb2YgZ3JhbmRmYXRoZXIgb2YgS2luZyBUdXQgdW5lYXJ0aGVkICAgICAg ICAgICBDYW5hZGEncyA3NDAtY2Fsb3JpZSBuYXRpb25hbCBkaXNoICAgICAgICAgICBJcyB5b3Vy IGpvYiBtb3JlIGRlcHJlc3Npb24tcHJvbmU/ICAgICAgICAgICBDYW4geW91IGNvbm5lY3QgQ2hp bmEgYW5kIFR1cmtleT8gICAgICAgICAgCjwhLS0uY25uX3NlY3R0NGNudG50e292ZXJmbG93OiB2 aXNpYmxlO30uY25uT3BpbiB7IHBvc2l0aW9uOmFic29sdXRlO3RvcDotMThweDtyaWdodDo3cHg7 IH0uY25uT3BpbiBhLnJlYWxtTGluayB7Zm9udC13ZWlnaHQ6Ym9sZDtmb250LXNpemU6MTFweDtj b2xvcjojMDA0Mjc2O30tLT4KCgoKCgpNYWtlIENOTiBZb3VyIEhvbWVwYWdlCjxzY3JpcHQ+ClVB c3RyaW5nPW5hdmlnYXRvci51c2VyQWdlbnQ7CmlmIChVQXN0cmluZy5pbmRleE9mKCdpUGFkJyk+ LTEpeyQoJ21ha2VIUExpbmsnKS5oaWRlKCk7fQpmdW5jdGlvbiBjbm5NYWtlSFAoKSB7CmxpbmtU cmFja0NhbGwoJ01ha2UgQ05OIFlvdXIgSFAgQ2xpY2snKTsKaWYgKFVBc3RyaW5nLmluZGV4T2Yo J01TSUUnKT4tMSl7fQkKZWxzZXsKQ05OX2hhbmRsZU92ZXJsYXkoJ2hvbWVwYWdlX3NldF9vdmVy bGF5Jyl9Cn0KCmZ1bmN0aW9uIGxpbmtUcmFja0NhbGwobGlua1ZhbHVlKSB7CgkJdmFyIHM9c19n aShzX2FjY291bnQpOwoJCXMubGlua1RyYWNrVmFycz0nbm9uZSc7CgkJcy5saW5rVHJhY2tFdmVu dHM9J25vbmUnOwoJCXMudGwodGhpcywnbycsbGlua1ZhbHVlKQoJfQo8L3NjcmlwdD4KIAoNCg0K CQ0KCQkNCgkJCQ0KCQkNCgkJDQoJCQ0KDQoNCg0KDQoNCg0KDQo8c2NyaXB0Pg0KY25uYWRfY3Jl YXRlQWQoIjY5NjY0NCIsImh0dHA6Ly9hZHMuY25uLmNvbS9odG1sLm5nL3NpdGU9Y25uX2ludGVy bmF0aW9uYWwmY25uX2ludGxfcGFnZXR5cGU9bWFpbiZjbm5faW50bF9wb3NpdGlvbj0zMDB4MjUw X3JndCZjbm5faW50bF9yb2xsdXA9aG9tZXBhZ2UmcGFnZS5hbGxvd2NvbXBldGU9eWVzJnBhcmFt cy5zdHlsZXM9ZnMiLCIyNTAiLCIzMDAiKTsNCmNubmFkX3JlZ2lzdGVyU3BhY2UoNjk2NjQ0LDMw MCwyNTApOw0KPC9zY3JpcHQ+DQoNCg0KDQoNCg0KDQoNCg0KDQoNCgkJDQoJDQoNCg0KDQoNCg0K DQoKCgkKIAkNCgkgICAgDQoJCQ0KCSAgICAgICAgDQoJICAgICAgICBzZXR0aW5ncw0KCSAgICAg ICAgQ29ubmVjdCB5b3VyIENOTiAmIEZhY2Vib29rIGFjY291bnRzDQoJICAgIA0KCSAgICANCgkg ICAgICAgIEhpISBMb2cgaW4gb3Igc2lnbiB1cCB0byBwZXJzb25hbGl6ZSENCgkgICAgDQoJICAg IA0KCSAgICAgICAgSGkgdGhlcmUhTG9nIGluIHwgc2lnbiB1cA0KCSAgICANCg0KCQ0KCgkKCQoJ CgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAKCglQb3B1bGFyIG9uIEZhY2Vib29r CgnCoAoKCgoKCQoJCgkKCQoJCgkKCgkKCQlMb2cgaW4gd2l0aCBGYWNlYm9vayB0byBzZWUgeW91 ciBmcmllbmRzJyBhY3Rpdml0eSB8IFdoYXQncyB0aGlzPwoJCgkKCQlWaWV3IG1vcmUgZnJpZW5k cycgYWN0aXZpdHkgfCBXaGF0J3MgdGhpcz8KCQoJCgkJCgkJCQoJCQoJCQoJCQkKCQkJCQoJCQkJ CgkJCQoJCQkKCQkJCgkJCQkKCQkJCQnCoAoJCQkJCgkJCQoJCQkKCQkKCQoKCgogICAgICAgICAg ICAgICAgCgkJCgkJCgkJDQoJTW9zdCBQb3B1bGFyDQoJwqANCg0KDQoNCgkNCgkJCgrigKJUcmF2 ZWwgYWxlcnQgaXNzdWVkIGZvciBVLlMuIGNpdGl6ZW5zIGluIEV1cm9wZQoKCgoKCgoK4oCiQ2hp bmEgYWNjdXNlZCBvZiBpbnZhZGluZyBkaXNwdXRlZCBpc2xhbmRzCgoKCgoKCgrigKJIb3VzZSBw YXNzZXMgYmlsbCB0byBoZWxwIDkvMTEgZmlyc3QgcmVzcG9uZGVycwoKCgoKCgoK4oCiVS5TLiBp c3N1ZXMgYWxlcnQgZm9yIEFtZXJpY2FucyBpbiBFdXJvcGUKCgoKCgoKCuKAoldpdGhvdXQgYSBj aGFpciBhdCB0aGUgdGFibGUsIElyYW4gc2Vla3MgaW5mbHVlbmNlIG5vbmV0aGVsZXNzCgoKCgoK CgrigKJBZmdoYW4gb2ZmaWNpYWxzOiBOQVRPIGFpcnN0cmlrZSBraWxscyBUYWxpYmFuIGluc3Vy Z2VudHMsIGNpdmlsaWFucwoKCgoKCg0KCQ0KCQ0KCQkNCgkNCg0KDQoJICAgIAkgICAgCgkJCgkJ CgkJCgkJCQkNCgkJCVdlYXRoZXINCgkJCcKgDQoJCQ0KCQkNCgkJDQoJDQoJCQkNCgkJCQ0KCQkJ CQ0KCQkJCQkNCgkJCQkJCQ0KCQkJCQkJCQ0KCQkJCQkJCQlFZGl0IGxvY2F0aW9uDQoJCQkJCQkJ DQoJCQkJCQkJR28NCgkJCQkJCQ0KCQkJCQkJDQoJCQkJCQ0KCQkJCQ0KCQkJDQoJCQkNCgkJCQ0K CQkJDQoJCQkNCgkJCQ0KCQkJDQoJCQkNCgkJCQkNCgkgICAgCgkJCgkJCgkJCgkJCQkNCgkJCU1h cmtldHMNCgkJCcKgDQoJCQ0KCQkNCgkJCQoJCgkgICAgCgkgICAgICAgIFVwZGF0ZWQgMTUxOCBH TVQsIE9jdCAzCiAgICAgICAgICAgIGFsbCBtYXJrZXRzwrsKCSAgICAKICAgICAgIAlBc2lhCiAg ICAgICAgRXVyb3BlCiAgICAgICAgVXMKCQoJCgkKCQkJIAoJCQkgICAgIAoJCQkgICAgICAgIEhh bmcgU2VuZwoJCQkgICAgICAgIDIyLDM1OC4xNwoJCQkgICAgCgkJCSAgICAKCQkJCQlDbG9zZWQK CQkJICAgICAgICAKCQkJICAgICAgICAgICAgKC0wLjA5JSkKCQkJICAgICAgICAKCQkJICAgICAg ICAKCQkJICAgICAgICAgICAgLTIwLjUKCQkJICAgICAgICAKCQkJICAgIAoJCQkKCQkJIAoJCQkg ICAgIAoJCQkgICAgICAgIE5pa2tlaQoJCQkgICAgICAgIDksNDA0LjIzCgkJCSAgICAKCQkJICAg IAoJCQkJCUNsb3NlZAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAoKzAuMzclKQoJCQkgICAg ICAgIAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICArMzQuODgKCQkJICAgICAgICAKCQkJICAg IAoJCQkKCQkJIAoJCQkgICAgIAoJCQkgICAgICAgIEFTWCAxMDAKCQkJICAgICAgICA0LDYzNC43 MAoJCQkgICAgCgkJCSAgICAKCQkJCQlDbG9zZWQKCQkJICAgICAgICAKCQkJICAgICAgICAgICAg KC0wLjA1JSkKCQkJICAgICAgICAKCQkJICAgICAgICAKCQkJICAgICAgICAgICAgLTIuMgoJCQkg ICAgICAgIAoJCQkgICAgCgkJCQoJCgkKCQoJCgkJCSAKCQkJICAgICAKCQkJICAgICAgICBGVFNF IDEwMAoJCQkgICAgICAgIDUsNTkyLjkwCgkJCSAgICAKCQkJICAgIAoJCQkJCUNsb3NlZAoJCQkg ICAgICAgIAoJCQkgICAgICAgICAgICAoKzAuODAlKQoJCQkgICAgICAgIAoJCQkgICAgICAgIAoJ CQkgICAgICAgICAgICArNDQuMjgKCQkJICAgICAgICAKCQkJICAgIAoJCQkKCQkJIAoJCQkgICAg IAoJCQkgICAgICAgIENBQyA0MAoJCQkgICAgICAgIDMsNjkyLjA5CgkJCSAgICAKCQkJICAgIAoJ CQkJCUNsb3NlZAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAoLTAuNjIlKQoJCQkgICAgICAg IAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAtMjMuMDkKCQkJICAgICAgICAKCQkJICAgIAoJ CQkKCQkJIAoJCQkgICAgIAoJCQkgICAgICAgIERBWAoJCQkgICAgICAgIDYsMjExLjM0CgkJCSAg ICAKCQkJICAgIAoJCQkJCUNsb3NlZAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAoLTAuMjgl KQoJCQkgICAgICAgIAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAtMTcuNjgKCQkJICAgICAg ICAKCQkJICAgIAoJCQkKCQoJCgkKCQoJCQkgCgkJCSAgICAgCgkJCSAgICAgICAgRG93CgkJCSAg ICAgICAgMTAsODI5LjY4CgkJCSAgICAKCQkJICAgIAoJCQkJCUNsb3NlZAoJCQkgICAgICAgIAoJ CQkgICAgICAgICAgICAoKzAuMzklKQoJCQkgICAgICAgIAoJCQkgICAgICAgIAoJCQkgICAgICAg ICAgICArNDEuNjMKCQkJICAgICAgICAKCQkJICAgIAoJCQkKCQkJIAoJCQkgICAgIAoJCQkgICAg ICAgIE5hc2RhcQoJCQkgICAgICAgIDIsMzcwLjc1CgkJCSAgICAKCQkJICAgIAoJCQkJCUNsb3Nl ZAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAoKzAuMDklKQoJCQkgICAgICAgIAoJCQkgICAg ICAgIAoJCQkgICAgICAgICAgICArMi4xMwoJCQkgICAgICAgIAoJCQkgICAgCgkJCQoJCQkgCgkJ CSAgICAgCgkJCSAgICAgICAgUyZQIDUwMAoJCQkgICAgICAgIDEsMTQ2LjI0CgkJCSAgICAKCQkJ ICAgIAoJCQkJCUNsb3NlZAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICAoKzAuNDQlKQoJCQkg ICAgICAgIAoJCQkgICAgICAgIAoJCQkgICAgICAgICAgICArNS4wNAoJCQkgICAgICAgIAoJCQkg ICAgCgkJCQoJCgkKCQkJCQkKICAgICAgICAgICAgICAgIAoKIA0KICAgICAgICAJICAgIAoJCQoJ CQoJCgkKCgoKCjxzY3JpcHQ+DQoJRXZlbnQub2JzZXJ2ZSh3aW5kb3csICdsb2FkJywgZnVuY3Rp b24oKSB7DQoJCU1haW5Mb2NhbE9iai5pbml0KCk7DQoJfSk7CQkNCjwvc2NyaXB0Pg0KCgoNCg0K DQoNCiAgIEVkaXRvcidzIENob2ljZUhpZ2hsaWdodHNDb25uZWN0b3Igb2YgdGhlIERheSAgICBD b29sZXN0IGNhcnMgYXQgUGFyaXMgTW90b3IgU2hvdyAgICBHYW1lIHJlbW92ZXMgJ1RhbGliYW4n IG9wdGlvbiAgICBOYXZ5IHN1cmdlb25zJyBvZGQgdHJlYXRtZW50cyAgICAnRGFyayBjaGFwdGVy JyBvZiBtZWRpY2FsIHJlc2VhcmNoICAgIEVneXB0aWFuIHdvbWVuIGRyaXZlIHRheGlzICAgIFUu Uy4tQ2hpbmEgcmlmdCAnY2F0YXN0cm9waGljJyAgICAgTWljaGFlbCBDYWluZSBvbiAnSW5jZXB0 aW9uJyAgICAgIEZlbWluaXNtICdnb25lIGJvbmtlcnMnPyAgICBTaHV0dGxlIGxheW9mZnMgc2V0 IHdvcmtlcnMgYWRyaWZ0ICAgIFRoZSBjaGVmIHNlcnZpbmcgQWZyaWNhIG9uIGEgcGxhdGUgICAg TmlnZXJpYW4gbGVhZGVyIG9uIHBvd2VyIGFuZCB2aW9sZW5jZSAgICBZZW1lbidzIGRpdm9yY2Vk IGNoaWxkIGJyaWRlcyAgICAgUnlkZXIgQ3VwOiBUaGluZ3MgeW91IGRvbid0IGtub3cgICAgRXVy b3BlYW4gYnVzaW5lc3Mgc2Nob29scyB0cmFpbCBVLlMuICAgIEF1dG8gaW5kdXN0cnkgZXllcyBl bGVjdHJpYyBtYXJrZXQgICAgIENoaW5hJ3MgYmlsbGlvbmFpcmVzIHNoYXJlIHRoZSB3ZWFsdGg/ ICAgIEEgJ05vYmVsJyBpZGVhOiBTb2NpYWwgYnVzaW5lc3MgICAgJ1RoZSB3b3JzdCBwbGFjZSB0 byBiZSBhIHdvbWFuJyAgICA8c2NyaXB0PgoKCgl2YXIgQ05OX2dhbGxlcnlfMF9hZF8wID0gIi9j bm5fYWRzcGFjZXMvMy4wL2hvbWVwYWdlL21haW4vYm90MS4xMjB4OTAuYWQiOyAvL3BhdGggdG8g YWQgZmlsZQoJdmFyIENOTl9nYWxsZXJ5XzBfYWRfMSA9ICIvY25uX2Fkc3BhY2VzLzMuMC9ob21l cGFnZS9tYWluL2JvdDIuMTIweDkwLmFkIjsgLy9wYXRoIHRvIGFkIGZpbGUKCXZhciBDTk5fZ2Fs bGVyeV8wX2FkXzIgPSAiL2Nubl9hZHNwYWNlcy8zLjAvaG9tZXBhZ2UvbWFpbi9ib3QzLjEyMHg5 MC5hZCI7IC8vcGF0aCB0byBhZCBmaWxlCgoJdmFyIENOTl9nYWxsZXJ5XzFfYWRfMCA9ICIvY25u X2Fkc3BhY2VzLzMuMC9ob21lcGFnZS9tYWluL2JvdDQuMTIweDkwLmFkIjsgLy9wYXRoIHRvIGFk IGZpbGUKCXZhciBDTk5fZ2FsbGVyeV8xX2FkXzEgPSAiL2Nubl9hZHNwYWNlcy8zLjAvaG9tZXBh Z2UvbWFpbi9ib3Q1LjEyMHg5MC5hZCI7IC8vcGF0aCB0byBhZCBmaWxlCgl2YXIgQ05OX2dhbGxl cnlfMV9hZF8yID0gIi9jbm5fYWRzcGFjZXMvMy4wL2hvbWVwYWdlL21haW4vYm90Ni4xMjB4OTAu YWQiOyAvL3BhdGggdG8gYWQgZmlsZQoKCXZhciBDTk5fZ2FsbGVyeV8yX2FkXzAgPSAiL2Nubl9h ZHNwYWNlcy8zLjAvaG9tZXBhZ2UvbWFpbi9ib3Q3LjEyMHg5MC5hZCI7IC8vcGF0aCB0byBhZCBm aWxlCgl2YXIgQ05OX2dhbGxlcnlfMl9hZF8xID0gIi9jbm5fYWRzcGFjZXMvMy4wL2hvbWVwYWdl L21haW4vYm90OC4xMjB4OTAuYWQiOyAvL3BhdGggdG8gYWQgZmlsZQoJdmFyIENOTl9nYWxsZXJ5 XzJfYWRfMiA9ICIvY25uX2Fkc3BhY2VzLzMuMC9ob21lcGFnZS9tYWluL2JvdDkuMTIweDkwLmFk IjsgLy9wYXRoIHRvIGFkIGZpbGUKCglpZiAoICQoJ2Nubl9HYWxsZXJ5U2xpZGVyQ29udGFpbmVy JykgKSB7CgkJY25uX1NlY3Rpb25HYWxsZXJ5ID0gbmV3IGNubl9HYWxsZXJ5U2xpZGVyKCk7Cgl9 Cgo8L3NjcmlwdD4KICAgCgoJCgoKCSBCdXNpbmVzcyBVLlMuLUNoaW5hIHJpZnQgd291bGQgYmUg J2NhdGFzdHJvcGhpYydBdXRvIFNob3c6IFBhcmlzIGlzIGVsZWN0cmljIFRyYWRpbmcgcHJvYmxl bSBjYXVzZWQgJ2ZsYXNoIGNyYXNoJ0NvbnRpbmVudGFsLCBVbml0ZWQgbWVyZ2VOQVNBIHdvcmtl cnMgZmFjZSBsYXlvZmZzR29sZCBBVE1zIGNvbWluZyB0byBVLlMuSWtlYSByZXZlYWxzIHByb2Zp dHMgZm9yIGZpcnN0IHRpbWUgICAKCgoKCgkgV29ybGQgU3BvcnQgQ29tbW9ud2VhbHRoIEdhbWVz IG9wZW5pbmdNb3RvcnNwb3J0OiBTZXZlbiBzdHJhaWdodCBmb3IgTG9lYlRlbm5pczogTmFkYWwn cyBjb25xdWVyb3Igd2lucyB0aXRsZUdvbGY6IEV1cm9wZSBpbiBmaWdodGJhY2tGb290YmFsbDog TWlsYW4gZ28gdG9wOyBWYWxlbmNpYSB3aW5Gb290YmFsbDogTWFuIFVuaXRlZCBoZWxkOyBTcHVy cyB3aW5Gb290YmFsbDogU2V2ZW50aCBoZWF2ZW4gZm9yIE1haW56ICAgCgoKCgoJIERhaWx5IFNu YXBzaG90ICAgICBUaGUgY2F0J3Mgd2hpc2tlcnMgU2VuZCB5b3VyIGltYWdlcyB0byBpUmVwb3J0 ICAgCgoKDQoNCg0KDQoNCg0KDQoNCjxzY3JpcHQ+DQpjbm5hZF9jcmVhdGVBZCgiOTM5MTQ5Iiwi aHR0cDovL2Fkcy5jbm4uY29tL2h0bWwubmcvc2l0ZT1jbm5faW50ZXJuYXRpb25hbCZjbm5faW50 bF9wb3NpdGlvbj04OHgzMV9zcG9uX2RhaWx5c25hcCZjbm5faW50bF9yb2xsdXA9aG9tZXBhZ2Um cGFnZS5hbGxvd2NvbXBldGU9eWVzJnBhcmFtcy5zdHlsZXM9ZnMiLCIzMSIsIjg4Iik7DQpjbm5h ZF9yZWdpc3RlclNwYWNlKDkzOTE0OSw4OCwzMSk7DQo8L3NjcmlwdD4NCg0KDQoNCg0KDQoNCg0K DQoNCgoKCgoKCgoJCgkJQ05OIFRWCgkJCgkJCgkJCQkJCQoJCQoKCQoJCgkJSXMgWW91ciBIZXJv IG9uIHRoZSBMaXN0P1ZvdGUgTm93IQoJCgoKV2hvIHdpbGwgYmUgdGhlIDIwMTAgQ05OIEhlcm8g b2YgdGhlIFllYXI/IE1lZXQgdGhlIFRvcCAxMCBIZXJvZXMgJiBWb3RlIGZvciB5b3VyIGZhdm9y aXRlIG5vdyEgQ2xpY2sgaGVyZSBmb3IgbW9yZSEKCgoJCgkKCQoJCQpQcm9ncmFtcwotLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpTY2hlZHVsZQotLS0tLSBH TE9CQUwgTkVXUyAtLS0tLQpDb25uZWN0IFRoZSBXb3JsZApJbnRlcm5hdGlvbmFsIERlc2sKV29y bGQgT25lCldvcmxkIFZpZXcKLS0tLS0gTkVXUyBGRUFUVVJFUyAtLS0tLQpCYWNrU3RvcnkKaS1M aXN0CkltcGFjdCBZb3VyIFdvcmxkCkluc2lkZSBBZnJpY2EKSW5zaWRlIHRoZSBNaWRkbGUgRWFz dAppUmVwb3J0IGZvciBDTk4KUG9saXRpY2FsIE1hbm4KVGhlIFNpdHVhdGlvbiBSb29tCldvcmxk J3MgVW50b2xkIFN0b3JpZXMKLS0tLS0gQlVTSU5FU1MgTkVXUyAtLS0tLQpNYXJrZXRwbGFjZSBB ZnJpY2EKTWFya2V0cGxhY2UgTWlkZGxlIEVhc3QKUXVlc3QgTWVhbnMgQnVzaW5lc3MKLS0tLS0g QlVTSU5FU1MgRkVBVFVSRVMgLS0tLS0KQnVzaW5lc3MgVHJhdmVsbGVyCi0tLS0tIElOVEVSVklF VyBhbmQgREVCQVRFIC0tLS0tCkFmcmljYW4gVm9pY2VzCkZhcmVlZCBaYWthcmlhIEdQUwpJbnRl cm5hdGlvbmFsIENvcnJlc3BvbmRlbnRzCkxhcnJ5IEtpbmcgTGl2ZQpTdGF0ZSBvZiB0aGUgVW5p b24KVGFsayBBc2lhCi0tLS0tIFNQT1JUUyAtLS0tLQpMaXZpbmcgR29sZgpNYWluU2FpbApPcGVu IENvdXJ0CldvcmxkIFNwb3J0Ci0tLS0tIExJRkVTVFlMRSAtLS0tLQpDTk5HbwpFYXJ0aCdzIEZy b250aWVycwpFY28gU29sdXRpb25zCmljb24KUmV2ZWFsZWQKVGhlIFNjcmVlbmluZyBSb29tCgoK CQoJQ05OIFRWIFNjaGVkdWxlIMKgfMKgIFdoYXQncyBvbj8KCgoKCgoKCgoKCgoKCSBFbnZpcm9u bWVudCBTdHVkeTogT25lIGluIGZpdmUgcGxhbnRzIGluIHBlcmlsIFJ1c3NpYSdzIHZpc2lvbiBm b3IgQXJjdGljIHdlYWx0aCBIdWdlIG9mZnNob3JlIHdpbmQgZmFybSBvcGVucyBTY2llbnRpc3Rz IHRydW1wZXQgJ3NocmV3JyBmaW5kIFNjaWVudGlzdHM6IFNlcmVuZ2V0aSBvbiByb2FkIHRvIHJ1 aW4gQmFsbG9vbiBoZWxwcyBQYXJpc2lhbnMgYnJlYXRoZSBlYXN5IEVuZGFuZ2VyZWQgJ3VuaWNv cm4nIGNhcHR1cmVkICAgICAgICAgICAKCgoKCgoJIFRlY2hub2xvZ3kgV2FyIGdhbWUgYXhlcyAn VGFsaWJhbicgb3B0aW9uJ1NvY2lhbCBOZXR3b3JrJyBzdGFycyBkaXNjdXNzIGZpbG12Q2hhdHRl cjogVGhlIGxlc3MtbmFrZWQgQ2hhdHJvdWxldHRlMyBzZW1pLXNlY3JldCBBcHBsZSBUViBmZWF0 dXJlc0ZhY2Vib29rIHVwZ3JhZGVzIGl0cyBwaG90byBmZWF0dXJlVGVjaCBrZWVwcyBtb3ZpZXMs IFRWIHJlbGV2YW50QnJvd3NlIHRoZSBXZWIsIGVhcm4gcG9pbnRzICAgCgoKCgoJIGktTGlzdCA6 IE5pZ2VyaWEgRmlyc3QgYmlsbGlvbmFpcmUgY2VtZW50cyBoaXMgZm9ydHVuZSAgTmlnZXJpYSdz IGNlbGVicml0eSBibG9nZ2VyIE5pZ2VyaWE6IEVjb25vbWljIHBvd2VyaG91c2UgIEJ1c2luZXNz IG9mIG1vYmlsZXMgaW4gTmlnZXJpYSBHYWxsZXJ5OiBOaWdlcmlhJ3MgcGVvcGxlIGFuZCBwbGFj ZXMgUXVpejogVGVzdCB5b3VyIGtub3dsZWRnZSBZb3VuZyB3cml0ZXJzIHN0YXJ0IG5ldyBjaGFw dGVyICAgIAoJCgkJDQoNCg0KDQoNCg0KDQo8c2NyaXB0Pg0KY25uYWRfY3JlYXRlQWQoIjk1MDAz MiIsImh0dHA6Ly9hZHMuY25uLmNvbS9odG1sLm5nL3NpdGU9Y25uX2ludGVybmF0aW9uYWwmY25u X2ludGxfcG9zaXRpb249ODh4MzFfc3Bvbl9pbGlzdCZjbm5faW50bF9yb2xsdXA9aG9tZXBhZ2Um cGFnZS5hbGxvd2NvbXBldGU9bm8mcGFyYW1zLnN0eWxlcz1mcyIsIjAiLCIwIik7DQpjbm5hZF9y ZWdpc3RlclNwYWNlKDk1MDAzMiwwLDApOw0KPC9zY3JpcHQ+DQoNCg0KDQoNCgoJCgoKCgoJUXVp Y2t2b3RlPHNjcmlwdD4gdmFyIHF2cV9jb3VudCA9IDA7IDwvc2NyaXB0PgoKCgoKCkRvZXMgeW91 ciBqb2IgbWFrZSB5b3UgZmVlbCBkZXByZXNzZWQ/CgoKCiBZZXMKPHNjcmlwdD4gcXZxX2NvdW50 Kys7IDwvc2NyaXB0PgogTm8KPHNjcmlwdD4gcXZxX2NvdW50Kys7IDwvc2NyaXB0PgogV2hhdCBq b2I/CjxzY3JpcHQ+IHF2cV9jb3VudCsrOyA8L3NjcmlwdD4KCgoKCgoKb3IgdmlldyByZXN1bHRz CgoKCgoKPHNjcmlwdD4KCgl2YXIgcXZfc3VibWl0dGVkXzUzMjcxOwoJZnVuY3Rpb24gcXZTdWJt aXRWb3RlXzUzMjcxKCkgeyBxdl9zdWJtaXR0ZWRfNTMyNzEgPSAxOyQoJ3F2X3BvbGxfNTMyNzEn KS5zdWJtaXQoKTtxdkdldFJlc3VsdHNfNTMyNzEoKTsgfQoJZnVuY3Rpb24gcXZHZXRSZXN1bHRz XzUzMjcxKCkgeyAKCQoJCQlDU0lNYW5hZ2VyLmdldEluc3RhbmNlKCkuY2FsbCgnaHR0cDovXC93 d3cuY25uLmNvbS9QT0xMU0VSVkVSL3Jlc3VsdHMvNTMyNzEuY29udGVudC5odG1sJywgJycsICdj bm5RVl9Db250ZW50XzUzMjcxJywgY25uX3F2QlBIVE1MXzUzMjcxLCB0cnVlKTsKCQoJfQoJCglm dW5jdGlvbiBjbm5fcXZCUEhUTUxfNTMyNzEob2JqLCBpZCwgY29uZmlnT2JqKSB7CgkKCQl2YXIg cXZ0ZW1wX2FyciA9IG5ldyBBcnJheSgpOwoJCWZvcihpPTE7aSA8PSBxdnFfY291bnQ7aSsrKSB7 IHF2dGVtcF9hcnJbKGkgLSAxKV0gPSB7ICdhX3R4dCcgOiAkKCdjbm5Qb2xsX1ExTCcgKyBpKS5p bm5lckhUTUwsICd2b3RlX2MnIDogcGFyc2VJbnQob2JqLnBvbGxfdmFsdWVzW2ldLnZvdGVfY291 bnQpLCAndm90ZV9wJyA6IHBhcnNlSW50KG9iai5wb2xsX3ZhbHVlc1tpXS52b3RlX3BlcmNlbnQp IH07IH0KCQlxdnRlbXBfYXJyLnNvcnQoY25uX3F2Q29tcFJlcyk7CgkJcmV0dXJuIGNubl9xdkJS ZXNIVE1MKG9iaiwgcXZ0ZW1wX2FyciwgJzUzMjcxJyk7CgkJCgl9CgkKCQoJZnVuY3Rpb24gY25u X3F2QlJlc0hUTUwob2JqLCBxdl9hcnIsIHBvbGxfaWQpIHsKCQoJCXZhciBxdnRlbXBfaHRtbCA9 ICc8ZGl2IGNsYXNzPSJjbm5fcXZidjE0Ij4nOwoJCXF2dGVtcF9odG1sICs9ICc8ZGl2IGNsYXNz PSJjbm5fcXZidjE2Ij4nOwoJCXF2dGVtcF9odG1sICs9ICc8aDU+JyArICQoJ2NublFWX3F1ZXNU eFQnKS5pbm5lckhUTUwgKyAnJzsKCQlpZihvYmoucmVsYXRlZF9zdG9yeSkgeyBxdnRlbXBfaHRt bCArPSAnPGRpdiBjbGFzcz0iY25uX3F2YnY1Ij48YSBocmVmPSInICsgb2JqLnJlbGF0ZWRfc3Rv cnkgKyAnIj5SZWFkIFJlbGF0ZWQgQXJ0aWNsZXM8L3NjcmlwdD4nOyB9CgkJcXZ0ZW1wX2h0bWwg Kz0gJyc7CgkJcXZ0ZW1wX2h0bWwgKz0gJ1RoaXMgaXMgbm90IGEgc2NpZW50aWZpYyBwb2xsJzsK CQlxdnRlbXBfaHRtbCArPSAnJzsKCQkKCQlxdnRlbXBfaHRtbCArPSAnJzsKCgoJCWZvcihpPTA7 aSAnOwoJCQlxdnRlbXBfaHRtbCArPSAnJyArIHF2X2FycltpXS5hX3R4dCArICcnOwoJCQlxdnRl bXBfaHRtbCArPSAnJzsKCQkJcXZ0ZW1wX2h0bWwgKz0gJycgKyBxdl9hcnJbaV0udm90ZV9wICsg JyUnOwoJCQlxdnRlbXBfaHRtbCArPSAnJyArIHF2X2FycltpXS52b3RlX2MgKyAnJzsKCQkJcXZ0 ZW1wX2h0bWwgKz0gJyc7CgkJCXF2dGVtcF9odG1sICs9ICcnOwoKCQl9CgkJCgkJcXZ0ZW1wX2h0 bWwgKz0gJ1RvdGFsIHZvdGVzOiAnICsgb2JqLnRvdGFsX3ZvdGVfY291bnQgKyAnJzsKCQlxdnRl bXBfaHRtbCArPSAnVGhpcyBpcyBub3QgYSBzY2llbnRpZmljIHBvbGwnOwoJCQoJCXF2dGVtcF9o dG1sICs9ICcnOwoKCQlyZXR1cm4gcXZ0ZW1wX2h0bWw7CgkJCgl9CgkKCWZ1bmN0aW9uIGNubl9x dkNvbXBSZXMoYSwgYikgeyByZXR1cm4gYi52b3RlX2MgLSBhLnZvdGVfYzsgfQoJCgoKCgoKCgoK CgoKCgoKCgoJIEVudGVydGFpbm1lbnQgVFYgcHJvZHVjZXIgU3RlcGhlbiBKLiBDYW5uZWxsIGRp ZXNHYWxsZXJ5OiBDcmVlcGllc3Qga2lkcyBpbiBob3Jyb3IgbW92aWVzV2hlcmUgaW4gdGhlIHdv cmxkIGlzIFJvbiBCdXJndW5keT8nU2lzdGVyIFdpdmVzJzogV2UncmUgbm9ybWFsICdUaGUgU29j aWFsIE5ldHdvcmsnIGRlc2VydmVzIHRvIGdvIHZpcmFsT3ByYWggZmVhcmVkIG1ha2luZyBqdW1w Sm9uIFN0ZXdhcnQ6IEl0J3Mgbm90IGFib3V0IEdsZW5uIEJlY2sgICAKCgoKCgkgVHJhdmVsIFUu Uy4gbWF5IGlzc3VlIHRyYXZlbCBhbGVydCBmb3IgRXVyb3BlQ2l0eSBndWlkZTogQ3VsdHVyYWws IGhpcCBCZXJsaW5SYWlzZSB5b3VyIGdsYXNzZXMhIEZpdmUgZmFsbCBiZWVyIGZlc3RzSG9uZyBL b25nJ3MgZ2FyaXNoIG5lb24gc2lnbnM2IGRpZSBpbiBjcmFzaCBuZWFyIFBlcnUncyBOYXpjYSBM aW5lc0d1bm1lbiBhYmR1Y3QgMjIgdG91cmlzdHMgaW4gTWV4aWNvTW9yZSBsdXh1cnkgaG90ZWxz IG9wZW4gaW4gQmFuZ2tvayAgIAoKCgoKCSBPcGluaW9uIFRoZSBhbWF6aW5nIHBvd2VyIG9mIG5l dHdvcmtzSG9tZSBpbnZhc2lvbiB2aWN0aW0ncyBvcmRlYWwgZ29lcyBvbldoeSBkaWQgVHlsZXIg Q2xlbWVudGkgZGllP1UuUy4tQ2hpbmEgc3BsaXQgd291bGQgYmUgYSBjYXRhc3Ryb3BoZU5pZ2Vy aWEgbmVlZHMgbW9yZSB0aGFuIG5ldyBsZWFkZXJzV2h5IG5vIHByYXllcnMgZm9yIExvbmcncyBh Y2N1c2Vycz9EYW5nZXJzIGluIGFjdGl2aXN0IGpvdXJuYWxpc20gICAKCgoKCgoKCgoKCgoJCgkJ CgkJCQ0KDQoNCg0KDQoNCg0KDQo8c2NyaXB0Pg0KY25uYWRfY3JlYXRlQWQoIjIyMzQwOSIsImh0 dHA6Ly9hZHMuY25uLmNvbS9odG1sLm5nL3NpdGU9Y25uX2ludGVybmF0aW9uYWwmY25uX2ludGxf cGFnZXR5cGU9bWFpbiZjbm5faW50bF9wb3NpdGlvbj03Mjh4OTBfYm90JmNubl9pbnRsX3JvbGx1 cD1ob21lcGFnZSZwYWdlLmFsbG93Y29tcGV0ZT15ZXMmcGFyYW1zLnN0eWxlcz1mcyIsIjkwIiwi NzI4Iik7DQpjbm5hZF9yZWdpc3RlclNwYWNlKDIyMzQwOSw3MjgsOTApOw0KPC9zY3JpcHQ+DQoN Cg0KDQoNCg0KDQoNCg0KDQoKCQkJCgkJCgkKCgoKCgoKCkhvdCB0b3BpY3MKCgoKCgoKCU1pbmlu ZyBhY2NpZGVudHMgYW5kIGRpc2FzdGVycyBOb3J0aCBLb3JlYSBJcmFuIExhZHkgR2FnYSBGb290 YmFsbCBQYWtpc3RhbiBFbnZpcm9ubWVudCBBZmdoYW5pc3RhbiBBcHBsZSBDaGluYSAKCgoKCgoK CgoKCgoKCgoKCgoKCgoKCgoKICAgIA0KDQoKCgoKCUxvYWRpbmcgd2VhdGhlciBkYXRhIC4uLgoK CgoJCgoKCQoKCgoKCgkJCgoKCgkKCgoKCgoKCgpIb21lIHwgVmlkZW8gfCBXb3JsZCB8IFUuUy4g fCBBZnJpY2EgfCBBc2lhIHwgRXVyb3BlIHwgTGF0aW4gQW1lcmljYSB8IE1pZGRsZSBFYXN0IHwg QnVzaW5lc3MgfCBXb3JsZCBTcG9ydCB8IEVudGVydGFpbm1lbnQgfCBUZWNoIHwgVHJhdmVsIHwg aVJlcG9ydAoKVG9vbHMgJiBXaWRnZXRzIHwgUlNTIHwgUG9kY2FzdHMgfCBCbG9ncyB8IENOTiBN b2JpbGUgfCBNeSBQcm9maWxlIHwgRS1tYWlsIEFsZXJ0cyB8IENOTiBSYWRpbyB8IENOTiBTaG9w IHwgU2l0ZSBtYXAgfCBDTk4gUGFydG5lciBIb3RlbHMgfCBDTk4gVHJhdmVsbGVyCgoKCgoKCkNO TiBlbiBFU1BBw5FPTCB8IENOTiBDaGlsZSB8IENOTiBNw6l4aWNvIHwgIHwgIHwgIHwgCgoKCgrC qSAyMDEwIENhYmxlIE5ld3MgTmV0d29yay4gVHVybmVyIEJyb2FkY2FzdGluZyBTeXN0ZW0sIElu Yy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KCgpUZXJtcyBvZiBzZXJ2aWNlIHwgUHJpdmFjeSBndWlk ZWxpbmVzIHwgQWR2ZXJ0aXNpbmcgcHJhY3RpY2VzIHwgQWR2ZXJ0aXNlIHdpdGggdXMgfCBMaWNl bnNlIG91ciBjb250ZW50IHwgQWJvdXQgdXMgfCBDb250YWN0IHVzIHwgV29yayBmb3IgdXMgfCBI ZWxwCkNOTiBUViB8IEhMTiB8IFRyYW5zY3JpcHRzCgoKCgoKPHNjcmlwdD48L3NjcmlwdD4KPHNj cmlwdD4KCXZhciBjbm5fZWR0bnN3dGNodmVyID0gImVkaXRpb24iOwo8L3NjcmlwdD4KPHNjcmlw dD48L3NjcmlwdD4KPHNjcmlwdD4KCW1zUXVldWVNYW5hZ2VyLmluaXQoJ3JlcXVlc3RGcmFtZScs IG1zX2JsYW5rVVJMKTsKPC9zY3JpcHQ+CjxzY3JpcHQ+PC9zY3JpcHQ+CjxzY3JpcHQ+CmlmKG1z X2lzTG9nZ2VkSW4oKSkgewoJQ05OX3NldENvb2tpZSgnQ05OX21lbWJlcicsIHRydWUsIDg1NDQw MCwgJy8nLCBkb2N1bWVudC5kb21haW4pOwp9Cjwvc2NyaXB0PgoKCQoKPHNjcmlwdD48L3Njcmlw dD4KPHNjcmlwdD4KPCEtLQovKioqKioqKioqKioqKiBETyBOT1QgQUxURVIgQU5ZVEhJTkcgQkVM T1cgVEhJUyBMSU5FICEgKioqKioqKioqKioqKiovCmlmICh0eXBlb2YoY25uT21uaVNlYXJjaFBh Z2UpID09ICJ1bmRlZmluZWQiKXsKdmFyIHNfY29kZT1zLnQoKTtpZihzX2NvZGUpZG9jdW1lbnQu d3JpdGUoc19jb2RlKX0vLy0tPiAKCnRyeXt3aW5kb3cub25sb2FkID0gY25uQ2hlY2tFbGVtZW50 O31jYXRjaChlcnIpe30KPC9zY3JpcHQ+Cgo8c2NyaXB0PjwhLS0KaWYobmF2aWdhdG9yLmFwcFZl cnNpb24uaW5kZXhPZignTVNJRScpPj0wKWRvY3VtZW50LndyaXRlKHVuZXNjYXBlKCclM0MnKSsn XCEtJysnLScpCi8vLS0+PC9zY3JpcHQ+CgoKCgoNCg0KPHNjcmlwdD48L3NjcmlwdD4NCgk= --000e0cd17cd4e3d28e0491e6a29e Content-Type: text/x-csrc; charset=US-ASCII; name="parse.c" Content-Disposition: attachment; filename="parse.c" Content-Transfer-Encoding: base64 X-Attachment-Id: f_gexdl0j72 I2luY2x1ZGUgPHN0ZGlvLmg+CgojaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgojaW5jbHVkZSA8 bGlieG1sL0hUTUxwYXJzZXIuaD4KI2luY2x1ZGUgPGxpYnhtbC94bWxlcnJvci5oPgoKCnN0YXRp YyB2b2lkIF9nZXRwYWdlX3N0YXJ0RWxlbWVudFNBWCAodm9pZCAqIHVzZXJEYXRhLCBjb25zdCB4 bWxDaGFyICogbmFtZSwgY29uc3QgeG1sQ2hhciAqKiBhdHRzKQp7CglpZiAoIXN0cm5jbXAoInNj cmlwdCIsIG5hbWUsIDYpKQoJCXByaW50ZigiPCVzPiIsIG5hbWUpOwp9CgpzdGF0aWMgdm9pZCBf Z2V0cGFnZV9lbmRFbGVtZW50U0FYICh2b2lkICogdXNlckRhdGEsIGNvbnN0IHhtbENoYXIgKiBu YW1lKQp7CglpZiAoIXN0cm5jbXAoInNjcmlwdCIsIG5hbWUsIDYpKQoJCXByaW50ZigiPC8lcz4i LCBuYW1lKTsKfQpzdGF0aWMgdm9pZCBfZ2V0cGFnZV9jaGFyRGF0YVNBWCAodm9pZCAqIHVzZXJE YXRhLCBjb25zdCB4bWxDaGFyICogYnVmZmVyLCBpbnQgbGVuZ3RoKQp7CiAgICAgICAgc3RydWN0 IF9zaXRlX3VzZXJkYXRhICpzdSA9IHVzZXJEYXRhOwogICAgICAgIHByaW50ZigiJS4qcyIsIGxl bmd0aCwgYnVmZmVyKTsKfQoKCmludCBtYWluKCkKewoJaHRtbFNBWEhhbmRsZXIgaHNoOwoJaHRt bFBhcnNlckN0eHRQdHIgY3R4dDsKCUZJTEUgKmZwOwoJY2hhciBidWZbMTAwXTsKCgltZW1zZXQo JmhzaCwgMCwgc2l6ZW9mKGh0bWxTQVhIYW5kbGVyKSk7CgoJaHNoLnN0YXJ0RWxlbWVudCA9IF9n ZXRwYWdlX3N0YXJ0RWxlbWVudFNBWDsKCWhzaC5lbmRFbGVtZW50ID0gX2dldHBhZ2VfZW5kRWxl bWVudFNBWDsKCWhzaC5jaGFyYWN0ZXJzID0gX2dldHBhZ2VfY2hhckRhdGFTQVg7CgoJLy9jdHh0 ID0gaHRtbENyZWF0ZVB1c2hQYXJzZXJDdHh0KCZoc2gsIE5VTEwsIE5VTEwsIDAsIE5VTEwsIFhN TF9DSEFSX0VOQ09ESU5HX1VURjgpOwoJY3R4dCA9IGh0bWxDcmVhdGVQdXNoUGFyc2VyQ3R4dCgm aHNoLCBOVUxMLCBOVUxMLCAwLCBOVUxMLCBYTUxfQ0hBUl9FTkNPRElOR19OT05FKTsKCglmcCA9 IGZvcGVuKCJiYXJlLnR4dCIsICJyIik7CgkKCXdoaWxlICghZmVvZihmcCkpCgl7CgkJZmdldHMo YnVmLCAxMDAsIGZwKTsKCQlodG1sUGFyc2VDaHVuayhjdHh0LCBidWYsIHN0cmxlbihidWYpLCAw KTsKCX0KCQkKCWZjbG9zZShmcCk7CgoKCWh0bWxQYXJzZUNodW5rKGN0eHQsIE5VTEwsIDAsIDEp Owp9Cg== --000e0cd17cd4e3d28e0491e6a29e-- From rcsaba@gmail.com Wed Oct 6 07:27:08 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 5BCCE7500B6 for ; Wed, 6 Oct 2010 07:27:08 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -1.836 X-Spam-Level: X-Spam-Status: No, score=-1.836 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, TW_BX=0.077, TW_IB=0.077, T_TO_NO_BRKTS_FREEMAIL=0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id DVm6uOm9DbWD for ; Wed, 6 Oct 2010 07:27:06 +0000 (UTC) Received: from mail-qw0-f54.google.com (mail-qw0-f54.google.com [209.85.216.54]) by menubar.gnome.org (Postfix) with ESMTP id EB52E750095 for ; Wed, 6 Oct 2010 07:26:57 +0000 (UTC) Received: by qwd6 with SMTP id 6so634168qwd.27 for ; Wed, 06 Oct 2010 00:26:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:cc:content-type; bh=AiMBpR6xlM/clOHWMVRPCEDKwNrT/XCiBNfDrzYgQmE=; b=HEPooGr/5Z62h/DjbCDeTF1EfbzvzfbeVbcccUPUqz48bbJ9vcbtf0n0ruv0ujgqik zdQ6k5CQkBip8E9F4vlYYJynDi2LiBHn2XsU0vjuk1ijfIOZTZvPbdj/TvoJ3Lfqj77w WTRNOYkQ8UgksOnooqluwzGveDGyEEY2nHhsc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=smusFQEfCymGBSIg1jSzvgaeW2X56SMJl2yY+9e3UGRHGDMCQX9x7Lj404Bl81Toh/ SnS05i2dmM3KVWgabk3d9x19BASG+XxsbSqbmGDFZYQadvssshtwDzrj2e92TxqZobNa sOpSrTAtEH2Z9LsZSFwbUq7+ZMvD/wnG5hEG0= MIME-Version: 1.0 Received: by 10.224.69.14 with SMTP id x14mr9201660qai.212.1286350015854; Wed, 06 Oct 2010 00:26:55 -0700 (PDT) Received: by 10.229.117.99 with HTTP; Wed, 6 Oct 2010 00:26:55 -0700 (PDT) In-Reply-To: <4C325D83.4090606@gmail.com> References: <4C325D83.4090606@gmail.com> Date: Wed, 6 Oct 2010 09:26:55 +0200 Message-ID: From: Csaba Raduly To: dennis.heimbigner@colorado.edu Content-Type: text/plain; charset=ISO-8859-1 Cc: xml@gnome.org Subject: Re: [xml] libxml2 pull parser (ala stax). X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Oct 2010 07:27:08 -0000 On Tue, Jul 6, 2010 at 12:32 AM, Dennis Heimbigner wrote: > Google searches imply that there is a stax-like > pull parsing interface in libxml2. Perhaps you want the reader interface: (libxml/xmlreader.h) http://www.xmlsoft.org/xmlreader.html -- GCS a+ e++ d- C++ ULS$ L+$ !E- W++ P+++$ L w++$ tv+ b++ DI D++ 5++ Life is complex, with real and imaginary parts. "Ok, it boots. Which means it must be bug-free and perfect. " -- Linus Torvalds "People disagree with me. I just ignore them." -- Linus Torvalds From rcsaba@gmail.com Wed Oct 6 08:08:53 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id ACC75750288 for ; Wed, 6 Oct 2010 08:08:53 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -1.846 X-Spam-Level: X-Spam-Status: No, score=-1.846 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, TW_BX=0.077, TW_IB=0.077] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id F-9eO0knKpSN for ; Wed, 6 Oct 2010 08:08:50 +0000 (UTC) Received: from mail-qy0-f182.google.com (mail-qy0-f182.google.com [209.85.216.182]) by menubar.gnome.org (Postfix) with ESMTP id AC20C750095 for ; Wed, 6 Oct 2010 08:08:42 +0000 (UTC) Received: by qyk35 with SMTP id 35so3992129qyk.6 for ; Wed, 06 Oct 2010 01:08:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:cc:content-type; bh=9KNauc5TQK4GntfVLHxL+ogcHBmYxq5ATXq1eJQndGc=; b=Po/zE/GYt9CIn5AQOxsJk0ddNI3XPV/cdQApjgXhaN7vXRmWc3+q17ixF8IXCb+4pz SNnxwMg/S/ut54OyB4wy76FZkds/i2xzjiBBGUQZbBPzBII1TnALhHb1vP15Tc2sDC+M 8QHKWIO9HkvNsJiGHpwCao5xCROJsGhBLyEOs= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=jSKvW945vkV3W1eDcA2fJzV3vH3UPwp6wYKpMQ/rlnNkuqM7fZjt4PpLj4+DuK8Zg6 F2vcIqhDP+DBZflprzl9Px6q94XJGZYkVhmT7H+TuSNjY2DynEFVPOzcVzI0yGY88M1J 13czkTf/jkikB8cUIMyzKkFiCNAR5v2O7hAsk= MIME-Version: 1.0 Received: by 10.224.53.203 with SMTP id n11mr9238698qag.336.1286352520745; Wed, 06 Oct 2010 01:08:40 -0700 (PDT) Received: by 10.229.117.99 with HTTP; Wed, 6 Oct 2010 01:08:40 -0700 (PDT) In-Reply-To: References: Date: Wed, 6 Oct 2010 10:08:40 +0200 Message-ID: From: Csaba Raduly To: Steven Falken Content-Type: text/plain; charset=ISO-8859-1 Cc: xml@gnome.org Subject: Re: [xml] strange end-tag position (parsing html) X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Oct 2010 08:08:53 -0000 On Wed, Oct 6, 2010 at 12:18 AM, Steven Falken wrote: > Hi, > I'm trying to parse bare.txt (attached, yes it is simply cnn.com). For > this purpose I'm using parse.c (also attached). > The output is output.txt (Attachment!). > If you look at bare.txt, you see a ) is in line 784; > the problem is, that this end-Tag is in the middle > of the javascript-code, which is actually bad :( This is because cnn's HTML sucks :). They can't seem to make up their mind between HTML and XHTML. Take a look at line 792 of output.txt: the for statement is mangled. Looks like the '<' operator was interpreted by libxml as a start tag. The is in the place where a is in bare.txt Perhaps libxml2 betrayed its true nature (an XML parser) and parsed bare.txt as XML (XHTML). In this case the content of ) is in line 784; >> the problem is, that this end-Tag is in the middle >> of the javascript-code, which is actually bad :( > > This is because cnn's HTML sucks :). They can't seem to make up their > mind between HTML and XHTML. > > Take a look at line 792 of output.txt: the for statement is mangled. > Looks like the '<' operator was interpreted by libxml as a start tag. > The is in the place where a is in bare.txt > > Perhaps libxml2 betrayed its true nature (an XML parser) and parsed > bare.txt as XML (XHTML). In this case the content of ) is in line 784; > >> the problem is, that this end-Tag is in the middle > >> of the javascript-code, which is actually bad :( > > > > This is because cnn's HTML sucks :). They can't seem to make up their > > mind between HTML and XHTML. > > > > Take a look at line 792 of output.txt: the for statement is mangled. > > Looks like the '<' operator was interpreted by libxml as a start tag. > > The is in the place where a is in bare.txt > > > > Perhaps libxml2 betrayed its true nature (an XML parser) and parsed > > bare.txt as XML (XHTML). In this case the content of Regards, Sam --0016e65b5f30a6b8ce0492841732 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi,

Here is my sample xml file that i have generated.
I would lik= e to parse the file and given the node name , i should able to get the Valu= e of it.
I would like to know, is there any example code available? Plea= se help me. I am very new to xml stuff.
<?xml version=3D"1.0" encoding=3D"UTF-8"?>
<= ;!--Created on Date and Time -->
<script>
=A0 <Question T= oken=3D"01" Offset=3D"00" Width=3D"02" >=A0=A0=A0 <Prompt>SYSTEM LANGUAGE</Prompt>
=A0=A0=A0 <Option Value=3D"00">English</Option>
= =A0=A0=A0 <Option Value=3D"01">French</Option>
=A0= =A0=A0 <Value>00</Value>
=A0 </Question>
</scrip= t>

Regards,
Sam
--0016e65b5f30a6b8ce0492841732-- From dwimsey@rtsz.com Wed Oct 13 19:37:56 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 94B8C750198 for ; Wed, 13 Oct 2010 19:37:56 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -0.92 X-Spam-Level: X-Spam-Status: No, score=-0.92 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, RDNS_DYNAMIC=0.982, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001] autolearn=no Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id T98wErU+euMT for ; Wed, 13 Oct 2010 19:37:54 +0000 (UTC) X-Greylist: delayed 1989 seconds by postgrey-1.32 at menubar.gnome.org; Wed, 13 Oct 2010 19:37:54 UTC Received: from smtp.rtsz.com (rrcs-24-199-159-90.midsouth.biz.rr.com [24.199.159.90]) by menubar.gnome.org (Postfix) with ESMTP id CB6D175010D for ; Wed, 13 Oct 2010 19:37:46 +0000 (UTC) Received: from [192.168.128.239] (unknown [192.168.128.239]) (using TLSv1 with cipher AES128-SHA (128/128 bits)) (No client certificate requested) by smtp.rtsz.com (Postfix) with ESMTP id EFCB11CD9C; Wed, 13 Oct 2010 15:04:20 -0400 (EDT) Mime-Version: 1.0 (Apple Message framework v1081) Content-Type: text/plain; charset=us-ascii From: David Wimsey In-Reply-To: Date: Wed, 13 Oct 2010 15:04:31 -0400 Content-Transfer-Encoding: quoted-printable Message-Id: References: To: samaram s X-Mailer: Apple Mail (2.1081) X-RTS-MailScanner-Information: Please contact the System Administrator for more information X-RTS-MailScanner: Found to be clean X-RTS-MailScanner-MCPCheck: X-RTS-MailScanner-From: dwimsey@rtsz.com Cc: xml@gnome.org Subject: Re: [xml] How to parse and print data X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Oct 2010 19:37:56 -0000 http://xmlsoft.org/examples/index.html On Oct 13, 2010, at 2:52 PM, samaram s wrote: > Hi, >=20 > Here is my sample xml file that i have generated. > I would like to parse the file and given the node name , i should able = to get the Value of it. > I would like to know, is there any example code available? Please help = me. I am very new to xml stuff. > > > >=20 > Regards, > Sam > _______________________________________________ > xml mailing list, project page http://xmlsoft.org/ > xml@gnome.org > http://mail.gnome.org/mailman/listinfo/xml From ChiYinL@warshawgroup.com Wed Oct 13 20:07:33 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 92193750126 for ; Wed, 13 Oct 2010 20:07:33 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -0.111 X-Spam-Level: X-Spam-Status: No, score=-0.111 tagged_above=-999 required=2 tests=[BAYES_40=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HTML_MESSAGE=0.001, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 9eaDJ5REvKAo for ; Wed, 13 Oct 2010 20:07:28 +0000 (UTC) X-Greylist: delayed 742 seconds by postgrey-1.32 at menubar.gnome.org; Wed, 13 Oct 2010 20:07:28 UTC Received: from saber.irv.local (saber.warshawgroup.com [64.206.203.154]) by menubar.gnome.org (Postfix) with ESMTP id B802D75008A for ; Wed, 13 Oct 2010 20:07:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=s1024;d=warshawgroup.com; h=mime-version:content-type:subject:date:message-id:from:to; bh=S5qy6VBSLI1+SW7ZVwXdA3wB1UU=; b=tfjKjykv3bbvvlbw7rlfdH1gQA2wjVVRQ4g5H5hMUMVcGCY26Eit+GrJNEYFnCW2UQzLcWVC r2HYgDzUN1AQLdZiJYRwa++AH+B4w0PXtLknpWFh7bsIwfZ4clU7U9efVV1b7DzYT0MObz9c S/U522vWUpAOamJSADgSFhSFnoU= DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024;d=warshawgroup.com; h=mime-version:content-type:subject:date:message-id:from:to; b=dmz6DN6vRHJmB4EXIfYlU6kw05uvFAqbIYNLkBdqjhHHjckA6BYUSsIwYkTlrZOWDcNLy7O/ ZDVvkNfq0/H4KPLnnUn2s8Whvrwyc72FAh75diuqd2wuvyo+ptEp/1k+f2MaUlv2kGjW0X/4 HNueNDnh5qeQenT673yX+D4QI5k= X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="----_=_NextPart_001_01CB6B10.8280DB97" Date: Wed, 13 Oct 2010 15:54:56 -0400 Message-ID: <9B5D096175A24345AA2B0CC132C5964D07E1D30C@saber.irv.local> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: xmlFreeDoc() on iOS 4 - crashes Thread-Index: ActrEILOqfgY3KWnSRmp2d7XnndFWQ== From: "Chi Yin Luk" To: Subject: [xml] xmlFreeDoc() on iOS 4 - crashes X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Oct 2010 20:07:33 -0000 This is a multi-part message in MIME format. ------_=_NextPart_001_01CB6B10.8280DB97 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable I am using libxml2.2.7.3.dylib on my iPhone application. The application is targeting iOS 3.2, but the xmlFreeDoc() fails when the application is running on iPhone 4, but not on iOS 3.2 or before. I also tried targeting iOS 4 and running on iPhone 4, same problem exist. =20 The problem is if I assign the encocoding of xmlDocPtr , then call xmlFreeDoc to free the xmlDocPtr, it crashes with message: "pointer being freed was not allocated" =20 =20 The snippet of code as follow: =20 xmlDocPtr doc; =20 doc =3D xmlNewDoc((cost xmlChar*)XML_DEFAULT_VERSION); doc->encoding =3D"utf-8"; xmlFreeDoc(doc); =20 =20 I free the document right after the creation of xmlDocPtr just to demonstrate the encoding is causing the problem. =20 =20 =20 Thanks, Chi Yin Luk =20 ------_=_NextPart_001_01CB6B10.8280DB97 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

I am using libxml2.2.7.3.dylib on my iPhone = application.

The application is targeting iOS 3.2, but the = xmlFreeDoc() fails when the application is running on iPhone 4, but not on iOS 3.2 or before.

I also tried targeting iOS 4 and running on iPhone 4, = same problem exist.

 

The problem is if I assign the encocoding of = xmlDocPtr , then call xmlFreeDoc to free the xmlDocPtr, it crashes with = message:

pointer = being freed was not allocated

 

 

The snippet of code as = follow:

 

xmlDocPtr doc;

 

doc =3D xmlNewDoc((cost = xmlChar*)XML_DEFAULT_VERSION);

doc->encoding = =3D”utf-8”;

xmlFreeDoc(doc);

 

 

I free the document right after the creation of = xmlDocPtr just to demonstrate the encoding is causing the = problem.

 

 

 

Thanks,

Chi Yin = Luk

 

------_=_NextPart_001_01CB6B10.8280DB97-- From bunglehead@gmail.com Wed Oct 13 20:18:25 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 68D31750199 for ; Wed, 13 Oct 2010 20:18:25 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -1.989 X-Spam-Level: X-Spam-Status: No, score=-1.989 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_TO_NO_BRKTS_FREEMAIL=0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 3w6NkmuEIupb for ; Wed, 13 Oct 2010 20:18:20 +0000 (UTC) Received: from mail-ew0-f54.google.com (mail-ew0-f54.google.com [209.85.215.54]) by menubar.gnome.org (Postfix) with ESMTP id 053067500F9 for ; Wed, 13 Oct 2010 20:18:11 +0000 (UTC) Received: by ewy21 with SMTP id 21so1570583ewy.27 for ; Wed, 13 Oct 2010 13:18:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:references:in-reply-to :content-type; bh=cu2ViRQ8sMlDCQLkvUT0rjO6plE8u88NNnz/6CvtPwM=; b=APDfXvignlm01dtrJWzKHP3Rck12ThfR+s3zDzeDrpNN/CKNxso70keiPvRxqHKKEC YONLTXa0C1QS3Z8dJwYV3N0cCmcMQsXBdxAGDIlMc5jfoRqSDC4fBUFtC4xwgItSHmpJ Sp8sdF8EoSNc6FnjA09Yr4cisY1V6Q/VuXPng= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type; b=LHm8eLzf8ISnanVD+gLnVXpLCTrB9yj9nqVVm5rcuseCF4FEFx82hBOfLtNJ9mA+iF 14Y+zXtgklKkB87FCLR+Hh98G6dS9c733C21zpt7M+44wUT1+EVpuXm4Xz7pGDkIzQSh ARW7QY+WZGdJ1eXUMtm8i9BvY1tJUDl6GlYaM= Received: by 10.213.101.1 with SMTP id a1mr313257ebo.82.1287001089752; Wed, 13 Oct 2010 13:18:09 -0700 (PDT) Received: from [85.140.120.27] (ppp85-140-120-27.pppoe.mtu-net.ru [85.140.120.27]) by mx.google.com with ESMTPS id q51sm1610468eeh.4.2010.10.13.13.18.06 (version=TLSv1/SSLv3 cipher=RC4-MD5); Wed, 13 Oct 2010 13:18:08 -0700 (PDT) Message-ID: <4CB613E3.2050907@gmail.com> Date: Thu, 14 Oct 2010 00:17:39 +0400 From: Nikolay Sivov User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.2.9) Gecko/20100915 Thunderbird/3.1.4 MIME-Version: 1.0 To: xml@gnome.org References: <9B5D096175A24345AA2B0CC132C5964D07E1D30C@saber.irv.local> In-Reply-To: <9B5D096175A24345AA2B0CC132C5964D07E1D30C@saber.irv.local> Content-Type: multipart/alternative; boundary="------------040403030404050209010804" Subject: Re: [xml] xmlFreeDoc() on iOS 4 - crashes X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Oct 2010 20:18:25 -0000 This is a multi-part message in MIME format. --------------040403030404050209010804 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit On 10/13/2010 23:54, Chi Yin Luk wrote: > > I am using libxml2.2.7.3.dylib on my iPhone application. > > The application is targeting iOS 3.2, but the xmlFreeDoc() fails when > the application is running on iPhone 4, but not on iOS 3.2 or before. > > I also tried targeting iOS 4 and running on iPhone 4, same problem exist. > > The problem is if I assign the encocoding of xmlDocPtr , then call > xmlFreeDoc to free the xmlDocPtr, it crashes with message: > > "*pointer being freed was not allocated*" > > The snippet of code as follow: > > xmlDocPtr doc; > > doc = xmlNewDoc((cost xmlChar*)XML_DEFAULT_VERSION); > > doc->encoding ="utf-8"; > > xmlFreeDoc(doc); > This only means that iOS 4th reports failure better. You're doing a xmlFree on some static address. > > I free the document right after the creation of xmlDocPtr just to > demonstrate the encoding is causing the problem. > > Thanks, > > Chi Yin Luk > --------------040403030404050209010804 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On 10/13/2010 23:54, Chi Yin Luk wrote:

I am using libxml2.2.7.3.dylib on my iPhone application.

The application is targeting iOS 3.2, but the xmlFreeDoc() fails when the application is running on iPhone 4, but not on iOS 3.2 or before.

I also tried targeting iOS 4 and running on iPhone 4, same problem exist.

 

The problem is if I assign the encocoding of xmlDocPtr , then call xmlFreeDoc to free the xmlDocPtr, it crashes with message:

pointer being freed was not allocated

 

 

The snippet of code as follow:

 

xmlDocPtr doc;

 

doc = xmlNewDoc((cost xmlChar*)XML_DEFAULT_VERSION);

doc->encoding =”utf-8”;

xmlFreeDoc(doc);

This only means that iOS 4th reports failure better. You're doing a xmlFree on some static address.

 

 

I free the document right after the creation of xmlDocPtr just to demonstrate the encoding is causing the problem.

 

 

 

Thanks,

Chi Yin Luk


--------------040403030404050209010804-- From samaram007@gmail.com Wed Oct 13 20:58:45 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 39AB375008A for ; Wed, 13 Oct 2010 20:58:45 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -0.446 X-Spam-Level: X-Spam-Status: No, score=-0.446 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_ENVFROM_END_DIGIT=1.553, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=no Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id R2K8VDdNHEnr for ; Wed, 13 Oct 2010 20:58:42 +0000 (UTC) Received: from mail-wy0-f182.google.com (mail-wy0-f182.google.com [74.125.82.182]) by menubar.gnome.org (Postfix) with ESMTP id 1050C750095 for ; Wed, 13 Oct 2010 20:58:33 +0000 (UTC) Received: by wyi11 with SMTP id 11so716190wyi.27 for ; Wed, 13 Oct 2010 13:58:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:cc:content-type; bh=tA8e/yYqfLVXb3+uM1UeAWNBJXYp/DI+Vn6J5RSbDRI=; b=HafE2V1hJIjAVyY7GBNsQQNfF625WssrF0fk+CYBzi94fVv2i0r3I9LCZMfwVLyoPF Jleq759kh8hgVOdx+6GeyjtxMBhsH9gFm29Y9M/3EaoxbHMn9tTRSK+VS9fQNROz7X4d UDWd67fIzs96ha116q5Zf3ZWxNWuQsfM10Pog= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=ulYbpLhrr/VpFlZ+J/2G9zpIGkpXY8PyN9fT7XLVM+XErF8od8uIBckXAn6k7PImYA 68xa2B2L81ID6M02aH2WkoEQHQaoQejSGxcck62XDzkidh563AN+d/yPOmPi5dNl2wre Vn7Cj5MKcaQg6nNCqBilp+skKK9VkibqiH+Uc= MIME-Version: 1.0 Received: by 10.216.54.73 with SMTP id h51mr480653wec.100.1287003511578; Wed, 13 Oct 2010 13:58:31 -0700 (PDT) Received: by 10.216.51.79 with HTTP; Wed, 13 Oct 2010 13:58:31 -0700 (PDT) In-Reply-To: References: Date: Wed, 13 Oct 2010 16:58:31 -0400 Message-ID: From: samaram s To: David Wimsey Content-Type: multipart/alternative; boundary=001485f6cc9021df62049285db93 Cc: xml@gnome.org Subject: Re: [xml] How to parse and print data X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Oct 2010 20:58:45 -0000 --001485f6cc9021df62049285db93 Content-Type: text/plain; charset=ISO-8859-1 Hi, Thank you for the link. Actually i have gone through those sample codes. None of them dealt with getting the value given a node. Suppose, provided node as "Prompt" i should able to print the Value, "System Language" in the below example. There are lots of API's. unable to locate which one to use. Could you please give me some idea on it. Regards, Sam On Wed, Oct 13, 2010 at 3:04 PM, David Wimsey wrote: > http://xmlsoft.org/examples/index.html > > On Oct 13, 2010, at 2:52 PM, samaram s wrote: > > > Hi, > > > > Here is my sample xml file that i have generated. > > I would like to parse the file and given the node name , i should able to > get the Value of it. > > I would like to know, is there any example code available? Please help > me. I am very new to xml stuff. > > > > > > > > > > Regards, > > Sam > > _______________________________________________ > > xml mailing list, project page http://xmlsoft.org/ > > xml@gnome.org > > http://mail.gnome.org/mailman/listinfo/xml > > --001485f6cc9021df62049285db93 Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Hi, Thank you for the link.
Actually i have gone through those sample co= des. None of them dealt with getting the value given a node.
Suppose, pr= ovided node as "Prompt" i should able to print the Value, "S= ystem Language" in the below example.
There are lots of API's. unable to locate which one to use.
Could yo= u please give me some idea on it.


Regards,
Sam


On Wed, Oct 13, 2010 at 3:04 PM, David Wimsey <dwimsey@rtsz.com&g= t; wrote:
http://xmlsoft.org/exam= ples/index.html

On Oct 13, 2010, at 2:52 PM, samaram s wrote:

> Hi,
>
> Here is my sample xml file that i have generated.
> I would like to parse the file and given the node name , i should able= to get the Value of it.
> I would like to know, is there any example code available? Please help= me. I am very new to xml stuff.
> <?xml version=3D"1.0" encoding=3D"UTF-8"?> > <!--Created on Date and Time -->
> <script>
> =A0 <Question Token=3D"01" Offset=3D"00" Width= =3D"02" >
> =A0 =A0 <Prompt>SYSTEM LANGUAGE</Prompt>
> =A0 =A0 <Option Value=3D"00">English</Option> > =A0 =A0 <Option Value=3D"01">French</Option>
> =A0 =A0 <Value>00</Value>
> =A0 </Question>
> </script>
>
> Regards,
> Sam
> _______________________________________________
> xml mailing list, project page =A0http://xmlsoft.org/
> xml@gnome.org
> http://mail.gnome.org/mailman/listinfo/xml


--001485f6cc9021df62049285db93-- From jdennis@redhat.com Wed Oct 13 21:11:50 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 762707500FD for ; Wed, 13 Oct 2010 21:11:50 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -6.912 X-Spam-Level: X-Spam-Status: No, score=-6.912 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id DwUXn2bFzmSW for ; Wed, 13 Oct 2010 21:11:48 +0000 (UTC) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by menubar.gnome.org (Postfix) with ESMTP id A4E4675008A for ; Wed, 13 Oct 2010 21:11:40 +0000 (UTC) Received: from int-mx03.intmail.prod.int.phx2.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o9DLB74P013720 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Wed, 13 Oct 2010 17:11:07 -0400 Received: from jdennis.usersys.redhat.com (dhcp-100-2-214.bos.redhat.com [10.16.2.214]) by int-mx03.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o9DLB6MV003837; Wed, 13 Oct 2010 17:11:07 -0400 Message-ID: <4CB6206A.1060303@redhat.com> Date: Wed, 13 Oct 2010 17:11:06 -0400 From: John Dennis User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.12) Gecko/20100907 Fedora/3.0.7-1.fc12 Lightning/1.0b2pre Thunderbird/3.0.7 MIME-Version: 1.0 To: samaram s References: In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.67 on 10.5.11.16 Cc: xml@gnome.org Subject: Re: [xml] How to parse and print data X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 13 Oct 2010 21:11:50 -0000 On 10/13/2010 04:58 PM, samaram s wrote: > Hi, Thank you for the link. > Actually i have gone through those sample codes. None of them dealt with > getting the value given a node. > Suppose, provided node as "Prompt" i should able to print the Value, > "System Language" in the below example. > There are lots of API's. unable to locate which one to use. > Could you please give me some idea on it. That's the "content" of the node, look for the api routines whose names look like GetContent. Really, all this is well documented with loads of examples. You might want to consider using xpath to extract information out of your documents, it's easy to use and very powerful. Plus it isolates you from a lot of the low level stuff. > > > > > > -- John Dennis Looking to carve out IT costs? www.redhat.com/carveoutcosts/ From rcsaba@gmail.com Thu Oct 14 07:28:34 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 6D96475013F for ; Thu, 14 Oct 2010 07:28:34 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -2 X-Spam-Level: X-Spam-Status: No, score=-2 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id BrdtCXUTdDLW for ; Thu, 14 Oct 2010 07:28:32 +0000 (UTC) Received: from mail-qy0-f175.google.com (mail-qy0-f175.google.com [209.85.216.175]) by menubar.gnome.org (Postfix) with ESMTP id 6EA0C750126 for ; Thu, 14 Oct 2010 07:28:21 +0000 (UTC) Received: by qyk31 with SMTP id 31so1558108qyk.6 for ; Thu, 14 Oct 2010 00:28:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:cc:content-type :content-transfer-encoding; bh=KWtdDL1LrLeRYgRl1IG3Np+K47Td3YxanRvYF5doQ34=; b=Ev7nyCV4cbb5Dd16opmne9KzxyyuiozlufKIF8yc5IgZIv0O93j5aMEymQAqvX/dXV wPw1wBmrTAoDdrCaZ6mRaYKH78Gl+uEeYCF8F8sEw8IMsgLtUG8SWlOf4VQiYs/4vPIU kTyN2eP7N0FphF5YVQo7I6XqggWhLyQsmll/Y= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type:content-transfer-encoding; b=ofjRrUn/K46aN0tDPNv1OSyYqEy1dpUZm+nI+DBVHlxJne8y3COZ+Jzy2tC33no9KT Uzag1OOHQ3Qp15OW1ABibAjy96bSffM9OafxSDn6rWXrdks6Tt5CyKts2VRVS8tqtm1S hn26CSHZLMZjWtYatlQ81KYt19xOG04fFRV1o= MIME-Version: 1.0 Received: by 10.224.67.81 with SMTP id q17mr6064952qai.167.1287041300401; Thu, 14 Oct 2010 00:28:20 -0700 (PDT) Received: by 10.229.117.99 with HTTP; Thu, 14 Oct 2010 00:28:20 -0700 (PDT) In-Reply-To: <9B5D096175A24345AA2B0CC132C5964D07E1D30C@saber.irv.local> References: <9B5D096175A24345AA2B0CC132C5964D07E1D30C@saber.irv.local> Date: Thu, 14 Oct 2010 09:28:20 +0200 Message-ID: From: Csaba Raduly To: Chi Yin Luk Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: quoted-printable Cc: xml@gnome.org Subject: Re: [xml] xmlFreeDoc() on iOS 4 - crashes X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Oct 2010 07:28:34 -0000 Hi, On Wed, Oct 13, 2010 at 9:54 PM, Chi Yin Luk wrote: > I am using libxml2.2.7.3.dylib on my iPhone application. > > The application is targeting iOS 3.2, but the xmlFreeDoc() fails when the > application is running on iPhone 4, but not on iOS 3.2 or before. > > I also tried targeting iOS 4 and running on iPhone 4, same problem exist. > > The problem is if I assign the encocoding of xmlDocPtr , then call > xmlFreeDoc to free the xmlDocPtr, it crashes with message: > > =93pointer being freed was not allocated=94 > > The snippet of code as follow: > > xmlDocPtr doc; > doc =3D xmlNewDoc((cost xmlChar*)XML_DEFAULT_VERSION); > doc->encoding =3D=94utf-8=94; > xmlFreeDoc(doc); xmlFreeDoc does a xmlFree on doc->encoding, but you set it to a string which was not dynamically allocated. In effect, you are calling xmlFree on the "utf-8" string literal. This is wrong. You need to do at least this: doc->encoding =3D xmlStrDup("utf-8"); --=20 GCS a+ e++ d- C++ ULS$ L+$ !E- W++ P+++$ L w++$ tv+ b++ DI D++ 5++ Life is complex, with real and imaginary parts. "Ok, it boots. Which means it must be bug-free and perfect. " -- Linus Torv= alds "People disagree with me. I just ignore them." -- Linus Torvalds From veillard@redhat.com Thu Oct 14 16:00:01 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 0D080750132 for ; Thu, 14 Oct 2010 16:00:01 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -6.681 X-Spam-Level: X-Spam-Status: No, score=-6.681 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, TW_BX=0.077, TW_IB=0.077, TW_PM=0.077, T_RP_MATCHES_RCVD=-0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 5XDviCMB9xig for ; Thu, 14 Oct 2010 15:59:58 +0000 (UTC) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by menubar.gnome.org (Postfix) with ESMTP id 1BC0C75010A for ; Thu, 14 Oct 2010 15:59:49 +0000 (UTC) Received: from int-mx08.intmail.prod.int.phx2.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o9EFxkMv017469 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 14 Oct 2010 11:59:46 -0400 Received: from paphio.veillard.com (vpn1-6-216.ams2.redhat.com [10.36.6.216]) by int-mx08.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o9EFximC031607 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Thu, 14 Oct 2010 11:59:45 -0400 Received: from paphio.veillard.com (localhost.localdomain [127.0.0.1]) by paphio.veillard.com (8.14.4/8.14.3) with ESMTP id o9EFxhYc023797; Thu, 14 Oct 2010 17:59:43 +0200 Received: (from veillard@localhost) by paphio.veillard.com (8.14.4/8.14.4/Submit) id o9EFxg1R023795; Thu, 14 Oct 2010 17:59:42 +0200 X-Authentication-Warning: paphio.veillard.com: veillard set sender to veillard@redhat.com using -f Date: Thu, 14 Oct 2010 17:59:42 +0200 From: Daniel Veillard To: Csaba Raduly Message-ID: <20101014155942.GE5362@redhat.com> References: <9B5D096175A24345AA2B0CC132C5964D07E1D30C@saber.irv.local> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: User-Agent: Mutt/1.5.20 (2009-08-17) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.21 Cc: xml@gnome.org Subject: Re: [xml] xmlFreeDoc() on iOS 4 - crashes X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list Reply-To: veillard@redhat.com List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Oct 2010 16:00:01 -0000 On Thu, Oct 14, 2010 at 09:28:20AM +0200, Csaba Raduly wrote: > Hi, > > On Wed, Oct 13, 2010 at 9:54 PM, Chi Yin Luk wrote: > > > > xmlDocPtr doc; > > doc = xmlNewDoc((cost xmlChar*)XML_DEFAULT_VERSION); > > doc->encoding =”utf-8”; > > xmlFreeDoc(doc); > > xmlFreeDoc does a xmlFree on doc->encoding, but you set it to a string > which was not dynamically allocated. In effect, you are calling > xmlFree on the "utf-8" string literal. This is wrong. You need to do > at least this: > > doc->encoding = xmlStrDup("utf-8"); and xmlFree(doc->encoding) if it was not NULL before the affectation ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ From ChiYinL@warshawgroup.com Thu Oct 14 16:09:12 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id CC1CC7500E3 for ; Thu, 14 Oct 2010 16:09:12 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -2.011 X-Spam-Level: X-Spam-Status: No, score=-2.011 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id ekE4I21GL5g3 for ; Thu, 14 Oct 2010 16:09:08 +0000 (UTC) Received: from saber.irv.local (saber.warshawgroup.com [64.206.203.154]) by menubar.gnome.org (Postfix) with ESMTP id 496C9750136 for ; Thu, 14 Oct 2010 16:08:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed/relaxed; s=s1024;d=warshawgroup.com; h=mime-version:content-type:subject:date:message-id:in-reply-to :references:from:to:cc; bh=Uv9/iN8f+jrXFelk/9qaLmuIVAU=; b=vjEv2G407Bns2qGjd8n1TDFSVm+YA0UptdozqxQn0ie/tsNi7L3x/nWrcZjOvKdzKA+lQEec W9p4n8QzjD+KvWpio2/RPsVJPUXWHdrubuzosHUFoFWvkhzZUA7vyP3a8msLKm3BEySTldYc Axy3VHPSHUSelpdUf0xDRSDleXQ= DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024;d=warshawgroup.com; h=mime-version:content-type:subject:date:message-id:in-reply-to :references:from:to:cc; b=lKd6u681gVuiFClbMJpgYrytxrt6SM7fWjOi+buz4GxVLo8YlNRQpU9IwoOat52sZkE/a8vs NcQpuUpS2rx+iLm6g8SAjmvboduhwY4lFR/7ua9UDpEKqijzp8sn5hr2vXTHfmARwo9oraKc IL61DKEwUzbauHK4LWTQsRbBKOY= X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Date: Thu, 14 Oct 2010 12:08:57 -0400 Message-ID: <9B5D096175A24345AA2B0CC132C5964D07E1D30E@saber.irv.local> In-Reply-To: X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [xml] xmlFreeDoc() on iOS 4 - crashes Thread-Index: ActrcYQT3kRnVBBtRJmEHehzCdlFTAASE7fQ References: <9B5D096175A24345AA2B0CC132C5964D07E1D30C@saber.irv.local> From: "Chi Yin Luk" To: "Csaba Raduly" Cc: xml@gnome.org Subject: Re: [xml] xmlFreeDoc() on iOS 4 - crashes X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Oct 2010 16:09:13 -0000 Hi Csaba, Thanks X 1000 man! It worked by doing xmlStrDup()! But I am just wondering why it would not crash when running on iOS 3.2 or older. Thanks, Chi Yin Luk =20 Warshaw Group=20 540 Broadway, 4th floor=20 New York, NY 10012 phone: 212.966.4056, x. 201 fax: 212.966.4017=20 email: chiyinl@warshawgroup.com http://www.warshawgroup.com -----Original Message----- From: Csaba Raduly [mailto:rcsaba@gmail.com]=20 Sent: Thursday, October 14, 2010 3:28 AM To: Chi Yin Luk Cc: xml@gnome.org Subject: Re: [xml] xmlFreeDoc() on iOS 4 - crashes Hi, On Wed, Oct 13, 2010 at 9:54 PM, Chi Yin Luk wrote: > I am using libxml2.2.7.3.dylib on my iPhone application. > > The application is targeting iOS 3.2, but the xmlFreeDoc() fails when the > application is running on iPhone 4, but not on iOS 3.2 or before. > > I also tried targeting iOS 4 and running on iPhone 4, same problem exist. > > The problem is if I assign the encocoding of xmlDocPtr , then call > xmlFreeDoc to free the xmlDocPtr, it crashes with message: > > "pointer being freed was not allocated" > > The snippet of code as follow: > > xmlDocPtr doc; > doc =3D xmlNewDoc((cost xmlChar*)XML_DEFAULT_VERSION); > doc->encoding =3D"utf-8"; > xmlFreeDoc(doc); xmlFreeDoc does a xmlFree on doc->encoding, but you set it to a string which was not dynamically allocated. In effect, you are calling xmlFree on the "utf-8" string literal. This is wrong. You need to do at least this: doc->encoding =3D xmlStrDup("utf-8"); --=20 GCS a+ e++ d- C++ ULS$ L+$ !E- W++ P+++$ L w++$ tv+ b++ DI D++ 5++ Life is complex, with real and imaginary parts. "Ok, it boots. Which means it must be bug-free and perfect. " -- Linus Torvalds "People disagree with me. I just ignore them." -- Linus Torvalds From rcsaba@gmail.com Thu Oct 14 16:24:59 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 78F7C750132 for ; Thu, 14 Oct 2010 16:24:59 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -2 X-Spam-Level: X-Spam-Status: No, score=-2 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id z4FXomNQ0UMx for ; Thu, 14 Oct 2010 16:24:57 +0000 (UTC) Received: from mail-qy0-f175.google.com (mail-qy0-f175.google.com [209.85.216.175]) by menubar.gnome.org (Postfix) with ESMTP id 782277500E3 for ; Thu, 14 Oct 2010 16:24:49 +0000 (UTC) Received: by qyk31 with SMTP id 31so215029qyk.6 for ; Thu, 14 Oct 2010 09:24:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:cc:content-type; bh=9fGsnLvXFmRylBqs3EkaS72mneCqfFTmjSZum1eBmE0=; b=V9tMSkNoZ9nyfccSRsIu2dsvj/10b8IMh/rU7tdC4Jkp63YZwAd9yF4vnifSpVeZuh 2ApatgRyd7F7VcMOE+ndNvKK+1OT1uwaK2zCSURBEhpt53FMJ3QP9txokkoM+NiFh3ez ly2xbSsKuciOpARCx63IVGSjkStxEo4dAV0VU= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=Whsn5T2wzItVsktEalZ+YFhCT8JsGrzhRB2aWHZvMijnHo2dcig4KxZMBOWznr4HUA 4yaMH89wTh7mYqrsU4PZpM4caQdHP5ggZRr4cQHViyqPs88qf37U5BAWfk0AkZq6dYHt xFF9roUqtAnWHJn6k7odDKoVDsgwHJjmM1jHQ= MIME-Version: 1.0 Received: by 10.224.129.80 with SMTP id n16mr8467251qas.215.1287073487723; Thu, 14 Oct 2010 09:24:47 -0700 (PDT) Received: by 10.229.117.99 with HTTP; Thu, 14 Oct 2010 09:24:47 -0700 (PDT) In-Reply-To: <9B5D096175A24345AA2B0CC132C5964D07E1D30E@saber.irv.local> References: <9B5D096175A24345AA2B0CC132C5964D07E1D30C@saber.irv.local> <9B5D096175A24345AA2B0CC132C5964D07E1D30E@saber.irv.local> Date: Thu, 14 Oct 2010 18:24:47 +0200 Message-ID: From: Csaba Raduly To: Chi Yin Luk Content-Type: text/plain; charset=ISO-8859-1 Cc: xml@gnome.org Subject: Re: [xml] xmlFreeDoc() on iOS 4 - crashes X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Oct 2010 16:24:59 -0000 On Thu, Oct 14, 2010 at 6:08 PM, Chi Yin Luk wrote: > It worked by doing xmlStrDup()! But I am just wondering why it would not > crash when running on iOS 3.2 or older. Perhaps you have been unlucky (yes, unlucky. Silent misbehavior is the worst thing a bug can cause.) -- GCS a+ e++ d- C++ ULS$ L+$ !E- W++ P+++$ w++$ tv+ b++ DI D++ 5++ Life is complex, with real and imaginary parts. "Ok, it boots. Which means it must be bug-free and perfect. " -- Linus Torvalds "People disagree with me. I just ignore them." -- Linus Torvalds From samaram007@gmail.com Thu Oct 14 19:22:19 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id C99A3750151 for ; Thu, 14 Oct 2010 19:22:19 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -0.446 X-Spam-Level: X-Spam-Status: No, score=-0.446 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_ENVFROM_END_DIGIT=1.553, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001] autolearn=no Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id F-t0fStaV5dH for ; Thu, 14 Oct 2010 19:22:16 +0000 (UTC) Received: from mail-wy0-f182.google.com (mail-wy0-f182.google.com [74.125.82.182]) by menubar.gnome.org (Postfix) with ESMTP id 61DA97500E3 for ; Thu, 14 Oct 2010 19:22:07 +0000 (UTC) Received: by wyb38 with SMTP id 38so693046wyb.27 for ; Thu, 14 Oct 2010 12:22:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:in-reply-to :references:date:message-id:subject:from:to:cc:content-type; bh=plyaNN98o/m5RX+YosRJlep01LD2iSGBXcLxgk3EpDM=; b=gDgnXV12bXU5JFujh3kENRzVlFzwSytPnHetY02lm214CfkVq/HtLVC22tD537lVM/ y1DmZ/IiMQmURueFpz88EZvsmMGBRSyt3YmSD6b/Ak/vFHQrQxCrraR5OIZrT9A9oUU3 SOHsXCsTWOgeVvsUMTK28lESvq/SJR55lyT60= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; b=h3xpIXNZ22v4w8dJnnMvzbJfO/V2vRjyfqhpCRlSjSRghqRhVCoRwqkqIcEp/4+xSY oBSV/kOv8gK0QRv0zEKdntZltHSgF/h67EWZgUH+UP97gzgSDMSw7p8yCrpzZIUefJyh NT3XNYVJZlLq52Y5v9ULafAXK5nn11HszGPP0= MIME-Version: 1.0 Received: by 10.216.22.74 with SMTP id s52mr479680wes.11.1287083801694; Thu, 14 Oct 2010 12:16:41 -0700 (PDT) Received: by 10.216.51.79 with HTTP; Thu, 14 Oct 2010 12:16:41 -0700 (PDT) In-Reply-To: <4CB6206A.1060303@redhat.com> References: <4CB6206A.1060303@redhat.com> Date: Thu, 14 Oct 2010 15:16:41 -0400 Message-ID: From: samaram s To: John Dennis Content-Type: multipart/alternative; boundary=0016364d1b8dcc54a80492988c9e Cc: xml@gnome.org Subject: Re: [xml] How to parse and print data X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Oct 2010 19:22:20 -0000 --0016364d1b8dcc54a80492988c9e Content-Type: text/plain; charset=ISO-8859-1 Thank You John, I could able to use xpath and used xmlNodeGetContent to get the content of the node. By using the below API's xpathCtx = xmlXPathNewContext(doc); xpathObj = xmlXPathEvalExpression(xpathExpr, xpathCtx); Given an expression it gives the property of the node. for ex: if i give '\\Option' i could able to get English, French etc. But i dont know how to get Value which is under Option node?? I was wondering is there any API which gives the following information. If i would like to get the data of the Values which is under node Option how can i get? What is the way to do this? -Sam On Wed, Oct 13, 2010 at 5:11 PM, John Dennis wrote: > On 10/13/2010 04:58 PM, samaram s wrote: > >> Hi, Thank you for the link. >> Actually i have gone through those sample codes. None of them dealt with >> getting the value given a node. >> Suppose, provided node as "Prompt" i should able to print the Value, >> "System Language" in the below example. >> There are lots of API's. unable to locate which one to use. >> Could you please give me some idea on it. >> > > That's the "content" of the node, look for the api routines whose names > look like GetContent. Really, all this is well documented with loads of > examples. > > You might want to consider using xpath to extract information out of your > documents, it's easy to use and very powerful. Plus it isolates you from a > lot of the low level stuff. > > > > >> > >> > >> > -- > John Dennis > > Looking to carve out IT costs? > www.redhat.com/carveoutcosts/ > --0016364d1b8dcc54a80492988c9e Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Thank You John,

I could able to use xpath and used xmlNodeGetContent= to get the content of the node.
By using the below API's
=A0xpat= hCtx =3D xmlXPathNewContext(doc);
xpathObj =3D xmlXPathEvalExpression(xpathExpr, xpathCtx);
Given an expr= ession it gives the property of the node.
for ex: if i give '\\Optio= n' i could able to get English, French etc.
But i dont know how to g= et Value which is under Option node??

I was wondering is there any API which gives the following information.=

=A0 <Option Value=3D"00">Englis= h</Option>
=A0 <Option Value=3D"01">French= </Option>

If i would like to get the data of the Values which is under node Optio= n how can i get?
What is the way to do this?

-Sam






On Wed, Oct 13, 2010 at= 5:11 PM, John Dennis <jdennis@redhat.com> wrote:
On 10/13/2010 04:58 PM, samaram s wrote:
Hi, Thank you for the link.
Actually i have gone through those sample codes. None of them dealt with getting the value given a node.
Suppose, provided node as "Prompt" i should able to print the Val= ue,
"System Language" in the below example.
There are lots of API's. unable to locate which one to use.
Could you please give me some idea on it.

That's the "content" of the node, look for the api routines w= hose names look like GetContent. Really, all this is well documented with l= oads of examples.

You might want to consider using xpath to extract information out of your d= ocuments, it's easy to use and very powerful. Plus it isolates you from= a lot of the low level stuff.


=A0 =A0 > <?xml version=3D"1.0" encoding=3D"UTF-8&quo= t;?>
=A0 =A0 > <!--Created on Date and Time -->
=A0 =A0 > <script>
=A0 =A0 > <Question Token=3D"01" Offset=3D"00" W= idth=3D"02" >
=A0 =A0 > <Prompt>SYSTEM LANGUAGE</Prompt>
=A0 =A0 > <Option Value=3D"00">English</Option> =A0 =A0 > <Option Value=3D"01">French</Option> =A0 =A0 > <Value>00</Value>
=A0 =A0 > </Question>
=A0 =A0 > </script>
--
John Dennis <jde= nnis@redhat.com>

Looking to carve out IT costs?
www.redh= at.com/carveoutcosts/

--0016364d1b8dcc54a80492988c9e-- From jdennis@redhat.com Thu Oct 14 21:29:12 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 8EF80750101 for ; Thu, 14 Oct 2010 21:29:12 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -6.758 X-Spam-Level: X-Spam-Status: No, score=-6.758 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, TW_BX=0.077, TW_IB=0.077, T_RP_MATCHES_RCVD=-0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2RIo9napRa9n for ; Thu, 14 Oct 2010 21:29:10 +0000 (UTC) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by menubar.gnome.org (Postfix) with ESMTP id A296B7500E3 for ; Thu, 14 Oct 2010 21:29:02 +0000 (UTC) Received: from int-mx09.intmail.prod.int.phx2.redhat.com (int-mx09.intmail.prod.int.phx2.redhat.com [10.5.11.22]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o9ELRv6F009342 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 14 Oct 2010 17:27:58 -0400 Received: from jdennis.usersys.redhat.com (vpn-225-175.phx2.redhat.com [10.3.225.175]) by int-mx09.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id o9ELRvuB032677; Thu, 14 Oct 2010 17:27:57 -0400 Message-ID: <4CB775DC.80409@redhat.com> Date: Thu, 14 Oct 2010 17:27:56 -0400 From: John Dennis User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.12) Gecko/20100907 Fedora/3.0.7-1.fc12 Lightning/1.0b2pre Thunderbird/3.0.7 MIME-Version: 1.0 To: samaram s References: <4CB6206A.1060303@redhat.com> In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Scanned-By: MIMEDefang 2.68 on 10.5.11.22 Cc: xml@gnome.org Subject: Re: [xml] How to parse and print data X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 14 Oct 2010 21:29:12 -0000 On 10/14/2010 03:16 PM, samaram s wrote: > Thank You John, > > I could able to use xpath and used xmlNodeGetContent to get the content > of the node. > By using the below API's > xpathCtx = xmlXPathNewContext(doc); > xpathObj = xmlXPathEvalExpression(xpathExpr, xpathCtx); > Given an expression it gives the property of the node. > for ex: if i give '\\Option' i could able to get English, French etc. > But i dont know how to get Value which is under Option node?? > > I was wondering is there any API which gives the following information. > > > > > If i would like to get the data of the Values which is under node Option > how can i get? > What is the way to do this? I suggest you read the documentation for xpath. Asking people on a mailing list how to do something is not a substitute for making the effort to learn the information on your own. How do you think we learned it? BTW, there is a load of doc on xpath on the web. Since xpath is a standard it applies to libxml2 xpath implementation as well. You may find some of other xpath doc easier to digest. You might want to google "xpath examples" as well. -- John Dennis Looking to carve out IT costs? www.redhat.com/carveoutcosts/ From bharathkr@huawei.com Fri Oct 15 13:22:03 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id C6E6C7500F2 for ; Fri, 15 Oct 2010 13:22:03 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: 0.79 X-Spam-Level: X-Spam-Status: No, score=0.79 tagged_above=-999 required=2 tests=[BAYES_50=0.8, HTML_MESSAGE=0.001, SPF_PASS=-0.001, T_RP_MATCHES_RCVD=-0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id c7nH3gsl7dOy for ; Fri, 15 Oct 2010 13:22:00 +0000 (UTC) Received: from szxga03-in.huawei.com (szxga03-in.huawei.com [119.145.14.66]) by menubar.gnome.org (Postfix) with ESMTP id 1FD187500E8 for ; Fri, 15 Oct 2010 13:21:51 +0000 (UTC) Received: from huawei.com (szxga03-in [172.24.2.9]) by szxga03-in.huawei.com (iPlanet Messaging Server 5.2 HotFix 2.14 (built Aug 8 2006)) with ESMTP id <0LAC009LS2GCR7@szxga03-in.huawei.com> for xml@gnome.org; Fri, 15 Oct 2010 21:21:49 +0800 (CST) Received: from huawei.com ([172.24.2.119]) by szxga03-in.huawei.com (iPlanet Messaging Server 5.2 HotFix 2.14 (built Aug 8 2006)) with ESMTP id <0LAC00EZQ2GCVC@szxga03-in.huawei.com> for xml@gnome.org; Fri, 15 Oct 2010 21:21:48 +0800 (CST) Received: from blrnshtipl5nc ([10.18.1.35]) by szxml06-in.huawei.com (iPlanet Messaging Server 5.2 HotFix 2.14 (built Aug 8 2006)) with ESMTPA id <0LAC00J9T2GB0Z@szxml06-in.huawei.com> for xml@gnome.org; Fri, 15 Oct 2010 21:21:48 +0800 (CST) Date: Fri, 15 Oct 2010 18:51:46 +0530 From: bharath kumar reddy To: xml@gnome.org Message-id: <8432F31B291447318F23745AAF13C2C9@china.huawei.com> Organization: Htipl MIME-version: 1.0 X-MIMEOLE: Produced By Microsoft MimeOLE V6.00.3790.4657 X-Mailer: Microsoft Office Outlook 11 Content-type: multipart/alternative; boundary="Boundary_(ID_qhC/rMDwlnVylLSSmIUi2Q)" Thread-index: Actsa+rXK1lRm4bkQ26wrCpZ75m4cQ== Subject: [xml] doubt reg. xmlDOMWrapAdoptNode X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list Reply-To: bharathkr@huawei.com List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Oct 2010 13:22:04 -0000 This is a multi-part message in MIME format. --Boundary_(ID_qhC/rMDwlnVylLSSmIUi2Q) Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT Hi... I tried to understand the functionality of "xmlDOMWrapAdoptNode" but couldn't able to understand.. Can anybody tell me what the function "xmlDOMWrapAdoptNode" will do with an example... Thank you very much.. Bharat. --Boundary_(ID_qhC/rMDwlnVylLSSmIUi2Q) Content-type: text/html; charset=us-ascii Content-transfer-encoding: 7BIT
Hi...
 
I tried to understand the functionality of "xmlDOMWrapAdoptNode" but couldn't able to understand..
 
Can anybody tell me what the function "xmlDOMWrapAdoptNode" will do with an example...

Thank you very much..
Bharat.
 

--Boundary_(ID_qhC/rMDwlnVylLSSmIUi2Q)-- From veillard@redhat.com Fri Oct 15 16:33:20 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 680017500BE for ; Fri, 15 Oct 2010 16:33:20 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -6.681 X-Spam-Level: X-Spam-Status: No, score=-6.681 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, TW_BX=0.077, TW_IB=0.077, TW_PM=0.077, T_RP_MATCHES_RCVD=-0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 7kDrgG0oXcpS for ; Fri, 15 Oct 2010 16:33:18 +0000 (UTC) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by menubar.gnome.org (Postfix) with ESMTP id 8F2D27500A7 for ; Fri, 15 Oct 2010 16:33:10 +0000 (UTC) Received: from int-mx08.intmail.prod.int.phx2.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o9FGX6kI010321 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 15 Oct 2010 12:33:06 -0400 Received: from paphio.veillard.com (vpn1-6-156.ams2.redhat.com [10.36.6.156]) by int-mx08.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o9FGX4UL024404 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 15 Oct 2010 12:33:06 -0400 Received: from paphio.veillard.com (localhost.localdomain [127.0.0.1]) by paphio.veillard.com (8.14.4/8.14.3) with ESMTP id o9FGX3sn029221; Fri, 15 Oct 2010 18:33:04 +0200 Received: (from veillard@localhost) by paphio.veillard.com (8.14.4/8.14.4/Submit) id o9FGX3O6029219; Fri, 15 Oct 2010 18:33:03 +0200 X-Authentication-Warning: paphio.veillard.com: veillard set sender to veillard@redhat.com using -f Date: Fri, 15 Oct 2010 18:33:03 +0200 From: Daniel Veillard To: Ralf Junker Message-ID: <20101015163303.GL5362@redhat.com> References: <4C150160.3070707@gmx.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <4C150160.3070707@gmx.de> User-Agent: Mutt/1.5.20 (2009-08-17) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.21 Cc: "xml@gnome.org" Subject: Re: [xml] XPath memory leak X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list Reply-To: veillard@redhat.com List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Oct 2010 16:33:20 -0000 On Sun, Jun 13, 2010 at 06:03:44PM +0200, Ralf Junker wrote: > This XPath causes a memory leak in the current libxml2 (version 2.7.7): > > //nr:one/nr:/nr:two/* > > It should be possible to reproduce it by calling the xpath1.c > example program like with these arguments: > > xpath1 AnyFile.xml //nr:one/nr:/nr:two/* > > This is the call stack: > > The memory block (0x00D06B60) [size: 3 bytes] was allocated with malloc > 0x00440619 - xmlstring.c#45 > 0x00425DD3 - xpath.c#9751 > 0x0042D7C6 - xpath.c#11228 > 0x0042E36A - xpath.c#11348 > 0x0042E70A - xpath.c#11387 > 0x00429B10 - xpath.c#10586 > > The leak is caused by the fact that CHECK_ERROR in xpath.c, line > 11252, simply returns and does not free the memory allocated to name > in line 11228: > > name = xmlXPathParseNCName(ctxt); > > A fix should be fairly simple. Thanks Ralf, sorry it took me a while to look at it, but confirmed, there is a leak, so I made the simple fix needed and commited it to git, thanks again ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ From veillard@redhat.com Fri Oct 15 17:53:29 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id B291D7500C7 for ; Fri, 15 Oct 2010 17:53:29 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -6.681 X-Spam-Level: X-Spam-Status: No, score=-6.681 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, RCVD_IN_DNSWL_HI=-5, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001, TW_BX=0.077, TW_IB=0.077, TW_PM=0.077, T_RP_MATCHES_RCVD=-0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id hFIiIUCLGsqd for ; Fri, 15 Oct 2010 17:53:27 +0000 (UTC) Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by menubar.gnome.org (Postfix) with ESMTP id 0C6A77500A7 for ; Fri, 15 Oct 2010 17:53:17 +0000 (UTC) Received: from int-mx01.intmail.prod.int.phx2.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by mx1.redhat.com (8.13.8/8.13.8) with ESMTP id o9FHr7ep030532 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Fri, 15 Oct 2010 13:53:07 -0400 Received: from paphio.veillard.com (vpn1-6-156.ams2.redhat.com [10.36.6.156]) by int-mx01.intmail.prod.int.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id o9FHr4jl011383 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO); Fri, 15 Oct 2010 13:53:06 -0400 Received: from paphio.veillard.com (localhost.localdomain [127.0.0.1]) by paphio.veillard.com (8.14.4/8.14.3) with ESMTP id o9FHr3VB020579; Fri, 15 Oct 2010 19:53:04 +0200 Received: (from veillard@localhost) by paphio.veillard.com (8.14.4/8.14.4/Submit) id o9FHr3Im020567; Fri, 15 Oct 2010 19:53:03 +0200 X-Authentication-Warning: paphio.veillard.com: veillard set sender to veillard@redhat.com using -f Date: Fri, 15 Oct 2010 19:53:03 +0200 From: Daniel Veillard To: Mike Hommey Message-ID: <20101015175303.GM5362@redhat.com> References: <20100908170020.GA3834@glandium.org> <20100909101439.GK12330@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20100909101439.GK12330@redhat.com> User-Agent: Mutt/1.5.20 (2009-08-17) X-Scanned-By: MIMEDefang 2.67 on 10.5.11.11 Cc: xml@gnome.org Subject: Re: [xml] Wrong error message when parsing SVG.xsd X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list Reply-To: veillard@redhat.com List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 15 Oct 2010 17:53:30 -0000 On Thu, Sep 09, 2010 at 12:14:39PM +0200, Daniel Veillard wrote: > On Wed, Sep 08, 2010 at 07:00:20PM +0200, Mike Hommey wrote: > > PS: Posting here, because it seems bugzilla is not read... I have 3 patches > > in there that are bitrotting. (613466, 613467, 625851) > > argh, well yes for urgent issues it's good to also raise problems here > but bugzilla is important too to make sure the issue is kept. I usually > go though bugzilla when I think I have time for a release, which doesn't > happen very often. > > quickly: > 613466 ACK, makes sense patch looks just fine > 613467 ACK, I tend to not build out of tree, looks fine > 625851 nontrivial, patch seems fine, but the swap of thread and global > init I need to double check to make sure the thread local storage > is still properly allocated in that case Can you believe that I have kepts firefox tabs for those bugs since I replied ? Well that's true (well it restarted many time but kept those open :-) Anyway all 3 patches are just fine, I pushed them thanks a lot ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ From miftika@yandex.ru Mon Oct 18 13:08:18 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id 915D27500D5 for ; Mon, 18 Oct 2010 13:08:18 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -1.836 X-Spam-Level: X-Spam-Status: No, score=-1.836 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, SPF_PASS=-0.001, TW_BX=0.077, TW_IB=0.077, T_TO_NO_BRKTS_FREEMAIL=0.01] autolearn=ham Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id Do-oLhB0c8Y2 for ; Mon, 18 Oct 2010 13:08:14 +0000 (UTC) X-Greylist: delayed 428 seconds by postgrey-1.32 at menubar.gnome.org; Mon, 18 Oct 2010 13:08:14 UTC Received: from forward3.mail.yandex.net (forward3.mail.yandex.net [77.88.46.8]) by menubar.gnome.org (Postfix) with ESMTP id 4F90F75007E for ; Mon, 18 Oct 2010 13:08:05 +0000 (UTC) Received: from web71.yandex.ru (web71.yandex.ru [77.88.46.31]) by forward3.mail.yandex.net (Yandex) with ESMTP id BC89056D852E for ; Mon, 18 Oct 2010 17:00:55 +0400 (MSD) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1287406855; bh=CYyMwVp7YjRlwaR1x837im0V+BzJHWd0og57fZNKcEQ=; h=From:To:Subject:MIME-Version:Message-Id:Date: Content-Transfer-Encoding:Content-Type; b=fs3VcN05/J55iP0ELU6VjhGbF5J4cafl7cohEeK7YA1H0Lhnr+yjr+9DmonVpa/WM /HsHAERmafjQROn352s85dl4TRmlQuSciGQ19Ug5oRPDJpLr8zdSEID9r0458Zzytp rp8z/1utQLaMcEnxy2HbRyVlnynbSd6Hudggc+QU= Received: from localhost (localhost.localdomain [127.0.0.1]) by web71.yandex.ru (Yandex) with ESMTP id B76D72008078 for ; Mon, 18 Oct 2010 17:00:55 +0400 (MSD) X-Yandex-Spam: 0 X-Yandex-Front: web71.yandex.ru X-Yandex-TimeMark: 1287406855 Received: from mail.tm-serv.ru (mail.tm-serv.ru [89.175.21.50]) by mail.yandex.ru with HTTP; Mon, 18 Oct 2010 17:00:54 +0400 From: =?koi8-r?B?79DP09TPzM/XIO3Jxs/Eyco=?= To: xml@gnome.org MIME-Version: 1.0 Message-Id: <198311287406854@web71.yandex.ru> Date: Mon, 18 Oct 2010 17:00:54 +0400 X-Mailer: Yamail [ http://yandex.ru ] 5.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain Subject: [xml] xmlFreeDoc crash X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Oct 2010 13:08:18 -0000 Hi! I'm noob with c and xml, but I really want to make libxml2 work with my program. I'm working with MVS 2005 on WinXP Professional ServicePack 3. I had created project in MVS 2005, tried to run io1.c. While Debugging in Release mod, using Multi-threaded DLL (/MD), it is crashing in xmlFreeDoc(doc) saying "Unhandled exception at 0x7c91b21a in Test_xml.exe: 0xC0000005: Access violation writing location 0x00000010." I've searched in mail archive on xmlsoft.org, learned a lot about runtime libs. But failed to solve my problems. To implement libxml2 I downloaded "iconv-1.9.2.win32", "zlib-1.2.5", "libxml2-2.7.7.win32" from "ftp://ftp.zlatkovic.com/libxml/". I think to make it more simple, I have to use in my MVS project the same runtime lib, which was used while compilation of "iconv-1.9.2.win32", "zlib-1.2.5", "libxml2-2.7.7.win32" packages. If I'm right, than I have question: Which version of MVS and on which Windows OS do I have to compile io1.c with downloaded lib packages? If it is wrong question, than please write me which packages do I have to download to use it with MVS 2005 on WinXP Professional ServicePack 3? From samaram007@gmail.com Wed Oct 20 19:08:47 2010 Return-Path: X-Original-To: xml@gnome.org Delivered-To: xml@gnome.org Received: from localhost (localhost.localdomain [127.0.0.1]) by menubar.gnome.org (Postfix) with ESMTP id BC3C97500D8 for ; Wed, 20 Oct 2010 19:08:47 +0000 (UTC) X-Virus-Scanned: by amavisd-new at gnome.org X-Spam-Flag: NO X-Spam-Score: -0.436 X-Spam-Level: X-Spam-Status: No, score=-0.436 tagged_above=-999 required=2 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_ENVFROM_END_DIGIT=1.553, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_PASS=-0.001, T_TO_NO_BRKTS_FREEMAIL=0.01] autolearn=no Received: from menubar.gnome.org ([127.0.0.1]) by localhost (menubar.gnome.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id pT7pCEvbq5MO for ; Wed, 20 Oct 2010 19:08:45 +0000 (UTC) Received: from mail-wy0-f182.google.com (mail-wy0-f182.google.com [74.125.82.182]) by menubar.gnome.org (Postfix) with ESMTP id B82627500CB for ; Wed, 20 Oct 2010 19:08:39 +0000 (UTC) Received: by wyb38 with SMTP id 38so4151500wyb.27 for ; Wed, 20 Oct 2010 12:08:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:mime-version:received:received:date:message-id :subject:from:to:content-type; bh=lw2h3LJKj0y2/uTqTzhWe0CChZIHvKqq85LTOj10m5o=; b=cAJ9yKjagKe57qes/zmnFDOA33hgsRIJbnFMNK7xwCUIn1p2eYniGwYVeg+c6B63XN uT9T64N/FobpNvs6XGU6DZbOcO9T64FCIusq19oDj6AXrmj5uOg9szdosSGjZfHZpaKq 6DytyS/EAK6YADFRMLNTfgCklMC3xzvYwHzVc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=mime-version:date:message-id:subject:from:to:content-type; b=I8gVSIcvEowj6VEMrRgHmUhFGXprEhlNDM4n0sFLzAqW3QONUN9KK1aijuhuKUc8Nz ug3B1JgL3hpyM4BsV0Iech2epEMAEGv/xFq3QLL/ljLhi/bHHyj0ToboAKCutwxTbveD tnwGx3q5Y/CWbPjAfft5nAvUTNliWrZnnH8eQ= MIME-Version: 1.0 Received: by 10.216.184.77 with SMTP id r55mr8595904wem.85.1287601717321; Wed, 20 Oct 2010 12:08:37 -0700 (PDT) Received: by 10.216.131.227 with HTTP; Wed, 20 Oct 2010 12:08:37 -0700 (PDT) Date: Wed, 20 Oct 2010 15:08:37 -0400 Message-ID: From: samaram s To: xml@gnome.org Content-Type: multipart/alternative; boundary=001485f44ffaf920a9049311221d Subject: [xml] How to add datatypes X-BeenThere: xml@gnome.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: The Gnome XML library mailing-list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 20 Oct 2010 19:08:48 -0000 --001485f44ffaf920a9049311221d Content-Type: text/plain; charset=ISO-8859-1 Hi, I have a doubt : wchar_t date[10]; wchar_t time[10]; com1 = xmlNewDocComment(doc, BAD_CAST("Created on Date and Time