diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 00000000..d9e789a8 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +assets/javascripts/* linguist-generated diff --git a/.gitignore b/.gitignore index 2624fbab..17de2681 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ .bundle -assets/* node_modules yarn-error* diff --git a/README.md b/README.md index d4d305fe..925e1bff 100644 --- a/README.md +++ b/README.md @@ -24,10 +24,6 @@ Optional: Adjust the [database file](../../config/database.yml) ```sh git clone https://github.com/renuo/redmine_tracky plugins/redmine_tracky -cd plugins/redmine_tracky - -rake build -cd ../.. RAILS_ENV=production rake redmine:plugins:redmine_tracky:install ``` diff --git a/assets/.keep b/assets/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/assets/javascripts/redmine-tracky.js b/assets/javascripts/redmine-tracky.js new file mode 100644 index 00000000..d9d28623 --- /dev/null +++ b/assets/javascripts/redmine-tracky.js @@ -0,0 +1,2 @@ +(()=>{"use strict";var e={888:(e,t,n)=>{n.r(t),n.d(t,{Application:()=>Q,AttributeObserver:()=>C,Context:()=>L,Controller:()=>le,ElementObserver:()=>b,IndexedMultimap:()=>x,Multimap:()=>B,SelectorObserver:()=>D,StringMapObserver:()=>M,TokenListObserver:()=>O,ValueListObserver:()=>T,add:()=>v,defaultSchema:()=>G,del:()=>k,fetch:()=>w,prune:()=>E});class r{constructor(e,t,n){this.eventTarget=e,this.eventName=t,this.eventOptions=n,this.unorderedBindings=new Set}connect(){this.eventTarget.addEventListener(this.eventName,this,this.eventOptions)}disconnect(){this.eventTarget.removeEventListener(this.eventName,this,this.eventOptions)}bindingConnected(e){this.unorderedBindings.add(e)}bindingDisconnected(e){this.unorderedBindings.delete(e)}handleEvent(e){const t=function(e){if("immediatePropagationStopped"in e)return e;{const{stopImmediatePropagation:t}=e;return Object.assign(e,{immediatePropagationStopped:!1,stopImmediatePropagation(){this.immediatePropagationStopped=!0,t.call(this)}})}}(e);for(const e of this.bindings){if(t.immediatePropagationStopped)break;e.handleEvent(t)}}hasBindings(){return this.unorderedBindings.size>0}get bindings(){return Array.from(this.unorderedBindings).sort(((e,t)=>{const n=e.index,r=t.index;return nr?1:0}))}}class i{constructor(e){this.application=e,this.eventListenerMaps=new Map,this.started=!1}start(){this.started||(this.started=!0,this.eventListeners.forEach((e=>e.connect())))}stop(){this.started&&(this.started=!1,this.eventListeners.forEach((e=>e.disconnect())))}get eventListeners(){return Array.from(this.eventListenerMaps.values()).reduce(((e,t)=>e.concat(Array.from(t.values()))),[])}bindingConnected(e){this.fetchEventListenerForBinding(e).bindingConnected(e)}bindingDisconnected(e,t=!1){this.fetchEventListenerForBinding(e).bindingDisconnected(e),t&&this.clearEventListenersForBinding(e)}handleError(e,t,n={}){this.application.handleError(e,`Error ${t}`,n)}clearEventListenersForBinding(e){const t=this.fetchEventListenerForBinding(e);t.hasBindings()||(t.disconnect(),this.removeMappedEventListenerFor(e))}removeMappedEventListenerFor(e){const{eventTarget:t,eventName:n,eventOptions:r}=e,i=this.fetchEventListenerMapForEventTarget(t),a=this.cacheKey(n,r);i.delete(a),0==i.size&&this.eventListenerMaps.delete(t)}fetchEventListenerForBinding(e){const{eventTarget:t,eventName:n,eventOptions:r}=e;return this.fetchEventListener(t,n,r)}fetchEventListener(e,t,n){const r=this.fetchEventListenerMapForEventTarget(e),i=this.cacheKey(t,n);let a=r.get(i);return a||(a=this.createEventListener(e,t,n),r.set(i,a)),a}createEventListener(e,t,n){const i=new r(e,t,n);return this.started&&i.connect(),i}fetchEventListenerMapForEventTarget(e){let t=this.eventListenerMaps.get(e);return t||(t=new Map,this.eventListenerMaps.set(e,t)),t}cacheKey(e,t){const n=[e];return Object.keys(t).sort().forEach((e=>{n.push(`${t[e]?"":"!"}${e}`)})),n.join(":")}}const a={stop:({event:e,value:t})=>(t&&e.stopPropagation(),!0),prevent:({event:e,value:t})=>(t&&e.preventDefault(),!0),self:({event:e,value:t,element:n})=>!t||n===e.target},o=/^(?:(?:([^.]+?)\+)?(.+?)(?:\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;function s(e){return e.replace(/(?:[_-])([a-z0-9])/g,((e,t)=>t.toUpperCase()))}function l(e){return s(e.replace(/--/g,"-").replace(/__/g,"_"))}function c(e){return e.charAt(0).toUpperCase()+e.slice(1)}function u(e){return e.replace(/([A-Z])/g,((e,t)=>`-${t.toLowerCase()}`))}function d(e){return null!=e}function h(e,t){return Object.prototype.hasOwnProperty.call(e,t)}const f=["meta","ctrl","alt","shift"];class m{constructor(e,t,n,r){this.element=e,this.index=t,this.eventTarget=n.eventTarget||e,this.eventName=n.eventName||function(e){const t=e.tagName.toLowerCase();if(t in p)return p[t](e)}(e)||A("missing event name"),this.eventOptions=n.eventOptions||{},this.identifier=n.identifier||A("missing identifier"),this.methodName=n.methodName||A("missing method name"),this.keyFilter=n.keyFilter||"",this.schema=r}static forToken(e,t){return new this(e.element,e.index,function(e){const t=e.trim().match(o)||[];let n=t[2],r=t[3];return r&&!["keydown","keyup","keypress"].includes(n)&&(n+=`.${r}`,r=""),{eventTarget:(i=t[4],"window"==i?window:"document"==i?document:void 0),eventName:n,eventOptions:t[7]?(a=t[7],a.split(":").reduce(((e,t)=>Object.assign(e,{[t.replace(/^!/,"")]:!/^!/.test(t)})),{})):{},identifier:t[5],methodName:t[6],keyFilter:t[1]||r};var i,a}(e.content),t)}toString(){const e=this.keyFilter?`.${this.keyFilter}`:"",t=this.eventTargetName?`@${this.eventTargetName}`:"";return`${this.eventName}${e}${t}->${this.identifier}#${this.methodName}`}shouldIgnoreKeyboardEvent(e){if(!this.keyFilter)return!1;const t=this.keyFilter.split("+");if(this.keyFilterDissatisfied(e,t))return!0;const n=t.filter((e=>!f.includes(e)))[0];return!!n&&(h(this.keyMappings,n)||A(`contains unknown key filter: ${this.keyFilter}`),this.keyMappings[n].toLowerCase()!==e.key.toLowerCase())}shouldIgnoreMouseEvent(e){if(!this.keyFilter)return!1;const t=[this.keyFilter];return!!this.keyFilterDissatisfied(e,t)}get params(){const e={},t=new RegExp(`^data-${this.identifier}-(.+)-param$`,"i");for(const{name:n,value:r}of Array.from(this.element.attributes)){const i=n.match(t),a=i&&i[1];a&&(e[s(a)]=g(r))}return e}get eventTargetName(){return(e=this.eventTarget)==window?"window":e==document?"document":void 0;var e}get keyMappings(){return this.schema.keyMappings}keyFilterDissatisfied(e,t){const[n,r,i,a]=f.map((e=>t.includes(e)));return e.metaKey!==n||e.ctrlKey!==r||e.altKey!==i||e.shiftKey!==a}}const p={a:()=>"click",button:()=>"click",form:()=>"submit",details:()=>"toggle",input:e=>"submit"==e.getAttribute("type")?"click":"input",select:()=>"change",textarea:()=>"input"};function A(e){throw new Error(e)}function g(e){try{return JSON.parse(e)}catch(t){return e}}class y{constructor(e,t){this.context=e,this.action=t}get index(){return this.action.index}get eventTarget(){return this.action.eventTarget}get eventOptions(){return this.action.eventOptions}get identifier(){return this.context.identifier}handleEvent(e){const t=this.prepareActionEvent(e);this.willBeInvokedByEvent(e)&&this.applyEventModifiers(t)&&this.invokeWithEvent(t)}get eventName(){return this.action.eventName}get method(){const e=this.controller[this.methodName];if("function"==typeof e)return e;throw new Error(`Action "${this.action}" references undefined method "${this.methodName}"`)}applyEventModifiers(e){const{element:t}=this.action,{actionDescriptorFilters:n}=this.context.application,{controller:r}=this.context;let i=!0;for(const[a,o]of Object.entries(this.eventOptions))if(a in n){const s=n[a];i=i&&s({name:a,value:o,event:e,element:t,controller:r})}return i}prepareActionEvent(e){return Object.assign(e,{params:this.action.params})}invokeWithEvent(e){const{target:t,currentTarget:n}=e;try{this.method.call(this.controller,e),this.context.logDebugActivity(this.methodName,{event:e,target:t,currentTarget:n,action:this.methodName})}catch(t){const{identifier:n,controller:r,element:i,index:a}=this,o={identifier:n,controller:r,element:i,index:a,event:e};this.context.handleError(t,`invoking action "${this.action}"`,o)}}willBeInvokedByEvent(e){const t=e.target;return!(e instanceof KeyboardEvent&&this.action.shouldIgnoreKeyboardEvent(e))&&!(e instanceof MouseEvent&&this.action.shouldIgnoreMouseEvent(e))&&(this.element===t||(t instanceof Element&&this.element.contains(t)?this.scope.containsElement(t):this.scope.containsElement(this.action.element)))}get controller(){return this.context.controller}get methodName(){return this.action.methodName}get element(){return this.scope.element}get scope(){return this.context.scope}}class b{constructor(e,t){this.mutationObserverInit={attributes:!0,childList:!0,subtree:!0},this.element=e,this.started=!1,this.delegate=t,this.elements=new Set,this.mutationObserver=new MutationObserver((e=>this.processMutations(e)))}start(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,this.mutationObserverInit),this.refresh())}pause(e){this.started&&(this.mutationObserver.disconnect(),this.started=!1),e(),this.started||(this.mutationObserver.observe(this.element,this.mutationObserverInit),this.started=!0)}stop(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)}refresh(){if(this.started){const e=new Set(this.matchElementsInTree());for(const t of Array.from(this.elements))e.has(t)||this.removeElement(t);for(const t of Array.from(e))this.addElement(t)}}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){"attributes"==e.type?this.processAttributeChange(e.target,e.attributeName):"childList"==e.type&&(this.processRemovedNodes(e.removedNodes),this.processAddedNodes(e.addedNodes))}processAttributeChange(e,t){this.elements.has(e)?this.delegate.elementAttributeChanged&&this.matchElement(e)?this.delegate.elementAttributeChanged(e,t):this.removeElement(e):this.matchElement(e)&&this.addElement(e)}processRemovedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.processTree(e,this.removeElement)}}processAddedNodes(e){for(const t of Array.from(e)){const e=this.elementFromNode(t);e&&this.elementIsActive(e)&&this.processTree(e,this.addElement)}}matchElement(e){return this.delegate.matchElement(e)}matchElementsInTree(e=this.element){return this.delegate.matchElementsInTree(e)}processTree(e,t){for(const n of this.matchElementsInTree(e))t.call(this,n)}elementFromNode(e){if(e.nodeType==Node.ELEMENT_NODE)return e}elementIsActive(e){return e.isConnected==this.element.isConnected&&this.element.contains(e)}addElement(e){this.elements.has(e)||this.elementIsActive(e)&&(this.elements.add(e),this.delegate.elementMatched&&this.delegate.elementMatched(e))}removeElement(e){this.elements.has(e)&&(this.elements.delete(e),this.delegate.elementUnmatched&&this.delegate.elementUnmatched(e))}}class C{constructor(e,t,n){this.attributeName=t,this.delegate=n,this.elementObserver=new b(e,this)}get element(){return this.elementObserver.element}get selector(){return`[${this.attributeName}]`}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get started(){return this.elementObserver.started}matchElement(e){return e.hasAttribute(this.attributeName)}matchElementsInTree(e){const t=this.matchElement(e)?[e]:[],n=Array.from(e.querySelectorAll(this.selector));return t.concat(n)}elementMatched(e){this.delegate.elementMatchedAttribute&&this.delegate.elementMatchedAttribute(e,this.attributeName)}elementUnmatched(e){this.delegate.elementUnmatchedAttribute&&this.delegate.elementUnmatchedAttribute(e,this.attributeName)}elementAttributeChanged(e,t){this.delegate.elementAttributeValueChanged&&this.attributeName==t&&this.delegate.elementAttributeValueChanged(e,t)}}function v(e,t,n){w(e,t).add(n)}function k(e,t,n){w(e,t).delete(n),E(e,t)}function w(e,t){let n=e.get(t);return n||(n=new Set,e.set(t,n)),n}function E(e,t){const n=e.get(t);null!=n&&0==n.size&&e.delete(t)}class B{constructor(){this.valuesByKey=new Map}get keys(){return Array.from(this.valuesByKey.keys())}get values(){return Array.from(this.valuesByKey.values()).reduce(((e,t)=>e.concat(Array.from(t))),[])}get size(){return Array.from(this.valuesByKey.values()).reduce(((e,t)=>e+t.size),0)}add(e,t){v(this.valuesByKey,e,t)}delete(e,t){k(this.valuesByKey,e,t)}has(e,t){const n=this.valuesByKey.get(e);return null!=n&&n.has(t)}hasKey(e){return this.valuesByKey.has(e)}hasValue(e){return Array.from(this.valuesByKey.values()).some((t=>t.has(e)))}getValuesForKey(e){const t=this.valuesByKey.get(e);return t?Array.from(t):[]}getKeysForValue(e){return Array.from(this.valuesByKey).filter((([t,n])=>n.has(e))).map((([e,t])=>e))}}class x extends B{constructor(){super(),this.keysByValue=new Map}get values(){return Array.from(this.keysByValue.keys())}add(e,t){super.add(e,t),v(this.keysByValue,t,e)}delete(e,t){super.delete(e,t),k(this.keysByValue,t,e)}hasValue(e){return this.keysByValue.has(e)}getKeysForValue(e){const t=this.keysByValue.get(e);return t?Array.from(t):[]}}class D{constructor(e,t,n,r){this._selector=t,this.details=r,this.elementObserver=new b(e,this),this.delegate=n,this.matchesByElement=new B}get started(){return this.elementObserver.started}get selector(){return this._selector}set selector(e){this._selector=e,this.refresh()}start(){this.elementObserver.start()}pause(e){this.elementObserver.pause(e)}stop(){this.elementObserver.stop()}refresh(){this.elementObserver.refresh()}get element(){return this.elementObserver.element}matchElement(e){const{selector:t}=this;if(t){const n=e.matches(t);return this.delegate.selectorMatchElement?n&&this.delegate.selectorMatchElement(e,this.details):n}return!1}matchElementsInTree(e){const{selector:t}=this;if(t){const n=this.matchElement(e)?[e]:[],r=Array.from(e.querySelectorAll(t)).filter((e=>this.matchElement(e)));return n.concat(r)}return[]}elementMatched(e){const{selector:t}=this;t&&this.selectorMatched(e,t)}elementUnmatched(e){const t=this.matchesByElement.getKeysForValue(e);for(const n of t)this.selectorUnmatched(e,n)}elementAttributeChanged(e,t){const{selector:n}=this;if(n){const t=this.matchElement(e),r=this.matchesByElement.has(n,e);t&&!r?this.selectorMatched(e,n):!t&&r&&this.selectorUnmatched(e,n)}}selectorMatched(e,t){this.delegate.selectorMatched(e,t,this.details),this.matchesByElement.add(t,e)}selectorUnmatched(e,t){this.delegate.selectorUnmatched(e,t,this.details),this.matchesByElement.delete(t,e)}}class M{constructor(e,t){this.element=e,this.delegate=t,this.started=!1,this.stringMap=new Map,this.mutationObserver=new MutationObserver((e=>this.processMutations(e)))}start(){this.started||(this.started=!0,this.mutationObserver.observe(this.element,{attributes:!0,attributeOldValue:!0}),this.refresh())}stop(){this.started&&(this.mutationObserver.takeRecords(),this.mutationObserver.disconnect(),this.started=!1)}refresh(){if(this.started)for(const e of this.knownAttributeNames)this.refreshAttribute(e,null)}processMutations(e){if(this.started)for(const t of e)this.processMutation(t)}processMutation(e){const t=e.attributeName;t&&this.refreshAttribute(t,e.oldValue)}refreshAttribute(e,t){const n=this.delegate.getStringMapKeyForAttribute(e);if(null!=n){this.stringMap.has(e)||this.stringMapKeyAdded(n,e);const r=this.element.getAttribute(e);if(this.stringMap.get(e)!=r&&this.stringMapValueChanged(r,n,t),null==r){const t=this.stringMap.get(e);this.stringMap.delete(e),t&&this.stringMapKeyRemoved(n,e,t)}else this.stringMap.set(e,r)}}stringMapKeyAdded(e,t){this.delegate.stringMapKeyAdded&&this.delegate.stringMapKeyAdded(e,t)}stringMapValueChanged(e,t,n){this.delegate.stringMapValueChanged&&this.delegate.stringMapValueChanged(e,t,n)}stringMapKeyRemoved(e,t,n){this.delegate.stringMapKeyRemoved&&this.delegate.stringMapKeyRemoved(e,t,n)}get knownAttributeNames(){return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)))}get currentAttributeNames(){return Array.from(this.element.attributes).map((e=>e.name))}get recordedAttributeNames(){return Array.from(this.stringMap.keys())}}class O{constructor(e,t,n){this.attributeObserver=new C(e,t,this),this.delegate=n,this.tokensByElement=new B}get started(){return this.attributeObserver.started}start(){this.attributeObserver.start()}pause(e){this.attributeObserver.pause(e)}stop(){this.attributeObserver.stop()}refresh(){this.attributeObserver.refresh()}get element(){return this.attributeObserver.element}get attributeName(){return this.attributeObserver.attributeName}elementMatchedAttribute(e){this.tokensMatched(this.readTokensForElement(e))}elementAttributeValueChanged(e){const[t,n]=this.refreshTokensForElement(e);this.tokensUnmatched(t),this.tokensMatched(n)}elementUnmatchedAttribute(e){this.tokensUnmatched(this.tokensByElement.getValuesForKey(e))}tokensMatched(e){e.forEach((e=>this.tokenMatched(e)))}tokensUnmatched(e){e.forEach((e=>this.tokenUnmatched(e)))}tokenMatched(e){this.delegate.tokenMatched(e),this.tokensByElement.add(e.element,e)}tokenUnmatched(e){this.delegate.tokenUnmatched(e),this.tokensByElement.delete(e.element,e)}refreshTokensForElement(e){const t=this.tokensByElement.getValuesForKey(e),n=this.readTokensForElement(e),r=function(e,t){const n=Math.max(e.length,t.length);return Array.from({length:n},((n,r)=>[e[r],t[r]]))}(t,n).findIndex((([e,t])=>{return r=t,!((n=e)&&r&&n.index==r.index&&n.content==r.content);var n,r}));return-1==r?[[],[]]:[t.slice(r),n.slice(r)]}readTokensForElement(e){const t=this.attributeName;return function(e,t,n){return e.trim().split(/\s+/).filter((e=>e.length)).map(((e,r)=>({element:t,attributeName:n,content:e,index:r})))}(e.getAttribute(t)||"",e,t)}}class T{constructor(e,t,n){this.tokenListObserver=new O(e,t,this),this.delegate=n,this.parseResultsByToken=new WeakMap,this.valuesByTokenByElement=new WeakMap}get started(){return this.tokenListObserver.started}start(){this.tokenListObserver.start()}stop(){this.tokenListObserver.stop()}refresh(){this.tokenListObserver.refresh()}get element(){return this.tokenListObserver.element}get attributeName(){return this.tokenListObserver.attributeName}tokenMatched(e){const{element:t}=e,{value:n}=this.fetchParseResultForToken(e);n&&(this.fetchValuesByTokenForElement(t).set(e,n),this.delegate.elementMatchedValue(t,n))}tokenUnmatched(e){const{element:t}=e,{value:n}=this.fetchParseResultForToken(e);n&&(this.fetchValuesByTokenForElement(t).delete(e),this.delegate.elementUnmatchedValue(t,n))}fetchParseResultForToken(e){let t=this.parseResultsByToken.get(e);return t||(t=this.parseToken(e),this.parseResultsByToken.set(e,t)),t}fetchValuesByTokenForElement(e){let t=this.valuesByTokenByElement.get(e);return t||(t=new Map,this.valuesByTokenByElement.set(e,t)),t}parseToken(e){try{return{value:this.delegate.parseValueForToken(e)}}catch(e){return{error:e}}}}class S{constructor(e,t){this.context=e,this.delegate=t,this.bindingsByAction=new Map}start(){this.valueListObserver||(this.valueListObserver=new T(this.element,this.actionAttribute,this),this.valueListObserver.start())}stop(){this.valueListObserver&&(this.valueListObserver.stop(),delete this.valueListObserver,this.disconnectAllActions())}get element(){return this.context.element}get identifier(){return this.context.identifier}get actionAttribute(){return this.schema.actionAttribute}get schema(){return this.context.schema}get bindings(){return Array.from(this.bindingsByAction.values())}connectAction(e){const t=new y(this.context,e);this.bindingsByAction.set(e,t),this.delegate.bindingConnected(t)}disconnectAction(e){const t=this.bindingsByAction.get(e);t&&(this.bindingsByAction.delete(e),this.delegate.bindingDisconnected(t))}disconnectAllActions(){this.bindings.forEach((e=>this.delegate.bindingDisconnected(e,!0))),this.bindingsByAction.clear()}parseValueForToken(e){const t=m.forToken(e,this.schema);if(t.identifier==this.identifier)return t}elementMatchedValue(e,t){this.connectAction(t)}elementUnmatchedValue(e,t){this.disconnectAction(t)}}class N{constructor(e,t){this.context=e,this.receiver=t,this.stringMapObserver=new M(this.element,this),this.valueDescriptorMap=this.controller.valueDescriptorMap}start(){this.stringMapObserver.start(),this.invokeChangedCallbacksForDefaultValues()}stop(){this.stringMapObserver.stop()}get element(){return this.context.element}get controller(){return this.context.controller}getStringMapKeyForAttribute(e){if(e in this.valueDescriptorMap)return this.valueDescriptorMap[e].name}stringMapKeyAdded(e,t){const n=this.valueDescriptorMap[t];this.hasValue(e)||this.invokeChangedCallback(e,n.writer(this.receiver[e]),n.writer(n.defaultValue))}stringMapValueChanged(e,t,n){const r=this.valueDescriptorNameMap[t];null!==e&&(null===n&&(n=r.writer(r.defaultValue)),this.invokeChangedCallback(t,e,n))}stringMapKeyRemoved(e,t,n){const r=this.valueDescriptorNameMap[e];this.hasValue(e)?this.invokeChangedCallback(e,r.writer(this.receiver[e]),n):this.invokeChangedCallback(e,r.writer(r.defaultValue),n)}invokeChangedCallbacksForDefaultValues(){for(const{key:e,name:t,defaultValue:n,writer:r}of this.valueDescriptors)null==n||this.controller.data.has(e)||this.invokeChangedCallback(t,r(n),void 0)}invokeChangedCallback(e,t,n){const r=`${e}Changed`,i=this.receiver[r];if("function"==typeof i){const r=this.valueDescriptorNameMap[e];try{const e=r.reader(t);let a=n;n&&(a=r.reader(n)),i.call(this.receiver,e,a)}catch(e){throw e instanceof TypeError&&(e.message=`Stimulus Value "${this.context.identifier}.${r.name}" - ${e.message}`),e}}}get valueDescriptors(){const{valueDescriptorMap:e}=this;return Object.keys(e).map((t=>e[t]))}get valueDescriptorNameMap(){const e={};return Object.keys(this.valueDescriptorMap).forEach((t=>{const n=this.valueDescriptorMap[t];e[n.name]=n})),e}hasValue(e){const t=`has${c(this.valueDescriptorNameMap[e].name)}`;return this.receiver[t]}}class I{constructor(e,t){this.context=e,this.delegate=t,this.targetsByName=new B}start(){this.tokenListObserver||(this.tokenListObserver=new O(this.element,this.attributeName,this),this.tokenListObserver.start())}stop(){this.tokenListObserver&&(this.disconnectAllTargets(),this.tokenListObserver.stop(),delete this.tokenListObserver)}tokenMatched({element:e,content:t}){this.scope.containsElement(e)&&this.connectTarget(e,t)}tokenUnmatched({element:e,content:t}){this.disconnectTarget(e,t)}connectTarget(e,t){var n;this.targetsByName.has(t,e)||(this.targetsByName.add(t,e),null===(n=this.tokenListObserver)||void 0===n||n.pause((()=>this.delegate.targetConnected(e,t))))}disconnectTarget(e,t){var n;this.targetsByName.has(t,e)&&(this.targetsByName.delete(t,e),null===(n=this.tokenListObserver)||void 0===n||n.pause((()=>this.delegate.targetDisconnected(e,t))))}disconnectAllTargets(){for(const e of this.targetsByName.keys)for(const t of this.targetsByName.getValuesForKey(e))this.disconnectTarget(t,e)}get attributeName(){return`data-${this.context.identifier}-target`}get element(){return this.context.element}get scope(){return this.context.scope}}function F(e,t){const n=j(e);return Array.from(n.reduce(((e,n)=>(function(e,t){const n=e[t];return Array.isArray(n)?n:[]}(n,t).forEach((t=>e.add(t))),e)),new Set))}function j(e){const t=[];for(;e;)t.push(e),e=Object.getPrototypeOf(e);return t.reverse()}class _{constructor(e,t){this.started=!1,this.context=e,this.delegate=t,this.outletsByName=new B,this.outletElementsByName=new B,this.selectorObserverMap=new Map,this.attributeObserverMap=new Map}start(){this.started||(this.outletDefinitions.forEach((e=>{this.setupSelectorObserverForOutlet(e),this.setupAttributeObserverForOutlet(e)})),this.started=!0,this.dependentContexts.forEach((e=>e.refresh())))}refresh(){this.selectorObserverMap.forEach((e=>e.refresh())),this.attributeObserverMap.forEach((e=>e.refresh()))}stop(){this.started&&(this.started=!1,this.disconnectAllOutlets(),this.stopSelectorObservers(),this.stopAttributeObservers())}stopSelectorObservers(){this.selectorObserverMap.size>0&&(this.selectorObserverMap.forEach((e=>e.stop())),this.selectorObserverMap.clear())}stopAttributeObservers(){this.attributeObserverMap.size>0&&(this.attributeObserverMap.forEach((e=>e.stop())),this.attributeObserverMap.clear())}selectorMatched(e,t,{outletName:n}){const r=this.getOutlet(e,n);r&&this.connectOutlet(r,e,n)}selectorUnmatched(e,t,{outletName:n}){const r=this.getOutletFromMap(e,n);r&&this.disconnectOutlet(r,e,n)}selectorMatchElement(e,{outletName:t}){const n=this.selector(t),r=this.hasOutlet(e,t),i=e.matches(`[${this.schema.controllerAttribute}~=${t}]`);return!!n&&r&&i&&e.matches(n)}elementMatchedAttribute(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}elementAttributeValueChanged(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}elementUnmatchedAttribute(e,t){const n=this.getOutletNameFromOutletAttributeName(t);n&&this.updateSelectorObserverForOutlet(n)}connectOutlet(e,t,n){var r;this.outletElementsByName.has(n,t)||(this.outletsByName.add(n,e),this.outletElementsByName.add(n,t),null===(r=this.selectorObserverMap.get(n))||void 0===r||r.pause((()=>this.delegate.outletConnected(e,t,n))))}disconnectOutlet(e,t,n){var r;this.outletElementsByName.has(n,t)&&(this.outletsByName.delete(n,e),this.outletElementsByName.delete(n,t),null===(r=this.selectorObserverMap.get(n))||void 0===r||r.pause((()=>this.delegate.outletDisconnected(e,t,n))))}disconnectAllOutlets(){for(const e of this.outletElementsByName.keys)for(const t of this.outletElementsByName.getValuesForKey(e))for(const n of this.outletsByName.getValuesForKey(e))this.disconnectOutlet(n,t,e)}updateSelectorObserverForOutlet(e){const t=this.selectorObserverMap.get(e);t&&(t.selector=this.selector(e))}setupSelectorObserverForOutlet(e){const t=this.selector(e),n=new D(document.body,t,this,{outletName:e});this.selectorObserverMap.set(e,n),n.start()}setupAttributeObserverForOutlet(e){const t=this.attributeNameForOutletName(e),n=new C(this.scope.element,t,this);this.attributeObserverMap.set(e,n),n.start()}selector(e){return this.scope.outlets.getSelectorForOutletName(e)}attributeNameForOutletName(e){return this.scope.schema.outletAttributeForScope(this.identifier,e)}getOutletNameFromOutletAttributeName(e){return this.outletDefinitions.find((t=>this.attributeNameForOutletName(t)===e))}get outletDependencies(){const e=new B;return this.router.modules.forEach((t=>{F(t.definition.controllerConstructor,"outlets").forEach((n=>e.add(n,t.identifier)))})),e}get outletDefinitions(){return this.outletDependencies.getKeysForValue(this.identifier)}get dependentControllerIdentifiers(){return this.outletDependencies.getValuesForKey(this.identifier)}get dependentContexts(){const e=this.dependentControllerIdentifiers;return this.router.contexts.filter((t=>e.includes(t.identifier)))}hasOutlet(e,t){return!!this.getOutlet(e,t)||!!this.getOutletFromMap(e,t)}getOutlet(e,t){return this.application.getControllerForElementAndIdentifier(e,t)}getOutletFromMap(e,t){return this.outletsByName.getValuesForKey(t).find((t=>t.element===e))}get scope(){return this.context.scope}get schema(){return this.context.schema}get identifier(){return this.context.identifier}get application(){return this.context.application}get router(){return this.application.router}}class L{constructor(e,t){this.logDebugActivity=(e,t={})=>{const{identifier:n,controller:r,element:i}=this;t=Object.assign({identifier:n,controller:r,element:i},t),this.application.logDebugActivity(this.identifier,e,t)},this.module=e,this.scope=t,this.controller=new e.controllerConstructor(this),this.bindingObserver=new S(this,this.dispatcher),this.valueObserver=new N(this,this.controller),this.targetObserver=new I(this,this),this.outletObserver=new _(this,this);try{this.controller.initialize(),this.logDebugActivity("initialize")}catch(e){this.handleError(e,"initializing controller")}}connect(){this.bindingObserver.start(),this.valueObserver.start(),this.targetObserver.start(),this.outletObserver.start();try{this.controller.connect(),this.logDebugActivity("connect")}catch(e){this.handleError(e,"connecting controller")}}refresh(){this.outletObserver.refresh()}disconnect(){try{this.controller.disconnect(),this.logDebugActivity("disconnect")}catch(e){this.handleError(e,"disconnecting controller")}this.outletObserver.stop(),this.targetObserver.stop(),this.valueObserver.stop(),this.bindingObserver.stop()}get application(){return this.module.application}get identifier(){return this.module.identifier}get schema(){return this.application.schema}get dispatcher(){return this.application.dispatcher}get element(){return this.scope.element}get parentElement(){return this.element.parentElement}handleError(e,t,n={}){const{identifier:r,controller:i,element:a}=this;n=Object.assign({identifier:r,controller:i,element:a},n),this.application.handleError(e,`Error ${t}`,n)}targetConnected(e,t){this.invokeControllerMethod(`${t}TargetConnected`,e)}targetDisconnected(e,t){this.invokeControllerMethod(`${t}TargetDisconnected`,e)}outletConnected(e,t,n){this.invokeControllerMethod(`${l(n)}OutletConnected`,e,t)}outletDisconnected(e,t,n){this.invokeControllerMethod(`${l(n)}OutletDisconnected`,e,t)}invokeControllerMethod(e,...t){const n=this.controller;"function"==typeof n[e]&&n[e](...t)}}const V="function"==typeof Object.getOwnPropertySymbols?e=>[...Object.getOwnPropertyNames(e),...Object.getOwnPropertySymbols(e)]:Object.getOwnPropertyNames,$=(()=>{function e(e){function t(){return Reflect.construct(e,arguments,new.target)}return t.prototype=Object.create(e.prototype,{constructor:{value:t}}),Reflect.setPrototypeOf(t,e),t}try{return function(){const t=e((function(){this.a.call(this)}));t.prototype.a=function(){},new t}(),e}catch(e){return e=>class extends e{}}})();class U{constructor(e,t){this.application=e,this.definition=function(e){return{identifier:e.identifier,controllerConstructor:(t=e.controllerConstructor,function(e,t){const n=$(e),r=function(e,t){return V(t).reduce(((n,r)=>{const i=function(e,t,n){const r=Object.getOwnPropertyDescriptor(e,n);if(!r||!("value"in r)){const e=Object.getOwnPropertyDescriptor(t,n).value;return r&&(e.get=r.get||e.get,e.set=r.set||e.set),e}}(e,t,r);return i&&Object.assign(n,{[r]:i}),n}),{})}(e.prototype,t);return Object.defineProperties(n.prototype,r),n}(t,function(e){return F(e,"blessings").reduce(((t,n)=>{const r=n(e);for(const e in r){const n=t[e]||{};t[e]=Object.assign(n,r[e])}return t}),{})}(t)))};var t}(t),this.contextsByScope=new WeakMap,this.connectedContexts=new Set}get identifier(){return this.definition.identifier}get controllerConstructor(){return this.definition.controllerConstructor}get contexts(){return Array.from(this.connectedContexts)}connectContextForScope(e){const t=this.fetchContextForScope(e);this.connectedContexts.add(t),t.connect()}disconnectContextForScope(e){const t=this.contextsByScope.get(e);t&&(this.connectedContexts.delete(t),t.disconnect())}fetchContextForScope(e){let t=this.contextsByScope.get(e);return t||(t=new L(this,e),this.contextsByScope.set(e,t)),t}}class R{constructor(e){this.scope=e}has(e){return this.data.has(this.getDataKey(e))}get(e){return this.getAll(e)[0]}getAll(e){return(this.data.get(this.getDataKey(e))||"").match(/[^\s]+/g)||[]}getAttributeName(e){return this.data.getAttributeNameForKey(this.getDataKey(e))}getDataKey(e){return`${e}-class`}get data(){return this.scope.data}}class z{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get(e){const t=this.getAttributeNameForKey(e);return this.element.getAttribute(t)}set(e,t){const n=this.getAttributeNameForKey(e);return this.element.setAttribute(n,t),this.get(e)}has(e){const t=this.getAttributeNameForKey(e);return this.element.hasAttribute(t)}delete(e){if(this.has(e)){const t=this.getAttributeNameForKey(e);return this.element.removeAttribute(t),!0}return!1}getAttributeNameForKey(e){return`data-${this.identifier}-${u(e)}`}}class W{constructor(e){this.warnedKeysByObject=new WeakMap,this.logger=e}warn(e,t,n){let r=this.warnedKeysByObject.get(e);r||(r=new Set,this.warnedKeysByObject.set(e,r)),r.has(t)||(r.add(t),this.logger.warn(n,e))}}function P(e,t){return`[${e}~="${t}"]`}class q{constructor(e){this.scope=e}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce(((e,t)=>e||this.findTarget(t)||this.findLegacyTarget(t)),void 0)}findAll(...e){return e.reduce(((e,t)=>[...e,...this.findAllTargets(t),...this.findAllLegacyTargets(t)]),[])}findTarget(e){const t=this.getSelectorForTargetName(e);return this.scope.findElement(t)}findAllTargets(e){const t=this.getSelectorForTargetName(e);return this.scope.findAllElements(t)}getSelectorForTargetName(e){return P(this.schema.targetAttributeForScope(this.identifier),e)}findLegacyTarget(e){const t=this.getLegacySelectorForTargetName(e);return this.deprecate(this.scope.findElement(t),e)}findAllLegacyTargets(e){const t=this.getLegacySelectorForTargetName(e);return this.scope.findAllElements(t).map((t=>this.deprecate(t,e)))}getLegacySelectorForTargetName(e){const t=`${this.identifier}.${e}`;return P(this.schema.targetAttribute,t)}deprecate(e,t){if(e){const{identifier:n}=this,r=this.schema.targetAttribute,i=this.schema.targetAttributeForScope(n);this.guide.warn(e,`target:${t}`,`Please replace ${r}="${n}.${t}" with ${i}="${t}". The ${r} attribute is deprecated and will be removed in a future version of Stimulus.`)}return e}get guide(){return this.scope.guide}}class Y{constructor(e,t){this.scope=e,this.controllerElement=t}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get schema(){return this.scope.schema}has(e){return null!=this.find(e)}find(...e){return e.reduce(((e,t)=>e||this.findOutlet(t)),void 0)}findAll(...e){return e.reduce(((e,t)=>[...e,...this.findAllOutlets(t)]),[])}getSelectorForOutletName(e){const t=this.schema.outletAttributeForScope(this.identifier,e);return this.controllerElement.getAttribute(t)}findOutlet(e){const t=this.getSelectorForOutletName(e);if(t)return this.findElement(t,e)}findAllOutlets(e){const t=this.getSelectorForOutletName(e);return t?this.findAllElements(t,e):[]}findElement(e,t){return this.scope.queryElements(e).filter((n=>this.matchesElement(n,e,t)))[0]}findAllElements(e,t){return this.scope.queryElements(e).filter((n=>this.matchesElement(n,e,t)))}matchesElement(e,t,n){const r=e.getAttribute(this.scope.schema.controllerAttribute)||"";return e.matches(t)&&r.split(" ").includes(n)}}class H{constructor(e,t,n,r){this.targets=new q(this),this.classes=new R(this),this.data=new z(this),this.containsElement=e=>e.closest(this.controllerSelector)===this.element,this.schema=e,this.element=t,this.identifier=n,this.guide=new W(r),this.outlets=new Y(this.documentScope,t)}findElement(e){return this.element.matches(e)?this.element:this.queryElements(e).find(this.containsElement)}findAllElements(e){return[...this.element.matches(e)?[this.element]:[],...this.queryElements(e).filter(this.containsElement)]}queryElements(e){return Array.from(this.element.querySelectorAll(e))}get controllerSelector(){return P(this.schema.controllerAttribute,this.identifier)}get isDocumentScope(){return this.element===document.documentElement}get documentScope(){return this.isDocumentScope?this:new H(this.schema,document.documentElement,this.identifier,this.guide.logger)}}class Z{constructor(e,t,n){this.element=e,this.schema=t,this.delegate=n,this.valueListObserver=new T(this.element,this.controllerAttribute,this),this.scopesByIdentifierByElement=new WeakMap,this.scopeReferenceCounts=new WeakMap}start(){this.valueListObserver.start()}stop(){this.valueListObserver.stop()}get controllerAttribute(){return this.schema.controllerAttribute}parseValueForToken(e){const{element:t,content:n}=e;return this.parseValueForElementAndIdentifier(t,n)}parseValueForElementAndIdentifier(e,t){const n=this.fetchScopesByIdentifierForElement(e);let r=n.get(t);return r||(r=this.delegate.createScopeForElementAndIdentifier(e,t),n.set(t,r)),r}elementMatchedValue(e,t){const n=(this.scopeReferenceCounts.get(t)||0)+1;this.scopeReferenceCounts.set(t,n),1==n&&this.delegate.scopeConnected(t)}elementUnmatchedValue(e,t){const n=this.scopeReferenceCounts.get(t);n&&(this.scopeReferenceCounts.set(t,n-1),1==n&&this.delegate.scopeDisconnected(t))}fetchScopesByIdentifierForElement(e){let t=this.scopesByIdentifierByElement.get(e);return t||(t=new Map,this.scopesByIdentifierByElement.set(e,t)),t}}class K{constructor(e){this.application=e,this.scopeObserver=new Z(this.element,this.schema,this),this.scopesByIdentifier=new B,this.modulesByIdentifier=new Map}get element(){return this.application.element}get schema(){return this.application.schema}get logger(){return this.application.logger}get controllerAttribute(){return this.schema.controllerAttribute}get modules(){return Array.from(this.modulesByIdentifier.values())}get contexts(){return this.modules.reduce(((e,t)=>e.concat(t.contexts)),[])}start(){this.scopeObserver.start()}stop(){this.scopeObserver.stop()}loadDefinition(e){this.unloadIdentifier(e.identifier);const t=new U(this.application,e);this.connectModule(t);const n=e.controllerConstructor.afterLoad;n&&n.call(e.controllerConstructor,e.identifier,this.application)}unloadIdentifier(e){const t=this.modulesByIdentifier.get(e);t&&this.disconnectModule(t)}getContextForElementAndIdentifier(e,t){const n=this.modulesByIdentifier.get(t);if(n)return n.contexts.find((t=>t.element==e))}proposeToConnectScopeForElementAndIdentifier(e,t){const n=this.scopeObserver.parseValueForElementAndIdentifier(e,t);n?this.scopeObserver.elementMatchedValue(n.element,n):console.error(`Couldn't find or create scope for identifier: "${t}" and element:`,e)}handleError(e,t,n){this.application.handleError(e,t,n)}createScopeForElementAndIdentifier(e,t){return new H(this.schema,e,t,this.logger)}scopeConnected(e){this.scopesByIdentifier.add(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.connectContextForScope(e)}scopeDisconnected(e){this.scopesByIdentifier.delete(e.identifier,e);const t=this.modulesByIdentifier.get(e.identifier);t&&t.disconnectContextForScope(e)}connectModule(e){this.modulesByIdentifier.set(e.identifier,e),this.scopesByIdentifier.getValuesForKey(e.identifier).forEach((t=>e.connectContextForScope(t)))}disconnectModule(e){this.modulesByIdentifier.delete(e.identifier),this.scopesByIdentifier.getValuesForKey(e.identifier).forEach((t=>e.disconnectContextForScope(t)))}}const G={controllerAttribute:"data-controller",actionAttribute:"data-action",targetAttribute:"data-target",targetAttributeForScope:e=>`data-${e}-target`,outletAttributeForScope:(e,t)=>`data-${e}-${t}-outlet`,keyMappings:Object.assign(Object.assign({enter:"Enter",tab:"Tab",esc:"Escape",space:" ",up:"ArrowUp",down:"ArrowDown",left:"ArrowLeft",right:"ArrowRight",home:"Home",end:"End",page_up:"PageUp",page_down:"PageDown"},J("abcdefghijklmnopqrstuvwxyz".split("").map((e=>[e,e])))),J("0123456789".split("").map((e=>[e,e]))))};function J(e){return e.reduce(((e,[t,n])=>Object.assign(Object.assign({},e),{[t]:n})),{})}class Q{constructor(e=document.documentElement,t=G){this.logger=console,this.debug=!1,this.logDebugActivity=(e,t,n={})=>{this.debug&&this.logFormattedMessage(e,t,n)},this.element=e,this.schema=t,this.dispatcher=new i(this),this.router=new K(this),this.actionDescriptorFilters=Object.assign({},a)}static start(e,t){const n=new this(e,t);return n.start(),n}async start(){await new Promise((e=>{"loading"==document.readyState?document.addEventListener("DOMContentLoaded",(()=>e())):e()})),this.logDebugActivity("application","starting"),this.dispatcher.start(),this.router.start(),this.logDebugActivity("application","start")}stop(){this.logDebugActivity("application","stopping"),this.dispatcher.stop(),this.router.stop(),this.logDebugActivity("application","stop")}register(e,t){this.load({identifier:e,controllerConstructor:t})}registerActionOption(e,t){this.actionDescriptorFilters[e]=t}load(e,...t){(Array.isArray(e)?e:[e,...t]).forEach((e=>{e.controllerConstructor.shouldLoad&&this.router.loadDefinition(e)}))}unload(e,...t){(Array.isArray(e)?e:[e,...t]).forEach((e=>this.router.unloadIdentifier(e)))}get controllers(){return this.router.contexts.map((e=>e.controller))}getControllerForElementAndIdentifier(e,t){const n=this.router.getContextForElementAndIdentifier(e,t);return n?n.controller:null}handleError(e,t,n){var r;this.logger.error("%s\n\n%o\n\n%o",t,e,n),null===(r=window.onerror)||void 0===r||r.call(window,t,"",0,0,e)}logFormattedMessage(e,t,n={}){n=Object.assign({application:this},n),this.logger.groupCollapsed(`${e} #${t}`),this.logger.log("details:",Object.assign({},n)),this.logger.groupEnd()}}function X(e,t,n){return e.application.getControllerForElementAndIdentifier(t,n)}function ee(e,t,n){let r=X(e,t,n);return r||(e.application.router.proposeToConnectScopeForElementAndIdentifier(t,n),r=X(e,t,n),r||void 0)}function te([e,t],n){return function(e){const{token:t,typeDefinition:n}=e,r=`${u(t)}-value`,i=function(e){const{controller:t,token:n,typeDefinition:r}=e,i=function(e){const{controller:t,token:n,typeObject:r}=e,i=d(r.type),a=d(r.default),o=i&&a,s=i&&!a,l=!i&&a,c=ne(r.type),u=re(e.typeObject.default);if(s)return c;if(l)return u;if(c!==u)throw new Error(`The specified default value for the Stimulus Value "${t?`${t}.${n}`:n}" must match the defined type "${c}". The provided default value of "${r.default}" is of type "${u}".`);return o?c:void 0}({controller:t,token:n,typeObject:r}),a=re(r),o=ne(r),s=i||a||o;if(s)return s;throw new Error(`Unknown value type "${t?`${t}.${r}`:n}" for "${n}" value`)}(e);return{type:i,key:r,name:s(r),get defaultValue(){return function(e){const t=ne(e);if(t)return ie[t];const n=h(e,"default"),r=h(e,"type"),i=e;if(n)return i.default;if(r){const{type:e}=i,t=ne(e);if(t)return ie[t]}return e}(n)},get hasCustomDefaultValue(){return void 0!==re(n)},reader:ae[i],writer:oe[i]||oe.default}}({controller:n,token:e,typeDefinition:t})}function ne(e){switch(e){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function re(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}return Array.isArray(e)?"array":"[object Object]"===Object.prototype.toString.call(e)?"object":void 0}const ie={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},ae={array(e){const t=JSON.parse(e);if(!Array.isArray(t))throw new TypeError(`expected value of type "array" but instead got value "${e}" of type "${re(t)}"`);return t},boolean:e=>!("0"==e||"false"==String(e).toLowerCase()),number:e=>Number(e.replace(/_/g,"")),object(e){const t=JSON.parse(e);if(null===t||"object"!=typeof t||Array.isArray(t))throw new TypeError(`expected value of type "object" but instead got value "${e}" of type "${re(t)}"`);return t},string:e=>e},oe={default:function(e){return`${e}`},array:se,object:se};function se(e){return JSON.stringify(e)}class le{constructor(e){this.context=e}static get shouldLoad(){return!0}static afterLoad(e,t){}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get outlets(){return this.scope.outlets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(e,{target:t=this.element,detail:n={},prefix:r=this.identifier,bubbles:i=!0,cancelable:a=!0}={}){const o=new CustomEvent(r?`${r}:${e}`:e,{detail:n,bubbles:i,cancelable:a});return t.dispatchEvent(o),o}}le.blessings=[function(e){return F(e,"classes").reduce(((e,t)=>{return Object.assign(e,{[`${n=t}Class`]:{get(){const{classes:e}=this;if(e.has(n))return e.get(n);{const t=e.getAttributeName(n);throw new Error(`Missing attribute "${t}"`)}}},[`${n}Classes`]:{get(){return this.classes.getAll(n)}},[`has${c(n)}Class`]:{get(){return this.classes.has(n)}}});var n}),{})},function(e){return F(e,"targets").reduce(((e,t)=>{return Object.assign(e,{[`${n=t}Target`]:{get(){const e=this.targets.find(n);if(e)return e;throw new Error(`Missing target element "${n}" for "${this.identifier}" controller`)}},[`${n}Targets`]:{get(){return this.targets.findAll(n)}},[`has${c(n)}Target`]:{get(){return this.targets.has(n)}}});var n}),{})},function(e){const t=function(e,t){return j(e).reduce(((e,n)=>(e.push(...function(e,t){const n=e[t];return n?Object.keys(n).map((e=>[e,n[e]])):[]}(n,t)),e)),[])}(e,"values"),n={valueDescriptorMap:{get(){return t.reduce(((e,t)=>{const n=te(t,this.identifier),r=this.data.getAttributeNameForKey(n.key);return Object.assign(e,{[r]:n})}),{})}}};return t.reduce(((e,t)=>Object.assign(e,function(e,t){const n=te(e,void 0),{key:r,name:i,reader:a,writer:o}=n;return{[i]:{get(){const e=this.data.get(r);return null!==e?a(e):n.defaultValue},set(e){void 0===e?this.data.delete(r):this.data.set(r,o(e))}},[`has${c(i)}`]:{get(){return this.data.has(r)||n.hasCustomDefaultValue}}}}(t))),n)},function(e){return F(e,"outlets").reduce(((e,t)=>Object.assign(e,function(e){const t=l(e);return{[`${t}Outlet`]:{get(){const t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t){const n=ee(this,t,e);if(n)return n;throw new Error(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`)}throw new Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}Outlets`]:{get(){const t=this.outlets.findAll(e);return t.length>0?t.map((t=>{const n=ee(this,t,e);if(n)return n;console.warn(`The provided outlet element is missing an outlet controller "${e}" instance for host controller "${this.identifier}"`,t)})).filter((e=>e)):[]}},[`${t}OutletElement`]:{get(){const t=this.outlets.find(e),n=this.outlets.getSelectorForOutletName(e);if(t)return t;throw new Error(`Missing outlet element "${e}" for host controller "${this.identifier}". Stimulus couldn't find a matching outlet element using selector "${n}".`)}},[`${t}OutletElements`]:{get(){return this.outlets.findAll(e)}},[`has${c(t)}Outlet`]:{get(){return this.outlets.has(e)}}}}(t))),{})}],le.targets=[],le.outlets=[],le.values={}},832:(e,t,n)=>{n.d(t,{c:()=>s});var r=n(648),i=n.n(r),a=n(312),o=n.n(a)()(i());o.push([e.id,'.flatpickr-calendar {\n background: transparent;\n opacity: 0;\n display: none;\n text-align: center;\n visibility: hidden;\n padding: 0;\n -webkit-animation: none;\n animation: none;\n direction: ltr;\n border: 0;\n font-size: 14px;\n line-height: 24px;\n border-radius: 5px;\n position: absolute;\n width: 307.875px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n background: #fff;\n -webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);\n box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);\n}\n.flatpickr-calendar.open,\n.flatpickr-calendar.inline {\n opacity: 1;\n max-height: 640px;\n visibility: visible;\n}\n.flatpickr-calendar.open {\n display: inline-block;\n z-index: 99999;\n}\n.flatpickr-calendar.animate.open {\n -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\n animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\n}\n.flatpickr-calendar.inline {\n display: block;\n position: relative;\n top: 2px;\n}\n.flatpickr-calendar.static {\n position: absolute;\n top: calc(100% + 2px);\n}\n.flatpickr-calendar.static.open {\n z-index: 999;\n display: block;\n}\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) {\n -webkit-box-shadow: none !important;\n box-shadow: none !important;\n}\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) {\n -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n}\n.flatpickr-calendar .hasWeeks .dayContainer,\n.flatpickr-calendar .hasTime .dayContainer {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.flatpickr-calendar .hasWeeks .dayContainer {\n border-left: 0;\n}\n.flatpickr-calendar.hasTime .flatpickr-time {\n height: 40px;\n border-top: 1px solid #e6e6e6;\n}\n.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {\n height: auto;\n}\n.flatpickr-calendar:before,\n.flatpickr-calendar:after {\n position: absolute;\n display: block;\n pointer-events: none;\n border: solid transparent;\n content: \'\';\n height: 0;\n width: 0;\n left: 22px;\n}\n.flatpickr-calendar.rightMost:before,\n.flatpickr-calendar.arrowRight:before,\n.flatpickr-calendar.rightMost:after,\n.flatpickr-calendar.arrowRight:after {\n left: auto;\n right: 22px;\n}\n.flatpickr-calendar.arrowCenter:before,\n.flatpickr-calendar.arrowCenter:after {\n left: 50%;\n right: 50%;\n}\n.flatpickr-calendar:before {\n border-width: 5px;\n margin: 0 -5px;\n}\n.flatpickr-calendar:after {\n border-width: 4px;\n margin: 0 -4px;\n}\n.flatpickr-calendar.arrowTop:before,\n.flatpickr-calendar.arrowTop:after {\n bottom: 100%;\n}\n.flatpickr-calendar.arrowTop:before {\n border-bottom-color: #e6e6e6;\n}\n.flatpickr-calendar.arrowTop:after {\n border-bottom-color: #fff;\n}\n.flatpickr-calendar.arrowBottom:before,\n.flatpickr-calendar.arrowBottom:after {\n top: 100%;\n}\n.flatpickr-calendar.arrowBottom:before {\n border-top-color: #e6e6e6;\n}\n.flatpickr-calendar.arrowBottom:after {\n border-top-color: #fff;\n}\n.flatpickr-calendar:focus {\n outline: 0;\n}\n.flatpickr-wrapper {\n position: relative;\n display: inline-block;\n}\n.flatpickr-months {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n}\n.flatpickr-months .flatpickr-month {\n background: transparent;\n color: rgba(0,0,0,0.9);\n fill: rgba(0,0,0,0.9);\n height: 34px;\n line-height: 1;\n text-align: center;\n position: relative;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n overflow: hidden;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n.flatpickr-months .flatpickr-prev-month,\n.flatpickr-months .flatpickr-next-month {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n text-decoration: none;\n cursor: pointer;\n position: absolute;\n top: 0;\n height: 34px;\n padding: 10px;\n z-index: 3;\n color: rgba(0,0,0,0.9);\n fill: rgba(0,0,0,0.9);\n}\n.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,\n.flatpickr-months .flatpickr-next-month.flatpickr-disabled {\n display: none;\n}\n.flatpickr-months .flatpickr-prev-month i,\n.flatpickr-months .flatpickr-next-month i {\n position: relative;\n}\n.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,\n.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {\n/*\n /*rtl:begin:ignore*/\n/*\n */\n left: 0;\n/*\n /*rtl:end:ignore*/\n/*\n */\n}\n/*\n /*rtl:begin:ignore*/\n/*\n /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,\n.flatpickr-months .flatpickr-next-month.flatpickr-next-month {\n/*\n /*rtl:begin:ignore*/\n/*\n */\n right: 0;\n/*\n /*rtl:end:ignore*/\n/*\n */\n}\n/*\n /*rtl:begin:ignore*/\n/*\n /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month:hover,\n.flatpickr-months .flatpickr-next-month:hover {\n color: #959ea9;\n}\n.flatpickr-months .flatpickr-prev-month:hover svg,\n.flatpickr-months .flatpickr-next-month:hover svg {\n fill: #f64747;\n}\n.flatpickr-months .flatpickr-prev-month svg,\n.flatpickr-months .flatpickr-next-month svg {\n width: 14px;\n height: 14px;\n}\n.flatpickr-months .flatpickr-prev-month svg path,\n.flatpickr-months .flatpickr-next-month svg path {\n -webkit-transition: fill 0.1s;\n transition: fill 0.1s;\n fill: inherit;\n}\n.numInputWrapper {\n position: relative;\n height: auto;\n}\n.numInputWrapper input,\n.numInputWrapper span {\n display: inline-block;\n}\n.numInputWrapper input {\n width: 100%;\n}\n.numInputWrapper input::-ms-clear {\n display: none;\n}\n.numInputWrapper input::-webkit-outer-spin-button,\n.numInputWrapper input::-webkit-inner-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n.numInputWrapper span {\n position: absolute;\n right: 0;\n width: 14px;\n padding: 0 4px 0 2px;\n height: 50%;\n line-height: 50%;\n opacity: 0;\n cursor: pointer;\n border: 1px solid rgba(57,57,57,0.15);\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.numInputWrapper span:hover {\n background: rgba(0,0,0,0.1);\n}\n.numInputWrapper span:active {\n background: rgba(0,0,0,0.2);\n}\n.numInputWrapper span:after {\n display: block;\n content: "";\n position: absolute;\n}\n.numInputWrapper span.arrowUp {\n top: 0;\n border-bottom: 0;\n}\n.numInputWrapper span.arrowUp:after {\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-bottom: 4px solid rgba(57,57,57,0.6);\n top: 26%;\n}\n.numInputWrapper span.arrowDown {\n top: 50%;\n}\n.numInputWrapper span.arrowDown:after {\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-top: 4px solid rgba(57,57,57,0.6);\n top: 40%;\n}\n.numInputWrapper span svg {\n width: inherit;\n height: auto;\n}\n.numInputWrapper span svg path {\n fill: rgba(0,0,0,0.5);\n}\n.numInputWrapper:hover {\n background: rgba(0,0,0,0.05);\n}\n.numInputWrapper:hover span {\n opacity: 1;\n}\n.flatpickr-current-month {\n font-size: 135%;\n line-height: inherit;\n font-weight: 300;\n color: inherit;\n position: absolute;\n width: 75%;\n left: 12.5%;\n padding: 7.48px 0 0 0;\n line-height: 1;\n height: 34px;\n display: inline-block;\n text-align: center;\n -webkit-transform: translate3d(0px, 0px, 0px);\n transform: translate3d(0px, 0px, 0px);\n}\n.flatpickr-current-month span.cur-month {\n font-family: inherit;\n font-weight: 700;\n color: inherit;\n display: inline-block;\n margin-left: 0.5ch;\n padding: 0;\n}\n.flatpickr-current-month span.cur-month:hover {\n background: rgba(0,0,0,0.05);\n}\n.flatpickr-current-month .numInputWrapper {\n width: 6ch;\n width: 7ch\\0;\n display: inline-block;\n}\n.flatpickr-current-month .numInputWrapper span.arrowUp:after {\n border-bottom-color: rgba(0,0,0,0.9);\n}\n.flatpickr-current-month .numInputWrapper span.arrowDown:after {\n border-top-color: rgba(0,0,0,0.9);\n}\n.flatpickr-current-month input.cur-year {\n background: transparent;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: inherit;\n cursor: text;\n padding: 0 0 0 0.5ch;\n margin: 0;\n display: inline-block;\n font-size: inherit;\n font-family: inherit;\n font-weight: 300;\n line-height: inherit;\n height: auto;\n border: 0;\n border-radius: 0;\n vertical-align: initial;\n -webkit-appearance: textfield;\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.flatpickr-current-month input.cur-year:focus {\n outline: 0;\n}\n.flatpickr-current-month input.cur-year[disabled],\n.flatpickr-current-month input.cur-year[disabled]:hover {\n font-size: 100%;\n color: rgba(0,0,0,0.5);\n background: transparent;\n pointer-events: none;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months {\n appearance: menulist;\n background: transparent;\n border: none;\n border-radius: 0;\n box-sizing: border-box;\n color: inherit;\n cursor: pointer;\n font-size: inherit;\n font-family: inherit;\n font-weight: 300;\n height: auto;\n line-height: inherit;\n margin: -1px 0 0 0;\n outline: none;\n padding: 0 0 0 0.5ch;\n position: relative;\n vertical-align: initial;\n -webkit-box-sizing: border-box;\n -webkit-appearance: menulist;\n -moz-appearance: menulist;\n width: auto;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months:focus,\n.flatpickr-current-month .flatpickr-monthDropdown-months:active {\n outline: none;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months:hover {\n background: rgba(0,0,0,0.05);\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {\n background-color: transparent;\n outline: none;\n padding: 0;\n}\n.flatpickr-weekdays {\n background: transparent;\n text-align: center;\n overflow: hidden;\n width: 100%;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -webkit-align-items: center;\n -ms-flex-align: center;\n align-items: center;\n height: 28px;\n}\n.flatpickr-weekdays .flatpickr-weekdaycontainer {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\nspan.flatpickr-weekday {\n cursor: default;\n font-size: 90%;\n background: transparent;\n color: rgba(0,0,0,0.54);\n line-height: 1;\n margin: 0;\n text-align: center;\n display: block;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n font-weight: bolder;\n}\n.dayContainer,\n.flatpickr-weeks {\n padding: 1px 0 0 0;\n}\n.flatpickr-days {\n position: relative;\n overflow: hidden;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: start;\n -webkit-align-items: flex-start;\n -ms-flex-align: start;\n align-items: flex-start;\n width: 307.875px;\n}\n.flatpickr-days:focus {\n outline: 0;\n}\n.dayContainer {\n padding: 0;\n outline: 0;\n text-align: left;\n width: 307.875px;\n min-width: 307.875px;\n max-width: 307.875px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n display: -ms-flexbox;\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n -ms-flex-pack: justify;\n -webkit-justify-content: space-around;\n justify-content: space-around;\n -webkit-transform: translate3d(0px, 0px, 0px);\n transform: translate3d(0px, 0px, 0px);\n opacity: 1;\n}\n.dayContainer + .dayContainer {\n -webkit-box-shadow: -1px 0 0 #e6e6e6;\n box-shadow: -1px 0 0 #e6e6e6;\n}\n.flatpickr-day {\n background: none;\n border: 1px solid transparent;\n border-radius: 150px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #393939;\n cursor: pointer;\n font-weight: 400;\n width: 14.2857143%;\n -webkit-flex-basis: 14.2857143%;\n -ms-flex-preferred-size: 14.2857143%;\n flex-basis: 14.2857143%;\n max-width: 39px;\n height: 39px;\n line-height: 39px;\n margin: 0;\n display: inline-block;\n position: relative;\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n -ms-flex-pack: center;\n justify-content: center;\n text-align: center;\n}\n.flatpickr-day.inRange,\n.flatpickr-day.prevMonthDay.inRange,\n.flatpickr-day.nextMonthDay.inRange,\n.flatpickr-day.today.inRange,\n.flatpickr-day.prevMonthDay.today.inRange,\n.flatpickr-day.nextMonthDay.today.inRange,\n.flatpickr-day:hover,\n.flatpickr-day.prevMonthDay:hover,\n.flatpickr-day.nextMonthDay:hover,\n.flatpickr-day:focus,\n.flatpickr-day.prevMonthDay:focus,\n.flatpickr-day.nextMonthDay:focus {\n cursor: pointer;\n outline: 0;\n background: #e6e6e6;\n border-color: #e6e6e6;\n}\n.flatpickr-day.today {\n border-color: #959ea9;\n}\n.flatpickr-day.today:hover,\n.flatpickr-day.today:focus {\n border-color: #959ea9;\n background: #959ea9;\n color: #fff;\n}\n.flatpickr-day.selected,\n.flatpickr-day.startRange,\n.flatpickr-day.endRange,\n.flatpickr-day.selected.inRange,\n.flatpickr-day.startRange.inRange,\n.flatpickr-day.endRange.inRange,\n.flatpickr-day.selected:focus,\n.flatpickr-day.startRange:focus,\n.flatpickr-day.endRange:focus,\n.flatpickr-day.selected:hover,\n.flatpickr-day.startRange:hover,\n.flatpickr-day.endRange:hover,\n.flatpickr-day.selected.prevMonthDay,\n.flatpickr-day.startRange.prevMonthDay,\n.flatpickr-day.endRange.prevMonthDay,\n.flatpickr-day.selected.nextMonthDay,\n.flatpickr-day.startRange.nextMonthDay,\n.flatpickr-day.endRange.nextMonthDay {\n background: #569ff7;\n -webkit-box-shadow: none;\n box-shadow: none;\n color: #fff;\n border-color: #569ff7;\n}\n.flatpickr-day.selected.startRange,\n.flatpickr-day.startRange.startRange,\n.flatpickr-day.endRange.startRange {\n border-radius: 50px 0 0 50px;\n}\n.flatpickr-day.selected.endRange,\n.flatpickr-day.startRange.endRange,\n.flatpickr-day.endRange.endRange {\n border-radius: 0 50px 50px 0;\n}\n.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),\n.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),\n.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {\n -webkit-box-shadow: -10px 0 0 #569ff7;\n box-shadow: -10px 0 0 #569ff7;\n}\n.flatpickr-day.selected.startRange.endRange,\n.flatpickr-day.startRange.startRange.endRange,\n.flatpickr-day.endRange.startRange.endRange {\n border-radius: 50px;\n}\n.flatpickr-day.inRange {\n border-radius: 0;\n -webkit-box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n}\n.flatpickr-day.flatpickr-disabled,\n.flatpickr-day.flatpickr-disabled:hover,\n.flatpickr-day.prevMonthDay,\n.flatpickr-day.nextMonthDay,\n.flatpickr-day.notAllowed,\n.flatpickr-day.notAllowed.prevMonthDay,\n.flatpickr-day.notAllowed.nextMonthDay {\n color: rgba(57,57,57,0.3);\n background: transparent;\n border-color: transparent;\n cursor: default;\n}\n.flatpickr-day.flatpickr-disabled,\n.flatpickr-day.flatpickr-disabled:hover {\n cursor: not-allowed;\n color: rgba(57,57,57,0.1);\n}\n.flatpickr-day.week.selected {\n border-radius: 0;\n -webkit-box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;\n box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;\n}\n.flatpickr-day.hidden {\n visibility: hidden;\n}\n.rangeMode .flatpickr-day {\n margin-top: 1px;\n}\n.flatpickr-weekwrapper {\n float: left;\n}\n.flatpickr-weekwrapper .flatpickr-weeks {\n padding: 0 12px;\n -webkit-box-shadow: 1px 0 0 #e6e6e6;\n box-shadow: 1px 0 0 #e6e6e6;\n}\n.flatpickr-weekwrapper .flatpickr-weekday {\n float: none;\n width: 100%;\n line-height: 28px;\n}\n.flatpickr-weekwrapper span.flatpickr-day,\n.flatpickr-weekwrapper span.flatpickr-day:hover {\n display: block;\n width: 100%;\n max-width: none;\n color: rgba(57,57,57,0.3);\n background: transparent;\n cursor: default;\n border: none;\n}\n.flatpickr-innerContainer {\n display: block;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n}\n.flatpickr-rContainer {\n display: inline-block;\n padding: 0;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.flatpickr-time {\n text-align: center;\n outline: 0;\n display: block;\n height: 0;\n line-height: 40px;\n max-height: 40px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n}\n.flatpickr-time:after {\n content: "";\n display: table;\n clear: both;\n}\n.flatpickr-time .numInputWrapper {\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n width: 40%;\n height: 40px;\n float: left;\n}\n.flatpickr-time .numInputWrapper span.arrowUp:after {\n border-bottom-color: #393939;\n}\n.flatpickr-time .numInputWrapper span.arrowDown:after {\n border-top-color: #393939;\n}\n.flatpickr-time.hasSeconds .numInputWrapper {\n width: 26%;\n}\n.flatpickr-time.time24hr .numInputWrapper {\n width: 49%;\n}\n.flatpickr-time input {\n background: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n border: 0;\n border-radius: 0;\n text-align: center;\n margin: 0;\n padding: 0;\n height: inherit;\n line-height: inherit;\n color: #393939;\n font-size: 14px;\n position: relative;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-appearance: textfield;\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.flatpickr-time input.flatpickr-hour {\n font-weight: bold;\n}\n.flatpickr-time input.flatpickr-minute,\n.flatpickr-time input.flatpickr-second {\n font-weight: 400;\n}\n.flatpickr-time input:focus {\n outline: 0;\n border: 0;\n}\n.flatpickr-time .flatpickr-time-separator,\n.flatpickr-time .flatpickr-am-pm {\n height: inherit;\n float: left;\n line-height: inherit;\n color: #393939;\n font-weight: bold;\n width: 2%;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-align-self: center;\n -ms-flex-item-align: center;\n align-self: center;\n}\n.flatpickr-time .flatpickr-am-pm {\n outline: 0;\n width: 18%;\n cursor: pointer;\n text-align: center;\n font-weight: 400;\n}\n.flatpickr-time input:hover,\n.flatpickr-time .flatpickr-am-pm:hover,\n.flatpickr-time input:focus,\n.flatpickr-time .flatpickr-am-pm:focus {\n background: #eee;\n}\n.flatpickr-input[readonly] {\n cursor: pointer;\n}\n@-webkit-keyframes fpFadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 1;\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes fpFadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 1;\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n',"",{version:3,sources:["webpack://./node_modules/flatpickr/dist/flatpickr.css"],names:[],mappings:"AAAA;EACE,uBAAuB;EACvB,UAAU;EACV,aAAa;EACb,kBAAkB;EAClB,kBAAkB;EAClB,UAAU;EACV,uBAAuB;UACf,eAAe;EACvB,cAAc;EACd,SAAS;EACT,eAAe;EACf,iBAAiB;EACjB,kBAAkB;EAClB,kBAAkB;EAClB,gBAAgB;EAChB,8BAA8B;UACtB,sBAAsB;EAC9B,8BAA8B;MAC1B,0BAA0B;EAC9B,gBAAgB;EAChB,qHAAqH;UAC7G,6GAA6G;AACvH;AACA;;EAEE,UAAU;EACV,iBAAiB;EACjB,mBAAmB;AACrB;AACA;EACE,qBAAqB;EACrB,cAAc;AAChB;AACA;EACE,oEAAoE;UAC5D,4DAA4D;AACtE;AACA;EACE,cAAc;EACd,kBAAkB;EAClB,QAAQ;AACV;AACA;EACE,kBAAkB;EAClB,qBAAqB;AACvB;AACA;EACE,YAAY;EACZ,cAAc;AAChB;AACA;EACE,mCAAmC;UAC3B,2BAA2B;AACrC;AACA;EACE,qDAAqD;UAC7C,6CAA6C;AACvD;AACA;;EAEE,gBAAgB;EAChB,6BAA6B;EAC7B,4BAA4B;AAC9B;AACA;EACE,cAAc;AAChB;AACA;EACE,YAAY;EACZ,6BAA6B;AAC/B;AACA;EACE,YAAY;AACd;AACA;;EAEE,kBAAkB;EAClB,cAAc;EACd,oBAAoB;EACpB,yBAAyB;EACzB,WAAW;EACX,SAAS;EACT,QAAQ;EACR,UAAU;AACZ;AACA;;;;EAIE,UAAU;EACV,WAAW;AACb;AACA;;EAEE,SAAS;EACT,UAAU;AACZ;AACA;EACE,iBAAiB;EACjB,cAAc;AAChB;AACA;EACE,iBAAiB;EACjB,cAAc;AAChB;AACA;;EAEE,YAAY;AACd;AACA;EACE,4BAA4B;AAC9B;AACA;EACE,yBAAyB;AAC3B;AACA;;EAEE,SAAS;AACX;AACA;EACE,yBAAyB;AAC3B;AACA;EACE,sBAAsB;AACxB;AACA;EACE,UAAU;AACZ;AACA;EACE,kBAAkB;EAClB,qBAAqB;AACvB;AACA;EACE,oBAAoB;EACpB,qBAAqB;EACrB,oBAAoB;EACpB,aAAa;AACf;AACA;EACE,uBAAuB;EACvB,sBAAsB;EACtB,qBAAqB;EACrB,YAAY;EACZ,cAAc;EACd,kBAAkB;EAClB,kBAAkB;EAClB,yBAAyB;KACtB,sBAAsB;MACrB,qBAAqB;UACjB,iBAAiB;EACzB,gBAAgB;EAChB,mBAAmB;EACnB,eAAe;MACX,WAAW;UACP,OAAO;AACjB;AACA;;EAEE,yBAAyB;KACtB,sBAAsB;MACrB,qBAAqB;UACjB,iBAAiB;EACzB,qBAAqB;EACrB,eAAe;EACf,kBAAkB;EAClB,MAAM;EACN,YAAY;EACZ,aAAa;EACb,UAAU;EACV,sBAAsB;EACtB,qBAAqB;AACvB;AACA;;EAEE,aAAa;AACf;AACA;;EAEE,kBAAkB;AACpB;AACA;;AAEA;yBACyB;AACzB;OACO;EACL,OAAO;AACT;uBACuB;AACvB;OACO;AACP;AACA;yBACyB;AACzB;uBACuB;AACvB;;AAEA;yBACyB;AACzB;OACO;EACL,QAAQ;AACV;uBACuB;AACvB;OACO;AACP;AACA;yBACyB;AACzB;uBACuB;AACvB;;EAEE,cAAc;AAChB;AACA;;EAEE,aAAa;AACf;AACA;;EAEE,WAAW;EACX,YAAY;AACd;AACA;;EAEE,6BAA6B;EAC7B,qBAAqB;EACrB,aAAa;AACf;AACA;EACE,kBAAkB;EAClB,YAAY;AACd;AACA;;EAEE,qBAAqB;AACvB;AACA;EACE,WAAW;AACb;AACA;EACE,aAAa;AACf;AACA;;EAEE,SAAS;EACT,wBAAwB;AAC1B;AACA;EACE,kBAAkB;EAClB,QAAQ;EACR,WAAW;EACX,oBAAoB;EACpB,WAAW;EACX,gBAAgB;EAChB,UAAU;EACV,eAAe;EACf,qCAAqC;EACrC,8BAA8B;UACtB,sBAAsB;AAChC;AACA;EACE,2BAA2B;AAC7B;AACA;EACE,2BAA2B;AAC7B;AACA;EACE,cAAc;EACd,WAAW;EACX,kBAAkB;AACpB;AACA;EACE,MAAM;EACN,gBAAgB;AAClB;AACA;EACE,kCAAkC;EAClC,mCAAmC;EACnC,2CAA2C;EAC3C,QAAQ;AACV;AACA;EACE,QAAQ;AACV;AACA;EACE,kCAAkC;EAClC,mCAAmC;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",sourcesContent:['.flatpickr-calendar {\n background: transparent;\n opacity: 0;\n display: none;\n text-align: center;\n visibility: hidden;\n padding: 0;\n -webkit-animation: none;\n animation: none;\n direction: ltr;\n border: 0;\n font-size: 14px;\n line-height: 24px;\n border-radius: 5px;\n position: absolute;\n width: 307.875px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n background: #fff;\n -webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);\n box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);\n}\n.flatpickr-calendar.open,\n.flatpickr-calendar.inline {\n opacity: 1;\n max-height: 640px;\n visibility: visible;\n}\n.flatpickr-calendar.open {\n display: inline-block;\n z-index: 99999;\n}\n.flatpickr-calendar.animate.open {\n -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\n animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);\n}\n.flatpickr-calendar.inline {\n display: block;\n position: relative;\n top: 2px;\n}\n.flatpickr-calendar.static {\n position: absolute;\n top: calc(100% + 2px);\n}\n.flatpickr-calendar.static.open {\n z-index: 999;\n display: block;\n}\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) {\n -webkit-box-shadow: none !important;\n box-shadow: none !important;\n}\n.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) {\n -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n}\n.flatpickr-calendar .hasWeeks .dayContainer,\n.flatpickr-calendar .hasTime .dayContainer {\n border-bottom: 0;\n border-bottom-right-radius: 0;\n border-bottom-left-radius: 0;\n}\n.flatpickr-calendar .hasWeeks .dayContainer {\n border-left: 0;\n}\n.flatpickr-calendar.hasTime .flatpickr-time {\n height: 40px;\n border-top: 1px solid #e6e6e6;\n}\n.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {\n height: auto;\n}\n.flatpickr-calendar:before,\n.flatpickr-calendar:after {\n position: absolute;\n display: block;\n pointer-events: none;\n border: solid transparent;\n content: \'\';\n height: 0;\n width: 0;\n left: 22px;\n}\n.flatpickr-calendar.rightMost:before,\n.flatpickr-calendar.arrowRight:before,\n.flatpickr-calendar.rightMost:after,\n.flatpickr-calendar.arrowRight:after {\n left: auto;\n right: 22px;\n}\n.flatpickr-calendar.arrowCenter:before,\n.flatpickr-calendar.arrowCenter:after {\n left: 50%;\n right: 50%;\n}\n.flatpickr-calendar:before {\n border-width: 5px;\n margin: 0 -5px;\n}\n.flatpickr-calendar:after {\n border-width: 4px;\n margin: 0 -4px;\n}\n.flatpickr-calendar.arrowTop:before,\n.flatpickr-calendar.arrowTop:after {\n bottom: 100%;\n}\n.flatpickr-calendar.arrowTop:before {\n border-bottom-color: #e6e6e6;\n}\n.flatpickr-calendar.arrowTop:after {\n border-bottom-color: #fff;\n}\n.flatpickr-calendar.arrowBottom:before,\n.flatpickr-calendar.arrowBottom:after {\n top: 100%;\n}\n.flatpickr-calendar.arrowBottom:before {\n border-top-color: #e6e6e6;\n}\n.flatpickr-calendar.arrowBottom:after {\n border-top-color: #fff;\n}\n.flatpickr-calendar:focus {\n outline: 0;\n}\n.flatpickr-wrapper {\n position: relative;\n display: inline-block;\n}\n.flatpickr-months {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n}\n.flatpickr-months .flatpickr-month {\n background: transparent;\n color: rgba(0,0,0,0.9);\n fill: rgba(0,0,0,0.9);\n height: 34px;\n line-height: 1;\n text-align: center;\n position: relative;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n overflow: hidden;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\n.flatpickr-months .flatpickr-prev-month,\n.flatpickr-months .flatpickr-next-month {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n text-decoration: none;\n cursor: pointer;\n position: absolute;\n top: 0;\n height: 34px;\n padding: 10px;\n z-index: 3;\n color: rgba(0,0,0,0.9);\n fill: rgba(0,0,0,0.9);\n}\n.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,\n.flatpickr-months .flatpickr-next-month.flatpickr-disabled {\n display: none;\n}\n.flatpickr-months .flatpickr-prev-month i,\n.flatpickr-months .flatpickr-next-month i {\n position: relative;\n}\n.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,\n.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {\n/*\n /*rtl:begin:ignore*/\n/*\n */\n left: 0;\n/*\n /*rtl:end:ignore*/\n/*\n */\n}\n/*\n /*rtl:begin:ignore*/\n/*\n /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,\n.flatpickr-months .flatpickr-next-month.flatpickr-next-month {\n/*\n /*rtl:begin:ignore*/\n/*\n */\n right: 0;\n/*\n /*rtl:end:ignore*/\n/*\n */\n}\n/*\n /*rtl:begin:ignore*/\n/*\n /*rtl:end:ignore*/\n.flatpickr-months .flatpickr-prev-month:hover,\n.flatpickr-months .flatpickr-next-month:hover {\n color: #959ea9;\n}\n.flatpickr-months .flatpickr-prev-month:hover svg,\n.flatpickr-months .flatpickr-next-month:hover svg {\n fill: #f64747;\n}\n.flatpickr-months .flatpickr-prev-month svg,\n.flatpickr-months .flatpickr-next-month svg {\n width: 14px;\n height: 14px;\n}\n.flatpickr-months .flatpickr-prev-month svg path,\n.flatpickr-months .flatpickr-next-month svg path {\n -webkit-transition: fill 0.1s;\n transition: fill 0.1s;\n fill: inherit;\n}\n.numInputWrapper {\n position: relative;\n height: auto;\n}\n.numInputWrapper input,\n.numInputWrapper span {\n display: inline-block;\n}\n.numInputWrapper input {\n width: 100%;\n}\n.numInputWrapper input::-ms-clear {\n display: none;\n}\n.numInputWrapper input::-webkit-outer-spin-button,\n.numInputWrapper input::-webkit-inner-spin-button {\n margin: 0;\n -webkit-appearance: none;\n}\n.numInputWrapper span {\n position: absolute;\n right: 0;\n width: 14px;\n padding: 0 4px 0 2px;\n height: 50%;\n line-height: 50%;\n opacity: 0;\n cursor: pointer;\n border: 1px solid rgba(57,57,57,0.15);\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.numInputWrapper span:hover {\n background: rgba(0,0,0,0.1);\n}\n.numInputWrapper span:active {\n background: rgba(0,0,0,0.2);\n}\n.numInputWrapper span:after {\n display: block;\n content: "";\n position: absolute;\n}\n.numInputWrapper span.arrowUp {\n top: 0;\n border-bottom: 0;\n}\n.numInputWrapper span.arrowUp:after {\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-bottom: 4px solid rgba(57,57,57,0.6);\n top: 26%;\n}\n.numInputWrapper span.arrowDown {\n top: 50%;\n}\n.numInputWrapper span.arrowDown:after {\n border-left: 4px solid transparent;\n border-right: 4px solid transparent;\n border-top: 4px solid rgba(57,57,57,0.6);\n top: 40%;\n}\n.numInputWrapper span svg {\n width: inherit;\n height: auto;\n}\n.numInputWrapper span svg path {\n fill: rgba(0,0,0,0.5);\n}\n.numInputWrapper:hover {\n background: rgba(0,0,0,0.05);\n}\n.numInputWrapper:hover span {\n opacity: 1;\n}\n.flatpickr-current-month {\n font-size: 135%;\n line-height: inherit;\n font-weight: 300;\n color: inherit;\n position: absolute;\n width: 75%;\n left: 12.5%;\n padding: 7.48px 0 0 0;\n line-height: 1;\n height: 34px;\n display: inline-block;\n text-align: center;\n -webkit-transform: translate3d(0px, 0px, 0px);\n transform: translate3d(0px, 0px, 0px);\n}\n.flatpickr-current-month span.cur-month {\n font-family: inherit;\n font-weight: 700;\n color: inherit;\n display: inline-block;\n margin-left: 0.5ch;\n padding: 0;\n}\n.flatpickr-current-month span.cur-month:hover {\n background: rgba(0,0,0,0.05);\n}\n.flatpickr-current-month .numInputWrapper {\n width: 6ch;\n width: 7ch\\0;\n display: inline-block;\n}\n.flatpickr-current-month .numInputWrapper span.arrowUp:after {\n border-bottom-color: rgba(0,0,0,0.9);\n}\n.flatpickr-current-month .numInputWrapper span.arrowDown:after {\n border-top-color: rgba(0,0,0,0.9);\n}\n.flatpickr-current-month input.cur-year {\n background: transparent;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: inherit;\n cursor: text;\n padding: 0 0 0 0.5ch;\n margin: 0;\n display: inline-block;\n font-size: inherit;\n font-family: inherit;\n font-weight: 300;\n line-height: inherit;\n height: auto;\n border: 0;\n border-radius: 0;\n vertical-align: initial;\n -webkit-appearance: textfield;\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.flatpickr-current-month input.cur-year:focus {\n outline: 0;\n}\n.flatpickr-current-month input.cur-year[disabled],\n.flatpickr-current-month input.cur-year[disabled]:hover {\n font-size: 100%;\n color: rgba(0,0,0,0.5);\n background: transparent;\n pointer-events: none;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months {\n appearance: menulist;\n background: transparent;\n border: none;\n border-radius: 0;\n box-sizing: border-box;\n color: inherit;\n cursor: pointer;\n font-size: inherit;\n font-family: inherit;\n font-weight: 300;\n height: auto;\n line-height: inherit;\n margin: -1px 0 0 0;\n outline: none;\n padding: 0 0 0 0.5ch;\n position: relative;\n vertical-align: initial;\n -webkit-box-sizing: border-box;\n -webkit-appearance: menulist;\n -moz-appearance: menulist;\n width: auto;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months:focus,\n.flatpickr-current-month .flatpickr-monthDropdown-months:active {\n outline: none;\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months:hover {\n background: rgba(0,0,0,0.05);\n}\n.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {\n background-color: transparent;\n outline: none;\n padding: 0;\n}\n.flatpickr-weekdays {\n background: transparent;\n text-align: center;\n overflow: hidden;\n width: 100%;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: center;\n -webkit-align-items: center;\n -ms-flex-align: center;\n align-items: center;\n height: 28px;\n}\n.flatpickr-weekdays .flatpickr-weekdaycontainer {\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n}\nspan.flatpickr-weekday {\n cursor: default;\n font-size: 90%;\n background: transparent;\n color: rgba(0,0,0,0.54);\n line-height: 1;\n margin: 0;\n text-align: center;\n display: block;\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n font-weight: bolder;\n}\n.dayContainer,\n.flatpickr-weeks {\n padding: 1px 0 0 0;\n}\n.flatpickr-days {\n position: relative;\n overflow: hidden;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-align: start;\n -webkit-align-items: flex-start;\n -ms-flex-align: start;\n align-items: flex-start;\n width: 307.875px;\n}\n.flatpickr-days:focus {\n outline: 0;\n}\n.dayContainer {\n padding: 0;\n outline: 0;\n text-align: left;\n width: 307.875px;\n min-width: 307.875px;\n max-width: 307.875px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n display: -ms-flexbox;\n display: -webkit-box;\n display: -webkit-flex;\n display: flex;\n -webkit-flex-wrap: wrap;\n flex-wrap: wrap;\n -ms-flex-wrap: wrap;\n -ms-flex-pack: justify;\n -webkit-justify-content: space-around;\n justify-content: space-around;\n -webkit-transform: translate3d(0px, 0px, 0px);\n transform: translate3d(0px, 0px, 0px);\n opacity: 1;\n}\n.dayContainer + .dayContainer {\n -webkit-box-shadow: -1px 0 0 #e6e6e6;\n box-shadow: -1px 0 0 #e6e6e6;\n}\n.flatpickr-day {\n background: none;\n border: 1px solid transparent;\n border-radius: 150px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n color: #393939;\n cursor: pointer;\n font-weight: 400;\n width: 14.2857143%;\n -webkit-flex-basis: 14.2857143%;\n -ms-flex-preferred-size: 14.2857143%;\n flex-basis: 14.2857143%;\n max-width: 39px;\n height: 39px;\n line-height: 39px;\n margin: 0;\n display: inline-block;\n position: relative;\n -webkit-box-pack: center;\n -webkit-justify-content: center;\n -ms-flex-pack: center;\n justify-content: center;\n text-align: center;\n}\n.flatpickr-day.inRange,\n.flatpickr-day.prevMonthDay.inRange,\n.flatpickr-day.nextMonthDay.inRange,\n.flatpickr-day.today.inRange,\n.flatpickr-day.prevMonthDay.today.inRange,\n.flatpickr-day.nextMonthDay.today.inRange,\n.flatpickr-day:hover,\n.flatpickr-day.prevMonthDay:hover,\n.flatpickr-day.nextMonthDay:hover,\n.flatpickr-day:focus,\n.flatpickr-day.prevMonthDay:focus,\n.flatpickr-day.nextMonthDay:focus {\n cursor: pointer;\n outline: 0;\n background: #e6e6e6;\n border-color: #e6e6e6;\n}\n.flatpickr-day.today {\n border-color: #959ea9;\n}\n.flatpickr-day.today:hover,\n.flatpickr-day.today:focus {\n border-color: #959ea9;\n background: #959ea9;\n color: #fff;\n}\n.flatpickr-day.selected,\n.flatpickr-day.startRange,\n.flatpickr-day.endRange,\n.flatpickr-day.selected.inRange,\n.flatpickr-day.startRange.inRange,\n.flatpickr-day.endRange.inRange,\n.flatpickr-day.selected:focus,\n.flatpickr-day.startRange:focus,\n.flatpickr-day.endRange:focus,\n.flatpickr-day.selected:hover,\n.flatpickr-day.startRange:hover,\n.flatpickr-day.endRange:hover,\n.flatpickr-day.selected.prevMonthDay,\n.flatpickr-day.startRange.prevMonthDay,\n.flatpickr-day.endRange.prevMonthDay,\n.flatpickr-day.selected.nextMonthDay,\n.flatpickr-day.startRange.nextMonthDay,\n.flatpickr-day.endRange.nextMonthDay {\n background: #569ff7;\n -webkit-box-shadow: none;\n box-shadow: none;\n color: #fff;\n border-color: #569ff7;\n}\n.flatpickr-day.selected.startRange,\n.flatpickr-day.startRange.startRange,\n.flatpickr-day.endRange.startRange {\n border-radius: 50px 0 0 50px;\n}\n.flatpickr-day.selected.endRange,\n.flatpickr-day.startRange.endRange,\n.flatpickr-day.endRange.endRange {\n border-radius: 0 50px 50px 0;\n}\n.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),\n.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),\n.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {\n -webkit-box-shadow: -10px 0 0 #569ff7;\n box-shadow: -10px 0 0 #569ff7;\n}\n.flatpickr-day.selected.startRange.endRange,\n.flatpickr-day.startRange.startRange.endRange,\n.flatpickr-day.endRange.startRange.endRange {\n border-radius: 50px;\n}\n.flatpickr-day.inRange {\n border-radius: 0;\n -webkit-box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;\n}\n.flatpickr-day.flatpickr-disabled,\n.flatpickr-day.flatpickr-disabled:hover,\n.flatpickr-day.prevMonthDay,\n.flatpickr-day.nextMonthDay,\n.flatpickr-day.notAllowed,\n.flatpickr-day.notAllowed.prevMonthDay,\n.flatpickr-day.notAllowed.nextMonthDay {\n color: rgba(57,57,57,0.3);\n background: transparent;\n border-color: transparent;\n cursor: default;\n}\n.flatpickr-day.flatpickr-disabled,\n.flatpickr-day.flatpickr-disabled:hover {\n cursor: not-allowed;\n color: rgba(57,57,57,0.1);\n}\n.flatpickr-day.week.selected {\n border-radius: 0;\n -webkit-box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;\n box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;\n}\n.flatpickr-day.hidden {\n visibility: hidden;\n}\n.rangeMode .flatpickr-day {\n margin-top: 1px;\n}\n.flatpickr-weekwrapper {\n float: left;\n}\n.flatpickr-weekwrapper .flatpickr-weeks {\n padding: 0 12px;\n -webkit-box-shadow: 1px 0 0 #e6e6e6;\n box-shadow: 1px 0 0 #e6e6e6;\n}\n.flatpickr-weekwrapper .flatpickr-weekday {\n float: none;\n width: 100%;\n line-height: 28px;\n}\n.flatpickr-weekwrapper span.flatpickr-day,\n.flatpickr-weekwrapper span.flatpickr-day:hover {\n display: block;\n width: 100%;\n max-width: none;\n color: rgba(57,57,57,0.3);\n background: transparent;\n cursor: default;\n border: none;\n}\n.flatpickr-innerContainer {\n display: block;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n}\n.flatpickr-rContainer {\n display: inline-block;\n padding: 0;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n.flatpickr-time {\n text-align: center;\n outline: 0;\n display: block;\n height: 0;\n line-height: 40px;\n max-height: 40px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n display: -webkit-box;\n display: -webkit-flex;\n display: -ms-flexbox;\n display: flex;\n}\n.flatpickr-time:after {\n content: "";\n display: table;\n clear: both;\n}\n.flatpickr-time .numInputWrapper {\n -webkit-box-flex: 1;\n -webkit-flex: 1;\n -ms-flex: 1;\n flex: 1;\n width: 40%;\n height: 40px;\n float: left;\n}\n.flatpickr-time .numInputWrapper span.arrowUp:after {\n border-bottom-color: #393939;\n}\n.flatpickr-time .numInputWrapper span.arrowDown:after {\n border-top-color: #393939;\n}\n.flatpickr-time.hasSeconds .numInputWrapper {\n width: 26%;\n}\n.flatpickr-time.time24hr .numInputWrapper {\n width: 49%;\n}\n.flatpickr-time input {\n background: transparent;\n -webkit-box-shadow: none;\n box-shadow: none;\n border: 0;\n border-radius: 0;\n text-align: center;\n margin: 0;\n padding: 0;\n height: inherit;\n line-height: inherit;\n color: #393939;\n font-size: 14px;\n position: relative;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n -webkit-appearance: textfield;\n -moz-appearance: textfield;\n appearance: textfield;\n}\n.flatpickr-time input.flatpickr-hour {\n font-weight: bold;\n}\n.flatpickr-time input.flatpickr-minute,\n.flatpickr-time input.flatpickr-second {\n font-weight: 400;\n}\n.flatpickr-time input:focus {\n outline: 0;\n border: 0;\n}\n.flatpickr-time .flatpickr-time-separator,\n.flatpickr-time .flatpickr-am-pm {\n height: inherit;\n float: left;\n line-height: inherit;\n color: #393939;\n font-weight: bold;\n width: 2%;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n -webkit-align-self: center;\n -ms-flex-item-align: center;\n align-self: center;\n}\n.flatpickr-time .flatpickr-am-pm {\n outline: 0;\n width: 18%;\n cursor: pointer;\n text-align: center;\n font-weight: 400;\n}\n.flatpickr-time input:hover,\n.flatpickr-time .flatpickr-am-pm:hover,\n.flatpickr-time input:focus,\n.flatpickr-time .flatpickr-am-pm:focus {\n background: #eee;\n}\n.flatpickr-input[readonly] {\n cursor: pointer;\n}\n@-webkit-keyframes fpFadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 1;\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n@keyframes fpFadeInDown {\n from {\n opacity: 0;\n -webkit-transform: translate3d(0, -20px, 0);\n transform: translate3d(0, -20px, 0);\n }\n to {\n opacity: 1;\n -webkit-transform: translate3d(0, 0, 0);\n transform: translate3d(0, 0, 0);\n }\n}\n'],sourceRoot:""}]);const s=o},740:(e,t,n)=>{n.d(t,{c:()=>c});var r=n(648),i=n.n(r),a=n(312),o=n.n(a),s=n(832),l=o()(i());l.i(s.c),l.push([e.id,".redmine-tracky .timer-sessions-table td{text-align:left !important}.redmine-tracky .timer-session-table-actions{text-align:right !important}.redmine-tracky .gap-marker{position:relative;border-bottom:1px solid #fc8c12}.redmine-tracky .gap-marker.error-block:after{bottom:-2px;width:calc(100% + 1px);left:-1px}.redmine-tracky .mb-3{margin-bottom:1rem !important}.redmine-tracky .mt-3{margin-top:1rem !important}.redmine-tracky .mr-3{margin-right:1rem !important}.redmine-tracky .ml-3{margin-left:1rem !important}.redmine-tracky .mx-auto{margin-left:auto;margin-right:auto}.redmine-tracky .error{color:#d74427}.redmine-tracky .w-20{width:20% !important}.redmine-tracky .w-25{width:25% !important}.redmine-tracky .w-30{width:30% !important}.redmine-tracky .w-40{width:40% !important}.redmine-tracky .w-50{width:50% !important}.redmine-tracky .w-75{width:75% !important}.redmine-tracky .w-100{width:100% !important}@media only screen and (max-width: 480px){.redmine-tracky [class*=w-]{width:100% !important}}.redmine-tracky .error-block{border-style:solid;border-color:#d74427;border-width:1.5px}.redmine-tracky .timer-sessions-table{border-collapse:collapse}.redmine-tracky .timer-sessions-table>td{text-align:left;margin-left:5px}.redmine-tracky .text-center{text-align:center}.redmine-tracky .space-between{display:flex;-moz-box-pack:justify;justify-content:space-between;-moz-box-align:center;align-items:center}.redmine-tracky .h3{font-size:3rem}.redmine-tracky .left-text{text-align:left}.redmine-tracky .right-text{text-align:right !important}.redmine-tracky label{display:block;margin-bottom:.5rem}.redmine-tracky .text-muted{color:#6c757d !important}.redmine-tracky .form-text{display:block;margin-top:.25rem}.redmine-tracky small{font-size:80%;font-weight:400}.redmine-tracky .col-1{width:8.3333333333%}.redmine-tracky .col-2{width:16.6666666667%}.redmine-tracky .col-3{width:25%}.redmine-tracky .col-4{width:33.3333333333%}.redmine-tracky .col-5{width:41.6666666667%}.redmine-tracky .col-6{width:50%}.redmine-tracky .col-7{width:58.3333333333%}.redmine-tracky .col-8{width:66.6666666667%}.redmine-tracky .col-9{width:75%}.redmine-tracky .col-10{width:83.3333333333%}.redmine-tracky .col-11{width:91.6666666667%}.redmine-tracky .col-12{width:100%}@media only screen and (max-width: 768px){.redmine-tracky [class*=col-]{width:100%}}.redmine-tracky .float-right{float:right !important}.redmine-tracky .times-container{column-count:2}.redmine-tracky input:disabled,.redmine-tracky button:disabled{background-color:#e9ecef;opacity:1;cursor:default}","",{version:3,sources:["webpack://./src/styles/time_sessions_table.scss","webpack://./src/styles/utils.scss","webpack://./src/styles/timer_container.scss"],names:[],mappings:"AAGE,yCACE,0BAAA,CAGF,6CACE,2BAAA,CAGF,4BACE,iBAAA,CACA,+BAAA,CAEA,8CACE,WAAA,CACA,sBAAA,CACA,SAAA,CCjBJ,sBACE,6BAAA,CAGF,sBACE,0BAAA,CAGF,sBACE,4BAAA,CAGF,sBACE,2BAAA,CAGF,yBACE,gBAAA,CACA,iBAAA,CAGF,uBACE,aAAA,CAGF,sBACE,oBAAA,CAGF,sBACE,oBAAA,CAGF,sBACE,oBAAA,CAGF,sBACE,oBAAA,CAGF,sBACE,oBAAA,CAGF,sBACE,oBAAA,CAGF,uBACE,qBAAA,CAGF,0CACE,4BACE,qBAAA,CAAA,CAIJ,6BACE,kBAAA,CACA,oBAAA,CACA,kBAAA,CAGF,sCACE,wBAAA,CAGF,yCACE,eAAA,CACA,eAAA,CAGF,6BACE,iBAAA,CAGF,+BACE,YAAA,CACA,qBAAA,CACA,6BAAA,CACA,qBAAA,CACA,kBAAA,CAGF,oBACE,cAAA,CAGF,2BACE,eAAA,CAGF,4BACE,2BAAA,CAGF,sBACE,aAAA,CACA,mBAAA,CAGF,4BACE,wBAAA,CAGF,2BACE,aAAA,CACA,iBAAA,CAGF,sBACE,aAAA,CACA,eAAA,CAIA,uBACE,mBAAA,CADF,uBACE,oBAAA,CADF,uBACE,SAAA,CADF,uBACE,oBAAA,CADF,uBACE,oBAAA,CADF,uBACE,SAAA,CADF,uBACE,oBAAA,CADF,uBACE,oBAAA,CADF,uBACE,SAAA,CADF,wBACE,oBAAA,CADF,wBACE,oBAAA,CADF,wBACE,UAAA,CAIJ,0CAEE,8BACE,UAAA,CAAA,CAIJ,6BACE,sBAAA,CCnIF,iCACE,cAAA,CAGF,+DAEE,wBAAA,CACA,SAAA,CACA,cAAA",sourcesContent:["@import 'variables';\n\n.redmine-tracky {\n .timer-sessions-table td {\n text-align: left !important;\n }\n\n .timer-session-table-actions {\n text-align: right !important;\n }\n\n .gap-marker {\n position: relative;\n border-bottom: 1px solid $brand-warning;\n\n &.error-block:after {\n bottom: -2px;\n width: calc(100% + 1px);\n left: -1px;\n }\n }\n}\n",'.redmine-tracky {\n .mb-3 {\n margin-bottom: 1rem !important;\n }\n\n .mt-3 {\n margin-top: 1rem !important;\n }\n\n .mr-3 {\n margin-right: 1rem !important;\n }\n\n .ml-3 {\n margin-left: 1rem !important;\n }\n\n .mx-auto {\n margin-left: auto;\n margin-right: auto;\n }\n\n .error {\n color: #d74427;\n }\n\n .w-20 {\n width: 20% !important;\n }\n\n .w-25 {\n width: 25% !important;\n }\n\n .w-30 {\n width: 30% !important;\n }\n\n .w-40 {\n width: 40% !important;\n }\n\n .w-50 {\n width: 50% !important;\n }\n\n .w-75 {\n width: 75% !important;\n }\n\n .w-100 {\n width: 100% !important;\n }\n\n @media only screen and (max-width: 480px) {\n [class*="w-"] {\n width: 100% !important;\n }\n }\n\n .error-block {\n border-style: solid;\n border-color: #d74427;\n border-width: 1.5px;\n }\n\n .timer-sessions-table {\n border-collapse: collapse;\n }\n\n .timer-sessions-table > td {\n text-align: left;\n margin-left: 5px;\n }\n\n .text-center {\n text-align: center;\n }\n\n .space-between {\n display: flex;\n -moz-box-pack: justify;\n justify-content: space-between;\n -moz-box-align: center;\n align-items: center;\n }\n\n .h3 {\n font-size: 3rem;\n }\n\n .left-text {\n text-align: left;\n }\n\n .right-text {\n text-align: right !important;\n }\n\n label {\n display: block;\n margin-bottom: 0.5rem;\n }\n\n .text-muted {\n color: #6c757d !important;\n }\n\n .form-text {\n display: block;\n margin-top: 0.25rem;\n }\n\n small {\n font-size: 80%;\n font-weight: 400;\n }\n\n @for $i from 1 through 12 {\n .col-#{$i} {\n width: calc(100% / (12 / $i));\n }\n }\n\n @media only screen and (max-width: 768px) {\n /* For mobile phones: */\n [class*="col-"] {\n width: 100%;\n }\n }\n\n .float-right {\n float: right !important;\n }\n}\n',".redmine-tracky {\n .times-container {\n column-count: 2;\n }\n\n input:disabled,\n button:disabled {\n background-color: #e9ecef;\n opacity: 1;\n cursor: default;\n }\n}\n"],sourceRoot:""}]);const c=l},312:e=>{e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var n="",r=void 0!==t[5];return t[4]&&(n+="@supports (".concat(t[4],") {")),t[2]&&(n+="@media ".concat(t[2]," {")),r&&(n+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),n+=e(t),r&&(n+="}"),t[2]&&(n+="}"),t[4]&&(n+="}"),n})).join("")},t.i=function(e,n,r,i,a){"string"==typeof e&&(e=[[null,e,void 0]]);var o={};if(r)for(var s=0;s0?" ".concat(u[5]):""," {").concat(u[1],"}")),u[5]=a),n&&(u[2]?(u[1]="@media ".concat(u[2]," {").concat(u[1],"}"),u[2]=n):u[2]=n),i&&(u[4]?(u[1]="@supports (".concat(u[4],") {").concat(u[1],"}"),u[4]=i):u[4]="".concat(i)),t.push(u))}},t}},648:e=>{e.exports=function(e){var t=e[1],n=e[3];if(!n)return t;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(n)))),i="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),a="/*# ".concat(i," */");return[t].concat([a]).join("\n")}return[t].join("\n")}},280:()=>{"function"!=typeof Object.assign&&(Object.assign=function(e){for(var t=[],n=1;n{Object.defineProperty(t,"__esModule",{value:!0});class n extends Error{}class r extends n{constructor(e){super(`Invalid DateTime: ${e.toMessage()}`)}}class i extends n{constructor(e){super(`Invalid Interval: ${e.toMessage()}`)}}class a extends n{constructor(e){super(`Invalid Duration: ${e.toMessage()}`)}}class o extends n{}class s extends n{constructor(e){super(`Invalid unit ${e}`)}}class l extends n{}class c extends n{constructor(){super("Zone is an abstract class")}}const u="numeric",d="short",h="long",f={year:u,month:u,day:u},m={year:u,month:d,day:u},p={year:u,month:d,day:u,weekday:d},A={year:u,month:h,day:u},g={year:u,month:h,day:u,weekday:h},y={hour:u,minute:u},b={hour:u,minute:u,second:u},C={hour:u,minute:u,second:u,timeZoneName:d},v={hour:u,minute:u,second:u,timeZoneName:h},k={hour:u,minute:u,hourCycle:"h23"},w={hour:u,minute:u,second:u,hourCycle:"h23"},E={hour:u,minute:u,second:u,hourCycle:"h23",timeZoneName:d},B={hour:u,minute:u,second:u,hourCycle:"h23",timeZoneName:h},x={year:u,month:u,day:u,hour:u,minute:u},D={year:u,month:u,day:u,hour:u,minute:u,second:u},M={year:u,month:d,day:u,hour:u,minute:u},O={year:u,month:d,day:u,hour:u,minute:u,second:u},T={year:u,month:d,day:u,weekday:d,hour:u,minute:u},S={year:u,month:h,day:u,hour:u,minute:u,timeZoneName:d},N={year:u,month:h,day:u,hour:u,minute:u,second:u,timeZoneName:d},I={year:u,month:h,day:u,weekday:h,hour:u,minute:u,timeZoneName:h},F={year:u,month:h,day:u,weekday:h,hour:u,minute:u,second:u,timeZoneName:h};function j(e){return void 0===e}function _(e){return"number"==typeof e}function L(e){return"number"==typeof e&&e%1==0}function V(){try{return"undefined"!=typeof Intl&&!!Intl.RelativeTimeFormat}catch(e){return!1}}function $(e,t,n){if(0!==e.length)return e.reduce(((e,r)=>{const i=[t(r),r];return e&&n(e[0],i[0])===e[0]?e:i}),null)[1]}function U(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function R(e,t,n){return L(e)&&e>=t&&e<=n}function z(e,t=2){let n;return n=e<0?"-"+(""+-e).padStart(t,"0"):(""+e).padStart(t,"0"),n}function W(e){return j(e)||null===e||""===e?void 0:parseInt(e,10)}function P(e){return j(e)||null===e||""===e?void 0:parseFloat(e)}function q(e){if(!j(e)&&null!==e&&""!==e){const t=1e3*parseFloat("0."+e);return Math.floor(t)}}function Y(e,t,n=!1){const r=10**t;return(n?Math.trunc:Math.round)(e*r)/r}function H(e){return e%4==0&&(e%100!=0||e%400==0)}function Z(e){return H(e)?366:365}function K(e,t){const n=(r=t-1)-12*Math.floor(r/12)+1;var r;return 2===n?H(e+(t-n)/12)?29:28:[31,null,31,30,31,30,31,31,30,31,30,31][n-1]}function G(e){let t=Date.UTC(e.year,e.month-1,e.day,e.hour,e.minute,e.second,e.millisecond);return e.year<100&&e.year>=0&&(t=new Date(t),t.setUTCFullYear(t.getUTCFullYear()-1900)),+t}function J(e){const t=(e+Math.floor(e/4)-Math.floor(e/100)+Math.floor(e/400))%7,n=e-1,r=(n+Math.floor(n/4)-Math.floor(n/100)+Math.floor(n/400))%7;return 4===t||3===r?53:52}function Q(e){return e>99?e:e>60?1900+e:2e3+e}function X(e,t,n,r=null){const i=new Date(e),a={hourCycle:"h23",year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit"};r&&(a.timeZone=r);const o={timeZoneName:t,...a},s=new Intl.DateTimeFormat(n,o).formatToParts(i).find((e=>"timezonename"===e.type.toLowerCase()));return s?s.value:null}function ee(e,t){let n=parseInt(e,10);Number.isNaN(n)&&(n=0);const r=parseInt(t,10)||0;return 60*n+(n<0||Object.is(n,-0)?-r:r)}function te(e){const t=Number(e);if("boolean"==typeof e||""===e||Number.isNaN(t))throw new l(`Invalid unit value ${e}`);return t}function ne(e,t){const n={};for(const r in e)if(U(e,r)){const i=e[r];if(null==i)continue;n[t(r)]=te(i)}return n}function re(e,t){const n=Math.trunc(Math.abs(e/60)),r=Math.trunc(Math.abs(e%60)),i=e>=0?"+":"-";switch(t){case"short":return`${i}${z(n,2)}:${z(r,2)}`;case"narrow":return`${i}${n}${r>0?`:${r}`:""}`;case"techie":return`${i}${z(n,2)}${z(r,2)}`;default:throw new RangeError(`Value format ${t} is out of range for property format`)}}function ie(e){return function(e,t){return["hour","minute","second","millisecond"].reduce(((t,n)=>(t[n]=e[n],t)),{})}(e)}const ae=/[A-Za-z_+-]{1,256}(?::?\/[A-Za-z0-9_+-]{1,256}(?:\/[A-Za-z0-9_+-]{1,256})?)?/,oe=["January","February","March","April","May","June","July","August","September","October","November","December"],se=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],le=["J","F","M","A","M","J","J","A","S","O","N","D"];function ce(e){switch(e){case"narrow":return[...le];case"short":return[...se];case"long":return[...oe];case"numeric":return["1","2","3","4","5","6","7","8","9","10","11","12"];case"2-digit":return["01","02","03","04","05","06","07","08","09","10","11","12"];default:return null}}const ue=["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],de=["Mon","Tue","Wed","Thu","Fri","Sat","Sun"],he=["M","T","W","T","F","S","S"];function fe(e){switch(e){case"narrow":return[...he];case"short":return[...de];case"long":return[...ue];case"numeric":return["1","2","3","4","5","6","7"];default:return null}}const me=["AM","PM"],pe=["Before Christ","Anno Domini"],Ae=["BC","AD"],ge=["B","A"];function ye(e){switch(e){case"narrow":return[...ge];case"short":return[...Ae];case"long":return[...pe];default:return null}}function be(e,t){let n="";for(const r of e)r.literal?n+=r.val:n+=t(r.val);return n}const Ce={D:f,DD:m,DDD:A,DDDD:g,t:y,tt:b,ttt:C,tttt:v,T:k,TT:w,TTT:E,TTTT:B,f:x,ff:M,fff:S,ffff:I,F:D,FF:O,FFF:N,FFFF:F};class ve{static create(e,t={}){return new ve(e,t)}static parseFormat(e){let t=null,n="",r=!1;const i=[];for(let a=0;a0&&i.push({literal:r,val:n}),t=null,n="",r=!r):r||o===t?n+=o:(n.length>0&&i.push({literal:!1,val:n}),n=o,t=o)}return n.length>0&&i.push({literal:r,val:n}),i}static macroTokenToFormatOpts(e){return Ce[e]}constructor(e,t){this.opts=t,this.loc=e,this.systemLoc=null}formatWithSystemDefault(e,t){return null===this.systemLoc&&(this.systemLoc=this.loc.redefaultToSystem()),this.systemLoc.dtFormatter(e,{...this.opts,...t}).format()}formatDateTime(e,t={}){return this.loc.dtFormatter(e,{...this.opts,...t}).format()}formatDateTimeParts(e,t={}){return this.loc.dtFormatter(e,{...this.opts,...t}).formatToParts()}resolvedOptions(e,t={}){return this.loc.dtFormatter(e,{...this.opts,...t}).resolvedOptions()}num(e,t=0){if(this.opts.forceSimple)return z(e,t);const n={...this.opts};return t>0&&(n.padTo=t),this.loc.numberFormatter(n).format(e)}formatDateTimeFromString(e,t){const n="en"===this.loc.listingMode(),r=this.loc.outputCalendar&&"gregory"!==this.loc.outputCalendar,i=(t,n)=>this.loc.extract(e,t,n),a=t=>e.isOffsetFixed&&0===e.offset&&t.allowZ?"Z":e.isValid?e.zone.formatOffset(e.ts,t.format):"",o=(t,r)=>n?function(e,t){return ce(t)[e.month-1]}(e,t):i(r?{month:t}:{month:t,day:"numeric"},"month"),s=(t,r)=>n?function(e,t){return fe(t)[e.weekday-1]}(e,t):i(r?{weekday:t}:{weekday:t,month:"long",day:"numeric"},"weekday"),l=t=>{const n=ve.macroTokenToFormatOpts(t);return n?this.formatWithSystemDefault(e,n):t},c=t=>n?function(e,t){return ye(t)[e.year<0?0:1]}(e,t):i({era:t},"era");return be(ve.parseFormat(t),(t=>{switch(t){case"S":return this.num(e.millisecond);case"u":case"SSS":return this.num(e.millisecond,3);case"s":return this.num(e.second);case"ss":return this.num(e.second,2);case"uu":return this.num(Math.floor(e.millisecond/10),2);case"uuu":return this.num(Math.floor(e.millisecond/100));case"m":return this.num(e.minute);case"mm":return this.num(e.minute,2);case"h":return this.num(e.hour%12==0?12:e.hour%12);case"hh":return this.num(e.hour%12==0?12:e.hour%12,2);case"H":return this.num(e.hour);case"HH":return this.num(e.hour,2);case"Z":return a({format:"narrow",allowZ:this.opts.allowZ});case"ZZ":return a({format:"short",allowZ:this.opts.allowZ});case"ZZZ":return a({format:"techie",allowZ:this.opts.allowZ});case"ZZZZ":return e.zone.offsetName(e.ts,{format:"short",locale:this.loc.locale});case"ZZZZZ":return e.zone.offsetName(e.ts,{format:"long",locale:this.loc.locale});case"z":return e.zoneName;case"a":return n?function(e){return me[e.hour<12?0:1]}(e):i({hour:"numeric",hourCycle:"h12"},"dayperiod");case"d":return r?i({day:"numeric"},"day"):this.num(e.day);case"dd":return r?i({day:"2-digit"},"day"):this.num(e.day,2);case"c":case"E":return this.num(e.weekday);case"ccc":return s("short",!0);case"cccc":return s("long",!0);case"ccccc":return s("narrow",!0);case"EEE":return s("short",!1);case"EEEE":return s("long",!1);case"EEEEE":return s("narrow",!1);case"L":return r?i({month:"numeric",day:"numeric"},"month"):this.num(e.month);case"LL":return r?i({month:"2-digit",day:"numeric"},"month"):this.num(e.month,2);case"LLL":return o("short",!0);case"LLLL":return o("long",!0);case"LLLLL":return o("narrow",!0);case"M":return r?i({month:"numeric"},"month"):this.num(e.month);case"MM":return r?i({month:"2-digit"},"month"):this.num(e.month,2);case"MMM":return o("short",!1);case"MMMM":return o("long",!1);case"MMMMM":return o("narrow",!1);case"y":return r?i({year:"numeric"},"year"):this.num(e.year);case"yy":return r?i({year:"2-digit"},"year"):this.num(e.year.toString().slice(-2),2);case"yyyy":return r?i({year:"numeric"},"year"):this.num(e.year,4);case"yyyyyy":return r?i({year:"numeric"},"year"):this.num(e.year,6);case"G":return c("short");case"GG":return c("long");case"GGGGG":return c("narrow");case"kk":return this.num(e.weekYear.toString().slice(-2),2);case"kkkk":return this.num(e.weekYear,4);case"W":return this.num(e.weekNumber);case"WW":return this.num(e.weekNumber,2);case"o":return this.num(e.ordinal);case"ooo":return this.num(e.ordinal,3);case"q":return this.num(e.quarter);case"qq":return this.num(e.quarter,2);case"X":return this.num(Math.floor(e.ts/1e3));case"x":return this.num(e.ts);default:return l(t)}}))}formatDurationFromString(e,t){const n=e=>{switch(e[0]){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":return"hour";case"d":return"day";case"w":return"week";case"M":return"month";case"y":return"year";default:return null}},r=ve.parseFormat(t),i=r.reduce(((e,{literal:t,val:n})=>t?e:e.concat(n)),[]);return be(r,(e=>t=>{const r=n(t);return r?this.num(e.get(r),t.length):t})(e.shiftTo(...i.map(n).filter((e=>e)))))}}class ke{constructor(e,t){this.reason=e,this.explanation=t}toMessage(){return this.explanation?`${this.reason}: ${this.explanation}`:this.reason}}class we{get type(){throw new c}get name(){throw new c}get ianaName(){return this.name}get isUniversal(){throw new c}offsetName(e,t){throw new c}formatOffset(e,t){throw new c}offset(e){throw new c}equals(e){throw new c}get isValid(){throw new c}}let Ee=null;class Be extends we{static get instance(){return null===Ee&&(Ee=new Be),Ee}get type(){return"system"}get name(){return(new Intl.DateTimeFormat).resolvedOptions().timeZone}get isUniversal(){return!1}offsetName(e,{format:t,locale:n}){return X(e,t,n)}formatOffset(e,t){return re(this.offset(e),t)}offset(e){return-new Date(e).getTimezoneOffset()}equals(e){return"system"===e.type}get isValid(){return!0}}let xe={};const De={year:0,month:1,day:2,era:3,hour:4,minute:5,second:6};let Me={};class Oe extends we{static create(e){return Me[e]||(Me[e]=new Oe(e)),Me[e]}static resetCache(){Me={},xe={}}static isValidSpecifier(e){return this.isValidZone(e)}static isValidZone(e){if(!e)return!1;try{return new Intl.DateTimeFormat("en-US",{timeZone:e}).format(),!0}catch(e){return!1}}constructor(e){super(),this.zoneName=e,this.valid=Oe.isValidZone(e)}get type(){return"iana"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(e,{format:t,locale:n}){return X(e,t,n,this.name)}formatOffset(e,t){return re(this.offset(e),t)}offset(e){const t=new Date(e);if(isNaN(t))return NaN;const n=(r=this.name,xe[r]||(xe[r]=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:r,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",era:"short"})),xe[r]);var r;let[i,a,o,s,l,c,u]=n.formatToParts?function(e,t){const n=e.formatToParts(t),r=[];for(let e=0;e=0?h:1e3+h,(G({year:i,month:a,day:o,hour:24===l?0:l,minute:c,second:u,millisecond:0})-d)/6e4}equals(e){return"iana"===e.type&&e.name===this.name}get isValid(){return this.valid}}let Te=null;class Se extends we{static get utcInstance(){return null===Te&&(Te=new Se(0)),Te}static instance(e){return 0===e?Se.utcInstance:new Se(e)}static parseSpecifier(e){if(e){const t=e.match(/^utc(?:([+-]\d{1,2})(?::(\d{2}))?)?$/i);if(t)return new Se(ee(t[1],t[2]))}return null}constructor(e){super(),this.fixed=e}get type(){return"fixed"}get name(){return 0===this.fixed?"UTC":`UTC${re(this.fixed,"narrow")}`}get ianaName(){return 0===this.fixed?"Etc/UTC":`Etc/GMT${re(-this.fixed,"narrow")}`}offsetName(){return this.name}formatOffset(e,t){return re(this.fixed,t)}get isUniversal(){return!0}offset(){return this.fixed}equals(e){return"fixed"===e.type&&e.fixed===this.fixed}get isValid(){return!0}}class Ne extends we{constructor(e){super(),this.zoneName=e}get type(){return"invalid"}get name(){return this.zoneName}get isUniversal(){return!1}offsetName(){return null}formatOffset(){return""}offset(){return NaN}equals(){return!1}get isValid(){return!1}}function Ie(e,t){if(j(e)||null===e)return t;if(e instanceof we)return e;if("string"==typeof e){const n=e.toLowerCase();return"local"===n||"system"===n?t:"utc"===n||"gmt"===n?Se.utcInstance:Se.parseSpecifier(n)||Oe.create(e)}return _(e)?Se.instance(e):"object"==typeof e&&e.offset&&"number"==typeof e.offset?e:new Ne(e)}let Fe,je=()=>Date.now(),_e="system",Le=null,Ve=null,$e=null;class Ue{static get now(){return je}static set now(e){je=e}static set defaultZone(e){_e=e}static get defaultZone(){return Ie(_e,Be.instance)}static get defaultLocale(){return Le}static set defaultLocale(e){Le=e}static get defaultNumberingSystem(){return Ve}static set defaultNumberingSystem(e){Ve=e}static get defaultOutputCalendar(){return $e}static set defaultOutputCalendar(e){$e=e}static get throwOnInvalid(){return Fe}static set throwOnInvalid(e){Fe=e}static resetCaches(){Je.resetCache(),Oe.resetCache()}}let Re={},ze={};function We(e,t={}){const n=JSON.stringify([e,t]);let r=ze[n];return r||(r=new Intl.DateTimeFormat(e,t),ze[n]=r),r}let Pe={},qe={},Ye=null;function He(e,t,n,r,i){const a=e.listingMode(n);return"error"===a?null:"en"===a?r(t):i(t)}class Ze{constructor(e,t,n){this.padTo=n.padTo||0,this.floor=n.floor||!1;const{padTo:r,floor:i,...a}=n;if(!t||Object.keys(a).length>0){const t={useGrouping:!1,...n};n.padTo>0&&(t.minimumIntegerDigits=n.padTo),this.inf=function(e,t={}){const n=JSON.stringify([e,t]);let r=Pe[n];return r||(r=new Intl.NumberFormat(e,t),Pe[n]=r),r}(e,t)}}format(e){if(this.inf){const t=this.floor?Math.floor(e):e;return this.inf.format(t)}return z(this.floor?Math.floor(e):Y(e,3),this.padTo)}}class Ke{constructor(e,t,n){let r;if(this.opts=n,e.zone.isUniversal){const t=e.offset/60*-1,i=t>=0?`Etc/GMT+${t}`:`Etc/GMT${t}`;0!==e.offset&&Oe.create(i).valid?(r=i,this.dt=e):(r="UTC",n.timeZoneName?this.dt=e:this.dt=0===e.offset?e:Hn.fromMillis(e.ts+60*e.offset*1e3))}else"system"===e.zone.type?this.dt=e:(this.dt=e,r=e.zone.name);const i={...this.opts};r&&(i.timeZone=r),this.dtf=We(t,i)}format(){return this.dtf.format(this.dt.toJSDate())}formatToParts(){return this.dtf.formatToParts(this.dt.toJSDate())}resolvedOptions(){return this.dtf.resolvedOptions()}}class Ge{constructor(e,t,n){this.opts={style:"long",...n},!t&&V()&&(this.rtf=function(e,t={}){const{base:n,...r}=t,i=JSON.stringify([e,r]);let a=qe[i];return a||(a=new Intl.RelativeTimeFormat(e,t),qe[i]=a),a}(e,n))}format(e,t){return this.rtf?this.rtf.format(e,t):function(e,t,n="always",r=!1){const i={years:["year","yr."],quarters:["quarter","qtr."],months:["month","mo."],weeks:["week","wk."],days:["day","day","days"],hours:["hour","hr."],minutes:["minute","min."],seconds:["second","sec."]},a=-1===["hours","minutes","seconds"].indexOf(e);if("auto"===n&&a){const n="days"===e;switch(t){case 1:return n?"tomorrow":`next ${i[e][0]}`;case-1:return n?"yesterday":`last ${i[e][0]}`;case 0:return n?"today":`this ${i[e][0]}`}}const o=Object.is(t,-0)||t<0,s=Math.abs(t),l=1===s,c=i[e],u=r?l?c[1]:c[2]||c[1]:l?i[e][0]:e;return o?`${s} ${u} ago`:`in ${s} ${u}`}(t,e,this.opts.numeric,"long"!==this.opts.style)}formatToParts(e,t){return this.rtf?this.rtf.formatToParts(e,t):[]}}class Je{static fromOpts(e){return Je.create(e.locale,e.numberingSystem,e.outputCalendar,e.defaultToEN)}static create(e,t,n,r=!1){const i=e||Ue.defaultLocale,a=i||(r?"en-US":Ye||(Ye=(new Intl.DateTimeFormat).resolvedOptions().locale,Ye)),o=t||Ue.defaultNumberingSystem,s=n||Ue.defaultOutputCalendar;return new Je(a,o,s,i)}static resetCache(){Ye=null,ze={},Pe={},qe={}}static fromObject({locale:e,numberingSystem:t,outputCalendar:n}={}){return Je.create(e,t,n)}constructor(e,t,n,r){const[i,a,o]=function(e){const t=e.indexOf("-u-");if(-1===t)return[e];{let n;const r=e.substring(0,t);try{n=We(e).resolvedOptions()}catch(e){n=We(r).resolvedOptions()}const{numberingSystem:i,calendar:a}=n;return[r,i,a]}}(e);this.locale=i,this.numberingSystem=t||a||null,this.outputCalendar=n||o||null,this.intl=function(e,t,n){return n||t?(e+="-u",n&&(e+=`-ca-${n}`),t&&(e+=`-nu-${t}`),e):e}(this.locale,this.numberingSystem,this.outputCalendar),this.weekdaysCache={format:{},standalone:{}},this.monthsCache={format:{},standalone:{}},this.meridiemCache=null,this.eraCache={},this.specifiedLocale=r,this.fastNumbersCached=null}get fastNumbers(){var e;return null==this.fastNumbersCached&&(this.fastNumbersCached=(!(e=this).numberingSystem||"latn"===e.numberingSystem)&&("latn"===e.numberingSystem||!e.locale||e.locale.startsWith("en")||"latn"===new Intl.DateTimeFormat(e.intl).resolvedOptions().numberingSystem)),this.fastNumbersCached}listingMode(){const e=this.isEnglish(),t=!(null!==this.numberingSystem&&"latn"!==this.numberingSystem||null!==this.outputCalendar&&"gregory"!==this.outputCalendar);return e&&t?"en":"intl"}clone(e){return e&&0!==Object.getOwnPropertyNames(e).length?Je.create(e.locale||this.specifiedLocale,e.numberingSystem||this.numberingSystem,e.outputCalendar||this.outputCalendar,e.defaultToEN||!1):this}redefaultToEN(e={}){return this.clone({...e,defaultToEN:!0})}redefaultToSystem(e={}){return this.clone({...e,defaultToEN:!1})}months(e,t=!1,n=!0){return He(this,e,n,ce,(()=>{const n=t?{month:e,day:"numeric"}:{month:e},r=t?"format":"standalone";return this.monthsCache[r][e]||(this.monthsCache[r][e]=function(e){const t=[];for(let n=1;n<=12;n++){const r=Hn.utc(2016,n,1);t.push(e(r))}return t}((e=>this.extract(e,n,"month")))),this.monthsCache[r][e]}))}weekdays(e,t=!1,n=!0){return He(this,e,n,fe,(()=>{const n=t?{weekday:e,year:"numeric",month:"long",day:"numeric"}:{weekday:e},r=t?"format":"standalone";return this.weekdaysCache[r][e]||(this.weekdaysCache[r][e]=function(e){const t=[];for(let n=1;n<=7;n++){const r=Hn.utc(2016,11,13+n);t.push(e(r))}return t}((e=>this.extract(e,n,"weekday")))),this.weekdaysCache[r][e]}))}meridiems(e=!0){return He(this,void 0,e,(()=>me),(()=>{if(!this.meridiemCache){const e={hour:"numeric",hourCycle:"h12"};this.meridiemCache=[Hn.utc(2016,11,13,9),Hn.utc(2016,11,13,19)].map((t=>this.extract(t,e,"dayperiod")))}return this.meridiemCache}))}eras(e,t=!0){return He(this,e,t,ye,(()=>{const t={era:e};return this.eraCache[e]||(this.eraCache[e]=[Hn.utc(-40,1,1),Hn.utc(2017,1,1)].map((e=>this.extract(e,t,"era")))),this.eraCache[e]}))}extract(e,t,n){const r=this.dtFormatter(e,t).formatToParts().find((e=>e.type.toLowerCase()===n));return r?r.value:null}numberFormatter(e={}){return new Ze(this.intl,e.forceSimple||this.fastNumbers,e)}dtFormatter(e,t={}){return new Ke(e,this.intl,t)}relFormatter(e={}){return new Ge(this.intl,this.isEnglish(),e)}listFormatter(e={}){return function(e,t={}){const n=JSON.stringify([e,t]);let r=Re[n];return r||(r=new Intl.ListFormat(e,t),Re[n]=r),r}(this.intl,e)}isEnglish(){return"en"===this.locale||"en-us"===this.locale.toLowerCase()||new Intl.DateTimeFormat(this.intl).resolvedOptions().locale.startsWith("en-us")}equals(e){return this.locale===e.locale&&this.numberingSystem===e.numberingSystem&&this.outputCalendar===e.outputCalendar}}function Qe(...e){const t=e.reduce(((e,t)=>e+t.source),"");return RegExp(`^${t}$`)}function Xe(...e){return t=>e.reduce((([e,n,r],i)=>{const[a,o,s]=i(t,r);return[{...e,...a},o||n,s]}),[{},null,1]).slice(0,2)}function et(e,...t){if(null==e)return[null,null];for(const[n,r]of t){const t=n.exec(e);if(t)return r(t)}return[null,null]}function tt(...e){return(t,n)=>{const r={};let i;for(i=0;ivoid 0!==e&&(t||e&&u)?-e:e;return[{years:h(P(n)),months:h(P(r)),weeks:h(P(i)),days:h(P(a)),hours:h(P(o)),minutes:h(P(s)),seconds:h(P(l),"-0"===l),milliseconds:h(q(c),d)}]}const gt={GMT:0,EDT:-240,EST:-300,CDT:-300,CST:-360,MDT:-360,MST:-420,PDT:-420,PST:-480};function yt(e,t,n,r,i,a,o){const s={year:2===t.length?Q(W(t)):W(t),month:se.indexOf(n)+1,day:W(r),hour:W(i),minute:W(a)};return o&&(s.second=W(o)),e&&(s.weekday=e.length>3?ue.indexOf(e)+1:de.indexOf(e)+1),s}const bt=/^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\s)?(\d{1,2})\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\s(\d{2,4})\s(\d\d):(\d\d)(?::(\d\d))?\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\d\d)(\d\d)))$/;function Ct(e){const[,t,n,r,i,a,o,s,l,c,u,d]=e,h=yt(t,i,r,n,a,o,s);let f;return f=l?gt[l]:c?0:ee(u,d),[h,new Se(f)]}const vt=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\d\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\d{4}) (\d\d):(\d\d):(\d\d) GMT$/,kt=/^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\d\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\d\d) (\d\d):(\d\d):(\d\d) GMT$/,wt=/^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \d|\d\d) (\d\d):(\d\d):(\d\d) (\d{4})$/;function Et(e){const[,t,n,r,i,a,o,s]=e;return[yt(t,i,r,n,a,o,s),Se.utcInstance]}function Bt(e){const[,t,n,r,i,a,o,s]=e;return[yt(t,s,n,r,i,a,o),Se.utcInstance]}const xt=Qe(/([+-]\d{6}|\d{4})(?:-?(\d\d)(?:-?(\d\d))?)?/,at),Dt=Qe(/(\d{4})-?W(\d\d)(?:-?(\d))?/,at),Mt=Qe(/(\d{4})-?(\d{3})/,at),Ot=Qe(it),Tt=Xe((function(e,t){return[{year:ut(e,t),month:ut(e,t+1,1),day:ut(e,t+2,1)},null,t+3]}),dt,ht,ft),St=Xe(ot,dt,ht,ft),Nt=Xe(st,dt,ht,ft),It=Xe(dt,ht,ft),Ft=Xe(dt),jt=Qe(/(\d{4})-(\d\d)-(\d\d)/,ct),_t=Qe(lt),Lt=Xe(dt,ht,ft),Vt={weeks:{days:7,hours:168,minutes:10080,seconds:604800,milliseconds:6048e5},days:{hours:24,minutes:1440,seconds:86400,milliseconds:864e5},hours:{minutes:60,seconds:3600,milliseconds:36e5},minutes:{seconds:60,milliseconds:6e4},seconds:{milliseconds:1e3}},$t={years:{quarters:4,months:12,weeks:52,days:365,hours:8760,minutes:525600,seconds:31536e3,milliseconds:31536e6},quarters:{months:3,weeks:13,days:91,hours:2184,minutes:131040,seconds:7862400,milliseconds:78624e5},months:{weeks:4,days:30,hours:720,minutes:43200,seconds:2592e3,milliseconds:2592e6},...Vt},Ut={years:{quarters:4,months:12,weeks:52.1775,days:365.2425,hours:8765.82,minutes:525949.2,seconds:525949.2*60,milliseconds:525949.2*60*1e3},quarters:{months:3,weeks:13.044375,days:91.310625,hours:2191.455,minutes:131487.3,seconds:525949.2*60/4,milliseconds:7889237999.999999},months:{weeks:4.3481250000000005,days:30.436875,hours:730.485,minutes:43829.1,seconds:2629746,milliseconds:2629746e3},...Vt},Rt=["years","quarters","months","weeks","days","hours","minutes","seconds","milliseconds"],zt=Rt.slice(0).reverse();function Wt(e,t,n=!1){const r={values:n?t.values:{...e.values,...t.values||{}},loc:e.loc.clone(t.loc),conversionAccuracy:t.conversionAccuracy||e.conversionAccuracy};return new qt(r)}function Pt(e,t,n,r,i){const a=e[i][n],o=t[n]/a,s=Math.sign(o)!==Math.sign(r[i])&&0!==r[i]&&Math.abs(o)<=1?function(e){return e<0?Math.floor(e):Math.ceil(e)}(o):Math.trunc(o);r[i]+=s,t[n]-=s*a}class qt{constructor(e){const t="longterm"===e.conversionAccuracy||!1;this.values=e.values,this.loc=e.loc||Je.create(),this.conversionAccuracy=t?"longterm":"casual",this.invalid=e.invalid||null,this.matrix=t?Ut:$t,this.isLuxonDuration=!0}static fromMillis(e,t){return qt.fromObject({milliseconds:e},t)}static fromObject(e,t={}){if(null==e||"object"!=typeof e)throw new l("Duration.fromObject: argument expected to be an object, got "+(null===e?"null":typeof e));return new qt({values:ne(e,qt.normalizeUnit),loc:Je.fromObject(t),conversionAccuracy:t.conversionAccuracy})}static fromDurationLike(e){if(_(e))return qt.fromMillis(e);if(qt.isDuration(e))return e;if("object"==typeof e)return qt.fromObject(e);throw new l(`Unknown duration argument ${e} of type ${typeof e}`)}static fromISO(e,t){const[n]=function(e){return et(e,[pt,At])}(e);return n?qt.fromObject(n,t):qt.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static fromISOTime(e,t){const[n]=function(e){return et(e,[mt,Ft])}(e);return n?qt.fromObject(n,t):qt.invalid("unparsable",`the input "${e}" can't be parsed as ISO 8601`)}static invalid(e,t=null){if(!e)throw new l("need to specify a reason the Duration is invalid");const n=e instanceof ke?e:new ke(e,t);if(Ue.throwOnInvalid)throw new a(n);return new qt({invalid:n})}static normalizeUnit(e){const t={year:"years",years:"years",quarter:"quarters",quarters:"quarters",month:"months",months:"months",week:"weeks",weeks:"weeks",day:"days",days:"days",hour:"hours",hours:"hours",minute:"minutes",minutes:"minutes",second:"seconds",seconds:"seconds",millisecond:"milliseconds",milliseconds:"milliseconds"}[e?e.toLowerCase():e];if(!t)throw new s(e);return t}static isDuration(e){return e&&e.isLuxonDuration||!1}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}toFormat(e,t={}){const n={...t,floor:!1!==t.round&&!1!==t.floor};return this.isValid?ve.create(this.loc,n).formatDurationFromString(this,e):"Invalid Duration"}toHuman(e={}){const t=Rt.map((t=>{const n=this.values[t];return j(n)?null:this.loc.numberFormatter({style:"unit",unitDisplay:"long",...e,unit:t.slice(0,-1)}).format(n)})).filter((e=>e));return this.loc.listFormatter({type:"conjunction",style:e.listStyle||"narrow",...e}).format(t)}toObject(){return this.isValid?{...this.values}:{}}toISO(){if(!this.isValid)return null;let e="P";return 0!==this.years&&(e+=this.years+"Y"),0===this.months&&0===this.quarters||(e+=this.months+3*this.quarters+"M"),0!==this.weeks&&(e+=this.weeks+"W"),0!==this.days&&(e+=this.days+"D"),0===this.hours&&0===this.minutes&&0===this.seconds&&0===this.milliseconds||(e+="T"),0!==this.hours&&(e+=this.hours+"H"),0!==this.minutes&&(e+=this.minutes+"M"),0===this.seconds&&0===this.milliseconds||(e+=Y(this.seconds+this.milliseconds/1e3,3)+"S"),"P"===e&&(e+="T0S"),e}toISOTime(e={}){if(!this.isValid)return null;const t=this.toMillis();if(t<0||t>=864e5)return null;e={suppressMilliseconds:!1,suppressSeconds:!1,includePrefix:!1,format:"extended",...e};const n=this.shiftTo("hours","minutes","seconds","milliseconds");let r="basic"===e.format?"hhmm":"hh:mm";e.suppressSeconds&&0===n.seconds&&0===n.milliseconds||(r+="basic"===e.format?"ss":":ss",e.suppressMilliseconds&&0===n.milliseconds||(r+=".SSS"));let i=n.toFormat(r);return e.includePrefix&&(i="T"+i),i}toJSON(){return this.toISO()}toString(){return this.toISO()}toMillis(){return this.as("milliseconds")}valueOf(){return this.toMillis()}plus(e){if(!this.isValid)return this;const t=qt.fromDurationLike(e),n={};for(const e of Rt)(U(t.values,e)||U(this.values,e))&&(n[e]=t.get(e)+this.get(e));return Wt(this,{values:n},!0)}minus(e){if(!this.isValid)return this;const t=qt.fromDurationLike(e);return this.plus(t.negate())}mapUnits(e){if(!this.isValid)return this;const t={};for(const n of Object.keys(this.values))t[n]=te(e(this.values[n],n));return Wt(this,{values:t},!0)}get(e){return this[qt.normalizeUnit(e)]}set(e){return this.isValid?Wt(this,{values:{...this.values,...ne(e,qt.normalizeUnit)}}):this}reconfigure({locale:e,numberingSystem:t,conversionAccuracy:n}={}){const r={loc:this.loc.clone({locale:e,numberingSystem:t})};return n&&(r.conversionAccuracy=n),Wt(this,r)}as(e){return this.isValid?this.shiftTo(e).get(e):NaN}normalize(){if(!this.isValid)return this;const e=this.toObject();return function(e,t){zt.reduce(((n,r)=>j(t[r])?n:(n&&Pt(e,t,n,t,r),r)),null)}(this.matrix,e),Wt(this,{values:e},!0)}shiftTo(...e){if(!this.isValid)return this;if(0===e.length)return this;e=e.map((e=>qt.normalizeUnit(e)));const t={},n={},r=this.toObject();let i;for(const a of Rt)if(e.indexOf(a)>=0){i=a;let e=0;for(const t in n)e+=this.matrix[t][a]*n[t],n[t]=0;_(r[a])&&(e+=r[a]);const o=Math.trunc(e);t[a]=o,n[a]=(1e3*e-1e3*o)/1e3;for(const e in r)Rt.indexOf(e)>Rt.indexOf(a)&&Pt(this.matrix,r,e,t,a)}else _(r[a])&&(n[a]=r[a]);for(const e in n)0!==n[e]&&(t[i]+=e===i?n[e]:n[e]/this.matrix[i][e]);return Wt(this,{values:t},!0).normalize()}negate(){if(!this.isValid)return this;const e={};for(const t of Object.keys(this.values))e[t]=0===this.values[t]?0:-this.values[t];return Wt(this,{values:e},!0)}get years(){return this.isValid?this.values.years||0:NaN}get quarters(){return this.isValid?this.values.quarters||0:NaN}get months(){return this.isValid?this.values.months||0:NaN}get weeks(){return this.isValid?this.values.weeks||0:NaN}get days(){return this.isValid?this.values.days||0:NaN}get hours(){return this.isValid?this.values.hours||0:NaN}get minutes(){return this.isValid?this.values.minutes||0:NaN}get seconds(){return this.isValid?this.values.seconds||0:NaN}get milliseconds(){return this.isValid?this.values.milliseconds||0:NaN}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}equals(e){if(!this.isValid||!e.isValid)return!1;if(!this.loc.equals(e.loc))return!1;for(const r of Rt)if(t=this.values[r],n=e.values[r],!(void 0===t||0===t?void 0===n||0===n:t===n))return!1;var t,n;return!0}}const Yt="Invalid Interval";class Ht{constructor(e){this.s=e.start,this.e=e.end,this.invalid=e.invalid||null,this.isLuxonInterval=!0}static invalid(e,t=null){if(!e)throw new l("need to specify a reason the Interval is invalid");const n=e instanceof ke?e:new ke(e,t);if(Ue.throwOnInvalid)throw new i(n);return new Ht({invalid:n})}static fromDateTimes(e,t){const n=Zn(e),r=Zn(t),i=function(e,t){return e&&e.isValid?t&&t.isValid?te}isBefore(e){return!!this.isValid&&this.e<=e}contains(e){return!!this.isValid&&this.s<=e&&this.e>e}set({start:e,end:t}={}){return this.isValid?Ht.fromDateTimes(e||this.s,t||this.e):this}splitAt(...e){if(!this.isValid)return[];const t=e.map(Zn).filter((e=>this.contains(e))).sort(),n=[];let{s:r}=this,i=0;for(;r+this.e?this.e:e;n.push(Ht.fromDateTimes(r,a)),r=a,i+=1}return n}splitBy(e){const t=qt.fromDurationLike(e);if(!this.isValid||!t.isValid||0===t.as("milliseconds"))return[];let n,{s:r}=this,i=1;const a=[];for(;re*i)));n=+e>+this.e?this.e:e,a.push(Ht.fromDateTimes(r,n)),r=n,i+=1}return a}divideEqually(e){return this.isValid?this.splitBy(this.length()/e).slice(0,e):[]}overlaps(e){return this.e>e.s&&this.s=e.e}equals(e){return!(!this.isValid||!e.isValid)&&this.s.equals(e.s)&&this.e.equals(e.e)}intersection(e){if(!this.isValid)return this;const t=this.s>e.s?this.s:e.s,n=this.e=n?null:Ht.fromDateTimes(t,n)}union(e){if(!this.isValid)return this;const t=this.se.e?this.e:e.e;return Ht.fromDateTimes(t,n)}static merge(e){const[t,n]=e.sort(((e,t)=>e.s-t.s)).reduce((([e,t],n)=>t?t.overlaps(n)||t.abutsStart(n)?[e,t.union(n)]:[e.concat([t]),n]:[e,n]),[[],null]);return n&&t.push(n),t}static xor(e){let t=null,n=0;const r=[],i=e.map((e=>[{time:e.s,type:"s"},{time:e.e,type:"e"}])),a=Array.prototype.concat(...i).sort(((e,t)=>e.time-t.time));for(const e of a)n+="s"===e.type?1:-1,1===n?t=e.time:(t&&+t!=+e.time&&r.push(Ht.fromDateTimes(t,e.time)),t=null);return Ht.merge(r)}difference(...e){return Ht.xor([this].concat(e)).map((e=>this.intersection(e))).filter((e=>e&&!e.isEmpty()))}toString(){return this.isValid?`[${this.s.toISO()} – ${this.e.toISO()})`:Yt}toISO(e){return this.isValid?`${this.s.toISO(e)}/${this.e.toISO(e)}`:Yt}toISODate(){return this.isValid?`${this.s.toISODate()}/${this.e.toISODate()}`:Yt}toISOTime(e){return this.isValid?`${this.s.toISOTime(e)}/${this.e.toISOTime(e)}`:Yt}toFormat(e,{separator:t=" – "}={}){return this.isValid?`${this.s.toFormat(e)}${t}${this.e.toFormat(e)}`:Yt}toDuration(e,t){return this.isValid?this.e.diff(this.s,e,t):qt.invalid(this.invalidReason)}mapEndpoints(e){return Ht.fromDateTimes(e(this.s),e(this.e))}}class Zt{static hasDST(e=Ue.defaultZone){const t=Hn.now().setZone(e).set({month:12});return!e.isUniversal&&t.offset!==t.set({month:6}).offset}static isValidIANAZone(e){return Oe.isValidZone(e)}static normalizeZone(e){return Ie(e,Ue.defaultZone)}static months(e="long",{locale:t=null,numberingSystem:n=null,locObj:r=null,outputCalendar:i="gregory"}={}){return(r||Je.create(t,n,i)).months(e)}static monthsFormat(e="long",{locale:t=null,numberingSystem:n=null,locObj:r=null,outputCalendar:i="gregory"}={}){return(r||Je.create(t,n,i)).months(e,!0)}static weekdays(e="long",{locale:t=null,numberingSystem:n=null,locObj:r=null}={}){return(r||Je.create(t,n,null)).weekdays(e)}static weekdaysFormat(e="long",{locale:t=null,numberingSystem:n=null,locObj:r=null}={}){return(r||Je.create(t,n,null)).weekdays(e,!0)}static meridiems({locale:e=null}={}){return Je.create(e).meridiems()}static eras(e="short",{locale:t=null}={}){return Je.create(t,null,"gregory").eras(e)}static features(){return{relative:V()}}}function Kt(e,t){const n=e=>e.toUTC(0,{keepLocalTime:!0}).startOf("day").valueOf(),r=n(t)-n(e);return Math.floor(qt.fromMillis(r).as("days"))}const Gt={arab:"[٠-٩]",arabext:"[۰-۹]",bali:"[᭐-᭙]",beng:"[০-৯]",deva:"[०-९]",fullwide:"[0-9]",gujr:"[૦-૯]",hanidec:"[〇|一|二|三|四|五|六|七|八|九]",khmr:"[០-៩]",knda:"[೦-೯]",laoo:"[໐-໙]",limb:"[᥆-᥏]",mlym:"[൦-൯]",mong:"[᠐-᠙]",mymr:"[၀-၉]",orya:"[୦-୯]",tamldec:"[௦-௯]",telu:"[౦-౯]",thai:"[๐-๙]",tibt:"[༠-༩]",latn:"\\d"},Jt={arab:[1632,1641],arabext:[1776,1785],bali:[6992,7001],beng:[2534,2543],deva:[2406,2415],fullwide:[65296,65303],gujr:[2790,2799],khmr:[6112,6121],knda:[3302,3311],laoo:[3792,3801],limb:[6470,6479],mlym:[3430,3439],mong:[6160,6169],mymr:[4160,4169],orya:[2918,2927],tamldec:[3046,3055],telu:[3174,3183],thai:[3664,3673],tibt:[3872,3881]},Qt=Gt.hanidec.replace(/[\[|\]]/g,"").split("");function Xt({numberingSystem:e},t=""){return new RegExp(`${Gt[e||"latn"]}${t}`)}function en(e,t=(e=>e)){return{regex:e,deser:([e])=>t(function(e){let t=parseInt(e,10);if(isNaN(t)){t="";for(let n=0;n=n&&r<=i&&(t+=r-n)}}return parseInt(t,10)}return t}(e))}}const tn=`[ ${String.fromCharCode(160)}]`,nn=new RegExp(tn,"g");function rn(e){return e.replace(/\./g,"\\.?").replace(nn,tn)}function an(e){return e.replace(/\./g,"").replace(nn," ").toLowerCase()}function on(e,t){return null===e?null:{regex:RegExp(e.map(rn).join("|")),deser:([n])=>e.findIndex((e=>an(n)===an(e)))+t}}function sn(e,t){return{regex:e,deser:([,e,t])=>ee(e,t),groups:t}}function ln(e){return{regex:e,deser:([e])=>e}}const cn={year:{"2-digit":"yy",numeric:"yyyyy"},month:{numeric:"M","2-digit":"MM",short:"MMM",long:"MMMM"},day:{numeric:"d","2-digit":"dd"},weekday:{short:"EEE",long:"EEEE"},dayperiod:"a",dayPeriod:"a",hour:{numeric:"h","2-digit":"hh"},minute:{numeric:"m","2-digit":"mm"},second:{numeric:"s","2-digit":"ss"}};let un=null;function dn(e,t,n){const r=function(e,t){return Array.prototype.concat(...e.map((e=>function(e,t){if(e.literal)return e;const n=ve.macroTokenToFormatOpts(e.val);if(!n)return e;const r=ve.create(t,n).formatDateTimeParts((un||(un=Hn.fromMillis(1555555555555)),un)).map((e=>function(e,t,n){const{type:r,value:i}=e;if("literal"===r)return{literal:!0,val:i};const a=n[r];let o=cn[r];return"object"==typeof o&&(o=o[a]),o?{literal:!1,val:o}:void 0}(e,0,n)));return r.includes(void 0)?e:r}(e,t))))}(ve.parseFormat(n),e),i=r.map((t=>function(e,t){const n=Xt(t),r=Xt(t,"{2}"),i=Xt(t,"{3}"),a=Xt(t,"{4}"),o=Xt(t,"{6}"),s=Xt(t,"{1,2}"),l=Xt(t,"{1,3}"),c=Xt(t,"{1,6}"),u=Xt(t,"{1,9}"),d=Xt(t,"{2,4}"),h=Xt(t,"{4,6}"),f=e=>{return{regex:RegExp((t=e.val,t.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&"))),deser:([e])=>e,literal:!0};var t},m=(m=>{if(e.literal)return f(m);switch(m.val){case"G":return on(t.eras("short",!1),0);case"GG":return on(t.eras("long",!1),0);case"y":return en(c);case"yy":case"kk":return en(d,Q);case"yyyy":case"kkkk":return en(a);case"yyyyy":return en(h);case"yyyyyy":return en(o);case"M":case"L":case"d":case"H":case"h":case"m":case"q":case"s":case"W":return en(s);case"MM":case"LL":case"dd":case"HH":case"hh":case"mm":case"qq":case"ss":case"WW":return en(r);case"MMM":return on(t.months("short",!0,!1),1);case"MMMM":return on(t.months("long",!0,!1),1);case"LLL":return on(t.months("short",!1,!1),1);case"LLLL":return on(t.months("long",!1,!1),1);case"o":case"S":return en(l);case"ooo":case"SSS":return en(i);case"u":return ln(u);case"uu":return ln(s);case"uuu":case"E":case"c":return en(n);case"a":return on(t.meridiems(),0);case"EEE":return on(t.weekdays("short",!1,!1),1);case"EEEE":return on(t.weekdays("long",!1,!1),1);case"ccc":return on(t.weekdays("short",!0,!1),1);case"cccc":return on(t.weekdays("long",!0,!1),1);case"Z":case"ZZ":return sn(new RegExp(`([+-]${s.source})(?::(${r.source}))?`),2);case"ZZZ":return sn(new RegExp(`([+-]${s.source})(${r.source})?`),2);case"z":return ln(/[a-z_+-/]{1,256}?/i);default:return f(m)}})(e)||{invalidReason:"missing Intl.DateTimeFormat.formatToParts support"};return m.token=e,m}(t,e))),a=i.find((e=>e.invalidReason));if(a)return{input:t,tokens:r,invalidReason:a.invalidReason};{const[e,n]=function(e){return[`^${e.map((e=>e.regex)).reduce(((e,t)=>`${e}(${t.source})`),"")}$`,e]}(i),a=RegExp(e,"i"),[s,l]=function(e,t,n){const r=e.match(t);if(r){const e={};let t=1;for(const i in n)if(U(n,i)){const a=n[i],o=a.groups?a.groups+1:1;!a.literal&&a.token&&(e[a.token.val[0]]=a.deser(r.slice(t,t+o))),t+=o}return[r,e]}return[r,{}]}(t,a,n),[c,u,d]=l?function(e){let t,n=null;return j(e.z)||(n=Oe.create(e.z)),j(e.Z)||(n||(n=new Se(e.Z)),t=e.Z),j(e.q)||(e.M=3*(e.q-1)+1),j(e.h)||(e.h<12&&1===e.a?e.h+=12:12===e.h&&0===e.a&&(e.h=0)),0===e.G&&e.y&&(e.y=-e.y),j(e.u)||(e.S=q(e.u)),[Object.keys(e).reduce(((t,n)=>{const r=(e=>{switch(e){case"S":return"millisecond";case"s":return"second";case"m":return"minute";case"h":case"H":return"hour";case"d":return"day";case"o":return"ordinal";case"L":case"M":return"month";case"y":return"year";case"E":case"c":return"weekday";case"W":return"weekNumber";case"k":return"weekYear";case"q":return"quarter";default:return null}})(n);return r&&(t[r]=e[n]),t}),{}),n,t]}(l):[null,null,void 0];if(U(l,"a")&&U(l,"H"))throw new o("Can't include meridiem when specifying 24-hour format");return{input:t,tokens:r,regex:a,rawMatches:s,matches:l,result:c,zone:u,specificOffset:d}}}const hn=[0,31,59,90,120,151,181,212,243,273,304,334],fn=[0,31,60,91,121,152,182,213,244,274,305,335];function mn(e,t){return new ke("unit out of range",`you specified ${t} (of type ${typeof t}) as a ${e}, which is invalid`)}function pn(e,t,n){const r=new Date(Date.UTC(e,t-1,n));e<100&&e>=0&&r.setUTCFullYear(r.getUTCFullYear()-1900);const i=r.getUTCDay();return 0===i?7:i}function An(e,t,n){return n+(H(e)?fn:hn)[t-1]}function gn(e,t){const n=H(e)?fn:hn,r=n.findIndex((e=>eJ(t)?(o=t+1,s=1):o=t,{weekYear:o,weekNumber:s,weekday:a,...ie(e)}}function bn(e){const{weekYear:t,weekNumber:n,weekday:r}=e,i=pn(t,1,4),a=Z(t);let o,s=7*n+r-i-3;s<1?(o=t-1,s+=Z(o)):s>a?(o=t+1,s-=Z(t)):o=t;const{month:l,day:c}=gn(o,s);return{year:o,month:l,day:c,...ie(e)}}function Cn(e){const{year:t,month:n,day:r}=e;return{year:t,ordinal:An(t,n,r),...ie(e)}}function vn(e){const{year:t,ordinal:n}=e,{month:r,day:i}=gn(t,n);return{year:t,month:r,day:i,...ie(e)}}function kn(e){const t=L(e.year),n=R(e.month,1,12),r=R(e.day,1,K(e.year,e.month));return t?n?!r&&mn("day",e.day):mn("month",e.month):mn("year",e.year)}function wn(e){const{hour:t,minute:n,second:r,millisecond:i}=e,a=R(t,0,23)||24===t&&0===n&&0===r&&0===i,o=R(n,0,59),s=R(r,0,59),l=R(i,0,999);return a?o?s?!l&&mn("millisecond",i):mn("second",r):mn("minute",n):mn("hour",t)}const En="Invalid DateTime",Bn=864e13;function xn(e){return new ke("unsupported zone",`the zone "${e.name}" is not supported`)}function Dn(e){return null===e.weekData&&(e.weekData=yn(e.c)),e.weekData}function Mn(e,t){const n={ts:e.ts,zone:e.zone,c:e.c,o:e.o,loc:e.loc,invalid:e.invalid};return new Hn({...n,...t,old:n})}function On(e,t,n){let r=e-60*t*1e3;const i=n.offset(r);if(t===i)return[r,t];r-=60*(i-t)*1e3;const a=n.offset(r);return i===a?[r,i]:[e-60*Math.min(i,a)*1e3,Math.max(i,a)]}function Tn(e,t){const n=new Date(e+=60*t*1e3);return{year:n.getUTCFullYear(),month:n.getUTCMonth()+1,day:n.getUTCDate(),hour:n.getUTCHours(),minute:n.getUTCMinutes(),second:n.getUTCSeconds(),millisecond:n.getUTCMilliseconds()}}function Sn(e,t,n){return On(G(e),t,n)}function Nn(e,t){const n=e.o,r=e.c.year+Math.trunc(t.years),i=e.c.month+Math.trunc(t.months)+3*Math.trunc(t.quarters),a={...e.c,year:r,month:i,day:Math.min(e.c.day,K(r,i))+Math.trunc(t.days)+7*Math.trunc(t.weeks)},o=qt.fromObject({years:t.years-Math.trunc(t.years),quarters:t.quarters-Math.trunc(t.quarters),months:t.months-Math.trunc(t.months),weeks:t.weeks-Math.trunc(t.weeks),days:t.days-Math.trunc(t.days),hours:t.hours,minutes:t.minutes,seconds:t.seconds,milliseconds:t.milliseconds}).as("milliseconds"),s=G(a);let[l,c]=On(s,n,e.zone);return 0!==o&&(l+=o,c=e.zone.offset(l)),{ts:l,o:c}}function In(e,t,n,r,i,a){const{setZone:o,zone:s}=n;if(e&&0!==Object.keys(e).length){const r=t||s,i=Hn.fromObject(e,{...n,zone:r,specificOffset:a});return o?i:i.setZone(s)}return Hn.invalid(new ke("unparsable",`the input "${i}" can't be parsed as ${r}`))}function Fn(e,t,n=!0){return e.isValid?ve.create(Je.create("en-US"),{allowZ:n,forceSimple:!0}).formatDateTimeFromString(e,t):null}function jn(e,t){const n=e.c.year>9999||e.c.year<0;let r="";return n&&e.c.year>=0&&(r+="+"),r+=z(e.c.year,n?6:4),t?(r+="-",r+=z(e.c.month),r+="-",r+=z(e.c.day)):(r+=z(e.c.month),r+=z(e.c.day)),r}function _n(e,t,n,r,i,a){let o=z(e.c.hour);return t?(o+=":",o+=z(e.c.minute),0===e.c.second&&n||(o+=":")):o+=z(e.c.minute),0===e.c.second&&n||(o+=z(e.c.second),0===e.c.millisecond&&r||(o+=".",o+=z(e.c.millisecond,3))),i&&(e.isOffsetFixed&&0===e.offset&&!a?o+="Z":e.o<0?(o+="-",o+=z(Math.trunc(-e.o/60)),o+=":",o+=z(Math.trunc(-e.o%60))):(o+="+",o+=z(Math.trunc(e.o/60)),o+=":",o+=z(Math.trunc(e.o%60)))),a&&(o+="["+e.zone.ianaName+"]"),o}const Ln={month:1,day:1,hour:0,minute:0,second:0,millisecond:0},Vn={weekNumber:1,weekday:1,hour:0,minute:0,second:0,millisecond:0},$n={ordinal:1,hour:0,minute:0,second:0,millisecond:0},Un=["year","month","day","hour","minute","second","millisecond"],Rn=["weekYear","weekNumber","weekday","hour","minute","second","millisecond"],zn=["year","ordinal","hour","minute","second","millisecond"];function Wn(e){const t={year:"year",years:"year",month:"month",months:"month",day:"day",days:"day",hour:"hour",hours:"hour",minute:"minute",minutes:"minute",quarter:"quarter",quarters:"quarter",second:"second",seconds:"second",millisecond:"millisecond",milliseconds:"millisecond",weekday:"weekday",weekdays:"weekday",weeknumber:"weekNumber",weeksnumber:"weekNumber",weeknumbers:"weekNumber",weekyear:"weekYear",weekyears:"weekYear",ordinal:"ordinal"}[e.toLowerCase()];if(!t)throw new s(e);return t}function Pn(e,t){const n=Ie(t.zone,Ue.defaultZone),r=Je.fromObject(t),i=Ue.now();let a,o;if(j(e.year))a=i;else{for(const t of Un)j(e[t])&&(e[t]=Ln[t]);const t=kn(e)||wn(e);if(t)return Hn.invalid(t);const r=n.offset(i);[a,o]=Sn(e,r,n)}return new Hn({ts:a,zone:n,loc:r,o})}function qn(e,t,n){const r=!!j(n.round)||n.round,i=(e,i)=>(e=Y(e,r||n.calendary?0:2,!0),t.loc.clone(n).relFormatter(n).format(e,i)),a=r=>n.calendary?t.hasSame(e,r)?0:t.startOf(r).diff(e.startOf(r),r).get(r):t.diff(e,r).get(r);if(n.unit)return i(a(n.unit),n.unit);for(const e of n.units){const t=a(e);if(Math.abs(t)>=1)return i(t,e)}return i(e>t?-0:0,n.units[n.units.length-1])}function Yn(e){let t,n={};return e.length>0&&"object"==typeof e[e.length-1]?(n=e[e.length-1],t=Array.from(e).slice(0,e.length-1)):t=Array.from(e),[n,t]}class Hn{constructor(e){const t=e.zone||Ue.defaultZone;let n=e.invalid||(Number.isNaN(e.ts)?new ke("invalid input"):null)||(t.isValid?null:xn(t));this.ts=j(e.ts)?Ue.now():e.ts;let r=null,i=null;if(!n)if(e.old&&e.old.ts===this.ts&&e.old.zone.equals(t))[r,i]=[e.old.c,e.old.o];else{const e=t.offset(this.ts);r=Tn(this.ts,e),n=Number.isNaN(r.year)?new ke("invalid input"):null,r=n?null:r,i=n?null:e}this._zone=t,this.loc=e.loc||Je.create(),this.invalid=n,this.weekData=null,this.c=r,this.o=i,this.isLuxonDateTime=!0}static now(){return new Hn({})}static local(){const[e,t]=Yn(arguments),[n,r,i,a,o,s,l]=t;return Pn({year:n,month:r,day:i,hour:a,minute:o,second:s,millisecond:l},e)}static utc(){const[e,t]=Yn(arguments),[n,r,i,a,o,s,l]=t;return e.zone=Se.utcInstance,Pn({year:n,month:r,day:i,hour:a,minute:o,second:s,millisecond:l},e)}static fromJSDate(e,t={}){const n=(r=e,"[object Date]"===Object.prototype.toString.call(r)?e.valueOf():NaN);var r;if(Number.isNaN(n))return Hn.invalid("invalid input");const i=Ie(t.zone,Ue.defaultZone);return i.isValid?new Hn({ts:n,zone:i,loc:Je.fromObject(t)}):Hn.invalid(xn(i))}static fromMillis(e,t={}){if(_(e))return e<-Bn||e>Bn?Hn.invalid("Timestamp out of range"):new Hn({ts:e,zone:Ie(t.zone,Ue.defaultZone),loc:Je.fromObject(t)});throw new l(`fromMillis requires a numerical input, but received a ${typeof e} with value ${e}`)}static fromSeconds(e,t={}){if(_(e))return new Hn({ts:1e3*e,zone:Ie(t.zone,Ue.defaultZone),loc:Je.fromObject(t)});throw new l("fromSeconds requires a numerical input")}static fromObject(e,t={}){e=e||{};const n=Ie(t.zone,Ue.defaultZone);if(!n.isValid)return Hn.invalid(xn(n));const r=Ue.now(),i=j(t.specificOffset)?n.offset(r):t.specificOffset,a=ne(e,Wn),s=!j(a.ordinal),l=!j(a.year),c=!j(a.month)||!j(a.day),u=l||c,d=a.weekYear||a.weekNumber,h=Je.fromObject(t);if((u||s)&&d)throw new o("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(c&&s)throw new o("Can't mix ordinal dates with month/day");const f=d||a.weekday&&!u;let m,p,A=Tn(r,i);f?(m=Rn,p=Vn,A=yn(A)):s?(m=zn,p=$n,A=Cn(A)):(m=Un,p=Ln);let g=!1;for(const e of m)j(a[e])?a[e]=g?p[e]:A[e]:g=!0;const y=f?function(e){const t=L(e.weekYear),n=R(e.weekNumber,1,J(e.weekYear)),r=R(e.weekday,1,7);return t?n?!r&&mn("weekday",e.weekday):mn("week",e.week):mn("weekYear",e.weekYear)}(a):s?function(e){const t=L(e.year),n=R(e.ordinal,1,Z(e.year));return t?!n&&mn("ordinal",e.ordinal):mn("year",e.year)}(a):kn(a),b=y||wn(a);if(b)return Hn.invalid(b);const C=f?bn(a):s?vn(a):a,[v,k]=Sn(C,i,n),w=new Hn({ts:v,zone:n,o:k,loc:h});return a.weekday&&u&&e.weekday!==w.weekday?Hn.invalid("mismatched weekday",`you can't specify both a weekday of ${a.weekday} and a date of ${w.toISO()}`):w}static fromISO(e,t={}){const[n,r]=function(e){return et(e,[xt,Tt],[Dt,St],[Mt,Nt],[Ot,It])}(e);return In(n,r,t,"ISO 8601",e)}static fromRFC2822(e,t={}){const[n,r]=function(e){return et(function(e){return e.replace(/\([^()]*\)|[\n\t]/g," ").replace(/(\s\s+)/g," ").trim()}(e),[bt,Ct])}(e);return In(n,r,t,"RFC 2822",e)}static fromHTTP(e,t={}){const[n,r]=function(e){return et(e,[vt,Et],[kt,Et],[wt,Bt])}(e);return In(n,r,t,"HTTP",t)}static fromFormat(e,t,n={}){if(j(e)||j(t))throw new l("fromFormat requires an input string and a format");const{locale:r=null,numberingSystem:i=null}=n,a=Je.fromOpts({locale:r,numberingSystem:i,defaultToEN:!0}),[o,s,c,u]=function(e,t,n){const{result:r,zone:i,specificOffset:a,invalidReason:o}=dn(e,t,n);return[r,i,a,o]}(a,e,t);return u?Hn.invalid(u):In(o,s,n,`format ${t}`,e,c)}static fromString(e,t,n={}){return Hn.fromFormat(e,t,n)}static fromSQL(e,t={}){const[n,r]=function(e){return et(e,[jt,Tt],[_t,Lt])}(e);return In(n,r,t,"SQL",e)}static invalid(e,t=null){if(!e)throw new l("need to specify a reason the DateTime is invalid");const n=e instanceof ke?e:new ke(e,t);if(Ue.throwOnInvalid)throw new r(n);return new Hn({invalid:n})}static isDateTime(e){return e&&e.isLuxonDateTime||!1}get(e){return this[e]}get isValid(){return null===this.invalid}get invalidReason(){return this.invalid?this.invalid.reason:null}get invalidExplanation(){return this.invalid?this.invalid.explanation:null}get locale(){return this.isValid?this.loc.locale:null}get numberingSystem(){return this.isValid?this.loc.numberingSystem:null}get outputCalendar(){return this.isValid?this.loc.outputCalendar:null}get zone(){return this._zone}get zoneName(){return this.isValid?this.zone.name:null}get year(){return this.isValid?this.c.year:NaN}get quarter(){return this.isValid?Math.ceil(this.c.month/3):NaN}get month(){return this.isValid?this.c.month:NaN}get day(){return this.isValid?this.c.day:NaN}get hour(){return this.isValid?this.c.hour:NaN}get minute(){return this.isValid?this.c.minute:NaN}get second(){return this.isValid?this.c.second:NaN}get millisecond(){return this.isValid?this.c.millisecond:NaN}get weekYear(){return this.isValid?Dn(this).weekYear:NaN}get weekNumber(){return this.isValid?Dn(this).weekNumber:NaN}get weekday(){return this.isValid?Dn(this).weekday:NaN}get ordinal(){return this.isValid?Cn(this.c).ordinal:NaN}get monthShort(){return this.isValid?Zt.months("short",{locObj:this.loc})[this.month-1]:null}get monthLong(){return this.isValid?Zt.months("long",{locObj:this.loc})[this.month-1]:null}get weekdayShort(){return this.isValid?Zt.weekdays("short",{locObj:this.loc})[this.weekday-1]:null}get weekdayLong(){return this.isValid?Zt.weekdays("long",{locObj:this.loc})[this.weekday-1]:null}get offset(){return this.isValid?+this.o:NaN}get offsetNameShort(){return this.isValid?this.zone.offsetName(this.ts,{format:"short",locale:this.locale}):null}get offsetNameLong(){return this.isValid?this.zone.offsetName(this.ts,{format:"long",locale:this.locale}):null}get isOffsetFixed(){return this.isValid?this.zone.isUniversal:null}get isInDST(){return!this.isOffsetFixed&&(this.offset>this.set({month:1,day:1}).offset||this.offset>this.set({month:5}).offset)}get isInLeapYear(){return H(this.year)}get daysInMonth(){return K(this.year,this.month)}get daysInYear(){return this.isValid?Z(this.year):NaN}get weeksInWeekYear(){return this.isValid?J(this.weekYear):NaN}resolvedLocaleOptions(e={}){const{locale:t,numberingSystem:n,calendar:r}=ve.create(this.loc.clone(e),e).resolvedOptions(this);return{locale:t,numberingSystem:n,outputCalendar:r}}toUTC(e=0,t={}){return this.setZone(Se.instance(e),t)}toLocal(){return this.setZone(Ue.defaultZone)}setZone(e,{keepLocalTime:t=!1,keepCalendarTime:n=!1}={}){if((e=Ie(e,Ue.defaultZone)).equals(this.zone))return this;if(e.isValid){let r=this.ts;if(t||n){const t=e.offset(this.ts),n=this.toObject();[r]=Sn(n,t,e)}return Mn(this,{ts:r,zone:e})}return Hn.invalid(xn(e))}reconfigure({locale:e,numberingSystem:t,outputCalendar:n}={}){return Mn(this,{loc:this.loc.clone({locale:e,numberingSystem:t,outputCalendar:n})})}setLocale(e){return this.reconfigure({locale:e})}set(e){if(!this.isValid)return this;const t=ne(e,Wn),n=!j(t.weekYear)||!j(t.weekNumber)||!j(t.weekday),r=!j(t.ordinal),i=!j(t.year),a=!j(t.month)||!j(t.day),s=i||a,l=t.weekYear||t.weekNumber;if((s||r)&&l)throw new o("Can't mix weekYear/weekNumber units with year/month/day or ordinals");if(a&&r)throw new o("Can't mix ordinal dates with month/day");let c;n?c=bn({...yn(this.c),...t}):j(t.ordinal)?(c={...this.toObject(),...t},j(t.day)&&(c.day=Math.min(K(c.year,c.month),c.day))):c=vn({...Cn(this.c),...t});const[u,d]=Sn(c,this.o,this.zone);return Mn(this,{ts:u,o:d})}plus(e){return this.isValid?Mn(this,Nn(this,qt.fromDurationLike(e))):this}minus(e){return this.isValid?Mn(this,Nn(this,qt.fromDurationLike(e).negate())):this}startOf(e){if(!this.isValid)return this;const t={},n=qt.normalizeUnit(e);switch(n){case"years":t.month=1;case"quarters":case"months":t.day=1;case"weeks":case"days":t.hour=0;case"hours":t.minute=0;case"minutes":t.second=0;case"seconds":t.millisecond=0}if("weeks"===n&&(t.weekday=1),"quarters"===n){const e=Math.ceil(this.month/3);t.month=3*(e-1)+1}return this.set(t)}endOf(e){return this.isValid?this.plus({[e]:1}).startOf(e).minus(1):this}toFormat(e,t={}){return this.isValid?ve.create(this.loc.redefaultToEN(t)).formatDateTimeFromString(this,e):En}toLocaleString(e=f,t={}){return this.isValid?ve.create(this.loc.clone(t),e).formatDateTime(this):En}toLocaleParts(e={}){return this.isValid?ve.create(this.loc.clone(e),e).formatDateTimeParts(this):[]}toISO({format:e="extended",suppressSeconds:t=!1,suppressMilliseconds:n=!1,includeOffset:r=!0,extendedZone:i=!1}={}){if(!this.isValid)return null;const a="extended"===e;let o=jn(this,a);return o+="T",o+=_n(this,a,t,n,r,i),o}toISODate({format:e="extended"}={}){return this.isValid?jn(this,"extended"===e):null}toISOWeekDate(){return Fn(this,"kkkk-'W'WW-c")}toISOTime({suppressMilliseconds:e=!1,suppressSeconds:t=!1,includeOffset:n=!0,includePrefix:r=!1,extendedZone:i=!1,format:a="extended"}={}){return this.isValid?(r?"T":"")+_n(this,"extended"===a,t,e,n,i):null}toRFC2822(){return Fn(this,"EEE, dd LLL yyyy HH:mm:ss ZZZ",!1)}toHTTP(){return Fn(this.toUTC(),"EEE, dd LLL yyyy HH:mm:ss 'GMT'")}toSQLDate(){return this.isValid?jn(this,!0):null}toSQLTime({includeOffset:e=!0,includeZone:t=!1,includeOffsetSpace:n=!0}={}){let r="HH:mm:ss.SSS";return(t||e)&&(n&&(r+=" "),t?r+="z":e&&(r+="ZZ")),Fn(this,r,!0)}toSQL(e={}){return this.isValid?`${this.toSQLDate()} ${this.toSQLTime(e)}`:null}toString(){return this.isValid?this.toISO():En}valueOf(){return this.toMillis()}toMillis(){return this.isValid?this.ts:NaN}toSeconds(){return this.isValid?this.ts/1e3:NaN}toUnixInteger(){return this.isValid?Math.floor(this.ts/1e3):NaN}toJSON(){return this.toISO()}toBSON(){return this.toJSDate()}toObject(e={}){if(!this.isValid)return{};const t={...this.c};return e.includeConfig&&(t.outputCalendar=this.outputCalendar,t.numberingSystem=this.loc.numberingSystem,t.locale=this.loc.locale),t}toJSDate(){return new Date(this.isValid?this.ts:NaN)}diff(e,t="milliseconds",n={}){if(!this.isValid||!e.isValid)return qt.invalid("created by diffing an invalid DateTime");const r={locale:this.locale,numberingSystem:this.numberingSystem,...n},i=(s=t,Array.isArray(s)?s:[s]).map(qt.normalizeUnit),a=e.valueOf()>this.valueOf(),o=function(e,t,n,r){let[i,a,o,s]=function(e,t,n){const r=[["years",(e,t)=>t.year-e.year],["quarters",(e,t)=>t.quarter-e.quarter],["months",(e,t)=>t.month-e.month+12*(t.year-e.year)],["weeks",(e,t)=>{const n=Kt(e,t);return(n-n%7)/7}],["days",Kt]],i={};let a,o;for(const[s,l]of r)if(n.indexOf(s)>=0){a=s;let n=l(e,t);o=e.plus({[s]:n}),o>t?(e=e.plus({[s]:n-1}),n-=1):e=o,i[s]=n}return[e,i,o,a]}(e,t,n);const l=t-i,c=n.filter((e=>["hours","minutes","seconds","milliseconds"].indexOf(e)>=0));0===c.length&&(o0?qt.fromMillis(l,r).shiftTo(...c).plus(u):u}(a?this:e,a?e:this,i,r);var s;return a?o.negate():o}diffNow(e="milliseconds",t={}){return this.diff(Hn.now(),e,t)}until(e){return this.isValid?Ht.fromDateTimes(this,e):this}hasSame(e,t){if(!this.isValid)return!1;const n=e.valueOf(),r=this.setZone(e.zone,{keepLocalTime:!0});return r.startOf(t)<=n&&n<=r.endOf(t)}equals(e){return this.isValid&&e.isValid&&this.valueOf()===e.valueOf()&&this.zone.equals(e.zone)&&this.loc.equals(e.loc)}toRelative(e={}){if(!this.isValid)return null;const t=e.base||Hn.fromObject({},{zone:this.zone}),n=e.padding?thise.valueOf()),Math.min)}static max(...e){if(!e.every(Hn.isDateTime))throw new l("max requires all arguments be DateTimes");return $(e,(e=>e.valueOf()),Math.max)}static fromFormatExplain(e,t,n={}){const{locale:r=null,numberingSystem:i=null}=n;return dn(Je.fromOpts({locale:r,numberingSystem:i,defaultToEN:!0}),e,t)}static fromStringExplain(e,t,n={}){return Hn.fromFormatExplain(e,t,n)}static get DATE_SHORT(){return f}static get DATE_MED(){return m}static get DATE_MED_WITH_WEEKDAY(){return p}static get DATE_FULL(){return A}static get DATE_HUGE(){return g}static get TIME_SIMPLE(){return y}static get TIME_WITH_SECONDS(){return b}static get TIME_WITH_SHORT_OFFSET(){return C}static get TIME_WITH_LONG_OFFSET(){return v}static get TIME_24_SIMPLE(){return k}static get TIME_24_WITH_SECONDS(){return w}static get TIME_24_WITH_SHORT_OFFSET(){return E}static get TIME_24_WITH_LONG_OFFSET(){return B}static get DATETIME_SHORT(){return x}static get DATETIME_SHORT_WITH_SECONDS(){return D}static get DATETIME_MED(){return M}static get DATETIME_MED_WITH_SECONDS(){return O}static get DATETIME_MED_WITH_WEEKDAY(){return T}static get DATETIME_FULL(){return S}static get DATETIME_FULL_WITH_SECONDS(){return N}static get DATETIME_HUGE(){return I}static get DATETIME_HUGE_WITH_SECONDS(){return F}}function Zn(e){if(Hn.isDateTime(e))return e;if(e&&e.valueOf&&_(e.valueOf()))return Hn.fromJSDate(e);if(e&&"object"==typeof e)return Hn.fromObject(e);throw new l(`Unknown datetime argument: ${e}, of type ${typeof e}`)}t.DateTime=Hn,t.Duration=qt,t.FixedOffsetZone=Se,t.IANAZone=Oe,t.Info=Zt,t.Interval=Ht,t.InvalidZone=Ne,t.Settings=Ue,t.SystemZone=Be,t.VERSION="2.5.2",t.Zone=we},508:(e,t,n)=>{n.r(t),n.d(t,{default:()=>le});var r=["onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition"],i={_disable:[],allowInput:!1,allowInvalidPreload:!1,altFormat:"F j, Y",altInput:!1,altInputClass:"form-control input",animate:"object"==typeof window&&-1===window.navigator.userAgent.indexOf("MSIE"),ariaDateFormat:"F j, Y",autoFillDefaultTime:!0,clickOpens:!0,closeOnSelect:!0,conjunction:", ",dateFormat:"Y-m-d",defaultHour:12,defaultMinute:0,defaultSeconds:0,disable:[],disableMobile:!1,enableSeconds:!1,enableTime:!1,errorHandler:function(e){return"undefined"!=typeof console&&console.warn(e)},getWeek:function(e){var t=new Date(e.getTime());t.setHours(0,0,0,0),t.setDate(t.getDate()+3-(t.getDay()+6)%7);var n=new Date(t.getFullYear(),0,4);return 1+Math.round(((t.getTime()-n.getTime())/864e5-3+(n.getDay()+6)%7)/7)},hourIncrement:1,ignoredFocusElements:[],inline:!1,locale:"default",minuteIncrement:5,mode:"single",monthSelectorType:"dropdown",nextArrow:"",noCalendar:!1,now:new Date,onChange:[],onClose:[],onDayCreate:[],onDestroy:[],onKeyDown:[],onMonthChange:[],onOpen:[],onParseConfig:[],onReady:[],onValueUpdate:[],onYearChange:[],onPreCalendarPosition:[],plugins:[],position:"auto",positionElement:void 0,prevArrow:"",shorthandCurrentMonth:!1,showMonths:1,static:!1,time_24hr:!1,weekNumbers:!1,wrap:!1},a={weekdays:{shorthand:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],longhand:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},months:{shorthand:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],longhand:["January","February","March","April","May","June","July","August","September","October","November","December"]},daysInMonth:[31,28,31,30,31,30,31,31,30,31,30,31],firstDayOfWeek:0,ordinal:function(e){var t=e%100;if(t>3&&t<21)return"th";switch(t%10){case 1:return"st";case 2:return"nd";case 3:return"rd";default:return"th"}},rangeSeparator:" to ",weekAbbreviation:"Wk",scrollTitle:"Scroll to increment",toggleTitle:"Click to toggle",amPM:["AM","PM"],yearAriaLabel:"Year",monthAriaLabel:"Month",hourAriaLabel:"Hour",minuteAriaLabel:"Minute",time_24hr:!1};const o=a;var s=function(e,t){return void 0===t&&(t=2),("000"+e).slice(-1*t)},l=function(e){return!0===e?1:0};function c(e,t){var n;return function(){var r=this,i=arguments;clearTimeout(n),n=setTimeout((function(){return e.apply(r,i)}),t)}}var u=function(e){return e instanceof Array?e:[e]};function d(e,t,n){if(!0===n)return e.classList.add(t);e.classList.remove(t)}function h(e,t,n){var r=window.document.createElement(e);return t=t||"",n=n||"",r.className=t,void 0!==n&&(r.textContent=n),r}function f(e){for(;e.firstChild;)e.removeChild(e.firstChild)}function m(e,t){return t(e)?e:e.parentNode?m(e.parentNode,t):void 0}function p(e,t){var n=h("div","numInputWrapper"),r=h("input","numInput "+e),i=h("span","arrowUp"),a=h("span","arrowDown");if(-1===navigator.userAgent.indexOf("MSIE 9.0")?r.type="number":(r.type="text",r.pattern="\\d*"),void 0!==t)for(var o in t)r.setAttribute(o,t[o]);return n.appendChild(r),n.appendChild(i),n.appendChild(a),n}function A(e){try{return"function"==typeof e.composedPath?e.composedPath()[0]:e.target}catch(t){return e.target}}var g=function(){},y=function(e,t,n){return n.months[t?"shorthand":"longhand"][e]},b={D:g,F:function(e,t,n){e.setMonth(n.months.longhand.indexOf(t))},G:function(e,t){e.setHours((e.getHours()>=12?12:0)+parseFloat(t))},H:function(e,t){e.setHours(parseFloat(t))},J:function(e,t){e.setDate(parseFloat(t))},K:function(e,t,n){e.setHours(e.getHours()%12+12*l(new RegExp(n.amPM[1],"i").test(t)))},M:function(e,t,n){e.setMonth(n.months.shorthand.indexOf(t))},S:function(e,t){e.setSeconds(parseFloat(t))},U:function(e,t){return new Date(1e3*parseFloat(t))},W:function(e,t,n){var r=parseInt(t),i=new Date(e.getFullYear(),0,2+7*(r-1),0,0,0,0);return i.setDate(i.getDate()-i.getDay()+n.firstDayOfWeek),i},Y:function(e,t){e.setFullYear(parseFloat(t))},Z:function(e,t){return new Date(t)},d:function(e,t){e.setDate(parseFloat(t))},h:function(e,t){e.setHours((e.getHours()>=12?12:0)+parseFloat(t))},i:function(e,t){e.setMinutes(parseFloat(t))},j:function(e,t){e.setDate(parseFloat(t))},l:g,m:function(e,t){e.setMonth(parseFloat(t)-1)},n:function(e,t){e.setMonth(parseFloat(t)-1)},s:function(e,t){e.setSeconds(parseFloat(t))},u:function(e,t){return new Date(parseFloat(t))},w:g,y:function(e,t){e.setFullYear(2e3+parseFloat(t))}},C={D:"",F:"",G:"(\\d\\d|\\d)",H:"(\\d\\d|\\d)",J:"(\\d\\d|\\d)\\w+",K:"",M:"",S:"(\\d\\d|\\d)",U:"(.+)",W:"(\\d\\d|\\d)",Y:"(\\d{4})",Z:"(.+)",d:"(\\d\\d|\\d)",h:"(\\d\\d|\\d)",i:"(\\d\\d|\\d)",j:"(\\d\\d|\\d)",l:"",m:"(\\d\\d|\\d)",n:"(\\d\\d|\\d)",s:"(\\d\\d|\\d)",u:"(.+)",w:"(\\d\\d|\\d)",y:"(\\d{2})"},v={Z:function(e){return e.toISOString()},D:function(e,t,n){return t.weekdays.shorthand[v.w(e,t,n)]},F:function(e,t,n){return y(v.n(e,t,n)-1,!1,t)},G:function(e,t,n){return s(v.h(e,t,n))},H:function(e){return s(e.getHours())},J:function(e,t){return void 0!==t.ordinal?e.getDate()+t.ordinal(e.getDate()):e.getDate()},K:function(e,t){return t.amPM[l(e.getHours()>11)]},M:function(e,t){return y(e.getMonth(),!0,t)},S:function(e){return s(e.getSeconds())},U:function(e){return e.getTime()/1e3},W:function(e,t,n){return n.getWeek(e)},Y:function(e){return s(e.getFullYear(),4)},d:function(e){return s(e.getDate())},h:function(e){return e.getHours()%12?e.getHours()%12:12},i:function(e){return s(e.getMinutes())},j:function(e){return e.getDate()},l:function(e,t){return t.weekdays.longhand[e.getDay()]},m:function(e){return s(e.getMonth()+1)},n:function(e){return e.getMonth()+1},s:function(e){return e.getSeconds()},u:function(e){return e.getTime()},w:function(e){return e.getDay()},y:function(e){return String(e.getFullYear()).substring(2)}},k=function(e){var t=e.config,n=void 0===t?i:t,r=e.l10n,o=void 0===r?a:r,s=e.isMobile,l=void 0!==s&&s;return function(e,t,r){var i=r||o;return void 0===n.formatDate||l?t.split("").map((function(t,r,a){return v[t]&&"\\"!==a[r-1]?v[t](e,i,n):"\\"!==t?t:""})).join(""):n.formatDate(e,t,i)}},w=function(e){var t=e.config,n=void 0===t?i:t,r=e.l10n,o=void 0===r?a:r;return function(e,t,r,a){if(0===e||e){var s,l=a||o,c=e;if(e instanceof Date)s=new Date(e.getTime());else if("string"!=typeof e&&void 0!==e.toFixed)s=new Date(e);else if("string"==typeof e){var u=t||(n||i).dateFormat,d=String(e).trim();if("today"===d)s=new Date,r=!0;else if(n&&n.parseDate)s=n.parseDate(e,u);else if(/Z$/.test(d)||/GMT$/.test(d))s=new Date(e);else{for(var h=void 0,f=[],m=0,p=0,A="";mMath.min(t,n)&&e=0?new Date:new Date(n.config.minDate.getTime()),r=O(n.config);t.setHours(r.hours,r.minutes,r.seconds,t.getMilliseconds()),n.selectedDates=[t],n.latestSelectedDateObj=t}void 0!==e&&"blur"!==e.type&&function(e){e.preventDefault();var t="keydown"===e.type,r=A(e),i=r;void 0!==n.amPM&&r===n.amPM&&(n.amPM.textContent=n.l10n.amPM[l(n.amPM.textContent===n.l10n.amPM[0])]);var a=parseFloat(i.getAttribute("min")),o=parseFloat(i.getAttribute("max")),c=parseFloat(i.getAttribute("step")),u=parseInt(i.value,10),d=u+c*(e.delta||(t?38===e.which?1:-1:0));if(void 0!==i.value&&2===i.value.length){var h=i===n.hourElement,f=i===n.minuteElement;do&&(d=i===n.hourElement?d-o-l(!n.amPM):a,f&&z(void 0,1,n.hourElement)),n.amPM&&h&&(1===c?d+u===23:Math.abs(d-u)>c)&&(n.amPM.textContent=n.l10n.amPM[l(n.amPM.textContent===n.l10n.amPM[0])]),i.value=s(d)}}(e);var i=n._input.value;I(),xe(),n._input.value!==i&&n._debouncedChange()}function I(){if(void 0!==n.hourElement&&void 0!==n.minuteElement){var e,t,r=(parseInt(n.hourElement.value.slice(-2),10)||0)%24,i=(parseInt(n.minuteElement.value,10)||0)%60,a=void 0!==n.secondElement?(parseInt(n.secondElement.value,10)||0)%60:0;void 0!==n.amPM&&(e=r,t=n.amPM.textContent,r=e%12+12*l(t===n.l10n.amPM[1]));var o=void 0!==n.config.minTime||n.config.minDate&&n.minDateHasTime&&n.latestSelectedDateObj&&0===E(n.latestSelectedDateObj,n.config.minDate,!0),s=void 0!==n.config.maxTime||n.config.maxDate&&n.maxDateHasTime&&n.latestSelectedDateObj&&0===E(n.latestSelectedDateObj,n.config.maxDate,!0);if(void 0!==n.config.maxTime&&void 0!==n.config.minTime&&n.config.minTime>n.config.maxTime){var c=x(n.config.minTime.getHours(),n.config.minTime.getMinutes(),n.config.minTime.getSeconds()),u=x(n.config.maxTime.getHours(),n.config.maxTime.getMinutes(),n.config.maxTime.getSeconds()),d=x(r,i,a);if(d>u&&d=12)]),void 0!==n.secondElement&&(n.secondElement.value=s(r)))}function L(e){var t=A(e),n=parseInt(t.value)+(e.delta||0);(n/1e3>1||"Enter"===e.key&&!/[^\d]/.test(n.toString()))&&re(n)}function V(e,t,r,i){return t instanceof Array?t.forEach((function(t){return V(e,t,r,i)})):e instanceof Array?e.forEach((function(e){return V(e,t,r,i)})):(e.addEventListener(t,r,i),void n._handlers.push({remove:function(){return e.removeEventListener(t,r,i)}}))}function $(){ve("onChange")}function U(e,t){var r=void 0!==e?n.parseDate(e):n.latestSelectedDateObj||(n.config.minDate&&n.config.minDate>n.now?n.config.minDate:n.config.maxDate&&n.config.maxDate=0&&E(e,n.selectedDates[1])<=0}(t)&&!we(t)&&o.classList.add("inRange"),n.weekNumbers&&1===n.config.showMonths&&"prevMonthDay"!==e&&i%7==6&&n.weekNumbers.insertAdjacentHTML("beforeend",""+n.config.getWeek(t)+""),ve("onDayCreate",o),o}function P(e){e.focus(),"range"===n.config.mode&&le(e)}function q(e){for(var t=e>0?0:n.config.showMonths-1,r=e>0?n.config.showMonths:-1,i=t;i!=r;i+=e)for(var a=n.daysContainer.children[i],o=e>0?0:a.children.length-1,s=e>0?a.children.length:-1,l=o;l!=s;l+=e){var c=a.children[l];if(-1===c.className.indexOf("hidden")&&ie(c.dateObj))return c}}function Y(e,t){var r=a(),i=ae(r||document.body),o=void 0!==e?e:i?r:void 0!==n.selectedDateElem&&ae(n.selectedDateElem)?n.selectedDateElem:void 0!==n.todayDateElem&&ae(n.todayDateElem)?n.todayDateElem:q(t>0?1:-1);void 0===o?n._input.focus():i?function(e,t){for(var r=-1===e.className.indexOf("Month")?e.dateObj.getMonth():n.currentMonth,i=t>0?n.config.showMonths:-1,a=t>0?1:-1,o=r-n.currentMonth;o!=i;o+=a)for(var s=n.daysContainer.children[o],l=r-n.currentMonth===o?e.$i+t:t<0?s.children.length-1:0,c=s.children.length,u=l;u>=0&&u0?c:-1);u+=a){var d=s.children[u];if(-1===d.className.indexOf("hidden")&&ie(d.dateObj)&&Math.abs(e.$i-u)>=Math.abs(t))return P(d)}n.changeMonth(a),Y(q(a),0)}(o,t):P(o)}function H(e,t){for(var r=(new Date(e,t,1).getDay()-n.l10n.firstDayOfWeek+7)%7,i=n.utils.getDaysInMonth((t-1+12)%12,e),a=n.utils.getDaysInMonth(t,e),o=window.document.createDocumentFragment(),s=n.config.showMonths>1,l=s?"prevMonthDay hidden":"prevMonthDay",c=s?"nextMonthDay hidden":"nextMonthDay",u=i+1-r,d=0;u<=i;u++,d++)o.appendChild(W("flatpickr-day "+l,new Date(e,t-1,u),0,d));for(u=1;u<=a;u++,d++)o.appendChild(W("flatpickr-day",new Date(e,t,u),0,d));for(var f=a+1;f<=42-r&&(1===n.config.showMonths||d%7!=0);f++,d++)o.appendChild(W("flatpickr-day "+c,new Date(e,t+1,f%a),0,d));var m=h("div","dayContainer");return m.appendChild(o),m}function Z(){if(void 0!==n.daysContainer){f(n.daysContainer),n.weekNumbers&&f(n.weekNumbers);for(var e=document.createDocumentFragment(),t=0;t1||"dropdown"!==n.config.monthSelectorType)){var e=function(e){return!(void 0!==n.config.minDate&&n.currentYear===n.config.minDate.getFullYear()&&en.config.maxDate.getMonth())};n.monthsDropdownContainer.tabIndex=-1,n.monthsDropdownContainer.innerHTML="";for(var t=0;t<12;t++)if(e(t)){var r=h("option","flatpickr-monthDropdown-month");r.value=new Date(n.currentYear,t).getMonth().toString(),r.textContent=y(t,n.config.shorthandCurrentMonth,n.l10n),r.tabIndex=-1,n.currentMonth===t&&(r.selected=!0),n.monthsDropdownContainer.appendChild(r)}}}function G(){var e,t=h("div","flatpickr-month"),r=window.document.createDocumentFragment();n.config.showMonths>1||"static"===n.config.monthSelectorType?e=h("span","cur-month"):(n.monthsDropdownContainer=h("select","flatpickr-monthDropdown-months"),n.monthsDropdownContainer.setAttribute("aria-label",n.l10n.monthAriaLabel),V(n.monthsDropdownContainer,"change",(function(e){var t=A(e),r=parseInt(t.value,10);n.changeMonth(r-n.currentMonth),ve("onMonthChange")})),K(),e=n.monthsDropdownContainer);var i=p("cur-year",{tabindex:"-1"}),a=i.getElementsByTagName("input")[0];a.setAttribute("aria-label",n.l10n.yearAriaLabel),n.config.minDate&&a.setAttribute("min",n.config.minDate.getFullYear().toString()),n.config.maxDate&&(a.setAttribute("max",n.config.maxDate.getFullYear().toString()),a.disabled=!!n.config.minDate&&n.config.minDate.getFullYear()===n.config.maxDate.getFullYear());var o=h("div","flatpickr-current-month");return o.appendChild(e),o.appendChild(i),r.appendChild(o),t.appendChild(r),{container:t,yearElement:a,monthElement:e}}function J(){f(n.monthNav),n.monthNav.appendChild(n.prevMonthNav),n.config.showMonths&&(n.yearElements=[],n.monthElements=[]);for(var e=n.config.showMonths;e--;){var t=G();n.yearElements.push(t.yearElement),n.monthElements.push(t.monthElement),n.monthNav.appendChild(t.container)}n.monthNav.appendChild(n.nextMonthNav)}function Q(){n.weekdayContainer?f(n.weekdayContainer):n.weekdayContainer=h("div","flatpickr-weekdays");for(var e=n.config.showMonths;e--;){var t=h("div","flatpickr-weekdaycontainer");n.weekdayContainer.appendChild(t)}return X(),n.weekdayContainer}function X(){if(n.weekdayContainer){var e=n.l10n.firstDayOfWeek,t=S(n.l10n.weekdays.shorthand);e>0&&e\n "+t.join("")+"\n \n "}}function ee(e,t){void 0===t&&(t=!0);var r=t?e:e-n.currentMonth;r<0&&!0===n._hidePrevMonthArrow||r>0&&!0===n._hideNextMonthArrow||(n.currentMonth+=r,(n.currentMonth<0||n.currentMonth>11)&&(n.currentYear+=n.currentMonth>11?1:-1,n.currentMonth=(n.currentMonth+12)%12,ve("onYearChange"),K()),Z(),ve("onMonthChange"),Ee())}function te(e){return n.calendarContainer.contains(e)}function ne(e){if(n.isOpen&&!n.config.inline){var t=A(e),r=te(t),i=!(t===n.input||t===n.altInput||n.element.contains(t)||e.path&&e.path.indexOf&&(~e.path.indexOf(n.input)||~e.path.indexOf(n.altInput))||r||te(e.relatedTarget)),a=!n.config.ignoredFocusElements.some((function(e){return e.contains(t)}));i&&a&&(n.config.allowInput&&n.setDate(n._input.value,!1,n.config.altInput?n.config.altFormat:n.config.dateFormat),void 0!==n.timeContainer&&void 0!==n.minuteElement&&void 0!==n.hourElement&&""!==n.input.value&&void 0!==n.input.value&&v(),n.close(),n.config&&"range"===n.config.mode&&1===n.selectedDates.length&&n.clear(!1))}}function re(e){if(!(!e||n.config.minDate&&en.config.maxDate.getFullYear())){var t=e,r=n.currentYear!==t;n.currentYear=t||n.currentYear,n.config.maxDate&&n.currentYear===n.config.maxDate.getFullYear()?n.currentMonth=Math.min(n.config.maxDate.getMonth(),n.currentMonth):n.config.minDate&&n.currentYear===n.config.minDate.getFullYear()&&(n.currentMonth=Math.max(n.config.minDate.getMonth(),n.currentMonth)),r&&(n.redraw(),ve("onYearChange"),K())}}function ie(e,t){var r;void 0===t&&(t=!0);var i=n.parseDate(e,void 0,t);if(n.config.minDate&&i&&E(i,n.config.minDate,void 0!==t?t:!n.minDateHasTime)<0||n.config.maxDate&&i&&E(i,n.config.maxDate,void 0!==t?t:!n.maxDateHasTime)>0)return!1;if(!n.config.enable&&0===n.config.disable.length)return!0;if(void 0===i)return!1;for(var a=!!n.config.enable,o=null!==(r=n.config.enable)&&void 0!==r?r:n.config.disable,s=0,l=void 0;s=l.from.getTime()&&i.getTime()<=l.to.getTime())return a}return!a}function ae(e){return void 0!==n.daysContainer&&-1===e.className.indexOf("hidden")&&-1===e.className.indexOf("flatpickr-disabled")&&n.daysContainer.contains(e)}function oe(e){var t=e.target===n._input,r=n._input.value.trimEnd()!==Be();!t||!r||e.relatedTarget&&te(e.relatedTarget)||n.setDate(n._input.value,!0,e.target===n.altInput?n.config.altFormat:n.config.dateFormat)}function se(t){var r=A(t),i=n.config.wrap?e.contains(r):r===n._input,o=n.config.allowInput,s=n.isOpen&&(!o||!i),l=n.config.inline&&i&&!o;if(13===t.keyCode&&i){if(o)return n.setDate(n._input.value,!0,r===n.altInput?n.config.altFormat:n.config.dateFormat),n.close(),r.blur();n.open()}else if(te(r)||s||l){var c=!!n.timeContainer&&n.timeContainer.contains(r);switch(t.keyCode){case 13:c?(t.preventDefault(),v(),pe()):Ae(t);break;case 27:t.preventDefault(),pe();break;case 8:case 46:i&&!n.config.allowInput&&(t.preventDefault(),n.clear());break;case 37:case 39:if(c||i)n.hourElement&&n.hourElement.focus();else{t.preventDefault();var u=a();if(void 0!==n.daysContainer&&(!1===o||u&&ae(u))){var d=39===t.keyCode?1:-1;t.ctrlKey?(t.stopPropagation(),ee(d),Y(q(1),0)):Y(void 0,d)}}break;case 38:case 40:t.preventDefault();var h=40===t.keyCode?1:-1;n.daysContainer&&void 0!==r.$i||r===n.input||r===n.altInput?t.ctrlKey?(t.stopPropagation(),re(n.currentYear-h),Y(q(1),0)):c||Y(void 0,7*h):r===n.currentYearElement?re(n.currentYear-h):n.config.enableTime&&(!c&&n.hourElement&&n.hourElement.focus(),v(t),n._debouncedChange());break;case 9:if(c){var f=[n.hourElement,n.minuteElement,n.secondElement,n.amPM].concat(n.pluginElements).filter((function(e){return e})),m=f.indexOf(r);if(-1!==m){var p=f[m+(t.shiftKey?-1:1)];t.preventDefault(),(p||n._input).focus()}}else!n.config.noCalendar&&n.daysContainer&&n.daysContainer.contains(r)&&t.shiftKey&&(t.preventDefault(),n._input.focus())}}if(void 0!==n.amPM&&r===n.amPM)switch(t.key){case n.l10n.amPM[0].charAt(0):case n.l10n.amPM[0].charAt(0).toLowerCase():n.amPM.textContent=n.l10n.amPM[0],I(),xe();break;case n.l10n.amPM[1].charAt(0):case n.l10n.amPM[1].charAt(0).toLowerCase():n.amPM.textContent=n.l10n.amPM[1],I(),xe()}(i||te(r))&&ve("onKeyDown",t)}function le(e,t){if(void 0===t&&(t="flatpickr-day"),1===n.selectedDates.length&&(!e||e.classList.contains(t)&&!e.classList.contains("flatpickr-disabled"))){for(var r=e?e.dateObj.getTime():n.days.firstElementChild.dateObj.getTime(),i=n.parseDate(n.selectedDates[0],void 0,!0).getTime(),a=Math.min(r,n.selectedDates[0].getTime()),o=Math.max(r,n.selectedDates[0].getTime()),s=!1,l=0,c=0,u=a;ua&&ul)?l=u:u>i&&(!c||u ."+t)).forEach((function(t){var a=t.dateObj.getTime(),o=l>0&&a0&&a>c;if(o)return t.classList.add("notAllowed"),void["inRange","startRange","endRange"].forEach((function(e){t.classList.remove(e)}));s&&!o||(["startRange","inRange","endRange","notAllowed"].forEach((function(e){t.classList.remove(e)})),void 0!==e&&(e.classList.add(r<=n.selectedDates[0].getTime()?"startRange":"endRange"),ir&&a===i&&t.classList.add("endRange"),a>=l&&(0===c||a<=c)&&B(a,i,r)&&t.classList.add("inRange")))}))}}function ce(){!n.isOpen||n.config.static||n.config.inline||fe()}function ue(e){return function(t){var r=n.config["_"+e+"Date"]=n.parseDate(t,n.config.dateFormat),i=n.config["_"+("min"===e?"max":"min")+"Date"];void 0!==r&&(n["min"===e?"minDateHasTime":"maxDateHasTime"]=r.getHours()>0||r.getMinutes()>0||r.getSeconds()>0),n.selectedDates&&(n.selectedDates=n.selectedDates.filter((function(e){return ie(e)})),n.selectedDates.length||"min"!==e||F(r),xe()),n.daysContainer&&(me(),void 0!==r?n.currentYearElement[e]=r.getFullYear().toString():n.currentYearElement.removeAttribute(e),n.currentYearElement.disabled=!!i&&void 0!==r&&i.getFullYear()===r.getFullYear())}}function de(){return n.config.wrap?e.querySelector("[data-input]"):e}function he(){"object"!=typeof n.config.locale&&void 0===j.l10ns[n.config.locale]&&n.config.errorHandler(new Error("flatpickr: invalid locale "+n.config.locale)),n.l10n=T(T({},j.l10ns.default),"object"==typeof n.config.locale?n.config.locale:"default"!==n.config.locale?j.l10ns[n.config.locale]:void 0),C.D="("+n.l10n.weekdays.shorthand.join("|")+")",C.l="("+n.l10n.weekdays.longhand.join("|")+")",C.M="("+n.l10n.months.shorthand.join("|")+")",C.F="("+n.l10n.months.longhand.join("|")+")",C.K="("+n.l10n.amPM[0]+"|"+n.l10n.amPM[1]+"|"+n.l10n.amPM[0].toLowerCase()+"|"+n.l10n.amPM[1].toLowerCase()+")",void 0===T(T({},t),JSON.parse(JSON.stringify(e.dataset||{}))).time_24hr&&void 0===j.defaultConfig.time_24hr&&(n.config.time_24hr=n.l10n.time_24hr),n.formatDate=k(n),n.parseDate=w({config:n.config,l10n:n.l10n})}function fe(e){if("function"!=typeof n.config.position){if(void 0!==n.calendarContainer){ve("onPreCalendarPosition");var t=e||n._positionElement,r=Array.prototype.reduce.call(n.calendarContainer.children,(function(e,t){return e+t.offsetHeight}),0),i=n.calendarContainer.offsetWidth,a=n.config.position.split(" "),o=a[0],s=a.length>1?a[1]:null,l=t.getBoundingClientRect(),c=window.innerHeight-l.bottom,u="above"===o||"below"!==o&&cr,h=window.pageYOffset+l.top+(u?-r-2:t.offsetHeight+2);if(d(n.calendarContainer,"arrowTop",!u),d(n.calendarContainer,"arrowBottom",u),!n.config.inline){var f=window.pageXOffset+l.left,m=!1,p=!1;"center"===s?(f-=(i-l.width)/2,m=!0):"right"===s&&(f-=i-l.width,p=!0),d(n.calendarContainer,"arrowLeft",!m&&!p),d(n.calendarContainer,"arrowCenter",m),d(n.calendarContainer,"arrowRight",p);var A=window.document.body.offsetWidth-(window.pageXOffset+l.right),g=f+i>window.document.body.offsetWidth,y=A+i>window.document.body.offsetWidth;if(d(n.calendarContainer,"rightMost",g),!n.config.static)if(n.calendarContainer.style.top=h+"px",g)if(y){var b=function(){for(var e=null,t=0;tn.currentMonth+n.config.showMonths-1)&&"range"!==n.config.mode;if(n.selectedDateElem=r,"single"===n.config.mode)n.selectedDates=[i];else if("multiple"===n.config.mode){var o=we(i);o?n.selectedDates.splice(parseInt(o),1):n.selectedDates.push(i)}else"range"===n.config.mode&&(2===n.selectedDates.length&&n.clear(!1,!1),n.latestSelectedDateObj=i,n.selectedDates.push(i),0!==E(i,n.selectedDates[0],!0)&&n.selectedDates.sort((function(e,t){return e.getTime()-t.getTime()})));if(I(),a){var s=n.currentYear!==i.getFullYear();n.currentYear=i.getFullYear(),n.currentMonth=i.getMonth(),s&&(ve("onYearChange"),K()),ve("onMonthChange")}if(Ee(),Z(),xe(),a||"range"===n.config.mode||1!==n.config.showMonths?void 0!==n.selectedDateElem&&void 0===n.hourElement&&n.selectedDateElem&&n.selectedDateElem.focus():P(r),void 0!==n.hourElement&&void 0!==n.hourElement&&n.hourElement.focus(),n.config.closeOnSelect){var l="single"===n.config.mode&&!n.config.enableTime,c="range"===n.config.mode&&2===n.selectedDates.length&&!n.config.enableTime;(l||c)&&pe()}$()}}n.parseDate=w({config:n.config,l10n:n.l10n}),n._handlers=[],n.pluginElements=[],n.loadedPlugins=[],n._bind=V,n._setHoursFromDate=F,n._positionCalendar=fe,n.changeMonth=ee,n.changeYear=re,n.clear=function(e,t){if(void 0===e&&(e=!0),void 0===t&&(t=!0),n.input.value="",void 0!==n.altInput&&(n.altInput.value=""),void 0!==n.mobileInput&&(n.mobileInput.value=""),n.selectedDates=[],n.latestSelectedDateObj=void 0,!0===t&&(n.currentYear=n._initialDate.getFullYear(),n.currentMonth=n._initialDate.getMonth()),!0===n.config.enableTime){var r=O(n.config);_(r.hours,r.minutes,r.seconds)}n.redraw(),e&&ve("onChange")},n.close=function(){n.isOpen=!1,n.isMobile||(void 0!==n.calendarContainer&&n.calendarContainer.classList.remove("open"),void 0!==n._input&&n._input.classList.remove("active")),ve("onClose")},n.onMouseOver=le,n._createElement=h,n.createDay=W,n.destroy=function(){void 0!==n.config&&ve("onDestroy");for(var e=n._handlers.length;e--;)n._handlers[e].remove();if(n._handlers=[],n.mobileInput)n.mobileInput.parentNode&&n.mobileInput.parentNode.removeChild(n.mobileInput),n.mobileInput=void 0;else if(n.calendarContainer&&n.calendarContainer.parentNode)if(n.config.static&&n.calendarContainer.parentNode){var t=n.calendarContainer.parentNode;if(t.lastChild&&t.removeChild(t.lastChild),t.parentNode){for(;t.firstChild;)t.parentNode.insertBefore(t.firstChild,t);t.parentNode.removeChild(t)}}else n.calendarContainer.parentNode.removeChild(n.calendarContainer);n.altInput&&(n.input.type="text",n.altInput.parentNode&&n.altInput.parentNode.removeChild(n.altInput),delete n.altInput),n.input&&(n.input.type=n.input._type,n.input.classList.remove("flatpickr-input"),n.input.removeAttribute("readonly")),["_showTimeInput","latestSelectedDateObj","_hideNextMonthArrow","_hidePrevMonthArrow","__hideNextMonthArrow","__hidePrevMonthArrow","isMobile","isOpen","selectedDateElem","minDateHasTime","maxDateHasTime","days","daysContainer","_input","_positionElement","innerContainer","rContainer","monthNav","todayDateElem","calendarContainer","weekdayContainer","prevMonthNav","nextMonthNav","monthsDropdownContainer","currentMonthElement","currentYearElement","navigationCurrentMonth","selectedDateElem","config"].forEach((function(e){try{delete n[e]}catch(e){}}))},n.isEnabled=ie,n.jumpToDate=U,n.updateValue=xe,n.open=function(e,t){if(void 0===t&&(t=n._positionElement),!0===n.isMobile){if(e){e.preventDefault();var r=A(e);r&&r.blur()}return void 0!==n.mobileInput&&(n.mobileInput.focus(),n.mobileInput.click()),void ve("onOpen")}if(!n._input.disabled&&!n.config.inline){var i=n.isOpen;n.isOpen=!0,i||(n.calendarContainer.classList.add("open"),n._input.classList.add("active"),ve("onOpen"),fe(t)),!0===n.config.enableTime&&!0===n.config.noCalendar&&(!1!==n.config.allowInput||void 0!==e&&n.timeContainer.contains(e.relatedTarget)||setTimeout((function(){return n.hourElement.select()}),50))}},n.redraw=me,n.set=function(e,t){if(null!==e&&"object"==typeof e)for(var i in Object.assign(n.config,e),e)void 0!==ge[i]&&ge[i].forEach((function(e){return e()}));else n.config[e]=t,void 0!==ge[e]?ge[e].forEach((function(e){return e()})):r.indexOf(e)>-1&&(n.config[e]=u(t));n.redraw(),xe(!0)},n.setDate=function(e,t,r){if(void 0===t&&(t=!1),void 0===r&&(r=n.config.dateFormat),0!==e&&!e||e instanceof Array&&0===e.length)return n.clear(t);ye(e,r),n.latestSelectedDateObj=n.selectedDates[n.selectedDates.length-1],n.redraw(),U(void 0,t),F(),0===n.selectedDates.length&&n.clear(!1),xe(t),t&&ve("onChange")},n.toggle=function(e){if(!0===n.isOpen)return n.close();n.open(e)};var ge={locale:[he,X],showMonths:[J,b,Q],minDate:[U],maxDate:[U],positionElement:[Ce],clickOpens:[function(){!0===n.config.clickOpens?(V(n._input,"focus",n.open),V(n._input,"click",n.open)):(n._input.removeEventListener("focus",n.open),n._input.removeEventListener("click",n.open))}]};function ye(e,t){var r=[];if(e instanceof Array)r=e.map((function(e){return n.parseDate(e,t)}));else if(e instanceof Date||"number"==typeof e)r=[n.parseDate(e,t)];else if("string"==typeof e)switch(n.config.mode){case"single":case"time":r=[n.parseDate(e,t)];break;case"multiple":r=e.split(n.config.conjunction).map((function(e){return n.parseDate(e,t)}));break;case"range":r=e.split(n.l10n.rangeSeparator).map((function(e){return n.parseDate(e,t)}))}else n.config.errorHandler(new Error("Invalid date supplied: "+JSON.stringify(e)));n.selectedDates=n.config.allowInvalidPreload?r:r.filter((function(e){return e instanceof Date&&ie(e,!1)})),"range"===n.config.mode&&n.selectedDates.sort((function(e,t){return e.getTime()-t.getTime()}))}function be(e){return e.slice().map((function(e){return"string"==typeof e||"number"==typeof e||e instanceof Date?n.parseDate(e,void 0,!0):e&&"object"==typeof e&&e.from&&e.to?{from:n.parseDate(e.from,void 0),to:n.parseDate(e.to,void 0)}:e})).filter((function(e){return e}))}function Ce(){n._positionElement=n.config.positionElement||n._input}function ve(e,t){if(void 0!==n.config){var r=n.config[e];if(void 0!==r&&r.length>0)for(var i=0;r[i]&&i1||"static"===n.config.monthSelectorType?n.monthElements[t].textContent=y(r.getMonth(),n.config.shorthandCurrentMonth,n.l10n)+" ":n.monthsDropdownContainer.value=r.getMonth().toString(),e.value=r.getFullYear().toString()})),n._hidePrevMonthArrow=void 0!==n.config.minDate&&(n.currentYear===n.config.minDate.getFullYear()?n.currentMonth<=n.config.minDate.getMonth():n.currentYearn.config.maxDate.getMonth():n.currentYear>n.config.maxDate.getFullYear()))}function Be(e){var t=e||(n.config.altInput?n.config.altFormat:n.config.dateFormat);return n.selectedDates.map((function(e){return n.formatDate(e,t)})).filter((function(e,t,r){return"range"!==n.config.mode||n.config.enableTime||r.indexOf(e)===t})).join("range"!==n.config.mode?n.config.conjunction:n.l10n.rangeSeparator)}function xe(e){void 0===e&&(e=!0),void 0!==n.mobileInput&&n.mobileFormatStr&&(n.mobileInput.value=void 0!==n.latestSelectedDateObj?n.formatDate(n.latestSelectedDateObj,n.mobileFormatStr):""),n.input.value=Be(n.config.dateFormat),void 0!==n.altInput&&(n.altInput.value=Be(n.config.altFormat)),!1!==e&&ve("onValueUpdate")}function De(e){var t=A(e),r=n.prevMonthNav.contains(t),i=n.nextMonthNav.contains(t);r||i?ee(r?-1:1):n.yearElements.indexOf(t)>=0?t.select():t.classList.contains("arrowUp")?n.changeYear(n.currentYear+1):t.classList.contains("arrowDown")&&n.changeYear(n.currentYear-1)}return function(){n.element=n.input=e,n.isOpen=!1,function(){var a=["wrap","weekNumbers","allowInput","allowInvalidPreload","clickOpens","time_24hr","enableTime","noCalendar","altInput","shorthandCurrentMonth","inline","static","enableSeconds","disableMobile"],o=T(T({},JSON.parse(JSON.stringify(e.dataset||{}))),t),s={};n.config.parseDate=o.parseDate,n.config.formatDate=o.formatDate,Object.defineProperty(n.config,"enable",{get:function(){return n.config._enable},set:function(e){n.config._enable=be(e)}}),Object.defineProperty(n.config,"disable",{get:function(){return n.config._disable},set:function(e){n.config._disable=be(e)}});var l="time"===o.mode;if(!o.dateFormat&&(o.enableTime||l)){var c=j.defaultConfig.dateFormat||i.dateFormat;s.dateFormat=o.noCalendar||l?"H:i"+(o.enableSeconds?":S":""):c+" H:i"+(o.enableSeconds?":S":"")}if(o.altInput&&(o.enableTime||l)&&!o.altFormat){var d=j.defaultConfig.altFormat||i.altFormat;s.altFormat=o.noCalendar||l?"h:i"+(o.enableSeconds?":S K":" K"):d+" h:i"+(o.enableSeconds?":S":"")+" K"}Object.defineProperty(n.config,"minDate",{get:function(){return n.config._minDate},set:ue("min")}),Object.defineProperty(n.config,"maxDate",{get:function(){return n.config._maxDate},set:ue("max")});var h=function(e){return function(t){n.config["min"===e?"_minTime":"_maxTime"]=n.parseDate(t,"H:i:S")}};Object.defineProperty(n.config,"minTime",{get:function(){return n.config._minTime},set:h("min")}),Object.defineProperty(n.config,"maxTime",{get:function(){return n.config._maxTime},set:h("max")}),"time"===o.mode&&(n.config.noCalendar=!0,n.config.enableTime=!0),Object.assign(n.config,s,o);for(var f=0;f-1?n.config[p]=u(m[p]).map(g).concat(n.config[p]):void 0===o[p]&&(n.config[p]=m[p])}o.altInputClass||(n.config.altInputClass=de().className+" "+n.config.altInputClass),ve("onParseConfig")}(),he(),n.input=de(),n.input?(n.input._type=n.input.type,n.input.type="text",n.input.classList.add("flatpickr-input"),n._input=n.input,n.config.altInput&&(n.altInput=h(n.input.nodeName,n.config.altInputClass),n._input=n.altInput,n.altInput.placeholder=n.input.placeholder,n.altInput.disabled=n.input.disabled,n.altInput.required=n.input.required,n.altInput.tabIndex=n.input.tabIndex,n.altInput.type="text",n.input.setAttribute("type","hidden"),!n.config.static&&n.input.parentNode&&n.input.parentNode.insertBefore(n.altInput,n.input.nextSibling)),n.config.allowInput||n._input.setAttribute("readonly","readonly"),Ce()):n.config.errorHandler(new Error("Invalid input element specified")),function(){n.selectedDates=[],n.now=n.parseDate(n.config.now)||new Date;var e=n.config.defaultDate||("INPUT"!==n.input.nodeName&&"TEXTAREA"!==n.input.nodeName||!n.input.placeholder||n.input.value!==n.input.placeholder?n.input.value:null);e&&ye(e,n.config.dateFormat),n._initialDate=n.selectedDates.length>0?n.selectedDates[0]:n.config.minDate&&n.config.minDate.getTime()>n.now.getTime()?n.config.minDate:n.config.maxDate&&n.config.maxDate.getTime()0&&(n.latestSelectedDateObj=n.selectedDates[0]),void 0!==n.config.minTime&&(n.config.minTime=n.parseDate(n.config.minTime,"H:i")),void 0!==n.config.maxTime&&(n.config.maxTime=n.parseDate(n.config.maxTime,"H:i")),n.minDateHasTime=!!n.config.minDate&&(n.config.minDate.getHours()>0||n.config.minDate.getMinutes()>0||n.config.minDate.getSeconds()>0),n.maxDateHasTime=!!n.config.maxDate&&(n.config.maxDate.getHours()>0||n.config.maxDate.getMinutes()>0||n.config.maxDate.getSeconds()>0)}(),n.utils={getDaysInMonth:function(e,t){return void 0===e&&(e=n.currentMonth),void 0===t&&(t=n.currentYear),1===e&&(t%4==0&&t%100!=0||t%400==0)?29:n.l10n.daysInMonth[e]}},n.isMobile||function(){var e=window.document.createDocumentFragment();if(n.calendarContainer=h("div","flatpickr-calendar"),n.calendarContainer.tabIndex=-1,!n.config.noCalendar){if(e.appendChild((n.monthNav=h("div","flatpickr-months"),n.yearElements=[],n.monthElements=[],n.prevMonthNav=h("span","flatpickr-prev-month"),n.prevMonthNav.innerHTML=n.config.prevArrow,n.nextMonthNav=h("span","flatpickr-next-month"),n.nextMonthNav.innerHTML=n.config.nextArrow,J(),Object.defineProperty(n,"_hidePrevMonthArrow",{get:function(){return n.__hidePrevMonthArrow},set:function(e){n.__hidePrevMonthArrow!==e&&(d(n.prevMonthNav,"flatpickr-disabled",e),n.__hidePrevMonthArrow=e)}}),Object.defineProperty(n,"_hideNextMonthArrow",{get:function(){return n.__hideNextMonthArrow},set:function(e){n.__hideNextMonthArrow!==e&&(d(n.nextMonthNav,"flatpickr-disabled",e),n.__hideNextMonthArrow=e)}}),n.currentYearElement=n.yearElements[0],Ee(),n.monthNav)),n.innerContainer=h("div","flatpickr-innerContainer"),n.config.weekNumbers){var t=function(){n.calendarContainer.classList.add("hasWeeks");var e=h("div","flatpickr-weekwrapper");e.appendChild(h("span","flatpickr-weekday",n.l10n.weekAbbreviation));var t=h("div","flatpickr-weeks");return e.appendChild(t),{weekWrapper:e,weekNumbers:t}}(),r=t.weekWrapper,i=t.weekNumbers;n.innerContainer.appendChild(r),n.weekNumbers=i,n.weekWrapper=r}n.rContainer=h("div","flatpickr-rContainer"),n.rContainer.appendChild(Q()),n.daysContainer||(n.daysContainer=h("div","flatpickr-days"),n.daysContainer.tabIndex=-1),Z(),n.rContainer.appendChild(n.daysContainer),n.innerContainer.appendChild(n.rContainer),e.appendChild(n.innerContainer)}n.config.enableTime&&e.appendChild(function(){n.calendarContainer.classList.add("hasTime"),n.config.noCalendar&&n.calendarContainer.classList.add("noCalendar");var e=O(n.config);n.timeContainer=h("div","flatpickr-time"),n.timeContainer.tabIndex=-1;var t=h("span","flatpickr-time-separator",":"),r=p("flatpickr-hour",{"aria-label":n.l10n.hourAriaLabel});n.hourElement=r.getElementsByTagName("input")[0];var i=p("flatpickr-minute",{"aria-label":n.l10n.minuteAriaLabel});if(n.minuteElement=i.getElementsByTagName("input")[0],n.hourElement.tabIndex=n.minuteElement.tabIndex=-1,n.hourElement.value=s(n.latestSelectedDateObj?n.latestSelectedDateObj.getHours():n.config.time_24hr?e.hours:function(e){switch(e%24){case 0:case 12:return 12;default:return e%12}}(e.hours)),n.minuteElement.value=s(n.latestSelectedDateObj?n.latestSelectedDateObj.getMinutes():e.minutes),n.hourElement.setAttribute("step",n.config.hourIncrement.toString()),n.minuteElement.setAttribute("step",n.config.minuteIncrement.toString()),n.hourElement.setAttribute("min",n.config.time_24hr?"0":"1"),n.hourElement.setAttribute("max",n.config.time_24hr?"23":"12"),n.hourElement.setAttribute("maxlength","2"),n.minuteElement.setAttribute("min","0"),n.minuteElement.setAttribute("max","59"),n.minuteElement.setAttribute("maxlength","2"),n.timeContainer.appendChild(r),n.timeContainer.appendChild(t),n.timeContainer.appendChild(i),n.config.time_24hr&&n.timeContainer.classList.add("time24hr"),n.config.enableSeconds){n.timeContainer.classList.add("hasSeconds");var a=p("flatpickr-second");n.secondElement=a.getElementsByTagName("input")[0],n.secondElement.value=s(n.latestSelectedDateObj?n.latestSelectedDateObj.getSeconds():e.seconds),n.secondElement.setAttribute("step",n.minuteElement.getAttribute("step")),n.secondElement.setAttribute("min","0"),n.secondElement.setAttribute("max","59"),n.secondElement.setAttribute("maxlength","2"),n.timeContainer.appendChild(h("span","flatpickr-time-separator",":")),n.timeContainer.appendChild(a)}return n.config.time_24hr||(n.amPM=h("span","flatpickr-am-pm",n.l10n.amPM[l((n.latestSelectedDateObj?n.hourElement.value:n.config.defaultHour)>11)]),n.amPM.title=n.l10n.toggleTitle,n.amPM.tabIndex=-1,n.timeContainer.appendChild(n.amPM)),n.timeContainer}()),d(n.calendarContainer,"rangeMode","range"===n.config.mode),d(n.calendarContainer,"animate",!0===n.config.animate),d(n.calendarContainer,"multiMonth",n.config.showMonths>1),n.calendarContainer.appendChild(e);var a=void 0!==n.config.appendTo&&void 0!==n.config.appendTo.nodeType;if((n.config.inline||n.config.static)&&(n.calendarContainer.classList.add(n.config.inline?"inline":"static"),n.config.inline&&(!a&&n.element.parentNode?n.element.parentNode.insertBefore(n.calendarContainer,n._input.nextSibling):void 0!==n.config.appendTo&&n.config.appendTo.appendChild(n.calendarContainer)),n.config.static)){var o=h("div","flatpickr-wrapper");n.element.parentNode&&n.element.parentNode.insertBefore(o,n.element),o.appendChild(n.element),n.altInput&&o.appendChild(n.altInput),o.appendChild(n.calendarContainer)}n.config.static||n.config.inline||(void 0!==n.config.appendTo?n.config.appendTo:window.document.body).appendChild(n.calendarContainer)}(),function(){if(n.config.wrap&&["open","close","toggle","clear"].forEach((function(e){Array.prototype.forEach.call(n.element.querySelectorAll("[data-"+e+"]"),(function(t){return V(t,"click",n[e])}))})),n.isMobile)!function(){var e=n.config.enableTime?n.config.noCalendar?"time":"datetime-local":"date";n.mobileInput=h("input",n.input.className+" flatpickr-mobile"),n.mobileInput.tabIndex=1,n.mobileInput.type=e,n.mobileInput.disabled=n.input.disabled,n.mobileInput.required=n.input.required,n.mobileInput.placeholder=n.input.placeholder,n.mobileFormatStr="datetime-local"===e?"Y-m-d\\TH:i:S":"date"===e?"Y-m-d":"H:i:S",n.selectedDates.length>0&&(n.mobileInput.defaultValue=n.mobileInput.value=n.formatDate(n.selectedDates[0],n.mobileFormatStr)),n.config.minDate&&(n.mobileInput.min=n.formatDate(n.config.minDate,"Y-m-d")),n.config.maxDate&&(n.mobileInput.max=n.formatDate(n.config.maxDate,"Y-m-d")),n.input.getAttribute("step")&&(n.mobileInput.step=String(n.input.getAttribute("step"))),n.input.type="hidden",void 0!==n.altInput&&(n.altInput.type="hidden");try{n.input.parentNode&&n.input.parentNode.insertBefore(n.mobileInput,n.input.nextSibling)}catch(e){}V(n.mobileInput,"change",(function(e){n.setDate(A(e).value,!1,n.mobileFormatStr),ve("onChange"),ve("onClose")}))}();else{var e=c(ce,50);if(n._debouncedChange=c($,N),n.daysContainer&&!/iPhone|iPad|iPod/i.test(navigator.userAgent)&&V(n.daysContainer,"mouseover",(function(e){"range"===n.config.mode&&le(A(e))})),V(n._input,"keydown",se),void 0!==n.calendarContainer&&V(n.calendarContainer,"keydown",se),n.config.inline||n.config.static||V(window,"resize",e),void 0!==window.ontouchstart?V(window.document,"touchstart",ne):V(window.document,"mousedown",ne),V(window.document,"focus",ne,{capture:!0}),!0===n.config.clickOpens&&(V(n._input,"focus",n.open),V(n._input,"click",n.open)),void 0!==n.daysContainer&&(V(n.monthNav,"click",De),V(n.monthNav,["keyup","increment"],L),V(n.daysContainer,"click",Ae)),void 0!==n.timeContainer&&void 0!==n.minuteElement&&void 0!==n.hourElement){V(n.timeContainer,["increment"],v),V(n.timeContainer,"blur",v,{capture:!0}),V(n.timeContainer,"click",R),V([n.hourElement,n.minuteElement],["focus","click"],(function(e){return A(e).select()})),void 0!==n.secondElement&&V(n.secondElement,"focus",(function(){return n.secondElement&&n.secondElement.select()})),void 0!==n.amPM&&V(n.amPM,"click",(function(e){v(e)}))}n.config.allowInput&&V(n._input,"blur",oe)}}(),(n.selectedDates.length||n.config.noCalendar)&&(n.config.enableTime&&F(n.config.noCalendar?n.latestSelectedDateObj:void 0),xe(!1)),b();var a=/^((?!chrome|android).)*safari/i.test(navigator.userAgent);!n.isMobile&&a&&fe(),ve("onReady")}(),n}function F(e,t){for(var n=Array.prototype.slice.call(e).filter((function(e){return e instanceof HTMLElement})),r=[],i=0;it.toUpperCase()))}function P(e){return e.charAt(0).toUpperCase()+e.slice(1)}function q(e,t){const n=Y(e);return Array.from(n.reduce(((e,n)=>(function(e,t){const n=e[t];return Array.isArray(n)?n:[]}(n,t).forEach((t=>e.add(t))),e)),new Set))}function Y(e){const t=[];for(;e;)t.push(e),e=Object.getPrototypeOf(e);return t.reverse()}function H([e,t]){return function(e,t){const n=`${i=e,i.replace(/([A-Z])/g,((e,t)=>`-${t.toLowerCase()}`))}-value`,r=function(e){const t=function(e){const t=Z(e.type);if(t){const n=K(e.default);if(t!==n)throw new Error(`Type "${t}" must match the type of the default value. Given default value: "${e.default}" as "${n}"`);return t}}(e),n=K(e),r=Z(e),i=t||n||r;if(i)return i;throw new Error(`Unknown value type "${e}"`)}(t);var i;return{type:r,key:n,name:W(n),get defaultValue(){return function(e){const t=Z(e);if(t)return G[t];const n=e.default;return void 0!==n?n:e}(t)},get hasCustomDefaultValue(){return void 0!==K(t)},reader:J[r],writer:Q[r]||Q.default}}(e,t)}function Z(e){switch(e){case Array:return"array";case Boolean:return"boolean";case Number:return"number";case Object:return"object";case String:return"string"}}function K(e){switch(typeof e){case"boolean":return"boolean";case"number":return"number";case"string":return"string"}return Array.isArray(e)?"array":"[object Object]"===Object.prototype.toString.call(e)?"object":void 0}(()=>{function e(e){function t(){return Reflect.construct(e,arguments,new.target)}return t.prototype=Object.create(e.prototype,{constructor:{value:t}}),Reflect.setPrototypeOf(t,e),t}try{return function(){const t=e((function(){this.a.call(this)}));t.prototype.a=function(){},new t}(),e}catch(e){return e=>class extends e{}}})();const G={get array(){return[]},boolean:!1,number:0,get object(){return{}},string:""},J={array(e){const t=JSON.parse(e);if(!Array.isArray(t))throw new TypeError("Expected array");return t},boolean:e=>!("0"==e||"false"==e),number:e=>Number(e),object(e){const t=JSON.parse(e);if(null===t||"object"!=typeof t||Array.isArray(t))throw new TypeError("Expected object");return t},string:e=>e},Q={default:function(e){return`${e}`},array:X,object:X};function X(e){return JSON.stringify(e)}class ee{constructor(e){this.context=e}static get shouldLoad(){return!0}get application(){return this.context.application}get scope(){return this.context.scope}get element(){return this.scope.element}get identifier(){return this.scope.identifier}get targets(){return this.scope.targets}get classes(){return this.scope.classes}get data(){return this.scope.data}initialize(){}connect(){}disconnect(){}dispatch(e,{target:t=this.element,detail:n={},prefix:r=this.identifier,bubbles:i=!0,cancelable:a=!0}={}){const o=new CustomEvent(r?`${r}:${e}`:e,{detail:n,bubbles:i,cancelable:a});return t.dispatchEvent(o),o}}ee.blessings=[function(e){return q(e,"classes").reduce(((e,t)=>{return Object.assign(e,{[`${n=t}Class`]:{get(){const{classes:e}=this;if(e.has(n))return e.get(n);{const t=e.getAttributeName(n);throw new Error(`Missing attribute "${t}"`)}}},[`${n}Classes`]:{get(){return this.classes.getAll(n)}},[`has${P(n)}Class`]:{get(){return this.classes.has(n)}}});var n}),{})},function(e){return q(e,"targets").reduce(((e,t)=>{return Object.assign(e,{[`${n=t}Target`]:{get(){const e=this.targets.find(n);if(e)return e;throw new Error(`Missing target element "${n}" for "${this.identifier}" controller`)}},[`${n}Targets`]:{get(){return this.targets.findAll(n)}},[`has${P(n)}Target`]:{get(){return this.targets.has(n)}}});var n}),{})},function(e){const t=function(e,t){return Y(e).reduce(((e,n)=>(e.push(...function(e,t){const n=e[t];return n?Object.keys(n).map((e=>[e,n[e]])):[]}(n,t)),e)),[])}(e,"values"),n={valueDescriptorMap:{get(){return t.reduce(((e,t)=>{const n=H(t),r=this.data.getAttributeNameForKey(n.key);return Object.assign(e,{[r]:n})}),{})}}};return t.reduce(((e,t)=>Object.assign(e,function(e){const t=H(e),{key:n,name:r,reader:i,writer:a}=t;return{[r]:{get(){const e=this.data.get(n);return null!==e?i(e):t.defaultValue},set(e){void 0===e?this.data.delete(n):this.data.set(n,a(e))}},[`has${P(r)}`]:{get(){return this.data.has(n)||t.hasCustomDefaultValue}}}}(t))),n)}],ee.targets=[],ee.values={};const te=["altFormat","ariaDateFormat","dateFormat"],ne={string:["altInputClass","conjunction","mode","nextArrow","position","prevArrow","monthSelectorType"],boolean:["allowInput","altInput","animate","clickOpens","closeOnSelect","disableMobile","enableSeconds","enableTime","inline","noCalendar","shorthandCurrentMonth","static","time_24hr","weekNumbers","wrap"],date:["maxDate","minDate","maxTime","minTime","now"],array:["disable","enable","disableDaysOfWeek","enableDaysOfWeek"],number:["defaultHour","defaultMinute","defaultSeconds","hourIncrement","minuteIncrement","showMonths"],arrayOrString:["defaultDate"]},re=["change","open","close","monthChange","yearChange","ready","valueUpdate","dayCreate"],ie=["calendarContainer","currentYearElement","days","daysContainer","input","nextMonthNav","monthNav","prevMonthNav","rContainer","selectedDateElem","todayDateElem","weekdayContainer"],ae={"%Y":"Y","%y":"y","%C":"Y","%m":"m","%-m":"n","%_m":"n","%B":"F","%^B":"F","%b":"M","%^b":"M","%h":"M","%^h":"M","%d":"d","%-d":"j","%e":"j","%H":"H","%k":"H","%I":"h","%l":"h","%-l":"h","%P":"K","%p":"K","%M":"i","%S":"S","%A":"l","%a":"D","%w":"w"},oe=new RegExp(Object.keys(ae).join("|").replace(new RegExp("\\^","g"),"\\^"),"g");let se=function(e){!function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&R(e,t)}(i,e);var t,n,r=z(i);function i(){return function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,i),r.apply(this,arguments)}return t=i,n=[{key:"initialize",value:function(){this.config={}}},{key:"connect",value:function(){this._initializeEvents(),this._initializeOptions(),this._initializeDateFormats(),this.fp=_(this.flatpickrElement,function(e){for(var t=1;t{if(this[e]){const n=`on${t=e,t.charAt(0).toUpperCase()+t.slice(1)}`;this.config[n]=this[e].bind(this)}var t}))}},{key:"_initializeOptions",value:function(){Object.keys(ne).forEach((e=>{ne[e].forEach((t=>{const n=t.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/[\s_]+/g,"-").toLowerCase();this.data.has(n)&&(this.config[t]=this[`_${e}`](n))}))})),this._handleDaysOfWeek()}},{key:"_handleDaysOfWeek",value:function(){this.config.disableDaysOfWeek&&(this.config.disableDaysOfWeek=this._validateDaysOfWeek(this.config.disableDaysOfWeek),this.config.disable=[...this.config.disable||[],this._disable.bind(this)]),this.config.enableDaysOfWeek&&(this.config.enableDaysOfWeek=this._validateDaysOfWeek(this.config.enableDaysOfWeek),this.config.enable=[...this.config.enable||[],this._enable.bind(this)])}},{key:"_validateDaysOfWeek",value:function(e){return Array.isArray(e)?e.map((e=>parseInt(e))):(console.error("days of week must be a valid array"),[])}},{key:"_disable",value:function(e){return this.config.disableDaysOfWeek.includes(e.getDay())}},{key:"_enable",value:function(e){return this.config.enableDaysOfWeek.includes(e.getDay())}},{key:"_initializeDateFormats",value:function(){te.forEach((e=>{this.data.has(e)&&(this.config[e]=this.data.get(e).replace(oe,(e=>ae[e])))}))}},{key:"_initializeElements",value:function(){ie.forEach((e=>{this[`${e}Target`]=this.fp[e]}))}},{key:"_string",value:function(e){return this.data.get(e)}},{key:"_date",value:function(e){return this.data.get(e)}},{key:"_boolean",value:function(e){return!("0"==this.data.get(e)||"false"==this.data.get(e))}},{key:"_array",value:function(e){return JSON.parse(this.data.get(e))}},{key:"_number",value:function(e){return parseInt(this.data.get(e))}},{key:"_arrayOrString",value:function(e){const t=this.data.get(e);try{return JSON.parse(t)}catch(e){return t}}},{key:"flatpickrElement",get:function(){return this.hasInstanceTarget&&this.instanceTarget||this.element}}],n&&L(t.prototype,n),i}(ee);V(se,"targets",["instance"]);const le=se},728:(e,t,n)=>{n.r(t),n.d(t,{default:()=>g});var r=n(596),i=n.n(r),a=n(520),o=n.n(a),s=n(176),l=n.n(s),c=n(120),u=n.n(c),d=n(808),h=n.n(d),f=n(936),m=n.n(f),p=n(740),A={};A.styleTagTransform=m(),A.setAttributes=u(),A.insert=l().bind(null,"head"),A.domAPI=o(),A.insertStyleElement=h(),i()(p.c,A);const g=p.c&&p.c.locals?p.c.locals:void 0},596:e=>{var t=[];function n(e){for(var n=-1,r=0;r{var t={};e.exports=function(e,n){var r=function(e){if(void 0===t[e]){var n=document.querySelector(e);if(window.HTMLIFrameElement&&n instanceof window.HTMLIFrameElement)try{n=n.contentDocument.head}catch(e){n=null}t[e]=n}return t[e]}(e);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(n)}},808:e=>{e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},120:(e,t,n)=>{e.exports=function(e){var t=n.nc;t&&e.setAttribute("nonce",t)}},520:e=>{e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(n){!function(e,t,n){var r="";n.supports&&(r+="@supports (".concat(n.supports,") {")),n.media&&(r+="@media ".concat(n.media," {"));var i=void 0!==n.layer;i&&(r+="@layer".concat(n.layer.length>0?" ".concat(n.layer):""," {")),r+=n.css,i&&(r+="}"),n.media&&(r+="}"),n.supports&&(r+="}");var a=n.sourceMap;a&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(a))))," */")),t.styleTagTransform(r,e,t.options)}(t,e,n)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},936:e=>{e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},140:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),n(728);const i=n(888),a=r(n(920)),o=r(n(580)),s=r(n(516)),l=r(n(788)),c=r(n(564));window.Stimulus=i.Application.start(),window.Stimulus.register("form",a.default),window.Stimulus.register("timer",o.default),window.Stimulus.register("list",s.default),window.Stimulus.register("issue-completion",l.default),window.Stimulus.register("flatpickr",c.default)},564:function(e,t,n){var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});const i=r(n(508));class a extends i.default{open(e,t,n){t||n.setDate(Date.now())}}t.default=a},920:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0});const r=n(888),i=n(40);class a extends r.Controller{constructor(){super(...arguments),this.connected=!1}connect(){this.connected=!0}disconnect(){this.connected=!1}absoluteTime(e){try{const e=parseFloat(this.absolutInputTarget.value),t=this.convertToDateTime(this.startTarget.value);if(e&&t.isValid){const n=t.plus({hours:e});this.endTarget.value=n.toFormat("dd.LL.yyyy HH:mm"),this.endTarget.dispatchEvent(new Event("change"))}}finally{this.absolutInputTarget.value=""}}issueTargetConnected(e){this.connected&&this.change()}issueTargetDisconnected(e){this.connected&&this.change()}change(){const e={timer_start:this.startTarget.value,timer_end:this.endTarget.value,comments:this.descriptionTarget.value,issue_ids:this.extractIssueIds()||[]};this.dispatchUpdate(e)}extractIssueIds(){return this.issueTargets.map((e=>e.getAttribute("data-issue-id")||"")).filter((e=>null!==e))||[]}dispatchUpdate(e){this.hasStopButtonTarget&&$.ajax({type:"POST",url:window.RedmineTracky.trackerUpdatePath,data:{timer_session:e},async:!0})}convertToDateTime(e){return i.DateTime.fromFormat(e,window.RedmineTracky.datetimeFormatJavascript)}}a.targets=["description","start","stopButton","end","issue","absolutInput"],t.default=a},788:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0});const r=n(888);class i extends r.Controller{connect(){this.listenForInput()}listenForInput(){this.cleanup(),observeAutocompleteField(this.inputTarget.id,(function(e,t){const n=window.RedmineTracky.issueCompletionPath,r={term:e.term,scope:"all"};$.get(n,r,null,"json").done((e=>t(e))).fail((()=>t([])))}),{select:(e,t)=>(this.addIssue(t),this.cleanup(),!1)})}addIssue(e){const t=this.application.getControllerForElementAndIdentifier(this.listAnchorTarget,"list");t?.addItem(e.item)}clearInput(){$(this.inputTarget).val("")}cleanup(){this.clearInput(),$(".ui-autocomplete").hide(),$(".ui-helper-hidden-accessible").hide()}}i.targets=["input","listAnchor"],i.values={update:Boolean},t.default=i},516:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0});const r=n(888);class i extends r.Controller{addItem(e){this.tableTarget.getElementsByTagName("tbody")[0].appendChild(this.buildItem(e))}removeItem(e){const{target:t}=e,n=t.closest('[data-form-target="issue"]');n?.remove()}buildItem(e){const t=document.createElement("tr");return t.setAttribute("data-form-target","issue"),t.classList.add("issue-container"),t.setAttribute("data-issue-id",e.id.toString()),[this.buildLabelColumn(e),this.buildSubjectColumn(e),this.buildDeletionButtonColumn(e)].forEach((e=>t.appendChild(e))),t}buildLabelColumn(e){const t=document.createElement("b"),n=document.createElement("a");return n.setAttribute("href",`/issues/${e.id}`),n.setAttribute("target","_blank"),n.setAttribute("rel","noopener"),n.innerHTML=`${e.project} - ${e.id}: `,t.appendChild(n),this.buildColumn([t])}buildSubjectColumn(e){return this.buildColumn([document.createTextNode(e.subject)])}buildDeletionButtonColumn(e){const t=document.createElement("span"),n=document.createElement("i"),r=document.createElement("input");return t.classList.add("text-danger"),t.classList.add("input-group-text"),t.setAttribute("data-action","click->list#removeItem"),n.classList.add("icon-only"),n.classList.add("icon-del"),t.appendChild(n),r.setAttribute("id",`timer_session_issue_id_${e.id}`),r.setAttribute("readonly",""),r.setAttribute("hidden",""),r.setAttribute("name","timer_session[issue_ids][]"),r.setAttribute("value",e.id.toString()),this.buildColumn([t,r])}buildColumn(e){const t=document.createElement("td");return e.forEach((e=>t.appendChild(e))),t}}i.targets=["table"],t.default=i},580:(e,t,n)=>{Object.defineProperty(t,"__esModule",{value:!0});const r=n(888),i=n(40);class a extends r.Controller{constructor(){super(...arguments),this.timeDiffFields=["hours","minutes","seconds"],this.timeDiffFormat="hh:mm:ss"}connect(){const e=this.startTarget.value,t=this.endTarget.value;if(document.title=e?"⏱️ Tracky":"❌ Tracky",e&&t){const e=this.timeDifference();this.updateTimer(e)}else e&&this.startTicker()}disconnect(){this.stopTicker()}startTicker(){window.TimerInterval=setInterval((()=>{const e=this.timeDifference();this.updateTimer(e)}),1e3)}stopTicker(){window.TimerInterval&&clearInterval(window.TimerInterval)}timeDiffToString(e){return(e.minutes<0||e.seconds<0?"-":"")+["hours","minutes","seconds"].map((t=>e[t])).map((e=>Math.abs(Math.floor(e)))).filter(((e,t)=>0!==t||0!==e)).map((e=>e.toString().padStart(2,"0"))).join(":")}dateTimeFromTarget(e){const t=this.convertToDateTime(e.value);return t.isValid?t:this.adjustedDateTime()}timeDifference(){const e=this.dateTimeFromTarget(this.startTarget),t=this.dateTimeFromTarget(this.endTarget).diff(e,this.timeDiffFields);return this.timeDiffToString(t.values||{})}convertToDateTime(e){return i.DateTime.fromFormat(e,window.RedmineTracky.datetimeFormatJavascript)}updateTimer(e){$(this.labelTarget).text(e)}adjustedDateTime(){const e=i.DateTime.local().offset;return i.DateTime.local().minus({minutes:e-this.timezoneValue})}}a.targets=["start","end","label","description"],a.values={timezone:Number},t.default=a}},t={};function n(r){var i=t[r];if(void 0!==i)return i.exports;var a=t[r]={id:r,exports:{}};return e[r].call(a.exports,a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.nc=void 0,n(140)})(); +//# sourceMappingURL=data:application/json;charset=utf-8;base64,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TzJOLE9BQ2YsQ0NyQkE2aEQsRUFBb0J0bkQsRUFBS2xJLElBQ3hCLElBQUk0dkQsRUFBUzV2RCxHQUFVQSxFQUFPNnBELFdBQzdCLElBQU83cEQsRUFBaUIsUUFDeEIsSUFBTSxFQUVQLE9BREF3dkQsRUFBb0JqN0MsRUFBRXE3QyxFQUFRLENBQUU5K0QsRUFBRzgrRCxJQUM1QkEsQ0FBTSxFQ0xkSixFQUFvQmo3QyxFQUFJLENBQUM1RyxFQUFTdFEsS0FDakMsSUFBSSxJQUFJclIsS0FBT3FSLEVBQ1hteUQsRUFBb0IxOUMsRUFBRXpVLEVBQVlyUixLQUFTd2pFLEVBQW9CMTlDLEVBQUVuRSxFQUFTM2hCLElBQzVFaEQsT0FBT2dtQixlQUFlckIsRUFBUzNoQixFQUFLLENBQUVxNEQsWUFBWSxFQUFNMTRELElBQUswUixFQUFXclIsSUFFMUUsRUNORHdqRSxFQUFvQjE5QyxFQUFJLENBQUNhLEVBQUtDLElBQVU1cEIsT0FBTzJFLFVBQVVDLGVBQWV6RSxLQUFLd3BCLEVBQUtDLEdDQ2xGNDhDLEVBQW9CN3ZDLEVBQUtoUyxJQUNILG9CQUFYa2lELFFBQTBCQSxPQUFPQyxhQUMxQzltRSxPQUFPZ21CLGVBQWVyQixFQUFTa2lELE9BQU9DLFlBQWEsQ0FBRTFqRSxNQUFPLFdBRTdEcEQsT0FBT2dtQixlQUFlckIsRUFBUyxhQUFjLENBQUV2aEIsT0FBTyxHQUFPLEVDTDlEb2pFLEVBQW9CTyxRQUFLaDBELEVDR0N5ekQsRUFBb0IsSSIsInNvdXJjZXMiOlsid2VicGFjazovL3JlZG1pbmUtdHJhY2t5Ly4vbm9kZV9tb2R1bGVzL0Bob3R3aXJlZC9zdGltdWx1cy9kaXN0L3N0aW11bHVzLmpzIiwid2VicGFjazovL3JlZG1pbmUtdHJhY2t5Ly4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5jc3MiLCJ3ZWJwYWNrOi8vcmVkbWluZS10cmFja3kvLi9zcmMvcmVkbWluZS10cmFja3kuc2NzcyIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanMiLCJ3ZWJwYWNrOi8vcmVkbWluZS10cmFja3kvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9lc20vdXRpbHMvcG9seWZpbGxzLmpzIiwid2VicGFjazovL3JlZG1pbmUtdHJhY2t5Ly4vbm9kZV9tb2R1bGVzL2x1eG9uL2J1aWxkL25vZGUvbHV4b24uanMiLCJ3ZWJwYWNrOi8vcmVkbWluZS10cmFja3kvLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZXNtL3R5cGVzL29wdGlvbnMuanMiLCJ3ZWJwYWNrOi8vcmVkbWluZS10cmFja3kvLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZXNtL2wxMG4vZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9lc20vdXRpbHMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcmVkbWluZS10cmFja3kvLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZXNtL3V0aWxzL2RvbS5qcyIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9lc20vdXRpbHMvZm9ybWF0dGluZy5qcyIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS8uL25vZGVfbW9kdWxlcy9mbGF0cGlja3IvZGlzdC9lc20vdXRpbHMvZGF0ZXMuanMiLCJ3ZWJwYWNrOi8vcmVkbWluZS10cmFja3kvLi9ub2RlX21vZHVsZXMvZmxhdHBpY2tyL2Rpc3QvZXNtL2luZGV4LmpzIiwid2VicGFjazovL3JlZG1pbmUtdHJhY2t5Ly4vbm9kZV9tb2R1bGVzL3N0aW11bHVzLWZsYXRwaWNrci9kaXN0L2luZGV4Lm0uanMiLCJ3ZWJwYWNrOi8vcmVkbWluZS10cmFja3kvLi9zcmMvcmVkbWluZS10cmFja3kuc2Nzcz9lMzAxIiwid2VicGFjazovL3JlZG1pbmUtdHJhY2t5Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzIiwid2VicGFjazovL3JlZG1pbmUtdHJhY2t5Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qcyIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qcyIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL3JlZG1pbmUtdHJhY2t5Ly4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanMiLCJ3ZWJwYWNrOi8vcmVkbWluZS10cmFja3kvLi9zcmMvcmVkbWluZS10cmFja3kudHMiLCJ3ZWJwYWNrOi8vcmVkbWluZS10cmFja3kvLi9zcmMvcmVkbWluZS10cmFja3kvY29udHJvbGxlcnMvZmxhdHBpY2tyLWNvbnRyb2xsZXIudHMiLCJ3ZWJwYWNrOi8vcmVkbWluZS10cmFja3kvLi9zcmMvcmVkbWluZS10cmFja3kvY29udHJvbGxlcnMvZm9ybS1jb250cm9sbGVyLnRzIiwid2VicGFjazovL3JlZG1pbmUtdHJhY2t5Ly4vc3JjL3JlZG1pbmUtdHJhY2t5L2NvbnRyb2xsZXJzL2lzc3VlLWNvbXBsZXRpb24tY29udHJvbGxlci50cyIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS8uL3NyYy9yZWRtaW5lLXRyYWNreS9jb250cm9sbGVycy9saXN0LWNvbnRyb2xsZXIudHMiLCJ3ZWJwYWNrOi8vcmVkbWluZS10cmFja3kvLi9zcmMvcmVkbWluZS10cmFja3kvY29udHJvbGxlcnMvdGltZXItY29udHJvbGxlci50cyIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vcmVkbWluZS10cmFja3kvd2VicGFjay9ydW50aW1lL2hhc093blByb3BlcnR5IHNob3J0aGFuZCIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS93ZWJwYWNrL3J1bnRpbWUvbWFrZSBuYW1lc3BhY2Ugb2JqZWN0Iiwid2VicGFjazovL3JlZG1pbmUtdHJhY2t5L3dlYnBhY2svcnVudGltZS9ub25jZSIsIndlYnBhY2s6Ly9yZWRtaW5lLXRyYWNreS93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiLypcblN0aW11bHVzIDMuMi4xXG5Db3B5cmlnaHQgwqkgMjAyMyBCYXNlY2FtcCwgTExDXG4gKi9cbmNsYXNzIEV2ZW50TGlzdGVuZXIge1xuICAgIGNvbnN0cnVjdG9yKGV2ZW50VGFyZ2V0LCBldmVudE5hbWUsIGV2ZW50T3B0aW9ucykge1xuICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0ID0gZXZlbnRUYXJnZXQ7XG4gICAgICAgIHRoaXMuZXZlbnROYW1lID0gZXZlbnROYW1lO1xuICAgICAgICB0aGlzLmV2ZW50T3B0aW9ucyA9IGV2ZW50T3B0aW9ucztcbiAgICAgICAgdGhpcy51bm9yZGVyZWRCaW5kaW5ncyA9IG5ldyBTZXQoKTtcbiAgICB9XG4gICAgY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5ldmVudFRhcmdldC5hZGRFdmVudExpc3RlbmVyKHRoaXMuZXZlbnROYW1lLCB0aGlzLCB0aGlzLmV2ZW50T3B0aW9ucyk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuZXZlbnRUYXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcih0aGlzLmV2ZW50TmFtZSwgdGhpcywgdGhpcy5ldmVudE9wdGlvbnMpO1xuICAgIH1cbiAgICBiaW5kaW5nQ29ubmVjdGVkKGJpbmRpbmcpIHtcbiAgICAgICAgdGhpcy51bm9yZGVyZWRCaW5kaW5ncy5hZGQoYmluZGluZyk7XG4gICAgfVxuICAgIGJpbmRpbmdEaXNjb25uZWN0ZWQoYmluZGluZykge1xuICAgICAgICB0aGlzLnVub3JkZXJlZEJpbmRpbmdzLmRlbGV0ZShiaW5kaW5nKTtcbiAgICB9XG4gICAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZXh0ZW5kZWRFdmVudCA9IGV4dGVuZEV2ZW50KGV2ZW50KTtcbiAgICAgICAgZm9yIChjb25zdCBiaW5kaW5nIG9mIHRoaXMuYmluZGluZ3MpIHtcbiAgICAgICAgICAgIGlmIChleHRlbmRlZEV2ZW50LmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYmluZGluZy5oYW5kbGVFdmVudChleHRlbmRlZEV2ZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBoYXNCaW5kaW5ncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5vcmRlcmVkQmluZGluZ3Muc2l6ZSA+IDA7XG4gICAgfVxuICAgIGdldCBiaW5kaW5ncygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy51bm9yZGVyZWRCaW5kaW5ncykuc29ydCgobGVmdCwgcmlnaHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRJbmRleCA9IGxlZnQuaW5kZXgsIHJpZ2h0SW5kZXggPSByaWdodC5pbmRleDtcbiAgICAgICAgICAgIHJldHVybiBsZWZ0SW5kZXggPCByaWdodEluZGV4ID8gLTEgOiBsZWZ0SW5kZXggPiByaWdodEluZGV4ID8gMSA6IDA7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGV4dGVuZEV2ZW50KGV2ZW50KSB7XG4gICAgaWYgKFwiaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkXCIgaW4gZXZlbnQpIHtcbiAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24gfSA9IGV2ZW50O1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihldmVudCwge1xuICAgICAgICAgICAgaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiBmYWxzZSxcbiAgICAgICAgICAgIHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uLmNhbGwodGhpcyk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmNsYXNzIERpc3BhdGNoZXIge1xuICAgIGNvbnN0cnVjdG9yKGFwcGxpY2F0aW9uKSB7XG4gICAgICAgIHRoaXMuYXBwbGljYXRpb24gPSBhcHBsaWNhdGlvbjtcbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVyTWFwcyA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lcnMuZm9yRWFjaCgoZXZlbnRMaXN0ZW5lcikgPT4gZXZlbnRMaXN0ZW5lci5jb25uZWN0KCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5mb3JFYWNoKChldmVudExpc3RlbmVyKSA9PiBldmVudExpc3RlbmVyLmRpc2Nvbm5lY3QoKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGV2ZW50TGlzdGVuZXJzKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmV2ZW50TGlzdGVuZXJNYXBzLnZhbHVlcygpKS5yZWR1Y2UoKGxpc3RlbmVycywgbWFwKSA9PiBsaXN0ZW5lcnMuY29uY2F0KEFycmF5LmZyb20obWFwLnZhbHVlcygpKSksIFtdKTtcbiAgICB9XG4gICAgYmluZGluZ0Nvbm5lY3RlZChiaW5kaW5nKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hFdmVudExpc3RlbmVyRm9yQmluZGluZyhiaW5kaW5nKS5iaW5kaW5nQ29ubmVjdGVkKGJpbmRpbmcpO1xuICAgIH1cbiAgICBiaW5kaW5nRGlzY29ubmVjdGVkKGJpbmRpbmcsIGNsZWFyRXZlbnRMaXN0ZW5lcnMgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmZldGNoRXZlbnRMaXN0ZW5lckZvckJpbmRpbmcoYmluZGluZykuYmluZGluZ0Rpc2Nvbm5lY3RlZChiaW5kaW5nKTtcbiAgICAgICAgaWYgKGNsZWFyRXZlbnRMaXN0ZW5lcnMpXG4gICAgICAgICAgICB0aGlzLmNsZWFyRXZlbnRMaXN0ZW5lcnNGb3JCaW5kaW5nKGJpbmRpbmcpO1xuICAgIH1cbiAgICBoYW5kbGVFcnJvcihlcnJvciwgbWVzc2FnZSwgZGV0YWlsID0ge30pIHtcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5oYW5kbGVFcnJvcihlcnJvciwgYEVycm9yICR7bWVzc2FnZX1gLCBkZXRhaWwpO1xuICAgIH1cbiAgICBjbGVhckV2ZW50TGlzdGVuZXJzRm9yQmluZGluZyhiaW5kaW5nKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSB0aGlzLmZldGNoRXZlbnRMaXN0ZW5lckZvckJpbmRpbmcoYmluZGluZyk7XG4gICAgICAgIGlmICghZXZlbnRMaXN0ZW5lci5oYXNCaW5kaW5ncygpKSB7XG4gICAgICAgICAgICBldmVudExpc3RlbmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlTWFwcGVkRXZlbnRMaXN0ZW5lckZvcihiaW5kaW5nKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW1vdmVNYXBwZWRFdmVudExpc3RlbmVyRm9yKGJpbmRpbmcpIHtcbiAgICAgICAgY29uc3QgeyBldmVudFRhcmdldCwgZXZlbnROYW1lLCBldmVudE9wdGlvbnMgfSA9IGJpbmRpbmc7XG4gICAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXJNYXAgPSB0aGlzLmZldGNoRXZlbnRMaXN0ZW5lck1hcEZvckV2ZW50VGFyZ2V0KGV2ZW50VGFyZ2V0KTtcbiAgICAgICAgY29uc3QgY2FjaGVLZXkgPSB0aGlzLmNhY2hlS2V5KGV2ZW50TmFtZSwgZXZlbnRPcHRpb25zKTtcbiAgICAgICAgZXZlbnRMaXN0ZW5lck1hcC5kZWxldGUoY2FjaGVLZXkpO1xuICAgICAgICBpZiAoZXZlbnRMaXN0ZW5lck1hcC5zaXplID09IDApXG4gICAgICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXJNYXBzLmRlbGV0ZShldmVudFRhcmdldCk7XG4gICAgfVxuICAgIGZldGNoRXZlbnRMaXN0ZW5lckZvckJpbmRpbmcoYmluZGluZykge1xuICAgICAgICBjb25zdCB7IGV2ZW50VGFyZ2V0LCBldmVudE5hbWUsIGV2ZW50T3B0aW9ucyB9ID0gYmluZGluZztcbiAgICAgICAgcmV0dXJuIHRoaXMuZmV0Y2hFdmVudExpc3RlbmVyKGV2ZW50VGFyZ2V0LCBldmVudE5hbWUsIGV2ZW50T3B0aW9ucyk7XG4gICAgfVxuICAgIGZldGNoRXZlbnRMaXN0ZW5lcihldmVudFRhcmdldCwgZXZlbnROYW1lLCBldmVudE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgZXZlbnRMaXN0ZW5lck1hcCA9IHRoaXMuZmV0Y2hFdmVudExpc3RlbmVyTWFwRm9yRXZlbnRUYXJnZXQoZXZlbnRUYXJnZXQpO1xuICAgICAgICBjb25zdCBjYWNoZUtleSA9IHRoaXMuY2FjaGVLZXkoZXZlbnROYW1lLCBldmVudE9wdGlvbnMpO1xuICAgICAgICBsZXQgZXZlbnRMaXN0ZW5lciA9IGV2ZW50TGlzdGVuZXJNYXAuZ2V0KGNhY2hlS2V5KTtcbiAgICAgICAgaWYgKCFldmVudExpc3RlbmVyKSB7XG4gICAgICAgICAgICBldmVudExpc3RlbmVyID0gdGhpcy5jcmVhdGVFdmVudExpc3RlbmVyKGV2ZW50VGFyZ2V0LCBldmVudE5hbWUsIGV2ZW50T3B0aW9ucyk7XG4gICAgICAgICAgICBldmVudExpc3RlbmVyTWFwLnNldChjYWNoZUtleSwgZXZlbnRMaXN0ZW5lcik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV2ZW50TGlzdGVuZXI7XG4gICAgfVxuICAgIGNyZWF0ZUV2ZW50TGlzdGVuZXIoZXZlbnRUYXJnZXQsIGV2ZW50TmFtZSwgZXZlbnRPcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50TGlzdGVuZXIgPSBuZXcgRXZlbnRMaXN0ZW5lcihldmVudFRhcmdldCwgZXZlbnROYW1lLCBldmVudE9wdGlvbnMpO1xuICAgICAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICBldmVudExpc3RlbmVyLmNvbm5lY3QoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnRMaXN0ZW5lcjtcbiAgICB9XG4gICAgZmV0Y2hFdmVudExpc3RlbmVyTWFwRm9yRXZlbnRUYXJnZXQoZXZlbnRUYXJnZXQpIHtcbiAgICAgICAgbGV0IGV2ZW50TGlzdGVuZXJNYXAgPSB0aGlzLmV2ZW50TGlzdGVuZXJNYXBzLmdldChldmVudFRhcmdldCk7XG4gICAgICAgIGlmICghZXZlbnRMaXN0ZW5lck1hcCkge1xuICAgICAgICAgICAgZXZlbnRMaXN0ZW5lck1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lck1hcHMuc2V0KGV2ZW50VGFyZ2V0LCBldmVudExpc3RlbmVyTWFwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXZlbnRMaXN0ZW5lck1hcDtcbiAgICB9XG4gICAgY2FjaGVLZXkoZXZlbnROYW1lLCBldmVudE9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcGFydHMgPSBbZXZlbnROYW1lXTtcbiAgICAgICAgT2JqZWN0LmtleXMoZXZlbnRPcHRpb25zKVxuICAgICAgICAgICAgLnNvcnQoKVxuICAgICAgICAgICAgLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgcGFydHMucHVzaChgJHtldmVudE9wdGlvbnNba2V5XSA/IFwiXCIgOiBcIiFcIn0ke2tleX1gKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJ0cy5qb2luKFwiOlwiKTtcbiAgICB9XG59XG5cbmNvbnN0IGRlZmF1bHRBY3Rpb25EZXNjcmlwdG9yRmlsdGVycyA9IHtcbiAgICBzdG9wKHsgZXZlbnQsIHZhbHVlIH0pIHtcbiAgICAgICAgaWYgKHZhbHVlKVxuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgcHJldmVudCh7IGV2ZW50LCB2YWx1ZSB9KSB7XG4gICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sXG4gICAgc2VsZih7IGV2ZW50LCB2YWx1ZSwgZWxlbWVudCB9KSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQgPT09IGV2ZW50LnRhcmdldDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfSxcbn07XG5jb25zdCBkZXNjcmlwdG9yUGF0dGVybiA9IC9eKD86KD86KFteLl0rPylcXCspPyguKz8pKD86XFwuKC4rPykpPyg/OkAod2luZG93fGRvY3VtZW50KSk/LT4pPyguKz8pKD86IyhbXjpdKz8pKSg/OjooLispKT8kLztcbmZ1bmN0aW9uIHBhcnNlQWN0aW9uRGVzY3JpcHRvclN0cmluZyhkZXNjcmlwdG9yU3RyaW5nKSB7XG4gICAgY29uc3Qgc291cmNlID0gZGVzY3JpcHRvclN0cmluZy50cmltKCk7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHNvdXJjZS5tYXRjaChkZXNjcmlwdG9yUGF0dGVybikgfHwgW107XG4gICAgbGV0IGV2ZW50TmFtZSA9IG1hdGNoZXNbMl07XG4gICAgbGV0IGtleUZpbHRlciA9IG1hdGNoZXNbM107XG4gICAgaWYgKGtleUZpbHRlciAmJiAhW1wia2V5ZG93blwiLCBcImtleXVwXCIsIFwia2V5cHJlc3NcIl0uaW5jbHVkZXMoZXZlbnROYW1lKSkge1xuICAgICAgICBldmVudE5hbWUgKz0gYC4ke2tleUZpbHRlcn1gO1xuICAgICAgICBrZXlGaWx0ZXIgPSBcIlwiO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBldmVudFRhcmdldDogcGFyc2VFdmVudFRhcmdldChtYXRjaGVzWzRdKSxcbiAgICAgICAgZXZlbnROYW1lLFxuICAgICAgICBldmVudE9wdGlvbnM6IG1hdGNoZXNbN10gPyBwYXJzZUV2ZW50T3B0aW9ucyhtYXRjaGVzWzddKSA6IHt9LFxuICAgICAgICBpZGVudGlmaWVyOiBtYXRjaGVzWzVdLFxuICAgICAgICBtZXRob2ROYW1lOiBtYXRjaGVzWzZdLFxuICAgICAgICBrZXlGaWx0ZXI6IG1hdGNoZXNbMV0gfHwga2V5RmlsdGVyLFxuICAgIH07XG59XG5mdW5jdGlvbiBwYXJzZUV2ZW50VGFyZ2V0KGV2ZW50VGFyZ2V0TmFtZSkge1xuICAgIGlmIChldmVudFRhcmdldE5hbWUgPT0gXCJ3aW5kb3dcIikge1xuICAgICAgICByZXR1cm4gd2luZG93O1xuICAgIH1cbiAgICBlbHNlIGlmIChldmVudFRhcmdldE5hbWUgPT0gXCJkb2N1bWVudFwiKSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudDtcbiAgICB9XG59XG5mdW5jdGlvbiBwYXJzZUV2ZW50T3B0aW9ucyhldmVudE9wdGlvbnMpIHtcbiAgICByZXR1cm4gZXZlbnRPcHRpb25zXG4gICAgICAgIC5zcGxpdChcIjpcIilcbiAgICAgICAgLnJlZHVjZSgob3B0aW9ucywgdG9rZW4pID0+IE9iamVjdC5hc3NpZ24ob3B0aW9ucywgeyBbdG9rZW4ucmVwbGFjZSgvXiEvLCBcIlwiKV06ICEvXiEvLnRlc3QodG9rZW4pIH0pLCB7fSk7XG59XG5mdW5jdGlvbiBzdHJpbmdpZnlFdmVudFRhcmdldChldmVudFRhcmdldCkge1xuICAgIGlmIChldmVudFRhcmdldCA9PSB3aW5kb3cpIHtcbiAgICAgICAgcmV0dXJuIFwid2luZG93XCI7XG4gICAgfVxuICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0ID09IGRvY3VtZW50KSB7XG4gICAgICAgIHJldHVybiBcImRvY3VtZW50XCI7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBjYW1lbGl6ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oPzpbXy1dKShbYS16MC05XSkvZywgKF8sIGNoYXIpID0+IGNoYXIudG9VcHBlckNhc2UoKSk7XG59XG5mdW5jdGlvbiBuYW1lc3BhY2VDYW1lbGl6ZSh2YWx1ZSkge1xuICAgIHJldHVybiBjYW1lbGl6ZSh2YWx1ZS5yZXBsYWNlKC8tLS9nLCBcIi1cIikucmVwbGFjZSgvX18vZywgXCJfXCIpKTtcbn1cbmZ1bmN0aW9uIGNhcGl0YWxpemUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyB2YWx1ZS5zbGljZSgxKTtcbn1cbmZ1bmN0aW9uIGRhc2hlcml6ZSh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC8oW0EtWl0pL2csIChfLCBjaGFyKSA9PiBgLSR7Y2hhci50b0xvd2VyQ2FzZSgpfWApO1xufVxuZnVuY3Rpb24gdG9rZW5pemUodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUubWF0Y2goL1teXFxzXSsvZykgfHwgW107XG59XG5cbmZ1bmN0aW9uIGlzU29tZXRoaW5nKG9iamVjdCkge1xuICAgIHJldHVybiBvYmplY3QgIT09IG51bGwgJiYgb2JqZWN0ICE9PSB1bmRlZmluZWQ7XG59XG5mdW5jdGlvbiBoYXNQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTtcbn1cblxuY29uc3QgYWxsTW9kaWZpZXJzID0gW1wibWV0YVwiLCBcImN0cmxcIiwgXCJhbHRcIiwgXCJzaGlmdFwiXTtcbmNsYXNzIEFjdGlvbiB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgaW5kZXgsIGRlc2NyaXB0b3IsIHNjaGVtYSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIHRoaXMuZXZlbnRUYXJnZXQgPSBkZXNjcmlwdG9yLmV2ZW50VGFyZ2V0IHx8IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZXZlbnROYW1lID0gZGVzY3JpcHRvci5ldmVudE5hbWUgfHwgZ2V0RGVmYXVsdEV2ZW50TmFtZUZvckVsZW1lbnQoZWxlbWVudCkgfHwgZXJyb3IoXCJtaXNzaW5nIGV2ZW50IG5hbWVcIik7XG4gICAgICAgIHRoaXMuZXZlbnRPcHRpb25zID0gZGVzY3JpcHRvci5ldmVudE9wdGlvbnMgfHwge307XG4gICAgICAgIHRoaXMuaWRlbnRpZmllciA9IGRlc2NyaXB0b3IuaWRlbnRpZmllciB8fCBlcnJvcihcIm1pc3NpbmcgaWRlbnRpZmllclwiKTtcbiAgICAgICAgdGhpcy5tZXRob2ROYW1lID0gZGVzY3JpcHRvci5tZXRob2ROYW1lIHx8IGVycm9yKFwibWlzc2luZyBtZXRob2QgbmFtZVwiKTtcbiAgICAgICAgdGhpcy5rZXlGaWx0ZXIgPSBkZXNjcmlwdG9yLmtleUZpbHRlciB8fCBcIlwiO1xuICAgICAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICB9XG4gICAgc3RhdGljIGZvclRva2VuKHRva2VuLCBzY2hlbWEpIHtcbiAgICAgICAgcmV0dXJuIG5ldyB0aGlzKHRva2VuLmVsZW1lbnQsIHRva2VuLmluZGV4LCBwYXJzZUFjdGlvbkRlc2NyaXB0b3JTdHJpbmcodG9rZW4uY29udGVudCksIHNjaGVtYSk7XG4gICAgfVxuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBjb25zdCBldmVudEZpbHRlciA9IHRoaXMua2V5RmlsdGVyID8gYC4ke3RoaXMua2V5RmlsdGVyfWAgOiBcIlwiO1xuICAgICAgICBjb25zdCBldmVudFRhcmdldCA9IHRoaXMuZXZlbnRUYXJnZXROYW1lID8gYEAke3RoaXMuZXZlbnRUYXJnZXROYW1lfWAgOiBcIlwiO1xuICAgICAgICByZXR1cm4gYCR7dGhpcy5ldmVudE5hbWV9JHtldmVudEZpbHRlcn0ke2V2ZW50VGFyZ2V0fS0+JHt0aGlzLmlkZW50aWZpZXJ9IyR7dGhpcy5tZXRob2ROYW1lfWA7XG4gICAgfVxuICAgIHNob3VsZElnbm9yZUtleWJvYXJkRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgaWYgKCF0aGlzLmtleUZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmtleUZpbHRlci5zcGxpdChcIitcIik7XG4gICAgICAgIGlmICh0aGlzLmtleUZpbHRlckRpc3NhdGlzZmllZChldmVudCwgZmlsdGVycykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0YW5kYXJkRmlsdGVyID0gZmlsdGVycy5maWx0ZXIoKGtleSkgPT4gIWFsbE1vZGlmaWVycy5pbmNsdWRlcyhrZXkpKVswXTtcbiAgICAgICAgaWYgKCFzdGFuZGFyZEZpbHRlcikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaGFzUHJvcGVydHkodGhpcy5rZXlNYXBwaW5ncywgc3RhbmRhcmRGaWx0ZXIpKSB7XG4gICAgICAgICAgICBlcnJvcihgY29udGFpbnMgdW5rbm93biBrZXkgZmlsdGVyOiAke3RoaXMua2V5RmlsdGVyfWApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmtleU1hcHBpbmdzW3N0YW5kYXJkRmlsdGVyXS50b0xvd2VyQ2FzZSgpICE9PSBldmVudC5rZXkudG9Mb3dlckNhc2UoKTtcbiAgICB9XG4gICAgc2hvdWxkSWdub3JlTW91c2VFdmVudChldmVudCkge1xuICAgICAgICBpZiAoIXRoaXMua2V5RmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmlsdGVycyA9IFt0aGlzLmtleUZpbHRlcl07XG4gICAgICAgIGlmICh0aGlzLmtleUZpbHRlckRpc3NhdGlzZmllZChldmVudCwgZmlsdGVycykpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZ2V0IHBhcmFtcygpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zID0ge307XG4gICAgICAgIGNvbnN0IHBhdHRlcm4gPSBuZXcgUmVnRXhwKGBeZGF0YS0ke3RoaXMuaWRlbnRpZmllcn0tKC4rKS1wYXJhbSRgLCBcImlcIik7XG4gICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIEFycmF5LmZyb20odGhpcy5lbGVtZW50LmF0dHJpYnV0ZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBtYXRjaCA9IG5hbWUubWF0Y2gocGF0dGVybik7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBtYXRjaCAmJiBtYXRjaFsxXTtcbiAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgICBwYXJhbXNbY2FtZWxpemUoa2V5KV0gPSB0eXBlY2FzdCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG4gICAgZ2V0IGV2ZW50VGFyZ2V0TmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeUV2ZW50VGFyZ2V0KHRoaXMuZXZlbnRUYXJnZXQpO1xuICAgIH1cbiAgICBnZXQga2V5TWFwcGluZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5rZXlNYXBwaW5ncztcbiAgICB9XG4gICAga2V5RmlsdGVyRGlzc2F0aXNmaWVkKGV2ZW50LCBmaWx0ZXJzKSB7XG4gICAgICAgIGNvbnN0IFttZXRhLCBjdHJsLCBhbHQsIHNoaWZ0XSA9IGFsbE1vZGlmaWVycy5tYXAoKG1vZGlmaWVyKSA9PiBmaWx0ZXJzLmluY2x1ZGVzKG1vZGlmaWVyKSk7XG4gICAgICAgIHJldHVybiBldmVudC5tZXRhS2V5ICE9PSBtZXRhIHx8IGV2ZW50LmN0cmxLZXkgIT09IGN0cmwgfHwgZXZlbnQuYWx0S2V5ICE9PSBhbHQgfHwgZXZlbnQuc2hpZnRLZXkgIT09IHNoaWZ0O1xuICAgIH1cbn1cbmNvbnN0IGRlZmF1bHRFdmVudE5hbWVzID0ge1xuICAgIGE6ICgpID0+IFwiY2xpY2tcIixcbiAgICBidXR0b246ICgpID0+IFwiY2xpY2tcIixcbiAgICBmb3JtOiAoKSA9PiBcInN1Ym1pdFwiLFxuICAgIGRldGFpbHM6ICgpID0+IFwidG9nZ2xlXCIsXG4gICAgaW5wdXQ6IChlKSA9PiAoZS5nZXRBdHRyaWJ1dGUoXCJ0eXBlXCIpID09IFwic3VibWl0XCIgPyBcImNsaWNrXCIgOiBcImlucHV0XCIpLFxuICAgIHNlbGVjdDogKCkgPT4gXCJjaGFuZ2VcIixcbiAgICB0ZXh0YXJlYTogKCkgPT4gXCJpbnB1dFwiLFxufTtcbmZ1bmN0aW9uIGdldERlZmF1bHRFdmVudE5hbWVGb3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgICBjb25zdCB0YWdOYW1lID0gZWxlbWVudC50YWdOYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKHRhZ05hbWUgaW4gZGVmYXVsdEV2ZW50TmFtZXMpIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRFdmVudE5hbWVzW3RhZ05hbWVdKGVsZW1lbnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVycm9yKG1lc3NhZ2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG5mdW5jdGlvbiB0eXBlY2FzdCh2YWx1ZSkge1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKG9fTykge1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxufVxuXG5jbGFzcyBCaW5kaW5nIHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCBhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5hY3Rpb24gPSBhY3Rpb247XG4gICAgfVxuICAgIGdldCBpbmRleCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uLmluZGV4O1xuICAgIH1cbiAgICBnZXQgZXZlbnRUYXJnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFjdGlvbi5ldmVudFRhcmdldDtcbiAgICB9XG4gICAgZ2V0IGV2ZW50T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uLmV2ZW50T3B0aW9ucztcbiAgICB9XG4gICAgZ2V0IGlkZW50aWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuaWRlbnRpZmllcjtcbiAgICB9XG4gICAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uRXZlbnQgPSB0aGlzLnByZXBhcmVBY3Rpb25FdmVudChldmVudCk7XG4gICAgICAgIGlmICh0aGlzLndpbGxCZUludm9rZWRCeUV2ZW50KGV2ZW50KSAmJiB0aGlzLmFwcGx5RXZlbnRNb2RpZmllcnMoYWN0aW9uRXZlbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZVdpdGhFdmVudChhY3Rpb25FdmVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGV2ZW50TmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWN0aW9uLmV2ZW50TmFtZTtcbiAgICB9XG4gICAgZ2V0IG1ldGhvZCgpIHtcbiAgICAgICAgY29uc3QgbWV0aG9kID0gdGhpcy5jb250cm9sbGVyW3RoaXMubWV0aG9kTmFtZV07XG4gICAgICAgIGlmICh0eXBlb2YgbWV0aG9kID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgcmV0dXJuIG1ldGhvZDtcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFjdGlvbiBcIiR7dGhpcy5hY3Rpb259XCIgcmVmZXJlbmNlcyB1bmRlZmluZWQgbWV0aG9kIFwiJHt0aGlzLm1ldGhvZE5hbWV9XCJgKTtcbiAgICB9XG4gICAgYXBwbHlFdmVudE1vZGlmaWVycyhldmVudCkge1xuICAgICAgICBjb25zdCB7IGVsZW1lbnQgfSA9IHRoaXMuYWN0aW9uO1xuICAgICAgICBjb25zdCB7IGFjdGlvbkRlc2NyaXB0b3JGaWx0ZXJzIH0gPSB0aGlzLmNvbnRleHQuYXBwbGljYXRpb247XG4gICAgICAgIGNvbnN0IHsgY29udHJvbGxlciB9ID0gdGhpcy5jb250ZXh0O1xuICAgICAgICBsZXQgcGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZXZlbnRPcHRpb25zKSkge1xuICAgICAgICAgICAgaWYgKG5hbWUgaW4gYWN0aW9uRGVzY3JpcHRvckZpbHRlcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBhY3Rpb25EZXNjcmlwdG9yRmlsdGVyc1tuYW1lXTtcbiAgICAgICAgICAgICAgICBwYXNzZXMgPSBwYXNzZXMgJiYgZmlsdGVyKHsgbmFtZSwgdmFsdWUsIGV2ZW50LCBlbGVtZW50LCBjb250cm9sbGVyIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhc3NlcztcbiAgICB9XG4gICAgcHJlcGFyZUFjdGlvbkV2ZW50KGV2ZW50KSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKGV2ZW50LCB7IHBhcmFtczogdGhpcy5hY3Rpb24ucGFyYW1zIH0pO1xuICAgIH1cbiAgICBpbnZva2VXaXRoRXZlbnQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgeyB0YXJnZXQsIGN1cnJlbnRUYXJnZXQgfSA9IGV2ZW50O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5tZXRob2QuY2FsbCh0aGlzLmNvbnRyb2xsZXIsIGV2ZW50KTtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5sb2dEZWJ1Z0FjdGl2aXR5KHRoaXMubWV0aG9kTmFtZSwgeyBldmVudCwgdGFyZ2V0LCBjdXJyZW50VGFyZ2V0LCBhY3Rpb246IHRoaXMubWV0aG9kTmFtZSB9KTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgaWRlbnRpZmllciwgY29udHJvbGxlciwgZWxlbWVudCwgaW5kZXggfSA9IHRoaXM7XG4gICAgICAgICAgICBjb25zdCBkZXRhaWwgPSB7IGlkZW50aWZpZXIsIGNvbnRyb2xsZXIsIGVsZW1lbnQsIGluZGV4LCBldmVudCB9O1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmhhbmRsZUVycm9yKGVycm9yLCBgaW52b2tpbmcgYWN0aW9uIFwiJHt0aGlzLmFjdGlvbn1cImAsIGRldGFpbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgd2lsbEJlSW52b2tlZEJ5RXZlbnQoZXZlbnQpIHtcbiAgICAgICAgY29uc3QgZXZlbnRUYXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEtleWJvYXJkRXZlbnQgJiYgdGhpcy5hY3Rpb24uc2hvdWxkSWdub3JlS2V5Ym9hcmRFdmVudChldmVudCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50ICYmIHRoaXMuYWN0aW9uLnNob3VsZElnbm9yZU1vdXNlRXZlbnQoZXZlbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudCA9PT0gZXZlbnRUYXJnZXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJiB0aGlzLmVsZW1lbnQuY29udGFpbnMoZXZlbnRUYXJnZXQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zY29wZS5jb250YWluc0VsZW1lbnQoZXZlbnRUYXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGUuY29udGFpbnNFbGVtZW50KHRoaXMuYWN0aW9uLmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBjb250cm9sbGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmNvbnRyb2xsZXI7XG4gICAgfVxuICAgIGdldCBtZXRob2ROYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb24ubWV0aG9kTmFtZTtcbiAgICB9XG4gICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjb3BlLmVsZW1lbnQ7XG4gICAgfVxuICAgIGdldCBzY29wZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5zY29wZTtcbiAgICB9XG59XG5cbmNsYXNzIEVsZW1lbnRPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVySW5pdCA9IHsgYXR0cmlidXRlczogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlIH07XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgIHRoaXMuZWxlbWVudHMgPSBuZXcgU2V0KCk7XG4gICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKChtdXRhdGlvbnMpID0+IHRoaXMucHJvY2Vzc011dGF0aW9ucyhtdXRhdGlvbnMpKTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50LCB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJJbml0KTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHBhdXNlKGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5kaXNjb25uZWN0KCk7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLm9ic2VydmUodGhpcy5lbGVtZW50LCB0aGlzLm11dGF0aW9uT2JzZXJ2ZXJJbml0KTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLnRha2VSZWNvcmRzKCk7XG4gICAgICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IG5ldyBTZXQodGhpcy5tYXRjaEVsZW1lbnRzSW5UcmVlKCkpO1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIEFycmF5LmZyb20odGhpcy5lbGVtZW50cykpIHtcbiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgQXJyYXkuZnJvbShtYXRjaGVzKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzTXV0YXRpb25zKG11dGF0aW9ucykge1xuICAgICAgICBpZiAodGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IG11dGF0aW9uIG9mIG11dGF0aW9ucykge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc011dGF0aW9uKG11dGF0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzTXV0YXRpb24obXV0YXRpb24pIHtcbiAgICAgICAgaWYgKG11dGF0aW9uLnR5cGUgPT0gXCJhdHRyaWJ1dGVzXCIpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0F0dHJpYnV0ZUNoYW5nZShtdXRhdGlvbi50YXJnZXQsIG11dGF0aW9uLmF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG11dGF0aW9uLnR5cGUgPT0gXCJjaGlsZExpc3RcIikge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzUmVtb3ZlZE5vZGVzKG11dGF0aW9uLnJlbW92ZWROb2Rlcyk7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NBZGRlZE5vZGVzKG11dGF0aW9uLmFkZGVkTm9kZXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NBdHRyaWJ1dGVDaGFuZ2UoZWxlbWVudCwgYXR0cmlidXRlTmFtZSkge1xuICAgICAgICBpZiAodGhpcy5lbGVtZW50cy5oYXMoZWxlbWVudCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlbGVnYXRlLmVsZW1lbnRBdHRyaWJ1dGVDaGFuZ2VkICYmIHRoaXMubWF0Y2hFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5lbGVtZW50QXR0cmlidXRlQ2hhbmdlZChlbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLm1hdGNoRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5hZGRFbGVtZW50KGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByb2Nlc3NSZW1vdmVkTm9kZXMobm9kZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBub2RlIG9mIEFycmF5LmZyb20obm9kZXMpKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5lbGVtZW50RnJvbU5vZGUobm9kZSk7XG4gICAgICAgICAgICBpZiAoZWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1RyZWUoZWxlbWVudCwgdGhpcy5yZW1vdmVFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzQWRkZWROb2Rlcyhub2Rlcykge1xuICAgICAgICBmb3IgKGNvbnN0IG5vZGUgb2YgQXJyYXkuZnJvbShub2RlcykpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmVsZW1lbnRGcm9tTm9kZShub2RlKTtcbiAgICAgICAgICAgIGlmIChlbGVtZW50ICYmIHRoaXMuZWxlbWVudElzQWN0aXZlKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzVHJlZShlbGVtZW50LCB0aGlzLmFkZEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIG1hdGNoRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hdGNoRWxlbWVudChlbGVtZW50KTtcbiAgICB9XG4gICAgbWF0Y2hFbGVtZW50c0luVHJlZSh0cmVlID0gdGhpcy5lbGVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbGVnYXRlLm1hdGNoRWxlbWVudHNJblRyZWUodHJlZSk7XG4gICAgfVxuICAgIHByb2Nlc3NUcmVlKHRyZWUsIHByb2Nlc3Nvcikge1xuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgdGhpcy5tYXRjaEVsZW1lbnRzSW5UcmVlKHRyZWUpKSB7XG4gICAgICAgICAgICBwcm9jZXNzb3IuY2FsbCh0aGlzLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbGVtZW50RnJvbU5vZGUobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSA9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxlbWVudElzQWN0aXZlKGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQuaXNDb25uZWN0ZWQgIT0gdGhpcy5lbGVtZW50LmlzQ29ubmVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LmNvbnRhaW5zKGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGFkZEVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBpZiAoIXRoaXMuZWxlbWVudHMuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5lbGVtZW50SXNBY3RpdmUoZWxlbWVudCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmFkZChlbGVtZW50KTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZS5lbGVtZW50TWF0Y2hlZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmVsZW1lbnRNYXRjaGVkKGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZW1vdmVFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudHMuaGFzKGVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnRzLmRlbGV0ZShlbGVtZW50KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmRlbGVnYXRlLmVsZW1lbnRVbm1hdGNoZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmVsZW1lbnRVbm1hdGNoZWQoZWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNsYXNzIEF0dHJpYnV0ZU9ic2VydmVyIHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCBhdHRyaWJ1dGVOYW1lLCBkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lO1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgIHRoaXMuZWxlbWVudE9ic2VydmVyID0gbmV3IEVsZW1lbnRPYnNlcnZlcihlbGVtZW50LCB0aGlzKTtcbiAgICB9XG4gICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRPYnNlcnZlci5lbGVtZW50O1xuICAgIH1cbiAgICBnZXQgc2VsZWN0b3IoKSB7XG4gICAgICAgIHJldHVybiBgWyR7dGhpcy5hdHRyaWJ1dGVOYW1lfV1gO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50T2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICB9XG4gICAgcGF1c2UoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5lbGVtZW50T2JzZXJ2ZXIucGF1c2UoY2FsbGJhY2spO1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRPYnNlcnZlci5zdG9wKCk7XG4gICAgfVxuICAgIHJlZnJlc2goKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudE9ic2VydmVyLnJlZnJlc2goKTtcbiAgICB9XG4gICAgZ2V0IHN0YXJ0ZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnRPYnNlcnZlci5zdGFydGVkO1xuICAgIH1cbiAgICBtYXRjaEVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUodGhpcy5hdHRyaWJ1dGVOYW1lKTtcbiAgICB9XG4gICAgbWF0Y2hFbGVtZW50c0luVHJlZSh0cmVlKSB7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaEVsZW1lbnQodHJlZSkgPyBbdHJlZV0gOiBbXTtcbiAgICAgICAgY29uc3QgbWF0Y2hlcyA9IEFycmF5LmZyb20odHJlZS5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuc2VsZWN0b3IpKTtcbiAgICAgICAgcmV0dXJuIG1hdGNoLmNvbmNhdChtYXRjaGVzKTtcbiAgICB9XG4gICAgZWxlbWVudE1hdGNoZWQoZWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZS5lbGVtZW50TWF0Y2hlZEF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5lbGVtZW50TWF0Y2hlZEF0dHJpYnV0ZShlbGVtZW50LCB0aGlzLmF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsZW1lbnRVbm1hdGNoZWQoZWxlbWVudCkge1xuICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZS5lbGVtZW50VW5tYXRjaGVkQXR0cmlidXRlKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmVsZW1lbnRVbm1hdGNoZWRBdHRyaWJ1dGUoZWxlbWVudCwgdGhpcy5hdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbGVtZW50QXR0cmlidXRlQ2hhbmdlZChlbGVtZW50LCBhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgIGlmICh0aGlzLmRlbGVnYXRlLmVsZW1lbnRBdHRyaWJ1dGVWYWx1ZUNoYW5nZWQgJiYgdGhpcy5hdHRyaWJ1dGVOYW1lID09IGF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUuZWxlbWVudEF0dHJpYnV0ZVZhbHVlQ2hhbmdlZChlbGVtZW50LCBhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZnVuY3Rpb24gYWRkKG1hcCwga2V5LCB2YWx1ZSkge1xuICAgIGZldGNoKG1hcCwga2V5KS5hZGQodmFsdWUpO1xufVxuZnVuY3Rpb24gZGVsKG1hcCwga2V5LCB2YWx1ZSkge1xuICAgIGZldGNoKG1hcCwga2V5KS5kZWxldGUodmFsdWUpO1xuICAgIHBydW5lKG1hcCwga2V5KTtcbn1cbmZ1bmN0aW9uIGZldGNoKG1hcCwga2V5KSB7XG4gICAgbGV0IHZhbHVlcyA9IG1hcC5nZXQoa2V5KTtcbiAgICBpZiAoIXZhbHVlcykge1xuICAgICAgICB2YWx1ZXMgPSBuZXcgU2V0KCk7XG4gICAgICAgIG1hcC5zZXQoa2V5LCB2YWx1ZXMpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsdWVzO1xufVxuZnVuY3Rpb24gcHJ1bmUobWFwLCBrZXkpIHtcbiAgICBjb25zdCB2YWx1ZXMgPSBtYXAuZ2V0KGtleSk7XG4gICAgaWYgKHZhbHVlcyAhPSBudWxsICYmIHZhbHVlcy5zaXplID09IDApIHtcbiAgICAgICAgbWFwLmRlbGV0ZShrZXkpO1xuICAgIH1cbn1cblxuY2xhc3MgTXVsdGltYXAge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnZhbHVlc0J5S2V5ID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBnZXQga2V5cygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy52YWx1ZXNCeUtleS5rZXlzKCkpO1xuICAgIH1cbiAgICBnZXQgdmFsdWVzKCkge1xuICAgICAgICBjb25zdCBzZXRzID0gQXJyYXkuZnJvbSh0aGlzLnZhbHVlc0J5S2V5LnZhbHVlcygpKTtcbiAgICAgICAgcmV0dXJuIHNldHMucmVkdWNlKCh2YWx1ZXMsIHNldCkgPT4gdmFsdWVzLmNvbmNhdChBcnJheS5mcm9tKHNldCkpLCBbXSk7XG4gICAgfVxuICAgIGdldCBzaXplKCkge1xuICAgICAgICBjb25zdCBzZXRzID0gQXJyYXkuZnJvbSh0aGlzLnZhbHVlc0J5S2V5LnZhbHVlcygpKTtcbiAgICAgICAgcmV0dXJuIHNldHMucmVkdWNlKChzaXplLCBzZXQpID0+IHNpemUgKyBzZXQuc2l6ZSwgMCk7XG4gICAgfVxuICAgIGFkZChrZXksIHZhbHVlKSB7XG4gICAgICAgIGFkZCh0aGlzLnZhbHVlc0J5S2V5LCBrZXksIHZhbHVlKTtcbiAgICB9XG4gICAgZGVsZXRlKGtleSwgdmFsdWUpIHtcbiAgICAgICAgZGVsKHRoaXMudmFsdWVzQnlLZXksIGtleSwgdmFsdWUpO1xuICAgIH1cbiAgICBoYXMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnZhbHVlc0J5S2V5LmdldChrZXkpO1xuICAgICAgICByZXR1cm4gdmFsdWVzICE9IG51bGwgJiYgdmFsdWVzLmhhcyh2YWx1ZSk7XG4gICAgfVxuICAgIGhhc0tleShrZXkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVzQnlLZXkuaGFzKGtleSk7XG4gICAgfVxuICAgIGhhc1ZhbHVlKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHNldHMgPSBBcnJheS5mcm9tKHRoaXMudmFsdWVzQnlLZXkudmFsdWVzKCkpO1xuICAgICAgICByZXR1cm4gc2V0cy5zb21lKChzZXQpID0+IHNldC5oYXModmFsdWUpKTtcbiAgICB9XG4gICAgZ2V0VmFsdWVzRm9yS2V5KGtleSkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnZhbHVlc0J5S2V5LmdldChrZXkpO1xuICAgICAgICByZXR1cm4gdmFsdWVzID8gQXJyYXkuZnJvbSh2YWx1ZXMpIDogW107XG4gICAgfVxuICAgIGdldEtleXNGb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnZhbHVlc0J5S2V5KVxuICAgICAgICAgICAgLmZpbHRlcigoW19rZXksIHZhbHVlc10pID0+IHZhbHVlcy5oYXModmFsdWUpKVxuICAgICAgICAgICAgLm1hcCgoW2tleSwgX3ZhbHVlc10pID0+IGtleSk7XG4gICAgfVxufVxuXG5jbGFzcyBJbmRleGVkTXVsdGltYXAgZXh0ZW5kcyBNdWx0aW1hcCB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMua2V5c0J5VmFsdWUgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGdldCB2YWx1ZXMoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMua2V5c0J5VmFsdWUua2V5cygpKTtcbiAgICB9XG4gICAgYWRkKGtleSwgdmFsdWUpIHtcbiAgICAgICAgc3VwZXIuYWRkKGtleSwgdmFsdWUpO1xuICAgICAgICBhZGQodGhpcy5rZXlzQnlWYWx1ZSwgdmFsdWUsIGtleSk7XG4gICAgfVxuICAgIGRlbGV0ZShrZXksIHZhbHVlKSB7XG4gICAgICAgIHN1cGVyLmRlbGV0ZShrZXksIHZhbHVlKTtcbiAgICAgICAgZGVsKHRoaXMua2V5c0J5VmFsdWUsIHZhbHVlLCBrZXkpO1xuICAgIH1cbiAgICBoYXNWYWx1ZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5rZXlzQnlWYWx1ZS5oYXModmFsdWUpO1xuICAgIH1cbiAgICBnZXRLZXlzRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgICAgY29uc3Qgc2V0ID0gdGhpcy5rZXlzQnlWYWx1ZS5nZXQodmFsdWUpO1xuICAgICAgICByZXR1cm4gc2V0ID8gQXJyYXkuZnJvbShzZXQpIDogW107XG4gICAgfVxufVxuXG5jbGFzcyBTZWxlY3Rvck9ic2VydmVyIHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50LCBzZWxlY3RvciwgZGVsZWdhdGUsIGRldGFpbHMpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgdGhpcy5kZXRhaWxzID0gZGV0YWlscztcbiAgICAgICAgdGhpcy5lbGVtZW50T2JzZXJ2ZXIgPSBuZXcgRWxlbWVudE9ic2VydmVyKGVsZW1lbnQsIHRoaXMpO1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgIHRoaXMubWF0Y2hlc0J5RWxlbWVudCA9IG5ldyBNdWx0aW1hcCgpO1xuICAgIH1cbiAgICBnZXQgc3RhcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudE9ic2VydmVyLnN0YXJ0ZWQ7XG4gICAgfVxuICAgIGdldCBzZWxlY3RvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlbGVjdG9yO1xuICAgIH1cbiAgICBzZXQgc2VsZWN0b3Ioc2VsZWN0b3IpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0b3IgPSBzZWxlY3RvcjtcbiAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICB0aGlzLmVsZW1lbnRPYnNlcnZlci5zdGFydCgpO1xuICAgIH1cbiAgICBwYXVzZShjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmVsZW1lbnRPYnNlcnZlci5wYXVzZShjYWxsYmFjayk7XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudE9ic2VydmVyLnN0b3AoKTtcbiAgICB9XG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgdGhpcy5lbGVtZW50T2JzZXJ2ZXIucmVmcmVzaCgpO1xuICAgIH1cbiAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudE9ic2VydmVyLmVsZW1lbnQ7XG4gICAgfVxuICAgIG1hdGNoRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHsgc2VsZWN0b3IgfSA9IHRoaXM7XG4gICAgICAgIGlmIChzZWxlY3Rvcikge1xuICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7XG4gICAgICAgICAgICBpZiAodGhpcy5kZWxlZ2F0ZS5zZWxlY3Rvck1hdGNoRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaGVzICYmIHRoaXMuZGVsZWdhdGUuc2VsZWN0b3JNYXRjaEVsZW1lbnQoZWxlbWVudCwgdGhpcy5kZXRhaWxzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1hdGNoRWxlbWVudHNJblRyZWUodHJlZSkge1xuICAgICAgICBjb25zdCB7IHNlbGVjdG9yIH0gPSB0aGlzO1xuICAgICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gdGhpcy5tYXRjaEVsZW1lbnQodHJlZSkgPyBbdHJlZV0gOiBbXTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSBBcnJheS5mcm9tKHRyZWUucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpLmZpbHRlcigobWF0Y2gpID0+IHRoaXMubWF0Y2hFbGVtZW50KG1hdGNoKSk7XG4gICAgICAgICAgICByZXR1cm4gbWF0Y2guY29uY2F0KG1hdGNoZXMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsZW1lbnRNYXRjaGVkKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgeyBzZWxlY3RvciB9ID0gdGhpcztcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdG9yTWF0Y2hlZChlbGVtZW50LCBzZWxlY3Rvcik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxlbWVudFVubWF0Y2hlZChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9ycyA9IHRoaXMubWF0Y2hlc0J5RWxlbWVudC5nZXRLZXlzRm9yVmFsdWUoZWxlbWVudCk7XG4gICAgICAgIGZvciAoY29uc3Qgc2VsZWN0b3Igb2Ygc2VsZWN0b3JzKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdG9yVW5tYXRjaGVkKGVsZW1lbnQsIHNlbGVjdG9yKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbGVtZW50QXR0cmlidXRlQ2hhbmdlZChlbGVtZW50LCBfYXR0cmlidXRlTmFtZSkge1xuICAgICAgICBjb25zdCB7IHNlbGVjdG9yIH0gPSB0aGlzO1xuICAgICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZXMgPSB0aGlzLm1hdGNoRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoZWRCZWZvcmUgPSB0aGlzLm1hdGNoZXNCeUVsZW1lbnQuaGFzKHNlbGVjdG9yLCBlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChtYXRjaGVzICYmICFtYXRjaGVkQmVmb3JlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rvck1hdGNoZWQoZWxlbWVudCwgc2VsZWN0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIW1hdGNoZXMgJiYgbWF0Y2hlZEJlZm9yZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0b3JVbm1hdGNoZWQoZWxlbWVudCwgc2VsZWN0b3IpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHNlbGVjdG9yTWF0Y2hlZChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnNlbGVjdG9yTWF0Y2hlZChlbGVtZW50LCBzZWxlY3RvciwgdGhpcy5kZXRhaWxzKTtcbiAgICAgICAgdGhpcy5tYXRjaGVzQnlFbGVtZW50LmFkZChzZWxlY3RvciwgZWxlbWVudCk7XG4gICAgfVxuICAgIHNlbGVjdG9yVW5tYXRjaGVkKGVsZW1lbnQsIHNlbGVjdG9yKSB7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUuc2VsZWN0b3JVbm1hdGNoZWQoZWxlbWVudCwgc2VsZWN0b3IsIHRoaXMuZGV0YWlscyk7XG4gICAgICAgIHRoaXMubWF0Y2hlc0J5RWxlbWVudC5kZWxldGUoc2VsZWN0b3IsIGVsZW1lbnQpO1xuICAgIH1cbn1cblxuY2xhc3MgU3RyaW5nTWFwT2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICAgICAgdGhpcy5zdGFydGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RyaW5nTWFwID0gbmV3IE1hcCgpO1xuICAgICAgICB0aGlzLm11dGF0aW9uT2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigobXV0YXRpb25zKSA9PiB0aGlzLnByb2Nlc3NNdXRhdGlvbnMobXV0YXRpb25zKSk7XG4gICAgfVxuICAgIHN0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgdGhpcy5zdGFydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci5vYnNlcnZlKHRoaXMuZWxlbWVudCwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVPbGRWYWx1ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMubXV0YXRpb25PYnNlcnZlci50YWtlUmVjb3JkcygpO1xuICAgICAgICAgICAgdGhpcy5tdXRhdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlZnJlc2goKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgYXR0cmlidXRlTmFtZSBvZiB0aGlzLmtub3duQXR0cmlidXRlTmFtZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlZnJlc2hBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSwgbnVsbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvY2Vzc011dGF0aW9ucyhtdXRhdGlvbnMpIHtcbiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZCkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBtdXRhdGlvbiBvZiBtdXRhdGlvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NNdXRhdGlvbihtdXRhdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvY2Vzc011dGF0aW9uKG11dGF0aW9uKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBtdXRhdGlvbi5hdHRyaWJ1dGVOYW1lO1xuICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIG11dGF0aW9uLm9sZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWZyZXNoQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUsIG9sZFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMuZGVsZWdhdGUuZ2V0U3RyaW5nTWFwS2V5Rm9yQXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICBpZiAoa2V5ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5zdHJpbmdNYXAuaGFzKGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdNYXBLZXlBZGRlZChrZXksIGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3RyaW5nTWFwLmdldChhdHRyaWJ1dGVOYW1lKSAhPSB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nTWFwVmFsdWVDaGFuZ2VkKHZhbHVlLCBrZXksIG9sZFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb2xkVmFsdWUgPSB0aGlzLnN0cmluZ01hcC5nZXQoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdNYXAuZGVsZXRlKGF0dHJpYnV0ZU5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdNYXBLZXlSZW1vdmVkKGtleSwgYXR0cmlidXRlTmFtZSwgb2xkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdHJpbmdNYXAuc2V0KGF0dHJpYnV0ZU5hbWUsIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBzdHJpbmdNYXBLZXlBZGRlZChrZXksIGF0dHJpYnV0ZU5hbWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVsZWdhdGUuc3RyaW5nTWFwS2V5QWRkZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUuc3RyaW5nTWFwS2V5QWRkZWQoa2V5LCBhdHRyaWJ1dGVOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdHJpbmdNYXBWYWx1ZUNoYW5nZWQodmFsdWUsIGtleSwgb2xkVmFsdWUpIHtcbiAgICAgICAgaWYgKHRoaXMuZGVsZWdhdGUuc3RyaW5nTWFwVmFsdWVDaGFuZ2VkKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnN0cmluZ01hcFZhbHVlQ2hhbmdlZCh2YWx1ZSwga2V5LCBvbGRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RyaW5nTWFwS2V5UmVtb3ZlZChrZXksIGF0dHJpYnV0ZU5hbWUsIG9sZFZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLmRlbGVnYXRlLnN0cmluZ01hcEtleVJlbW92ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUuc3RyaW5nTWFwS2V5UmVtb3ZlZChrZXksIGF0dHJpYnV0ZU5hbWUsIG9sZFZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQga25vd25BdHRyaWJ1dGVOYW1lcygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldCh0aGlzLmN1cnJlbnRBdHRyaWJ1dGVOYW1lcy5jb25jYXQodGhpcy5yZWNvcmRlZEF0dHJpYnV0ZU5hbWVzKSkpO1xuICAgIH1cbiAgICBnZXQgY3VycmVudEF0dHJpYnV0ZU5hbWVzKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVsZW1lbnQuYXR0cmlidXRlcykubWFwKChhdHRyaWJ1dGUpID0+IGF0dHJpYnV0ZS5uYW1lKTtcbiAgICB9XG4gICAgZ2V0IHJlY29yZGVkQXR0cmlidXRlTmFtZXMoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuc3RyaW5nTWFwLmtleXMoKSk7XG4gICAgfVxufVxuXG5jbGFzcyBUb2tlbkxpc3RPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgYXR0cmlidXRlTmFtZSwgZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVPYnNlcnZlciA9IG5ldyBBdHRyaWJ1dGVPYnNlcnZlcihlbGVtZW50LCBhdHRyaWJ1dGVOYW1lLCB0aGlzKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgICAgICB0aGlzLnRva2Vuc0J5RWxlbWVudCA9IG5ldyBNdWx0aW1hcCgpO1xuICAgIH1cbiAgICBnZXQgc3RhcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXR0cmlidXRlT2JzZXJ2ZXIuc3RhcnRlZDtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICB9XG4gICAgcGF1c2UoY2FsbGJhY2spIHtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVPYnNlcnZlci5wYXVzZShjYWxsYmFjayk7XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlT2JzZXJ2ZXIuc3RvcCgpO1xuICAgIH1cbiAgICByZWZyZXNoKCkge1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZU9ic2VydmVyLnJlZnJlc2goKTtcbiAgICB9XG4gICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF0dHJpYnV0ZU9ic2VydmVyLmVsZW1lbnQ7XG4gICAgfVxuICAgIGdldCBhdHRyaWJ1dGVOYW1lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hdHRyaWJ1dGVPYnNlcnZlci5hdHRyaWJ1dGVOYW1lO1xuICAgIH1cbiAgICBlbGVtZW50TWF0Y2hlZEF0dHJpYnV0ZShlbGVtZW50KSB7XG4gICAgICAgIHRoaXMudG9rZW5zTWF0Y2hlZCh0aGlzLnJlYWRUb2tlbnNGb3JFbGVtZW50KGVsZW1lbnQpKTtcbiAgICB9XG4gICAgZWxlbWVudEF0dHJpYnV0ZVZhbHVlQ2hhbmdlZChlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IFt1bm1hdGNoZWRUb2tlbnMsIG1hdGNoZWRUb2tlbnNdID0gdGhpcy5yZWZyZXNoVG9rZW5zRm9yRWxlbWVudChlbGVtZW50KTtcbiAgICAgICAgdGhpcy50b2tlbnNVbm1hdGNoZWQodW5tYXRjaGVkVG9rZW5zKTtcbiAgICAgICAgdGhpcy50b2tlbnNNYXRjaGVkKG1hdGNoZWRUb2tlbnMpO1xuICAgIH1cbiAgICBlbGVtZW50VW5tYXRjaGVkQXR0cmlidXRlKGVsZW1lbnQpIHtcbiAgICAgICAgdGhpcy50b2tlbnNVbm1hdGNoZWQodGhpcy50b2tlbnNCeUVsZW1lbnQuZ2V0VmFsdWVzRm9yS2V5KGVsZW1lbnQpKTtcbiAgICB9XG4gICAgdG9rZW5zTWF0Y2hlZCh0b2tlbnMpIHtcbiAgICAgICAgdG9rZW5zLmZvckVhY2goKHRva2VuKSA9PiB0aGlzLnRva2VuTWF0Y2hlZCh0b2tlbikpO1xuICAgIH1cbiAgICB0b2tlbnNVbm1hdGNoZWQodG9rZW5zKSB7XG4gICAgICAgIHRva2Vucy5mb3JFYWNoKCh0b2tlbikgPT4gdGhpcy50b2tlblVubWF0Y2hlZCh0b2tlbikpO1xuICAgIH1cbiAgICB0b2tlbk1hdGNoZWQodG9rZW4pIHtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS50b2tlbk1hdGNoZWQodG9rZW4pO1xuICAgICAgICB0aGlzLnRva2Vuc0J5RWxlbWVudC5hZGQodG9rZW4uZWxlbWVudCwgdG9rZW4pO1xuICAgIH1cbiAgICB0b2tlblVubWF0Y2hlZCh0b2tlbikge1xuICAgICAgICB0aGlzLmRlbGVnYXRlLnRva2VuVW5tYXRjaGVkKHRva2VuKTtcbiAgICAgICAgdGhpcy50b2tlbnNCeUVsZW1lbnQuZGVsZXRlKHRva2VuLmVsZW1lbnQsIHRva2VuKTtcbiAgICB9XG4gICAgcmVmcmVzaFRva2Vuc0ZvckVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBjb25zdCBwcmV2aW91c1Rva2VucyA9IHRoaXMudG9rZW5zQnlFbGVtZW50LmdldFZhbHVlc0ZvcktleShlbGVtZW50KTtcbiAgICAgICAgY29uc3QgY3VycmVudFRva2VucyA9IHRoaXMucmVhZFRva2Vuc0ZvckVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGZpcnN0RGlmZmVyaW5nSW5kZXggPSB6aXAocHJldmlvdXNUb2tlbnMsIGN1cnJlbnRUb2tlbnMpLmZpbmRJbmRleCgoW3ByZXZpb3VzVG9rZW4sIGN1cnJlbnRUb2tlbl0pID0+ICF0b2tlbnNBcmVFcXVhbChwcmV2aW91c1Rva2VuLCBjdXJyZW50VG9rZW4pKTtcbiAgICAgICAgaWYgKGZpcnN0RGlmZmVyaW5nSW5kZXggPT0gLTEpIHtcbiAgICAgICAgICAgIHJldHVybiBbW10sIFtdXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBbcHJldmlvdXNUb2tlbnMuc2xpY2UoZmlyc3REaWZmZXJpbmdJbmRleCksIGN1cnJlbnRUb2tlbnMuc2xpY2UoZmlyc3REaWZmZXJpbmdJbmRleCldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJlYWRUb2tlbnNGb3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IHRoaXMuYXR0cmlidXRlTmFtZTtcbiAgICAgICAgY29uc3QgdG9rZW5TdHJpbmcgPSBlbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKSB8fCBcIlwiO1xuICAgICAgICByZXR1cm4gcGFyc2VUb2tlblN0cmluZyh0b2tlblN0cmluZywgZWxlbWVudCwgYXR0cmlidXRlTmFtZSk7XG4gICAgfVxufVxuZnVuY3Rpb24gcGFyc2VUb2tlblN0cmluZyh0b2tlblN0cmluZywgZWxlbWVudCwgYXR0cmlidXRlTmFtZSkge1xuICAgIHJldHVybiB0b2tlblN0cmluZ1xuICAgICAgICAudHJpbSgpXG4gICAgICAgIC5zcGxpdCgvXFxzKy8pXG4gICAgICAgIC5maWx0ZXIoKGNvbnRlbnQpID0+IGNvbnRlbnQubGVuZ3RoKVxuICAgICAgICAubWFwKChjb250ZW50LCBpbmRleCkgPT4gKHsgZWxlbWVudCwgYXR0cmlidXRlTmFtZSwgY29udGVudCwgaW5kZXggfSkpO1xufVxuZnVuY3Rpb24gemlwKGxlZnQsIHJpZ2h0KSB7XG4gICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgobGVmdC5sZW5ndGgsIHJpZ2h0Lmxlbmd0aCk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGggfSwgKF8sIGluZGV4KSA9PiBbbGVmdFtpbmRleF0sIHJpZ2h0W2luZGV4XV0pO1xufVxuZnVuY3Rpb24gdG9rZW5zQXJlRXF1YWwobGVmdCwgcmlnaHQpIHtcbiAgICByZXR1cm4gbGVmdCAmJiByaWdodCAmJiBsZWZ0LmluZGV4ID09IHJpZ2h0LmluZGV4ICYmIGxlZnQuY29udGVudCA9PSByaWdodC5jb250ZW50O1xufVxuXG5jbGFzcyBWYWx1ZUxpc3RPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgYXR0cmlidXRlTmFtZSwgZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy50b2tlbkxpc3RPYnNlcnZlciA9IG5ldyBUb2tlbkxpc3RPYnNlcnZlcihlbGVtZW50LCBhdHRyaWJ1dGVOYW1lLCB0aGlzKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgICAgICB0aGlzLnBhcnNlUmVzdWx0c0J5VG9rZW4gPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICB0aGlzLnZhbHVlc0J5VG9rZW5CeUVsZW1lbnQgPSBuZXcgV2Vha01hcCgpO1xuICAgIH1cbiAgICBnZXQgc3RhcnRlZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5MaXN0T2JzZXJ2ZXIuc3RhcnRlZDtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0T2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgdGhpcy50b2tlbkxpc3RPYnNlcnZlci5zdG9wKCk7XG4gICAgfVxuICAgIHJlZnJlc2goKSB7XG4gICAgICAgIHRoaXMudG9rZW5MaXN0T2JzZXJ2ZXIucmVmcmVzaCgpO1xuICAgIH1cbiAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudG9rZW5MaXN0T2JzZXJ2ZXIuZWxlbWVudDtcbiAgICB9XG4gICAgZ2V0IGF0dHJpYnV0ZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRva2VuTGlzdE9ic2VydmVyLmF0dHJpYnV0ZU5hbWU7XG4gICAgfVxuICAgIHRva2VuTWF0Y2hlZCh0b2tlbikge1xuICAgICAgICBjb25zdCB7IGVsZW1lbnQgfSA9IHRva2VuO1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLmZldGNoUGFyc2VSZXN1bHRGb3JUb2tlbih0b2tlbik7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaFZhbHVlc0J5VG9rZW5Gb3JFbGVtZW50KGVsZW1lbnQpLnNldCh0b2tlbiwgdmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5lbGVtZW50TWF0Y2hlZFZhbHVlKGVsZW1lbnQsIHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b2tlblVubWF0Y2hlZCh0b2tlbikge1xuICAgICAgICBjb25zdCB7IGVsZW1lbnQgfSA9IHRva2VuO1xuICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzLmZldGNoUGFyc2VSZXN1bHRGb3JUb2tlbih0b2tlbik7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5mZXRjaFZhbHVlc0J5VG9rZW5Gb3JFbGVtZW50KGVsZW1lbnQpLmRlbGV0ZSh0b2tlbik7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLmVsZW1lbnRVbm1hdGNoZWRWYWx1ZShlbGVtZW50LCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmV0Y2hQYXJzZVJlc3VsdEZvclRva2VuKHRva2VuKSB7XG4gICAgICAgIGxldCBwYXJzZVJlc3VsdCA9IHRoaXMucGFyc2VSZXN1bHRzQnlUb2tlbi5nZXQodG9rZW4pO1xuICAgICAgICBpZiAoIXBhcnNlUmVzdWx0KSB7XG4gICAgICAgICAgICBwYXJzZVJlc3VsdCA9IHRoaXMucGFyc2VUb2tlbih0b2tlbik7XG4gICAgICAgICAgICB0aGlzLnBhcnNlUmVzdWx0c0J5VG9rZW4uc2V0KHRva2VuLCBwYXJzZVJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlUmVzdWx0O1xuICAgIH1cbiAgICBmZXRjaFZhbHVlc0J5VG9rZW5Gb3JFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgbGV0IHZhbHVlc0J5VG9rZW4gPSB0aGlzLnZhbHVlc0J5VG9rZW5CeUVsZW1lbnQuZ2V0KGVsZW1lbnQpO1xuICAgICAgICBpZiAoIXZhbHVlc0J5VG9rZW4pIHtcbiAgICAgICAgICAgIHZhbHVlc0J5VG9rZW4gPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlc0J5VG9rZW5CeUVsZW1lbnQuc2V0KGVsZW1lbnQsIHZhbHVlc0J5VG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZXNCeVRva2VuO1xuICAgIH1cbiAgICBwYXJzZVRva2VuKHRva2VuKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZGVsZWdhdGUucGFyc2VWYWx1ZUZvclRva2VuKHRva2VuKTtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlIH07XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4geyBlcnJvciB9O1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jbGFzcyBCaW5kaW5nT2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgICAgIHRoaXMuZGVsZWdhdGUgPSBkZWxlZ2F0ZTtcbiAgICAgICAgdGhpcy5iaW5kaW5nc0J5QWN0aW9uID0gbmV3IE1hcCgpO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgaWYgKCF0aGlzLnZhbHVlTGlzdE9ic2VydmVyKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlTGlzdE9ic2VydmVyID0gbmV3IFZhbHVlTGlzdE9ic2VydmVyKHRoaXMuZWxlbWVudCwgdGhpcy5hY3Rpb25BdHRyaWJ1dGUsIHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUxpc3RPYnNlcnZlci5zdGFydCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlTGlzdE9ic2VydmVyKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlTGlzdE9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLnZhbHVlTGlzdE9ic2VydmVyO1xuICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0QWxsQWN0aW9ucygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmVsZW1lbnQ7XG4gICAgfVxuICAgIGdldCBpZGVudGlmaWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmlkZW50aWZpZXI7XG4gICAgfVxuICAgIGdldCBhY3Rpb25BdHRyaWJ1dGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5hY3Rpb25BdHRyaWJ1dGU7XG4gICAgfVxuICAgIGdldCBzY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuc2NoZW1hO1xuICAgIH1cbiAgICBnZXQgYmluZGluZ3MoKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuYmluZGluZ3NCeUFjdGlvbi52YWx1ZXMoKSk7XG4gICAgfVxuICAgIGNvbm5lY3RBY3Rpb24oYWN0aW9uKSB7XG4gICAgICAgIGNvbnN0IGJpbmRpbmcgPSBuZXcgQmluZGluZyh0aGlzLmNvbnRleHQsIGFjdGlvbik7XG4gICAgICAgIHRoaXMuYmluZGluZ3NCeUFjdGlvbi5zZXQoYWN0aW9uLCBiaW5kaW5nKTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZS5iaW5kaW5nQ29ubmVjdGVkKGJpbmRpbmcpO1xuICAgIH1cbiAgICBkaXNjb25uZWN0QWN0aW9uKGFjdGlvbikge1xuICAgICAgICBjb25zdCBiaW5kaW5nID0gdGhpcy5iaW5kaW5nc0J5QWN0aW9uLmdldChhY3Rpb24pO1xuICAgICAgICBpZiAoYmluZGluZykge1xuICAgICAgICAgICAgdGhpcy5iaW5kaW5nc0J5QWN0aW9uLmRlbGV0ZShhY3Rpb24pO1xuICAgICAgICAgICAgdGhpcy5kZWxlZ2F0ZS5iaW5kaW5nRGlzY29ubmVjdGVkKGJpbmRpbmcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRpc2Nvbm5lY3RBbGxBY3Rpb25zKCkge1xuICAgICAgICB0aGlzLmJpbmRpbmdzLmZvckVhY2goKGJpbmRpbmcpID0+IHRoaXMuZGVsZWdhdGUuYmluZGluZ0Rpc2Nvbm5lY3RlZChiaW5kaW5nLCB0cnVlKSk7XG4gICAgICAgIHRoaXMuYmluZGluZ3NCeUFjdGlvbi5jbGVhcigpO1xuICAgIH1cbiAgICBwYXJzZVZhbHVlRm9yVG9rZW4odG9rZW4pIHtcbiAgICAgICAgY29uc3QgYWN0aW9uID0gQWN0aW9uLmZvclRva2VuKHRva2VuLCB0aGlzLnNjaGVtYSk7XG4gICAgICAgIGlmIChhY3Rpb24uaWRlbnRpZmllciA9PSB0aGlzLmlkZW50aWZpZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBhY3Rpb247XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxlbWVudE1hdGNoZWRWYWx1ZShlbGVtZW50LCBhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5jb25uZWN0QWN0aW9uKGFjdGlvbik7XG4gICAgfVxuICAgIGVsZW1lbnRVbm1hdGNoZWRWYWx1ZShlbGVtZW50LCBhY3Rpb24pIHtcbiAgICAgICAgdGhpcy5kaXNjb25uZWN0QWN0aW9uKGFjdGlvbik7XG4gICAgfVxufVxuXG5jbGFzcyBWYWx1ZU9ic2VydmVyIHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0LCByZWNlaXZlcikge1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLnJlY2VpdmVyID0gcmVjZWl2ZXI7XG4gICAgICAgIHRoaXMuc3RyaW5nTWFwT2JzZXJ2ZXIgPSBuZXcgU3RyaW5nTWFwT2JzZXJ2ZXIodGhpcy5lbGVtZW50LCB0aGlzKTtcbiAgICAgICAgdGhpcy52YWx1ZURlc2NyaXB0b3JNYXAgPSB0aGlzLmNvbnRyb2xsZXIudmFsdWVEZXNjcmlwdG9yTWFwO1xuICAgIH1cbiAgICBzdGFydCgpIHtcbiAgICAgICAgdGhpcy5zdHJpbmdNYXBPYnNlcnZlci5zdGFydCgpO1xuICAgICAgICB0aGlzLmludm9rZUNoYW5nZWRDYWxsYmFja3NGb3JEZWZhdWx0VmFsdWVzKCk7XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIHRoaXMuc3RyaW5nTWFwT2JzZXJ2ZXIuc3RvcCgpO1xuICAgIH1cbiAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5lbGVtZW50O1xuICAgIH1cbiAgICBnZXQgY29udHJvbGxlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5jb250cm9sbGVyO1xuICAgIH1cbiAgICBnZXRTdHJpbmdNYXBLZXlGb3JBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZSkge1xuICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSBpbiB0aGlzLnZhbHVlRGVzY3JpcHRvck1hcCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVEZXNjcmlwdG9yTWFwW2F0dHJpYnV0ZU5hbWVdLm5hbWU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RyaW5nTWFwS2V5QWRkZWQoa2V5LCBhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLnZhbHVlRGVzY3JpcHRvck1hcFthdHRyaWJ1dGVOYW1lXTtcbiAgICAgICAgaWYgKCF0aGlzLmhhc1ZhbHVlKGtleSkpIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlQ2hhbmdlZENhbGxiYWNrKGtleSwgZGVzY3JpcHRvci53cml0ZXIodGhpcy5yZWNlaXZlcltrZXldKSwgZGVzY3JpcHRvci53cml0ZXIoZGVzY3JpcHRvci5kZWZhdWx0VmFsdWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzdHJpbmdNYXBWYWx1ZUNoYW5nZWQodmFsdWUsIG5hbWUsIG9sZFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLnZhbHVlRGVzY3JpcHRvck5hbWVNYXBbbmFtZV07XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgaWYgKG9sZFZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICBvbGRWYWx1ZSA9IGRlc2NyaXB0b3Iud3JpdGVyKGRlc2NyaXB0b3IuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmludm9rZUNoYW5nZWRDYWxsYmFjayhuYW1lLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgIH1cbiAgICBzdHJpbmdNYXBLZXlSZW1vdmVkKGtleSwgYXR0cmlidXRlTmFtZSwgb2xkVmFsdWUpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMudmFsdWVEZXNjcmlwdG9yTmFtZU1hcFtrZXldO1xuICAgICAgICBpZiAodGhpcy5oYXNWYWx1ZShrZXkpKSB7XG4gICAgICAgICAgICB0aGlzLmludm9rZUNoYW5nZWRDYWxsYmFjayhrZXksIGRlc2NyaXB0b3Iud3JpdGVyKHRoaXMucmVjZWl2ZXJba2V5XSksIG9sZFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaW52b2tlQ2hhbmdlZENhbGxiYWNrKGtleSwgZGVzY3JpcHRvci53cml0ZXIoZGVzY3JpcHRvci5kZWZhdWx0VmFsdWUpLCBvbGRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW52b2tlQ2hhbmdlZENhbGxiYWNrc0ZvckRlZmF1bHRWYWx1ZXMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgeyBrZXksIG5hbWUsIGRlZmF1bHRWYWx1ZSwgd3JpdGVyIH0gb2YgdGhpcy52YWx1ZURlc2NyaXB0b3JzKSB7XG4gICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlICE9IHVuZGVmaW5lZCAmJiAhdGhpcy5jb250cm9sbGVyLmRhdGEuaGFzKGtleSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmludm9rZUNoYW5nZWRDYWxsYmFjayhuYW1lLCB3cml0ZXIoZGVmYXVsdFZhbHVlKSwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnZva2VDaGFuZ2VkQ2FsbGJhY2sobmFtZSwgcmF3VmFsdWUsIHJhd09sZFZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGNoYW5nZWRNZXRob2ROYW1lID0gYCR7bmFtZX1DaGFuZ2VkYDtcbiAgICAgICAgY29uc3QgY2hhbmdlZE1ldGhvZCA9IHRoaXMucmVjZWl2ZXJbY2hhbmdlZE1ldGhvZE5hbWVdO1xuICAgICAgICBpZiAodHlwZW9mIGNoYW5nZWRNZXRob2QgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy52YWx1ZURlc2NyaXB0b3JOYW1lTWFwW25hbWVdO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRlc2NyaXB0b3IucmVhZGVyKHJhd1ZhbHVlKTtcbiAgICAgICAgICAgICAgICBsZXQgb2xkVmFsdWUgPSByYXdPbGRWYWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAocmF3T2xkVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgb2xkVmFsdWUgPSBkZXNjcmlwdG9yLnJlYWRlcihyYXdPbGRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNoYW5nZWRNZXRob2QuY2FsbCh0aGlzLnJlY2VpdmVyLCB2YWx1ZSwgb2xkVmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgVHlwZUVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yLm1lc3NhZ2UgPSBgU3RpbXVsdXMgVmFsdWUgXCIke3RoaXMuY29udGV4dC5pZGVudGlmaWVyfS4ke2Rlc2NyaXB0b3IubmFtZX1cIiAtICR7ZXJyb3IubWVzc2FnZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgdmFsdWVEZXNjcmlwdG9ycygpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZURlc2NyaXB0b3JNYXAgfSA9IHRoaXM7XG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyh2YWx1ZURlc2NyaXB0b3JNYXApLm1hcCgoa2V5KSA9PiB2YWx1ZURlc2NyaXB0b3JNYXBba2V5XSk7XG4gICAgfVxuICAgIGdldCB2YWx1ZURlc2NyaXB0b3JOYW1lTWFwKCkge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnZhbHVlRGVzY3JpcHRvck1hcCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy52YWx1ZURlc2NyaXB0b3JNYXBba2V5XTtcbiAgICAgICAgICAgIGRlc2NyaXB0b3JzW2Rlc2NyaXB0b3IubmFtZV0gPSBkZXNjcmlwdG9yO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3JzO1xuICAgIH1cbiAgICBoYXNWYWx1ZShhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLnZhbHVlRGVzY3JpcHRvck5hbWVNYXBbYXR0cmlidXRlTmFtZV07XG4gICAgICAgIGNvbnN0IGhhc01ldGhvZE5hbWUgPSBgaGFzJHtjYXBpdGFsaXplKGRlc2NyaXB0b3IubmFtZSl9YDtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVjZWl2ZXJbaGFzTWV0aG9kTmFtZV07XG4gICAgfVxufVxuXG5jbGFzcyBUYXJnZXRPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoY29udGV4dCwgZGVsZWdhdGUpIHtcbiAgICAgICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgICAgICB0aGlzLnRhcmdldHNCeU5hbWUgPSBuZXcgTXVsdGltYXAoKTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy50b2tlbkxpc3RPYnNlcnZlcikge1xuICAgICAgICAgICAgdGhpcy50b2tlbkxpc3RPYnNlcnZlciA9IG5ldyBUb2tlbkxpc3RPYnNlcnZlcih0aGlzLmVsZW1lbnQsIHRoaXMuYXR0cmlidXRlTmFtZSwgdGhpcyk7XG4gICAgICAgICAgICB0aGlzLnRva2VuTGlzdE9ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgaWYgKHRoaXMudG9rZW5MaXN0T2JzZXJ2ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzY29ubmVjdEFsbFRhcmdldHMoKTtcbiAgICAgICAgICAgIHRoaXMudG9rZW5MaXN0T2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMudG9rZW5MaXN0T2JzZXJ2ZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdG9rZW5NYXRjaGVkKHsgZWxlbWVudCwgY29udGVudDogbmFtZSB9KSB7XG4gICAgICAgIGlmICh0aGlzLnNjb3BlLmNvbnRhaW5zRWxlbWVudChlbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5jb25uZWN0VGFyZ2V0KGVsZW1lbnQsIG5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHRva2VuVW5tYXRjaGVkKHsgZWxlbWVudCwgY29udGVudDogbmFtZSB9KSB7XG4gICAgICAgIHRoaXMuZGlzY29ubmVjdFRhcmdldChlbGVtZW50LCBuYW1lKTtcbiAgICB9XG4gICAgY29ubmVjdFRhcmdldChlbGVtZW50LCBuYW1lKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLnRhcmdldHNCeU5hbWUuaGFzKG5hbWUsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldHNCeU5hbWUuYWRkKG5hbWUsIGVsZW1lbnQpO1xuICAgICAgICAgICAgKF9hID0gdGhpcy50b2tlbkxpc3RPYnNlcnZlcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnBhdXNlKCgpID0+IHRoaXMuZGVsZWdhdGUudGFyZ2V0Q29ubmVjdGVkKGVsZW1lbnQsIG5hbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkaXNjb25uZWN0VGFyZ2V0KGVsZW1lbnQsIG5hbWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGhpcy50YXJnZXRzQnlOYW1lLmhhcyhuYW1lLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy50YXJnZXRzQnlOYW1lLmRlbGV0ZShuYW1lLCBlbGVtZW50KTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMudG9rZW5MaXN0T2JzZXJ2ZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wYXVzZSgoKSA9PiB0aGlzLmRlbGVnYXRlLnRhcmdldERpc2Nvbm5lY3RlZChlbGVtZW50LCBuYW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGlzY29ubmVjdEFsbFRhcmdldHMoKSB7XG4gICAgICAgIGZvciAoY29uc3QgbmFtZSBvZiB0aGlzLnRhcmdldHNCeU5hbWUua2V5cykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHRoaXMudGFyZ2V0c0J5TmFtZS5nZXRWYWx1ZXNGb3JLZXkobmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3RUYXJnZXQoZWxlbWVudCwgbmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGF0dHJpYnV0ZU5hbWUoKSB7XG4gICAgICAgIHJldHVybiBgZGF0YS0ke3RoaXMuY29udGV4dC5pZGVudGlmaWVyfS10YXJnZXRgO1xuICAgIH1cbiAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5lbGVtZW50O1xuICAgIH1cbiAgICBnZXQgc2NvcGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQuc2NvcGU7XG4gICAgfVxufVxuXG5mdW5jdGlvbiByZWFkSW5oZXJpdGFibGVTdGF0aWNBcnJheVZhbHVlcyhjb25zdHJ1Y3RvciwgcHJvcGVydHlOYW1lKSB7XG4gICAgY29uc3QgYW5jZXN0b3JzID0gZ2V0QW5jZXN0b3JzRm9yQ29uc3RydWN0b3IoY29uc3RydWN0b3IpO1xuICAgIHJldHVybiBBcnJheS5mcm9tKGFuY2VzdG9ycy5yZWR1Y2UoKHZhbHVlcywgY29uc3RydWN0b3IpID0+IHtcbiAgICAgICAgZ2V0T3duU3RhdGljQXJyYXlWYWx1ZXMoY29uc3RydWN0b3IsIHByb3BlcnR5TmFtZSkuZm9yRWFjaCgobmFtZSkgPT4gdmFsdWVzLmFkZChuYW1lKSk7XG4gICAgICAgIHJldHVybiB2YWx1ZXM7XG4gICAgfSwgbmV3IFNldCgpKSk7XG59XG5mdW5jdGlvbiByZWFkSW5oZXJpdGFibGVTdGF0aWNPYmplY3RQYWlycyhjb25zdHJ1Y3RvciwgcHJvcGVydHlOYW1lKSB7XG4gICAgY29uc3QgYW5jZXN0b3JzID0gZ2V0QW5jZXN0b3JzRm9yQ29uc3RydWN0b3IoY29uc3RydWN0b3IpO1xuICAgIHJldHVybiBhbmNlc3RvcnMucmVkdWNlKChwYWlycywgY29uc3RydWN0b3IpID0+IHtcbiAgICAgICAgcGFpcnMucHVzaCguLi5nZXRPd25TdGF0aWNPYmplY3RQYWlycyhjb25zdHJ1Y3RvciwgcHJvcGVydHlOYW1lKSk7XG4gICAgICAgIHJldHVybiBwYWlycztcbiAgICB9LCBbXSk7XG59XG5mdW5jdGlvbiBnZXRBbmNlc3RvcnNGb3JDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcikge1xuICAgIGNvbnN0IGFuY2VzdG9ycyA9IFtdO1xuICAgIHdoaWxlIChjb25zdHJ1Y3Rvcikge1xuICAgICAgICBhbmNlc3RvcnMucHVzaChjb25zdHJ1Y3Rvcik7XG4gICAgICAgIGNvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKGNvbnN0cnVjdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9ycy5yZXZlcnNlKCk7XG59XG5mdW5jdGlvbiBnZXRPd25TdGF0aWNBcnJheVZhbHVlcyhjb25zdHJ1Y3RvciwgcHJvcGVydHlOYW1lKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IGNvbnN0cnVjdG9yW3Byb3BlcnR5TmFtZV07XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZGVmaW5pdGlvbikgPyBkZWZpbml0aW9uIDogW107XG59XG5mdW5jdGlvbiBnZXRPd25TdGF0aWNPYmplY3RQYWlycyhjb25zdHJ1Y3RvciwgcHJvcGVydHlOYW1lKSB7XG4gICAgY29uc3QgZGVmaW5pdGlvbiA9IGNvbnN0cnVjdG9yW3Byb3BlcnR5TmFtZV07XG4gICAgcmV0dXJuIGRlZmluaXRpb24gPyBPYmplY3Qua2V5cyhkZWZpbml0aW9uKS5tYXAoKGtleSkgPT4gW2tleSwgZGVmaW5pdGlvbltrZXldXSkgOiBbXTtcbn1cblxuY2xhc3MgT3V0bGV0T2JzZXJ2ZXIge1xuICAgIGNvbnN0cnVjdG9yKGNvbnRleHQsIGRlbGVnYXRlKSB7XG4gICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0O1xuICAgICAgICB0aGlzLmRlbGVnYXRlID0gZGVsZWdhdGU7XG4gICAgICAgIHRoaXMub3V0bGV0c0J5TmFtZSA9IG5ldyBNdWx0aW1hcCgpO1xuICAgICAgICB0aGlzLm91dGxldEVsZW1lbnRzQnlOYW1lID0gbmV3IE11bHRpbWFwKCk7XG4gICAgICAgIHRoaXMuc2VsZWN0b3JPYnNlcnZlck1hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgdGhpcy5hdHRyaWJ1dGVPYnNlcnZlck1hcCA9IG5ldyBNYXAoKTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIGlmICghdGhpcy5zdGFydGVkKSB7XG4gICAgICAgICAgICB0aGlzLm91dGxldERlZmluaXRpb25zLmZvckVhY2goKG91dGxldE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwU2VsZWN0b3JPYnNlcnZlckZvck91dGxldChvdXRsZXROYW1lKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHVwQXR0cmlidXRlT2JzZXJ2ZXJGb3JPdXRsZXQob3V0bGV0TmFtZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmRlcGVuZGVudENvbnRleHRzLmZvckVhY2goKGNvbnRleHQpID0+IGNvbnRleHQucmVmcmVzaCgpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZWZyZXNoKCkge1xuICAgICAgICB0aGlzLnNlbGVjdG9yT2JzZXJ2ZXJNYXAuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IG9ic2VydmVyLnJlZnJlc2goKSk7XG4gICAgICAgIHRoaXMuYXR0cmlidXRlT2JzZXJ2ZXJNYXAuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IG9ic2VydmVyLnJlZnJlc2goKSk7XG4gICAgfVxuICAgIHN0b3AoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXJ0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhcnRlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0QWxsT3V0bGV0cygpO1xuICAgICAgICAgICAgdGhpcy5zdG9wU2VsZWN0b3JPYnNlcnZlcnMoKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcEF0dHJpYnV0ZU9ic2VydmVycygpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHN0b3BTZWxlY3Rvck9ic2VydmVycygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0b3JPYnNlcnZlck1hcC5zaXplID4gMCkge1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rvck9ic2VydmVyTWFwLmZvckVhY2goKG9ic2VydmVyKSA9PiBvYnNlcnZlci5zdG9wKCkpO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3Rvck9ic2VydmVyTWFwLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RvcEF0dHJpYnV0ZU9ic2VydmVycygpIHtcbiAgICAgICAgaWYgKHRoaXMuYXR0cmlidXRlT2JzZXJ2ZXJNYXAuc2l6ZSA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuYXR0cmlidXRlT2JzZXJ2ZXJNYXAuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IG9ic2VydmVyLnN0b3AoKSk7XG4gICAgICAgICAgICB0aGlzLmF0dHJpYnV0ZU9ic2VydmVyTWFwLmNsZWFyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2VsZWN0b3JNYXRjaGVkKGVsZW1lbnQsIF9zZWxlY3RvciwgeyBvdXRsZXROYW1lIH0pIHtcbiAgICAgICAgY29uc3Qgb3V0bGV0ID0gdGhpcy5nZXRPdXRsZXQoZWxlbWVudCwgb3V0bGV0TmFtZSk7XG4gICAgICAgIGlmIChvdXRsZXQpIHtcbiAgICAgICAgICAgIHRoaXMuY29ubmVjdE91dGxldChvdXRsZXQsIGVsZW1lbnQsIG91dGxldE5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNlbGVjdG9yVW5tYXRjaGVkKGVsZW1lbnQsIF9zZWxlY3RvciwgeyBvdXRsZXROYW1lIH0pIHtcbiAgICAgICAgY29uc3Qgb3V0bGV0ID0gdGhpcy5nZXRPdXRsZXRGcm9tTWFwKGVsZW1lbnQsIG91dGxldE5hbWUpO1xuICAgICAgICBpZiAob3V0bGV0KSB7XG4gICAgICAgICAgICB0aGlzLmRpc2Nvbm5lY3RPdXRsZXQob3V0bGV0LCBlbGVtZW50LCBvdXRsZXROYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBzZWxlY3Rvck1hdGNoRWxlbWVudChlbGVtZW50LCB7IG91dGxldE5hbWUgfSkge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuc2VsZWN0b3Iob3V0bGV0TmFtZSk7XG4gICAgICAgIGNvbnN0IGhhc091dGxldCA9IHRoaXMuaGFzT3V0bGV0KGVsZW1lbnQsIG91dGxldE5hbWUpO1xuICAgICAgICBjb25zdCBoYXNPdXRsZXRDb250cm9sbGVyID0gZWxlbWVudC5tYXRjaGVzKGBbJHt0aGlzLnNjaGVtYS5jb250cm9sbGVyQXR0cmlidXRlfX49JHtvdXRsZXROYW1lfV1gKTtcbiAgICAgICAgaWYgKHNlbGVjdG9yKSB7XG4gICAgICAgICAgICByZXR1cm4gaGFzT3V0bGV0ICYmIGhhc091dGxldENvbnRyb2xsZXIgJiYgZWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbGVtZW50TWF0Y2hlZEF0dHJpYnV0ZShfZWxlbWVudCwgYXR0cmlidXRlTmFtZSkge1xuICAgICAgICBjb25zdCBvdXRsZXROYW1lID0gdGhpcy5nZXRPdXRsZXROYW1lRnJvbU91dGxldEF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIGlmIChvdXRsZXROYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdG9yT2JzZXJ2ZXJGb3JPdXRsZXQob3V0bGV0TmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxlbWVudEF0dHJpYnV0ZVZhbHVlQ2hhbmdlZChfZWxlbWVudCwgYXR0cmlidXRlTmFtZSkge1xuICAgICAgICBjb25zdCBvdXRsZXROYW1lID0gdGhpcy5nZXRPdXRsZXROYW1lRnJvbU91dGxldEF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIGlmIChvdXRsZXROYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdG9yT2JzZXJ2ZXJGb3JPdXRsZXQob3V0bGV0TmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxlbWVudFVubWF0Y2hlZEF0dHJpYnV0ZShfZWxlbWVudCwgYXR0cmlidXRlTmFtZSkge1xuICAgICAgICBjb25zdCBvdXRsZXROYW1lID0gdGhpcy5nZXRPdXRsZXROYW1lRnJvbU91dGxldEF0dHJpYnV0ZU5hbWUoYXR0cmlidXRlTmFtZSk7XG4gICAgICAgIGlmIChvdXRsZXROYW1lKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdG9yT2JzZXJ2ZXJGb3JPdXRsZXQob3V0bGV0TmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29ubmVjdE91dGxldChvdXRsZXQsIGVsZW1lbnQsIG91dGxldE5hbWUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoIXRoaXMub3V0bGV0RWxlbWVudHNCeU5hbWUuaGFzKG91dGxldE5hbWUsIGVsZW1lbnQpKSB7XG4gICAgICAgICAgICB0aGlzLm91dGxldHNCeU5hbWUuYWRkKG91dGxldE5hbWUsIG91dGxldCk7XG4gICAgICAgICAgICB0aGlzLm91dGxldEVsZW1lbnRzQnlOYW1lLmFkZChvdXRsZXROYW1lLCBlbGVtZW50KTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMuc2VsZWN0b3JPYnNlcnZlck1hcC5nZXQob3V0bGV0TmFtZSkpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5wYXVzZSgoKSA9PiB0aGlzLmRlbGVnYXRlLm91dGxldENvbm5lY3RlZChvdXRsZXQsIGVsZW1lbnQsIG91dGxldE5hbWUpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBkaXNjb25uZWN0T3V0bGV0KG91dGxldCwgZWxlbWVudCwgb3V0bGV0TmFtZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGlmICh0aGlzLm91dGxldEVsZW1lbnRzQnlOYW1lLmhhcyhvdXRsZXROYW1lLCBlbGVtZW50KSkge1xuICAgICAgICAgICAgdGhpcy5vdXRsZXRzQnlOYW1lLmRlbGV0ZShvdXRsZXROYW1lLCBvdXRsZXQpO1xuICAgICAgICAgICAgdGhpcy5vdXRsZXRFbGVtZW50c0J5TmFtZS5kZWxldGUob3V0bGV0TmFtZSwgZWxlbWVudCk7XG4gICAgICAgICAgICAoX2EgPSB0aGlzLnNlbGVjdG9yT2JzZXJ2ZXJNYXBcbiAgICAgICAgICAgICAgICAuZ2V0KG91dGxldE5hbWUpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EucGF1c2UoKCkgPT4gdGhpcy5kZWxlZ2F0ZS5vdXRsZXREaXNjb25uZWN0ZWQob3V0bGV0LCBlbGVtZW50LCBvdXRsZXROYW1lKSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGlzY29ubmVjdEFsbE91dGxldHMoKSB7XG4gICAgICAgIGZvciAoY29uc3Qgb3V0bGV0TmFtZSBvZiB0aGlzLm91dGxldEVsZW1lbnRzQnlOYW1lLmtleXMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB0aGlzLm91dGxldEVsZW1lbnRzQnlOYW1lLmdldFZhbHVlc0ZvcktleShvdXRsZXROYW1lKSkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3V0bGV0IG9mIHRoaXMub3V0bGV0c0J5TmFtZS5nZXRWYWx1ZXNGb3JLZXkob3V0bGV0TmFtZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0T3V0bGV0KG91dGxldCwgZWxlbWVudCwgb3V0bGV0TmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHVwZGF0ZVNlbGVjdG9yT2JzZXJ2ZXJGb3JPdXRsZXQob3V0bGV0TmFtZSkge1xuICAgICAgICBjb25zdCBvYnNlcnZlciA9IHRoaXMuc2VsZWN0b3JPYnNlcnZlck1hcC5nZXQob3V0bGV0TmFtZSk7XG4gICAgICAgIGlmIChvYnNlcnZlcikge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuc2VsZWN0b3IgPSB0aGlzLnNlbGVjdG9yKG91dGxldE5hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNldHVwU2VsZWN0b3JPYnNlcnZlckZvck91dGxldChvdXRsZXROYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5zZWxlY3RvcihvdXRsZXROYW1lKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3JPYnNlcnZlciA9IG5ldyBTZWxlY3Rvck9ic2VydmVyKGRvY3VtZW50LmJvZHksIHNlbGVjdG9yLCB0aGlzLCB7IG91dGxldE5hbWUgfSk7XG4gICAgICAgIHRoaXMuc2VsZWN0b3JPYnNlcnZlck1hcC5zZXQob3V0bGV0TmFtZSwgc2VsZWN0b3JPYnNlcnZlcik7XG4gICAgICAgIHNlbGVjdG9yT2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICB9XG4gICAgc2V0dXBBdHRyaWJ1dGVPYnNlcnZlckZvck91dGxldChvdXRsZXROYW1lKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSB0aGlzLmF0dHJpYnV0ZU5hbWVGb3JPdXRsZXROYW1lKG91dGxldE5hbWUpO1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVPYnNlcnZlciA9IG5ldyBBdHRyaWJ1dGVPYnNlcnZlcih0aGlzLnNjb3BlLmVsZW1lbnQsIGF0dHJpYnV0ZU5hbWUsIHRoaXMpO1xuICAgICAgICB0aGlzLmF0dHJpYnV0ZU9ic2VydmVyTWFwLnNldChvdXRsZXROYW1lLCBhdHRyaWJ1dGVPYnNlcnZlcik7XG4gICAgICAgIGF0dHJpYnV0ZU9ic2VydmVyLnN0YXJ0KCk7XG4gICAgfVxuICAgIHNlbGVjdG9yKG91dGxldE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGUub3V0bGV0cy5nZXRTZWxlY3RvckZvck91dGxldE5hbWUob3V0bGV0TmFtZSk7XG4gICAgfVxuICAgIGF0dHJpYnV0ZU5hbWVGb3JPdXRsZXROYW1lKG91dGxldE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGUuc2NoZW1hLm91dGxldEF0dHJpYnV0ZUZvclNjb3BlKHRoaXMuaWRlbnRpZmllciwgb3V0bGV0TmFtZSk7XG4gICAgfVxuICAgIGdldE91dGxldE5hbWVGcm9tT3V0bGV0QXR0cmlidXRlTmFtZShhdHRyaWJ1dGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm91dGxldERlZmluaXRpb25zLmZpbmQoKG91dGxldE5hbWUpID0+IHRoaXMuYXR0cmlidXRlTmFtZUZvck91dGxldE5hbWUob3V0bGV0TmFtZSkgPT09IGF0dHJpYnV0ZU5hbWUpO1xuICAgIH1cbiAgICBnZXQgb3V0bGV0RGVwZW5kZW5jaWVzKCkge1xuICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBuZXcgTXVsdGltYXAoKTtcbiAgICAgICAgdGhpcy5yb3V0ZXIubW9kdWxlcy5mb3JFYWNoKChtb2R1bGUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gbW9kdWxlLmRlZmluaXRpb24uY29udHJvbGxlckNvbnN0cnVjdG9yO1xuICAgICAgICAgICAgY29uc3Qgb3V0bGV0cyA9IHJlYWRJbmhlcml0YWJsZVN0YXRpY0FycmF5VmFsdWVzKGNvbnN0cnVjdG9yLCBcIm91dGxldHNcIik7XG4gICAgICAgICAgICBvdXRsZXRzLmZvckVhY2goKG91dGxldCkgPT4gZGVwZW5kZW5jaWVzLmFkZChvdXRsZXQsIG1vZHVsZS5pZGVudGlmaWVyKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZGVwZW5kZW5jaWVzO1xuICAgIH1cbiAgICBnZXQgb3V0bGV0RGVmaW5pdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm91dGxldERlcGVuZGVuY2llcy5nZXRLZXlzRm9yVmFsdWUodGhpcy5pZGVudGlmaWVyKTtcbiAgICB9XG4gICAgZ2V0IGRlcGVuZGVudENvbnRyb2xsZXJJZGVudGlmaWVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0bGV0RGVwZW5kZW5jaWVzLmdldFZhbHVlc0ZvcktleSh0aGlzLmlkZW50aWZpZXIpO1xuICAgIH1cbiAgICBnZXQgZGVwZW5kZW50Q29udGV4dHMoKSB7XG4gICAgICAgIGNvbnN0IGlkZW50aWZpZXJzID0gdGhpcy5kZXBlbmRlbnRDb250cm9sbGVySWRlbnRpZmllcnM7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5jb250ZXh0cy5maWx0ZXIoKGNvbnRleHQpID0+IGlkZW50aWZpZXJzLmluY2x1ZGVzKGNvbnRleHQuaWRlbnRpZmllcikpO1xuICAgIH1cbiAgICBoYXNPdXRsZXQoZWxlbWVudCwgb3V0bGV0TmFtZSkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmdldE91dGxldChlbGVtZW50LCBvdXRsZXROYW1lKSB8fCAhIXRoaXMuZ2V0T3V0bGV0RnJvbU1hcChlbGVtZW50LCBvdXRsZXROYW1lKTtcbiAgICB9XG4gICAgZ2V0T3V0bGV0KGVsZW1lbnQsIG91dGxldE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb24uZ2V0Q29udHJvbGxlckZvckVsZW1lbnRBbmRJZGVudGlmaWVyKGVsZW1lbnQsIG91dGxldE5hbWUpO1xuICAgIH1cbiAgICBnZXRPdXRsZXRGcm9tTWFwKGVsZW1lbnQsIG91dGxldE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3V0bGV0c0J5TmFtZS5nZXRWYWx1ZXNGb3JLZXkob3V0bGV0TmFtZSkuZmluZCgob3V0bGV0KSA9PiBvdXRsZXQuZWxlbWVudCA9PT0gZWxlbWVudCk7XG4gICAgfVxuICAgIGdldCBzY29wZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5zY29wZTtcbiAgICB9XG4gICAgZ2V0IHNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5zY2hlbWE7XG4gICAgfVxuICAgIGdldCBpZGVudGlmaWVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LmlkZW50aWZpZXI7XG4gICAgfVxuICAgIGdldCBhcHBsaWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5hcHBsaWNhdGlvbjtcbiAgICB9XG4gICAgZ2V0IHJvdXRlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb24ucm91dGVyO1xuICAgIH1cbn1cblxuY2xhc3MgQ29udGV4dCB7XG4gICAgY29uc3RydWN0b3IobW9kdWxlLCBzY29wZSkge1xuICAgICAgICB0aGlzLmxvZ0RlYnVnQWN0aXZpdHkgPSAoZnVuY3Rpb25OYW1lLCBkZXRhaWwgPSB7fSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBpZGVudGlmaWVyLCBjb250cm9sbGVyLCBlbGVtZW50IH0gPSB0aGlzO1xuICAgICAgICAgICAgZGV0YWlsID0gT2JqZWN0LmFzc2lnbih7IGlkZW50aWZpZXIsIGNvbnRyb2xsZXIsIGVsZW1lbnQgfSwgZGV0YWlsKTtcbiAgICAgICAgICAgIHRoaXMuYXBwbGljYXRpb24ubG9nRGVidWdBY3Rpdml0eSh0aGlzLmlkZW50aWZpZXIsIGZ1bmN0aW9uTmFtZSwgZGV0YWlsKTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5tb2R1bGUgPSBtb2R1bGU7XG4gICAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyID0gbmV3IG1vZHVsZS5jb250cm9sbGVyQ29uc3RydWN0b3IodGhpcyk7XG4gICAgICAgIHRoaXMuYmluZGluZ09ic2VydmVyID0gbmV3IEJpbmRpbmdPYnNlcnZlcih0aGlzLCB0aGlzLmRpc3BhdGNoZXIpO1xuICAgICAgICB0aGlzLnZhbHVlT2JzZXJ2ZXIgPSBuZXcgVmFsdWVPYnNlcnZlcih0aGlzLCB0aGlzLmNvbnRyb2xsZXIpO1xuICAgICAgICB0aGlzLnRhcmdldE9ic2VydmVyID0gbmV3IFRhcmdldE9ic2VydmVyKHRoaXMsIHRoaXMpO1xuICAgICAgICB0aGlzLm91dGxldE9ic2VydmVyID0gbmV3IE91dGxldE9ic2VydmVyKHRoaXMsIHRoaXMpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgICAgIHRoaXMubG9nRGVidWdBY3Rpdml0eShcImluaXRpYWxpemVcIik7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUVycm9yKGVycm9yLCBcImluaXRpYWxpemluZyBjb250cm9sbGVyXCIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbm5lY3QoKSB7XG4gICAgICAgIHRoaXMuYmluZGluZ09ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgIHRoaXMudmFsdWVPYnNlcnZlci5zdGFydCgpO1xuICAgICAgICB0aGlzLnRhcmdldE9ic2VydmVyLnN0YXJ0KCk7XG4gICAgICAgIHRoaXMub3V0bGV0T2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlci5jb25uZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmxvZ0RlYnVnQWN0aXZpdHkoXCJjb25uZWN0XCIpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciwgXCJjb25uZWN0aW5nIGNvbnRyb2xsZXJcIik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmVmcmVzaCgpIHtcbiAgICAgICAgdGhpcy5vdXRsZXRPYnNlcnZlci5yZWZyZXNoKCk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3QoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXIuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5sb2dEZWJ1Z0FjdGl2aXR5KFwiZGlzY29ubmVjdFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsIFwiZGlzY29ubmVjdGluZyBjb250cm9sbGVyXCIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub3V0bGV0T2JzZXJ2ZXIuc3RvcCgpO1xuICAgICAgICB0aGlzLnRhcmdldE9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgdGhpcy52YWx1ZU9ic2VydmVyLnN0b3AoKTtcbiAgICAgICAgdGhpcy5iaW5kaW5nT2JzZXJ2ZXIuc3RvcCgpO1xuICAgIH1cbiAgICBnZXQgYXBwbGljYXRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZS5hcHBsaWNhdGlvbjtcbiAgICB9XG4gICAgZ2V0IGlkZW50aWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1vZHVsZS5pZGVudGlmaWVyO1xuICAgIH1cbiAgICBnZXQgc2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvbi5zY2hlbWE7XG4gICAgfVxuICAgIGdldCBkaXNwYXRjaGVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvbi5kaXNwYXRjaGVyO1xuICAgIH1cbiAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGUuZWxlbWVudDtcbiAgICB9XG4gICAgZ2V0IHBhcmVudEVsZW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQucGFyZW50RWxlbWVudDtcbiAgICB9XG4gICAgaGFuZGxlRXJyb3IoZXJyb3IsIG1lc3NhZ2UsIGRldGFpbCA9IHt9KSB7XG4gICAgICAgIGNvbnN0IHsgaWRlbnRpZmllciwgY29udHJvbGxlciwgZWxlbWVudCB9ID0gdGhpcztcbiAgICAgICAgZGV0YWlsID0gT2JqZWN0LmFzc2lnbih7IGlkZW50aWZpZXIsIGNvbnRyb2xsZXIsIGVsZW1lbnQgfSwgZGV0YWlsKTtcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5oYW5kbGVFcnJvcihlcnJvciwgYEVycm9yICR7bWVzc2FnZX1gLCBkZXRhaWwpO1xuICAgIH1cbiAgICB0YXJnZXRDb25uZWN0ZWQoZWxlbWVudCwgbmFtZSkge1xuICAgICAgICB0aGlzLmludm9rZUNvbnRyb2xsZXJNZXRob2QoYCR7bmFtZX1UYXJnZXRDb25uZWN0ZWRgLCBlbGVtZW50KTtcbiAgICB9XG4gICAgdGFyZ2V0RGlzY29ubmVjdGVkKGVsZW1lbnQsIG5hbWUpIHtcbiAgICAgICAgdGhpcy5pbnZva2VDb250cm9sbGVyTWV0aG9kKGAke25hbWV9VGFyZ2V0RGlzY29ubmVjdGVkYCwgZWxlbWVudCk7XG4gICAgfVxuICAgIG91dGxldENvbm5lY3RlZChvdXRsZXQsIGVsZW1lbnQsIG5hbWUpIHtcbiAgICAgICAgdGhpcy5pbnZva2VDb250cm9sbGVyTWV0aG9kKGAke25hbWVzcGFjZUNhbWVsaXplKG5hbWUpfU91dGxldENvbm5lY3RlZGAsIG91dGxldCwgZWxlbWVudCk7XG4gICAgfVxuICAgIG91dGxldERpc2Nvbm5lY3RlZChvdXRsZXQsIGVsZW1lbnQsIG5hbWUpIHtcbiAgICAgICAgdGhpcy5pbnZva2VDb250cm9sbGVyTWV0aG9kKGAke25hbWVzcGFjZUNhbWVsaXplKG5hbWUpfU91dGxldERpc2Nvbm5lY3RlZGAsIG91dGxldCwgZWxlbWVudCk7XG4gICAgfVxuICAgIGludm9rZUNvbnRyb2xsZXJNZXRob2QobWV0aG9kTmFtZSwgLi4uYXJncykge1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy5jb250cm9sbGVyO1xuICAgICAgICBpZiAodHlwZW9mIGNvbnRyb2xsZXJbbWV0aG9kTmFtZV0gPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyW21ldGhvZE5hbWVdKC4uLmFyZ3MpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBibGVzcyhjb25zdHJ1Y3Rvcikge1xuICAgIHJldHVybiBzaGFkb3coY29uc3RydWN0b3IsIGdldEJsZXNzZWRQcm9wZXJ0aWVzKGNvbnN0cnVjdG9yKSk7XG59XG5mdW5jdGlvbiBzaGFkb3coY29uc3RydWN0b3IsIHByb3BlcnRpZXMpIHtcbiAgICBjb25zdCBzaGFkb3dDb25zdHJ1Y3RvciA9IGV4dGVuZChjb25zdHJ1Y3Rvcik7XG4gICAgY29uc3Qgc2hhZG93UHJvcGVydGllcyA9IGdldFNoYWRvd1Byb3BlcnRpZXMoY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wZXJ0aWVzKTtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhzaGFkb3dDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHNoYWRvd1Byb3BlcnRpZXMpO1xuICAgIHJldHVybiBzaGFkb3dDb25zdHJ1Y3Rvcjtcbn1cbmZ1bmN0aW9uIGdldEJsZXNzZWRQcm9wZXJ0aWVzKGNvbnN0cnVjdG9yKSB7XG4gICAgY29uc3QgYmxlc3NpbmdzID0gcmVhZEluaGVyaXRhYmxlU3RhdGljQXJyYXlWYWx1ZXMoY29uc3RydWN0b3IsIFwiYmxlc3NpbmdzXCIpO1xuICAgIHJldHVybiBibGVzc2luZ3MucmVkdWNlKChibGVzc2VkUHJvcGVydGllcywgYmxlc3NpbmcpID0+IHtcbiAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IGJsZXNzaW5nKGNvbnN0cnVjdG9yKTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gcHJvcGVydGllcykge1xuICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IGJsZXNzZWRQcm9wZXJ0aWVzW2tleV0gfHwge307XG4gICAgICAgICAgICBibGVzc2VkUHJvcGVydGllc1trZXldID0gT2JqZWN0LmFzc2lnbihkZXNjcmlwdG9yLCBwcm9wZXJ0aWVzW2tleV0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBibGVzc2VkUHJvcGVydGllcztcbiAgICB9LCB7fSk7XG59XG5mdW5jdGlvbiBnZXRTaGFkb3dQcm9wZXJ0aWVzKHByb3RvdHlwZSwgcHJvcGVydGllcykge1xuICAgIHJldHVybiBnZXRPd25LZXlzKHByb3BlcnRpZXMpLnJlZHVjZSgoc2hhZG93UHJvcGVydGllcywga2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBnZXRTaGFkb3dlZERlc2NyaXB0b3IocHJvdG90eXBlLCBwcm9wZXJ0aWVzLCBrZXkpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvcikge1xuICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihzaGFkb3dQcm9wZXJ0aWVzLCB7IFtrZXldOiBkZXNjcmlwdG9yIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaGFkb3dQcm9wZXJ0aWVzO1xuICAgIH0sIHt9KTtcbn1cbmZ1bmN0aW9uIGdldFNoYWRvd2VkRGVzY3JpcHRvcihwcm90b3R5cGUsIHByb3BlcnRpZXMsIGtleSkge1xuICAgIGNvbnN0IHNoYWRvd2luZ0Rlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvdHlwZSwga2V5KTtcbiAgICBjb25zdCBzaGFkb3dlZEJ5VmFsdWUgPSBzaGFkb3dpbmdEZXNjcmlwdG9yICYmIFwidmFsdWVcIiBpbiBzaGFkb3dpbmdEZXNjcmlwdG9yO1xuICAgIGlmICghc2hhZG93ZWRCeVZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3BlcnRpZXMsIGtleSkudmFsdWU7XG4gICAgICAgIGlmIChzaGFkb3dpbmdEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICBkZXNjcmlwdG9yLmdldCA9IHNoYWRvd2luZ0Rlc2NyaXB0b3IuZ2V0IHx8IGRlc2NyaXB0b3IuZ2V0O1xuICAgICAgICAgICAgZGVzY3JpcHRvci5zZXQgPSBzaGFkb3dpbmdEZXNjcmlwdG9yLnNldCB8fCBkZXNjcmlwdG9yLnNldDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVzY3JpcHRvcjtcbiAgICB9XG59XG5jb25zdCBnZXRPd25LZXlzID0gKCgpID0+IHtcbiAgICBpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHJldHVybiAob2JqZWN0KSA9PiBbLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMob2JqZWN0KSwgLi4uT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbiAgICB9XG59KSgpO1xuY29uc3QgZXh0ZW5kID0gKCgpID0+IHtcbiAgICBmdW5jdGlvbiBleHRlbmRXaXRoUmVmbGVjdChjb25zdHJ1Y3Rvcikge1xuICAgICAgICBmdW5jdGlvbiBleHRlbmRlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiBSZWZsZWN0LmNvbnN0cnVjdChjb25zdHJ1Y3RvciwgYXJndW1lbnRzLCBuZXcudGFyZ2V0KTtcbiAgICAgICAgfVxuICAgICAgICBleHRlbmRlZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwge1xuICAgICAgICAgICAgY29uc3RydWN0b3I6IHsgdmFsdWU6IGV4dGVuZGVkIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBSZWZsZWN0LnNldFByb3RvdHlwZU9mKGV4dGVuZGVkLCBjb25zdHJ1Y3Rvcik7XG4gICAgICAgIHJldHVybiBleHRlbmRlZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gdGVzdFJlZmxlY3RFeHRlbnNpb24oKSB7XG4gICAgICAgIGNvbnN0IGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB0aGlzLmEuY2FsbCh0aGlzKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgYiA9IGV4dGVuZFdpdGhSZWZsZWN0KGEpO1xuICAgICAgICBiLnByb3RvdHlwZS5hID0gZnVuY3Rpb24gKCkgeyB9O1xuICAgICAgICByZXR1cm4gbmV3IGIoKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgdGVzdFJlZmxlY3RFeHRlbnNpb24oKTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFdpdGhSZWZsZWN0O1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuIChjb25zdHJ1Y3RvcikgPT4gY2xhc3MgZXh0ZW5kZWQgZXh0ZW5kcyBjb25zdHJ1Y3RvciB7XG4gICAgICAgIH07XG4gICAgfVxufSkoKTtcblxuZnVuY3Rpb24gYmxlc3NEZWZpbml0aW9uKGRlZmluaXRpb24pIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBpZGVudGlmaWVyOiBkZWZpbml0aW9uLmlkZW50aWZpZXIsXG4gICAgICAgIGNvbnRyb2xsZXJDb25zdHJ1Y3RvcjogYmxlc3MoZGVmaW5pdGlvbi5jb250cm9sbGVyQ29uc3RydWN0b3IpLFxuICAgIH07XG59XG5cbmNsYXNzIE1vZHVsZSB7XG4gICAgY29uc3RydWN0b3IoYXBwbGljYXRpb24sIGRlZmluaXRpb24pIHtcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbiA9IGFwcGxpY2F0aW9uO1xuICAgICAgICB0aGlzLmRlZmluaXRpb24gPSBibGVzc0RlZmluaXRpb24oZGVmaW5pdGlvbik7XG4gICAgICAgIHRoaXMuY29udGV4dHNCeVNjb3BlID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWRDb250ZXh0cyA9IG5ldyBTZXQoKTtcbiAgICB9XG4gICAgZ2V0IGlkZW50aWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmluaXRpb24uaWRlbnRpZmllcjtcbiAgICB9XG4gICAgZ2V0IGNvbnRyb2xsZXJDb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmaW5pdGlvbi5jb250cm9sbGVyQ29uc3RydWN0b3I7XG4gICAgfVxuICAgIGdldCBjb250ZXh0cygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jb25uZWN0ZWRDb250ZXh0cyk7XG4gICAgfVxuICAgIGNvbm5lY3RDb250ZXh0Rm9yU2NvcGUoc2NvcGUpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuZmV0Y2hDb250ZXh0Rm9yU2NvcGUoc2NvcGUpO1xuICAgICAgICB0aGlzLmNvbm5lY3RlZENvbnRleHRzLmFkZChjb250ZXh0KTtcbiAgICAgICAgY29udGV4dC5jb25uZWN0KCk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3RDb250ZXh0Rm9yU2NvcGUoc2NvcGUpIHtcbiAgICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuY29udGV4dHNCeVNjb3BlLmdldChzY29wZSk7XG4gICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbm5lY3RlZENvbnRleHRzLmRlbGV0ZShjb250ZXh0KTtcbiAgICAgICAgICAgIGNvbnRleHQuZGlzY29ubmVjdCgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZldGNoQ29udGV4dEZvclNjb3BlKHNjb3BlKSB7XG4gICAgICAgIGxldCBjb250ZXh0ID0gdGhpcy5jb250ZXh0c0J5U2NvcGUuZ2V0KHNjb3BlKTtcbiAgICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgICAgICBjb250ZXh0ID0gbmV3IENvbnRleHQodGhpcywgc2NvcGUpO1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0c0J5U2NvcGUuc2V0KHNjb3BlLCBjb250ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICB9XG59XG5cbmNsYXNzIENsYXNzTWFwIHtcbiAgICBjb25zdHJ1Y3RvcihzY29wZSkge1xuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgfVxuICAgIGhhcyhuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuaGFzKHRoaXMuZ2V0RGF0YUtleShuYW1lKSk7XG4gICAgfVxuICAgIGdldChuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEFsbChuYW1lKVswXTtcbiAgICB9XG4gICAgZ2V0QWxsKG5hbWUpIHtcbiAgICAgICAgY29uc3QgdG9rZW5TdHJpbmcgPSB0aGlzLmRhdGEuZ2V0KHRoaXMuZ2V0RGF0YUtleShuYW1lKSkgfHwgXCJcIjtcbiAgICAgICAgcmV0dXJuIHRva2VuaXplKHRva2VuU3RyaW5nKTtcbiAgICB9XG4gICAgZ2V0QXR0cmlidXRlTmFtZShuYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0QXR0cmlidXRlTmFtZUZvcktleSh0aGlzLmdldERhdGFLZXkobmFtZSkpO1xuICAgIH1cbiAgICBnZXREYXRhS2V5KG5hbWUpIHtcbiAgICAgICAgcmV0dXJuIGAke25hbWV9LWNsYXNzYDtcbiAgICB9XG4gICAgZ2V0IGRhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjb3BlLmRhdGE7XG4gICAgfVxufVxuXG5jbGFzcyBEYXRhTWFwIHtcbiAgICBjb25zdHJ1Y3RvcihzY29wZSkge1xuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgfVxuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY29wZS5lbGVtZW50O1xuICAgIH1cbiAgICBnZXQgaWRlbnRpZmllcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGUuaWRlbnRpZmllcjtcbiAgICB9XG4gICAgZ2V0KGtleSkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGVOYW1lRm9yS2V5KGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICAgIH1cbiAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGVOYW1lRm9yS2V5KGtleSk7XG4gICAgICAgIHRoaXMuZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5nZXQoa2V5KTtcbiAgICB9XG4gICAgaGFzKGtleSkge1xuICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGVOYW1lRm9yS2V5KGtleSk7XG4gICAgICAgIHJldHVybiB0aGlzLmVsZW1lbnQuaGFzQXR0cmlidXRlKG5hbWUpO1xuICAgIH1cbiAgICBkZWxldGUoa2V5KSB7XG4gICAgICAgIGlmICh0aGlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gdGhpcy5nZXRBdHRyaWJ1dGVOYW1lRm9yS2V5KGtleSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0QXR0cmlidXRlTmFtZUZvcktleShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGBkYXRhLSR7dGhpcy5pZGVudGlmaWVyfS0ke2Rhc2hlcml6ZShrZXkpfWA7XG4gICAgfVxufVxuXG5jbGFzcyBHdWlkZSB7XG4gICAgY29uc3RydWN0b3IobG9nZ2VyKSB7XG4gICAgICAgIHRoaXMud2FybmVkS2V5c0J5T2JqZWN0ID0gbmV3IFdlYWtNYXAoKTtcbiAgICAgICAgdGhpcy5sb2dnZXIgPSBsb2dnZXI7XG4gICAgfVxuICAgIHdhcm4ob2JqZWN0LCBrZXksIG1lc3NhZ2UpIHtcbiAgICAgICAgbGV0IHdhcm5lZEtleXMgPSB0aGlzLndhcm5lZEtleXNCeU9iamVjdC5nZXQob2JqZWN0KTtcbiAgICAgICAgaWYgKCF3YXJuZWRLZXlzKSB7XG4gICAgICAgICAgICB3YXJuZWRLZXlzID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgdGhpcy53YXJuZWRLZXlzQnlPYmplY3Quc2V0KG9iamVjdCwgd2FybmVkS2V5cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF3YXJuZWRLZXlzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgICB3YXJuZWRLZXlzLmFkZChrZXkpO1xuICAgICAgICAgICAgdGhpcy5sb2dnZXIud2FybihtZXNzYWdlLCBvYmplY3QpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5mdW5jdGlvbiBhdHRyaWJ1dGVWYWx1ZUNvbnRhaW5zVG9rZW4oYXR0cmlidXRlTmFtZSwgdG9rZW4pIHtcbiAgICByZXR1cm4gYFske2F0dHJpYnV0ZU5hbWV9fj1cIiR7dG9rZW59XCJdYDtcbn1cblxuY2xhc3MgVGFyZ2V0U2V0IHtcbiAgICBjb25zdHJ1Y3RvcihzY29wZSkge1xuICAgICAgICB0aGlzLnNjb3BlID0gc2NvcGU7XG4gICAgfVxuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY29wZS5lbGVtZW50O1xuICAgIH1cbiAgICBnZXQgaWRlbnRpZmllcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGUuaWRlbnRpZmllcjtcbiAgICB9XG4gICAgZ2V0IHNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGUuc2NoZW1hO1xuICAgIH1cbiAgICBoYXModGFyZ2V0TmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5maW5kKHRhcmdldE5hbWUpICE9IG51bGw7XG4gICAgfVxuICAgIGZpbmQoLi4udGFyZ2V0TmFtZXMpIHtcbiAgICAgICAgcmV0dXJuIHRhcmdldE5hbWVzLnJlZHVjZSgodGFyZ2V0LCB0YXJnZXROYW1lKSA9PiB0YXJnZXQgfHwgdGhpcy5maW5kVGFyZ2V0KHRhcmdldE5hbWUpIHx8IHRoaXMuZmluZExlZ2FjeVRhcmdldCh0YXJnZXROYW1lKSwgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgZmluZEFsbCguLi50YXJnZXROYW1lcykge1xuICAgICAgICByZXR1cm4gdGFyZ2V0TmFtZXMucmVkdWNlKCh0YXJnZXRzLCB0YXJnZXROYW1lKSA9PiBbXG4gICAgICAgICAgICAuLi50YXJnZXRzLFxuICAgICAgICAgICAgLi4udGhpcy5maW5kQWxsVGFyZ2V0cyh0YXJnZXROYW1lKSxcbiAgICAgICAgICAgIC4uLnRoaXMuZmluZEFsbExlZ2FjeVRhcmdldHModGFyZ2V0TmFtZSksXG4gICAgICAgIF0sIFtdKTtcbiAgICB9XG4gICAgZmluZFRhcmdldCh0YXJnZXROYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvckZvclRhcmdldE5hbWUodGFyZ2V0TmFtZSk7XG4gICAgICAgIHJldHVybiB0aGlzLnNjb3BlLmZpbmRFbGVtZW50KHNlbGVjdG9yKTtcbiAgICB9XG4gICAgZmluZEFsbFRhcmdldHModGFyZ2V0TmFtZSkge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3JGb3JUYXJnZXROYW1lKHRhcmdldE5hbWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5zY29wZS5maW5kQWxsRWxlbWVudHMoc2VsZWN0b3IpO1xuICAgIH1cbiAgICBnZXRTZWxlY3RvckZvclRhcmdldE5hbWUodGFyZ2V0TmFtZSkge1xuICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gdGhpcy5zY2hlbWEudGFyZ2V0QXR0cmlidXRlRm9yU2NvcGUodGhpcy5pZGVudGlmaWVyKTtcbiAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZVZhbHVlQ29udGFpbnNUb2tlbihhdHRyaWJ1dGVOYW1lLCB0YXJnZXROYW1lKTtcbiAgICB9XG4gICAgZmluZExlZ2FjeVRhcmdldCh0YXJnZXROYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRMZWdhY3lTZWxlY3RvckZvclRhcmdldE5hbWUodGFyZ2V0TmFtZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmRlcHJlY2F0ZSh0aGlzLnNjb3BlLmZpbmRFbGVtZW50KHNlbGVjdG9yKSwgdGFyZ2V0TmFtZSk7XG4gICAgfVxuICAgIGZpbmRBbGxMZWdhY3lUYXJnZXRzKHRhcmdldE5hbWUpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSB0aGlzLmdldExlZ2FjeVNlbGVjdG9yRm9yVGFyZ2V0TmFtZSh0YXJnZXROYW1lKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGUuZmluZEFsbEVsZW1lbnRzKHNlbGVjdG9yKS5tYXAoKGVsZW1lbnQpID0+IHRoaXMuZGVwcmVjYXRlKGVsZW1lbnQsIHRhcmdldE5hbWUpKTtcbiAgICB9XG4gICAgZ2V0TGVnYWN5U2VsZWN0b3JGb3JUYXJnZXROYW1lKHRhcmdldE5hbWUpIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0RGVzY3JpcHRvciA9IGAke3RoaXMuaWRlbnRpZmllcn0uJHt0YXJnZXROYW1lfWA7XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZUNvbnRhaW5zVG9rZW4odGhpcy5zY2hlbWEudGFyZ2V0QXR0cmlidXRlLCB0YXJnZXREZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgZGVwcmVjYXRlKGVsZW1lbnQsIHRhcmdldE5hbWUpIHtcbiAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgaWRlbnRpZmllciB9ID0gdGhpcztcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSB0aGlzLnNjaGVtYS50YXJnZXRBdHRyaWJ1dGU7XG4gICAgICAgICAgICBjb25zdCByZXZpc2VkQXR0cmlidXRlTmFtZSA9IHRoaXMuc2NoZW1hLnRhcmdldEF0dHJpYnV0ZUZvclNjb3BlKGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgdGhpcy5ndWlkZS53YXJuKGVsZW1lbnQsIGB0YXJnZXQ6JHt0YXJnZXROYW1lfWAsIGBQbGVhc2UgcmVwbGFjZSAke2F0dHJpYnV0ZU5hbWV9PVwiJHtpZGVudGlmaWVyfS4ke3RhcmdldE5hbWV9XCIgd2l0aCAke3JldmlzZWRBdHRyaWJ1dGVOYW1lfT1cIiR7dGFyZ2V0TmFtZX1cIi4gYCArXG4gICAgICAgICAgICAgICAgYFRoZSAke2F0dHJpYnV0ZU5hbWV9IGF0dHJpYnV0ZSBpcyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBTdGltdWx1cy5gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gICAgZ2V0IGd1aWRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY29wZS5ndWlkZTtcbiAgICB9XG59XG5cbmNsYXNzIE91dGxldFNldCB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGUsIGNvbnRyb2xsZXJFbGVtZW50KSB7XG4gICAgICAgIHRoaXMuc2NvcGUgPSBzY29wZTtcbiAgICAgICAgdGhpcy5jb250cm9sbGVyRWxlbWVudCA9IGNvbnRyb2xsZXJFbGVtZW50O1xuICAgIH1cbiAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGUuZWxlbWVudDtcbiAgICB9XG4gICAgZ2V0IGlkZW50aWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjb3BlLmlkZW50aWZpZXI7XG4gICAgfVxuICAgIGdldCBzY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjb3BlLnNjaGVtYTtcbiAgICB9XG4gICAgaGFzKG91dGxldE5hbWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZChvdXRsZXROYW1lKSAhPSBudWxsO1xuICAgIH1cbiAgICBmaW5kKC4uLm91dGxldE5hbWVzKSB7XG4gICAgICAgIHJldHVybiBvdXRsZXROYW1lcy5yZWR1Y2UoKG91dGxldCwgb3V0bGV0TmFtZSkgPT4gb3V0bGV0IHx8IHRoaXMuZmluZE91dGxldChvdXRsZXROYW1lKSwgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgZmluZEFsbCguLi5vdXRsZXROYW1lcykge1xuICAgICAgICByZXR1cm4gb3V0bGV0TmFtZXMucmVkdWNlKChvdXRsZXRzLCBvdXRsZXROYW1lKSA9PiBbLi4ub3V0bGV0cywgLi4udGhpcy5maW5kQWxsT3V0bGV0cyhvdXRsZXROYW1lKV0sIFtdKTtcbiAgICB9XG4gICAgZ2V0U2VsZWN0b3JGb3JPdXRsZXROYW1lKG91dGxldE5hbWUpIHtcbiAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IHRoaXMuc2NoZW1hLm91dGxldEF0dHJpYnV0ZUZvclNjb3BlKHRoaXMuaWRlbnRpZmllciwgb3V0bGV0TmFtZSk7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJFbGVtZW50LmdldEF0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbiAgICB9XG4gICAgZmluZE91dGxldChvdXRsZXROYW1lKSB7XG4gICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5nZXRTZWxlY3RvckZvck91dGxldE5hbWUob3V0bGV0TmFtZSk7XG4gICAgICAgIGlmIChzZWxlY3RvcilcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbmRFbGVtZW50KHNlbGVjdG9yLCBvdXRsZXROYW1lKTtcbiAgICB9XG4gICAgZmluZEFsbE91dGxldHMob3V0bGV0TmFtZSkge1xuICAgICAgICBjb25zdCBzZWxlY3RvciA9IHRoaXMuZ2V0U2VsZWN0b3JGb3JPdXRsZXROYW1lKG91dGxldE5hbWUpO1xuICAgICAgICByZXR1cm4gc2VsZWN0b3IgPyB0aGlzLmZpbmRBbGxFbGVtZW50cyhzZWxlY3Rvciwgb3V0bGV0TmFtZSkgOiBbXTtcbiAgICB9XG4gICAgZmluZEVsZW1lbnQoc2VsZWN0b3IsIG91dGxldE5hbWUpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSB0aGlzLnNjb3BlLnF1ZXJ5RWxlbWVudHMoc2VsZWN0b3IpO1xuICAgICAgICByZXR1cm4gZWxlbWVudHMuZmlsdGVyKChlbGVtZW50KSA9PiB0aGlzLm1hdGNoZXNFbGVtZW50KGVsZW1lbnQsIHNlbGVjdG9yLCBvdXRsZXROYW1lKSlbMF07XG4gICAgfVxuICAgIGZpbmRBbGxFbGVtZW50cyhzZWxlY3Rvciwgb3V0bGV0TmFtZSkge1xuICAgICAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMuc2NvcGUucXVlcnlFbGVtZW50cyhzZWxlY3Rvcik7XG4gICAgICAgIHJldHVybiBlbGVtZW50cy5maWx0ZXIoKGVsZW1lbnQpID0+IHRoaXMubWF0Y2hlc0VsZW1lbnQoZWxlbWVudCwgc2VsZWN0b3IsIG91dGxldE5hbWUpKTtcbiAgICB9XG4gICAgbWF0Y2hlc0VsZW1lbnQoZWxlbWVudCwgc2VsZWN0b3IsIG91dGxldE5hbWUpIHtcbiAgICAgICAgY29uc3QgY29udHJvbGxlckF0dHJpYnV0ZSA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKHRoaXMuc2NvcGUuc2NoZW1hLmNvbnRyb2xsZXJBdHRyaWJ1dGUpIHx8IFwiXCI7XG4gICAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpICYmIGNvbnRyb2xsZXJBdHRyaWJ1dGUuc3BsaXQoXCIgXCIpLmluY2x1ZGVzKG91dGxldE5hbWUpO1xuICAgIH1cbn1cblxuY2xhc3MgU2NvcGUge1xuICAgIGNvbnN0cnVjdG9yKHNjaGVtYSwgZWxlbWVudCwgaWRlbnRpZmllciwgbG9nZ2VyKSB7XG4gICAgICAgIHRoaXMudGFyZ2V0cyA9IG5ldyBUYXJnZXRTZXQodGhpcyk7XG4gICAgICAgIHRoaXMuY2xhc3NlcyA9IG5ldyBDbGFzc01hcCh0aGlzKTtcbiAgICAgICAgdGhpcy5kYXRhID0gbmV3IERhdGFNYXAodGhpcyk7XG4gICAgICAgIHRoaXMuY29udGFpbnNFbGVtZW50ID0gKGVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBlbGVtZW50LmNsb3Nlc3QodGhpcy5jb250cm9sbGVyU2VsZWN0b3IpID09PSB0aGlzLmVsZW1lbnQ7XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLmlkZW50aWZpZXIgPSBpZGVudGlmaWVyO1xuICAgICAgICB0aGlzLmd1aWRlID0gbmV3IEd1aWRlKGxvZ2dlcik7XG4gICAgICAgIHRoaXMub3V0bGV0cyA9IG5ldyBPdXRsZXRTZXQodGhpcy5kb2N1bWVudFNjb3BlLCBlbGVtZW50KTtcbiAgICB9XG4gICAgZmluZEVsZW1lbnQoc2VsZWN0b3IpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSA/IHRoaXMuZWxlbWVudCA6IHRoaXMucXVlcnlFbGVtZW50cyhzZWxlY3RvcikuZmluZCh0aGlzLmNvbnRhaW5zRWxlbWVudCk7XG4gICAgfVxuICAgIGZpbmRBbGxFbGVtZW50cyhzZWxlY3Rvcikge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgLi4uKHRoaXMuZWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKSA/IFt0aGlzLmVsZW1lbnRdIDogW10pLFxuICAgICAgICAgICAgLi4udGhpcy5xdWVyeUVsZW1lbnRzKHNlbGVjdG9yKS5maWx0ZXIodGhpcy5jb250YWluc0VsZW1lbnQpLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBxdWVyeUVsZW1lbnRzKHNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuZWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSk7XG4gICAgfVxuICAgIGdldCBjb250cm9sbGVyU2VsZWN0b3IoKSB7XG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZUNvbnRhaW5zVG9rZW4odGhpcy5zY2hlbWEuY29udHJvbGxlckF0dHJpYnV0ZSwgdGhpcy5pZGVudGlmaWVyKTtcbiAgICB9XG4gICAgZ2V0IGlzRG9jdW1lbnRTY29wZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudCA9PT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cbiAgICBnZXQgZG9jdW1lbnRTY29wZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNEb2N1bWVudFNjb3BlXG4gICAgICAgICAgICA/IHRoaXNcbiAgICAgICAgICAgIDogbmV3IFNjb3BlKHRoaXMuc2NoZW1hLCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIHRoaXMuaWRlbnRpZmllciwgdGhpcy5ndWlkZS5sb2dnZXIpO1xuICAgIH1cbn1cblxuY2xhc3MgU2NvcGVPYnNlcnZlciB7XG4gICAgY29uc3RydWN0b3IoZWxlbWVudCwgc2NoZW1hLCBkZWxlZ2F0ZSkge1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICAgICAgdGhpcy5kZWxlZ2F0ZSA9IGRlbGVnYXRlO1xuICAgICAgICB0aGlzLnZhbHVlTGlzdE9ic2VydmVyID0gbmV3IFZhbHVlTGlzdE9ic2VydmVyKHRoaXMuZWxlbWVudCwgdGhpcy5jb250cm9sbGVyQXR0cmlidXRlLCB0aGlzKTtcbiAgICAgICAgdGhpcy5zY29wZXNCeUlkZW50aWZpZXJCeUVsZW1lbnQgPSBuZXcgV2Vha01hcCgpO1xuICAgICAgICB0aGlzLnNjb3BlUmVmZXJlbmNlQ291bnRzID0gbmV3IFdlYWtNYXAoKTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMudmFsdWVMaXN0T2JzZXJ2ZXIuc3RhcnQoKTtcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgdGhpcy52YWx1ZUxpc3RPYnNlcnZlci5zdG9wKCk7XG4gICAgfVxuICAgIGdldCBjb250cm9sbGVyQXR0cmlidXRlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY29udHJvbGxlckF0dHJpYnV0ZTtcbiAgICB9XG4gICAgcGFyc2VWYWx1ZUZvclRva2VuKHRva2VuKSB7XG4gICAgICAgIGNvbnN0IHsgZWxlbWVudCwgY29udGVudDogaWRlbnRpZmllciB9ID0gdG9rZW47XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlVmFsdWVGb3JFbGVtZW50QW5kSWRlbnRpZmllcihlbGVtZW50LCBpZGVudGlmaWVyKTtcbiAgICB9XG4gICAgcGFyc2VWYWx1ZUZvckVsZW1lbnRBbmRJZGVudGlmaWVyKGVsZW1lbnQsIGlkZW50aWZpZXIpIHtcbiAgICAgICAgY29uc3Qgc2NvcGVzQnlJZGVudGlmaWVyID0gdGhpcy5mZXRjaFNjb3Blc0J5SWRlbnRpZmllckZvckVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIGxldCBzY29wZSA9IHNjb3Blc0J5SWRlbnRpZmllci5nZXQoaWRlbnRpZmllcik7XG4gICAgICAgIGlmICghc2NvcGUpIHtcbiAgICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWxlZ2F0ZS5jcmVhdGVTY29wZUZvckVsZW1lbnRBbmRJZGVudGlmaWVyKGVsZW1lbnQsIGlkZW50aWZpZXIpO1xuICAgICAgICAgICAgc2NvcGVzQnlJZGVudGlmaWVyLnNldChpZGVudGlmaWVyLCBzY29wZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNjb3BlO1xuICAgIH1cbiAgICBlbGVtZW50TWF0Y2hlZFZhbHVlKGVsZW1lbnQsIHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHJlZmVyZW5jZUNvdW50ID0gKHRoaXMuc2NvcGVSZWZlcmVuY2VDb3VudHMuZ2V0KHZhbHVlKSB8fCAwKSArIDE7XG4gICAgICAgIHRoaXMuc2NvcGVSZWZlcmVuY2VDb3VudHMuc2V0KHZhbHVlLCByZWZlcmVuY2VDb3VudCk7XG4gICAgICAgIGlmIChyZWZlcmVuY2VDb3VudCA9PSAxKSB7XG4gICAgICAgICAgICB0aGlzLmRlbGVnYXRlLnNjb3BlQ29ubmVjdGVkKHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbGVtZW50VW5tYXRjaGVkVmFsdWUoZWxlbWVudCwgdmFsdWUpIHtcbiAgICAgICAgY29uc3QgcmVmZXJlbmNlQ291bnQgPSB0aGlzLnNjb3BlUmVmZXJlbmNlQ291bnRzLmdldCh2YWx1ZSk7XG4gICAgICAgIGlmIChyZWZlcmVuY2VDb3VudCkge1xuICAgICAgICAgICAgdGhpcy5zY29wZVJlZmVyZW5jZUNvdW50cy5zZXQodmFsdWUsIHJlZmVyZW5jZUNvdW50IC0gMSk7XG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlQ291bnQgPT0gMSkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUuc2NvcGVEaXNjb25uZWN0ZWQodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZldGNoU2NvcGVzQnlJZGVudGlmaWVyRm9yRWxlbWVudChlbGVtZW50KSB7XG4gICAgICAgIGxldCBzY29wZXNCeUlkZW50aWZpZXIgPSB0aGlzLnNjb3Blc0J5SWRlbnRpZmllckJ5RWxlbWVudC5nZXQoZWxlbWVudCk7XG4gICAgICAgIGlmICghc2NvcGVzQnlJZGVudGlmaWVyKSB7XG4gICAgICAgICAgICBzY29wZXNCeUlkZW50aWZpZXIgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB0aGlzLnNjb3Blc0J5SWRlbnRpZmllckJ5RWxlbWVudC5zZXQoZWxlbWVudCwgc2NvcGVzQnlJZGVudGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NvcGVzQnlJZGVudGlmaWVyO1xuICAgIH1cbn1cblxuY2xhc3MgUm91dGVyIHtcbiAgICBjb25zdHJ1Y3RvcihhcHBsaWNhdGlvbikge1xuICAgICAgICB0aGlzLmFwcGxpY2F0aW9uID0gYXBwbGljYXRpb247XG4gICAgICAgIHRoaXMuc2NvcGVPYnNlcnZlciA9IG5ldyBTY29wZU9ic2VydmVyKHRoaXMuZWxlbWVudCwgdGhpcy5zY2hlbWEsIHRoaXMpO1xuICAgICAgICB0aGlzLnNjb3Blc0J5SWRlbnRpZmllciA9IG5ldyBNdWx0aW1hcCgpO1xuICAgICAgICB0aGlzLm1vZHVsZXNCeUlkZW50aWZpZXIgPSBuZXcgTWFwKCk7XG4gICAgfVxuICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvbi5lbGVtZW50O1xuICAgIH1cbiAgICBnZXQgc2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvbi5zY2hlbWE7XG4gICAgfVxuICAgIGdldCBsb2dnZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uLmxvZ2dlcjtcbiAgICB9XG4gICAgZ2V0IGNvbnRyb2xsZXJBdHRyaWJ1dGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5jb250cm9sbGVyQXR0cmlidXRlO1xuICAgIH1cbiAgICBnZXQgbW9kdWxlcygpIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5tb2R1bGVzQnlJZGVudGlmaWVyLnZhbHVlcygpKTtcbiAgICB9XG4gICAgZ2V0IGNvbnRleHRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tb2R1bGVzLnJlZHVjZSgoY29udGV4dHMsIG1vZHVsZSkgPT4gY29udGV4dHMuY29uY2F0KG1vZHVsZS5jb250ZXh0cyksIFtdKTtcbiAgICB9XG4gICAgc3RhcnQoKSB7XG4gICAgICAgIHRoaXMuc2NvcGVPYnNlcnZlci5zdGFydCgpO1xuICAgIH1cbiAgICBzdG9wKCkge1xuICAgICAgICB0aGlzLnNjb3BlT2JzZXJ2ZXIuc3RvcCgpO1xuICAgIH1cbiAgICBsb2FkRGVmaW5pdGlvbihkZWZpbml0aW9uKSB7XG4gICAgICAgIHRoaXMudW5sb2FkSWRlbnRpZmllcihkZWZpbml0aW9uLmlkZW50aWZpZXIpO1xuICAgICAgICBjb25zdCBtb2R1bGUgPSBuZXcgTW9kdWxlKHRoaXMuYXBwbGljYXRpb24sIGRlZmluaXRpb24pO1xuICAgICAgICB0aGlzLmNvbm5lY3RNb2R1bGUobW9kdWxlKTtcbiAgICAgICAgY29uc3QgYWZ0ZXJMb2FkID0gZGVmaW5pdGlvbi5jb250cm9sbGVyQ29uc3RydWN0b3IuYWZ0ZXJMb2FkO1xuICAgICAgICBpZiAoYWZ0ZXJMb2FkKSB7XG4gICAgICAgICAgICBhZnRlckxvYWQuY2FsbChkZWZpbml0aW9uLmNvbnRyb2xsZXJDb25zdHJ1Y3RvciwgZGVmaW5pdGlvbi5pZGVudGlmaWVyLCB0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB1bmxvYWRJZGVudGlmaWVyKGlkZW50aWZpZXIpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gdGhpcy5tb2R1bGVzQnlJZGVudGlmaWVyLmdldChpZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKG1vZHVsZSkge1xuICAgICAgICAgICAgdGhpcy5kaXNjb25uZWN0TW9kdWxlKG1vZHVsZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0Q29udGV4dEZvckVsZW1lbnRBbmRJZGVudGlmaWVyKGVsZW1lbnQsIGlkZW50aWZpZXIpIHtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gdGhpcy5tb2R1bGVzQnlJZGVudGlmaWVyLmdldChpZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKG1vZHVsZSkge1xuICAgICAgICAgICAgcmV0dXJuIG1vZHVsZS5jb250ZXh0cy5maW5kKChjb250ZXh0KSA9PiBjb250ZXh0LmVsZW1lbnQgPT0gZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHJvcG9zZVRvQ29ubmVjdFNjb3BlRm9yRWxlbWVudEFuZElkZW50aWZpZXIoZWxlbWVudCwgaWRlbnRpZmllcikge1xuICAgICAgICBjb25zdCBzY29wZSA9IHRoaXMuc2NvcGVPYnNlcnZlci5wYXJzZVZhbHVlRm9yRWxlbWVudEFuZElkZW50aWZpZXIoZWxlbWVudCwgaWRlbnRpZmllcik7XG4gICAgICAgIGlmIChzY29wZSkge1xuICAgICAgICAgICAgdGhpcy5zY29wZU9ic2VydmVyLmVsZW1lbnRNYXRjaGVkVmFsdWUoc2NvcGUuZWxlbWVudCwgc2NvcGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihgQ291bGRuJ3QgZmluZCBvciBjcmVhdGUgc2NvcGUgZm9yIGlkZW50aWZpZXI6IFwiJHtpZGVudGlmaWVyfVwiIGFuZCBlbGVtZW50OmAsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGhhbmRsZUVycm9yKGVycm9yLCBtZXNzYWdlLCBkZXRhaWwpIHtcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbi5oYW5kbGVFcnJvcihlcnJvciwgbWVzc2FnZSwgZGV0YWlsKTtcbiAgICB9XG4gICAgY3JlYXRlU2NvcGVGb3JFbGVtZW50QW5kSWRlbnRpZmllcihlbGVtZW50LCBpZGVudGlmaWVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgU2NvcGUodGhpcy5zY2hlbWEsIGVsZW1lbnQsIGlkZW50aWZpZXIsIHRoaXMubG9nZ2VyKTtcbiAgICB9XG4gICAgc2NvcGVDb25uZWN0ZWQoc2NvcGUpIHtcbiAgICAgICAgdGhpcy5zY29wZXNCeUlkZW50aWZpZXIuYWRkKHNjb3BlLmlkZW50aWZpZXIsIHNjb3BlKTtcbiAgICAgICAgY29uc3QgbW9kdWxlID0gdGhpcy5tb2R1bGVzQnlJZGVudGlmaWVyLmdldChzY29wZS5pZGVudGlmaWVyKTtcbiAgICAgICAgaWYgKG1vZHVsZSkge1xuICAgICAgICAgICAgbW9kdWxlLmNvbm5lY3RDb250ZXh0Rm9yU2NvcGUoc2NvcGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHNjb3BlRGlzY29ubmVjdGVkKHNjb3BlKSB7XG4gICAgICAgIHRoaXMuc2NvcGVzQnlJZGVudGlmaWVyLmRlbGV0ZShzY29wZS5pZGVudGlmaWVyLCBzY29wZSk7XG4gICAgICAgIGNvbnN0IG1vZHVsZSA9IHRoaXMubW9kdWxlc0J5SWRlbnRpZmllci5nZXQoc2NvcGUuaWRlbnRpZmllcik7XG4gICAgICAgIGlmIChtb2R1bGUpIHtcbiAgICAgICAgICAgIG1vZHVsZS5kaXNjb25uZWN0Q29udGV4dEZvclNjb3BlKHNjb3BlKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25uZWN0TW9kdWxlKG1vZHVsZSkge1xuICAgICAgICB0aGlzLm1vZHVsZXNCeUlkZW50aWZpZXIuc2V0KG1vZHVsZS5pZGVudGlmaWVyLCBtb2R1bGUpO1xuICAgICAgICBjb25zdCBzY29wZXMgPSB0aGlzLnNjb3Blc0J5SWRlbnRpZmllci5nZXRWYWx1ZXNGb3JLZXkobW9kdWxlLmlkZW50aWZpZXIpO1xuICAgICAgICBzY29wZXMuZm9yRWFjaCgoc2NvcGUpID0+IG1vZHVsZS5jb25uZWN0Q29udGV4dEZvclNjb3BlKHNjb3BlKSk7XG4gICAgfVxuICAgIGRpc2Nvbm5lY3RNb2R1bGUobW9kdWxlKSB7XG4gICAgICAgIHRoaXMubW9kdWxlc0J5SWRlbnRpZmllci5kZWxldGUobW9kdWxlLmlkZW50aWZpZXIpO1xuICAgICAgICBjb25zdCBzY29wZXMgPSB0aGlzLnNjb3Blc0J5SWRlbnRpZmllci5nZXRWYWx1ZXNGb3JLZXkobW9kdWxlLmlkZW50aWZpZXIpO1xuICAgICAgICBzY29wZXMuZm9yRWFjaCgoc2NvcGUpID0+IG1vZHVsZS5kaXNjb25uZWN0Q29udGV4dEZvclNjb3BlKHNjb3BlKSk7XG4gICAgfVxufVxuXG5jb25zdCBkZWZhdWx0U2NoZW1hID0ge1xuICAgIGNvbnRyb2xsZXJBdHRyaWJ1dGU6IFwiZGF0YS1jb250cm9sbGVyXCIsXG4gICAgYWN0aW9uQXR0cmlidXRlOiBcImRhdGEtYWN0aW9uXCIsXG4gICAgdGFyZ2V0QXR0cmlidXRlOiBcImRhdGEtdGFyZ2V0XCIsXG4gICAgdGFyZ2V0QXR0cmlidXRlRm9yU2NvcGU6IChpZGVudGlmaWVyKSA9PiBgZGF0YS0ke2lkZW50aWZpZXJ9LXRhcmdldGAsXG4gICAgb3V0bGV0QXR0cmlidXRlRm9yU2NvcGU6IChpZGVudGlmaWVyLCBvdXRsZXQpID0+IGBkYXRhLSR7aWRlbnRpZmllcn0tJHtvdXRsZXR9LW91dGxldGAsXG4gICAga2V5TWFwcGluZ3M6IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7IGVudGVyOiBcIkVudGVyXCIsIHRhYjogXCJUYWJcIiwgZXNjOiBcIkVzY2FwZVwiLCBzcGFjZTogXCIgXCIsIHVwOiBcIkFycm93VXBcIiwgZG93bjogXCJBcnJvd0Rvd25cIiwgbGVmdDogXCJBcnJvd0xlZnRcIiwgcmlnaHQ6IFwiQXJyb3dSaWdodFwiLCBob21lOiBcIkhvbWVcIiwgZW5kOiBcIkVuZFwiLCBwYWdlX3VwOiBcIlBhZ2VVcFwiLCBwYWdlX2Rvd246IFwiUGFnZURvd25cIiB9LCBvYmplY3RGcm9tRW50cmllcyhcImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6XCIuc3BsaXQoXCJcIikubWFwKChjKSA9PiBbYywgY10pKSksIG9iamVjdEZyb21FbnRyaWVzKFwiMDEyMzQ1Njc4OVwiLnNwbGl0KFwiXCIpLm1hcCgobikgPT4gW24sIG5dKSkpLFxufTtcbmZ1bmN0aW9uIG9iamVjdEZyb21FbnRyaWVzKGFycmF5KSB7XG4gICAgcmV0dXJuIGFycmF5LnJlZHVjZSgobWVtbywgW2ssIHZdKSA9PiAoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBtZW1vKSwgeyBba106IHYgfSkpLCB7fSk7XG59XG5cbmNsYXNzIEFwcGxpY2F0aW9uIHtcbiAgICBjb25zdHJ1Y3RvcihlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBzY2hlbWEgPSBkZWZhdWx0U2NoZW1hKSB7XG4gICAgICAgIHRoaXMubG9nZ2VyID0gY29uc29sZTtcbiAgICAgICAgdGhpcy5kZWJ1ZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvZ0RlYnVnQWN0aXZpdHkgPSAoaWRlbnRpZmllciwgZnVuY3Rpb25OYW1lLCBkZXRhaWwgPSB7fSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGVidWcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvZ0Zvcm1hdHRlZE1lc3NhZ2UoaWRlbnRpZmllciwgZnVuY3Rpb25OYW1lLCBkZXRhaWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB0aGlzLnNjaGVtYSA9IHNjaGVtYTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyID0gbmV3IERpc3BhdGNoZXIodGhpcyk7XG4gICAgICAgIHRoaXMucm91dGVyID0gbmV3IFJvdXRlcih0aGlzKTtcbiAgICAgICAgdGhpcy5hY3Rpb25EZXNjcmlwdG9yRmlsdGVycyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRBY3Rpb25EZXNjcmlwdG9yRmlsdGVycyk7XG4gICAgfVxuICAgIHN0YXRpYyBzdGFydChlbGVtZW50LCBzY2hlbWEpIHtcbiAgICAgICAgY29uc3QgYXBwbGljYXRpb24gPSBuZXcgdGhpcyhlbGVtZW50LCBzY2hlbWEpO1xuICAgICAgICBhcHBsaWNhdGlvbi5zdGFydCgpO1xuICAgICAgICByZXR1cm4gYXBwbGljYXRpb247XG4gICAgfVxuICAgIGFzeW5jIHN0YXJ0KCkge1xuICAgICAgICBhd2FpdCBkb21SZWFkeSgpO1xuICAgICAgICB0aGlzLmxvZ0RlYnVnQWN0aXZpdHkoXCJhcHBsaWNhdGlvblwiLCBcInN0YXJ0aW5nXCIpO1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5yb3V0ZXIuc3RhcnQoKTtcbiAgICAgICAgdGhpcy5sb2dEZWJ1Z0FjdGl2aXR5KFwiYXBwbGljYXRpb25cIiwgXCJzdGFydFwiKTtcbiAgICB9XG4gICAgc3RvcCgpIHtcbiAgICAgICAgdGhpcy5sb2dEZWJ1Z0FjdGl2aXR5KFwiYXBwbGljYXRpb25cIiwgXCJzdG9wcGluZ1wiKTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLnN0b3AoKTtcbiAgICAgICAgdGhpcy5yb3V0ZXIuc3RvcCgpO1xuICAgICAgICB0aGlzLmxvZ0RlYnVnQWN0aXZpdHkoXCJhcHBsaWNhdGlvblwiLCBcInN0b3BcIik7XG4gICAgfVxuICAgIHJlZ2lzdGVyKGlkZW50aWZpZXIsIGNvbnRyb2xsZXJDb25zdHJ1Y3Rvcikge1xuICAgICAgICB0aGlzLmxvYWQoeyBpZGVudGlmaWVyLCBjb250cm9sbGVyQ29uc3RydWN0b3IgfSk7XG4gICAgfVxuICAgIHJlZ2lzdGVyQWN0aW9uT3B0aW9uKG5hbWUsIGZpbHRlcikge1xuICAgICAgICB0aGlzLmFjdGlvbkRlc2NyaXB0b3JGaWx0ZXJzW25hbWVdID0gZmlsdGVyO1xuICAgIH1cbiAgICBsb2FkKGhlYWQsIC4uLnJlc3QpIHtcbiAgICAgICAgY29uc3QgZGVmaW5pdGlvbnMgPSBBcnJheS5pc0FycmF5KGhlYWQpID8gaGVhZCA6IFtoZWFkLCAuLi5yZXN0XTtcbiAgICAgICAgZGVmaW5pdGlvbnMuZm9yRWFjaCgoZGVmaW5pdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKGRlZmluaXRpb24uY29udHJvbGxlckNvbnN0cnVjdG9yLnNob3VsZExvYWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5sb2FkRGVmaW5pdGlvbihkZWZpbml0aW9uKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVubG9hZChoZWFkLCAuLi5yZXN0KSB7XG4gICAgICAgIGNvbnN0IGlkZW50aWZpZXJzID0gQXJyYXkuaXNBcnJheShoZWFkKSA/IGhlYWQgOiBbaGVhZCwgLi4ucmVzdF07XG4gICAgICAgIGlkZW50aWZpZXJzLmZvckVhY2goKGlkZW50aWZpZXIpID0+IHRoaXMucm91dGVyLnVubG9hZElkZW50aWZpZXIoaWRlbnRpZmllcikpO1xuICAgIH1cbiAgICBnZXQgY29udHJvbGxlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvdXRlci5jb250ZXh0cy5tYXAoKGNvbnRleHQpID0+IGNvbnRleHQuY29udHJvbGxlcik7XG4gICAgfVxuICAgIGdldENvbnRyb2xsZXJGb3JFbGVtZW50QW5kSWRlbnRpZmllcihlbGVtZW50LCBpZGVudGlmaWVyKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnJvdXRlci5nZXRDb250ZXh0Rm9yRWxlbWVudEFuZElkZW50aWZpZXIoZWxlbWVudCwgaWRlbnRpZmllcik7XG4gICAgICAgIHJldHVybiBjb250ZXh0ID8gY29udGV4dC5jb250cm9sbGVyIDogbnVsbDtcbiAgICB9XG4gICAgaGFuZGxlRXJyb3IoZXJyb3IsIG1lc3NhZ2UsIGRldGFpbCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMubG9nZ2VyLmVycm9yKGAlc1xcblxcbiVvXFxuXFxuJW9gLCBtZXNzYWdlLCBlcnJvciwgZGV0YWlsKTtcbiAgICAgICAgKF9hID0gd2luZG93Lm9uZXJyb3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jYWxsKHdpbmRvdywgbWVzc2FnZSwgXCJcIiwgMCwgMCwgZXJyb3IpO1xuICAgIH1cbiAgICBsb2dGb3JtYXR0ZWRNZXNzYWdlKGlkZW50aWZpZXIsIGZ1bmN0aW9uTmFtZSwgZGV0YWlsID0ge30pIHtcbiAgICAgICAgZGV0YWlsID0gT2JqZWN0LmFzc2lnbih7IGFwcGxpY2F0aW9uOiB0aGlzIH0sIGRldGFpbCk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmdyb3VwQ29sbGFwc2VkKGAke2lkZW50aWZpZXJ9ICMke2Z1bmN0aW9uTmFtZX1gKTtcbiAgICAgICAgdGhpcy5sb2dnZXIubG9nKFwiZGV0YWlsczpcIiwgT2JqZWN0LmFzc2lnbih7fSwgZGV0YWlsKSk7XG4gICAgICAgIHRoaXMubG9nZ2VyLmdyb3VwRW5kKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gZG9tUmVhZHkoKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09IFwibG9hZGluZ1wiKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwiRE9NQ29udGVudExvYWRlZFwiLCAoKSA9PiByZXNvbHZlKCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIENsYXNzUHJvcGVydGllc0JsZXNzaW5nKGNvbnN0cnVjdG9yKSB7XG4gICAgY29uc3QgY2xhc3NlcyA9IHJlYWRJbmhlcml0YWJsZVN0YXRpY0FycmF5VmFsdWVzKGNvbnN0cnVjdG9yLCBcImNsYXNzZXNcIik7XG4gICAgcmV0dXJuIGNsYXNzZXMucmVkdWNlKChwcm9wZXJ0aWVzLCBjbGFzc0RlZmluaXRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvcGVydGllcywgcHJvcGVydGllc0ZvckNsYXNzRGVmaW5pdGlvbihjbGFzc0RlZmluaXRpb24pKTtcbiAgICB9LCB7fSk7XG59XG5mdW5jdGlvbiBwcm9wZXJ0aWVzRm9yQ2xhc3NEZWZpbml0aW9uKGtleSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIFtgJHtrZXl9Q2xhc3NgXToge1xuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgY2xhc3NlcyB9ID0gdGhpcztcbiAgICAgICAgICAgICAgICBpZiAoY2xhc3Nlcy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xhc3Nlcy5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZSA9IGNsYXNzZXMuZ2V0QXR0cmlidXRlTmFtZShrZXkpO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgYXR0cmlidXRlIFwiJHthdHRyaWJ1dGV9XCJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBbYCR7a2V5fUNsYXNzZXNgXToge1xuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNsYXNzZXMuZ2V0QWxsKGtleSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBbYGhhcyR7Y2FwaXRhbGl6ZShrZXkpfUNsYXNzYF06IHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbGFzc2VzLmhhcyhrZXkpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBPdXRsZXRQcm9wZXJ0aWVzQmxlc3NpbmcoY29uc3RydWN0b3IpIHtcbiAgICBjb25zdCBvdXRsZXRzID0gcmVhZEluaGVyaXRhYmxlU3RhdGljQXJyYXlWYWx1ZXMoY29uc3RydWN0b3IsIFwib3V0bGV0c1wiKTtcbiAgICByZXR1cm4gb3V0bGV0cy5yZWR1Y2UoKHByb3BlcnRpZXMsIG91dGxldERlZmluaXRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvcGVydGllcywgcHJvcGVydGllc0Zvck91dGxldERlZmluaXRpb24ob3V0bGV0RGVmaW5pdGlvbikpO1xuICAgIH0sIHt9KTtcbn1cbmZ1bmN0aW9uIGdldE91dGxldENvbnRyb2xsZXIoY29udHJvbGxlciwgZWxlbWVudCwgaWRlbnRpZmllcikge1xuICAgIHJldHVybiBjb250cm9sbGVyLmFwcGxpY2F0aW9uLmdldENvbnRyb2xsZXJGb3JFbGVtZW50QW5kSWRlbnRpZmllcihlbGVtZW50LCBpZGVudGlmaWVyKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRyb2xsZXJBbmRFbnN1cmVDb25uZWN0ZWRTY29wZShjb250cm9sbGVyLCBlbGVtZW50LCBvdXRsZXROYW1lKSB7XG4gICAgbGV0IG91dGxldENvbnRyb2xsZXIgPSBnZXRPdXRsZXRDb250cm9sbGVyKGNvbnRyb2xsZXIsIGVsZW1lbnQsIG91dGxldE5hbWUpO1xuICAgIGlmIChvdXRsZXRDb250cm9sbGVyKVxuICAgICAgICByZXR1cm4gb3V0bGV0Q29udHJvbGxlcjtcbiAgICBjb250cm9sbGVyLmFwcGxpY2F0aW9uLnJvdXRlci5wcm9wb3NlVG9Db25uZWN0U2NvcGVGb3JFbGVtZW50QW5kSWRlbnRpZmllcihlbGVtZW50LCBvdXRsZXROYW1lKTtcbiAgICBvdXRsZXRDb250cm9sbGVyID0gZ2V0T3V0bGV0Q29udHJvbGxlcihjb250cm9sbGVyLCBlbGVtZW50LCBvdXRsZXROYW1lKTtcbiAgICBpZiAob3V0bGV0Q29udHJvbGxlcilcbiAgICAgICAgcmV0dXJuIG91dGxldENvbnRyb2xsZXI7XG59XG5mdW5jdGlvbiBwcm9wZXJ0aWVzRm9yT3V0bGV0RGVmaW5pdGlvbihuYW1lKSB7XG4gICAgY29uc3QgY2FtZWxpemVkTmFtZSA9IG5hbWVzcGFjZUNhbWVsaXplKG5hbWUpO1xuICAgIHJldHVybiB7XG4gICAgICAgIFtgJHtjYW1lbGl6ZWROYW1lfU91dGxldGBdOiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0bGV0RWxlbWVudCA9IHRoaXMub3V0bGV0cy5maW5kKG5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5vdXRsZXRzLmdldFNlbGVjdG9yRm9yT3V0bGV0TmFtZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAob3V0bGV0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvdXRsZXRDb250cm9sbGVyID0gZ2V0Q29udHJvbGxlckFuZEVuc3VyZUNvbm5lY3RlZFNjb3BlKHRoaXMsIG91dGxldEVsZW1lbnQsIG5hbWUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAob3V0bGV0Q29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvdXRsZXRDb250cm9sbGVyO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBwcm92aWRlZCBvdXRsZXQgZWxlbWVudCBpcyBtaXNzaW5nIGFuIG91dGxldCBjb250cm9sbGVyIFwiJHtuYW1lfVwiIGluc3RhbmNlIGZvciBob3N0IGNvbnRyb2xsZXIgXCIke3RoaXMuaWRlbnRpZmllcn1cImApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3Npbmcgb3V0bGV0IGVsZW1lbnQgXCIke25hbWV9XCIgZm9yIGhvc3QgY29udHJvbGxlciBcIiR7dGhpcy5pZGVudGlmaWVyfVwiLiBTdGltdWx1cyBjb3VsZG4ndCBmaW5kIGEgbWF0Y2hpbmcgb3V0bGV0IGVsZW1lbnQgdXNpbmcgc2VsZWN0b3IgXCIke3NlbGVjdG9yfVwiLmApO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW2Ake2NhbWVsaXplZE5hbWV9T3V0bGV0c2BdOiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0bGV0cyA9IHRoaXMub3V0bGV0cy5maW5kQWxsKG5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChvdXRsZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG91dGxldHNcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKG91dGxldEVsZW1lbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG91dGxldENvbnRyb2xsZXIgPSBnZXRDb250cm9sbGVyQW5kRW5zdXJlQ29ubmVjdGVkU2NvcGUodGhpcywgb3V0bGV0RWxlbWVudCwgbmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3V0bGV0Q29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0bGV0Q29udHJvbGxlcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgVGhlIHByb3ZpZGVkIG91dGxldCBlbGVtZW50IGlzIG1pc3NpbmcgYW4gb3V0bGV0IGNvbnRyb2xsZXIgXCIke25hbWV9XCIgaW5zdGFuY2UgZm9yIGhvc3QgY29udHJvbGxlciBcIiR7dGhpcy5pZGVudGlmaWVyfVwiYCwgb3V0bGV0RWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKChjb250cm9sbGVyKSA9PiBjb250cm9sbGVyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW2Ake2NhbWVsaXplZE5hbWV9T3V0bGV0RWxlbWVudGBdOiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3V0bGV0RWxlbWVudCA9IHRoaXMub3V0bGV0cy5maW5kKG5hbWUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdG9yID0gdGhpcy5vdXRsZXRzLmdldFNlbGVjdG9yRm9yT3V0bGV0TmFtZShuYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAob3V0bGV0RWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb3V0bGV0RWxlbWVudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBvdXRsZXQgZWxlbWVudCBcIiR7bmFtZX1cIiBmb3IgaG9zdCBjb250cm9sbGVyIFwiJHt0aGlzLmlkZW50aWZpZXJ9XCIuIFN0aW11bHVzIGNvdWxkbid0IGZpbmQgYSBtYXRjaGluZyBvdXRsZXQgZWxlbWVudCB1c2luZyBzZWxlY3RvciBcIiR7c2VsZWN0b3J9XCIuYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW2Ake2NhbWVsaXplZE5hbWV9T3V0bGV0RWxlbWVudHNgXToge1xuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLm91dGxldHMuZmluZEFsbChuYW1lKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIFtgaGFzJHtjYXBpdGFsaXplKGNhbWVsaXplZE5hbWUpfU91dGxldGBdOiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMub3V0bGV0cy5oYXMobmFtZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG59XG5cbmZ1bmN0aW9uIFRhcmdldFByb3BlcnRpZXNCbGVzc2luZyhjb25zdHJ1Y3Rvcikge1xuICAgIGNvbnN0IHRhcmdldHMgPSByZWFkSW5oZXJpdGFibGVTdGF0aWNBcnJheVZhbHVlcyhjb25zdHJ1Y3RvciwgXCJ0YXJnZXRzXCIpO1xuICAgIHJldHVybiB0YXJnZXRzLnJlZHVjZSgocHJvcGVydGllcywgdGFyZ2V0RGVmaW5pdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzRm9yVGFyZ2V0RGVmaW5pdGlvbih0YXJnZXREZWZpbml0aW9uKSk7XG4gICAgfSwge30pO1xufVxuZnVuY3Rpb24gcHJvcGVydGllc0ZvclRhcmdldERlZmluaXRpb24obmFtZSkge1xuICAgIHJldHVybiB7XG4gICAgICAgIFtgJHtuYW1lfVRhcmdldGBdOiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy50YXJnZXRzLmZpbmQobmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIHRhcmdldCBlbGVtZW50IFwiJHtuYW1lfVwiIGZvciBcIiR7dGhpcy5pZGVudGlmaWVyfVwiIGNvbnRyb2xsZXJgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBbYCR7bmFtZX1UYXJnZXRzYF06IHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50YXJnZXRzLmZpbmRBbGwobmFtZSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICBbYGhhcyR7Y2FwaXRhbGl6ZShuYW1lKX1UYXJnZXRgXToge1xuICAgICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnRhcmdldHMuaGFzKG5hbWUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuXG5mdW5jdGlvbiBWYWx1ZVByb3BlcnRpZXNCbGVzc2luZyhjb25zdHJ1Y3Rvcikge1xuICAgIGNvbnN0IHZhbHVlRGVmaW5pdGlvblBhaXJzID0gcmVhZEluaGVyaXRhYmxlU3RhdGljT2JqZWN0UGFpcnMoY29uc3RydWN0b3IsIFwidmFsdWVzXCIpO1xuICAgIGNvbnN0IHByb3BlcnR5RGVzY3JpcHRvck1hcCA9IHtcbiAgICAgICAgdmFsdWVEZXNjcmlwdG9yTWFwOiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlRGVmaW5pdGlvblBhaXJzLnJlZHVjZSgocmVzdWx0LCB2YWx1ZURlZmluaXRpb25QYWlyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlRGVzY3JpcHRvciA9IHBhcnNlVmFsdWVEZWZpbml0aW9uUGFpcih2YWx1ZURlZmluaXRpb25QYWlyLCB0aGlzLmlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdHRyaWJ1dGVOYW1lID0gdGhpcy5kYXRhLmdldEF0dHJpYnV0ZU5hbWVGb3JLZXkodmFsdWVEZXNjcmlwdG9yLmtleSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlc3VsdCwgeyBbYXR0cmlidXRlTmFtZV06IHZhbHVlRGVzY3JpcHRvciB9KTtcbiAgICAgICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIH07XG4gICAgcmV0dXJuIHZhbHVlRGVmaW5pdGlvblBhaXJzLnJlZHVjZSgocHJvcGVydGllcywgdmFsdWVEZWZpbml0aW9uUGFpcikgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzRm9yVmFsdWVEZWZpbml0aW9uUGFpcih2YWx1ZURlZmluaXRpb25QYWlyKSk7XG4gICAgfSwgcHJvcGVydHlEZXNjcmlwdG9yTWFwKTtcbn1cbmZ1bmN0aW9uIHByb3BlcnRpZXNGb3JWYWx1ZURlZmluaXRpb25QYWlyKHZhbHVlRGVmaW5pdGlvblBhaXIsIGNvbnRyb2xsZXIpIHtcbiAgICBjb25zdCBkZWZpbml0aW9uID0gcGFyc2VWYWx1ZURlZmluaXRpb25QYWlyKHZhbHVlRGVmaW5pdGlvblBhaXIsIGNvbnRyb2xsZXIpO1xuICAgIGNvbnN0IHsga2V5LCBuYW1lLCByZWFkZXI6IHJlYWQsIHdyaXRlcjogd3JpdGUgfSA9IGRlZmluaXRpb247XG4gICAgcmV0dXJuIHtcbiAgICAgICAgW25hbWVdOiB7XG4gICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRhdGEuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWFkKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kYXRhLnNldChrZXksIHdyaXRlKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgW2BoYXMke2NhcGl0YWxpemUobmFtZSl9YF06IHtcbiAgICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmhhcyhrZXkpIHx8IGRlZmluaXRpb24uaGFzQ3VzdG9tRGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICB9O1xufVxuZnVuY3Rpb24gcGFyc2VWYWx1ZURlZmluaXRpb25QYWlyKFt0b2tlbiwgdHlwZURlZmluaXRpb25dLCBjb250cm9sbGVyKSB7XG4gICAgcmV0dXJuIHZhbHVlRGVzY3JpcHRvckZvclRva2VuQW5kVHlwZURlZmluaXRpb24oe1xuICAgICAgICBjb250cm9sbGVyLFxuICAgICAgICB0b2tlbixcbiAgICAgICAgdHlwZURlZmluaXRpb24sXG4gICAgfSk7XG59XG5mdW5jdGlvbiBwYXJzZVZhbHVlVHlwZUNvbnN0YW50KGNvbnN0YW50KSB7XG4gICAgc3dpdGNoIChjb25zdGFudCkge1xuICAgICAgICBjYXNlIEFycmF5OlxuICAgICAgICAgICAgcmV0dXJuIFwiYXJyYXlcIjtcbiAgICAgICAgY2FzZSBCb29sZWFuOlxuICAgICAgICAgICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICAgICAgICBjYXNlIE51bWJlcjpcbiAgICAgICAgICAgIHJldHVybiBcIm51bWJlclwiO1xuICAgICAgICBjYXNlIE9iamVjdDpcbiAgICAgICAgICAgIHJldHVybiBcIm9iamVjdFwiO1xuICAgICAgICBjYXNlIFN0cmluZzpcbiAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHBhcnNlVmFsdWVUeXBlRGVmYXVsdChkZWZhdWx0VmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBkZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIH1cbiAgICBpZiAoQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpKVxuICAgICAgICByZXR1cm4gXCJhcnJheVwiO1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZGVmYXVsdFZhbHVlKSA9PT0gXCJbb2JqZWN0IE9iamVjdF1cIilcbiAgICAgICAgcmV0dXJuIFwib2JqZWN0XCI7XG59XG5mdW5jdGlvbiBwYXJzZVZhbHVlVHlwZU9iamVjdChwYXlsb2FkKSB7XG4gICAgY29uc3QgeyBjb250cm9sbGVyLCB0b2tlbiwgdHlwZU9iamVjdCB9ID0gcGF5bG9hZDtcbiAgICBjb25zdCBoYXNUeXBlID0gaXNTb21ldGhpbmcodHlwZU9iamVjdC50eXBlKTtcbiAgICBjb25zdCBoYXNEZWZhdWx0ID0gaXNTb21ldGhpbmcodHlwZU9iamVjdC5kZWZhdWx0KTtcbiAgICBjb25zdCBmdWxsT2JqZWN0ID0gaGFzVHlwZSAmJiBoYXNEZWZhdWx0O1xuICAgIGNvbnN0IG9ubHlUeXBlID0gaGFzVHlwZSAmJiAhaGFzRGVmYXVsdDtcbiAgICBjb25zdCBvbmx5RGVmYXVsdCA9ICFoYXNUeXBlICYmIGhhc0RlZmF1bHQ7XG4gICAgY29uc3QgdHlwZUZyb21PYmplY3QgPSBwYXJzZVZhbHVlVHlwZUNvbnN0YW50KHR5cGVPYmplY3QudHlwZSk7XG4gICAgY29uc3QgdHlwZUZyb21EZWZhdWx0VmFsdWUgPSBwYXJzZVZhbHVlVHlwZURlZmF1bHQocGF5bG9hZC50eXBlT2JqZWN0LmRlZmF1bHQpO1xuICAgIGlmIChvbmx5VHlwZSlcbiAgICAgICAgcmV0dXJuIHR5cGVGcm9tT2JqZWN0O1xuICAgIGlmIChvbmx5RGVmYXVsdClcbiAgICAgICAgcmV0dXJuIHR5cGVGcm9tRGVmYXVsdFZhbHVlO1xuICAgIGlmICh0eXBlRnJvbU9iamVjdCAhPT0gdHlwZUZyb21EZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgY29uc3QgcHJvcGVydHlQYXRoID0gY29udHJvbGxlciA/IGAke2NvbnRyb2xsZXJ9LiR7dG9rZW59YCA6IHRva2VuO1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzcGVjaWZpZWQgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlIFN0aW11bHVzIFZhbHVlIFwiJHtwcm9wZXJ0eVBhdGh9XCIgbXVzdCBtYXRjaCB0aGUgZGVmaW5lZCB0eXBlIFwiJHt0eXBlRnJvbU9iamVjdH1cIi4gVGhlIHByb3ZpZGVkIGRlZmF1bHQgdmFsdWUgb2YgXCIke3R5cGVPYmplY3QuZGVmYXVsdH1cIiBpcyBvZiB0eXBlIFwiJHt0eXBlRnJvbURlZmF1bHRWYWx1ZX1cIi5gKTtcbiAgICB9XG4gICAgaWYgKGZ1bGxPYmplY3QpXG4gICAgICAgIHJldHVybiB0eXBlRnJvbU9iamVjdDtcbn1cbmZ1bmN0aW9uIHBhcnNlVmFsdWVUeXBlRGVmaW5pdGlvbihwYXlsb2FkKSB7XG4gICAgY29uc3QgeyBjb250cm9sbGVyLCB0b2tlbiwgdHlwZURlZmluaXRpb24gfSA9IHBheWxvYWQ7XG4gICAgY29uc3QgdHlwZU9iamVjdCA9IHsgY29udHJvbGxlciwgdG9rZW4sIHR5cGVPYmplY3Q6IHR5cGVEZWZpbml0aW9uIH07XG4gICAgY29uc3QgdHlwZUZyb21PYmplY3QgPSBwYXJzZVZhbHVlVHlwZU9iamVjdCh0eXBlT2JqZWN0KTtcbiAgICBjb25zdCB0eXBlRnJvbURlZmF1bHRWYWx1ZSA9IHBhcnNlVmFsdWVUeXBlRGVmYXVsdCh0eXBlRGVmaW5pdGlvbik7XG4gICAgY29uc3QgdHlwZUZyb21Db25zdGFudCA9IHBhcnNlVmFsdWVUeXBlQ29uc3RhbnQodHlwZURlZmluaXRpb24pO1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlRnJvbU9iamVjdCB8fCB0eXBlRnJvbURlZmF1bHRWYWx1ZSB8fCB0eXBlRnJvbUNvbnN0YW50O1xuICAgIGlmICh0eXBlKVxuICAgICAgICByZXR1cm4gdHlwZTtcbiAgICBjb25zdCBwcm9wZXJ0eVBhdGggPSBjb250cm9sbGVyID8gYCR7Y29udHJvbGxlcn0uJHt0eXBlRGVmaW5pdGlvbn1gIDogdG9rZW47XG4gICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHZhbHVlIHR5cGUgXCIke3Byb3BlcnR5UGF0aH1cIiBmb3IgXCIke3Rva2VufVwiIHZhbHVlYCk7XG59XG5mdW5jdGlvbiBkZWZhdWx0VmFsdWVGb3JEZWZpbml0aW9uKHR5cGVEZWZpbml0aW9uKSB7XG4gICAgY29uc3QgY29uc3RhbnQgPSBwYXJzZVZhbHVlVHlwZUNvbnN0YW50KHR5cGVEZWZpbml0aW9uKTtcbiAgICBpZiAoY29uc3RhbnQpXG4gICAgICAgIHJldHVybiBkZWZhdWx0VmFsdWVzQnlUeXBlW2NvbnN0YW50XTtcbiAgICBjb25zdCBoYXNEZWZhdWx0ID0gaGFzUHJvcGVydHkodHlwZURlZmluaXRpb24sIFwiZGVmYXVsdFwiKTtcbiAgICBjb25zdCBoYXNUeXBlID0gaGFzUHJvcGVydHkodHlwZURlZmluaXRpb24sIFwidHlwZVwiKTtcbiAgICBjb25zdCB0eXBlT2JqZWN0ID0gdHlwZURlZmluaXRpb247XG4gICAgaWYgKGhhc0RlZmF1bHQpXG4gICAgICAgIHJldHVybiB0eXBlT2JqZWN0LmRlZmF1bHQ7XG4gICAgaWYgKGhhc1R5cGUpIHtcbiAgICAgICAgY29uc3QgeyB0eXBlIH0gPSB0eXBlT2JqZWN0O1xuICAgICAgICBjb25zdCBjb25zdGFudEZyb21UeXBlID0gcGFyc2VWYWx1ZVR5cGVDb25zdGFudCh0eXBlKTtcbiAgICAgICAgaWYgKGNvbnN0YW50RnJvbVR5cGUpXG4gICAgICAgICAgICByZXR1cm4gZGVmYXVsdFZhbHVlc0J5VHlwZVtjb25zdGFudEZyb21UeXBlXTtcbiAgICB9XG4gICAgcmV0dXJuIHR5cGVEZWZpbml0aW9uO1xufVxuZnVuY3Rpb24gdmFsdWVEZXNjcmlwdG9yRm9yVG9rZW5BbmRUeXBlRGVmaW5pdGlvbihwYXlsb2FkKSB7XG4gICAgY29uc3QgeyB0b2tlbiwgdHlwZURlZmluaXRpb24gfSA9IHBheWxvYWQ7XG4gICAgY29uc3Qga2V5ID0gYCR7ZGFzaGVyaXplKHRva2VuKX0tdmFsdWVgO1xuICAgIGNvbnN0IHR5cGUgPSBwYXJzZVZhbHVlVHlwZURlZmluaXRpb24ocGF5bG9hZCk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAga2V5LFxuICAgICAgICBuYW1lOiBjYW1lbGl6ZShrZXkpLFxuICAgICAgICBnZXQgZGVmYXVsdFZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRWYWx1ZUZvckRlZmluaXRpb24odHlwZURlZmluaXRpb24pO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaGFzQ3VzdG9tRGVmYXVsdFZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlVmFsdWVUeXBlRGVmYXVsdCh0eXBlRGVmaW5pdGlvbikgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgfSxcbiAgICAgICAgcmVhZGVyOiByZWFkZXJzW3R5cGVdLFxuICAgICAgICB3cml0ZXI6IHdyaXRlcnNbdHlwZV0gfHwgd3JpdGVycy5kZWZhdWx0LFxuICAgIH07XG59XG5jb25zdCBkZWZhdWx0VmFsdWVzQnlUeXBlID0ge1xuICAgIGdldCBhcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIFtdO1xuICAgIH0sXG4gICAgYm9vbGVhbjogZmFsc2UsXG4gICAgbnVtYmVyOiAwLFxuICAgIGdldCBvYmplY3QoKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9LFxuICAgIHN0cmluZzogXCJcIixcbn07XG5jb25zdCByZWFkZXJzID0ge1xuICAgIGFycmF5KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gSlNPTi5wYXJzZSh2YWx1ZSk7XG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShhcnJheSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYGV4cGVjdGVkIHZhbHVlIG9mIHR5cGUgXCJhcnJheVwiIGJ1dCBpbnN0ZWFkIGdvdCB2YWx1ZSBcIiR7dmFsdWV9XCIgb2YgdHlwZSBcIiR7cGFyc2VWYWx1ZVR5cGVEZWZhdWx0KGFycmF5KX1cImApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9LFxuICAgIGJvb2xlYW4odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICEodmFsdWUgPT0gXCIwXCIgfHwgU3RyaW5nKHZhbHVlKS50b0xvd2VyQ2FzZSgpID09IFwiZmFsc2VcIik7XG4gICAgfSxcbiAgICBudW1iZXIodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIE51bWJlcih2YWx1ZS5yZXBsYWNlKC9fL2csIFwiXCIpKTtcbiAgICB9LFxuICAgIG9iamVjdCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBvYmplY3QgPSBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICAgICAgaWYgKG9iamVjdCA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqZWN0ICE9IFwib2JqZWN0XCIgfHwgQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBleHBlY3RlZCB2YWx1ZSBvZiB0eXBlIFwib2JqZWN0XCIgYnV0IGluc3RlYWQgZ290IHZhbHVlIFwiJHt2YWx1ZX1cIiBvZiB0eXBlIFwiJHtwYXJzZVZhbHVlVHlwZURlZmF1bHQob2JqZWN0KX1cImApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmplY3Q7XG4gICAgfSxcbiAgICBzdHJpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0sXG59O1xuY29uc3Qgd3JpdGVycyA9IHtcbiAgICBkZWZhdWx0OiB3cml0ZVN0cmluZyxcbiAgICBhcnJheTogd3JpdGVKU09OLFxuICAgIG9iamVjdDogd3JpdGVKU09OLFxufTtcbmZ1bmN0aW9uIHdyaXRlSlNPTih2YWx1ZSkge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG59XG5mdW5jdGlvbiB3cml0ZVN0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiBgJHt2YWx1ZX1gO1xufVxuXG5jbGFzcyBDb250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3Rvcihjb250ZXh0KSB7XG4gICAgICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG4gICAgfVxuICAgIHN0YXRpYyBnZXQgc2hvdWxkTG9hZCgpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHN0YXRpYyBhZnRlckxvYWQoX2lkZW50aWZpZXIsIF9hcHBsaWNhdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGdldCBhcHBsaWNhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5hcHBsaWNhdGlvbjtcbiAgICB9XG4gICAgZ2V0IHNjb3BlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250ZXh0LnNjb3BlO1xuICAgIH1cbiAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGUuZWxlbWVudDtcbiAgICB9XG4gICAgZ2V0IGlkZW50aWZpZXIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjb3BlLmlkZW50aWZpZXI7XG4gICAgfVxuICAgIGdldCB0YXJnZXRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY29wZS50YXJnZXRzO1xuICAgIH1cbiAgICBnZXQgb3V0bGV0cygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2NvcGUub3V0bGV0cztcbiAgICB9XG4gICAgZ2V0IGNsYXNzZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjb3BlLmNsYXNzZXM7XG4gICAgfVxuICAgIGdldCBkYXRhKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zY29wZS5kYXRhO1xuICAgIH1cbiAgICBpbml0aWFsaXplKCkge1xuICAgIH1cbiAgICBjb25uZWN0KCkge1xuICAgIH1cbiAgICBkaXNjb25uZWN0KCkge1xuICAgIH1cbiAgICBkaXNwYXRjaChldmVudE5hbWUsIHsgdGFyZ2V0ID0gdGhpcy5lbGVtZW50LCBkZXRhaWwgPSB7fSwgcHJlZml4ID0gdGhpcy5pZGVudGlmaWVyLCBidWJibGVzID0gdHJ1ZSwgY2FuY2VsYWJsZSA9IHRydWUsIH0gPSB7fSkge1xuICAgICAgICBjb25zdCB0eXBlID0gcHJlZml4ID8gYCR7cHJlZml4fToke2V2ZW50TmFtZX1gIDogZXZlbnROYW1lO1xuICAgICAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCh0eXBlLCB7IGRldGFpbCwgYnViYmxlcywgY2FuY2VsYWJsZSB9KTtcbiAgICAgICAgdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZXZlbnQpO1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfVxufVxuQ29udHJvbGxlci5ibGVzc2luZ3MgPSBbXG4gICAgQ2xhc3NQcm9wZXJ0aWVzQmxlc3NpbmcsXG4gICAgVGFyZ2V0UHJvcGVydGllc0JsZXNzaW5nLFxuICAgIFZhbHVlUHJvcGVydGllc0JsZXNzaW5nLFxuICAgIE91dGxldFByb3BlcnRpZXNCbGVzc2luZyxcbl07XG5Db250cm9sbGVyLnRhcmdldHMgPSBbXTtcbkNvbnRyb2xsZXIub3V0bGV0cyA9IFtdO1xuQ29udHJvbGxlci52YWx1ZXMgPSB7fTtcblxuZXhwb3J0IHsgQXBwbGljYXRpb24sIEF0dHJpYnV0ZU9ic2VydmVyLCBDb250ZXh0LCBDb250cm9sbGVyLCBFbGVtZW50T2JzZXJ2ZXIsIEluZGV4ZWRNdWx0aW1hcCwgTXVsdGltYXAsIFNlbGVjdG9yT2JzZXJ2ZXIsIFN0cmluZ01hcE9ic2VydmVyLCBUb2tlbkxpc3RPYnNlcnZlciwgVmFsdWVMaXN0T2JzZXJ2ZXIsIGFkZCwgZGVmYXVsdFNjaGVtYSwgZGVsLCBmZXRjaCwgcHJ1bmUgfTtcbiIsIi8vIEltcG9ydHNcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi8uLi9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLmZsYXRwaWNrci1jYWxlbmRhciB7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBvcGFjaXR5OiAwO1xuICBkaXNwbGF5OiBub25lO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgcGFkZGluZzogMDtcbiAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7XG4gICAgICAgICAgYW5pbWF0aW9uOiBub25lO1xuICBkaXJlY3Rpb246IGx0cjtcbiAgYm9yZGVyOiAwO1xuICBmb250LXNpemU6IDE0cHg7XG4gIGxpbmUtaGVpZ2h0OiAyNHB4O1xuICBib3JkZXItcmFkaXVzOiA1cHg7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgd2lkdGg6IDMwNy44NzVweDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC1tcy10b3VjaC1hY3Rpb246IG1hbmlwdWxhdGlvbjtcbiAgICAgIHRvdWNoLWFjdGlvbjogbWFuaXB1bGF0aW9uO1xuICBiYWNrZ3JvdW5kOiAjZmZmO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IDFweCAwIDAgI2U2ZTZlNiwgLTFweCAwIDAgI2U2ZTZlNiwgMCAxcHggMCAjZTZlNmU2LCAwIC0xcHggMCAjZTZlNmU2LCAwIDNweCAxM3B4IHJnYmEoMCwwLDAsMC4wOCk7XG4gICAgICAgICAgYm94LXNoYWRvdzogMXB4IDAgMCAjZTZlNmU2LCAtMXB4IDAgMCAjZTZlNmU2LCAwIDFweCAwICNlNmU2ZTYsIDAgLTFweCAwICNlNmU2ZTYsIDAgM3B4IDEzcHggcmdiYSgwLDAsMCwwLjA4KTtcbn1cbi5mbGF0cGlja3ItY2FsZW5kYXIub3Blbixcbi5mbGF0cGlja3ItY2FsZW5kYXIuaW5saW5lIHtcbiAgb3BhY2l0eTogMTtcbiAgbWF4LWhlaWdodDogNjQwcHg7XG4gIHZpc2liaWxpdHk6IHZpc2libGU7XG59XG4uZmxhdHBpY2tyLWNhbGVuZGFyLm9wZW4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHotaW5kZXg6IDk5OTk5O1xufVxuLmZsYXRwaWNrci1jYWxlbmRhci5hbmltYXRlLm9wZW4ge1xuICAtd2Via2l0LWFuaW1hdGlvbjogZnBGYWRlSW5Eb3duIDMwMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcbiAgICAgICAgICBhbmltYXRpb246IGZwRmFkZUluRG93biAzMDBtcyBjdWJpYy1iZXppZXIoMC4yMywgMSwgMC4zMiwgMSk7XG59XG4uZmxhdHBpY2tyLWNhbGVuZGFyLmlubGluZSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogMnB4O1xufVxuLmZsYXRwaWNrci1jYWxlbmRhci5zdGF0aWMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogY2FsYygxMDAlICsgMnB4KTtcbn1cbi5mbGF0cGlja3ItY2FsZW5kYXIuc3RhdGljLm9wZW4ge1xuICB6LWluZGV4OiA5OTk7XG4gIGRpc3BsYXk6IGJsb2NrO1xufVxuLmZsYXRwaWNrci1jYWxlbmRhci5tdWx0aU1vbnRoIC5mbGF0cGlja3ItZGF5cyAuZGF5Q29udGFpbmVyOm50aC1jaGlsZChuKzEpIC5mbGF0cGlja3ItZGF5LmluUmFuZ2U6bnRoLWNoaWxkKDduKzcpIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lICFpbXBvcnRhbnQ7XG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xufVxuLmZsYXRwaWNrci1jYWxlbmRhci5tdWx0aU1vbnRoIC5mbGF0cGlja3ItZGF5cyAuZGF5Q29udGFpbmVyOm50aC1jaGlsZChuKzIpIC5mbGF0cGlja3ItZGF5LmluUmFuZ2U6bnRoLWNoaWxkKDduKzEpIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAtMnB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XG4gICAgICAgICAgYm94LXNoYWRvdzogLTJweCAwIDAgI2U2ZTZlNiwgNXB4IDAgMCAjZTZlNmU2O1xufVxuLmZsYXRwaWNrci1jYWxlbmRhciAuaGFzV2Vla3MgLmRheUNvbnRhaW5lcixcbi5mbGF0cGlja3ItY2FsZW5kYXIgLmhhc1RpbWUgLmRheUNvbnRhaW5lciB7XG4gIGJvcmRlci1ib3R0b206IDA7XG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xufVxuLmZsYXRwaWNrci1jYWxlbmRhciAuaGFzV2Vla3MgLmRheUNvbnRhaW5lciB7XG4gIGJvcmRlci1sZWZ0OiAwO1xufVxuLmZsYXRwaWNrci1jYWxlbmRhci5oYXNUaW1lIC5mbGF0cGlja3ItdGltZSB7XG4gIGhlaWdodDogNDBweDtcbiAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNlNmU2ZTY7XG59XG4uZmxhdHBpY2tyLWNhbGVuZGFyLm5vQ2FsZW5kYXIuaGFzVGltZSAuZmxhdHBpY2tyLXRpbWUge1xuICBoZWlnaHQ6IGF1dG87XG59XG4uZmxhdHBpY2tyLWNhbGVuZGFyOmJlZm9yZSxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YWZ0ZXIge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgYm9yZGVyOiBzb2xpZCB0cmFuc3BhcmVudDtcbiAgY29udGVudDogJyc7XG4gIGhlaWdodDogMDtcbiAgd2lkdGg6IDA7XG4gIGxlZnQ6IDIycHg7XG59XG4uZmxhdHBpY2tyLWNhbGVuZGFyLnJpZ2h0TW9zdDpiZWZvcmUsXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93UmlnaHQ6YmVmb3JlLFxuLmZsYXRwaWNrci1jYWxlbmRhci5yaWdodE1vc3Q6YWZ0ZXIsXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93UmlnaHQ6YWZ0ZXIge1xuICBsZWZ0OiBhdXRvO1xuICByaWdodDogMjJweDtcbn1cbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dDZW50ZXI6YmVmb3JlLFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0NlbnRlcjphZnRlciB7XG4gIGxlZnQ6IDUwJTtcbiAgcmlnaHQ6IDUwJTtcbn1cbi5mbGF0cGlja3ItY2FsZW5kYXI6YmVmb3JlIHtcbiAgYm9yZGVyLXdpZHRoOiA1cHg7XG4gIG1hcmdpbjogMCAtNXB4O1xufVxuLmZsYXRwaWNrci1jYWxlbmRhcjphZnRlciB7XG4gIGJvcmRlci13aWR0aDogNHB4O1xuICBtYXJnaW46IDAgLTRweDtcbn1cbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YmVmb3JlLFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1RvcDphZnRlciB7XG4gIGJvdHRvbTogMTAwJTtcbn1cbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YmVmb3JlIHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2U2ZTZlNjtcbn1cbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YWZ0ZXIge1xuICBib3JkZXItYm90dG9tLWNvbG9yOiAjZmZmO1xufVxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTpiZWZvcmUsXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Qm90dG9tOmFmdGVyIHtcbiAgdG9wOiAxMDAlO1xufVxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTpiZWZvcmUge1xuICBib3JkZXItdG9wLWNvbG9yOiAjZTZlNmU2O1xufVxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTphZnRlciB7XG4gIGJvcmRlci10b3AtY29sb3I6ICNmZmY7XG59XG4uZmxhdHBpY2tyLWNhbGVuZGFyOmZvY3VzIHtcbiAgb3V0bGluZTogMDtcbn1cbi5mbGF0cGlja3Itd3JhcHBlciB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xufVxuLmZsYXRwaWNrci1tb250aHMge1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbn1cbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbW9udGgge1xuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC45KTtcbiAgZmlsbDogcmdiYSgwLDAsMCwwLjkpO1xuICBoZWlnaHQ6IDM0cHg7XG4gIGxpbmUtaGVpZ2h0OiAxO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcbiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgLXdlYmtpdC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbn1cbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aCxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aCB7XG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgIC1tb3otdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHRvcDogMDtcbiAgaGVpZ2h0OiAzNHB4O1xuICBwYWRkaW5nOiAxMHB4O1xuICB6LWluZGV4OiAzO1xuICBjb2xvcjogcmdiYSgwLDAsMCwwLjkpO1xuICBmaWxsOiByZ2JhKDAsMCwwLDAuOSk7XG59XG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGguZmxhdHBpY2tyLWRpc2FibGVkLFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoLmZsYXRwaWNrci1kaXNhYmxlZCB7XG4gIGRpc3BsYXk6IG5vbmU7XG59XG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGggaSxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aCBpIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLmZsYXRwaWNrci1wcmV2LW1vbnRoLFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoLmZsYXRwaWNrci1wcmV2LW1vbnRoIHtcbi8qXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xuLypcbiAgICAgICovXG4gIGxlZnQ6IDA7XG4vKlxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXG4vKlxuICAgICAgKi9cbn1cbi8qXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xuLypcbiAgICAgIC8qcnRsOmVuZDppZ25vcmUqL1xuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLmZsYXRwaWNrci1uZXh0LW1vbnRoLFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoLmZsYXRwaWNrci1uZXh0LW1vbnRoIHtcbi8qXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xuLypcbiAgICAgICovXG4gIHJpZ2h0OiAwO1xuLypcbiAgICAgIC8qcnRsOmVuZDppZ25vcmUqL1xuLypcbiAgICAgICovXG59XG4vKlxuICAgICAgLypydGw6YmVnaW46aWdub3JlKi9cbi8qXG4gICAgICAvKnJ0bDplbmQ6aWdub3JlKi9cbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItcHJldi1tb250aDpob3Zlcixcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aDpob3ZlciB7XG4gIGNvbG9yOiAjOTU5ZWE5O1xufVxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoOmhvdmVyIHN2Zyxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aDpob3ZlciBzdmcge1xuICBmaWxsOiAjZjY0NzQ3O1xufVxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoIHN2Zyxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aCBzdmcge1xuICB3aWR0aDogMTRweDtcbiAgaGVpZ2h0OiAxNHB4O1xufVxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoIHN2ZyBwYXRoLFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIHN2ZyBwYXRoIHtcbiAgLXdlYmtpdC10cmFuc2l0aW9uOiBmaWxsIDAuMXM7XG4gIHRyYW5zaXRpb246IGZpbGwgMC4xcztcbiAgZmlsbDogaW5oZXJpdDtcbn1cbi5udW1JbnB1dFdyYXBwZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogYXV0bztcbn1cbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQsXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4ge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4ubnVtSW5wdXRXcmFwcGVyIGlucHV0IHtcbiAgd2lkdGg6IDEwMCU7XG59XG4ubnVtSW5wdXRXcmFwcGVyIGlucHV0OjotbXMtY2xlYXIge1xuICBkaXNwbGF5OiBub25lO1xufVxuLm51bUlucHV0V3JhcHBlciBpbnB1dDo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbixcbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24ge1xuICBtYXJnaW46IDA7XG4gIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbn1cbi5udW1JbnB1dFdyYXBwZXIgc3BhbiB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgcmlnaHQ6IDA7XG4gIHdpZHRoOiAxNHB4O1xuICBwYWRkaW5nOiAwIDRweCAwIDJweDtcbiAgaGVpZ2h0OiA1MCU7XG4gIGxpbmUtaGVpZ2h0OiA1MCU7XG4gIG9wYWNpdHk6IDA7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg1Nyw1Nyw1NywwLjE1KTtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG4ubnVtSW5wdXRXcmFwcGVyIHNwYW46aG92ZXIge1xuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMSk7XG59XG4ubnVtSW5wdXRXcmFwcGVyIHNwYW46YWN0aXZlIHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjIpO1xufVxuLm51bUlucHV0V3JhcHBlciBzcGFuOmFmdGVyIHtcbiAgZGlzcGxheTogYmxvY2s7XG4gIGNvbnRlbnQ6IFwiXCI7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbn1cbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1VwIHtcbiAgdG9wOiAwO1xuICBib3JkZXItYm90dG9tOiAwO1xufVxuLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93VXA6YWZ0ZXIge1xuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xuICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWJvdHRvbTogNHB4IHNvbGlkIHJnYmEoNTcsNTcsNTcsMC42KTtcbiAgdG9wOiAyNiU7XG59XG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duIHtcbiAgdG9wOiA1MCU7XG59XG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duOmFmdGVyIHtcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci10b3A6IDRweCBzb2xpZCByZ2JhKDU3LDU3LDU3LDAuNik7XG4gIHRvcDogNDAlO1xufVxuLm51bUlucHV0V3JhcHBlciBzcGFuIHN2ZyB7XG4gIHdpZHRoOiBpbmhlcml0O1xuICBoZWlnaHQ6IGF1dG87XG59XG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4gc3ZnIHBhdGgge1xuICBmaWxsOiByZ2JhKDAsMCwwLDAuNSk7XG59XG4ubnVtSW5wdXRXcmFwcGVyOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA1KTtcbn1cbi5udW1JbnB1dFdyYXBwZXI6aG92ZXIgc3BhbiB7XG4gIG9wYWNpdHk6IDE7XG59XG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGgge1xuICBmb250LXNpemU6IDEzNSU7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICBmb250LXdlaWdodDogMzAwO1xuICBjb2xvcjogaW5oZXJpdDtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB3aWR0aDogNzUlO1xuICBsZWZ0OiAxMi41JTtcbiAgcGFkZGluZzogNy40OHB4IDAgMCAwO1xuICBsaW5lLWhlaWdodDogMTtcbiAgaGVpZ2h0OiAzNHB4O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgMHB4LCAwcHgpO1xuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCk7XG59XG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggc3Bhbi5jdXItbW9udGgge1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC13ZWlnaHQ6IDcwMDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgbWFyZ2luLWxlZnQ6IDAuNWNoO1xuICBwYWRkaW5nOiAwO1xufVxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIHNwYW4uY3VyLW1vbnRoOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA1KTtcbn1cbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHtcbiAgd2lkdGg6IDZjaDtcbiAgd2lkdGg6IDdjaFxcXFwwO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG59XG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93VXA6YWZ0ZXIge1xuICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDAsMCwwLDAuOSk7XG59XG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggLm51bUlucHV0V3JhcHBlciBzcGFuLmFycm93RG93bjphZnRlciB7XG4gIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwwLDAsMC45KTtcbn1cbi5mbGF0cGlja3ItY3VycmVudC1tb250aCBpbnB1dC5jdXIteWVhciB7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGN1cnNvcjogdGV4dDtcbiAgcGFkZGluZzogMCAwIDAgMC41Y2g7XG4gIG1hcmdpbjogMDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBmb250LXNpemU6IGluaGVyaXQ7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xuICBmb250LXdlaWdodDogMzAwO1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbn1cbi5mbGF0cGlja3ItY3VycmVudC1tb250aCBpbnB1dC5jdXIteWVhcjpmb2N1cyB7XG4gIG91dGxpbmU6IDA7XG59XG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGggaW5wdXQuY3VyLXllYXJbZGlzYWJsZWRdLFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyW2Rpc2FibGVkXTpob3ZlciB7XG4gIGZvbnQtc2l6ZTogMTAwJTtcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC41KTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xufVxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHMge1xuICBhcHBlYXJhbmNlOiBtZW51bGlzdDtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGJvcmRlcjogbm9uZTtcbiAgYm9yZGVyLXJhZGl1czogMDtcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgY29sb3I6IGluaGVyaXQ7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC1zaXplOiBpbmhlcml0O1xuICBmb250LWZhbWlseTogaW5oZXJpdDtcbiAgZm9udC13ZWlnaHQ6IDMwMDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgbWFyZ2luOiAtMXB4IDAgMCAwO1xuICBvdXRsaW5lOiBub25lO1xuICBwYWRkaW5nOiAwIDAgMCAwLjVjaDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB2ZXJ0aWNhbC1hbGlnbjogaW5pdGlhbDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG1lbnVsaXN0O1xuICAtbW96LWFwcGVhcmFuY2U6IG1lbnVsaXN0O1xuICB3aWR0aDogYXV0bztcbn1cbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzOmZvY3VzLFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6YWN0aXZlIHtcbiAgb3V0bGluZTogbm9uZTtcbn1cbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzOmhvdmVyIHtcbiAgYmFja2dyb3VuZDogcmdiYSgwLDAsMCwwLjA1KTtcbn1cbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aCB7XG4gIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50O1xuICBvdXRsaW5lOiBub25lO1xuICBwYWRkaW5nOiAwO1xufVxuLmZsYXRwaWNrci13ZWVrZGF5cyB7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjtcbiAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IDI4cHg7XG59XG4uZmxhdHBpY2tyLXdlZWtkYXlzIC5mbGF0cGlja3Itd2Vla2RheWNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAtd2Via2l0LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xufVxuc3Bhbi5mbGF0cGlja3Itd2Vla2RheSB7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgZm9udC1zaXplOiA5MCU7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBjb2xvcjogcmdiYSgwLDAsMCwwLjU0KTtcbiAgbGluZS1oZWlnaHQ6IDE7XG4gIG1hcmdpbjogMDtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBkaXNwbGF5OiBibG9jaztcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcbiAgLXdlYmtpdC1mbGV4OiAxO1xuICAgICAgLW1zLWZsZXg6IDE7XG4gICAgICAgICAgZmxleDogMTtcbiAgZm9udC13ZWlnaHQ6IGJvbGRlcjtcbn1cbi5kYXlDb250YWluZXIsXG4uZmxhdHBpY2tyLXdlZWtzIHtcbiAgcGFkZGluZzogMXB4IDAgMCAwO1xufVxuLmZsYXRwaWNrci1kYXlzIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtYWxpZ246IHN0YXJ0O1xuICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICAgICAgLW1zLWZsZXgtYWxpZ246IHN0YXJ0O1xuICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICB3aWR0aDogMzA3Ljg3NXB4O1xufVxuLmZsYXRwaWNrci1kYXlzOmZvY3VzIHtcbiAgb3V0bGluZTogMDtcbn1cbi5kYXlDb250YWluZXIge1xuICBwYWRkaW5nOiAwO1xuICBvdXRsaW5lOiAwO1xuICB0ZXh0LWFsaWduOiBsZWZ0O1xuICB3aWR0aDogMzA3Ljg3NXB4O1xuICBtaW4td2lkdGg6IDMwNy44NzVweDtcbiAgbWF4LXdpZHRoOiAzMDcuODc1cHg7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtd2Via2l0LWZsZXgtd3JhcDogd3JhcDtcbiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7XG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XG4gIC1tcy1mbGV4LXBhY2s6IGp1c3RpZnk7XG4gIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDBweCwgMHB4LCAwcHgpO1xuICBvcGFjaXR5OiAxO1xufVxuLmRheUNvbnRhaW5lciArIC5kYXlDb250YWluZXIge1xuICAtd2Via2l0LWJveC1zaGFkb3c6IC0xcHggMCAwICNlNmU2ZTY7XG4gICAgICAgICAgYm94LXNoYWRvdzogLTFweCAwIDAgI2U2ZTZlNjtcbn1cbi5mbGF0cGlja3ItZGF5IHtcbiAgYmFja2dyb3VuZDogbm9uZTtcbiAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7XG4gIGJvcmRlci1yYWRpdXM6IDE1MHB4O1xuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgY29sb3I6ICMzOTM5Mzk7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgd2lkdGg6IDE0LjI4NTcxNDMlO1xuICAtd2Via2l0LWZsZXgtYmFzaXM6IDE0LjI4NTcxNDMlO1xuICAgICAgLW1zLWZsZXgtcHJlZmVycmVkLXNpemU6IDE0LjI4NTcxNDMlO1xuICAgICAgICAgIGZsZXgtYmFzaXM6IDE0LjI4NTcxNDMlO1xuICBtYXgtd2lkdGg6IDM5cHg7XG4gIGhlaWdodDogMzlweDtcbiAgbGluZS1oZWlnaHQ6IDM5cHg7XG4gIG1hcmdpbjogMDtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC13ZWJraXQtYm94LXBhY2s6IGNlbnRlcjtcbiAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuLmZsYXRwaWNrci1kYXkuaW5SYW5nZSxcbi5mbGF0cGlja3ItZGF5LnByZXZNb250aERheS5pblJhbmdlLFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5LmluUmFuZ2UsXG4uZmxhdHBpY2tyLWRheS50b2RheS5pblJhbmdlLFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5LnRvZGF5LmluUmFuZ2UsXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXkudG9kYXkuaW5SYW5nZSxcbi5mbGF0cGlja3ItZGF5OmhvdmVyLFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5OmhvdmVyLFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5OmhvdmVyLFxuLmZsYXRwaWNrci1kYXk6Zm9jdXMsXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXk6Zm9jdXMsXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXk6Zm9jdXMge1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIG91dGxpbmU6IDA7XG4gIGJhY2tncm91bmQ6ICNlNmU2ZTY7XG4gIGJvcmRlci1jb2xvcjogI2U2ZTZlNjtcbn1cbi5mbGF0cGlja3ItZGF5LnRvZGF5IHtcbiAgYm9yZGVyLWNvbG9yOiAjOTU5ZWE5O1xufVxuLmZsYXRwaWNrci1kYXkudG9kYXk6aG92ZXIsXG4uZmxhdHBpY2tyLWRheS50b2RheTpmb2N1cyB7XG4gIGJvcmRlci1jb2xvcjogIzk1OWVhOTtcbiAgYmFja2dyb3VuZDogIzk1OWVhOTtcbiAgY29sb3I6ICNmZmY7XG59XG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZCxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UsXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZSxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLmluUmFuZ2UsXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLmluUmFuZ2UsXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5pblJhbmdlLFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQ6Zm9jdXMsXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlOmZvY3VzLFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2U6Zm9jdXMsXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZDpob3Zlcixcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2U6aG92ZXIsXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZTpob3Zlcixcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnByZXZNb250aERheSxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UucHJldk1vbnRoRGF5LFxuLmZsYXRwaWNrci1kYXkuZW5kUmFuZ2UucHJldk1vbnRoRGF5LFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQubmV4dE1vbnRoRGF5LFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5uZXh0TW9udGhEYXksXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5uZXh0TW9udGhEYXkge1xuICBiYWNrZ3JvdW5kOiAjNTY5ZmY3O1xuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmU7XG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgY29sb3I6ICNmZmY7XG4gIGJvcmRlci1jb2xvcjogIzU2OWZmNztcbn1cbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnN0YXJ0UmFuZ2UsXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnN0YXJ0UmFuZ2UsXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5zdGFydFJhbmdlIHtcbiAgYm9yZGVyLXJhZGl1czogNTBweCAwIDAgNTBweDtcbn1cbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLmVuZFJhbmdlLFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5lbmRSYW5nZSxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLmVuZFJhbmdlIHtcbiAgYm9yZGVyLXJhZGl1czogMCA1MHB4IDUwcHggMDtcbn1cbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpLFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5zdGFydFJhbmdlICsgLmVuZFJhbmdlOm5vdCg6bnRoLWNoaWxkKDduKzEpKSxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpIHtcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAtMTBweCAwIDAgIzU2OWZmNztcbiAgICAgICAgICBib3gtc2hhZG93OiAtMTBweCAwIDAgIzU2OWZmNztcbn1cbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnN0YXJ0UmFuZ2UuZW5kUmFuZ2UsXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnN0YXJ0UmFuZ2UuZW5kUmFuZ2UsXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5zdGFydFJhbmdlLmVuZFJhbmdlIHtcbiAgYm9yZGVyLXJhZGl1czogNTBweDtcbn1cbi5mbGF0cGlja3ItZGF5LmluUmFuZ2Uge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICAtd2Via2l0LWJveC1zaGFkb3c6IC01cHggMCAwICNlNmU2ZTYsIDVweCAwIDAgI2U2ZTZlNjtcbiAgICAgICAgICBib3gtc2hhZG93OiAtNXB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XG59XG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQsXG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQ6aG92ZXIsXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXksXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXksXG4uZmxhdHBpY2tyLWRheS5ub3RBbGxvd2VkLFxuLmZsYXRwaWNrci1kYXkubm90QWxsb3dlZC5wcmV2TW9udGhEYXksXG4uZmxhdHBpY2tyLWRheS5ub3RBbGxvd2VkLm5leHRNb250aERheSB7XG4gIGNvbG9yOiByZ2JhKDU3LDU3LDU3LDAuMyk7XG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xuICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQsXG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQ6aG92ZXIge1xuICBjdXJzb3I6IG5vdC1hbGxvd2VkO1xuICBjb2xvcjogcmdiYSg1Nyw1Nyw1NywwLjEpO1xufVxuLmZsYXRwaWNrci1kYXkud2Vlay5zZWxlY3RlZCB7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTVweCAwIDAgIzU2OWZmNywgNXB4IDAgMCAjNTY5ZmY3O1xuICAgICAgICAgIGJveC1zaGFkb3c6IC01cHggMCAwICM1NjlmZjcsIDVweCAwIDAgIzU2OWZmNztcbn1cbi5mbGF0cGlja3ItZGF5LmhpZGRlbiB7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcbn1cbi5yYW5nZU1vZGUgLmZsYXRwaWNrci1kYXkge1xuICBtYXJnaW4tdG9wOiAxcHg7XG59XG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIC5mbGF0cGlja3Itd2Vla3Mge1xuICBwYWRkaW5nOiAwIDEycHg7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogMXB4IDAgMCAjZTZlNmU2O1xuICAgICAgICAgIGJveC1zaGFkb3c6IDFweCAwIDAgI2U2ZTZlNjtcbn1cbi5mbGF0cGlja3Itd2Vla3dyYXBwZXIgLmZsYXRwaWNrci13ZWVrZGF5IHtcbiAgZmxvYXQ6IG5vbmU7XG4gIHdpZHRoOiAxMDAlO1xuICBsaW5lLWhlaWdodDogMjhweDtcbn1cbi5mbGF0cGlja3Itd2Vla3dyYXBwZXIgc3Bhbi5mbGF0cGlja3ItZGF5LFxuLmZsYXRwaWNrci13ZWVrd3JhcHBlciBzcGFuLmZsYXRwaWNrci1kYXk6aG92ZXIge1xuICBkaXNwbGF5OiBibG9jaztcbiAgd2lkdGg6IDEwMCU7XG4gIG1heC13aWR0aDogbm9uZTtcbiAgY29sb3I6IHJnYmEoNTcsNTcsNTcsMC4zKTtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIGN1cnNvcjogZGVmYXVsdDtcbiAgYm9yZGVyOiBub25lO1xufVxuLmZsYXRwaWNrci1pbm5lckNvbnRhaW5lciB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG4uZmxhdHBpY2tyLXJDb250YWluZXIge1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIHBhZGRpbmc6IDA7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xufVxuLmZsYXRwaWNrci10aW1lIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBvdXRsaW5lOiAwO1xuICBkaXNwbGF5OiBibG9jaztcbiAgaGVpZ2h0OiAwO1xuICBsaW5lLWhlaWdodDogNDBweDtcbiAgbWF4LWhlaWdodDogNDBweDtcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xufVxuLmZsYXRwaWNrci10aW1lOmFmdGVyIHtcbiAgY29udGVudDogXCJcIjtcbiAgZGlzcGxheTogdGFibGU7XG4gIGNsZWFyOiBib3RoO1xufVxuLmZsYXRwaWNrci10aW1lIC5udW1JbnB1dFdyYXBwZXIge1xuICAtd2Via2l0LWJveC1mbGV4OiAxO1xuICAtd2Via2l0LWZsZXg6IDE7XG4gICAgICAtbXMtZmxleDogMTtcbiAgICAgICAgICBmbGV4OiAxO1xuICB3aWR0aDogNDAlO1xuICBoZWlnaHQ6IDQwcHg7XG4gIGZsb2F0OiBsZWZ0O1xufVxuLmZsYXRwaWNrci10aW1lIC5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1VwOmFmdGVyIHtcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogIzM5MzkzOTtcbn1cbi5mbGF0cGlja3ItdGltZSAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duOmFmdGVyIHtcbiAgYm9yZGVyLXRvcC1jb2xvcjogIzM5MzkzOTtcbn1cbi5mbGF0cGlja3ItdGltZS5oYXNTZWNvbmRzIC5udW1JbnB1dFdyYXBwZXIge1xuICB3aWR0aDogMjYlO1xufVxuLmZsYXRwaWNrci10aW1lLnRpbWUyNGhyIC5udW1JbnB1dFdyYXBwZXIge1xuICB3aWR0aDogNDklO1xufVxuLmZsYXRwaWNrci10aW1lIGlucHV0IHtcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gIC13ZWJraXQtYm94LXNoYWRvdzogbm9uZTtcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci1yYWRpdXM6IDA7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xuICBoZWlnaHQ6IGluaGVyaXQ7XG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xuICBjb2xvcjogIzM5MzkzOTtcbiAgZm9udC1zaXplOiAxNHB4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbiAgLW1vei1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcbn1cbi5mbGF0cGlja3ItdGltZSBpbnB1dC5mbGF0cGlja3ItaG91ciB7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xufVxuLmZsYXRwaWNrci10aW1lIGlucHV0LmZsYXRwaWNrci1taW51dGUsXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQuZmxhdHBpY2tyLXNlY29uZCB7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG59XG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQ6Zm9jdXMge1xuICBvdXRsaW5lOiAwO1xuICBib3JkZXI6IDA7XG59XG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci10aW1lLXNlcGFyYXRvcixcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtIHtcbiAgaGVpZ2h0OiBpbmhlcml0O1xuICBmbG9hdDogbGVmdDtcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gIGNvbG9yOiAjMzkzOTM5O1xuICBmb250LXdlaWdodDogYm9sZDtcbiAgd2lkdGg6IDIlO1xuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lO1xuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xuICAtd2Via2l0LWFsaWduLXNlbGY6IGNlbnRlcjtcbiAgICAgIC1tcy1mbGV4LWl0ZW0tYWxpZ246IGNlbnRlcjtcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci1hbS1wbSB7XG4gIG91dGxpbmU6IDA7XG4gIHdpZHRoOiAxOCU7XG4gIGN1cnNvcjogcG9pbnRlcjtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xuICBmb250LXdlaWdodDogNDAwO1xufVxuLmZsYXRwaWNrci10aW1lIGlucHV0OmhvdmVyLFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItYW0tcG06aG92ZXIsXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQ6Zm9jdXMsXG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci1hbS1wbTpmb2N1cyB7XG4gIGJhY2tncm91bmQ6ICNlZWU7XG59XG4uZmxhdHBpY2tyLWlucHV0W3JlYWRvbmx5XSB7XG4gIGN1cnNvcjogcG9pbnRlcjtcbn1cbkAtd2Via2l0LWtleWZyYW1lcyBmcEZhZGVJbkRvd24ge1xuICBmcm9tIHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMjBweCwgMCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcbiAgfVxuICB0byB7XG4gICAgb3BhY2l0eTogMTtcbiAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xuICB9XG59XG5Aa2V5ZnJhbWVzIGZwRmFkZUluRG93biB7XG4gIGZyb20ge1xuICAgIG9wYWNpdHk6IDA7XG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgLTIwcHgsIDApO1xuICB9XG4gIHRvIHtcbiAgICBvcGFjaXR5OiAxO1xuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XG4gIH1cbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5jc3NcIl0sXCJuYW1lc1wiOltdLFwibWFwcGluZ3NcIjpcIkFBQUE7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RUFDOUIsNkJBQTZCO0VBQzdCLDBCQUEwQjtFQUMxQixxQkFBcUI7QUFDdkI7QUFDQTtFQUNFLGlCQUFpQjtBQUNuQjtBQUNBOztFQUVFLGdCQUFnQjtBQUNsQjtBQUNBO0VBQ0UsVUFBVTtFQUNWLFNBQVM7QUFDWDtBQUNBOztFQUVFLGVBQWU7RUFDZixXQUFXO0VBQ1gsb0JBQW9CO0VBQ3BCLGNBQWM7RUFDZCxpQkFBaUI7RUFDakIsU0FBUztFQUNULHlCQUF5QjtLQUN0QixzQkFBc0I7TUFDckIscUJBQXFCO1VBQ2pCLGlCQUFpQjtFQUN6QiwwQkFBMEI7TUFDdEIsMkJBQTJCO1VBQ3ZCLGtCQUFrQjtBQUM1QjtBQUNBO0VBQ0UsVUFBVTtFQUNWLFVBQVU7RUFDVixlQUFlO0VBQ2Ysa0JBQWtCO0VBQ2xCLGdCQUFnQjtBQUNsQjtBQUNBOzs7O0VBSUUsZ0JBQWdCO0FBQ2xCO0FBQ0E7RUFDRSxlQUFlO0FBQ2pCO0FBQ0E7RUFDRTtJQUNFLFVBQVU7SUFDViwyQ0FBMkM7WUFDbkMsbUNBQW1DO0VBQzdDO0VBQ0E7SUFDRSxVQUFVO0lBQ1YsdUNBQXVDO1lBQy9CLCtCQUErQjtFQUN6QztBQUNGO0FBQ0E7RUFDRTtJQUNFLFVBQVU7SUFDViwyQ0FBMkM7WUFDbkMsbUNBQW1DO0VBQzdDO0VBQ0E7SUFDRSxVQUFVO0lBQ1YsdUNBQXVDO1lBQy9CLCtCQUErQjtFQUN6QztBQUNGXCIsXCJzb3VyY2VzQ29udGVudFwiOltcIi5mbGF0cGlja3ItY2FsZW5kYXIge1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBvcGFjaXR5OiAwO1xcbiAgZGlzcGxheTogbm9uZTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcXG4gIHBhZGRpbmc6IDA7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogbm9uZTtcXG4gICAgICAgICAgYW5pbWF0aW9uOiBub25lO1xcbiAgZGlyZWN0aW9uOiBsdHI7XFxuICBib3JkZXI6IDA7XFxuICBmb250LXNpemU6IDE0cHg7XFxuICBsaW5lLWhlaWdodDogMjRweDtcXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gIHdpZHRoOiAzMDcuODc1cHg7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAtbXMtdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XFxuICAgICAgdG91Y2gtYWN0aW9uOiBtYW5pcHVsYXRpb247XFxuICBiYWNrZ3JvdW5kOiAjZmZmO1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAxcHggMCAwICNlNmU2ZTYsIC0xcHggMCAwICNlNmU2ZTYsIDAgMXB4IDAgI2U2ZTZlNiwgMCAtMXB4IDAgI2U2ZTZlNiwgMCAzcHggMTNweCByZ2JhKDAsMCwwLDAuMDgpO1xcbiAgICAgICAgICBib3gtc2hhZG93OiAxcHggMCAwICNlNmU2ZTYsIC0xcHggMCAwICNlNmU2ZTYsIDAgMXB4IDAgI2U2ZTZlNiwgMCAtMXB4IDAgI2U2ZTZlNiwgMCAzcHggMTNweCByZ2JhKDAsMCwwLDAuMDgpO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLm9wZW4sXFxuLmZsYXRwaWNrci1jYWxlbmRhci5pbmxpbmUge1xcbiAgb3BhY2l0eTogMTtcXG4gIG1heC1oZWlnaHQ6IDY0MHB4O1xcbiAgdmlzaWJpbGl0eTogdmlzaWJsZTtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5vcGVuIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHotaW5kZXg6IDk5OTk5O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFuaW1hdGUub3BlbiB7XFxuICAtd2Via2l0LWFuaW1hdGlvbjogZnBGYWRlSW5Eb3duIDMwMG1zIGN1YmljLWJlemllcigwLjIzLCAxLCAwLjMyLCAxKTtcXG4gICAgICAgICAgYW5pbWF0aW9uOiBmcEZhZGVJbkRvd24gMzAwbXMgY3ViaWMtYmV6aWVyKDAuMjMsIDEsIDAuMzIsIDEpO1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmlubGluZSB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHRvcDogMnB4O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLnN0YXRpYyB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB0b3A6IGNhbGMoMTAwJSArIDJweCk7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuc3RhdGljLm9wZW4ge1xcbiAgei1pbmRleDogOTk5O1xcbiAgZGlzcGxheTogYmxvY2s7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIubXVsdGlNb250aCAuZmxhdHBpY2tyLWRheXMgLmRheUNvbnRhaW5lcjpudGgtY2hpbGQobisxKSAuZmxhdHBpY2tyLWRheS5pblJhbmdlOm50aC1jaGlsZCg3bis3KSB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcXG4gICAgICAgICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLm11bHRpTW9udGggLmZsYXRwaWNrci1kYXlzIC5kYXlDb250YWluZXI6bnRoLWNoaWxkKG4rMikgLmZsYXRwaWNrci1kYXkuaW5SYW5nZTpudGgtY2hpbGQoN24rMSkge1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAtMnB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC0ycHggMCAwICNlNmU2ZTYsIDVweCAwIDAgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhciAuaGFzV2Vla3MgLmRheUNvbnRhaW5lcixcXG4uZmxhdHBpY2tyLWNhbGVuZGFyIC5oYXNUaW1lIC5kYXlDb250YWluZXIge1xcbiAgYm9yZGVyLWJvdHRvbTogMDtcXG4gIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xcbiAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhciAuaGFzV2Vla3MgLmRheUNvbnRhaW5lciB7XFxuICBib3JkZXItbGVmdDogMDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5oYXNUaW1lIC5mbGF0cGlja3ItdGltZSB7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBib3JkZXItdG9wOiAxcHggc29saWQgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5ub0NhbGVuZGFyLmhhc1RpbWUgLmZsYXRwaWNrci10aW1lIHtcXG4gIGhlaWdodDogYXV0bztcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhcjpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhcjphZnRlciB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xcbiAgYm9yZGVyOiBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGNvbnRlbnQ6ICcnO1xcbiAgaGVpZ2h0OiAwO1xcbiAgd2lkdGg6IDA7XFxuICBsZWZ0OiAyMnB4O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLnJpZ2h0TW9zdDpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1JpZ2h0OmJlZm9yZSxcXG4uZmxhdHBpY2tyLWNhbGVuZGFyLnJpZ2h0TW9zdDphZnRlcixcXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93UmlnaHQ6YWZ0ZXIge1xcbiAgbGVmdDogYXV0bztcXG4gIHJpZ2h0OiAyMnB4O1xcbn1cXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Q2VudGVyOmJlZm9yZSxcXG4uZmxhdHBpY2tyLWNhbGVuZGFyLmFycm93Q2VudGVyOmFmdGVyIHtcXG4gIGxlZnQ6IDUwJTtcXG4gIHJpZ2h0OiA1MCU7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YmVmb3JlIHtcXG4gIGJvcmRlci13aWR0aDogNXB4O1xcbiAgbWFyZ2luOiAwIC01cHg7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXI6YWZ0ZXIge1xcbiAgYm9yZGVyLXdpZHRoOiA0cHg7XFxuICBtYXJnaW46IDAgLTRweDtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1RvcDpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd1RvcDphZnRlciB7XFxuICBib3R0b206IDEwMCU7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YmVmb3JlIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dUb3A6YWZ0ZXIge1xcbiAgYm9yZGVyLWJvdHRvbS1jb2xvcjogI2ZmZjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTpiZWZvcmUsXFxuLmZsYXRwaWNrci1jYWxlbmRhci5hcnJvd0JvdHRvbTphZnRlciB7XFxuICB0b3A6IDEwMCU7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dCb3R0b206YmVmb3JlIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItY2FsZW5kYXIuYXJyb3dCb3R0b206YWZ0ZXIge1xcbiAgYm9yZGVyLXRvcC1jb2xvcjogI2ZmZjtcXG59XFxuLmZsYXRwaWNrci1jYWxlbmRhcjpmb2N1cyB7XFxuICBvdXRsaW5lOiAwO1xcbn1cXG4uZmxhdHBpY2tyLXdyYXBwZXIge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyB7XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1tb250aCB7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGNvbG9yOiByZ2JhKDAsMCwwLDAuOSk7XFxuICBmaWxsOiByZ2JhKDAsMCwwLDAuOSk7XFxuICBoZWlnaHQ6IDM0cHg7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAtbW96LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aCB7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgdG9wOiAwO1xcbiAgaGVpZ2h0OiAzNHB4O1xcbiAgcGFkZGluZzogMTBweDtcXG4gIHotaW5kZXg6IDM7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjkpO1xcbiAgZmlsbDogcmdiYSgwLDAsMCwwLjkpO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGguZmxhdHBpY2tyLWRpc2FibGVkLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aC5mbGF0cGlja3ItZGlzYWJsZWQge1xcbiAgZGlzcGxheTogbm9uZTtcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoIGksXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIGkge1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGguZmxhdHBpY2tyLXByZXYtbW9udGgsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoLmZsYXRwaWNrci1wcmV2LW1vbnRoIHtcXG4vKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovXFxuLypcXG4gICAgICAqL1xcbiAgbGVmdDogMDtcXG4vKlxcbiAgICAgIC8qcnRsOmVuZDppZ25vcmUqL1xcbi8qXFxuICAgICAgKi9cXG59XFxuLypcXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xcbi8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoLmZsYXRwaWNrci1uZXh0LW1vbnRoLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aC5mbGF0cGlja3ItbmV4dC1tb250aCB7XFxuLypcXG4gICAgICAvKnJ0bDpiZWdpbjppZ25vcmUqL1xcbi8qXFxuICAgICAgKi9cXG4gIHJpZ2h0OiAwO1xcbi8qXFxuICAgICAgLypydGw6ZW5kOmlnbm9yZSovXFxuLypcXG4gICAgICAqL1xcbn1cXG4vKlxcbiAgICAgIC8qcnRsOmJlZ2luOmlnbm9yZSovXFxuLypcXG4gICAgICAvKnJ0bDplbmQ6aWdub3JlKi9cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGg6aG92ZXIsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoOmhvdmVyIHtcXG4gIGNvbG9yOiAjOTU5ZWE5O1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGg6aG92ZXIgc3ZnLFxcbi5mbGF0cGlja3ItbW9udGhzIC5mbGF0cGlja3ItbmV4dC1tb250aDpob3ZlciBzdmcge1xcbiAgZmlsbDogI2Y2NDc0NztcXG59XFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1wcmV2LW1vbnRoIHN2ZyxcXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLW5leHQtbW9udGggc3ZnIHtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgaGVpZ2h0OiAxNHB4O1xcbn1cXG4uZmxhdHBpY2tyLW1vbnRocyAuZmxhdHBpY2tyLXByZXYtbW9udGggc3ZnIHBhdGgsXFxuLmZsYXRwaWNrci1tb250aHMgLmZsYXRwaWNrci1uZXh0LW1vbnRoIHN2ZyBwYXRoIHtcXG4gIC13ZWJraXQtdHJhbnNpdGlvbjogZmlsbCAwLjFzO1xcbiAgdHJhbnNpdGlvbjogZmlsbCAwLjFzO1xcbiAgZmlsbDogaW5oZXJpdDtcXG59XFxuLm51bUlucHV0V3JhcHBlciB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBoZWlnaHQ6IGF1dG87XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQsXFxuLm51bUlucHV0V3JhcHBlciBzcGFuIHtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG59XFxuLm51bUlucHV0V3JhcHBlciBpbnB1dCB7XFxuICB3aWR0aDogMTAwJTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBpbnB1dDo6LW1zLWNsZWFyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgaW5wdXQ6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24sXFxuLm51bUlucHV0V3JhcHBlciBpbnB1dDo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbiB7XFxuICBtYXJnaW46IDA7XFxuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbiB7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICByaWdodDogMDtcXG4gIHdpZHRoOiAxNHB4O1xcbiAgcGFkZGluZzogMCA0cHggMCAycHg7XFxuICBoZWlnaHQ6IDUwJTtcXG4gIGxpbmUtaGVpZ2h0OiA1MCU7XFxuICBvcGFjaXR5OiAwO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSg1Nyw1Nyw1NywwLjE1KTtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4xKTtcXG59XFxuLm51bUlucHV0V3JhcHBlciBzcGFuOmFjdGl2ZSB7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMik7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3BhbjphZnRlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcCB7XFxuICB0b3A6IDA7XFxuICBib3JkZXItYm90dG9tOiAwO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcDphZnRlciB7XFxuICBib3JkZXItbGVmdDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7XFxuICBib3JkZXItYm90dG9tOiA0cHggc29saWQgcmdiYSg1Nyw1Nyw1NywwLjYpO1xcbiAgdG9wOiAyNiU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd24ge1xcbiAgdG9wOiA1MCU7XFxufVxcbi5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd0Rvd246YWZ0ZXIge1xcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yaWdodDogNHB4IHNvbGlkIHRyYW5zcGFyZW50O1xcbiAgYm9yZGVyLXRvcDogNHB4IHNvbGlkIHJnYmEoNTcsNTcsNTcsMC42KTtcXG4gIHRvcDogNDAlO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4gc3ZnIHtcXG4gIHdpZHRoOiBpbmhlcml0O1xcbiAgaGVpZ2h0OiBhdXRvO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyIHNwYW4gc3ZnIHBhdGgge1xcbiAgZmlsbDogcmdiYSgwLDAsMCwwLjUpO1xcbn1cXG4ubnVtSW5wdXRXcmFwcGVyOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbi5udW1JbnB1dFdyYXBwZXI6aG92ZXIgc3BhbiB7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4uZmxhdHBpY2tyLWN1cnJlbnQtbW9udGgge1xcbiAgZm9udC1zaXplOiAxMzUlO1xcbiAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XFxuICBmb250LXdlaWdodDogMzAwO1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICB3aWR0aDogNzUlO1xcbiAgbGVmdDogMTIuNSU7XFxuICBwYWRkaW5nOiA3LjQ4cHggMCAwIDA7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIGhlaWdodDogMzRweDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcXG4gICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwcHgsIDBweCwgMHB4KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIHNwYW4uY3VyLW1vbnRoIHtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IDcwMDtcXG4gIGNvbG9yOiBpbmhlcml0O1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgbWFyZ2luLWxlZnQ6IDAuNWNoO1xcbiAgcGFkZGluZzogMDtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIHNwYW4uY3VyLW1vbnRoOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHtcXG4gIHdpZHRoOiA2Y2g7XFxuICB3aWR0aDogN2NoXFxcXDA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dVcDphZnRlciB7XFxuICBib3JkZXItYm90dG9tLWNvbG9yOiByZ2JhKDAsMCwwLDAuOSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duOmFmdGVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6IHJnYmEoMCwwLDAsMC45KTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBjdXJzb3I6IHRleHQ7XFxuICBwYWRkaW5nOiAwIDAgMCAwLjVjaDtcXG4gIG1hcmdpbjogMDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGZvbnQtc2l6ZTogaW5oZXJpdDtcXG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xcbiAgZm9udC13ZWlnaHQ6IDMwMDtcXG4gIGxpbmUtaGVpZ2h0OiBpbmhlcml0O1xcbiAgaGVpZ2h0OiBhdXRvO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyOmZvY3VzIHtcXG4gIG91dGxpbmU6IDA7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCBpbnB1dC5jdXIteWVhcltkaXNhYmxlZF0sXFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIGlucHV0LmN1ci15ZWFyW2Rpc2FibGVkXTpob3ZlciB7XFxuICBmb250LXNpemU6IDEwMCU7XFxuICBjb2xvcjogcmdiYSgwLDAsMCwwLjUpO1xcbiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICBwb2ludGVyLWV2ZW50czogbm9uZTtcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHMge1xcbiAgYXBwZWFyYW5jZTogbWVudWxpc3Q7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlcjogbm9uZTtcXG4gIGJvcmRlci1yYWRpdXM6IDA7XFxuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6IGluaGVyaXQ7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmb250LXNpemU6IGluaGVyaXQ7XFxuICBmb250LWZhbWlseTogaW5oZXJpdDtcXG4gIGZvbnQtd2VpZ2h0OiAzMDA7XFxuICBoZWlnaHQ6IGF1dG87XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIG1hcmdpbjogLTFweCAwIDAgMDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBwYWRkaW5nOiAwIDAgMCAwLjVjaDtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHZlcnRpY2FsLWFsaWduOiBpbml0aWFsO1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdDtcXG4gIC1tb3otYXBwZWFyYW5jZTogbWVudWxpc3Q7XFxuICB3aWR0aDogYXV0bztcXG59XFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6Zm9jdXMsXFxuLmZsYXRwaWNrci1jdXJyZW50LW1vbnRoIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aHM6YWN0aXZlIHtcXG4gIG91dGxpbmU6IG5vbmU7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzOmhvdmVyIHtcXG4gIGJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4wNSk7XFxufVxcbi5mbGF0cGlja3ItY3VycmVudC1tb250aCAuZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzIC5mbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aCB7XFxuICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDtcXG4gIG91dGxpbmU6IG5vbmU7XFxuICBwYWRkaW5nOiAwO1xcbn1cXG4uZmxhdHBpY2tyLXdlZWtkYXlzIHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gIHdpZHRoOiAxMDAlO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyO1xcbiAgLXdlYmtpdC1hbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XFxuICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICBoZWlnaHQ6IDI4cHg7XFxufVxcbi5mbGF0cGlja3Itd2Vla2RheXMgLmZsYXRwaWNrci13ZWVrZGF5Y29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IC13ZWJraXQtYm94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1mbGV4O1xcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG59XFxuc3Bhbi5mbGF0cGlja3Itd2Vla2RheSB7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxuICBmb250LXNpemU6IDkwJTtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgY29sb3I6IHJnYmEoMCwwLDAsMC41NCk7XFxuICBsaW5lLWhlaWdodDogMTtcXG4gIG1hcmdpbjogMDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkZXI7XFxufVxcbi5kYXlDb250YWluZXIsXFxuLmZsYXRwaWNrci13ZWVrcyB7XFxuICBwYWRkaW5nOiAxcHggMCAwIDA7XFxufVxcbi5mbGF0cGlja3ItZGF5cyB7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1hbGlnbjogc3RhcnQ7XFxuICAtd2Via2l0LWFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xcbiAgICAgIC1tcy1mbGV4LWFsaWduOiBzdGFydDtcXG4gICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuICB3aWR0aDogMzA3Ljg3NXB4O1xcbn1cXG4uZmxhdHBpY2tyLWRheXM6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG59XFxuLmRheUNvbnRhaW5lciB7XFxuICBwYWRkaW5nOiAwO1xcbiAgb3V0bGluZTogMDtcXG4gIHRleHQtYWxpZ246IGxlZnQ7XFxuICB3aWR0aDogMzA3Ljg3NXB4O1xcbiAgbWluLXdpZHRoOiAzMDcuODc1cHg7XFxuICBtYXgtd2lkdGg6IDMwNy44NzVweDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgLXdlYmtpdC1mbGV4LXdyYXA6IHdyYXA7XFxuICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDtcXG4gIC1tcy1mbGV4LXdyYXA6IHdyYXA7XFxuICAtbXMtZmxleC1wYWNrOiBqdXN0aWZ5O1xcbiAgLXdlYmtpdC1qdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1hcm91bmQ7XFxuICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCk7XFxuICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMHB4LCAwcHgsIDBweCk7XFxuICBvcGFjaXR5OiAxO1xcbn1cXG4uZGF5Q29udGFpbmVyICsgLmRheUNvbnRhaW5lciB7XFxuICAtd2Via2l0LWJveC1zaGFkb3c6IC0xcHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC0xcHggMCAwICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItZGF5IHtcXG4gIGJhY2tncm91bmQ6IG5vbmU7XFxuICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1yYWRpdXM6IDE1MHB4O1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgY29sb3I6ICMzOTM5Mzk7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxuICBmb250LXdlaWdodDogNDAwO1xcbiAgd2lkdGg6IDE0LjI4NTcxNDMlO1xcbiAgLXdlYmtpdC1mbGV4LWJhc2lzOiAxNC4yODU3MTQzJTtcXG4gICAgICAtbXMtZmxleC1wcmVmZXJyZWQtc2l6ZTogMTQuMjg1NzE0MyU7XFxuICAgICAgICAgIGZsZXgtYmFzaXM6IDE0LjI4NTcxNDMlO1xcbiAgbWF4LXdpZHRoOiAzOXB4O1xcbiAgaGVpZ2h0OiAzOXB4O1xcbiAgbGluZS1oZWlnaHQ6IDM5cHg7XFxuICBtYXJnaW46IDA7XFxuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAtd2Via2l0LWJveC1wYWNrOiBjZW50ZXI7XFxuICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyO1xcbiAgICAgIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcXG4gICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxufVxcbi5mbGF0cGlja3ItZGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5LmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkudG9kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXkudG9kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXkudG9kYXkuaW5SYW5nZSxcXG4uZmxhdHBpY2tyLWRheTpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5wcmV2TW9udGhEYXk6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkubmV4dE1vbnRoRGF5OmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5OmZvY3VzLFxcbi5mbGF0cGlja3ItZGF5LnByZXZNb250aERheTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5uZXh0TW9udGhEYXk6Zm9jdXMge1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgb3V0bGluZTogMDtcXG4gIGJhY2tncm91bmQ6ICNlNmU2ZTY7XFxuICBib3JkZXItY29sb3I6ICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItZGF5LnRvZGF5IHtcXG4gIGJvcmRlci1jb2xvcjogIzk1OWVhOTtcXG59XFxuLmZsYXRwaWNrci1kYXkudG9kYXk6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkudG9kYXk6Zm9jdXMge1xcbiAgYm9yZGVyLWNvbG9yOiAjOTU5ZWE5O1xcbiAgYmFja2dyb3VuZDogIzk1OWVhOTtcXG4gIGNvbG9yOiAjZmZmO1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZCxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5pblJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLmluUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQ6Zm9jdXMsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZTpmb2N1cyxcXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZDpob3ZlcixcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlOmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlOmhvdmVyLFxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnByZXZNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnByZXZNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5wcmV2TW9udGhEYXksXFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQubmV4dE1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2UubmV4dE1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLm5leHRNb250aERheSB7XFxuICBiYWNrZ3JvdW5kOiAjNTY5ZmY3O1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xcbiAgY29sb3I6ICNmZmY7XFxuICBib3JkZXItY29sb3I6ICM1NjlmZjc7XFxufVxcbi5mbGF0cGlja3ItZGF5LnNlbGVjdGVkLnN0YXJ0UmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5zdGFydFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2Uge1xcbiAgYm9yZGVyLXJhZGl1czogNTBweCAwIDAgNTBweDtcXG59XFxuLmZsYXRwaWNrci1kYXkuc2VsZWN0ZWQuZW5kUmFuZ2UsXFxuLmZsYXRwaWNrci1kYXkuc3RhcnRSYW5nZS5lbmRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5lbmRSYW5nZSB7XFxuICBib3JkZXItcmFkaXVzOiAwIDUwcHggNTBweCAwO1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5zdGFydFJhbmdlICsgLmVuZFJhbmdlOm5vdCg6bnRoLWNoaWxkKDduKzEpKSxcXG4uZmxhdHBpY2tyLWRheS5zdGFydFJhbmdlLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpLFxcbi5mbGF0cGlja3ItZGF5LmVuZFJhbmdlLnN0YXJ0UmFuZ2UgKyAuZW5kUmFuZ2U6bm90KDpudGgtY2hpbGQoN24rMSkpIHtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTEwcHggMCAwICM1NjlmZjc7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IC0xMHB4IDAgMCAjNTY5ZmY3O1xcbn1cXG4uZmxhdHBpY2tyLWRheS5zZWxlY3RlZC5zdGFydFJhbmdlLmVuZFJhbmdlLFxcbi5mbGF0cGlja3ItZGF5LnN0YXJ0UmFuZ2Uuc3RhcnRSYW5nZS5lbmRSYW5nZSxcXG4uZmxhdHBpY2tyLWRheS5lbmRSYW5nZS5zdGFydFJhbmdlLmVuZFJhbmdlIHtcXG4gIGJvcmRlci1yYWRpdXM6IDUwcHg7XFxufVxcbi5mbGF0cGlja3ItZGF5LmluUmFuZ2Uge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTVweCAwIDAgI2U2ZTZlNiwgNXB4IDAgMCAjZTZlNmU2O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtNXB4IDAgMCAjZTZlNmU2LCA1cHggMCAwICNlNmU2ZTY7XFxufVxcbi5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZCxcXG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQ6aG92ZXIsXFxuLmZsYXRwaWNrci1kYXkucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5Lm5leHRNb250aERheSxcXG4uZmxhdHBpY2tyLWRheS5ub3RBbGxvd2VkLFxcbi5mbGF0cGlja3ItZGF5Lm5vdEFsbG93ZWQucHJldk1vbnRoRGF5LFxcbi5mbGF0cGlja3ItZGF5Lm5vdEFsbG93ZWQubmV4dE1vbnRoRGF5IHtcXG4gIGNvbG9yOiByZ2JhKDU3LDU3LDU3LDAuMyk7XFxuICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7XFxuICBjdXJzb3I6IGRlZmF1bHQ7XFxufVxcbi5mbGF0cGlja3ItZGF5LmZsYXRwaWNrci1kaXNhYmxlZCxcXG4uZmxhdHBpY2tyLWRheS5mbGF0cGlja3ItZGlzYWJsZWQ6aG92ZXIge1xcbiAgY3Vyc29yOiBub3QtYWxsb3dlZDtcXG4gIGNvbG9yOiByZ2JhKDU3LDU3LDU3LDAuMSk7XFxufVxcbi5mbGF0cGlja3ItZGF5LndlZWsuc2VsZWN0ZWQge1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIC13ZWJraXQtYm94LXNoYWRvdzogLTVweCAwIDAgIzU2OWZmNywgNXB4IDAgMCAjNTY5ZmY3O1xcbiAgICAgICAgICBib3gtc2hhZG93OiAtNXB4IDAgMCAjNTY5ZmY3LCA1cHggMCAwICM1NjlmZjc7XFxufVxcbi5mbGF0cGlja3ItZGF5LmhpZGRlbiB7XFxuICB2aXNpYmlsaXR5OiBoaWRkZW47XFxufVxcbi5yYW5nZU1vZGUgLmZsYXRwaWNrci1kYXkge1xcbiAgbWFyZ2luLXRvcDogMXB4O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHtcXG4gIGZsb2F0OiBsZWZ0O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIC5mbGF0cGlja3Itd2Vla3Mge1xcbiAgcGFkZGluZzogMCAxMnB4O1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiAxcHggMCAwICNlNmU2ZTY7XFxuICAgICAgICAgIGJveC1zaGFkb3c6IDFweCAwIDAgI2U2ZTZlNjtcXG59XFxuLmZsYXRwaWNrci13ZWVrd3JhcHBlciAuZmxhdHBpY2tyLXdlZWtkYXkge1xcbiAgZmxvYXQ6IG5vbmU7XFxuICB3aWR0aDogMTAwJTtcXG4gIGxpbmUtaGVpZ2h0OiAyOHB4O1xcbn1cXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHNwYW4uZmxhdHBpY2tyLWRheSxcXG4uZmxhdHBpY2tyLXdlZWt3cmFwcGVyIHNwYW4uZmxhdHBpY2tyLWRheTpob3ZlciB7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIHdpZHRoOiAxMDAlO1xcbiAgbWF4LXdpZHRoOiBub25lO1xcbiAgY29sb3I6IHJnYmEoNTcsNTcsNTcsMC4zKTtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgY3Vyc29yOiBkZWZhdWx0O1xcbiAgYm9yZGVyOiBub25lO1xcbn1cXG4uZmxhdHBpY2tyLWlubmVyQ29udGFpbmVyIHtcXG4gIGRpc3BsYXk6IGJsb2NrO1xcbiAgZGlzcGxheTogLXdlYmtpdC1ib3g7XFxuICBkaXNwbGF5OiAtd2Via2l0LWZsZXg7XFxuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcXG4gIGRpc3BsYXk6IGZsZXg7XFxuICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG4uZmxhdHBpY2tyLXJDb250YWluZXIge1xcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xcbiAgcGFkZGluZzogMDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG59XFxuLmZsYXRwaWNrci10aW1lIHtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG91dGxpbmU6IDA7XFxuICBkaXNwbGF5OiBibG9jaztcXG4gIGhlaWdodDogMDtcXG4gIGxpbmUtaGVpZ2h0OiA0MHB4O1xcbiAgbWF4LWhlaWdodDogNDBweDtcXG4gIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuICBkaXNwbGF5OiAtd2Via2l0LWJveDtcXG4gIGRpc3BsYXk6IC13ZWJraXQtZmxleDtcXG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xcbiAgZGlzcGxheTogZmxleDtcXG59XFxuLmZsYXRwaWNrci10aW1lOmFmdGVyIHtcXG4gIGNvbnRlbnQ6IFxcXCJcXFwiO1xcbiAgZGlzcGxheTogdGFibGU7XFxuICBjbGVhcjogYm90aDtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgLXdlYmtpdC1ib3gtZmxleDogMTtcXG4gIC13ZWJraXQtZmxleDogMTtcXG4gICAgICAtbXMtZmxleDogMTtcXG4gICAgICAgICAgZmxleDogMTtcXG4gIHdpZHRoOiA0MCU7XFxuICBoZWlnaHQ6IDQwcHg7XFxuICBmbG9hdDogbGVmdDtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5udW1JbnB1dFdyYXBwZXIgc3Bhbi5hcnJvd1VwOmFmdGVyIHtcXG4gIGJvcmRlci1ib3R0b20tY29sb3I6ICMzOTM5Mzk7XFxufVxcbi5mbGF0cGlja3ItdGltZSAubnVtSW5wdXRXcmFwcGVyIHNwYW4uYXJyb3dEb3duOmFmdGVyIHtcXG4gIGJvcmRlci10b3AtY29sb3I6ICMzOTM5Mzk7XFxufVxcbi5mbGF0cGlja3ItdGltZS5oYXNTZWNvbmRzIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgd2lkdGg6IDI2JTtcXG59XFxuLmZsYXRwaWNrci10aW1lLnRpbWUyNGhyIC5udW1JbnB1dFdyYXBwZXIge1xcbiAgd2lkdGg6IDQ5JTtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0IHtcXG4gIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcbiAgLXdlYmtpdC1ib3gtc2hhZG93OiBub25lO1xcbiAgICAgICAgICBib3gtc2hhZG93OiBub25lO1xcbiAgYm9yZGVyOiAwO1xcbiAgYm9yZGVyLXJhZGl1czogMDtcXG4gIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gIG1hcmdpbjogMDtcXG4gIHBhZGRpbmc6IDA7XFxuICBoZWlnaHQ6IGluaGVyaXQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGNvbG9yOiAjMzkzOTM5O1xcbiAgZm9udC1zaXplOiAxNHB4O1xcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7XFxuICAtbW96LWFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG4gIGFwcGVhcmFuY2U6IHRleHRmaWVsZDtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0LmZsYXRwaWNrci1ob3VyIHtcXG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQuZmxhdHBpY2tyLW1pbnV0ZSxcXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQuZmxhdHBpY2tyLXNlY29uZCB7XFxuICBmb250LXdlaWdodDogNDAwO1xcbn1cXG4uZmxhdHBpY2tyLXRpbWUgaW5wdXQ6Zm9jdXMge1xcbiAgb3V0bGluZTogMDtcXG4gIGJvcmRlcjogMDtcXG59XFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItdGltZS1zZXBhcmF0b3IsXFxuLmZsYXRwaWNrci10aW1lIC5mbGF0cGlja3ItYW0tcG0ge1xcbiAgaGVpZ2h0OiBpbmhlcml0O1xcbiAgZmxvYXQ6IGxlZnQ7XFxuICBsaW5lLWhlaWdodDogaW5oZXJpdDtcXG4gIGNvbG9yOiAjMzkzOTM5O1xcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XFxuICB3aWR0aDogMiU7XFxuICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lO1xcbiAgICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTtcXG4gICAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XFxuICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lO1xcbiAgLXdlYmtpdC1hbGlnbi1zZWxmOiBjZW50ZXI7XFxuICAgICAgLW1zLWZsZXgtaXRlbS1hbGlnbjogY2VudGVyO1xcbiAgICAgICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XFxufVxcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtIHtcXG4gIG91dGxpbmU6IDA7XFxuICB3aWR0aDogMTglO1xcbiAgY3Vyc29yOiBwb2ludGVyO1xcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgZm9udC13ZWlnaHQ6IDQwMDtcXG59XFxuLmZsYXRwaWNrci10aW1lIGlucHV0OmhvdmVyLFxcbi5mbGF0cGlja3ItdGltZSAuZmxhdHBpY2tyLWFtLXBtOmhvdmVyLFxcbi5mbGF0cGlja3ItdGltZSBpbnB1dDpmb2N1cyxcXG4uZmxhdHBpY2tyLXRpbWUgLmZsYXRwaWNrci1hbS1wbTpmb2N1cyB7XFxuICBiYWNrZ3JvdW5kOiAjZWVlO1xcbn1cXG4uZmxhdHBpY2tyLWlucHV0W3JlYWRvbmx5XSB7XFxuICBjdXJzb3I6IHBvaW50ZXI7XFxufVxcbkAtd2Via2l0LWtleWZyYW1lcyBmcEZhZGVJbkRvd24ge1xcbiAgZnJvbSB7XFxuICAgIG9wYWNpdHk6IDA7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMjBweCwgMCk7XFxuICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAtMjBweCwgMCk7XFxuICB9XFxuICB0byB7XFxuICAgIG9wYWNpdHk6IDE7XFxuICAgIC13ZWJraXQtdHJhbnNmb3JtOiB0cmFuc2xhdGUzZCgwLCAwLCAwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgfVxcbn1cXG5Aa2V5ZnJhbWVzIGZwRmFkZUluRG93biB7XFxuICBmcm9tIHtcXG4gICAgb3BhY2l0eTogMDtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcXG4gICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIC0yMHB4LCAwKTtcXG4gIH1cXG4gIHRvIHtcXG4gICAgb3BhY2l0eTogMTtcXG4gICAgLXdlYmtpdC10cmFuc2Zvcm06IHRyYW5zbGF0ZTNkKDAsIDAsIDApO1xcbiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlM2QoMCwgMCwgMCk7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIvLyBJbXBvcnRzXG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyBmcm9tIFwiLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9hcGkuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FUX1JVTEVfSU1QT1JUXzBfX18gZnJvbSBcIi0hLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vbm9kZV9tb2R1bGVzL2ZsYXRwaWNrci9kaXN0L2ZsYXRwaWNrci5jc3NcIjtcbnZhciBfX19DU1NfTE9BREVSX0VYUE9SVF9fXyA9IF9fX0NTU19MT0FERVJfQVBJX0lNUE9SVF9fXyhfX19DU1NfTE9BREVSX0FQSV9TT1VSQ0VNQVBfSU1QT1JUX19fKTtcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLmkoX19fQ1NTX0xPQURFUl9BVF9SVUxFX0lNUE9SVF8wX19fKTtcbi8vIE1vZHVsZVxuX19fQ1NTX0xPQURFUl9FWFBPUlRfX18ucHVzaChbbW9kdWxlLmlkLCBgLnJlZG1pbmUtdHJhY2t5IC50aW1lci1zZXNzaW9ucy10YWJsZSB0ZHt0ZXh0LWFsaWduOmxlZnQgIWltcG9ydGFudH0ucmVkbWluZS10cmFja3kgLnRpbWVyLXNlc3Npb24tdGFibGUtYWN0aW9uc3t0ZXh0LWFsaWduOnJpZ2h0ICFpbXBvcnRhbnR9LnJlZG1pbmUtdHJhY2t5IC5nYXAtbWFya2Vye3Bvc2l0aW9uOnJlbGF0aXZlO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNmYzhjMTJ9LnJlZG1pbmUtdHJhY2t5IC5nYXAtbWFya2VyLmVycm9yLWJsb2NrOmFmdGVye2JvdHRvbTotMnB4O3dpZHRoOmNhbGMoMTAwJSArIDFweCk7bGVmdDotMXB4fS5yZWRtaW5lLXRyYWNreSAubWItM3ttYXJnaW4tYm90dG9tOjFyZW0gIWltcG9ydGFudH0ucmVkbWluZS10cmFja3kgLm10LTN7bWFyZ2luLXRvcDoxcmVtICFpbXBvcnRhbnR9LnJlZG1pbmUtdHJhY2t5IC5tci0ze21hcmdpbi1yaWdodDoxcmVtICFpbXBvcnRhbnR9LnJlZG1pbmUtdHJhY2t5IC5tbC0ze21hcmdpbi1sZWZ0OjFyZW0gIWltcG9ydGFudH0ucmVkbWluZS10cmFja3kgLm14LWF1dG97bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tcmlnaHQ6YXV0b30ucmVkbWluZS10cmFja3kgLmVycm9ye2NvbG9yOiNkNzQ0Mjd9LnJlZG1pbmUtdHJhY2t5IC53LTIwe3dpZHRoOjIwJSAhaW1wb3J0YW50fS5yZWRtaW5lLXRyYWNreSAudy0yNXt3aWR0aDoyNSUgIWltcG9ydGFudH0ucmVkbWluZS10cmFja3kgLnctMzB7d2lkdGg6MzAlICFpbXBvcnRhbnR9LnJlZG1pbmUtdHJhY2t5IC53LTQwe3dpZHRoOjQwJSAhaW1wb3J0YW50fS5yZWRtaW5lLXRyYWNreSAudy01MHt3aWR0aDo1MCUgIWltcG9ydGFudH0ucmVkbWluZS10cmFja3kgLnctNzV7d2lkdGg6NzUlICFpbXBvcnRhbnR9LnJlZG1pbmUtdHJhY2t5IC53LTEwMHt3aWR0aDoxMDAlICFpbXBvcnRhbnR9QG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCl7LnJlZG1pbmUtdHJhY2t5IFtjbGFzcyo9dy1de3dpZHRoOjEwMCUgIWltcG9ydGFudH19LnJlZG1pbmUtdHJhY2t5IC5lcnJvci1ibG9ja3tib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLWNvbG9yOiNkNzQ0Mjc7Ym9yZGVyLXdpZHRoOjEuNXB4fS5yZWRtaW5lLXRyYWNreSAudGltZXItc2Vzc2lvbnMtdGFibGV7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlfS5yZWRtaW5lLXRyYWNreSAudGltZXItc2Vzc2lvbnMtdGFibGU+dGR7dGV4dC1hbGlnbjpsZWZ0O21hcmdpbi1sZWZ0OjVweH0ucmVkbWluZS10cmFja3kgLnRleHQtY2VudGVye3RleHQtYWxpZ246Y2VudGVyfS5yZWRtaW5lLXRyYWNreSAuc3BhY2UtYmV0d2VlbntkaXNwbGF5OmZsZXg7LW1vei1ib3gtcGFjazpqdXN0aWZ5O2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuOy1tb3otYm94LWFsaWduOmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXJ9LnJlZG1pbmUtdHJhY2t5IC5oM3tmb250LXNpemU6M3JlbX0ucmVkbWluZS10cmFja3kgLmxlZnQtdGV4dHt0ZXh0LWFsaWduOmxlZnR9LnJlZG1pbmUtdHJhY2t5IC5yaWdodC10ZXh0e3RleHQtYWxpZ246cmlnaHQgIWltcG9ydGFudH0ucmVkbWluZS10cmFja3kgbGFiZWx7ZGlzcGxheTpibG9jazttYXJnaW4tYm90dG9tOi41cmVtfS5yZWRtaW5lLXRyYWNreSAudGV4dC1tdXRlZHtjb2xvcjojNmM3NTdkICFpbXBvcnRhbnR9LnJlZG1pbmUtdHJhY2t5IC5mb3JtLXRleHR7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOi4yNXJlbX0ucmVkbWluZS10cmFja3kgc21hbGx7Zm9udC1zaXplOjgwJTtmb250LXdlaWdodDo0MDB9LnJlZG1pbmUtdHJhY2t5IC5jb2wtMXt3aWR0aDo4LjMzMzMzMzMzMzMlfS5yZWRtaW5lLXRyYWNreSAuY29sLTJ7d2lkdGg6MTYuNjY2NjY2NjY2NyV9LnJlZG1pbmUtdHJhY2t5IC5jb2wtM3t3aWR0aDoyNSV9LnJlZG1pbmUtdHJhY2t5IC5jb2wtNHt3aWR0aDozMy4zMzMzMzMzMzMzJX0ucmVkbWluZS10cmFja3kgLmNvbC01e3dpZHRoOjQxLjY2NjY2NjY2NjclfS5yZWRtaW5lLXRyYWNreSAuY29sLTZ7d2lkdGg6NTAlfS5yZWRtaW5lLXRyYWNreSAuY29sLTd7d2lkdGg6NTguMzMzMzMzMzMzMyV9LnJlZG1pbmUtdHJhY2t5IC5jb2wtOHt3aWR0aDo2Ni42NjY2NjY2NjY3JX0ucmVkbWluZS10cmFja3kgLmNvbC05e3dpZHRoOjc1JX0ucmVkbWluZS10cmFja3kgLmNvbC0xMHt3aWR0aDo4My4zMzMzMzMzMzMzJX0ucmVkbWluZS10cmFja3kgLmNvbC0xMXt3aWR0aDo5MS42NjY2NjY2NjY3JX0ucmVkbWluZS10cmFja3kgLmNvbC0xMnt3aWR0aDoxMDAlfUBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpey5yZWRtaW5lLXRyYWNreSBbY2xhc3MqPWNvbC1de3dpZHRoOjEwMCV9fS5yZWRtaW5lLXRyYWNreSAuZmxvYXQtcmlnaHR7ZmxvYXQ6cmlnaHQgIWltcG9ydGFudH0ucmVkbWluZS10cmFja3kgLnRpbWVzLWNvbnRhaW5lcntjb2x1bW4tY291bnQ6Mn0ucmVkbWluZS10cmFja3kgaW5wdXQ6ZGlzYWJsZWQsLnJlZG1pbmUtdHJhY2t5IGJ1dHRvbjpkaXNhYmxlZHtiYWNrZ3JvdW5kLWNvbG9yOiNlOWVjZWY7b3BhY2l0eToxO2N1cnNvcjpkZWZhdWx0fWAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3N0eWxlcy90aW1lX3Nlc3Npb25zX3RhYmxlLnNjc3NcIixcIndlYnBhY2s6Ly8uL3NyYy9zdHlsZXMvdXRpbHMuc2Nzc1wiLFwid2VicGFjazovLy4vc3JjL3N0eWxlcy90aW1lcl9jb250YWluZXIuc2Nzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFHRSx5Q0FDRSwwQkFBQSxDQUdGLDZDQUNFLDJCQUFBLENBR0YsNEJBQ0UsaUJBQUEsQ0FDQSwrQkFBQSxDQUVBLDhDQUNFLFdBQUEsQ0FDQSxzQkFBQSxDQUNBLFNBQUEsQ0NqQkosc0JBQ0UsNkJBQUEsQ0FHRixzQkFDRSwwQkFBQSxDQUdGLHNCQUNFLDRCQUFBLENBR0Ysc0JBQ0UsMkJBQUEsQ0FHRix5QkFDRSxnQkFBQSxDQUNBLGlCQUFBLENBR0YsdUJBQ0UsYUFBQSxDQUdGLHNCQUNFLG9CQUFBLENBR0Ysc0JBQ0Usb0JBQUEsQ0FHRixzQkFDRSxvQkFBQSxDQUdGLHNCQUNFLG9CQUFBLENBR0Ysc0JBQ0Usb0JBQUEsQ0FHRixzQkFDRSxvQkFBQSxDQUdGLHVCQUNFLHFCQUFBLENBR0YsMENBQ0UsNEJBQ0UscUJBQUEsQ0FBQSxDQUlKLDZCQUNFLGtCQUFBLENBQ0Esb0JBQUEsQ0FDQSxrQkFBQSxDQUdGLHNDQUNFLHdCQUFBLENBR0YseUNBQ0UsZUFBQSxDQUNBLGVBQUEsQ0FHRiw2QkFDRSxpQkFBQSxDQUdGLCtCQUNFLFlBQUEsQ0FDQSxxQkFBQSxDQUNBLDZCQUFBLENBQ0EscUJBQUEsQ0FDQSxrQkFBQSxDQUdGLG9CQUNFLGNBQUEsQ0FHRiwyQkFDRSxlQUFBLENBR0YsNEJBQ0UsMkJBQUEsQ0FHRixzQkFDRSxhQUFBLENBQ0EsbUJBQUEsQ0FHRiw0QkFDRSx3QkFBQSxDQUdGLDJCQUNFLGFBQUEsQ0FDQSxpQkFBQSxDQUdGLHNCQUNFLGFBQUEsQ0FDQSxlQUFBLENBSUEsdUJBQ0UsbUJBQUEsQ0FERix1QkFDRSxvQkFBQSxDQURGLHVCQUNFLFNBQUEsQ0FERix1QkFDRSxvQkFBQSxDQURGLHVCQUNFLG9CQUFBLENBREYsdUJBQ0UsU0FBQSxDQURGLHVCQUNFLG9CQUFBLENBREYsdUJBQ0Usb0JBQUEsQ0FERix1QkFDRSxTQUFBLENBREYsd0JBQ0Usb0JBQUEsQ0FERix3QkFDRSxvQkFBQSxDQURGLHdCQUNFLFVBQUEsQ0FJSiwwQ0FFRSw4QkFDRSxVQUFBLENBQUEsQ0FJSiw2QkFDRSxzQkFBQSxDQ25JRixpQ0FDRSxjQUFBLENBR0YsK0RBRUUsd0JBQUEsQ0FDQSxTQUFBLENBQ0EsY0FBQVwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJAaW1wb3J0ICd2YXJpYWJsZXMnO1xcblxcbi5yZWRtaW5lLXRyYWNreSB7XFxuICAudGltZXItc2Vzc2lvbnMtdGFibGUgdGQge1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0ICFpbXBvcnRhbnQ7XFxuICB9XFxuXFxuICAudGltZXItc2Vzc2lvbi10YWJsZS1hY3Rpb25zIHtcXG4gICAgdGV4dC1hbGlnbjogcmlnaHQgIWltcG9ydGFudDtcXG4gIH1cXG5cXG4gIC5nYXAtbWFya2VyIHtcXG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJGJyYW5kLXdhcm5pbmc7XFxuXFxuICAgICYuZXJyb3ItYmxvY2s6YWZ0ZXIge1xcbiAgICAgIGJvdHRvbTogLTJweDtcXG4gICAgICB3aWR0aDogY2FsYygxMDAlICsgMXB4KTtcXG4gICAgICBsZWZ0OiAtMXB4O1xcbiAgICB9XFxuICB9XFxufVxcblwiLFwiLnJlZG1pbmUtdHJhY2t5IHtcXG4gIC5tYi0zIHtcXG4gICAgbWFyZ2luLWJvdHRvbTogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcblxcbiAgLm10LTMge1xcbiAgICBtYXJnaW4tdG9wOiAxcmVtICFpbXBvcnRhbnQ7XFxuICB9XFxuXFxuICAubXItMyB7XFxuICAgIG1hcmdpbi1yaWdodDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcblxcbiAgLm1sLTMge1xcbiAgICBtYXJnaW4tbGVmdDogMXJlbSAhaW1wb3J0YW50O1xcbiAgfVxcblxcbiAgLm14LWF1dG8ge1xcbiAgICBtYXJnaW4tbGVmdDogYXV0bztcXG4gICAgbWFyZ2luLXJpZ2h0OiBhdXRvO1xcbiAgfVxcblxcbiAgLmVycm9yIHtcXG4gICAgY29sb3I6ICNkNzQ0Mjc7XFxuICB9XFxuXFxuICAudy0yMCB7XFxuICAgIHdpZHRoOiAyMCUgIWltcG9ydGFudDtcXG4gIH1cXG5cXG4gIC53LTI1IHtcXG4gICAgd2lkdGg6IDI1JSAhaW1wb3J0YW50O1xcbiAgfVxcblxcbiAgLnctMzAge1xcbiAgICB3aWR0aDogMzAlICFpbXBvcnRhbnQ7XFxuICB9XFxuXFxuICAudy00MCB7XFxuICAgIHdpZHRoOiA0MCUgIWltcG9ydGFudDtcXG4gIH1cXG5cXG4gIC53LTUwIHtcXG4gICAgd2lkdGg6IDUwJSAhaW1wb3J0YW50O1xcbiAgfVxcblxcbiAgLnctNzUge1xcbiAgICB3aWR0aDogNzUlICFpbXBvcnRhbnQ7XFxuICB9XFxuXFxuICAudy0xMDAge1xcbiAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbiAgfVxcblxcbiAgQG1lZGlhIG9ubHkgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0ODBweCkge1xcbiAgICBbY2xhc3MqPVxcXCJ3LVxcXCJdIHtcXG4gICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50O1xcbiAgICB9XFxuICB9XFxuXFxuICAuZXJyb3ItYmxvY2sge1xcbiAgICBib3JkZXItc3R5bGU6IHNvbGlkO1xcbiAgICBib3JkZXItY29sb3I6ICNkNzQ0Mjc7XFxuICAgIGJvcmRlci13aWR0aDogMS41cHg7XFxuICB9XFxuXFxuICAudGltZXItc2Vzc2lvbnMtdGFibGUge1xcbiAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO1xcbiAgfVxcblxcbiAgLnRpbWVyLXNlc3Npb25zLXRhYmxlID4gdGQge1xcbiAgICB0ZXh0LWFsaWduOiBsZWZ0O1xcbiAgICBtYXJnaW4tbGVmdDogNXB4O1xcbiAgfVxcblxcbiAgLnRleHQtY2VudGVyIHtcXG4gICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgfVxcblxcbiAgLnNwYWNlLWJldHdlZW4ge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAtbW96LWJveC1wYWNrOiBqdXN0aWZ5O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuICAgIC1tb3otYm94LWFsaWduOiBjZW50ZXI7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB9XFxuXFxuICAuaDMge1xcbiAgICBmb250LXNpemU6IDNyZW07XFxuICB9XFxuXFxuICAubGVmdC10ZXh0IHtcXG4gICAgdGV4dC1hbGlnbjogbGVmdDtcXG4gIH1cXG5cXG4gIC5yaWdodC10ZXh0IHtcXG4gICAgdGV4dC1hbGlnbjogcmlnaHQgIWltcG9ydGFudDtcXG4gIH1cXG5cXG4gIGxhYmVsIHtcXG4gICAgZGlzcGxheTogYmxvY2s7XFxuICAgIG1hcmdpbi1ib3R0b206IDAuNXJlbTtcXG4gIH1cXG5cXG4gIC50ZXh0LW11dGVkIHtcXG4gICAgY29sb3I6ICM2Yzc1N2QgIWltcG9ydGFudDtcXG4gIH1cXG5cXG4gIC5mb3JtLXRleHQge1xcbiAgICBkaXNwbGF5OiBibG9jaztcXG4gICAgbWFyZ2luLXRvcDogMC4yNXJlbTtcXG4gIH1cXG5cXG4gIHNtYWxsIHtcXG4gICAgZm9udC1zaXplOiA4MCU7XFxuICAgIGZvbnQtd2VpZ2h0OiA0MDA7XFxuICB9XFxuXFxuICBAZm9yICRpIGZyb20gMSB0aHJvdWdoIDEyIHtcXG4gICAgLmNvbC0jeyRpfSB7XFxuICAgICAgd2lkdGg6IGNhbGMoMTAwJSAvICgxMiAvICRpKSk7XFxuICAgIH1cXG4gIH1cXG5cXG4gIEBtZWRpYSBvbmx5IHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHtcXG4gICAgLyogRm9yIG1vYmlsZSBwaG9uZXM6ICovXFxuICAgIFtjbGFzcyo9XFxcImNvbC1cXFwiXSB7XFxuICAgICAgd2lkdGg6IDEwMCU7XFxuICAgIH1cXG4gIH1cXG5cXG4gIC5mbG9hdC1yaWdodCB7XFxuICAgIGZsb2F0OiByaWdodCAhaW1wb3J0YW50O1xcbiAgfVxcbn1cXG5cIixcIi5yZWRtaW5lLXRyYWNreSB7XFxuICAudGltZXMtY29udGFpbmVyIHtcXG4gICAgY29sdW1uLWNvdW50OiAyO1xcbiAgfVxcblxcbiAgaW5wdXQ6ZGlzYWJsZWQsXFxuICBidXR0b246ZGlzYWJsZWQge1xcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTllY2VmO1xcbiAgICBvcGFjaXR5OiAxO1xcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XFxuICB9XFxufVxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5pZiAodHlwZW9mIE9iamVjdC5hc3NpZ24gIT09IFwiZnVuY3Rpb25cIikge1xuICAgIE9iamVjdC5hc3NpZ24gPSBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgICAgIHZhciBhcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBhcmdzW19pIC0gMV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoXCJDYW5ub3QgY29udmVydCB1bmRlZmluZWQgb3IgbnVsbCB0byBvYmplY3RcIik7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbiAoc291cmNlKSB7XG4gICAgICAgICAgICBpZiAoc291cmNlKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoc291cmNlKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHsgcmV0dXJuICh0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldKTsgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGZvciAodmFyIF9hID0gMCwgYXJnc18xID0gYXJnczsgX2EgPCBhcmdzXzEubGVuZ3RoOyBfYSsrKSB7XG4gICAgICAgICAgICB2YXIgc291cmNlID0gYXJnc18xW19hXTtcbiAgICAgICAgICAgIF9sb29wXzEoc291cmNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgIH07XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbi8vIHRoZXNlIGFyZW4ndCByZWFsbHkgcHJpdmF0ZSwgYnV0IG5vciBhcmUgdGhleSByZWFsbHkgdXNlZnVsIHRvIGRvY3VtZW50XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuY2xhc3MgTHV4b25FcnJvciBleHRlbmRzIEVycm9yIHt9XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5jbGFzcyBJbnZhbGlkRGF0ZVRpbWVFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFzb24pIHtcbiAgICBzdXBlcihgSW52YWxpZCBEYXRlVGltZTogJHtyZWFzb24udG9NZXNzYWdlKCl9YCk7XG4gIH1cblxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmNsYXNzIEludmFsaWRJbnRlcnZhbEVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlYXNvbikge1xuICAgIHN1cGVyKGBJbnZhbGlkIEludGVydmFsOiAke3JlYXNvbi50b01lc3NhZ2UoKX1gKTtcbiAgfVxuXG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY2xhc3MgSW52YWxpZER1cmF0aW9uRXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHtcbiAgY29uc3RydWN0b3IocmVhc29uKSB7XG4gICAgc3VwZXIoYEludmFsaWQgRHVyYXRpb246ICR7cmVhc29uLnRvTWVzc2FnZSgpfWApO1xuICB9XG5cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jbGFzcyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige31cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5jbGFzcyBJbnZhbGlkVW5pdEVycm9yIGV4dGVuZHMgTHV4b25FcnJvciB7XG4gIGNvbnN0cnVjdG9yKHVuaXQpIHtcbiAgICBzdXBlcihgSW52YWxpZCB1bml0ICR7dW5pdH1gKTtcbiAgfVxuXG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBMdXhvbkVycm9yIHt9XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY2xhc3MgWm9uZUlzQWJzdHJhY3RFcnJvciBleHRlbmRzIEx1eG9uRXJyb3Ige1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcIlpvbmUgaXMgYW4gYWJzdHJhY3QgY2xhc3NcIik7XG4gIH1cblxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IG4gPSBcIm51bWVyaWNcIixcbiAgICAgIHMgPSBcInNob3J0XCIsXG4gICAgICBsID0gXCJsb25nXCI7XG5jb25zdCBEQVRFX1NIT1JUID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbixcbiAgZGF5OiBuXG59O1xuY29uc3QgREFURV9NRUQgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG5cbn07XG5jb25zdCBEQVRFX01FRF9XSVRIX1dFRUtEQVkgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBzLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IHNcbn07XG5jb25zdCBEQVRFX0ZVTEwgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG5cbn07XG5jb25zdCBEQVRFX0hVR0UgPSB7XG4gIHllYXI6IG4sXG4gIG1vbnRoOiBsLFxuICBkYXk6IG4sXG4gIHdlZWtkYXk6IGxcbn07XG5jb25zdCBUSU1FX1NJTVBMRSA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuXG59O1xuY29uc3QgVElNRV9XSVRIX1NFQ09ORFMgPSB7XG4gIGhvdXI6IG4sXG4gIG1pbnV0ZTogbixcbiAgc2Vjb25kOiBuXG59O1xuY29uc3QgVElNRV9XSVRIX1NIT1JUX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogc1xufTtcbmNvbnN0IFRJTUVfV0lUSF9MT05HX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogbFxufTtcbmNvbnN0IFRJTUVfMjRfU0lNUExFID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIlxufTtcbmNvbnN0IFRJTUVfMjRfV0lUSF9TRUNPTkRTID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgaG91ckN5Y2xlOiBcImgyM1wiXG59O1xuY29uc3QgVElNRV8yNF9XSVRIX1NIT1JUX09GRlNFVCA9IHtcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgdGltZVpvbmVOYW1lOiBzXG59O1xuY29uc3QgVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUID0ge1xuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgaG91ckN5Y2xlOiBcImgyM1wiLFxuICB0aW1lWm9uZU5hbWU6IGxcbn07XG5jb25zdCBEQVRFVElNRV9TSE9SVCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IG4sXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuXG59O1xuY29uc3QgREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbixcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogblxufTtcbmNvbnN0IERBVEVUSU1FX01FRCA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuXG59O1xuY29uc3QgREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IHMsXG4gIGRheTogbixcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG5cbn07XG5jb25zdCBEQVRFVElNRV9NRURfV0lUSF9XRUVLREFZID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogcyxcbiAgZGF5OiBuLFxuICB3ZWVrZGF5OiBzLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG5cbn07XG5jb25zdCBEQVRFVElNRV9GVUxMID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHRpbWVab25lTmFtZTogc1xufTtcbmNvbnN0IERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTID0ge1xuICB5ZWFyOiBuLFxuICBtb250aDogbCxcbiAgZGF5OiBuLFxuICBob3VyOiBuLFxuICBtaW51dGU6IG4sXG4gIHNlY29uZDogbixcbiAgdGltZVpvbmVOYW1lOiBzXG59O1xuY29uc3QgREFURVRJTUVfSFVHRSA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgd2Vla2RheTogbCxcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICB0aW1lWm9uZU5hbWU6IGxcbn07XG5jb25zdCBEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUyA9IHtcbiAgeWVhcjogbixcbiAgbW9udGg6IGwsXG4gIGRheTogbixcbiAgd2Vla2RheTogbCxcbiAgaG91cjogbixcbiAgbWludXRlOiBuLFxuICBzZWNvbmQ6IG4sXG4gIHRpbWVab25lTmFtZTogbFxufTtcblxuLypcbiAgVGhpcyBpcyBqdXN0IGEganVuayBkcmF3ZXIsIGNvbnRhaW5pbmcgYW55dGhpbmcgdXNlZCBhY3Jvc3MgbXVsdGlwbGUgY2xhc3Nlcy5cbiAgQmVjYXVzZSBMdXhvbiBpcyBzbWFsbChpc2gpLCB0aGlzIHNob3VsZCBzdGF5IHNtYWxsIGFuZCB3ZSB3b24ndCB3b3JyeSBhYm91dCBzcGxpdHRpbmdcbiAgaXQgdXAgaW50bywgc2F5LCBwYXJzaW5nVXRpbC5qcyBhbmQgYmFzaWNVdGlsLmpzIGFuZCBzbyBvbi4gQnV0IHRoZXkgYXJlIGRpdmlkZWQgdXAgYnkgZmVhdHVyZSBhcmVhLlxuKi9cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuLy8gVFlQRVNcblxuZnVuY3Rpb24gaXNVbmRlZmluZWQobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09IFwidW5kZWZpbmVkXCI7XG59XG5mdW5jdGlvbiBpc051bWJlcihvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJudW1iZXJcIjtcbn1cbmZ1bmN0aW9uIGlzSW50ZWdlcihvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gXCJudW1iZXJcIiAmJiBvICUgMSA9PT0gMDtcbn1cbmZ1bmN0aW9uIGlzU3RyaW5nKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSBcInN0cmluZ1wiO1xufVxuZnVuY3Rpb24gaXNEYXRlKG8pIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKSA9PT0gXCJbb2JqZWN0IERhdGVdXCI7XG59IC8vIENBUEFCSUxJVElFU1xuXG5mdW5jdGlvbiBoYXNSZWxhdGl2ZSgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gdHlwZW9mIEludGwgIT09IFwidW5kZWZpbmVkXCIgJiYgISFJbnRsLlJlbGF0aXZlVGltZUZvcm1hdDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufSAvLyBPQkpFQ1RTIEFORCBBUlJBWVNcblxuZnVuY3Rpb24gbWF5YmVBcnJheSh0aGluZykge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh0aGluZykgPyB0aGluZyA6IFt0aGluZ107XG59XG5mdW5jdGlvbiBiZXN0QnkoYXJyLCBieSwgY29tcGFyZSkge1xuICBpZiAoYXJyLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gYXJyLnJlZHVjZSgoYmVzdCwgbmV4dCkgPT4ge1xuICAgIGNvbnN0IHBhaXIgPSBbYnkobmV4dCksIG5leHRdO1xuXG4gICAgaWYgKCFiZXN0KSB7XG4gICAgICByZXR1cm4gcGFpcjtcbiAgICB9IGVsc2UgaWYgKGNvbXBhcmUoYmVzdFswXSwgcGFpclswXSkgPT09IGJlc3RbMF0pIHtcbiAgICAgIHJldHVybiBiZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcGFpcjtcbiAgICB9XG4gIH0sIG51bGwpWzFdO1xufVxuZnVuY3Rpb24gcGljayhvYmosIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKChhLCBrKSA9PiB7XG4gICAgYVtrXSA9IG9ialtrXTtcbiAgICByZXR1cm4gYTtcbiAgfSwge30pO1xufVxuZnVuY3Rpb24gaGFzT3duUHJvcGVydHkob2JqLCBwcm9wKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbn0gLy8gTlVNQkVSUyBBTkQgU1RSSU5HU1xuXG5mdW5jdGlvbiBpbnRlZ2VyQmV0d2Vlbih0aGluZywgYm90dG9tLCB0b3ApIHtcbiAgcmV0dXJuIGlzSW50ZWdlcih0aGluZykgJiYgdGhpbmcgPj0gYm90dG9tICYmIHRoaW5nIDw9IHRvcDtcbn0gLy8geCAlIG4gYnV0IHRha2VzIHRoZSBzaWduIG9mIG4gaW5zdGVhZCBvZiB4XG5cbmZ1bmN0aW9uIGZsb29yTW9kKHgsIG4pIHtcbiAgcmV0dXJuIHggLSBuICogTWF0aC5mbG9vcih4IC8gbik7XG59XG5mdW5jdGlvbiBwYWRTdGFydChpbnB1dCwgbiA9IDIpIHtcbiAgY29uc3QgaXNOZWcgPSBpbnB1dCA8IDA7XG4gIGxldCBwYWRkZWQ7XG5cbiAgaWYgKGlzTmVnKSB7XG4gICAgcGFkZGVkID0gXCItXCIgKyAoXCJcIiArIC1pbnB1dCkucGFkU3RhcnQobiwgXCIwXCIpO1xuICB9IGVsc2Uge1xuICAgIHBhZGRlZCA9IChcIlwiICsgaW5wdXQpLnBhZFN0YXJ0KG4sIFwiMFwiKTtcbiAgfVxuXG4gIHJldHVybiBwYWRkZWQ7XG59XG5mdW5jdGlvbiBwYXJzZUludGVnZXIoc3RyaW5nKSB7XG4gIGlmIChpc1VuZGVmaW5lZChzdHJpbmcpIHx8IHN0cmluZyA9PT0gbnVsbCB8fCBzdHJpbmcgPT09IFwiXCIpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUludChzdHJpbmcsIDEwKTtcbiAgfVxufVxuZnVuY3Rpb24gcGFyc2VGbG9hdGluZyhzdHJpbmcpIHtcbiAgaWYgKGlzVW5kZWZpbmVkKHN0cmluZykgfHwgc3RyaW5nID09PSBudWxsIHx8IHN0cmluZyA9PT0gXCJcIikge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQoc3RyaW5nKTtcbiAgfVxufVxuZnVuY3Rpb24gcGFyc2VNaWxsaXMoZnJhY3Rpb24pIHtcbiAgLy8gUmV0dXJuIHVuZGVmaW5lZCAoaW5zdGVhZCBvZiAwKSBpbiB0aGVzZSBjYXNlcywgd2hlcmUgZnJhY3Rpb24gaXMgbm90IHNldFxuICBpZiAoaXNVbmRlZmluZWQoZnJhY3Rpb24pIHx8IGZyYWN0aW9uID09PSBudWxsIHx8IGZyYWN0aW9uID09PSBcIlwiKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmID0gcGFyc2VGbG9hdChcIjAuXCIgKyBmcmFjdGlvbikgKiAxMDAwO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGYpO1xuICB9XG59XG5mdW5jdGlvbiByb3VuZFRvKG51bWJlciwgZGlnaXRzLCB0b3dhcmRaZXJvID0gZmFsc2UpIHtcbiAgY29uc3QgZmFjdG9yID0gMTAgKiogZGlnaXRzLFxuICAgICAgICByb3VuZGVyID0gdG93YXJkWmVybyA/IE1hdGgudHJ1bmMgOiBNYXRoLnJvdW5kO1xuICByZXR1cm4gcm91bmRlcihudW1iZXIgKiBmYWN0b3IpIC8gZmFjdG9yO1xufSAvLyBEQVRFIEJBU0lDU1xuXG5mdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgcmV0dXJuIHllYXIgJSA0ID09PSAwICYmICh5ZWFyICUgMTAwICE9PSAwIHx8IHllYXIgJSA0MDAgPT09IDApO1xufVxuZnVuY3Rpb24gZGF5c0luWWVhcih5ZWFyKSB7XG4gIHJldHVybiBpc0xlYXBZZWFyKHllYXIpID8gMzY2IDogMzY1O1xufVxuZnVuY3Rpb24gZGF5c0luTW9udGgoeWVhciwgbW9udGgpIHtcbiAgY29uc3QgbW9kTW9udGggPSBmbG9vck1vZChtb250aCAtIDEsIDEyKSArIDEsXG4gICAgICAgIG1vZFllYXIgPSB5ZWFyICsgKG1vbnRoIC0gbW9kTW9udGgpIC8gMTI7XG5cbiAgaWYgKG1vZE1vbnRoID09PSAyKSB7XG4gICAgcmV0dXJuIGlzTGVhcFllYXIobW9kWWVhcikgPyAyOSA6IDI4O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXVttb2RNb250aCAtIDFdO1xuICB9XG59IC8vIGNvdmVydCBhIGNhbGVuZGFyIG9iamVjdCB0byBhIGxvY2FsIHRpbWVzdGFtcCAoZXBvY2gsIGJ1dCB3aXRoIHRoZSBvZmZzZXQgYmFrZWQgaW4pXG5cbmZ1bmN0aW9uIG9ialRvTG9jYWxUUyhvYmopIHtcbiAgbGV0IGQgPSBEYXRlLlVUQyhvYmoueWVhciwgb2JqLm1vbnRoIC0gMSwgb2JqLmRheSwgb2JqLmhvdXIsIG9iai5taW51dGUsIG9iai5zZWNvbmQsIG9iai5taWxsaXNlY29uZCk7IC8vIGZvciBsZWdhY3kgcmVhc29ucywgeWVhcnMgYmV0d2VlbiAwIGFuZCA5OSBhcmUgaW50ZXJwcmV0ZWQgYXMgMTlYWDsgcmV2ZXJ0IHRoYXRcblxuICBpZiAob2JqLnllYXIgPCAxMDAgJiYgb2JqLnllYXIgPj0gMCkge1xuICAgIGQgPSBuZXcgRGF0ZShkKTtcbiAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApO1xuICB9XG5cbiAgcmV0dXJuICtkO1xufVxuZnVuY3Rpb24gd2Vla3NJbldlZWtZZWFyKHdlZWtZZWFyKSB7XG4gIGNvbnN0IHAxID0gKHdlZWtZZWFyICsgTWF0aC5mbG9vcih3ZWVrWWVhciAvIDQpIC0gTWF0aC5mbG9vcih3ZWVrWWVhciAvIDEwMCkgKyBNYXRoLmZsb29yKHdlZWtZZWFyIC8gNDAwKSkgJSA3LFxuICAgICAgICBsYXN0ID0gd2Vla1llYXIgLSAxLFxuICAgICAgICBwMiA9IChsYXN0ICsgTWF0aC5mbG9vcihsYXN0IC8gNCkgLSBNYXRoLmZsb29yKGxhc3QgLyAxMDApICsgTWF0aC5mbG9vcihsYXN0IC8gNDAwKSkgJSA3O1xuICByZXR1cm4gcDEgPT09IDQgfHwgcDIgPT09IDMgPyA1MyA6IDUyO1xufVxuZnVuY3Rpb24gdW50cnVuY2F0ZVllYXIoeWVhcikge1xuICBpZiAoeWVhciA+IDk5KSB7XG4gICAgcmV0dXJuIHllYXI7XG4gIH0gZWxzZSByZXR1cm4geWVhciA+IDYwID8gMTkwMCArIHllYXIgOiAyMDAwICsgeWVhcjtcbn0gLy8gUEFSU0lOR1xuXG5mdW5jdGlvbiBwYXJzZVpvbmVJbmZvKHRzLCBvZmZzZXRGb3JtYXQsIGxvY2FsZSwgdGltZVpvbmUgPSBudWxsKSB7XG4gIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0cyksXG4gICAgICAgIGludGxPcHRzID0ge1xuICAgIGhvdXJDeWNsZTogXCJoMjNcIixcbiAgICB5ZWFyOiBcIm51bWVyaWNcIixcbiAgICBtb250aDogXCIyLWRpZ2l0XCIsXG4gICAgZGF5OiBcIjItZGlnaXRcIixcbiAgICBob3VyOiBcIjItZGlnaXRcIixcbiAgICBtaW51dGU6IFwiMi1kaWdpdFwiXG4gIH07XG5cbiAgaWYgKHRpbWVab25lKSB7XG4gICAgaW50bE9wdHMudGltZVpvbmUgPSB0aW1lWm9uZTtcbiAgfVxuXG4gIGNvbnN0IG1vZGlmaWVkID0ge1xuICAgIHRpbWVab25lTmFtZTogb2Zmc2V0Rm9ybWF0LFxuICAgIC4uLmludGxPcHRzXG4gIH07XG4gIGNvbnN0IHBhcnNlZCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgbW9kaWZpZWQpLmZvcm1hdFRvUGFydHMoZGF0ZSkuZmluZChtID0+IG0udHlwZS50b0xvd2VyQ2FzZSgpID09PSBcInRpbWV6b25lbmFtZVwiKTtcbiAgcmV0dXJuIHBhcnNlZCA/IHBhcnNlZC52YWx1ZSA6IG51bGw7XG59IC8vIHNpZ25lZE9mZnNldCgnLTUnLCAnMzAnKSAtPiAtMzMwXG5cbmZ1bmN0aW9uIHNpZ25lZE9mZnNldChvZmZIb3VyU3RyLCBvZmZNaW51dGVTdHIpIHtcbiAgbGV0IG9mZkhvdXIgPSBwYXJzZUludChvZmZIb3VyU3RyLCAxMCk7IC8vIGRvbid0IHx8IHRoaXMgYmVjYXVzZSB3ZSB3YW50IHRvIHByZXNlcnZlIC0wXG5cbiAgaWYgKE51bWJlci5pc05hTihvZmZIb3VyKSkge1xuICAgIG9mZkhvdXIgPSAwO1xuICB9XG5cbiAgY29uc3Qgb2ZmTWluID0gcGFyc2VJbnQob2ZmTWludXRlU3RyLCAxMCkgfHwgMCxcbiAgICAgICAgb2ZmTWluU2lnbmVkID0gb2ZmSG91ciA8IDAgfHwgT2JqZWN0LmlzKG9mZkhvdXIsIC0wKSA/IC1vZmZNaW4gOiBvZmZNaW47XG4gIHJldHVybiBvZmZIb3VyICogNjAgKyBvZmZNaW5TaWduZWQ7XG59IC8vIENPRVJDSU9OXG5cbmZ1bmN0aW9uIGFzTnVtYmVyKHZhbHVlKSB7XG4gIGNvbnN0IG51bWVyaWNWYWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiIHx8IHZhbHVlID09PSBcIlwiIHx8IE51bWJlci5pc05hTihudW1lcmljVmFsdWUpKSB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYEludmFsaWQgdW5pdCB2YWx1ZSAke3ZhbHVlfWApO1xuICByZXR1cm4gbnVtZXJpY1ZhbHVlO1xufVxuZnVuY3Rpb24gbm9ybWFsaXplT2JqZWN0KG9iaiwgbm9ybWFsaXplcikge1xuICBjb25zdCBub3JtYWxpemVkID0ge307XG5cbiAgZm9yIChjb25zdCB1IGluIG9iaikge1xuICAgIGlmIChoYXNPd25Qcm9wZXJ0eShvYmosIHUpKSB7XG4gICAgICBjb25zdCB2ID0gb2JqW3VdO1xuICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCB8fCB2ID09PSBudWxsKSBjb250aW51ZTtcbiAgICAgIG5vcm1hbGl6ZWRbbm9ybWFsaXplcih1KV0gPSBhc051bWJlcih2KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZDtcbn1cbmZ1bmN0aW9uIGZvcm1hdE9mZnNldChvZmZzZXQsIGZvcm1hdCkge1xuICBjb25zdCBob3VycyA9IE1hdGgudHJ1bmMoTWF0aC5hYnMob2Zmc2V0IC8gNjApKSxcbiAgICAgICAgbWludXRlcyA9IE1hdGgudHJ1bmMoTWF0aC5hYnMob2Zmc2V0ICUgNjApKSxcbiAgICAgICAgc2lnbiA9IG9mZnNldCA+PSAwID8gXCIrXCIgOiBcIi1cIjtcblxuICBzd2l0Y2ggKGZvcm1hdCkge1xuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIGAke3NpZ259JHtwYWRTdGFydChob3VycywgMil9OiR7cGFkU3RhcnQobWludXRlcywgMil9YDtcblxuICAgIGNhc2UgXCJuYXJyb3dcIjpcbiAgICAgIHJldHVybiBgJHtzaWdufSR7aG91cnN9JHttaW51dGVzID4gMCA/IGA6JHttaW51dGVzfWAgOiBcIlwifWA7XG5cbiAgICBjYXNlIFwidGVjaGllXCI6XG4gICAgICByZXR1cm4gYCR7c2lnbn0ke3BhZFN0YXJ0KGhvdXJzLCAyKX0ke3BhZFN0YXJ0KG1pbnV0ZXMsIDIpfWA7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYFZhbHVlIGZvcm1hdCAke2Zvcm1hdH0gaXMgb3V0IG9mIHJhbmdlIGZvciBwcm9wZXJ0eSBmb3JtYXRgKTtcbiAgfVxufVxuZnVuY3Rpb24gdGltZU9iamVjdChvYmopIHtcbiAgcmV0dXJuIHBpY2sob2JqLCBbXCJob3VyXCIsIFwibWludXRlXCIsIFwic2Vjb25kXCIsIFwibWlsbGlzZWNvbmRcIl0pO1xufVxuY29uc3QgaWFuYVJlZ2V4ID0gL1tBLVphLXpfKy1dezEsMjU2fSg/Ojo/XFwvW0EtWmEtejAtOV8rLV17MSwyNTZ9KD86XFwvW0EtWmEtejAtOV8rLV17MSwyNTZ9KT8pPy87XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5cbmNvbnN0IG1vbnRoc0xvbmcgPSBbXCJKYW51YXJ5XCIsIFwiRmVicnVhcnlcIiwgXCJNYXJjaFwiLCBcIkFwcmlsXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWd1c3RcIiwgXCJTZXB0ZW1iZXJcIiwgXCJPY3RvYmVyXCIsIFwiTm92ZW1iZXJcIiwgXCJEZWNlbWJlclwiXTtcbmNvbnN0IG1vbnRoc1Nob3J0ID0gW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuXCIsIFwiSnVsXCIsIFwiQXVnXCIsIFwiU2VwXCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdO1xuY29uc3QgbW9udGhzTmFycm93ID0gW1wiSlwiLCBcIkZcIiwgXCJNXCIsIFwiQVwiLCBcIk1cIiwgXCJKXCIsIFwiSlwiLCBcIkFcIiwgXCJTXCIsIFwiT1wiLCBcIk5cIiwgXCJEXCJdO1xuZnVuY3Rpb24gbW9udGhzKGxlbmd0aCkge1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgXCJuYXJyb3dcIjpcbiAgICAgIHJldHVybiBbLi4ubW9udGhzTmFycm93XTtcblxuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNTaG9ydF07XG5cbiAgICBjYXNlIFwibG9uZ1wiOlxuICAgICAgcmV0dXJuIFsuLi5tb250aHNMb25nXTtcblxuICAgIGNhc2UgXCJudW1lcmljXCI6XG4gICAgICByZXR1cm4gW1wiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCIsIFwiMTBcIiwgXCIxMVwiLCBcIjEyXCJdO1xuXG4gICAgY2FzZSBcIjItZGlnaXRcIjpcbiAgICAgIHJldHVybiBbXCIwMVwiLCBcIjAyXCIsIFwiMDNcIiwgXCIwNFwiLCBcIjA1XCIsIFwiMDZcIiwgXCIwN1wiLCBcIjA4XCIsIFwiMDlcIiwgXCIxMFwiLCBcIjExXCIsIFwiMTJcIl07XG5cbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbmNvbnN0IHdlZWtkYXlzTG9uZyA9IFtcIk1vbmRheVwiLCBcIlR1ZXNkYXlcIiwgXCJXZWRuZXNkYXlcIiwgXCJUaHVyc2RheVwiLCBcIkZyaWRheVwiLCBcIlNhdHVyZGF5XCIsIFwiU3VuZGF5XCJdO1xuY29uc3Qgd2Vla2RheXNTaG9ydCA9IFtcIk1vblwiLCBcIlR1ZVwiLCBcIldlZFwiLCBcIlRodVwiLCBcIkZyaVwiLCBcIlNhdFwiLCBcIlN1blwiXTtcbmNvbnN0IHdlZWtkYXlzTmFycm93ID0gW1wiTVwiLCBcIlRcIiwgXCJXXCIsIFwiVFwiLCBcIkZcIiwgXCJTXCIsIFwiU1wiXTtcbmZ1bmN0aW9uIHdlZWtkYXlzKGxlbmd0aCkge1xuICBzd2l0Y2ggKGxlbmd0aCkge1xuICAgIGNhc2UgXCJuYXJyb3dcIjpcbiAgICAgIHJldHVybiBbLi4ud2Vla2RheXNOYXJyb3ddO1xuXG4gICAgY2FzZSBcInNob3J0XCI6XG4gICAgICByZXR1cm4gWy4uLndlZWtkYXlzU2hvcnRdO1xuXG4gICAgY2FzZSBcImxvbmdcIjpcbiAgICAgIHJldHVybiBbLi4ud2Vla2RheXNMb25nXTtcblxuICAgIGNhc2UgXCJudW1lcmljXCI6XG4gICAgICByZXR1cm4gW1wiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiXTtcblxuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gbnVsbDtcbiAgfVxufVxuY29uc3QgbWVyaWRpZW1zID0gW1wiQU1cIiwgXCJQTVwiXTtcbmNvbnN0IGVyYXNMb25nID0gW1wiQmVmb3JlIENocmlzdFwiLCBcIkFubm8gRG9taW5pXCJdO1xuY29uc3QgZXJhc1Nob3J0ID0gW1wiQkNcIiwgXCJBRFwiXTtcbmNvbnN0IGVyYXNOYXJyb3cgPSBbXCJCXCIsIFwiQVwiXTtcbmZ1bmN0aW9uIGVyYXMobGVuZ3RoKSB7XG4gIHN3aXRjaCAobGVuZ3RoKSB7XG4gICAgY2FzZSBcIm5hcnJvd1wiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzTmFycm93XTtcblxuICAgIGNhc2UgXCJzaG9ydFwiOlxuICAgICAgcmV0dXJuIFsuLi5lcmFzU2hvcnRdO1xuXG4gICAgY2FzZSBcImxvbmdcIjpcbiAgICAgIHJldHVybiBbLi4uZXJhc0xvbmddO1xuXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBudWxsO1xuICB9XG59XG5mdW5jdGlvbiBtZXJpZGllbUZvckRhdGVUaW1lKGR0KSB7XG4gIHJldHVybiBtZXJpZGllbXNbZHQuaG91ciA8IDEyID8gMCA6IDFdO1xufVxuZnVuY3Rpb24gd2Vla2RheUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIHdlZWtkYXlzKGxlbmd0aClbZHQud2Vla2RheSAtIDFdO1xufVxuZnVuY3Rpb24gbW9udGhGb3JEYXRlVGltZShkdCwgbGVuZ3RoKSB7XG4gIHJldHVybiBtb250aHMobGVuZ3RoKVtkdC5tb250aCAtIDFdO1xufVxuZnVuY3Rpb24gZXJhRm9yRGF0ZVRpbWUoZHQsIGxlbmd0aCkge1xuICByZXR1cm4gZXJhcyhsZW5ndGgpW2R0LnllYXIgPCAwID8gMCA6IDFdO1xufVxuZnVuY3Rpb24gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCBudW1lcmljID0gXCJhbHdheXNcIiwgbmFycm93ID0gZmFsc2UpIHtcbiAgY29uc3QgdW5pdHMgPSB7XG4gICAgeWVhcnM6IFtcInllYXJcIiwgXCJ5ci5cIl0sXG4gICAgcXVhcnRlcnM6IFtcInF1YXJ0ZXJcIiwgXCJxdHIuXCJdLFxuICAgIG1vbnRoczogW1wibW9udGhcIiwgXCJtby5cIl0sXG4gICAgd2Vla3M6IFtcIndlZWtcIiwgXCJ3ay5cIl0sXG4gICAgZGF5czogW1wiZGF5XCIsIFwiZGF5XCIsIFwiZGF5c1wiXSxcbiAgICBob3VyczogW1wiaG91clwiLCBcImhyLlwiXSxcbiAgICBtaW51dGVzOiBbXCJtaW51dGVcIiwgXCJtaW4uXCJdLFxuICAgIHNlY29uZHM6IFtcInNlY29uZFwiLCBcInNlYy5cIl1cbiAgfTtcbiAgY29uc3QgbGFzdGFibGUgPSBbXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdLmluZGV4T2YodW5pdCkgPT09IC0xO1xuXG4gIGlmIChudW1lcmljID09PSBcImF1dG9cIiAmJiBsYXN0YWJsZSkge1xuICAgIGNvbnN0IGlzRGF5ID0gdW5pdCA9PT0gXCJkYXlzXCI7XG5cbiAgICBzd2l0Y2ggKGNvdW50KSB7XG4gICAgICBjYXNlIDE6XG4gICAgICAgIHJldHVybiBpc0RheSA/IFwidG9tb3Jyb3dcIiA6IGBuZXh0ICR7dW5pdHNbdW5pdF1bMF19YDtcblxuICAgICAgY2FzZSAtMTpcbiAgICAgICAgcmV0dXJuIGlzRGF5ID8gXCJ5ZXN0ZXJkYXlcIiA6IGBsYXN0ICR7dW5pdHNbdW5pdF1bMF19YDtcblxuICAgICAgY2FzZSAwOlxuICAgICAgICByZXR1cm4gaXNEYXkgPyBcInRvZGF5XCIgOiBgdGhpcyAke3VuaXRzW3VuaXRdWzBdfWA7XG5cbiAgICB9XG4gIH1cblxuICBjb25zdCBpc0luUGFzdCA9IE9iamVjdC5pcyhjb3VudCwgLTApIHx8IGNvdW50IDwgMCxcbiAgICAgICAgZm10VmFsdWUgPSBNYXRoLmFicyhjb3VudCksXG4gICAgICAgIHNpbmd1bGFyID0gZm10VmFsdWUgPT09IDEsXG4gICAgICAgIGxpbFVuaXRzID0gdW5pdHNbdW5pdF0sXG4gICAgICAgIGZtdFVuaXQgPSBuYXJyb3cgPyBzaW5ndWxhciA/IGxpbFVuaXRzWzFdIDogbGlsVW5pdHNbMl0gfHwgbGlsVW5pdHNbMV0gOiBzaW5ndWxhciA/IHVuaXRzW3VuaXRdWzBdIDogdW5pdDtcbiAgcmV0dXJuIGlzSW5QYXN0ID8gYCR7Zm10VmFsdWV9ICR7Zm10VW5pdH0gYWdvYCA6IGBpbiAke2ZtdFZhbHVlfSAke2ZtdFVuaXR9YDtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5VG9rZW5zKHNwbGl0cywgdG9rZW5Ub1N0cmluZykge1xuICBsZXQgcyA9IFwiXCI7XG5cbiAgZm9yIChjb25zdCB0b2tlbiBvZiBzcGxpdHMpIHtcbiAgICBpZiAodG9rZW4ubGl0ZXJhbCkge1xuICAgICAgcyArPSB0b2tlbi52YWw7XG4gICAgfSBlbHNlIHtcbiAgICAgIHMgKz0gdG9rZW5Ub1N0cmluZyh0b2tlbi52YWwpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzO1xufVxuXG5jb25zdCBtYWNyb1Rva2VuVG9Gb3JtYXRPcHRzID0ge1xuICBEOiBEQVRFX1NIT1JULFxuICBERDogREFURV9NRUQsXG4gIERERDogREFURV9GVUxMLFxuICBEREREOiBEQVRFX0hVR0UsXG4gIHQ6IFRJTUVfU0lNUExFLFxuICB0dDogVElNRV9XSVRIX1NFQ09ORFMsXG4gIHR0dDogVElNRV9XSVRIX1NIT1JUX09GRlNFVCxcbiAgdHR0dDogVElNRV9XSVRIX0xPTkdfT0ZGU0VULFxuICBUOiBUSU1FXzI0X1NJTVBMRSxcbiAgVFQ6IFRJTUVfMjRfV0lUSF9TRUNPTkRTLFxuICBUVFQ6IFRJTUVfMjRfV0lUSF9TSE9SVF9PRkZTRVQsXG4gIFRUVFQ6IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCxcbiAgZjogREFURVRJTUVfU0hPUlQsXG4gIGZmOiBEQVRFVElNRV9NRUQsXG4gIGZmZjogREFURVRJTUVfRlVMTCxcbiAgZmZmZjogREFURVRJTUVfSFVHRSxcbiAgRjogREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTLFxuICBGRjogREFURVRJTUVfTUVEX1dJVEhfU0VDT05EUyxcbiAgRkZGOiBEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUyxcbiAgRkZGRjogREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFNcbn07XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuY2xhc3MgRm9ybWF0dGVyIHtcbiAgc3RhdGljIGNyZWF0ZShsb2NhbGUsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgRm9ybWF0dGVyKGxvY2FsZSwgb3B0cyk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2VGb3JtYXQoZm10KSB7XG4gICAgbGV0IGN1cnJlbnQgPSBudWxsLFxuICAgICAgICBjdXJyZW50RnVsbCA9IFwiXCIsXG4gICAgICAgIGJyYWNrZXRlZCA9IGZhbHNlO1xuICAgIGNvbnN0IHNwbGl0cyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmbXQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGMgPSBmbXQuY2hhckF0KGkpO1xuXG4gICAgICBpZiAoYyA9PT0gXCInXCIpIHtcbiAgICAgICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzcGxpdHMucHVzaCh7XG4gICAgICAgICAgICBsaXRlcmFsOiBicmFja2V0ZWQsXG4gICAgICAgICAgICB2YWw6IGN1cnJlbnRGdWxsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjdXJyZW50ID0gbnVsbDtcbiAgICAgICAgY3VycmVudEZ1bGwgPSBcIlwiO1xuICAgICAgICBicmFja2V0ZWQgPSAhYnJhY2tldGVkO1xuICAgICAgfSBlbHNlIGlmIChicmFja2V0ZWQpIHtcbiAgICAgICAgY3VycmVudEZ1bGwgKz0gYztcbiAgICAgIH0gZWxzZSBpZiAoYyA9PT0gY3VycmVudCkge1xuICAgICAgICBjdXJyZW50RnVsbCArPSBjO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBzcGxpdHMucHVzaCh7XG4gICAgICAgICAgICBsaXRlcmFsOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbDogY3VycmVudEZ1bGxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGN1cnJlbnRGdWxsID0gYztcbiAgICAgICAgY3VycmVudCA9IGM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGN1cnJlbnRGdWxsLmxlbmd0aCA+IDApIHtcbiAgICAgIHNwbGl0cy5wdXNoKHtcbiAgICAgICAgbGl0ZXJhbDogYnJhY2tldGVkLFxuICAgICAgICB2YWw6IGN1cnJlbnRGdWxsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3BsaXRzO1xuICB9XG5cbiAgc3RhdGljIG1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHModG9rZW4pIHtcbiAgICByZXR1cm4gbWFjcm9Ub2tlblRvRm9ybWF0T3B0c1t0b2tlbl07XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihsb2NhbGUsIGZvcm1hdE9wdHMpIHtcbiAgICB0aGlzLm9wdHMgPSBmb3JtYXRPcHRzO1xuICAgIHRoaXMubG9jID0gbG9jYWxlO1xuICAgIHRoaXMuc3lzdGVtTG9jID0gbnVsbDtcbiAgfVxuXG4gIGZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0KGR0LCBvcHRzKSB7XG4gICAgaWYgKHRoaXMuc3lzdGVtTG9jID09PSBudWxsKSB7XG4gICAgICB0aGlzLnN5c3RlbUxvYyA9IHRoaXMubG9jLnJlZGVmYXVsdFRvU3lzdGVtKCk7XG4gICAgfVxuXG4gICAgY29uc3QgZGYgPSB0aGlzLnN5c3RlbUxvYy5kdEZvcm1hdHRlcihkdCwgeyAuLi50aGlzLm9wdHMsXG4gICAgICAuLi5vcHRzXG4gICAgfSk7XG4gICAgcmV0dXJuIGRmLmZvcm1hdCgpO1xuICB9XG5cbiAgZm9ybWF0RGF0ZVRpbWUoZHQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGRmID0gdGhpcy5sb2MuZHRGb3JtYXR0ZXIoZHQsIHsgLi4udGhpcy5vcHRzLFxuICAgICAgLi4ub3B0c1xuICAgIH0pO1xuICAgIHJldHVybiBkZi5mb3JtYXQoKTtcbiAgfVxuXG4gIGZvcm1hdERhdGVUaW1lUGFydHMoZHQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGRmID0gdGhpcy5sb2MuZHRGb3JtYXR0ZXIoZHQsIHsgLi4udGhpcy5vcHRzLFxuICAgICAgLi4ub3B0c1xuICAgIH0pO1xuICAgIHJldHVybiBkZi5mb3JtYXRUb1BhcnRzKCk7XG4gIH1cblxuICByZXNvbHZlZE9wdGlvbnMoZHQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IGRmID0gdGhpcy5sb2MuZHRGb3JtYXR0ZXIoZHQsIHsgLi4udGhpcy5vcHRzLFxuICAgICAgLi4ub3B0c1xuICAgIH0pO1xuICAgIHJldHVybiBkZi5yZXNvbHZlZE9wdGlvbnMoKTtcbiAgfVxuXG4gIG51bShuLCBwID0gMCkge1xuICAgIC8vIHdlIGdldCBzb21lIHBlcmYgb3V0IG9mIGRvaW5nIHRoaXMgaGVyZSwgYW5ub3lpbmdseVxuICAgIGlmICh0aGlzLm9wdHMuZm9yY2VTaW1wbGUpIHtcbiAgICAgIHJldHVybiBwYWRTdGFydChuLCBwKTtcbiAgICB9XG5cbiAgICBjb25zdCBvcHRzID0geyAuLi50aGlzLm9wdHNcbiAgICB9O1xuXG4gICAgaWYgKHAgPiAwKSB7XG4gICAgICBvcHRzLnBhZFRvID0gcDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5sb2MubnVtYmVyRm9ybWF0dGVyKG9wdHMpLmZvcm1hdChuKTtcbiAgfVxuXG4gIGZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyhkdCwgZm10KSB7XG4gICAgY29uc3Qga25vd25FbmdsaXNoID0gdGhpcy5sb2MubGlzdGluZ01vZGUoKSA9PT0gXCJlblwiLFxuICAgICAgICAgIHVzZURhdGVUaW1lRm9ybWF0dGVyID0gdGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXIgJiYgdGhpcy5sb2Mub3V0cHV0Q2FsZW5kYXIgIT09IFwiZ3JlZ29yeVwiLFxuICAgICAgICAgIHN0cmluZyA9IChvcHRzLCBleHRyYWN0KSA9PiB0aGlzLmxvYy5leHRyYWN0KGR0LCBvcHRzLCBleHRyYWN0KSxcbiAgICAgICAgICBmb3JtYXRPZmZzZXQgPSBvcHRzID0+IHtcbiAgICAgIGlmIChkdC5pc09mZnNldEZpeGVkICYmIGR0Lm9mZnNldCA9PT0gMCAmJiBvcHRzLmFsbG93Wikge1xuICAgICAgICByZXR1cm4gXCJaXCI7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkdC5pc1ZhbGlkID8gZHQuem9uZS5mb3JtYXRPZmZzZXQoZHQudHMsIG9wdHMuZm9ybWF0KSA6IFwiXCI7XG4gICAgfSxcbiAgICAgICAgICBtZXJpZGllbSA9ICgpID0+IGtub3duRW5nbGlzaCA/IG1lcmlkaWVtRm9yRGF0ZVRpbWUoZHQpIDogc3RyaW5nKHtcbiAgICAgIGhvdXI6IFwibnVtZXJpY1wiLFxuICAgICAgaG91ckN5Y2xlOiBcImgxMlwiXG4gICAgfSwgXCJkYXlwZXJpb2RcIiksXG4gICAgICAgICAgbW9udGggPSAobGVuZ3RoLCBzdGFuZGFsb25lKSA9PiBrbm93bkVuZ2xpc2ggPyBtb250aEZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHN0YW5kYWxvbmUgPyB7XG4gICAgICBtb250aDogbGVuZ3RoXG4gICAgfSA6IHtcbiAgICAgIG1vbnRoOiBsZW5ndGgsXG4gICAgICBkYXk6IFwibnVtZXJpY1wiXG4gICAgfSwgXCJtb250aFwiKSxcbiAgICAgICAgICB3ZWVrZGF5ID0gKGxlbmd0aCwgc3RhbmRhbG9uZSkgPT4ga25vd25FbmdsaXNoID8gd2Vla2RheUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHN0YW5kYWxvbmUgPyB7XG4gICAgICB3ZWVrZGF5OiBsZW5ndGhcbiAgICB9IDoge1xuICAgICAgd2Vla2RheTogbGVuZ3RoLFxuICAgICAgbW9udGg6IFwibG9uZ1wiLFxuICAgICAgZGF5OiBcIm51bWVyaWNcIlxuICAgIH0sIFwid2Vla2RheVwiKSxcbiAgICAgICAgICBtYXliZU1hY3JvID0gdG9rZW4gPT4ge1xuICAgICAgY29uc3QgZm9ybWF0T3B0cyA9IEZvcm1hdHRlci5tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuKTtcblxuICAgICAgaWYgKGZvcm1hdE9wdHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybWF0V2l0aFN5c3RlbURlZmF1bHQoZHQsIGZvcm1hdE9wdHMpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRva2VuO1xuICAgICAgfVxuICAgIH0sXG4gICAgICAgICAgZXJhID0gbGVuZ3RoID0+IGtub3duRW5nbGlzaCA/IGVyYUZvckRhdGVUaW1lKGR0LCBsZW5ndGgpIDogc3RyaW5nKHtcbiAgICAgIGVyYTogbGVuZ3RoXG4gICAgfSwgXCJlcmFcIiksXG4gICAgICAgICAgdG9rZW5Ub1N0cmluZyA9IHRva2VuID0+IHtcbiAgICAgIC8vIFdoZXJlIHBvc3NpYmxlOiBodHRwOi8vY2xkci51bmljb2RlLm9yZy90cmFuc2xhdGlvbi9kYXRlLXRpbWUtMS9kYXRlLXRpbWUjVE9DLVN0YW5kYWxvbmUtdnMuLUZvcm1hdC1TdHlsZXNcbiAgICAgIHN3aXRjaCAodG9rZW4pIHtcbiAgICAgICAgLy8gbXNcbiAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQubWlsbGlzZWNvbmQpO1xuXG4gICAgICAgIGNhc2UgXCJ1XCI6IC8vIGZhbGxzIHRocm91Z2hcblxuICAgICAgICBjYXNlIFwiU1NTXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbGxpc2Vjb25kLCAzKTtcbiAgICAgICAgLy8gc2Vjb25kc1xuXG4gICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnNlY29uZCk7XG5cbiAgICAgICAgY2FzZSBcInNzXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnNlY29uZCwgMik7XG4gICAgICAgIC8vIGZyYWN0aW9uYWwgc2Vjb25kc1xuXG4gICAgICAgIGNhc2UgXCJ1dVwiOlxuICAgICAgICAgIHJldHVybiB0aGlzLm51bShNYXRoLmZsb29yKGR0Lm1pbGxpc2Vjb25kIC8gMTApLCAyKTtcblxuICAgICAgICBjYXNlIFwidXV1XCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtKE1hdGguZmxvb3IoZHQubWlsbGlzZWNvbmQgLyAxMDApKTtcbiAgICAgICAgLy8gbWludXRlc1xuXG4gICAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbnV0ZSk7XG5cbiAgICAgICAgY2FzZSBcIm1tXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0Lm1pbnV0ZSwgMik7XG4gICAgICAgIC8vIGhvdXJzXG5cbiAgICAgICAgY2FzZSBcImhcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91ciAlIDEyID09PSAwID8gMTIgOiBkdC5ob3VyICUgMTIpO1xuXG4gICAgICAgIGNhc2UgXCJoaFwiOlxuICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5ob3VyICUgMTIgPT09IDAgPyAxMiA6IGR0LmhvdXIgJSAxMiwgMik7XG5cbiAgICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQuaG91cik7XG5cbiAgICAgICAgY2FzZSBcIkhIXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LmhvdXIsIDIpO1xuICAgICAgICAvLyBvZmZzZXRcblxuICAgICAgICBjYXNlIFwiWlwiOlxuICAgICAgICAgIC8vIGxpa2UgKzZcbiAgICAgICAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHtcbiAgICAgICAgICAgIGZvcm1hdDogXCJuYXJyb3dcIixcbiAgICAgICAgICAgIGFsbG93WjogdGhpcy5vcHRzLmFsbG93WlxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgXCJaWlwiOlxuICAgICAgICAgIC8vIGxpa2UgKzA2OjAwXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7XG4gICAgICAgICAgICBmb3JtYXQ6IFwic2hvcnRcIixcbiAgICAgICAgICAgIGFsbG93WjogdGhpcy5vcHRzLmFsbG93WlxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgXCJaWlpcIjpcbiAgICAgICAgICAvLyBsaWtlICswNjAwXG4gICAgICAgICAgcmV0dXJuIGZvcm1hdE9mZnNldCh7XG4gICAgICAgICAgICBmb3JtYXQ6IFwidGVjaGllXCIsXG4gICAgICAgICAgICBhbGxvd1o6IHRoaXMub3B0cy5hbGxvd1pcbiAgICAgICAgICB9KTtcblxuICAgICAgICBjYXNlIFwiWlpaWlwiOlxuICAgICAgICAgIC8vIGxpa2UgRVNUXG4gICAgICAgICAgcmV0dXJuIGR0LnpvbmUub2Zmc2V0TmFtZShkdC50cywge1xuICAgICAgICAgICAgZm9ybWF0OiBcInNob3J0XCIsXG4gICAgICAgICAgICBsb2NhbGU6IHRoaXMubG9jLmxvY2FsZVxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIGNhc2UgXCJaWlpaWlwiOlxuICAgICAgICAgIC8vIGxpa2UgRWFzdGVybiBTdGFuZGFyZCBUaW1lXG4gICAgICAgICAgcmV0dXJuIGR0LnpvbmUub2Zmc2V0TmFtZShkdC50cywge1xuICAgICAgICAgICAgZm9ybWF0OiBcImxvbmdcIixcbiAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2MubG9jYWxlXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vIHpvbmVcblxuICAgICAgICBjYXNlIFwielwiOlxuICAgICAgICAgIC8vIGxpa2UgQW1lcmljYS9OZXdfWW9ya1xuICAgICAgICAgIHJldHVybiBkdC56b25lTmFtZTtcbiAgICAgICAgLy8gbWVyaWRpZW1zXG5cbiAgICAgICAgY2FzZSBcImFcIjpcbiAgICAgICAgICByZXR1cm4gbWVyaWRpZW0oKTtcbiAgICAgICAgLy8gZGF0ZXNcblxuICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7XG4gICAgICAgICAgICBkYXk6IFwibnVtZXJpY1wiXG4gICAgICAgICAgfSwgXCJkYXlcIikgOiB0aGlzLm51bShkdC5kYXkpO1xuXG4gICAgICAgIGNhc2UgXCJkZFwiOlxuICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7XG4gICAgICAgICAgICBkYXk6IFwiMi1kaWdpdFwiXG4gICAgICAgICAgfSwgXCJkYXlcIikgOiB0aGlzLm51bShkdC5kYXksIDIpO1xuICAgICAgICAvLyB3ZWVrZGF5cyAtIHN0YW5kYWxvbmVcblxuICAgICAgICBjYXNlIFwiY1wiOlxuICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrZGF5KTtcblxuICAgICAgICBjYXNlIFwiY2NjXCI6XG4gICAgICAgICAgLy8gbGlrZSAnVHVlcydcbiAgICAgICAgICByZXR1cm4gd2Vla2RheShcInNob3J0XCIsIHRydWUpO1xuXG4gICAgICAgIGNhc2UgXCJjY2NjXCI6XG4gICAgICAgICAgLy8gbGlrZSAnVHVlc2RheSdcbiAgICAgICAgICByZXR1cm4gd2Vla2RheShcImxvbmdcIiwgdHJ1ZSk7XG5cbiAgICAgICAgY2FzZSBcImNjY2NjXCI6XG4gICAgICAgICAgLy8gbGlrZSAnVCdcbiAgICAgICAgICByZXR1cm4gd2Vla2RheShcIm5hcnJvd1wiLCB0cnVlKTtcbiAgICAgICAgLy8gd2Vla2RheXMgLSBmb3JtYXRcblxuICAgICAgICBjYXNlIFwiRVwiOlxuICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrZGF5KTtcblxuICAgICAgICBjYXNlIFwiRUVFXCI6XG4gICAgICAgICAgLy8gbGlrZSAnVHVlcydcbiAgICAgICAgICByZXR1cm4gd2Vla2RheShcInNob3J0XCIsIGZhbHNlKTtcblxuICAgICAgICBjYXNlIFwiRUVFRVwiOlxuICAgICAgICAgIC8vIGxpa2UgJ1R1ZXNkYXknXG4gICAgICAgICAgcmV0dXJuIHdlZWtkYXkoXCJsb25nXCIsIGZhbHNlKTtcblxuICAgICAgICBjYXNlIFwiRUVFRUVcIjpcbiAgICAgICAgICAvLyBsaWtlICdUJ1xuICAgICAgICAgIHJldHVybiB3ZWVrZGF5KFwibmFycm93XCIsIGZhbHNlKTtcbiAgICAgICAgLy8gbW9udGhzIC0gc3RhbmRhbG9uZVxuXG4gICAgICAgIGNhc2UgXCJMXCI6XG4gICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHtcbiAgICAgICAgICAgIG1vbnRoOiBcIm51bWVyaWNcIixcbiAgICAgICAgICAgIGRheTogXCJudW1lcmljXCJcbiAgICAgICAgICB9LCBcIm1vbnRoXCIpIDogdGhpcy5udW0oZHQubW9udGgpO1xuXG4gICAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICAgIC8vIGxpa2UgMDEsIGRvZXNuJ3Qgc2VlbSB0byB3b3JrXG4gICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHtcbiAgICAgICAgICAgIG1vbnRoOiBcIjItZGlnaXRcIixcbiAgICAgICAgICAgIGRheTogXCJudW1lcmljXCJcbiAgICAgICAgICB9LCBcIm1vbnRoXCIpIDogdGhpcy5udW0oZHQubW9udGgsIDIpO1xuXG4gICAgICAgIGNhc2UgXCJMTExcIjpcbiAgICAgICAgICAvLyBsaWtlIEphblxuICAgICAgICAgIHJldHVybiBtb250aChcInNob3J0XCIsIHRydWUpO1xuXG4gICAgICAgIGNhc2UgXCJMTExMXCI6XG4gICAgICAgICAgLy8gbGlrZSBKYW51YXJ5XG4gICAgICAgICAgcmV0dXJuIG1vbnRoKFwibG9uZ1wiLCB0cnVlKTtcblxuICAgICAgICBjYXNlIFwiTExMTExcIjpcbiAgICAgICAgICAvLyBsaWtlIEpcbiAgICAgICAgICByZXR1cm4gbW9udGgoXCJuYXJyb3dcIiwgdHJ1ZSk7XG4gICAgICAgIC8vIG1vbnRocyAtIGZvcm1hdFxuXG4gICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgLy8gbGlrZSAxXG4gICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHtcbiAgICAgICAgICAgIG1vbnRoOiBcIm51bWVyaWNcIlxuICAgICAgICAgIH0sIFwibW9udGhcIikgOiB0aGlzLm51bShkdC5tb250aCk7XG5cbiAgICAgICAgY2FzZSBcIk1NXCI6XG4gICAgICAgICAgLy8gbGlrZSAwMVxuICAgICAgICAgIHJldHVybiB1c2VEYXRlVGltZUZvcm1hdHRlciA/IHN0cmluZyh7XG4gICAgICAgICAgICBtb250aDogXCIyLWRpZ2l0XCJcbiAgICAgICAgICB9LCBcIm1vbnRoXCIpIDogdGhpcy5udW0oZHQubW9udGgsIDIpO1xuXG4gICAgICAgIGNhc2UgXCJNTU1cIjpcbiAgICAgICAgICAvLyBsaWtlIEphblxuICAgICAgICAgIHJldHVybiBtb250aChcInNob3J0XCIsIGZhbHNlKTtcblxuICAgICAgICBjYXNlIFwiTU1NTVwiOlxuICAgICAgICAgIC8vIGxpa2UgSmFudWFyeVxuICAgICAgICAgIHJldHVybiBtb250aChcImxvbmdcIiwgZmFsc2UpO1xuXG4gICAgICAgIGNhc2UgXCJNTU1NTVwiOlxuICAgICAgICAgIC8vIGxpa2UgSlxuICAgICAgICAgIHJldHVybiBtb250aChcIm5hcnJvd1wiLCBmYWxzZSk7XG4gICAgICAgIC8vIHllYXJzXG5cbiAgICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgICAvLyBsaWtlIDIwMTRcbiAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoe1xuICAgICAgICAgICAgeWVhcjogXCJudW1lcmljXCJcbiAgICAgICAgICB9LCBcInllYXJcIikgOiB0aGlzLm51bShkdC55ZWFyKTtcblxuICAgICAgICBjYXNlIFwieXlcIjpcbiAgICAgICAgICAvLyBsaWtlIDE0XG4gICAgICAgICAgcmV0dXJuIHVzZURhdGVUaW1lRm9ybWF0dGVyID8gc3RyaW5nKHtcbiAgICAgICAgICAgIHllYXI6IFwiMi1kaWdpdFwiXG4gICAgICAgICAgfSwgXCJ5ZWFyXCIpIDogdGhpcy5udW0oZHQueWVhci50b1N0cmluZygpLnNsaWNlKC0yKSwgMik7XG5cbiAgICAgICAgY2FzZSBcInl5eXlcIjpcbiAgICAgICAgICAvLyBsaWtlIDAwMTJcbiAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoe1xuICAgICAgICAgICAgeWVhcjogXCJudW1lcmljXCJcbiAgICAgICAgICB9LCBcInllYXJcIikgOiB0aGlzLm51bShkdC55ZWFyLCA0KTtcblxuICAgICAgICBjYXNlIFwieXl5eXl5XCI6XG4gICAgICAgICAgLy8gbGlrZSAwMDAwMTJcbiAgICAgICAgICByZXR1cm4gdXNlRGF0ZVRpbWVGb3JtYXR0ZXIgPyBzdHJpbmcoe1xuICAgICAgICAgICAgeWVhcjogXCJudW1lcmljXCJcbiAgICAgICAgICB9LCBcInllYXJcIikgOiB0aGlzLm51bShkdC55ZWFyLCA2KTtcbiAgICAgICAgLy8gZXJhc1xuXG4gICAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgICAgLy8gbGlrZSBBRFxuICAgICAgICAgIHJldHVybiBlcmEoXCJzaG9ydFwiKTtcblxuICAgICAgICBjYXNlIFwiR0dcIjpcbiAgICAgICAgICAvLyBsaWtlIEFubm8gRG9taW5pXG4gICAgICAgICAgcmV0dXJuIGVyYShcImxvbmdcIik7XG5cbiAgICAgICAgY2FzZSBcIkdHR0dHXCI6XG4gICAgICAgICAgcmV0dXJuIGVyYShcIm5hcnJvd1wiKTtcblxuICAgICAgICBjYXNlIFwia2tcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla1llYXIudG9TdHJpbmcoKS5zbGljZSgtMiksIDIpO1xuXG4gICAgICAgIGNhc2UgXCJra2trXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LndlZWtZZWFyLCA0KTtcblxuICAgICAgICBjYXNlIFwiV1wiOlxuICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC53ZWVrTnVtYmVyKTtcblxuICAgICAgICBjYXNlIFwiV1dcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQud2Vla051bWJlciwgMik7XG5cbiAgICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQub3JkaW5hbCk7XG5cbiAgICAgICAgY2FzZSBcIm9vb1wiOlxuICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5vcmRpbmFsLCAzKTtcblxuICAgICAgICBjYXNlIFwicVwiOlxuICAgICAgICAgIC8vIGxpa2UgMVxuICAgICAgICAgIHJldHVybiB0aGlzLm51bShkdC5xdWFydGVyKTtcblxuICAgICAgICBjYXNlIFwicXFcIjpcbiAgICAgICAgICAvLyBsaWtlIDAxXG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtKGR0LnF1YXJ0ZXIsIDIpO1xuXG4gICAgICAgIGNhc2UgXCJYXCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMubnVtKE1hdGguZmxvb3IoZHQudHMgLyAxMDAwKSk7XG5cbiAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5udW0oZHQudHMpO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuIG1heWJlTWFjcm8odG9rZW4pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gc3RyaW5naWZ5VG9rZW5zKEZvcm1hdHRlci5wYXJzZUZvcm1hdChmbXQpLCB0b2tlblRvU3RyaW5nKTtcbiAgfVxuXG4gIGZvcm1hdER1cmF0aW9uRnJvbVN0cmluZyhkdXIsIGZtdCkge1xuICAgIGNvbnN0IHRva2VuVG9GaWVsZCA9IHRva2VuID0+IHtcbiAgICAgIHN3aXRjaCAodG9rZW5bMF0pIHtcbiAgICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgICByZXR1cm4gXCJtaWxsaXNlY29uZFwiO1xuXG4gICAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgICAgcmV0dXJuIFwic2Vjb25kXCI7XG5cbiAgICAgICAgY2FzZSBcIm1cIjpcbiAgICAgICAgICByZXR1cm4gXCJtaW51dGVcIjtcblxuICAgICAgICBjYXNlIFwiaFwiOlxuICAgICAgICAgIHJldHVybiBcImhvdXJcIjtcblxuICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgIHJldHVybiBcImRheVwiO1xuXG4gICAgICAgIGNhc2UgXCJ3XCI6XG4gICAgICAgICAgcmV0dXJuIFwid2Vla1wiO1xuXG4gICAgICAgIGNhc2UgXCJNXCI6XG4gICAgICAgICAgcmV0dXJuIFwibW9udGhcIjtcblxuICAgICAgICBjYXNlIFwieVwiOlxuICAgICAgICAgIHJldHVybiBcInllYXJcIjtcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgIH0sXG4gICAgICAgICAgdG9rZW5Ub1N0cmluZyA9IGxpbGR1ciA9PiB0b2tlbiA9PiB7XG4gICAgICBjb25zdCBtYXBwZWQgPSB0b2tlblRvRmllbGQodG9rZW4pO1xuXG4gICAgICBpZiAobWFwcGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm51bShsaWxkdXIuZ2V0KG1hcHBlZCksIHRva2VuLmxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdG9rZW47XG4gICAgICB9XG4gICAgfSxcbiAgICAgICAgICB0b2tlbnMgPSBGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm10KSxcbiAgICAgICAgICByZWFsVG9rZW5zID0gdG9rZW5zLnJlZHVjZSgoZm91bmQsIHtcbiAgICAgIGxpdGVyYWwsXG4gICAgICB2YWxcbiAgICB9KSA9PiBsaXRlcmFsID8gZm91bmQgOiBmb3VuZC5jb25jYXQodmFsKSwgW10pLFxuICAgICAgICAgIGNvbGxhcHNlZCA9IGR1ci5zaGlmdFRvKC4uLnJlYWxUb2tlbnMubWFwKHRva2VuVG9GaWVsZCkuZmlsdGVyKHQgPT4gdCkpO1xuXG4gICAgcmV0dXJuIHN0cmluZ2lmeVRva2Vucyh0b2tlbnMsIHRva2VuVG9TdHJpbmcoY29sbGFwc2VkKSk7XG4gIH1cblxufVxuXG5jbGFzcyBJbnZhbGlkIHtcbiAgY29uc3RydWN0b3IocmVhc29uLCBleHBsYW5hdGlvbikge1xuICAgIHRoaXMucmVhc29uID0gcmVhc29uO1xuICAgIHRoaXMuZXhwbGFuYXRpb24gPSBleHBsYW5hdGlvbjtcbiAgfVxuXG4gIHRvTWVzc2FnZSgpIHtcbiAgICBpZiAodGhpcy5leHBsYW5hdGlvbikge1xuICAgICAgcmV0dXJuIGAke3RoaXMucmVhc29ufTogJHt0aGlzLmV4cGxhbmF0aW9ufWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxufVxuXG4vKipcbiAqIEBpbnRlcmZhY2VcbiAqL1xuXG5jbGFzcyBab25lIHtcbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIHpvbmVcbiAgICogQGFic3RyYWN0XG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgdHlwZSgpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGlzIHpvbmUuXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cblxuXG4gIGdldCBuYW1lKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cblxuICBnZXQgaWFuYU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBvZmZzZXQgaXMga25vd24gdG8gYmUgZml4ZWQgZm9yIHRoZSB3aG9sZSB5ZWFyLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG9mZnNldCdzIGNvbW1vbiBuYW1lIChzdWNoIGFzIEVTVCkgYXQgdGhlIHNwZWNpZmllZCB0aW1lc3RhbXBcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBuYW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gT3B0aW9ucyB0byBhZmZlY3QgdGhlIGZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5mb3JtYXQgLSBXaGF0IHN0eWxlIG9mIG9mZnNldCB0byByZXR1cm4uIEFjY2VwdHMgJ2xvbmcnIG9yICdzaG9ydCcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLmxvY2FsZSAtIFdoYXQgbG9jYWxlIHRvIHJldHVybiB0aGUgb2Zmc2V0IG5hbWUgaW4uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBvZmZzZXROYW1lKHRzLCBvcHRzKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgb2Zmc2V0J3MgdmFsdWUgYXMgYSBzdHJpbmdcbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gZ2V0IHRoZSBvZmZzZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdCAtIFdoYXQgc3R5bGUgb2Ygb2Zmc2V0IHRvIHJldHVybi5cbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgIEFjY2VwdHMgJ25hcnJvdycsICdzaG9ydCcsIG9yICd0ZWNoaWUnLiBSZXR1cm5pbmcgJys2JywgJyswNjowMCcsIG9yICcrMDYwMCcgcmVzcGVjdGl2ZWx5XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBmb3JtYXRPZmZzZXQodHMsIGZvcm1hdCkge1xuICAgIHRocm93IG5ldyBab25lSXNBYnN0cmFjdEVycm9yKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgb2Zmc2V0IGluIG1pbnV0ZXMgZm9yIHRoaXMgem9uZSBhdCB0aGUgc3BlY2lmaWVkIHRpbWVzdGFtcC5cbiAgICogQGFic3RyYWN0XG4gICAqIEBwYXJhbSB7bnVtYmVyfSB0cyAtIEVwb2NoIG1pbGxpc2Vjb25kcyBmb3Igd2hpY2ggdG8gY29tcHV0ZSB0aGUgb2Zmc2V0XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG5cblxuICBvZmZzZXQodHMpIHtcbiAgICB0aHJvdyBuZXcgWm9uZUlzQWJzdHJhY3RFcnJvcigpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIFpvbmUgaXMgZXF1YWwgdG8gYW5vdGhlciB6b25lXG4gICAqIEBhYnN0cmFjdFxuICAgKiBAcGFyYW0ge1pvbmV9IG90aGVyWm9uZSAtIHRoZSB6b25lIHRvIGNvbXBhcmVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBlcXVhbHMob3RoZXJab25lKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBab25lIGlzIHZhbGlkLlxuICAgKiBAYWJzdHJhY3RcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgdGhyb3cgbmV3IFpvbmVJc0Fic3RyYWN0RXJyb3IoKTtcbiAgfVxuXG59XG5cbmxldCBzaW5nbGV0b24kMSA9IG51bGw7XG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGxvY2FsIHpvbmUgZm9yIHRoaXMgSmF2YVNjcmlwdCBlbnZpcm9ubWVudC5cbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5cbmNsYXNzIFN5c3RlbVpvbmUgZXh0ZW5kcyBab25lIHtcbiAgLyoqXG4gICAqIEdldCBhIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiB0aGUgbG9jYWwgem9uZVxuICAgKiBAcmV0dXJuIHtTeXN0ZW1ab25lfVxuICAgKi9cbiAgc3RhdGljIGdldCBpbnN0YW5jZSgpIHtcbiAgICBpZiAoc2luZ2xldG9uJDEgPT09IG51bGwpIHtcbiAgICAgIHNpbmdsZXRvbiQxID0gbmV3IFN5c3RlbVpvbmUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2luZ2xldG9uJDE7XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcInN5c3RlbVwiO1xuICB9XG4gIC8qKiBAb3ZlcnJpZGUgKiovXG5cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgb2Zmc2V0TmFtZSh0cywge1xuICAgIGZvcm1hdCxcbiAgICBsb2NhbGVcbiAgfSkge1xuICAgIHJldHVybiBwYXJzZVpvbmVJbmZvKHRzLCBmb3JtYXQsIGxvY2FsZSk7XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIGZvcm1hdE9mZnNldCh0cywgZm9ybWF0KSB7XG4gICAgcmV0dXJuIGZvcm1hdE9mZnNldCh0aGlzLm9mZnNldCh0cyksIGZvcm1hdCk7XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIG9mZnNldCh0cykge1xuICAgIHJldHVybiAtbmV3IERhdGUodHMpLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIGVxdWFscyhvdGhlclpvbmUpIHtcbiAgICByZXR1cm4gb3RoZXJab25lLnR5cGUgPT09IFwic3lzdGVtXCI7XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbn1cblxubGV0IGR0ZkNhY2hlID0ge307XG5cbmZ1bmN0aW9uIG1ha2VEVEYoem9uZSkge1xuICBpZiAoIWR0ZkNhY2hlW3pvbmVdKSB7XG4gICAgZHRmQ2FjaGVbem9uZV0gPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImVuLVVTXCIsIHtcbiAgICAgIGhvdXIxMjogZmFsc2UsXG4gICAgICB0aW1lWm9uZTogem9uZSxcbiAgICAgIHllYXI6IFwibnVtZXJpY1wiLFxuICAgICAgbW9udGg6IFwiMi1kaWdpdFwiLFxuICAgICAgZGF5OiBcIjItZGlnaXRcIixcbiAgICAgIGhvdXI6IFwiMi1kaWdpdFwiLFxuICAgICAgbWludXRlOiBcIjItZGlnaXRcIixcbiAgICAgIHNlY29uZDogXCIyLWRpZ2l0XCIsXG4gICAgICBlcmE6IFwic2hvcnRcIlxuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIGR0ZkNhY2hlW3pvbmVdO1xufVxuXG5jb25zdCB0eXBlVG9Qb3MgPSB7XG4gIHllYXI6IDAsXG4gIG1vbnRoOiAxLFxuICBkYXk6IDIsXG4gIGVyYTogMyxcbiAgaG91cjogNCxcbiAgbWludXRlOiA1LFxuICBzZWNvbmQ6IDZcbn07XG5cbmZ1bmN0aW9uIGhhY2t5T2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0KGRhdGUpLnJlcGxhY2UoL1xcdTIwMEUvZywgXCJcIiksXG4gICAgICAgIHBhcnNlZCA9IC8oXFxkKylcXC8oXFxkKylcXC8oXFxkKykgKEFEfEJDKSw/IChcXGQrKTooXFxkKyk6KFxcZCspLy5leGVjKGZvcm1hdHRlZCksXG4gICAgICAgIFssIGZNb250aCwgZkRheSwgZlllYXIsIGZhZE9yQmMsIGZIb3VyLCBmTWludXRlLCBmU2Vjb25kXSA9IHBhcnNlZDtcbiAgcmV0dXJuIFtmWWVhciwgZk1vbnRoLCBmRGF5LCBmYWRPckJjLCBmSG91ciwgZk1pbnV0ZSwgZlNlY29uZF07XG59XG5cbmZ1bmN0aW9uIHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkge1xuICBjb25zdCBmb3JtYXR0ZWQgPSBkdGYuZm9ybWF0VG9QYXJ0cyhkYXRlKTtcbiAgY29uc3QgZmlsbGVkID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmb3JtYXR0ZWQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB7XG4gICAgICB0eXBlLFxuICAgICAgdmFsdWVcbiAgICB9ID0gZm9ybWF0dGVkW2ldO1xuICAgIGNvbnN0IHBvcyA9IHR5cGVUb1Bvc1t0eXBlXTtcblxuICAgIGlmICh0eXBlID09PSBcImVyYVwiKSB7XG4gICAgICBmaWxsZWRbcG9zXSA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAoIWlzVW5kZWZpbmVkKHBvcykpIHtcbiAgICAgIGZpbGxlZFtwb3NdID0gcGFyc2VJbnQodmFsdWUsIDEwKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmlsbGVkO1xufVxuXG5sZXQgaWFuYVpvbmVDYWNoZSA9IHt9O1xuLyoqXG4gKiBBIHpvbmUgaWRlbnRpZmllZCBieSBhbiBJQU5BIGlkZW50aWZpZXIsIGxpa2UgQW1lcmljYS9OZXdfWW9ya1xuICogQGltcGxlbWVudHMge1pvbmV9XG4gKi9cblxuY2xhc3MgSUFOQVpvbmUgZXh0ZW5kcyBab25lIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gWm9uZSBuYW1lXG4gICAqIEByZXR1cm4ge0lBTkFab25lfVxuICAgKi9cbiAgc3RhdGljIGNyZWF0ZShuYW1lKSB7XG4gICAgaWYgKCFpYW5hWm9uZUNhY2hlW25hbWVdKSB7XG4gICAgICBpYW5hWm9uZUNhY2hlW25hbWVdID0gbmV3IElBTkFab25lKG5hbWUpO1xuICAgIH1cblxuICAgIHJldHVybiBpYW5hWm9uZUNhY2hlW25hbWVdO1xuICB9XG4gIC8qKlxuICAgKiBSZXNldCBsb2NhbCBjYWNoZXMuIFNob3VsZCBvbmx5IGJlIG5lY2Vzc2FyeSBpbiB0ZXN0aW5nIHNjZW5hcmlvcy5cbiAgICogQHJldHVybiB7dm9pZH1cbiAgICovXG5cblxuICBzdGF0aWMgcmVzZXRDYWNoZSgpIHtcbiAgICBpYW5hWm9uZUNhY2hlID0ge307XG4gICAgZHRmQ2FjaGUgPSB7fTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBzdHJpbmcgaXMgYSB2YWxpZCBzcGVjaWZpZXIuIFRoaXMgb25seSBjaGVja3MgdGhlIHN0cmluZydzIGZvcm1hdCwgbm90IHRoYXQgdGhlIHNwZWNpZmllciBpZGVudGlmaWVzIGEga25vd24gem9uZTsgc2VlIGlzVmFsaWRab25lIGZvciB0aGF0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcyAtIFRoZSBzdHJpbmcgdG8gY2hlY2sgdmFsaWRpdHkgb25cbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFNwZWNpZmllcihcIkFtZXJpY2EvTmV3X1lvcmtcIikgLy89PiB0cnVlXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRTcGVjaWZpZXIoXCJTcG9ydH5+YmxvcnBcIikgLy89PiBmYWxzZVxuICAgKiBAZGVwcmVjYXRlZCBUaGlzIG1ldGhvZCByZXR1cm5zIGZhbHNlIGZvciBzb21lIHZhbGlkIElBTkEgbmFtZXMuIFVzZSBpc1ZhbGlkWm9uZSBpbnN0ZWFkLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHN0YXRpYyBpc1ZhbGlkU3BlY2lmaWVyKHMpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkWm9uZShzKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBwcm92aWRlZCBzdHJpbmcgaWRlbnRpZmllcyBhIHJlYWwgem9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gem9uZSAtIFRoZSBzdHJpbmcgdG8gY2hlY2tcbiAgICogQGV4YW1wbGUgSUFOQVpvbmUuaXNWYWxpZFpvbmUoXCJBbWVyaWNhL05ld19Zb3JrXCIpIC8vPT4gdHJ1ZVxuICAgKiBAZXhhbXBsZSBJQU5BWm9uZS5pc1ZhbGlkWm9uZShcIkZhbnRhc2lhL0Nhc3RsZVwiKSAvLz0+IGZhbHNlXG4gICAqIEBleGFtcGxlIElBTkFab25lLmlzVmFsaWRab25lKFwiU3BvcnR+fmJsb3JwXCIpIC8vPT4gZmFsc2VcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBzdGF0aWMgaXNWYWxpZFpvbmUoem9uZSkge1xuICAgIGlmICghem9uZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChcImVuLVVTXCIsIHtcbiAgICAgICAgdGltZVpvbmU6IHpvbmVcbiAgICAgIH0pLmZvcm1hdCgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0cnVjdG9yKG5hbWUpIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAcHJpdmF0ZSAqKi9cblxuICAgIHRoaXMuem9uZU5hbWUgPSBuYW1lO1xuICAgIC8qKiBAcHJpdmF0ZSAqKi9cblxuICAgIHRoaXMudmFsaWQgPSBJQU5BWm9uZS5pc1ZhbGlkWm9uZShuYW1lKTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgZ2V0IHR5cGUoKSB7XG4gICAgcmV0dXJuIFwiaWFuYVwiO1xuICB9XG4gIC8qKiBAb3ZlcnJpZGUgKiovXG5cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy56b25lTmFtZTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgZ2V0IGlzVW5pdmVyc2FsKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgb2Zmc2V0TmFtZSh0cywge1xuICAgIGZvcm1hdCxcbiAgICBsb2NhbGVcbiAgfSkge1xuICAgIHJldHVybiBwYXJzZVpvbmVJbmZvKHRzLCBmb3JtYXQsIGxvY2FsZSwgdGhpcy5uYW1lKTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHtcbiAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHRoaXMub2Zmc2V0KHRzKSwgZm9ybWF0KTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgb2Zmc2V0KHRzKSB7XG4gICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRzKTtcbiAgICBpZiAoaXNOYU4oZGF0ZSkpIHJldHVybiBOYU47XG4gICAgY29uc3QgZHRmID0gbWFrZURURih0aGlzLm5hbWUpO1xuICAgIGxldCBbeWVhciwgbW9udGgsIGRheSwgYWRPckJjLCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBkdGYuZm9ybWF0VG9QYXJ0cyA/IHBhcnRzT2Zmc2V0KGR0ZiwgZGF0ZSkgOiBoYWNreU9mZnNldChkdGYsIGRhdGUpO1xuXG4gICAgaWYgKGFkT3JCYyA9PT0gXCJCQ1wiKSB7XG4gICAgICB5ZWFyID0gLU1hdGguYWJzKHllYXIpICsgMTtcbiAgICB9IC8vIGJlY2F1c2Ugd2UncmUgdXNpbmcgaG91cjEyIGFuZCBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0xMDI1NTY0JmNhbj0yJnE9JTIyMjQlM0EwMCUyMiUyMGRhdGV0aW1lZm9ybWF0XG5cblxuICAgIGNvbnN0IGFkanVzdGVkSG91ciA9IGhvdXIgPT09IDI0ID8gMCA6IGhvdXI7XG4gICAgY29uc3QgYXNVVEMgPSBvYmpUb0xvY2FsVFMoe1xuICAgICAgeWVhcixcbiAgICAgIG1vbnRoLFxuICAgICAgZGF5LFxuICAgICAgaG91cjogYWRqdXN0ZWRIb3VyLFxuICAgICAgbWludXRlLFxuICAgICAgc2Vjb25kLFxuICAgICAgbWlsbGlzZWNvbmQ6IDBcbiAgICB9KTtcbiAgICBsZXQgYXNUUyA9ICtkYXRlO1xuICAgIGNvbnN0IG92ZXIgPSBhc1RTICUgMTAwMDtcbiAgICBhc1RTIC09IG92ZXIgPj0gMCA/IG92ZXIgOiAxMDAwICsgb3ZlcjtcbiAgICByZXR1cm4gKGFzVVRDIC0gYXNUUykgLyAoNjAgKiAxMDAwKTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgZXF1YWxzKG90aGVyWm9uZSkge1xuICAgIHJldHVybiBvdGhlclpvbmUudHlwZSA9PT0gXCJpYW5hXCIgJiYgb3RoZXJab25lLm5hbWUgPT09IHRoaXMubmFtZTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsaWQ7XG4gIH1cblxufVxuXG5sZXQgc2luZ2xldG9uID0gbnVsbDtcbi8qKlxuICogQSB6b25lIHdpdGggYSBmaXhlZCBvZmZzZXQgKG1lYW5pbmcgbm8gRFNUKVxuICogQGltcGxlbWVudHMge1pvbmV9XG4gKi9cblxuY2xhc3MgRml4ZWRPZmZzZXRab25lIGV4dGVuZHMgWm9uZSB7XG4gIC8qKlxuICAgKiBHZXQgYSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgVVRDXG4gICAqIEByZXR1cm4ge0ZpeGVkT2Zmc2V0Wm9uZX1cbiAgICovXG4gIHN0YXRpYyBnZXQgdXRjSW5zdGFuY2UoKSB7XG4gICAgaWYgKHNpbmdsZXRvbiA9PT0gbnVsbCkge1xuICAgICAgc2luZ2xldG9uID0gbmV3IEZpeGVkT2Zmc2V0Wm9uZSgwKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2luZ2xldG9uO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgYW4gaW5zdGFuY2Ugd2l0aCBhIHNwZWNpZmllZCBvZmZzZXRcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9mZnNldCAtIFRoZSBvZmZzZXQgaW4gbWludXRlc1xuICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9XG4gICAqL1xuXG5cbiAgc3RhdGljIGluc3RhbmNlKG9mZnNldCkge1xuICAgIHJldHVybiBvZmZzZXQgPT09IDAgPyBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2UgOiBuZXcgRml4ZWRPZmZzZXRab25lKG9mZnNldCk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCBhbiBpbnN0YW5jZSBvZiBGaXhlZE9mZnNldFpvbmUgZnJvbSBhIFVUQyBvZmZzZXQgc3RyaW5nLCBsaWtlIFwiVVRDKzZcIlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcyAtIFRoZSBvZmZzZXQgc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihcIlVUQys2XCIpXG4gICAqIEBleGFtcGxlIEZpeGVkT2Zmc2V0Wm9uZS5wYXJzZVNwZWNpZmllcihcIlVUQyswNlwiKVxuICAgKiBAZXhhbXBsZSBGaXhlZE9mZnNldFpvbmUucGFyc2VTcGVjaWZpZXIoXCJVVEMtNjowMFwiKVxuICAgKiBAcmV0dXJuIHtGaXhlZE9mZnNldFpvbmV9XG4gICAqL1xuXG5cbiAgc3RhdGljIHBhcnNlU3BlY2lmaWVyKHMpIHtcbiAgICBpZiAocykge1xuICAgICAgY29uc3QgciA9IHMubWF0Y2goL151dGMoPzooWystXVxcZHsxLDJ9KSg/OjooXFxkezJ9KSk/KT8kL2kpO1xuXG4gICAgICBpZiAocikge1xuICAgICAgICByZXR1cm4gbmV3IEZpeGVkT2Zmc2V0Wm9uZShzaWduZWRPZmZzZXQoclsxXSwgclsyXSkpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3RydWN0b3Iob2Zmc2V0KSB7XG4gICAgc3VwZXIoKTtcbiAgICAvKiogQHByaXZhdGUgKiovXG5cbiAgICB0aGlzLmZpeGVkID0gb2Zmc2V0O1xuICB9XG4gIC8qKiBAb3ZlcnJpZGUgKiovXG5cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gXCJmaXhlZFwiO1xuICB9XG4gIC8qKiBAb3ZlcnJpZGUgKiovXG5cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5maXhlZCA9PT0gMCA/IFwiVVRDXCIgOiBgVVRDJHtmb3JtYXRPZmZzZXQodGhpcy5maXhlZCwgXCJuYXJyb3dcIil9YDtcbiAgfVxuXG4gIGdldCBpYW5hTmFtZSgpIHtcbiAgICBpZiAodGhpcy5maXhlZCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFwiRXRjL1VUQ1wiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYEV0Yy9HTVQke2Zvcm1hdE9mZnNldCgtdGhpcy5maXhlZCwgXCJuYXJyb3dcIil9YDtcbiAgICB9XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIG9mZnNldE5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgZm9ybWF0T2Zmc2V0KHRzLCBmb3JtYXQpIHtcbiAgICByZXR1cm4gZm9ybWF0T2Zmc2V0KHRoaXMuZml4ZWQsIGZvcm1hdCk7XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgb2Zmc2V0KCkge1xuICAgIHJldHVybiB0aGlzLmZpeGVkO1xuICB9XG4gIC8qKiBAb3ZlcnJpZGUgKiovXG5cblxuICBlcXVhbHMob3RoZXJab25lKSB7XG4gICAgcmV0dXJuIG90aGVyWm9uZS50eXBlID09PSBcImZpeGVkXCIgJiYgb3RoZXJab25lLmZpeGVkID09PSB0aGlzLmZpeGVkO1xuICB9XG4gIC8qKiBAb3ZlcnJpZGUgKiovXG5cblxuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG59XG5cbi8qKlxuICogQSB6b25lIHRoYXQgZmFpbGVkIHRvIHBhcnNlLiBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gaW5zdGFudGlhdGUgdGhpcy5cbiAqIEBpbXBsZW1lbnRzIHtab25lfVxuICovXG5cbmNsYXNzIEludmFsaWRab25lIGV4dGVuZHMgWm9uZSB7XG4gIGNvbnN0cnVjdG9yKHpvbmVOYW1lKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvKiogIEBwcml2YXRlICovXG5cbiAgICB0aGlzLnpvbmVOYW1lID0gem9uZU5hbWU7XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIGdldCB0eXBlKCkge1xuICAgIHJldHVybiBcImludmFsaWRcIjtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuem9uZU5hbWU7XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIGdldCBpc1VuaXZlcnNhbCgpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIG9mZnNldE5hbWUoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIGZvcm1hdE9mZnNldCgpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuICAvKiogQG92ZXJyaWRlICoqL1xuXG5cbiAgb2Zmc2V0KCkge1xuICAgIHJldHVybiBOYU47XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIGVxdWFscygpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLyoqIEBvdmVycmlkZSAqKi9cblxuXG4gIGdldCBpc1ZhbGlkKCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplWm9uZShpbnB1dCwgZGVmYXVsdFpvbmUpIHtcblxuICBpZiAoaXNVbmRlZmluZWQoaW5wdXQpIHx8IGlucHV0ID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRab25lO1xuICB9IGVsc2UgaWYgKGlucHV0IGluc3RhbmNlb2YgWm9uZSkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfSBlbHNlIGlmIChpc1N0cmluZyhpbnB1dCkpIHtcbiAgICBjb25zdCBsb3dlcmVkID0gaW5wdXQudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAobG93ZXJlZCA9PT0gXCJsb2NhbFwiIHx8IGxvd2VyZWQgPT09IFwic3lzdGVtXCIpIHJldHVybiBkZWZhdWx0Wm9uZTtlbHNlIGlmIChsb3dlcmVkID09PSBcInV0Y1wiIHx8IGxvd2VyZWQgPT09IFwiZ210XCIpIHJldHVybiBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2U7ZWxzZSByZXR1cm4gRml4ZWRPZmZzZXRab25lLnBhcnNlU3BlY2lmaWVyKGxvd2VyZWQpIHx8IElBTkFab25lLmNyZWF0ZShpbnB1dCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1iZXIoaW5wdXQpKSB7XG4gICAgcmV0dXJuIEZpeGVkT2Zmc2V0Wm9uZS5pbnN0YW5jZShpbnB1dCk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSBcIm9iamVjdFwiICYmIGlucHV0Lm9mZnNldCAmJiB0eXBlb2YgaW5wdXQub2Zmc2V0ID09PSBcIm51bWJlclwiKSB7XG4gICAgLy8gVGhpcyBpcyBkdW1iLCBidXQgdGhlIGluc3RhbmNlb2YgY2hlY2sgYWJvdmUgZG9lc24ndCBzZWVtIHRvIHJlYWxseSB3b3JrXG4gICAgLy8gc28gd2UncmUgZHVjayBjaGVja2luZyBpdFxuICAgIHJldHVybiBpbnB1dDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IEludmFsaWRab25lKGlucHV0KTtcbiAgfVxufVxuXG5sZXQgbm93ID0gKCkgPT4gRGF0ZS5ub3coKSxcbiAgICBkZWZhdWx0Wm9uZSA9IFwic3lzdGVtXCIsXG4gICAgZGVmYXVsdExvY2FsZSA9IG51bGwsXG4gICAgZGVmYXVsdE51bWJlcmluZ1N5c3RlbSA9IG51bGwsXG4gICAgZGVmYXVsdE91dHB1dENhbGVuZGFyID0gbnVsbCxcbiAgICB0aHJvd09uSW52YWxpZDtcbi8qKlxuICogU2V0dGluZ3MgY29udGFpbnMgc3RhdGljIGdldHRlcnMgYW5kIHNldHRlcnMgdGhhdCBjb250cm9sIEx1eG9uJ3Mgb3ZlcmFsbCBiZWhhdmlvci4gTHV4b24gaXMgYSBzaW1wbGUgbGlicmFyeSB3aXRoIGZldyBvcHRpb25zLCBidXQgdGhlIG9uZXMgaXQgZG9lcyBoYXZlIGxpdmUgaGVyZS5cbiAqL1xuXG5cbmNsYXNzIFNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEdldCB0aGUgY2FsbGJhY2sgZm9yIHJldHVybmluZyB0aGUgY3VycmVudCB0aW1lc3RhbXAuXG4gICAqIEB0eXBlIHtmdW5jdGlvbn1cbiAgICovXG4gIHN0YXRpYyBnZXQgbm93KCkge1xuICAgIHJldHVybiBub3c7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgY2FsbGJhY2sgZm9yIHJldHVybmluZyB0aGUgY3VycmVudCB0aW1lc3RhbXAuXG4gICAqIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGEgbnVtYmVyLCB3aGljaCB3aWxsIGJlIGludGVycHJldGVkIGFzIGFuIEVwb2NoIG1pbGxpc2Vjb25kIGNvdW50XG4gICAqIEB0eXBlIHtmdW5jdGlvbn1cbiAgICogQGV4YW1wbGUgU2V0dGluZ3Mubm93ID0gKCkgPT4gRGF0ZS5ub3coKSArIDMwMDAgLy8gcHJldGVuZCBpdCBpcyAzIHNlY29uZHMgaW4gdGhlIGZ1dHVyZVxuICAgKiBAZXhhbXBsZSBTZXR0aW5ncy5ub3cgPSAoKSA9PiAwIC8vIGFsd2F5cyBwcmV0ZW5kIGl0J3MgSmFuIDEsIDE5NzAgYXQgbWlkbmlnaHQgaW4gVVRDIHRpbWVcbiAgICovXG5cblxuICBzdGF0aWMgc2V0IG5vdyhuKSB7XG4gICAgbm93ID0gbjtcbiAgfVxuICAvKipcbiAgICogU2V0IHRoZSBkZWZhdWx0IHRpbWUgem9uZSB0byBjcmVhdGUgRGF0ZVRpbWVzIGluLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBVc2UgdGhlIHZhbHVlIFwic3lzdGVtXCIgdG8gcmVzZXQgdGhpcyB2YWx1ZSB0byB0aGUgc3lzdGVtJ3MgdGltZSB6b25lLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cblxuXG4gIHN0YXRpYyBzZXQgZGVmYXVsdFpvbmUoem9uZSkge1xuICAgIGRlZmF1bHRab25lID0gem9uZTtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBkZWZhdWx0IHRpbWUgem9uZSBvYmplY3QgY3VycmVudGx5IHVzZWQgdG8gY3JlYXRlIERhdGVUaW1lcy4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIHN5c3RlbSdzIHRpbWUgem9uZSAodGhlIG9uZSBzZXQgb24gdGhlIG1hY2hpbmUgdGhhdCBydW5zIHRoaXMgY29kZSkuXG4gICAqIEB0eXBlIHtab25lfVxuICAgKi9cblxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdFpvbmUoKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVpvbmUoZGVmYXVsdFpvbmUsIFN5c3RlbVpvbmUuaW5zdGFuY2UpO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgbG9jYWxlIHRvIGNyZWF0ZSBEYXRlVGltZXMgd2l0aC4gRG9lcyBub3QgYWZmZWN0IGV4aXN0aW5nIGluc3RhbmNlcy5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG5cblxuICBzdGF0aWMgZ2V0IGRlZmF1bHRMb2NhbGUoKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRMb2NhbGU7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBsb2NhbGUgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cblxuXG4gIHN0YXRpYyBzZXQgZGVmYXVsdExvY2FsZShsb2NhbGUpIHtcbiAgICBkZWZhdWx0TG9jYWxlID0gbG9jYWxlO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGRlZmF1bHQgbnVtYmVyaW5nIHN5c3RlbSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgc3RhdGljIGdldCBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtKCkge1xuICAgIHJldHVybiBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtO1xuICB9XG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgbnVtYmVyaW5nIHN5c3RlbSB0byBjcmVhdGUgRGF0ZVRpbWVzIHdpdGguIERvZXMgbm90IGFmZmVjdCBleGlzdGluZyBpbnN0YW5jZXMuXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgc3RhdGljIHNldCBkZWZhdWx0TnVtYmVyaW5nU3lzdGVtKG51bWJlcmluZ1N5c3RlbSkge1xuICAgIGRlZmF1bHROdW1iZXJpbmdTeXN0ZW0gPSBudW1iZXJpbmdTeXN0ZW07XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVmYXVsdCBvdXRwdXQgY2FsZW5kYXIgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cblxuXG4gIHN0YXRpYyBnZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKCkge1xuICAgIHJldHVybiBkZWZhdWx0T3V0cHV0Q2FsZW5kYXI7XG4gIH1cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCBvdXRwdXQgY2FsZW5kYXIgdG8gY3JlYXRlIERhdGVUaW1lcyB3aXRoLiBEb2VzIG5vdCBhZmZlY3QgZXhpc3RpbmcgaW5zdGFuY2VzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cblxuXG4gIHN0YXRpYyBzZXQgZGVmYXVsdE91dHB1dENhbGVuZGFyKG91dHB1dENhbGVuZGFyKSB7XG4gICAgZGVmYXVsdE91dHB1dENhbGVuZGFyID0gb3V0cHV0Q2FsZW5kYXI7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIEx1eG9uIHdpbGwgdGhyb3cgd2hlbiBpdCBlbmNvdW50ZXJzIGludmFsaWQgRGF0ZVRpbWVzLCBEdXJhdGlvbnMsIG9yIEludGVydmFsc1xuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBzdGF0aWMgZ2V0IHRocm93T25JbnZhbGlkKCkge1xuICAgIHJldHVybiB0aHJvd09uSW52YWxpZDtcbiAgfVxuICAvKipcbiAgICogU2V0IHdoZXRoZXIgTHV4b24gd2lsbCB0aHJvdyB3aGVuIGl0IGVuY291bnRlcnMgaW52YWxpZCBEYXRlVGltZXMsIER1cmF0aW9ucywgb3IgSW50ZXJ2YWxzXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cblxuXG4gIHN0YXRpYyBzZXQgdGhyb3dPbkludmFsaWQodCkge1xuICAgIHRocm93T25JbnZhbGlkID0gdDtcbiAgfVxuICAvKipcbiAgICogUmVzZXQgTHV4b24ncyBnbG9iYWwgY2FjaGVzLiBTaG91bGQgb25seSBiZSBuZWNlc3NhcnkgaW4gdGVzdGluZyBzY2VuYXJpb3MuXG4gICAqIEByZXR1cm4ge3ZvaWR9XG4gICAqL1xuXG5cbiAgc3RhdGljIHJlc2V0Q2FjaGVzKCkge1xuICAgIExvY2FsZS5yZXNldENhY2hlKCk7XG4gICAgSUFOQVpvbmUucmVzZXRDYWNoZSgpO1xuICB9XG5cbn1cblxubGV0IGludGxMRkNhY2hlID0ge307XG5cbmZ1bmN0aW9uIGdldENhY2hlZExGKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTtcbiAgbGV0IGR0ZiA9IGludGxMRkNhY2hlW2tleV07XG5cbiAgaWYgKCFkdGYpIHtcbiAgICBkdGYgPSBuZXcgSW50bC5MaXN0Rm9ybWF0KGxvY1N0cmluZywgb3B0cyk7XG4gICAgaW50bExGQ2FjaGVba2V5XSA9IGR0ZjtcbiAgfVxuXG4gIHJldHVybiBkdGY7XG59XG5cbmxldCBpbnRsRFRDYWNoZSA9IHt9O1xuXG5mdW5jdGlvbiBnZXRDYWNoZWREVEYobG9jU3RyaW5nLCBvcHRzID0ge30pIHtcbiAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkoW2xvY1N0cmluZywgb3B0c10pO1xuICBsZXQgZHRmID0gaW50bERUQ2FjaGVba2V5XTtcblxuICBpZiAoIWR0Zikge1xuICAgIGR0ZiA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY1N0cmluZywgb3B0cyk7XG4gICAgaW50bERUQ2FjaGVba2V5XSA9IGR0ZjtcbiAgfVxuXG4gIHJldHVybiBkdGY7XG59XG5cbmxldCBpbnRsTnVtQ2FjaGUgPSB7fTtcblxuZnVuY3Rpb24gZ2V0Q2FjaGVkSU5GKGxvY1N0cmluZywgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IGtleSA9IEpTT04uc3RyaW5naWZ5KFtsb2NTdHJpbmcsIG9wdHNdKTtcbiAgbGV0IGluZiA9IGludGxOdW1DYWNoZVtrZXldO1xuXG4gIGlmICghaW5mKSB7XG4gICAgaW5mID0gbmV3IEludGwuTnVtYmVyRm9ybWF0KGxvY1N0cmluZywgb3B0cyk7XG4gICAgaW50bE51bUNhY2hlW2tleV0gPSBpbmY7XG4gIH1cblxuICByZXR1cm4gaW5mO1xufVxuXG5sZXQgaW50bFJlbENhY2hlID0ge307XG5cbmZ1bmN0aW9uIGdldENhY2hlZFJURihsb2NTdHJpbmcsIG9wdHMgPSB7fSkge1xuICBjb25zdCB7XG4gICAgYmFzZSxcbiAgICAuLi5jYWNoZUtleU9wdHNcbiAgfSA9IG9wdHM7IC8vIGV4Y2x1ZGUgYGJhc2VgIGZyb20gdGhlIG9wdGlvbnNcblxuICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShbbG9jU3RyaW5nLCBjYWNoZUtleU9wdHNdKTtcbiAgbGV0IGluZiA9IGludGxSZWxDYWNoZVtrZXldO1xuXG4gIGlmICghaW5mKSB7XG4gICAgaW5mID0gbmV3IEludGwuUmVsYXRpdmVUaW1lRm9ybWF0KGxvY1N0cmluZywgb3B0cyk7XG4gICAgaW50bFJlbENhY2hlW2tleV0gPSBpbmY7XG4gIH1cblxuICByZXR1cm4gaW5mO1xufVxuXG5sZXQgc3lzTG9jYWxlQ2FjaGUgPSBudWxsO1xuXG5mdW5jdGlvbiBzeXN0ZW1Mb2NhbGUoKSB7XG4gIGlmIChzeXNMb2NhbGVDYWNoZSkge1xuICAgIHJldHVybiBzeXNMb2NhbGVDYWNoZTtcbiAgfSBlbHNlIHtcbiAgICBzeXNMb2NhbGVDYWNoZSA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KCkucmVzb2x2ZWRPcHRpb25zKCkubG9jYWxlO1xuICAgIHJldHVybiBzeXNMb2NhbGVDYWNoZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGVTdHIpIHtcbiAgLy8gSSByZWFsbHkgd2FudCB0byBhdm9pZCB3cml0aW5nIGEgQkNQIDQ3IHBhcnNlclxuICAvLyBzZWUsIGUuZy4gaHR0cHM6Ly9naXRodWIuY29tL3dvb29ybS9iY3AtNDdcbiAgLy8gSW5zdGVhZCwgd2UnbGwgZG8gdGhpczpcbiAgLy8gYSkgaWYgdGhlIHN0cmluZyBoYXMgbm8gLXUgZXh0ZW5zaW9ucywganVzdCBsZWF2ZSBpdCBhbG9uZVxuICAvLyBiKSBpZiBpdCBkb2VzLCB1c2UgSW50bCB0byByZXNvbHZlIGV2ZXJ5dGhpbmdcbiAgLy8gYykgaWYgSW50bCBmYWlscywgdHJ5IGFnYWluIHdpdGhvdXQgdGhlIC11XG4gIGNvbnN0IHVJbmRleCA9IGxvY2FsZVN0ci5pbmRleE9mKFwiLXUtXCIpO1xuXG4gIGlmICh1SW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIFtsb2NhbGVTdHJdO1xuICB9IGVsc2Uge1xuICAgIGxldCBvcHRpb25zO1xuICAgIGNvbnN0IHNtYWxsZXIgPSBsb2NhbGVTdHIuc3Vic3RyaW5nKDAsIHVJbmRleCk7XG5cbiAgICB0cnkge1xuICAgICAgb3B0aW9ucyA9IGdldENhY2hlZERURihsb2NhbGVTdHIpLnJlc29sdmVkT3B0aW9ucygpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG9wdGlvbnMgPSBnZXRDYWNoZWREVEYoc21hbGxlcikucmVzb2x2ZWRPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgbnVtYmVyaW5nU3lzdGVtLFxuICAgICAgY2FsZW5kYXJcbiAgICB9ID0gb3B0aW9uczsgLy8gcmV0dXJuIHRoZSBzbWFsbGVyIG9uZSBzbyB0aGF0IHdlIGNhbiBhcHBlbmQgdGhlIGNhbGVuZGFyIGFuZCBudW1iZXJpbmcgb3ZlcnJpZGVzIHRvIGl0XG5cbiAgICByZXR1cm4gW3NtYWxsZXIsIG51bWJlcmluZ1N5c3RlbSwgY2FsZW5kYXJdO1xuICB9XG59XG5cbmZ1bmN0aW9uIGludGxDb25maWdTdHJpbmcobG9jYWxlU3RyLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSB7XG4gIGlmIChvdXRwdXRDYWxlbmRhciB8fCBudW1iZXJpbmdTeXN0ZW0pIHtcbiAgICBsb2NhbGVTdHIgKz0gXCItdVwiO1xuXG4gICAgaWYgKG91dHB1dENhbGVuZGFyKSB7XG4gICAgICBsb2NhbGVTdHIgKz0gYC1jYS0ke291dHB1dENhbGVuZGFyfWA7XG4gICAgfVxuXG4gICAgaWYgKG51bWJlcmluZ1N5c3RlbSkge1xuICAgICAgbG9jYWxlU3RyICs9IGAtbnUtJHtudW1iZXJpbmdTeXN0ZW19YDtcbiAgICB9XG5cbiAgICByZXR1cm4gbG9jYWxlU3RyO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBsb2NhbGVTdHI7XG4gIH1cbn1cblxuZnVuY3Rpb24gbWFwTW9udGhzKGYpIHtcbiAgY29uc3QgbXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8PSAxMjsgaSsrKSB7XG4gICAgY29uc3QgZHQgPSBEYXRlVGltZS51dGMoMjAxNiwgaSwgMSk7XG4gICAgbXMucHVzaChmKGR0KSk7XG4gIH1cblxuICByZXR1cm4gbXM7XG59XG5cbmZ1bmN0aW9uIG1hcFdlZWtkYXlzKGYpIHtcbiAgY29uc3QgbXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMTsgaSA8PSA3OyBpKyspIHtcbiAgICBjb25zdCBkdCA9IERhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMgKyBpKTtcbiAgICBtcy5wdXNoKGYoZHQpKTtcbiAgfVxuXG4gIHJldHVybiBtcztcbn1cblxuZnVuY3Rpb24gbGlzdFN0dWZmKGxvYywgbGVuZ3RoLCBkZWZhdWx0T0ssIGVuZ2xpc2hGbiwgaW50bEZuKSB7XG4gIGNvbnN0IG1vZGUgPSBsb2MubGlzdGluZ01vZGUoZGVmYXVsdE9LKTtcblxuICBpZiAobW9kZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH0gZWxzZSBpZiAobW9kZSA9PT0gXCJlblwiKSB7XG4gICAgcmV0dXJuIGVuZ2xpc2hGbihsZW5ndGgpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBpbnRsRm4obGVuZ3RoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0Zhc3ROdW1iZXJzKGxvYykge1xuICBpZiAobG9jLm51bWJlcmluZ1N5c3RlbSAmJiBsb2MubnVtYmVyaW5nU3lzdGVtICE9PSBcImxhdG5cIikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbG9jLm51bWJlcmluZ1N5c3RlbSA9PT0gXCJsYXRuXCIgfHwgIWxvYy5sb2NhbGUgfHwgbG9jLmxvY2FsZS5zdGFydHNXaXRoKFwiZW5cIikgfHwgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQobG9jLmludGwpLnJlc29sdmVkT3B0aW9ucygpLm51bWJlcmluZ1N5c3RlbSA9PT0gXCJsYXRuXCI7XG4gIH1cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5cbmNsYXNzIFBvbHlOdW1iZXJGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvcihpbnRsLCBmb3JjZVNpbXBsZSwgb3B0cykge1xuICAgIHRoaXMucGFkVG8gPSBvcHRzLnBhZFRvIHx8IDA7XG4gICAgdGhpcy5mbG9vciA9IG9wdHMuZmxvb3IgfHwgZmFsc2U7XG4gICAgY29uc3Qge1xuICAgICAgcGFkVG8sXG4gICAgICBmbG9vcixcbiAgICAgIC4uLm90aGVyT3B0c1xuICAgIH0gPSBvcHRzO1xuXG4gICAgaWYgKCFmb3JjZVNpbXBsZSB8fCBPYmplY3Qua2V5cyhvdGhlck9wdHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGludGxPcHRzID0ge1xuICAgICAgICB1c2VHcm91cGluZzogZmFsc2UsXG4gICAgICAgIC4uLm9wdHNcbiAgICAgIH07XG4gICAgICBpZiAob3B0cy5wYWRUbyA+IDApIGludGxPcHRzLm1pbmltdW1JbnRlZ2VyRGlnaXRzID0gb3B0cy5wYWRUbztcbiAgICAgIHRoaXMuaW5mID0gZ2V0Q2FjaGVkSU5GKGludGwsIGludGxPcHRzKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXQoaSkge1xuICAgIGlmICh0aGlzLmluZikge1xuICAgICAgY29uc3QgZml4ZWQgPSB0aGlzLmZsb29yID8gTWF0aC5mbG9vcihpKSA6IGk7XG4gICAgICByZXR1cm4gdGhpcy5pbmYuZm9ybWF0KGZpeGVkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdG8gbWF0Y2ggdGhlIGJyb3dzZXIncyBudW1iZXJmb3JtYXR0ZXIgZGVmYXVsdHNcbiAgICAgIGNvbnN0IGZpeGVkID0gdGhpcy5mbG9vciA/IE1hdGguZmxvb3IoaSkgOiByb3VuZFRvKGksIDMpO1xuICAgICAgcmV0dXJuIHBhZFN0YXJ0KGZpeGVkLCB0aGlzLnBhZFRvKTtcbiAgICB9XG4gIH1cblxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cblxuY2xhc3MgUG9seURhdGVGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvcihkdCwgaW50bCwgb3B0cykge1xuICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgbGV0IHo7XG5cbiAgICBpZiAoZHQuem9uZS5pc1VuaXZlcnNhbCkge1xuICAgICAgLy8gVVRDLTggb3IgRXRjL1VUQy04IGFyZSBub3QgcGFydCBvZiB0emRhdGEsIG9ubHkgRXRjL0dNVCs4IGFuZCB0aGUgbGlrZS5cbiAgICAgIC8vIFRoYXQgaXMgd2h5IGZpeGVkLW9mZnNldCBUWiBpcyBzZXQgdG8gdGhhdCB1bmxlc3MgaXQgaXM6XG4gICAgICAvLyAxLiBSZXByZXNlbnRpbmcgb2Zmc2V0IDAgd2hlbiBVVEMgaXMgdXNlZCB0byBtYWludGFpbiBwcmV2aW91cyBiZWhhdmlvciBhbmQgZG9lcyBub3QgYmVjb21lIEdNVC5cbiAgICAgIC8vIDIuIFVuc3VwcG9ydGVkIGJ5IHRoZSBicm93c2VyOlxuICAgICAgLy8gICAgLSBzb21lIGRvIG5vdCBzdXBwb3J0IEV0Yy9cbiAgICAgIC8vICAgIC0gPCBFdGMvR01ULTE0LCA+IEV0Yy9HTVQrMTIsIGFuZCAzMC1taW51dGUgb3IgNDUtbWludXRlIG9mZnNldHMgYXJlIG5vdCBwYXJ0IG9mIHR6ZGF0YVxuICAgICAgY29uc3QgZ210T2Zmc2V0ID0gLTEgKiAoZHQub2Zmc2V0IC8gNjApO1xuICAgICAgY29uc3Qgb2Zmc2V0WiA9IGdtdE9mZnNldCA+PSAwID8gYEV0Yy9HTVQrJHtnbXRPZmZzZXR9YCA6IGBFdGMvR01UJHtnbXRPZmZzZXR9YDtcblxuICAgICAgaWYgKGR0Lm9mZnNldCAhPT0gMCAmJiBJQU5BWm9uZS5jcmVhdGUob2Zmc2V0WikudmFsaWQpIHtcbiAgICAgICAgeiA9IG9mZnNldFo7XG4gICAgICAgIHRoaXMuZHQgPSBkdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vdCBhbGwgZml4ZWQtb2Zmc2V0IHpvbmVzIGxpa2UgRXRjLys0OjMwIGFyZSBwcmVzZW50IGluIHR6ZGF0YS5cbiAgICAgICAgLy8gU28gd2UgaGF2ZSB0byBtYWtlIGRvLiBUd28gY2FzZXM6XG4gICAgICAgIC8vIDEuIFRoZSBmb3JtYXQgb3B0aW9ucyB0ZWxsIHVzIHRvIHNob3cgdGhlIHpvbmUuIFdlIGNhbid0IGRvIHRoYXQsIHNvIHRoZSBiZXN0XG4gICAgICAgIC8vIHdlIGNhbiBkbyBpcyBmb3JtYXQgdGhlIGRhdGUgaW4gVVRDLlxuICAgICAgICAvLyAyLiBUaGUgZm9ybWF0IG9wdGlvbnMgZG9uJ3QgdGVsbCB1cyB0byBzaG93IHRoZSB6b25lLiBUaGVuIHdlIGNhbiBhZGp1c3QgdGhlbVxuICAgICAgICAvLyB0aGUgdGltZSBhbmQgdGVsbCB0aGUgZm9ybWF0dGVyIHRvIHNob3cgaXQgdG8gdXMgaW4gVVRDLCBzbyB0aGF0IHRoZSB0aW1lIGlzIHJpZ2h0XG4gICAgICAgIC8vIGFuZCB0aGUgYmFkIHpvbmUgZG9lc24ndCBzaG93IHVwLlxuICAgICAgICB6ID0gXCJVVENcIjtcblxuICAgICAgICBpZiAob3B0cy50aW1lWm9uZU5hbWUpIHtcbiAgICAgICAgICB0aGlzLmR0ID0gZHQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5kdCA9IGR0Lm9mZnNldCA9PT0gMCA/IGR0IDogRGF0ZVRpbWUuZnJvbU1pbGxpcyhkdC50cyArIGR0Lm9mZnNldCAqIDYwICogMTAwMCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGR0LnpvbmUudHlwZSA9PT0gXCJzeXN0ZW1cIikge1xuICAgICAgdGhpcy5kdCA9IGR0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmR0ID0gZHQ7XG4gICAgICB6ID0gZHQuem9uZS5uYW1lO1xuICAgIH1cblxuICAgIGNvbnN0IGludGxPcHRzID0geyAuLi50aGlzLm9wdHNcbiAgICB9O1xuXG4gICAgaWYgKHopIHtcbiAgICAgIGludGxPcHRzLnRpbWVab25lID0gejtcbiAgICB9XG5cbiAgICB0aGlzLmR0ZiA9IGdldENhY2hlZERURihpbnRsLCBpbnRsT3B0cyk7XG4gIH1cblxuICBmb3JtYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZHRmLmZvcm1hdCh0aGlzLmR0LnRvSlNEYXRlKCkpO1xuICB9XG5cbiAgZm9ybWF0VG9QYXJ0cygpIHtcbiAgICByZXR1cm4gdGhpcy5kdGYuZm9ybWF0VG9QYXJ0cyh0aGlzLmR0LnRvSlNEYXRlKCkpO1xuICB9XG5cbiAgcmVzb2x2ZWRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmR0Zi5yZXNvbHZlZE9wdGlvbnMoKTtcbiAgfVxuXG59XG4vKipcbiAqIEBwcml2YXRlXG4gKi9cblxuXG5jbGFzcyBQb2x5UmVsRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IoaW50bCwgaXNFbmdsaXNoLCBvcHRzKSB7XG4gICAgdGhpcy5vcHRzID0ge1xuICAgICAgc3R5bGU6IFwibG9uZ1wiLFxuICAgICAgLi4ub3B0c1xuICAgIH07XG5cbiAgICBpZiAoIWlzRW5nbGlzaCAmJiBoYXNSZWxhdGl2ZSgpKSB7XG4gICAgICB0aGlzLnJ0ZiA9IGdldENhY2hlZFJURihpbnRsLCBvcHRzKTtcbiAgICB9XG4gIH1cblxuICBmb3JtYXQoY291bnQsIHVuaXQpIHtcbiAgICBpZiAodGhpcy5ydGYpIHtcbiAgICAgIHJldHVybiB0aGlzLnJ0Zi5mb3JtYXQoY291bnQsIHVuaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZm9ybWF0UmVsYXRpdmVUaW1lKHVuaXQsIGNvdW50LCB0aGlzLm9wdHMubnVtZXJpYywgdGhpcy5vcHRzLnN0eWxlICE9PSBcImxvbmdcIik7XG4gICAgfVxuICB9XG5cbiAgZm9ybWF0VG9QYXJ0cyhjb3VudCwgdW5pdCkge1xuICAgIGlmICh0aGlzLnJ0Zikge1xuICAgICAgcmV0dXJuIHRoaXMucnRmLmZvcm1hdFRvUGFydHMoY291bnQsIHVuaXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICB9XG5cbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5cbmNsYXNzIExvY2FsZSB7XG4gIHN0YXRpYyBmcm9tT3B0cyhvcHRzKSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUob3B0cy5sb2NhbGUsIG9wdHMubnVtYmVyaW5nU3lzdGVtLCBvcHRzLm91dHB1dENhbGVuZGFyLCBvcHRzLmRlZmF1bHRUb0VOKTtcbiAgfVxuXG4gIHN0YXRpYyBjcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyLCBkZWZhdWx0VG9FTiA9IGZhbHNlKSB7XG4gICAgY29uc3Qgc3BlY2lmaWVkTG9jYWxlID0gbG9jYWxlIHx8IFNldHRpbmdzLmRlZmF1bHRMb2NhbGU7IC8vIHRoZSBzeXN0ZW0gbG9jYWxlIGlzIHVzZWZ1bCBmb3IgaHVtYW4gcmVhZGFibGUgc3RyaW5ncyBidXQgYW5ub3lpbmcgZm9yIHBhcnNpbmcvZm9ybWF0dGluZyBrbm93biBmb3JtYXRzXG5cbiAgICBjb25zdCBsb2NhbGVSID0gc3BlY2lmaWVkTG9jYWxlIHx8IChkZWZhdWx0VG9FTiA/IFwiZW4tVVNcIiA6IHN5c3RlbUxvY2FsZSgpKTtcbiAgICBjb25zdCBudW1iZXJpbmdTeXN0ZW1SID0gbnVtYmVyaW5nU3lzdGVtIHx8IFNldHRpbmdzLmRlZmF1bHROdW1iZXJpbmdTeXN0ZW07XG4gICAgY29uc3Qgb3V0cHV0Q2FsZW5kYXJSID0gb3V0cHV0Q2FsZW5kYXIgfHwgU2V0dGluZ3MuZGVmYXVsdE91dHB1dENhbGVuZGFyO1xuICAgIHJldHVybiBuZXcgTG9jYWxlKGxvY2FsZVIsIG51bWJlcmluZ1N5c3RlbVIsIG91dHB1dENhbGVuZGFyUiwgc3BlY2lmaWVkTG9jYWxlKTtcbiAgfVxuXG4gIHN0YXRpYyByZXNldENhY2hlKCkge1xuICAgIHN5c0xvY2FsZUNhY2hlID0gbnVsbDtcbiAgICBpbnRsRFRDYWNoZSA9IHt9O1xuICAgIGludGxOdW1DYWNoZSA9IHt9O1xuICAgIGludGxSZWxDYWNoZSA9IHt9O1xuICB9XG5cbiAgc3RhdGljIGZyb21PYmplY3Qoe1xuICAgIGxvY2FsZSxcbiAgICBudW1iZXJpbmdTeXN0ZW0sXG4gICAgb3V0cHV0Q2FsZW5kYXJcbiAgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKGxvY2FsZSwgbnVtYmVyaW5nLCBvdXRwdXRDYWxlbmRhciwgc3BlY2lmaWVkTG9jYWxlKSB7XG4gICAgY29uc3QgW3BhcnNlZExvY2FsZSwgcGFyc2VkTnVtYmVyaW5nU3lzdGVtLCBwYXJzZWRPdXRwdXRDYWxlbmRhcl0gPSBwYXJzZUxvY2FsZVN0cmluZyhsb2NhbGUpO1xuICAgIHRoaXMubG9jYWxlID0gcGFyc2VkTG9jYWxlO1xuICAgIHRoaXMubnVtYmVyaW5nU3lzdGVtID0gbnVtYmVyaW5nIHx8IHBhcnNlZE51bWJlcmluZ1N5c3RlbSB8fCBudWxsO1xuICAgIHRoaXMub3V0cHV0Q2FsZW5kYXIgPSBvdXRwdXRDYWxlbmRhciB8fCBwYXJzZWRPdXRwdXRDYWxlbmRhciB8fCBudWxsO1xuICAgIHRoaXMuaW50bCA9IGludGxDb25maWdTdHJpbmcodGhpcy5sb2NhbGUsIHRoaXMubnVtYmVyaW5nU3lzdGVtLCB0aGlzLm91dHB1dENhbGVuZGFyKTtcbiAgICB0aGlzLndlZWtkYXlzQ2FjaGUgPSB7XG4gICAgICBmb3JtYXQ6IHt9LFxuICAgICAgc3RhbmRhbG9uZToge31cbiAgICB9O1xuICAgIHRoaXMubW9udGhzQ2FjaGUgPSB7XG4gICAgICBmb3JtYXQ6IHt9LFxuICAgICAgc3RhbmRhbG9uZToge31cbiAgICB9O1xuICAgIHRoaXMubWVyaWRpZW1DYWNoZSA9IG51bGw7XG4gICAgdGhpcy5lcmFDYWNoZSA9IHt9O1xuICAgIHRoaXMuc3BlY2lmaWVkTG9jYWxlID0gc3BlY2lmaWVkTG9jYWxlO1xuICAgIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQgPSBudWxsO1xuICB9XG5cbiAgZ2V0IGZhc3ROdW1iZXJzKCkge1xuICAgIGlmICh0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkID09IG51bGwpIHtcbiAgICAgIHRoaXMuZmFzdE51bWJlcnNDYWNoZWQgPSBzdXBwb3J0c0Zhc3ROdW1iZXJzKHRoaXMpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmZhc3ROdW1iZXJzQ2FjaGVkO1xuICB9XG5cbiAgbGlzdGluZ01vZGUoKSB7XG4gICAgY29uc3QgaXNBY3R1YWxseUVuID0gdGhpcy5pc0VuZ2xpc2goKTtcbiAgICBjb25zdCBoYXNOb1dlaXJkbmVzcyA9ICh0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gbnVsbCB8fCB0aGlzLm51bWJlcmluZ1N5c3RlbSA9PT0gXCJsYXRuXCIpICYmICh0aGlzLm91dHB1dENhbGVuZGFyID09PSBudWxsIHx8IHRoaXMub3V0cHV0Q2FsZW5kYXIgPT09IFwiZ3JlZ29yeVwiKTtcbiAgICByZXR1cm4gaXNBY3R1YWxseUVuICYmIGhhc05vV2VpcmRuZXNzID8gXCJlblwiIDogXCJpbnRsXCI7XG4gIH1cblxuICBjbG9uZShhbHRzKSB7XG4gICAgaWYgKCFhbHRzIHx8IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGFsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGFsdHMubG9jYWxlIHx8IHRoaXMuc3BlY2lmaWVkTG9jYWxlLCBhbHRzLm51bWJlcmluZ1N5c3RlbSB8fCB0aGlzLm51bWJlcmluZ1N5c3RlbSwgYWx0cy5vdXRwdXRDYWxlbmRhciB8fCB0aGlzLm91dHB1dENhbGVuZGFyLCBhbHRzLmRlZmF1bHRUb0VOIHx8IGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICByZWRlZmF1bHRUb0VOKGFsdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmNsb25lKHsgLi4uYWx0cyxcbiAgICAgIGRlZmF1bHRUb0VOOiB0cnVlXG4gICAgfSk7XG4gIH1cblxuICByZWRlZmF1bHRUb1N5c3RlbShhbHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5jbG9uZSh7IC4uLmFsdHMsXG4gICAgICBkZWZhdWx0VG9FTjogZmFsc2VcbiAgICB9KTtcbiAgfVxuXG4gIG1vbnRocyhsZW5ndGgsIGZvcm1hdCA9IGZhbHNlLCBkZWZhdWx0T0sgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIGRlZmF1bHRPSywgbW9udGhzLCAoKSA9PiB7XG4gICAgICBjb25zdCBpbnRsID0gZm9ybWF0ID8ge1xuICAgICAgICBtb250aDogbGVuZ3RoLFxuICAgICAgICBkYXk6IFwibnVtZXJpY1wiXG4gICAgICB9IDoge1xuICAgICAgICBtb250aDogbGVuZ3RoXG4gICAgICB9LFxuICAgICAgICAgICAgZm9ybWF0U3RyID0gZm9ybWF0ID8gXCJmb3JtYXRcIiA6IFwic3RhbmRhbG9uZVwiO1xuXG4gICAgICBpZiAoIXRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdKSB7XG4gICAgICAgIHRoaXMubW9udGhzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdID0gbWFwTW9udGhzKGR0ID0+IHRoaXMuZXh0cmFjdChkdCwgaW50bCwgXCJtb250aFwiKSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLm1vbnRoc0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXTtcbiAgICB9KTtcbiAgfVxuXG4gIHdlZWtkYXlzKGxlbmd0aCwgZm9ybWF0ID0gZmFsc2UsIGRlZmF1bHRPSyA9IHRydWUpIHtcbiAgICByZXR1cm4gbGlzdFN0dWZmKHRoaXMsIGxlbmd0aCwgZGVmYXVsdE9LLCB3ZWVrZGF5cywgKCkgPT4ge1xuICAgICAgY29uc3QgaW50bCA9IGZvcm1hdCA/IHtcbiAgICAgICAgd2Vla2RheTogbGVuZ3RoLFxuICAgICAgICB5ZWFyOiBcIm51bWVyaWNcIixcbiAgICAgICAgbW9udGg6IFwibG9uZ1wiLFxuICAgICAgICBkYXk6IFwibnVtZXJpY1wiXG4gICAgICB9IDoge1xuICAgICAgICB3ZWVrZGF5OiBsZW5ndGhcbiAgICAgIH0sXG4gICAgICAgICAgICBmb3JtYXRTdHIgPSBmb3JtYXQgPyBcImZvcm1hdFwiIDogXCJzdGFuZGFsb25lXCI7XG5cbiAgICAgIGlmICghdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXSkge1xuICAgICAgICB0aGlzLndlZWtkYXlzQ2FjaGVbZm9ybWF0U3RyXVtsZW5ndGhdID0gbWFwV2Vla2RheXMoZHQgPT4gdGhpcy5leHRyYWN0KGR0LCBpbnRsLCBcIndlZWtkYXlcIikpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy53ZWVrZGF5c0NhY2hlW2Zvcm1hdFN0cl1bbGVuZ3RoXTtcbiAgICB9KTtcbiAgfVxuXG4gIG1lcmlkaWVtcyhkZWZhdWx0T0sgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCB1bmRlZmluZWQsIGRlZmF1bHRPSywgKCkgPT4gbWVyaWRpZW1zLCAoKSA9PiB7XG4gICAgICAvLyBJbiB0aGVvcnkgdGhlcmUgY291bGQgYmUgYXJpYml0cmFyeSBkYXkgcGVyaW9kcy4gV2UncmUgZ29ubmEgYXNzdW1lIHRoZXJlIGFyZSBleGFjdGx5IHR3b1xuICAgICAgLy8gZm9yIEFNIGFuZCBQTS4gVGhpcyBpcyBwcm9iYWJseSB3cm9uZywgYnV0IGl0J3MgbWFrZXMgcGFyc2luZyB3YXkgZWFzaWVyLlxuICAgICAgaWYgKCF0aGlzLm1lcmlkaWVtQ2FjaGUpIHtcbiAgICAgICAgY29uc3QgaW50bCA9IHtcbiAgICAgICAgICBob3VyOiBcIm51bWVyaWNcIixcbiAgICAgICAgICBob3VyQ3ljbGU6IFwiaDEyXCJcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5tZXJpZGllbUNhY2hlID0gW0RhdGVUaW1lLnV0YygyMDE2LCAxMSwgMTMsIDkpLCBEYXRlVGltZS51dGMoMjAxNiwgMTEsIDEzLCAxOSldLm1hcChkdCA9PiB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwiZGF5cGVyaW9kXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMubWVyaWRpZW1DYWNoZTtcbiAgICB9KTtcbiAgfVxuXG4gIGVyYXMobGVuZ3RoLCBkZWZhdWx0T0sgPSB0cnVlKSB7XG4gICAgcmV0dXJuIGxpc3RTdHVmZih0aGlzLCBsZW5ndGgsIGRlZmF1bHRPSywgZXJhcywgKCkgPT4ge1xuICAgICAgY29uc3QgaW50bCA9IHtcbiAgICAgICAgZXJhOiBsZW5ndGhcbiAgICAgIH07IC8vIFRoaXMgaXMgcHJvYmxlbWF0aWMuIERpZmZlcmVudCBjYWxlbmRhcnMgYXJlIGdvaW5nIHRvIGRlZmluZSBlcmFzIHRvdGFsbHkgZGlmZmVyZW50bHkuIFdoYXQgSSBuZWVkIGlzIHRoZSBtaW5pbXVtIHNldCBvZiBkYXRlc1xuICAgICAgLy8gdG8gZGVmaW5pdGVseSBlbnVtZXJhdGUgdGhlbS5cblxuICAgICAgaWYgKCF0aGlzLmVyYUNhY2hlW2xlbmd0aF0pIHtcbiAgICAgICAgdGhpcy5lcmFDYWNoZVtsZW5ndGhdID0gW0RhdGVUaW1lLnV0YygtNDAsIDEsIDEpLCBEYXRlVGltZS51dGMoMjAxNywgMSwgMSldLm1hcChkdCA9PiB0aGlzLmV4dHJhY3QoZHQsIGludGwsIFwiZXJhXCIpKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMuZXJhQ2FjaGVbbGVuZ3RoXTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4dHJhY3QoZHQsIGludGxPcHRzLCBmaWVsZCkge1xuICAgIGNvbnN0IGRmID0gdGhpcy5kdEZvcm1hdHRlcihkdCwgaW50bE9wdHMpLFxuICAgICAgICAgIHJlc3VsdHMgPSBkZi5mb3JtYXRUb1BhcnRzKCksXG4gICAgICAgICAgbWF0Y2hpbmcgPSByZXN1bHRzLmZpbmQobSA9PiBtLnR5cGUudG9Mb3dlckNhc2UoKSA9PT0gZmllbGQpO1xuICAgIHJldHVybiBtYXRjaGluZyA/IG1hdGNoaW5nLnZhbHVlIDogbnVsbDtcbiAgfVxuXG4gIG51bWJlckZvcm1hdHRlcihvcHRzID0ge30pIHtcbiAgICAvLyB0aGlzIGZvcmNlc2ltcGxlIG9wdGlvbiBpcyBuZXZlciB1c2VkICh0aGUgb25seSBjYWxsZXIgc2hvcnQtY2lyY3VpdHMgb24gaXQsIGJ1dCBpdCBzZWVtcyBzYWZlciB0byBsZWF2ZSlcbiAgICAvLyAoaW4gY29udHJhc3QsIHRoZSByZXN0IG9mIHRoZSBjb25kaXRpb24gaXMgdXNlZCBoZWF2aWx5KVxuICAgIHJldHVybiBuZXcgUG9seU51bWJlckZvcm1hdHRlcih0aGlzLmludGwsIG9wdHMuZm9yY2VTaW1wbGUgfHwgdGhpcy5mYXN0TnVtYmVycywgb3B0cyk7XG4gIH1cblxuICBkdEZvcm1hdHRlcihkdCwgaW50bE9wdHMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgUG9seURhdGVGb3JtYXR0ZXIoZHQsIHRoaXMuaW50bCwgaW50bE9wdHMpO1xuICB9XG5cbiAgcmVsRm9ybWF0dGVyKG9wdHMgPSB7fSkge1xuICAgIHJldHVybiBuZXcgUG9seVJlbEZvcm1hdHRlcih0aGlzLmludGwsIHRoaXMuaXNFbmdsaXNoKCksIG9wdHMpO1xuICB9XG5cbiAgbGlzdEZvcm1hdHRlcihvcHRzID0ge30pIHtcbiAgICByZXR1cm4gZ2V0Q2FjaGVkTEYodGhpcy5pbnRsLCBvcHRzKTtcbiAgfVxuXG4gIGlzRW5nbGlzaCgpIHtcbiAgICByZXR1cm4gdGhpcy5sb2NhbGUgPT09IFwiZW5cIiB8fCB0aGlzLmxvY2FsZS50b0xvd2VyQ2FzZSgpID09PSBcImVuLXVzXCIgfHwgbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQodGhpcy5pbnRsKS5yZXNvbHZlZE9wdGlvbnMoKS5sb2NhbGUuc3RhcnRzV2l0aChcImVuLXVzXCIpO1xuICB9XG5cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxlID09PSBvdGhlci5sb2NhbGUgJiYgdGhpcy5udW1iZXJpbmdTeXN0ZW0gPT09IG90aGVyLm51bWJlcmluZ1N5c3RlbSAmJiB0aGlzLm91dHB1dENhbGVuZGFyID09PSBvdGhlci5vdXRwdXRDYWxlbmRhcjtcbiAgfVxuXG59XG5cbi8qXG4gKiBUaGlzIGZpbGUgaGFuZGxlcyBwYXJzaW5nIGZvciB3ZWxsLXNwZWNpZmllZCBmb3JtYXRzLiBIZXJlJ3MgaG93IGl0IHdvcmtzOlxuICogVHdvIHRoaW5ncyBnbyBpbnRvIHBhcnNpbmc6IGEgcmVnZXggdG8gbWF0Y2ggd2l0aCBhbmQgYW4gZXh0cmFjdG9yIHRvIHRha2UgYXBhcnQgdGhlIGdyb3VwcyBpbiB0aGUgbWF0Y2guXG4gKiBBbiBleHRyYWN0b3IgaXMganVzdCBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSByZWdleCBtYXRjaCBhcnJheSBhbmQgcmV0dXJucyBhIHsgeWVhcjogLi4uLCBtb250aDogLi4uIH0gb2JqZWN0XG4gKiBwYXJzZSgpIGRvZXMgdGhlIHdvcmsgb2YgZXhlY3V0aW5nIHRoZSByZWdleCBhbmQgYXBwbHlpbmcgdGhlIGV4dHJhY3Rvci4gSXQgdGFrZXMgbXVsdGlwbGUgcmVnZXgvZXh0cmFjdG9yIHBhaXJzIHRvIHRyeSBpbiBzZXF1ZW5jZS5cbiAqIEV4dHJhY3RvcnMgY2FuIHRha2UgYSBcImN1cnNvclwiIHJlcHJlc2VudGluZyB0aGUgb2Zmc2V0IGluIHRoZSBtYXRjaCB0byBsb29rIGF0LiBUaGlzIG1ha2VzIGl0IGVhc3kgdG8gY29tYmluZSBleHRyYWN0b3JzLlxuICogY29tYmluZUV4dHJhY3RvcnMoKSBkb2VzIHRoZSB3b3JrIG9mIGNvbWJpbmluZyB0aGVtLCBrZWVwaW5nIHRyYWNrIG9mIHRoZSBjdXJzb3IgdGhyb3VnaCBtdWx0aXBsZSBleHRyYWN0aW9ucy5cbiAqIFNvbWUgZXh0cmFjdGlvbnMgYXJlIHN1cGVyIGR1bWIgYW5kIHNpbXBsZVBhcnNlIGFuZCBmcm9tU3RyaW5ncyBoZWxwIERSWSB0aGVtLlxuICovXG5cbmZ1bmN0aW9uIGNvbWJpbmVSZWdleGVzKC4uLnJlZ2V4ZXMpIHtcbiAgY29uc3QgZnVsbCA9IHJlZ2V4ZXMucmVkdWNlKChmLCByKSA9PiBmICsgci5zb3VyY2UsIFwiXCIpO1xuICByZXR1cm4gUmVnRXhwKGBeJHtmdWxsfSRgKTtcbn1cblxuZnVuY3Rpb24gY29tYmluZUV4dHJhY3RvcnMoLi4uZXh0cmFjdG9ycykge1xuICByZXR1cm4gbSA9PiBleHRyYWN0b3JzLnJlZHVjZSgoW21lcmdlZFZhbHMsIG1lcmdlZFpvbmUsIGN1cnNvcl0sIGV4KSA9PiB7XG4gICAgY29uc3QgW3ZhbCwgem9uZSwgbmV4dF0gPSBleChtLCBjdXJzb3IpO1xuICAgIHJldHVybiBbeyAuLi5tZXJnZWRWYWxzLFxuICAgICAgLi4udmFsXG4gICAgfSwgem9uZSB8fCBtZXJnZWRab25lLCBuZXh0XTtcbiAgfSwgW3t9LCBudWxsLCAxXSkuc2xpY2UoMCwgMik7XG59XG5cbmZ1bmN0aW9uIHBhcnNlKHMsIC4uLnBhdHRlcm5zKSB7XG4gIGlmIChzID09IG51bGwpIHtcbiAgICByZXR1cm4gW251bGwsIG51bGxdO1xuICB9XG5cbiAgZm9yIChjb25zdCBbcmVnZXgsIGV4dHJhY3Rvcl0gb2YgcGF0dGVybnMpIHtcbiAgICBjb25zdCBtID0gcmVnZXguZXhlYyhzKTtcblxuICAgIGlmIChtKSB7XG4gICAgICByZXR1cm4gZXh0cmFjdG9yKG0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbbnVsbCwgbnVsbF07XG59XG5cbmZ1bmN0aW9uIHNpbXBsZVBhcnNlKC4uLmtleXMpIHtcbiAgcmV0dXJuIChtYXRjaCwgY3Vyc29yKSA9PiB7XG4gICAgY29uc3QgcmV0ID0ge307XG4gICAgbGV0IGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgcmV0W2tleXNbaV1dID0gcGFyc2VJbnRlZ2VyKG1hdGNoW2N1cnNvciArIGldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gW3JldCwgbnVsbCwgY3Vyc29yICsgaV07XG4gIH07XG59IC8vIElTTyBhbmQgU1FMIHBhcnNpbmdcblxuXG5jb25zdCBvZmZzZXRSZWdleCA9IC8oPzooWil8KFsrLV1cXGRcXGQpKD86Oj8oXFxkXFxkKSk/KS87XG5jb25zdCBpc29FeHRlbmRlZFpvbmUgPSBgKD86JHtvZmZzZXRSZWdleC5zb3VyY2V9Pyg/OlxcXFxbKCR7aWFuYVJlZ2V4LnNvdXJjZX0pXFxcXF0pPyk/YDtcbmNvbnN0IGlzb1RpbWVCYXNlUmVnZXggPSAvKFxcZFxcZCkoPzo6PyhcXGRcXGQpKD86Oj8oXFxkXFxkKSg/OlsuLF0oXFxkezEsMzB9KSk/KT8pPy87XG5jb25zdCBpc29UaW1lUmVnZXggPSBSZWdFeHAoYCR7aXNvVGltZUJhc2VSZWdleC5zb3VyY2V9JHtpc29FeHRlbmRlZFpvbmV9YCk7XG5jb25zdCBpc29UaW1lRXh0ZW5zaW9uUmVnZXggPSBSZWdFeHAoYCg/OlQke2lzb1RpbWVSZWdleC5zb3VyY2V9KT9gKTtcbmNvbnN0IGlzb1ltZFJlZ2V4ID0gLyhbKy1dXFxkezZ9fFxcZHs0fSkoPzotPyhcXGRcXGQpKD86LT8oXFxkXFxkKSk/KT8vO1xuY29uc3QgaXNvV2Vla1JlZ2V4ID0gLyhcXGR7NH0pLT9XKFxcZFxcZCkoPzotPyhcXGQpKT8vO1xuY29uc3QgaXNvT3JkaW5hbFJlZ2V4ID0gLyhcXGR7NH0pLT8oXFxkezN9KS87XG5jb25zdCBleHRyYWN0SVNPV2Vla0RhdGEgPSBzaW1wbGVQYXJzZShcIndlZWtZZWFyXCIsIFwid2Vla051bWJlclwiLCBcIndlZWtEYXlcIik7XG5jb25zdCBleHRyYWN0SVNPT3JkaW5hbERhdGEgPSBzaW1wbGVQYXJzZShcInllYXJcIiwgXCJvcmRpbmFsXCIpO1xuY29uc3Qgc3FsWW1kUmVnZXggPSAvKFxcZHs0fSktKFxcZFxcZCktKFxcZFxcZCkvOyAvLyBkdW1iZWQtZG93biB2ZXJzaW9uIG9mIHRoZSBJU08gb25lXG5cbmNvbnN0IHNxbFRpbWVSZWdleCA9IFJlZ0V4cChgJHtpc29UaW1lQmFzZVJlZ2V4LnNvdXJjZX0gPyg/OiR7b2Zmc2V0UmVnZXguc291cmNlfXwoJHtpYW5hUmVnZXguc291cmNlfSkpP2ApO1xuY29uc3Qgc3FsVGltZUV4dGVuc2lvblJlZ2V4ID0gUmVnRXhwKGAoPzogJHtzcWxUaW1lUmVnZXguc291cmNlfSk/YCk7XG5cbmZ1bmN0aW9uIGludChtYXRjaCwgcG9zLCBmYWxsYmFjaykge1xuICBjb25zdCBtID0gbWF0Y2hbcG9zXTtcbiAgcmV0dXJuIGlzVW5kZWZpbmVkKG0pID8gZmFsbGJhY2sgOiBwYXJzZUludGVnZXIobSk7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RJU09ZbWQobWF0Y2gsIGN1cnNvcikge1xuICBjb25zdCBpdGVtID0ge1xuICAgIHllYXI6IGludChtYXRjaCwgY3Vyc29yKSxcbiAgICBtb250aDogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAxKSxcbiAgICBkYXk6IGludChtYXRjaCwgY3Vyc29yICsgMiwgMSlcbiAgfTtcbiAgcmV0dXJuIFtpdGVtLCBudWxsLCBjdXJzb3IgKyAzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElTT1RpbWUobWF0Y2gsIGN1cnNvcikge1xuICBjb25zdCBpdGVtID0ge1xuICAgIGhvdXJzOiBpbnQobWF0Y2gsIGN1cnNvciwgMCksXG4gICAgbWludXRlczogaW50KG1hdGNoLCBjdXJzb3IgKyAxLCAwKSxcbiAgICBzZWNvbmRzOiBpbnQobWF0Y2gsIGN1cnNvciArIDIsIDApLFxuICAgIG1pbGxpc2Vjb25kczogcGFyc2VNaWxsaXMobWF0Y2hbY3Vyc29yICsgM10pXG4gIH07XG4gIHJldHVybiBbaXRlbSwgbnVsbCwgY3Vyc29yICsgNF07XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RJU09PZmZzZXQobWF0Y2gsIGN1cnNvcikge1xuICBjb25zdCBsb2NhbCA9ICFtYXRjaFtjdXJzb3JdICYmICFtYXRjaFtjdXJzb3IgKyAxXSxcbiAgICAgICAgZnVsbE9mZnNldCA9IHNpZ25lZE9mZnNldChtYXRjaFtjdXJzb3IgKyAxXSwgbWF0Y2hbY3Vyc29yICsgMl0pLFxuICAgICAgICB6b25lID0gbG9jYWwgPyBudWxsIDogRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKGZ1bGxPZmZzZXQpO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAzXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdElBTkFab25lKG1hdGNoLCBjdXJzb3IpIHtcbiAgY29uc3Qgem9uZSA9IG1hdGNoW2N1cnNvcl0gPyBJQU5BWm9uZS5jcmVhdGUobWF0Y2hbY3Vyc29yXSkgOiBudWxsO1xuICByZXR1cm4gW3t9LCB6b25lLCBjdXJzb3IgKyAxXTtcbn0gLy8gSVNPIHRpbWUgcGFyc2luZ1xuXG5cbmNvbnN0IGlzb1RpbWVPbmx5ID0gUmVnRXhwKGBeVD8ke2lzb1RpbWVCYXNlUmVnZXguc291cmNlfSRgKTsgLy8gSVNPIGR1cmF0aW9uIHBhcnNpbmdcblxuY29uc3QgaXNvRHVyYXRpb24gPSAvXi0/UCg/Oig/OigtP1xcZHsxLDIwfSg/OlxcLlxcZHsxLDIwfSk/KVkpPyg/OigtP1xcZHsxLDIwfSg/OlxcLlxcZHsxLDIwfSk/KU0pPyg/OigtP1xcZHsxLDIwfSg/OlxcLlxcZHsxLDIwfSk/KVcpPyg/OigtP1xcZHsxLDIwfSg/OlxcLlxcZHsxLDIwfSk/KUQpPyg/OlQoPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylIKT8oPzooLT9cXGR7MSwyMH0oPzpcXC5cXGR7MSwyMH0pPylNKT8oPzooLT9cXGR7MSwyMH0pKD86Wy4sXSgtP1xcZHsxLDIwfSkpP1MpPyk/KSQvO1xuXG5mdW5jdGlvbiBleHRyYWN0SVNPRHVyYXRpb24obWF0Y2gpIHtcbiAgY29uc3QgW3MsIHllYXJTdHIsIG1vbnRoU3RyLCB3ZWVrU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyLCBtaWxsaXNlY29uZHNTdHJdID0gbWF0Y2g7XG4gIGNvbnN0IGhhc05lZ2F0aXZlUHJlZml4ID0gc1swXSA9PT0gXCItXCI7XG4gIGNvbnN0IG5lZ2F0aXZlU2Vjb25kcyA9IHNlY29uZFN0ciAmJiBzZWNvbmRTdHJbMF0gPT09IFwiLVwiO1xuXG4gIGNvbnN0IG1heWJlTmVnYXRlID0gKG51bSwgZm9yY2UgPSBmYWxzZSkgPT4gbnVtICE9PSB1bmRlZmluZWQgJiYgKGZvcmNlIHx8IG51bSAmJiBoYXNOZWdhdGl2ZVByZWZpeCkgPyAtbnVtIDogbnVtO1xuXG4gIHJldHVybiBbe1xuICAgIHllYXJzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKHllYXJTdHIpKSxcbiAgICBtb250aHM6IG1heWJlTmVnYXRlKHBhcnNlRmxvYXRpbmcobW9udGhTdHIpKSxcbiAgICB3ZWVrczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyh3ZWVrU3RyKSksXG4gICAgZGF5czogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhkYXlTdHIpKSxcbiAgICBob3VyczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhob3VyU3RyKSksXG4gICAgbWludXRlczogbWF5YmVOZWdhdGUocGFyc2VGbG9hdGluZyhtaW51dGVTdHIpKSxcbiAgICBzZWNvbmRzOiBtYXliZU5lZ2F0ZShwYXJzZUZsb2F0aW5nKHNlY29uZFN0ciksIHNlY29uZFN0ciA9PT0gXCItMFwiKSxcbiAgICBtaWxsaXNlY29uZHM6IG1heWJlTmVnYXRlKHBhcnNlTWlsbGlzKG1pbGxpc2Vjb25kc1N0ciksIG5lZ2F0aXZlU2Vjb25kcylcbiAgfV07XG59IC8vIFRoZXNlIGFyZSBhIGxpdHRsZSBicmFpbmRlYWQuIEVEVCAqc2hvdWxkKiB0ZWxsIHVzIHRoYXQgd2UncmUgaW4sIHNheSwgQW1lcmljYS9OZXdfWW9ya1xuLy8gYW5kIG5vdCBqdXN0IHRoYXQgd2UncmUgaW4gLTI0MCAqcmlnaHQgbm93Ki4gQnV0IHNpbmNlIEkgZG9uJ3QgdGhpbmsgdGhlc2UgYXJlIHVzZWQgdGhhdCBvZnRlblxuLy8gSSdtIGp1c3QgZ29pbmcgdG8gaWdub3JlIHRoYXRcblxuXG5jb25zdCBvYnNPZmZzZXRzID0ge1xuICBHTVQ6IDAsXG4gIEVEVDogLTQgKiA2MCxcbiAgRVNUOiAtNSAqIDYwLFxuICBDRFQ6IC01ICogNjAsXG4gIENTVDogLTYgKiA2MCxcbiAgTURUOiAtNiAqIDYwLFxuICBNU1Q6IC03ICogNjAsXG4gIFBEVDogLTcgKiA2MCxcbiAgUFNUOiAtOCAqIDYwXG59O1xuXG5mdW5jdGlvbiBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cikge1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgeWVhcjogeWVhclN0ci5sZW5ndGggPT09IDIgPyB1bnRydW5jYXRlWWVhcihwYXJzZUludGVnZXIoeWVhclN0cikpIDogcGFyc2VJbnRlZ2VyKHllYXJTdHIpLFxuICAgIG1vbnRoOiBtb250aHNTaG9ydC5pbmRleE9mKG1vbnRoU3RyKSArIDEsXG4gICAgZGF5OiBwYXJzZUludGVnZXIoZGF5U3RyKSxcbiAgICBob3VyOiBwYXJzZUludGVnZXIoaG91clN0ciksXG4gICAgbWludXRlOiBwYXJzZUludGVnZXIobWludXRlU3RyKVxuICB9O1xuICBpZiAoc2Vjb25kU3RyKSByZXN1bHQuc2Vjb25kID0gcGFyc2VJbnRlZ2VyKHNlY29uZFN0cik7XG5cbiAgaWYgKHdlZWtkYXlTdHIpIHtcbiAgICByZXN1bHQud2Vla2RheSA9IHdlZWtkYXlTdHIubGVuZ3RoID4gMyA/IHdlZWtkYXlzTG9uZy5pbmRleE9mKHdlZWtkYXlTdHIpICsgMSA6IHdlZWtkYXlzU2hvcnQuaW5kZXhPZih3ZWVrZGF5U3RyKSArIDE7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufSAvLyBSRkMgMjgyMi81MzIyXG5cblxuY29uc3QgcmZjMjgyMiA9IC9eKD86KE1vbnxUdWV8V2VkfFRodXxGcml8U2F0fFN1biksXFxzKT8oXFxkezEsMn0pXFxzKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKVxccyhcXGR7Miw0fSlcXHMoXFxkXFxkKTooXFxkXFxkKSg/OjooXFxkXFxkKSk/XFxzKD86KFVUfEdNVHxbRUNNUF1bU0RdVCl8KFtael0pfCg/OihbKy1dXFxkXFxkKShcXGRcXGQpKSkkLztcblxuZnVuY3Rpb24gZXh0cmFjdFJGQzI4MjIobWF0Y2gpIHtcbiAgY29uc3QgWywgd2Vla2RheVN0ciwgZGF5U3RyLCBtb250aFN0ciwgeWVhclN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIsIG9ic09mZnNldCwgbWlsT2Zmc2V0LCBvZmZIb3VyU3RyLCBvZmZNaW51dGVTdHJdID0gbWF0Y2gsXG4gICAgICAgIHJlc3VsdCA9IGZyb21TdHJpbmdzKHdlZWtkYXlTdHIsIHllYXJTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyKTtcbiAgbGV0IG9mZnNldDtcblxuICBpZiAob2JzT2Zmc2V0KSB7XG4gICAgb2Zmc2V0ID0gb2JzT2Zmc2V0c1tvYnNPZmZzZXRdO1xuICB9IGVsc2UgaWYgKG1pbE9mZnNldCkge1xuICAgIG9mZnNldCA9IDA7XG4gIH0gZWxzZSB7XG4gICAgb2Zmc2V0ID0gc2lnbmVkT2Zmc2V0KG9mZkhvdXJTdHIsIG9mZk1pbnV0ZVN0cik7XG4gIH1cblxuICByZXR1cm4gW3Jlc3VsdCwgbmV3IEZpeGVkT2Zmc2V0Wm9uZShvZmZzZXQpXTtcbn1cblxuZnVuY3Rpb24gcHJlcHJvY2Vzc1JGQzI4MjIocykge1xuICAvLyBSZW1vdmUgY29tbWVudHMgYW5kIGZvbGRpbmcgd2hpdGVzcGFjZSBhbmQgcmVwbGFjZSBtdWx0aXBsZS1zcGFjZXMgd2l0aCBhIHNpbmdsZSBzcGFjZVxuICByZXR1cm4gcy5yZXBsYWNlKC9cXChbXigpXSpcXCl8W1xcblxcdF0vZywgXCIgXCIpLnJlcGxhY2UoLyhcXHNcXHMrKS9nLCBcIiBcIikudHJpbSgpO1xufSAvLyBodHRwIGRhdGVcblxuXG5jb25zdCByZmMxMTIzID0gL14oTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSwgKFxcZFxcZCkgKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKSAoXFxkezR9KSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSBHTVQkLyxcbiAgICAgIHJmYzg1MCA9IC9eKE1vbmRheXxUdWVzZGF5fFdlZG5lc2RheXxUaHVyc2RheXxGcmlkYXl8U2F0dXJkYXl8U3VuZGF5KSwgKFxcZFxcZCktKEphbnxGZWJ8TWFyfEFwcnxNYXl8SnVufEp1bHxBdWd8U2VwfE9jdHxOb3Z8RGVjKS0oXFxkXFxkKSAoXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKSBHTVQkLyxcbiAgICAgIGFzY2lpID0gL14oTW9ufFR1ZXxXZWR8VGh1fEZyaXxTYXR8U3VuKSAoSmFufEZlYnxNYXJ8QXByfE1heXxKdW58SnVsfEF1Z3xTZXB8T2N0fE5vdnxEZWMpICggXFxkfFxcZFxcZCkgKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCkgKFxcZHs0fSkkLztcblxuZnVuY3Rpb24gZXh0cmFjdFJGQzExMjNPcjg1MChtYXRjaCkge1xuICBjb25zdCBbLCB3ZWVrZGF5U3RyLCBkYXlTdHIsIG1vbnRoU3RyLCB5ZWFyU3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cl0gPSBtYXRjaCxcbiAgICAgICAgcmVzdWx0ID0gZnJvbVN0cmluZ3Mod2Vla2RheVN0ciwgeWVhclN0ciwgbW9udGhTdHIsIGRheVN0ciwgaG91clN0ciwgbWludXRlU3RyLCBzZWNvbmRTdHIpO1xuICByZXR1cm4gW3Jlc3VsdCwgRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlXTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEFTQ0lJKG1hdGNoKSB7XG4gIGNvbnN0IFssIHdlZWtkYXlTdHIsIG1vbnRoU3RyLCBkYXlTdHIsIGhvdXJTdHIsIG1pbnV0ZVN0ciwgc2Vjb25kU3RyLCB5ZWFyU3RyXSA9IG1hdGNoLFxuICAgICAgICByZXN1bHQgPSBmcm9tU3RyaW5ncyh3ZWVrZGF5U3RyLCB5ZWFyU3RyLCBtb250aFN0ciwgZGF5U3RyLCBob3VyU3RyLCBtaW51dGVTdHIsIHNlY29uZFN0cik7XG4gIHJldHVybiBbcmVzdWx0LCBGaXhlZE9mZnNldFpvbmUudXRjSW5zdGFuY2VdO1xufVxuXG5jb25zdCBpc29ZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvWW1kUmVnZXgsIGlzb1RpbWVFeHRlbnNpb25SZWdleCk7XG5jb25zdCBpc29XZWVrV2l0aFRpbWVFeHRlbnNpb25SZWdleCA9IGNvbWJpbmVSZWdleGVzKGlzb1dlZWtSZWdleCwgaXNvVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IGlzb09yZGluYWxXaXRoVGltZUV4dGVuc2lvblJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoaXNvT3JkaW5hbFJlZ2V4LCBpc29UaW1lRXh0ZW5zaW9uUmVnZXgpO1xuY29uc3QgaXNvVGltZUNvbWJpbmVkUmVnZXggPSBjb21iaW5lUmVnZXhlcyhpc29UaW1lUmVnZXgpO1xuY29uc3QgZXh0cmFjdElTT1ltZFRpbWVBbmRPZmZzZXQgPSBjb21iaW5lRXh0cmFjdG9ycyhleHRyYWN0SVNPWW1kLCBleHRyYWN0SVNPVGltZSwgZXh0cmFjdElTT09mZnNldCwgZXh0cmFjdElBTkFab25lKTtcbmNvbnN0IGV4dHJhY3RJU09XZWVrVGltZUFuZE9mZnNldCA9IGNvbWJpbmVFeHRyYWN0b3JzKGV4dHJhY3RJU09XZWVrRGF0YSwgZXh0cmFjdElTT1RpbWUsIGV4dHJhY3RJU09PZmZzZXQsIGV4dHJhY3RJQU5BWm9uZSk7XG5jb25zdCBleHRyYWN0SVNPT3JkaW5hbERhdGVBbmRUaW1lID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT09yZGluYWxEYXRhLCBleHRyYWN0SVNPVGltZSwgZXh0cmFjdElTT09mZnNldCwgZXh0cmFjdElBTkFab25lKTtcbmNvbnN0IGV4dHJhY3RJU09UaW1lQW5kT2Zmc2V0ID0gY29tYmluZUV4dHJhY3RvcnMoZXh0cmFjdElTT1RpbWUsIGV4dHJhY3RJU09PZmZzZXQsIGV4dHJhY3RJQU5BWm9uZSk7XG4vKlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZUlTT0RhdGUocykge1xuICByZXR1cm4gcGFyc2UocywgW2lzb1ltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0XSwgW2lzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPV2Vla1RpbWVBbmRPZmZzZXRdLCBbaXNvT3JkaW5hbFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgsIGV4dHJhY3RJU09PcmRpbmFsRGF0ZUFuZFRpbWVdLCBbaXNvVGltZUNvbWJpbmVkUmVnZXgsIGV4dHJhY3RJU09UaW1lQW5kT2Zmc2V0XSk7XG59XG5mdW5jdGlvbiBwYXJzZVJGQzI4MjJEYXRlKHMpIHtcbiAgcmV0dXJuIHBhcnNlKHByZXByb2Nlc3NSRkMyODIyKHMpLCBbcmZjMjgyMiwgZXh0cmFjdFJGQzI4MjJdKTtcbn1cbmZ1bmN0aW9uIHBhcnNlSFRUUERhdGUocykge1xuICByZXR1cm4gcGFyc2UocywgW3JmYzExMjMsIGV4dHJhY3RSRkMxMTIzT3I4NTBdLCBbcmZjODUwLCBleHRyYWN0UkZDMTEyM09yODUwXSwgW2FzY2lpLCBleHRyYWN0QVNDSUldKTtcbn1cbmZ1bmN0aW9uIHBhcnNlSVNPRHVyYXRpb24ocykge1xuICByZXR1cm4gcGFyc2UocywgW2lzb0R1cmF0aW9uLCBleHRyYWN0SVNPRHVyYXRpb25dKTtcbn1cbmNvbnN0IGV4dHJhY3RJU09UaW1lT25seSA9IGNvbWJpbmVFeHRyYWN0b3JzKGV4dHJhY3RJU09UaW1lKTtcbmZ1bmN0aW9uIHBhcnNlSVNPVGltZU9ubHkocykge1xuICByZXR1cm4gcGFyc2UocywgW2lzb1RpbWVPbmx5LCBleHRyYWN0SVNPVGltZU9ubHldKTtcbn1cbmNvbnN0IHNxbFltZFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXggPSBjb21iaW5lUmVnZXhlcyhzcWxZbWRSZWdleCwgc3FsVGltZUV4dGVuc2lvblJlZ2V4KTtcbmNvbnN0IHNxbFRpbWVDb21iaW5lZFJlZ2V4ID0gY29tYmluZVJlZ2V4ZXMoc3FsVGltZVJlZ2V4KTtcbmNvbnN0IGV4dHJhY3RJU09UaW1lT2Zmc2V0QW5kSUFOQVpvbmUgPSBjb21iaW5lRXh0cmFjdG9ycyhleHRyYWN0SVNPVGltZSwgZXh0cmFjdElTT09mZnNldCwgZXh0cmFjdElBTkFab25lKTtcbmZ1bmN0aW9uIHBhcnNlU1FMKHMpIHtcbiAgcmV0dXJuIHBhcnNlKHMsIFtzcWxZbWRXaXRoVGltZUV4dGVuc2lvblJlZ2V4LCBleHRyYWN0SVNPWW1kVGltZUFuZE9mZnNldF0sIFtzcWxUaW1lQ29tYmluZWRSZWdleCwgZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZV0pO1xufVxuXG5jb25zdCBJTlZBTElEJDIgPSBcIkludmFsaWQgRHVyYXRpb25cIjsgLy8gdW5pdCBjb252ZXJzaW9uIGNvbnN0YW50c1xuXG5jb25zdCBsb3dPcmRlck1hdHJpeCA9IHtcbiAgd2Vla3M6IHtcbiAgICBkYXlzOiA3LFxuICAgIGhvdXJzOiA3ICogMjQsXG4gICAgbWludXRlczogNyAqIDI0ICogNjAsXG4gICAgc2Vjb25kczogNyAqIDI0ICogNjAgKiA2MCxcbiAgICBtaWxsaXNlY29uZHM6IDcgKiAyNCAqIDYwICogNjAgKiAxMDAwXG4gIH0sXG4gIGRheXM6IHtcbiAgICBob3VyczogMjQsXG4gICAgbWludXRlczogMjQgKiA2MCxcbiAgICBzZWNvbmRzOiAyNCAqIDYwICogNjAsXG4gICAgbWlsbGlzZWNvbmRzOiAyNCAqIDYwICogNjAgKiAxMDAwXG4gIH0sXG4gIGhvdXJzOiB7XG4gICAgbWludXRlczogNjAsXG4gICAgc2Vjb25kczogNjAgKiA2MCxcbiAgICBtaWxsaXNlY29uZHM6IDYwICogNjAgKiAxMDAwXG4gIH0sXG4gIG1pbnV0ZXM6IHtcbiAgICBzZWNvbmRzOiA2MCxcbiAgICBtaWxsaXNlY29uZHM6IDYwICogMTAwMFxuICB9LFxuICBzZWNvbmRzOiB7XG4gICAgbWlsbGlzZWNvbmRzOiAxMDAwXG4gIH1cbn0sXG4gICAgICBjYXN1YWxNYXRyaXggPSB7XG4gIHllYXJzOiB7XG4gICAgcXVhcnRlcnM6IDQsXG4gICAgbW9udGhzOiAxMixcbiAgICB3ZWVrczogNTIsXG4gICAgZGF5czogMzY1LFxuICAgIGhvdXJzOiAzNjUgKiAyNCxcbiAgICBtaW51dGVzOiAzNjUgKiAyNCAqIDYwLFxuICAgIHNlY29uZHM6IDM2NSAqIDI0ICogNjAgKiA2MCxcbiAgICBtaWxsaXNlY29uZHM6IDM2NSAqIDI0ICogNjAgKiA2MCAqIDEwMDBcbiAgfSxcbiAgcXVhcnRlcnM6IHtcbiAgICBtb250aHM6IDMsXG4gICAgd2Vla3M6IDEzLFxuICAgIGRheXM6IDkxLFxuICAgIGhvdXJzOiA5MSAqIDI0LFxuICAgIG1pbnV0ZXM6IDkxICogMjQgKiA2MCxcbiAgICBzZWNvbmRzOiA5MSAqIDI0ICogNjAgKiA2MCxcbiAgICBtaWxsaXNlY29uZHM6IDkxICogMjQgKiA2MCAqIDYwICogMTAwMFxuICB9LFxuICBtb250aHM6IHtcbiAgICB3ZWVrczogNCxcbiAgICBkYXlzOiAzMCxcbiAgICBob3VyczogMzAgKiAyNCxcbiAgICBtaW51dGVzOiAzMCAqIDI0ICogNjAsXG4gICAgc2Vjb25kczogMzAgKiAyNCAqIDYwICogNjAsXG4gICAgbWlsbGlzZWNvbmRzOiAzMCAqIDI0ICogNjAgKiA2MCAqIDEwMDBcbiAgfSxcbiAgLi4ubG93T3JkZXJNYXRyaXhcbn0sXG4gICAgICBkYXlzSW5ZZWFyQWNjdXJhdGUgPSAxNDYwOTcuMCAvIDQwMCxcbiAgICAgIGRheXNJbk1vbnRoQWNjdXJhdGUgPSAxNDYwOTcuMCAvIDQ4MDAsXG4gICAgICBhY2N1cmF0ZU1hdHJpeCA9IHtcbiAgeWVhcnM6IHtcbiAgICBxdWFydGVyczogNCxcbiAgICBtb250aHM6IDEyLFxuICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA3LFxuICAgIGRheXM6IGRheXNJblllYXJBY2N1cmF0ZSxcbiAgICBob3VyczogZGF5c0luWWVhckFjY3VyYXRlICogMjQsXG4gICAgbWludXRlczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCxcbiAgICBzZWNvbmRzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjAsXG4gICAgbWlsbGlzZWNvbmRzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwXG4gIH0sXG4gIHF1YXJ0ZXJzOiB7XG4gICAgbW9udGhzOiAzLFxuICAgIHdlZWtzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyAyOCxcbiAgICBkYXlzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgLyA0LFxuICAgIGhvdXJzOiBkYXlzSW5ZZWFyQWNjdXJhdGUgKiAyNCAvIDQsXG4gICAgbWludXRlczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAvIDQsXG4gICAgc2Vjb25kczogZGF5c0luWWVhckFjY3VyYXRlICogMjQgKiA2MCAqIDYwIC8gNCxcbiAgICBtaWxsaXNlY29uZHM6IGRheXNJblllYXJBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCAqIDEwMDAgLyA0XG4gIH0sXG4gIG1vbnRoczoge1xuICAgIHdlZWtzOiBkYXlzSW5Nb250aEFjY3VyYXRlIC8gNyxcbiAgICBkYXlzOiBkYXlzSW5Nb250aEFjY3VyYXRlLFxuICAgIGhvdXJzOiBkYXlzSW5Nb250aEFjY3VyYXRlICogMjQsXG4gICAgbWludXRlczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAsXG4gICAgc2Vjb25kczogZGF5c0luTW9udGhBY2N1cmF0ZSAqIDI0ICogNjAgKiA2MCxcbiAgICBtaWxsaXNlY29uZHM6IGRheXNJbk1vbnRoQWNjdXJhdGUgKiAyNCAqIDYwICogNjAgKiAxMDAwXG4gIH0sXG4gIC4uLmxvd09yZGVyTWF0cml4XG59OyAvLyB1bml0cyBvcmRlcmVkIGJ5IHNpemVcblxuY29uc3Qgb3JkZXJlZFVuaXRzJDEgPSBbXCJ5ZWFyc1wiLCBcInF1YXJ0ZXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgXCJkYXlzXCIsIFwiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiXTtcbmNvbnN0IHJldmVyc2VVbml0cyA9IG9yZGVyZWRVbml0cyQxLnNsaWNlKDApLnJldmVyc2UoKTsgLy8gY2xvbmUgcmVhbGx5IG1lYW5zIFwiY3JlYXRlIGFub3RoZXIgaW5zdGFuY2UganVzdCBsaWtlIHRoaXMgb25lLCBidXQgd2l0aCB0aGVzZSBjaGFuZ2VzXCJcblxuZnVuY3Rpb24gY2xvbmUkMShkdXIsIGFsdHMsIGNsZWFyID0gZmFsc2UpIHtcbiAgLy8gZGVlcCBtZXJnZSBmb3IgdmFsc1xuICBjb25zdCBjb25mID0ge1xuICAgIHZhbHVlczogY2xlYXIgPyBhbHRzLnZhbHVlcyA6IHsgLi4uZHVyLnZhbHVlcyxcbiAgICAgIC4uLihhbHRzLnZhbHVlcyB8fCB7fSlcbiAgICB9LFxuICAgIGxvYzogZHVyLmxvYy5jbG9uZShhbHRzLmxvYyksXG4gICAgY29udmVyc2lvbkFjY3VyYWN5OiBhbHRzLmNvbnZlcnNpb25BY2N1cmFjeSB8fCBkdXIuY29udmVyc2lvbkFjY3VyYWN5XG4gIH07XG4gIHJldHVybiBuZXcgRHVyYXRpb24oY29uZik7XG59XG5cbmZ1bmN0aW9uIGFudGlUcnVuYyhuKSB7XG4gIHJldHVybiBuIDwgMCA/IE1hdGguZmxvb3IobikgOiBNYXRoLmNlaWwobik7XG59IC8vIE5COiBtdXRhdGVzIHBhcmFtZXRlcnNcblxuXG5mdW5jdGlvbiBjb252ZXJ0KG1hdHJpeCwgZnJvbU1hcCwgZnJvbVVuaXQsIHRvTWFwLCB0b1VuaXQpIHtcbiAgY29uc3QgY29udiA9IG1hdHJpeFt0b1VuaXRdW2Zyb21Vbml0XSxcbiAgICAgICAgcmF3ID0gZnJvbU1hcFtmcm9tVW5pdF0gLyBjb252LFxuICAgICAgICBzYW1lU2lnbiA9IE1hdGguc2lnbihyYXcpID09PSBNYXRoLnNpZ24odG9NYXBbdG9Vbml0XSksXG4gICAgICAgIC8vIG9rLCBzbyB0aGlzIGlzIHdpbGQsIGJ1dCBzZWUgdGhlIG1hdHJpeCBpbiB0aGUgdGVzdHNcbiAgYWRkZWQgPSAhc2FtZVNpZ24gJiYgdG9NYXBbdG9Vbml0XSAhPT0gMCAmJiBNYXRoLmFicyhyYXcpIDw9IDEgPyBhbnRpVHJ1bmMocmF3KSA6IE1hdGgudHJ1bmMocmF3KTtcbiAgdG9NYXBbdG9Vbml0XSArPSBhZGRlZDtcbiAgZnJvbU1hcFtmcm9tVW5pdF0gLT0gYWRkZWQgKiBjb252O1xufSAvLyBOQjogbXV0YXRlcyBwYXJhbWV0ZXJzXG5cblxuZnVuY3Rpb24gbm9ybWFsaXplVmFsdWVzKG1hdHJpeCwgdmFscykge1xuICByZXZlcnNlVW5pdHMucmVkdWNlKChwcmV2aW91cywgY3VycmVudCkgPT4ge1xuICAgIGlmICghaXNVbmRlZmluZWQodmFsc1tjdXJyZW50XSkpIHtcbiAgICAgIGlmIChwcmV2aW91cykge1xuICAgICAgICBjb252ZXJ0KG1hdHJpeCwgdmFscywgcHJldmlvdXMsIHZhbHMsIGN1cnJlbnQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY3VycmVudDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHByZXZpb3VzO1xuICAgIH1cbiAgfSwgbnVsbCk7XG59XG4vKipcbiAqIEEgRHVyYXRpb24gb2JqZWN0IHJlcHJlc2VudHMgYSBwZXJpb2Qgb2YgdGltZSwgbGlrZSBcIjIgbW9udGhzXCIgb3IgXCIxIGRheSwgMSBob3VyXCIuIENvbmNlcHR1YWxseSwgaXQncyBqdXN0IGEgbWFwIG9mIHVuaXRzIHRvIHRoZWlyIHF1YW50aXRpZXMsIGFjY29tcGFuaWVkIGJ5IHNvbWUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9uIGFuZCBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLiBUaGV5IGNhbiBiZSB1c2VkIG9uIHRoZWlyIG93biBvciBpbiBjb25qdW5jdGlvbiB3aXRoIG90aGVyIEx1eG9uIHR5cGVzOyBmb3IgZXhhbXBsZSwgeW91IGNhbiB1c2Uge0BsaW5rIERhdGVUaW1lI3BsdXN9IHRvIGFkZCBhIER1cmF0aW9uIG9iamVjdCB0byBhIERhdGVUaW1lLCBwcm9kdWNpbmcgYW5vdGhlciBEYXRlVGltZS5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgY29tbW9ubHkgdXNlZCBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIER1cmF0aW9uOlxuICpcbiAqICogKipDcmVhdGlvbioqIFRvIGNyZWF0ZSBhIER1cmF0aW9uLCB1c2Uge0BsaW5rIER1cmF0aW9uI2Zyb21NaWxsaXN9LCB7QGxpbmsgRHVyYXRpb24jZnJvbU9iamVjdH0sIG9yIHtAbGluayBEdXJhdGlvbiNmcm9tSVNPfS5cbiAqICogKipVbml0IHZhbHVlcyoqIFNlZSB0aGUge0BsaW5rIER1cmF0aW9uI3llYXJzfSwge0BsaW5rIER1cmF0aW9uI21vbnRoc30sIHtAbGluayBEdXJhdGlvbiN3ZWVrc30sIHtAbGluayBEdXJhdGlvbiNkYXlzfSwge0BsaW5rIER1cmF0aW9uI2hvdXJzfSwge0BsaW5rIER1cmF0aW9uI21pbnV0ZXN9LCB7QGxpbmsgRHVyYXRpb24jc2Vjb25kc30sIHtAbGluayBEdXJhdGlvbiNtaWxsaXNlY29uZHN9IGFjY2Vzc29ycy5cbiAqICogKipDb25maWd1cmF0aW9uKiogU2VlICB7QGxpbmsgRHVyYXRpb24jbG9jYWxlfSBhbmQge0BsaW5rIER1cmF0aW9uI251bWJlcmluZ1N5c3RlbX0gYWNjZXNzb3JzLlxuICogKiAqKlRyYW5zZm9ybWF0aW9uKiogVG8gY3JlYXRlIG5ldyBEdXJhdGlvbnMgb3V0IG9mIG9sZCBvbmVzIHVzZSB7QGxpbmsgRHVyYXRpb24jcGx1c30sIHtAbGluayBEdXJhdGlvbiNtaW51c30sIHtAbGluayBEdXJhdGlvbiNub3JtYWxpemV9LCB7QGxpbmsgRHVyYXRpb24jc2V0fSwge0BsaW5rIER1cmF0aW9uI3JlY29uZmlndXJlfSwge0BsaW5rIER1cmF0aW9uI3NoaWZ0VG99LCBhbmQge0BsaW5rIER1cmF0aW9uI25lZ2F0ZX0uXG4gKiAqICoqT3V0cHV0KiogVG8gY29udmVydCB0aGUgRHVyYXRpb24gaW50byBvdGhlciByZXByZXNlbnRhdGlvbnMsIHNlZSB7QGxpbmsgRHVyYXRpb24jYXN9LCB7QGxpbmsgRHVyYXRpb24jdG9JU099LCB7QGxpbmsgRHVyYXRpb24jdG9Gb3JtYXR9LCBhbmQge0BsaW5rIER1cmF0aW9uI3RvSlNPTn1cbiAqXG4gKiBUaGVyZSdzIGFyZSBtb3JlIG1ldGhvZHMgZG9jdW1lbnRlZCBiZWxvdy4gSW4gYWRkaXRpb24sIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHN1YnRsZXIgdG9waWNzIGxpa2UgaW50ZXJuYXRpb25hbGl6YXRpb24gYW5kIHZhbGlkaXR5LCBzZWUgdGhlIGV4dGVybmFsIGRvY3VtZW50YXRpb24uXG4gKi9cblxuXG5jbGFzcyBEdXJhdGlvbiB7XG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgY29uc3QgYWNjdXJhdGUgPSBjb25maWcuY29udmVyc2lvbkFjY3VyYWN5ID09PSBcImxvbmd0ZXJtXCIgfHwgZmFsc2U7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG5cbiAgICB0aGlzLnZhbHVlcyA9IGNvbmZpZy52YWx1ZXM7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG5cbiAgICB0aGlzLmxvYyA9IGNvbmZpZy5sb2MgfHwgTG9jYWxlLmNyZWF0ZSgpO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuXG4gICAgdGhpcy5jb252ZXJzaW9uQWNjdXJhY3kgPSBhY2N1cmF0ZSA/IFwibG9uZ3Rlcm1cIiA6IFwiY2FzdWFsXCI7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG5cbiAgICB0aGlzLmludmFsaWQgPSBjb25maWcuaW52YWxpZCB8fCBudWxsO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuXG4gICAgdGhpcy5tYXRyaXggPSBhY2N1cmF0ZSA/IGFjY3VyYXRlTWF0cml4IDogY2FzdWFsTWF0cml4O1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuXG4gICAgdGhpcy5pc0x1eG9uRHVyYXRpb24gPSB0cnVlO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgRHVyYXRpb24gZnJvbSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMuXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBjb3VudCBvZiBtaWxsaXNlY29uZHNcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zIGZvciBwYXJzaW5nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J2VuLVVTJ10gLSB0aGUgbG9jYWxlIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmNvbnZlcnNpb25BY2N1cmFjeT0nY2FzdWFsJ10gLSB0aGUgY29udmVyc2lvbiBzeXN0ZW0gdG8gdXNlXG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cblxuXG4gIHN0YXRpYyBmcm9tTWlsbGlzKGNvdW50LCBvcHRzKSB7XG4gICAgcmV0dXJuIER1cmF0aW9uLmZyb21PYmplY3Qoe1xuICAgICAgbWlsbGlzZWNvbmRzOiBjb3VudFxuICAgIH0sIG9wdHMpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEdXJhdGlvbiBmcm9tIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCBrZXlzIGxpa2UgJ3llYXJzJyBhbmQgJ2hvdXJzJy5cbiAgICogSWYgdGhpcyBvYmplY3QgaXMgZW1wdHkgdGhlbiBhIHplcm8gbWlsbGlzZWNvbmRzIGR1cmF0aW9uIGlzIHJldHVybmVkLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb2JqIC0gdGhlIG9iamVjdCB0byBjcmVhdGUgdGhlIERhdGVUaW1lIGZyb21cbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai55ZWFyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnF1YXJ0ZXJzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubW9udGhzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoud2Vla3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5kYXlzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouaG91cnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taW51dGVzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouc2Vjb25kc1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1pbGxpc2Vjb25kc1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHM9W11dIC0gb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhpcyBEdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gdGhlIGxvY2FsZSB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG5cblxuICBzdGF0aWMgZnJvbU9iamVjdChvYmosIG9wdHMgPSB7fSkge1xuICAgIGlmIChvYmogPT0gbnVsbCB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYER1cmF0aW9uLmZyb21PYmplY3Q6IGFyZ3VtZW50IGV4cGVjdGVkIHRvIGJlIGFuIG9iamVjdCwgZ290ICR7b2JqID09PSBudWxsID8gXCJudWxsXCIgOiB0eXBlb2Ygb2JqfWApO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgRHVyYXRpb24oe1xuICAgICAgdmFsdWVzOiBub3JtYWxpemVPYmplY3Qob2JqLCBEdXJhdGlvbi5ub3JtYWxpemVVbml0KSxcbiAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0cyksXG4gICAgICBjb252ZXJzaW9uQWNjdXJhY3k6IG9wdHMuY29udmVyc2lvbkFjY3VyYWN5XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gRHVyYXRpb25MaWtlLlxuICAgKlxuICAgKiBAcGFyYW0ge09iamVjdCB8IG51bWJlciB8IER1cmF0aW9ufSBkdXJhdGlvbkxpa2VcbiAgICogT25lIG9mOlxuICAgKiAtIG9iamVjdCB3aXRoIGtleXMgbGlrZSAneWVhcnMnIGFuZCAnaG91cnMnLlxuICAgKiAtIG51bWJlciByZXByZXNlbnRpbmcgbWlsbGlzZWNvbmRzXG4gICAqIC0gRHVyYXRpb24gaW5zdGFuY2VcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuXG5cbiAgc3RhdGljIGZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb25MaWtlKSB7XG4gICAgaWYgKGlzTnVtYmVyKGR1cmF0aW9uTGlrZSkpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5mcm9tTWlsbGlzKGR1cmF0aW9uTGlrZSk7XG4gICAgfSBlbHNlIGlmIChEdXJhdGlvbi5pc0R1cmF0aW9uKGR1cmF0aW9uTGlrZSkpIHtcbiAgICAgIHJldHVybiBkdXJhdGlvbkxpa2U7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZHVyYXRpb25MaWtlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChkdXJhdGlvbkxpa2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYFVua25vd24gZHVyYXRpb24gYXJndW1lbnQgJHtkdXJhdGlvbkxpa2V9IG9mIHR5cGUgJHt0eXBlb2YgZHVyYXRpb25MaWtlfWApO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgRHVyYXRpb24gZnJvbSBhbiBJU08gODYwMSBkdXJhdGlvbiBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGV4dCB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNEdXJhdGlvbnNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTTygnUDNZNk0xVzREVDEySDMwTTVTJykudG9PYmplY3QoKSAvLz0+IHsgeWVhcnM6IDMsIG1vbnRoczogNiwgd2Vla3M6IDEsIGRheXM6IDQsIGhvdXJzOiAxMiwgbWludXRlczogMzAsIHNlY29uZHM6IDUgfVxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPKCdQVDIzSCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAyMyB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU08oJ1A1WTNNJykudG9PYmplY3QoKSAvLz0+IHsgeWVhcnM6IDUsIG1vbnRoczogMyB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cblxuXG4gIHN0YXRpYyBmcm9tSVNPKHRleHQsIG9wdHMpIHtcbiAgICBjb25zdCBbcGFyc2VkXSA9IHBhcnNlSVNPRHVyYXRpb24odGV4dCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChwYXJzZWQsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIER1cmF0aW9uIGZyb20gYW4gSVNPIDg2MDEgdGltZSBzdHJpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGV4dCB0byBwYXJzZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgZm9yIHBhcnNpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIHRoZSBsb2NhbGUgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lc1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tSVNPVGltZSgnMTE6MjI6MzMuNDQ0JykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAyMiwgc2Vjb25kczogMzMsIG1pbGxpc2Vjb25kczogNDQ0IH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJzExOjAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJ1QxMTowMCcpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMSwgbWludXRlczogMCwgc2Vjb25kczogMCB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21JU09UaW1lKCcxMTAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbUlTT1RpbWUoJ1QxMTAwJykudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDExLCBtaW51dGVzOiAwLCBzZWNvbmRzOiAwIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuXG5cbiAgc3RhdGljIGZyb21JU09UaW1lKHRleHQsIG9wdHMpIHtcbiAgICBjb25zdCBbcGFyc2VkXSA9IHBhcnNlSVNPVGltZU9ubHkodGV4dCk7XG5cbiAgICBpZiAocGFyc2VkKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uZnJvbU9iamVjdChwYXJzZWQsIG9wdHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnZhbGlkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBkYXRldGltZSBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwbGFuYXRpb249bnVsbF0gLSBsb25nZXIgZXhwbGFuYXRpb24sIG1heSBpbmNsdWRlIHBhcmFtZXRlcnMgYW5kIG90aGVyIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb25cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuXG5cbiAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBEdXJhdGlvbiBpcyBpbnZhbGlkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7XG5cbiAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkRHVyYXRpb25FcnJvcihpbnZhbGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEdXJhdGlvbih7XG4gICAgICAgIGludmFsaWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG5cblxuICBzdGF0aWMgbm9ybWFsaXplVW5pdCh1bml0KSB7XG4gICAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICAgIHllYXI6IFwieWVhcnNcIixcbiAgICAgIHllYXJzOiBcInllYXJzXCIsXG4gICAgICBxdWFydGVyOiBcInF1YXJ0ZXJzXCIsXG4gICAgICBxdWFydGVyczogXCJxdWFydGVyc1wiLFxuICAgICAgbW9udGg6IFwibW9udGhzXCIsXG4gICAgICBtb250aHM6IFwibW9udGhzXCIsXG4gICAgICB3ZWVrOiBcIndlZWtzXCIsXG4gICAgICB3ZWVrczogXCJ3ZWVrc1wiLFxuICAgICAgZGF5OiBcImRheXNcIixcbiAgICAgIGRheXM6IFwiZGF5c1wiLFxuICAgICAgaG91cjogXCJob3Vyc1wiLFxuICAgICAgaG91cnM6IFwiaG91cnNcIixcbiAgICAgIG1pbnV0ZTogXCJtaW51dGVzXCIsXG4gICAgICBtaW51dGVzOiBcIm1pbnV0ZXNcIixcbiAgICAgIHNlY29uZDogXCJzZWNvbmRzXCIsXG4gICAgICBzZWNvbmRzOiBcInNlY29uZHNcIixcbiAgICAgIG1pbGxpc2Vjb25kOiBcIm1pbGxpc2Vjb25kc1wiLFxuICAgICAgbWlsbGlzZWNvbmRzOiBcIm1pbGxpc2Vjb25kc1wiXG4gICAgfVt1bml0ID8gdW5pdC50b0xvd2VyQ2FzZSgpIDogdW5pdF07XG4gICAgaWYgKCFub3JtYWxpemVkKSB0aHJvdyBuZXcgSW52YWxpZFVuaXRFcnJvcih1bml0KTtcbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGEgRHVyYXRpb24uIFdvcmtzIGFjcm9zcyBjb250ZXh0IGJvdW5kYXJpZXNcbiAgICogQHBhcmFtIHtvYmplY3R9IG9cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBzdGF0aWMgaXNEdXJhdGlvbihvKSB7XG4gICAgcmV0dXJuIG8gJiYgby5pc0x1eG9uRHVyYXRpb24gfHwgZmFsc2U7XG4gIH1cbiAgLyoqXG4gICAqIEdldCAgdGhlIGxvY2FsZSBvZiBhIER1cmF0aW9uLCBzdWNoICdlbi1HQidcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG5cblxuICBnZXQgbG9jYWxlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5sb2NhbGUgOiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIG51bWJlcmluZyBzeXN0ZW0gb2YgYSBEdXJhdGlvbiwgc3VjaCAnYmVuZycuIFRoZSBudW1iZXJpbmcgc3lzdGVtIGlzIHVzZWQgd2hlbiBmb3JtYXR0aW5nIHRoZSBEdXJhdGlvblxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cblxuXG4gIGdldCBudW1iZXJpbmdTeXN0ZW0oKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbSA6IG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBmb3JtYXR0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQgZm9ybWF0IHN0cmluZy4gWW91IG1heSB1c2UgdGhlc2UgdG9rZW5zOlxuICAgKiAqIGBTYCBmb3IgbWlsbGlzZWNvbmRzXG4gICAqICogYHNgIGZvciBzZWNvbmRzXG4gICAqICogYG1gIGZvciBtaW51dGVzXG4gICAqICogYGhgIGZvciBob3Vyc1xuICAgKiAqIGBkYCBmb3IgZGF5c1xuICAgKiAqIGB3YCBmb3Igd2Vla3NcbiAgICogKiBgTWAgZm9yIG1vbnRoc1xuICAgKiAqIGB5YCBmb3IgeWVhcnNcbiAgICogTm90ZXM6XG4gICAqICogQWRkIHBhZGRpbmcgYnkgcmVwZWF0aW5nIHRoZSB0b2tlbiwgZS5nLiBcInl5XCIgcGFkcyB0aGUgeWVhcnMgdG8gdHdvIGRpZ2l0cywgXCJoaGhoXCIgcGFkcyB0aGUgaG91cnMgb3V0IHRvIGZvdXIgZGlnaXRzXG4gICAqICogVG9rZW5zIGNhbiBiZSBlc2NhcGVkIGJ5IHdyYXBwaW5nIHdpdGggc2luZ2xlIHF1b3Rlcy5cbiAgICogKiBUaGUgZHVyYXRpb24gd2lsbCBiZSBjb252ZXJ0ZWQgdG8gdGhlIHNldCBvZiB1bml0cyBpbiB0aGUgZm9ybWF0IHN0cmluZyB1c2luZyB7QGxpbmsgRHVyYXRpb24jc2hpZnRUb30gYW5kIHRoZSBEdXJhdGlvbnMncyBjb252ZXJzaW9uIGFjY3VyYWN5IHNldHRpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5mbG9vcj10cnVlXSAtIGZsb29yIG51bWVyaWNhbCB2YWx1ZXNcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KFwieSBkIHNcIikgLy89PiBcIjEgNiAyXCJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IHllYXJzOiAxLCBkYXlzOiA2LCBzZWNvbmRzOiAyIH0pLnRvRm9ybWF0KFwieXkgZGQgc3NzXCIpIC8vPT4gXCIwMSAwNiAwMDJcIlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgeWVhcnM6IDEsIGRheXM6IDYsIHNlY29uZHM6IDIgfSkudG9Gb3JtYXQoXCJNIFNcIikgLy89PiBcIjEyIDUxODQwMjAwMFwiXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICB0b0Zvcm1hdChmbXQsIG9wdHMgPSB7fSkge1xuICAgIC8vIHJldmVyc2UtY29tcGF0IHNpbmNlIDEuMjsgd2UgYWx3YXlzIHJvdW5kIGRvd24gbm93LCBuZXZlciB1cCwgYW5kIHdlIGRvIGl0IGJ5IGRlZmF1bHRcbiAgICBjb25zdCBmbXRPcHRzID0geyAuLi5vcHRzLFxuICAgICAgZmxvb3I6IG9wdHMucm91bmQgIT09IGZhbHNlICYmIG9wdHMuZmxvb3IgIT09IGZhbHNlXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYywgZm10T3B0cykuZm9ybWF0RHVyYXRpb25Gcm9tU3RyaW5nKHRoaXMsIGZtdCkgOiBJTlZBTElEJDI7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBEdXJhdGlvbiB3aXRoIGFsbCB1bml0cyBpbmNsdWRlZC5cbiAgICogVG8gbW9kaWZ5IGl0cyBiZWhhdmlvciB1c2UgdGhlIGBsaXN0U3R5bGVgIGFuZCBhbnkgSW50bC5OdW1iZXJGb3JtYXQgb3B0aW9uLCB0aG91Z2ggYHVuaXREaXNwbGF5YCBpcyBlc3BlY2lhbGx5IHJlbGV2YW50LlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ludGwvTnVtYmVyRm9ybWF0XG4gICAqIEBwYXJhbSBvcHRzIC0gT24gb3B0aW9uIG9iamVjdCB0byBvdmVycmlkZSB0aGUgZm9ybWF0dGluZy4gQWNjZXB0cyB0aGUgc2FtZSBrZXlzIGFzIHRoZSBvcHRpb25zIHBhcmFtZXRlciBvZiB0aGUgbmF0aXZlIGBJbnQuTnVtYmVyRm9ybWF0YCBjb25zdHJ1Y3RvciwgYXMgd2VsbCBhcyBgbGlzdFN0eWxlYC5cbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogdmFyIGR1ciA9IER1cmF0aW9uLmZyb21PYmplY3QoeyBkYXlzOiAxLCBob3VyczogNSwgbWludXRlczogNiB9KVxuICAgKiBkdXIudG9IdW1hbigpIC8vPT4gJzEgZGF5LCA1IGhvdXJzLCA2IG1pbnV0ZXMnXG4gICAqIGR1ci50b0h1bWFuKHsgbGlzdFN0eWxlOiBcImxvbmdcIiB9KSAvLz0+ICcxIGRheSwgNSBob3VycywgYW5kIDYgbWludXRlcydcbiAgICogZHVyLnRvSHVtYW4oeyB1bml0RGlzcGxheTogXCJzaG9ydFwiIH0pIC8vPT4gJzEgZGF5LCA1IGhyLCA2IG1pbidcbiAgICogYGBgXG4gICAqL1xuXG5cbiAgdG9IdW1hbihvcHRzID0ge30pIHtcbiAgICBjb25zdCBsID0gb3JkZXJlZFVuaXRzJDEubWFwKHVuaXQgPT4ge1xuICAgICAgY29uc3QgdmFsID0gdGhpcy52YWx1ZXNbdW5pdF07XG5cbiAgICAgIGlmIChpc1VuZGVmaW5lZCh2YWwpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5sb2MubnVtYmVyRm9ybWF0dGVyKHtcbiAgICAgICAgc3R5bGU6IFwidW5pdFwiLFxuICAgICAgICB1bml0RGlzcGxheTogXCJsb25nXCIsXG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIHVuaXQ6IHVuaXQuc2xpY2UoMCwgLTEpXG4gICAgICB9KS5mb3JtYXQodmFsKTtcbiAgICB9KS5maWx0ZXIobiA9PiBuKTtcbiAgICByZXR1cm4gdGhpcy5sb2MubGlzdEZvcm1hdHRlcih7XG4gICAgICB0eXBlOiBcImNvbmp1bmN0aW9uXCIsXG4gICAgICBzdHlsZTogb3B0cy5saXN0U3R5bGUgfHwgXCJuYXJyb3dcIixcbiAgICAgIC4uLm9wdHNcbiAgICB9KS5mb3JtYXQobCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIHRoaXMgRHVyYXRpb24ncyB2YWx1ZXMuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9KS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMSwgZGF5czogNiwgc2Vjb25kczogMiB9XG4gICAqIEByZXR1cm4ge09iamVjdH1cbiAgICovXG5cblxuICB0b09iamVjdCgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHt9O1xuICAgIHJldHVybiB7IC4uLnRoaXMudmFsdWVzXG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBJU08gODYwMS1jb21wbGlhbnQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24uXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjRHVyYXRpb25zXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMywgc2Vjb25kczogNDUgfSkudG9JU08oKSAvLz0+ICdQM1lUNDVTJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgbW9udGhzOiA0LCBzZWNvbmRzOiA0NSB9KS50b0lTTygpIC8vPT4gJ1A0TVQ0NVMnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtb250aHM6IDUgfSkudG9JU08oKSAvLz0+ICdQNU0nXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBtaW51dGVzOiA1IH0pLnRvSVNPKCkgLy89PiAnUFQ1TSdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IG1pbGxpc2Vjb25kczogNiB9KS50b0lTTygpIC8vPT4gJ1BUMC4wMDZTJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgdG9JU08oKSB7XG4gICAgLy8gd2UgY291bGQgdXNlIHRoZSBmb3JtYXR0ZXIsIGJ1dCB0aGlzIGlzIGFuIGVhc2llciB3YXkgdG8gZ2V0IHRoZSBtaW5pbXVtIHN0cmluZ1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcbiAgICBsZXQgcyA9IFwiUFwiO1xuICAgIGlmICh0aGlzLnllYXJzICE9PSAwKSBzICs9IHRoaXMueWVhcnMgKyBcIllcIjtcbiAgICBpZiAodGhpcy5tb250aHMgIT09IDAgfHwgdGhpcy5xdWFydGVycyAhPT0gMCkgcyArPSB0aGlzLm1vbnRocyArIHRoaXMucXVhcnRlcnMgKiAzICsgXCJNXCI7XG4gICAgaWYgKHRoaXMud2Vla3MgIT09IDApIHMgKz0gdGhpcy53ZWVrcyArIFwiV1wiO1xuICAgIGlmICh0aGlzLmRheXMgIT09IDApIHMgKz0gdGhpcy5kYXlzICsgXCJEXCI7XG4gICAgaWYgKHRoaXMuaG91cnMgIT09IDAgfHwgdGhpcy5taW51dGVzICE9PSAwIHx8IHRoaXMuc2Vjb25kcyAhPT0gMCB8fCB0aGlzLm1pbGxpc2Vjb25kcyAhPT0gMCkgcyArPSBcIlRcIjtcbiAgICBpZiAodGhpcy5ob3VycyAhPT0gMCkgcyArPSB0aGlzLmhvdXJzICsgXCJIXCI7XG4gICAgaWYgKHRoaXMubWludXRlcyAhPT0gMCkgcyArPSB0aGlzLm1pbnV0ZXMgKyBcIk1cIjtcbiAgICBpZiAodGhpcy5zZWNvbmRzICE9PSAwIHx8IHRoaXMubWlsbGlzZWNvbmRzICE9PSAwKSAvLyB0aGlzIHdpbGwgaGFuZGxlIFwiZmxvYXRpbmcgcG9pbnQgbWFkbmVzc1wiIGJ5IHJlbW92aW5nIGV4dHJhIGRlY2ltYWwgcGxhY2VzXG4gICAgICAvLyBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81ODgwMDQvaXMtZmxvYXRpbmctcG9pbnQtbWF0aC1icm9rZW5cbiAgICAgIHMgKz0gcm91bmRUbyh0aGlzLnNlY29uZHMgKyB0aGlzLm1pbGxpc2Vjb25kcyAvIDEwMDAsIDMpICsgXCJTXCI7XG4gICAgaWYgKHMgPT09IFwiUFwiKSBzICs9IFwiVDBTXCI7XG4gICAgcmV0dXJuIHM7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIER1cmF0aW9uLCBmb3JtYXR0ZWQgYXMgYSB0aW1lIG9mIGRheS5cbiAgICogTm90ZSB0aGF0IHRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGUgZHVyYXRpb24gaXMgaW52YWxpZCwgbmVnYXRpdmUsIG9yIGVxdWFsIHRvIG9yIGdyZWF0ZXIgdGhhbiAyNCBob3Vycy5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZVByZWZpeD1mYWxzZV0gLSBpbmNsdWRlIHRoZSBgVGAgcHJlZml4XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSgpIC8vPT4gJzExOjAwOjAwLjAwMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc01pbGxpc2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcxMTowMDowMCdcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAxMSB9KS50b0lTT1RpbWUoeyBzdXBwcmVzc1NlY29uZHM6IHRydWUgfSkgLy89PiAnMTE6MDAnXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTEgfSkudG9JU09UaW1lKHsgaW5jbHVkZVByZWZpeDogdHJ1ZSB9KSAvLz0+ICdUMTE6MDA6MDAuMDAwJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHsgaG91cnM6IDExIH0pLnRvSVNPVGltZSh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcxMTAwMDAuMDAwJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgdG9JU09UaW1lKG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gbnVsbDtcbiAgICBjb25zdCBtaWxsaXMgPSB0aGlzLnRvTWlsbGlzKCk7XG4gICAgaWYgKG1pbGxpcyA8IDAgfHwgbWlsbGlzID49IDg2NDAwMDAwKSByZXR1cm4gbnVsbDtcbiAgICBvcHRzID0ge1xuICAgICAgc3VwcHJlc3NNaWxsaXNlY29uZHM6IGZhbHNlLFxuICAgICAgc3VwcHJlc3NTZWNvbmRzOiBmYWxzZSxcbiAgICAgIGluY2x1ZGVQcmVmaXg6IGZhbHNlLFxuICAgICAgZm9ybWF0OiBcImV4dGVuZGVkXCIsXG4gICAgICAuLi5vcHRzXG4gICAgfTtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXMuc2hpZnRUbyhcImhvdXJzXCIsIFwibWludXRlc1wiLCBcInNlY29uZHNcIiwgXCJtaWxsaXNlY29uZHNcIik7XG4gICAgbGV0IGZtdCA9IG9wdHMuZm9ybWF0ID09PSBcImJhc2ljXCIgPyBcImhobW1cIiA6IFwiaGg6bW1cIjtcblxuICAgIGlmICghb3B0cy5zdXBwcmVzc1NlY29uZHMgfHwgdmFsdWUuc2Vjb25kcyAhPT0gMCB8fCB2YWx1ZS5taWxsaXNlY29uZHMgIT09IDApIHtcbiAgICAgIGZtdCArPSBvcHRzLmZvcm1hdCA9PT0gXCJiYXNpY1wiID8gXCJzc1wiIDogXCI6c3NcIjtcblxuICAgICAgaWYgKCFvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzIHx8IHZhbHVlLm1pbGxpc2Vjb25kcyAhPT0gMCkge1xuICAgICAgICBmbXQgKz0gXCIuU1NTXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHN0ciA9IHZhbHVlLnRvRm9ybWF0KGZtdCk7XG5cbiAgICBpZiAob3B0cy5pbmNsdWRlUHJlZml4KSB7XG4gICAgICBzdHIgPSBcIlRcIiArIHN0cjtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRHVyYXRpb24gYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBKU09OLlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgdG9KU09OKCkge1xuICAgIHJldHVybiB0aGlzLnRvSVNPKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEdXJhdGlvbiBhcHByb3ByaWF0ZSBmb3IgdXNlIGluIGRlYnVnZ2luZy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLnRvSVNPKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gbWlsbGlzZWNvbmRzIHZhbHVlIG9mIHRoaXMgRHVyYXRpb24uXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG5cblxuICB0b01pbGxpcygpIHtcbiAgICByZXR1cm4gdGhpcy5hcyhcIm1pbGxpc2Vjb25kc1wiKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBtaWxsaXNlY29uZHMgdmFsdWUgb2YgdGhpcyBEdXJhdGlvbi4gQWxpYXMgb2Yge0BsaW5rIHRvTWlsbGlzfVxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuXG5cbiAgdmFsdWVPZigpIHtcbiAgICByZXR1cm4gdGhpcy50b01pbGxpcygpO1xuICB9XG4gIC8qKlxuICAgKiBNYWtlIHRoaXMgRHVyYXRpb24gbG9uZ2VyIGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50LiBSZXR1cm4gYSBuZXdseS1jb25zdHJ1Y3RlZCBEdXJhdGlvbi5cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gYWRkLiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG5cblxuICBwbHVzKGR1cmF0aW9uKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21EdXJhdGlvbkxpa2UoZHVyYXRpb24pLFxuICAgICAgICAgIHJlc3VsdCA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBrIG9mIG9yZGVyZWRVbml0cyQxKSB7XG4gICAgICBpZiAoaGFzT3duUHJvcGVydHkoZHVyLnZhbHVlcywgaykgfHwgaGFzT3duUHJvcGVydHkodGhpcy52YWx1ZXMsIGspKSB7XG4gICAgICAgIHJlc3VsdFtrXSA9IGR1ci5nZXQoaykgKyB0aGlzLmdldChrKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2xvbmUkMSh0aGlzLCB7XG4gICAgICB2YWx1ZXM6IHJlc3VsdFxuICAgIH0sIHRydWUpO1xuICB9XG4gIC8qKlxuICAgKiBNYWtlIHRoaXMgRHVyYXRpb24gc2hvcnRlciBieSB0aGUgc3BlY2lmaWVkIGFtb3VudC4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIHN1YnRyYWN0LiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG5cblxuICBtaW51cyhkdXJhdGlvbikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gdGhpcy5wbHVzKGR1ci5uZWdhdGUoKSk7XG4gIH1cbiAgLyoqXG4gICAqIFNjYWxlIHRoaXMgRHVyYXRpb24gYnkgdGhlIHNwZWNpZmllZCBhbW91bnQuIFJldHVybiBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLlxuICAgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAtIFRoZSBmdW5jdGlvbiB0byBhcHBseSB0byBlYWNoIHVuaXQuIEFyaXR5IGlzIDEgb3IgMjogdGhlIHZhbHVlIG9mIHRoZSB1bml0IGFuZCwgb3B0aW9uYWxseSwgdGhlIHVuaXQgbmFtZS4gTXVzdCByZXR1cm4gYSBudW1iZXIuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgbWludXRlczogMzAgfSkubWFwVW5pdHMoeCA9PiB4ICogMikgLy89PiB7IGhvdXJzOiAyLCBtaW51dGVzOiA2MCB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgbWludXRlczogMzAgfSkubWFwVW5pdHMoKHgsIHUpID0+IHUgPT09IFwiaG91clwiID8geCAqIDIgOiB4KSAvLz0+IHsgaG91cnM6IDIsIG1pbnV0ZXM6IDMwIH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuXG5cbiAgbWFwVW5pdHMoZm4pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IGsgb2YgT2JqZWN0LmtleXModGhpcy52YWx1ZXMpKSB7XG4gICAgICByZXN1bHRba10gPSBhc051bWJlcihmbih0aGlzLnZhbHVlc1trXSwgaykpO1xuICAgIH1cblxuICAgIHJldHVybiBjbG9uZSQxKHRoaXMsIHtcbiAgICAgIHZhbHVlczogcmVzdWx0XG4gICAgfSwgdHJ1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgdmFsdWUgb2YgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBhIHVuaXQgc3VjaCBhcyAnbWludXRlJyBvciAnZGF5J1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgneWVhcnMnKSAvLz0+IDJcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDIsIGRheXM6IDN9KS5nZXQoJ21vbnRocycpIC8vPT4gMFxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMiwgZGF5czogM30pLmdldCgnZGF5cycpIC8vPT4gM1xuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuXG5cbiAgZ2V0KHVuaXQpIHtcbiAgICByZXR1cm4gdGhpc1tEdXJhdGlvbi5ub3JtYWxpemVVbml0KHVuaXQpXTtcbiAgfVxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJuIGEgbmV3bHktY29uc3RydWN0ZWQgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSB2YWx1ZXMgLSBhIG1hcHBpbmcgb2YgdW5pdHMgdG8gbnVtYmVyc1xuICAgKiBAZXhhbXBsZSBkdXIuc2V0KHsgeWVhcnM6IDIwMTcgfSlcbiAgICogQGV4YW1wbGUgZHVyLnNldCh7IGhvdXJzOiA4LCBtaW51dGVzOiAzMCB9KVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG5cblxuICBzZXQodmFsdWVzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IG1peGVkID0geyAuLi50aGlzLnZhbHVlcyxcbiAgICAgIC4uLm5vcm1hbGl6ZU9iamVjdCh2YWx1ZXMsIER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQpXG4gICAgfTtcbiAgICByZXR1cm4gY2xvbmUkMSh0aGlzLCB7XG4gICAgICB2YWx1ZXM6IG1peGVkXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIGxvY2FsZSBhbmQvb3IgbnVtYmVyaW5nU3lzdGVtLiAgUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIER1cmF0aW9uLlxuICAgKiBAZXhhbXBsZSBkdXIucmVjb25maWd1cmUoeyBsb2NhbGU6ICdlbi1HQicgfSlcbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuXG5cbiAgcmVjb25maWd1cmUoe1xuICAgIGxvY2FsZSxcbiAgICBudW1iZXJpbmdTeXN0ZW0sXG4gICAgY29udmVyc2lvbkFjY3VyYWN5XG4gIH0gPSB7fSkge1xuICAgIGNvbnN0IGxvYyA9IHRoaXMubG9jLmNsb25lKHtcbiAgICAgIGxvY2FsZSxcbiAgICAgIG51bWJlcmluZ1N5c3RlbVxuICAgIH0pLFxuICAgICAgICAgIG9wdHMgPSB7XG4gICAgICBsb2NcbiAgICB9O1xuXG4gICAgaWYgKGNvbnZlcnNpb25BY2N1cmFjeSkge1xuICAgICAgb3B0cy5jb252ZXJzaW9uQWNjdXJhY3kgPSBjb252ZXJzaW9uQWNjdXJhY3k7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lJDEodGhpcywgb3B0cyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBkdXJhdGlvbiBpbiB0aGUgc3BlY2lmaWVkIHVuaXQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1bml0IC0gYSB1bml0IHN1Y2ggYXMgJ21pbnV0ZXMnIG9yICdkYXlzJ1xuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHt5ZWFyczogMX0pLmFzKCdkYXlzJykgLy89PiAzNjVcbiAgICogQGV4YW1wbGUgRHVyYXRpb24uZnJvbU9iamVjdCh7eWVhcnM6IDF9KS5hcygnbW9udGhzJykgLy89PiAxMlxuICAgKiBAZXhhbXBsZSBEdXJhdGlvbi5mcm9tT2JqZWN0KHtob3VyczogNjB9KS5hcygnZGF5cycpIC8vPT4gMi41XG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG5cblxuICBhcyh1bml0KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuc2hpZnRUbyh1bml0KS5nZXQodW5pdCkgOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIFJlZHVjZSB0aGlzIER1cmF0aW9uIHRvIGl0cyBjYW5vbmljYWwgcmVwcmVzZW50YXRpb24gaW4gaXRzIGN1cnJlbnQgdW5pdHMuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyB5ZWFyczogMiwgZGF5czogNTAwMCB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyB5ZWFyczogMTUsIGRheXM6IDI1NSB9XG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMTIsIG1pbnV0ZXM6IC00NSB9KS5ub3JtYWxpemUoKS50b09iamVjdCgpIC8vPT4geyBob3VyczogMTEsIG1pbnV0ZXM6IDE1IH1cbiAgICogQHJldHVybiB7RHVyYXRpb259XG4gICAqL1xuXG5cbiAgbm9ybWFsaXplKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCB2YWxzID0gdGhpcy50b09iamVjdCgpO1xuICAgIG5vcm1hbGl6ZVZhbHVlcyh0aGlzLm1hdHJpeCwgdmFscyk7XG4gICAgcmV0dXJuIGNsb25lJDEodGhpcywge1xuICAgICAgdmFsdWVzOiB2YWxzXG4gICAgfSwgdHJ1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIENvbnZlcnQgdGhpcyBEdXJhdGlvbiBpbnRvIGl0cyByZXByZXNlbnRhdGlvbiBpbiBhIGRpZmZlcmVudCBzZXQgb2YgdW5pdHMuXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgc2Vjb25kczogMzAgfSkuc2hpZnRUbygnbWludXRlcycsICdtaWxsaXNlY29uZHMnKS50b09iamVjdCgpIC8vPT4geyBtaW51dGVzOiA2MCwgbWlsbGlzZWNvbmRzOiAzMDAwMCB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cblxuXG4gIHNoaWZ0VG8oLi4udW5pdHMpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG5cbiAgICBpZiAodW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB1bml0cyA9IHVuaXRzLm1hcCh1ID0+IER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodSkpO1xuICAgIGNvbnN0IGJ1aWx0ID0ge30sXG4gICAgICAgICAgYWNjdW11bGF0ZWQgPSB7fSxcbiAgICAgICAgICB2YWxzID0gdGhpcy50b09iamVjdCgpO1xuICAgIGxldCBsYXN0VW5pdDtcblxuICAgIGZvciAoY29uc3QgayBvZiBvcmRlcmVkVW5pdHMkMSkge1xuICAgICAgaWYgKHVuaXRzLmluZGV4T2YoaykgPj0gMCkge1xuICAgICAgICBsYXN0VW5pdCA9IGs7XG4gICAgICAgIGxldCBvd24gPSAwOyAvLyBhbnl0aGluZyB3ZSBoYXZlbid0IGJvaWxlZCBkb3duIHlldCBzaG91bGQgZ2V0IGJvaWxlZCB0byB0aGlzIHVuaXRcblxuICAgICAgICBmb3IgKGNvbnN0IGFrIGluIGFjY3VtdWxhdGVkKSB7XG4gICAgICAgICAgb3duICs9IHRoaXMubWF0cml4W2FrXVtrXSAqIGFjY3VtdWxhdGVkW2FrXTtcbiAgICAgICAgICBhY2N1bXVsYXRlZFtha10gPSAwO1xuICAgICAgICB9IC8vIHBsdXMgYW55dGhpbmcgdGhhdCdzIGFscmVhZHkgaW4gdGhpcyB1bml0XG5cblxuICAgICAgICBpZiAoaXNOdW1iZXIodmFsc1trXSkpIHtcbiAgICAgICAgICBvd24gKz0gdmFsc1trXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGkgPSBNYXRoLnRydW5jKG93bik7XG4gICAgICAgIGJ1aWx0W2tdID0gaTtcbiAgICAgICAgYWNjdW11bGF0ZWRba10gPSAob3duICogMTAwMCAtIGkgKiAxMDAwKSAvIDEwMDA7IC8vIHBsdXMgYW55dGhpbmcgZnVydGhlciBkb3duIHRoZSBjaGFpbiB0aGF0IHNob3VsZCBiZSByb2xsZWQgdXAgaW4gdG8gdGhpc1xuXG4gICAgICAgIGZvciAoY29uc3QgZG93biBpbiB2YWxzKSB7XG4gICAgICAgICAgaWYgKG9yZGVyZWRVbml0cyQxLmluZGV4T2YoZG93bikgPiBvcmRlcmVkVW5pdHMkMS5pbmRleE9mKGspKSB7XG4gICAgICAgICAgICBjb252ZXJ0KHRoaXMubWF0cml4LCB2YWxzLCBkb3duLCBidWlsdCwgayk7XG4gICAgICAgICAgfVxuICAgICAgICB9IC8vIG90aGVyd2lzZSwga2VlcCBpdCBpbiB0aGUgd2luZ3MgdG8gYm9pbCBpdCBsYXRlclxuXG4gICAgICB9IGVsc2UgaWYgKGlzTnVtYmVyKHZhbHNba10pKSB7XG4gICAgICAgIGFjY3VtdWxhdGVkW2tdID0gdmFsc1trXTtcbiAgICAgIH1cbiAgICB9IC8vIGFueXRoaW5nIGxlZnRvdmVyIGJlY29tZXMgdGhlIGRlY2ltYWwgZm9yIHRoZSBsYXN0IHVuaXRcbiAgICAvLyBsYXN0VW5pdCBtdXN0IGJlIGRlZmluZWQgc2luY2UgdW5pdHMgaXMgbm90IGVtcHR5XG5cblxuICAgIGZvciAoY29uc3Qga2V5IGluIGFjY3VtdWxhdGVkKSB7XG4gICAgICBpZiAoYWNjdW11bGF0ZWRba2V5XSAhPT0gMCkge1xuICAgICAgICBidWlsdFtsYXN0VW5pdF0gKz0ga2V5ID09PSBsYXN0VW5pdCA/IGFjY3VtdWxhdGVkW2tleV0gOiBhY2N1bXVsYXRlZFtrZXldIC8gdGhpcy5tYXRyaXhbbGFzdFVuaXRdW2tleV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lJDEodGhpcywge1xuICAgICAgdmFsdWVzOiBidWlsdFxuICAgIH0sIHRydWUpLm5vcm1hbGl6ZSgpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG5lZ2F0aXZlIG9mIHRoaXMgRHVyYXRpb24uXG4gICAqIEBleGFtcGxlIER1cmF0aW9uLmZyb21PYmplY3QoeyBob3VyczogMSwgc2Vjb25kczogMzAgfSkubmVnYXRlKCkudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IC0xLCBzZWNvbmRzOiAtMzAgfVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG5cblxuICBuZWdhdGUoKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IG5lZ2F0ZWQgPSB7fTtcblxuICAgIGZvciAoY29uc3QgayBvZiBPYmplY3Qua2V5cyh0aGlzLnZhbHVlcykpIHtcbiAgICAgIG5lZ2F0ZWRba10gPSB0aGlzLnZhbHVlc1trXSA9PT0gMCA/IDAgOiAtdGhpcy52YWx1ZXNba107XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lJDEodGhpcywge1xuICAgICAgdmFsdWVzOiBuZWdhdGVkXG4gICAgfSwgdHJ1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgeWVhcnMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuXG5cbiAgZ2V0IHllYXJzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy55ZWFycyB8fCAwIDogTmFOO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHF1YXJ0ZXJzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuXG4gIGdldCBxdWFydGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMucXVhcnRlcnMgfHwgMCA6IE5hTjtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBtb250aHMuXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuXG5cbiAgZ2V0IG1vbnRocygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMubW9udGhzIHx8IDAgOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgd2Vla3NcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG5cblxuICBnZXQgd2Vla3MoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMudmFsdWVzLndlZWtzIHx8IDAgOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgZGF5cy5cbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG5cblxuICBnZXQgZGF5cygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuZGF5cyB8fCAwIDogTmFOO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGhvdXJzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuXG4gIGdldCBob3VycygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMuaG91cnMgfHwgMCA6IE5hTjtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBtaW51dGVzLlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuXG4gIGdldCBtaW51dGVzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5taW51dGVzIHx8IDAgOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgc2Vjb25kcy5cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cblxuXG4gIGdldCBzZWNvbmRzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnZhbHVlcy5zZWNvbmRzIHx8IDAgOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgbWlsbGlzZWNvbmRzLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuXG5cbiAgZ2V0IG1pbGxpc2Vjb25kcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy52YWx1ZXMubWlsbGlzZWNvbmRzIHx8IDAgOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgd2hldGhlciB0aGUgRHVyYXRpb24gaXMgaW52YWxpZC4gSW52YWxpZCBkdXJhdGlvbnMgYXJlIHJldHVybmVkIGJ5IGRpZmYgb3BlcmF0aW9uc1xuICAgKiBvbiBpbnZhbGlkIERhdGVUaW1lcyBvciBJbnRlcnZhbHMuXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgZ2V0IGlzVmFsaWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW52YWxpZCA9PT0gbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBlcnJvciBjb2RlIGlmIHRoaXMgRHVyYXRpb24gYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIER1cmF0aW9uIGlzIHZhbGlkXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICBnZXQgaW52YWxpZFJlYXNvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLnJlYXNvbiA6IG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gZXhwbGFuYXRpb24gb2Ygd2h5IHRoaXMgRHVyYXRpb24gYmVjYW1lIGludmFsaWQsIG9yIG51bGwgaWYgdGhlIER1cmF0aW9uIGlzIHZhbGlkXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgZ2V0IGludmFsaWRFeHBsYW5hdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID8gdGhpcy5pbnZhbGlkLmV4cGxhbmF0aW9uIDogbnVsbDtcbiAgfVxuICAvKipcbiAgICogRXF1YWxpdHkgY2hlY2tcbiAgICogVHdvIER1cmF0aW9ucyBhcmUgZXF1YWwgaWZmIHRoZXkgaGF2ZSB0aGUgc2FtZSB1bml0cyBhbmQgdGhlIHNhbWUgdmFsdWVzIGZvciBlYWNoIHVuaXQuXG4gICAqIEBwYXJhbSB7RHVyYXRpb259IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jLmVxdWFscyhvdGhlci5sb2MpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZXEodjEsIHYyKSB7XG4gICAgICAvLyBDb25zaWRlciAwIGFuZCB1bmRlZmluZWQgYXMgZXF1YWxcbiAgICAgIGlmICh2MSA9PT0gdW5kZWZpbmVkIHx8IHYxID09PSAwKSByZXR1cm4gdjIgPT09IHVuZGVmaW5lZCB8fCB2MiA9PT0gMDtcbiAgICAgIHJldHVybiB2MSA9PT0gdjI7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB1IG9mIG9yZGVyZWRVbml0cyQxKSB7XG4gICAgICBpZiAoIWVxKHRoaXMudmFsdWVzW3VdLCBvdGhlci52YWx1ZXNbdV0pKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG59XG5cbmNvbnN0IElOVkFMSUQkMSA9IFwiSW52YWxpZCBJbnRlcnZhbFwiOyAvLyBjaGVja3MgaWYgdGhlIHN0YXJ0IGlzIGVxdWFsIHRvIG9yIGJlZm9yZSB0aGUgZW5kXG5cbmZ1bmN0aW9uIHZhbGlkYXRlU3RhcnRFbmQoc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0IHx8ICFzdGFydC5pc1ZhbGlkKSB7XG4gICAgcmV0dXJuIEludGVydmFsLmludmFsaWQoXCJtaXNzaW5nIG9yIGludmFsaWQgc3RhcnRcIik7XG4gIH0gZWxzZSBpZiAoIWVuZCB8fCAhZW5kLmlzVmFsaWQpIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcIm1pc3Npbmcgb3IgaW52YWxpZCBlbmRcIik7XG4gIH0gZWxzZSBpZiAoZW5kIDwgc3RhcnQpIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcImVuZCBiZWZvcmUgc3RhcnRcIiwgYFRoZSBlbmQgb2YgYW4gaW50ZXJ2YWwgbXVzdCBiZSBhZnRlciBpdHMgc3RhcnQsIGJ1dCB5b3UgaGFkIHN0YXJ0PSR7c3RhcnQudG9JU08oKX0gYW5kIGVuZD0ke2VuZC50b0lTTygpfWApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4vKipcbiAqIEFuIEludGVydmFsIG9iamVjdCByZXByZXNlbnRzIGEgaGFsZi1vcGVuIGludGVydmFsIG9mIHRpbWUsIHdoZXJlIGVhY2ggZW5kcG9pbnQgaXMgYSB7QGxpbmsgRGF0ZVRpbWV9LiBDb25jZXB0dWFsbHksIGl0J3MgYSBjb250YWluZXIgZm9yIHRob3NlIHR3byBlbmRwb2ludHMsIGFjY29tcGFuaWVkIGJ5IG1ldGhvZHMgZm9yIGNyZWF0aW5nLCBwYXJzaW5nLCBpbnRlcnJvZ2F0aW5nLCBjb21wYXJpbmcsIHRyYW5zZm9ybWluZywgYW5kIGZvcm1hdHRpbmcgdGhlbS5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBtZXRob2RzIGFuZCBnZXR0ZXJzIGluIEludGVydmFsOlxuICpcbiAqICogKipDcmVhdGlvbioqIFRvIGNyZWF0ZSBhbiBJbnRlcnZhbCwgdXNlIHtAbGluayBJbnRlcnZhbCNmcm9tRGF0ZVRpbWVzfSwge0BsaW5rIEludGVydmFsI2FmdGVyfSwge0BsaW5rIEludGVydmFsI2JlZm9yZX0sIG9yIHtAbGluayBJbnRlcnZhbCNmcm9tSVNPfS5cbiAqICogKipBY2Nlc3NvcnMqKiBVc2Uge0BsaW5rIEludGVydmFsI3N0YXJ0fSBhbmQge0BsaW5rIEludGVydmFsI2VuZH0gdG8gZ2V0IHRoZSBzdGFydCBhbmQgZW5kLlxuICogKiAqKkludGVycm9nYXRpb24qKiBUbyBhbmFseXplIHRoZSBJbnRlcnZhbCwgdXNlIHtAbGluayBJbnRlcnZhbCNjb3VudH0sIHtAbGluayBJbnRlcnZhbCNsZW5ndGh9LCB7QGxpbmsgSW50ZXJ2YWwjaGFzU2FtZX0sIHtAbGluayBJbnRlcnZhbCNjb250YWluc30sIHtAbGluayBJbnRlcnZhbCNpc0FmdGVyfSwgb3Ige0BsaW5rIEludGVydmFsI2lzQmVmb3JlfS5cbiAqICogKipUcmFuc2Zvcm1hdGlvbioqIFRvIGNyZWF0ZSBvdGhlciBJbnRlcnZhbHMgb3V0IG9mIHRoaXMgb25lLCB1c2Uge0BsaW5rIEludGVydmFsI3NldH0sIHtAbGluayBJbnRlcnZhbCNzcGxpdEF0fSwge0BsaW5rIEludGVydmFsI3NwbGl0Qnl9LCB7QGxpbmsgSW50ZXJ2YWwjZGl2aWRlRXF1YWxseX0sIHtAbGluayBJbnRlcnZhbCNtZXJnZX0sIHtAbGluayBJbnRlcnZhbCN4b3J9LCB7QGxpbmsgSW50ZXJ2YWwjdW5pb259LCB7QGxpbmsgSW50ZXJ2YWwjaW50ZXJzZWN0aW9ufSwgb3Ige0BsaW5rIEludGVydmFsI2RpZmZlcmVuY2V9LlxuICogKiAqKkNvbXBhcmlzb24qKiBUbyBjb21wYXJlIHRoaXMgSW50ZXJ2YWwgdG8gYW5vdGhlciBvbmUsIHVzZSB7QGxpbmsgSW50ZXJ2YWwjZXF1YWxzfSwge0BsaW5rIEludGVydmFsI292ZXJsYXBzfSwge0BsaW5rIEludGVydmFsI2FidXRzU3RhcnR9LCB7QGxpbmsgSW50ZXJ2YWwjYWJ1dHNFbmR9LCB7QGxpbmsgSW50ZXJ2YWwjZW5ndWxmc31cbiAqICogKipPdXRwdXQqKiBUbyBjb252ZXJ0IHRoZSBJbnRlcnZhbCBpbnRvIG90aGVyIHJlcHJlc2VudGF0aW9ucywgc2VlIHtAbGluayBJbnRlcnZhbCN0b1N0cmluZ30sIHtAbGluayBJbnRlcnZhbCN0b0lTT30sIHtAbGluayBJbnRlcnZhbCN0b0lTT0RhdGV9LCB7QGxpbmsgSW50ZXJ2YWwjdG9JU09UaW1lfSwge0BsaW5rIEludGVydmFsI3RvRm9ybWF0fSwgYW5kIHtAbGluayBJbnRlcnZhbCN0b0R1cmF0aW9ufS5cbiAqL1xuXG5cbmNsYXNzIEludGVydmFsIHtcbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cbiAgICB0aGlzLnMgPSBjb25maWcuc3RhcnQ7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG5cbiAgICB0aGlzLmUgPSBjb25maWcuZW5kO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuXG4gICAgdGhpcy5pbnZhbGlkID0gY29uZmlnLmludmFsaWQgfHwgbnVsbDtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cblxuICAgIHRoaXMuaXNMdXhvbkludGVydmFsID0gdHJ1ZTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGFuIGludmFsaWQgSW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gLSBzaW1wbGUgc3RyaW5nIG9mIHdoeSB0aGlzIEludGVydmFsIGlzIGludmFsaWQuIFNob3VsZCBub3QgY29udGFpbiBwYXJhbWV0ZXJzIG9yIGFueXRoaW5nIGVsc2UgZGF0YS1kZXBlbmRlbnRcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtleHBsYW5hdGlvbj1udWxsXSAtIGxvbmdlciBleHBsYW5hdGlvbiwgbWF5IGluY2x1ZGUgcGFyYW1ldGVycyBhbmQgb3RoZXIgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvblxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG5cblxuICBzdGF0aWMgaW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uID0gbnVsbCkge1xuICAgIGlmICghcmVhc29uKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJuZWVkIHRvIHNwZWNpZnkgYSByZWFzb24gdGhlIEludGVydmFsIGlzIGludmFsaWRcIik7XG4gICAgfVxuXG4gICAgY29uc3QgaW52YWxpZCA9IHJlYXNvbiBpbnN0YW5jZW9mIEludmFsaWQgPyByZWFzb24gOiBuZXcgSW52YWxpZChyZWFzb24sIGV4cGxhbmF0aW9uKTtcblxuICAgIGlmIChTZXR0aW5ncy50aHJvd09uSW52YWxpZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRJbnRlcnZhbEVycm9yKGludmFsaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IEludGVydmFsKHtcbiAgICAgICAgaW52YWxpZFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSW50ZXJ2YWwgZnJvbSBhIHN0YXJ0IERhdGVUaW1lIGFuZCBhbiBlbmQgRGF0ZVRpbWUuIEluY2x1c2l2ZSBvZiB0aGUgc3RhcnQgYnV0IG5vdCB0aGUgZW5kLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBzdGFydFxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBlbmRcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuXG5cbiAgc3RhdGljIGZyb21EYXRlVGltZXMoc3RhcnQsIGVuZCkge1xuICAgIGNvbnN0IGJ1aWx0U3RhcnQgPSBmcmllbmRseURhdGVUaW1lKHN0YXJ0KSxcbiAgICAgICAgICBidWlsdEVuZCA9IGZyaWVuZGx5RGF0ZVRpbWUoZW5kKTtcbiAgICBjb25zdCB2YWxpZGF0ZUVycm9yID0gdmFsaWRhdGVTdGFydEVuZChidWlsdFN0YXJ0LCBidWlsdEVuZCk7XG5cbiAgICBpZiAodmFsaWRhdGVFcnJvciA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gbmV3IEludGVydmFsKHtcbiAgICAgICAgc3RhcnQ6IGJ1aWx0U3RhcnQsXG4gICAgICAgIGVuZDogYnVpbHRFbmRcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdmFsaWRhdGVFcnJvcjtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBJbnRlcnZhbCBmcm9tIGEgc3RhcnQgRGF0ZVRpbWUgYW5kIGEgRHVyYXRpb24gdG8gZXh0ZW5kIHRvLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfERhdGV8T2JqZWN0fSBzdGFydFxuICAgKiBAcGFyYW0ge0R1cmF0aW9ufE9iamVjdHxudW1iZXJ9IGR1cmF0aW9uIC0gdGhlIGxlbmd0aCBvZiB0aGUgSW50ZXJ2YWwuXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cblxuXG4gIHN0YXRpYyBhZnRlcihzdGFydCwgZHVyYXRpb24pIHtcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKSxcbiAgICAgICAgICBkdCA9IGZyaWVuZGx5RGF0ZVRpbWUoc3RhcnQpO1xuICAgIHJldHVybiBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0LCBkdC5wbHVzKGR1cikpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSW50ZXJ2YWwgZnJvbSBhbiBlbmQgRGF0ZVRpbWUgYW5kIGEgRHVyYXRpb24gdG8gZXh0ZW5kIGJhY2t3YXJkcyB0by5cbiAgICogQHBhcmFtIHtEYXRlVGltZXxEYXRlfE9iamVjdH0gZW5kXG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSB0aGUgbGVuZ3RoIG9mIHRoZSBJbnRlcnZhbC5cbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuXG5cbiAgc3RhdGljIGJlZm9yZShlbmQsIGR1cmF0aW9uKSB7XG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbiksXG4gICAgICAgICAgZHQgPSBmcmllbmRseURhdGVUaW1lKGVuZCk7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQubWludXMoZHVyKSwgZHQpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYW4gSW50ZXJ2YWwgZnJvbSBhbiBJU08gODYwMSBzdHJpbmcuXG4gICAqIEFjY2VwdHMgYDxzdGFydD4vPGVuZD5gLCBgPHN0YXJ0Pi88ZHVyYXRpb24+YCwgYW5kIGA8ZHVyYXRpb24+LzxlbmQ+YCBmb3JtYXRzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBJU08gc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0c10gLSBvcHRpb25zIHRvIHBhc3Mge0BsaW5rIERhdGVUaW1lI2Zyb21JU099IGFuZCBvcHRpb25hbGx5IHtAbGluayBEdXJhdGlvbiNmcm9tSVNPfVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cblxuXG4gIHN0YXRpYyBmcm9tSVNPKHRleHQsIG9wdHMpIHtcbiAgICBjb25zdCBbcywgZV0gPSAodGV4dCB8fCBcIlwiKS5zcGxpdChcIi9cIiwgMik7XG5cbiAgICBpZiAocyAmJiBlKSB7XG4gICAgICBsZXQgc3RhcnQsIHN0YXJ0SXNWYWxpZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgc3RhcnQgPSBEYXRlVGltZS5mcm9tSVNPKHMsIG9wdHMpO1xuICAgICAgICBzdGFydElzVmFsaWQgPSBzdGFydC5pc1ZhbGlkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBzdGFydElzVmFsaWQgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgbGV0IGVuZCwgZW5kSXNWYWxpZDtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgZW5kID0gRGF0ZVRpbWUuZnJvbUlTTyhlLCBvcHRzKTtcbiAgICAgICAgZW5kSXNWYWxpZCA9IGVuZC5pc1ZhbGlkO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBlbmRJc1ZhbGlkID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydElzVmFsaWQgJiYgZW5kSXNWYWxpZCkge1xuICAgICAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzdGFydCwgZW5kKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXJ0SXNWYWxpZCkge1xuICAgICAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tSVNPKGUsIG9wdHMpO1xuXG4gICAgICAgIGlmIChkdXIuaXNWYWxpZCkge1xuICAgICAgICAgIHJldHVybiBJbnRlcnZhbC5hZnRlcihzdGFydCwgZHVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlbmRJc1ZhbGlkKSB7XG4gICAgICAgIGNvbnN0IGR1ciA9IER1cmF0aW9uLmZyb21JU08ocywgb3B0cyk7XG5cbiAgICAgICAgaWYgKGR1ci5pc1ZhbGlkKSB7XG4gICAgICAgICAgcmV0dXJuIEludGVydmFsLmJlZm9yZShlbmQsIGR1cik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gSW50ZXJ2YWwuaW52YWxpZChcInVucGFyc2FibGVcIiwgYHRoZSBpbnB1dCBcIiR7dGV4dH1cIiBjYW4ndCBiZSBwYXJzZWQgYXMgSVNPIDg2MDFgKTtcbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIEludGVydmFsLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgc3RhdGljIGlzSW50ZXJ2YWwobykge1xuICAgIHJldHVybiBvICYmIG8uaXNMdXhvbkludGVydmFsIHx8IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzdGFydCBvZiB0aGUgSW50ZXJ2YWxcbiAgICogQHR5cGUge0RhdGVUaW1lfVxuICAgKi9cblxuXG4gIGdldCBzdGFydCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5zIDogbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZW5kIG9mIHRoZSBJbnRlcnZhbFxuICAgKiBAdHlwZSB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgZ2V0IGVuZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5lIDogbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYXQgbGVhc3QgaXRzIHN0YXJ0LCBtZWFuaW5nIHRoYXQgdGhlIEludGVydmFsIGlzbid0ICdiYWNrd2FyZHMnLlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkUmVhc29uID09PSBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBJbnRlcnZhbCBpcyBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBJbnRlcnZhbCBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cblxuXG4gIGdldCBpbnZhbGlkUmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQucmVhc29uIDogbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyBJbnRlcnZhbCBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgSW50ZXJ2YWwgaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG5cblxuICBnZXQgaW52YWxpZEV4cGxhbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBsZW5ndGggb2YgdGhlIEludGVydmFsIGluIHRoZSBzcGVjaWZpZWQgdW5pdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSB0aGUgdW5pdCAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gcmV0dXJuIHRoZSBsZW5ndGggaW4uXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG5cblxuICBsZW5ndGgodW5pdCA9IFwibWlsbGlzZWNvbmRzXCIpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy50b0R1cmF0aW9uKC4uLlt1bml0XSkuZ2V0KHVuaXQpIDogTmFOO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjb3VudCBvZiBtaW51dGVzLCBob3VycywgZGF5cywgbW9udGhzLCBvciB5ZWFycyBpbmNsdWRlZCBpbiB0aGUgSW50ZXJ2YWwsIGV2ZW4gaW4gcGFydC5cbiAgICogVW5saWtlIHtAbGluayBJbnRlcnZhbCNsZW5ndGh9IHRoaXMgY291bnRzIHNlY3Rpb25zIG9mIHRoZSBjYWxlbmRhciwgbm90IHBlcmlvZHMgb2YgdGltZSwgZS5nLiBzcGVjaWZ5aW5nICdkYXknXG4gICAqIGFza3MgJ3doYXQgZGF0ZXMgYXJlIGluY2x1ZGVkIGluIHRoaXMgaW50ZXJ2YWw/Jywgbm90ICdob3cgbWFueSBkYXlzIGxvbmcgaXMgdGhpcyBpbnRlcnZhbD8nXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbdW5pdD0nbWlsbGlzZWNvbmRzJ10gLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNvdW50LlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuXG5cbiAgY291bnQodW5pdCA9IFwibWlsbGlzZWNvbmRzXCIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIE5hTjtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuc3RhcnQuc3RhcnRPZih1bml0KSxcbiAgICAgICAgICBlbmQgPSB0aGlzLmVuZC5zdGFydE9mKHVuaXQpO1xuICAgIHJldHVybiBNYXRoLmZsb29yKGVuZC5kaWZmKHN0YXJ0LCB1bml0KS5nZXQodW5pdCkpICsgMTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBzdGFydCBhbmQgZW5kIGFyZSBib3RoIGluIHRoZSBzYW1lIHVuaXQgb2YgdGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY2hlY2sgc2FtZW5lc3Mgb25cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBoYXNTYW1lKHVuaXQpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5pc0VtcHR5KCkgfHwgdGhpcy5lLm1pbnVzKDEpLmhhc1NhbWUodGhpcy5zLCB1bml0KSA6IGZhbHNlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGhhcyB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIERhdGVUaW1lcy5cbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnMudmFsdWVPZigpID09PSB0aGlzLmUudmFsdWVPZigpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsJ3Mgc3RhcnQgaXMgYWZ0ZXIgdGhlIHNwZWNpZmllZCBEYXRlVGltZS5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVRpbWVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBpc0FmdGVyKGRhdGVUaW1lKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gdGhpcy5zID4gZGF0ZVRpbWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYmVmb3JlIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IGRhdGVUaW1lXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgaXNCZWZvcmUoZGF0ZVRpbWUpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiB0aGlzLmUgPD0gZGF0ZVRpbWU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwgY29udGFpbnMgdGhlIHNwZWNpZmllZCBEYXRlVGltZS5cbiAgICogQHBhcmFtIHtEYXRlVGltZX0gZGF0ZVRpbWVcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBjb250YWlucyhkYXRlVGltZSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA8PSBkYXRlVGltZSAmJiB0aGlzLmUgPiBkYXRlVGltZTtcbiAgfVxuICAvKipcbiAgICogXCJTZXRzXCIgdGhlIHN0YXJ0IGFuZC9vciBlbmQgZGF0ZXMuIFJldHVybnMgYSBuZXdseS1jb25zdHJ1Y3RlZCBJbnRlcnZhbC5cbiAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlcyAtIHRoZSB2YWx1ZXMgdG8gc2V0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IHZhbHVlcy5zdGFydCAtIHRoZSBzdGFydGluZyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSB2YWx1ZXMuZW5kIC0gdGhlIGVuZGluZyBEYXRlVGltZVxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG5cblxuICBzZXQoe1xuICAgIHN0YXJ0LFxuICAgIGVuZFxuICB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQgfHwgdGhpcy5zLCBlbmQgfHwgdGhpcy5lKTtcbiAgfVxuICAvKipcbiAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBhdCBlYWNoIG9mIHRoZSBzcGVjaWZpZWQgRGF0ZVRpbWVzXG4gICAqIEBwYXJhbSB7Li4uRGF0ZVRpbWV9IGRhdGVUaW1lcyAtIHRoZSB1bml0IG9mIHRpbWUgdG8gY291bnQuXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cblxuXG4gIHNwbGl0QXQoLi4uZGF0ZVRpbWVzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBbXTtcbiAgICBjb25zdCBzb3J0ZWQgPSBkYXRlVGltZXMubWFwKGZyaWVuZGx5RGF0ZVRpbWUpLmZpbHRlcihkID0+IHRoaXMuY29udGFpbnMoZCkpLnNvcnQoKSxcbiAgICAgICAgICByZXN1bHRzID0gW107XG4gICAgbGV0IHtcbiAgICAgIHNcbiAgICB9ID0gdGhpcyxcbiAgICAgICAgaSA9IDA7XG5cbiAgICB3aGlsZSAocyA8IHRoaXMuZSkge1xuICAgICAgY29uc3QgYWRkZWQgPSBzb3J0ZWRbaV0gfHwgdGhpcy5lLFxuICAgICAgICAgICAgbmV4dCA9ICthZGRlZCA+ICt0aGlzLmUgPyB0aGlzLmUgOiBhZGRlZDtcbiAgICAgIHJlc3VsdHMucHVzaChJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHMsIG5leHQpKTtcbiAgICAgIHMgPSBuZXh0O1xuICAgICAgaSArPSAxO1xuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRzO1xuICB9XG4gIC8qKlxuICAgKiBTcGxpdCB0aGlzIEludGVydmFsIGludG8gc21hbGxlciBJbnRlcnZhbHMsIGVhY2ggb2YgdGhlIHNwZWNpZmllZCBsZW5ndGguXG4gICAqIExlZnQgb3ZlciB0aW1lIGlzIGdyb3VwZWQgaW50byBhIHNtYWxsZXIgaW50ZXJ2YWxcbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBsZW5ndGggb2YgZWFjaCByZXN1bHRpbmcgaW50ZXJ2YWwuXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cblxuXG4gIHNwbGl0QnkoZHVyYXRpb24pIHtcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcblxuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFkdXIuaXNWYWxpZCB8fCBkdXIuYXMoXCJtaWxsaXNlY29uZHNcIikgPT09IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBsZXQge1xuICAgICAgc1xuICAgIH0gPSB0aGlzLFxuICAgICAgICBpZHggPSAxLFxuICAgICAgICBuZXh0O1xuICAgIGNvbnN0IHJlc3VsdHMgPSBbXTtcblxuICAgIHdoaWxlIChzIDwgdGhpcy5lKSB7XG4gICAgICBjb25zdCBhZGRlZCA9IHRoaXMuc3RhcnQucGx1cyhkdXIubWFwVW5pdHMoeCA9PiB4ICogaWR4KSk7XG4gICAgICBuZXh0ID0gK2FkZGVkID4gK3RoaXMuZSA/IHRoaXMuZSA6IGFkZGVkO1xuICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMocywgbmV4dCkpO1xuICAgICAgcyA9IG5leHQ7XG4gICAgICBpZHggKz0gMTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuICAvKipcbiAgICogU3BsaXQgdGhpcyBJbnRlcnZhbCBpbnRvIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHNtYWxsZXIgaW50ZXJ2YWxzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gbnVtYmVyT2ZQYXJ0cyAtIFRoZSBudW1iZXIgb2YgSW50ZXJ2YWxzIHRvIGRpdmlkZSB0aGUgSW50ZXJ2YWwgaW50by5cbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuXG5cbiAgZGl2aWRlRXF1YWxseShudW1iZXJPZlBhcnRzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiBbXTtcbiAgICByZXR1cm4gdGhpcy5zcGxpdEJ5KHRoaXMubGVuZ3RoKCkgLyBudW1iZXJPZlBhcnRzKS5zbGljZSgwLCBudW1iZXJPZlBhcnRzKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBvdmVybGFwcyB3aXRoIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWxcbiAgICogQHBhcmFtIHtJbnRlcnZhbH0gb3RoZXJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBvdmVybGFwcyhvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmUgPiBvdGhlci5zICYmIHRoaXMucyA8IG90aGVyLmU7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoaXMgSW50ZXJ2YWwncyBlbmQgaXMgYWRqYWNlbnQgdG8gdGhlIHNwZWNpZmllZCBJbnRlcnZhbCdzIHN0YXJ0LlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIGFidXRzU3RhcnQob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiArdGhpcy5lID09PSArb3RoZXIucztcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCdzIHN0YXJ0IGlzIGFkamFjZW50IHRvIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwncyBlbmQuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgYWJ1dHNFbmQob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIGZhbHNlO1xuICAgIHJldHVybiArb3RoZXIuZSA9PT0gK3RoaXMucztcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBJbnRlcnZhbCBlbmd1bGZzIHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgZW5ndWxmcyhvdGhlcikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXMucyA8PSBvdGhlci5zICYmIHRoaXMuZSA+PSBvdGhlci5lO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGlzIEludGVydmFsIGhhcyB0aGUgc2FtZSBzdGFydCBhbmQgZW5kIGFzIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgZXF1YWxzKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQgfHwgIW90aGVyLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zLmVxdWFscyhvdGhlci5zKSAmJiB0aGlzLmUuZXF1YWxzKG90aGVyLmUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gSW50ZXJ2YWwgcmVwcmVzZW50aW5nIHRoZSBpbnRlcnNlY3Rpb24gb2YgdGhpcyBJbnRlcnZhbCBhbmQgdGhlIHNwZWNpZmllZCBJbnRlcnZhbC5cbiAgICogU3BlY2lmaWNhbGx5LCB0aGUgcmVzdWx0aW5nIEludGVydmFsIGhhcyB0aGUgbWF4aW11bSBzdGFydCB0aW1lIGFuZCB0aGUgbWluaW11bSBlbmQgdGltZSBvZiB0aGUgdHdvIEludGVydmFscy5cbiAgICogUmV0dXJucyBudWxsIGlmIHRoZSBpbnRlcnNlY3Rpb24gaXMgZW1wdHksIG1lYW5pbmcsIHRoZSBpbnRlcnZhbHMgZG9uJ3QgaW50ZXJzZWN0LlxuICAgKiBAcGFyYW0ge0ludGVydmFsfSBvdGhlclxuICAgKiBAcmV0dXJuIHtJbnRlcnZhbH1cbiAgICovXG5cblxuICBpbnRlcnNlY3Rpb24ob3RoZXIpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgcyA9IHRoaXMucyA+IG90aGVyLnMgPyB0aGlzLnMgOiBvdGhlci5zLFxuICAgICAgICAgIGUgPSB0aGlzLmUgPCBvdGhlci5lID8gdGhpcy5lIDogb3RoZXIuZTtcblxuICAgIGlmIChzID49IGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhzLCBlKTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhbiBJbnRlcnZhbCByZXByZXNlbnRpbmcgdGhlIHVuaW9uIG9mIHRoaXMgSW50ZXJ2YWwgYW5kIHRoZSBzcGVjaWZpZWQgSW50ZXJ2YWwuXG4gICAqIFNwZWNpZmljYWxseSwgdGhlIHJlc3VsdGluZyBJbnRlcnZhbCBoYXMgdGhlIG1pbmltdW0gc3RhcnQgdGltZSBhbmQgdGhlIG1heGltdW0gZW5kIHRpbWUgb2YgdGhlIHR3byBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7SW50ZXJ2YWx9IG90aGVyXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKi9cblxuXG4gIHVuaW9uKG90aGVyKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IHMgPSB0aGlzLnMgPCBvdGhlci5zID8gdGhpcy5zIDogb3RoZXIucyxcbiAgICAgICAgICBlID0gdGhpcy5lID4gb3RoZXIuZSA/IHRoaXMuZSA6IG90aGVyLmU7XG4gICAgcmV0dXJuIEludGVydmFsLmZyb21EYXRlVGltZXMocywgZSk7XG4gIH1cbiAgLyoqXG4gICAqIE1lcmdlIGFuIGFycmF5IG9mIEludGVydmFscyBpbnRvIGEgZXF1aXZhbGVudCBtaW5pbWFsIHNldCBvZiBJbnRlcnZhbHMuXG4gICAqIENvbWJpbmVzIG92ZXJsYXBwaW5nIGFuZCBhZGphY2VudCBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7QXJyYXl9IGludGVydmFsc1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG5cblxuICBzdGF0aWMgbWVyZ2UoaW50ZXJ2YWxzKSB7XG4gICAgY29uc3QgW2ZvdW5kLCBmaW5hbF0gPSBpbnRlcnZhbHMuc29ydCgoYSwgYikgPT4gYS5zIC0gYi5zKS5yZWR1Y2UoKFtzb2ZhciwgY3VycmVudF0sIGl0ZW0pID0+IHtcbiAgICAgIGlmICghY3VycmVudCkge1xuICAgICAgICByZXR1cm4gW3NvZmFyLCBpdGVtXTtcbiAgICAgIH0gZWxzZSBpZiAoY3VycmVudC5vdmVybGFwcyhpdGVtKSB8fCBjdXJyZW50LmFidXRzU3RhcnQoaXRlbSkpIHtcbiAgICAgICAgcmV0dXJuIFtzb2ZhciwgY3VycmVudC51bmlvbihpdGVtKV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gW3NvZmFyLmNvbmNhdChbY3VycmVudF0pLCBpdGVtXTtcbiAgICAgIH1cbiAgICB9LCBbW10sIG51bGxdKTtcblxuICAgIGlmIChmaW5hbCkge1xuICAgICAgZm91bmQucHVzaChmaW5hbCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZvdW5kO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2YgSW50ZXJ2YWxzIHJlcHJlc2VudGluZyB0aGUgc3BhbnMgb2YgdGltZSB0aGF0IG9ubHkgYXBwZWFyIGluIG9uZSBvZiB0aGUgc3BlY2lmaWVkIEludGVydmFscy5cbiAgICogQHBhcmFtIHtBcnJheX0gaW50ZXJ2YWxzXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cblxuXG4gIHN0YXRpYyB4b3IoaW50ZXJ2YWxzKSB7XG4gICAgbGV0IHN0YXJ0ID0gbnVsbCxcbiAgICAgICAgY3VycmVudENvdW50ID0gMDtcbiAgICBjb25zdCByZXN1bHRzID0gW10sXG4gICAgICAgICAgZW5kcyA9IGludGVydmFscy5tYXAoaSA9PiBbe1xuICAgICAgdGltZTogaS5zLFxuICAgICAgdHlwZTogXCJzXCJcbiAgICB9LCB7XG4gICAgICB0aW1lOiBpLmUsXG4gICAgICB0eXBlOiBcImVcIlxuICAgIH1dKSxcbiAgICAgICAgICBmbGF0dGVuZWQgPSBBcnJheS5wcm90b3R5cGUuY29uY2F0KC4uLmVuZHMpLFxuICAgICAgICAgIGFyciA9IGZsYXR0ZW5lZC5zb3J0KChhLCBiKSA9PiBhLnRpbWUgLSBiLnRpbWUpO1xuXG4gICAgZm9yIChjb25zdCBpIG9mIGFycikge1xuICAgICAgY3VycmVudENvdW50ICs9IGkudHlwZSA9PT0gXCJzXCIgPyAxIDogLTE7XG5cbiAgICAgIGlmIChjdXJyZW50Q291bnQgPT09IDEpIHtcbiAgICAgICAgc3RhcnQgPSBpLnRpbWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoc3RhcnQgJiYgK3N0YXJ0ICE9PSAraS50aW1lKSB7XG4gICAgICAgICAgcmVzdWx0cy5wdXNoKEludGVydmFsLmZyb21EYXRlVGltZXMoc3RhcnQsIGkudGltZSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgc3RhcnQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBJbnRlcnZhbC5tZXJnZShyZXN1bHRzKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIEludGVydmFsIHJlcHJlc2VudGluZyB0aGUgc3BhbiBvZiB0aW1lIGluIHRoaXMgSW50ZXJ2YWwgdGhhdCBkb2Vzbid0IG92ZXJsYXAgd2l0aCBhbnkgb2YgdGhlIHNwZWNpZmllZCBJbnRlcnZhbHMuXG4gICAqIEBwYXJhbSB7Li4uSW50ZXJ2YWx9IGludGVydmFsc1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG5cblxuICBkaWZmZXJlbmNlKC4uLmludGVydmFscykge1xuICAgIHJldHVybiBJbnRlcnZhbC54b3IoW3RoaXNdLmNvbmNhdChpbnRlcnZhbHMpKS5tYXAoaSA9PiB0aGlzLmludGVyc2VjdGlvbihpKSkuZmlsdGVyKGkgPT4gaSAmJiAhaS5pc0VtcHR5KCkpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgSW50ZXJ2YWwgYXBwcm9wcmlhdGUgZm9yIGRlYnVnZ2luZy5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIHRvU3RyaW5nKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxO1xuICAgIHJldHVybiBgWyR7dGhpcy5zLnRvSVNPKCl9IOKAkyAke3RoaXMuZS50b0lTTygpfSlgO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBJbnRlcnZhbC5cbiAgICogQHNlZSBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9JU09fODYwMSNUaW1lX2ludGVydmFsc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIFRoZSBzYW1lIG9wdGlvbnMgYXMge0BsaW5rIERhdGVUaW1lI3RvSVNPfVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgdG9JU08ob3B0cykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9JU08ob3B0cyl9LyR7dGhpcy5lLnRvSVNPKG9wdHMpfWA7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBkYXRlIG9mIHRoaXMgSW50ZXJ2YWwuXG4gICAqIFRoZSB0aW1lIGNvbXBvbmVudHMgYXJlIGlnbm9yZWQuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPXzg2MDEjVGltZV9pbnRlcnZhbHNcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIHRvSVNPRGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIElOVkFMSUQkMTtcbiAgICByZXR1cm4gYCR7dGhpcy5zLnRvSVNPRGF0ZSgpfS8ke3RoaXMuZS50b0lTT0RhdGUoKX1gO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGltZSBvZiB0aGlzIEludGVydmFsLlxuICAgKiBUaGUgZGF0ZSBjb21wb25lbnRzIGFyZSBpZ25vcmVkLlxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT184NjAxI1RpbWVfaW50ZXJ2YWxzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gVGhlIHNhbWUgb3B0aW9ucyBhcyB7QGxpbmsgRGF0ZVRpbWUjdG9JU099XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICB0b0lTT1RpbWUob3B0cykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9JU09UaW1lKG9wdHMpfS8ke3RoaXMuZS50b0lTT1RpbWUob3B0cyl9YDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIEludGVydmFsIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGF0ZUZvcm1hdCAtIHRoZSBmb3JtYXQgc3RyaW5nLiBUaGlzIHN0cmluZyBmb3JtYXRzIHRoZSBzdGFydCBhbmQgZW5kIHRpbWUuIFNlZSB7QGxpbmsgRGF0ZVRpbWUjdG9Gb3JtYXR9IGZvciBkZXRhaWxzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLnNlcGFyYXRvciA9ICAnIOKAkyAnXSAtIGEgc2VwYXJhdG9yIHRvIHBsYWNlIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgcmVwcmVzZW50YXRpb25zXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICB0b0Zvcm1hdChkYXRlRm9ybWF0LCB7XG4gICAgc2VwYXJhdG9yID0gXCIg4oCTIFwiXG4gIH0gPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gSU5WQUxJRCQxO1xuICAgIHJldHVybiBgJHt0aGlzLnMudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9JHtzZXBhcmF0b3J9JHt0aGlzLmUudG9Gb3JtYXQoZGF0ZUZvcm1hdCl9YDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGEgRHVyYXRpb24gcmVwcmVzZW50aW5nIHRoZSB0aW1lIHNwYW5uZWQgYnkgdGhpcyBpbnRlcnZhbC5cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIHRoZSBEdXJhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMuY29udmVyc2lvbkFjY3VyYWN5PSdjYXN1YWwnXSAtIHRoZSBjb252ZXJzaW9uIHN5c3RlbSB0byB1c2VcbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbigpLnRvT2JqZWN0KCkgLy89PiB7IG1pbGxpc2Vjb25kczogODg0ODkyNTcgfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS50b0R1cmF0aW9uKCdkYXlzJykudG9PYmplY3QoKSAvLz0+IHsgZGF5czogMS4wMjQxODEyMTUyNzc3Nzc4IH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbihbJ2hvdXJzJywgJ21pbnV0ZXMnXSkudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDI0LCBtaW51dGVzOiAzNC44MjA5NSB9XG4gICAqIEBleGFtcGxlIEludGVydmFsLmZyb21EYXRlVGltZXMoZHQxLCBkdDIpLnRvRHVyYXRpb24oWydob3VycycsICdtaW51dGVzJywgJ3NlY29uZHMnXSkudG9PYmplY3QoKSAvLz0+IHsgaG91cnM6IDI0LCBtaW51dGVzOiAzNCwgc2Vjb25kczogNDkuMjU3IH1cbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikudG9EdXJhdGlvbignc2Vjb25kcycpLnRvT2JqZWN0KCkgLy89PiB7IHNlY29uZHM6IDg4NDg5LjI1NyB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cblxuXG4gIHRvRHVyYXRpb24odW5pdCwgb3B0cykge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRHVyYXRpb24uaW52YWxpZCh0aGlzLmludmFsaWRSZWFzb24pO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmUuZGlmZih0aGlzLnMsIHVuaXQsIG9wdHMpO1xuICB9XG4gIC8qKlxuICAgKiBSdW4gbWFwRm4gb24gdGhlIGludGVydmFsIHN0YXJ0IGFuZCBlbmQsIHJldHVybmluZyBhIG5ldyBJbnRlcnZhbCBmcm9tIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWVzXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb259IG1hcEZuXG4gICAqIEByZXR1cm4ge0ludGVydmFsfVxuICAgKiBAZXhhbXBsZSBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKGR0MSwgZHQyKS5tYXBFbmRwb2ludHMoZW5kcG9pbnQgPT4gZW5kcG9pbnQudG9VVEMoKSlcbiAgICogQGV4YW1wbGUgSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhkdDEsIGR0MikubWFwRW5kcG9pbnRzKGVuZHBvaW50ID0+IGVuZHBvaW50LnBsdXMoeyBob3VyczogMiB9KSlcbiAgICovXG5cblxuICBtYXBFbmRwb2ludHMobWFwRm4pIHtcbiAgICByZXR1cm4gSW50ZXJ2YWwuZnJvbURhdGVUaW1lcyhtYXBGbih0aGlzLnMpLCBtYXBGbih0aGlzLmUpKTtcbiAgfVxuXG59XG5cbi8qKlxuICogVGhlIEluZm8gY2xhc3MgY29udGFpbnMgc3RhdGljIG1ldGhvZHMgZm9yIHJldHJpZXZpbmcgZ2VuZXJhbCB0aW1lIGFuZCBkYXRlIHJlbGF0ZWQgZGF0YS4gRm9yIGV4YW1wbGUsIGl0IGhhcyBtZXRob2RzIGZvciBmaW5kaW5nIG91dCBpZiBhIHRpbWUgem9uZSBoYXMgYSBEU1QsIGZvciBsaXN0aW5nIHRoZSBtb250aHMgaW4gYW55IHN1cHBvcnRlZCBsb2NhbGUsIGFuZCBmb3IgZGlzY292ZXJpbmcgd2hpY2ggb2YgTHV4b24gZmVhdHVyZXMgYXJlIGF2YWlsYWJsZSBpbiB0aGUgY3VycmVudCBlbnZpcm9ubWVudC5cbiAqL1xuXG5jbGFzcyBJbmZvIHtcbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBzcGVjaWZpZWQgem9uZSBjb250YWlucyBhIERTVC5cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZX0gW3pvbmU9J2xvY2FsJ10gLSBab25lIHRvIGNoZWNrLiBEZWZhdWx0cyB0byB0aGUgZW52aXJvbm1lbnQncyBsb2NhbCB6b25lLlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cbiAgc3RhdGljIGhhc0RTVCh6b25lID0gU2V0dGluZ3MuZGVmYXVsdFpvbmUpIHtcbiAgICBjb25zdCBwcm90byA9IERhdGVUaW1lLm5vdygpLnNldFpvbmUoem9uZSkuc2V0KHtcbiAgICAgIG1vbnRoOiAxMlxuICAgIH0pO1xuICAgIHJldHVybiAhem9uZS5pc1VuaXZlcnNhbCAmJiBwcm90by5vZmZzZXQgIT09IHByb3RvLnNldCh7XG4gICAgICBtb250aDogNlxuICAgIH0pLm9mZnNldDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIHNwZWNpZmllZCB6b25lIGlzIGEgdmFsaWQgSUFOQSBzcGVjaWZpZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB6b25lIC0gWm9uZSB0byBjaGVja1xuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIHN0YXRpYyBpc1ZhbGlkSUFOQVpvbmUoem9uZSkge1xuICAgIHJldHVybiBJQU5BWm9uZS5pc1ZhbGlkWm9uZSh6b25lKTtcbiAgfVxuICAvKipcbiAgICogQ29udmVydHMgdGhlIGlucHV0IGludG8gYSB7QGxpbmsgWm9uZX0gaW5zdGFuY2UuXG4gICAqXG4gICAqICogSWYgYGlucHV0YCBpcyBhbHJlYWR5IGEgWm9uZSBpbnN0YW5jZSwgaXQgaXMgcmV0dXJuZWQgdW5jaGFuZ2VkLlxuICAgKiAqIElmIGBpbnB1dGAgaXMgYSBzdHJpbmcgY29udGFpbmluZyBhIHZhbGlkIHRpbWUgem9uZSBuYW1lLCBhIFpvbmUgaW5zdGFuY2VcbiAgICogICB3aXRoIHRoYXQgbmFtZSBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXRgIGlzIGEgc3RyaW5nIHRoYXQgZG9lc24ndCByZWZlciB0byBhIGtub3duIHRpbWUgem9uZSwgYSBab25lXG4gICAqICAgaW5zdGFuY2Ugd2l0aCB7QGxpbmsgWm9uZSNpc1ZhbGlkfSA9PSBmYWxzZSBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXQgaXMgYSBudW1iZXIsIGEgWm9uZSBpbnN0YW5jZSB3aXRoIHRoZSBzcGVjaWZpZWQgZml4ZWQgb2Zmc2V0XG4gICAqICAgaW4gbWludXRlcyBpcyByZXR1cm5lZC5cbiAgICogKiBJZiBgaW5wdXRgIGlzIGBudWxsYCBvciBgdW5kZWZpbmVkYCwgdGhlIGRlZmF1bHQgem9uZSBpcyByZXR1cm5lZC5cbiAgICogQHBhcmFtIHtzdHJpbmd8Wm9uZXxudW1iZXJ9IFtpbnB1dF0gLSB0aGUgdmFsdWUgdG8gYmUgY29udmVydGVkXG4gICAqIEByZXR1cm4ge1pvbmV9XG4gICAqL1xuXG5cbiAgc3RhdGljIG5vcm1hbGl6ZVpvbmUoaW5wdXQpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplWm9uZShpbnB1dCwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gYXJyYXkgb2Ygc3RhbmRhbG9uZSBtb250aCBuYW1lcy5cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgbW9udGggcmVwcmVzZW50YXRpb24sIHN1Y2ggYXMgXCJudW1lcmljXCIsIFwiMi1kaWdpdFwiLCBcIm5hcnJvd1wiLCBcInNob3J0XCIsIFwibG9uZ1wiXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubnVtYmVyaW5nU3lzdGVtPW51bGxdIC0gdGhlIG51bWJlcmluZyBzeXN0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY09iaj1udWxsXSAtIGFuIGV4aXN0aW5nIGxvY2FsZSBvYmplY3QgdG8gdXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcj0nZ3JlZ29yeSddIC0gdGhlIGNhbGVuZGFyXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKClbMF0gLy89PiAnSmFudWFyeSdcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ3Nob3J0JylbMF0gLy89PiAnSmFuJ1xuICAgKiBAZXhhbXBsZSBJbmZvLm1vbnRocygnbnVtZXJpYycpWzBdIC8vPT4gJzEnXG4gICAqIEBleGFtcGxlIEluZm8ubW9udGhzKCdzaG9ydCcsIHsgbG9jYWxlOiAnZnItQ0EnIH0gKVswXSAvLz0+ICdqYW52LidcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ251bWVyaWMnLCB7IGxvY2FsZTogJ2FyJyB9KVswXSAvLz0+ICfZoSdcbiAgICogQGV4YW1wbGUgSW5mby5tb250aHMoJ2xvbmcnLCB7IG91dHB1dENhbGVuZGFyOiAnaXNsYW1pYycgfSlbMF0gLy89PiAnUmFiacq7IEknXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cblxuXG4gIHN0YXRpYyBtb250aHMobGVuZ3RoID0gXCJsb25nXCIsIHtcbiAgICBsb2NhbGUgPSBudWxsLFxuICAgIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsXG4gICAgbG9jT2JqID0gbnVsbCxcbiAgICBvdXRwdXRDYWxlbmRhciA9IFwiZ3JlZ29yeVwiXG4gIH0gPSB7fSkge1xuICAgIHJldHVybiAobG9jT2JqIHx8IExvY2FsZS5jcmVhdGUobG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG91dHB1dENhbGVuZGFyKSkubW9udGhzKGxlbmd0aCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBmb3JtYXQgbW9udGggbmFtZXMuXG4gICAqIEZvcm1hdCBtb250aHMgZGlmZmVyIGZyb20gc3RhbmRhbG9uZSBtb250aHMgaW4gdGhhdCB0aGV5J3JlIG1lYW50IHRvIGFwcGVhciBuZXh0IHRvIHRoZSBkYXkgb2YgdGhlIG1vbnRoLiBJbiBzb21lIGxhbmd1YWdlcywgdGhhdFxuICAgKiBjaGFuZ2VzIHRoZSBzdHJpbmcuXG4gICAqIFNlZSB7QGxpbmsgSW5mbyNtb250aHN9XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdsb25nJ10gLSB0aGUgbGVuZ3RoIG9mIHRoZSBtb250aCByZXByZXNlbnRhdGlvbiwgc3VjaCBhcyBcIm51bWVyaWNcIiwgXCIyLWRpZ2l0XCIsIFwibmFycm93XCIsIFwic2hvcnRcIiwgXCJsb25nXCJcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm91dHB1dENhbGVuZGFyPSdncmVnb3J5J10gLSB0aGUgY2FsZW5kYXJcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuXG5cbiAgc3RhdGljIG1vbnRoc0Zvcm1hdChsZW5ndGggPSBcImxvbmdcIiwge1xuICAgIGxvY2FsZSA9IG51bGwsXG4gICAgbnVtYmVyaW5nU3lzdGVtID0gbnVsbCxcbiAgICBsb2NPYmogPSBudWxsLFxuICAgIG91dHB1dENhbGVuZGFyID0gXCJncmVnb3J5XCJcbiAgfSA9IHt9KSB7XG4gICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgb3V0cHV0Q2FsZW5kYXIpKS5tb250aHMobGVuZ3RoLCB0cnVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIHN0YW5kYWxvbmUgd2VlayBuYW1lcy5cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9HbG9iYWxfT2JqZWN0cy9EYXRlVGltZUZvcm1hdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2xlbmd0aD0nbG9uZyddIC0gdGhlIGxlbmd0aCBvZiB0aGUgd2Vla2RheSByZXByZXNlbnRhdGlvbiwgc3VjaCBhcyBcIm5hcnJvd1wiLCBcInNob3J0XCIsIFwibG9uZ1wiLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZV0gLSB0aGUgbG9jYWxlIGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLm51bWJlcmluZ1N5c3RlbT1udWxsXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NPYmo9bnVsbF0gLSBhbiBleGlzdGluZyBsb2NhbGUgb2JqZWN0IHRvIHVzZVxuICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKClbMF0gLy89PiAnTW9uZGF5J1xuICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKCdzaG9ydCcpWzBdIC8vPT4gJ01vbidcbiAgICogQGV4YW1wbGUgSW5mby53ZWVrZGF5cygnc2hvcnQnLCB7IGxvY2FsZTogJ2ZyLUNBJyB9KVswXSAvLz0+ICdsdW4uJ1xuICAgKiBAZXhhbXBsZSBJbmZvLndlZWtkYXlzKCdzaG9ydCcsIHsgbG9jYWxlOiAnYXInIH0pWzBdIC8vPT4gJ9in2YTYp9ir2YbZitmGJ1xuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG5cblxuICBzdGF0aWMgd2Vla2RheXMobGVuZ3RoID0gXCJsb25nXCIsIHtcbiAgICBsb2NhbGUgPSBudWxsLFxuICAgIG51bWJlcmluZ1N5c3RlbSA9IG51bGwsXG4gICAgbG9jT2JqID0gbnVsbFxuICB9ID0ge30pIHtcbiAgICByZXR1cm4gKGxvY09iaiB8fCBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVtYmVyaW5nU3lzdGVtLCBudWxsKSkud2Vla2RheXMobGVuZ3RoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGZvcm1hdCB3ZWVrIG5hbWVzLlxuICAgKiBGb3JtYXQgd2Vla2RheXMgZGlmZmVyIGZyb20gc3RhbmRhbG9uZSB3ZWVrZGF5cyBpbiB0aGF0IHRoZXkncmUgbWVhbnQgdG8gYXBwZWFyIG5leHQgdG8gbW9yZSBkYXRlIGluZm9ybWF0aW9uLiBJbiBzb21lIGxhbmd1YWdlcywgdGhhdFxuICAgKiBjaGFuZ2VzIHRoZSBzdHJpbmcuXG4gICAqIFNlZSB7QGxpbmsgSW5mbyN3ZWVrZGF5c31cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtsZW5ndGg9J2xvbmcnXSAtIHRoZSBsZW5ndGggb2YgdGhlIG1vbnRoIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwibmFycm93XCIsIFwic2hvcnRcIiwgXCJsb25nXCIuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPW51bGxdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW09bnVsbF0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jT2JqPW51bGxdIC0gYW4gZXhpc3RpbmcgbG9jYWxlIG9iamVjdCB0byB1c2VcbiAgICogQHJldHVybiB7QXJyYXl9XG4gICAqL1xuXG5cbiAgc3RhdGljIHdlZWtkYXlzRm9ybWF0KGxlbmd0aCA9IFwibG9uZ1wiLCB7XG4gICAgbG9jYWxlID0gbnVsbCxcbiAgICBudW1iZXJpbmdTeXN0ZW0gPSBudWxsLFxuICAgIGxvY09iaiA9IG51bGxcbiAgfSA9IHt9KSB7XG4gICAgcmV0dXJuIChsb2NPYmogfHwgTG9jYWxlLmNyZWF0ZShsb2NhbGUsIG51bWJlcmluZ1N5c3RlbSwgbnVsbCkpLndlZWtkYXlzKGxlbmd0aCwgdHJ1ZSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiBhbiBhcnJheSBvZiBtZXJpZGllbXMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlXSAtIHRoZSBsb2NhbGUgY29kZVxuICAgKiBAZXhhbXBsZSBJbmZvLm1lcmlkaWVtcygpIC8vPT4gWyAnQU0nLCAnUE0nIF1cbiAgICogQGV4YW1wbGUgSW5mby5tZXJpZGllbXMoeyBsb2NhbGU6ICdteScgfSkgLy89PiBbICfhgJThgLbhgJThgIDhgLonLCAn4YCK4YCU4YCxJyBdXG4gICAqIEByZXR1cm4ge0FycmF5fVxuICAgKi9cblxuXG4gIHN0YXRpYyBtZXJpZGllbXMoe1xuICAgIGxvY2FsZSA9IG51bGxcbiAgfSA9IHt9KSB7XG4gICAgcmV0dXJuIExvY2FsZS5jcmVhdGUobG9jYWxlKS5tZXJpZGllbXMoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIGFycmF5IG9mIGVyYXMsIHN1Y2ggYXMgWydCQycsICdBRCddLiBUaGUgbG9jYWxlIGNhbiBiZSBzcGVjaWZpZWQsIGJ1dCB0aGUgY2FsZW5kYXIgc3lzdGVtIGlzIGFsd2F5cyBHcmVnb3JpYW4uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbGVuZ3RoPSdzaG9ydCddIC0gdGhlIGxlbmd0aCBvZiB0aGUgZXJhIHJlcHJlc2VudGF0aW9uLCBzdWNoIGFzIFwic2hvcnRcIiBvciBcImxvbmdcIi5cbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGVdIC0gdGhlIGxvY2FsZSBjb2RlXG4gICAqIEBleGFtcGxlIEluZm8uZXJhcygpIC8vPT4gWyAnQkMnLCAnQUQnIF1cbiAgICogQGV4YW1wbGUgSW5mby5lcmFzKCdsb25nJykgLy89PiBbICdCZWZvcmUgQ2hyaXN0JywgJ0Fubm8gRG9taW5pJyBdXG4gICAqIEBleGFtcGxlIEluZm8uZXJhcygnbG9uZycsIHsgbG9jYWxlOiAnZnInIH0pIC8vPT4gWyAnYXZhbnQgSsOpc3VzLUNocmlzdCcsICdhcHLDqHMgSsOpc3VzLUNocmlzdCcgXVxuICAgKiBAcmV0dXJuIHtBcnJheX1cbiAgICovXG5cblxuICBzdGF0aWMgZXJhcyhsZW5ndGggPSBcInNob3J0XCIsIHtcbiAgICBsb2NhbGUgPSBudWxsXG4gIH0gPSB7fSkge1xuICAgIHJldHVybiBMb2NhbGUuY3JlYXRlKGxvY2FsZSwgbnVsbCwgXCJncmVnb3J5XCIpLmVyYXMobGVuZ3RoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHRoZSBzZXQgb2YgYXZhaWxhYmxlIGZlYXR1cmVzIGluIHRoaXMgZW52aXJvbm1lbnQuXG4gICAqIFNvbWUgZmVhdHVyZXMgb2YgTHV4b24gYXJlIG5vdCBhdmFpbGFibGUgaW4gYWxsIGVudmlyb25tZW50cy4gRm9yIGV4YW1wbGUsIG9uIG9sZGVyIGJyb3dzZXJzLCByZWxhdGl2ZSB0aW1lIGZvcm1hdHRpbmcgc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLiBVc2UgdGhpcyBmdW5jdGlvbiB0byBmaWd1cmUgb3V0IGlmIHRoYXQncyB0aGUgY2FzZS5cbiAgICogS2V5czpcbiAgICogKiBgcmVsYXRpdmVgOiB3aGV0aGVyIHRoaXMgZW52aXJvbm1lbnQgc3VwcG9ydHMgcmVsYXRpdmUgdGltZSBmb3JtYXR0aW5nXG4gICAqIEBleGFtcGxlIEluZm8uZmVhdHVyZXMoKSAvLz0+IHsgcmVsYXRpdmU6IGZhbHNlIH1cbiAgICogQHJldHVybiB7T2JqZWN0fVxuICAgKi9cblxuXG4gIHN0YXRpYyBmZWF0dXJlcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVsYXRpdmU6IGhhc1JlbGF0aXZlKClcbiAgICB9O1xuICB9XG5cbn1cblxuZnVuY3Rpb24gZGF5RGlmZihlYXJsaWVyLCBsYXRlcikge1xuICBjb25zdCB1dGNEYXlTdGFydCA9IGR0ID0+IGR0LnRvVVRDKDAsIHtcbiAgICBrZWVwTG9jYWxUaW1lOiB0cnVlXG4gIH0pLnN0YXJ0T2YoXCJkYXlcIikudmFsdWVPZigpLFxuICAgICAgICBtcyA9IHV0Y0RheVN0YXJ0KGxhdGVyKSAtIHV0Y0RheVN0YXJ0KGVhcmxpZXIpO1xuXG4gIHJldHVybiBNYXRoLmZsb29yKER1cmF0aW9uLmZyb21NaWxsaXMobXMpLmFzKFwiZGF5c1wiKSk7XG59XG5cbmZ1bmN0aW9uIGhpZ2hPcmRlckRpZmZzKGN1cnNvciwgbGF0ZXIsIHVuaXRzKSB7XG4gIGNvbnN0IGRpZmZlcnMgPSBbW1wieWVhcnNcIiwgKGEsIGIpID0+IGIueWVhciAtIGEueWVhcl0sIFtcInF1YXJ0ZXJzXCIsIChhLCBiKSA9PiBiLnF1YXJ0ZXIgLSBhLnF1YXJ0ZXJdLCBbXCJtb250aHNcIiwgKGEsIGIpID0+IGIubW9udGggLSBhLm1vbnRoICsgKGIueWVhciAtIGEueWVhcikgKiAxMl0sIFtcIndlZWtzXCIsIChhLCBiKSA9PiB7XG4gICAgY29uc3QgZGF5cyA9IGRheURpZmYoYSwgYik7XG4gICAgcmV0dXJuIChkYXlzIC0gZGF5cyAlIDcpIC8gNztcbiAgfV0sIFtcImRheXNcIiwgZGF5RGlmZl1dO1xuICBjb25zdCByZXN1bHRzID0ge307XG4gIGxldCBsb3dlc3RPcmRlciwgaGlnaFdhdGVyO1xuXG4gIGZvciAoY29uc3QgW3VuaXQsIGRpZmZlcl0gb2YgZGlmZmVycykge1xuICAgIGlmICh1bml0cy5pbmRleE9mKHVuaXQpID49IDApIHtcbiAgICAgIGxvd2VzdE9yZGVyID0gdW5pdDtcbiAgICAgIGxldCBkZWx0YSA9IGRpZmZlcihjdXJzb3IsIGxhdGVyKTtcbiAgICAgIGhpZ2hXYXRlciA9IGN1cnNvci5wbHVzKHtcbiAgICAgICAgW3VuaXRdOiBkZWx0YVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChoaWdoV2F0ZXIgPiBsYXRlcikge1xuICAgICAgICBjdXJzb3IgPSBjdXJzb3IucGx1cyh7XG4gICAgICAgICAgW3VuaXRdOiBkZWx0YSAtIDFcbiAgICAgICAgfSk7XG4gICAgICAgIGRlbHRhIC09IDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjdXJzb3IgPSBoaWdoV2F0ZXI7XG4gICAgICB9XG5cbiAgICAgIHJlc3VsdHNbdW5pdF0gPSBkZWx0YTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2N1cnNvciwgcmVzdWx0cywgaGlnaFdhdGVyLCBsb3dlc3RPcmRlcl07XG59XG5cbmZ1bmN0aW9uIGRpZmYgKGVhcmxpZXIsIGxhdGVyLCB1bml0cywgb3B0cykge1xuICBsZXQgW2N1cnNvciwgcmVzdWx0cywgaGlnaFdhdGVyLCBsb3dlc3RPcmRlcl0gPSBoaWdoT3JkZXJEaWZmcyhlYXJsaWVyLCBsYXRlciwgdW5pdHMpO1xuICBjb25zdCByZW1haW5pbmdNaWxsaXMgPSBsYXRlciAtIGN1cnNvcjtcbiAgY29uc3QgbG93ZXJPcmRlclVuaXRzID0gdW5pdHMuZmlsdGVyKHUgPT4gW1wiaG91cnNcIiwgXCJtaW51dGVzXCIsIFwic2Vjb25kc1wiLCBcIm1pbGxpc2Vjb25kc1wiXS5pbmRleE9mKHUpID49IDApO1xuXG4gIGlmIChsb3dlck9yZGVyVW5pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGhpZ2hXYXRlciA8IGxhdGVyKSB7XG4gICAgICBoaWdoV2F0ZXIgPSBjdXJzb3IucGx1cyh7XG4gICAgICAgIFtsb3dlc3RPcmRlcl06IDFcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChoaWdoV2F0ZXIgIT09IGN1cnNvcikge1xuICAgICAgcmVzdWx0c1tsb3dlc3RPcmRlcl0gPSAocmVzdWx0c1tsb3dlc3RPcmRlcl0gfHwgMCkgKyByZW1haW5pbmdNaWxsaXMgLyAoaGlnaFdhdGVyIC0gY3Vyc29yKTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkdXJhdGlvbiA9IER1cmF0aW9uLmZyb21PYmplY3QocmVzdWx0cywgb3B0cyk7XG5cbiAgaWYgKGxvd2VyT3JkZXJVbml0cy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIER1cmF0aW9uLmZyb21NaWxsaXMocmVtYWluaW5nTWlsbGlzLCBvcHRzKS5zaGlmdFRvKC4uLmxvd2VyT3JkZXJVbml0cykucGx1cyhkdXJhdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGR1cmF0aW9uO1xuICB9XG59XG5cbmNvbnN0IG51bWJlcmluZ1N5c3RlbXMgPSB7XG4gIGFyYWI6IFwiW1xcdTA2NjAtXFx1MDY2OV1cIixcbiAgYXJhYmV4dDogXCJbXFx1MDZGMC1cXHUwNkY5XVwiLFxuICBiYWxpOiBcIltcXHUxQjUwLVxcdTFCNTldXCIsXG4gIGJlbmc6IFwiW1xcdTA5RTYtXFx1MDlFRl1cIixcbiAgZGV2YTogXCJbXFx1MDk2Ni1cXHUwOTZGXVwiLFxuICBmdWxsd2lkZTogXCJbXFx1RkYxMC1cXHVGRjE5XVwiLFxuICBndWpyOiBcIltcXHUwQUU2LVxcdTBBRUZdXCIsXG4gIGhhbmlkZWM6IFwiW+OAh3zkuIB85LqMfOS4iXzlm5t85LqUfOWFrXzkuIN85YWrfOS5nV1cIixcbiAga2htcjogXCJbXFx1MTdFMC1cXHUxN0U5XVwiLFxuICBrbmRhOiBcIltcXHUwQ0U2LVxcdTBDRUZdXCIsXG4gIGxhb286IFwiW1xcdTBFRDAtXFx1MEVEOV1cIixcbiAgbGltYjogXCJbXFx1MTk0Ni1cXHUxOTRGXVwiLFxuICBtbHltOiBcIltcXHUwRDY2LVxcdTBENkZdXCIsXG4gIG1vbmc6IFwiW1xcdTE4MTAtXFx1MTgxOV1cIixcbiAgbXltcjogXCJbXFx1MTA0MC1cXHUxMDQ5XVwiLFxuICBvcnlhOiBcIltcXHUwQjY2LVxcdTBCNkZdXCIsXG4gIHRhbWxkZWM6IFwiW1xcdTBCRTYtXFx1MEJFRl1cIixcbiAgdGVsdTogXCJbXFx1MEM2Ni1cXHUwQzZGXVwiLFxuICB0aGFpOiBcIltcXHUwRTUwLVxcdTBFNTldXCIsXG4gIHRpYnQ6IFwiW1xcdTBGMjAtXFx1MEYyOV1cIixcbiAgbGF0bjogXCJcXFxcZFwiXG59O1xuY29uc3QgbnVtYmVyaW5nU3lzdGVtc1VURjE2ID0ge1xuICBhcmFiOiBbMTYzMiwgMTY0MV0sXG4gIGFyYWJleHQ6IFsxNzc2LCAxNzg1XSxcbiAgYmFsaTogWzY5OTIsIDcwMDFdLFxuICBiZW5nOiBbMjUzNCwgMjU0M10sXG4gIGRldmE6IFsyNDA2LCAyNDE1XSxcbiAgZnVsbHdpZGU6IFs2NTI5NiwgNjUzMDNdLFxuICBndWpyOiBbMjc5MCwgMjc5OV0sXG4gIGtobXI6IFs2MTEyLCA2MTIxXSxcbiAga25kYTogWzMzMDIsIDMzMTFdLFxuICBsYW9vOiBbMzc5MiwgMzgwMV0sXG4gIGxpbWI6IFs2NDcwLCA2NDc5XSxcbiAgbWx5bTogWzM0MzAsIDM0MzldLFxuICBtb25nOiBbNjE2MCwgNjE2OV0sXG4gIG15bXI6IFs0MTYwLCA0MTY5XSxcbiAgb3J5YTogWzI5MTgsIDI5MjddLFxuICB0YW1sZGVjOiBbMzA0NiwgMzA1NV0sXG4gIHRlbHU6IFszMTc0LCAzMTgzXSxcbiAgdGhhaTogWzM2NjQsIDM2NzNdLFxuICB0aWJ0OiBbMzg3MiwgMzg4MV1cbn07XG5jb25zdCBoYW5pZGVjQ2hhcnMgPSBudW1iZXJpbmdTeXN0ZW1zLmhhbmlkZWMucmVwbGFjZSgvW1xcW3xcXF1dL2csIFwiXCIpLnNwbGl0KFwiXCIpO1xuZnVuY3Rpb24gcGFyc2VEaWdpdHMoc3RyKSB7XG4gIGxldCB2YWx1ZSA9IHBhcnNlSW50KHN0ciwgMTApO1xuXG4gIGlmIChpc05hTih2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IFwiXCI7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgY29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuXG4gICAgICBpZiAoc3RyW2ldLnNlYXJjaChudW1iZXJpbmdTeXN0ZW1zLmhhbmlkZWMpICE9PSAtMSkge1xuICAgICAgICB2YWx1ZSArPSBoYW5pZGVjQ2hhcnMuaW5kZXhPZihzdHJbaV0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbnVtYmVyaW5nU3lzdGVtc1VURjE2KSB7XG4gICAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IG51bWJlcmluZ1N5c3RlbXNVVEYxNltrZXldO1xuXG4gICAgICAgICAgaWYgKGNvZGUgPj0gbWluICYmIGNvZGUgPD0gbWF4KSB7XG4gICAgICAgICAgICB2YWx1ZSArPSBjb2RlIC0gbWluO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBwYXJzZUludCh2YWx1ZSwgMTApO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gZGlnaXRSZWdleCh7XG4gIG51bWJlcmluZ1N5c3RlbVxufSwgYXBwZW5kID0gXCJcIikge1xuICByZXR1cm4gbmV3IFJlZ0V4cChgJHtudW1iZXJpbmdTeXN0ZW1zW251bWJlcmluZ1N5c3RlbSB8fCBcImxhdG5cIl19JHthcHBlbmR9YCk7XG59XG5cbmNvbnN0IE1JU1NJTkdfRlRQID0gXCJtaXNzaW5nIEludGwuRGF0ZVRpbWVGb3JtYXQuZm9ybWF0VG9QYXJ0cyBzdXBwb3J0XCI7XG5cbmZ1bmN0aW9uIGludFVuaXQocmVnZXgsIHBvc3QgPSBpID0+IGkpIHtcbiAgcmV0dXJuIHtcbiAgICByZWdleCxcbiAgICBkZXNlcjogKFtzXSkgPT4gcG9zdChwYXJzZURpZ2l0cyhzKSlcbiAgfTtcbn1cblxuY29uc3QgTkJTUCA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMTYwKTtcbmNvbnN0IHNwYWNlT3JOQlNQID0gYFsgJHtOQlNQfV1gO1xuY29uc3Qgc3BhY2VPck5CU1BSZWdFeHAgPSBuZXcgUmVnRXhwKHNwYWNlT3JOQlNQLCBcImdcIik7XG5cbmZ1bmN0aW9uIGZpeExpc3RSZWdleChzKSB7XG4gIC8vIG1ha2UgZG90cyBvcHRpb25hbCBhbmQgYWxzbyBtYWtlIHRoZW0gbGl0ZXJhbFxuICAvLyBtYWtlIHNwYWNlIGFuZCBub24gYnJlYWthYmxlIHNwYWNlIGNoYXJhY3RlcnMgaW50ZXJjaGFuZ2VhYmxlXG4gIHJldHVybiBzLnJlcGxhY2UoL1xcLi9nLCBcIlxcXFwuP1wiKS5yZXBsYWNlKHNwYWNlT3JOQlNQUmVnRXhwLCBzcGFjZU9yTkJTUCk7XG59XG5cbmZ1bmN0aW9uIHN0cmlwSW5zZW5zaXRpdml0aWVzKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvXFwuL2csIFwiXCIpIC8vIGlnbm9yZSBkb3RzIHRoYXQgd2VyZSBtYWRlIG9wdGlvbmFsXG4gIC5yZXBsYWNlKHNwYWNlT3JOQlNQUmVnRXhwLCBcIiBcIikgLy8gaW50ZXJjaGFuZ2Ugc3BhY2UgYW5kIG5ic3BcbiAgLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG9uZU9mKHN0cmluZ3MsIHN0YXJ0SW5kZXgpIHtcbiAgaWYgKHN0cmluZ3MgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgcmVnZXg6IFJlZ0V4cChzdHJpbmdzLm1hcChmaXhMaXN0UmVnZXgpLmpvaW4oXCJ8XCIpKSxcbiAgICAgIGRlc2VyOiAoW3NdKSA9PiBzdHJpbmdzLmZpbmRJbmRleChpID0+IHN0cmlwSW5zZW5zaXRpdml0aWVzKHMpID09PSBzdHJpcEluc2Vuc2l0aXZpdGllcyhpKSkgKyBzdGFydEluZGV4XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBvZmZzZXQocmVnZXgsIGdyb3Vwcykge1xuICByZXR1cm4ge1xuICAgIHJlZ2V4LFxuICAgIGRlc2VyOiAoWywgaCwgbV0pID0+IHNpZ25lZE9mZnNldChoLCBtKSxcbiAgICBncm91cHNcbiAgfTtcbn1cblxuZnVuY3Rpb24gc2ltcGxlKHJlZ2V4KSB7XG4gIHJldHVybiB7XG4gICAgcmVnZXgsXG4gICAgZGVzZXI6IChbc10pID0+IHNcbiAgfTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlVG9rZW4odmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoL1tcXC1cXFtcXF17fSgpKis/LixcXFxcXFxeJHwjXFxzXS9nLCBcIlxcXFwkJlwiKTtcbn1cblxuZnVuY3Rpb24gdW5pdEZvclRva2VuKHRva2VuLCBsb2MpIHtcbiAgY29uc3Qgb25lID0gZGlnaXRSZWdleChsb2MpLFxuICAgICAgICB0d28gPSBkaWdpdFJlZ2V4KGxvYywgXCJ7Mn1cIiksXG4gICAgICAgIHRocmVlID0gZGlnaXRSZWdleChsb2MsIFwiezN9XCIpLFxuICAgICAgICBmb3VyID0gZGlnaXRSZWdleChsb2MsIFwiezR9XCIpLFxuICAgICAgICBzaXggPSBkaWdpdFJlZ2V4KGxvYywgXCJ7Nn1cIiksXG4gICAgICAgIG9uZU9yVHdvID0gZGlnaXRSZWdleChsb2MsIFwiezEsMn1cIiksXG4gICAgICAgIG9uZVRvVGhyZWUgPSBkaWdpdFJlZ2V4KGxvYywgXCJ7MSwzfVwiKSxcbiAgICAgICAgb25lVG9TaXggPSBkaWdpdFJlZ2V4KGxvYywgXCJ7MSw2fVwiKSxcbiAgICAgICAgb25lVG9OaW5lID0gZGlnaXRSZWdleChsb2MsIFwiezEsOX1cIiksXG4gICAgICAgIHR3b1RvRm91ciA9IGRpZ2l0UmVnZXgobG9jLCBcInsyLDR9XCIpLFxuICAgICAgICBmb3VyVG9TaXggPSBkaWdpdFJlZ2V4KGxvYywgXCJ7NCw2fVwiKSxcbiAgICAgICAgbGl0ZXJhbCA9IHQgPT4gKHtcbiAgICByZWdleDogUmVnRXhwKGVzY2FwZVRva2VuKHQudmFsKSksXG4gICAgZGVzZXI6IChbc10pID0+IHMsXG4gICAgbGl0ZXJhbDogdHJ1ZVxuICB9KSxcbiAgICAgICAgdW5pdGF0ZSA9IHQgPT4ge1xuICAgIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgICByZXR1cm4gbGl0ZXJhbCh0KTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKHQudmFsKSB7XG4gICAgICAvLyBlcmFcbiAgICAgIGNhc2UgXCJHXCI6XG4gICAgICAgIHJldHVybiBvbmVPZihsb2MuZXJhcyhcInNob3J0XCIsIGZhbHNlKSwgMCk7XG5cbiAgICAgIGNhc2UgXCJHR1wiOlxuICAgICAgICByZXR1cm4gb25lT2YobG9jLmVyYXMoXCJsb25nXCIsIGZhbHNlKSwgMCk7XG4gICAgICAvLyB5ZWFyc1xuXG4gICAgICBjYXNlIFwieVwiOlxuICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1NpeCk7XG5cbiAgICAgIGNhc2UgXCJ5eVwiOlxuICAgICAgICByZXR1cm4gaW50VW5pdCh0d29Ub0ZvdXIsIHVudHJ1bmNhdGVZZWFyKTtcblxuICAgICAgY2FzZSBcInl5eXlcIjpcbiAgICAgICAgcmV0dXJuIGludFVuaXQoZm91cik7XG5cbiAgICAgIGNhc2UgXCJ5eXl5eVwiOlxuICAgICAgICByZXR1cm4gaW50VW5pdChmb3VyVG9TaXgpO1xuXG4gICAgICBjYXNlIFwieXl5eXl5XCI6XG4gICAgICAgIHJldHVybiBpbnRVbml0KHNpeCk7XG4gICAgICAvLyBtb250aHNcblxuICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgcmV0dXJuIGludFVuaXQob25lT3JUd28pO1xuXG4gICAgICBjYXNlIFwiTU1cIjpcbiAgICAgICAgcmV0dXJuIGludFVuaXQodHdvKTtcblxuICAgICAgY2FzZSBcIk1NTVwiOlxuICAgICAgICByZXR1cm4gb25lT2YobG9jLm1vbnRocyhcInNob3J0XCIsIHRydWUsIGZhbHNlKSwgMSk7XG5cbiAgICAgIGNhc2UgXCJNTU1NXCI6XG4gICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwibG9uZ1wiLCB0cnVlLCBmYWxzZSksIDEpO1xuXG4gICAgICBjYXNlIFwiTFwiOlxuICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG5cbiAgICAgIGNhc2UgXCJMTFwiOlxuICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuXG4gICAgICBjYXNlIFwiTExMXCI6XG4gICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwic2hvcnRcIiwgZmFsc2UsIGZhbHNlKSwgMSk7XG5cbiAgICAgIGNhc2UgXCJMTExMXCI6XG4gICAgICAgIHJldHVybiBvbmVPZihsb2MubW9udGhzKFwibG9uZ1wiLCBmYWxzZSwgZmFsc2UpLCAxKTtcbiAgICAgIC8vIGRhdGVzXG5cbiAgICAgIGNhc2UgXCJkXCI6XG4gICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcblxuICAgICAgY2FzZSBcImRkXCI6XG4gICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG4gICAgICAvLyBvcmRpbmFsc1xuXG4gICAgICBjYXNlIFwib1wiOlxuICAgICAgICByZXR1cm4gaW50VW5pdChvbmVUb1RocmVlKTtcblxuICAgICAgY2FzZSBcIm9vb1wiOlxuICAgICAgICByZXR1cm4gaW50VW5pdCh0aHJlZSk7XG4gICAgICAvLyB0aW1lXG5cbiAgICAgIGNhc2UgXCJISFwiOlxuICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuXG4gICAgICBjYXNlIFwiSFwiOlxuICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG5cbiAgICAgIGNhc2UgXCJoaFwiOlxuICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuXG4gICAgICBjYXNlIFwiaFwiOlxuICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG5cbiAgICAgIGNhc2UgXCJtbVwiOlxuICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuXG4gICAgICBjYXNlIFwibVwiOlxuICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG5cbiAgICAgIGNhc2UgXCJxXCI6XG4gICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcblxuICAgICAgY2FzZSBcInFxXCI6XG4gICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG5cbiAgICAgIGNhc2UgXCJzXCI6XG4gICAgICAgIHJldHVybiBpbnRVbml0KG9uZU9yVHdvKTtcblxuICAgICAgY2FzZSBcInNzXCI6XG4gICAgICAgIHJldHVybiBpbnRVbml0KHR3byk7XG5cbiAgICAgIGNhc2UgXCJTXCI6XG4gICAgICAgIHJldHVybiBpbnRVbml0KG9uZVRvVGhyZWUpO1xuXG4gICAgICBjYXNlIFwiU1NTXCI6XG4gICAgICAgIHJldHVybiBpbnRVbml0KHRocmVlKTtcblxuICAgICAgY2FzZSBcInVcIjpcbiAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVUb05pbmUpO1xuXG4gICAgICBjYXNlIFwidXVcIjpcbiAgICAgICAgcmV0dXJuIHNpbXBsZShvbmVPclR3byk7XG5cbiAgICAgIGNhc2UgXCJ1dXVcIjpcbiAgICAgICAgcmV0dXJuIGludFVuaXQob25lKTtcbiAgICAgIC8vIG1lcmlkaWVtXG5cbiAgICAgIGNhc2UgXCJhXCI6XG4gICAgICAgIHJldHVybiBvbmVPZihsb2MubWVyaWRpZW1zKCksIDApO1xuICAgICAgLy8gd2Vla1llYXIgKGspXG5cbiAgICAgIGNhc2UgXCJra2trXCI6XG4gICAgICAgIHJldHVybiBpbnRVbml0KGZvdXIpO1xuXG4gICAgICBjYXNlIFwia2tcIjpcbiAgICAgICAgcmV0dXJuIGludFVuaXQodHdvVG9Gb3VyLCB1bnRydW5jYXRlWWVhcik7XG4gICAgICAvLyB3ZWVrTnVtYmVyIChXKVxuXG4gICAgICBjYXNlIFwiV1wiOlxuICAgICAgICByZXR1cm4gaW50VW5pdChvbmVPclR3byk7XG5cbiAgICAgIGNhc2UgXCJXV1wiOlxuICAgICAgICByZXR1cm4gaW50VW5pdCh0d28pO1xuICAgICAgLy8gd2Vla2RheXNcblxuICAgICAgY2FzZSBcIkVcIjpcbiAgICAgIGNhc2UgXCJjXCI6XG4gICAgICAgIHJldHVybiBpbnRVbml0KG9uZSk7XG5cbiAgICAgIGNhc2UgXCJFRUVcIjpcbiAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cyhcInNob3J0XCIsIGZhbHNlLCBmYWxzZSksIDEpO1xuXG4gICAgICBjYXNlIFwiRUVFRVwiOlxuICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwibG9uZ1wiLCBmYWxzZSwgZmFsc2UpLCAxKTtcblxuICAgICAgY2FzZSBcImNjY1wiOlxuICAgICAgICByZXR1cm4gb25lT2YobG9jLndlZWtkYXlzKFwic2hvcnRcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcblxuICAgICAgY2FzZSBcImNjY2NcIjpcbiAgICAgICAgcmV0dXJuIG9uZU9mKGxvYy53ZWVrZGF5cyhcImxvbmdcIiwgdHJ1ZSwgZmFsc2UpLCAxKTtcbiAgICAgIC8vIG9mZnNldC96b25lXG5cbiAgICAgIGNhc2UgXCJaXCI6XG4gICAgICBjYXNlIFwiWlpcIjpcbiAgICAgICAgcmV0dXJuIG9mZnNldChuZXcgUmVnRXhwKGAoWystXSR7b25lT3JUd28uc291cmNlfSkoPzo6KCR7dHdvLnNvdXJjZX0pKT9gKSwgMik7XG5cbiAgICAgIGNhc2UgXCJaWlpcIjpcbiAgICAgICAgcmV0dXJuIG9mZnNldChuZXcgUmVnRXhwKGAoWystXSR7b25lT3JUd28uc291cmNlfSkoJHt0d28uc291cmNlfSk/YCksIDIpO1xuICAgICAgLy8gd2UgZG9uJ3Qgc3VwcG9ydCBaWlpaIChQU1QpIG9yIFpaWlpaIChQYWNpZmljIFN0YW5kYXJkIFRpbWUpIGluIHBhcnNpbmdcbiAgICAgIC8vIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZSBhbnkgd2F5IHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGV5IGFyZVxuXG4gICAgICBjYXNlIFwielwiOlxuICAgICAgICByZXR1cm4gc2ltcGxlKC9bYS16XystL117MSwyNTZ9Py9pKTtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGxpdGVyYWwodCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHVuaXQgPSB1bml0YXRlKHRva2VuKSB8fCB7XG4gICAgaW52YWxpZFJlYXNvbjogTUlTU0lOR19GVFBcbiAgfTtcbiAgdW5pdC50b2tlbiA9IHRva2VuO1xuICByZXR1cm4gdW5pdDtcbn1cblxuY29uc3QgcGFydFR5cGVTdHlsZVRvVG9rZW5WYWwgPSB7XG4gIHllYXI6IHtcbiAgICBcIjItZGlnaXRcIjogXCJ5eVwiLFxuICAgIG51bWVyaWM6IFwieXl5eXlcIlxuICB9LFxuICBtb250aDoge1xuICAgIG51bWVyaWM6IFwiTVwiLFxuICAgIFwiMi1kaWdpdFwiOiBcIk1NXCIsXG4gICAgc2hvcnQ6IFwiTU1NXCIsXG4gICAgbG9uZzogXCJNTU1NXCJcbiAgfSxcbiAgZGF5OiB7XG4gICAgbnVtZXJpYzogXCJkXCIsXG4gICAgXCIyLWRpZ2l0XCI6IFwiZGRcIlxuICB9LFxuICB3ZWVrZGF5OiB7XG4gICAgc2hvcnQ6IFwiRUVFXCIsXG4gICAgbG9uZzogXCJFRUVFXCJcbiAgfSxcbiAgZGF5cGVyaW9kOiBcImFcIixcbiAgZGF5UGVyaW9kOiBcImFcIixcbiAgaG91cjoge1xuICAgIG51bWVyaWM6IFwiaFwiLFxuICAgIFwiMi1kaWdpdFwiOiBcImhoXCJcbiAgfSxcbiAgbWludXRlOiB7XG4gICAgbnVtZXJpYzogXCJtXCIsXG4gICAgXCIyLWRpZ2l0XCI6IFwibW1cIlxuICB9LFxuICBzZWNvbmQ6IHtcbiAgICBudW1lcmljOiBcInNcIixcbiAgICBcIjItZGlnaXRcIjogXCJzc1wiXG4gIH1cbn07XG5cbmZ1bmN0aW9uIHRva2VuRm9yUGFydChwYXJ0LCBsb2NhbGUsIGZvcm1hdE9wdHMpIHtcbiAgY29uc3Qge1xuICAgIHR5cGUsXG4gICAgdmFsdWVcbiAgfSA9IHBhcnQ7XG5cbiAgaWYgKHR5cGUgPT09IFwibGl0ZXJhbFwiKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpdGVyYWw6IHRydWUsXG4gICAgICB2YWw6IHZhbHVlXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IHN0eWxlID0gZm9ybWF0T3B0c1t0eXBlXTtcbiAgbGV0IHZhbCA9IHBhcnRUeXBlU3R5bGVUb1Rva2VuVmFsW3R5cGVdO1xuXG4gIGlmICh0eXBlb2YgdmFsID09PSBcIm9iamVjdFwiKSB7XG4gICAgdmFsID0gdmFsW3N0eWxlXTtcbiAgfVxuXG4gIGlmICh2YWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGl0ZXJhbDogZmFsc2UsXG4gICAgICB2YWxcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gYnVpbGRSZWdleCh1bml0cykge1xuICBjb25zdCByZSA9IHVuaXRzLm1hcCh1ID0+IHUucmVnZXgpLnJlZHVjZSgoZiwgcikgPT4gYCR7Zn0oJHtyLnNvdXJjZX0pYCwgXCJcIik7XG4gIHJldHVybiBbYF4ke3JlfSRgLCB1bml0c107XG59XG5cbmZ1bmN0aW9uIG1hdGNoKGlucHV0LCByZWdleCwgaGFuZGxlcnMpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IGlucHV0Lm1hdGNoKHJlZ2V4KTtcblxuICBpZiAobWF0Y2hlcykge1xuICAgIGNvbnN0IGFsbCA9IHt9O1xuICAgIGxldCBtYXRjaEluZGV4ID0gMTtcblxuICAgIGZvciAoY29uc3QgaSBpbiBoYW5kbGVycykge1xuICAgICAgaWYgKGhhc093blByb3BlcnR5KGhhbmRsZXJzLCBpKSkge1xuICAgICAgICBjb25zdCBoID0gaGFuZGxlcnNbaV0sXG4gICAgICAgICAgICAgIGdyb3VwcyA9IGguZ3JvdXBzID8gaC5ncm91cHMgKyAxIDogMTtcblxuICAgICAgICBpZiAoIWgubGl0ZXJhbCAmJiBoLnRva2VuKSB7XG4gICAgICAgICAgYWxsW2gudG9rZW4udmFsWzBdXSA9IGguZGVzZXIobWF0Y2hlcy5zbGljZShtYXRjaEluZGV4LCBtYXRjaEluZGV4ICsgZ3JvdXBzKSk7XG4gICAgICAgIH1cblxuICAgICAgICBtYXRjaEluZGV4ICs9IGdyb3VwcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gW21hdGNoZXMsIGFsbF07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFttYXRjaGVzLCB7fV07XG4gIH1cbn1cblxuZnVuY3Rpb24gZGF0ZVRpbWVGcm9tTWF0Y2hlcyhtYXRjaGVzKSB7XG4gIGNvbnN0IHRvRmllbGQgPSB0b2tlbiA9PiB7XG4gICAgc3dpdGNoICh0b2tlbikge1xuICAgICAgY2FzZSBcIlNcIjpcbiAgICAgICAgcmV0dXJuIFwibWlsbGlzZWNvbmRcIjtcblxuICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgcmV0dXJuIFwic2Vjb25kXCI7XG5cbiAgICAgIGNhc2UgXCJtXCI6XG4gICAgICAgIHJldHVybiBcIm1pbnV0ZVwiO1xuXG4gICAgICBjYXNlIFwiaFwiOlxuICAgICAgY2FzZSBcIkhcIjpcbiAgICAgICAgcmV0dXJuIFwiaG91clwiO1xuXG4gICAgICBjYXNlIFwiZFwiOlxuICAgICAgICByZXR1cm4gXCJkYXlcIjtcblxuICAgICAgY2FzZSBcIm9cIjpcbiAgICAgICAgcmV0dXJuIFwib3JkaW5hbFwiO1xuXG4gICAgICBjYXNlIFwiTFwiOlxuICAgICAgY2FzZSBcIk1cIjpcbiAgICAgICAgcmV0dXJuIFwibW9udGhcIjtcblxuICAgICAgY2FzZSBcInlcIjpcbiAgICAgICAgcmV0dXJuIFwieWVhclwiO1xuXG4gICAgICBjYXNlIFwiRVwiOlxuICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgcmV0dXJuIFwid2Vla2RheVwiO1xuXG4gICAgICBjYXNlIFwiV1wiOlxuICAgICAgICByZXR1cm4gXCJ3ZWVrTnVtYmVyXCI7XG5cbiAgICAgIGNhc2UgXCJrXCI6XG4gICAgICAgIHJldHVybiBcIndlZWtZZWFyXCI7XG5cbiAgICAgIGNhc2UgXCJxXCI6XG4gICAgICAgIHJldHVybiBcInF1YXJ0ZXJcIjtcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9O1xuXG4gIGxldCB6b25lID0gbnVsbDtcbiAgbGV0IHNwZWNpZmljT2Zmc2V0O1xuXG4gIGlmICghaXNVbmRlZmluZWQobWF0Y2hlcy56KSkge1xuICAgIHpvbmUgPSBJQU5BWm9uZS5jcmVhdGUobWF0Y2hlcy56KTtcbiAgfVxuXG4gIGlmICghaXNVbmRlZmluZWQobWF0Y2hlcy5aKSkge1xuICAgIGlmICghem9uZSkge1xuICAgICAgem9uZSA9IG5ldyBGaXhlZE9mZnNldFpvbmUobWF0Y2hlcy5aKTtcbiAgICB9XG5cbiAgICBzcGVjaWZpY09mZnNldCA9IG1hdGNoZXMuWjtcbiAgfVxuXG4gIGlmICghaXNVbmRlZmluZWQobWF0Y2hlcy5xKSkge1xuICAgIG1hdGNoZXMuTSA9IChtYXRjaGVzLnEgLSAxKSAqIDMgKyAxO1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLmgpKSB7XG4gICAgaWYgKG1hdGNoZXMuaCA8IDEyICYmIG1hdGNoZXMuYSA9PT0gMSkge1xuICAgICAgbWF0Y2hlcy5oICs9IDEyO1xuICAgIH0gZWxzZSBpZiAobWF0Y2hlcy5oID09PSAxMiAmJiBtYXRjaGVzLmEgPT09IDApIHtcbiAgICAgIG1hdGNoZXMuaCA9IDA7XG4gICAgfVxuICB9XG5cbiAgaWYgKG1hdGNoZXMuRyA9PT0gMCAmJiBtYXRjaGVzLnkpIHtcbiAgICBtYXRjaGVzLnkgPSAtbWF0Y2hlcy55O1xuICB9XG5cbiAgaWYgKCFpc1VuZGVmaW5lZChtYXRjaGVzLnUpKSB7XG4gICAgbWF0Y2hlcy5TID0gcGFyc2VNaWxsaXMobWF0Y2hlcy51KTtcbiAgfVxuXG4gIGNvbnN0IHZhbHMgPSBPYmplY3Qua2V5cyhtYXRjaGVzKS5yZWR1Y2UoKHIsIGspID0+IHtcbiAgICBjb25zdCBmID0gdG9GaWVsZChrKTtcblxuICAgIGlmIChmKSB7XG4gICAgICByW2ZdID0gbWF0Y2hlc1trXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcjtcbiAgfSwge30pO1xuICByZXR1cm4gW3ZhbHMsIHpvbmUsIHNwZWNpZmljT2Zmc2V0XTtcbn1cblxubGV0IGR1bW15RGF0ZVRpbWVDYWNoZSA9IG51bGw7XG5cbmZ1bmN0aW9uIGdldER1bW15RGF0ZVRpbWUoKSB7XG4gIGlmICghZHVtbXlEYXRlVGltZUNhY2hlKSB7XG4gICAgZHVtbXlEYXRlVGltZUNhY2hlID0gRGF0ZVRpbWUuZnJvbU1pbGxpcygxNTU1NTU1NTU1NTU1KTtcbiAgfVxuXG4gIHJldHVybiBkdW1teURhdGVUaW1lQ2FjaGU7XG59XG5cbmZ1bmN0aW9uIG1heWJlRXhwYW5kTWFjcm9Ub2tlbih0b2tlbiwgbG9jYWxlKSB7XG4gIGlmICh0b2tlbi5saXRlcmFsKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0T3B0cyA9IEZvcm1hdHRlci5tYWNyb1Rva2VuVG9Gb3JtYXRPcHRzKHRva2VuLnZhbCk7XG5cbiAgaWYgKCFmb3JtYXRPcHRzKSB7XG4gICAgcmV0dXJuIHRva2VuO1xuICB9XG5cbiAgY29uc3QgZm9ybWF0dGVyID0gRm9ybWF0dGVyLmNyZWF0ZShsb2NhbGUsIGZvcm1hdE9wdHMpO1xuICBjb25zdCBwYXJ0cyA9IGZvcm1hdHRlci5mb3JtYXREYXRlVGltZVBhcnRzKGdldER1bW15RGF0ZVRpbWUoKSk7XG4gIGNvbnN0IHRva2VucyA9IHBhcnRzLm1hcChwID0+IHRva2VuRm9yUGFydChwLCBsb2NhbGUsIGZvcm1hdE9wdHMpKTtcblxuICBpZiAodG9rZW5zLmluY2x1ZGVzKHVuZGVmaW5lZCkpIHtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5mdW5jdGlvbiBleHBhbmRNYWNyb1Rva2Vucyh0b2tlbnMsIGxvY2FsZSkge1xuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdCguLi50b2tlbnMubWFwKHQgPT4gbWF5YmVFeHBhbmRNYWNyb1Rva2VuKHQsIGxvY2FsZSkpKTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIGV4cGxhaW5Gcm9tVG9rZW5zKGxvY2FsZSwgaW5wdXQsIGZvcm1hdCkge1xuICBjb25zdCB0b2tlbnMgPSBleHBhbmRNYWNyb1Rva2VucyhGb3JtYXR0ZXIucGFyc2VGb3JtYXQoZm9ybWF0KSwgbG9jYWxlKSxcbiAgICAgICAgdW5pdHMgPSB0b2tlbnMubWFwKHQgPT4gdW5pdEZvclRva2VuKHQsIGxvY2FsZSkpLFxuICAgICAgICBkaXNxdWFsaWZ5aW5nVW5pdCA9IHVuaXRzLmZpbmQodCA9PiB0LmludmFsaWRSZWFzb24pO1xuXG4gIGlmIChkaXNxdWFsaWZ5aW5nVW5pdCkge1xuICAgIHJldHVybiB7XG4gICAgICBpbnB1dCxcbiAgICAgIHRva2VucyxcbiAgICAgIGludmFsaWRSZWFzb246IGRpc3F1YWxpZnlpbmdVbml0LmludmFsaWRSZWFzb25cbiAgICB9O1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IFtyZWdleFN0cmluZywgaGFuZGxlcnNdID0gYnVpbGRSZWdleCh1bml0cyksXG4gICAgICAgICAgcmVnZXggPSBSZWdFeHAocmVnZXhTdHJpbmcsIFwiaVwiKSxcbiAgICAgICAgICBbcmF3TWF0Y2hlcywgbWF0Y2hlc10gPSBtYXRjaChpbnB1dCwgcmVnZXgsIGhhbmRsZXJzKSxcbiAgICAgICAgICBbcmVzdWx0LCB6b25lLCBzcGVjaWZpY09mZnNldF0gPSBtYXRjaGVzID8gZGF0ZVRpbWVGcm9tTWF0Y2hlcyhtYXRjaGVzKSA6IFtudWxsLCBudWxsLCB1bmRlZmluZWRdO1xuXG4gICAgaWYgKGhhc093blByb3BlcnR5KG1hdGNoZXMsIFwiYVwiKSAmJiBoYXNPd25Qcm9wZXJ0eShtYXRjaGVzLCBcIkhcIikpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcIkNhbid0IGluY2x1ZGUgbWVyaWRpZW0gd2hlbiBzcGVjaWZ5aW5nIDI0LWhvdXIgZm9ybWF0XCIpO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBpbnB1dCxcbiAgICAgIHRva2VucyxcbiAgICAgIHJlZ2V4LFxuICAgICAgcmF3TWF0Y2hlcyxcbiAgICAgIG1hdGNoZXMsXG4gICAgICByZXN1bHQsXG4gICAgICB6b25lLFxuICAgICAgc3BlY2lmaWNPZmZzZXRcbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBwYXJzZUZyb21Ub2tlbnMobG9jYWxlLCBpbnB1dCwgZm9ybWF0KSB7XG4gIGNvbnN0IHtcbiAgICByZXN1bHQsXG4gICAgem9uZSxcbiAgICBzcGVjaWZpY09mZnNldCxcbiAgICBpbnZhbGlkUmVhc29uXG4gIH0gPSBleHBsYWluRnJvbVRva2Vucyhsb2NhbGUsIGlucHV0LCBmb3JtYXQpO1xuICByZXR1cm4gW3Jlc3VsdCwgem9uZSwgc3BlY2lmaWNPZmZzZXQsIGludmFsaWRSZWFzb25dO1xufVxuXG5jb25zdCBub25MZWFwTGFkZGVyID0gWzAsIDMxLCA1OSwgOTAsIDEyMCwgMTUxLCAxODEsIDIxMiwgMjQzLCAyNzMsIDMwNCwgMzM0XSxcbiAgICAgIGxlYXBMYWRkZXIgPSBbMCwgMzEsIDYwLCA5MSwgMTIxLCAxNTIsIDE4MiwgMjEzLCAyNDQsIDI3NCwgMzA1LCAzMzVdO1xuXG5mdW5jdGlvbiB1bml0T3V0T2ZSYW5nZSh1bml0LCB2YWx1ZSkge1xuICByZXR1cm4gbmV3IEludmFsaWQoXCJ1bml0IG91dCBvZiByYW5nZVwiLCBgeW91IHNwZWNpZmllZCAke3ZhbHVlfSAob2YgdHlwZSAke3R5cGVvZiB2YWx1ZX0pIGFzIGEgJHt1bml0fSwgd2hpY2ggaXMgaW52YWxpZGApO1xufVxuXG5mdW5jdGlvbiBkYXlPZldlZWsoeWVhciwgbW9udGgsIGRheSkge1xuICBjb25zdCBkID0gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGggLSAxLCBkYXkpKTtcblxuICBpZiAoeWVhciA8IDEwMCAmJiB5ZWFyID49IDApIHtcbiAgICBkLnNldFVUQ0Z1bGxZZWFyKGQuZ2V0VVRDRnVsbFllYXIoKSAtIDE5MDApO1xuICB9XG5cbiAgY29uc3QganMgPSBkLmdldFVUQ0RheSgpO1xuICByZXR1cm4ganMgPT09IDAgPyA3IDoganM7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpIHtcbiAgcmV0dXJuIGRheSArIChpc0xlYXBZZWFyKHllYXIpID8gbGVhcExhZGRlciA6IG5vbkxlYXBMYWRkZXIpW21vbnRoIC0gMV07XG59XG5cbmZ1bmN0aW9uIHVuY29tcHV0ZU9yZGluYWwoeWVhciwgb3JkaW5hbCkge1xuICBjb25zdCB0YWJsZSA9IGlzTGVhcFllYXIoeWVhcikgPyBsZWFwTGFkZGVyIDogbm9uTGVhcExhZGRlcixcbiAgICAgICAgbW9udGgwID0gdGFibGUuZmluZEluZGV4KGkgPT4gaSA8IG9yZGluYWwpLFxuICAgICAgICBkYXkgPSBvcmRpbmFsIC0gdGFibGVbbW9udGgwXTtcbiAgcmV0dXJuIHtcbiAgICBtb250aDogbW9udGgwICsgMSxcbiAgICBkYXlcbiAgfTtcbn1cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuXG5cbmZ1bmN0aW9uIGdyZWdvcmlhblRvV2VlayhncmVnT2JqKSB7XG4gIGNvbnN0IHtcbiAgICB5ZWFyLFxuICAgIG1vbnRoLFxuICAgIGRheVxuICB9ID0gZ3JlZ09iaixcbiAgICAgICAgb3JkaW5hbCA9IGNvbXB1dGVPcmRpbmFsKHllYXIsIG1vbnRoLCBkYXkpLFxuICAgICAgICB3ZWVrZGF5ID0gZGF5T2ZXZWVrKHllYXIsIG1vbnRoLCBkYXkpO1xuICBsZXQgd2Vla051bWJlciA9IE1hdGguZmxvb3IoKG9yZGluYWwgLSB3ZWVrZGF5ICsgMTApIC8gNyksXG4gICAgICB3ZWVrWWVhcjtcblxuICBpZiAod2Vla051bWJlciA8IDEpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgLSAxO1xuICAgIHdlZWtOdW1iZXIgPSB3ZWVrc0luV2Vla1llYXIod2Vla1llYXIpO1xuICB9IGVsc2UgaWYgKHdlZWtOdW1iZXIgPiB3ZWVrc0luV2Vla1llYXIoeWVhcikpIHtcbiAgICB3ZWVrWWVhciA9IHllYXIgKyAxO1xuICAgIHdlZWtOdW1iZXIgPSAxO1xuICB9IGVsc2Uge1xuICAgIHdlZWtZZWFyID0geWVhcjtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2Vla1llYXIsXG4gICAgd2Vla051bWJlcixcbiAgICB3ZWVrZGF5LFxuICAgIC4uLnRpbWVPYmplY3QoZ3JlZ09iailcbiAgfTtcbn1cbmZ1bmN0aW9uIHdlZWtUb0dyZWdvcmlhbih3ZWVrRGF0YSkge1xuICBjb25zdCB7XG4gICAgd2Vla1llYXIsXG4gICAgd2Vla051bWJlcixcbiAgICB3ZWVrZGF5XG4gIH0gPSB3ZWVrRGF0YSxcbiAgICAgICAgd2Vla2RheU9mSmFuNCA9IGRheU9mV2Vlayh3ZWVrWWVhciwgMSwgNCksXG4gICAgICAgIHllYXJJbkRheXMgPSBkYXlzSW5ZZWFyKHdlZWtZZWFyKTtcbiAgbGV0IG9yZGluYWwgPSB3ZWVrTnVtYmVyICogNyArIHdlZWtkYXkgLSB3ZWVrZGF5T2ZKYW40IC0gMyxcbiAgICAgIHllYXI7XG5cbiAgaWYgKG9yZGluYWwgPCAxKSB7XG4gICAgeWVhciA9IHdlZWtZZWFyIC0gMTtcbiAgICBvcmRpbmFsICs9IGRheXNJblllYXIoeWVhcik7XG4gIH0gZWxzZSBpZiAob3JkaW5hbCA+IHllYXJJbkRheXMpIHtcbiAgICB5ZWFyID0gd2Vla1llYXIgKyAxO1xuICAgIG9yZGluYWwgLT0gZGF5c0luWWVhcih3ZWVrWWVhcik7XG4gIH0gZWxzZSB7XG4gICAgeWVhciA9IHdlZWtZZWFyO1xuICB9XG5cbiAgY29uc3Qge1xuICAgIG1vbnRoLFxuICAgIGRheVxuICB9ID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKTtcbiAgcmV0dXJuIHtcbiAgICB5ZWFyLFxuICAgIG1vbnRoLFxuICAgIGRheSxcbiAgICAuLi50aW1lT2JqZWN0KHdlZWtEYXRhKVxuICB9O1xufVxuZnVuY3Rpb24gZ3JlZ29yaWFuVG9PcmRpbmFsKGdyZWdEYXRhKSB7XG4gIGNvbnN0IHtcbiAgICB5ZWFyLFxuICAgIG1vbnRoLFxuICAgIGRheVxuICB9ID0gZ3JlZ0RhdGE7XG4gIGNvbnN0IG9yZGluYWwgPSBjb21wdXRlT3JkaW5hbCh5ZWFyLCBtb250aCwgZGF5KTtcbiAgcmV0dXJuIHtcbiAgICB5ZWFyLFxuICAgIG9yZGluYWwsXG4gICAgLi4udGltZU9iamVjdChncmVnRGF0YSlcbiAgfTtcbn1cbmZ1bmN0aW9uIG9yZGluYWxUb0dyZWdvcmlhbihvcmRpbmFsRGF0YSkge1xuICBjb25zdCB7XG4gICAgeWVhcixcbiAgICBvcmRpbmFsXG4gIH0gPSBvcmRpbmFsRGF0YTtcbiAgY29uc3Qge1xuICAgIG1vbnRoLFxuICAgIGRheVxuICB9ID0gdW5jb21wdXRlT3JkaW5hbCh5ZWFyLCBvcmRpbmFsKTtcbiAgcmV0dXJuIHtcbiAgICB5ZWFyLFxuICAgIG1vbnRoLFxuICAgIGRheSxcbiAgICAuLi50aW1lT2JqZWN0KG9yZGluYWxEYXRhKVxuICB9O1xufVxuZnVuY3Rpb24gaGFzSW52YWxpZFdlZWtEYXRhKG9iaikge1xuICBjb25zdCB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLndlZWtZZWFyKSxcbiAgICAgICAgdmFsaWRXZWVrID0gaW50ZWdlckJldHdlZW4ob2JqLndlZWtOdW1iZXIsIDEsIHdlZWtzSW5XZWVrWWVhcihvYmoud2Vla1llYXIpKSxcbiAgICAgICAgdmFsaWRXZWVrZGF5ID0gaW50ZWdlckJldHdlZW4ob2JqLndlZWtkYXksIDEsIDcpO1xuXG4gIGlmICghdmFsaWRZZWFyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwid2Vla1llYXJcIiwgb2JqLndlZWtZZWFyKTtcbiAgfSBlbHNlIGlmICghdmFsaWRXZWVrKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwid2Vla1wiLCBvYmoud2Vlayk7XG4gIH0gZWxzZSBpZiAoIXZhbGlkV2Vla2RheSkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIndlZWtkYXlcIiwgb2JqLndlZWtkYXkpO1xuICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaGFzSW52YWxpZE9yZGluYWxEYXRhKG9iaikge1xuICBjb25zdCB2YWxpZFllYXIgPSBpc0ludGVnZXIob2JqLnllYXIpLFxuICAgICAgICB2YWxpZE9yZGluYWwgPSBpbnRlZ2VyQmV0d2VlbihvYmoub3JkaW5hbCwgMSwgZGF5c0luWWVhcihvYmoueWVhcikpO1xuXG4gIGlmICghdmFsaWRZZWFyKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwieWVhclwiLCBvYmoueWVhcik7XG4gIH0gZWxzZSBpZiAoIXZhbGlkT3JkaW5hbCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm9yZGluYWxcIiwgb2JqLm9yZGluYWwpO1xuICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEob2JqKSB7XG4gIGNvbnN0IHZhbGlkWWVhciA9IGlzSW50ZWdlcihvYmoueWVhciksXG4gICAgICAgIHZhbGlkTW9udGggPSBpbnRlZ2VyQmV0d2VlbihvYmoubW9udGgsIDEsIDEyKSxcbiAgICAgICAgdmFsaWREYXkgPSBpbnRlZ2VyQmV0d2VlbihvYmouZGF5LCAxLCBkYXlzSW5Nb250aChvYmoueWVhciwgb2JqLm1vbnRoKSk7XG5cbiAgaWYgKCF2YWxpZFllYXIpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJ5ZWFyXCIsIG9iai55ZWFyKTtcbiAgfSBlbHNlIGlmICghdmFsaWRNb250aCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm1vbnRoXCIsIG9iai5tb250aCk7XG4gIH0gZWxzZSBpZiAoIXZhbGlkRGF5KSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwiZGF5XCIsIG9iai5kYXkpO1xuICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaGFzSW52YWxpZFRpbWVEYXRhKG9iaikge1xuICBjb25zdCB7XG4gICAgaG91cixcbiAgICBtaW51dGUsXG4gICAgc2Vjb25kLFxuICAgIG1pbGxpc2Vjb25kXG4gIH0gPSBvYmo7XG4gIGNvbnN0IHZhbGlkSG91ciA9IGludGVnZXJCZXR3ZWVuKGhvdXIsIDAsIDIzKSB8fCBob3VyID09PSAyNCAmJiBtaW51dGUgPT09IDAgJiYgc2Vjb25kID09PSAwICYmIG1pbGxpc2Vjb25kID09PSAwLFxuICAgICAgICB2YWxpZE1pbnV0ZSA9IGludGVnZXJCZXR3ZWVuKG1pbnV0ZSwgMCwgNTkpLFxuICAgICAgICB2YWxpZFNlY29uZCA9IGludGVnZXJCZXR3ZWVuKHNlY29uZCwgMCwgNTkpLFxuICAgICAgICB2YWxpZE1pbGxpc2Vjb25kID0gaW50ZWdlckJldHdlZW4obWlsbGlzZWNvbmQsIDAsIDk5OSk7XG5cbiAgaWYgKCF2YWxpZEhvdXIpIHtcbiAgICByZXR1cm4gdW5pdE91dE9mUmFuZ2UoXCJob3VyXCIsIGhvdXIpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1pbnV0ZSkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcIm1pbnV0ZVwiLCBtaW51dGUpO1xuICB9IGVsc2UgaWYgKCF2YWxpZFNlY29uZCkge1xuICAgIHJldHVybiB1bml0T3V0T2ZSYW5nZShcInNlY29uZFwiLCBzZWNvbmQpO1xuICB9IGVsc2UgaWYgKCF2YWxpZE1pbGxpc2Vjb25kKSB7XG4gICAgcmV0dXJuIHVuaXRPdXRPZlJhbmdlKFwibWlsbGlzZWNvbmRcIiwgbWlsbGlzZWNvbmQpO1xuICB9IGVsc2UgcmV0dXJuIGZhbHNlO1xufVxuXG5jb25zdCBJTlZBTElEID0gXCJJbnZhbGlkIERhdGVUaW1lXCI7XG5jb25zdCBNQVhfREFURSA9IDguNjRlMTU7XG5cbmZ1bmN0aW9uIHVuc3VwcG9ydGVkWm9uZSh6b25lKSB7XG4gIHJldHVybiBuZXcgSW52YWxpZChcInVuc3VwcG9ydGVkIHpvbmVcIiwgYHRoZSB6b25lIFwiJHt6b25lLm5hbWV9XCIgaXMgbm90IHN1cHBvcnRlZGApO1xufSAvLyB3ZSBjYWNoZSB3ZWVrIGRhdGEgb24gdGhlIERUIG9iamVjdCBhbmQgdGhpcyBpbnRlcm1lZGlhdGVzIHRoZSBjYWNoZVxuXG5cbmZ1bmN0aW9uIHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEoZHQpIHtcbiAgaWYgKGR0LndlZWtEYXRhID09PSBudWxsKSB7XG4gICAgZHQud2Vla0RhdGEgPSBncmVnb3JpYW5Ub1dlZWsoZHQuYyk7XG4gIH1cblxuICByZXR1cm4gZHQud2Vla0RhdGE7XG59IC8vIGNsb25lIHJlYWxseSBtZWFucywgXCJtYWtlIGEgbmV3IG9iamVjdCB3aXRoIHRoZXNlIG1vZGlmaWNhdGlvbnNcIi4gYWxsIFwic2V0dGVyc1wiIHJlYWxseSB1c2UgdGhpc1xuLy8gdG8gY3JlYXRlIGEgbmV3IG9iamVjdCB3aGlsZSBvbmx5IGNoYW5naW5nIHNvbWUgb2YgdGhlIHByb3BlcnRpZXNcblxuXG5mdW5jdGlvbiBjbG9uZShpbnN0LCBhbHRzKSB7XG4gIGNvbnN0IGN1cnJlbnQgPSB7XG4gICAgdHM6IGluc3QudHMsXG4gICAgem9uZTogaW5zdC56b25lLFxuICAgIGM6IGluc3QuYyxcbiAgICBvOiBpbnN0Lm8sXG4gICAgbG9jOiBpbnN0LmxvYyxcbiAgICBpbnZhbGlkOiBpbnN0LmludmFsaWRcbiAgfTtcbiAgcmV0dXJuIG5ldyBEYXRlVGltZSh7IC4uLmN1cnJlbnQsXG4gICAgLi4uYWx0cyxcbiAgICBvbGQ6IGN1cnJlbnRcbiAgfSk7XG59IC8vIGZpbmQgdGhlIHJpZ2h0IG9mZnNldCBhIGdpdmVuIGxvY2FsIHRpbWUuIFRoZSBvIGlucHV0IGlzIG91ciBndWVzcywgd2hpY2ggZGV0ZXJtaW5lcyB3aGljaFxuLy8gb2Zmc2V0IHdlJ2xsIHBpY2sgaW4gYW1iaWd1b3VzIGNhc2VzIChlLmcuIHRoZXJlIGFyZSB0d28gMyBBTXMgYi9jIEZhbGxiYWNrIERTVClcblxuXG5mdW5jdGlvbiBmaXhPZmZzZXQobG9jYWxUUywgbywgdHopIHtcbiAgLy8gT3VyIFVUQyB0aW1lIGlzIGp1c3QgYSBndWVzcyBiZWNhdXNlIG91ciBvZmZzZXQgaXMganVzdCBhIGd1ZXNzXG4gIGxldCB1dGNHdWVzcyA9IGxvY2FsVFMgLSBvICogNjAgKiAxMDAwOyAvLyBUZXN0IHdoZXRoZXIgdGhlIHpvbmUgbWF0Y2hlcyB0aGUgb2Zmc2V0IGZvciB0aGlzIHRzXG5cbiAgY29uc3QgbzIgPSB0ei5vZmZzZXQodXRjR3Vlc3MpOyAvLyBJZiBzbywgb2Zmc2V0IGRpZG4ndCBjaGFuZ2UgYW5kIHdlJ3JlIGRvbmVcblxuICBpZiAobyA9PT0gbzIpIHtcbiAgICByZXR1cm4gW3V0Y0d1ZXNzLCBvXTtcbiAgfSAvLyBJZiBub3QsIGNoYW5nZSB0aGUgdHMgYnkgdGhlIGRpZmZlcmVuY2UgaW4gdGhlIG9mZnNldFxuXG5cbiAgdXRjR3Vlc3MgLT0gKG8yIC0gbykgKiA2MCAqIDEwMDA7IC8vIElmIHRoYXQgZ2l2ZXMgdXMgdGhlIGxvY2FsIHRpbWUgd2Ugd2FudCwgd2UncmUgZG9uZVxuXG4gIGNvbnN0IG8zID0gdHoub2Zmc2V0KHV0Y0d1ZXNzKTtcblxuICBpZiAobzIgPT09IG8zKSB7XG4gICAgcmV0dXJuIFt1dGNHdWVzcywgbzJdO1xuICB9IC8vIElmIGl0J3MgZGlmZmVyZW50LCB3ZSdyZSBpbiBhIGhvbGUgdGltZS4gVGhlIG9mZnNldCBoYXMgY2hhbmdlZCwgYnV0IHRoZSB3ZSBkb24ndCBhZGp1c3QgdGhlIHRpbWVcblxuXG4gIHJldHVybiBbbG9jYWxUUyAtIE1hdGgubWluKG8yLCBvMykgKiA2MCAqIDEwMDAsIE1hdGgubWF4KG8yLCBvMyldO1xufSAvLyBjb252ZXJ0IGFuIGVwb2NoIHRpbWVzdGFtcCBpbnRvIGEgY2FsZW5kYXIgb2JqZWN0IHdpdGggdGhlIGdpdmVuIG9mZnNldFxuXG5cbmZ1bmN0aW9uIHRzVG9PYmoodHMsIG9mZnNldCkge1xuICB0cyArPSBvZmZzZXQgKiA2MCAqIDEwMDA7XG4gIGNvbnN0IGQgPSBuZXcgRGF0ZSh0cyk7XG4gIHJldHVybiB7XG4gICAgeWVhcjogZC5nZXRVVENGdWxsWWVhcigpLFxuICAgIG1vbnRoOiBkLmdldFVUQ01vbnRoKCkgKyAxLFxuICAgIGRheTogZC5nZXRVVENEYXRlKCksXG4gICAgaG91cjogZC5nZXRVVENIb3VycygpLFxuICAgIG1pbnV0ZTogZC5nZXRVVENNaW51dGVzKCksXG4gICAgc2Vjb25kOiBkLmdldFVUQ1NlY29uZHMoKSxcbiAgICBtaWxsaXNlY29uZDogZC5nZXRVVENNaWxsaXNlY29uZHMoKVxuICB9O1xufSAvLyBjb252ZXJ0IGEgY2FsZW5kYXIgb2JqZWN0IHRvIGEgZXBvY2ggdGltZXN0YW1wXG5cblxuZnVuY3Rpb24gb2JqVG9UUyhvYmosIG9mZnNldCwgem9uZSkge1xuICByZXR1cm4gZml4T2Zmc2V0KG9ialRvTG9jYWxUUyhvYmopLCBvZmZzZXQsIHpvbmUpO1xufSAvLyBjcmVhdGUgYSBuZXcgRFQgaW5zdGFuY2UgYnkgYWRkaW5nIGEgZHVyYXRpb24sIGFkanVzdGluZyBmb3IgRFNUc1xuXG5cbmZ1bmN0aW9uIGFkanVzdFRpbWUoaW5zdCwgZHVyKSB7XG4gIGNvbnN0IG9QcmUgPSBpbnN0Lm8sXG4gICAgICAgIHllYXIgPSBpbnN0LmMueWVhciArIE1hdGgudHJ1bmMoZHVyLnllYXJzKSxcbiAgICAgICAgbW9udGggPSBpbnN0LmMubW9udGggKyBNYXRoLnRydW5jKGR1ci5tb250aHMpICsgTWF0aC50cnVuYyhkdXIucXVhcnRlcnMpICogMyxcbiAgICAgICAgYyA9IHsgLi4uaW5zdC5jLFxuICAgIHllYXIsXG4gICAgbW9udGgsXG4gICAgZGF5OiBNYXRoLm1pbihpbnN0LmMuZGF5LCBkYXlzSW5Nb250aCh5ZWFyLCBtb250aCkpICsgTWF0aC50cnVuYyhkdXIuZGF5cykgKyBNYXRoLnRydW5jKGR1ci53ZWVrcykgKiA3XG4gIH0sXG4gICAgICAgIG1pbGxpc1RvQWRkID0gRHVyYXRpb24uZnJvbU9iamVjdCh7XG4gICAgeWVhcnM6IGR1ci55ZWFycyAtIE1hdGgudHJ1bmMoZHVyLnllYXJzKSxcbiAgICBxdWFydGVyczogZHVyLnF1YXJ0ZXJzIC0gTWF0aC50cnVuYyhkdXIucXVhcnRlcnMpLFxuICAgIG1vbnRoczogZHVyLm1vbnRocyAtIE1hdGgudHJ1bmMoZHVyLm1vbnRocyksXG4gICAgd2Vla3M6IGR1ci53ZWVrcyAtIE1hdGgudHJ1bmMoZHVyLndlZWtzKSxcbiAgICBkYXlzOiBkdXIuZGF5cyAtIE1hdGgudHJ1bmMoZHVyLmRheXMpLFxuICAgIGhvdXJzOiBkdXIuaG91cnMsXG4gICAgbWludXRlczogZHVyLm1pbnV0ZXMsXG4gICAgc2Vjb25kczogZHVyLnNlY29uZHMsXG4gICAgbWlsbGlzZWNvbmRzOiBkdXIubWlsbGlzZWNvbmRzXG4gIH0pLmFzKFwibWlsbGlzZWNvbmRzXCIpLFxuICAgICAgICBsb2NhbFRTID0gb2JqVG9Mb2NhbFRTKGMpO1xuICBsZXQgW3RzLCBvXSA9IGZpeE9mZnNldChsb2NhbFRTLCBvUHJlLCBpbnN0LnpvbmUpO1xuXG4gIGlmIChtaWxsaXNUb0FkZCAhPT0gMCkge1xuICAgIHRzICs9IG1pbGxpc1RvQWRkOyAvLyB0aGF0IGNvdWxkIGhhdmUgY2hhbmdlZCB0aGUgb2Zmc2V0IGJ5IGdvaW5nIG92ZXIgYSBEU1QsIGJ1dCB3ZSB3YW50IHRvIGtlZXAgdGhlIHRzIHRoZSBzYW1lXG5cbiAgICBvID0gaW5zdC56b25lLm9mZnNldCh0cyk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHRzLFxuICAgIG9cbiAgfTtcbn0gLy8gaGVscGVyIHVzZWZ1bCBpbiB0dXJuaW5nIHRoZSByZXN1bHRzIG9mIHBhcnNpbmcgaW50byByZWFsIGRhdGVzXG4vLyBieSBoYW5kbGluZyB0aGUgem9uZSBvcHRpb25zXG5cblxuZnVuY3Rpb24gcGFyc2VEYXRhVG9EYXRlVGltZShwYXJzZWQsIHBhcnNlZFpvbmUsIG9wdHMsIGZvcm1hdCwgdGV4dCwgc3BlY2lmaWNPZmZzZXQpIHtcbiAgY29uc3Qge1xuICAgIHNldFpvbmUsXG4gICAgem9uZVxuICB9ID0gb3B0cztcblxuICBpZiAocGFyc2VkICYmIE9iamVjdC5rZXlzKHBhcnNlZCkubGVuZ3RoICE9PSAwKSB7XG4gICAgY29uc3QgaW50ZXJwcmV0YXRpb25ab25lID0gcGFyc2VkWm9uZSB8fCB6b25lLFxuICAgICAgICAgIGluc3QgPSBEYXRlVGltZS5mcm9tT2JqZWN0KHBhcnNlZCwgeyAuLi5vcHRzLFxuICAgICAgem9uZTogaW50ZXJwcmV0YXRpb25ab25lLFxuICAgICAgc3BlY2lmaWNPZmZzZXRcbiAgICB9KTtcbiAgICByZXR1cm4gc2V0Wm9uZSA/IGluc3QgOiBpbnN0LnNldFpvbmUoem9uZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQobmV3IEludmFsaWQoXCJ1bnBhcnNhYmxlXCIsIGB0aGUgaW5wdXQgXCIke3RleHR9XCIgY2FuJ3QgYmUgcGFyc2VkIGFzICR7Zm9ybWF0fWApKTtcbiAgfVxufSAvLyBpZiB5b3Ugd2FudCB0byBvdXRwdXQgYSB0ZWNobmljYWwgZm9ybWF0IChlLmcuIFJGQyAyODIyKSwgdGhpcyBoZWxwZXJcbi8vIGhlbHBzIGhhbmRsZSB0aGUgZGV0YWlsc1xuXG5cbmZ1bmN0aW9uIHRvVGVjaEZvcm1hdChkdCwgZm9ybWF0LCBhbGxvd1ogPSB0cnVlKSB7XG4gIHJldHVybiBkdC5pc1ZhbGlkID8gRm9ybWF0dGVyLmNyZWF0ZShMb2NhbGUuY3JlYXRlKFwiZW4tVVNcIiksIHtcbiAgICBhbGxvd1osXG4gICAgZm9yY2VTaW1wbGU6IHRydWVcbiAgfSkuZm9ybWF0RGF0ZVRpbWVGcm9tU3RyaW5nKGR0LCBmb3JtYXQpIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gdG9JU09EYXRlKG8sIGV4dGVuZGVkKSB7XG4gIGNvbnN0IGxvbmdGb3JtYXQgPSBvLmMueWVhciA+IDk5OTkgfHwgby5jLnllYXIgPCAwO1xuICBsZXQgYyA9IFwiXCI7XG4gIGlmIChsb25nRm9ybWF0ICYmIG8uYy55ZWFyID49IDApIGMgKz0gXCIrXCI7XG4gIGMgKz0gcGFkU3RhcnQoby5jLnllYXIsIGxvbmdGb3JtYXQgPyA2IDogNCk7XG5cbiAgaWYgKGV4dGVuZGVkKSB7XG4gICAgYyArPSBcIi1cIjtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5tb250aCk7XG4gICAgYyArPSBcIi1cIjtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5kYXkpO1xuICB9IGVsc2Uge1xuICAgIGMgKz0gcGFkU3RhcnQoby5jLm1vbnRoKTtcbiAgICBjICs9IHBhZFN0YXJ0KG8uYy5kYXkpO1xuICB9XG5cbiAgcmV0dXJuIGM7XG59XG5cbmZ1bmN0aW9uIHRvSVNPVGltZShvLCBleHRlbmRlZCwgc3VwcHJlc3NTZWNvbmRzLCBzdXBwcmVzc01pbGxpc2Vjb25kcywgaW5jbHVkZU9mZnNldCwgZXh0ZW5kZWRab25lKSB7XG4gIGxldCBjID0gcGFkU3RhcnQoby5jLmhvdXIpO1xuXG4gIGlmIChleHRlbmRlZCkge1xuICAgIGMgKz0gXCI6XCI7XG4gICAgYyArPSBwYWRTdGFydChvLmMubWludXRlKTtcblxuICAgIGlmIChvLmMuc2Vjb25kICE9PSAwIHx8ICFzdXBwcmVzc1NlY29uZHMpIHtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGMgKz0gcGFkU3RhcnQoby5jLm1pbnV0ZSk7XG4gIH1cblxuICBpZiAoby5jLnNlY29uZCAhPT0gMCB8fCAhc3VwcHJlc3NTZWNvbmRzKSB7XG4gICAgYyArPSBwYWRTdGFydChvLmMuc2Vjb25kKTtcblxuICAgIGlmIChvLmMubWlsbGlzZWNvbmQgIT09IDAgfHwgIXN1cHByZXNzTWlsbGlzZWNvbmRzKSB7XG4gICAgICBjICs9IFwiLlwiO1xuICAgICAgYyArPSBwYWRTdGFydChvLmMubWlsbGlzZWNvbmQsIDMpO1xuICAgIH1cbiAgfVxuXG4gIGlmIChpbmNsdWRlT2Zmc2V0KSB7XG4gICAgaWYgKG8uaXNPZmZzZXRGaXhlZCAmJiBvLm9mZnNldCA9PT0gMCAmJiAhZXh0ZW5kZWRab25lKSB7XG4gICAgICBjICs9IFwiWlwiO1xuICAgIH0gZWxzZSBpZiAoby5vIDwgMCkge1xuICAgICAgYyArPSBcIi1cIjtcbiAgICAgIGMgKz0gcGFkU3RhcnQoTWF0aC50cnVuYygtby5vIC8gNjApKTtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoLW8ubyAlIDYwKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGMgKz0gXCIrXCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoby5vIC8gNjApKTtcbiAgICAgIGMgKz0gXCI6XCI7XG4gICAgICBjICs9IHBhZFN0YXJ0KE1hdGgudHJ1bmMoby5vICUgNjApKTtcbiAgICB9XG4gIH1cblxuICBpZiAoZXh0ZW5kZWRab25lKSB7XG4gICAgYyArPSBcIltcIiArIG8uem9uZS5pYW5hTmFtZSArIFwiXVwiO1xuICB9XG5cbiAgcmV0dXJuIGM7XG59IC8vIGRlZmF1bHRzIGZvciB1bnNwZWNpZmllZCB1bml0cyBpbiB0aGUgc3VwcG9ydGVkIGNhbGVuZGFyc1xuXG5cbmNvbnN0IGRlZmF1bHRVbml0VmFsdWVzID0ge1xuICBtb250aDogMSxcbiAgZGF5OiAxLFxuICBob3VyOiAwLFxuICBtaW51dGU6IDAsXG4gIHNlY29uZDogMCxcbiAgbWlsbGlzZWNvbmQ6IDBcbn0sXG4gICAgICBkZWZhdWx0V2Vla1VuaXRWYWx1ZXMgPSB7XG4gIHdlZWtOdW1iZXI6IDEsXG4gIHdlZWtkYXk6IDEsXG4gIGhvdXI6IDAsXG4gIG1pbnV0ZTogMCxcbiAgc2Vjb25kOiAwLFxuICBtaWxsaXNlY29uZDogMFxufSxcbiAgICAgIGRlZmF1bHRPcmRpbmFsVW5pdFZhbHVlcyA9IHtcbiAgb3JkaW5hbDogMSxcbiAgaG91cjogMCxcbiAgbWludXRlOiAwLFxuICBzZWNvbmQ6IDAsXG4gIG1pbGxpc2Vjb25kOiAwXG59OyAvLyBVbml0cyBpbiB0aGUgc3VwcG9ydGVkIGNhbGVuZGFycywgc29ydGVkIGJ5IGJpZ25lc3NcblxuY29uc3Qgb3JkZXJlZFVuaXRzID0gW1wieWVhclwiLCBcIm1vbnRoXCIsIFwiZGF5XCIsIFwiaG91clwiLCBcIm1pbnV0ZVwiLCBcInNlY29uZFwiLCBcIm1pbGxpc2Vjb25kXCJdLFxuICAgICAgb3JkZXJlZFdlZWtVbml0cyA9IFtcIndlZWtZZWFyXCIsIFwid2Vla051bWJlclwiLCBcIndlZWtkYXlcIiwgXCJob3VyXCIsIFwibWludXRlXCIsIFwic2Vjb25kXCIsIFwibWlsbGlzZWNvbmRcIl0sXG4gICAgICBvcmRlcmVkT3JkaW5hbFVuaXRzID0gW1wieWVhclwiLCBcIm9yZGluYWxcIiwgXCJob3VyXCIsIFwibWludXRlXCIsIFwic2Vjb25kXCIsIFwibWlsbGlzZWNvbmRcIl07IC8vIHN0YW5kYXJkaXplIGNhc2UgYW5kIHBsdXJhbGl0eSBpbiB1bml0c1xuXG5mdW5jdGlvbiBub3JtYWxpemVVbml0KHVuaXQpIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHtcbiAgICB5ZWFyOiBcInllYXJcIixcbiAgICB5ZWFyczogXCJ5ZWFyXCIsXG4gICAgbW9udGg6IFwibW9udGhcIixcbiAgICBtb250aHM6IFwibW9udGhcIixcbiAgICBkYXk6IFwiZGF5XCIsXG4gICAgZGF5czogXCJkYXlcIixcbiAgICBob3VyOiBcImhvdXJcIixcbiAgICBob3VyczogXCJob3VyXCIsXG4gICAgbWludXRlOiBcIm1pbnV0ZVwiLFxuICAgIG1pbnV0ZXM6IFwibWludXRlXCIsXG4gICAgcXVhcnRlcjogXCJxdWFydGVyXCIsXG4gICAgcXVhcnRlcnM6IFwicXVhcnRlclwiLFxuICAgIHNlY29uZDogXCJzZWNvbmRcIixcbiAgICBzZWNvbmRzOiBcInNlY29uZFwiLFxuICAgIG1pbGxpc2Vjb25kOiBcIm1pbGxpc2Vjb25kXCIsXG4gICAgbWlsbGlzZWNvbmRzOiBcIm1pbGxpc2Vjb25kXCIsXG4gICAgd2Vla2RheTogXCJ3ZWVrZGF5XCIsXG4gICAgd2Vla2RheXM6IFwid2Vla2RheVwiLFxuICAgIHdlZWtudW1iZXI6IFwid2Vla051bWJlclwiLFxuICAgIHdlZWtzbnVtYmVyOiBcIndlZWtOdW1iZXJcIixcbiAgICB3ZWVrbnVtYmVyczogXCJ3ZWVrTnVtYmVyXCIsXG4gICAgd2Vla3llYXI6IFwid2Vla1llYXJcIixcbiAgICB3ZWVreWVhcnM6IFwid2Vla1llYXJcIixcbiAgICBvcmRpbmFsOiBcIm9yZGluYWxcIlxuICB9W3VuaXQudG9Mb3dlckNhc2UoKV07XG4gIGlmICghbm9ybWFsaXplZCkgdGhyb3cgbmV3IEludmFsaWRVbml0RXJyb3IodW5pdCk7XG4gIHJldHVybiBub3JtYWxpemVkO1xufSAvLyB0aGlzIGlzIGEgZHVtYmVkIGRvd24gdmVyc2lvbiBvZiBmcm9tT2JqZWN0KCkgdGhhdCBydW5zIGFib3V0IDYwJSBmYXN0ZXJcbi8vIGJ1dCBkb2Vzbid0IGRvIGFueSB2YWxpZGF0aW9uLCBtYWtlcyBhIGJ1bmNoIG9mIGFzc3VtcHRpb25zIGFib3V0IHdoYXQgdW5pdHNcbi8vIGFyZSBwcmVzZW50LCBhbmQgc28gb24uXG5cblxuZnVuY3Rpb24gcXVpY2tEVChvYmosIG9wdHMpIHtcbiAgY29uc3Qgem9uZSA9IG5vcm1hbGl6ZVpvbmUob3B0cy56b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSksXG4gICAgICAgIGxvYyA9IExvY2FsZS5mcm9tT2JqZWN0KG9wdHMpLFxuICAgICAgICB0c05vdyA9IFNldHRpbmdzLm5vdygpO1xuICBsZXQgdHMsIG87IC8vIGFzc3VtZSB3ZSBoYXZlIHRoZSBoaWdoZXItb3JkZXIgdW5pdHNcblxuICBpZiAoIWlzVW5kZWZpbmVkKG9iai55ZWFyKSkge1xuICAgIGZvciAoY29uc3QgdSBvZiBvcmRlcmVkVW5pdHMpIHtcbiAgICAgIGlmIChpc1VuZGVmaW5lZChvYmpbdV0pKSB7XG4gICAgICAgIG9ialt1XSA9IGRlZmF1bHRVbml0VmFsdWVzW3VdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSBoYXNJbnZhbGlkR3JlZ29yaWFuRGF0YShvYmopIHx8IGhhc0ludmFsaWRUaW1lRGF0YShvYmopO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH1cblxuICAgIGNvbnN0IG9mZnNldFByb3ZpcyA9IHpvbmUub2Zmc2V0KHRzTm93KTtcbiAgICBbdHMsIG9dID0gb2JqVG9UUyhvYmosIG9mZnNldFByb3Zpcywgem9uZSk7XG4gIH0gZWxzZSB7XG4gICAgdHMgPSB0c05vdztcbiAgfVxuXG4gIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgIHRzLFxuICAgIHpvbmUsXG4gICAgbG9jLFxuICAgIG9cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGRpZmZSZWxhdGl2ZShzdGFydCwgZW5kLCBvcHRzKSB7XG4gIGNvbnN0IHJvdW5kID0gaXNVbmRlZmluZWQob3B0cy5yb3VuZCkgPyB0cnVlIDogb3B0cy5yb3VuZCxcbiAgICAgICAgZm9ybWF0ID0gKGMsIHVuaXQpID0+IHtcbiAgICBjID0gcm91bmRUbyhjLCByb3VuZCB8fCBvcHRzLmNhbGVuZGFyeSA/IDAgOiAyLCB0cnVlKTtcbiAgICBjb25zdCBmb3JtYXR0ZXIgPSBlbmQubG9jLmNsb25lKG9wdHMpLnJlbEZvcm1hdHRlcihvcHRzKTtcbiAgICByZXR1cm4gZm9ybWF0dGVyLmZvcm1hdChjLCB1bml0KTtcbiAgfSxcbiAgICAgICAgZGlmZmVyID0gdW5pdCA9PiB7XG4gICAgaWYgKG9wdHMuY2FsZW5kYXJ5KSB7XG4gICAgICBpZiAoIWVuZC5oYXNTYW1lKHN0YXJ0LCB1bml0KSkge1xuICAgICAgICByZXR1cm4gZW5kLnN0YXJ0T2YodW5pdCkuZGlmZihzdGFydC5zdGFydE9mKHVuaXQpLCB1bml0KS5nZXQodW5pdCk7XG4gICAgICB9IGVsc2UgcmV0dXJuIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBlbmQuZGlmZihzdGFydCwgdW5pdCkuZ2V0KHVuaXQpO1xuICAgIH1cbiAgfTtcblxuICBpZiAob3B0cy51bml0KSB7XG4gICAgcmV0dXJuIGZvcm1hdChkaWZmZXIob3B0cy51bml0KSwgb3B0cy51bml0KTtcbiAgfVxuXG4gIGZvciAoY29uc3QgdW5pdCBvZiBvcHRzLnVuaXRzKSB7XG4gICAgY29uc3QgY291bnQgPSBkaWZmZXIodW5pdCk7XG5cbiAgICBpZiAoTWF0aC5hYnMoY291bnQpID49IDEpIHtcbiAgICAgIHJldHVybiBmb3JtYXQoY291bnQsIHVuaXQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmb3JtYXQoc3RhcnQgPiBlbmQgPyAtMCA6IDAsIG9wdHMudW5pdHNbb3B0cy51bml0cy5sZW5ndGggLSAxXSk7XG59XG5cbmZ1bmN0aW9uIGxhc3RPcHRzKGFyZ0xpc3QpIHtcbiAgbGV0IG9wdHMgPSB7fSxcbiAgICAgIGFyZ3M7XG5cbiAgaWYgKGFyZ0xpc3QubGVuZ3RoID4gMCAmJiB0eXBlb2YgYXJnTGlzdFthcmdMaXN0Lmxlbmd0aCAtIDFdID09PSBcIm9iamVjdFwiKSB7XG4gICAgb3B0cyA9IGFyZ0xpc3RbYXJnTGlzdC5sZW5ndGggLSAxXTtcbiAgICBhcmdzID0gQXJyYXkuZnJvbShhcmdMaXN0KS5zbGljZSgwLCBhcmdMaXN0Lmxlbmd0aCAtIDEpO1xuICB9IGVsc2Uge1xuICAgIGFyZ3MgPSBBcnJheS5mcm9tKGFyZ0xpc3QpO1xuICB9XG5cbiAgcmV0dXJuIFtvcHRzLCBhcmdzXTtcbn1cbi8qKlxuICogQSBEYXRlVGltZSBpcyBhbiBpbW11dGFibGUgZGF0YSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgc3BlY2lmaWMgZGF0ZSBhbmQgdGltZSBhbmQgYWNjb21wYW55aW5nIG1ldGhvZHMuIEl0IGNvbnRhaW5zIGNsYXNzIGFuZCBpbnN0YW5jZSBtZXRob2RzIGZvciBjcmVhdGluZywgcGFyc2luZywgaW50ZXJyb2dhdGluZywgdHJhbnNmb3JtaW5nLCBhbmQgZm9ybWF0dGluZyB0aGVtLlxuICpcbiAqIEEgRGF0ZVRpbWUgY29tcHJpc2VzIG9mOlxuICogKiBBIHRpbWVzdGFtcC4gRWFjaCBEYXRlVGltZSBpbnN0YW5jZSByZWZlcnMgdG8gYSBzcGVjaWZpYyBtaWxsaXNlY29uZCBvZiB0aGUgVW5peCBlcG9jaC5cbiAqICogQSB0aW1lIHpvbmUuIEVhY2ggaW5zdGFuY2UgaXMgY29uc2lkZXJlZCBpbiB0aGUgY29udGV4dCBvZiBhIHNwZWNpZmljIHpvbmUgKGJ5IGRlZmF1bHQgdGhlIGxvY2FsIHN5c3RlbSdzIHpvbmUpLlxuICogKiBDb25maWd1cmF0aW9uIHByb3BlcnRpZXMgdGhhdCBlZmZlY3QgaG93IG91dHB1dCBzdHJpbmdzIGFyZSBmb3JtYXR0ZWQsIHN1Y2ggYXMgYGxvY2FsZWAsIGBudW1iZXJpbmdTeXN0ZW1gLCBhbmQgYG91dHB1dENhbGVuZGFyYC5cbiAqXG4gKiBIZXJlIGlzIGEgYnJpZWYgb3ZlcnZpZXcgb2YgdGhlIG1vc3QgY29tbW9ubHkgdXNlZCBmdW5jdGlvbmFsaXR5IGl0IHByb3ZpZGVzOlxuICpcbiAqICogKipDcmVhdGlvbioqOiBUbyBjcmVhdGUgYSBEYXRlVGltZSBmcm9tIGl0cyBjb21wb25lbnRzLCB1c2Ugb25lIG9mIGl0cyBmYWN0b3J5IGNsYXNzIG1ldGhvZHM6IHtAbGluayBEYXRlVGltZSNsb2NhbH0sIHtAbGluayBEYXRlVGltZSN1dGN9LCBhbmQgKG1vc3QgZmxleGlibHkpIHtAbGluayBEYXRlVGltZSNmcm9tT2JqZWN0fS4gVG8gY3JlYXRlIG9uZSBmcm9tIGEgc3RhbmRhcmQgc3RyaW5nIGZvcm1hdCwgdXNlIHtAbGluayBEYXRlVGltZSNmcm9tSVNPfSwge0BsaW5rIERhdGVUaW1lI2Zyb21IVFRQfSwgYW5kIHtAbGluayBEYXRlVGltZSNmcm9tUkZDMjgyMn0uIFRvIGNyZWF0ZSBvbmUgZnJvbSBhIGN1c3RvbSBzdHJpbmcgZm9ybWF0LCB1c2Uge0BsaW5rIERhdGVUaW1lI2Zyb21Gb3JtYXR9LiBUbyBjcmVhdGUgb25lIGZyb20gYSBuYXRpdmUgSlMgZGF0ZSwgdXNlIHtAbGluayBEYXRlVGltZSNmcm9tSlNEYXRlfS5cbiAqICogKipHcmVnb3JpYW4gY2FsZW5kYXIgYW5kIHRpbWUqKjogVG8gZXhhbWluZSB0aGUgR3JlZ29yaWFuIHByb3BlcnRpZXMgb2YgYSBEYXRlVGltZSBpbmRpdmlkdWFsbHkgKGkuZSBhcyBvcHBvc2VkIHRvIGNvbGxlY3RpdmVseSB0aHJvdWdoIHtAbGluayBEYXRlVGltZSN0b09iamVjdH0pLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN5ZWFyfSwge0BsaW5rIERhdGVUaW1lI21vbnRofSxcbiAqIHtAbGluayBEYXRlVGltZSNkYXl9LCB7QGxpbmsgRGF0ZVRpbWUjaG91cn0sIHtAbGluayBEYXRlVGltZSNtaW51dGV9LCB7QGxpbmsgRGF0ZVRpbWUjc2Vjb25kfSwge0BsaW5rIERhdGVUaW1lI21pbGxpc2Vjb25kfSBhY2Nlc3NvcnMuXG4gKiAqICoqV2VlayBjYWxlbmRhcioqOiBGb3IgSVNPIHdlZWsgY2FsZW5kYXIgYXR0cmlidXRlcywgc2VlIHRoZSB7QGxpbmsgRGF0ZVRpbWUjd2Vla1llYXJ9LCB7QGxpbmsgRGF0ZVRpbWUjd2Vla051bWJlcn0sIGFuZCB7QGxpbmsgRGF0ZVRpbWUjd2Vla2RheX0gYWNjZXNzb3JzLlxuICogKiAqKkNvbmZpZ3VyYXRpb24qKiBTZWUgdGhlIHtAbGluayBEYXRlVGltZSNsb2NhbGV9IGFuZCB7QGxpbmsgRGF0ZVRpbWUjbnVtYmVyaW5nU3lzdGVtfSBhY2Nlc3NvcnMuXG4gKiAqICoqVHJhbnNmb3JtYXRpb24qKjogVG8gdHJhbnNmb3JtIHRoZSBEYXRlVGltZSBpbnRvIG90aGVyIERhdGVUaW1lcywgdXNlIHtAbGluayBEYXRlVGltZSNzZXR9LCB7QGxpbmsgRGF0ZVRpbWUjcmVjb25maWd1cmV9LCB7QGxpbmsgRGF0ZVRpbWUjc2V0Wm9uZX0sIHtAbGluayBEYXRlVGltZSNzZXRMb2NhbGV9LCB7QGxpbmsgRGF0ZVRpbWUucGx1c30sIHtAbGluayBEYXRlVGltZSNtaW51c30sIHtAbGluayBEYXRlVGltZSNlbmRPZn0sIHtAbGluayBEYXRlVGltZSNzdGFydE9mfSwge0BsaW5rIERhdGVUaW1lI3RvVVRDfSwgYW5kIHtAbGluayBEYXRlVGltZSN0b0xvY2FsfS5cbiAqICogKipPdXRwdXQqKjogVG8gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gb3RoZXIgcmVwcmVzZW50YXRpb25zLCB1c2UgdGhlIHtAbGluayBEYXRlVGltZSN0b1JlbGF0aXZlfSwge0BsaW5rIERhdGVUaW1lI3RvUmVsYXRpdmVDYWxlbmRhcn0sIHtAbGluayBEYXRlVGltZSN0b0pTT059LCB7QGxpbmsgRGF0ZVRpbWUjdG9JU099LCB7QGxpbmsgRGF0ZVRpbWUjdG9IVFRQfSwge0BsaW5rIERhdGVUaW1lI3RvT2JqZWN0fSwge0BsaW5rIERhdGVUaW1lI3RvUkZDMjgyMn0sIHtAbGluayBEYXRlVGltZSN0b1N0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30sIHtAbGluayBEYXRlVGltZSN0b0Zvcm1hdH0sIHtAbGluayBEYXRlVGltZSN0b01pbGxpc30gYW5kIHtAbGluayBEYXRlVGltZSN0b0pTRGF0ZX0uXG4gKlxuICogVGhlcmUncyBwbGVudHkgb3RoZXJzIGRvY3VtZW50ZWQgYmVsb3cuIEluIGFkZGl0aW9uLCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBzdWJ0bGVyIHRvcGljcyBsaWtlIGludGVybmF0aW9uYWxpemF0aW9uLCB0aW1lIHpvbmVzLCBhbHRlcm5hdGl2ZSBjYWxlbmRhcnMsIHZhbGlkaXR5LCBhbmQgc28gb24sIHNlZSB0aGUgZXh0ZXJuYWwgZG9jdW1lbnRhdGlvbi5cbiAqL1xuXG5cbmNsYXNzIERhdGVUaW1lIHtcbiAgLyoqXG4gICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgKi9cbiAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgY29uc3Qgem9uZSA9IGNvbmZpZy56b25lIHx8IFNldHRpbmdzLmRlZmF1bHRab25lO1xuICAgIGxldCBpbnZhbGlkID0gY29uZmlnLmludmFsaWQgfHwgKE51bWJlci5pc05hTihjb25maWcudHMpID8gbmV3IEludmFsaWQoXCJpbnZhbGlkIGlucHV0XCIpIDogbnVsbCkgfHwgKCF6b25lLmlzVmFsaWQgPyB1bnN1cHBvcnRlZFpvbmUoem9uZSkgOiBudWxsKTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cblxuICAgIHRoaXMudHMgPSBpc1VuZGVmaW5lZChjb25maWcudHMpID8gU2V0dGluZ3Mubm93KCkgOiBjb25maWcudHM7XG4gICAgbGV0IGMgPSBudWxsLFxuICAgICAgICBvID0gbnVsbDtcblxuICAgIGlmICghaW52YWxpZCkge1xuICAgICAgY29uc3QgdW5jaGFuZ2VkID0gY29uZmlnLm9sZCAmJiBjb25maWcub2xkLnRzID09PSB0aGlzLnRzICYmIGNvbmZpZy5vbGQuem9uZS5lcXVhbHMoem9uZSk7XG5cbiAgICAgIGlmICh1bmNoYW5nZWQpIHtcbiAgICAgICAgW2MsIG9dID0gW2NvbmZpZy5vbGQuYywgY29uZmlnLm9sZC5vXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG90ID0gem9uZS5vZmZzZXQodGhpcy50cyk7XG4gICAgICAgIGMgPSB0c1RvT2JqKHRoaXMudHMsIG90KTtcbiAgICAgICAgaW52YWxpZCA9IE51bWJlci5pc05hTihjLnllYXIpID8gbmV3IEludmFsaWQoXCJpbnZhbGlkIGlucHV0XCIpIDogbnVsbDtcbiAgICAgICAgYyA9IGludmFsaWQgPyBudWxsIDogYztcbiAgICAgICAgbyA9IGludmFsaWQgPyBudWxsIDogb3Q7XG4gICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuXG5cbiAgICB0aGlzLl96b25lID0gem9uZTtcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cblxuICAgIHRoaXMubG9jID0gY29uZmlnLmxvYyB8fCBMb2NhbGUuY3JlYXRlKCk7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG5cbiAgICB0aGlzLmludmFsaWQgPSBpbnZhbGlkO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuXG4gICAgdGhpcy53ZWVrRGF0YSA9IG51bGw7XG4gICAgLyoqXG4gICAgICogQGFjY2VzcyBwcml2YXRlXG4gICAgICovXG5cbiAgICB0aGlzLmMgPSBjO1xuICAgIC8qKlxuICAgICAqIEBhY2Nlc3MgcHJpdmF0ZVxuICAgICAqL1xuXG4gICAgdGhpcy5vID0gbztcbiAgICAvKipcbiAgICAgKiBAYWNjZXNzIHByaXZhdGVcbiAgICAgKi9cblxuICAgIHRoaXMuaXNMdXhvbkRhdGVUaW1lID0gdHJ1ZTtcbiAgfSAvLyBDT05TVFJVQ1RcblxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZm9yIHRoZSBjdXJyZW50IGluc3RhbnQsIGluIHRoZSBzeXN0ZW0ncyB0aW1lIHpvbmUuXG4gICAqXG4gICAqIFVzZSBTZXR0aW5ncyB0byBvdmVycmlkZSB0aGVzZSBkZWZhdWx0IHZhbHVlcyBpZiBuZWVkZWQuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvSVNPKCkgLy9+PiBub3cgaW4gdGhlIElTTyBmb3JtYXRcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgc3RhdGljIG5vdygpIHtcbiAgICByZXR1cm4gbmV3IERhdGVUaW1lKHt9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgbG9jYWwgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt5ZWFyXSAtIFRoZSBjYWxlbmRhciB5ZWFyLiBJZiBvbWl0dGVkIChhcyBpbiwgY2FsbCBgbG9jYWwoKWAgd2l0aCBubyBhcmd1bWVudHMpLCB0aGUgY3VycmVudCB0aW1lIHdpbGwgYmUgdXNlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW21vbnRoPTFdIC0gVGhlIG1vbnRoLCAxLWluZGV4ZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtkYXk9MV0gLSBUaGUgZGF5IG9mIHRoZSBtb250aCwgMS1pbmRleGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbaG91cj0wXSAtIFRoZSBob3VyIG9mIHRoZSBkYXksIGluIDI0LWhvdXIgdGltZVxuICAgKiBAcGFyYW0ge251bWJlcn0gW21pbnV0ZT0wXSAtIFRoZSBtaW51dGUgb2YgdGhlIGhvdXIsIG1lYW5pbmcgYSBudW1iZXIgYmV0d2VlbiAwIGFuZCA1OVxuICAgKiBAcGFyYW0ge251bWJlcn0gW3NlY29uZD0wXSAtIFRoZSBzZWNvbmQgb2YgdGhlIG1pbnV0ZSwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWlsbGlzZWNvbmQ9MF0gLSBUaGUgbWlsbGlzZWNvbmQgb2YgdGhlIHNlY29uZCwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDk5OVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gbm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKHsgem9uZTogXCJBbWVyaWNhL05ld19Zb3JrXCIgfSkgICAgICAvL34+IG5vdywgaW4gVVMgZWFzdCBjb2FzdCB0aW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAxLTAxVDAwOjAwOjAwXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTAxVDAwOjAwOjAwXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCB7IGxvY2FsZTogXCJmclwiIH0pICAgICAvL34+IDIwMTctMDMtMTJUMDA6MDA6MDAsIHdpdGggYSBGcmVuY2ggbG9jYWxlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1KSAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjAwOjAwXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDMsIDEyLCA1LCB7IHpvbmU6IFwidXRjXCIgfSkgICAvL34+IDIwMTctMDMtMTJUMDU6MDA6MDAsIGluIFVUQ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUpICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUsIDEwKSAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAzLCAxMiwgNSwgNDUsIDEwLCA3NjUpICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMC43NjVcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgc3RhdGljIGxvY2FsKCkge1xuICAgIGNvbnN0IFtvcHRzLCBhcmdzXSA9IGxhc3RPcHRzKGFyZ3VtZW50cyksXG4gICAgICAgICAgW3llYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBtaWxsaXNlY29uZF0gPSBhcmdzO1xuICAgIHJldHVybiBxdWlja0RUKHtcbiAgICAgIHllYXIsXG4gICAgICBtb250aCxcbiAgICAgIGRheSxcbiAgICAgIGhvdXIsXG4gICAgICBtaW51dGUsXG4gICAgICBzZWNvbmQsXG4gICAgICBtaWxsaXNlY29uZFxuICAgIH0sIG9wdHMpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBpbiBVVENcbiAgICogQHBhcmFtIHtudW1iZXJ9IFt5ZWFyXSAtIFRoZSBjYWxlbmRhciB5ZWFyLiBJZiBvbWl0dGVkIChhcyBpbiwgY2FsbCBgdXRjKClgIHdpdGggbm8gYXJndW1lbnRzKSwgdGhlIGN1cnJlbnQgdGltZSB3aWxsIGJlIHVzZWRcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttb250aD0xXSAtIFRoZSBtb250aCwgMS1pbmRleGVkXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbZGF5PTFdIC0gVGhlIGRheSBvZiB0aGUgbW9udGhcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtob3VyPTBdIC0gVGhlIGhvdXIgb2YgdGhlIGRheSwgaW4gMjQtaG91ciB0aW1lXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbbWludXRlPTBdIC0gVGhlIG1pbnV0ZSBvZiB0aGUgaG91ciwgbWVhbmluZyBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBbc2Vjb25kPTBdIC0gVGhlIHNlY29uZCBvZiB0aGUgbWludXRlLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IFttaWxsaXNlY29uZD0wXSAtIFRoZSBtaWxsaXNlY29uZCBvZiB0aGUgc2Vjb25kLCBtZWFuaW5nIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgOTk5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMub3V0cHV0Q2FsZW5kYXJdIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubnVtYmVyaW5nU3lzdGVtXSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gbm93XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMS0wMVQwMDowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTAxVDAwOjAwOjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL34+IDIwMTctMDMtMTJUMDA6MDA6MDBaXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE3LCAzLCAxMiwgNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTowMDowMFpcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjAwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCB7IGxvY2FsZTogXCJmclwiIH0pICAgICAgICAgIC8vfj4gMjAxNy0wMy0xMlQwNTo0NTowMFogd2l0aCBhIEZyZW5jaCBsb2NhbGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTcsIDMsIDEyLCA1LCA0NSwgMTApICAgICAgICAgICAgICAgICAgICAgICAgLy9+PiAyMDE3LTAzLTEyVDA1OjQ1OjEwWlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMjAxNywgMywgMTIsIDUsIDQ1LCAxMCwgNzY1LCB7IGxvY2FsZTogXCJmclwiIH0pIC8vfj4gMjAxNy0wMy0xMlQwNTo0NToxMC43NjVaIHdpdGggYSBGcmVuY2ggbG9jYWxlXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cblxuXG4gIHN0YXRpYyB1dGMoKSB7XG4gICAgY29uc3QgW29wdHMsIGFyZ3NdID0gbGFzdE9wdHMoYXJndW1lbnRzKSxcbiAgICAgICAgICBbeWVhciwgbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmQsIG1pbGxpc2Vjb25kXSA9IGFyZ3M7XG4gICAgb3B0cy56b25lID0gRml4ZWRPZmZzZXRab25lLnV0Y0luc3RhbmNlO1xuICAgIHJldHVybiBxdWlja0RUKHtcbiAgICAgIHllYXIsXG4gICAgICBtb250aCxcbiAgICAgIGRheSxcbiAgICAgIGhvdXIsXG4gICAgICBtaW51dGUsXG4gICAgICBzZWNvbmQsXG4gICAgICBtaWxsaXNlY29uZFxuICAgIH0sIG9wdHMpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGEgSmF2YVNjcmlwdCBEYXRlIG9iamVjdC4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLlxuICAgKiBAcGFyYW0ge0RhdGV9IGRhdGUgLSBhIEphdmFTY3JpcHQgRGF0ZSBvYmplY3RcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgc3RhdGljIGZyb21KU0RhdGUoZGF0ZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgdHMgPSBpc0RhdGUoZGF0ZSkgPyBkYXRlLnZhbHVlT2YoKSA6IE5hTjtcblxuICAgIGlmIChOdW1iZXIuaXNOYU4odHMpKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcImludmFsaWQgaW5wdXRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qgem9uZVRvVXNlID0gbm9ybWFsaXplWm9uZShvcHRpb25zLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcblxuICAgIGlmICghem9uZVRvVXNlLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lVG9Vc2UpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IERhdGVUaW1lKHtcbiAgICAgIHRzOiB0cyxcbiAgICAgIHpvbmU6IHpvbmVUb1VzZSxcbiAgICAgIGxvYzogTG9jYWxlLmZyb21PYmplY3Qob3B0aW9ucylcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2UgdGhlIGVwb2NoIChtZWFuaW5nIHNpbmNlIDEgSmFudWFyeSAxOTcwIDAwOjAwOjAwIFVUQykuIFVzZXMgdGhlIGRlZmF1bHQgem9uZS5cbiAgICogQHBhcmFtIHtudW1iZXJ9IG1pbGxpc2Vjb25kcyAtIGEgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZSAxOTcwIFVUQ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgdGhlIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRpb25zLnpvbmU9J2xvY2FsJ10gLSB0aGUgem9uZSB0byBwbGFjZSB0aGUgRGF0ZVRpbWUgaW50b1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMubG9jYWxlXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG5cblxuICBzdGF0aWMgZnJvbU1pbGxpcyhtaWxsaXNlY29uZHMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghaXNOdW1iZXIobWlsbGlzZWNvbmRzKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBmcm9tTWlsbGlzIHJlcXVpcmVzIGEgbnVtZXJpY2FsIGlucHV0LCBidXQgcmVjZWl2ZWQgYSAke3R5cGVvZiBtaWxsaXNlY29uZHN9IHdpdGggdmFsdWUgJHttaWxsaXNlY29uZHN9YCk7XG4gICAgfSBlbHNlIGlmIChtaWxsaXNlY29uZHMgPCAtTUFYX0RBVEUgfHwgbWlsbGlzZWNvbmRzID4gTUFYX0RBVEUpIHtcbiAgICAgIC8vIHRoaXMgaXNuJ3QgcGVyZmVjdCBiZWNhdXNlIGJlY2F1c2Ugd2UgY2FuIHN0aWxsIGVuZCB1cCBvdXQgb2YgcmFuZ2UgYmVjYXVzZSBvZiBhZGRpdGlvbmFsIHNoaWZ0aW5nLCBidXQgaXQncyBhIHN0YXJ0XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZChcIlRpbWVzdGFtcCBvdXQgb2YgcmFuZ2VcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZVRpbWUoe1xuICAgICAgICB0czogbWlsbGlzZWNvbmRzLFxuICAgICAgICB6b25lOiBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpLFxuICAgICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBudW1iZXIgb2Ygc2Vjb25kcyBzaW5jZSB0aGUgZXBvY2ggKG1lYW5pbmcgc2luY2UgMSBKYW51YXJ5IDE5NzAgMDA6MDA6MDAgVVRDKS4gVXNlcyB0aGUgZGVmYXVsdCB6b25lLlxuICAgKiBAcGFyYW0ge251bWJlcn0gc2Vjb25kcyAtIGEgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgMTk3MCBVVENcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0aW9ucy56b25lPSdsb2NhbCddIC0gdGhlIHpvbmUgdG8gcGxhY2UgdGhlIERhdGVUaW1lIGludG9cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRpb25zLmxvY2FsZV0gLSBhIGxvY2FsZSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5vdXRwdXRDYWxlbmRhciAtIHRoZSBvdXRwdXQgY2FsZW5kYXIgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgc3RhdGljIGZyb21TZWNvbmRzKHNlY29uZHMsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICghaXNOdW1iZXIoc2Vjb25kcykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcImZyb21TZWNvbmRzIHJlcXVpcmVzIGEgbnVtZXJpY2FsIGlucHV0XCIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbmV3IERhdGVUaW1lKHtcbiAgICAgICAgdHM6IHNlY29uZHMgKiAxMDAwLFxuICAgICAgICB6b25lOiBub3JtYWxpemVab25lKG9wdGlvbnMuem9uZSwgU2V0dGluZ3MuZGVmYXVsdFpvbmUpLFxuICAgICAgICBsb2M6IExvY2FsZS5mcm9tT2JqZWN0KG9wdGlvbnMpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYSBKYXZhU2NyaXB0IG9iamVjdCB3aXRoIGtleXMgbGlrZSAneWVhcicgYW5kICdob3VyJyB3aXRoIHJlYXNvbmFibGUgZGVmYXVsdHMuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvYmogLSB0aGUgb2JqZWN0IHRvIGNyZWF0ZSB0aGUgRGF0ZVRpbWUgZnJvbVxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLnllYXIgLSBhIHllYXIsIHN1Y2ggYXMgMTk4N1xuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm1vbnRoIC0gYSBtb250aCwgMS0xMlxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLmRheSAtIGEgZGF5IG9mIHRoZSBtb250aCwgMS0zMSwgZGVwZW5kaW5nIG9uIHRoZSBtb250aFxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLm9yZGluYWwgLSBkYXkgb2YgdGhlIHllYXIsIDEtMzY1IG9yIDM2NlxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLndlZWtZZWFyIC0gYW4gSVNPIHdlZWsgeWVhclxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLndlZWtOdW1iZXIgLSBhbiBJU08gd2VlayBudW1iZXIsIGJldHdlZW4gMSBhbmQgNTIgb3IgNTMsIGRlcGVuZGluZyBvbiB0aGUgeWVhclxuICAgKiBAcGFyYW0ge251bWJlcn0gb2JqLndlZWtkYXkgLSBhbiBJU08gd2Vla2RheSwgMS03LCB3aGVyZSAxIGlzIE1vbmRheSBhbmQgNyBpcyBTdW5kYXlcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5ob3VyIC0gaG91ciBvZiB0aGUgZGF5LCAwLTIzXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmoubWludXRlIC0gbWludXRlIG9mIHRoZSBob3VyLCAwLTU5XG4gICAqIEBwYXJhbSB7bnVtYmVyfSBvYmouc2Vjb25kIC0gc2Vjb25kIG9mIHRoZSBtaW51dGUsIDAtNTlcbiAgICogQHBhcmFtIHtudW1iZXJ9IG9iai5taWxsaXNlY29uZCAtIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQsIDAtOTk5XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyBmb3IgY3JlYXRpbmcgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gaW50ZXJwcmV0IHRoZSBudW1iZXJzIGluIHRoZSBjb250ZXh0IG9mIGEgcGFydGljdWxhciB6b25lLiBDYW4gdGFrZSBhbnkgdmFsdWUgdGFrZW4gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHNldFpvbmUoKVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdzeXN0ZW0ncyBsb2NhbGUnXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgeWVhcjogMTk4MiwgbW9udGg6IDUsIGRheTogMjV9KS50b0lTT0RhdGUoKSAvLz0+ICcxOTgyLTA1LTI1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgeWVhcjogMTk4MiB9KS50b0lTT0RhdGUoKSAvLz0+ICcxOTgyLTAxLTAxJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgaG91cjogMTAsIG1pbnV0ZTogMjYsIHNlY29uZDogNiB9KSAvL34+IHRvZGF5IGF0IDEwOjI2OjA2XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ3V0YycgfSksXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21PYmplY3QoeyBob3VyOiAxMCwgbWludXRlOiAyNiwgc2Vjb25kOiA2IH0sIHsgem9uZTogJ2xvY2FsJyB9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgaG91cjogMTAsIG1pbnV0ZTogMjYsIHNlY29uZDogNiB9LCB7IHpvbmU6ICdBbWVyaWNhL05ld19Zb3JrJyB9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tT2JqZWN0KHsgd2Vla1llYXI6IDIwMTYsIHdlZWtOdW1iZXI6IDIsIHdlZWtkYXk6IDMgfSkudG9JU09EYXRlKCkgLy89PiAnMjAxNi0wMS0xMydcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgc3RhdGljIGZyb21PYmplY3Qob2JqLCBvcHRzID0ge30pIHtcbiAgICBvYmogPSBvYmogfHwge307XG4gICAgY29uc3Qgem9uZVRvVXNlID0gbm9ybWFsaXplWm9uZShvcHRzLnpvbmUsIFNldHRpbmdzLmRlZmF1bHRab25lKTtcblxuICAgIGlmICghem9uZVRvVXNlLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKHVuc3VwcG9ydGVkWm9uZSh6b25lVG9Vc2UpKTtcbiAgICB9XG5cbiAgICBjb25zdCB0c05vdyA9IFNldHRpbmdzLm5vdygpLFxuICAgICAgICAgIG9mZnNldFByb3ZpcyA9ICFpc1VuZGVmaW5lZChvcHRzLnNwZWNpZmljT2Zmc2V0KSA/IG9wdHMuc3BlY2lmaWNPZmZzZXQgOiB6b25lVG9Vc2Uub2Zmc2V0KHRzTm93KSxcbiAgICAgICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplT2JqZWN0KG9iaiwgbm9ybWFsaXplVW5pdCksXG4gICAgICAgICAgY29udGFpbnNPcmRpbmFsID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQub3JkaW5hbCksXG4gICAgICAgICAgY29udGFpbnNHcmVnb3JZZWFyID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQueWVhciksXG4gICAgICAgICAgY29udGFpbnNHcmVnb3JNRCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm1vbnRoKSB8fCAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5kYXkpLFxuICAgICAgICAgIGNvbnRhaW5zR3JlZ29yID0gY29udGFpbnNHcmVnb3JZZWFyIHx8IGNvbnRhaW5zR3JlZ29yTUQsXG4gICAgICAgICAgZGVmaW5pdGVXZWVrRGVmID0gbm9ybWFsaXplZC53ZWVrWWVhciB8fCBub3JtYWxpemVkLndlZWtOdW1iZXIsXG4gICAgICAgICAgbG9jID0gTG9jYWxlLmZyb21PYmplY3Qob3B0cyk7IC8vIGNhc2VzOlxuICAgIC8vIGp1c3QgYSB3ZWVrZGF5IC0+IHRoaXMgd2VlaydzIGluc3RhbmNlIG9mIHRoYXQgd2Vla2RheSwgbm8gd29ycmllc1xuICAgIC8vIChncmVnb3JpYW4gZGF0YSBvciBvcmRpbmFsKSArICh3ZWVrWWVhciBvciB3ZWVrTnVtYmVyKSAtPiBlcnJvclxuICAgIC8vIChncmVnb3JpYW4gbW9udGggb3IgZGF5KSArIG9yZGluYWwgLT4gZXJyb3JcbiAgICAvLyBvdGhlcndpc2UganVzdCB1c2Ugd2Vla3Mgb3Igb3JkaW5hbHMgb3IgZ3JlZ29yaWFuLCBkZXBlbmRpbmcgb24gd2hhdCdzIHNwZWNpZmllZFxuXG4gICAgaWYgKChjb250YWluc0dyZWdvciB8fCBjb250YWluc09yZGluYWwpICYmIGRlZmluaXRlV2Vla0RlZikge1xuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKFwiQ2FuJ3QgbWl4IHdlZWtZZWFyL3dlZWtOdW1iZXIgdW5pdHMgd2l0aCB5ZWFyL21vbnRoL2RheSBvciBvcmRpbmFsc1wiKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbnNHcmVnb3JNRCAmJiBjb250YWluc09yZGluYWwpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5XCIpO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZVdlZWtEYXRhID0gZGVmaW5pdGVXZWVrRGVmIHx8IG5vcm1hbGl6ZWQud2Vla2RheSAmJiAhY29udGFpbnNHcmVnb3I7IC8vIGNvbmZpZ3VyZSBvdXJzZWx2ZXMgdG8gZGVhbCB3aXRoIGdyZWdvcmlhbiBkYXRlcyBvciB3ZWVrIHN0dWZmXG5cbiAgICBsZXQgdW5pdHMsXG4gICAgICAgIGRlZmF1bHRWYWx1ZXMsXG4gICAgICAgIG9iak5vdyA9IHRzVG9PYmoodHNOb3csIG9mZnNldFByb3Zpcyk7XG5cbiAgICBpZiAodXNlV2Vla0RhdGEpIHtcbiAgICAgIHVuaXRzID0gb3JkZXJlZFdlZWtVbml0cztcbiAgICAgIGRlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0V2Vla1VuaXRWYWx1ZXM7XG4gICAgICBvYmpOb3cgPSBncmVnb3JpYW5Ub1dlZWsob2JqTm93KTtcbiAgICB9IGVsc2UgaWYgKGNvbnRhaW5zT3JkaW5hbCkge1xuICAgICAgdW5pdHMgPSBvcmRlcmVkT3JkaW5hbFVuaXRzO1xuICAgICAgZGVmYXVsdFZhbHVlcyA9IGRlZmF1bHRPcmRpbmFsVW5pdFZhbHVlcztcbiAgICAgIG9iak5vdyA9IGdyZWdvcmlhblRvT3JkaW5hbChvYmpOb3cpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bml0cyA9IG9yZGVyZWRVbml0cztcbiAgICAgIGRlZmF1bHRWYWx1ZXMgPSBkZWZhdWx0VW5pdFZhbHVlcztcbiAgICB9IC8vIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBzdHVmZlxuXG5cbiAgICBsZXQgZm91bmRGaXJzdCA9IGZhbHNlO1xuXG4gICAgZm9yIChjb25zdCB1IG9mIHVuaXRzKSB7XG4gICAgICBjb25zdCB2ID0gbm9ybWFsaXplZFt1XTtcblxuICAgICAgaWYgKCFpc1VuZGVmaW5lZCh2KSkge1xuICAgICAgICBmb3VuZEZpcnN0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSBpZiAoZm91bmRGaXJzdCkge1xuICAgICAgICBub3JtYWxpemVkW3VdID0gZGVmYXVsdFZhbHVlc1t1XTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5vcm1hbGl6ZWRbdV0gPSBvYmpOb3dbdV07XG4gICAgICB9XG4gICAgfSAvLyBtYWtlIHN1cmUgdGhlIHZhbHVlcyB3ZSBoYXZlIGFyZSBpbiByYW5nZVxuXG5cbiAgICBjb25zdCBoaWdoZXJPcmRlckludmFsaWQgPSB1c2VXZWVrRGF0YSA/IGhhc0ludmFsaWRXZWVrRGF0YShub3JtYWxpemVkKSA6IGNvbnRhaW5zT3JkaW5hbCA/IGhhc0ludmFsaWRPcmRpbmFsRGF0YShub3JtYWxpemVkKSA6IGhhc0ludmFsaWRHcmVnb3JpYW5EYXRhKG5vcm1hbGl6ZWQpLFxuICAgICAgICAgIGludmFsaWQgPSBoaWdoZXJPcmRlckludmFsaWQgfHwgaGFzSW52YWxpZFRpbWVEYXRhKG5vcm1hbGl6ZWQpO1xuXG4gICAgaWYgKGludmFsaWQpIHtcbiAgICAgIHJldHVybiBEYXRlVGltZS5pbnZhbGlkKGludmFsaWQpO1xuICAgIH0gLy8gY29tcHV0ZSB0aGUgYWN0dWFsIHRpbWVcblxuXG4gICAgY29uc3QgZ3JlZ29yaWFuID0gdXNlV2Vla0RhdGEgPyB3ZWVrVG9HcmVnb3JpYW4obm9ybWFsaXplZCkgOiBjb250YWluc09yZGluYWwgPyBvcmRpbmFsVG9HcmVnb3JpYW4obm9ybWFsaXplZCkgOiBub3JtYWxpemVkLFxuICAgICAgICAgIFt0c0ZpbmFsLCBvZmZzZXRGaW5hbF0gPSBvYmpUb1RTKGdyZWdvcmlhbiwgb2Zmc2V0UHJvdmlzLCB6b25lVG9Vc2UpLFxuICAgICAgICAgIGluc3QgPSBuZXcgRGF0ZVRpbWUoe1xuICAgICAgdHM6IHRzRmluYWwsXG4gICAgICB6b25lOiB6b25lVG9Vc2UsXG4gICAgICBvOiBvZmZzZXRGaW5hbCxcbiAgICAgIGxvY1xuICAgIH0pOyAvLyBncmVnb3JpYW4gZGF0YSArIHdlZWtkYXkgc2VydmVzIG9ubHkgdG8gdmFsaWRhdGVcblxuICAgIGlmIChub3JtYWxpemVkLndlZWtkYXkgJiYgY29udGFpbnNHcmVnb3IgJiYgb2JqLndlZWtkYXkgIT09IGluc3Qud2Vla2RheSkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoXCJtaXNtYXRjaGVkIHdlZWtkYXlcIiwgYHlvdSBjYW4ndCBzcGVjaWZ5IGJvdGggYSB3ZWVrZGF5IG9mICR7bm9ybWFsaXplZC53ZWVrZGF5fSBhbmQgYSBkYXRlIG9mICR7aW5zdC50b0lTTygpfWApO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0O1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIElTTyA4NjAxIHN0cmluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBJU08gc3RyaW5nXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSB1c2UgdGhpcyB6b25lIGlmIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQgaW4gdGhlIGlucHV0IHN0cmluZyBpdHNlbGYuIFdpbGwgYWxzbyBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoaXMgem9uZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCBhIGZpeGVkLW9mZnNldCB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgaWYgaXQgc3BlY2lmaWVzIG9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdzeXN0ZW0ncyBsb2NhbGUnXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5vdXRwdXRDYWxlbmRhcl0gLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5udW1iZXJpbmdTeXN0ZW1dIC0gdGhlIG51bWJlcmluZyBzeXN0ZW0gdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbUlTTygnMjAxNi0wNS0yNVQwOTowODozNC4xMjMnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMyswNjowMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtMDUtMjVUMDk6MDg6MzQuMTIzKzA2OjAwJywge3NldFpvbmU6IHRydWV9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSVNPKCcyMDE2LTA1LTI1VDA5OjA4OjM0LjEyMycsIHt6b25lOiAndXRjJ30pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21JU08oJzIwMTYtVzA1LTQnKVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG5cblxuICBzdGF0aWMgZnJvbUlTTyh0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZUlTT0RhdGUodGV4dCk7XG4gICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgXCJJU08gODYwMVwiLCB0ZXh0KTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhbiBSRkMgMjgyMiBzdHJpbmdcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgUkZDIDI4MjIgc3RyaW5nXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoaXMgem9uZS4gU2luY2UgdGhlIG9mZnNldCBpcyBhbHdheXMgc3BlY2lmaWVkIGluIHRoZSBzdHJpbmcgaXRzZWxmLCB0aGlzIGhhcyBubyBlZmZlY3Qgb24gdGhlIGludGVycHJldGF0aW9uIG9mIHN0cmluZywgbWVyZWx5IHRoZSB6b25lIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaXMgZXhwcmVzc2VkIGluLlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnNldFpvbmU9ZmFsc2VdIC0gb3ZlcnJpZGUgdGhlIHpvbmUgd2l0aCBhIGZpeGVkLW9mZnNldCB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgaWYgaXQgc3BlY2lmaWVzIG9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdzeXN0ZW0ncyBsb2NhbGUnXSAtIGEgbG9jYWxlIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tUkZDMjgyMignMjUgTm92IDIwMTYgMTM6MjM6MTIgR01UJylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVJGQzI4MjIoJ0ZyaSwgMjUgTm92IDIwMTYgMTM6MjM6MTIgKzA2MDAnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tUkZDMjgyMignMjUgTm92IDIwMTYgMTM6MjMgWicpXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cblxuXG4gIHN0YXRpYyBmcm9tUkZDMjgyMih0ZXh0LCBvcHRzID0ge30pIHtcbiAgICBjb25zdCBbdmFscywgcGFyc2VkWm9uZV0gPSBwYXJzZVJGQzI4MjJEYXRlKHRleHQpO1xuICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIFwiUkZDIDI4MjJcIiwgdGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhIERhdGVUaW1lIGZyb20gYW4gSFRUUCBoZWFkZXIgZGF0ZVxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9Qcm90b2NvbHMvcmZjMjYxNi9yZmMyNjE2LXNlYzMuaHRtbCNzZWMzLjMuMVxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIHRoZSBIVFRQIGhlYWRlciBkYXRlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSBjb252ZXJ0IHRoZSB0aW1lIHRvIHRoaXMgem9uZS4gU2luY2UgSFRUUCBkYXRlcyBhcmUgYWx3YXlzIGluIFVUQywgdGhpcyBoYXMgbm8gZWZmZWN0IG9uIHRoZSBpbnRlcnByZXRhdGlvbiBvZiBzdHJpbmcsIG1lcmVseSB0aGUgem9uZSB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGlzIGV4cHJlc3NlZCBpbi5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggdGhlIGZpeGVkLW9mZnNldCB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nLiBGb3IgSFRUUCBkYXRlcywgdGhpcyBpcyBhbHdheXMgVVRDLCBzbyB0aGlzIG9wdGlvbiBpcyBlcXVpdmFsZW50IHRvIHNldHRpbmcgdGhlIGB6b25lYCBvcHRpb24gdG8gJ3V0YycsIGJ1dCB0aGlzIG9wdGlvbiBpcyBpbmNsdWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCBzaW1pbGFyIG1ldGhvZHMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5sb2NhbGU9J3N5c3RlbSdzIGxvY2FsZSddIC0gYSBsb2NhbGUgdG8gc2V0IG9uIHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgaW5zdGFuY2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW4sIDA2IE5vdiAxOTk0IDA4OjQ5OjM3IEdNVCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21IVFRQKCdTdW5kYXksIDA2LU5vdi05NCAwODo0OTozNyBHTVQnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tSFRUUCgnU3VuIE5vdiAgNiAwODo0OTozNyAxOTk0JylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgc3RhdGljIGZyb21IVFRQKHRleHQsIG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IFt2YWxzLCBwYXJzZWRab25lXSA9IHBhcnNlSFRUUERhdGUodGV4dCk7XG4gICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgXCJIVFRQXCIsIG9wdHMpO1xuICB9XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBEYXRlVGltZSBmcm9tIGFuIGlucHV0IHN0cmluZyBhbmQgZm9ybWF0IHN0cmluZy5cbiAgICogRGVmYXVsdHMgdG8gZW4tVVMgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZCwgcmVnYXJkbGVzcyBvZiB0aGUgc3lzdGVtJ3MgbG9jYWxlLiBGb3IgYSB0YWJsZSBvZiB0b2tlbnMgYW5kIHRoZWlyIGludGVycHJldGF0aW9ucywgc2VlIFtoZXJlXShodHRwczovL21vbWVudC5naXRodWIuaW8vbHV4b24vIy9wYXJzaW5nP2lkPXRhYmxlLW9mLXRva2VucykuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0IC0gdGhlIHN0cmluZyB0byBwYXJzZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm10IC0gdGhlIGZvcm1hdCB0aGUgc3RyaW5nIGlzIGV4cGVjdGVkIHRvIGJlIGluIChzZWUgdGhlIGxpbmsgYmVsb3cgZm9yIHRoZSBmb3JtYXRzKVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnMgdG8gYWZmZWN0IHRoZSBjcmVhdGlvblxuICAgKiBAcGFyYW0ge3N0cmluZ3xab25lfSBbb3B0cy56b25lPSdsb2NhbCddIC0gdXNlIHRoaXMgem9uZSBpZiBubyBvZmZzZXQgaXMgc3BlY2lmaWVkIGluIHRoZSBpbnB1dCBzdHJpbmcgaXRzZWxmLiBXaWxsIGFsc28gY29udmVydCB0aGUgRGF0ZVRpbWUgdG8gdGhpcyB6b25lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc2V0Wm9uZT1mYWxzZV0gLSBvdmVycmlkZSB0aGUgem9uZSB3aXRoIGEgem9uZSBzcGVjaWZpZWQgaW4gdGhlIHN0cmluZyBpdHNlbGYsIGlmIGl0IHNwZWNpZmllcyBvbmVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmxvY2FsZT0nZW4tVVMnXSAtIGEgbG9jYWxlIHN0cmluZyB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSBEYXRlVGltZSB0byB0aGlzIGxvY2FsZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5udW1iZXJpbmdTeXN0ZW0gLSB0aGUgbnVtYmVyaW5nIHN5c3RlbSB0byB1c2Ugd2hlbiBwYXJzaW5nLiBXaWxsIGFsc28gc2V0IHRoZSByZXN1bHRpbmcgRGF0ZVRpbWUgdG8gdGhpcyBudW1iZXJpbmcgc3lzdGVtXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm91dHB1dENhbGVuZGFyIC0gdGhlIG91dHB1dCBjYWxlbmRhciB0byBzZXQgb24gdGhlIHJlc3VsdGluZyBEYXRlVGltZSBpbnN0YW5jZVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG5cblxuICBzdGF0aWMgZnJvbUZvcm1hdCh0ZXh0LCBmbXQsIG9wdHMgPSB7fSkge1xuICAgIGlmIChpc1VuZGVmaW5lZCh0ZXh0KSB8fCBpc1VuZGVmaW5lZChmbXQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJmcm9tRm9ybWF0IHJlcXVpcmVzIGFuIGlucHV0IHN0cmluZyBhbmQgYSBmb3JtYXRcIik7XG4gICAgfVxuXG4gICAgY29uc3Qge1xuICAgICAgbG9jYWxlID0gbnVsbCxcbiAgICAgIG51bWJlcmluZ1N5c3RlbSA9IG51bGxcbiAgICB9ID0gb3B0cyxcbiAgICAgICAgICBsb2NhbGVUb1VzZSA9IExvY2FsZS5mcm9tT3B0cyh7XG4gICAgICBsb2NhbGUsXG4gICAgICBudW1iZXJpbmdTeXN0ZW0sXG4gICAgICBkZWZhdWx0VG9FTjogdHJ1ZVxuICAgIH0pLFxuICAgICAgICAgIFt2YWxzLCBwYXJzZWRab25lLCBzcGVjaWZpY09mZnNldCwgaW52YWxpZF0gPSBwYXJzZUZyb21Ub2tlbnMobG9jYWxlVG9Vc2UsIHRleHQsIGZtdCk7XG5cbiAgICBpZiAoaW52YWxpZCkge1xuICAgICAgcmV0dXJuIERhdGVUaW1lLmludmFsaWQoaW52YWxpZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBwYXJzZURhdGFUb0RhdGVUaW1lKHZhbHMsIHBhcnNlZFpvbmUsIG9wdHMsIGBmb3JtYXQgJHtmbXR9YCwgdGV4dCwgc3BlY2lmaWNPZmZzZXQpO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21Gb3JtYXQgaW5zdGVhZFxuICAgKi9cblxuXG4gIHN0YXRpYyBmcm9tU3RyaW5nKHRleHQsIGZtdCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIERhdGVUaW1lLmZyb21Gb3JtYXQodGV4dCwgZm10LCBvcHRzKTtcbiAgfVxuICAvKipcbiAgICogQ3JlYXRlIGEgRGF0ZVRpbWUgZnJvbSBhIFNRTCBkYXRlLCB0aW1lLCBvciBkYXRldGltZVxuICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0byBhZmZlY3QgdGhlIGNyZWF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFtvcHRzLnpvbmU9J2xvY2FsJ10gLSB1c2UgdGhpcyB6b25lIGlmIG5vIG9mZnNldCBpcyBzcGVjaWZpZWQgaW4gdGhlIGlucHV0IHN0cmluZyBpdHNlbGYuIFdpbGwgYWxzbyBjb252ZXJ0IHRoZSBEYXRlVGltZSB0byB0aGlzIHpvbmVcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zZXRab25lPWZhbHNlXSAtIG92ZXJyaWRlIHRoZSB6b25lIHdpdGggYSB6b25lIHNwZWNpZmllZCBpbiB0aGUgc3RyaW5nIGl0c2VsZiwgaWYgaXQgc3BlY2lmaWVzIG9uZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdHMubG9jYWxlPSdlbi1VUyddIC0gYSBsb2NhbGUgc3RyaW5nIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIERhdGVUaW1lIHRvIHRoaXMgbG9jYWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLm51bWJlcmluZ1N5c3RlbSAtIHRoZSBudW1iZXJpbmcgc3lzdGVtIHRvIHVzZSB3aGVuIHBhcnNpbmcuIFdpbGwgYWxzbyBzZXQgdGhlIHJlc3VsdGluZyBEYXRlVGltZSB0byB0aGlzIG51bWJlcmluZyBzeXN0ZW1cbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMub3V0cHV0Q2FsZW5kYXIgLSB0aGUgb3V0cHV0IGNhbGVuZGFyIHRvIHNldCBvbiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lIGluc3RhbmNlXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0JylcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMjAxNy0wNS0xNSAwOToxMjozNC4zNDInKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiswNjowMCcpXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyIEFtZXJpY2EvTG9zX0FuZ2VsZXMnKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5mcm9tU1FMKCcyMDE3LTA1LTE1IDA5OjEyOjM0LjM0MiBBbWVyaWNhL0xvc19BbmdlbGVzJywgeyBzZXRab25lOiB0cnVlIH0pXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmZyb21TUUwoJzIwMTctMDUtMTUgMDk6MTI6MzQuMzQyJywgeyB6b25lOiAnQW1lcmljYS9Mb3NfQW5nZWxlcycgfSlcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUuZnJvbVNRTCgnMDk6MTI6MzQuMzQyJylcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgc3RhdGljIGZyb21TUUwodGV4dCwgb3B0cyA9IHt9KSB7XG4gICAgY29uc3QgW3ZhbHMsIHBhcnNlZFpvbmVdID0gcGFyc2VTUUwodGV4dCk7XG4gICAgcmV0dXJuIHBhcnNlRGF0YVRvRGF0ZVRpbWUodmFscywgcGFyc2VkWm9uZSwgb3B0cywgXCJTUUxcIiwgdGV4dCk7XG4gIH1cbiAgLyoqXG4gICAqIENyZWF0ZSBhbiBpbnZhbGlkIERhdGVUaW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIC0gc2ltcGxlIHN0cmluZyBvZiB3aHkgdGhpcyBEYXRlVGltZSBpcyBpbnZhbGlkLiBTaG91bGQgbm90IGNvbnRhaW4gcGFyYW1ldGVycyBvciBhbnl0aGluZyBlbHNlIGRhdGEtZGVwZW5kZW50XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXhwbGFuYXRpb249bnVsbF0gLSBsb25nZXIgZXhwbGFuYXRpb24sIG1heSBpbmNsdWRlIHBhcmFtZXRlcnMgYW5kIG90aGVyIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mb3JtYXRpb25cbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgc3RhdGljIGludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbiA9IG51bGwpIHtcbiAgICBpZiAoIXJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibmVlZCB0byBzcGVjaWZ5IGEgcmVhc29uIHRoZSBEYXRlVGltZSBpcyBpbnZhbGlkXCIpO1xuICAgIH1cblxuICAgIGNvbnN0IGludmFsaWQgPSByZWFzb24gaW5zdGFuY2VvZiBJbnZhbGlkID8gcmVhc29uIDogbmV3IEludmFsaWQocmVhc29uLCBleHBsYW5hdGlvbik7XG5cbiAgICBpZiAoU2V0dGluZ3MudGhyb3dPbkludmFsaWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkRGF0ZVRpbWVFcnJvcihpbnZhbGlkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBEYXRlVGltZSh7XG4gICAgICAgIGludmFsaWRcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogQ2hlY2sgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIERhdGVUaW1lLiBXb3JrcyBhY3Jvc3MgY29udGV4dCBib3VuZGFyaWVzXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBvXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgc3RhdGljIGlzRGF0ZVRpbWUobykge1xuICAgIHJldHVybiBvICYmIG8uaXNMdXhvbkRhdGVUaW1lIHx8IGZhbHNlO1xuICB9IC8vIElORk9cblxuICAvKipcbiAgICogR2V0IHRoZSB2YWx1ZSBvZiB1bml0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIGEgdW5pdCBzdWNoIGFzICdtaW51dGUnIG9yICdkYXknXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDcsIDQpLmdldCgnbW9udGgnKTsgLy89PiA3XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDcsIDQpLmdldCgnZGF5Jyk7IC8vPT4gNFxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuXG5cbiAgZ2V0KHVuaXQpIHtcbiAgICByZXR1cm4gdGhpc1t1bml0XTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyB2YWxpZC4gSW52YWxpZCBEYXRlVGltZXMgb2NjdXIgd2hlbjpcbiAgICogKiBUaGUgRGF0ZVRpbWUgd2FzIGNyZWF0ZWQgZnJvbSBpbnZhbGlkIGNhbGVuZGFyIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSAxM3RoIG1vbnRoIG9yIEZlYnJ1YXJ5IDMwXG4gICAqICogVGhlIERhdGVUaW1lIHdhcyBjcmVhdGVkIGJ5IGFuIG9wZXJhdGlvbiBvbiBhbm90aGVyIGludmFsaWQgZGF0ZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBnZXQgaXNWYWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnZhbGlkID09PSBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIGVycm9yIGNvZGUgaWYgdGhpcyBEYXRlVGltZSBpcyBpbnZhbGlkLCBvciBudWxsIGlmIHRoZSBEYXRlVGltZSBpcyB2YWxpZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cblxuXG4gIGdldCBpbnZhbGlkUmVhc29uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQucmVhc29uIDogbnVsbDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBleHBsYW5hdGlvbiBvZiB3aHkgdGhpcyBEYXRlVGltZSBiZWNhbWUgaW52YWxpZCwgb3IgbnVsbCBpZiB0aGUgRGF0ZVRpbWUgaXMgdmFsaWRcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG5cblxuICBnZXQgaW52YWxpZEV4cGxhbmF0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmludmFsaWQgPyB0aGlzLmludmFsaWQuZXhwbGFuYXRpb24gOiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvY2FsZSBvZiBhIERhdGVUaW1lLCBzdWNoICdlbi1HQicuIFRoZSBsb2NhbGUgaXMgdXNlZCB3aGVuIGZvcm1hdHRpbmcgdGhlIERhdGVUaW1lXG4gICAqXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgZ2V0IGxvY2FsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5sb2MubG9jYWxlIDogbnVsbDtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBudW1iZXJpbmcgc3lzdGVtIG9mIGEgRGF0ZVRpbWUsIHN1Y2ggJ2JlbmcnLiBUaGUgbnVtYmVyaW5nIHN5c3RlbSBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWVcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG5cblxuICBnZXQgbnVtYmVyaW5nU3lzdGVtKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmxvYy5udW1iZXJpbmdTeXN0ZW0gOiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIG91dHB1dCBjYWxlbmRhciBvZiBhIERhdGVUaW1lLCBzdWNoICdpc2xhbWljJy4gVGhlIG91dHB1dCBjYWxlbmRhciBpcyB1c2VkIHdoZW4gZm9ybWF0dGluZyB0aGUgRGF0ZVRpbWVcbiAgICpcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG5cblxuICBnZXQgb3V0cHV0Q2FsZW5kYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMubG9jLm91dHB1dENhbGVuZGFyIDogbnVsbDtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSB0aW1lIHpvbmUgYXNzb2NpYXRlZCB3aXRoIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEB0eXBlIHtab25lfVxuICAgKi9cblxuXG4gIGdldCB6b25lKCkge1xuICAgIHJldHVybiB0aGlzLl96b25lO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIG5hbWUgb2YgdGhlIHRpbWUgem9uZS5cbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG5cblxuICBnZXQgem9uZU5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuem9uZS5uYW1lIDogbnVsbDtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSB5ZWFyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS55ZWFyIC8vPT4gMjAxN1xuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuXG4gIGdldCB5ZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMueWVhciA6IE5hTjtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBxdWFydGVyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5xdWFydGVyIC8vPT4gMlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuXG4gIGdldCBxdWFydGVyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBNYXRoLmNlaWwodGhpcy5jLm1vbnRoIC8gMykgOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgbW9udGggKDEtMTIpLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkubW9udGggLy89PiA1XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuXG5cbiAgZ2V0IG1vbnRoKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubW9udGggOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgZGF5IG9mIHRoZSBtb250aCAoMS0zMGlzaCkuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5kYXkgLy89PiAyNVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuXG4gIGdldCBkYXkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5kYXkgOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgaG91ciBvZiB0aGUgZGF5ICgwLTIzKS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDkpLmhvdXIgLy89PiA5XG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuXG5cbiAgZ2V0IGhvdXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuYy5ob3VyIDogTmFOO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbnV0ZSBvZiB0aGUgaG91ciAoMC01OSkuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1LCA5LCAzMCkubWludXRlIC8vPT4gMzBcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG5cblxuICBnZXQgbWludXRlKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMubWludXRlIDogTmFOO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHNlY29uZCBvZiB0aGUgbWludXRlICgwLTU5KS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwLCA1Mikuc2Vjb25kIC8vPT4gNTJcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG5cblxuICBnZXQgc2Vjb25kKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLmMuc2Vjb25kIDogTmFOO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIG1pbGxpc2Vjb25kIG9mIHRoZSBzZWNvbmQgKDAtOTk5KS5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgNSwgMjUsIDksIDMwLCA1MiwgNjU0KS5taWxsaXNlY29uZCAvLz0+IDY1NFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuXG4gIGdldCBtaWxsaXNlY29uZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy5jLm1pbGxpc2Vjb25kIDogTmFOO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIHdlZWsgeWVhclxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTIsIDMxKS53ZWVrWWVhciAvLz0+IDIwMTVcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG5cblxuICBnZXQgd2Vla1llYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla1llYXIgOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgd2VlayBudW1iZXIgb2YgdGhlIHdlZWsgeWVhciAoMS01MmlzaCkuXG4gICAqIEBzZWUgaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvSVNPX3dlZWtfZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkud2Vla051bWJlciAvLz0+IDIxXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuXG5cbiAgZ2V0IHdlZWtOdW1iZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEodGhpcykud2Vla051bWJlciA6IE5hTjtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBkYXkgb2YgdGhlIHdlZWsuXG4gICAqIDEgaXMgTW9uZGF5IGFuZCA3IGlzIFN1bmRheVxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMTEsIDMxKS53ZWVrZGF5IC8vPT4gNFxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuXG4gIGdldCB3ZWVrZGF5KCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBwb3NzaWJseUNhY2hlZFdlZWtEYXRhKHRoaXMpLndlZWtkYXkgOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgb3JkaW5hbCAobWVhbmluZyB0aGUgZGF5IG9mIHRoZSB5ZWFyKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkub3JkaW5hbCAvLz0+IDE0NVxuICAgKiBAdHlwZSB7bnVtYmVyfERhdGVUaW1lfVxuICAgKi9cblxuXG4gIGdldCBvcmRpbmFsKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBncmVnb3JpYW5Ub09yZGluYWwodGhpcy5jKS5vcmRpbmFsIDogTmFOO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIHNob3J0IG1vbnRoIG5hbWUsIHN1Y2ggYXMgJ09jdCcuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLm1vbnRoU2hvcnQgLy89PiBPY3RcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG5cblxuICBnZXQgbW9udGhTaG9ydCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby5tb250aHMoXCJzaG9ydFwiLCB7XG4gICAgICBsb2NPYmo6IHRoaXMubG9jXG4gICAgfSlbdGhpcy5tb250aCAtIDFdIDogbnVsbDtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBodW1hbiByZWFkYWJsZSBsb25nIG1vbnRoIG5hbWUsIHN1Y2ggYXMgJ09jdG9iZXInLlxuICAgKiBEZWZhdWx0cyB0byB0aGUgc3lzdGVtJ3MgbG9jYWxlIGlmIG5vIGxvY2FsZSBoYXMgYmVlbiBzcGVjaWZpZWRcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNywgMTAsIDMwKS5tb250aExvbmcgLy89PiBPY3RvYmVyXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgZ2V0IG1vbnRoTG9uZygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gSW5mby5tb250aHMoXCJsb25nXCIsIHtcbiAgICAgIGxvY09iajogdGhpcy5sb2NcbiAgICB9KVt0aGlzLm1vbnRoIC0gMV0gOiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIHNob3J0IHdlZWtkYXksIHN1Y2ggYXMgJ01vbicuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCAxMCwgMzApLndlZWtkYXlTaG9ydCAvLz0+IE1vblxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cblxuXG4gIGdldCB3ZWVrZGF5U2hvcnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ud2Vla2RheXMoXCJzaG9ydFwiLCB7XG4gICAgICBsb2NPYmo6IHRoaXMubG9jXG4gICAgfSlbdGhpcy53ZWVrZGF5IC0gMV0gOiBudWxsO1xuICB9XG4gIC8qKlxuICAgKiBHZXQgdGhlIGh1bWFuIHJlYWRhYmxlIGxvbmcgd2Vla2RheSwgc3VjaCBhcyAnTW9uZGF5Jy5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDEwLCAzMCkud2Vla2RheUxvbmcgLy89PiBNb25kYXlcbiAgICogQHR5cGUge3N0cmluZ31cbiAgICovXG5cblxuICBnZXQgd2Vla2RheUxvbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEluZm8ud2Vla2RheXMoXCJsb25nXCIsIHtcbiAgICAgIGxvY09iajogdGhpcy5sb2NcbiAgICB9KVt0aGlzLndlZWtkYXkgLSAxXSA6IG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgVVRDIG9mZnNldCBvZiB0aGlzIERhdGVUaW1lIGluIG1pbnV0ZXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkub2Zmc2V0IC8vPT4gLTI0MFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5vZmZzZXQgLy89PiAwXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuXG5cbiAgZ2V0IG9mZnNldCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gK3RoaXMubyA6IE5hTjtcbiAgfVxuICAvKipcbiAgICogR2V0IHRoZSBzaG9ydCBodW1hbiBuYW1lIGZvciB0aGUgem9uZSdzIGN1cnJlbnQgb2Zmc2V0LCBmb3IgZXhhbXBsZSBcIkVTVFwiIG9yIFwiRURUXCIuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cblxuXG4gIGdldCBvZmZzZXROYW1lU2hvcnQoKSB7XG4gICAgaWYgKHRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIHRoaXMuem9uZS5vZmZzZXROYW1lKHRoaXMudHMsIHtcbiAgICAgICAgZm9ybWF0OiBcInNob3J0XCIsXG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGVcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZyBodW1hbiBuYW1lIGZvciB0aGUgem9uZSdzIGN1cnJlbnQgb2Zmc2V0LCBmb3IgZXhhbXBsZSBcIkVhc3Rlcm4gU3RhbmRhcmQgVGltZVwiIG9yIFwiRWFzdGVybiBEYXlsaWdodCBUaW1lXCIuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cblxuXG4gIGdldCBvZmZzZXROYW1lTG9uZygpIHtcbiAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gdGhpcy56b25lLm9mZnNldE5hbWUodGhpcy50cywge1xuICAgICAgICBmb3JtYXQ6IFwibG9uZ1wiLFxuICAgICAgICBsb2NhbGU6IHRoaXMubG9jYWxlXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBHZXQgd2hldGhlciB0aGlzIHpvbmUncyBvZmZzZXQgZXZlciBjaGFuZ2VzLCBhcyBpbiBhIERTVC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgZ2V0IGlzT2Zmc2V0Rml4ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMuem9uZS5pc1VuaXZlcnNhbCA6IG51bGw7XG4gIH1cbiAgLyoqXG4gICAqIEdldCB3aGV0aGVyIHRoZSBEYXRlVGltZSBpcyBpbiBhIERTVC5cbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuXG5cbiAgZ2V0IGlzSW5EU1QoKSB7XG4gICAgaWYgKHRoaXMuaXNPZmZzZXRGaXhlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5vZmZzZXQgPiB0aGlzLnNldCh7XG4gICAgICAgIG1vbnRoOiAxLFxuICAgICAgICBkYXk6IDFcbiAgICAgIH0pLm9mZnNldCB8fCB0aGlzLm9mZnNldCA+IHRoaXMuc2V0KHtcbiAgICAgICAgbW9udGg6IDVcbiAgICAgIH0pLm9mZnNldDtcbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdHJ1ZSBpZiB0aGlzIERhdGVUaW1lIGlzIGluIGEgbGVhcCB5ZWFyLCBmYWxzZSBvdGhlcndpc2VcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNikuaXNJbkxlYXBZZWFyIC8vPT4gdHJ1ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDEzKS5pc0luTGVhcFllYXIgLy89PiBmYWxzZVxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG5cblxuICBnZXQgaXNJbkxlYXBZZWFyKCkge1xuICAgIHJldHVybiBpc0xlYXBZZWFyKHRoaXMueWVhcik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgRGF0ZVRpbWUncyBtb250aFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE2LCAyKS5kYXlzSW5Nb250aCAvLz0+IDI5XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYsIDMpLmRheXNJbk1vbnRoIC8vPT4gMzFcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG5cblxuICBnZXQgZGF5c0luTW9udGgoKSB7XG4gICAgcmV0dXJuIGRheXNJbk1vbnRoKHRoaXMueWVhciwgdGhpcy5tb250aCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiBkYXlzIGluIHRoaXMgRGF0ZVRpbWUncyB5ZWFyXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTYpLmRheXNJblllYXIgLy89PiAzNjZcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykuZGF5c0luWWVhciAvLz0+IDM2NVxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cblxuXG4gIGdldCBkYXlzSW5ZZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBkYXlzSW5ZZWFyKHRoaXMueWVhcikgOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG51bWJlciBvZiB3ZWVrcyBpbiB0aGlzIERhdGVUaW1lJ3MgeWVhclxuICAgKiBAc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0lTT193ZWVrX2RhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAwNCkud2Vla3NJbldlZWtZZWFyIC8vPT4gNTNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxMykud2Vla3NJbldlZWtZZWFyIC8vPT4gNTJcbiAgICogQHR5cGUge251bWJlcn1cbiAgICovXG5cblxuICBnZXQgd2Vla3NJbldlZWtZZWFyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB3ZWVrc0luV2Vla1llYXIodGhpcy53ZWVrWWVhcikgOiBOYU47XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHJlc29sdmVkIEludGwgb3B0aW9ucyBmb3IgdGhpcyBEYXRlVGltZS5cbiAgICogVGhpcyBpcyB1c2VmdWwgaW4gdW5kZXJzdGFuZGluZyB0aGUgYmVoYXZpb3Igb2YgZm9ybWF0dGluZyBtZXRob2RzXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gdGhlIHNhbWUgb3B0aW9ucyBhcyB0b0xvY2FsZVN0cmluZ1xuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgcmVzb2x2ZWRMb2NhbGVPcHRpb25zKG9wdHMgPSB7fSkge1xuICAgIGNvbnN0IHtcbiAgICAgIGxvY2FsZSxcbiAgICAgIG51bWJlcmluZ1N5c3RlbSxcbiAgICAgIGNhbGVuZGFyXG4gICAgfSA9IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MuY2xvbmUob3B0cyksIG9wdHMpLnJlc29sdmVkT3B0aW9ucyh0aGlzKTtcbiAgICByZXR1cm4ge1xuICAgICAgbG9jYWxlLFxuICAgICAgbnVtYmVyaW5nU3lzdGVtLFxuICAgICAgb3V0cHV0Q2FsZW5kYXI6IGNhbGVuZGFyXG4gICAgfTtcbiAgfSAvLyBUUkFOU0ZPUk1cblxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgRGF0ZVRpbWUncyB6b25lIHRvIFVUQy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKlxuICAgKiBFcXVpdmFsZW50IHRvIHtAbGluayBEYXRlVGltZSNzZXRab25lfSgndXRjJylcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtvZmZzZXQ9MF0gLSBvcHRpb25hbGx5LCBhbiBvZmZzZXQgZnJvbSBVVEMgaW4gbWludXRlc1xuICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHM9e31dIC0gb3B0aW9ucyB0byBwYXNzIHRvIGBzZXRab25lKClgXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cblxuXG4gIHRvVVRDKG9mZnNldCA9IDAsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLnNldFpvbmUoRml4ZWRPZmZzZXRab25lLmluc3RhbmNlKG9mZnNldCksIG9wdHMpO1xuICB9XG4gIC8qKlxuICAgKiBcIlNldFwiIHRoZSBEYXRlVGltZSdzIHpvbmUgdG8gdGhlIGhvc3QncyBsb2NhbCB6b25lLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqXG4gICAqIEVxdWl2YWxlbnQgdG8gYHNldFpvbmUoJ2xvY2FsJylgXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cblxuXG4gIHRvTG9jYWwoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0Wm9uZShTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7XG4gIH1cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhlIERhdGVUaW1lJ3Mgem9uZSB0byBzcGVjaWZpZWQgem9uZS4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgc2V0dGVyIGtlZXBzIHRoZSB1bmRlcmx5aW5nIHRpbWUgdGhlIHNhbWUgKGFzIGluLCB0aGUgc2FtZSB0aW1lc3RhbXApLCBidXQgdGhlIG5ldyBpbnN0YW5jZSB3aWxsIHJlcG9ydCBkaWZmZXJlbnQgbG9jYWwgdGltZXMgYW5kIGNvbnNpZGVyIERTVHMgd2hlbiBtYWtpbmcgY29tcHV0YXRpb25zLCBhcyB3aXRoIHtAbGluayBEYXRlVGltZSNwbHVzfS4gWW91IG1heSB3aXNoIHRvIHVzZSB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbH0gYW5kIHtAbGluayBEYXRlVGltZSN0b1VUQ30gd2hpY2ggcHJvdmlkZSBzaW1wbGUgY29udmVuaWVuY2Ugd3JhcHBlcnMgZm9yIGNvbW1vbmx5IHVzZWQgem9uZXMuXG4gICAqIEBwYXJhbSB7c3RyaW5nfFpvbmV9IFt6b25lPSdsb2NhbCddIC0gYSB6b25lIGlkZW50aWZpZXIuIEFzIGEgc3RyaW5nLCB0aGF0IGNhbiBiZSBhbnkgSUFOQSB6b25lIHN1cHBvcnRlZCBieSB0aGUgaG9zdCBlbnZpcm9ubWVudCwgb3IgYSBmaXhlZC1vZmZzZXQgbmFtZSBvZiB0aGUgZm9ybSAnVVRDKzMnLCBvciB0aGUgc3RyaW5ncyAnbG9jYWwnIG9yICd1dGMnLiBZb3UgbWF5IGFsc28gc3VwcGx5IGFuIGluc3RhbmNlIG9mIGEge0BsaW5rIERhdGVUaW1lI1pvbmV9IGNsYXNzLlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5rZWVwTG9jYWxUaW1lPWZhbHNlXSAtIElmIHRydWUsIGFkanVzdCB0aGUgdW5kZXJseWluZyB0aW1lIHNvIHRoYXQgdGhlIGxvY2FsIHRpbWUgc3RheXMgdGhlIHNhbWUsIGJ1dCBpbiB0aGUgdGFyZ2V0IHpvbmUuIFlvdSBzaG91bGQgcmFyZWx5IG5lZWQgdGhpcy5cbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgc2V0Wm9uZSh6b25lLCB7XG4gICAga2VlcExvY2FsVGltZSA9IGZhbHNlLFxuICAgIGtlZXBDYWxlbmRhclRpbWUgPSBmYWxzZVxuICB9ID0ge30pIHtcbiAgICB6b25lID0gbm9ybWFsaXplWm9uZSh6b25lLCBTZXR0aW5ncy5kZWZhdWx0Wm9uZSk7XG5cbiAgICBpZiAoem9uZS5lcXVhbHModGhpcy56b25lKSkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSBlbHNlIGlmICghem9uZS5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gRGF0ZVRpbWUuaW52YWxpZCh1bnN1cHBvcnRlZFpvbmUoem9uZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsZXQgbmV3VFMgPSB0aGlzLnRzO1xuXG4gICAgICBpZiAoa2VlcExvY2FsVGltZSB8fCBrZWVwQ2FsZW5kYXJUaW1lKSB7XG4gICAgICAgIGNvbnN0IG9mZnNldEd1ZXNzID0gem9uZS5vZmZzZXQodGhpcy50cyk7XG4gICAgICAgIGNvbnN0IGFzT2JqID0gdGhpcy50b09iamVjdCgpO1xuICAgICAgICBbbmV3VFNdID0gb2JqVG9UUyhhc09iaiwgb2Zmc2V0R3Vlc3MsIHpvbmUpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY2xvbmUodGhpcywge1xuICAgICAgICB0czogbmV3VFMsXG4gICAgICAgIHpvbmVcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgbG9jYWxlLCBudW1iZXJpbmdTeXN0ZW0sIG9yIG91dHB1dENhbGVuZGFyLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBwcm9wZXJ0aWVzIC0gdGhlIHByb3BlcnRpZXMgdG8gc2V0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTcsIDUsIDI1KS5yZWNvbmZpZ3VyZSh7IGxvY2FsZTogJ2VuLUdCJyB9KVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG5cblxuICByZWNvbmZpZ3VyZSh7XG4gICAgbG9jYWxlLFxuICAgIG51bWJlcmluZ1N5c3RlbSxcbiAgICBvdXRwdXRDYWxlbmRhclxuICB9ID0ge30pIHtcbiAgICBjb25zdCBsb2MgPSB0aGlzLmxvYy5jbG9uZSh7XG4gICAgICBsb2NhbGUsXG4gICAgICBudW1iZXJpbmdTeXN0ZW0sXG4gICAgICBvdXRwdXRDYWxlbmRhclxuICAgIH0pO1xuICAgIHJldHVybiBjbG9uZSh0aGlzLCB7XG4gICAgICBsb2NcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgbG9jYWxlLiBSZXR1cm5zIGEgbmV3bHktY29uc3RydWN0ZWQgRGF0ZVRpbWUuXG4gICAqIEp1c3QgYSBjb252ZW5pZW50IGFsaWFzIGZvciByZWNvbmZpZ3VyZSh7IGxvY2FsZSB9KVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE3LCA1LCAyNSkuc2V0TG9jYWxlKCdlbi1HQicpXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfVxuICAgKi9cblxuXG4gIHNldExvY2FsZShsb2NhbGUpIHtcbiAgICByZXR1cm4gdGhpcy5yZWNvbmZpZ3VyZSh7XG4gICAgICBsb2NhbGVcbiAgICB9KTtcbiAgfVxuICAvKipcbiAgICogXCJTZXRcIiB0aGUgdmFsdWVzIG9mIHNwZWNpZmllZCB1bml0cy4gUmV0dXJucyBhIG5ld2x5LWNvbnN0cnVjdGVkIERhdGVUaW1lLlxuICAgKiBZb3UgY2FuIG9ubHkgc2V0IHVuaXRzIHdpdGggdGhpcyBtZXRob2Q7IGZvciBcInNldHRpbmdcIiBtZXRhZGF0YSwgc2VlIHtAbGluayBEYXRlVGltZSNyZWNvbmZpZ3VyZX0gYW5kIHtAbGluayBEYXRlVGltZSNzZXRab25lfS5cbiAgICogQHBhcmFtIHtPYmplY3R9IHZhbHVlcyAtIGEgbWFwcGluZyBvZiB1bml0cyB0byBudW1iZXJzXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHllYXI6IDIwMTcgfSlcbiAgICogQGV4YW1wbGUgZHQuc2V0KHsgaG91cjogOCwgbWludXRlOiAzMCB9KVxuICAgKiBAZXhhbXBsZSBkdC5zZXQoeyB3ZWVrZGF5OiA1IH0pXG4gICAqIEBleGFtcGxlIGR0LnNldCh7IHllYXI6IDIwMDUsIG9yZGluYWw6IDIzNCB9KVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG5cblxuICBzZXQodmFsdWVzKSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVPYmplY3QodmFsdWVzLCBub3JtYWxpemVVbml0KSxcbiAgICAgICAgICBzZXR0aW5nV2Vla1N0dWZmID0gIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQud2Vla1llYXIpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtOdW1iZXIpIHx8ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLndlZWtkYXkpLFxuICAgICAgICAgIGNvbnRhaW5zT3JkaW5hbCA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpLFxuICAgICAgICAgIGNvbnRhaW5zR3JlZ29yWWVhciA9ICFpc1VuZGVmaW5lZChub3JtYWxpemVkLnllYXIpLFxuICAgICAgICAgIGNvbnRhaW5zR3JlZ29yTUQgPSAhaXNVbmRlZmluZWQobm9ybWFsaXplZC5tb250aCkgfHwgIWlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSxcbiAgICAgICAgICBjb250YWluc0dyZWdvciA9IGNvbnRhaW5zR3JlZ29yWWVhciB8fCBjb250YWluc0dyZWdvck1ELFxuICAgICAgICAgIGRlZmluaXRlV2Vla0RlZiA9IG5vcm1hbGl6ZWQud2Vla1llYXIgfHwgbm9ybWFsaXplZC53ZWVrTnVtYmVyO1xuXG4gICAgaWYgKChjb250YWluc0dyZWdvciB8fCBjb250YWluc09yZGluYWwpICYmIGRlZmluaXRlV2Vla0RlZikge1xuICAgICAgdGhyb3cgbmV3IENvbmZsaWN0aW5nU3BlY2lmaWNhdGlvbkVycm9yKFwiQ2FuJ3QgbWl4IHdlZWtZZWFyL3dlZWtOdW1iZXIgdW5pdHMgd2l0aCB5ZWFyL21vbnRoL2RheSBvciBvcmRpbmFsc1wiKTtcbiAgICB9XG5cbiAgICBpZiAoY29udGFpbnNHcmVnb3JNRCAmJiBjb250YWluc09yZGluYWwpIHtcbiAgICAgIHRocm93IG5ldyBDb25mbGljdGluZ1NwZWNpZmljYXRpb25FcnJvcihcIkNhbid0IG1peCBvcmRpbmFsIGRhdGVzIHdpdGggbW9udGgvZGF5XCIpO1xuICAgIH1cblxuICAgIGxldCBtaXhlZDtcblxuICAgIGlmIChzZXR0aW5nV2Vla1N0dWZmKSB7XG4gICAgICBtaXhlZCA9IHdlZWtUb0dyZWdvcmlhbih7IC4uLmdyZWdvcmlhblRvV2Vlayh0aGlzLmMpLFxuICAgICAgICAuLi5ub3JtYWxpemVkXG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKCFpc1VuZGVmaW5lZChub3JtYWxpemVkLm9yZGluYWwpKSB7XG4gICAgICBtaXhlZCA9IG9yZGluYWxUb0dyZWdvcmlhbih7IC4uLmdyZWdvcmlhblRvT3JkaW5hbCh0aGlzLmMpLFxuICAgICAgICAuLi5ub3JtYWxpemVkXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWl4ZWQgPSB7IC4uLnRoaXMudG9PYmplY3QoKSxcbiAgICAgICAgLi4ubm9ybWFsaXplZFxuICAgICAgfTsgLy8gaWYgd2UgZGlkbid0IHNldCB0aGUgZGF5IGJ1dCB3ZSBlbmRlZCB1cCBvbiBhbiBvdmVyZmxvdyBkYXRlLFxuICAgICAgLy8gdXNlIHRoZSBsYXN0IGRheSBvZiB0aGUgcmlnaHQgbW9udGhcblxuICAgICAgaWYgKGlzVW5kZWZpbmVkKG5vcm1hbGl6ZWQuZGF5KSkge1xuICAgICAgICBtaXhlZC5kYXkgPSBNYXRoLm1pbihkYXlzSW5Nb250aChtaXhlZC55ZWFyLCBtaXhlZC5tb250aCksIG1peGVkLmRheSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgW3RzLCBvXSA9IG9ialRvVFMobWl4ZWQsIHRoaXMubywgdGhpcy56b25lKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywge1xuICAgICAgdHMsXG4gICAgICBvXG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIEFkZCBhIHBlcmlvZCBvZiB0aW1lIHRvIHRoaXMgRGF0ZVRpbWUgYW5kIHJldHVybiB0aGUgcmVzdWx0aW5nIERhdGVUaW1lXG4gICAqXG4gICAqIEFkZGluZyBob3VycywgbWludXRlcywgc2Vjb25kcywgb3IgbWlsbGlzZWNvbmRzIGluY3JlYXNlcyB0aGUgdGltZXN0YW1wIGJ5IHRoZSByaWdodCBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLiBBZGRpbmcgZGF5cywgbW9udGhzLCBvciB5ZWFycyBzaGlmdHMgdGhlIGNhbGVuZGFyLCBhY2NvdW50aW5nIGZvciBEU1RzIGFuZCBsZWFwIHllYXJzIGFsb25nIHRoZSB3YXkuIFRodXMsIGBkdC5wbHVzKHsgaG91cnM6IDI0IH0pYCBtYXkgcmVzdWx0IGluIGEgZGlmZmVyZW50IHRpbWUgdGhhbiBgZHQucGx1cyh7IGRheXM6IDEgfSlgIGlmIHRoZXJlJ3MgYSBEU1Qgc2hpZnQgaW4gYmV0d2Vlbi5cbiAgICogQHBhcmFtIHtEdXJhdGlvbnxPYmplY3R8bnVtYmVyfSBkdXJhdGlvbiAtIFRoZSBhbW91bnQgdG8gYWRkLiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKDEyMykgLy9+PiBpbiAxMjMgbWlsbGlzZWNvbmRzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBtaW51dGVzOiAxNSB9KSAvL34+IGluIDE1IG1pbnV0ZXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IDEgfSkgLy9+PiB0aGlzIHRpbWUgdG9tb3Jyb3dcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkucGx1cyh7IGRheXM6IC0xIH0pIC8vfj4gdGhpcyB0aW1lIHllc3RlcmRheVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgaG91cnM6IDMsIG1pbnV0ZXM6IDEzIH0pIC8vfj4gaW4gMyBociwgMTMgbWluXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoRHVyYXRpb24uZnJvbU9iamVjdCh7IGhvdXJzOiAzLCBtaW51dGVzOiAxMyB9KSkgLy9+PiBpbiAzIGhyLCAxMyBtaW5cbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgcGx1cyhkdXJhdGlvbikge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gdGhpcztcbiAgICBjb25zdCBkdXIgPSBEdXJhdGlvbi5mcm9tRHVyYXRpb25MaWtlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gY2xvbmUodGhpcywgYWRqdXN0VGltZSh0aGlzLCBkdXIpKTtcbiAgfVxuICAvKipcbiAgICogU3VidHJhY3QgYSBwZXJpb2Qgb2YgdGltZSB0byB0aGlzIERhdGVUaW1lIGFuZCByZXR1cm4gdGhlIHJlc3VsdGluZyBEYXRlVGltZVxuICAgKiBTZWUge0BsaW5rIERhdGVUaW1lI3BsdXN9XG4gICAqIEBwYXJhbSB7RHVyYXRpb258T2JqZWN0fG51bWJlcn0gZHVyYXRpb24gLSBUaGUgYW1vdW50IHRvIHN1YnRyYWN0LiBFaXRoZXIgYSBMdXhvbiBEdXJhdGlvbiwgYSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzLCB0aGUgb2JqZWN0IGFyZ3VtZW50IHRvIER1cmF0aW9uLmZyb21PYmplY3QoKVxuICAgQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgbWludXMoZHVyYXRpb24pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIHRoaXM7XG4gICAgY29uc3QgZHVyID0gRHVyYXRpb24uZnJvbUR1cmF0aW9uTGlrZShkdXJhdGlvbikubmVnYXRlKCk7XG4gICAgcmV0dXJuIGNsb25lKHRoaXMsIGFkanVzdFRpbWUodGhpcywgZHVyKSk7XG4gIH1cbiAgLyoqXG4gICAqIFwiU2V0XCIgdGhpcyBEYXRlVGltZSB0byB0aGUgYmVnaW5uaW5nIG9mIGEgdW5pdCBvZiB0aW1lLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdW5pdCAtIFRoZSB1bml0IHRvIGdvIHRvIHRoZSBiZWdpbm5pbmcgb2YuIENhbiBiZSAneWVhcicsICdxdWFydGVyJywgJ21vbnRoJywgJ3dlZWsnLCAnZGF5JywgJ2hvdXInLCAnbWludXRlJywgJ3NlY29uZCcsIG9yICdtaWxsaXNlY29uZCcuXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ21vbnRoJykudG9JU09EYXRlKCk7IC8vPT4gJzIwMTQtMDMtMDEnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMpLnN0YXJ0T2YoJ3llYXInKS50b0lTT0RhdGUoKTsgLy89PiAnMjAxNC0wMS0wMSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuc3RhcnRPZignd2VlaycpLnRvSVNPRGF0ZSgpOyAvLz0+ICcyMDE0LTAzLTAzJywgd2Vla3MgYWx3YXlzIHN0YXJ0IG9uIE1vbmRheXNcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMywgNSwgMzApLnN0YXJ0T2YoJ2RheScpLnRvSVNPVGltZSgpOyAvLz0+ICcwMDowMC4wMDAtMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5zdGFydE9mKCdob3VyJykudG9JU09UaW1lKCk7IC8vPT4gJzA1OjAwOjAwLjAwMC0wNTowMCdcbiAgICogQHJldHVybiB7RGF0ZVRpbWV9XG4gICAqL1xuXG5cbiAgc3RhcnRPZih1bml0KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB0aGlzO1xuICAgIGNvbnN0IG8gPSB7fSxcbiAgICAgICAgICBub3JtYWxpemVkVW5pdCA9IER1cmF0aW9uLm5vcm1hbGl6ZVVuaXQodW5pdCk7XG5cbiAgICBzd2l0Y2ggKG5vcm1hbGl6ZWRVbml0KSB7XG4gICAgICBjYXNlIFwieWVhcnNcIjpcbiAgICAgICAgby5tb250aCA9IDE7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG5cbiAgICAgIGNhc2UgXCJxdWFydGVyc1wiOlxuICAgICAgY2FzZSBcIm1vbnRoc1wiOlxuICAgICAgICBvLmRheSA9IDE7XG4gICAgICAvLyBmYWxscyB0aHJvdWdoXG5cbiAgICAgIGNhc2UgXCJ3ZWVrc1wiOlxuICAgICAgY2FzZSBcImRheXNcIjpcbiAgICAgICAgby5ob3VyID0gMDtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcblxuICAgICAgY2FzZSBcImhvdXJzXCI6XG4gICAgICAgIG8ubWludXRlID0gMDtcbiAgICAgIC8vIGZhbGxzIHRocm91Z2hcblxuICAgICAgY2FzZSBcIm1pbnV0ZXNcIjpcbiAgICAgICAgby5zZWNvbmQgPSAwO1xuICAgICAgLy8gZmFsbHMgdGhyb3VnaFxuXG4gICAgICBjYXNlIFwic2Vjb25kc1wiOlxuICAgICAgICBvLm1pbGxpc2Vjb25kID0gMDtcbiAgICAgICAgYnJlYWs7XG4gICAgICAvLyBubyBkZWZhdWx0LCBpbnZhbGlkIHVuaXRzIHRocm93IGluIG5vcm1hbGl6ZVVuaXQoKVxuICAgIH1cblxuICAgIGlmIChub3JtYWxpemVkVW5pdCA9PT0gXCJ3ZWVrc1wiKSB7XG4gICAgICBvLndlZWtkYXkgPSAxO1xuICAgIH1cblxuICAgIGlmIChub3JtYWxpemVkVW5pdCA9PT0gXCJxdWFydGVyc1wiKSB7XG4gICAgICBjb25zdCBxID0gTWF0aC5jZWlsKHRoaXMubW9udGggLyAzKTtcbiAgICAgIG8ubW9udGggPSAocSAtIDEpICogMyArIDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuc2V0KG8pO1xuICB9XG4gIC8qKlxuICAgKiBcIlNldFwiIHRoaXMgRGF0ZVRpbWUgdG8gdGhlIGVuZCAobWVhbmluZyB0aGUgbGFzdCBtaWxsaXNlY29uZCkgb2YgYSB1bml0IG9mIHRpbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSBUaGUgdW5pdCB0byBnbyB0byB0aGUgZW5kIG9mLiBDYW4gYmUgJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheScsICdob3VyJywgJ21pbnV0ZScsICdzZWNvbmQnLCBvciAnbWlsbGlzZWNvbmQnLlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCAzLCAzKS5lbmRPZignbW9udGgnKS50b0lTTygpOyAvLz0+ICcyMDE0LTAzLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ3llYXInKS50b0lTTygpOyAvLz0+ICcyMDE0LTEyLTMxVDIzOjU5OjU5Ljk5OS0wNTowMCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubG9jYWwoMjAxNCwgMywgMykuZW5kT2YoJ3dlZWsnKS50b0lTTygpOyAvLyA9PiAnMjAxNC0wMy0wOVQyMzo1OTo1OS45OTktMDU6MDAnLCB3ZWVrcyBzdGFydCBvbiBNb25kYXlzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignZGF5JykudG9JU08oKTsgLy89PiAnMjAxNC0wMy0wM1QyMzo1OTo1OS45OTktMDU6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDMsIDMsIDUsIDMwKS5lbmRPZignaG91cicpLnRvSVNPKCk7IC8vPT4gJzIwMTQtMDMtMDNUMDU6NTk6NTkuOTk5LTA1OjAwJ1xuICAgKiBAcmV0dXJuIHtEYXRlVGltZX1cbiAgICovXG5cblxuICBlbmRPZih1bml0KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IHRoaXMucGx1cyh7XG4gICAgICBbdW5pdF06IDFcbiAgICB9KS5zdGFydE9mKHVuaXQpLm1pbnVzKDEpIDogdGhpcztcbiAgfSAvLyBPVVRQVVRcblxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGZvcm1hdHRlZCBhY2NvcmRpbmcgdG8gdGhlIHNwZWNpZmllZCBmb3JtYXQgc3RyaW5nLlxuICAgKiAqKllvdSBtYXkgbm90IHdhbnQgdGhpcy4qKiBTZWUge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3IgYSBtb3JlIGZsZXhpYmxlIGZvcm1hdHRpbmcgdG9vbC4gRm9yIGEgdGFibGUgb2YgdG9rZW5zIGFuZCB0aGVpciBpbnRlcnByZXRhdGlvbnMsIHNlZSBbaGVyZV0oaHR0cHM6Ly9tb21lbnQuZ2l0aHViLmlvL2x1eG9uLyMvZm9ybWF0dGluZz9pZD10YWJsZS1vZi10b2tlbnMpLlxuICAgKiBEZWZhdWx0cyB0byBlbi1VUyBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkLCByZWdhcmRsZXNzIG9mIHRoZSBzeXN0ZW0ncyBsb2NhbGUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHN0cmluZ1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvRm9ybWF0KCd5eXl5IExMTCBkZCcpIC8vPT4gJzIwMTcgQXByIDIyJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoJ2ZyJykudG9Gb3JtYXQoJ3l5eXkgTExMIGRkJykgLy89PiAnMjAxNyBhdnIuIDIyJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0Zvcm1hdCgneXl5eSBMTEwgZGQnLCB7IGxvY2FsZTogXCJmclwiIH0pIC8vPT4gJzIwMTcgYXZyLiAyMidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Gb3JtYXQoXCJISCAnaG91cnMgYW5kJyBtbSAnbWludXRlcydcIikgLy89PiAnMjAgaG91cnMgYW5kIDU1IG1pbnV0ZXMnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICB0b0Zvcm1hdChmbXQsIG9wdHMgPSB7fSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBGb3JtYXR0ZXIuY3JlYXRlKHRoaXMubG9jLnJlZGVmYXVsdFRvRU4ob3B0cykpLmZvcm1hdERhdGVUaW1lRnJvbVN0cmluZyh0aGlzLCBmbXQpIDogSU5WQUxJRDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIGxvY2FsaXplZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoaXMgZGF0ZS4gQWNjZXB0cyB0aGUgc2FtZSBvcHRpb25zIGFzIHRoZSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIGFuZCBhbnkgcHJlc2V0cyBkZWZpbmVkIGJ5IEx1eG9uLCBzdWNoIGFzIGBEYXRlVGltZS5EQVRFX0ZVTExgIG9yIGBEYXRlVGltZS5USU1FX1NJTVBMRWAuXG4gICAqIFRoZSBleGFjdCBiZWhhdmlvciBvZiB0aGlzIG1ldGhvZCBpcyBicm93c2VyLXNwZWNpZmljLCBidXQgaW4gZ2VuZXJhbCBpdCB3aWxsIHJldHVybiBhbiBhcHByb3ByaWF0ZSByZXByZXNlbnRhdGlvblxuICAgKiBvZiB0aGUgRGF0ZVRpbWUgaW4gdGhlIGFzc2lnbmVkIGxvY2FsZS5cbiAgICogRGVmYXVsdHMgdG8gdGhlIHN5c3RlbSdzIGxvY2FsZSBpZiBubyBsb2NhbGUgaGFzIGJlZW4gc3BlY2lmaWVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRGF0ZVRpbWVGb3JtYXRcbiAgICogQHBhcmFtIGZvcm1hdE9wdHMge09iamVjdH0gLSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMgYW5kIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdHMgdG8gb3ZlcnJpZGUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvbiB0aGlzIERhdGVUaW1lXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKCk7IC8vPT4gNC8yMC8yMDE3XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnNldExvY2FsZSgnZW4tZ2InKS50b0xvY2FsZVN0cmluZygpOyAvLz0+ICcyMC8wNC8yMDE3J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0xvY2FsZVN0cmluZyh7IGxvY2FsZTogJ2VuLWdiJyB9KTsgLy89PiAnMjAvMDQvMjAxNydcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoRGF0ZVRpbWUuREFURV9GVUxMKTsgLy89PiAnQXByaWwgMjAsIDIwMTcnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLlRJTUVfU0lNUExFKTsgLy89PiAnMTE6MzIgQU0nXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKERhdGVUaW1lLkRBVEVUSU1FX1NIT1JUKTsgLy89PiAnNC8yMC8yMDE3LCAxMTozMiBBTSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVTdHJpbmcoeyB3ZWVrZGF5OiAnbG9uZycsIG1vbnRoOiAnbG9uZycsIGRheTogJzItZGlnaXQnIH0pOyAvLz0+ICdUaHVyc2RheSwgQXByaWwgMjAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgd2Vla2RheTogJ3Nob3J0JywgbW9udGg6ICdzaG9ydCcsIGRheTogJzItZGlnaXQnLCBob3VyOiAnMi1kaWdpdCcsIG1pbnV0ZTogJzItZGlnaXQnIH0pOyAvLz0+ICdUaHUsIEFwciAyMCwgMTE6MjcgQU0nXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnRvTG9jYWxlU3RyaW5nKHsgaG91cjogJzItZGlnaXQnLCBtaW51dGU6ICcyLWRpZ2l0JywgaG91ckN5Y2xlOiAnaDIzJyB9KTsgLy89PiAnMTE6MzInXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICB0b0xvY2FsZVN0cmluZyhmb3JtYXRPcHRzID0gREFURV9TSE9SVCwgb3B0cyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuaXNWYWxpZCA/IEZvcm1hdHRlci5jcmVhdGUodGhpcy5sb2MuY2xvbmUob3B0cyksIGZvcm1hdE9wdHMpLmZvcm1hdERhdGVUaW1lKHRoaXMpIDogSU5WQUxJRDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBhcnJheSBvZiBmb3JtYXQgXCJwYXJ0c1wiLCBtZWFuaW5nIGluZGl2aWR1YWwgdG9rZW5zIGFsb25nIHdpdGggbWV0YWRhdGEuIFRoaXMgaXMgYWxsb3dzIGNhbGxlcnMgdG8gcG9zdC1wcm9jZXNzIGluZGl2aWR1YWwgc2VjdGlvbnMgb2YgdGhlIGZvcm1hdHRlZCBvdXRwdXQuXG4gICAqIERlZmF1bHRzIHRvIHRoZSBzeXN0ZW0ncyBsb2NhbGUgaWYgbm8gbG9jYWxlIGhhcyBiZWVuIHNwZWNpZmllZFxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0RhdGVUaW1lRm9ybWF0L2Zvcm1hdFRvUGFydHNcbiAgICogQHBhcmFtIG9wdHMge09iamVjdH0gLSBJbnRsLkRhdGVUaW1lRm9ybWF0IGNvbnN0cnVjdG9yIG9wdGlvbnMsIHNhbWUgYXMgYHRvTG9jYWxlU3RyaW5nYC5cbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9Mb2NhbGVQYXJ0cygpOyAvLz0+IFtcbiAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vPT4gICB7IHR5cGU6ICdkYXknLCB2YWx1ZTogJzI1JyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAnbW9udGgnLCB2YWx1ZTogJzA1JyB9LFxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiAgIHsgdHlwZTogJ2xpdGVyYWwnLCB2YWx1ZTogJy8nIH0sXG4gICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLz0+ICAgeyB0eXBlOiAneWVhcicsIHZhbHVlOiAnMTk4MicgfVxuICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy89PiBdXG4gICAqL1xuXG5cbiAgdG9Mb2NhbGVQYXJ0cyhvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gRm9ybWF0dGVyLmNyZWF0ZSh0aGlzLmxvYy5jbG9uZShvcHRzKSwgb3B0cykuZm9ybWF0RGF0ZVRpbWVQYXJ0cyh0aGlzKSA6IFtdO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc01pbGxpc2Vjb25kcz1mYWxzZV0gLSBleGNsdWRlIG1pbGxpc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuc3VwcHJlc3NTZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgc2Vjb25kcyBmcm9tIHRoZSBmb3JtYXQgaWYgdGhleSdyZSAwXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5leHRlbmRlZFpvbmU9dHJ1ZV0gLSBhZGQgdGhlIHRpbWUgem9uZSBmb3JtYXQgZXh0ZW5zaW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MywgNSwgMjUpLnRvSVNPKCkgLy89PiAnMTk4Mi0wNS0yNVQwMDowMDowMC4wMDBaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTygpIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1LTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTyh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIC8vPT4gJzIwMTctMDQtMjJUMjA6NDc6MDUuMzM1J1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b0lTTyh7IGZvcm1hdDogJ2Jhc2ljJyB9KSAvLz0+ICcyMDE3MDQyMlQyMDQ3MDUuMzM1LTA0MDAnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICB0b0lTTyh7XG4gICAgZm9ybWF0ID0gXCJleHRlbmRlZFwiLFxuICAgIHN1cHByZXNzU2Vjb25kcyA9IGZhbHNlLFxuICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzID0gZmFsc2UsXG4gICAgaW5jbHVkZU9mZnNldCA9IHRydWUsXG4gICAgZXh0ZW5kZWRab25lID0gZmFsc2VcbiAgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGV4dCA9IGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiO1xuICAgIGxldCBjID0gdG9JU09EYXRlKHRoaXMsIGV4dCk7XG4gICAgYyArPSBcIlRcIjtcbiAgICBjICs9IHRvSVNPVGltZSh0aGlzLCBleHQsIHN1cHByZXNzU2Vjb25kcywgc3VwcHJlc3NNaWxsaXNlY29uZHMsIGluY2x1ZGVPZmZzZXQsIGV4dGVuZGVkWm9uZSk7XG4gICAgcmV0dXJuIGM7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gSVNPIDg2MDEtY29tcGxpYW50IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lJ3MgZGF0ZSBjb21wb25lbnRcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdHMgLSBvcHRpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5mb3JtYXQ9J2V4dGVuZGVkJ10gLSBjaG9vc2UgYmV0d2VlbiB0aGUgYmFzaWMgYW5kIGV4dGVuZGVkIGZvcm1hdFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPRGF0ZSgpIC8vPT4gJzE5ODItMDUtMjUnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygxOTgyLCA1LCAyNSkudG9JU09EYXRlKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzE5ODIwNTI1J1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgdG9JU09EYXRlKHtcbiAgICBmb3JtYXQgPSBcImV4dGVuZGVkXCJcbiAgfSA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB0b0lTT0RhdGUodGhpcywgZm9ybWF0ID09PSBcImV4dGVuZGVkXCIpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHdlZWsgZGF0ZVxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoMTk4MiwgNSwgMjUpLnRvSVNPV2Vla0RhdGUoKSAvLz0+ICcxOTgyLVcyMS0yJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgdG9JU09XZWVrRGF0ZSgpIHtcbiAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMsIFwia2tray0nVydXVy1jXCIpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIElTTyA4NjAxLWNvbXBsaWFudCBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSdzIHRpbWUgY29tcG9uZW50XG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLnN1cHByZXNzTWlsbGlzZWNvbmRzPWZhbHNlXSAtIGV4Y2x1ZGUgbWlsbGlzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5zdXBwcmVzc1NlY29uZHM9ZmFsc2VdIC0gZXhjbHVkZSBzZWNvbmRzIGZyb20gdGhlIGZvcm1hdCBpZiB0aGV5J3JlIDBcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmV4dGVuZGVkWm9uZT10cnVlXSAtIGFkZCB0aGUgdGltZSB6b25lIGZvcm1hdCBleHRlbnNpb25cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlUHJlZml4PWZhbHNlXSAtIGluY2x1ZGUgdGhlIGBUYCBwcmVmaXhcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtvcHRzLmZvcm1hdD0nZXh0ZW5kZWQnXSAtIGNob29zZSBiZXR3ZWVuIHRoZSBiYXNpYyBhbmQgZXh0ZW5kZWQgZm9ybWF0XG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKCkgLy89PiAnMDc6MzQ6MTkuMzYxWidcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKCkuc2V0KHsgaG91cjogNywgbWludXRlOiAzNCwgc2Vjb25kczogMCwgbWlsbGlzZWNvbmRzOiAwIH0pLnRvSVNPVGltZSh7IHN1cHByZXNzU2Vjb25kczogdHJ1ZSB9KSAvLz0+ICcwNzozNFonXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygpLnNldCh7IGhvdXI6IDcsIG1pbnV0ZTogMzQgfSkudG9JU09UaW1lKHsgZm9ybWF0OiAnYmFzaWMnIH0pIC8vPT4gJzA3MzQxOS4zNjFaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS5zZXQoeyBob3VyOiA3LCBtaW51dGU6IDM0IH0pLnRvSVNPVGltZSh7IGluY2x1ZGVQcmVmaXg6IHRydWUgfSkgLy89PiAnVDA3OjM0OjE5LjM2MVonXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICB0b0lTT1RpbWUoe1xuICAgIHN1cHByZXNzTWlsbGlzZWNvbmRzID0gZmFsc2UsXG4gICAgc3VwcHJlc3NTZWNvbmRzID0gZmFsc2UsXG4gICAgaW5jbHVkZU9mZnNldCA9IHRydWUsXG4gICAgaW5jbHVkZVByZWZpeCA9IGZhbHNlLFxuICAgIGV4dGVuZGVkWm9uZSA9IGZhbHNlLFxuICAgIGZvcm1hdCA9IFwiZXh0ZW5kZWRcIlxuICB9ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgbGV0IGMgPSBpbmNsdWRlUHJlZml4ID8gXCJUXCIgOiBcIlwiO1xuICAgIHJldHVybiBjICsgdG9JU09UaW1lKHRoaXMsIGZvcm1hdCA9PT0gXCJleHRlbmRlZFwiLCBzdXBwcmVzc1NlY29uZHMsIHN1cHByZXNzTWlsbGlzZWNvbmRzLCBpbmNsdWRlT2Zmc2V0LCBleHRlbmRlZFpvbmUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGFuIFJGQyAyODIyLWNvbXBhdGlibGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1JGQzI4MjIoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwICswMDAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCA3LCAxMykudG9SRkMyODIyKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAwMDowMDowMCAtMDQwMCdcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIHRvUkZDMjgyMigpIHtcbiAgICByZXR1cm4gdG9UZWNoRm9ybWF0KHRoaXMsIFwiRUVFLCBkZCBMTEwgeXl5eSBISDptbTpzcyBaWlpcIiwgZmFsc2UpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBIVFRQIGhlYWRlcnMuIFRoZSBvdXRwdXQgaXMgYWx3YXlzIGV4cHJlc3NlZCBpbiBHTVQuXG4gICAqIFNwZWNpZmljYWxseSwgdGhlIHN0cmluZyBjb25mb3JtcyB0byBSRkMgMTEyMy5cbiAgICogQHNlZSBodHRwczovL3d3dy53My5vcmcvUHJvdG9jb2xzL3JmYzI2MTYvcmZjMjYxNi1zZWMzLmh0bWwjc2VjMy4zLjFcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b0hUVFAoKSAvLz0+ICdTdW4sIDEzIEp1bCAyMDE0IDAwOjAwOjAwIEdNVCdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzLCAxOSkudG9IVFRQKCkgLy89PiAnU3VuLCAxMyBKdWwgMjAxNCAxOTowMDowMCBHTVQnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICB0b0hUVFAoKSB7XG4gICAgcmV0dXJuIHRvVGVjaEZvcm1hdCh0aGlzLnRvVVRDKCksIFwiRUVFLCBkZCBMTEwgeXl5eSBISDptbTpzcyAnR01UJ1wiKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gU1FMIERhdGVcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUudXRjKDIwMTQsIDcsIDEzKS50b1NRTERhdGUoKSAvLz0+ICcyMDE0LTA3LTEzJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgdG9TUUxEYXRlKCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gdG9JU09EYXRlKHRoaXMsIHRydWUpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoaXMgRGF0ZVRpbWUgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBTUUwgVGltZVxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0cyAtIG9wdGlvbnNcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlWm9uZT1mYWxzZV0gLSBpbmNsdWRlIHRoZSB6b25lLCBzdWNoIGFzICdBbWVyaWNhL05ld19Zb3JrJy4gT3ZlcnJpZGVzIGluY2x1ZGVPZmZzZXQuXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW29wdHMuaW5jbHVkZU9mZnNldD10cnVlXSAtIGluY2x1ZGUgdGhlIG9mZnNldCwgc3VjaCBhcyAnWicgb3IgJy0wNDowMCdcbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0U3BhY2U9dHJ1ZV0gLSBpbmNsdWRlIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0aW1lIGFuZCB0aGUgb2Zmc2V0LCBzdWNoIGFzICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS51dGMoKS50b1NRTCgpIC8vPT4gJzA1OjE1OjE2LjM0NSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoKSAvLz0+ICcwNToxNToxNi4zNDUgLTA0OjAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b1NRTCh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIC8vPT4gJzA1OjE1OjE2LjM0NSdcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkudG9TUUwoeyBpbmNsdWRlWm9uZTogZmFsc2UgfSkgLy89PiAnMDU6MTU6MTYuMzQ1IEFtZXJpY2EvTmV3X1lvcmsnXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICB0b1NRTFRpbWUoe1xuICAgIGluY2x1ZGVPZmZzZXQgPSB0cnVlLFxuICAgIGluY2x1ZGVab25lID0gZmFsc2UsXG4gICAgaW5jbHVkZU9mZnNldFNwYWNlID0gdHJ1ZVxuICB9ID0ge30pIHtcbiAgICBsZXQgZm10ID0gXCJISDptbTpzcy5TU1NcIjtcblxuICAgIGlmIChpbmNsdWRlWm9uZSB8fCBpbmNsdWRlT2Zmc2V0KSB7XG4gICAgICBpZiAoaW5jbHVkZU9mZnNldFNwYWNlKSB7XG4gICAgICAgIGZtdCArPSBcIiBcIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGluY2x1ZGVab25lKSB7XG4gICAgICAgIGZtdCArPSBcInpcIjtcbiAgICAgIH0gZWxzZSBpZiAoaW5jbHVkZU9mZnNldCkge1xuICAgICAgICBmbXQgKz0gXCJaWlwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0b1RlY2hGb3JtYXQodGhpcywgZm10LCB0cnVlKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gU1FMIERhdGVUaW1lXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9uc1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVab25lPWZhbHNlXSAtIGluY2x1ZGUgdGhlIHpvbmUsIHN1Y2ggYXMgJ0FtZXJpY2EvTmV3X1lvcmsnLiBPdmVycmlkZXMgaW5jbHVkZU9mZnNldC5cbiAgICogQHBhcmFtIHtib29sZWFufSBbb3B0cy5pbmNsdWRlT2Zmc2V0PXRydWVdIC0gaW5jbHVkZSB0aGUgb2Zmc2V0LCBzdWNoIGFzICdaJyBvciAnLTA0OjAwJ1xuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVPZmZzZXRTcGFjZT10cnVlXSAtIGluY2x1ZGUgdGhlIHNwYWNlIGJldHdlZW4gdGhlIHRpbWUgYW5kIHRoZSBvZmZzZXQsIHN1Y2ggYXMgJzA1OjE1OjE2LjM0NSAtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLnV0YygyMDE0LCA3LCAxMykudG9TUUwoKSAvLz0+ICcyMDE0LTA3LTEzIDAwOjAwOjAwLjAwMCBaJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCA3LCAxMykudG9TUUwoKSAvLz0+ICcyMDE0LTA3LTEzIDAwOjAwOjAwLjAwMCAtMDQ6MDAnXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLmxvY2FsKDIwMTQsIDcsIDEzKS50b1NRTCh7IGluY2x1ZGVPZmZzZXQ6IGZhbHNlIH0pIC8vPT4gJzIwMTQtMDctMTMgMDA6MDA6MDAuMDAwJ1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5sb2NhbCgyMDE0LCA3LCAxMykudG9TUUwoeyBpbmNsdWRlWm9uZTogdHJ1ZSB9KSAvLz0+ICcyMDE0LTA3LTEzIDAwOjAwOjAwLjAwMCBBbWVyaWNhL05ld19Zb3JrJ1xuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgdG9TUUwob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiBgJHt0aGlzLnRvU1FMRGF0ZSgpfSAke3RoaXMudG9TUUxUaW1lKG9wdHMpfWA7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBEYXRlVGltZSBhcHByb3ByaWF0ZSBmb3IgZGVidWdnaW5nXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cblxuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy50b0lTTygpIDogSU5WQUxJRDtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggbWlsbGlzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuIEFsaWFzIG9mIHtAbGluayBEYXRlVGltZSN0b01pbGxpc31cbiAgICogQHJldHVybiB7bnVtYmVyfVxuICAgKi9cblxuXG4gIHZhbHVlT2YoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9NaWxsaXMoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggbWlsbGlzZWNvbmRzIG9mIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG5cblxuICB0b01pbGxpcygpIHtcbiAgICByZXR1cm4gdGhpcy5pc1ZhbGlkID8gdGhpcy50cyA6IE5hTjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggc2Vjb25kcyBvZiB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtudW1iZXJ9XG4gICAqL1xuXG5cbiAgdG9TZWNvbmRzKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyB0aGlzLnRzIC8gMTAwMCA6IE5hTjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyB0aGUgZXBvY2ggc2Vjb25kcyAoYXMgYSB3aG9sZSBudW1iZXIpIG9mIHRoaXMgRGF0ZVRpbWUuXG4gICAqIEByZXR1cm4ge251bWJlcn1cbiAgICovXG5cblxuICB0b1VuaXhJbnRlZ2VyKCkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBNYXRoLmZsb29yKHRoaXMudHMgLyAxMDAwKSA6IE5hTjtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhbiBJU08gODYwMSByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERhdGVUaW1lIGFwcHJvcHJpYXRlIGZvciB1c2UgaW4gSlNPTi5cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuXG4gIHRvSlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b0lTTygpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgQlNPTiBzZXJpYWxpemFibGUgZXF1aXZhbGVudCB0byB0aGlzIERhdGVUaW1lLlxuICAgKiBAcmV0dXJuIHtEYXRlfVxuICAgKi9cblxuXG4gIHRvQlNPTigpIHtcbiAgICByZXR1cm4gdGhpcy50b0pTRGF0ZSgpO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3Qgd2l0aCB0aGlzIERhdGVUaW1lJ3MgeWVhciwgbW9udGgsIGRheSwgYW5kIHNvIG9uLlxuICAgKiBAcGFyYW0gb3B0cyAtIG9wdGlvbnMgZm9yIGdlbmVyYXRpbmcgdGhlIG9iamVjdFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRzLmluY2x1ZGVDb25maWc9ZmFsc2VdIC0gaW5jbHVkZSBjb25maWd1cmF0aW9uIGF0dHJpYnV0ZXMgaW4gdGhlIG91dHB1dFxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS50b09iamVjdCgpIC8vPT4geyB5ZWFyOiAyMDE3LCBtb250aDogNCwgZGF5OiAyMiwgaG91cjogMjAsIG1pbnV0ZTogNDksIHNlY29uZDogNDIsIG1pbGxpc2Vjb25kOiAyNjggfVxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgdG9PYmplY3Qob3B0cyA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLmlzVmFsaWQpIHJldHVybiB7fTtcbiAgICBjb25zdCBiYXNlID0geyAuLi50aGlzLmNcbiAgICB9O1xuXG4gICAgaWYgKG9wdHMuaW5jbHVkZUNvbmZpZykge1xuICAgICAgYmFzZS5vdXRwdXRDYWxlbmRhciA9IHRoaXMub3V0cHV0Q2FsZW5kYXI7XG4gICAgICBiYXNlLm51bWJlcmluZ1N5c3RlbSA9IHRoaXMubG9jLm51bWJlcmluZ1N5c3RlbTtcbiAgICAgIGJhc2UubG9jYWxlID0gdGhpcy5sb2MubG9jYWxlO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgSmF2YVNjcmlwdCBEYXRlIGVxdWl2YWxlbnQgdG8gdGhpcyBEYXRlVGltZS5cbiAgICogQHJldHVybiB7RGF0ZX1cbiAgICovXG5cblxuICB0b0pTRGF0ZSgpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy5pc1ZhbGlkID8gdGhpcy50cyA6IE5hTik7XG4gIH0gLy8gQ09NUEFSRVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0d28gRGF0ZVRpbWVzIGFzIGEgRHVyYXRpb24uXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyRGF0ZVRpbWUgLSB0aGUgRGF0ZVRpbWUgdG8gY29tcGFyZSB0aGlzIG9uZSB0b1xuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gW3VuaXQ9WydtaWxsaXNlY29uZHMnXV0gLSB0aGUgdW5pdCBvciBhcnJheSBvZiB1bml0cyAoc3VjaCBhcyAnaG91cnMnIG9yICdkYXlzJykgdG8gaW5jbHVkZSBpbiB0aGUgZHVyYXRpb24uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAZXhhbXBsZVxuICAgKiB2YXIgaTEgPSBEYXRlVGltZS5mcm9tSVNPKCcxOTgyLTA1LTI1VDA5OjQ1JyksXG4gICAqICAgICBpMiA9IERhdGVUaW1lLmZyb21JU08oJzE5ODMtMTAtMTRUMTA6MzAnKTtcbiAgICogaTIuZGlmZihpMSkudG9PYmplY3QoKSAvLz0+IHsgbWlsbGlzZWNvbmRzOiA0MzgwNzUwMDAwMCB9XG4gICAqIGkyLmRpZmYoaTEsICdob3VycycpLnRvT2JqZWN0KCkgLy89PiB7IGhvdXJzOiAxMjE2OC43NSB9XG4gICAqIGkyLmRpZmYoaTEsIFsnbW9udGhzJywgJ2RheXMnXSkudG9PYmplY3QoKSAvLz0+IHsgbW9udGhzOiAxNiwgZGF5czogMTkuMDMxMjUgfVxuICAgKiBpMi5kaWZmKGkxLCBbJ21vbnRocycsICdkYXlzJywgJ2hvdXJzJ10pLnRvT2JqZWN0KCkgLy89PiB7IG1vbnRoczogMTYsIGRheXM6IDE5LCBob3VyczogMC43NSB9XG4gICAqIEByZXR1cm4ge0R1cmF0aW9ufVxuICAgKi9cblxuXG4gIGRpZmYob3RoZXJEYXRlVGltZSwgdW5pdCA9IFwibWlsbGlzZWNvbmRzXCIsIG9wdHMgPSB7fSkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkIHx8ICFvdGhlckRhdGVUaW1lLmlzVmFsaWQpIHtcbiAgICAgIHJldHVybiBEdXJhdGlvbi5pbnZhbGlkKFwiY3JlYXRlZCBieSBkaWZmaW5nIGFuIGludmFsaWQgRGF0ZVRpbWVcIik7XG4gICAgfVxuXG4gICAgY29uc3QgZHVyT3B0cyA9IHtcbiAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICBudW1iZXJpbmdTeXN0ZW06IHRoaXMubnVtYmVyaW5nU3lzdGVtLFxuICAgICAgLi4ub3B0c1xuICAgIH07XG4gICAgY29uc3QgdW5pdHMgPSBtYXliZUFycmF5KHVuaXQpLm1hcChEdXJhdGlvbi5ub3JtYWxpemVVbml0KSxcbiAgICAgICAgICBvdGhlcklzTGF0ZXIgPSBvdGhlckRhdGVUaW1lLnZhbHVlT2YoKSA+IHRoaXMudmFsdWVPZigpLFxuICAgICAgICAgIGVhcmxpZXIgPSBvdGhlcklzTGF0ZXIgPyB0aGlzIDogb3RoZXJEYXRlVGltZSxcbiAgICAgICAgICBsYXRlciA9IG90aGVySXNMYXRlciA/IG90aGVyRGF0ZVRpbWUgOiB0aGlzLFxuICAgICAgICAgIGRpZmZlZCA9IGRpZmYoZWFybGllciwgbGF0ZXIsIHVuaXRzLCBkdXJPcHRzKTtcbiAgICByZXR1cm4gb3RoZXJJc0xhdGVyID8gZGlmZmVkLm5lZ2F0ZSgpIDogZGlmZmVkO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGlzIERhdGVUaW1lIGFuZCByaWdodCBub3cuXG4gICAqIFNlZSB7QGxpbmsgRGF0ZVRpbWUjZGlmZn1cbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IFt1bml0PVsnbWlsbGlzZWNvbmRzJ11dIC0gdGhlIHVuaXQgb3IgdW5pdHMgdW5pdHMgKHN1Y2ggYXMgJ2hvdXJzJyBvciAnZGF5cycpIHRvIGluY2x1ZGUgaW4gdGhlIGR1cmF0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRzIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgdGhlIER1cmF0aW9uXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbb3B0cy5jb252ZXJzaW9uQWNjdXJhY3k9J2Nhc3VhbCddIC0gdGhlIGNvbnZlcnNpb24gc3lzdGVtIHRvIHVzZVxuICAgKiBAcmV0dXJuIHtEdXJhdGlvbn1cbiAgICovXG5cblxuICBkaWZmTm93KHVuaXQgPSBcIm1pbGxpc2Vjb25kc1wiLCBvcHRzID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5kaWZmKERhdGVUaW1lLm5vdygpLCB1bml0LCBvcHRzKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIGFuIEludGVydmFsIHNwYW5uaW5nIGJldHdlZW4gdGhpcyBEYXRlVGltZSBhbmQgYW5vdGhlciBEYXRlVGltZVxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlckRhdGVUaW1lIC0gdGhlIG90aGVyIGVuZCBwb2ludCBvZiB0aGUgSW50ZXJ2YWxcbiAgICogQHJldHVybiB7SW50ZXJ2YWx9XG4gICAqL1xuXG5cbiAgdW50aWwob3RoZXJEYXRlVGltZSkge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgPyBJbnRlcnZhbC5mcm9tRGF0ZVRpbWVzKHRoaXMsIG90aGVyRGF0ZVRpbWUpIDogdGhpcztcbiAgfVxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhpcyBEYXRlVGltZSBpcyBpbiB0aGUgc2FtZSB1bml0IG9mIHRpbWUgYXMgYW5vdGhlciBEYXRlVGltZS5cbiAgICogSGlnaGVyLW9yZGVyIHVuaXRzIG11c3QgYWxzbyBiZSBpZGVudGljYWwgZm9yIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIGB0cnVlYC5cbiAgICogTm90ZSB0aGF0IHRpbWUgem9uZXMgYXJlICoqaWdub3JlZCoqIGluIHRoaXMgY29tcGFyaXNvbiwgd2hpY2ggY29tcGFyZXMgdGhlICoqbG9jYWwqKiBjYWxlbmRhciB0aW1lLiBVc2Uge0BsaW5rIERhdGVUaW1lI3NldFpvbmV9IHRvIGNvbnZlcnQgb25lIG9mIHRoZSBkYXRlcyBpZiBuZWVkZWQuXG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IG90aGVyRGF0ZVRpbWUgLSB0aGUgb3RoZXIgRGF0ZVRpbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVuaXQgLSB0aGUgdW5pdCBvZiB0aW1lIHRvIGNoZWNrIHNhbWVuZXNzIG9uXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLmhhc1NhbWUob3RoZXJEVCwgJ2RheScpOyAvL34+IHRydWUgaWYgb3RoZXJEVCBpcyBpbiB0aGUgc2FtZSBjdXJyZW50IGNhbGVuZGFyIGRheVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIGhhc1NhbWUob3RoZXJEYXRlVGltZSwgdW5pdCkge1xuICAgIGlmICghdGhpcy5pc1ZhbGlkKSByZXR1cm4gZmFsc2U7XG4gICAgY29uc3QgaW5wdXRNcyA9IG90aGVyRGF0ZVRpbWUudmFsdWVPZigpO1xuICAgIGNvbnN0IGFkanVzdGVkVG9ab25lID0gdGhpcy5zZXRab25lKG90aGVyRGF0ZVRpbWUuem9uZSwge1xuICAgICAga2VlcExvY2FsVGltZTogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBhZGp1c3RlZFRvWm9uZS5zdGFydE9mKHVuaXQpIDw9IGlucHV0TXMgJiYgaW5wdXRNcyA8PSBhZGp1c3RlZFRvWm9uZS5lbmRPZih1bml0KTtcbiAgfVxuICAvKipcbiAgICogRXF1YWxpdHkgY2hlY2tcbiAgICogVHdvIERhdGVUaW1lcyBhcmUgZXF1YWwgaWZmIHRoZXkgcmVwcmVzZW50IHRoZSBzYW1lIG1pbGxpc2Vjb25kLCBoYXZlIHRoZSBzYW1lIHpvbmUgYW5kIGxvY2F0aW9uLCBhbmQgYXJlIGJvdGggdmFsaWQuXG4gICAqIFRvIGNvbXBhcmUganVzdCB0aGUgbWlsbGlzZWNvbmQgdmFsdWVzLCB1c2UgYCtkdDEgPT09ICtkdDJgLlxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBvdGhlciAtIHRoZSBvdGhlciBEYXRlVGltZVxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKi9cblxuXG4gIGVxdWFscyhvdGhlcikge1xuICAgIHJldHVybiB0aGlzLmlzVmFsaWQgJiYgb3RoZXIuaXNWYWxpZCAmJiB0aGlzLnZhbHVlT2YoKSA9PT0gb3RoZXIudmFsdWVPZigpICYmIHRoaXMuem9uZS5lcXVhbHMob3RoZXIuem9uZSkgJiYgdGhpcy5sb2MuZXF1YWxzKG90aGVyLmxvYyk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSB0aGlzIHRpbWUgcmVsYXRpdmUgdG8gbm93LCBzdWNoIGFzIFwiaW4gdHdvIGRheXNcIi4gQ2FuIG9ubHkgaW50ZXJuYXRpb25hbGl6ZSBpZiB5b3VyXG4gICAqIHBsYXRmb3JtIHN1cHBvcnRzIEludGwuUmVsYXRpdmVUaW1lRm9ybWF0LiBSb3VuZHMgZG93biBieSBkZWZhdWx0LlxuICAgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyAtIG9wdGlvbnMgdGhhdCBhZmZlY3QgdGhlIG91dHB1dFxuICAgKiBAcGFyYW0ge0RhdGVUaW1lfSBbb3B0aW9ucy5iYXNlPURhdGVUaW1lLm5vdygpXSAtIHRoZSBEYXRlVGltZSB0byB1c2UgYXMgdGhlIGJhc2lzIHRvIHdoaWNoIHRoaXMgdGltZSBpcyBjb21wYXJlZC4gRGVmYXVsdHMgdG8gbm93LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW29wdGlvbnMuc3R5bGU9XCJsb25nXCJdIC0gdGhlIHN0eWxlIG9mIHVuaXRzLCBtdXN0IGJlIFwibG9uZ1wiLCBcInNob3J0XCIsIG9yIFwibmFycm93XCJcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IG9wdGlvbnMudW5pdCAtIHVzZSBhIHNwZWNpZmljIHVuaXQgb3IgYXJyYXkgb2YgdW5pdHM7IGlmIG9taXR0ZWQsIG9yIGFuIGFycmF5LCB0aGUgbWV0aG9kIHdpbGwgcGljayB0aGUgYmVzdCB1bml0LiBVc2UgYW4gYXJyYXkgb3Igb25lIG9mIFwieWVhcnNcIiwgXCJxdWFydGVyc1wiLCBcIm1vbnRoc1wiLCBcIndlZWtzXCIsIFwiZGF5c1wiLCBcImhvdXJzXCIsIFwibWludXRlc1wiLCBvciBcInNlY29uZHNcIlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtvcHRpb25zLnJvdW5kPXRydWVdIC0gd2hldGhlciB0byByb3VuZCB0aGUgbnVtYmVycyBpbiB0aGUgb3V0cHV0LlxuICAgKiBAcGFyYW0ge251bWJlcn0gW29wdGlvbnMucGFkZGluZz0wXSAtIHBhZGRpbmcgaW4gbWlsbGlzZWNvbmRzLiBUaGlzIGFsbG93cyB5b3UgdG8gcm91bmQgdXAgdGhlIHJlc3VsdCBpZiBpdCBmaXRzIGluc2lkZSB0aGUgdGhyZXNob2xkLiBEb24ndCB1c2UgaW4gY29tYmluYXRpb24gd2l0aCB7cm91bmQ6IGZhbHNlfSBiZWNhdXNlIHRoZSBkZWNpbWFsIG91dHB1dCB3aWxsIGluY2x1ZGUgdGhlIHBhZGRpbmcuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmxvY2FsZSAtIG92ZXJyaWRlIHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5udW1iZXJpbmdTeXN0ZW0gLSBvdmVycmlkZSB0aGUgbnVtYmVyaW5nU3lzdGVtIG9mIHRoaXMgRGF0ZVRpbWUuIFRoZSBJbnRsIHN5c3RlbSBtYXkgY2hvb3NlIG5vdCB0byBob25vciB0aGlzXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoKSAvLz0+IFwiaW4gMSBkYXlcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoXCJlc1wiKS50b1JlbGF0aXZlKHsgZGF5czogMSB9KSAvLz0+IFwiZGVudHJvIGRlIDEgZMOtYVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmUoeyBsb2NhbGU6IFwiZnJcIiB9KSAvLz0+IFwiZGFucyAyMyBoZXVyZXNcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZSgpIC8vPT4gXCIyIGRheXMgYWdvXCJcbiAgICogQGV4YW1wbGUgRGF0ZVRpbWUubm93KCkubWludXMoeyBkYXlzOiAyIH0pLnRvUmVsYXRpdmUoeyB1bml0OiBcImhvdXJzXCIgfSkgLy89PiBcIjQ4IGhvdXJzIGFnb1wiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLm1pbnVzKHsgaG91cnM6IDM2IH0pLnRvUmVsYXRpdmUoeyByb3VuZDogZmFsc2UgfSkgLy89PiBcIjEuNSBkYXlzIGFnb1wiXG4gICAqL1xuXG5cbiAgdG9SZWxhdGl2ZShvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7XG4gICAgY29uc3QgYmFzZSA9IG9wdGlvbnMuYmFzZSB8fCBEYXRlVGltZS5mcm9tT2JqZWN0KHt9LCB7XG4gICAgICB6b25lOiB0aGlzLnpvbmVcbiAgICB9KSxcbiAgICAgICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nID8gdGhpcyA8IGJhc2UgPyAtb3B0aW9ucy5wYWRkaW5nIDogb3B0aW9ucy5wYWRkaW5nIDogMDtcbiAgICBsZXQgdW5pdHMgPSBbXCJ5ZWFyc1wiLCBcIm1vbnRoc1wiLCBcImRheXNcIiwgXCJob3Vyc1wiLCBcIm1pbnV0ZXNcIiwgXCJzZWNvbmRzXCJdO1xuICAgIGxldCB1bml0ID0gb3B0aW9ucy51bml0O1xuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9ucy51bml0KSkge1xuICAgICAgdW5pdHMgPSBvcHRpb25zLnVuaXQ7XG4gICAgICB1bml0ID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiBkaWZmUmVsYXRpdmUoYmFzZSwgdGhpcy5wbHVzKHBhZGRpbmcpLCB7IC4uLm9wdGlvbnMsXG4gICAgICBudW1lcmljOiBcImFsd2F5c1wiLFxuICAgICAgdW5pdHMsXG4gICAgICB1bml0XG4gICAgfSk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhpcyBkYXRlIHJlbGF0aXZlIHRvIHRvZGF5LCBzdWNoIGFzIFwieWVzdGVyZGF5XCIgb3IgXCJuZXh0IG1vbnRoXCIuXG4gICAqIE9ubHkgaW50ZXJuYXRpb25hbGl6ZXMgb24gcGxhdGZvcm1zIHRoYXQgc3VwcG9ydHMgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQuXG4gICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gb3B0aW9ucyB0aGF0IGFmZmVjdCB0aGUgb3V0cHV0XG4gICAqIEBwYXJhbSB7RGF0ZVRpbWV9IFtvcHRpb25zLmJhc2U9RGF0ZVRpbWUubm93KCldIC0gdGhlIERhdGVUaW1lIHRvIHVzZSBhcyB0aGUgYmFzaXMgdG8gd2hpY2ggdGhpcyB0aW1lIGlzIGNvbXBhcmVkLiBEZWZhdWx0cyB0byBub3cuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRpb25zLmxvY2FsZSAtIG92ZXJyaWRlIHRoZSBsb2NhbGUgb2YgdGhpcyBEYXRlVGltZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy51bml0IC0gdXNlIGEgc3BlY2lmaWMgdW5pdDsgaWYgb21pdHRlZCwgdGhlIG1ldGhvZCB3aWxsIHBpY2sgdGhlIHVuaXQuIFVzZSBvbmUgb2YgXCJ5ZWFyc1wiLCBcInF1YXJ0ZXJzXCIsIFwibW9udGhzXCIsIFwid2Vla3NcIiwgb3IgXCJkYXlzXCJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9wdGlvbnMubnVtYmVyaW5nU3lzdGVtIC0gb3ZlcnJpZGUgdGhlIG51bWJlcmluZ1N5c3RlbSBvZiB0aGlzIERhdGVUaW1lLiBUaGUgSW50bCBzeXN0ZW0gbWF5IGNob29zZSBub3QgdG8gaG9ub3IgdGhpc1xuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlQ2FsZW5kYXIoKSAvLz0+IFwidG9tb3Jyb3dcIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5zZXRMb2NhbGUoXCJlc1wiKS5wbHVzKHsgZGF5czogMSB9KS50b1JlbGF0aXZlKCkgLy89PiBcIlwibWHDsWFuYVwiXG4gICAqIEBleGFtcGxlIERhdGVUaW1lLm5vdygpLnBsdXMoeyBkYXlzOiAxIH0pLnRvUmVsYXRpdmVDYWxlbmRhcih7IGxvY2FsZTogXCJmclwiIH0pIC8vPT4gXCJkZW1haW5cIlxuICAgKiBAZXhhbXBsZSBEYXRlVGltZS5ub3coKS5taW51cyh7IGRheXM6IDIgfSkudG9SZWxhdGl2ZUNhbGVuZGFyKCkgLy89PiBcIjIgZGF5cyBhZ29cIlxuICAgKi9cblxuXG4gIHRvUmVsYXRpdmVDYWxlbmRhcihvcHRpb25zID0ge30pIHtcbiAgICBpZiAoIXRoaXMuaXNWYWxpZCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIGRpZmZSZWxhdGl2ZShvcHRpb25zLmJhc2UgfHwgRGF0ZVRpbWUuZnJvbU9iamVjdCh7fSwge1xuICAgICAgem9uZTogdGhpcy56b25lXG4gICAgfSksIHRoaXMsIHsgLi4ub3B0aW9ucyxcbiAgICAgIG51bWVyaWM6IFwiYXV0b1wiLFxuICAgICAgdW5pdHM6IFtcInllYXJzXCIsIFwibW9udGhzXCIsIFwiZGF5c1wiXSxcbiAgICAgIGNhbGVuZGFyeTogdHJ1ZVxuICAgIH0pO1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIG1pbiBvZiBzZXZlcmFsIGRhdGUgdGltZXNcbiAgICogQHBhcmFtIHsuLi5EYXRlVGltZX0gZGF0ZVRpbWVzIC0gdGhlIERhdGVUaW1lcyBmcm9tIHdoaWNoIHRvIGNob29zZSB0aGUgbWluaW11bVxuICAgKiBAcmV0dXJuIHtEYXRlVGltZX0gdGhlIG1pbiBEYXRlVGltZSwgb3IgdW5kZWZpbmVkIGlmIGNhbGxlZCB3aXRoIG5vIGFyZ3VtZW50XG4gICAqL1xuXG5cbiAgc3RhdGljIG1pbiguLi5kYXRlVGltZXMpIHtcbiAgICBpZiAoIWRhdGVUaW1lcy5ldmVyeShEYXRlVGltZS5pc0RhdGVUaW1lKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKFwibWluIHJlcXVpcmVzIGFsbCBhcmd1bWVudHMgYmUgRGF0ZVRpbWVzXCIpO1xuICAgIH1cblxuICAgIHJldHVybiBiZXN0QnkoZGF0ZVRpbWVzLCBpID0+IGkudmFsdWVPZigpLCBNYXRoLm1pbik7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgbWF4IG9mIHNldmVyYWwgZGF0ZSB0aW1lc1xuICAgKiBAcGFyYW0gey4uLkRhdGVUaW1lfSBkYXRlVGltZXMgLSB0aGUgRGF0ZVRpbWVzIGZyb20gd2hpY2ggdG8gY2hvb3NlIHRoZSBtYXhpbXVtXG4gICAqIEByZXR1cm4ge0RhdGVUaW1lfSB0aGUgbWF4IERhdGVUaW1lLCBvciB1bmRlZmluZWQgaWYgY2FsbGVkIHdpdGggbm8gYXJndW1lbnRcbiAgICovXG5cblxuICBzdGF0aWMgbWF4KC4uLmRhdGVUaW1lcykge1xuICAgIGlmICghZGF0ZVRpbWVzLmV2ZXJ5KERhdGVUaW1lLmlzRGF0ZVRpbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXCJtYXggcmVxdWlyZXMgYWxsIGFyZ3VtZW50cyBiZSBEYXRlVGltZXNcIik7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJlc3RCeShkYXRlVGltZXMsIGkgPT4gaS52YWx1ZU9mKCksIE1hdGgubWF4KTtcbiAgfSAvLyBNSVNDXG5cbiAgLyoqXG4gICAqIEV4cGxhaW4gaG93IGEgc3RyaW5nIHdvdWxkIGJlIHBhcnNlZCBieSBmcm9tRm9ybWF0KClcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSB0aGUgc3RyaW5nIHRvIHBhcnNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbXQgLSB0aGUgZm9ybWF0IHRoZSBzdHJpbmcgaXMgZXhwZWN0ZWQgdG8gYmUgaW4gKHNlZSBkZXNjcmlwdGlvbilcbiAgICogQHBhcmFtIHtPYmplY3R9IG9wdGlvbnMgLSBvcHRpb25zIHRha2VuIGJ5IGZyb21Gb3JtYXQoKVxuICAgKiBAcmV0dXJuIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgc3RhdGljIGZyb21Gb3JtYXRFeHBsYWluKHRleHQsIGZtdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3Qge1xuICAgICAgbG9jYWxlID0gbnVsbCxcbiAgICAgIG51bWJlcmluZ1N5c3RlbSA9IG51bGxcbiAgICB9ID0gb3B0aW9ucyxcbiAgICAgICAgICBsb2NhbGVUb1VzZSA9IExvY2FsZS5mcm9tT3B0cyh7XG4gICAgICBsb2NhbGUsXG4gICAgICBudW1iZXJpbmdTeXN0ZW0sXG4gICAgICBkZWZhdWx0VG9FTjogdHJ1ZVxuICAgIH0pO1xuICAgIHJldHVybiBleHBsYWluRnJvbVRva2Vucyhsb2NhbGVUb1VzZSwgdGV4dCwgZm10KTtcbiAgfVxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGZyb21Gb3JtYXRFeHBsYWluIGluc3RlYWRcbiAgICovXG5cblxuICBzdGF0aWMgZnJvbVN0cmluZ0V4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdEV4cGxhaW4odGV4dCwgZm10LCBvcHRpb25zKTtcbiAgfSAvLyBGT1JNQVQgUFJFU0VUU1xuXG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlIDEwLzE0LzE5ODNcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG5cblxuICBzdGF0aWMgZ2V0IERBVEVfU0hPUlQoKSB7XG4gICAgcmV0dXJuIERBVEVfU0hPUlQ7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdCAxNCwgMTk4MydcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG5cblxuICBzdGF0aWMgZ2V0IERBVEVfTUVEKCkge1xuICAgIHJldHVybiBEQVRFX01FRDtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnRnJpLCBPY3QgMTQsIDE5ODMnXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgc3RhdGljIGdldCBEQVRFX01FRF9XSVRIX1dFRUtEQVkoKSB7XG4gICAgcmV0dXJuIERBVEVfTUVEX1dJVEhfV0VFS0RBWTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnT2N0b2JlciAxNCwgMTk4MydcbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG5cblxuICBzdGF0aWMgZ2V0IERBVEVfRlVMTCgpIHtcbiAgICByZXR1cm4gREFURV9GVUxMO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdUdWVzZGF5LCBPY3RvYmVyIDE0LCAxOTgzJ1xuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cblxuXG4gIHN0YXRpYyBnZXQgREFURV9IVUdFKCkge1xuICAgIHJldHVybiBEQVRFX0hVR0U7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgc3RhdGljIGdldCBUSU1FX1NJTVBMRSgpIHtcbiAgICByZXR1cm4gVElNRV9TSU1QTEU7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgc3RhdGljIGdldCBUSU1FX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gVElNRV9XSVRIX1NFQ09ORFM7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzA5OjMwOjIzIEFNIEVEVCcuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cblxuXG4gIHN0YXRpYyBnZXQgVElNRV9XSVRIX1NIT1JUX09GRlNFVCgpIHtcbiAgICByZXR1cm4gVElNRV9XSVRIX1NIT1JUX09GRlNFVDtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgQU0gRWFzdGVybiBEYXlsaWdodCBUaW1lJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgc3RhdGljIGdldCBUSU1FX1dJVEhfTE9OR19PRkZTRVQoKSB7XG4gICAgcmV0dXJuIFRJTUVfV0lUSF9MT05HX09GRlNFVDtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzAnLCBhbHdheXMgMjQtaG91ci5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG5cblxuICBzdGF0aWMgZ2V0IFRJTUVfMjRfU0lNUExFKCkge1xuICAgIHJldHVybiBUSU1FXzI0X1NJTVBMRTtcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMnLCBhbHdheXMgMjQtaG91ci5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG5cblxuICBzdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9TRUNPTkRTKCkge1xuICAgIHJldHVybiBUSU1FXzI0X1dJVEhfU0VDT05EUztcbiAgfVxuICAvKipcbiAgICoge0BsaW5rIERhdGVUaW1lI3RvTG9jYWxlU3RyaW5nfSBmb3JtYXQgbGlrZSAnMDk6MzA6MjMgRURUJywgYWx3YXlzIDI0LWhvdXIuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgc3RhdGljIGdldCBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUKCkge1xuICAgIHJldHVybiBUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcwOTozMDoyMyBFYXN0ZXJuIERheWxpZ2h0IFRpbWUnLCBhbHdheXMgMjQtaG91ci5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG5cblxuICBzdGF0aWMgZ2V0IFRJTUVfMjRfV0lUSF9MT05HX09GRlNFVCgpIHtcbiAgICByZXR1cm4gVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICcxMC8xNC8xOTgzLCA5OjMwIEFNJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgc3RhdGljIGdldCBEQVRFVElNRV9TSE9SVCgpIHtcbiAgICByZXR1cm4gREFURVRJTUVfU0hPUlQ7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJzEwLzE0LzE5ODMsIDk6MzA6MzMgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG5cblxuICBzdGF0aWMgZ2V0IERBVEVUSU1FX1NIT1JUX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gREFURVRJTUVfU0hPUlRfV0lUSF9TRUNPTkRTO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3QgMTQsIDE5ODMsIDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG5cblxuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRCgpIHtcbiAgICByZXR1cm4gREFURVRJTUVfTUVEO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3QgMTQsIDE5ODMsIDk6MzA6MzMgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG5cblxuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIERBVEVUSU1FX01FRF9XSVRIX1NFQ09ORFM7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ0ZyaSwgMTQgT2N0IDE5ODMsIDk6MzAgQU0nLiBPbmx5IDEyLWhvdXIgaWYgdGhlIGxvY2FsZSBpcy5cbiAgICogQHR5cGUge09iamVjdH1cbiAgICovXG5cblxuICBzdGF0aWMgZ2V0IERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVkoKSB7XG4gICAgcmV0dXJuIERBVEVUSU1FX01FRF9XSVRIX1dFRUtEQVk7XG4gIH1cbiAgLyoqXG4gICAqIHtAbGluayBEYXRlVGltZSN0b0xvY2FsZVN0cmluZ30gZm9ybWF0IGxpa2UgJ09jdG9iZXIgMTQsIDE5ODMsIDk6MzAgQU0gRURUJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgc3RhdGljIGdldCBEQVRFVElNRV9GVUxMKCkge1xuICAgIHJldHVybiBEQVRFVElNRV9GVUxMO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdPY3RvYmVyIDE0LCAxOTgzLCA5OjMwOjMzIEFNIEVEVCcuIE9ubHkgMTItaG91ciBpZiB0aGUgbG9jYWxlIGlzLlxuICAgKiBAdHlwZSB7T2JqZWN0fVxuICAgKi9cblxuXG4gIHN0YXRpYyBnZXQgREFURVRJTUVfRlVMTF9XSVRIX1NFQ09ORFMoKSB7XG4gICAgcmV0dXJuIERBVEVUSU1FX0ZVTExfV0lUSF9TRUNPTkRTO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmlkYXksIE9jdG9iZXIgMTQsIDE5ODMsIDk6MzAgQU0gRWFzdGVybiBEYXlsaWdodCBUaW1lJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgc3RhdGljIGdldCBEQVRFVElNRV9IVUdFKCkge1xuICAgIHJldHVybiBEQVRFVElNRV9IVUdFO1xuICB9XG4gIC8qKlxuICAgKiB7QGxpbmsgRGF0ZVRpbWUjdG9Mb2NhbGVTdHJpbmd9IGZvcm1hdCBsaWtlICdGcmlkYXksIE9jdG9iZXIgMTQsIDE5ODMsIDk6MzA6MzMgQU0gRWFzdGVybiBEYXlsaWdodCBUaW1lJy4gT25seSAxMi1ob3VyIGlmIHRoZSBsb2NhbGUgaXMuXG4gICAqIEB0eXBlIHtPYmplY3R9XG4gICAqL1xuXG5cbiAgc3RhdGljIGdldCBEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUygpIHtcbiAgICByZXR1cm4gREFURVRJTUVfSFVHRV9XSVRIX1NFQ09ORFM7XG4gIH1cblxufVxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZyaWVuZGx5RGF0ZVRpbWUoZGF0ZVRpbWVpc2gpIHtcbiAgaWYgKERhdGVUaW1lLmlzRGF0ZVRpbWUoZGF0ZVRpbWVpc2gpKSB7XG4gICAgcmV0dXJuIGRhdGVUaW1laXNoO1xuICB9IGVsc2UgaWYgKGRhdGVUaW1laXNoICYmIGRhdGVUaW1laXNoLnZhbHVlT2YgJiYgaXNOdW1iZXIoZGF0ZVRpbWVpc2gudmFsdWVPZigpKSkge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tSlNEYXRlKGRhdGVUaW1laXNoKTtcbiAgfSBlbHNlIGlmIChkYXRlVGltZWlzaCAmJiB0eXBlb2YgZGF0ZVRpbWVpc2ggPT09IFwib2JqZWN0XCIpIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbU9iamVjdChkYXRlVGltZWlzaCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBVbmtub3duIGRhdGV0aW1lIGFyZ3VtZW50OiAke2RhdGVUaW1laXNofSwgb2YgdHlwZSAke3R5cGVvZiBkYXRlVGltZWlzaH1gKTtcbiAgfVxufVxuXG5jb25zdCBWRVJTSU9OID0gXCIyLjUuMlwiO1xuXG5leHBvcnRzLkRhdGVUaW1lID0gRGF0ZVRpbWU7XG5leHBvcnRzLkR1cmF0aW9uID0gRHVyYXRpb247XG5leHBvcnRzLkZpeGVkT2Zmc2V0Wm9uZSA9IEZpeGVkT2Zmc2V0Wm9uZTtcbmV4cG9ydHMuSUFOQVpvbmUgPSBJQU5BWm9uZTtcbmV4cG9ydHMuSW5mbyA9IEluZm87XG5leHBvcnRzLkludGVydmFsID0gSW50ZXJ2YWw7XG5leHBvcnRzLkludmFsaWRab25lID0gSW52YWxpZFpvbmU7XG5leHBvcnRzLlNldHRpbmdzID0gU2V0dGluZ3M7XG5leHBvcnRzLlN5c3RlbVpvbmUgPSBTeXN0ZW1ab25lO1xuZXhwb3J0cy5WRVJTSU9OID0gVkVSU0lPTjtcbmV4cG9ydHMuWm9uZSA9IFpvbmU7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1sdXhvbi5qcy5tYXBcbiIsImV4cG9ydCB2YXIgSE9PS1MgPSBbXG4gICAgXCJvbkNoYW5nZVwiLFxuICAgIFwib25DbG9zZVwiLFxuICAgIFwib25EYXlDcmVhdGVcIixcbiAgICBcIm9uRGVzdHJveVwiLFxuICAgIFwib25LZXlEb3duXCIsXG4gICAgXCJvbk1vbnRoQ2hhbmdlXCIsXG4gICAgXCJvbk9wZW5cIixcbiAgICBcIm9uUGFyc2VDb25maWdcIixcbiAgICBcIm9uUmVhZHlcIixcbiAgICBcIm9uVmFsdWVVcGRhdGVcIixcbiAgICBcIm9uWWVhckNoYW5nZVwiLFxuICAgIFwib25QcmVDYWxlbmRhclBvc2l0aW9uXCIsXG5dO1xuZXhwb3J0IHZhciBkZWZhdWx0cyA9IHtcbiAgICBfZGlzYWJsZTogW10sXG4gICAgYWxsb3dJbnB1dDogZmFsc2UsXG4gICAgYWxsb3dJbnZhbGlkUHJlbG9hZDogZmFsc2UsXG4gICAgYWx0Rm9ybWF0OiBcIkYgaiwgWVwiLFxuICAgIGFsdElucHV0OiBmYWxzZSxcbiAgICBhbHRJbnB1dENsYXNzOiBcImZvcm0tY29udHJvbCBpbnB1dFwiLFxuICAgIGFuaW1hdGU6IHR5cGVvZiB3aW5kb3cgPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgd2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUVcIikgPT09IC0xLFxuICAgIGFyaWFEYXRlRm9ybWF0OiBcIkYgaiwgWVwiLFxuICAgIGF1dG9GaWxsRGVmYXVsdFRpbWU6IHRydWUsXG4gICAgY2xpY2tPcGVuczogdHJ1ZSxcbiAgICBjbG9zZU9uU2VsZWN0OiB0cnVlLFxuICAgIGNvbmp1bmN0aW9uOiBcIiwgXCIsXG4gICAgZGF0ZUZvcm1hdDogXCJZLW0tZFwiLFxuICAgIGRlZmF1bHRIb3VyOiAxMixcbiAgICBkZWZhdWx0TWludXRlOiAwLFxuICAgIGRlZmF1bHRTZWNvbmRzOiAwLFxuICAgIGRpc2FibGU6IFtdLFxuICAgIGRpc2FibGVNb2JpbGU6IGZhbHNlLFxuICAgIGVuYWJsZVNlY29uZHM6IGZhbHNlLFxuICAgIGVuYWJsZVRpbWU6IGZhbHNlLFxuICAgIGVycm9ySGFuZGxlcjogZnVuY3Rpb24gKGVycikge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGNvbnNvbGUgIT09IFwidW5kZWZpbmVkXCIgJiYgY29uc29sZS53YXJuKGVycik7XG4gICAgfSxcbiAgICBnZXRXZWVrOiBmdW5jdGlvbiAoZ2l2ZW5EYXRlKSB7XG4gICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoZ2l2ZW5EYXRlLmdldFRpbWUoKSk7XG4gICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIDMgLSAoKGRhdGUuZ2V0RGF5KCkgKyA2KSAlIDcpKTtcbiAgICAgICAgdmFyIHdlZWsxID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcbiAgICAgICAgcmV0dXJuICgxICtcbiAgICAgICAgICAgIE1hdGgucm91bmQoKChkYXRlLmdldFRpbWUoKSAtIHdlZWsxLmdldFRpbWUoKSkgLyA4NjQwMDAwMCAtXG4gICAgICAgICAgICAgICAgMyArXG4gICAgICAgICAgICAgICAgKCh3ZWVrMS5nZXREYXkoKSArIDYpICUgNykpIC9cbiAgICAgICAgICAgICAgICA3KSk7XG4gICAgfSxcbiAgICBob3VySW5jcmVtZW50OiAxLFxuICAgIGlnbm9yZWRGb2N1c0VsZW1lbnRzOiBbXSxcbiAgICBpbmxpbmU6IGZhbHNlLFxuICAgIGxvY2FsZTogXCJkZWZhdWx0XCIsXG4gICAgbWludXRlSW5jcmVtZW50OiA1LFxuICAgIG1vZGU6IFwic2luZ2xlXCIsXG4gICAgbW9udGhTZWxlY3RvclR5cGU6IFwiZHJvcGRvd25cIixcbiAgICBuZXh0QXJyb3c6IFwiPHN2ZyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHZpZXdCb3g9JzAgMCAxNyAxNyc+PGc+PC9nPjxwYXRoIGQ9J00xMy4yMDcgOC40NzJsLTcuODU0IDcuODU0LTAuNzA3LTAuNzA3IDcuMTQ2LTcuMTQ2LTcuMTQ2LTcuMTQ4IDAuNzA3LTAuNzA3IDcuODU0IDcuODU0eicgLz48L3N2Zz5cIixcbiAgICBub0NhbGVuZGFyOiBmYWxzZSxcbiAgICBub3c6IG5ldyBEYXRlKCksXG4gICAgb25DaGFuZ2U6IFtdLFxuICAgIG9uQ2xvc2U6IFtdLFxuICAgIG9uRGF5Q3JlYXRlOiBbXSxcbiAgICBvbkRlc3Ryb3k6IFtdLFxuICAgIG9uS2V5RG93bjogW10sXG4gICAgb25Nb250aENoYW5nZTogW10sXG4gICAgb25PcGVuOiBbXSxcbiAgICBvblBhcnNlQ29uZmlnOiBbXSxcbiAgICBvblJlYWR5OiBbXSxcbiAgICBvblZhbHVlVXBkYXRlOiBbXSxcbiAgICBvblllYXJDaGFuZ2U6IFtdLFxuICAgIG9uUHJlQ2FsZW5kYXJQb3NpdGlvbjogW10sXG4gICAgcGx1Z2luczogW10sXG4gICAgcG9zaXRpb246IFwiYXV0b1wiLFxuICAgIHBvc2l0aW9uRWxlbWVudDogdW5kZWZpbmVkLFxuICAgIHByZXZBcnJvdzogXCI8c3ZnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgdmlld0JveD0nMCAwIDE3IDE3Jz48Zz48L2c+PHBhdGggZD0nTTUuMjA3IDguNDcxbDcuMTQ2IDcuMTQ3LTAuNzA3IDAuNzA3LTcuODUzLTcuODU0IDcuODU0LTcuODUzIDAuNzA3IDAuNzA3LTcuMTQ3IDcuMTQ2eicgLz48L3N2Zz5cIixcbiAgICBzaG9ydGhhbmRDdXJyZW50TW9udGg6IGZhbHNlLFxuICAgIHNob3dNb250aHM6IDEsXG4gICAgc3RhdGljOiBmYWxzZSxcbiAgICB0aW1lXzI0aHI6IGZhbHNlLFxuICAgIHdlZWtOdW1iZXJzOiBmYWxzZSxcbiAgICB3cmFwOiBmYWxzZSxcbn07XG4iLCJleHBvcnQgdmFyIGVuZ2xpc2ggPSB7XG4gICAgd2Vla2RheXM6IHtcbiAgICAgICAgc2hvcnRoYW5kOiBbXCJTdW5cIiwgXCJNb25cIiwgXCJUdWVcIiwgXCJXZWRcIiwgXCJUaHVcIiwgXCJGcmlcIiwgXCJTYXRcIl0sXG4gICAgICAgIGxvbmdoYW5kOiBbXG4gICAgICAgICAgICBcIlN1bmRheVwiLFxuICAgICAgICAgICAgXCJNb25kYXlcIixcbiAgICAgICAgICAgIFwiVHVlc2RheVwiLFxuICAgICAgICAgICAgXCJXZWRuZXNkYXlcIixcbiAgICAgICAgICAgIFwiVGh1cnNkYXlcIixcbiAgICAgICAgICAgIFwiRnJpZGF5XCIsXG4gICAgICAgICAgICBcIlNhdHVyZGF5XCIsXG4gICAgICAgIF0sXG4gICAgfSxcbiAgICBtb250aHM6IHtcbiAgICAgICAgc2hvcnRoYW5kOiBbXG4gICAgICAgICAgICBcIkphblwiLFxuICAgICAgICAgICAgXCJGZWJcIixcbiAgICAgICAgICAgIFwiTWFyXCIsXG4gICAgICAgICAgICBcIkFwclwiLFxuICAgICAgICAgICAgXCJNYXlcIixcbiAgICAgICAgICAgIFwiSnVuXCIsXG4gICAgICAgICAgICBcIkp1bFwiLFxuICAgICAgICAgICAgXCJBdWdcIixcbiAgICAgICAgICAgIFwiU2VwXCIsXG4gICAgICAgICAgICBcIk9jdFwiLFxuICAgICAgICAgICAgXCJOb3ZcIixcbiAgICAgICAgICAgIFwiRGVjXCIsXG4gICAgICAgIF0sXG4gICAgICAgIGxvbmdoYW5kOiBbXG4gICAgICAgICAgICBcIkphbnVhcnlcIixcbiAgICAgICAgICAgIFwiRmVicnVhcnlcIixcbiAgICAgICAgICAgIFwiTWFyY2hcIixcbiAgICAgICAgICAgIFwiQXByaWxcIixcbiAgICAgICAgICAgIFwiTWF5XCIsXG4gICAgICAgICAgICBcIkp1bmVcIixcbiAgICAgICAgICAgIFwiSnVseVwiLFxuICAgICAgICAgICAgXCJBdWd1c3RcIixcbiAgICAgICAgICAgIFwiU2VwdGVtYmVyXCIsXG4gICAgICAgICAgICBcIk9jdG9iZXJcIixcbiAgICAgICAgICAgIFwiTm92ZW1iZXJcIixcbiAgICAgICAgICAgIFwiRGVjZW1iZXJcIixcbiAgICAgICAgXSxcbiAgICB9LFxuICAgIGRheXNJbk1vbnRoOiBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV0sXG4gICAgZmlyc3REYXlPZldlZWs6IDAsXG4gICAgb3JkaW5hbDogZnVuY3Rpb24gKG50aCkge1xuICAgICAgICB2YXIgcyA9IG50aCAlIDEwMDtcbiAgICAgICAgaWYgKHMgPiAzICYmIHMgPCAyMSlcbiAgICAgICAgICAgIHJldHVybiBcInRoXCI7XG4gICAgICAgIHN3aXRjaCAocyAlIDEwKSB7XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwic3RcIjtcbiAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJuZFwiO1xuICAgICAgICAgICAgY2FzZSAzOlxuICAgICAgICAgICAgICAgIHJldHVybiBcInJkXCI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBcInRoXCI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIHJhbmdlU2VwYXJhdG9yOiBcIiB0byBcIixcbiAgICB3ZWVrQWJicmV2aWF0aW9uOiBcIldrXCIsXG4gICAgc2Nyb2xsVGl0bGU6IFwiU2Nyb2xsIHRvIGluY3JlbWVudFwiLFxuICAgIHRvZ2dsZVRpdGxlOiBcIkNsaWNrIHRvIHRvZ2dsZVwiLFxuICAgIGFtUE06IFtcIkFNXCIsIFwiUE1cIl0sXG4gICAgeWVhckFyaWFMYWJlbDogXCJZZWFyXCIsXG4gICAgbW9udGhBcmlhTGFiZWw6IFwiTW9udGhcIixcbiAgICBob3VyQXJpYUxhYmVsOiBcIkhvdXJcIixcbiAgICBtaW51dGVBcmlhTGFiZWw6IFwiTWludXRlXCIsXG4gICAgdGltZV8yNGhyOiBmYWxzZSxcbn07XG5leHBvcnQgZGVmYXVsdCBlbmdsaXNoO1xuIiwiZXhwb3J0IHZhciBwYWQgPSBmdW5jdGlvbiAobnVtYmVyLCBsZW5ndGgpIHtcbiAgICBpZiAobGVuZ3RoID09PSB2b2lkIDApIHsgbGVuZ3RoID0gMjsgfVxuICAgIHJldHVybiAoXCIwMDBcIiArIG51bWJlcikuc2xpY2UobGVuZ3RoICogLTEpO1xufTtcbmV4cG9ydCB2YXIgaW50ID0gZnVuY3Rpb24gKGJvb2wpIHsgcmV0dXJuIChib29sID09PSB0cnVlID8gMSA6IDApOyB9O1xuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlKGZuLCB3YWl0KSB7XG4gICAgdmFyIHQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIF90aGlzID0gdGhpcztcbiAgICAgICAgdmFyIGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIGNsZWFyVGltZW91dCh0KTtcbiAgICAgICAgdCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gZm4uYXBwbHkoX3RoaXMsIGFyZ3MpOyB9LCB3YWl0KTtcbiAgICB9O1xufVxuZXhwb3J0IHZhciBhcnJheWlmeSA9IGZ1bmN0aW9uIChvYmopIHtcbiAgICByZXR1cm4gb2JqIGluc3RhbmNlb2YgQXJyYXkgPyBvYmogOiBbb2JqXTtcbn07XG4iLCJleHBvcnQgZnVuY3Rpb24gdG9nZ2xlQ2xhc3MoZWxlbSwgY2xhc3NOYW1lLCBib29sKSB7XG4gICAgaWYgKGJvb2wgPT09IHRydWUpXG4gICAgICAgIHJldHVybiBlbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZywgY2xhc3NOYW1lLCBjb250ZW50KSB7XG4gICAgdmFyIGUgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xuICAgIGNsYXNzTmFtZSA9IGNsYXNzTmFtZSB8fCBcIlwiO1xuICAgIGNvbnRlbnQgPSBjb250ZW50IHx8IFwiXCI7XG4gICAgZS5jbGFzc05hbWUgPSBjbGFzc05hbWU7XG4gICAgaWYgKGNvbnRlbnQgIT09IHVuZGVmaW5lZClcbiAgICAgICAgZS50ZXh0Q29udGVudCA9IGNvbnRlbnQ7XG4gICAgcmV0dXJuIGU7XG59XG5leHBvcnQgZnVuY3Rpb24gY2xlYXJOb2RlKG5vZGUpIHtcbiAgICB3aGlsZSAobm9kZS5maXJzdENoaWxkKVxuICAgICAgICBub2RlLnJlbW92ZUNoaWxkKG5vZGUuZmlyc3RDaGlsZCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZmluZFBhcmVudChub2RlLCBjb25kaXRpb24pIHtcbiAgICBpZiAoY29uZGl0aW9uKG5vZGUpKVxuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICBlbHNlIGlmIChub2RlLnBhcmVudE5vZGUpXG4gICAgICAgIHJldHVybiBmaW5kUGFyZW50KG5vZGUucGFyZW50Tm9kZSwgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU51bWJlcklucHV0KGlucHV0Q2xhc3NOYW1lLCBvcHRzKSB7XG4gICAgdmFyIHdyYXBwZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwibnVtSW5wdXRXcmFwcGVyXCIpLCBudW1JbnB1dCA9IGNyZWF0ZUVsZW1lbnQoXCJpbnB1dFwiLCBcIm51bUlucHV0IFwiICsgaW5wdXRDbGFzc05hbWUpLCBhcnJvd1VwID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJhcnJvd1VwXCIpLCBhcnJvd0Rvd24gPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImFycm93RG93blwiKTtcbiAgICBpZiAobmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKFwiTVNJRSA5LjBcIikgPT09IC0xKSB7XG4gICAgICAgIG51bUlucHV0LnR5cGUgPSBcIm51bWJlclwiO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgbnVtSW5wdXQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICBudW1JbnB1dC5wYXR0ZXJuID0gXCJcXFxcZCpcIjtcbiAgICB9XG4gICAgaWYgKG9wdHMgIT09IHVuZGVmaW5lZClcbiAgICAgICAgZm9yICh2YXIga2V5IGluIG9wdHMpXG4gICAgICAgICAgICBudW1JbnB1dC5zZXRBdHRyaWJ1dGUoa2V5LCBvcHRzW2tleV0pO1xuICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQobnVtSW5wdXQpO1xuICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoYXJyb3dVcCk7XG4gICAgd3JhcHBlci5hcHBlbmRDaGlsZChhcnJvd0Rvd24pO1xuICAgIHJldHVybiB3cmFwcGVyO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEV2ZW50VGFyZ2V0KGV2ZW50KSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBldmVudC5jb21wb3NlZFBhdGggPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdmFyIHBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTtcbiAgICAgICAgICAgIHJldHVybiBwYXRoWzBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC50YXJnZXQ7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikge1xuICAgICAgICByZXR1cm4gZXZlbnQudGFyZ2V0O1xuICAgIH1cbn1cbiIsImltcG9ydCB7IGludCwgcGFkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG52YXIgZG9Ob3RoaW5nID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdW5kZWZpbmVkOyB9O1xuZXhwb3J0IHZhciBtb250aFRvU3RyID0gZnVuY3Rpb24gKG1vbnRoTnVtYmVyLCBzaG9ydGhhbmQsIGxvY2FsZSkgeyByZXR1cm4gbG9jYWxlLm1vbnRoc1tzaG9ydGhhbmQgPyBcInNob3J0aGFuZFwiIDogXCJsb25naGFuZFwiXVttb250aE51bWJlcl07IH07XG5leHBvcnQgdmFyIHJldkZvcm1hdCA9IHtcbiAgICBEOiBkb05vdGhpbmcsXG4gICAgRjogZnVuY3Rpb24gKGRhdGVPYmosIG1vbnRoTmFtZSwgbG9jYWxlKSB7XG4gICAgICAgIGRhdGVPYmouc2V0TW9udGgobG9jYWxlLm1vbnRocy5sb25naGFuZC5pbmRleE9mKG1vbnRoTmFtZSkpO1xuICAgIH0sXG4gICAgRzogZnVuY3Rpb24gKGRhdGVPYmosIGhvdXIpIHtcbiAgICAgICAgZGF0ZU9iai5zZXRIb3VycygoZGF0ZU9iai5nZXRIb3VycygpID49IDEyID8gMTIgOiAwKSArIHBhcnNlRmxvYXQoaG91cikpO1xuICAgIH0sXG4gICAgSDogZnVuY3Rpb24gKGRhdGVPYmosIGhvdXIpIHtcbiAgICAgICAgZGF0ZU9iai5zZXRIb3VycyhwYXJzZUZsb2F0KGhvdXIpKTtcbiAgICB9LFxuICAgIEo6IGZ1bmN0aW9uIChkYXRlT2JqLCBkYXkpIHtcbiAgICAgICAgZGF0ZU9iai5zZXREYXRlKHBhcnNlRmxvYXQoZGF5KSk7XG4gICAgfSxcbiAgICBLOiBmdW5jdGlvbiAoZGF0ZU9iaiwgYW1QTSwgbG9jYWxlKSB7XG4gICAgICAgIGRhdGVPYmouc2V0SG91cnMoKGRhdGVPYmouZ2V0SG91cnMoKSAlIDEyKSArXG4gICAgICAgICAgICAxMiAqIGludChuZXcgUmVnRXhwKGxvY2FsZS5hbVBNWzFdLCBcImlcIikudGVzdChhbVBNKSkpO1xuICAgIH0sXG4gICAgTTogZnVuY3Rpb24gKGRhdGVPYmosIHNob3J0TW9udGgsIGxvY2FsZSkge1xuICAgICAgICBkYXRlT2JqLnNldE1vbnRoKGxvY2FsZS5tb250aHMuc2hvcnRoYW5kLmluZGV4T2Yoc2hvcnRNb250aCkpO1xuICAgIH0sXG4gICAgUzogZnVuY3Rpb24gKGRhdGVPYmosIHNlY29uZHMpIHtcbiAgICAgICAgZGF0ZU9iai5zZXRTZWNvbmRzKHBhcnNlRmxvYXQoc2Vjb25kcykpO1xuICAgIH0sXG4gICAgVTogZnVuY3Rpb24gKF8sIHVuaXhTZWNvbmRzKSB7IHJldHVybiBuZXcgRGF0ZShwYXJzZUZsb2F0KHVuaXhTZWNvbmRzKSAqIDEwMDApOyB9LFxuICAgIFc6IGZ1bmN0aW9uIChkYXRlT2JqLCB3ZWVrTnVtLCBsb2NhbGUpIHtcbiAgICAgICAgdmFyIHdlZWtOdW1iZXIgPSBwYXJzZUludCh3ZWVrTnVtKTtcbiAgICAgICAgdmFyIGRhdGUgPSBuZXcgRGF0ZShkYXRlT2JqLmdldEZ1bGxZZWFyKCksIDAsIDIgKyAod2Vla051bWJlciAtIDEpICogNywgMCwgMCwgMCwgMCk7XG4gICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSAtIGRhdGUuZ2V0RGF5KCkgKyBsb2NhbGUuZmlyc3REYXlPZldlZWspO1xuICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICB9LFxuICAgIFk6IGZ1bmN0aW9uIChkYXRlT2JqLCB5ZWFyKSB7XG4gICAgICAgIGRhdGVPYmouc2V0RnVsbFllYXIocGFyc2VGbG9hdCh5ZWFyKSk7XG4gICAgfSxcbiAgICBaOiBmdW5jdGlvbiAoXywgSVNPRGF0ZSkgeyByZXR1cm4gbmV3IERhdGUoSVNPRGF0ZSk7IH0sXG4gICAgZDogZnVuY3Rpb24gKGRhdGVPYmosIGRheSkge1xuICAgICAgICBkYXRlT2JqLnNldERhdGUocGFyc2VGbG9hdChkYXkpKTtcbiAgICB9LFxuICAgIGg6IGZ1bmN0aW9uIChkYXRlT2JqLCBob3VyKSB7XG4gICAgICAgIGRhdGVPYmouc2V0SG91cnMoKGRhdGVPYmouZ2V0SG91cnMoKSA+PSAxMiA/IDEyIDogMCkgKyBwYXJzZUZsb2F0KGhvdXIpKTtcbiAgICB9LFxuICAgIGk6IGZ1bmN0aW9uIChkYXRlT2JqLCBtaW51dGVzKSB7XG4gICAgICAgIGRhdGVPYmouc2V0TWludXRlcyhwYXJzZUZsb2F0KG1pbnV0ZXMpKTtcbiAgICB9LFxuICAgIGo6IGZ1bmN0aW9uIChkYXRlT2JqLCBkYXkpIHtcbiAgICAgICAgZGF0ZU9iai5zZXREYXRlKHBhcnNlRmxvYXQoZGF5KSk7XG4gICAgfSxcbiAgICBsOiBkb05vdGhpbmcsXG4gICAgbTogZnVuY3Rpb24gKGRhdGVPYmosIG1vbnRoKSB7XG4gICAgICAgIGRhdGVPYmouc2V0TW9udGgocGFyc2VGbG9hdChtb250aCkgLSAxKTtcbiAgICB9LFxuICAgIG46IGZ1bmN0aW9uIChkYXRlT2JqLCBtb250aCkge1xuICAgICAgICBkYXRlT2JqLnNldE1vbnRoKHBhcnNlRmxvYXQobW9udGgpIC0gMSk7XG4gICAgfSxcbiAgICBzOiBmdW5jdGlvbiAoZGF0ZU9iaiwgc2Vjb25kcykge1xuICAgICAgICBkYXRlT2JqLnNldFNlY29uZHMocGFyc2VGbG9hdChzZWNvbmRzKSk7XG4gICAgfSxcbiAgICB1OiBmdW5jdGlvbiAoXywgdW5peE1pbGxTZWNvbmRzKSB7XG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShwYXJzZUZsb2F0KHVuaXhNaWxsU2Vjb25kcykpO1xuICAgIH0sXG4gICAgdzogZG9Ob3RoaW5nLFxuICAgIHk6IGZ1bmN0aW9uIChkYXRlT2JqLCB5ZWFyKSB7XG4gICAgICAgIGRhdGVPYmouc2V0RnVsbFllYXIoMjAwMCArIHBhcnNlRmxvYXQoeWVhcikpO1xuICAgIH0sXG59O1xuZXhwb3J0IHZhciB0b2tlblJlZ2V4ID0ge1xuICAgIEQ6IFwiXCIsXG4gICAgRjogXCJcIixcbiAgICBHOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIEg6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgSjogXCIoXFxcXGRcXFxcZHxcXFxcZClcXFxcdytcIixcbiAgICBLOiBcIlwiLFxuICAgIE06IFwiXCIsXG4gICAgUzogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICBVOiBcIiguKylcIixcbiAgICBXOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIFk6IFwiKFxcXFxkezR9KVwiLFxuICAgIFo6IFwiKC4rKVwiLFxuICAgIGQ6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgaDogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICBpOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIGo6IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgbDogXCJcIixcbiAgICBtOiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIG46IFwiKFxcXFxkXFxcXGR8XFxcXGQpXCIsXG4gICAgczogXCIoXFxcXGRcXFxcZHxcXFxcZClcIixcbiAgICB1OiBcIiguKylcIixcbiAgICB3OiBcIihcXFxcZFxcXFxkfFxcXFxkKVwiLFxuICAgIHk6IFwiKFxcXFxkezJ9KVwiLFxufTtcbmV4cG9ydCB2YXIgZm9ybWF0cyA9IHtcbiAgICBaOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS50b0lTT1N0cmluZygpOyB9LFxuICAgIEQ6IGZ1bmN0aW9uIChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGxvY2FsZS53ZWVrZGF5cy5zaG9ydGhhbmRbZm9ybWF0cy53KGRhdGUsIGxvY2FsZSwgb3B0aW9ucyldO1xuICAgIH0sXG4gICAgRjogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbW9udGhUb1N0cihmb3JtYXRzLm4oZGF0ZSwgbG9jYWxlLCBvcHRpb25zKSAtIDEsIGZhbHNlLCBsb2NhbGUpO1xuICAgIH0sXG4gICAgRzogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSwgb3B0aW9ucykge1xuICAgICAgICByZXR1cm4gcGFkKGZvcm1hdHMuaChkYXRlLCBsb2NhbGUsIG9wdGlvbnMpKTtcbiAgICB9LFxuICAgIEg6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBwYWQoZGF0ZS5nZXRIb3VycygpKTsgfSxcbiAgICBKOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUub3JkaW5hbCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IGRhdGUuZ2V0RGF0ZSgpICsgbG9jYWxlLm9yZGluYWwoZGF0ZS5nZXREYXRlKCkpXG4gICAgICAgICAgICA6IGRhdGUuZ2V0RGF0ZSgpO1xuICAgIH0sXG4gICAgSzogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkgeyByZXR1cm4gbG9jYWxlLmFtUE1baW50KGRhdGUuZ2V0SG91cnMoKSA+IDExKV07IH0sXG4gICAgTTogZnVuY3Rpb24gKGRhdGUsIGxvY2FsZSkge1xuICAgICAgICByZXR1cm4gbW9udGhUb1N0cihkYXRlLmdldE1vbnRoKCksIHRydWUsIGxvY2FsZSk7XG4gICAgfSxcbiAgICBTOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0U2Vjb25kcygpKTsgfSxcbiAgICBVOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRUaW1lKCkgLyAxMDAwOyB9LFxuICAgIFc6IGZ1bmN0aW9uIChkYXRlLCBfLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBvcHRpb25zLmdldFdlZWsoZGF0ZSk7XG4gICAgfSxcbiAgICBZOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0RnVsbFllYXIoKSwgNCk7IH0sXG4gICAgZDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHBhZChkYXRlLmdldERhdGUoKSk7IH0sXG4gICAgaDogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIChkYXRlLmdldEhvdXJzKCkgJSAxMiA/IGRhdGUuZ2V0SG91cnMoKSAlIDEyIDogMTIpOyB9LFxuICAgIGk6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBwYWQoZGF0ZS5nZXRNaW51dGVzKCkpOyB9LFxuICAgIGo6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldERhdGUoKTsgfSxcbiAgICBsOiBmdW5jdGlvbiAoZGF0ZSwgbG9jYWxlKSB7XG4gICAgICAgIHJldHVybiBsb2NhbGUud2Vla2RheXMubG9uZ2hhbmRbZGF0ZS5nZXREYXkoKV07XG4gICAgfSxcbiAgICBtOiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gcGFkKGRhdGUuZ2V0TW9udGgoKSArIDEpOyB9LFxuICAgIG46IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldE1vbnRoKCkgKyAxOyB9LFxuICAgIHM6IGZ1bmN0aW9uIChkYXRlKSB7IHJldHVybiBkYXRlLmdldFNlY29uZHMoKTsgfSxcbiAgICB1OiBmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gZGF0ZS5nZXRUaW1lKCk7IH0sXG4gICAgdzogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIGRhdGUuZ2V0RGF5KCk7IH0sXG4gICAgeTogZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIFN0cmluZyhkYXRlLmdldEZ1bGxZZWFyKCkpLnN1YnN0cmluZygyKTsgfSxcbn07XG4iLCJpbXBvcnQgeyB0b2tlblJlZ2V4LCByZXZGb3JtYXQsIGZvcm1hdHMsIH0gZnJvbSBcIi4vZm9ybWF0dGluZ1wiO1xuaW1wb3J0IHsgZGVmYXVsdHMgfSBmcm9tIFwiLi4vdHlwZXMvb3B0aW9uc1wiO1xuaW1wb3J0IHsgZW5nbGlzaCB9IGZyb20gXCIuLi9sMTBuL2RlZmF1bHRcIjtcbmV4cG9ydCB2YXIgY3JlYXRlRGF0ZUZvcm1hdHRlciA9IGZ1bmN0aW9uIChfYSkge1xuICAgIHZhciBfYiA9IF9hLmNvbmZpZywgY29uZmlnID0gX2IgPT09IHZvaWQgMCA/IGRlZmF1bHRzIDogX2IsIF9jID0gX2EubDEwbiwgbDEwbiA9IF9jID09PSB2b2lkIDAgPyBlbmdsaXNoIDogX2MsIF9kID0gX2EuaXNNb2JpbGUsIGlzTW9iaWxlID0gX2QgPT09IHZvaWQgMCA/IGZhbHNlIDogX2Q7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlT2JqLCBmcm10LCBvdmVycmlkZUxvY2FsZSkge1xuICAgICAgICB2YXIgbG9jYWxlID0gb3ZlcnJpZGVMb2NhbGUgfHwgbDEwbjtcbiAgICAgICAgaWYgKGNvbmZpZy5mb3JtYXREYXRlICE9PSB1bmRlZmluZWQgJiYgIWlzTW9iaWxlKSB7XG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLmZvcm1hdERhdGUoZGF0ZU9iaiwgZnJtdCwgbG9jYWxlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnJtdFxuICAgICAgICAgICAgLnNwbGl0KFwiXCIpXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChjLCBpLCBhcnIpIHtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXRzW2NdICYmIGFycltpIC0gMV0gIT09IFwiXFxcXFwiXG4gICAgICAgICAgICAgICAgPyBmb3JtYXRzW2NdKGRhdGVPYmosIGxvY2FsZSwgY29uZmlnKVxuICAgICAgICAgICAgICAgIDogYyAhPT0gXCJcXFxcXCJcbiAgICAgICAgICAgICAgICAgICAgPyBjXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKFwiXCIpO1xuICAgIH07XG59O1xuZXhwb3J0IHZhciBjcmVhdGVEYXRlUGFyc2VyID0gZnVuY3Rpb24gKF9hKSB7XG4gICAgdmFyIF9iID0gX2EuY29uZmlnLCBjb25maWcgPSBfYiA9PT0gdm9pZCAwID8gZGVmYXVsdHMgOiBfYiwgX2MgPSBfYS5sMTBuLCBsMTBuID0gX2MgPT09IHZvaWQgMCA/IGVuZ2xpc2ggOiBfYztcbiAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIGdpdmVuRm9ybWF0LCB0aW1lbGVzcywgY3VzdG9tTG9jYWxlKSB7XG4gICAgICAgIGlmIChkYXRlICE9PSAwICYmICFkYXRlKVxuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGxvY2FsZSA9IGN1c3RvbUxvY2FsZSB8fCBsMTBuO1xuICAgICAgICB2YXIgcGFyc2VkRGF0ZTtcbiAgICAgICAgdmFyIGRhdGVPcmlnID0gZGF0ZTtcbiAgICAgICAgaWYgKGRhdGUgaW5zdGFuY2VvZiBEYXRlKVxuICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpKTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGRhdGUgIT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICAgIGRhdGUudG9GaXhlZCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICBlbHNlIGlmICh0eXBlb2YgZGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgdmFyIGZvcm1hdCA9IGdpdmVuRm9ybWF0IHx8IChjb25maWcgfHwgZGVmYXVsdHMpLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICB2YXIgZGF0ZXN0ciA9IFN0cmluZyhkYXRlKS50cmltKCk7XG4gICAgICAgICAgICBpZiAoZGF0ZXN0ciA9PT0gXCJ0b2RheVwiKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgdGltZWxlc3MgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlnICYmIGNvbmZpZy5wYXJzZURhdGUpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gY29uZmlnLnBhcnNlRGF0ZShkYXRlLCBmb3JtYXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoL1okLy50ZXN0KGRhdGVzdHIpIHx8XG4gICAgICAgICAgICAgICAgL0dNVCQvLnRlc3QoZGF0ZXN0cikpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgbWF0Y2hlZCA9IHZvaWQgMCwgb3BzID0gW107XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIG1hdGNoSW5kZXggPSAwLCByZWdleFN0ciA9IFwiXCI7IGkgPCBmb3JtYXQubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHRva2VuID0gZm9ybWF0W2ldO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXNCYWNrU2xhc2ggPSB0b2tlbiA9PT0gXCJcXFxcXCI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlc2NhcGVkID0gZm9ybWF0W2kgLSAxXSA9PT0gXCJcXFxcXCIgfHwgaXNCYWNrU2xhc2g7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0b2tlblJlZ2V4W3Rva2VuXSAmJiAhZXNjYXBlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVnZXhTdHIgKz0gdG9rZW5SZWdleFt0b2tlbl07XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbWF0Y2ggPSBuZXcgUmVnRXhwKHJlZ2V4U3RyKS5leGVjKGRhdGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hdGNoICYmIChtYXRjaGVkID0gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHNbdG9rZW4gIT09IFwiWVwiID8gXCJwdXNoXCIgOiBcInVuc2hpZnRcIl0oe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbjogcmV2Rm9ybWF0W3Rva2VuXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsOiBtYXRjaFsrK21hdGNoSW5kZXhdLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc0JhY2tTbGFzaClcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2V4U3RyICs9IFwiLlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJzZWREYXRlID1cbiAgICAgICAgICAgICAgICAgICAgIWNvbmZpZyB8fCAhY29uZmlnLm5vQ2FsZW5kYXJcbiAgICAgICAgICAgICAgICAgICAgICAgID8gbmV3IERhdGUobmV3IERhdGUoKS5nZXRGdWxsWWVhcigpLCAwLCAxLCAwLCAwLCAwLCAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBuZXcgRGF0ZShuZXcgRGF0ZSgpLnNldEhvdXJzKDAsIDAsIDAsIDApKTtcbiAgICAgICAgICAgICAgICBvcHMuZm9yRWFjaChmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZuID0gX2EuZm4sIHZhbCA9IF9hLnZhbDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwYXJzZWREYXRlID0gZm4ocGFyc2VkRGF0ZSwgdmFsLCBsb2NhbGUpIHx8IHBhcnNlZERhdGUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHBhcnNlZERhdGUgPSBtYXRjaGVkID8gcGFyc2VkRGF0ZSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIShwYXJzZWREYXRlIGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSkge1xuICAgICAgICAgICAgY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJJbnZhbGlkIGRhdGUgcHJvdmlkZWQ6IFwiICsgZGF0ZU9yaWcpKTtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRpbWVsZXNzID09PSB0cnVlKVxuICAgICAgICAgICAgcGFyc2VkRGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcbiAgICAgICAgcmV0dXJuIHBhcnNlZERhdGU7XG4gICAgfTtcbn07XG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZURhdGVzKGRhdGUxLCBkYXRlMiwgdGltZWxlc3MpIHtcbiAgICBpZiAodGltZWxlc3MgPT09IHZvaWQgMCkgeyB0aW1lbGVzcyA9IHRydWU7IH1cbiAgICBpZiAodGltZWxlc3MgIT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiAobmV3IERhdGUoZGF0ZTEuZ2V0VGltZSgpKS5zZXRIb3VycygwLCAwLCAwLCAwKSAtXG4gICAgICAgICAgICBuZXcgRGF0ZShkYXRlMi5nZXRUaW1lKCkpLnNldEhvdXJzKDAsIDAsIDAsIDApKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGUxLmdldFRpbWUoKSAtIGRhdGUyLmdldFRpbWUoKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlVGltZXMoZGF0ZTEsIGRhdGUyKSB7XG4gICAgcmV0dXJuICgzNjAwICogKGRhdGUxLmdldEhvdXJzKCkgLSBkYXRlMi5nZXRIb3VycygpKSArXG4gICAgICAgIDYwICogKGRhdGUxLmdldE1pbnV0ZXMoKSAtIGRhdGUyLmdldE1pbnV0ZXMoKSkgK1xuICAgICAgICBkYXRlMS5nZXRTZWNvbmRzKCkgLVxuICAgICAgICBkYXRlMi5nZXRTZWNvbmRzKCkpO1xufVxuZXhwb3J0IHZhciBpc0JldHdlZW4gPSBmdW5jdGlvbiAodHMsIHRzMSwgdHMyKSB7XG4gICAgcmV0dXJuIHRzID4gTWF0aC5taW4odHMxLCB0czIpICYmIHRzIDwgTWF0aC5tYXgodHMxLCB0czIpO1xufTtcbmV4cG9ydCB2YXIgY2FsY3VsYXRlU2Vjb25kc1NpbmNlTWlkbmlnaHQgPSBmdW5jdGlvbiAoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpIHtcbiAgICByZXR1cm4gaG91cnMgKiAzNjAwICsgbWludXRlcyAqIDYwICsgc2Vjb25kcztcbn07XG5leHBvcnQgdmFyIHBhcnNlU2Vjb25kcyA9IGZ1bmN0aW9uIChzZWNvbmRzU2luY2VNaWRuaWdodCkge1xuICAgIHZhciBob3VycyA9IE1hdGguZmxvb3Ioc2Vjb25kc1NpbmNlTWlkbmlnaHQgLyAzNjAwKSwgbWludXRlcyA9IChzZWNvbmRzU2luY2VNaWRuaWdodCAtIGhvdXJzICogMzYwMCkgLyA2MDtcbiAgICByZXR1cm4gW2hvdXJzLCBtaW51dGVzLCBzZWNvbmRzU2luY2VNaWRuaWdodCAtIGhvdXJzICogMzYwMCAtIG1pbnV0ZXMgKiA2MF07XG59O1xuZXhwb3J0IHZhciBkdXJhdGlvbiA9IHtcbiAgICBEQVk6IDg2NDAwMDAwLFxufTtcbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0SG91cnMoY29uZmlnKSB7XG4gICAgdmFyIGhvdXJzID0gY29uZmlnLmRlZmF1bHRIb3VyO1xuICAgIHZhciBtaW51dGVzID0gY29uZmlnLmRlZmF1bHRNaW51dGU7XG4gICAgdmFyIHNlY29uZHMgPSBjb25maWcuZGVmYXVsdFNlY29uZHM7XG4gICAgaWYgKGNvbmZpZy5taW5EYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG1pbkhvdXIgPSBjb25maWcubWluRGF0ZS5nZXRIb3VycygpO1xuICAgICAgICB2YXIgbWluTWludXRlcyA9IGNvbmZpZy5taW5EYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgdmFyIG1pblNlY29uZHMgPSBjb25maWcubWluRGF0ZS5nZXRTZWNvbmRzKCk7XG4gICAgICAgIGlmIChob3VycyA8IG1pbkhvdXIpIHtcbiAgICAgICAgICAgIGhvdXJzID0gbWluSG91cjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaG91cnMgPT09IG1pbkhvdXIgJiYgbWludXRlcyA8IG1pbk1pbnV0ZXMpIHtcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBtaW5NaW51dGVzO1xuICAgICAgICB9XG4gICAgICAgIGlmIChob3VycyA9PT0gbWluSG91ciAmJiBtaW51dGVzID09PSBtaW5NaW51dGVzICYmIHNlY29uZHMgPCBtaW5TZWNvbmRzKVxuICAgICAgICAgICAgc2Vjb25kcyA9IGNvbmZpZy5taW5EYXRlLmdldFNlY29uZHMoKTtcbiAgICB9XG4gICAgaWYgKGNvbmZpZy5tYXhEYXRlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFyIG1heEhyID0gY29uZmlnLm1heERhdGUuZ2V0SG91cnMoKTtcbiAgICAgICAgdmFyIG1heE1pbnV0ZXMgPSBjb25maWcubWF4RGF0ZS5nZXRNaW51dGVzKCk7XG4gICAgICAgIGhvdXJzID0gTWF0aC5taW4oaG91cnMsIG1heEhyKTtcbiAgICAgICAgaWYgKGhvdXJzID09PSBtYXhIcilcbiAgICAgICAgICAgIG1pbnV0ZXMgPSBNYXRoLm1pbihtYXhNaW51dGVzLCBtaW51dGVzKTtcbiAgICAgICAgaWYgKGhvdXJzID09PSBtYXhIciAmJiBtaW51dGVzID09PSBtYXhNaW51dGVzKVxuICAgICAgICAgICAgc2Vjb25kcyA9IGNvbmZpZy5tYXhEYXRlLmdldFNlY29uZHMoKTtcbiAgICB9XG4gICAgcmV0dXJuIHsgaG91cnM6IGhvdXJzLCBtaW51dGVzOiBtaW51dGVzLCBzZWNvbmRzOiBzZWNvbmRzIH07XG59XG4iLCJ2YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fc3ByZWFkQXJyYXlzID0gKHRoaXMgJiYgdGhpcy5fX3NwcmVhZEFycmF5cykgfHwgZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcbiAgICByZXR1cm4gcjtcbn07XG5pbXBvcnQgeyBkZWZhdWx0cyBhcyBkZWZhdWx0T3B0aW9ucywgSE9PS1MsIH0gZnJvbSBcIi4vdHlwZXMvb3B0aW9uc1wiO1xuaW1wb3J0IEVuZ2xpc2ggZnJvbSBcIi4vbDEwbi9kZWZhdWx0XCI7XG5pbXBvcnQgeyBhcnJheWlmeSwgZGVib3VuY2UsIGludCwgcGFkIH0gZnJvbSBcIi4vdXRpbHNcIjtcbmltcG9ydCB7IGNsZWFyTm9kZSwgY3JlYXRlRWxlbWVudCwgY3JlYXRlTnVtYmVySW5wdXQsIGZpbmRQYXJlbnQsIHRvZ2dsZUNsYXNzLCBnZXRFdmVudFRhcmdldCwgfSBmcm9tIFwiLi91dGlscy9kb21cIjtcbmltcG9ydCB7IGNvbXBhcmVEYXRlcywgY3JlYXRlRGF0ZVBhcnNlciwgY3JlYXRlRGF0ZUZvcm1hdHRlciwgZHVyYXRpb24sIGlzQmV0d2VlbiwgZ2V0RGVmYXVsdEhvdXJzLCBjYWxjdWxhdGVTZWNvbmRzU2luY2VNaWRuaWdodCwgcGFyc2VTZWNvbmRzLCB9IGZyb20gXCIuL3V0aWxzL2RhdGVzXCI7XG5pbXBvcnQgeyB0b2tlblJlZ2V4LCBtb250aFRvU3RyIH0gZnJvbSBcIi4vdXRpbHMvZm9ybWF0dGluZ1wiO1xuaW1wb3J0IFwiLi91dGlscy9wb2x5ZmlsbHNcIjtcbnZhciBERUJPVU5DRURfQ0hBTkdFX01TID0gMzAwO1xuZnVuY3Rpb24gRmxhdHBpY2tySW5zdGFuY2UoZWxlbWVudCwgaW5zdGFuY2VDb25maWcpIHtcbiAgICB2YXIgc2VsZiA9IHtcbiAgICAgICAgY29uZmlnOiBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgZGVmYXVsdE9wdGlvbnMpLCBmbGF0cGlja3IuZGVmYXVsdENvbmZpZyksXG4gICAgICAgIGwxMG46IEVuZ2xpc2gsXG4gICAgfTtcbiAgICBzZWxmLnBhcnNlRGF0ZSA9IGNyZWF0ZURhdGVQYXJzZXIoeyBjb25maWc6IHNlbGYuY29uZmlnLCBsMTBuOiBzZWxmLmwxMG4gfSk7XG4gICAgc2VsZi5faGFuZGxlcnMgPSBbXTtcbiAgICBzZWxmLnBsdWdpbkVsZW1lbnRzID0gW107XG4gICAgc2VsZi5sb2FkZWRQbHVnaW5zID0gW107XG4gICAgc2VsZi5fYmluZCA9IGJpbmQ7XG4gICAgc2VsZi5fc2V0SG91cnNGcm9tRGF0ZSA9IHNldEhvdXJzRnJvbURhdGU7XG4gICAgc2VsZi5fcG9zaXRpb25DYWxlbmRhciA9IHBvc2l0aW9uQ2FsZW5kYXI7XG4gICAgc2VsZi5jaGFuZ2VNb250aCA9IGNoYW5nZU1vbnRoO1xuICAgIHNlbGYuY2hhbmdlWWVhciA9IGNoYW5nZVllYXI7XG4gICAgc2VsZi5jbGVhciA9IGNsZWFyO1xuICAgIHNlbGYuY2xvc2UgPSBjbG9zZTtcbiAgICBzZWxmLm9uTW91c2VPdmVyID0gb25Nb3VzZU92ZXI7XG4gICAgc2VsZi5fY3JlYXRlRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQ7XG4gICAgc2VsZi5jcmVhdGVEYXkgPSBjcmVhdGVEYXk7XG4gICAgc2VsZi5kZXN0cm95ID0gZGVzdHJveTtcbiAgICBzZWxmLmlzRW5hYmxlZCA9IGlzRW5hYmxlZDtcbiAgICBzZWxmLmp1bXBUb0RhdGUgPSBqdW1wVG9EYXRlO1xuICAgIHNlbGYudXBkYXRlVmFsdWUgPSB1cGRhdGVWYWx1ZTtcbiAgICBzZWxmLm9wZW4gPSBvcGVuO1xuICAgIHNlbGYucmVkcmF3ID0gcmVkcmF3O1xuICAgIHNlbGYuc2V0ID0gc2V0O1xuICAgIHNlbGYuc2V0RGF0ZSA9IHNldERhdGU7XG4gICAgc2VsZi50b2dnbGUgPSB0b2dnbGU7XG4gICAgZnVuY3Rpb24gc2V0dXBIZWxwZXJGdW5jdGlvbnMoKSB7XG4gICAgICAgIHNlbGYudXRpbHMgPSB7XG4gICAgICAgICAgICBnZXREYXlzSW5Nb250aDogZnVuY3Rpb24gKG1vbnRoLCB5cikge1xuICAgICAgICAgICAgICAgIGlmIChtb250aCA9PT0gdm9pZCAwKSB7IG1vbnRoID0gc2VsZi5jdXJyZW50TW9udGg7IH1cbiAgICAgICAgICAgICAgICBpZiAoeXIgPT09IHZvaWQgMCkgeyB5ciA9IHNlbGYuY3VycmVudFllYXI7IH1cbiAgICAgICAgICAgICAgICBpZiAobW9udGggPT09IDEgJiYgKCh5ciAlIDQgPT09IDAgJiYgeXIgJSAxMDAgIT09IDApIHx8IHlyICUgNDAwID09PSAwKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDI5O1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLmwxMG4uZGF5c0luTW9udGhbbW9udGhdO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdCgpIHtcbiAgICAgICAgc2VsZi5lbGVtZW50ID0gc2VsZi5pbnB1dCA9IGVsZW1lbnQ7XG4gICAgICAgIHNlbGYuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHBhcnNlQ29uZmlnKCk7XG4gICAgICAgIHNldHVwTG9jYWxlKCk7XG4gICAgICAgIHNldHVwSW5wdXRzKCk7XG4gICAgICAgIHNldHVwRGF0ZXMoKTtcbiAgICAgICAgc2V0dXBIZWxwZXJGdW5jdGlvbnMoKTtcbiAgICAgICAgaWYgKCFzZWxmLmlzTW9iaWxlKVxuICAgICAgICAgICAgYnVpbGQoKTtcbiAgICAgICAgYmluZEV2ZW50cygpO1xuICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCB8fCBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoc2VsZi5jb25maWcubm9DYWxlbmRhciA/IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqIDogdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHVwZGF0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRDYWxlbmRhcldpZHRoKCk7XG4gICAgICAgIHZhciBpc1NhZmFyaSA9IC9eKCg/IWNocm9tZXxhbmRyb2lkKS4pKnNhZmFyaS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG4gICAgICAgIGlmICghc2VsZi5pc01vYmlsZSAmJiBpc1NhZmFyaSkge1xuICAgICAgICAgICAgcG9zaXRpb25DYWxlbmRhcigpO1xuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXJFdmVudChcIm9uUmVhZHlcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldENsb3Nlc3RBY3RpdmVFbGVtZW50KCkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoKChfYSA9IHNlbGYuY2FsZW5kYXJDb250YWluZXIpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5nZXRSb290Tm9kZSgpKVxuICAgICAgICAgICAgLmFjdGl2ZUVsZW1lbnQgfHwgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRUb0luc3RhbmNlKGZuKSB7XG4gICAgICAgIHJldHVybiBmbi5iaW5kKHNlbGYpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRDYWxlbmRhcldpZHRoKCkge1xuICAgICAgICB2YXIgY29uZmlnID0gc2VsZi5jb25maWc7XG4gICAgICAgIGlmIChjb25maWcud2Vla051bWJlcnMgPT09IGZhbHNlICYmIGNvbmZpZy5zaG93TW9udGhzID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29uZmlnLm5vQ2FsZW5kYXIgIT09IHRydWUpIHtcbiAgICAgICAgICAgIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNhbGVuZGFyQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIjtcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRheXNXaWR0aCA9IChzZWxmLmRheXMub2Zmc2V0V2lkdGggKyAxKSAqIGNvbmZpZy5zaG93TW9udGhzO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIuc3R5bGUud2lkdGggPSBkYXlzV2lkdGggKyBcInB4XCI7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUud2lkdGggPVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5c1dpZHRoICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VsZi53ZWVrV3JhcHBlciAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi53ZWVrV3JhcHBlci5vZmZzZXRXaWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDApICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcInB4XCI7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmVtb3ZlUHJvcGVydHkoXCJ2aXNpYmlsaXR5XCIpO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLnJlbW92ZVByb3BlcnR5KFwiZGlzcGxheVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVUaW1lKGUpIHtcbiAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHZhciBkZWZhdWx0RGF0ZSA9IHNlbGYuY29uZmlnLm1pbkRhdGUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhuZXcgRGF0ZSgpLCBzZWxmLmNvbmZpZy5taW5EYXRlKSA+PSAwXG4gICAgICAgICAgICAgICAgPyBuZXcgRGF0ZSgpXG4gICAgICAgICAgICAgICAgOiBuZXcgRGF0ZShzZWxmLmNvbmZpZy5taW5EYXRlLmdldFRpbWUoKSk7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdHMgPSBnZXREZWZhdWx0SG91cnMoc2VsZi5jb25maWcpO1xuICAgICAgICAgICAgZGVmYXVsdERhdGUuc2V0SG91cnMoZGVmYXVsdHMuaG91cnMsIGRlZmF1bHRzLm1pbnV0ZXMsIGRlZmF1bHRzLnNlY29uZHMsIGRlZmF1bHREYXRlLmdldE1pbGxpc2Vjb25kcygpKTtcbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IFtkZWZhdWx0RGF0ZV07XG4gICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiA9IGRlZmF1bHREYXRlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlICE9PSB1bmRlZmluZWQgJiYgZS50eXBlICE9PSBcImJsdXJcIikge1xuICAgICAgICAgICAgdGltZVdyYXBwZXIoZSk7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHByZXZWYWx1ZSA9IHNlbGYuX2lucHV0LnZhbHVlO1xuICAgICAgICBzZXRIb3Vyc0Zyb21JbnB1dHMoKTtcbiAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgaWYgKHNlbGYuX2lucHV0LnZhbHVlICE9PSBwcmV2VmFsdWUpIHtcbiAgICAgICAgICAgIHNlbGYuX2RlYm91bmNlZENoYW5nZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFtcG0ybWlsaXRhcnkoaG91ciwgYW1QTSkge1xuICAgICAgICByZXR1cm4gKGhvdXIgJSAxMikgKyAxMiAqIGludChhbVBNID09PSBzZWxmLmwxMG4uYW1QTVsxXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1pbGl0YXJ5MmFtcG0oaG91cikge1xuICAgICAgICBzd2l0Y2ggKGhvdXIgJSAyNCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgY2FzZSAxMjpcbiAgICAgICAgICAgICAgICByZXR1cm4gMTI7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHJldHVybiBob3VyICUgMTI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gc2V0SG91cnNGcm9tSW5wdXRzKCkge1xuICAgICAgICBpZiAoc2VsZi5ob3VyRWxlbWVudCA9PT0gdW5kZWZpbmVkIHx8IHNlbGYubWludXRlRWxlbWVudCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgaG91cnMgPSAocGFyc2VJbnQoc2VsZi5ob3VyRWxlbWVudC52YWx1ZS5zbGljZSgtMiksIDEwKSB8fCAwKSAlIDI0LCBtaW51dGVzID0gKHBhcnNlSW50KHNlbGYubWludXRlRWxlbWVudC52YWx1ZSwgMTApIHx8IDApICUgNjAsIHNlY29uZHMgPSBzZWxmLnNlY29uZEVsZW1lbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAocGFyc2VJbnQoc2VsZi5zZWNvbmRFbGVtZW50LnZhbHVlLCAxMCkgfHwgMCkgJSA2MFxuICAgICAgICAgICAgOiAwO1xuICAgICAgICBpZiAoc2VsZi5hbVBNICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGhvdXJzID0gYW1wbTJtaWxpdGFyeShob3Vycywgc2VsZi5hbVBNLnRleHRDb250ZW50KTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbGltaXRNaW5Ib3VycyA9IHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICBzZWxmLm1pbkRhdGVIYXNUaW1lICYmXG4gICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmosIHNlbGYuY29uZmlnLm1pbkRhdGUsIHRydWUpID09PVxuICAgICAgICAgICAgICAgICAgICAwKTtcbiAgICAgICAgdmFyIGxpbWl0TWF4SG91cnMgPSBzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgc2VsZi5tYXhEYXRlSGFzVGltZSAmJlxuICAgICAgICAgICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqICYmXG4gICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqLCBzZWxmLmNvbmZpZy5tYXhEYXRlLCB0cnVlKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgMCk7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pblRpbWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2VsZi5jb25maWcubWluVGltZSA+IHNlbGYuY29uZmlnLm1heFRpbWUpIHtcbiAgICAgICAgICAgIHZhciBtaW5Cb3VuZCA9IGNhbGN1bGF0ZVNlY29uZHNTaW5jZU1pZG5pZ2h0KHNlbGYuY29uZmlnLm1pblRpbWUuZ2V0SG91cnMoKSwgc2VsZi5jb25maWcubWluVGltZS5nZXRNaW51dGVzKCksIHNlbGYuY29uZmlnLm1pblRpbWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIHZhciBtYXhCb3VuZCA9IGNhbGN1bGF0ZVNlY29uZHNTaW5jZU1pZG5pZ2h0KHNlbGYuY29uZmlnLm1heFRpbWUuZ2V0SG91cnMoKSwgc2VsZi5jb25maWcubWF4VGltZS5nZXRNaW51dGVzKCksIHNlbGYuY29uZmlnLm1heFRpbWUuZ2V0U2Vjb25kcygpKTtcbiAgICAgICAgICAgIHZhciBjdXJyZW50VGltZSA9IGNhbGN1bGF0ZVNlY29uZHNTaW5jZU1pZG5pZ2h0KGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKTtcbiAgICAgICAgICAgIGlmIChjdXJyZW50VGltZSA+IG1heEJvdW5kICYmIGN1cnJlbnRUaW1lIDwgbWluQm91bmQpIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcGFyc2VTZWNvbmRzKG1pbkJvdW5kKTtcbiAgICAgICAgICAgICAgICBob3VycyA9IHJlc3VsdFswXTtcbiAgICAgICAgICAgICAgICBtaW51dGVzID0gcmVzdWx0WzFdO1xuICAgICAgICAgICAgICAgIHNlY29uZHMgPSByZXN1bHRbMl07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAobGltaXRNYXhIb3Vycykge1xuICAgICAgICAgICAgICAgIHZhciBtYXhUaW1lID0gc2VsZi5jb25maWcubWF4VGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWF4VGltZVxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1heERhdGU7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBNYXRoLm1pbihob3VycywgbWF4VGltZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1heFRpbWUuZ2V0SG91cnMoKSlcbiAgICAgICAgICAgICAgICAgICAgbWludXRlcyA9IE1hdGgubWluKG1pbnV0ZXMsIG1heFRpbWUuZ2V0TWludXRlcygpKTtcbiAgICAgICAgICAgICAgICBpZiAobWludXRlcyA9PT0gbWF4VGltZS5nZXRNaW51dGVzKCkpXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZHMgPSBNYXRoLm1pbihzZWNvbmRzLCBtYXhUaW1lLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobGltaXRNaW5Ib3Vycykge1xuICAgICAgICAgICAgICAgIHZhciBtaW5UaW1lID0gc2VsZi5jb25maWcubWluVGltZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWluVGltZVxuICAgICAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1pbkRhdGU7XG4gICAgICAgICAgICAgICAgaG91cnMgPSBNYXRoLm1heChob3VycywgbWluVGltZS5nZXRIb3VycygpKTtcbiAgICAgICAgICAgICAgICBpZiAoaG91cnMgPT09IG1pblRpbWUuZ2V0SG91cnMoKSAmJiBtaW51dGVzIDwgbWluVGltZS5nZXRNaW51dGVzKCkpXG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZXMgPSBtaW5UaW1lLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICAgICAgICBpZiAobWludXRlcyA9PT0gbWluVGltZS5nZXRNaW51dGVzKCkpXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZHMgPSBNYXRoLm1heChzZWNvbmRzLCBtaW5UaW1lLmdldFNlY29uZHMoKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXRIb3Vyc0Zyb21EYXRlKGRhdGVPYmopIHtcbiAgICAgICAgdmFyIGRhdGUgPSBkYXRlT2JqIHx8IHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqO1xuICAgICAgICBpZiAoZGF0ZSAmJiBkYXRlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldEhvdXJzKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7XG4gICAgICAgIGlmIChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5zZXRIb3Vycyhob3VycyAlIDI0LCBtaW51dGVzLCBzZWNvbmRzIHx8IDAsIDApO1xuICAgICAgICB9XG4gICAgICAgIGlmICghc2VsZi5ob3VyRWxlbWVudCB8fCAhc2VsZi5taW51dGVFbGVtZW50IHx8IHNlbGYuaXNNb2JpbGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHNlbGYuaG91ckVsZW1lbnQudmFsdWUgPSBwYWQoIXNlbGYuY29uZmlnLnRpbWVfMjRoclxuICAgICAgICAgICAgPyAoKDEyICsgaG91cnMpICUgMTIpICsgMTIgKiBpbnQoaG91cnMgJSAxMiA9PT0gMClcbiAgICAgICAgICAgIDogaG91cnMpO1xuICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQudmFsdWUgPSBwYWQobWludXRlcyk7XG4gICAgICAgIGlmIChzZWxmLmFtUE0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9IHNlbGYubDEwbi5hbVBNW2ludChob3VycyA+PSAxMildO1xuICAgICAgICBpZiAoc2VsZi5zZWNvbmRFbGVtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLnNlY29uZEVsZW1lbnQudmFsdWUgPSBwYWQoc2Vjb25kcyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9uWWVhcklucHV0KGV2ZW50KSB7XG4gICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGV2ZW50KTtcbiAgICAgICAgdmFyIHllYXIgPSBwYXJzZUludChldmVudFRhcmdldC52YWx1ZSkgKyAoZXZlbnQuZGVsdGEgfHwgMCk7XG4gICAgICAgIGlmICh5ZWFyIC8gMTAwMCA+IDEgfHxcbiAgICAgICAgICAgIChldmVudC5rZXkgPT09IFwiRW50ZXJcIiAmJiAhL1teXFxkXS8udGVzdCh5ZWFyLnRvU3RyaW5nKCkpKSkge1xuICAgICAgICAgICAgY2hhbmdlWWVhcih5ZWFyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gICAgICAgIGlmIChldmVudCBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgcmV0dXJuIGV2ZW50LmZvckVhY2goZnVuY3Rpb24gKGV2KSB7IHJldHVybiBiaW5kKGVsZW1lbnQsIGV2LCBoYW5kbGVyLCBvcHRpb25zKTsgfSk7XG4gICAgICAgIGlmIChlbGVtZW50IGluc3RhbmNlb2YgQXJyYXkpXG4gICAgICAgICAgICByZXR1cm4gZWxlbWVudC5mb3JFYWNoKGZ1bmN0aW9uIChlbCkgeyByZXR1cm4gYmluZChlbCwgZXZlbnQsIGhhbmRsZXIsIG9wdGlvbnMpOyB9KTtcbiAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBoYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgc2VsZi5faGFuZGxlcnMucHVzaCh7XG4gICAgICAgICAgICByZW1vdmU6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudCwgaGFuZGxlciwgb3B0aW9ucyk7IH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0cmlnZ2VyQ2hhbmdlKCkge1xuICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNoYW5nZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZEV2ZW50cygpIHtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLndyYXApIHtcbiAgICAgICAgICAgIFtcIm9wZW5cIiwgXCJjbG9zZVwiLCBcInRvZ2dsZVwiLCBcImNsZWFyXCJdLmZvckVhY2goZnVuY3Rpb24gKGV2dCkge1xuICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoc2VsZi5lbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1cIiArIGV2dCArIFwiXVwiKSwgZnVuY3Rpb24gKGVsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBiaW5kKGVsLCBcImNsaWNrXCIsIHNlbGZbZXZ0XSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5pc01vYmlsZSkge1xuICAgICAgICAgICAgc2V0dXBNb2JpbGUoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGVib3VuY2VkUmVzaXplID0gZGVib3VuY2Uob25SZXNpemUsIDUwKTtcbiAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlID0gZGVib3VuY2UodHJpZ2dlckNoYW5nZSwgREVCT1VOQ0VEX0NIQU5HRV9NUyk7XG4gICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIgJiYgIS9pUGhvbmV8aVBhZHxpUG9kL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSlcbiAgICAgICAgICAgIGJpbmQoc2VsZi5kYXlzQ29udGFpbmVyLCBcIm1vdXNlb3ZlclwiLCBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICAgICAgICAgIG9uTW91c2VPdmVyKGdldEV2ZW50VGFyZ2V0KGUpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICBiaW5kKHNlbGYuX2lucHV0LCBcImtleWRvd25cIiwgb25LZXlEb3duKTtcbiAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYmluZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImtleWRvd25cIiwgb25LZXlEb3duKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGYuY29uZmlnLmlubGluZSAmJiAhc2VsZi5jb25maWcuc3RhdGljKVxuICAgICAgICAgICAgYmluZCh3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlZFJlc2l6ZSk7XG4gICAgICAgIGlmICh3aW5kb3cub250b3VjaHN0YXJ0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudCwgXCJ0b3VjaHN0YXJ0XCIsIGRvY3VtZW50Q2xpY2spO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICBiaW5kKHdpbmRvdy5kb2N1bWVudCwgXCJtb3VzZWRvd25cIiwgZG9jdW1lbnRDbGljayk7XG4gICAgICAgIGJpbmQod2luZG93LmRvY3VtZW50LCBcImZvY3VzXCIsIGRvY3VtZW50Q2xpY2ssIHsgY2FwdHVyZTogdHJ1ZSB9KTtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLmNsaWNrT3BlbnMgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiZm9jdXNcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiY2xpY2tcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5kYXlzQ29udGFpbmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIGJpbmQoc2VsZi5tb250aE5hdiwgXCJjbGlja1wiLCBvbk1vbnRoTmF2Q2xpY2spO1xuICAgICAgICAgICAgYmluZChzZWxmLm1vbnRoTmF2LCBbXCJrZXl1cFwiLCBcImluY3JlbWVudFwiXSwgb25ZZWFySW5wdXQpO1xuICAgICAgICAgICAgYmluZChzZWxmLmRheXNDb250YWluZXIsIFwiY2xpY2tcIiwgc2VsZWN0RGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYudGltZUNvbnRhaW5lciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YXIgc2VsVGV4dCA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdldEV2ZW50VGFyZ2V0KGUpLnNlbGVjdCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGJpbmQoc2VsZi50aW1lQ29udGFpbmVyLCBbXCJpbmNyZW1lbnRcIl0sIHVwZGF0ZVRpbWUpO1xuICAgICAgICAgICAgYmluZChzZWxmLnRpbWVDb250YWluZXIsIFwiYmx1clwiLCB1cGRhdGVUaW1lLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gICAgICAgICAgICBiaW5kKHNlbGYudGltZUNvbnRhaW5lciwgXCJjbGlja1wiLCB0aW1lSW5jcmVtZW50KTtcbiAgICAgICAgICAgIGJpbmQoW3NlbGYuaG91ckVsZW1lbnQsIHNlbGYubWludXRlRWxlbWVudF0sIFtcImZvY3VzXCIsIFwiY2xpY2tcIl0sIHNlbFRleHQpO1xuICAgICAgICAgICAgaWYgKHNlbGYuc2Vjb25kRWxlbWVudCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5zZWNvbmRFbGVtZW50LCBcImZvY3VzXCIsIGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuc2Vjb25kRWxlbWVudCAmJiBzZWxmLnNlY29uZEVsZW1lbnQuc2VsZWN0KCk7IH0pO1xuICAgICAgICAgICAgaWYgKHNlbGYuYW1QTSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgYmluZChzZWxmLmFtUE0sIFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZShlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5jb25maWcuYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgYmluZChzZWxmLl9pbnB1dCwgXCJibHVyXCIsIG9uQmx1cik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24ganVtcFRvRGF0ZShqdW1wRGF0ZSwgdHJpZ2dlckNoYW5nZSkge1xuICAgICAgICB2YXIganVtcFRvID0ganVtcERhdGUgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBzZWxmLnBhcnNlRGF0ZShqdW1wRGF0ZSlcbiAgICAgICAgICAgIDogc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogfHxcbiAgICAgICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZSAmJiBzZWxmLmNvbmZpZy5taW5EYXRlID4gc2VsZi5ub3dcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5EYXRlXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZSAmJiBzZWxmLmNvbmZpZy5tYXhEYXRlIDwgc2VsZi5ub3dcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWF4RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLm5vdyk7XG4gICAgICAgIHZhciBvbGRZZWFyID0gc2VsZi5jdXJyZW50WWVhcjtcbiAgICAgICAgdmFyIG9sZE1vbnRoID0gc2VsZi5jdXJyZW50TW9udGg7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoanVtcFRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0ganVtcFRvLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBqdW1wVG8uZ2V0TW9udGgoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgZS5tZXNzYWdlID0gXCJJbnZhbGlkIGRhdGUgc3VwcGxpZWQ6IFwiICsganVtcFRvO1xuICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlICYmIHNlbGYuY3VycmVudFllYXIgIT09IG9sZFllYXIpIHtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSAmJlxuICAgICAgICAgICAgKHNlbGYuY3VycmVudFllYXIgIT09IG9sZFllYXIgfHwgc2VsZi5jdXJyZW50TW9udGggIT09IG9sZE1vbnRoKSkge1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25Nb250aENoYW5nZVwiKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLnJlZHJhdygpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0aW1lSW5jcmVtZW50KGUpIHtcbiAgICAgICAgdmFyIGV2ZW50VGFyZ2V0ID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgIGlmICh+ZXZlbnRUYXJnZXQuY2xhc3NOYW1lLmluZGV4T2YoXCJhcnJvd1wiKSlcbiAgICAgICAgICAgIGluY3JlbWVudE51bUlucHV0KGUsIGV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93VXBcIikgPyAxIDogLTEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpbmNyZW1lbnROdW1JbnB1dChlLCBkZWx0YSwgaW5wdXRFbGVtKSB7XG4gICAgICAgIHZhciB0YXJnZXQgPSBlICYmIGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICB2YXIgaW5wdXQgPSBpbnB1dEVsZW0gfHxcbiAgICAgICAgICAgICh0YXJnZXQgJiYgdGFyZ2V0LnBhcmVudE5vZGUgJiYgdGFyZ2V0LnBhcmVudE5vZGUuZmlyc3RDaGlsZCk7XG4gICAgICAgIHZhciBldmVudCA9IGNyZWF0ZUV2ZW50KFwiaW5jcmVtZW50XCIpO1xuICAgICAgICBldmVudC5kZWx0YSA9IGRlbHRhO1xuICAgICAgICBpbnB1dCAmJiBpbnB1dC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGQoKSB7XG4gICAgICAgIHZhciBmcmFnbWVudCA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7XG4gICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWNhbGVuZGFyXCIpO1xuICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIGlmICghc2VsZi5jb25maWcubm9DYWxlbmRhcikge1xuICAgICAgICAgICAgZnJhZ21lbnQuYXBwZW5kQ2hpbGQoYnVpbGRNb250aE5hdigpKTtcbiAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLWlubmVyQ29udGFpbmVyXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLndlZWtOdW1iZXJzKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hID0gYnVpbGRXZWVrcygpLCB3ZWVrV3JhcHBlciA9IF9hLndlZWtXcmFwcGVyLCB3ZWVrTnVtYmVycyA9IF9hLndlZWtOdW1iZXJzO1xuICAgICAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIuYXBwZW5kQ2hpbGQod2Vla1dyYXBwZXIpO1xuICAgICAgICAgICAgICAgIHNlbGYud2Vla051bWJlcnMgPSB3ZWVrTnVtYmVycztcbiAgICAgICAgICAgICAgICBzZWxmLndlZWtXcmFwcGVyID0gd2Vla1dyYXBwZXI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLnJDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXJDb250YWluZXJcIik7XG4gICAgICAgICAgICBzZWxmLnJDb250YWluZXIuYXBwZW5kQ2hpbGQoYnVpbGRXZWVrZGF5cygpKTtcbiAgICAgICAgICAgIGlmICghc2VsZi5kYXlzQ29udGFpbmVyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1kYXlzXCIpO1xuICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci50YWJJbmRleCA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnVpbGREYXlzKCk7XG4gICAgICAgICAgICBzZWxmLnJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5kYXlzQ29udGFpbmVyKTtcbiAgICAgICAgICAgIHNlbGYuaW5uZXJDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5yQ29udGFpbmVyKTtcbiAgICAgICAgICAgIGZyYWdtZW50LmFwcGVuZENoaWxkKHNlbGYuaW5uZXJDb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lKSB7XG4gICAgICAgICAgICBmcmFnbWVudC5hcHBlbmRDaGlsZChidWlsZFRpbWUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJyYW5nZU1vZGVcIiwgc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKTtcbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhbmltYXRlXCIsIHNlbGYuY29uZmlnLmFuaW1hdGUgPT09IHRydWUpO1xuICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcIm11bHRpTW9udGhcIiwgc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEpO1xuICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmFwcGVuZENoaWxkKGZyYWdtZW50KTtcbiAgICAgICAgdmFyIGN1c3RvbUFwcGVuZCA9IHNlbGYuY29uZmlnLmFwcGVuZFRvICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmFwcGVuZFRvLm5vZGVUeXBlICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5pbmxpbmUgfHwgc2VsZi5jb25maWcuc3RhdGljKSB7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoc2VsZi5jb25maWcuaW5saW5lID8gXCJpbmxpbmVcIiA6IFwic3RhdGljXCIpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLmlubGluZSkge1xuICAgICAgICAgICAgICAgIGlmICghY3VzdG9tQXBwZW5kICYmIHNlbGYuZWxlbWVudC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgc2VsZi5faW5wdXQubmV4dFNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLmFwcGVuZFRvICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmFwcGVuZFRvLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYykge1xuICAgICAgICAgICAgICAgIHZhciB3cmFwcGVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci13cmFwcGVyXCIpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmVsZW1lbnQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5lbGVtZW50LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHdyYXBwZXIsIHNlbGYuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChzZWxmLmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmFsdElucHV0KVxuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLmFwcGVuZENoaWxkKHNlbGYuYWx0SW5wdXQpO1xuICAgICAgICAgICAgICAgIHdyYXBwZXIuYXBwZW5kQ2hpbGQoc2VsZi5jYWxlbmRhckNvbnRhaW5lcik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy5zdGF0aWMgJiYgIXNlbGYuY29uZmlnLmlubGluZSlcbiAgICAgICAgICAgIChzZWxmLmNvbmZpZy5hcHBlbmRUbyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hcHBlbmRUb1xuICAgICAgICAgICAgICAgIDogd2luZG93LmRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHNlbGYuY2FsZW5kYXJDb250YWluZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVEYXkoY2xhc3NOYW1lLCBkYXRlLCBfZGF5TnVtYmVyLCBpKSB7XG4gICAgICAgIHZhciBkYXRlSXNFbmFibGVkID0gaXNFbmFibGVkKGRhdGUsIHRydWUpLCBkYXlFbGVtZW50ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgY2xhc3NOYW1lLCBkYXRlLmdldERhdGUoKS50b1N0cmluZygpKTtcbiAgICAgICAgZGF5RWxlbWVudC5kYXRlT2JqID0gZGF0ZTtcbiAgICAgICAgZGF5RWxlbWVudC4kaSA9IGk7XG4gICAgICAgIGRheUVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmZvcm1hdERhdGUoZGF0ZSwgc2VsZi5jb25maWcuYXJpYURhdGVGb3JtYXQpKTtcbiAgICAgICAgaWYgKGNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGUsIHNlbGYubm93KSA9PT0gMCkge1xuICAgICAgICAgICAgc2VsZi50b2RheURhdGVFbGVtID0gZGF5RWxlbWVudDtcbiAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcInRvZGF5XCIpO1xuICAgICAgICAgICAgZGF5RWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJhcmlhLWN1cnJlbnRcIiwgXCJkYXRlXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRlSXNFbmFibGVkKSB7XG4gICAgICAgICAgICBkYXlFbGVtZW50LnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICBpZiAoaXNEYXRlU2VsZWN0ZWQoZGF0ZSkpIHtcbiAgICAgICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJzZWxlY3RlZFwiKTtcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZUVsZW0gPSBkYXlFbGVtZW50O1xuICAgICAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdG9nZ2xlQ2xhc3MoZGF5RWxlbWVudCwgXCJzdGFydFJhbmdlXCIsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSwgdHJ1ZSkgPT09IDApO1xuICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhkYXlFbGVtZW50LCBcImVuZFJhbmdlXCIsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcGFyZURhdGVzKGRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1sxXSwgdHJ1ZSkgPT09IDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2xhc3NOYW1lID09PSBcIm5leHRNb250aERheVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF5RWxlbWVudC5jbGFzc0xpc3QuYWRkKFwiaW5SYW5nZVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXlFbGVtZW50LmNsYXNzTGlzdC5hZGQoXCJmbGF0cGlja3ItZGlzYWJsZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIikge1xuICAgICAgICAgICAgaWYgKGlzRGF0ZUluUmFuZ2UoZGF0ZSkgJiYgIWlzRGF0ZVNlbGVjdGVkKGRhdGUpKVxuICAgICAgICAgICAgICAgIGRheUVsZW1lbnQuY2xhc3NMaXN0LmFkZChcImluUmFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYud2Vla051bWJlcnMgJiZcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLnNob3dNb250aHMgPT09IDEgJiZcbiAgICAgICAgICAgIGNsYXNzTmFtZSAhPT0gXCJwcmV2TW9udGhEYXlcIiAmJlxuICAgICAgICAgICAgaSAlIDcgPT09IDYpIHtcbiAgICAgICAgICAgIHNlbGYud2Vla051bWJlcnMuaW5zZXJ0QWRqYWNlbnRIVE1MKFwiYmVmb3JlZW5kXCIsIFwiPHNwYW4gY2xhc3M9J2ZsYXRwaWNrci1kYXknPlwiICsgc2VsZi5jb25maWcuZ2V0V2VlayhkYXRlKSArIFwiPC9zcGFuPlwiKTtcbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkRheUNyZWF0ZVwiLCBkYXlFbGVtZW50KTtcbiAgICAgICAgcmV0dXJuIGRheUVsZW1lbnQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvY3VzT25EYXlFbGVtKHRhcmdldE5vZGUpIHtcbiAgICAgICAgdGFyZ2V0Tm9kZS5mb2N1cygpO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcubW9kZSA9PT0gXCJyYW5nZVwiKVxuICAgICAgICAgICAgb25Nb3VzZU92ZXIodGFyZ2V0Tm9kZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEZpcnN0QXZhaWxhYmxlRGF5KGRlbHRhKSB7XG4gICAgICAgIHZhciBzdGFydE1vbnRoID0gZGVsdGEgPiAwID8gMCA6IHNlbGYuY29uZmlnLnNob3dNb250aHMgLSAxO1xuICAgICAgICB2YXIgZW5kTW9udGggPSBkZWx0YSA+IDAgPyBzZWxmLmNvbmZpZy5zaG93TW9udGhzIDogLTE7XG4gICAgICAgIGZvciAodmFyIG0gPSBzdGFydE1vbnRoOyBtICE9IGVuZE1vbnRoOyBtICs9IGRlbHRhKSB7XG4gICAgICAgICAgICB2YXIgbW9udGggPSBzZWxmLmRheXNDb250YWluZXIuY2hpbGRyZW5bbV07XG4gICAgICAgICAgICB2YXIgc3RhcnRJbmRleCA9IGRlbHRhID4gMCA/IDAgOiBtb250aC5jaGlsZHJlbi5sZW5ndGggLSAxO1xuICAgICAgICAgICAgdmFyIGVuZEluZGV4ID0gZGVsdGEgPiAwID8gbW9udGguY2hpbGRyZW4ubGVuZ3RoIDogLTE7XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnRJbmRleDsgaSAhPSBlbmRJbmRleDsgaSArPSBkZWx0YSkge1xuICAgICAgICAgICAgICAgIHZhciBjID0gbW9udGguY2hpbGRyZW5baV07XG4gICAgICAgICAgICAgICAgaWYgKGMuY2xhc3NOYW1lLmluZGV4T2YoXCJoaWRkZW5cIikgPT09IC0xICYmIGlzRW5hYmxlZChjLmRhdGVPYmopKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXROZXh0QXZhaWxhYmxlRGF5KGN1cnJlbnQsIGRlbHRhKSB7XG4gICAgICAgIHZhciBnaXZlbk1vbnRoID0gY3VycmVudC5jbGFzc05hbWUuaW5kZXhPZihcIk1vbnRoXCIpID09PSAtMVxuICAgICAgICAgICAgPyBjdXJyZW50LmRhdGVPYmouZ2V0TW9udGgoKVxuICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRNb250aDtcbiAgICAgICAgdmFyIGVuZE1vbnRoID0gZGVsdGEgPiAwID8gc2VsZi5jb25maWcuc2hvd01vbnRocyA6IC0xO1xuICAgICAgICB2YXIgbG9vcERlbHRhID0gZGVsdGEgPiAwID8gMSA6IC0xO1xuICAgICAgICBmb3IgKHZhciBtID0gZ2l2ZW5Nb250aCAtIHNlbGYuY3VycmVudE1vbnRoOyBtICE9IGVuZE1vbnRoOyBtICs9IGxvb3BEZWx0YSkge1xuICAgICAgICAgICAgdmFyIG1vbnRoID0gc2VsZi5kYXlzQ29udGFpbmVyLmNoaWxkcmVuW21dO1xuICAgICAgICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnaXZlbk1vbnRoIC0gc2VsZi5jdXJyZW50TW9udGggPT09IG1cbiAgICAgICAgICAgICAgICA/IGN1cnJlbnQuJGkgKyBkZWx0YVxuICAgICAgICAgICAgICAgIDogZGVsdGEgPCAwXG4gICAgICAgICAgICAgICAgICAgID8gbW9udGguY2hpbGRyZW4ubGVuZ3RoIC0gMVxuICAgICAgICAgICAgICAgICAgICA6IDA7XG4gICAgICAgICAgICB2YXIgbnVtTW9udGhEYXlzID0gbW9udGguY2hpbGRyZW4ubGVuZ3RoO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IHN0YXJ0SW5kZXg7IGkgPj0gMCAmJiBpIDwgbnVtTW9udGhEYXlzICYmIGkgIT0gKGRlbHRhID4gMCA/IG51bU1vbnRoRGF5cyA6IC0xKTsgaSArPSBsb29wRGVsdGEpIHtcbiAgICAgICAgICAgICAgICB2YXIgYyA9IG1vbnRoLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgIGlmIChjLmNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgICAgICBpc0VuYWJsZWQoYy5kYXRlT2JqKSAmJlxuICAgICAgICAgICAgICAgICAgICBNYXRoLmFicyhjdXJyZW50LiRpIC0gaSkgPj0gTWF0aC5hYnMoZGVsdGEpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm9jdXNPbkRheUVsZW0oYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5jaGFuZ2VNb250aChsb29wRGVsdGEpO1xuICAgICAgICBmb2N1c09uRGF5KGdldEZpcnN0QXZhaWxhYmxlRGF5KGxvb3BEZWx0YSksIDApO1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmb2N1c09uRGF5KGN1cnJlbnQsIG9mZnNldCkge1xuICAgICAgICB2YXIgYWN0aXZlRWxlbWVudCA9IGdldENsb3Nlc3RBY3RpdmVFbGVtZW50KCk7XG4gICAgICAgIHZhciBkYXlGb2N1c2VkID0gaXNJblZpZXcoYWN0aXZlRWxlbWVudCB8fCBkb2N1bWVudC5ib2R5KTtcbiAgICAgICAgdmFyIHN0YXJ0RWxlbSA9IGN1cnJlbnQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBjdXJyZW50XG4gICAgICAgICAgICA6IGRheUZvY3VzZWRcbiAgICAgICAgICAgICAgICA/IGFjdGl2ZUVsZW1lbnRcbiAgICAgICAgICAgICAgICA6IHNlbGYuc2VsZWN0ZWREYXRlRWxlbSAhPT0gdW5kZWZpbmVkICYmIGlzSW5WaWV3KHNlbGYuc2VsZWN0ZWREYXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLnNlbGVjdGVkRGF0ZUVsZW1cbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLnRvZGF5RGF0ZUVsZW0gIT09IHVuZGVmaW5lZCAmJiBpc0luVmlldyhzZWxmLnRvZGF5RGF0ZUVsZW0pXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHNlbGYudG9kYXlEYXRlRWxlbVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBnZXRGaXJzdEF2YWlsYWJsZURheShvZmZzZXQgPiAwID8gMSA6IC0xKTtcbiAgICAgICAgaWYgKHN0YXJ0RWxlbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZWxmLl9pbnB1dC5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFkYXlGb2N1c2VkKSB7XG4gICAgICAgICAgICBmb2N1c09uRGF5RWxlbShzdGFydEVsZW0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZ2V0TmV4dEF2YWlsYWJsZURheShzdGFydEVsZW0sIG9mZnNldCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRNb250aERheXMoeWVhciwgbW9udGgpIHtcbiAgICAgICAgdmFyIGZpcnN0T2ZNb250aCA9IChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSkuZ2V0RGF5KCkgLSBzZWxmLmwxMG4uZmlyc3REYXlPZldlZWsgKyA3KSAlIDc7XG4gICAgICAgIHZhciBwcmV2TW9udGhEYXlzID0gc2VsZi51dGlscy5nZXREYXlzSW5Nb250aCgobW9udGggLSAxICsgMTIpICUgMTIsIHllYXIpO1xuICAgICAgICB2YXIgZGF5c0luTW9udGggPSBzZWxmLnV0aWxzLmdldERheXNJbk1vbnRoKG1vbnRoLCB5ZWFyKSwgZGF5cyA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksIGlzTXVsdGlNb250aCA9IHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxLCBwcmV2TW9udGhEYXlDbGFzcyA9IGlzTXVsdGlNb250aCA/IFwicHJldk1vbnRoRGF5IGhpZGRlblwiIDogXCJwcmV2TW9udGhEYXlcIiwgbmV4dE1vbnRoRGF5Q2xhc3MgPSBpc011bHRpTW9udGggPyBcIm5leHRNb250aERheSBoaWRkZW5cIiA6IFwibmV4dE1vbnRoRGF5XCI7XG4gICAgICAgIHZhciBkYXlOdW1iZXIgPSBwcmV2TW9udGhEYXlzICsgMSAtIGZpcnN0T2ZNb250aCwgZGF5SW5kZXggPSAwO1xuICAgICAgICBmb3IgKDsgZGF5TnVtYmVyIDw9IHByZXZNb250aERheXM7IGRheU51bWJlcisrLCBkYXlJbmRleCsrKSB7XG4gICAgICAgICAgICBkYXlzLmFwcGVuZENoaWxkKGNyZWF0ZURheShcImZsYXRwaWNrci1kYXkgXCIgKyBwcmV2TW9udGhEYXlDbGFzcywgbmV3IERhdGUoeWVhciwgbW9udGggLSAxLCBkYXlOdW1iZXIpLCBkYXlOdW1iZXIsIGRheUluZGV4KSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChkYXlOdW1iZXIgPSAxOyBkYXlOdW1iZXIgPD0gZGF5c0luTW9udGg7IGRheU51bWJlcisrLCBkYXlJbmRleCsrKSB7XG4gICAgICAgICAgICBkYXlzLmFwcGVuZENoaWxkKGNyZWF0ZURheShcImZsYXRwaWNrci1kYXlcIiwgbmV3IERhdGUoeWVhciwgbW9udGgsIGRheU51bWJlciksIGRheU51bWJlciwgZGF5SW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBkYXlOdW0gPSBkYXlzSW5Nb250aCArIDE7IGRheU51bSA8PSA0MiAtIGZpcnN0T2ZNb250aCAmJlxuICAgICAgICAgICAgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPT09IDEgfHwgZGF5SW5kZXggJSA3ICE9PSAwKTsgZGF5TnVtKyssIGRheUluZGV4KyspIHtcbiAgICAgICAgICAgIGRheXMuYXBwZW5kQ2hpbGQoY3JlYXRlRGF5KFwiZmxhdHBpY2tyLWRheSBcIiArIG5leHRNb250aERheUNsYXNzLCBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIGRheU51bSAlIGRheXNJbk1vbnRoKSwgZGF5TnVtLCBkYXlJbmRleCkpO1xuICAgICAgICB9XG4gICAgICAgIHZhciBkYXlDb250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZGF5Q29udGFpbmVyXCIpO1xuICAgICAgICBkYXlDb250YWluZXIuYXBwZW5kQ2hpbGQoZGF5cyk7XG4gICAgICAgIHJldHVybiBkYXlDb250YWluZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkRGF5cygpIHtcbiAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJOb2RlKHNlbGYuZGF5c0NvbnRhaW5lcik7XG4gICAgICAgIGlmIChzZWxmLndlZWtOdW1iZXJzKVxuICAgICAgICAgICAgY2xlYXJOb2RlKHNlbGYud2Vla051bWJlcnMpO1xuICAgICAgICB2YXIgZnJhZyA9IGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmNvbmZpZy5zaG93TW9udGhzOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgc2VsZi5jdXJyZW50TW9udGgsIDEpO1xuICAgICAgICAgICAgZC5zZXRNb250aChzZWxmLmN1cnJlbnRNb250aCArIGkpO1xuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChidWlsZE1vbnRoRGF5cyhkLmdldEZ1bGxZZWFyKCksIGQuZ2V0TW9udGgoKSkpO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5hcHBlbmRDaGlsZChmcmFnKTtcbiAgICAgICAgc2VsZi5kYXlzID0gc2VsZi5kYXlzQ29udGFpbmVyLmZpcnN0Q2hpbGQ7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiYgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgb25Nb3VzZU92ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZE1vbnRoU3dpdGNoKCkge1xuICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEgfHxcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vbnRoU2VsZWN0b3JUeXBlICE9PSBcImRyb3Bkb3duXCIpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBzaG91bGRCdWlsZE1vbnRoID0gZnVuY3Rpb24gKG1vbnRoKSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5jb25maWcubWluRGF0ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9PT0gc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpICYmXG4gICAgICAgICAgICAgICAgbW9udGggPCBzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gIShzZWxmLmNvbmZpZy5tYXhEYXRlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKCkgJiZcbiAgICAgICAgICAgICAgICBtb250aCA+IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0TW9udGgoKSk7XG4gICAgICAgIH07XG4gICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIudGFiSW5kZXggPSAtMTtcbiAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci5pbm5lckhUTUwgPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyOyBpKyspIHtcbiAgICAgICAgICAgIGlmICghc2hvdWxkQnVpbGRNb250aChpKSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHZhciBtb250aCA9IGNyZWF0ZUVsZW1lbnQoXCJvcHRpb25cIiwgXCJmbGF0cGlja3ItbW9udGhEcm9wZG93bi1tb250aFwiKTtcbiAgICAgICAgICAgIG1vbnRoLnZhbHVlID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgaSkuZ2V0TW9udGgoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgbW9udGgudGV4dENvbnRlbnQgPSBtb250aFRvU3RyKGksIHNlbGYuY29uZmlnLnNob3J0aGFuZEN1cnJlbnRNb250aCwgc2VsZi5sMTBuKTtcbiAgICAgICAgICAgIG1vbnRoLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICBpZiAoc2VsZi5jdXJyZW50TW9udGggPT09IGkpIHtcbiAgICAgICAgICAgICAgICBtb250aC5zZWxlY3RlZCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLmFwcGVuZENoaWxkKG1vbnRoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZE1vbnRoKCkge1xuICAgICAgICB2YXIgY29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1tb250aFwiKTtcbiAgICAgICAgdmFyIG1vbnRoTmF2RnJhZ21lbnQgPSB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICB2YXIgbW9udGhFbGVtZW50O1xuICAgICAgICBpZiAoc2VsZi5jb25maWcuc2hvd01vbnRocyA+IDEgfHxcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vbnRoU2VsZWN0b3JUeXBlID09PSBcInN0YXRpY1wiKSB7XG4gICAgICAgICAgICBtb250aEVsZW1lbnQgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImN1ci1tb250aFwiKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIgPSBjcmVhdGVFbGVtZW50KFwic2VsZWN0XCIsIFwiZmxhdHBpY2tyLW1vbnRoRHJvcGRvd24tbW9udGhzXCIpO1xuICAgICAgICAgICAgc2VsZi5tb250aHNEcm9wZG93bkNvbnRhaW5lci5zZXRBdHRyaWJ1dGUoXCJhcmlhLWxhYmVsXCIsIHNlbGYubDEwbi5tb250aEFyaWFMYWJlbCk7XG4gICAgICAgICAgICBiaW5kKHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXIsIFwiY2hhbmdlXCIsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgIHZhciBzZWxlY3RlZE1vbnRoID0gcGFyc2VJbnQodGFyZ2V0LnZhbHVlLCAxMCk7XG4gICAgICAgICAgICAgICAgc2VsZi5jaGFuZ2VNb250aChzZWxlY3RlZE1vbnRoIC0gc2VsZi5jdXJyZW50TW9udGgpO1xuICAgICAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgIG1vbnRoRWxlbWVudCA9IHNlbGYubW9udGhzRHJvcGRvd25Db250YWluZXI7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHllYXJJbnB1dCA9IGNyZWF0ZU51bWJlcklucHV0KFwiY3VyLXllYXJcIiwgeyB0YWJpbmRleDogXCItMVwiIH0pO1xuICAgICAgICB2YXIgeWVhckVsZW1lbnQgPSB5ZWFySW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgeWVhckVsZW1lbnQuc2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiLCBzZWxmLmwxMG4ueWVhckFyaWFMYWJlbCk7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlKSB7XG4gICAgICAgICAgICB5ZWFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhEYXRlKSB7XG4gICAgICAgICAgICB5ZWFyRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhcIiwgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgeWVhckVsZW1lbnQuZGlzYWJsZWQgPVxuICAgICAgICAgICAgICAgICEhc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY3VycmVudE1vbnRoID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci1jdXJyZW50LW1vbnRoXCIpO1xuICAgICAgICBjdXJyZW50TW9udGguYXBwZW5kQ2hpbGQobW9udGhFbGVtZW50KTtcbiAgICAgICAgY3VycmVudE1vbnRoLmFwcGVuZENoaWxkKHllYXJJbnB1dCk7XG4gICAgICAgIG1vbnRoTmF2RnJhZ21lbnQuYXBwZW5kQ2hpbGQoY3VycmVudE1vbnRoKTtcbiAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG1vbnRoTmF2RnJhZ21lbnQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY29udGFpbmVyOiBjb250YWluZXIsXG4gICAgICAgICAgICB5ZWFyRWxlbWVudDogeWVhckVsZW1lbnQsXG4gICAgICAgICAgICBtb250aEVsZW1lbnQ6IG1vbnRoRWxlbWVudCxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRNb250aHMoKSB7XG4gICAgICAgIGNsZWFyTm9kZShzZWxmLm1vbnRoTmF2KTtcbiAgICAgICAgc2VsZi5tb250aE5hdi5hcHBlbmRDaGlsZChzZWxmLnByZXZNb250aE5hdik7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5zaG93TW9udGhzKSB7XG4gICAgICAgICAgICBzZWxmLnllYXJFbGVtZW50cyA9IFtdO1xuICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZm9yICh2YXIgbSA9IHNlbGYuY29uZmlnLnNob3dNb250aHM7IG0tLTspIHtcbiAgICAgICAgICAgIHZhciBtb250aCA9IGJ1aWxkTW9udGgoKTtcbiAgICAgICAgICAgIHNlbGYueWVhckVsZW1lbnRzLnB1c2gobW9udGgueWVhckVsZW1lbnQpO1xuICAgICAgICAgICAgc2VsZi5tb250aEVsZW1lbnRzLnB1c2gobW9udGgubW9udGhFbGVtZW50KTtcbiAgICAgICAgICAgIHNlbGYubW9udGhOYXYuYXBwZW5kQ2hpbGQobW9udGguY29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLm1vbnRoTmF2LmFwcGVuZENoaWxkKHNlbGYubmV4dE1vbnRoTmF2KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYnVpbGRNb250aE5hdigpIHtcbiAgICAgICAgc2VsZi5tb250aE5hdiA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3ItbW9udGhzXCIpO1xuICAgICAgICBzZWxmLnllYXJFbGVtZW50cyA9IFtdO1xuICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHMgPSBbXTtcbiAgICAgICAgc2VsZi5wcmV2TW9udGhOYXYgPSBjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci1wcmV2LW1vbnRoXCIpO1xuICAgICAgICBzZWxmLnByZXZNb250aE5hdi5pbm5lckhUTUwgPSBzZWxmLmNvbmZpZy5wcmV2QXJyb3c7XG4gICAgICAgIHNlbGYubmV4dE1vbnRoTmF2ID0gY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItbmV4dC1tb250aFwiKTtcbiAgICAgICAgc2VsZi5uZXh0TW9udGhOYXYuaW5uZXJIVE1MID0gc2VsZi5jb25maWcubmV4dEFycm93O1xuICAgICAgICBidWlsZE1vbnRocygpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgXCJfaGlkZVByZXZNb250aEFycm93XCIsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5fX2hpZGVQcmV2TW9udGhBcnJvdzsgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX2hpZGVQcmV2TW9udGhBcnJvdyAhPT0gYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLnByZXZNb250aE5hdiwgXCJmbGF0cGlja3ItZGlzYWJsZWRcIiwgYm9vbCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlUHJldk1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZiwgXCJfaGlkZU5leHRNb250aEFycm93XCIsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5fX2hpZGVOZXh0TW9udGhBcnJvdzsgfSxcbiAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGJvb2wpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5fX2hpZGVOZXh0TW9udGhBcnJvdyAhPT0gYm9vbCkge1xuICAgICAgICAgICAgICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLm5leHRNb250aE5hdiwgXCJmbGF0cGlja3ItZGlzYWJsZWRcIiwgYm9vbCk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX19oaWRlTmV4dE1vbnRoQXJyb3cgPSBib29sO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudCA9IHNlbGYueWVhckVsZW1lbnRzWzBdO1xuICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgIHJldHVybiBzZWxmLm1vbnRoTmF2O1xuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZFRpbWUoKSB7XG4gICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1RpbWVcIik7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5ub0NhbGVuZGFyKVxuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5jbGFzc0xpc3QuYWRkKFwibm9DYWxlbmRhclwiKTtcbiAgICAgICAgdmFyIGRlZmF1bHRzID0gZ2V0RGVmYXVsdEhvdXJzKHNlbGYuY29uZmlnKTtcbiAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyID0gY3JlYXRlRWxlbWVudChcImRpdlwiLCBcImZsYXRwaWNrci10aW1lXCIpO1xuICAgICAgICBzZWxmLnRpbWVDb250YWluZXIudGFiSW5kZXggPSAtMTtcbiAgICAgICAgdmFyIHNlcGFyYXRvciA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLXRpbWUtc2VwYXJhdG9yXCIsIFwiOlwiKTtcbiAgICAgICAgdmFyIGhvdXJJbnB1dCA9IGNyZWF0ZU51bWJlcklucHV0KFwiZmxhdHBpY2tyLWhvdXJcIiwge1xuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHNlbGYubDEwbi5ob3VyQXJpYUxhYmVsLFxuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5ob3VyRWxlbWVudCA9IGhvdXJJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICB2YXIgbWludXRlSW5wdXQgPSBjcmVhdGVOdW1iZXJJbnB1dChcImZsYXRwaWNrci1taW51dGVcIiwge1xuICAgICAgICAgICAgXCJhcmlhLWxhYmVsXCI6IHNlbGYubDEwbi5taW51dGVBcmlhTGFiZWwsXG4gICAgICAgIH0pO1xuICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgPSBtaW51dGVJbnB1dC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpWzBdO1xuICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnRhYkluZGV4ID0gc2VsZi5taW51dGVFbGVtZW50LnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHNlbGYuaG91ckVsZW1lbnQudmFsdWUgPSBwYWQoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouZ2V0SG91cnMoKVxuICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy50aW1lXzI0aHJcbiAgICAgICAgICAgICAgICA/IGRlZmF1bHRzLmhvdXJzXG4gICAgICAgICAgICAgICAgOiBtaWxpdGFyeTJhbXBtKGRlZmF1bHRzLmhvdXJzKSk7XG4gICAgICAgIHNlbGYubWludXRlRWxlbWVudC52YWx1ZSA9IHBhZChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9ialxuICAgICAgICAgICAgPyBzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iai5nZXRNaW51dGVzKClcbiAgICAgICAgICAgIDogZGVmYXVsdHMubWludXRlcyk7XG4gICAgICAgIHNlbGYuaG91ckVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3RlcFwiLCBzZWxmLmNvbmZpZy5ob3VySW5jcmVtZW50LnRvU3RyaW5nKCkpO1xuICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwic3RlcFwiLCBzZWxmLmNvbmZpZy5taW51dGVJbmNyZW1lbnQudG9TdHJpbmcoKSk7XG4gICAgICAgIHNlbGYuaG91ckVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWluXCIsIHNlbGYuY29uZmlnLnRpbWVfMjRociA/IFwiMFwiIDogXCIxXCIpO1xuICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heFwiLCBzZWxmLmNvbmZpZy50aW1lXzI0aHIgPyBcIjIzXCIgOiBcIjEyXCIpO1xuICAgICAgICBzZWxmLmhvdXJFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heGxlbmd0aFwiLCBcIjJcIik7XG4gICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgXCIwXCIpO1xuICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibWF4XCIsIFwiNTlcIik7XG4gICAgICAgIHNlbGYubWludXRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtYXhsZW5ndGhcIiwgXCIyXCIpO1xuICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoaG91cklucHV0KTtcbiAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmFwcGVuZENoaWxkKHNlcGFyYXRvcik7XG4gICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChtaW51dGVJbnB1dCk7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy50aW1lXzI0aHIpXG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuY2xhc3NMaXN0LmFkZChcInRpbWUyNGhyXCIpO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlU2Vjb25kcykge1xuICAgICAgICAgICAgc2VsZi50aW1lQ29udGFpbmVyLmNsYXNzTGlzdC5hZGQoXCJoYXNTZWNvbmRzXCIpO1xuICAgICAgICAgICAgdmFyIHNlY29uZElucHV0ID0gY3JlYXRlTnVtYmVySW5wdXQoXCJmbGF0cGlja3Itc2Vjb25kXCIpO1xuICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50ID0gc2Vjb25kSW5wdXQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKVswXTtcbiAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC52YWx1ZSA9IHBhZChzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9ialxuICAgICAgICAgICAgICAgID8gc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmouZ2V0U2Vjb25kcygpXG4gICAgICAgICAgICAgICAgOiBkZWZhdWx0cy5zZWNvbmRzKTtcbiAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJzdGVwXCIsIHNlbGYubWludXRlRWxlbWVudC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKTtcbiAgICAgICAgICAgIHNlbGYuc2Vjb25kRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJtaW5cIiwgXCIwXCIpO1xuICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heFwiLCBcIjU5XCIpO1xuICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LnNldEF0dHJpYnV0ZShcIm1heGxlbmd0aFwiLCBcIjJcIik7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudChcInNwYW5cIiwgXCJmbGF0cGlja3ItdGltZS1zZXBhcmF0b3JcIiwgXCI6XCIpKTtcbiAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5hcHBlbmRDaGlsZChzZWNvbmRJbnB1dCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzZWxmLmNvbmZpZy50aW1lXzI0aHIpIHtcbiAgICAgICAgICAgIHNlbGYuYW1QTSA9IGNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIFwiZmxhdHBpY2tyLWFtLXBtXCIsIHNlbGYubDEwbi5hbVBNW2ludCgoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmpcbiAgICAgICAgICAgICAgICA/IHNlbGYuaG91ckVsZW1lbnQudmFsdWVcbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLmRlZmF1bHRIb3VyKSA+IDExKV0pO1xuICAgICAgICAgICAgc2VsZi5hbVBNLnRpdGxlID0gc2VsZi5sMTBuLnRvZ2dsZVRpdGxlO1xuICAgICAgICAgICAgc2VsZi5hbVBNLnRhYkluZGV4ID0gLTE7XG4gICAgICAgICAgICBzZWxmLnRpbWVDb250YWluZXIuYXBwZW5kQ2hpbGQoc2VsZi5hbVBNKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2VsZi50aW1lQ29udGFpbmVyO1xuICAgIH1cbiAgICBmdW5jdGlvbiBidWlsZFdlZWtkYXlzKCkge1xuICAgICAgICBpZiAoIXNlbGYud2Vla2RheUNvbnRhaW5lcilcbiAgICAgICAgICAgIHNlbGYud2Vla2RheUNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla2RheXNcIik7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIGNsZWFyTm9kZShzZWxmLndlZWtkYXlDb250YWluZXIpO1xuICAgICAgICBmb3IgKHZhciBpID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgaS0tOykge1xuICAgICAgICAgICAgdmFyIGNvbnRhaW5lciA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla2RheWNvbnRhaW5lclwiKTtcbiAgICAgICAgICAgIHNlbGYud2Vla2RheUNvbnRhaW5lci5hcHBlbmRDaGlsZChjb250YWluZXIpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVdlZWtkYXlzKCk7XG4gICAgICAgIHJldHVybiBzZWxmLndlZWtkYXlDb250YWluZXI7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHVwZGF0ZVdlZWtkYXlzKCkge1xuICAgICAgICBpZiAoIXNlbGYud2Vla2RheUNvbnRhaW5lcikge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBmaXJzdERheU9mV2VlayA9IHNlbGYubDEwbi5maXJzdERheU9mV2VlaztcbiAgICAgICAgdmFyIHdlZWtkYXlzID0gX19zcHJlYWRBcnJheXMoc2VsZi5sMTBuLndlZWtkYXlzLnNob3J0aGFuZCk7XG4gICAgICAgIGlmIChmaXJzdERheU9mV2VlayA+IDAgJiYgZmlyc3REYXlPZldlZWsgPCB3ZWVrZGF5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHdlZWtkYXlzID0gX19zcHJlYWRBcnJheXMod2Vla2RheXMuc3BsaWNlKGZpcnN0RGF5T2ZXZWVrLCB3ZWVrZGF5cy5sZW5ndGgpLCB3ZWVrZGF5cy5zcGxpY2UoMCwgZmlyc3REYXlPZldlZWspKTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKHZhciBpID0gc2VsZi5jb25maWcuc2hvd01vbnRoczsgaS0tOykge1xuICAgICAgICAgICAgc2VsZi53ZWVrZGF5Q29udGFpbmVyLmNoaWxkcmVuW2ldLmlubmVySFRNTCA9IFwiXFxuICAgICAgPHNwYW4gY2xhc3M9J2ZsYXRwaWNrci13ZWVrZGF5Jz5cXG4gICAgICAgIFwiICsgd2Vla2RheXMuam9pbihcIjwvc3Bhbj48c3BhbiBjbGFzcz0nZmxhdHBpY2tyLXdlZWtkYXknPlwiKSArIFwiXFxuICAgICAgPC9zcGFuPlxcbiAgICAgIFwiO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJ1aWxkV2Vla3MoKSB7XG4gICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcImhhc1dlZWtzXCIpO1xuICAgICAgICB2YXIgd2Vla1dyYXBwZXIgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIsIFwiZmxhdHBpY2tyLXdlZWt3cmFwcGVyXCIpO1xuICAgICAgICB3ZWVrV3JhcHBlci5hcHBlbmRDaGlsZChjcmVhdGVFbGVtZW50KFwic3BhblwiLCBcImZsYXRwaWNrci13ZWVrZGF5XCIsIHNlbGYubDEwbi53ZWVrQWJicmV2aWF0aW9uKSk7XG4gICAgICAgIHZhciB3ZWVrTnVtYmVycyA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIiwgXCJmbGF0cGlja3Itd2Vla3NcIik7XG4gICAgICAgIHdlZWtXcmFwcGVyLmFwcGVuZENoaWxkKHdlZWtOdW1iZXJzKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdlZWtXcmFwcGVyOiB3ZWVrV3JhcHBlcixcbiAgICAgICAgICAgIHdlZWtOdW1iZXJzOiB3ZWVrTnVtYmVycyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2hhbmdlTW9udGgodmFsdWUsIGlzT2Zmc2V0KSB7XG4gICAgICAgIGlmIChpc09mZnNldCA9PT0gdm9pZCAwKSB7IGlzT2Zmc2V0ID0gdHJ1ZTsgfVxuICAgICAgICB2YXIgZGVsdGEgPSBpc09mZnNldCA/IHZhbHVlIDogdmFsdWUgLSBzZWxmLmN1cnJlbnRNb250aDtcbiAgICAgICAgaWYgKChkZWx0YSA8IDAgJiYgc2VsZi5faGlkZVByZXZNb250aEFycm93ID09PSB0cnVlKSB8fFxuICAgICAgICAgICAgKGRlbHRhID4gMCAmJiBzZWxmLl9oaWRlTmV4dE1vbnRoQXJyb3cgPT09IHRydWUpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArPSBkZWx0YTtcbiAgICAgICAgaWYgKHNlbGYuY3VycmVudE1vbnRoIDwgMCB8fCBzZWxmLmN1cnJlbnRNb250aCA+IDExKSB7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyICs9IHNlbGYuY3VycmVudE1vbnRoID4gMTEgPyAxIDogLTE7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCA9IChzZWxmLmN1cnJlbnRNb250aCArIDEyKSAlIDEyO1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25ZZWFyQ2hhbmdlXCIpO1xuICAgICAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICB9XG4gICAgICAgIGJ1aWxkRGF5cygpO1xuICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk1vbnRoQ2hhbmdlXCIpO1xuICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNsZWFyKHRyaWdnZXJDaGFuZ2VFdmVudCwgdG9Jbml0aWFsKSB7XG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQgPT09IHZvaWQgMCkgeyB0cmlnZ2VyQ2hhbmdlRXZlbnQgPSB0cnVlOyB9XG4gICAgICAgIGlmICh0b0luaXRpYWwgPT09IHZvaWQgMCkgeyB0b0luaXRpYWwgPSB0cnVlOyB9XG4gICAgICAgIHNlbGYuaW5wdXQudmFsdWUgPSBcIlwiO1xuICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC52YWx1ZSA9IFwiXCI7XG4gICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID0gXCJcIjtcbiAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gW107XG4gICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID0gdW5kZWZpbmVkO1xuICAgICAgICBpZiAodG9Jbml0aWFsID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID0gc2VsZi5faW5pdGlhbERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZi5faW5pdGlhbERhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgdmFyIF9hID0gZ2V0RGVmYXVsdEhvdXJzKHNlbGYuY29uZmlnKSwgaG91cnMgPSBfYS5ob3VycywgbWludXRlcyA9IF9hLm1pbnV0ZXMsIHNlY29uZHMgPSBfYS5zZWNvbmRzO1xuICAgICAgICAgICAgc2V0SG91cnMoaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMpO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlRXZlbnQpXG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkNoYW5nZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY2xvc2UoKSB7XG4gICAgICAgIHNlbGYuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIGlmICghc2VsZi5pc01vYmlsZSkge1xuICAgICAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZShcIm9wZW5cIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc2VsZi5faW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmNsYXNzTGlzdC5yZW1vdmUoXCJhY3RpdmVcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DbG9zZVwiKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbkRlc3Ryb3lcIik7XG4gICAgICAgIGZvciAodmFyIGkgPSBzZWxmLl9oYW5kbGVycy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgIHNlbGYuX2hhbmRsZXJzW2ldLnJlbW92ZSgpO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuX2hhbmRsZXJzID0gW107XG4gICAgICAgIGlmIChzZWxmLm1vYmlsZUlucHV0KSB7XG4gICAgICAgICAgICBpZiAoc2VsZi5tb2JpbGVJbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLm1vYmlsZUlucHV0KTtcbiAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2VsZi5jYWxlbmRhckNvbnRhaW5lciAmJiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5zdGF0aWMgJiYgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5wYXJlbnROb2RlKSB7XG4gICAgICAgICAgICAgICAgdmFyIHdyYXBwZXIgPSBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnBhcmVudE5vZGU7XG4gICAgICAgICAgICAgICAgd3JhcHBlci5sYXN0Q2hpbGQgJiYgd3JhcHBlci5yZW1vdmVDaGlsZCh3cmFwcGVyLmxhc3RDaGlsZCk7XG4gICAgICAgICAgICAgICAgaWYgKHdyYXBwZXIucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAod3JhcHBlci5maXJzdENoaWxkKVxuICAgICAgICAgICAgICAgICAgICAgICAgd3JhcHBlci5wYXJlbnROb2RlLmluc2VydEJlZm9yZSh3cmFwcGVyLmZpcnN0Q2hpbGQsIHdyYXBwZXIpO1xuICAgICAgICAgICAgICAgICAgICB3cmFwcGVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQod3JhcHBlcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLmNhbGVuZGFyQ29udGFpbmVyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dCkge1xuICAgICAgICAgICAgc2VsZi5pbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICBpZiAoc2VsZi5hbHRJbnB1dC5wYXJlbnROb2RlKVxuICAgICAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzZWxmLmFsdElucHV0KTtcbiAgICAgICAgICAgIGRlbGV0ZSBzZWxmLmFsdElucHV0O1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmlucHV0KSB7XG4gICAgICAgICAgICBzZWxmLmlucHV0LnR5cGUgPSBzZWxmLmlucHV0Ll90eXBlO1xuICAgICAgICAgICAgc2VsZi5pbnB1dC5jbGFzc0xpc3QucmVtb3ZlKFwiZmxhdHBpY2tyLWlucHV0XCIpO1xuICAgICAgICAgICAgc2VsZi5pbnB1dC5yZW1vdmVBdHRyaWJ1dGUoXCJyZWFkb25seVwiKTtcbiAgICAgICAgfVxuICAgICAgICBbXG4gICAgICAgICAgICBcIl9zaG93VGltZUlucHV0XCIsXG4gICAgICAgICAgICBcImxhdGVzdFNlbGVjdGVkRGF0ZU9ialwiLFxuICAgICAgICAgICAgXCJfaGlkZU5leHRNb250aEFycm93XCIsXG4gICAgICAgICAgICBcIl9oaWRlUHJldk1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgIFwiX19oaWRlTmV4dE1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgIFwiX19oaWRlUHJldk1vbnRoQXJyb3dcIixcbiAgICAgICAgICAgIFwiaXNNb2JpbGVcIixcbiAgICAgICAgICAgIFwiaXNPcGVuXCIsXG4gICAgICAgICAgICBcInNlbGVjdGVkRGF0ZUVsZW1cIixcbiAgICAgICAgICAgIFwibWluRGF0ZUhhc1RpbWVcIixcbiAgICAgICAgICAgIFwibWF4RGF0ZUhhc1RpbWVcIixcbiAgICAgICAgICAgIFwiZGF5c1wiLFxuICAgICAgICAgICAgXCJkYXlzQ29udGFpbmVyXCIsXG4gICAgICAgICAgICBcIl9pbnB1dFwiLFxuICAgICAgICAgICAgXCJfcG9zaXRpb25FbGVtZW50XCIsXG4gICAgICAgICAgICBcImlubmVyQ29udGFpbmVyXCIsXG4gICAgICAgICAgICBcInJDb250YWluZXJcIixcbiAgICAgICAgICAgIFwibW9udGhOYXZcIixcbiAgICAgICAgICAgIFwidG9kYXlEYXRlRWxlbVwiLFxuICAgICAgICAgICAgXCJjYWxlbmRhckNvbnRhaW5lclwiLFxuICAgICAgICAgICAgXCJ3ZWVrZGF5Q29udGFpbmVyXCIsXG4gICAgICAgICAgICBcInByZXZNb250aE5hdlwiLFxuICAgICAgICAgICAgXCJuZXh0TW9udGhOYXZcIixcbiAgICAgICAgICAgIFwibW9udGhzRHJvcGRvd25Db250YWluZXJcIixcbiAgICAgICAgICAgIFwiY3VycmVudE1vbnRoRWxlbWVudFwiLFxuICAgICAgICAgICAgXCJjdXJyZW50WWVhckVsZW1lbnRcIixcbiAgICAgICAgICAgIFwibmF2aWdhdGlvbkN1cnJlbnRNb250aFwiLFxuICAgICAgICAgICAgXCJzZWxlY3RlZERhdGVFbGVtXCIsXG4gICAgICAgICAgICBcImNvbmZpZ1wiLFxuICAgICAgICBdLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHNlbGZba107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXRjaCAoXykgeyB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0NhbGVuZGFyRWxlbShlbGVtKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLmNvbnRhaW5zKGVsZW0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkb2N1bWVudENsaWNrKGUpIHtcbiAgICAgICAgaWYgKHNlbGYuaXNPcGVuICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpIHtcbiAgICAgICAgICAgIHZhciBldmVudFRhcmdldF8xID0gZ2V0RXZlbnRUYXJnZXQoZSk7XG4gICAgICAgICAgICB2YXIgaXNDYWxlbmRhckVsZW1lbnQgPSBpc0NhbGVuZGFyRWxlbShldmVudFRhcmdldF8xKTtcbiAgICAgICAgICAgIHZhciBpc0lucHV0ID0gZXZlbnRUYXJnZXRfMSA9PT0gc2VsZi5pbnB1dCB8fFxuICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0XzEgPT09IHNlbGYuYWx0SW5wdXQgfHxcbiAgICAgICAgICAgICAgICBzZWxmLmVsZW1lbnQuY29udGFpbnMoZXZlbnRUYXJnZXRfMSkgfHxcbiAgICAgICAgICAgICAgICAoZS5wYXRoICYmXG4gICAgICAgICAgICAgICAgICAgIGUucGF0aC5pbmRleE9mICYmXG4gICAgICAgICAgICAgICAgICAgICh+ZS5wYXRoLmluZGV4T2Yoc2VsZi5pbnB1dCkgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIH5lLnBhdGguaW5kZXhPZihzZWxmLmFsdElucHV0KSkpO1xuICAgICAgICAgICAgdmFyIGxvc3RGb2N1cyA9ICFpc0lucHV0ICYmXG4gICAgICAgICAgICAgICAgIWlzQ2FsZW5kYXJFbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgIWlzQ2FsZW5kYXJFbGVtKGUucmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgICB2YXIgaXNJZ25vcmVkID0gIXNlbGYuY29uZmlnLmlnbm9yZWRGb2N1c0VsZW1lbnRzLnNvbWUoZnVuY3Rpb24gKGVsZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbS5jb250YWlucyhldmVudFRhcmdldF8xKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGxvc3RGb2N1cyAmJiBpc0lnbm9yZWQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLnNldERhdGUoc2VsZi5faW5wdXQudmFsdWUsIGZhbHNlLCBzZWxmLmNvbmZpZy5hbHRJbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hbHRGb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxmLnRpbWVDb250YWluZXIgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5pbnB1dC52YWx1ZSAhPT0gXCJcIiAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVGltZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1vZGUgPT09IFwicmFuZ2VcIiAmJlxuICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAxKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjaGFuZ2VZZWFyKG5ld1llYXIpIHtcbiAgICAgICAgaWYgKCFuZXdZZWFyIHx8XG4gICAgICAgICAgICAoc2VsZi5jb25maWcubWluRGF0ZSAmJiBuZXdZZWFyIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKSB8fFxuICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1heERhdGUgJiYgbmV3WWVhciA+IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHZhciBuZXdZZWFyTnVtID0gbmV3WWVhciwgaXNOZXdZZWFyID0gc2VsZi5jdXJyZW50WWVhciAhPT0gbmV3WWVhck51bTtcbiAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IG5ld1llYXJOdW0gfHwgc2VsZi5jdXJyZW50WWVhcjtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1heERhdGUgJiZcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPT09IHNlbGYuY29uZmlnLm1heERhdGUuZ2V0RnVsbFllYXIoKSkge1xuICAgICAgICAgICAgc2VsZi5jdXJyZW50TW9udGggPSBNYXRoLm1pbihzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1vbnRoKCksIHNlbGYuY3VycmVudE1vbnRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKCkpIHtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gTWF0aC5tYXgoc2VsZi5jb25maWcubWluRGF0ZS5nZXRNb250aCgpLCBzZWxmLmN1cnJlbnRNb250aCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmV3WWVhcikge1xuICAgICAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uWWVhckNoYW5nZVwiKTtcbiAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VuYWJsZWQoZGF0ZSwgdGltZWxlc3MpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAodGltZWxlc3MgPT09IHZvaWQgMCkgeyB0aW1lbGVzcyA9IHRydWU7IH1cbiAgICAgICAgdmFyIGRhdGVUb0NoZWNrID0gc2VsZi5wYXJzZURhdGUoZGF0ZSwgdW5kZWZpbmVkLCB0aW1lbGVzcyk7XG4gICAgICAgIGlmICgoc2VsZi5jb25maWcubWluRGF0ZSAmJlxuICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgJiZcbiAgICAgICAgICAgIGNvbXBhcmVEYXRlcyhkYXRlVG9DaGVjaywgc2VsZi5jb25maWcubWluRGF0ZSwgdGltZWxlc3MgIT09IHVuZGVmaW5lZCA/IHRpbWVsZXNzIDogIXNlbGYubWluRGF0ZUhhc1RpbWUpIDwgMCkgfHxcbiAgICAgICAgICAgIChzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZVRvQ2hlY2ssIHNlbGYuY29uZmlnLm1heERhdGUsIHRpbWVsZXNzICE9PSB1bmRlZmluZWQgPyB0aW1lbGVzcyA6ICFzZWxmLm1heERhdGVIYXNUaW1lKSA+IDApKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICBpZiAoIXNlbGYuY29uZmlnLmVuYWJsZSAmJiBzZWxmLmNvbmZpZy5kaXNhYmxlLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICBpZiAoZGF0ZVRvQ2hlY2sgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgdmFyIGJvb2wgPSAhIXNlbGYuY29uZmlnLmVuYWJsZSwgYXJyYXkgPSAoX2EgPSBzZWxmLmNvbmZpZy5lbmFibGUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHNlbGYuY29uZmlnLmRpc2FibGU7XG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBkID0gdm9pZCAwOyBpIDwgYXJyYXkubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGQgPSBhcnJheVtpXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZCA9PT0gXCJmdW5jdGlvblwiICYmXG4gICAgICAgICAgICAgICAgZChkYXRlVG9DaGVjaykpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGJvb2w7XG4gICAgICAgICAgICBlbHNlIGlmIChkIGluc3RhbmNlb2YgRGF0ZSAmJlxuICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICBkLmdldFRpbWUoKSA9PT0gZGF0ZVRvQ2hlY2suZ2V0VGltZSgpKVxuICAgICAgICAgICAgICAgIHJldHVybiBib29sO1xuICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIGQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VkID0gc2VsZi5wYXJzZURhdGUoZCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VkICYmIHBhcnNlZC5nZXRUaW1lKCkgPT09IGRhdGVUb0NoZWNrLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICA/IGJvb2xcbiAgICAgICAgICAgICAgICAgICAgOiAhYm9vbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBkID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgZGF0ZVRvQ2hlY2sgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIGQuZnJvbSAmJlxuICAgICAgICAgICAgICAgIGQudG8gJiZcbiAgICAgICAgICAgICAgICBkYXRlVG9DaGVjay5nZXRUaW1lKCkgPj0gZC5mcm9tLmdldFRpbWUoKSAmJlxuICAgICAgICAgICAgICAgIGRhdGVUb0NoZWNrLmdldFRpbWUoKSA8PSBkLnRvLmdldFRpbWUoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gYm9vbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gIWJvb2w7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzSW5WaWV3KGVsZW0pIHtcbiAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuIChlbGVtLmNsYXNzTmFtZS5pbmRleE9mKFwiaGlkZGVuXCIpID09PSAtMSAmJlxuICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NOYW1lLmluZGV4T2YoXCJmbGF0cGlja3ItZGlzYWJsZWRcIikgPT09IC0xICYmXG4gICAgICAgICAgICAgICAgc2VsZi5kYXlzQ29udGFpbmVyLmNvbnRhaW5zKGVsZW0pKTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbkJsdXIoZSkge1xuICAgICAgICB2YXIgaXNJbnB1dCA9IGUudGFyZ2V0ID09PSBzZWxmLl9pbnB1dDtcbiAgICAgICAgdmFyIHZhbHVlQ2hhbmdlZCA9IHNlbGYuX2lucHV0LnZhbHVlLnRyaW1FbmQoKSAhPT0gZ2V0RGF0ZVN0cigpO1xuICAgICAgICBpZiAoaXNJbnB1dCAmJlxuICAgICAgICAgICAgdmFsdWVDaGFuZ2VkICYmXG4gICAgICAgICAgICAhKGUucmVsYXRlZFRhcmdldCAmJiBpc0NhbGVuZGFyRWxlbShlLnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgICAgICAgc2VsZi5zZXREYXRlKHNlbGYuX2lucHV0LnZhbHVlLCB0cnVlLCBlLnRhcmdldCA9PT0gc2VsZi5hbHRJbnB1dFxuICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcuYWx0Rm9ybWF0XG4gICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBvbktleURvd24oZSkge1xuICAgICAgICB2YXIgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChlKTtcbiAgICAgICAgdmFyIGlzSW5wdXQgPSBzZWxmLmNvbmZpZy53cmFwXG4gICAgICAgICAgICA/IGVsZW1lbnQuY29udGFpbnMoZXZlbnRUYXJnZXQpXG4gICAgICAgICAgICA6IGV2ZW50VGFyZ2V0ID09PSBzZWxmLl9pbnB1dDtcbiAgICAgICAgdmFyIGFsbG93SW5wdXQgPSBzZWxmLmNvbmZpZy5hbGxvd0lucHV0O1xuICAgICAgICB2YXIgYWxsb3dLZXlkb3duID0gc2VsZi5pc09wZW4gJiYgKCFhbGxvd0lucHV0IHx8ICFpc0lucHV0KTtcbiAgICAgICAgdmFyIGFsbG93SW5saW5lS2V5ZG93biA9IHNlbGYuY29uZmlnLmlubGluZSAmJiBpc0lucHV0ICYmICFhbGxvd0lucHV0O1xuICAgICAgICBpZiAoZS5rZXlDb2RlID09PSAxMyAmJiBpc0lucHV0KSB7XG4gICAgICAgICAgICBpZiAoYWxsb3dJbnB1dCkge1xuICAgICAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShzZWxmLl9pbnB1dC52YWx1ZSwgdHJ1ZSwgZXZlbnRUYXJnZXQgPT09IHNlbGYuYWx0SW5wdXRcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5hbHRGb3JtYXRcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgICAgICAgICBzZWxmLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50VGFyZ2V0LmJsdXIoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHNlbGYub3BlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ2FsZW5kYXJFbGVtKGV2ZW50VGFyZ2V0KSB8fFxuICAgICAgICAgICAgYWxsb3dLZXlkb3duIHx8XG4gICAgICAgICAgICBhbGxvd0lubGluZUtleWRvd24pIHtcbiAgICAgICAgICAgIHZhciBpc1RpbWVPYmogPSAhIXNlbGYudGltZUNvbnRhaW5lciAmJlxuICAgICAgICAgICAgICAgIHNlbGYudGltZUNvbnRhaW5lci5jb250YWlucyhldmVudFRhcmdldCk7XG4gICAgICAgICAgICBzd2l0Y2ggKGUua2V5Q29kZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgMTM6XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1RpbWVPYmopIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVRpbWUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3REYXRlKGUpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDI3OlxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgIGZvY3VzQW5kQ2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA4OlxuICAgICAgICAgICAgICAgIGNhc2UgNDY6XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0lucHV0ICYmICFzZWxmLmNvbmZpZy5hbGxvd0lucHV0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmNsZWFyKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAzNzpcbiAgICAgICAgICAgICAgICBjYXNlIDM5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVGltZU9iaiAmJiAhaXNJbnB1dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFjdGl2ZUVsZW1lbnQgPSBnZXRDbG9zZXN0QWN0aXZlRWxlbWVudCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGYuZGF5c0NvbnRhaW5lciAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFsbG93SW5wdXQgPT09IGZhbHNlIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhY3RpdmVFbGVtZW50ICYmIGlzSW5WaWV3KGFjdGl2ZUVsZW1lbnQpKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGVsdGFfMSA9IGUua2V5Q29kZSA9PT0gMzkgPyAxIDogLTE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlLmN0cmxLZXkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkodW5kZWZpbmVkLCBkZWx0YV8xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlTW9udGgoZGVsdGFfMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzT25EYXkoZ2V0Rmlyc3RBdmFpbGFibGVEYXkoMSksIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzZWxmLmhvdXJFbGVtZW50KVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIDM4OlxuICAgICAgICAgICAgICAgIGNhc2UgNDA6XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gZS5rZXlDb2RlID09PSA0MCA/IDEgOiAtMTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKChzZWxmLmRheXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50VGFyZ2V0LiRpICE9PSB1bmRlZmluZWQpIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldCA9PT0gc2VsZi5pbnB1dCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRUYXJnZXQgPT09IHNlbGYuYWx0SW5wdXQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciAtIGRlbHRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb2N1c09uRGF5KGdldEZpcnN0QXZhaWxhYmxlRGF5KDEpLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFpc1RpbWVPYmopXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9jdXNPbkRheSh1bmRlZmluZWQsIGRlbHRhICogNyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnRUYXJnZXQgPT09IHNlbGYuY3VycmVudFllYXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VZZWFyKHNlbGYuY3VycmVudFllYXIgLSBkZWx0YSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2VsZi5jb25maWcuZW5hYmxlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc1RpbWVPYmogJiYgc2VsZi5ob3VyRWxlbWVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVUaW1lKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGVib3VuY2VkQ2hhbmdlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA5OlxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNUaW1lT2JqKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbXMgPSBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5ob3VyRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1pbnV0ZUVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWNvbmRFbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTSxcbiAgICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuY29uY2F0KHNlbGYucGx1Z2luRWxlbWVudHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geDsgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaSA9IGVsZW1zLmluZGV4T2YoZXZlbnRUYXJnZXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRhcmdldCA9IGVsZW1zW2kgKyAoZS5zaGlmdEtleSA/IC0xIDogMSldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGFyZ2V0IHx8IHNlbGYuX2lucHV0KS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFzZWxmLmNvbmZpZy5ub0NhbGVuZGFyICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmRheXNDb250YWluZXIgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGF5c0NvbnRhaW5lci5jb250YWlucyhldmVudFRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc2hpZnRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuYW1QTSAhPT0gdW5kZWZpbmVkICYmIGV2ZW50VGFyZ2V0ID09PSBzZWxmLmFtUE0pIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZS5rZXkpIHtcbiAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzBdLmNoYXJBdCgwKTpcbiAgICAgICAgICAgICAgICBjYXNlIHNlbGYubDEwbi5hbVBNWzBdLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpOlxuICAgICAgICAgICAgICAgICAgICBzZWxmLmFtUE0udGV4dENvbnRlbnQgPSBzZWxmLmwxMG4uYW1QTVswXTtcbiAgICAgICAgICAgICAgICAgICAgc2V0SG91cnNGcm9tSW5wdXRzKCk7XG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVZhbHVlKCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2Ugc2VsZi5sMTBuLmFtUE1bMV0uY2hhckF0KDApOlxuICAgICAgICAgICAgICAgIGNhc2Ugc2VsZi5sMTBuLmFtUE1bMV0uY2hhckF0KDApLnRvTG93ZXJDYXNlKCk6XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9IHNlbGYubDEwbi5hbVBNWzFdO1xuICAgICAgICAgICAgICAgICAgICBzZXRIb3Vyc0Zyb21JbnB1dHMoKTtcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSW5wdXQgfHwgaXNDYWxlbmRhckVsZW0oZXZlbnRUYXJnZXQpKSB7XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbktleURvd25cIiwgZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gb25Nb3VzZU92ZXIoZWxlbSwgY2VsbENsYXNzKSB7XG4gICAgICAgIGlmIChjZWxsQ2xhc3MgPT09IHZvaWQgMCkgeyBjZWxsQ2xhc3MgPSBcImZsYXRwaWNrci1kYXlcIjsgfVxuICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCAhPT0gMSB8fFxuICAgICAgICAgICAgKGVsZW0gJiZcbiAgICAgICAgICAgICAgICAoIWVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKGNlbGxDbGFzcykgfHxcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuY29udGFpbnMoXCJmbGF0cGlja3ItZGlzYWJsZWRcIikpKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGhvdmVyRGF0ZSA9IGVsZW1cbiAgICAgICAgICAgID8gZWxlbS5kYXRlT2JqLmdldFRpbWUoKVxuICAgICAgICAgICAgOiBzZWxmLmRheXMuZmlyc3RFbGVtZW50Q2hpbGQuZGF0ZU9iai5nZXRUaW1lKCksIGluaXRpYWxEYXRlID0gc2VsZi5wYXJzZURhdGUoc2VsZi5zZWxlY3RlZERhdGVzWzBdLCB1bmRlZmluZWQsIHRydWUpLmdldFRpbWUoKSwgcmFuZ2VTdGFydERhdGUgPSBNYXRoLm1pbihob3ZlckRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXS5nZXRUaW1lKCkpLCByYW5nZUVuZERhdGUgPSBNYXRoLm1heChob3ZlckRhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXS5nZXRUaW1lKCkpO1xuICAgICAgICB2YXIgY29udGFpbnNEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICB2YXIgbWluUmFuZ2UgPSAwLCBtYXhSYW5nZSA9IDA7XG4gICAgICAgIGZvciAodmFyIHQgPSByYW5nZVN0YXJ0RGF0ZTsgdCA8IHJhbmdlRW5kRGF0ZTsgdCArPSBkdXJhdGlvbi5EQVkpIHtcbiAgICAgICAgICAgIGlmICghaXNFbmFibGVkKG5ldyBEYXRlKHQpLCB0cnVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnRhaW5zRGlzYWJsZWQgPVxuICAgICAgICAgICAgICAgICAgICBjb250YWluc0Rpc2FibGVkIHx8ICh0ID4gcmFuZ2VTdGFydERhdGUgJiYgdCA8IHJhbmdlRW5kRGF0ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHQgPCBpbml0aWFsRGF0ZSAmJiAoIW1pblJhbmdlIHx8IHQgPiBtaW5SYW5nZSkpXG4gICAgICAgICAgICAgICAgICAgIG1pblJhbmdlID0gdDtcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0ID4gaW5pdGlhbERhdGUgJiYgKCFtYXhSYW5nZSB8fCB0IDwgbWF4UmFuZ2UpKVxuICAgICAgICAgICAgICAgICAgICBtYXhSYW5nZSA9IHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdmFyIGhvdmVyYWJsZUNlbGxzID0gQXJyYXkuZnJvbShzZWxmLnJDb250YWluZXIucXVlcnlTZWxlY3RvckFsbChcIio6bnRoLWNoaWxkKC1uK1wiICsgc2VsZi5jb25maWcuc2hvd01vbnRocyArIFwiKSA+IC5cIiArIGNlbGxDbGFzcykpO1xuICAgICAgICBob3ZlcmFibGVDZWxscy5mb3JFYWNoKGZ1bmN0aW9uIChkYXlFbGVtKSB7XG4gICAgICAgICAgICB2YXIgZGF0ZSA9IGRheUVsZW0uZGF0ZU9iajtcbiAgICAgICAgICAgIHZhciB0aW1lc3RhbXAgPSBkYXRlLmdldFRpbWUoKTtcbiAgICAgICAgICAgIHZhciBvdXRPZlJhbmdlID0gKG1pblJhbmdlID4gMCAmJiB0aW1lc3RhbXAgPCBtaW5SYW5nZSkgfHxcbiAgICAgICAgICAgICAgICAobWF4UmFuZ2UgPiAwICYmIHRpbWVzdGFtcCA+IG1heFJhbmdlKTtcbiAgICAgICAgICAgIGlmIChvdXRPZlJhbmdlKSB7XG4gICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwibm90QWxsb3dlZFwiKTtcbiAgICAgICAgICAgICAgICBbXCJpblJhbmdlXCIsIFwic3RhcnRSYW5nZVwiLCBcImVuZFJhbmdlXCJdLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QucmVtb3ZlKGMpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRhaW5zRGlzYWJsZWQgJiYgIW91dE9mUmFuZ2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgW1wic3RhcnRSYW5nZVwiLCBcImluUmFuZ2VcIiwgXCJlbmRSYW5nZVwiLCBcIm5vdEFsbG93ZWRcIl0uZm9yRWFjaChmdW5jdGlvbiAoYykge1xuICAgICAgICAgICAgICAgIGRheUVsZW0uY2xhc3NMaXN0LnJlbW92ZShjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGVsZW0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChob3ZlckRhdGUgPD0gc2VsZi5zZWxlY3RlZERhdGVzWzBdLmdldFRpbWUoKVxuICAgICAgICAgICAgICAgICAgICA/IFwic3RhcnRSYW5nZVwiXG4gICAgICAgICAgICAgICAgICAgIDogXCJlbmRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5pdGlhbERhdGUgPCBob3ZlckRhdGUgJiYgdGltZXN0YW1wID09PSBpbml0aWFsRGF0ZSlcbiAgICAgICAgICAgICAgICAgICAgZGF5RWxlbS5jbGFzc0xpc3QuYWRkKFwic3RhcnRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpbml0aWFsRGF0ZSA+IGhvdmVyRGF0ZSAmJiB0aW1lc3RhbXAgPT09IGluaXRpYWxEYXRlKVxuICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5hZGQoXCJlbmRSYW5nZVwiKTtcbiAgICAgICAgICAgICAgICBpZiAodGltZXN0YW1wID49IG1pblJhbmdlICYmXG4gICAgICAgICAgICAgICAgICAgIChtYXhSYW5nZSA9PT0gMCB8fCB0aW1lc3RhbXAgPD0gbWF4UmFuZ2UpICYmXG4gICAgICAgICAgICAgICAgICAgIGlzQmV0d2Vlbih0aW1lc3RhbXAsIGluaXRpYWxEYXRlLCBob3ZlckRhdGUpKVxuICAgICAgICAgICAgICAgICAgICBkYXlFbGVtLmNsYXNzTGlzdC5hZGQoXCJpblJhbmdlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gb25SZXNpemUoKSB7XG4gICAgICAgIGlmIChzZWxmLmlzT3BlbiAmJiAhc2VsZi5jb25maWcuc3RhdGljICYmICFzZWxmLmNvbmZpZy5pbmxpbmUpXG4gICAgICAgICAgICBwb3NpdGlvbkNhbGVuZGFyKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG9wZW4oZSwgcG9zaXRpb25FbGVtZW50KSB7XG4gICAgICAgIGlmIChwb3NpdGlvbkVsZW1lbnQgPT09IHZvaWQgMCkgeyBwb3NpdGlvbkVsZW1lbnQgPSBzZWxmLl9wb3NpdGlvbkVsZW1lbnQ7IH1cbiAgICAgICAgaWYgKHNlbGYuaXNNb2JpbGUgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChlKSB7XG4gICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIHZhciBldmVudFRhcmdldCA9IGdldEV2ZW50VGFyZ2V0KGUpO1xuICAgICAgICAgICAgICAgIGlmIChldmVudFRhcmdldCkge1xuICAgICAgICAgICAgICAgICAgICBldmVudFRhcmdldC5ibHVyKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNlbGYubW9iaWxlSW5wdXQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0LmNsaWNrKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvbk9wZW5cIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc2VsZi5faW5wdXQuZGlzYWJsZWQgfHwgc2VsZi5jb25maWcuaW5saW5lKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdmFyIHdhc09wZW4gPSBzZWxmLmlzT3BlbjtcbiAgICAgICAgc2VsZi5pc09wZW4gPSB0cnVlO1xuICAgICAgICBpZiAoIXdhc09wZW4pIHtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2xhc3NMaXN0LmFkZChcIm9wZW5cIik7XG4gICAgICAgICAgICBzZWxmLl9pbnB1dC5jbGFzc0xpc3QuYWRkKFwiYWN0aXZlXCIpO1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25PcGVuXCIpO1xuICAgICAgICAgICAgcG9zaXRpb25DYWxlbmRhcihwb3NpdGlvbkVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5lbmFibGVUaW1lID09PSB0cnVlICYmIHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgPT09IHRydWUpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLmNvbmZpZy5hbGxvd0lucHV0ID09PSBmYWxzZSAmJlxuICAgICAgICAgICAgICAgIChlID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgICAgICAgIXNlbGYudGltZUNvbnRhaW5lci5jb250YWlucyhlLnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5ob3VyRWxlbWVudC5zZWxlY3QoKTsgfSwgNTApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIG1pbk1heERhdGVTZXR0ZXIodHlwZSkge1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUpIHtcbiAgICAgICAgICAgIHZhciBkYXRlT2JqID0gKHNlbGYuY29uZmlnW1wiX1wiICsgdHlwZSArIFwiRGF0ZVwiXSA9IHNlbGYucGFyc2VEYXRlKGRhdGUsIHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpKTtcbiAgICAgICAgICAgIHZhciBpbnZlcnNlRGF0ZU9iaiA9IHNlbGYuY29uZmlnW1wiX1wiICsgKHR5cGUgPT09IFwibWluXCIgPyBcIm1heFwiIDogXCJtaW5cIikgKyBcIkRhdGVcIl07XG4gICAgICAgICAgICBpZiAoZGF0ZU9iaiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgc2VsZlt0eXBlID09PSBcIm1pblwiID8gXCJtaW5EYXRlSGFzVGltZVwiIDogXCJtYXhEYXRlSGFzVGltZVwiXSA9XG4gICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0SG91cnMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVPYmouZ2V0TWludXRlcygpID4gMCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iai5nZXRTZWNvbmRzKCkgPiAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcykge1xuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcyA9IHNlbGYuc2VsZWN0ZWREYXRlcy5maWx0ZXIoZnVuY3Rpb24gKGQpIHsgcmV0dXJuIGlzRW5hYmxlZChkKTsgfSk7XG4gICAgICAgICAgICAgICAgaWYgKCFzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoICYmIHR5cGUgPT09IFwibWluXCIpXG4gICAgICAgICAgICAgICAgICAgIHNldEhvdXJzRnJvbURhdGUoZGF0ZU9iaik7XG4gICAgICAgICAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChzZWxmLmRheXNDb250YWluZXIpIHtcbiAgICAgICAgICAgICAgICByZWRyYXcoKTtcbiAgICAgICAgICAgICAgICBpZiAoZGF0ZU9iaiAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRZZWFyRWxlbWVudFt0eXBlXSA9IGRhdGVPYmouZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jdXJyZW50WWVhckVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKHR5cGUpO1xuICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXJFbGVtZW50LmRpc2FibGVkID1cbiAgICAgICAgICAgICAgICAgICAgISFpbnZlcnNlRGF0ZU9iaiAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0ZU9iaiAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZlcnNlRGF0ZU9iai5nZXRGdWxsWWVhcigpID09PSBkYXRlT2JqLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlQ29uZmlnKCkge1xuICAgICAgICB2YXIgYm9vbE9wdHMgPSBbXG4gICAgICAgICAgICBcIndyYXBcIixcbiAgICAgICAgICAgIFwid2Vla051bWJlcnNcIixcbiAgICAgICAgICAgIFwiYWxsb3dJbnB1dFwiLFxuICAgICAgICAgICAgXCJhbGxvd0ludmFsaWRQcmVsb2FkXCIsXG4gICAgICAgICAgICBcImNsaWNrT3BlbnNcIixcbiAgICAgICAgICAgIFwidGltZV8yNGhyXCIsXG4gICAgICAgICAgICBcImVuYWJsZVRpbWVcIixcbiAgICAgICAgICAgIFwibm9DYWxlbmRhclwiLFxuICAgICAgICAgICAgXCJhbHRJbnB1dFwiLFxuICAgICAgICAgICAgXCJzaG9ydGhhbmRDdXJyZW50TW9udGhcIixcbiAgICAgICAgICAgIFwiaW5saW5lXCIsXG4gICAgICAgICAgICBcInN0YXRpY1wiLFxuICAgICAgICAgICAgXCJlbmFibGVTZWNvbmRzXCIsXG4gICAgICAgICAgICBcImRpc2FibGVNb2JpbGVcIixcbiAgICAgICAgXTtcbiAgICAgICAgdmFyIHVzZXJDb25maWcgPSBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShlbGVtZW50LmRhdGFzZXQgfHwge30pKSksIGluc3RhbmNlQ29uZmlnKTtcbiAgICAgICAgdmFyIGZvcm1hdHMgPSB7fTtcbiAgICAgICAgc2VsZi5jb25maWcucGFyc2VEYXRlID0gdXNlckNvbmZpZy5wYXJzZURhdGU7XG4gICAgICAgIHNlbGYuY29uZmlnLmZvcm1hdERhdGUgPSB1c2VyQ29uZmlnLmZvcm1hdERhdGU7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJlbmFibGVcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fZW5hYmxlOyB9LFxuICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoZGF0ZXMpIHtcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5fZW5hYmxlID0gcGFyc2VEYXRlUnVsZXMoZGF0ZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzZWxmLmNvbmZpZywgXCJkaXNhYmxlXCIsIHtcbiAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gc2VsZi5jb25maWcuX2Rpc2FibGU7IH0sXG4gICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChkYXRlcykge1xuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLl9kaXNhYmxlID0gcGFyc2VEYXRlUnVsZXMoZGF0ZXMpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciB0aW1lTW9kZSA9IHVzZXJDb25maWcubW9kZSA9PT0gXCJ0aW1lXCI7XG4gICAgICAgIGlmICghdXNlckNvbmZpZy5kYXRlRm9ybWF0ICYmICh1c2VyQ29uZmlnLmVuYWJsZVRpbWUgfHwgdGltZU1vZGUpKSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdERhdGVGb3JtYXQgPSBmbGF0cGlja3IuZGVmYXVsdENvbmZpZy5kYXRlRm9ybWF0IHx8IGRlZmF1bHRPcHRpb25zLmRhdGVGb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXRzLmRhdGVGb3JtYXQgPVxuICAgICAgICAgICAgICAgIHVzZXJDb25maWcubm9DYWxlbmRhciB8fCB0aW1lTW9kZVxuICAgICAgICAgICAgICAgICAgICA/IFwiSDppXCIgKyAodXNlckNvbmZpZy5lbmFibGVTZWNvbmRzID8gXCI6U1wiIDogXCJcIilcbiAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0RGF0ZUZvcm1hdCArIFwiIEg6aVwiICsgKHVzZXJDb25maWcuZW5hYmxlU2Vjb25kcyA/IFwiOlNcIiA6IFwiXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1c2VyQ29uZmlnLmFsdElucHV0ICYmXG4gICAgICAgICAgICAodXNlckNvbmZpZy5lbmFibGVUaW1lIHx8IHRpbWVNb2RlKSAmJlxuICAgICAgICAgICAgIXVzZXJDb25maWcuYWx0Rm9ybWF0KSB7XG4gICAgICAgICAgICB2YXIgZGVmYXVsdEFsdEZvcm1hdCA9IGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnLmFsdEZvcm1hdCB8fCBkZWZhdWx0T3B0aW9ucy5hbHRGb3JtYXQ7XG4gICAgICAgICAgICBmb3JtYXRzLmFsdEZvcm1hdCA9XG4gICAgICAgICAgICAgICAgdXNlckNvbmZpZy5ub0NhbGVuZGFyIHx8IHRpbWVNb2RlXG4gICAgICAgICAgICAgICAgICAgID8gXCJoOmlcIiArICh1c2VyQ29uZmlnLmVuYWJsZVNlY29uZHMgPyBcIjpTIEtcIiA6IFwiIEtcIilcbiAgICAgICAgICAgICAgICAgICAgOiBkZWZhdWx0QWx0Rm9ybWF0ICsgKFwiIGg6aVwiICsgKHVzZXJDb25maWcuZW5hYmxlU2Vjb25kcyA/IFwiOlNcIiA6IFwiXCIpICsgXCIgS1wiKTtcbiAgICAgICAgfVxuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwibWluRGF0ZVwiLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9taW5EYXRlOyB9LFxuICAgICAgICAgICAgc2V0OiBtaW5NYXhEYXRlU2V0dGVyKFwibWluXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1heERhdGVcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWF4RGF0ZTsgfSxcbiAgICAgICAgICAgIHNldDogbWluTWF4RGF0ZVNldHRlcihcIm1heFwiKSxcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBtaW5NYXhUaW1lU2V0dGVyID0gZnVuY3Rpb24gKHR5cGUpIHsgcmV0dXJuIGZ1bmN0aW9uICh2YWwpIHtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnW3R5cGUgPT09IFwibWluXCIgPyBcIl9taW5UaW1lXCIgOiBcIl9tYXhUaW1lXCJdID0gc2VsZi5wYXJzZURhdGUodmFsLCBcIkg6aTpTXCIpO1xuICAgICAgICB9OyB9O1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoc2VsZi5jb25maWcsIFwibWluVGltZVwiLCB7XG4gICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHNlbGYuY29uZmlnLl9taW5UaW1lOyB9LFxuICAgICAgICAgICAgc2V0OiBtaW5NYXhUaW1lU2V0dGVyKFwibWluXCIpLFxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHNlbGYuY29uZmlnLCBcIm1heFRpbWVcIiwge1xuICAgICAgICAgICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBzZWxmLmNvbmZpZy5fbWF4VGltZTsgfSxcbiAgICAgICAgICAgIHNldDogbWluTWF4VGltZVNldHRlcihcIm1heFwiKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh1c2VyQ29uZmlnLm1vZGUgPT09IFwidGltZVwiKSB7XG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyID0gdHJ1ZTtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIE9iamVjdC5hc3NpZ24oc2VsZi5jb25maWcsIGZvcm1hdHMsIHVzZXJDb25maWcpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJvb2xPcHRzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgc2VsZi5jb25maWdbYm9vbE9wdHNbaV1dID1cbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1tib29sT3B0c1tpXV0gPT09IHRydWUgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWdbYm9vbE9wdHNbaV1dID09PSBcInRydWVcIjtcbiAgICAgICAgSE9PS1MuZmlsdGVyKGZ1bmN0aW9uIChob29rKSB7IHJldHVybiBzZWxmLmNvbmZpZ1tob29rXSAhPT0gdW5kZWZpbmVkOyB9KS5mb3JFYWNoKGZ1bmN0aW9uIChob29rKSB7XG4gICAgICAgICAgICBzZWxmLmNvbmZpZ1tob29rXSA9IGFycmF5aWZ5KHNlbGYuY29uZmlnW2hvb2tdIHx8IFtdKS5tYXAoYmluZFRvSW5zdGFuY2UpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5pc01vYmlsZSA9XG4gICAgICAgICAgICAhc2VsZi5jb25maWcuZGlzYWJsZU1vYmlsZSAmJlxuICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy5pbmxpbmUgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiICYmXG4gICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmRpc2FibGUubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmVuYWJsZSAmJlxuICAgICAgICAgICAgICAgICFzZWxmLmNvbmZpZy53ZWVrTnVtYmVycyAmJlxuICAgICAgICAgICAgICAgIC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzZWxmLmNvbmZpZy5wbHVnaW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgcGx1Z2luQ29uZiA9IHNlbGYuY29uZmlnLnBsdWdpbnNbaV0oc2VsZikgfHwge307XG4gICAgICAgICAgICBmb3IgKHZhciBrZXkgaW4gcGx1Z2luQ29uZikge1xuICAgICAgICAgICAgICAgIGlmIChIT09LUy5pbmRleE9mKGtleSkgPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBzZWxmLmNvbmZpZ1trZXldID0gYXJyYXlpZnkocGx1Z2luQ29uZltrZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChiaW5kVG9JbnN0YW5jZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jb25jYXQoc2VsZi5jb25maWdba2V5XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHR5cGVvZiB1c2VyQ29uZmlnW2tleV0gPT09IFwidW5kZWZpbmVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW2tleV0gPSBwbHVnaW5Db25mW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF1c2VyQ29uZmlnLmFsdElucHV0Q2xhc3MpIHtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmFsdElucHV0Q2xhc3MgPVxuICAgICAgICAgICAgICAgIGdldElucHV0RWxlbSgpLmNsYXNzTmFtZSArIFwiIFwiICsgc2VsZi5jb25maWcuYWx0SW5wdXRDbGFzcztcbiAgICAgICAgfVxuICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblBhcnNlQ29uZmlnXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRJbnB1dEVsZW0oKSB7XG4gICAgICAgIHJldHVybiBzZWxmLmNvbmZpZy53cmFwXG4gICAgICAgICAgICA/IGVsZW1lbnQucXVlcnlTZWxlY3RvcihcIltkYXRhLWlucHV0XVwiKVxuICAgICAgICAgICAgOiBlbGVtZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXR1cExvY2FsZSgpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxmLmNvbmZpZy5sb2NhbGUgIT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgICAgIHR5cGVvZiBmbGF0cGlja3IubDEwbnNbc2VsZi5jb25maWcubG9jYWxlXSA9PT0gXCJ1bmRlZmluZWRcIilcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLmVycm9ySGFuZGxlcihuZXcgRXJyb3IoXCJmbGF0cGlja3I6IGludmFsaWQgbG9jYWxlIFwiICsgc2VsZi5jb25maWcubG9jYWxlKSk7XG4gICAgICAgIHNlbGYubDEwbiA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBmbGF0cGlja3IubDEwbnMuZGVmYXVsdCksICh0eXBlb2Ygc2VsZi5jb25maWcubG9jYWxlID09PSBcIm9iamVjdFwiXG4gICAgICAgICAgICA/IHNlbGYuY29uZmlnLmxvY2FsZVxuICAgICAgICAgICAgOiBzZWxmLmNvbmZpZy5sb2NhbGUgIT09IFwiZGVmYXVsdFwiXG4gICAgICAgICAgICAgICAgPyBmbGF0cGlja3IubDEwbnNbc2VsZi5jb25maWcubG9jYWxlXVxuICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKSk7XG4gICAgICAgIHRva2VuUmVnZXguRCA9IFwiKFwiICsgc2VsZi5sMTBuLndlZWtkYXlzLnNob3J0aGFuZC5qb2luKFwifFwiKSArIFwiKVwiO1xuICAgICAgICB0b2tlblJlZ2V4LmwgPSBcIihcIiArIHNlbGYubDEwbi53ZWVrZGF5cy5sb25naGFuZC5qb2luKFwifFwiKSArIFwiKVwiO1xuICAgICAgICB0b2tlblJlZ2V4Lk0gPSBcIihcIiArIHNlbGYubDEwbi5tb250aHMuc2hvcnRoYW5kLmpvaW4oXCJ8XCIpICsgXCIpXCI7XG4gICAgICAgIHRva2VuUmVnZXguRiA9IFwiKFwiICsgc2VsZi5sMTBuLm1vbnRocy5sb25naGFuZC5qb2luKFwifFwiKSArIFwiKVwiO1xuICAgICAgICB0b2tlblJlZ2V4LksgPSBcIihcIiArIHNlbGYubDEwbi5hbVBNWzBdICsgXCJ8XCIgKyBzZWxmLmwxMG4uYW1QTVsxXSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMF0udG9Mb3dlckNhc2UoKSArIFwifFwiICsgc2VsZi5sMTBuLmFtUE1bMV0udG9Mb3dlckNhc2UoKSArIFwiKVwiO1xuICAgICAgICB2YXIgdXNlckNvbmZpZyA9IF9fYXNzaWduKF9fYXNzaWduKHt9LCBpbnN0YW5jZUNvbmZpZyksIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZWxlbWVudC5kYXRhc2V0IHx8IHt9KSkpO1xuICAgICAgICBpZiAodXNlckNvbmZpZy50aW1lXzI0aHIgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgZmxhdHBpY2tyLmRlZmF1bHRDb25maWcudGltZV8yNGhyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHNlbGYuY29uZmlnLnRpbWVfMjRociA9IHNlbGYubDEwbi50aW1lXzI0aHI7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5mb3JtYXREYXRlID0gY3JlYXRlRGF0ZUZvcm1hdHRlcihzZWxmKTtcbiAgICAgICAgc2VsZi5wYXJzZURhdGUgPSBjcmVhdGVEYXRlUGFyc2VyKHsgY29uZmlnOiBzZWxmLmNvbmZpZywgbDEwbjogc2VsZi5sMTBuIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwb3NpdGlvbkNhbGVuZGFyKGN1c3RvbVBvc2l0aW9uRWxlbWVudCkge1xuICAgICAgICBpZiAodHlwZW9mIHNlbGYuY29uZmlnLnBvc2l0aW9uID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2b2lkIHNlbGYuY29uZmlnLnBvc2l0aW9uKHNlbGYsIGN1c3RvbVBvc2l0aW9uRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGYuY2FsZW5kYXJDb250YWluZXIgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJpZ2dlckV2ZW50KFwib25QcmVDYWxlbmRhclBvc2l0aW9uXCIpO1xuICAgICAgICB2YXIgcG9zaXRpb25FbGVtZW50ID0gY3VzdG9tUG9zaXRpb25FbGVtZW50IHx8IHNlbGYuX3Bvc2l0aW9uRWxlbWVudDtcbiAgICAgICAgdmFyIGNhbGVuZGFySGVpZ2h0ID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZS5jYWxsKHNlbGYuY2FsZW5kYXJDb250YWluZXIuY2hpbGRyZW4sIChmdW5jdGlvbiAoYWNjLCBjaGlsZCkgeyByZXR1cm4gYWNjICsgY2hpbGQub2Zmc2V0SGVpZ2h0OyB9KSwgMCksIGNhbGVuZGFyV2lkdGggPSBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLm9mZnNldFdpZHRoLCBjb25maWdQb3MgPSBzZWxmLmNvbmZpZy5wb3NpdGlvbi5zcGxpdChcIiBcIiksIGNvbmZpZ1Bvc1ZlcnRpY2FsID0gY29uZmlnUG9zWzBdLCBjb25maWdQb3NIb3Jpem9udGFsID0gY29uZmlnUG9zLmxlbmd0aCA+IDEgPyBjb25maWdQb3NbMV0gOiBudWxsLCBpbnB1dEJvdW5kcyA9IHBvc2l0aW9uRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwgZGlzdGFuY2VGcm9tQm90dG9tID0gd2luZG93LmlubmVySGVpZ2h0IC0gaW5wdXRCb3VuZHMuYm90dG9tLCBzaG93T25Ub3AgPSBjb25maWdQb3NWZXJ0aWNhbCA9PT0gXCJhYm92ZVwiIHx8XG4gICAgICAgICAgICAoY29uZmlnUG9zVmVydGljYWwgIT09IFwiYmVsb3dcIiAmJlxuICAgICAgICAgICAgICAgIGRpc3RhbmNlRnJvbUJvdHRvbSA8IGNhbGVuZGFySGVpZ2h0ICYmXG4gICAgICAgICAgICAgICAgaW5wdXRCb3VuZHMudG9wID4gY2FsZW5kYXJIZWlnaHQpO1xuICAgICAgICB2YXIgdG9wID0gd2luZG93LnBhZ2VZT2Zmc2V0ICtcbiAgICAgICAgICAgIGlucHV0Qm91bmRzLnRvcCArXG4gICAgICAgICAgICAoIXNob3dPblRvcCA/IHBvc2l0aW9uRWxlbWVudC5vZmZzZXRIZWlnaHQgKyAyIDogLWNhbGVuZGFySGVpZ2h0IC0gMik7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dUb3BcIiwgIXNob3dPblRvcCk7XG4gICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiYXJyb3dCb3R0b21cIiwgc2hvd09uVG9wKTtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLmlubGluZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIGxlZnQgPSB3aW5kb3cucGFnZVhPZmZzZXQgKyBpbnB1dEJvdW5kcy5sZWZ0O1xuICAgICAgICB2YXIgaXNDZW50ZXIgPSBmYWxzZTtcbiAgICAgICAgdmFyIGlzUmlnaHQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGNvbmZpZ1Bvc0hvcml6b250YWwgPT09IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICAgIGxlZnQgLT0gKGNhbGVuZGFyV2lkdGggLSBpbnB1dEJvdW5kcy53aWR0aCkgLyAyO1xuICAgICAgICAgICAgaXNDZW50ZXIgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGNvbmZpZ1Bvc0hvcml6b250YWwgPT09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgbGVmdCAtPSBjYWxlbmRhcldpZHRoIC0gaW5wdXRCb3VuZHMud2lkdGg7XG4gICAgICAgICAgICBpc1JpZ2h0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFycm93TGVmdFwiLCAhaXNDZW50ZXIgJiYgIWlzUmlnaHQpO1xuICAgICAgICB0b2dnbGVDbGFzcyhzZWxmLmNhbGVuZGFyQ29udGFpbmVyLCBcImFycm93Q2VudGVyXCIsIGlzQ2VudGVyKTtcbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJhcnJvd1JpZ2h0XCIsIGlzUmlnaHQpO1xuICAgICAgICB2YXIgcmlnaHQgPSB3aW5kb3cuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aCAtXG4gICAgICAgICAgICAod2luZG93LnBhZ2VYT2Zmc2V0ICsgaW5wdXRCb3VuZHMucmlnaHQpO1xuICAgICAgICB2YXIgcmlnaHRNb3N0ID0gbGVmdCArIGNhbGVuZGFyV2lkdGggPiB3aW5kb3cuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDtcbiAgICAgICAgdmFyIGNlbnRlck1vc3QgPSByaWdodCArIGNhbGVuZGFyV2lkdGggPiB3aW5kb3cuZG9jdW1lbnQuYm9keS5vZmZzZXRXaWR0aDtcbiAgICAgICAgdG9nZ2xlQ2xhc3Moc2VsZi5jYWxlbmRhckNvbnRhaW5lciwgXCJyaWdodE1vc3RcIiwgcmlnaHRNb3N0KTtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLnN0YXRpYylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS50b3AgPSB0b3AgKyBcInB4XCI7XG4gICAgICAgIGlmICghcmlnaHRNb3N0KSB7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLmxlZnQgPSBsZWZ0ICsgXCJweFwiO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5yaWdodCA9IFwiYXV0b1wiO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFjZW50ZXJNb3N0KSB7XG4gICAgICAgICAgICBzZWxmLmNhbGVuZGFyQ29udGFpbmVyLnN0eWxlLmxlZnQgPSBcImF1dG9cIjtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmlnaHQgPSByaWdodCArIFwicHhcIjtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBkb2MgPSBnZXREb2N1bWVudFN0eWxlU2hlZXQoKTtcbiAgICAgICAgICAgIGlmIChkb2MgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB2YXIgYm9keVdpZHRoID0gd2luZG93LmRvY3VtZW50LmJvZHkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICB2YXIgY2VudGVyTGVmdCA9IE1hdGgubWF4KDAsIGJvZHlXaWR0aCAvIDIgLSBjYWxlbmRhcldpZHRoIC8gMik7XG4gICAgICAgICAgICB2YXIgY2VudGVyQmVmb3JlID0gXCIuZmxhdHBpY2tyLWNhbGVuZGFyLmNlbnRlck1vc3Q6YmVmb3JlXCI7XG4gICAgICAgICAgICB2YXIgY2VudGVyQWZ0ZXIgPSBcIi5mbGF0cGlja3ItY2FsZW5kYXIuY2VudGVyTW9zdDphZnRlclwiO1xuICAgICAgICAgICAgdmFyIGNlbnRlckluZGV4ID0gZG9jLmNzc1J1bGVzLmxlbmd0aDtcbiAgICAgICAgICAgIHZhciBjZW50ZXJTdHlsZSA9IFwie2xlZnQ6XCIgKyBpbnB1dEJvdW5kcy5sZWZ0ICsgXCJweDtyaWdodDphdXRvO31cIjtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwicmlnaHRNb3N0XCIsIGZhbHNlKTtcbiAgICAgICAgICAgIHRvZ2dsZUNsYXNzKHNlbGYuY2FsZW5kYXJDb250YWluZXIsIFwiY2VudGVyTW9zdFwiLCB0cnVlKTtcbiAgICAgICAgICAgIGRvYy5pbnNlcnRSdWxlKGNlbnRlckJlZm9yZSArIFwiLFwiICsgY2VudGVyQWZ0ZXIgKyBjZW50ZXJTdHlsZSwgY2VudGVySW5kZXgpO1xuICAgICAgICAgICAgc2VsZi5jYWxlbmRhckNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gY2VudGVyTGVmdCArIFwicHhcIjtcbiAgICAgICAgICAgIHNlbGYuY2FsZW5kYXJDb250YWluZXIuc3R5bGUucmlnaHQgPSBcImF1dG9cIjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBnZXREb2N1bWVudFN0eWxlU2hlZXQoKSB7XG4gICAgICAgIHZhciBlZGl0YWJsZVNoZWV0ID0gbnVsbDtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkb2N1bWVudC5zdHlsZVNoZWV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIHNoZWV0ID0gZG9jdW1lbnQuc3R5bGVTaGVldHNbaV07XG4gICAgICAgICAgICBpZiAoIXNoZWV0LmNzc1J1bGVzKVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzaGVldC5jc3NSdWxlcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVkaXRhYmxlU2hlZXQgPSBzaGVldDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlZGl0YWJsZVNoZWV0ICE9IG51bGwgPyBlZGl0YWJsZVNoZWV0IDogY3JlYXRlU3R5bGVTaGVldCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVTdHlsZVNoZWV0KCkge1xuICAgICAgICB2YXIgc3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic3R5bGVcIik7XG4gICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xuICAgICAgICByZXR1cm4gc3R5bGUuc2hlZXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlZHJhdygpIHtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgfHwgc2VsZi5pc01vYmlsZSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgYnVpbGRNb250aFN3aXRjaCgpO1xuICAgICAgICB1cGRhdGVOYXZpZ2F0aW9uQ3VycmVudE1vbnRoKCk7XG4gICAgICAgIGJ1aWxkRGF5cygpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmb2N1c0FuZENsb3NlKCkge1xuICAgICAgICBzZWxmLl9pbnB1dC5mb2N1cygpO1xuICAgICAgICBpZiAod2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZihcIk1TSUVcIikgIT09IC0xIHx8XG4gICAgICAgICAgICBuYXZpZ2F0b3IubXNNYXhUb3VjaFBvaW50cyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KHNlbGYuY2xvc2UsIDApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VsZi5jbG9zZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNlbGVjdERhdGUoZSkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIHZhciBpc1NlbGVjdGFibGUgPSBmdW5jdGlvbiAoZGF5KSB7XG4gICAgICAgICAgICByZXR1cm4gZGF5LmNsYXNzTGlzdCAmJlxuICAgICAgICAgICAgICAgIGRheS5jbGFzc0xpc3QuY29udGFpbnMoXCJmbGF0cGlja3ItZGF5XCIpICYmXG4gICAgICAgICAgICAgICAgIWRheS5jbGFzc0xpc3QuY29udGFpbnMoXCJmbGF0cGlja3ItZGlzYWJsZWRcIikgJiZcbiAgICAgICAgICAgICAgICAhZGF5LmNsYXNzTGlzdC5jb250YWlucyhcIm5vdEFsbG93ZWRcIik7XG4gICAgICAgIH07XG4gICAgICAgIHZhciB0ID0gZmluZFBhcmVudChnZXRFdmVudFRhcmdldChlKSwgaXNTZWxlY3RhYmxlKTtcbiAgICAgICAgaWYgKHQgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdmFyIHRhcmdldCA9IHQ7XG4gICAgICAgIHZhciBzZWxlY3RlZERhdGUgPSAoc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBuZXcgRGF0ZSh0YXJnZXQuZGF0ZU9iai5nZXRUaW1lKCkpKTtcbiAgICAgICAgdmFyIHNob3VsZENoYW5nZU1vbnRoID0gKHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpIDwgc2VsZi5jdXJyZW50TW9udGggfHxcbiAgICAgICAgICAgIHNlbGVjdGVkRGF0ZS5nZXRNb250aCgpID5cbiAgICAgICAgICAgICAgICBzZWxmLmN1cnJlbnRNb250aCArIHNlbGYuY29uZmlnLnNob3dNb250aHMgLSAxKSAmJlxuICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiO1xuICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZUVsZW0gPSB0YXJnZXQ7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInNpbmdsZVwiKVxuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gW3NlbGVjdGVkRGF0ZV07XG4gICAgICAgIGVsc2UgaWYgKHNlbGYuY29uZmlnLm1vZGUgPT09IFwibXVsdGlwbGVcIikge1xuICAgICAgICAgICAgdmFyIHNlbGVjdGVkSW5kZXggPSBpc0RhdGVTZWxlY3RlZChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkSW5kZXgpXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNwbGljZShwYXJzZUludChzZWxlY3RlZEluZGV4KSwgMSk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnB1c2goc2VsZWN0ZWREYXRlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpIHtcbiAgICAgICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5jbGVhcihmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBzZWxlY3RlZERhdGU7XG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMucHVzaChzZWxlY3RlZERhdGUpO1xuICAgICAgICAgICAgaWYgKGNvbXBhcmVEYXRlcyhzZWxlY3RlZERhdGUsIHNlbGYuc2VsZWN0ZWREYXRlc1swXSwgdHJ1ZSkgIT09IDApXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEuZ2V0VGltZSgpIC0gYi5nZXRUaW1lKCk7IH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldEhvdXJzRnJvbUlucHV0cygpO1xuICAgICAgICBpZiAoc2hvdWxkQ2hhbmdlTW9udGgpIHtcbiAgICAgICAgICAgIHZhciBpc05ld1llYXIgPSBzZWxmLmN1cnJlbnRZZWFyICE9PSBzZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudFllYXIgPSBzZWxlY3RlZERhdGUuZ2V0RnVsbFllYXIoKTtcbiAgICAgICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZWN0ZWREYXRlLmdldE1vbnRoKCk7XG4gICAgICAgICAgICBpZiAoaXNOZXdZZWFyKSB7XG4gICAgICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25ZZWFyQ2hhbmdlXCIpO1xuICAgICAgICAgICAgICAgIGJ1aWxkTW9udGhTd2l0Y2goKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uTW9udGhDaGFuZ2VcIik7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpO1xuICAgICAgICBidWlsZERheXMoKTtcbiAgICAgICAgdXBkYXRlVmFsdWUoKTtcbiAgICAgICAgaWYgKCFzaG91bGRDaGFuZ2VNb250aCAmJlxuICAgICAgICAgICAgc2VsZi5jb25maWcubW9kZSAhPT0gXCJyYW5nZVwiICYmXG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5zaG93TW9udGhzID09PSAxKVxuICAgICAgICAgICAgZm9jdXNPbkRheUVsZW0odGFyZ2V0KTtcbiAgICAgICAgZWxzZSBpZiAoc2VsZi5zZWxlY3RlZERhdGVFbGVtICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIHNlbGYuaG91ckVsZW1lbnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVFbGVtICYmIHNlbGYuc2VsZWN0ZWREYXRlRWxlbS5mb2N1cygpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLmhvdXJFbGVtZW50ICE9PSB1bmRlZmluZWQgJiYgc2VsZi5ob3VyRWxlbWVudC5mb2N1cygpO1xuICAgICAgICBpZiAoc2VsZi5jb25maWcuY2xvc2VPblNlbGVjdCkge1xuICAgICAgICAgICAgdmFyIHNpbmdsZSA9IHNlbGYuY29uZmlnLm1vZGUgPT09IFwic2luZ2xlXCIgJiYgIXNlbGYuY29uZmlnLmVuYWJsZVRpbWU7XG4gICAgICAgICAgICB2YXIgcmFuZ2UgPSBzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIgJiZcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID09PSAyICYmXG4gICAgICAgICAgICAgICAgIXNlbGYuY29uZmlnLmVuYWJsZVRpbWU7XG4gICAgICAgICAgICBpZiAoc2luZ2xlIHx8IHJhbmdlKSB7XG4gICAgICAgICAgICAgICAgZm9jdXNBbmRDbG9zZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRyaWdnZXJDaGFuZ2UoKTtcbiAgICB9XG4gICAgdmFyIENBTExCQUNLUyA9IHtcbiAgICAgICAgbG9jYWxlOiBbc2V0dXBMb2NhbGUsIHVwZGF0ZVdlZWtkYXlzXSxcbiAgICAgICAgc2hvd01vbnRoczogW2J1aWxkTW9udGhzLCBzZXRDYWxlbmRhcldpZHRoLCBidWlsZFdlZWtkYXlzXSxcbiAgICAgICAgbWluRGF0ZTogW2p1bXBUb0RhdGVdLFxuICAgICAgICBtYXhEYXRlOiBbanVtcFRvRGF0ZV0sXG4gICAgICAgIHBvc2l0aW9uRWxlbWVudDogW3VwZGF0ZVBvc2l0aW9uRWxlbWVudF0sXG4gICAgICAgIGNsaWNrT3BlbnM6IFtcbiAgICAgICAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZi5jb25maWcuY2xpY2tPcGVucyA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgICAgICBiaW5kKHNlbGYuX2lucHV0LCBcImZvY3VzXCIsIHNlbGYub3Blbik7XG4gICAgICAgICAgICAgICAgICAgIGJpbmQoc2VsZi5faW5wdXQsIFwiY2xpY2tcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2lucHV0LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJmb2N1c1wiLCBzZWxmLm9wZW4pO1xuICAgICAgICAgICAgICAgICAgICBzZWxmLl9pbnB1dC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgc2VsZi5vcGVuKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgIH07XG4gICAgZnVuY3Rpb24gc2V0KG9wdGlvbiwgdmFsdWUpIHtcbiAgICAgICAgaWYgKG9wdGlvbiAhPT0gbnVsbCAmJiB0eXBlb2Ygb3B0aW9uID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKHNlbGYuY29uZmlnLCBvcHRpb24pO1xuICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIG9wdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChDQUxMQkFDS1Nba2V5XSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBDQUxMQkFDS1Nba2V5XS5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4KCk7IH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2VsZi5jb25maWdbb3B0aW9uXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKENBTExCQUNLU1tvcHRpb25dICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgQ0FMTEJBQ0tTW29wdGlvbl0uZm9yRWFjaChmdW5jdGlvbiAoeCkgeyByZXR1cm4geCgpOyB9KTtcbiAgICAgICAgICAgIGVsc2UgaWYgKEhPT0tTLmluZGV4T2Yob3B0aW9uKSA+IC0xKVxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnW29wdGlvbl0gPSBhcnJheWlmeSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5yZWRyYXcoKTtcbiAgICAgICAgdXBkYXRlVmFsdWUodHJ1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldFNlbGVjdGVkRGF0ZShpbnB1dERhdGUsIGZvcm1hdCkge1xuICAgICAgICB2YXIgZGF0ZXMgPSBbXTtcbiAgICAgICAgaWYgKGlucHV0RGF0ZSBpbnN0YW5jZW9mIEFycmF5KVxuICAgICAgICAgICAgZGF0ZXMgPSBpbnB1dERhdGUubWFwKGZ1bmN0aW9uIChkKSB7IHJldHVybiBzZWxmLnBhcnNlRGF0ZShkLCBmb3JtYXQpOyB9KTtcbiAgICAgICAgZWxzZSBpZiAoaW5wdXREYXRlIGluc3RhbmNlb2YgRGF0ZSB8fCB0eXBlb2YgaW5wdXREYXRlID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgZGF0ZXMgPSBbc2VsZi5wYXJzZURhdGUoaW5wdXREYXRlLCBmb3JtYXQpXTtcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGlucHV0RGF0ZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgc3dpdGNoIChzZWxmLmNvbmZpZy5tb2RlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBcInNpbmdsZVwiOlxuICAgICAgICAgICAgICAgIGNhc2UgXCJ0aW1lXCI6XG4gICAgICAgICAgICAgICAgICAgIGRhdGVzID0gW3NlbGYucGFyc2VEYXRlKGlucHV0RGF0ZSwgZm9ybWF0KV07XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJtdWx0aXBsZVwiOlxuICAgICAgICAgICAgICAgICAgICBkYXRlcyA9IGlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHNlbGYuY29uZmlnLmNvbmp1bmN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAoZGF0ZSkgeyByZXR1cm4gc2VsZi5wYXJzZURhdGUoZGF0ZSwgZm9ybWF0KTsgfSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgXCJyYW5nZVwiOlxuICAgICAgICAgICAgICAgICAgICBkYXRlcyA9IGlucHV0RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KHNlbGYubDEwbi5yYW5nZVNlcGFyYXRvcilcbiAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24gKGRhdGUpIHsgcmV0dXJuIHNlbGYucGFyc2VEYXRlKGRhdGUsIGZvcm1hdCk7IH0pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5lcnJvckhhbmRsZXIobmV3IEVycm9yKFwiSW52YWxpZCBkYXRlIHN1cHBsaWVkOiBcIiArIEpTT04uc3RyaW5naWZ5KGlucHV0RGF0ZSkpKTtcbiAgICAgICAgc2VsZi5zZWxlY3RlZERhdGVzID0gKHNlbGYuY29uZmlnLmFsbG93SW52YWxpZFByZWxvYWRcbiAgICAgICAgICAgID8gZGF0ZXNcbiAgICAgICAgICAgIDogZGF0ZXMuZmlsdGVyKGZ1bmN0aW9uIChkKSB7IHJldHVybiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc0VuYWJsZWQoZCwgZmFsc2UpOyB9KSk7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tb2RlID09PSBcInJhbmdlXCIpXG4gICAgICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMuc29ydChmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYS5nZXRUaW1lKCkgLSBiLmdldFRpbWUoKTsgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldERhdGUoZGF0ZSwgdHJpZ2dlckNoYW5nZSwgZm9ybWF0KSB7XG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlID09PSB2b2lkIDApIHsgdHJpZ2dlckNoYW5nZSA9IGZhbHNlOyB9XG4gICAgICAgIGlmIChmb3JtYXQgPT09IHZvaWQgMCkgeyBmb3JtYXQgPSBzZWxmLmNvbmZpZy5kYXRlRm9ybWF0OyB9XG4gICAgICAgIGlmICgoZGF0ZSAhPT0gMCAmJiAhZGF0ZSkgfHwgKGRhdGUgaW5zdGFuY2VvZiBBcnJheSAmJiBkYXRlLmxlbmd0aCA9PT0gMCkpXG4gICAgICAgICAgICByZXR1cm4gc2VsZi5jbGVhcih0cmlnZ2VyQ2hhbmdlKTtcbiAgICAgICAgc2V0U2VsZWN0ZWREYXRlKGRhdGUsIGZvcm1hdCk7XG4gICAgICAgIHNlbGYubGF0ZXN0U2VsZWN0ZWREYXRlT2JqID1cbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlc1tzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIC0gMV07XG4gICAgICAgIHNlbGYucmVkcmF3KCk7XG4gICAgICAgIGp1bXBUb0RhdGUodW5kZWZpbmVkLCB0cmlnZ2VyQ2hhbmdlKTtcbiAgICAgICAgc2V0SG91cnNGcm9tRGF0ZSgpO1xuICAgICAgICBpZiAoc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgc2VsZi5jbGVhcihmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlVmFsdWUodHJpZ2dlckNoYW5nZSk7XG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlKVxuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DaGFuZ2VcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlRGF0ZVJ1bGVzKGFycikge1xuICAgICAgICByZXR1cm4gYXJyXG4gICAgICAgICAgICAuc2xpY2UoKVxuICAgICAgICAgICAgLm1hcChmdW5jdGlvbiAocnVsZSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBydWxlID09PSBcInN0cmluZ1wiIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHJ1bGUgPT09IFwibnVtYmVyXCIgfHxcbiAgICAgICAgICAgICAgICBydWxlIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnBhcnNlRGF0ZShydWxlLCB1bmRlZmluZWQsIHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAocnVsZSAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBydWxlID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICAgICAgcnVsZS5mcm9tICYmXG4gICAgICAgICAgICAgICAgcnVsZS50bylcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBmcm9tOiBzZWxmLnBhcnNlRGF0ZShydWxlLmZyb20sIHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgICAgIHRvOiBzZWxmLnBhcnNlRGF0ZShydWxlLnRvLCB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXR1cm4gcnVsZTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKHgpIHsgcmV0dXJuIHg7IH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzZXR1cERhdGVzKCkge1xuICAgICAgICBzZWxmLnNlbGVjdGVkRGF0ZXMgPSBbXTtcbiAgICAgICAgc2VsZi5ub3cgPSBzZWxmLnBhcnNlRGF0ZShzZWxmLmNvbmZpZy5ub3cpIHx8IG5ldyBEYXRlKCk7XG4gICAgICAgIHZhciBwcmVsb2FkZWREYXRlID0gc2VsZi5jb25maWcuZGVmYXVsdERhdGUgfHxcbiAgICAgICAgICAgICgoc2VsZi5pbnB1dC5ub2RlTmFtZSA9PT0gXCJJTlBVVFwiIHx8XG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5ub2RlTmFtZSA9PT0gXCJURVhUQVJFQVwiKSAmJlxuICAgICAgICAgICAgICAgIHNlbGYuaW5wdXQucGxhY2Vob2xkZXIgJiZcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnZhbHVlID09PSBzZWxmLmlucHV0LnBsYWNlaG9sZGVyXG4gICAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgICAgOiBzZWxmLmlucHV0LnZhbHVlKTtcbiAgICAgICAgaWYgKHByZWxvYWRlZERhdGUpXG4gICAgICAgICAgICBzZXRTZWxlY3RlZERhdGUocHJlbG9hZGVkRGF0ZSwgc2VsZi5jb25maWcuZGF0ZUZvcm1hdCk7XG4gICAgICAgIHNlbGYuX2luaXRpYWxEYXRlID1cbiAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgPyBzZWxmLnNlbGVjdGVkRGF0ZXNbMF1cbiAgICAgICAgICAgICAgICA6IHNlbGYuY29uZmlnLm1pbkRhdGUgJiZcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRUaW1lKCkgPiBzZWxmLm5vdy5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5taW5EYXRlXG4gICAgICAgICAgICAgICAgICAgIDogc2VsZi5jb25maWcubWF4RGF0ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRUaW1lKCkgPCBzZWxmLm5vdy5nZXRUaW1lKClcbiAgICAgICAgICAgICAgICAgICAgICAgID8gc2VsZi5jb25maWcubWF4RGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLm5vdztcbiAgICAgICAgc2VsZi5jdXJyZW50WWVhciA9IHNlbGYuX2luaXRpYWxEYXRlLmdldEZ1bGxZZWFyKCk7XG4gICAgICAgIHNlbGYuY3VycmVudE1vbnRoID0gc2VsZi5faW5pdGlhbERhdGUuZ2V0TW9udGgoKTtcbiAgICAgICAgaWYgKHNlbGYuc2VsZWN0ZWREYXRlcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogPSBzZWxmLnNlbGVjdGVkRGF0ZXNbMF07XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5UaW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5taW5UaW1lID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubWluVGltZSwgXCJIOmlcIik7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5tYXhUaW1lICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLmNvbmZpZy5tYXhUaW1lID0gc2VsZi5wYXJzZURhdGUoc2VsZi5jb25maWcubWF4VGltZSwgXCJIOmlcIik7XG4gICAgICAgIHNlbGYubWluRGF0ZUhhc1RpbWUgPVxuICAgICAgICAgICAgISFzZWxmLmNvbmZpZy5taW5EYXRlICYmXG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0SG91cnMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWluRGF0ZS5nZXRNaW51dGVzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUuZ2V0U2Vjb25kcygpID4gMCk7XG4gICAgICAgIHNlbGYubWF4RGF0ZUhhc1RpbWUgPVxuICAgICAgICAgICAgISFzZWxmLmNvbmZpZy5tYXhEYXRlICYmXG4gICAgICAgICAgICAgICAgKHNlbGYuY29uZmlnLm1heERhdGUuZ2V0SG91cnMoKSA+IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jb25maWcubWF4RGF0ZS5nZXRNaW51dGVzKCkgPiAwIHx8XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUuZ2V0U2Vjb25kcygpID4gMCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldHVwSW5wdXRzKCkge1xuICAgICAgICBzZWxmLmlucHV0ID0gZ2V0SW5wdXRFbGVtKCk7XG4gICAgICAgIGlmICghc2VsZi5pbnB1dCkge1xuICAgICAgICAgICAgc2VsZi5jb25maWcuZXJyb3JIYW5kbGVyKG5ldyBFcnJvcihcIkludmFsaWQgaW5wdXQgZWxlbWVudCBzcGVjaWZpZWRcIikpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHNlbGYuaW5wdXQuX3R5cGUgPSBzZWxmLmlucHV0LnR5cGU7XG4gICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IFwidGV4dFwiO1xuICAgICAgICBzZWxmLmlucHV0LmNsYXNzTGlzdC5hZGQoXCJmbGF0cGlja3ItaW5wdXRcIik7XG4gICAgICAgIHNlbGYuX2lucHV0ID0gc2VsZi5pbnB1dDtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLmFsdElucHV0KSB7XG4gICAgICAgICAgICBzZWxmLmFsdElucHV0ID0gY3JlYXRlRWxlbWVudChzZWxmLmlucHV0Lm5vZGVOYW1lLCBzZWxmLmNvbmZpZy5hbHRJbnB1dENsYXNzKTtcbiAgICAgICAgICAgIHNlbGYuX2lucHV0ID0gc2VsZi5hbHRJbnB1dDtcbiAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQucGxhY2Vob2xkZXIgPSBzZWxmLmlucHV0LnBsYWNlaG9sZGVyO1xuICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgICAgICBzZWxmLmFsdElucHV0LnJlcXVpcmVkID0gc2VsZi5pbnB1dC5yZXF1aXJlZDtcbiAgICAgICAgICAgIHNlbGYuYWx0SW5wdXQudGFiSW5kZXggPSBzZWxmLmlucHV0LnRhYkluZGV4O1xuICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC50eXBlID0gXCJ0ZXh0XCI7XG4gICAgICAgICAgICBzZWxmLmlucHV0LnNldEF0dHJpYnV0ZShcInR5cGVcIiwgXCJoaWRkZW5cIik7XG4gICAgICAgICAgICBpZiAoIXNlbGYuY29uZmlnLnN0YXRpYyAmJiBzZWxmLmlucHV0LnBhcmVudE5vZGUpXG4gICAgICAgICAgICAgICAgc2VsZi5pbnB1dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShzZWxmLmFsdElucHV0LCBzZWxmLmlucHV0Lm5leHRTaWJsaW5nKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXNlbGYuY29uZmlnLmFsbG93SW5wdXQpXG4gICAgICAgICAgICBzZWxmLl9pbnB1dC5zZXRBdHRyaWJ1dGUoXCJyZWFkb25seVwiLCBcInJlYWRvbmx5XCIpO1xuICAgICAgICB1cGRhdGVQb3NpdGlvbkVsZW1lbnQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlUG9zaXRpb25FbGVtZW50KCkge1xuICAgICAgICBzZWxmLl9wb3NpdGlvbkVsZW1lbnQgPSBzZWxmLmNvbmZpZy5wb3NpdGlvbkVsZW1lbnQgfHwgc2VsZi5faW5wdXQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNldHVwTW9iaWxlKCkge1xuICAgICAgICB2YXIgaW5wdXRUeXBlID0gc2VsZi5jb25maWcuZW5hYmxlVGltZVxuICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5ub0NhbGVuZGFyXG4gICAgICAgICAgICAgICAgPyBcInRpbWVcIlxuICAgICAgICAgICAgICAgIDogXCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICA6IFwiZGF0ZVwiO1xuICAgICAgICBzZWxmLm1vYmlsZUlucHV0ID0gY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHNlbGYuaW5wdXQuY2xhc3NOYW1lICsgXCIgZmxhdHBpY2tyLW1vYmlsZVwiKTtcbiAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC50YWJJbmRleCA9IDE7XG4gICAgICAgIHNlbGYubW9iaWxlSW5wdXQudHlwZSA9IGlucHV0VHlwZTtcbiAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5kaXNhYmxlZCA9IHNlbGYuaW5wdXQuZGlzYWJsZWQ7XG4gICAgICAgIHNlbGYubW9iaWxlSW5wdXQucmVxdWlyZWQgPSBzZWxmLmlucHV0LnJlcXVpcmVkO1xuICAgICAgICBzZWxmLm1vYmlsZUlucHV0LnBsYWNlaG9sZGVyID0gc2VsZi5pbnB1dC5wbGFjZWhvbGRlcjtcbiAgICAgICAgc2VsZi5tb2JpbGVGb3JtYXRTdHIgPVxuICAgICAgICAgICAgaW5wdXRUeXBlID09PSBcImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICA/IFwiWS1tLWRcXFxcVEg6aTpTXCJcbiAgICAgICAgICAgICAgICA6IGlucHV0VHlwZSA9PT0gXCJkYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgPyBcIlktbS1kXCJcbiAgICAgICAgICAgICAgICAgICAgOiBcIkg6aTpTXCI7XG4gICAgICAgIGlmIChzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5kZWZhdWx0VmFsdWUgPSBzZWxmLm1vYmlsZUlucHV0LnZhbHVlID0gc2VsZi5mb3JtYXREYXRlKHNlbGYuc2VsZWN0ZWREYXRlc1swXSwgc2VsZi5tb2JpbGVGb3JtYXRTdHIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZy5taW5EYXRlKVxuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5taW4gPSBzZWxmLmZvcm1hdERhdGUoc2VsZi5jb25maWcubWluRGF0ZSwgXCJZLW0tZFwiKTtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1heERhdGUpXG4gICAgICAgICAgICBzZWxmLm1vYmlsZUlucHV0Lm1heCA9IHNlbGYuZm9ybWF0RGF0ZShzZWxmLmNvbmZpZy5tYXhEYXRlLCBcIlktbS1kXCIpO1xuICAgICAgICBpZiAoc2VsZi5pbnB1dC5nZXRBdHRyaWJ1dGUoXCJzdGVwXCIpKVxuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC5zdGVwID0gU3RyaW5nKHNlbGYuaW5wdXQuZ2V0QXR0cmlidXRlKFwic3RlcFwiKSk7XG4gICAgICAgIHNlbGYuaW5wdXQudHlwZSA9IFwiaGlkZGVuXCI7XG4gICAgICAgIGlmIChzZWxmLmFsdElucHV0ICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBzZWxmLmFsdElucHV0LnR5cGUgPSBcImhpZGRlblwiO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNlbGYuaW5wdXQucGFyZW50Tm9kZSlcbiAgICAgICAgICAgICAgICBzZWxmLmlucHV0LnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHNlbGYubW9iaWxlSW5wdXQsIHNlbGYuaW5wdXQubmV4dFNpYmxpbmcpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfYSkgeyB9XG4gICAgICAgIGJpbmQoc2VsZi5tb2JpbGVJbnB1dCwgXCJjaGFuZ2VcIiwgZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHNlbGYuc2V0RGF0ZShnZXRFdmVudFRhcmdldChlKS52YWx1ZSwgZmFsc2UsIHNlbGYubW9iaWxlRm9ybWF0U3RyKTtcbiAgICAgICAgICAgIHRyaWdnZXJFdmVudChcIm9uQ2hhbmdlXCIpO1xuICAgICAgICAgICAgdHJpZ2dlckV2ZW50KFwib25DbG9zZVwiKTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRvZ2dsZShlKSB7XG4gICAgICAgIGlmIChzZWxmLmlzT3BlbiA9PT0gdHJ1ZSlcbiAgICAgICAgICAgIHJldHVybiBzZWxmLmNsb3NlKCk7XG4gICAgICAgIHNlbGYub3BlbihlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdHJpZ2dlckV2ZW50KGV2ZW50LCBkYXRhKSB7XG4gICAgICAgIGlmIChzZWxmLmNvbmZpZyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB2YXIgaG9va3MgPSBzZWxmLmNvbmZpZ1tldmVudF07XG4gICAgICAgIGlmIChob29rcyAhPT0gdW5kZWZpbmVkICYmIGhvb2tzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBob29rc1tpXSAmJiBpIDwgaG9va3MubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgaG9va3NbaV0oc2VsZi5zZWxlY3RlZERhdGVzLCBzZWxmLmlucHV0LnZhbHVlLCBzZWxmLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXZlbnQgPT09IFwib25DaGFuZ2VcIikge1xuICAgICAgICAgICAgc2VsZi5pbnB1dC5kaXNwYXRjaEV2ZW50KGNyZWF0ZUV2ZW50KFwiY2hhbmdlXCIpKTtcbiAgICAgICAgICAgIHNlbGYuaW5wdXQuZGlzcGF0Y2hFdmVudChjcmVhdGVFdmVudChcImlucHV0XCIpKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVFdmVudChuYW1lKSB7XG4gICAgICAgIHZhciBlID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoXCJFdmVudFwiKTtcbiAgICAgICAgZS5pbml0RXZlbnQobmFtZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0RhdGVTZWxlY3RlZChkYXRlKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5zZWxlY3RlZERhdGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWREYXRlID0gc2VsZi5zZWxlY3RlZERhdGVzW2ldO1xuICAgICAgICAgICAgaWYgKHNlbGVjdGVkRGF0ZSBpbnN0YW5jZW9mIERhdGUgJiZcbiAgICAgICAgICAgICAgICBjb21wYXJlRGF0ZXMoc2VsZWN0ZWREYXRlLCBkYXRlKSA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJcIiArIGk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0RhdGVJblJhbmdlKGRhdGUpIHtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiB8fCBzZWxmLnNlbGVjdGVkRGF0ZXMubGVuZ3RoIDwgMilcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIChjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzBdKSA+PSAwICYmXG4gICAgICAgICAgICBjb21wYXJlRGF0ZXMoZGF0ZSwgc2VsZi5zZWxlY3RlZERhdGVzWzFdKSA8PSAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gdXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCgpIHtcbiAgICAgICAgaWYgKHNlbGYuY29uZmlnLm5vQ2FsZW5kYXIgfHwgc2VsZi5pc01vYmlsZSB8fCAhc2VsZi5tb250aE5hdilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgc2VsZi55ZWFyRWxlbWVudHMuZm9yRWFjaChmdW5jdGlvbiAoeWVhckVsZW1lbnQsIGkpIHtcbiAgICAgICAgICAgIHZhciBkID0gbmV3IERhdGUoc2VsZi5jdXJyZW50WWVhciwgc2VsZi5jdXJyZW50TW9udGgsIDEpO1xuICAgICAgICAgICAgZC5zZXRNb250aChzZWxmLmN1cnJlbnRNb250aCArIGkpO1xuICAgICAgICAgICAgaWYgKHNlbGYuY29uZmlnLnNob3dNb250aHMgPiAxIHx8XG4gICAgICAgICAgICAgICAgc2VsZi5jb25maWcubW9udGhTZWxlY3RvclR5cGUgPT09IFwic3RhdGljXCIpIHtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoRWxlbWVudHNbaV0udGV4dENvbnRlbnQgPVxuICAgICAgICAgICAgICAgICAgICBtb250aFRvU3RyKGQuZ2V0TW9udGgoKSwgc2VsZi5jb25maWcuc2hvcnRoYW5kQ3VycmVudE1vbnRoLCBzZWxmLmwxMG4pICsgXCIgXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzZWxmLm1vbnRoc0Ryb3Bkb3duQ29udGFpbmVyLnZhbHVlID0gZC5nZXRNb250aCgpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB5ZWFyRWxlbWVudC52YWx1ZSA9IGQuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpO1xuICAgICAgICB9KTtcbiAgICAgICAgc2VsZi5faGlkZVByZXZNb250aEFycm93ID1cbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1pbkRhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmN1cnJlbnRNb250aCA8PSBzZWxmLmNvbmZpZy5taW5EYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRZZWFyIDwgc2VsZi5jb25maWcubWluRGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICAgICAgc2VsZi5faGlkZU5leHRNb250aEFycm93ID1cbiAgICAgICAgICAgIHNlbGYuY29uZmlnLm1heERhdGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgIChzZWxmLmN1cnJlbnRZZWFyID09PSBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgICAgICAgICAgPyBzZWxmLmN1cnJlbnRNb250aCArIDEgPiBzZWxmLmNvbmZpZy5tYXhEYXRlLmdldE1vbnRoKClcbiAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmN1cnJlbnRZZWFyID4gc2VsZi5jb25maWcubWF4RGF0ZS5nZXRGdWxsWWVhcigpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGF0ZVN0cihzcGVjaWZpY0Zvcm1hdCkge1xuICAgICAgICB2YXIgZm9ybWF0ID0gc3BlY2lmaWNGb3JtYXQgfHxcbiAgICAgICAgICAgIChzZWxmLmNvbmZpZy5hbHRJbnB1dCA/IHNlbGYuY29uZmlnLmFsdEZvcm1hdCA6IHNlbGYuY29uZmlnLmRhdGVGb3JtYXQpO1xuICAgICAgICByZXR1cm4gc2VsZi5zZWxlY3RlZERhdGVzXG4gICAgICAgICAgICAubWFwKGZ1bmN0aW9uIChkT2JqKSB7IHJldHVybiBzZWxmLmZvcm1hdERhdGUoZE9iaiwgZm9ybWF0KTsgfSlcbiAgICAgICAgICAgIC5maWx0ZXIoZnVuY3Rpb24gKGQsIGksIGFycikge1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIiB8fFxuICAgICAgICAgICAgICAgIHNlbGYuY29uZmlnLmVuYWJsZVRpbWUgfHxcbiAgICAgICAgICAgICAgICBhcnIuaW5kZXhPZihkKSA9PT0gaTtcbiAgICAgICAgfSlcbiAgICAgICAgICAgIC5qb2luKHNlbGYuY29uZmlnLm1vZGUgIT09IFwicmFuZ2VcIlxuICAgICAgICAgICAgPyBzZWxmLmNvbmZpZy5jb25qdW5jdGlvblxuICAgICAgICAgICAgOiBzZWxmLmwxMG4ucmFuZ2VTZXBhcmF0b3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB1cGRhdGVWYWx1ZSh0cmlnZ2VyQ2hhbmdlKSB7XG4gICAgICAgIGlmICh0cmlnZ2VyQ2hhbmdlID09PSB2b2lkIDApIHsgdHJpZ2dlckNoYW5nZSA9IHRydWU7IH1cbiAgICAgICAgaWYgKHNlbGYubW9iaWxlSW5wdXQgIT09IHVuZGVmaW5lZCAmJiBzZWxmLm1vYmlsZUZvcm1hdFN0cikge1xuICAgICAgICAgICAgc2VsZi5tb2JpbGVJbnB1dC52YWx1ZSA9XG4gICAgICAgICAgICAgICAgc2VsZi5sYXRlc3RTZWxlY3RlZERhdGVPYmogIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICA/IHNlbGYuZm9ybWF0RGF0ZShzZWxmLmxhdGVzdFNlbGVjdGVkRGF0ZU9iaiwgc2VsZi5tb2JpbGVGb3JtYXRTdHIpXG4gICAgICAgICAgICAgICAgICAgIDogXCJcIjtcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmlucHV0LnZhbHVlID0gZ2V0RGF0ZVN0cihzZWxmLmNvbmZpZy5kYXRlRm9ybWF0KTtcbiAgICAgICAgaWYgKHNlbGYuYWx0SW5wdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc2VsZi5hbHRJbnB1dC52YWx1ZSA9IGdldERhdGVTdHIoc2VsZi5jb25maWcuYWx0Rm9ybWF0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHJpZ2dlckNoYW5nZSAhPT0gZmFsc2UpXG4gICAgICAgICAgICB0cmlnZ2VyRXZlbnQoXCJvblZhbHVlVXBkYXRlXCIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBvbk1vbnRoTmF2Q2xpY2soZSkge1xuICAgICAgICB2YXIgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChlKTtcbiAgICAgICAgdmFyIGlzUHJldk1vbnRoID0gc2VsZi5wcmV2TW9udGhOYXYuY29udGFpbnMoZXZlbnRUYXJnZXQpO1xuICAgICAgICB2YXIgaXNOZXh0TW9udGggPSBzZWxmLm5leHRNb250aE5hdi5jb250YWlucyhldmVudFRhcmdldCk7XG4gICAgICAgIGlmIChpc1ByZXZNb250aCB8fCBpc05leHRNb250aCkge1xuICAgICAgICAgICAgY2hhbmdlTW9udGgoaXNQcmV2TW9udGggPyAtMSA6IDEpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNlbGYueWVhckVsZW1lbnRzLmluZGV4T2YoZXZlbnRUYXJnZXQpID49IDApIHtcbiAgICAgICAgICAgIGV2ZW50VGFyZ2V0LnNlbGVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGV2ZW50VGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucyhcImFycm93VXBcIikpIHtcbiAgICAgICAgICAgIHNlbGYuY2hhbmdlWWVhcihzZWxmLmN1cnJlbnRZZWFyICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZXZlbnRUYXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKFwiYXJyb3dEb3duXCIpKSB7XG4gICAgICAgICAgICBzZWxmLmNoYW5nZVllYXIoc2VsZi5jdXJyZW50WWVhciAtIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHRpbWVXcmFwcGVyKGUpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB2YXIgaXNLZXlEb3duID0gZS50eXBlID09PSBcImtleWRvd25cIiwgZXZlbnRUYXJnZXQgPSBnZXRFdmVudFRhcmdldChlKSwgaW5wdXQgPSBldmVudFRhcmdldDtcbiAgICAgICAgaWYgKHNlbGYuYW1QTSAhPT0gdW5kZWZpbmVkICYmIGV2ZW50VGFyZ2V0ID09PSBzZWxmLmFtUE0pIHtcbiAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICAgc2VsZi5sMTBuLmFtUE1baW50KHNlbGYuYW1QTS50ZXh0Q29udGVudCA9PT0gc2VsZi5sMTBuLmFtUE1bMF0pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbWluID0gcGFyc2VGbG9hdChpbnB1dC5nZXRBdHRyaWJ1dGUoXCJtaW5cIikpLCBtYXggPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcIm1heFwiKSksIHN0ZXAgPSBwYXJzZUZsb2F0KGlucHV0LmdldEF0dHJpYnV0ZShcInN0ZXBcIikpLCBjdXJWYWx1ZSA9IHBhcnNlSW50KGlucHV0LnZhbHVlLCAxMCksIGRlbHRhID0gZS5kZWx0YSB8fFxuICAgICAgICAgICAgKGlzS2V5RG93biA/IChlLndoaWNoID09PSAzOCA/IDEgOiAtMSkgOiAwKTtcbiAgICAgICAgdmFyIG5ld1ZhbHVlID0gY3VyVmFsdWUgKyBzdGVwICogZGVsdGE7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQudmFsdWUgIT09IFwidW5kZWZpbmVkXCIgJiYgaW5wdXQudmFsdWUubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICB2YXIgaXNIb3VyRWxlbSA9IGlucHV0ID09PSBzZWxmLmhvdXJFbGVtZW50LCBpc01pbnV0ZUVsZW0gPSBpbnB1dCA9PT0gc2VsZi5taW51dGVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKG5ld1ZhbHVlIDwgbWluKSB7XG4gICAgICAgICAgICAgICAgbmV3VmFsdWUgPVxuICAgICAgICAgICAgICAgICAgICBtYXggK1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3VmFsdWUgK1xuICAgICAgICAgICAgICAgICAgICAgICAgaW50KCFpc0hvdXJFbGVtKSArXG4gICAgICAgICAgICAgICAgICAgICAgICAoaW50KGlzSG91ckVsZW0pICYmIGludCghc2VsZi5hbVBNKSk7XG4gICAgICAgICAgICAgICAgaWYgKGlzTWludXRlRWxlbSlcbiAgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50TnVtSW5wdXQodW5kZWZpbmVkLCAtMSwgc2VsZi5ob3VyRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChuZXdWYWx1ZSA+IG1heCkge1xuICAgICAgICAgICAgICAgIG5ld1ZhbHVlID1cbiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPT09IHNlbGYuaG91ckVsZW1lbnQgPyBuZXdWYWx1ZSAtIG1heCAtIGludCghc2VsZi5hbVBNKSA6IG1pbjtcbiAgICAgICAgICAgICAgICBpZiAoaXNNaW51dGVFbGVtKVxuICAgICAgICAgICAgICAgICAgICBpbmNyZW1lbnROdW1JbnB1dCh1bmRlZmluZWQsIDEsIHNlbGYuaG91ckVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNlbGYuYW1QTSAmJlxuICAgICAgICAgICAgICAgIGlzSG91ckVsZW0gJiZcbiAgICAgICAgICAgICAgICAoc3RlcCA9PT0gMVxuICAgICAgICAgICAgICAgICAgICA/IG5ld1ZhbHVlICsgY3VyVmFsdWUgPT09IDIzXG4gICAgICAgICAgICAgICAgICAgIDogTWF0aC5hYnMobmV3VmFsdWUgLSBjdXJWYWx1ZSkgPiBzdGVwKSkge1xuICAgICAgICAgICAgICAgIHNlbGYuYW1QTS50ZXh0Q29udGVudCA9XG4gICAgICAgICAgICAgICAgICAgIHNlbGYubDEwbi5hbVBNW2ludChzZWxmLmFtUE0udGV4dENvbnRlbnQgPT09IHNlbGYubDEwbi5hbVBNWzBdKV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHBhZChuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5pdCgpO1xuICAgIHJldHVybiBzZWxmO1xufVxuZnVuY3Rpb24gX2ZsYXRwaWNrcihub2RlTGlzdCwgY29uZmlnKSB7XG4gICAgdmFyIG5vZGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlXG4gICAgICAgIC5jYWxsKG5vZGVMaXN0KVxuICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7IH0pO1xuICAgIHZhciBpbnN0YW5jZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBub2RlID0gbm9kZXNbaV07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAobm9kZS5nZXRBdHRyaWJ1dGUoXCJkYXRhLWZwLW9taXRcIikgIT09IG51bGwpXG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICBpZiAobm9kZS5fZmxhdHBpY2tyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBub2RlLl9mbGF0cGlja3IuZGVzdHJveSgpO1xuICAgICAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrciA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUuX2ZsYXRwaWNrciA9IEZsYXRwaWNrckluc3RhbmNlKG5vZGUsIGNvbmZpZyB8fCB7fSk7XG4gICAgICAgICAgICBpbnN0YW5jZXMucHVzaChub2RlLl9mbGF0cGlja3IpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBpbnN0YW5jZXMubGVuZ3RoID09PSAxID8gaW5zdGFuY2VzWzBdIDogaW5zdGFuY2VzO1xufVxuaWYgKHR5cGVvZiBIVE1MRWxlbWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBIVE1MQ29sbGVjdGlvbiAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuICAgIHR5cGVvZiBOb2RlTGlzdCAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIEhUTUxDb2xsZWN0aW9uLnByb3RvdHlwZS5mbGF0cGlja3IgPSBOb2RlTGlzdC5wcm90b3R5cGUuZmxhdHBpY2tyID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcih0aGlzLCBjb25maWcpO1xuICAgIH07XG4gICAgSFRNTEVsZW1lbnQucHJvdG90eXBlLmZsYXRwaWNrciA9IGZ1bmN0aW9uIChjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIF9mbGF0cGlja3IoW3RoaXNdLCBjb25maWcpO1xuICAgIH07XG59XG52YXIgZmxhdHBpY2tyID0gZnVuY3Rpb24gKHNlbGVjdG9yLCBjb25maWcpIHtcbiAgICBpZiAodHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBfZmxhdHBpY2tyKHdpbmRvdy5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKHNlbGVjdG9yKSwgY29uZmlnKTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2VsZWN0b3IgaW5zdGFuY2VvZiBOb2RlKSB7XG4gICAgICAgIHJldHVybiBfZmxhdHBpY2tyKFtzZWxlY3Rvcl0sIGNvbmZpZyk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcihzZWxlY3RvciwgY29uZmlnKTtcbiAgICB9XG59O1xuZmxhdHBpY2tyLmRlZmF1bHRDb25maWcgPSB7fTtcbmZsYXRwaWNrci5sMTBucyA9IHtcbiAgICBlbjogX19hc3NpZ24oe30sIEVuZ2xpc2gpLFxuICAgIGRlZmF1bHQ6IF9fYXNzaWduKHt9LCBFbmdsaXNoKSxcbn07XG5mbGF0cGlja3IubG9jYWxpemUgPSBmdW5jdGlvbiAobDEwbikge1xuICAgIGZsYXRwaWNrci5sMTBucy5kZWZhdWx0ID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGZsYXRwaWNrci5sMTBucy5kZWZhdWx0KSwgbDEwbik7XG59O1xuZmxhdHBpY2tyLnNldERlZmF1bHRzID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgIGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnID0gX19hc3NpZ24oX19hc3NpZ24oe30sIGZsYXRwaWNrci5kZWZhdWx0Q29uZmlnKSwgY29uZmlnKTtcbn07XG5mbGF0cGlja3IucGFyc2VEYXRlID0gY3JlYXRlRGF0ZVBhcnNlcih7fSk7XG5mbGF0cGlja3IuZm9ybWF0RGF0ZSA9IGNyZWF0ZURhdGVGb3JtYXR0ZXIoe30pO1xuZmxhdHBpY2tyLmNvbXBhcmVEYXRlcyA9IGNvbXBhcmVEYXRlcztcbmlmICh0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBqUXVlcnkuZm4gIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBqUXVlcnkuZm4uZmxhdHBpY2tyID0gZnVuY3Rpb24gKGNvbmZpZykge1xuICAgICAgICByZXR1cm4gX2ZsYXRwaWNrcih0aGlzLCBjb25maWcpO1xuICAgIH07XG59XG5EYXRlLnByb3RvdHlwZS5mcF9pbmNyID0gZnVuY3Rpb24gKGRheXMpIHtcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy5nZXRGdWxsWWVhcigpLCB0aGlzLmdldE1vbnRoKCksIHRoaXMuZ2V0RGF0ZSgpICsgKHR5cGVvZiBkYXlzID09PSBcInN0cmluZ1wiID8gcGFyc2VJbnQoZGF5cywgMTApIDogZGF5cykpO1xufTtcbmlmICh0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgd2luZG93LmZsYXRwaWNrciA9IGZsYXRwaWNrcjtcbn1cbmV4cG9ydCBkZWZhdWx0IGZsYXRwaWNrcjtcbiIsImltcG9ydCBmbGF0cGlja3IgZnJvbSAnZmxhdHBpY2tyJztcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHByb3BzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgZGVzY3JpcHRvci5jb25maWd1cmFibGUgPSB0cnVlO1xuICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVDbGFzcyhDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgaWYgKHByb3RvUHJvcHMpIF9kZWZpbmVQcm9wZXJ0aWVzKENvbnN0cnVjdG9yLnByb3RvdHlwZSwgcHJvdG9Qcm9wcyk7XG4gIGlmIChzdGF0aWNQcm9wcykgX2RlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgcmV0dXJuIENvbnN0cnVjdG9yO1xufVxuXG5mdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHZhbHVlKSB7XG4gIGlmIChrZXkgaW4gb2JqKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBvYmpba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIG9iajtcbn1cblxuZnVuY3Rpb24gb3duS2V5cyhvYmplY3QsIGVudW1lcmFibGVPbmx5KSB7XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMob2JqZWN0KTtcblxuICBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scykge1xuICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpO1xuICAgIGlmIChlbnVtZXJhYmxlT25seSkgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHtcbiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgc3ltKS5lbnVtZXJhYmxlO1xuICAgIH0pO1xuICAgIGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkMih0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTtcblxuICAgIGlmIChpICUgMikge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSwgdHJ1ZSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIF9kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgc291cmNlW2tleV0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycykge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn1cblxuZnVuY3Rpb24gX2luaGVyaXRzKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb25cIik7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9XG4gIH0pO1xuICBpZiAoc3VwZXJDbGFzcykgX3NldFByb3RvdHlwZU9mKHN1YkNsYXNzLCBzdXBlckNsYXNzKTtcbn1cblxuZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgX2dldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mID8gT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gX2dldFByb3RvdHlwZU9mKG8pIHtcbiAgICByZXR1cm4gby5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKG8pO1xuICB9O1xuICByZXR1cm4gX2dldFByb3RvdHlwZU9mKG8pO1xufVxuXG5mdW5jdGlvbiBfc2V0UHJvdG90eXBlT2YobywgcCkge1xuICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBvLl9fcHJvdG9fXyA9IHA7XG4gICAgcmV0dXJuIG87XG4gIH07XG5cbiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZihvLCBwKTtcbn1cblxuZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcInVuZGVmaW5lZFwiIHx8ICFSZWZsZWN0LmNvbnN0cnVjdCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSkgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gIHRyeSB7XG4gICAgRGF0ZS5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChEYXRlLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufVxuXG5mdW5jdGlvbiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybihzZWxmLCBjYWxsKSB7XG4gIGlmIChjYWxsICYmICh0eXBlb2YgY2FsbCA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2YgY2FsbCA9PT0gXCJmdW5jdGlvblwiKSkge1xuICAgIHJldHVybiBjYWxsO1xuICB9XG5cbiAgcmV0dXJuIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZik7XG59XG5cbmZ1bmN0aW9uIF9jcmVhdGVTdXBlcihEZXJpdmVkKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIFN1cGVyID0gX2dldFByb3RvdHlwZU9mKERlcml2ZWQpLFxuICAgICAgICByZXN1bHQ7XG5cbiAgICBpZiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgICB2YXIgTmV3VGFyZ2V0ID0gX2dldFByb3RvdHlwZU9mKHRoaXMpLmNvbnN0cnVjdG9yO1xuXG4gICAgICByZXN1bHQgPSBSZWZsZWN0LmNvbnN0cnVjdChTdXBlciwgYXJndW1lbnRzLCBOZXdUYXJnZXQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBTdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cblxuICAgIHJldHVybiBfcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCByZXN1bHQpO1xuICB9O1xufVxuXG4vKlxuU3RpbXVsdXMgMy4wLjBcbkNvcHlyaWdodCDCqSAyMDIxIEJhc2VjYW1wLCBMTENcbiAqL1xuXG5mdW5jdGlvbiBjYW1lbGl6ZSh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUucmVwbGFjZSgvKD86W18tXSkoW2EtejAtOV0pL2csIChfLCBjaGFyKSA9PiBjaGFyLnRvVXBwZXJDYXNlKCkpO1xufVxuXG5mdW5jdGlvbiBjYXBpdGFsaXplKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHZhbHVlLnNsaWNlKDEpO1xufVxuXG5mdW5jdGlvbiBkYXNoZXJpemUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlLnJlcGxhY2UoLyhbQS1aXSkvZywgKF8sIGNoYXIpID0+IGAtJHtjaGFyLnRvTG93ZXJDYXNlKCl9YCk7XG59XG5cbmZ1bmN0aW9uIHJlYWRJbmhlcml0YWJsZVN0YXRpY0FycmF5VmFsdWVzKGNvbnN0cnVjdG9yLCBwcm9wZXJ0eU5hbWUpIHtcbiAgY29uc3QgYW5jZXN0b3JzID0gZ2V0QW5jZXN0b3JzRm9yQ29uc3RydWN0b3IoY29uc3RydWN0b3IpO1xuICByZXR1cm4gQXJyYXkuZnJvbShhbmNlc3RvcnMucmVkdWNlKCh2YWx1ZXMsIGNvbnN0cnVjdG9yKSA9PiB7XG4gICAgZ2V0T3duU3RhdGljQXJyYXlWYWx1ZXMoY29uc3RydWN0b3IsIHByb3BlcnR5TmFtZSkuZm9yRWFjaChuYW1lID0+IHZhbHVlcy5hZGQobmFtZSkpO1xuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0sIG5ldyBTZXQoKSkpO1xufVxuXG5mdW5jdGlvbiByZWFkSW5oZXJpdGFibGVTdGF0aWNPYmplY3RQYWlycyhjb25zdHJ1Y3RvciwgcHJvcGVydHlOYW1lKSB7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGdldEFuY2VzdG9yc0ZvckNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKTtcbiAgcmV0dXJuIGFuY2VzdG9ycy5yZWR1Y2UoKHBhaXJzLCBjb25zdHJ1Y3RvcikgPT4ge1xuICAgIHBhaXJzLnB1c2goLi4uZ2V0T3duU3RhdGljT2JqZWN0UGFpcnMoY29uc3RydWN0b3IsIHByb3BlcnR5TmFtZSkpO1xuICAgIHJldHVybiBwYWlycztcbiAgfSwgW10pO1xufVxuXG5mdW5jdGlvbiBnZXRBbmNlc3RvcnNGb3JDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcikge1xuICBjb25zdCBhbmNlc3RvcnMgPSBbXTtcblxuICB3aGlsZSAoY29uc3RydWN0b3IpIHtcbiAgICBhbmNlc3RvcnMucHVzaChjb25zdHJ1Y3Rvcik7XG4gICAgY29uc3RydWN0b3IgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoY29uc3RydWN0b3IpO1xuICB9XG5cbiAgcmV0dXJuIGFuY2VzdG9ycy5yZXZlcnNlKCk7XG59XG5cbmZ1bmN0aW9uIGdldE93blN0YXRpY0FycmF5VmFsdWVzKGNvbnN0cnVjdG9yLCBwcm9wZXJ0eU5hbWUpIHtcbiAgY29uc3QgZGVmaW5pdGlvbiA9IGNvbnN0cnVjdG9yW3Byb3BlcnR5TmFtZV07XG4gIHJldHVybiBBcnJheS5pc0FycmF5KGRlZmluaXRpb24pID8gZGVmaW5pdGlvbiA6IFtdO1xufVxuXG5mdW5jdGlvbiBnZXRPd25TdGF0aWNPYmplY3RQYWlycyhjb25zdHJ1Y3RvciwgcHJvcGVydHlOYW1lKSB7XG4gIGNvbnN0IGRlZmluaXRpb24gPSBjb25zdHJ1Y3Rvcltwcm9wZXJ0eU5hbWVdO1xuICByZXR1cm4gZGVmaW5pdGlvbiA/IE9iamVjdC5rZXlzKGRlZmluaXRpb24pLm1hcChrZXkgPT4gW2tleSwgZGVmaW5pdGlvbltrZXldXSkgOiBbXTtcbn1cblxuY29uc3QgZXh0ZW5kID0gKCgpID0+IHtcbiAgZnVuY3Rpb24gZXh0ZW5kV2l0aFJlZmxlY3QoY29uc3RydWN0b3IpIHtcbiAgICBmdW5jdGlvbiBleHRlbmRlZCgpIHtcbiAgICAgIHJldHVybiBSZWZsZWN0LmNvbnN0cnVjdChjb25zdHJ1Y3RvciwgYXJndW1lbnRzLCBuZXcudGFyZ2V0KTtcbiAgICB9XG5cbiAgICBleHRlbmRlZC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKGNvbnN0cnVjdG9yLnByb3RvdHlwZSwge1xuICAgICAgY29uc3RydWN0b3I6IHtcbiAgICAgICAgdmFsdWU6IGV4dGVuZGVkXG4gICAgICB9XG4gICAgfSk7XG4gICAgUmVmbGVjdC5zZXRQcm90b3R5cGVPZihleHRlbmRlZCwgY29uc3RydWN0b3IpO1xuICAgIHJldHVybiBleHRlbmRlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRlc3RSZWZsZWN0RXh0ZW5zaW9uKCkge1xuICAgIGNvbnN0IGEgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLmEuY2FsbCh0aGlzKTtcbiAgICB9O1xuXG4gICAgY29uc3QgYiA9IGV4dGVuZFdpdGhSZWZsZWN0KGEpO1xuXG4gICAgYi5wcm90b3R5cGUuYSA9IGZ1bmN0aW9uICgpIHt9O1xuXG4gICAgcmV0dXJuIG5ldyBiKCk7XG4gIH1cblxuICB0cnkge1xuICAgIHRlc3RSZWZsZWN0RXh0ZW5zaW9uKCk7XG4gICAgcmV0dXJuIGV4dGVuZFdpdGhSZWZsZWN0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBjb25zdHJ1Y3RvciA9PiBjbGFzcyBleHRlbmRlZCBleHRlbmRzIGNvbnN0cnVjdG9yIHt9O1xuICB9XG59KSgpO1xuXG5mdW5jdGlvbiBDbGFzc1Byb3BlcnRpZXNCbGVzc2luZyhjb25zdHJ1Y3Rvcikge1xuICBjb25zdCBjbGFzc2VzID0gcmVhZEluaGVyaXRhYmxlU3RhdGljQXJyYXlWYWx1ZXMoY29uc3RydWN0b3IsIFwiY2xhc3Nlc1wiKTtcbiAgcmV0dXJuIGNsYXNzZXMucmVkdWNlKChwcm9wZXJ0aWVzLCBjbGFzc0RlZmluaXRpb24pID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihwcm9wZXJ0aWVzLCBwcm9wZXJ0aWVzRm9yQ2xhc3NEZWZpbml0aW9uKGNsYXNzRGVmaW5pdGlvbikpO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIHByb3BlcnRpZXNGb3JDbGFzc0RlZmluaXRpb24oa2V5KSB7XG4gIHJldHVybiB7XG4gICAgW2Ake2tleX1DbGFzc2BdOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBjbGFzc2VzXG4gICAgICAgIH0gPSB0aGlzO1xuXG4gICAgICAgIGlmIChjbGFzc2VzLmhhcyhrZXkpKSB7XG4gICAgICAgICAgcmV0dXJuIGNsYXNzZXMuZ2V0KGtleSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlID0gY2xhc3Nlcy5nZXRBdHRyaWJ1dGVOYW1lKGtleSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBNaXNzaW5nIGF0dHJpYnV0ZSBcIiR7YXR0cmlidXRlfVwiYCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgIH0sXG4gICAgW2Ake2tleX1DbGFzc2VzYF06IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2xhc3Nlcy5nZXRBbGwoa2V5KTtcbiAgICAgIH1cblxuICAgIH0sXG4gICAgW2BoYXMke2NhcGl0YWxpemUoa2V5KX1DbGFzc2BdOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsYXNzZXMuaGFzKGtleSk7XG4gICAgICB9XG5cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIFRhcmdldFByb3BlcnRpZXNCbGVzc2luZyhjb25zdHJ1Y3Rvcikge1xuICBjb25zdCB0YXJnZXRzID0gcmVhZEluaGVyaXRhYmxlU3RhdGljQXJyYXlWYWx1ZXMoY29uc3RydWN0b3IsIFwidGFyZ2V0c1wiKTtcbiAgcmV0dXJuIHRhcmdldHMucmVkdWNlKChwcm9wZXJ0aWVzLCB0YXJnZXREZWZpbml0aW9uKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvcGVydGllcywgcHJvcGVydGllc0ZvclRhcmdldERlZmluaXRpb24odGFyZ2V0RGVmaW5pdGlvbikpO1xuICB9LCB7fSk7XG59XG5cbmZ1bmN0aW9uIHByb3BlcnRpZXNGb3JUYXJnZXREZWZpbml0aW9uKG5hbWUpIHtcbiAgcmV0dXJuIHtcbiAgICBbYCR7bmFtZX1UYXJnZXRgXToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnRhcmdldHMuZmluZChuYW1lKTtcblxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHRhcmdldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgdGFyZ2V0IGVsZW1lbnQgXCIke25hbWV9XCIgZm9yIFwiJHt0aGlzLmlkZW50aWZpZXJ9XCIgY29udHJvbGxlcmApO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9LFxuICAgIFtgJHtuYW1lfVRhcmdldHNgXToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50YXJnZXRzLmZpbmRBbGwobmFtZSk7XG4gICAgICB9XG5cbiAgICB9LFxuICAgIFtgaGFzJHtjYXBpdGFsaXplKG5hbWUpfVRhcmdldGBdOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRhcmdldHMuaGFzKG5hbWUpO1xuICAgICAgfVxuXG4gICAgfVxuICB9O1xufVxuXG5mdW5jdGlvbiBWYWx1ZVByb3BlcnRpZXNCbGVzc2luZyhjb25zdHJ1Y3Rvcikge1xuICBjb25zdCB2YWx1ZURlZmluaXRpb25QYWlycyA9IHJlYWRJbmhlcml0YWJsZVN0YXRpY09iamVjdFBhaXJzKGNvbnN0cnVjdG9yLCBcInZhbHVlc1wiKTtcbiAgY29uc3QgcHJvcGVydHlEZXNjcmlwdG9yTWFwID0ge1xuICAgIHZhbHVlRGVzY3JpcHRvck1hcDoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdmFsdWVEZWZpbml0aW9uUGFpcnMucmVkdWNlKChyZXN1bHQsIHZhbHVlRGVmaW5pdGlvblBhaXIpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZURlc2NyaXB0b3IgPSBwYXJzZVZhbHVlRGVmaW5pdGlvblBhaXIodmFsdWVEZWZpbml0aW9uUGFpcik7XG4gICAgICAgICAgY29uc3QgYXR0cmlidXRlTmFtZSA9IHRoaXMuZGF0YS5nZXRBdHRyaWJ1dGVOYW1lRm9yS2V5KHZhbHVlRGVzY3JpcHRvci5rZXkpO1xuICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlc3VsdCwge1xuICAgICAgICAgICAgW2F0dHJpYnV0ZU5hbWVdOiB2YWx1ZURlc2NyaXB0b3JcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSwge30pO1xuICAgICAgfVxuXG4gICAgfVxuICB9O1xuICByZXR1cm4gdmFsdWVEZWZpbml0aW9uUGFpcnMucmVkdWNlKChwcm9wZXJ0aWVzLCB2YWx1ZURlZmluaXRpb25QYWlyKSA9PiB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ocHJvcGVydGllcywgcHJvcGVydGllc0ZvclZhbHVlRGVmaW5pdGlvblBhaXIodmFsdWVEZWZpbml0aW9uUGFpcikpO1xuICB9LCBwcm9wZXJ0eURlc2NyaXB0b3JNYXApO1xufVxuXG5mdW5jdGlvbiBwcm9wZXJ0aWVzRm9yVmFsdWVEZWZpbml0aW9uUGFpcih2YWx1ZURlZmluaXRpb25QYWlyKSB7XG4gIGNvbnN0IGRlZmluaXRpb24gPSBwYXJzZVZhbHVlRGVmaW5pdGlvblBhaXIodmFsdWVEZWZpbml0aW9uUGFpcik7XG4gIGNvbnN0IHtcbiAgICBrZXksXG4gICAgbmFtZSxcbiAgICByZWFkZXI6IHJlYWQsXG4gICAgd3JpdGVyOiB3cml0ZVxuICB9ID0gZGVmaW5pdGlvbjtcbiAgcmV0dXJuIHtcbiAgICBbbmFtZV06IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLmRhdGEuZ2V0KGtleSk7XG5cbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHJlYWQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBkZWZpbml0aW9uLmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5kYXRhLmRlbGV0ZShrZXkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGF0YS5zZXQoa2V5LCB3cml0ZSh2YWx1ZSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICB9LFxuICAgIFtgaGFzJHtjYXBpdGFsaXplKG5hbWUpfWBdOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRhdGEuaGFzKGtleSkgfHwgZGVmaW5pdGlvbi5oYXNDdXN0b21EZWZhdWx0VmFsdWU7XG4gICAgICB9XG5cbiAgICB9XG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlVmFsdWVEZWZpbml0aW9uUGFpcihbdG9rZW4sIHR5cGVEZWZpbml0aW9uXSkge1xuICByZXR1cm4gdmFsdWVEZXNjcmlwdG9yRm9yVG9rZW5BbmRUeXBlRGVmaW5pdGlvbih0b2tlbiwgdHlwZURlZmluaXRpb24pO1xufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlVHlwZUNvbnN0YW50KGNvbnN0YW50KSB7XG4gIHN3aXRjaCAoY29uc3RhbnQpIHtcbiAgICBjYXNlIEFycmF5OlxuICAgICAgcmV0dXJuIFwiYXJyYXlcIjtcblxuICAgIGNhc2UgQm9vbGVhbjpcbiAgICAgIHJldHVybiBcImJvb2xlYW5cIjtcblxuICAgIGNhc2UgTnVtYmVyOlxuICAgICAgcmV0dXJuIFwibnVtYmVyXCI7XG5cbiAgICBjYXNlIE9iamVjdDpcbiAgICAgIHJldHVybiBcIm9iamVjdFwiO1xuXG4gICAgY2FzZSBTdHJpbmc6XG4gICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlVHlwZURlZmF1bHQoZGVmYXVsdFZhbHVlKSB7XG4gIHN3aXRjaCAodHlwZW9mIGRlZmF1bHRWYWx1ZSkge1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG5cbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJcIjtcblxuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoZGVmYXVsdFZhbHVlKSkgcmV0dXJuIFwiYXJyYXlcIjtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChkZWZhdWx0VmFsdWUpID09PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gXCJvYmplY3RcIjtcbn1cblxuZnVuY3Rpb24gcGFyc2VWYWx1ZVR5cGVPYmplY3QodHlwZU9iamVjdCkge1xuICBjb25zdCB0eXBlRnJvbU9iamVjdCA9IHBhcnNlVmFsdWVUeXBlQ29uc3RhbnQodHlwZU9iamVjdC50eXBlKTtcblxuICBpZiAodHlwZUZyb21PYmplY3QpIHtcbiAgICBjb25zdCBkZWZhdWx0VmFsdWVUeXBlID0gcGFyc2VWYWx1ZVR5cGVEZWZhdWx0KHR5cGVPYmplY3QuZGVmYXVsdCk7XG5cbiAgICBpZiAodHlwZUZyb21PYmplY3QgIT09IGRlZmF1bHRWYWx1ZVR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVHlwZSBcIiR7dHlwZUZyb21PYmplY3R9XCIgbXVzdCBtYXRjaCB0aGUgdHlwZSBvZiB0aGUgZGVmYXVsdCB2YWx1ZS4gR2l2ZW4gZGVmYXVsdCB2YWx1ZTogXCIke3R5cGVPYmplY3QuZGVmYXVsdH1cIiBhcyBcIiR7ZGVmYXVsdFZhbHVlVHlwZX1cImApO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlRnJvbU9iamVjdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVZhbHVlVHlwZURlZmluaXRpb24odHlwZURlZmluaXRpb24pIHtcbiAgY29uc3QgdHlwZUZyb21PYmplY3QgPSBwYXJzZVZhbHVlVHlwZU9iamVjdCh0eXBlRGVmaW5pdGlvbik7XG4gIGNvbnN0IHR5cGVGcm9tRGVmYXVsdFZhbHVlID0gcGFyc2VWYWx1ZVR5cGVEZWZhdWx0KHR5cGVEZWZpbml0aW9uKTtcbiAgY29uc3QgdHlwZUZyb21Db25zdGFudCA9IHBhcnNlVmFsdWVUeXBlQ29uc3RhbnQodHlwZURlZmluaXRpb24pO1xuICBjb25zdCB0eXBlID0gdHlwZUZyb21PYmplY3QgfHwgdHlwZUZyb21EZWZhdWx0VmFsdWUgfHwgdHlwZUZyb21Db25zdGFudDtcbiAgaWYgKHR5cGUpIHJldHVybiB0eXBlO1xuICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmFsdWUgdHlwZSBcIiR7dHlwZURlZmluaXRpb259XCJgKTtcbn1cblxuZnVuY3Rpb24gZGVmYXVsdFZhbHVlRm9yRGVmaW5pdGlvbih0eXBlRGVmaW5pdGlvbikge1xuICBjb25zdCBjb25zdGFudCA9IHBhcnNlVmFsdWVUeXBlQ29uc3RhbnQodHlwZURlZmluaXRpb24pO1xuICBpZiAoY29uc3RhbnQpIHJldHVybiBkZWZhdWx0VmFsdWVzQnlUeXBlW2NvbnN0YW50XTtcbiAgY29uc3QgZGVmYXVsdFZhbHVlID0gdHlwZURlZmluaXRpb24uZGVmYXVsdDtcbiAgaWYgKGRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gZGVmYXVsdFZhbHVlO1xuICByZXR1cm4gdHlwZURlZmluaXRpb247XG59XG5cbmZ1bmN0aW9uIHZhbHVlRGVzY3JpcHRvckZvclRva2VuQW5kVHlwZURlZmluaXRpb24odG9rZW4sIHR5cGVEZWZpbml0aW9uKSB7XG4gIGNvbnN0IGtleSA9IGAke2Rhc2hlcml6ZSh0b2tlbil9LXZhbHVlYDtcbiAgY29uc3QgdHlwZSA9IHBhcnNlVmFsdWVUeXBlRGVmaW5pdGlvbih0eXBlRGVmaW5pdGlvbik7XG4gIHJldHVybiB7XG4gICAgdHlwZSxcbiAgICBrZXksXG4gICAgbmFtZTogY2FtZWxpemUoa2V5KSxcblxuICAgIGdldCBkZWZhdWx0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gZGVmYXVsdFZhbHVlRm9yRGVmaW5pdGlvbih0eXBlRGVmaW5pdGlvbik7XG4gICAgfSxcblxuICAgIGdldCBoYXNDdXN0b21EZWZhdWx0VmFsdWUoKSB7XG4gICAgICByZXR1cm4gcGFyc2VWYWx1ZVR5cGVEZWZhdWx0KHR5cGVEZWZpbml0aW9uKSAhPT0gdW5kZWZpbmVkO1xuICAgIH0sXG5cbiAgICByZWFkZXI6IHJlYWRlcnNbdHlwZV0sXG4gICAgd3JpdGVyOiB3cml0ZXJzW3R5cGVdIHx8IHdyaXRlcnMuZGVmYXVsdFxuICB9O1xufVxuXG5jb25zdCBkZWZhdWx0VmFsdWVzQnlUeXBlID0ge1xuICBnZXQgYXJyYXkoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9LFxuXG4gIGJvb2xlYW46IGZhbHNlLFxuICBudW1iZXI6IDAsXG5cbiAgZ2V0IG9iamVjdCgpIHtcbiAgICByZXR1cm4ge307XG4gIH0sXG5cbiAgc3RyaW5nOiBcIlwiXG59O1xuY29uc3QgcmVhZGVycyA9IHtcbiAgYXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCBhcnJheSA9IEpTT04ucGFyc2UodmFsdWUpO1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycmF5KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIGFycmF5XCIpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheTtcbiAgfSxcblxuICBib29sZWFuKHZhbHVlKSB7XG4gICAgcmV0dXJuICEodmFsdWUgPT0gXCIwXCIgfHwgdmFsdWUgPT0gXCJmYWxzZVwiKTtcbiAgfSxcblxuICBudW1iZXIodmFsdWUpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbHVlKTtcbiAgfSxcblxuICBvYmplY3QodmFsdWUpIHtcbiAgICBjb25zdCBvYmplY3QgPSBKU09OLnBhcnNlKHZhbHVlKTtcblxuICAgIGlmIChvYmplY3QgPT09IG51bGwgfHwgdHlwZW9mIG9iamVjdCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIG9iamVjdFwiKTtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqZWN0O1xuICB9LFxuXG4gIHN0cmluZyh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG59O1xuY29uc3Qgd3JpdGVycyA9IHtcbiAgZGVmYXVsdDogd3JpdGVTdHJpbmcsXG4gIGFycmF5OiB3cml0ZUpTT04sXG4gIG9iamVjdDogd3JpdGVKU09OXG59O1xuXG5mdW5jdGlvbiB3cml0ZUpTT04odmFsdWUpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gd3JpdGVTdHJpbmcodmFsdWUpIHtcbiAgcmV0dXJuIGAke3ZhbHVlfWA7XG59XG5cbmNsYXNzIENvbnRyb2xsZXIge1xuICBjb25zdHJ1Y3Rvcihjb250ZXh0KSB7XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dDtcbiAgfVxuXG4gIHN0YXRpYyBnZXQgc2hvdWxkTG9hZCgpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGdldCBhcHBsaWNhdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0LmFwcGxpY2F0aW9uO1xuICB9XG5cbiAgZ2V0IHNjb3BlKCkge1xuICAgIHJldHVybiB0aGlzLmNvbnRleHQuc2NvcGU7XG4gIH1cblxuICBnZXQgZWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5zY29wZS5lbGVtZW50O1xuICB9XG5cbiAgZ2V0IGlkZW50aWZpZXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2NvcGUuaWRlbnRpZmllcjtcbiAgfVxuXG4gIGdldCB0YXJnZXRzKCkge1xuICAgIHJldHVybiB0aGlzLnNjb3BlLnRhcmdldHM7XG4gIH1cblxuICBnZXQgY2xhc3NlcygpIHtcbiAgICByZXR1cm4gdGhpcy5zY29wZS5jbGFzc2VzO1xuICB9XG5cbiAgZ2V0IGRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuc2NvcGUuZGF0YTtcbiAgfVxuXG4gIGluaXRpYWxpemUoKSB7fVxuXG4gIGNvbm5lY3QoKSB7fVxuXG4gIGRpc2Nvbm5lY3QoKSB7fVxuXG4gIGRpc3BhdGNoKGV2ZW50TmFtZSwge1xuICAgIHRhcmdldCA9IHRoaXMuZWxlbWVudCxcbiAgICBkZXRhaWwgPSB7fSxcbiAgICBwcmVmaXggPSB0aGlzLmlkZW50aWZpZXIsXG4gICAgYnViYmxlcyA9IHRydWUsXG4gICAgY2FuY2VsYWJsZSA9IHRydWVcbiAgfSA9IHt9KSB7XG4gICAgY29uc3QgdHlwZSA9IHByZWZpeCA/IGAke3ByZWZpeH06JHtldmVudE5hbWV9YCA6IGV2ZW50TmFtZTtcbiAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCh0eXBlLCB7XG4gICAgICBkZXRhaWwsXG4gICAgICBidWJibGVzLFxuICAgICAgY2FuY2VsYWJsZVxuICAgIH0pO1xuICAgIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxufVxuXG5Db250cm9sbGVyLmJsZXNzaW5ncyA9IFtDbGFzc1Byb3BlcnRpZXNCbGVzc2luZywgVGFyZ2V0UHJvcGVydGllc0JsZXNzaW5nLCBWYWx1ZVByb3BlcnRpZXNCbGVzc2luZ107XG5Db250cm9sbGVyLnRhcmdldHMgPSBbXTtcbkNvbnRyb2xsZXIudmFsdWVzID0ge307XG5cbmNvbnN0IGtlYmFiQ2FzZSA9IHN0cmluZyA9PiBzdHJpbmcucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgXCIkMS0kMlwiKS5yZXBsYWNlKC9bXFxzX10rL2csIFwiLVwiKS50b0xvd2VyQ2FzZSgpO1xuY29uc3QgY2FwaXRhbGl6ZSQxID0gc3RyaW5nID0+IHtcbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn07XG5cbmNvbnN0IGJvb2xlYW5PcHRpb25zID0gWydhbGxvd0lucHV0JywgJ2FsdElucHV0JywgJ2FuaW1hdGUnLCAnY2xpY2tPcGVucycsICdjbG9zZU9uU2VsZWN0JywgJ2Rpc2FibGVNb2JpbGUnLCAnZW5hYmxlU2Vjb25kcycsICdlbmFibGVUaW1lJywgJ2lubGluZScsICdub0NhbGVuZGFyJywgJ3Nob3J0aGFuZEN1cnJlbnRNb250aCcsICdzdGF0aWMnLCAndGltZV8yNGhyJywgJ3dlZWtOdW1iZXJzJywgJ3dyYXAnXTtcbmNvbnN0IHN0cmluZ09wdGlvbnMgPSBbJ2FsdElucHV0Q2xhc3MnLCAnY29uanVuY3Rpb24nLCAnbW9kZScsICduZXh0QXJyb3cnLCAncG9zaXRpb24nLCAncHJldkFycm93JywgJ21vbnRoU2VsZWN0b3JUeXBlJ107XG5jb25zdCBudW1iZXJPcHRpb25zID0gWydkZWZhdWx0SG91cicsICdkZWZhdWx0TWludXRlJywgJ2RlZmF1bHRTZWNvbmRzJywgJ2hvdXJJbmNyZW1lbnQnLCAnbWludXRlSW5jcmVtZW50JywgJ3Nob3dNb250aHMnXTtcbmNvbnN0IGFycmF5T3B0aW9ucyA9IFsnZGlzYWJsZScsICdlbmFibGUnLCAnZGlzYWJsZURheXNPZldlZWsnLCAnZW5hYmxlRGF5c09mV2VlayddO1xuY29uc3QgYXJyYXlPclN0cmluZ09wdGlvbnMgPSBbJ2RlZmF1bHREYXRlJ107XG5jb25zdCBkYXRlT3B0aW9ucyA9IFsnbWF4RGF0ZScsICdtaW5EYXRlJywgJ21heFRpbWUnLCAnbWluVGltZScsICdub3cnXTtcbmNvbnN0IGRhdGVGb3JtYXRzID0gWydhbHRGb3JtYXQnLCAnYXJpYURhdGVGb3JtYXQnLCAnZGF0ZUZvcm1hdCddO1xuY29uc3Qgb3B0aW9ucyA9IHtcbiAgc3RyaW5nOiBzdHJpbmdPcHRpb25zLFxuICBib29sZWFuOiBib29sZWFuT3B0aW9ucyxcbiAgZGF0ZTogZGF0ZU9wdGlvbnMsXG4gIGFycmF5OiBhcnJheU9wdGlvbnMsXG4gIG51bWJlcjogbnVtYmVyT3B0aW9ucyxcbiAgYXJyYXlPclN0cmluZzogYXJyYXlPclN0cmluZ09wdGlvbnNcbn07XG5cbmNvbnN0IGV2ZW50cyA9IFsnY2hhbmdlJywgJ29wZW4nLCAnY2xvc2UnLCAnbW9udGhDaGFuZ2UnLCAneWVhckNoYW5nZScsICdyZWFkeScsICd2YWx1ZVVwZGF0ZScsICdkYXlDcmVhdGUnXTtcblxuY29uc3QgZWxlbWVudHMgPSBbJ2NhbGVuZGFyQ29udGFpbmVyJywgJ2N1cnJlbnRZZWFyRWxlbWVudCcsICdkYXlzJywgJ2RheXNDb250YWluZXInLCAnaW5wdXQnLCAnbmV4dE1vbnRoTmF2JywgJ21vbnRoTmF2JywgJ3ByZXZNb250aE5hdicsICdyQ29udGFpbmVyJywgJ3NlbGVjdGVkRGF0ZUVsZW0nLCAndG9kYXlEYXRlRWxlbScsICd3ZWVrZGF5Q29udGFpbmVyJ107XG5cbmNvbnN0IG1hcHBpbmcgPSB7XG4gICclWSc6ICdZJyxcbiAgJyV5JzogJ3knLFxuICAnJUMnOiAnWScsXG4gICclbSc6ICdtJyxcbiAgJyUtbSc6ICduJyxcbiAgJyVfbSc6ICduJyxcbiAgJyVCJzogJ0YnLFxuICAnJV5CJzogJ0YnLFxuICAnJWInOiAnTScsXG4gICclXmInOiAnTScsXG4gICclaCc6ICdNJyxcbiAgJyVeaCc6ICdNJyxcbiAgJyVkJzogJ2QnLFxuICAnJS1kJzogJ2onLFxuICAnJWUnOiAnaicsXG4gICclSCc6ICdIJyxcbiAgJyVrJzogJ0gnLFxuICAnJUknOiAnaCcsXG4gICclbCc6ICdoJyxcbiAgJyUtbCc6ICdoJyxcbiAgJyVQJzogJ0snLFxuICAnJXAnOiAnSycsXG4gICclTSc6ICdpJyxcbiAgJyVTJzogJ1MnLFxuICAnJUEnOiAnbCcsXG4gICclYSc6ICdEJyxcbiAgJyV3JzogJ3cnXG59O1xuY29uc3Qgc3RyZnRpbWVSZWdleCA9IG5ldyBSZWdFeHAoT2JqZWN0LmtleXMobWFwcGluZykuam9pbignfCcpLnJlcGxhY2UobmV3IFJlZ0V4cCgnXFxcXF4nLCAnZycpLCAnXFxcXF4nKSwgJ2cnKTtcbmNvbnN0IGNvbnZlcnREYXRlRm9ybWF0ID0gZm9ybWF0ID0+IHtcbiAgcmV0dXJuIGZvcm1hdC5yZXBsYWNlKHN0cmZ0aW1lUmVnZXgsIG1hdGNoID0+IHtcbiAgICByZXR1cm4gbWFwcGluZ1ttYXRjaF07XG4gIH0pO1xufTtcblxubGV0IFN0aW11bHVzRmxhdHBpY2tyID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfQ29udHJvbGxlcikge1xuICBfaW5oZXJpdHMoU3RpbXVsdXNGbGF0cGlja3IsIF9Db250cm9sbGVyKTtcblxuICB2YXIgX3N1cGVyID0gX2NyZWF0ZVN1cGVyKFN0aW11bHVzRmxhdHBpY2tyKTtcblxuICBmdW5jdGlvbiBTdGltdWx1c0ZsYXRwaWNrcigpIHtcbiAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgU3RpbXVsdXNGbGF0cGlja3IpO1xuXG4gICAgcmV0dXJuIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICB9XG5cbiAgX2NyZWF0ZUNsYXNzKFN0aW11bHVzRmxhdHBpY2tyLCBbe1xuICAgIGtleTogXCJpbml0aWFsaXplXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGluaXRpYWxpemUoKSB7XG4gICAgICB0aGlzLmNvbmZpZyA9IHt9O1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJjb25uZWN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGNvbm5lY3QoKSB7XG4gICAgICB0aGlzLl9pbml0aWFsaXplRXZlbnRzKCk7XG5cbiAgICAgIHRoaXMuX2luaXRpYWxpemVPcHRpb25zKCk7XG5cbiAgICAgIHRoaXMuX2luaXRpYWxpemVEYXRlRm9ybWF0cygpO1xuXG4gICAgICB0aGlzLmZwID0gZmxhdHBpY2tyKHRoaXMuZmxhdHBpY2tyRWxlbWVudCwgX29iamVjdFNwcmVhZDIoe30sIHRoaXMuY29uZmlnKSk7XG5cbiAgICAgIHRoaXMuX2luaXRpYWxpemVFbGVtZW50cygpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJkaXNjb25uZWN0XCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIGRpc2Nvbm5lY3QoKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaW5wdXRUYXJnZXQudmFsdWU7XG4gICAgICB0aGlzLmZwLmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuaW5wdXRUYXJnZXQudmFsdWUgPSB2YWx1ZTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2luaXRpYWxpemVFdmVudHNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRpYWxpemVFdmVudHMoKSB7XG4gICAgICBldmVudHMuZm9yRWFjaChldmVudCA9PiB7XG4gICAgICAgIGlmICh0aGlzW2V2ZW50XSkge1xuICAgICAgICAgIGNvbnN0IGhvb2sgPSBgb24ke2NhcGl0YWxpemUkMShldmVudCl9YDtcbiAgICAgICAgICB0aGlzLmNvbmZpZ1tob29rXSA9IHRoaXNbZXZlbnRdLmJpbmQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfaW5pdGlhbGl6ZU9wdGlvbnNcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2luaXRpYWxpemVPcHRpb25zKCkge1xuICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChvcHRpb25UeXBlID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9uc0NhbWVsQ2FzZSA9IG9wdGlvbnNbb3B0aW9uVHlwZV07XG4gICAgICAgIG9wdGlvbnNDYW1lbENhc2UuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgIGNvbnN0IG9wdGlvbktlYmFiID0ga2ViYWJDYXNlKG9wdGlvbik7XG5cbiAgICAgICAgICBpZiAodGhpcy5kYXRhLmhhcyhvcHRpb25LZWJhYikpIHtcbiAgICAgICAgICAgIHRoaXMuY29uZmlnW29wdGlvbl0gPSB0aGlzW2BfJHtvcHRpb25UeXBlfWBdKG9wdGlvbktlYmFiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuX2hhbmRsZURheXNPZldlZWsoKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2hhbmRsZURheXNPZldlZWtcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2hhbmRsZURheXNPZldlZWsoKSB7XG4gICAgICBpZiAodGhpcy5jb25maWcuZGlzYWJsZURheXNPZldlZWspIHtcbiAgICAgICAgdGhpcy5jb25maWcuZGlzYWJsZURheXNPZldlZWsgPSB0aGlzLl92YWxpZGF0ZURheXNPZldlZWsodGhpcy5jb25maWcuZGlzYWJsZURheXNPZldlZWspO1xuICAgICAgICB0aGlzLmNvbmZpZy5kaXNhYmxlID0gWy4uLih0aGlzLmNvbmZpZy5kaXNhYmxlIHx8IFtdKSwgdGhpcy5fZGlzYWJsZS5iaW5kKHRoaXMpXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29uZmlnLmVuYWJsZURheXNPZldlZWspIHtcbiAgICAgICAgdGhpcy5jb25maWcuZW5hYmxlRGF5c09mV2VlayA9IHRoaXMuX3ZhbGlkYXRlRGF5c09mV2Vlayh0aGlzLmNvbmZpZy5lbmFibGVEYXlzT2ZXZWVrKTtcbiAgICAgICAgdGhpcy5jb25maWcuZW5hYmxlID0gWy4uLih0aGlzLmNvbmZpZy5lbmFibGUgfHwgW10pLCB0aGlzLl9lbmFibGUuYmluZCh0aGlzKV07XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl92YWxpZGF0ZURheXNPZldlZWtcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX3ZhbGlkYXRlRGF5c09mV2VlayhkYXlzKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXlzKSkge1xuICAgICAgICByZXR1cm4gZGF5cy5tYXAoZGF5ID0+IHBhcnNlSW50KGRheSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignZGF5cyBvZiB3ZWVrIG11c3QgYmUgYSB2YWxpZCBhcnJheScpO1xuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9kaXNhYmxlXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9kaXNhYmxlKGRhdGUpIHtcbiAgICAgIGNvbnN0IGRpc2FibGVkRGF5cyA9IHRoaXMuY29uZmlnLmRpc2FibGVEYXlzT2ZXZWVrO1xuICAgICAgcmV0dXJuIGRpc2FibGVkRGF5cy5pbmNsdWRlcyhkYXRlLmdldERheSgpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2VuYWJsZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZW5hYmxlKGRhdGUpIHtcbiAgICAgIGNvbnN0IGVuYWJsZWREYXlzID0gdGhpcy5jb25maWcuZW5hYmxlRGF5c09mV2VlaztcbiAgICAgIHJldHVybiBlbmFibGVkRGF5cy5pbmNsdWRlcyhkYXRlLmdldERheSgpKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2luaXRpYWxpemVEYXRlRm9ybWF0c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdGlhbGl6ZURhdGVGb3JtYXRzKCkge1xuICAgICAgZGF0ZUZvcm1hdHMuZm9yRWFjaChkYXRlRm9ybWF0ID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZGF0YS5oYXMoZGF0ZUZvcm1hdCkpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZ1tkYXRlRm9ybWF0XSA9IGNvbnZlcnREYXRlRm9ybWF0KHRoaXMuZGF0YS5nZXQoZGF0ZUZvcm1hdCkpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2luaXRpYWxpemVFbGVtZW50c1wiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfaW5pdGlhbGl6ZUVsZW1lbnRzKCkge1xuICAgICAgZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgdGhpc1tgJHtlbGVtZW50fVRhcmdldGBdID0gdGhpcy5mcFtlbGVtZW50XTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfc3RyaW5nXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9zdHJpbmcob3B0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhLmdldChvcHRpb24pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfZGF0ZVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfZGF0ZShvcHRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGEuZ2V0KG9wdGlvbik7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9ib29sZWFuXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9ib29sZWFuKG9wdGlvbikge1xuICAgICAgcmV0dXJuICEodGhpcy5kYXRhLmdldChvcHRpb24pID09ICcwJyB8fCB0aGlzLmRhdGEuZ2V0KG9wdGlvbikgPT0gJ2ZhbHNlJyk7XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcIl9hcnJheVwiLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBfYXJyYXkob3B0aW9uKSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZSh0aGlzLmRhdGEuZ2V0KG9wdGlvbikpO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogXCJfbnVtYmVyXCIsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9udW1iZXIob3B0aW9uKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQodGhpcy5kYXRhLmdldChvcHRpb24pKTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6IFwiX2FycmF5T3JTdHJpbmdcIixcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2FycmF5T3JTdHJpbmcob3B0aW9uKSB7XG4gICAgICBjb25zdCB2YWwgPSB0aGlzLmRhdGEuZ2V0KG9wdGlvbik7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB2YWw7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiBcImZsYXRwaWNrckVsZW1lbnRcIixcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0luc3RhbmNlVGFyZ2V0ICYmIHRoaXMuaW5zdGFuY2VUYXJnZXQgfHwgdGhpcy5lbGVtZW50O1xuICAgIH1cbiAgfV0pO1xuXG4gIHJldHVybiBTdGltdWx1c0ZsYXRwaWNrcjtcbn0oQ29udHJvbGxlcik7XG5cbl9kZWZpbmVQcm9wZXJ0eShTdGltdWx1c0ZsYXRwaWNrciwgXCJ0YXJnZXRzXCIsIFsnaW5zdGFuY2UnXSk7XG5cbmV4cG9ydCBkZWZhdWx0IFN0aW11bHVzRmxhdHBpY2tyO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXgubS5qcy5tYXBcbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi4vbm9kZV9tb2R1bGVzL3Nhc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4vcmVkbWluZS10cmFja3kuc2Nzc1wiO1xuICAgICAgXG4gICAgICBcblxudmFyIG9wdGlvbnMgPSB7fTtcblxub3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybSA9IHN0eWxlVGFnVHJhbnNmb3JtRm47XG5vcHRpb25zLnNldEF0dHJpYnV0ZXMgPSBzZXRBdHRyaWJ1dGVzO1xuXG4gICAgICBvcHRpb25zLmluc2VydCA9IGluc2VydEZuLmJpbmQobnVsbCwgXCJoZWFkXCIpO1xuICAgIFxub3B0aW9ucy5kb21BUEkgPSBkb21BUEk7XG5vcHRpb25zLmluc2VydFN0eWxlRWxlbWVudCA9IGluc2VydFN0eWxlRWxlbWVudDtcblxudmFyIHVwZGF0ZSA9IEFQSShjb250ZW50LCBvcHRpb25zKTtcblxuXG5cbmV4cG9ydCAqIGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uL25vZGVfbW9kdWxlcy9zYXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3JlZG1pbmUtdHJhY2t5LnNjc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJcInVzZSBzdHJpY3RcIjtcblxudmFyIHN0eWxlc0luRE9NID0gW107XG5mdW5jdGlvbiBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKSB7XG4gIHZhciByZXN1bHQgPSAtMTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRPTS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRPTVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBtb2R1bGVzVG9Eb20obGlzdCwgb3B0aW9ucykge1xuICB2YXIgaWRDb3VudE1hcCA9IHt9O1xuICB2YXIgaWRlbnRpZmllcnMgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4QnlJZGVudGlmaWVyID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdLFxuICAgICAgc3VwcG9ydHM6IGl0ZW1bNF0sXG4gICAgICBsYXllcjogaXRlbVs1XVxuICAgIH07XG4gICAgaWYgKGluZGV4QnlJZGVudGlmaWVyICE9PSAtMSkge1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnJlZmVyZW5jZXMrKztcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS51cGRhdGVyKG9iaik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB1cGRhdGVyID0gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucyk7XG4gICAgICBvcHRpb25zLmJ5SW5kZXggPSBpO1xuICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKGksIDAsIHtcbiAgICAgICAgaWRlbnRpZmllcjogaWRlbnRpZmllcixcbiAgICAgICAgdXBkYXRlcjogdXBkYXRlcixcbiAgICAgICAgcmVmZXJlbmNlczogMVxuICAgICAgfSk7XG4gICAgfVxuICAgIGlkZW50aWZpZXJzLnB1c2goaWRlbnRpZmllcik7XG4gIH1cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuZnVuY3Rpb24gYWRkRWxlbWVudFN0eWxlKG9iaiwgb3B0aW9ucykge1xuICB2YXIgYXBpID0gb3B0aW9ucy5kb21BUEkob3B0aW9ucyk7XG4gIGFwaS51cGRhdGUob2JqKTtcbiAgdmFyIHVwZGF0ZXIgPSBmdW5jdGlvbiB1cGRhdGVyKG5ld09iaikge1xuICAgIGlmIChuZXdPYmopIHtcbiAgICAgIGlmIChuZXdPYmouY3NzID09PSBvYmouY3NzICYmIG5ld09iai5tZWRpYSA9PT0gb2JqLm1lZGlhICYmIG5ld09iai5zb3VyY2VNYXAgPT09IG9iai5zb3VyY2VNYXAgJiYgbmV3T2JqLnN1cHBvcnRzID09PSBvYmouc3VwcG9ydHMgJiYgbmV3T2JqLmxheWVyID09PSBvYmoubGF5ZXIpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgYXBpLnVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuICByZXR1cm4gdXBkYXRlcjtcbn1cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGxpc3QsIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxpc3QgPSBsaXN0IHx8IFtdO1xuICB2YXIgbGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpO1xuICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKG5ld0xpc3QpIHtcbiAgICBuZXdMaXN0ID0gbmV3TGlzdCB8fCBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuICAgIHZhciBuZXdMYXN0SWRlbnRpZmllcnMgPSBtb2R1bGVzVG9Eb20obmV3TGlzdCwgb3B0aW9ucyk7XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IF9pKyspIHtcbiAgICAgIHZhciBfaWRlbnRpZmllciA9IGxhc3RJZGVudGlmaWVyc1tfaV07XG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuICAgICAgaWYgKHN0eWxlc0luRE9NW19pbmRleF0ucmVmZXJlbmNlcyA9PT0gMCkge1xuICAgICAgICBzdHlsZXNJbkRPTVtfaW5kZXhdLnVwZGF0ZXIoKTtcbiAgICAgICAgc3R5bGVzSW5ET00uc3BsaWNlKF9pbmRleCwgMSk7XG4gICAgICB9XG4gICAgfVxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTtcblxuICAgIC8vIFNwZWNpYWwgY2FzZSB0byByZXR1cm4gaGVhZCBvZiBpZnJhbWUgaW5zdGVhZCBvZiBpZnJhbWUgaXRzZWxmXG4gICAgaWYgKHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCAmJiBzdHlsZVRhcmdldCBpbnN0YW5jZW9mIHdpbmRvdy5IVE1MSUZyYW1lRWxlbWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIHRocm93IGFuIGV4Y2VwdGlvbiBpZiBhY2Nlc3MgdG8gaWZyYW1lIGlzIGJsb2NrZWRcbiAgICAgICAgLy8gZHVlIHRvIGNyb3NzLW9yaWdpbiByZXN0cmljdGlvbnNcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBzdHlsZVRhcmdldC5jb250ZW50RG9jdW1lbnQuaGVhZDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICAgICAgc3R5bGVUYXJnZXQgPSBudWxsO1xuICAgICAgfVxuICAgIH1cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuICByZXR1cm4gbWVtb1t0YXJnZXRdO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydEJ5U2VsZWN0b3IoaW5zZXJ0LCBzdHlsZSkge1xuICB2YXIgdGFyZ2V0ID0gZ2V0VGFyZ2V0KGluc2VydCk7XG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuICB0YXJnZXQuYXBwZW5kQ2hpbGQoc3R5bGUpO1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRCeVNlbGVjdG9yOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKSB7XG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInN0eWxlXCIpO1xuICBvcHRpb25zLnNldEF0dHJpYnV0ZXMoZWxlbWVudCwgb3B0aW9ucy5hdHRyaWJ1dGVzKTtcbiAgb3B0aW9ucy5pbnNlcnQoZWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbiAgcmV0dXJuIGVsZW1lbnQ7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcbiAgaWYgKG5vbmNlKSB7XG4gICAgc3R5bGVFbGVtZW50LnNldEF0dHJpYnV0ZShcIm5vbmNlXCIsIG5vbmNlKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXM7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopIHtcbiAgdmFyIGNzcyA9IFwiXCI7XG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG4gIGlmIChvYmoubWVkaWEpIHtcbiAgICBjc3MgKz0gXCJAbWVkaWEgXCIuY29uY2F0KG9iai5tZWRpYSwgXCIge1wiKTtcbiAgfVxuICB2YXIgbmVlZExheWVyID0gdHlwZW9mIG9iai5sYXllciAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuICBjc3MgKz0gb2JqLmNzcztcbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgdmFyIHNvdXJjZU1hcCA9IG9iai5zb3VyY2VNYXA7XG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfVxuXG4gIC8vIEZvciBvbGQgSUVcbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuICBvcHRpb25zLnN0eWxlVGFnVHJhbnNmb3JtKGNzcywgc3R5bGVFbGVtZW50LCBvcHRpb25zLm9wdGlvbnMpO1xufVxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHN0eWxlRWxlbWVudC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudCk7XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gZG9tQVBJKG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJldHVybiB7XG4gICAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZSgpIHt9LFxuICAgICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7fVxuICAgIH07XG4gIH1cbiAgdmFyIHN0eWxlRWxlbWVudCA9IG9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50KG9wdGlvbnMpO1xuICByZXR1cm4ge1xuICAgIHVwZGF0ZTogZnVuY3Rpb24gdXBkYXRlKG9iaikge1xuICAgICAgYXBwbHkoc3R5bGVFbGVtZW50LCBvcHRpb25zLCBvYmopO1xuICAgIH0sXG4gICAgcmVtb3ZlOiBmdW5jdGlvbiByZW1vdmUoKSB7XG4gICAgICByZW1vdmVTdHlsZUVsZW1lbnQoc3R5bGVFbGVtZW50KTtcbiAgICB9XG4gIH07XG59XG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG4gICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNzcykpO1xuICB9XG59XG5tb2R1bGUuZXhwb3J0cyA9IHN0eWxlVGFnVHJhbnNmb3JtOyIsIlwidXNlIHN0cmljdFwiO1xudmFyIF9faW1wb3J0RGVmYXVsdCA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnREZWZhdWx0KSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBcImRlZmF1bHRcIjogbW9kIH07XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xucmVxdWlyZSgnLi9yZWRtaW5lLXRyYWNreS5zY3NzJyk7XG5jb25zdCBzdGltdWx1c18xID0gcmVxdWlyZShcIkBob3R3aXJlZC9zdGltdWx1c1wiKTtcbmNvbnN0IGZvcm1fY29udHJvbGxlcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJAY29udHJvbGxlcnMvZm9ybS1jb250cm9sbGVyXCIpKTtcbmNvbnN0IHRpbWVyX2NvbnRyb2xsZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQGNvbnRyb2xsZXJzL3RpbWVyLWNvbnRyb2xsZXJcIikpO1xuY29uc3QgbGlzdF9jb250cm9sbGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkBjb250cm9sbGVycy9saXN0LWNvbnRyb2xsZXJcIikpO1xuY29uc3QgaXNzdWVfY29tcGxldGlvbl9jb250cm9sbGVyXzEgPSBfX2ltcG9ydERlZmF1bHQocmVxdWlyZShcIkBjb250cm9sbGVycy9pc3N1ZS1jb21wbGV0aW9uLWNvbnRyb2xsZXJcIikpO1xuY29uc3QgZmxhdHBpY2tyX2NvbnRyb2xsZXJfMSA9IF9faW1wb3J0RGVmYXVsdChyZXF1aXJlKFwiQGNvbnRyb2xsZXJzL2ZsYXRwaWNrci1jb250cm9sbGVyXCIpKTtcbndpbmRvdy5TdGltdWx1cyA9IHN0aW11bHVzXzEuQXBwbGljYXRpb24uc3RhcnQoKTtcbndpbmRvdy5TdGltdWx1cy5yZWdpc3RlcignZm9ybScsIGZvcm1fY29udHJvbGxlcl8xLmRlZmF1bHQpO1xud2luZG93LlN0aW11bHVzLnJlZ2lzdGVyKCd0aW1lcicsIHRpbWVyX2NvbnRyb2xsZXJfMS5kZWZhdWx0KTtcbndpbmRvdy5TdGltdWx1cy5yZWdpc3RlcignbGlzdCcsIGxpc3RfY29udHJvbGxlcl8xLmRlZmF1bHQpO1xud2luZG93LlN0aW11bHVzLnJlZ2lzdGVyKCdpc3N1ZS1jb21wbGV0aW9uJywgaXNzdWVfY29tcGxldGlvbl9jb250cm9sbGVyXzEuZGVmYXVsdCk7XG53aW5kb3cuU3RpbXVsdXMucmVnaXN0ZXIoJ2ZsYXRwaWNrcicsIGZsYXRwaWNrcl9jb250cm9sbGVyXzEuZGVmYXVsdCk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2ljbVZrYldsdVpTMTBjbUZqYTNrdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOWhjM05sZEhNdWMzSmpMM055WXk5eVpXUnRhVzVsTFhSeVlXTnJlUzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pT3pzN096dEJRVmxCTEU5QlFVOHNRMEZCUXl4MVFrRkJkVUlzUTBGQlF5eERRVUZCTzBGQlIyaERMR2xFUVVGblJEdEJRVU5vUkN4dFJrRkJlVVE3UVVGRGVrUXNjVVpCUVRKRU8wRkJRek5FTEcxR1FVRjVSRHRCUVVONlJDd3lSMEZCWjBZN1FVRkRhRVlzTmtaQlFXMUZPMEZCUlc1RkxFMUJRVTBzUTBGQlF5eFJRVUZSTEVkQlFVY3NjMEpCUVZjc1EwRkJReXhMUVVGTExFVkJRVVVzUTBGQlFUdEJRVU55UXl4TlFVRk5MRU5CUVVNc1VVRkJVU3hEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTEVWQlFVVXNlVUpCUVdNc1EwRkJReXhEUVVGQk8wRkJRMmhFTEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1VVRkJVU3hEUVVGRExFOUJRVThzUlVGQlJTd3dRa0ZCWlN4RFFVRkRMRU5CUVVFN1FVRkRiRVFzVFVGQlRTeERRVUZETEZGQlFWRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hGUVVGRkxIbENRVUZqTEVOQlFVTXNRMEZCUVR0QlFVTm9SQ3hOUVVGTkxFTkJRVU1zVVVGQlVTeERRVUZETEZGQlFWRXNRMEZCUXl4clFrRkJhMElzUlVGQlJTeHhRMEZCZVVJc1EwRkJReXhEUVVGQk8wRkJRM1pGTEUxQlFVMHNRMEZCUXl4UlFVRlJMRU5CUVVNc1VVRkJVU3hEUVVGRExGZEJRVmNzUlVGQlJTdzRRa0ZCYlVJc1EwRkJReXhEUVVGQkluMD0iLCJcInVzZSBzdHJpY3RcIjtcbnZhciBfX2ltcG9ydERlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9faW1wb3J0RGVmYXVsdCkgfHwgZnVuY3Rpb24gKG1vZCkge1xuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgXCJkZWZhdWx0XCI6IG1vZCB9O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHN0aW11bHVzX2ZsYXRwaWNrcl8xID0gX19pbXBvcnREZWZhdWx0KHJlcXVpcmUoXCJzdGltdWx1cy1mbGF0cGlja3JcIikpO1xuY2xhc3MgZGVmYXVsdF8xIGV4dGVuZHMgc3RpbXVsdXNfZmxhdHBpY2tyXzEuZGVmYXVsdCB7XG4gICAgb3Blbihfc2VsZWN0ZWREYXRlcywgZGF0ZVN0ciwgaW5zdGFuY2UpIHtcbiAgICAgICAgaWYgKCFkYXRlU3RyKSB7XG4gICAgICAgICAgICBpbnN0YW5jZS5zZXREYXRlKERhdGUubm93KCkpO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0cy5kZWZhdWx0ID0gZGVmYXVsdF8xO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWm14aGRIQnBZMnR5TFdOdmJuUnliMnhzWlhJdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUl1TGk4dUxpOHVMaTh1TGk5aGMzTmxkSE11YzNKakwzTnlZeTl5WldSdGFXNWxMWFJ5WVdOcmVTOWpiMjUwY205c2JHVnljeTltYkdGMGNHbGphM0l0WTI5dWRISnZiR3hsY2k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaU96czdPenRCUVVGQkxEUkZRVUV3UXp0QlFVVXhReXhsUVVGeFFpeFRRVUZSTERSQ1FVRlRPMGxCUTNCRExFbEJRVWtzUTBGQlF5eGpRVUZ6UWl4RlFVRkZMRTlCUVdVc1JVRkJSU3hSUVVGaE8xRkJRM3BFTEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJRenRaUVVOaUxGRkJRVkVzUTBGQlF5eFBRVUZQTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVUU3VVVGRE9VSXNRMEZCUXp0SlFVTklMRU5CUVVNN1EwRkRSanRCUVU1RUxEUkNRVTFESW4wPSIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuY29uc3Qgc3RpbXVsdXNfMSA9IHJlcXVpcmUoXCJAaG90d2lyZWQvc3RpbXVsdXNcIik7XG5jb25zdCBsdXhvbl8xID0gcmVxdWlyZShcImx1eG9uXCIpO1xuY2xhc3MgZGVmYXVsdF8xIGV4dGVuZHMgc3RpbXVsdXNfMS5Db250cm9sbGVyIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWQgPSBmYWxzZTtcbiAgICB9XG4gICAgY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5jb25uZWN0ZWQgPSB0cnVlO1xuICAgIH1cbiAgICBkaXNjb25uZWN0KCkge1xuICAgICAgICB0aGlzLmNvbm5lY3RlZCA9IGZhbHNlO1xuICAgIH1cbiAgICBhYnNvbHV0ZVRpbWUoX2V2ZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcnNlRmxvYXQodGhpcy5hYnNvbHV0SW5wdXRUYXJnZXQudmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlID0gdGhpcy5jb252ZXJ0VG9EYXRlVGltZSh0aGlzLnN0YXJ0VGFyZ2V0LnZhbHVlKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBzdGFydERhdGUuaXNWYWxpZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0VuZERhdGUgPSBzdGFydERhdGUucGx1cyh7IGhvdXJzOiB2YWx1ZSB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFRhcmdldC52YWx1ZSA9IG5ld0VuZERhdGUudG9Gb3JtYXQoJ2RkLkxMLnl5eXkgSEg6bW0nKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVuZFRhcmdldC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnY2hhbmdlJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdGhpcy5hYnNvbHV0SW5wdXRUYXJnZXQudmFsdWUgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc3N1ZVRhcmdldENvbm5lY3RlZChfKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpc3N1ZVRhcmdldERpc2Nvbm5lY3RlZChfKSB7XG4gICAgICAgIGlmICh0aGlzLmNvbm5lY3RlZCkge1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2UoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaGFuZ2UoKSB7XG4gICAgICAgIGNvbnN0IGZvcm0gPSB7XG4gICAgICAgICAgICB0aW1lcl9zdGFydDogdGhpcy5zdGFydFRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgIHRpbWVyX2VuZDogdGhpcy5lbmRUYXJnZXQudmFsdWUsXG4gICAgICAgICAgICBjb21tZW50czogdGhpcy5kZXNjcmlwdGlvblRhcmdldC52YWx1ZSxcbiAgICAgICAgICAgIGlzc3VlX2lkczogdGhpcy5leHRyYWN0SXNzdWVJZHMoKSB8fCBbXSxcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kaXNwYXRjaFVwZGF0ZShmb3JtKTtcbiAgICB9XG4gICAgZXh0cmFjdElzc3VlSWRzKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuaXNzdWVUYXJnZXRzXG4gICAgICAgICAgICAubWFwKChlbGVtZW50KSA9PiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1pc3N1ZS1pZCcpIHx8ICcnKVxuICAgICAgICAgICAgLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBudWxsKSB8fCBbXSk7XG4gICAgfVxuICAgIGRpc3BhdGNoVXBkYXRlKGZvcm0pIHtcbiAgICAgICAgaWYgKHRoaXMuaGFzU3RvcEJ1dHRvblRhcmdldCkge1xuICAgICAgICAgICAgJC5hamF4KHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnUE9TVCcsXG4gICAgICAgICAgICAgICAgdXJsOiB3aW5kb3cuUmVkbWluZVRyYWNreS50cmFja2VyVXBkYXRlUGF0aCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHRpbWVyX3Nlc3Npb246IGZvcm0gfSxcbiAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnZlcnRUb0RhdGVUaW1lKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBsdXhvbl8xLkRhdGVUaW1lLmZyb21Gb3JtYXQodmFsdWUsIHdpbmRvdy5SZWRtaW5lVHJhY2t5LmRhdGV0aW1lRm9ybWF0SmF2YXNjcmlwdCk7XG4gICAgfVxufVxuZGVmYXVsdF8xLnRhcmdldHMgPSBbXG4gICAgJ2Rlc2NyaXB0aW9uJyxcbiAgICAnc3RhcnQnLFxuICAgICdzdG9wQnV0dG9uJyxcbiAgICAnZW5kJyxcbiAgICAnaXNzdWUnLFxuICAgICdhYnNvbHV0SW5wdXQnLFxuXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZmF1bHRfMTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVptOXliUzFqYjI1MGNtOXNiR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dkxpNHZMaTR2WVhOelpYUnpMbk55WXk5emNtTXZjbVZrYldsdVpTMTBjbUZqYTNrdlkyOXVkSEp2Ykd4bGNuTXZabTl5YlMxamIyNTBjbTlzYkdWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc2FVUkJRU3RETzBGQlF5OURMR2xEUVVGblF6dEJRVWRvUXl4bFFVRnhRaXhUUVVGUkxIRkNRVUZWTzBsQlFYWkRPenRSUVZGVkxHTkJRVk1zUjBGQlJ5eExRVUZMTEVOQlFVRTdTVUZyUmpOQ0xFTkJRVU03U1VGMlJWRXNUMEZCVHp0UlFVTmFMRWxCUVVrc1EwRkJReXhUUVVGVExFZEJRVWNzU1VGQlNTeERRVUZCTzBsQlEzWkNMRU5CUVVNN1NVRkZUU3hWUVVGVk8xRkJRMllzU1VGQlNTeERRVUZETEZOQlFWTXNSMEZCUnl4TFFVRkxMRU5CUVVFN1NVRkRlRUlzUTBGQlF6dEpRVVZOTEZsQlFWa3NRMEZCUXl4TlFVRmhPMUZCUXk5Q0xFbEJRVWtzUTBGQlF6dFpRVU5JTEUxQlFVMHNTMEZCU3l4SFFVRkhMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVUU3V1VGRGRrUXNUVUZCVFN4VFFVRlRMRWRCUVVjc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVRTdXVUZGYUVVc1NVRkJTU3hMUVVGTExFbEJRVWtzVTBGQlV5eERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRPMmRDUVVNdlFpeE5RVUZOTEZWQlFWVXNSMEZCUnl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUzBGQlN5eEZRVUZGTEV0QlFVc3NSVUZCUlN4RFFVRkRMRU5CUVVFN1owSkJRMjVFTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1MwRkJTeXhIUVVGSExGVkJRVlVzUTBGQlF5eFJRVUZSTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlFUdG5Ra0ZET1VRc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlFUdFpRVU51UkN4RFFVRkRPMUZCUTBnc1EwRkJRenRuUWtGQlV5eERRVUZETzFsQlExUXNTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEV0QlFVc3NSMEZCUnl4RlFVRkZMRU5CUVVFN1VVRkRjRU1zUTBGQlF6dEpRVU5JTEVOQlFVTTdTVUZGVFN4dlFrRkJiMElzUTBGQlF5eERRVUZWTzFGQlEzQkRMRWxCUVVrc1NVRkJTU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzFsQlEyNUNMRWxCUVVrc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlFUdFJRVU5tTEVOQlFVTTdTVUZEU0N4RFFVRkRPMGxCUlUwc2RVSkJRWFZDTEVOQlFVTXNRMEZCVlR0UlFVTjJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0WlFVTnVRaXhKUVVGSkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVRTdVVUZEWml4RFFVRkRPMGxCUTBnc1EwRkJRenRKUVVWTkxFMUJRVTA3VVVGRFdDeE5RVUZOTEVsQlFVa3NSMEZCWVR0WlFVTnlRaXhYUVVGWExFVkJRVVVzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4TFFVRkxPMWxCUTI1RExGTkJRVk1zUlVGQlJTeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzN1dVRkRMMElzVVVGQlVTeEZRVUZGTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eExRVUZMTzFsQlEzUkRMRk5CUVZNc1JVRkJSU3hKUVVGSkxFTkJRVU1zWlVGQlpTeEZRVUZGTEVsQlFVa3NSVUZCUlR0VFFVTjRReXhEUVVGQk8xRkJSVVFzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRVHRKUVVNelFpeERRVUZETzBsQlJVOHNaVUZCWlR0UlFVTnlRaXhQUVVGUExFTkJRMHdzU1VGQlNTeERRVUZETEZsQlFWazdZVUZEWkN4SFFVRkhMRU5CUVVNc1EwRkJReXhQUVVGUExFVkJRVVVzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1pVRkJaU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzJGQlF6ZEVMRTFCUVUwc1EwRkJReXhEUVVGRExFdEJRVXNzUlVGQlJTeEZRVUZGTEVOQlFVTXNTMEZCU3l4TFFVRkxMRWxCUVVrc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGRE0wTXNRMEZCUVR0SlFVTklMRU5CUVVNN1NVRkZUeXhqUVVGakxFTkJRVU1zU1VGQll6dFJRVU51UXl4SlFVRkpMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNSVUZCUlN4RFFVRkRPMWxCUXpkQ0xFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdaMEpCUTB3c1NVRkJTU3hGUVVGRkxFMUJRVTA3WjBKQlExb3NSMEZCUnl4RlFVRkZMRTFCUVUwc1EwRkJReXhoUVVGaExFTkJRVU1zYVVKQlFXbENPMmRDUVVNelF5eEpRVUZKTEVWQlFVVXNSVUZCUlN4aFFVRmhMRVZCUVVVc1NVRkJTU3hGUVVGRk8yZENRVU0zUWl4TFFVRkxMRVZCUVVVc1NVRkJTVHRoUVVOYUxFTkJRVU1zUTBGQlFUdFJRVU5LTEVOQlFVTTdTVUZEU0N4RFFVRkRPMGxCUlU4c2FVSkJRV2xDTEVOQlFVTXNTMEZCWVR0UlFVTnlReXhQUVVGUExHZENRVUZSTEVOQlFVTXNWVUZCVlN4RFFVTjRRaXhMUVVGTExFVkJRMHdzVFVGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4M1FrRkJkMElzUTBGRE9VTXNRMEZCUVR0SlFVTklMRU5CUVVNN08wRkJMMFZOTEdsQ1FVRlBMRWRCUVVjN1NVRkRaaXhoUVVGaE8wbEJRMklzVDBGQlR6dEpRVU5RTEZsQlFWazdTVUZEV2l4TFFVRkxPMGxCUTB3c1QwRkJUenRKUVVOUUxHTkJRV003UTBGRFppeEJRVkJoTEVOQlQySWlmUT09IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzdGltdWx1c18xID0gcmVxdWlyZShcIkBob3R3aXJlZC9zdGltdWx1c1wiKTtcbmNsYXNzIGRlZmF1bHRfMSBleHRlbmRzIHN0aW11bHVzXzEuQ29udHJvbGxlciB7XG4gICAgY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5saXN0ZW5Gb3JJbnB1dCgpO1xuICAgIH1cbiAgICBsaXN0ZW5Gb3JJbnB1dCgpIHtcbiAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgIG9ic2VydmVBdXRvY29tcGxldGVGaWVsZCh0aGlzLmlucHV0VGFyZ2V0LmlkLCBmdW5jdGlvbiAocmVxdWVzdCwgY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGNvbnN0IHVybCA9IHdpbmRvdy5SZWRtaW5lVHJhY2t5Lmlzc3VlQ29tcGxldGlvblBhdGg7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0geyB0ZXJtOiByZXF1ZXN0LnRlcm0sIHNjb3BlOiAnYWxsJyB9O1xuICAgICAgICAgICAgJC5nZXQodXJsLCBkYXRhLCBudWxsLCAnanNvbicpXG4gICAgICAgICAgICAgICAgLmRvbmUoKGRhdGEpID0+IGNhbGxiYWNrKGRhdGEpKVxuICAgICAgICAgICAgICAgIC5mYWlsKCgpID0+IGNhbGxiYWNrKFtdKSk7XG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHNlbGVjdDogKF9ldmVudCwgaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkSXNzdWUoaXRlbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jbGVhbnVwKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGFkZElzc3VlKGlzc3VlKSB7XG4gICAgICAgIGNvbnN0IGxpc3RDb250cm9sbGVyID0gdGhpcy5hcHBsaWNhdGlvbi5nZXRDb250cm9sbGVyRm9yRWxlbWVudEFuZElkZW50aWZpZXIodGhpcy5saXN0QW5jaG9yVGFyZ2V0LCAnbGlzdCcpO1xuICAgICAgICBsaXN0Q29udHJvbGxlcj8uYWRkSXRlbShpc3N1ZS5pdGVtKTtcbiAgICB9XG4gICAgY2xlYXJJbnB1dCgpIHtcbiAgICAgICAgJCh0aGlzLmlucHV0VGFyZ2V0KS52YWwoJycpO1xuICAgIH1cbiAgICBjbGVhbnVwKCkge1xuICAgICAgICB0aGlzLmNsZWFySW5wdXQoKTtcbiAgICAgICAgJCgnLnVpLWF1dG9jb21wbGV0ZScpLmhpZGUoKTtcbiAgICAgICAgJCgnLnVpLWhlbHBlci1oaWRkZW4tYWNjZXNzaWJsZScpLmhpZGUoKTtcbiAgICB9XG59XG5kZWZhdWx0XzEudGFyZ2V0cyA9IFsnaW5wdXQnLCAnbGlzdEFuY2hvciddO1xuZGVmYXVsdF8xLnZhbHVlcyA9IHsgdXBkYXRlOiBCb29sZWFuIH07XG5leHBvcnRzLmRlZmF1bHQgPSBkZWZhdWx0XzE7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lhWE56ZFdVdFkyOXRjR3hsZEdsdmJpMWpiMjUwY205c2JHVnlMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaUxpNHZMaTR2TGk0dkxpNHZZWE56WlhSekxuTnlZeTl6Y21NdmNtVmtiV2x1WlMxMGNtRmphM2t2WTI5dWRISnZiR3hsY25NdmFYTnpkV1V0WTI5dGNHeGxkR2x2YmkxamIyNTBjbTlzYkdWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc2FVUkJRU3RETzBGQlZ5OURMR1ZCUVhGQ0xGTkJRVkVzY1VKQlFWVTdTVUZQY2tNc1QwRkJUenRSUVVOTUxFbEJRVWtzUTBGQlF5eGpRVUZqTEVWQlFVVXNRMEZCUVR0SlFVTjJRaXhEUVVGRE8wbEJSVThzWTBGQll6dFJRVU53UWl4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFTkJRVUU3VVVGRFpDeDNRa0ZCZDBJc1EwRkRkRUlzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4RlFVRkZMRVZCUTI1Q0xGVkJRVlVzVDBGQldTeEZRVUZGTEZGQlFXRTdXVUZEYmtNc1RVRkJUU3hIUVVGSExFZEJRVWNzVFVGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4dFFrRkJiVUlzUTBGQlFUdFpRVU53UkN4TlFVRk5MRWxCUVVrc1IwRkJSeXhGUVVGRkxFbEJRVWtzUlVGQlJTeFBRVUZQTEVOQlFVTXNTVUZCU1N4RlFVRkZMRXRCUVVzc1JVRkJSU3hMUVVGTExFVkJRVVVzUTBGQlFUdFpRVVZxUkN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4RlFVRkZMRTFCUVUwc1EwRkJRenRwUWtGRE0wSXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJkMElzUlVGQlJTeEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8ybENRVU5zUkN4SlFVRkpMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVVVGQlVTeERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVFN1VVRkROMElzUTBGQlF5eEZRVU5FTzFsQlEwVXNUVUZCVFN4RlFVRkZMRU5CUVVNc1RVRkJZU3hGUVVGRkxFbEJRV2RETEVWQlFVVXNSVUZCUlR0blFrRkRNVVFzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRVHRuUWtGRGJrSXNTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGQk8yZENRVU5rTEU5QlFVOHNTMEZCU3l4RFFVRkJPMWxCUTJRc1EwRkJRenRUUVVOR0xFTkJRMFlzUTBGQlFUdEpRVU5JTEVOQlFVTTdTVUZGVHl4UlFVRlJMRU5CUVVNc1MwRkJhVU03VVVGRGFFUXNUVUZCVFN4alFVRmpMRWRCUTJ4Q0xFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNiME5CUVc5RExFTkJRMjVFTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUlVGRGNrSXNUVUZCVFN4RFFVTlhMRU5CUVVFN1VVRkRja0lzWTBGQll5eEZRVUZGTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVUU3U1VGRGNrTXNRMEZCUXp0SlFVVlBMRlZCUVZVN1VVRkRhRUlzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVRTdTVUZETjBJc1EwRkJRenRKUVVWUExFOUJRVTg3VVVGRFlpeEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZMRU5CUVVFN1VVRkRha0lzUTBGQlF5eERRVUZETEd0Q1FVRnJRaXhEUVVGRExFTkJRVU1zU1VGQlNTeEZRVUZGTEVOQlFVRTdVVUZETlVJc1EwRkJReXhEUVVGRExEaENRVUU0UWl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVUU3U1VGRE1VTXNRMEZCUXpzN1FVRTVRMDBzYVVKQlFVOHNSMEZCUnl4RFFVRkRMRTlCUVU4c1JVRkJSU3haUVVGWkxFTkJRVU1zUTBGQlFUdEJRVU5xUXl4blFrRkJUU3hIUVVGSExFVkJRVVVzVFVGQlRTeEZRVUZGTEU5QlFVOHNSVUZCUlN4RFFVRkJJbjA9IiwiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5jb25zdCBzdGltdWx1c18xID0gcmVxdWlyZShcIkBob3R3aXJlZC9zdGltdWx1c1wiKTtcbmNsYXNzIGRlZmF1bHRfMSBleHRlbmRzIHN0aW11bHVzXzEuQ29udHJvbGxlciB7XG4gICAgYWRkSXRlbShpdGVtKSB7XG4gICAgICAgIGNvbnN0IHRib2R5ID0gdGhpcy50YWJsZVRhcmdldC5nZXRFbGVtZW50c0J5VGFnTmFtZSgndGJvZHknKVswXTtcbiAgICAgICAgdGJvZHkuYXBwZW5kQ2hpbGQodGhpcy5idWlsZEl0ZW0oaXRlbSkpO1xuICAgIH1cbiAgICByZW1vdmVJdGVtKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0IH0gPSBldmVudDtcbiAgICAgICAgY29uc3Qgcm93ID0gdGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWZvcm0tdGFyZ2V0PVwiaXNzdWVcIl0nKTtcbiAgICAgICAgcm93Py5yZW1vdmUoKTtcbiAgICB9XG4gICAgYnVpbGRJdGVtKGl0ZW0pIHtcbiAgICAgICAgY29uc3Qgcm93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTtcbiAgICAgICAgcm93LnNldEF0dHJpYnV0ZSgnZGF0YS1mb3JtLXRhcmdldCcsICdpc3N1ZScpO1xuICAgICAgICByb3cuY2xhc3NMaXN0LmFkZCgnaXNzdWUtY29udGFpbmVyJyk7XG4gICAgICAgIHJvdy5zZXRBdHRyaWJ1dGUoJ2RhdGEtaXNzdWUtaWQnLCBpdGVtLmlkLnRvU3RyaW5nKCkpO1xuICAgICAgICBbXG4gICAgICAgICAgICB0aGlzLmJ1aWxkTGFiZWxDb2x1bW4oaXRlbSksXG4gICAgICAgICAgICB0aGlzLmJ1aWxkU3ViamVjdENvbHVtbihpdGVtKSxcbiAgICAgICAgICAgIHRoaXMuYnVpbGREZWxldGlvbkJ1dHRvbkNvbHVtbihpdGVtKSxcbiAgICAgICAgXS5mb3JFYWNoKChlbGVtZW50KSA9PiByb3cuYXBwZW5kQ2hpbGQoZWxlbWVudCkpO1xuICAgICAgICByZXR1cm4gcm93O1xuICAgIH1cbiAgICBidWlsZExhYmVsQ29sdW1uKGl0ZW0pIHtcbiAgICAgICAgY29uc3QgYm9sZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2InKTtcbiAgICAgICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgYS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBgL2lzc3Vlcy8ke2l0ZW0uaWR9YCk7XG4gICAgICAgIGEuc2V0QXR0cmlidXRlKCd0YXJnZXQnLCAnX2JsYW5rJyk7XG4gICAgICAgIGEuc2V0QXR0cmlidXRlKCdyZWwnLCAnbm9vcGVuZXInKTtcbiAgICAgICAgYS5pbm5lckhUTUwgPSBgJHtpdGVtLnByb2plY3R9IC0gJHtpdGVtLmlkfTogYDtcbiAgICAgICAgYm9sZC5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW4oW2JvbGRdKTtcbiAgICB9XG4gICAgYnVpbGRTdWJqZWN0Q29sdW1uKGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYnVpbGRDb2x1bW4oW2RvY3VtZW50LmNyZWF0ZVRleHROb2RlKGl0ZW0uc3ViamVjdCldKTtcbiAgICB9XG4gICAgYnVpbGREZWxldGlvbkJ1dHRvbkNvbHVtbihpdGVtKSB7XG4gICAgICAgIGNvbnN0IHNwYW4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIGNvbnN0IGljb24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpJyk7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgc3Bhbi5jbGFzc0xpc3QuYWRkKCd0ZXh0LWRhbmdlcicpO1xuICAgICAgICBzcGFuLmNsYXNzTGlzdC5hZGQoJ2lucHV0LWdyb3VwLXRleHQnKTtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtYWN0aW9uJywgJ2NsaWNrLT5saXN0I3JlbW92ZUl0ZW0nKTtcbiAgICAgICAgaWNvbi5jbGFzc0xpc3QuYWRkKCdpY29uLW9ubHknKTtcbiAgICAgICAgaWNvbi5jbGFzc0xpc3QuYWRkKCdpY29uLWRlbCcpO1xuICAgICAgICBzcGFuLmFwcGVuZENoaWxkKGljb24pO1xuICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2lkJywgYHRpbWVyX3Nlc3Npb25faXNzdWVfaWRfJHtpdGVtLmlkfWApO1xuICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ3JlYWRvbmx5JywgJycpO1xuICAgICAgICBpbnB1dC5zZXRBdHRyaWJ1dGUoJ2hpZGRlbicsICcnKTtcbiAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCduYW1lJywgJ3RpbWVyX3Nlc3Npb25baXNzdWVfaWRzXVtdJyk7XG4gICAgICAgIGlucHV0LnNldEF0dHJpYnV0ZSgndmFsdWUnLCBpdGVtLmlkLnRvU3RyaW5nKCkpO1xuICAgICAgICByZXR1cm4gdGhpcy5idWlsZENvbHVtbihbc3BhbiwgaW5wdXRdKTtcbiAgICB9XG4gICAgYnVpbGRDb2x1bW4oZWxlbWVudHMpIHtcbiAgICAgICAgY29uc3QgY29sdW1uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTtcbiAgICAgICAgZWxlbWVudHMuZm9yRWFjaCgoZWxlbWVudCkgPT4gY29sdW1uLmFwcGVuZENoaWxkKGVsZW1lbnQpKTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbjtcbiAgICB9XG59XG5kZWZhdWx0XzEudGFyZ2V0cyA9IFsndGFibGUnXTtcbmV4cG9ydHMuZGVmYXVsdCA9IGRlZmF1bHRfMTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJHbHpkQzFqYjI1MGNtOXNiR1Z5TG1weklpd2ljMjkxY21ObFVtOXZkQ0k2SWlJc0luTnZkWEpqWlhNaU9sc2lMaTR2TGk0dkxpNHZMaTR2WVhOelpYUnpMbk55WXk5emNtTXZjbVZrYldsdVpTMTBjbUZqYTNrdlkyOXVkSEp2Ykd4bGNuTXZiR2x6ZEMxamIyNTBjbTlzYkdWeUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSTdPMEZCUVVFc2FVUkJRU3RETzBGQlJ5OURMR1ZCUVhGQ0xGTkJRVkVzY1VKQlFWVTdTVUZMT1VJc1QwRkJUeXhEUVVGRExFbEJRWE5DTzFGQlEyNURMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNiMEpCUVc5Q0xFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVFN1VVRkRMMFFzUzBGQlN5eERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVRTdTVUZEZWtNc1EwRkJRenRKUVVWTkxGVkJRVlVzUTBGQlF5eExRVUZaTzFGQlF6VkNMRTFCUVUwc1JVRkJSU3hOUVVGTkxFVkJRVVVzUjBGQlJ5eExRVUZMTEVOQlFVRTdVVUZEZUVJc1RVRkJUU3hIUVVGSExFZEJRVWtzVFVGQmEwSXNRMEZCUXl4UFFVRlBMRU5CUVVNc05FSkJRVFJDTEVOQlFVTXNRMEZCUVR0UlFVTnlSU3hIUVVGSExFVkJRVVVzVFVGQlRTeEZRVUZGTEVOQlFVRTdTVUZEWml4RFFVRkRPMGxCUlU4c1UwRkJVeXhEUVVGRExFbEJRWE5DTzFGQlEzUkRMRTFCUVUwc1IwRkJSeXhIUVVGSExGRkJRVkVzUTBGQlF5eGhRVUZoTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVFN1VVRkRlRU1zUjBGQlJ5eERRVUZETEZsQlFWa3NRMEZCUXl4clFrRkJhMElzUlVGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUVR0UlFVTTNReXhIUVVGSExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eERRVUZCTzFGQlEzQkRMRWRCUVVjc1EwRkJReXhaUVVGWkxFTkJRVU1zWlVGQlpTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU1zUTBGRGNFUTdVVUZCUVR0WlFVTkRMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRNMElzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFbEJRVWtzUTBGQlF6dFpRVU0zUWl4SlFVRkpMRU5CUVVNc2VVSkJRWGxDTEVOQlFVTXNTVUZCU1N4RFFVRkRPMU5CUTNKRExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUMEZCVHl4RlFVRkZMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVFN1VVRkZhRVFzVDBGQlR5eEhRVUZITEVOQlFVRTdTVUZEV2l4RFFVRkRPMGxCUlU4c1owSkJRV2RDTEVOQlFVTXNTVUZCYzBJN1VVRkROME1zVFVGQlRTeEpRVUZKTEVkQlFVY3NVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlFUdFJRVU40UXl4TlFVRk5MRU5CUVVNc1IwRkJSeXhSUVVGUkxFTkJRVU1zWVVGQllTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkJPMUZCUlhKRExFTkJRVU1zUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RlFVRkZMRmRCUVZjc1NVRkJTU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVRTdVVUZETlVNc1EwRkJReXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVFN1VVRkRiRU1zUTBGQlF5eERRVUZETEZsQlFWa3NRMEZCUXl4TFFVRkxMRVZCUVVVc1ZVRkJWU3hEUVVGRExFTkJRVUU3VVVGRmFrTXNRMEZCUXl4RFFVRkRMRk5CUVZNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEUxQlFVMHNTVUZCU1N4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGQk8xRkJRemxETEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVUU3VVVGRmJrSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUVR0SlFVTnFReXhEUVVGRE8wbEJSVThzYTBKQlFXdENMRU5CUVVNc1NVRkJjMEk3VVVGREwwTXNUMEZCVHl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZCTzBsQlEyeEZMRU5CUVVNN1NVRkZUeXg1UWtGQmVVSXNRMEZCUXl4SlFVRnpRanRSUVVOMFJDeE5RVUZOTEVsQlFVa3NSMEZCUnl4UlFVRlJMRU5CUVVNc1lVRkJZU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZCTzFGQlF6TkRMRTFCUVUwc1NVRkJTU3hIUVVGSExGRkJRVkVzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVFN1VVRkRlRU1zVFVGQlRTeExRVUZMTEVkQlFVY3NVVUZCVVN4RFFVRkRMR0ZCUVdFc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlFUdFJRVVUzUXl4SlFVRkpMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eGhRVUZoTEVOQlFVTXNRMEZCUVR0UlFVTnFReXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eERRVUZCTzFGQlEzUkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zWVVGQllTeEZRVUZGTEhkQ1FVRjNRaXhEUVVGRExFTkJRVUU3VVVGRE1VUXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVRTdVVUZETDBJc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVFN1VVRkRPVUlzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRVHRSUVVOMFFpeExRVUZMTEVOQlFVTXNXVUZCV1N4RFFVRkRMRWxCUVVrc1JVRkJSU3d3UWtGQk1FSXNTVUZCU1N4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVUU3VVVGRE4wUXNTMEZCU3l4RFFVRkRMRmxCUVZrc1EwRkJReXhWUVVGVkxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVRTdVVUZEYkVNc1MwRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eFJRVUZSTEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVFN1VVRkRhRU1zUzBGQlN5eERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRVZCUVVVc05FSkJRVFJDTEVOQlFVTXNRMEZCUVR0UlFVTjRSQ3hMUVVGTExFTkJRVU1zV1VGQldTeERRVUZETEU5QlFVOHNSVUZCUlN4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETEVOQlFVRTdVVUZGTDBNc1QwRkJUeXhKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVUU3U1VGRGVFTXNRMEZCUXp0SlFVVlBMRmRCUVZjc1EwRkJReXhSUVVFMFFqdFJRVU01UXl4TlFVRk5MRTFCUVUwc1IwRkJSeXhSUVVGUkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkJPMUZCUXpORExGRkJRVkVzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4UFFVRlBMRVZCUVVVc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRVHRSUVVNeFJDeFBRVUZQTEUxQlFVMHNRMEZCUVR0SlFVTm1MRU5CUVVNN08wRkJja1ZOTEdsQ1FVRlBMRWRCUVVjc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlFTSjkiLCJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmNvbnN0IHN0aW11bHVzXzEgPSByZXF1aXJlKFwiQGhvdHdpcmVkL3N0aW11bHVzXCIpO1xuY29uc3QgbHV4b25fMSA9IHJlcXVpcmUoXCJsdXhvblwiKTtcbmNsYXNzIGRlZmF1bHRfMSBleHRlbmRzIHN0aW11bHVzXzEuQ29udHJvbGxlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudGltZURpZmZGaWVsZHMgPSBbJ2hvdXJzJywgJ21pbnV0ZXMnLCAnc2Vjb25kcyddO1xuICAgICAgICB0aGlzLnRpbWVEaWZmRm9ybWF0ID0gJ2hoOm1tOnNzJztcbiAgICB9XG4gICAgY29ubmVjdCgpIHtcbiAgICAgICAgY29uc3Qgc3RhcnQgPSB0aGlzLnN0YXJ0VGFyZ2V0LnZhbHVlO1xuICAgICAgICBjb25zdCBlbmQgPSB0aGlzLmVuZFRhcmdldC52YWx1ZTtcbiAgICAgICAgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICBkb2N1bWVudC50aXRsZSA9ICfij7HvuI8gVHJhY2t5JztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gJ+KdjCBUcmFja3knO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGFydCAmJiBlbmQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSB0aGlzLnRpbWVEaWZmZXJlbmNlKCk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRpbWVyKGRpZmYpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHN0YXJ0KSB7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0VGlja2VyKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZGlzY29ubmVjdCgpIHtcbiAgICAgICAgdGhpcy5zdG9wVGlja2VyKCk7XG4gICAgfVxuICAgIHN0YXJ0VGlja2VyKCkge1xuICAgICAgICBjb25zdCB1cGRhdGVUaW1lID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGlmZiA9IHRoaXMudGltZURpZmZlcmVuY2UoKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlVGltZXIoZGlmZik7XG4gICAgICAgIH07XG4gICAgICAgIHdpbmRvdy5UaW1lckludGVydmFsID0gc2V0SW50ZXJ2YWwodXBkYXRlVGltZSwgMTAwMCk7XG4gICAgfVxuICAgIHN0b3BUaWNrZXIoKSB7XG4gICAgICAgIGlmICh3aW5kb3cuVGltZXJJbnRlcnZhbCkge1xuICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh3aW5kb3cuVGltZXJJbnRlcnZhbCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGltZURpZmZUb1N0cmluZyh0aW1lRGlmZikge1xuICAgICAgICBjb25zdCBzaWduID0gdGltZURpZmYubWludXRlcyA8IDAgfHwgdGltZURpZmYuc2Vjb25kcyA8IDAgPyAnLScgOiAnJztcbiAgICAgICAgcmV0dXJuIChzaWduICtcbiAgICAgICAgICAgIFsnaG91cnMnLCAnbWludXRlcycsICdzZWNvbmRzJ11cbiAgICAgICAgICAgICAgICAubWFwKCh2KSA9PiB0aW1lRGlmZlt2XSlcbiAgICAgICAgICAgICAgICAubWFwKCh2KSA9PiBNYXRoLmFicyhNYXRoLmZsb29yKHYpKSlcbiAgICAgICAgICAgICAgICAuZmlsdGVyKCh2LCBpKSA9PiBpICE9PSAwIHx8IHYgIT09IDApXG4gICAgICAgICAgICAgICAgLm1hcCgodikgPT4gdi50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJykpXG4gICAgICAgICAgICAgICAgLmpvaW4oJzonKSk7XG4gICAgfVxuICAgIGRhdGVUaW1lRnJvbVRhcmdldCh0YXJnZXQpIHtcbiAgICAgICAgY29uc3QgZGF0ZVRpbWUgPSB0aGlzLmNvbnZlcnRUb0RhdGVUaW1lKHRhcmdldC52YWx1ZSk7XG4gICAgICAgIHJldHVybiBkYXRlVGltZS5pc1ZhbGlkID8gZGF0ZVRpbWUgOiB0aGlzLmFkanVzdGVkRGF0ZVRpbWUoKTtcbiAgICB9XG4gICAgdGltZURpZmZlcmVuY2UoKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0RGF0ZVRpbWUgPSB0aGlzLmRhdGVUaW1lRnJvbVRhcmdldCh0aGlzLnN0YXJ0VGFyZ2V0KTtcbiAgICAgICAgY29uc3QgZW5kRGF0ZVRpbWUgPSB0aGlzLmRhdGVUaW1lRnJvbVRhcmdldCh0aGlzLmVuZFRhcmdldCk7XG4gICAgICAgIGNvbnN0IGR1cmF0aW9uID0gZW5kRGF0ZVRpbWUuZGlmZihzdGFydERhdGVUaW1lLCB0aGlzLnRpbWVEaWZmRmllbGRzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMudGltZURpZmZUb1N0cmluZyhkdXJhdGlvbi52YWx1ZXMgfHwge30pO1xuICAgIH1cbiAgICBjb252ZXJ0VG9EYXRlVGltZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gbHV4b25fMS5EYXRlVGltZS5mcm9tRm9ybWF0KHZhbHVlLCB3aW5kb3cuUmVkbWluZVRyYWNreS5kYXRldGltZUZvcm1hdEphdmFzY3JpcHQpO1xuICAgIH1cbiAgICB1cGRhdGVUaW1lcih0aW1lKSB7XG4gICAgICAgICQodGhpcy5sYWJlbFRhcmdldCkudGV4dCh0aW1lKTtcbiAgICB9XG4gICAgYWRqdXN0ZWREYXRlVGltZSgpIHtcbiAgICAgICAgY29uc3QgbG9jYWxPZmZzZXQgPSBsdXhvbl8xLkRhdGVUaW1lLmxvY2FsKCkub2Zmc2V0O1xuICAgICAgICByZXR1cm4gbHV4b25fMS5EYXRlVGltZS5sb2NhbCgpLm1pbnVzKHsgbWludXRlczogbG9jYWxPZmZzZXQgLSB0aGlzLnRpbWV6b25lVmFsdWUgfSk7XG4gICAgfVxufVxuZGVmYXVsdF8xLnRhcmdldHMgPSBbJ3N0YXJ0JywgJ2VuZCcsICdsYWJlbCcsICdkZXNjcmlwdGlvbiddO1xuZGVmYXVsdF8xLnZhbHVlcyA9IHsgdGltZXpvbmU6IE51bWJlciB9O1xuZXhwb3J0cy5kZWZhdWx0ID0gZGVmYXVsdF8xO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pZEdsdFpYSXRZMjl1ZEhKdmJHeGxjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYklpNHVMeTR1THk0dUx5NHVMMkZ6YzJWMGN5NXpjbU12YzNKakwzSmxaRzFwYm1VdGRISmhZMnQ1TDJOdmJuUnliMnhzWlhKekwzUnBiV1Z5TFdOdmJuUnliMnhzWlhJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklqczdRVUZCUVN4cFJFRkJLME03UVVGREwwTXNhVU5CUVN0RE8wRkJSeTlETEdWQlFYRkNMRk5CUVZFc2NVSkJRVlU3U1VGQmRrTTdPMUZCVFZjc2JVSkJRV01zUjBGQmEwSXNRMEZCUXl4UFFVRlBMRVZCUVVVc1UwRkJVeXhGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZCTzFGQlF5OUVMRzFDUVVGakxFZEJRVWNzVlVGQlZTeERRVUZCTzBsQmIwWjBReXhEUVVGRE8wbEJMMFZETEU5QlFVODdVVUZEVEN4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEV0QlFVc3NRMEZCUVR0UlFVTndReXhOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1EwRkJRVHRSUVVWb1F5eEpRVUZKTEV0QlFVc3NSVUZCUlN4RFFVRkRPMWxCUTFZc1VVRkJVU3hEUVVGRExFdEJRVXNzUjBGQlJ5eFhRVUZYTEVOQlFVRTdVVUZET1VJc1EwRkJRenRoUVVGTkxFTkJRVU03V1VGRFRpeFJRVUZSTEVOQlFVTXNTMEZCU3l4SFFVRkhMRlZCUVZVc1EwRkJRVHRSUVVNM1FpeERRVUZETzFGQlJVUXNTVUZCU1N4TFFVRkxMRWxCUVVrc1IwRkJSeXhGUVVGRkxFTkJRVU03V1VGRGFrSXNUVUZCVFN4SlFVRkpMRWRCUVZjc1NVRkJTU3hEUVVGRExHTkJRV01zUlVGQlJTeERRVUZCTzFsQlF6RkRMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVRTdVVUZEZUVJc1EwRkJRenRoUVVGTkxFbEJRVWtzUzBGQlN5eEZRVUZGTEVOQlFVTTdXVUZEYWtJc1NVRkJTU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZCTzFGQlEzQkNMRU5CUVVNN1NVRkRTQ3hEUVVGRE8wbEJSVVFzVlVGQlZUdFJRVU5TTEVsQlFVa3NRMEZCUXl4VlFVRlZMRVZCUVVVc1EwRkJRVHRKUVVOdVFpeERRVUZETzBsQlJVOHNWMEZCVnp0UlFVTnFRaXhOUVVGTkxGVkJRVlVzUjBGQlJ5eEhRVUZITEVWQlFVVTdXVUZEZEVJc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeERRVUZETEdOQlFXTXNSVUZCUlN4RFFVRkJPMWxCUTJ4RExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVFN1VVRkRlRUlzUTBGQlF5eERRVUZCTzFGQlJVUXNUVUZCVFN4RFFVRkRMR0ZCUVdFc1IwRkJSeXhYUVVGWExFTkJRVU1zVlVGQlZTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkJPMGxCUTNSRUxFTkJRVU03U1VGRlR5eFZRVUZWTzFGQlEyaENMRWxCUVVrc1RVRkJUU3hEUVVGRExHRkJRV0VzUlVGQlJTeERRVUZETzFsQlEzcENMR0ZCUVdFc1EwRkJReXhOUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEVOQlFVRTdVVUZEY2tNc1EwRkJRenRKUVVOSUxFTkJRVU03U1VGRlR5eG5Ra0ZCWjBJc1EwRkJReXhSUVVGclFqdFJRVU42UXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhSUVVGUkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNTVUZCU1N4UlFVRlJMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVUU3VVVGRmNFVXNUMEZCVHl4RFFVTk1MRWxCUVVrN1dVRkRTaXhEUVVGRExFOUJRVThzUlVGQlJTeFRRVUZUTEVWQlFVVXNVMEZCVXl4RFFVRkRPMmxDUVVNMVFpeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZ0UWl4RFFVRkRMRU5CUVVNN2FVSkJRM3BETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdhVUpCUTI1RExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRwUWtGRGNFTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGQlJTeEhRVUZITEVOQlFVTXNRMEZCUXp0cFFrRkRla01zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVTmlMRU5CUVVFN1NVRkRTQ3hEUVVGRE8wbEJSVThzYTBKQlFXdENMRU5CUVVNc1RVRkJkMEk3VVVGRGFrUXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlFUdFJRVU55UkN4UFFVRlBMRkZCUVZFc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RlFVRkZMRU5CUVVFN1NVRkRPVVFzUTBGQlF6dEpRVVZQTEdOQlFXTTdVVUZEY0VJc1RVRkJUU3hoUVVGaExFZEJRVWNzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUVR0UlFVTXZSQ3hOUVVGTkxGZEJRVmNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkJPMUZCUXpORUxFMUJRVTBzVVVGQlVTeEhRVUZITEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hGUVVGRkxFbEJRVWtzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUVR0UlFVVnlSU3hQUVVGUExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJSU3hSUVVGblFpeERRVUZETEUxQlFVMHNTVUZCU1N4RlFVRkZMRU5CUVVNc1EwRkJRVHRKUVVNNVJDeERRVUZETzBsQlJVOHNhVUpCUVdsQ0xFTkJRVU1zUzBGQllUdFJRVU55UXl4UFFVRlBMR2RDUVVGUkxFTkJRVU1zVlVGQlZTeERRVU40UWl4TFFVRkxMRVZCUTB3c1RVRkJUU3hEUVVGRExHRkJRV0VzUTBGQlF5eDNRa0ZCZDBJc1EwRkRPVU1zUTBGQlFUdEpRVU5JTEVOQlFVTTdTVUZGVHl4WFFVRlhMRU5CUVVNc1NVRkJXVHRSUVVNNVFpeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUVR0SlFVTm9ReXhEUVVGRE8wbEJSVThzWjBKQlFXZENPMUZCUTNSQ0xFMUJRVTBzVjBGQlZ5eEhRVUZITEdkQ1FVRlJMRU5CUVVNc1MwRkJTeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZCTzFGQlF6TkRMRTlCUVU4c1owSkJRVkVzUTBGQlF5eExRVUZMTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hQUVVGUExFVkJRVVVzVjBGQlZ5eEhRVUZITEVsQlFVa3NRMEZCUXl4aFFVRmhMRVZCUVVVc1EwRkJReXhEUVVGQk8wbEJRemxGTEVOQlFVTTdPMEZCYWtaTkxHbENRVUZQTEVkQlFVY3NRMEZCUXl4UFFVRlBMRVZCUVVVc1MwRkJTeXhGUVVGRkxFOUJRVThzUlVGQlJTeGhRVUZoTEVOQlFVTXNRVUZCTTBNc1EwRkJNa003UVVGRGJFUXNaMEpCUVUwc1IwRkJSeXhGUVVGRkxGRkJRVkVzUlVGQlJTeE5RVUZOTEVWQlFVVXNRVUZCZGtJc1EwRkJkVUlpZlE9PSIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0aWQ6IG1vZHVsZUlkLFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5jID0gdW5kZWZpbmVkOyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygxNDApO1xuIl0sIm5hbWVzIjpbIkV2ZW50TGlzdGVuZXIiLCJjb25zdHJ1Y3RvciIsImV2ZW50VGFyZ2V0IiwiZXZlbnROYW1lIiwiZXZlbnRPcHRpb25zIiwidGhpcyIsInVub3JkZXJlZEJpbmRpbmdzIiwiU2V0IiwiY29ubmVjdCIsImFkZEV2ZW50TGlzdGVuZXIiLCJkaXNjb25uZWN0IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsImJpbmRpbmdDb25uZWN0ZWQiLCJiaW5kaW5nIiwiYWRkIiwiYmluZGluZ0Rpc2Nvbm5lY3RlZCIsImRlbGV0ZSIsImhhbmRsZUV2ZW50IiwiZXZlbnQiLCJleHRlbmRlZEV2ZW50Iiwic3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uIiwiT2JqZWN0IiwiYXNzaWduIiwiaW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIiwiY2FsbCIsImV4dGVuZEV2ZW50IiwiYmluZGluZ3MiLCJoYXNCaW5kaW5ncyIsInNpemUiLCJBcnJheSIsImZyb20iLCJzb3J0IiwibGVmdCIsInJpZ2h0IiwibGVmdEluZGV4IiwiaW5kZXgiLCJyaWdodEluZGV4IiwiRGlzcGF0Y2hlciIsImFwcGxpY2F0aW9uIiwiZXZlbnRMaXN0ZW5lck1hcHMiLCJNYXAiLCJzdGFydGVkIiwic3RhcnQiLCJldmVudExpc3RlbmVycyIsImZvckVhY2giLCJldmVudExpc3RlbmVyIiwic3RvcCIsInZhbHVlcyIsInJlZHVjZSIsImxpc3RlbmVycyIsIm1hcCIsImNvbmNhdCIsImZldGNoRXZlbnRMaXN0ZW5lckZvckJpbmRpbmciLCJjbGVhckV2ZW50TGlzdGVuZXJzIiwiY2xlYXJFdmVudExpc3RlbmVyc0ZvckJpbmRpbmciLCJoYW5kbGVFcnJvciIsImVycm9yIiwibWVzc2FnZSIsImRldGFpbCIsInJlbW92ZU1hcHBlZEV2ZW50TGlzdGVuZXJGb3IiLCJldmVudExpc3RlbmVyTWFwIiwiZmV0Y2hFdmVudExpc3RlbmVyTWFwRm9yRXZlbnRUYXJnZXQiLCJjYWNoZUtleSIsImZldGNoRXZlbnRMaXN0ZW5lciIsImdldCIsImNyZWF0ZUV2ZW50TGlzdGVuZXIiLCJzZXQiLCJwYXJ0cyIsImtleXMiLCJrZXkiLCJwdXNoIiwiam9pbiIsImRlZmF1bHRBY3Rpb25EZXNjcmlwdG9yRmlsdGVycyIsInZhbHVlIiwic3RvcFByb3BhZ2F0aW9uIiwicHJldmVudCIsInByZXZlbnREZWZhdWx0Iiwic2VsZiIsImVsZW1lbnQiLCJ0YXJnZXQiLCJkZXNjcmlwdG9yUGF0dGVybiIsImNhbWVsaXplIiwicmVwbGFjZSIsIl8iLCJjaGFyIiwidG9VcHBlckNhc2UiLCJuYW1lc3BhY2VDYW1lbGl6ZSIsImNhcGl0YWxpemUiLCJjaGFyQXQiLCJzbGljZSIsImRhc2hlcml6ZSIsInRvTG93ZXJDYXNlIiwiaXNTb21ldGhpbmciLCJvYmplY3QiLCJoYXNQcm9wZXJ0eSIsInByb3BlcnR5IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJhbGxNb2RpZmllcnMiLCJBY3Rpb24iLCJkZXNjcmlwdG9yIiwic2NoZW1hIiwidGFnTmFtZSIsImRlZmF1bHRFdmVudE5hbWVzIiwiZ2V0RGVmYXVsdEV2ZW50TmFtZUZvckVsZW1lbnQiLCJpZGVudGlmaWVyIiwibWV0aG9kTmFtZSIsImtleUZpbHRlciIsImZvclRva2VuIiwidG9rZW4iLCJkZXNjcmlwdG9yU3RyaW5nIiwibWF0Y2hlcyIsInRyaW0iLCJtYXRjaCIsImluY2x1ZGVzIiwiZXZlbnRUYXJnZXROYW1lIiwid2luZG93IiwiZG9jdW1lbnQiLCJzcGxpdCIsIm9wdGlvbnMiLCJ0ZXN0IiwicGFyc2VBY3Rpb25EZXNjcmlwdG9yU3RyaW5nIiwiY29udGVudCIsInRvU3RyaW5nIiwiZXZlbnRGaWx0ZXIiLCJzaG91bGRJZ25vcmVLZXlib2FyZEV2ZW50IiwiZmlsdGVycyIsImtleUZpbHRlckRpc3NhdGlzZmllZCIsInN0YW5kYXJkRmlsdGVyIiwiZmlsdGVyIiwia2V5TWFwcGluZ3MiLCJzaG91bGRJZ25vcmVNb3VzZUV2ZW50IiwicGFyYW1zIiwicGF0dGVybiIsIlJlZ0V4cCIsIm5hbWUiLCJhdHRyaWJ1dGVzIiwidHlwZWNhc3QiLCJtZXRhIiwiY3RybCIsImFsdCIsInNoaWZ0IiwibW9kaWZpZXIiLCJtZXRhS2V5IiwiY3RybEtleSIsImFsdEtleSIsInNoaWZ0S2V5IiwiYSIsImJ1dHRvbiIsImZvcm0iLCJkZXRhaWxzIiwiaW5wdXQiLCJlIiwiZ2V0QXR0cmlidXRlIiwic2VsZWN0IiwidGV4dGFyZWEiLCJFcnJvciIsIkpTT04iLCJwYXJzZSIsIm9fTyIsIkJpbmRpbmciLCJjb250ZXh0IiwiYWN0aW9uIiwiYWN0aW9uRXZlbnQiLCJwcmVwYXJlQWN0aW9uRXZlbnQiLCJ3aWxsQmVJbnZva2VkQnlFdmVudCIsImFwcGx5RXZlbnRNb2RpZmllcnMiLCJpbnZva2VXaXRoRXZlbnQiLCJtZXRob2QiLCJjb250cm9sbGVyIiwiYWN0aW9uRGVzY3JpcHRvckZpbHRlcnMiLCJwYXNzZXMiLCJlbnRyaWVzIiwiY3VycmVudFRhcmdldCIsImxvZ0RlYnVnQWN0aXZpdHkiLCJLZXlib2FyZEV2ZW50IiwiTW91c2VFdmVudCIsIkVsZW1lbnQiLCJjb250YWlucyIsInNjb3BlIiwiY29udGFpbnNFbGVtZW50IiwiRWxlbWVudE9ic2VydmVyIiwiZGVsZWdhdGUiLCJtdXRhdGlvbk9ic2VydmVySW5pdCIsImNoaWxkTGlzdCIsInN1YnRyZWUiLCJlbGVtZW50cyIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJNdXRhdGlvbk9ic2VydmVyIiwibXV0YXRpb25zIiwicHJvY2Vzc011dGF0aW9ucyIsIm9ic2VydmUiLCJyZWZyZXNoIiwicGF1c2UiLCJjYWxsYmFjayIsInRha2VSZWNvcmRzIiwibWF0Y2hFbGVtZW50c0luVHJlZSIsImhhcyIsInJlbW92ZUVsZW1lbnQiLCJhZGRFbGVtZW50IiwibXV0YXRpb24iLCJwcm9jZXNzTXV0YXRpb24iLCJ0eXBlIiwicHJvY2Vzc0F0dHJpYnV0ZUNoYW5nZSIsImF0dHJpYnV0ZU5hbWUiLCJwcm9jZXNzUmVtb3ZlZE5vZGVzIiwicmVtb3ZlZE5vZGVzIiwicHJvY2Vzc0FkZGVkTm9kZXMiLCJhZGRlZE5vZGVzIiwiZWxlbWVudEF0dHJpYnV0ZUNoYW5nZWQiLCJtYXRjaEVsZW1lbnQiLCJub2RlcyIsIm5vZGUiLCJlbGVtZW50RnJvbU5vZGUiLCJwcm9jZXNzVHJlZSIsImVsZW1lbnRJc0FjdGl2ZSIsInRyZWUiLCJwcm9jZXNzb3IiLCJub2RlVHlwZSIsIk5vZGUiLCJFTEVNRU5UX05PREUiLCJpc0Nvbm5lY3RlZCIsImVsZW1lbnRNYXRjaGVkIiwiZWxlbWVudFVubWF0Y2hlZCIsIkF0dHJpYnV0ZU9ic2VydmVyIiwiZWxlbWVudE9ic2VydmVyIiwic2VsZWN0b3IiLCJoYXNBdHRyaWJ1dGUiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZWxlbWVudE1hdGNoZWRBdHRyaWJ1dGUiLCJlbGVtZW50VW5tYXRjaGVkQXR0cmlidXRlIiwiZWxlbWVudEF0dHJpYnV0ZVZhbHVlQ2hhbmdlZCIsImZldGNoIiwiZGVsIiwicHJ1bmUiLCJNdWx0aW1hcCIsInZhbHVlc0J5S2V5IiwiaGFzS2V5IiwiaGFzVmFsdWUiLCJzb21lIiwiZ2V0VmFsdWVzRm9yS2V5IiwiZ2V0S2V5c0ZvclZhbHVlIiwiX2tleSIsIl92YWx1ZXMiLCJJbmRleGVkTXVsdGltYXAiLCJzdXBlciIsImtleXNCeVZhbHVlIiwiU2VsZWN0b3JPYnNlcnZlciIsIl9zZWxlY3RvciIsIm1hdGNoZXNCeUVsZW1lbnQiLCJzZWxlY3Rvck1hdGNoRWxlbWVudCIsInNlbGVjdG9yTWF0Y2hlZCIsInNlbGVjdG9ycyIsInNlbGVjdG9yVW5tYXRjaGVkIiwiX2F0dHJpYnV0ZU5hbWUiLCJtYXRjaGVkQmVmb3JlIiwiU3RyaW5nTWFwT2JzZXJ2ZXIiLCJzdHJpbmdNYXAiLCJhdHRyaWJ1dGVPbGRWYWx1ZSIsImtub3duQXR0cmlidXRlTmFtZXMiLCJyZWZyZXNoQXR0cmlidXRlIiwib2xkVmFsdWUiLCJnZXRTdHJpbmdNYXBLZXlGb3JBdHRyaWJ1dGUiLCJzdHJpbmdNYXBLZXlBZGRlZCIsInN0cmluZ01hcFZhbHVlQ2hhbmdlZCIsInN0cmluZ01hcEtleVJlbW92ZWQiLCJjdXJyZW50QXR0cmlidXRlTmFtZXMiLCJyZWNvcmRlZEF0dHJpYnV0ZU5hbWVzIiwiYXR0cmlidXRlIiwiVG9rZW5MaXN0T2JzZXJ2ZXIiLCJhdHRyaWJ1dGVPYnNlcnZlciIsInRva2Vuc0J5RWxlbWVudCIsInRva2Vuc01hdGNoZWQiLCJyZWFkVG9rZW5zRm9yRWxlbWVudCIsInVubWF0Y2hlZFRva2VucyIsIm1hdGNoZWRUb2tlbnMiLCJyZWZyZXNoVG9rZW5zRm9yRWxlbWVudCIsInRva2Vuc1VubWF0Y2hlZCIsInRva2VucyIsInRva2VuTWF0Y2hlZCIsInRva2VuVW5tYXRjaGVkIiwicHJldmlvdXNUb2tlbnMiLCJjdXJyZW50VG9rZW5zIiwiZmlyc3REaWZmZXJpbmdJbmRleCIsImxlbmd0aCIsIk1hdGgiLCJtYXgiLCJ6aXAiLCJmaW5kSW5kZXgiLCJwcmV2aW91c1Rva2VuIiwiY3VycmVudFRva2VuIiwidG9rZW5TdHJpbmciLCJwYXJzZVRva2VuU3RyaW5nIiwiVmFsdWVMaXN0T2JzZXJ2ZXIiLCJ0b2tlbkxpc3RPYnNlcnZlciIsInBhcnNlUmVzdWx0c0J5VG9rZW4iLCJXZWFrTWFwIiwidmFsdWVzQnlUb2tlbkJ5RWxlbWVudCIsImZldGNoUGFyc2VSZXN1bHRGb3JUb2tlbiIsImZldGNoVmFsdWVzQnlUb2tlbkZvckVsZW1lbnQiLCJlbGVtZW50TWF0Y2hlZFZhbHVlIiwiZWxlbWVudFVubWF0Y2hlZFZhbHVlIiwicGFyc2VSZXN1bHQiLCJwYXJzZVRva2VuIiwidmFsdWVzQnlUb2tlbiIsInBhcnNlVmFsdWVGb3JUb2tlbiIsIkJpbmRpbmdPYnNlcnZlciIsImJpbmRpbmdzQnlBY3Rpb24iLCJ2YWx1ZUxpc3RPYnNlcnZlciIsImFjdGlvbkF0dHJpYnV0ZSIsImRpc2Nvbm5lY3RBbGxBY3Rpb25zIiwiY29ubmVjdEFjdGlvbiIsImRpc2Nvbm5lY3RBY3Rpb24iLCJjbGVhciIsIlZhbHVlT2JzZXJ2ZXIiLCJyZWNlaXZlciIsInN0cmluZ01hcE9ic2VydmVyIiwidmFsdWVEZXNjcmlwdG9yTWFwIiwiaW52b2tlQ2hhbmdlZENhbGxiYWNrc0ZvckRlZmF1bHRWYWx1ZXMiLCJpbnZva2VDaGFuZ2VkQ2FsbGJhY2siLCJ3cml0ZXIiLCJkZWZhdWx0VmFsdWUiLCJ2YWx1ZURlc2NyaXB0b3JOYW1lTWFwIiwidmFsdWVEZXNjcmlwdG9ycyIsInVuZGVmaW5lZCIsImRhdGEiLCJyYXdWYWx1ZSIsInJhd09sZFZhbHVlIiwiY2hhbmdlZE1ldGhvZE5hbWUiLCJjaGFuZ2VkTWV0aG9kIiwicmVhZGVyIiwiVHlwZUVycm9yIiwiZGVzY3JpcHRvcnMiLCJoYXNNZXRob2ROYW1lIiwiVGFyZ2V0T2JzZXJ2ZXIiLCJ0YXJnZXRzQnlOYW1lIiwiZGlzY29ubmVjdEFsbFRhcmdldHMiLCJjb25uZWN0VGFyZ2V0IiwiZGlzY29ubmVjdFRhcmdldCIsIl9hIiwidGFyZ2V0Q29ubmVjdGVkIiwidGFyZ2V0RGlzY29ubmVjdGVkIiwicmVhZEluaGVyaXRhYmxlU3RhdGljQXJyYXlWYWx1ZXMiLCJwcm9wZXJ0eU5hbWUiLCJhbmNlc3RvcnMiLCJnZXRBbmNlc3RvcnNGb3JDb25zdHJ1Y3RvciIsImRlZmluaXRpb24iLCJpc0FycmF5IiwiZ2V0T3duU3RhdGljQXJyYXlWYWx1ZXMiLCJnZXRQcm90b3R5cGVPZiIsInJldmVyc2UiLCJPdXRsZXRPYnNlcnZlciIsIm91dGxldHNCeU5hbWUiLCJvdXRsZXRFbGVtZW50c0J5TmFtZSIsInNlbGVjdG9yT2JzZXJ2ZXJNYXAiLCJhdHRyaWJ1dGVPYnNlcnZlck1hcCIsIm91dGxldERlZmluaXRpb25zIiwib3V0bGV0TmFtZSIsInNldHVwU2VsZWN0b3JPYnNlcnZlckZvck91dGxldCIsInNldHVwQXR0cmlidXRlT2JzZXJ2ZXJGb3JPdXRsZXQiLCJkZXBlbmRlbnRDb250ZXh0cyIsIm9ic2VydmVyIiwiZGlzY29ubmVjdEFsbE91dGxldHMiLCJzdG9wU2VsZWN0b3JPYnNlcnZlcnMiLCJzdG9wQXR0cmlidXRlT2JzZXJ2ZXJzIiwib3V0bGV0IiwiZ2V0T3V0bGV0IiwiY29ubmVjdE91dGxldCIsImdldE91dGxldEZyb21NYXAiLCJkaXNjb25uZWN0T3V0bGV0IiwiaGFzT3V0bGV0IiwiaGFzT3V0bGV0Q29udHJvbGxlciIsImNvbnRyb2xsZXJBdHRyaWJ1dGUiLCJfZWxlbWVudCIsImdldE91dGxldE5hbWVGcm9tT3V0bGV0QXR0cmlidXRlTmFtZSIsInVwZGF0ZVNlbGVjdG9yT2JzZXJ2ZXJGb3JPdXRsZXQiLCJvdXRsZXRDb25uZWN0ZWQiLCJvdXRsZXREaXNjb25uZWN0ZWQiLCJzZWxlY3Rvck9ic2VydmVyIiwiYm9keSIsImF0dHJpYnV0ZU5hbWVGb3JPdXRsZXROYW1lIiwib3V0bGV0cyIsImdldFNlbGVjdG9yRm9yT3V0bGV0TmFtZSIsIm91dGxldEF0dHJpYnV0ZUZvclNjb3BlIiwiZmluZCIsIm91dGxldERlcGVuZGVuY2llcyIsImRlcGVuZGVuY2llcyIsInJvdXRlciIsIm1vZHVsZXMiLCJtb2R1bGUiLCJjb250cm9sbGVyQ29uc3RydWN0b3IiLCJkZXBlbmRlbnRDb250cm9sbGVySWRlbnRpZmllcnMiLCJpZGVudGlmaWVycyIsImNvbnRleHRzIiwiZ2V0Q29udHJvbGxlckZvckVsZW1lbnRBbmRJZGVudGlmaWVyIiwiQ29udGV4dCIsImZ1bmN0aW9uTmFtZSIsImJpbmRpbmdPYnNlcnZlciIsImRpc3BhdGNoZXIiLCJ2YWx1ZU9ic2VydmVyIiwidGFyZ2V0T2JzZXJ2ZXIiLCJvdXRsZXRPYnNlcnZlciIsImluaXRpYWxpemUiLCJwYXJlbnRFbGVtZW50IiwiaW52b2tlQ29udHJvbGxlck1ldGhvZCIsImFyZ3MiLCJnZXRPd25LZXlzIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsImV4dGVuZCIsImV4dGVuZFdpdGhSZWZsZWN0IiwiZXh0ZW5kZWQiLCJSZWZsZWN0IiwiY29uc3RydWN0IiwiYXJndW1lbnRzIiwiY3JlYXRlIiwic2V0UHJvdG90eXBlT2YiLCJiIiwidGVzdFJlZmxlY3RFeHRlbnNpb24iLCJNb2R1bGUiLCJwcm9wZXJ0aWVzIiwic2hhZG93Q29uc3RydWN0b3IiLCJzaGFkb3dQcm9wZXJ0aWVzIiwic2hhZG93aW5nRGVzY3JpcHRvciIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImdldFNoYWRvd2VkRGVzY3JpcHRvciIsImdldFNoYWRvd1Byb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0aWVzIiwic2hhZG93IiwiYmxlc3NlZFByb3BlcnRpZXMiLCJibGVzc2luZyIsImdldEJsZXNzZWRQcm9wZXJ0aWVzIiwiYmxlc3NEZWZpbml0aW9uIiwiY29udGV4dHNCeVNjb3BlIiwiY29ubmVjdGVkQ29udGV4dHMiLCJjb25uZWN0Q29udGV4dEZvclNjb3BlIiwiZmV0Y2hDb250ZXh0Rm9yU2NvcGUiLCJkaXNjb25uZWN0Q29udGV4dEZvclNjb3BlIiwiQ2xhc3NNYXAiLCJnZXREYXRhS2V5IiwiZ2V0QWxsIiwiZ2V0QXR0cmlidXRlTmFtZSIsImdldEF0dHJpYnV0ZU5hbWVGb3JLZXkiLCJEYXRhTWFwIiwic2V0QXR0cmlidXRlIiwicmVtb3ZlQXR0cmlidXRlIiwiR3VpZGUiLCJsb2dnZXIiLCJ3YXJuZWRLZXlzQnlPYmplY3QiLCJ3YXJuIiwid2FybmVkS2V5cyIsImF0dHJpYnV0ZVZhbHVlQ29udGFpbnNUb2tlbiIsIlRhcmdldFNldCIsInRhcmdldE5hbWUiLCJ0YXJnZXROYW1lcyIsImZpbmRUYXJnZXQiLCJmaW5kTGVnYWN5VGFyZ2V0IiwiZmluZEFsbCIsInRhcmdldHMiLCJmaW5kQWxsVGFyZ2V0cyIsImZpbmRBbGxMZWdhY3lUYXJnZXRzIiwiZ2V0U2VsZWN0b3JGb3JUYXJnZXROYW1lIiwiZmluZEVsZW1lbnQiLCJmaW5kQWxsRWxlbWVudHMiLCJ0YXJnZXRBdHRyaWJ1dGVGb3JTY29wZSIsImdldExlZ2FjeVNlbGVjdG9yRm9yVGFyZ2V0TmFtZSIsImRlcHJlY2F0ZSIsInRhcmdldERlc2NyaXB0b3IiLCJ0YXJnZXRBdHRyaWJ1dGUiLCJyZXZpc2VkQXR0cmlidXRlTmFtZSIsImd1aWRlIiwiT3V0bGV0U2V0IiwiY29udHJvbGxlckVsZW1lbnQiLCJvdXRsZXROYW1lcyIsImZpbmRPdXRsZXQiLCJmaW5kQWxsT3V0bGV0cyIsInF1ZXJ5RWxlbWVudHMiLCJtYXRjaGVzRWxlbWVudCIsIlNjb3BlIiwiY2xhc3NlcyIsImNsb3Nlc3QiLCJjb250cm9sbGVyU2VsZWN0b3IiLCJkb2N1bWVudFNjb3BlIiwiaXNEb2N1bWVudFNjb3BlIiwiZG9jdW1lbnRFbGVtZW50IiwiU2NvcGVPYnNlcnZlciIsInNjb3Blc0J5SWRlbnRpZmllckJ5RWxlbWVudCIsInNjb3BlUmVmZXJlbmNlQ291bnRzIiwicGFyc2VWYWx1ZUZvckVsZW1lbnRBbmRJZGVudGlmaWVyIiwic2NvcGVzQnlJZGVudGlmaWVyIiwiZmV0Y2hTY29wZXNCeUlkZW50aWZpZXJGb3JFbGVtZW50IiwiY3JlYXRlU2NvcGVGb3JFbGVtZW50QW5kSWRlbnRpZmllciIsInJlZmVyZW5jZUNvdW50Iiwic2NvcGVDb25uZWN0ZWQiLCJzY29wZURpc2Nvbm5lY3RlZCIsIlJvdXRlciIsInNjb3BlT2JzZXJ2ZXIiLCJtb2R1bGVzQnlJZGVudGlmaWVyIiwibG9hZERlZmluaXRpb24iLCJ1bmxvYWRJZGVudGlmaWVyIiwiY29ubmVjdE1vZHVsZSIsImFmdGVyTG9hZCIsImRpc2Nvbm5lY3RNb2R1bGUiLCJnZXRDb250ZXh0Rm9yRWxlbWVudEFuZElkZW50aWZpZXIiLCJwcm9wb3NlVG9Db25uZWN0U2NvcGVGb3JFbGVtZW50QW5kSWRlbnRpZmllciIsImNvbnNvbGUiLCJkZWZhdWx0U2NoZW1hIiwiZW50ZXIiLCJ0YWIiLCJlc2MiLCJzcGFjZSIsInVwIiwiZG93biIsImhvbWUiLCJlbmQiLCJwYWdlX3VwIiwicGFnZV9kb3duIiwib2JqZWN0RnJvbUVudHJpZXMiLCJjIiwibiIsImFycmF5IiwibWVtbyIsImsiLCJ2IiwiQXBwbGljYXRpb24iLCJkZWJ1ZyIsImxvZ0Zvcm1hdHRlZE1lc3NhZ2UiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlYWR5U3RhdGUiLCJyZWdpc3RlciIsImxvYWQiLCJyZWdpc3RlckFjdGlvbk9wdGlvbiIsImhlYWQiLCJyZXN0Iiwic2hvdWxkTG9hZCIsInVubG9hZCIsImNvbnRyb2xsZXJzIiwib25lcnJvciIsImdyb3VwQ29sbGFwc2VkIiwibG9nIiwiZ3JvdXBFbmQiLCJnZXRPdXRsZXRDb250cm9sbGVyIiwiZ2V0Q29udHJvbGxlckFuZEVuc3VyZUNvbm5lY3RlZFNjb3BlIiwib3V0bGV0Q29udHJvbGxlciIsInBhcnNlVmFsdWVEZWZpbml0aW9uUGFpciIsInR5cGVEZWZpbml0aW9uIiwicGF5bG9hZCIsInR5cGVGcm9tT2JqZWN0IiwidHlwZU9iamVjdCIsImhhc1R5cGUiLCJoYXNEZWZhdWx0IiwiZGVmYXVsdCIsImZ1bGxPYmplY3QiLCJvbmx5VHlwZSIsIm9ubHlEZWZhdWx0IiwicGFyc2VWYWx1ZVR5cGVDb25zdGFudCIsInR5cGVGcm9tRGVmYXVsdFZhbHVlIiwicGFyc2VWYWx1ZVR5cGVEZWZhdWx0IiwicGFyc2VWYWx1ZVR5cGVPYmplY3QiLCJ0eXBlRnJvbUNvbnN0YW50IiwicGFyc2VWYWx1ZVR5cGVEZWZpbml0aW9uIiwiY29uc3RhbnQiLCJkZWZhdWx0VmFsdWVzQnlUeXBlIiwiY29uc3RhbnRGcm9tVHlwZSIsImRlZmF1bHRWYWx1ZUZvckRlZmluaXRpb24iLCJoYXNDdXN0b21EZWZhdWx0VmFsdWUiLCJyZWFkZXJzIiwid3JpdGVycyIsInZhbHVlRGVzY3JpcHRvckZvclRva2VuQW5kVHlwZURlZmluaXRpb24iLCJCb29sZWFuIiwiTnVtYmVyIiwiU3RyaW5nIiwiYm9vbGVhbiIsIm51bWJlciIsInN0cmluZyIsIndyaXRlSlNPTiIsInN0cmluZ2lmeSIsIkNvbnRyb2xsZXIiLCJfaWRlbnRpZmllciIsIl9hcHBsaWNhdGlvbiIsImRpc3BhdGNoIiwicHJlZml4IiwiYnViYmxlcyIsImNhbmNlbGFibGUiLCJDdXN0b21FdmVudCIsImRpc3BhdGNoRXZlbnQiLCJibGVzc2luZ3MiLCJjbGFzc0RlZmluaXRpb24iLCJ0YXJnZXREZWZpbml0aW9uIiwidmFsdWVEZWZpbml0aW9uUGFpcnMiLCJwYWlycyIsImdldE93blN0YXRpY09iamVjdFBhaXJzIiwicmVhZEluaGVyaXRhYmxlU3RhdGljT2JqZWN0UGFpcnMiLCJwcm9wZXJ0eURlc2NyaXB0b3JNYXAiLCJyZXN1bHQiLCJ2YWx1ZURlZmluaXRpb25QYWlyIiwidmFsdWVEZXNjcmlwdG9yIiwicHJvcGVydGllc0ZvclZhbHVlRGVmaW5pdGlvblBhaXIiLCJyZWFkIiwid3JpdGUiLCJvdXRsZXREZWZpbml0aW9uIiwiY2FtZWxpemVkTmFtZSIsIm91dGxldEVsZW1lbnQiLCJwcm9wZXJ0aWVzRm9yT3V0bGV0RGVmaW5pdGlvbiIsIl9fX0NTU19MT0FERVJfRVhQT1JUX19fIiwiaWQiLCJpIiwiZXhwb3J0cyIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJsaXN0IiwiaXRlbSIsIm5lZWRMYXllciIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJfayIsImNzc01hcHBpbmciLCJidG9hIiwiYmFzZTY0IiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJzb3VyY2VNYXBwaW5nIiwiX2kiLCJfbG9vcF8xIiwic291cmNlIiwiYXJnc18xIiwiZGVmaW5lUHJvcGVydHkiLCJMdXhvbkVycm9yIiwiSW52YWxpZERhdGVUaW1lRXJyb3IiLCJyZWFzb24iLCJ0b01lc3NhZ2UiLCJJbnZhbGlkSW50ZXJ2YWxFcnJvciIsIkludmFsaWREdXJhdGlvbkVycm9yIiwiQ29uZmxpY3RpbmdTcGVjaWZpY2F0aW9uRXJyb3IiLCJJbnZhbGlkVW5pdEVycm9yIiwidW5pdCIsIkludmFsaWRBcmd1bWVudEVycm9yIiwiWm9uZUlzQWJzdHJhY3RFcnJvciIsInMiLCJsIiwiREFURV9TSE9SVCIsInllYXIiLCJtb250aCIsImRheSIsIkRBVEVfTUVEIiwiREFURV9NRURfV0lUSF9XRUVLREFZIiwid2Vla2RheSIsIkRBVEVfRlVMTCIsIkRBVEVfSFVHRSIsIlRJTUVfU0lNUExFIiwiaG91ciIsIm1pbnV0ZSIsIlRJTUVfV0lUSF9TRUNPTkRTIiwic2Vjb25kIiwiVElNRV9XSVRIX1NIT1JUX09GRlNFVCIsInRpbWVab25lTmFtZSIsIlRJTUVfV0lUSF9MT05HX09GRlNFVCIsIlRJTUVfMjRfU0lNUExFIiwiaG91ckN5Y2xlIiwiVElNRV8yNF9XSVRIX1NFQ09ORFMiLCJUSU1FXzI0X1dJVEhfU0hPUlRfT0ZGU0VUIiwiVElNRV8yNF9XSVRIX0xPTkdfT0ZGU0VUIiwiREFURVRJTUVfU0hPUlQiLCJEQVRFVElNRV9TSE9SVF9XSVRIX1NFQ09ORFMiLCJEQVRFVElNRV9NRUQiLCJEQVRFVElNRV9NRURfV0lUSF9TRUNPTkRTIiwiREFURVRJTUVfTUVEX1dJVEhfV0VFS0RBWSIsIkRBVEVUSU1FX0ZVTEwiLCJEQVRFVElNRV9GVUxMX1dJVEhfU0VDT05EUyIsIkRBVEVUSU1FX0hVR0UiLCJEQVRFVElNRV9IVUdFX1dJVEhfU0VDT05EUyIsImlzVW5kZWZpbmVkIiwibyIsImlzTnVtYmVyIiwiaXNJbnRlZ2VyIiwiaGFzUmVsYXRpdmUiLCJJbnRsIiwiUmVsYXRpdmVUaW1lRm9ybWF0IiwiYmVzdEJ5IiwiYXJyIiwiYnkiLCJjb21wYXJlIiwiYmVzdCIsIm5leHQiLCJwYWlyIiwib2JqIiwicHJvcCIsImludGVnZXJCZXR3ZWVuIiwidGhpbmciLCJib3R0b20iLCJ0b3AiLCJwYWRTdGFydCIsInBhZGRlZCIsInBhcnNlSW50ZWdlciIsInBhcnNlSW50IiwicGFyc2VGbG9hdGluZyIsInBhcnNlRmxvYXQiLCJwYXJzZU1pbGxpcyIsImZyYWN0aW9uIiwiZiIsImZsb29yIiwicm91bmRUbyIsImRpZ2l0cyIsInRvd2FyZFplcm8iLCJmYWN0b3IiLCJ0cnVuYyIsInJvdW5kIiwiaXNMZWFwWWVhciIsImRheXNJblllYXIiLCJkYXlzSW5Nb250aCIsIm1vZE1vbnRoIiwieCIsIm9ialRvTG9jYWxUUyIsImQiLCJEYXRlIiwiVVRDIiwibWlsbGlzZWNvbmQiLCJzZXRVVENGdWxsWWVhciIsImdldFVUQ0Z1bGxZZWFyIiwid2Vla3NJbldlZWtZZWFyIiwid2Vla1llYXIiLCJwMSIsImxhc3QiLCJwMiIsInVudHJ1bmNhdGVZZWFyIiwicGFyc2Vab25lSW5mbyIsInRzIiwib2Zmc2V0Rm9ybWF0IiwibG9jYWxlIiwidGltZVpvbmUiLCJkYXRlIiwiaW50bE9wdHMiLCJtb2RpZmllZCIsInBhcnNlZCIsIkRhdGVUaW1lRm9ybWF0IiwiZm9ybWF0VG9QYXJ0cyIsIm0iLCJzaWduZWRPZmZzZXQiLCJvZmZIb3VyU3RyIiwib2ZmTWludXRlU3RyIiwib2ZmSG91ciIsImlzTmFOIiwib2ZmTWluIiwiaXMiLCJhc051bWJlciIsIm51bWVyaWNWYWx1ZSIsIm5vcm1hbGl6ZU9iamVjdCIsIm5vcm1hbGl6ZXIiLCJub3JtYWxpemVkIiwidSIsImZvcm1hdE9mZnNldCIsIm9mZnNldCIsImZvcm1hdCIsImhvdXJzIiwiYWJzIiwibWludXRlcyIsInNpZ24iLCJSYW5nZUVycm9yIiwidGltZU9iamVjdCIsInBpY2siLCJpYW5hUmVnZXgiLCJtb250aHNMb25nIiwibW9udGhzU2hvcnQiLCJtb250aHNOYXJyb3ciLCJtb250aHMiLCJ3ZWVrZGF5c0xvbmciLCJ3ZWVrZGF5c1Nob3J0Iiwid2Vla2RheXNOYXJyb3ciLCJ3ZWVrZGF5cyIsIm1lcmlkaWVtcyIsImVyYXNMb25nIiwiZXJhc1Nob3J0IiwiZXJhc05hcnJvdyIsImVyYXMiLCJzdHJpbmdpZnlUb2tlbnMiLCJzcGxpdHMiLCJ0b2tlblRvU3RyaW5nIiwibGl0ZXJhbCIsInZhbCIsIm1hY3JvVG9rZW5Ub0Zvcm1hdE9wdHMiLCJEIiwiREQiLCJEREQiLCJEREREIiwidCIsInR0IiwidHR0IiwidHR0dCIsIlQiLCJUVCIsIlRUVCIsIlRUVFQiLCJmZiIsImZmZiIsImZmZmYiLCJGIiwiRkYiLCJGRkYiLCJGRkZGIiwiRm9ybWF0dGVyIiwib3B0cyIsInBhcnNlRm9ybWF0IiwiZm10IiwiY3VycmVudCIsImN1cnJlbnRGdWxsIiwiYnJhY2tldGVkIiwiZm9ybWF0T3B0cyIsImxvYyIsInN5c3RlbUxvYyIsImZvcm1hdFdpdGhTeXN0ZW1EZWZhdWx0IiwiZHQiLCJyZWRlZmF1bHRUb1N5c3RlbSIsImR0Rm9ybWF0dGVyIiwiZm9ybWF0RGF0ZVRpbWUiLCJmb3JtYXREYXRlVGltZVBhcnRzIiwicmVzb2x2ZWRPcHRpb25zIiwibnVtIiwicCIsImZvcmNlU2ltcGxlIiwicGFkVG8iLCJudW1iZXJGb3JtYXR0ZXIiLCJmb3JtYXREYXRlVGltZUZyb21TdHJpbmciLCJrbm93bkVuZ2xpc2giLCJsaXN0aW5nTW9kZSIsInVzZURhdGVUaW1lRm9ybWF0dGVyIiwib3V0cHV0Q2FsZW5kYXIiLCJleHRyYWN0IiwiaXNPZmZzZXRGaXhlZCIsImFsbG93WiIsImlzVmFsaWQiLCJ6b25lIiwic3RhbmRhbG9uZSIsIm1vbnRoRm9yRGF0ZVRpbWUiLCJ3ZWVrZGF5Rm9yRGF0ZVRpbWUiLCJtYXliZU1hY3JvIiwiZXJhIiwiZXJhRm9yRGF0ZVRpbWUiLCJvZmZzZXROYW1lIiwiem9uZU5hbWUiLCJtZXJpZGllbUZvckRhdGVUaW1lIiwid2Vla051bWJlciIsIm9yZGluYWwiLCJxdWFydGVyIiwiZm9ybWF0RHVyYXRpb25Gcm9tU3RyaW5nIiwiZHVyIiwidG9rZW5Ub0ZpZWxkIiwicmVhbFRva2VucyIsImZvdW5kIiwibGlsZHVyIiwibWFwcGVkIiwic2hpZnRUbyIsIkludmFsaWQiLCJleHBsYW5hdGlvbiIsIlpvbmUiLCJpYW5hTmFtZSIsImlzVW5pdmVyc2FsIiwiZXF1YWxzIiwib3RoZXJab25lIiwic2luZ2xldG9uJDEiLCJTeXN0ZW1ab25lIiwiaW5zdGFuY2UiLCJnZXRUaW1lem9uZU9mZnNldCIsImR0ZkNhY2hlIiwidHlwZVRvUG9zIiwiaWFuYVpvbmVDYWNoZSIsIklBTkFab25lIiwicmVzZXRDYWNoZSIsImlzVmFsaWRTcGVjaWZpZXIiLCJpc1ZhbGlkWm9uZSIsInZhbGlkIiwiTmFOIiwiZHRmIiwiaG91cjEyIiwiYWRPckJjIiwiZm9ybWF0dGVkIiwiZmlsbGVkIiwicG9zIiwicGFydHNPZmZzZXQiLCJleGVjIiwiZk1vbnRoIiwiZkRheSIsImZZZWFyIiwiZmFkT3JCYyIsImZIb3VyIiwiZk1pbnV0ZSIsImZTZWNvbmQiLCJoYWNreU9mZnNldCIsImFzVFMiLCJvdmVyIiwic2luZ2xldG9uIiwiRml4ZWRPZmZzZXRab25lIiwidXRjSW5zdGFuY2UiLCJwYXJzZVNwZWNpZmllciIsInIiLCJmaXhlZCIsIkludmFsaWRab25lIiwibm9ybWFsaXplWm9uZSIsImRlZmF1bHRab25lIiwibG93ZXJlZCIsInRocm93T25JbnZhbGlkIiwibm93IiwiZGVmYXVsdExvY2FsZSIsImRlZmF1bHROdW1iZXJpbmdTeXN0ZW0iLCJkZWZhdWx0T3V0cHV0Q2FsZW5kYXIiLCJTZXR0aW5ncyIsIm51bWJlcmluZ1N5c3RlbSIsInJlc2V0Q2FjaGVzIiwiTG9jYWxlIiwiaW50bExGQ2FjaGUiLCJpbnRsRFRDYWNoZSIsImdldENhY2hlZERURiIsImxvY1N0cmluZyIsImludGxOdW1DYWNoZSIsImludGxSZWxDYWNoZSIsInN5c0xvY2FsZUNhY2hlIiwibGlzdFN0dWZmIiwiZGVmYXVsdE9LIiwiZW5nbGlzaEZuIiwiaW50bEZuIiwibW9kZSIsIlBvbHlOdW1iZXJGb3JtYXR0ZXIiLCJpbnRsIiwib3RoZXJPcHRzIiwidXNlR3JvdXBpbmciLCJtaW5pbXVtSW50ZWdlckRpZ2l0cyIsImluZiIsIk51bWJlckZvcm1hdCIsImdldENhY2hlZElORiIsIlBvbHlEYXRlRm9ybWF0dGVyIiwieiIsImdtdE9mZnNldCIsIm9mZnNldFoiLCJEYXRlVGltZSIsImZyb21NaWxsaXMiLCJ0b0pTRGF0ZSIsIlBvbHlSZWxGb3JtYXR0ZXIiLCJpc0VuZ2xpc2giLCJzdHlsZSIsInJ0ZiIsImJhc2UiLCJjYWNoZUtleU9wdHMiLCJnZXRDYWNoZWRSVEYiLCJjb3VudCIsIm51bWVyaWMiLCJuYXJyb3ciLCJ1bml0cyIsInllYXJzIiwicXVhcnRlcnMiLCJ3ZWVrcyIsImRheXMiLCJzZWNvbmRzIiwibGFzdGFibGUiLCJpbmRleE9mIiwiaXNEYXkiLCJpc0luUGFzdCIsImZtdFZhbHVlIiwic2luZ3VsYXIiLCJsaWxVbml0cyIsImZtdFVuaXQiLCJmb3JtYXRSZWxhdGl2ZVRpbWUiLCJmcm9tT3B0cyIsImRlZmF1bHRUb0VOIiwic3BlY2lmaWVkTG9jYWxlIiwibG9jYWxlUiIsIm51bWJlcmluZ1N5c3RlbVIiLCJvdXRwdXRDYWxlbmRhclIiLCJmcm9tT2JqZWN0IiwibnVtYmVyaW5nIiwicGFyc2VkTG9jYWxlIiwicGFyc2VkTnVtYmVyaW5nU3lzdGVtIiwicGFyc2VkT3V0cHV0Q2FsZW5kYXIiLCJsb2NhbGVTdHIiLCJ1SW5kZXgiLCJzbWFsbGVyIiwic3Vic3RyaW5nIiwiY2FsZW5kYXIiLCJwYXJzZUxvY2FsZVN0cmluZyIsImludGxDb25maWdTdHJpbmciLCJ3ZWVrZGF5c0NhY2hlIiwibW9udGhzQ2FjaGUiLCJtZXJpZGllbUNhY2hlIiwiZXJhQ2FjaGUiLCJmYXN0TnVtYmVyc0NhY2hlZCIsImZhc3ROdW1iZXJzIiwic3RhcnRzV2l0aCIsImlzQWN0dWFsbHlFbiIsImhhc05vV2VpcmRuZXNzIiwiY2xvbmUiLCJhbHRzIiwicmVkZWZhdWx0VG9FTiIsImZvcm1hdFN0ciIsIm1zIiwidXRjIiwibWFwTW9udGhzIiwibWFwV2Vla2RheXMiLCJmaWVsZCIsIm1hdGNoaW5nIiwicmVsRm9ybWF0dGVyIiwibGlzdEZvcm1hdHRlciIsIkxpc3RGb3JtYXQiLCJnZXRDYWNoZWRMRiIsIm90aGVyIiwiY29tYmluZVJlZ2V4ZXMiLCJyZWdleGVzIiwiZnVsbCIsImNvbWJpbmVFeHRyYWN0b3JzIiwiZXh0cmFjdG9ycyIsIm1lcmdlZFZhbHMiLCJtZXJnZWRab25lIiwiY3Vyc29yIiwiZXgiLCJwYXR0ZXJucyIsInJlZ2V4IiwiZXh0cmFjdG9yIiwic2ltcGxlUGFyc2UiLCJyZXQiLCJvZmZzZXRSZWdleCIsImlzb1RpbWVCYXNlUmVnZXgiLCJpc29UaW1lUmVnZXgiLCJpc29UaW1lRXh0ZW5zaW9uUmVnZXgiLCJleHRyYWN0SVNPV2Vla0RhdGEiLCJleHRyYWN0SVNPT3JkaW5hbERhdGEiLCJzcWxUaW1lUmVnZXgiLCJzcWxUaW1lRXh0ZW5zaW9uUmVnZXgiLCJpbnQiLCJmYWxsYmFjayIsImV4dHJhY3RJU09UaW1lIiwibWlsbGlzZWNvbmRzIiwiZXh0cmFjdElTT09mZnNldCIsImxvY2FsIiwiZnVsbE9mZnNldCIsImV4dHJhY3RJQU5BWm9uZSIsImlzb1RpbWVPbmx5IiwiaXNvRHVyYXRpb24iLCJleHRyYWN0SVNPRHVyYXRpb24iLCJ5ZWFyU3RyIiwibW9udGhTdHIiLCJ3ZWVrU3RyIiwiZGF5U3RyIiwiaG91clN0ciIsIm1pbnV0ZVN0ciIsInNlY29uZFN0ciIsIm1pbGxpc2Vjb25kc1N0ciIsImhhc05lZ2F0aXZlUHJlZml4IiwibmVnYXRpdmVTZWNvbmRzIiwibWF5YmVOZWdhdGUiLCJmb3JjZSIsIm9ic09mZnNldHMiLCJHTVQiLCJFRFQiLCJFU1QiLCJDRFQiLCJDU1QiLCJNRFQiLCJNU1QiLCJQRFQiLCJQU1QiLCJmcm9tU3RyaW5ncyIsIndlZWtkYXlTdHIiLCJyZmMyODIyIiwiZXh0cmFjdFJGQzI4MjIiLCJvYnNPZmZzZXQiLCJtaWxPZmZzZXQiLCJyZmMxMTIzIiwicmZjODUwIiwiYXNjaWkiLCJleHRyYWN0UkZDMTEyM09yODUwIiwiZXh0cmFjdEFTQ0lJIiwiaXNvWW1kV2l0aFRpbWVFeHRlbnNpb25SZWdleCIsImlzb1dlZWtXaXRoVGltZUV4dGVuc2lvblJlZ2V4IiwiaXNvT3JkaW5hbFdpdGhUaW1lRXh0ZW5zaW9uUmVnZXgiLCJpc29UaW1lQ29tYmluZWRSZWdleCIsImV4dHJhY3RJU09ZbWRUaW1lQW5kT2Zmc2V0IiwiZXh0cmFjdElTT1dlZWtUaW1lQW5kT2Zmc2V0IiwiZXh0cmFjdElTT09yZGluYWxEYXRlQW5kVGltZSIsImV4dHJhY3RJU09UaW1lQW5kT2Zmc2V0IiwiZXh0cmFjdElTT1RpbWVPbmx5Iiwic3FsWW1kV2l0aFRpbWVFeHRlbnNpb25SZWdleCIsInNxbFRpbWVDb21iaW5lZFJlZ2V4IiwiZXh0cmFjdElTT1RpbWVPZmZzZXRBbmRJQU5BWm9uZSIsImxvd09yZGVyTWF0cml4IiwiY2FzdWFsTWF0cml4IiwiYWNjdXJhdGVNYXRyaXgiLCJkYXlzSW5ZZWFyQWNjdXJhdGUiLCJkYXlzSW5Nb250aEFjY3VyYXRlIiwib3JkZXJlZFVuaXRzJDEiLCJyZXZlcnNlVW5pdHMiLCJjbG9uZSQxIiwiY29uZiIsImNvbnZlcnNpb25BY2N1cmFjeSIsIkR1cmF0aW9uIiwiY29udmVydCIsIm1hdHJpeCIsImZyb21NYXAiLCJmcm9tVW5pdCIsInRvTWFwIiwidG9Vbml0IiwiY29udiIsInJhdyIsImFkZGVkIiwiY2VpbCIsImFudGlUcnVuYyIsImNvbmZpZyIsImFjY3VyYXRlIiwiaW52YWxpZCIsImlzTHV4b25EdXJhdGlvbiIsIm5vcm1hbGl6ZVVuaXQiLCJmcm9tRHVyYXRpb25MaWtlIiwiZHVyYXRpb25MaWtlIiwiaXNEdXJhdGlvbiIsImZyb21JU08iLCJ0ZXh0IiwicGFyc2VJU09EdXJhdGlvbiIsImZyb21JU09UaW1lIiwicGFyc2VJU09UaW1lT25seSIsIndlZWsiLCJ0b0Zvcm1hdCIsImZtdE9wdHMiLCJ0b0h1bWFuIiwidW5pdERpc3BsYXkiLCJsaXN0U3R5bGUiLCJ0b09iamVjdCIsInRvSVNPIiwidG9JU09UaW1lIiwibWlsbGlzIiwidG9NaWxsaXMiLCJzdXBwcmVzc01pbGxpc2Vjb25kcyIsInN1cHByZXNzU2Vjb25kcyIsImluY2x1ZGVQcmVmaXgiLCJzdHIiLCJ0b0pTT04iLCJhcyIsInZhbHVlT2YiLCJwbHVzIiwiZHVyYXRpb24iLCJtaW51cyIsIm5lZ2F0ZSIsIm1hcFVuaXRzIiwiZm4iLCJyZWNvbmZpZ3VyZSIsIm5vcm1hbGl6ZSIsInZhbHMiLCJwcmV2aW91cyIsIm5vcm1hbGl6ZVZhbHVlcyIsImJ1aWx0IiwiYWNjdW11bGF0ZWQiLCJsYXN0VW5pdCIsIm93biIsImFrIiwibmVnYXRlZCIsImludmFsaWRSZWFzb24iLCJpbnZhbGlkRXhwbGFuYXRpb24iLCJ2MSIsInYyIiwiSU5WQUxJRCQxIiwiSW50ZXJ2YWwiLCJpc0x1eG9uSW50ZXJ2YWwiLCJmcm9tRGF0ZVRpbWVzIiwiYnVpbHRTdGFydCIsImZyaWVuZGx5RGF0ZVRpbWUiLCJidWlsdEVuZCIsInZhbGlkYXRlRXJyb3IiLCJ2YWxpZGF0ZVN0YXJ0RW5kIiwiYWZ0ZXIiLCJiZWZvcmUiLCJzdGFydElzVmFsaWQiLCJlbmRJc1ZhbGlkIiwiaXNJbnRlcnZhbCIsInRvRHVyYXRpb24iLCJzdGFydE9mIiwiZGlmZiIsImhhc1NhbWUiLCJpc0VtcHR5IiwiaXNBZnRlciIsImRhdGVUaW1lIiwiaXNCZWZvcmUiLCJzcGxpdEF0IiwiZGF0ZVRpbWVzIiwic29ydGVkIiwicmVzdWx0cyIsInNwbGl0QnkiLCJpZHgiLCJkaXZpZGVFcXVhbGx5IiwibnVtYmVyT2ZQYXJ0cyIsIm92ZXJsYXBzIiwiYWJ1dHNTdGFydCIsImFidXRzRW5kIiwiZW5ndWxmcyIsImludGVyc2VjdGlvbiIsInVuaW9uIiwibWVyZ2UiLCJpbnRlcnZhbHMiLCJmaW5hbCIsInNvZmFyIiwieG9yIiwiY3VycmVudENvdW50IiwiZW5kcyIsInRpbWUiLCJkaWZmZXJlbmNlIiwidG9JU09EYXRlIiwiZGF0ZUZvcm1hdCIsInNlcGFyYXRvciIsIm1hcEVuZHBvaW50cyIsIm1hcEZuIiwiSW5mbyIsImhhc0RTVCIsInByb3RvIiwic2V0Wm9uZSIsImlzVmFsaWRJQU5BWm9uZSIsImxvY09iaiIsIm1vbnRoc0Zvcm1hdCIsIndlZWtkYXlzRm9ybWF0IiwiZmVhdHVyZXMiLCJyZWxhdGl2ZSIsImRheURpZmYiLCJlYXJsaWVyIiwibGF0ZXIiLCJ1dGNEYXlTdGFydCIsInRvVVRDIiwia2VlcExvY2FsVGltZSIsIm51bWJlcmluZ1N5c3RlbXMiLCJhcmFiIiwiYXJhYmV4dCIsImJhbGkiLCJiZW5nIiwiZGV2YSIsImZ1bGx3aWRlIiwiZ3VqciIsImhhbmlkZWMiLCJraG1yIiwia25kYSIsImxhb28iLCJsaW1iIiwibWx5bSIsIm1vbmciLCJteW1yIiwib3J5YSIsInRhbWxkZWMiLCJ0ZWx1IiwidGhhaSIsInRpYnQiLCJsYXRuIiwibnVtYmVyaW5nU3lzdGVtc1VURjE2IiwiaGFuaWRlY0NoYXJzIiwiZGlnaXRSZWdleCIsImFwcGVuZCIsImludFVuaXQiLCJwb3N0IiwiZGVzZXIiLCJjb2RlIiwiY2hhckNvZGVBdCIsInNlYXJjaCIsIm1pbiIsInBhcnNlRGlnaXRzIiwic3BhY2VPck5CU1AiLCJmcm9tQ2hhckNvZGUiLCJzcGFjZU9yTkJTUFJlZ0V4cCIsImZpeExpc3RSZWdleCIsInN0cmlwSW5zZW5zaXRpdml0aWVzIiwib25lT2YiLCJzdHJpbmdzIiwic3RhcnRJbmRleCIsImdyb3VwcyIsImgiLCJzaW1wbGUiLCJwYXJ0VHlwZVN0eWxlVG9Ub2tlblZhbCIsInNob3J0IiwibG9uZyIsImRheXBlcmlvZCIsImRheVBlcmlvZCIsImR1bW15RGF0ZVRpbWVDYWNoZSIsImV4cGxhaW5Gcm9tVG9rZW5zIiwicGFydCIsInRva2VuRm9yUGFydCIsIm1heWJlRXhwYW5kTWFjcm9Ub2tlbiIsImV4cGFuZE1hY3JvVG9rZW5zIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwic2l4Iiwib25lT3JUd28iLCJvbmVUb1RocmVlIiwib25lVG9TaXgiLCJvbmVUb05pbmUiLCJ0d29Ub0ZvdXIiLCJmb3VyVG9TaXgiLCJ1bml0YXRlIiwidW5pdEZvclRva2VuIiwiZGlzcXVhbGlmeWluZ1VuaXQiLCJyZWdleFN0cmluZyIsImhhbmRsZXJzIiwiYnVpbGRSZWdleCIsInJhd01hdGNoZXMiLCJhbGwiLCJtYXRjaEluZGV4Iiwic3BlY2lmaWNPZmZzZXQiLCJaIiwicSIsIk0iLCJHIiwieSIsIlMiLCJ0b0ZpZWxkIiwiZGF0ZVRpbWVGcm9tTWF0Y2hlcyIsIm5vbkxlYXBMYWRkZXIiLCJsZWFwTGFkZGVyIiwidW5pdE91dE9mUmFuZ2UiLCJkYXlPZldlZWsiLCJqcyIsImdldFVUQ0RheSIsImNvbXB1dGVPcmRpbmFsIiwidW5jb21wdXRlT3JkaW5hbCIsInRhYmxlIiwibW9udGgwIiwiZ3JlZ29yaWFuVG9XZWVrIiwiZ3JlZ09iaiIsIndlZWtUb0dyZWdvcmlhbiIsIndlZWtEYXRhIiwid2Vla2RheU9mSmFuNCIsInllYXJJbkRheXMiLCJncmVnb3JpYW5Ub09yZGluYWwiLCJncmVnRGF0YSIsIm9yZGluYWxUb0dyZWdvcmlhbiIsIm9yZGluYWxEYXRhIiwiaGFzSW52YWxpZEdyZWdvcmlhbkRhdGEiLCJ2YWxpZFllYXIiLCJ2YWxpZE1vbnRoIiwidmFsaWREYXkiLCJoYXNJbnZhbGlkVGltZURhdGEiLCJ2YWxpZEhvdXIiLCJ2YWxpZE1pbnV0ZSIsInZhbGlkU2Vjb25kIiwidmFsaWRNaWxsaXNlY29uZCIsIklOVkFMSUQiLCJNQVhfREFURSIsInVuc3VwcG9ydGVkWm9uZSIsInBvc3NpYmx5Q2FjaGVkV2Vla0RhdGEiLCJpbnN0Iiwib2xkIiwiZml4T2Zmc2V0IiwibG9jYWxUUyIsInR6IiwidXRjR3Vlc3MiLCJvMiIsIm8zIiwidHNUb09iaiIsImdldFVUQ01vbnRoIiwiZ2V0VVRDRGF0ZSIsImdldFVUQ0hvdXJzIiwiZ2V0VVRDTWludXRlcyIsImdldFVUQ1NlY29uZHMiLCJnZXRVVENNaWxsaXNlY29uZHMiLCJvYmpUb1RTIiwiYWRqdXN0VGltZSIsIm9QcmUiLCJtaWxsaXNUb0FkZCIsInBhcnNlRGF0YVRvRGF0ZVRpbWUiLCJwYXJzZWRab25lIiwiaW50ZXJwcmV0YXRpb25ab25lIiwidG9UZWNoRm9ybWF0IiwibG9uZ0Zvcm1hdCIsImluY2x1ZGVPZmZzZXQiLCJleHRlbmRlZFpvbmUiLCJkZWZhdWx0VW5pdFZhbHVlcyIsImRlZmF1bHRXZWVrVW5pdFZhbHVlcyIsImRlZmF1bHRPcmRpbmFsVW5pdFZhbHVlcyIsIm9yZGVyZWRVbml0cyIsIm9yZGVyZWRXZWVrVW5pdHMiLCJvcmRlcmVkT3JkaW5hbFVuaXRzIiwid2Vla251bWJlciIsIndlZWtzbnVtYmVyIiwid2Vla251bWJlcnMiLCJ3ZWVreWVhciIsIndlZWt5ZWFycyIsInF1aWNrRFQiLCJ0c05vdyIsIm9mZnNldFByb3ZpcyIsImRpZmZSZWxhdGl2ZSIsImNhbGVuZGFyeSIsImRpZmZlciIsImxhc3RPcHRzIiwiYXJnTGlzdCIsIm90IiwiX3pvbmUiLCJpc0x1eG9uRGF0ZVRpbWUiLCJmcm9tSlNEYXRlIiwiem9uZVRvVXNlIiwiZnJvbVNlY29uZHMiLCJjb250YWluc09yZGluYWwiLCJjb250YWluc0dyZWdvclllYXIiLCJjb250YWluc0dyZWdvck1EIiwiY29udGFpbnNHcmVnb3IiLCJkZWZpbml0ZVdlZWtEZWYiLCJ1c2VXZWVrRGF0YSIsImRlZmF1bHRWYWx1ZXMiLCJvYmpOb3ciLCJmb3VuZEZpcnN0IiwiaGlnaGVyT3JkZXJJbnZhbGlkIiwidmFsaWRXZWVrIiwidmFsaWRXZWVrZGF5IiwiaGFzSW52YWxpZFdlZWtEYXRhIiwidmFsaWRPcmRpbmFsIiwiaGFzSW52YWxpZE9yZGluYWxEYXRhIiwiZ3JlZ29yaWFuIiwidHNGaW5hbCIsIm9mZnNldEZpbmFsIiwicGFyc2VJU09EYXRlIiwiZnJvbVJGQzI4MjIiLCJwcmVwcm9jZXNzUkZDMjgyMiIsInBhcnNlUkZDMjgyMkRhdGUiLCJmcm9tSFRUUCIsInBhcnNlSFRUUERhdGUiLCJmcm9tRm9ybWF0IiwibG9jYWxlVG9Vc2UiLCJwYXJzZUZyb21Ub2tlbnMiLCJmcm9tU3RyaW5nIiwiZnJvbVNRTCIsInBhcnNlU1FMIiwiaXNEYXRlVGltZSIsIm1vbnRoU2hvcnQiLCJtb250aExvbmciLCJ3ZWVrZGF5U2hvcnQiLCJ3ZWVrZGF5TG9uZyIsIm9mZnNldE5hbWVTaG9ydCIsIm9mZnNldE5hbWVMb25nIiwiaXNJbkRTVCIsImlzSW5MZWFwWWVhciIsInJlc29sdmVkTG9jYWxlT3B0aW9ucyIsInRvTG9jYWwiLCJrZWVwQ2FsZW5kYXJUaW1lIiwibmV3VFMiLCJvZmZzZXRHdWVzcyIsImFzT2JqIiwic2V0TG9jYWxlIiwic2V0dGluZ1dlZWtTdHVmZiIsIm1peGVkIiwibm9ybWFsaXplZFVuaXQiLCJlbmRPZiIsInRvTG9jYWxlU3RyaW5nIiwidG9Mb2NhbGVQYXJ0cyIsImV4dCIsInRvSVNPV2Vla0RhdGUiLCJ0b1JGQzI4MjIiLCJ0b0hUVFAiLCJ0b1NRTERhdGUiLCJ0b1NRTFRpbWUiLCJpbmNsdWRlWm9uZSIsImluY2x1ZGVPZmZzZXRTcGFjZSIsInRvU1FMIiwidG9TZWNvbmRzIiwidG9Vbml4SW50ZWdlciIsInRvQlNPTiIsImluY2x1ZGVDb25maWciLCJvdGhlckRhdGVUaW1lIiwiZHVyT3B0cyIsIm90aGVySXNMYXRlciIsImRpZmZlZCIsImhpZ2hXYXRlciIsImxvd2VzdE9yZGVyIiwiZGlmZmVycyIsImRlbHRhIiwiaGlnaE9yZGVyRGlmZnMiLCJyZW1haW5pbmdNaWxsaXMiLCJsb3dlck9yZGVyVW5pdHMiLCJkaWZmTm93IiwidW50aWwiLCJpbnB1dE1zIiwiYWRqdXN0ZWRUb1pvbmUiLCJ0b1JlbGF0aXZlIiwicGFkZGluZyIsInRvUmVsYXRpdmVDYWxlbmRhciIsImV2ZXJ5IiwiZnJvbUZvcm1hdEV4cGxhaW4iLCJmcm9tU3RyaW5nRXhwbGFpbiIsImRhdGVUaW1laXNoIiwiVkVSU0lPTiIsIkhPT0tTIiwiZGVmYXVsdHMiLCJfZGlzYWJsZSIsImFsbG93SW5wdXQiLCJhbGxvd0ludmFsaWRQcmVsb2FkIiwiYWx0Rm9ybWF0IiwiYWx0SW5wdXQiLCJhbHRJbnB1dENsYXNzIiwiYW5pbWF0ZSIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsImFyaWFEYXRlRm9ybWF0IiwiYXV0b0ZpbGxEZWZhdWx0VGltZSIsImNsaWNrT3BlbnMiLCJjbG9zZU9uU2VsZWN0IiwiY29uanVuY3Rpb24iLCJkZWZhdWx0SG91ciIsImRlZmF1bHRNaW51dGUiLCJkZWZhdWx0U2Vjb25kcyIsImRpc2FibGUiLCJkaXNhYmxlTW9iaWxlIiwiZW5hYmxlU2Vjb25kcyIsImVuYWJsZVRpbWUiLCJlcnJvckhhbmRsZXIiLCJlcnIiLCJnZXRXZWVrIiwiZ2l2ZW5EYXRlIiwiZ2V0VGltZSIsInNldEhvdXJzIiwic2V0RGF0ZSIsImdldERhdGUiLCJnZXREYXkiLCJ3ZWVrMSIsImdldEZ1bGxZZWFyIiwiaG91ckluY3JlbWVudCIsImlnbm9yZWRGb2N1c0VsZW1lbnRzIiwiaW5saW5lIiwibWludXRlSW5jcmVtZW50IiwibW9udGhTZWxlY3RvclR5cGUiLCJuZXh0QXJyb3ciLCJub0NhbGVuZGFyIiwib25DaGFuZ2UiLCJvbkNsb3NlIiwib25EYXlDcmVhdGUiLCJvbkRlc3Ryb3kiLCJvbktleURvd24iLCJvbk1vbnRoQ2hhbmdlIiwib25PcGVuIiwib25QYXJzZUNvbmZpZyIsIm9uUmVhZHkiLCJvblZhbHVlVXBkYXRlIiwib25ZZWFyQ2hhbmdlIiwib25QcmVDYWxlbmRhclBvc2l0aW9uIiwicGx1Z2lucyIsInBvc2l0aW9uIiwicG9zaXRpb25FbGVtZW50IiwicHJldkFycm93Iiwic2hvcnRoYW5kQ3VycmVudE1vbnRoIiwic2hvd01vbnRocyIsInN0YXRpYyIsInRpbWVfMjRociIsIndlZWtOdW1iZXJzIiwid3JhcCIsImVuZ2xpc2giLCJzaG9ydGhhbmQiLCJsb25naGFuZCIsImZpcnN0RGF5T2ZXZWVrIiwibnRoIiwicmFuZ2VTZXBhcmF0b3IiLCJ3ZWVrQWJicmV2aWF0aW9uIiwic2Nyb2xsVGl0bGUiLCJ0b2dnbGVUaXRsZSIsImFtUE0iLCJ5ZWFyQXJpYUxhYmVsIiwibW9udGhBcmlhTGFiZWwiLCJob3VyQXJpYUxhYmVsIiwibWludXRlQXJpYUxhYmVsIiwicGFkIiwiYm9vbCIsImRlYm91bmNlIiwid2FpdCIsIl90aGlzIiwiY2xlYXJUaW1lb3V0Iiwic2V0VGltZW91dCIsImFwcGx5IiwiYXJyYXlpZnkiLCJ0b2dnbGVDbGFzcyIsImVsZW0iLCJjbGFzc05hbWUiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJjcmVhdGVFbGVtZW50IiwidGFnIiwidGV4dENvbnRlbnQiLCJjbGVhck5vZGUiLCJmaXJzdENoaWxkIiwicmVtb3ZlQ2hpbGQiLCJmaW5kUGFyZW50IiwiY29uZGl0aW9uIiwicGFyZW50Tm9kZSIsImNyZWF0ZU51bWJlcklucHV0IiwiaW5wdXRDbGFzc05hbWUiLCJ3cmFwcGVyIiwibnVtSW5wdXQiLCJhcnJvd1VwIiwiYXJyb3dEb3duIiwiYXBwZW5kQ2hpbGQiLCJnZXRFdmVudFRhcmdldCIsImNvbXBvc2VkUGF0aCIsImRvTm90aGluZyIsIm1vbnRoVG9TdHIiLCJtb250aE51bWJlciIsInJldkZvcm1hdCIsImRhdGVPYmoiLCJtb250aE5hbWUiLCJzZXRNb250aCIsImdldEhvdXJzIiwiSCIsIkoiLCJLIiwic2hvcnRNb250aCIsInNldFNlY29uZHMiLCJVIiwidW5peFNlY29uZHMiLCJXIiwid2Vla051bSIsIlkiLCJzZXRGdWxsWWVhciIsIklTT0RhdGUiLCJzZXRNaW51dGVzIiwiaiIsInVuaXhNaWxsU2Vjb25kcyIsInciLCJ0b2tlblJlZ2V4IiwiZm9ybWF0cyIsInRvSVNPU3RyaW5nIiwiZ2V0TW9udGgiLCJnZXRTZWNvbmRzIiwiZ2V0TWludXRlcyIsImNyZWF0ZURhdGVGb3JtYXR0ZXIiLCJfYiIsIl9jIiwibDEwbiIsIl9kIiwiaXNNb2JpbGUiLCJmcm10Iiwib3ZlcnJpZGVMb2NhbGUiLCJmb3JtYXREYXRlIiwiY3JlYXRlRGF0ZVBhcnNlciIsImdpdmVuRm9ybWF0IiwidGltZWxlc3MiLCJjdXN0b21Mb2NhbGUiLCJwYXJzZWREYXRlIiwiZGF0ZU9yaWciLCJ0b0ZpeGVkIiwiZGF0ZXN0ciIsInBhcnNlRGF0ZSIsIm1hdGNoZWQiLCJvcHMiLCJyZWdleFN0ciIsImlzQmFja1NsYXNoIiwiZXNjYXBlZCIsImNvbXBhcmVEYXRlcyIsImRhdGUxIiwiZGF0ZTIiLCJpc0JldHdlZW4iLCJ0czEiLCJ0czIiLCJjYWxjdWxhdGVTZWNvbmRzU2luY2VNaWRuaWdodCIsInBhcnNlU2Vjb25kcyIsInNlY29uZHNTaW5jZU1pZG5pZ2h0IiwiREFZIiwiZ2V0RGVmYXVsdEhvdXJzIiwibWluRGF0ZSIsIm1pbkhvdXIiLCJtaW5NaW51dGVzIiwibWluU2Vjb25kcyIsIm1heERhdGUiLCJtYXhIciIsIm1heE1pbnV0ZXMiLCJfX2Fzc2lnbiIsIl9fc3ByZWFkQXJyYXlzIiwiaWwiLCJqbCIsIkRFQk9VTkNFRF9DSEFOR0VfTVMiLCJGbGF0cGlja3JJbnN0YW5jZSIsImluc3RhbmNlQ29uZmlnIiwiZmxhdHBpY2tyIiwiZGVmYXVsdENvbmZpZyIsImdldENsb3Nlc3RBY3RpdmVFbGVtZW50IiwiY2FsZW5kYXJDb250YWluZXIiLCJnZXRSb290Tm9kZSIsImFjdGl2ZUVsZW1lbnQiLCJiaW5kVG9JbnN0YW5jZSIsImJpbmQiLCJzZXRDYWxlbmRhcldpZHRoIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidmlzaWJpbGl0eSIsImRpc3BsYXkiLCJkYXlzQ29udGFpbmVyIiwiZGF5c1dpZHRoIiwib2Zmc2V0V2lkdGgiLCJ3aWR0aCIsIndlZWtXcmFwcGVyIiwicmVtb3ZlUHJvcGVydHkiLCJ1cGRhdGVUaW1lIiwic2VsZWN0ZWREYXRlcyIsImRlZmF1bHREYXRlIiwiZ2V0TWlsbGlzZWNvbmRzIiwibGF0ZXN0U2VsZWN0ZWREYXRlT2JqIiwiaXNLZXlEb3duIiwic3RlcCIsImN1clZhbHVlIiwibmV3VmFsdWUiLCJ3aGljaCIsImlzSG91ckVsZW0iLCJob3VyRWxlbWVudCIsImlzTWludXRlRWxlbSIsIm1pbnV0ZUVsZW1lbnQiLCJpbmNyZW1lbnROdW1JbnB1dCIsInRpbWVXcmFwcGVyIiwicHJldlZhbHVlIiwiX2lucHV0Iiwic2V0SG91cnNGcm9tSW5wdXRzIiwidXBkYXRlVmFsdWUiLCJfZGVib3VuY2VkQ2hhbmdlIiwic2Vjb25kRWxlbWVudCIsImxpbWl0TWluSG91cnMiLCJtaW5UaW1lIiwibWluRGF0ZUhhc1RpbWUiLCJsaW1pdE1heEhvdXJzIiwibWF4VGltZSIsIm1heERhdGVIYXNUaW1lIiwibWluQm91bmQiLCJtYXhCb3VuZCIsImN1cnJlbnRUaW1lIiwic2V0SG91cnNGcm9tRGF0ZSIsIm9uWWVhcklucHV0IiwiY2hhbmdlWWVhciIsImhhbmRsZXIiLCJldiIsImVsIiwiX2hhbmRsZXJzIiwidHJpZ2dlckNoYW5nZSIsInRyaWdnZXJFdmVudCIsImp1bXBUb0RhdGUiLCJqdW1wRGF0ZSIsImp1bXBUbyIsIm9sZFllYXIiLCJjdXJyZW50WWVhciIsIm9sZE1vbnRoIiwiY3VycmVudE1vbnRoIiwiYnVpbGRNb250aFN3aXRjaCIsInJlZHJhdyIsInRpbWVJbmNyZW1lbnQiLCJpbnB1dEVsZW0iLCJjcmVhdGVFdmVudCIsImNyZWF0ZURheSIsIl9kYXlOdW1iZXIiLCJkYXRlSXNFbmFibGVkIiwiaXNFbmFibGVkIiwiZGF5RWxlbWVudCIsIiRpIiwidG9kYXlEYXRlRWxlbSIsInRhYkluZGV4IiwiaXNEYXRlU2VsZWN0ZWQiLCJzZWxlY3RlZERhdGVFbGVtIiwiaXNEYXRlSW5SYW5nZSIsImluc2VydEFkamFjZW50SFRNTCIsImZvY3VzT25EYXlFbGVtIiwidGFyZ2V0Tm9kZSIsImZvY3VzIiwib25Nb3VzZU92ZXIiLCJnZXRGaXJzdEF2YWlsYWJsZURheSIsInN0YXJ0TW9udGgiLCJlbmRNb250aCIsImNoaWxkcmVuIiwiZW5kSW5kZXgiLCJmb2N1c09uRGF5IiwiZGF5Rm9jdXNlZCIsImlzSW5WaWV3Iiwic3RhcnRFbGVtIiwiZ2l2ZW5Nb250aCIsImxvb3BEZWx0YSIsIm51bU1vbnRoRGF5cyIsImNoYW5nZU1vbnRoIiwiZ2V0TmV4dEF2YWlsYWJsZURheSIsImJ1aWxkTW9udGhEYXlzIiwiZmlyc3RPZk1vbnRoIiwicHJldk1vbnRoRGF5cyIsInV0aWxzIiwiZ2V0RGF5c0luTW9udGgiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiaXNNdWx0aU1vbnRoIiwicHJldk1vbnRoRGF5Q2xhc3MiLCJuZXh0TW9udGhEYXlDbGFzcyIsImRheU51bWJlciIsImRheUluZGV4IiwiZGF5TnVtIiwiZGF5Q29udGFpbmVyIiwiYnVpbGREYXlzIiwiZnJhZyIsInNob3VsZEJ1aWxkTW9udGgiLCJtb250aHNEcm9wZG93bkNvbnRhaW5lciIsImlubmVySFRNTCIsInNlbGVjdGVkIiwiYnVpbGRNb250aCIsIm1vbnRoRWxlbWVudCIsImNvbnRhaW5lciIsIm1vbnRoTmF2RnJhZ21lbnQiLCJzZWxlY3RlZE1vbnRoIiwieWVhcklucHV0IiwidGFiaW5kZXgiLCJ5ZWFyRWxlbWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiZGlzYWJsZWQiLCJidWlsZE1vbnRocyIsIm1vbnRoTmF2IiwicHJldk1vbnRoTmF2IiwieWVhckVsZW1lbnRzIiwibW9udGhFbGVtZW50cyIsIm5leHRNb250aE5hdiIsImJ1aWxkV2Vla2RheXMiLCJ3ZWVrZGF5Q29udGFpbmVyIiwidXBkYXRlV2Vla2RheXMiLCJzcGxpY2UiLCJpc09mZnNldCIsIl9oaWRlUHJldk1vbnRoQXJyb3ciLCJfaGlkZU5leHRNb250aEFycm93IiwidXBkYXRlTmF2aWdhdGlvbkN1cnJlbnRNb250aCIsImlzQ2FsZW5kYXJFbGVtIiwiZG9jdW1lbnRDbGljayIsImlzT3BlbiIsImV2ZW50VGFyZ2V0XzEiLCJpc0NhbGVuZGFyRWxlbWVudCIsImxvc3RGb2N1cyIsInBhdGgiLCJyZWxhdGVkVGFyZ2V0IiwiaXNJZ25vcmVkIiwidGltZUNvbnRhaW5lciIsImNsb3NlIiwibmV3WWVhciIsIm5ld1llYXJOdW0iLCJpc05ld1llYXIiLCJkYXRlVG9DaGVjayIsImVuYWJsZSIsInRvIiwib25CbHVyIiwiaXNJbnB1dCIsInZhbHVlQ2hhbmdlZCIsInRyaW1FbmQiLCJnZXREYXRlU3RyIiwiYWxsb3dLZXlkb3duIiwiYWxsb3dJbmxpbmVLZXlkb3duIiwia2V5Q29kZSIsImJsdXIiLCJvcGVuIiwiaXNUaW1lT2JqIiwiZm9jdXNBbmRDbG9zZSIsInNlbGVjdERhdGUiLCJkZWx0YV8xIiwiY3VycmVudFllYXJFbGVtZW50IiwiZWxlbXMiLCJwbHVnaW5FbGVtZW50cyIsImNlbGxDbGFzcyIsImhvdmVyRGF0ZSIsImZpcnN0RWxlbWVudENoaWxkIiwiaW5pdGlhbERhdGUiLCJyYW5nZVN0YXJ0RGF0ZSIsInJhbmdlRW5kRGF0ZSIsImNvbnRhaW5zRGlzYWJsZWQiLCJtaW5SYW5nZSIsIm1heFJhbmdlIiwickNvbnRhaW5lciIsImRheUVsZW0iLCJ0aW1lc3RhbXAiLCJvdXRPZlJhbmdlIiwib25SZXNpemUiLCJwb3NpdGlvbkNhbGVuZGFyIiwibWluTWF4RGF0ZVNldHRlciIsImludmVyc2VEYXRlT2JqIiwiZ2V0SW5wdXRFbGVtIiwicXVlcnlTZWxlY3RvciIsInNldHVwTG9jYWxlIiwibDEwbnMiLCJkYXRhc2V0IiwiY3VzdG9tUG9zaXRpb25FbGVtZW50IiwiX3Bvc2l0aW9uRWxlbWVudCIsImNhbGVuZGFySGVpZ2h0IiwiYWNjIiwiY2hpbGQiLCJvZmZzZXRIZWlnaHQiLCJjYWxlbmRhcldpZHRoIiwiY29uZmlnUG9zIiwiY29uZmlnUG9zVmVydGljYWwiLCJjb25maWdQb3NIb3Jpem9udGFsIiwiaW5wdXRCb3VuZHMiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJkaXN0YW5jZUZyb21Cb3R0b20iLCJpbm5lckhlaWdodCIsInNob3dPblRvcCIsInBhZ2VZT2Zmc2V0IiwicGFnZVhPZmZzZXQiLCJpc0NlbnRlciIsImlzUmlnaHQiLCJyaWdodE1vc3QiLCJjZW50ZXJNb3N0IiwiZG9jIiwiZWRpdGFibGVTaGVldCIsInN0eWxlU2hlZXRzIiwic2hlZXQiLCJjc3NSdWxlcyIsImdldERvY3VtZW50U3R5bGVTaGVldCIsImJvZHlXaWR0aCIsImNlbnRlckxlZnQiLCJjZW50ZXJJbmRleCIsImNlbnRlclN0eWxlIiwiaW5zZXJ0UnVsZSIsImNlbnRlckJlZm9yZSIsIm1zTWF4VG91Y2hQb2ludHMiLCJzZWxlY3RlZERhdGUiLCJzaG91bGRDaGFuZ2VNb250aCIsInNlbGVjdGVkSW5kZXgiLCJzaW5nbGUiLCJyYW5nZSIsImxvYWRlZFBsdWdpbnMiLCJfYmluZCIsIl9zZXRIb3Vyc0Zyb21EYXRlIiwiX3Bvc2l0aW9uQ2FsZW5kYXIiLCJ0cmlnZ2VyQ2hhbmdlRXZlbnQiLCJ0b0luaXRpYWwiLCJtb2JpbGVJbnB1dCIsIl9pbml0aWFsRGF0ZSIsIl9jcmVhdGVFbGVtZW50IiwiZGVzdHJveSIsImxhc3RDaGlsZCIsImluc2VydEJlZm9yZSIsIl90eXBlIiwiY2xpY2siLCJ3YXNPcGVuIiwib3B0aW9uIiwiQ0FMTEJBQ0tTIiwic2V0U2VsZWN0ZWREYXRlIiwidG9nZ2xlIiwidXBkYXRlUG9zaXRpb25FbGVtZW50IiwiaW5wdXREYXRlIiwiZGF0ZXMiLCJwYXJzZURhdGVSdWxlcyIsInJ1bGUiLCJob29rcyIsImluaXRFdmVudCIsInNwZWNpZmljRm9ybWF0IiwiZE9iaiIsIm1vYmlsZUZvcm1hdFN0ciIsIm9uTW9udGhOYXZDbGljayIsImlzUHJldk1vbnRoIiwiaXNOZXh0TW9udGgiLCJib29sT3B0cyIsInVzZXJDb25maWciLCJfZW5hYmxlIiwidGltZU1vZGUiLCJkZWZhdWx0RGF0ZUZvcm1hdCIsImRlZmF1bHRBbHRGb3JtYXQiLCJfbWluRGF0ZSIsIl9tYXhEYXRlIiwibWluTWF4VGltZVNldHRlciIsIl9taW5UaW1lIiwiX21heFRpbWUiLCJob29rIiwicGx1Z2luQ29uZiIsInBhcnNlQ29uZmlnIiwibm9kZU5hbWUiLCJwbGFjZWhvbGRlciIsInJlcXVpcmVkIiwibmV4dFNpYmxpbmciLCJwcmVsb2FkZWREYXRlIiwic2V0dXBEYXRlcyIsInlyIiwiZnJhZ21lbnQiLCJfX2hpZGVQcmV2TW9udGhBcnJvdyIsIl9faGlkZU5leHRNb250aEFycm93IiwiaW5uZXJDb250YWluZXIiLCJidWlsZFdlZWtzIiwiaG91cklucHV0IiwibWludXRlSW5wdXQiLCJtaWxpdGFyeTJhbXBtIiwic2Vjb25kSW5wdXQiLCJ0aXRsZSIsImJ1aWxkVGltZSIsImN1c3RvbUFwcGVuZCIsImFwcGVuZFRvIiwiYnVpbGQiLCJldnQiLCJpbnB1dFR5cGUiLCJzZXR1cE1vYmlsZSIsImRlYm91bmNlZFJlc2l6ZSIsIm9udG91Y2hzdGFydCIsImNhcHR1cmUiLCJiaW5kRXZlbnRzIiwiaXNTYWZhcmkiLCJpbml0IiwiX2ZsYXRwaWNrciIsIm5vZGVMaXN0IiwiSFRNTEVsZW1lbnQiLCJpbnN0YW5jZXMiLCJIVE1MQ29sbGVjdGlvbiIsIk5vZGVMaXN0IiwiZW4iLCJsb2NhbGl6ZSIsInNldERlZmF1bHRzIiwialF1ZXJ5IiwiZnBfaW5jciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfZGVmaW5lUHJvcGVydHkiLCJvd25LZXlzIiwiZW51bWVyYWJsZU9ubHkiLCJzeW1ib2xzIiwic3ltIiwiX2dldFByb3RvdHlwZU9mIiwiX19wcm90b19fIiwiX3NldFByb3RvdHlwZU9mIiwiX2NyZWF0ZVN1cGVyIiwiRGVyaXZlZCIsIlN1cGVyIiwic2hhbSIsIlByb3h5IiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIk5ld1RhcmdldCIsIlJlZmVyZW5jZUVycm9yIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsImRlZmF1bHRWYWx1ZVR5cGUiLCJkYXRlRm9ybWF0cyIsImFycmF5T3JTdHJpbmciLCJldmVudHMiLCJtYXBwaW5nIiwic3RyZnRpbWVSZWdleCIsIlN0aW11bHVzRmxhdHBpY2tyIiwiX0NvbnRyb2xsZXIiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJfaW5oZXJpdHMiLCJDb25zdHJ1Y3RvciIsInByb3RvUHJvcHMiLCJfc3VwZXIiLCJfY2xhc3NDYWxsQ2hlY2siLCJfaW5pdGlhbGl6ZUV2ZW50cyIsIl9pbml0aWFsaXplT3B0aW9ucyIsIl9pbml0aWFsaXplRGF0ZUZvcm1hdHMiLCJmcCIsImZsYXRwaWNrckVsZW1lbnQiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiX29iamVjdFNwcmVhZDIiLCJfaW5pdGlhbGl6ZUVsZW1lbnRzIiwiaW5wdXRUYXJnZXQiLCJvcHRpb25UeXBlIiwib3B0aW9uS2ViYWIiLCJfaGFuZGxlRGF5c09mV2VlayIsImRpc2FibGVEYXlzT2ZXZWVrIiwiX3ZhbGlkYXRlRGF5c09mV2VlayIsImVuYWJsZURheXNPZldlZWsiLCJoYXNJbnN0YW5jZVRhcmdldCIsImluc3RhbmNlVGFyZ2V0Iiwic3R5bGVUYWdUcmFuc2Zvcm0iLCJzZXRBdHRyaWJ1dGVzIiwiaW5zZXJ0IiwiZG9tQVBJIiwiaW5zZXJ0U3R5bGVFbGVtZW50IiwibG9jYWxzIiwic3R5bGVzSW5ET00iLCJnZXRJbmRleEJ5SWRlbnRpZmllciIsIm1vZHVsZXNUb0RvbSIsImlkQ291bnRNYXAiLCJpbmRleEJ5SWRlbnRpZmllciIsImNzcyIsInNvdXJjZU1hcCIsInJlZmVyZW5jZXMiLCJ1cGRhdGVyIiwiYWRkRWxlbWVudFN0eWxlIiwiYnlJbmRleCIsImFwaSIsInVwZGF0ZSIsIm5ld09iaiIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJuZXdMYXN0SWRlbnRpZmllcnMiLCJfaW5kZXgiLCJzdHlsZVRhcmdldCIsIkhUTUxJRnJhbWVFbGVtZW50IiwiY29udGVudERvY3VtZW50IiwiZ2V0VGFyZ2V0Iiwic3R5bGVFbGVtZW50Iiwibm9uY2UiLCJyZW1vdmVTdHlsZUVsZW1lbnQiLCJzdHlsZVNoZWV0IiwiY3NzVGV4dCIsImNyZWF0ZVRleHROb2RlIiwiX19pbXBvcnREZWZhdWx0IiwibW9kIiwiX19lc01vZHVsZSIsInN0aW11bHVzXzEiLCJmb3JtX2NvbnRyb2xsZXJfMSIsInRpbWVyX2NvbnRyb2xsZXJfMSIsImxpc3RfY29udHJvbGxlcl8xIiwiaXNzdWVfY29tcGxldGlvbl9jb250cm9sbGVyXzEiLCJmbGF0cGlja3JfY29udHJvbGxlcl8xIiwiU3RpbXVsdXMiLCJzdGltdWx1c19mbGF0cGlja3JfMSIsImRlZmF1bHRfMSIsIl9zZWxlY3RlZERhdGVzIiwiZGF0ZVN0ciIsImx1eG9uXzEiLCJjb25uZWN0ZWQiLCJhYnNvbHV0ZVRpbWUiLCJfZXZlbnQiLCJhYnNvbHV0SW5wdXRUYXJnZXQiLCJzdGFydERhdGUiLCJjb252ZXJ0VG9EYXRlVGltZSIsInN0YXJ0VGFyZ2V0IiwibmV3RW5kRGF0ZSIsImVuZFRhcmdldCIsIkV2ZW50IiwiaXNzdWVUYXJnZXRDb25uZWN0ZWQiLCJjaGFuZ2UiLCJpc3N1ZVRhcmdldERpc2Nvbm5lY3RlZCIsInRpbWVyX3N0YXJ0IiwidGltZXJfZW5kIiwiY29tbWVudHMiLCJkZXNjcmlwdGlvblRhcmdldCIsImlzc3VlX2lkcyIsImV4dHJhY3RJc3N1ZUlkcyIsImRpc3BhdGNoVXBkYXRlIiwiaXNzdWVUYXJnZXRzIiwiaGFzU3RvcEJ1dHRvblRhcmdldCIsIiQiLCJhamF4IiwidXJsIiwiUmVkbWluZVRyYWNreSIsInRyYWNrZXJVcGRhdGVQYXRoIiwidGltZXJfc2Vzc2lvbiIsImFzeW5jIiwiZGF0ZXRpbWVGb3JtYXRKYXZhc2NyaXB0IiwibGlzdGVuRm9ySW5wdXQiLCJjbGVhbnVwIiwib2JzZXJ2ZUF1dG9jb21wbGV0ZUZpZWxkIiwicmVxdWVzdCIsImlzc3VlQ29tcGxldGlvblBhdGgiLCJ0ZXJtIiwiZG9uZSIsImZhaWwiLCJhZGRJc3N1ZSIsImlzc3VlIiwibGlzdENvbnRyb2xsZXIiLCJsaXN0QW5jaG9yVGFyZ2V0IiwiYWRkSXRlbSIsImNsZWFySW5wdXQiLCJoaWRlIiwidGFibGVUYXJnZXQiLCJidWlsZEl0ZW0iLCJyZW1vdmVJdGVtIiwicm93IiwiYnVpbGRMYWJlbENvbHVtbiIsImJ1aWxkU3ViamVjdENvbHVtbiIsImJ1aWxkRGVsZXRpb25CdXR0b25Db2x1bW4iLCJib2xkIiwicHJvamVjdCIsImJ1aWxkQ29sdW1uIiwic3ViamVjdCIsInNwYW4iLCJpY29uIiwiY29sdW1uIiwidGltZURpZmZGaWVsZHMiLCJ0aW1lRGlmZkZvcm1hdCIsInRpbWVEaWZmZXJlbmNlIiwidXBkYXRlVGltZXIiLCJzdGFydFRpY2tlciIsInN0b3BUaWNrZXIiLCJUaW1lckludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwidGltZURpZmZUb1N0cmluZyIsInRpbWVEaWZmIiwiZGF0ZVRpbWVGcm9tVGFyZ2V0IiwiYWRqdXN0ZWREYXRlVGltZSIsInN0YXJ0RGF0ZVRpbWUiLCJsYWJlbFRhcmdldCIsImxvY2FsT2Zmc2V0IiwidGltZXpvbmVWYWx1ZSIsInRpbWV6b25lIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImdldHRlciIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwibmMiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file