valyrian.js 7.0.3 → 7.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,27 +1,15 @@
1
- export interface Props {
1
+ export interface VnodeProperties {
2
2
  key?: string | number;
3
3
  state?: any;
4
- oncreate?: {
5
- (vnode: VnodeInterface): never;
6
- };
7
- onupdate?: {
8
- (vnode: VnodeInterface, oldVnode: VnodeInterface): never;
9
- };
10
- onremove?: {
11
- (oldVnode: VnodeInterface): never;
12
- };
13
- shouldupdate?: {
14
- (vnode: VnodeInterface, oldVnode: VnodeInterface): undefined | boolean;
15
- };
16
4
  [key: string | number | symbol]: any;
17
5
  }
18
6
  export interface DomElement extends Element {
19
7
  [key: string]: any;
20
8
  }
21
9
  export interface VnodeInterface {
22
- new (tag: string | Component | POJOComponent, props: Props, children: Children): VnodeInterface;
10
+ new (tag: string | Component | POJOComponent, props: VnodeProperties, children: Children): VnodeInterface;
23
11
  tag: string | Component | POJOComponent;
24
- props: Props;
12
+ props: VnodeProperties;
25
13
  children: Children;
26
14
  isSVG?: boolean;
27
15
  dom?: DomElement;
@@ -32,18 +20,18 @@ export interface VnodeWithDom extends VnodeInterface {
32
20
  dom: DomElement;
33
21
  }
34
22
  export interface Component {
35
- (props?: Props | null, ...children: any[]): VnodeInterface | Children | any;
23
+ (props?: VnodeProperties | null, ...children: any[]): VnodeInterface | Children | any;
36
24
  [key: string]: any;
37
25
  }
38
26
  export interface POJOComponent {
39
27
  view: Component;
40
- props?: Props | null;
28
+ props?: VnodeProperties | null;
41
29
  children?: any[];
42
30
  [key: string]: any;
43
31
  }
44
32
  export interface VnodeComponentInterface extends VnodeInterface {
45
33
  tag: Component | POJOComponent;
46
- props: Props;
34
+ props: VnodeProperties;
47
35
  children: Children;
48
36
  }
49
37
  export interface Children extends Array<VnodeInterface | VnodeComponentInterface | any> {
@@ -63,7 +51,7 @@ export interface Current {
63
51
  oldVnode?: VnodeWithDom | null;
64
52
  }
65
53
  export interface V {
66
- (tagOrComponent: string | Component | POJOComponent, props: Props | null, ...children: Children): VnodeInterface | VnodeComponentInterface;
54
+ (tagOrComponent: string | Component | POJOComponent, props: VnodeProperties | null, ...children: Children): VnodeInterface | VnodeComponentInterface;
67
55
  fragment(_: any, ...children: Children): Children;
68
56
  }
69
57
  export declare let isNodeJs: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../lib/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -118,7 +118,9 @@ var onMountSet = /* @__PURE__ */ new Set();
118
118
  var onUpdateSet = /* @__PURE__ */ new Set();
119
119
  var onUnmountSet = /* @__PURE__ */ new Set();
120
120
  function onMount(callback) {
121
- onMountSet.add(callback);
121
+ if (!isMounted) {
122
+ onMountSet.add(callback);
123
+ }
122
124
  }
123
125
  function onUpdate(callback) {
124
126
  onUpdateSet.add(callback);
@@ -127,7 +129,9 @@ function onCleanup(callback) {
127
129
  onCleanupSet.add(callback);
128
130
  }
129
131
  function onUnmount(callback) {
130
- onUnmountSet.add(callback);
132
+ if (!isMounted) {
133
+ onUnmountSet.add(callback);
134
+ }
131
135
  }
132
136
  function callSet(set) {
133
137
  for (let callback of set) {
@@ -278,12 +282,18 @@ var directives = {
278
282
  },
279
283
  "v-create": (callback, vnode, oldVnode) => {
280
284
  if (!oldVnode) {
281
- callback(vnode);
285
+ let cleanup = callback(vnode);
286
+ if (typeof cleanup === "function") {
287
+ onCleanup(cleanup);
288
+ }
282
289
  }
283
290
  },
284
291
  "v-update": (callback, vnode, oldVnode) => {
285
292
  if (oldVnode) {
286
- callback(vnode, oldVnode);
293
+ let cleanup = callback(vnode, oldVnode);
294
+ if (typeof cleanup === "function") {
295
+ onCleanup(cleanup);
296
+ }
287
297
  }
288
298
  },
289
299
  "v-cleanup": (callback, vnode, oldVnode) => {
@@ -519,4 +529,4 @@ function mount(dom, component) {
519
529
  var v = (tagOrComponent, props = {}, ...children) => {
520
530
  return new Vnode(tagOrComponent, props || {}, children);
521
531
  };
522
- v.fragment = (props, ...children) => children;
532
+ v.fragment = (_, ...children) => children;
package/dist/index.min.js CHANGED
@@ -1 +1 @@
1
- (()=>{var e="#text",t=Boolean("undefined"!=typeof process&&process.versions&&process.versions.node);function o(e,t=!1){return t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}var n=function(e,t,o){this.tag=e,this.props=t,this.children=o};function l(e){return e&&("function"==typeof e||"object"==typeof e&&"view"in e)}var i=e=>e instanceof n,d=e=>i(e)&&l(e.tag);function r(t){let o=[];for(let l=0,i=t.childNodes.length;l<i;l++){let i=t.childNodes[l];if(3!==i.nodeType)1===i.nodeType&&o.push(r(i));else{let t=new n(e,{},[]);t.dom=i,o.push(t)}}let l={};for(let e=0,o=t.attributes.length;e<o;e++){let o=t.attributes[e];l[o.nodeName]=o.nodeValue}let i=new n(t.tagName.toLowerCase(),l,o);return i.dom=t,i}function p(e){let t=o("div");return t.innerHTML=e.trim(),[].map.call(t.childNodes,e=>r(e))}var s=null,a=null,c=!1,u={vnode:null,oldVnode:null,component:null},m={key:!0,state:!0,"v-keep":!0,"v-if":!0,"v-unless":!0,"v-for":!0,"v-show":!0,"v-class":!0,"v-html":!0,"v-model":!0,"v-create":!0,"v-update":!0,"v-cleanup":!0},f=new Set,v=new Set,h=new Set,g=new Set;function y(e){f.add(e)}function w(e){for(let t of e)t();e.clear()}var k={};function C(e){let t=e.target,o=`v-on${e.type}`;for(;t;){if(t[o])return t[o](e,t),void(e.defaultPrevented||A());t=t.parentNode}}var N=e=>(t,o,n)=>{if(e?t:!t){let e=document.createTextNode("");return n&&n.dom&&n.dom.parentNode&&n.dom.parentNode.replaceChild(e,n.dom),o.tag="#text",o.children=[],o.props={},o.dom=e,!1}},V={"v-if":N(!1),"v-unless":N(!0),"v-for":(e,t)=>{let o=[],n=t.children[0];for(let t=0,l=e.length;t<l;t++)o.push(n(e[t],t));t.children=o},"v-show":(e,t)=>{t.dom.style.display=e?"":"none"},"v-class":(e,t)=>{for(let o in e)t.dom.classList.toggle(o,e[o])},"v-html":(e,t)=>{t.children=[p(e)]},"v-model":([e,t,o],n,l)=>{let i,d=o=>e[t]=o.target.value;if("input"===n.tag)switch(o=o||"oninput",n.props.type){case"checkbox":Array.isArray(e[t])?(d=o=>{let n=o.target.value,l=e[t].indexOf(n);-1===l?e[t].push(n):e[t].splice(l,1)},i=-1!==e[t].indexOf(n.dom.value)):"value"in n.props?(d=()=>{e[t]===n.props.value?e[t]=null:e[t]=n.props.value},i=e[t]===n.props.value):(d=()=>e[t]=!e[t],i=e[t]),x("checked",i,n);break;case"radio":x("checked",e[t]===n.dom.value,n);break;default:x("value",e[t],n)}else"select"===n.tag?(o=o||"onclick",n.props.multiple?(d=o=>{let n=o.target.value;if(o.ctrlKey){let o=e[t].indexOf(n);-1===o?e[t].push(n):e[t].splice(o,1)}else e[t].splice(0,e[t].length),e[t].push(n)},n.children.forEach(o=>{if("option"===o.tag){let n="value"in o.props?o.props.value:o.children.join("").trim();o.props.selected=-1!==e[t].indexOf(n)}})):n.children.forEach(o=>{if("option"===o.tag){let n="value"in o.props?o.props.value:o.children.join("").trim();o.props.selected=n===e[t]}})):"textarea"===n.tag&&(o=o||"oninput",n.children=[e[t]]);let r=n.props[o];x(o,e=>{d(e),r&&r(e)},n,l)},"v-create":(e,t,o)=>{o||e(t)},"v-update":(e,t,o)=>{o&&e(t,o)},"v-cleanup":(e,t,o)=>{y(()=>e(t,o))}};function x(e,t,o,n){if("function"==typeof t)return e in k==!1&&(a.dom.addEventListener(e.slice(2),C),k[e]=!0),void(o.dom[`v-${e}`]=t);e in o.dom&&!1===o.isSVG?o.dom[e]!=t&&(o.dom[e]=t):n&&t===n.props[e]||(!1===t?o.dom.removeAttribute(e):o.dom.setAttribute(e,t))}function S(e,t){if(t)for(let o in t.props)o in e.props==!1&&o in k==!1&&o in m==!1&&(o in e.dom&&!1===e.isSVG?e.dom[o]=null:e.dom.removeAttribute(o));for(let o in e.props)if(o in m){if(o in V&&!1===V[o](e.props[o],e,t))break}else x(o,e.props[o],e,t)}function b(t,l){let i=t.children,d=l?.children||[],r=d.length;if(r&&i[0]instanceof n&&"key"in i[0].props&&"key"in d[0].props){let e=i.length,n={};for(let e=0;e<r;e++)n[d[e].props.key]=e;let l={};for(let t=0;t<e;t++)l[i[t].props.key]=t;for(let l=0;l<e;l++){let e=i[l],r=d[n[e.props.key]],p=!0;r?(e.dom=r.dom,"v-keep"in e.props&&e.props["v-keep"]===r.props["v-keep"]?(e.children=r.children,p=!1):S(e,r)):(e.dom=o(e.tag,e.isSVG),S(e)),t.dom.childNodes[l]?t.dom.childNodes[l]!==e.dom&&t.dom.replaceChild(e.dom,t.dom.childNodes[l]):t.dom.appendChild(e.dom),p&&b(e,r)}for(let t=e;t<r;t++)l[d[t].props.key]||d[t].dom.parentNode&&d[t].dom.parentNode.removeChild(d[t].dom)}else if(0!==i.length){u.vnode=t,u.oldVnode=l;for(let l=0;l<i.length;l++){let p=i[l];if(p instanceof n&&p.tag!==e){if("string"!=typeof p.tag){u.component=p.tag,i.splice(l--,1,("view"in p.tag?p.tag.view.bind(p.tag):p.tag.bind(p.tag))(p.props,...p.children));continue}if(p.isSVG=t.isSVG||"svg"===p.tag,l<r){let e=d[l];if(p.tag===e.tag){if(p.dom=e.dom,"v-keep"in p.props&&p.props["v-keep"]===e.props["v-keep"]){p.children=e.children;continue}S(p,e),b(p,e);continue}p.dom=o(p.tag,p.isSVG),S(p),t.dom.replaceChild(p.dom,e.dom),b(p);continue}p.dom=o(p.tag,p.isSVG),S(p),t.dom.appendChild(p.dom),b(p)}else if(Array.isArray(p))i.splice(l--,1,...p);else if(null!=p)if(i[l]=new n(e,{},[]),p instanceof n&&(i[l].dom=p.dom,p=p.dom.textContent),l<r){let o=d[l];if(o.tag===e){i[l].dom=o.dom,p!=o.dom.textContent&&(o.dom.textContent=p);continue}i[l].dom=document.createTextNode(p),t.dom.replaceChild(i[l].dom,o.dom)}else i[l].dom=document.createTextNode(p),t.dom.appendChild(i[l].dom);else i.splice(l--,1)}for(let e=i.length;e<r;e++)t.dom.removeChild(d[e].dom)}else t.dom.textContent=""}function A(){if(a){w(f);let e=a;if((a=new n(e.tag,e.props,[s])).dom=e.dom,a.isSVG=e.isSVG,b(a,e),w(c?h:v),c=!0,u.vnode=null,u.oldVnode=null,u.component=null,t)return a.dom.innerHTML}}function G(){if(a){s=new n(()=>null,{},[]);let e=A();w(g);for(let e in k)a.dom.removeEventListener(e.slice(2).toLowerCase(),C),Reflect.deleteProperty(k,e);return s=null,a=null,c=!1,u.vnode=null,u.oldVnode=null,u.component=null,e}}var E=(e,t={},...o)=>new n(e,t||{},o);E.fragment=(e,...t)=>t;var L={Vnode:n,createDomElement:o,current:u,directive:function(e,t){let o=`v-${e}`;V[o]=t,m[o]=!0},directives:V,isComponent:l,isNodeJs:t,isVnode:i,isVnodeComponent:d,mount:function(e,i){let p="string"==typeof e?t?o(e,"svg"===e):document.querySelectorAll(e)[0]:e,c=d(i)?i:l(i)?new n(i,{},[]):new n(()=>i,{},[]);return s&&s.tag!==c.tag&&G(),s=c,a=r(p),A()},onCleanup:y,onMount:function(e){v.add(e)},onUnmount:function(e){g.add(e)},onUpdate:function(e){h.add(e)},patch:b,reservedProps:m,setAttribute:function(e,t,o,n){e in m||(o.props[e]=t,x(e,t,o,n))},trust:p,unmount:G,update:A,updateAttributes:S,v:E};"undefined"!=typeof module?module.exports=L:self.Valyrian=L})();//# sourceMappingURL=index.min.js.map
1
+ (()=>{var e="#text",t=Boolean("undefined"!=typeof process&&process.versions&&process.versions.node);function o(e,t=!1){return t?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}var n=function(e,t,o){this.tag=e,this.props=t,this.children=o};function l(e){return e&&("function"==typeof e||"object"==typeof e&&"view"in e)}var i=e=>e instanceof n,d=e=>i(e)&&l(e.tag);function r(t){let o=[];for(let l=0,i=t.childNodes.length;l<i;l++){let i=t.childNodes[l];if(3!==i.nodeType)1===i.nodeType&&o.push(r(i));else{let t=new n(e,{},[]);t.dom=i,o.push(t)}}let l={};for(let e=0,o=t.attributes.length;e<o;e++){let o=t.attributes[e];l[o.nodeName]=o.nodeValue}let i=new n(t.tagName.toLowerCase(),l,o);return i.dom=t,i}function p(e){let t=o("div");return t.innerHTML=e.trim(),[].map.call(t.childNodes,e=>r(e))}var s=null,a=null,c=!1,u={vnode:null,oldVnode:null,component:null},m={key:!0,state:!0,"v-keep":!0,"v-if":!0,"v-unless":!0,"v-for":!0,"v-show":!0,"v-class":!0,"v-html":!0,"v-model":!0,"v-create":!0,"v-update":!0,"v-cleanup":!0},f=new Set,v=new Set,h=new Set,g=new Set;function y(e){f.add(e)}function w(e){for(let t of e)t();e.clear()}var k={};function C(e){let t=e.target,o=`v-on${e.type}`;for(;t;){if(t[o])return t[o](e,t),void(e.defaultPrevented||A());t=t.parentNode}}var N=e=>(t,o,n)=>{if(e?t:!t){let e=document.createTextNode("");return n&&n.dom&&n.dom.parentNode&&n.dom.parentNode.replaceChild(e,n.dom),o.tag="#text",o.children=[],o.props={},o.dom=e,!1}},V={"v-if":N(!1),"v-unless":N(!0),"v-for":(e,t)=>{let o=[],n=t.children[0];for(let t=0,l=e.length;t<l;t++)o.push(n(e[t],t));t.children=o},"v-show":(e,t)=>{t.dom.style.display=e?"":"none"},"v-class":(e,t)=>{for(let o in e)t.dom.classList.toggle(o,e[o])},"v-html":(e,t)=>{t.children=[p(e)]},"v-model":([e,t,o],n,l)=>{let i,d=o=>e[t]=o.target.value;if("input"===n.tag)switch(o=o||"oninput",n.props.type){case"checkbox":Array.isArray(e[t])?(d=o=>{let n=o.target.value,l=e[t].indexOf(n);-1===l?e[t].push(n):e[t].splice(l,1)},i=-1!==e[t].indexOf(n.dom.value)):"value"in n.props?(d=()=>{e[t]===n.props.value?e[t]=null:e[t]=n.props.value},i=e[t]===n.props.value):(d=()=>e[t]=!e[t],i=e[t]),x("checked",i,n);break;case"radio":x("checked",e[t]===n.dom.value,n);break;default:x("value",e[t],n)}else"select"===n.tag?(o=o||"onclick",n.props.multiple?(d=o=>{let n=o.target.value;if(o.ctrlKey){let o=e[t].indexOf(n);-1===o?e[t].push(n):e[t].splice(o,1)}else e[t].splice(0,e[t].length),e[t].push(n)},n.children.forEach(o=>{if("option"===o.tag){let n="value"in o.props?o.props.value:o.children.join("").trim();o.props.selected=-1!==e[t].indexOf(n)}})):n.children.forEach(o=>{if("option"===o.tag){let n="value"in o.props?o.props.value:o.children.join("").trim();o.props.selected=n===e[t]}})):"textarea"===n.tag&&(o=o||"oninput",n.children=[e[t]]);let r=n.props[o];x(o,e=>{d(e),r&&r(e)},n,l)},"v-create":(e,t,o)=>{if(!o){let o=e(t);"function"==typeof o&&y(o)}},"v-update":(e,t,o)=>{if(o){let n=e(t,o);"function"==typeof n&&y(n)}},"v-cleanup":(e,t,o)=>{y(()=>e(t,o))}};function x(e,t,o,n){if("function"==typeof t)return e in k==!1&&(a.dom.addEventListener(e.slice(2),C),k[e]=!0),void(o.dom[`v-${e}`]=t);e in o.dom&&!1===o.isSVG?o.dom[e]!=t&&(o.dom[e]=t):n&&t===n.props[e]||(!1===t?o.dom.removeAttribute(e):o.dom.setAttribute(e,t))}function S(e,t){if(t)for(let o in t.props)o in e.props==!1&&o in k==!1&&o in m==!1&&(o in e.dom&&!1===e.isSVG?e.dom[o]=null:e.dom.removeAttribute(o));for(let o in e.props)if(o in m){if(o in V&&!1===V[o](e.props[o],e,t))break}else x(o,e.props[o],e,t)}function b(t,l){let i=t.children,d=l?.children||[],r=d.length;if(r&&i[0]instanceof n&&"key"in i[0].props&&"key"in d[0].props){let e=i.length,n={};for(let e=0;e<r;e++)n[d[e].props.key]=e;let l={};for(let t=0;t<e;t++)l[i[t].props.key]=t;for(let l=0;l<e;l++){let e=i[l],r=d[n[e.props.key]],p=!0;r?(e.dom=r.dom,"v-keep"in e.props&&e.props["v-keep"]===r.props["v-keep"]?(e.children=r.children,p=!1):S(e,r)):(e.dom=o(e.tag,e.isSVG),S(e)),t.dom.childNodes[l]?t.dom.childNodes[l]!==e.dom&&t.dom.replaceChild(e.dom,t.dom.childNodes[l]):t.dom.appendChild(e.dom),p&&b(e,r)}for(let t=e;t<r;t++)l[d[t].props.key]||d[t].dom.parentNode&&d[t].dom.parentNode.removeChild(d[t].dom)}else if(0!==i.length){u.vnode=t,u.oldVnode=l;for(let l=0;l<i.length;l++){let p=i[l];if(p instanceof n&&p.tag!==e){if("string"!=typeof p.tag){u.component=p.tag,i.splice(l--,1,("view"in p.tag?p.tag.view.bind(p.tag):p.tag.bind(p.tag))(p.props,...p.children));continue}if(p.isSVG=t.isSVG||"svg"===p.tag,l<r){let e=d[l];if(p.tag===e.tag){if(p.dom=e.dom,"v-keep"in p.props&&p.props["v-keep"]===e.props["v-keep"]){p.children=e.children;continue}S(p,e),b(p,e);continue}p.dom=o(p.tag,p.isSVG),S(p),t.dom.replaceChild(p.dom,e.dom),b(p);continue}p.dom=o(p.tag,p.isSVG),S(p),t.dom.appendChild(p.dom),b(p)}else if(Array.isArray(p))i.splice(l--,1,...p);else if(null!=p)if(i[l]=new n(e,{},[]),p instanceof n&&(i[l].dom=p.dom,p=p.dom.textContent),l<r){let o=d[l];if(o.tag===e){i[l].dom=o.dom,p!=o.dom.textContent&&(o.dom.textContent=p);continue}i[l].dom=document.createTextNode(p),t.dom.replaceChild(i[l].dom,o.dom)}else i[l].dom=document.createTextNode(p),t.dom.appendChild(i[l].dom);else i.splice(l--,1)}for(let e=i.length;e<r;e++)t.dom.removeChild(d[e].dom)}else t.dom.textContent=""}function A(){if(a){w(f);let e=a;if((a=new n(e.tag,e.props,[s])).dom=e.dom,a.isSVG=e.isSVG,b(a,e),w(c?h:v),c=!0,u.vnode=null,u.oldVnode=null,u.component=null,t)return a.dom.innerHTML}}function G(){if(a){s=new n(()=>null,{},[]);let e=A();w(g);for(let e in k)a.dom.removeEventListener(e.slice(2).toLowerCase(),C),Reflect.deleteProperty(k,e);return s=null,a=null,c=!1,u.vnode=null,u.oldVnode=null,u.component=null,e}}var E=(e,t={},...o)=>new n(e,t||{},o);E.fragment=(e,...t)=>t;var L={Vnode:n,createDomElement:o,current:u,directive:function(e,t){let o=`v-${e}`;V[o]=t,m[o]=!0},directives:V,isComponent:l,isNodeJs:t,isVnode:i,isVnodeComponent:d,mount:function(e,i){let p="string"==typeof e?t?o(e,"svg"===e):document.querySelectorAll(e)[0]:e,c=d(i)?i:l(i)?new n(i,{},[]):new n(()=>i,{},[]);return s&&s.tag!==c.tag&&G(),s=c,a=r(p),A()},onCleanup:y,onMount:function(e){c||v.add(e)},onUnmount:function(e){c||g.add(e)},onUpdate:function(e){h.add(e)},patch:b,reservedProps:m,setAttribute:function(e,t,o,n){e in m||(o.props[e]=t,x(e,t,o,n))},trust:p,unmount:G,update:A,updateAttributes:S,v:E};"undefined"!=typeof module?module.exports=L:self.Valyrian=L})();//# sourceMappingURL=index.min.js.map
@@ -1 +1 @@
1
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0ZXh0VGFnIiwiaXNOb2RlSnMiLCJCb29sZWFuIiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsImNyZWF0ZURvbUVsZW1lbnQiLCJ0YWciLCJpc1NWRyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRlRWxlbWVudCIsIlZub2RlIiwicHJvcHMiLCJjaGlsZHJlbiIsInRoaXMiLCJpc0NvbXBvbmVudCIsImNvbXBvbmVudCIsImlzVm5vZGUiLCJvYmplY3QiLCJpc1Zub2RlQ29tcG9uZW50IiwiZG9tVG9Wbm9kZSIsImRvbSIsImkiLCJsIiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkRG9tIiwibm9kZVR5cGUiLCJwdXNoIiwidm5vZGUiLCJhdHRyaWJ1dGVzIiwiYXR0ciIsIm5vZGVOYW1lIiwibm9kZVZhbHVlIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwidHJ1c3QiLCJodG1sU3RyaW5nIiwiZGl2IiwiaW5uZXJIVE1MIiwidHJpbSIsIm1hcCIsImNhbGwiLCJpdGVtIiwibWFpbkNvbXBvbmVudCIsIm1haW5Wbm9kZSIsImlzTW91bnRlZCIsImN1cnJlbnQiLCJvbGRWbm9kZSIsInJlc2VydmVkUHJvcHMiLCJrZXkiLCJzdGF0ZSIsIm9uQ2xlYW51cFNldCIsIlNldCIsIm9uTW91bnRTZXQiLCJvblVwZGF0ZVNldCIsIm9uVW5tb3VudFNldCIsIm9uQ2xlYW51cCIsImNhbGxiYWNrIiwiYWRkIiwiY2FsbFNldCIsInNldCIsImNsZWFyIiwiZXZlbnRMaXN0ZW5lck5hbWVzIiwiZXZlbnRMaXN0ZW5lciIsImUiLCJ0YXJnZXQiLCJuYW1lIiwidHlwZSIsImRlZmF1bHRQcmV2ZW50ZWQiLCJ1cGRhdGUiLCJwYXJlbnROb2RlIiwiaGlkZURpcmVjdGl2ZSIsInRlc3QiLCJib29sIiwib2xkbm9kZSIsIm5ld2RvbSIsImNyZWF0ZVRleHROb2RlIiwicmVwbGFjZUNoaWxkIiwiZGlyZWN0aXZlcyIsIm5ld0NoaWxkcmVuIiwic3R5bGUiLCJkaXNwbGF5IiwiY2xhc3NlcyIsImNsYXNzTGlzdCIsInRvZ2dsZSIsImh0bWwiLCJtb2RlbCIsInByb3BlcnR5IiwiZXZlbnQiLCJ2YWx1ZSIsImhhbmRsZXIiLCJBcnJheSIsImlzQXJyYXkiLCJ2YWwiLCJpZHgiLCJpbmRleE9mIiwic3BsaWNlIiwic2hhcmVkU2V0QXR0cmlidXRlIiwibXVsdGlwbGUiLCJjdHJsS2V5IiwiZm9yRWFjaCIsImNoaWxkIiwiam9pbiIsInNlbGVjdGVkIiwicHJldkhhbmRsZXIiLCJuZXdWbm9kZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJzbGljZSIsInJlbW92ZUF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsInVwZGF0ZUF0dHJpYnV0ZXMiLCJwYXRjaCIsIm5ld1RyZWUiLCJvbGRUcmVlIiwib2xkVHJlZUxlbmd0aCIsIm5ld1RyZWVMZW5ndGgiLCJvbGRLZXllZExpc3QiLCJuZXdLZXllZExpc3QiLCJuZXdDaGlsZCIsIm9sZENoaWxkIiwic2hvdWxkUGF0Y2giLCJhcHBlbmRDaGlsZCIsInJlbW92ZUNoaWxkIiwidmlldyIsImJpbmQiLCJ0ZXh0Q29udGVudCIsIm9sZE1haW5Wbm9kZSIsInVubW91bnQiLCJyZXN1bHQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiUmVmbGVjdCIsImRlbGV0ZVByb3BlcnR5IiwidiIsInRhZ09yQ29tcG9uZW50IiwiZnJhZ21lbnQiLCJkaXJlY3RpdmUiLCJkaXJlY3RpdmVOYW1lIiwiY29udGFpbmVyIiwicXVlcnlTZWxlY3RvckFsbCIsInZub2RlQ29tcG9uZW50Il0sInNvdXJjZXMiOlsiLi4vbGliL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGluZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgc29uYXJqcy9jb2duaXRpdmUtY29tcGxleGl0eSAqL1xuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFByb3BzIHtcbiAga2V5Pzogc3RyaW5nIHwgbnVtYmVyO1xuICBzdGF0ZT86IGFueTtcbiAgb25jcmVhdGU/OiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICh2bm9kZTogVm5vZGVJbnRlcmZhY2UpOiBuZXZlcjtcbiAgfTtcbiAgb251cGRhdGU/OiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICh2bm9kZTogVm5vZGVJbnRlcmZhY2UsIG9sZFZub2RlOiBWbm9kZUludGVyZmFjZSk6IG5ldmVyO1xuICB9O1xuICBvbnJlbW92ZT86IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgKG9sZFZub2RlOiBWbm9kZUludGVyZmFjZSk6IG5ldmVyO1xuICB9O1xuICBzaG91bGR1cGRhdGU/OiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICh2bm9kZTogVm5vZGVJbnRlcmZhY2UsIG9sZFZub2RlOiBWbm9kZUludGVyZmFjZSk6IHVuZGVmaW5lZCB8IGJvb2xlYW47XG4gIH07XG4gIFtrZXk6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgRG9tRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5leHBvcnQgaW50ZXJmYWNlIFZub2RlSW50ZXJmYWNlIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby11c2UtYmVmb3JlLWRlZmluZVxuICBuZXcgKHRhZzogc3RyaW5nIHwgQ29tcG9uZW50IHwgUE9KT0NvbXBvbmVudCwgcHJvcHM6IFByb3BzLCBjaGlsZHJlbjogQ2hpbGRyZW4pOiBWbm9kZUludGVyZmFjZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby11c2UtYmVmb3JlLWRlZmluZVxuICB0YWc6IHN0cmluZyB8IENvbXBvbmVudCB8IFBPSk9Db21wb25lbnQ7XG4gIHByb3BzOiBQcm9wcztcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby11c2UtYmVmb3JlLWRlZmluZVxuICBjaGlsZHJlbjogQ2hpbGRyZW47XG4gIGlzU1ZHPzogYm9vbGVhbjtcbiAgZG9tPzogRG9tRWxlbWVudDtcbiAgcHJvY2Vzc2VkPzogYm9vbGVhbjtcbiAgW2tleTogc3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sXTogYW55O1xufVxuZXhwb3J0IGludGVyZmFjZSBWbm9kZVdpdGhEb20gZXh0ZW5kcyBWbm9kZUludGVyZmFjZSB7XG4gIGRvbTogRG9tRWxlbWVudDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ29tcG9uZW50IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby11c2UtYmVmb3JlLWRlZmluZVxuICAocHJvcHM/OiBQcm9wcyB8IG51bGwsIC4uLmNoaWxkcmVuOiBhbnlbXSk6IFZub2RlSW50ZXJmYWNlIHwgQ2hpbGRyZW4gfCBhbnk7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUE9KT0NvbXBvbmVudCB7XG4gIHZpZXc6IENvbXBvbmVudDtcbiAgcHJvcHM/OiBQcm9wcyB8IG51bGw7XG4gIGNoaWxkcmVuPzogYW55W107XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgVm5vZGVDb21wb25lbnRJbnRlcmZhY2UgZXh0ZW5kcyBWbm9kZUludGVyZmFjZSB7XG4gIHRhZzogQ29tcG9uZW50IHwgUE9KT0NvbXBvbmVudDtcbiAgcHJvcHM6IFByb3BzO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gIGNoaWxkcmVuOiBDaGlsZHJlbjtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ2hpbGRyZW4gZXh0ZW5kcyBBcnJheTxWbm9kZUludGVyZmFjZSB8IFZub2RlQ29tcG9uZW50SW50ZXJmYWNlIHwgYW55PiB7fVxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RpdmUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICh2YWx1ZTogYW55LCB2bm9kZTogVm5vZGVXaXRoRG9tLCBvbGRWbm9kZT86IFZub2RlV2l0aERvbSk6IHZvaWQgfCBib29sZWFuO1xufVxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RpdmVzIHtcbiAgW2tleTogc3RyaW5nXTogRGlyZWN0aXZlO1xufVxuZXhwb3J0IGludGVyZmFjZSBSZXNlcnZlZFByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogdHJ1ZTtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgQ3VycmVudCB7XG4gIGNvbXBvbmVudDogQ29tcG9uZW50IHwgUE9KT0NvbXBvbmVudCB8IG51bGw7XG4gIHZub2RlOiBWbm9kZVdpdGhEb20gfCBudWxsO1xuICBvbGRWbm9kZT86IFZub2RlV2l0aERvbSB8IG51bGw7XG59XG5leHBvcnQgaW50ZXJmYWNlIFYge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnMsIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICh0YWdPckNvbXBvbmVudDogc3RyaW5nIHwgQ29tcG9uZW50IHwgUE9KT0NvbXBvbmVudCwgcHJvcHM6IFByb3BzIHwgbnVsbCwgLi4uY2hpbGRyZW46IENoaWxkcmVuKTpcbiAgICB8IFZub2RlSW50ZXJmYWNlXG4gICAgfCBWbm9kZUNvbXBvbmVudEludGVyZmFjZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby11c2UtYmVmb3JlLWRlZmluZVxuICBmcmFnbWVudChfOiBhbnksIC4uLmNoaWxkcmVuOiBDaGlsZHJlbik6IENoaWxkcmVuO1xufVxuXG5jb25zdCB0ZXh0VGFnID0gXCIjdGV4dFwiO1xuXG5leHBvcnQgbGV0IGlzTm9kZUpzID0gQm9vbGVhbih0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVEb21FbGVtZW50KHRhZzogc3RyaW5nLCBpc1NWRzogYm9vbGVhbiA9IGZhbHNlKTogRG9tRWxlbWVudCB7XG4gIHJldHVybiBpc1NWRyA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIHRhZykgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZyk7XG59XG5cbmV4cG9ydCBjb25zdCBWbm9kZSA9IGZ1bmN0aW9uIFZub2RlKHRoaXM6IFZub2RlSW50ZXJmYWNlLCB0YWc6IHN0cmluZywgcHJvcHM6IFByb3BzLCBjaGlsZHJlbjogQ2hpbGRyZW4pIHtcbiAgdGhpcy50YWcgPSB0YWc7XG4gIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgdGhpcy5jaGlsZHJlbiA9IGNoaWxkcmVuO1xufSBhcyB1bmtub3duIGFzIFZub2RlSW50ZXJmYWNlO1xuXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wb25lbnQoY29tcG9uZW50KTogY29tcG9uZW50IGlzIENvbXBvbmVudCB7XG4gIHJldHVybiBjb21wb25lbnQgJiYgKHR5cGVvZiBjb21wb25lbnQgPT09IFwiZnVuY3Rpb25cIiB8fCAodHlwZW9mIGNvbXBvbmVudCA9PT0gXCJvYmplY3RcIiAmJiBcInZpZXdcIiBpbiBjb21wb25lbnQpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGlzVm5vZGUgPSAob2JqZWN0PzogdW5rbm93biB8IFZub2RlSW50ZXJmYWNlKTogb2JqZWN0IGlzIFZub2RlSW50ZXJmYWNlID0+IHtcbiAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIFZub2RlO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzVm5vZGVDb21wb25lbnQgPSAob2JqZWN0PzogdW5rbm93biB8IFZub2RlQ29tcG9uZW50SW50ZXJmYWNlKTogb2JqZWN0IGlzIFZub2RlQ29tcG9uZW50SW50ZXJmYWNlID0+IHtcbiAgcmV0dXJuIGlzVm5vZGUob2JqZWN0KSAmJiBpc0NvbXBvbmVudChvYmplY3QudGFnKTtcbn07XG5cbi8vIFRyYW5zZm9ybXMgYSBET00gbm9kZSB0byBhIFZOb2RlXG5mdW5jdGlvbiBkb21Ub1Zub2RlKGRvbTogYW55KTogVm5vZGVXaXRoRG9tIHtcbiAgbGV0IGNoaWxkcmVuOiBWbm9kZVdpdGhEb21bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMCwgbCA9IGRvbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCBjaGlsZERvbSA9IGRvbS5jaGlsZE5vZGVzW2ldO1xuICAgIGlmIChjaGlsZERvbS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgbGV0IHZub2RlID0gbmV3IFZub2RlKHRleHRUYWcsIHt9LCBbXSk7XG4gICAgICB2bm9kZS5kb20gPSBjaGlsZERvbTtcbiAgICAgIGNoaWxkcmVuLnB1c2godm5vZGUgYXMgVm5vZGVXaXRoRG9tKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChjaGlsZERvbS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgY2hpbGRyZW4ucHVzaChkb21Ub1Zub2RlKGNoaWxkRG9tKSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IHByb3BzOiBQcm9wcyA9IHt9O1xuICBmb3IgKGxldCBpID0gMCwgbCA9IGRvbS5hdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCBhdHRyID0gZG9tLmF0dHJpYnV0ZXNbaV07XG4gICAgcHJvcHNbYXR0ci5ub2RlTmFtZV0gPSBhdHRyLm5vZGVWYWx1ZTtcbiAgfVxuXG4gIGxldCB2bm9kZSA9IG5ldyBWbm9kZShkb20udGFnTmFtZS50b0xvd2VyQ2FzZSgpLCBwcm9wcywgY2hpbGRyZW4pO1xuICB2bm9kZS5kb20gPSBkb207XG4gIHJldHVybiB2bm9kZSBhcyBWbm9kZVdpdGhEb207XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cnVzdChodG1sU3RyaW5nOiBzdHJpbmcpIHtcbiAgbGV0IGRpdiA9IGNyZWF0ZURvbUVsZW1lbnQoXCJkaXZcIik7XG4gIGRpdi5pbm5lckhUTUwgPSBodG1sU3RyaW5nLnRyaW0oKTtcblxuICByZXR1cm4gW10ubWFwLmNhbGwoZGl2LmNoaWxkTm9kZXMsIChpdGVtKSA9PiBkb21Ub1Zub2RlKGl0ZW0pKTtcbn1cblxuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cbi8qIE1haW4gQ29tcG9uZW50IGltcGxlbWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuXG5sZXQgbWFpbkNvbXBvbmVudDogVm5vZGVDb21wb25lbnRJbnRlcmZhY2UgfCBudWxsID0gbnVsbDtcbmxldCBtYWluVm5vZGU6IFZub2RlV2l0aERvbSB8IG51bGwgPSBudWxsO1xubGV0IGlzTW91bnRlZCA9IGZhbHNlO1xuXG5leHBvcnQgY29uc3QgY3VycmVudDogQ3VycmVudCA9IHtcbiAgdm5vZGU6IG51bGwsXG4gIG9sZFZub2RlOiBudWxsLFxuICBjb21wb25lbnQ6IG51bGxcbn07XG5cbi8qIFJlc2VydmVkIHByb3BzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5leHBvcnQgY29uc3QgcmVzZXJ2ZWRQcm9wczogUmVjb3JkPHN0cmluZywgdHJ1ZT4gPSB7XG4gIGtleTogdHJ1ZSxcbiAgc3RhdGU6IHRydWUsXG4gIFwidi1rZWVwXCI6IHRydWUsXG5cbiAgLy8gQnVpbHQgaW4gZGlyZWN0aXZlc1xuICBcInYtaWZcIjogdHJ1ZSxcbiAgXCJ2LXVubGVzc1wiOiB0cnVlLFxuICBcInYtZm9yXCI6IHRydWUsXG4gIFwidi1zaG93XCI6IHRydWUsXG4gIFwidi1jbGFzc1wiOiB0cnVlLFxuICBcInYtaHRtbFwiOiB0cnVlLFxuICBcInYtbW9kZWxcIjogdHJ1ZSxcbiAgXCJ2LWNyZWF0ZVwiOiB0cnVlLFxuICBcInYtdXBkYXRlXCI6IHRydWUsXG4gIFwidi1jbGVhbnVwXCI6IHRydWVcbn07XG5cbi8qIE1vdW50aW5nLCBVcGRhdGluZywgQ2xlYW51cCBhbmQgVW5tb3VudGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5jb25zdCBvbkNsZWFudXBTZXQ6IFNldDxGdW5jdGlvbj4gPSBuZXcgU2V0KCk7XG5jb25zdCBvbk1vdW50U2V0OiBTZXQ8RnVuY3Rpb24+ID0gbmV3IFNldCgpO1xuY29uc3Qgb25VcGRhdGVTZXQ6IFNldDxGdW5jdGlvbj4gPSBuZXcgU2V0KCk7XG5jb25zdCBvblVubW91bnRTZXQ6IFNldDxGdW5jdGlvbj4gPSBuZXcgU2V0KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBvbk1vdW50KGNhbGxiYWNrKSB7XG4gIG9uTW91bnRTZXQuYWRkKGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uVXBkYXRlKGNhbGxiYWNrKSB7XG4gIG9uVXBkYXRlU2V0LmFkZChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvbkNsZWFudXAoY2FsbGJhY2spIHtcbiAgb25DbGVhbnVwU2V0LmFkZChjYWxsYmFjayk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBvblVubW91bnQoY2FsbGJhY2spIHtcbiAgb25Vbm1vdW50U2V0LmFkZChjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGNhbGxTZXQoc2V0KSB7XG4gIGZvciAobGV0IGNhbGxiYWNrIG9mIHNldCkge1xuICAgIGNhbGxiYWNrKCk7XG4gIH1cblxuICBzZXQuY2xlYXIoKTtcbn1cblxuLyogRXZlbnQgbGlzdGVuZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbmNvbnN0IGV2ZW50TGlzdGVuZXJOYW1lczogUmVjb3JkPHN0cmluZywgdHJ1ZT4gPSB7fTtcbmZ1bmN0aW9uIGV2ZW50TGlzdGVuZXIoZTogRXZlbnQpIHtcbiAgbGV0IGRvbSA9IGUudGFyZ2V0IGFzIERvbUVsZW1lbnQ7XG4gIGxldCBuYW1lID0gYHYtb24ke2UudHlwZX1gO1xuICB3aGlsZSAoZG9tKSB7XG4gICAgaWYgKGRvbVtuYW1lXSkge1xuICAgICAgZG9tW25hbWVdKGUsIGRvbSk7XG4gICAgICBpZiAoIWUuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgdXBkYXRlKCk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGRvbSA9IGRvbS5wYXJlbnROb2RlIGFzIERvbUVsZW1lbnQ7XG4gIH1cbn1cblxuLyogRGlyZWN0aXZlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbmxldCBoaWRlRGlyZWN0aXZlID0gKHRlc3Q6IGJvb2xlYW4pID0+IChib29sOiBib29sZWFuLCB2bm9kZTogVm5vZGVJbnRlcmZhY2UsIG9sZG5vZGU/OiBWbm9kZUludGVyZmFjZSkgPT4ge1xuICBsZXQgdmFsdWUgPSB0ZXN0ID8gYm9vbCA6ICFib29sO1xuICBpZiAodmFsdWUpIHtcbiAgICBsZXQgbmV3ZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XG4gICAgaWYgKG9sZG5vZGUgJiYgb2xkbm9kZS5kb20gJiYgb2xkbm9kZS5kb20ucGFyZW50Tm9kZSkge1xuICAgICAgb2xkbm9kZS5kb20ucGFyZW50Tm9kZS5yZXBsYWNlQ2hpbGQobmV3ZG9tLCBvbGRub2RlLmRvbSk7XG4gICAgfVxuICAgIHZub2RlLnRhZyA9IFwiI3RleHRcIjtcbiAgICB2bm9kZS5jaGlsZHJlbiA9IFtdO1xuICAgIHZub2RlLnByb3BzID0ge307XG4gICAgdm5vZGUuZG9tID0gbmV3ZG9tIGFzIHVua25vd24gYXMgRG9tRWxlbWVudDtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBkaXJlY3RpdmVzOiBEaXJlY3RpdmVzID0ge1xuICBcInYtaWZcIjogaGlkZURpcmVjdGl2ZShmYWxzZSksXG4gIFwidi11bmxlc3NcIjogaGlkZURpcmVjdGl2ZSh0cnVlKSxcbiAgXCJ2LWZvclwiOiAoc2V0OiB1bmtub3duW10sIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICBsZXQgbmV3Q2hpbGRyZW46IFZub2RlSW50ZXJmYWNlW10gPSBbXTtcbiAgICBsZXQgY2FsbGJhY2sgPSB2bm9kZS5jaGlsZHJlblswXTtcbiAgICBmb3IgKGxldCBpID0gMCwgbCA9IHNldC5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIG5ld0NoaWxkcmVuLnB1c2goY2FsbGJhY2soc2V0W2ldLCBpKSk7XG4gICAgfVxuICAgIHZub2RlLmNoaWxkcmVuID0gbmV3Q2hpbGRyZW47XG4gIH0sXG4gIFwidi1zaG93XCI6IChib29sOiBib29sZWFuLCB2bm9kZTogVm5vZGVXaXRoRG9tKSA9PiB7XG4gICAgKFxuICAgICAgdm5vZGUuZG9tIGFzIHVua25vd24gYXMge1xuICAgICAgICBzdHlsZTogeyBkaXNwbGF5OiBzdHJpbmcgfTtcbiAgICAgIH1cbiAgICApLnN0eWxlLmRpc3BsYXkgPSBib29sID8gXCJcIiA6IFwibm9uZVwiO1xuICB9LFxuICBcInYtY2xhc3NcIjogKGNsYXNzZXM6IHsgW3g6IHN0cmluZ106IGJvb2xlYW4gfSwgdm5vZGU6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgIGZvciAobGV0IG5hbWUgaW4gY2xhc3Nlcykge1xuICAgICAgKHZub2RlLmRvbSBhcyBEb21FbGVtZW50KS5jbGFzc0xpc3QudG9nZ2xlKG5hbWUsIGNsYXNzZXNbbmFtZV0pO1xuICAgIH1cbiAgfSxcbiAgXCJ2LWh0bWxcIjogKGh0bWw6IHN0cmluZywgdm5vZGU6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgIHZub2RlLmNoaWxkcmVuID0gW3RydXN0KGh0bWwpXTtcbiAgfSxcbiAgXCJ2LW1vZGVsXCI6IChbbW9kZWwsIHByb3BlcnR5LCBldmVudF06IGFueVtdLCB2bm9kZTogVm5vZGVXaXRoRG9tLCBvbGRWbm9kZT86IFZub2RlV2l0aERvbSkgPT4ge1xuICAgIGxldCB2YWx1ZTtcbiAgICBsZXQgaGFuZGxlciA9IChlOiBFdmVudCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWUpO1xuICAgIGlmICh2bm9kZS50YWcgPT09IFwiaW5wdXRcIikge1xuICAgICAgZXZlbnQgPSBldmVudCB8fCBcIm9uaW5wdXRcIjtcbiAgICAgIHN3aXRjaCAodm5vZGUucHJvcHMudHlwZSkge1xuICAgICAgICBjYXNlIFwiY2hlY2tib3hcIjoge1xuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KG1vZGVsW3Byb3BlcnR5XSkpIHtcbiAgICAgICAgICAgIGhhbmRsZXIgPSAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgbGV0IHZhbCA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWU7XG4gICAgICAgICAgICAgIGxldCBpZHggPSBtb2RlbFtwcm9wZXJ0eV0uaW5kZXhPZih2YWwpO1xuICAgICAgICAgICAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV0uaW5kZXhPZih2bm9kZS5kb20udmFsdWUpICE9PSAtMTtcbiAgICAgICAgICB9IGVsc2UgaWYgKFwidmFsdWVcIiBpbiB2bm9kZS5wcm9wcykge1xuICAgICAgICAgICAgaGFuZGxlciA9ICgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKG1vZGVsW3Byb3BlcnR5XSA9PT0gdm5vZGUucHJvcHMudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0gPSBudWxsO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XSA9IHZub2RlLnByb3BzLnZhbHVlO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLnByb3BzLnZhbHVlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBoYW5kbGVyID0gKCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9ICFtb2RlbFtwcm9wZXJ0eV0pO1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgIHNoYXJlZFNldEF0dHJpYnV0ZShcImNoZWNrZWRcIiwgdmFsdWUsIHZub2RlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFwicmFkaW9cIjoge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgICAgIHNoYXJlZFNldEF0dHJpYnV0ZShcImNoZWNrZWRcIiwgbW9kZWxbcHJvcGVydHldID09PSB2bm9kZS5kb20udmFsdWUsIHZub2RlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKFwidmFsdWVcIiwgbW9kZWxbcHJvcGVydHldLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgZXZlbnQgPSBldmVudCB8fCBcIm9uY2xpY2tcIjtcbiAgICAgIGlmICh2bm9kZS5wcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICBoYW5kbGVyID0gKGU6IEV2ZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikgPT4ge1xuICAgICAgICAgIGxldCB2YWwgPSAoZS50YXJnZXQgYXMgRG9tRWxlbWVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pLnZhbHVlO1xuICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgICAgIGxldCBpZHggPSBtb2RlbFtwcm9wZXJ0eV0uaW5kZXhPZih2YWwpO1xuICAgICAgICAgICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnNwbGljZSgwLCBtb2RlbFtwcm9wZXJ0eV0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICB2bm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogVm5vZGVJbnRlcmZhY2UpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBcInZhbHVlXCIgaW4gY2hpbGQucHJvcHMgPyBjaGlsZC5wcm9wcy52YWx1ZSA6IGNoaWxkLmNoaWxkcmVuLmpvaW4oXCJcIikudHJpbSgpO1xuICAgICAgICAgICAgY2hpbGQucHJvcHMuc2VsZWN0ZWQgPSBtb2RlbFtwcm9wZXJ0eV0uaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2bm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogVm5vZGVJbnRlcmZhY2UpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBcInZhbHVlXCIgaW4gY2hpbGQucHJvcHMgPyBjaGlsZC5wcm9wcy52YWx1ZSA6IGNoaWxkLmNoaWxkcmVuLmpvaW4oXCJcIikudHJpbSgpO1xuICAgICAgICAgICAgY2hpbGQucHJvcHMuc2VsZWN0ZWQgPSB2YWx1ZSA9PT0gbW9kZWxbcHJvcGVydHldO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh2bm9kZS50YWcgPT09IFwidGV4dGFyZWFcIikge1xuICAgICAgZXZlbnQgPSBldmVudCB8fCBcIm9uaW5wdXRcIjtcbiAgICAgIHZub2RlLmNoaWxkcmVuID0gW21vZGVsW3Byb3BlcnR5XV07XG4gICAgfVxuXG4gICAgLy8gV2UgYXNzdW1lIHRoYXQgdGhlIHByZXYgaGFuZGxlciBpZiBhbnkgd2lsbCBub3QgYmUgY2hhbmdlZCBieSB0aGUgdXNlciBhY3Jvc3MgcGF0Y2hzXG4gICAgbGV0IHByZXZIYW5kbGVyID0gdm5vZGUucHJvcHNbZXZlbnRdO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgc2hhcmVkU2V0QXR0cmlidXRlKFxuICAgICAgZXZlbnQsXG4gICAgICAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgaGFuZGxlcihlKTtcblxuICAgICAgICAvLyBJZiB0aGUgdXNlciBoYXMgZGVmaW5lZCBhIGhhbmRsZXIgZm9yIHRoZSBldmVudCwgd2UgY2FsbCBpdCByaWdodCBhd2F5XG4gICAgICAgIGlmIChwcmV2SGFuZGxlcikge1xuICAgICAgICAgIHByZXZIYW5kbGVyKGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdm5vZGUsXG4gICAgICBvbGRWbm9kZVxuICAgICk7XG4gIH0sXG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIFwidi1jcmVhdGVcIjogKGNhbGxiYWNrOiAodm5vZGU6IFZub2RlV2l0aERvbSkgPT4gdm9pZCwgdm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICBpZiAoIW9sZFZub2RlKSB7XG4gICAgICBjYWxsYmFjayh2bm9kZSk7XG4gICAgfVxuICB9LFxuXG4gIFwidi11cGRhdGVcIjogKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGNhbGxiYWNrOiAodm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU6IFZub2RlV2l0aERvbSkgPT4gdm9pZCxcbiAgICB2bm9kZTogVm5vZGVXaXRoRG9tLFxuICAgIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tXG4gICkgPT4ge1xuICAgIGlmIChvbGRWbm9kZSkge1xuICAgICAgY2FsbGJhY2sodm5vZGUsIG9sZFZub2RlKTtcbiAgICB9XG4gIH0sXG5cbiAgXCJ2LWNsZWFudXBcIjogKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGNhbGxiYWNrOiAodm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pID0+IHZvaWQsXG4gICAgdm5vZGU6IFZub2RlV2l0aERvbSxcbiAgICBvbGRWbm9kZT86IFZub2RlV2l0aERvbVxuICApID0+IHtcbiAgICBvbkNsZWFudXAoKCkgPT4gY2FsbGJhY2sodm5vZGUsIG9sZFZub2RlKSk7XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmU6IERpcmVjdGl2ZSkge1xuICBsZXQgZGlyZWN0aXZlTmFtZSA9IGB2LSR7bmFtZX1gO1xuICBkaXJlY3RpdmVzW2RpcmVjdGl2ZU5hbWVdID0gZGlyZWN0aXZlO1xuICByZXNlcnZlZFByb3BzW2RpcmVjdGl2ZU5hbWVdID0gdHJ1ZTtcbn1cblxuLyogU2V0IGF0dHJpYnV0ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbmZ1bmN0aW9uIHNoYXJlZFNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG5ld1Zub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKTogdm9pZCB8IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpZiAobmFtZSBpbiBldmVudExpc3RlbmVyTmFtZXMgPT09IGZhbHNlKSB7XG4gICAgICAobWFpblZub2RlIGFzIFZub2RlV2l0aERvbSkuZG9tLmFkZEV2ZW50TGlzdGVuZXIobmFtZS5zbGljZSgyKSwgZXZlbnRMaXN0ZW5lcik7XG4gICAgICBldmVudExpc3RlbmVyTmFtZXNbbmFtZV0gPSB0cnVlO1xuICAgIH1cbiAgICBuZXdWbm9kZS5kb21bYHYtJHtuYW1lfWBdID0gdmFsdWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKG5hbWUgaW4gbmV3Vm5vZGUuZG9tICYmIG5ld1Zub2RlLmlzU1ZHID09PSBmYWxzZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICBpZiAobmV3Vm5vZGUuZG9tW25hbWVdICE9IHZhbHVlKSB7XG4gICAgICBuZXdWbm9kZS5kb21bbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKCFvbGRWbm9kZSB8fCB2YWx1ZSAhPT0gb2xkVm5vZGUucHJvcHNbbmFtZV0pIHtcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICBuZXdWbm9kZS5kb20ucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWbm9kZS5kb20uc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG5ld1Zub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKTogdm9pZCB7XG4gIGlmIChuYW1lIGluIHJlc2VydmVkUHJvcHMpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgbmV3Vm5vZGUucHJvcHNbbmFtZV0gPSB2YWx1ZTtcbiAgc2hhcmVkU2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlLCBuZXdWbm9kZSBhcyBWbm9kZVdpdGhEb20sIG9sZFZub2RlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZUF0dHJpYnV0ZXMobmV3Vm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pOiB2b2lkIHtcbiAgaWYgKG9sZFZub2RlKSB7XG4gICAgZm9yIChsZXQgbmFtZSBpbiBvbGRWbm9kZS5wcm9wcykge1xuICAgICAgaWYgKG5hbWUgaW4gbmV3Vm5vZGUucHJvcHMgPT09IGZhbHNlICYmIG5hbWUgaW4gZXZlbnRMaXN0ZW5lck5hbWVzID09PSBmYWxzZSAmJiBuYW1lIGluIHJlc2VydmVkUHJvcHMgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG5ld1Zub2RlLmRvbSAmJiBuZXdWbm9kZS5pc1NWRyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBuZXdWbm9kZS5kb21bbmFtZV0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1Zub2RlLmRvbS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBuYW1lIGluIG5ld1Zub2RlLnByb3BzKSB7XG4gICAgaWYgKG5hbWUgaW4gcmVzZXJ2ZWRQcm9wcykge1xuICAgICAgaWYgKG5hbWUgaW4gZGlyZWN0aXZlcyAmJiBkaXJlY3RpdmVzW25hbWVdKG5ld1Zub2RlLnByb3BzW25hbWVdLCBuZXdWbm9kZSwgb2xkVm5vZGUpID09PSBmYWxzZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBzaGFyZWRTZXRBdHRyaWJ1dGUobmFtZSwgbmV3Vm5vZGUucHJvcHNbbmFtZV0sIG5ld1Zub2RlLCBvbGRWbm9kZSk7XG4gIH1cbn1cblxuLyogcGF0Y2ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vLyBQYXRjaCBhIERPTSBub2RlIHdpdGggYSBuZXcgVk5vZGUgdHJlZVxuZXhwb3J0IGZ1bmN0aW9uIHBhdGNoKG5ld1Zub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKTogdm9pZCB7XG4gIGxldCBuZXdUcmVlID0gbmV3Vm5vZGUuY2hpbGRyZW47XG4gIGxldCBvbGRUcmVlID0gb2xkVm5vZGU/LmNoaWxkcmVuIHx8IFtdO1xuICBsZXQgb2xkVHJlZUxlbmd0aCA9IG9sZFRyZWUubGVuZ3RoO1xuXG4gIC8vIElzIGtleWVkIGxpc3QgYW5kIHVwZGF0ZSBpbiBwbGFjZVxuICBpZiAob2xkVHJlZUxlbmd0aCAmJiBuZXdUcmVlWzBdIGluc3RhbmNlb2YgVm5vZGUgJiYgXCJrZXlcIiBpbiBuZXdUcmVlWzBdLnByb3BzICYmIFwia2V5XCIgaW4gb2xkVHJlZVswXS5wcm9wcykge1xuICAgIGxldCBuZXdUcmVlTGVuZ3RoID0gbmV3VHJlZS5sZW5ndGg7XG5cbiAgICBsZXQgb2xkS2V5ZWRMaXN0OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbGRUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIG9sZEtleWVkTGlzdFtvbGRUcmVlW2ldLnByb3BzLmtleV0gPSBpO1xuICAgIH1cblxuICAgIGxldCBuZXdLZXllZExpc3Q6IHsgW2tleTogc3RyaW5nXTogbnVtYmVyIH0gPSB7fTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWVMZW5ndGg7IGkrKykge1xuICAgICAgbmV3S2V5ZWRMaXN0W25ld1RyZWVbaV0ucHJvcHMua2V5XSA9IGk7XG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBuZXdDaGlsZCA9IG5ld1RyZWVbaV07XG4gICAgICBsZXQgb2xkQ2hpbGQgPSBvbGRUcmVlW29sZEtleWVkTGlzdFtuZXdDaGlsZC5wcm9wcy5rZXldXTtcbiAgICAgIGxldCBzaG91bGRQYXRjaCA9IHRydWU7XG5cbiAgICAgIGlmIChvbGRDaGlsZCkge1xuICAgICAgICBuZXdDaGlsZC5kb20gPSBvbGRDaGlsZC5kb207XG4gICAgICAgIGlmIChcInYta2VlcFwiIGluIG5ld0NoaWxkLnByb3BzICYmIG5ld0NoaWxkLnByb3BzW1widi1rZWVwXCJdID09PSBvbGRDaGlsZC5wcm9wc1tcInYta2VlcFwiXSkge1xuICAgICAgICAgIG5ld0NoaWxkLmNoaWxkcmVuID0gb2xkQ2hpbGQuY2hpbGRyZW47XG4gICAgICAgICAgc2hvdWxkUGF0Y2ggPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1cGRhdGVBdHRyaWJ1dGVzKG5ld0NoaWxkLCBvbGRDaGlsZCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld0NoaWxkLmRvbSA9IGNyZWF0ZURvbUVsZW1lbnQobmV3Q2hpbGQudGFnLCBuZXdDaGlsZC5pc1NWRyk7XG4gICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMobmV3Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW5ld1Zub2RlLmRvbS5jaGlsZE5vZGVzW2ldKSB7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChuZXdDaGlsZC5kb20pO1xuICAgICAgfSBlbHNlIGlmIChuZXdWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSAhPT0gbmV3Q2hpbGQuZG9tKSB7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQobmV3Q2hpbGQuZG9tLCBuZXdWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSk7XG4gICAgICB9XG5cbiAgICAgIHNob3VsZFBhdGNoICYmIHBhdGNoKG5ld0NoaWxkLCBvbGRDaGlsZCk7XG4gICAgfVxuXG4gICAgLy8gRm9yIHRoZSByZXN0IG9mIHRoZSBjaGlsZHJlbiwgd2Ugc2hvdWxkIHJlbW92ZSB0aGVtXG4gICAgZm9yIChsZXQgaSA9IG5ld1RyZWVMZW5ndGg7IGkgPCBvbGRUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICghbmV3S2V5ZWRMaXN0W29sZFRyZWVbaV0ucHJvcHMua2V5XSkge1xuICAgICAgICBvbGRUcmVlW2ldLmRvbS5wYXJlbnROb2RlICYmIG9sZFRyZWVbaV0uZG9tLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQob2xkVHJlZVtpXS5kb20pO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmV3VHJlZS5sZW5ndGggPT09IDApIHtcbiAgICBuZXdWbm9kZS5kb20udGV4dENvbnRlbnQgPSBcIlwiO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGN1cnJlbnQudm5vZGUgPSBuZXdWbm9kZTtcbiAgY3VycmVudC5vbGRWbm9kZSA9IG9sZFZub2RlO1xuXG4gIC8vIEZsYXQgbmV3VHJlZVxuICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWUubGVuZ3RoOyBpKyspIHtcbiAgICBsZXQgbmV3Q2hpbGQgPSBuZXdUcmVlW2ldO1xuXG4gICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVm5vZGUgJiYgbmV3Q2hpbGQudGFnICE9PSB0ZXh0VGFnKSB7XG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkLnRhZyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBjdXJyZW50LmNvbXBvbmVudCA9IG5ld0NoaWxkLnRhZztcbiAgICAgICAgbmV3VHJlZS5zcGxpY2UoXG4gICAgICAgICAgaS0tLFxuICAgICAgICAgIDEsXG4gICAgICAgICAgKFwidmlld1wiIGluIG5ld0NoaWxkLnRhZyA/IG5ld0NoaWxkLnRhZy52aWV3LmJpbmQobmV3Q2hpbGQudGFnKSA6IG5ld0NoaWxkLnRhZy5iaW5kKG5ld0NoaWxkLnRhZykpKFxuICAgICAgICAgICAgbmV3Q2hpbGQucHJvcHMsXG4gICAgICAgICAgICAuLi5uZXdDaGlsZC5jaGlsZHJlblxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIG5ld0NoaWxkLmlzU1ZHID0gbmV3Vm5vZGUuaXNTVkcgfHwgbmV3Q2hpbGQudGFnID09PSBcInN2Z1wiO1xuXG4gICAgICBpZiAoaSA8IG9sZFRyZWVMZW5ndGgpIHtcbiAgICAgICAgbGV0IG9sZENoaWxkID0gb2xkVHJlZVtpXTtcbiAgICAgICAgaWYgKG5ld0NoaWxkLnRhZyA9PT0gb2xkQ2hpbGQudGFnKSB7XG4gICAgICAgICAgbmV3Q2hpbGQuZG9tID0gb2xkQ2hpbGQuZG9tO1xuICAgICAgICAgIGlmIChcInYta2VlcFwiIGluIG5ld0NoaWxkLnByb3BzICYmIG5ld0NoaWxkLnByb3BzW1widi1rZWVwXCJdID09PSBvbGRDaGlsZC5wcm9wc1tcInYta2VlcFwiXSkge1xuICAgICAgICAgICAgbmV3Q2hpbGQuY2hpbGRyZW4gPSBvbGRDaGlsZC5jaGlsZHJlbjtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMobmV3Q2hpbGQgYXMgVm5vZGVXaXRoRG9tLCBvbGRDaGlsZCk7XG4gICAgICAgICAgcGF0Y2gobmV3Q2hpbGQgYXMgVm5vZGVXaXRoRG9tLCBvbGRDaGlsZCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBuZXdDaGlsZC5kb20gPSBjcmVhdGVEb21FbGVtZW50KG5ld0NoaWxkLnRhZywgbmV3Q2hpbGQuaXNTVkcpO1xuICAgICAgICB1cGRhdGVBdHRyaWJ1dGVzKG5ld0NoaWxkIGFzIFZub2RlV2l0aERvbSk7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQobmV3Q2hpbGQuZG9tLCBvbGRDaGlsZC5kb20pO1xuICAgICAgICBwYXRjaChuZXdDaGlsZCBhcyBWbm9kZVdpdGhEb20pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgbmV3Q2hpbGQuZG9tID0gY3JlYXRlRG9tRWxlbWVudChuZXdDaGlsZC50YWcsIG5ld0NoaWxkLmlzU1ZHKTtcbiAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMobmV3Q2hpbGQgYXMgVm5vZGVXaXRoRG9tKTtcbiAgICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChuZXdDaGlsZC5kb20pO1xuICAgICAgcGF0Y2gobmV3Q2hpbGQgYXMgVm5vZGVXaXRoRG9tKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KG5ld0NoaWxkKSkge1xuICAgICAgbmV3VHJlZS5zcGxpY2UoaS0tLCAxLCAuLi5uZXdDaGlsZCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobmV3Q2hpbGQgPT09IG51bGwgfHwgbmV3Q2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VHJlZS5zcGxpY2UoaS0tLCAxKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG5ld1RyZWVbaV0gPSBuZXcgVm5vZGUodGV4dFRhZywge30sIFtdKTtcbiAgICBpZiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBWbm9kZSkge1xuICAgICAgbmV3VHJlZVtpXS5kb20gPSBuZXdDaGlsZC5kb207XG4gICAgICBuZXdDaGlsZCA9IChuZXdDaGlsZCBhcyBWbm9kZVdpdGhEb20pLmRvbS50ZXh0Q29udGVudDtcbiAgICB9XG5cbiAgICBpZiAoaSA8IG9sZFRyZWVMZW5ndGgpIHtcbiAgICAgIGxldCBvbGRDaGlsZCA9IG9sZFRyZWVbaV07XG5cbiAgICAgIGlmIChvbGRDaGlsZC50YWcgPT09IHRleHRUYWcpIHtcbiAgICAgICAgbmV3VHJlZVtpXS5kb20gPSBvbGRDaGlsZC5kb207XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgICAgaWYgKG5ld0NoaWxkICE9IG9sZENoaWxkLmRvbS50ZXh0Q29udGVudCkge1xuICAgICAgICAgIG9sZENoaWxkLmRvbS50ZXh0Q29udGVudCA9IG5ld0NoaWxkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBuZXdUcmVlW2ldLmRvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld0NoaWxkKTtcbiAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQobmV3VHJlZVtpXS5kb20sIG9sZENoaWxkLmRvbSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBuZXdUcmVlW2ldLmRvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld0NoaWxkKTtcbiAgICBuZXdWbm9kZS5kb20uYXBwZW5kQ2hpbGQobmV3VHJlZVtpXS5kb20pO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IG5ld1RyZWUubGVuZ3RoOyBpIDwgb2xkVHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgbmV3Vm5vZGUuZG9tLnJlbW92ZUNoaWxkKG9sZFRyZWVbaV0uZG9tKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlKCk6IHZvaWQgfCBzdHJpbmcge1xuICBpZiAobWFpblZub2RlKSB7XG4gICAgY2FsbFNldChvbkNsZWFudXBTZXQpO1xuICAgIGxldCBvbGRNYWluVm5vZGUgPSBtYWluVm5vZGU7XG4gICAgbWFpblZub2RlID0gbmV3IFZub2RlKG9sZE1haW5Wbm9kZS50YWcsIG9sZE1haW5Wbm9kZS5wcm9wcywgW21haW5Db21wb25lbnRdKSBhcyBWbm9kZVdpdGhEb207XG4gICAgbWFpblZub2RlLmRvbSA9IG9sZE1haW5Wbm9kZS5kb207XG4gICAgbWFpblZub2RlLmlzU1ZHID0gb2xkTWFpblZub2RlLmlzU1ZHO1xuICAgIHBhdGNoKG1haW5Wbm9kZSwgb2xkTWFpblZub2RlKTtcbiAgICBjYWxsU2V0KGlzTW91bnRlZCA/IG9uVXBkYXRlU2V0IDogb25Nb3VudFNldCk7XG4gICAgaXNNb3VudGVkID0gdHJ1ZTtcbiAgICBjdXJyZW50LnZub2RlID0gbnVsbDtcbiAgICBjdXJyZW50Lm9sZFZub2RlID0gbnVsbDtcbiAgICBjdXJyZW50LmNvbXBvbmVudCA9IG51bGw7XG4gICAgaWYgKGlzTm9kZUpzKSB7XG4gICAgICByZXR1cm4gbWFpblZub2RlLmRvbS5pbm5lckhUTUw7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bm1vdW50KCkge1xuICBpZiAobWFpblZub2RlKSB7XG4gICAgbWFpbkNvbXBvbmVudCA9IG5ldyBWbm9kZSgoKSA9PiBudWxsLCB7fSwgW10pIGFzIFZub2RlQ29tcG9uZW50SW50ZXJmYWNlO1xuICAgIGxldCByZXN1bHQgPSB1cGRhdGUoKTtcbiAgICBjYWxsU2V0KG9uVW5tb3VudFNldCk7XG5cbiAgICBmb3IgKGxldCBuYW1lIGluIGV2ZW50TGlzdGVuZXJOYW1lcykge1xuICAgICAgbWFpblZub2RlLmRvbS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUuc2xpY2UoMikudG9Mb3dlckNhc2UoKSwgZXZlbnRMaXN0ZW5lcik7XG4gICAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGV2ZW50TGlzdGVuZXJOYW1lcywgbmFtZSk7XG4gICAgfVxuXG4gICAgbWFpbkNvbXBvbmVudCA9IG51bGw7XG4gICAgbWFpblZub2RlID0gbnVsbDtcbiAgICBpc01vdW50ZWQgPSBmYWxzZTtcbiAgICBjdXJyZW50LnZub2RlID0gbnVsbDtcbiAgICBjdXJyZW50Lm9sZFZub2RlID0gbnVsbDtcbiAgICBjdXJyZW50LmNvbXBvbmVudCA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbW91bnQoZG9tLCBjb21wb25lbnQpIHtcbiAgbGV0IGNvbnRhaW5lciA9XG4gICAgdHlwZW9mIGRvbSA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyBpc05vZGVKc1xuICAgICAgICA/IGNyZWF0ZURvbUVsZW1lbnQoZG9tLCBkb20gPT09IFwic3ZnXCIpXG4gICAgICAgIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChkb20pWzBdXG4gICAgICA6IGRvbTtcblxuICBsZXQgdm5vZGVDb21wb25lbnQgPSBpc1Zub2RlQ29tcG9uZW50KGNvbXBvbmVudClcbiAgICA/IGNvbXBvbmVudFxuICAgIDogaXNDb21wb25lbnQoY29tcG9uZW50KVxuICAgID8gbmV3IFZub2RlKGNvbXBvbmVudCwge30sIFtdKVxuICAgIDogbmV3IFZub2RlKCgpID0+IGNvbXBvbmVudCwge30sIFtdKTtcblxuICBpZiAobWFpbkNvbXBvbmVudCAmJiBtYWluQ29tcG9uZW50LnRhZyAhPT0gdm5vZGVDb21wb25lbnQudGFnKSB7XG4gICAgdW5tb3VudCgpO1xuICB9XG5cbiAgbWFpbkNvbXBvbmVudCA9IHZub2RlQ29tcG9uZW50IGFzIFZub2RlQ29tcG9uZW50SW50ZXJmYWNlO1xuICBtYWluVm5vZGUgPSBkb21Ub1Zub2RlKGNvbnRhaW5lcik7XG4gIHJldHVybiB1cGRhdGUoKTtcbn1cblxuZXhwb3J0IGNvbnN0IHY6IFYgPSAodGFnT3JDb21wb25lbnQsIHByb3BzID0ge30sIC4uLmNoaWxkcmVuKSA9PiB7XG4gIHJldHVybiBuZXcgVm5vZGUodGFnT3JDb21wb25lbnQsIHByb3BzIHx8IHt9LCBjaGlsZHJlbik7XG59O1xuXG52LmZyYWdtZW50ID0gKHByb3BzOiBQcm9wcywgLi4uY2hpbGRyZW46IENoaWxkcmVuKSA9PiBjaGlsZHJlbjtcbiJdLCJtYXBwaW5ncyI6Ik1Bc0ZBLElBQU1BLEVBQVUsUUFFTEMsRUFBV0MsUUFBMkIsb0JBQVpDLFNBQTJCQSxRQUFRQyxVQUFZRCxRQUFRQyxTQUFTQyxNQUU5RixTQUFTQyxFQUFpQkMsRUFBYUMsR0FBaUIsR0FDN0QsT0FBT0EsRUFBUUMsU0FBU0MsZ0JBQWdCLDZCQUE4QkgsR0FBT0UsU0FBU0UsY0FBY0osRUFDdEcsQ0FFTyxJQUFNSyxFQUFRLFNBQXFDTCxFQUFhTSxFQUFjQyxHQUNuRkMsS0FBS1IsSUFBTUEsRUFDWFEsS0FBS0YsTUFBUUEsRUFDYkUsS0FBS0QsU0FBV0EsQ0FDbEIsRUFFTyxTQUFTRSxFQUFZQyxHQUMxQixPQUFPQSxJQUFtQyxtQkFBZEEsR0FBa0QsaUJBQWRBLEdBQTBCLFNBQVVBLEVBQ3RHLENBRU8sSUFBTUMsRUFBV0MsR0FDZkEsYUFBa0JQLEVBR2RRLEVBQW9CRCxHQUN4QkQsRUFBUUMsSUFBV0gsRUFBWUcsRUFBT1osS0FJL0MsU0FBU2MsRUFBV0MsR0FDbEIsSUFBSVIsRUFBMkIsR0FDL0IsUUFBU1MsRUFBSSxFQUFHQyxFQUFJRixFQUFJRyxXQUFXQyxPQUFRSCxFQUFJQyxFQUFHRCxJQUFLLENB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
1
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJ0ZXh0VGFnIiwiaXNOb2RlSnMiLCJCb29sZWFuIiwicHJvY2VzcyIsInZlcnNpb25zIiwibm9kZSIsImNyZWF0ZURvbUVsZW1lbnQiLCJ0YWciLCJpc1NWRyIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRlRWxlbWVudCIsIlZub2RlIiwicHJvcHMiLCJjaGlsZHJlbiIsInRoaXMiLCJpc0NvbXBvbmVudCIsImNvbXBvbmVudCIsImlzVm5vZGUiLCJvYmplY3QiLCJpc1Zub2RlQ29tcG9uZW50IiwiZG9tVG9Wbm9kZSIsImRvbSIsImkiLCJsIiwiY2hpbGROb2RlcyIsImxlbmd0aCIsImNoaWxkRG9tIiwibm9kZVR5cGUiLCJwdXNoIiwidm5vZGUiLCJhdHRyaWJ1dGVzIiwiYXR0ciIsIm5vZGVOYW1lIiwibm9kZVZhbHVlIiwidGFnTmFtZSIsInRvTG93ZXJDYXNlIiwidHJ1c3QiLCJodG1sU3RyaW5nIiwiZGl2IiwiaW5uZXJIVE1MIiwidHJpbSIsIm1hcCIsImNhbGwiLCJpdGVtIiwibWFpbkNvbXBvbmVudCIsIm1haW5Wbm9kZSIsImlzTW91bnRlZCIsImN1cnJlbnQiLCJvbGRWbm9kZSIsInJlc2VydmVkUHJvcHMiLCJrZXkiLCJzdGF0ZSIsIm9uQ2xlYW51cFNldCIsIlNldCIsIm9uTW91bnRTZXQiLCJvblVwZGF0ZVNldCIsIm9uVW5tb3VudFNldCIsIm9uQ2xlYW51cCIsImNhbGxiYWNrIiwiYWRkIiwiY2FsbFNldCIsInNldCIsImNsZWFyIiwiZXZlbnRMaXN0ZW5lck5hbWVzIiwiZXZlbnRMaXN0ZW5lciIsImUiLCJ0YXJnZXQiLCJuYW1lIiwidHlwZSIsImRlZmF1bHRQcmV2ZW50ZWQiLCJ1cGRhdGUiLCJwYXJlbnROb2RlIiwiaGlkZURpcmVjdGl2ZSIsInRlc3QiLCJib29sIiwib2xkbm9kZSIsIm5ld2RvbSIsImNyZWF0ZVRleHROb2RlIiwicmVwbGFjZUNoaWxkIiwiZGlyZWN0aXZlcyIsIm5ld0NoaWxkcmVuIiwic3R5bGUiLCJkaXNwbGF5IiwiY2xhc3NlcyIsImNsYXNzTGlzdCIsInRvZ2dsZSIsImh0bWwiLCJtb2RlbCIsInByb3BlcnR5IiwiZXZlbnQiLCJ2YWx1ZSIsImhhbmRsZXIiLCJBcnJheSIsImlzQXJyYXkiLCJ2YWwiLCJpZHgiLCJpbmRleE9mIiwic3BsaWNlIiwic2hhcmVkU2V0QXR0cmlidXRlIiwibXVsdGlwbGUiLCJjdHJsS2V5IiwiZm9yRWFjaCIsImNoaWxkIiwiam9pbiIsInNlbGVjdGVkIiwicHJldkhhbmRsZXIiLCJjbGVhbnVwIiwibmV3Vm5vZGUiLCJhZGRFdmVudExpc3RlbmVyIiwic2xpY2UiLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJ1cGRhdGVBdHRyaWJ1dGVzIiwicGF0Y2giLCJuZXdUcmVlIiwib2xkVHJlZSIsIm9sZFRyZWVMZW5ndGgiLCJuZXdUcmVlTGVuZ3RoIiwib2xkS2V5ZWRMaXN0IiwibmV3S2V5ZWRMaXN0IiwibmV3Q2hpbGQiLCJvbGRDaGlsZCIsInNob3VsZFBhdGNoIiwiYXBwZW5kQ2hpbGQiLCJyZW1vdmVDaGlsZCIsInZpZXciLCJiaW5kIiwidGV4dENvbnRlbnQiLCJvbGRNYWluVm5vZGUiLCJ1bm1vdW50IiwicmVzdWx0IiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIlJlZmxlY3QiLCJkZWxldGVQcm9wZXJ0eSIsInYiLCJ0YWdPckNvbXBvbmVudCIsImZyYWdtZW50IiwiXyIsImRpcmVjdGl2ZSIsImRpcmVjdGl2ZU5hbWUiLCJjb250YWluZXIiLCJxdWVyeVNlbGVjdG9yQWxsIiwidm5vZGVDb21wb25lbnQiXSwic291cmNlcyI6WyIuLi9saWIvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIGluZGVudCAqL1xuLyogZXNsaW50LWRpc2FibGUgc29uYXJqcy9jb2duaXRpdmUtY29tcGxleGl0eSAqL1xuLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuXG4vLyBUaGUgVm5vZGVQcm9wZXJ0aWVzIGludGVyZmFjZSByZXByZXNlbnRzIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgcGFzc2VkIHRvIGEgdmlydHVhbCBub2RlLlxuZXhwb3J0IGludGVyZmFjZSBWbm9kZVByb3BlcnRpZXMge1xuICAvLyBBIHVuaXF1ZSBrZXkgZm9yIHRoZSB2aXJ0dWFsIG5vZGUsIHdoaWNoIGNhbiBiZSBhIHN0cmluZyBvciBhIG51bWJlci5cbiAgLy8gVGhpcyBpcyB1c2VmdWwgZm9yIG9wdGltaXppbmcgdXBkYXRlcyBpbiBhIGxpc3Qgb2Ygbm9kZXMuXG4gIGtleT86IHN0cmluZyB8IG51bWJlcjtcbiAgLy8gQSBzdGF0ZSBvYmplY3QgdGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggdGhlIHZpcnR1YWwgbm9kZS5cbiAgc3RhdGU/OiBhbnk7XG4gIC8vIEFuIGluZGV4IHNpZ25hdHVyZSB0aGF0IGFsbG93cyBmb3IgYW55IG90aGVyIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQuXG4gIFtrZXk6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbF06IGFueTtcbn1cblxuLy8gVGhlIERvbUVsZW1lbnQgaW50ZXJmYWNlIGV4dGVuZHMgdGhlIEVsZW1lbnQgaW50ZXJmYWNlIHdpdGggYW4gaW5kZXggc2lnbmF0dXJlLlxuLy8gVGhpcyBhbGxvd3MgZm9yIGFueSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gRE9NIGVsZW1lbnRzLlxuZXhwb3J0IGludGVyZmFjZSBEb21FbGVtZW50IGV4dGVuZHMgRWxlbWVudCB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbn1cblxuLy8gVGhlIFZub2RlSW50ZXJmYWNlIHJlcHJlc2VudHMgYSB2aXJ0dWFsIG5vZGUuIEl0IGhhcyBhIG51bWJlciBvZiBvcHRpb25hbCBmaWVsZHMsXG4vLyBpbmNsdWRpbmcgYSB0YWcsIHByb3BzLCBjaGlsZHJlbiwgYW5kIGEgRE9NIGVsZW1lbnQuXG5leHBvcnQgaW50ZXJmYWNlIFZub2RlSW50ZXJmYWNlIHtcbiAgLy8gVGhlIGNvbnN0cnVjdG9yIGZvciB0aGUgdmlydHVhbCBub2RlLiBJdCB0YWtlcyBhIHRhZywgcHJvcHMsIGFuZCBjaGlsZHJlbiBhcyBhcmd1bWVudHMuXG4gIC8vIFRoZSB0YWcgY2FuIGJlIGEgc3RyaW5nLCBhIGNvbXBvbmVudCwgb3IgYSBQT0pPIGNvbXBvbmVudC5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXG4gIG5ldyAodGFnOiBzdHJpbmcgfCBDb21wb25lbnQgfCBQT0pPQ29tcG9uZW50LCBwcm9wczogVm5vZGVQcm9wZXJ0aWVzLCBjaGlsZHJlbjogQ2hpbGRyZW4pOiBWbm9kZUludGVyZmFjZTtcbiAgLy8gVGhlIHRhZyBmb3IgdGhlIHZpcnR1YWwgbm9kZS4gSXQgY2FuIGJlIGEgc3RyaW5nLCBhIGNvbXBvbmVudCwgb3IgYSBQT0pPIGNvbXBvbmVudC5cbiAgdGFnOiBzdHJpbmcgfCBDb21wb25lbnQgfCBQT0pPQ29tcG9uZW50O1xuICAvLyBUaGUgcHJvcHMgZm9yIHRoZSB2aXJ0dWFsIG5vZGUuXG4gIHByb3BzOiBWbm9kZVByb3BlcnRpZXM7XG4gIC8vIFRoZSBjaGlsZHJlbiBmb3IgdGhlIHZpcnR1YWwgbm9kZS5cbiAgY2hpbGRyZW46IENoaWxkcmVuO1xuICAvLyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSB2aXJ0dWFsIG5vZGUgaXMgYW4gU1ZHIGVsZW1lbnQuXG4gIGlzU1ZHPzogYm9vbGVhbjtcbiAgLy8gVGhlIERPTSBlbGVtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gdGhlIHZpcnR1YWwgbm9kZS5cbiAgZG9tPzogRG9tRWxlbWVudDtcbiAgLy8gQSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciB0aGUgdmlydHVhbCBub2RlIGhhcyBiZWVuIHByb2Nlc3NlZCBpbiB0aGUga2V5ZWQgZGlmZmluZyBhbGdvcml0aG0uXG4gIHByb2Nlc3NlZD86IGJvb2xlYW47XG4gIC8vIEFuIGluZGV4IHNpZ25hdHVyZSB0aGF0IGFsbG93cyBmb3IgYW55IGFkZGl0aW9uYWwgcHJvcGVydGllcyB0byBiZSBhZGRlZCB0byB0aGUgdmlydHVhbCBub2RlLlxuICBba2V5OiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2xdOiBhbnk7XG59XG5cbi8vIFRoZSBWbm9kZVdpdGhEb20gaW50ZXJmYWNlIHJlcHJlc2VudHMgYSB2aXJ0dWFsIG5vZGUgdGhhdCBoYXMgYSBET00gZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggaXQuXG5leHBvcnQgaW50ZXJmYWNlIFZub2RlV2l0aERvbSBleHRlbmRzIFZub2RlSW50ZXJmYWNlIHtcbiAgZG9tOiBEb21FbGVtZW50O1xufVxuXG4vLyBUaGUgQ29tcG9uZW50IGludGVyZmFjZSByZXByZXNlbnRzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdmlydHVhbCBub2RlIG9yIGEgbGlzdCBvZiB2aXJ0dWFsIG5vZGVzLlxuLy8gSXQgY2FuIGFsc28gaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMuXG5leHBvcnQgaW50ZXJmYWNlIENvbXBvbmVudCB7XG4gIC8vIFRoZSBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB2aXJ0dWFsIG5vZGUgb3IgYSBsaXN0IG9mIHZpcnR1YWwgbm9kZXMuXG4gIC8vIEl0IGNhbiB0YWtlIHByb3BzIGFuZCBjaGlsZHJlbiBhcyBhcmd1bWVudHMuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAocHJvcHM/OiBWbm9kZVByb3BlcnRpZXMgfCBudWxsLCAuLi5jaGlsZHJlbjogYW55W10pOiBWbm9kZUludGVyZmFjZSB8IENoaWxkcmVuIHwgYW55O1xuICAvLyBBbiBpbmRleCBzaWduYXR1cmUgdGhhdCBhbGxvd3MgZm9yIGFueSBhZGRpdGlvbmFsIHByb3BlcnRpZXMgdG8gYmUgYWRkZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vLyBUaGUgUE9KT0NvbXBvbmVudCBpbnRlcmZhY2UgcmVwcmVzZW50cyBhIFwicGxhaW4gb2xkIEphdmFTY3JpcHQgb2JqZWN0XCIgKFBPSk8pIGNvbXBvbmVudC5cbi8vIEl0IGhhcyBhIHZpZXcgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGEgdmlydHVhbCBub2RlIG9yIGEgbGlzdCBvZiB2aXJ0dWFsIG5vZGVzLFxuLy8gYXMgd2VsbCBhcyBvcHRpb25hbCBwcm9wcyBhbmQgY2hpbGRyZW4uXG4vLyBJdCBjYW4gYmUgdXNlZCBhbHNvIHRvIGlkZW50aWZ5IGNsYXNzIGluc3RhbmNlIGNvbXBvbmVudHMuXG5leHBvcnQgaW50ZXJmYWNlIFBPSk9Db21wb25lbnQge1xuICAvLyBUaGUgdmlldyBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSB2aXJ0dWFsIG5vZGUgb3IgYSBsaXN0IG9mIHZpcnR1YWwgbm9kZXMuXG4gIHZpZXc6IENvbXBvbmVudDtcbiAgLy8gVGhlIHByb3BzIGZvciB0aGUgY29tcG9uZW50LlxuICBwcm9wcz86IFZub2RlUHJvcGVydGllcyB8IG51bGw7XG4gIC8vIFRoZSBjaGlsZHJlbiBmb3IgdGhlIGNvbXBvbmVudC5cbiAgY2hpbGRyZW4/OiBhbnlbXTtcbiAgLy8gQW4gaW5kZXggc2lnbmF0dXJlIHRoYXQgYWxsb3dzIGZvciBhbnkgYWRkaXRpb25hbCBwcm9wZXJ0aWVzIHRvIGJlIGFkZGVkIHRvIHRoZSBQT0pPIGNvbXBvbmVudC5cbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG4vLyBUaGUgVm5vZGVDb21wb25lbnRJbnRlcmZhY2UgcmVwcmVzZW50cyBhIHZpcnR1YWwgbm9kZSB0aGF0IGhhcyBhIGNvbXBvbmVudCBhcyBpdHMgdGFnLlxuLy8gSXQgaGFzIHByb3BzIGFuZCBjaGlsZHJlbiwganVzdCBsaWtlIGEgcmVndWxhciB2aXJ0dWFsIG5vZGUuXG5leHBvcnQgaW50ZXJmYWNlIFZub2RlQ29tcG9uZW50SW50ZXJmYWNlIGV4dGVuZHMgVm5vZGVJbnRlcmZhY2Uge1xuICB0YWc6IENvbXBvbmVudCB8IFBPSk9Db21wb25lbnQ7XG4gIHByb3BzOiBWbm9kZVByb3BlcnRpZXM7XG4gIGNoaWxkcmVuOiBDaGlsZHJlbjtcbn1cblxuLy8gVGhlIENoaWxkcmVuIGludGVyZmFjZSByZXByZXNlbnRzIGEgbGlzdCBvZiB2aXJ0dWFsIG5vZGVzIG9yIG90aGVyIHZhbHVlcy5cbmV4cG9ydCBpbnRlcmZhY2UgQ2hpbGRyZW4gZXh0ZW5kcyBBcnJheTxWbm9kZUludGVyZmFjZSB8IFZub2RlQ29tcG9uZW50SW50ZXJmYWNlIHwgYW55PiB7fVxuXG4vLyBUaGUgRGlyZWN0aXZlIGludGVyZmFjZSByZXByZXNlbnRzIGEgZnVuY3Rpb24gdGhhdCBjYW4gYmUgYXBwbGllZCB0byBhIHZpcnR1YWwgbm9kZS5cbi8vIEl0IHJlY2VpdmVzIHRoZSB2YWx1ZSwgdmlydHVhbCBub2RlLCBhbmQgb2xkIHZpcnR1YWwgbm9kZSBhcyBhcmd1bWVudHMsIGFuZCBjYW4gcmV0dXJuIGEgYm9vbGVhbiB2YWx1ZS5cbi8vIElmIG9ubHkgdGhlIHZpcnR1YWwgbm9kZSBpcyBwYXNzZWQsIGl0IG1lYW5zIGl0cyB0aGUgb24gY3JlYXRlIHBoYXNlIGZvciB0aGUgdi1ub2RlLlxuLy8gSWYgdGhlIG9sZCB2aXJ0dWFsIG5vZGUgaXMgYWxzbyBwYXNzZWQsIGl0IG1lYW5zIGl0cyB0aGUgb24gdXBkYXRlIHBoYXNlIGZvciB0aGUgdi1ub2RlLlxuZXhwb3J0IGludGVyZmFjZSBEaXJlY3RpdmUge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgKHZhbHVlOiBhbnksIHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKTogdm9pZCB8IGJvb2xlYW47XG59XG5cbi8vIFRoZSBEaXJlY3RpdmVzIGludGVyZmFjZSBpcyBhIG1hcHBpbmcgb2YgZGlyZWN0aXZlIG5hbWVzIHRvIERpcmVjdGl2ZSBmdW5jdGlvbnMuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdGl2ZXMge1xuICBba2V5OiBzdHJpbmddOiBEaXJlY3RpdmU7XG59XG5cbi8vIFRoZSBSZXNlcnZlZFByb3BzIGludGVyZmFjZSBpcyBhIG1hcHBpbmcgb2YgcmVzZXJ2ZWQgcHJvcCBuYW1lcyB0byB0aGUgdmFsdWUgYHRydWVgLlxuLy8gVGhlc2UgcHJvcCBuYW1lcyBjYW5ub3QgYmUgdXNlZCBhcyBjdXN0b20gcHJvcCBuYW1lcy5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzZXJ2ZWRQcm9wcyB7XG4gIFtrZXk6IHN0cmluZ106IHRydWU7XG59XG5cbi8vIFRoZSBDdXJyZW50IGludGVyZmFjZSByZXByZXNlbnRzIHRoZSBjdXJyZW50IGNvbXBvbmVudCBhbmQgdmlydHVhbCBub2RlIHRoYXQgYXJlIGJlaW5nIHByb2Nlc3NlZC5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VycmVudCB7XG4gIC8vIFRoZSBjdXJyZW50IGNvbXBvbmVudC4gSXQgY2FuIGJlIGEgY29tcG9uZW50LCBhIFBPSk8gY29tcG9uZW50LCBvciBudWxsLlxuICBjb21wb25lbnQ6IENvbXBvbmVudCB8IFBPSk9Db21wb25lbnQgfCBudWxsO1xuICAvLyBUaGUgY3VycmVudCB2aXJ0dWFsIG5vZGUuIEl0IG11c3QgaGF2ZSBhIERPTSBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCBpdC5cbiAgdm5vZGU6IFZub2RlV2l0aERvbSB8IG51bGw7XG4gIC8vIFRoZSBvbGQgdmlydHVhbCBub2RlLiBJdCBtdXN0IGhhdmUgYSBET00gZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggaXQuXG4gIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tIHwgbnVsbDtcbn1cblxuLy8gVGhlIFYgZnVuY3Rpb24gaXMgdGhlIG1haW4gZnVuY3Rpb24gZm9yIGNyZWF0aW5nIHZpcnR1YWwgbm9kZXMuXG4vLyBJdCB0YWtlcyBhIHRhZyBvciBjb21wb25lbnQsIHByb3BzLCBhbmQgY2hpbGRyZW4gYXMgYXJndW1lbnRzLCBhbmQgcmV0dXJucyBhIHZpcnR1YWwgbm9kZS5cbmV4cG9ydCBpbnRlcmZhY2UgViB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycywgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgKHRhZ09yQ29tcG9uZW50OiBzdHJpbmcgfCBDb21wb25lbnQgfCBQT0pPQ29tcG9uZW50LCBwcm9wczogVm5vZGVQcm9wZXJ0aWVzIHwgbnVsbCwgLi4uY2hpbGRyZW46IENoaWxkcmVuKTpcbiAgICB8IFZub2RlSW50ZXJmYWNlXG4gICAgfCBWbm9kZUNvbXBvbmVudEludGVyZmFjZTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBuby11c2UtYmVmb3JlLWRlZmluZVxuICBmcmFnbWVudChfOiBhbnksIC4uLmNoaWxkcmVuOiBDaGlsZHJlbik6IENoaWxkcmVuO1xufVxuLy8gJ3RleHRUYWcnIGlzIGEgY29uc3RhbnQgc3RyaW5nIHRoYXQgaXMgdXNlZCB0byByZXByZXNlbnQgdGV4dCBub2RlcyBpbiB0aGUgdmlydHVhbCBET00uXG5jb25zdCB0ZXh0VGFnID0gXCIjdGV4dFwiO1xuXG4vLyAnaXNOb2RlSnMnIGlzIGEgYm9vbGVhbiB0aGF0IGlzIHRydWUgaWYgdGhlIGNvZGUgaXMgcnVubmluZyBpbiBhIE5vZGUuanMgZW52aXJvbm1lbnQgYW5kIGZhbHNlIG90aGVyd2lzZS5cbi8vIEl0IGlzIGRldGVybWluZWQgYnkgY2hlY2tpbmcgaWYgdGhlICdwcm9jZXNzJyBnbG9iYWwgb2JqZWN0IGlzIGRlZmluZWQgYW5kIGhhcyBhICd2ZXJzaW9ucycgcHJvcGVydHkuXG5leHBvcnQgbGV0IGlzTm9kZUpzID0gQm9vbGVhbih0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIiAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZSk7XG5cbi8vICdjcmVhdGVEb21FbGVtZW50JyBpcyBhIGZ1bmN0aW9uIHRoYXQgY3JlYXRlcyBhIG5ldyBET00gZWxlbWVudCB3aXRoIHRoZSBzcGVjaWZpZWQgdGFnIG5hbWUuXG4vLyBJZiAnaXNTVkcnIGlzIHRydWUsIGl0IGNyZWF0ZXMgYW4gU1ZHIGVsZW1lbnQgaW5zdGVhZCBvZiBhIHJlZ3VsYXIgRE9NIGVsZW1lbnQuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRG9tRWxlbWVudCh0YWc6IHN0cmluZywgaXNTVkc6IGJvb2xlYW4gPSBmYWxzZSk6IERvbUVsZW1lbnQge1xuICByZXR1cm4gaXNTVkcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB0YWcpIDogZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO1xufVxuXG4vLyAnVm5vZGUnIGlzIGEgY2xhc3MgdGhhdCByZXByZXNlbnRzIGEgdmlydHVhbCBET00gbm9kZS5cbi8vIEl0IGhhcyB0aHJlZSBwcm9wZXJ0aWVzOiAndGFnJywgJ3Byb3BzJywgYW5kICdjaGlsZHJlbicuXG4vLyAnVm5vZGUnIGlzIGV4cG9ydGVkIGFzIGFuIG9iamVjdCB3aXRoIGEgdHlwZSBvZiAnVm5vZGVJbnRlcmZhY2UnLlxuLy8gVGhlICdhcyB1bmtub3duIGFzIFZub2RlSW50ZXJmYWNlJyBpcyB1c2VkIHRvIHRlbGwgVHlwZVNjcmlwdCB0aGF0IHRoZSAnVm5vZGUnIGZ1bmN0aW9uIGhhcyB0aGUgc2FtZSB0eXBlIGFzICdWbm9kZUludGVyZmFjZScuXG5leHBvcnQgY29uc3QgVm5vZGUgPSBmdW5jdGlvbiBWbm9kZSh0aGlzOiBWbm9kZUludGVyZmFjZSwgdGFnOiBzdHJpbmcsIHByb3BzOiBWbm9kZVByb3BlcnRpZXMsIGNoaWxkcmVuOiBDaGlsZHJlbikge1xuICAvLyAndGhpcycgcmVmZXJzIHRvIHRoZSBjdXJyZW50IGluc3RhbmNlIG9mICdWbm9kZScuXG4gIHRoaXMudGFnID0gdGFnO1xuICB0aGlzLnByb3BzID0gcHJvcHM7XG4gIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbn0gYXMgdW5rbm93biBhcyBWbm9kZUludGVyZmFjZTtcblxuLy8gJ2lzQ29tcG9uZW50JyBpcyBhIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiAnY29tcG9uZW50JyBpcyBhIHZhbGlkIGNvbXBvbmVudCBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuLy8gQSBjb21wb25lbnQgaXMgZWl0aGVyIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0IHdpdGggYSAndmlldycgZnVuY3Rpb24uXG5leHBvcnQgZnVuY3Rpb24gaXNDb21wb25lbnQoY29tcG9uZW50KTogY29tcG9uZW50IGlzIENvbXBvbmVudCB7XG4gIHJldHVybiBjb21wb25lbnQgJiYgKHR5cGVvZiBjb21wb25lbnQgPT09IFwiZnVuY3Rpb25cIiB8fCAodHlwZW9mIGNvbXBvbmVudCA9PT0gXCJvYmplY3RcIiAmJiBcInZpZXdcIiBpbiBjb21wb25lbnQpKTtcbn1cblxuLy8gJ2lzVm5vZGUnIGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuICdvYmplY3QnIGlzIGEgJ1Zub2RlJyBpbnN0YW5jZSBhbmQgZmFsc2Ugb3RoZXJ3aXNlLlxuZXhwb3J0IGNvbnN0IGlzVm5vZGUgPSAob2JqZWN0PzogdW5rbm93biB8IFZub2RlSW50ZXJmYWNlKTogb2JqZWN0IGlzIFZub2RlSW50ZXJmYWNlID0+IHtcbiAgLy8gVXNlIHRoZSAnaW5zdGFuY2VvZicgb3BlcmF0b3IgdG8gY2hlY2sgaWYgJ29iamVjdCcgaXMgYW4gaW5zdGFuY2Ugb2YgJ1Zub2RlJy5cbiAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIFZub2RlO1xufTtcblxuLy8gJ2lzVm5vZGVDb21wb25lbnQnIGlzIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuICdvYmplY3QnIGlzIGEgJ1Zub2RlJyBpbnN0YW5jZSB3aXRoIGEgJ3RhZycgcHJvcGVydHkgdGhhdCBpcyBhIHZhbGlkIGNvbXBvbmVudC5cbi8vIEl0IHJldHVybnMgZmFsc2Ugb3RoZXJ3aXNlLlxuZXhwb3J0IGNvbnN0IGlzVm5vZGVDb21wb25lbnQgPSAob2JqZWN0PzogdW5rbm93biB8IFZub2RlQ29tcG9uZW50SW50ZXJmYWNlKTogb2JqZWN0IGlzIFZub2RlQ29tcG9uZW50SW50ZXJmYWNlID0+IHtcbiAgLy8gQ2hlY2sgaWYgJ29iamVjdCcgaXMgYSAnVm5vZGUnIGluc3RhbmNlIGFuZCBpdHMgJ3RhZycgcHJvcGVydHkgaXMgYSB2YWxpZCBjb21wb25lbnQuXG4gIHJldHVybiBpc1Zub2RlKG9iamVjdCkgJiYgaXNDb21wb25lbnQob2JqZWN0LnRhZyk7XG59O1xuXG4vLyAnZG9tVG9Wbm9kZScgaXMgYSBmdW5jdGlvbiB0aGF0IGNvbnZlcnRzIGEgRE9NIG5vZGUgdG8gYSAnVm5vZGUnIGluc3RhbmNlLlxuZnVuY3Rpb24gZG9tVG9Wbm9kZShkb206IGFueSk6IFZub2RlV2l0aERvbSB7XG4gIGxldCBjaGlsZHJlbjogVm5vZGVXaXRoRG9tW10gPSBbXTtcbiAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBjaGlsZCBub2RlcyBvZiAnZG9tJy5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBkb20uY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBsZXQgY2hpbGREb20gPSBkb20uY2hpbGROb2Rlc1tpXTtcbiAgICAvLyBJZiB0aGUgY2hpbGQgbm9kZSBpcyBhIHRleHQgbm9kZSwgY3JlYXRlIGEgJ1Zub2RlJyBpbnN0YW5jZSB3aXRoIHRoZSAndGV4dFRhZycgY29uc3RhbnQgYXMgdGhlICd0YWcnIHByb3BlcnR5LlxuICAgIC8vIFNldCB0aGUgJ2RvbScgcHJvcGVydHkgb2YgdGhlICdWbm9kZScgaW5zdGFuY2UgdG8gdGhlIGNoaWxkIERPTSBub2RlLlxuICAgIC8vIFB1c2ggdGhlICdWbm9kZScgaW5zdGFuY2UgdG8gdGhlICdjaGlsZHJlbicgYXJyYXkuXG4gICAgaWYgKGNoaWxkRG9tLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICBsZXQgdm5vZGUgPSBuZXcgVm5vZGUodGV4dFRhZywge30sIFtdKTtcbiAgICAgIHZub2RlLmRvbSA9IGNoaWxkRG9tO1xuICAgICAgY2hpbGRyZW4ucHVzaCh2bm9kZSBhcyBWbm9kZVdpdGhEb20pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGNoaWxkIG5vZGUgaXMgYW4gZWxlbWVudCBub2RlLCByZWN1cnNpdmVseSBjYWxsICdkb21Ub1Zub2RlJyB0byBjb252ZXJ0IGl0IHRvIGEgJ1Zub2RlJyBpbnN0YW5jZS5cbiAgICAvLyBQdXNoIHRoZSAnVm5vZGUnIGluc3RhbmNlIHRvIHRoZSAnY2hpbGRyZW4nIGFycmF5LlxuICAgIGlmIChjaGlsZERvbS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgY2hpbGRyZW4ucHVzaChkb21Ub1Zub2RlKGNoaWxkRG9tKSk7XG4gICAgfVxuICB9XG5cbiAgbGV0IHByb3BzOiBWbm9kZVByb3BlcnRpZXMgPSB7fTtcbiAgLy8gSXRlcmF0ZSB0aHJvdWdoIGFsbCBhdHRyaWJ1dGVzIG9mICdkb20nLlxuICBmb3IgKGxldCBpID0gMCwgbCA9IGRvbS5hdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGxldCBhdHRyID0gZG9tLmF0dHJpYnV0ZXNbaV07XG4gICAgLy8gQWRkIHRoZSBhdHRyaWJ1dGUgdG8gdGhlICdwcm9wcycgb2JqZWN0LCB1c2luZyB0aGUgYXR0cmlidXRlJ3MgbmFtZSBhcyB0aGUga2V5IGFuZCBpdHMgdmFsdWUgYXMgdGhlIHZhbHVlLlxuICAgIHByb3BzW2F0dHIubm9kZU5hbWVdID0gYXR0ci5ub2RlVmFsdWU7XG4gIH1cblxuICAvLyBDcmVhdGUgYSBuZXcgJ1Zub2RlJyBpbnN0YW5jZSB3aXRoIHRoZSAndGFnJyBwcm9wZXJ0eSBzZXQgdG8gdGhlIGxvd2VyY2FzZSB2ZXJzaW9uIG9mIHRoZSBET00gbm9kZSdzIHRhZyBuYW1lLlxuICAvLyBTZXQgdGhlICdwcm9wcycgYW5kICdjaGlsZHJlbicgcHJvcGVydGllcyB0byB0aGUgJ3Byb3BzJyBhbmQgJ2NoaWxkcmVuJyBhcnJheXMgcmVzcGVjdGl2ZWx5LlxuICAvLyBTZXQgdGhlICdkb20nIHByb3BlcnR5IG9mIHRoZSAnVm5vZGUnIGluc3RhbmNlIHRvIHRoZSBET00gbm9kZS5cbiAgbGV0IHZub2RlID0gbmV3IFZub2RlKGRvbS50YWdOYW1lLnRvTG93ZXJDYXNlKCksIHByb3BzLCBjaGlsZHJlbik7XG4gIHZub2RlLmRvbSA9IGRvbTtcbiAgcmV0dXJuIHZub2RlIGFzIFZub2RlV2l0aERvbTtcbn1cblxuLy8gVGhpcyBmdW5jdGlvbiB0YWtlcyBpbiBhbiBIVE1MIHN0cmluZyBhbmQgY3JlYXRlcyBhIHZpcnR1YWwgbm9kZSByZXByZXNlbnRhdGlvbiBvZiBpdFxuLy8gdXNpbmcgdGhlIGBkb21Ub1Zub2RlYCBmdW5jdGlvbi4gSXQgZG9lcyB0aGlzIGJ5IGNyZWF0aW5nIGEgbmV3IGBkaXZgIGVsZW1lbnQsIHNldHRpbmdcbi8vIGl0cyBgaW5uZXJIVE1MYCB0byB0aGUgcHJvdmlkZWQgSFRNTCBzdHJpbmcsIGFuZCB0aGVuIHVzaW5nIGBtYXBgIHRvIGl0ZXJhdGUgb3ZlciB0aGVcbi8vIGBjaGlsZE5vZGVzYCBvZiB0aGUgYGRpdmAgZWxlbWVudCwgcGFzc2luZyBlYWNoIG9uZSB0byBgZG9tVG9Wbm9kZWAgdG8gY3JlYXRlIGEgdmlydHVhbFxuLy8gbm9kZSByZXByZXNlbnRhdGlvbiBvZiBpdC4gVGhlIHJlc3VsdGluZyBhcnJheSBvZiB2aXJ0dWFsIG5vZGVzIGlzIHRoZW4gcmV0dXJuZWQuXG5leHBvcnQgZnVuY3Rpb24gdHJ1c3QoaHRtbFN0cmluZzogc3RyaW5nKSB7XG4gIGxldCBkaXYgPSBjcmVhdGVEb21FbGVtZW50KFwiZGl2XCIpO1xuICBkaXYuaW5uZXJIVE1MID0gaHRtbFN0cmluZy50cmltKCk7XG5cbiAgcmV0dXJuIFtdLm1hcC5jYWxsKGRpdi5jaGlsZE5vZGVzLCAoaXRlbSkgPT4gZG9tVG9Wbm9kZShpdGVtKSk7XG59XG5cbi8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4vKiBNYWluIENvbXBvbmVudCBpbXBsZW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqL1xuLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi9cblxuLy8gVGhlc2UgdmFyaWFibGVzIGFyZSB1c2VkIHRvIHN0b3JlIHRoZSBtYWluIGNvbXBvbmVudCwgdGhlIG1haW4gdmlydHVhbCBub2RlLCBhbmQgd2hldGhlclxuLy8gdGhlIG1haW4gY29tcG9uZW50IGlzIGN1cnJlbnRseSBtb3VudGVkLlxubGV0IG1haW5Db21wb25lbnQ6IFZub2RlQ29tcG9uZW50SW50ZXJmYWNlIHwgbnVsbCA9IG51bGw7XG5sZXQgbWFpblZub2RlOiBWbm9kZVdpdGhEb20gfCBudWxsID0gbnVsbDtcbmxldCBpc01vdW50ZWQgPSBmYWxzZTtcblxuLy8gVGhpcyBvYmplY3QgaXMgdXNlZCB0byBzdG9yZSB0aGUgY3VycmVudCB2aXJ0dWFsIG5vZGUgYW5kIGNvbXBvbmVudCBiZWluZyByZW5kZXJlZC5cbmV4cG9ydCBjb25zdCBjdXJyZW50OiBDdXJyZW50ID0ge1xuICB2bm9kZTogbnVsbCxcbiAgb2xkVm5vZGU6IG51bGwsXG4gIGNvbXBvbmVudDogbnVsbFxufTtcblxuLyogUmVzZXJ2ZWQgcHJvcHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi8vIFRoaXMgb2JqZWN0IGlzIHVzZWQgdG8gc3RvcmUgdGhlIG5hbWVzIG9mIHJlc2VydmVkIHByb3BzLCB3aGljaCBhcmUgcHJvcHMgdGhhdCBhcmUgcmVzZXJ2ZWRcbi8vIGZvciBzcGVjaWFsIHB1cnBvc2VzIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgYXMgcmVndWxhciBjb21wb25lbnQgcHJvcHMuXG5leHBvcnQgY29uc3QgcmVzZXJ2ZWRQcm9wczogUmVjb3JkPHN0cmluZywgdHJ1ZT4gPSB7XG4gIGtleTogdHJ1ZSxcbiAgc3RhdGU6IHRydWUsXG4gIFwidi1rZWVwXCI6IHRydWUsXG5cbiAgLy8gQnVpbHQgaW4gZGlyZWN0aXZlc1xuICBcInYtaWZcIjogdHJ1ZSxcbiAgXCJ2LXVubGVzc1wiOiB0cnVlLFxuICBcInYtZm9yXCI6IHRydWUsXG4gIFwidi1zaG93XCI6IHRydWUsXG4gIFwidi1jbGFzc1wiOiB0cnVlLFxuICBcInYtaHRtbFwiOiB0cnVlLFxuICBcInYtbW9kZWxcIjogdHJ1ZSxcbiAgXCJ2LWNyZWF0ZVwiOiB0cnVlLFxuICBcInYtdXBkYXRlXCI6IHRydWUsXG4gIFwidi1jbGVhbnVwXCI6IHRydWVcbn07XG5cbi8qIE1vdW50aW5nLCBVcGRhdGluZywgQ2xlYW51cCBhbmQgVW5tb3VudGluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vLyBUaGVzZSBzZXRzIGFyZSB1c2VkIHRvIHN0b3JlIGNhbGxiYWNrcyBmb3IgdmFyaW91cyBsaWZlY3ljbGUgZXZlbnRzOiBtb3VudGluZywgdXBkYXRpbmcsXG4vLyBjbGVhbmluZyB1cCwgYW5kIHVubW91bnRpbmcuXG5jb25zdCBvbkNsZWFudXBTZXQ6IFNldDxGdW5jdGlvbj4gPSBuZXcgU2V0KCk7XG5jb25zdCBvbk1vdW50U2V0OiBTZXQ8RnVuY3Rpb24+ID0gbmV3IFNldCgpO1xuY29uc3Qgb25VcGRhdGVTZXQ6IFNldDxGdW5jdGlvbj4gPSBuZXcgU2V0KCk7XG5jb25zdCBvblVubW91bnRTZXQ6IFNldDxGdW5jdGlvbj4gPSBuZXcgU2V0KCk7XG5cbi8vIFRoZXNlIGZ1bmN0aW9ucyBhbGxvdyB1c2VycyB0byByZWdpc3RlciBjYWxsYmFja3MgZm9yIHRoZSBjb3JyZXNwb25kaW5nIGxpZmVjeWNsZSBldmVudHMuXG5leHBvcnQgZnVuY3Rpb24gb25Nb3VudChjYWxsYmFjaykge1xuICBpZiAoIWlzTW91bnRlZCkge1xuICAgIG9uTW91bnRTZXQuYWRkKGNhbGxiYWNrKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb25VcGRhdGUoY2FsbGJhY2spIHtcbiAgb25VcGRhdGVTZXQuYWRkKGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uQ2xlYW51cChjYWxsYmFjaykge1xuICBvbkNsZWFudXBTZXQuYWRkKGNhbGxiYWNrKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9uVW5tb3VudChjYWxsYmFjaykge1xuICBpZiAoIWlzTW91bnRlZCkge1xuICAgIG9uVW5tb3VudFNldC5hZGQoY2FsbGJhY2spO1xuICB9XG59XG5cbi8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBjYWxsIGFsbCB0aGUgY2FsbGJhY2tzIGluIGEgZ2l2ZW4gc2V0LlxuZnVuY3Rpb24gY2FsbFNldChzZXQpIHtcbiAgZm9yIChsZXQgY2FsbGJhY2sgb2Ygc2V0KSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxuXG4gIHNldC5jbGVhcigpO1xufVxuXG4vKiBFdmVudCBsaXN0ZW5lciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vLyBUaGlzIG9iamVjdCBzdG9yZXMgdGhlIG5hbWVzIG9mIGV2ZW50IGxpc3RlbmVycyB0aGF0IGhhdmUgYmVlbiBhZGRlZFxuY29uc3QgZXZlbnRMaXN0ZW5lck5hbWVzOiBSZWNvcmQ8c3RyaW5nLCB0cnVlPiA9IHt9O1xuXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIGFuIGV2ZW50IG9jY3Vyc1xuZnVuY3Rpb24gZXZlbnRMaXN0ZW5lcihlOiBFdmVudCkge1xuICAvLyBDb252ZXJ0IHRoZSB0YXJnZXQgb2YgdGhlIGV2ZW50IHRvIGEgRE9NIGVsZW1lbnRcbiAgbGV0IGRvbSA9IGUudGFyZ2V0IGFzIERvbUVsZW1lbnQ7XG5cbiAgLy8gQ3JlYXRlIHRoZSBuYW1lIG9mIHRoZSBldmVudCBsaXN0ZW5lciBieSBhZGRpbmcgXCJ2LW9uXCIgdG8gdGhlIGV2ZW50IHR5cGVcbiAgbGV0IG5hbWUgPSBgdi1vbiR7ZS50eXBlfWA7XG5cbiAgLy8gS2VlcCBnb2luZyB1cCB0aGUgRE9NIHRyZWUgdW50aWwgd2UgZmluZCBhbiBlbGVtZW50IHdpdGggYW4gZXZlbnQgbGlzdGVuZXJcbiAgLy8gbWF0Y2hpbmcgdGhlIGV2ZW50IHR5cGVcbiAgd2hpbGUgKGRvbSkge1xuICAgIGlmIChkb21bbmFtZV0pIHtcbiAgICAgIC8vIENhbGwgdGhlIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uXG4gICAgICBkb21bbmFtZV0oZSwgZG9tKTtcblxuICAgICAgLy8gSWYgdGhlIGRlZmF1bHQgYWN0aW9uIG9mIHRoZSBldmVudCBoYXNuJ3QgYmVlbiBwcmV2ZW50ZWQsIHVwZGF0ZSB0aGUgRE9NXG4gICAgICBpZiAoIWUuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICB1cGRhdGUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZG9tID0gZG9tLnBhcmVudE5vZGUgYXMgRG9tRWxlbWVudDtcbiAgfVxufVxuXG4vKiBEaXJlY3RpdmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vLyBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSBkaXJlY3RpdmUgdGhhdCBoaWRlcyBhbiBlbGVtZW50IGJhc2VkIG9uIGEgY29uZGl0aW9uXG5sZXQgaGlkZURpcmVjdGl2ZSA9ICh0ZXN0OiBib29sZWFuKSA9PiAoYm9vbDogYm9vbGVhbiwgdm5vZGU6IFZub2RlSW50ZXJmYWNlLCBvbGRub2RlPzogVm5vZGVJbnRlcmZhY2UpID0+IHtcbiAgLy8gSWYgdGVzdCBpcyB0cnVlLCB1c2UgdGhlIHZhbHVlIG9mIGJvb2wuIE90aGVyd2lzZSwgdXNlIHRoZSBvcHBvc2l0ZSBvZiBib29sLlxuICBsZXQgdmFsdWUgPSB0ZXN0ID8gYm9vbCA6ICFib29sO1xuXG4gIC8vIElmIHRoZSB2YWx1ZSBpcyB0cnVlLCBoaWRlIHRoZSBlbGVtZW50IGJ5IHJlcGxhY2luZyBpdCB3aXRoIGEgdGV4dCBub2RlXG4gIGlmICh2YWx1ZSkge1xuICAgIGxldCBuZXdkb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtcbiAgICBpZiAob2xkbm9kZSAmJiBvbGRub2RlLmRvbSAmJiBvbGRub2RlLmRvbS5wYXJlbnROb2RlKSB7XG4gICAgICBvbGRub2RlLmRvbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdkb20sIG9sZG5vZGUuZG9tKTtcbiAgICB9XG4gICAgdm5vZGUudGFnID0gXCIjdGV4dFwiO1xuICAgIHZub2RlLmNoaWxkcmVuID0gW107XG4gICAgdm5vZGUucHJvcHMgPSB7fTtcbiAgICB2bm9kZS5kb20gPSBuZXdkb20gYXMgdW5rbm93biBhcyBEb21FbGVtZW50O1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufTtcblxuLy8gVGhpcyBvYmplY3Qgc3RvcmVzIGFsbCB0aGUgYXZhaWxhYmxlIGRpcmVjdGl2ZXNcbmV4cG9ydCBjb25zdCBkaXJlY3RpdmVzOiBEaXJlY3RpdmVzID0ge1xuICAvLyBUaGUgXCJ2LWlmXCIgZGlyZWN0aXZlIGhpZGVzIGFuIGVsZW1lbnQgaWYgdGhlIGdpdmVuIGNvbmRpdGlvbiBpcyBmYWxzZVxuICBcInYtaWZcIjogaGlkZURpcmVjdGl2ZShmYWxzZSksXG5cbiAgLy8gVGhlIFwidi11bmxlc3NcIiBkaXJlY3RpdmUgaGlkZXMgYW4gZWxlbWVudCBpZiB0aGUgZ2l2ZW4gY29uZGl0aW9uIGlzIHRydWVcbiAgXCJ2LXVubGVzc1wiOiBoaWRlRGlyZWN0aXZlKHRydWUpLFxuXG4gIC8vIFRoZSBcInYtZm9yXCIgZGlyZWN0aXZlIGNyZWF0ZXMgYSBsb29wIGFuZCBhcHBsaWVzIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gZWFjaCBpdGVtIGluIHRoZSBsb29wXG4gIFwidi1mb3JcIjogKHNldDogdW5rbm93bltdLCB2bm9kZTogVm5vZGVXaXRoRG9tKSA9PiB7XG4gICAgbGV0IG5ld0NoaWxkcmVuOiBWbm9kZUludGVyZmFjZVtdID0gW107XG4gICAgbGV0IGNhbGxiYWNrID0gdm5vZGUuY2hpbGRyZW5bMF07XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBzZXQubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBuZXdDaGlsZHJlbi5wdXNoKGNhbGxiYWNrKHNldFtpXSwgaSkpO1xuICAgIH1cbiAgICB2bm9kZS5jaGlsZHJlbiA9IG5ld0NoaWxkcmVuO1xuICB9LFxuXG4gIC8vIFRoZSBcInYtc2hvd1wiIGRpcmVjdGl2ZSBzaG93cyBvciBoaWRlcyBhbiBlbGVtZW50IGJ5IHNldHRpbmcgdGhlIFwiZGlzcGxheVwiIHN0eWxlIHByb3BlcnR5XG4gIFwidi1zaG93XCI6IChib29sOiBib29sZWFuLCB2bm9kZTogVm5vZGVXaXRoRG9tKSA9PiB7XG4gICAgKFxuICAgICAgdm5vZGUuZG9tIGFzIHVua25vd24gYXMge1xuICAgICAgICBzdHlsZTogeyBkaXNwbGF5OiBzdHJpbmcgfTtcbiAgICAgIH1cbiAgICApLnN0eWxlLmRpc3BsYXkgPSBib29sID8gXCJcIiA6IFwibm9uZVwiO1xuICB9LFxuXG4gIC8vIFRoZSBcInYtY2xhc3NcIiBkaXJlY3RpdmUgYWRkcyBvciByZW1vdmVzIGNsYXNzIG5hbWVzIGZyb20gYW4gZWxlbWVudCBiYXNlZCBvbiBhIGNvbmRpdGlvblxuICBcInYtY2xhc3NcIjogKGNsYXNzZXM6IHsgW3g6IHN0cmluZ106IGJvb2xlYW4gfSwgdm5vZGU6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgIC8vIExvb3AgdGhyb3VnaCBhbGwgdGhlIGNsYXNzIG5hbWVzIGluIHRoZSBjbGFzc2VzIG9iamVjdFxuICAgIGZvciAobGV0IG5hbWUgaW4gY2xhc3Nlcykge1xuICAgICAgLy8gQWRkIG9yIHJlbW92ZSB0aGUgY2xhc3MgbmFtZSBmcm9tIHRoZSBlbGVtZW50J3MgY2xhc3MgbGlzdCBiYXNlZCBvbiB0aGUgdmFsdWUgaW4gdGhlIGNsYXNzZXMgb2JqZWN0XG4gICAgICAodm5vZGUuZG9tIGFzIERvbUVsZW1lbnQpLmNsYXNzTGlzdC50b2dnbGUobmFtZSwgY2xhc3Nlc1tuYW1lXSk7XG4gICAgfVxuICB9LFxuXG4gIC8vIFRoZSBcInYtaHRtbFwiIGRpcmVjdGl2ZSBzZXRzIHRoZSBpbm5lciBIVE1MIG9mIGFuIGVsZW1lbnQgdG8gdGhlIGdpdmVuIEhUTUwgc3RyaW5nXG4gIFwidi1odG1sXCI6IChodG1sOiBzdHJpbmcsIHZub2RlOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICAvLyBTZXQgdGhlIGNoaWxkcmVuIG9mIHRoZSB2bm9kZSB0byBhIHRydXN0ZWQgdmVyc2lvbiBvZiB0aGUgSFRNTCBzdHJpbmdcbiAgICB2bm9kZS5jaGlsZHJlbiA9IFt0cnVzdChodG1sKV07XG4gIH0sXG5cbiAgLy8gVGhlIFwidi1tb2RlbFwiIGRpcmVjdGl2ZSBiaW5kcyB0aGUgdmFsdWUgb2YgYW4gaW5wdXQgZWxlbWVudCB0byBhIG1vZGVsIHByb3BlcnR5XG4gIFwidi1tb2RlbFwiOiAoW21vZGVsLCBwcm9wZXJ0eSwgZXZlbnRdOiBhbnlbXSwgdm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICBsZXQgdmFsdWU7XG4gICAgLy8gVGhpcyBmdW5jdGlvbiB1cGRhdGVzIHRoZSBtb2RlbCBwcm9wZXJ0eSB3aGVuIHRoZSBpbnB1dCBlbGVtZW50J3MgdmFsdWUgY2hhbmdlc1xuICAgIGxldCBoYW5kbGVyID0gKGU6IEV2ZW50KSA9PiAobW9kZWxbcHJvcGVydHldID0gKGUudGFyZ2V0IGFzIERvbUVsZW1lbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+KS52YWx1ZSk7XG4gICAgaWYgKHZub2RlLnRhZyA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICAvLyBJZiB0aGUgZWxlbWVudCBpcyBhbiBpbnB1dCwgdXNlIHRoZSBcImlucHV0XCIgZXZlbnQgYnkgZGVmYXVsdFxuICAgICAgZXZlbnQgPSBldmVudCB8fCBcIm9uaW5wdXRcIjtcbiAgICAgIC8vIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBpbnB1dCBlbGVtZW50LCB1c2UgYSBkaWZmZXJlbnQgaGFuZGxlciBmdW5jdGlvblxuICAgICAgc3dpdGNoICh2bm9kZS5wcm9wcy50eXBlKSB7XG4gICAgICAgIGNhc2UgXCJjaGVja2JveFwiOiB7XG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobW9kZWxbcHJvcGVydHldKSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIG1vZGVsIHByb3BlcnR5IGlzIGFuIGFycmF5LCBhZGQgb3IgcmVtb3ZlIHRoZSB2YWx1ZSBmcm9tIHRoZSBhcnJheSB3aGVuIHRoZSBjaGVja2JveCBpcyBjaGVja2VkIG9yIHVuY2hlY2tlZFxuICAgICAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgICBsZXQgdmFsID0gKGUudGFyZ2V0IGFzIERvbUVsZW1lbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+KS52YWx1ZTtcbiAgICAgICAgICAgICAgbGV0IGlkeCA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZhbCk7XG4gICAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgaW4gdGhlIGFycmF5LCBzZXQgdGhlIGNoZWNrYm94IHRvIGJlIGNoZWNrZWRcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2Yodm5vZGUuZG9tLnZhbHVlKSAhPT0gLTE7XG4gICAgICAgICAgfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gdm5vZGUucHJvcHMpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dCBlbGVtZW50IGhhcyBhIFwidmFsdWVcIiBhdHRyaWJ1dGUsIHVzZSBpdCB0byBkZXRlcm1pbmUgdGhlIGNoZWNrZWQgc3RhdGVcbiAgICAgICAgICAgIGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLnByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldID0gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0gPSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldID09PSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gXCJ2YWx1ZVwiIGF0dHJpYnV0ZSwgdXNlIGEgYm9vbGVhbiB2YWx1ZSBmb3IgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgICAgICBoYW5kbGVyID0gKCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9ICFtb2RlbFtwcm9wZXJ0eV0pO1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNldCB0aGUgXCJjaGVja2VkXCIgYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBlbGVtZW50XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCB2YWx1ZSwgdm5vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJyYWRpb1wiOiB7XG4gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSByYWRpbyBidXR0b24sIHNldCB0aGUgXCJjaGVja2VkXCIgYXR0cmlidXRlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZWwgcHJvcGVydHlcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICBzaGFyZWRTZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIG1vZGVsW3Byb3BlcnR5XSA9PT0gdm5vZGUuZG9tLnZhbHVlLCB2bm9kZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIC8vIEZvciBhbGwgb3RoZXIgaW5wdXQgdHlwZXMsIHNldCB0aGUgXCJ2YWx1ZVwiIGF0dHJpYnV0ZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKFwidmFsdWVcIiwgbW9kZWxbcHJvcGVydHldLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSBzZWxlY3QgZWxlbWVudCwgdXNlIHRoZSBcImNsaWNrXCIgZXZlbnQgYnkgZGVmYXVsdFxuICAgICAgZXZlbnQgPSBldmVudCB8fCBcIm9uY2xpY2tcIjtcbiAgICAgIGlmICh2bm9kZS5wcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICAvLyBJZiB0aGUgc2VsZWN0IGVsZW1lbnQgYWxsb3dzIG11bHRpcGxlIHNlbGVjdGlvbnMsIHVwZGF0ZSB0aGUgbW9kZWwgcHJvcGVydHkgd2l0aCBhbiBhcnJheSBvZiBzZWxlY3RlZCB2YWx1ZXNcbiAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHtcbiAgICAgICAgICBsZXQgdmFsID0gKGUudGFyZ2V0IGFzIERvbUVsZW1lbnQgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+KS52YWx1ZTtcbiAgICAgICAgICBpZiAoZS5jdHJsS2V5KSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgQ3RybCBrZXkgaXMgcHJlc3NlZCwgYWRkIG9yIHJlbW92ZSB0aGUgdmFsdWUgZnJvbSB0aGUgYXJyYXlcbiAgICAgICAgICAgIGxldCBpZHggPSBtb2RlbFtwcm9wZXJ0eV0uaW5kZXhPZih2YWwpO1xuICAgICAgICAgICAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlIEN0cmwga2V5IGlzIG5vdCBwcmVzc2VkLCBzZXQgdGhlIG1vZGVsIHByb3BlcnR5IHRvIGFuIGFycmF5IHdpdGggdGhlIHNlbGVjdGVkIHZhbHVlXG4gICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKDAsIG1vZGVsW3Byb3BlcnR5XS5sZW5ndGgpO1xuICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIFNldCB0aGUgXCJzZWxlY3RlZFwiIGF0dHJpYnV0ZSBvbiB0aGUgb3B0aW9ucyBiYXNlZCBvbiB3aGV0aGVyIHRoZXkgYXJlIGluIHRoZSBtb2RlbCBwcm9wZXJ0eSBhcnJheVxuICAgICAgICB2bm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZDogVm5vZGVJbnRlcmZhY2UpID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBcInZhbHVlXCIgaW4gY2hpbGQucHJvcHMgPyBjaGlsZC5wcm9wcy52YWx1ZSA6IGNoaWxkLmNoaWxkcmVuLmpvaW4oXCJcIikudHJpbSgpO1xuICAgICAgICAgICAgY2hpbGQucHJvcHMuc2VsZWN0ZWQgPSBtb2RlbFtwcm9wZXJ0eV0uaW5kZXhPZih2YWx1ZSkgIT09IC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBJZiB0aGUgc2VsZWN0IGVsZW1lbnQgZG9lcyBub3QgYWxsb3cgbXVsdGlwbGUgc2VsZWN0aW9ucywgc2V0IHRoZSBcInNlbGVjdGVkXCIgYXR0cmlidXRlIG9uIHRoZSBvcHRpb25zIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZWwgcHJvcGVydHlcbiAgICAgICAgdm5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IFZub2RlSW50ZXJmYWNlKSA9PiB7XG4gICAgICAgICAgaWYgKGNoaWxkLnRhZyA9PT0gXCJvcHRpb25cIikge1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gXCJ2YWx1ZVwiIGluIGNoaWxkLnByb3BzID8gY2hpbGQucHJvcHMudmFsdWUgOiBjaGlsZC5jaGlsZHJlbi5qb2luKFwiXCIpLnRyaW0oKTtcbiAgICAgICAgICAgIGNoaWxkLnByb3BzLnNlbGVjdGVkID0gdmFsdWUgPT09IG1vZGVsW3Byb3BlcnR5XTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodm5vZGUudGFnID09PSBcInRleHRhcmVhXCIpIHtcbiAgICAgIC8vIElmIHRoZSBlbGVtZW50IGlzIGEgdGV4dGFyZWEsIHVzZSB0aGUgXCJpbnB1dFwiIGV2ZW50IGJ5IGRlZmF1bHRcbiAgICAgIGV2ZW50ID0gZXZlbnQgfHwgXCJvbmlucHV0XCI7XG4gICAgICAvLyBTZXQgdGhlIHRleHRhcmVhJ3MgY29udGVudCB0byB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICB2bm9kZS5jaGlsZHJlbiA9IFttb2RlbFtwcm9wZXJ0eV1dO1xuICAgIH1cblxuICAgIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBwcmV2IGhhbmRsZXIgaWYgYW55IHdpbGwgbm90IGJlIGNoYW5nZWQgYnkgdGhlIHVzZXIgYWNyb3NzIHBhdGNoc1xuICAgIGxldCBwcmV2SGFuZGxlciA9IHZub2RlLnByb3BzW2V2ZW50XTtcblxuICAgIC8vIFNldCB0aGUgZXZlbnQgaGFuZGxlciBvbiB0aGUgZWxlbWVudFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgIHNoYXJlZFNldEF0dHJpYnV0ZShcbiAgICAgIGV2ZW50LFxuICAgICAgKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgIGhhbmRsZXIoZSk7XG5cbiAgICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIGhhbmRsZXIgaXMgZGVmaW5lZCwgY2FsbCBpdCBhZnRlciB0aGUgbW9kZWwgaGFzIGJlZW4gdXBkYXRlZFxuICAgICAgICBpZiAocHJldkhhbmRsZXIpIHtcbiAgICAgICAgICBwcmV2SGFuZGxlcihlKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHZub2RlLFxuICAgICAgb2xkVm5vZGVcbiAgICApO1xuICB9LFxuXG4gIC8vIFRoZSBcInYtY3JlYXRlXCIgZGlyZWN0aXZlIGlzIGNhbGxlZCB3aGVuIGEgbmV3IHZpcnR1YWwgbm9kZSBpcyBjcmVhdGVkLlxuICAvLyBUaGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIG5ldyB2aXJ0dWFsIG5vZGUgYXMgYW4gYXJndW1lbnQuXG4gIC8vIFRoaXMgZGlyZWN0aXZlIGlzIG9ubHkgY2FsbGVkIG9uY2UgcGVyIHZpcnR1YWwgbm9kZSwgd2hlbiBpdCBpcyBmaXJzdCBjcmVhdGVkLlxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgXCJ2LWNyZWF0ZVwiOiAoY2FsbGJhY2s6ICh2bm9kZTogVm5vZGVXaXRoRG9tKSA9PiB2b2lkLCB2bm9kZTogVm5vZGVXaXRoRG9tLCBvbGRWbm9kZT86IFZub2RlV2l0aERvbSkgPT4ge1xuICAgIC8vIElmIHRoaXMgaXMgbm90IGFuIHVwZGF0ZSwgY2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgbmV3IHZpcnR1YWwgbm9kZVxuICAgIGlmICghb2xkVm5vZGUpIHtcbiAgICAgIGxldCBjbGVhbnVwID0gY2FsbGJhY2sodm5vZGUpO1xuXG4gICAgICAvLyBJZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmV0dXJucyBhIGZ1bmN0aW9uLCBjYWxsIGl0IHdoZW4gdGhlIHVwZGF0ZSBpcyBnb25uYSBiZSBjbGVhbmVkIHVwXG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsZWFudXAoY2xlYW51cCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIFRoZSBcInYtdXBkYXRlXCIgZGlyZWN0aXZlIGlzIGNhbGxlZCB3aGVuIGFuIGV4aXN0aW5nIHZpcnR1YWwgbm9kZSBpcyB1cGRhdGVkLlxuICAvLyBUaGUgcHJvdmlkZWQgY2FsbGJhY2sgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggdGhlIG5ldyBhbmQgb2xkIHZpcnR1YWwgbm9kZXMgYXMgYXJndW1lbnRzLlxuICAvLyBUaGlzIGRpcmVjdGl2ZSBpcyBvbmx5IGNhbGxlZCBvbmNlIHBlciB2aXJ0dWFsIG5vZGUgdXBkYXRlLlxuICBcInYtdXBkYXRlXCI6IChcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbiAgICBjYWxsYmFjazogKHZub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlOiBWbm9kZVdpdGhEb20pID0+IHZvaWQsXG4gICAgdm5vZGU6IFZub2RlV2l0aERvbSxcbiAgICBvbGRWbm9kZT86IFZub2RlV2l0aERvbVxuICApID0+IHtcbiAgICAvLyBJZiB0aGlzIGlzIGFuIHVwZGF0ZSwgY2FsbCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2l0aCB0aGUgbmV3IGFuZCBvbGQgdmlydHVhbCBub2Rlc1xuICAgIGlmIChvbGRWbm9kZSkge1xuICAgICAgbGV0IGNsZWFudXAgPSBjYWxsYmFjayh2bm9kZSwgb2xkVm5vZGUpO1xuXG4gICAgICAvLyBJZiB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gcmV0dXJucyBhIGZ1bmN0aW9uLCBjYWxsIGl0IHdoZW4gdGhlIHVwZGF0ZSBpcyBnb25uYSBiZSBjbGVhbmVkIHVwXG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsZWFudXAoY2xlYW51cCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIC8vIFRoZSBcInYtY2xlYW51cFwiIGRpcmVjdGl2ZSBpcyBjYWxsZWQgd2hlbiB0aGUgdXBkYXRlIGlzIGNsZWFuZWQgdXAuXG4gIC8vIFRoZSBwcm92aWRlZCBjYWxsYmFjayBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgb2xkIHZpcnR1YWwgbm9kZSBhcyBhbiBhcmd1bWVudC5cbiAgLy8gVGhpcyBkaXJlY3RpdmUgaXMgb25seSBjYWxsZWQgb25jZSBwZXIgdmlydHVhbCBub2RlLCB3aGVuIHRoZSB1cGRhdGUgaXMgY2xlYW5lZCB1cC5cbiAgXCJ2LWNsZWFudXBcIjogKFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xuICAgIGNhbGxiYWNrOiAodm5vZGU6IFZub2RlV2l0aERvbSwgb2xkVm5vZGU/OiBWbm9kZVdpdGhEb20pID0+IHZvaWQsXG4gICAgdm5vZGU6IFZub2RlV2l0aERvbSxcbiAgICBvbGRWbm9kZT86IFZub2RlV2l0aERvbVxuICApID0+IHtcbiAgICAvLyBBZGQgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIHRoZSBsaXN0IG9mIGNsZWFudXAgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCB3aGVuIHRoZSB1cGRhdGUgaXMgY2xlYW5lZCB1cFxuICAgIG9uQ2xlYW51cCgoKSA9PiBjYWxsYmFjayh2bm9kZSwgb2xkVm5vZGUpKTtcbiAgfVxufTtcbi8vIEFkZCBhIGRpcmVjdGl2ZSB0byB0aGUgZ2xvYmFsIGRpcmVjdGl2ZXMgb2JqZWN0LCB3aXRoIHRoZSBrZXkgYmVpbmcgdGhlIG5hbWVcbi8vIHByZWNlZGVkIGJ5IFwidi1cIi4gQWxzbyBhZGQgdGhlIG5hbWUgdG8gdGhlIGdsb2JhbCByZXNlcnZlZFByb3BzIG9iamVjdC5cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmU6IERpcmVjdGl2ZSkge1xuICBsZXQgZGlyZWN0aXZlTmFtZSA9IGB2LSR7bmFtZX1gO1xuICBkaXJlY3RpdmVzW2RpcmVjdGl2ZU5hbWVdID0gZGlyZWN0aXZlO1xuICByZXNlcnZlZFByb3BzW2RpcmVjdGl2ZU5hbWVdID0gdHJ1ZTtcbn1cblxuLy8gU2V0IGFuIGF0dHJpYnV0ZSBvbiBhIHZpcnR1YWwgRE9NIG5vZGUgYW5kIHVwZGF0ZSB0aGUgYWN0dWFsIERPTSBlbGVtZW50LlxuLy8gSWYgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBpcyBhIGZ1bmN0aW9uLCBhZGQgYW4gZXZlbnQgbGlzdGVuZXIgZm9yIHRoZSBhdHRyaWJ1dGVcbi8vIG5hbWUgdG8gdGhlIERPTSBlbGVtZW50IHJlcHJlc2VudGVkIGJ5IG1haW5Wbm9kZS5cbi8vIElmIG9sZFZub2RlIGlzIHByb3ZpZGVkLCBjb21wYXJlIHRoZSBuZXcgYXR0cmlidXRlIHZhbHVlIHRvIHRoZSBvbGQgdmFsdWVcbi8vIGFuZCBvbmx5IHVwZGF0ZSB0aGUgYXR0cmlidXRlIGlmIHRoZSB2YWx1ZXMgYXJlIGRpZmZlcmVudC5cbmZ1bmN0aW9uIHNoYXJlZFNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG5ld1Zub2RlOiBWbm9kZVdpdGhEb20sIG9sZFZub2RlPzogVm5vZGVXaXRoRG9tKTogdm9pZCB8IGJvb2xlYW4ge1xuICAvLyBJZiB0aGUgYXR0cmlidXRlIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGFkZCBhbiBldmVudCBsaXN0ZW5lciBmb3IgdGhlIGF0dHJpYnV0ZVxuICAvLyBuYW1lIHRvIHRoZSBET00gZWxlbWVudCByZXByZXNlbnRlZCBieSBtYWluVm5vZGUuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIC8vIE9ubHkgYWRkIHRoZSBldmVudCBsaXN0ZW5lciBpZiBpdCBoYXNuJ3QgYmVlbiBhZGRlZCB5ZXQuXG4gICAgaWYgKG5hbWUgaW4gZXZlbnRMaXN0ZW5lck5hbWVzID09PSBmYWxzZSkge1xuICAgICAgKG1haW5Wbm9kZSBhcyBWbm9kZVdpdGhEb20pLmRvbS5hZGRFdmVudExpc3RlbmVyKG5hbWUuc2xpY2UoMiksIGV2ZW50TGlzdGVuZXIpO1xuICAgICAgZXZlbnRMaXN0ZW5lck5hbWVzW25hbWVdID0gdHJ1ZTtcbiAgICB9XG4gICAgbmV3Vm5vZGUuZG9tW2B2LSR7bmFtZX1gXSA9IHZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHRoZSBhdHRyaWJ1dGUgaXMgcHJlc2VudCBvbiB0aGUgRE9NIGVsZW1lbnQgYW5kIG5ld1Zub2RlIGlzIG5vdCBhbiBTVkcsXG4gIC8vIHVwZGF0ZSB0aGUgYXR0cmlidXRlIGlmIHRoZSB2YWx1ZSBoYXMgY2hhbmdlZC5cbiAgaWYgKG5hbWUgaW4gbmV3Vm5vZGUuZG9tICYmIG5ld1Zub2RlLmlzU1ZHID09PSBmYWxzZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICBpZiAobmV3Vm5vZGUuZG9tW25hbWVdICE9IHZhbHVlKSB7XG4gICAgICBuZXdWbm9kZS5kb21bbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgb2xkVm5vZGUgaXMgbm90IHByb3ZpZGVkIG9yIHRoZSBhdHRyaWJ1dGUgdmFsdWUgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGVcbiAgLy8gYXR0cmlidXRlIG9uIHRoZSBET00gZWxlbWVudC5cbiAgaWYgKCFvbGRWbm9kZSB8fCB2YWx1ZSAhPT0gb2xkVm5vZGUucHJvcHNbbmFtZV0pIHtcbiAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICBuZXdWbm9kZS5kb20ucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdWbm9kZS5kb20uc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gU2V0IGFuIGF0dHJpYnV0ZSBvbiBhIHZpcnR1YWwgRE9NIG5vZGUgYW5kIHVwZGF0ZSB0aGUgYWN0dWFsIERPTSBlbGVtZW50LlxuLy8gU2tpcCB0aGUgYXR0cmlidXRlIGlmIGl0IGlzIGluIHRoZSByZXNlcnZlZFByb3BzIG9iamVjdC5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBuZXdWbm9kZTogVm5vZGVXaXRoRG9tLCBvbGRWbm9kZT86IFZub2RlV2l0aERvbSk6IHZvaWQge1xuICBpZiAobmFtZSBpbiByZXNlcnZlZFByb3BzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIG5ld1Zub2RlLnByb3BzW25hbWVdID0gdmFsdWU7XG4gIHNoYXJlZFNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgbmV3Vm5vZGUgYXMgVm5vZGVXaXRoRG9tLCBvbGRWbm9kZSk7XG59XG5cbi8vIFVwZGF0ZSB0aGUgYXR0cmlidXRlcyBvbiBhIHZpcnR1YWwgRE9NIG5vZGUuIElmIG9sZFZub2RlIGlzIHByb3ZpZGVkLCByZW1vdmVcbi8vIGF0dHJpYnV0ZXMgZnJvbSB0aGUgRE9NIGVsZW1lbnQgdGhhdCBhcmUgbm90IHByZXNlbnQgaW4gbmV3Vm5vZGUucHJvcHMgYnV0IGFyZVxuLy8gcHJlc2VudCBpbiBvbGRWbm9kZS5wcm9wcy4gVGhlbiwgaXRlcmF0ZSBvdmVyIHRoZSBhdHRyaWJ1dGVzIGluIG5ld1Zub2RlLnByb3BzXG4vLyBhbmQgdXBkYXRlIHRoZSBET00gZWxlbWVudCB3aXRoIHRoZSBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBzaGFyZWRTZXRBdHRyaWJ1dGVcbi8vIGZ1bmN0aW9uLiBJZiBhbiBhdHRyaWJ1dGUgaXMgaW4gdGhlIHJlc2VydmVkUHJvcHMgb2JqZWN0IGFuZCBoYXMgYSBjb3JyZXNwb25kaW5nXG4vLyBkaXJlY3RpdmUgaW4gdGhlIGRpcmVjdGl2ZXMgb2JqZWN0LCBjYWxsIHRoZSBkaXJlY3RpdmUgd2l0aCB0aGUgYXR0cmlidXRlIHZhbHVlXG4vLyBhbmQgdGhlIHR3byB2aXJ0dWFsIERPTSBub2RlcyBhcyBhcmd1bWVudHMuIElmIHRoZSBkaXJlY3RpdmUgcmV0dXJucyBmYWxzZSwgZXhpdFxuLy8gdGhlIGxvb3AuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlcyhuZXdWbm9kZTogVm5vZGVXaXRoRG9tLCBvbGRWbm9kZT86IFZub2RlV2l0aERvbSk6IHZvaWQge1xuICAvLyBJZiBvbGRWbm9kZSBpcyBwcm92aWRlZCwgcmVtb3ZlIGF0dHJpYnV0ZXMgZnJvbSB0aGUgRE9NIGVsZW1lbnQgdGhhdCBhcmUgbm90XG4gIC8vIHByZXNlbnQgaW4gbmV3Vm5vZGUucHJvcHMgYnV0IGFyZSBwcmVzZW50IGluIG9sZFZub2RlLnByb3BzLlxuICBpZiAob2xkVm5vZGUpIHtcbiAgICBmb3IgKGxldCBuYW1lIGluIG9sZFZub2RlLnByb3BzKSB7XG4gICAgICBpZiAobmFtZSBpbiBuZXdWbm9kZS5wcm9wcyA9PT0gZmFsc2UgJiYgbmFtZSBpbiBldmVudExpc3RlbmVyTmFtZXMgPT09IGZhbHNlICYmIG5hbWUgaW4gcmVzZXJ2ZWRQcm9wcyA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gbmV3Vm5vZGUuZG9tICYmIG5ld1Zub2RlLmlzU1ZHID09PSBmYWxzZSkge1xuICAgICAgICAgIG5ld1Zub2RlLmRvbVtuYW1lXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3Vm5vZGUuZG9tLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIEl0ZXJhdGUgb3ZlciB0aGUgYXR0cmlidXRlcyBpbiBuZXdWbm9kZS5wcm9wcyBhbmQgdXBkYXRlIHRoZSBET00gZWxlbWVudCB3aXRoXG4gIC8vIHRoZSBhdHRyaWJ1dGVzIHVzaW5nIHRoZSBzaGFyZWRTZXRBdHRyaWJ1dGUgZnVuY3Rpb24uXG4gIGZvciAobGV0IG5hbWUgaW4gbmV3Vm5vZGUucHJvcHMpIHtcbiAgICBpZiAobmFtZSBpbiByZXNlcnZlZFByb3BzKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhIGRpcmVjdGl2ZSBmb3IgdGhlIGF0dHJpYnV0ZSwgY2FsbCBpdCB3aXRoIHRoZSBhdHRyaWJ1dGUgdmFsdWVcbiAgICAgIC8vIGFuZCB0aGUgdHdvIHZpcnR1YWwgRE9NIG5vZGVzIGFzIGFyZ3VtZW50cy4gSWYgdGhlIGRpcmVjdGl2ZSByZXR1cm5zIGZhbHNlLFxuICAgICAgLy8gZXhpdCB0aGUgbG9vcC5cbiAgICAgIGlmIChuYW1lIGluIGRpcmVjdGl2ZXMgJiYgZGlyZWN0aXZlc1tuYW1lXShuZXdWbm9kZS5wcm9wc1tuYW1lXSwgbmV3Vm5vZGUsIG9sZFZub2RlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgc2hhcmVkU2V0QXR0cmlidXRlKG5hbWUsIG5ld1Zub2RlLnByb3BzW25hbWVdLCBuZXdWbm9kZSwgb2xkVm5vZGUpO1xuICB9XG59XG5cbi8qIHBhdGNoIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLy8gUGF0Y2ggYSBET00gbm9kZSB3aXRoIGEgbmV3IFZOb2RlIHRyZWVcbmV4cG9ydCBmdW5jdGlvbiBwYXRjaChuZXdWbm9kZTogVm5vZGVXaXRoRG9tLCBvbGRWbm9kZT86IFZub2RlV2l0aERvbSk6IHZvaWQge1xuICAvLyBHZXQgdGhlIGNoaWxkcmVuIG9mIHRoZSBuZXcgYW5kIG9sZCB2aXJ0dWFsIERPTSBub2Rlc1xuICBsZXQgbmV3VHJlZSA9IG5ld1Zub2RlLmNoaWxkcmVuO1xuICBsZXQgb2xkVHJlZSA9IG9sZFZub2RlPy5jaGlsZHJlbiB8fCBbXTtcbiAgLy8gR2V0IHRoZSBsZW5ndGggb2YgdGhlIG9sZCB0cmVlXG4gIGxldCBvbGRUcmVlTGVuZ3RoID0gb2xkVHJlZS5sZW5ndGg7XG5cbiAgLy8gSWYgdGhlIG9sZCB0cmVlIGhhcyBjaGlsZHJlbiBhbmQgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBuZXcgdHJlZSBpcyBhIFZOb2RlIHdpdGggYSBcImtleVwiXG4gIC8vIGF0dHJpYnV0ZSBhbmQgdGhlIGZpcnN0IGNoaWxkIG9mIHRoZSBvbGQgdHJlZSBpcyBhIFZOb2RlIHdpdGggYSBcImtleVwiIGF0dHJpYnV0ZSwgdXBkYXRlXG4gIC8vIHRoZSBET00gZWxlbWVudCBpbiBwbGFjZSBieSBjb21wYXJpbmcgdGhlIGtleXMgb2YgdGhlIG5vZGVzIGluIHRoZSB0cmVlcy5cbiAgaWYgKG9sZFRyZWVMZW5ndGggJiYgbmV3VHJlZVswXSBpbnN0YW5jZW9mIFZub2RlICYmIFwia2V5XCIgaW4gbmV3VHJlZVswXS5wcm9wcyAmJiBcImtleVwiIGluIG9sZFRyZWVbMF0ucHJvcHMpIHtcbiAgICAvLyBHZXQgdGhlIGxlbmd0aHMgb2YgdGhlIG5ldyBhbmQgb2xkIHRyZWVzXG4gICAgbGV0IG5ld1RyZWVMZW5ndGggPSBuZXdUcmVlLmxlbmd0aDtcblxuICAgIC8vIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBtYXBzIGtleXMgdG8gaW5kaWNlcyBpbiB0aGUgb2xkIHRyZWVcbiAgICBsZXQgb2xkS2V5ZWRMaXN0OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvbGRUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIG9sZEtleWVkTGlzdFtvbGRUcmVlW2ldLnByb3BzLmtleV0gPSBpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZSBhbiBvYmplY3QgdGhhdCBtYXBzIGtleXMgdG8gaW5kaWNlcyBpbiB0aGUgbmV3IHRyZWVcbiAgICBsZXQgbmV3S2V5ZWRMaXN0OiB7IFtrZXk6IHN0cmluZ106IG51bWJlciB9ID0ge307XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ld0tleWVkTGlzdFtuZXdUcmVlW2ldLnByb3BzLmtleV0gPSBpO1xuICAgIH1cblxuICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgbmV3IHRyZWVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWVMZW5ndGg7IGkrKykge1xuICAgICAgLy8gR2V0IHRoZSBjdXJyZW50IG5ldyBjaGlsZCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgb2xkIGNoaWxkXG4gICAgICBsZXQgbmV3Q2hpbGQgPSBuZXdUcmVlW2ldO1xuICAgICAgbGV0IG9sZENoaWxkID0gb2xkVHJlZVtvbGRLZXllZExpc3RbbmV3Q2hpbGQucHJvcHMua2V5XV07XG4gICAgICAvLyBJbml0aWFsaXplIGEgZmxhZyB0byBkZXRlcm1pbmUgd2hldGhlciB0byBwYXRjaCB0aGUgY2hpbGRcbiAgICAgIGxldCBzaG91bGRQYXRjaCA9IHRydWU7XG5cbiAgICAgIC8vIElmIHRoZSBvbGQgY2hpbGQgZXhpc3RzLCB1cGRhdGUgdGhlIERPTSBlbGVtZW50IG9mIHRoZSBuZXcgY2hpbGQgdG8gbWF0Y2ggdGhlIG9sZCBjaGlsZCdzIERPTSBlbGVtZW50XG4gICAgICBpZiAob2xkQ2hpbGQpIHtcbiAgICAgICAgbmV3Q2hpbGQuZG9tID0gb2xkQ2hpbGQuZG9tO1xuICAgICAgICAvLyBJZiB0aGUgbmV3IGFuZCBvbGQgY2hpbGRyZW4gaGF2ZSB0aGUgc2FtZSBcInYta2VlcFwiIGF0dHJpYnV0ZSB2YWx1ZSwgdXBkYXRlIHRoZSBjaGlsZHJlbiBvZiB0aGUgbmV3IGNoaWxkIHRvIG1hdGNoIHRoZSBvbGQgY2hpbGQncyBjaGlsZHJlblxuICAgICAgICBpZiAoXCJ2LWtlZXBcIiBpbiBuZXdDaGlsZC5wcm9wcyAmJiBuZXdDaGlsZC5wcm9wc1tcInYta2VlcFwiXSA9PT0gb2xkQ2hpbGQucHJvcHNbXCJ2LWtlZXBcIl0pIHtcbiAgICAgICAgICBuZXdDaGlsZC5jaGlsZHJlbiA9IG9sZENoaWxkLmNoaWxkcmVuO1xuICAgICAgICAgIC8vIFNldCB0aGUgc2hvdWxkUGF0Y2ggZmxhZyB0byBmYWxzZVxuICAgICAgICAgIHNob3VsZFBhdGNoID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXBkYXRlQXR0cmlidXRlcyhuZXdDaGlsZCwgb2xkQ2hpbGQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgdGhlIG9sZCBjaGlsZCBkb2VzIG5vdCBleGlzdCwgY3JlYXRlIGEgbmV3IERPTSBlbGVtZW50IGZvciB0aGUgbmV3IGNoaWxkIGFuZCB1cGRhdGUgaXRzIGF0dHJpYnV0ZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG5ld0NoaWxkLmRvbSA9IGNyZWF0ZURvbUVsZW1lbnQobmV3Q2hpbGQudGFnLCBuZXdDaGlsZC5pc1NWRyk7XG4gICAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMobmV3Q2hpbGQpO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgbmV3IGNoaWxkJ3MgRE9NIGVsZW1lbnQgaXMgbm90IHRoZSBpLXRoIGNoaWxkIG9mIHRoZSBwYXJlbnQgRE9NIGVsZW1lbnQsIGluc2VydCBpdFxuICAgICAgaWYgKCFuZXdWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSkge1xuICAgICAgICBuZXdWbm9kZS5kb20uYXBwZW5kQ2hpbGQobmV3Q2hpbGQuZG9tKTtcblxuICAgICAgICAvLyBJZiB0aGUgbmV3IGNoaWxkJ3MgRE9NIGVsZW1lbnQgaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBpLXRoIGNoaWxkIG9mIHRoZSBwYXJlbnQgRE9NIGVsZW1lbnQsIHJlcGxhY2UgdGhlIGktdGggY2hpbGQgd2l0aCB0aGUgbmV3IGNoaWxkJ3MgRE9NIGVsZW1lbnRcbiAgICAgIH0gZWxzZSBpZiAobmV3Vm5vZGUuZG9tLmNoaWxkTm9kZXNbaV0gIT09IG5ld0NoaWxkLmRvbSkge1xuICAgICAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKG5ld0NoaWxkLmRvbSwgbmV3Vm5vZGUuZG9tLmNoaWxkTm9kZXNbaV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgc2hvdWxkUGF0Y2ggZmxhZyBpcyB0cnVlLCByZWN1cnNpdmVseSBjYWxsIHRoZSBwYXRjaCBmdW5jdGlvbiBvbiB0aGUgbmV3IGNoaWxkLCBwYXNzaW5nIGluIHRoZSBvbGQgY2hpbGQgYXMgdGhlIHNlY29uZCBhcmd1bWVudFxuICAgICAgc2hvdWxkUGF0Y2ggJiYgcGF0Y2gobmV3Q2hpbGQsIG9sZENoaWxkKTtcbiAgICB9XG5cbiAgICAvLyBGb3IgdGhlIHJlc3Qgb2YgdGhlIGNoaWxkcmVuLCB3ZSBzaG91bGQgcmVtb3ZlIHRoZW0gZnJvbSB0aGUgRE9NXG4gICAgZm9yIChsZXQgaSA9IG5ld1RyZWVMZW5ndGg7IGkgPCBvbGRUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIElmIHRoZSBpLXRoIGNoaWxkIG9mIHRoZSBvbGQgdHJlZSBkb2VzIG5vdCBoYXZlIGEgY29ycmVzcG9uZGluZyBrZXkgaW4gdGhlIG5ldyB0cmVlLCByZW1vdmUgaXRzIERPTSBlbGVtZW50IGZyb20gdGhlIHBhcmVudCBET00gZWxlbWVudFxuICAgICAgaWYgKCFuZXdLZXllZExpc3Rbb2xkVHJlZVtpXS5wcm9wcy5rZXldKSB7XG4gICAgICAgIG9sZFRyZWVbaV0uZG9tLnBhcmVudE5vZGUgJiYgb2xkVHJlZVtpXS5kb20ucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChvbGRUcmVlW2ldLmRvbSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIElmIHRoZSBuZXcgdHJlZSBoYXMgbm8gY2hpbGRyZW4sIHNldCB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBwYXJlbnQgRE9NIGVsZW1lbnQgdG8gYW4gZW1wdHkgc3RyaW5nXG4gIGlmIChuZXdUcmVlLmxlbmd0aCA9PT0gMCkge1xuICAgIG5ld1Zub2RlLmRvbS50ZXh0Q29udGVudCA9IFwiXCI7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gU2V0IHRoZSBnbG9iYWwgY3VycmVudCBvYmplY3QgdG8gdGhlIG5ldyBhbmQgb2xkIHZpcnR1YWwgRE9NIG5vZGVzXG4gIGN1cnJlbnQudm5vZGUgPSBuZXdWbm9kZTtcbiAgY3VycmVudC5vbGRWbm9kZSA9IG9sZFZub2RlO1xuXG4gIC8vIEZsYXR0ZW4gdGhlIG5ldyB0cmVlXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VHJlZS5sZW5ndGg7IGkrKykge1xuICAgIGxldCBuZXdDaGlsZCA9IG5ld1RyZWVbaV07XG5cbiAgICAvLyBJZiB0aGUgbmV3IGNoaWxkIGlzIGEgVm5vZGUgYW5kIGlzIG5vdCBhIHRleHQgbm9kZVxuICAgIGlmIChuZXdDaGlsZCBpbnN0YW5jZW9mIFZub2RlICYmIG5ld0NoaWxkLnRhZyAhPT0gdGV4dFRhZykge1xuICAgICAgLy8gSWYgdGhlIHRhZyBvZiB0aGUgbmV3IGNoaWxkIGlzIG5vdCBhIHN0cmluZywgaXQgaXMgYSBjb21wb25lbnRcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2hpbGQudGFnICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIC8vIFNldCB0aGUgY3VycmVudCBjb21wb25lbnQgdG8gdGhlIHRhZyBvZiB0aGUgbmV3IGNoaWxkXG4gICAgICAgIGN1cnJlbnQuY29tcG9uZW50ID0gbmV3Q2hpbGQudGFnO1xuICAgICAgICAvLyBSZXBsYWNlIHRoZSBuZXcgY2hpbGQgd2l0aCB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgaXRzIHZpZXcgb3IgYmluZCBtZXRob2QsIHBhc3NpbmcgaW4gdGhlIHByb3BzIGFuZCBjaGlsZHJlbiBhcyBhcmd1bWVudHNcbiAgICAgICAgbmV3VHJlZS5zcGxpY2UoXG4gICAgICAgICAgaS0tLFxuICAgICAgICAgIDEsXG4gICAgICAgICAgKFwidmlld1wiIGluIG5ld0NoaWxkLnRhZyA/IG5ld0NoaWxkLnRhZy52aWV3LmJpbmQobmV3Q2hpbGQudGFnKSA6IG5ld0NoaWxkLnRhZy5iaW5kKG5ld0NoaWxkLnRhZykpKFxuICAgICAgICAgICAgbmV3Q2hpbGQucHJvcHMsXG4gICAgICAgICAgICAuLi5uZXdDaGlsZC5jaGlsZHJlblxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFNldCB0aGUgaXNTVkcgZmxhZyBmb3IgdGhlIG5ldyBjaGlsZCBpZiBpdCBpcyBhbiBTVkcgZWxlbWVudCBvciBpZiB0aGUgcGFyZW50IGlzIGFuIFNWRyBlbGVtZW50XG4gICAgICBuZXdDaGlsZC5pc1NWRyA9IG5ld1Zub2RlLmlzU1ZHIHx8IG5ld0NoaWxkLnRhZyA9PT0gXCJzdmdcIjtcblxuICAgICAgLy8gSWYgdGhlcmUgaXMgYW4gb2xkIGNoaWxkIGF0IHRoZSBzYW1lIGluZGV4XG4gICAgICBpZiAoaSA8IG9sZFRyZWVMZW5ndGgpIHtcbiAgICAgICAgbGV0IG9sZENoaWxkID0gb2xkVHJlZVtpXTtcbiAgICAgICAgLy8gSWYgdGhlIHRhZyBvZiB0aGUgbmV3IGNoaWxkIGlzIHRoZSBzYW1lIGFzIHRoZSB0YWcgb2YgdGhlIG9sZCBjaGlsZFxuICAgICAgICBpZiAobmV3Q2hpbGQudGFnID09PSBvbGRDaGlsZC50YWcpIHtcbiAgICAgICAgICAvLyBTZXQgdGhlIGRvbSBwcm9wZXJ0eSBvZiB0aGUgbmV3IGNoaWxkIHRvIHRoZSBkb20gcHJvcGVydHkgb2YgdGhlIG9sZCBjaGlsZFxuICAgICAgICAgIG5ld0NoaWxkLmRvbSA9IG9sZENoaWxkLmRvbTtcbiAgICAgICAgICAvLyBJZiB0aGUgdi1rZWVwIHByb3AgaXMgdGhlIHNhbWUgZm9yIGJvdGggdGhlIG5ldyBhbmQgb2xkIGNoaWxkLCBzZXQgdGhlIGNoaWxkcmVuIG9mIHRoZSBuZXcgY2hpbGQgdG8gdGhlIGNoaWxkcmVuIG9mIHRoZSBvbGQgY2hpbGRcbiAgICAgICAgICBpZiAoXCJ2LWtlZXBcIiBpbiBuZXdDaGlsZC5wcm9wcyAmJiBuZXdDaGlsZC5wcm9wc1tcInYta2VlcFwiXSA9PT0gb2xkQ2hpbGQucHJvcHNbXCJ2LWtlZXBcIl0pIHtcbiAgICAgICAgICAgIG5ld0NoaWxkLmNoaWxkcmVuID0gb2xkQ2hpbGQuY2hpbGRyZW47XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBVcGRhdGUgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG5ldyBjaGlsZCBiYXNlZCBvbiB0aGUgb2xkIGNoaWxkXG4gICAgICAgICAgdXBkYXRlQXR0cmlidXRlcyhuZXdDaGlsZCBhcyBWbm9kZVdpdGhEb20sIG9sZENoaWxkKTtcbiAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwYXRjaCB0aGUgbmV3IGFuZCBvbGQgY2hpbGRyZW5cbiAgICAgICAgICBwYXRjaChuZXdDaGlsZCBhcyBWbm9kZVdpdGhEb20sIG9sZENoaWxkKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBkb20gZWxlbWVudCBmb3IgdGhlIG5ldyBjaGlsZFxuICAgICAgICBuZXdDaGlsZC5kb20gPSBjcmVhdGVEb21FbGVtZW50KG5ld0NoaWxkLnRhZywgbmV3Q2hpbGQuaXNTVkcpO1xuICAgICAgICAvLyBVcGRhdGUgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIG5ldyBjaGlsZFxuICAgICAgICB1cGRhdGVBdHRyaWJ1dGVzKG5ld0NoaWxkIGFzIFZub2RlV2l0aERvbSk7XG4gICAgICAgIC8vIFJlcGxhY2UgdGhlIG9sZCBjaGlsZCBpbiB0aGUgZG9tIHdpdGggdGhlIG5ldyBjaGlsZFxuICAgICAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKG5ld0NoaWxkLmRvbSwgb2xkQ2hpbGQuZG9tKTtcbiAgICAgICAgLy8gUmVjdXJzaXZlbHkgcGF0Y2ggdGhlIG5ldyBjaGlsZFxuICAgICAgICBwYXRjaChuZXdDaGlsZCBhcyBWbm9kZVdpdGhEb20pO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IGRvbSBlbGVtZW50IGZvciB0aGUgbmV3IGNoaWxkXG4gICAgICBuZXdDaGlsZC5kb20gPSBjcmVhdGVEb21FbGVtZW50KG5ld0NoaWxkLnRhZywgbmV3Q2hpbGQuaXNTVkcpO1xuICAgICAgLy8gVXBkYXRlIHRoZSBhdHRyaWJ1dGVzIG9mIHRoZSBuZXcgY2hpbGRcbiAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMobmV3Q2hpbGQgYXMgVm5vZGVXaXRoRG9tKTtcbiAgICAgIC8vIEFwcGVuZCB0aGUgbmV3IGNoaWxkIHRvIHRoZSBkb21cbiAgICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChuZXdDaGlsZC5kb20pO1xuICAgICAgLy8gUmVjdXJzaXZlbHkgcGF0Y2ggdGhlIG5ldyBjaGlsZFxuICAgICAgcGF0Y2gobmV3Q2hpbGQgYXMgVm5vZGVXaXRoRG9tKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBuZXcgY2hpbGQgaXMgYW4gYXJyYXksIGZsYXR0ZW4gaXQgYW5kIGNvbnRpbnVlIHRoZSBsb29wXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmV3Q2hpbGQpKSB7XG4gICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEsIC4uLm5ld0NoaWxkKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBuZXcgY2hpbGQgaXMgbnVsbCBvciB1bmRlZmluZWQsIHJlbW92ZSBpdCBmcm9tIHRoZSBuZXcgdHJlZSBhbmQgY29udGludWUgdGhlIGxvb3BcbiAgICBpZiAobmV3Q2hpbGQgPT09IG51bGwgfHwgbmV3Q2hpbGQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgbmV3VHJlZS5zcGxpY2UoaS0tLCAxKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIElmIHRoZSBuZXcgY2hpbGQgaXMgbm90IGEgVm5vZGUsIHdyYXAgaXQgaW4gYSB0ZXh0IFZub2RlXG4gICAgbmV3VHJlZVtpXSA9IG5ldyBWbm9kZSh0ZXh0VGFnLCB7fSwgW10pO1xuICAgIC8vIElmIHRoZSBuZXcgY2hpbGQgaXMgYSBWbm9kZSwgc2V0IHRoZSBkb20gcHJvcGVydHkgb2YgdGhlIHRleHQgVm5vZGUgdG8gdGhlIGRvbSBwcm9wZXJ0eSBvZiB0aGUgbmV3IGNoaWxkXG4gICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgIG5ld1RyZWVbaV0uZG9tID0gbmV3Q2hpbGQuZG9tO1xuICAgICAgLy8gU2V0IHRoZSBuZXcgY2hpbGQgdG8gdGhlIHRleHQgY29udGVudCBvZiBpdHMgZG9tIHByb3BlcnR5XG4gICAgICBuZXdDaGlsZCA9IChuZXdDaGlsZCBhcyBWbm9kZVdpdGhEb20pLmRvbS50ZXh0Q29udGVudDtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBvbGQgY2hpbGQgYXQgdGhlIHNhbWUgaW5kZXhcbiAgICBpZiAoaSA8IG9sZFRyZWVMZW5ndGgpIHtcbiAgICAgIGxldCBvbGRDaGlsZCA9IG9sZFRyZWVbaV07XG5cbiAgICAgIC8vIElmIHRoZSBvbGQgY2hpbGQgaXMgYSB0ZXh0IG5vZGVcbiAgICAgIGlmIChvbGRDaGlsZC50YWcgPT09IHRleHRUYWcpIHtcbiAgICAgICAgLy8gU2V0IHRoZSBkb20gcHJvcGVydHkgb2YgdGhlIHRleHQgVm5vZGUgdG8gdGhlIGRvbSBwcm9wZXJ0eSBvZiB0aGUgb2xkIGNoaWxkXG4gICAgICAgIG5ld1RyZWVbaV0uZG9tID0gb2xkQ2hpbGQuZG9tO1xuICAgICAgICAvLyBJZiB0aGUgdGV4dCBjb250ZW50IG9mIHRoZSBvbGQgY2hpbGQgaXMgZGlmZmVyZW50IGZyb20gdGhlIG5ldyBjaGlsZCwgdXBkYXRlIHRoZSB0ZXh0IGNvbnRlbnQgb2YgdGhlIG9sZCBjaGlsZFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgIGlmIChuZXdDaGlsZCAhPSBvbGRDaGlsZC5kb20udGV4dENvbnRlbnQpIHtcbiAgICAgICAgICBvbGRDaGlsZC5kb20udGV4dENvbnRlbnQgPSBuZXdDaGlsZDtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ3JlYXRlIGEgbmV3IHRleHQgbm9kZSBmb3IgdGhlIG5ldyBjaGlsZFxuICAgICAgbmV3VHJlZVtpXS5kb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdDaGlsZCk7XG4gICAgICAvLyBSZXBsYWNlIHRoZSBvbGQgY2hpbGQgaW4gdGhlIGRvbSB3aXRoIHRoZSBuZXcgdGV4dCBub2RlXG4gICAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKG5ld1RyZWVbaV0uZG9tLCBvbGRDaGlsZC5kb20pO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGEgbmV3IHRleHQgbm9kZSBmb3IgdGhlIG5ldyBjaGlsZFxuICAgIG5ld1RyZWVbaV0uZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3Q2hpbGQpO1xuICAgIC8vIEFwcGVuZCB0aGUgbmV3IHRleHQgbm9kZSB0byB0aGUgZG9tXG4gICAgbmV3Vm5vZGUuZG9tLmFwcGVuZENoaWxkKG5ld1RyZWVbaV0uZG9tKTtcbiAgfVxuXG4gIC8vIFJlbW92ZSBhbnkgb2xkIGNoaWxkcmVuIHRoYXQgYXJlIG5vIGxvbmdlciBwcmVzZW50IGluIHRoZSBuZXcgdHJlZVxuICBmb3IgKGxldCBpID0gbmV3VHJlZS5sZW5ndGg7IGkgPCBvbGRUcmVlTGVuZ3RoOyBpKyspIHtcbiAgICBuZXdWbm9kZS5kb20ucmVtb3ZlQ2hpbGQob2xkVHJlZVtpXS5kb20pO1xuICB9XG59XG5cbi8vIFVwZGF0ZSB0aGUgbWFpbiBWbm9kZVxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZSgpOiB2b2lkIHwgc3RyaW5nIHtcbiAgLy8gSWYgdGhlIG1haW4gVm5vZGUgZXhpc3RzXG4gIGlmIChtYWluVm5vZGUpIHtcbiAgICAvLyBDYWxsIGFueSBjbGVhbnVwIGZ1bmN0aW9ucyB0aGF0IGFyZSByZWdpc3RlcmVkIHdpdGggdGhlIG9uQ2xlYW51cFNldCBzZXRcbiAgICBjYWxsU2V0KG9uQ2xlYW51cFNldCk7XG4gICAgLy8gU3RvcmUgYSByZWZlcmVuY2UgdG8gdGhlIG9sZCBtYWluIFZub2RlXG4gICAgbGV0IG9sZE1haW5Wbm9kZSA9IG1haW5Wbm9kZTtcbiAgICAvLyBDcmVhdGUgYSBuZXcgbWFpbiBWbm9kZSB3aXRoIHRoZSBtYWluIGNvbXBvbmVudCBhcyBpdHMgb25seSBjaGlsZFxuICAgIG1haW5Wbm9kZSA9IG5ldyBWbm9kZShvbGRNYWluVm5vZGUudGFnLCBvbGRNYWluVm5vZGUucHJvcHMsIFttYWluQ29tcG9uZW50XSkgYXMgVm5vZGVXaXRoRG9tO1xuICAgIG1haW5Wbm9kZS5kb20gPSBvbGRNYWluVm5vZGUuZG9tO1xuICAgIG1haW5Wbm9kZS5pc1NWRyA9IG9sZE1haW5Wbm9kZS5pc1NWRztcblxuICAgIC8vIFJlY3Vyc2l2ZWx5IHBhdGNoIHRoZSBuZXcgYW5kIG9sZCBtYWluIFZub2Rlc1xuICAgIHBhdGNoKG1haW5Wbm9kZSwgb2xkTWFpblZub2RlKTtcblxuICAgIC8vIENhbGwgYW55IHVwZGF0ZSBvciBtb3VudCBmdW5jdGlvbnMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBvblVwZGF0ZVNldCBvciBvbk1vdW50U2V0IHNldFxuICAgIGNhbGxTZXQoaXNNb3VudGVkID8gb25VcGRhdGVTZXQgOiBvbk1vdW50U2V0KTtcblxuICAgIC8vIFNldCB0aGUgaXNNb3VudGVkIGZsYWcgdG8gdHJ1ZVxuICAgIGlzTW91bnRlZCA9IHRydWU7XG5cbiAgICAvLyBSZXNldCB0aGUgY3VycmVudCB2bm9kZSwgb2xkVm5vZGUsIGFuZCBjb21wb25lbnQgcHJvcGVydGllc1xuICAgIGN1cnJlbnQudm5vZGUgPSBudWxsO1xuICAgIGN1cnJlbnQub2xkVm5vZGUgPSBudWxsO1xuICAgIGN1cnJlbnQuY29tcG9uZW50ID0gbnVsbDtcblxuICAgIC8vIElmIHRoZSBjb2RlIGlzIHJ1bm5pbmcgaW4gYSBOb2RlLmpzIGVudmlyb25tZW50LCByZXR1cm4gdGhlIGlubmVyIEhUTUwgb2YgdGhlIG1haW4gVm5vZGUncyBkb20gZWxlbWVudFxuICAgIGlmIChpc05vZGVKcykge1xuICAgICAgcmV0dXJuIG1haW5Wbm9kZS5kb20uaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxufVxuXG4vLyBVbm1vdW50IHRoZSBtYWluIFZub2RlXG5leHBvcnQgZnVuY3Rpb24gdW5tb3VudCgpIHtcbiAgLy8gSWYgdGhlIG1haW4gVm5vZGUgZXhpc3RzXG4gIGlmIChtYWluVm5vZGUpIHtcbiAgICAvLyBTZXQgdGhlIG1haW4gY29tcG9uZW50IHRvIGEgbnVsbCBWbm9kZVxuICAgIG1haW5Db21wb25lbnQgPSBuZXcgVm5vZGUoKCkgPT4gbnVsbCwge30sIFtdKSBhcyBWbm9kZUNvbXBvbmVudEludGVyZmFjZTtcbiAgICAvLyBVcGRhdGUgdGhlIG1haW4gVm5vZGVcbiAgICBsZXQgcmVzdWx0ID0gdXBkYXRlKCk7XG4gICAgLy8gQ2FsbCBhbnkgdW5tb3VudCBmdW5jdGlvbnMgdGhhdCBhcmUgcmVnaXN0ZXJlZCB3aXRoIHRoZSBvblVubW91bnRTZXQgc2V0XG4gICAgY2FsbFNldChvblVubW91bnRTZXQpO1xuXG4gICAgLy8gUmVtb3ZlIGFueSBldmVudCBsaXN0ZW5lcnMgdGhhdCB3ZXJlIGFkZGVkIHRvIHRoZSBtYWluIFZub2RlJ3MgZG9tIGVsZW1lbnRcbiAgICBmb3IgKGxldCBuYW1lIGluIGV2ZW50TGlzdGVuZXJOYW1lcykge1xuICAgICAgbWFpblZub2RlLmRvbS5yZW1vdmVFdmVudExpc3RlbmVyKG5hbWUuc2xpY2UoMikudG9Mb3dlckNhc2UoKSwgZXZlbnRMaXN0ZW5lcik7XG4gICAgICBSZWZsZWN0LmRlbGV0ZVByb3BlcnR5KGV2ZW50TGlzdGVuZXJOYW1lcywgbmFtZSk7XG4gICAgfVxuXG4gICAgLy8gUmVzZXQgdGhlIG1haW4gY29tcG9uZW50IGFuZCBtYWluIFZub2RlXG4gICAgbWFpbkNvbXBvbmVudCA9IG51bGw7XG4gICAgbWFpblZub2RlID0gbnVsbDtcbiAgICAvLyBTZXQgdGhlIGlzTW91bnRlZCBmbGFnIHRvIGZhbHNlXG4gICAgaXNNb3VudGVkID0gZmFsc2U7XG4gICAgLy8gUmVzZXQgdGhlIGN1cnJlbnQgdm5vZGUsIG9sZFZub2RlLCBhbmQgY29tcG9uZW50IHByb3BlcnRpZXNcbiAgICBjdXJyZW50LnZub2RlID0gbnVsbDtcbiAgICBjdXJyZW50Lm9sZFZub2RlID0gbnVsbDtcbiAgICBjdXJyZW50LmNvbXBvbmVudCA9IG51bGw7XG4gICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgdXBkYXRpbmcgdGhlIG1haW4gVm5vZGVcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4vLyBUaGlzIGZ1bmN0aW9uIHRha2VzIGluIGEgRE9NIGVsZW1lbnQgb3IgYSBET00gZWxlbWVudCBzZWxlY3RvciBhbmQgYSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBvbiBpdC5cbmV4cG9ydCBmdW5jdGlvbiBtb3VudChkb20sIGNvbXBvbmVudCkge1xuICAvLyBDaGVjayBpZiB0aGUgJ2RvbScgYXJndW1lbnQgaXMgYSBzdHJpbmcuIElmIGl0IGlzLCBzZWxlY3QgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBtYXRjaGVzIHRoZSBnaXZlbiBzZWxlY3Rvci5cbiAgLy8gT3RoZXJ3aXNlLCB1c2UgdGhlICdkb20nIGFyZ3VtZW50IGFzIHRoZSBjb250YWluZXIuXG4gIGxldCBjb250YWluZXIgPVxuICAgIHR5cGVvZiBkb20gPT09IFwic3RyaW5nXCJcbiAgICAgID8gaXNOb2RlSnNcbiAgICAgICAgPyBjcmVhdGVEb21FbGVtZW50KGRvbSwgZG9tID09PSBcInN2Z1wiKVxuICAgICAgICA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoZG9tKVswXVxuICAgICAgOiBkb207XG5cbiAgLy8gQ2hlY2sgaWYgdGhlICdjb21wb25lbnQnIGFyZ3VtZW50IGlzIGEgVm5vZGUgY29tcG9uZW50IG9yIGEgcmVndWxhciBjb21wb25lbnQuXG4gIC8vIElmIGl0J3MgYSByZWd1bGFyIGNvbXBvbmVudCwgY3JlYXRlIGEgbmV3IFZub2RlIGNvbXBvbmVudCB1c2luZyB0aGUgJ2NvbXBvbmVudCcgYXJndW1lbnQgYXMgdGhlIHRhZy5cbiAgLy8gSWYgaXQncyBub3QgYSBjb21wb25lbnQgYXQgYWxsLCBjcmVhdGUgYSBuZXcgVm5vZGUgY29tcG9uZW50IHdpdGggdGhlICdjb21wb25lbnQnIGFyZ3VtZW50IGFzIHRoZSByZW5kZXJpbmcgZnVuY3Rpb24uXG4gIGxldCB2bm9kZUNvbXBvbmVudCA9IGlzVm5vZGVDb21wb25lbnQoY29tcG9uZW50KVxuICAgID8gY29tcG9uZW50XG4gICAgOiBpc0NvbXBvbmVudChjb21wb25lbnQpXG4gICAgPyBuZXcgVm5vZGUoY29tcG9uZW50LCB7fSwgW10pXG4gICAgOiBuZXcgVm5vZGUoKCkgPT4gY29tcG9uZW50LCB7fSwgW10pO1xuXG4gIC8vIElmIGEgbWFpbiBjb21wb25lbnQgYWxyZWFkeSBleGlzdHMgYW5kIGl0J3Mgbm90IHRoZSBzYW1lIGFzIHRoZSBjdXJyZW50ICd2bm9kZUNvbXBvbmVudCcsIHVubW91bnQgaXQuXG4gIGlmIChtYWluQ29tcG9uZW50ICYmIG1haW5Db21wb25lbnQudGFnICE9PSB2bm9kZUNvbXBvbmVudC50YWcpIHtcbiAgICB1bm1vdW50KCk7XG4gIH1cblxuICAvLyBTZXQgdGhlICd2bm9kZUNvbXBvbmVudCcgYXMgdGhlIG1haW4gY29tcG9uZW50LlxuICBtYWluQ29tcG9uZW50ID0gdm5vZGVDb21wb25lbnQgYXMgVm5vZGVDb21wb25lbnRJbnRlcmZhY2U7XG4gIC8vIENvbnZlcnQgdGhlIGNvbnRhaW5lciBlbGVtZW50IHRvIGEgVm5vZGUuXG4gIG1haW5Wbm9kZSA9IGRvbVRvVm5vZGUoY29udGFpbmVyKTtcbiAgLy8gVXBkYXRlIHRoZSBET00gd2l0aCB0aGUgbmV3IGNvbXBvbmVudC5cbiAgcmV0dXJuIHVwZGF0ZSgpO1xufVxuXG4vLyBUaGlzIGlzIGEgdXRpbGl0eSBmdW5jdGlvbiBmb3IgY3JlYXRpbmcgVm5vZGUgb2JqZWN0cy5cbi8vIEl0IHRha2VzIGluIGEgdGFnIG9yIGNvbXBvbmVudCwgYW5kIG9wdGlvbmFsIHByb3BzIGFuZCBjaGlsZHJlbiBhcmd1bWVudHMuXG5leHBvcnQgY29uc3QgdjogViA9ICh0YWdPckNvbXBvbmVudCwgcHJvcHMgPSB7fSwgLi4uY2hpbGRyZW4pID0+IHtcbiAgLy8gUmV0dXJuIGEgbmV3IFZub2RlIG9iamVjdCB1c2luZyB0aGUgZ2l2ZW4gYXJndW1lbnRzLlxuICByZXR1cm4gbmV3IFZub2RlKHRhZ09yQ29tcG9uZW50LCBwcm9wcyB8fCB7fSwgY2hpbGRyZW4pO1xufTtcblxuLy8gVGhpcyB1dGlsaXR5IGZ1bmN0aW9uIGNyZWF0ZXMgYSBmcmFnbWVudCBWbm9kZS5cbi8vIEl0IHRha2VzIGluIGEgcGxhY2Vob2xkZXIgYW5kIHRoZSBjaGlsZHJlbiBhcmd1bWVudHMsIHJldHVybnMgb25seSB0aGUgY2hpbGRyZW4uXG52LmZyYWdtZW50ID0gKF86IFZub2RlUHJvcGVydGllcywgLi4uY2hpbGRyZW46IENoaWxkcmVuKSA9PiBjaGlsZHJlbjtcbiJdLCJtYXBwaW5ncyI6Ik1BZ0lBLElBQU1BLEVBQVUsUUFJTEMsRUFBV0MsUUFBMkIsb0JBQVpDLFNBQTJCQSxRQUFRQyxVQUFZRCxRQUFRQyxTQUFTQyxNQUk5RixTQUFTQyxF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
package/dist/index.mjs CHANGED
@@ -74,7 +74,9 @@ var onMountSet = /* @__PURE__ */ new Set();
74
74
  var onUpdateSet = /* @__PURE__ */ new Set();
75
75
  var onUnmountSet = /* @__PURE__ */ new Set();
76
76
  function onMount(callback) {
77
- onMountSet.add(callback);
77
+ if (!isMounted) {
78
+ onMountSet.add(callback);
79
+ }
78
80
  }
79
81
  function onUpdate(callback) {
80
82
  onUpdateSet.add(callback);
@@ -83,7 +85,9 @@ function onCleanup(callback) {
83
85
  onCleanupSet.add(callback);
84
86
  }
85
87
  function onUnmount(callback) {
86
- onUnmountSet.add(callback);
88
+ if (!isMounted) {
89
+ onUnmountSet.add(callback);
90
+ }
87
91
  }
88
92
  function callSet(set) {
89
93
  for (let callback of set) {
@@ -234,12 +238,18 @@ var directives = {
234
238
  },
235
239
  "v-create": (callback, vnode, oldVnode) => {
236
240
  if (!oldVnode) {
237
- callback(vnode);
241
+ let cleanup = callback(vnode);
242
+ if (typeof cleanup === "function") {
243
+ onCleanup(cleanup);
244
+ }
238
245
  }
239
246
  },
240
247
  "v-update": (callback, vnode, oldVnode) => {
241
248
  if (oldVnode) {
242
- callback(vnode, oldVnode);
249
+ let cleanup = callback(vnode, oldVnode);
250
+ if (typeof cleanup === "function") {
251
+ onCleanup(cleanup);
252
+ }
243
253
  }
244
254
  },
245
255
  "v-cleanup": (callback, vnode, oldVnode) => {
@@ -475,7 +485,7 @@ function mount(dom, component) {
475
485
  var v = (tagOrComponent, props = {}, ...children) => {
476
486
  return new Vnode(tagOrComponent, props || {}, children);
477
487
  };
478
- v.fragment = (props, ...children) => children;
488
+ v.fragment = (_, ...children) => children;
479
489
  export {
480
490
  Vnode,
481
491
  createDomElement,
@@ -29,7 +29,7 @@ interface RouterInterface {
29
29
  params: Record<string, string | number | any>;
30
30
  matches: string[];
31
31
  add(method: string, ...args: Middlewares): Router;
32
- use(...args: Middlewares | Router[]): Router;
32
+ use(...args: string[] | Middlewares | Router[]): Router;
33
33
  routes(): string[];
34
34
  go(path: string, parentComponent?: Component | POJOComponent | VnodeComponentInterface): Promise<string | void>;
35
35
  }
@@ -42,8 +42,10 @@ export declare class Router implements RouterInterface {
42
42
  path: string;
43
43
  params: Record<string, string | number | any>;
44
44
  matches: string[];
45
+ pathPrefix: string;
46
+ constructor(pathPrefix?: string);
45
47
  add(path: string, ...args: Middlewares): Router;
46
- use(...args: Middlewares | Router[]): Router;
48
+ use(...args: Middlewares | Router[] | string[]): Router;
47
49
  routes(): string[];
48
50
  go(path: string, parentComponent?: Component): Promise<string | void>;
49
51
  getOnClickHandler(url: string): (e: MouseEvent) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/router/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../lib/router/index.ts"],"names":[],"mappings":"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"}
@@ -125,27 +125,30 @@ var Router = class {
125
125
  path = "";
126
126
  params = {};
127
127
  matches = [];
128
+ pathPrefix = "";
129
+ constructor(pathPrefix = "") {
130
+ this.pathPrefix = pathPrefix;
131
+ }
128
132
  add(path, ...args) {
129
- addPath(this, "add", path, args);
133
+ addPath(this, "add", `${this.pathPrefix}${path}`, args);
130
134
  return this;
131
135
  }
132
136
  use(...args) {
133
- let path = typeof args[0] === "string" ? args.shift() : "/";
134
- let i;
135
- let k;
136
- let subrouter;
137
+ let path = `${this.pathPrefix}${typeof args[0] === "string" ? args.shift() : "/"}`;
137
138
  let item;
138
139
  let subpath;
139
- for (i = 0; i < args.length; i++) {
140
- subrouter = args[i];
141
- if (typeof subrouter === "function") {
142
- addPath(this, "use", `${path}.*`, [subrouter]);
143
- } else if (subrouter.paths) {
144
- for (k = 0; k < subrouter.paths.length; k++) {
140
+ for (let i = 0; i < args.length; i++) {
141
+ if (args[i] instanceof Router) {
142
+ let subrouter = args[i];
143
+ for (let k = 0; k < subrouter.paths.length; k++) {
145
144
  item = subrouter.paths[k];
146
145
  subpath = `${path}${item.path}`.replace(/^\/\//, "/");
147
146
  addPath(this, item.method, subpath, item.middlewares);
148
147
  }
148
+ continue;
149
+ }
150
+ if (typeof args[i] === "function") {
151
+ addPath(this, "use", `${path}.*`, [args[i]]);
149
152
  }
150
153
  }
151
154
  return this;
@@ -163,10 +166,11 @@ var Router = class {
163
166
  if (!path) {
164
167
  throw new Error("router.url.required");
165
168
  }
166
- let parts = path.split("?", 2);
169
+ let constructedPath = `${this.pathPrefix}${path}`;
170
+ let parts = constructedPath.split("?", 2);
167
171
  let urlParts = parts[0].replace(/(.+)\/$/, "$1");
168
172
  let queryParts = parts[1];
169
- this.url = path;
173
+ this.url = constructedPath;
170
174
  this.query = parseQuery(queryParts);
171
175
  let middlewares = searchMiddlewares(this, urlParts);
172
176
  let component = await searchComponent(this, middlewares);
@@ -174,7 +178,7 @@ var Router = class {
174
178
  return;
175
179
  }
176
180
  if (!component) {
177
- throw new Error(`The url ${path} requested wasn't found`);
181
+ throw new Error(`The url ${constructedPath} requested wasn't found`);
178
182
  }
179
183
  if ((0, import_valyrian.isComponent)(parentComponent) || (0, import_valyrian.isVnodeComponent)(parentComponent)) {
180
184
  let childComponent = (0, import_valyrian.isVnodeComponent)(component) ? component : (0, import_valyrian.v)(component, {});
@@ -186,7 +190,7 @@ var Router = class {
186
190
  }
187
191
  }
188
192
  if (!import_valyrian.isNodeJs) {
189
- window.history.pushState(null, "", path);
193
+ window.history.pushState(null, "", constructedPath);
190
194
  }
191
195
  if (this.container) {
192
196
  return (0, import_valyrian.mount)(this.container, component);