-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
2 lines (2 loc) · 74.1 KB
/
main.js
1
2
!function(t){function e(e){for(var a,r,o=e[0],s=e[1],c=e[2],u=0,d=[];u<o.length;u++)r=o[u],Object.prototype.hasOwnProperty.call(l,r)&&l[r]&&d.push(l[r][0]),l[r]=0;for(a in s)Object.prototype.hasOwnProperty.call(s,a)&&(t[a]=s[a]);for(m&&m(e);d.length;)d.shift()();return i.push.apply(i,c||[]),n()}function n(){for(var t,e=0;e<i.length;e++){for(var n=i[e],a=!0,o=1;o<n.length;o++){var s=n[o];0!==l[s]&&(a=!1)}a&&(i.splice(e--,1),t=r(r.s=n[0]))}return t}var a={},l={0:0},i=[];function r(e){if(a[e])return a[e].exports;var n=a[e]={i:e,l:!1,exports:{}};return t[e].call(n.exports,n,n.exports,r),n.l=!0,n.exports}r.m=t,r.c=a,r.d=function(t,e,n){r.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:n})},r.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},r.t=function(t,e){if(1&e&&(t=r(t)),8&e)return t;if(4&e&&"object"==typeof t&&t&&t.__esModule)return t;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:t}),2&e&&"string"!=typeof t)for(var a in t)r.d(n,a,function(e){return t[e]}.bind(null,a));return n},r.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,"a",e),e},r.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.p="";var o=window.webpackJsonp=window.webpackJsonp||[],s=o.push.bind(o);o.push=e,o=o.slice();for(var c=0;c<o.length;c++)e(o[c]);var m=s;i.push([137,1]),n()}({137:function(t,e,n){n(138),t.exports=n(334)},324:function(t,e,n){},334:function(t,e,n){"use strict";n.r(e);var a=n(0),l=n.n(a),i=n(135),r=n.n(i),o=n(44),s=n(8);function c(){var t=Object(s.e)().pathname;return Object(a.useEffect)((function(){window.scrollTo(0,0)}),[t]),null}var m=n.p+"7054f80d1d4ee957e10340d5e9b19f4c.png",u=function(t){return l.a.createElement("section",{id:"banner"},l.a.createElement("div",{className:"content"},l.a.createElement("header",null,l.a.createElement("h2",null,"Srinivas Gopinath Parimi"),l.a.createElement("p",null,"Digital technology leader ")),l.a.createElement("span",{className:"image"},l.a.createElement("img",{src:m,alt:"Srinivas Gopinath"})),l.a.createElement("p",{className:"row headline"},"Transforming businesses using AI, Block chain, Cloud and Data science")))},d=function(){return l.a.createElement("div",{className:"content highlight-box"},l.a.createElement("div",{className:"container pamphlet"},l.a.createElement("div",{className:"row"},l.a.createElement("div",{className:"col-4 col-12-medium"},l.a.createElement("header",null,l.a.createElement("h2",null,"24 years of experience"),l.a.createElement("p",null,"100+ successful projects"))),l.a.createElement("div",{className:"col-4 col-12-medium"},l.a.createElement("li",null,"Uplifted digital sales and profits for 35+ brands"),l.a.createElement("li",null,"Known for innovation and opensource contribution")),l.a.createElement("div",{className:"col-4 col-12-medium"},l.a.createElement("li",null,"Skilful on AEM, Java, Typescript, Angular, React, Python, AWS, Azure, GCP"),l.a.createElement("li",null,"Mentor with 13 million subscribers on Stack Overflow")))))};function p(t){var e="spotlight style2 right";return"left"===t.theme&&(e="spotlight style3 left"),l.a.createElement("section",{id:t.id,className:e,style:{backgroundImage:"url(".concat(t.backgroundImage,")")}},l.a.createElement("span",{className:"image fit main"},l.a.createElement("img",{src:t.image,alt:""})),l.a.createElement("div",{className:"content"},l.a.createElement("header",null,l.a.createElement("h2",null,t.title),l.a.createElement("p",null,t.subTitle)),l.a.createElement("p",null,l.a.createElement("div",{dangerouslySetInnerHTML:{__html:t.description}})),l.a.createElement("ul",{className:"actions"},l.a.createElement("li",null,l.a.createElement(o.b,{to:t.link,className:"button"},"Learn More")))))}var f=function(){return l.a.createElement("section",{id:"four",className:"wrapper style1 special fade-up"},l.a.createElement("div",{className:"container"},l.a.createElement("header",{className:"major"},l.a.createElement("h2",null,"Accomplishments"),l.a.createElement("p",null,"Projects and contributions")),l.a.createElement("div",{className:"box alt"},l.a.createElement("div",{className:"row gtr-uniform"},l.a.createElement("section",{className:"col-4 col-6-medium col-12-xsmall"},l.a.createElement("span",{className:"icon solid alt major fa-chart-area"}),l.a.createElement("h3",null,"jwt-spring-boot"),l.a.createElement("p",null,"Securing Spring Boot Microservices with JSON Web Tokens (JWT)")),l.a.createElement("section",{className:"col-4 col-6-medium col-12-xsmall"},l.a.createElement("span",{className:"icon solid alt major fa-comment"}),l.a.createElement("h3",null,"aem-reactjs"),l.a.createElement("p",null,"AEM 6.5 with Single Page Apps in ReactJS")),l.a.createElement("section",{className:"col-4 col-6-medium col-12-xsmall"},l.a.createElement("span",{className:"icon solid alt major fa-flask"}),l.a.createElement("h3",null,"SnmpAgentSimulator"),l.a.createElement("p",null,"Simulate thousands of SNMP network nodes from a single PC")),l.a.createElement("section",{className:"col-4 col-6-medium col-12-xsmall"},l.a.createElement("span",{className:"icon solid alt major fa-paper-plane"}),l.a.createElement("h3",null,"kafka-websocket"),l.a.createElement("p",null,"Stream data from kafka to browser via websocket")),l.a.createElement("section",{className:"col-4 col-6-medium col-12-xsmall"},l.a.createElement("span",{className:"icon solid alt major fa-file"}),l.a.createElement("h3",null,"fastest"),l.a.createElement("p",null,"Automate your software testing, the fastest way!")),l.a.createElement("section",{className:"col-4 col-6-medium col-12-xsmall"},l.a.createElement("span",{className:"icon solid alt major fa-lock"}),l.a.createElement("h3",null,"editable-ui"),l.a.createElement("p",null,"Editable components in React")))),l.a.createElement("footer",{className:"major"},l.a.createElement("ul",{className:"actions special"},l.a.createElement("li",null,l.a.createElement("a",{target:"_blank",href:"https://github.com/deargopinath",className:"button"},"Learn more"))))))},g=function(){return l.a.createElement("footer",{id:"footer"},l.a.createElement("ul",{className:"icons"},l.a.createElement("li",null,l.a.createElement("a",{target:"_blank",href:"https://twitter.com/GParimi",className:"icon brands alt fa-twitter"},l.a.createElement("span",{className:"label"},"Twitter"))),l.a.createElement("li",null,l.a.createElement("a",{target:"_blank",href:"https://stackoverflow.com/users/6571165/gopinath",className:"icon brands alt fab fa-stack-overflow"},l.a.createElement("span",{className:"label"},"Stack Overflow"))),l.a.createElement("li",null,l.a.createElement("a",{target:"_blank",href:"https://www.linkedin.com/in/srinivas-gopinath-parimi-413a7713",className:"icon brands alt fa-linkedin-in"},l.a.createElement("span",{className:"label"},"LinkedIn"))),l.a.createElement("li",null,l.a.createElement("a",{target:"_blank",href:"https://dzone.com/users/3120373/deargopinath.html",className:"icon brands alt fas fa-blogger"},l.a.createElement("span",{className:"label"},"DZone"))),l.a.createElement("li",null,l.a.createElement("a",{target:"_blank",href:"https://github.com/deargopinath",className:"icon brands alt fa-github"},l.a.createElement("span",{className:"label"},"GitHub"))),l.a.createElement("li",null,l.a.createElement("a",{target:"_blank",href:"mailto:[email protected]",className:"icon solid alt fa-envelope"},l.a.createElement("span",{className:"label"},"Email")))),l.a.createElement("ul",{className:"copyright"},l.a.createElement("li",null,"© 2024"),l.a.createElement("li",null,"Srinivas Gopinath Parimi")))},h=n.p+"f482145aab41c07699c42c0743dbdfa5.jpg",b=n.p+"17a8782a9a25da47e5c6f43620ae579d.jpg",E=n.p+"059658fa4d8828fd4849c68d8d91b2d7.jpg",v=n.p+"102b0baf68daea4084b51b2c5a5631ab.jpg";function y(){return l.a.createElement("div",{id:"page-wrapper"},l.a.createElement(u,null),l.a.createElement(d,null),l.a.createElement(p,{id:"banner1",theme:"right",backgroundImage:h,image:h,title:"A telco gains 16% customer engagement with omni-digital",subTitle:"Digital sales and proactive care using Adobe Experience Manager and AWS",description:'\n\t\t\t\t<ul style="text-align: left">\n\t\t\t\t <li>\n\t\t\t\t Personalized experiences and targeted campaigns across brands and geographies\n\t\t\t\t </li>\n\t\t\t\t <li>\n\t\t\t\t Real-time product reservations and store-pickup service\n\t\t\t\t </li>\n\t\t\t\t <li>\n\t\t\t\t Customer self-service assisted by AI chatbot\n\t\t\t\t </li>\n\t\t\t\t <li>\n\t\t\t\t Auto-scaling to support peak traffic periods and special events\n\t\t\t\t </li>\n\t\t\t\t</ul>\n\t\t\t\t',link:"/telco"}),l.a.createElement(p,{id:"banner2",theme:"left",backgroundImage:b,image:b,title:"A university leads by innovative pedagogy and gamified learning",subTitle:"Enlightening of teaching and nurturing of talent facilitated by Azure, Angular, Blackboard, IDOL, LAMS and Mulesoft",description:'\n\t\t\t\t<ul style="text-align: left">\n\t\t\t\t <li>\n\t\t\t\t Adaptive user interface for a ‘connected anywhere, connected anytime’ experience\n\t\t\t\t </li>\n\t\t\t\t <li>\n\t\t\t\t Versatile content authoring, course packaging and instruction delivery\n\t\t\t\t </li>\n\t\t\t\t <li>\n\t\t\t\t Actionable insights for faculty and students\n\t\t\t\t </li>\n\t\t\t\t <li>\n\t\t\t\t Cognitive search for audiovisual content\n\t\t\t\t </li>\n\t\t\t\t</ul>\n\t\t\t',link:"/edu"}),l.a.createElement(p,{id:"banner3",theme:"right",backgroundImage:E,image:E,title:"A bank reaps profits for its customers with an intelligent trading solution",subTitle:"Kafka, Spring Boot and React for profitable trading",description:'\n\t\t\t\t<ul style="text-align: left">\n\t\t\t\t <li>\n\t\t\t\t Selection of the best trading venue for the given price, volume and frequency\n\t\t\t\t </li>\n\t\t\t\t <li>\n\t\t\t\t Real-time recording and disclosure of Pre-trade and post-trade activities for regulatory compliance\n\t\t\t\t </li>\n\t\t\t\t <li>\n\t\t\t\t Personalised market insights to help customers make informed decisions with confidence\n\t\t\t\t </li>\n\t\t\t\t</ul>\n\t\t\t\t',link:"/bank"}),l.a.createElement(p,{id:"banner4",theme:"left",backgroundImage:v,image:v,title:"Smart queueing boosts customer delight by 30% for an online payments company",subTitle:"AEM, Pega and Java micro-services for supporting payments and chargebacks",description:'\n\t\t\t\t<ul style="text-align: left">\n\t\t\t \t<li>30% cut in the average call time</li>\n\t\t \t\t<li>30% more issues get resolved on first call</li>\n\t \t\t\t<li>30% more engagement of telephone for vulnerable customers</li>\n \t\t\t\t<li>30% growth in prevention of cyber fraud</li>\n\t\t\t\t</ul>\n\t\t\t',link:"/payments"}),l.a.createElement(f,null),l.a.createElement(g,null))}var w=n.p+"03cf5b1d3a30d3b28b818cb1b7db86e7.png";function k(t){return l.a.createElement("div",{id:t.id,className:"wrapper style1"},l.a.createElement("div",{className:"container"},l.a.createElement("header",{className:"major"},l.a.createElement("h2",null,t.title)),l.a.createElement("p",{className:"centre-justified"},t.subTitle),l.a.createElement("section",{id:"content"},l.a.createElement("div",{className:"image fit"},l.a.createElement("img",{src:t.diagram,alt:""})),l.a.createElement("div",{id:"project-description",className:"row"},l.a.createElement("div",{dangerouslySetInnerHTML:{__html:t.description}})))))}function N(){return l.a.createElement("header",{id:"header"},l.a.createElement("h1",{id:"logo"},l.a.createElement(o.b,{to:"/"},"Srinivas Gopinath Parimi")))}function A(){return l.a.createElement("div",{id:"page-wrapper"},l.a.createElement(N,null),l.a.createElement(k,{id:"story1",title:"A telco gains 16% customer engagement with omni-digital",subTitle:"Digital sales and Proactive Customer care platform powered by Adobe Experience Cloud and AWS",diagram:w,description:'\n\t\t\t\t<h3>The next-gen telco</h3>\n\t\t\t\t<p>\n\t\t\t\t Customer experience today has moved beyond the immediate transaction. \n\t\t\t\t It is about the speed at which companies introduce new products, deliver value beyond competitive\n\t\t\t\t pricing, offer consistent experiences across channels, and build relationships for the long haul.\n\t\t\t\t</p>\n\t\t\t\t<p>\n\t\t\t\t A complete end-to-end experience spans across interaction channels such as print, web,\n\t\t\t\t mobile, call center etc. and comprises many micro touch points. \n\t\t\t\t A total experience is not about just one interaction, but about a sustained and consistent set of interactions \n\t\t\t\t that drive a positive customer experience.\n\t\t\t\t</p>\n <h3>Business Problem</h3>\n\t\t\t\t<ul style="text-align: left">\n\t\t\t\t\t<li>High costs of maintenance & support for multiple sites, technologies, different legacy back-end systems</li>\n\t\t\t\t\t<li>Low engagement on online channels - lower sales and more load on contact centre of inquiries</li>\n\t\t\t\t\t<li>High latency and service disruptions affecting customer engagement</li>\n\t\t\t\t\t<li>Low ROI on marketing and promotions.</li>\n\t\t\t\t\t<li>Dependence on IT process for content changes affecting marketing </li>\n </ul>\n\t\t\t\t<h3>Technical Solution</h3>\n <ul style="text-align: left">\n\t\t\t\t\t<li>AEM sites with centralized content management for all brands & LOBs</li>\n\t\t\t\t\t<li>AEM widgets for consistent user experiences across channels</li>\n\t\t\t\t\t<li>Multi channel campaigns and simplified User journeys</li>\n\t\t\t\t\t<li>Smart FAQs, Smart Product catalogue, Promotions, Offers</li>\n\t\t\t\t\t<li>A/B Testing, Multi-variate testing, Cross-sell, Up-sell, 360-degree analytics</li>\n </ul>\t\t\t\n\t\t\t\t<h3>Result Achieved</h3>\n <ul style="text-align: left">\n\t\t\t\t\t<li>16% Increase in use of online channels. </li>\n\t\t\t\t\t<li>Increased sales through customer self-service</li>\n\t\t\t\t\t<li>Faster acquisitions through Agent-driven sales and Store visits</li>\n\t\t\t\t\t<li>Cross-sell and Up-sell</li>\n\t\t\t\t<li>Reduced spend on Blanket Promotions and offers</li>\n </ul>\n\t\t\t\t'}),l.a.createElement(g,null))}var x=n.p+"44f677ffcb477273d92058e90dd11c30.png";function S(){return l.a.createElement("div",{id:"page-wrapper"},l.a.createElement(N,null),l.a.createElement(k,{id:"story1",title:"A university leads by innovative pedagogy and gamified learning",subTitle:"Enlightening of teaching and nurturing of talent facilitated by Azure, Angular, Blackboard, IDOL, LAMS and Mulesoft",diagram:x,description:'\n\t\t\t\t<h3>Digital Transformation of University Education</h3>\n\t\t\t\t<p>Today, Teaching and Learning moved beyond the classroom.</p>\n\t\t\t\t<p>Efficient University Education depends on these factors:</p>\n\t\t\t\t<ul style="text-align: left">\n\t\t\t\t <li>Innovative and futuristic learning driven by rich content and powered by Digital technology and tools</li>\n\t\t\t\t\t<li>Seamless integration of a multitude of contemporary and traditional learning systems into a unified, simplified and personalized eco-system</li>\n\t\t\t\t\t<li>Pedagogy and Multi-channel learning through versatile content authoring, course packaging and instruction delivery.</li>\n\t\t\t\t</ul>\n <h3>Business Problem</h3>\n\t\t\t\t<ul style="text-align: left">\n\t\t\t\t\t<li>Complicated and inflexible means of creating content and administering courses impacted overall performance.</li>\n\t\t\t\t\t<li>Ineffective means of providing relevant information at the right time to each student</li>\n\t\t\t\t\t<li>Insufficient insights into student segments and performance of courses made it difficult for the staff and the executive committee of the university to understand the effectiveness of a specific course, and to make course corrections.</li>\n\t\t\t\t\t<li>Disjoint systems and multiple data sources causing administrative overhead and limiting the ability to scale.</li>\n\t\t\t\t\t<li>Ad-hoc user interfaces with inconsistent experiences across devices and browsers.</li>\t\t\t\t\n </ul>\n\t\t\t\t<h3>Technical Solution</h3>\n \t <ul style="text-align: left">\n\t\t\t\t\t<li>Content authoring, course packaging and analytics using Blackboard and LAMS</li>\n\t\t\t\t\t<li>Gamified teaching and learning with social communities and blogs implemented using Angular, Mule ESB and MongoDB</li>\n\t\t\t\t\t<li>Cognitive search with natural language processing (NLP) and machine learning using IDOL</li>\n\t\t\t\t\t<li>Role based access and identity management using NetIQ, Shibboleth and Active Directory</li>\n </ul>\t\t\t\n\t\t\t\t<h3>Result Achieved</h3>\n <ul style="text-align: left">\n\t\t\t\t\t<li>‘One-University, One-eco-system’ experience for all users - Faculty, Students, Researchers, Guests, Partners and Affiliates</li>\n\t\t\t\t\t<li>‘Connected anywhere, connected anytime’ experience that allows users to seamlessly switch across devices and channels</li>\n\t\t\t\t\t<li>Scalability to support massive user base and high concurrency</li>\t\t\t\t\n </ul>\n\t\t\t\t'}),l.a.createElement(g,null))}var P=n.p+"d4fa14a6fa3816c84131da4d5f679b8f.png";function M(){return l.a.createElement("div",{id:"page-wrapper"},l.a.createElement(N,null),l.a.createElement(k,{id:"story3",title:"A bank mints profits for its customers through a smart trading solution",subTitle:"Kafka, Spring Boot, React and machine learning for profitable trading",diagram:P,description:'\n\t\t\t\t<h3>Smart Trading Platform</h3>\n\t\t\t\t<p>\n\t\t\t\t Microseconds matter in the constantly evolving technology landscape of stock trading! \n\t\t\t\t Profitability depends on efficient execution of trades while adhering to regulatory compliance\n\t\t\t\t</p>\n <h3>Business Goals</h3>\n\t\t\t\t<ul style="text-align: left">\n\t\t\t\t\t<li>Maximizing the profitability of trading transactions for the customers</li>\n\t\t\t\t\t<li>Protect the customer investments from domino effects of trading markets</li>\n\t\t\t\t\t<li>Regulatory compliance for all trades</li>\n </ul>\n\t\t\t\t<h3>Technical Solution</h3>\n <ul style="text-align: left">\n\t\t\t\t\t<li>Kafka streams for trade processing</li>\n\t\t\t\t\t<li>Adobe Analytics for real-time insights</li>\n\t\t\t\t\t<li>Microservices with Java and Spring Boot</li>\n\t\t\t\t\t<li>Hadoop datalake with machine learning models for trade data</li>\n\t\t\t\t\t<li>Splunk dashboard for real-time event monitoring</li>\n\t\t\t\t\t<li>User interface with React and AG-grid</li>\n </ul>\t\t\t\n\t\t\t\t<h3>Result Achieved</h3>\n <ul style="text-align: left">\n\t\t\t\t\t<li>Less than 30 seconds from initiation to completion of trade, along with regulatory compliance and validation of 200+ rules</li>\n\t\t\t\t\t<li>Visualisation of historic market data to help perform the right trade at the right time</li> \n\t\t\t\t\t<li>Intelligent Log Analytics to facilitate rapid response and recovery for security incidents and failures</li>\n </ul>\n\t\t\t\t'}),l.a.createElement(g,null))}var j=n.p+"5c6c3542c76249a2deaa79b227af33dd.png";function T(){return l.a.createElement("div",{id:"page-wrapper"},l.a.createElement(N,null),l.a.createElement(k,{id:"story4",title:"An online payments company spikes customer delight by 30% with smart queueing of support requests",subTitle:"AEM and Pega for smart queueing of payments and chargeback support requests",diagram:j,description:'\n\t\t\t\t<h3>Support at super scale for online payments</h3>\n\t\t\t\t<p>Trillions of dollars worth of online payments are made by millions of people every year</p>\n <p>The growing reach of on online payments had brought a host of trust and security issues.</p>\n <p>A successful model of online payments relies not only on the ease at which the transactions can be performed, \n but also on the comfort at which the customers can get issues resolved</p>\n <h3>Business Problem</h3>\n\t\t\t\t<ul style="text-align: left">\n\t\t\t\t\t<li>Exponential growth of call volumes and unavailability of help for vulnerable customers</li>\n\t\t\t\t\t<li>Increasing cyber fraud</li>\n\t\t\t\t\t<li>Insufficient insights leading to disengagement of specific segments of customers</li>\n </ul>\n\t\t\t\t<h3>Technical Solution</h3>\n \t <ul style="text-align: left">\n\t\t\t\t\t<li>IVR integration with Pega rules to automate the placement of requests into the right queue</li>\n\t\t\t\t\t<li>Micro-services in Publisher-subscriber model for scalable queue management</li>\n <li>AEM for document upload and verification workflows</li>\n <li>Machine learning on payment and support data to detect and thwart cyber fraud</li>\n </ul>\n\t\t\t\t<h3>Result Achieved</h3>\n <ul style="text-align: left">\n <li>30% reduction in the average time spent on call by customer</li>\n <li>30% improvement in the resolution of issues in the first call</li>\n <li>30% increase in the dedication of telephone channel to vulnerable customers</li>\n <li>30% growth in prevention of cyber fraud</li>\n </ul>\n\t\t\t\t'}),l.a.createElement(g,null))}function I(){return l.a.createElement(o.a,null,l.a.createElement(c,null),l.a.createElement(s.a,{exact:!0,path:"/",component:y}),l.a.createElement(s.a,{path:"/telco",component:A}),l.a.createElement(s.a,{path:"/edu",component:S}),l.a.createElement(s.a,{path:"/bank",component:M}),l.a.createElement(s.a,{path:"/payments",component:T}))}n(324),r.a.render(l.a.createElement(l.a.StrictMode,null,l.a.createElement(I,null)),document.getElementById("root"))}});
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvU2Nyb2xsVG9Ub3AudHN4Iiwid2VicGFjazovLy8uL3NyYy9kZXNpZ25zL2ltYWdlcy9oZXJvLnBuZyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9IZXJvLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9QYW1waGxldC50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvQmFubmVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9DYXJkcy50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2NvbXBvbmVudHMvRm9vdGVyLnRzeCIsIndlYnBhY2s6Ly8vLi9zcmMvZGVzaWducy9pbWFnZXMvdGVsY28uanBnIiwid2VicGFjazovLy8uL3NyYy9kZXNpZ25zL2ltYWdlcy91bml2ZXJzaXR5LmpwZyIsIndlYnBhY2s6Ly8vLi9zcmMvZGVzaWducy9pbWFnZXMvZG9sbGFycy5qcGciLCJ3ZWJwYWNrOi8vLy4vc3JjL2Rlc2lnbnMvaW1hZ2VzL3BheW1lbnRzLmpwZyIsIndlYnBhY2s6Ly8vLi9zcmMvcGFnZXMvSG9tZVBhZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9kZXNpZ25zL2ltYWdlcy90ZWxjby1kaWFncmFtLnBuZyIsIndlYnBhY2s6Ly8vLi9zcmMvY29tcG9uZW50cy9TdWNjZXNzU3RvcnkudHN4Iiwid2VicGFjazovLy8uL3NyYy9jb21wb25lbnRzL01lbnViYXIudHN4Iiwid2VicGFjazovLy8uL3NyYy9wYWdlcy9UZWxjb1BhZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9kZXNpZ25zL2ltYWdlcy9lZHUtZGlhZ3JhbS5wbmciLCJ3ZWJwYWNrOi8vLy4vc3JjL3BhZ2VzL0VkdVBhZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9kZXNpZ25zL2ltYWdlcy90cmFkaW5nLWRpYWdyYW0ucG5nIiwid2VicGFjazovLy8uL3NyYy9wYWdlcy9CYW5rUGFnZS50c3giLCJ3ZWJwYWNrOi8vLy4vc3JjL2Rlc2lnbnMvaW1hZ2VzL3BheW1lbnRzLWRpYWdyYW0ucG5nIiwid2VicGFjazovLy8uL3NyYy9wYWdlcy9QYXltZW50c1BhZ2UudHN4Iiwid2VicGFjazovLy8uL3NyYy9BcHAudHN4Iiwid2VicGFjazovLy8uL3NyYy9pbmRleC5qc3giXSwibmFtZXMiOlsid2VicGFja0pzb25wQ2FsbGJhY2siLCJkYXRhIiwibW9kdWxlSWQiLCJjaHVua0lkIiwiY2h1bmtJZHMiLCJtb3JlTW9kdWxlcyIsImV4ZWN1dGVNb2R1bGVzIiwiaSIsInJlc29sdmVzIiwibGVuZ3RoIiwiT2JqZWN0IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiaW5zdGFsbGVkQ2h1bmtzIiwicHVzaCIsIm1vZHVsZXMiLCJwYXJlbnRKc29ucEZ1bmN0aW9uIiwic2hpZnQiLCJkZWZlcnJlZE1vZHVsZXMiLCJhcHBseSIsImNoZWNrRGVmZXJyZWRNb2R1bGVzIiwicmVzdWx0IiwiZGVmZXJyZWRNb2R1bGUiLCJmdWxmaWxsZWQiLCJqIiwiZGVwSWQiLCJzcGxpY2UiLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwicyIsImluc3RhbGxlZE1vZHVsZXMiLCIwIiwiZXhwb3J0cyIsIm1vZHVsZSIsImwiLCJtIiwiYyIsImQiLCJuYW1lIiwiZ2V0dGVyIiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsInIiLCJTeW1ib2wiLCJ0b1N0cmluZ1RhZyIsInZhbHVlIiwidCIsIm1vZGUiLCJfX2VzTW9kdWxlIiwibnMiLCJjcmVhdGUiLCJrZXkiLCJiaW5kIiwibiIsIm9iamVjdCIsInByb3BlcnR5IiwicCIsImpzb25wQXJyYXkiLCJ3aW5kb3ciLCJvbGRKc29ucEZ1bmN0aW9uIiwic2xpY2UiLCJTY3JvbGxUb1RvcCIsInBhdGhuYW1lIiwidXNlTG9jYXRpb24iLCJ1c2VFZmZlY3QiLCJzY3JvbGxUbyIsIkhlcm8iLCJwcm9wcyIsImlkIiwiY2xhc3NOYW1lIiwic3JjIiwiSW1hZ2VTcmMiLCJhbHQiLCJQYW1waGxldCIsIkJhbm5lciIsInN0eWxlIiwidGhlbWUiLCJiYWNrZ3JvdW5kSW1hZ2UiLCJpbWFnZSIsInRpdGxlIiwic3ViVGl0bGUiLCJkYW5nZXJvdXNseVNldElubmVySFRNTCIsIl9faHRtbCIsImRlc2NyaXB0aW9uIiwidG8iLCJsaW5rIiwiQ2FyZHMiLCJ0YXJnZXQiLCJocmVmIiwiRm9vdGVyIiwiSG9tZVBhZ2UiLCJJbWcxIiwiSW1nMiIsIkltZzMiLCJJbWc0IiwiU3VjY2Vzc1N0b3J5IiwiZGlhZ3JhbSIsIk1lbnViYXIiLCJUZWxjb1BhZ2UiLCJEaWFncmFtIiwiRWR1UGFnZSIsIkJhbmtQYWdlIiwiUHBheW1lbnRzUGFnZSIsIkFwcCIsImV4YWN0IiwicGF0aCIsImNvbXBvbmVudCIsIlBheW1lbnRzUGFnZSIsInJlcXVpcmUiLCJSZWFjdERPTSIsInJlbmRlciIsIlN0cmljdE1vZGUiLCJkb2N1bWVudCIsImdldEVsZW1lbnRCeUlkIl0sIm1hcHBpbmdzIjoiYUFDRSxTQUFTQSxFQUFxQkMsR0FRN0IsSUFQQSxJQU1JQyxFQUFVQyxFQU5WQyxFQUFXSCxFQUFLLEdBQ2hCSSxFQUFjSixFQUFLLEdBQ25CSyxFQUFpQkwsRUFBSyxHQUlITSxFQUFJLEVBQUdDLEVBQVcsR0FDcENELEVBQUlILEVBQVNLLE9BQVFGLElBQ3pCSixFQUFVQyxFQUFTRyxHQUNoQkcsT0FBT0MsVUFBVUMsZUFBZUMsS0FBS0MsRUFBaUJYLElBQVlXLEVBQWdCWCxJQUNwRkssRUFBU08sS0FBS0QsRUFBZ0JYLEdBQVMsSUFFeENXLEVBQWdCWCxHQUFXLEVBRTVCLElBQUlELEtBQVlHLEVBQ1pLLE9BQU9DLFVBQVVDLGVBQWVDLEtBQUtSLEVBQWFILEtBQ3BEYyxFQUFRZCxHQUFZRyxFQUFZSCxJQUtsQyxJQUZHZSxHQUFxQkEsRUFBb0JoQixHQUV0Q08sRUFBU0MsUUFDZEQsRUFBU1UsT0FBVFYsR0FPRCxPQUhBVyxF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SUMsVUFBV2hCLElBQ2pDLGtCQUFDLElBQUQsQ0FBT2UsS0FBSyxTQUFTQyxVQUFXUixJQUNoQyxrQkFBQyxJQUFELENBQU9PLEtBQUssT0FBT0MsVUFBV04sSUFDOUIsa0JBQUMsSUFBRCxDQUFPSyxLQUFLLFFBQVFDLFVBQVdMLElBQy9CLGtCQUFDLElBQUQsQ0FBT0ksS0FBSyxZQUFZQyxVQUFXQyxLQ2pCL0NDLEVBQVEsS0FLUkMsSUFBU0MsT0FDUCxrQkFBQyxJQUFNQyxXQUFQLEtBQ0ksa0JBQUNSLEVBQUQsT0FFSlMsU0FBU0MsZUFBZSIsImZpbGUiOiJtYWluLmpzIiwic291cmNlc0NvbnRlbnQiOlsiIFx0Ly8gaW5zdGFsbCBhIEpTT05QIGNhbGxiYWNrIGZvciBjaHVuayBsb2FkaW5nXG4gXHRmdW5jdGlvbiB3ZWJwYWNrSnNvbnBDYWxsYmFjayhkYXRhKSB7XG4gXHRcdHZhciBjaHVua0lkcyA9IGRhdGFbMF07XG4gXHRcdHZhciBtb3JlTW9kdWxlcyA9IGRhdGFbMV07XG4gXHRcdHZhciBleGVjdXRlTW9kdWxlcyA9IGRhdGFbMl07XG5cbiBcdFx0Ly8gYWRkIFwibW9yZU1vZHVsZXNcIiB0byB0aGUgbW9kdWxlcyBvYmplY3QsXG4gXHRcdC8vIHRoZW4gZmxhZyBhbGwgXCJjaHVua0lkc1wiIGFzIGxvYWRlZCBhbmQgZmlyZSBjYWxsYmFja1xuIFx0XHR2YXIgbW9kdWxlSWQsIGNodW5rSWQsIGkgPSAwLCByZXNvbHZlcyA9IFtdO1xuIFx0XHRmb3IoO2kgPCBjaHVua0lkcy5sZW5ndGg7IGkrKykge1xuIFx0XHRcdGNodW5rSWQgPSBjaHVua0lkc1tpXTtcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSAmJiBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0pIHtcbiBcdFx0XHRcdHJlc29sdmVzLnB1c2goaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdWzBdKTtcbiBcdFx0XHR9XG4gXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gMDtcbiBcdFx0fVxuIFx0XHRmb3IobW9kdWxlSWQgaW4gbW9yZU1vZHVsZXMpIHtcbiBcdFx0XHRpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuIFx0XHRcdFx0bW9kdWxlc1ttb2R1bGVJZF0gPSBtb3JlTW9kdWxlc1ttb2R1bGVJZF07XG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGlmKHBhcmVudEpzb25wRnVuY3Rpb24pIHBhcmVudEpzb25wRnVuY3Rpb24oZGF0YSk7XG5cbiBcdFx0d2hpbGUocmVzb2x2ZXMubGVuZ3RoKSB7XG4gXHRcdFx0cmVzb2x2ZXMuc2hpZnQoKSgpO1xuIFx0XHR9XG5cbiBcdFx0Ly8gYWRkIGVudHJ5IG1vZHVsZXMgZnJvbSBsb2FkZWQgY2h1bmsgdG8gZGVmZXJyZWQgbGlzdFxuIFx0XHRkZWZlcnJlZE1vZHVsZXMucHVzaC5hcHBseShkZWZlcnJlZE1vZHVsZXMsIGV4ZWN1dGVNb2R1bGVzIHx8IFtdKTtcblxuIFx0XHQvLyBydW4gZGVmZXJyZWQgbW9kdWxlcyB3aGVuIGFsbCBjaHVua3MgcmVhZHlcbiBcdFx0cmV0dXJuIGNoZWNrRGVmZXJyZWRNb2R1bGVzKCk7XG4gXHR9O1xuIFx0ZnVuY3Rpb24gY2hlY2tEZWZlcnJlZE1vZHVsZXMoKSB7XG4gXHRcdHZhciByZXN1bHQ7XG4gXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBkZWZlcnJlZE1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiBcdFx0XHR2YXIgZGVmZXJyZWRNb2R1bGUgPSBkZWZlcnJlZE1vZHVsZXNbaV07XG4gXHRcdFx0dmFyIGZ1bGZpbGxlZCA9IHRydWU7XG4gXHRcdFx0Zm9yKHZhciBqID0gMTsgaiA8IGRlZmVycmVkTW9kdWxlLmxlbmd0aDsgaisrKSB7XG4gXHRcdFx0XHR2YXIgZGVwSWQgPSBkZWZlcnJlZE1vZHVsZVtqXTtcbiBcdFx0XHRcdGlmKGluc3RhbGxlZENodW5rc1tkZXBJZF0gIT09IDApIGZ1bGZpbGxlZCA9IGZhbHNlO1xuIFx0XHRcdH1cbiBcdFx0XHRpZihmdWxmaWxsZWQpIHtcbiBcdFx0XHRcdGRlZmVycmVkTW9kdWxlcy5zcGxpY2UoaS0tLCAxKTtcbiBcdFx0XHRcdHJlc3VsdCA9IF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gZGVmZXJyZWRNb2R1bGVbMF0pO1xuIFx0XHRcdH1cbiBcdFx0fVxuXG4gXHRcdHJldHVybiByZXN1bHQ7XG4gXHR9XG5cbiBcdC8vIFRoZSBtb2R1bGUgY2FjaGVcbiBcdHZhciBpbnN0YWxsZWRNb2R1bGVzID0ge307XG5cbiBcdC8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4gXHQvLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbiBcdC8vIFByb21pc2UgPSBjaHVuayBsb2FkaW5nLCAwID0gY2h1bmsgbG9hZGVkXG4gXHR2YXIgaW5zdGFsbGVkQ2h1bmtzID0ge1xuIFx0XHQwOiAwXG4gXHR9O1xuXG4gXHR2YXIgZGVmZXJyZWRNb2R1bGVzID0gW107XG5cbiBcdC8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG4gXHRmdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cbiBcdFx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG4gXHRcdGlmKGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdKSB7XG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG4gXHRcdH1cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGdldHRlciB9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuIFx0XHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcbiBcdFx0fVxuIFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuIFx0fTtcblxuIFx0Ly8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4gXHQvLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbiBcdC8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuIFx0Ly8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4gXHQvLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuIFx0XHRpZihtb2RlICYgMSkgdmFsdWUgPSBfX3dlYnBhY2tfcmVxdWlyZV9fKHZhbHVlKTtcbiBcdFx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcbiBcdFx0aWYoKG1vZGUgJiA0KSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICYmIHZhbHVlLl9fZXNNb2R1bGUpIHJldHVybiB2YWx1ZTtcbiBcdFx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcbiBcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG5zLCAnZGVmYXVsdCcsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlIH0pO1xuIFx0XHRpZihtb2RlICYgMiAmJiB0eXBlb2YgdmFsdWUgIT0gJ3N0cmluZycpIGZvcih2YXIga2V5IGluIHZhbHVlKSBfX3dlYnBhY2tfcmVxdWlyZV9fLmQobnMsIGtleSwgZnVuY3Rpb24oa2V5KSB7IHJldHVybiB2YWx1ZVtrZXldOyB9LmJpbmQobnVsbCwga2V5KSk7XG4gXHRcdHJldHVybiBucztcbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdHZhciBqc29ucEFycmF5ID0gd2luZG93W1wid2VicGFja0pzb25wXCJdID0gd2luZG93W1wid2VicGFja0pzb25wXCJdIHx8IFtdO1xuIFx0dmFyIG9sZEpzb25wRnVuY3Rpb24gPSBqc29ucEFycmF5LnB1c2guYmluZChqc29ucEFycmF5KTtcbiBcdGpzb25wQXJyYXkucHVzaCA9IHdlYnBhY2tKc29ucENhbGxiYWNrO1xuIFx0anNvbnBBcnJheSA9IGpzb25wQXJyYXkuc2xpY2UoKTtcbiBcdGZvcih2YXIgaSA9IDA7IGkgPCBqc29ucEFycmF5Lmxlbmd0aDsgaSsrKSB3ZWJwYWNrSnNvbnBDYWxsYmFjayhqc29ucEFycmF5W2ldKTtcbiBcdHZhciBwYXJlbnRKc29ucEZ1bmN0aW9uID0gb2xkSnNvbnBGdW5jdGlvbjtcblxuXG4gXHQvLyBhZGQgZW50cnkgbW9kdWxlIHRvIGRlZmVycmVkIGxpc3RcbiBcdGRlZmVycmVkTW9kdWxlcy5wdXNoKFsxMzcsMV0pO1xuIFx0Ly8gcnVuIGRlZmVycmVkIG1vZHVsZXMgd2hlbiByZWFkeVxuIFx0cmV0dXJuIGNoZWNrRGVmZXJyZWRNb2R1bGVzKCk7XG4iLCJpbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcIlxyXG5pbXBvcnQgeyB1c2VMb2NhdGlvbiB9IGZyb20gXCJyZWFjdC1yb3V0ZXItZG9tXCJcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFNjcm9sbFRvVG9wKCkge1xyXG4gICAgY29uc3QgeyBwYXRobmFtZSB9ID0gdXNlTG9jYXRpb24oKVxyXG4gICAgdXNlRWZmZWN0KCgpID0+IHtcclxuICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMClcclxuICAgIH0sIFtwYXRobmFtZV0pXHJcbiAgcmV0dXJuIG51bGxcclxufSIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCI3MDU0ZjgwZDFkNGVlOTU3ZTEwMzQwZDVlOWIxOWY0Yy5wbmdcIjsiLCJpbXBvcnQgUmVhY3QsIHtGdW5jdGlvbkNvbXBvbmVudH0gZnJvbSAncmVhY3QnXHJcbmltcG9ydCBJbWFnZVNyYyBmcm9tIFwiLi4vZGVzaWducy9pbWFnZXMvaGVyby5wbmdcIlxyXG5jb25zdCBIZXJvIDogRnVuY3Rpb25Db21wb25lbnQgPSAocHJvcHMpID0+IChcclxuICAgIDxzZWN0aW9uIGlkPVwiYmFubmVyXCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50XCI+XHJcbiAgICAgICAgICAgIDxoZWFkZXI+XHJcbiAgICAgICAgICAgICAgICA8aDI+U3Jpbml2YXMgR29waW5hdGggUGFyaW1pPC9oMj5cclxuICAgICAgICAgICAgICAgIDxwPkRpZ2l0YWwgdGVjaG5vbG9neSBsZWFkZXIgPC9wPlxyXG4gICAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaW1hZ2VcIj48aW1nIHNyYz17SW1hZ2VTcmN9IGFsdD1cIlNyaW5pdmFzIEdvcGluYXRoXCIgLz48L3NwYW4+XHJcbiAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cInJvdyBoZWFkbGluZVwiPlRyYW5zZm9ybWluZyBidXNpbmVzc2VzIHVzaW5nIEFJLCBCbG9jayBjaGFpbiwgQ2xvdWQgYW5kIERhdGEgc2NpZW5jZTwvcD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvc2VjdGlvbj5cclxuKVxyXG5leHBvcnQgZGVmYXVsdCBIZXJvIiwiaW1wb3J0IFJlYWN0LCB7RnVuY3Rpb25Db21wb25lbnR9IGZyb20gJ3JlYWN0J1xyXG5cclxuY29uc3QgUGFtcGhsZXQgOiBGdW5jdGlvbkNvbXBvbmVudCA9ICgpID0+IChcclxuICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGVudCBoaWdobGlnaHQtYm94XCI+XHJcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXIgcGFtcGhsZXRcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLTQgY29sLTEyLW1lZGl1bVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoZWFkZXI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMj4yMCB5ZWFycyBvZiBleHBlcmllbmNlPC9oMj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+MTAwKyBzdWNjZXNzZnVsIHByb2plY3RzPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImNvbC00IGNvbC0xMi1tZWRpdW1cIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGk+VXBsaWZ0ZWQgZGlnaXRhbCBzYWxlcyBhbmQgcHJvZml0cyBmb3IgMzArIGJyYW5kczwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpPktub3duIGZvciBpbm5vdmF0aW9uIGFuZCBvcG5lc291cmNlIGNvbnRyaWJ1dGlvbjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29sLTQgY29sLTEyLW1lZGl1bVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaT5Ta2lsZnVsIG9uIEFFTSwgSmF2YSwgVHlwZXNjcmlwdCwgQW5ndWxhciwgUmVhY3QsIFB5dGhvbiwgQVdTLCBBenVyZSwgR0NQPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGk+TWVudG9yIGFuZCB0ZWNobm9sb2d5IHR1dG9yIHdpdGggOC44IG1pbGxpb24gc3Vic2NyaWJlcnMgb24gU3RhY2sgT3ZlcmZsb3cgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4pXHJcbmV4cG9ydCBkZWZhdWx0IFBhbXBobGV0IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xyXG5pbXBvcnQge0xpbmt9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nXHJcblxyXG50eXBlIFByb3BzVHlwZSA9IHtcclxuICAgIGlkOiBzdHJpbmcsXHJcbiAgICB0aGVtZTogc3RyaW5nLFxyXG4gICAgYmFja2dyb3VuZEltYWdlOiBhbnksXHJcbiAgICBpbWFnZTogYW55LFxyXG4gICAgdGl0bGU6IHN0cmluZyxcclxuICAgIHN1YlRpdGxlOiBzdHJpbmcsXHJcbiAgICBkZXNjcmlwdGlvbjogYW55LFxyXG4gICAgbGluazogc3RyaW5nXHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEJhbm5lcihwcm9wczogUHJvcHNUeXBlKSB7XHJcbiAgICBsZXQgc3R5bGUgPSBcInNwb3RsaWdodCBzdHlsZTIgcmlnaHRcIlxyXG4gICAgaWYgKHByb3BzLnRoZW1lID09PSBcImxlZnRcIikge1xyXG4gICAgICAgIHN0eWxlID0gXCJzcG90bGlnaHQgc3R5bGUzIGxlZnRcIlxyXG4gICAgfVxyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8c2VjdGlvbiBpZD17cHJvcHMuaWR9IGNsYXNzTmFtZT17c3R5bGV9IHN0eWxlPXt7YmFja2dyb3VuZEltYWdlOiBgdXJsKCR7cHJvcHMuYmFja2dyb3VuZEltYWdlfSlgfX0+XHJcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImltYWdlIGZpdCBtYWluXCI+PGltZyBzcmM9e3Byb3BzLmltYWdlfSBhbHQ9XCJcIiAvPjwvc3Bhbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250ZW50XCI+XHJcbiAgICAgICAgICAgICAgICA8aGVhZGVyPlxyXG4gICAgICAgICAgICAgICAgICAgIDxoMj57cHJvcHMudGl0bGV9PC9oMj5cclxuICAgICAgICAgICAgICAgICAgICA8cD57cHJvcHMuc3ViVGl0bGV9PC9wPlxyXG4gICAgICAgICAgICAgICAgPC9oZWFkZXI+XHJcbiAgICAgICAgICAgICAgICA8cD5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGRhbmdlcm91c2x5U2V0SW5uZXJIVE1MPXt7X19odG1sOiBwcm9wcy5kZXNjcmlwdGlvbn19PjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9wPlxyXG4gICAgICAgICAgICAgICAgPHVsIGNsYXNzTmFtZT1cImFjdGlvbnNcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGk+PExpbmsgdG89e3Byb3BzLmxpbmt9IGNsYXNzTmFtZT1cImJ1dHRvblwiPkxlYXJuIE1vcmU8L0xpbms+PC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvc2VjdGlvbj5cclxuICAgIClcclxufSIsImltcG9ydCBSZWFjdCwge0Z1bmN0aW9uQ29tcG9uZW50fSBmcm9tICdyZWFjdCdcclxuY29uc3QgQ2FyZHMgOiBGdW5jdGlvbkNvbXBvbmVudCA9ICgpID0+IChcclxuICAgIDxzZWN0aW9uIGlkPVwiZm91clwiIGNsYXNzTmFtZT1cIndyYXBwZXIgc3R5bGUxIHNwZWNpYWwgZmFkZS11cFwiPlxyXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWFqb3JcIj5cclxuICAgICAgICAgICAgICAgIDxoMj5BY2NvbXBsaXNobWVudHM8L2gyPlxyXG4gICAgICAgICAgICAgICAgPHA+UHJvamVjdHMgYW5kIGNvbnRyaWJ1dGlvbnM8L3A+XHJcbiAgICAgICAgICAgIDwvaGVhZGVyPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImJveCBhbHRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwicm93IGd0ci11bmlmb3JtXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwiY29sLTQgY29sLTYtbWVkaXVtIGNvbC0xMi14c21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaWNvbiBzb2xpZCBhbHQgbWFqb3IgZmEtY2hhcnQtYXJlYVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzPmp3dC1zcHJpbmctYm9vdDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlNlY3VyaW5nIFNwcmluZyBCb290IE1pY3Jvc2VydmljZXMgd2l0aCBKU09OIFdlYiBUb2tlbnMgKEpXVCk8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cImNvbC00IGNvbC02LW1lZGl1bSBjb2wtMTIteHNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImljb24gc29saWQgYWx0IG1ham9yIGZhLWNvbW1lbnRcIj48L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxoMz5hZW0tcmVhY3RqczwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkFFTSA2LjUgd2l0aCBTaW5nbGUgUGFnZSBBcHBzIGluIFJlYWN0SlM8L3A+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzTmFtZT1cImNvbC00IGNvbC02LW1lZGl1bSBjb2wtMTIteHNtYWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImljb24gc29saWQgYWx0IG1ham9yIGZhLWZsYXNrXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+U25tcEFnZW50U2ltdWxhdG9yPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+U2ltdWxhdGUgdGhvdXNhbmRzIG9mIFNOTVAgbmV0d29yayBub2RlcyBmcm9tIGEgc2luZ2xlIFBDPC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJjb2wtNCBjb2wtNi1tZWRpdW0gY29sLTEyLXhzbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpY29uIHNvbGlkIGFsdCBtYWpvciBmYS1wYXBlci1wbGFuZVwiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzPmthZmthLXdlYnNvY2tldDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPlN0cmVhbSBkYXRhIGZyb20ga2Fma2EgdG8gYnJvd3NlciB2aWEgd2Vic29ja2V0PC9wPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvc2VjdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICA8c2VjdGlvbiBjbGFzc05hbWU9XCJjb2wtNCBjb2wtNi1tZWRpdW0gY29sLTEyLXhzbWFsbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJpY29uIHNvbGlkIGFsdCBtYWpvciBmYS1maWxlXCI+PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aDM+ZmFzdGVzdDwvaDM+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwPkF1dG9tYXRlIHlvdXIgc29mdHdhcmUgdGVzdGluZywgdGhlIGZhc3Rlc3Qgd2F5ITwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3NOYW1lPVwiY29sLTQgY29sLTYtbWVkaXVtIGNvbC0xMi14c21hbGxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwiaWNvbiBzb2xpZCBhbHQgbWFqb3IgZmEtbG9ja1wiPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGgzPmVkaXRhYmxlLXVpPC9oMz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHA+RWRpdGFibGUgY29tcG9uZW50cyBpbiBSZWFjdDwvcD5cclxuICAgICAgICAgICAgICAgICAgICA8L3NlY3Rpb24+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxmb290ZXIgY2xhc3NOYW1lPVwibWFqb3JcIj5cclxuICAgICAgICAgICAgICAgIDx1bCBjbGFzc05hbWU9XCJhY3Rpb25zIHNwZWNpYWxcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGk+PGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cImh0dHBzOi8vZ2l0aHViLmNvbS9kZWFyZ29waW5hdGhcIiBjbGFzc05hbWU9XCJidXR0b25cIj5MZWFybiBtb3JlPC9hPjwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgICAgICA8L2Zvb3Rlcj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvc2VjdGlvbj5cclxuKVxyXG5leHBvcnQgZGVmYXVsdCBDYXJkcyIsImltcG9ydCBSZWFjdCwge0Z1bmN0aW9uQ29tcG9uZW50fSBmcm9tICdyZWFjdCdcclxuXHJcbmNvbnN0IEZvb3RlciA6IEZ1bmN0aW9uQ29tcG9uZW50ID0gKCkgPT4gKFxyXG5cdDxmb290ZXIgaWQ9XCJmb290ZXJcIj5cclxuICAgICAgICA8dWwgY2xhc3NOYW1lPVwiaWNvbnNcIj5cclxuICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAgPGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cImh0dHBzOi8vdHdpdHRlci5jb20vR1BhcmltaVwiIGNsYXNzTmFtZT1cImljb24gYnJhbmRzIGFsdCBmYS10d2l0dGVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibGFiZWxcIj5Ud2l0dGVyPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS91c2Vycy82NTcxMTY1L2dvcGluYXRoXCIgY2xhc3NOYW1lPVwiaWNvbiBicmFuZHMgYWx0IGZhYiBmYS1zdGFjay1vdmVyZmxvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT1cImxhYmVsXCI+U3RhY2sgT3ZlcmZsb3c8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2E+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaT5cclxuICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIGhyZWY9XCJodHRwczovL3d3dy5saW5rZWRpbi5jb20vaW4vc3Jpbml2YXMtZ29waW5hdGgtcGFyaW1pLTQxM2E3NzEzXCIgY2xhc3NOYW1lPVwiaWNvbiBicmFuZHMgYWx0IGZhLWxpbmtlZGluLWluXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwibGFiZWxcIj5MaW5rZWRJbjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAgPGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cImh0dHBzOi8vZHpvbmUuY29tL3VzZXJzLzMxMjAzNzMvZGVhcmdvcGluYXRoLmh0bWxcIiBjbGFzc05hbWU9XCJpY29uIGJyYW5kcyBhbHQgZmFzIGZhLWJsb2dnZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsYWJlbFwiPkRab25lPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8bGk+XHJcbiAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XCJfYmxhbmtcIiBocmVmPVwiaHR0cHM6Ly9naXRodWIuY29tL2RlYXJnb3BpbmF0aFwiIGNsYXNzTmFtZT1cImljb24gYnJhbmRzIGFsdCBmYS1naXRodWJcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsYWJlbFwiPkdpdEh1Yjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpPlxyXG4gICAgICAgICAgICAgICAgPGEgdGFyZ2V0PVwiX2JsYW5rXCIgaHJlZj1cIm1haWx0bzpkZWFyZ29waW5hdGhAZ21haWwuY29tXCIgY2xhc3NOYW1lPVwiaWNvbiBzb2xpZCBhbHQgZmEtZW52ZWxvcGVcIj5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJsYWJlbFwiPkVtYWlsPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICAgICAgPHVsIGNsYXNzTmFtZT1cImNvcHlyaWdodFwiPlxyXG4gICAgICAgICAgICA8bGk+JmNvcHk7IDIwMjA8L2xpPjxsaT5TcmluaXZhcyBHb3BpbmF0aCBQYXJpbWk8L2xpPlxyXG4gICAgICAgIDwvdWw+XHJcbiAgICA8L2Zvb3Rlcj5cclxuKVxyXG5leHBvcnQgZGVmYXVsdCBGb290ZXIiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiZjQ4MjE0NWFhYjQxYzA3Njk5YzQyYzA3NDNkYmRmYTUuanBnXCI7IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcIjE3YTg3ODJhOWEyNWRhNDdlNWM2ZjQzNjIwYWU1NzlkLmpwZ1wiOyIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCIwNTk2NThmYTRkODgyOGZkNDg0OWM2OGQ4ZDkxYjJkNy5qcGdcIjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiMTAyYjBiYWY2OGRhZWE0MDg0YjUxYjJjNWE1NjMxYWIuanBnXCI7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xyXG5pbXBvcnQgSGVybyBmcm9tIFwiLi4vY29tcG9uZW50cy9IZXJvXCJcclxuaW1wb3J0IFBhbXBobGV0IGZyb20gXCIuLi9jb21wb25lbnRzL1BhbXBobGV0XCJcclxuaW1wb3J0IEJhbm5lciBmcm9tIFwiLi4vY29tcG9uZW50cy9CYW5uZXJcIlxyXG5pbXBvcnQgQ2FyZHMgZnJvbSBcIi4uL2NvbXBvbmVudHMvQ2FyZHNcIlxyXG5pbXBvcnQgRm9vdGVyIGZyb20gXCIuLi9jb21wb25lbnRzL0Zvb3RlclwiXHJcbmltcG9ydCBJbWcxIGZyb20gXCIuLi9kZXNpZ25zL2ltYWdlcy90ZWxjby5qcGdcIlxyXG5pbXBvcnQgSW1nMiBmcm9tIFwiLi4vZGVzaWducy9pbWFnZXMvdW5pdmVyc2l0eS5qcGdcIlxyXG5pbXBvcnQgSW1nMyBmcm9tIFwiLi4vZGVzaWducy9pbWFnZXMvZG9sbGFycy5qcGdcIlxyXG5pbXBvcnQgSW1nNCBmcm9tIFwiLi4vZGVzaWducy9pbWFnZXMvcGF5bWVudHMuanBnXCJcclxuXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBIb21lUGFnZSgpIHtcclxuICAgIHJldHVybiAoXHJcblx0XHQ8ZGl2IGlkPVwicGFnZS13cmFwcGVyXCI+XHJcblx0XHQ8SGVybyAvPlxyXG5cdFx0PFBhbXBobGV0IC8+XHJcblx0XHQ8QmFubmVyIGlkPVwiYmFubmVyMVwiIHRoZW1lPVwicmlnaHRcIiBiYWNrZ3JvdW5kSW1hZ2U9e0ltZzF9IGltYWdlPXtJbWcxfSBcclxuXHRcdFx0dGl0bGU9XCJBIHRlbGNvIGdhaW5zIDE2JSBjdXN0b21lciBlbmdhZ2VtZW50IHdpdGggb21uaS1kaWdpdGFsXCJcclxuXHRcdFx0c3ViVGl0bGU9XCJEaWdpdGFsIHNhbGVzIGFuZCBwcm9hY3RpdmUgY2FyZSB1c2luZyBBZG9iZSBFeHBlcmllbmNlIE1hbmFnZXIgYW5kIEFXU1wiXHJcblx0XHRcdGRlc2NyaXB0aW9uPXtgXHJcblx0XHRcdFx0PHVsIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiPlxyXG5cdFx0XHRcdCAgPGxpPlxyXG5cdFx0XHRcdCAgICBQZXJzb25hbGl6ZWQgZXhwZXJpZW5jZXMgYW5kIHRhcmdldGVkIGNhbXBhaWducyBhY3Jvc3MgYnJhbmRzIGFuZCBnZW9ncmFwaGllc1xyXG5cdFx0XHRcdCAgPC9saT5cclxuXHRcdFx0XHQgIDxsaT5cclxuXHRcdFx0XHQgICAgUmVhbC10aW1lIHByb2R1Y3QgcmVzZXJ2YXRpb25zIGFuZCBzdG9yZS1waWNrdXAgc2VydmljZVxyXG5cdFx0XHRcdCAgPC9saT5cclxuXHRcdFx0XHQgIDxsaT5cclxuXHRcdFx0XHQgICAgQ3VzdG9tZXIgc2VsZi1zZXJ2aWNlIGFzc2lzdGVkIGJ5IEFJIGNoYXRib3RcclxuXHRcdFx0XHQgIDwvbGk+XHJcblx0XHRcdFx0ICA8bGk+XHJcblx0XHRcdFx0ICAgIEF1dG8tc2NhbGluZyB0byBzdXBwb3J0IHBlYWsgdHJhZmZpYyBwZXJpb2RzIGFuZCBzcGVjaWFsIGV2ZW50c1xyXG5cdFx0XHRcdCAgPC9saT5cclxuXHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHRcdGB9XHJcblx0XHRcdGxpbms9XCIvdGVsY29cIiBcclxuXHRcdC8+XHJcblx0XHQ8QmFubmVyIGlkPVwiYmFubmVyMlwiIHRoZW1lPVwibGVmdFwiIGJhY2tncm91bmRJbWFnZT17SW1nMn0gaW1hZ2U9e0ltZzJ9IFxyXG5cdFx0XHR0aXRsZT1cIkEgdW5pdmVyc2l0eSBsZWFkcyBieSBpbm5vdmF0aXZlIHBlZGFnb2d5IGFuZCBnYW1pZmllZCBsZWFybmluZ1wiXHJcblx0XHRcdHN1YlRpdGxlPVwiRW5saWdodGVuaW5nIG9mIHRlYWNoaW5nIGFuZCBudXJ0dXJpbmcgb2YgdGFsZW50IGZhY2lsaXRhdGVkIGJ5IEF6dXJlLCBBbmd1bGFyLCBCbGFja2JvYXJkLCBJRE9MLCBMQU1TIGFuZCBNdWxlc29mdFwiXHJcblx0XHRcdGRlc2NyaXB0aW9uPXtgXHJcblx0XHRcdFx0PHVsIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiPlxyXG5cdFx0XHRcdCAgPGxpPlxyXG5cdFx0XHRcdCAgICBBZGFwdGl2ZSB1c2VyIGludGVyZmFjZSBmb3IgYSDigJhjb25uZWN0ZWQgYW55d2hlcmUsIGNvbm5lY3RlZCBhbnl0aW1l4oCZIGV4cGVyaWVuY2VcclxuXHRcdFx0XHQgIDwvbGk+XHJcblx0XHRcdFx0ICA8bGk+XHJcblx0XHRcdFx0ICAgIFZlcnNhdGlsZSBjb250ZW50IGF1dGhvcmluZywgY291cnNlIHBhY2thZ2luZyBhbmQgaW5zdHJ1Y3Rpb24gZGVsaXZlcnlcclxuXHRcdFx0XHQgIDwvbGk+XHJcblx0XHRcdFx0ICA8bGk+XHJcblx0XHRcdFx0ICAgIEFjdGlvbmFibGUgaW5zaWdodHMgZm9yIGZhY3VsdHkgYW5kIHN0dWRlbnRzXHJcblx0XHRcdFx0ICA8L2xpPlxyXG5cdFx0XHRcdCAgPGxpPlxyXG5cdFx0XHRcdCAgICBDb2duaXRpdmUgc2VhcmNoIGZvciBhdWRpb3Zpc3VhbCBjb250ZW50XHJcblx0XHRcdFx0ICA8L2xpPlxyXG5cdFx0XHRcdDwvdWw+XHJcblx0XHRcdGB9XHJcblx0XHRcdGxpbms9XCIvZWR1XCJcclxuXHRcdC8+XHJcblx0XHQ8QmFubmVyIGlkPVwiYmFubmVyM1wiIHRoZW1lPVwicmlnaHRcIiBiYWNrZ3JvdW5kSW1hZ2U9e0ltZzN9IGltYWdlPXtJbWczfSBcclxuXHRcdFx0dGl0bGU9XCJBIGJhbmsgcmVhcHMgcHJvZml0cyBmb3IgaXRzIGN1c3RvbWVycyB3aXRoIGFuIGludGVsbGlnZW50IHRyYWRpbmcgc29sdXRpb25cIlxyXG5cdFx0XHRzdWJUaXRsZT1cIkthZmthLCBTcHJpbmcgQm9vdCBhbmQgUmVhY3QgZm9yIHByb2ZpdGFibGUgdHJhZGluZ1wiXHJcblx0XHRcdGRlc2NyaXB0aW9uPXtgXHJcblx0XHRcdFx0PHVsIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiPlxyXG5cdFx0XHRcdCAgPGxpPlxyXG5cdFx0XHRcdCAgICAgIFNlbGVjdGlvbiBvZiB0aGUgYmVzdCB0cmFkaW5nIHZlbnVlIGZvciB0aGUgZ2l2ZW4gcHJpY2UsIHZvbHVtZSBhbmQgZnJlcXVlbmN5XHJcblx0XHRcdFx0ICA8L2xpPlxyXG5cdFx0XHRcdCAgPGxpPlxyXG5cdFx0XHRcdCAgICAgIFJlYWwtdGltZSByZWNvcmRpbmcgYW5kIGRpc2Nsb3N1cmUgb2YgUHJlLXRyYWRlIGFuZCBwb3N0LXRyYWRlIGFjdGl2aXRpZXMgZm9yIHJlZ3VsYXRvcnkgY29tcGxpYW5jZVxyXG5cdFx0XHRcdCAgPC9saT5cclxuXHRcdFx0XHQgIDxsaT5cclxuXHRcdFx0XHQgICAgICBQZXJzb25hbGlzZWQgbWFya2V0IGluc2lnaHRzIHRvIGhlbHAgY3VzdG9tZXJzIG1ha2UgaW5mb3JtZWQgZGVjaXNpb25zIHdpdGggY29uZmlkZW5jZVxyXG5cdFx0XHRcdCAgPC9saT5cclxuXHRcdFx0XHQ8L3VsPlxyXG5cdFx0XHRcdGB9XHJcblx0XHRcdGxpbms9XCIvYmFua1wiIFxyXG5cdFx0Lz5cclxuXHRcdDxCYW5uZXIgaWQ9XCJiYW5uZXI0XCIgdGhlbWU9XCJsZWZ0XCIgYmFja2dyb3VuZEltYWdlPXtJbWc0fSBpbWFnZT17SW1nNH0gXHJcblx0XHRcdHRpdGxlPVwiU21hcnQgcXVldWVpbmcgYm9vc3RzIGN1c3RvbWVyIGRlbGlnaHQgYnkgMzAlIGZvciBhbiBvbmxpbmUgcGF5bWVudHMgY29tcGFueVwiXHJcblx0XHRcdHN1YlRpdGxlPVwiQUVNLCBQZWdhIGFuZCBKYXZhIG1pY3JvLXNlcnZpY2VzIGZvciBzdXBwb3J0aW5nIHBheW1lbnRzIGFuZCBjaGFyZ2ViYWNrc1wiXHJcblx0XHRcdGRlc2NyaXB0aW9uPXtgXHJcblx0XHRcdFx0PHVsIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiPlxyXG5cdFx0XHQgICAgXHQ8bGk+MzAlIGN1dCBpbiB0aGUgYXZlcmFnZSBjYWxsIHRpbWU8L2xpPlxyXG5cdFx0ICAgIFx0XHQ8bGk+MzAlIG1vcmUgaXNzdWVzIGdldCByZXNvbHZlZCBvbiBmaXJzdCBjYWxsPC9saT5cclxuXHQgICAgXHRcdFx0PGxpPjMwJSBtb3JlIGVuZ2FnZW1lbnQgb2YgdGVsZXBob25lIGZvciB2dWxuZXJhYmxlIGN1c3RvbWVyczwvbGk+XHJcbiAgICBcdFx0XHRcdDxsaT4zMCUgZ3Jvd3RoIGluIHByZXZlbnRpb24gb2YgY3liZXIgZnJhdWQ8L2xpPlxyXG5cdFx0XHRcdDwvdWw+XHJcblx0XHRcdGB9XHJcblx0XHRcdGxpbms9XCIvcGF5bWVudHNcIlxyXG5cdFx0Lz5cdFx0XHJcblx0XHQ8Q2FyZHMgLz5cclxuXHRcdDxGb290ZXIgLz5cclxuXHQ8L2Rpdj5cclxuXHQpXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiMDNjZjViMWQzYTMwZDNiMjhiODE4Y2IxYjdkYjg2ZTcucG5nXCI7IiwiaW1wb3J0IFJlYWN0LCB7RnVuY3Rpb25Db21wb25lbnR9IGZyb20gJ3JlYWN0J1xyXG5cclxudHlwZSBQcm9wc1R5cGUgPSB7XHJcbiAgICBpZDogc3RyaW5nLFxyXG4gICAgZGlhZ3JhbTogYW55LFxyXG4gICAgdGl0bGU6IHN0cmluZyxcclxuICAgIHN1YlRpdGxlOiBzdHJpbmcsXHJcbiAgICBkZXNjcmlwdGlvbjogYW55XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFN1Y2Nlc3NTdG9yeSAocHJvcHM6IFByb3BzVHlwZSkge1xyXG4gICAgcmV0dXJuIChcclxuICAgICAgICA8ZGl2IGlkPXtwcm9wcy5pZH0gY2xhc3NOYW1lPVwid3JhcHBlciBzdHlsZTFcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJjb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgIDxoZWFkZXIgY2xhc3NOYW1lPVwibWFqb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICA8aDI+e3Byb3BzLnRpdGxlfTwvaDI+XHJcbiAgICAgICAgICAgICAgICA8L2hlYWRlcj5cclxuICAgICAgICAgICAgICAgIDxwIGNsYXNzTmFtZT1cImNlbnRyZS1qdXN0aWZpZWRcIj57cHJvcHMuc3ViVGl0bGV9PC9wPlxyXG4gICAgICAgICAgICA8c2VjdGlvbiBpZD1cImNvbnRlbnRcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiaW1hZ2UgZml0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGltZyBzcmM9e3Byb3BzLmRpYWdyYW19IGFsdD1cIlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGlkPVwicHJvamVjdC1kZXNjcmlwdGlvblwiIGNsYXNzTmFtZT1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUw9e3tfX2h0bWw6IHByb3BzLmRlc2NyaXB0aW9ufX0+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9zZWN0aW9uPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgKVxyXG59IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xyXG5pbXBvcnQge0xpbmt9IGZyb20gJ3JlYWN0LXJvdXRlci1kb20nXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBNZW51YmFyKCkge1xyXG5cdHJldHVybiAoXHJcblx0IFx0PGhlYWRlciBpZD1cImhlYWRlclwiPlxyXG5cdFx0XHQ8aDEgaWQ9XCJsb2dvXCI+PExpbmsgdG89XCIvXCI+U3Jpbml2YXMgR29waW5hdGggUGFyaW1pPC9MaW5rPjwvaDE+XHJcblx0XHQ8L2hlYWRlcj5cclxuXHQpXHJcbn0iLCJpbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnXHJcbmltcG9ydCBGb290ZXIgZnJvbSBcIi4uL2NvbXBvbmVudHMvRm9vdGVyXCJcclxuaW1wb3J0IERpYWdyYW0gZnJvbSBcIi4uL2Rlc2lnbnMvaW1hZ2VzL3RlbGNvLWRpYWdyYW0ucG5nXCJcclxuaW1wb3J0IFN1Y2Nlc3NTdG9yeSBmcm9tIFwiLi4vY29tcG9uZW50cy9TdWNjZXNzU3RvcnlcIlxyXG5pbXBvcnQgTWVudWJhciBmcm9tIFwiLi4vY29tcG9uZW50cy9NZW51YmFyXCJcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIFRlbGNvUGFnZSgpIHtcclxuICAgIHJldHVybiAoXHJcblx0XHQ8ZGl2IGlkPVwicGFnZS13cmFwcGVyXCI+XHJcblx0XHRcdDxNZW51YmFyIC8+XHJcblx0XHRcdDxTdWNjZXNzU3RvcnkgaWQ9XCJzdG9yeTFcIlxyXG5cdFx0XHRcdHRpdGxlPVwiQSB0ZWxjbyBnYWlucyAxNiUgY3VzdG9tZXIgZW5nYWdlbWVudCB3aXRoIG9tbmktZGlnaXRhbFwiXHJcblx0XHRcdFx0c3ViVGl0bGU9XCJEaWdpdGFsIHNhbGVzIGFuZCBQcm9hY3RpdmUgQ3VzdG9tZXIgY2FyZSBwbGF0Zm9ybSBwb3dlcmVkIGJ5IEFkb2JlIEV4cGVyaWVuY2UgQ2xvdWQgYW5kIEFXU1wiXHJcblx0XHRcdFx0ZGlhZ3JhbT17RGlhZ3JhbX1cclxuXHRcdFx0XHRkZXNjcmlwdGlvbj17YFxyXG5cdFx0XHRcdDxoMz5UaGUgbmV4dC1nZW4gdGVsY288L2gzPlxyXG5cdFx0XHRcdDxwPlxyXG5cdFx0XHRcdCAgQ3VzdG9tZXIgZXhwZXJpZW5jZSB0b2RheSBoYXMgbW92ZWQgYmV5b25kIHRoZSBpbW1lZGlhdGUgdHJhbnNhY3Rpb24uIFxyXG5cdFx0XHRcdCAgSXQgaXMgYWJvdXQgdGhlIHNwZWVkIGF0IHdoaWNoIGNvbXBhbmllcyBpbnRyb2R1Y2UgbmV3IHByb2R1Y3RzLCBkZWxpdmVyIHZhbHVlIGJleW9uZCBjb21wZXRpdGl2ZVxyXG5cdFx0XHRcdCAgcHJpY2luZywgb2ZmZXIgY29uc2lzdGVudCBleHBlcmllbmNlcyBhY3Jvc3MgY2hhbm5lbHMsIGFuZCBidWlsZCByZWxhdGlvbnNoaXBzIGZvciB0aGUgbG9uZyBoYXVsLlxyXG5cdFx0XHRcdDwvcD5cclxuXHRcdFx0XHQ8cD5cclxuXHRcdFx0XHQgIEEgY29tcGxldGUgZW5kLXRvLWVuZCBleHBlcmllbmNlIHNwYW5zIGFjcm9zcyBpbnRlcmFjdGlvbiBjaGFubmVscyBzdWNoIGFzIHByaW50LCB3ZWIsXHJcblx0XHRcdFx0ICBtb2JpbGUsIGNhbGwgY2VudGVyIGV0Yy4gYW5kIGNvbXByaXNlcyBtYW55IG1pY3JvIHRvdWNoIHBvaW50cy4gXHJcblx0XHRcdFx0ICBBIHRvdGFsIGV4cGVyaWVuY2UgaXMgbm90IGFib3V0IGp1c3Qgb25lIGludGVyYWN0aW9uLCBidXQgYWJvdXQgYSBzdXN0YWluZWQgYW5kIGNvbnNpc3RlbnQgc2V0IG9mIGludGVyYWN0aW9ucyBcclxuXHRcdFx0XHQgIHRoYXQgZHJpdmUgYSBwb3NpdGl2ZSBjdXN0b21lciBleHBlcmllbmNlLlxyXG5cdFx0XHRcdDwvcD5cclxuICAgICAgICAgICAgICAgIDxoMz5CdXNpbmVzcyBQcm9ibGVtPC9oMz5cclxuXHRcdFx0XHQ8dWwgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCI+XHJcblx0XHRcdFx0XHQ8bGk+SGlnaCBjb3N0cyBvZiBtYWludGVuYW5jZSAmIHN1cHBvcnQgIGZvciBtdWx0aXBsZSBzaXRlcywgdGVjaG5vbG9naWVzLCBkaWZmZXJlbnQgbGVnYWN5IGJhY2stZW5kIHN5c3RlbXM8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPkxvdyBlbmdhZ2VtZW50IG9uIG9ubGluZSBjaGFubmVscyAtIGxvd2VyIHNhbGVzIGFuZCBtb3JlIGxvYWQgb24gY29udGFjdCAgY2VudHJlIG9mIGlucXVpcmllczwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+SGlnaCBsYXRlbmN5IGFuZCBzZXJ2aWNlIGRpc3J1cHRpb25zIGFmZmVjdGluZyBjdXN0b21lciBlbmdhZ2VtZW50PC9saT5cclxuXHRcdFx0XHRcdDxsaT5Mb3cgUk9JIG9uIG1hcmtldGluZyBhbmQgcHJvbW90aW9ucy48L2xpPlxyXG5cdFx0XHRcdFx0PGxpPkRlcGVuZGVuY2Ugb24gSVQgcHJvY2VzcyBmb3IgY29udGVudCBjaGFuZ2VzIGFmZmVjdGluZyBtYXJrZXRpbmcgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcblx0XHRcdFx0PGgzPlRlY2huaWNhbCBTb2x1dGlvbjwvaDM+XHJcbiAgICAgICAgICAgICAgICA8dWwgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCI+XHJcblx0XHRcdFx0XHQ8bGk+QUVNIHNpdGVzIHdpdGggY2VudHJhbGl6ZWQgY29udGVudCBtYW5hZ2VtZW50IGZvciBhbGwgYnJhbmRzICYgTE9CczwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+QUVNIHdpZGdldHMgZm9yIGNvbnNpc3RlbnQgdXNlciBleHBlcmllbmNlcyBhY3Jvc3MgY2hhbm5lbHM8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPk11bHRpIGNoYW5uZWwgY2FtcGFpZ25zIGFuZCBzaW1wbGlmaWVkIFVzZXIgam91cm5leXM8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPlNtYXJ0IEZBUXMsIFNtYXJ0IFByb2R1Y3QgY2F0YWxvZ3VlLCBQcm9tb3Rpb25zLCBPZmZlcnM8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPkEvQiBUZXN0aW5nLCBNdWx0aS12YXJpYXRlIHRlc3RpbmcsIENyb3NzLXNlbGwsIFVwLXNlbGwsIDM2MC1kZWdyZWUgYW5hbHl0aWNzPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHRcdFx0XHJcblx0XHRcdFx0PGgzPlJlc3VsdCBBY2hpZXZlZDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8dWwgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCI+XHJcblx0XHRcdFx0XHQ8bGk+MTYlIEluY3JlYXNlIGluIHVzZSBvZiBvbmxpbmUgY2hhbm5lbHMuIDwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+SW5jcmVhc2VkIHNhbGVzIHRocm91Z2ggY3VzdG9tZXIgc2VsZi1zZXJ2aWNlPC9saT5cclxuXHRcdFx0XHRcdDxsaT5GYXN0ZXIgYWNxdWlzaXRpb25zIHRocm91Z2ggQWdlbnQtZHJpdmVuIHNhbGVzIGFuZCBTdG9yZSB2aXNpdHM8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPkNyb3NzLXNlbGwgYW5kIFVwLXNlbGw8L2xpPlxyXG5cdFx0XHRcdDxsaT5SZWR1Y2VkIHNwZW5kIG9uIEJsYW5rZXQgUHJvbW90aW9ucyBhbmQgb2ZmZXJzPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcblx0XHRcdFx0YH1cclxuXHRcdFx0Lz5cclxuICBcdCAgICAgICAgPEZvb3RlciAvPlxyXG4gXHQgICAgPC9kaXY+XHJcblx0KVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcIjQ0ZjY3N2ZmY2I0NzcyNzNkOTIwNThlOTBkZDExYzMwLnBuZ1wiOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuaW1wb3J0IEZvb3RlciBmcm9tIFwiLi4vY29tcG9uZW50cy9Gb290ZXJcIlxyXG5pbXBvcnQgRGlhZ3JhbSBmcm9tIFwiLi4vZGVzaWducy9pbWFnZXMvZWR1LWRpYWdyYW0ucG5nXCJcclxuaW1wb3J0IFN1Y2Nlc3NTdG9yeSBmcm9tIFwiLi4vY29tcG9uZW50cy9TdWNjZXNzU3RvcnlcIlxyXG5pbXBvcnQgTWVudWJhciBmcm9tIFwiLi4vY29tcG9uZW50cy9NZW51YmFyXCJcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVkdVBhZ2UoKSB7XHJcbiAgICByZXR1cm4gKFxyXG5cdFx0PGRpdiBpZD1cInBhZ2Utd3JhcHBlclwiPlxyXG5cdFx0XHQ8TWVudWJhciAvPlxyXG5cdFx0XHQ8U3VjY2Vzc1N0b3J5IGlkPVwic3RvcnkxXCJcclxuXHRcdFx0XHR0aXRsZT1cIkEgdW5pdmVyc2l0eSBsZWFkcyBieSBpbm5vdmF0aXZlIHBlZGFnb2d5IGFuZCBnYW1pZmllZCBsZWFybmluZ1wiXHJcblx0XHRcdFx0c3ViVGl0bGU9XCJFbmxpZ2h0ZW5pbmcgb2YgdGVhY2hpbmcgYW5kIG51cnR1cmluZyBvZiB0YWxlbnQgZmFjaWxpdGF0ZWQgYnkgQXp1cmUsIEFuZ3VsYXIsIEJsYWNrYm9hcmQsIElET0wsIExBTVMgYW5kIE11bGVzb2Z0XCJcclxuXHRcdFx0XHRkaWFncmFtPXtEaWFncmFtfVxyXG5cdFx0XHRcdGRlc2NyaXB0aW9uPXtgXHJcblx0XHRcdFx0PGgzPkRpZ2l0YWwgVHJhbnNmb3JtYXRpb24gb2YgVW5pdmVyc2l0eSBFZHVjYXRpb248L2gzPlxyXG5cdFx0XHRcdDxwPlRvZGF5LCBUZWFjaGluZyBhbmQgTGVhcm5pbmcgbW92ZWQgYmV5b25kIHRoZSBjbGFzc3Jvb20uPC9wPlxyXG5cdFx0XHRcdDxwPkVmZmljaWVudCBVbml2ZXJzaXR5IEVkdWNhdGlvbiBkZXBlbmRzIG9uIHRoZXNlIGZhY3RvcnM6PC9wPlxyXG5cdFx0XHRcdDx1bCBzdHlsZT1cInRleHQtYWxpZ246IGxlZnRcIj5cclxuXHRcdFx0XHQgICAgPGxpPklubm92YXRpdmUgYW5kIGZ1dHVyaXN0aWMgbGVhcm5pbmcgZHJpdmVuIGJ5IHJpY2ggY29udGVudCBhbmQgcG93ZXJlZCBieSBEaWdpdGFsIHRlY2hub2xvZ3kgYW5kIHRvb2xzPC9saT5cclxuXHRcdFx0XHRcdDxsaT5TZWFtbGVzcyBpbnRlZ3JhdGlvbiBvZiBhIG11bHRpdHVkZSBvZiBjb250ZW1wb3JhcnkgYW5kIHRyYWRpdGlvbmFsIGxlYXJuaW5nIHN5c3RlbXMgaW50byBhIHVuaWZpZWQsIHNpbXBsaWZpZWQgYW5kIHBlcnNvbmFsaXplZCBlY28tc3lzdGVtPC9saT5cclxuXHRcdFx0XHRcdDxsaT5QZWRhZ29neSBhbmQgTXVsdGktY2hhbm5lbCBsZWFybmluZyB0aHJvdWdoIHZlcnNhdGlsZSBjb250ZW50IGF1dGhvcmluZywgY291cnNlIHBhY2thZ2luZyBhbmQgaW5zdHJ1Y3Rpb24gZGVsaXZlcnkuPC9saT5cclxuXHRcdFx0XHQ8L3VsPlxyXG4gICAgICAgICAgICAgICAgPGgzPkJ1c2luZXNzIFByb2JsZW08L2gzPlxyXG5cdFx0XHRcdDx1bCBzdHlsZT1cInRleHQtYWxpZ246IGxlZnRcIj5cclxuXHRcdFx0XHRcdDxsaT5Db21wbGljYXRlZCBhbmQgaW5mbGV4aWJsZSBtZWFucyBvZiBjcmVhdGluZyBjb250ZW50IGFuZCBhZG1pbmlzdGVyaW5nIGNvdXJzZXMgaW1wYWN0ZWQgb3ZlcmFsbCBwZXJmb3JtYW5jZS48L2xpPlxyXG5cdFx0XHRcdFx0PGxpPkluZWZmZWN0aXZlIG1lYW5zIG9mIHByb3ZpZGluZyByZWxldmFudCBpbmZvcm1hdGlvbiBhdCB0aGUgcmlnaHQgdGltZSB0byBlYWNoIHN0dWRlbnQ8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPkluc3VmZmljaWVudCBpbnNpZ2h0cyBpbnRvIHN0dWRlbnQgc2VnbWVudHMgYW5kIHBlcmZvcm1hbmNlIG9mIGNvdXJzZXMgbWFkZSBpdCBkaWZmaWN1bHQgZm9yIHRoZSBzdGFmZiBhbmQgdGhlIGV4ZWN1dGl2ZSBjb21taXR0ZWUgb2YgdGhlIHVuaXZlcnNpdHkgdG8gdW5kZXJzdGFuZCB0aGUgZWZmZWN0aXZlbmVzcyBvZiBhIHNwZWNpZmljIGNvdXJzZSwgYW5kIHRvIG1ha2UgY291cnNlIGNvcnJlY3Rpb25zLjwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+RGlzam9pbnQgc3lzdGVtcyBhbmQgbXVsdGlwbGUgZGF0YSBzb3VyY2VzIGNhdXNpbmcgYWRtaW5pc3RyYXRpdmUgb3ZlcmhlYWQgYW5kIGxpbWl0aW5nIHRoZSBhYmlsaXR5IHRvIHNjYWxlLjwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+QWQtaG9jIHVzZXIgaW50ZXJmYWNlcyB3aXRoIGluY29uc2lzdGVudCBleHBlcmllbmNlcyBhY3Jvc3MgZGV2aWNlcyBhbmQgYnJvd3NlcnMuPC9saT5cdFx0XHRcdFxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuXHRcdFx0XHQ8aDM+VGVjaG5pY2FsIFNvbHV0aW9uPC9oMz5cclxuICAgIFx0ICAgICAgICA8dWwgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCI+XHJcblx0XHRcdFx0XHQ8bGk+Q29udGVudCBhdXRob3JpbmcsIGNvdXJzZSBwYWNrYWdpbmcgYW5kIGFuYWx5dGljcyB1c2luZyBCbGFja2JvYXJkIGFuZCBMQU1TPC9saT5cclxuXHRcdFx0XHRcdDxsaT5HYW1pZmllZCB0ZWFjaGluZyBhbmQgbGVhcm5pbmcgd2l0aCBzb2NpYWwgY29tbXVuaXRpZXMgYW5kIGJsb2dzIGltcGxlbWVudGVkIHVzaW5nIEFuZ3VsYXIsIE11bGUgRVNCIGFuZCBNb25nb0RCPC9saT5cclxuXHRcdFx0XHRcdDxsaT5Db2duaXRpdmUgc2VhcmNoIHdpdGggbmF0dXJhbCBsYW5ndWFnZSBwcm9jZXNzaW5nIChOTFApIGFuZCBtYWNoaW5lIGxlYXJuaW5nIHVzaW5nIElET0w8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPlJvbGUgYmFzZWQgYWNjZXNzIGFuZCBpZGVudGl0eSBtYW5hZ2VtZW50IHVzaW5nIE5ldElRLCBTaGliYm9sZXRoIGFuZCBBY3RpdmUgRGlyZWN0b3J5PC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHRcdFx0XHJcblx0XHRcdFx0PGgzPlJlc3VsdCBBY2hpZXZlZDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8dWwgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCI+XHJcblx0XHRcdFx0XHQ8bGk+4oCYT25lLVVuaXZlcnNpdHksIE9uZS1lY28tc3lzdGVt4oCZIGV4cGVyaWVuY2UgZm9yIGFsbCB1c2VycyAtIEZhY3VsdHksIFN0dWRlbnRzLCBSZXNlYXJjaGVycywgR3Vlc3RzLCBQYXJ0bmVycyBhbmQgQWZmaWxpYXRlczwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+4oCYQ29ubmVjdGVkIGFueXdoZXJlLCBjb25uZWN0ZWQgYW55dGltZeKAmSBleHBlcmllbmNlIHRoYXQgYWxsb3dzIHVzZXJzIHRvIHNlYW1sZXNzbHkgc3dpdGNoIGFjcm9zcyBkZXZpY2VzIGFuZCBjaGFubmVsczwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+U2NhbGFiaWxpdHkgdG8gc3VwcG9ydCBtYXNzaXZlIHVzZXIgYmFzZSBhbmQgaGlnaCBjb25jdXJyZW5jeTwvbGk+XHRcdFx0XHRcclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcblx0XHRcdFx0YH1cclxuXHRcdFx0Lz5cclxuICBcdCAgICAgICAgPEZvb3RlciAvPlxyXG4gXHQgICAgPC9kaXY+XHJcblx0KVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImQ0ZmExNGE2ZmEzODE2Yzg0MTMxZGE0ZDVmNjc5YjhmLnBuZ1wiOyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuaW1wb3J0IEZvb3RlciBmcm9tIFwiLi4vY29tcG9uZW50cy9Gb290ZXJcIlxyXG5pbXBvcnQgRGlhZ3JhbSBmcm9tIFwiLi4vZGVzaWducy9pbWFnZXMvdHJhZGluZy1kaWFncmFtLnBuZ1wiXHJcbmltcG9ydCBTdWNjZXNzU3RvcnkgZnJvbSBcIi4uL2NvbXBvbmVudHMvU3VjY2Vzc1N0b3J5XCJcclxuaW1wb3J0IE1lbnViYXIgZnJvbSBcIi4uL2NvbXBvbmVudHMvTWVudWJhclwiXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBCYW5rUGFnZSgpIHtcclxuICAgIHJldHVybiAoXHJcblx0XHQ8ZGl2IGlkPVwicGFnZS13cmFwcGVyXCI+XHJcblx0XHRcdDxNZW51YmFyIC8+XHJcblx0XHRcdDxTdWNjZXNzU3RvcnkgaWQ9XCJzdG9yeTNcIlxyXG5cdFx0XHRcdHRpdGxlPVwiQSBiYW5rIG1pbnRzIHByb2ZpdHMgZm9yIGl0cyBjdXN0b21lcnMgdGhyb3VnaCBhIHNtYXJ0IHRyYWRpbmcgc29sdXRpb25cIlxyXG5cdFx0XHRcdHN1YlRpdGxlPVwiS2Fma2EsIFNwcmluZyBCb290LCBSZWFjdCBhbmQgbWFjaGluZSBsZWFybmluZyBmb3IgcHJvZml0YWJsZSB0cmFkaW5nXCJcclxuXHRcdFx0XHRkaWFncmFtPXtEaWFncmFtfVxyXG5cdFx0XHRcdGRlc2NyaXB0aW9uPXtgXHJcblx0XHRcdFx0PGgzPlNtYXJ0IFRyYWRpbmcgUGxhdGZvcm08L2gzPlxyXG5cdFx0XHRcdDxwPlxyXG5cdFx0XHRcdCAgTWljcm9zZWNvbmRzIG1hdHRlciBpbiB0aGUgY29uc3RhbnRseSBldm9sdmluZyB0ZWNobm9sb2d5IGxhbmRzY2FwZSBvZiBzdG9jayB0cmFkaW5nISBcclxuXHRcdFx0XHQgIFByb2ZpdGFiaWxpdHkgZGVwZW5kcyBvbiBlZmZpY2llbnQgZXhlY3V0aW9uIG9mIHRyYWRlcyB3aGlsZSBhZGhlcmluZyB0byByZWd1bGF0b3J5IGNvbXBsaWFuY2VcclxuXHRcdFx0XHQ8L3A+XHJcbiAgICAgICAgICAgICAgICA8aDM+QnVzaW5lc3MgR29hbHM8L2gzPlxyXG5cdFx0XHRcdDx1bCBzdHlsZT1cInRleHQtYWxpZ246IGxlZnRcIj5cclxuXHRcdFx0XHRcdDxsaT5NYXhpbWl6aW5nIHRoZSBwcm9maXRhYmlsaXR5IG9mIHRyYWRpbmcgdHJhbnNhY3Rpb25zIGZvciB0aGUgY3VzdG9tZXJzPC9saT5cclxuXHRcdFx0XHRcdDxsaT5Qcm90ZWN0IHRoZSBjdXN0b21lciBpbnZlc3RtZW50cyBmcm9tIGRvbWlubyBlZmZlY3RzIG9mIHRyYWRpbmcgbWFya2V0czwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+UmVndWxhdG9yeSBjb21wbGlhbmNlIGZvciBhbGwgdHJhZGVzPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcblx0XHRcdFx0PGgzPlRlY2huaWNhbCBTb2x1dGlvbjwvaDM+XHJcbiAgICAgICAgICAgICAgICA8dWwgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCI+XHJcblx0XHRcdFx0XHQ8bGk+S2Fma2Egc3RyZWFtcyBmb3IgdHJhZGUgcHJvY2Vzc2luZzwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+QWRvYmUgQW5hbHl0aWNzIGZvciByZWFsLXRpbWUgaW5zaWdodHM8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPk1pY3Jvc2VydmljZXMgd2l0aCBKYXZhIGFuZCBTcHJpbmcgQm9vdDwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+SGFkb29wIGRhdGFsYWtlIHdpdGggbWFjaGluZSBsZWFybmluZyBtb2RlbHMgZm9yIHRyYWRlIGRhdGE8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPlNwbHVuayBkYXNoYm9hcmQgZm9yIHJlYWwtdGltZSBldmVudCBtb25pdG9yaW5nPC9saT5cclxuXHRcdFx0XHRcdDxsaT5Vc2VyIGludGVyZmFjZSB3aXRoIFJlYWN0IGFuZCBBRy1ncmlkPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHRcdFx0XHJcblx0XHRcdFx0PGgzPlJlc3VsdCBBY2hpZXZlZDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8dWwgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCI+XHJcblx0XHRcdFx0XHQ8bGk+TGVzcyB0aGFuIDMwIHNlY29uZHMgZnJvbSBpbml0aWF0aW9uIHRvIGNvbXBsZXRpb24gb2YgdHJhZGUsIGFsb25nIHdpdGggcmVndWxhdG9yeSBjb21wbGlhbmNlIGFuZCB2YWxpZGF0aW9uIG9mIDIwMCsgcnVsZXM8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPlZpc3VhbGlzYXRpb24gb2YgaGlzdG9yaWMgbWFya2V0IGRhdGEgdG8gaGVscCBwZXJmb3JtIHRoZSByaWdodCB0cmFkZSBhdCB0aGUgcmlnaHQgdGltZTwvbGk+IFxyXG5cdFx0XHRcdFx0PGxpPkludGVsbGlnZW50IExvZyBBbmFseXRpY3MgdG8gZmFjaWxpdGF0ZSByYXBpZCByZXNwb25zZSBhbmQgcmVjb3ZlcnkgZm9yIHNlY3VyaXR5IGluY2lkZW50cyBhbmQgZmFpbHVyZXM8L2xpPlxyXG4gICAgICAgICAgICAgICAgPC91bD5cclxuXHRcdFx0XHRgfVxyXG5cdFx0XHQvPlxyXG4gIFx0ICAgICAgICA8Rm9vdGVyIC8+XHJcbiBcdCAgICA8L2Rpdj5cclxuXHQpXHJcbn0iLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiNWM2YzM1NDJjNzYyNDlhMmRlYWE3OWIyMjdhZjMzZGQucG5nXCI7IiwiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0J1xyXG5pbXBvcnQgRm9vdGVyIGZyb20gXCIuLi9jb21wb25lbnRzL0Zvb3RlclwiXHJcbmltcG9ydCBEaWFncmFtIGZyb20gXCIuLi9kZXNpZ25zL2ltYWdlcy9wYXltZW50cy1kaWFncmFtLnBuZ1wiXHJcbmltcG9ydCBTdWNjZXNzU3RvcnkgZnJvbSBcIi4uL2NvbXBvbmVudHMvU3VjY2Vzc1N0b3J5XCJcclxuaW1wb3J0IE1lbnViYXIgZnJvbSBcIi4uL2NvbXBvbmVudHMvTWVudWJhclwiXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBQcGF5bWVudHNQYWdlKCkge1xyXG4gICAgcmV0dXJuIChcclxuXHRcdDxkaXYgaWQ9XCJwYWdlLXdyYXBwZXJcIj5cclxuXHRcdFx0PE1lbnViYXIgLz5cclxuXHRcdFx0PFN1Y2Nlc3NTdG9yeSBpZD1cInN0b3J5NFwiXHJcblx0XHRcdFx0dGl0bGU9XCJBbiBvbmxpbmUgcGF5bWVudHMgY29tcGFueSBzcGlrZXMgY3VzdG9tZXIgZGVsaWdodCBieSAzMCUgd2l0aCBzbWFydCBxdWV1ZWluZyBvZiBzdXBwb3J0IHJlcXVlc3RzXCJcclxuXHRcdFx0XHRzdWJUaXRsZT1cIkFFTSBhbmQgUGVnYSBmb3Igc21hcnQgcXVldWVpbmcgb2YgcGF5bWVudHMgYW5kIGNoYXJnZWJhY2sgc3VwcG9ydCByZXF1ZXN0c1wiXHJcblx0XHRcdFx0ZGlhZ3JhbT17RGlhZ3JhbX1cclxuXHRcdFx0XHRkZXNjcmlwdGlvbj17YFxyXG5cdFx0XHRcdDxoMz5TdXBwb3J0IGF0IHN1cGVyIHNjYWxlIGZvciBvbmxpbmUgcGF5bWVudHM8L2gzPlxyXG5cdFx0XHRcdDxwPlRyaWxsaW9ucyBvZiBkb2xsYXJzIHdvcnRoIG9mIG9ubGluZSBwYXltZW50cyBhcmUgbWFkZSBieSBtaWxsaW9ucyBvZiBwZW9wbGUgZXZlcnkgeWVhcjwvcD5cclxuICAgICAgICAgICAgICAgIDxwPlRoZSBncm93aW5nIHJlYWNoIG9mIG9uIG9ubGluZSBwYXltZW50cyBoYWQgYnJvdWdodCBhIGhvc3Qgb2YgdHJ1c3QgYW5kIHNlY3VyaXR5IGlzc3Vlcy48L3A+XHJcbiAgICAgICAgICAgICAgICA8cD5BIHN1Y2Nlc3NmdWwgbW9kZWwgb2Ygb25saW5lIHBheW1lbnRzIHJlbGllcyBub3Qgb25seSBvbiB0aGUgZWFzZSBhdCB3aGljaCB0aGUgdHJhbnNhY3Rpb25zIGNhbiBiZSBwZXJmb3JtZWQsIFxyXG4gICAgICAgICAgICAgICAgICAgYnV0IGFsc28gb24gdGhlIGNvbWZvcnQgYXQgd2hpY2ggdGhlIGN1c3RvbWVycyBjYW4gZ2V0IGlzc3VlcyByZXNvbHZlZDwvcD5cclxuICAgICAgICAgICAgICAgIDxoMz5CdXNpbmVzcyBQcm9ibGVtPC9oMz5cclxuXHRcdFx0XHQ8dWwgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCI+XHJcblx0XHRcdFx0XHQ8bGk+RXhwb25lbnRpYWwgZ3Jvd3RoIG9mIGNhbGwgdm9sdW1lcyBhbmQgdW5hdmFpbGFiaWxpdHkgb2YgaGVscCBmb3IgdnVsbmVyYWJsZSBjdXN0b21lcnM8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPkluY3JlYXNpbmcgY3liZXIgZnJhdWQ8L2xpPlxyXG5cdFx0XHRcdFx0PGxpPkluc3VmZmljaWVudCBpbnNpZ2h0cyBsZWFkaW5nIHRvIGRpc2VuZ2FnZW1lbnQgb2Ygc3BlY2lmaWMgc2VnbWVudHMgb2YgY3VzdG9tZXJzPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcblx0XHRcdFx0PGgzPlRlY2huaWNhbCBTb2x1dGlvbjwvaDM+XHJcbiAgICBcdCAgICAgICAgPHVsIHN0eWxlPVwidGV4dC1hbGlnbjogbGVmdFwiPlxyXG5cdFx0XHRcdFx0PGxpPklWUiBpbnRlZ3JhdGlvbiB3aXRoIFBlZ2EgcnVsZXMgdG8gYXV0b21hdGUgdGhlIHBsYWNlbWVudCBvZiByZXF1ZXN0cyBpbnRvIHRoZSByaWdodCBxdWV1ZTwvbGk+XHJcblx0XHRcdFx0XHQ8bGk+TWljcm8tc2VydmljZXMgaW4gUHVibGlzaGVyLXN1YnNjcmliZXIgbW9kZWwgZm9yIHNjYWxhYmxlIHF1ZXVlIG1hbmFnZW1lbnQ8L2xpPlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaT5BRU0gZm9yIGRvY3VtZW50IHVwbG9hZCBhbmQgdmVyaWZpY2F0aW9uIHdvcmtmbG93czwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpPk1hY2hpbmUgbGVhcm5pbmcgb24gcGF5bWVudCBhbmQgc3VwcG9ydCBkYXRhIHRvIGRldGVjdCBhbmQgdGh3YXJ0IGN5YmVyIGZyYXVkPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcblx0XHRcdFx0PGgzPlJlc3VsdCBBY2hpZXZlZDwvaDM+XHJcbiAgICAgICAgICAgICAgICA8dWwgc3R5bGU9XCJ0ZXh0LWFsaWduOiBsZWZ0XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpPjMwJSByZWR1Y3Rpb24gaW4gdGhlIGF2ZXJhZ2UgdGltZSBzcGVudCBvbiBjYWxsIGJ5IGN1c3RvbWVyPC9saT5cclxuICAgICAgICAgICAgICAgICAgICA8bGk+MzAlIGltcHJvdmVtZW50IGluIHRoZSByZXNvbHV0aW9uIG9mIGlzc3VlcyBpbiB0aGUgZmlyc3QgY2FsbDwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpPjMwJSBpbmNyZWFzZSBpbiB0aGUgZGVkaWNhdGlvbiBvZiB0ZWxlcGhvbmUgY2hhbm5lbCB0byB2dWxuZXJhYmxlIGN1c3RvbWVyczwvbGk+XHJcbiAgICAgICAgICAgICAgICAgICAgPGxpPjMwJSBncm93dGggaW4gcHJldmVudGlvbiBvZiBjeWJlciBmcmF1ZDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8L3VsPlxyXG5cdFx0XHRcdGB9XHJcblx0XHRcdC8+XHJcbiAgXHQgICAgICAgIDxGb290ZXIgLz5cclxuIFx0ICAgIDwvZGl2PlxyXG5cdClcclxufSIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuaW1wb3J0IHtIYXNoUm91dGVyLCBSb3V0ZX0gZnJvbSAncmVhY3Qtcm91dGVyLWRvbSdcclxuaW1wb3J0IFNjcm9sbFRvVG9wIGZyb20gXCIuL2NvbXBvbmVudHMvU2Nyb2xsVG9Ub3BcIlxyXG5pbXBvcnQgSG9tZVBhZ2UgZnJvbSBcIi4vcGFnZXMvSG9tZVBhZ2VcIlxyXG5pbXBvcnQgVGVsY29QYWdlIGZyb20gXCIuL3BhZ2VzL1RlbGNvUGFnZVwiXHJcbmltcG9ydCBFZHVQYWdlIGZyb20gXCIuL3BhZ2VzL0VkdVBhZ2VcIlxyXG5pbXBvcnQgQmFua1BhZ2UgZnJvbSBcIi4vcGFnZXMvQmFua1BhZ2VcIlxyXG5pbXBvcnQgUGF5bWVudHNQYWdlIGZyb20gXCIuL3BhZ2VzL1BheW1lbnRzUGFnZVwiXHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBBcHAoKSB7XHJcbiAgICByZXR1cm4oXHJcbiAgICAgICAgPEhhc2hSb3V0ZXI+XHJcbiAgICAgICAgICAgIDxTY3JvbGxUb1RvcCAvPlxyXG4gICAgICAgICAgICA8Um91dGUgZXhhY3QgcGF0aD1cIi9cIiBjb21wb25lbnQ9e0hvbWVQYWdlfSAvPlxyXG4gICAgICAgICAgICA8Um91dGUgcGF0aD1cIi90ZWxjb1wiIGNvbXBvbmVudD17VGVsY29QYWdlfSAvPlxyXG4gICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9lZHVcIiBjb21wb25lbnQ9e0VkdVBhZ2V9IC8+XHJcbiAgICAgICAgICAgIDxSb3V0ZSBwYXRoPVwiL2JhbmtcIiBjb21wb25lbnQ9e0JhbmtQYWdlfSAvPlxyXG4gICAgICAgICAgICA8Um91dGUgcGF0aD1cIi9wYXltZW50c1wiIGNvbXBvbmVudD17UGF5bWVudHNQYWdlfSAvPlxyXG4gICAgICAgIDwvSGFzaFJvdXRlcj5cclxuICAgIClcclxufSIsInJlcXVpcmUoYC4vZGVzaWducy8ke0JSQU5EX05BTUV9LmNzc2ApXHJcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCdcclxuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSdcclxuaW1wb3J0IEFwcCBmcm9tIFwiLi9BcHBcIlxyXG5cclxuUmVhY3RET00ucmVuZGVyKFxyXG4gIDxSZWFjdC5TdHJpY3RNb2RlPlxyXG4gICAgICA8QXBwIC8+XHJcbiAgPC9SZWFjdC5TdHJpY3RNb2RlPixcclxuICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChcInJvb3RcIilcclxuKSJdLCJzb3VyY2VSb290IjoiIn0=