@digitransit-component/digitransit-component-autosuggest-panel 8.4.3 → 9.0.1
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.
- package/LICENSE-AGPL.txt +661 -0
- package/LICENSE-EUPL.txt +291 -0
- package/lib/index.cjs +1 -1
- package/lib/index.cjs.map +1 -1
- package/lib/index.development.cjs +840 -2
- package/lib/index.js +831 -0
- package/lib/index.js.map +1 -0
- package/package.json +20 -8
|
@@ -1,2 +1,840 @@
|
|
|
1
|
-
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("classnames"),require("prop-types"),require("react"),require("react-i18next"),require("react-sortablejs"),require("@digitransit-component/digitransit-component-autosuggest"),require("@digitransit-component/digitransit-component-icon"),require("lodash/isEmpty"),require("downshift"),require("i18next")):"function"==typeof define&&define.amd?define(["exports","classnames","prop-types","react","react-i18next","react-sortablejs","@digitransit-component/digitransit-component-autosuggest","@digitransit-component/digitransit-component-icon","lodash/isEmpty","downshift","i18next"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self)["@digitransit-component/digitransit-component-autosuggest-panel"]={},e.cx,e.PropTypes,e.React,e.reactI18next,e.reactSortablejs,e.DTAutosuggest,e.Icon,e.isEmpty,e.downshift,e.i18next)}(this,function(e,t,n,i,a,o,s,l,r,d,c){"use strict";function p(e){return e&&e.__esModule?e:{default:e}}var u=p(t),_=p(n),h=p(i),g=p(s),v=p(l),f=p(r);function m(e){return m="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},m(e)}function y(e){var t=function(e,t){if("object"!=m(e)||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var i=n.call(e,t);if("object"!=m(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==m(t)?t:t+""}function b(e,t,n){return(t=y(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function x(e,t){void 0===t&&(t={});var n=t.insertAt;if(e&&"undefined"!=typeof document){var i=document.head||document.getElementsByTagName("head")[0],a=document.createElement("style");a.type="text/css","top"===n&&i.firstChild?i.insertBefore(a,i.firstChild):i.appendChild(a),a.styleSheet?a.styleSheet.cssText=e:a.appendChild(document.createTextNode(e))}}var S="select_combobox-container__SvQ84",k="select_left-column__jbjXM",w="select_combobox-label__-CrdK",P="select_container__-r8y8",E="select_suggestion__JyaUk",O="select_suggestionHighlighted__nWx3k",N="select_suggestionsContainerOpen__JVYuR",C="select_input__YVoSg";x(".select_combobox-container__SvQ84 {\n background-color: #fff;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 50px;\n justify-content: space-between;\n flex-grow: 1;\n}\n.select_combobox-container__SvQ84:focus-within {\n border-color: #007ac9;\n}\n.select_combobox-container__SvQ84 .select_left-column__jbjXM {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.select_combobox-label__-CrdK {\n font-size: 12px;\n line-height: 20px;\n color: #666;\n letter-spacing: -0.48px;\n margin-left: 12px;\n margin-top: 4px;\n}\n\n.select_container__-r8y8 {\n position: relative;\n width: 100%;\n height: 100%;\n}\n.select_container__-r8y8 > div {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n.select_container__-r8y8 .select_suggestion__JyaUk {\n font-size: 15px;\n line-height: 49px;\n height: 50px;\n padding: 0 0 0 12px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n}\n.select_container__-r8y8 .select_suggestionHighlighted__nWx3k {\n font-size: 15px;\n font-weight: 500;\n background: #f2f5f7;\n}\n.select_container__-r8y8 .select_suggestionsContainerOpen__JVYuR {\n position: absolute;\n background-color: #fff;\n z-index: 20;\n max-height: 250px;\n overflow-x: hidden;\n overflow-y: scroll;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: 1px rgba(0, 0, 0, 0.1) solid;\n top: calc(100% + 4px);\n left: 0;\n width: 100%;\n list-style-type: none;\n padding: 0;\n margin: 0;\n}\n.select_container__-r8y8 .select_suggestionsContainerOpen__JVYuR ul {\n padding: 0;\n margin: 0;\n}\n.select_container__-r8y8 .select_suggestionsContainerOpen__JVYuR li:not(:last-child) {\n border-bottom: 1px solid #ddd;\n}\n.select_container__-r8y8 .select_input__YVoSg {\n appearance: none;\n margin: -4px 0 0 0;\n padding-left: 12px;\n border: none;\n height: 26px;\n}\n.select_container__-r8y8 .select_input__YVoSg:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\n.select_container__-r8y8 .select_input__YVoSg:read-only {\n cursor: pointer;\n background: #fff;\n}\n.select_container__-r8y8 .select_input__YVoSg {\n background: #fff;\n font-weight: 500;\n box-shadow: none;\n font-size: 15px;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.6px;\n color: #333;\n}");const V=({value:e,options:t,onSlackTimeSelected:n,viaPointIndex:i,id:a,label:o,icon:s})=>{const l=`${a}-label`,r=t.find(t=>t.value===e),{isOpen:c,getToggleButtonProps:p,getMenuProps:_,getItemProps:g,getLabelProps:v,highlightedIndex:f}=d.useSelect({selectedItem:r,items:t,labelId:l,id:a,itemToString:e=>e.displayName,onSelectedItemChange:({selectedItem:e})=>{n(e.value,i)}});return h.default.createElement("div",{className:S},h.default.createElement("div",{className:P},h.default.createElement("div",p(),h.default.createElement("span",{className:k},h.default.createElement("label",Object.assign({},v(),{className:w}),o),h.default.createElement("div",{className:C},h.default.createElement("span",null,r.displayName))),s),h.default.createElement("ul",Object.assign({className:u.default(N,!c&&"hidden")},_()),c&&t.map((e,t)=>h.default.createElement("li",Object.assign({key:e.value,className:u.default(E,t===f&&O)},g({index:t})),h.default.createElement("span",null,e.displayName))))))};"production"!==process.env.NODE_ENV&&(V.propTypes={value:_.default.number.isRequired,onSlackTimeSelected:_.default.func.isRequired,options:_.default.arrayOf(_.default.shape({displayName:_.default.string.isRequired,value:_.default.number.isRequired}).isRequired).isRequired,id:_.default.string.isRequired,label:_.default.node.isRequired,icon:_.default.node.isRequired,viaPointIndex:_.default.number.isRequired});const A=c.createInstance({fallbackLng:"fi",resources:{de:{translation:{"add-via-button-label":"Füge Zwischenziel hinzu","add-via-duration-button-label":"Setze Umsteigezeit für Zwischenziel {{index}}","add-via-duration-button-label-close":"Schließe Umsteigezeit-Auswahl für Zwischenziel {{index}}","add-via-duration-button-label-open":"Öffne Umsteigezeit-Auswahl für Zwischenziel {{index}}","minute-short":"min","remove-via-button-label":"Entferne Zwischenziel {{index}}","swap-order-button-label":"Tausche Start mit Ziel","via-point":"Zwischenziel","via-point-index":"Zwischenziel {{index}}","viapoint-slack-amount":"Umsteigezeit"}},en:{translation:{"add-via-button-label":"Add via point","add-via-duration-button-label":"Set stop duration at via point {{index}}","add-via-duration-button-label-close":"Close stop duration selector at via point {{index}}","add-via-duration-button-label-open":"Open stop duration selector at via point {{index}}","minute-short":"min","remove-via-button-label":"Remove via point {{index}}","swap-order-button-label":"Reverse origin and destination","via-point":"Via point","via-point-index":"Via point {{index}}","viapoint-slack-amount":"Stop duration"}},fi:{translation:{"add-via-button-label":"Lisää välipiste","add-via-duration-button-label":"Aseta välipisteelle {{index}} pysähdyksen kesto","add-via-duration-button-label-close":"Avaa välipisteen {{index}} pysähdyksen kesto valitsin","add-via-duration-button-label-open":"Sulje välipisteen {{index}} pysähdyksen kesto valitsin","minute-short":"min","remove-via-button-label":"Poista välipiste {{index}}","swap-order-button-label":"Käännä reitin suunta vastakkaiseksi","via-point":"Välipiste","via-point-index":"Välipiste {{index}}","viapoint-slack-amount":"Pysähdyksen kesto"}},pl:{translation:{"add-via-button-label":"Dodaj punkt pośredni","add-via-duration-button-label":"Wybierz czas postoju dla punktu {{index}}","add-via-duration-button-label-close":"Zamknij wybornik czasu postoju w punkcie {{index}}","add-via-duration-button-label-open":"Otwórz wybornik czasu postoju w punkcie {{index}}","minute-short":"min.","remove-via-button-label":"Usuń punkt pośredni {{index}}","swap-order-button-label":"Odwróć początek i cel","via-point":"Punkt pośredni","via-point-index":"Punkt pośredni {{index}}","viapoint-slack-amount":"Czas postoju"}},sv:{translation:{"add-via-button-label":"Lägg till viapunkt","add-via-duration-button-label":"Ställ in varaktighet för viapunkten {{index}}","add-via-duration-button-label-close":"Stäng väljaren för varaktighet vid via-punkten {{index}}","add-via-duration-button-label-open":"Öppna väljaren för varaktighet vid via-punkten {{index}}","minute-short":"min","remove-via-button-label":"Ta bort viapunkt {{index}}","swap-order-button-label":"Sväng ruttens riktning till den motsatta","via-point":"Via punkt","via-point-index":"Via punkt {{index}}","viapoint-slack-amount":"Stoppets varaktighet"}}},defaultNS:"translation",react:{useSuspense:!0}});A.init();var R={"autosuggest-panel":"styles_autosuggest-panel__OaGWx","autosuggest-searchpanel-text":"styles_autosuggest-searchpanel-text__K2Sud","origin-input-container":"styles_origin-input-container__J-Iva","destination-input-container":"styles_destination-input-container__Q-nKR",row:"styles_row__AJFl2","viapoints-container":"styles_viapoints-container__S9HPW","viapoint-container":"styles_viapoint-container__Ev7XS","light-gray-background":"styles_light-gray-background__DO6vl","viapoint-before":"styles_viapoint-before__O0but","viapoint-input-container":"styles_viapoint-input-container__m84pk","viapoint-1":"styles_viapoint-1__-L3YV",viapoint:"styles_viapoint__l7OQr","viapoint-2":"styles_viapoint-2__nbTQE","viapoint-3":"styles_viapoint-3__euAwt","viapoint-4":"styles_viapoint-4__zT4lg","viapoint-5":"styles_viapoint-5__Nv3uU","viapoint-slack-time":"styles_viapoint-slack-time__RF3rg","select-wrapper":"styles_select-wrapper__ZbWuX","via-point-button-container":"styles_via-point-button-container__Oxyk8","input-viapoint-slack-container":"styles_input-viapoint-slack-container__4T7LG","itinerary-search-control":"styles_itinerary-search-control__9A4Y-",opposite:"styles_opposite__aI-Yn","add-via-point":"styles_add-via-point__q5tPF","add-via-point-slack":"styles_add-via-point-slack__aYNIN","remove-via-point":"styles_remove-via-point__1ys9T","combobox-icon":"styles_combobox-icon__s8Fqp","time-input-icon":"styles_time-input-icon__4xP1Q","rectangle-container":"styles_rectangle-container__kXQDW",rectangle:"styles_rectangle__1ryOy","search-panel-whitespace":"styles_search-panel-whitespace__YsiJN"};x(".styles_autosuggest-panel__OaGWx {\n width: 100%;\n}\n\n.styles_autosuggest-searchpanel-text__K2Sud {\n font-size: 24px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.8px;\n color: #333;\n line-height: 1;\n margin-bottom: 17px;\n margin-top: unset;\n}\n@media screen and (min-width: 768px) {\n .styles_autosuggest-searchpanel-text__K2Sud {\n letter-spacing: -0.8px;\n line-height: 27px;\n margin-bottom: 21px;\n }\n}\n\n.styles_origin-input-container__J-Iva,\n.styles_destination-input-container__Q-nKR {\n display: flex;\n flex: 1 0 100%;\n}\n.styles_origin-input-container__J-Iva input[type=text],\n.styles_destination-input-container__Q-nKR input[type=text] {\n margin: 0;\n}\n\n.styles_row__AJFl2 {\n display: flex;\n flex-direction: row;\n}\n\n.styles_viapoints-container__S9HPW {\n display: flex;\n flex-direction: column;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS {\n display: flex;\n flex: 1 0 100%;\n min-height: 50px;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS:first-child {\n margin-top: 6px;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS:not(:first-child) {\n margin-top: 3px;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS:last-child {\n margin-bottom: 6px;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS .styles_light-gray-background__DO6vl {\n display: flex;\n padding: 3px 0;\n flex-direction: column;\n background: #f2f5f7;\n border-radius: 5px;\n width: 100%;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS .styles_light-gray-background__DO6vl .styles_viapoint-before__O0but {\n display: flex;\n min-width: 27px;\n justify-content: center;\n align-items: center;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS .styles_light-gray-background__DO6vl .styles_viapoint-before__O0but svg {\n fill: #888;\n height: 20px;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS .styles_light-gray-background__DO6vl .styles_viapoint-input-container__m84pk {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS .styles_light-gray-background__DO6vl .styles_viapoint-input-container__m84pk input[type=text] {\n margin: 0;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS .styles_light-gray-background__DO6vl .styles_viapoint-input-container__m84pk.styles_viapoint-1__-L3YV > div.styles_viapoint__l7OQr {\n z-index: 15;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS .styles_light-gray-background__DO6vl .styles_viapoint-input-container__m84pk.styles_viapoint-2__nbTQE > div.styles_viapoint__l7OQr {\n z-index: 14;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS .styles_light-gray-background__DO6vl .styles_viapoint-input-container__m84pk.styles_viapoint-3__euAwt > div.styles_viapoint__l7OQr {\n z-index: 13;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS .styles_light-gray-background__DO6vl .styles_viapoint-input-container__m84pk.styles_viapoint-4__zT4lg > div.styles_viapoint__l7OQr {\n z-index: 12;\n}\n.styles_viapoints-container__S9HPW .styles_viapoint-container__Ev7XS .styles_light-gray-background__DO6vl .styles_viapoint-input-container__m84pk.styles_viapoint-5__Nv3uU > div.styles_viapoint__l7OQr {\n z-index: 11;\n}\n\n.styles_viapoint-slack-time__RF3rg {\n font-size: 13px;\n font-weight: normal;\n letter-spacing: -0.36px;\n color: #333;\n padding-left: 27px;\n padding-top: 12px;\n padding-bottom: 10px;\n}\n\n.styles_select-wrapper__ZbWuX {\n display: flex;\n height: 50px;\n margin-top: 9px;\n padding-left: 27px;\n padding-right: 47px;\n}\n\n.styles_via-point-button-container__Oxyk8 {\n display: flex;\n}\n.styles_via-point-button-container__Oxyk8 > div:nth-child(1) {\n order: 1;\n border-left: none;\n}\n.styles_via-point-button-container__Oxyk8 > div:nth-child(2) {\n order: 2;\n border-left: 1px solid rgba(151, 151, 151, 0.2);\n}\n\n.styles_input-viapoint-slack-container__4T7LG {\n display: flex;\n flex-direction: column;\n}\n\n.styles_itinerary-search-control__9A4Y- {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n max-height: 50px;\n min-width: var(--width);\n}\n.styles_itinerary-search-control__9A4Y- + .styles_itinerary-search-control__9A4Y- {\n border-left: 1px solid rgba(151, 151, 151, 0.2);\n}\n.styles_itinerary-search-control__9A4Y- .styles_opposite__aI-Yn {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer;\n}\n.styles_itinerary-search-control__9A4Y- .styles_opposite__aI-Yn svg {\n width: 19px;\n height: 17px;\n}\n.styles_itinerary-search-control__9A4Y- .styles_add-via-point__q5tPF {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer;\n}\n.styles_itinerary-search-control__9A4Y- .styles_add-via-point__q5tPF svg {\n width: 20px;\n height: 22px;\n}\n.styles_itinerary-search-control__9A4Y- .styles_add-via-point-slack__aYNIN {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 47px;\n cursor: pointer;\n}\n.styles_itinerary-search-control__9A4Y- .styles_add-via-point-slack__aYNIN svg {\n width: 18px;\n height: 19px;\n}\n.styles_itinerary-search-control__9A4Y- .styles_remove-via-point__1ys9T {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n max-height: 44px;\n min-width: 40px;\n cursor: pointer;\n}\n.styles_itinerary-search-control__9A4Y- .styles_remove-via-point__1ys9T svg {\n width: 14px;\n height: 14px;\n}\n\n.styles_combobox-icon__s8Fqp {\n color: var(--color);\n border-left: solid #888 1px;\n height: 35px;\n}\n.styles_combobox-icon__s8Fqp.styles_time-input-icon__4xP1Q {\n padding: 9px 13px 0 13px;\n}\n.styles_combobox-icon__s8Fqp.styles_time-input-icon__4xP1Q svg {\n width: 18px;\n height: 19px;\n}\n\n.styles_rectangle-container__kXQDW {\n display: block;\n position: relative;\n height: 9px;\n z-index: 19;\n}\n.styles_rectangle-container__kXQDW .styles_rectangle__1ryOy {\n position: absolute;\n width: 4px;\n height: 25px;\n border-radius: 2px;\n background-color: #ddd;\n margin-left: 25px;\n margin-top: -9px;\n}\n\n.styles_search-panel-whitespace__YsiJN {\n min-width: 40px;\n}");const I=["children","className","enabled","onClick","onKeyPress","wide"],j=()=>({}),q=e=>{if(void 0===e||f.default(e))return!0;const t=Object.keys(e);return 1===t.length||2===t.length&&t.includes("locationSlack")},T=e=>{let{children:t,className:n,enabled:i,onClick:a,onKeyPress:o,wide:s}=e,l=function(e,t){if(null==e)return{};var n,i,a=function(e,t){if(null==e)return{};var n={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(-1!==t.indexOf(i))continue;n[i]=e[i]}return n}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(i=0;i<o.length;i++)n=o[i],-1===t.indexOf(n)&&{}.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}(e,I);return h.default.createElement("div",{className:R["itinerary-search-control"],style:{"--width":s?"47px":"40px"}},a&&i&&h.default.createElement("div",Object.assign({},l,{className:n,onClick:a,onKeyPress:o,role:"button",tabIndex:"0"}),t))},z=(e,t,n=!1)=>{const i=e.indexOf(t);return i>-1&&e.splice(i,1),n?e.map(e=>e>t?e-1:e):e},W=e=>{const t=e&&(e.key||e.which||e.keyCode)||"";return!(!t||![13," ","Spacebar"].concat([32,"Enter"]).includes(t))&&(e.preventDefault(),!0)},Y=e=>e&&e.address||e&&e.gps&&e.ready&&"Nykyinen sijainti"||"",H=e=>e&&!0===e.gps?"position":"location";"production"!==process.env.NODE_ENV&&(T.propTypes={children:_.default.node,className:_.default.string.isRequired,enabled:_.default.bool.isRequired,onClick:_.default.func.isRequired,onKeyPress:_.default.func.isRequired,wide:_.default.bool}),T.defaultProps={children:void 0,wide:!1};const L="production"!==process.env.NODE_ENV?_.default.shape({address:_.default.string,lat:_.default.number,lon:_.default.number,locationSlack:_.default.number}):{};class M extends h.default.Component{constructor(e){super(e),b(this,"storeReference",e=>{this.setState(t=>({refs:[...t.refs,e]}))}),b(this,"handleFocusChange",()=>{const{destination:e}=this.props;e&&e.lat||this.state.refs[1].focus()}),b(this,"updateViaPoints",e=>{0!==e.length?this.props.updateViaPoints(e.filter(e=>!q(e))):this.props.updateViaPoints([])}),b(this,"handleToggleViaPointSlackClick",e=>{const{activeSlackInputs:t}=this.state;this.setState({activeSlackInputs:t.includes(e)?z(t,e):t.concat([e])})}),b(this,"handleViaPointSlackTimeSelected",(e,t)=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"EditViaPointStopDuration",category:"ItinerarySettings",name:e/60});const{viaPoints:n}=this.props;n[t].locationSlack=Number.parseInt(e,10),this.updateViaPoints(n)}),b(this,"handleViaPointLocationSelected",(e,t)=>{this.props.handleViaPointLocationSelected(e,t)}),b(this,"handleRemoveViaPointClick",e=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"RemoveJourneyViaPoint",category:"ItinerarySettings",name:null});const{activeSlackInputs:t}=this.state,{viaPoints:n}=this.props;n.splice(e,1),this.setState({activeSlackInputs:z(t,e,!0)},()=>this.updateViaPoints(n))}),b(this,"handleAddViaPointClick",()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"AddJourneyViaPoint",category:"ItinerarySettings",name:"QuickSettingsButton"});const{viaPoints:e}=this.props;e.push({}),this.setState(this.state)}),b(this,"handleSwapOrderClick",()=>{this.props.addAnalyticsEvent&&this.props.addAnalyticsEvent({action:"SwitchJourneyStartAndEndPointOrder",category:"ItinerarySettings",name:null});const{viaPoints:e}=this.props;e.reverse(),this.props.swapOrder()}),b(this,"getSlackDisplay",e=>`${e/60} ${this.props.t("minute-short",{lng:this.props.lang})}`),this.state={activeSlackInputs:[],refs:[]}}render(){const{origin:e,searchPanelText:t,searchContext:n,disableAutoFocus:i,viaPoints:a,originMobileLabel:s,destinationMobileLabel:l,fontWeights:r,onFocusChange:d,showSwapControl:c,showViapointControl:p,t:_,lang:f}=this.props,{primary:m}=this.props.colors,{activeSlackInputs:y}=this.state,b=(e=>{const t=[];for(let n=0;n<=9;n++){const i=10*n;t.push({displayName:`${i} ${e("minute-short")}`,value:60*i})}return t})(_),x=(e,t=0)=>e&&e.locationSlack||t,S=e=>y.includes(e);return h.default.createElement("div",{className:u.default(R["autosuggest-panel"],this.props.isMobile&&"small"),style:{"--color":m,"--font-weight-medium":r.medium}}," ",t?h.default.createElement("div",null,h.default.createElement("h1",{className:R["autosuggest-searchpanel-text"]}," ",t)):null,h.default.createElement("div",{className:R["origin-input-container"]},h.default.createElement(g.default,{appElement:this.props.appElement,icon:"originEllipse",id:"origin",autoFocus:!0!==i&&(!this.props.isMobile&&!e?.lat),storeRef:this.storeReference,refPoint:this.props.refPoint,className:H(e),placeholder:this.props.originPlaceHolder,value:Y(e),searchContext:n,getAutoSuggestIcons:this.props.getAutoSuggestIcons,onSelect:this.props.onSelect,onClear:this.props.onClear,focusChange:d||this.handleFocusChange,lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,colors:this.props.colors,mobileLabel:s,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(c||p)&&h.default.createElement(T,{className:R.opposite,enabled:c,onClick:()=>this.handleSwapOrderClick(),onKeyPress:e=>W(e)&&this.handleSwapOrderClick(),"aria-label":_("swap-order-button-label",{lng:f})},h.default.createElement(v.default,{img:"opposite",color:m}))),0===a.length&&h.default.createElement("div",{className:R["rectangle-container"]},h.default.createElement("div",{className:R.rectangle})),h.default.createElement(o.ReactSortable,{className:R["viapoints-container"],list:a,handle:`.${R["viapoint-before"]}`,animation:200,disabled:a.length<=1,setList:e=>{const t=e.filter(e=>!q(e));t.length>0&&this.props.updateViaPoints(t)}},a.map((e,t)=>h.default.createElement("div",{className:u.default(R["viapoint-container"]),key:`viapoint-${t}`},h.default.createElement("div",{className:R["light-gray-background"]},h.default.createElement("div",{className:R.row},h.default.createElement("div",{className:R["viapoint-before"],style:a.length>1?{cursor:"move"}:{}},a.length>1&&h.default.createElement(v.default,{img:"ellipsis",rotate:90,color:m})),h.default.createElement("div",{className:`${R["viapoint-input-container"]} ${R[`viapoint-${t+1}`]}`},h.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"via-point",ariaLabel:_("via-point-index",{index:t+1,lng:f}),autoFocus:!0!==i&&!this.props.isMobile,placeholder:"via-point",className:"viapoint",searchContext:n,refPoint:this.props.refPoint,value:e&&e.address||"",onSelect:this.props.onSelect,onClear:this.props.onClear,handleViaPoints:e=>this.handleViaPointLocationSelected(e,t),lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,getAutoSuggestIcons:this.props.getAutoSuggestIcons,isMobile:this.props.isMobile,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,colors:this.props.colors,showScroll:this.props.showScroll})),this.props.showSlackControl&&h.default.createElement(T,{className:R["add-via-point-slack"],enabled:this.props.showViapointControl,onClick:()=>this.handleToggleViaPointSlackClick(t),onKeyPress:e=>W(e)&&this.handleToggleViaPointSlackClick(t),"aria-label":_(S(t)?"add-via-duration-button-label-open":"add-via-duration-button-label-close",{index:t+1,lng:f}),wide:!0},h.default.createElement(v.default,{img:"time",color:m}))),!S(t)&&a[t]&&a[t].locationSlack>0&&h.default.createElement("span",{className:R["viapoint-slack-time"]},`${_("viapoint-slack-amount",{lng:f})}: ${this.getSlackDisplay(a[t].locationSlack)}`),h.default.createElement("div",{className:u.default(R["input-viapoint-slack-container"],!S(t)&&"collapsed")},h.default.createElement("div",{className:R["select-wrapper"]},h.default.createElement(V,{id:`viapoint-slack-${t}`,label:_("viapoint-slack-amount",{lng:f}),options:b,value:x(a[t]),viaPointIndex:t,icon:h.default.createElement("span",{className:`${R["combobox-icon"]} ${R["time-input-icon"]}`},h.default.createElement(v.default,{img:"time",color:m})),onSlackTimeSelected:this.handleViaPointSlackTimeSelected})))),h.default.createElement(T,{className:R["remove-via-point"],enabled:this.props.showViapointControl,onClick:()=>this.handleRemoveViaPointClick(t),onKeyPress:e=>W(e)&&this.handleRemoveViaPointClick(t),"aria-label":_("remove-via-button-label",{index:t+1,lng:f})},h.default.createElement(v.default,{img:"trash",color:m}))))),h.default.createElement("div",{className:R["destination-input-container"]},h.default.createElement(g.default,{appElement:this.props.appElement,icon:"mapMarker",id:"destination",autoFocus:!0!==i&&(!this.props.isMobile&&!Number.isNaN(e?.lat)),storeRef:this.storeReference,placeholder:this.props.destinationPlaceHolder,className:H(this.props.destination),getAutoSuggestIcons:this.props.getAutoSuggestIcons,searchContext:n,onSelect:this.props.onSelect,onClear:this.props.onClear,refPoint:this.props.refPoint,value:Y(this.props.destination),lang:this.props.lang,sources:this.props.sources,targets:this.props.targets,filterResults:this.props.filterResults,isMobile:this.props.isMobile,mobileLabel:l,fontWeights:this.props.fontWeights,modeSet:this.props.modeSet,colors:this.props.colors,showScroll:this.props.showScroll,isEmbedded:this.props.isEmbedded}),(c||p)&&h.default.createElement(T,{className:u.default(R["add-via-point"],R.more,a.length>4&&"collapsed"),enabled:p&&0===a.length,onClick:()=>this.handleAddViaPointClick(),onKeyPress:e=>W(e)&&this.handleAddViaPointClick(),"aria-label":_("add-via-button-label",{lng:f})},h.default.createElement(v.default,{img:"viapoint",width:1.25,height:1.375,color:m}))))}}b(M,"defaultProps",{origin:void 0,destination:void 0,viaPoints:[],originPlaceHolder:"give-origin",destinationPlaceHolder:"give-destination",swapOrder:void 0,updateViaPoints:()=>{},searchPanelText:void 0,sources:[],targets:[],filterResults:void 0,onClear:void 0,getAutoSuggestIcons:void 0,refPoint:void 0,addAnalyticsEvent:void 0,disableAutoFocus:!1,isMobile:!1,handleViaPointLocationSelected:void 0,originMobileLabel:null,destinationMobileLabel:null,modeSet:void 0,colors:l.defaultColors,fontWeights:{medium:500},showScroll:!1,onFocusChange:void 0,isEmbedded:!1,showSwapControl:!1,showViapointControl:!1,showSlackControl:!1}),"production"!==process.env.NODE_ENV&&(M.propTypes={appElement:_.default.string.isRequired,origin:L,destination:L,originPlaceHolder:_.default.string,destinationPlaceHolder:_.default.string,viaPoints:_.default.arrayOf(L),updateViaPoints:_.default.func,handleViaPointLocationSelected:_.default.func,swapOrder:_.default.func,searchPanelText:_.default.string,searchContext:_.default.shape({URL_PELIAS:_.default.string}).isRequired,onSelect:_.default.func.isRequired,onClear:_.default.func,addAnalyticsEvent:_.default.func,lang:_.default.string.isRequired,disableAutoFocus:_.default.bool,sources:_.default.arrayOf(_.default.string),targets:_.default.arrayOf(_.default.string),filterResults:_.default.func,isMobile:_.default.bool,originMobileLabel:_.default.string,destinationMobileLabel:_.default.string,refPoint:L,modeSet:_.default.string,colors:_.default.objectOf(_.default.string),getAutoSuggestIcons:_.default.objectOf(_.default.func),fontWeights:_.default.shape({medium:_.default.number}),showScroll:_.default.bool,onFocusChange:_.default.func,isEmbedded:_.default.bool,showSwapControl:_.default.bool,showViapointControl:_.default.bool,showSlackControl:_.default.bool,t:_.default.func.isRequired});const D=a.withTranslation()(M);e.default=e=>h.default.createElement(a.I18nextProvider,{i18n:A},h.default.createElement(D,e)),e.getEmptyViaPointPlaceHolder=j,Object.defineProperty(e,"__esModule",{value:!0})});
|
|
2
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuY2pzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdG9QcmltaXRpdmUuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvc3R5bGUtaW5qZWN0L2Rpc3Qvc3R5bGUtaW5qZWN0LmVzLmpzIiwiLi4vc3JjL2hlbHBlcnMvU2VsZWN0LmpzIiwiLi4vc3JjL2hlbHBlcnMvdHJhbnNsYXRpb25zLmpzIiwiLi4vc3JjL2hlbHBlcnMvaTE4bi5qcyIsIi4uL3NyYy9pbmRleC5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImZ1bmN0aW9uIF90eXBlb2Yobykge1xuICBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7XG5cbiAgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAobykge1xuICAgIHJldHVybiB0eXBlb2YgbztcbiAgfSA6IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIG8gJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgby5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG8gIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG87XG4gIH0sIF90eXBlb2Yobyk7XG59XG5leHBvcnQgeyBfdHlwZW9mIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmZ1bmN0aW9uIHRvUHJpbWl0aXZlKHQsIHIpIHtcbiAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZih0KSB8fCAhdCkgcmV0dXJuIHQ7XG4gIHZhciBlID0gdFtTeW1ib2wudG9QcmltaXRpdmVdO1xuICBpZiAodm9pZCAwICE9PSBlKSB7XG4gICAgdmFyIGkgPSBlLmNhbGwodCwgciB8fCBcImRlZmF1bHRcIik7XG4gICAgaWYgKFwib2JqZWN0XCIgIT0gX3R5cGVvZihpKSkgcmV0dXJuIGk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkBAdG9QcmltaXRpdmUgbXVzdCByZXR1cm4gYSBwcmltaXRpdmUgdmFsdWUuXCIpO1xuICB9XG4gIHJldHVybiAoXCJzdHJpbmdcIiA9PT0gciA/IFN0cmluZyA6IE51bWJlcikodCk7XG59XG5leHBvcnQgeyB0b1ByaW1pdGl2ZSBhcyBkZWZhdWx0IH07IiwiaW1wb3J0IHRvUHJvcGVydHlLZXkgZnJvbSBcIi4vdG9Qcm9wZXJ0eUtleS5qc1wiO1xuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KGUsIHIsIHQpIHtcbiAgcmV0dXJuIChyID0gdG9Qcm9wZXJ0eUtleShyKSkgaW4gZSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCByLCB7XG4gICAgdmFsdWU6IHQsXG4gICAgZW51bWVyYWJsZTogITAsXG4gICAgY29uZmlndXJhYmxlOiAhMCxcbiAgICB3cml0YWJsZTogITBcbiAgfSkgOiBlW3JdID0gdCwgZTtcbn1cbmV4cG9ydCB7IF9kZWZpbmVQcm9wZXJ0eSBhcyBkZWZhdWx0IH07IiwiZnVuY3Rpb24gc3R5bGVJbmplY3QoY3NzLCByZWYpIHtcbiAgaWYgKCByZWYgPT09IHZvaWQgMCApIHJlZiA9IHt9O1xuICB2YXIgaW5zZXJ0QXQgPSByZWYuaW5zZXJ0QXQ7XG5cbiAgaWYgKCFjc3MgfHwgdHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJykgeyByZXR1cm47IH1cblxuICB2YXIgaGVhZCA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2hlYWQnKVswXTtcbiAgdmFyIHN0eWxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgc3R5bGUudHlwZSA9ICd0ZXh0L2Nzcyc7XG5cbiAgaWYgKGluc2VydEF0ID09PSAndG9wJykge1xuICAgIGlmIChoZWFkLmZpcnN0Q2hpbGQpIHtcbiAgICAgIGhlYWQuaW5zZXJ0QmVmb3JlKHN0eWxlLCBoZWFkLmZpcnN0Q2hpbGQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkLmFwcGVuZENoaWxkKHN0eWxlKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gIH1cblxuICBpZiAoc3R5bGUuc3R5bGVTaGVldCkge1xuICAgIHN0eWxlLnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICBzdHlsZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBzdHlsZUluamVjdDtcbiIsImltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU2VsZWN0IH0gZnJvbSAnZG93bnNoaWZ0JztcbmltcG9ydCBzdHlsZXMgZnJvbSAnLi9zZWxlY3Quc2Nzcyc7XG5cbmNvbnN0IFNlbGVjdCA9ICh7XG4gIHZhbHVlLFxuICBvcHRpb25zLFxuICBvblNsYWNrVGltZVNlbGVjdGVkLFxuICB2aWFQb2ludEluZGV4LFxuICBpZCxcbiAgbGFiZWwsXG4gIGljb24sXG59KSA9PiB7XG4gIGNvbnN0IGxhYmVsSWQgPSBgJHtpZH0tbGFiZWxgO1xuICBjb25zdCBzZWxlY3RlZEl0ZW0gPSBvcHRpb25zLmZpbmQob3B0aW9uID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpO1xuXG4gIGNvbnN0IHtcbiAgICBpc09wZW4sXG4gICAgZ2V0VG9nZ2xlQnV0dG9uUHJvcHMsXG4gICAgZ2V0TWVudVByb3BzLFxuICAgIGdldEl0ZW1Qcm9wcyxcbiAgICBnZXRMYWJlbFByb3BzLFxuICAgIGhpZ2hsaWdodGVkSW5kZXgsXG4gIH0gPSB1c2VTZWxlY3Qoe1xuICAgIHNlbGVjdGVkSXRlbSxcbiAgICBpdGVtczogb3B0aW9ucyxcbiAgICBsYWJlbElkLFxuICAgIGlkLFxuICAgIGl0ZW1Ub1N0cmluZzogaXRlbSA9PiBpdGVtLmRpc3BsYXlOYW1lLFxuICAgIG9uU2VsZWN0ZWRJdGVtQ2hhbmdlOiAoeyBzZWxlY3RlZEl0ZW06IG5ld0l0ZW0gfSkgPT4ge1xuICAgICAgb25TbGFja1RpbWVTZWxlY3RlZChuZXdJdGVtLnZhbHVlLCB2aWFQb2ludEluZGV4KTtcbiAgICB9LFxuICB9KTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2NvbWJvYm94LWNvbnRhaW5lciddfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGFpbmVyfT5cbiAgICAgICAgPGRpdiB7Li4uZ2V0VG9nZ2xlQnV0dG9uUHJvcHMoKX0+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ2xlZnQtY29sdW1uJ119PlxuICAgICAgICAgICAgPGxhYmVsIHsuLi5nZXRMYWJlbFByb3BzKCl9IGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1sYWJlbCddfT5cbiAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgPC9sYWJlbD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaW5wdXR9PlxuICAgICAgICAgICAgICA8c3Bhbj57c2VsZWN0ZWRJdGVtLmRpc3BsYXlOYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICB7aWNvbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDx1bFxuICAgICAgICAgIGNsYXNzTmFtZT17Y3goW3N0eWxlcy5zdWdnZXN0aW9uc0NvbnRhaW5lck9wZW4sICFpc09wZW4gJiYgJ2hpZGRlbiddKX1cbiAgICAgICAgICB7Li4uZ2V0TWVudVByb3BzKCl9XG4gICAgICAgID5cbiAgICAgICAgICB7aXNPcGVuICYmXG4gICAgICAgICAgICBvcHRpb25zLm1hcCgob3B0aW9uLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICA8bGlcbiAgICAgICAgICAgICAgICBrZXk9e29wdGlvbi52YWx1ZX1cbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICAgICAgICAgIHN0eWxlcy5zdWdnZXN0aW9uLFxuICAgICAgICAgICAgICAgICAgaW5kZXggPT09IGhpZ2hsaWdodGVkSW5kZXggJiYgc3R5bGVzLnN1Z2dlc3Rpb25IaWdobGlnaHRlZCxcbiAgICAgICAgICAgICAgICBdKX1cbiAgICAgICAgICAgICAgICB7Li4uZ2V0SXRlbVByb3BzKHsgaW5kZXggfSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8c3Bhbj57b3B0aW9uLmRpc3BsYXlOYW1lfTwvc3Bhbj5cbiAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICkpfVxuICAgICAgICA8L3VsPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gICk7XG59O1xuXG5TZWxlY3QucHJvcFR5cGVzID0ge1xuICB2YWx1ZTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICBvblNsYWNrVGltZVNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvcHRpb25zOiBQcm9wVHlwZXMuYXJyYXlPZihcbiAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgZGlzcGxheU5hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIHZhbHVlOiBQcm9wVHlwZXMubnVtYmVyLmlzUmVxdWlyZWQsXG4gICAgfSkuaXNSZXF1aXJlZCxcbiAgKS5pc1JlcXVpcmVkLFxuICBpZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgaWNvbjogUHJvcFR5cGVzLm5vZGUuaXNSZXF1aXJlZCxcbiAgdmlhUG9pbnRJbmRleDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0O1xuIiwiY29uc3QgdHJhbnNsYXRpb25zID0ge1xuICBkZToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRsO8Z2UgWndpc2NoZW56aWVsIGhpbnp1JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTZXR6ZSBVbXN0ZWlnZXplaXQgZsO8ciBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdTY2hsaWXDn2UgVW1zdGVpZ2V6ZWl0LUF1c3dhaGwgZsO8ciBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ8OWZmZuZSBVbXN0ZWlnZXplaXQtQXVzd2FobCBmw7xyIFp3aXNjaGVuemllbCB7e2luZGV4fX0nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ0VudGZlcm5lIFp3aXNjaGVuemllbCB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ1RhdXNjaGUgU3RhcnQgbWl0IFppZWwnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdad2lzY2hlbnppZWwnLFxuICAgICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnVW1zdGVpZ2V6ZWl0JyxcbiAgICB9LFxuICB9LFxuICBlbjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnQWRkIHZpYSBwb2ludCcsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU2V0IHN0b3AgZHVyYXRpb24gYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnQ2xvc2Ugc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ09wZW4gc3RvcCBkdXJhdGlvbiBzZWxlY3RvciBhdCB2aWEgcG9pbnQge3tpbmRleH19JyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdSZW1vdmUgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnOiAnUmV2ZXJzZSBvcmlnaW4gYW5kIGRlc3RpbmF0aW9uJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVmlhIHBvaW50JyxcbiAgICAgICd2aWEtcG9pbnQtaW5kZXgnOiAnVmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAndmlhcG9pbnQtc2xhY2stYW1vdW50JzogJ1N0b3AgZHVyYXRpb24nLFxuICAgIH0sXG4gIH0sXG4gIGZpOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMaXPDpMOkIHbDpGxpcGlzdGUnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ0FzZXRhIHbDpGxpcGlzdGVlbGxlIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0F2YWEgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnU3VsamUgdsOkbGlwaXN0ZWVuIHt7aW5kZXh9fSBweXPDpGhkeWtzZW4ga2VzdG8gdmFsaXRzaW4nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ1BvaXN0YSB2w6RsaXBpc3RlIHt7aW5kZXh9fScsXG4gICAgICAnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnOiAnS8Okw6RubsOkIHJlaXRpbiBzdXVudGEgdmFzdGFra2Fpc2Vrc2knLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWw6RsaXBpc3RlJyxcbiAgICAgICd2aWEtcG9pbnQtaW5kZXgnOiAnVsOkbGlwaXN0ZSB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdQeXPDpGhkeWtzZW4ga2VzdG8nLFxuICAgIH0sXG4gIH0sXG4gIHBsOiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdEb2RhaiBwdW5rdCBwb8WbcmVkbmknLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1d5YmllcnogY3phcyBwb3N0b2p1IGRsYSBwdW5rdHUge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdaYW1rbmlqIHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPdHfDs3J6IHd5Ym9ybmlrIGN6YXN1IHBvc3RvanUgdyBwdW5rY2llIHt7aW5kZXh9fScsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbi4nLFxuICAgICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ1VzdcWEIHB1bmt0IHBvxZtyZWRuaSB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ09kd3LDs8SHIHBvY3rEhXRlayBpIGNlbCcsXG4gICAgICAndmlhLXBvaW50JzogJ1B1bmt0IHBvxZtyZWRuaScsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1B1bmt0IHBvxZtyZWRuaSB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdDemFzIHBvc3RvanUnLFxuICAgIH0sXG4gIH0sXG4gIHN2OiB7XG4gICAgdHJhbnNsYXRpb246IHtcbiAgICAgICdhZGQtdmlhLWJ1dHRvbi1sYWJlbCc6ICdMw6RnZyB0aWxsIHZpYXB1bmt0JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdTdMOkbGwgaW4gdmFyYWt0aWdoZXQgZsO2ciB2aWFwdW5rdGVuIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnU3TDpG5nIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnw5ZwcG5hIHbDpGxqYXJlbiBmw7ZyIHZhcmFrdGlnaGV0IHZpZCB2aWEtcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4nLFxuICAgICAgJ3JlbW92ZS12aWEtYnV0dG9uLWxhYmVsJzogJ1RhIGJvcnQgdmlhcHVua3Qge3tpbmRleH19JyxcbiAgICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdTdsOkbmcgcnV0dGVucyByaWt0bmluZyB0aWxsIGRlbiBtb3RzYXR0YScsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwdW5rdCcsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1ZpYSBwdW5rdCB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdTdG9wcGV0cyB2YXJha3RpZ2hldCcsXG4gICAgfSxcbiAgfSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHRyYW5zbGF0aW9ucztcbiIsImltcG9ydCB7IGNyZWF0ZUluc3RhbmNlIH0gZnJvbSAnaTE4bmV4dCc7XG5pbXBvcnQgdHJhbnNsYXRpb25zIGZyb20gJy4vdHJhbnNsYXRpb25zJztcblxuY29uc3QgaTE4biA9IGNyZWF0ZUluc3RhbmNlKHtcbiAgZmFsbGJhY2tMbmc6ICdmaScsXG4gIC8vIGRlYnVnOiB0cnVlLFxuICByZXNvdXJjZXM6IHRyYW5zbGF0aW9ucyxcbiAgZGVmYXVsdE5TOiAndHJhbnNsYXRpb24nLFxuICByZWFjdDoge1xuICAgIHVzZVN1c3BlbnNlOiB0cnVlLFxuICB9LFxufSk7XG5cbmkxOG4uaW5pdCgpO1xuXG5leHBvcnQgZGVmYXVsdCBpMThuO1xuIiwiLyogZXNsaW50LWRpc2FibGUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzICovXG5pbXBvcnQgY3ggZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IEkxOG5leHRQcm92aWRlciwgd2l0aFRyYW5zbGF0aW9uIH0gZnJvbSAncmVhY3QtaTE4bmV4dCc7XG5pbXBvcnQgeyBSZWFjdFNvcnRhYmxlIH0gZnJvbSAncmVhY3Qtc29ydGFibGVqcyc7XG5pbXBvcnQgRFRBdXRvU3VnZ2VzdCBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1hdXRvc3VnZ2VzdCc7XG5pbXBvcnQgSWNvbiwge1xuICBkZWZhdWx0Q29sb3JzLFxufSBmcm9tICdAZGlnaXRyYW5zaXQtY29tcG9uZW50L2RpZ2l0cmFuc2l0LWNvbXBvbmVudC1pY29uJztcbmltcG9ydCBpc0VtcHR5IGZyb20gJ2xvZGFzaC9pc0VtcHR5JztcbmltcG9ydCBTZWxlY3QgZnJvbSAnLi9oZWxwZXJzL1NlbGVjdCc7XG5pbXBvcnQgaTE4biBmcm9tICcuL2hlbHBlcnMvaTE4bic7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vaGVscGVycy9zdHlsZXMuc2Nzcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRFbXB0eVZpYVBvaW50UGxhY2VIb2xkZXIgPSAoKSA9PiAoe30pO1xuXG5jb25zdCBpc1ZpYVBvaW50RW1wdHkgPSB2aWFQb2ludCA9PiB7XG4gIGlmICh2aWFQb2ludCA9PT0gdW5kZWZpbmVkIHx8IGlzRW1wdHkodmlhUG9pbnQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHZpYVBvaW50KTtcbiAgcmV0dXJuIChcbiAgICBrZXlzLmxlbmd0aCA9PT0gMSB8fCAoa2V5cy5sZW5ndGggPT09IDIgJiYga2V5cy5pbmNsdWRlcygnbG9jYXRpb25TbGFjaycpKVxuICApO1xufTtcblxuY29uc3QgSXRpbmVyYXJ5U2VhcmNoQ29udHJvbCA9ICh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGVuYWJsZWQsXG4gIG9uQ2xpY2ssXG4gIG9uS2V5UHJlc3MsXG4gIHdpZGUsXG4gIC4uLnJlc3Rcbn0pID0+IChcbiAgPGRpdlxuICAgIGNsYXNzTmFtZT17c3R5bGVzWydpdGluZXJhcnktc2VhcmNoLWNvbnRyb2wnXX1cbiAgICBzdHlsZT17eyAnLS13aWR0aCc6IHdpZGUgPyAnNDdweCcgOiAnNDBweCcgfX1cbiAgPlxuICAgIHtvbkNsaWNrICYmIGVuYWJsZWQgJiYgKFxuICAgICAgPGRpdlxuICAgICAgICB7Li4ucmVzdH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIG9uS2V5UHJlc3M9e29uS2V5UHJlc3N9XG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICB0YWJJbmRleD1cIjBcIlxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L2Rpdj5cbiAgICApfVxuICA8L2Rpdj5cbik7XG5cbmNvbnN0IHVwZGF0ZVZpYVBvaW50U2xhY2sgPSAoXG4gIGFjdGl2ZVZpYVBvaW50U2xhY2tzLFxuICB1cGRhdGVkVmlhUG9pbnRJbmRleCxcbiAgdmlhUG9pbnRSZW1vdmVkID0gZmFsc2UsXG4pID0+IHtcbiAgY29uc3QgZm91bmRBdEluZGV4ID0gYWN0aXZlVmlhUG9pbnRTbGFja3MuaW5kZXhPZih1cGRhdGVkVmlhUG9pbnRJbmRleCk7XG4gIGlmIChmb3VuZEF0SW5kZXggPiAtMSkge1xuICAgIGFjdGl2ZVZpYVBvaW50U2xhY2tzLnNwbGljZShmb3VuZEF0SW5kZXgsIDEpO1xuICB9XG4gIHJldHVybiB2aWFQb2ludFJlbW92ZWRcbiAgICA/IGFjdGl2ZVZpYVBvaW50U2xhY2tzLm1hcCh2YWx1ZSA9PlxuICAgICAgICB2YWx1ZSA+IHVwZGF0ZWRWaWFQb2ludEluZGV4ID8gdmFsdWUgLSAxIDogdmFsdWUsXG4gICAgICApXG4gICAgOiBhY3RpdmVWaWFQb2ludFNsYWNrcztcbn07XG5cbmNvbnN0IGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudCA9IGV2ZW50ID0+IHtcbiAgY29uc3Qgc3BhY2UgPSBbMTMsICcgJywgJ1NwYWNlYmFyJ107XG4gIGNvbnN0IGVudGVyID0gWzMyLCAnRW50ZXInXTtcbiAgY29uc3Qga2V5ID0gKGV2ZW50ICYmIChldmVudC5rZXkgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQua2V5Q29kZSkpIHx8ICcnO1xuICBpZiAoIWtleSB8fCAhc3BhY2UuY29uY2F0KGVudGVyKS5pbmNsdWRlcyhrZXkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIHJldHVybiB0cnVlO1xufTtcblxuY29uc3QgdmFsdWUgPSBsb2NhdGlvbiA9PlxuICAobG9jYXRpb24gJiYgbG9jYXRpb24uYWRkcmVzcykgfHxcbiAgKGxvY2F0aW9uICYmIGxvY2F0aW9uLmdwcyAmJiBsb2NhdGlvbi5yZWFkeSAmJiAnTnlreWluZW4gc2lqYWludGknKSB8fFxuICAnJztcblxuY29uc3QgZ2V0TG9jYXRpb25UeXBlID0gbG9jYXRpb24gPT5cbiAgbG9jYXRpb24gJiYgbG9jYXRpb24uZ3BzID09PSB0cnVlID8gJ3Bvc2l0aW9uJyA6ICdsb2NhdGlvbic7XG5cbmNvbnN0IGdldFNsYWNrVGltZU9wdGlvbnMgPSB0ID0+IHtcbiAgY29uc3QgdGltZU9wdGlvbnMgPSBbXTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gOTsgaSsrKSB7XG4gICAgY29uc3QgdmFsdWVJbk1pbnV0ZXMgPSBpICogMTA7XG4gICAgdGltZU9wdGlvbnMucHVzaCh7XG4gICAgICBkaXNwbGF5TmFtZTogYCR7dmFsdWVJbk1pbnV0ZXN9ICR7dCgnbWludXRlLXNob3J0Jyl9YCxcbiAgICAgIHZhbHVlOiB2YWx1ZUluTWludXRlcyAqIDYwLFxuICAgIH0pO1xuICB9XG4gIHJldHVybiB0aW1lT3B0aW9ucztcbn07XG5cbkl0aW5lcmFyeVNlYXJjaENvbnRyb2wucHJvcFR5cGVzID0ge1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICBlbmFibGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICBvbktleVByZXNzOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB3aWRlOiBQcm9wVHlwZXMuYm9vbCxcbn07XG5cbkl0aW5lcmFyeVNlYXJjaENvbnRyb2wuZGVmYXVsdFByb3BzID0ge1xuICBjaGlsZHJlbjogdW5kZWZpbmVkLFxuICB3aWRlOiBmYWxzZSxcbn07XG5cbi8qKlxuICogUGFuZWwgdGhhdCByZW5kZXJzIHR3byBEVEF1dG9zdWdnZXN0IHNlYXJjaCBmaWVsZHMsIGluY2x1ZGluZyB2aWFwb2ludCBoYW5kbGluZ1xuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBzZWFyY2hDb250ZXh0ID0ge1xuICogICBpc1BlbGlhc0xvY2F0aW9uQXdhcmU6IGZhbHNlIC8vIHRydWUgLyBmYWxzZSBkb2VzIExldCBQZWxpYXMgc3VnZ2VzdCBiYXNlZCBvbiBjdXJyZW50IHVzZXIgbG9jYXRpb25cbiAqICAgbWluaW1hbFJlZ2V4cDogdW5kZWZpbmVkIC8vIHVzZWQgZm9yIHRlc3RpbmcgbWluLiByZWdleHAuIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKCcuezIsfScpLFxuICogICBsaW5lUmVnZXhwOiB1bmRlZmluZWQgLy8gIGlkZW50aWZ5IHNlYXJjaGVzIGZvciByb3V0ZSBudW1iZXJzL2xhYmVsczogYnVzIHwgdHJhaW4gfCBtZXRyby4gRm9yIGV4YW1wbGU6IG5ldyBSZWdFeHAoXG4gKiAgICAvLyAgICcoXlswLTldK1thLXpdPyR8Xlt5dWxlYXBpbmtydGR6XSR8KF5tWzEyXT9iPyQpKScsXG4gKiAgICAvLyAgJ2knLFxuICogICAgLy8gICksXG4gKiAgIFVSTF9QRUxJQVM6ICcnIC8vIHVybCBmb3IgcGVsaWFzIHNlYXJjaGVzXG4gKiAgIGZlZWRJRHM6IFsnSFNMJywgJ0hTTExhdXR0YSddIC8vIEZlZWRJZCdzIGxpa2UgIFtIU0wsIEhTTExhdXR0YV1cbiAqICAgZ2VvY29kaW5nU291cmNlczogWydvYScsJ29zbScsJ25sc2ZpJ10gIC8vIHNvdXJjZXMgZm9yIGdlb2NvZGluZ1xuICogICBnZW9jb2RpbmdTZWFyY2hQYXJhbXM7IHt9ICAvLyBTZWFyY2hwYXJtYXMgZnJvIGdlb2NvZGluZ1xuICogICBnZXRGYXZvdXJpdGVMb2NhdGlvbnM6ICgpID0+ICh7fSksICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgbG9jYXRpb25zLlxuICogICBnZXRGYXZvdXJpdGVTdG9wczogKCkgPT4gKHt9KSwgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgc3RvcHMuXG4gKiAgIGdldExhbmd1YWdlOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGN1cnJlbnQgbGFuZ3VhZ2UuXG4gKiAgIGdldEZhdm91cml0ZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGFycmF5IG9mIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldFBvc2l0aW9uczogKCkgPT4gKHt9KSwgICAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHVzZXIncyBnZW9sb2NhdGlvbi5cbiAqICAgZ2V0Um91dGVzUXVlcnk6ICgpID0+ICh7fSksICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIHJvdXRlcy5cbiAqICAgZ2V0U3RvcEFuZFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IGZldGNoZXMgZmF2b3VyaXRlIHN0b3BzIGFuZCBzdGF0aW9ucyBmcm9tIGdyYXBocWwgQVBJLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXNRdWVyeTogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIHJvdXRlcy5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zOiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIGZhdm91cml0ZSBiaWtlIHJlbnRhbCBzdGF0aW9uLlxuICogICBnZXRGYXZvdXJpdGVWZWhpY2xlUmVudGFsU3RhdGlvbnNRdWVyeTogKCkgPT4gKHt9KSwgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbnMuXG4gKiAgIHN0YXJ0TG9jYXRpb25XYXRjaDogKCkgPT4gKHt9KSwgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBsb2NhdGVzIHVzZXJzIGdlb2xvY2F0aW9uLlxuICogICBzYXZlU2VhcmNoOiAoKSA9PiAoe30pLCAgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgc2VhcmNoIHRvIG9sZCBzZWFyY2hlcyBzdG9yZS5cbiAqICAgY2xlYXJPbGRTZWFyY2hlczogKCkgPT4gKHt9KSwgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGdldEZ1dHVyZVJvdXRlczogKCkgPT4gKHt9KSwgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm4gZnV0dXJlIHJvdXRlc1xuICogICBzYXZlRnV0dXJlUm91dGU6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgc2F2ZXMgYSBmdXR1cmUgcm91dGVcbiAqICAgY2xlYXJGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IGNsZWFycyBmdXR1cmUgcm91dGVzXG4gKiB9O1xuICpcbiAqIGNvbnN0IG9yaWdpbiA9IHtcbiAqICBsYXQ6IDYwLjE2OTE5NixcbiAqICBsb246IDI0Ljk1NzY3NCxcbiAqICBhZGRyZXNzOiAnQWxla3NhbnRlcmlua2F0dSwgSGVsc2lua2knLFxuICogIHNldDogdHJ1ZSxcbiAqICByZWFkeTogdHJ1ZSxcbiAqIH1cbiAqXG4gKiBjb25zdCBkZXN0aW5hdGlvbiA9IHtcbiAqICAgbGF0OiA2MC4xOTkwOTMsXG4gKiAgIGxvbjogMjQuOTQwNTM2LFxuICogICBhZGRyZXNzOiAnT3Bhc3RpbnNpbHRhIDYsIEhlbHNpbmtpJyxcbiAqICAgc2V0OiB0cnVlLFxuICogICByZWFkeTogdHJ1ZSxcbiAqIH1cbiAqIG9uU2VsZWN0KGl0ZW0sIGlkKSB7XG4gKiAgcmV0dXJuIG51bGw7ICAvLyBEZWZpbmUgd2hhdCB0byBkbyB3aGVuIGEgc3VnZ2VzdGlvbiBpcyBiZWluZyBzZWxlY3RlZC4gTm9uZSBieSBkZWZhdWx0LlxuICogIH1cbiAqIG9uQ2xlYXIoaWQpIHtcbiAqICByZXR1cm4gbnVsbDsgIC8vIERlZmluZSB3aGF0IHRvIGRvIHdoZW4gYSBzdWdnZXN0aW9uIGlzIGJlaW5nIHNlbGVjdGVkLiBOb25lIGJ5IGRlZmF1bHQuXG4gKiB9XG4gKiBjb25zdCBnZXRBdXRvU3VnZ2VzdEljb25zOiB7XG4gKiAgIC8vIENhbGxlZCBmb3IgZXZlcnkgY2l0eSBiaWtlIHN0YXRpb24gcmVuZGVyZWQgYXMgYSBzZWFyY2ggc3VnZ2VzdGlvbi4gU2hvdWxkIHJldHVybiB0aGUgaWNvbiBhbmRcbiAqICAgLy8gY29sb3IgdXNlZCBmb3IgdGhhdCBzdGF0aW9uLiBUd28gaWNvbnMgYXJlIGF2YWlsYWJsZSwgJ2NpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQnIGFuZGl0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdC1zZWNvbmRhcnknLlxuICogICBjaXR5YmlrZXM6IHN0YXRpb24gPT4ge1xuICogICAgICByZXR1cm4gWydjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JywgJyNmMmI2MmQnXTtcbiAqICAgfVxuICogfVxuICogY29uc3QgdGFyZ2V0cyA9IFsnTG9jYXRpb25zJywgJ1N0b3BzJywgJ1JvdXRlcyddOyAvLyBEZWZpbmVzIHdoYXQgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgb3B0aW9ucyBhcmUgTG9jYXRpb25zLCBTdG9wcywgUm91dGVzLCBWZWhpY2xlUmVudGFsU3RhdGlvbnMsIEZ1dHVyZVJvdXRlcywgTWFwUG9zaXRpb24gYW5kIEN1cnJlbnRQb3NpdGlvbi4gTGVhdmUgZW1wdHkgdG8gc2VhcmNoIGFsbCB0YXJnZXRzLlxuICogY29uc3Qgc291cmNlcyA9IFsnRmF2b3VyaXRlJywgJ0hpc3RvcnknLCAnRGF0YXNvdXJjZSddIC8vIERlZmluZXMgd2hlcmUgeW91IGFyZSBzZWFyY2hpbmcuIGFsbCBhdmFpbGFibGUgYXJlOiBGYXZvdXJpdGUsIEhpc3RvcnkgKHByZXZpb3VzbHkgc2VhcmNoZWQgc2VhcmNoZXMpLCBhbmQgRGF0YXNvdXJjZS4gTGVhdmUgZW1wdHkgdG8gdXNlIGFsbCBzb3VyY2VzLlxuICogPERUQXV0b3N1Z2dlc3RQYW5lbFxuICogICAgYXBwRWxlbWVudD17YXBwRWxlbWVudH0gLy8gUmVxdWlyZWQuIFJvb3QgZWxlbWVudCdzIGlkLiBOZWVkZWQgZm9yIHJlYWN0LW1vZGFsIGNvbXBvbmVudC5cbiAqICAgIG9yaWdpbj17b3JpZ2lufSAvLyBTZWxlY3RlZCBvcmlnaW4gcG9pbnRcbiAqICAgIGRlc3RpbmF0aW9uPXtkZXN0aW5hdGlvbn0gLy8gU2VsZWN0ZWQgZGVzdGluYXRpb24gcG9pbnRcbiAqICAgIG9yaWdpblBsYWNlSG9sZGVyPXsnR2l2ZSBvcmlnaW4nfSAvLyBPcHRpb25hbCBHaXZlIHN0cmluZyBzaG93biBpbml0aWFsbHkgaW5zaWRlIG9yaWdpbiBzZWFyY2ggZmllbGRcbiAqICAgIGRlc3RpbmF0aW9uUGxhY2VIb2xkZXI9eydHaXZlIGRlc3RpbmF0aW9uJ30gLy8gT3B0aW9uYWwgR2l2ZSBzdHJpbmcgc2hvd24gaW5pdGFsbHkgaW5zaWRlIGRlc3RpbmF0aW9uIHNlYXJjaCBmaWVsZFxuICogICAgaW5pdGlhbFZpYVBvaW50cz17W119IC8vIE9wdGlvbmFsLiAgSWYgc2hvd1ZpYXBvaW50Q29udHJvbCBpcyBzZXQgdG8gdHJ1ZSwgcGFzcyBpbml0aWFsIHZpYSBwb2ludHMgdG8gdGhlIHBhbmVsLiBDdXJyZW50bHkgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHVwZGF0ZVZpYVBvaW50cz17KCkgPT4gcmV0dXJuIFtdfSAvLyBPcHRpb25hbC4gSWYgc2hvd1ZpYXBvaW50Q29udHJvbCBpcyBzZXQgdG8gdHJ1ZSwgZGVmaW5lIGhvdyB0byB1cGRhdGUgeW91ciB2aWEgcG9pbnQgbGlzdCB3aXRoIHRoaXMgZnVuY3Rpb24uIEN1cnJlbmx0eSBubyBkZWZhdWx0IGltcGxlbWVudGF0aW9uIGlzIGdpdmVuLlxuICogICAgc3dhcE9yZGVyPXsoKSA9PiByZXR1cm4gbnVsbH0gLy8gT3B0aW9uYWwuIElmIHNob3dTd2FwQ29udHJvbCBpcyBzZXQgdG8gdHJ1ZSwgZGVmaW5lIGhvdyB0byBzd2FwIG9yZGVyIG9mIHlvdXIgcG9pbnRzIChvcmlnaW4sIGRlc3RpbmF0aW9uLCB2aWFwb2ludHMpLiBDdXJyZW50bHkgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gKiAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXtnZXRBdXRvU3VnZ2VzdEljb25zfVxuICogICAgb25TZWxlY3Q9e3RoaXMub25TZWxlY3R9XG4gKiAgICBvbkNsZWFyPXt0aGlzLm9uQ2xlYXJ9XG4gKiAgICBsYW5nPVwiZmlcIiAvLyBEZWZpbmUgbGFuZ3VhZ2UgZmkgc3Ygb3IgZW4uXG4gKiAgICBhZGRBbmFseXRpY3NFdmVudD17bnVsbH0gLy8gT3B0aW9uYWwuIHlvdSBjYW4gcmVjb3JkIGFuIGFuYWx5dGljcyBldmVudCBpZiB5b3Ugd2lzaC4gaWYgcGFzc2VkLCBjb21wb25lbnQgd2lsbCBwYXNzIGFuIGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUgcGFyYW1ldGVycyB0byBhZGRBbmFseXRpY3NFdmVudFxuICogICAgZGlzYWJsZUF1dG9Gb2N1cz17ZmFsc2V9IC8vIE9wdGlvbmFsLiB1c2UgdGhpcyB0byBkaXNhYmxlIGF1dG9mb2N1cyBjb21wbGV0ZWx5IGZyb20gRFRBdXRvc3VnZ2VzdFBhbmVsXG4gKiAgICBzb3VyY2VzPXtzb3VyY2VzfVxuICogICAgdGFyZ2V0cz17dGFyZ2V0c31cbiAqICAgIGlzTW9iaWxlICAvLyBPcHRpb25hbC4gRGVmYXVsdHMgdG8gZmFsc2UuIFdoZXRoZXIgdG8gdXNlIG1vYmlsZSBzZWFyY2guXG4gKiAgICBvcmlnaW5Nb2JpbGVMYWJlbD1cIk9yaWdpbiBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3Igb3JpZ2luIGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWw9XCJEZXN0aW5hdGlvbiBsYWJlbFwiIC8vIE9wdGlvbmFsLiBDdXN0b20gbGFiZWwgdGV4dCBmb3IgZGVzdGluYXRpb24gZmllbGQgb24gbW9iaWxlLlxuICogICAgaGFuZGxlRm9jdXNDaGFuZ2U9eygpID0+IHt9fSAvLyBPcHRpb25hbC4gSWYgZGVmaW5lZCBvdmVycmlkZXMgZGVmYXVsdCBvbkZvY3VzQ2hhbmdlIGJlaGF2aW91clxuICogICAgc2hvd1N3YXBDb250cm9sPXtmYWxzZX0gLy8gT3B0aW9uYWwuXG4gKiAgICBzaG93VmlhcG9pbnRDb250cm9sPXtmYWxzZX0gLy8gT3B0aW9uYWwuXG4gKi9cblxuY29uc3QgbG9jYXRpb25TaGFwZSA9IFByb3BUeXBlcy5zaGFwZSh7XG4gIGFkZHJlc3M6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGxhdDogUHJvcFR5cGVzLm51bWJlcixcbiAgbG9uOiBQcm9wVHlwZXMubnVtYmVyLFxuICBsb2NhdGlvblNsYWNrOiBQcm9wVHlwZXMubnVtYmVyLFxufSk7XG5cbmNsYXNzIERUQXV0b3N1Z2dlc3RQYW5lbCBleHRlbmRzIFJlYWN0LkNvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgYXBwRWxlbWVudDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIG9yaWdpbjogbG9jYXRpb25TaGFwZSxcbiAgICBkZXN0aW5hdGlvbjogbG9jYXRpb25TaGFwZSxcbiAgICBvcmlnaW5QbGFjZUhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHZpYVBvaW50czogUHJvcFR5cGVzLmFycmF5T2YobG9jYXRpb25TaGFwZSksXG4gICAgdXBkYXRlVmlhUG9pbnRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBoYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIHN3YXBPcmRlcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgc2VhcmNoUGFuZWxUZXh0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIHNlYXJjaENvbnRleHQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBVUkxfUEVMSUFTOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICAgb25TZWxlY3Q6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgb25DbGVhcjogUHJvcFR5cGVzLmZ1bmMsXG4gICAgYWRkQW5hbHl0aWNzRXZlbnQ6IFByb3BUeXBlcy5mdW5jLFxuICAgIGxhbmc6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBkaXNhYmxlQXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzb3VyY2VzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICB0YXJnZXRzOiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBmaWx0ZXJSZXN1bHRzOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBpc01vYmlsZTogUHJvcFR5cGVzLmJvb2wsXG4gICAgb3JpZ2luTW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVzdGluYXRpb25Nb2JpbGVMYWJlbDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICByZWZQb2ludDogbG9jYXRpb25TaGFwZSxcbiAgICBtb2RlU2V0OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbG9yczogUHJvcFR5cGVzLm9iamVjdE9mKFByb3BUeXBlcy5zdHJpbmcpLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuZnVuYyksXG4gICAgZm9udFdlaWdodHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBtZWRpdW06IFByb3BUeXBlcy5udW1iZXIsXG4gICAgfSksXG4gICAgc2hvd1Njcm9sbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgb25Gb2N1c0NoYW5nZTogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNFbWJlZGRlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvd1N3YXBDb250cm9sOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzaG93VmlhcG9pbnRDb250cm9sOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBzaG93U2xhY2tDb250cm9sOiBQcm9wVHlwZXMuYm9vbCxcbiAgICB0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICB9O1xuXG4gIHN0YXRpYyBkZWZhdWx0UHJvcHMgPSB7XG4gICAgb3JpZ2luOiB1bmRlZmluZWQsXG4gICAgZGVzdGluYXRpb246IHVuZGVmaW5lZCxcbiAgICB2aWFQb2ludHM6IFtdLFxuICAgIG9yaWdpblBsYWNlSG9sZGVyOiAnZ2l2ZS1vcmlnaW4nLFxuICAgIGRlc3RpbmF0aW9uUGxhY2VIb2xkZXI6ICdnaXZlLWRlc3RpbmF0aW9uJyxcbiAgICBzd2FwT3JkZXI6IHVuZGVmaW5lZCxcbiAgICB1cGRhdGVWaWFQb2ludHM6ICgpID0+IHt9LFxuICAgIHNlYXJjaFBhbmVsVGV4dDogdW5kZWZpbmVkLFxuICAgIHNvdXJjZXM6IFtdLFxuICAgIHRhcmdldHM6IFtdLFxuICAgIGZpbHRlclJlc3VsdHM6IHVuZGVmaW5lZCxcbiAgICBvbkNsZWFyOiB1bmRlZmluZWQsXG4gICAgZ2V0QXV0b1N1Z2dlc3RJY29uczogdW5kZWZpbmVkLFxuICAgIHJlZlBvaW50OiB1bmRlZmluZWQsXG4gICAgYWRkQW5hbHl0aWNzRXZlbnQ6IHVuZGVmaW5lZCxcbiAgICBkaXNhYmxlQXV0b0ZvY3VzOiBmYWxzZSxcbiAgICBpc01vYmlsZTogZmFsc2UsXG4gICAgaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkOiB1bmRlZmluZWQsXG4gICAgb3JpZ2luTW9iaWxlTGFiZWw6IG51bGwsXG4gICAgZGVzdGluYXRpb25Nb2JpbGVMYWJlbDogbnVsbCxcbiAgICBtb2RlU2V0OiB1bmRlZmluZWQsXG4gICAgY29sb3JzOiBkZWZhdWx0Q29sb3JzLFxuICAgIGZvbnRXZWlnaHRzOiB7XG4gICAgICBtZWRpdW06IDUwMCxcbiAgICB9LFxuICAgIHNob3dTY3JvbGw6IGZhbHNlLFxuICAgIG9uRm9jdXNDaGFuZ2U6IHVuZGVmaW5lZCxcbiAgICBpc0VtYmVkZGVkOiBmYWxzZSxcbiAgICBzaG93U3dhcENvbnRyb2w6IGZhbHNlLFxuICAgIHNob3dWaWFwb2ludENvbnRyb2w6IGZhbHNlLFxuICAgIHNob3dTbGFja0NvbnRyb2w6IGZhbHNlLFxuICB9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7XG4gICAgICBhY3RpdmVTbGFja0lucHV0czogW10sXG4gICAgICByZWZzOiBbXSxcbiAgICB9O1xuICB9XG5cbiAgc3RvcmVSZWZlcmVuY2UgPSByZWYgPT4ge1xuICAgIHRoaXMuc2V0U3RhdGUocHJldlN0YXRlID0+ICh7IHJlZnM6IFsuLi5wcmV2U3RhdGUucmVmcywgcmVmXSB9KSk7XG4gIH07XG5cbiAgaGFuZGxlRm9jdXNDaGFuZ2UgPSAoKSA9PiB7XG4gICAgY29uc3QgeyBkZXN0aW5hdGlvbiB9ID0gdGhpcy5wcm9wcztcbiAgICBpZiAoIWRlc3RpbmF0aW9uIHx8ICFkZXN0aW5hdGlvbi5sYXQpIHtcbiAgICAgIHRoaXMuc3RhdGUucmVmc1sxXS5mb2N1cygpO1xuICAgIH1cbiAgfTtcblxuICB1cGRhdGVWaWFQb2ludHMgPSB2aWFQb2ludHMgPT4ge1xuICAgIGlmICh2aWFQb2ludHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLnByb3BzLnVwZGF0ZVZpYVBvaW50cyhbXSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMucHJvcHMudXBkYXRlVmlhUG9pbnRzKHZpYVBvaW50cy5maWx0ZXIodnAgPT4gIWlzVmlhUG9pbnRFbXB0eSh2cCkpKTtcbiAgfTtcblxuICBoYW5kbGVUb2dnbGVWaWFQb2ludFNsYWNrQ2xpY2sgPSB2aWFQb2ludEluZGV4ID0+IHtcbiAgICBjb25zdCB7IGFjdGl2ZVNsYWNrSW5wdXRzIH0gPSB0aGlzLnN0YXRlO1xuICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgYWN0aXZlU2xhY2tJbnB1dHM6IGFjdGl2ZVNsYWNrSW5wdXRzLmluY2x1ZGVzKHZpYVBvaW50SW5kZXgpXG4gICAgICAgID8gdXBkYXRlVmlhUG9pbnRTbGFjayhhY3RpdmVTbGFja0lucHV0cywgdmlhUG9pbnRJbmRleClcbiAgICAgICAgOiBhY3RpdmVTbGFja0lucHV0cy5jb25jYXQoW3ZpYVBvaW50SW5kZXhdKSxcbiAgICB9KTtcbiAgfTtcblxuICBoYW5kbGVWaWFQb2ludFNsYWNrVGltZVNlbGVjdGVkID0gKHNsYWNrVGltZUluU2Vjb25kcywgaSkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KHtcbiAgICAgICAgYWN0aW9uOiAnRWRpdFZpYVBvaW50U3RvcER1cmF0aW9uJyxcbiAgICAgICAgY2F0ZWdvcnk6ICdJdGluZXJhcnlTZXR0aW5ncycsXG4gICAgICAgIG5hbWU6IHNsYWNrVGltZUluU2Vjb25kcyAvIDYwLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHsgdmlhUG9pbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgIHZpYVBvaW50c1tpXS5sb2NhdGlvblNsYWNrID0gTnVtYmVyLnBhcnNlSW50KHNsYWNrVGltZUluU2Vjb25kcywgMTApO1xuICAgIHRoaXMudXBkYXRlVmlhUG9pbnRzKHZpYVBvaW50cyk7XG4gIH07XG5cbiAgaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkID0gKHZpYVBvaW50TG9jYXRpb24sIGkpID0+IHtcbiAgICB0aGlzLnByb3BzLmhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZCh2aWFQb2ludExvY2F0aW9uLCBpKTtcbiAgfTtcblxuICBoYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrID0gdmlhUG9pbnRJbmRleCA9PiB7XG4gICAgaWYgKHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuYWRkQW5hbHl0aWNzRXZlbnQoe1xuICAgICAgICBhY3Rpb246ICdSZW1vdmVKb3VybmV5VmlhUG9pbnQnLFxuICAgICAgICBjYXRlZ29yeTogJ0l0aW5lcmFyeVNldHRpbmdzJyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IGFjdGl2ZVNsYWNrSW5wdXRzIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IHsgdmlhUG9pbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgIHZpYVBvaW50cy5zcGxpY2UodmlhUG9pbnRJbmRleCwgMSk7XG4gICAgdGhpcy5zZXRTdGF0ZShcbiAgICAgIHtcbiAgICAgICAgYWN0aXZlU2xhY2tJbnB1dHM6IHVwZGF0ZVZpYVBvaW50U2xhY2soXG4gICAgICAgICAgYWN0aXZlU2xhY2tJbnB1dHMsXG4gICAgICAgICAgdmlhUG9pbnRJbmRleCxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApLFxuICAgICAgfSxcbiAgICAgICgpID0+IHRoaXMudXBkYXRlVmlhUG9pbnRzKHZpYVBvaW50cyksXG4gICAgKTtcbiAgfTtcblxuICBoYW5kbGVBZGRWaWFQb2ludENsaWNrID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KHtcbiAgICAgICAgYWN0aW9uOiAnQWRkSm91cm5leVZpYVBvaW50JyxcbiAgICAgICAgY2F0ZWdvcnk6ICdJdGluZXJhcnlTZXR0aW5ncycsXG4gICAgICAgIG5hbWU6ICdRdWlja1NldHRpbmdzQnV0dG9uJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHMucHVzaChnZXRFbXB0eVZpYVBvaW50UGxhY2VIb2xkZXIoKSk7XG4gICAgLy8gV2UgbmVlZCB0byB1cGRhdGUgdGhlIHN0YXRlIHNvIHRoYXQgcGxhY2VIb2xkZXIgd2lsbCBzaG93IHVwIGluIHBhbmVsLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9uby1hY2Nlc3Mtc3RhdGUtaW4tc2V0c3RhdGVcbiAgICB0aGlzLnNldFN0YXRlKHRoaXMuc3RhdGUpO1xuICB9O1xuXG4gIGhhbmRsZVN3YXBPcmRlckNsaWNrID0gKCkgPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KHtcbiAgICAgICAgYWN0aW9uOiAnU3dpdGNoSm91cm5leVN0YXJ0QW5kRW5kUG9pbnRPcmRlcicsXG4gICAgICAgIGNhdGVnb3J5OiAnSXRpbmVyYXJ5U2V0dGluZ3MnLFxuICAgICAgICBuYW1lOiBudWxsLFxuICAgICAgfSk7XG4gICAgfVxuICAgIGNvbnN0IHsgdmlhUG9pbnRzIH0gPSB0aGlzLnByb3BzO1xuICAgIHZpYVBvaW50cy5yZXZlcnNlKCk7XG4gICAgdGhpcy5wcm9wcy5zd2FwT3JkZXIoKTtcbiAgfTtcblxuICBnZXRTbGFja0Rpc3BsYXkgPSBzbGFja0luU2Vjb25kcyA9PlxuICAgIGAke3NsYWNrSW5TZWNvbmRzIC8gNjB9ICR7dGhpcy5wcm9wcy50KCdtaW51dGUtc2hvcnQnLCB7XG4gICAgICBsbmc6IHRoaXMucHJvcHMubGFuZyxcbiAgICB9KX1gO1xuXG4gIHJlbmRlcigpIHtcbiAgICBjb25zdCB7XG4gICAgICBvcmlnaW4sXG4gICAgICBzZWFyY2hQYW5lbFRleHQsXG4gICAgICBzZWFyY2hDb250ZXh0LFxuICAgICAgZGlzYWJsZUF1dG9Gb2N1cyxcbiAgICAgIHZpYVBvaW50cyxcbiAgICAgIG9yaWdpbk1vYmlsZUxhYmVsLFxuICAgICAgZGVzdGluYXRpb25Nb2JpbGVMYWJlbCxcbiAgICAgIGZvbnRXZWlnaHRzLFxuICAgICAgb25Gb2N1c0NoYW5nZSxcbiAgICAgIHNob3dTd2FwQ29udHJvbCxcbiAgICAgIHNob3dWaWFwb2ludENvbnRyb2wsXG4gICAgICB0LFxuICAgICAgbGFuZzogbG5nLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGNvbnN0IHsgcHJpbWFyeSB9ID0gdGhpcy5wcm9wcy5jb2xvcnM7XG4gICAgY29uc3QgeyBhY3RpdmVTbGFja0lucHV0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCBzbGFja1RpbWUgPSBnZXRTbGFja1RpbWVPcHRpb25zKHQpO1xuICAgIGNvbnN0IGRlZmF1bHRTbGFja1RpbWVWYWx1ZSA9IDA7XG4gICAgY29uc3QgZ2V0VmlhUG9pbnRTbGFja1RpbWVPckRlZmF1bHQgPSAoXG4gICAgICB2aWFQb2ludCxcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRTbGFja1RpbWVWYWx1ZSxcbiAgICApID0+ICh2aWFQb2ludCAmJiB2aWFQb2ludC5sb2NhdGlvblNsYWNrKSB8fCBkZWZhdWx0VmFsdWU7XG4gICAgY29uc3QgaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlID0gaW5kZXggPT5cbiAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzLmluY2x1ZGVzKGluZGV4KTtcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2N4KFtcbiAgICAgICAgICBzdHlsZXNbJ2F1dG9zdWdnZXN0LXBhbmVsJ10sXG4gICAgICAgICAge1xuICAgICAgICAgICAgc21hbGw6IHRoaXMucHJvcHMuaXNNb2JpbGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSl9XG4gICAgICAgIHN0eWxlPXt7XG4gICAgICAgICAgJy0tY29sb3InOiBwcmltYXJ5LFxuICAgICAgICAgICctLWZvbnQtd2VpZ2h0LW1lZGl1bSc6IGZvbnRXZWlnaHRzLm1lZGl1bSxcbiAgICAgICAgfX1cbiAgICAgID5cbiAgICAgICAgeycgJ31cbiAgICAgICAge3NlYXJjaFBhbmVsVGV4dCA/IChcbiAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGgxIGNsYXNzTmFtZT17c3R5bGVzWydhdXRvc3VnZ2VzdC1zZWFyY2hwYW5lbC10ZXh0J119PlxuICAgICAgICAgICAgICB7JyAnfVxuICAgICAgICAgICAgICB7c2VhcmNoUGFuZWxUZXh0fVxuICAgICAgICAgICAgPC9oMT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ29yaWdpbi1pbnB1dC1jb250YWluZXInXX0+XG4gICAgICAgICAgPERUQXV0b1N1Z2dlc3RcbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGljb249XCJvcmlnaW5FbGxpcHNlXCJcbiAgICAgICAgICAgIGlkPVwib3JpZ2luXCJcbiAgICAgICAgICAgIGF1dG9Gb2N1cz17XG4gICAgICAgICAgICAgIGRpc2FibGVBdXRvRm9jdXMgPT09IHRydWVcbiAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5wcm9wcy5pc01vYmlsZSAmJiAhb3JpZ2luPy5sYXRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0b3JlUmVmPXt0aGlzLnN0b3JlUmVmZXJlbmNlfVxuICAgICAgICAgICAgcmVmUG9pbnQ9e3RoaXMucHJvcHMucmVmUG9pbnR9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2dldExvY2F0aW9uVHlwZShvcmlnaW4pfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMub3JpZ2luUGxhY2VIb2xkZXJ9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWUob3JpZ2luKX1cbiAgICAgICAgICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gICAgICAgICAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXt0aGlzLnByb3BzLmdldEF1dG9TdWdnZXN0SWNvbnN9XG4gICAgICAgICAgICBvblNlbGVjdD17dGhpcy5wcm9wcy5vblNlbGVjdH1cbiAgICAgICAgICAgIG9uQ2xlYXI9e3RoaXMucHJvcHMub25DbGVhcn1cbiAgICAgICAgICAgIGZvY3VzQ2hhbmdlPXtvbkZvY3VzQ2hhbmdlIHx8IHRoaXMuaGFuZGxlRm9jdXNDaGFuZ2V9XG4gICAgICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAgICAgICBzb3VyY2VzPXt0aGlzLnByb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICB0YXJnZXRzPXt0aGlzLnByb3BzLnRhcmdldHN9XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzPXt0aGlzLnByb3BzLmZpbHRlclJlc3VsdHN9XG4gICAgICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgICAgIGNvbG9ycz17dGhpcy5wcm9wcy5jb2xvcnN9XG4gICAgICAgICAgICBtb2JpbGVMYWJlbD17b3JpZ2luTW9iaWxlTGFiZWx9XG4gICAgICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgICAgIG1vZGVTZXQ9e3RoaXMucHJvcHMubW9kZVNldH1cbiAgICAgICAgICAgIHNob3dTY3JvbGw9e3RoaXMucHJvcHMuc2hvd1Njcm9sbH1cbiAgICAgICAgICAgIGlzRW1iZWRkZWQ9e3RoaXMucHJvcHMuaXNFbWJlZGRlZH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHsoc2hvd1N3YXBDb250cm9sIHx8IHNob3dWaWFwb2ludENvbnRyb2wpICYmIChcbiAgICAgICAgICAgIDxJdGluZXJhcnlTZWFyY2hDb250cm9sXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm9wcG9zaXRlfVxuICAgICAgICAgICAgICBlbmFibGVkPXtzaG93U3dhcENvbnRyb2x9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlU3dhcE9yZGVyQ2xpY2soKX1cbiAgICAgICAgICAgICAgb25LZXlQcmVzcz17ZSA9PlxuICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiB0aGlzLmhhbmRsZVN3YXBPcmRlckNsaWNrKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJvcHBvc2l0ZVwiIGNvbG9yPXtwcmltYXJ5fSAvPlxuICAgICAgICAgICAgPC9JdGluZXJhcnlTZWFyY2hDb250cm9sPlxuICAgICAgICAgICl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7dmlhUG9pbnRzLmxlbmd0aCA9PT0gMCAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1sncmVjdGFuZ2xlLWNvbnRhaW5lciddfT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucmVjdGFuZ2xlfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgICA8UmVhY3RTb3J0YWJsZVxuICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWyd2aWFwb2ludHMtY29udGFpbmVyJ119XG4gICAgICAgICAgbGlzdD17dmlhUG9pbnRzfVxuICAgICAgICAgIGhhbmRsZT17YC4ke3N0eWxlc1sndmlhcG9pbnQtYmVmb3JlJ119YH1cbiAgICAgICAgICBhbmltYXRpb249ezIwMH1cbiAgICAgICAgICBkaXNhYmxlZD17dmlhUG9pbnRzLmxlbmd0aCA8PSAxfVxuICAgICAgICAgIHNldExpc3Q9e2l0ZW1zID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZpYVBvaW50cyA9IGl0ZW1zLmZpbHRlcih2cCA9PiAhaXNWaWFQb2ludEVtcHR5KHZwKSk7XG4gICAgICAgICAgICBpZiAobmV3VmlhUG9pbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgdGhpcy5wcm9wcy51cGRhdGVWaWFQb2ludHMobmV3VmlhUG9pbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9fVxuICAgICAgICA+XG4gICAgICAgICAge3ZpYVBvaW50cy5tYXAoKG8sIGkpID0+IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ3ZpYXBvaW50LWNvbnRhaW5lciddKX1cbiAgICAgICAgICAgICAga2V5PXtgdmlhcG9pbnQtJHtpfWB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snbGlnaHQtZ3JheS1iYWNrZ3JvdW5kJ119PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMucm93fT5cbiAgICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ3ZpYXBvaW50LWJlZm9yZSddfVxuICAgICAgICAgICAgICAgICAgICBzdHlsZT17dmlhUG9pbnRzLmxlbmd0aCA+IDEgPyB7IGN1cnNvcjogJ21vdmUnIH0gOiB7fX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3ZpYVBvaW50cy5sZW5ndGggPiAxICYmIChcbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJlbGxpcHNpc1wiIHJvdGF0ZT17OTB9IGNvbG9yPXtwcmltYXJ5fSAvPlxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goXG4gICAgICAgICAgICAgICAgICAgICAgYCR7c3R5bGVzWyd2aWFwb2ludC1pbnB1dC1jb250YWluZXInXX0gJHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlc1tgdmlhcG9pbnQtJHtpICsgMX1gXVxuICAgICAgICAgICAgICAgICAgICAgIH1gLFxuICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICA8RFRBdXRvU3VnZ2VzdFxuICAgICAgICAgICAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPVwibWFwTWFya2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICBpZD1cInZpYS1wb2ludFwiXG4gICAgICAgICAgICAgICAgICAgICAgYXJpYUxhYmVsPXt0KCd2aWEtcG9pbnQtaW5kZXgnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleDogaSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBsbmcsXG4gICAgICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgICAgICAgYXV0b0ZvY3VzPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRpc2FibGVBdXRvRm9jdXMgPT09IHRydWUgPyBmYWxzZSA6ICF0aGlzLnByb3BzLmlzTW9iaWxlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwidmlhLXBvaW50XCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ2aWFwb2ludFwiXG4gICAgICAgICAgICAgICAgICAgICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAgICAgICAgICAgICAgICAgICAgICByZWZQb2ludD17dGhpcy5wcm9wcy5yZWZQb2ludH1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17KG8gJiYgby5hZGRyZXNzKSB8fCAnJ31cbiAgICAgICAgICAgICAgICAgICAgICBvblNlbGVjdD17dGhpcy5wcm9wcy5vblNlbGVjdH1cbiAgICAgICAgICAgICAgICAgICAgICBvbkNsZWFyPXt0aGlzLnByb3BzLm9uQ2xlYXJ9XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVmlhUG9pbnRzPXtpdGVtID0+XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZChpdGVtLCBpKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAgICAgICAgICAgICAgICAgc291cmNlcz17dGhpcy5wcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgICAgICAgICAgIHRhcmdldHM9e3RoaXMucHJvcHMudGFyZ2V0c31cbiAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJSZXN1bHRzPXt0aGlzLnByb3BzLmZpbHRlclJlc3VsdHN9XG4gICAgICAgICAgICAgICAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICAgICAgICAgICAgICAgIGlzTW9iaWxlPXt0aGlzLnByb3BzLmlzTW9iaWxlfVxuICAgICAgICAgICAgICAgICAgICAgIGZvbnRXZWlnaHRzPXt0aGlzLnByb3BzLmZvbnRXZWlnaHRzfVxuICAgICAgICAgICAgICAgICAgICAgIG1vZGVTZXQ9e3RoaXMucHJvcHMubW9kZVNldH1cbiAgICAgICAgICAgICAgICAgICAgICBjb2xvcnM9e3RoaXMucHJvcHMuY29sb3JzfVxuICAgICAgICAgICAgICAgICAgICAgIHNob3dTY3JvbGw9e3RoaXMucHJvcHMuc2hvd1Njcm9sbH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAge3RoaXMucHJvcHMuc2hvd1NsYWNrQ29udHJvbCAmJiAoXG4gICAgICAgICAgICAgICAgICAgIDxJdGluZXJhcnlTZWFyY2hDb250cm9sXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXNbJ2FkZC12aWEtcG9pbnQtc2xhY2snXX1cbiAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkPXt0aGlzLnByb3BzLnNob3dWaWFwb2ludENvbnRyb2x9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gdGhpcy5oYW5kbGVUb2dnbGVWaWFQb2ludFNsYWNrQ2xpY2soaSl9XG4gICAgICAgICAgICAgICAgICAgICAgb25LZXlQcmVzcz17ZSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVRvZ2dsZVZpYVBvaW50U2xhY2tDbGljayhpKVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlKGkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHsgaW5kZXg6IGkgKyAxLCBsbmcgfSxcbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIHdpZGVcbiAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGltZz1cInRpbWVcIiBjb2xvcj17cHJpbWFyeX0gLz5cbiAgICAgICAgICAgICAgICAgICAgPC9JdGluZXJhcnlTZWFyY2hDb250cm9sPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB7IWlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZShpKSAmJlxuICAgICAgICAgICAgICAgICAgdmlhUG9pbnRzW2ldICYmXG4gICAgICAgICAgICAgICAgICB2aWFQb2ludHNbaV0ubG9jYXRpb25TbGFjayA+IDAgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlc1sndmlhcG9pbnQtc2xhY2stdGltZSddfT57YCR7dChcbiAgICAgICAgICAgICAgICAgICAgICAndmlhcG9pbnQtc2xhY2stYW1vdW50JyxcbiAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsbmcsXG4gICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgKX06ICR7dGhpcy5nZXRTbGFja0Rpc3BsYXkoXG4gICAgICAgICAgICAgICAgICAgICAgdmlhUG9pbnRzW2ldLmxvY2F0aW9uU2xhY2ssXG4gICAgICAgICAgICAgICAgICAgICl9YH08L3NwYW4+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goc3R5bGVzWydpbnB1dC12aWFwb2ludC1zbGFjay1jb250YWluZXInXSwge1xuICAgICAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6ICFpc1ZpYVBvaW50U2xhY2tUaW1lSW5wdXRBY3RpdmUoaSksXG4gICAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydzZWxlY3Qtd3JhcHBlciddfT5cbiAgICAgICAgICAgICAgICAgICAgPFNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgIGlkPXtgdmlhcG9pbnQtc2xhY2stJHtpfWB9XG4gICAgICAgICAgICAgICAgICAgICAgbGFiZWw9e3QoJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCcsIHsgbG5nIH0pfVxuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM9e3NsYWNrVGltZX1cbiAgICAgICAgICAgICAgICAgICAgICB2YWx1ZT17Z2V0VmlhUG9pbnRTbGFja1RpbWVPckRlZmF1bHQodmlhUG9pbnRzW2ldKX1cbiAgICAgICAgICAgICAgICAgICAgICB2aWFQb2ludEluZGV4PXtpfVxuICAgICAgICAgICAgICAgICAgICAgIGljb249e1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtgJHtzdHlsZXNbJ2NvbWJvYm94LWljb24nXX0gJHtzdHlsZXNbJ3RpbWUtaW5wdXQtaWNvbiddfWB9XG4gICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxJY29uIGltZz1cInRpbWVcIiBjb2xvcj17cHJpbWFyeX0gLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb25TbGFja1RpbWVTZWxlY3RlZD17dGhpcy5oYW5kbGVWaWFQb2ludFNsYWNrVGltZVNlbGVjdGVkfVxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8SXRpbmVyYXJ5U2VhcmNoQ29udHJvbFxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydyZW1vdmUtdmlhLXBvaW50J119XG4gICAgICAgICAgICAgICAgZW5hYmxlZD17dGhpcy5wcm9wcy5zaG93VmlhcG9pbnRDb250cm9sfVxuICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayhpKX1cbiAgICAgICAgICAgICAgICBvbktleVByZXNzPXtlID0+XG4gICAgICAgICAgICAgICAgICBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiZcbiAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayhpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPXt0KCdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCcsIHtcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBpICsgMSxcbiAgICAgICAgICAgICAgICAgIGxuZyxcbiAgICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxJY29uIGltZz1cInRyYXNoXCIgY29sb3I9e3ByaW1hcnl9IC8+XG4gICAgICAgICAgICAgIDwvSXRpbmVyYXJ5U2VhcmNoQ29udHJvbD5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICkpfVxuICAgICAgICA8L1JlYWN0U29ydGFibGU+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2Rlc3RpbmF0aW9uLWlucHV0LWNvbnRhaW5lciddfT5cbiAgICAgICAgICA8RFRBdXRvU3VnZ2VzdFxuICAgICAgICAgICAgYXBwRWxlbWVudD17dGhpcy5wcm9wcy5hcHBFbGVtZW50fVxuICAgICAgICAgICAgaWNvbj1cIm1hcE1hcmtlclwiXG4gICAgICAgICAgICBpZD1cImRlc3RpbmF0aW9uXCJcbiAgICAgICAgICAgIGF1dG9Gb2N1cz17XG4gICAgICAgICAgICAgIGRpc2FibGVBdXRvRm9jdXMgPT09IHRydWVcbiAgICAgICAgICAgICAgICA/IGZhbHNlXG4gICAgICAgICAgICAgICAgOiAhdGhpcy5wcm9wcy5pc01vYmlsZSAmJiAhTnVtYmVyLmlzTmFOKG9yaWdpbj8ubGF0KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3RvcmVSZWY9e3RoaXMuc3RvcmVSZWZlcmVuY2V9XG4gICAgICAgICAgICBwbGFjZWhvbGRlcj17dGhpcy5wcm9wcy5kZXN0aW5hdGlvblBsYWNlSG9sZGVyfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMb2NhdGlvblR5cGUodGhpcy5wcm9wcy5kZXN0aW5hdGlvbil9XG4gICAgICAgICAgICBnZXRBdXRvU3VnZ2VzdEljb25zPXt0aGlzLnByb3BzLmdldEF1dG9TdWdnZXN0SWNvbnN9XG4gICAgICAgICAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMucHJvcHMub25TZWxlY3R9XG4gICAgICAgICAgICBvbkNsZWFyPXt0aGlzLnByb3BzLm9uQ2xlYXJ9XG4gICAgICAgICAgICByZWZQb2ludD17dGhpcy5wcm9wcy5yZWZQb2ludH1cbiAgICAgICAgICAgIHZhbHVlPXt2YWx1ZSh0aGlzLnByb3BzLmRlc3RpbmF0aW9uKX1cbiAgICAgICAgICAgIGxhbmc9e3RoaXMucHJvcHMubGFuZ31cbiAgICAgICAgICAgIHNvdXJjZXM9e3RoaXMucHJvcHMuc291cmNlc31cbiAgICAgICAgICAgIHRhcmdldHM9e3RoaXMucHJvcHMudGFyZ2V0c31cbiAgICAgICAgICAgIGZpbHRlclJlc3VsdHM9e3RoaXMucHJvcHMuZmlsdGVyUmVzdWx0c31cbiAgICAgICAgICAgIGlzTW9iaWxlPXt0aGlzLnByb3BzLmlzTW9iaWxlfVxuICAgICAgICAgICAgbW9iaWxlTGFiZWw9e2Rlc3RpbmF0aW9uTW9iaWxlTGFiZWx9XG4gICAgICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgICAgIG1vZGVTZXQ9e3RoaXMucHJvcHMubW9kZVNldH1cbiAgICAgICAgICAgIGNvbG9ycz17dGhpcy5wcm9wcy5jb2xvcnN9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgICBpc0VtYmVkZGVkPXt0aGlzLnByb3BzLmlzRW1iZWRkZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7KHNob3dTd2FwQ29udHJvbCB8fCBzaG93VmlhcG9pbnRDb250cm9sKSAmJiAoXG4gICAgICAgICAgICA8SXRpbmVyYXJ5U2VhcmNoQ29udHJvbFxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KHN0eWxlc1snYWRkLXZpYS1wb2ludCddLCBzdHlsZXMubW9yZSwge1xuICAgICAgICAgICAgICAgIGNvbGxhcHNlZDogdmlhUG9pbnRzLmxlbmd0aCA+IDQsXG4gICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICBlbmFibGVkPXtzaG93VmlhcG9pbnRDb250cm9sICYmIHZpYVBvaW50cy5sZW5ndGggPT09IDB9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlQWRkVmlhUG9pbnRDbGljaygpfVxuICAgICAgICAgICAgICBvbktleVByZXNzPXtlID0+XG4gICAgICAgICAgICAgICAgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmIHRoaXMuaGFuZGxlQWRkVmlhUG9pbnRDbGljaygpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnYWRkLXZpYS1idXR0b24tbGFiZWwnLCB7IGxuZyB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb25cbiAgICAgICAgICAgICAgICBpbWc9XCJ2aWFwb2ludFwiXG4gICAgICAgICAgICAgICAgd2lkdGg9ezEuMjV9XG4gICAgICAgICAgICAgICAgaGVpZ2h0PXsxLjM3NX1cbiAgICAgICAgICAgICAgICBjb2xvcj17cHJpbWFyeX1cbiAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIDwvSXRpbmVyYXJ5U2VhcmNoQ29udHJvbD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgICk7XG4gIH1cbn1cblxuY29uc3QgRFRBdXRvc3VnZ2VzdFBhbmVsV2l0aFRyYW5zbGF0aW9uID0gd2l0aFRyYW5zbGF0aW9uKCkoRFRBdXRvc3VnZ2VzdFBhbmVsKTtcblxuZXhwb3J0IGRlZmF1bHQgcHJvcHMgPT4ge1xuICByZXR1cm4gKFxuICAgIDxJMThuZXh0UHJvdmlkZXIgaTE4bj17aTE4bn0+XG4gICAgICA8RFRBdXRvc3VnZ2VzdFBhbmVsV2l0aFRyYW5zbGF0aW9uIHsuLi5wcm9wc30gLz5cbiAgICA8L0kxOG5leHRQcm92aWRlcj5cbiAgKTtcbn07XG4iLCJpbXBvcnQgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiLi9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzXCI7XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkge1xuICBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307XG4gIHZhciBvLFxuICAgIHIsXG4gICAgaSA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHIsIGUpIHtcbiAgaWYgKG51bGwgPT0gcikgcmV0dXJuIHt9O1xuICB2YXIgdCA9IHt9O1xuICBmb3IgKHZhciBuIGluIHIpIGlmICh7fS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIG4pKSB7XG4gICAgaWYgKC0xICE9PSBlLmluZGV4T2YobikpIGNvbnRpbnVlO1xuICAgIHRbbl0gPSByW25dO1xuICB9XG4gIHJldHVybiB0O1xufVxuZXhwb3J0IHsgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgYXMgZGVmYXVsdCB9OyJdLCJuYW1lcyI6WyJfdHlwZW9mIiwibyIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiY29uc3RydWN0b3IiLCJwcm90b3R5cGUiLCJ0b1Byb3BlcnR5S2V5IiwidCIsImkiLCJyIiwiZSIsInRvUHJpbWl0aXZlIiwiY2FsbCIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9kZWZpbmVQcm9wZXJ0eSIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwidmFsdWUiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJzdHlsZUluamVjdCIsImNzcyIsInJlZiIsImluc2VydEF0IiwiZG9jdW1lbnQiLCJoZWFkIiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJzdHlsZSIsImNyZWF0ZUVsZW1lbnQiLCJ0eXBlIiwiZmlyc3RDaGlsZCIsImluc2VydEJlZm9yZSIsImFwcGVuZENoaWxkIiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJjcmVhdGVUZXh0Tm9kZSIsIlNlbGVjdCIsIm9wdGlvbnMiLCJvblNsYWNrVGltZVNlbGVjdGVkIiwidmlhUG9pbnRJbmRleCIsImlkIiwibGFiZWwiLCJpY29uIiwibGFiZWxJZCIsInNlbGVjdGVkSXRlbSIsImZpbmQiLCJvcHRpb24iLCJpc09wZW4iLCJnZXRUb2dnbGVCdXR0b25Qcm9wcyIsImdldE1lbnVQcm9wcyIsImdldEl0ZW1Qcm9wcyIsImdldExhYmVsUHJvcHMiLCJoaWdobGlnaHRlZEluZGV4IiwidXNlU2VsZWN0IiwiaXRlbXMiLCJpdGVtVG9TdHJpbmciLCJpdGVtIiwiZGlzcGxheU5hbWUiLCJvblNlbGVjdGVkSXRlbUNoYW5nZSIsIm5ld0l0ZW0iLCJSZWFjdCIsImNsYXNzTmFtZSIsInN0eWxlcyIsImFzc2lnbiIsImN4IiwibWFwIiwiaW5kZXgiLCJrZXkiLCJwcm9jZXNzIiwiZW52IiwiTk9ERV9FTlYiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJudW1iZXIiLCJpc1JlcXVpcmVkIiwiZnVuYyIsImFycmF5T2YiLCJzaGFwZSIsInN0cmluZyIsIm5vZGUiLCJpMThuIiwiY3JlYXRlSW5zdGFuY2UiLCJmYWxsYmFja0xuZyIsInJlc291cmNlcyIsImRlIiwidHJhbnNsYXRpb24iLCJlbiIsImZpIiwicGwiLCJzdiIsImRlZmF1bHROUyIsInJlYWN0IiwidXNlU3VzcGVuc2UiLCJpbml0IiwiZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyIiwiaXNWaWFQb2ludEVtcHR5IiwidmlhUG9pbnQiLCJ1bmRlZmluZWQiLCJpc0VtcHR5Iiwia2V5cyIsImxlbmd0aCIsImluY2x1ZGVzIiwiSXRpbmVyYXJ5U2VhcmNoQ29udHJvbCIsIl9yZWYiLCJjaGlsZHJlbiIsImVuYWJsZWQiLCJvbkNsaWNrIiwib25LZXlQcmVzcyIsIndpZGUiLCJyZXN0IiwibiIsImhhc093blByb3BlcnR5IiwiaW5kZXhPZiIsIm9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsInJvbGUiLCJ0YWJJbmRleCIsInVwZGF0ZVZpYVBvaW50U2xhY2siLCJhY3RpdmVWaWFQb2ludFNsYWNrcyIsInVwZGF0ZWRWaWFQb2ludEluZGV4IiwidmlhUG9pbnRSZW1vdmVkIiwiZm91bmRBdEluZGV4Iiwic3BsaWNlIiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IiwiZXZlbnQiLCJ3aGljaCIsImtleUNvZGUiLCJjb25jYXQiLCJwcmV2ZW50RGVmYXVsdCIsImxvY2F0aW9uIiwiYWRkcmVzcyIsImdwcyIsInJlYWR5IiwiZ2V0TG9jYXRpb25UeXBlIiwiYm9vbCIsImRlZmF1bHRQcm9wcyIsImxvY2F0aW9uU2hhcGUiLCJsYXQiLCJsb24iLCJsb2NhdGlvblNsYWNrIiwiRFRBdXRvc3VnZ2VzdFBhbmVsIiwiQ29tcG9uZW50IiwicHJvcHMiLCJzdXBlciIsInRoaXMiLCJzZXRTdGF0ZSIsInByZXZTdGF0ZSIsInJlZnMiLCJkZXN0aW5hdGlvbiIsInN0YXRlIiwiZm9jdXMiLCJ2aWFQb2ludHMiLCJ1cGRhdGVWaWFQb2ludHMiLCJmaWx0ZXIiLCJ2cCIsImFjdGl2ZVNsYWNrSW5wdXRzIiwic2xhY2tUaW1lSW5TZWNvbmRzIiwiYWRkQW5hbHl0aWNzRXZlbnQiLCJhY3Rpb24iLCJjYXRlZ29yeSIsIm5hbWUiLCJwYXJzZUludCIsInZpYVBvaW50TG9jYXRpb24iLCJoYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQiLCJwdXNoIiwicmV2ZXJzZSIsInN3YXBPcmRlciIsInNsYWNrSW5TZWNvbmRzIiwibG5nIiwibGFuZyIsInJlbmRlciIsIm9yaWdpbiIsInNlYXJjaFBhbmVsVGV4dCIsInNlYXJjaENvbnRleHQiLCJkaXNhYmxlQXV0b0ZvY3VzIiwib3JpZ2luTW9iaWxlTGFiZWwiLCJkZXN0aW5hdGlvbk1vYmlsZUxhYmVsIiwiZm9udFdlaWdodHMiLCJvbkZvY3VzQ2hhbmdlIiwic2hvd1N3YXBDb250cm9sIiwic2hvd1ZpYXBvaW50Q29udHJvbCIsInByaW1hcnkiLCJjb2xvcnMiLCJzbGFja1RpbWUiLCJ0aW1lT3B0aW9ucyIsInZhbHVlSW5NaW51dGVzIiwiZ2V0U2xhY2tUaW1lT3B0aW9ucyIsImdldFZpYVBvaW50U2xhY2tUaW1lT3JEZWZhdWx0IiwiZGVmYXVsdFZhbHVlIiwiaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlIiwiaXNNb2JpbGUiLCJtZWRpdW0iLCJEVEF1dG9TdWdnZXN0IiwiYXBwRWxlbWVudCIsImF1dG9Gb2N1cyIsInN0b3JlUmVmIiwic3RvcmVSZWZlcmVuY2UiLCJyZWZQb2ludCIsInBsYWNlaG9sZGVyIiwib3JpZ2luUGxhY2VIb2xkZXIiLCJnZXRBdXRvU3VnZ2VzdEljb25zIiwib25TZWxlY3QiLCJvbkNsZWFyIiwiZm9jdXNDaGFuZ2UiLCJoYW5kbGVGb2N1c0NoYW5nZSIsInNvdXJjZXMiLCJ0YXJnZXRzIiwiZmlsdGVyUmVzdWx0cyIsIm1vYmlsZUxhYmVsIiwibW9kZVNldCIsInNob3dTY3JvbGwiLCJpc0VtYmVkZGVkIiwib3Bwb3NpdGUiLCJoYW5kbGVTd2FwT3JkZXJDbGljayIsIkljb24iLCJpbWciLCJjb2xvciIsInJlY3RhbmdsZSIsIlJlYWN0U29ydGFibGUiLCJsaXN0IiwiaGFuZGxlIiwiYW5pbWF0aW9uIiwiZGlzYWJsZWQiLCJzZXRMaXN0IiwibmV3VmlhUG9pbnRzIiwicm93IiwiY3Vyc29yIiwicm90YXRlIiwiYXJpYUxhYmVsIiwiaGFuZGxlVmlhUG9pbnRzIiwic2hvd1NsYWNrQ29udHJvbCIsImhhbmRsZVRvZ2dsZVZpYVBvaW50U2xhY2tDbGljayIsImdldFNsYWNrRGlzcGxheSIsImhhbmRsZVZpYVBvaW50U2xhY2tUaW1lU2VsZWN0ZWQiLCJoYW5kbGVSZW1vdmVWaWFQb2ludENsaWNrIiwiaXNOYU4iLCJkZXN0aW5hdGlvblBsYWNlSG9sZGVyIiwibW9yZSIsImhhbmRsZUFkZFZpYVBvaW50Q2xpY2siLCJ3aWR0aCIsImhlaWdodCIsImRlZmF1bHRDb2xvcnMiLCJVUkxfUEVMSUFTIiwib2JqZWN0T2YiLCJEVEF1dG9zdWdnZXN0UGFuZWxXaXRoVHJhbnNsYXRpb24iLCJ3aXRoVHJhbnNsYXRpb24iLCJJMThuZXh0UHJvdmlkZXIiXSwibWFwcGluZ3MiOiI4aENBQUEsU0FBU0EsRUFBUUMsR0FHZixPQUFPRCxFQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FDN0YsY0FBY0EsQ0FDaEIsRUFBSSxTQUFVQSxHQUNaLE9BQU9BLEdBQUssbUJBQXFCQyxRQUFVRCxFQUFFRyxjQUFnQkYsUUFBVUQsSUFBTUMsT0FBT0csVUFBWSxnQkFBa0JKLENBQ3BILEVBQUdELEVBQVFDLEVBQ2IsQ0NOQSxTQUFTSyxFQUFjQyxHQUNyQixJQUFJQyxFQ0ZOLFNBQXFCRCxFQUFHRSxHQUN0QixHQUFJLFVBQVlULEVBQVFPLEtBQU9BLEVBQUcsT0FBT0EsRUFDekMsSUFBSUcsRUFBSUgsRUFBRUwsT0FBT1MsYUFDakIsUUFBSSxJQUFXRCxFQUFHLENBQ2hCLElBQUlGLEVBQUlFLEVBQUVFLEtBQUtMLEVBQUdFLEdBQ2xCLEdBQUksVUFBWVQsRUFBUVEsR0FBSSxPQUFPQSxFQUNuQyxNQUFNLElBQUlLLFVBQVUsK0NBQ3RCLENBQ0EsT0FBUSxXQUFhSixFQUFJSyxPQUFTQyxRQUFRUixFQUM1QyxDRFBVSSxDQUFZSixFQUFHLFVBQ3ZCLE1BQU8sVUFBWVAsRUFBUVEsR0FBS0EsRUFBSUEsRUFBSSxFQUMxQyxDRUpBLFNBQVNRLEVBQWdCTixFQUFHRCxFQUFHRixHQUM3QixPQUFRRSxFQUFJSCxFQUFjRyxNQUFPQyxFQUFJTyxPQUFPQyxlQUFlUixFQUFHRCxFQUFHLENBQy9EVSxNQUFPWixFQUNQYSxZQUFZLEVBQ1pDLGNBQWMsRUFDZEMsVUFBVSxJQUNQWixFQUFFRCxHQUFLRixFQUFHRyxDQUNqQixDQ1JBLFNBQVNhLEVBQVlDLEVBQUtDLFlBQ25CQSxJQUFpQkEsRUFBTSxDQUFBLEdBQzVCLElBQUlDLEVBQVdELEVBQUlDLFNBRW5CLEdBQUtGLEdBQTJCLG9CQUFiRyxTQUFuQixDQUVBLElBQUlDLEVBQU9ELFNBQVNDLE1BQVFELFNBQVNFLHFCQUFxQixRQUFRLEdBQzlEQyxFQUFRSCxTQUFTSSxjQUFjLFNBQ25DRCxFQUFNRSxLQUFPLFdBRUksUUFBYk4sR0FDRUUsRUFBS0ssV0FDUEwsRUFBS00sYUFBYUosRUFBT0YsRUFBS0ssWUFLaENMLEVBQUtPLFlBQVlMLEdBR2ZBLEVBQU1NLFdBQ1JOLEVBQU1NLFdBQVdDLFFBQVViLEVBRTNCTSxFQUFNSyxZQUFZUixTQUFTVyxlQUFlZCxHQW5CVyxDQXFCekQsc3NGQ25CQSxNQUFNZSxFQUFTQSxFQUNicEIsUUFDQXFCLFVBQ0FDLHNCQUNBQyxnQkFDQUMsS0FDQUMsUUFDQUMsV0FFQSxNQUFNQyxFQUFVLEdBQUdILFVBQ2JJLEVBQWVQLEVBQVFRLEtBQUtDLEdBQVVBLEVBQU85QixRQUFVQSxJQUV2RCtCLE9BQ0pBLEVBQU1DLHFCQUNOQSxFQUFvQkMsYUFDcEJBLEVBQVlDLGFBQ1pBLEVBQVlDLGNBQ1pBLEVBQWFDLGlCQUNiQSxHQUNFQyxZQUFVLENBQ1pULGVBQ0FVLE1BQU9qQixFQUNQTSxVQUNBSCxLQUNBZSxhQUFjQyxHQUFRQSxFQUFLQyxZQUMzQkMscUJBQXNCQSxFQUFHZCxhQUFjZSxNQUNyQ3JCLEVBQW9CcUIsRUFBUTNDLE1BQU91QixNQUl2QyxPQUNFcUIsRUFBQUEsUUFBQWhDLGNBQUEsTUFBQSxDQUFLaUMsVUFBV0MsR0FDZEYsRUFBQUEsUUFBQWhDLGNBQUEsTUFBQSxDQUFLaUMsVUFBV0MsR0FDZEYsRUFBQUEsUUFBQWhDLGNBQUEsTUFBU29CLElBQ1BZLEVBQUFBLFFBQUFoQyxjQUFBLE9BQUEsQ0FBTWlDLFVBQVdDLEdBQ2ZGLEVBQUFBLFFBQUFoQyxjQUFBLFFBQUFkLE9BQUFpRCxPQUFBLENBQUEsRUFBV1osSUFBZSxDQUFFVSxVQUFXQyxJQUNwQ3JCLEdBRUhtQixVQUFBaEMsY0FBQSxNQUFBLENBQUtpQyxVQUFXQyxHQUNkRixFQUFBQSxRQUFBaEMsY0FBQSxPQUFBLEtBQU9nQixFQUFhYSxlQUd2QmYsR0FFSGtCLEVBQUFBLFFBQUFoQyxjQUFBLEtBQUFkLE9BQUFpRCxPQUFBLENBQ0VGLFVBQVdHLEVBQUFBLFFBQUlGLEdBQWtDZixHQUFVLFdBQ3ZERSxLQUVIRixHQUNDVixFQUFRNEIsSUFBSSxDQUFDbkIsRUFBUW9CLElBQ25CTixFQUFBQSxRQUFBaEMsY0FBQSxLQUFBZCxPQUFBaUQsT0FBQSxDQUNFSSxJQUFLckIsRUFBTzlCLE1BQ1o2QyxVQUFXRyxFQUFBQSxRQUNURixFQUNBSSxJQUFVZCxHQUFvQlUsSUFFNUJaLEVBQWEsQ0FBRWdCLFdBRW5CTixVQUFBaEMsY0FBQSxPQUFBLEtBQU9rQixFQUFPVyxrQ0FTOUJXLFFBQUFDLElBQUFDLFdBQUFsQyxFQUFPbUMsVUFBWSxDQUNqQnZELE1BQU93RCxFQUFBQSxRQUFVQyxPQUFPQyxXQUN4QnBDLG9CQUFxQmtDLEVBQUFBLFFBQVVHLEtBQUtELFdBQ3BDckMsUUFBU21DLEVBQUFBLFFBQVVJLFFBQ2pCSixFQUFBQSxRQUFVSyxNQUFNLENBQ2RwQixZQUFhZSxFQUFBQSxRQUFVTSxPQUFPSixXQUM5QjFELE1BQU93RCxFQUFBQSxRQUFVQyxPQUFPQyxhQUN2QkEsWUFDSEEsV0FDRmxDLEdBQUlnQyxFQUFBQSxRQUFVTSxPQUFPSixXQUNyQmpDLE1BQU8rQixFQUFBQSxRQUFVTyxLQUFLTCxXQUN0QmhDLEtBQU04QixFQUFBQSxRQUFVTyxLQUFLTCxXQUNyQm5DLGNBQWVpQyxFQUFBQSxRQUFVQyxPQUFPQyxhQ3JGbEMsTUNHTU0sRUFBT0MsRUFBQUEsZUFBZSxDQUMxQkMsWUFBYSxLQUViQyxVRE5tQixDQUNuQkMsR0FBSSxDQUNGQyxZQUFhLENBQ1gsdUJBQXdCLDBCQUN4QixnQ0FDRSxnREFDRixzQ0FDRSwyREFDRixxQ0FDRSx3REFDRixlQUFnQixNQUNoQiwwQkFBMkIsa0NBQzNCLDBCQUEyQix5QkFDM0IsWUFBYSxlQUNiLGtCQUFtQix5QkFDbkIsd0JBQXlCLGlCQUc3QkMsR0FBSSxDQUNGRCxZQUFhLENBQ1gsdUJBQXdCLGdCQUN4QixnQ0FDRSwyQ0FDRixzQ0FDRSxzREFDRixxQ0FDRSxxREFDRixlQUFnQixNQUNoQiwwQkFBMkIsNkJBQzNCLDBCQUEyQixpQ0FDM0IsWUFBYSxZQUNiLGtCQUFtQixzQkFDbkIsd0JBQXlCLGtCQUc3QkUsR0FBSSxDQUNGRixZQUFhLENBQ1gsdUJBQXdCLGtCQUN4QixnQ0FDRSxrREFDRixzQ0FDRSx3REFDRixxQ0FDRSx5REFDRixlQUFnQixNQUNoQiwwQkFBMkIsNkJBQzNCLDBCQUEyQixzQ0FDM0IsWUFBYSxZQUNiLGtCQUFtQixzQkFDbkIsd0JBQXlCLHNCQUc3QkcsR0FBSSxDQUNGSCxZQUFhLENBQ1gsdUJBQXdCLHVCQUN4QixnQ0FDRSw0Q0FDRixzQ0FDRSxxREFDRixxQ0FDRSxvREFDRixlQUFnQixPQUNoQiwwQkFBMkIsZ0NBQzNCLDBCQUEyQix3QkFDM0IsWUFBYSxpQkFDYixrQkFBbUIsMkJBQ25CLHdCQUF5QixpQkFHN0JJLEdBQUksQ0FDRkosWUFBYSxDQUNYLHVCQUF3QixxQkFDeEIsZ0NBQ0UsZ0RBQ0Ysc0NBQ0UsMkRBQ0YscUNBQ0UsMkRBQ0YsZUFBZ0IsTUFDaEIsMEJBQTJCLDZCQUMzQiwwQkFBMkIsMkNBQzNCLFlBQWEsWUFDYixrQkFBbUIsc0JBQ25CLHdCQUF5QiwwQkM1RTdCSyxVQUFXLGNBQ1hDLE1BQU8sQ0FDTEMsYUFBYSxLQUlqQlosRUFBS2EsNmlRQ0VRQyxFQUE4QkEsS0FBQUEsQ0FBUyxHQUU5Q0MsRUFBa0JDLElBQ3RCLFFBQWlCQyxJQUFiRCxHQUEwQkUsRUFBQUEsUUFBUUYsR0FDcEMsT0FBTyxFQUVULE1BQU1HLEVBQU9yRixPQUFPcUYsS0FBS0gsR0FDekIsT0FDa0IsSUFBaEJHLEVBQUtDLFFBQWlDLElBQWhCRCxFQUFLQyxRQUFnQkQsRUFBS0UsU0FBUyxrQkFJdkRDLEVBQXlCQyxJQUFBLElBQUNDLFNBQzlCQSxFQUFRM0MsVUFDUkEsRUFBUzRDLFFBQ1RBLEVBQU9DLFFBQ1BBLEVBQU9DLFdBQ1BBLEVBQVVDLEtBQ1ZBLEdBRURMLEVBRElNLEVDakNMLFNBQWtDdEcsRUFBR0gsR0FDbkMsR0FBSSxNQUFRRyxFQUFHLE1BQU8sQ0FBQSxFQUN0QixJQUFJVCxFQUNGUSxFQUNBRCxFQ0xKLFNBQXVDQyxFQUFHQyxHQUN4QyxHQUFJLE1BQVFELEVBQUcsTUFBTyxDQUFBLEVBQ3RCLElBQUlGLEVBQUksQ0FBQSxFQUNSLElBQUssSUFBSTBHLEtBQUt4RyxFQUFHLEdBQUksQ0FBQSxFQUFHeUcsZUFBZXRHLEtBQUtILEVBQUd3RyxHQUFJLENBQ2pELFFBQVd2RyxFQUFFeUcsUUFBUUYsR0FBSSxTQUN6QjFHLEVBQUUwRyxHQUFLeEcsRUFBRXdHLEVBQ1gsQ0FDQSxPQUFPMUcsQ0FDVCxDREhRNkcsQ0FBNkIxRyxFQUFHSCxHQUN0QyxHQUFJVSxPQUFPb0csc0JBQXVCLENBQ2hDLElBQUlKLEVBQUloRyxPQUFPb0csc0JBQXNCM0csR0FDckMsSUFBS0QsRUFBSSxFQUFHQSxFQUFJd0csRUFBRVYsT0FBUTlGLElBQUtSLEVBQUlnSCxFQUFFeEcsSUFBSSxJQUFPRixFQUFFNEcsUUFBUWxILElBQU0sQ0FBQSxFQUFHcUgscUJBQXFCMUcsS0FBS0YsRUFBR1QsS0FBT08sRUFBRVAsR0FBS1MsRUFBRVQsR0FDbEgsQ0FDQSxPQUFPTyxDQUNULENEdUJTK0csQ0FBQWIsRUFBQWMsR0FBQSxPQUVQekQsRUFBQUEsUUFBQWhDLGNBQUEsTUFBQSxDQUNFaUMsVUFBV0MsRUFBTyw0QkFDbEJuQyxNQUFPLENBQUUsVUFBV2lGLEVBQU8sT0FBUyxTQUVuQ0YsR0FBV0QsR0FDVjdDLEVBQUFBLFFBQUFoQyxjQUFBLE1BQUFkLE9BQUFpRCxPQUFBLENBQUEsRUFDTThDLEVBQUksQ0FDUmhELFVBQVdBLEVBQ1g2QyxRQUFTQSxFQUNUQyxXQUFZQSxFQUNaVyxLQUFLLFNBQ0xDLFNBQVMsTUFFUmYsS0FNSGdCLEVBQXNCQSxDQUMxQkMsRUFDQUMsRUFDQUMsR0FBa0IsS0FFbEIsTUFBTUMsRUFBZUgsRUFBcUJULFFBQVFVLEdBSWxELE9BSElFLEdBQWUsR0FDakJILEVBQXFCSSxPQUFPRCxFQUFjLEdBRXJDRCxFQUNIRixFQUFxQnhELElBQUlqRCxHQUN2QkEsRUFBUTBHLEVBQXVCMUcsRUFBUSxFQUFJQSxHQUU3Q3lHLEdBR0FLLEVBQTJCQyxJQUMvQixNQUVNNUQsRUFBTzRELElBQVVBLEVBQU01RCxLQUFPNEQsRUFBTUMsT0FBU0QsRUFBTUUsVUFBYSxHQUN0RSxTQUFLOUQsSUFIUyxDQUFDLEdBQUksSUFBSyxZQUdMK0QsT0FGTCxDQUFDLEdBQUksVUFFYzdCLFNBQVNsQyxNQUcxQzRELEVBQU1JLGtCQUNDLElBR0huSCxFQUFRb0gsR0FDWEEsR0FBWUEsRUFBU0MsU0FDckJELEdBQVlBLEVBQVNFLEtBQU9GLEVBQVNHLE9BQVMscUJBQy9DLEdBRUlDLEVBQWtCSixHQUN0QkEsSUFBNkIsSUFBakJBLEVBQVNFLElBQWUsV0FBYSwwQkFjbkRsRSxRQUFBQyxJQUFBQyxXQUFBZ0MsRUFBdUIvQixVQUFZLENBQ2pDaUMsU0FBVWhDLEVBQUFBLFFBQVVPLEtBQ3BCbEIsVUFBV1csRUFBQUEsUUFBVU0sT0FBT0osV0FDNUIrQixRQUFTakMsRUFBQUEsUUFBVWlFLEtBQUsvRCxXQUN4QmdDLFFBQVNsQyxFQUFBQSxRQUFVRyxLQUFLRCxXQUN4QmlDLFdBQVluQyxFQUFBQSxRQUFVRyxLQUFLRCxXQUMzQmtDLEtBQU1wQyxFQUFBQSxRQUFVaUUsT0FHbEJuQyxFQUF1Qm9DLGFBQWUsQ0FDcENsQyxjQUFVUCxFQUNWVyxNQUFNLEdBNEZSLE1BQU0rQixFQUFhLGVBQUF2RSxRQUFBQyxJQUFBQyxTQUFHRSxFQUFBQSxRQUFVSyxNQUFNLENBQ3BDd0QsUUFBUzdELEVBQUFBLFFBQVVNLE9BQ25COEQsSUFBS3BFLEVBQUFBLFFBQVVDLE9BQ2ZvRSxJQUFLckUsRUFBQUEsUUFBVUMsT0FDZnFFLGNBQWV0RSxFQUFBQSxRQUFVQyxTQUN6QixDQUFBLEVBRUYsTUFBTXNFLFVBQTJCbkYsRUFBQUEsUUFBTW9GLFVBNEVyQy9JLFdBQUFBLENBQVlnSixHQUNWQyxNQUFNRCxHQUFPcEksRUFBQXNJLEtBQUEsaUJBT0U3SCxJQUNmNkgsS0FBS0MsU0FBU0MsSUFBUyxDQUFPQyxLQUFNLElBQUlELEVBQVVDLEtBQU1oSSxRQUN6RFQsMkJBRW1CLEtBQ2xCLE1BQU0wSSxZQUFFQSxHQUFnQkosS0FBS0YsTUFDeEJNLEdBQWdCQSxFQUFZWCxLQUMvQk8sS0FBS0ssTUFBTUYsS0FBSyxHQUFHRyxVQUV0QjVJLEVBQUFzSSxLQUFBLGtCQUVpQk8sSUFDUyxJQUFyQkEsRUFBVXRELE9BSWQrQyxLQUFLRixNQUFNVSxnQkFBZ0JELEVBQVVFLE9BQU9DLElBQU85RCxFQUFnQjhELEtBSGpFVixLQUFLRixNQUFNVSxnQkFBZ0IsTUFJOUI5SSxFQUFBc0ksS0FBQSxpQ0FFZ0M1RyxJQUMvQixNQUFNdUgsa0JBQUVBLEdBQXNCWCxLQUFLSyxNQUNuQ0wsS0FBS0MsU0FBUyxDQUNaVSxrQkFBbUJBLEVBQWtCekQsU0FBUzlELEdBQzFDaUYsRUFBb0JzQyxFQUFtQnZILEdBQ3ZDdUgsRUFBa0I1QixPQUFPLENBQUMzRixRQUVqQzFCLEVBQUFzSSxLQUFBLGtDQUVpQyxDQUFDWSxFQUFvQjFKLEtBQ2pEOEksS0FBS0YsTUFBTWUsbUJBQ2JiLEtBQUtGLE1BQU1lLGtCQUFrQixDQUMzQkMsT0FBUSwyQkFDUkMsU0FBVSxvQkFDVkMsS0FBTUosRUFBcUIsS0FHL0IsTUFBTUwsVUFBRUEsR0FBY1AsS0FBS0YsTUFDM0JTLEVBQVVySixHQUFHeUksY0FBZ0JsSSxPQUFPd0osU0FBU0wsRUFBb0IsSUFDakVaLEtBQUtRLGdCQUFnQkQsS0FDdEI3SSxFQUFBc0ksS0FBQSxpQ0FFZ0MsQ0FBQ2tCLEVBQWtCaEssS0FDbEQ4SSxLQUFLRixNQUFNcUIsK0JBQStCRCxFQUFrQmhLLEtBQzdEUSxFQUFBc0ksS0FBQSw0QkFFMkI1RyxJQUN0QjRHLEtBQUtGLE1BQU1lLG1CQUNiYixLQUFLRixNQUFNZSxrQkFBa0IsQ0FDM0JDLE9BQVEsd0JBQ1JDLFNBQVUsb0JBQ1ZDLEtBQU0sT0FHVixNQUFNTCxrQkFBRUEsR0FBc0JYLEtBQUtLLE9BQzdCRSxVQUFFQSxHQUFjUCxLQUFLRixNQUMzQlMsRUFBVTdCLE9BQU90RixFQUFlLEdBQ2hDNEcsS0FBS0MsU0FDSCxDQUNFVSxrQkFBbUJ0QyxFQUNqQnNDLEVBQ0F2SCxHQUNBLElBR0osSUFBTTRHLEtBQUtRLGdCQUFnQkQsTUFFOUI3SSxnQ0FFd0IsS0FDbkJzSSxLQUFLRixNQUFNZSxtQkFDYmIsS0FBS0YsTUFBTWUsa0JBQWtCLENBQzNCQyxPQUFRLHFCQUNSQyxTQUFVLG9CQUNWQyxLQUFNLHdCQUdWLE1BQU1ULFVBQUVBLEdBQWNQLEtBQUtGLE1BQzNCUyxFQUFVYSxLQXRXNkJ6RSxDQUFTLEdBeVdoRHFELEtBQUtDLFNBQVNELEtBQUtLLFNBQ3BCM0ksOEJBRXNCLEtBQ2pCc0ksS0FBS0YsTUFBTWUsbUJBQ2JiLEtBQUtGLE1BQU1lLGtCQUFrQixDQUMzQkMsT0FBUSxxQ0FDUkMsU0FBVSxvQkFDVkMsS0FBTSxPQUdWLE1BQU1ULFVBQUVBLEdBQWNQLEtBQUtGLE1BQzNCUyxFQUFVYyxVQUNWckIsS0FBS0YsTUFBTXdCLGNBQ1o1SixFQUFBc0ksS0FBQSxrQkFFaUJ1QixHQUNoQixHQUFHQSxFQUFpQixNQUFNdkIsS0FBS0YsTUFBTTdJLEVBQUUsZUFBZ0IsQ0FDckR1SyxJQUFLeEIsS0FBS0YsTUFBTTJCLFVBeEdsQnpCLEtBQUtLLE1BQVEsQ0FDWE0sa0JBQW1CLEdBQ25CUixLQUFNLEdBRVYsQ0F1R0F1QixNQUFBQSxHQUNFLE1BQU1DLE9BQ0pBLEVBQU1DLGdCQUNOQSxFQUFlQyxjQUNmQSxFQUFhQyxpQkFDYkEsRUFBZ0J2QixVQUNoQkEsRUFBU3dCLGtCQUNUQSxFQUFpQkMsdUJBQ2pCQSxFQUFzQkMsWUFDdEJBLEVBQVdDLGNBQ1hBLEVBQWFDLGdCQUNiQSxFQUFlQyxvQkFDZkEsRUFBbUJuTCxFQUNuQkEsRUFDQXdLLEtBQU1ELEdBQ0p4QixLQUFLRixPQUNIdUMsUUFBRUEsR0FBWXJDLEtBQUtGLE1BQU13QyxRQUN6QjNCLGtCQUFFQSxHQUFzQlgsS0FBS0ssTUFDN0JrQyxFQXJVa0J0TCxLQUMxQixNQUFNdUwsRUFBYyxHQUNwQixJQUFLLElBQUl0TCxFQUFJLEVBQUdBLEdBQUssRUFBR0EsSUFBSyxDQUMzQixNQUFNdUwsRUFBcUIsR0FBSnZMLEVBQ3ZCc0wsRUFBWXBCLEtBQUssQ0FDZjlHLFlBQWEsR0FBR21JLEtBQWtCeEwsRUFBRSxrQkFDcENZLE1BQXdCLEdBQWpCNEssR0FFWCxDQUNBLE9BQU9ELEdBNFRhRSxDQUFvQnpMLEdBRWhDMEwsRUFBZ0NBLENBQ3BDOUYsRUFDQStGLEVBSDRCLElBSXhCL0YsR0FBWUEsRUFBUzhDLGVBQWtCaUQsRUFDdkNDLEVBQWlDOUgsR0FDckM0RixFQUFrQnpELFNBQVNuQyxHQUM3QixPQUNFTixFQUFBQSxRQUFBaEMsY0FBQSxNQUFBLENBQ0VpQyxVQUFXRyxFQUFBQSxRQUNURixFQUFPLHFCQUVFcUYsS0FBS0YsTUFBTWdELG1CQUd0QnRLLE1BQU8sQ0FDTCxVQUFXNkosRUFDWCx1QkFBd0JKLEVBQVljLFNBR3JDLElBQ0FuQixFQUNDbkgsRUFBQUEsUUFBQWhDLGNBQUEsTUFBQSxLQUNFZ0MsRUFBQUEsUUFBQWhDLGNBQUEsS0FBQSxDQUFJaUMsVUFBV0MsRUFBTyxpQ0FDbkIsSUFDQWlILElBR0gsS0FDSm5ILEVBQUFBLFFBQUFoQyxjQUFBLE1BQUEsQ0FBS2lDLFVBQVdDLEVBQU8sMkJBQ3JCRixFQUFBQSxRQUFBaEMsY0FBQ3VLLFVBQWEsQ0FDWkMsV0FBWWpELEtBQUtGLE1BQU1tRCxXQUN2QjFKLEtBQUssZ0JBQ0xGLEdBQUcsU0FDSDZKLFdBQ3VCLElBQXJCcEIsS0FFSzlCLEtBQUtGLE1BQU1nRCxXQUFhbkIsR0FBUWxDLEtBRXZDMEQsU0FBVW5ELEtBQUtvRCxlQUNmQyxTQUFVckQsS0FBS0YsTUFBTXVELFNBQ3JCM0ksVUFBVzJFLEVBQWdCc0MsR0FDM0IyQixZQUFhdEQsS0FBS0YsTUFBTXlELGtCQUN4QjFMLE1BQU9BLEVBQU04SixHQUNiRSxjQUFlQSxFQUNmMkIsb0JBQXFCeEQsS0FBS0YsTUFBTTBELG9CQUNoQ0MsU0FBVXpELEtBQUtGLE1BQU0yRCxTQUNyQkMsUUFBUzFELEtBQUtGLE1BQU00RCxRQUNwQkMsWUFBYXpCLEdBQWlCbEMsS0FBSzRELGtCQUNuQ25DLEtBQU16QixLQUFLRixNQUFNMkIsS0FDakJvQyxRQUFTN0QsS0FBS0YsTUFBTStELFFBQ3BCQyxRQUFTOUQsS0FBS0YsTUFBTWdFLFFBQ3BCQyxjQUFlL0QsS0FBS0YsTUFBTWlFLGNBQzFCakIsU0FBVTlDLEtBQUtGLE1BQU1nRCxTQUNyQlIsT0FBUXRDLEtBQUtGLE1BQU13QyxPQUNuQjBCLFlBQWFqQyxFQUNiRSxZQUFhakMsS0FBS0YsTUFBTW1DLFlBQ3hCZ0MsUUFBU2pFLEtBQUtGLE1BQU1tRSxRQUNwQkMsV0FBWWxFLEtBQUtGLE1BQU1vRSxXQUN2QkMsV0FBWW5FLEtBQUtGLE1BQU1xRSxjQUV2QmhDLEdBQW1CQyxJQUNuQjNILEVBQUFBLFFBQUFoQyxjQUFDMEUsRUFBc0IsQ0FDckJ6QyxVQUFXQyxFQUFPeUosU0FDbEI5RyxRQUFTNkUsRUFDVDVFLFFBQVNBLElBQU15QyxLQUFLcUUsdUJBQ3BCN0csV0FBWXBHLEdBQ1Z1SCxFQUF5QnZILElBQU00SSxLQUFLcUUsdUJBRXRDLGFBQVlwTixFQUFFLDBCQUEyQixDQUFFdUssU0FFM0MvRyxFQUFBQSxRQUFBaEMsY0FBQzZMLFVBQUksQ0FBQ0MsSUFBSSxXQUFXQyxNQUFPbkMsTUFJWixJQUFyQjlCLEVBQVV0RCxRQUNUeEMsRUFBQUEsUUFBQWhDLGNBQUEsTUFBQSxDQUFLaUMsVUFBV0MsRUFBTyx3QkFDckJGLEVBQUFBLFFBQUFoQyxjQUFBLE1BQUEsQ0FBS2lDLFVBQVdDLEVBQU84SixhQUczQmhLLEVBQUFBLFFBQUFoQyxjQUFDaU0sZ0JBQWEsQ0FDWmhLLFVBQVdDLEVBQU8sdUJBQ2xCZ0ssS0FBTXBFLEVBQ05xRSxPQUFRLElBQUlqSyxFQUFPLHFCQUNuQmtLLFVBQVcsSUFDWEMsU0FBVXZFLEVBQVV0RCxRQUFVLEVBQzlCOEgsUUFBUzVLLElBQ1AsTUFBTTZLLEVBQWU3SyxFQUFNc0csT0FBT0MsSUFBTzlELEVBQWdCOEQsSUFDckRzRSxFQUFhL0gsT0FBUyxHQUN4QitDLEtBQUtGLE1BQU1VLGdCQUFnQndFLEtBSTlCekUsRUFBVXpGLElBQUksQ0FBQ25FLEVBQUdPLElBQ2pCdUQsRUFBQUEsUUFBQWhDLGNBQUEsTUFBQSxDQUNFaUMsVUFBV0csRUFBQUEsUUFBR0YsRUFBTyx1QkFDckJLLElBQUssWUFBWTlELEtBRWpCdUQsRUFBQUEsUUFBQWhDLGNBQUEsTUFBQSxDQUFLaUMsVUFBV0MsRUFBTywwQkFDckJGLEVBQUFBLFFBQUFoQyxjQUFBLE1BQUEsQ0FBS2lDLFVBQVdDLEVBQU9zSyxLQUNyQnhLLEVBQUFBLFFBQUFoQyxjQUFBLE1BQUEsQ0FDRWlDLFVBQVdDLEVBQU8sbUJBQ2xCbkMsTUFBTytILEVBQVV0RCxPQUFTLEVBQUksQ0FBRWlJLE9BQVEsUUFBVyxDQUFBLEdBRWxEM0UsRUFBVXRELE9BQVMsR0FDbEJ4QyxFQUFBQSxRQUFBaEMsY0FBQzZMLEVBQUFBLFFBQUksQ0FBQ0MsSUFBSSxXQUFXWSxPQUFRLEdBQUlYLE1BQU9uQyxLQUc1QzVILEVBQUFBLFFBQUFoQyxjQUFBLE1BQUEsQ0FDRWlDLFVBQ0UsR0FBR0MsRUFBTywrQkFDUkEsRUFBTyxZQUFZekQsRUFBSSxRQUkzQnVELEVBQUFBLFFBQUFoQyxjQUFDdUssVUFBYSxDQUNaQyxXQUFZakQsS0FBS0YsTUFBTW1ELFdBQ3ZCMUosS0FBSyxZQUNMRixHQUFHLFlBQ0grTCxVQUFXbk8sRUFBRSxrQkFBbUIsQ0FDOUI4RCxNQUFPN0QsRUFBSSxFQUNYc0ssUUFFRjBCLFdBQ3VCLElBQXJCcEIsSUFBcUM5QixLQUFLRixNQUFNZ0QsU0FFbERRLFlBQVksWUFDWjVJLFVBQVUsV0FDVm1ILGNBQWVBLEVBQ2Z3QixTQUFVckQsS0FBS0YsTUFBTXVELFNBQ3JCeEwsTUFBUWxCLEdBQUtBLEVBQUV1SSxTQUFZLEdBQzNCdUUsU0FBVXpELEtBQUtGLE1BQU0yRCxTQUNyQkMsUUFBUzFELEtBQUtGLE1BQU00RCxRQUNwQjJCLGdCQUFpQmhMLEdBQ2YyRixLQUFLbUIsK0JBQStCOUcsRUFBTW5ELEdBRTVDdUssS0FBTXpCLEtBQUtGLE1BQU0yQixLQUNqQm9DLFFBQVM3RCxLQUFLRixNQUFNK0QsUUFDcEJDLFFBQVM5RCxLQUFLRixNQUFNZ0UsUUFDcEJDLGNBQWUvRCxLQUFLRixNQUFNaUUsY0FDMUJQLG9CQUFxQnhELEtBQUtGLE1BQU0wRCxvQkFDaENWLFNBQVU5QyxLQUFLRixNQUFNZ0QsU0FDckJiLFlBQWFqQyxLQUFLRixNQUFNbUMsWUFDeEJnQyxRQUFTakUsS0FBS0YsTUFBTW1FLFFBQ3BCM0IsT0FBUXRDLEtBQUtGLE1BQU13QyxPQUNuQjRCLFdBQVlsRSxLQUFLRixNQUFNb0UsY0FHMUJsRSxLQUFLRixNQUFNd0Ysa0JBQ1Y3SyxFQUFBQSxRQUFBaEMsY0FBQzBFLEVBQXNCLENBQ3JCekMsVUFBV0MsRUFBTyx1QkFDbEIyQyxRQUFTMEMsS0FBS0YsTUFBTXNDLG9CQUNwQjdFLFFBQVNBLElBQU15QyxLQUFLdUYsK0JBQStCck8sR0FDbkRzRyxXQUFZcEcsR0FDVnVILEVBQXlCdkgsSUFDekI0SSxLQUFLdUYsK0JBQStCck8sR0FFdEMsYUFBWUQsRUFDVjRMLEVBQStCM0wsR0FDM0IscUNBQ0Esc0NBQ0osQ0FBRTZELE1BQU83RCxFQUFJLEVBQUdzSyxRQUVsQi9ELE1BQUksR0FFSmhELEVBQUFBLFFBQUFoQyxjQUFDNkwsVUFBSSxDQUFDQyxJQUFJLE9BQU9DLE1BQU9uQyxPQUk1QlEsRUFBK0IzTCxJQUMvQnFKLEVBQVVySixJQUNWcUosRUFBVXJKLEdBQUd5SSxjQUFnQixHQUMzQmxGLEVBQUFBLFFBQUFoQyxjQUFBLE9BQUEsQ0FBTWlDLFVBQVdDLEVBQU8sd0JBQXlCLEdBQUcxRCxFQUNsRCx3QkFDQSxDQUNFdUssWUFFRXhCLEtBQUt3RixnQkFDVGpGLEVBQVVySixHQUFHeUksa0JBR25CbEYsVUFBQWhDLGNBQUEsTUFBQSxDQUNFaUMsVUFBV0csRUFBQUEsUUFBR0YsRUFBTyxtQ0FDUGtJLEVBQStCM0wsSUFBRSxjQUcvQ3VELEVBQUFBLFFBQUFoQyxjQUFBLE1BQUEsQ0FBS2lDLFVBQVdDLEVBQU8sbUJBQ3JCRixFQUFBQSxRQUFBaEMsY0FBQ1EsRUFBTSxDQUNMSSxHQUFJLGtCQUFrQm5DLElBQ3RCb0MsTUFBT3JDLEVBQUUsd0JBQXlCLENBQUV1SyxRQUNwQ3RJLFFBQVNxSixFQUNUMUssTUFBTzhLLEVBQThCcEMsRUFBVXJKLElBQy9Da0MsY0FBZWxDLEVBQ2ZxQyxLQUNFa0IsRUFBQUEsUUFBQWhDLGNBQUEsT0FBQSxDQUNFaUMsVUFBVyxHQUFHQyxFQUFPLG9CQUFvQkEsRUFBTyxzQkFFaERGLEVBQUFBLFFBQUFoQyxjQUFDNkwsVUFBSSxDQUFDQyxJQUFJLE9BQU9DLE1BQU9uQyxLQUc1QmxKLG9CQUFxQjZHLEtBQUt5RixxQ0FLbENoTCxVQUFBaEMsY0FBQzBFLEVBQXNCLENBQ3JCekMsVUFBV0MsRUFBTyxvQkFDbEIyQyxRQUFTMEMsS0FBS0YsTUFBTXNDLG9CQUNwQjdFLFFBQVNBLElBQU15QyxLQUFLMEYsMEJBQTBCeE8sR0FDOUNzRyxXQUFZcEcsR0FDVnVILEVBQXlCdkgsSUFDekI0SSxLQUFLMEYsMEJBQTBCeE8sR0FFakMsYUFBWUQsRUFBRSwwQkFBMkIsQ0FDdkM4RCxNQUFPN0QsRUFBSSxFQUNYc0ssU0FHRi9HLEVBQUFBLFFBQUFoQyxjQUFDNkwsVUFBSSxDQUFDQyxJQUFJLFFBQVFDLE1BQU9uQyxRQUtqQzVILEVBQUFBLFFBQUFoQyxjQUFBLE1BQUEsQ0FBS2lDLFVBQVdDLEVBQU8sZ0NBQ3JCRixFQUFBQSxRQUFBaEMsY0FBQ3VLLFVBQWEsQ0FDWkMsV0FBWWpELEtBQUtGLE1BQU1tRCxXQUN2QjFKLEtBQUssWUFDTEYsR0FBRyxjQUNINkosV0FDdUIsSUFBckJwQixLQUVLOUIsS0FBS0YsTUFBTWdELFdBQWFyTCxPQUFPa08sTUFBTWhFLEdBQVFsQyxNQUVwRDBELFNBQVVuRCxLQUFLb0QsZUFDZkUsWUFBYXRELEtBQUtGLE1BQU04Rix1QkFDeEJsTCxVQUFXMkUsRUFBZ0JXLEtBQUtGLE1BQU1NLGFBQ3RDb0Qsb0JBQXFCeEQsS0FBS0YsTUFBTTBELG9CQUNoQzNCLGNBQWVBLEVBQ2Y0QixTQUFVekQsS0FBS0YsTUFBTTJELFNBQ3JCQyxRQUFTMUQsS0FBS0YsTUFBTTRELFFBQ3BCTCxTQUFVckQsS0FBS0YsTUFBTXVELFNBQ3JCeEwsTUFBT0EsRUFBTW1JLEtBQUtGLE1BQU1NLGFBQ3hCcUIsS0FBTXpCLEtBQUtGLE1BQU0yQixLQUNqQm9DLFFBQVM3RCxLQUFLRixNQUFNK0QsUUFDcEJDLFFBQVM5RCxLQUFLRixNQUFNZ0UsUUFDcEJDLGNBQWUvRCxLQUFLRixNQUFNaUUsY0FDMUJqQixTQUFVOUMsS0FBS0YsTUFBTWdELFNBQ3JCa0IsWUFBYWhDLEVBQ2JDLFlBQWFqQyxLQUFLRixNQUFNbUMsWUFDeEJnQyxRQUFTakUsS0FBS0YsTUFBTW1FLFFBQ3BCM0IsT0FBUXRDLEtBQUtGLE1BQU13QyxPQUNuQjRCLFdBQVlsRSxLQUFLRixNQUFNb0UsV0FDdkJDLFdBQVluRSxLQUFLRixNQUFNcUUsY0FFdkJoQyxHQUFtQkMsSUFDbkIzSCxFQUFBQSxRQUFBaEMsY0FBQzBFLEVBQXNCLENBQ3JCekMsVUFBV0csRUFBQUEsUUFBR0YsRUFBTyxpQkFBa0JBLEVBQU9rTCxLQUNqQ3RGLEVBQVV0RCxPQUFTLGdCQUVoQ0ssUUFBUzhFLEdBQTRDLElBQXJCN0IsRUFBVXRELE9BQzFDTSxRQUFTQSxJQUFNeUMsS0FBSzhGLHlCQUNwQnRJLFdBQVlwRyxHQUNWdUgsRUFBeUJ2SCxJQUFNNEksS0FBSzhGLHlCQUV0QyxhQUFZN08sRUFBRSx1QkFBd0IsQ0FBRXVLLFNBRXhDL0csRUFBQUEsUUFBQWhDLGNBQUM2TCxVQUFJLENBQ0hDLElBQUksV0FDSndCLE1BQU8sS0FDUEMsT0FBUSxNQUNSeEIsTUFBT25DLE1BT3JCLEVBQ0QzSyxFQWxlS2tJLEVBQWtCLGVBMENBLENBQ3BCK0IsWUFBUTdFLEVBQ1JzRCxpQkFBYXRELEVBQ2J5RCxVQUFXLEdBQ1hnRCxrQkFBbUIsY0FDbkJxQyx1QkFBd0IsbUJBQ3hCdEUsZUFBV3hFLEVBQ1gwRCxnQkFBaUJBLE9BQ2pCb0IscUJBQWlCOUUsRUFDakIrRyxRQUFTLEdBQ1RDLFFBQVMsR0FDVEMsbUJBQWVqSCxFQUNmNEcsYUFBUzVHLEVBQ1QwRyx5QkFBcUIxRyxFQUNyQnVHLGNBQVV2RyxFQUNWK0QsdUJBQW1CL0QsRUFDbkJnRixrQkFBa0IsRUFDbEJnQixVQUFVLEVBQ1YzQixvQ0FBZ0NyRSxFQUNoQ2lGLGtCQUFtQixLQUNuQkMsdUJBQXdCLEtBQ3hCaUMsYUFBU25ILEVBQ1R3RixPQUFRMkQsRUFBQUEsY0FDUmhFLFlBQWEsQ0FDWGMsT0FBUSxLQUVWbUIsWUFBWSxFQUNaaEMsbUJBQWVwRixFQUNmcUgsWUFBWSxFQUNaaEMsaUJBQWlCLEVBQ2pCQyxxQkFBcUIsRUFDckJrRCxrQkFBa0IsbUJBQ25CckssUUFBQUMsSUFBQUMsV0ExRUd5RSxFQUNHeEUsVUFBWSxDQUNqQjZILFdBQVk1SCxFQUFBQSxRQUFVTSxPQUFPSixXQUM3Qm9HLE9BQVFuQyxFQUNSWSxZQUFhWixFQUNiK0Qsa0JBQW1CbEksRUFBQUEsUUFBVU0sT0FDN0JpSyx1QkFBd0J2SyxFQUFBQSxRQUFVTSxPQUNsQzRFLFVBQVdsRixFQUFBQSxRQUFVSSxRQUFRK0QsR0FDN0JnQixnQkFBaUJuRixFQUFBQSxRQUFVRyxLQUMzQjJGLCtCQUFnQzlGLEVBQUFBLFFBQVVHLEtBQzFDOEYsVUFBV2pHLEVBQUFBLFFBQVVHLEtBQ3JCb0csZ0JBQWlCdkcsRUFBQUEsUUFBVU0sT0FDM0JrRyxjQUFleEcsRUFBQUEsUUFBVUssTUFBTSxDQUM3QndLLFdBQVk3SyxFQUFBQSxRQUFVTSxTQUNyQkosV0FDSGtJLFNBQVVwSSxFQUFBQSxRQUFVRyxLQUFLRCxXQUN6Qm1JLFFBQVNySSxFQUFBQSxRQUFVRyxLQUNuQnFGLGtCQUFtQnhGLEVBQUFBLFFBQVVHLEtBQzdCaUcsS0FBTXBHLEVBQUFBLFFBQVVNLE9BQU9KLFdBQ3ZCdUcsaUJBQWtCekcsRUFBQUEsUUFBVWlFLEtBQzVCdUUsUUFBU3hJLEVBQUFBLFFBQVVJLFFBQVFKLEVBQUFBLFFBQVVNLFFBQ3JDbUksUUFBU3pJLEVBQUFBLFFBQVVJLFFBQVFKLEVBQUFBLFFBQVVNLFFBQ3JDb0ksY0FBZTFJLEVBQUFBLFFBQVVHLEtBQ3pCc0gsU0FBVXpILEVBQUFBLFFBQVVpRSxLQUNwQnlDLGtCQUFtQjFHLEVBQUFBLFFBQVVNLE9BQzdCcUcsdUJBQXdCM0csRUFBQUEsUUFBVU0sT0FDbEMwSCxTQUFVN0QsRUFDVnlFLFFBQVM1SSxFQUFBQSxRQUFVTSxPQUNuQjJHLE9BQVFqSCxFQUFBQSxRQUFVOEssU0FBUzlLLEVBQUFBLFFBQVVNLFFBQ3JDNkgsb0JBQXFCbkksRUFBQUEsUUFBVThLLFNBQVM5SyxFQUFBQSxRQUFVRyxNQUNsRHlHLFlBQWE1RyxFQUFBQSxRQUFVSyxNQUFNLENBQzNCcUgsT0FBUTFILEVBQUFBLFFBQVVDLFNBRXBCNEksV0FBWTdJLEVBQUFBLFFBQVVpRSxLQUN0QjRDLGNBQWU3RyxFQUFBQSxRQUFVRyxLQUN6QjJJLFdBQVk5SSxFQUFBQSxRQUFVaUUsS0FDdEI2QyxnQkFBaUI5RyxFQUFBQSxRQUFVaUUsS0FDM0I4QyxvQkFBcUIvRyxFQUFBQSxRQUFVaUUsS0FDL0JnRyxpQkFBa0JqSyxFQUFBQSxRQUFVaUUsS0FDNUJySSxFQUFHb0UsRUFBQUEsUUFBVUcsS0FBS0QsYUE2YnRCLE1BQU02SyxFQUFvQ0MsRUFBQUEsaUJBQUFBLENBQWtCekcsYUFFN0NFLEdBRVhyRixFQUFBQSxRQUFBaEMsY0FBQzZOLGtCQUFlLENBQUN6SyxLQUFNQSxHQUNyQnBCLFVBQUFoQyxjQUFDMk4sRUFBc0N0RyIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMiwzLDQsOSwxMF19
|
|
1
|
+
(function (global, factory) {
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('classnames'), require('prop-types'), require('react'), require('react-i18next'), require('react-sortablejs'), require('@digitransit-component/digitransit-component-autosuggest'), require('@digitransit-component/digitransit-component-icon'), require('lodash/isEmpty'), require('downshift'), require('i18next')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define(['exports', 'classnames', 'prop-types', 'react', 'react-i18next', 'react-sortablejs', '@digitransit-component/digitransit-component-autosuggest', '@digitransit-component/digitransit-component-icon', 'lodash/isEmpty', 'downshift', 'i18next'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global["@digitransit-component/digitransit-component-autosuggest-panel"] = {}, global.cx, global.PropTypes, global.React, global.reactI18next, global.reactSortablejs, global.DTAutosuggest, global.Icon, global.isEmpty, global.downshift, global.i18next));
|
|
5
|
+
})(this, (function (exports, cx, PropTypes, React, reactI18next, reactSortablejs, DTAutoSuggest, Icon, isEmpty, downshift, i18next) { 'use strict';
|
|
6
|
+
|
|
7
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
8
|
+
|
|
9
|
+
var cx__default = /*#__PURE__*/_interopDefault(cx);
|
|
10
|
+
var PropTypes__default = /*#__PURE__*/_interopDefault(PropTypes);
|
|
11
|
+
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
12
|
+
var DTAutoSuggest__default = /*#__PURE__*/_interopDefault(DTAutoSuggest);
|
|
13
|
+
var Icon__default = /*#__PURE__*/_interopDefault(Icon);
|
|
14
|
+
var isEmpty__default = /*#__PURE__*/_interopDefault(isEmpty);
|
|
15
|
+
|
|
16
|
+
function _typeof(o) {
|
|
17
|
+
"@babel/helpers - typeof";
|
|
18
|
+
|
|
19
|
+
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) {
|
|
20
|
+
return typeof o;
|
|
21
|
+
} : function (o) {
|
|
22
|
+
return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o;
|
|
23
|
+
}, _typeof(o);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function toPrimitive(t, r) {
|
|
27
|
+
if ("object" != _typeof(t) || !t) return t;
|
|
28
|
+
var e = t[Symbol.toPrimitive];
|
|
29
|
+
if (void 0 !== e) {
|
|
30
|
+
var i = e.call(t, r);
|
|
31
|
+
if ("object" != _typeof(i)) return i;
|
|
32
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
33
|
+
}
|
|
34
|
+
return ("string" === r ? String : Number)(t);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
function toPropertyKey(t) {
|
|
38
|
+
var i = toPrimitive(t, "string");
|
|
39
|
+
return "symbol" == _typeof(i) ? i : i + "";
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function _defineProperty(e, r, t) {
|
|
43
|
+
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
44
|
+
value: t,
|
|
45
|
+
enumerable: true,
|
|
46
|
+
configurable: true,
|
|
47
|
+
writable: true
|
|
48
|
+
}) : e[r] = t, e;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
function _objectWithoutPropertiesLoose(r, e) {
|
|
52
|
+
if (null == r) return {};
|
|
53
|
+
var t = {};
|
|
54
|
+
for (var n in r) if ({}.hasOwnProperty.call(r, n)) {
|
|
55
|
+
if (-1 !== e.indexOf(n)) continue;
|
|
56
|
+
t[n] = r[n];
|
|
57
|
+
}
|
|
58
|
+
return t;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
function _objectWithoutProperties(e, t) {
|
|
62
|
+
if (null == e) return {};
|
|
63
|
+
var o,
|
|
64
|
+
r,
|
|
65
|
+
i = _objectWithoutPropertiesLoose(e, t);
|
|
66
|
+
if (Object.getOwnPropertySymbols) {
|
|
67
|
+
var n = Object.getOwnPropertySymbols(e);
|
|
68
|
+
for (r = 0; r < n.length; r++) o = n[r], -1 === t.indexOf(o) && {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]);
|
|
69
|
+
}
|
|
70
|
+
return i;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
function styleInject(css, ref) {
|
|
74
|
+
if ( ref === void 0 ) ref = {};
|
|
75
|
+
var insertAt = ref.insertAt;
|
|
76
|
+
|
|
77
|
+
if (!css || typeof document === 'undefined') { return; }
|
|
78
|
+
|
|
79
|
+
var head = document.head || document.getElementsByTagName('head')[0];
|
|
80
|
+
var style = document.createElement('style');
|
|
81
|
+
style.type = 'text/css';
|
|
82
|
+
|
|
83
|
+
if (insertAt === 'top') {
|
|
84
|
+
if (head.firstChild) {
|
|
85
|
+
head.insertBefore(style, head.firstChild);
|
|
86
|
+
} else {
|
|
87
|
+
head.appendChild(style);
|
|
88
|
+
}
|
|
89
|
+
} else {
|
|
90
|
+
head.appendChild(style);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (style.styleSheet) {
|
|
94
|
+
style.styleSheet.cssText = css;
|
|
95
|
+
} else {
|
|
96
|
+
style.appendChild(document.createTextNode(css));
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
var css_248z$1 = ".select_combobox-container__l-gXK {\n background-color: #fff;\n border: solid #888 1px;\n display: flex;\n align-items: center;\n border-radius: 5px;\n height: 50px;\n justify-content: space-between;\n flex-grow: 1;\n}\n.select_combobox-container__l-gXK:focus-within {\n border-color: #007ac9;\n}\n.select_combobox-container__l-gXK .select_left-column__NCDpJ {\n display: flex;\n flex-direction: column;\n width: 100%;\n}\n\n.select_combobox-label__QYe0V {\n font-size: 12px;\n line-height: 20px;\n color: #666;\n letter-spacing: -0.48px;\n margin-left: 12px;\n margin-top: 4px;\n}\n\n.select_container__U5yMR {\n position: relative;\n width: 100%;\n height: 100%;\n}\n.select_container__U5yMR > div {\n display: flex;\n align-items: center;\n justify-content: space-between;\n width: 100%;\n height: 100%;\n cursor: pointer;\n}\n.select_container__U5yMR .select_suggestion__7in7q {\n font-size: 15px;\n line-height: 49px;\n height: 50px;\n padding: 0 0 0 12px;\n letter-spacing: -0.6px;\n color: #333;\n font-weight: 500;\n}\n.select_container__U5yMR .select_suggestionHighlighted__HV-5T {\n font-size: 15px;\n font-weight: 500;\n background: #f2f5f7;\n}\n.select_container__U5yMR .select_suggestionsContainerOpen__SzPE6 {\n position: absolute;\n background-color: #fff;\n z-index: 20;\n max-height: 250px;\n overflow-x: hidden;\n overflow-y: scroll;\n border-radius: 5px;\n box-shadow: 0 2px 0 0 rgba(0, 0, 0, 0.06);\n border: 1px rgba(0, 0, 0, 0.1) solid;\n top: calc(100% + 4px);\n left: 0;\n width: 100%;\n list-style-type: none;\n padding: 0;\n margin: 0;\n}\n.select_container__U5yMR .select_suggestionsContainerOpen__SzPE6 ul {\n padding: 0;\n margin: 0;\n}\n.select_container__U5yMR .select_suggestionsContainerOpen__SzPE6 li:not(:last-child) {\n border-bottom: 1px solid #ddd;\n}\n.select_container__U5yMR .select_input__tiwn5 {\n appearance: none;\n margin: -4px 0 0 0;\n padding-left: 12px;\n border: none;\n height: 26px;\n}\n.select_container__U5yMR .select_input__tiwn5:focus {\n outline: none;\n border: none;\n box-shadow: none;\n background: #fff;\n}\n.select_container__U5yMR .select_input__tiwn5:read-only {\n cursor: pointer;\n background: #fff;\n}\n.select_container__U5yMR .select_input__tiwn5 {\n background: #fff;\n font-weight: 500;\n box-shadow: none;\n font-size: 15px;\n font-stretch: normal;\n font-style: normal;\n line-height: 1.33;\n letter-spacing: -0.6px;\n color: #333;\n}";
|
|
101
|
+
var styles$1 = {"combobox-container":"select_combobox-container__l-gXK","left-column":"select_left-column__NCDpJ","combobox-label":"select_combobox-label__QYe0V","container":"select_container__U5yMR","suggestion":"select_suggestion__7in7q","suggestionHighlighted":"select_suggestionHighlighted__HV-5T","suggestionsContainerOpen":"select_suggestionsContainerOpen__SzPE6","input":"select_input__tiwn5"};
|
|
102
|
+
styleInject(css_248z$1);
|
|
103
|
+
|
|
104
|
+
const Select = ({
|
|
105
|
+
value,
|
|
106
|
+
options,
|
|
107
|
+
onSlackTimeSelected,
|
|
108
|
+
viaPointIndex,
|
|
109
|
+
id,
|
|
110
|
+
label,
|
|
111
|
+
icon
|
|
112
|
+
}) => {
|
|
113
|
+
const labelId = `${id}-label`;
|
|
114
|
+
const selectedItem = options.find(option => option.value === value);
|
|
115
|
+
const {
|
|
116
|
+
isOpen,
|
|
117
|
+
getToggleButtonProps,
|
|
118
|
+
getMenuProps,
|
|
119
|
+
getItemProps,
|
|
120
|
+
getLabelProps,
|
|
121
|
+
highlightedIndex
|
|
122
|
+
} = downshift.useSelect({
|
|
123
|
+
selectedItem,
|
|
124
|
+
items: options,
|
|
125
|
+
labelId,
|
|
126
|
+
id,
|
|
127
|
+
itemToString: item => item.displayName,
|
|
128
|
+
onSelectedItemChange: ({
|
|
129
|
+
selectedItem: newItem
|
|
130
|
+
}) => {
|
|
131
|
+
onSlackTimeSelected(newItem.value, viaPointIndex);
|
|
132
|
+
}
|
|
133
|
+
});
|
|
134
|
+
return /*#__PURE__*/React__default.default.createElement("div", {
|
|
135
|
+
className: styles$1['combobox-container']
|
|
136
|
+
}, /*#__PURE__*/React__default.default.createElement("div", {
|
|
137
|
+
className: styles$1.container
|
|
138
|
+
}, /*#__PURE__*/React__default.default.createElement("div", getToggleButtonProps(), /*#__PURE__*/React__default.default.createElement("span", {
|
|
139
|
+
className: styles$1['left-column']
|
|
140
|
+
}, /*#__PURE__*/React__default.default.createElement("label", Object.assign({}, getLabelProps(), {
|
|
141
|
+
className: styles$1['combobox-label']
|
|
142
|
+
}), label), /*#__PURE__*/React__default.default.createElement("div", {
|
|
143
|
+
className: styles$1.input
|
|
144
|
+
}, /*#__PURE__*/React__default.default.createElement("span", null, selectedItem.displayName))), icon), /*#__PURE__*/React__default.default.createElement("ul", Object.assign({
|
|
145
|
+
className: cx__default.default(styles$1.suggestionsContainerOpen, !isOpen && 'hidden')
|
|
146
|
+
}, getMenuProps()), isOpen && options.map((option, index) => /*#__PURE__*/React__default.default.createElement("li", Object.assign({
|
|
147
|
+
key: option.value,
|
|
148
|
+
className: cx__default.default(styles$1.suggestion, index === highlightedIndex && styles$1.suggestionHighlighted)
|
|
149
|
+
}, getItemProps({
|
|
150
|
+
index
|
|
151
|
+
})), /*#__PURE__*/React__default.default.createElement("span", null, option.displayName))))));
|
|
152
|
+
};
|
|
153
|
+
process.env.NODE_ENV !== "production" ? Select.propTypes = {
|
|
154
|
+
value: PropTypes__default.default.number.isRequired,
|
|
155
|
+
onSlackTimeSelected: PropTypes__default.default.func.isRequired,
|
|
156
|
+
options: PropTypes__default.default.arrayOf(PropTypes__default.default.shape({
|
|
157
|
+
displayName: PropTypes__default.default.string.isRequired,
|
|
158
|
+
value: PropTypes__default.default.number.isRequired
|
|
159
|
+
}).isRequired).isRequired,
|
|
160
|
+
id: PropTypes__default.default.string.isRequired,
|
|
161
|
+
label: PropTypes__default.default.node.isRequired,
|
|
162
|
+
icon: PropTypes__default.default.node.isRequired,
|
|
163
|
+
viaPointIndex: PropTypes__default.default.number.isRequired
|
|
164
|
+
} : void 0;
|
|
165
|
+
|
|
166
|
+
const translations = {
|
|
167
|
+
de: {
|
|
168
|
+
translation: {
|
|
169
|
+
'add-via-button-label': 'Füge Zwischenziel hinzu',
|
|
170
|
+
'add-via-duration-button-label': 'Setze Umsteigezeit für Zwischenziel {{index}}',
|
|
171
|
+
'add-via-duration-button-label-close': 'Schließe Umsteigezeit-Auswahl für Zwischenziel {{index}}',
|
|
172
|
+
'add-via-duration-button-label-open': 'Öffne Umsteigezeit-Auswahl für Zwischenziel {{index}}',
|
|
173
|
+
'minute-short': 'min',
|
|
174
|
+
'remove-via-button-label': 'Entferne Zwischenziel {{index}}',
|
|
175
|
+
'swap-order-button-label': 'Tausche Start mit Ziel',
|
|
176
|
+
'via-point': 'Zwischenziel',
|
|
177
|
+
'via-point-index': 'Zwischenziel {{index}}',
|
|
178
|
+
'viapoint-slack-amount': 'Umsteigezeit'
|
|
179
|
+
}
|
|
180
|
+
},
|
|
181
|
+
en: {
|
|
182
|
+
translation: {
|
|
183
|
+
'add-via-button-label': 'Add via point',
|
|
184
|
+
'add-via-duration-button-label': 'Set stop duration at via point {{index}}',
|
|
185
|
+
'add-via-duration-button-label-close': 'Close stop duration selector at via point {{index}}',
|
|
186
|
+
'add-via-duration-button-label-open': 'Open stop duration selector at via point {{index}}',
|
|
187
|
+
'minute-short': 'min',
|
|
188
|
+
'remove-via-button-label': 'Remove via point {{index}}',
|
|
189
|
+
'swap-order-button-label': 'Reverse origin and destination',
|
|
190
|
+
'via-point': 'Via point',
|
|
191
|
+
'via-point-index': 'Via point {{index}}',
|
|
192
|
+
'viapoint-slack-amount': 'Stop duration'
|
|
193
|
+
}
|
|
194
|
+
},
|
|
195
|
+
fi: {
|
|
196
|
+
translation: {
|
|
197
|
+
'add-via-button-label': 'Lisää välipiste',
|
|
198
|
+
'add-via-duration-button-label': 'Aseta välipisteelle {{index}} pysähdyksen kesto',
|
|
199
|
+
'add-via-duration-button-label-close': 'Avaa välipisteen {{index}} pysähdyksen kesto valitsin',
|
|
200
|
+
'add-via-duration-button-label-open': 'Sulje välipisteen {{index}} pysähdyksen kesto valitsin',
|
|
201
|
+
'minute-short': 'min',
|
|
202
|
+
'remove-via-button-label': 'Poista välipiste {{index}}',
|
|
203
|
+
'swap-order-button-label': 'Käännä reitin suunta vastakkaiseksi',
|
|
204
|
+
'via-point': 'Välipiste',
|
|
205
|
+
'via-point-index': 'Välipiste {{index}}',
|
|
206
|
+
'viapoint-slack-amount': 'Pysähdyksen kesto'
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
pl: {
|
|
210
|
+
translation: {
|
|
211
|
+
'add-via-button-label': 'Dodaj punkt pośredni',
|
|
212
|
+
'add-via-duration-button-label': 'Wybierz czas postoju dla punktu {{index}}',
|
|
213
|
+
'add-via-duration-button-label-close': 'Zamknij wybornik czasu postoju w punkcie {{index}}',
|
|
214
|
+
'add-via-duration-button-label-open': 'Otwórz wybornik czasu postoju w punkcie {{index}}',
|
|
215
|
+
'minute-short': 'min.',
|
|
216
|
+
'remove-via-button-label': 'Usuń punkt pośredni {{index}}',
|
|
217
|
+
'swap-order-button-label': 'Odwróć początek i cel',
|
|
218
|
+
'via-point': 'Punkt pośredni',
|
|
219
|
+
'via-point-index': 'Punkt pośredni {{index}}',
|
|
220
|
+
'viapoint-slack-amount': 'Czas postoju'
|
|
221
|
+
}
|
|
222
|
+
},
|
|
223
|
+
sv: {
|
|
224
|
+
translation: {
|
|
225
|
+
'add-via-button-label': 'Lägg till viapunkt',
|
|
226
|
+
'add-via-duration-button-label': 'Ställ in varaktighet för viapunkten {{index}}',
|
|
227
|
+
'add-via-duration-button-label-close': 'Stäng väljaren för varaktighet vid via-punkten {{index}}',
|
|
228
|
+
'add-via-duration-button-label-open': 'Öppna väljaren för varaktighet vid via-punkten {{index}}',
|
|
229
|
+
'minute-short': 'min',
|
|
230
|
+
'remove-via-button-label': 'Ta bort viapunkt {{index}}',
|
|
231
|
+
'swap-order-button-label': 'Sväng ruttens riktning till den motsatta',
|
|
232
|
+
'via-point': 'Via punkt',
|
|
233
|
+
'via-point-index': 'Via punkt {{index}}',
|
|
234
|
+
'viapoint-slack-amount': 'Stoppets varaktighet'
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
};
|
|
238
|
+
|
|
239
|
+
const i18n = i18next.createInstance({
|
|
240
|
+
fallbackLng: 'fi',
|
|
241
|
+
// debug: true,
|
|
242
|
+
resources: translations,
|
|
243
|
+
defaultNS: 'translation',
|
|
244
|
+
react: {
|
|
245
|
+
useSuspense: true
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
i18n.init();
|
|
249
|
+
|
|
250
|
+
var css_248z = ".styles_autosuggest-panel__GEaoJ {\n width: 100%;\n}\n\n.styles_autosuggest-searchpanel-text__7O850 {\n font-size: 24px;\n font-weight: var(--font-weight-medium);\n letter-spacing: -0.8px;\n color: #333;\n line-height: 1;\n margin-bottom: 17px;\n margin-top: unset;\n}\n@media screen and (min-width: 768px) {\n .styles_autosuggest-searchpanel-text__7O850 {\n letter-spacing: -0.8px;\n line-height: 27px;\n margin-bottom: 21px;\n }\n}\n\n.styles_origin-input-container__yfozN,\n.styles_destination-input-container__kJPky {\n display: flex;\n flex: 1 0 100%;\n}\n.styles_origin-input-container__yfozN input[type=text],\n.styles_destination-input-container__kJPky input[type=text] {\n margin: 0;\n}\n\n.styles_row__MvzsR {\n display: flex;\n flex-direction: row;\n}\n\n.styles_viapoints-container__fukkW {\n display: flex;\n flex-direction: column;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE {\n display: flex;\n flex: 1 0 100%;\n min-height: 50px;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE:first-child {\n margin-top: 6px;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE:not(:first-child) {\n margin-top: 3px;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE:last-child {\n margin-bottom: 6px;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM {\n display: flex;\n padding: 3px 0;\n flex-direction: column;\n background: #f2f5f7;\n border-radius: 5px;\n width: 100%;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-before__J1O3f {\n display: flex;\n min-width: 27px;\n justify-content: center;\n align-items: center;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-before__J1O3f svg {\n fill: #888;\n height: 20px;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9 {\n display: flex;\n align-items: center;\n width: 100%;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9 input[type=text] {\n margin: 0;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9.styles_viapoint-1__s2wSB > div.styles_viapoint__UnOwm {\n z-index: 15;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9.styles_viapoint-2__JNsq8 > div.styles_viapoint__UnOwm {\n z-index: 14;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9.styles_viapoint-3__tv7Qy > div.styles_viapoint__UnOwm {\n z-index: 13;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9.styles_viapoint-4__v0tfs > div.styles_viapoint__UnOwm {\n z-index: 12;\n}\n.styles_viapoints-container__fukkW .styles_viapoint-container__O-xAE .styles_light-gray-background__0vkzM .styles_viapoint-input-container__fEQi9.styles_viapoint-5__luT-- > div.styles_viapoint__UnOwm {\n z-index: 11;\n}\n\n.styles_viapoint-slack-time__dV527 {\n font-size: 13px;\n font-weight: normal;\n letter-spacing: -0.36px;\n color: #333;\n padding-left: 27px;\n padding-top: 12px;\n padding-bottom: 10px;\n}\n\n.styles_select-wrapper__zaWty {\n display: flex;\n height: 50px;\n margin-top: 9px;\n padding-left: 27px;\n padding-right: 47px;\n}\n\n.styles_via-point-button-container__kUBm7 {\n display: flex;\n}\n.styles_via-point-button-container__kUBm7 > div:nth-child(1) {\n order: 1;\n border-left: none;\n}\n.styles_via-point-button-container__kUBm7 > div:nth-child(2) {\n order: 2;\n border-left: 1px solid rgba(151, 151, 151, 0.2);\n}\n\n.styles_input-viapoint-slack-container__-LDqu {\n display: flex;\n flex-direction: column;\n}\n\n.styles_itinerary-search-control__1KyCb {\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n max-height: 50px;\n min-width: var(--width);\n}\n.styles_itinerary-search-control__1KyCb + .styles_itinerary-search-control__1KyCb {\n border-left: 1px solid rgba(151, 151, 151, 0.2);\n}\n.styles_itinerary-search-control__1KyCb .styles_opposite__BE7K1 {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer;\n}\n.styles_itinerary-search-control__1KyCb .styles_opposite__BE7K1 svg {\n width: 19px;\n height: 17px;\n}\n.styles_itinerary-search-control__1KyCb .styles_add-via-point__7E6zU {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 40px;\n cursor: pointer;\n}\n.styles_itinerary-search-control__1KyCb .styles_add-via-point__7E6zU svg {\n width: 20px;\n height: 22px;\n}\n.styles_itinerary-search-control__1KyCb .styles_add-via-point-slack__kddhr {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n min-width: 47px;\n cursor: pointer;\n}\n.styles_itinerary-search-control__1KyCb .styles_add-via-point-slack__kddhr svg {\n width: 18px;\n height: 19px;\n}\n.styles_itinerary-search-control__1KyCb .styles_remove-via-point__1oWx- {\n display: flex;\n justify-content: center;\n align-items: center;\n height: 100%;\n max-height: 44px;\n min-width: 40px;\n cursor: pointer;\n}\n.styles_itinerary-search-control__1KyCb .styles_remove-via-point__1oWx- svg {\n width: 14px;\n height: 14px;\n}\n\n.styles_combobox-icon__fhYvA {\n color: var(--color);\n border-left: solid #888 1px;\n height: 35px;\n}\n.styles_combobox-icon__fhYvA.styles_time-input-icon__L2TcV {\n padding: 9px 13px 0 13px;\n}\n.styles_combobox-icon__fhYvA.styles_time-input-icon__L2TcV svg {\n width: 18px;\n height: 19px;\n}\n\n.styles_rectangle-container__4Vtuo {\n display: block;\n position: relative;\n height: 9px;\n z-index: 19;\n}\n.styles_rectangle-container__4Vtuo .styles_rectangle__s-y7y {\n position: absolute;\n width: 4px;\n height: 25px;\n border-radius: 2px;\n background-color: #ddd;\n margin-left: 25px;\n margin-top: -9px;\n}\n\n.styles_search-panel-whitespace__RefGL {\n min-width: 40px;\n}";
|
|
251
|
+
var styles = {"autosuggest-panel":"styles_autosuggest-panel__GEaoJ","autosuggest-searchpanel-text":"styles_autosuggest-searchpanel-text__7O850","origin-input-container":"styles_origin-input-container__yfozN","destination-input-container":"styles_destination-input-container__kJPky","row":"styles_row__MvzsR","viapoints-container":"styles_viapoints-container__fukkW","viapoint-container":"styles_viapoint-container__O-xAE","light-gray-background":"styles_light-gray-background__0vkzM","viapoint-before":"styles_viapoint-before__J1O3f","viapoint-input-container":"styles_viapoint-input-container__fEQi9","viapoint-1":"styles_viapoint-1__s2wSB","viapoint":"styles_viapoint__UnOwm","viapoint-2":"styles_viapoint-2__JNsq8","viapoint-3":"styles_viapoint-3__tv7Qy","viapoint-4":"styles_viapoint-4__v0tfs","viapoint-5":"styles_viapoint-5__luT--","viapoint-slack-time":"styles_viapoint-slack-time__dV527","select-wrapper":"styles_select-wrapper__zaWty","via-point-button-container":"styles_via-point-button-container__kUBm7","input-viapoint-slack-container":"styles_input-viapoint-slack-container__-LDqu","itinerary-search-control":"styles_itinerary-search-control__1KyCb","opposite":"styles_opposite__BE7K1","add-via-point":"styles_add-via-point__7E6zU","add-via-point-slack":"styles_add-via-point-slack__kddhr","remove-via-point":"styles_remove-via-point__1oWx-","combobox-icon":"styles_combobox-icon__fhYvA","time-input-icon":"styles_time-input-icon__L2TcV","rectangle-container":"styles_rectangle-container__4Vtuo","rectangle":"styles_rectangle__s-y7y","search-panel-whitespace":"styles_search-panel-whitespace__RefGL"};
|
|
252
|
+
styleInject(css_248z);
|
|
253
|
+
|
|
254
|
+
const _excluded = ["children", "className", "enabled", "onClick", "onKeyPress", "wide"];
|
|
255
|
+
const getEmptyViaPointPlaceHolder = () => ({});
|
|
256
|
+
const isViaPointEmpty = viaPoint => {
|
|
257
|
+
if (viaPoint === undefined || isEmpty__default.default(viaPoint)) {
|
|
258
|
+
return true;
|
|
259
|
+
}
|
|
260
|
+
const keys = Object.keys(viaPoint);
|
|
261
|
+
return keys.length === 1 || keys.length === 2 && keys.includes('locationSlack');
|
|
262
|
+
};
|
|
263
|
+
const ItinerarySearchControl = _ref => {
|
|
264
|
+
let {
|
|
265
|
+
children,
|
|
266
|
+
className,
|
|
267
|
+
enabled,
|
|
268
|
+
onClick,
|
|
269
|
+
onKeyPress,
|
|
270
|
+
wide
|
|
271
|
+
} = _ref,
|
|
272
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
273
|
+
return /*#__PURE__*/React__default.default.createElement("div", {
|
|
274
|
+
className: styles['itinerary-search-control'],
|
|
275
|
+
style: {
|
|
276
|
+
'--width': wide ? '47px' : '40px'
|
|
277
|
+
}
|
|
278
|
+
}, onClick && enabled && /*#__PURE__*/React__default.default.createElement("div", Object.assign({}, rest, {
|
|
279
|
+
className: className,
|
|
280
|
+
onClick: onClick,
|
|
281
|
+
onKeyPress: onKeyPress,
|
|
282
|
+
role: "button",
|
|
283
|
+
tabIndex: "0"
|
|
284
|
+
}), children));
|
|
285
|
+
};
|
|
286
|
+
const updateViaPointSlack = (activeViaPointSlacks, updatedViaPointIndex, viaPointRemoved = false) => {
|
|
287
|
+
const foundAtIndex = activeViaPointSlacks.indexOf(updatedViaPointIndex);
|
|
288
|
+
if (foundAtIndex > -1) {
|
|
289
|
+
activeViaPointSlacks.splice(foundAtIndex, 1);
|
|
290
|
+
}
|
|
291
|
+
return viaPointRemoved ? activeViaPointSlacks.map(value => value > updatedViaPointIndex ? value - 1 : value) : activeViaPointSlacks;
|
|
292
|
+
};
|
|
293
|
+
const isKeyboardSelectionEvent = event => {
|
|
294
|
+
const space = [13, ' ', 'Spacebar'];
|
|
295
|
+
const enter = [32, 'Enter'];
|
|
296
|
+
const key = event && (event.key || event.which || event.keyCode) || '';
|
|
297
|
+
if (!key || !space.concat(enter).includes(key)) {
|
|
298
|
+
return false;
|
|
299
|
+
}
|
|
300
|
+
event.preventDefault();
|
|
301
|
+
return true;
|
|
302
|
+
};
|
|
303
|
+
const value = location => location && location.address || location && location.gps && location.ready && 'Nykyinen sijainti' || '';
|
|
304
|
+
const getLocationType = location => location && location.gps === true ? 'position' : 'location';
|
|
305
|
+
const getSlackTimeOptions = t => {
|
|
306
|
+
const timeOptions = [];
|
|
307
|
+
for (let i = 0; i <= 9; i++) {
|
|
308
|
+
const valueInMinutes = i * 10;
|
|
309
|
+
timeOptions.push({
|
|
310
|
+
displayName: `${valueInMinutes} ${t('minute-short')}`,
|
|
311
|
+
value: valueInMinutes * 60
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
return timeOptions;
|
|
315
|
+
};
|
|
316
|
+
process.env.NODE_ENV !== "production" ? ItinerarySearchControl.propTypes = {
|
|
317
|
+
children: PropTypes__default.default.node,
|
|
318
|
+
className: PropTypes__default.default.string.isRequired,
|
|
319
|
+
enabled: PropTypes__default.default.bool.isRequired,
|
|
320
|
+
onClick: PropTypes__default.default.func.isRequired,
|
|
321
|
+
onKeyPress: PropTypes__default.default.func.isRequired,
|
|
322
|
+
wide: PropTypes__default.default.bool
|
|
323
|
+
} : void 0;
|
|
324
|
+
ItinerarySearchControl.defaultProps = {
|
|
325
|
+
children: undefined,
|
|
326
|
+
wide: false
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
/**
|
|
330
|
+
* Panel that renders two DTAutosuggest search fields, including viapoint handling
|
|
331
|
+
*
|
|
332
|
+
* @example
|
|
333
|
+
* const searchContext = {
|
|
334
|
+
* isPeliasLocationAware: false // true / false does Let Pelias suggest based on current user location
|
|
335
|
+
* minimalRegexp: undefined // used for testing min. regexp. For example: new RegExp('.{2,}'),
|
|
336
|
+
* lineRegexp: undefined // identify searches for route numbers/labels: bus | train | metro. For example: new RegExp(
|
|
337
|
+
* // '(^[0-9]+[a-z]?$|^[yuleapinkrtdz]$|(^m[12]?b?$))',
|
|
338
|
+
* // 'i',
|
|
339
|
+
* // ),
|
|
340
|
+
* URL_PELIAS: '' // url for pelias searches
|
|
341
|
+
* feedIDs: ['HSL', 'HSLLautta'] // FeedId's like [HSL, HSLLautta]
|
|
342
|
+
* geocodingSources: ['oa','osm','nlsfi'] // sources for geocoding
|
|
343
|
+
* geocodingSearchParams; {} // Searchparmas fro geocoding
|
|
344
|
+
* getFavouriteLocations: () => ({}), // Function that returns array of favourite locations.
|
|
345
|
+
* getFavouriteStops: () => ({}), // Function that returns array of favourite stops.
|
|
346
|
+
* getLanguage: () => ({}), // Function that returns current language.
|
|
347
|
+
* getFavouriteRoutes: () => ({}), // Function that returns array of favourite routes.
|
|
348
|
+
* getPositions: () => ({}), // Function that returns user's geolocation.
|
|
349
|
+
* getRoutesQuery: () => ({}), // Function that returns query for fetching routes.
|
|
350
|
+
* getStopAndStationsQuery: () => ({}), // Function that fetches favourite stops and stations from graphql API.
|
|
351
|
+
* getFavouriteRoutesQuery: () => ({}), // Function that returns query for fetching favourite routes.
|
|
352
|
+
* getFavouriteVehicleRentalStations: () => ({}), // Function that returns favourite bike rental station.
|
|
353
|
+
* getFavouriteVehicleRentalStationsQuery: () => ({}), // Function that returns query for fetching favourite bike rental stations.
|
|
354
|
+
* startLocationWatch: () => ({}), // Function that locates users geolocation.
|
|
355
|
+
* saveSearch: () => ({}), // Function that saves search to old searches store.
|
|
356
|
+
* clearOldSearches: () => ({}), // Function that clears old searches store.
|
|
357
|
+
* getFutureRoutes: () => ({}), // Function that return future routes
|
|
358
|
+
* saveFutureRoute: () => ({}), // Function that saves a future route
|
|
359
|
+
* clearFutureRoutes: () => ({}), // Function that clears future routes
|
|
360
|
+
* };
|
|
361
|
+
*
|
|
362
|
+
* const origin = {
|
|
363
|
+
* lat: 60.169196,
|
|
364
|
+
* lon: 24.957674,
|
|
365
|
+
* address: 'Aleksanterinkatu, Helsinki',
|
|
366
|
+
* set: true,
|
|
367
|
+
* ready: true,
|
|
368
|
+
* }
|
|
369
|
+
*
|
|
370
|
+
* const destination = {
|
|
371
|
+
* lat: 60.199093,
|
|
372
|
+
* lon: 24.940536,
|
|
373
|
+
* address: 'Opastinsilta 6, Helsinki',
|
|
374
|
+
* set: true,
|
|
375
|
+
* ready: true,
|
|
376
|
+
* }
|
|
377
|
+
* onSelect(item, id) {
|
|
378
|
+
* return null; // Define what to do when a suggestion is being selected. None by default.
|
|
379
|
+
* }
|
|
380
|
+
* onClear(id) {
|
|
381
|
+
* return null; // Define what to do when a suggestion is being selected. None by default.
|
|
382
|
+
* }
|
|
383
|
+
* const getAutoSuggestIcons: {
|
|
384
|
+
* // Called for every city bike station rendered as a search suggestion. Should return the icon and
|
|
385
|
+
* // color used for that station. Two icons are available, 'citybike-stop-digitransit' anditybike-stop-digitransit-secondary'.
|
|
386
|
+
* citybikes: station => {
|
|
387
|
+
* return ['citybike-stop-digitransit', '#f2b62d'];
|
|
388
|
+
* }
|
|
389
|
+
* }
|
|
390
|
+
* const targets = ['Locations', 'Stops', 'Routes']; // Defines what you are searching. all available options are Locations, Stops, Routes, VehicleRentalStations, FutureRoutes, MapPosition and CurrentPosition. Leave empty to search all targets.
|
|
391
|
+
* const sources = ['Favourite', 'History', 'Datasource'] // Defines where you are searching. all available are: Favourite, History (previously searched searches), and Datasource. Leave empty to use all sources.
|
|
392
|
+
* <DTAutosuggestPanel
|
|
393
|
+
* appElement={appElement} // Required. Root element's id. Needed for react-modal component.
|
|
394
|
+
* origin={origin} // Selected origin point
|
|
395
|
+
* destination={destination} // Selected destination point
|
|
396
|
+
* originPlaceHolder={'Give origin'} // Optional Give string shown initially inside origin search field
|
|
397
|
+
* destinationPlaceHolder={'Give destination'} // Optional Give string shown initally inside destination search field
|
|
398
|
+
* initialViaPoints={[]} // Optional. If showViapointControl is set to true, pass initial via points to the panel. Currently no default implementation is given.
|
|
399
|
+
* updateViaPoints={() => return []} // Optional. If showViapointControl is set to true, define how to update your via point list with this function. Currenlty no default implementation is given.
|
|
400
|
+
* swapOrder={() => return null} // Optional. If showSwapControl is set to true, define how to swap order of your points (origin, destination, viapoints). Currently no default implementation is given.
|
|
401
|
+
* searchContext={searchContext}
|
|
402
|
+
* getAutoSuggestIcons={getAutoSuggestIcons}
|
|
403
|
+
* onSelect={this.onSelect}
|
|
404
|
+
* onClear={this.onClear}
|
|
405
|
+
* lang="fi" // Define language fi sv or en.
|
|
406
|
+
* addAnalyticsEvent={null} // Optional. you can record an analytics event if you wish. if passed, component will pass an category, action, name parameters to addAnalyticsEvent
|
|
407
|
+
* disableAutoFocus={false} // Optional. use this to disable autofocus completely from DTAutosuggestPanel
|
|
408
|
+
* sources={sources}
|
|
409
|
+
* targets={targets}
|
|
410
|
+
* isMobile // Optional. Defaults to false. Whether to use mobile search.
|
|
411
|
+
* originMobileLabel="Origin label" // Optional. Custom label text for origin field on mobile.
|
|
412
|
+
* destinationMobileLabel="Destination label" // Optional. Custom label text for destination field on mobile.
|
|
413
|
+
* handleFocusChange={() => {}} // Optional. If defined overrides default onFocusChange behaviour
|
|
414
|
+
* showSwapControl={false} // Optional.
|
|
415
|
+
* showViapointControl={false} // Optional.
|
|
416
|
+
*/
|
|
417
|
+
|
|
418
|
+
const locationShape = process.env.NODE_ENV !== "production" ? PropTypes__default.default.shape({
|
|
419
|
+
address: PropTypes__default.default.string,
|
|
420
|
+
lat: PropTypes__default.default.number,
|
|
421
|
+
lon: PropTypes__default.default.number,
|
|
422
|
+
locationSlack: PropTypes__default.default.number
|
|
423
|
+
}) : {};
|
|
424
|
+
class DTAutosuggestPanel extends React__default.default.Component {
|
|
425
|
+
constructor(props) {
|
|
426
|
+
super(props);
|
|
427
|
+
_defineProperty(this, "storeReference", ref => {
|
|
428
|
+
this.setState(prevState => ({
|
|
429
|
+
refs: [...prevState.refs, ref]
|
|
430
|
+
}));
|
|
431
|
+
});
|
|
432
|
+
_defineProperty(this, "handleFocusChange", () => {
|
|
433
|
+
const {
|
|
434
|
+
destination
|
|
435
|
+
} = this.props;
|
|
436
|
+
if (!destination || !destination.lat) {
|
|
437
|
+
this.state.refs[1].focus();
|
|
438
|
+
}
|
|
439
|
+
});
|
|
440
|
+
_defineProperty(this, "updateViaPoints", viaPoints => {
|
|
441
|
+
if (viaPoints.length === 0) {
|
|
442
|
+
this.props.updateViaPoints([]);
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
this.props.updateViaPoints(viaPoints.filter(vp => !isViaPointEmpty(vp)));
|
|
446
|
+
});
|
|
447
|
+
_defineProperty(this, "handleToggleViaPointSlackClick", viaPointIndex => {
|
|
448
|
+
const {
|
|
449
|
+
activeSlackInputs
|
|
450
|
+
} = this.state;
|
|
451
|
+
this.setState({
|
|
452
|
+
activeSlackInputs: activeSlackInputs.includes(viaPointIndex) ? updateViaPointSlack(activeSlackInputs, viaPointIndex) : activeSlackInputs.concat([viaPointIndex])
|
|
453
|
+
});
|
|
454
|
+
});
|
|
455
|
+
_defineProperty(this, "handleViaPointSlackTimeSelected", (slackTimeInSeconds, i) => {
|
|
456
|
+
if (this.props.addAnalyticsEvent) {
|
|
457
|
+
this.props.addAnalyticsEvent({
|
|
458
|
+
action: 'EditViaPointStopDuration',
|
|
459
|
+
category: 'ItinerarySettings',
|
|
460
|
+
name: slackTimeInSeconds / 60
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
const {
|
|
464
|
+
viaPoints
|
|
465
|
+
} = this.props;
|
|
466
|
+
viaPoints[i].locationSlack = Number.parseInt(slackTimeInSeconds, 10);
|
|
467
|
+
this.updateViaPoints(viaPoints);
|
|
468
|
+
});
|
|
469
|
+
_defineProperty(this, "handleViaPointLocationSelected", (viaPointLocation, i) => {
|
|
470
|
+
this.props.handleViaPointLocationSelected(viaPointLocation, i);
|
|
471
|
+
});
|
|
472
|
+
_defineProperty(this, "handleRemoveViaPointClick", viaPointIndex => {
|
|
473
|
+
if (this.props.addAnalyticsEvent) {
|
|
474
|
+
this.props.addAnalyticsEvent({
|
|
475
|
+
action: 'RemoveJourneyViaPoint',
|
|
476
|
+
category: 'ItinerarySettings',
|
|
477
|
+
name: null
|
|
478
|
+
});
|
|
479
|
+
}
|
|
480
|
+
const {
|
|
481
|
+
activeSlackInputs
|
|
482
|
+
} = this.state;
|
|
483
|
+
const {
|
|
484
|
+
viaPoints
|
|
485
|
+
} = this.props;
|
|
486
|
+
viaPoints.splice(viaPointIndex, 1);
|
|
487
|
+
this.setState({
|
|
488
|
+
activeSlackInputs: updateViaPointSlack(activeSlackInputs, viaPointIndex, true)
|
|
489
|
+
}, () => this.updateViaPoints(viaPoints));
|
|
490
|
+
});
|
|
491
|
+
_defineProperty(this, "handleAddViaPointClick", () => {
|
|
492
|
+
if (this.props.addAnalyticsEvent) {
|
|
493
|
+
this.props.addAnalyticsEvent({
|
|
494
|
+
action: 'AddJourneyViaPoint',
|
|
495
|
+
category: 'ItinerarySettings',
|
|
496
|
+
name: 'QuickSettingsButton'
|
|
497
|
+
});
|
|
498
|
+
}
|
|
499
|
+
const {
|
|
500
|
+
viaPoints
|
|
501
|
+
} = this.props;
|
|
502
|
+
viaPoints.push(getEmptyViaPointPlaceHolder());
|
|
503
|
+
// We need to update the state so that placeHolder will show up in panel.
|
|
504
|
+
// eslint-disable-next-line react/no-access-state-in-setstate
|
|
505
|
+
this.setState(this.state);
|
|
506
|
+
});
|
|
507
|
+
_defineProperty(this, "handleSwapOrderClick", () => {
|
|
508
|
+
if (this.props.addAnalyticsEvent) {
|
|
509
|
+
this.props.addAnalyticsEvent({
|
|
510
|
+
action: 'SwitchJourneyStartAndEndPointOrder',
|
|
511
|
+
category: 'ItinerarySettings',
|
|
512
|
+
name: null
|
|
513
|
+
});
|
|
514
|
+
}
|
|
515
|
+
const {
|
|
516
|
+
viaPoints
|
|
517
|
+
} = this.props;
|
|
518
|
+
viaPoints.reverse();
|
|
519
|
+
this.props.swapOrder();
|
|
520
|
+
});
|
|
521
|
+
_defineProperty(this, "getSlackDisplay", slackInSeconds => `${slackInSeconds / 60} ${this.props.t('minute-short', {
|
|
522
|
+
lng: this.props.lang
|
|
523
|
+
})}`);
|
|
524
|
+
this.state = {
|
|
525
|
+
activeSlackInputs: [],
|
|
526
|
+
refs: []
|
|
527
|
+
};
|
|
528
|
+
}
|
|
529
|
+
render() {
|
|
530
|
+
const {
|
|
531
|
+
origin,
|
|
532
|
+
searchPanelText,
|
|
533
|
+
searchContext,
|
|
534
|
+
disableAutoFocus,
|
|
535
|
+
viaPoints,
|
|
536
|
+
originMobileLabel,
|
|
537
|
+
destinationMobileLabel,
|
|
538
|
+
fontWeights,
|
|
539
|
+
onFocusChange,
|
|
540
|
+
showSwapControl,
|
|
541
|
+
showViapointControl,
|
|
542
|
+
t,
|
|
543
|
+
lang: lng
|
|
544
|
+
} = this.props;
|
|
545
|
+
const {
|
|
546
|
+
primary
|
|
547
|
+
} = this.props.colors;
|
|
548
|
+
const {
|
|
549
|
+
activeSlackInputs
|
|
550
|
+
} = this.state;
|
|
551
|
+
const slackTime = getSlackTimeOptions(t);
|
|
552
|
+
const defaultSlackTimeValue = 0;
|
|
553
|
+
const getViaPointSlackTimeOrDefault = (viaPoint, defaultValue = defaultSlackTimeValue) => viaPoint && viaPoint.locationSlack || defaultValue;
|
|
554
|
+
const isViaPointSlackTimeInputActive = index => activeSlackInputs.includes(index);
|
|
555
|
+
return /*#__PURE__*/React__default.default.createElement("div", {
|
|
556
|
+
className: cx__default.default(styles['autosuggest-panel'], this.props.isMobile && "small"),
|
|
557
|
+
style: {
|
|
558
|
+
'--color': primary,
|
|
559
|
+
'--font-weight-medium': fontWeights.medium
|
|
560
|
+
}
|
|
561
|
+
}, ' ', searchPanelText ? /*#__PURE__*/React__default.default.createElement("div", null, /*#__PURE__*/React__default.default.createElement("h1", {
|
|
562
|
+
className: styles['autosuggest-searchpanel-text']
|
|
563
|
+
}, ' ', searchPanelText)) : null, /*#__PURE__*/React__default.default.createElement("div", {
|
|
564
|
+
className: styles['origin-input-container']
|
|
565
|
+
}, /*#__PURE__*/React__default.default.createElement(DTAutoSuggest__default.default, {
|
|
566
|
+
appElement: this.props.appElement,
|
|
567
|
+
icon: "originEllipse",
|
|
568
|
+
id: "origin",
|
|
569
|
+
autoFocus: disableAutoFocus === true ? false : !this.props.isMobile && !origin?.lat,
|
|
570
|
+
storeRef: this.storeReference,
|
|
571
|
+
refPoint: this.props.refPoint,
|
|
572
|
+
className: getLocationType(origin),
|
|
573
|
+
placeholder: this.props.originPlaceHolder,
|
|
574
|
+
value: value(origin),
|
|
575
|
+
searchContext: searchContext,
|
|
576
|
+
getAutoSuggestIcons: this.props.getAutoSuggestIcons,
|
|
577
|
+
onSelect: this.props.onSelect,
|
|
578
|
+
onClear: this.props.onClear,
|
|
579
|
+
focusChange: onFocusChange || this.handleFocusChange,
|
|
580
|
+
lang: this.props.lang,
|
|
581
|
+
sources: this.props.sources,
|
|
582
|
+
targets: this.props.targets,
|
|
583
|
+
filterResults: this.props.filterResults,
|
|
584
|
+
isMobile: this.props.isMobile,
|
|
585
|
+
colors: this.props.colors,
|
|
586
|
+
mobileLabel: originMobileLabel,
|
|
587
|
+
fontWeights: this.props.fontWeights,
|
|
588
|
+
modeSet: this.props.modeSet,
|
|
589
|
+
showScroll: this.props.showScroll,
|
|
590
|
+
isEmbedded: this.props.isEmbedded
|
|
591
|
+
}), (showSwapControl || showViapointControl) && /*#__PURE__*/React__default.default.createElement(ItinerarySearchControl, {
|
|
592
|
+
className: styles.opposite,
|
|
593
|
+
enabled: showSwapControl,
|
|
594
|
+
onClick: () => this.handleSwapOrderClick(),
|
|
595
|
+
onKeyPress: e => isKeyboardSelectionEvent(e) && this.handleSwapOrderClick(),
|
|
596
|
+
"aria-label": t('swap-order-button-label', {
|
|
597
|
+
lng
|
|
598
|
+
})
|
|
599
|
+
}, /*#__PURE__*/React__default.default.createElement(Icon__default.default, {
|
|
600
|
+
img: "opposite",
|
|
601
|
+
color: primary
|
|
602
|
+
}))), viaPoints.length === 0 && /*#__PURE__*/React__default.default.createElement("div", {
|
|
603
|
+
className: styles['rectangle-container']
|
|
604
|
+
}, /*#__PURE__*/React__default.default.createElement("div", {
|
|
605
|
+
className: styles.rectangle
|
|
606
|
+
})), /*#__PURE__*/React__default.default.createElement(reactSortablejs.ReactSortable, {
|
|
607
|
+
className: styles['viapoints-container'],
|
|
608
|
+
list: viaPoints,
|
|
609
|
+
handle: `.${styles['viapoint-before']}`,
|
|
610
|
+
animation: 200,
|
|
611
|
+
disabled: viaPoints.length <= 1,
|
|
612
|
+
setList: items => {
|
|
613
|
+
const newViaPoints = items.filter(vp => !isViaPointEmpty(vp));
|
|
614
|
+
if (newViaPoints.length > 0) {
|
|
615
|
+
this.props.updateViaPoints(newViaPoints);
|
|
616
|
+
}
|
|
617
|
+
}
|
|
618
|
+
}, viaPoints.map((o, i) => /*#__PURE__*/React__default.default.createElement("div", {
|
|
619
|
+
className: cx__default.default(styles['viapoint-container']),
|
|
620
|
+
key: `viapoint-${i}` // eslint-disable-line
|
|
621
|
+
}, /*#__PURE__*/React__default.default.createElement("div", {
|
|
622
|
+
className: styles['light-gray-background']
|
|
623
|
+
}, /*#__PURE__*/React__default.default.createElement("div", {
|
|
624
|
+
className: styles.row
|
|
625
|
+
}, /*#__PURE__*/React__default.default.createElement("div", {
|
|
626
|
+
className: styles['viapoint-before'],
|
|
627
|
+
style: viaPoints.length > 1 ? {
|
|
628
|
+
cursor: 'move'
|
|
629
|
+
} : {}
|
|
630
|
+
}, viaPoints.length > 1 && /*#__PURE__*/React__default.default.createElement(Icon__default.default, {
|
|
631
|
+
img: "ellipsis",
|
|
632
|
+
rotate: 90,
|
|
633
|
+
color: primary
|
|
634
|
+
})), /*#__PURE__*/React__default.default.createElement("div", {
|
|
635
|
+
className: `${styles['viapoint-input-container']} ${styles[`viapoint-${i + 1}`]}`
|
|
636
|
+
}, /*#__PURE__*/React__default.default.createElement(DTAutoSuggest__default.default, {
|
|
637
|
+
appElement: this.props.appElement,
|
|
638
|
+
icon: "mapMarker",
|
|
639
|
+
id: "via-point",
|
|
640
|
+
ariaLabel: t('via-point-index', {
|
|
641
|
+
index: i + 1,
|
|
642
|
+
lng
|
|
643
|
+
}),
|
|
644
|
+
autoFocus: disableAutoFocus === true ? false : !this.props.isMobile,
|
|
645
|
+
placeholder: "via-point",
|
|
646
|
+
className: "viapoint",
|
|
647
|
+
searchContext: searchContext,
|
|
648
|
+
refPoint: this.props.refPoint,
|
|
649
|
+
value: o && o.address || '',
|
|
650
|
+
onSelect: this.props.onSelect,
|
|
651
|
+
onClear: this.props.onClear,
|
|
652
|
+
handleViaPoints: item => this.handleViaPointLocationSelected(item, i),
|
|
653
|
+
lang: this.props.lang,
|
|
654
|
+
sources: this.props.sources,
|
|
655
|
+
targets: this.props.targets,
|
|
656
|
+
filterResults: this.props.filterResults,
|
|
657
|
+
getAutoSuggestIcons: this.props.getAutoSuggestIcons,
|
|
658
|
+
isMobile: this.props.isMobile,
|
|
659
|
+
fontWeights: this.props.fontWeights,
|
|
660
|
+
modeSet: this.props.modeSet,
|
|
661
|
+
colors: this.props.colors,
|
|
662
|
+
showScroll: this.props.showScroll
|
|
663
|
+
})), this.props.showSlackControl && /*#__PURE__*/React__default.default.createElement(ItinerarySearchControl, {
|
|
664
|
+
className: styles['add-via-point-slack'],
|
|
665
|
+
enabled: this.props.showViapointControl,
|
|
666
|
+
onClick: () => this.handleToggleViaPointSlackClick(i),
|
|
667
|
+
onKeyPress: e => isKeyboardSelectionEvent(e) && this.handleToggleViaPointSlackClick(i),
|
|
668
|
+
"aria-label": t(isViaPointSlackTimeInputActive(i) ? 'add-via-duration-button-label-open' : 'add-via-duration-button-label-close', {
|
|
669
|
+
index: i + 1,
|
|
670
|
+
lng
|
|
671
|
+
}),
|
|
672
|
+
wide: true
|
|
673
|
+
}, /*#__PURE__*/React__default.default.createElement(Icon__default.default, {
|
|
674
|
+
img: "time",
|
|
675
|
+
color: primary
|
|
676
|
+
}))), !isViaPointSlackTimeInputActive(i) && viaPoints[i] && viaPoints[i].locationSlack > 0 && /*#__PURE__*/React__default.default.createElement("span", {
|
|
677
|
+
className: styles['viapoint-slack-time']
|
|
678
|
+
}, `${t('viapoint-slack-amount', {
|
|
679
|
+
lng
|
|
680
|
+
})}: ${this.getSlackDisplay(viaPoints[i].locationSlack)}`), /*#__PURE__*/React__default.default.createElement("div", {
|
|
681
|
+
className: cx__default.default(styles['input-viapoint-slack-container'], !isViaPointSlackTimeInputActive(i) && "collapsed")
|
|
682
|
+
}, /*#__PURE__*/React__default.default.createElement("div", {
|
|
683
|
+
className: styles['select-wrapper']
|
|
684
|
+
}, /*#__PURE__*/React__default.default.createElement(Select, {
|
|
685
|
+
id: `viapoint-slack-${i}`,
|
|
686
|
+
label: t('viapoint-slack-amount', {
|
|
687
|
+
lng
|
|
688
|
+
}),
|
|
689
|
+
options: slackTime,
|
|
690
|
+
value: getViaPointSlackTimeOrDefault(viaPoints[i]),
|
|
691
|
+
viaPointIndex: i,
|
|
692
|
+
icon: /*#__PURE__*/React__default.default.createElement("span", {
|
|
693
|
+
className: `${styles['combobox-icon']} ${styles['time-input-icon']}`
|
|
694
|
+
}, /*#__PURE__*/React__default.default.createElement(Icon__default.default, {
|
|
695
|
+
img: "time",
|
|
696
|
+
color: primary
|
|
697
|
+
})),
|
|
698
|
+
onSlackTimeSelected: this.handleViaPointSlackTimeSelected
|
|
699
|
+
})))), /*#__PURE__*/React__default.default.createElement(ItinerarySearchControl, {
|
|
700
|
+
className: styles['remove-via-point'],
|
|
701
|
+
enabled: this.props.showViapointControl,
|
|
702
|
+
onClick: () => this.handleRemoveViaPointClick(i),
|
|
703
|
+
onKeyPress: e => isKeyboardSelectionEvent(e) && this.handleRemoveViaPointClick(i),
|
|
704
|
+
"aria-label": t('remove-via-button-label', {
|
|
705
|
+
index: i + 1,
|
|
706
|
+
lng
|
|
707
|
+
})
|
|
708
|
+
}, /*#__PURE__*/React__default.default.createElement(Icon__default.default, {
|
|
709
|
+
img: "trash",
|
|
710
|
+
color: primary
|
|
711
|
+
}))))), /*#__PURE__*/React__default.default.createElement("div", {
|
|
712
|
+
className: styles['destination-input-container']
|
|
713
|
+
}, /*#__PURE__*/React__default.default.createElement(DTAutoSuggest__default.default, {
|
|
714
|
+
appElement: this.props.appElement,
|
|
715
|
+
icon: "mapMarker",
|
|
716
|
+
id: "destination",
|
|
717
|
+
autoFocus: disableAutoFocus === true ? false : !this.props.isMobile && !Number.isNaN(origin?.lat),
|
|
718
|
+
storeRef: this.storeReference,
|
|
719
|
+
placeholder: this.props.destinationPlaceHolder,
|
|
720
|
+
className: getLocationType(this.props.destination),
|
|
721
|
+
getAutoSuggestIcons: this.props.getAutoSuggestIcons,
|
|
722
|
+
searchContext: searchContext,
|
|
723
|
+
onSelect: this.props.onSelect,
|
|
724
|
+
onClear: this.props.onClear,
|
|
725
|
+
refPoint: this.props.refPoint,
|
|
726
|
+
value: value(this.props.destination),
|
|
727
|
+
lang: this.props.lang,
|
|
728
|
+
sources: this.props.sources,
|
|
729
|
+
targets: this.props.targets,
|
|
730
|
+
filterResults: this.props.filterResults,
|
|
731
|
+
isMobile: this.props.isMobile,
|
|
732
|
+
mobileLabel: destinationMobileLabel,
|
|
733
|
+
fontWeights: this.props.fontWeights,
|
|
734
|
+
modeSet: this.props.modeSet,
|
|
735
|
+
colors: this.props.colors,
|
|
736
|
+
showScroll: this.props.showScroll,
|
|
737
|
+
isEmbedded: this.props.isEmbedded
|
|
738
|
+
}), (showSwapControl || showViapointControl) && /*#__PURE__*/React__default.default.createElement(ItinerarySearchControl, {
|
|
739
|
+
className: cx__default.default(styles['add-via-point'], styles.more, viaPoints.length > 4 && "collapsed"),
|
|
740
|
+
enabled: showViapointControl && viaPoints.length === 0,
|
|
741
|
+
onClick: () => this.handleAddViaPointClick(),
|
|
742
|
+
onKeyPress: e => isKeyboardSelectionEvent(e) && this.handleAddViaPointClick(),
|
|
743
|
+
"aria-label": t('add-via-button-label', {
|
|
744
|
+
lng
|
|
745
|
+
})
|
|
746
|
+
}, /*#__PURE__*/React__default.default.createElement(Icon__default.default, {
|
|
747
|
+
img: "viapoint",
|
|
748
|
+
width: 1.25,
|
|
749
|
+
height: 1.375,
|
|
750
|
+
color: primary
|
|
751
|
+
}))));
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
_defineProperty(DTAutosuggestPanel, "defaultProps", {
|
|
755
|
+
origin: undefined,
|
|
756
|
+
destination: undefined,
|
|
757
|
+
viaPoints: [],
|
|
758
|
+
originPlaceHolder: 'give-origin',
|
|
759
|
+
destinationPlaceHolder: 'give-destination',
|
|
760
|
+
swapOrder: undefined,
|
|
761
|
+
updateViaPoints: () => {},
|
|
762
|
+
searchPanelText: undefined,
|
|
763
|
+
sources: [],
|
|
764
|
+
targets: [],
|
|
765
|
+
filterResults: undefined,
|
|
766
|
+
onClear: undefined,
|
|
767
|
+
getAutoSuggestIcons: undefined,
|
|
768
|
+
refPoint: undefined,
|
|
769
|
+
addAnalyticsEvent: undefined,
|
|
770
|
+
disableAutoFocus: false,
|
|
771
|
+
isMobile: false,
|
|
772
|
+
handleViaPointLocationSelected: undefined,
|
|
773
|
+
originMobileLabel: null,
|
|
774
|
+
destinationMobileLabel: null,
|
|
775
|
+
modeSet: undefined,
|
|
776
|
+
colors: Icon.defaultColors,
|
|
777
|
+
fontWeights: {
|
|
778
|
+
medium: 500
|
|
779
|
+
},
|
|
780
|
+
showScroll: false,
|
|
781
|
+
onFocusChange: undefined,
|
|
782
|
+
isEmbedded: false,
|
|
783
|
+
showSwapControl: false,
|
|
784
|
+
showViapointControl: false,
|
|
785
|
+
showSlackControl: false
|
|
786
|
+
});
|
|
787
|
+
process.env.NODE_ENV !== "production" ? DTAutosuggestPanel.propTypes = {
|
|
788
|
+
appElement: PropTypes__default.default.string.isRequired,
|
|
789
|
+
origin: locationShape,
|
|
790
|
+
destination: locationShape,
|
|
791
|
+
originPlaceHolder: PropTypes__default.default.string,
|
|
792
|
+
destinationPlaceHolder: PropTypes__default.default.string,
|
|
793
|
+
viaPoints: PropTypes__default.default.arrayOf(locationShape),
|
|
794
|
+
updateViaPoints: PropTypes__default.default.func,
|
|
795
|
+
handleViaPointLocationSelected: PropTypes__default.default.func,
|
|
796
|
+
swapOrder: PropTypes__default.default.func,
|
|
797
|
+
searchPanelText: PropTypes__default.default.string,
|
|
798
|
+
searchContext: PropTypes__default.default.shape({
|
|
799
|
+
URL_PELIAS: PropTypes__default.default.string
|
|
800
|
+
}).isRequired,
|
|
801
|
+
onSelect: PropTypes__default.default.func.isRequired,
|
|
802
|
+
onClear: PropTypes__default.default.func,
|
|
803
|
+
addAnalyticsEvent: PropTypes__default.default.func,
|
|
804
|
+
lang: PropTypes__default.default.string.isRequired,
|
|
805
|
+
disableAutoFocus: PropTypes__default.default.bool,
|
|
806
|
+
sources: PropTypes__default.default.arrayOf(PropTypes__default.default.string),
|
|
807
|
+
targets: PropTypes__default.default.arrayOf(PropTypes__default.default.string),
|
|
808
|
+
filterResults: PropTypes__default.default.func,
|
|
809
|
+
isMobile: PropTypes__default.default.bool,
|
|
810
|
+
originMobileLabel: PropTypes__default.default.string,
|
|
811
|
+
destinationMobileLabel: PropTypes__default.default.string,
|
|
812
|
+
refPoint: locationShape,
|
|
813
|
+
modeSet: PropTypes__default.default.string,
|
|
814
|
+
colors: PropTypes__default.default.objectOf(PropTypes__default.default.string),
|
|
815
|
+
getAutoSuggestIcons: PropTypes__default.default.objectOf(PropTypes__default.default.func),
|
|
816
|
+
fontWeights: PropTypes__default.default.shape({
|
|
817
|
+
medium: PropTypes__default.default.number
|
|
818
|
+
}),
|
|
819
|
+
showScroll: PropTypes__default.default.bool,
|
|
820
|
+
onFocusChange: PropTypes__default.default.func,
|
|
821
|
+
isEmbedded: PropTypes__default.default.bool,
|
|
822
|
+
showSwapControl: PropTypes__default.default.bool,
|
|
823
|
+
showViapointControl: PropTypes__default.default.bool,
|
|
824
|
+
showSlackControl: PropTypes__default.default.bool,
|
|
825
|
+
t: PropTypes__default.default.func.isRequired
|
|
826
|
+
} : void 0;
|
|
827
|
+
const DTAutosuggestPanelWithTranslation = reactI18next.withTranslation()(DTAutosuggestPanel);
|
|
828
|
+
var index = props => {
|
|
829
|
+
return /*#__PURE__*/React__default.default.createElement(reactI18next.I18nextProvider, {
|
|
830
|
+
i18n: i18n
|
|
831
|
+
}, /*#__PURE__*/React__default.default.createElement(DTAutosuggestPanelWithTranslation, props));
|
|
832
|
+
};
|
|
833
|
+
|
|
834
|
+
exports.default = index;
|
|
835
|
+
exports.getEmptyViaPointPlaceHolder = getEmptyViaPointPlaceHolder;
|
|
836
|
+
|
|
837
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
838
|
+
|
|
839
|
+
}));
|
|
840
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZGV2ZWxvcG1lbnQuY2pzIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vdHlwZW9mLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJpbWl0aXZlLmpzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL3RvUHJvcGVydHlLZXkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZGVmaW5lUHJvcGVydHkuanMiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZS5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllcy5qcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9zdHlsZS1pbmplY3QvZGlzdC9zdHlsZS1pbmplY3QuZXMuanMiLCIuLi9zcmMvaGVscGVycy9TZWxlY3QuanN4IiwiLi4vc3JjL2hlbHBlcnMvdHJhbnNsYXRpb25zLmpzIiwiLi4vc3JjL2hlbHBlcnMvaTE4bi5qcyIsIi4uL3NyYy9pbmRleC5qc3giXSwic291cmNlc0NvbnRlbnQiOlsiZnVuY3Rpb24gX3R5cGVvZihvKSB7XG4gIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICByZXR1cm4gX3R5cGVvZiA9IFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIFwic3ltYm9sXCIgPT0gdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA/IGZ1bmN0aW9uIChvKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvO1xuICB9IDogZnVuY3Rpb24gKG8pIHtcbiAgICByZXR1cm4gbyAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgbyAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2YgbztcbiAgfSwgX3R5cGVvZihvKTtcbn1cbmV4cG9ydCB7IF90eXBlb2YgYXMgZGVmYXVsdCB9OyIsImltcG9ydCBfdHlwZW9mIGZyb20gXCIuL3R5cGVvZi5qc1wiO1xuZnVuY3Rpb24gdG9QcmltaXRpdmUodCwgcikge1xuICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKHQpIHx8ICF0KSByZXR1cm4gdDtcbiAgdmFyIGUgPSB0W1N5bWJvbC50b1ByaW1pdGl2ZV07XG4gIGlmICh2b2lkIDAgIT09IGUpIHtcbiAgICB2YXIgaSA9IGUuY2FsbCh0LCByIHx8IFwiZGVmYXVsdFwiKTtcbiAgICBpZiAoXCJvYmplY3RcIiAhPSBfdHlwZW9mKGkpKSByZXR1cm4gaTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQEB0b1ByaW1pdGl2ZSBtdXN0IHJldHVybiBhIHByaW1pdGl2ZSB2YWx1ZS5cIik7XG4gIH1cbiAgcmV0dXJuIChcInN0cmluZ1wiID09PSByID8gU3RyaW5nIDogTnVtYmVyKSh0KTtcbn1cbmV4cG9ydCB7IHRvUHJpbWl0aXZlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgX3R5cGVvZiBmcm9tIFwiLi90eXBlb2YuanNcIjtcbmltcG9ydCB0b1ByaW1pdGl2ZSBmcm9tIFwiLi90b1ByaW1pdGl2ZS5qc1wiO1xuZnVuY3Rpb24gdG9Qcm9wZXJ0eUtleSh0KSB7XG4gIHZhciBpID0gdG9QcmltaXRpdmUodCwgXCJzdHJpbmdcIik7XG4gIHJldHVybiBcInN5bWJvbFwiID09IF90eXBlb2YoaSkgPyBpIDogaSArIFwiXCI7XG59XG5leHBvcnQgeyB0b1Byb3BlcnR5S2V5IGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgdG9Qcm9wZXJ0eUtleSBmcm9tIFwiLi90b1Byb3BlcnR5S2V5LmpzXCI7XG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZSwgciwgdCkge1xuICByZXR1cm4gKHIgPSB0b1Byb3BlcnR5S2V5KHIpKSBpbiBlID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIHIsIHtcbiAgICB2YWx1ZTogdCxcbiAgICBlbnVtZXJhYmxlOiAhMCxcbiAgICBjb25maWd1cmFibGU6ICEwLFxuICAgIHdyaXRhYmxlOiAhMFxuICB9KSA6IGVbcl0gPSB0LCBlO1xufVxuZXhwb3J0IHsgX2RlZmluZVByb3BlcnR5IGFzIGRlZmF1bHQgfTsiLCJmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyLCBlKSB7XG4gIGlmIChudWxsID09IHIpIHJldHVybiB7fTtcbiAgdmFyIHQgPSB7fTtcbiAgZm9yICh2YXIgbiBpbiByKSBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyLCBuKSkge1xuICAgIGlmICgtMSAhPT0gZS5pbmRleE9mKG4pKSBjb250aW51ZTtcbiAgICB0W25dID0gcltuXTtcbiAgfVxuICByZXR1cm4gdDtcbn1cbmV4cG9ydCB7IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGFzIGRlZmF1bHQgfTsiLCJpbXBvcnQgb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiLi9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzXCI7XG5mdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMoZSwgdCkge1xuICBpZiAobnVsbCA9PSBlKSByZXR1cm4ge307XG4gIHZhciBvLFxuICAgIHIsXG4gICAgaSA9IG9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoZSwgdCk7XG4gIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgdmFyIG4gPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUpO1xuICAgIGZvciAociA9IDA7IHIgPCBuLmxlbmd0aDsgcisrKSBvID0gbltyXSwgLTEgPT09IHQuaW5kZXhPZihvKSAmJiB7fS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKGUsIG8pICYmIChpW29dID0gZVtvXSk7XG4gIH1cbiAgcmV0dXJuIGk7XG59XG5leHBvcnQgeyBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMgYXMgZGVmYXVsdCB9OyIsImZ1bmN0aW9uIHN0eWxlSW5qZWN0KGNzcywgcmVmKSB7XG4gIGlmICggcmVmID09PSB2b2lkIDAgKSByZWYgPSB7fTtcbiAgdmFyIGluc2VydEF0ID0gcmVmLmluc2VydEF0O1xuXG4gIGlmICghY3NzIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHsgcmV0dXJuOyB9XG5cbiAgdmFyIGhlYWQgPSBkb2N1bWVudC5oZWFkIHx8IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdoZWFkJylbMF07XG4gIHZhciBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gIHN0eWxlLnR5cGUgPSAndGV4dC9jc3MnO1xuXG4gIGlmIChpbnNlcnRBdCA9PT0gJ3RvcCcpIHtcbiAgICBpZiAoaGVhZC5maXJzdENoaWxkKSB7XG4gICAgICBoZWFkLmluc2VydEJlZm9yZShzdHlsZSwgaGVhZC5maXJzdENoaWxkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZC5hcHBlbmRDaGlsZChzdHlsZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICB9XG5cbiAgaWYgKHN0eWxlLnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZS5zdHlsZVNoZWV0LmNzc1RleHQgPSBjc3M7XG4gIH0gZWxzZSB7XG4gICAgc3R5bGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgc3R5bGVJbmplY3Q7XG4iLCJpbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVNlbGVjdCB9IGZyb20gJ2Rvd25zaGlmdCc7XG5pbXBvcnQgc3R5bGVzIGZyb20gJy4vc2VsZWN0LnNjc3MnO1xuXG5jb25zdCBTZWxlY3QgPSAoe1xuICB2YWx1ZSxcbiAgb3B0aW9ucyxcbiAgb25TbGFja1RpbWVTZWxlY3RlZCxcbiAgdmlhUG9pbnRJbmRleCxcbiAgaWQsXG4gIGxhYmVsLFxuICBpY29uLFxufSkgPT4ge1xuICBjb25zdCBsYWJlbElkID0gYCR7aWR9LWxhYmVsYDtcbiAgY29uc3Qgc2VsZWN0ZWRJdGVtID0gb3B0aW9ucy5maW5kKG9wdGlvbiA9PiBvcHRpb24udmFsdWUgPT09IHZhbHVlKTtcblxuICBjb25zdCB7XG4gICAgaXNPcGVuLFxuICAgIGdldFRvZ2dsZUJ1dHRvblByb3BzLFxuICAgIGdldE1lbnVQcm9wcyxcbiAgICBnZXRJdGVtUHJvcHMsXG4gICAgZ2V0TGFiZWxQcm9wcyxcbiAgICBoaWdobGlnaHRlZEluZGV4LFxuICB9ID0gdXNlU2VsZWN0KHtcbiAgICBzZWxlY3RlZEl0ZW0sXG4gICAgaXRlbXM6IG9wdGlvbnMsXG4gICAgbGFiZWxJZCxcbiAgICBpZCxcbiAgICBpdGVtVG9TdHJpbmc6IGl0ZW0gPT4gaXRlbS5kaXNwbGF5TmFtZSxcbiAgICBvblNlbGVjdGVkSXRlbUNoYW5nZTogKHsgc2VsZWN0ZWRJdGVtOiBuZXdJdGVtIH0pID0+IHtcbiAgICAgIG9uU2xhY2tUaW1lU2VsZWN0ZWQobmV3SXRlbS52YWx1ZSwgdmlhUG9pbnRJbmRleCk7XG4gICAgfSxcbiAgfSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydjb21ib2JveC1jb250YWluZXInXX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICAgIDxkaXYgey4uLmdldFRvZ2dsZUJ1dHRvblByb3BzKCl9PlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzWydsZWZ0LWNvbHVtbiddfT5cbiAgICAgICAgICAgIDxsYWJlbCB7Li4uZ2V0TGFiZWxQcm9wcygpfSBjbGFzc05hbWU9e3N0eWxlc1snY29tYm9ib3gtbGFiZWwnXX0+XG4gICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgIDwvbGFiZWw+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fT5cbiAgICAgICAgICAgICAgPHNwYW4+e3NlbGVjdGVkSXRlbS5kaXNwbGF5TmFtZX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAge2ljb259XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8dWxcbiAgICAgICAgICBjbGFzc05hbWU9e2N4KFtzdHlsZXMuc3VnZ2VzdGlvbnNDb250YWluZXJPcGVuLCAhaXNPcGVuICYmICdoaWRkZW4nXSl9XG4gICAgICAgICAgey4uLmdldE1lbnVQcm9wcygpfVxuICAgICAgICA+XG4gICAgICAgICAge2lzT3BlbiAmJlxuICAgICAgICAgICAgb3B0aW9ucy5tYXAoKG9wdGlvbiwgaW5kZXgpID0+IChcbiAgICAgICAgICAgICAgPGxpXG4gICAgICAgICAgICAgICAga2V5PXtvcHRpb24udmFsdWV9XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgICAgICAgICBzdHlsZXMuc3VnZ2VzdGlvbixcbiAgICAgICAgICAgICAgICAgIGluZGV4ID09PSBoaWdobGlnaHRlZEluZGV4ICYmIHN0eWxlcy5zdWdnZXN0aW9uSGlnaGxpZ2h0ZWQsXG4gICAgICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICAgICAgey4uLmdldEl0ZW1Qcm9wcyh7IGluZGV4IH0pfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPHNwYW4+e29wdGlvbi5kaXNwbGF5TmFtZX08L3NwYW4+XG4gICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICApKX1cbiAgICAgICAgPC91bD5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufTtcblxuU2VsZWN0LnByb3BUeXBlcyA9IHtcbiAgdmFsdWU6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbiAgb25TbGFja1RpbWVTZWxlY3RlZDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb3B0aW9uczogUHJvcFR5cGVzLmFycmF5T2YoXG4gICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGRpc3BsYXlOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICB2YWx1ZTogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIH0pLmlzUmVxdWlyZWQsXG4gICkuaXNSZXF1aXJlZCxcbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIGljb246IFByb3BUeXBlcy5ub2RlLmlzUmVxdWlyZWQsXG4gIHZpYVBvaW50SW5kZXg6IFByb3BUeXBlcy5udW1iZXIuaXNSZXF1aXJlZCxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdDtcbiIsImNvbnN0IHRyYW5zbGF0aW9ucyA9IHtcbiAgZGU6IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0bDvGdlIFp3aXNjaGVuemllbCBoaW56dScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU2V0emUgVW1zdGVpZ2V6ZWl0IGbDvHIgWndpc2NoZW56aWVsIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnU2NobGllw59lIFVtc3RlaWdlemVpdC1BdXN3YWhsIGbDvHIgWndpc2NoZW56aWVsIHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICfDlmZmbmUgVW1zdGVpZ2V6ZWl0LUF1c3dhaGwgZsO8ciBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdFbnRmZXJuZSBad2lzY2hlbnppZWwge3tpbmRleH19JyxcbiAgICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdUYXVzY2hlIFN0YXJ0IG1pdCBaaWVsJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnWndpc2NoZW56aWVsJyxcbiAgICAgICd2aWEtcG9pbnQtaW5kZXgnOiAnWndpc2NoZW56aWVsIHt7aW5kZXh9fScsXG4gICAgICAndmlhcG9pbnQtc2xhY2stYW1vdW50JzogJ1Vtc3RlaWdlemVpdCcsXG4gICAgfSxcbiAgfSxcbiAgZW46IHtcbiAgICB0cmFuc2xhdGlvbjoge1xuICAgICAgJ2FkZC12aWEtYnV0dG9uLWxhYmVsJzogJ0FkZCB2aWEgcG9pbnQnLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsJzpcbiAgICAgICAgJ1NldCBzdG9wIGR1cmF0aW9uIGF0IHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ0Nsb3NlIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtb3Blbic6XG4gICAgICAgICdPcGVuIHN0b3AgZHVyYXRpb24gc2VsZWN0b3IgYXQgdmlhIHBvaW50IHt7aW5kZXh9fScsXG4gICAgICAnbWludXRlLXNob3J0JzogJ21pbicsXG4gICAgICAncmVtb3ZlLXZpYS1idXR0b24tbGFiZWwnOiAnUmVtb3ZlIHZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ1JldmVyc2Ugb3JpZ2luIGFuZCBkZXN0aW5hdGlvbicsXG4gICAgICAndmlhLXBvaW50JzogJ1ZpYSBwb2ludCcsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1ZpYSBwb2ludCB7e2luZGV4fX0nLFxuICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCc6ICdTdG9wIGR1cmF0aW9uJyxcbiAgICB9LFxuICB9LFxuICBmaToge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTGlzw6TDpCB2w6RsaXBpc3RlJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdBc2V0YSB2w6RsaXBpc3RlZWxsZSB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZSc6XG4gICAgICAgICdBdmFhIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ1N1bGplIHbDpGxpcGlzdGVlbiB7e2luZGV4fX0gcHlzw6RoZHlrc2VuIGtlc3RvIHZhbGl0c2luJyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdQb2lzdGEgdsOkbGlwaXN0ZSB7e2luZGV4fX0nLFxuICAgICAgJ3N3YXAtb3JkZXItYnV0dG9uLWxhYmVsJzogJ0vDpMOkbm7DpCByZWl0aW4gc3V1bnRhIHZhc3Rha2thaXNla3NpJyxcbiAgICAgICd2aWEtcG9pbnQnOiAnVsOkbGlwaXN0ZScsXG4gICAgICAndmlhLXBvaW50LWluZGV4JzogJ1bDpGxpcGlzdGUge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnUHlzw6RoZHlrc2VuIGtlc3RvJyxcbiAgICB9LFxuICB9LFxuICBwbDoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnRG9kYWogcHVua3QgcG/Fm3JlZG5pJyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbCc6XG4gICAgICAgICdXeWJpZXJ6IGN6YXMgcG9zdG9qdSBkbGEgcHVua3R1IHt7aW5kZXh9fScsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwtY2xvc2UnOlxuICAgICAgICAnWmFta25paiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLW9wZW4nOlxuICAgICAgICAnT3R3w7NyeiB3eWJvcm5payBjemFzdSBwb3N0b2p1IHcgcHVua2NpZSB7e2luZGV4fX0nLFxuICAgICAgJ21pbnV0ZS1zaG9ydCc6ICdtaW4uJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdVc3XFhCBwdW5rdCBwb8WbcmVkbmkge3tpbmRleH19JyxcbiAgICAgICdzd2FwLW9yZGVyLWJ1dHRvbi1sYWJlbCc6ICdPZHdyw7PEhyBwb2N6xIV0ZWsgaSBjZWwnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdQdW5rdCBwb8WbcmVkbmknLFxuICAgICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdQdW5rdCBwb8WbcmVkbmkge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnQ3phcyBwb3N0b2p1JyxcbiAgICB9LFxuICB9LFxuICBzdjoge1xuICAgIHRyYW5zbGF0aW9uOiB7XG4gICAgICAnYWRkLXZpYS1idXR0b24tbGFiZWwnOiAnTMOkZ2cgdGlsbCB2aWFwdW5rdCcsXG4gICAgICAnYWRkLXZpYS1kdXJhdGlvbi1idXR0b24tbGFiZWwnOlxuICAgICAgICAnU3TDpGxsIGluIHZhcmFrdGlnaGV0IGbDtnIgdmlhcHVua3RlbiB7e2luZGV4fX0nLFxuICAgICAgJ2FkZC12aWEtZHVyYXRpb24tYnV0dG9uLWxhYmVsLWNsb3NlJzpcbiAgICAgICAgJ1N0w6RuZyB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJzpcbiAgICAgICAgJ8OWcHBuYSB2w6RsamFyZW4gZsO2ciB2YXJha3RpZ2hldCB2aWQgdmlhLXB1bmt0ZW4ge3tpbmRleH19JyxcbiAgICAgICdtaW51dGUtc2hvcnQnOiAnbWluJyxcbiAgICAgICdyZW1vdmUtdmlhLWJ1dHRvbi1sYWJlbCc6ICdUYSBib3J0IHZpYXB1bmt0IHt7aW5kZXh9fScsXG4gICAgICAnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnOiAnU3bDpG5nIHJ1dHRlbnMgcmlrdG5pbmcgdGlsbCBkZW4gbW90c2F0dGEnLFxuICAgICAgJ3ZpYS1wb2ludCc6ICdWaWEgcHVua3QnLFxuICAgICAgJ3ZpYS1wb2ludC1pbmRleCc6ICdWaWEgcHVua3Qge3tpbmRleH19JyxcbiAgICAgICd2aWFwb2ludC1zbGFjay1hbW91bnQnOiAnU3RvcHBldHMgdmFyYWt0aWdoZXQnLFxuICAgIH0sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCB0cmFuc2xhdGlvbnM7XG4iLCJpbXBvcnQgeyBjcmVhdGVJbnN0YW5jZSB9IGZyb20gJ2kxOG5leHQnO1xuaW1wb3J0IHRyYW5zbGF0aW9ucyBmcm9tICcuL3RyYW5zbGF0aW9ucyc7XG5cbmNvbnN0IGkxOG4gPSBjcmVhdGVJbnN0YW5jZSh7XG4gIGZhbGxiYWNrTG5nOiAnZmknLFxuICAvLyBkZWJ1ZzogdHJ1ZSxcbiAgcmVzb3VyY2VzOiB0cmFuc2xhdGlvbnMsXG4gIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9uJyxcbiAgcmVhY3Q6IHtcbiAgICB1c2VTdXNwZW5zZTogdHJ1ZSxcbiAgfSxcbn0pO1xuXG5pMThuLmluaXQoKTtcblxuZXhwb3J0IGRlZmF1bHQgaTE4bjtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGltcG9ydC9uby1leHRyYW5lb3VzLWRlcGVuZGVuY2llcyAqL1xuaW1wb3J0IGN4IGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBJMThuZXh0UHJvdmlkZXIsIHdpdGhUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHsgUmVhY3RTb3J0YWJsZSB9IGZyb20gJ3JlYWN0LXNvcnRhYmxlanMnO1xuaW1wb3J0IERUQXV0b1N1Z2dlc3QgZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtYXV0b3N1Z2dlc3QnO1xuaW1wb3J0IEljb24sIHtcbiAgZGVmYXVsdENvbG9ycyxcbn0gZnJvbSAnQGRpZ2l0cmFuc2l0LWNvbXBvbmVudC9kaWdpdHJhbnNpdC1jb21wb25lbnQtaWNvbic7XG5pbXBvcnQgaXNFbXB0eSBmcm9tICdsb2Rhc2gvaXNFbXB0eSc7XG5pbXBvcnQgU2VsZWN0IGZyb20gJy4vaGVscGVycy9TZWxlY3QnO1xuaW1wb3J0IGkxOG4gZnJvbSAnLi9oZWxwZXJzL2kxOG4nO1xuaW1wb3J0IHN0eWxlcyBmcm9tICcuL2hlbHBlcnMvc3R5bGVzLnNjc3MnO1xuXG5leHBvcnQgY29uc3QgZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyID0gKCkgPT4gKHt9KTtcblxuY29uc3QgaXNWaWFQb2ludEVtcHR5ID0gdmlhUG9pbnQgPT4ge1xuICBpZiAodmlhUG9pbnQgPT09IHVuZGVmaW5lZCB8fCBpc0VtcHR5KHZpYVBvaW50KSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh2aWFQb2ludCk7XG4gIHJldHVybiAoXG4gICAga2V5cy5sZW5ndGggPT09IDEgfHwgKGtleXMubGVuZ3RoID09PSAyICYmIGtleXMuaW5jbHVkZXMoJ2xvY2F0aW9uU2xhY2snKSlcbiAgKTtcbn07XG5cbmNvbnN0IEl0aW5lcmFyeVNlYXJjaENvbnRyb2wgPSAoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBlbmFibGVkLFxuICBvbkNsaWNrLFxuICBvbktleVByZXNzLFxuICB3aWRlLFxuICAuLi5yZXN0XG59KSA9PiAoXG4gIDxkaXZcbiAgICBjbGFzc05hbWU9e3N0eWxlc1snaXRpbmVyYXJ5LXNlYXJjaC1jb250cm9sJ119XG4gICAgc3R5bGU9e3sgJy0td2lkdGgnOiB3aWRlID8gJzQ3cHgnIDogJzQwcHgnIH19XG4gID5cbiAgICB7b25DbGljayAmJiBlbmFibGVkICYmIChcbiAgICAgIDxkaXZcbiAgICAgICAgey4uLnJlc3R9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBvbktleVByZXNzPXtvbktleVByZXNzfVxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgdGFiSW5kZXg9XCIwXCJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9kaXY+XG4gICAgKX1cbiAgPC9kaXY+XG4pO1xuXG5jb25zdCB1cGRhdGVWaWFQb2ludFNsYWNrID0gKFxuICBhY3RpdmVWaWFQb2ludFNsYWNrcyxcbiAgdXBkYXRlZFZpYVBvaW50SW5kZXgsXG4gIHZpYVBvaW50UmVtb3ZlZCA9IGZhbHNlLFxuKSA9PiB7XG4gIGNvbnN0IGZvdW5kQXRJbmRleCA9IGFjdGl2ZVZpYVBvaW50U2xhY2tzLmluZGV4T2YodXBkYXRlZFZpYVBvaW50SW5kZXgpO1xuICBpZiAoZm91bmRBdEluZGV4ID4gLTEpIHtcbiAgICBhY3RpdmVWaWFQb2ludFNsYWNrcy5zcGxpY2UoZm91bmRBdEluZGV4LCAxKTtcbiAgfVxuICByZXR1cm4gdmlhUG9pbnRSZW1vdmVkXG4gICAgPyBhY3RpdmVWaWFQb2ludFNsYWNrcy5tYXAodmFsdWUgPT5cbiAgICAgICAgdmFsdWUgPiB1cGRhdGVkVmlhUG9pbnRJbmRleCA/IHZhbHVlIC0gMSA6IHZhbHVlLFxuICAgICAgKVxuICAgIDogYWN0aXZlVmlhUG9pbnRTbGFja3M7XG59O1xuXG5jb25zdCBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQgPSBldmVudCA9PiB7XG4gIGNvbnN0IHNwYWNlID0gWzEzLCAnICcsICdTcGFjZWJhciddO1xuICBjb25zdCBlbnRlciA9IFszMiwgJ0VudGVyJ107XG4gIGNvbnN0IGtleSA9IChldmVudCAmJiAoZXZlbnQua2V5IHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmtleUNvZGUpKSB8fCAnJztcbiAgaWYgKCFrZXkgfHwgIXNwYWNlLmNvbmNhdChlbnRlcikuaW5jbHVkZXMoa2V5KSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbmNvbnN0IHZhbHVlID0gbG9jYXRpb24gPT5cbiAgKGxvY2F0aW9uICYmIGxvY2F0aW9uLmFkZHJlc3MpIHx8XG4gIChsb2NhdGlvbiAmJiBsb2NhdGlvbi5ncHMgJiYgbG9jYXRpb24ucmVhZHkgJiYgJ055a3lpbmVuIHNpamFpbnRpJykgfHxcbiAgJyc7XG5cbmNvbnN0IGdldExvY2F0aW9uVHlwZSA9IGxvY2F0aW9uID0+XG4gIGxvY2F0aW9uICYmIGxvY2F0aW9uLmdwcyA9PT0gdHJ1ZSA/ICdwb3NpdGlvbicgOiAnbG9jYXRpb24nO1xuXG5jb25zdCBnZXRTbGFja1RpbWVPcHRpb25zID0gdCA9PiB7XG4gIGNvbnN0IHRpbWVPcHRpb25zID0gW107XG4gIGZvciAobGV0IGkgPSAwOyBpIDw9IDk7IGkrKykge1xuICAgIGNvbnN0IHZhbHVlSW5NaW51dGVzID0gaSAqIDEwO1xuICAgIHRpbWVPcHRpb25zLnB1c2goe1xuICAgICAgZGlzcGxheU5hbWU6IGAke3ZhbHVlSW5NaW51dGVzfSAke3QoJ21pbnV0ZS1zaG9ydCcpfWAsXG4gICAgICB2YWx1ZTogdmFsdWVJbk1pbnV0ZXMgKiA2MCxcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gdGltZU9wdGlvbnM7XG59O1xuXG5JdGluZXJhcnlTZWFyY2hDb250cm9sLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZW5hYmxlZDogUHJvcFR5cGVzLmJvb2wuaXNSZXF1aXJlZCxcbiAgb25DbGljazogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgb25LZXlQcmVzczogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgd2lkZTogUHJvcFR5cGVzLmJvb2wsXG59O1xuXG5JdGluZXJhcnlTZWFyY2hDb250cm9sLmRlZmF1bHRQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHVuZGVmaW5lZCxcbiAgd2lkZTogZmFsc2UsXG59O1xuXG4vKipcbiAqIFBhbmVsIHRoYXQgcmVuZGVycyB0d28gRFRBdXRvc3VnZ2VzdCBzZWFyY2ggZmllbGRzLCBpbmNsdWRpbmcgdmlhcG9pbnQgaGFuZGxpbmdcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgc2VhcmNoQ29udGV4dCA9IHtcbiAqICAgaXNQZWxpYXNMb2NhdGlvbkF3YXJlOiBmYWxzZSAvLyB0cnVlIC8gZmFsc2UgZG9lcyBMZXQgUGVsaWFzIHN1Z2dlc3QgYmFzZWQgb24gY3VycmVudCB1c2VyIGxvY2F0aW9uXG4gKiAgIG1pbmltYWxSZWdleHA6IHVuZGVmaW5lZCAvLyB1c2VkIGZvciB0ZXN0aW5nIG1pbi4gcmVnZXhwLiBGb3IgZXhhbXBsZTogbmV3IFJlZ0V4cCgnLnsyLH0nKSxcbiAqICAgbGluZVJlZ2V4cDogdW5kZWZpbmVkIC8vICBpZGVudGlmeSBzZWFyY2hlcyBmb3Igcm91dGUgbnVtYmVycy9sYWJlbHM6IGJ1cyB8IHRyYWluIHwgbWV0cm8uIEZvciBleGFtcGxlOiBuZXcgUmVnRXhwKFxuICogICAgLy8gICAnKF5bMC05XStbYS16XT8kfF5beXVsZWFwaW5rcnRkel0kfChebVsxMl0/Yj8kKSknLFxuICogICAgLy8gICdpJyxcbiAqICAgIC8vICApLFxuICogICBVUkxfUEVMSUFTOiAnJyAvLyB1cmwgZm9yIHBlbGlhcyBzZWFyY2hlc1xuICogICBmZWVkSURzOiBbJ0hTTCcsICdIU0xMYXV0dGEnXSAvLyBGZWVkSWQncyBsaWtlICBbSFNMLCBIU0xMYXV0dGFdXG4gKiAgIGdlb2NvZGluZ1NvdXJjZXM6IFsnb2EnLCdvc20nLCdubHNmaSddICAvLyBzb3VyY2VzIGZvciBnZW9jb2RpbmdcbiAqICAgZ2VvY29kaW5nU2VhcmNoUGFyYW1zOyB7fSAgLy8gU2VhcmNocGFybWFzIGZybyBnZW9jb2RpbmdcbiAqICAgZ2V0RmF2b3VyaXRlTG9jYXRpb25zOiAoKSA9PiAoe30pLCAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIGxvY2F0aW9ucy5cbiAqICAgZ2V0RmF2b3VyaXRlU3RvcHM6ICgpID0+ICh7fSksICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgYXJyYXkgb2YgZmF2b3VyaXRlIHN0b3BzLlxuICogICBnZXRMYW5ndWFnZTogKCkgPT4gKHt9KSwgICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBjdXJyZW50IGxhbmd1YWdlLlxuICogICBnZXRGYXZvdXJpdGVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhcnJheSBvZiBmYXZvdXJpdGUgcm91dGVzLlxuICogICBnZXRQb3NpdGlvbnM6ICgpID0+ICh7fSksICAgICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyB1c2VyJ3MgZ2VvbG9jYXRpb24uXG4gKiAgIGdldFJvdXRlc1F1ZXJ5OiAoKSA9PiAoe30pLCAgICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHF1ZXJ5IGZvciBmZXRjaGluZyByb3V0ZXMuXG4gKiAgIGdldFN0b3BBbmRTdGF0aW9uc1F1ZXJ5OiAoKSA9PiAoe30pLCAgLy8gRnVuY3Rpb24gdGhhdCBmZXRjaGVzIGZhdm91cml0ZSBzdG9wcyBhbmQgc3RhdGlvbnMgZnJvbSBncmFwaHFsIEFQSS5cbiAqICAgZ2V0RmF2b3VyaXRlUm91dGVzUXVlcnk6ICgpID0+ICh7fSksICAvLyBGdW5jdGlvbiB0aGF0IHJldHVybnMgcXVlcnkgZm9yIGZldGNoaW5nIGZhdm91cml0ZSByb3V0ZXMuXG4gKiAgIGdldEZhdm91cml0ZVZlaGljbGVSZW50YWxTdGF0aW9uczogKCkgPT4gKHt9KSwgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBmYXZvdXJpdGUgYmlrZSByZW50YWwgc3RhdGlvbi5cbiAqICAgZ2V0RmF2b3VyaXRlVmVoaWNsZVJlbnRhbFN0YXRpb25zUXVlcnk6ICgpID0+ICh7fSksIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJucyBxdWVyeSBmb3IgZmV0Y2hpbmcgZmF2b3VyaXRlIGJpa2UgcmVudGFsIHN0YXRpb25zLlxuICogICBzdGFydExvY2F0aW9uV2F0Y2g6ICgpID0+ICh7fSksICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgbG9jYXRlcyB1c2VycyBnZW9sb2NhdGlvbi5cbiAqICAgc2F2ZVNlYXJjaDogKCkgPT4gKHt9KSwgICAgICAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIHNlYXJjaCB0byBvbGQgc2VhcmNoZXMgc3RvcmUuXG4gKiAgIGNsZWFyT2xkU2VhcmNoZXM6ICgpID0+ICh7fSksICAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgb2xkIHNlYXJjaGVzIHN0b3JlLlxuICogICBnZXRGdXR1cmVSb3V0ZXM6ICgpID0+ICh7fSksICAgICAgICAgIC8vIEZ1bmN0aW9uIHRoYXQgcmV0dXJuIGZ1dHVyZSByb3V0ZXNcbiAqICAgc2F2ZUZ1dHVyZVJvdXRlOiAoKSA9PiAoe30pLCAgICAgICAgICAvLyBGdW5jdGlvbiB0aGF0IHNhdmVzIGEgZnV0dXJlIHJvdXRlXG4gKiAgIGNsZWFyRnV0dXJlUm91dGVzOiAoKSA9PiAoe30pLCAgICAgICAgLy8gRnVuY3Rpb24gdGhhdCBjbGVhcnMgZnV0dXJlIHJvdXRlc1xuICogfTtcbiAqXG4gKiBjb25zdCBvcmlnaW4gPSB7XG4gKiAgbGF0OiA2MC4xNjkxOTYsXG4gKiAgbG9uOiAyNC45NTc2NzQsXG4gKiAgYWRkcmVzczogJ0FsZWtzYW50ZXJpbmthdHUsIEhlbHNpbmtpJyxcbiAqICBzZXQ6IHRydWUsXG4gKiAgcmVhZHk6IHRydWUsXG4gKiB9XG4gKlxuICogY29uc3QgZGVzdGluYXRpb24gPSB7XG4gKiAgIGxhdDogNjAuMTk5MDkzLFxuICogICBsb246IDI0Ljk0MDUzNixcbiAqICAgYWRkcmVzczogJ09wYXN0aW5zaWx0YSA2LCBIZWxzaW5raScsXG4gKiAgIHNldDogdHJ1ZSxcbiAqICAgcmVhZHk6IHRydWUsXG4gKiB9XG4gKiBvblNlbGVjdChpdGVtLCBpZCkge1xuICogIHJldHVybiBudWxsOyAgLy8gRGVmaW5lIHdoYXQgdG8gZG8gd2hlbiBhIHN1Z2dlc3Rpb24gaXMgYmVpbmcgc2VsZWN0ZWQuIE5vbmUgYnkgZGVmYXVsdC5cbiAqICB9XG4gKiBvbkNsZWFyKGlkKSB7XG4gKiAgcmV0dXJuIG51bGw7ICAvLyBEZWZpbmUgd2hhdCB0byBkbyB3aGVuIGEgc3VnZ2VzdGlvbiBpcyBiZWluZyBzZWxlY3RlZC4gTm9uZSBieSBkZWZhdWx0LlxuICogfVxuICogY29uc3QgZ2V0QXV0b1N1Z2dlc3RJY29uczoge1xuICogICAvLyBDYWxsZWQgZm9yIGV2ZXJ5IGNpdHkgYmlrZSBzdGF0aW9uIHJlbmRlcmVkIGFzIGEgc2VhcmNoIHN1Z2dlc3Rpb24uIFNob3VsZCByZXR1cm4gdGhlIGljb24gYW5kXG4gKiAgIC8vIGNvbG9yIHVzZWQgZm9yIHRoYXQgc3RhdGlvbi4gVHdvIGljb25zIGFyZSBhdmFpbGFibGUsICdjaXR5YmlrZS1zdG9wLWRpZ2l0cmFuc2l0JyBhbmRpdHliaWtlLXN0b3AtZGlnaXRyYW5zaXQtc2Vjb25kYXJ5Jy5cbiAqICAgY2l0eWJpa2VzOiBzdGF0aW9uID0+IHtcbiAqICAgICAgcmV0dXJuIFsnY2l0eWJpa2Utc3RvcC1kaWdpdHJhbnNpdCcsICcjZjJiNjJkJ107XG4gKiAgIH1cbiAqIH1cbiAqIGNvbnN0IHRhcmdldHMgPSBbJ0xvY2F0aW9ucycsICdTdG9wcycsICdSb3V0ZXMnXTsgLy8gRGVmaW5lcyB3aGF0IHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIG9wdGlvbnMgYXJlIExvY2F0aW9ucywgU3RvcHMsIFJvdXRlcywgVmVoaWNsZVJlbnRhbFN0YXRpb25zLCBGdXR1cmVSb3V0ZXMsIE1hcFBvc2l0aW9uIGFuZCBDdXJyZW50UG9zaXRpb24uIExlYXZlIGVtcHR5IHRvIHNlYXJjaCBhbGwgdGFyZ2V0cy5cbiAqIGNvbnN0IHNvdXJjZXMgPSBbJ0Zhdm91cml0ZScsICdIaXN0b3J5JywgJ0RhdGFzb3VyY2UnXSAvLyBEZWZpbmVzIHdoZXJlIHlvdSBhcmUgc2VhcmNoaW5nLiBhbGwgYXZhaWxhYmxlIGFyZTogRmF2b3VyaXRlLCBIaXN0b3J5IChwcmV2aW91c2x5IHNlYXJjaGVkIHNlYXJjaGVzKSwgYW5kIERhdGFzb3VyY2UuIExlYXZlIGVtcHR5IHRvIHVzZSBhbGwgc291cmNlcy5cbiAqIDxEVEF1dG9zdWdnZXN0UGFuZWxcbiAqICAgIGFwcEVsZW1lbnQ9e2FwcEVsZW1lbnR9IC8vIFJlcXVpcmVkLiBSb290IGVsZW1lbnQncyBpZC4gTmVlZGVkIGZvciByZWFjdC1tb2RhbCBjb21wb25lbnQuXG4gKiAgICBvcmlnaW49e29yaWdpbn0gLy8gU2VsZWN0ZWQgb3JpZ2luIHBvaW50XG4gKiAgICBkZXN0aW5hdGlvbj17ZGVzdGluYXRpb259IC8vIFNlbGVjdGVkIGRlc3RpbmF0aW9uIHBvaW50XG4gKiAgICBvcmlnaW5QbGFjZUhvbGRlcj17J0dpdmUgb3JpZ2luJ30gLy8gT3B0aW9uYWwgR2l2ZSBzdHJpbmcgc2hvd24gaW5pdGlhbGx5IGluc2lkZSBvcmlnaW4gc2VhcmNoIGZpZWxkXG4gKiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyPXsnR2l2ZSBkZXN0aW5hdGlvbid9IC8vIE9wdGlvbmFsIEdpdmUgc3RyaW5nIHNob3duIGluaXRhbGx5IGluc2lkZSBkZXN0aW5hdGlvbiBzZWFyY2ggZmllbGRcbiAqICAgIGluaXRpYWxWaWFQb2ludHM9e1tdfSAvLyBPcHRpb25hbC4gIElmIHNob3dWaWFwb2ludENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIHBhc3MgaW5pdGlhbCB2aWEgcG9pbnRzIHRvIHRoZSBwYW5lbC4gQ3VycmVudGx5IG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICB1cGRhdGVWaWFQb2ludHM9eygpID0+IHJldHVybiBbXX0gLy8gT3B0aW9uYWwuIElmIHNob3dWaWFwb2ludENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIGRlZmluZSBob3cgdG8gdXBkYXRlIHlvdXIgdmlhIHBvaW50IGxpc3Qgd2l0aCB0aGlzIGZ1bmN0aW9uLiBDdXJyZW5sdHkgbm8gZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBpcyBnaXZlbi5cbiAqICAgIHN3YXBPcmRlcj17KCkgPT4gcmV0dXJuIG51bGx9IC8vIE9wdGlvbmFsLiBJZiBzaG93U3dhcENvbnRyb2wgaXMgc2V0IHRvIHRydWUsIGRlZmluZSBob3cgdG8gc3dhcCBvcmRlciBvZiB5b3VyIHBvaW50cyAob3JpZ2luLCBkZXN0aW5hdGlvbiwgdmlhcG9pbnRzKS4gQ3VycmVudGx5IG5vIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gaXMgZ2l2ZW4uXG4gKiAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICogICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17Z2V0QXV0b1N1Z2dlc3RJY29uc31cbiAqICAgIG9uU2VsZWN0PXt0aGlzLm9uU2VsZWN0fVxuICogICAgb25DbGVhcj17dGhpcy5vbkNsZWFyfVxuICogICAgbGFuZz1cImZpXCIgLy8gRGVmaW5lIGxhbmd1YWdlIGZpIHN2IG9yIGVuLlxuICogICAgYWRkQW5hbHl0aWNzRXZlbnQ9e251bGx9IC8vIE9wdGlvbmFsLiB5b3UgY2FuIHJlY29yZCBhbiBhbmFseXRpY3MgZXZlbnQgaWYgeW91IHdpc2guIGlmIHBhc3NlZCwgY29tcG9uZW50IHdpbGwgcGFzcyBhbiBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lIHBhcmFtZXRlcnMgdG8gYWRkQW5hbHl0aWNzRXZlbnRcbiAqICAgIGRpc2FibGVBdXRvRm9jdXM9e2ZhbHNlfSAvLyBPcHRpb25hbC4gdXNlIHRoaXMgdG8gZGlzYWJsZSBhdXRvZm9jdXMgY29tcGxldGVseSBmcm9tIERUQXV0b3N1Z2dlc3RQYW5lbFxuICogICAgc291cmNlcz17c291cmNlc31cbiAqICAgIHRhcmdldHM9e3RhcmdldHN9XG4gKiAgICBpc01vYmlsZSAgLy8gT3B0aW9uYWwuIERlZmF1bHRzIHRvIGZhbHNlLiBXaGV0aGVyIHRvIHVzZSBtb2JpbGUgc2VhcmNoLlxuICogICAgb3JpZ2luTW9iaWxlTGFiZWw9XCJPcmlnaW4gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIG9yaWdpbiBmaWVsZCBvbiBtb2JpbGUuXG4gKiAgICBkZXN0aW5hdGlvbk1vYmlsZUxhYmVsPVwiRGVzdGluYXRpb24gbGFiZWxcIiAvLyBPcHRpb25hbC4gQ3VzdG9tIGxhYmVsIHRleHQgZm9yIGRlc3RpbmF0aW9uIGZpZWxkIG9uIG1vYmlsZS5cbiAqICAgIGhhbmRsZUZvY3VzQ2hhbmdlPXsoKSA9PiB7fX0gLy8gT3B0aW9uYWwuIElmIGRlZmluZWQgb3ZlcnJpZGVzIGRlZmF1bHQgb25Gb2N1c0NoYW5nZSBiZWhhdmlvdXJcbiAqICAgIHNob3dTd2FwQ29udHJvbD17ZmFsc2V9IC8vIE9wdGlvbmFsLlxuICogICAgc2hvd1ZpYXBvaW50Q29udHJvbD17ZmFsc2V9IC8vIE9wdGlvbmFsLlxuICovXG5cbmNvbnN0IGxvY2F0aW9uU2hhcGUgPSBQcm9wVHlwZXMuc2hhcGUoe1xuICBhZGRyZXNzOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBsYXQ6IFByb3BUeXBlcy5udW1iZXIsXG4gIGxvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgbG9jYXRpb25TbGFjazogUHJvcFR5cGVzLm51bWJlcixcbn0pO1xuXG5jbGFzcyBEVEF1dG9zdWdnZXN0UGFuZWwgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0aWMgcHJvcFR5cGVzID0ge1xuICAgIGFwcEVsZW1lbnQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICBvcmlnaW46IGxvY2F0aW9uU2hhcGUsXG4gICAgZGVzdGluYXRpb246IGxvY2F0aW9uU2hhcGUsXG4gICAgb3JpZ2luUGxhY2VIb2xkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgZGVzdGluYXRpb25QbGFjZUhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB2aWFQb2ludHM6IFByb3BUeXBlcy5hcnJheU9mKGxvY2F0aW9uU2hhcGUpLFxuICAgIHVwZGF0ZVZpYVBvaW50czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaGFuZGxlVmlhUG9pbnRMb2NhdGlvblNlbGVjdGVkOiBQcm9wVHlwZXMuZnVuYyxcbiAgICBzd2FwT3JkZXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIHNlYXJjaFBhbmVsVGV4dDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBzZWFyY2hDb250ZXh0OiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgVVJMX1BFTElBUzogUHJvcFR5cGVzLnN0cmluZyxcbiAgICB9KS5pc1JlcXVpcmVkLFxuICAgIG9uU2VsZWN0OiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgIG9uQ2xlYXI6IFByb3BUeXBlcy5mdW5jLFxuICAgIGFkZEFuYWx5dGljc0V2ZW50OiBQcm9wVHlwZXMuZnVuYyxcbiAgICBsYW5nOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgZGlzYWJsZUF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gICAgc291cmNlczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgdGFyZ2V0czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLnN0cmluZyksXG4gICAgZmlsdGVyUmVzdWx0czogUHJvcFR5cGVzLmZ1bmMsXG4gICAgaXNNb2JpbGU6IFByb3BUeXBlcy5ib29sLFxuICAgIG9yaWdpbk1vYmlsZUxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWw6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgcmVmUG9pbnQ6IGxvY2F0aW9uU2hhcGUsXG4gICAgbW9kZVNldDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICBjb2xvcnM6IFByb3BUeXBlcy5vYmplY3RPZihQcm9wVHlwZXMuc3RyaW5nKSxcbiAgICBnZXRBdXRvU3VnZ2VzdEljb25zOiBQcm9wVHlwZXMub2JqZWN0T2YoUHJvcFR5cGVzLmZ1bmMpLFxuICAgIGZvbnRXZWlnaHRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgbWVkaXVtOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIH0pLFxuICAgIHNob3dTY3JvbGw6IFByb3BUeXBlcy5ib29sLFxuICAgIG9uRm9jdXNDaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAgIGlzRW1iZWRkZWQ6IFByb3BUeXBlcy5ib29sLFxuICAgIHNob3dTd2FwQ29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvd1ZpYXBvaW50Q29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgc2hvd1NsYWNrQ29udHJvbDogUHJvcFR5cGVzLmJvb2wsXG4gICAgdDogUHJvcFR5cGVzLmZ1bmMuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBzdGF0aWMgZGVmYXVsdFByb3BzID0ge1xuICAgIG9yaWdpbjogdW5kZWZpbmVkLFxuICAgIGRlc3RpbmF0aW9uOiB1bmRlZmluZWQsXG4gICAgdmlhUG9pbnRzOiBbXSxcbiAgICBvcmlnaW5QbGFjZUhvbGRlcjogJ2dpdmUtb3JpZ2luJyxcbiAgICBkZXN0aW5hdGlvblBsYWNlSG9sZGVyOiAnZ2l2ZS1kZXN0aW5hdGlvbicsXG4gICAgc3dhcE9yZGVyOiB1bmRlZmluZWQsXG4gICAgdXBkYXRlVmlhUG9pbnRzOiAoKSA9PiB7fSxcbiAgICBzZWFyY2hQYW5lbFRleHQ6IHVuZGVmaW5lZCxcbiAgICBzb3VyY2VzOiBbXSxcbiAgICB0YXJnZXRzOiBbXSxcbiAgICBmaWx0ZXJSZXN1bHRzOiB1bmRlZmluZWQsXG4gICAgb25DbGVhcjogdW5kZWZpbmVkLFxuICAgIGdldEF1dG9TdWdnZXN0SWNvbnM6IHVuZGVmaW5lZCxcbiAgICByZWZQb2ludDogdW5kZWZpbmVkLFxuICAgIGFkZEFuYWx5dGljc0V2ZW50OiB1bmRlZmluZWQsXG4gICAgZGlzYWJsZUF1dG9Gb2N1czogZmFsc2UsXG4gICAgaXNNb2JpbGU6IGZhbHNlLFxuICAgIGhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZDogdW5kZWZpbmVkLFxuICAgIG9yaWdpbk1vYmlsZUxhYmVsOiBudWxsLFxuICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWw6IG51bGwsXG4gICAgbW9kZVNldDogdW5kZWZpbmVkLFxuICAgIGNvbG9yczogZGVmYXVsdENvbG9ycyxcbiAgICBmb250V2VpZ2h0czoge1xuICAgICAgbWVkaXVtOiA1MDAsXG4gICAgfSxcbiAgICBzaG93U2Nyb2xsOiBmYWxzZSxcbiAgICBvbkZvY3VzQ2hhbmdlOiB1bmRlZmluZWQsXG4gICAgaXNFbWJlZGRlZDogZmFsc2UsXG4gICAgc2hvd1N3YXBDb250cm9sOiBmYWxzZSxcbiAgICBzaG93VmlhcG9pbnRDb250cm9sOiBmYWxzZSxcbiAgICBzaG93U2xhY2tDb250cm9sOiBmYWxzZSxcbiAgfTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0ge1xuICAgICAgYWN0aXZlU2xhY2tJbnB1dHM6IFtdLFxuICAgICAgcmVmczogW10sXG4gICAgfTtcbiAgfVxuXG4gIHN0b3JlUmVmZXJlbmNlID0gcmVmID0+IHtcbiAgICB0aGlzLnNldFN0YXRlKHByZXZTdGF0ZSA9PiAoeyByZWZzOiBbLi4ucHJldlN0YXRlLnJlZnMsIHJlZl0gfSkpO1xuICB9O1xuXG4gIGhhbmRsZUZvY3VzQ2hhbmdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHsgZGVzdGluYXRpb24gfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKCFkZXN0aW5hdGlvbiB8fCAhZGVzdGluYXRpb24ubGF0KSB7XG4gICAgICB0aGlzLnN0YXRlLnJlZnNbMV0uZm9jdXMoKTtcbiAgICB9XG4gIH07XG5cbiAgdXBkYXRlVmlhUG9pbnRzID0gdmlhUG9pbnRzID0+IHtcbiAgICBpZiAodmlhUG9pbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5wcm9wcy51cGRhdGVWaWFQb2ludHMoW10pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLnByb3BzLnVwZGF0ZVZpYVBvaW50cyh2aWFQb2ludHMuZmlsdGVyKHZwID0+ICFpc1ZpYVBvaW50RW1wdHkodnApKSk7XG4gIH07XG5cbiAgaGFuZGxlVG9nZ2xlVmlhUG9pbnRTbGFja0NsaWNrID0gdmlhUG9pbnRJbmRleCA9PiB7XG4gICAgY29uc3QgeyBhY3RpdmVTbGFja0lucHV0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICB0aGlzLnNldFN0YXRlKHtcbiAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzOiBhY3RpdmVTbGFja0lucHV0cy5pbmNsdWRlcyh2aWFQb2ludEluZGV4KVxuICAgICAgICA/IHVwZGF0ZVZpYVBvaW50U2xhY2soYWN0aXZlU2xhY2tJbnB1dHMsIHZpYVBvaW50SW5kZXgpXG4gICAgICAgIDogYWN0aXZlU2xhY2tJbnB1dHMuY29uY2F0KFt2aWFQb2ludEluZGV4XSksXG4gICAgfSk7XG4gIH07XG5cbiAgaGFuZGxlVmlhUG9pbnRTbGFja1RpbWVTZWxlY3RlZCA9IChzbGFja1RpbWVJblNlY29uZHMsIGkpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ0VkaXRWaWFQb2ludFN0b3BEdXJhdGlvbicsXG4gICAgICAgIGNhdGVnb3J5OiAnSXRpbmVyYXJ5U2V0dGluZ3MnLFxuICAgICAgICBuYW1lOiBzbGFja1RpbWVJblNlY29uZHMgLyA2MCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHNbaV0ubG9jYXRpb25TbGFjayA9IE51bWJlci5wYXJzZUludChzbGFja1RpbWVJblNlY29uZHMsIDEwKTtcbiAgICB0aGlzLnVwZGF0ZVZpYVBvaW50cyh2aWFQb2ludHMpO1xuICB9O1xuXG4gIGhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZCA9ICh2aWFQb2ludExvY2F0aW9uLCBpKSA9PiB7XG4gICAgdGhpcy5wcm9wcy5oYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQodmlhUG9pbnRMb2NhdGlvbiwgaSk7XG4gIH07XG5cbiAgaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayA9IHZpYVBvaW50SW5kZXggPT4ge1xuICAgIGlmICh0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmFkZEFuYWx5dGljc0V2ZW50KHtcbiAgICAgICAgYWN0aW9uOiAnUmVtb3ZlSm91cm5leVZpYVBvaW50JyxcbiAgICAgICAgY2F0ZWdvcnk6ICdJdGluZXJhcnlTZXR0aW5ncycsXG4gICAgICAgIG5hbWU6IG51bGwsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyBhY3RpdmVTbGFja0lucHV0cyB9ID0gdGhpcy5zdGF0ZTtcbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHMuc3BsaWNlKHZpYVBvaW50SW5kZXgsIDEpO1xuICAgIHRoaXMuc2V0U3RhdGUoXG4gICAgICB7XG4gICAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzOiB1cGRhdGVWaWFQb2ludFNsYWNrKFxuICAgICAgICAgIGFjdGl2ZVNsYWNrSW5wdXRzLFxuICAgICAgICAgIHZpYVBvaW50SW5kZXgsXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKSxcbiAgICAgIH0sXG4gICAgICAoKSA9PiB0aGlzLnVwZGF0ZVZpYVBvaW50cyh2aWFQb2ludHMpLFxuICAgICk7XG4gIH07XG5cbiAgaGFuZGxlQWRkVmlhUG9pbnRDbGljayA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ0FkZEpvdXJuZXlWaWFQb2ludCcsXG4gICAgICAgIGNhdGVnb3J5OiAnSXRpbmVyYXJ5U2V0dGluZ3MnLFxuICAgICAgICBuYW1lOiAnUXVpY2tTZXR0aW5nc0J1dHRvbicsXG4gICAgICB9KTtcbiAgICB9XG4gICAgY29uc3QgeyB2aWFQb2ludHMgfSA9IHRoaXMucHJvcHM7XG4gICAgdmlhUG9pbnRzLnB1c2goZ2V0RW1wdHlWaWFQb2ludFBsYWNlSG9sZGVyKCkpO1xuICAgIC8vIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBzbyB0aGF0IHBsYWNlSG9sZGVyIHdpbGwgc2hvdyB1cCBpbiBwYW5lbC5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3Qvbm8tYWNjZXNzLXN0YXRlLWluLXNldHN0YXRlXG4gICAgdGhpcy5zZXRTdGF0ZSh0aGlzLnN0YXRlKTtcbiAgfTtcblxuICBoYW5kbGVTd2FwT3JkZXJDbGljayA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCkge1xuICAgICAgdGhpcy5wcm9wcy5hZGRBbmFseXRpY3NFdmVudCh7XG4gICAgICAgIGFjdGlvbjogJ1N3aXRjaEpvdXJuZXlTdGFydEFuZEVuZFBvaW50T3JkZXInLFxuICAgICAgICBjYXRlZ29yeTogJ0l0aW5lcmFyeVNldHRpbmdzJyxcbiAgICAgICAgbmFtZTogbnVsbCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IHZpYVBvaW50cyB9ID0gdGhpcy5wcm9wcztcbiAgICB2aWFQb2ludHMucmV2ZXJzZSgpO1xuICAgIHRoaXMucHJvcHMuc3dhcE9yZGVyKCk7XG4gIH07XG5cbiAgZ2V0U2xhY2tEaXNwbGF5ID0gc2xhY2tJblNlY29uZHMgPT5cbiAgICBgJHtzbGFja0luU2Vjb25kcyAvIDYwfSAke3RoaXMucHJvcHMudCgnbWludXRlLXNob3J0Jywge1xuICAgICAgbG5nOiB0aGlzLnByb3BzLmxhbmcsXG4gICAgfSl9YDtcblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgb3JpZ2luLFxuICAgICAgc2VhcmNoUGFuZWxUZXh0LFxuICAgICAgc2VhcmNoQ29udGV4dCxcbiAgICAgIGRpc2FibGVBdXRvRm9jdXMsXG4gICAgICB2aWFQb2ludHMsXG4gICAgICBvcmlnaW5Nb2JpbGVMYWJlbCxcbiAgICAgIGRlc3RpbmF0aW9uTW9iaWxlTGFiZWwsXG4gICAgICBmb250V2VpZ2h0cyxcbiAgICAgIG9uRm9jdXNDaGFuZ2UsXG4gICAgICBzaG93U3dhcENvbnRyb2wsXG4gICAgICBzaG93VmlhcG9pbnRDb250cm9sLFxuICAgICAgdCxcbiAgICAgIGxhbmc6IGxuZyxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHByaW1hcnkgfSA9IHRoaXMucHJvcHMuY29sb3JzO1xuICAgIGNvbnN0IHsgYWN0aXZlU2xhY2tJbnB1dHMgfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qgc2xhY2tUaW1lID0gZ2V0U2xhY2tUaW1lT3B0aW9ucyh0KTtcbiAgICBjb25zdCBkZWZhdWx0U2xhY2tUaW1lVmFsdWUgPSAwO1xuICAgIGNvbnN0IGdldFZpYVBvaW50U2xhY2tUaW1lT3JEZWZhdWx0ID0gKFxuICAgICAgdmlhUG9pbnQsXG4gICAgICBkZWZhdWx0VmFsdWUgPSBkZWZhdWx0U2xhY2tUaW1lVmFsdWUsXG4gICAgKSA9PiAodmlhUG9pbnQgJiYgdmlhUG9pbnQubG9jYXRpb25TbGFjaykgfHwgZGVmYXVsdFZhbHVlO1xuICAgIGNvbnN0IGlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZSA9IGluZGV4ID0+XG4gICAgICBhY3RpdmVTbGFja0lucHV0cy5pbmNsdWRlcyhpbmRleCk7XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjeChbXG4gICAgICAgICAgc3R5bGVzWydhdXRvc3VnZ2VzdC1wYW5lbCddLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHNtYWxsOiB0aGlzLnByb3BzLmlzTW9iaWxlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0pfVxuICAgICAgICBzdHlsZT17e1xuICAgICAgICAgICctLWNvbG9yJzogcHJpbWFyeSxcbiAgICAgICAgICAnLS1mb250LXdlaWdodC1tZWRpdW0nOiBmb250V2VpZ2h0cy5tZWRpdW0sXG4gICAgICAgIH19XG4gICAgICA+XG4gICAgICAgIHsnICd9XG4gICAgICAgIHtzZWFyY2hQYW5lbFRleHQgPyAoXG4gICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxoMSBjbGFzc05hbWU9e3N0eWxlc1snYXV0b3N1Z2dlc3Qtc2VhcmNocGFuZWwtdGV4dCddfT5cbiAgICAgICAgICAgICAgeycgJ31cbiAgICAgICAgICAgICAge3NlYXJjaFBhbmVsVGV4dH1cbiAgICAgICAgICAgIDwvaDE+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICkgOiBudWxsfVxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydvcmlnaW4taW5wdXQtY29udGFpbmVyJ119PlxuICAgICAgICAgIDxEVEF1dG9TdWdnZXN0XG4gICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICBpY29uPVwib3JpZ2luRWxsaXBzZVwiXG4gICAgICAgICAgICBpZD1cIm9yaWdpblwiXG4gICAgICAgICAgICBhdXRvRm9jdXM9e1xuICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogIXRoaXMucHJvcHMuaXNNb2JpbGUgJiYgIW9yaWdpbj8ubGF0XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzdG9yZVJlZj17dGhpcy5zdG9yZVJlZmVyZW5jZX1cbiAgICAgICAgICAgIHJlZlBvaW50PXt0aGlzLnByb3BzLnJlZlBvaW50fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtnZXRMb2NhdGlvblR5cGUob3JpZ2luKX1cbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXt0aGlzLnByb3BzLm9yaWdpblBsYWNlSG9sZGVyfVxuICAgICAgICAgICAgdmFsdWU9e3ZhbHVlKG9yaWdpbil9XG4gICAgICAgICAgICBzZWFyY2hDb250ZXh0PXtzZWFyY2hDb250ZXh0fVxuICAgICAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMucHJvcHMub25TZWxlY3R9XG4gICAgICAgICAgICBvbkNsZWFyPXt0aGlzLnByb3BzLm9uQ2xlYXJ9XG4gICAgICAgICAgICBmb2N1c0NoYW5nZT17b25Gb2N1c0NoYW5nZSB8fCB0aGlzLmhhbmRsZUZvY3VzQ2hhbmdlfVxuICAgICAgICAgICAgbGFuZz17dGhpcy5wcm9wcy5sYW5nfVxuICAgICAgICAgICAgc291cmNlcz17dGhpcy5wcm9wcy5zb3VyY2VzfVxuICAgICAgICAgICAgdGFyZ2V0cz17dGhpcy5wcm9wcy50YXJnZXRzfVxuICAgICAgICAgICAgZmlsdGVyUmVzdWx0cz17dGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzfVxuICAgICAgICAgICAgaXNNb2JpbGU9e3RoaXMucHJvcHMuaXNNb2JpbGV9XG4gICAgICAgICAgICBjb2xvcnM9e3RoaXMucHJvcHMuY29sb3JzfVxuICAgICAgICAgICAgbW9iaWxlTGFiZWw9e29yaWdpbk1vYmlsZUxhYmVsfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgICBpc0VtYmVkZGVkPXt0aGlzLnByb3BzLmlzRW1iZWRkZWR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7KHNob3dTd2FwQ29udHJvbCB8fCBzaG93VmlhcG9pbnRDb250cm9sKSAmJiAoXG4gICAgICAgICAgICA8SXRpbmVyYXJ5U2VhcmNoQ29udHJvbFxuICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5vcHBvc2l0ZX1cbiAgICAgICAgICAgICAgZW5hYmxlZD17c2hvd1N3YXBDb250cm9sfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZVN3YXBPcmRlckNsaWNrKCl9XG4gICAgICAgICAgICAgIG9uS2V5UHJlc3M9e2UgPT5cbiAgICAgICAgICAgICAgICBpc0tleWJvYXJkU2VsZWN0aW9uRXZlbnQoZSkgJiYgdGhpcy5oYW5kbGVTd2FwT3JkZXJDbGljaygpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnc3dhcC1vcmRlci1idXR0b24tbGFiZWwnLCB7IGxuZyB9KX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgPEljb24gaW1nPVwib3Bwb3NpdGVcIiBjb2xvcj17cHJpbWFyeX0gLz5cbiAgICAgICAgICAgIDwvSXRpbmVyYXJ5U2VhcmNoQ29udHJvbD5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge3ZpYVBvaW50cy5sZW5ndGggPT09IDAgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ3JlY3RhbmdsZS1jb250YWluZXInXX0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJlY3RhbmdsZX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgICAgPFJlYWN0U29ydGFibGVcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1sndmlhcG9pbnRzLWNvbnRhaW5lciddfVxuICAgICAgICAgIGxpc3Q9e3ZpYVBvaW50c31cbiAgICAgICAgICBoYW5kbGU9e2AuJHtzdHlsZXNbJ3ZpYXBvaW50LWJlZm9yZSddfWB9XG4gICAgICAgICAgYW5pbWF0aW9uPXsyMDB9XG4gICAgICAgICAgZGlzYWJsZWQ9e3ZpYVBvaW50cy5sZW5ndGggPD0gMX1cbiAgICAgICAgICBzZXRMaXN0PXtpdGVtcyA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdWaWFQb2ludHMgPSBpdGVtcy5maWx0ZXIodnAgPT4gIWlzVmlhUG9pbnRFbXB0eSh2cCkpO1xuICAgICAgICAgICAgaWYgKG5ld1ZpYVBvaW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvcHMudXBkYXRlVmlhUG9pbnRzKG5ld1ZpYVBvaW50cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfX1cbiAgICAgICAgPlxuICAgICAgICAgIHt2aWFQb2ludHMubWFwKChvLCBpKSA9PiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y3goc3R5bGVzWyd2aWFwb2ludC1jb250YWluZXInXSl9XG4gICAgICAgICAgICAgIGtleT17YHZpYXBvaW50LSR7aX1gfSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXNbJ2xpZ2h0LWdyYXktYmFja2dyb3VuZCddfT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnJvd30+XG4gICAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWyd2aWFwb2ludC1iZWZvcmUnXX1cbiAgICAgICAgICAgICAgICAgICAgc3R5bGU9e3ZpYVBvaW50cy5sZW5ndGggPiAxID8geyBjdXJzb3I6ICdtb3ZlJyB9IDoge319XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHt2aWFQb2ludHMubGVuZ3RoID4gMSAmJiAoXG4gICAgICAgICAgICAgICAgICAgICAgPEljb24gaW1nPVwiZWxsaXBzaXNcIiByb3RhdGU9ezkwfSBjb2xvcj17cHJpbWFyeX0gLz5cbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KFxuICAgICAgICAgICAgICAgICAgICAgIGAke3N0eWxlc1sndmlhcG9pbnQtaW5wdXQtY29udGFpbmVyJ119ICR7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXNbYHZpYXBvaW50LSR7aSArIDF9YF1cbiAgICAgICAgICAgICAgICAgICAgICB9YCxcbiAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgPERUQXV0b1N1Z2dlc3RcbiAgICAgICAgICAgICAgICAgICAgICBhcHBFbGVtZW50PXt0aGlzLnByb3BzLmFwcEVsZW1lbnR9XG4gICAgICAgICAgICAgICAgICAgICAgaWNvbj1cIm1hcE1hcmtlclwiXG4gICAgICAgICAgICAgICAgICAgICAgaWQ9XCJ2aWEtcG9pbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIGFyaWFMYWJlbD17dCgndmlhLXBvaW50LWluZGV4Jywge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG5nLFxuICAgICAgICAgICAgICAgICAgICAgIH0pfVxuICAgICAgICAgICAgICAgICAgICAgIGF1dG9Gb2N1cz17XG4gICAgICAgICAgICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzID09PSB0cnVlID8gZmFsc2UgOiAhdGhpcy5wcm9wcy5pc01vYmlsZVxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInZpYS1wb2ludFwiXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidmlhcG9pbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaENvbnRleHQ9e3NlYXJjaENvbnRleHR9XG4gICAgICAgICAgICAgICAgICAgICAgcmVmUG9pbnQ9e3RoaXMucHJvcHMucmVmUG9pbnR9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9eyhvICYmIG8uYWRkcmVzcykgfHwgJyd9XG4gICAgICAgICAgICAgICAgICAgICAgb25TZWxlY3Q9e3RoaXMucHJvcHMub25TZWxlY3R9XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGVhcj17dGhpcy5wcm9wcy5vbkNsZWFyfVxuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVZpYVBvaW50cz17aXRlbSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVWaWFQb2ludExvY2F0aW9uU2VsZWN0ZWQoaXRlbSwgaSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgbGFuZz17dGhpcy5wcm9wcy5sYW5nfVxuICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZXM9e3RoaXMucHJvcHMuc291cmNlc31cbiAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRzPXt0aGlzLnByb3BzLnRhcmdldHN9XG4gICAgICAgICAgICAgICAgICAgICAgZmlsdGVyUmVzdWx0cz17dGhpcy5wcm9wcy5maWx0ZXJSZXN1bHRzfVxuICAgICAgICAgICAgICAgICAgICAgIGdldEF1dG9TdWdnZXN0SWNvbnM9e3RoaXMucHJvcHMuZ2V0QXV0b1N1Z2dlc3RJY29uc31cbiAgICAgICAgICAgICAgICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgICAgICAgICAgICAgICBmb250V2VpZ2h0cz17dGhpcy5wcm9wcy5mb250V2VpZ2h0c31cbiAgICAgICAgICAgICAgICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAgICAgICAgICAgICAgICAgY29sb3JzPXt0aGlzLnByb3BzLmNvbG9yc31cbiAgICAgICAgICAgICAgICAgICAgICBzaG93U2Nyb2xsPXt0aGlzLnByb3BzLnNob3dTY3JvbGx9XG4gICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIHt0aGlzLnByb3BzLnNob3dTbGFja0NvbnRyb2wgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8SXRpbmVyYXJ5U2VhcmNoQ29udHJvbFxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzWydhZGQtdmlhLXBvaW50LXNsYWNrJ119XG4gICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZD17dGhpcy5wcm9wcy5zaG93VmlhcG9pbnRDb250cm9sfVxuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9eygpID0+IHRoaXMuaGFuZGxlVG9nZ2xlVmlhUG9pbnRTbGFja0NsaWNrKGkpfVxuICAgICAgICAgICAgICAgICAgICAgIG9uS2V5UHJlc3M9e2UgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVUb2dnbGVWaWFQb2ludFNsYWNrQ2xpY2soaSlcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dChcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzVmlhUG9pbnRTbGFja1RpbWVJbnB1dEFjdGl2ZShpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICA/ICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1vcGVuJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICA6ICdhZGQtdmlhLWR1cmF0aW9uLWJ1dHRvbi1sYWJlbC1jbG9zZScsXG4gICAgICAgICAgICAgICAgICAgICAgICB7IGluZGV4OiBpICsgMSwgbG5nIH0sXG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICB3aWRlXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJ0aW1lXCIgY29sb3I9e3ByaW1hcnl9IC8+XG4gICAgICAgICAgICAgICAgICAgIDwvSXRpbmVyYXJ5U2VhcmNoQ29udHJvbD5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgeyFpc1ZpYVBvaW50U2xhY2tUaW1lSW5wdXRBY3RpdmUoaSkgJiZcbiAgICAgICAgICAgICAgICAgIHZpYVBvaW50c1tpXSAmJlxuICAgICAgICAgICAgICAgICAgdmlhUG9pbnRzW2ldLmxvY2F0aW9uU2xhY2sgPiAwICYmIChcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXNbJ3ZpYXBvaW50LXNsYWNrLXRpbWUnXX0+e2Ake3QoXG4gICAgICAgICAgICAgICAgICAgICAgJ3ZpYXBvaW50LXNsYWNrLWFtb3VudCcsXG4gICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgbG5nLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICl9OiAke3RoaXMuZ2V0U2xhY2tEaXNwbGF5KFxuICAgICAgICAgICAgICAgICAgICAgIHZpYVBvaW50c1tpXS5sb2NhdGlvblNsYWNrLFxuICAgICAgICAgICAgICAgICAgICApfWB9PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e2N4KHN0eWxlc1snaW5wdXQtdmlhcG9pbnQtc2xhY2stY29udGFpbmVyJ10sIHtcbiAgICAgICAgICAgICAgICAgICAgY29sbGFwc2VkOiAhaXNWaWFQb2ludFNsYWNrVGltZUlucHV0QWN0aXZlKGkpLFxuICAgICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlc1snc2VsZWN0LXdyYXBwZXInXX0+XG4gICAgICAgICAgICAgICAgICAgIDxTZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICBpZD17YHZpYXBvaW50LXNsYWNrLSR7aX1gfVxuICAgICAgICAgICAgICAgICAgICAgIGxhYmVsPXt0KCd2aWFwb2ludC1zbGFjay1hbW91bnQnLCB7IGxuZyB9KX1cbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtzbGFja1RpbWV9XG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU9e2dldFZpYVBvaW50U2xhY2tUaW1lT3JEZWZhdWx0KHZpYVBvaW50c1tpXSl9XG4gICAgICAgICAgICAgICAgICAgICAgdmlhUG9pbnRJbmRleD17aX1cbiAgICAgICAgICAgICAgICAgICAgICBpY29uPXtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17YCR7c3R5bGVzWydjb21ib2JveC1pY29uJ119ICR7c3R5bGVzWyd0aW1lLWlucHV0LWljb24nXX1gfVxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJ0aW1lXCIgY29sb3I9e3ByaW1hcnl9IC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIG9uU2xhY2tUaW1lU2VsZWN0ZWQ9e3RoaXMuaGFuZGxlVmlhUG9pbnRTbGFja1RpbWVTZWxlY3RlZH1cbiAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPEl0aW5lcmFyeVNlYXJjaENvbnRyb2xcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlc1sncmVtb3ZlLXZpYS1wb2ludCddfVxuICAgICAgICAgICAgICAgIGVuYWJsZWQ9e3RoaXMucHJvcHMuc2hvd1ZpYXBvaW50Q29udHJvbH1cbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZVJlbW92ZVZpYVBvaW50Q2xpY2soaSl9XG4gICAgICAgICAgICAgICAgb25LZXlQcmVzcz17ZSA9PlxuICAgICAgICAgICAgICAgICAgaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50KGUpICYmXG4gICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVJlbW92ZVZpYVBvaW50Q2xpY2soaSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgncmVtb3ZlLXZpYS1idXR0b24tbGFiZWwnLCB7XG4gICAgICAgICAgICAgICAgICBpbmRleDogaSArIDEsXG4gICAgICAgICAgICAgICAgICBsbmcsXG4gICAgICAgICAgICAgICAgfSl9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8SWNvbiBpbWc9XCJ0cmFzaFwiIGNvbG9yPXtwcmltYXJ5fSAvPlxuICAgICAgICAgICAgICA8L0l0aW5lcmFyeVNlYXJjaENvbnRyb2w+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9SZWFjdFNvcnRhYmxlPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzWydkZXN0aW5hdGlvbi1pbnB1dC1jb250YWluZXInXX0+XG4gICAgICAgICAgPERUQXV0b1N1Z2dlc3RcbiAgICAgICAgICAgIGFwcEVsZW1lbnQ9e3RoaXMucHJvcHMuYXBwRWxlbWVudH1cbiAgICAgICAgICAgIGljb249XCJtYXBNYXJrZXJcIlxuICAgICAgICAgICAgaWQ9XCJkZXN0aW5hdGlvblwiXG4gICAgICAgICAgICBhdXRvRm9jdXM9e1xuICAgICAgICAgICAgICBkaXNhYmxlQXV0b0ZvY3VzID09PSB0cnVlXG4gICAgICAgICAgICAgICAgPyBmYWxzZVxuICAgICAgICAgICAgICAgIDogIXRoaXMucHJvcHMuaXNNb2JpbGUgJiYgIU51bWJlci5pc05hTihvcmlnaW4/LmxhdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN0b3JlUmVmPXt0aGlzLnN0b3JlUmVmZXJlbmNlfVxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3RoaXMucHJvcHMuZGVzdGluYXRpb25QbGFjZUhvbGRlcn1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Z2V0TG9jYXRpb25UeXBlKHRoaXMucHJvcHMuZGVzdGluYXRpb24pfVxuICAgICAgICAgICAgZ2V0QXV0b1N1Z2dlc3RJY29ucz17dGhpcy5wcm9wcy5nZXRBdXRvU3VnZ2VzdEljb25zfVxuICAgICAgICAgICAgc2VhcmNoQ29udGV4dD17c2VhcmNoQ29udGV4dH1cbiAgICAgICAgICAgIG9uU2VsZWN0PXt0aGlzLnByb3BzLm9uU2VsZWN0fVxuICAgICAgICAgICAgb25DbGVhcj17dGhpcy5wcm9wcy5vbkNsZWFyfVxuICAgICAgICAgICAgcmVmUG9pbnQ9e3RoaXMucHJvcHMucmVmUG9pbnR9XG4gICAgICAgICAgICB2YWx1ZT17dmFsdWUodGhpcy5wcm9wcy5kZXN0aW5hdGlvbil9XG4gICAgICAgICAgICBsYW5nPXt0aGlzLnByb3BzLmxhbmd9XG4gICAgICAgICAgICBzb3VyY2VzPXt0aGlzLnByb3BzLnNvdXJjZXN9XG4gICAgICAgICAgICB0YXJnZXRzPXt0aGlzLnByb3BzLnRhcmdldHN9XG4gICAgICAgICAgICBmaWx0ZXJSZXN1bHRzPXt0aGlzLnByb3BzLmZpbHRlclJlc3VsdHN9XG4gICAgICAgICAgICBpc01vYmlsZT17dGhpcy5wcm9wcy5pc01vYmlsZX1cbiAgICAgICAgICAgIG1vYmlsZUxhYmVsPXtkZXN0aW5hdGlvbk1vYmlsZUxhYmVsfVxuICAgICAgICAgICAgZm9udFdlaWdodHM9e3RoaXMucHJvcHMuZm9udFdlaWdodHN9XG4gICAgICAgICAgICBtb2RlU2V0PXt0aGlzLnByb3BzLm1vZGVTZXR9XG4gICAgICAgICAgICBjb2xvcnM9e3RoaXMucHJvcHMuY29sb3JzfVxuICAgICAgICAgICAgc2hvd1Njcm9sbD17dGhpcy5wcm9wcy5zaG93U2Nyb2xsfVxuICAgICAgICAgICAgaXNFbWJlZGRlZD17dGhpcy5wcm9wcy5pc0VtYmVkZGVkfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgeyhzaG93U3dhcENvbnRyb2wgfHwgc2hvd1ZpYXBvaW50Q29udHJvbCkgJiYgKFxuICAgICAgICAgICAgPEl0aW5lcmFyeVNlYXJjaENvbnRyb2xcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjeChzdHlsZXNbJ2FkZC12aWEtcG9pbnQnXSwgc3R5bGVzLm1vcmUsIHtcbiAgICAgICAgICAgICAgICBjb2xsYXBzZWQ6IHZpYVBvaW50cy5sZW5ndGggPiA0LFxuICAgICAgICAgICAgICB9KX1cbiAgICAgICAgICAgICAgZW5hYmxlZD17c2hvd1ZpYXBvaW50Q29udHJvbCAmJiB2aWFQb2ludHMubGVuZ3RoID09PSAwfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB0aGlzLmhhbmRsZUFkZFZpYVBvaW50Q2xpY2soKX1cbiAgICAgICAgICAgICAgb25LZXlQcmVzcz17ZSA9PlxuICAgICAgICAgICAgICAgIGlzS2V5Ym9hcmRTZWxlY3Rpb25FdmVudChlKSAmJiB0aGlzLmhhbmRsZUFkZFZpYVBvaW50Q2xpY2soKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGFyaWEtbGFiZWw9e3QoJ2FkZC12aWEtYnV0dG9uLWxhYmVsJywgeyBsbmcgfSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxJY29uXG4gICAgICAgICAgICAgICAgaW1nPVwidmlhcG9pbnRcIlxuICAgICAgICAgICAgICAgIHdpZHRoPXsxLjI1fVxuICAgICAgICAgICAgICAgIGhlaWdodD17MS4zNzV9XG4gICAgICAgICAgICAgICAgY29sb3I9e3ByaW1hcnl9XG4gICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8L0l0aW5lcmFyeVNlYXJjaENvbnRyb2w+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG59XG5cbmNvbnN0IERUQXV0b3N1Z2dlc3RQYW5lbFdpdGhUcmFuc2xhdGlvbiA9IHdpdGhUcmFuc2xhdGlvbigpKERUQXV0b3N1Z2dlc3RQYW5lbCk7XG5cbmV4cG9ydCBkZWZhdWx0IHByb3BzID0+IHtcbiAgcmV0dXJuIChcbiAgICA8STE4bmV4dFByb3ZpZGVyIGkxOG49e2kxOG59PlxuICAgICAgPERUQXV0b3N1Z2dlc3RQYW5lbFdpdGhUcmFuc2xhdGlvbiB7Li4ucHJvcHN9IC8+XG4gICAgPC9JMThuZXh0UHJvdmlkZXI+XG4gICk7XG59O1xuIl0sIm5hbWVzIjpbIm9iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJTZWxlY3QiLCJ2YWx1ZSIsIm9wdGlvbnMiLCJvblNsYWNrVGltZVNlbGVjdGVkIiwidmlhUG9pbnRJbmRleCIsImlkIiwibGFiZWwiLCJpY29uIiwibGFiZWxJZCIsInNlbGVjdGVkSXRlbSIsImZpbmQiLCJvcHRpb24iLCJpc09wZW4iLCJnZXRUb2dnbGVCdXR0b25Qcm9wcyIsImdldE1lbnVQcm9wcyIsImdldEl0ZW1Qcm9wcyIsImdldExhYmVsUHJvcHMiLCJoaWdobGlnaHRlZEluZGV4IiwidXNlU2VsZWN0IiwiaXRlbXMiLCJpdGVtVG9TdHJpbmciLCJpdGVtIiwiZGlzcGxheU5hbWUiLCJvblNlbGVjdGVkSXRlbUNoYW5nZSIsIm5ld0l0ZW0iLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJjbGFzc05hbWUiLCJzdHlsZXMiLCJjb250YWluZXIiLCJPYmplY3QiLCJhc3NpZ24iLCJpbnB1dCIsImN4Iiwic3VnZ2VzdGlvbnNDb250YWluZXJPcGVuIiwibWFwIiwiaW5kZXgiLCJrZXkiLCJzdWdnZXN0aW9uIiwic3VnZ2VzdGlvbkhpZ2hsaWdodGVkIiwicHJvY2VzcyIsImVudiIsIk5PREVfRU5WIiwicHJvcFR5cGVzIiwiUHJvcFR5cGVzIiwibnVtYmVyIiwiaXNSZXF1aXJlZCIsImZ1bmMiLCJhcnJheU9mIiwic2hhcGUiLCJzdHJpbmciLCJub2RlIiwidHJhbnNsYXRpb25zIiwiZGUiLCJ0cmFuc2xhdGlvbiIsImVuIiwiZmkiLCJwbCIsInN2IiwiaTE4biIsImNyZWF0ZUluc3RhbmNlIiwiZmFsbGJhY2tMbmciLCJyZXNvdXJjZXMiLCJkZWZhdWx0TlMiLCJyZWFjdCIsInVzZVN1c3BlbnNlIiwiaW5pdCIsImdldEVtcHR5VmlhUG9pbnRQbGFjZUhvbGRlciIsImlzVmlhUG9pbnRFbXB0eSIsInZpYVBvaW50IiwidW5kZWZpbmVkIiwiaXNFbXB0eSIsImtleXMiLCJsZW5ndGgiLCJpbmNsdWRlcyIsIkl0aW5lcmFyeVNlYXJjaENvbnRyb2wiLCJfcmVmIiwiY2hpbGRyZW4iLCJlbmFibGVkIiwib25DbGljayIsIm9uS2V5UHJlc3MiLCJ3aWRlIiwicmVzdCIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9leGNsdWRlZCIsInN0eWxlIiwicm9sZSIsInRhYkluZGV4IiwidXBkYXRlVmlhUG9pbnRTbGFjayIsImFjdGl2ZVZpYVBvaW50U2xhY2tzIiwidXBkYXRlZFZpYVBvaW50SW5kZXgiLCJ2aWFQb2ludFJlbW92ZWQiLCJmb3VuZEF0SW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIiwiaXNLZXlib2FyZFNlbGVjdGlvbkV2ZW50IiwiZXZlbnQiLCJzcGFjZSIsImVudGVyIiwid2hpY2giLCJrZXlDb2RlIiwiY29uY2F0IiwicHJldmVudERlZmF1bHQiLCJsb2NhdGlvbiIsImFkZHJlc3MiLCJncHMiLCJyZWFkeSIsImdldExvY2F0aW9uVHlwZSIsImdldFNsYWNrVGltZU9wdGlvbnMiLCJ0IiwidGltZU9wdGlvbnMiLCJpIiwidmFsdWVJbk1pbnV0ZXMiLCJwdXNoIiwiYm9vbCIsImRlZmF1bHRQcm9wcyIsImxvY2F0aW9uU2hhcGUiLCJsYXQiLCJsb24iLCJsb2NhdGlvblNsYWNrIiwiRFRBdXRvc3VnZ2VzdFBhbmVsIiwiQ29tcG9uZW50IiwiY29uc3RydWN0b3IiLCJwcm9wcyIsIl9kZWZpbmVQcm9wZXJ0eSIsInJlZiIsInNldFN0YXRlIiwicHJldlN0YXRlIiwicmVmcyIsImRlc3RpbmF0aW9uIiwic3RhdGUiLCJmb2N1cyIsInZpYVBvaW50cyIsInVwZGF0ZVZpYVBvaW50cyIsImZpbHRlciIsInZwIiwiYWN0aXZlU2xhY2tJbnB1dHMiLCJzbGFja1RpbWVJblNlY29uZHMiLCJhZGRBbmFseXRpY3NFdmVudCIsImFjdGlvbiIsImNhdGVnb3J5IiwibmFtZSIsIk51bWJlciIsInBhcnNlSW50IiwidmlhUG9pbnRMb2NhdGlvbiIsImhhbmRsZVZpYVBvaW50TG9jYXRpb25TZWxlY3RlZCIsInJldmVyc2UiLCJzd2FwT3JkZXIiLCJzbGFja0luU2Vjb25kcyIsImxuZyIsImxhbmciLCJyZW5kZXIiLCJvcmlnaW4iLCJzZWFyY2hQYW5lbFRleHQiLCJzZWFyY2hDb250ZXh0IiwiZGlzYWJsZUF1dG9Gb2N1cyIsIm9yaWdpbk1vYmlsZUxhYmVsIiwiZGVzdGluYXRpb25Nb2JpbGVMYWJlbCIsImZvbnRXZWlnaHRzIiwib25Gb2N1c0NoYW5nZSIsInNob3dTd2FwQ29udHJvbCIsInNob3dWaWFwb2ludENvbnRyb2wiLCJwcmltYXJ5IiwiY29sb3JzIiwic2xhY2tUaW1lIiwiZGVmYXVsdFNsYWNrVGltZVZhbHVlIiwiZ2V0VmlhUG9pbnRTbGFja1RpbWVPckRlZmF1bHQiLCJkZWZhdWx0VmFsdWUiLCJpc1ZpYVBvaW50U2xhY2tUaW1lSW5wdXRBY3RpdmUiLCJpc01vYmlsZSIsIm1lZGl1bSIsIkRUQXV0b1N1Z2dlc3QiLCJhcHBFbGVtZW50IiwiYXV0b0ZvY3VzIiwic3RvcmVSZWYiLCJzdG9yZVJlZmVyZW5jZSIsInJlZlBvaW50IiwicGxhY2Vob2xkZXIiLCJvcmlnaW5QbGFjZUhvbGRlciIsImdldEF1dG9TdWdnZXN0SWNvbnMiLCJvblNlbGVjdCIsIm9uQ2xlYXIiLCJmb2N1c0NoYW5nZSIsImhhbmRsZUZvY3VzQ2hhbmdlIiwic291cmNlcyIsInRhcmdldHMiLCJmaWx0ZXJSZXN1bHRzIiwibW9iaWxlTGFiZWwiLCJtb2RlU2V0Iiwic2hvd1Njcm9sbCIsImlzRW1iZWRkZWQiLCJvcHBvc2l0ZSIsImhhbmRsZVN3YXBPcmRlckNsaWNrIiwiZSIsIkljb24iLCJpbWciLCJjb2xvciIsInJlY3RhbmdsZSIsIlJlYWN0U29ydGFibGUiLCJsaXN0IiwiaGFuZGxlIiwiYW5pbWF0aW9uIiwiZGlzYWJsZWQiLCJzZXRMaXN0IiwibmV3VmlhUG9pbnRzIiwibyIsInJvdyIsImN1cnNvciIsInJvdGF0ZSIsImFyaWFMYWJlbCIsImhhbmRsZVZpYVBvaW50cyIsInNob3dTbGFja0NvbnRyb2wiLCJoYW5kbGVUb2dnbGVWaWFQb2ludFNsYWNrQ2xpY2siLCJnZXRTbGFja0Rpc3BsYXkiLCJoYW5kbGVWaWFQb2ludFNsYWNrVGltZVNlbGVjdGVkIiwiaGFuZGxlUmVtb3ZlVmlhUG9pbnRDbGljayIsImlzTmFOIiwiZGVzdGluYXRpb25QbGFjZUhvbGRlciIsIm1vcmUiLCJoYW5kbGVBZGRWaWFQb2ludENsaWNrIiwid2lkdGgiLCJoZWlnaHQiLCJkZWZhdWx0Q29sb3JzIiwiVVJMX1BFTElBUyIsIm9iamVjdE9mIiwiRFRBdXRvc3VnZ2VzdFBhbmVsV2l0aFRyYW5zbGF0aW9uIiwid2l0aFRyYW5zbGF0aW9uIiwiSTE4bmV4dFByb3ZpZGVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7RUFBQSxTQUFTLE9BQU8sQ0FBQyxDQUFDLEVBQUU7RUFDcEIsRUFBRSx5QkFBeUI7O0VBRTNCLEVBQUUsT0FBTyxPQUFPLEdBQUcsVUFBVSxJQUFJLE9BQU8sTUFBTSxJQUFJLFFBQVEsSUFBSSxPQUFPLE1BQU0sQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDLEVBQUU7RUFDcEcsSUFBSSxPQUFPLE9BQU8sQ0FBQztFQUNuQixFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRTtFQUNuQixJQUFJLE9BQU8sQ0FBQyxJQUFJLFVBQVUsSUFBSSxPQUFPLE1BQU0sSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLE1BQU0sSUFBSSxDQUFDLEtBQUssTUFBTSxDQUFDLFNBQVMsR0FBRyxRQUFRLEdBQUcsT0FBTyxDQUFDO0VBQ3ZILEVBQUUsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7RUFDZjs7RUNQQSxTQUFTLFdBQVcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFO0VBQzNCLEVBQUUsSUFBSSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztFQUM1QyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDO0VBQy9CLEVBQUUsSUFBSSxNQUFNLEtBQUssQ0FBQyxFQUFFO0VBQ3BCLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBYyxDQUFDO0VBQ3JDLElBQUksSUFBSSxRQUFRLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztFQUN4QyxJQUFJLE1BQU0sSUFBSSxTQUFTLENBQUMsOENBQThD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
|