tango-app-ui-auth 3.5.0-beta.4 → 3.5.0-beta.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import { Component } from '@angular/core';
2
2
  import * as i0 from "@angular/core";
3
- import * as i1 from "projects/tango-auth/src/public-api";
3
+ import * as i1 from "../../../services/auth.service";
4
4
  import * as i2 from "@ng-bootstrap/ng-bootstrap";
5
5
  export class TermsconditionsComponent {
6
6
  service;
@@ -47,4 +47,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
47
47
  type: Component,
48
48
  args: [{ selector: 'lib-termsconditions', template: "<div class=\"card mt-3 mx-15\">\r\n <div id=\"kt_content_container\" class=\"container-xxl font h-100 mx-10 pe-15 my-0\">\r\n <div (scroll)=\"onScroll($event)\" class=\"h-550px sticky\">\r\n <div class=\"row\">\r\n <div class=\"col-lg-12 col-md-12 col-sm-12\">\r\n <div class=\"card-header align-items-center border-0 mt-5 px-0\">\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <span class=\"main fs-lg-1 mb-4 text-gray-800\">General Terms and Conditions-SAAS\r\n Agreement</span><span class=\" text-muted fw-semibold me-1 sub\">These terms and\r\n conditions (hereinafter collectively referred to as <span class=\"text-helight\">\u201CSAAS\r\n Terms\u201D)</span> shall govern your <span class=\"text-helight\">(\u201CUser\u201D</span> or <span\r\n class=\"text-helight\">\u201CYou\u201D</span> or <span class=\"text-helight\">\u201CYour\u201D</span>or\r\n <span class=\"text-helight\">\u201CCustomer\u201D)</span> use of Services (as defined below) through\r\n this website https://tangoeye.ai/ <span class=\"text-helight\">(Website).</span></span>\r\n <span class=\" text-muted fw-semibold me-1 my-1 sub\">By accessing or using the Services\r\n through the Website or by executing an Order Form, that references these SAAS Terms, You\r\n agree to be bound by these SaaS Terms. If You are accessing or using the Software on\r\n behalf of a Company or other legal entity, You represent that You have the authority to\r\n bind such entity and its affiliates to these SAAS Terms in which case the terms \u201CUser\u201D\r\n or \u201CYou\u201D or \u201CYour\u201D or \u201CCustomer\u201D shall refer to such entity and its affiliates.</span>\r\n </h3>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- <div class=\"card-body py-lg-2\"> -->\r\n <div class=\"text-align-justify\">\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-5\">\r\n <span class=\"termsheading\">1. Definition </span>\r\n </h3>\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-5\"> \u201COrder Form\u201D means the each order form,\r\n proposal or statement of work referencing this Agreement wherever applicable. </li>\r\n\r\n <li class=\"text-muted fw-semibold sub my-5\"> <span class=\"text-helight\">\u201CSoftware\u201D</span>\r\n means the data analytics and business intelligence software and its object code version\r\n which enables the Customer to identify, amongst others, customer footfalls,\r\n demographics, identify missed opportunities, including any updates or new versions.</li>\r\n\r\n <li class=\"text-muted fw-semibold sub my-5\"> <span\r\n class=\"text-helight\">\u201CServices\u201D</span>refer to the in-store AI driven analytics\r\n provided through the Software to the Customer that is hosted by Tango Eye and made\r\n available to Customer over a network whether on a trial or paid basis.</li>\r\n <!-- <li class=\"text-muted fw-semibold sub my-5\"> \u201CTerm\u201D shall mean that period specified in a\r\n Schedule to be executed separately with the Customer during which Customer will have on-line\r\n access and use of the Services through the Website. </li> -->\r\n </ul>\r\n </h3>\r\n </div>\r\n\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">2. Eligibility </span>\r\n </h3>\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <ul>\r\n <span class=\"sub my-7\">In order to use the Services, You must:</span>\r\n <!-- <li class=\"text-muted fw-semibold sub my-7\"> Be above 18 years of age; </li> -->\r\n\r\n <li class=\"text-muted fw-semibold sub my-5\">Complete the account registration process to access\r\n the Services through the Website;</li>\r\n\r\n <li class=\"text-muted fw-semibold sub my-5\">You will provide correct, upto date information\r\n during the registration process, including billing address;</li>\r\n <li class=\"text-muted fw-semibold sub my-5\"> You will keep all your credentials and password\r\n confidential and also responsible to maintaining the safety and security of your personal\r\n information; </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">You will provide all relevant and required hardware\r\n and software as suggested by Tango Eye at your designated location in order to enable Tango\r\n Eye to install the Software in order to provide the Services.</li>\r\n </ul>\r\n </h3>\r\n </div>\r\n\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">3. Services </span>\r\n </h3>\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-7\"> In consideration for payment of the fees, Tango Eye\r\n grants the Customer a non-exclusive, non-transferable, personal, revocable, licence to\r\n access and use the Services in accordance with Tango Eye\u2019s intended purpose for the Services\r\n <span class=\"text-helight\">(Licence).</span></li>\r\n\r\n <li class=\"text-muted fw-semibold sub my-5\">The Services are not contingent on the delivery of\r\n any future functionality or features</li>\r\n\r\n <li class=\"text-muted fw-semibold sub my-5\">Tango Eye reserves the right to change or remove features of the Services and or the Software from time to time. Where there is any material alteration to the Services and or the Software in accordance with this clause, Tango Eye will provide the Customer with 30 business days\u2019 notice and the Customer agrees that any material alteration is at Tango Eye\u2019s discretion.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">Access to the Services shall be limited to authorized persons with valid credentials which is to be agreed at the time of providing access to the Services and the Website. If it is a single account access, such account shall not be used by multiple users at the same time.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">Tango Eye reserves the right to change, modify, amend, update, suspend or discontinue the whole or any portion of the Services, Website or the SaaS Terms at any time.</li>\r\n <li class=\"text-muted fw-semibold sub my-3\">You agree that\u00A0Tango Eye:</li>\r\n <div class=\"text-muted fw-semibold sub my-1 ms-5\">a. will supply the Services on a non-exclusive basis;\r\n </div>\r\n <div class=\"text-muted fw-semibold sub my-1 ms-5\">b. does not make any warranty or representation as to\r\n the ability of the facilities or services of any third-party suppliers; and</div>\r\n <div class=\"text-muted fw-semibold sub my-1 ms-5\">c. is not liable for any failure in, fault with or\r\n degradation of the Services/Software if that failure, fault or degradation is attributable\r\n to or caused by any failure of the Customer environment or the facilities or services of any\r\n third party.</div>\r\n </ul>\r\n </h3>\r\n </div>\r\n\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">4. License Restrictions </span>\r\n </h3>\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-3\"> You must not access or use the Services and or the Software except as permitted by the License and may not do or authorize the commission of any act that would or might invalidate or be inconsistent with the Tango Eye\u2019s intellectual property rights in the Services or Software. Without limiting the foregoing provisions, the Customer agrees and acknowledges that it must not and will not permit any person to:</li>\r\n\r\n <div class=\"text-muted fw-semibold sub my-2 ms-5\">a. resell, assign, transfer, distribute or provide others\r\n with access to the Services;</div>\r\n\r\n <div class=\"text-muted fw-semibold sub my-2 ms-5\">b. \u201Cframe\u201D, \u201Cmirror\u201D or serve any of the Services/Software\r\n on any web server or other computer server over the internet or any other network;</div>\r\n <div class=\"text-muted fw-semibold sub my-2 ms-5\">c. copy, alter, modify, create derivative works from,\r\n reproduce, resell, transfer to a third party, reverse assemble, reverse engineer, reverse\r\n compile or enhance the Services or Software; or </div>\r\n <div class=\"text-muted fw-semibold sub my-2 ms-5\">d .alter, remove or tamper with any trademarks, any patent\r\n or copyright notices, or any confidentiality legend or notice, or any numbers, or other means of\r\n identification used on or in relation to the Services or Software.</div>\r\n <li class=\"text-muted fw-semibold sub my-5\">The Customer must not use the Services in any way which\r\n is in breach of any statute, regulation, law or legal right of any person within the Republic of\r\n India or the jurisdiction in which the Customer or its personnel are located.\u00A0</li>\r\n\r\n </ul>\r\n </h3>\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">5. Prohibited Use </span>\r\n </h3>\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub mt-7\">You agree to use the Website and the Services/Software\r\n accessed through it for the purpose enumerated under these SaaS Terms and agree not to undertake\r\n the following:</li>\r\n\r\n <div class=\"text-muted fw-semibold sub my-1 ms-5\"> a. Use of the Website and the Services to violate any\r\n applicable laws of any jurisdiction from which You access the Services.</div>\r\n <div class=\"text-muted fw-semibold sub my-1 ms-5\"> b. Use the Services for competitive benchmarking or\r\n for developing a competitive product or services.</div>\r\n <div class=\"text-muted fw-semibold sub my-1 ms-5\"> c. To upload or otherwise disseminate any computer\r\n viruses or other software that may the Software of Tango Eye;</div>\r\n <div class=\"text-muted fw-semibold sub my-1 ms-5\"> d. To unlawfully gather information about others and\r\n use in in an unlawful manner;</div>\r\n <div class=\"text-muted fw-semibold sub mb-5 ms-5\"> e. To solicit others to perform or participate in any\r\n unlawful acts.</div>\r\n <!-- <li class=\"text-muted fw-semibold sub my-5\"> resell, assign, transfer, distribute or provide others\r\n with access to the Services;</li> -->\r\n\r\n <li class=\"text-muted fw-semibold sub my-5\">You acknowledge that Tango Eye will not be liable for\r\n any information that is relayed and stored in its cloud servers which is accessed through your\r\n systems. You shall always be responsible for the same at all times.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">You agree to comply with all applicable laws statutes\r\n and regulations of the country you are accessing the Website/Software and the Services\r\n concerning the use of the information/video footage which is relayed through your cctv camera to\r\n the cloud storage of Tango Eye. </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">You acknowledge that the Services has not been designed\r\n to collect or process any sensitive information and accordingly you agree not to use the\r\n Services to collect, process or store any sensitive personal data once you access the reports\r\n generated by Tango Eye in pursuance to the Services. Tango Eye specifically disclaim any\r\n liability that may result from your use of the Services to collect, process and store sensitive\r\n personal information.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">Tango Eye reserves the right to monitor the use of the\r\n Website/Services/Software by You to ensure compliance of these SaaS Terms and applicable law.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">In the event of violation of these SaaS Terms,\r\n applicable laws and regulations, Tango Eye shall have the right to investigate such breaches and\r\n take appropriate actions which shall include but not be limited to providing warning to first\r\n time offenders, suspending and or even terminating the Services and access to the Website.</li>\r\n </ul>\r\n </h3>\r\n\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">6. Invoicing: </span>\r\n </h3>\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <ul>\r\n <div class=\"text-muted fw-semibold sub my-7\">Invoices will be issued on the basis of the number of deployed stores in existence on the invoice date and shall be issued in accordance with the Payment Terms in the commercial terms above. Tango Eye shall bill Customer for applicable taxes as a separate line item on each invoice. Customer shall be responsible for payment of all sales and use taxes, Goods and Services tax, or similar charges relating to Customer\u2019s purchase and use of the Services.</div>\r\n </ul>\r\n\r\n </h3>\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">7. Payment: </span>\r\n </h3>\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-7\">Payment shall be made in accordance with the Payment\r\n Terms in the commercial terms which shall be agreed to separately between Tango Eye and the\r\n Customer and which shall be read and be coterminous with these SaaS Terms <span class=\"text-helight\">(Payment Terms).</span>\r\n Except as expressly provided otherwise, payments are non-refundable. In the event the Customer\r\n fails to make the payment as per the payment terms, Tango Eye shall send a written notice to the\r\n Client to ensure that the payment is made within 30 (thirty) days (\u201CAdditional Period\u201D) from the\r\n date of receipt such written notice. If the customer fails to make the payment within the\r\n Additional Period, the access to the web portal will be blocked and the Services shall be\r\n suspended 7 (seven) days after sending a reminder email to Customer from the expiry of the\r\n Additional Period.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">Parties acknowledge that time is of the essence with\r\n respect to payments required under this clause. In the event of any delay in payment by the\r\n Customer, Tango Eye may require the Customer to pay Tango Eye a late payment penalty equal to\r\n twelve percent (12%) per annum on all outstanding payments.</li>\r\n </ul>\r\n </h3>\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">8.Intellectual Property</span>\r\n </h3>\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-7\">All Tango Eye Software, including the Website and any\r\n updates thereto, and any other intellectual property created by Tango Eye in furtherance to the\r\n Software or any works, products, documents, materials created using, incorporating, comprising\r\n in, or relating to such intellectual property (\u201CTango Eye IP\u201D) shall at all times remain the\r\n exclusive property of Tango Eye and/or its nominees or affiliates, as the case may be, and the\r\n Customer shall not have any right, title, claim etc. whatsoever over the same. Nothing contained\r\n herein shall be construed as a transfer, assignment or conveyance by Tango Eye to Customer of\r\n the ownership, interest or title to the intellectual property or intellectual property rights in\r\n or attached to the Tango Eye IP. The Customer is only authorized to receive a right to access\r\n Tango Eye IP for the term explicitly granted by Tango Eye to Customer and in accordance with the\r\n provisions of these SaaS Terms. This authorization is non-exclusive, non-transferable and\r\n non-sub-licensable, unless otherwise agreed under this Agreement. Customer shall not have any\r\n right to modify, adapt, incorporate, create any derivative using or incorporating Tango Eye IP\r\n or in any manner transfer, encumber, alienate, sell, share, assign, license or sub-let it to any\r\n third party.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">As between the parties, Customer retains all right,\r\n title and interest in and to \u2013\u00A0</li>\r\n <div class=\"text-muted fw-semibold sub my-2 ms-5\">a. all raw data generated from the use of the Software,\r\n including text, sound, video, or image files, but excluding any Business Data (\u201CGenerated\r\n Data\u201D); and\u00A0\u00A0</div>\r\n <div class=\"text-muted fw-semibold sub my-2 ms-5\">b. raw data owned by and relating to the Customer, such as\r\n company information, store location and details of the zones, employee information, but\r\n excluding any Generated Data (\u201CBusiness , that is provided to Tango Eye by, or on behalf of, the\r\n Customer through the Customer\u2019s use of the Software (together, \u201CCustomer Data\u201D).</div>\r\n <li class=\"text-muted fw-semibold sub my-5\">The Customer hereby grants to Tango Eye a non-exclusive,\r\n worldwide, fully paid up and royalty free right and license to use the Generated Data for (i)\r\n the provision of Services and fulfillment of obligations under these SaaS Terms and; (ii)\r\n improving the Software.\u00A0</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">The Customer hereby grants to Tango Eye a non-exclusive,\r\n worldwide, fully paid up and royalty free right and license to use the Business Data for (i) the\r\n provision of Services and fulfillment of obligations under these SaaS Terms; and (ii) improving\r\n the Software.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">Customer agrees to provide comments or feedback, if any,\r\n to Tango Eye regarding the Software or future releases/ development to the Software and\r\n reference of the work carried out during this engagement with the Customer or any and all\r\n knowledge and information of generic nature, arising out of use of the Software by the Customer,\r\n without disclosing any Customer Confidential Information or Customer Data.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">The Customer undertakes to promptly inform Tango Eye of\r\n any infringement of Tango Eye IP rights by third parties, and shall permit Tango Eye to assume\r\n sole authority to take appropriate legal action. Customer shall not make any statement or\r\n admission in relation to such claim which may prejudicially affect the chances of settlement or\r\n defense of such claim, and shall provide information and assistance reasonably requested in\r\n connection with such claim or suit.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">Tango Eye hereby undertakes, in the event that third\r\n parties act against the Customer for any reason whatsoever in relation to the Software or any\r\n Tango Eye IP, to provide the documentation in their possession and otherwise do and execute all\r\n acts, things, matters and deeds as may be reasonably required by the Customer, from time to time\r\n to show ownership of such Tango Eye IP.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">Customer hereby consents and opts in to receive communications that Tango Eye may send via call or message service relating to this Agreement, to Customer including its employees, staff and other representatives.</li>\r\n </ul>\r\n </h3>\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">9. Data Protection and Privacy </span>\r\n </h3>\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-7\">Each Party shall at all times comply with its\r\n obligations under applicable privacy regulations in relation to the Generated Data, Business\r\n Data, and Customer Data that is collected, stored and/or processed by it in the course of\r\n performing its obligations under these SaaS Terms. Further each Party shall process such\r\n Generated Data, Business Data, and Customer Data only to the extent necessary for the purposes\r\n of performing their respective obligations under these SaaS Terms </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">Each party shall take appropriate technical and\r\n organizational measures as required under applicable law against any data breach, unauthorized\r\n or unlawful processing of the personal data or its accidental loss, destruction or damage.</li>\r\n </ul>\r\n </h3>\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">10. Representations, Warranties and Disclaimers </span>\r\n </h3>\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-7\">Each Party represents, warrants and covenants to the\r\n other that: (i) it is duly organized and validly existing and in good standing under the laws of\r\n the state of its incorporation or formation; (ii) it has the full right and authority to enter\r\n into these SaaS Terms and that these SaaS Terms constitutes a legal, valid and binding\r\n obligation; (iii) the execution, delivery and performance of these SaaS Terms does not and will\r\n not conflict with, or constitute a breach or default under, its charter of organization, or any\r\n contract or other instrument to which it is a party; (iv) it will comply with, and will ensure\r\n all of its personnel, third party agents, consultants etc., comply with all laws and regulations\r\n applicable to (i) the provision, or access and use of the Software; and (ii) performance of\r\n obligations under these SaaS Terms, including without limitation laws and regulations related to\r\n privacy, data protection, electronic communications, export and confidentiality.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">Tango Eye represents, warrants and covenants that (i)\r\n Tango Eye personnel shall provide the Services in a diligent and professional manner with due\r\n care (ii) Tango Eye IP does not and will not infringe, misappropriate or otherwise violate the\r\n intellectual property rights of any party within the territory of India and or any other country\r\n where its righst are registered; and (iii) all Services that are provided will be free from any\r\n known malicious code or instructions that may intentionally disrupt, damage or interfere with\r\n any use by Customer. Tango Eye further warrants and represents to the Customer that it holds,\r\n and will continue to hold, any and all licenses, permits or other authorizations required by any\r\n applicable law to perform the Services in accordance with these SaaS Terms.</li>\r\n <div class=\"text-muted fw-semibold sub my-5\"><span class=\"text-helight\">\u201CApplicable law\u201D</span> means any applicable law, statute,\r\n rule, regulation, ordinance, requirement, directions, guidelines, announcement or other binding\r\n action or requirement of any government or quasi government; department, agency or\r\n instrumentality of any government thereof, any court or arbitral tribunal applicable and\r\n existing under the republic of India.</div>\r\n <li class=\"text-muted fw-semibold sub my-5\">THE SOFTWARE AND ANYTHING PROVIDED IN CONNECTION WITH\r\n THESE SaaS TERMS ARE PROVIDED \u201CAS-IS\u201D. EXCEPT FOR THE EXPRESS REPRESENTATIONS AND WARRANTIES IN\r\n THIS SECTION 6, TANGO EYE DOES NOT MAKE ANY REPRESENTATIONS OR WARRANTIES, EXPRESS, IMPLIED OR\r\n STATUTORY INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OF MERCHANTABILITY, QUALITY,\r\n FITNESS FOR A PARTICULAR PURPOSE, SYSTEM INTEGRATION, ERROR-FREE, UN-INTERRUPTION, SUPPORT\r\n CORRECTION OR REPAIR (UNLESS OTHERWISE AGREED) OR OTHERWISE THAT TANGO EYE SOFTWARE HEREUNDER\r\n WILL OPERATE IN EVERY COMBINATION OR ENVIRONMENT DESIRED BY CUSTOMER WITH ANY DATA, DEVICES,\r\n COMPUTER SYSTEMS AND PROGRAMS OF ITS CHOICE OR THAT THE REMEDYING OF ONE PROGRAM ERROR DOES NOT\r\n RESULT IN THE OCCURRENCE OF OTHER PROGRAM ERRORS. ALL SUCH REPRESENTATIONS AND WARRANTIES ARE\r\n HEREBY DISCLAIMED.</li>\r\n <li class=\"text-muted fw-semibold sub mt-5\">\r\n The Customer warrants that: </li>\r\n <div class=\"text-muted fw-semibold sub my-5 ms-5\"> a. Customer Data does not and will not infringe,\r\n misappropriate or otherwise violate the intellectual property rights of any third party;</div>\r\n <div class=\"text-muted fw-semibold sub my-5 ms-5\">b. it will be responsible for any security\r\n vulnerabilities and the consequences of such vulnerabilities arising solely from the nature of\r\n Customer Data;</div>\r\n <div class=\"text-muted fw-semibold sub my-5 ms-5\"> c. it shall be responsible for ensuring that End\r\n Users comply with all requirements under these SaaS Terms in relation to the use of the Software\r\n (to the extent applicable);</div>\r\n <div class=\"text-muted fw-semibold sub my-5 ms-5\"> d. it shall immediately notify Tango Eye of (a)\r\n any account-related abuse; (b) the unauthorized disclosure, use and distribution of their\r\n account credentials by or to any third party; and</div>\r\n <div class=\"text-muted fw-semibold sub my-5 ms-5\"> e. it shall not, and shall not permit any party\r\n or person to, access or use the Software except as expressly permitted by these SaaS TERMS.\r\n Without limiting the generality of the foregoing, Customer shall not, and shall not permit any\r\n party or person to:</div>\r\n <div class=\"text-muted fw-semibold sub my-2 ms-10\"> 1. interfere with or disrupt the integrity or\r\n performance of the Software, or circumvent, bypass, delete or remove any form of protection, or\r\n usage, functionality or technical restrictions or limitations, or to enable functionality\r\n disabled by Tango Eye, in connection with the Software;</div>\r\n <div class=\"text-muted fw-semibold sub my-2 ms-10\"> 2. access or use the Software provided under\r\n these SaaS Terms, in any manner or for any purpose that violates any applicable law, the rights\r\n of others, in a way that could harm the service.</div>\r\n <div class=\"text-muted fw-semibold sub my-2 ms-10\">3. reverse engineer, disassemble, de-compile,\r\n recreate, copy or reproduce the source code or object code of the Software or perform any\r\n customizations (without Tango Eye\u2019s prior written consent); and</div>\r\n\r\n </ul>\r\n </h3>\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">11. Customer\u2019s Account </span>\r\n </h3>\r\n <h3 class=\"card-title align-items-start flex-column\">\r\n <ul>\r\n <div class=\"text-muted fw-semibold sub my-5\">\r\n Customers are fully responsible to safeguard their access credentials - including in the sense\r\n of the combination of username and password.</div>\r\n </ul>\r\n </h3>\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">12. Duration, Renewal and Termination </span>\r\n </h3>\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Unless otherwise specified in the proposal, these SaaS Terms shall continue to be effective during\r\n the\r\n period\r\n the Customer uses and or continues to use the Software, unless terminated in accordance with the\r\n terms set\r\n out\r\n herein.\r\n </li>\r\n <div class=\"text-muted fw-semibold sub my-5\">\r\n Unless otherwise specified in the Order Form, fees shall be subject to automatic increment at the rate of 7% per annum after every 12 months.\r\n </div>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Either party may terminate their business relationship under these SaaS Terms immediately upon a\r\n material\r\n breach by the other party that has not been cured within thirty (30) days after receipt of notice of\r\n such\r\n breach.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Either party may also terminate this Agreement upon thirty (30) days written notice without\r\n assigning any\r\n reason. Customer will pay in full for the Software up to and including the last day on which the\r\n Software\r\n was used.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Effect of Termination.\r\n <div class=\"text-muted fw-semibold sub my-5 ms-5\">\r\n (a) Upon termination of these SaaS Terms, Tango Eye shall immediately cease providing access to the Software.\r\n </div>\r\n <div class=\"text-muted fw-semibold sub my-5 ms-5\">\r\n (b) Upon termination of these SaaS Terms, Tango Eye may delete the Generated Data, Business Data and Customer Data collected, stored and/or processed under these SaaS Terms for the purpose of providing the Software within 15 (fifteen) days of receipt of notice of termination of these SaaS Terms.\r\n </div>\r\n <div class=\"text-muted fw-semibold sub my-5 ms-5\">\r\n (c) If Tango Eye terminates these SaaS Terms due to a breach by Customer of any of the provisions contained under these SaaS Terms, then Customer shall immediately pay to Tango Eye all amounts then due under these SaaS Terms. If Customer terminates these SaaS Terms due to a breach by Tango Eye, then Tango Eye shall immediately repay to Customer all pre-paid amounts for any unperformed Services scheduled to be delivered after the termination date.\r\n </div>\r\n <div class=\"text-muted fw-semibold sub my-5 ms-5\">\r\n (d) Subject to the rights granted under these SaaS Terms, upon its termination and upon subsequent written request by the Disclosing Party, the Receiving Party of tangible Confidential Information shall immediately return such information or destroy such information and provide written certification of such destruction, provided that the receiving party may permit its legal counsel to retain one archival copy of such information in the event of a subsequent dispute between the parties.\r\nThe provisions relating to confidentiality, as well as for liability, applicable law and settlement of disputes shall survive the expiration or termination of these SaaS Terms.\r\n </div>\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Termination shall not affect any rights or obligations of the parties incurred prior to the date of termination, unless otherwise agreed between the parties.\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <!-- <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">13. Effect of Termination. </span>\r\n </h3>\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Upon termination of these SaaS Terms, Tango Eye shall immediately cease providing access to the\r\n Software.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Upon termination of these SaaS Terms, Tango Eye shall delete the Generated Data, Business Data and\r\n Customer Data\r\n collected, stored and/or processed under these SaaS Terms for the purpose of providing the Software\r\n within 15\r\n (fifteen) days of receipt of notice of termination of these SaaS Terms.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n If Tango Eye terminates these SaaS Terms due to a breach by Customer of any of the provisions\r\n contained under these\r\n SaaS Terms, then Customer shall immediately pay to Tango Eye all amounts then due under these SaaS\r\n Terms. If\r\n Customer terminates these SaaS Terms due to a breach by Tango Eye, then Tango Eye shall immediately\r\n repay to\r\n Customer all pre-paid amounts for any unperformed Services scheduled to be delivered after the\r\n termination date.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Subject to the rights granted under these SaaS Terms, upon its termination and upon subsequent\r\n written request by\r\n the Disclosing Party, the Receiving Party of tangible Confidential Information shall immediately\r\n return such\r\n information or destroy such information and provide written certification of such destruction,\r\n provided that the\r\n receiving party may permit its legal counsel to retain one archival copy of such information in the\r\n event of a\r\n subsequent dispute between the parties.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n The provisions relating to confidentiality, as well as for liability, applicable law and settlement\r\n of disputes\r\n shall survive the expiration or termination of these SaaS Terms.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Termination shall not affect any rights or obligations of the parties incurred prior to the date of\r\n termination,\r\n unless otherwise agreed between the parties.\r\n </li>\r\n </ul>\r\n </div> -->\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">13. Access to Analytics via Web Portal & Excel Reports</span>\r\n </h3>\r\n <ul>\r\n <div class=\"text-muted fw-semibold sub my-5\">The analytics is designed for use with a) web-based\r\n application, b) excel reports sent via email or File Transfer Protocol.\r\n </div>\r\n <!-- <li class=\"text-muted fw-semibold sub my-5\">Training: All \u201CSoftware\u201D used in connection with the\r\n Services. For avoidance of doubt, it is clarified that Tango Eye agrees to provide sample dashboard\r\n and arrange for training sessions to the Customer as mutually agreed by the Parties.\r\n </li> -->\r\n </ul>\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">14. Training </span>\r\n </h3>\r\n <ul>\r\n <div class=\"text-muted fw-semibold sub my-5\">All \u201CSoftware\u201D used in connection with the Services. For avoidance of doubt, it is clarified that Tango Eye agrees to provide a sample dashboard and arrange for training sessions to the Customer as mutually agreed by the Parties.\r\n </div>\r\n </ul>\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">15. Confidential Information </span>\r\n </h3>\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-5\">All proprietary or confidential information, technical data,\r\n or know-how and all other non-public information, material or data in whatever form or mode of\r\n communication, which is disclosed by a party (\u201CDisclosing Party\u201D) to the other party (\u201CReceiving\r\n Party\u201D) in connection with the Software access and usage whether marked as \u201Cconfidential\u201D or not at\r\n the time of disclosure, shall be treated as \u201CConfidential Information\u201D. Confidential Information\r\n shall include, but not be limited to, the terms and pricing/commercial terms under these SaaS Terms,\r\n the technical and other specifications of the Software, any information specific to the software\r\n license codes and content as well as the software and hardware architecture and components, and all\r\n other non-public information.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">The Receiving Party undertakes: (i) not to use Confidential\r\n Information otherwise than for the purpose for which it was disclosed or to permit the Receiving\r\n Party to exercise rights and licenses granted under these SaaS Terms ; (ii) not to disclose\r\n Confidential Information without the prior written consent of the Disclosing Party, other than to\r\n those employees, agents, contractors, subcontractors, licensees of the Receiving Party, its\r\n Affiliates or any other parties who have a need to know it in order to assist the Receiving Party in\r\n performing its obligations, or to permit the Receiving Party to exercise its rights\u00A0 and licenses\r\n under this Agreement; (iii) to take all such steps to prevent unauthorized access to the Disclosing\r\n Party\u2019s Confidential Information, as it takes to protect its own confidential or proprietary\r\n information of a similar nature, which steps shall in no event be less than a reasonable standard of\r\n care; and iv) to return to the Customer, or destroy, on request all Confidential Information that\r\n has been disclosed to them, including all copies thereof and to delete all information stored in a\r\n machine-readable form to the extent practically possible, subject to any rights or licenses granted\r\n under these SaaS Terms .\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">The obligations in relation to Confidential Information\r\n under these SaaS Terms\u00A0 shall not apply to Confidential Information, which (i) has become or becomes\r\n publicly available by means other than a breach of confidentiality obligations; (ii) was already\r\n known to the Receiving Party prior to disclosure; (iii) the Receiving Party is required to disclose\r\n in order to comply with applicable laws or regulations or with a court or administrative order; or\r\n (iv) is independently developed by the Receiving Party without reference to or use of any\r\n Confidential Information of the Disclosing Party.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">The Receiving Party shall promptly, and in any case within\r\n three (3) days advise the Disclosing Party in writing of any unauthorized disclosure,\r\n misappropriation or misuse of Confidential Information after it becomes aware of it and vice versa.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">If either party becomes aware that it will be required, or\r\n is likely to be required, to disclose Confidential Information in order to comply with applicable\r\n laws or regulations or with a court or administrative order, it shall, to the extent it is lawfully\r\n able to do so, prior to any such disclosure notify the other party, and comply with the other\r\n party\u2019s instructions to protect the confidentiality of the information.\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">16. Indemnity and Limitation of Liability </span>\r\n </h3>\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Without prejudice to any other right available in law or under equity, each party hereby agrees to\r\n compensate, indemnify, defend and hold harmless the other, its affiliates, directors, shareholders,\r\n officers and employees and agents, from and against any and all losses, liabilities, damages,\r\n deficiencies, demands, claims (including third party claims), actions, judgments or causes of\r\n action, assessments, interest, penalties and other costs or expenses (including, without limitation,\r\n reasonable attorneys' fees and expenses) based upon, arising out of, or in relation to or otherwise\r\n in respect of (i) any breach of its obligations under these SaaS Terms ; or (ii) any willful\r\n misconduct, fraud, or wrongful or negligent act or omission of a Party.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n In no event shall either Party be liable to the other for any indirect, incidental, punitive,\r\n exemplary, special or consequential damages, or damages for loss of profits, revenue, whether in an\r\n action in contract or tort, or otherwise (collectively referred to as \u201CIndirect Losses\u201D) even if\r\n advised of the possibility of such damages.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Each Party\u2019s liability arising out of or in connection with the breach of any direct and actual\r\n liabilities, costs, losses, damages, suits, proceedings, costs, expenses or liabilities suffered or\r\n incurred due to resulting due to claims for breach of intellectual property of a Party or third\r\n party, breach of confidentiality obligation, data breach, breach of data privacy, fraud, willful\r\n negligence, gross misconduct or breach of applicable laws shall in no event exceed the annual total\r\n purchase price paid pursuant to grant of access and usage of the Services/Software by the Customer.\r\n </li>\r\n </ul>\r\n </div>\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">17. Force Majeure </span>\r\n </h3>\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Each of the Parties is not responsible nor liable for any delays or failures in performance from any\r\n cause beyond its control, including, but not limited to acts of God, changes to law or regulations,\r\n embargoes, war, terrorist acts, acts or omissions of third party technology providers, riots, fires,\r\n earthquakes, floods, power blackouts, strikes, weather conditions, pandemic, epidemic, government\r\n lockdowns or any other unforeseeable event beyond its control (hereinafter collectively referred to\r\n as <span class=\"text-helight\">\u201CForce Majeure Event\u201D)</span>. Upon occurrence of any Force Majeure Event, either Party shall give\r\n notice to the other party of its inability to perform or of delay in completing its obligations and\r\n must act diligently to remedy the cause and restore performance, to the extent possible.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Where Force-Majeure Event continues for a period more than Sixty (60) continuous days, then the\r\n effected Party shall have the right to immediately terminate these SaaS Terms Agreement by providing\r\n a written notice.</li>\r\n </ul>\r\n </div>\r\n\r\n <div class=\"my-2\">\r\n <h3 class=\"card-title align-items-start flex-column my-7\">\r\n <span class=\"termsheading\">18. Miscellaneous</span>\r\n </h3>\r\n <ul>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n These SaaS Terms is drawn up in English, which language shall govern all documents, notices,\r\n meetings, proceedings and processes relative thereto.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Nothing in these SaaS Terms shall be deemed to constitute a joint venture, agency, partnership,\r\n interest grouping or any other kind of formal business grouping or entity between the Parties.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n No rights or obligations of the Parties arising from these SaaS Terms may be assigned,\r\n sub-contracted, or transferred, in whole or in part, to any third party without the other party\u2019s\r\n prior written approval.\r\n </li>\r\n <li class=\"text-muted fw-semibold sub my-5\"> In case of conflict terms between these SaaS Terms and Order Form, the Order Form will prevail.</li>\r\n <li class=\"text-muted fw-semibold sub my-5\">\r\n Governing Law, Jurisdiction. These SaaS Terms shall be governed by the laws of India, and the\r\n Parties hereby agree to irrevocably submit to the exclusive jurisdiction of the courts of New Delhi\r\n in respect of all disputes arising out of these SaaS Terms.\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n<div class=\"row g-0 mb-0 bg-terms\">\r\n <div class=\"col-md-10\">\r\n <label class=\"form-check form-check-custom form-check-solid form-check-inline \">\r\n <input [disabled]=\"!enableAgree\" class=\"form-check-input\" type=\"checkbox\" required name=\"toc\" value=\"1\"\r\n (click)=\"updateterms($event)\" />\r\n <span class=\"form-check-label fw-bold text-gray-700\">\r\n </span>\r\n <span class=\"textsize mt-3\">I agree to the terms and conditions.</span>\r\n </label>\r\n\r\n </div>\r\n <div class=\"col-md-2\">\r\n <button [disabled]=\"!terms\" type=\"button\" (click)=\"onContinueTerms()\" class=\"btn btn-lg btn-primary ms-15 me-5 text-nowrap\">\r\n Continue\r\n </button>\r\n </div>\r\n\r\n</div>\r\n</div>", styles: [".termsheading{color:var(--Gray-900, #101828)!important;font-size:20px!important;font-style:normal;font-weight:600!important;line-height:30px}.sub{color:var(--Gray-900, #101828)!important;font-size:16px;font-style:normal;font-weight:400!important;line-height:20px}.main{color:var(--Gray-900, #101828)!important;font-size:24px!important;font-weight:600!important;line-height:20px}.sticky{overflow-y:auto;overflow-x:hidden}.textsize{color:var(--Gray-700, #344054)!important;font-size:16px!important;font-weight:400;line-height:31px}.bg-terms{border-top:1px solid var(--Gray-300, #D0D5DD);background:var(--Primary-25, #F6FCFF);padding:32px 26px}ul{list-style-position:inside!important}input[type=checkbox]{width:20px!important;height:20px!important;margin:5px;border-radius:4px!important;-webkit-appearance:none;-moz-appearance:none;-o-appearance:none;appearance:none;outline:1px solid var(--gray-300, #D0D5DD);box-shadow:none;font-size:.8em;text-align:center;line-height:1em;background:#fff}input[type=checkbox]:checked{outline:1px solid var(--primary-600, #00A3FF);background-color:var(--primary-50, #EAF8FF)}input[type=checkbox]:checked:after{content:\"\";transform:rotate(45deg);border-bottom:2px solid #00A3FF;border-right:2px solid #00A3FF;display:inline-block;width:.5em;padding-left:0;padding-top:12px;padding-right:6px}.btn-primary{border-radius:8px!important;border:1px solid var(--Primary-600, #00A3FF)!important;background:var(--Primary-600, #00A3FF)!important;box-shadow:0 1px 2px #1018280d!important}.a-o-i{color:var(--Gray-900, #101828)!important;font-size:24px!important;font-weight:600!important;line-height:32px}.sub-aoi{color:var(--Gray-500, #667085)!important;font-size:16px!important;font-weight:400!important;line-height:24px}.overlay{position:fixed;inset:0;background:#6e6e6eb3;transition:opacity .5s;visibility:visible;opacity:1;pointer-events:none}.popup{position:absolute;left:62%;top:40%;transform:translate(-50%,-50%);padding:24px;border-radius:12px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);width:588px;position:relative;transition:all 5s ease-in-out;pointer-events:auto}.popup h2{margin-top:0;color:#333;font-family:Tahoma,Arial,sans-serif}.popup .close{position:absolute;transition:all .2s;font-size:30px;font-weight:700;text-decoration:none;color:#333}.popup .close:hover{color:#06d85f;cursor:pointer}.popup .content{max-height:30%;overflow:auto}:host ::ng-deep .ng-otp-input-wrapper .otp-input:first-child{margin:0}:host ::ng-deep .ng-otp-input-wrapper .otp-input{margin-right:0!important;height:96px!important;width:96px;padding:8px;text-align:center;margin:10px 50px;color:var(--Gray-300, #090909)!important;font-size:60px;font-style:normal;font-weight:500;line-height:72px;letter-spacing:-1.2px;border-radius:8px;border:1px solid var(--Gray-300, #D0D5DD);background:var(--White, #FFF);box-shadow:0 1px 2px #1018280d}.small_lbl{color:var(--Gray-500, #667085);text-align:center;font-size:14px;font-style:normal;font-weight:500;line-height:20px;margin:20px 0;cursor:not-allowed}.small_lg{color:var(--Gray-500, #667085);text-align:center;font-size:14px;font-style:normal;font-weight:500;line-height:20px;margin:20px 0}input:focus{border:1px solid #ccc;color:#333}.otp-inpu:focus{border-color:#00f}.hover:focus{border-color:green}.disabled:focus{border-color:#ccc;color:#999;cursor:not-allowed}.text-helight{color:#000!important;font-size:16px!important;font-weight:600!important;line-height:20px}li{list-style-type:lower-roman!important;color:#000!important;font-weight:600!important}.btn-set{color:var(--Primary-700, #009BF3)!important;font-size:16px!important;font-weight:600!important;line-height:24px;border-radius:8px;border:1px solid var(--Primary-50, #EAF8FF)!important;background:var(--Primary-50, #EAF8FF)!important;box-shadow:0 1px 2px #1018280d!important}\n"] }]
49
49
  }], ctorParameters: () => [{ type: i1.AuthService }, { type: i2.NgbActiveModal }] });
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybXNjb25kaXRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWF1dGgvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLWF1dGgtbG9naW4vdGVybXNjb25kaXRpb25zL3Rlcm1zY29uZGl0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hdXRoL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1hdXRoLWxvZ2luL3Rlcm1zY29uZGl0aW9ucy90ZXJtc2NvbmRpdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVMxQyxNQUFNLE9BQU8sd0JBQXdCO0lBTXZCO0lBQThCO0lBTDFDLFdBQVcsR0FBVyxLQUFLLENBQUM7SUFDNUIsS0FBSyxDQUFNO0lBQ1gsUUFBUSxDQUFNO0lBRWIsWUFDVyxPQUFvQixFQUFVLFFBQXdCO1FBQXRELFlBQU8sR0FBUCxPQUFPLENBQWE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFnQjtJQUM3RCxDQUFDO0lBRU4sUUFBUSxDQUFDLEtBQVU7UUFDakIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM3QixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFFdEYsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLENBQUMsV0FBVyxHQUFJLElBQUksQ0FBQTtTQUMzQjtJQUNILENBQUM7SUFDRCxXQUFXLENBQUMsR0FBUTtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFBO0lBQ2pDLENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxJQUFJLEdBQUc7WUFDWCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNuRCxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixJQUFJLEdBQUcsRUFBRSxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDL0I7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzlCO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9CLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXJDVSx3QkFBd0I7NEZBQXhCLHdCQUF3QiwyRENUckMsaXFyREF1b0JNOzs0RkQ5bkJPLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAncHJvamVjdHMvdGFuZ28tYXV0aC9zcmMvcHVibGljLWFwaSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi10ZXJtc2NvbmRpdGlvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi90ZXJtc2NvbmRpdGlvbnMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsOiAnLi90ZXJtc2NvbmRpdGlvbnMuY29tcG9uZW50LnNjc3MnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBUZXJtc2NvbmRpdGlvbnNDb21wb25lbnQge1xyXG4gIGVuYWJsZUFncmVlOmJvb2xlYW4gPSBmYWxzZTtcclxuICB0ZXJtczogYW55O1xyXG4gIGFjY2VwdGVkOiBhbnk7XHJcblxyXG4gICBjb25zdHJ1Y3RvcihcclxuICAgICAgcHJpdmF0ZSBzZXJ2aWNlOiBBdXRoU2VydmljZSwgcHJpdmF0ZSBtb2RhbFJlZjogTmdiQWN0aXZlTW9kYWwsXHJcbiAgICApIHt9XHJcblxyXG4gIG9uU2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnN0IGVsZW1lbnQgPSBldmVudC50YXJnZXQ7XHJcbiAgICBjb25zdCBhdEJvdHRvbSA9IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gZWxlbWVudC5zY3JvbGxUb3AgPD0gZWxlbWVudC5jbGllbnRIZWlnaHQgKyAxO1xyXG4gICAgXHJcbiAgICBpZiAoYXRCb3R0b20pIHtcclxuICAgICAgICB0aGlzLmVuYWJsZUFncmVlICA9IHRydWVcclxuICAgIH1cclxuICB9XHJcbiAgdXBkYXRldGVybXMoZXZ0OiBhbnkpIHtcclxuICAgIHRoaXMudGVybXMgPSBldnQudGFyZ2V0LmNoZWNrZWRcclxuICB9XHJcblxyXG4gIG9uQ29udGludWVUZXJtcygpIHtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIGFjY2VwdGVkOiB0cnVlXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zZXJ2aWNlLnRlcm1zQW5kQ29uZGl0aW9uVXBkYXRlKGRhdGEpLnN1YnNjcmliZSh7XHJcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcclxuICAgICAgICBpZiAocmVzPy5jb2RlID09PSAyMDApIHtcclxuICAgICAgICAgIHRoaXMubW9kYWxSZWYuY2xvc2UoJ2FjY2VwdCcpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLm1vZGFsUmVmLmNsb3NlKCdlcnJvcicpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICB0aGlzLm1vZGFsUmVmLmNsb3NlKCdlcnJvcicpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbiAgXHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImNhcmQgbXQtMyBteC0xNVwiPlxyXG4gICAgPGRpdiBpZD1cImt0X2NvbnRlbnRfY29udGFpbmVyXCIgY2xhc3M9XCJjb250YWluZXIteHhsIGZvbnQgaC0xMDAgIG14LTEwIHBlLTE1IG15LTBcIj5cclxuICAgICAgICA8ZGl2IChzY3JvbGwpPVwib25TY3JvbGwoJGV2ZW50KVwiIGNsYXNzPVwiaC01NTBweCBzdGlja3lcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1sZy0xMiBjb2wtbWQtMTIgY29sLXNtLTEyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIGFsaWduLWl0ZW1zLWNlbnRlciBib3JkZXItMCBtdC01IHB4LTBcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtYWluIGZzLWxnLTEgbWItNCB0ZXh0LWdyYXktODAwXCI+R2VuZXJhbCBUZXJtcyBhbmQgQ29uZGl0aW9ucy1TQUFTXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWdyZWVtZW50PC9zcGFuPjxzcGFuIGNsYXNzPVwiIHRleHQtbXV0ZWQgZnctc2VtaWJvbGQgbWUtMSBzdWJcIj5UaGVzZSB0ZXJtcyBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25kaXRpb25zIChoZXJlaW5hZnRlciBjb2xsZWN0aXZlbHkgcmVmZXJyZWQgdG8gYXMgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxTQUFTXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1z4oCdKTwvc3Bhbj4gc2hhbGwgZ292ZXJuIHlvdXIgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj4o4oCcVXNlcuKAnTwvc3Bhbj4gb3IgPHNwYW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxZb3XigJ08L3NwYW4+IG9yIDxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcWW91cuKAnTwvc3Bhbj5vclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcQ3VzdG9tZXLigJ0pPC9zcGFuPiB1c2Ugb2YgU2VydmljZXMgKGFzIGRlZmluZWQgYmVsb3cpIHRocm91Z2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzIHdlYnNpdGUgaHR0cHM6Ly90YW5nb2V5ZS5haS8gPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj4oV2Vic2l0ZSkuPC9zcGFuPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiIHRleHQtbXV0ZWQgZnctc2VtaWJvbGQgbWUtMSBteS0xIHN1YlwiPkJ5IGFjY2Vzc2luZyBvciB1c2luZyB0aGUgU2VydmljZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdWdoIHRoZSBXZWJzaXRlIG9yIGJ5IGV4ZWN1dGluZyBhbiBPcmRlciBGb3JtLCB0aGF0IHJlZmVyZW5jZXMgdGhlc2UgU0FBUyBUZXJtcywgWW91XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlc2UgU2FhUyBUZXJtcy4gSWYgWW91IGFyZSBhY2Nlc3Npbmcgb3IgdXNpbmcgdGhlIFNvZnR3YXJlIG9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVoYWxmIG9mIGEgQ29tcGFueSBvciBvdGhlciBsZWdhbCBlbnRpdHksIFlvdSByZXByZXNlbnQgdGhhdCBZb3UgaGF2ZSB0aGUgYXV0aG9yaXR5IHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZCBzdWNoIGVudGl0eSBhbmQgaXRzIGFmZmlsaWF0ZXMgdG8gdGhlc2UgU0FBUyBUZXJtcyBpbiB3aGljaCBjYXNlIHRoZSB0ZXJtcyDigJxVc2Vy4oCdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ig4oCcWW914oCdIG9yIOKAnFlvdXLigJ0gb3Ig4oCcQ3VzdG9tZXLigJ0gc2hhbGwgcmVmZXIgdG8gc3VjaCBlbnRpdHkgYW5kIGl0cyBhZmZpbGlhdGVzLjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImNhcmQtYm9keSBweS1sZy0yXCI+IC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1hbGlnbi1qdXN0aWZ5XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjEuIERlZmluaXRpb24gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+IOKAnE9yZGVyIEZvcm3igJ0gbWVhbnMgdGhlIGVhY2ggb3JkZXIgZm9ybSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wb3NhbCBvciBzdGF0ZW1lbnQgb2Ygd29yayByZWZlcmVuY2luZyB0aGlzIEFncmVlbWVudCB3aGVyZXZlciBhcHBsaWNhYmxlLiA8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4gPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxTb2Z0d2FyZeKAnTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWFucyB0aGUgZGF0YSBhbmFseXRpY3MgYW5kIGJ1c2luZXNzIGludGVsbGlnZW5jZSBzb2Z0d2FyZSBhbmQgaXRzIG9iamVjdCBjb2RlIHZlcnNpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBlbmFibGVzIHRoZSBDdXN0b21lciB0byBpZGVudGlmeSwgYW1vbmdzdCBvdGhlcnMsIGN1c3RvbWVyIGZvb3RmYWxscyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZW1vZ3JhcGhpY3MsIGlkZW50aWZ5IG1pc3NlZCBvcHBvcnR1bml0aWVzLCBpbmNsdWRpbmcgYW55IHVwZGF0ZXMgb3IgbmV3IHZlcnNpb25zLjwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPiA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnFNlcnZpY2Vz4oCdPC9zcGFuPnJlZmVyIHRvIHRoZSBpbi1zdG9yZSBBSSBkcml2ZW4gYW5hbHl0aWNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgdGhyb3VnaCB0aGUgU29mdHdhcmUgdG8gdGhlIEN1c3RvbWVyIHRoYXQgaXMgaG9zdGVkIGJ5IFRhbmdvIEV5ZSBhbmQgbWFkZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSB0byBDdXN0b21lciBvdmVyIGEgbmV0d29yayB3aGV0aGVyIG9uIGEgdHJpYWwgb3IgcGFpZCBiYXNpcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+IOKAnFRlcm3igJ0gc2hhbGwgbWVhbiB0aGF0IHBlcmlvZCBzcGVjaWZpZWQgaW4gYVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2NoZWR1bGUgdG8gYmUgZXhlY3V0ZWQgc2VwYXJhdGVseSB3aXRoIHRoZSBDdXN0b21lciBkdXJpbmcgd2hpY2ggQ3VzdG9tZXIgd2lsbCBoYXZlIG9uLWxpbmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzcyBhbmQgdXNlIG9mIHRoZSBTZXJ2aWNlcyB0aHJvdWdoIHRoZSBXZWJzaXRlLiA8L2xpPiAtLT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4yLiBFbGlnaWJpbGl0eSA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdWIgbXktN1wiPkluIG9yZGVyIHRvIHVzZSB0aGUgU2VydmljZXMsIFlvdSBtdXN0Ojwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS03XCI+IEJlIGFib3ZlIDE4IHllYXJzIG9mIGFnZTsgPC9saT4gLS0+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+Q29tcGxldGUgdGhlIGFjY291bnQgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdG8gYWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgU2VydmljZXMgdGhyb3VnaCB0aGUgV2Vic2l0ZTs8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPllvdSB3aWxsIHByb3ZpZGUgY29ycmVjdCwgdXB0byBkYXRlIGluZm9ybWF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgdGhlIHJlZ2lzdHJhdGlvbiBwcm9jZXNzLCBpbmNsdWRpbmcgYmlsbGluZyBhZGRyZXNzOzwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4gWW91IHdpbGwga2VlcCBhbGwgeW91ciBjcmVkZW50aWFscyBhbmQgcGFzc3dvcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZGVudGlhbCBhbmQgYWxzbyByZXNwb25zaWJsZSB0byBtYWludGFpbmluZyB0aGUgc2FmZXR5IGFuZCBzZWN1cml0eSBvZiB5b3VyIHBlcnNvbmFsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbjsgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPllvdSB3aWxsIHByb3ZpZGUgYWxsIHJlbGV2YW50IGFuZCByZXF1aXJlZCBoYXJkd2FyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNvZnR3YXJlIGFzIHN1Z2dlc3RlZCBieSBUYW5nbyBFeWUgYXQgeW91ciBkZXNpZ25hdGVkIGxvY2F0aW9uIGluIG9yZGVyIHRvIGVuYWJsZSBUYW5nb1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgRXllIHRvIGluc3RhbGwgdGhlIFNvZnR3YXJlIGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIFNlcnZpY2VzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+My4gU2VydmljZXMgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTdcIj4gSW4gY29uc2lkZXJhdGlvbiBmb3IgcGF5bWVudCBvZiB0aGUgZmVlcywgVGFuZ28gRXllXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFudHMgdGhlIEN1c3RvbWVyIGEgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwgcGVyc29uYWwsIHJldm9jYWJsZSwgbGljZW5jZSB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzIGFuZCB1c2UgdGhlIFNlcnZpY2VzIGluIGFjY29yZGFuY2Ugd2l0aCBUYW5nbyBFeWXigJlzIGludGVuZGVkIHB1cnBvc2UgZm9yIHRoZSBTZXJ2aWNlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj4oTGljZW5jZSkuPC9zcGFuPjwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIFNlcnZpY2VzIGFyZSBub3QgY29udGluZ2VudCBvbiB0aGUgZGVsaXZlcnkgb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFueSBmdXR1cmUgZnVuY3Rpb25hbGl0eSBvciBmZWF0dXJlczwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGFuZ28gRXllIHJlc2VydmVzIHRoZSByaWdodCB0byBjaGFuZ2Ugb3IgcmVtb3ZlIGZlYXR1cmVzIG9mIHRoZSBTZXJ2aWNlcyBhbmQgb3IgdGhlIFNvZnR3YXJlIGZyb20gdGltZSB0byB0aW1lLiBXaGVyZSB0aGVyZSBpcyBhbnkgbWF0ZXJpYWwgYWx0ZXJhdGlvbiB0byB0aGUgU2VydmljZXMgYW5kIG9yIHRoZSBTb2Z0d2FyZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBjbGF1c2UsIFRhbmdvIEV5ZSB3aWxsIHByb3ZpZGUgdGhlIEN1c3RvbWVyIHdpdGggMzAgYnVzaW5lc3MgZGF5c+KAmSBub3RpY2UgYW5kIHRoZSBDdXN0b21lciBhZ3JlZXMgdGhhdCBhbnkgbWF0ZXJpYWwgYWx0ZXJhdGlvbiBpcyBhdCBUYW5nbyBFeWXigJlzIGRpc2NyZXRpb24uPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkFjY2VzcyB0byB0aGUgU2VydmljZXMgc2hhbGwgYmUgbGltaXRlZCB0byBhdXRob3JpemVkIHBlcnNvbnMgd2l0aCB2YWxpZCBjcmVkZW50aWFscyB3aGljaCBpcyB0byBiZSBhZ3JlZWQgYXQgdGhlIHRpbWUgb2YgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGUgU2VydmljZXMgYW5kIHRoZSBXZWJzaXRlLiBJZiBpdCBpcyBhIHNpbmdsZSBhY2NvdW50IGFjY2Vzcywgc3VjaCBhY2NvdW50IHNoYWxsIG5vdCBiZSB1c2VkIGJ5IG11bHRpcGxlIHVzZXJzIGF0IHRoZSBzYW1lIHRpbWUuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRhbmdvIEV5ZSByZXNlcnZlcyB0aGUgcmlnaHQgdG8gY2hhbmdlLCBtb2RpZnksIGFtZW5kLCB1cGRhdGUsIHN1c3BlbmQgb3IgZGlzY29udGludWUgdGhlIHdob2xlIG9yIGFueSBwb3J0aW9uIG9mIHRoZSBTZXJ2aWNlcywgV2Vic2l0ZSBvciB0aGUgU2FhUyBUZXJtcyBhdCBhbnkgdGltZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0zXCI+WW91IGFncmVlIHRoYXTCoFRhbmdvIEV5ZTo8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMSBtcy01XCI+YS4gd2lsbCBzdXBwbHkgdGhlIFNlcnZpY2VzIG9uIGEgbm9uLWV4Y2x1c2l2ZSBiYXNpcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj5iLiBkb2VzIG5vdCBtYWtlIGFueSB3YXJyYW50eSBvciByZXByZXNlbnRhdGlvbiBhcyB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGFiaWxpdHkgb2YgdGhlIGZhY2lsaXRpZXMgb3Igc2VydmljZXMgb2YgYW55IHRoaXJkLXBhcnR5IHN1cHBsaWVyczsgYW5kPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj5jLiBpcyBub3QgbGlhYmxlIGZvciBhbnkgZmFpbHVyZSBpbiwgZmF1bHQgd2l0aCBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVncmFkYXRpb24gb2YgdGhlIFNlcnZpY2VzL1NvZnR3YXJlIGlmIHRoYXQgZmFpbHVyZSwgZmF1bHQgb3IgZGVncmFkYXRpb24gaXMgYXR0cmlidXRhYmxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBvciBjYXVzZWQgYnkgYW55IGZhaWx1cmUgb2YgdGhlIEN1c3RvbWVyIGVudmlyb25tZW50IG9yIHRoZSBmYWNpbGl0aWVzIG9yIHNlcnZpY2VzIG9mIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcmQgcGFydHkuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+NC4gTGljZW5zZSBSZXN0cmljdGlvbnMgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktM1wiPiBZb3UgbXVzdCBub3QgYWNjZXNzIG9yIHVzZSB0aGUgU2VydmljZXMgYW5kIG9yIHRoZSBTb2Z0d2FyZSBleGNlcHQgYXMgcGVybWl0dGVkIGJ5IHRoZSBMaWNlbnNlIGFuZCBtYXkgbm90IGRvIG9yIGF1dGhvcml6ZSB0aGUgY29tbWlzc2lvbiBvZiBhbnkgYWN0IHRoYXQgd291bGQgb3IgbWlnaHQgaW52YWxpZGF0ZSBvciBiZSBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgVGFuZ28gRXll4oCZcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGluIHRoZSBTZXJ2aWNlcyBvciBTb2Z0d2FyZS4gV2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nIHByb3Zpc2lvbnMsIHRoZSBDdXN0b21lciBhZ3JlZXMgYW5kIGFja25vd2xlZGdlcyB0aGF0IGl0IG11c3Qgbm90IGFuZCB3aWxsIG5vdCBwZXJtaXQgYW55IHBlcnNvbiB0bzo8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy01XCI+YS4gcmVzZWxsLCBhc3NpZ24sIHRyYW5zZmVyLCBkaXN0cmlidXRlIG9yIHByb3ZpZGUgb3RoZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYWNjZXNzIHRvIHRoZSBTZXJ2aWNlczs8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtNVwiPmIuIOKAnGZyYW1l4oCdLCDigJxtaXJyb3LigJ0gb3Igc2VydmUgYW55IG9mIHRoZSBTZXJ2aWNlcy9Tb2Z0d2FyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvbiBhbnkgd2ViIHNlcnZlciBvciBvdGhlciBjb21wdXRlciBzZXJ2ZXIgb3ZlciB0aGUgaW50ZXJuZXQgb3IgYW55IG90aGVyIG5ldHdvcms7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtNVwiPmMuIGNvcHksIGFsdGVyLCBtb2RpZnksIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGZyb20sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJvZHVjZSwgcmVzZWxsLCB0cmFuc2ZlciB0byBhIHRoaXJkIHBhcnR5LCByZXZlcnNlIGFzc2VtYmxlLCByZXZlcnNlIGVuZ2luZWVyLCByZXZlcnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGUgb3IgZW5oYW5jZSB0aGUgU2VydmljZXMgb3IgU29mdHdhcmU7IG9yIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTVcIj5kIC5hbHRlciwgcmVtb3ZlIG9yIHRhbXBlciB3aXRoIGFueSB0cmFkZW1hcmtzLCBhbnkgcGF0ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGNvcHlyaWdodCBub3RpY2VzLCBvciBhbnkgY29uZmlkZW50aWFsaXR5IGxlZ2VuZCBvciBub3RpY2UsIG9yIGFueSBudW1iZXJzLCBvciBvdGhlciBtZWFucyBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZGVudGlmaWNhdGlvbiB1c2VkIG9uIG9yIGluIHJlbGF0aW9uIHRvIHRoZSBTZXJ2aWNlcyBvciBTb2Z0d2FyZS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIEN1c3RvbWVyIG11c3Qgbm90IHVzZSB0aGUgU2VydmljZXMgaW4gYW55IHdheSB3aGljaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpcyBpbiBicmVhY2ggb2YgYW55IHN0YXR1dGUsIHJlZ3VsYXRpb24sIGxhdyBvciBsZWdhbCByaWdodCBvZiBhbnkgcGVyc29uIHdpdGhpbiB0aGUgUmVwdWJsaWMgb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgSW5kaWEgb3IgdGhlIGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgQ3VzdG9tZXIgb3IgaXRzIHBlcnNvbm5lbCBhcmUgbG9jYXRlZC7CoDwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+NS4gUHJvaGliaXRlZCBVc2UgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXQtN1wiPllvdSBhZ3JlZSB0byB1c2UgdGhlIFdlYnNpdGUgYW5kIHRoZSBTZXJ2aWNlcy9Tb2Z0d2FyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3NlZCB0aHJvdWdoIGl0IGZvciB0aGUgcHVycG9zZSBlbnVtZXJhdGVkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgYW5kIGFncmVlIG5vdCB0byB1bmRlcnRha2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlIGZvbGxvd2luZzo8L2xpPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMSBtcy01XCI+IGEuIFVzZSBvZiB0aGUgV2Vic2l0ZSBhbmQgdGhlIFNlcnZpY2VzIHRvIHZpb2xhdGUgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGUgbGF3cyBvZiBhbnkganVyaXNkaWN0aW9uIGZyb20gd2hpY2ggWW91IGFjY2VzcyB0aGUgU2VydmljZXMuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTEgbXMtNVwiPiBiLiBVc2UgdGhlIFNlcnZpY2VzIGZvciBjb21wZXRpdGl2ZSBiZW5jaG1hcmtpbmcgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGRldmVsb3BpbmcgYSBjb21wZXRpdGl2ZSBwcm9kdWN0IG9yIHNlcnZpY2VzLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj4gYy4gVG8gdXBsb2FkIG9yIG90aGVyd2lzZSBkaXNzZW1pbmF0ZSBhbnkgY29tcHV0ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlydXNlcyBvciBvdGhlciBzb2Z0d2FyZSB0aGF0IG1heSB0aGUgU29mdHdhcmUgb2YgVGFuZ28gRXllOzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj4gZC4gVG8gdW5sYXdmdWxseSBnYXRoZXIgaW5mb3JtYXRpb24gYWJvdXQgb3RoZXJzIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2UgaW4gaW4gYW4gdW5sYXdmdWwgbWFubmVyOzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBtYi01IG1zLTVcIj4gZS4gVG8gc29saWNpdCBvdGhlcnMgdG8gcGVyZm9ybSBvciBwYXJ0aWNpcGF0ZSBpbiBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdW5sYXdmdWwgYWN0cy48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4gcmVzZWxsLCBhc3NpZ24sIHRyYW5zZmVyLCBkaXN0cmlidXRlIG9yIHByb3ZpZGUgb3RoZXJzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggYWNjZXNzIHRvIHRoZSBTZXJ2aWNlczs8L2xpPiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPllvdSBhY2tub3dsZWRnZSB0aGF0IFRhbmdvIEV5ZSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFueSBpbmZvcm1hdGlvbiB0aGF0IGlzIHJlbGF5ZWQgYW5kIHN0b3JlZCBpbiBpdHMgY2xvdWQgc2VydmVycyB3aGljaCBpcyBhY2Nlc3NlZCB0aHJvdWdoIHlvdXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtcy4gWW91IHNoYWxsIGFsd2F5cyBiZSByZXNwb25zaWJsZSBmb3IgdGhlIHNhbWUgYXQgYWxsIHRpbWVzLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPllvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCBhbGwgYXBwbGljYWJsZSBsYXdzIHN0YXR1dGVzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFuZCByZWd1bGF0aW9ucyBvZiB0aGUgY291bnRyeSB5b3UgYXJlIGFjY2Vzc2luZyB0aGUgV2Vic2l0ZS9Tb2Z0d2FyZSBhbmQgdGhlIFNlcnZpY2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmNlcm5pbmcgdGhlIHVzZSBvZiB0aGUgaW5mb3JtYXRpb24vdmlkZW8gZm9vdGFnZSB3aGljaCBpcyByZWxheWVkIHRocm91Z2ggeW91ciBjY3R2IGNhbWVyYSB0b1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGUgY2xvdWQgc3RvcmFnZSBvZiBUYW5nbyBFeWUuIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPllvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBTZXJ2aWNlcyBoYXMgbm90IGJlZW4gZGVzaWduZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG8gY29sbGVjdCBvciBwcm9jZXNzIGFueSBzZW5zaXRpdmUgaW5mb3JtYXRpb24gYW5kIGFjY29yZGluZ2x5IHlvdSBhZ3JlZSBub3QgdG8gdXNlIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBTZXJ2aWNlcyB0byBjb2xsZWN0LCBwcm9jZXNzIG9yIHN0b3JlIGFueSBzZW5zaXRpdmUgcGVyc29uYWwgZGF0YSBvbmNlIHlvdSBhY2Nlc3MgdGhlIHJlcG9ydHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkIGJ5IFRhbmdvIEV5ZSBpbiBwdXJzdWFuY2UgdG8gdGhlIFNlcnZpY2VzLiBUYW5nbyBFeWUgc3BlY2lmaWNhbGx5IGRpc2NsYWltIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWFiaWxpdHkgdGhhdCBtYXkgcmVzdWx0IGZyb20geW91ciB1c2Ugb2YgdGhlIFNlcnZpY2VzIHRvIGNvbGxlY3QsIHByb2Nlc3MgYW5kIHN0b3JlIHNlbnNpdGl2ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJzb25hbCBpbmZvcm1hdGlvbi48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UYW5nbyBFeWUgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIG1vbml0b3IgdGhlIHVzZSBvZiB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgV2Vic2l0ZS9TZXJ2aWNlcy9Tb2Z0d2FyZSBieSBZb3UgdG8gZW5zdXJlIGNvbXBsaWFuY2Ugb2YgdGhlc2UgU2FhUyBUZXJtcyBhbmQgYXBwbGljYWJsZSBsYXcuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+SW4gdGhlIGV2ZW50IG9mIHZpb2xhdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhYmxlIGxhd3MgYW5kIHJlZ3VsYXRpb25zLCBUYW5nbyBFeWUgc2hhbGwgaGF2ZSB0aGUgcmlnaHQgdG8gaW52ZXN0aWdhdGUgc3VjaCBicmVhY2hlcyBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSBhcHByb3ByaWF0ZSBhY3Rpb25zIHdoaWNoIHNoYWxsIGluY2x1ZGUgYnV0IG5vdCBiZSBsaW1pdGVkIHRvIHByb3ZpZGluZyB3YXJuaW5nIHRvIGZpcnN0XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWUgb2ZmZW5kZXJzLCBzdXNwZW5kaW5nIGFuZCBvciBldmVuIHRlcm1pbmF0aW5nIHRoZSBTZXJ2aWNlcyBhbmQgYWNjZXNzIHRvIHRoZSBXZWJzaXRlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+Ni4gSW52b2ljaW5nOiA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktN1wiPkludm9pY2VzIHdpbGwgYmUgaXNzdWVkIG9uIHRoZSBiYXNpcyBvZiB0aGUgbnVtYmVyIG9mIGRlcGxveWVkIHN0b3JlcyBpbiBleGlzdGVuY2Ugb24gdGhlIGludm9pY2UgZGF0ZSBhbmQgc2hhbGwgYmUgaXNzdWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgUGF5bWVudCBUZXJtcyBpbiB0aGUgY29tbWVyY2lhbCB0ZXJtcyBhYm92ZS4gVGFuZ28gRXllIHNoYWxsIGJpbGwgQ3VzdG9tZXIgZm9yIGFwcGxpY2FibGUgdGF4ZXMgYXMgYSBzZXBhcmF0ZSBsaW5lIGl0ZW0gb24gZWFjaCBpbnZvaWNlLiBDdXN0b21lciBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgcGF5bWVudCBvZiBhbGwgc2FsZXMgYW5kIHVzZSB0YXhlcywgR29vZHMgYW5kIFNlcnZpY2VzIHRheCwgb3Igc2ltaWxhciBjaGFyZ2VzIHJlbGF0aW5nIHRvIEN1c3RvbWVy4oCZcyBwdXJjaGFzZSBhbmQgdXNlIG9mIHRoZSBTZXJ2aWNlcy48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcblxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj43LiBQYXltZW50OiA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS03XCI+UGF5bWVudCBzaGFsbCBiZSBtYWRlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgUGF5bWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUZXJtcyBpbiB0aGUgY29tbWVyY2lhbCB0ZXJtcyB3aGljaCBzaGFsbCBiZSBhZ3JlZWQgdG8gc2VwYXJhdGVseSBiZXR3ZWVuIFRhbmdvIEV5ZSBhbmQgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyIGFuZCB3aGljaCBzaGFsbCBiZSByZWFkIGFuZCBiZSBjb3Rlcm1pbm91cyB3aXRoIHRoZXNlIFNhYVMgVGVybXMgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj4oUGF5bWVudCBUZXJtcykuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIG90aGVyd2lzZSwgcGF5bWVudHMgYXJlIG5vbi1yZWZ1bmRhYmxlLiBJbiB0aGUgZXZlbnQgdGhlIEN1c3RvbWVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhaWxzIHRvIG1ha2UgdGhlIHBheW1lbnQgYXMgcGVyIHRoZSBwYXltZW50IHRlcm1zLCBUYW5nbyBFeWUgc2hhbGwgc2VuZCBhIHdyaXR0ZW4gbm90aWNlIHRvIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDbGllbnQgdG8gZW5zdXJlIHRoYXQgdGhlIHBheW1lbnQgaXMgbWFkZSB3aXRoaW4gMzAgKHRoaXJ0eSkgZGF5cyAo4oCcQWRkaXRpb25hbCBQZXJpb2TigJ0pIGZyb20gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGUgb2YgcmVjZWlwdCBzdWNoIHdyaXR0ZW4gbm90aWNlLiBJZiB0aGUgY3VzdG9tZXIgZmFpbHMgdG8gbWFrZSB0aGUgcGF5bWVudCB3aXRoaW4gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgUGVyaW9kLCB0aGUgYWNjZXNzIHRvIHRoZSB3ZWIgcG9ydGFsIHdpbGwgYmUgYmxvY2tlZCBhbmQgdGhlIFNlcnZpY2VzIHNoYWxsIGJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1c3BlbmRlZCA3IChzZXZlbikgZGF5cyBhZnRlciBzZW5kaW5nIGEgcmVtaW5kZXIgZW1haWwgdG8gQ3VzdG9tZXIgZnJvbSB0aGUgZXhwaXJ5IG9mIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBBZGRpdGlvbmFsIFBlcmlvZC48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5QYXJ0aWVzIGFja25vd2xlZGdlIHRoYXQgdGltZSBpcyBvZiB0aGUgZXNzZW5jZSB3aXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BlY3QgdG8gcGF5bWVudHMgcmVxdWlyZWQgdW5kZXIgdGhpcyBjbGF1c2UuIEluIHRoZSBldmVudCBvZiBhbnkgZGVsYXkgaW4gcGF5bWVudCBieSB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIsIFRhbmdvIEV5ZSBtYXkgcmVxdWlyZSB0aGUgQ3VzdG9tZXIgdG8gcGF5IFRhbmdvIEV5ZSBhIGxhdGUgcGF5bWVudCBwZW5hbHR5IGVxdWFsIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR3ZWx2ZSBwZXJjZW50ICgxMiUpIHBlciBhbm51bSBvbiBhbGwgb3V0c3RhbmRpbmcgcGF5bWVudHMuPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjguSW50ZWxsZWN0dWFsIFByb3BlcnR5PC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktN1wiPkFsbCBUYW5nbyBFeWUgU29mdHdhcmUsIGluY2x1ZGluZyB0aGUgV2Vic2l0ZSBhbmQgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZXMgdGhlcmV0bywgYW5kIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY3JlYXRlZCBieSBUYW5nbyBFeWUgaW4gZnVydGhlcmFuY2UgdG8gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlIG9yIGFueSB3b3JrcywgcHJvZHVjdHMsIGRvY3VtZW50cywgbWF0ZXJpYWxzIGNyZWF0ZWQgdXNpbmcsIGluY29ycG9yYXRpbmcsIGNvbXByaXNpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW4sIG9yIHJlbGF0aW5nIHRvIHN1Y2ggaW50ZWxsZWN0dWFsIHByb3BlcnR5ICjigJxUYW5nbyBFeWUgSVDigJ0pIHNoYWxsIGF0IGFsbCB0aW1lcyByZW1haW4gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4Y2x1c2l2ZSBwcm9wZXJ0eSBvZiBUYW5nbyBFeWUgYW5kL29yIGl0cyBub21pbmVlcyBvciBhZmZpbGlhdGVzLCBhcyB0aGUgY2FzZSBtYXkgYmUsIGFuZCB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIgc2hhbGwgbm90IGhhdmUgYW55IHJpZ2h0LCB0aXRsZSwgY2xhaW0gZXRjLiB3aGF0c29ldmVyIG92ZXIgdGhlIHNhbWUuIE5vdGhpbmcgY29udGFpbmVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlcmVpbiBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgYSB0cmFuc2ZlciwgYXNzaWdubWVudCBvciBjb252ZXlhbmNlIGJ5IFRhbmdvIEV5ZSB0byBDdXN0b21lciBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGUgb3duZXJzaGlwLCBpbnRlcmVzdCBvciB0aXRsZSB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9yIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW5cclxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgYXR0YWNoZWQgdG8gdGhlIFRhbmdvIEV5ZSBJUC4gVGhlIEN1c3RvbWVyIGlzIG9ubHkgYXV0aG9yaXplZCB0byByZWNlaXZlIGEgcmlnaHQgdG8gYWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhbmdvIEV5ZSBJUCBmb3IgdGhlIHRlcm0gZXhwbGljaXRseSBncmFudGVkIGJ5IFRhbmdvIEV5ZSB0byBDdXN0b21lciBhbmQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aXNpb25zIG9mIHRoZXNlIFNhYVMgVGVybXMuIFRoaXMgYXV0aG9yaXphdGlvbiBpcyBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBub24tc3ViLWxpY2Vuc2FibGUsIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LiBDdXN0b21lciBzaGFsbCBub3QgaGF2ZSBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgdG8gbW9kaWZ5LCBhZGFwdCwgaW5jb3Jwb3JhdGUsIGNyZWF0ZSBhbnkgZGVyaXZhdGl2ZSB1c2luZyBvciBpbmNvcnBvcmF0aW5nIFRhbmdvIEV5ZSBJUFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvciBpbiBhbnkgbWFubmVyIHRyYW5zZmVyLCBlbmN1bWJlciwgYWxpZW5hdGUsIHNlbGwsIHNoYXJlLCBhc3NpZ24sIGxpY2Vuc2Ugb3Igc3ViLWxldCBpdCB0byBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcmQgcGFydHkuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+QXMgYmV0d2VlbiB0aGUgcGFydGllcywgQ3VzdG9tZXIgcmV0YWlucyBhbGwgcmlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8g4oCTwqA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTVcIj5hLiBhbGwgcmF3IGRhdGEgZ2VuZXJhdGVkIGZyb20gdGhlIHVzZSBvZiB0aGUgU29mdHdhcmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGluZyB0ZXh0LCBzb3VuZCwgdmlkZW8sIG9yIGltYWdlIGZpbGVzLCBidXQgZXhjbHVkaW5nIGFueSBCdXNpbmVzcyBEYXRhICjigJxHZW5lcmF0ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0YeKAnSk7IGFuZMKgwqA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy01XCI+Yi4gcmF3IGRhdGEgb3duZWQgYnkgYW5kIHJlbGF0aW5nIHRvIHRoZSBDdXN0b21lciwgc3VjaCBhc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wYW55IGluZm9ybWF0aW9uLCBzdG9yZSBsb2NhdGlvbiBhbmQgZGV0YWlscyBvZiB0aGUgem9uZXMsIGVtcGxveWVlIGluZm9ybWF0aW9uLCBidXRcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkaW5nIGFueSBHZW5lcmF0ZWQgRGF0YSAo4oCcQnVzaW5lc3MgLCB0aGF0IGlzIHByb3ZpZGVkIHRvIFRhbmdvIEV5ZSBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIgdGhyb3VnaCB0aGUgQ3VzdG9tZXLigJlzIHVzZSBvZiB0aGUgU29mdHdhcmUgKHRvZ2V0aGVyLCDigJxDdXN0b21lciBEYXRh4oCdKS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIEN1c3RvbWVyIGhlcmVieSBncmFudHMgdG8gVGFuZ28gRXllIGEgbm9uLWV4Y2x1c2l2ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgd29ybGR3aWRlLCBmdWxseSBwYWlkIHVwIGFuZCByb3lhbHR5IGZyZWUgcmlnaHQgYW5kIGxpY2Vuc2UgdG8gdXNlIHRoZSBHZW5lcmF0ZWQgRGF0YSBmb3IgKGkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBwcm92aXNpb24gb2YgU2VydmljZXMgYW5kIGZ1bGZpbGxtZW50IG9mIG9ibGlnYXRpb25zIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgYW5kOyAoaWkpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltcHJvdmluZyB0aGUgU29mdHdhcmUuwqA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgQ3VzdG9tZXIgaGVyZWJ5IGdyYW50cyB0byBUYW5nbyBFeWUgYSBub24tZXhjbHVzaXZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JsZHdpZGUsIGZ1bGx5IHBhaWQgdXAgYW5kIHJveWFsdHkgZnJlZSByaWdodCBhbmQgbGljZW5zZSB0byB1c2UgdGhlIEJ1c2luZXNzIERhdGEgZm9yIChpKSB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdmlzaW9uIG9mIFNlcnZpY2VzIGFuZCBmdWxmaWxsbWVudCBvZiBvYmxpZ2F0aW9ucyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zOyBhbmQgKGlpKSBpbXByb3ZpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlIFNvZnR3YXJlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkN1c3RvbWVyIGFncmVlcyB0byBwcm92aWRlIGNvbW1lbnRzIG9yIGZlZWRiYWNrLCBpZiBhbnksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvIFRhbmdvIEV5ZSByZWdhcmRpbmcgdGhlIFNvZnR3YXJlIG9yIGZ1dHVyZSByZWxlYXNlcy8gZGV2ZWxvcG1lbnQgdG8gdGhlIFNvZnR3YXJlIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2Ugb2YgdGhlIHdvcmsgY2FycmllZCBvdXQgZHVyaW5nIHRoaXMgZW5nYWdlbWVudCB3aXRoIHRoZSBDdXN0b21lciBvciBhbnkgYW5kIGFsbFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBrbm93bGVkZ2UgYW5kIGluZm9ybWF0aW9uIG9mIGdlbmVyaWMgbmF0dXJlLCBhcmlzaW5nIG91dCBvZiB1c2Ugb2YgdGhlIFNvZnR3YXJlIGJ5IHRoZSBDdXN0b21lcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBkaXNjbG9zaW5nIGFueSBDdXN0b21lciBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gb3IgQ3VzdG9tZXIgRGF0YS48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgQ3VzdG9tZXIgdW5kZXJ0YWtlcyB0byBwcm9tcHRseSBpbmZvcm0gVGFuZ28gRXllIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFueSBpbmZyaW5nZW1lbnQgb2YgVGFuZ28gRXllIElQIHJpZ2h0cyBieSB0aGlyZCBwYXJ0aWVzLCBhbmQgc2hhbGwgcGVybWl0IFRhbmdvIEV5ZSB0byBhc3N1bWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgc29sZSBhdXRob3JpdHkgdG8gdGFrZSBhcHByb3ByaWF0ZSBsZWdhbCBhY3Rpb24uIEN1c3RvbWVyIHNoYWxsIG5vdCBtYWtlIGFueSBzdGF0ZW1lbnQgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWRtaXNzaW9uIGluIHJlbGF0aW9uIHRvIHN1Y2ggY2xhaW0gd2hpY2ggbWF5IHByZWp1ZGljaWFsbHkgYWZmZWN0IHRoZSBjaGFuY2VzIG9mIHNldHRsZW1lbnQgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmZW5zZSBvZiBzdWNoIGNsYWltLCBhbmQgc2hhbGwgcHJvdmlkZSBpbmZvcm1hdGlvbiBhbmQgYXNzaXN0YW5jZSByZWFzb25hYmx5IHJlcXVlc3RlZCBpblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0aW9uIHdpdGggc3VjaCBjbGFpbSBvciBzdWl0LjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRhbmdvIEV5ZSBoZXJlYnkgdW5kZXJ0YWtlcywgaW4gdGhlIGV2ZW50IHRoYXQgdGhpcmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGFydGllcyBhY3QgYWdhaW5zdCB0aGUgQ3VzdG9tZXIgZm9yIGFueSByZWFzb24gd2hhdHNvZXZlciBpbiByZWxhdGlvbiB0byB0aGUgU29mdHdhcmUgb3IgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRhbmdvIEV5ZSBJUCwgdG8gcHJvdmlkZSB0aGUgZG9jdW1lbnRhdGlvbiBpbiB0aGVpciBwb3NzZXNzaW9uIGFuZCBvdGhlcndpc2UgZG8gYW5kIGV4ZWN1dGUgYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdHMsIHRoaW5ncywgbWF0dGVycyBhbmQgZGVlZHMgYXMgbWF5IGJlIHJlYXNvbmFibHkgcmVxdWlyZWQgYnkgdGhlIEN1c3RvbWVyLCBmcm9tIHRpbWUgdG8gdGltZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0byBzaG93IG93bmVyc2hpcCBvZiBzdWNoIFRhbmdvIEV5ZSBJUC48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+Q3VzdG9tZXIgaGVyZWJ5IGNvbnNlbnRzIGFuZCBvcHRzIGluIHRvIHJlY2VpdmUgY29tbXVuaWNhdGlvbnMgdGhhdCBUYW5nbyBFeWUgbWF5IHNlbmQgdmlhIGNhbGwgb3IgbWVzc2FnZSBzZXJ2aWNlIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50LCB0byBDdXN0b21lciBpbmNsdWRpbmcgaXRzIGVtcGxveWVlcywgc3RhZmYgYW5kIG90aGVyIHJlcHJlc2VudGF0aXZlcy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+OS4gRGF0YSBQcm90ZWN0aW9uIGFuZCBQcml2YWN5IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTdcIj5FYWNoIFBhcnR5IHNoYWxsIGF0IGFsbCB0aW1lcyBjb21wbHkgd2l0aCBpdHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JsaWdhdGlvbnMgdW5kZXIgYXBwbGljYWJsZSBwcml2YWN5IHJlZ3VsYXRpb25zIGluIHJlbGF0aW9uIHRvIHRoZSBHZW5lcmF0ZWQgRGF0YSwgQnVzaW5lc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSwgYW5kIEN1c3RvbWVyIERhdGEgdGhhdCBpcyBjb2xsZWN0ZWQsIHN0b3JlZCBhbmQvb3IgcHJvY2Vzc2VkIGJ5IGl0IGluIHRoZSBjb3Vyc2Ugb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWluZyBpdHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcy4gRnVydGhlciBlYWNoIFBhcnR5IHNoYWxsIHByb2Nlc3Mgc3VjaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBHZW5lcmF0ZWQgRGF0YSwgQnVzaW5lc3MgRGF0YSwgYW5kIEN1c3RvbWVyIERhdGEgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSBmb3IgdGhlIHB1cnBvc2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mIHBlcmZvcm1pbmcgdGhlaXIgcmVzcGVjdGl2ZSBvYmxpZ2F0aW9ucyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkVhY2ggcGFydHkgc2hhbGwgdGFrZSBhcHByb3ByaWF0ZSB0ZWNobmljYWwgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yZ2FuaXphdGlvbmFsIG1lYXN1cmVzIGFzIHJlcXVpcmVkIHVuZGVyIGFwcGxpY2FibGUgbGF3IGFnYWluc3QgYW55IGRhdGEgYnJlYWNoLCB1bmF1dGhvcml6ZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgdW5sYXdmdWwgcHJvY2Vzc2luZyBvZiB0aGUgcGVyc29uYWwgZGF0YSBvciBpdHMgYWNjaWRlbnRhbCBsb3NzLCBkZXN0cnVjdGlvbiBvciBkYW1hZ2UuPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjEwLiBSZXByZXNlbnRhdGlvbnMsIFdhcnJhbnRpZXMgYW5kIERpc2NsYWltZXJzIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTdcIj5FYWNoIFBhcnR5IHJlcHJlc2VudHMsIHdhcnJhbnRzIGFuZCBjb3ZlbmFudHMgdG8gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyIHRoYXQ6IChpKSBpdCBpcyBkdWx5IG9yZ2FuaXplZCBhbmQgdmFsaWRseSBleGlzdGluZyBhbmQgaW4gZ29vZCBzdGFuZGluZyB1bmRlciB0aGUgbGF3cyBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3RhdGUgb2YgaXRzIGluY29ycG9yYXRpb24gb3IgZm9ybWF0aW9uOyAoaWkpIGl0IGhhcyB0aGUgZnVsbCByaWdodCBhbmQgYXV0aG9yaXR5IHRvIGVudGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlc2UgU2FhUyBUZXJtcyBhbmQgdGhhdCB0aGVzZSBTYWFTIFRlcm1zIGNvbnN0aXR1dGVzIGEgbGVnYWwsIHZhbGlkIGFuZCBiaW5kaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9ibGlnYXRpb247IChpaWkpIHRoZSBleGVjdXRpb24sIGRlbGl2ZXJ5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGVzZSBTYWFTIFRlcm1zIGRvZXMgbm90IGFuZCB3aWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vdCBjb25mbGljdCB3aXRoLCBvciBjb25zdGl0dXRlIGEgYnJlYWNoIG9yIGRlZmF1bHQgdW5kZXIsIGl0cyBjaGFydGVyIG9mIG9yZ2FuaXphdGlvbiwgb3IgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyYWN0IG9yIG90aGVyIGluc3RydW1lbnQgdG8gd2hpY2ggaXQgaXMgYSBwYXJ0eTsgKGl2KSBpdCB3aWxsIGNvbXBseSB3aXRoLCBhbmQgd2lsbCBlbnN1cmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWxsIG9mIGl0cyBwZXJzb25uZWwsIHRoaXJkIHBhcnR5IGFnZW50cywgY29uc3VsdGFudHMgZXRjLiwgY29tcGx5IHdpdGggYWxsIGxhd3MgYW5kIHJlZ3VsYXRpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGUgdG8gKGkpIHRoZSBwcm92aXNpb24sIG9yIGFjY2VzcyBhbmQgdXNlIG9mIHRoZSBTb2Z0d2FyZTsgYW5kIChpaSkgcGVyZm9ybWFuY2Ugb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JsaWdhdGlvbnMgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBsYXdzIGFuZCByZWd1bGF0aW9ucyByZWxhdGVkIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaXZhY3ksIGRhdGEgcHJvdGVjdGlvbiwgZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9ucywgZXhwb3J0IGFuZCBjb25maWRlbnRpYWxpdHkuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGFuZ28gRXllIHJlcHJlc2VudHMsIHdhcnJhbnRzIGFuZCBjb3ZlbmFudHMgdGhhdCAoaSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFuZ28gRXllIHBlcnNvbm5lbCBzaGFsbCBwcm92aWRlIHRoZSBTZXJ2aWNlcyBpbiBhIGRpbGlnZW50IGFuZCBwcm9mZXNzaW9uYWwgbWFubmVyIHdpdGggZHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhcmUgKGlpKSBUYW5nbyBFeWUgSVAgZG9lcyBub3QgYW5kIHdpbGwgbm90IGluZnJpbmdlLCBtaXNhcHByb3ByaWF0ZSBvciBvdGhlcndpc2UgdmlvbGF0ZSB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgcGFydHkgd2l0aGluIHRoZSB0ZXJyaXRvcnkgb2YgSW5kaWEgYW5kIG9yIGFueSBvdGhlciBjb3VudHJ5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGl0cyByaWdoc3QgYXJlIHJlZ2lzdGVyZWQ7IGFuZCAoaWlpKSBhbGwgU2VydmljZXMgdGhhdCBhcmUgcHJvdmlkZWQgd2lsbCBiZSBmcmVlIGZyb20gYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtub3duIG1hbGljaW91cyBjb2RlIG9yIGluc3RydWN0aW9ucyB0aGF0IG1heSBpbnRlbnRpb25hbGx5IGRpc3J1cHQsIGRhbWFnZSBvciBpbnRlcmZlcmUgd2l0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbnkgdXNlIGJ5IEN1c3RvbWVyLiBUYW5nbyBFeWUgZnVydGhlciB3YXJyYW50cyBhbmQgcmVwcmVzZW50cyB0byB0aGUgQ3VzdG9tZXIgdGhhdCBpdCBob2xkcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHdpbGwgY29udGludWUgdG8gaG9sZCwgYW55IGFuZCBhbGwgbGljZW5zZXMsIHBlcm1pdHMgb3Igb3RoZXIgYXV0aG9yaXphdGlvbnMgcmVxdWlyZWQgYnkgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGUgbGF3IHRvIHBlcmZvcm0gdGhlIFNlcnZpY2VzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGVzZSBTYWFTIFRlcm1zLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj48c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnEFwcGxpY2FibGUgbGF34oCdPC9zcGFuPiBtZWFucyBhbnkgYXBwbGljYWJsZSBsYXcsIHN0YXR1dGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGUsIHJlZ3VsYXRpb24sIG9yZGluYW5jZSwgcmVxdWlyZW1lbnQsIGRpcmVjdGlvbnMsIGd1aWRlbGluZXMsIGFubm91bmNlbWVudCBvciBvdGhlciBiaW5kaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbiBvciByZXF1aXJlbWVudCBvZiBhbnkgZ292ZXJubWVudCBvciBxdWFzaSBnb3Zlcm5tZW50OyBkZXBhcnRtZW50LCBhZ2VuY3kgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1bWVudGFsaXR5IG9mIGFueSBnb3Zlcm5tZW50IHRoZXJlb2YsIGFueSBjb3VydCBvciBhcmJpdHJhbCB0cmlidW5hbCBhcHBsaWNhYmxlIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGlzdGluZyB1bmRlciB0aGUgcmVwdWJsaWMgb2YgSW5kaWEuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRIRSBTT0ZUV0FSRSBBTkQgQU5ZVEhJTkcgUFJPVklERUQgSU4gQ09OTkVDVElPTiBXSVRIXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRIRVNFIFNhYVMgVEVSTVMgQVJFIFBST1ZJREVEIOKAnEFTLUlT4oCdLiBFWENFUFQgRk9SIFRIRSBFWFBSRVNTIFJFUFJFU0VOVEFUSU9OUyBBTkQgV0FSUkFOVElFUyBJTlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUSElTIFNFQ1RJT04gNiwgVEFOR08gRVlFIERPRVMgTk9UIE1BS0UgQU5ZIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTLCBJTVBMSUVEIE9SXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRVVE9SWSBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBRVUFMSVRZLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgU1lTVEVNIElOVEVHUkFUSU9OLCBFUlJPUi1GUkVFLCBVTi1JTlRFUlJVUFRJT04sIFNVUFBPUlRcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ09SUkVDVElPTiBPUiBSRVBBSVIgKFVOTEVTUyBPVEhFUldJU0UgQUdSRUVEKSBPUiBPVEhFUldJU0UgVEhBVCBUQU5HTyBFWUUgU09GVFdBUkUgSEVSRVVOREVSXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFdJTEwgT1BFUkFURSBJTiBFVkVSWSBDT01CSU5BVElPTiBPUiBFTlZJUk9OTUVOVCBERVNJUkVEIEJZIENVU1RPTUVSIFdJVEggQU5ZIERBVEEsIERFVklDRVMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENPTVBVVEVSIFNZU1RFTVMgQU5EIFBST0dSQU1TIE9GIElUUyBDSE9JQ0UgT1IgVEhBVCBUSEUgUkVNRURZSU5HIE9GIE9ORSBQUk9HUkFNIEVSUk9SIERPRVMgTk9UXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFJFU1VMVCBJTiBUSEUgT0NDVVJSRU5DRSBPRiBPVEhFUiBQUk9HUkFNIEVSUk9SUy4gQUxMIFNVQ0ggUkVQUkVTRU5UQVRJT05TIEFORCBXQVJSQU5USUVTIEFSRVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBIRVJFQlkgRElTQ0xBSU1FRC48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG10LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEN1c3RvbWVyIHdhcnJhbnRzIHRoYXQ6IDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPiBhLiBDdXN0b21lciBEYXRhIGRvZXMgbm90IGFuZCB3aWxsIG5vdCBpbmZyaW5nZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWlzYXBwcm9wcmlhdGUgb3Igb3RoZXJ3aXNlIHZpb2xhdGUgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IHRoaXJkIHBhcnR5OzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj5iLiBpdCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciBhbnkgc2VjdXJpdHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdnVsbmVyYWJpbGl0aWVzIGFuZCB0aGUgY29uc2VxdWVuY2VzIG9mIHN1Y2ggdnVsbmVyYWJpbGl0aWVzIGFyaXNpbmcgc29sZWx5IGZyb20gdGhlIG5hdHVyZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lciBEYXRhOzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj4gYy4gaXQgc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgRW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJzIGNvbXBseSB3aXRoIGFsbCByZXF1aXJlbWVudHMgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyBpbiByZWxhdGlvbiB0byB0aGUgdXNlIG9mIHRoZSBTb2Z0d2FyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAodG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlKTs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+IGQuIGl0IHNoYWxsIGltbWVkaWF0ZWx5IG5vdGlmeSBUYW5nbyBFeWUgb2YgKGEpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFueSBhY2NvdW50LXJlbGF0ZWQgYWJ1c2U7IChiKSB0aGUgdW5hdXRob3JpemVkIGRpc2Nsb3N1cmUsIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZWlyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY291bnQgY3JlZGVudGlhbHMgYnkgb3IgdG8gYW55IHRoaXJkIHBhcnR5OyBhbmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+IGUuIGl0IHNoYWxsIG5vdCwgYW5kIHNoYWxsIG5vdCBwZXJtaXQgYW55IHBhcnR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yIHBlcnNvbiB0bywgYWNjZXNzIG9yIHVzZSB0aGUgU29mdHdhcmUgZXhjZXB0IGFzIGV4cHJlc3NseSBwZXJtaXR0ZWQgYnkgdGhlc2UgU2FhUyBURVJNUy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgV2l0aG91dCBsaW1pdGluZyB0aGUgZ2VuZXJhbGl0eSBvZiB0aGUgZm9yZWdvaW5nLCBDdXN0b21lciBzaGFsbCBub3QsIGFuZCBzaGFsbCBub3QgcGVybWl0IGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0eSBvciBwZXJzb24gdG86PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtMTBcIj4gMS4gaW50ZXJmZXJlIHdpdGggb3IgZGlzcnVwdCB0aGUgaW50ZWdyaXR5IG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcmZvcm1hbmNlIG9mIHRoZSBTb2Z0d2FyZSwgb3IgY2lyY3VtdmVudCwgYnlwYXNzLCBkZWxldGUgb3IgcmVtb3ZlIGFueSBmb3JtIG9mIHByb3RlY3Rpb24sIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlLCBmdW5jdGlvbmFsaXR5IG9yIHRlY2huaWNhbCByZXN0cmljdGlvbnMgb3IgbGltaXRhdGlvbnMsIG9yIHRvIGVuYWJsZSBmdW5jdGlvbmFsaXR5XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVkIGJ5IFRhbmdvIEV5ZSwgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBTb2Z0d2FyZTs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy0xMFwiPiAyLiBhY2Nlc3Mgb3IgdXNlIHRoZSBTb2Z0d2FyZSBwcm92aWRlZCB1bmRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGVzZSBTYWFTIFRlcm1zLCBpbiBhbnkgbWFubmVyIG9yIGZvciBhbnkgcHVycG9zZSB0aGF0IHZpb2xhdGVzIGFueSBhcHBsaWNhYmxlIGxhdywgdGhlIHJpZ2h0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvZiBvdGhlcnMsIGluIGEgd2F5IHRoYXQgY291bGQgaGFybSB0aGUgc2VydmljZS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy0xMFwiPjMuIHJldmVyc2UgZW5naW5lZXIsIGRpc2Fzc2VtYmxlLCBkZS1jb21waWxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZWNyZWF0ZSwgY29weSBvciByZXByb2R1Y2UgdGhlIHNvdXJjZSBjb2RlIG9yIG9iamVjdCBjb2RlIG9mIHRoZSBTb2Z0d2FyZSBvciBwZXJmb3JtIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21pemF0aW9ucyAod2l0aG91dCBUYW5nbyBFeWXigJlzIHByaW9yIHdyaXR0ZW4gY29uc2VudCk7IGFuZDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjExLiBDdXN0b21lcuKAmXMgQWNjb3VudCA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lcnMgYXJlIGZ1bGx5IHJlc3BvbnNpYmxlIHRvIHNhZmVndWFyZCB0aGVpciBhY2Nlc3MgY3JlZGVudGlhbHMgLSBpbmNsdWRpbmcgaW4gdGhlIHNlbnNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBjb21iaW5hdGlvbiBvZiB1c2VybmFtZSBhbmQgcGFzc3dvcmQuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xMi4gRHVyYXRpb24sIFJlbmV3YWwgYW5kIFRlcm1pbmF0aW9uIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGluIHRoZSBwcm9wb3NhbCwgdGhlc2UgU2FhUyBUZXJtcyBzaGFsbCBjb250aW51ZSB0byBiZSBlZmZlY3RpdmUgZHVyaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgcGVyaW9kXHJcbiAgICAgICAgICAgICAgICAgICAgdGhlIEN1c3RvbWVyIHVzZXMgYW5kIG9yIGNvbnRpbnVlcyB0byB1c2UgdGhlIFNvZnR3YXJlLCB1bmxlc3MgdGVybWluYXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgdGVybXMgc2V0XHJcbiAgICAgICAgICAgICAgICAgICAgb3V0XHJcbiAgICAgICAgICAgICAgICAgICAgaGVyZWluLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgaW4gdGhlIE9yZGVyIEZvcm0sIGZlZXMgc2hhbGwgYmUgc3ViamVjdCB0byBhdXRvbWF0aWMgaW5jcmVtZW50IGF0IHRoZSByYXRlIG9mIDclIHBlciBhbm51bSBhZnRlciBldmVyeSAxMiBtb250aHMuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBFaXRoZXIgcGFydHkgbWF5IHRlcm1pbmF0ZSB0aGVpciBidXNpbmVzcyByZWxhdGlvbnNoaXAgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyBpbW1lZGlhdGVseSB1cG9uIGFcclxuICAgICAgICAgICAgICAgICAgICBtYXRlcmlhbFxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFjaCBieSB0aGUgb3RoZXIgcGFydHkgdGhhdCBoYXMgbm90IGJlZW4gY3VyZWQgd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2Ugb2ZcclxuICAgICAgICAgICAgICAgICAgICBzdWNoXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWNoLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBFaXRoZXIgcGFydHkgbWF5IGFsc28gdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IHVwb24gdGhpcnR5ICgzMCkgZGF5cyB3cml0dGVuIG5vdGljZSB3aXRob3V0XHJcbiAgICAgICAgICAgICAgICAgICAgYXNzaWduaW5nIGFueVxyXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbi4gQ3VzdG9tZXIgd2lsbCBwYXkgaW4gZnVsbCBmb3IgdGhlIFNvZnR3YXJlIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGxhc3QgZGF5IG9uIHdoaWNoIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgd2FzIHVzZWQuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChhKSBVcG9uIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMsIFRhbmdvIEV5ZSBzaGFsbCBpbW1lZGlhdGVseSBjZWFzZSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBTb2Z0d2FyZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChiKSBVcG9uIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMsIFRhbmdvIEV5ZSBtYXkgZGVsZXRlIHRoZSBHZW5lcmF0ZWQgRGF0YSwgQnVzaW5lc3MgRGF0YSBhbmQgQ3VzdG9tZXIgRGF0YSBjb2xsZWN0ZWQsIHN0b3JlZCBhbmQvb3IgcHJvY2Vzc2VkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgZm9yIHRoZSBwdXJwb3NlIG9mIHByb3ZpZGluZyB0aGUgU29mdHdhcmUgd2l0aGluIDE1IChmaWZ0ZWVuKSBkYXlzIG9mIHJlY2VpcHQgb2Ygbm90aWNlIG9mIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoYykgSWYgVGFuZ28gRXllIHRlcm1pbmF0ZXMgdGhlc2UgU2FhUyBUZXJtcyBkdWUgdG8gYSBicmVhY2ggYnkgQ3VzdG9tZXIgb2YgYW55IG9mIHRoZSBwcm92aXNpb25zIGNvbnRhaW5lZCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLCB0aGVuIEN1c3RvbWVyIHNoYWxsIGltbWVkaWF0ZWx5IHBheSB0byBUYW5nbyBFeWUgYWxsIGFtb3VudHMgdGhlbiBkdWUgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcy4gSWYgQ3VzdG9tZXIgdGVybWluYXRlcyB0aGVzZSBTYWFTIFRlcm1zIGR1ZSB0byBhIGJyZWFjaCBieSBUYW5nbyBFeWUsIHRoZW4gVGFuZ28gRXllIHNoYWxsIGltbWVkaWF0ZWx5IHJlcGF5IHRvIEN1c3RvbWVyIGFsbCBwcmUtcGFpZCBhbW91bnRzIGZvciBhbnkgdW5wZXJmb3JtZWQgU2VydmljZXMgc2NoZWR1bGVkIHRvIGJlIGRlbGl2ZXJlZCBhZnRlciB0aGUgdGVybWluYXRpb24gZGF0ZS5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChkKSBTdWJqZWN0IHRvIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLCB1cG9uIGl0cyB0ZXJtaW5hdGlvbiBhbmQgdXBvbiBzdWJzZXF1ZW50IHdyaXR0ZW4gcmVxdWVzdCBieSB0aGUgRGlzY2xvc2luZyBQYXJ0eSwgdGhlIFJlY2VpdmluZyBQYXJ0eSBvZiB0YW5naWJsZSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gc2hhbGwgaW1tZWRpYXRlbHkgcmV0dXJuIHN1Y2ggaW5mb3JtYXRpb24gb3IgZGVzdHJveSBzdWNoIGluZm9ybWF0aW9uIGFuZCBwcm92aWRlIHdyaXR0ZW4gY2VydGlmaWNhdGlvbiBvZiBzdWNoIGRlc3RydWN0aW9uLCBwcm92aWRlZCB0aGF0IHRoZSByZWNlaXZpbmcgcGFydHkgbWF5IHBlcm1pdCBpdHMgbGVnYWwgY291bnNlbCB0byByZXRhaW4gb25lIGFyY2hpdmFsIGNvcHkgb2Ygc3VjaCBpbmZvcm1hdGlvbiBpbiB0aGUgZXZlbnQgb2YgYSBzdWJzZXF1ZW50IGRpc3B1dGUgYmV0d2VlbiB0aGUgcGFydGllcy5cclxuVGhlIHByb3Zpc2lvbnMgcmVsYXRpbmcgdG8gY29uZmlkZW50aWFsaXR5LCBhcyB3ZWxsIGFzIGZvciBsaWFiaWxpdHksIGFwcGxpY2FibGUgbGF3IGFuZCBzZXR0bGVtZW50IG9mIGRpc3B1dGVzIHNoYWxsIHN1cnZpdmUgdGhlIGV4cGlyYXRpb24gb3IgdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcy5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVGVybWluYXRpb24gc2hhbGwgbm90IGFmZmVjdCBhbnkgcmlnaHRzIG9yIG9ibGlnYXRpb25zIG9mIHRoZSBwYXJ0aWVzIGluY3VycmVkIHByaW9yIHRvIHRoZSBkYXRlIG9mIHRlcm1pbmF0aW9uLCB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBiZXR3ZWVuIHRoZSBwYXJ0aWVzLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTMuIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLCBUYW5nbyBFeWUgc2hhbGwgaW1tZWRpYXRlbHkgY2Vhc2UgcHJvdmlkaW5nIGFjY2VzcyB0byB0aGVcclxuICAgICAgICAgICAgICAgICAgICBTb2Z0d2FyZS5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLCBUYW5nbyBFeWUgc2hhbGwgZGVsZXRlIHRoZSBHZW5lcmF0ZWQgRGF0YSwgQnVzaW5lc3MgRGF0YSBhbmRcclxuICAgICAgICAgICAgICAgICAgICBDdXN0b21lciBEYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdGVkLCBzdG9yZWQgYW5kL29yIHByb2Nlc3NlZCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIGZvciB0aGUgcHVycG9zZSBvZiBwcm92aWRpbmcgdGhlIFNvZnR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgd2l0aGluIDE1XHJcbiAgICAgICAgICAgICAgICAgICAgKGZpZnRlZW4pIGRheXMgb2YgcmVjZWlwdCBvZiBub3RpY2Ugb2YgdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcy5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgSWYgVGFuZ28gRXllIHRlcm1pbmF0ZXMgdGhlc2UgU2FhUyBUZXJtcyBkdWUgdG8gYSBicmVhY2ggYnkgQ3VzdG9tZXIgb2YgYW55IG9mIHRoZSBwcm92aXNpb25zXHJcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVkIHVuZGVyIHRoZXNlXHJcbiAgICAgICAgICAgICAgICAgICAgU2FhUyBUZXJtcywgdGhlbiBDdXN0b21lciBzaGFsbCBpbW1lZGlhdGVseSBwYXkgdG8gVGFuZ28gRXllIGFsbCBhbW91bnRzIHRoZW4gZHVlIHVuZGVyIHRoZXNlIFNhYVNcclxuICAgICAgICAgICAgICAgICAgICBUZXJtcy4gSWZcclxuICAgICAgICAgICAgICAgICAgICBDdXN0b21lciB0ZXJtaW5hdGVzIHRoZXNlIFNhYVMgVGVybXMgZHVlIHRvIGEgYnJlYWNoIGJ5IFRhbmdvIEV5ZSwgdGhlbiBUYW5nbyBFeWUgc2hhbGwgaW1tZWRpYXRlbHlcclxuICAgICAgICAgICAgICAgICAgICByZXBheSB0b1xyXG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyIGFsbCBwcmUtcGFpZCBhbW91bnRzIGZvciBhbnkgdW5wZXJmb3JtZWQgU2VydmljZXMgc2NoZWR1bGVkIHRvIGJlIGRlbGl2ZXJlZCBhZnRlciB0aGVcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGlvbiBkYXRlLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBTdWJqZWN0IHRvIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLCB1cG9uIGl0cyB0ZXJtaW5hdGlvbiBhbmQgdXBvbiBzdWJzZXF1ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgd3JpdHRlbiByZXF1ZXN0IGJ5XHJcbiAgICAgICAgICAgICAgICAgICAgdGhlIERpc2Nsb3NpbmcgUGFydHksIHRoZSBSZWNlaXZpbmcgUGFydHkgb2YgdGFuZ2libGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHNoYWxsIGltbWVkaWF0ZWx5XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN1Y2hcclxuICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvciBkZXN0cm95IHN1Y2ggaW5mb3JtYXRpb24gYW5kIHByb3ZpZGUgd3JpdHRlbiBjZXJ0aWZpY2F0aW9uIG9mIHN1Y2ggZGVzdHJ1Y3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgcHJvdmlkZWQgdGhhdCB0aGVcclxuICAgICAgICAgICAgICAgICAgICByZWNlaXZpbmcgcGFydHkgbWF5IHBlcm1pdCBpdHMgbGVnYWwgY291bnNlbCB0byByZXRhaW4gb25lIGFyY2hpdmFsIGNvcHkgb2Ygc3VjaCBpbmZvcm1hdGlvbiBpbiB0aGVcclxuICAgICAgICAgICAgICAgICAgICBldmVudCBvZiBhXHJcbiAgICAgICAgICAgICAgICAgICAgc3Vic2VxdWVudCBkaXNwdXRlIGJldHdlZW4gdGhlIHBhcnRpZXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFRoZSBwcm92aXNpb25zIHJlbGF0aW5nIHRvIGNvbmZpZGVudGlhbGl0eSwgYXMgd2VsbCBhcyBmb3IgbGlhYmlsaXR5LCBhcHBsaWNhYmxlIGxhdyBhbmQgc2V0dGxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgIG9mIGRpc3B1dGVzXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhbGwgc3Vydml2ZSB0aGUgZXhwaXJhdGlvbiBvciB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBUZXJtaW5hdGlvbiBzaGFsbCBub3QgYWZmZWN0IGFueSByaWdodHMgb3Igb2JsaWdhdGlvbnMgb2YgdGhlIHBhcnRpZXMgaW5jdXJyZWQgcHJpb3IgdG8gdGhlIGRhdGUgb2ZcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hdGlvbixcclxuICAgICAgICAgICAgICAgICAgICB1bmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBiZXR3ZWVuIHRoZSBwYXJ0aWVzLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj4gLS0+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjEzLiBBY2Nlc3MgdG8gQW5hbHl0aWNzIHZpYSBXZWIgUG9ydGFsICYgRXhjZWwgUmVwb3J0czwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgYW5hbHl0aWNzIGlzIGRlc2lnbmVkIGZvciB1c2Ugd2l0aCBhKSB3ZWItYmFzZWRcclxuICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbiwgYikgZXhjZWwgcmVwb3J0cyBzZW50IHZpYSBlbWFpbCBvciBGaWxlIFRyYW5zZmVyIFByb3RvY29sLlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8IS0tIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UcmFpbmluZzogQWxsIOKAnFNvZnR3YXJl4oCdIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIFNlcnZpY2VzLiBGb3IgYXZvaWRhbmNlIG9mIGRvdWJ0LCBpdCBpcyBjbGFyaWZpZWQgdGhhdCBUYW5nbyBFeWUgYWdyZWVzIHRvIHByb3ZpZGUgc2FtcGxlIGRhc2hib2FyZFxyXG4gICAgICAgICAgICAgICAgICAgIGFuZCBhcnJhbmdlIGZvciB0cmFpbmluZyBzZXNzaW9ucyB0byB0aGUgQ3VzdG9tZXIgYXMgbXV0dWFsbHkgYWdyZWVkIGJ5IHRoZSBQYXJ0aWVzLlxyXG4gICAgICAgICAgICAgICAgPC9saT4gLS0+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjE0LiBUcmFpbmluZyA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+QWxsIOKAnFNvZnR3YXJl4oCdIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBTZXJ2aWNlcy4gRm9yIGF2b2lkYW5jZSBvZiBkb3VidCwgaXQgaXMgY2xhcmlmaWVkIHRoYXQgVGFuZ28gRXllIGFncmVlcyB0byBwcm92aWRlIGEgc2FtcGxlIGRhc2hib2FyZCBhbmQgYXJyYW5nZSBmb3IgdHJhaW5pbmcgc2Vzc2lvbnMgdG8gdGhlIEN1c3RvbWVyIGFzIG11dHVhbGx5IGFncmVlZCBieSB0aGUgUGFydGllcy5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xNS4gQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPkFsbCBwcm9wcmlldGFyeSBvciBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24sIHRlY2huaWNhbCBkYXRhLFxyXG4gICAgICAgICAgICAgICAgICAgIG9yIGtub3ctaG93IGFuZCBhbGwgb3RoZXIgbm9uLXB1YmxpYyBpbmZvcm1hdGlvbiwgbWF0ZXJpYWwgb3IgZGF0YSBpbiB3aGF0ZXZlciBmb3JtIG9yIG1vZGUgb2ZcclxuICAgICAgICAgICAgICAgICAgICBjb21tdW5pY2F0aW9uLCB3aGljaCBpcyBkaXNjbG9zZWQgYnkgYSBwYXJ0eSAo4oCcRGlzY2xvc2luZyBQYXJ0eeKAnSkgdG8gdGhlIG90aGVyIHBhcnR5ICjigJxSZWNlaXZpbmdcclxuICAgICAgICAgICAgICAgICAgICBQYXJ0eeKAnSkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBTb2Z0d2FyZSBhY2Nlc3MgYW5kIHVzYWdlIHdoZXRoZXIgbWFya2VkIGFzIOKAnGNvbmZpZGVudGlhbOKAnSBvciBub3QgYXRcclxuICAgICAgICAgICAgICAgICAgICB0aGUgdGltZSBvZiBkaXNjbG9zdXJlLCBzaGFsbCBiZSB0cmVhdGVkIGFzIOKAnENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbuKAnS4gQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhbGwgaW5jbHVkZSwgYnV0IG5vdCBiZSBsaW1pdGVkIHRvLCB0aGUgdGVybXMgYW5kIHByaWNpbmcvY29tbWVyY2lhbCB0ZXJtcyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoZSB0ZWNobmljYWwgYW5kIG90aGVyIHNwZWNpZmljYXRpb25zIG9mIHRoZSBTb2Z0d2FyZSwgYW55IGluZm9ybWF0aW9uIHNwZWNpZmljIHRvIHRoZSBzb2Z0d2FyZVxyXG4gICAgICAgICAgICAgICAgICAgIGxpY2Vuc2UgY29kZXMgYW5kIGNvbnRlbnQgYXMgd2VsbCBhcyB0aGUgc29mdHdhcmUgYW5kIGhhcmR3YXJlIGFyY2hpdGVjdHVyZSBhbmQgY29tcG9uZW50cywgYW5kIGFsbFxyXG4gICAgICAgICAgICAgICAgICAgIG90aGVyIG5vbi1wdWJsaWMgaW5mb3JtYXRpb24uXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBSZWNlaXZpbmcgUGFydHkgdW5kZXJ0YWtlczogKGkpIG5vdCB0byB1c2UgQ29uZmlkZW50aWFsXHJcbiAgICAgICAgICAgICAgICAgICAgSW5mb3JtYXRpb24gb3RoZXJ3aXNlIHRoYW4gZm9yIHRoZSBwdXJwb3NlIGZvciB3aGljaCBpdCB3YXMgZGlzY2xvc2VkIG9yIHRvIHBlcm1pdCB0aGUgUmVjZWl2aW5nXHJcbiAgICAgICAgICAgICAgICAgICAgUGFydHkgdG8gZXhlcmNpc2UgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgOyAoaWkpIG5vdCB0byBkaXNjbG9zZVxyXG4gICAgICAgICAgICAgICAgICAgIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgdGhlIERpc2Nsb3NpbmcgUGFydHksIG90aGVyIHRoYW4gdG9cclxuICAgICAgICAgICAgICAgICAgICB0aG9zZSBlbXBsb3llZXMsIGFnZW50cywgY29udHJhY3RvcnMsIHN1YmNvbnRyYWN0b3JzLCBsaWNlbnNlZXMgb2YgdGhlIFJlY2VpdmluZyBQYXJ0eSwgaXRzXHJcbiAgICAgICAgICAgICAgICAgICAgQWZmaWxpYXRlcyBvciBhbnkgb3RoZXIgcGFydGllcyB3aG8gaGF2ZSBhIG5lZWQgdG8ga25vdyBpdCBpbiBvcmRlciB0byBhc3Npc3QgdGhlIFJlY2VpdmluZyBQYXJ0eSBpblxyXG4gICAgICAgICAgICAgICAgICAgIHBlcmZvcm1pbmcgaXRzIG9ibGlnYXRpb25zLCBvciB0byBwZXJtaXQgdGhlIFJlY2VpdmluZyBQYXJ0eSB0byBleGVyY2lzZSBpdHMgcmlnaHRzwqAgYW5kIGxpY2Vuc2VzXHJcbiAgICAgICAgICAgICAgICAgICAgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IChpaWkpIHRvIHRha2UgYWxsIHN1Y2ggc3RlcHMgdG8gcHJldmVudCB1bmF1dGhvcml6ZWQgYWNjZXNzIHRvIHRoZSBEaXNjbG9zaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgUGFydHnigJlzIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiwgYXMgaXQgdGFrZXMgdG8gcHJvdGVjdCBpdHMgb3duIGNvbmZpZGVudGlhbCBvciBwcm9wcmlldGFyeVxyXG4gICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIG9mIGEgc2ltaWxhciBuYXR1cmUsIHdoaWNoIHN0ZXBzIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxlc3MgdGhhbiBhIHJlYXNvbmFibGUgc3RhbmRhcmQgb2ZcclxuICAgICAgICAgICAgICAgICAgICBjYXJlOyBhbmQgaXYpIHRvIHJldHVybiB0byB0aGUgQ3VzdG9tZXIsIG9yIGRlc3Ryb3ksIG9uIHJlcXVlc3QgYWxsIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiB0aGF0XHJcbiAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gZGlzY2xvc2VkIHRvIHRoZW0sIGluY2x1ZGluZyBhbGwgY29waWVzIHRoZXJlb2YgYW5kIHRvIGRlbGV0ZSBhbGwgaW5mb3JtYXRpb24gc3RvcmVkIGluIGFcclxuICAgICAgICAgICAgICAgICAgICBtYWNoaW5lLXJlYWRhYmxlIGZvcm0gdG8gdGhlIGV4dGVudCBwcmFjdGljYWxseSBwb3NzaWJsZSwgc3ViamVjdCB0byBhbnkgcmlnaHRzIG9yIGxpY2Vuc2VzIGdyYW50ZWRcclxuICAgICAgICAgICAgICAgICAgICB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIC5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIG9ibGlnYXRpb25zIGluIHJlbGF0aW9uIHRvIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvblxyXG4gICAgICAgICAgICAgICAgICAgIHVuZGVyIHRoZXNlIFNhYVMgVGVybXPCoCBzaGFsbCBub3QgYXBwbHkgdG8gQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uLCB3aGljaCAoaSkgaGFzIGJlY29tZSBvciBiZWNvbWVzXHJcbiAgICAgICAgICAgICAgICAgICAgcHVibGljbHkgYXZhaWxhYmxlIGJ5IG1lYW5zIG90aGVyIHRoYW4gYSBicmVhY2ggb2YgY29uZmlkZW50aWFsaXR5IG9ibGlnYXRpb25zOyAoaWkpIHdhcyBhbHJlYWR5XHJcbiAgICAgICAgICAgICAgICAgICAga25vd24gdG8gdGhlIFJlY2VpdmluZyBQYXJ0eSBwcmlvciB0byBkaXNjbG9zdXJlOyAoaWlpKSB0aGUgUmVjZWl2aW5nIFBhcnR5IGlzIHJlcXVpcmVkIHRvIGRpc2Nsb3NlXHJcbiAgICAgICAgICAgICAgICAgICAgaW4gb3JkZXIgdG8gY29tcGx5IHdpdGggYXBwbGljYWJsZSBsYXdzIG9yIHJlZ3VsYXRpb25zIG9yIHdpdGggYSBjb3VydCBvciBhZG1pbmlzdHJhdGl2ZSBvcmRlcjsgb3JcclxuICAgICAgICAgICAgICAgICAgICAoaXYpIGlzIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIGJ5IHRoZSBSZWNlaXZpbmcgUGFydHkgd2l0aG91dCByZWZlcmVuY2UgdG8gb3IgdXNlIG9mIGFueVxyXG4gICAgICAgICAgICAgICAgICAgIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBvZiB0aGUgRGlzY2xvc2luZyBQYXJ0eS5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIFJlY2VpdmluZyBQYXJ0eSBzaGFsbCBwcm9tcHRseSwgYW5kIGluIGFueSBjYXNlIHdpdGhpblxyXG4gICAgICAgICAgICAgICAgICAgIHRocmVlICgzKSBkYXlzIGFkdmlzZSB0aGUgRGlzY2xvc2luZyBQYXJ0eSBpbiB3cml0aW5nIG9mIGFueSB1bmF1dGhvcml6ZWQgZGlzY2xvc3VyZSxcclxuICAgICAgICAgICAgICAgICAgICBtaXNhcHByb3ByaWF0aW9uIG9yIG1pc3VzZSBvZiBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gYWZ0ZXIgaXQgYmVjb21lcyBhd2FyZSBvZiBpdCBhbmQgdmljZSB2ZXJzYS5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+SWYgZWl0aGVyIHBhcnR5IGJlY29tZXMgYXdhcmUgdGhhdCBpdCB3aWxsIGJlIHJlcXVpcmVkLCBvclxyXG4gICAgICAgICAgICAgICAgICAgIGlzIGxpa2VseSB0byBiZSByZXF1aXJlZCwgdG8gZGlzY2xvc2UgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIGluIG9yZGVyIHRvIGNvbXBseSB3aXRoIGFwcGxpY2FibGVcclxuICAgICAgICAgICAgICAgICAgICBsYXdzIG9yIHJlZ3VsYXRpb25zIG9yIHdpdGggYSBjb3VydCBvciBhZG1pbmlzdHJhdGl2ZSBvcmRlciwgaXQgc2hhbGwsIHRvIHRoZSBleHRlbnQgaXQgaXMgbGF3ZnVsbHlcclxuICAgICAgICAgICAgICAgICAgICBhYmxlIHRvIGRvIHNvLCBwcmlvciB0byBhbnkgc3VjaCBkaXNjbG9zdXJlIG5vdGlmeSB0aGUgb3RoZXIgcGFydHksIGFuZCBjb21wbHkgd2l0aCB0aGUgb3RoZXJcclxuICAgICAgICAgICAgICAgICAgICBwYXJ0eeKAmXMgaW5zdHJ1Y3Rpb25zIHRvIHByb3RlY3QgdGhlIGNvbmZpZGVudGlhbGl0eSBvZiB0aGUgaW5mb3JtYXRpb24uXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xNi4gSW5kZW1uaXR5IGFuZCBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBXaXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHQgYXZhaWxhYmxlIGluIGxhdyBvciB1bmRlciBlcXVpdHksIGVhY2ggcGFydHkgaGVyZWJ5IGFncmVlcyB0b1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbXBlbnNhdGUsIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIGhhcm1sZXNzIHRoZSBvdGhlciwgaXRzIGFmZmlsaWF0ZXMsIGRpcmVjdG9ycywgc2hhcmVob2xkZXJzLFxyXG4gICAgICAgICAgICAgICAgICAgIG9mZmljZXJzIGFuZCBlbXBsb3llZXMgYW5kIGFnZW50cywgZnJvbSBhbmQgYWdhaW5zdCBhbnkgYW5kIGFsbCBsb3NzZXMsIGxpYWJpbGl0aWVzLCBkYW1hZ2VzLFxyXG4gICAgICAgICAgICAgICAgICAgIGRlZmljaWVuY2llcywgZGVtYW5kcywgY2xhaW1zIChpbmNsdWRpbmcgdGhpcmQgcGFydHkgY2xhaW1zKSwgYWN0aW9ucywganVkZ21lbnRzIG9yIGNhdXNlcyBvZlxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbiwgYXNzZXNzbWVudHMsIGludGVyZXN0LCBwZW5hbHRpZXMgYW5kIG90aGVyIGNvc3RzIG9yIGV4cGVuc2VzIChpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbixcclxuICAgICAgICAgICAgICAgICAgICByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgZXhwZW5zZXMpIGJhc2VkIHVwb24sIGFyaXNpbmcgb3V0IG9mLCBvciBpbiByZWxhdGlvbiB0byBvciBvdGhlcndpc2VcclxuICAgICAgICAgICAgICAgICAgICBpbiByZXNwZWN0IG9mIChpKSBhbnkgYnJlYWNoIG9mIGl0cyBvYmxpZ2F0aW9ucyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIDsgb3IgKGlpKSBhbnkgd2lsbGZ1bFxyXG4gICAgICAgICAgICAgICAgICAgIG1pc2NvbmR1Y3QsIGZyYXVkLCBvciB3cm9uZ2Z1bCBvciBuZWdsaWdlbnQgYWN0IG9yIG9taXNzaW9uIG9mIGEgUGFydHkuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBJbiBubyBldmVudCBzaGFsbCBlaXRoZXIgUGFydHkgYmUgbGlhYmxlIHRvIHRoZSBvdGhlciBmb3IgYW55IGluZGlyZWN0LCBpbmNpZGVudGFsLCBwdW5pdGl2ZSxcclxuICAgICAgICAgICAgICAgICAgICBleGVtcGxhcnksIHNwZWNpYWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBvciBkYW1hZ2VzIGZvciBsb3NzIG9mIHByb2ZpdHMsIHJldmVudWUsIHdoZXRoZXIgaW4gYW5cclxuICAgICAgICAgICAgICAgICAgICBhY3Rpb24gaW4gY29udHJhY3Qgb3IgdG9ydCwgb3Igb3RoZXJ3aXNlIChjb2xsZWN0aXZlbHkgcmVmZXJyZWQgdG8gYXMg4oCcSW5kaXJlY3QgTG9zc2Vz4oCdKSBldmVuIGlmXHJcbiAgICAgICAgICAgICAgICAgICAgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRWFjaCBQYXJ0eeKAmXMgbGlhYmlsaXR5IGFyaXNpbmcgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgYnJlYWNoIG9mIGFueSBkaXJlY3QgYW5kIGFjdHVhbFxyXG4gICAgICAgICAgICAgICAgICAgIGxpYWJpbGl0aWVzLCBjb3N0cywgbG9zc2VzLCBkYW1hZ2VzLCBzdWl0cywgcHJvY2VlZGluZ3MsIGNvc3RzLCBleHBlbnNlcyBvciBsaWFiaWxpdGllcyBzdWZmZXJlZCBvclxyXG4gICAgICAgICAgICAgICAgICAgIGluY3VycmVkIGR1ZSB0byByZXN1bHRpbmcgZHVlIHRvIGNsYWltcyBmb3IgYnJlYWNoIG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhIFBhcnR5IG9yIHRoaXJkXHJcbiAgICAgICAgICAgICAgICAgICAgcGFydHksIGJyZWFjaCBvZiBjb25maWRlbnRpYWxpdHkgb2JsaWdhdGlvbiwgZGF0YSBicmVhY2gsIGJyZWFjaCBvZiBkYXRhIHByaXZhY3ksIGZyYXVkLCB3aWxsZnVsXHJcbiAgICAgICAgICAgICAgICAgICAgbmVnbGlnZW5jZSwgZ3Jvc3MgbWlzY29uZHVjdCBvciBicmVhY2ggb2YgYXBwbGljYWJsZSBsYXdzIHNoYWxsIGluIG5vIGV2ZW50IGV4Y2VlZCB0aGUgYW5udWFsIHRvdGFsXHJcbiAgICAgICAgICAgICAgICAgICAgcHVyY2hhc2UgcHJpY2UgcGFpZCBwdXJzdWFudCB0byBncmFudCBvZiBhY2Nlc3MgYW5kIHVzYWdlIG9mIHRoZSBTZXJ2aWNlcy9Tb2Z0d2FyZSBieSB0aGUgQ3VzdG9tZXIuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xNy4gRm9yY2UgTWFqZXVyZSA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBFYWNoIG9mIHRoZSBQYXJ0aWVzIGlzIG5vdCByZXNwb25zaWJsZSBub3IgbGlhYmxlIGZvciBhbnkgZGVsYXlzIG9yIGZhaWx1cmVzIGluIHBlcmZvcm1hbmNlIGZyb20gYW55XHJcbiAgICAgICAgICAgICAgICAgICAgY2F1c2UgYmV5b25kIGl0cyBjb250cm9sLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byBhY3RzIG9mIEdvZCwgY2hhbmdlcyB0byBsYXcgb3IgcmVndWxhdGlvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgZW1iYXJnb2VzLCB3YXIsIHRlcnJvcmlzdCBhY3RzLCBhY3RzIG9yIG9taXNzaW9ucyBvZiB0aGlyZCBwYXJ0eSB0ZWNobm9sb2d5IHByb3ZpZGVycywgcmlvdHMsIGZpcmVzLFxyXG4gICAgICAgICAgICAgICAgICAgIGVhcnRocXVha2VzLCBmbG9vZHMsIHBvd2VyIGJsYWNrb3V0cywgc3RyaWtlcywgd2VhdGhlciBjb25kaXRpb25zLCBwYW5kZW1pYywgZXBpZGVtaWMsIGdvdmVybm1lbnRcclxuICAgICAgICAgICAgICAgICAgICBsb2NrZG93bnMgb3IgYW55IG90aGVyIHVuZm9yZXNlZWFibGUgZXZlbnQgYmV5b25kIGl0cyBjb250cm9sIChoZXJlaW5hZnRlciBjb2xsZWN0aXZlbHkgcmVmZXJyZWQgdG9cclxuICAgICAgICAgICAgICAgICAgICBhcyA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnEZvcmNlIE1hamV1cmUgRXZlbnTigJ0pPC9zcGFuPi4gVXBvbiBvY2N1cnJlbmNlIG9mIGFueSBGb3JjZSBNYWpldXJlIEV2ZW50LCBlaXRoZXIgUGFydHkgc2hhbGwgZ2l2ZVxyXG4gICAgICAgICAgICAgICAgICAgIG5vdGljZSB0byB0aGUgb3RoZXIgcGFydHkgb2YgaXRzIGluYWJpbGl0eSB0byBwZXJmb3JtIG9yIG9mIGRlbGF5IGluIGNvbXBsZXRpbmcgaXRzIG9ibGlnYXRpb25zIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgIG11c3QgYWN0IGRpbGlnZW50bHkgdG8gcmVtZWR5IHRoZSBjYXVzZSBhbmQgcmVzdG9yZSBwZXJmb3JtYW5jZSwgdG8gdGhlIGV4dGVudCBwb3NzaWJsZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFdoZXJlIEZvcmNlLU1hamV1cmUgRXZlbnQgY29udGludWVzIGZvciBhIHBlcmlvZCBtb3JlIHRoYW4gU2l4dHkgKDYwKSBjb250aW51b3VzIGRheXMsIHRoZW4gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgZWZmZWN0ZWQgUGFydHkgc2hhbGwgaGF2ZSB0aGUgcmlnaHQgdG8gaW1tZWRpYXRlbHkgdGVybWluYXRlIHRoZXNlIFNhYVMgVGVybXMgQWdyZWVtZW50IGJ5IHByb3ZpZGluZ1xyXG4gICAgICAgICAgICAgICAgICAgIGEgd3JpdHRlbiBub3RpY2UuPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjE4LiBNaXNjZWxsYW5lb3VzPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVGhlc2UgU2FhUyBUZXJtcyBpcyBkcmF3biB1cCBpbiBFbmdsaXNoLCB3aGljaCBsYW5ndWFnZSBzaGFsbCBnb3Zlcm4gYWxsIGRvY3VtZW50cywgbm90aWNlcyxcclxuICAgICAgICAgICAgICAgICAgICBtZWV0aW5ncywgcHJvY2VlZGluZ3MgYW5kIHByb2Nlc3NlcyByZWxhdGl2ZSB0aGVyZXRvLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBOb3RoaW5nIGluIHRoZXNlIFNhYVMgVGVybXMgc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYSBqb2ludCB2ZW50dXJlLCBhZ2VuY3ksIHBhcnRuZXJzaGlwLFxyXG4gICAgICAgICAgICAgICAgICAgIGludGVyZXN0IGdyb3VwaW5nIG9yIGFueSBvdGhlciBraW5kIG9mIGZvcm1hbCBidXNpbmVzcyBncm91cGluZyBvciBlbnRpdHkgYmV0d2VlbiB0aGUgUGFydGllcy5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgTm8gcmlnaHRzIG9yIG9ibGlnYXRpb25zIG9mIHRoZSBQYXJ0aWVzIGFyaXNpbmcgZnJvbSB0aGVzZSBTYWFTIFRlcm1zIG1heSBiZSBhc3NpZ25lZCxcclxuICAgICAgICAgICAgICAgICAgICBzdWItY29udHJhY3RlZCwgb3IgdHJhbnNmZXJyZWQsIGluIHdob2xlIG9yIGluIHBhcnQsIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IHRoZSBvdGhlciBwYXJ0eeKAmXNcclxuICAgICAgICAgICAgICAgICAgICBwcmlvciB3cml0dGVuIGFwcHJvdmFsLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4gSW4gY2FzZSBvZiBjb25mbGljdCB0ZXJtcyBiZXR3ZWVuIHRoZXNlIFNhYVMgVGVybXMgYW5kIE9yZGVyIEZvcm0sIHRoZSBPcmRlciBGb3JtIHdpbGwgcHJldmFpbC48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEdvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbi4gVGhlc2UgU2FhUyBUZXJtcyBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiBJbmRpYSwgYW5kIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIFBhcnRpZXMgaGVyZWJ5IGFncmVlIHRvIGlycmV2b2NhYmx5IHN1Ym1pdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIG9mIE5ldyBEZWxoaVxyXG4gICAgICAgICAgICAgICAgICAgIGluIHJlc3BlY3Qgb2YgYWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIHRoZXNlIFNhYVMgVGVybXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuPGRpdiBjbGFzcz1cInJvdyBnLTAgbWItMCBiZy10ZXJtc1wiPlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0xMFwiPlxyXG4gICAgICAgIDxsYWJlbCBjbGFzcz1cImZvcm0tY2hlY2sgZm9ybS1jaGVjay1jdXN0b20gZm9ybS1jaGVjay1zb2xpZCBmb3JtLWNoZWNrLWlubGluZSBcIj5cclxuICAgICAgICAgICAgPGlucHV0IFtkaXNhYmxlZF09XCIhZW5hYmxlQWdyZWVcIiBjbGFzcz1cImZvcm0tY2hlY2staW5wdXRcIiB0eXBlPVwiY2hlY2tib3hcIiByZXF1aXJlZCBuYW1lPVwidG9jXCIgdmFsdWU9XCIxXCJcclxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ1cGRhdGV0ZXJtcygkZXZlbnQpXCIgLz5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb3JtLWNoZWNrLWxhYmVsIGZ3LWJvbGQgdGV4dC1ncmF5LTcwMFwiPlxyXG4gICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dHNpemUgbXQtM1wiPkkgYWdyZWUgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zLjwvc3Bhbj5cclxuICAgICAgICA8L2xhYmVsPlxyXG5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBjbGFzcz1cImNvbC1tZC0yXCI+XHJcbiAgICAgICAgPGJ1dHRvbiBbZGlzYWJsZWRdPVwiIXRlcm1zXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkNvbnRpbnVlVGVybXMoKVwiIGNsYXNzPVwiYnRuIGJ0bi1sZyBidG4tcHJpbWFyeSBtcy0xNSBtZS01IHRleHQtbm93cmFwXCI+XHJcbiAgICAgICAgICAgIENvbnRpbnVlXHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG48L2Rpdj4iXX0=
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVybXNjb25kaXRpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLWF1dGgvc3JjL2xpYi9jb21wb25lbnRzL3RhbmdvLWF1dGgtbG9naW4vdGVybXNjb25kaXRpb25zL3Rlcm1zY29uZGl0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1hdXRoL3NyYy9saWIvY29tcG9uZW50cy90YW5nby1hdXRoLWxvZ2luL3Rlcm1zY29uZGl0aW9ucy90ZXJtc2NvbmRpdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7OztBQVMxQyxNQUFNLE9BQU8sd0JBQXdCO0lBTXZCO0lBQThCO0lBTDFDLFdBQVcsR0FBVyxLQUFLLENBQUM7SUFDNUIsS0FBSyxDQUFNO0lBQ1gsUUFBUSxDQUFNO0lBRWIsWUFDVyxPQUFvQixFQUFVLFFBQXdCO1FBQXRELFlBQU8sR0FBUCxPQUFPLENBQWE7UUFBVSxhQUFRLEdBQVIsUUFBUSxDQUFnQjtJQUM3RCxDQUFDO0lBRU4sUUFBUSxDQUFDLEtBQVU7UUFDakIsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQztRQUM3QixNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsWUFBWSxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksT0FBTyxDQUFDLFlBQVksR0FBRyxDQUFDLENBQUM7UUFFdEYsSUFBSSxRQUFRLEVBQUU7WUFDVixJQUFJLENBQUMsV0FBVyxHQUFJLElBQUksQ0FBQTtTQUMzQjtJQUNILENBQUM7SUFDRCxXQUFXLENBQUMsR0FBUTtRQUNsQixJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFBO0lBQ2pDLENBQUM7SUFFRCxlQUFlO1FBQ2IsTUFBTSxJQUFJLEdBQUc7WUFDWCxRQUFRLEVBQUUsSUFBSTtTQUNmLENBQUM7UUFDRixJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUNuRCxJQUFJLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDWixJQUFJLEdBQUcsRUFBRSxJQUFJLEtBQUssR0FBRyxFQUFFO29CQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQztpQkFDL0I7cUJBQU07b0JBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7aUJBQzlCO1lBQ0gsQ0FBQztZQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQy9CLENBQUM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO3dHQXJDVSx3QkFBd0I7NEZBQXhCLHdCQUF3QiwyRENUckMsaXFyREF1b0JNOzs0RkQ5bkJPLHdCQUF3QjtrQkFMcEMsU0FBUzsrQkFDRSxxQkFBcUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTmdiQWN0aXZlTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XHJcbmltcG9ydCB7IEF1dGhTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvYXV0aC5zZXJ2aWNlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbGliLXRlcm1zY29uZGl0aW9ucycsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL3Rlcm1zY29uZGl0aW9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL3Rlcm1zY29uZGl0aW9ucy5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIFRlcm1zY29uZGl0aW9uc0NvbXBvbmVudCB7XHJcbiAgZW5hYmxlQWdyZWU6Ym9vbGVhbiA9IGZhbHNlO1xyXG4gIHRlcm1zOiBhbnk7XHJcbiAgYWNjZXB0ZWQ6IGFueTtcclxuXHJcbiAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICBwcml2YXRlIHNlcnZpY2U6IEF1dGhTZXJ2aWNlLCBwcml2YXRlIG1vZGFsUmVmOiBOZ2JBY3RpdmVNb2RhbCxcclxuICAgICkge31cclxuXHJcbiAgb25TY3JvbGwoZXZlbnQ6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcclxuICAgIGNvbnN0IGF0Qm90dG9tID0gZWxlbWVudC5zY3JvbGxIZWlnaHQgLSBlbGVtZW50LnNjcm9sbFRvcCA8PSBlbGVtZW50LmNsaWVudEhlaWdodCArIDE7XHJcbiAgICBcclxuICAgIGlmIChhdEJvdHRvbSkge1xyXG4gICAgICAgIHRoaXMuZW5hYmxlQWdyZWUgID0gdHJ1ZVxyXG4gICAgfVxyXG4gIH1cclxuICB1cGRhdGV0ZXJtcyhldnQ6IGFueSkge1xyXG4gICAgdGhpcy50ZXJtcyA9IGV2dC50YXJnZXQuY2hlY2tlZFxyXG4gIH1cclxuXHJcbiAgb25Db250aW51ZVRlcm1zKCkge1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgYWNjZXB0ZWQ6IHRydWVcclxuICAgIH07XHJcbiAgICB0aGlzLnNlcnZpY2UudGVybXNBbmRDb25kaXRpb25VcGRhdGUoZGF0YSkuc3Vic2NyaWJlKHtcclxuICAgICAgbmV4dDogKHJlcykgPT4ge1xyXG4gICAgICAgIGlmIChyZXM/LmNvZGUgPT09IDIwMCkge1xyXG4gICAgICAgICAgdGhpcy5tb2RhbFJlZi5jbG9zZSgnYWNjZXB0Jyk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMubW9kYWxSZWYuY2xvc2UoJ2Vycm9yJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LFxyXG4gICAgICBlcnJvcjogKGVycikgPT4ge1xyXG4gICAgICAgIHRoaXMubW9kYWxSZWYuY2xvc2UoJ2Vycm9yJyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuICBcclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FyZCBtdC0zIG14LTE1XCI+XHJcbiAgICA8ZGl2IGlkPVwia3RfY29udGVudF9jb250YWluZXJcIiBjbGFzcz1cImNvbnRhaW5lci14eGwgZm9udCBoLTEwMCAgbXgtMTAgcGUtMTUgbXktMFwiPlxyXG4gICAgICAgIDxkaXYgKHNjcm9sbCk9XCJvblNjcm9sbCgkZXZlbnQpXCIgY2xhc3M9XCJoLTU1MHB4IHN0aWNreVwiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIGNvbC1tZC0xMiBjb2wtc20tMTJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgYWxpZ24taXRlbXMtY2VudGVyIGJvcmRlci0wIG10LTUgcHgtMFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1haW4gZnMtbGctMSBtYi00IHRleHQtZ3JheS04MDBcIj5HZW5lcmFsIFRlcm1zIGFuZCBDb25kaXRpb25zLVNBQVNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZ3JlZW1lbnQ8L3NwYW4+PHNwYW4gY2xhc3M9XCIgdGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBtZS0xIHN1YlwiPlRoZXNlIHRlcm1zIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbnMgKGhlcmVpbmFmdGVyIGNvbGxlY3RpdmVseSByZWZlcnJlZCB0byBhcyA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnFNBQVNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVybXPigJ0pPC9zcGFuPiBzaGFsbCBnb3Zlcm4geW91ciA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPijigJxVc2Vy4oCdPC9zcGFuPiBvciA8c3BhblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnFlvdeKAnTwvc3Bhbj4gb3IgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxZb3Vy4oCdPC9zcGFuPm9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWhlbGlnaHRcIj7igJxDdXN0b21lcuKAnSk8L3NwYW4+IHVzZSBvZiBTZXJ2aWNlcyAoYXMgZGVmaW5lZCBiZWxvdykgdGhyb3VnaFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgd2Vic2l0ZSBodHRwczovL3RhbmdvZXllLmFpLyA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPihXZWJzaXRlKS48L3NwYW4+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCIgdGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBtZS0xIG15LTEgc3ViXCI+QnkgYWNjZXNzaW5nIG9yIHVzaW5nIHRoZSBTZXJ2aWNlc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm91Z2ggdGhlIFdlYnNpdGUgb3IgYnkgZXhlY3V0aW5nIGFuIE9yZGVyIEZvcm0sIHRoYXQgcmVmZXJlbmNlcyB0aGVzZSBTQUFTIFRlcm1zLCBZb3VcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGVzZSBTYWFTIFRlcm1zLiBJZiBZb3UgYXJlIGFjY2Vzc2luZyBvciB1c2luZyB0aGUgU29mdHdhcmUgb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZWhhbGYgb2YgYSBDb21wYW55IG9yIG90aGVyIGxlZ2FsIGVudGl0eSwgWW91IHJlcHJlc2VudCB0aGF0IFlvdSBoYXZlIHRoZSBhdXRob3JpdHkgdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5kIHN1Y2ggZW50aXR5IGFuZCBpdHMgYWZmaWxpYXRlcyB0byB0aGVzZSBTQUFTIFRlcm1zIGluIHdoaWNoIGNhc2UgdGhlIHRlcm1zIOKAnFVzZXLigJ1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciDigJxZb3XigJ0gb3Ig4oCcWW91cuKAnSBvciDigJxDdXN0b21lcuKAnSBzaGFsbCByZWZlciB0byBzdWNoIGVudGl0eSBhbmQgaXRzIGFmZmlsaWF0ZXMuPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IHB5LWxnLTJcIj4gLS0+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWFsaWduLWp1c3RpZnlcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MS4gRGVmaW5pdGlvbiA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4g4oCcT3JkZXIgRm9ybeKAnSBtZWFucyB0aGUgZWFjaCBvcmRlciBmb3JtLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3Bvc2FsIG9yIHN0YXRlbWVudCBvZiB3b3JrIHJlZmVyZW5jaW5nIHRoaXMgQWdyZWVtZW50IHdoZXJldmVyIGFwcGxpY2FibGUuIDwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPiA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPuKAnFNvZnR3YXJl4oCdPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lYW5zIHRoZSBkYXRhIGFuYWx5dGljcyBhbmQgYnVzaW5lc3MgaW50ZWxsaWdlbmNlIHNvZnR3YXJlIGFuZCBpdHMgb2JqZWN0IGNvZGUgdmVyc2lvblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIGVuYWJsZXMgdGhlIEN1c3RvbWVyIHRvIGlkZW50aWZ5LCBhbW9uZ3N0IG90aGVycywgY3VzdG9tZXIgZm9vdGZhbGxzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbW9ncmFwaGljcywgaWRlbnRpZnkgbWlzc2VkIG9wcG9ydHVuaXRpZXMsIGluY2x1ZGluZyBhbnkgdXBkYXRlcyBvciBuZXcgdmVyc2lvbnMuPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+IDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcU2VydmljZXPigJ08L3NwYW4+cmVmZXIgdG8gdGhlIGluLXN0b3JlIEFJIGRyaXZlbiBhbmFseXRpY3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCB0aHJvdWdoIHRoZSBTb2Z0d2FyZSB0byB0aGUgQ3VzdG9tZXIgdGhhdCBpcyBob3N0ZWQgYnkgVGFuZ28gRXllIGFuZCBtYWRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZhaWxhYmxlIHRvIEN1c3RvbWVyIG92ZXIgYSBuZXR3b3JrIHdoZXRoZXIgb24gYSB0cmlhbCBvciBwYWlkIGJhc2lzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj4g4oCcVGVybeKAnSBzaGFsbCBtZWFuIHRoYXQgcGVyaW9kIHNwZWNpZmllZCBpbiBhXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTY2hlZHVsZSB0byBiZSBleGVjdXRlZCBzZXBhcmF0ZWx5IHdpdGggdGhlIEN1c3RvbWVyIGR1cmluZyB3aGljaCBDdXN0b21lciB3aWxsIGhhdmUgb24tbGluZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWNjZXNzIGFuZCB1c2Ugb2YgdGhlIFNlcnZpY2VzIHRocm91Z2ggdGhlIFdlYnNpdGUuIDwvbGk+IC0tPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjIuIEVsaWdpYmlsaXR5IDwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInN1YiBteS03XCI+SW4gb3JkZXIgdG8gdXNlIHRoZSBTZXJ2aWNlcywgWW91IG11c3Q6PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTdcIj4gQmUgYWJvdmUgMTggeWVhcnMgb2YgYWdlOyA8L2xpPiAtLT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5Db21wbGV0ZSB0aGUgYWNjb3VudCByZWdpc3RyYXRpb24gcHJvY2VzcyB0byBhY2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBTZXJ2aWNlcyB0aHJvdWdoIHRoZSBXZWJzaXRlOzwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+WW91IHdpbGwgcHJvdmlkZSBjb3JyZWN0LCB1cHRvIGRhdGUgaW5mb3JtYXRpb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MsIGluY2x1ZGluZyBiaWxsaW5nIGFkZHJlc3M7PC9saT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPiBZb3Ugd2lsbCBrZWVwIGFsbCB5b3VyIGNyZWRlbnRpYWxzIGFuZCBwYXNzd29yZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlkZW50aWFsIGFuZCBhbHNvIHJlc3BvbnNpYmxlIHRvIG1haW50YWluaW5nIHRoZSBzYWZldHkgYW5kIHNlY3VyaXR5IG9mIHlvdXIgcGVyc29uYWxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uOyA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+WW91IHdpbGwgcHJvdmlkZSBhbGwgcmVsZXZhbnQgYW5kIHJlcXVpcmVkIGhhcmR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgc29mdHdhcmUgYXMgc3VnZ2VzdGVkIGJ5IFRhbmdvIEV5ZSBhdCB5b3VyIGRlc2lnbmF0ZWQgbG9jYXRpb24gaW4gb3JkZXIgdG8gZW5hYmxlIFRhbmdvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBFeWUgdG8gaW5zdGFsbCB0aGUgU29mdHdhcmUgaW4gb3JkZXIgdG8gcHJvdmlkZSB0aGUgU2VydmljZXMuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4zLiBTZXJ2aWNlcyA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktN1wiPiBJbiBjb25zaWRlcmF0aW9uIGZvciBwYXltZW50IG9mIHRoZSBmZWVzLCBUYW5nbyBFeWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW50cyB0aGUgQ3VzdG9tZXIgYSBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCBwZXJzb25hbCwgcmV2b2NhYmxlLCBsaWNlbmNlIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3MgYW5kIHVzZSB0aGUgU2VydmljZXMgaW4gYWNjb3JkYW5jZSB3aXRoIFRhbmdvIEV5ZeKAmXMgaW50ZW5kZWQgcHVycG9zZSBmb3IgdGhlIFNlcnZpY2VzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPihMaWNlbmNlKS48L3NwYW4+PC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgU2VydmljZXMgYXJlIG5vdCBjb250aW5nZW50IG9uIHRoZSBkZWxpdmVyeSBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55IGZ1dHVyZSBmdW5jdGlvbmFsaXR5IG9yIGZlYXR1cmVzPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UYW5nbyBFeWUgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNoYW5nZSBvciByZW1vdmUgZmVhdHVyZXMgb2YgdGhlIFNlcnZpY2VzIGFuZCBvciB0aGUgU29mdHdhcmUgZnJvbSB0aW1lIHRvIHRpbWUuIFdoZXJlIHRoZXJlIGlzIGFueSBtYXRlcmlhbCBhbHRlcmF0aW9uIHRvIHRoZSBTZXJ2aWNlcyBhbmQgb3IgdGhlIFNvZnR3YXJlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIGNsYXVzZSwgVGFuZ28gRXllIHdpbGwgcHJvdmlkZSB0aGUgQ3VzdG9tZXIgd2l0aCAzMCBidXNpbmVzcyBkYXlz4oCZIG5vdGljZSBhbmQgdGhlIEN1c3RvbWVyIGFncmVlcyB0aGF0IGFueSBtYXRlcmlhbCBhbHRlcmF0aW9uIGlzIGF0IFRhbmdvIEV5ZeKAmXMgZGlzY3JldGlvbi48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+QWNjZXNzIHRvIHRoZSBTZXJ2aWNlcyBzaGFsbCBiZSBsaW1pdGVkIHRvIGF1dGhvcml6ZWQgcGVyc29ucyB3aXRoIHZhbGlkIGNyZWRlbnRpYWxzIHdoaWNoIGlzIHRvIGJlIGFncmVlZCBhdCB0aGUgdGltZSBvZiBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBTZXJ2aWNlcyBhbmQgdGhlIFdlYnNpdGUuIElmIGl0IGlzIGEgc2luZ2xlIGFjY291bnQgYWNjZXNzLCBzdWNoIGFjY291bnQgc2hhbGwgbm90IGJlIHVzZWQgYnkgbXVsdGlwbGUgdXNlcnMgYXQgdGhlIHNhbWUgdGltZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGFuZ28gRXllIHJlc2VydmVzIHRoZSByaWdodCB0byBjaGFuZ2UsIG1vZGlmeSwgYW1lbmQsIHVwZGF0ZSwgc3VzcGVuZCBvciBkaXNjb250aW51ZSB0aGUgd2hvbGUgb3IgYW55IHBvcnRpb24gb2YgdGhlIFNlcnZpY2VzLCBXZWJzaXRlIG9yIHRoZSBTYWFTIFRlcm1zIGF0IGFueSB0aW1lLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTNcIj5Zb3UgYWdyZWUgdGhhdMKgVGFuZ28gRXllOjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj5hLiB3aWxsIHN1cHBseSB0aGUgU2VydmljZXMgb24gYSBub24tZXhjbHVzaXZlIGJhc2lzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTEgbXMtNVwiPmIuIGRvZXMgbm90IG1ha2UgYW55IHdhcnJhbnR5IG9yIHJlcHJlc2VudGF0aW9uIGFzIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgYWJpbGl0eSBvZiB0aGUgZmFjaWxpdGllcyBvciBzZXJ2aWNlcyBvZiBhbnkgdGhpcmQtcGFydHkgc3VwcGxpZXJzOyBhbmQ8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTEgbXMtNVwiPmMuIGlzIG5vdCBsaWFibGUgZm9yIGFueSBmYWlsdXJlIGluLCBmYXVsdCB3aXRoIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWdyYWRhdGlvbiBvZiB0aGUgU2VydmljZXMvU29mdHdhcmUgaWYgdGhhdCBmYWlsdXJlLCBmYXVsdCBvciBkZWdyYWRhdGlvbiBpcyBhdHRyaWJ1dGFibGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIG9yIGNhdXNlZCBieSBhbnkgZmFpbHVyZSBvZiB0aGUgQ3VzdG9tZXIgZW52aXJvbm1lbnQgb3IgdGhlIGZhY2lsaXRpZXMgb3Igc2VydmljZXMgb2YgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlyZCBwYXJ0eS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj40LiBMaWNlbnNlIFJlc3RyaWN0aW9ucyA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0zXCI+IFlvdSBtdXN0IG5vdCBhY2Nlc3Mgb3IgdXNlIHRoZSBTZXJ2aWNlcyBhbmQgb3IgdGhlIFNvZnR3YXJlIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgYnkgdGhlIExpY2Vuc2UgYW5kIG1heSBub3QgZG8gb3IgYXV0aG9yaXplIHRoZSBjb21taXNzaW9uIG9mIGFueSBhY3QgdGhhdCB3b3VsZCBvciBtaWdodCBpbnZhbGlkYXRlIG9yIGJlIGluY29uc2lzdGVudCB3aXRoIHRoZSBUYW5nbyBFeWXigJlzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gdGhlIFNlcnZpY2VzIG9yIFNvZnR3YXJlLiBXaXRob3V0IGxpbWl0aW5nIHRoZSBmb3JlZ29pbmcgcHJvdmlzaW9ucywgdGhlIEN1c3RvbWVyIGFncmVlcyBhbmQgYWNrbm93bGVkZ2VzIHRoYXQgaXQgbXVzdCBub3QgYW5kIHdpbGwgbm90IHBlcm1pdCBhbnkgcGVyc29uIHRvOjwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTVcIj5hLiByZXNlbGwsIGFzc2lnbiwgdHJhbnNmZXIsIGRpc3RyaWJ1dGUgb3IgcHJvdmlkZSBvdGhlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhY2Nlc3MgdG8gdGhlIFNlcnZpY2VzOzwvZGl2PlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy01XCI+Yi4g4oCcZnJhbWXigJ0sIOKAnG1pcnJvcuKAnSBvciBzZXJ2ZSBhbnkgb2YgdGhlIFNlcnZpY2VzL1NvZnR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uIGFueSB3ZWIgc2VydmVyIG9yIG90aGVyIGNvbXB1dGVyIHNlcnZlciBvdmVyIHRoZSBpbnRlcm5ldCBvciBhbnkgb3RoZXIgbmV0d29yazs8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy01XCI+Yy4gY29weSwgYWx0ZXIsIG1vZGlmeSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgZnJvbSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwcm9kdWNlLCByZXNlbGwsIHRyYW5zZmVyIHRvIGEgdGhpcmQgcGFydHksIHJldmVyc2UgYXNzZW1ibGUsIHJldmVyc2UgZW5naW5lZXIsIHJldmVyc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGlsZSBvciBlbmhhbmNlIHRoZSBTZXJ2aWNlcyBvciBTb2Z0d2FyZTsgb3IgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtNVwiPmQgLmFsdGVyLCByZW1vdmUgb3IgdGFtcGVyIHdpdGggYW55IHRyYWRlbWFya3MsIGFueSBwYXRlbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgY29weXJpZ2h0IG5vdGljZXMsIG9yIGFueSBjb25maWRlbnRpYWxpdHkgbGVnZW5kIG9yIG5vdGljZSwgb3IgYW55IG51bWJlcnMsIG9yIG90aGVyIG1lYW5zIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50aWZpY2F0aW9uIHVzZWQgb24gb3IgaW4gcmVsYXRpb24gdG8gdGhlIFNlcnZpY2VzIG9yIFNvZnR3YXJlLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgQ3VzdG9tZXIgbXVzdCBub3QgdXNlIHRoZSBTZXJ2aWNlcyBpbiBhbnkgd2F5IHdoaWNoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzIGluIGJyZWFjaCBvZiBhbnkgc3RhdHV0ZSwgcmVndWxhdGlvbiwgbGF3IG9yIGxlZ2FsIHJpZ2h0IG9mIGFueSBwZXJzb24gd2l0aGluIHRoZSBSZXB1YmxpYyBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBJbmRpYSBvciB0aGUganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBDdXN0b21lciBvciBpdHMgcGVyc29ubmVsIGFyZSBsb2NhdGVkLsKgPC9saT5cclxuXHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj41LiBQcm9oaWJpdGVkIFVzZSA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBtdC03XCI+WW91IGFncmVlIHRvIHVzZSB0aGUgV2Vic2l0ZSBhbmQgdGhlIFNlcnZpY2VzL1NvZnR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzc2VkIHRocm91Z2ggaXQgZm9yIHRoZSBwdXJwb3NlIGVudW1lcmF0ZWQgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyBhbmQgYWdyZWUgbm90IHRvIHVuZGVydGFrZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGUgZm9sbG93aW5nOjwvbGk+XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0xIG1zLTVcIj4gYS4gVXNlIG9mIHRoZSBXZWJzaXRlIGFuZCB0aGUgU2VydmljZXMgdG8gdmlvbGF0ZSBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYWJsZSBsYXdzIG9mIGFueSBqdXJpc2RpY3Rpb24gZnJvbSB3aGljaCBZb3UgYWNjZXNzIHRoZSBTZXJ2aWNlcy48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMSBtcy01XCI+IGIuIFVzZSB0aGUgU2VydmljZXMgZm9yIGNvbXBldGl0aXZlIGJlbmNobWFya2luZyBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgZGV2ZWxvcGluZyBhIGNvbXBldGl0aXZlIHByb2R1Y3Qgb3Igc2VydmljZXMuPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTEgbXMtNVwiPiBjLiBUbyB1cGxvYWQgb3Igb3RoZXJ3aXNlIGRpc3NlbWluYXRlIGFueSBjb21wdXRlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aXJ1c2VzIG9yIG90aGVyIHNvZnR3YXJlIHRoYXQgbWF5IHRoZSBTb2Z0d2FyZSBvZiBUYW5nbyBFeWU7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTEgbXMtNVwiPiBkLiBUbyB1bmxhd2Z1bGx5IGdhdGhlciBpbmZvcm1hdGlvbiBhYm91dCBvdGhlcnMgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZSBpbiBpbiBhbiB1bmxhd2Z1bCBtYW5uZXI7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG1iLTUgbXMtNVwiPiBlLiBUbyBzb2xpY2l0IG90aGVycyB0byBwZXJmb3JtIG9yIHBhcnRpY2lwYXRlIGluIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1bmxhd2Z1bCBhY3RzLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPiByZXNlbGwsIGFzc2lnbiwgdHJhbnNmZXIsIGRpc3RyaWJ1dGUgb3IgcHJvdmlkZSBvdGhlcnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCBhY2Nlc3MgdG8gdGhlIFNlcnZpY2VzOzwvbGk+IC0tPlxyXG5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+WW91IGFja25vd2xlZGdlIHRoYXQgVGFuZ28gRXllIHdpbGwgbm90IGJlIGxpYWJsZSBmb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW55IGluZm9ybWF0aW9uIHRoYXQgaXMgcmVsYXllZCBhbmQgc3RvcmVkIGluIGl0cyBjbG91ZCBzZXJ2ZXJzIHdoaWNoIGlzIGFjY2Vzc2VkIHRocm91Z2ggeW91clxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1zLiBZb3Ugc2hhbGwgYWx3YXlzIGJlIHJlc3BvbnNpYmxlIGZvciB0aGUgc2FtZSBhdCBhbGwgdGltZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+WW91IGFncmVlIHRvIGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3Mgc3RhdHV0ZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHJlZ3VsYXRpb25zIG9mIHRoZSBjb3VudHJ5IHlvdSBhcmUgYWNjZXNzaW5nIHRoZSBXZWJzaXRlL1NvZnR3YXJlIGFuZCB0aGUgU2VydmljZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uY2VybmluZyB0aGUgdXNlIG9mIHRoZSBpbmZvcm1hdGlvbi92aWRlbyBmb290YWdlIHdoaWNoIGlzIHJlbGF5ZWQgdGhyb3VnaCB5b3VyIGNjdHYgY2FtZXJhIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBjbG91ZCBzdG9yYWdlIG9mIFRhbmdvIEV5ZS4gPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+WW91IGFja25vd2xlZGdlIHRoYXQgdGhlIFNlcnZpY2VzIGhhcyBub3QgYmVlbiBkZXNpZ25lZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0byBjb2xsZWN0IG9yIHByb2Nlc3MgYW55IHNlbnNpdGl2ZSBpbmZvcm1hdGlvbiBhbmQgYWNjb3JkaW5nbHkgeW91IGFncmVlIG5vdCB0byB1c2UgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFNlcnZpY2VzIHRvIGNvbGxlY3QsIHByb2Nlc3Mgb3Igc3RvcmUgYW55IHNlbnNpdGl2ZSBwZXJzb25hbCBkYXRhIG9uY2UgeW91IGFjY2VzcyB0aGUgcmVwb3J0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQgYnkgVGFuZ28gRXllIGluIHB1cnN1YW5jZSB0byB0aGUgU2VydmljZXMuIFRhbmdvIEV5ZSBzcGVjaWZpY2FsbHkgZGlzY2xhaW0gYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpYWJpbGl0eSB0aGF0IG1heSByZXN1bHQgZnJvbSB5b3VyIHVzZSBvZiB0aGUgU2VydmljZXMgdG8gY29sbGVjdCwgcHJvY2VzcyBhbmQgc3RvcmUgc2Vuc2l0aXZlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbmFsIGluZm9ybWF0aW9uLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRhbmdvIEV5ZSByZXNlcnZlcyB0aGUgcmlnaHQgdG8gbW9uaXRvciB0aGUgdXNlIG9mIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXZWJzaXRlL1NlcnZpY2VzL1NvZnR3YXJlIGJ5IFlvdSB0byBlbnN1cmUgY29tcGxpYW5jZSBvZiB0aGVzZSBTYWFTIFRlcm1zIGFuZCBhcHBsaWNhYmxlIGxhdy5cclxuICAgICAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5JbiB0aGUgZXZlbnQgb2YgdmlvbGF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2FibGUgbGF3cyBhbmQgcmVndWxhdGlvbnMsIFRhbmdvIEV5ZSBzaGFsbCBoYXZlIHRoZSByaWdodCB0byBpbnZlc3RpZ2F0ZSBzdWNoIGJyZWFjaGVzIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWtlIGFwcHJvcHJpYXRlIGFjdGlvbnMgd2hpY2ggc2hhbGwgaW5jbHVkZSBidXQgbm90IGJlIGxpbWl0ZWQgdG8gcHJvdmlkaW5nIHdhcm5pbmcgdG8gZmlyc3RcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZSBvZmZlbmRlcnMsIHN1c3BlbmRpbmcgYW5kIG9yIGV2ZW4gdGVybWluYXRpbmcgdGhlIFNlcnZpY2VzIGFuZCBhY2Nlc3MgdG8gdGhlIFdlYnNpdGUuPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcblxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj42LiBJbnZvaWNpbmc6IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS03XCI+SW52b2ljZXMgd2lsbCBiZSBpc3N1ZWQgb24gdGhlIGJhc2lzIG9mIHRoZSBudW1iZXIgb2YgZGVwbG95ZWQgc3RvcmVzIGluIGV4aXN0ZW5jZSBvbiB0aGUgaW52b2ljZSBkYXRlIGFuZCBzaGFsbCBiZSBpc3N1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBQYXltZW50IFRlcm1zIGluIHRoZSBjb21tZXJjaWFsIHRlcm1zIGFib3ZlLiBUYW5nbyBFeWUgc2hhbGwgYmlsbCBDdXN0b21lciBmb3IgYXBwbGljYWJsZSB0YXhlcyBhcyBhIHNlcGFyYXRlIGxpbmUgaXRlbSBvbiBlYWNoIGludm9pY2UuIEN1c3RvbWVyIHNoYWxsIGJlIHJlc3BvbnNpYmxlIGZvciBwYXltZW50IG9mIGFsbCBzYWxlcyBhbmQgdXNlIHRheGVzLCBHb29kcyBhbmQgU2VydmljZXMgdGF4LCBvciBzaW1pbGFyIGNoYXJnZXMgcmVsYXRpbmcgdG8gQ3VzdG9tZXLigJlzIHB1cmNoYXNlIGFuZCB1c2Ugb2YgdGhlIFNlcnZpY2VzLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuXHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjcuIFBheW1lbnQ6IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTdcIj5QYXltZW50IHNoYWxsIGJlIG1hZGUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBQYXltZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRlcm1zIGluIHRoZSBjb21tZXJjaWFsIHRlcm1zIHdoaWNoIHNoYWxsIGJlIGFncmVlZCB0byBzZXBhcmF0ZWx5IGJldHdlZW4gVGFuZ28gRXllIGFuZCB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIgYW5kIHdoaWNoIHNoYWxsIGJlIHJlYWQgYW5kIGJlIGNvdGVybWlub3VzIHdpdGggdGhlc2UgU2FhUyBUZXJtcyA8c3BhbiBjbGFzcz1cInRleHQtaGVsaWdodFwiPihQYXltZW50IFRlcm1zKS48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgb3RoZXJ3aXNlLCBwYXltZW50cyBhcmUgbm9uLXJlZnVuZGFibGUuIEluIHRoZSBldmVudCB0aGUgQ3VzdG9tZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmFpbHMgdG8gbWFrZSB0aGUgcGF5bWVudCBhcyBwZXIgdGhlIHBheW1lbnQgdGVybXMsIFRhbmdvIEV5ZSBzaGFsbCBzZW5kIGEgd3JpdHRlbiBub3RpY2UgdG8gdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIENsaWVudCB0byBlbnN1cmUgdGhhdCB0aGUgcGF5bWVudCBpcyBtYWRlIHdpdGhpbiAzMCAodGhpcnR5KSBkYXlzICjigJxBZGRpdGlvbmFsIFBlcmlvZOKAnSkgZnJvbSB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZSBvZiByZWNlaXB0IHN1Y2ggd3JpdHRlbiBub3RpY2UuIElmIHRoZSBjdXN0b21lciBmYWlscyB0byBtYWtlIHRoZSBwYXltZW50IHdpdGhpbiB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgQWRkaXRpb25hbCBQZXJpb2QsIHRoZSBhY2Nlc3MgdG8gdGhlIHdlYiBwb3J0YWwgd2lsbCBiZSBibG9ja2VkIGFuZCB0aGUgU2VydmljZXMgc2hhbGwgYmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VzcGVuZGVkIDcgKHNldmVuKSBkYXlzIGFmdGVyIHNlbmRpbmcgYSByZW1pbmRlciBlbWFpbCB0byBDdXN0b21lciBmcm9tIHRoZSBleHBpcnkgb2YgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEFkZGl0aW9uYWwgUGVyaW9kLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlBhcnRpZXMgYWNrbm93bGVkZ2UgdGhhdCB0aW1lIGlzIG9mIHRoZSBlc3NlbmNlIHdpdGhcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzcGVjdCB0byBwYXltZW50cyByZXF1aXJlZCB1bmRlciB0aGlzIGNsYXVzZS4gSW4gdGhlIGV2ZW50IG9mIGFueSBkZWxheSBpbiBwYXltZW50IGJ5IHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lciwgVGFuZ28gRXllIG1heSByZXF1aXJlIHRoZSBDdXN0b21lciB0byBwYXkgVGFuZ28gRXllIGEgbGF0ZSBwYXltZW50IHBlbmFsdHkgZXF1YWwgdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdHdlbHZlIHBlcmNlbnQgKDEyJSkgcGVyIGFubnVtIG9uIGFsbCBvdXRzdGFuZGluZyBwYXltZW50cy48L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+OC5JbnRlbGxlY3R1YWwgUHJvcGVydHk8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW5cIj5cclxuICAgICAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS03XCI+QWxsIFRhbmdvIEV5ZSBTb2Z0d2FyZSwgaW5jbHVkaW5nIHRoZSBXZWJzaXRlIGFuZCBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlcyB0aGVyZXRvLCBhbmQgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjcmVhdGVkIGJ5IFRhbmdvIEV5ZSBpbiBmdXJ0aGVyYW5jZSB0byB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgU29mdHdhcmUgb3IgYW55IHdvcmtzLCBwcm9kdWN0cywgZG9jdW1lbnRzLCBtYXRlcmlhbHMgY3JlYXRlZCB1c2luZywgaW5jb3Jwb3JhdGluZywgY29tcHJpc2luZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbiwgb3IgcmVsYXRpbmcgdG8gc3VjaCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgKOKAnFRhbmdvIEV5ZSBJUOKAnSkgc2hhbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVzaXZlIHByb3BlcnR5IG9mIFRhbmdvIEV5ZSBhbmQvb3IgaXRzIG5vbWluZWVzIG9yIGFmZmlsaWF0ZXMsIGFzIHRoZSBjYXNlIG1heSBiZSwgYW5kIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lciBzaGFsbCBub3QgaGF2ZSBhbnkgcmlnaHQsIHRpdGxlLCBjbGFpbSBldGMuIHdoYXRzb2V2ZXIgb3ZlciB0aGUgc2FtZS4gTm90aGluZyBjb250YWluZWRcclxuICAgICAgICAgICAgICAgICAgICAgICAgaGVyZWluIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBhIHRyYW5zZmVyLCBhc3NpZ25tZW50IG9yIGNvbnZleWFuY2UgYnkgVGFuZ28gRXllIHRvIEN1c3RvbWVyIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBvd25lcnNoaXAsIGludGVyZXN0IG9yIHRpdGxlIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb3IgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvciBhdHRhY2hlZCB0byB0aGUgVGFuZ28gRXllIElQLiBUaGUgQ3VzdG9tZXIgaXMgb25seSBhdXRob3JpemVkIHRvIHJlY2VpdmUgYSByaWdodCB0byBhY2Nlc3NcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFuZ28gRXllIElQIGZvciB0aGUgdGVybSBleHBsaWNpdGx5IGdyYW50ZWQgYnkgVGFuZ28gRXllIHRvIEN1c3RvbWVyIGFuZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3Zpc2lvbnMgb2YgdGhlc2UgU2FhUyBUZXJtcy4gVGhpcyBhdXRob3JpemF0aW9uIGlzIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vbi1zdWItbGljZW5zYWJsZSwgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuIEN1c3RvbWVyIHNoYWxsIG5vdCBoYXZlIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByaWdodCB0byBtb2RpZnksIGFkYXB0LCBpbmNvcnBvcmF0ZSwgY3JlYXRlIGFueSBkZXJpdmF0aXZlIHVzaW5nIG9yIGluY29ycG9yYXRpbmcgVGFuZ28gRXllIElQXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yIGluIGFueSBtYW5uZXIgdHJhbnNmZXIsIGVuY3VtYmVyLCBhbGllbmF0ZSwgc2VsbCwgc2hhcmUsIGFzc2lnbiwgbGljZW5zZSBvciBzdWItbGV0IGl0IHRvIGFueVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlyZCBwYXJ0eS48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5BcyBiZXR3ZWVuIHRoZSBwYXJ0aWVzLCBDdXN0b21lciByZXRhaW5zIGFsbCByaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byDigJPCoDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTIgbXMtNVwiPmEuIGFsbCByYXcgZGF0YSBnZW5lcmF0ZWQgZnJvbSB0aGUgdXNlIG9mIHRoZSBTb2Z0d2FyZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkaW5nIHRleHQsIHNvdW5kLCB2aWRlbywgb3IgaW1hZ2UgZmlsZXMsIGJ1dCBleGNsdWRpbmcgYW55IEJ1c2luZXNzIERhdGEgKOKAnEdlbmVyYXRlZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRh4oCdKTsgYW5kwqDCoDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTVcIj5iLiByYXcgZGF0YSBvd25lZCBieSBhbmQgcmVsYXRpbmcgdG8gdGhlIEN1c3RvbWVyLCBzdWNoIGFzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhbnkgaW5mb3JtYXRpb24sIHN0b3JlIGxvY2F0aW9uIGFuZCBkZXRhaWxzIG9mIHRoZSB6b25lcywgZW1wbG95ZWUgaW5mb3JtYXRpb24sIGJ1dFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBleGNsdWRpbmcgYW55IEdlbmVyYXRlZCBEYXRhICjigJxCdXNpbmVzcyAsIHRoYXQgaXMgcHJvdmlkZWQgdG8gVGFuZ28gRXllIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDdXN0b21lciB0aHJvdWdoIHRoZSBDdXN0b21lcuKAmXMgdXNlIG9mIHRoZSBTb2Z0d2FyZSAodG9nZXRoZXIsIOKAnEN1c3RvbWVyIERhdGHigJ0pLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgQ3VzdG9tZXIgaGVyZWJ5IGdyYW50cyB0byBUYW5nbyBFeWUgYSBub24tZXhjbHVzaXZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3b3JsZHdpZGUsIGZ1bGx5IHBhaWQgdXAgYW5kIHJveWFsdHkgZnJlZSByaWdodCBhbmQgbGljZW5zZSB0byB1c2UgdGhlIEdlbmVyYXRlZCBEYXRhIGZvciAoaSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByb3Zpc2lvbiBvZiBTZXJ2aWNlcyBhbmQgZnVsZmlsbG1lbnQgb2Ygb2JsaWdhdGlvbnMgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyBhbmQ7IChpaSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1wcm92aW5nIHRoZSBTb2Z0d2FyZS7CoDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBDdXN0b21lciBoZXJlYnkgZ3JhbnRzIHRvIFRhbmdvIEV5ZSBhIG5vbi1leGNsdXNpdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdvcmxkd2lkZSwgZnVsbHkgcGFpZCB1cCBhbmQgcm95YWx0eSBmcmVlIHJpZ2h0IGFuZCBsaWNlbnNlIHRvIHVzZSB0aGUgQnVzaW5lc3MgRGF0YSBmb3IgKGkpIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm92aXNpb24gb2YgU2VydmljZXMgYW5kIGZ1bGZpbGxtZW50IG9mIG9ibGlnYXRpb25zIHVuZGVyIHRoZXNlIFNhYVMgVGVybXM7IGFuZCAoaWkpIGltcHJvdmluZ1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGUgU29mdHdhcmUuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+Q3VzdG9tZXIgYWdyZWVzIHRvIHByb3ZpZGUgY29tbWVudHMgb3IgZmVlZGJhY2ssIGlmIGFueSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdG8gVGFuZ28gRXllIHJlZ2FyZGluZyB0aGUgU29mdHdhcmUgb3IgZnV0dXJlIHJlbGVhc2VzLyBkZXZlbG9wbWVudCB0byB0aGUgU29mdHdhcmUgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZSBvZiB0aGUgd29yayBjYXJyaWVkIG91dCBkdXJpbmcgdGhpcyBlbmdhZ2VtZW50IHdpdGggdGhlIEN1c3RvbWVyIG9yIGFueSBhbmQgYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGtub3dsZWRnZSBhbmQgaW5mb3JtYXRpb24gb2YgZ2VuZXJpYyBuYXR1cmUsIGFyaXNpbmcgb3V0IG9mIHVzZSBvZiB0aGUgU29mdHdhcmUgYnkgdGhlIEN1c3RvbWVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aXRob3V0IGRpc2Nsb3NpbmcgYW55IEN1c3RvbWVyIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBvciBDdXN0b21lciBEYXRhLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBDdXN0b21lciB1bmRlcnRha2VzIHRvIHByb21wdGx5IGluZm9ybSBUYW5nbyBFeWUgb2ZcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW55IGluZnJpbmdlbWVudCBvZiBUYW5nbyBFeWUgSVAgcmlnaHRzIGJ5IHRoaXJkIHBhcnRpZXMsIGFuZCBzaGFsbCBwZXJtaXQgVGFuZ28gRXllIHRvIGFzc3VtZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzb2xlIGF1dGhvcml0eSB0byB0YWtlIGFwcHJvcHJpYXRlIGxlZ2FsIGFjdGlvbi4gQ3VzdG9tZXIgc2hhbGwgbm90IG1ha2UgYW55IHN0YXRlbWVudCBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZG1pc3Npb24gaW4gcmVsYXRpb24gdG8gc3VjaCBjbGFpbSB3aGljaCBtYXkgcHJlanVkaWNpYWxseSBhZmZlY3QgdGhlIGNoYW5jZXMgb2Ygc2V0dGxlbWVudCBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZlbnNlIG9mIHN1Y2ggY2xhaW0sIGFuZCBzaGFsbCBwcm92aWRlIGluZm9ybWF0aW9uIGFuZCBhc3Npc3RhbmNlIHJlYXNvbmFibHkgcmVxdWVzdGVkIGluXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGNsYWltIG9yIHN1aXQuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGFuZ28gRXllIGhlcmVieSB1bmRlcnRha2VzLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGlyZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJ0aWVzIGFjdCBhZ2FpbnN0IHRoZSBDdXN0b21lciBmb3IgYW55IHJlYXNvbiB3aGF0c29ldmVyIGluIHJlbGF0aW9uIHRvIHRoZSBTb2Z0d2FyZSBvciBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgVGFuZ28gRXllIElQLCB0byBwcm92aWRlIHRoZSBkb2N1bWVudGF0aW9uIGluIHRoZWlyIHBvc3Nlc3Npb24gYW5kIG90aGVyd2lzZSBkbyBhbmQgZXhlY3V0ZSBhbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0cywgdGhpbmdzLCBtYXR0ZXJzIGFuZCBkZWVkcyBhcyBtYXkgYmUgcmVhc29uYWJseSByZXF1aXJlZCBieSB0aGUgQ3VzdG9tZXIsIGZyb20gdGltZSB0byB0aW1lXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRvIHNob3cgb3duZXJzaGlwIG9mIHN1Y2ggVGFuZ28gRXllIElQLjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5DdXN0b21lciBoZXJlYnkgY29uc2VudHMgYW5kIG9wdHMgaW4gdG8gcmVjZWl2ZSBjb21tdW5pY2F0aW9ucyB0aGF0IFRhbmdvIEV5ZSBtYXkgc2VuZCB2aWEgY2FsbCBvciBtZXNzYWdlIHNlcnZpY2UgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQsIHRvIEN1c3RvbWVyIGluY2x1ZGluZyBpdHMgZW1wbG95ZWVzLCBzdGFmZiBhbmQgb3RoZXIgcmVwcmVzZW50YXRpdmVzLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj45LiBEYXRhIFByb3RlY3Rpb24gYW5kIFByaXZhY3kgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktN1wiPkVhY2ggUGFydHkgc2hhbGwgYXQgYWxsIHRpbWVzIGNvbXBseSB3aXRoIGl0c1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmxpZ2F0aW9ucyB1bmRlciBhcHBsaWNhYmxlIHByaXZhY3kgcmVndWxhdGlvbnMgaW4gcmVsYXRpb24gdG8gdGhlIEdlbmVyYXRlZCBEYXRhLCBCdXNpbmVzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBEYXRhLCBhbmQgQ3VzdG9tZXIgRGF0YSB0aGF0IGlzIGNvbGxlY3RlZCwgc3RvcmVkIGFuZC9vciBwcm9jZXNzZWQgYnkgaXQgaW4gdGhlIGNvdXJzZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwZXJmb3JtaW5nIGl0cyBvYmxpZ2F0aW9ucyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLiBGdXJ0aGVyIGVhY2ggUGFydHkgc2hhbGwgcHJvY2VzcyBzdWNoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlZCBEYXRhLCBCdXNpbmVzcyBEYXRhLCBhbmQgQ3VzdG9tZXIgRGF0YSBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IGZvciB0aGUgcHVycG9zZXNcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgcGVyZm9ybWluZyB0aGVpciByZXNwZWN0aXZlIG9ibGlnYXRpb25zIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+RWFjaCBwYXJ0eSBzaGFsbCB0YWtlIGFwcHJvcHJpYXRlIHRlY2huaWNhbCBhbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3JnYW5pemF0aW9uYWwgbWVhc3VyZXMgYXMgcmVxdWlyZWQgdW5kZXIgYXBwbGljYWJsZSBsYXcgYWdhaW5zdCBhbnkgZGF0YSBicmVhY2gsIHVuYXV0aG9yaXplZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvciB1bmxhd2Z1bCBwcm9jZXNzaW5nIG9mIHRoZSBwZXJzb25hbCBkYXRhIG9yIGl0cyBhY2NpZGVudGFsIGxvc3MsIGRlc3RydWN0aW9uIG9yIGRhbWFnZS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTAuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcnMgPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uXCI+XHJcbiAgICAgICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktN1wiPkVhY2ggUGFydHkgcmVwcmVzZW50cywgd2FycmFudHMgYW5kIGNvdmVuYW50cyB0byB0aGVcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgdGhhdDogKGkpIGl0IGlzIGR1bHkgb3JnYW5pemVkIGFuZCB2YWxpZGx5IGV4aXN0aW5nIGFuZCBpbiBnb29kIHN0YW5kaW5nIHVuZGVyIHRoZSBsYXdzIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzdGF0ZSBvZiBpdHMgaW5jb3Jwb3JhdGlvbiBvciBmb3JtYXRpb247IChpaSkgaXQgaGFzIHRoZSBmdWxsIHJpZ2h0IGFuZCBhdXRob3JpdHkgdG8gZW50ZXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW50byB0aGVzZSBTYWFTIFRlcm1zIGFuZCB0aGF0IHRoZXNlIFNhYVMgVGVybXMgY29uc3RpdHV0ZXMgYSBsZWdhbCwgdmFsaWQgYW5kIGJpbmRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2JsaWdhdGlvbjsgKGlpaSkgdGhlIGV4ZWN1dGlvbiwgZGVsaXZlcnkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZXNlIFNhYVMgVGVybXMgZG9lcyBub3QgYW5kIHdpbGxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm90IGNvbmZsaWN0IHdpdGgsIG9yIGNvbnN0aXR1dGUgYSBicmVhY2ggb3IgZGVmYXVsdCB1bmRlciwgaXRzIGNoYXJ0ZXIgb2Ygb3JnYW5pemF0aW9uLCBvciBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJhY3Qgb3Igb3RoZXIgaW5zdHJ1bWVudCB0byB3aGljaCBpdCBpcyBhIHBhcnR5OyAoaXYpIGl0IHdpbGwgY29tcGx5IHdpdGgsIGFuZCB3aWxsIGVuc3VyZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGwgb2YgaXRzIHBlcnNvbm5lbCwgdGhpcmQgcGFydHkgYWdlbnRzLCBjb25zdWx0YW50cyBldGMuLCBjb21wbHkgd2l0aCBhbGwgbGF3cyBhbmQgcmVndWxhdGlvbnNcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYWJsZSB0byAoaSkgdGhlIHByb3Zpc2lvbiwgb3IgYWNjZXNzIGFuZCB1c2Ugb2YgdGhlIFNvZnR3YXJlOyBhbmQgKGlpKSBwZXJmb3JtYW5jZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmxpZ2F0aW9ucyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGxhd3MgYW5kIHJlZ3VsYXRpb25zIHJlbGF0ZWQgdG9cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJpdmFjeSwgZGF0YSBwcm90ZWN0aW9uLCBlbGVjdHJvbmljIGNvbW11bmljYXRpb25zLCBleHBvcnQgYW5kIGNvbmZpZGVudGlhbGl0eS48L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UYW5nbyBFeWUgcmVwcmVzZW50cywgd2FycmFudHMgYW5kIGNvdmVuYW50cyB0aGF0IChpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUYW5nbyBFeWUgcGVyc29ubmVsIHNoYWxsIHByb3ZpZGUgdGhlIFNlcnZpY2VzIGluIGEgZGlsaWdlbnQgYW5kIHByb2Zlc3Npb25hbCBtYW5uZXIgd2l0aCBkdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZSAoaWkpIFRhbmdvIEV5ZSBJUCBkb2VzIG5vdCBhbmQgd2lsbCBub3QgaW5mcmluZ2UsIG1pc2FwcHJvcHJpYXRlIG9yIG90aGVyd2lzZSB2aW9sYXRlIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBwYXJ0eSB3aXRoaW4gdGhlIHRlcnJpdG9yeSBvZiBJbmRpYSBhbmQgb3IgYW55IG90aGVyIGNvdW50cnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgaXRzIHJpZ2hzdCBhcmUgcmVnaXN0ZXJlZDsgYW5kIChpaWkpIGFsbCBTZXJ2aWNlcyB0aGF0IGFyZSBwcm92aWRlZCB3aWxsIGJlIGZyZWUgZnJvbSBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAga25vd24gbWFsaWNpb3VzIGNvZGUgb3IgaW5zdHJ1Y3Rpb25zIHRoYXQgbWF5IGludGVudGlvbmFsbHkgZGlzcnVwdCwgZGFtYWdlIG9yIGludGVyZmVyZSB3aXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFueSB1c2UgYnkgQ3VzdG9tZXIuIFRhbmdvIEV5ZSBmdXJ0aGVyIHdhcnJhbnRzIGFuZCByZXByZXNlbnRzIHRvIHRoZSBDdXN0b21lciB0aGF0IGl0IGhvbGRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbmQgd2lsbCBjb250aW51ZSB0byBob2xkLCBhbnkgYW5kIGFsbCBsaWNlbnNlcywgcGVybWl0cyBvciBvdGhlciBhdXRob3JpemF0aW9ucyByZXF1aXJlZCBieSBhbnlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYWJsZSBsYXcgdG8gcGVyZm9ybSB0aGUgU2VydmljZXMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZXNlIFNhYVMgVGVybXMuPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPjxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcQXBwbGljYWJsZSBsYXfigJ08L3NwYW4+IG1lYW5zIGFueSBhcHBsaWNhYmxlIGxhdywgc3RhdHV0ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcnVsZSwgcmVndWxhdGlvbiwgb3JkaW5hbmNlLCByZXF1aXJlbWVudCwgZGlyZWN0aW9ucywgZ3VpZGVsaW5lcywgYW5ub3VuY2VtZW50IG9yIG90aGVyIGJpbmRpbmdcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uIG9yIHJlcXVpcmVtZW50IG9mIGFueSBnb3Zlcm5tZW50IG9yIHF1YXNpIGdvdmVybm1lbnQ7IGRlcGFydG1lbnQsIGFnZW5jeSBvclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnN0cnVtZW50YWxpdHkgb2YgYW55IGdvdmVybm1lbnQgdGhlcmVvZiwgYW55IGNvdXJ0IG9yIGFyYml0cmFsIHRyaWJ1bmFsIGFwcGxpY2FibGUgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4aXN0aW5nIHVuZGVyIHRoZSByZXB1YmxpYyBvZiBJbmRpYS48L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VEhFIFNPRlRXQVJFIEFORCBBTllUSElORyBQUk9WSURFRCBJTiBDT05ORUNUSU9OIFdJVEhcclxuICAgICAgICAgICAgICAgICAgICAgICAgVEhFU0UgU2FhUyBURVJNUyBBUkUgUFJPVklERUQg4oCcQVMtSVPigJ0uIEVYQ0VQVCBGT1IgVEhFIEVYUFJFU1MgUkVQUkVTRU5UQVRJT05TIEFORCBXQVJSQU5USUVTIElOXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFRISVMgU0VDVElPTiA2LCBUQU5HTyBFWUUgRE9FUyBOT1QgTUFLRSBBTlkgUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MsIElNUExJRUQgT1JcclxuICAgICAgICAgICAgICAgICAgICAgICAgU1RBVFVUT1JZIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIFFVQUxJVFksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBTWVNURU0gSU5URUdSQVRJT04sIEVSUk9SLUZSRUUsIFVOLUlOVEVSUlVQVElPTiwgU1VQUE9SVFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBDT1JSRUNUSU9OIE9SIFJFUEFJUiAoVU5MRVNTIE9USEVSV0lTRSBBR1JFRUQpIE9SIE9USEVSV0lTRSBUSEFUIFRBTkdPIEVZRSBTT0ZUV0FSRSBIRVJFVU5ERVJcclxuICAgICAgICAgICAgICAgICAgICAgICAgV0lMTCBPUEVSQVRFIElOIEVWRVJZIENPTUJJTkFUSU9OIE9SIEVOVklST05NRU5UIERFU0lSRUQgQlkgQ1VTVE9NRVIgV0lUSCBBTlkgREFUQSwgREVWSUNFUyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ09NUFVURVIgU1lTVEVNUyBBTkQgUFJPR1JBTVMgT0YgSVRTIENIT0lDRSBPUiBUSEFUIFRIRSBSRU1FRFlJTkcgT0YgT05FIFBST0dSQU0gRVJST1IgRE9FUyBOT1RcclxuICAgICAgICAgICAgICAgICAgICAgICAgUkVTVUxUIElOIFRIRSBPQ0NVUlJFTkNFIE9GIE9USEVSIFBST0dSQU0gRVJST1JTLiBBTEwgU1VDSCBSRVBSRVNFTlRBVElPTlMgQU5EIFdBUlJBTlRJRVMgQVJFXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEhFUkVCWSBESVNDTEFJTUVELjwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXQtNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBUaGUgQ3VzdG9tZXIgd2FycmFudHMgdGhhdDogPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+IGEuIEN1c3RvbWVyIERhdGEgZG9lcyBub3QgYW5kIHdpbGwgbm90IGluZnJpbmdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtaXNhcHByb3ByaWF0ZSBvciBvdGhlcndpc2UgdmlvbGF0ZSB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgdGhpcmQgcGFydHk7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPmIuIGl0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGFueSBzZWN1cml0eVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2dWxuZXJhYmlsaXRpZXMgYW5kIHRoZSBjb25zZXF1ZW5jZXMgb2Ygc3VjaCB2dWxuZXJhYmlsaXRpZXMgYXJpc2luZyBzb2xlbHkgZnJvbSB0aGUgbmF0dXJlIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyIERhdGE7PC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTUgbXMtNVwiPiBjLiBpdCBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCBFbmRcclxuICAgICAgICAgICAgICAgICAgICAgICAgVXNlcnMgY29tcGx5IHdpdGggYWxsIHJlcXVpcmVtZW50cyB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIGluIHJlbGF0aW9uIHRvIHRoZSB1c2Ugb2YgdGhlIFNvZnR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUpOzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj4gZC4gaXQgc2hhbGwgaW1tZWRpYXRlbHkgbm90aWZ5IFRhbmdvIEV5ZSBvZiAoYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgYW55IGFjY291bnQtcmVsYXRlZCBhYnVzZTsgKGIpIHRoZSB1bmF1dGhvcml6ZWQgZGlzY2xvc3VyZSwgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlaXJcclxuICAgICAgICAgICAgICAgICAgICAgICAgYWNjb3VudCBjcmVkZW50aWFscyBieSBvciB0byBhbnkgdGhpcmQgcGFydHk7IGFuZDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj4gZS4gaXQgc2hhbGwgbm90LCBhbmQgc2hhbGwgbm90IHBlcm1pdCBhbnkgcGFydHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgb3IgcGVyc29uIHRvLCBhY2Nlc3Mgb3IgdXNlIHRoZSBTb2Z0d2FyZSBleGNlcHQgYXMgZXhwcmVzc2x5IHBlcm1pdHRlZCBieSB0aGVzZSBTYWFTIFRFUk1TLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBXaXRob3V0IGxpbWl0aW5nIHRoZSBnZW5lcmFsaXR5IG9mIHRoZSBmb3JlZ29pbmcsIEN1c3RvbWVyIHNoYWxsIG5vdCwgYW5kIHNoYWxsIG5vdCBwZXJtaXQgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnR5IG9yIHBlcnNvbiB0bzo8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktMiBtcy0xMFwiPiAxLiBpbnRlcmZlcmUgd2l0aCBvciBkaXNydXB0IHRoZSBpbnRlZ3JpdHkgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWFuY2Ugb2YgdGhlIFNvZnR3YXJlLCBvciBjaXJjdW12ZW50LCBieXBhc3MsIGRlbGV0ZSBvciByZW1vdmUgYW55IGZvcm0gb2YgcHJvdGVjdGlvbiwgb3JcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2UsIGZ1bmN0aW9uYWxpdHkgb3IgdGVjaG5pY2FsIHJlc3RyaWN0aW9ucyBvciBsaW1pdGF0aW9ucywgb3IgdG8gZW5hYmxlIGZ1bmN0aW9uYWxpdHlcclxuICAgICAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQgYnkgVGFuZ28gRXllLCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFNvZnR3YXJlOzwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTEwXCI+IDIuIGFjY2VzcyBvciB1c2UgdGhlIFNvZnR3YXJlIHByb3ZpZGVkIHVuZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoZXNlIFNhYVMgVGVybXMsIGluIGFueSBtYW5uZXIgb3IgZm9yIGFueSBwdXJwb3NlIHRoYXQgdmlvbGF0ZXMgYW55IGFwcGxpY2FibGUgbGF3LCB0aGUgcmlnaHRzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG9mIG90aGVycywgaW4gYSB3YXkgdGhhdCBjb3VsZCBoYXJtIHRoZSBzZXJ2aWNlLjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS0yIG1zLTEwXCI+My4gcmV2ZXJzZSBlbmdpbmVlciwgZGlzYXNzZW1ibGUsIGRlLWNvbXBpbGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY3JlYXRlLCBjb3B5IG9yIHJlcHJvZHVjZSB0aGUgc291cmNlIGNvZGUgb3Igb2JqZWN0IGNvZGUgb2YgdGhlIFNvZnR3YXJlIG9yIHBlcmZvcm0gYW55XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1c3RvbWl6YXRpb25zICh3aXRob3V0IFRhbmdvIEV5ZeKAmXMgcHJpb3Igd3JpdHRlbiBjb25zZW50KTsgYW5kPC9kaXY+XHJcblxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTEuIEN1c3RvbWVy4oCZcyBBY2NvdW50IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEN1c3RvbWVycyBhcmUgZnVsbHkgcmVzcG9uc2libGUgdG8gc2FmZWd1YXJkIHRoZWlyIGFjY2VzcyBjcmVkZW50aWFscyAtIGluY2x1ZGluZyBpbiB0aGUgc2Vuc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIGNvbWJpbmF0aW9uIG9mIHVzZXJuYW1lIGFuZCBwYXNzd29yZC48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjEyLiBEdXJhdGlvbiwgUmVuZXdhbCBhbmQgVGVybWluYXRpb24gPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgaW4gdGhlIHByb3Bvc2FsLCB0aGVzZSBTYWFTIFRlcm1zIHNoYWxsIGNvbnRpbnVlIHRvIGJlIGVmZmVjdGl2ZSBkdXJpbmdcclxuICAgICAgICAgICAgICAgICAgICB0aGVcclxuICAgICAgICAgICAgICAgICAgICBwZXJpb2RcclxuICAgICAgICAgICAgICAgICAgICB0aGUgQ3VzdG9tZXIgdXNlcyBhbmQgb3IgY29udGludWVzIHRvIHVzZSB0aGUgU29mdHdhcmUsIHVubGVzcyB0ZXJtaW5hdGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGVcclxuICAgICAgICAgICAgICAgICAgICB0ZXJtcyBzZXRcclxuICAgICAgICAgICAgICAgICAgICBvdXRcclxuICAgICAgICAgICAgICAgICAgICBoZXJlaW4uXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCBpbiB0aGUgT3JkZXIgRm9ybSwgZmVlcyBzaGFsbCBiZSBzdWJqZWN0IHRvIGF1dG9tYXRpYyBpbmNyZW1lbnQgYXQgdGhlIHJhdGUgb2YgNyUgcGVyIGFubnVtIGFmdGVyIGV2ZXJ5IDEyIG1vbnRocy5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVpdGhlciBwYXJ0eSBtYXkgdGVybWluYXRlIHRoZWlyIGJ1c2luZXNzIHJlbGF0aW9uc2hpcCB1bmRlciB0aGVzZSBTYWFTIFRlcm1zIGltbWVkaWF0ZWx5IHVwb24gYVxyXG4gICAgICAgICAgICAgICAgICAgIG1hdGVyaWFsXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWNoIGJ5IHRoZSBvdGhlciBwYXJ0eSB0aGF0IGhhcyBub3QgYmVlbiBjdXJlZCB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2hcclxuICAgICAgICAgICAgICAgICAgICBicmVhY2guXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVpdGhlciBwYXJ0eSBtYXkgYWxzbyB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgdXBvbiB0aGlydHkgKDMwKSBkYXlzIHdyaXR0ZW4gbm90aWNlIHdpdGhvdXRcclxuICAgICAgICAgICAgICAgICAgICBhc3NpZ25pbmcgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgcmVhc29uLiBDdXN0b21lciB3aWxsIHBheSBpbiBmdWxsIGZvciB0aGUgU29mdHdhcmUgdXAgdG8gYW5kIGluY2x1ZGluZyB0aGUgbGFzdCBkYXkgb24gd2hpY2ggdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgU29mdHdhcmVcclxuICAgICAgICAgICAgICAgICAgICB3YXMgdXNlZC5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKGEpIFVwb24gdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcywgVGFuZ28gRXllIHNoYWxsIGltbWVkaWF0ZWx5IGNlYXNlIHByb3ZpZGluZyBhY2Nlc3MgdG8gdGhlIFNvZnR3YXJlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKGIpIFVwb24gdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcywgVGFuZ28gRXllIG1heSBkZWxldGUgdGhlIEdlbmVyYXRlZCBEYXRhLCBCdXNpbmVzcyBEYXRhIGFuZCBDdXN0b21lciBEYXRhIGNvbGxlY3RlZCwgc3RvcmVkIGFuZC9vciBwcm9jZXNzZWQgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJvdmlkaW5nIHRoZSBTb2Z0d2FyZSB3aXRoaW4gMTUgKGZpZnRlZW4pIGRheXMgb2YgcmVjZWlwdCBvZiBub3RpY2Ugb2YgdGVybWluYXRpb24gb2YgdGhlc2UgU2FhUyBUZXJtcy5cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNSBtcy01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjKSBJZiBUYW5nbyBFeWUgdGVybWluYXRlcyB0aGVzZSBTYWFTIFRlcm1zIGR1ZSB0byBhIGJyZWFjaCBieSBDdXN0b21lciBvZiBhbnkgb2YgdGhlIHByb3Zpc2lvbnMgY29udGFpbmVkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMsIHRoZW4gQ3VzdG9tZXIgc2hhbGwgaW1tZWRpYXRlbHkgcGF5IHRvIFRhbmdvIEV5ZSBhbGwgYW1vdW50cyB0aGVuIGR1ZSB1bmRlciB0aGVzZSBTYWFTIFRlcm1zLiBJZiBDdXN0b21lciB0ZXJtaW5hdGVzIHRoZXNlIFNhYVMgVGVybXMgZHVlIHRvIGEgYnJlYWNoIGJ5IFRhbmdvIEV5ZSwgdGhlbiBUYW5nbyBFeWUgc2hhbGwgaW1tZWRpYXRlbHkgcmVwYXkgdG8gQ3VzdG9tZXIgYWxsIHByZS1wYWlkIGFtb3VudHMgZm9yIGFueSB1bnBlcmZvcm1lZCBTZXJ2aWNlcyBzY2hlZHVsZWQgdG8gYmUgZGVsaXZlcmVkIGFmdGVyIHRoZSB0ZXJtaW5hdGlvbiBkYXRlLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01IG1zLTVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgKGQpIFN1YmplY3QgdG8gdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMsIHVwb24gaXRzIHRlcm1pbmF0aW9uIGFuZCB1cG9uIHN1YnNlcXVlbnQgd3JpdHRlbiByZXF1ZXN0IGJ5IHRoZSBEaXNjbG9zaW5nIFBhcnR5LCB0aGUgUmVjZWl2aW5nIFBhcnR5IG9mIHRhbmdpYmxlIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBzaGFsbCBpbW1lZGlhdGVseSByZXR1cm4gc3VjaCBpbmZvcm1hdGlvbiBvciBkZXN0cm95IHN1Y2ggaW5mb3JtYXRpb24gYW5kIHByb3ZpZGUgd3JpdHRlbiBjZXJ0aWZpY2F0aW9uIG9mIHN1Y2ggZGVzdHJ1Y3Rpb24sIHByb3ZpZGVkIHRoYXQgdGhlIHJlY2VpdmluZyBwYXJ0eSBtYXkgcGVybWl0IGl0cyBsZWdhbCBjb3Vuc2VsIHRvIHJldGFpbiBvbmUgYXJjaGl2YWwgY29weSBvZiBzdWNoIGluZm9ybWF0aW9uIGluIHRoZSBldmVudCBvZiBhIHN1YnNlcXVlbnQgZGlzcHV0ZSBiZXR3ZWVuIHRoZSBwYXJ0aWVzLlxyXG5UaGUgcHJvdmlzaW9ucyByZWxhdGluZyB0byBjb25maWRlbnRpYWxpdHksIGFzIHdlbGwgYXMgZm9yIGxpYWJpbGl0eSwgYXBwbGljYWJsZSBsYXcgYW5kIHNldHRsZW1lbnQgb2YgZGlzcHV0ZXMgc2hhbGwgc3Vydml2ZSB0aGUgZXhwaXJhdGlvbiBvciB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBUZXJtaW5hdGlvbiBzaGFsbCBub3QgYWZmZWN0IGFueSByaWdodHMgb3Igb2JsaWdhdGlvbnMgb2YgdGhlIHBhcnRpZXMgaW5jdXJyZWQgcHJpb3IgdG8gdGhlIGRhdGUgb2YgdGVybWluYXRpb24sIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIGJldHdlZW4gdGhlIHBhcnRpZXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8IS0tIDxkaXYgY2xhc3M9XCJteS0yXCI+XHJcbiAgICAgICAgICAgIDxoMyBjbGFzcz1cImNhcmQtdGl0bGUgYWxpZ24taXRlbXMtc3RhcnQgZmxleC1jb2x1bW4gbXktN1wiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXJtc2hlYWRpbmdcIj4xMy4gRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiA8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBVcG9uIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMsIFRhbmdvIEV5ZSBzaGFsbCBpbW1lZGlhdGVseSBjZWFzZSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBVcG9uIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMsIFRhbmdvIEV5ZSBzaGFsbCBkZWxldGUgdGhlIEdlbmVyYXRlZCBEYXRhLCBCdXNpbmVzcyBEYXRhIGFuZFxyXG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyIERhdGFcclxuICAgICAgICAgICAgICAgICAgICBjb2xsZWN0ZWQsIHN0b3JlZCBhbmQvb3IgcHJvY2Vzc2VkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgZm9yIHRoZSBwdXJwb3NlIG9mIHByb3ZpZGluZyB0aGUgU29mdHdhcmVcclxuICAgICAgICAgICAgICAgICAgICB3aXRoaW4gMTVcclxuICAgICAgICAgICAgICAgICAgICAoZmlmdGVlbikgZGF5cyBvZiByZWNlaXB0IG9mIG5vdGljZSBvZiB0ZXJtaW5hdGlvbiBvZiB0aGVzZSBTYWFTIFRlcm1zLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBJZiBUYW5nbyBFeWUgdGVybWluYXRlcyB0aGVzZSBTYWFTIFRlcm1zIGR1ZSB0byBhIGJyZWFjaCBieSBDdXN0b21lciBvZiBhbnkgb2YgdGhlIHByb3Zpc2lvbnNcclxuICAgICAgICAgICAgICAgICAgICBjb250YWluZWQgdW5kZXIgdGhlc2VcclxuICAgICAgICAgICAgICAgICAgICBTYWFTIFRlcm1zLCB0aGVuIEN1c3RvbWVyIHNoYWxsIGltbWVkaWF0ZWx5IHBheSB0byBUYW5nbyBFeWUgYWxsIGFtb3VudHMgdGhlbiBkdWUgdW5kZXIgdGhlc2UgU2FhU1xyXG4gICAgICAgICAgICAgICAgICAgIFRlcm1zLiBJZlxyXG4gICAgICAgICAgICAgICAgICAgIEN1c3RvbWVyIHRlcm1pbmF0ZXMgdGhlc2UgU2FhUyBUZXJtcyBkdWUgdG8gYSBicmVhY2ggYnkgVGFuZ28gRXllLCB0aGVuIFRhbmdvIEV5ZSBzaGFsbCBpbW1lZGlhdGVseVxyXG4gICAgICAgICAgICAgICAgICAgIHJlcGF5IHRvXHJcbiAgICAgICAgICAgICAgICAgICAgQ3VzdG9tZXIgYWxsIHByZS1wYWlkIGFtb3VudHMgZm9yIGFueSB1bnBlcmZvcm1lZCBTZXJ2aWNlcyBzY2hlZHVsZWQgdG8gYmUgZGVsaXZlcmVkIGFmdGVyIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0aW9uIGRhdGUuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFN1YmplY3QgdG8gdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMsIHVwb24gaXRzIHRlcm1pbmF0aW9uIGFuZCB1cG9uIHN1YnNlcXVlbnRcclxuICAgICAgICAgICAgICAgICAgICB3cml0dGVuIHJlcXVlc3QgYnlcclxuICAgICAgICAgICAgICAgICAgICB0aGUgRGlzY2xvc2luZyBQYXJ0eSwgdGhlIFJlY2VpdmluZyBQYXJ0eSBvZiB0YW5naWJsZSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gc2hhbGwgaW1tZWRpYXRlbHlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3VjaFxyXG4gICAgICAgICAgICAgICAgICAgIGluZm9ybWF0aW9uIG9yIGRlc3Ryb3kgc3VjaCBpbmZvcm1hdGlvbiBhbmQgcHJvdmlkZSB3cml0dGVuIGNlcnRpZmljYXRpb24gb2Ygc3VjaCBkZXN0cnVjdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBwcm92aWRlZCB0aGF0IHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIHJlY2VpdmluZyBwYXJ0eSBtYXkgcGVybWl0IGl0cyBsZWdhbCBjb3Vuc2VsIHRvIHJldGFpbiBvbmUgYXJjaGl2YWwgY29weSBvZiBzdWNoIGluZm9ybWF0aW9uIGluIHRoZVxyXG4gICAgICAgICAgICAgICAgICAgIGV2ZW50IG9mIGFcclxuICAgICAgICAgICAgICAgICAgICBzdWJzZXF1ZW50IGRpc3B1dGUgYmV0d2VlbiB0aGUgcGFydGllcy5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgVGhlIHByb3Zpc2lvbnMgcmVsYXRpbmcgdG8gY29uZmlkZW50aWFsaXR5LCBhcyB3ZWxsIGFzIGZvciBsaWFiaWxpdHksIGFwcGxpY2FibGUgbGF3IGFuZCBzZXR0bGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgb2YgZGlzcHV0ZXNcclxuICAgICAgICAgICAgICAgICAgICBzaGFsbCBzdXJ2aXZlIHRoZSBleHBpcmF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoZXNlIFNhYVMgVGVybXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFRlcm1pbmF0aW9uIHNoYWxsIG5vdCBhZmZlY3QgYW55IHJpZ2h0cyBvciBvYmxpZ2F0aW9ucyBvZiB0aGUgcGFydGllcyBpbmN1cnJlZCBwcmlvciB0byB0aGUgZGF0ZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgIHRlcm1pbmF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIGJldHdlZW4gdGhlIHBhcnRpZXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PiAtLT5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTMuIEFjY2VzcyB0byBBbmFseXRpY3MgdmlhIFdlYiBQb3J0YWwgJiBFeGNlbCBSZXBvcnRzPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRoZSBhbmFseXRpY3MgaXMgZGVzaWduZWQgZm9yIHVzZSB3aXRoIGEpIHdlYi1iYXNlZFxyXG4gICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uLCBiKSBleGNlbCByZXBvcnRzIHNlbnQgdmlhIGVtYWlsIG9yIEZpbGUgVHJhbnNmZXIgUHJvdG9jb2wuXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwhLS0gPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlRyYWluaW5nOiBBbGwg4oCcU29mdHdhcmXigJ0gdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgU2VydmljZXMuIEZvciBhdm9pZGFuY2Ugb2YgZG91YnQsIGl0IGlzIGNsYXJpZmllZCB0aGF0IFRhbmdvIEV5ZSBhZ3JlZXMgdG8gcHJvdmlkZSBzYW1wbGUgZGFzaGJvYXJkXHJcbiAgICAgICAgICAgICAgICAgICAgYW5kIGFycmFuZ2UgZm9yIHRyYWluaW5nIHNlc3Npb25zIHRvIHRoZSBDdXN0b21lciBhcyBtdXR1YWxseSBhZ3JlZWQgYnkgdGhlIFBhcnRpZXMuXHJcbiAgICAgICAgICAgICAgICA8L2xpPiAtLT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTQuIFRyYWluaW5nIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5BbGwg4oCcU29mdHdhcmXigJ0gdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFNlcnZpY2VzLiBGb3IgYXZvaWRhbmNlIG9mIGRvdWJ0LCBpdCBpcyBjbGFyaWZpZWQgdGhhdCBUYW5nbyBFeWUgYWdyZWVzIHRvIHByb3ZpZGUgYSBzYW1wbGUgZGFzaGJvYXJkIGFuZCBhcnJhbmdlIGZvciB0cmFpbmluZyBzZXNzaW9ucyB0byB0aGUgQ3VzdG9tZXIgYXMgbXV0dWFsbHkgYWdyZWVkIGJ5IHRoZSBQYXJ0aWVzLlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjE1LiBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gPC9zcGFuPlxyXG4gICAgICAgICAgICA8L2gzPlxyXG4gICAgICAgICAgICA8dWw+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+QWxsIHByb3ByaWV0YXJ5IG9yIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiwgdGVjaG5pY2FsIGRhdGEsXHJcbiAgICAgICAgICAgICAgICAgICAgb3Iga25vdy1ob3cgYW5kIGFsbCBvdGhlciBub24tcHVibGljIGluZm9ybWF0aW9uLCBtYXRlcmlhbCBvciBkYXRhIGluIHdoYXRldmVyIGZvcm0gb3IgbW9kZSBvZlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW11bmljYXRpb24sIHdoaWNoIGlzIGRpc2Nsb3NlZCBieSBhIHBhcnR5ICjigJxEaXNjbG9zaW5nIFBhcnR54oCdKSB0byB0aGUgb3RoZXIgcGFydHkgKOKAnFJlY2VpdmluZ1xyXG4gICAgICAgICAgICAgICAgICAgIFBhcnR54oCdKSBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFNvZnR3YXJlIGFjY2VzcyBhbmQgdXNhZ2Ugd2hldGhlciBtYXJrZWQgYXMg4oCcY29uZmlkZW50aWFs4oCdIG9yIG5vdCBhdFxyXG4gICAgICAgICAgICAgICAgICAgIHRoZSB0aW1lIG9mIGRpc2Nsb3N1cmUsIHNoYWxsIGJlIHRyZWF0ZWQgYXMg4oCcQ29uZmlkZW50aWFsIEluZm9ybWF0aW9u4oCdLiBDb25maWRlbnRpYWwgSW5mb3JtYXRpb25cclxuICAgICAgICAgICAgICAgICAgICBzaGFsbCBpbmNsdWRlLCBidXQgbm90IGJlIGxpbWl0ZWQgdG8sIHRoZSB0ZXJtcyBhbmQgcHJpY2luZy9jb21tZXJjaWFsIHRlcm1zIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhlIHRlY2huaWNhbCBhbmQgb3RoZXIgc3BlY2lmaWNhdGlvbnMgb2YgdGhlIFNvZnR3YXJlLCBhbnkgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8gdGhlIHNvZnR3YXJlXHJcbiAgICAgICAgICAgICAgICAgICAgbGljZW5zZSBjb2RlcyBhbmQgY29udGVudCBhcyB3ZWxsIGFzIHRoZSBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgYXJjaGl0ZWN0dXJlIGFuZCBjb21wb25lbnRzLCBhbmQgYWxsXHJcbiAgICAgICAgICAgICAgICAgICAgb3RoZXIgbm9uLXB1YmxpYyBpbmZvcm1hdGlvbi5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+VGhlIFJlY2VpdmluZyBQYXJ0eSB1bmRlcnRha2VzOiAoaSkgbm90IHRvIHVzZSBDb25maWRlbnRpYWxcclxuICAgICAgICAgICAgICAgICAgICBJbmZvcm1hdGlvbiBvdGhlcndpc2UgdGhhbiBmb3IgdGhlIHB1cnBvc2UgZm9yIHdoaWNoIGl0IHdhcyBkaXNjbG9zZWQgb3IgdG8gcGVybWl0IHRoZSBSZWNlaXZpbmdcclxuICAgICAgICAgICAgICAgICAgICBQYXJ0eSB0byBleGVyY2lzZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlc2UgU2FhUyBUZXJtcyA7IChpaSkgbm90IHRvIGRpc2Nsb3NlXHJcbiAgICAgICAgICAgICAgICAgICAgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiB0aGUgRGlzY2xvc2luZyBQYXJ0eSwgb3RoZXIgdGhhbiB0b1xyXG4gICAgICAgICAgICAgICAgICAgIHRob3NlIGVtcGxveWVlcywgYWdlbnRzLCBjb250cmFjdG9ycywgc3ViY29udHJhY3RvcnMsIGxpY2Vuc2VlcyBvZiB0aGUgUmVjZWl2aW5nIFBhcnR5LCBpdHNcclxuICAgICAgICAgICAgICAgICAgICBBZmZpbGlhdGVzIG9yIGFueSBvdGhlciBwYXJ0aWVzIHdobyBoYXZlIGEgbmVlZCB0byBrbm93IGl0IGluIG9yZGVyIHRvIGFzc2lzdCB0aGUgUmVjZWl2aW5nIFBhcnR5IGluXHJcbiAgICAgICAgICAgICAgICAgICAgcGVyZm9ybWluZyBpdHMgb2JsaWdhdGlvbnMsIG9yIHRvIHBlcm1pdCB0aGUgUmVjZWl2aW5nIFBhcnR5IHRvIGV4ZXJjaXNlIGl0cyByaWdodHPCoCBhbmQgbGljZW5zZXNcclxuICAgICAgICAgICAgICAgICAgICB1bmRlciB0aGlzIEFncmVlbWVudDsgKGlpaSkgdG8gdGFrZSBhbGwgc3VjaCBzdGVwcyB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBhY2Nlc3MgdG8gdGhlIERpc2Nsb3NpbmdcclxuICAgICAgICAgICAgICAgICAgICBQYXJ0eeKAmXMgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uLCBhcyBpdCB0YWtlcyB0byBwcm90ZWN0IGl0cyBvd24gY29uZmlkZW50aWFsIG9yIHByb3ByaWV0YXJ5XHJcbiAgICAgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gb2YgYSBzaW1pbGFyIG5hdHVyZSwgd2hpY2ggc3RlcHMgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGVzcyB0aGFuIGEgcmVhc29uYWJsZSBzdGFuZGFyZCBvZlxyXG4gICAgICAgICAgICAgICAgICAgIGNhcmU7IGFuZCBpdikgdG8gcmV0dXJuIHRvIHRoZSBDdXN0b21lciwgb3IgZGVzdHJveSwgb24gcmVxdWVzdCBhbGwgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHRoYXRcclxuICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiBkaXNjbG9zZWQgdG8gdGhlbSwgaW5jbHVkaW5nIGFsbCBjb3BpZXMgdGhlcmVvZiBhbmQgdG8gZGVsZXRlIGFsbCBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gYVxyXG4gICAgICAgICAgICAgICAgICAgIG1hY2hpbmUtcmVhZGFibGUgZm9ybSB0byB0aGUgZXh0ZW50IHByYWN0aWNhbGx5IHBvc3NpYmxlLCBzdWJqZWN0IHRvIGFueSByaWdodHMgb3IgbGljZW5zZXMgZ3JhbnRlZFxyXG4gICAgICAgICAgICAgICAgICAgIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgb2JsaWdhdGlvbnMgaW4gcmVsYXRpb24gdG8gQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uXHJcbiAgICAgICAgICAgICAgICAgICAgdW5kZXIgdGhlc2UgU2FhUyBUZXJtc8KgIHNoYWxsIG5vdCBhcHBseSB0byBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24sIHdoaWNoIChpKSBoYXMgYmVjb21lIG9yIGJlY29tZXNcclxuICAgICAgICAgICAgICAgICAgICBwdWJsaWNseSBhdmFpbGFibGUgYnkgbWVhbnMgb3RoZXIgdGhhbiBhIGJyZWFjaCBvZiBjb25maWRlbnRpYWxpdHkgb2JsaWdhdGlvbnM7IChpaSkgd2FzIGFscmVhZHlcclxuICAgICAgICAgICAgICAgICAgICBrbm93biB0byB0aGUgUmVjZWl2aW5nIFBhcnR5IHByaW9yIHRvIGRpc2Nsb3N1cmU7IChpaWkpIHRoZSBSZWNlaXZpbmcgUGFydHkgaXMgcmVxdWlyZWQgdG8gZGlzY2xvc2VcclxuICAgICAgICAgICAgICAgICAgICBpbiBvcmRlciB0byBjb21wbHkgd2l0aCBhcHBsaWNhYmxlIGxhd3Mgb3IgcmVndWxhdGlvbnMgb3Igd2l0aCBhIGNvdXJ0IG9yIGFkbWluaXN0cmF0aXZlIG9yZGVyOyBvclxyXG4gICAgICAgICAgICAgICAgICAgIChpdikgaXMgaW5kZXBlbmRlbnRseSBkZXZlbG9wZWQgYnkgdGhlIFJlY2VpdmluZyBQYXJ0eSB3aXRob3V0IHJlZmVyZW5jZSB0byBvciB1c2Ugb2YgYW55XHJcbiAgICAgICAgICAgICAgICAgICAgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIG9mIHRoZSBEaXNjbG9zaW5nIFBhcnR5LlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5UaGUgUmVjZWl2aW5nIFBhcnR5IHNoYWxsIHByb21wdGx5LCBhbmQgaW4gYW55IGNhc2Ugd2l0aGluXHJcbiAgICAgICAgICAgICAgICAgICAgdGhyZWUgKDMpIGRheXMgYWR2aXNlIHRoZSBEaXNjbG9zaW5nIFBhcnR5IGluIHdyaXRpbmcgb2YgYW55IHVuYXV0aG9yaXplZCBkaXNjbG9zdXJlLFxyXG4gICAgICAgICAgICAgICAgICAgIG1pc2FwcHJvcHJpYXRpb24gb3IgbWlzdXNlIG9mIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBhZnRlciBpdCBiZWNvbWVzIGF3YXJlIG9mIGl0IGFuZCB2aWNlIHZlcnNhLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5JZiBlaXRoZXIgcGFydHkgYmVjb21lcyBhd2FyZSB0aGF0IGl0IHdpbGwgYmUgcmVxdWlyZWQsIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgaXMgbGlrZWx5IHRvIGJlIHJlcXVpcmVkLCB0byBkaXNjbG9zZSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gaW4gb3JkZXIgdG8gY29tcGx5IHdpdGggYXBwbGljYWJsZVxyXG4gICAgICAgICAgICAgICAgICAgIGxhd3Mgb3IgcmVndWxhdGlvbnMgb3Igd2l0aCBhIGNvdXJ0IG9yIGFkbWluaXN0cmF0aXZlIG9yZGVyLCBpdCBzaGFsbCwgdG8gdGhlIGV4dGVudCBpdCBpcyBsYXdmdWxseVxyXG4gICAgICAgICAgICAgICAgICAgIGFibGUgdG8gZG8gc28sIHByaW9yIHRvIGFueSBzdWNoIGRpc2Nsb3N1cmUgbm90aWZ5IHRoZSBvdGhlciBwYXJ0eSwgYW5kIGNvbXBseSB3aXRoIHRoZSBvdGhlclxyXG4gICAgICAgICAgICAgICAgICAgIHBhcnR54oCZcyBpbnN0cnVjdGlvbnMgdG8gcHJvdGVjdCB0aGUgY29uZmlkZW50aWFsaXR5IG9mIHRoZSBpbmZvcm1hdGlvbi5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjE2LiBJbmRlbW5pdHkgYW5kIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIFdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBhdmFpbGFibGUgaW4gbGF3IG9yIHVuZGVyIGVxdWl0eSwgZWFjaCBwYXJ0eSBoZXJlYnkgYWdyZWVzIHRvXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcGVuc2F0ZSwgaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgaGFybWxlc3MgdGhlIG90aGVyLCBpdHMgYWZmaWxpYXRlcywgZGlyZWN0b3JzLCBzaGFyZWhvbGRlcnMsXHJcbiAgICAgICAgICAgICAgICAgICAgb2ZmaWNlcnMgYW5kIGVtcGxveWVlcyBhbmQgYWdlbnRzLCBmcm9tIGFuZCBhZ2FpbnN0IGFueSBhbmQgYWxsIGxvc3NlcywgbGlhYmlsaXRpZXMsIGRhbWFnZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVmaWNpZW5jaWVzLCBkZW1hbmRzLCBjbGFpbXMgKGluY2x1ZGluZyB0aGlyZCBwYXJ0eSBjbGFpbXMpLCBhY3Rpb25zLCBqdWRnbWVudHMgb3IgY2F1c2VzIG9mXHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uLCBhc3Nlc3NtZW50cywgaW50ZXJlc3QsIHBlbmFsdGllcyBhbmQgb3RoZXIgY29zdHMgb3IgZXhwZW5zZXMgKGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLFxyXG4gICAgICAgICAgICAgICAgICAgIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBleHBlbnNlcykgYmFzZWQgdXBvbiwgYXJpc2luZyBvdXQgb2YsIG9yIGluIHJlbGF0aW9uIHRvIG9yIG90aGVyd2lzZVxyXG4gICAgICAgICAgICAgICAgICAgIGluIHJlc3BlY3Qgb2YgKGkpIGFueSBicmVhY2ggb2YgaXRzIG9ibGlnYXRpb25zIHVuZGVyIHRoZXNlIFNhYVMgVGVybXMgOyBvciAoaWkpIGFueSB3aWxsZnVsXHJcbiAgICAgICAgICAgICAgICAgICAgbWlzY29uZHVjdCwgZnJhdWQsIG9yIHdyb25nZnVsIG9yIG5lZ2xpZ2VudCBhY3Qgb3Igb21pc3Npb24gb2YgYSBQYXJ0eS48L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEluIG5vIGV2ZW50IHNoYWxsIGVpdGhlciBQYXJ0eSBiZSBsaWFibGUgdG8gdGhlIG90aGVyIGZvciBhbnkgaW5kaXJlY3QsIGluY2lkZW50YWwsIHB1bml0aXZlLFxyXG4gICAgICAgICAgICAgICAgICAgIGV4ZW1wbGFyeSwgc3BlY2lhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIG9yIGRhbWFnZXMgZm9yIGxvc3Mgb2YgcHJvZml0cywgcmV2ZW51ZSwgd2hldGhlciBpbiBhblxyXG4gICAgICAgICAgICAgICAgICAgIGFjdGlvbiBpbiBjb250cmFjdCBvciB0b3J0LCBvciBvdGhlcndpc2UgKGNvbGxlY3RpdmVseSByZWZlcnJlZCB0byBhcyDigJxJbmRpcmVjdCBMb3NzZXPigJ0pIGV2ZW4gaWZcclxuICAgICAgICAgICAgICAgICAgICBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBFYWNoIFBhcnR54oCZcyBsaWFiaWxpdHkgYXJpc2luZyBvdXQgb2Ygb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBicmVhY2ggb2YgYW55IGRpcmVjdCBhbmQgYWN0dWFsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlhYmlsaXRpZXMsIGNvc3RzLCBsb3NzZXMsIGRhbWFnZXMsIHN1aXRzLCBwcm9jZWVkaW5ncywgY29zdHMsIGV4cGVuc2VzIG9yIGxpYWJpbGl0aWVzIHN1ZmZlcmVkIG9yXHJcbiAgICAgICAgICAgICAgICAgICAgaW5jdXJyZWQgZHVlIHRvIHJlc3VsdGluZyBkdWUgdG8gY2xhaW1zIGZvciBicmVhY2ggb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGEgUGFydHkgb3IgdGhpcmRcclxuICAgICAgICAgICAgICAgICAgICBwYXJ0eSwgYnJlYWNoIG9mIGNvbmZpZGVudGlhbGl0eSBvYmxpZ2F0aW9uLCBkYXRhIGJyZWFjaCwgYnJlYWNoIG9mIGRhdGEgcHJpdmFjeSwgZnJhdWQsIHdpbGxmdWxcclxuICAgICAgICAgICAgICAgICAgICBuZWdsaWdlbmNlLCBncm9zcyBtaXNjb25kdWN0IG9yIGJyZWFjaCBvZiBhcHBsaWNhYmxlIGxhd3Mgc2hhbGwgaW4gbm8gZXZlbnQgZXhjZWVkIHRoZSBhbm51YWwgdG90YWxcclxuICAgICAgICAgICAgICAgICAgICBwdXJjaGFzZSBwcmljZSBwYWlkIHB1cnN1YW50IHRvIGdyYW50IG9mIGFjY2VzcyBhbmQgdXNhZ2Ugb2YgdGhlIFNlcnZpY2VzL1NvZnR3YXJlIGJ5IHRoZSBDdXN0b21lci5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIm15LTJcIj5cclxuICAgICAgICAgICAgPGgzIGNsYXNzPVwiY2FyZC10aXRsZSBhbGlnbi1pdGVtcy1zdGFydCBmbGV4LWNvbHVtbiBteS03XCI+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRlcm1zaGVhZGluZ1wiPjE3LiBGb3JjZSBNYWpldXJlIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9oMz5cclxuICAgICAgICAgICAgPHVsPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIEVhY2ggb2YgdGhlIFBhcnRpZXMgaXMgbm90IHJlc3BvbnNpYmxlIG5vciBsaWFibGUgZm9yIGFueSBkZWxheXMgb3IgZmFpbHVyZXMgaW4gcGVyZm9ybWFuY2UgZnJvbSBhbnlcclxuICAgICAgICAgICAgICAgICAgICBjYXVzZSBiZXlvbmQgaXRzIGNvbnRyb2wsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIGFjdHMgb2YgR29kLCBjaGFuZ2VzIHRvIGxhdyBvciByZWd1bGF0aW9ucyxcclxuICAgICAgICAgICAgICAgICAgICBlbWJhcmdvZXMsIHdhciwgdGVycm9yaXN0IGFjdHMsIGFjdHMgb3Igb21pc3Npb25zIG9mIHRoaXJkIHBhcnR5IHRlY2hub2xvZ3kgcHJvdmlkZXJzLCByaW90cywgZmlyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgZWFydGhxdWFrZXMsIGZsb29kcywgcG93ZXIgYmxhY2tvdXRzLCBzdHJpa2VzLCB3ZWF0aGVyIGNvbmRpdGlvbnMsIHBhbmRlbWljLCBlcGlkZW1pYywgZ292ZXJubWVudFxyXG4gICAgICAgICAgICAgICAgICAgIGxvY2tkb3ducyBvciBhbnkgb3RoZXIgdW5mb3Jlc2VlYWJsZSBldmVudCBiZXlvbmQgaXRzIGNvbnRyb2wgKGhlcmVpbmFmdGVyIGNvbGxlY3RpdmVseSByZWZlcnJlZCB0b1xyXG4gICAgICAgICAgICAgICAgICAgIGFzIDxzcGFuIGNsYXNzPVwidGV4dC1oZWxpZ2h0XCI+4oCcRm9yY2UgTWFqZXVyZSBFdmVudOKAnSk8L3NwYW4+LiBVcG9uIG9jY3VycmVuY2Ugb2YgYW55IEZvcmNlIE1hamV1cmUgRXZlbnQsIGVpdGhlciBQYXJ0eSBzaGFsbCBnaXZlXHJcbiAgICAgICAgICAgICAgICAgICAgbm90aWNlIHRvIHRoZSBvdGhlciBwYXJ0eSBvZiBpdHMgaW5hYmlsaXR5IHRvIHBlcmZvcm0gb3Igb2YgZGVsYXkgaW4gY29tcGxldGluZyBpdHMgb2JsaWdhdGlvbnMgYW5kXHJcbiAgICAgICAgICAgICAgICAgICAgbXVzdCBhY3QgZGlsaWdlbnRseSB0byByZW1lZHkgdGhlIGNhdXNlIGFuZCByZXN0b3JlIHBlcmZvcm1hbmNlLCB0byB0aGUgZXh0ZW50IHBvc3NpYmxlLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgV2hlcmUgRm9yY2UtTWFqZXVyZSBFdmVudCBjb250aW51ZXMgZm9yIGEgcGVyaW9kIG1vcmUgdGhhbiBTaXh0eSAoNjApIGNvbnRpbnVvdXMgZGF5cywgdGhlbiB0aGVcclxuICAgICAgICAgICAgICAgICAgICBlZmZlY3RlZCBQYXJ0eSBzaGFsbCBoYXZlIHRoZSByaWdodCB0byBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgdGhlc2UgU2FhUyBUZXJtcyBBZ3JlZW1lbnQgYnkgcHJvdmlkaW5nXHJcbiAgICAgICAgICAgICAgICAgICAgYSB3cml0dGVuIG5vdGljZS48L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibXktMlwiPlxyXG4gICAgICAgICAgICA8aDMgY2xhc3M9XCJjYXJkLXRpdGxlIGFsaWduLWl0ZW1zLXN0YXJ0IGZsZXgtY29sdW1uIG15LTdcIj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGVybXNoZWFkaW5nXCI+MTguIE1pc2NlbGxhbmVvdXM8L3NwYW4+XHJcbiAgICAgICAgICAgIDwvaDM+XHJcbiAgICAgICAgICAgIDx1bD5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBUaGVzZSBTYWFTIFRlcm1zIGlzIGRyYXduIHVwIGluIEVuZ2xpc2gsIHdoaWNoIGxhbmd1YWdlIHNoYWxsIGdvdmVybiBhbGwgZG9jdW1lbnRzLCBub3RpY2VzLFxyXG4gICAgICAgICAgICAgICAgICAgIG1lZXRpbmdzLCBwcm9jZWVkaW5ncyBhbmQgcHJvY2Vzc2VzIHJlbGF0aXZlIHRoZXJldG8uXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIE5vdGhpbmcgaW4gdGhlc2UgU2FhUyBUZXJtcyBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhIGpvaW50IHZlbnR1cmUsIGFnZW5jeSwgcGFydG5lcnNoaXAsXHJcbiAgICAgICAgICAgICAgICAgICAgaW50ZXJlc3QgZ3JvdXBpbmcgb3IgYW55IG90aGVyIGtpbmQgb2YgZm9ybWFsIGJ1c2luZXNzIGdyb3VwaW5nIG9yIGVudGl0eSBiZXR3ZWVuIHRoZSBQYXJ0aWVzLlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInRleHQtbXV0ZWQgZnctc2VtaWJvbGQgc3ViIG15LTVcIj5cclxuICAgICAgICAgICAgICAgICAgICBObyByaWdodHMgb3Igb2JsaWdhdGlvbnMgb2YgdGhlIFBhcnRpZXMgYXJpc2luZyBmcm9tIHRoZXNlIFNhYVMgVGVybXMgbWF5IGJlIGFzc2lnbmVkLFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Yi1jb250cmFjdGVkLCBvciB0cmFuc2ZlcnJlZCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgdGhlIG90aGVyIHBhcnR54oCZc1xyXG4gICAgICAgICAgICAgICAgICAgIHByaW9yIHdyaXR0ZW4gYXBwcm92YWwuXHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwidGV4dC1tdXRlZCBmdy1zZW1pYm9sZCBzdWIgbXktNVwiPiBJbiBjYXNlIG9mIGNvbmZsaWN0IHRlcm1zIGJldHdlZW4gdGhlc2UgU2FhUyBUZXJtcyBhbmQgT3JkZXIgRm9ybSwgdGhlIE9yZGVyIEZvcm0gd2lsbCBwcmV2YWlsLjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJ0ZXh0LW11dGVkIGZ3LXNlbWlib2xkIHN1YiBteS01XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLiBUaGVzZSBTYWFTIFRlcm1zIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIEluZGlhLCBhbmQgdGhlXHJcbiAgICAgICAgICAgICAgICAgICAgUGFydGllcyBoZXJlYnkgYWdyZWUgdG8gaXJyZXZvY2FibHkgc3VibWl0IHRvIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydHMgb2YgTmV3IERlbGhpXHJcbiAgICAgICAgICAgICAgICAgICAgaW4gcmVzcGVjdCBvZiBhbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhlc2UgU2FhUyBUZXJtcy5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG48ZGl2IGNsYXNzPVwicm93IGctMCBtYi0wIGJnLXRlcm1zXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTEwXCI+XHJcbiAgICAgICAgPGxhYmVsIGNsYXNzPVwiZm9ybS1jaGVjayBmb3JtLWNoZWNrLWN1c3RvbSBmb3JtLWNoZWNrLXNvbGlkIGZvcm0tY2hlY2staW5saW5lIFwiPlxyXG4gICAgICAgICAgICA8aW5wdXQgW2Rpc2FibGVkXT1cIiFlbmFibGVBZ3JlZVwiIGNsYXNzPVwiZm9ybS1jaGVjay1pbnB1dFwiIHR5cGU9XCJjaGVja2JveFwiIHJlcXVpcmVkIG5hbWU9XCJ0b2NcIiB2YWx1ZT1cIjFcIlxyXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInVwZGF0ZXRlcm1zKCRldmVudClcIiAvPlxyXG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvcm0tY2hlY2stbGFiZWwgZnctYm9sZCB0ZXh0LWdyYXktNzAwXCI+XHJcbiAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0c2l6ZSBtdC0zXCI+SSBhZ3JlZSB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMuPC9zcGFuPlxyXG4gICAgICAgIDwvbGFiZWw+XHJcblxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IGNsYXNzPVwiY29sLW1kLTJcIj5cclxuICAgICAgICA8YnV0dG9uIFtkaXNhYmxlZF09XCIhdGVybXNcIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cIm9uQ29udGludWVUZXJtcygpXCIgY2xhc3M9XCJidG4gYnRuLWxnIGJ0bi1wcmltYXJ5IG1zLTE1IG1lLTUgdGV4dC1ub3dyYXBcIj5cclxuICAgICAgICAgICAgQ29udGludWVcclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgIDwvZGl2PlxyXG5cclxuPC9kaXY+XHJcbjwvZGl2PiJdfQ==