valyrian.js 5.0.13 → 5.0.17
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/@types/lib/index.d.ts +1 -0
- package/dist/valyrian.min.js +1 -1
- package/dist/valyrian.min.js.map +1 -1
- package/lib/index.ts +7 -3
- package/package.json +81 -29
- package/plugins/node.js +5 -2
- package/plugins/store.js +2 -8
- package/register.js +76 -17
- package/CHANGELOG.md +0 -339
|
@@ -79,6 +79,7 @@ declare class VnodeComponent implements VnodeComponent {
|
|
|
79
79
|
}
|
|
80
80
|
interface Valyrian {
|
|
81
81
|
(tagOrComponent: string | ValyrianComponent, props?: Props | null, children?: VnodeOrUnknown): Vnode | VnodeComponent;
|
|
82
|
+
fragment: (props: Props, children: VnodeOrUnknown[]) => VnodeOrUnknown[];
|
|
82
83
|
isMounted: boolean;
|
|
83
84
|
isNode: boolean;
|
|
84
85
|
reservedWords: string[];
|
package/dist/valyrian.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var e=class{constructor(e,o,n){this.props=o,this.children=n,this.name=e}},o=class{constructor(e){this.nodeValue=e}},n=class{constructor(e,o,n){this.props=o,this.children=n,this.component=e}},t="undefined"==typeof window||"undefined"!=typeof global;function d(e,o=!1){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function r(n){let t={};[].forEach.call(n.attributes,e=>t[e.nodeName]=e.nodeValue);let d=new e(n.nodeName.toLowerCase(),t,[]);d.dom=n;for(let e=0,t=n.childNodes.length;e<t;e++)if(1===n.childNodes[e].nodeType)d.children.push(r(n.childNodes[e]));else if(3===n.childNodes[e].nodeType){let t=new o(n.childNodes[e].nodeValue||"");t.dom=n.childNodes[e],d.children.push(t)}return d}var i=e=>{let o=d("div");return o.innerHTML=e.trim(),[].map.call(o.childNodes,e=>r(e))};(t?global:window).v=function p(){let l=(o,t,...d)=>"string"==typeof o?new e(o,t||{},d):new n(o,t||{},d);l.isMounted=!1,l.isNode=t;let s=["key","data","v-once","oncreate","onupdate","onremove","onbeforeupdate"];l.reservedWords=s,l.trust=i;let c={parentVnode:void 0,oldParentVnode:void 0,component:void 0};l.current=c;let a=new Map;l.usePlugin=(e,o={})=>!a.has(e)&&a.set(e,!0)&&e(l,o);let m=[];l.onCleanup=e=>{let o=l.current.parentVnode;o.onCleanup||(o.onCleanup=[]),o.onCleanup.push(e),-1===m.indexOf(o)&&m.push(o)};let u=null,f=()=>"",h=f,v=[];function V(e){let o=e.target,n=`v-on${e.type}`;for(;o;){if(o[n])return o[n](e,o),void(e.defaultPrevented||l.update());o=o.parentNode}}function
|
|
1
|
+
(()=>{var e=class{name;props;children;dom;onCleanup;isSVG;processed;constructor(e,o,n){this.props=o,this.children=n,this.name=e}},o=class{dom;nodeValue;constructor(e){this.nodeValue=e}},n=class{component;props;children;constructor(e,o,n){this.props=o,this.children=n,this.component=e}},t="undefined"==typeof window||"undefined"!=typeof global;function d(e,o=!1){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function r(n){let t={};[].forEach.call(n.attributes,e=>t[e.nodeName]=e.nodeValue);let d=new e(n.nodeName.toLowerCase(),t,[]);d.dom=n;for(let e=0,t=n.childNodes.length;e<t;e++)if(1===n.childNodes[e].nodeType)d.children.push(r(n.childNodes[e]));else if(3===n.childNodes[e].nodeType){let t=new o(n.childNodes[e].nodeValue||"");t.dom=n.childNodes[e],d.children.push(t)}return d}var i=e=>{let o=d("div");return o.innerHTML=e.trim(),[].map.call(o.childNodes,e=>r(e))};(t?global:window).v=function p(){let l=(o,t,...d)=>"string"==typeof o?new e(o,t||{},d):new n(o,t||{},d);l.fragment=(e,o)=>o,l.isMounted=!1,l.isNode=t;let s=["key","data","v-once","oncreate","onupdate","onremove","onbeforeupdate"];l.reservedWords=s,l.trust=i;let c={parentVnode:void 0,oldParentVnode:void 0,component:void 0};l.current=c;let a=new Map;l.usePlugin=(e,o={})=>!a.has(e)&&a.set(e,!0)&&e(l,o);let m=[];l.onCleanup=e=>{let o=l.current.parentVnode;o.onCleanup||(o.onCleanup=[]),o.onCleanup.push(e),-1===m.indexOf(o)&&m.push(o)};let u=null,f=()=>"",h=f,v=[];function V(e){let o=e.target,n=`v-on${e.type}`;for(;o;){if(o[n])return o[n](e,o),void(e.defaultPrevented||l.update());o=o.parentNode}}function g(e,o,n){if(-1!==s.indexOf(e)){if(e in M)return M[e](o.props[e],o,n)}else"function"==typeof o.props[e]?(-1===v.indexOf(e)&&(u.addEventListener(e.slice(2),V),v.push(e)),o.dom[`v-${e}`]=o.props[e]):e in o.dom&&!o.isSVG?o.dom[e]!=o.props[e]&&(o.dom[e]=o.props[e]):(void 0===n||o.props[e]!==n.props[e])&&(!1===o.props[e]?o.dom.removeAttribute(e):o.dom.setAttribute(e,o.props[e]))}function y(e,o){for(let n in e.props)if(!1===g(n,e,o))return}function N(e,o){for(let n in o.props)!(n in e.props)&&"function"!=typeof o.props[n]&&-1===s.indexOf(n)&&(n in e.dom?e.dom[n]=null:e.dom.removeAttribute(n))}l.updateProperty=g;let w=o=>{for(let n=0,t=o.children.length;n<t;n++)o.children[n]instanceof e&&w(o.children[n]);o.props.onremove&&o.props.onremove(o)};function C(t,r){let i=r?.children||[],p=t.children,s=i.length;c.parentVnode=t,c.oldParentVnode=r;for(let d=0;d<p.length;d++){let r=p[d];r instanceof e?r.isSVG=t.isSVG||"svg"===r.name:null==r?p.splice(d--,1):Array.isArray(r)?p.splice(d--,1,...r):r instanceof n?(l.current.component=r,p.splice(d--,1,"view"in r.component?r.component.view.call(r.component,r.props,r.children):r.component.call(r.component,r.props,r.children))):d>0&&p[d-1].nodeValue?(p[d-1].nodeValue+=r,p.splice(d--,1)):r instanceof o||(p[d]=new o(String(r)))}let a=p.length;if(0===a){if(s>0){for(let o=s;o--;)i[o]instanceof e&&w(i[o]);t.dom.textContent=""}}else if(s&&p[0]instanceof e&&"key"in p[0].props){let o;if(i[0]instanceof e&&"key"in i[0].props)o=i.map(e=>e.props.key);else{for(let o=s;o--;)i[o]instanceof e&&w(i[o]);t.dom.textContent="",o=[]}let n=p.map(e=>e.props.key),r=Math.max(a,o.length);for(let s=0;s<r;s++)if(s<a){let r=p[s],c=o[s]===n[s]?i[s]:i[o.indexOf(r.props.key)],a=!0;c?(r.dom=c.dom,c.processed=!0,"v-once"in r.props||r.props.onbeforeupdate&&!1===r.props.onbeforeupdate(r,c)?(r.children=c.children,a=!1):(N(r,c),y(r,c),l.isMounted?r.props.onupdate&&r.props.onupdate(r,c):r.props.oncreate&&r.props.oncreate(r))):(r.dom=d(r.name,r.isSVG),y(r),r.props.oncreate&&r.props.oncreate(r)),void 0===t.dom.childNodes[s]?t.dom.appendChild(r.dom):t.dom.childNodes[s]!==r.dom&&(i[s]instanceof e&&!i[s].processed&&-1===n.indexOf(i[s].props.key)&&w(i[s]),t.dom.replaceChild(r.dom,t.dom.childNodes[s])),a&&C(r,c)}else i[s].processed||(i[s]instanceof e&&w(i[s]),i[s].dom.parentNode&&t.dom.removeChild(i[s].dom))}else{for(let o=0;o<a;o++){let n=p[o],r=i[o];if(void 0===r)n instanceof e?(n.dom=d(n.name,n.isSVG),y(n),n.props.oncreate&&n.props.oncreate(n),C(n)):n.dom=document.createTextNode(n.nodeValue),t.dom.appendChild(n.dom);else if(n instanceof e)if(n.name===r.name){if(n.dom=r.dom,"v-once"in n.props||n.props.onbeforeupdate&&!1===n.props.onbeforeupdate(n,r)){n.children=r.children;continue}N(n,r),y(n,r),l.isMounted?n.props.onupdate&&n.props.onupdate(n,r):n.props.oncreate&&n.props.oncreate(n),C(n,r)}else n.dom=d(n.name,n.isSVG),y(n),n.props.oncreate&&n.props.oncreate(n),r instanceof e&&w(r),t.dom.replaceChild(n.dom,r.dom),C(n);else r instanceof e?(n.dom=document.createTextNode(n.nodeValue),w(r),t.dom.replaceChild(n.dom,r.dom)):(n.dom=r.dom,n.nodeValue!=n.dom.nodeValue&&(n.dom.nodeValue=n.nodeValue))}for(let o=s-1;o>=a;--o)i[o]instanceof e&&w(i[o]),i[o].dom.parentNode&&t.dom.removeChild(i[o].dom)}t.children=p}let x=null,S=null;l.unMount=()=>{h=f;let e=l.update();return l.isMounted=!1,u=null,e},l.update=(o,...n)=>{if(x&&((()=>{for(let e=m.length;e--;)for(let o of m[e].onCleanup)o();m=[]})(),S=x,x=new e(x.name,x.props,[l(h,o,...n)]),x.dom=S.dom,x.isSVG=S.isSVG,C(x,S),l.isMounted=!0,l.isNode))return x.dom.innerHTML},l.mount=(e,o,n,...i)=>(l.isMounted&&l.unMount(),u=t?"string"==typeof e?d(e,"svg"===e):e:"string"==typeof e?document.querySelectorAll(e)[0]:e,null!==u&&(x=r(u),x.isSVG="svg"===x.name,S=x,h=o),l.update(n,...i));let M={};l.directive=(e,o)=>{let n=`v-${e}`;-1===s.indexOf(n)&&(s.push(n),M[n]=o)};let b=o=>(n,t,d)=>{if(o?n:!n){let o=document.createTextNode("");return d&&d.dom&&d.dom.parentNode&&(d instanceof e&&w(d),d.dom.parentNode.replaceChild(o,d.dom)),t.name="#text",t.children=[],t.props={},t.dom=o,!1}};return l.directive("if",b(!1)),l.directive("unless",b(!0)),l.directive("for",(e,o)=>{o.children=e.map(o.children[0])}),l.directive("show",(e,o)=>{o.dom.style.display=e?"":"none"}),l.directive("class",(e,o)=>{for(let n in e)o.dom.classList.toggle(n,e[n])}),l.directive("html",(e,o)=>{o.children=[i(e)]}),l.newInstance=p,l}()})();
|
package/dist/valyrian.min.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6WyJwIiwiY29uc3RydWN0b3IiLCJhIiwidSIsImMiLCJ0aGlzIiwicHJvcHMiLCJjaGlsZHJlbiIsIm5hbWUiLCJ4Iiwibm9kZVZhbHVlIiwiTSIsImNvbXBvbmVudCIsIlMiLCJ3aW5kb3ciLCJnbG9iYWwiLCJOIiwiZCIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRlRWxlbWVudCIsIkwiLCJmb3JFYWNoIiwiY2FsbCIsImF0dHJpYnV0ZXMiLCJub2RlTmFtZSIsInRvTG93ZXJDYXNlIiwiZG9tIiwieSIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJub2RlVHlwZSIsInB1c2giLCJrIiwiRiIsImlubmVySFRNTCIsInRyaW0iLCJtYXAiLCJ2IiwiSCIsImUiLCJvIiwidCIsImlzTW91bnRlZCIsImlzTm9kZSIsInJlc2VydmVkV29yZHMiLCJ0cnVzdCIsInBhcmVudFZub2RlIiwib2xkUGFyZW50Vm5vZGUiLCJjdXJyZW50IiwiTWFwIiwidXNlUGx1Z2luIiwiaGFzIiwic2V0Iiwib25DbGVhbnVwIiwiaW5kZXhPZiIsImciLCJVIiwiVCIsIkciLCIkIiwidGFyZ2V0IiwidHlwZSIsImRlZmF1bHRQcmV2ZW50ZWQiLCJ1cGRhdGUiLCJwYXJlbnROb2RlIiwidyIsIk8iLCJhZGRFdmVudExpc3RlbmVyIiwic2xpY2UiLCJpc1NWRyIsInJlbW92ZUF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsIkUiLCJQIiwidXBkYXRlUHJvcGVydHkiLCJWIiwib25yZW1vdmUiLCJEIiwibCIsIkMiLCJpIiwibiIsInNwbGljZSIsIkFycmF5IiwiaXNBcnJheSIsInZpZXciLCJTdHJpbmciLCJ0ZXh0Q29udGVudCIsInIiLCJrZXkiLCJtIiwiTWF0aCIsIm1heCIsInMiLCJoIiwiQSIsInByb2Nlc3NlZCIsIm9uYmVmb3JldXBkYXRlIiwib251cGRhdGUiLCJvbmNyZWF0ZSIsImFwcGVuZENoaWxkIiwicmVwbGFjZUNoaWxkIiwicmVtb3ZlQ2hpbGQiLCJjcmVhdGVUZXh0Tm9kZSIsImYiLCJiIiwidW5Nb3VudCIsIm1vdW50IiwicXVlcnlTZWxlY3RvckFsbCIsImRpcmVjdGl2ZSIsIlIiLCJzdHlsZSIsImRpc3BsYXkiLCJjbGFzc0xpc3QiLCJ0b2dnbGUiLCJuZXdJbnN0YW5jZSJdLCJtYXBwaW5ncyI6Ik1Bb0RBLElBQUFBLEVBQUEsTUFTRUMsWUFBWUMsRUFBY0MsRUFBY0MsR0FDdENDLEtBQUtDLE1BQVFILEVBQ2JFLEtBQUtFLFNBQVdILEVBQ2hCQyxLQUFLRyxLQUFPTixJQVNoQk8sRUFBQSxNQUlFUixZQUFZQyxHQUNWRyxLQUFLSyxVQUFZUixJQVVyQlMsRUFBQSxNQUtFVixZQUFZQyxFQUE4QkMsRUFBY0MsR0FDdERDLEtBQUtDLE1BQVFILEVBQ2JFLEtBQUtFLFNBQVdILEVBQ2hCQyxLQUFLTyxVQUFZVixJQXNCakJXLEVBQTJCLG9CQUFYQyxRQUE0QyxvQkFBWEMsT0FHckQsU0FBQUMsRUFBdUJDLEVBQWlCZixHQUFpQixHQUN2RCxPQUFPQSxFQUFRZ0IsU0FBU0MsZ0JBQWdCLDZCQUE4QkYsR0FBV0MsU0FBU0UsY0FBY0gsR0FJMUcsU0FBQUksRUFBb0JKLEdBQ2xCLElBQUlmLEVBQWUsR0FDbkIsR0FBR29CLFFBQVFDLEtBQUtOLEVBQUlPLFdBQWFwQixHQUFnQkYsRUFBTUUsRUFBS3FCLFVBQVlyQixFQUFLTSxXQUU3RSxJQUFJUCxFQUFlLElBQUlILEVBQU1pQixFQUFJUSxTQUFTQyxjQUFleEIsRUFBTyxJQUNoRUMsRUFBTXdCLElBQU1WLEVBRVosSUFBQSxJQUFTYixFQUFJLEVBQUd3QixFQUFJWCxFQUFJWSxXQUFXQyxPQUFRMUIsRUFBSXdCLEVBQUd4QixJQUNoRCxHQUFtQyxJQUEvQmEsRUFBSVksV0FBV3pCLEdBQUcyQixTQUNwQjVCLEVBQU1JLFNBQVN5QixLQUFLWCxFQUFXSixFQUFJWSxXQUFXekIsVUFBQSxHQUNOLElBQS9CYSxFQUFJWSxXQUFXekIsR0FBRzJCLFNBQWdC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QU8sUUFDYmtDLEVBQU1uQyxTQUFXLEdBQ2pCbUMsRUFBTXBDLE1BQVEsR0FDZG9DLEVBQU1mLElBQU1XLEdBQ0wsSUFJWCxPQUFBckIsRUFBRTZGLFVBQVUsS0FBTUMsR0FBYyxJQUNoQzlGLEVBQUU2RixVQUFVLFNBQVVDLEdBQWMsSUFDcEM5RixFQUFFNkYsVUFBVSxNQUFPLENBQUN0RSxFQUFnQkMsS0FDbENBLEVBQU1sQyxTQUFXaUMsRUFBSUgsSUFBSUksRUFBTWxDLFNBQVMsTUFFMUNVLEVBQUU2RixVQUFVLE9BQVEsQ0FBQ3RFLEVBQWVDLEtBQ2pDQSxFQUFNZCxJQUF1Q3FGLE1BQU1DLFFBQVV6RSxFQUFPLEdBQUssU0FFNUV2QixFQUFFNkYsVUFBVSxRQUFTLENBQUN0RSxFQUFtQ0MsS0FDdkQsSUFBQSxJQUFTQyxLQUFRRixFQUNkQyxFQUFNZCxJQUFtQnVGLFVBQVVDLE9BQU96RSxFQUFNRixFQUFRRSxNQUc3RHpCLEVBQUU2RixVQUFVLE9BQVEsQ0FBQ3RFLEVBQWNDLEtBQ2pDQSxFQUFNbEMsU0FBVyxDQUFDMkIsRUFBTU0sTUFHMUJ2QixFQUFFbUcsWUFBYzdFLEVBRVR0QixFQUdzRHNCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuLyogZXNsaW50LWRpc2FibGUgc29uYXJqcy9jb2duaXRpdmUtY29tcGxleGl0eSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbnR5cGUgVm5vZGVPclVua25vd24gPSBWbm9kZUNvbXBvbmVudCB8IFZub2RlIHwgVGV4dFZub2RlIHwgYW55O1xuXG50eXBlIERvbUF0dHJpYnV0ZSA9IHsgbm9kZU5hbWU6IHN0cmluZzsgbm9kZVZhbHVlOiBzdHJpbmcgfTtcblxudHlwZSBEb21FbGVtZW50ID0gKEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCkgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG50eXBlIFByb3BzID0ge1xuICBrZXk/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGRhdGE/OiBzdHJpbmc7XG4gIG9uY3JlYXRlPzogeyAodm5vZGU6IFZub2RlKTogbmV2ZXIgfTtcbiAgb251cGRhdGU/OiB7ICh2bm9kZTogVm5vZGUsIG9sZFZub2RlOiBWbm9kZSB8IFRleHRWbm9kZSk6IG5ldmVyIH07XG4gIG9ucmVtb3ZlPzogeyAob2xkVm5vZGU6IFZub2RlKTogbmV2ZXIgfTtcbiAgb25iZWZvcmV1cGRhdGU/OiB7ICh2bm9kZTogVm5vZGUsIG9sZFZub2RlOiBWbm9kZSB8IFRleHRWbm9kZSk6IHVuZGVmaW5lZCB8IGJvb2xlYW4gfTtcbn0gJiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG50eXBlIENvbXBvbmVudCA9IChwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBjaGlsZHJlbj86IFZub2RlT3JVbmtub3duKSA9PiBWbm9kZU9yVW5rbm93biB8IFZub2RlT3JVbmtub3duW107XG5cbnR5cGUgVmFseXJpYW5Db21wb25lbnQgPVxuICB8IENvbXBvbmVudFxuICB8IChSZWNvcmQ8c3RyaW5nLCBhbnk+ICYge1xuICAgICAgdmlldzogQ29tcG9uZW50O1xuICAgIH0pO1xuXG50eXBlIEN1cnJlbnQgPSB7IHBhcmVudFZub2RlPzogVm5vZGU7IG9sZFBhcmVudFZub2RlPzogVm5vZGU7IGNvbXBvbmVudD86IFZub2RlQ29tcG9uZW50IH07XG5cbmludGVyZmFjZSBQbHVnaW4ge1xuICAodjogVmFseXJpYW4sIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogbmV2ZXI7XG59XG5cbmludGVyZmFjZSBEaXJlY3RpdmUge1xuICAodmFsdWU6IGFueSwgdm5vZGU6IFZub2RlLCBvbGRWbm9kZT86IFZub2RlIHwgVGV4dFZub2RlKTogdm9pZCB8IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBWYWx5cmlhbkV2ZW50SGFuZGxlciB7XG4gIChhOiBFdmVudCwgZG9tOiBEb21FbGVtZW50KTogdm9pZDtcbn1cblxuaW50ZXJmYWNlIFZub2RlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBwcm9wczogUHJvcHM7XG4gIGNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bltdO1xuICBkb20/OiBEb21FbGVtZW50O1xuICBvbkNsZWFudXA/OiBGdW5jdGlvbkNvbnN0cnVjdG9yW107XG4gIGlzU1ZHPzogYm9vbGVhbjtcbiAgcHJvY2Vzc2VkPzogYm9vbGVhbjtcbn1cblxuY2xhc3MgVm5vZGUgaW1wbGVtZW50cyBWbm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgcHJvcHM6IFByb3BzO1xuICBjaGlsZHJlbjogVm5vZGVPclVua25vd25bXTtcbiAgZG9tPzogRG9tRWxlbWVudDtcbiAgb25DbGVhbnVwPzogRnVuY3Rpb25Db25zdHJ1Y3RvcltdO1xuICBpc1NWRz86IGJvb2xlYW47XG4gIHByb2Nlc3NlZD86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBwcm9wczogUHJvcHMsIGNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bikge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgVGV4dFZub2RlIHtcbiAgZG9tPzogVGV4dDtcbiAgbm9kZVZhbHVlOiBzdHJpbmc7XG59XG5cbmNsYXNzIFRleHRWbm9kZSBpbXBsZW1lbnRzIFRleHRWbm9kZSB7XG4gIGRvbT86IFRleHQ7XG4gIG5vZGVWYWx1ZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5vZGVWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5ub2RlVmFsdWUgPSBub2RlVmFsdWU7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFZub2RlQ29tcG9uZW50IHtcbiAgY29tcG9uZW50OiBWYWx5cmlhbkNvbXBvbmVudDtcbiAgcHJvcHM6IFByb3BzO1xuICBjaGlsZHJlbjogVm5vZGVPclVua25vd25bXTtcbn1cblxuY2xhc3MgVm5vZGVDb21wb25lbnQgaW1wbGVtZW50cyBWbm9kZUNvbXBvbmVudCB7XG4gIGNvbXBvbmVudDogVmFseXJpYW5Db21wb25lbnQ7XG4gIHByb3BzOiBQcm9wcztcbiAgY2hpbGRyZW46IFZub2RlT3JVbmtub3duW107XG5cbiAgY29uc3RydWN0b3IoY29tcG9uZW50OiBWYWx5cmlhbkNvbXBvbmVudCwgcHJvcHM6IFByb3BzLCBjaGlsZHJlbjogVm5vZGVPclVua25vd25bXSkge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFZhbHlyaWFuIHtcbiAgKHRhZ09yQ29tcG9uZW50OiBzdHJpbmcgfCBWYWx5cmlhbkNvbXBvbmVudCwgcHJvcHM/OiBQcm9wcyB8IG51bGwsIGNoaWxkcmVuPzogVm5vZGVPclVua25vd24pOiBWbm9kZSB8IFZub2RlQ29tcG9uZW50O1xuICBpc01vdW50ZWQ6IGJvb2xlYW47XG4gIGlzTm9kZTogYm9vbGVhbjtcbiAgcmVzZXJ2ZWRXb3Jkczogc3RyaW5nW107XG4gIGN1cnJlbnQ6IEN1cnJlbnQ7XG4gIHRydXN0OiAoaHRtbFN0cmluZzogc3RyaW5nKSA9PiBWbm9kZVtdO1xuICB1c2VQbHVnaW46IChwbHVnaW46IFBsdWdpbiwgb3B0aW9uczogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdm9pZDtcbiAgb25DbGVhbnVwOiAoY2FsbGJhY2s6IHR5cGVvZiBGdW5jdGlvbikgPT4gdm9pZDtcbiAgdXBkYXRlUHJvcGVydHk6IChuYW1lOiBzdHJpbmcsIG5ld1Zub2RlOiBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0sIG9sZE5vZGU6IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSkgPT4gdm9pZDtcbiAgdXBkYXRlOiAocHJvcHM/OiBQcm9wcyB8IG51bGwsIC4uLmNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bikgPT4gc3RyaW5nIHwgdm9pZDtcbiAgbW91bnQ6IChjb250YWluZXI6IHN0cmluZyB8IERvbUVsZW1lbnQsIGNvbXBvbmVudDogVmFseXJpYW5Db21wb25lbnQsIHByb3BzPzogUHJvcHMgfCBudWxsLCAuLi5jaGlsZHJlbjogVm5vZGVPclVua25vd25bXSkgPT4gc3RyaW5nIHwgdm9pZDtcbiAgdW5Nb3VudDogKCkgPT4gc3RyaW5nIHwgYm9vbGVhbiB8IHZvaWQ7XG4gIGRpcmVjdGl2ZTogKGRpcmVjdGl2ZTogc3RyaW5nLCBoYW5kbGVyOiBEaXJlY3RpdmUpID0+IHZvaWQ7XG4gIG5ld0luc3RhbmNlOiAoKSA9PiBWYWx5cmlhbjtcbiAgW3g6IHN0cmluZ106IGFueTtcbn1cblxubGV0IGlzTm9kZSA9IHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIGdsb2JhbCAhPT0gXCJ1bmRlZmluZWRcIjtcblxuLy8gQ3JlYXRlIE5vZGUgZWxlbWVudFxuZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWdOYW1lOiBzdHJpbmcsIGlzU1ZHOiBib29sZWFuID0gZmFsc2UpOiBEb21FbGVtZW50IHtcbiAgcmV0dXJuIGlzU1ZHID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdGFnTmFtZSkgOiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xufVxuXG4vLyBUcmFuc2Zvcm1zIGEgRE9NIG5vZGUgdG8gYSBWTm9kZVxuZnVuY3Rpb24gZG9tVG9Wbm9kZShkb206IERvbUVsZW1lbnQpOiBWbm9kZSB7XG4gIGxldCBwcm9wczogUHJvcHMgPSB7fTtcbiAgW10uZm9yRWFjaC5jYWxsKGRvbS5hdHRyaWJ1dGVzLCAocHJvcDogQXR0cikgPT4gKHByb3BzW3Byb3Aubm9kZU5hbWVdID0gcHJvcC5ub2RlVmFsdWUpKTtcblxuICBsZXQgdm5vZGU6IFZub2RlID0gbmV3IFZub2RlKGRvbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLCBwcm9wcywgW10pO1xuICB2bm9kZS5kb20gPSBkb207XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBkb20uY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBpZiAoZG9tLmNoaWxkTm9kZXNbaV0ubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgIHZub2RlLmNoaWxkcmVuLnB1c2goZG9tVG9Wbm9kZShkb20uY2hpbGROb2Rlc1tpXSBhcyBEb21FbGVtZW50KSk7XG4gICAgfSBlbHNlIGlmIChkb20uY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMykge1xuICAgICAgbGV0IHRleHRWbm9kZSA9IG5ldyBUZXh0Vm5vZGUoZG9tLmNoaWxkTm9kZXNbaV0ubm9kZVZhbHVlIHx8IFwiXCIpO1xuICAgICAgdGV4dFZub2RlLmRvbSA9IGRvbS5jaGlsZE5vZGVzW2ldIGFzIHVua25vd24gYXMgVGV4dDtcbiAgICAgIHZub2RlLmNoaWxkcmVuLnB1c2godGV4dFZub2RlKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZub2RlO1xufVxuXG5jb25zdCB0cnVzdCA9IChodG1sU3RyaW5nOiBzdHJpbmcpID0+IHtcbiAgbGV0IGRpdiA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGRpdi5pbm5lckhUTUwgPSBodG1sU3RyaW5nLnRyaW0oKTtcblxuICByZXR1cm4gW10ubWFwLmNhbGwoZGl2LmNoaWxkTm9kZXMsIChpdGVtKSA9PiBkb21Ub1Zub2RlKGl0ZW0pKSBhcyBWbm9kZVtdO1xufTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1saW5lcy1wZXItZnVuY3Rpb25cbmZ1bmN0aW9uIHZhbHlyaWFuKCk6IFZhbHlyaWFuIHtcbiAgY29uc3QgdjogVmFseXJpYW4gPSAodGFnT3JDb21wb25lbnQsIHByb3BzLCAuLi5jaGlsZHJlbikgPT4ge1xuICAgIGlmICh0eXBlb2YgdGFnT3JDb21wb25lbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHJldHVybiBuZXcgVm5vZGUodGFnT3JDb21wb25lbnQsIHByb3BzIHx8IHt9LCBjaGlsZHJlbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgVm5vZGVDb21wb25lbnQodGFnT3JDb21wb25lbnQsIHByb3BzIHx8IHt9LCBjaGlsZHJlbik7XG4gICAgfVxuICB9O1xuXG4gIHYuaXNNb3VudGVkID0gZmFsc2U7XG4gIHYuaXNOb2RlID0gaXNOb2RlO1xuICBjb25zdCByZXNlcnZlZFdvcmRzID0gW1wia2V5XCIsIFwiZGF0YVwiLCBcInYtb25jZVwiLCBcIm9uY3JlYXRlXCIsIFwib251cGRhdGVcIiwgXCJvbnJlbW92ZVwiLCBcIm9uYmVmb3JldXBkYXRlXCJdO1xuICB2LnJlc2VydmVkV29yZHMgPSByZXNlcnZlZFdvcmRzO1xuICB2LnRydXN0ID0gdHJ1c3Q7XG5cbiAgY29uc3QgY3VycmVudDogQ3VycmVudCA9IHtcbiAgICBwYXJlbnRWbm9kZTogdW5kZWZpbmVkLFxuICAgIG9sZFBhcmVudFZub2RlOiB1bmRlZmluZWQsXG4gICAgY29tcG9uZW50OiB1bmRlZmluZWRcbiAgfTtcbiAgdi5jdXJyZW50ID0gY3VycmVudDtcblxuICBjb25zdCBwbHVnaW5zID0gbmV3IE1hcCgpO1xuXG4gIHYudXNlUGx1Z2luID0gKHBsdWdpbjogUGx1Z2luLCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge30pID0+ICFwbHVnaW5zLmhhcyhwbHVnaW4pICYmIHBsdWdpbnMuc2V0KHBsdWdpbiwgdHJ1ZSkgJiYgcGx1Z2luKHYgYXMgVmFseXJpYW4sIG9wdGlvbnMpO1xuXG4gIGxldCB2bm9kZXNUb0NsZWFudXA6IFZub2RlW10gPSBbXTtcblxuICB2Lm9uQ2xlYW51cCA9IChjYWxsYmFjazogRnVuY3Rpb25Db25zdHJ1Y3RvcikgPT4ge1xuICAgIGxldCBwYXJlbnRWbm9kZSA9IHYuY3VycmVudC5wYXJlbnRWbm9kZSBhcyBWbm9kZTtcbiAgICBpZiAoIXBhcmVudFZub2RlLm9uQ2xlYW51cCkge1xuICAgICAgcGFyZW50Vm5vZGUub25DbGVhbnVwID0gW10gYXMgRnVuY3Rpb25Db25zdHJ1Y3RvcltdO1xuICAgIH1cblxuICAgIHBhcmVudFZub2RlLm9uQ2xlYW51cC5wdXNoKGNhbGxiYWNrKTtcblxuICAgIGlmICh2bm9kZXNUb0NsZWFudXAuaW5kZXhPZihwYXJlbnRWbm9kZSkgPT09IC0xKSB7XG4gICAgICB2bm9kZXNUb0NsZWFudXAucHVzaChwYXJlbnRWbm9kZSk7XG4gICAgfVxuICB9O1xuXG4gIGxldCBjbGVhbnVwVm5vZGVzID0gKCkgPT4ge1xuICAgIGZvciAobGV0IGwgPSB2bm9kZXNUb0NsZWFudXAubGVuZ3RoOyBsLS07ICkge1xuICAgICAgZm9yIChsZXQgY2FsbGJhY2sgb2Ygdm5vZGVzVG9DbGVhbnVwW2xdLm9uQ2xlYW51cCBhcyBGdW5jdGlvbkNvbnN0cnVjdG9yW10pIHtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdm5vZGVzVG9DbGVhbnVwID0gW107XG4gIH07XG5cbiAgbGV0IG1haW5Db250YWluZXI6IERvbUVsZW1lbnQgfCBudWxsID0gbnVsbDtcbiAgbGV0IGVtcHR5Q29tcG9uZW50OiBWYWx5cmlhbkNvbXBvbmVudCA9ICgpID0+IFwiXCI7XG4gIGxldCBtb3VudGVkQ29tcG9uZW50OiBWYWx5cmlhbkNvbXBvbmVudCA9IGVtcHR5Q29tcG9uZW50O1xuXG4gIGNvbnN0IGF0dGFjaGVkTGlzdGVuZXJzOiBzdHJpbmdbXSA9IFtdO1xuICBmdW5jdGlvbiBldmVudExpc3RlbmVyKGU6IEV2ZW50KSB7XG4gICAgbGV0IGRvbSA9IGUudGFyZ2V0IGFzIERvbUVsZW1lbnQ7XG4gICAgbGV0IG5hbWUgPSBgdi1vbiR7ZS50eXBlfWA7XG4gICAgd2hpbGUgKGRvbSkge1xuICAgICAgaWYgKGRvbVtuYW1lXSkge1xuICAgICAgICAoZG9tW25hbWVdIGFzIFZhbHlyaWFuRXZlbnRIYW5kbGVyKShlLCBkb20pO1xuICAgICAgICBpZiAoIWUuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICAgIHYudXBkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgZG9tID0gZG9tLnBhcmVudE5vZGUgYXMgRG9tRWxlbWVudDtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVQcm9wZXJ0eShwcm9wOiBzdHJpbmcsIG5ld1Zub2RlOiBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0sIG9sZFZub2RlPzogVm5vZGUpOiB2b2lkIHwgYm9vbGVhbiB7XG4gICAgaWYgKHJlc2VydmVkV29yZHMuaW5kZXhPZihwcm9wKSAhPT0gLTEpIHtcbiAgICAgIGlmIChwcm9wIGluIGRpcmVjdGl2ZXMpIHtcbiAgICAgICAgcmV0dXJuIGRpcmVjdGl2ZXNbcHJvcF0obmV3Vm5vZGUucHJvcHNbcHJvcF0sIG5ld1Zub2RlLCBvbGRWbm9kZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbmV3Vm5vZGUucHJvcHNbcHJvcF0gPT09IFwiZnVuY3Rpb25cIiAmJiBuZXdWbm9kZS5kb21bYHYtJHtwcm9wfWBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChhdHRhY2hlZExpc3RlbmVycy5pbmRleE9mKHByb3ApID09PSAtMSkge1xuICAgICAgICAobWFpbkNvbnRhaW5lciBhcyBEb21FbGVtZW50KS5hZGRFdmVudExpc3RlbmVyKHByb3Auc2xpY2UoMiksIGV2ZW50TGlzdGVuZXIpO1xuICAgICAgICBhdHRhY2hlZExpc3RlbmVycy5wdXNoKHByb3ApO1xuICAgICAgfVxuXG4gICAgICBuZXdWbm9kZS5kb21bYHYtJHtwcm9wfWBdID0gbmV3Vm5vZGUucHJvcHNbcHJvcF07XG4gICAgfSBlbHNlIGlmIChwcm9wIGluIG5ld1Zub2RlLmRvbSAmJiAhbmV3Vm5vZGUuaXNTVkcpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgIGlmIChuZXdWbm9kZS5kb21bcHJvcF0gIT0gbmV3Vm5vZGUucHJvcHNbcHJvcF0pIHtcbiAgICAgICAgbmV3Vm5vZGUuZG9tW3Byb3BdID0gbmV3Vm5vZGUucHJvcHNbcHJvcF07XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvbGRWbm9kZSA9PT0gdW5kZWZpbmVkIHx8IG5ld1Zub2RlLnByb3BzW3Byb3BdICE9PSBvbGRWbm9kZS5wcm9wc1twcm9wXSkge1xuICAgICAgaWYgKG5ld1Zub2RlLnByb3BzW3Byb3BdID09PSBmYWxzZSkge1xuICAgICAgICBuZXdWbm9kZS5kb20ucmVtb3ZlQXR0cmlidXRlKHByb3ApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLnNldEF0dHJpYnV0ZShwcm9wLCBuZXdWbm9kZS5wcm9wc1twcm9wXSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHYudXBkYXRlUHJvcGVydHkgPSB1cGRhdGVQcm9wZXJ0eTtcblxuICAvLyBVcGRhdGUgYSBWbm9kZS5kb20gSFRNTEVsZW1lbnQgd2l0aCBuZXcgVm5vZGUgcHJvcHMgdGhhdCBhcmUgZGlmZmVyZW50IGZyb20gb2xkIFZub2RlIHByb3BzXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnRpZXMobmV3Vm5vZGU6IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkVm5vZGU/OiBWbm9kZSk6IHZvaWQge1xuICAgIGZvciAobGV0IHByb3AgaW4gbmV3Vm5vZGUucHJvcHMpIHtcbiAgICAgIGlmICh1cGRhdGVQcm9wZXJ0eShwcm9wLCBuZXdWbm9kZSwgb2xkVm5vZGUpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVtb3ZlUHJvcGVydGllcyhuZXdWbm9kZTogVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRWbm9kZTogVm5vZGUpIHtcbiAgICBmb3IgKGxldCBuYW1lIGluIG9sZFZub2RlLnByb3BzKSB7XG4gICAgICBpZiAocmVzZXJ2ZWRXb3Jkcy5pbmRleE9mKG5hbWUpID09PSAtMSAmJiBuYW1lIGluIG5ld1Zub2RlLnByb3BzID09PSBmYWxzZSAmJiB0eXBlb2Ygb2xkVm5vZGUucHJvcHNbbmFtZV0gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBpZiAobmFtZSBpbiBuZXdWbm9kZS5kb20pIHtcbiAgICAgICAgICBuZXdWbm9kZS5kb21bbmFtZV0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5ld1Zub2RlLmRvbS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBjYWxsUmVtb3ZlID0gKHZub2RlOiBWbm9kZSkgPT4ge1xuICAgIGZvciAobGV0IGkgPSAwLCBsID0gdm5vZGUuY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICB2bm9kZS5jaGlsZHJlbltpXSBpbnN0YW5jZW9mIFZub2RlICYmIGNhbGxSZW1vdmUodm5vZGUuY2hpbGRyZW5baV0pO1xuICAgIH1cblxuICAgIHZub2RlLnByb3BzLm9ucmVtb3ZlICYmIHZub2RlLnByb3BzLm9ucmVtb3ZlKHZub2RlKTtcbiAgfTtcbiAgLy8gUGF0Y2ggYSBET00gbm9kZSB3aXRoIGEgbmV3IFZOb2RlIHRyZWVcbiAgZnVuY3Rpb24gcGF0Y2gobmV3UGFyZW50Vm5vZGU6IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkUGFyZW50Vm5vZGU/OiBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0pOiB2b2lkIHtcbiAgICBsZXQgb2xkVHJlZSA9IG9sZFBhcmVudFZub2RlPy5jaGlsZHJlbiB8fCBbXTtcbiAgICBsZXQgbmV3VHJlZSA9IG5ld1BhcmVudFZub2RlLmNoaWxkcmVuO1xuICAgIGxldCBvbGRUcmVlTGVuZ3RoID0gb2xkVHJlZS5sZW5ndGg7XG5cbiAgICBjdXJyZW50LnBhcmVudFZub2RlID0gbmV3UGFyZW50Vm5vZGU7XG4gICAgY3VycmVudC5vbGRQYXJlbnRWbm9kZSA9IG9sZFBhcmVudFZub2RlO1xuXG4gICAgLy8gRmxhdCBuZXdUcmVlXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuZXdUcmVlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY2hpbGRWbm9kZSA9IG5ld1RyZWVbaV07XG5cbiAgICAgIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgICAgY2hpbGRWbm9kZS5pc1NWRyA9IG5ld1BhcmVudFZub2RlLmlzU1ZHIHx8IGNoaWxkVm5vZGUubmFtZSA9PT0gXCJzdmdcIjtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGRWbm9kZSA9PT0gbnVsbCB8fCBjaGlsZFZub2RlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbmV3VHJlZS5zcGxpY2UoaS0tLCAxKTtcbiAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShjaGlsZFZub2RlKSkge1xuICAgICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEsIC4uLmNoaWxkVm5vZGUpO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGVDb21wb25lbnQpIHtcbiAgICAgICAgdi5jdXJyZW50LmNvbXBvbmVudCA9IGNoaWxkVm5vZGU7XG4gICAgICAgIG5ld1RyZWUuc3BsaWNlKFxuICAgICAgICAgIGktLSxcbiAgICAgICAgICAxLFxuICAgICAgICAgIC4uLltcbiAgICAgICAgICAgIFwidmlld1wiIGluIGNoaWxkVm5vZGUuY29tcG9uZW50XG4gICAgICAgICAgICAgID8gY2hpbGRWbm9kZS5jb21wb25lbnQudmlldy5jYWxsKGNoaWxkVm5vZGUuY29tcG9uZW50LCBjaGlsZFZub2RlLnByb3BzLCBjaGlsZFZub2RlLmNoaWxkcmVuKVxuICAgICAgICAgICAgICA6IChjaGlsZFZub2RlLmNvbXBvbmVudCBhcyBDb21wb25lbnQpLmNhbGwoY2hpbGRWbm9kZS5jb21wb25lbnQsIGNoaWxkVm5vZGUucHJvcHMsIGNoaWxkVm5vZGUuY2hpbGRyZW4pXG4gICAgICAgICAgXVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGkgPiAwICYmIG5ld1RyZWVbaSAtIDFdLm5vZGVWYWx1ZSkge1xuICAgICAgICAgIG5ld1RyZWVbaSAtIDFdLm5vZGVWYWx1ZSArPSBjaGlsZFZub2RlO1xuICAgICAgICAgIG5ld1RyZWUuc3BsaWNlKGktLSwgMSk7XG4gICAgICAgIH0gZWxzZSBpZiAoY2hpbGRWbm9kZSBpbnN0YW5jZW9mIFRleHRWbm9kZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBuZXdUcmVlW2ldID0gbmV3IFRleHRWbm9kZShTdHJpbmcoY2hpbGRWbm9kZSkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5ld1RyZWVMZW5ndGggPSBuZXdUcmVlLmxlbmd0aDtcblxuICAgIC8vIGlmIG5ld1RyZWUgaXMgZW1wdHksIHJlbW92ZSBpdFxuICAgIGlmIChuZXdUcmVlTGVuZ3RoID09PSAwKSB7XG4gICAgICBpZiAob2xkVHJlZUxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IG9sZFRyZWVMZW5ndGg7IGktLTsgKSB7XG4gICAgICAgICAgb2xkVHJlZVtpXSBpbnN0YW5jZW9mIFZub2RlICYmIGNhbGxSZW1vdmUob2xkVHJlZVtpXSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gRmFzdCBub2RlIHJlbW92ZSBieSBzZXR0aW5nIHRleHRDb250ZW50XG4gICAgICAgIG5ld1BhcmVudFZub2RlLmRvbS50ZXh0Q29udGVudCA9IFwiXCI7XG4gICAgICB9XG4gICAgICAvLyBJZiB0aGUgdHJlZSBpcyBrZXllZCBsaXN0IGFuZCBpcyBub3QgZmlyc3QgcmVuZGVyXG4gICAgfSBlbHNlIGlmIChvbGRUcmVlTGVuZ3RoICYmIG5ld1RyZWVbMF0gaW5zdGFuY2VvZiBWbm9kZSAmJiBcImtleVwiIGluIG5ld1RyZWVbMF0ucHJvcHMpIHtcbiAgICAgIC8vIDEuIE11dGF0ZSB0aGUgb2xkIGtleSBsaXN0IHRvIG1hdGNoIHRoZSBuZXcga2V5IGxpc3RcbiAgICAgIGxldCBvbGRLZXllZExpc3Q7XG5cbiAgICAgIC8vIGlmIHRoZSBvbGRUcmVlIGRvZXMgbm90IGhhdmUgYSBrZXllZCBsaXN0IGZhc3QgcmVtb3ZlIGFsbCBub2Rlc1xuICAgICAgaWYgKG9sZFRyZWVbMF0gaW5zdGFuY2VvZiBWbm9kZSA9PT0gZmFsc2UgfHwgXCJrZXlcIiBpbiBvbGRUcmVlWzBdLnByb3BzID09PSBmYWxzZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gb2xkVHJlZUxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICBvbGRUcmVlW2ldIGluc3RhbmNlb2YgVm5vZGUgJiYgY2FsbFJlbW92ZShvbGRUcmVlW2ldKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGYXN0IG5vZGUgcmVtb3ZlIGJ5IHNldHRpbmcgdGV4dENvbnRlbnRcbiAgICAgICAgbmV3UGFyZW50Vm5vZGUuZG9tLnRleHRDb250ZW50ID0gXCJcIjtcbiAgICAgICAgb2xkS2V5ZWRMaXN0ID0gW107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbGRLZXllZExpc3QgPSBvbGRUcmVlLm1hcCgodm5vZGUpID0+IHZub2RlLnByb3BzLmtleSk7XG4gICAgICB9XG5cbiAgICAgIC8vIDIuIE9idGFpbiB0aGUgbWF4IGxlbmd0aCBvZiBib3RoIGxpc3RzXG4gICAgICBsZXQgbmV3S2V5ZWRMaXN0ID0gbmV3VHJlZS5tYXAoKHZub2RlKSA9PiB2bm9kZS5wcm9wcy5rZXkpO1xuICAgICAgY29uc3QgbWF4TGlzdExlbmd0aCA9IE1hdGgubWF4KG5ld1RyZWVMZW5ndGgsIG9sZEtleWVkTGlzdC5sZW5ndGgpO1xuXG4gICAgICAvLyAzLiBDeWNsZSBvdmVyIGFsbCB0aGUgZWxlbWVudHMgb2YgdGhlIGxpc3QgdW50aWwgdGhlIG1heCBsZW5ndGhcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF4TGlzdExlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChpIDwgbmV3VHJlZUxlbmd0aCkge1xuICAgICAgICAgIGxldCBjaGlsZFZub2RlID0gbmV3VHJlZVtpXTtcbiAgICAgICAgICBsZXQgb2xkQ2hpbGRWbm9kZSA9IG9sZEtleWVkTGlzdFtpXSA9PT0gbmV3S2V5ZWRMaXN0W2ldID8gb2xkVHJlZVtpXSA6IG9sZFRyZWVbb2xkS2V5ZWRMaXN0LmluZGV4T2YoY2hpbGRWbm9kZS5wcm9wcy5rZXkpXTtcbiAgICAgICAgICBsZXQgc2hvdWxkUGF0Y2ggPSB0cnVlO1xuXG4gICAgICAgICAgaWYgKG9sZENoaWxkVm5vZGUpIHtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUuZG9tID0gb2xkQ2hpbGRWbm9kZS5kb207XG4gICAgICAgICAgICBvbGRDaGlsZFZub2RlLnByb2Nlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoXCJ2LW9uY2VcIiBpbiBjaGlsZFZub2RlLnByb3BzIHx8IChjaGlsZFZub2RlLnByb3BzLm9uYmVmb3JldXBkYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25iZWZvcmV1cGRhdGUoY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSkgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAvLyBza2lwIHRoaXMgcGF0Y2hcbiAgICAgICAgICAgICAgY2hpbGRWbm9kZS5jaGlsZHJlbiA9IG9sZENoaWxkVm5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgICAgIHNob3VsZFBhdGNoID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICByZW1vdmVQcm9wZXJ0aWVzKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgdXBkYXRlUHJvcGVydGllcyhjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIGlmICh2LmlzTW91bnRlZCkge1xuICAgICAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub251cGRhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZShjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUoY2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBjcmVhdGVFbGVtZW50KGNoaWxkVm5vZGUubmFtZSwgY2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KTtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShjaGlsZFZub2RlKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAobmV3UGFyZW50Vm5vZGUuZG9tLmNoaWxkTm9kZXNbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgbmV3UGFyZW50Vm5vZGUuZG9tLmFwcGVuZENoaWxkKGNoaWxkVm5vZGUuZG9tKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKG5ld1BhcmVudFZub2RlLmRvbS5jaGlsZE5vZGVzW2ldICE9PSBjaGlsZFZub2RlLmRvbSkge1xuICAgICAgICAgICAgb2xkVHJlZVtpXSBpbnN0YW5jZW9mIFZub2RlICYmICFvbGRUcmVlW2ldLnByb2Nlc3NlZCAmJiBuZXdLZXllZExpc3QuaW5kZXhPZihvbGRUcmVlW2ldLnByb3BzLmtleSkgPT09IC0xICYmIGNhbGxSZW1vdmUob2xkVHJlZVtpXSk7XG4gICAgICAgICAgICBuZXdQYXJlbnRWbm9kZS5kb20ucmVwbGFjZUNoaWxkKGNoaWxkVm5vZGUuZG9tLCBuZXdQYXJlbnRWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2hvdWxkUGF0Y2ggJiYgcGF0Y2goY2hpbGRWbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0sIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghb2xkVHJlZVtpXS5wcm9jZXNzZWQpIHtcbiAgICAgICAgICAgIG9sZFRyZWVbaV0gaW5zdGFuY2VvZiBWbm9kZSAmJiBjYWxsUmVtb3ZlKG9sZFRyZWVbaV0pO1xuICAgICAgICAgICAgb2xkVHJlZVtpXS5kb20ucGFyZW50Tm9kZSAmJiBuZXdQYXJlbnRWbm9kZS5kb20ucmVtb3ZlQ2hpbGQob2xkVHJlZVtpXS5kb20pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWVMZW5ndGg7IGkrKykge1xuICAgICAgICBsZXQgY2hpbGRWbm9kZSA9IG5ld1RyZWVbaV07XG4gICAgICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkVHJlZVtpXTtcblxuICAgICAgICAvLyBpZiBvbGRDaGlsZFZub2RlIGlzIHVuZGVmaW5lZCwgaXQncyBhIG5ldyBub2RlLCBhcHBlbmQgaXRcbiAgICAgICAgaWYgKG9sZENoaWxkVm5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUuZG9tID0gY3JlYXRlRWxlbWVudChjaGlsZFZub2RlLm5hbWUsIGNoaWxkVm5vZGUuaXNTVkcpO1xuICAgICAgICAgICAgdXBkYXRlUHJvcGVydGllcyhjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSk7XG4gICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUoY2hpbGRWbm9kZSk7XG4gICAgICAgICAgICBwYXRjaChjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUuZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGRWbm9kZS5ub2RlVmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBuZXdQYXJlbnRWbm9kZS5kb20uYXBwZW5kQ2hpbGQoY2hpbGRWbm9kZS5kb20pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGlmIGNoaWxkVm5vZGUgaXMgVm5vZGUsIHJlcGxhY2UgaXQgd2l0aCBpdHMgRE9NIG5vZGVcbiAgICAgICAgICBpZiAoY2hpbGRWbm9kZSBpbnN0YW5jZW9mIFZub2RlKSB7XG4gICAgICAgICAgICBpZiAoY2hpbGRWbm9kZS5uYW1lID09PSBvbGRDaGlsZFZub2RlLm5hbWUpIHtcbiAgICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBvbGRDaGlsZFZub2RlLmRvbTtcblxuICAgICAgICAgICAgICBpZiAoXCJ2LW9uY2VcIiBpbiBjaGlsZFZub2RlLnByb3BzIHx8IChjaGlsZFZub2RlLnByb3BzLm9uYmVmb3JldXBkYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25iZWZvcmV1cGRhdGUoY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSkgPT09IGZhbHNlKSkge1xuICAgICAgICAgICAgICAgIC8vIHNraXAgdGhpcyBwYXRjaFxuICAgICAgICAgICAgICAgIGNoaWxkVm5vZGUuY2hpbGRyZW4gPSBvbGRDaGlsZFZub2RlLmNoaWxkcmVuO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmVtb3ZlUHJvcGVydGllcyhjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoY2hpbGRWbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0sIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgICAgICBpZiAodi5pc01vdW50ZWQpIHtcbiAgICAgICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9udXBkYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub251cGRhdGUoY2hpbGRWbm9kZSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlKGNoaWxkVm5vZGUpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhdGNoKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGNoaWxkVm5vZGUuZG9tID0gY3JlYXRlRWxlbWVudChjaGlsZFZub2RlLm5hbWUsIGNoaWxkVm5vZGUuaXNTVkcpO1xuICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KTtcbiAgICAgICAgICAgICAgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlKGNoaWxkVm5vZGUpO1xuICAgICAgICAgICAgICBvbGRDaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUgJiYgY2FsbFJlbW92ZShvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgbmV3UGFyZW50Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChjaGlsZFZub2RlLmRvbSwgb2xkQ2hpbGRWbm9kZS5kb20pO1xuICAgICAgICAgICAgICBwYXRjaChjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChvbGRDaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZFZub2RlLm5vZGVWYWx1ZSk7XG4gICAgICAgICAgICAgIGNhbGxSZW1vdmUob2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIG5ld1BhcmVudFZub2RlLmRvbS5yZXBsYWNlQ2hpbGQoY2hpbGRWbm9kZS5kb20sIG9sZENoaWxkVm5vZGUuZG9tIGFzIERvbUVsZW1lbnQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBvbGRDaGlsZFZub2RlLmRvbTtcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgICAgICAgICBpZiAoY2hpbGRWbm9kZS5ub2RlVmFsdWUgIT0gY2hpbGRWbm9kZS5kb20ubm9kZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20ubm9kZVZhbHVlID0gY2hpbGRWbm9kZS5ub2RlVmFsdWU7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gRm9yIHJlbWFpbmluZyBvbGQgY2hpbGRyZW46IHJlbW92ZSBmcm9tIERPTSwgZ2FyYmFnZSBjb2xsZWN0XG4gICAgICBmb3IgKGxldCBpID0gb2xkVHJlZUxlbmd0aCAtIDE7IGkgPj0gbmV3VHJlZUxlbmd0aDsgLS1pKSB7XG4gICAgICAgIG9sZFRyZWVbaV0gaW5zdGFuY2VvZiBWbm9kZSAmJiBjYWxsUmVtb3ZlKG9sZFRyZWVbaV0pO1xuICAgICAgICBvbGRUcmVlW2ldLmRvbS5wYXJlbnROb2RlICYmIG5ld1BhcmVudFZub2RlLmRvbS5yZW1vdmVDaGlsZChvbGRUcmVlW2ldLmRvbSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgbmV3UGFyZW50Vm5vZGUuY2hpbGRyZW4gPSBuZXdUcmVlO1xuICB9XG5cbiAgbGV0IG1haW5Wbm9kZTogVm5vZGUgfCBudWxsID0gbnVsbDtcbiAgbGV0IG9sZE1haW5Wbm9kZTogVm5vZGUgfCBudWxsID0gbnVsbDtcblxuICB2LnVuTW91bnQgPSAoKSA9PiB7XG4gICAgbW91bnRlZENvbXBvbmVudCA9IGVtcHR5Q29tcG9uZW50O1xuICAgIGxldCByZXN1bHQgPSB2LnVwZGF0ZSgpO1xuICAgIHYuaXNNb3VudGVkID0gZmFsc2U7XG4gICAgbWFpbkNvbnRhaW5lciA9IG51bGw7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfTtcblxuICB2LnVwZGF0ZSA9IChwcm9wcywgLi4uY2hpbGRyZW4pID0+IHtcbiAgICBpZiAobWFpblZub2RlKSB7XG4gICAgICBjbGVhbnVwVm5vZGVzKCk7XG4gICAgICBvbGRNYWluVm5vZGUgPSBtYWluVm5vZGU7XG4gICAgICBtYWluVm5vZGUgPSBuZXcgVm5vZGUobWFpblZub2RlLm5hbWUsIG1haW5Wbm9kZS5wcm9wcywgW3YobW91bnRlZENvbXBvbmVudCwgcHJvcHMsIC4uLmNoaWxkcmVuKV0pO1xuICAgICAgbWFpblZub2RlLmRvbSA9IG9sZE1haW5Wbm9kZS5kb207XG4gICAgICBtYWluVm5vZGUuaXNTVkcgPSBvbGRNYWluVm5vZGUuaXNTVkc7XG4gICAgICBwYXRjaChtYWluVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogTm9kZSB9LCBvbGRNYWluVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogTm9kZSB9KTtcbiAgICAgIHYuaXNNb3VudGVkID0gdHJ1ZTtcbiAgICAgIGlmICh2LmlzTm9kZSkge1xuICAgICAgICByZXR1cm4gKG1haW5Wbm9kZS5kb20gYXMgSFRNTEVsZW1lbnQpLmlubmVySFRNTDtcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgdi5tb3VudCA9IChjb250YWluZXIsIGNvbXBvbmVudCwgcHJvcHMsIC4uLmNoaWxkcmVuKSA9PiB7XG4gICAgaWYgKHYuaXNNb3VudGVkKSB7XG4gICAgICB2LnVuTW91bnQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOb2RlKSB7XG4gICAgICBtYWluQ29udGFpbmVyID0gdHlwZW9mIGNvbnRhaW5lciA9PT0gXCJzdHJpbmdcIiA/IGNyZWF0ZUVsZW1lbnQoY29udGFpbmVyLCBjb250YWluZXIgPT09IFwic3ZnXCIpIDogY29udGFpbmVyO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYWluQ29udGFpbmVyID0gdHlwZW9mIGNvbnRhaW5lciA9PT0gXCJzdHJpbmdcIiA/IChkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKGNvbnRhaW5lcilbMF0gYXMgRG9tRWxlbWVudCkgOiBjb250YWluZXI7XG4gICAgfVxuXG4gICAgaWYgKG1haW5Db250YWluZXIgIT09IG51bGwpIHtcbiAgICAgIG1haW5Wbm9kZSA9IGRvbVRvVm5vZGUobWFpbkNvbnRhaW5lcik7XG4gICAgICBtYWluVm5vZGUuaXNTVkcgPSBtYWluVm5vZGUubmFtZSA9PT0gXCJzdmdcIjtcbiAgICAgIG9sZE1haW5Wbm9kZSA9IG1haW5Wbm9kZTtcbiAgICAgIG1vdW50ZWRDb21wb25lbnQgPSBjb21wb25lbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHYudXBkYXRlKHByb3BzLCAuLi5jaGlsZHJlbik7XG4gIH07XG5cbiAgbGV0IGRpcmVjdGl2ZXM6IFJlY29yZDxzdHJpbmcsIERpcmVjdGl2ZT4gPSB7fTtcblxuICB2LmRpcmVjdGl2ZSA9IChuYW1lOiBzdHJpbmcsIGRpcmVjdGl2ZTogRGlyZWN0aXZlKSA9PiB7XG4gICAgbGV0IGZ1bGxOYW1lID0gYHYtJHtuYW1lfWA7XG4gICAgaWYgKHJlc2VydmVkV29yZHMuaW5kZXhPZihmdWxsTmFtZSkgPT09IC0xKSB7XG4gICAgICByZXNlcnZlZFdvcmRzLnB1c2goZnVsbE5hbWUpO1xuICAgICAgZGlyZWN0aXZlc1tmdWxsTmFtZV0gPSBkaXJlY3RpdmU7XG4gICAgfVxuICB9O1xuXG4gIGxldCBoaWRlRGlyZWN0aXZlID0gKHRlc3Q6IGJvb2xlYW4pID0+IChib29sOiBib29sZWFuLCB2bm9kZTogVm5vZGUsIG9sZG5vZGU/OiBWbm9kZSB8IFRleHRWbm9kZSkgPT4ge1xuICAgIGxldCB2YWx1ZSA9IHRlc3QgPyBib29sIDogIWJvb2w7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBsZXQgbmV3ZG9tID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7XG4gICAgICBpZiAob2xkbm9kZSAmJiBvbGRub2RlLmRvbSAmJiBvbGRub2RlLmRvbS5wYXJlbnROb2RlKSB7XG4gICAgICAgIG9sZG5vZGUgaW5zdGFuY2VvZiBWbm9kZSAmJiBjYWxsUmVtb3ZlKG9sZG5vZGUpO1xuICAgICAgICBvbGRub2RlLmRvbS5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChuZXdkb20sIG9sZG5vZGUuZG9tKTtcbiAgICAgIH1cbiAgICAgIHZub2RlLm5hbWUgPSBcIiN0ZXh0XCI7XG4gICAgICB2bm9kZS5jaGlsZHJlbiA9IFtdO1xuICAgICAgdm5vZGUucHJvcHMgPSB7fTtcbiAgICAgIHZub2RlLmRvbSA9IG5ld2RvbSBhcyB1bmtub3duIGFzIERvbUVsZW1lbnQ7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9O1xuXG4gIHYuZGlyZWN0aXZlKFwiaWZcIiwgaGlkZURpcmVjdGl2ZShmYWxzZSkpO1xuICB2LmRpcmVjdGl2ZShcInVubGVzc1wiLCBoaWRlRGlyZWN0aXZlKHRydWUpKTtcbiAgdi5kaXJlY3RpdmUoXCJmb3JcIiwgKHNldDogdW5rbm93bltdLCB2bm9kZTogVm5vZGUpID0+IHtcbiAgICB2bm9kZS5jaGlsZHJlbiA9IHNldC5tYXAodm5vZGUuY2hpbGRyZW5bMF0gYXMgKHZhbHVlOiB1bmtub3duKSA9PiBGdW5jdGlvbik7XG4gIH0pO1xuICB2LmRpcmVjdGl2ZShcInNob3dcIiwgKGJvb2w6IGJvb2xlYW4sIHZub2RlOiBWbm9kZSkgPT4ge1xuICAgICh2bm9kZS5kb20gYXMgeyBzdHlsZTogeyBkaXNwbGF5OiBzdHJpbmcgfSB9KS5zdHlsZS5kaXNwbGF5ID0gYm9vbCA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgfSk7XG4gIHYuZGlyZWN0aXZlKFwiY2xhc3NcIiwgKGNsYXNzZXM6IHsgW3g6IHN0cmluZ106IGJvb2xlYW4gfSwgdm5vZGU6IFZub2RlKSA9PiB7XG4gICAgZm9yIChsZXQgbmFtZSBpbiBjbGFzc2VzKSB7XG4gICAgICAodm5vZGUuZG9tIGFzIERvbUVsZW1lbnQpLmNsYXNzTGlzdC50b2dnbGUobmFtZSwgY2xhc3Nlc1tuYW1lXSk7XG4gICAgfVxuICB9KTtcbiAgdi5kaXJlY3RpdmUoXCJodG1sXCIsIChodG1sOiBzdHJpbmcsIHZub2RlOiBWbm9kZSkgPT4ge1xuICAgIHZub2RlLmNoaWxkcmVuID0gW3RydXN0KGh0bWwpXTtcbiAgfSk7XG5cbiAgdi5uZXdJbnN0YW5jZSA9IHZhbHlyaWFuO1xuXG4gIHJldHVybiB2O1xufVxuXG4oKGlzTm9kZSA/IGdsb2JhbCA6IHdpbmRvdykgYXMgdW5rbm93biBhcyB7IHY6IFZhbHlyaWFuIH0pLnYgPSB2YWx5cmlhbigpO1xuIl19
|
|
1
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL2xpYi9pbmRleC50cyJdLCJuYW1lcyI6WyJwIiwibmFtZSIsInByb3BzIiwiY2hpbGRyZW4iLCJkb20iLCJvbkNsZWFudXAiLCJpc1NWRyIsInByb2Nlc3NlZCIsImNvbnN0cnVjdG9yIiwiYSIsInUiLCJjIiwidGhpcyIsIngiLCJub2RlVmFsdWUiLCJNIiwiY29tcG9uZW50IiwiUyIsIndpbmRvdyIsImdsb2JhbCIsImIiLCJkIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdGVFbGVtZW50IiwiVSIsImZvckVhY2giLCJjYWxsIiwiYXR0cmlidXRlcyIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJ5IiwiY2hpbGROb2RlcyIsImxlbmd0aCIsIm5vZGVUeXBlIiwicHVzaCIsIk4iLCJGIiwiaW5uZXJIVE1MIiwidHJpbSIsIm1hcCIsInYiLCJIIiwiZSIsIm8iLCJ0IiwiZnJhZ21lbnQiLCJpc01vdW50ZWQiLCJpc05vZGUiLCJyZXNlcnZlZFdvcmRzIiwidHJ1c3QiLCJwYXJlbnRWbm9kZSIsIm9sZFBhcmVudFZub2RlIiwiY3VycmVudCIsIk1hcCIsInVzZVBsdWdpbiIsImhhcyIsInNldCIsImluZGV4T2YiLCJnIiwidyIsIlQiLCJMIiwiVyIsInRhcmdldCIsInR5cGUiLCJkZWZhdWx0UHJldmVudGVkIiwidXBkYXRlIiwicGFyZW50Tm9kZSIsIkciLCJPIiwiYWRkRXZlbnRMaXN0ZW5lciIsInNsaWNlIiwicmVtb3ZlQXR0cmlidXRlIiwic2V0QXR0cmlidXRlIiwiRSIsIlAiLCJ1cGRhdGVQcm9wZXJ0eSIsIlYiLCJvbnJlbW92ZSIsIkQiLCJsIiwiQyIsInIiLCJuIiwic3BsaWNlIiwiQXJyYXkiLCJpc0FycmF5IiwidmlldyIsIlN0cmluZyIsInRleHRDb250ZW50IiwiaSIsImtleSIsIm0iLCJNYXRoIiwibWF4IiwicyIsImgiLCJBIiwib25iZWZvcmV1cGRhdGUiLCJvbnVwZGF0ZSIsIm9uY3JlYXRlIiwiYXBwZW5kQ2hpbGQiLCJyZXBsYWNlQ2hpbGQiLCJyZW1vdmVDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwiZiIsImsiLCJ1bk1vdW50IiwibW91bnQiLCJxdWVyeVNlbGVjdG9yQWxsIiwiZGlyZWN0aXZlIiwiUiIsInN0eWxlIiwiZGlzcGxheSIsImNsYXNzTGlzdCIsInRvZ2dsZSIsIm5ld0luc3RhbmNlIl0sIm1hcHBpbmdzIjoiTUFvREEsSUFBQUEsRUFBQSxNQUNFQyxLQUNBQyxNQUNBQyxTQUNBQyxJQUNBQyxVQUNBQyxNQUNBQyxVQUVBQyxZQUFZQyxFQUFjQyxFQUFjQyxHQUN0Q0MsS0FBS1YsTUFBUVEsRUFDYkUsS0FBS1QsU0FBV1EsRUFDaEJDLEtBQUtYLEtBQU9RLElBU2hCSSxFQUFBLE1BQ0VULElBQ0FVLFVBRUFOLFlBQVlDLEdBQ1ZHLEtBQUtFLFVBQVlMLElBVXJCTSxFQUFBLE1BQ0VDLFVBQ0FkLE1BQ0FDLFNBRUFLLFlBQVlDLEVBQThCQyxFQUFjQyxHQUN0REMsS0FBS1YsTUFBUVEsRUFDYkUsS0FBS1QsU0FBV1EsRUFDaEJDLEtBQUtJLFVBQVlQLElBdUJqQlEsRUFBMkIsb0JBQVhDLFFBQTRDLG9CQUFYQyxPQUdyRCxTQUFBQyxFQUF1QkMsRUFBaUJaLEdBQWlCLEdBQ3ZELE9BQU9BLEVBQVFhLFNBQVNDLGdCQUFnQiw2QkFBOEJGLEdBQVdDLFNBQVNFLGNBQWNILEdBSTFHLFNBQUFJLEVBQW9CSixHQUNsQixJQUFJWixFQUFlLEdBQ25CLEdBQUdpQixRQUFRQyxLQUFLTixFQUFJTyxXQUFhakIsR0FBZ0JGLEVBQU1FLEVBQUtrQixVQUFZbEIsRUFBS0csV0FFN0UsSUFBSUosRUFBZSxJQUFJVixFQUFNcUIsRUFBSVEsU0FBU0MsY0FBZXJCLEVBQU8sSUFDaEVDLEVBQU1OLElBQU1pQixFQUVaLElBQUEsSUFBU1YsRUFBSSxFQUFHb0IsRUFBSVYsRUFBSVcsV0FBV0MsT0FBUXRCLEVBQUlvQixFQUFHcEIsSUFDaEQsR0FBbUMsSUFBL0JVLEVBQUlXLFdBQVdyQixHQUFHdUIsU0FDcEJ4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QVNtRixlQUFlLElBQ3JDLE9BQUl4QixHQUFXQSxFQUFRN0UsS0FBTzZFLEVBQVE3RSxJQUFJZ0UsYUFDeENhLGFBQW1CakYsR0FBUzhFLEVBQVdHLEdBQ3ZDQSxFQUFRN0UsSUFBSWdFLFdBQVdtQyxhQUFhOUQsRUFBUXdDLEVBQVE3RSxNQUV0RHlDLEVBQU01QyxLQUFPLFFBQ2I0QyxFQUFNMUMsU0FBVyxHQUNqQjBDLEVBQU0zQyxNQUFRLEdBQ2QyQyxFQUFNekMsSUFBTXFDLEdBQ0wsSUFJWCxPQUFBcEIsRUFBRTBGLFVBQVUsS0FBTUMsR0FBYyxJQUNoQzNGLEVBQUUwRixVQUFVLFNBQVVDLEdBQWMsSUFDcEMzRixFQUFFMEYsVUFBVSxNQUFPLENBQUNwRSxFQUFnQkMsS0FDbENBLEVBQU16QyxTQUFXd0MsRUFBSUgsSUFBSUksRUFBTXpDLFNBQVMsTUFFMUNrQixFQUFFMEYsVUFBVSxPQUFRLENBQUNwRSxFQUFlQyxLQUNqQ0EsRUFBTXhDLElBQXVDNkcsTUFBTUMsUUFBVXZFLEVBQU8sR0FBSyxTQUU1RXRCLEVBQUUwRixVQUFVLFFBQVMsQ0FBQ3BFLEVBQW1DQyxLQUN2RCxJQUFBLElBQVNDLEtBQVFGLEVBQ2RDLEVBQU14QyxJQUFtQitHLFVBQVVDLE9BQU92RSxFQUFNRixFQUFRRSxNQUc3RHhCLEVBQUUwRixVQUFVLE9BQVEsQ0FBQ3BFLEVBQWNDLEtBQ2pDQSxFQUFNekMsU0FBVyxDQUFDa0MsRUFBTU0sTUFHMUJ0QixFQUFFZ0csWUFBYzNFLEVBRVRyQixFQUdzRHFCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY29tcGxleGl0eSAqL1xuLyogZXNsaW50LWRpc2FibGUgc29uYXJqcy9jb2duaXRpdmUtY29tcGxleGl0eSAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tdXNlLWJlZm9yZS1kZWZpbmUgKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG5cbnR5cGUgVm5vZGVPclVua25vd24gPSBWbm9kZUNvbXBvbmVudCB8IFZub2RlIHwgVGV4dFZub2RlIHwgYW55O1xuXG50eXBlIERvbUF0dHJpYnV0ZSA9IHsgbm9kZU5hbWU6IHN0cmluZzsgbm9kZVZhbHVlOiBzdHJpbmcgfTtcblxudHlwZSBEb21FbGVtZW50ID0gKEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudCkgJiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG50eXBlIFByb3BzID0ge1xuICBrZXk/OiBzdHJpbmcgfCBudW1iZXI7XG4gIGRhdGE/OiBzdHJpbmc7XG4gIG9uY3JlYXRlPzogeyAodm5vZGU6IFZub2RlKTogbmV2ZXIgfTtcbiAgb251cGRhdGU/OiB7ICh2bm9kZTogVm5vZGUsIG9sZFZub2RlOiBWbm9kZSB8IFRleHRWbm9kZSk6IG5ldmVyIH07XG4gIG9ucmVtb3ZlPzogeyAob2xkVm5vZGU6IFZub2RlKTogbmV2ZXIgfTtcbiAgb25iZWZvcmV1cGRhdGU/OiB7ICh2bm9kZTogVm5vZGUsIG9sZFZub2RlOiBWbm9kZSB8IFRleHRWbm9kZSk6IHVuZGVmaW5lZCB8IGJvb2xlYW4gfTtcbn0gJiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuXG50eXBlIENvbXBvbmVudCA9IChwcm9wcz86IFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsLCBjaGlsZHJlbj86IFZub2RlT3JVbmtub3duKSA9PiBWbm9kZU9yVW5rbm93biB8IFZub2RlT3JVbmtub3duW107XG5cbnR5cGUgVmFseXJpYW5Db21wb25lbnQgPVxuICB8IENvbXBvbmVudFxuICB8IChSZWNvcmQ8c3RyaW5nLCBhbnk+ICYge1xuICAgICAgdmlldzogQ29tcG9uZW50O1xuICAgIH0pO1xuXG50eXBlIEN1cnJlbnQgPSB7IHBhcmVudFZub2RlPzogVm5vZGU7IG9sZFBhcmVudFZub2RlPzogVm5vZGU7IGNvbXBvbmVudD86IFZub2RlQ29tcG9uZW50IH07XG5cbmludGVyZmFjZSBQbHVnaW4ge1xuICAodjogVmFseXJpYW4sIG9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogbmV2ZXI7XG59XG5cbmludGVyZmFjZSBEaXJlY3RpdmUge1xuICAodmFsdWU6IGFueSwgdm5vZGU6IFZub2RlLCBvbGRWbm9kZT86IFZub2RlIHwgVGV4dFZub2RlKTogdm9pZCB8IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBWYWx5cmlhbkV2ZW50SGFuZGxlciB7XG4gIChhOiBFdmVudCwgZG9tOiBEb21FbGVtZW50KTogdm9pZDtcbn1cblxuaW50ZXJmYWNlIFZub2RlIHtcbiAgbmFtZTogc3RyaW5nO1xuICBwcm9wczogUHJvcHM7XG4gIGNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bltdO1xuICBkb20/OiBEb21FbGVtZW50O1xuICBvbkNsZWFudXA/OiBGdW5jdGlvbkNvbnN0cnVjdG9yW107XG4gIGlzU1ZHPzogYm9vbGVhbjtcbiAgcHJvY2Vzc2VkPzogYm9vbGVhbjtcbn1cblxuY2xhc3MgVm5vZGUgaW1wbGVtZW50cyBWbm9kZSB7XG4gIG5hbWU6IHN0cmluZztcbiAgcHJvcHM6IFByb3BzO1xuICBjaGlsZHJlbjogVm5vZGVPclVua25vd25bXTtcbiAgZG9tPzogRG9tRWxlbWVudDtcbiAgb25DbGVhbnVwPzogRnVuY3Rpb25Db25zdHJ1Y3RvcltdO1xuICBpc1NWRz86IGJvb2xlYW47XG4gIHByb2Nlc3NlZD86IGJvb2xlYW47XG5cbiAgY29uc3RydWN0b3IobmFtZTogc3RyaW5nLCBwcm9wczogUHJvcHMsIGNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bikge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5uYW1lID0gbmFtZTtcbiAgfVxufVxuXG5pbnRlcmZhY2UgVGV4dFZub2RlIHtcbiAgZG9tPzogVGV4dDtcbiAgbm9kZVZhbHVlOiBzdHJpbmc7XG59XG5cbmNsYXNzIFRleHRWbm9kZSBpbXBsZW1lbnRzIFRleHRWbm9kZSB7XG4gIGRvbT86IFRleHQ7XG4gIG5vZGVWYWx1ZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5vZGVWYWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5ub2RlVmFsdWUgPSBub2RlVmFsdWU7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFZub2RlQ29tcG9uZW50IHtcbiAgY29tcG9uZW50OiBWYWx5cmlhbkNvbXBvbmVudDtcbiAgcHJvcHM6IFByb3BzO1xuICBjaGlsZHJlbjogVm5vZGVPclVua25vd25bXTtcbn1cblxuY2xhc3MgVm5vZGVDb21wb25lbnQgaW1wbGVtZW50cyBWbm9kZUNvbXBvbmVudCB7XG4gIGNvbXBvbmVudDogVmFseXJpYW5Db21wb25lbnQ7XG4gIHByb3BzOiBQcm9wcztcbiAgY2hpbGRyZW46IFZub2RlT3JVbmtub3duW107XG5cbiAgY29uc3RydWN0b3IoY29tcG9uZW50OiBWYWx5cmlhbkNvbXBvbmVudCwgcHJvcHM6IFByb3BzLCBjaGlsZHJlbjogVm5vZGVPclVua25vd25bXSkge1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcbiAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgdGhpcy5jb21wb25lbnQgPSBjb21wb25lbnQ7XG4gIH1cbn1cblxuaW50ZXJmYWNlIFZhbHlyaWFuIHtcbiAgKHRhZ09yQ29tcG9uZW50OiBzdHJpbmcgfCBWYWx5cmlhbkNvbXBvbmVudCwgcHJvcHM/OiBQcm9wcyB8IG51bGwsIGNoaWxkcmVuPzogVm5vZGVPclVua25vd24pOiBWbm9kZSB8IFZub2RlQ29tcG9uZW50O1xuICBmcmFnbWVudDogKHByb3BzOiBQcm9wcywgY2hpbGRyZW46IFZub2RlT3JVbmtub3duW10pID0+IFZub2RlT3JVbmtub3duW107XG4gIGlzTW91bnRlZDogYm9vbGVhbjtcbiAgaXNOb2RlOiBib29sZWFuO1xuICByZXNlcnZlZFdvcmRzOiBzdHJpbmdbXTtcbiAgY3VycmVudDogQ3VycmVudDtcbiAgdHJ1c3Q6IChodG1sU3RyaW5nOiBzdHJpbmcpID0+IFZub2RlW107XG4gIHVzZVBsdWdpbjogKHBsdWdpbjogUGx1Z2luLCBvcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBvbkNsZWFudXA6IChjYWxsYmFjazogdHlwZW9mIEZ1bmN0aW9uKSA9PiB2b2lkO1xuICB1cGRhdGVQcm9wZXJ0eTogKG5hbWU6IHN0cmluZywgbmV3Vm5vZGU6IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkTm9kZTogVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KSA9PiB2b2lkO1xuICB1cGRhdGU6IChwcm9wcz86IFByb3BzIHwgbnVsbCwgLi4uY2hpbGRyZW46IFZub2RlT3JVbmtub3duKSA9PiBzdHJpbmcgfCB2b2lkO1xuICBtb3VudDogKGNvbnRhaW5lcjogc3RyaW5nIHwgRG9tRWxlbWVudCwgY29tcG9uZW50OiBWYWx5cmlhbkNvbXBvbmVudCwgcHJvcHM/OiBQcm9wcyB8IG51bGwsIC4uLmNoaWxkcmVuOiBWbm9kZU9yVW5rbm93bltdKSA9PiBzdHJpbmcgfCB2b2lkO1xuICB1bk1vdW50OiAoKSA9PiBzdHJpbmcgfCBib29sZWFuIHwgdm9pZDtcbiAgZGlyZWN0aXZlOiAoZGlyZWN0aXZlOiBzdHJpbmcsIGhhbmRsZXI6IERpcmVjdGl2ZSkgPT4gdm9pZDtcbiAgbmV3SW5zdGFuY2U6ICgpID0+IFZhbHlyaWFuO1xuICBbeDogc3RyaW5nXTogYW55O1xufVxuXG5sZXQgaXNOb2RlID0gdHlwZW9mIHdpbmRvdyA9PT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBDcmVhdGUgTm9kZSBlbGVtZW50XG5mdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZ05hbWU6IHN0cmluZywgaXNTVkc6IGJvb2xlYW4gPSBmYWxzZSk6IERvbUVsZW1lbnQge1xuICByZXR1cm4gaXNTVkcgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB0YWdOYW1lKSA6IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG59XG5cbi8vIFRyYW5zZm9ybXMgYSBET00gbm9kZSB0byBhIFZOb2RlXG5mdW5jdGlvbiBkb21Ub1Zub2RlKGRvbTogRG9tRWxlbWVudCk6IFZub2RlIHtcbiAgbGV0IHByb3BzOiBQcm9wcyA9IHt9O1xuICBbXS5mb3JFYWNoLmNhbGwoZG9tLmF0dHJpYnV0ZXMsIChwcm9wOiBBdHRyKSA9PiAocHJvcHNbcHJvcC5ub2RlTmFtZV0gPSBwcm9wLm5vZGVWYWx1ZSkpO1xuXG4gIGxldCB2bm9kZTogVm5vZGUgPSBuZXcgVm5vZGUoZG9tLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCksIHByb3BzLCBbXSk7XG4gIHZub2RlLmRvbSA9IGRvbTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGRvbS5jaGlsZE5vZGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChkb20uY2hpbGROb2Rlc1tpXS5ub2RlVHlwZSA9PT0gMSkge1xuICAgICAgdm5vZGUuY2hpbGRyZW4ucHVzaChkb21Ub1Zub2RlKGRvbS5jaGlsZE5vZGVzW2ldIGFzIERvbUVsZW1lbnQpKTtcbiAgICB9IGVsc2UgaWYgKGRvbS5jaGlsZE5vZGVzW2ldLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICBsZXQgdGV4dFZub2RlID0gbmV3IFRleHRWbm9kZShkb20uY2hpbGROb2Rlc1tpXS5ub2RlVmFsdWUgfHwgXCJcIik7XG4gICAgICB0ZXh0Vm5vZGUuZG9tID0gZG9tLmNoaWxkTm9kZXNbaV0gYXMgdW5rbm93biBhcyBUZXh0O1xuICAgICAgdm5vZGUuY2hpbGRyZW4ucHVzaCh0ZXh0Vm5vZGUpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdm5vZGU7XG59XG5cbmNvbnN0IHRydXN0ID0gKGh0bWxTdHJpbmc6IHN0cmluZykgPT4ge1xuICBsZXQgZGl2ID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgZGl2LmlubmVySFRNTCA9IGh0bWxTdHJpbmcudHJpbSgpO1xuXG4gIHJldHVybiBbXS5tYXAuY2FsbChkaXYuY2hpbGROb2RlcywgKGl0ZW0pID0+IGRvbVRvVm5vZGUoaXRlbSkpIGFzIFZub2RlW107XG59O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbWF4LWxpbmVzLXBlci1mdW5jdGlvblxuZnVuY3Rpb24gdmFseXJpYW4oKTogVmFseXJpYW4ge1xuICBjb25zdCB2OiBWYWx5cmlhbiA9ICh0YWdPckNvbXBvbmVudCwgcHJvcHMsIC4uLmNoaWxkcmVuKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB0YWdPckNvbXBvbmVudCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgcmV0dXJuIG5ldyBWbm9kZSh0YWdPckNvbXBvbmVudCwgcHJvcHMgfHwge30sIGNoaWxkcmVuKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBWbm9kZUNvbXBvbmVudCh0YWdPckNvbXBvbmVudCwgcHJvcHMgfHwge30sIGNoaWxkcmVuKTtcbiAgICB9XG4gIH07XG5cbiAgdi5mcmFnbWVudCA9IChwcm9wczogUHJvcHMsIHZub2RlczogVm5vZGVPclVua25vd25bXSkgPT4ge1xuICAgIHJldHVybiB2bm9kZXM7XG4gIH07XG5cbiAgdi5pc01vdW50ZWQgPSBmYWxzZTtcbiAgdi5pc05vZGUgPSBpc05vZGU7XG4gIGNvbnN0IHJlc2VydmVkV29yZHMgPSBbXCJrZXlcIiwgXCJkYXRhXCIsIFwidi1vbmNlXCIsIFwib25jcmVhdGVcIiwgXCJvbnVwZGF0ZVwiLCBcIm9ucmVtb3ZlXCIsIFwib25iZWZvcmV1cGRhdGVcIl07XG4gIHYucmVzZXJ2ZWRXb3JkcyA9IHJlc2VydmVkV29yZHM7XG4gIHYudHJ1c3QgPSB0cnVzdDtcblxuICBjb25zdCBjdXJyZW50OiBDdXJyZW50ID0ge1xuICAgIHBhcmVudFZub2RlOiB1bmRlZmluZWQsXG4gICAgb2xkUGFyZW50Vm5vZGU6IHVuZGVmaW5lZCxcbiAgICBjb21wb25lbnQ6IHVuZGVmaW5lZFxuICB9O1xuICB2LmN1cnJlbnQgPSBjdXJyZW50O1xuXG4gIGNvbnN0IHBsdWdpbnMgPSBuZXcgTWFwKCk7XG5cbiAgdi51c2VQbHVnaW4gPSAocGx1Z2luOiBQbHVnaW4sIG9wdGlvbnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fSkgPT4gIXBsdWdpbnMuaGFzKHBsdWdpbikgJiYgcGx1Z2lucy5zZXQocGx1Z2luLCB0cnVlKSAmJiBwbHVnaW4odiBhcyBWYWx5cmlhbiwgb3B0aW9ucyk7XG5cbiAgbGV0IHZub2Rlc1RvQ2xlYW51cDogVm5vZGVbXSA9IFtdO1xuXG4gIHYub25DbGVhbnVwID0gKGNhbGxiYWNrOiBGdW5jdGlvbkNvbnN0cnVjdG9yKSA9PiB7XG4gICAgbGV0IHBhcmVudFZub2RlID0gdi5jdXJyZW50LnBhcmVudFZub2RlIGFzIFZub2RlO1xuICAgIGlmICghcGFyZW50Vm5vZGUub25DbGVhbnVwKSB7XG4gICAgICBwYXJlbnRWbm9kZS5vbkNsZWFudXAgPSBbXSBhcyBGdW5jdGlvbkNvbnN0cnVjdG9yW107XG4gICAgfVxuXG4gICAgcGFyZW50Vm5vZGUub25DbGVhbnVwLnB1c2goY2FsbGJhY2spO1xuXG4gICAgaWYgKHZub2Rlc1RvQ2xlYW51cC5pbmRleE9mKHBhcmVudFZub2RlKSA9PT0gLTEpIHtcbiAgICAgIHZub2Rlc1RvQ2xlYW51cC5wdXNoKHBhcmVudFZub2RlKTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IGNsZWFudXBWbm9kZXMgPSAoKSA9PiB7XG4gICAgZm9yIChsZXQgbCA9IHZub2Rlc1RvQ2xlYW51cC5sZW5ndGg7IGwtLTsgKSB7XG4gICAgICBmb3IgKGxldCBjYWxsYmFjayBvZiB2bm9kZXNUb0NsZWFudXBbbF0ub25DbGVhbnVwIGFzIEZ1bmN0aW9uQ29uc3RydWN0b3JbXSkge1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfVxuICAgIH1cbiAgICB2bm9kZXNUb0NsZWFudXAgPSBbXTtcbiAgfTtcblxuICBsZXQgbWFpbkNvbnRhaW5lcjogRG9tRWxlbWVudCB8IG51bGwgPSBudWxsO1xuICBsZXQgZW1wdHlDb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50ID0gKCkgPT4gXCJcIjtcbiAgbGV0IG1vdW50ZWRDb21wb25lbnQ6IFZhbHlyaWFuQ29tcG9uZW50ID0gZW1wdHlDb21wb25lbnQ7XG5cbiAgY29uc3QgYXR0YWNoZWRMaXN0ZW5lcnM6IHN0cmluZ1tdID0gW107XG4gIGZ1bmN0aW9uIGV2ZW50TGlzdGVuZXIoZTogRXZlbnQpIHtcbiAgICBsZXQgZG9tID0gZS50YXJnZXQgYXMgRG9tRWxlbWVudDtcbiAgICBsZXQgbmFtZSA9IGB2LW9uJHtlLnR5cGV9YDtcbiAgICB3aGlsZSAoZG9tKSB7XG4gICAgICBpZiAoZG9tW25hbWVdKSB7XG4gICAgICAgIChkb21bbmFtZV0gYXMgVmFseXJpYW5FdmVudEhhbmRsZXIpKGUsIGRvbSk7XG4gICAgICAgIGlmICghZS5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICAgICAgdi51cGRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkb20gPSBkb20ucGFyZW50Tm9kZSBhcyBEb21FbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZVByb3BlcnR5KHByb3A6IHN0cmluZywgbmV3Vm5vZGU6IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkVm5vZGU/OiBWbm9kZSk6IHZvaWQgfCBib29sZWFuIHtcbiAgICBpZiAocmVzZXJ2ZWRXb3Jkcy5pbmRleE9mKHByb3ApICE9PSAtMSkge1xuICAgICAgaWYgKHByb3AgaW4gZGlyZWN0aXZlcykge1xuICAgICAgICByZXR1cm4gZGlyZWN0aXZlc1twcm9wXShuZXdWbm9kZS5wcm9wc1twcm9wXSwgbmV3Vm5vZGUsIG9sZFZub2RlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBuZXdWbm9kZS5wcm9wc1twcm9wXSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBpZiAoYXR0YWNoZWRMaXN0ZW5lcnMuaW5kZXhPZihwcm9wKSA9PT0gLTEpIHtcbiAgICAgICAgKG1haW5Db250YWluZXIgYXMgRG9tRWxlbWVudCkuYWRkRXZlbnRMaXN0ZW5lcihwcm9wLnNsaWNlKDIpLCBldmVudExpc3RlbmVyKTtcbiAgICAgICAgYXR0YWNoZWRMaXN0ZW5lcnMucHVzaChwcm9wKTtcbiAgICAgIH1cbiAgICAgIG5ld1Zub2RlLmRvbVtgdi0ke3Byb3B9YF0gPSBuZXdWbm9kZS5wcm9wc1twcm9wXTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gbmV3Vm5vZGUuZG9tICYmICFuZXdWbm9kZS5pc1NWRykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgaWYgKG5ld1Zub2RlLmRvbVtwcm9wXSAhPSBuZXdWbm9kZS5wcm9wc1twcm9wXSkge1xuICAgICAgICBuZXdWbm9kZS5kb21bcHJvcF0gPSBuZXdWbm9kZS5wcm9wc1twcm9wXTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9sZFZub2RlID09PSB1bmRlZmluZWQgfHwgbmV3Vm5vZGUucHJvcHNbcHJvcF0gIT09IG9sZFZub2RlLnByb3BzW3Byb3BdKSB7XG4gICAgICBpZiAobmV3Vm5vZGUucHJvcHNbcHJvcF0gPT09IGZhbHNlKSB7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5yZW1vdmVBdHRyaWJ1dGUocHJvcCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBuZXdWbm9kZS5kb20uc2V0QXR0cmlidXRlKHByb3AsIG5ld1Zub2RlLnByb3BzW3Byb3BdKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgdi51cGRhdGVQcm9wZXJ0eSA9IHVwZGF0ZVByb3BlcnR5O1xuXG4gIC8vIFVwZGF0ZSBhIFZub2RlLmRvbSBIVE1MRWxlbWVudCB3aXRoIG5ldyBWbm9kZSBwcm9wcyB0aGF0IGFyZSBkaWZmZXJlbnQgZnJvbSBvbGQgVm5vZGUgcHJvcHNcbiAgZnVuY3Rpb24gdXBkYXRlUHJvcGVydGllcyhuZXdWbm9kZTogVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRWbm9kZT86IFZub2RlKTogdm9pZCB7XG4gICAgZm9yIChsZXQgcHJvcCBpbiBuZXdWbm9kZS5wcm9wcykge1xuICAgICAgaWYgKHVwZGF0ZVByb3BlcnR5KHByb3AsIG5ld1Zub2RlLCBvbGRWbm9kZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVQcm9wZXJ0aWVzKG5ld1Zub2RlOiBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0sIG9sZFZub2RlOiBWbm9kZSkge1xuICAgIGZvciAobGV0IG5hbWUgaW4gb2xkVm5vZGUucHJvcHMpIHtcbiAgICAgIGlmIChuYW1lIGluIG5ld1Zub2RlLnByb3BzID09PSBmYWxzZSAmJiB0eXBlb2Ygb2xkVm5vZGUucHJvcHNbbmFtZV0gIT09IFwiZnVuY3Rpb25cIiAmJiByZXNlcnZlZFdvcmRzLmluZGV4T2YobmFtZSkgPT09IC0xKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG5ld1Zub2RlLmRvbSkge1xuICAgICAgICAgIG5ld1Zub2RlLmRvbVtuYW1lXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3Vm5vZGUuZG9tLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGNhbGxSZW1vdmUgPSAodm5vZGU6IFZub2RlKSA9PiB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSB2bm9kZS5jaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIHZub2RlLmNoaWxkcmVuW2ldIGluc3RhbmNlb2YgVm5vZGUgJiYgY2FsbFJlbW92ZSh2bm9kZS5jaGlsZHJlbltpXSk7XG4gICAgfVxuXG4gICAgdm5vZGUucHJvcHMub25yZW1vdmUgJiYgdm5vZGUucHJvcHMub25yZW1vdmUodm5vZGUpO1xuICB9O1xuICAvLyBQYXRjaCBhIERPTSBub2RlIHdpdGggYSBuZXcgVk5vZGUgdHJlZVxuICBmdW5jdGlvbiBwYXRjaChuZXdQYXJlbnRWbm9kZTogVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRQYXJlbnRWbm9kZT86IFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSk6IHZvaWQge1xuICAgIGxldCBvbGRUcmVlID0gb2xkUGFyZW50Vm5vZGU/LmNoaWxkcmVuIHx8IFtdO1xuICAgIGxldCBuZXdUcmVlID0gbmV3UGFyZW50Vm5vZGUuY2hpbGRyZW47XG4gICAgbGV0IG9sZFRyZWVMZW5ndGggPSBvbGRUcmVlLmxlbmd0aDtcblxuICAgIGN1cnJlbnQucGFyZW50Vm5vZGUgPSBuZXdQYXJlbnRWbm9kZTtcbiAgICBjdXJyZW50Lm9sZFBhcmVudFZub2RlID0gb2xkUGFyZW50Vm5vZGU7XG5cbiAgICAvLyBGbGF0IG5ld1RyZWVcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5ld1RyZWUubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBjaGlsZFZub2RlID0gbmV3VHJlZVtpXTtcblxuICAgICAgaWYgKGNoaWxkVm5vZGUgaW5zdGFuY2VvZiBWbm9kZSkge1xuICAgICAgICBjaGlsZFZub2RlLmlzU1ZHID0gbmV3UGFyZW50Vm5vZGUuaXNTVkcgfHwgY2hpbGRWbm9kZS5uYW1lID09PSBcInN2Z1wiO1xuICAgICAgfSBlbHNlIGlmIChjaGlsZFZub2RlID09PSBudWxsIHx8IGNoaWxkVm5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBuZXdUcmVlLnNwbGljZShpLS0sIDEpO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGNoaWxkVm5vZGUpKSB7XG4gICAgICAgIG5ld1RyZWUuc3BsaWNlKGktLSwgMSwgLi4uY2hpbGRWbm9kZSk7XG4gICAgICB9IGVsc2UgaWYgKGNoaWxkVm5vZGUgaW5zdGFuY2VvZiBWbm9kZUNvbXBvbmVudCkge1xuICAgICAgICB2LmN1cnJlbnQuY29tcG9uZW50ID0gY2hpbGRWbm9kZTtcbiAgICAgICAgbmV3VHJlZS5zcGxpY2UoXG4gICAgICAgICAgaS0tLFxuICAgICAgICAgIDEsXG4gICAgICAgICAgLi4uW1xuICAgICAgICAgICAgXCJ2aWV3XCIgaW4gY2hpbGRWbm9kZS5jb21wb25lbnRcbiAgICAgICAgICAgICAgPyBjaGlsZFZub2RlLmNvbXBvbmVudC52aWV3LmNhbGwoY2hpbGRWbm9kZS5jb21wb25lbnQsIGNoaWxkVm5vZGUucHJvcHMsIGNoaWxkVm5vZGUuY2hpbGRyZW4pXG4gICAgICAgICAgICAgIDogKGNoaWxkVm5vZGUuY29tcG9uZW50IGFzIENvbXBvbmVudCkuY2FsbChjaGlsZFZub2RlLmNvbXBvbmVudCwgY2hpbGRWbm9kZS5wcm9wcywgY2hpbGRWbm9kZS5jaGlsZHJlbilcbiAgICAgICAgICBdXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoaSA+IDAgJiYgbmV3VHJlZVtpIC0gMV0ubm9kZVZhbHVlKSB7XG4gICAgICAgICAgbmV3VHJlZVtpIC0gMV0ubm9kZVZhbHVlICs9IGNoaWxkVm5vZGU7XG4gICAgICAgICAgbmV3VHJlZS5zcGxpY2UoaS0tLCAxKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVGV4dFZub2RlID09PSBmYWxzZSkge1xuICAgICAgICAgIG5ld1RyZWVbaV0gPSBuZXcgVGV4dFZub2RlKFN0cmluZyhjaGlsZFZub2RlKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgbmV3VHJlZUxlbmd0aCA9IG5ld1RyZWUubGVuZ3RoO1xuXG4gICAgLy8gaWYgbmV3VHJlZSBpcyBlbXB0eSwgcmVtb3ZlIGl0XG4gICAgaWYgKG5ld1RyZWVMZW5ndGggPT09IDApIHtcbiAgICAgIGlmIChvbGRUcmVlTGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKGxldCBpID0gb2xkVHJlZUxlbmd0aDsgaS0tOyApIHtcbiAgICAgICAgICBvbGRUcmVlW2ldIGluc3RhbmNlb2YgVm5vZGUgJiYgY2FsbFJlbW92ZShvbGRUcmVlW2ldKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBGYXN0IG5vZGUgcmVtb3ZlIGJ5IHNldHRpbmcgdGV4dENvbnRlbnRcbiAgICAgICAgbmV3UGFyZW50Vm5vZGUuZG9tLnRleHRDb250ZW50ID0gXCJcIjtcbiAgICAgIH1cbiAgICAgIC8vIElmIHRoZSB0cmVlIGlzIGtleWVkIGxpc3QgYW5kIGlzIG5vdCBmaXJzdCByZW5kZXJcbiAgICB9IGVsc2UgaWYgKG9sZFRyZWVMZW5ndGggJiYgbmV3VHJlZVswXSBpbnN0YW5jZW9mIFZub2RlICYmIFwia2V5XCIgaW4gbmV3VHJlZVswXS5wcm9wcykge1xuICAgICAgLy8gMS4gTXV0YXRlIHRoZSBvbGQga2V5IGxpc3QgdG8gbWF0Y2ggdGhlIG5ldyBrZXkgbGlzdFxuICAgICAgbGV0IG9sZEtleWVkTGlzdDtcblxuICAgICAgLy8gaWYgdGhlIG9sZFRyZWUgZG9lcyBub3QgaGF2ZSBhIGtleWVkIGxpc3QgZmFzdCByZW1vdmUgYWxsIG5vZGVzXG4gICAgICBpZiAob2xkVHJlZVswXSBpbnN0YW5jZW9mIFZub2RlID09PSBmYWxzZSB8fCBcImtleVwiIGluIG9sZFRyZWVbMF0ucHJvcHMgPT09IGZhbHNlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSBvbGRUcmVlTGVuZ3RoOyBpLS07ICkge1xuICAgICAgICAgIG9sZFRyZWVbaV0gaW5zdGFuY2VvZiBWbm9kZSAmJiBjYWxsUmVtb3ZlKG9sZFRyZWVbaV0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEZhc3Qgbm9kZSByZW1vdmUgYnkgc2V0dGluZyB0ZXh0Q29udGVudFxuICAgICAgICBuZXdQYXJlbnRWbm9kZS5kb20udGV4dENvbnRlbnQgPSBcIlwiO1xuICAgICAgICBvbGRLZXllZExpc3QgPSBbXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9sZEtleWVkTGlzdCA9IG9sZFRyZWUubWFwKCh2bm9kZSkgPT4gdm5vZGUucHJvcHMua2V5KTtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gT2J0YWluIHRoZSBtYXggbGVuZ3RoIG9mIGJvdGggbGlzdHNcbiAgICAgIGxldCBuZXdLZXllZExpc3QgPSBuZXdUcmVlLm1hcCgodm5vZGUpID0+IHZub2RlLnByb3BzLmtleSk7XG4gICAgICBjb25zdCBtYXhMaXN0TGVuZ3RoID0gTWF0aC5tYXgobmV3VHJlZUxlbmd0aCwgb2xkS2V5ZWRMaXN0Lmxlbmd0aCk7XG5cbiAgICAgIC8vIDMuIEN5Y2xlIG92ZXIgYWxsIHRoZSBlbGVtZW50cyBvZiB0aGUgbGlzdCB1bnRpbCB0aGUgbWF4IGxlbmd0aFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXhMaXN0TGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkgPCBuZXdUcmVlTGVuZ3RoKSB7XG4gICAgICAgICAgbGV0IGNoaWxkVm5vZGUgPSBuZXdUcmVlW2ldO1xuICAgICAgICAgIGxldCBvbGRDaGlsZFZub2RlID0gb2xkS2V5ZWRMaXN0W2ldID09PSBuZXdLZXllZExpc3RbaV0gPyBvbGRUcmVlW2ldIDogb2xkVHJlZVtvbGRLZXllZExpc3QuaW5kZXhPZihjaGlsZFZub2RlLnByb3BzLmtleSldO1xuICAgICAgICAgIGxldCBzaG91bGRQYXRjaCA9IHRydWU7XG5cbiAgICAgICAgICBpZiAob2xkQ2hpbGRWbm9kZSkge1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBvbGRDaGlsZFZub2RlLmRvbTtcbiAgICAgICAgICAgIG9sZENoaWxkVm5vZGUucHJvY2Vzc2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChcInYtb25jZVwiIGluIGNoaWxkVm5vZGUucHJvcHMgfHwgKGNoaWxkVm5vZGUucHJvcHMub25iZWZvcmV1cGRhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmJlZm9yZXVwZGF0ZShjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICAgIC8vIHNraXAgdGhpcyBwYXRjaFxuICAgICAgICAgICAgICBjaGlsZFZub2RlLmNoaWxkcmVuID0gb2xkQ2hpbGRWbm9kZS5jaGlsZHJlbjtcbiAgICAgICAgICAgICAgc2hvdWxkUGF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJlbW92ZVByb3BlcnRpZXMoY2hpbGRWbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0sIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgaWYgKHYuaXNNb3VudGVkKSB7XG4gICAgICAgICAgICAgICAgY2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLm9udXBkYXRlKGNoaWxkVm5vZGUsIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShjaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjaGlsZFZub2RlLmRvbSA9IGNyZWF0ZUVsZW1lbnQoY2hpbGRWbm9kZS5uYW1lLCBjaGlsZFZub2RlLmlzU1ZHKTtcbiAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoY2hpbGRWbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0pO1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZSAmJiBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlKGNoaWxkVm5vZGUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChuZXdQYXJlbnRWbm9kZS5kb20uY2hpbGROb2Rlc1tpXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBuZXdQYXJlbnRWbm9kZS5kb20uYXBwZW5kQ2hpbGQoY2hpbGRWbm9kZS5kb20pO1xuICAgICAgICAgIH0gZWxzZSBpZiAobmV3UGFyZW50Vm5vZGUuZG9tLmNoaWxkTm9kZXNbaV0gIT09IGNoaWxkVm5vZGUuZG9tKSB7XG4gICAgICAgICAgICBvbGRUcmVlW2ldIGluc3RhbmNlb2YgVm5vZGUgJiYgIW9sZFRyZWVbaV0ucHJvY2Vzc2VkICYmIG5ld0tleWVkTGlzdC5pbmRleE9mKG9sZFRyZWVbaV0ucHJvcHMua2V5KSA9PT0gLTEgJiYgY2FsbFJlbW92ZShvbGRUcmVlW2ldKTtcbiAgICAgICAgICAgIG5ld1BhcmVudFZub2RlLmRvbS5yZXBsYWNlQ2hpbGQoY2hpbGRWbm9kZS5kb20sIG5ld1BhcmVudFZub2RlLmRvbS5jaGlsZE5vZGVzW2ldKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBzaG91bGRQYXRjaCAmJiBwYXRjaChjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCFvbGRUcmVlW2ldLnByb2Nlc3NlZCkge1xuICAgICAgICAgICAgb2xkVHJlZVtpXSBpbnN0YW5jZW9mIFZub2RlICYmIGNhbGxSZW1vdmUob2xkVHJlZVtpXSk7XG4gICAgICAgICAgICBvbGRUcmVlW2ldLmRvbS5wYXJlbnROb2RlICYmIG5ld1BhcmVudFZub2RlLmRvbS5yZW1vdmVDaGlsZChvbGRUcmVlW2ldLmRvbSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmV3VHJlZUxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGxldCBjaGlsZFZub2RlID0gbmV3VHJlZVtpXTtcbiAgICAgICAgbGV0IG9sZENoaWxkVm5vZGUgPSBvbGRUcmVlW2ldO1xuXG4gICAgICAgIC8vIGlmIG9sZENoaWxkVm5vZGUgaXMgdW5kZWZpbmVkLCBpdCdzIGEgbmV3IG5vZGUsIGFwcGVuZCBpdFxuICAgICAgICBpZiAob2xkQ2hpbGRWbm9kZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgaWYgKGNoaWxkVm5vZGUgaW5zdGFuY2VvZiBWbm9kZSkge1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBjcmVhdGVFbGVtZW50KGNoaWxkVm5vZGUubmFtZSwgY2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgICAgICAgICB1cGRhdGVQcm9wZXJ0aWVzKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KTtcbiAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmNyZWF0ZShjaGlsZFZub2RlKTtcbiAgICAgICAgICAgIHBhdGNoKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZFZub2RlLm5vZGVWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG5ld1BhcmVudFZub2RlLmRvbS5hcHBlbmRDaGlsZChjaGlsZFZub2RlLmRvbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gaWYgY2hpbGRWbm9kZSBpcyBWbm9kZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBET00gbm9kZVxuICAgICAgICAgIGlmIChjaGlsZFZub2RlIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgICAgICAgIGlmIChjaGlsZFZub2RlLm5hbWUgPT09IG9sZENoaWxkVm5vZGUubmFtZSkge1xuICAgICAgICAgICAgICBjaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuXG4gICAgICAgICAgICAgIGlmIChcInYtb25jZVwiIGluIGNoaWxkVm5vZGUucHJvcHMgfHwgKGNoaWxkVm5vZGUucHJvcHMub25iZWZvcmV1cGRhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbmJlZm9yZXVwZGF0ZShjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKSA9PT0gZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgLy8gc2tpcCB0aGlzIHBhdGNoXG4gICAgICAgICAgICAgICAgY2hpbGRWbm9kZS5jaGlsZHJlbiA9IG9sZENoaWxkVm5vZGUuY2hpbGRyZW47XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZW1vdmVQcm9wZXJ0aWVzKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9LCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgdXBkYXRlUHJvcGVydGllcyhjaGlsZFZub2RlIGFzIFZub2RlICYgeyBkb206IERvbUVsZW1lbnQgfSwgb2xkQ2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIGlmICh2LmlzTW91bnRlZCkge1xuICAgICAgICAgICAgICAgIGNoaWxkVm5vZGUucHJvcHMub251cGRhdGUgJiYgY2hpbGRWbm9kZS5wcm9wcy5vbnVwZGF0ZShjaGlsZFZub2RlLCBvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUoY2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGF0Y2goY2hpbGRWbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0sIG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY2hpbGRWbm9kZS5kb20gPSBjcmVhdGVFbGVtZW50KGNoaWxkVm5vZGUubmFtZSwgY2hpbGRWbm9kZS5pc1NWRyk7XG4gICAgICAgICAgICAgIHVwZGF0ZVByb3BlcnRpZXMoY2hpbGRWbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBEb21FbGVtZW50IH0pO1xuICAgICAgICAgICAgICBjaGlsZFZub2RlLnByb3BzLm9uY3JlYXRlICYmIGNoaWxkVm5vZGUucHJvcHMub25jcmVhdGUoY2hpbGRWbm9kZSk7XG4gICAgICAgICAgICAgIG9sZENoaWxkVm5vZGUgaW5zdGFuY2VvZiBWbm9kZSAmJiBjYWxsUmVtb3ZlKG9sZENoaWxkVm5vZGUpO1xuICAgICAgICAgICAgICBuZXdQYXJlbnRWbm9kZS5kb20ucmVwbGFjZUNoaWxkKGNoaWxkVm5vZGUuZG9tLCBvbGRDaGlsZFZub2RlLmRvbSk7XG4gICAgICAgICAgICAgIHBhdGNoKGNoaWxkVm5vZGUgYXMgVm5vZGUgJiB7IGRvbTogRG9tRWxlbWVudCB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKG9sZENoaWxkVm5vZGUgaW5zdGFuY2VvZiBWbm9kZSkge1xuICAgICAgICAgICAgICBjaGlsZFZub2RlLmRvbSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNoaWxkVm5vZGUubm9kZVZhbHVlKTtcbiAgICAgICAgICAgICAgY2FsbFJlbW92ZShvbGRDaGlsZFZub2RlKTtcbiAgICAgICAgICAgICAgbmV3UGFyZW50Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChjaGlsZFZub2RlLmRvbSwgb2xkQ2hpbGRWbm9kZS5kb20gYXMgRG9tRWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjaGlsZFZub2RlLmRvbSA9IG9sZENoaWxkVm5vZGUuZG9tO1xuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgICAgICAgIGlmIChjaGlsZFZub2RlLm5vZGVWYWx1ZSAhPSBjaGlsZFZub2RlLmRvbS5ub2RlVmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjaGlsZFZub2RlLmRvbS5ub2RlVmFsdWUgPSBjaGlsZFZub2RlLm5vZGVWYWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBGb3IgcmVtYWluaW5nIG9sZCBjaGlsZHJlbjogcmVtb3ZlIGZyb20gRE9NLCBnYXJiYWdlIGNvbGxlY3RcbiAgICAgIGZvciAobGV0IGkgPSBvbGRUcmVlTGVuZ3RoIC0gMTsgaSA+PSBuZXdUcmVlTGVuZ3RoOyAtLWkpIHtcbiAgICAgICAgb2xkVHJlZVtpXSBpbnN0YW5jZW9mIFZub2RlICYmIGNhbGxSZW1vdmUob2xkVHJlZVtpXSk7XG4gICAgICAgIG9sZFRyZWVbaV0uZG9tLnBhcmVudE5vZGUgJiYgbmV3UGFyZW50Vm5vZGUuZG9tLnJlbW92ZUNoaWxkKG9sZFRyZWVbaV0uZG9tKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBuZXdQYXJlbnRWbm9kZS5jaGlsZHJlbiA9IG5ld1RyZWU7XG4gIH1cblxuICBsZXQgbWFpblZub2RlOiBWbm9kZSB8IG51bGwgPSBudWxsO1xuICBsZXQgb2xkTWFpblZub2RlOiBWbm9kZSB8IG51bGwgPSBudWxsO1xuXG4gIHYudW5Nb3VudCA9ICgpID0+IHtcbiAgICBtb3VudGVkQ29tcG9uZW50ID0gZW1wdHlDb21wb25lbnQ7XG4gICAgbGV0IHJlc3VsdCA9IHYudXBkYXRlKCk7XG4gICAgdi5pc01vdW50ZWQgPSBmYWxzZTtcbiAgICBtYWluQ29udGFpbmVyID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIHYudXBkYXRlID0gKHByb3BzLCAuLi5jaGlsZHJlbikgPT4ge1xuICAgIGlmIChtYWluVm5vZGUpIHtcbiAgICAgIGNsZWFudXBWbm9kZXMoKTtcbiAgICAgIG9sZE1haW5Wbm9kZSA9IG1haW5Wbm9kZTtcbiAgICAgIG1haW5Wbm9kZSA9IG5ldyBWbm9kZShtYWluVm5vZGUubmFtZSwgbWFpblZub2RlLnByb3BzLCBbdihtb3VudGVkQ29tcG9uZW50LCBwcm9wcywgLi4uY2hpbGRyZW4pXSk7XG4gICAgICBtYWluVm5vZGUuZG9tID0gb2xkTWFpblZub2RlLmRvbTtcbiAgICAgIG1haW5Wbm9kZS5pc1NWRyA9IG9sZE1haW5Wbm9kZS5pc1NWRztcbiAgICAgIHBhdGNoKG1haW5Wbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBOb2RlIH0sIG9sZE1haW5Wbm9kZSBhcyBWbm9kZSAmIHsgZG9tOiBOb2RlIH0pO1xuICAgICAgdi5pc01vdW50ZWQgPSB0cnVlO1xuICAgICAgaWYgKHYuaXNOb2RlKSB7XG4gICAgICAgIHJldHVybiAobWFpblZub2RlLmRvbSBhcyBIVE1MRWxlbWVudCkuaW5uZXJIVE1MO1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICB2Lm1vdW50ID0gKGNvbnRhaW5lciwgY29tcG9uZW50LCBwcm9wcywgLi4uY2hpbGRyZW4pID0+IHtcbiAgICBpZiAodi5pc01vdW50ZWQpIHtcbiAgICAgIHYudW5Nb3VudCgpO1xuICAgIH1cblxuICAgIGlmIChpc05vZGUpIHtcbiAgICAgIG1haW5Db250YWluZXIgPSB0eXBlb2YgY29udGFpbmVyID09PSBcInN0cmluZ1wiID8gY3JlYXRlRWxlbWVudChjb250YWluZXIsIGNvbnRhaW5lciA9PT0gXCJzdmdcIikgOiBjb250YWluZXI7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1haW5Db250YWluZXIgPSB0eXBlb2YgY29udGFpbmVyID09PSBcInN0cmluZ1wiID8gKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoY29udGFpbmVyKVswXSBhcyBEb21FbGVtZW50KSA6IGNvbnRhaW5lcjtcbiAgICB9XG5cbiAgICBpZiAobWFpbkNvbnRhaW5lciAhPT0gbnVsbCkge1xuICAgICAgbWFpblZub2RlID0gZG9tVG9Wbm9kZShtYWluQ29udGFpbmVyKTtcbiAgICAgIG1haW5Wbm9kZS5pc1NWRyA9IG1haW5Wbm9kZS5uYW1lID09PSBcInN2Z1wiO1xuICAgICAgb2xkTWFpblZub2RlID0gbWFpblZub2RlO1xuICAgICAgbW91bnRlZENvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICB9XG5cbiAgICByZXR1cm4gdi51cGRhdGUocHJvcHMsIC4uLmNoaWxkcmVuKTtcbiAgfTtcblxuICBsZXQgZGlyZWN0aXZlczogUmVjb3JkPHN0cmluZywgRGlyZWN0aXZlPiA9IHt9O1xuXG4gIHYuZGlyZWN0aXZlID0gKG5hbWU6IHN0cmluZywgZGlyZWN0aXZlOiBEaXJlY3RpdmUpID0+IHtcbiAgICBsZXQgZnVsbE5hbWUgPSBgdi0ke25hbWV9YDtcbiAgICBpZiAocmVzZXJ2ZWRXb3Jkcy5pbmRleE9mKGZ1bGxOYW1lKSA9PT0gLTEpIHtcbiAgICAgIHJlc2VydmVkV29yZHMucHVzaChmdWxsTmFtZSk7XG4gICAgICBkaXJlY3RpdmVzW2Z1bGxOYW1lXSA9IGRpcmVjdGl2ZTtcbiAgICB9XG4gIH07XG5cbiAgbGV0IGhpZGVEaXJlY3RpdmUgPSAodGVzdDogYm9vbGVhbikgPT4gKGJvb2w6IGJvb2xlYW4sIHZub2RlOiBWbm9kZSwgb2xkbm9kZT86IFZub2RlIHwgVGV4dFZub2RlKSA9PiB7XG4gICAgbGV0IHZhbHVlID0gdGVzdCA/IGJvb2wgOiAhYm9vbDtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGxldCBuZXdkb20gPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKTtcbiAgICAgIGlmIChvbGRub2RlICYmIG9sZG5vZGUuZG9tICYmIG9sZG5vZGUuZG9tLnBhcmVudE5vZGUpIHtcbiAgICAgICAgb2xkbm9kZSBpbnN0YW5jZW9mIFZub2RlICYmIGNhbGxSZW1vdmUob2xkbm9kZSk7XG4gICAgICAgIG9sZG5vZGUuZG9tLnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKG5ld2RvbSwgb2xkbm9kZS5kb20pO1xuICAgICAgfVxuICAgICAgdm5vZGUubmFtZSA9IFwiI3RleHRcIjtcbiAgICAgIHZub2RlLmNoaWxkcmVuID0gW107XG4gICAgICB2bm9kZS5wcm9wcyA9IHt9O1xuICAgICAgdm5vZGUuZG9tID0gbmV3ZG9tIGFzIHVua25vd24gYXMgRG9tRWxlbWVudDtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH07XG5cbiAgdi5kaXJlY3RpdmUoXCJpZlwiLCBoaWRlRGlyZWN0aXZlKGZhbHNlKSk7XG4gIHYuZGlyZWN0aXZlKFwidW5sZXNzXCIsIGhpZGVEaXJlY3RpdmUodHJ1ZSkpO1xuICB2LmRpcmVjdGl2ZShcImZvclwiLCAoc2V0OiB1bmtub3duW10sIHZub2RlOiBWbm9kZSkgPT4ge1xuICAgIHZub2RlLmNoaWxkcmVuID0gc2V0Lm1hcCh2bm9kZS5jaGlsZHJlblswXSBhcyAodmFsdWU6IHVua25vd24pID0+IEZ1bmN0aW9uKTtcbiAgfSk7XG4gIHYuZGlyZWN0aXZlKFwic2hvd1wiLCAoYm9vbDogYm9vbGVhbiwgdm5vZGU6IFZub2RlKSA9PiB7XG4gICAgKHZub2RlLmRvbSBhcyB7IHN0eWxlOiB7IGRpc3BsYXk6IHN0cmluZyB9IH0pLnN0eWxlLmRpc3BsYXkgPSBib29sID8gXCJcIiA6IFwibm9uZVwiO1xuICB9KTtcbiAgdi5kaXJlY3RpdmUoXCJjbGFzc1wiLCAoY2xhc3NlczogeyBbeDogc3RyaW5nXTogYm9vbGVhbiB9LCB2bm9kZTogVm5vZGUpID0+IHtcbiAgICBmb3IgKGxldCBuYW1lIGluIGNsYXNzZXMpIHtcbiAgICAgICh2bm9kZS5kb20gYXMgRG9tRWxlbWVudCkuY2xhc3NMaXN0LnRvZ2dsZShuYW1lLCBjbGFzc2VzW25hbWVdKTtcbiAgICB9XG4gIH0pO1xuICB2LmRpcmVjdGl2ZShcImh0bWxcIiwgKGh0bWw6IHN0cmluZywgdm5vZGU6IFZub2RlKSA9PiB7XG4gICAgdm5vZGUuY2hpbGRyZW4gPSBbdHJ1c3QoaHRtbCldO1xuICB9KTtcblxuICB2Lm5ld0luc3RhbmNlID0gdmFseXJpYW47XG5cbiAgcmV0dXJuIHY7XG59XG5cbigoaXNOb2RlID8gZ2xvYmFsIDogd2luZG93KSBhcyB1bmtub3duIGFzIHsgdjogVmFseXJpYW4gfSkudiA9IHZhbHlyaWFuKCk7XG4iXX0=
|
package/lib/index.ts
CHANGED
|
@@ -100,6 +100,7 @@ class VnodeComponent implements VnodeComponent {
|
|
|
100
100
|
|
|
101
101
|
interface Valyrian {
|
|
102
102
|
(tagOrComponent: string | ValyrianComponent, props?: Props | null, children?: VnodeOrUnknown): Vnode | VnodeComponent;
|
|
103
|
+
fragment: (props: Props, children: VnodeOrUnknown[]) => VnodeOrUnknown[];
|
|
103
104
|
isMounted: boolean;
|
|
104
105
|
isNode: boolean;
|
|
105
106
|
reservedWords: string[];
|
|
@@ -160,6 +161,10 @@ function valyrian(): Valyrian {
|
|
|
160
161
|
}
|
|
161
162
|
};
|
|
162
163
|
|
|
164
|
+
v.fragment = (props: Props, vnodes: VnodeOrUnknown[]) => {
|
|
165
|
+
return vnodes;
|
|
166
|
+
};
|
|
167
|
+
|
|
163
168
|
v.isMounted = false;
|
|
164
169
|
v.isNode = isNode;
|
|
165
170
|
const reservedWords = ["key", "data", "v-once", "oncreate", "onupdate", "onremove", "onbeforeupdate"];
|
|
@@ -226,12 +231,11 @@ function valyrian(): Valyrian {
|
|
|
226
231
|
if (prop in directives) {
|
|
227
232
|
return directives[prop](newVnode.props[prop], newVnode, oldVnode);
|
|
228
233
|
}
|
|
229
|
-
} else if (typeof newVnode.props[prop] === "function"
|
|
234
|
+
} else if (typeof newVnode.props[prop] === "function") {
|
|
230
235
|
if (attachedListeners.indexOf(prop) === -1) {
|
|
231
236
|
(mainContainer as DomElement).addEventListener(prop.slice(2), eventListener);
|
|
232
237
|
attachedListeners.push(prop);
|
|
233
238
|
}
|
|
234
|
-
|
|
235
239
|
newVnode.dom[`v-${prop}`] = newVnode.props[prop];
|
|
236
240
|
} else if (prop in newVnode.dom && !newVnode.isSVG) {
|
|
237
241
|
// eslint-disable-next-line eqeqeq
|
|
@@ -259,7 +263,7 @@ function valyrian(): Valyrian {
|
|
|
259
263
|
|
|
260
264
|
function removeProperties(newVnode: Vnode & { dom: DomElement }, oldVnode: Vnode) {
|
|
261
265
|
for (let name in oldVnode.props) {
|
|
262
|
-
if (
|
|
266
|
+
if (name in newVnode.props === false && typeof oldVnode.props[name] !== "function" && reservedWords.indexOf(name) === -1) {
|
|
263
267
|
if (name in newVnode.dom) {
|
|
264
268
|
newVnode.dom[name] = null;
|
|
265
269
|
} else {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "valyrian.js",
|
|
3
|
-
"version": "5.0.
|
|
3
|
+
"version": "5.0.17",
|
|
4
4
|
"description": "Lightweight steel to forge PWAs. (Minimal Frontend Framework with server side rendering and other capabilities)",
|
|
5
5
|
"source": "lib/index.ts",
|
|
6
6
|
"main": "dist/valyrian.min.js",
|
|
@@ -49,46 +49,46 @@
|
|
|
49
49
|
"commit": "git add . && git-cz",
|
|
50
50
|
"release": "release-it --verbose",
|
|
51
51
|
"release-test": "release-it --dry-run --verbose",
|
|
52
|
-
"bench": " nodemon -e js,ts,json,css -w ./bench -w ./lib -w ./plugins --exec '
|
|
52
|
+
"bench": " nodemon -e js,ts,json,css -w ./bench -w ./lib -w ./plugins --exec 'buffalo-test --require ./register'"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"clean-css": "^5.
|
|
56
|
-
"esbuild": "^0.
|
|
55
|
+
"clean-css": "^5.2.2",
|
|
56
|
+
"esbuild": "^0.14.5",
|
|
57
57
|
"favicons": "^6.2.2",
|
|
58
58
|
"form-data": "^4.0.0",
|
|
59
|
-
"node-fetch": "
|
|
59
|
+
"node-fetch": "2.6.1",
|
|
60
60
|
"parse5": "^6.0.1",
|
|
61
|
-
"
|
|
62
|
-
"
|
|
63
|
-
"terser": "^5.
|
|
64
|
-
"ts-node": "^10.
|
|
61
|
+
"pirates": "^4.0.4",
|
|
62
|
+
"purgecss": "4.1.3",
|
|
63
|
+
"terser": "^5.10.0",
|
|
64
|
+
"ts-node": "^10.4.0",
|
|
65
65
|
"tsc-prog": "^2.2.1",
|
|
66
|
-
"tslib": "^2.3.
|
|
67
|
-
"typescript": "^4.
|
|
66
|
+
"tslib": "^2.3.1",
|
|
67
|
+
"typescript": "^4.5.4"
|
|
68
68
|
},
|
|
69
69
|
"devDependencies": {
|
|
70
|
-
"@
|
|
71
|
-
"@
|
|
72
|
-
"@
|
|
73
|
-
"@typescript-eslint/
|
|
74
|
-
"
|
|
70
|
+
"@release-it/conventional-changelog": "^3.3.0",
|
|
71
|
+
"@types/node": "^17.0.0",
|
|
72
|
+
"@typescript-eslint/eslint-plugin": "^5.7.0",
|
|
73
|
+
"@typescript-eslint/parser": "^5.7.0",
|
|
74
|
+
"buffalo-test": "^2.0.0",
|
|
75
75
|
"compression": "^1.7.4",
|
|
76
76
|
"cross-env": "^7.0.3",
|
|
77
77
|
"cz-conventional-changelog": "3.3.0",
|
|
78
|
-
"dayjs": "^1.10.
|
|
79
|
-
"eslint": "^
|
|
80
|
-
"eslint-plugin-sonarjs": "^0.
|
|
81
|
-
"expect": "^27.
|
|
78
|
+
"dayjs": "^1.10.7",
|
|
79
|
+
"eslint": "^8.4.1",
|
|
80
|
+
"eslint-plugin-sonarjs": "^0.11.0",
|
|
81
|
+
"expect": "^27.4.2",
|
|
82
82
|
"faker": "^5.5.3",
|
|
83
|
-
"fastify": "^3.
|
|
84
|
-
"gzip-size": "^
|
|
85
|
-
"mocha": "^9.
|
|
86
|
-
"node-dev": "^7.
|
|
83
|
+
"fastify": "^3.25.0",
|
|
84
|
+
"gzip-size": "^7.0.0",
|
|
85
|
+
"mocha": "^9.1.3",
|
|
86
|
+
"node-dev": "^7.1.0",
|
|
87
87
|
"nyc": "^15.1.0",
|
|
88
|
-
"release-it": "^14.
|
|
89
|
-
"remark-cli": "^
|
|
90
|
-
"remark-toc": "^
|
|
91
|
-
"yargs": "^17.0
|
|
88
|
+
"release-it": "^14.11.8",
|
|
89
|
+
"remark-cli": "^10.0.1",
|
|
90
|
+
"remark-toc": "^8.0.1",
|
|
91
|
+
"yargs": "^17.3.0"
|
|
92
92
|
},
|
|
93
93
|
"nyc": {
|
|
94
94
|
"exclude": [
|
|
@@ -111,7 +111,59 @@
|
|
|
111
111
|
"plugins": {
|
|
112
112
|
"@release-it/conventional-changelog": {
|
|
113
113
|
"infile": "CHANGELOG.md",
|
|
114
|
-
"preset":
|
|
114
|
+
"preset": {
|
|
115
|
+
"name": "conventionalcommits",
|
|
116
|
+
"types": [
|
|
117
|
+
{
|
|
118
|
+
"type": "feat",
|
|
119
|
+
"section": "Features"
|
|
120
|
+
},
|
|
121
|
+
{
|
|
122
|
+
"type": "feature",
|
|
123
|
+
"section": "Features"
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
"type": "fix",
|
|
127
|
+
"section": "Bug Fixes"
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"type": "perf",
|
|
131
|
+
"section": "Performance Improvements"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"type": "revert",
|
|
135
|
+
"section": "Reverts"
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
"type": "docs",
|
|
139
|
+
"section": "Documentation"
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"type": "style",
|
|
143
|
+
"section": "Styles"
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"type": "chore",
|
|
147
|
+
"section": "Miscellaneous Chores"
|
|
148
|
+
},
|
|
149
|
+
{
|
|
150
|
+
"type": "refactor",
|
|
151
|
+
"section": "Code Refactoring"
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"type": "test",
|
|
155
|
+
"section": "Tests"
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
"type": "build",
|
|
159
|
+
"section": "Build System"
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
"type": "ci",
|
|
163
|
+
"section": "Continuous Integration"
|
|
164
|
+
}
|
|
165
|
+
]
|
|
166
|
+
}
|
|
115
167
|
}
|
|
116
168
|
},
|
|
117
169
|
"git": {
|
package/plugins/node.js
CHANGED
|
@@ -66,7 +66,9 @@ function fileMethodFactory() {
|
|
|
66
66
|
resolveJsonModule: true,
|
|
67
67
|
removeComments: true,
|
|
68
68
|
...(options.tsc || {}).compilerOptions
|
|
69
|
-
}
|
|
69
|
+
},
|
|
70
|
+
jsxFactory: "v",
|
|
71
|
+
jsxFragment: "v.fragment"
|
|
70
72
|
};
|
|
71
73
|
|
|
72
74
|
tsc.build(tscProgOptions);
|
|
@@ -79,8 +81,9 @@ function fileMethodFactory() {
|
|
|
79
81
|
write: false,
|
|
80
82
|
minify: options.compact,
|
|
81
83
|
outdir: "out",
|
|
82
|
-
target:
|
|
84
|
+
target: "esnext",
|
|
83
85
|
jsxFactory: "v",
|
|
86
|
+
jsxFragment: "v.fragment",
|
|
84
87
|
loader: { ".js": "jsx", ".ts": "tsx", ".mjs": "jsx" },
|
|
85
88
|
...(options.esbuild || {})
|
|
86
89
|
});
|
package/plugins/store.js
CHANGED
|
@@ -22,12 +22,7 @@ let plugin = function (v) {
|
|
|
22
22
|
return obj;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
-
v.Store = function ({
|
|
26
|
-
state = {},
|
|
27
|
-
getters = {},
|
|
28
|
-
actions = {},
|
|
29
|
-
mutations = {}
|
|
30
|
-
} = {}) {
|
|
25
|
+
v.Store = function ({ state = {}, getters = {}, actions = {}, mutations = {} } = {}) {
|
|
31
26
|
let frozen = true;
|
|
32
27
|
|
|
33
28
|
function isUnfrozen() {
|
|
@@ -76,8 +71,7 @@ let plugin = function (v) {
|
|
|
76
71
|
};
|
|
77
72
|
};
|
|
78
73
|
|
|
79
|
-
v.useStore = (store) =>
|
|
80
|
-
(v.$store = store instanceof v.Store ? store : new v.Store(store));
|
|
74
|
+
v.useStore = (store) => (v.$store = store instanceof v.Store ? store : new v.Store(store));
|
|
81
75
|
};
|
|
82
76
|
|
|
83
77
|
plugin.default = plugin;
|
package/register.js
CHANGED
|
@@ -1,23 +1,82 @@
|
|
|
1
1
|
const { addHook } = require("pirates");
|
|
2
|
-
const {
|
|
3
|
-
|
|
4
|
-
const jsxOptions = {
|
|
5
|
-
production: true,
|
|
6
|
-
transforms: ["imports", "typescript", "jsx"],
|
|
7
|
-
jsxPragma: "v",
|
|
8
|
-
jsxFragmentPragma: "v"
|
|
9
|
-
};
|
|
2
|
+
const { transformSync } = require("esbuild");
|
|
3
|
+
const fs = require("fs");
|
|
10
4
|
|
|
11
5
|
addHook(
|
|
12
6
|
(code, filePath) => {
|
|
13
|
-
let
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
7
|
+
let fileName = filePath.split("/").pop();
|
|
8
|
+
let extension = fileName.split(".").pop();
|
|
9
|
+
|
|
10
|
+
let loader = "default";
|
|
11
|
+
if (["js", "jsx", "ts", "tsx", "css", "json", "txt"].includes(extension)) {
|
|
12
|
+
if (["js", "jsx", "mjs", "ts", "tsx"].includes(extension)) {
|
|
13
|
+
loader = "tsx";
|
|
14
|
+
} else if (extension === "txt") {
|
|
15
|
+
loader = "text";
|
|
16
|
+
} else {
|
|
17
|
+
loader = extension;
|
|
18
|
+
}
|
|
19
|
+
} else if (["jpeg", "jpg", "png", "gif", "webp", "svg"].includes(extension)) {
|
|
20
|
+
loader = "dataurl";
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
let options = {
|
|
24
|
+
tsconfigRaw: {
|
|
25
|
+
compilerOptions: {
|
|
26
|
+
target: "ESNEXT",
|
|
27
|
+
module: "ESNEXT",
|
|
28
|
+
strict: true,
|
|
29
|
+
allowSyntheticDefaultImports: true,
|
|
30
|
+
allowJs: true,
|
|
31
|
+
esModuleInterop: true,
|
|
32
|
+
resolveJsonModule: true
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
loader,
|
|
36
|
+
minify: false,
|
|
37
|
+
format: "cjs",
|
|
38
|
+
target: "esnext",
|
|
39
|
+
logLevel: "warning",
|
|
40
|
+
jsxFactory: "v",
|
|
41
|
+
jsxFragment: "v.fragment"
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
// Check if tsconfig.json exists with fs module
|
|
45
|
+
if ((extension === "ts" || extension === "tsx") && fs.existsSync(process.cwd() + "/tsconfig.json")) {
|
|
46
|
+
let tsconfig = fs.readFileSync(process.cwd() + "/tsconfig.json", "utf8");
|
|
47
|
+
|
|
48
|
+
let tsconfigRaw = JSON.parse(tsconfig);
|
|
49
|
+
let compilerOptions = tsconfigRaw.compilerOptions || {};
|
|
50
|
+
|
|
51
|
+
options.tsconfigRaw = { ...options.tsconfigRaw, ...tsconfigRaw };
|
|
52
|
+
options.tsconfigRaw.compilerOptions = { ...options.tsconfigRaw.compilerOptions, ...compilerOptions };
|
|
53
|
+
|
|
54
|
+
if (compilerOptions.target) {
|
|
55
|
+
options.target = compilerOptions.target.toLowerCase();
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (compilerOptions.module) {
|
|
59
|
+
let format = compilerOptions.module.toLowerCase();
|
|
60
|
+
if (format === "commonjs") {
|
|
61
|
+
options.format = "cjs";
|
|
62
|
+
} else if (format.startsWith("es")) {
|
|
63
|
+
options.format = "esm";
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
let { code: transformed } = transformSync(code, options);
|
|
69
|
+
if (/"use strict"\;/gi.test(code) === false) {
|
|
70
|
+
transformed = '"use strict";' + transformed;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return transformed;
|
|
21
74
|
},
|
|
22
|
-
{
|
|
75
|
+
{
|
|
76
|
+
exts: [".js", ".jsx", ".ts", ".tsx", ".mjs", ".css", ".json", ".text", ".jpeg", ".jpg", ".png", ".gif", ".webp", ".svg", ".html"],
|
|
77
|
+
ignoreNodeModules: false,
|
|
78
|
+
matcher(fileName) {
|
|
79
|
+
return !/node_modules/.test(fileName) || /\.tsx?$/.test(fileName);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
23
82
|
);
|
package/CHANGELOG.md
DELETED
|
@@ -1,339 +0,0 @@
|
|
|
1
|
-
### [5.0.13](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.12...5.0.13) (2021-07-29)
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
### Bug Fixes
|
|
5
|
-
|
|
6
|
-
* **lib:** fix error patching children of an already replaced element ([3ce399d](https://github.com/Masquerade-Circus/valyrian.js/commit/3ce399d58f7371553ec254cd33c2b525be91c1b5))
|
|
7
|
-
|
|
8
|
-
### [5.0.12](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.11...5.0.12) (2021-07-28)
|
|
9
|
-
|
|
10
|
-
### Code Refactoring
|
|
11
|
-
|
|
12
|
-
* Refactor 2021 06 14 ([#20](https://github.com/Masquerade-Circus/valyrian.js/issues/20)) ([ceda5ea](https://github.com/Masquerade-Circus/valyrian.js/commit/ceda5ea1f8561983dd3e680a4d9a00e56f3b5292))
|
|
13
|
-
|
|
14
|
-
### [5.0.11](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.10...5.0.11) (2021-05-01)
|
|
15
|
-
|
|
16
|
-
### Bug Fixes
|
|
17
|
-
|
|
18
|
-
* **lib:** fix replace string with keyed list item ([4daac78](https://github.com/Masquerade-Circus/valyrian.js/commit/4daac78294aea7a862287afc00809d4630676fda))
|
|
19
|
-
|
|
20
|
-
### [5.0.10](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.9...5.0.10) (2021-04-29)
|
|
21
|
-
|
|
22
|
-
### Bug Fixes
|
|
23
|
-
|
|
24
|
-
* **lib:** fix don't add property if false at first render ([00e6842](https://github.com/Masquerade-Circus/valyrian.js/commit/00e6842a86788e2962efbc2a090bfa3d77c20bbb))
|
|
25
|
-
|
|
26
|
-
### [5.0.9](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.8...5.0.9) (2021-04-29)
|
|
27
|
-
|
|
28
|
-
### Miscellaneous Chores
|
|
29
|
-
|
|
30
|
-
* **main:** remove unused minified file. Ignore .dccache ([d702115](https://github.com/Masquerade-Circus/valyrian.js/commit/d702115a13d65e74975433f1f49b13ea7f44fb33))
|
|
31
|
-
|
|
32
|
-
### [5.0.8](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.7...5.0.8) (2020-12-08)
|
|
33
|
-
|
|
34
|
-
### Bug Fixes
|
|
35
|
-
|
|
36
|
-
* **router:** fix bug removing home unique slash ([9ae422f](https://github.com/Masquerade-Circus/valyrian.js/commit/9ae422feb70b0ba3097fcf64596d896638e7675a))
|
|
37
|
-
* **router/node:** allow urls ending in slash as a valid route. v.inline.css now only minifies wo map ([3047229](https://github.com/Masquerade-Circus/valyrian.js/commit/3047229871aa615696b9b29998d8301381eb67da))
|
|
38
|
-
|
|
39
|
-
### [5.0.7](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.6...5.0.7) (2020-12-07)
|
|
40
|
-
|
|
41
|
-
### Code Refactoring
|
|
42
|
-
|
|
43
|
-
* **register:** update register hook. Update node plugin ([f62505c](https://github.com/Masquerade-Circus/valyrian.js/commit/f62505c6a6bb562e35f01b47ea62c8247cdbfe49))
|
|
44
|
-
|
|
45
|
-
### [5.0.6](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.5...5.0.6) (2020-12-04)
|
|
46
|
-
|
|
47
|
-
### Bug Fixes
|
|
48
|
-
|
|
49
|
-
* **register.js:** add register.js to package.json files attribute ([d8f6674](https://github.com/Masquerade-Circus/valyrian.js/commit/d8f66746bfb37820a2fa90799aab0880837518b6))
|
|
50
|
-
|
|
51
|
-
### [5.0.5](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.4...5.0.5) (2020-12-04)
|
|
52
|
-
|
|
53
|
-
### Code Refactoring
|
|
54
|
-
|
|
55
|
-
* **lib:** add register and improve node plugin ([b4fce5e](https://github.com/Masquerade-Circus/valyrian.js/commit/b4fce5ecd5a3f0c0ba684d6defd89768272f1ca2))
|
|
56
|
-
|
|
57
|
-
### [5.0.4](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-10-03)
|
|
58
|
-
|
|
59
|
-
### Code Refactoring
|
|
60
|
-
|
|
61
|
-
* **request:** improve request plugin. Add more tests for request plugin ([5f9c4ab](https://github.com/Masquerade-Circus/valyrian.js/commit/5f9c4ab4b3ce221b51ed26eff4e95117f371f5c3))
|
|
62
|
-
|
|
63
|
-
### [5.0.3](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-10-01)
|
|
64
|
-
|
|
65
|
-
### Code Refactoring
|
|
66
|
-
|
|
67
|
-
* **main:** major format changes. Remove travis. Remove codeclimate ([9635f52](https://github.com/Masquerade-Circus/valyrian.js/commit/9635f52d7ed1daae9e8ca06e56514f1a4c45a4b1))
|
|
68
|
-
* **main:** remove coveralls dependency. Improve service worker ([781c2a1](https://github.com/Masquerade-Circus/valyrian.js/commit/781c2a1d5f938188920125cb85c594f148e75d8f))
|
|
69
|
-
|
|
70
|
-
### [5.0.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-09-27)
|
|
71
|
-
|
|
72
|
-
### Code Refactoring
|
|
73
|
-
|
|
74
|
-
* **node:** allow require and import on dom.js file ([f7cb19a](https://github.com/Masquerade-Circus/valyrian.js/commit/f7cb19a1377eeda06fa2caa25225eda8351da2df))
|
|
75
|
-
|
|
76
|
-
### [5.0.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-09-27)
|
|
77
|
-
|
|
78
|
-
### Bug Fixes
|
|
79
|
-
|
|
80
|
-
* **node:** fix icons generator. Improve sw. Improve htmlToHyperscript parser ([b38627b](https://github.com/Masquerade-Circus/valyrian.js/commit/b38627b922d9632f39d916ce97e1e355b7f23861))
|
|
81
|
-
|
|
82
|
-
## [5.0.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-09-24)
|
|
83
|
-
|
|
84
|
-
### Code Refactoring
|
|
85
|
-
|
|
86
|
-
* **repo:** update dependencies. Changes in plugins ([b8c4f2b](https://github.com/Masquerade-Circus/valyrian.js/commit/b8c4f2ba88367666d25512f6d353d133f5735053))
|
|
87
|
-
|
|
88
|
-
### [4.3.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-08-05)
|
|
89
|
-
|
|
90
|
-
### Bug Fixes
|
|
91
|
-
|
|
92
|
-
* **lib:** upgrade dependencies ([cc87ccd](https://github.com/Masquerade-Circus/valyrian.js/commit/cc87ccd218f9850de8c4f9f7b9599931d1ce451b))
|
|
93
|
-
|
|
94
|
-
### [4.3.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-04-10)
|
|
95
|
-
|
|
96
|
-
### Code Refactoring
|
|
97
|
-
|
|
98
|
-
* **directives:** identify create or update event on directives by undefined oldvnode ([594960f](https://github.com/Masquerade-Circus/valyrian.js/commit/594960f0226d494d61a7917b37ff038f94370f06))
|
|
99
|
-
|
|
100
|
-
## [4.3.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-04-06)
|
|
101
|
-
|
|
102
|
-
### Features
|
|
103
|
-
|
|
104
|
-
* **directives:** add v-model directive as plugin ([9f26926](https://github.com/Masquerade-Circus/valyrian.js/commit/9f269264ddcfba238571daefd5c2a08ed75f7fca))
|
|
105
|
-
|
|
106
|
-
### [4.2.3](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-04-04)
|
|
107
|
-
|
|
108
|
-
### Bug Fixes
|
|
109
|
-
|
|
110
|
-
* **router:** fix v-route directive ([1247e9a](https://github.com/Masquerade-Circus/valyrian.js/commit/1247e9ab297f5e1fde8602d5280c8123032385d5))
|
|
111
|
-
|
|
112
|
-
### [4.2.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-04-04)
|
|
113
|
-
|
|
114
|
-
### Code Refactoring
|
|
115
|
-
|
|
116
|
-
* **directives:** improved directives and attach v- before the name of the directive ([f2f11da](https://github.com/Masquerade-Circus/valyrian.js/commit/f2f11da0f8f2806d3314b1641e0c462982e9a437))
|
|
117
|
-
|
|
118
|
-
### [4.2.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-03-28)
|
|
119
|
-
|
|
120
|
-
### Bug Fixes
|
|
121
|
-
|
|
122
|
-
* **main:** fix keyed lists not updating children ([56296fc](https://github.com/Masquerade-Circus/valyrian.js/commit/56296fc1365d2c96390f740af0c8942937e6f3e2))
|
|
123
|
-
|
|
124
|
-
### Code Refactoring
|
|
125
|
-
|
|
126
|
-
* **directives:** remove v-text directive does not improve performance ([26c6780](https://github.com/Masquerade-Circus/valyrian.js/commit/26c6780f765d3a31e0cad881ea596cc4a6fc144e))
|
|
127
|
-
|
|
128
|
-
## [4.2.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-03-27)
|
|
129
|
-
|
|
130
|
-
### Features
|
|
131
|
-
|
|
132
|
-
* **directives:** add v-pre directive to direct raw html render ([dc16e92](https://github.com/Masquerade-Circus/valyrian.js/commit/dc16e922bcefa1f84921b8f3cf6c07fe067d31e3))
|
|
133
|
-
* **directives:** add v-text directive ([b6523ae](https://github.com/Masquerade-Circus/valyrian.js/commit/b6523ae211a3a1ee55ca82999645a19066418a67))
|
|
134
|
-
|
|
135
|
-
### Code Refactoring
|
|
136
|
-
|
|
137
|
-
* **directives:** change model directive to data directive ([f2eaf8b](https://github.com/Masquerade-Circus/valyrian.js/commit/f2eaf8ba346f59a7603927e32c53cc8a905bffb7))
|
|
138
|
-
* **directives:** change v-pre to v-html ([280cf58](https://github.com/Masquerade-Circus/valyrian.js/commit/280cf58f6e591d92549e6aa6655e32a0e0efd234))
|
|
139
|
-
* **directives:** rename v-noop to v-once ([3159099](https://github.com/Masquerade-Circus/valyrian.js/commit/31590990e17d99d863e967e5bbdd89b79a14a5db))
|
|
140
|
-
|
|
141
|
-
### Tests
|
|
142
|
-
|
|
143
|
-
* **directives:** add v-skip directive test ([6d50ecc](https://github.com/Masquerade-Circus/valyrian.js/commit/6d50ecc73bc61810a067e81267af3f85544826da))
|
|
144
|
-
|
|
145
|
-
## [4.1.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-03-20)
|
|
146
|
-
|
|
147
|
-
### Features
|
|
148
|
-
|
|
149
|
-
* **main lib:** add newInstance method to allow to handle multiple mounts ([d09a2a6](https://github.com/Masquerade-Circus/valyrian.js/commit/d09a2a6ae35926d4010830f46da583d784ddcbc2))
|
|
150
|
-
|
|
151
|
-
### [4.0.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-03-06)
|
|
152
|
-
|
|
153
|
-
### Code Refactoring
|
|
154
|
-
|
|
155
|
-
* **main lib:** remove v-list directive. Don't show null and undefined as text ([61e24fd](https://github.com/Masquerade-Circus/valyrian.js/commit/61e24fdff7fbeb67f995c9d2b52e55caa00da928))
|
|
156
|
-
|
|
157
|
-
### [4.0.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-01-26)
|
|
158
|
-
|
|
159
|
-
### Bug Fixes
|
|
160
|
-
|
|
161
|
-
* **main:** fix replace error when the old node has been deleted or moved ([ba7b5c5](https://github.com/Masquerade-Circus/valyrian.js/commit/ba7b5c5d4d6b567f991bc0ac8d3ac237f44bfe8b))
|
|
162
|
-
|
|
163
|
-
## [4.0.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-01-26)
|
|
164
|
-
|
|
165
|
-
### ⚠ BREAKING CHANGES
|
|
166
|
-
|
|
167
|
-
* **main:** Lifecycle methods renamed.
|
|
168
|
-
|
|
169
|
-
### Features
|
|
170
|
-
|
|
171
|
-
* **main:** add a reserved model property to pass data to the vnodes ([496f3ce](https://github.com/Masquerade-Circus/valyrian.js/commit/496f3ce15d84b187cdaa897d415a77138120ae55))
|
|
172
|
-
|
|
173
|
-
### Bug Fixes
|
|
174
|
-
|
|
175
|
-
* **main:** handle TextVnode as newVnode ([f29cec3](https://github.com/Masquerade-Circus/valyrian.js/commit/f29cec3c47310c2f4aa8719f5fd0659f52f8388d))
|
|
176
|
-
* **main (directives):** fix use of v-if with v-for trigger an error ([dec8522](https://github.com/Masquerade-Circus/valyrian.js/commit/dec8522ec4328c7321d526fa77fb6bd308081541))
|
|
177
|
-
* **main (keyed lists):** fix error replaced vnode with undefined node and updating with defined node ([782dbe7](https://github.com/Masquerade-Circus/valyrian.js/commit/782dbe77856965df3f18602ff4dd713ac622d949))
|
|
178
|
-
|
|
179
|
-
### Performance Improvements
|
|
180
|
-
|
|
181
|
-
* **main:** increase performance for all new changes ([b4b1a0d](https://github.com/Masquerade-Circus/valyrian.js/commit/b4b1a0d440ba8d699827b5a155a2d877c69d6c47))
|
|
182
|
-
|
|
183
|
-
### improvement
|
|
184
|
-
|
|
185
|
-
* **main:** rename lifecycle methods to write more easily in object props ([25b1eba](https://github.com/Masquerade-Circus/valyrian.js/commit/25b1eba52a34a54bcfdbf1e8304c0e7ad0de65b7))
|
|
186
|
-
|
|
187
|
-
### Tests
|
|
188
|
-
|
|
189
|
-
* **signals tests:** fix signals tests, change deprecated v-remove to onremove lifecycle ([3da0f10](https://github.com/Masquerade-Circus/valyrian.js/commit/3da0f100666c6487bc58ca3ee022a15ed8793759))
|
|
190
|
-
|
|
191
|
-
### [3.3.4](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-01-24)
|
|
192
|
-
|
|
193
|
-
### Bug Fixes
|
|
194
|
-
|
|
195
|
-
* fix release-it hooks order ([20ef775](https://github.com/Masquerade-Circus/valyrian.js/commit/20ef7754ed7108e5951d7b1981b67a44e2016082))
|
|
196
|
-
|
|
197
|
-
### Build System
|
|
198
|
-
|
|
199
|
-
* add release-it to the repo ([2a75faa](https://github.com/Masquerade-Circus/valyrian.js/commit/2a75faa18565adf680c3f9088073f386ff9e69c6))
|
|
200
|
-
|
|
201
|
-
### [3.3.3](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-01-24)
|
|
202
|
-
|
|
203
|
-
### Bug Fixes
|
|
204
|
-
|
|
205
|
-
* make if directives work with truthy and falsy values ([624eae6](https://github.com/Masquerade-Circus/valyrian.js/commit/624eae6f505229431adef59827d2afeb1b09a0fe))
|
|
206
|
-
|
|
207
|
-
### [3.3.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-01-24)
|
|
208
|
-
|
|
209
|
-
### Bug Fixes
|
|
210
|
-
|
|
211
|
-
* fix v.trust not returning correct text dom ([32a52a8](https://github.com/Masquerade-Circus/valyrian.js/commit/32a52a86d02fb8ea165344d9f566deac9f349d5a))
|
|
212
|
-
|
|
213
|
-
### [3.3.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-01-22)
|
|
214
|
-
|
|
215
|
-
### Bug Fixes
|
|
216
|
-
|
|
217
|
-
* fix cleanup not working correctly ([ff26b5b](https://github.com/Masquerade-Circus/valyrian.js/commit/ff26b5ba069b3c5a4c42c90a8e91fcec333967b5))
|
|
218
|
-
|
|
219
|
-
### Code Refactoring
|
|
220
|
-
|
|
221
|
-
* improve performance and size. Add commitizen ([6cafa51](https://github.com/Masquerade-Circus/valyrian.js/commit/6cafa513d4db9e2e9f7e51811c7b8906f8b4b73c))
|
|
222
|
-
|
|
223
|
-
## [3.3.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2020-01-17)
|
|
224
|
-
|
|
225
|
-
## [3.2.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-11-21)
|
|
226
|
-
|
|
227
|
-
### [3.1.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-09-28)
|
|
228
|
-
|
|
229
|
-
## [3.1.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-09-27)
|
|
230
|
-
|
|
231
|
-
### [3.0.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-09-09)
|
|
232
|
-
|
|
233
|
-
### [3.0.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-09-09)
|
|
234
|
-
|
|
235
|
-
## [3.0.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-09-08)
|
|
236
|
-
|
|
237
|
-
## [2.7.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-03-09)
|
|
238
|
-
|
|
239
|
-
## [2.6.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-03-05)
|
|
240
|
-
|
|
241
|
-
### [2.5.3](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-03-05)
|
|
242
|
-
|
|
243
|
-
### [2.5.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-03-04)
|
|
244
|
-
|
|
245
|
-
### [2.5.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-03-04)
|
|
246
|
-
|
|
247
|
-
## [2.5.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-03-04)
|
|
248
|
-
|
|
249
|
-
### [2.4.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-03-01)
|
|
250
|
-
|
|
251
|
-
### [2.4.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-27)
|
|
252
|
-
|
|
253
|
-
## [2.4.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-27)
|
|
254
|
-
|
|
255
|
-
### [2.3.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-19)
|
|
256
|
-
|
|
257
|
-
## [2.3.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-16)
|
|
258
|
-
|
|
259
|
-
### [2.2.7](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-15)
|
|
260
|
-
|
|
261
|
-
### [2.2.6](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-15)
|
|
262
|
-
|
|
263
|
-
### [2.2.5](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-09)
|
|
264
|
-
|
|
265
|
-
### [2.2.4](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-09)
|
|
266
|
-
|
|
267
|
-
### [2.2.3](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-09)
|
|
268
|
-
|
|
269
|
-
### [2.2.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-08)
|
|
270
|
-
|
|
271
|
-
### [2.2.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-08)
|
|
272
|
-
|
|
273
|
-
## [2.2.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-07)
|
|
274
|
-
|
|
275
|
-
## [2.1.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2019-02-06)
|
|
276
|
-
|
|
277
|
-
### [2.0.4](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-09-15)
|
|
278
|
-
|
|
279
|
-
### [2.0.3](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-09-08)
|
|
280
|
-
|
|
281
|
-
### [2.0.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-09-08)
|
|
282
|
-
|
|
283
|
-
### [2.0.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-09-01)
|
|
284
|
-
|
|
285
|
-
## [2.0.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-09-01)
|
|
286
|
-
|
|
287
|
-
### [1.9.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-25)
|
|
288
|
-
|
|
289
|
-
## [1.9.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-22)
|
|
290
|
-
|
|
291
|
-
### [1.8.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-21)
|
|
292
|
-
|
|
293
|
-
## [1.8.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-20)
|
|
294
|
-
|
|
295
|
-
## [1.7.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-16)
|
|
296
|
-
|
|
297
|
-
### [1.6.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-16)
|
|
298
|
-
|
|
299
|
-
## [1.6.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-16)
|
|
300
|
-
|
|
301
|
-
## [1.5.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-16)
|
|
302
|
-
|
|
303
|
-
### [1.4.3](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-15)
|
|
304
|
-
|
|
305
|
-
### [1.4.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-15)
|
|
306
|
-
|
|
307
|
-
### [1.4.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-13)
|
|
308
|
-
|
|
309
|
-
## [1.4.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-13)
|
|
310
|
-
|
|
311
|
-
## [1.3.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-13)
|
|
312
|
-
|
|
313
|
-
### [1.2.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-13)
|
|
314
|
-
|
|
315
|
-
## [1.2.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-13)
|
|
316
|
-
|
|
317
|
-
### [1.1.3](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-12)
|
|
318
|
-
|
|
319
|
-
### [1.1.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-09)
|
|
320
|
-
|
|
321
|
-
### [1.1.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-08)
|
|
322
|
-
|
|
323
|
-
## [1.1.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-06-01)
|
|
324
|
-
|
|
325
|
-
### [1.0.5](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-05-31)
|
|
326
|
-
|
|
327
|
-
### [1.0.4](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-05-31)
|
|
328
|
-
|
|
329
|
-
### [1.0.3](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-05-31)
|
|
330
|
-
|
|
331
|
-
### [1.0.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-05-31)
|
|
332
|
-
|
|
333
|
-
### [1.0.1](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-05-31)
|
|
334
|
-
|
|
335
|
-
## [1.0.0](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-05-25)
|
|
336
|
-
|
|
337
|
-
### [0.0.3](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-04-17)
|
|
338
|
-
|
|
339
|
-
### [0.0.2](https://github.com/Masquerade-Circus/valyrian.js/compare/5.0.3...5.0.4) (2018-04-17)
|