valyrian.js 8.0.2 → 8.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -339,7 +339,7 @@ function sharedSetAttribute(name, value, newVnode) {
339
339
  }
340
340
  return;
341
341
  }
342
- if (name in newVnodeDom) {
342
+ if (!newVnode.isSVG && name in newVnodeDom) {
343
343
  newVnodeDom[name] = value;
344
344
  return;
345
345
  }
@@ -361,7 +361,7 @@ function updateAttributes(newVnode, oldProps) {
361
361
  if (oldProps) {
362
362
  for (const name in oldProps) {
363
363
  if (name in vnodeProps === false && !eventListenerNames.has(name) && !reservedProps.has(name)) {
364
- if (name in vnodeDom) {
364
+ if (!newVnode.isSVG && name in vnodeDom) {
365
365
  vnodeDom[name] = null;
366
366
  } else {
367
367
  vnodeDom.removeAttribute(name);
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../lib/index.ts"],
4
- "sourcesContent": ["/* eslint-disable */\ndeclare global {\n var document: Document;\n namespace JSX {\n interface IntrinsicElements extends DefaultRecord {}\n type Element = ReturnType<\n typeof v | ((...args: any) => string | number | null | undefined | boolean | Promise<any>)\n >;\n type ComponentReturnType = string | number | null | undefined | boolean | Element | Element[];\n }\n}\n\ninterface DefaultRecord extends Record<string | number | symbol, any> {}\n\nexport interface Properties extends DefaultRecord {\n key?: string | number;\n}\n\nexport interface DomElement extends Element, DefaultRecord {}\n\nexport interface Component extends DefaultRecord {\n (props: Properties, children: any[]): Vnode | any;\n}\n\nexport interface POJOComponent extends DefaultRecord {\n view: Component;\n}\n\nexport type ValyrianComponent = Component | POJOComponent;\n\nexport interface VnodeComponentInterface extends Vnode {\n tag: ValyrianComponent;\n}\n\nexport interface Children extends Array<Vnode | VnodeComponentInterface | ValyrianComponent | any> {}\n\nexport interface Directive {\n (value: any, vnode: VnodeWithDom, oldProps: Properties | null): false | void | any;\n}\n\nexport const isNodeJs = Boolean(typeof process !== \"undefined\" && process.versions && process.versions.node);\n\nexport class Vnode {\n constructor(\n public tag: string | Component | POJOComponent,\n public props: null | Properties,\n public children: Children,\n public dom?: DomElement,\n public isSVG?: boolean\n ) {}\n}\n\nexport interface VnodeWithDom extends Vnode {\n tag: string;\n dom: DomElement;\n props: Properties;\n}\n\nexport const isPOJOComponent = (component: unknown): component is POJOComponent =>\n Boolean(component && typeof component === \"object\" && \"view\" in component);\n\nexport const isComponent = (component: unknown): component is Component =>\n Boolean(typeof component === \"function\" || isPOJOComponent(component));\nexport const isVnode = (object?: unknown): object is Vnode => object instanceof Vnode;\n\nexport const isVnodeComponent = (object?: unknown): object is VnodeComponentInterface => {\n return isVnode(object) && isComponent(object.tag);\n};\n\nexport function v(tagOrComponent: string | ValyrianComponent, props: Properties | null, ...children: Children) {\n return new Vnode(tagOrComponent, props, children);\n}\n\nv.fragment = (_: Properties, ...children: Children) => children;\n\nexport function hidrateDomToVnode(dom: any): VnodeWithDom | void {\n if (dom.nodeType === 3) {\n return dom.nodeValue;\n }\n\n if (dom.nodeType === 1) {\n const tag = dom.nodeName.toLowerCase();\n const props = {} as Properties;\n const children = [] as Children;\n\n for (let i = 0, l = dom.childNodes.length; i < l; i++) {\n const childDom = dom.childNodes[i];\n if (childDom.nodeType === 3) {\n children.push(childDom.nodeValue);\n } else if (childDom.nodeType === 1) {\n const childVnode = hidrateDomToVnode(childDom);\n children.push(childVnode);\n }\n }\n\n const attributes = dom.attributes;\n for (let i = 0, l = attributes.length; i < l; i++) {\n const attr = attributes[i];\n props[attr.nodeName] = attr.nodeValue;\n }\n\n const vnode = new Vnode(tag, props, children);\n vnode.dom = dom;\n vnode.isSVG = tag === \"svg\";\n return vnode as VnodeWithDom;\n }\n}\n\nexport function trust(htmlString: string) {\n const div = document.createElement(\"div\");\n div.innerHTML = htmlString.trim();\n return Array.from(div.childNodes).map(hidrateDomToVnode);\n}\n\nlet mainComponent: VnodeComponentInterface | null = null;\nlet mainVnode: VnodeWithDom | null = null;\nlet isMounted = false;\n\nexport const current = {\n vnode: null as Vnode | null,\n component: null as ValyrianComponent | null,\n event: null as Event | null\n};\n\nexport const reservedProps = new Set<string>([\n \"key\",\n \"state\",\n \"v-keep\",\n \"v-text\",\n \"v-if\",\n \"v-for\",\n \"v-show\",\n \"v-class\",\n \"v-html\",\n \"v-model\",\n \"v-create\",\n \"v-update\",\n \"v-cleanup\"\n]);\n\nconst onCleanupSet = new Set<Function>();\nconst onMountSet = new Set<Function>();\nconst onUpdateSet = new Set<Function>();\nconst onUnmountSet = new Set<Function>();\nexport const onMount = (callback: Function) => !isMounted && onMountSet.add(callback);\nexport const onUpdate = (callback: Function) => onUpdateSet.add(callback);\nexport const onCleanup = (callback: Function) => onCleanupSet.add(callback);\nexport const onUnmount = (callback: Function) => !isMounted && onUnmountSet.add(callback);\nconst callSet = (set: Set<Function>) => {\n for (const callback of set) {\n callback();\n }\n set.clear();\n};\n\nexport const directives: Record<string, Directive> = {\n \"v-if\": (value, vnode) => {\n if (!Boolean(value)) {\n const parentNode = vnode.dom?.parentNode;\n if (parentNode) {\n parentNode.replaceChild(document.createTextNode(\"\"), vnode.dom);\n }\n\n return false;\n }\n },\n\n \"v-show\": (value, vnode) => {\n const bool = Boolean(value);\n (\n vnode.dom as unknown as {\n style: { display: string };\n }\n ).style.display = bool ? \"\" : \"none\";\n },\n\n \"v-html\": (value, vnode) => {\n vnode.children = trust(value as string);\n },\n\n // The \"v-model\" directive binds the value of an input element to a model property\n \"v-model\": (model, vnode) => {\n // eslint-disable-next-line prefer-const\n if (\"name\" in vnode.props === false) {\n return;\n }\n\n let value;\n const property = vnode.props.name;\n let event = \"oninput\";\n\n // This function updates the model property when the input element's value changes\n let handler = (e: Event) => (model[property] = (e.target as DomElement & Record<string, any>).value);\n if (vnode.tag === \"input\") {\n // Depending on the type of input element, use a different handler function\n switch (vnode.props.type) {\n case \"checkbox\": {\n if (Array.isArray(model[property])) {\n // If the model property is an array, add or remove the value from the array when the checkbox is checked or unchecked\n handler = (e: Event) => {\n const val = (e.target as DomElement & Record<string, any>).value;\n const idx = model[property].indexOf(val);\n if (idx === -1) {\n model[property].push(val);\n } else {\n model[property].splice(idx, 1);\n }\n };\n // If the value is in the array, set the checkbox to be checked\n value = model[property].indexOf(vnode.dom.value) !== -1;\n } else if (\"value\" in vnode.props) {\n // If the input element has a \"value\" attribute, use it to determine the checked state\n handler = () => {\n if (model[property] === vnode.props.value) {\n model[property] = null;\n } else {\n model[property] = vnode.props.value;\n }\n };\n value = model[property] === vnode.props.value;\n } else {\n // If there is no \"value\" attribute, use a boolean value for the model property\n handler = () => (model[property] = !model[property]);\n value = model[property];\n }\n // Set the \"checked\" attribute on the input element\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\"checked\", value, vnode);\n break;\n }\n case \"radio\": {\n // If the element is a radio button, set the \"checked\" attribute based on the value of the model property\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\"checked\", model[property] === vnode.dom.value, vnode);\n break;\n }\n default: {\n // For all other input types, set the \"value\" attribute based on the value of the model property\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\"value\", model[property], vnode);\n }\n }\n } else if (vnode.tag === \"select\") {\n // If the element is a select element, use the \"click\" event by default\n event = \"onclick\";\n if (vnode.props.multiple) {\n // If the select element allows multiple selections, update the model property with an array of selected values\n handler = (e: Event & Record<string, any>) => {\n const val = (e.target as DomElement & Record<string, any>).value;\n if (e.ctrlKey) {\n // If the Ctrl key is pressed, add or remove the value from the array\n const idx = model[property].indexOf(val);\n if (idx === -1) {\n model[property].push(val);\n } else {\n model[property].splice(idx, 1);\n }\n } else {\n // If the Ctrl key is not pressed, set the model property to an array with the selected value\n model[property].splice(0, model[property].length);\n model[property].push(val);\n }\n };\n // Set the \"selected\" attribute on the options based on whether they are in the model property array\n vnode.children.forEach((child: VnodeWithDom) => {\n if (child.tag === \"option\") {\n const value = \"value\" in child.props ? child.props.value : child.children.join(\"\").trim();\n child.props.selected = model[property].indexOf(value) !== -1;\n }\n });\n } else {\n // If the select element does not allow multiple selections, set the \"selected\" attribute on the options based on the value of the model property\n vnode.children.forEach((child: VnodeWithDom) => {\n if (child.tag === \"option\") {\n const value = \"value\" in child.props ? child.props.value : child.children.join(\"\").trim();\n child.props.selected = value === model[property];\n }\n });\n }\n } else if (vnode.tag === \"textarea\") {\n // Set the textarea's content to the value of the model property\n vnode.children = [model[property]];\n }\n\n // We assume that the prev handler if any will not be changed by the user across patchs\n const prevHandler = vnode.props[event];\n\n // Set the event handler on the element\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\n event,\n (e: Event) => {\n handler(e);\n\n // If the previous handler is defined, call it after the model has been updated\n if (prevHandler) {\n prevHandler(e);\n }\n },\n vnode\n );\n },\n\n \"v-create\": (callback, vnode, oldProps) => {\n if (!oldProps) {\n const cleanup = callback(vnode);\n\n if (typeof cleanup === \"function\") {\n onCleanup(cleanup);\n }\n }\n },\n\n \"v-update\": (callback, vnode, oldProps) => {\n if (oldProps) {\n const cleanup = callback(vnode, oldProps);\n\n if (typeof cleanup === \"function\") {\n onCleanup(cleanup);\n }\n }\n },\n\n \"v-cleanup\": (callback, vnode) => {\n onCleanup(() => callback(vnode));\n },\n\n \"v-class\": (value, vnode) => {\n if (typeof value === \"string\") {\n vnode.dom.className = value;\n } else if (Array.isArray(value)) {\n vnode.dom.className = value.join(\" \");\n } else if (typeof value === \"object\") {\n const classList = vnode.dom.classList;\n for (const name in value) {\n const val = typeof value[name] === \"function\" ? (value[name] as Function)() : value[name];\n classList.toggle(name, val);\n }\n }\n },\n\n // Frequent used properties\n class(value, vnode) {\n if (vnode.dom.className !== value) {\n vnode.dom.className = value;\n }\n },\n\n className(value, vnode) {\n directives.class(value, vnode, null);\n },\n\n id: (value, vnode) => {\n vnode.dom.id = value;\n },\n\n style: (value, vnode) => {\n if (typeof value === \"string\") {\n vnode.dom.style = value;\n } else if (typeof value === \"object\") {\n vnode.dom.style = \"\";\n const domStyle = vnode.dom.style;\n for (const name in value) {\n domStyle[name] = value[name];\n }\n }\n }\n};\n\nexport function directive(name: string, directive: Directive) {\n const directiveName = `v-${name}`;\n directives[directiveName] = directive;\n reservedProps.add(directiveName);\n}\n\nexport function setPropNameReserved(name: string) {\n reservedProps.add(name);\n}\n\nconst eventListenerNames = new Set<string>();\n\nfunction eventListener(e: Event) {\n current.event = e;\n let dom = e.target as DomElement;\n const name = `on${e.type}`;\n\n while (dom) {\n const oldProps = dom.props;\n if (oldProps && oldProps[name]) {\n oldProps[name](e, dom);\n\n if (!e.defaultPrevented) {\n // eslint-disable-next-line no-use-before-define\n update();\n }\n return;\n }\n dom = dom.parentNode as DomElement;\n }\n\n current.event = null;\n}\n\nfunction sharedSetAttribute(name: string, value: any, newVnode: VnodeWithDom): void | boolean {\n const newVnodeDom = newVnode.dom;\n if (typeof value === \"function\") {\n if (!eventListenerNames.has(name)) {\n // We attach the delegated event listener to the main vnode dom element, which is the root of the component\n (mainVnode as VnodeWithDom).dom.addEventListener(name.slice(2), eventListener);\n eventListenerNames.add(name);\n }\n return;\n }\n\n if (name in newVnodeDom) {\n newVnodeDom[name] = value;\n return;\n }\n\n if (value === false) {\n newVnodeDom.removeAttribute(name);\n } else {\n newVnodeDom.setAttribute(name, value);\n }\n}\n\nexport function setAttribute(name: string, value: any, newVnode: VnodeWithDom): void {\n if (!reservedProps.has(name)) {\n newVnode.props[name] = value;\n sharedSetAttribute(name, value, newVnode);\n }\n}\n\nexport function updateAttributes(newVnode: VnodeWithDom, oldProps: Properties | null): void {\n const vnodeDom = newVnode.dom;\n const vnodeProps = newVnode.props;\n\n if (oldProps) {\n for (const name in oldProps) {\n if (name in vnodeProps === false && !eventListenerNames.has(name) && !reservedProps.has(name)) {\n if (name in vnodeDom) {\n vnodeDom[name] = null;\n } else {\n vnodeDom.removeAttribute(name);\n }\n }\n }\n }\n\n for (const name in vnodeProps) {\n if (directives[name]) {\n if (directives[name](vnodeProps[name], newVnode, oldProps) === false) {\n break;\n }\n continue;\n }\n\n if (!reservedProps.has(name)) {\n sharedSetAttribute(name, vnodeProps[name], newVnode);\n }\n }\n}\n\nexport function createElement(tag: string, isSVG: boolean): DomElement {\n return isSVG\n ? document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n : (document.createElement(tag) as DomElement);\n}\n\nfunction flatTree(newVnode: VnodeWithDom) {\n current.vnode = newVnode;\n\n if (\"v-for\" in newVnode.props) {\n const children = [];\n const set = newVnode.props[\"v-for\"];\n const l = set.length;\n const callback = newVnode.children[0];\n\n for (let i = 0; i < l; i++) {\n const newChild = callback(set[i], i);\n if (newChild instanceof Vnode) {\n newChild.props = newChild.props || {};\n newChild.isSVG = newVnode.isSVG || newChild.tag === \"svg\";\n }\n children[i] = newChild;\n }\n\n return children;\n }\n\n let i = 0;\n const originalChildren = newVnode.children;\n let children = originalChildren;\n\n while (i < children.length) {\n const newChild = children[i];\n\n if (newChild == null) {\n if (children === originalChildren) {\n children = [...originalChildren];\n }\n children.splice(i, 1);\n continue;\n }\n\n if (Array.isArray(newChild)) {\n if (children === originalChildren) {\n children = [...originalChildren];\n }\n children.splice(i, 1, ...newChild);\n continue;\n }\n\n if (newChild instanceof Vnode) {\n newChild.props = newChild.props || {};\n newChild.isSVG = newVnode.isSVG || newChild.tag === \"svg\";\n\n if (typeof newChild.tag !== \"string\") {\n if (children === originalChildren) {\n children = [...originalChildren];\n }\n\n const component = (current.component = newChild.tag);\n\n children[i] = (isPOJOComponent(component) ? component.view : component).bind(component)(\n newChild.props,\n newChild.children\n );\n\n continue;\n }\n }\n\n i++;\n }\n\n return children;\n}\n\nfunction createNewElement(newChild: VnodeWithDom, newVnode: VnodeWithDom, oldChild: DomElement | null) {\n const dom = createElement(newChild.tag, newChild.isSVG as boolean);\n if (oldChild) {\n newVnode.dom.replaceChild(dom, oldChild);\n } else {\n newVnode.dom.appendChild(dom);\n }\n newChild.dom = dom;\n updateAttributes(newChild, null);\n newChild.dom.props = newChild.props;\n if (\"v-text\" in newChild.props) {\n newChild.dom.textContent = newChild.props[\"v-text\"];\n return;\n }\n\n const children = flatTree(newChild);\n if (children.length === 0) {\n newChild.dom.textContent = \"\";\n return;\n }\n\n for (let i = 0, l = children.length; i < l; i++) {\n if (children[i] instanceof Vnode === false) {\n newChild.dom.appendChild(document.createTextNode(children[i]));\n continue;\n }\n createNewElement(children[i], newChild, null);\n }\n}\n\nfunction patchKeyed(newVnode: VnodeWithDom, children: Children) {\n const oldTree = [...Array.from(newVnode.dom.childNodes)] as unknown as DomElement[];\n const childNodes = newVnode.dom.childNodes;\n const oldKeyedList: Record<string, number> = {};\n const newKeyedList: Record<string, number> = {};\n\n for (let i = 0, l = oldTree.length; i < l; i++) {\n const oldProps = oldTree[i].props;\n if (oldProps) {\n oldKeyedList[oldProps.key as string] = i;\n }\n\n if (i < children.length && children[i] instanceof Vnode) {\n newKeyedList[children[i].props.key as string] = i;\n }\n }\n\n for (let i = 0, l = children.length; i < l; i++) {\n const newChild = children[i];\n const oldChild = oldTree[oldKeyedList[newChild.props.key as string]];\n\n if (!oldChild) {\n createNewElement(newChild, newVnode, childNodes[i] as DomElement | null);\n continue;\n }\n\n newChild.dom = oldChild;\n const currentChild = childNodes[i];\n if (!currentChild) {\n newVnode.dom.appendChild(oldChild);\n } else if (currentChild !== oldChild) {\n newVnode.dom.replaceChild(oldChild, currentChild);\n }\n\n if (\"v-keep\" in newChild.props === false || oldChild.props[\"v-keep\"] !== newChild.props[\"v-keep\"]) {\n updateAttributes(newChild as VnodeWithDom, oldChild.props);\n oldChild.props = newChild.props;\n\n if (\"v-text\" in newChild.props) {\n // eslint-disable-next-line eqeqeq\n if (oldChild.textContent != newChild.props[\"v-text\"]) {\n oldChild.textContent = newChild.props[\"v-text\"];\n }\n continue;\n }\n // eslint-disable-next-line no-use-before-define\n patch(newChild as VnodeWithDom);\n }\n }\n\n for (let i = children.length, l = childNodes.length; i < l; i++) {\n childNodes[i]?.remove();\n }\n}\n\n// eslint-disable-next-line complexity\nfunction patch(newVnode: VnodeWithDom): void {\n const children = flatTree(newVnode);\n\n const dom = newVnode.dom;\n\n if (children.length === 0) {\n if (dom.childNodes.length) {\n dom.textContent = \"\";\n }\n return;\n }\n\n const oldDomChildren = dom.childNodes as unknown as DomElement[];\n const oldChildrenLength = oldDomChildren.length;\n if (oldChildrenLength > 0) {\n const firstOldProps = oldDomChildren[0].props;\n const firstVnode = children[0] as VnodeWithDom;\n if (firstOldProps && firstVnode instanceof Vnode && \"key\" in firstVnode.props && \"key\" in firstOldProps) {\n patchKeyed(newVnode, children);\n return;\n }\n }\n\n const childrenLength = children.length;\n if (oldChildrenLength === 0) {\n for (let i = 0; i < childrenLength; i++) {\n if (children[i] instanceof Vnode === false) {\n dom.appendChild(document.createTextNode(children[i]));\n continue;\n }\n createNewElement(children[i], newVnode, null);\n }\n return;\n }\n\n for (let i = 0; i < childrenLength; i++) {\n const newChild = children[i] as VnodeWithDom;\n const isText = newChild instanceof Vnode === false;\n const oldChild = oldDomChildren[i];\n\n if (!oldChild) {\n if (isText) {\n newVnode.dom.appendChild(document.createTextNode(newChild as unknown as string));\n continue;\n }\n\n createNewElement(newChild as VnodeWithDom, newVnode, null);\n continue;\n }\n\n if (isText) {\n if (oldChild.nodeType !== 3) {\n newVnode.dom.replaceChild(document.createTextNode(newChild as unknown as string), oldChild);\n continue;\n }\n\n // eslint-disable-next-line eqeqeq\n if (oldChild.nodeValue != (newChild as unknown as string)) {\n oldChild.nodeValue = newChild as unknown as string;\n }\n continue;\n }\n\n if (\"v-keep\" in newChild.props) {\n if (oldChild.props && oldChild.props[\"v-keep\"] === newChild.props[\"v-keep\"]) {\n continue;\n }\n\n const nextOldChild = oldDomChildren[i + 1];\n if (nextOldChild && nextOldChild.props && nextOldChild.props[\"v-keep\"] === newChild.props[\"v-keep\"]) {\n oldChild.remove();\n continue;\n }\n }\n\n if (newChild.tag !== oldChild.nodeName.toLowerCase()) {\n createNewElement(newChild, newVnode, oldChild);\n continue;\n }\n\n newChild.dom = oldChild;\n updateAttributes(newChild, oldChild.props || null);\n oldChild.props = newChild.props;\n if (\"v-text\" in newChild.props) {\n // eslint-disable-next-line eqeqeq\n if (newChild.dom.textContent != newChild.props[\"v-text\"]) {\n newChild.dom.textContent = newChild.props[\"v-text\"];\n }\n continue;\n }\n patch(newChild);\n }\n\n for (let i = childrenLength, l = oldDomChildren.length; i < l; i++) {\n oldDomChildren[i]?.remove();\n }\n}\n\nexport function updateVnode(vnode: VnodeWithDom): string | void {\n callSet(onCleanupSet);\n vnode.props = vnode.props || {};\n patch(vnode);\n callSet(isMounted ? onUpdateSet : onMountSet);\n isMounted = true;\n current.vnode = null;\n current.component = null;\n}\n\nexport function update(): string {\n if (mainVnode) {\n mainVnode.children = [mainComponent];\n updateVnode(mainVnode as VnodeWithDom);\n if (isNodeJs) {\n return mainVnode.dom.innerHTML;\n }\n }\n return \"\";\n}\n\nlet debouncedUpdateTimeout: any;\n\nconst clearDebouncedUpdateMethod = isNodeJs ? clearTimeout : cancelAnimationFrame;\nconst setDebouncedUpdateMethod = isNodeJs ? () => setTimeout(update, 5) : () => requestAnimationFrame(update);\n\nexport function debouncedUpdate() {\n clearDebouncedUpdateMethod(debouncedUpdateTimeout);\n debouncedUpdateTimeout = setDebouncedUpdateMethod();\n}\n\nexport function unmount() {\n if (mainVnode) {\n mainComponent = v(() => null, {}) as VnodeComponentInterface;\n const result = update();\n callSet(onUnmountSet);\n for (const name in eventListenerNames) {\n mainVnode.dom.removeEventListener(name.slice(2).toLowerCase(), eventListener);\n Reflect.deleteProperty(eventListenerNames, name);\n }\n\n mainComponent = null;\n mainVnode = null;\n isMounted = false;\n current.vnode = null;\n current.component = null;\n current.event = null;\n return result;\n }\n\n return \"\";\n}\n\nexport function mount(dom: string | DomElement, component: ValyrianComponent | VnodeComponentInterface | any) {\n const container =\n typeof dom === \"string\" ? (isNodeJs ? createElement(dom, dom === \"svg\") : document.querySelector(dom)) : dom;\n\n if (isComponent(component)) {\n mainComponent = v(component, {}, []) as VnodeComponentInterface;\n } else if (isVnodeComponent(component)) {\n mainComponent = component;\n } else {\n mainComponent = v(() => component, {}, []) as VnodeComponentInterface;\n }\n\n mainVnode = hidrateDomToVnode(container) as VnodeWithDom;\n return update();\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable */\ndeclare global {\n var document: Document;\n namespace JSX {\n interface IntrinsicElements extends DefaultRecord {}\n type Element = ReturnType<\n typeof v | ((...args: any) => string | number | null | undefined | boolean | Promise<any>)\n >;\n type ComponentReturnType = string | number | null | undefined | boolean | Element | Element[];\n }\n}\n\ninterface DefaultRecord extends Record<string | number | symbol, any> {}\n\nexport interface Properties extends DefaultRecord {\n key?: string | number;\n}\n\nexport interface DomElement extends Element, DefaultRecord {}\n\nexport interface Component extends DefaultRecord {\n (props: Properties, children: any[]): Vnode | any;\n}\n\nexport interface POJOComponent extends DefaultRecord {\n view: Component;\n}\n\nexport type ValyrianComponent = Component | POJOComponent;\n\nexport interface VnodeComponentInterface extends Vnode {\n tag: ValyrianComponent;\n}\n\nexport interface Children extends Array<Vnode | VnodeComponentInterface | ValyrianComponent | any> {}\n\nexport interface Directive {\n (value: any, vnode: VnodeWithDom, oldProps: Properties | null): false | void | any;\n}\n\nexport const isNodeJs = Boolean(typeof process !== \"undefined\" && process.versions && process.versions.node);\n\nexport class Vnode {\n constructor(\n public tag: string | Component | POJOComponent,\n public props: null | Properties,\n public children: Children,\n public dom?: DomElement,\n public isSVG?: boolean\n ) {}\n}\n\nexport interface VnodeWithDom extends Vnode {\n tag: string;\n dom: DomElement;\n props: Properties;\n}\n\nexport const isPOJOComponent = (component: unknown): component is POJOComponent =>\n Boolean(component && typeof component === \"object\" && \"view\" in component);\n\nexport const isComponent = (component: unknown): component is Component =>\n Boolean(typeof component === \"function\" || isPOJOComponent(component));\nexport const isVnode = (object?: unknown): object is Vnode => object instanceof Vnode;\n\nexport const isVnodeComponent = (object?: unknown): object is VnodeComponentInterface => {\n return isVnode(object) && isComponent(object.tag);\n};\n\nexport function v(tagOrComponent: string | ValyrianComponent, props: Properties | null, ...children: Children) {\n return new Vnode(tagOrComponent, props, children);\n}\n\nv.fragment = (_: Properties, ...children: Children) => children;\n\nexport function hidrateDomToVnode(dom: any): VnodeWithDom | void {\n if (dom.nodeType === 3) {\n return dom.nodeValue;\n }\n\n if (dom.nodeType === 1) {\n const tag = dom.nodeName.toLowerCase();\n const props = {} as Properties;\n const children = [] as Children;\n\n for (let i = 0, l = dom.childNodes.length; i < l; i++) {\n const childDom = dom.childNodes[i];\n if (childDom.nodeType === 3) {\n children.push(childDom.nodeValue);\n } else if (childDom.nodeType === 1) {\n const childVnode = hidrateDomToVnode(childDom);\n children.push(childVnode);\n }\n }\n\n const attributes = dom.attributes;\n for (let i = 0, l = attributes.length; i < l; i++) {\n const attr = attributes[i];\n props[attr.nodeName] = attr.nodeValue;\n }\n\n const vnode = new Vnode(tag, props, children);\n vnode.dom = dom;\n vnode.isSVG = tag === \"svg\";\n return vnode as VnodeWithDom;\n }\n}\n\nexport function trust(htmlString: string) {\n const div = document.createElement(\"div\");\n div.innerHTML = htmlString.trim();\n return Array.from(div.childNodes).map(hidrateDomToVnode);\n}\n\nlet mainComponent: VnodeComponentInterface | null = null;\nlet mainVnode: VnodeWithDom | null = null;\nlet isMounted = false;\n\nexport const current = {\n vnode: null as Vnode | null,\n component: null as ValyrianComponent | null,\n event: null as Event | null\n};\n\nexport const reservedProps = new Set<string>([\n \"key\",\n \"state\",\n \"v-keep\",\n \"v-text\",\n \"v-if\",\n \"v-for\",\n \"v-show\",\n \"v-class\",\n \"v-html\",\n \"v-model\",\n \"v-create\",\n \"v-update\",\n \"v-cleanup\"\n]);\n\nconst onCleanupSet = new Set<Function>();\nconst onMountSet = new Set<Function>();\nconst onUpdateSet = new Set<Function>();\nconst onUnmountSet = new Set<Function>();\nexport const onMount = (callback: Function) => !isMounted && onMountSet.add(callback);\nexport const onUpdate = (callback: Function) => onUpdateSet.add(callback);\nexport const onCleanup = (callback: Function) => onCleanupSet.add(callback);\nexport const onUnmount = (callback: Function) => !isMounted && onUnmountSet.add(callback);\nconst callSet = (set: Set<Function>) => {\n for (const callback of set) {\n callback();\n }\n set.clear();\n};\n\nexport const directives: Record<string, Directive> = {\n \"v-if\": (value, vnode) => {\n if (!Boolean(value)) {\n const parentNode = vnode.dom?.parentNode;\n if (parentNode) {\n parentNode.replaceChild(document.createTextNode(\"\"), vnode.dom);\n }\n\n return false;\n }\n },\n\n \"v-show\": (value, vnode) => {\n const bool = Boolean(value);\n (\n vnode.dom as unknown as {\n style: { display: string };\n }\n ).style.display = bool ? \"\" : \"none\";\n },\n\n \"v-html\": (value, vnode) => {\n vnode.children = trust(value as string);\n },\n\n // The \"v-model\" directive binds the value of an input element to a model property\n \"v-model\": (model, vnode) => {\n // eslint-disable-next-line prefer-const\n if (\"name\" in vnode.props === false) {\n return;\n }\n\n let value;\n const property = vnode.props.name;\n let event = \"oninput\";\n\n // This function updates the model property when the input element's value changes\n let handler = (e: Event) => (model[property] = (e.target as DomElement & Record<string, any>).value);\n if (vnode.tag === \"input\") {\n // Depending on the type of input element, use a different handler function\n switch (vnode.props.type) {\n case \"checkbox\": {\n if (Array.isArray(model[property])) {\n // If the model property is an array, add or remove the value from the array when the checkbox is checked or unchecked\n handler = (e: Event) => {\n const val = (e.target as DomElement & Record<string, any>).value;\n const idx = model[property].indexOf(val);\n if (idx === -1) {\n model[property].push(val);\n } else {\n model[property].splice(idx, 1);\n }\n };\n // If the value is in the array, set the checkbox to be checked\n value = model[property].indexOf(vnode.dom.value) !== -1;\n } else if (\"value\" in vnode.props) {\n // If the input element has a \"value\" attribute, use it to determine the checked state\n handler = () => {\n if (model[property] === vnode.props.value) {\n model[property] = null;\n } else {\n model[property] = vnode.props.value;\n }\n };\n value = model[property] === vnode.props.value;\n } else {\n // If there is no \"value\" attribute, use a boolean value for the model property\n handler = () => (model[property] = !model[property]);\n value = model[property];\n }\n // Set the \"checked\" attribute on the input element\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\"checked\", value, vnode);\n break;\n }\n case \"radio\": {\n // If the element is a radio button, set the \"checked\" attribute based on the value of the model property\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\"checked\", model[property] === vnode.dom.value, vnode);\n break;\n }\n default: {\n // For all other input types, set the \"value\" attribute based on the value of the model property\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\"value\", model[property], vnode);\n }\n }\n } else if (vnode.tag === \"select\") {\n // If the element is a select element, use the \"click\" event by default\n event = \"onclick\";\n if (vnode.props.multiple) {\n // If the select element allows multiple selections, update the model property with an array of selected values\n handler = (e: Event & Record<string, any>) => {\n const val = (e.target as DomElement & Record<string, any>).value;\n if (e.ctrlKey) {\n // If the Ctrl key is pressed, add or remove the value from the array\n const idx = model[property].indexOf(val);\n if (idx === -1) {\n model[property].push(val);\n } else {\n model[property].splice(idx, 1);\n }\n } else {\n // If the Ctrl key is not pressed, set the model property to an array with the selected value\n model[property].splice(0, model[property].length);\n model[property].push(val);\n }\n };\n // Set the \"selected\" attribute on the options based on whether they are in the model property array\n vnode.children.forEach((child: VnodeWithDom) => {\n if (child.tag === \"option\") {\n const value = \"value\" in child.props ? child.props.value : child.children.join(\"\").trim();\n child.props.selected = model[property].indexOf(value) !== -1;\n }\n });\n } else {\n // If the select element does not allow multiple selections, set the \"selected\" attribute on the options based on the value of the model property\n vnode.children.forEach((child: VnodeWithDom) => {\n if (child.tag === \"option\") {\n const value = \"value\" in child.props ? child.props.value : child.children.join(\"\").trim();\n child.props.selected = value === model[property];\n }\n });\n }\n } else if (vnode.tag === \"textarea\") {\n // Set the textarea's content to the value of the model property\n vnode.children = [model[property]];\n }\n\n // We assume that the prev handler if any will not be changed by the user across patchs\n const prevHandler = vnode.props[event];\n\n // Set the event handler on the element\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\n event,\n (e: Event) => {\n handler(e);\n\n // If the previous handler is defined, call it after the model has been updated\n if (prevHandler) {\n prevHandler(e);\n }\n },\n vnode\n );\n },\n\n \"v-create\": (callback, vnode, oldProps) => {\n if (!oldProps) {\n const cleanup = callback(vnode);\n\n if (typeof cleanup === \"function\") {\n onCleanup(cleanup);\n }\n }\n },\n\n \"v-update\": (callback, vnode, oldProps) => {\n if (oldProps) {\n const cleanup = callback(vnode, oldProps);\n\n if (typeof cleanup === \"function\") {\n onCleanup(cleanup);\n }\n }\n },\n\n \"v-cleanup\": (callback, vnode) => {\n onCleanup(() => callback(vnode));\n },\n\n \"v-class\": (value, vnode) => {\n if (typeof value === \"string\") {\n vnode.dom.className = value;\n } else if (Array.isArray(value)) {\n vnode.dom.className = value.join(\" \");\n } else if (typeof value === \"object\") {\n const classList = vnode.dom.classList;\n for (const name in value) {\n const val = typeof value[name] === \"function\" ? (value[name] as Function)() : value[name];\n classList.toggle(name, val);\n }\n }\n },\n\n // Frequent used properties\n class(value, vnode) {\n if (vnode.dom.className !== value) {\n vnode.dom.className = value;\n }\n },\n\n className(value, vnode) {\n directives.class(value, vnode, null);\n },\n\n id: (value, vnode) => {\n vnode.dom.id = value;\n },\n\n style: (value, vnode) => {\n if (typeof value === \"string\") {\n vnode.dom.style = value;\n } else if (typeof value === \"object\") {\n vnode.dom.style = \"\";\n const domStyle = vnode.dom.style;\n for (const name in value) {\n domStyle[name] = value[name];\n }\n }\n }\n};\n\nexport function directive(name: string, directive: Directive) {\n const directiveName = `v-${name}`;\n directives[directiveName] = directive;\n reservedProps.add(directiveName);\n}\n\nexport function setPropNameReserved(name: string) {\n reservedProps.add(name);\n}\n\nconst eventListenerNames = new Set<string>();\n\nfunction eventListener(e: Event) {\n current.event = e;\n let dom = e.target as DomElement;\n const name = `on${e.type}`;\n\n while (dom) {\n const oldProps = dom.props;\n if (oldProps && oldProps[name]) {\n oldProps[name](e, dom);\n\n if (!e.defaultPrevented) {\n // eslint-disable-next-line no-use-before-define\n update();\n }\n return;\n }\n dom = dom.parentNode as DomElement;\n }\n\n current.event = null;\n}\n\nfunction sharedSetAttribute(name: string, value: any, newVnode: VnodeWithDom): void | boolean {\n const newVnodeDom = newVnode.dom;\n if (typeof value === \"function\") {\n if (!eventListenerNames.has(name)) {\n // We attach the delegated event listener to the main vnode dom element, which is the root of the component\n (mainVnode as VnodeWithDom).dom.addEventListener(name.slice(2), eventListener);\n eventListenerNames.add(name);\n }\n return;\n }\n\n if (!newVnode.isSVG && name in newVnodeDom) {\n newVnodeDom[name] = value;\n return;\n }\n\n if (value === false) {\n newVnodeDom.removeAttribute(name);\n } else {\n newVnodeDom.setAttribute(name, value);\n }\n}\n\nexport function setAttribute(name: string, value: any, newVnode: VnodeWithDom): void {\n if (!reservedProps.has(name)) {\n newVnode.props[name] = value;\n sharedSetAttribute(name, value, newVnode);\n }\n}\n\nexport function updateAttributes(newVnode: VnodeWithDom, oldProps: Properties | null): void {\n const vnodeDom = newVnode.dom;\n const vnodeProps = newVnode.props;\n\n if (oldProps) {\n for (const name in oldProps) {\n if (name in vnodeProps === false && !eventListenerNames.has(name) && !reservedProps.has(name)) {\n if (!newVnode.isSVG && name in vnodeDom) {\n vnodeDom[name] = null;\n } else {\n vnodeDom.removeAttribute(name);\n }\n }\n }\n }\n\n for (const name in vnodeProps) {\n if (directives[name]) {\n if (directives[name](vnodeProps[name], newVnode, oldProps) === false) {\n break;\n }\n continue;\n }\n\n if (!reservedProps.has(name)) {\n sharedSetAttribute(name, vnodeProps[name], newVnode);\n }\n }\n}\n\nexport function createElement(tag: string, isSVG: boolean): DomElement {\n return isSVG\n ? document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n : (document.createElement(tag) as DomElement);\n}\n\nfunction flatTree(newVnode: VnodeWithDom) {\n current.vnode = newVnode;\n\n if (\"v-for\" in newVnode.props) {\n const children = [];\n const set = newVnode.props[\"v-for\"];\n const l = set.length;\n const callback = newVnode.children[0];\n\n for (let i = 0; i < l; i++) {\n const newChild = callback(set[i], i);\n if (newChild instanceof Vnode) {\n newChild.props = newChild.props || {};\n newChild.isSVG = newVnode.isSVG || newChild.tag === \"svg\";\n }\n children[i] = newChild;\n }\n\n return children;\n }\n\n let i = 0;\n const originalChildren = newVnode.children;\n let children = originalChildren;\n\n while (i < children.length) {\n const newChild = children[i];\n\n if (newChild == null) {\n if (children === originalChildren) {\n children = [...originalChildren];\n }\n children.splice(i, 1);\n continue;\n }\n\n if (Array.isArray(newChild)) {\n if (children === originalChildren) {\n children = [...originalChildren];\n }\n children.splice(i, 1, ...newChild);\n continue;\n }\n\n if (newChild instanceof Vnode) {\n newChild.props = newChild.props || {};\n newChild.isSVG = newVnode.isSVG || newChild.tag === \"svg\";\n\n if (typeof newChild.tag !== \"string\") {\n if (children === originalChildren) {\n children = [...originalChildren];\n }\n\n const component = (current.component = newChild.tag);\n\n children[i] = (isPOJOComponent(component) ? component.view : component).bind(component)(\n newChild.props,\n newChild.children\n );\n\n continue;\n }\n }\n\n i++;\n }\n\n return children;\n}\n\nfunction createNewElement(newChild: VnodeWithDom, newVnode: VnodeWithDom, oldChild: DomElement | null) {\n const dom = createElement(newChild.tag, newChild.isSVG as boolean);\n if (oldChild) {\n newVnode.dom.replaceChild(dom, oldChild);\n } else {\n newVnode.dom.appendChild(dom);\n }\n newChild.dom = dom;\n updateAttributes(newChild, null);\n newChild.dom.props = newChild.props;\n if (\"v-text\" in newChild.props) {\n newChild.dom.textContent = newChild.props[\"v-text\"];\n return;\n }\n\n const children = flatTree(newChild);\n if (children.length === 0) {\n newChild.dom.textContent = \"\";\n return;\n }\n\n for (let i = 0, l = children.length; i < l; i++) {\n if (children[i] instanceof Vnode === false) {\n newChild.dom.appendChild(document.createTextNode(children[i]));\n continue;\n }\n createNewElement(children[i], newChild, null);\n }\n}\n\nfunction patchKeyed(newVnode: VnodeWithDom, children: Children) {\n const oldTree = [...Array.from(newVnode.dom.childNodes)] as unknown as DomElement[];\n const childNodes = newVnode.dom.childNodes;\n const oldKeyedList: Record<string, number> = {};\n const newKeyedList: Record<string, number> = {};\n\n for (let i = 0, l = oldTree.length; i < l; i++) {\n const oldProps = oldTree[i].props;\n if (oldProps) {\n oldKeyedList[oldProps.key as string] = i;\n }\n\n if (i < children.length && children[i] instanceof Vnode) {\n newKeyedList[children[i].props.key as string] = i;\n }\n }\n\n for (let i = 0, l = children.length; i < l; i++) {\n const newChild = children[i];\n const oldChild = oldTree[oldKeyedList[newChild.props.key as string]];\n\n if (!oldChild) {\n createNewElement(newChild, newVnode, childNodes[i] as DomElement | null);\n continue;\n }\n\n newChild.dom = oldChild;\n const currentChild = childNodes[i];\n if (!currentChild) {\n newVnode.dom.appendChild(oldChild);\n } else if (currentChild !== oldChild) {\n newVnode.dom.replaceChild(oldChild, currentChild);\n }\n\n if (\"v-keep\" in newChild.props === false || oldChild.props[\"v-keep\"] !== newChild.props[\"v-keep\"]) {\n updateAttributes(newChild as VnodeWithDom, oldChild.props);\n oldChild.props = newChild.props;\n\n if (\"v-text\" in newChild.props) {\n // eslint-disable-next-line eqeqeq\n if (oldChild.textContent != newChild.props[\"v-text\"]) {\n oldChild.textContent = newChild.props[\"v-text\"];\n }\n continue;\n }\n // eslint-disable-next-line no-use-before-define\n patch(newChild as VnodeWithDom);\n }\n }\n\n for (let i = children.length, l = childNodes.length; i < l; i++) {\n childNodes[i]?.remove();\n }\n}\n\n// eslint-disable-next-line complexity\nfunction patch(newVnode: VnodeWithDom): void {\n const children = flatTree(newVnode);\n\n const dom = newVnode.dom;\n\n if (children.length === 0) {\n if (dom.childNodes.length) {\n dom.textContent = \"\";\n }\n return;\n }\n\n const oldDomChildren = dom.childNodes as unknown as DomElement[];\n const oldChildrenLength = oldDomChildren.length;\n if (oldChildrenLength > 0) {\n const firstOldProps = oldDomChildren[0].props;\n const firstVnode = children[0] as VnodeWithDom;\n if (firstOldProps && firstVnode instanceof Vnode && \"key\" in firstVnode.props && \"key\" in firstOldProps) {\n patchKeyed(newVnode, children);\n return;\n }\n }\n\n const childrenLength = children.length;\n if (oldChildrenLength === 0) {\n for (let i = 0; i < childrenLength; i++) {\n if (children[i] instanceof Vnode === false) {\n dom.appendChild(document.createTextNode(children[i]));\n continue;\n }\n createNewElement(children[i], newVnode, null);\n }\n return;\n }\n\n for (let i = 0; i < childrenLength; i++) {\n const newChild = children[i] as VnodeWithDom;\n const isText = newChild instanceof Vnode === false;\n const oldChild = oldDomChildren[i];\n\n if (!oldChild) {\n if (isText) {\n newVnode.dom.appendChild(document.createTextNode(newChild as unknown as string));\n continue;\n }\n\n createNewElement(newChild as VnodeWithDom, newVnode, null);\n continue;\n }\n\n if (isText) {\n if (oldChild.nodeType !== 3) {\n newVnode.dom.replaceChild(document.createTextNode(newChild as unknown as string), oldChild);\n continue;\n }\n\n // eslint-disable-next-line eqeqeq\n if (oldChild.nodeValue != (newChild as unknown as string)) {\n oldChild.nodeValue = newChild as unknown as string;\n }\n continue;\n }\n\n if (\"v-keep\" in newChild.props) {\n if (oldChild.props && oldChild.props[\"v-keep\"] === newChild.props[\"v-keep\"]) {\n continue;\n }\n\n const nextOldChild = oldDomChildren[i + 1];\n if (nextOldChild && nextOldChild.props && nextOldChild.props[\"v-keep\"] === newChild.props[\"v-keep\"]) {\n oldChild.remove();\n continue;\n }\n }\n\n if (newChild.tag !== oldChild.nodeName.toLowerCase()) {\n createNewElement(newChild, newVnode, oldChild);\n continue;\n }\n\n newChild.dom = oldChild;\n updateAttributes(newChild, oldChild.props || null);\n oldChild.props = newChild.props;\n if (\"v-text\" in newChild.props) {\n // eslint-disable-next-line eqeqeq\n if (newChild.dom.textContent != newChild.props[\"v-text\"]) {\n newChild.dom.textContent = newChild.props[\"v-text\"];\n }\n continue;\n }\n patch(newChild);\n }\n\n for (let i = childrenLength, l = oldDomChildren.length; i < l; i++) {\n oldDomChildren[i]?.remove();\n }\n}\n\nexport function updateVnode(vnode: VnodeWithDom): string | void {\n callSet(onCleanupSet);\n vnode.props = vnode.props || {};\n patch(vnode);\n callSet(isMounted ? onUpdateSet : onMountSet);\n isMounted = true;\n current.vnode = null;\n current.component = null;\n}\n\nexport function update(): string {\n if (mainVnode) {\n mainVnode.children = [mainComponent];\n updateVnode(mainVnode as VnodeWithDom);\n if (isNodeJs) {\n return mainVnode.dom.innerHTML;\n }\n }\n return \"\";\n}\n\nlet debouncedUpdateTimeout: any;\n\nconst clearDebouncedUpdateMethod = isNodeJs ? clearTimeout : cancelAnimationFrame;\nconst setDebouncedUpdateMethod = isNodeJs ? () => setTimeout(update, 5) : () => requestAnimationFrame(update);\n\nexport function debouncedUpdate() {\n clearDebouncedUpdateMethod(debouncedUpdateTimeout);\n debouncedUpdateTimeout = setDebouncedUpdateMethod();\n}\n\nexport function unmount() {\n if (mainVnode) {\n mainComponent = v(() => null, {}) as VnodeComponentInterface;\n const result = update();\n callSet(onUnmountSet);\n for (const name in eventListenerNames) {\n mainVnode.dom.removeEventListener(name.slice(2).toLowerCase(), eventListener);\n Reflect.deleteProperty(eventListenerNames, name);\n }\n\n mainComponent = null;\n mainVnode = null;\n isMounted = false;\n current.vnode = null;\n current.component = null;\n current.event = null;\n return result;\n }\n\n return \"\";\n}\n\nexport function mount(dom: string | DomElement, component: ValyrianComponent | VnodeComponentInterface | any) {\n const container =\n typeof dom === \"string\" ? (isNodeJs ? createElement(dom, dom === \"svg\") : document.querySelector(dom)) : dom;\n\n if (isComponent(component)) {\n mainComponent = v(component, {}, []) as VnodeComponentInterface;\n } else if (isVnodeComponent(component)) {\n mainComponent = component;\n } else {\n mainComponent = v(() => component, {}, []) as VnodeComponentInterface;\n }\n\n mainVnode = hidrateDomToVnode(container) as VnodeWithDom;\n return update();\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["value", "directive", "children", "i"]
7
7
  }
package/dist/index.min.js CHANGED
@@ -1 +1 @@
1
- (()=>{var e=Boolean("undefined"!=typeof process&&process.versions&&process.versions.node),o=class{constructor(e,o,t,n,s){this.tag=e,this.props=o,this.children=t,this.dom=n,this.isSVG=s}},t=e=>Boolean(e&&"object"==typeof e&&"view"in e),n=e=>Boolean("function"==typeof e||t(e)),s=e=>e instanceof o,r=e=>s(e)&&n(e.tag);function i(e,t,...n){return new o(e,t,n)}function p(e){if(3===e.nodeType)return e.nodeValue;if(1===e.nodeType){const t=e.nodeName.toLowerCase(),n={},s=[];for(let o=0,t=e.childNodes.length;o<t;o++){const t=e.childNodes[o];if(3===t.nodeType)s.push(t.nodeValue);else if(1===t.nodeType){const e=p(t);s.push(e)}}const r=e.attributes;for(let e=0,o=r.length;e<o;e++){const o=r[e];n[o.nodeName]=o.nodeValue}const i=new o(t,n,s);return i.dom=e,i.isSVG="svg"===t,i}}function l(e){const o=document.createElement("div");return o.innerHTML=e.trim(),Array.from(o.childNodes).map(p)}i.fragment=(e,...o)=>o;var c=null,d=null,a=!1,u={vnode:null,component:null,event:null},f=new Set(["key","state","v-keep","v-text","v-if","v-for","v-show","v-class","v-html","v-model","v-create","v-update","v-cleanup"]),m=new Set,v=new Set,h=new Set,g=new Set,y=e=>m.add(e),x=e=>{for(const o of e)o();e.clear()},N={"v-if":(e,o)=>{if(!Boolean(e)){const e=o.dom?.parentNode;return e&&e.replaceChild(document.createTextNode(""),o.dom),!1}},"v-show":(e,o)=>{const t=Boolean(e);o.dom.style.display=t?"":"none"},"v-html":(e,o)=>{o.children=l(e)},"v-model":(e,o)=>{if("name"in o.props==!1)return;let t;const n=o.props.name;let s="oninput",r=o=>e[n]=o.target.value;if("input"===o.tag)switch(o.props.type){case"checkbox":Array.isArray(e[n])?(r=o=>{const t=o.target.value,s=e[n].indexOf(t);-1===s?e[n].push(t):e[n].splice(s,1)},t=-1!==e[n].indexOf(o.dom.value)):"value"in o.props?(r=()=>{e[n]===o.props.value?e[n]=null:e[n]=o.props.value},t=e[n]===o.props.value):(r=()=>e[n]=!e[n],t=e[n]),V("checked",t,o);break;case"radio":V("checked",e[n]===o.dom.value,o);break;default:V("value",e[n],o)}else"select"===o.tag?(s="onclick",o.props.multiple?(r=o=>{const t=o.target.value;if(o.ctrlKey){const o=e[n].indexOf(t);-1===o?e[n].push(t):e[n].splice(o,1)}else e[n].splice(0,e[n].length),e[n].push(t)},o.children.forEach(o=>{if("option"===o.tag){const t="value"in o.props?o.props.value:o.children.join("").trim();o.props.selected=-1!==e[n].indexOf(t)}})):o.children.forEach(o=>{if("option"===o.tag){const t="value"in o.props?o.props.value:o.children.join("").trim();o.props.selected=t===e[n]}})):"textarea"===o.tag&&(o.children=[e[n]]);const i=o.props[s];V(s,e=>{r(e),i&&i(e)},o)},"v-create":(e,o,t)=>{if(!t){const t=e(o);"function"==typeof t&&y(t)}},"v-update":(e,o,t)=>{if(t){const n=e(o,t);"function"==typeof n&&y(n)}},"v-cleanup":(e,o)=>{y(()=>e(o))},"v-class":(e,o)=>{if("string"==typeof e)o.dom.className=e;else if(Array.isArray(e))o.dom.className=e.join(" ");else if("object"==typeof e){const t=o.dom.classList;for(const o in e){const n="function"==typeof e[o]?e[o]():e[o];t.toggle(o,n)}}},class(e,o){o.dom.className!==e&&(o.dom.className=e)},className(e,o){N.class(e,o,null)},id:(e,o)=>{o.dom.id=e},style:(e,o)=>{if("string"==typeof e)o.dom.style=e;else if("object"==typeof e){o.dom.style="";const t=o.dom.style;for(const o in e)t[o]=e[o]}}};var C,k=new Set;function w(e){u.event=e;let o=e.target;const t=`on${e.type}`;for(;o;){const n=o.props;if(n&&n[t])return n[t](e,o),void(e.defaultPrevented||G());o=o.parentNode}u.event=null}function V(e,o,t){const n=t.dom;"function"!=typeof o?e in n?n[e]=o:!1===o?n.removeAttribute(e):n.setAttribute(e,o):k.has(e)||(d.dom.addEventListener(e.slice(2),w),k.add(e))}function b(e,o){const t=e.dom,n=e.props;if(o)for(const e in o)e in n!=!1||k.has(e)||f.has(e)||(e in t?t[e]=null:t.removeAttribute(e));for(const t in n)if(N[t]){if(!1===N[t](n[t],e,o))break}else f.has(t)||V(t,n[t],e)}function A(e,o){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function S(e){if(u.vnode=e,"v-for"in e.props){const t=[],n=e.props["v-for"],s=n.length,r=e.children[0];for(let i=0;i<s;i++){const s=r(n[i],i);s instanceof o&&(s.props=s.props||{},s.isSVG=e.isSVG||"svg"===s.tag),t[i]=s}return t}let n=0;const s=e.children;let r=s;for(;n<r.length;){const i=r[n];if(null!=i)if(Array.isArray(i))r===s&&(r=[...s]),r.splice(n,1,...i);else if(i instanceof o&&(i.props=i.props||{},i.isSVG=e.isSVG||"svg"===i.tag,"string"!=typeof i.tag)){r===s&&(r=[...s]);const e=u.component=i.tag;r[n]=(t(e)?e.view:e).bind(e)(i.props,i.children)}else n++;else r===s&&(r=[...s]),r.splice(n,1)}return r}function T(e,t,n){const s=A(e.tag,e.isSVG);if(n?t.dom.replaceChild(s,n):t.dom.appendChild(s),e.dom=s,b(e,null),e.dom.props=e.props,"v-text"in e.props)return void(e.dom.textContent=e.props["v-text"]);const r=S(e);if(0!==r.length)for(let t=0,n=r.length;t<n;t++)r[t]instanceof o!=!1?T(r[t],e,null):e.dom.appendChild(document.createTextNode(r[t]));else e.dom.textContent=""}function E(e){const t=S(e),n=e.dom;if(0===t.length)return void(n.childNodes.length&&(n.textContent=""));const s=n.childNodes,r=s.length;if(r>0){const n=s[0].props,r=t[0];if(n&&r instanceof o&&"key"in r.props&&"key"in n)return void function(e,t){const n=[...Array.from(e.dom.childNodes)],s=e.dom.childNodes,r={},i={};for(let e=0,s=n.length;e<s;e++){const s=n[e].props;s&&(r[s.key]=e),e<t.length&&t[e]instanceof o&&(i[t[e].props.key]=e)}for(let o=0,i=t.length;o<i;o++){const i=t[o],p=n[r[i.props.key]];if(!p){T(i,e,s[o]);continue}i.dom=p;const l=s[o];if(l?l!==p&&e.dom.replaceChild(p,l):e.dom.appendChild(p),"v-keep"in i.props==0||p.props["v-keep"]!==i.props["v-keep"]){if(b(i,p.props),p.props=i.props,"v-text"in i.props){p.textContent!=i.props["v-text"]&&(p.textContent=i.props["v-text"]);continue}E(i)}}for(let e=t.length,o=s.length;e<o;e++)s[e]?.remove()}(e,t)}const i=t.length;if(0!==r){for(let n=0;n<i;n++){const r=t[n],i=r instanceof o==!1,p=s[n];if(p)if(i){if(3!==p.nodeType){e.dom.replaceChild(document.createTextNode(r),p);continue}p.nodeValue!=r&&(p.nodeValue=r)}else{if("v-keep"in r.props){if(p.props&&p.props["v-keep"]===r.props["v-keep"])continue;const e=s[n+1];if(e&&e.props&&e.props["v-keep"]===r.props["v-keep"]){p.remove();continue}}r.tag===p.nodeName.toLowerCase()?(r.dom=p,b(r,p.props||null),p.props=r.props,"v-text"in r.props?r.dom.textContent!=r.props["v-text"]&&(r.dom.textContent=r.props["v-text"]):E(r)):T(r,e,p)}else{if(i){e.dom.appendChild(document.createTextNode(r));continue}T(r,e,null)}}for(let e=i,o=s.length;e<o;e++)s[e]?.remove()}else for(let s=0;s<i;s++)t[s]instanceof o!=!1?T(t[s],e,null):n.appendChild(document.createTextNode(t[s]))}function L(e){x(m),e.props=e.props||{},E(e),x(a?h:v),a=!0,u.vnode=null,u.component=null}function G(){return d&&(d.children=[c],L(d),e)?d.dom.innerHTML:""}var j=e?clearTimeout:cancelAnimationFrame,O=e?()=>setTimeout(G,5):()=>requestAnimationFrame(G);var B={Vnode:o,createElement:A,current:u,debouncedUpdate:function(){j(C),C=O()},directive:function(e,o){const t=`v-${e}`;N[t]=o,f.add(t)},directives:N,hidrateDomToVnode:p,isComponent:n,isNodeJs:e,isPOJOComponent:t,isVnode:s,isVnodeComponent:r,mount:function(o,t){const s="string"==typeof o?e?A(o,"svg"===o):document.querySelector(o):o;return c=n(t)?i(t,{},[]):r(t)?t:i(()=>t,{},[]),d=p(s),G()},onCleanup:y,onMount:e=>!a&&v.add(e),onUnmount:e=>!a&&g.add(e),onUpdate:e=>h.add(e),reservedProps:f,setAttribute:function(e,o,t){f.has(e)||(t.props[e]=o,V(e,o,t))},setPropNameReserved:function(e){f.add(e)},trust:l,unmount:function(){if(d){c=i(()=>null,{});const e=G();x(g);for(const e in k)d.dom.removeEventListener(e.slice(2).toLowerCase(),w),Reflect.deleteProperty(k,e);return c=null,d=null,a=!1,u.vnode=null,u.component=null,u.event=null,e}return""},update:G,updateAttributes:b,updateVnode:L,v:i};"undefined"!=typeof module?module.exports=B:self.Valyrian=B})();//# sourceMappingURL=index.min.js.map
1
+ (()=>{var e=Boolean("undefined"!=typeof process&&process.versions&&process.versions.node),o=class{constructor(e,o,t,n,s){this.tag=e,this.props=o,this.children=t,this.dom=n,this.isSVG=s}},t=e=>Boolean(e&&"object"==typeof e&&"view"in e),n=e=>Boolean("function"==typeof e||t(e)),s=e=>e instanceof o,r=e=>s(e)&&n(e.tag);function i(e,t,...n){return new o(e,t,n)}function p(e){if(3===e.nodeType)return e.nodeValue;if(1===e.nodeType){const t=e.nodeName.toLowerCase(),n={},s=[];for(let o=0,t=e.childNodes.length;o<t;o++){const t=e.childNodes[o];if(3===t.nodeType)s.push(t.nodeValue);else if(1===t.nodeType){const e=p(t);s.push(e)}}const r=e.attributes;for(let e=0,o=r.length;e<o;e++){const o=r[e];n[o.nodeName]=o.nodeValue}const i=new o(t,n,s);return i.dom=e,i.isSVG="svg"===t,i}}function l(e){const o=document.createElement("div");return o.innerHTML=e.trim(),Array.from(o.childNodes).map(p)}i.fragment=(e,...o)=>o;var c=null,d=null,a=!1,u={vnode:null,component:null,event:null},f=new Set(["key","state","v-keep","v-text","v-if","v-for","v-show","v-class","v-html","v-model","v-create","v-update","v-cleanup"]),m=new Set,v=new Set,h=new Set,g=new Set,y=e=>m.add(e),x=e=>{for(const o of e)o();e.clear()},N={"v-if":(e,o)=>{if(!Boolean(e)){const e=o.dom?.parentNode;return e&&e.replaceChild(document.createTextNode(""),o.dom),!1}},"v-show":(e,o)=>{const t=Boolean(e);o.dom.style.display=t?"":"none"},"v-html":(e,o)=>{o.children=l(e)},"v-model":(e,o)=>{if("name"in o.props==!1)return;let t;const n=o.props.name;let s="oninput",r=o=>e[n]=o.target.value;if("input"===o.tag)switch(o.props.type){case"checkbox":Array.isArray(e[n])?(r=o=>{const t=o.target.value,s=e[n].indexOf(t);-1===s?e[n].push(t):e[n].splice(s,1)},t=-1!==e[n].indexOf(o.dom.value)):"value"in o.props?(r=()=>{e[n]===o.props.value?e[n]=null:e[n]=o.props.value},t=e[n]===o.props.value):(r=()=>e[n]=!e[n],t=e[n]),V("checked",t,o);break;case"radio":V("checked",e[n]===o.dom.value,o);break;default:V("value",e[n],o)}else"select"===o.tag?(s="onclick",o.props.multiple?(r=o=>{const t=o.target.value;if(o.ctrlKey){const o=e[n].indexOf(t);-1===o?e[n].push(t):e[n].splice(o,1)}else e[n].splice(0,e[n].length),e[n].push(t)},o.children.forEach(o=>{if("option"===o.tag){const t="value"in o.props?o.props.value:o.children.join("").trim();o.props.selected=-1!==e[n].indexOf(t)}})):o.children.forEach(o=>{if("option"===o.tag){const t="value"in o.props?o.props.value:o.children.join("").trim();o.props.selected=t===e[n]}})):"textarea"===o.tag&&(o.children=[e[n]]);const i=o.props[s];V(s,e=>{r(e),i&&i(e)},o)},"v-create":(e,o,t)=>{if(!t){const t=e(o);"function"==typeof t&&y(t)}},"v-update":(e,o,t)=>{if(t){const n=e(o,t);"function"==typeof n&&y(n)}},"v-cleanup":(e,o)=>{y(()=>e(o))},"v-class":(e,o)=>{if("string"==typeof e)o.dom.className=e;else if(Array.isArray(e))o.dom.className=e.join(" ");else if("object"==typeof e){const t=o.dom.classList;for(const o in e){const n="function"==typeof e[o]?e[o]():e[o];t.toggle(o,n)}}},class(e,o){o.dom.className!==e&&(o.dom.className=e)},className(e,o){N.class(e,o,null)},id:(e,o)=>{o.dom.id=e},style:(e,o)=>{if("string"==typeof e)o.dom.style=e;else if("object"==typeof e){o.dom.style="";const t=o.dom.style;for(const o in e)t[o]=e[o]}}};var C,k=new Set;function w(e){u.event=e;let o=e.target;const t=`on${e.type}`;for(;o;){const n=o.props;if(n&&n[t])return n[t](e,o),void(e.defaultPrevented||L());o=o.parentNode}u.event=null}function V(e,o,t){const n=t.dom;"function"!=typeof o?t.isSVG||!(e in n)?!1===o?n.removeAttribute(e):n.setAttribute(e,o):n[e]=o:k.has(e)||(d.dom.addEventListener(e.slice(2),w),k.add(e))}function S(e,o){const t=e.dom,n=e.props;if(o)for(const s in o)s in n!=!1||k.has(s)||f.has(s)||(!e.isSVG&&s in t?t[s]=null:t.removeAttribute(s));for(const t in n)if(N[t]){if(!1===N[t](n[t],e,o))break}else f.has(t)||V(t,n[t],e)}function b(e,o){return o?document.createElementNS("http://www.w3.org/2000/svg",e):document.createElement(e)}function A(e){if(u.vnode=e,"v-for"in e.props){const t=[],n=e.props["v-for"],s=n.length,r=e.children[0];for(let i=0;i<s;i++){const s=r(n[i],i);s instanceof o&&(s.props=s.props||{},s.isSVG=e.isSVG||"svg"===s.tag),t[i]=s}return t}let n=0;const s=e.children;let r=s;for(;n<r.length;){const i=r[n];if(null!=i)if(Array.isArray(i))r===s&&(r=[...s]),r.splice(n,1,...i);else if(i instanceof o&&(i.props=i.props||{},i.isSVG=e.isSVG||"svg"===i.tag,"string"!=typeof i.tag)){r===s&&(r=[...s]);const e=u.component=i.tag;r[n]=(t(e)?e.view:e).bind(e)(i.props,i.children)}else n++;else r===s&&(r=[...s]),r.splice(n,1)}return r}function T(e,t,n){const s=b(e.tag,e.isSVG);if(n?t.dom.replaceChild(s,n):t.dom.appendChild(s),e.dom=s,S(e,null),e.dom.props=e.props,"v-text"in e.props)return void(e.dom.textContent=e.props["v-text"]);const r=A(e);if(0!==r.length)for(let t=0,n=r.length;t<n;t++)r[t]instanceof o!=!1?T(r[t],e,null):e.dom.appendChild(document.createTextNode(r[t]));else e.dom.textContent=""}function G(e){const t=A(e),n=e.dom;if(0===t.length)return void(n.childNodes.length&&(n.textContent=""));const s=n.childNodes,r=s.length;if(r>0){const n=s[0].props,r=t[0];if(n&&r instanceof o&&"key"in r.props&&"key"in n)return void function(e,t){const n=[...Array.from(e.dom.childNodes)],s=e.dom.childNodes,r={},i={};for(let e=0,s=n.length;e<s;e++){const s=n[e].props;s&&(r[s.key]=e),e<t.length&&t[e]instanceof o&&(i[t[e].props.key]=e)}for(let o=0,i=t.length;o<i;o++){const i=t[o],p=n[r[i.props.key]];if(!p){T(i,e,s[o]);continue}i.dom=p;const l=s[o];if(l?l!==p&&e.dom.replaceChild(p,l):e.dom.appendChild(p),"v-keep"in i.props==0||p.props["v-keep"]!==i.props["v-keep"]){if(S(i,p.props),p.props=i.props,"v-text"in i.props){p.textContent!=i.props["v-text"]&&(p.textContent=i.props["v-text"]);continue}G(i)}}for(let e=t.length,o=s.length;e<o;e++)s[e]?.remove()}(e,t)}const i=t.length;if(0!==r){for(let n=0;n<i;n++){const r=t[n],i=r instanceof o==!1,p=s[n];if(p)if(i){if(3!==p.nodeType){e.dom.replaceChild(document.createTextNode(r),p);continue}p.nodeValue!=r&&(p.nodeValue=r)}else{if("v-keep"in r.props){if(p.props&&p.props["v-keep"]===r.props["v-keep"])continue;const e=s[n+1];if(e&&e.props&&e.props["v-keep"]===r.props["v-keep"]){p.remove();continue}}r.tag===p.nodeName.toLowerCase()?(r.dom=p,S(r,p.props||null),p.props=r.props,"v-text"in r.props?r.dom.textContent!=r.props["v-text"]&&(r.dom.textContent=r.props["v-text"]):G(r)):T(r,e,p)}else{if(i){e.dom.appendChild(document.createTextNode(r));continue}T(r,e,null)}}for(let e=i,o=s.length;e<o;e++)s[e]?.remove()}else for(let s=0;s<i;s++)t[s]instanceof o!=!1?T(t[s],e,null):n.appendChild(document.createTextNode(t[s]))}function E(e){x(m),e.props=e.props||{},G(e),x(a?h:v),a=!0,u.vnode=null,u.component=null}function L(){return d&&(d.children=[c],E(d),e)?d.dom.innerHTML:""}var j=e?clearTimeout:cancelAnimationFrame,O=e?()=>setTimeout(L,5):()=>requestAnimationFrame(L);var B={Vnode:o,createElement:b,current:u,debouncedUpdate:function(){j(C),C=O()},directive:function(e,o){const t=`v-${e}`;N[t]=o,f.add(t)},directives:N,hidrateDomToVnode:p,isComponent:n,isNodeJs:e,isPOJOComponent:t,isVnode:s,isVnodeComponent:r,mount:function(o,t){const s="string"==typeof o?e?b(o,"svg"===o):document.querySelector(o):o;return c=n(t)?i(t,{},[]):r(t)?t:i(()=>t,{},[]),d=p(s),L()},onCleanup:y,onMount:e=>!a&&v.add(e),onUnmount:e=>!a&&g.add(e),onUpdate:e=>h.add(e),reservedProps:f,setAttribute:function(e,o,t){f.has(e)||(t.props[e]=o,V(e,o,t))},setPropNameReserved:function(e){f.add(e)},trust:l,unmount:function(){if(d){c=i(()=>null,{});const e=L();x(g);for(const e in k)d.dom.removeEventListener(e.slice(2).toLowerCase(),w),Reflect.deleteProperty(k,e);return c=null,d=null,a=!1,u.vnode=null,u.component=null,u.event=null,e}return""},update:L,updateAttributes:S,updateVnode:E,v:i};"undefined"!=typeof module?module.exports=B:self.Valyrian=B})();//# sourceMappingURL=index.min.js.map
@@ -1 +1 @@
1
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc05vZGVKcyIsIkJvb2xlYW4iLCJwcm9jZXNzIiwidmVyc2lvbnMiLCJub2RlIiwiVm5vZGUiLCJjb25zdHJ1Y3RvciIsInRhZyIsInByb3BzIiwiY2hpbGRyZW4iLCJkb20iLCJpc1NWRyIsInRoaXMiLCJpc1BPSk9Db21wb25lbnQiLCJjb21wb25lbnQiLCJpc0NvbXBvbmVudCIsImlzVm5vZGUiLCJvYmplY3QiLCJpc1Zub2RlQ29tcG9uZW50IiwidiIsInRhZ09yQ29tcG9uZW50IiwiaGlkcmF0ZURvbVRvVm5vZGUiLCJub2RlVHlwZSIsIm5vZGVWYWx1ZSIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJpIiwibCIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJjaGlsZERvbSIsInB1c2giLCJjaGlsZFZub2RlIiwiYXR0cmlidXRlcyIsImF0dHIiLCJ2bm9kZSIsInRydXN0IiwiaHRtbFN0cmluZyIsImRpdiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInRyaW0iLCJBcnJheSIsImZyb20iLCJtYXAiLCJmcmFnbWVudCIsIl8iLCJtYWluQ29tcG9uZW50IiwibWFpblZub2RlIiwiaXNNb3VudGVkIiwiY3VycmVudCIsImV2ZW50IiwicmVzZXJ2ZWRQcm9wcyIsIlNldCIsIm9uQ2xlYW51cFNldCIsIm9uTW91bnRTZXQiLCJvblVwZGF0ZVNldCIsIm9uVW5tb3VudFNldCIsIm9uQ2xlYW51cCIsImNhbGxiYWNrIiwiYWRkIiwiY2FsbFNldCIsInNldCIsImNsZWFyIiwiZGlyZWN0aXZlcyIsInZhbHVlIiwicGFyZW50Tm9kZSIsInJlcGxhY2VDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwiYm9vbCIsInN0eWxlIiwiZGlzcGxheSIsIm1vZGVsIiwicHJvcGVydHkiLCJuYW1lIiwiaGFuZGxlciIsImUiLCJ0YXJnZXQiLCJ0eXBlIiwiaXNBcnJheSIsInZhbCIsImlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJzaGFyZWRTZXRBdHRyaWJ1dGUiLCJtdWx0aXBsZSIsImN0cmxLZXkiLCJmb3JFYWNoIiwiY2hpbGQiLCJqb2luIiwic2VsZWN0ZWQiLCJwcmV2SGFuZGxlciIsIm9sZFByb3BzIiwiY2xlYW51cCIsImNsYXNzTmFtZSIsImNsYXNzTGlzdCIsInRvZ2dsZSIsImNsYXNzIiwiaWQiLCJkb21TdHlsZSIsImRlYm91bmNlZFVwZGF0ZVRpbWVvdXQiLCJldmVudExpc3RlbmVyTmFtZXMiLCJldmVudExpc3RlbmVyIiwiZGVmYXVsdFByZXZlbnRlZCIsInVwZGF0ZSIsIm5ld1Zub2RlIiwibmV3Vm5vZGVEb20iLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJoYXMiLCJhZGRFdmVudExpc3RlbmVyIiwic2xpY2UiLCJ1cGRhdGVBdHRyaWJ1dGVzIiwidm5vZGVEb20iLCJ2bm9kZVByb3BzIiwiY3JlYXRlRWxlbWVudE5TIiwiZmxhdFRyZWUiLCJuZXdDaGlsZCIsIm9yaWdpbmFsQ2hpbGRyZW4iLCJ2aWV3IiwiYmluZCIsImNyZWF0ZU5ld0VsZW1lbnQiLCJvbGRDaGlsZCIsImFwcGVuZENoaWxkIiwidGV4dENvbnRlbnQiLCJwYXRjaCIsIm9sZERvbUNoaWxkcmVuIiwib2xkQ2hpbGRyZW5MZW5ndGgiLCJmaXJzdE9sZFByb3BzIiwiZmlyc3RWbm9kZSIsIm9sZFRyZWUiLCJvbGRLZXllZExpc3QiLCJuZXdLZXllZExpc3QiLCJrZXkiLCJjdXJyZW50Q2hpbGQiLCJyZW1vdmUiLCJwYXRjaEtleWVkIiwiY2hpbGRyZW5MZW5ndGgiLCJpc1RleHQiLCJuZXh0T2xkQ2hpbGQiLCJ1cGRhdGVWbm9kZSIsImNsZWFyRGVib3VuY2VkVXBkYXRlTWV0aG9kIiwiY2xlYXJUaW1lb3V0IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJzZXREZWJvdW5jZWRVcGRhdGVNZXRob2QiLCJzZXRUaW1lb3V0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZGlyZWN0aXZlIiwiZGlyZWN0aXZlTmFtZSIsImNvbnRhaW5lciIsInF1ZXJ5U2VsZWN0b3IiLCJyZXN1bHQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiUmVmbGVjdCIsImRlbGV0ZVByb3BlcnR5Il0sInNvdXJjZXMiOlsiLi4vbGliL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIHZhciBkb2N1bWVudDogRG9jdW1lbnQ7XG4gIG5hbWVzcGFjZSBKU1gge1xuICAgIGludGVyZmFjZSBJbnRyaW5zaWNFbGVtZW50cyBleHRlbmRzIERlZmF1bHRSZWNvcmQge31cbiAgICB0eXBlIEVsZW1lbnQgPSBSZXR1cm5UeXBlPFxuICAgICAgdHlwZW9mIHYgfCAoKC4uLmFyZ3M6IGFueSkgPT4gc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCB8IGJvb2xlYW4gfCBQcm9taXNlPGFueT4pXG4gICAgPjtcbiAgICB0eXBlIENvbXBvbmVudFJldHVyblR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkIHwgYm9vbGVhbiB8IEVsZW1lbnQgfCBFbGVtZW50W107XG4gIH1cbn1cblxuaW50ZXJmYWNlIERlZmF1bHRSZWNvcmQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBhbnk+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydGllcyBleHRlbmRzIERlZmF1bHRSZWNvcmQge1xuICBrZXk/OiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9tRWxlbWVudCBleHRlbmRzIEVsZW1lbnQsIERlZmF1bHRSZWNvcmQge31cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnQgZXh0ZW5kcyBEZWZhdWx0UmVjb3JkIHtcbiAgKHByb3BzOiBQcm9wZXJ0aWVzLCBjaGlsZHJlbjogYW55W10pOiBWbm9kZSB8IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQT0pPQ29tcG9uZW50IGV4dGVuZHMgRGVmYXVsdFJlY29yZCB7XG4gIHZpZXc6IENvbXBvbmVudDtcbn1cblxuZXhwb3J0IHR5cGUgVmFseXJpYW5Db21wb25lbnQgPSBDb21wb25lbnQgfCBQT0pPQ29tcG9uZW50O1xuXG5leHBvcnQgaW50ZXJmYWNlIFZub2RlQ29tcG9uZW50SW50ZXJmYWNlIGV4dGVuZHMgVm5vZGUge1xuICB0YWc6IFZhbHlyaWFuQ29tcG9uZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoaWxkcmVuIGV4dGVuZHMgQXJyYXk8Vm5vZGUgfCBWbm9kZUNvbXBvbmVudEludGVyZmFjZSB8IFZhbHlyaWFuQ29tcG9uZW50IHwgYW55PiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdGl2ZSB7XG4gICh2YWx1ZTogYW55LCB2bm9kZTogVm5vZGVXaXRoRG9tLCBvbGRQcm9wczogUHJvcGVydGllcyB8IG51bGwpOiBmYWxzZSB8IHZvaWQgfCBhbnk7XG59XG5cbmV4cG9ydCBjb25zdCBpc05vZGVKcyA9IEJvb2xlYW4odHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpO1xuXG5leHBvcnQgY2xhc3MgVm5vZGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdGFnOiBzdHJpbmcgfCBDb21wb25lbnQgfCBQT0pPQ29tcG9uZW50LFxuICAgIHB1YmxpYyBwcm9wczogbnVsbCB8IFByb3BlcnRpZXMsXG4gICAgcHVibGljIGNoaWxkcmVuOiBDaGlsZHJlbixcbiAgICBwdWJsaWMgZG9tPzogRG9tRWxlbWVudCxcbiAgICBwdWJsaWMgaXNTVkc/OiBib29sZWFuXG4gICkge31cbn1cblxuZXhwb3J0IGludGVyZmFjZSBWbm9kZVdpdGhEb20gZXh0ZW5kcyBWbm9kZSB7XG4gIHRhZzogc3RyaW5nO1xuICBkb206IERvbUVsZW1lbnQ7XG4gIHByb3BzOiBQcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgY29uc3QgaXNQT0pPQ29tcG9uZW50ID0gKGNvbXBvbmVudDogdW5rbm93bik6IGNvbXBvbmVudCBpcyBQT0pPQ29tcG9uZW50ID0+XG4gIEJvb2xlYW4oY29tcG9uZW50ICYmIHR5cGVvZiBjb21wb25lbnQgPT09IFwib2JqZWN0XCIgJiYgXCJ2aWV3XCIgaW4gY29tcG9uZW50KTtcblxuZXhwb3J0IGNvbnN0IGlzQ29tcG9uZW50ID0gKGNvbXBvbmVudDogdW5rbm93bik6IGNvbXBvbmVudCBpcyBDb21wb25lbnQgPT5cbiAgQm9vbGVhbih0eXBlb2YgY29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIgfHwgaXNQT0pPQ29tcG9uZW50KGNvbXBvbmVudCkpO1xuZXhwb3J0IGNvbnN0IGlzVm5vZGUgPSAob2JqZWN0PzogdW5rbm93bik6IG9iamVjdCBpcyBWbm9kZSA9PiBvYmplY3QgaW5zdGFuY2VvZiBWbm9kZTtcblxuZXhwb3J0IGNvbnN0IGlzVm5vZGVDb21wb25lbnQgPSAob2JqZWN0PzogdW5rbm93bik6IG9iamVjdCBpcyBWbm9kZUNvbXBvbmVudEludGVyZmFjZSA9PiB7XG4gIHJldHVybiBpc1Zub2RlKG9iamVjdCkgJiYgaXNDb21wb25lbnQob2JqZWN0LnRhZyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdih0YWdPckNvbXBvbmVudDogc3RyaW5nIHwgVmFseXJpYW5Db21wb25lbnQsIHByb3BzOiBQcm9wZXJ0aWVzIHwgbnVsbCwgLi4uY2hpbGRyZW46IENoaWxkcmVuKSB7XG4gIHJldHVybiBuZXcgVm5vZGUodGFnT3JDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbik7XG59XG5cbnYuZnJhZ21lbnQgPSAoXzogUHJvcGVydGllcywgLi4uY2hpbGRyZW46IENoaWxkcmVuKSA9PiBjaGlsZHJlbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGhpZHJhdGVEb21Ub1Zub2RlKGRvbTogYW55KTogVm5vZGVXaXRoRG9tIHwgdm9pZCB7XG4gIGlmIChkb20ubm9kZVR5cGUgPT09IDMpIHtcbiAgICByZXR1cm4gZG9tLm5vZGVWYWx1ZTtcbiAgfVxuXG4gIGlmIChkb20ubm9kZVR5cGUgPT09IDEpIHtcbiAgICBjb25zdCB0YWcgPSBkb20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBwcm9wcyA9IHt9IGFzIFByb3BlcnRpZXM7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXSBhcyBDaGlsZHJlbjtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gZG9tLmNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZERvbSA9IGRvbS5jaGlsZE5vZGVzW2ldO1xuICAgICAgaWYgKGNoaWxkRG9tLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGREb20ubm9kZVZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGREb20ubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgY29uc3QgY2hpbGRWbm9kZSA9IGhpZHJhdGVEb21Ub1Zub2RlKGNoaWxkRG9tKTtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZFZub2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gZG9tLmF0dHJpYnV0ZXM7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgYXR0ciA9IGF0dHJpYnV0ZXNbaV07XG4gICAgICBwcm9wc1thdHRyLm5vZGVOYW1lXSA9IGF0dHIubm9kZVZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZub2RlID0gbmV3IFZub2RlKHRhZywgcHJvcHMsIGNoaWxkcmVuKTtcbiAgICB2bm9kZS5kb20gPSBkb207XG4gICAgdm5vZGUuaXNTVkcgPSB0YWcgPT09IFwic3ZnXCI7XG4gICAgcmV0dXJuIHZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ1c3QoaHRtbFN0cmluZzogc3RyaW5nKSB7XG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGRpdi5pbm5lckhUTUwgPSBodG1sU3RyaW5nLnRyaW0oKTtcbiAgcmV0dXJuIEFycmF5LmZyb20oZGl2LmNoaWxkTm9kZXMpLm1hcChoaWRyYXRlRG9tVG9Wbm9kZSk7XG59XG5cbmxldCBtYWluQ29tcG9uZW50OiBWbm9kZUNvbXBvbmVudEludGVyZmFjZSB8IG51bGwgPSBudWxsO1xubGV0IG1haW5Wbm9kZTogVm5vZGVXaXRoRG9tIHwgbnVsbCA9IG51bGw7XG5sZXQgaXNNb3VudGVkID0gZmFsc2U7XG5cbmV4cG9ydCBjb25zdCBjdXJyZW50ID0ge1xuICB2bm9kZTogbnVsbCBhcyBWbm9kZSB8IG51bGwsXG4gIGNvbXBvbmVudDogbnVsbCBhcyBWYWx5cmlhbkNvbXBvbmVudCB8IG51bGwsXG4gIGV2ZW50OiBudWxsIGFzIEV2ZW50IHwgbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IHJlc2VydmVkUHJvcHMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICBcImtleVwiLFxuICBcInN0YXRlXCIsXG4gIFwidi1rZWVwXCIsXG4gIFwidi10ZXh0XCIsXG4gIFwidi1pZlwiLFxuICBcInYtZm9yXCIsXG4gIFwidi1zaG93XCIsXG4gIFwidi1jbGFzc1wiLFxuICBcInYtaHRtbFwiLFxuICBcInYtbW9kZWxcIixcbiAgXCJ2LWNyZWF0ZVwiLFxuICBcInYtdXBkYXRlXCIsXG4gIFwidi1jbGVhbnVwXCJcbl0pO1xuXG5jb25zdCBvbkNsZWFudXBTZXQgPSBuZXcgU2V0PEZ1bmN0aW9uPigpO1xuY29uc3Qgb25Nb3VudFNldCA9IG5ldyBTZXQ8RnVuY3Rpb24+KCk7XG5jb25zdCBvblVwZGF0ZVNldCA9IG5ldyBTZXQ8RnVuY3Rpb24+KCk7XG5jb25zdCBvblVubW91bnRTZXQgPSBuZXcgU2V0PEZ1bmN0aW9uPigpO1xuZXhwb3J0IGNvbnN0IG9uTW91bnQgPSAoY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiAhaXNNb3VudGVkICYmIG9uTW91bnRTZXQuYWRkKGNhbGxiYWNrKTtcbmV4cG9ydCBjb25zdCBvblVwZGF0ZSA9IChjYWxsYmFjazogRnVuY3Rpb24pID0+IG9uVXBkYXRlU2V0LmFkZChjYWxsYmFjayk7XG5leHBvcnQgY29uc3Qgb25DbGVhbnVwID0gKGNhbGxiYWNrOiBGdW5jdGlvbikgPT4gb25DbGVhbnVwU2V0LmFkZChjYWxsYmFjayk7XG5leHBvcnQgY29uc3Qgb25Vbm1vdW50ID0gKGNhbGxiYWNrOiBGdW5jdGlvbikgPT4gIWlzTW91bnRlZCAmJiBvblVubW91bnRTZXQuYWRkKGNhbGxiYWNrKTtcbmNvbnN0IGNhbGxTZXQgPSAoc2V0OiBTZXQ8RnVuY3Rpb24+KSA9PiB7XG4gIGZvciAoY29uc3QgY2FsbGJhY2sgb2Ygc2V0KSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxuICBzZXQuY2xlYXIoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXJlY3RpdmVzOiBSZWNvcmQ8c3RyaW5nLCBEaXJlY3RpdmU+ID0ge1xuICBcInYtaWZcIjogKHZhbHVlLCB2bm9kZSkgPT4ge1xuICAgIGlmICghQm9vbGVhbih2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB2bm9kZS5kb20/LnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICBwYXJlbnROb2RlLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSwgdm5vZGUuZG9tKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcblxuICBcInYtc2hvd1wiOiAodmFsdWUsIHZub2RlKSA9PiB7XG4gICAgY29uc3QgYm9vbCA9IEJvb2xlYW4odmFsdWUpO1xuICAgIChcbiAgICAgIHZub2RlLmRvbSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgc3R5bGU6IHsgZGlzcGxheTogc3RyaW5nIH07XG4gICAgICB9XG4gICAgKS5zdHlsZS5kaXNwbGF5ID0gYm9vbCA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgfSxcblxuICBcInYtaHRtbFwiOiAodmFsdWUsIHZub2RlKSA9PiB7XG4gICAgdm5vZGUuY2hpbGRyZW4gPSB0cnVzdCh2YWx1ZSBhcyBzdHJpbmcpO1xuICB9LFxuXG4gIC8vIFRoZSBcInYtbW9kZWxcIiBkaXJlY3RpdmUgYmluZHMgdGhlIHZhbHVlIG9mIGFuIGlucHV0IGVsZW1lbnQgdG8gYSBtb2RlbCBwcm9wZXJ0eVxuICBcInYtbW9kZWxcIjogKG1vZGVsLCB2bm9kZSkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBpZiAoXCJuYW1lXCIgaW4gdm5vZGUucHJvcHMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gdm5vZGUucHJvcHMubmFtZTtcbiAgICBsZXQgZXZlbnQgPSBcIm9uaW5wdXRcIjtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgbW9kZWwgcHJvcGVydHkgd2hlbiB0aGUgaW5wdXQgZWxlbWVudCdzIHZhbHVlIGNoYW5nZXNcbiAgICBsZXQgaGFuZGxlciA9IChlOiBFdmVudCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWUpO1xuICAgIGlmICh2bm9kZS50YWcgPT09IFwiaW5wdXRcIikge1xuICAgICAgLy8gRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGlucHV0IGVsZW1lbnQsIHVzZSBhIGRpZmZlcmVudCBoYW5kbGVyIGZ1bmN0aW9uXG4gICAgICBzd2l0Y2ggKHZub2RlLnByb3BzLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNoZWNrYm94XCI6IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbFtwcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgbW9kZWwgcHJvcGVydHkgaXMgYW4gYXJyYXksIGFkZCBvciByZW1vdmUgdGhlIHZhbHVlIGZyb20gdGhlIGFycmF5IHdoZW4gdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQgb3IgdW5jaGVja2VkXG4gICAgICAgICAgICBoYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IGlkeCA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZhbCk7XG4gICAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgaW4gdGhlIGFycmF5LCBzZXQgdGhlIGNoZWNrYm94IHRvIGJlIGNoZWNrZWRcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2Yodm5vZGUuZG9tLnZhbHVlKSAhPT0gLTE7XG4gICAgICAgICAgfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gdm5vZGUucHJvcHMpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dCBlbGVtZW50IGhhcyBhIFwidmFsdWVcIiBhdHRyaWJ1dGUsIHVzZSBpdCB0byBkZXRlcm1pbmUgdGhlIGNoZWNrZWQgc3RhdGVcbiAgICAgICAgICAgIGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLnByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldID0gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0gPSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldID09PSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gXCJ2YWx1ZVwiIGF0dHJpYnV0ZSwgdXNlIGEgYm9vbGVhbiB2YWx1ZSBmb3IgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgICAgICBoYW5kbGVyID0gKCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9ICFtb2RlbFtwcm9wZXJ0eV0pO1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNldCB0aGUgXCJjaGVja2VkXCIgYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBlbGVtZW50XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCB2YWx1ZSwgdm5vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJyYWRpb1wiOiB7XG4gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSByYWRpbyBidXR0b24sIHNldCB0aGUgXCJjaGVja2VkXCIgYXR0cmlidXRlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZWwgcHJvcGVydHlcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICBzaGFyZWRTZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIG1vZGVsW3Byb3BlcnR5XSA9PT0gdm5vZGUuZG9tLnZhbHVlLCB2bm9kZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIC8vIEZvciBhbGwgb3RoZXIgaW5wdXQgdHlwZXMsIHNldCB0aGUgXCJ2YWx1ZVwiIGF0dHJpYnV0ZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKFwidmFsdWVcIiwgbW9kZWxbcHJvcGVydHldLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSBzZWxlY3QgZWxlbWVudCwgdXNlIHRoZSBcImNsaWNrXCIgZXZlbnQgYnkgZGVmYXVsdFxuICAgICAgZXZlbnQgPSBcIm9uY2xpY2tcIjtcbiAgICAgIGlmICh2bm9kZS5wcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICAvLyBJZiB0aGUgc2VsZWN0IGVsZW1lbnQgYWxsb3dzIG11bHRpcGxlIHNlbGVjdGlvbnMsIHVwZGF0ZSB0aGUgbW9kZWwgcHJvcGVydHkgd2l0aCBhbiBhcnJheSBvZiBzZWxlY3RlZCB2YWx1ZXNcbiAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSAoZS50YXJnZXQgYXMgRG9tRWxlbWVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pLnZhbHVlO1xuICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBDdHJsIGtleSBpcyBwcmVzc2VkLCBhZGQgb3IgcmVtb3ZlIHRoZSB2YWx1ZSBmcm9tIHRoZSBhcnJheVxuICAgICAgICAgICAgY29uc3QgaWR4ID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBDdHJsIGtleSBpcyBub3QgcHJlc3NlZCwgc2V0IHRoZSBtb2RlbCBwcm9wZXJ0eSB0byBhbiBhcnJheSB3aXRoIHRoZSBzZWxlY3RlZCB2YWx1ZVxuICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnNwbGljZSgwLCBtb2RlbFtwcm9wZXJ0eV0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBTZXQgdGhlIFwic2VsZWN0ZWRcIiBhdHRyaWJ1dGUgb24gdGhlIG9wdGlvbnMgYmFzZWQgb24gd2hldGhlciB0aGV5IGFyZSBpbiB0aGUgbW9kZWwgcHJvcGVydHkgYXJyYXlcbiAgICAgICAgdm5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09IFwib3B0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gXCJ2YWx1ZVwiIGluIGNoaWxkLnByb3BzID8gY2hpbGQucHJvcHMudmFsdWUgOiBjaGlsZC5jaGlsZHJlbi5qb2luKFwiXCIpLnRyaW0oKTtcbiAgICAgICAgICAgIGNoaWxkLnByb3BzLnNlbGVjdGVkID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsdWUpICE9PSAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdCBlbGVtZW50IGRvZXMgbm90IGFsbG93IG11bHRpcGxlIHNlbGVjdGlvbnMsIHNldCB0aGUgXCJzZWxlY3RlZFwiIGF0dHJpYnV0ZSBvbiB0aGUgb3B0aW9ucyBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgIHZub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IFwidmFsdWVcIiBpbiBjaGlsZC5wcm9wcyA/IGNoaWxkLnByb3BzLnZhbHVlIDogY2hpbGQuY2hpbGRyZW4uam9pbihcIlwiKS50cmltKCk7XG4gICAgICAgICAgICBjaGlsZC5wcm9wcy5zZWxlY3RlZCA9IHZhbHVlID09PSBtb2RlbFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gXCJ0ZXh0YXJlYVwiKSB7XG4gICAgICAvLyBTZXQgdGhlIHRleHRhcmVhJ3MgY29udGVudCB0byB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICB2bm9kZS5jaGlsZHJlbiA9IFttb2RlbFtwcm9wZXJ0eV1dO1xuICAgIH1cblxuICAgIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBwcmV2IGhhbmRsZXIgaWYgYW55IHdpbGwgbm90IGJlIGNoYW5nZWQgYnkgdGhlIHVzZXIgYWNyb3NzIHBhdGNoc1xuICAgIGNvbnN0IHByZXZIYW5kbGVyID0gdm5vZGUucHJvcHNbZXZlbnRdO1xuXG4gICAgLy8gU2V0IHRoZSBldmVudCBoYW5kbGVyIG9uIHRoZSBlbGVtZW50XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgc2hhcmVkU2V0QXR0cmlidXRlKFxuICAgICAgZXZlbnQsXG4gICAgICAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgaGFuZGxlcihlKTtcblxuICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgaGFuZGxlciBpcyBkZWZpbmVkLCBjYWxsIGl0IGFmdGVyIHRoZSBtb2RlbCBoYXMgYmVlbiB1cGRhdGVkXG4gICAgICAgIGlmIChwcmV2SGFuZGxlcikge1xuICAgICAgICAgIHByZXZIYW5kbGVyKGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdm5vZGVcbiAgICApO1xuICB9LFxuXG4gIFwidi1jcmVhdGVcIjogKGNhbGxiYWNrLCB2bm9kZSwgb2xkUHJvcHMpID0+IHtcbiAgICBpZiAoIW9sZFByb3BzKSB7XG4gICAgICBjb25zdCBjbGVhbnVwID0gY2FsbGJhY2sodm5vZGUpO1xuXG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsZWFudXAoY2xlYW51cCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIFwidi11cGRhdGVcIjogKGNhbGxiYWNrLCB2bm9kZSwgb2xkUHJvcHMpID0+IHtcbiAgICBpZiAob2xkUHJvcHMpIHtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSBjYWxsYmFjayh2bm9kZSwgb2xkUHJvcHMpO1xuXG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsZWFudXAoY2xlYW51cCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIFwidi1jbGVhbnVwXCI6IChjYWxsYmFjaywgdm5vZGUpID0+IHtcbiAgICBvbkNsZWFudXAoKCkgPT4gY2FsbGJhY2sodm5vZGUpKTtcbiAgfSxcblxuICBcInYtY2xhc3NcIjogKHZhbHVlLCB2bm9kZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZub2RlLmRvbS5jbGFzc05hbWUgPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2bm9kZS5kb20uY2xhc3NOYW1lID0gdmFsdWUuam9pbihcIiBcIik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZub2RlLmRvbS5jbGFzc0xpc3Q7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdmFsdWUpIHtcbiAgICAgICAgY29uc3QgdmFsID0gdHlwZW9mIHZhbHVlW25hbWVdID09PSBcImZ1bmN0aW9uXCIgPyAodmFsdWVbbmFtZV0gYXMgRnVuY3Rpb24pKCkgOiB2YWx1ZVtuYW1lXTtcbiAgICAgICAgY2xhc3NMaXN0LnRvZ2dsZShuYW1lLCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvLyBGcmVxdWVudCB1c2VkIHByb3BlcnRpZXNcbiAgY2xhc3ModmFsdWUsIHZub2RlKSB7XG4gICAgaWYgKHZub2RlLmRvbS5jbGFzc05hbWUgIT09IHZhbHVlKSB7XG4gICAgICB2bm9kZS5kb20uY2xhc3NOYW1lID0gdmFsdWU7XG4gICAgfVxuICB9LFxuXG4gIGNsYXNzTmFtZSh2YWx1ZSwgdm5vZGUpIHtcbiAgICBkaXJlY3RpdmVzLmNsYXNzKHZhbHVlLCB2bm9kZSwgbnVsbCk7XG4gIH0sXG5cbiAgaWQ6ICh2YWx1ZSwgdm5vZGUpID0+IHtcbiAgICB2bm9kZS5kb20uaWQgPSB2YWx1ZTtcbiAgfSxcblxuICBzdHlsZTogKHZhbHVlLCB2bm9kZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZub2RlLmRvbS5zdHlsZSA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB2bm9kZS5kb20uc3R5bGUgPSBcIlwiO1xuICAgICAgY29uc3QgZG9tU3R5bGUgPSB2bm9kZS5kb20uc3R5bGU7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdmFsdWUpIHtcbiAgICAgICAgZG9tU3R5bGVbbmFtZV0gPSB2YWx1ZVtuYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmU6IERpcmVjdGl2ZSkge1xuICBjb25zdCBkaXJlY3RpdmVOYW1lID0gYHYtJHtuYW1lfWA7XG4gIGRpcmVjdGl2ZXNbZGlyZWN0aXZlTmFtZV0gPSBkaXJlY3RpdmU7XG4gIHJlc2VydmVkUHJvcHMuYWRkKGRpcmVjdGl2ZU5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcE5hbWVSZXNlcnZlZChuYW1lOiBzdHJpbmcpIHtcbiAgcmVzZXJ2ZWRQcm9wcy5hZGQobmFtZSk7XG59XG5cbmNvbnN0IGV2ZW50TGlzdGVuZXJOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5mdW5jdGlvbiBldmVudExpc3RlbmVyKGU6IEV2ZW50KSB7XG4gIGN1cnJlbnQuZXZlbnQgPSBlO1xuICBsZXQgZG9tID0gZS50YXJnZXQgYXMgRG9tRWxlbWVudDtcbiAgY29uc3QgbmFtZSA9IGBvbiR7ZS50eXBlfWA7XG5cbiAgd2hpbGUgKGRvbSkge1xuICAgIGNvbnN0IG9sZFByb3BzID0gZG9tLnByb3BzO1xuICAgIGlmIChvbGRQcm9wcyAmJiBvbGRQcm9wc1tuYW1lXSkge1xuICAgICAgb2xkUHJvcHNbbmFtZV0oZSwgZG9tKTtcblxuICAgICAgaWYgKCFlLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIHVwZGF0ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkb20gPSBkb20ucGFyZW50Tm9kZSBhcyBEb21FbGVtZW50O1xuICB9XG5cbiAgY3VycmVudC5ldmVudCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHNoYXJlZFNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG5ld1Zub2RlOiBWbm9kZVdpdGhEb20pOiB2b2lkIHwgYm9vbGVhbiB7XG4gIGNvbnN0IG5ld1Zub2RlRG9tID0gbmV3Vm5vZGUuZG9tO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpZiAoIWV2ZW50TGlzdGVuZXJOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIC8vIFdlIGF0dGFjaCB0aGUgZGVsZWdhdGVkIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBtYWluIHZub2RlIGRvbSBlbGVtZW50LCB3aGljaCBpcyB0aGUgcm9vdCBvZiB0aGUgY29tcG9uZW50XG4gICAgICAobWFpblZub2RlIGFzIFZub2RlV2l0aERvbSkuZG9tLmFkZEV2ZW50TGlzdGVuZXIobmFtZS5zbGljZSgyKSwgZXZlbnRMaXN0ZW5lcik7XG4gICAgICBldmVudExpc3RlbmVyTmFtZXMuYWRkKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAobmFtZSBpbiBuZXdWbm9kZURvbSkge1xuICAgIG5ld1Zub2RlRG9tW25hbWVdID0gdmFsdWU7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSBmYWxzZSkge1xuICAgIG5ld1Zub2RlRG9tLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgfSBlbHNlIHtcbiAgICBuZXdWbm9kZURvbS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogYW55LCBuZXdWbm9kZTogVm5vZGVXaXRoRG9tKTogdm9pZCB7XG4gIGlmICghcmVzZXJ2ZWRQcm9wcy5oYXMobmFtZSkpIHtcbiAgICBuZXdWbm9kZS5wcm9wc1tuYW1lXSA9IHZhbHVlO1xuICAgIHNoYXJlZFNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSwgbmV3Vm5vZGUpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVBdHRyaWJ1dGVzKG5ld1Zub2RlOiBWbm9kZVdpdGhEb20sIG9sZFByb3BzOiBQcm9wZXJ0aWVzIHwgbnVsbCk6IHZvaWQge1xuICBjb25zdCB2bm9kZURvbSA9IG5ld1Zub2RlLmRvbTtcbiAgY29uc3Qgdm5vZGVQcm9wcyA9IG5ld1Zub2RlLnByb3BzO1xuXG4gIGlmIChvbGRQcm9wcykge1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiBvbGRQcm9wcykge1xuICAgICAgaWYgKG5hbWUgaW4gdm5vZGVQcm9wcyA9PT0gZmFsc2UgJiYgIWV2ZW50TGlzdGVuZXJOYW1lcy5oYXMobmFtZSkgJiYgIXJlc2VydmVkUHJvcHMuaGFzKG5hbWUpKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHZub2RlRG9tKSB7XG4gICAgICAgICAgdm5vZGVEb21bbmFtZV0gPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZub2RlRG9tLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3QgbmFtZSBpbiB2bm9kZVByb3BzKSB7XG4gICAgaWYgKGRpcmVjdGl2ZXNbbmFtZV0pIHtcbiAgICAgIGlmIChkaXJlY3RpdmVzW25hbWVdKHZub2RlUHJvcHNbbmFtZV0sIG5ld1Zub2RlLCBvbGRQcm9wcykgPT09IGZhbHNlKSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKCFyZXNlcnZlZFByb3BzLmhhcyhuYW1lKSkge1xuICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKG5hbWUsIHZub2RlUHJvcHNbbmFtZV0sIG5ld1Zub2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnOiBzdHJpbmcsIGlzU1ZHOiBib29sZWFuKTogRG9tRWxlbWVudCB7XG4gIHJldHVybiBpc1NWR1xuICAgID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgdGFnKVxuICAgIDogKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnKSBhcyBEb21FbGVtZW50KTtcbn1cblxuZnVuY3Rpb24gZmxhdFRyZWUobmV3Vm5vZGU6IFZub2RlV2l0aERvbSkge1xuICBjdXJyZW50LnZub2RlID0gbmV3Vm5vZGU7XG5cbiAgaWYgKFwidi1mb3JcIiBpbiBuZXdWbm9kZS5wcm9wcykge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gW107XG4gICAgY29uc3Qgc2V0ID0gbmV3Vm5vZGUucHJvcHNbXCJ2LWZvclwiXTtcbiAgICBjb25zdCBsID0gc2V0Lmxlbmd0aDtcbiAgICBjb25zdCBjYWxsYmFjayA9IG5ld1Zub2RlLmNoaWxkcmVuWzBdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsOyBpKyspIHtcbiAgICAgIGNvbnN0IG5ld0NoaWxkID0gY2FsbGJhY2soc2V0W2ldLCBpKTtcbiAgICAgIGlmIChuZXdDaGlsZCBpbnN0YW5jZW9mIFZub2RlKSB7XG4gICAgICAgIG5ld0NoaWxkLnByb3BzID0gbmV3Q2hpbGQucHJvcHMgfHwge307XG4gICAgICAgIG5ld0NoaWxkLmlzU1ZHID0gbmV3Vm5vZGUuaXNTVkcgfHwgbmV3Q2hpbGQudGFnID09PSBcInN2Z1wiO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW5baV0gPSBuZXdDaGlsZDtcbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGRyZW47XG4gIH1cblxuICBsZXQgaSA9IDA7XG4gIGNvbnN0IG9yaWdpbmFsQ2hpbGRyZW4gPSBuZXdWbm9kZS5jaGlsZHJlbjtcbiAgbGV0IGNoaWxkcmVuID0gb3JpZ2luYWxDaGlsZHJlbjtcblxuICB3aGlsZSAoaSA8IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgIGNvbnN0IG5ld0NoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICBpZiAobmV3Q2hpbGQgPT0gbnVsbCkge1xuICAgICAgaWYgKGNoaWxkcmVuID09PSBvcmlnaW5hbENoaWxkcmVuKSB7XG4gICAgICAgIGNoaWxkcmVuID0gWy4uLm9yaWdpbmFsQ2hpbGRyZW5dO1xuICAgICAgfVxuICAgICAgY2hpbGRyZW4uc3BsaWNlKGksIDEpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkobmV3Q2hpbGQpKSB7XG4gICAgICBpZiAoY2hpbGRyZW4gPT09IG9yaWdpbmFsQ2hpbGRyZW4pIHtcbiAgICAgICAgY2hpbGRyZW4gPSBbLi4ub3JpZ2luYWxDaGlsZHJlbl07XG4gICAgICB9XG4gICAgICBjaGlsZHJlbi5zcGxpY2UoaSwgMSwgLi4ubmV3Q2hpbGQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgIG5ld0NoaWxkLnByb3BzID0gbmV3Q2hpbGQucHJvcHMgfHwge307XG4gICAgICBuZXdDaGlsZC5pc1NWRyA9IG5ld1Zub2RlLmlzU1ZHIHx8IG5ld0NoaWxkLnRhZyA9PT0gXCJzdmdcIjtcblxuICAgICAgaWYgKHR5cGVvZiBuZXdDaGlsZC50YWcgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgaWYgKGNoaWxkcmVuID09PSBvcmlnaW5hbENoaWxkcmVuKSB7XG4gICAgICAgICAgY2hpbGRyZW4gPSBbLi4ub3JpZ2luYWxDaGlsZHJlbl07XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb21wb25lbnQgPSAoY3VycmVudC5jb21wb25lbnQgPSBuZXdDaGlsZC50YWcpO1xuXG4gICAgICAgIGNoaWxkcmVuW2ldID0gKGlzUE9KT0NvbXBvbmVudChjb21wb25lbnQpID8gY29tcG9uZW50LnZpZXcgOiBjb21wb25lbnQpLmJpbmQoY29tcG9uZW50KShcbiAgICAgICAgICBuZXdDaGlsZC5wcm9wcyxcbiAgICAgICAgICBuZXdDaGlsZC5jaGlsZHJlblxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGkrKztcbiAgfVxuXG4gIHJldHVybiBjaGlsZHJlbjtcbn1cblxuZnVuY3Rpb24gY3JlYXRlTmV3RWxlbWVudChuZXdDaGlsZDogVm5vZGVXaXRoRG9tLCBuZXdWbm9kZTogVm5vZGVXaXRoRG9tLCBvbGRDaGlsZDogRG9tRWxlbWVudCB8IG51bGwpIHtcbiAgY29uc3QgZG9tID0gY3JlYXRlRWxlbWVudChuZXdDaGlsZC50YWcsIG5ld0NoaWxkLmlzU1ZHIGFzIGJvb2xlYW4pO1xuICBpZiAob2xkQ2hpbGQpIHtcbiAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKGRvbSwgb2xkQ2hpbGQpO1xuICB9IGVsc2Uge1xuICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChkb20pO1xuICB9XG4gIG5ld0NoaWxkLmRvbSA9IGRvbTtcbiAgdXBkYXRlQXR0cmlidXRlcyhuZXdDaGlsZCwgbnVsbCk7XG4gIG5ld0NoaWxkLmRvbS5wcm9wcyA9IG5ld0NoaWxkLnByb3BzO1xuICBpZiAoXCJ2LXRleHRcIiBpbiBuZXdDaGlsZC5wcm9wcykge1xuICAgIG5ld0NoaWxkLmRvbS50ZXh0Q29udGVudCA9IG5ld0NoaWxkLnByb3BzW1widi10ZXh0XCJdO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGNoaWxkcmVuID0gZmxhdFRyZWUobmV3Q2hpbGQpO1xuICBpZiAoY2hpbGRyZW4ubGVuZ3RoID09PSAwKSB7XG4gICAgbmV3Q2hpbGQuZG9tLnRleHRDb250ZW50ID0gXCJcIjtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGNoaWxkcmVuLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGlmIChjaGlsZHJlbltpXSBpbnN0YW5jZW9mIFZub2RlID09PSBmYWxzZSkge1xuICAgICAgbmV3Q2hpbGQuZG9tLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNoaWxkcmVuW2ldKSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY3JlYXRlTmV3RWxlbWVudChjaGlsZHJlbltpXSwgbmV3Q2hpbGQsIG51bGwpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHBhdGNoS2V5ZWQobmV3Vm5vZGU6IFZub2RlV2l0aERvbSwgY2hpbGRyZW46IENoaWxkcmVuKSB7XG4gIGNvbnN0IG9sZFRyZWUgPSBbLi4uQXJyYXkuZnJvbShuZXdWbm9kZS5kb20uY2hpbGROb2RlcyldIGFzIHVua25vd24gYXMgRG9tRWxlbWVudFtdO1xuICBjb25zdCBjaGlsZE5vZGVzID0gbmV3Vm5vZGUuZG9tLmNoaWxkTm9kZXM7XG4gIGNvbnN0IG9sZEtleWVkTGlzdDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICBjb25zdCBuZXdLZXllZExpc3Q6IFJlY29yZDxzdHJpbmcsIG51bWJlcj4gPSB7fTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IG9sZFRyZWUubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3Qgb2xkUHJvcHMgPSBvbGRUcmVlW2ldLnByb3BzO1xuICAgIGlmIChvbGRQcm9wcykge1xuICAgICAgb2xkS2V5ZWRMaXN0W29sZFByb3BzLmtleSBhcyBzdHJpbmddID0gaTtcbiAgICB9XG5cbiAgICBpZiAoaSA8IGNoaWxkcmVuLmxlbmd0aCAmJiBjaGlsZHJlbltpXSBpbnN0YW5jZW9mIFZub2RlKSB7XG4gICAgICBuZXdLZXllZExpc3RbY2hpbGRyZW5baV0ucHJvcHMua2V5IGFzIHN0cmluZ10gPSBpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY29uc3QgbmV3Q2hpbGQgPSBjaGlsZHJlbltpXTtcbiAgICBjb25zdCBvbGRDaGlsZCA9IG9sZFRyZWVbb2xkS2V5ZWRMaXN0W25ld0NoaWxkLnByb3BzLmtleSBhcyBzdHJpbmddXTtcblxuICAgIGlmICghb2xkQ2hpbGQpIHtcbiAgICAgIGNyZWF0ZU5ld0VsZW1lbnQobmV3Q2hpbGQsIG5ld1Zub2RlLCBjaGlsZE5vZGVzW2ldIGFzIERvbUVsZW1lbnQgfCBudWxsKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG5ld0NoaWxkLmRvbSA9IG9sZENoaWxkO1xuICAgIGNvbnN0IGN1cnJlbnRDaGlsZCA9IGNoaWxkTm9kZXNbaV07XG4gICAgaWYgKCFjdXJyZW50Q2hpbGQpIHtcbiAgICAgIG5ld1Zub2RlLmRvbS5hcHBlbmRDaGlsZChvbGRDaGlsZCk7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50Q2hpbGQgIT09IG9sZENoaWxkKSB7XG4gICAgICBuZXdWbm9kZS5kb20ucmVwbGFjZUNoaWxkKG9sZENoaWxkLCBjdXJyZW50Q2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChcInYta2VlcFwiIGluIG5ld0NoaWxkLnByb3BzID09PSBmYWxzZSB8fCBvbGRDaGlsZC5wcm9wc1tcInYta2VlcFwiXSAhPT0gbmV3Q2hpbGQucHJvcHNbXCJ2LWtlZXBcIl0pIHtcbiAgICAgIHVwZGF0ZUF0dHJpYnV0ZXMobmV3Q2hpbGQgYXMgVm5vZGVXaXRoRG9tLCBvbGRDaGlsZC5wcm9wcyk7XG4gICAgICBvbGRDaGlsZC5wcm9wcyA9IG5ld0NoaWxkLnByb3BzO1xuXG4gICAgICBpZiAoXCJ2LXRleHRcIiBpbiBuZXdDaGlsZC5wcm9wcykge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICAgIGlmIChvbGRDaGlsZC50ZXh0Q29udGVudCAhPSBuZXdDaGlsZC5wcm9wc1tcInYtdGV4dFwiXSkge1xuICAgICAgICAgIG9sZENoaWxkLnRleHRDb250ZW50ID0gbmV3Q2hpbGQucHJvcHNbXCJ2LXRleHRcIl07XG4gICAgICAgIH1cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgIHBhdGNoKG5ld0NoaWxkIGFzIFZub2RlV2l0aERvbSk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IGNoaWxkcmVuLmxlbmd0aCwgbCA9IGNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgY2hpbGROb2Rlc1tpXT8ucmVtb3ZlKCk7XG4gIH1cbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbmZ1bmN0aW9uIHBhdGNoKG5ld1Zub2RlOiBWbm9kZVdpdGhEb20pOiB2b2lkIHtcbiAgY29uc3QgY2hpbGRyZW4gPSBmbGF0VHJlZShuZXdWbm9kZSk7XG5cbiAgY29uc3QgZG9tID0gbmV3Vm5vZGUuZG9tO1xuXG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICBpZiAoZG9tLmNoaWxkTm9kZXMubGVuZ3RoKSB7XG4gICAgICBkb20udGV4dENvbnRlbnQgPSBcIlwiO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvbGREb21DaGlsZHJlbiA9IGRvbS5jaGlsZE5vZGVzIGFzIHVua25vd24gYXMgRG9tRWxlbWVudFtdO1xuICBjb25zdCBvbGRDaGlsZHJlbkxlbmd0aCA9IG9sZERvbUNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKG9sZENoaWxkcmVuTGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGZpcnN0T2xkUHJvcHMgPSBvbGREb21DaGlsZHJlblswXS5wcm9wcztcbiAgICBjb25zdCBmaXJzdFZub2RlID0gY2hpbGRyZW5bMF0gYXMgVm5vZGVXaXRoRG9tO1xuICAgIGlmIChmaXJzdE9sZFByb3BzICYmIGZpcnN0Vm5vZGUgaW5zdGFuY2VvZiBWbm9kZSAmJiBcImtleVwiIGluIGZpcnN0Vm5vZGUucHJvcHMgJiYgXCJrZXlcIiBpbiBmaXJzdE9sZFByb3BzKSB7XG4gICAgICBwYXRjaEtleWVkKG5ld1Zub2RlLCBjaGlsZHJlbik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgY29uc3QgY2hpbGRyZW5MZW5ndGggPSBjaGlsZHJlbi5sZW5ndGg7XG4gIGlmIChvbGRDaGlsZHJlbkxlbmd0aCA9PT0gMCkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW5MZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGNoaWxkcmVuW2ldIGluc3RhbmNlb2YgVm5vZGUgPT09IGZhbHNlKSB7XG4gICAgICAgIGRvbS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjaGlsZHJlbltpXSkpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGNyZWF0ZU5ld0VsZW1lbnQoY2hpbGRyZW5baV0sIG5ld1Zub2RlLCBudWxsKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgbmV3Q2hpbGQgPSBjaGlsZHJlbltpXSBhcyBWbm9kZVdpdGhEb207XG4gICAgY29uc3QgaXNUZXh0ID0gbmV3Q2hpbGQgaW5zdGFuY2VvZiBWbm9kZSA9PT0gZmFsc2U7XG4gICAgY29uc3Qgb2xkQ2hpbGQgPSBvbGREb21DaGlsZHJlbltpXTtcblxuICAgIGlmICghb2xkQ2hpbGQpIHtcbiAgICAgIGlmIChpc1RleHQpIHtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG5ld0NoaWxkIGFzIHVua25vd24gYXMgc3RyaW5nKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjcmVhdGVOZXdFbGVtZW50KG5ld0NoaWxkIGFzIFZub2RlV2l0aERvbSwgbmV3Vm5vZGUsIG51bGwpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGlzVGV4dCkge1xuICAgICAgaWYgKG9sZENoaWxkLm5vZGVUeXBlICE9PSAzKSB7XG4gICAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3Q2hpbGQgYXMgdW5rbm93biBhcyBzdHJpbmcpLCBvbGRDaGlsZCk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG4gICAgICBpZiAob2xkQ2hpbGQubm9kZVZhbHVlICE9IChuZXdDaGlsZCBhcyB1bmtub3duIGFzIHN0cmluZykpIHtcbiAgICAgICAgb2xkQ2hpbGQubm9kZVZhbHVlID0gbmV3Q2hpbGQgYXMgdW5rbm93biBhcyBzdHJpbmc7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoXCJ2LWtlZXBcIiBpbiBuZXdDaGlsZC5wcm9wcykge1xuICAgICAgaWYgKG9sZENoaWxkLnByb3BzICYmIG9sZENoaWxkLnByb3BzW1widi1rZWVwXCJdID09PSBuZXdDaGlsZC5wcm9wc1tcInYta2VlcFwiXSkge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgbmV4dE9sZENoaWxkID0gb2xkRG9tQ2hpbGRyZW5baSArIDFdO1xuICAgICAgaWYgKG5leHRPbGRDaGlsZCAmJiBuZXh0T2xkQ2hpbGQucHJvcHMgJiYgbmV4dE9sZENoaWxkLnByb3BzW1widi1rZWVwXCJdID09PSBuZXdDaGlsZC5wcm9wc1tcInYta2VlcFwiXSkge1xuICAgICAgICBvbGRDaGlsZC5yZW1vdmUoKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG5ld0NoaWxkLnRhZyAhPT0gb2xkQ2hpbGQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgY3JlYXRlTmV3RWxlbWVudChuZXdDaGlsZCwgbmV3Vm5vZGUsIG9sZENoaWxkKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIG5ld0NoaWxkLmRvbSA9IG9sZENoaWxkO1xuICAgIHVwZGF0ZUF0dHJpYnV0ZXMobmV3Q2hpbGQsIG9sZENoaWxkLnByb3BzIHx8IG51bGwpO1xuICAgIG9sZENoaWxkLnByb3BzID0gbmV3Q2hpbGQucHJvcHM7XG4gICAgaWYgKFwidi10ZXh0XCIgaW4gbmV3Q2hpbGQucHJvcHMpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgIGlmIChuZXdDaGlsZC5kb20udGV4dENvbnRlbnQgIT0gbmV3Q2hpbGQucHJvcHNbXCJ2LXRleHRcIl0pIHtcbiAgICAgICAgbmV3Q2hpbGQuZG9tLnRleHRDb250ZW50ID0gbmV3Q2hpbGQucHJvcHNbXCJ2LXRleHRcIl07XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgcGF0Y2gobmV3Q2hpbGQpO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IGNoaWxkcmVuTGVuZ3RoLCBsID0gb2xkRG9tQ2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgb2xkRG9tQ2hpbGRyZW5baV0/LnJlbW92ZSgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVWbm9kZSh2bm9kZTogVm5vZGVXaXRoRG9tKTogc3RyaW5nIHwgdm9pZCB7XG4gIGNhbGxTZXQob25DbGVhbnVwU2V0KTtcbiAgdm5vZGUucHJvcHMgPSB2bm9kZS5wcm9wcyB8fCB7fTtcbiAgcGF0Y2godm5vZGUpO1xuICBjYWxsU2V0KGlzTW91bnRlZCA/IG9uVXBkYXRlU2V0IDogb25Nb3VudFNldCk7XG4gIGlzTW91bnRlZCA9IHRydWU7XG4gIGN1cnJlbnQudm5vZGUgPSBudWxsO1xuICBjdXJyZW50LmNvbXBvbmVudCA9IG51bGw7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGUoKTogc3RyaW5nIHtcbiAgaWYgKG1haW5Wbm9kZSkge1xuICAgIG1haW5Wbm9kZS5jaGlsZHJlbiA9IFttYWluQ29tcG9uZW50XTtcbiAgICB1cGRhdGVWbm9kZShtYWluVm5vZGUgYXMgVm5vZGVXaXRoRG9tKTtcbiAgICBpZiAoaXNOb2RlSnMpIHtcbiAgICAgIHJldHVybiBtYWluVm5vZGUuZG9tLmlubmVySFRNTDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIFwiXCI7XG59XG5cbmxldCBkZWJvdW5jZWRVcGRhdGVUaW1lb3V0OiBhbnk7XG5cbmNvbnN0IGNsZWFyRGVib3VuY2VkVXBkYXRlTWV0aG9kID0gaXNOb2RlSnMgPyBjbGVhclRpbWVvdXQgOiBjYW5jZWxBbmltYXRpb25GcmFtZTtcbmNvbnN0IHNldERlYm91bmNlZFVwZGF0ZU1ldGhvZCA9IGlzTm9kZUpzID8gKCkgPT4gc2V0VGltZW91dCh1cGRhdGUsIDUpIDogKCkgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHVwZGF0ZSk7XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZWRVcGRhdGUoKSB7XG4gIGNsZWFyRGVib3VuY2VkVXBkYXRlTWV0aG9kKGRlYm91bmNlZFVwZGF0ZVRpbWVvdXQpO1xuICBkZWJvdW5jZWRVcGRhdGVUaW1lb3V0ID0gc2V0RGVib3VuY2VkVXBkYXRlTWV0aG9kKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bm1vdW50KCkge1xuICBpZiAobWFpblZub2RlKSB7XG4gICAgbWFpbkNvbXBvbmVudCA9IHYoKCkgPT4gbnVsbCwge30pIGFzIFZub2RlQ29tcG9uZW50SW50ZXJmYWNlO1xuICAgIGNvbnN0IHJlc3VsdCA9IHVwZGF0ZSgpO1xuICAgIGNhbGxTZXQob25Vbm1vdW50U2V0KTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gZXZlbnRMaXN0ZW5lck5hbWVzKSB7XG4gICAgICBtYWluVm5vZGUuZG9tLnJlbW92ZUV2ZW50TGlzdGVuZXIobmFtZS5zbGljZSgyKS50b0xvd2VyQ2FzZSgpLCBldmVudExpc3RlbmVyKTtcbiAgICAgIFJlZmxlY3QuZGVsZXRlUHJvcGVydHkoZXZlbnRMaXN0ZW5lck5hbWVzLCBuYW1lKTtcbiAgICB9XG5cbiAgICBtYWluQ29tcG9uZW50ID0gbnVsbDtcbiAgICBtYWluVm5vZGUgPSBudWxsO1xuICAgIGlzTW91bnRlZCA9IGZhbHNlO1xuICAgIGN1cnJlbnQudm5vZGUgPSBudWxsO1xuICAgIGN1cnJlbnQuY29tcG9uZW50ID0gbnVsbDtcbiAgICBjdXJyZW50LmV2ZW50ID0gbnVsbDtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIFwiXCI7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtb3VudChkb206IHN0cmluZyB8IERvbUVsZW1lbnQsIGNvbXBvbmVudDogVmFseXJpYW5Db21wb25lbnQgfCBWbm9kZUNvbXBvbmVudEludGVyZmFjZSB8IGFueSkge1xuICBjb25zdCBjb250YWluZXIgPVxuICAgIHR5cGVvZiBkb20gPT09IFwic3RyaW5nXCIgPyAoaXNOb2RlSnMgPyBjcmVhdGVFbGVtZW50KGRvbSwgZG9tID09PSBcInN2Z1wiKSA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZG9tKSkgOiBkb207XG5cbiAgaWYgKGlzQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcbiAgICBtYWluQ29tcG9uZW50ID0gdihjb21wb25lbnQsIHt9LCBbXSkgYXMgVm5vZGVDb21wb25lbnRJbnRlcmZhY2U7XG4gIH0gZWxzZSBpZiAoaXNWbm9kZUNvbXBvbmVudChjb21wb25lbnQpKSB7XG4gICAgbWFpbkNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgfSBlbHNlIHtcbiAgICBtYWluQ29tcG9uZW50ID0gdigoKSA9PiBjb21wb25lbnQsIHt9LCBbXSkgYXMgVm5vZGVDb21wb25lbnRJbnRlcmZhY2U7XG4gIH1cblxuICBtYWluVm5vZGUgPSBoaWRyYXRlRG9tVG9Wbm9kZShjb250YWluZXIpIGFzIFZub2RlV2l0aERvbTtcbiAgcmV0dXJuIHVwZGF0ZSgpO1xufVxuIl0sIm1hcHBpbmdzIjoiTUF3Q08sSUFBTUEsRUFBV0MsUUFBMkIsb0JBQVpDLFNBQTJCQSxRQUFRQyxVQUFZRCxRQUFRQyxTQUFTQyxNQUUxRkMsRUFBTixNQUNMLFdBQUFDLENBQ1NDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEVBQ0FDLEdBSkFDLEtBQUFMLE1BQ0FLLEtBQUFKLFFBQ0FJLEtBQUFILFdBQ0FHLEtBQUFGLE1BQ0FFLEtBQUFELE9BQ04sR0FTUUUsRUFBbUJDLEdBQzlCYixRQUFRYSxHQUFrQyxpQkFBZEEsR0FBMEIsU0FBVUEsR0FFckRDLEVBQWVELEdBQzFCYixRQUE2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
1
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJpc05vZGVKcyIsIkJvb2xlYW4iLCJwcm9jZXNzIiwidmVyc2lvbnMiLCJub2RlIiwiVm5vZGUiLCJjb25zdHJ1Y3RvciIsInRhZyIsInByb3BzIiwiY2hpbGRyZW4iLCJkb20iLCJpc1NWRyIsInRoaXMiLCJpc1BPSk9Db21wb25lbnQiLCJjb21wb25lbnQiLCJpc0NvbXBvbmVudCIsImlzVm5vZGUiLCJvYmplY3QiLCJpc1Zub2RlQ29tcG9uZW50IiwidiIsInRhZ09yQ29tcG9uZW50IiwiaGlkcmF0ZURvbVRvVm5vZGUiLCJub2RlVHlwZSIsIm5vZGVWYWx1ZSIsIm5vZGVOYW1lIiwidG9Mb3dlckNhc2UiLCJpIiwibCIsImNoaWxkTm9kZXMiLCJsZW5ndGgiLCJjaGlsZERvbSIsInB1c2giLCJjaGlsZFZub2RlIiwiYXR0cmlidXRlcyIsImF0dHIiLCJ2bm9kZSIsInRydXN0IiwiaHRtbFN0cmluZyIsImRpdiIsImRvY3VtZW50IiwiY3JlYXRlRWxlbWVudCIsImlubmVySFRNTCIsInRyaW0iLCJBcnJheSIsImZyb20iLCJtYXAiLCJmcmFnbWVudCIsIl8iLCJtYWluQ29tcG9uZW50IiwibWFpblZub2RlIiwiaXNNb3VudGVkIiwiY3VycmVudCIsImV2ZW50IiwicmVzZXJ2ZWRQcm9wcyIsIlNldCIsIm9uQ2xlYW51cFNldCIsIm9uTW91bnRTZXQiLCJvblVwZGF0ZVNldCIsIm9uVW5tb3VudFNldCIsIm9uQ2xlYW51cCIsImNhbGxiYWNrIiwiYWRkIiwiY2FsbFNldCIsInNldCIsImNsZWFyIiwiZGlyZWN0aXZlcyIsInZhbHVlIiwicGFyZW50Tm9kZSIsInJlcGxhY2VDaGlsZCIsImNyZWF0ZVRleHROb2RlIiwiYm9vbCIsInN0eWxlIiwiZGlzcGxheSIsIm1vZGVsIiwicHJvcGVydHkiLCJuYW1lIiwiaGFuZGxlciIsImUiLCJ0YXJnZXQiLCJ0eXBlIiwiaXNBcnJheSIsInZhbCIsImlkeCIsImluZGV4T2YiLCJzcGxpY2UiLCJzaGFyZWRTZXRBdHRyaWJ1dGUiLCJtdWx0aXBsZSIsImN0cmxLZXkiLCJmb3JFYWNoIiwiY2hpbGQiLCJqb2luIiwic2VsZWN0ZWQiLCJwcmV2SGFuZGxlciIsIm9sZFByb3BzIiwiY2xlYW51cCIsImNsYXNzTmFtZSIsImNsYXNzTGlzdCIsInRvZ2dsZSIsImNsYXNzIiwiaWQiLCJkb21TdHlsZSIsImRlYm91bmNlZFVwZGF0ZVRpbWVvdXQiLCJldmVudExpc3RlbmVyTmFtZXMiLCJldmVudExpc3RlbmVyIiwiZGVmYXVsdFByZXZlbnRlZCIsInVwZGF0ZSIsIm5ld1Zub2RlIiwibmV3Vm5vZGVEb20iLCJyZW1vdmVBdHRyaWJ1dGUiLCJzZXRBdHRyaWJ1dGUiLCJoYXMiLCJhZGRFdmVudExpc3RlbmVyIiwic2xpY2UiLCJ1cGRhdGVBdHRyaWJ1dGVzIiwidm5vZGVEb20iLCJ2bm9kZVByb3BzIiwiY3JlYXRlRWxlbWVudE5TIiwiZmxhdFRyZWUiLCJuZXdDaGlsZCIsIm9yaWdpbmFsQ2hpbGRyZW4iLCJ2aWV3IiwiYmluZCIsImNyZWF0ZU5ld0VsZW1lbnQiLCJvbGRDaGlsZCIsImFwcGVuZENoaWxkIiwidGV4dENvbnRlbnQiLCJwYXRjaCIsIm9sZERvbUNoaWxkcmVuIiwib2xkQ2hpbGRyZW5MZW5ndGgiLCJmaXJzdE9sZFByb3BzIiwiZmlyc3RWbm9kZSIsIm9sZFRyZWUiLCJvbGRLZXllZExpc3QiLCJuZXdLZXllZExpc3QiLCJrZXkiLCJjdXJyZW50Q2hpbGQiLCJyZW1vdmUiLCJwYXRjaEtleWVkIiwiY2hpbGRyZW5MZW5ndGgiLCJpc1RleHQiLCJuZXh0T2xkQ2hpbGQiLCJ1cGRhdGVWbm9kZSIsImNsZWFyRGVib3VuY2VkVXBkYXRlTWV0aG9kIiwiY2xlYXJUaW1lb3V0IiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJzZXREZWJvdW5jZWRVcGRhdGVNZXRob2QiLCJzZXRUaW1lb3V0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZGlyZWN0aXZlIiwiZGlyZWN0aXZlTmFtZSIsImNvbnRhaW5lciIsInF1ZXJ5U2VsZWN0b3IiLCJyZXN1bHQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiUmVmbGVjdCIsImRlbGV0ZVByb3BlcnR5Il0sInNvdXJjZXMiOlsiLi4vbGliL2luZGV4LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlICovXG5kZWNsYXJlIGdsb2JhbCB7XG4gIHZhciBkb2N1bWVudDogRG9jdW1lbnQ7XG4gIG5hbWVzcGFjZSBKU1gge1xuICAgIGludGVyZmFjZSBJbnRyaW5zaWNFbGVtZW50cyBleHRlbmRzIERlZmF1bHRSZWNvcmQge31cbiAgICB0eXBlIEVsZW1lbnQgPSBSZXR1cm5UeXBlPFxuICAgICAgdHlwZW9mIHYgfCAoKC4uLmFyZ3M6IGFueSkgPT4gc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCB8IGJvb2xlYW4gfCBQcm9taXNlPGFueT4pXG4gICAgPjtcbiAgICB0eXBlIENvbXBvbmVudFJldHVyblR5cGUgPSBzdHJpbmcgfCBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkIHwgYm9vbGVhbiB8IEVsZW1lbnQgfCBFbGVtZW50W107XG4gIH1cbn1cblxuaW50ZXJmYWNlIERlZmF1bHRSZWNvcmQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nIHwgbnVtYmVyIHwgc3ltYm9sLCBhbnk+IHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvcGVydGllcyBleHRlbmRzIERlZmF1bHRSZWNvcmQge1xuICBrZXk/OiBzdHJpbmcgfCBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRG9tRWxlbWVudCBleHRlbmRzIEVsZW1lbnQsIERlZmF1bHRSZWNvcmQge31cblxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnQgZXh0ZW5kcyBEZWZhdWx0UmVjb3JkIHtcbiAgKHByb3BzOiBQcm9wZXJ0aWVzLCBjaGlsZHJlbjogYW55W10pOiBWbm9kZSB8IGFueTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQT0pPQ29tcG9uZW50IGV4dGVuZHMgRGVmYXVsdFJlY29yZCB7XG4gIHZpZXc6IENvbXBvbmVudDtcbn1cblxuZXhwb3J0IHR5cGUgVmFseXJpYW5Db21wb25lbnQgPSBDb21wb25lbnQgfCBQT0pPQ29tcG9uZW50O1xuXG5leHBvcnQgaW50ZXJmYWNlIFZub2RlQ29tcG9uZW50SW50ZXJmYWNlIGV4dGVuZHMgVm5vZGUge1xuICB0YWc6IFZhbHlyaWFuQ29tcG9uZW50O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoaWxkcmVuIGV4dGVuZHMgQXJyYXk8Vm5vZGUgfCBWbm9kZUNvbXBvbmVudEludGVyZmFjZSB8IFZhbHlyaWFuQ29tcG9uZW50IHwgYW55PiB7fVxuXG5leHBvcnQgaW50ZXJmYWNlIERpcmVjdGl2ZSB7XG4gICh2YWx1ZTogYW55LCB2bm9kZTogVm5vZGVXaXRoRG9tLCBvbGRQcm9wczogUHJvcGVydGllcyB8IG51bGwpOiBmYWxzZSB8IHZvaWQgfCBhbnk7XG59XG5cbmV4cG9ydCBjb25zdCBpc05vZGVKcyA9IEJvb2xlYW4odHlwZW9mIHByb2Nlc3MgIT09IFwidW5kZWZpbmVkXCIgJiYgcHJvY2Vzcy52ZXJzaW9ucyAmJiBwcm9jZXNzLnZlcnNpb25zLm5vZGUpO1xuXG5leHBvcnQgY2xhc3MgVm5vZGUge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdGFnOiBzdHJpbmcgfCBDb21wb25lbnQgfCBQT0pPQ29tcG9uZW50LFxuICAgIHB1YmxpYyBwcm9wczogbnVsbCB8IFByb3BlcnRpZXMsXG4gICAgcHVibGljIGNoaWxkcmVuOiBDaGlsZHJlbixcbiAgICBwdWJsaWMgZG9tPzogRG9tRWxlbWVudCxcbiAgICBwdWJsaWMgaXNTVkc/OiBib29sZWFuXG4gICkge31cbn1cblxuZXhwb3J0IGludGVyZmFjZSBWbm9kZVdpdGhEb20gZXh0ZW5kcyBWbm9kZSB7XG4gIHRhZzogc3RyaW5nO1xuICBkb206IERvbUVsZW1lbnQ7XG4gIHByb3BzOiBQcm9wZXJ0aWVzO1xufVxuXG5leHBvcnQgY29uc3QgaXNQT0pPQ29tcG9uZW50ID0gKGNvbXBvbmVudDogdW5rbm93bik6IGNvbXBvbmVudCBpcyBQT0pPQ29tcG9uZW50ID0+XG4gIEJvb2xlYW4oY29tcG9uZW50ICYmIHR5cGVvZiBjb21wb25lbnQgPT09IFwib2JqZWN0XCIgJiYgXCJ2aWV3XCIgaW4gY29tcG9uZW50KTtcblxuZXhwb3J0IGNvbnN0IGlzQ29tcG9uZW50ID0gKGNvbXBvbmVudDogdW5rbm93bik6IGNvbXBvbmVudCBpcyBDb21wb25lbnQgPT5cbiAgQm9vbGVhbih0eXBlb2YgY29tcG9uZW50ID09PSBcImZ1bmN0aW9uXCIgfHwgaXNQT0pPQ29tcG9uZW50KGNvbXBvbmVudCkpO1xuZXhwb3J0IGNvbnN0IGlzVm5vZGUgPSAob2JqZWN0PzogdW5rbm93bik6IG9iamVjdCBpcyBWbm9kZSA9PiBvYmplY3QgaW5zdGFuY2VvZiBWbm9kZTtcblxuZXhwb3J0IGNvbnN0IGlzVm5vZGVDb21wb25lbnQgPSAob2JqZWN0PzogdW5rbm93bik6IG9iamVjdCBpcyBWbm9kZUNvbXBvbmVudEludGVyZmFjZSA9PiB7XG4gIHJldHVybiBpc1Zub2RlKG9iamVjdCkgJiYgaXNDb21wb25lbnQob2JqZWN0LnRhZyk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdih0YWdPckNvbXBvbmVudDogc3RyaW5nIHwgVmFseXJpYW5Db21wb25lbnQsIHByb3BzOiBQcm9wZXJ0aWVzIHwgbnVsbCwgLi4uY2hpbGRyZW46IENoaWxkcmVuKSB7XG4gIHJldHVybiBuZXcgVm5vZGUodGFnT3JDb21wb25lbnQsIHByb3BzLCBjaGlsZHJlbik7XG59XG5cbnYuZnJhZ21lbnQgPSAoXzogUHJvcGVydGllcywgLi4uY2hpbGRyZW46IENoaWxkcmVuKSA9PiBjaGlsZHJlbjtcblxuZXhwb3J0IGZ1bmN0aW9uIGhpZHJhdGVEb21Ub1Zub2RlKGRvbTogYW55KTogVm5vZGVXaXRoRG9tIHwgdm9pZCB7XG4gIGlmIChkb20ubm9kZVR5cGUgPT09IDMpIHtcbiAgICByZXR1cm4gZG9tLm5vZGVWYWx1ZTtcbiAgfVxuXG4gIGlmIChkb20ubm9kZVR5cGUgPT09IDEpIHtcbiAgICBjb25zdCB0YWcgPSBkb20ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcbiAgICBjb25zdCBwcm9wcyA9IHt9IGFzIFByb3BlcnRpZXM7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXSBhcyBDaGlsZHJlbjtcblxuICAgIGZvciAobGV0IGkgPSAwLCBsID0gZG9tLmNoaWxkTm9kZXMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBjb25zdCBjaGlsZERvbSA9IGRvbS5jaGlsZE5vZGVzW2ldO1xuICAgICAgaWYgKGNoaWxkRG9tLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgIGNoaWxkcmVuLnB1c2goY2hpbGREb20ubm9kZVZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoY2hpbGREb20ubm9kZVR5cGUgPT09IDEpIHtcbiAgICAgICAgY29uc3QgY2hpbGRWbm9kZSA9IGhpZHJhdGVEb21Ub1Zub2RlKGNoaWxkRG9tKTtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChjaGlsZFZub2RlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0gZG9tLmF0dHJpYnV0ZXM7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBhdHRyaWJ1dGVzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgYXR0ciA9IGF0dHJpYnV0ZXNbaV07XG4gICAgICBwcm9wc1thdHRyLm5vZGVOYW1lXSA9IGF0dHIubm9kZVZhbHVlO1xuICAgIH1cblxuICAgIGNvbnN0IHZub2RlID0gbmV3IFZub2RlKHRhZywgcHJvcHMsIGNoaWxkcmVuKTtcbiAgICB2bm9kZS5kb20gPSBkb207XG4gICAgdm5vZGUuaXNTVkcgPSB0YWcgPT09IFwic3ZnXCI7XG4gICAgcmV0dXJuIHZub2RlIGFzIFZub2RlV2l0aERvbTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdHJ1c3QoaHRtbFN0cmluZzogc3RyaW5nKSB7XG4gIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGRpdi5pbm5lckhUTUwgPSBodG1sU3RyaW5nLnRyaW0oKTtcbiAgcmV0dXJuIEFycmF5LmZyb20oZGl2LmNoaWxkTm9kZXMpLm1hcChoaWRyYXRlRG9tVG9Wbm9kZSk7XG59XG5cbmxldCBtYWluQ29tcG9uZW50OiBWbm9kZUNvbXBvbmVudEludGVyZmFjZSB8IG51bGwgPSBudWxsO1xubGV0IG1haW5Wbm9kZTogVm5vZGVXaXRoRG9tIHwgbnVsbCA9IG51bGw7XG5sZXQgaXNNb3VudGVkID0gZmFsc2U7XG5cbmV4cG9ydCBjb25zdCBjdXJyZW50ID0ge1xuICB2bm9kZTogbnVsbCBhcyBWbm9kZSB8IG51bGwsXG4gIGNvbXBvbmVudDogbnVsbCBhcyBWYWx5cmlhbkNvbXBvbmVudCB8IG51bGwsXG4gIGV2ZW50OiBudWxsIGFzIEV2ZW50IHwgbnVsbFxufTtcblxuZXhwb3J0IGNvbnN0IHJlc2VydmVkUHJvcHMgPSBuZXcgU2V0PHN0cmluZz4oW1xuICBcImtleVwiLFxuICBcInN0YXRlXCIsXG4gIFwidi1rZWVwXCIsXG4gIFwidi10ZXh0XCIsXG4gIFwidi1pZlwiLFxuICBcInYtZm9yXCIsXG4gIFwidi1zaG93XCIsXG4gIFwidi1jbGFzc1wiLFxuICBcInYtaHRtbFwiLFxuICBcInYtbW9kZWxcIixcbiAgXCJ2LWNyZWF0ZVwiLFxuICBcInYtdXBkYXRlXCIsXG4gIFwidi1jbGVhbnVwXCJcbl0pO1xuXG5jb25zdCBvbkNsZWFudXBTZXQgPSBuZXcgU2V0PEZ1bmN0aW9uPigpO1xuY29uc3Qgb25Nb3VudFNldCA9IG5ldyBTZXQ8RnVuY3Rpb24+KCk7XG5jb25zdCBvblVwZGF0ZVNldCA9IG5ldyBTZXQ8RnVuY3Rpb24+KCk7XG5jb25zdCBvblVubW91bnRTZXQgPSBuZXcgU2V0PEZ1bmN0aW9uPigpO1xuZXhwb3J0IGNvbnN0IG9uTW91bnQgPSAoY2FsbGJhY2s6IEZ1bmN0aW9uKSA9PiAhaXNNb3VudGVkICYmIG9uTW91bnRTZXQuYWRkKGNhbGxiYWNrKTtcbmV4cG9ydCBjb25zdCBvblVwZGF0ZSA9IChjYWxsYmFjazogRnVuY3Rpb24pID0+IG9uVXBkYXRlU2V0LmFkZChjYWxsYmFjayk7XG5leHBvcnQgY29uc3Qgb25DbGVhbnVwID0gKGNhbGxiYWNrOiBGdW5jdGlvbikgPT4gb25DbGVhbnVwU2V0LmFkZChjYWxsYmFjayk7XG5leHBvcnQgY29uc3Qgb25Vbm1vdW50ID0gKGNhbGxiYWNrOiBGdW5jdGlvbikgPT4gIWlzTW91bnRlZCAmJiBvblVubW91bnRTZXQuYWRkKGNhbGxiYWNrKTtcbmNvbnN0IGNhbGxTZXQgPSAoc2V0OiBTZXQ8RnVuY3Rpb24+KSA9PiB7XG4gIGZvciAoY29uc3QgY2FsbGJhY2sgb2Ygc2V0KSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxuICBzZXQuY2xlYXIoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBkaXJlY3RpdmVzOiBSZWNvcmQ8c3RyaW5nLCBEaXJlY3RpdmU+ID0ge1xuICBcInYtaWZcIjogKHZhbHVlLCB2bm9kZSkgPT4ge1xuICAgIGlmICghQm9vbGVhbih2YWx1ZSkpIHtcbiAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB2bm9kZS5kb20/LnBhcmVudE5vZGU7XG4gICAgICBpZiAocGFyZW50Tm9kZSkge1xuICAgICAgICBwYXJlbnROb2RlLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShcIlwiKSwgdm5vZGUuZG9tKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSxcblxuICBcInYtc2hvd1wiOiAodmFsdWUsIHZub2RlKSA9PiB7XG4gICAgY29uc3QgYm9vbCA9IEJvb2xlYW4odmFsdWUpO1xuICAgIChcbiAgICAgIHZub2RlLmRvbSBhcyB1bmtub3duIGFzIHtcbiAgICAgICAgc3R5bGU6IHsgZGlzcGxheTogc3RyaW5nIH07XG4gICAgICB9XG4gICAgKS5zdHlsZS5kaXNwbGF5ID0gYm9vbCA/IFwiXCIgOiBcIm5vbmVcIjtcbiAgfSxcblxuICBcInYtaHRtbFwiOiAodmFsdWUsIHZub2RlKSA9PiB7XG4gICAgdm5vZGUuY2hpbGRyZW4gPSB0cnVzdCh2YWx1ZSBhcyBzdHJpbmcpO1xuICB9LFxuXG4gIC8vIFRoZSBcInYtbW9kZWxcIiBkaXJlY3RpdmUgYmluZHMgdGhlIHZhbHVlIG9mIGFuIGlucHV0IGVsZW1lbnQgdG8gYSBtb2RlbCBwcm9wZXJ0eVxuICBcInYtbW9kZWxcIjogKG1vZGVsLCB2bm9kZSkgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItY29uc3RcbiAgICBpZiAoXCJuYW1lXCIgaW4gdm5vZGUucHJvcHMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHZhbHVlO1xuICAgIGNvbnN0IHByb3BlcnR5ID0gdm5vZGUucHJvcHMubmFtZTtcbiAgICBsZXQgZXZlbnQgPSBcIm9uaW5wdXRcIjtcblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gdXBkYXRlcyB0aGUgbW9kZWwgcHJvcGVydHkgd2hlbiB0aGUgaW5wdXQgZWxlbWVudCdzIHZhbHVlIGNoYW5nZXNcbiAgICBsZXQgaGFuZGxlciA9IChlOiBFdmVudCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWUpO1xuICAgIGlmICh2bm9kZS50YWcgPT09IFwiaW5wdXRcIikge1xuICAgICAgLy8gRGVwZW5kaW5nIG9uIHRoZSB0eXBlIG9mIGlucHV0IGVsZW1lbnQsIHVzZSBhIGRpZmZlcmVudCBoYW5kbGVyIGZ1bmN0aW9uXG4gICAgICBzd2l0Y2ggKHZub2RlLnByb3BzLnR5cGUpIHtcbiAgICAgICAgY2FzZSBcImNoZWNrYm94XCI6IHtcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbFtwcm9wZXJ0eV0pKSB7XG4gICAgICAgICAgICAvLyBJZiB0aGUgbW9kZWwgcHJvcGVydHkgaXMgYW4gYXJyYXksIGFkZCBvciByZW1vdmUgdGhlIHZhbHVlIGZyb20gdGhlIGFycmF5IHdoZW4gdGhlIGNoZWNrYm94IGlzIGNoZWNrZWQgb3IgdW5jaGVja2VkXG4gICAgICAgICAgICBoYW5kbGVyID0gKGU6IEV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IChlLnRhcmdldCBhcyBEb21FbGVtZW50ICYgUmVjb3JkPHN0cmluZywgYW55PikudmFsdWU7XG4gICAgICAgICAgICAgIGNvbnN0IGlkeCA9IG1vZGVsW3Byb3BlcnR5XS5pbmRleE9mKHZhbCk7XG4gICAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnB1c2godmFsKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgaXMgaW4gdGhlIGFycmF5LCBzZXQgdGhlIGNoZWNrYm94IHRvIGJlIGNoZWNrZWRcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2Yodm5vZGUuZG9tLnZhbHVlKSAhPT0gLTE7XG4gICAgICAgICAgfSBlbHNlIGlmIChcInZhbHVlXCIgaW4gdm5vZGUucHJvcHMpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBpbnB1dCBlbGVtZW50IGhhcyBhIFwidmFsdWVcIiBhdHRyaWJ1dGUsIHVzZSBpdCB0byBkZXRlcm1pbmUgdGhlIGNoZWNrZWQgc3RhdGVcbiAgICAgICAgICAgIGhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChtb2RlbFtwcm9wZXJ0eV0gPT09IHZub2RlLnByb3BzLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldID0gbnVsbDtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0gPSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHZhbHVlID0gbW9kZWxbcHJvcGVydHldID09PSB2bm9kZS5wcm9wcy52YWx1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gXCJ2YWx1ZVwiIGF0dHJpYnV0ZSwgdXNlIGEgYm9vbGVhbiB2YWx1ZSBmb3IgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgICAgICBoYW5kbGVyID0gKCkgPT4gKG1vZGVsW3Byb3BlcnR5XSA9ICFtb2RlbFtwcm9wZXJ0eV0pO1xuICAgICAgICAgICAgdmFsdWUgPSBtb2RlbFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNldCB0aGUgXCJjaGVja2VkXCIgYXR0cmlidXRlIG9uIHRoZSBpbnB1dCBlbGVtZW50XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKFwiY2hlY2tlZFwiLCB2YWx1ZSwgdm5vZGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgXCJyYWRpb1wiOiB7XG4gICAgICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSByYWRpbyBidXR0b24sIHNldCB0aGUgXCJjaGVja2VkXCIgYXR0cmlidXRlIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiB0aGUgbW9kZWwgcHJvcGVydHlcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgICAgICAgICBzaGFyZWRTZXRBdHRyaWJ1dGUoXCJjaGVja2VkXCIsIG1vZGVsW3Byb3BlcnR5XSA9PT0gdm5vZGUuZG9tLnZhbHVlLCB2bm9kZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgIC8vIEZvciBhbGwgb3RoZXIgaW5wdXQgdHlwZXMsIHNldCB0aGUgXCJ2YWx1ZVwiIGF0dHJpYnV0ZSBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgICAgc2hhcmVkU2V0QXR0cmlidXRlKFwidmFsdWVcIiwgbW9kZWxbcHJvcGVydHldLCB2bm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gXCJzZWxlY3RcIikge1xuICAgICAgLy8gSWYgdGhlIGVsZW1lbnQgaXMgYSBzZWxlY3QgZWxlbWVudCwgdXNlIHRoZSBcImNsaWNrXCIgZXZlbnQgYnkgZGVmYXVsdFxuICAgICAgZXZlbnQgPSBcIm9uY2xpY2tcIjtcbiAgICAgIGlmICh2bm9kZS5wcm9wcy5tdWx0aXBsZSkge1xuICAgICAgICAvLyBJZiB0aGUgc2VsZWN0IGVsZW1lbnQgYWxsb3dzIG11bHRpcGxlIHNlbGVjdGlvbnMsIHVwZGF0ZSB0aGUgbW9kZWwgcHJvcGVydHkgd2l0aCBhbiBhcnJheSBvZiBzZWxlY3RlZCB2YWx1ZXNcbiAgICAgICAgaGFuZGxlciA9IChlOiBFdmVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHtcbiAgICAgICAgICBjb25zdCB2YWwgPSAoZS50YXJnZXQgYXMgRG9tRWxlbWVudCAmIFJlY29yZDxzdHJpbmcsIGFueT4pLnZhbHVlO1xuICAgICAgICAgIGlmIChlLmN0cmxLZXkpIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBDdHJsIGtleSBpcyBwcmVzc2VkLCBhZGQgb3IgcmVtb3ZlIHRoZSB2YWx1ZSBmcm9tIHRoZSBhcnJheVxuICAgICAgICAgICAgY29uc3QgaWR4ID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsKTtcbiAgICAgICAgICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBtb2RlbFtwcm9wZXJ0eV0uc3BsaWNlKGlkeCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIElmIHRoZSBDdHJsIGtleSBpcyBub3QgcHJlc3NlZCwgc2V0IHRoZSBtb2RlbCBwcm9wZXJ0eSB0byBhbiBhcnJheSB3aXRoIHRoZSBzZWxlY3RlZCB2YWx1ZVxuICAgICAgICAgICAgbW9kZWxbcHJvcGVydHldLnNwbGljZSgwLCBtb2RlbFtwcm9wZXJ0eV0ubGVuZ3RoKTtcbiAgICAgICAgICAgIG1vZGVsW3Byb3BlcnR5XS5wdXNoKHZhbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBTZXQgdGhlIFwic2VsZWN0ZWRcIiBhdHRyaWJ1dGUgb24gdGhlIG9wdGlvbnMgYmFzZWQgb24gd2hldGhlciB0aGV5IGFyZSBpbiB0aGUgbW9kZWwgcHJvcGVydHkgYXJyYXlcbiAgICAgICAgdm5vZGUuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQ6IFZub2RlV2l0aERvbSkgPT4ge1xuICAgICAgICAgIGlmIChjaGlsZC50YWcgPT09IFwib3B0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gXCJ2YWx1ZVwiIGluIGNoaWxkLnByb3BzID8gY2hpbGQucHJvcHMudmFsdWUgOiBjaGlsZC5jaGlsZHJlbi5qb2luKFwiXCIpLnRyaW0oKTtcbiAgICAgICAgICAgIGNoaWxkLnByb3BzLnNlbGVjdGVkID0gbW9kZWxbcHJvcGVydHldLmluZGV4T2YodmFsdWUpICE9PSAtMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSWYgdGhlIHNlbGVjdCBlbGVtZW50IGRvZXMgbm90IGFsbG93IG11bHRpcGxlIHNlbGVjdGlvbnMsIHNldCB0aGUgXCJzZWxlY3RlZFwiIGF0dHJpYnV0ZSBvbiB0aGUgb3B0aW9ucyBiYXNlZCBvbiB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICAgIHZub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkOiBWbm9kZVdpdGhEb20pID0+IHtcbiAgICAgICAgICBpZiAoY2hpbGQudGFnID09PSBcIm9wdGlvblwiKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IFwidmFsdWVcIiBpbiBjaGlsZC5wcm9wcyA/IGNoaWxkLnByb3BzLnZhbHVlIDogY2hpbGQuY2hpbGRyZW4uam9pbihcIlwiKS50cmltKCk7XG4gICAgICAgICAgICBjaGlsZC5wcm9wcy5zZWxlY3RlZCA9IHZhbHVlID09PSBtb2RlbFtwcm9wZXJ0eV07XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZub2RlLnRhZyA9PT0gXCJ0ZXh0YXJlYVwiKSB7XG4gICAgICAvLyBTZXQgdGhlIHRleHRhcmVhJ3MgY29udGVudCB0byB0aGUgdmFsdWUgb2YgdGhlIG1vZGVsIHByb3BlcnR5XG4gICAgICB2bm9kZS5jaGlsZHJlbiA9IFttb2RlbFtwcm9wZXJ0eV1dO1xuICAgIH1cblxuICAgIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBwcmV2IGhhbmRsZXIgaWYgYW55IHdpbGwgbm90IGJlIGNoYW5nZWQgYnkgdGhlIHVzZXIgYWNyb3NzIHBhdGNoc1xuICAgIGNvbnN0IHByZXZIYW5kbGVyID0gdm5vZGUucHJvcHNbZXZlbnRdO1xuXG4gICAgLy8gU2V0IHRoZSBldmVudCBoYW5kbGVyIG9uIHRoZSBlbGVtZW50XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgc2hhcmVkU2V0QXR0cmlidXRlKFxuICAgICAgZXZlbnQsXG4gICAgICAoZTogRXZlbnQpID0+IHtcbiAgICAgICAgaGFuZGxlcihlKTtcblxuICAgICAgICAvLyBJZiB0aGUgcHJldmlvdXMgaGFuZGxlciBpcyBkZWZpbmVkLCBjYWxsIGl0IGFmdGVyIHRoZSBtb2RlbCBoYXMgYmVlbiB1cGRhdGVkXG4gICAgICAgIGlmIChwcmV2SGFuZGxlcikge1xuICAgICAgICAgIHByZXZIYW5kbGVyKGUpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdm5vZGVcbiAgICApO1xuICB9LFxuXG4gIFwidi1jcmVhdGVcIjogKGNhbGxiYWNrLCB2bm9kZSwgb2xkUHJvcHMpID0+IHtcbiAgICBpZiAoIW9sZFByb3BzKSB7XG4gICAgICBjb25zdCBjbGVhbnVwID0gY2FsbGJhY2sodm5vZGUpO1xuXG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsZWFudXAoY2xlYW51cCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIFwidi11cGRhdGVcIjogKGNhbGxiYWNrLCB2bm9kZSwgb2xkUHJvcHMpID0+IHtcbiAgICBpZiAob2xkUHJvcHMpIHtcbiAgICAgIGNvbnN0IGNsZWFudXAgPSBjYWxsYmFjayh2bm9kZSwgb2xkUHJvcHMpO1xuXG4gICAgICBpZiAodHlwZW9mIGNsZWFudXAgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNsZWFudXAoY2xlYW51cCk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIFwidi1jbGVhbnVwXCI6IChjYWxsYmFjaywgdm5vZGUpID0+IHtcbiAgICBvbkNsZWFudXAoKCkgPT4gY2FsbGJhY2sodm5vZGUpKTtcbiAgfSxcblxuICBcInYtY2xhc3NcIjogKHZhbHVlLCB2bm9kZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZub2RlLmRvbS5jbGFzc05hbWUgPSB2YWx1ZTtcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICB2bm9kZS5kb20uY2xhc3NOYW1lID0gdmFsdWUuam9pbihcIiBcIik7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgIGNvbnN0IGNsYXNzTGlzdCA9IHZub2RlLmRvbS5jbGFzc0xpc3Q7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdmFsdWUpIHtcbiAgICAgICAgY29uc3QgdmFsID0gdHlwZW9mIHZhbHVlW25hbWVdID09PSBcImZ1bmN0aW9uXCIgPyAodmFsdWVbbmFtZV0gYXMgRnVuY3Rpb24pKCkgOiB2YWx1ZVtuYW1lXTtcbiAgICAgICAgY2xhc3NMaXN0LnRvZ2dsZShuYW1lLCB2YWwpO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICAvLyBGcmVxdWVudCB1c2VkIHByb3BlcnRpZXNcbiAgY2xhc3ModmFsdWUsIHZub2RlKSB7XG4gICAgaWYgKHZub2RlLmRvbS5jbGFzc05hbWUgIT09IHZhbHVlKSB7XG4gICAgICB2bm9kZS5kb20uY2xhc3NOYW1lID0gdmFsdWU7XG4gICAgfVxuICB9LFxuXG4gIGNsYXNzTmFtZSh2YWx1ZSwgdm5vZGUpIHtcbiAgICBkaXJlY3RpdmVzLmNsYXNzKHZhbHVlLCB2bm9kZSwgbnVsbCk7XG4gIH0sXG5cbiAgaWQ6ICh2YWx1ZSwgdm5vZGUpID0+IHtcbiAgICB2bm9kZS5kb20uaWQgPSB2YWx1ZTtcbiAgfSxcblxuICBzdHlsZTogKHZhbHVlLCB2bm9kZSkgPT4ge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgIHZub2RlLmRvbS5zdHlsZSA9IHZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICB2bm9kZS5kb20uc3R5bGUgPSBcIlwiO1xuICAgICAgY29uc3QgZG9tU3R5bGUgPSB2bm9kZS5kb20uc3R5bGU7XG4gICAgICBmb3IgKGNvbnN0IG5hbWUgaW4gdmFsdWUpIHtcbiAgICAgICAgZG9tU3R5bGVbbmFtZV0gPSB2YWx1ZVtuYW1lXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXJlY3RpdmUobmFtZTogc3RyaW5nLCBkaXJlY3RpdmU6IERpcmVjdGl2ZSkge1xuICBjb25zdCBkaXJlY3RpdmVOYW1lID0gYHYtJHtuYW1lfWA7XG4gIGRpcmVjdGl2ZXNbZGlyZWN0aXZlTmFtZV0gPSBkaXJlY3RpdmU7XG4gIHJlc2VydmVkUHJvcHMuYWRkKGRpcmVjdGl2ZU5hbWUpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0UHJvcE5hbWVSZXNlcnZlZChuYW1lOiBzdHJpbmcpIHtcbiAgcmVzZXJ2ZWRQcm9wcy5hZGQobmFtZSk7XG59XG5cbmNvbnN0IGV2ZW50TGlzdGVuZXJOYW1lcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG5mdW5jdGlvbiBldmVudExpc3RlbmVyKGU6IEV2ZW50KSB7XG4gIGN1cnJlbnQuZXZlbnQgPSBlO1xuICBsZXQgZG9tID0gZS50YXJnZXQgYXMgRG9tRWxlbWVudDtcbiAgY29uc3QgbmFtZSA9IGBvbiR7ZS50eXBlfWA7XG5cbiAgd2hpbGUgKGRvbSkge1xuICAgIGNvbnN0IG9sZFByb3BzID0gZG9tLnByb3BzO1xuICAgIGlmIChvbGRQcm9wcyAmJiBvbGRQcm9wc1tuYW1lXSkge1xuICAgICAgb2xkUHJvcHNbbmFtZV0oZSwgZG9tKTtcblxuICAgICAgaWYgKCFlLmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZS1iZWZvcmUtZGVmaW5lXG4gICAgICAgIHVwZGF0ZSgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkb20gPSBkb20ucGFyZW50Tm9kZSBhcyBEb21FbGVtZW50O1xuICB9XG5cbiAgY3VycmVudC5ldmVudCA9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHNoYXJlZFNldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnksIG5ld1Zub2RlOiBWbm9kZVdpdGhEb20pOiB2b2lkIHwgYm9vbGVhbiB7XG4gIGNvbnN0IG5ld1Zub2RlRG9tID0gbmV3Vm5vZGUuZG9tO1xuICBpZiAodHlwZW9mIHZhbHVlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBpZiAoIWV2ZW50TGlzdGVuZXJOYW1lcy5oYXMobmFtZSkpIHtcbiAgICAgIC8vIFdlIGF0dGFjaCB0aGUgZGVsZWdhdGVkIGV2ZW50IGxpc3RlbmVyIHRvIHRoZSBtYWluIHZub2RlIGRvbSBlbGVtZW50LCB3aGljaCBpcyB0aGUgcm9vdCBvZiB0aGUgY29tcG9uZW50XG4gICAgICAobWFpblZub2RlIGFzIFZub2RlV2l0aERvbSkuZG9tLmFkZEV2ZW50TGlzdGVuZXIobmFtZS5zbGljZSgyKSwgZXZlbnRMaXN0ZW5lcik7XG4gICAgICBldmVudExpc3RlbmVyTmFtZXMuYWRkKG5hbWUpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoIW5ld1Zub2RlLmlzU1ZHICYmIG5hbWUgaW4gbmV3Vm5vZGVEb20pIHtcbiAgICBuZXdWbm9kZURvbVtuYW1lXSA9IHZhbHVlO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICBuZXdWbm9kZURvbS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgbmV3Vm5vZGVEb20uc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXR0cmlidXRlKG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSwgbmV3Vm5vZGU6IFZub2RlV2l0aERvbSk6IHZvaWQge1xuICBpZiAoIXJlc2VydmVkUHJvcHMuaGFzKG5hbWUpKSB7XG4gICAgbmV3Vm5vZGUucHJvcHNbbmFtZV0gPSB2YWx1ZTtcbiAgICBzaGFyZWRTZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUsIG5ld1Zub2RlKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gdXBkYXRlQXR0cmlidXRlcyhuZXdWbm9kZTogVm5vZGVXaXRoRG9tLCBvbGRQcm9wczogUHJvcGVydGllcyB8IG51bGwpOiB2b2lkIHtcbiAgY29uc3Qgdm5vZGVEb20gPSBuZXdWbm9kZS5kb207XG4gIGNvbnN0IHZub2RlUHJvcHMgPSBuZXdWbm9kZS5wcm9wcztcblxuICBpZiAob2xkUHJvcHMpIHtcbiAgICBmb3IgKGNvbnN0IG5hbWUgaW4gb2xkUHJvcHMpIHtcbiAgICAgIGlmIChuYW1lIGluIHZub2RlUHJvcHMgPT09IGZhbHNlICYmICFldmVudExpc3RlbmVyTmFtZXMuaGFzKG5hbWUpICYmICFyZXNlcnZlZFByb3BzLmhhcyhuYW1lKSkge1xuICAgICAgICBpZiAoIW5ld1Zub2RlLmlzU1ZHICYmIG5hbWUgaW4gdm5vZGVEb20pIHtcbiAgICAgICAgICB2bm9kZURvbVtuYW1lXSA9IG51bGw7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdm5vZGVEb20ucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBuYW1lIGluIHZub2RlUHJvcHMpIHtcbiAgICBpZiAoZGlyZWN0aXZlc1tuYW1lXSkge1xuICAgICAgaWYgKGRpcmVjdGl2ZXNbbmFtZV0odm5vZGVQcm9wc1tuYW1lXSwgbmV3Vm5vZGUsIG9sZFByb3BzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoIXJlc2VydmVkUHJvcHMuaGFzKG5hbWUpKSB7XG4gICAgICBzaGFyZWRTZXRBdHRyaWJ1dGUobmFtZSwgdm5vZGVQcm9wc1tuYW1lXSwgbmV3Vm5vZGUpO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWc6IHN0cmluZywgaXNTVkc6IGJvb2xlYW4pOiBEb21FbGVtZW50IHtcbiAgcmV0dXJuIGlzU1ZHXG4gICAgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCB0YWcpXG4gICAgOiAoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpIGFzIERvbUVsZW1lbnQpO1xufVxuXG5mdW5jdGlvbiBmbGF0VHJlZShuZXdWbm9kZTogVm5vZGVXaXRoRG9tKSB7XG4gIGN1cnJlbnQudm5vZGUgPSBuZXdWbm9kZTtcblxuICBpZiAoXCJ2LWZvclwiIGluIG5ld1Zub2RlLnByb3BzKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBbXTtcbiAgICBjb25zdCBzZXQgPSBuZXdWbm9kZS5wcm9wc1tcInYtZm9yXCJdO1xuICAgIGNvbnN0IGwgPSBzZXQubGVuZ3RoO1xuICAgIGNvbnN0IGNhbGxiYWNrID0gbmV3Vm5vZGUuY2hpbGRyZW5bMF07XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGw7IGkrKykge1xuICAgICAgY29uc3QgbmV3Q2hpbGQgPSBjYWxsYmFjayhzZXRbaV0sIGkpO1xuICAgICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgICAgbmV3Q2hpbGQucHJvcHMgPSBuZXdDaGlsZC5wcm9wcyB8fCB7fTtcbiAgICAgICAgbmV3Q2hpbGQuaXNTVkcgPSBuZXdWbm9kZS5pc1NWRyB8fCBuZXdDaGlsZC50YWcgPT09IFwic3ZnXCI7XG4gICAgICB9XG4gICAgICBjaGlsZHJlbltpXSA9IG5ld0NoaWxkO1xuICAgIH1cblxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxuXG4gIGxldCBpID0gMDtcbiAgY29uc3Qgb3JpZ2luYWxDaGlsZHJlbiA9IG5ld1Zub2RlLmNoaWxkcmVuO1xuICBsZXQgY2hpbGRyZW4gPSBvcmlnaW5hbENoaWxkcmVuO1xuXG4gIHdoaWxlIChpIDwgY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgY29uc3QgbmV3Q2hpbGQgPSBjaGlsZHJlbltpXTtcblxuICAgIGlmIChuZXdDaGlsZCA9PSBudWxsKSB7XG4gICAgICBpZiAoY2hpbGRyZW4gPT09IG9yaWdpbmFsQ2hpbGRyZW4pIHtcbiAgICAgICAgY2hpbGRyZW4gPSBbLi4ub3JpZ2luYWxDaGlsZHJlbl07XG4gICAgICB9XG4gICAgICBjaGlsZHJlbi5zcGxpY2UoaSwgMSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShuZXdDaGlsZCkpIHtcbiAgICAgIGlmIChjaGlsZHJlbiA9PT0gb3JpZ2luYWxDaGlsZHJlbikge1xuICAgICAgICBjaGlsZHJlbiA9IFsuLi5vcmlnaW5hbENoaWxkcmVuXTtcbiAgICAgIH1cbiAgICAgIGNoaWxkcmVuLnNwbGljZShpLCAxLCAuLi5uZXdDaGlsZCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAobmV3Q2hpbGQgaW5zdGFuY2VvZiBWbm9kZSkge1xuICAgICAgbmV3Q2hpbGQucHJvcHMgPSBuZXdDaGlsZC5wcm9wcyB8fCB7fTtcbiAgICAgIG5ld0NoaWxkLmlzU1ZHID0gbmV3Vm5vZGUuaXNTVkcgfHwgbmV3Q2hpbGQudGFnID09PSBcInN2Z1wiO1xuXG4gICAgICBpZiAodHlwZW9mIG5ld0NoaWxkLnRhZyAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICBpZiAoY2hpbGRyZW4gPT09IG9yaWdpbmFsQ2hpbGRyZW4pIHtcbiAgICAgICAgICBjaGlsZHJlbiA9IFsuLi5vcmlnaW5hbENoaWxkcmVuXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbXBvbmVudCA9IChjdXJyZW50LmNvbXBvbmVudCA9IG5ld0NoaWxkLnRhZyk7XG5cbiAgICAgICAgY2hpbGRyZW5baV0gPSAoaXNQT0pPQ29tcG9uZW50KGNvbXBvbmVudCkgPyBjb21wb25lbnQudmlldyA6IGNvbXBvbmVudCkuYmluZChjb21wb25lbnQpKFxuICAgICAgICAgIG5ld0NoaWxkLnByb3BzLFxuICAgICAgICAgIG5ld0NoaWxkLmNoaWxkcmVuXG4gICAgICAgICk7XG5cbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaSsrO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkcmVuO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOZXdFbGVtZW50KG5ld0NoaWxkOiBWbm9kZVdpdGhEb20sIG5ld1Zub2RlOiBWbm9kZVdpdGhEb20sIG9sZENoaWxkOiBEb21FbGVtZW50IHwgbnVsbCkge1xuICBjb25zdCBkb20gPSBjcmVhdGVFbGVtZW50KG5ld0NoaWxkLnRhZywgbmV3Q2hpbGQuaXNTVkcgYXMgYm9vbGVhbik7XG4gIGlmIChvbGRDaGlsZCkge1xuICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQoZG9tLCBvbGRDaGlsZCk7XG4gIH0gZWxzZSB7XG4gICAgbmV3Vm5vZGUuZG9tLmFwcGVuZENoaWxkKGRvbSk7XG4gIH1cbiAgbmV3Q2hpbGQuZG9tID0gZG9tO1xuICB1cGRhdGVBdHRyaWJ1dGVzKG5ld0NoaWxkLCBudWxsKTtcbiAgbmV3Q2hpbGQuZG9tLnByb3BzID0gbmV3Q2hpbGQucHJvcHM7XG4gIGlmIChcInYtdGV4dFwiIGluIG5ld0NoaWxkLnByb3BzKSB7XG4gICAgbmV3Q2hpbGQuZG9tLnRleHRDb250ZW50ID0gbmV3Q2hpbGQucHJvcHNbXCJ2LXRleHRcIl07XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgY2hpbGRyZW4gPSBmbGF0VHJlZShuZXdDaGlsZCk7XG4gIGlmIChjaGlsZHJlbi5sZW5ndGggPT09IDApIHtcbiAgICBuZXdDaGlsZC5kb20udGV4dENvbnRlbnQgPSBcIlwiO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGRyZW4ubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgaWYgKGNoaWxkcmVuW2ldIGluc3RhbmNlb2YgVm5vZGUgPT09IGZhbHNlKSB7XG4gICAgICBuZXdDaGlsZC5kb20uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2hpbGRyZW5baV0pKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjcmVhdGVOZXdFbGVtZW50KGNoaWxkcmVuW2ldLCBuZXdDaGlsZCwgbnVsbCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGF0Y2hLZXllZChuZXdWbm9kZTogVm5vZGVXaXRoRG9tLCBjaGlsZHJlbjogQ2hpbGRyZW4pIHtcbiAgY29uc3Qgb2xkVHJlZSA9IFsuLi5BcnJheS5mcm9tKG5ld1Zub2RlLmRvbS5jaGlsZE5vZGVzKV0gYXMgdW5rbm93biBhcyBEb21FbGVtZW50W107XG4gIGNvbnN0IGNoaWxkTm9kZXMgPSBuZXdWbm9kZS5kb20uY2hpbGROb2RlcztcbiAgY29uc3Qgb2xkS2V5ZWRMaXN0OiBSZWNvcmQ8c3RyaW5nLCBudW1iZXI+ID0ge307XG4gIGNvbnN0IG5ld0tleWVkTGlzdDogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gb2xkVHJlZS5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb25zdCBvbGRQcm9wcyA9IG9sZFRyZWVbaV0ucHJvcHM7XG4gICAgaWYgKG9sZFByb3BzKSB7XG4gICAgICBvbGRLZXllZExpc3Rbb2xkUHJvcHMua2V5IGFzIHN0cmluZ10gPSBpO1xuICAgIH1cblxuICAgIGlmIChpIDwgY2hpbGRyZW4ubGVuZ3RoICYmIGNoaWxkcmVuW2ldIGluc3RhbmNlb2YgVm5vZGUpIHtcbiAgICAgIG5ld0tleWVkTGlzdFtjaGlsZHJlbltpXS5wcm9wcy5rZXkgYXMgc3RyaW5nXSA9IGk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBjaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjb25zdCBuZXdDaGlsZCA9IGNoaWxkcmVuW2ldO1xuICAgIGNvbnN0IG9sZENoaWxkID0gb2xkVHJlZVtvbGRLZXllZExpc3RbbmV3Q2hpbGQucHJvcHMua2V5IGFzIHN0cmluZ11dO1xuXG4gICAgaWYgKCFvbGRDaGlsZCkge1xuICAgICAgY3JlYXRlTmV3RWxlbWVudChuZXdDaGlsZCwgbmV3Vm5vZGUsIGNoaWxkTm9kZXNbaV0gYXMgRG9tRWxlbWVudCB8IG51bGwpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbmV3Q2hpbGQuZG9tID0gb2xkQ2hpbGQ7XG4gICAgY29uc3QgY3VycmVudENoaWxkID0gY2hpbGROb2Rlc1tpXTtcbiAgICBpZiAoIWN1cnJlbnRDaGlsZCkge1xuICAgICAgbmV3Vm5vZGUuZG9tLmFwcGVuZENoaWxkKG9sZENoaWxkKTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRDaGlsZCAhPT0gb2xkQ2hpbGQpIHtcbiAgICAgIG5ld1Zub2RlLmRvbS5yZXBsYWNlQ2hpbGQob2xkQ2hpbGQsIGN1cnJlbnRDaGlsZCk7XG4gICAgfVxuXG4gICAgaWYgKFwidi1rZWVwXCIgaW4gbmV3Q2hpbGQucHJvcHMgPT09IGZhbHNlIHx8IG9sZENoaWxkLnByb3BzW1widi1rZWVwXCJdICE9PSBuZXdDaGlsZC5wcm9wc1tcInYta2VlcFwiXSkge1xuICAgICAgdXBkYXRlQXR0cmlidXRlcyhuZXdDaGlsZCBhcyBWbm9kZVdpdGhEb20sIG9sZENoaWxkLnByb3BzKTtcbiAgICAgIG9sZENoaWxkLnByb3BzID0gbmV3Q2hpbGQucHJvcHM7XG5cbiAgICAgIGlmIChcInYtdGV4dFwiIGluIG5ld0NoaWxkLnByb3BzKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgICAgaWYgKG9sZENoaWxkLnRleHRDb250ZW50ICE9IG5ld0NoaWxkLnByb3BzW1widi10ZXh0XCJdKSB7XG4gICAgICAgICAgb2xkQ2hpbGQudGV4dENvbnRlbnQgPSBuZXdDaGlsZC5wcm9wc1tcInYtdGV4dFwiXTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2UtYmVmb3JlLWRlZmluZVxuICAgICAgcGF0Y2gobmV3Q2hpbGQgYXMgVm5vZGVXaXRoRG9tKTtcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpID0gY2hpbGRyZW4ubGVuZ3RoLCBsID0gY2hpbGROb2Rlcy5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBjaGlsZE5vZGVzW2ldPy5yZW1vdmUoKTtcbiAgfVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gcGF0Y2gobmV3Vm5vZGU6IFZub2RlV2l0aERvbSk6IHZvaWQge1xuICBjb25zdCBjaGlsZHJlbiA9IGZsYXRUcmVlKG5ld1Zub2RlKTtcblxuICBjb25zdCBkb20gPSBuZXdWbm9kZS5kb207XG5cbiAgaWYgKGNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChkb20uY2hpbGROb2Rlcy5sZW5ndGgpIHtcbiAgICAgIGRvbS50ZXh0Q29udGVudCA9IFwiXCI7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG9sZERvbUNoaWxkcmVuID0gZG9tLmNoaWxkTm9kZXMgYXMgdW5rbm93biBhcyBEb21FbGVtZW50W107XG4gIGNvbnN0IG9sZENoaWxkcmVuTGVuZ3RoID0gb2xkRG9tQ2hpbGRyZW4ubGVuZ3RoO1xuICBpZiAob2xkQ2hpbGRyZW5MZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmlyc3RPbGRQcm9wcyA9IG9sZERvbUNoaWxkcmVuWzBdLnByb3BzO1xuICAgIGNvbnN0IGZpcnN0Vm5vZGUgPSBjaGlsZHJlblswXSBhcyBWbm9kZVdpdGhEb207XG4gICAgaWYgKGZpcnN0T2xkUHJvcHMgJiYgZmlyc3RWbm9kZSBpbnN0YW5jZW9mIFZub2RlICYmIFwia2V5XCIgaW4gZmlyc3RWbm9kZS5wcm9wcyAmJiBcImtleVwiIGluIGZpcnN0T2xkUHJvcHMpIHtcbiAgICAgIHBhdGNoS2V5ZWQobmV3Vm5vZGUsIGNoaWxkcmVuKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBjaGlsZHJlbkxlbmd0aCA9IGNoaWxkcmVuLmxlbmd0aDtcbiAgaWYgKG9sZENoaWxkcmVuTGVuZ3RoID09PSAwKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGlsZHJlbkxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoY2hpbGRyZW5baV0gaW5zdGFuY2VvZiBWbm9kZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZG9tLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNoaWxkcmVuW2ldKSk7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY3JlYXRlTmV3RWxlbWVudChjaGlsZHJlbltpXSwgbmV3Vm5vZGUsIG51bGwpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNoaWxkcmVuTGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBuZXdDaGlsZCA9IGNoaWxkcmVuW2ldIGFzIFZub2RlV2l0aERvbTtcbiAgICBjb25zdCBpc1RleHQgPSBuZXdDaGlsZCBpbnN0YW5jZW9mIFZub2RlID09PSBmYWxzZTtcbiAgICBjb25zdCBvbGRDaGlsZCA9IG9sZERvbUNoaWxkcmVuW2ldO1xuXG4gICAgaWYgKCFvbGRDaGlsZCkge1xuICAgICAgaWYgKGlzVGV4dCkge1xuICAgICAgICBuZXdWbm9kZS5kb20uYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobmV3Q2hpbGQgYXMgdW5rbm93biBhcyBzdHJpbmcpKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNyZWF0ZU5ld0VsZW1lbnQobmV3Q2hpbGQgYXMgVm5vZGVXaXRoRG9tLCBuZXdWbm9kZSwgbnVsbCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBpZiAoaXNUZXh0KSB7XG4gICAgICBpZiAob2xkQ2hpbGQubm9kZVR5cGUgIT09IDMpIHtcbiAgICAgICAgbmV3Vm5vZGUuZG9tLnJlcGxhY2VDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuZXdDaGlsZCBhcyB1bmtub3duIGFzIHN0cmluZyksIG9sZENoaWxkKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcbiAgICAgIGlmIChvbGRDaGlsZC5ub2RlVmFsdWUgIT0gKG5ld0NoaWxkIGFzIHVua25vd24gYXMgc3RyaW5nKSkge1xuICAgICAgICBvbGRDaGlsZC5ub2RlVmFsdWUgPSBuZXdDaGlsZCBhcyB1bmtub3duIGFzIHN0cmluZztcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChcInYta2VlcFwiIGluIG5ld0NoaWxkLnByb3BzKSB7XG4gICAgICBpZiAob2xkQ2hpbGQucHJvcHMgJiYgb2xkQ2hpbGQucHJvcHNbXCJ2LWtlZXBcIl0gPT09IG5ld0NoaWxkLnByb3BzW1widi1rZWVwXCJdKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZXh0T2xkQ2hpbGQgPSBvbGREb21DaGlsZHJlbltpICsgMV07XG4gICAgICBpZiAobmV4dE9sZENoaWxkICYmIG5leHRPbGRDaGlsZC5wcm9wcyAmJiBuZXh0T2xkQ2hpbGQucHJvcHNbXCJ2LWtlZXBcIl0gPT09IG5ld0NoaWxkLnByb3BzW1widi1rZWVwXCJdKSB7XG4gICAgICAgIG9sZENoaWxkLnJlbW92ZSgpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobmV3Q2hpbGQudGFnICE9PSBvbGRDaGlsZC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICBjcmVhdGVOZXdFbGVtZW50KG5ld0NoaWxkLCBuZXdWbm9kZSwgb2xkQ2hpbGQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgbmV3Q2hpbGQuZG9tID0gb2xkQ2hpbGQ7XG4gICAgdXBkYXRlQXR0cmlidXRlcyhuZXdDaGlsZCwgb2xkQ2hpbGQucHJvcHMgfHwgbnVsbCk7XG4gICAgb2xkQ2hpbGQucHJvcHMgPSBuZXdDaGlsZC5wcm9wcztcbiAgICBpZiAoXCJ2LXRleHRcIiBpbiBuZXdDaGlsZC5wcm9wcykge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuICAgICAgaWYgKG5ld0NoaWxkLmRvbS50ZXh0Q29udGVudCAhPSBuZXdDaGlsZC5wcm9wc1tcInYtdGV4dFwiXSkge1xuICAgICAgICBuZXdDaGlsZC5kb20udGV4dENvbnRlbnQgPSBuZXdDaGlsZC5wcm9wc1tcInYtdGV4dFwiXTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBwYXRjaChuZXdDaGlsZCk7XG4gIH1cblxuICBmb3IgKGxldCBpID0gY2hpbGRyZW5MZW5ndGgsIGwgPSBvbGREb21DaGlsZHJlbi5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICBvbGREb21DaGlsZHJlbltpXT8ucmVtb3ZlKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZVZub2RlKHZub2RlOiBWbm9kZVdpdGhEb20pOiBzdHJpbmcgfCB2b2lkIHtcbiAgY2FsbFNldChvbkNsZWFudXBTZXQpO1xuICB2bm9kZS5wcm9wcyA9IHZub2RlLnByb3BzIHx8IHt9O1xuICBwYXRjaCh2bm9kZSk7XG4gIGNhbGxTZXQoaXNNb3VudGVkID8gb25VcGRhdGVTZXQgOiBvbk1vdW50U2V0KTtcbiAgaXNNb3VudGVkID0gdHJ1ZTtcbiAgY3VycmVudC52bm9kZSA9IG51bGw7XG4gIGN1cnJlbnQuY29tcG9uZW50ID0gbnVsbDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZSgpOiBzdHJpbmcge1xuICBpZiAobWFpblZub2RlKSB7XG4gICAgbWFpblZub2RlLmNoaWxkcmVuID0gW21haW5Db21wb25lbnRdO1xuICAgIHVwZGF0ZVZub2RlKG1haW5Wbm9kZSBhcyBWbm9kZVdpdGhEb20pO1xuICAgIGlmIChpc05vZGVKcykge1xuICAgICAgcmV0dXJuIG1haW5Wbm9kZS5kb20uaW5uZXJIVE1MO1xuICAgIH1cbiAgfVxuICByZXR1cm4gXCJcIjtcbn1cblxubGV0IGRlYm91bmNlZFVwZGF0ZVRpbWVvdXQ6IGFueTtcblxuY29uc3QgY2xlYXJEZWJvdW5jZWRVcGRhdGVNZXRob2QgPSBpc05vZGVKcyA/IGNsZWFyVGltZW91dCA6IGNhbmNlbEFuaW1hdGlvbkZyYW1lO1xuY29uc3Qgc2V0RGVib3VuY2VkVXBkYXRlTWV0aG9kID0gaXNOb2RlSnMgPyAoKSA9PiBzZXRUaW1lb3V0KHVwZGF0ZSwgNSkgOiAoKSA9PiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodXBkYXRlKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlZFVwZGF0ZSgpIHtcbiAgY2xlYXJEZWJvdW5jZWRVcGRhdGVNZXRob2QoZGVib3VuY2VkVXBkYXRlVGltZW91dCk7XG4gIGRlYm91bmNlZFVwZGF0ZVRpbWVvdXQgPSBzZXREZWJvdW5jZWRVcGRhdGVNZXRob2QoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVubW91bnQoKSB7XG4gIGlmIChtYWluVm5vZGUpIHtcbiAgICBtYWluQ29tcG9uZW50ID0gdigoKSA9PiBudWxsLCB7fSkgYXMgVm5vZGVDb21wb25lbnRJbnRlcmZhY2U7XG4gICAgY29uc3QgcmVzdWx0ID0gdXBkYXRlKCk7XG4gICAgY2FsbFNldChvblVubW91bnRTZXQpO1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiBldmVudExpc3RlbmVyTmFtZXMpIHtcbiAgICAgIG1haW5Wbm9kZS5kb20ucmVtb3ZlRXZlbnRMaXN0ZW5lcihuYW1lLnNsaWNlKDIpLnRvTG93ZXJDYXNlKCksIGV2ZW50TGlzdGVuZXIpO1xuICAgICAgUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShldmVudExpc3RlbmVyTmFtZXMsIG5hbWUpO1xuICAgIH1cblxuICAgIG1haW5Db21wb25lbnQgPSBudWxsO1xuICAgIG1haW5Wbm9kZSA9IG51bGw7XG4gICAgaXNNb3VudGVkID0gZmFsc2U7XG4gICAgY3VycmVudC52bm9kZSA9IG51bGw7XG4gICAgY3VycmVudC5jb21wb25lbnQgPSBudWxsO1xuICAgIGN1cnJlbnQuZXZlbnQgPSBudWxsO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gXCJcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1vdW50KGRvbTogc3RyaW5nIHwgRG9tRWxlbWVudCwgY29tcG9uZW50OiBWYWx5cmlhbkNvbXBvbmVudCB8IFZub2RlQ29tcG9uZW50SW50ZXJmYWNlIHwgYW55KSB7XG4gIGNvbnN0IGNvbnRhaW5lciA9XG4gICAgdHlwZW9mIGRvbSA9PT0gXCJzdHJpbmdcIiA/IChpc05vZGVKcyA/IGNyZWF0ZUVsZW1lbnQoZG9tLCBkb20gPT09IFwic3ZnXCIpIDogZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihkb20pKSA6IGRvbTtcblxuICBpZiAoaXNDb21wb25lbnQoY29tcG9uZW50KSkge1xuICAgIG1haW5Db21wb25lbnQgPSB2KGNvbXBvbmVudCwge30sIFtdKSBhcyBWbm9kZUNvbXBvbmVudEludGVyZmFjZTtcbiAgfSBlbHNlIGlmIChpc1Zub2RlQ29tcG9uZW50KGNvbXBvbmVudCkpIHtcbiAgICBtYWluQ29tcG9uZW50ID0gY29tcG9uZW50O1xuICB9IGVsc2Uge1xuICAgIG1haW5Db21wb25lbnQgPSB2KCgpID0+IGNvbXBvbmVudCwge30sIFtdKSBhcyBWbm9kZUNvbXBvbmVudEludGVyZmFjZTtcbiAgfVxuXG4gIG1haW5Wbm9kZSA9IGhpZHJhdGVEb21Ub1Zub2RlKGNvbnRhaW5lcikgYXMgVm5vZGVXaXRoRG9tO1xuICByZXR1cm4gdXBkYXRlKCk7XG59XG4iXSwibWFwcGluZ3MiOiJNQXdDTyxJQUFNQSxFQUFXQyxRQUEyQixvQkFBWkMsU0FBMkJBLFFBQVFDLFVBQVlELFFBQVFDLFNBQVNDLE1BRTFGQyxFQUFOLE1BQ0wsV0FBQUMsQ0FDU0MsRUFDQUMsRUFDQUMsRUFDQUMsRUFDQUMsR0FKQUMsS0FBQUwsTUFDQUssS0FBQUosUUFDQUksS0FBQUgsV0FDQUcsS0FBQUYsTUFDQUUsS0FBQUQsT0FDTixHQVNRRSxFQUFtQkMsR0FDOUJiLFFBQVFhLEdBQWtDLGlCQUFk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
package/dist/index.mjs CHANGED
@@ -290,7 +290,7 @@ function sharedSetAttribute(name, value, newVnode) {
290
290
  }
291
291
  return;
292
292
  }
293
- if (name in newVnodeDom) {
293
+ if (!newVnode.isSVG && name in newVnodeDom) {
294
294
  newVnodeDom[name] = value;
295
295
  return;
296
296
  }
@@ -312,7 +312,7 @@ function updateAttributes(newVnode, oldProps) {
312
312
  if (oldProps) {
313
313
  for (const name in oldProps) {
314
314
  if (name in vnodeProps === false && !eventListenerNames.has(name) && !reservedProps.has(name)) {
315
- if (name in vnodeDom) {
315
+ if (!newVnode.isSVG && name in vnodeDom) {
316
316
  vnodeDom[name] = null;
317
317
  } else {
318
318
  vnodeDom.removeAttribute(name);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../lib/index.ts"],
4
- "sourcesContent": ["/* eslint-disable */\ndeclare global {\n var document: Document;\n namespace JSX {\n interface IntrinsicElements extends DefaultRecord {}\n type Element = ReturnType<\n typeof v | ((...args: any) => string | number | null | undefined | boolean | Promise<any>)\n >;\n type ComponentReturnType = string | number | null | undefined | boolean | Element | Element[];\n }\n}\n\ninterface DefaultRecord extends Record<string | number | symbol, any> {}\n\nexport interface Properties extends DefaultRecord {\n key?: string | number;\n}\n\nexport interface DomElement extends Element, DefaultRecord {}\n\nexport interface Component extends DefaultRecord {\n (props: Properties, children: any[]): Vnode | any;\n}\n\nexport interface POJOComponent extends DefaultRecord {\n view: Component;\n}\n\nexport type ValyrianComponent = Component | POJOComponent;\n\nexport interface VnodeComponentInterface extends Vnode {\n tag: ValyrianComponent;\n}\n\nexport interface Children extends Array<Vnode | VnodeComponentInterface | ValyrianComponent | any> {}\n\nexport interface Directive {\n (value: any, vnode: VnodeWithDom, oldProps: Properties | null): false | void | any;\n}\n\nexport const isNodeJs = Boolean(typeof process !== \"undefined\" && process.versions && process.versions.node);\n\nexport class Vnode {\n constructor(\n public tag: string | Component | POJOComponent,\n public props: null | Properties,\n public children: Children,\n public dom?: DomElement,\n public isSVG?: boolean\n ) {}\n}\n\nexport interface VnodeWithDom extends Vnode {\n tag: string;\n dom: DomElement;\n props: Properties;\n}\n\nexport const isPOJOComponent = (component: unknown): component is POJOComponent =>\n Boolean(component && typeof component === \"object\" && \"view\" in component);\n\nexport const isComponent = (component: unknown): component is Component =>\n Boolean(typeof component === \"function\" || isPOJOComponent(component));\nexport const isVnode = (object?: unknown): object is Vnode => object instanceof Vnode;\n\nexport const isVnodeComponent = (object?: unknown): object is VnodeComponentInterface => {\n return isVnode(object) && isComponent(object.tag);\n};\n\nexport function v(tagOrComponent: string | ValyrianComponent, props: Properties | null, ...children: Children) {\n return new Vnode(tagOrComponent, props, children);\n}\n\nv.fragment = (_: Properties, ...children: Children) => children;\n\nexport function hidrateDomToVnode(dom: any): VnodeWithDom | void {\n if (dom.nodeType === 3) {\n return dom.nodeValue;\n }\n\n if (dom.nodeType === 1) {\n const tag = dom.nodeName.toLowerCase();\n const props = {} as Properties;\n const children = [] as Children;\n\n for (let i = 0, l = dom.childNodes.length; i < l; i++) {\n const childDom = dom.childNodes[i];\n if (childDom.nodeType === 3) {\n children.push(childDom.nodeValue);\n } else if (childDom.nodeType === 1) {\n const childVnode = hidrateDomToVnode(childDom);\n children.push(childVnode);\n }\n }\n\n const attributes = dom.attributes;\n for (let i = 0, l = attributes.length; i < l; i++) {\n const attr = attributes[i];\n props[attr.nodeName] = attr.nodeValue;\n }\n\n const vnode = new Vnode(tag, props, children);\n vnode.dom = dom;\n vnode.isSVG = tag === \"svg\";\n return vnode as VnodeWithDom;\n }\n}\n\nexport function trust(htmlString: string) {\n const div = document.createElement(\"div\");\n div.innerHTML = htmlString.trim();\n return Array.from(div.childNodes).map(hidrateDomToVnode);\n}\n\nlet mainComponent: VnodeComponentInterface | null = null;\nlet mainVnode: VnodeWithDom | null = null;\nlet isMounted = false;\n\nexport const current = {\n vnode: null as Vnode | null,\n component: null as ValyrianComponent | null,\n event: null as Event | null\n};\n\nexport const reservedProps = new Set<string>([\n \"key\",\n \"state\",\n \"v-keep\",\n \"v-text\",\n \"v-if\",\n \"v-for\",\n \"v-show\",\n \"v-class\",\n \"v-html\",\n \"v-model\",\n \"v-create\",\n \"v-update\",\n \"v-cleanup\"\n]);\n\nconst onCleanupSet = new Set<Function>();\nconst onMountSet = new Set<Function>();\nconst onUpdateSet = new Set<Function>();\nconst onUnmountSet = new Set<Function>();\nexport const onMount = (callback: Function) => !isMounted && onMountSet.add(callback);\nexport const onUpdate = (callback: Function) => onUpdateSet.add(callback);\nexport const onCleanup = (callback: Function) => onCleanupSet.add(callback);\nexport const onUnmount = (callback: Function) => !isMounted && onUnmountSet.add(callback);\nconst callSet = (set: Set<Function>) => {\n for (const callback of set) {\n callback();\n }\n set.clear();\n};\n\nexport const directives: Record<string, Directive> = {\n \"v-if\": (value, vnode) => {\n if (!Boolean(value)) {\n const parentNode = vnode.dom?.parentNode;\n if (parentNode) {\n parentNode.replaceChild(document.createTextNode(\"\"), vnode.dom);\n }\n\n return false;\n }\n },\n\n \"v-show\": (value, vnode) => {\n const bool = Boolean(value);\n (\n vnode.dom as unknown as {\n style: { display: string };\n }\n ).style.display = bool ? \"\" : \"none\";\n },\n\n \"v-html\": (value, vnode) => {\n vnode.children = trust(value as string);\n },\n\n // The \"v-model\" directive binds the value of an input element to a model property\n \"v-model\": (model, vnode) => {\n // eslint-disable-next-line prefer-const\n if (\"name\" in vnode.props === false) {\n return;\n }\n\n let value;\n const property = vnode.props.name;\n let event = \"oninput\";\n\n // This function updates the model property when the input element's value changes\n let handler = (e: Event) => (model[property] = (e.target as DomElement & Record<string, any>).value);\n if (vnode.tag === \"input\") {\n // Depending on the type of input element, use a different handler function\n switch (vnode.props.type) {\n case \"checkbox\": {\n if (Array.isArray(model[property])) {\n // If the model property is an array, add or remove the value from the array when the checkbox is checked or unchecked\n handler = (e: Event) => {\n const val = (e.target as DomElement & Record<string, any>).value;\n const idx = model[property].indexOf(val);\n if (idx === -1) {\n model[property].push(val);\n } else {\n model[property].splice(idx, 1);\n }\n };\n // If the value is in the array, set the checkbox to be checked\n value = model[property].indexOf(vnode.dom.value) !== -1;\n } else if (\"value\" in vnode.props) {\n // If the input element has a \"value\" attribute, use it to determine the checked state\n handler = () => {\n if (model[property] === vnode.props.value) {\n model[property] = null;\n } else {\n model[property] = vnode.props.value;\n }\n };\n value = model[property] === vnode.props.value;\n } else {\n // If there is no \"value\" attribute, use a boolean value for the model property\n handler = () => (model[property] = !model[property]);\n value = model[property];\n }\n // Set the \"checked\" attribute on the input element\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\"checked\", value, vnode);\n break;\n }\n case \"radio\": {\n // If the element is a radio button, set the \"checked\" attribute based on the value of the model property\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\"checked\", model[property] === vnode.dom.value, vnode);\n break;\n }\n default: {\n // For all other input types, set the \"value\" attribute based on the value of the model property\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\"value\", model[property], vnode);\n }\n }\n } else if (vnode.tag === \"select\") {\n // If the element is a select element, use the \"click\" event by default\n event = \"onclick\";\n if (vnode.props.multiple) {\n // If the select element allows multiple selections, update the model property with an array of selected values\n handler = (e: Event & Record<string, any>) => {\n const val = (e.target as DomElement & Record<string, any>).value;\n if (e.ctrlKey) {\n // If the Ctrl key is pressed, add or remove the value from the array\n const idx = model[property].indexOf(val);\n if (idx === -1) {\n model[property].push(val);\n } else {\n model[property].splice(idx, 1);\n }\n } else {\n // If the Ctrl key is not pressed, set the model property to an array with the selected value\n model[property].splice(0, model[property].length);\n model[property].push(val);\n }\n };\n // Set the \"selected\" attribute on the options based on whether they are in the model property array\n vnode.children.forEach((child: VnodeWithDom) => {\n if (child.tag === \"option\") {\n const value = \"value\" in child.props ? child.props.value : child.children.join(\"\").trim();\n child.props.selected = model[property].indexOf(value) !== -1;\n }\n });\n } else {\n // If the select element does not allow multiple selections, set the \"selected\" attribute on the options based on the value of the model property\n vnode.children.forEach((child: VnodeWithDom) => {\n if (child.tag === \"option\") {\n const value = \"value\" in child.props ? child.props.value : child.children.join(\"\").trim();\n child.props.selected = value === model[property];\n }\n });\n }\n } else if (vnode.tag === \"textarea\") {\n // Set the textarea's content to the value of the model property\n vnode.children = [model[property]];\n }\n\n // We assume that the prev handler if any will not be changed by the user across patchs\n const prevHandler = vnode.props[event];\n\n // Set the event handler on the element\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\n event,\n (e: Event) => {\n handler(e);\n\n // If the previous handler is defined, call it after the model has been updated\n if (prevHandler) {\n prevHandler(e);\n }\n },\n vnode\n );\n },\n\n \"v-create\": (callback, vnode, oldProps) => {\n if (!oldProps) {\n const cleanup = callback(vnode);\n\n if (typeof cleanup === \"function\") {\n onCleanup(cleanup);\n }\n }\n },\n\n \"v-update\": (callback, vnode, oldProps) => {\n if (oldProps) {\n const cleanup = callback(vnode, oldProps);\n\n if (typeof cleanup === \"function\") {\n onCleanup(cleanup);\n }\n }\n },\n\n \"v-cleanup\": (callback, vnode) => {\n onCleanup(() => callback(vnode));\n },\n\n \"v-class\": (value, vnode) => {\n if (typeof value === \"string\") {\n vnode.dom.className = value;\n } else if (Array.isArray(value)) {\n vnode.dom.className = value.join(\" \");\n } else if (typeof value === \"object\") {\n const classList = vnode.dom.classList;\n for (const name in value) {\n const val = typeof value[name] === \"function\" ? (value[name] as Function)() : value[name];\n classList.toggle(name, val);\n }\n }\n },\n\n // Frequent used properties\n class(value, vnode) {\n if (vnode.dom.className !== value) {\n vnode.dom.className = value;\n }\n },\n\n className(value, vnode) {\n directives.class(value, vnode, null);\n },\n\n id: (value, vnode) => {\n vnode.dom.id = value;\n },\n\n style: (value, vnode) => {\n if (typeof value === \"string\") {\n vnode.dom.style = value;\n } else if (typeof value === \"object\") {\n vnode.dom.style = \"\";\n const domStyle = vnode.dom.style;\n for (const name in value) {\n domStyle[name] = value[name];\n }\n }\n }\n};\n\nexport function directive(name: string, directive: Directive) {\n const directiveName = `v-${name}`;\n directives[directiveName] = directive;\n reservedProps.add(directiveName);\n}\n\nexport function setPropNameReserved(name: string) {\n reservedProps.add(name);\n}\n\nconst eventListenerNames = new Set<string>();\n\nfunction eventListener(e: Event) {\n current.event = e;\n let dom = e.target as DomElement;\n const name = `on${e.type}`;\n\n while (dom) {\n const oldProps = dom.props;\n if (oldProps && oldProps[name]) {\n oldProps[name](e, dom);\n\n if (!e.defaultPrevented) {\n // eslint-disable-next-line no-use-before-define\n update();\n }\n return;\n }\n dom = dom.parentNode as DomElement;\n }\n\n current.event = null;\n}\n\nfunction sharedSetAttribute(name: string, value: any, newVnode: VnodeWithDom): void | boolean {\n const newVnodeDom = newVnode.dom;\n if (typeof value === \"function\") {\n if (!eventListenerNames.has(name)) {\n // We attach the delegated event listener to the main vnode dom element, which is the root of the component\n (mainVnode as VnodeWithDom).dom.addEventListener(name.slice(2), eventListener);\n eventListenerNames.add(name);\n }\n return;\n }\n\n if (name in newVnodeDom) {\n newVnodeDom[name] = value;\n return;\n }\n\n if (value === false) {\n newVnodeDom.removeAttribute(name);\n } else {\n newVnodeDom.setAttribute(name, value);\n }\n}\n\nexport function setAttribute(name: string, value: any, newVnode: VnodeWithDom): void {\n if (!reservedProps.has(name)) {\n newVnode.props[name] = value;\n sharedSetAttribute(name, value, newVnode);\n }\n}\n\nexport function updateAttributes(newVnode: VnodeWithDom, oldProps: Properties | null): void {\n const vnodeDom = newVnode.dom;\n const vnodeProps = newVnode.props;\n\n if (oldProps) {\n for (const name in oldProps) {\n if (name in vnodeProps === false && !eventListenerNames.has(name) && !reservedProps.has(name)) {\n if (name in vnodeDom) {\n vnodeDom[name] = null;\n } else {\n vnodeDom.removeAttribute(name);\n }\n }\n }\n }\n\n for (const name in vnodeProps) {\n if (directives[name]) {\n if (directives[name](vnodeProps[name], newVnode, oldProps) === false) {\n break;\n }\n continue;\n }\n\n if (!reservedProps.has(name)) {\n sharedSetAttribute(name, vnodeProps[name], newVnode);\n }\n }\n}\n\nexport function createElement(tag: string, isSVG: boolean): DomElement {\n return isSVG\n ? document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n : (document.createElement(tag) as DomElement);\n}\n\nfunction flatTree(newVnode: VnodeWithDom) {\n current.vnode = newVnode;\n\n if (\"v-for\" in newVnode.props) {\n const children = [];\n const set = newVnode.props[\"v-for\"];\n const l = set.length;\n const callback = newVnode.children[0];\n\n for (let i = 0; i < l; i++) {\n const newChild = callback(set[i], i);\n if (newChild instanceof Vnode) {\n newChild.props = newChild.props || {};\n newChild.isSVG = newVnode.isSVG || newChild.tag === \"svg\";\n }\n children[i] = newChild;\n }\n\n return children;\n }\n\n let i = 0;\n const originalChildren = newVnode.children;\n let children = originalChildren;\n\n while (i < children.length) {\n const newChild = children[i];\n\n if (newChild == null) {\n if (children === originalChildren) {\n children = [...originalChildren];\n }\n children.splice(i, 1);\n continue;\n }\n\n if (Array.isArray(newChild)) {\n if (children === originalChildren) {\n children = [...originalChildren];\n }\n children.splice(i, 1, ...newChild);\n continue;\n }\n\n if (newChild instanceof Vnode) {\n newChild.props = newChild.props || {};\n newChild.isSVG = newVnode.isSVG || newChild.tag === \"svg\";\n\n if (typeof newChild.tag !== \"string\") {\n if (children === originalChildren) {\n children = [...originalChildren];\n }\n\n const component = (current.component = newChild.tag);\n\n children[i] = (isPOJOComponent(component) ? component.view : component).bind(component)(\n newChild.props,\n newChild.children\n );\n\n continue;\n }\n }\n\n i++;\n }\n\n return children;\n}\n\nfunction createNewElement(newChild: VnodeWithDom, newVnode: VnodeWithDom, oldChild: DomElement | null) {\n const dom = createElement(newChild.tag, newChild.isSVG as boolean);\n if (oldChild) {\n newVnode.dom.replaceChild(dom, oldChild);\n } else {\n newVnode.dom.appendChild(dom);\n }\n newChild.dom = dom;\n updateAttributes(newChild, null);\n newChild.dom.props = newChild.props;\n if (\"v-text\" in newChild.props) {\n newChild.dom.textContent = newChild.props[\"v-text\"];\n return;\n }\n\n const children = flatTree(newChild);\n if (children.length === 0) {\n newChild.dom.textContent = \"\";\n return;\n }\n\n for (let i = 0, l = children.length; i < l; i++) {\n if (children[i] instanceof Vnode === false) {\n newChild.dom.appendChild(document.createTextNode(children[i]));\n continue;\n }\n createNewElement(children[i], newChild, null);\n }\n}\n\nfunction patchKeyed(newVnode: VnodeWithDom, children: Children) {\n const oldTree = [...Array.from(newVnode.dom.childNodes)] as unknown as DomElement[];\n const childNodes = newVnode.dom.childNodes;\n const oldKeyedList: Record<string, number> = {};\n const newKeyedList: Record<string, number> = {};\n\n for (let i = 0, l = oldTree.length; i < l; i++) {\n const oldProps = oldTree[i].props;\n if (oldProps) {\n oldKeyedList[oldProps.key as string] = i;\n }\n\n if (i < children.length && children[i] instanceof Vnode) {\n newKeyedList[children[i].props.key as string] = i;\n }\n }\n\n for (let i = 0, l = children.length; i < l; i++) {\n const newChild = children[i];\n const oldChild = oldTree[oldKeyedList[newChild.props.key as string]];\n\n if (!oldChild) {\n createNewElement(newChild, newVnode, childNodes[i] as DomElement | null);\n continue;\n }\n\n newChild.dom = oldChild;\n const currentChild = childNodes[i];\n if (!currentChild) {\n newVnode.dom.appendChild(oldChild);\n } else if (currentChild !== oldChild) {\n newVnode.dom.replaceChild(oldChild, currentChild);\n }\n\n if (\"v-keep\" in newChild.props === false || oldChild.props[\"v-keep\"] !== newChild.props[\"v-keep\"]) {\n updateAttributes(newChild as VnodeWithDom, oldChild.props);\n oldChild.props = newChild.props;\n\n if (\"v-text\" in newChild.props) {\n // eslint-disable-next-line eqeqeq\n if (oldChild.textContent != newChild.props[\"v-text\"]) {\n oldChild.textContent = newChild.props[\"v-text\"];\n }\n continue;\n }\n // eslint-disable-next-line no-use-before-define\n patch(newChild as VnodeWithDom);\n }\n }\n\n for (let i = children.length, l = childNodes.length; i < l; i++) {\n childNodes[i]?.remove();\n }\n}\n\n// eslint-disable-next-line complexity\nfunction patch(newVnode: VnodeWithDom): void {\n const children = flatTree(newVnode);\n\n const dom = newVnode.dom;\n\n if (children.length === 0) {\n if (dom.childNodes.length) {\n dom.textContent = \"\";\n }\n return;\n }\n\n const oldDomChildren = dom.childNodes as unknown as DomElement[];\n const oldChildrenLength = oldDomChildren.length;\n if (oldChildrenLength > 0) {\n const firstOldProps = oldDomChildren[0].props;\n const firstVnode = children[0] as VnodeWithDom;\n if (firstOldProps && firstVnode instanceof Vnode && \"key\" in firstVnode.props && \"key\" in firstOldProps) {\n patchKeyed(newVnode, children);\n return;\n }\n }\n\n const childrenLength = children.length;\n if (oldChildrenLength === 0) {\n for (let i = 0; i < childrenLength; i++) {\n if (children[i] instanceof Vnode === false) {\n dom.appendChild(document.createTextNode(children[i]));\n continue;\n }\n createNewElement(children[i], newVnode, null);\n }\n return;\n }\n\n for (let i = 0; i < childrenLength; i++) {\n const newChild = children[i] as VnodeWithDom;\n const isText = newChild instanceof Vnode === false;\n const oldChild = oldDomChildren[i];\n\n if (!oldChild) {\n if (isText) {\n newVnode.dom.appendChild(document.createTextNode(newChild as unknown as string));\n continue;\n }\n\n createNewElement(newChild as VnodeWithDom, newVnode, null);\n continue;\n }\n\n if (isText) {\n if (oldChild.nodeType !== 3) {\n newVnode.dom.replaceChild(document.createTextNode(newChild as unknown as string), oldChild);\n continue;\n }\n\n // eslint-disable-next-line eqeqeq\n if (oldChild.nodeValue != (newChild as unknown as string)) {\n oldChild.nodeValue = newChild as unknown as string;\n }\n continue;\n }\n\n if (\"v-keep\" in newChild.props) {\n if (oldChild.props && oldChild.props[\"v-keep\"] === newChild.props[\"v-keep\"]) {\n continue;\n }\n\n const nextOldChild = oldDomChildren[i + 1];\n if (nextOldChild && nextOldChild.props && nextOldChild.props[\"v-keep\"] === newChild.props[\"v-keep\"]) {\n oldChild.remove();\n continue;\n }\n }\n\n if (newChild.tag !== oldChild.nodeName.toLowerCase()) {\n createNewElement(newChild, newVnode, oldChild);\n continue;\n }\n\n newChild.dom = oldChild;\n updateAttributes(newChild, oldChild.props || null);\n oldChild.props = newChild.props;\n if (\"v-text\" in newChild.props) {\n // eslint-disable-next-line eqeqeq\n if (newChild.dom.textContent != newChild.props[\"v-text\"]) {\n newChild.dom.textContent = newChild.props[\"v-text\"];\n }\n continue;\n }\n patch(newChild);\n }\n\n for (let i = childrenLength, l = oldDomChildren.length; i < l; i++) {\n oldDomChildren[i]?.remove();\n }\n}\n\nexport function updateVnode(vnode: VnodeWithDom): string | void {\n callSet(onCleanupSet);\n vnode.props = vnode.props || {};\n patch(vnode);\n callSet(isMounted ? onUpdateSet : onMountSet);\n isMounted = true;\n current.vnode = null;\n current.component = null;\n}\n\nexport function update(): string {\n if (mainVnode) {\n mainVnode.children = [mainComponent];\n updateVnode(mainVnode as VnodeWithDom);\n if (isNodeJs) {\n return mainVnode.dom.innerHTML;\n }\n }\n return \"\";\n}\n\nlet debouncedUpdateTimeout: any;\n\nconst clearDebouncedUpdateMethod = isNodeJs ? clearTimeout : cancelAnimationFrame;\nconst setDebouncedUpdateMethod = isNodeJs ? () => setTimeout(update, 5) : () => requestAnimationFrame(update);\n\nexport function debouncedUpdate() {\n clearDebouncedUpdateMethod(debouncedUpdateTimeout);\n debouncedUpdateTimeout = setDebouncedUpdateMethod();\n}\n\nexport function unmount() {\n if (mainVnode) {\n mainComponent = v(() => null, {}) as VnodeComponentInterface;\n const result = update();\n callSet(onUnmountSet);\n for (const name in eventListenerNames) {\n mainVnode.dom.removeEventListener(name.slice(2).toLowerCase(), eventListener);\n Reflect.deleteProperty(eventListenerNames, name);\n }\n\n mainComponent = null;\n mainVnode = null;\n isMounted = false;\n current.vnode = null;\n current.component = null;\n current.event = null;\n return result;\n }\n\n return \"\";\n}\n\nexport function mount(dom: string | DomElement, component: ValyrianComponent | VnodeComponentInterface | any) {\n const container =\n typeof dom === \"string\" ? (isNodeJs ? createElement(dom, dom === \"svg\") : document.querySelector(dom)) : dom;\n\n if (isComponent(component)) {\n mainComponent = v(component, {}, []) as VnodeComponentInterface;\n } else if (isVnodeComponent(component)) {\n mainComponent = component;\n } else {\n mainComponent = v(() => component, {}, []) as VnodeComponentInterface;\n }\n\n mainVnode = hidrateDomToVnode(container) as VnodeWithDom;\n return update();\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable */\ndeclare global {\n var document: Document;\n namespace JSX {\n interface IntrinsicElements extends DefaultRecord {}\n type Element = ReturnType<\n typeof v | ((...args: any) => string | number | null | undefined | boolean | Promise<any>)\n >;\n type ComponentReturnType = string | number | null | undefined | boolean | Element | Element[];\n }\n}\n\ninterface DefaultRecord extends Record<string | number | symbol, any> {}\n\nexport interface Properties extends DefaultRecord {\n key?: string | number;\n}\n\nexport interface DomElement extends Element, DefaultRecord {}\n\nexport interface Component extends DefaultRecord {\n (props: Properties, children: any[]): Vnode | any;\n}\n\nexport interface POJOComponent extends DefaultRecord {\n view: Component;\n}\n\nexport type ValyrianComponent = Component | POJOComponent;\n\nexport interface VnodeComponentInterface extends Vnode {\n tag: ValyrianComponent;\n}\n\nexport interface Children extends Array<Vnode | VnodeComponentInterface | ValyrianComponent | any> {}\n\nexport interface Directive {\n (value: any, vnode: VnodeWithDom, oldProps: Properties | null): false | void | any;\n}\n\nexport const isNodeJs = Boolean(typeof process !== \"undefined\" && process.versions && process.versions.node);\n\nexport class Vnode {\n constructor(\n public tag: string | Component | POJOComponent,\n public props: null | Properties,\n public children: Children,\n public dom?: DomElement,\n public isSVG?: boolean\n ) {}\n}\n\nexport interface VnodeWithDom extends Vnode {\n tag: string;\n dom: DomElement;\n props: Properties;\n}\n\nexport const isPOJOComponent = (component: unknown): component is POJOComponent =>\n Boolean(component && typeof component === \"object\" && \"view\" in component);\n\nexport const isComponent = (component: unknown): component is Component =>\n Boolean(typeof component === \"function\" || isPOJOComponent(component));\nexport const isVnode = (object?: unknown): object is Vnode => object instanceof Vnode;\n\nexport const isVnodeComponent = (object?: unknown): object is VnodeComponentInterface => {\n return isVnode(object) && isComponent(object.tag);\n};\n\nexport function v(tagOrComponent: string | ValyrianComponent, props: Properties | null, ...children: Children) {\n return new Vnode(tagOrComponent, props, children);\n}\n\nv.fragment = (_: Properties, ...children: Children) => children;\n\nexport function hidrateDomToVnode(dom: any): VnodeWithDom | void {\n if (dom.nodeType === 3) {\n return dom.nodeValue;\n }\n\n if (dom.nodeType === 1) {\n const tag = dom.nodeName.toLowerCase();\n const props = {} as Properties;\n const children = [] as Children;\n\n for (let i = 0, l = dom.childNodes.length; i < l; i++) {\n const childDom = dom.childNodes[i];\n if (childDom.nodeType === 3) {\n children.push(childDom.nodeValue);\n } else if (childDom.nodeType === 1) {\n const childVnode = hidrateDomToVnode(childDom);\n children.push(childVnode);\n }\n }\n\n const attributes = dom.attributes;\n for (let i = 0, l = attributes.length; i < l; i++) {\n const attr = attributes[i];\n props[attr.nodeName] = attr.nodeValue;\n }\n\n const vnode = new Vnode(tag, props, children);\n vnode.dom = dom;\n vnode.isSVG = tag === \"svg\";\n return vnode as VnodeWithDom;\n }\n}\n\nexport function trust(htmlString: string) {\n const div = document.createElement(\"div\");\n div.innerHTML = htmlString.trim();\n return Array.from(div.childNodes).map(hidrateDomToVnode);\n}\n\nlet mainComponent: VnodeComponentInterface | null = null;\nlet mainVnode: VnodeWithDom | null = null;\nlet isMounted = false;\n\nexport const current = {\n vnode: null as Vnode | null,\n component: null as ValyrianComponent | null,\n event: null as Event | null\n};\n\nexport const reservedProps = new Set<string>([\n \"key\",\n \"state\",\n \"v-keep\",\n \"v-text\",\n \"v-if\",\n \"v-for\",\n \"v-show\",\n \"v-class\",\n \"v-html\",\n \"v-model\",\n \"v-create\",\n \"v-update\",\n \"v-cleanup\"\n]);\n\nconst onCleanupSet = new Set<Function>();\nconst onMountSet = new Set<Function>();\nconst onUpdateSet = new Set<Function>();\nconst onUnmountSet = new Set<Function>();\nexport const onMount = (callback: Function) => !isMounted && onMountSet.add(callback);\nexport const onUpdate = (callback: Function) => onUpdateSet.add(callback);\nexport const onCleanup = (callback: Function) => onCleanupSet.add(callback);\nexport const onUnmount = (callback: Function) => !isMounted && onUnmountSet.add(callback);\nconst callSet = (set: Set<Function>) => {\n for (const callback of set) {\n callback();\n }\n set.clear();\n};\n\nexport const directives: Record<string, Directive> = {\n \"v-if\": (value, vnode) => {\n if (!Boolean(value)) {\n const parentNode = vnode.dom?.parentNode;\n if (parentNode) {\n parentNode.replaceChild(document.createTextNode(\"\"), vnode.dom);\n }\n\n return false;\n }\n },\n\n \"v-show\": (value, vnode) => {\n const bool = Boolean(value);\n (\n vnode.dom as unknown as {\n style: { display: string };\n }\n ).style.display = bool ? \"\" : \"none\";\n },\n\n \"v-html\": (value, vnode) => {\n vnode.children = trust(value as string);\n },\n\n // The \"v-model\" directive binds the value of an input element to a model property\n \"v-model\": (model, vnode) => {\n // eslint-disable-next-line prefer-const\n if (\"name\" in vnode.props === false) {\n return;\n }\n\n let value;\n const property = vnode.props.name;\n let event = \"oninput\";\n\n // This function updates the model property when the input element's value changes\n let handler = (e: Event) => (model[property] = (e.target as DomElement & Record<string, any>).value);\n if (vnode.tag === \"input\") {\n // Depending on the type of input element, use a different handler function\n switch (vnode.props.type) {\n case \"checkbox\": {\n if (Array.isArray(model[property])) {\n // If the model property is an array, add or remove the value from the array when the checkbox is checked or unchecked\n handler = (e: Event) => {\n const val = (e.target as DomElement & Record<string, any>).value;\n const idx = model[property].indexOf(val);\n if (idx === -1) {\n model[property].push(val);\n } else {\n model[property].splice(idx, 1);\n }\n };\n // If the value is in the array, set the checkbox to be checked\n value = model[property].indexOf(vnode.dom.value) !== -1;\n } else if (\"value\" in vnode.props) {\n // If the input element has a \"value\" attribute, use it to determine the checked state\n handler = () => {\n if (model[property] === vnode.props.value) {\n model[property] = null;\n } else {\n model[property] = vnode.props.value;\n }\n };\n value = model[property] === vnode.props.value;\n } else {\n // If there is no \"value\" attribute, use a boolean value for the model property\n handler = () => (model[property] = !model[property]);\n value = model[property];\n }\n // Set the \"checked\" attribute on the input element\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\"checked\", value, vnode);\n break;\n }\n case \"radio\": {\n // If the element is a radio button, set the \"checked\" attribute based on the value of the model property\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\"checked\", model[property] === vnode.dom.value, vnode);\n break;\n }\n default: {\n // For all other input types, set the \"value\" attribute based on the value of the model property\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\"value\", model[property], vnode);\n }\n }\n } else if (vnode.tag === \"select\") {\n // If the element is a select element, use the \"click\" event by default\n event = \"onclick\";\n if (vnode.props.multiple) {\n // If the select element allows multiple selections, update the model property with an array of selected values\n handler = (e: Event & Record<string, any>) => {\n const val = (e.target as DomElement & Record<string, any>).value;\n if (e.ctrlKey) {\n // If the Ctrl key is pressed, add or remove the value from the array\n const idx = model[property].indexOf(val);\n if (idx === -1) {\n model[property].push(val);\n } else {\n model[property].splice(idx, 1);\n }\n } else {\n // If the Ctrl key is not pressed, set the model property to an array with the selected value\n model[property].splice(0, model[property].length);\n model[property].push(val);\n }\n };\n // Set the \"selected\" attribute on the options based on whether they are in the model property array\n vnode.children.forEach((child: VnodeWithDom) => {\n if (child.tag === \"option\") {\n const value = \"value\" in child.props ? child.props.value : child.children.join(\"\").trim();\n child.props.selected = model[property].indexOf(value) !== -1;\n }\n });\n } else {\n // If the select element does not allow multiple selections, set the \"selected\" attribute on the options based on the value of the model property\n vnode.children.forEach((child: VnodeWithDom) => {\n if (child.tag === \"option\") {\n const value = \"value\" in child.props ? child.props.value : child.children.join(\"\").trim();\n child.props.selected = value === model[property];\n }\n });\n }\n } else if (vnode.tag === \"textarea\") {\n // Set the textarea's content to the value of the model property\n vnode.children = [model[property]];\n }\n\n // We assume that the prev handler if any will not be changed by the user across patchs\n const prevHandler = vnode.props[event];\n\n // Set the event handler on the element\n // eslint-disable-next-line no-use-before-define\n sharedSetAttribute(\n event,\n (e: Event) => {\n handler(e);\n\n // If the previous handler is defined, call it after the model has been updated\n if (prevHandler) {\n prevHandler(e);\n }\n },\n vnode\n );\n },\n\n \"v-create\": (callback, vnode, oldProps) => {\n if (!oldProps) {\n const cleanup = callback(vnode);\n\n if (typeof cleanup === \"function\") {\n onCleanup(cleanup);\n }\n }\n },\n\n \"v-update\": (callback, vnode, oldProps) => {\n if (oldProps) {\n const cleanup = callback(vnode, oldProps);\n\n if (typeof cleanup === \"function\") {\n onCleanup(cleanup);\n }\n }\n },\n\n \"v-cleanup\": (callback, vnode) => {\n onCleanup(() => callback(vnode));\n },\n\n \"v-class\": (value, vnode) => {\n if (typeof value === \"string\") {\n vnode.dom.className = value;\n } else if (Array.isArray(value)) {\n vnode.dom.className = value.join(\" \");\n } else if (typeof value === \"object\") {\n const classList = vnode.dom.classList;\n for (const name in value) {\n const val = typeof value[name] === \"function\" ? (value[name] as Function)() : value[name];\n classList.toggle(name, val);\n }\n }\n },\n\n // Frequent used properties\n class(value, vnode) {\n if (vnode.dom.className !== value) {\n vnode.dom.className = value;\n }\n },\n\n className(value, vnode) {\n directives.class(value, vnode, null);\n },\n\n id: (value, vnode) => {\n vnode.dom.id = value;\n },\n\n style: (value, vnode) => {\n if (typeof value === \"string\") {\n vnode.dom.style = value;\n } else if (typeof value === \"object\") {\n vnode.dom.style = \"\";\n const domStyle = vnode.dom.style;\n for (const name in value) {\n domStyle[name] = value[name];\n }\n }\n }\n};\n\nexport function directive(name: string, directive: Directive) {\n const directiveName = `v-${name}`;\n directives[directiveName] = directive;\n reservedProps.add(directiveName);\n}\n\nexport function setPropNameReserved(name: string) {\n reservedProps.add(name);\n}\n\nconst eventListenerNames = new Set<string>();\n\nfunction eventListener(e: Event) {\n current.event = e;\n let dom = e.target as DomElement;\n const name = `on${e.type}`;\n\n while (dom) {\n const oldProps = dom.props;\n if (oldProps && oldProps[name]) {\n oldProps[name](e, dom);\n\n if (!e.defaultPrevented) {\n // eslint-disable-next-line no-use-before-define\n update();\n }\n return;\n }\n dom = dom.parentNode as DomElement;\n }\n\n current.event = null;\n}\n\nfunction sharedSetAttribute(name: string, value: any, newVnode: VnodeWithDom): void | boolean {\n const newVnodeDom = newVnode.dom;\n if (typeof value === \"function\") {\n if (!eventListenerNames.has(name)) {\n // We attach the delegated event listener to the main vnode dom element, which is the root of the component\n (mainVnode as VnodeWithDom).dom.addEventListener(name.slice(2), eventListener);\n eventListenerNames.add(name);\n }\n return;\n }\n\n if (!newVnode.isSVG && name in newVnodeDom) {\n newVnodeDom[name] = value;\n return;\n }\n\n if (value === false) {\n newVnodeDom.removeAttribute(name);\n } else {\n newVnodeDom.setAttribute(name, value);\n }\n}\n\nexport function setAttribute(name: string, value: any, newVnode: VnodeWithDom): void {\n if (!reservedProps.has(name)) {\n newVnode.props[name] = value;\n sharedSetAttribute(name, value, newVnode);\n }\n}\n\nexport function updateAttributes(newVnode: VnodeWithDom, oldProps: Properties | null): void {\n const vnodeDom = newVnode.dom;\n const vnodeProps = newVnode.props;\n\n if (oldProps) {\n for (const name in oldProps) {\n if (name in vnodeProps === false && !eventListenerNames.has(name) && !reservedProps.has(name)) {\n if (!newVnode.isSVG && name in vnodeDom) {\n vnodeDom[name] = null;\n } else {\n vnodeDom.removeAttribute(name);\n }\n }\n }\n }\n\n for (const name in vnodeProps) {\n if (directives[name]) {\n if (directives[name](vnodeProps[name], newVnode, oldProps) === false) {\n break;\n }\n continue;\n }\n\n if (!reservedProps.has(name)) {\n sharedSetAttribute(name, vnodeProps[name], newVnode);\n }\n }\n}\n\nexport function createElement(tag: string, isSVG: boolean): DomElement {\n return isSVG\n ? document.createElementNS(\"http://www.w3.org/2000/svg\", tag)\n : (document.createElement(tag) as DomElement);\n}\n\nfunction flatTree(newVnode: VnodeWithDom) {\n current.vnode = newVnode;\n\n if (\"v-for\" in newVnode.props) {\n const children = [];\n const set = newVnode.props[\"v-for\"];\n const l = set.length;\n const callback = newVnode.children[0];\n\n for (let i = 0; i < l; i++) {\n const newChild = callback(set[i], i);\n if (newChild instanceof Vnode) {\n newChild.props = newChild.props || {};\n newChild.isSVG = newVnode.isSVG || newChild.tag === \"svg\";\n }\n children[i] = newChild;\n }\n\n return children;\n }\n\n let i = 0;\n const originalChildren = newVnode.children;\n let children = originalChildren;\n\n while (i < children.length) {\n const newChild = children[i];\n\n if (newChild == null) {\n if (children === originalChildren) {\n children = [...originalChildren];\n }\n children.splice(i, 1);\n continue;\n }\n\n if (Array.isArray(newChild)) {\n if (children === originalChildren) {\n children = [...originalChildren];\n }\n children.splice(i, 1, ...newChild);\n continue;\n }\n\n if (newChild instanceof Vnode) {\n newChild.props = newChild.props || {};\n newChild.isSVG = newVnode.isSVG || newChild.tag === \"svg\";\n\n if (typeof newChild.tag !== \"string\") {\n if (children === originalChildren) {\n children = [...originalChildren];\n }\n\n const component = (current.component = newChild.tag);\n\n children[i] = (isPOJOComponent(component) ? component.view : component).bind(component)(\n newChild.props,\n newChild.children\n );\n\n continue;\n }\n }\n\n i++;\n }\n\n return children;\n}\n\nfunction createNewElement(newChild: VnodeWithDom, newVnode: VnodeWithDom, oldChild: DomElement | null) {\n const dom = createElement(newChild.tag, newChild.isSVG as boolean);\n if (oldChild) {\n newVnode.dom.replaceChild(dom, oldChild);\n } else {\n newVnode.dom.appendChild(dom);\n }\n newChild.dom = dom;\n updateAttributes(newChild, null);\n newChild.dom.props = newChild.props;\n if (\"v-text\" in newChild.props) {\n newChild.dom.textContent = newChild.props[\"v-text\"];\n return;\n }\n\n const children = flatTree(newChild);\n if (children.length === 0) {\n newChild.dom.textContent = \"\";\n return;\n }\n\n for (let i = 0, l = children.length; i < l; i++) {\n if (children[i] instanceof Vnode === false) {\n newChild.dom.appendChild(document.createTextNode(children[i]));\n continue;\n }\n createNewElement(children[i], newChild, null);\n }\n}\n\nfunction patchKeyed(newVnode: VnodeWithDom, children: Children) {\n const oldTree = [...Array.from(newVnode.dom.childNodes)] as unknown as DomElement[];\n const childNodes = newVnode.dom.childNodes;\n const oldKeyedList: Record<string, number> = {};\n const newKeyedList: Record<string, number> = {};\n\n for (let i = 0, l = oldTree.length; i < l; i++) {\n const oldProps = oldTree[i].props;\n if (oldProps) {\n oldKeyedList[oldProps.key as string] = i;\n }\n\n if (i < children.length && children[i] instanceof Vnode) {\n newKeyedList[children[i].props.key as string] = i;\n }\n }\n\n for (let i = 0, l = children.length; i < l; i++) {\n const newChild = children[i];\n const oldChild = oldTree[oldKeyedList[newChild.props.key as string]];\n\n if (!oldChild) {\n createNewElement(newChild, newVnode, childNodes[i] as DomElement | null);\n continue;\n }\n\n newChild.dom = oldChild;\n const currentChild = childNodes[i];\n if (!currentChild) {\n newVnode.dom.appendChild(oldChild);\n } else if (currentChild !== oldChild) {\n newVnode.dom.replaceChild(oldChild, currentChild);\n }\n\n if (\"v-keep\" in newChild.props === false || oldChild.props[\"v-keep\"] !== newChild.props[\"v-keep\"]) {\n updateAttributes(newChild as VnodeWithDom, oldChild.props);\n oldChild.props = newChild.props;\n\n if (\"v-text\" in newChild.props) {\n // eslint-disable-next-line eqeqeq\n if (oldChild.textContent != newChild.props[\"v-text\"]) {\n oldChild.textContent = newChild.props[\"v-text\"];\n }\n continue;\n }\n // eslint-disable-next-line no-use-before-define\n patch(newChild as VnodeWithDom);\n }\n }\n\n for (let i = children.length, l = childNodes.length; i < l; i++) {\n childNodes[i]?.remove();\n }\n}\n\n// eslint-disable-next-line complexity\nfunction patch(newVnode: VnodeWithDom): void {\n const children = flatTree(newVnode);\n\n const dom = newVnode.dom;\n\n if (children.length === 0) {\n if (dom.childNodes.length) {\n dom.textContent = \"\";\n }\n return;\n }\n\n const oldDomChildren = dom.childNodes as unknown as DomElement[];\n const oldChildrenLength = oldDomChildren.length;\n if (oldChildrenLength > 0) {\n const firstOldProps = oldDomChildren[0].props;\n const firstVnode = children[0] as VnodeWithDom;\n if (firstOldProps && firstVnode instanceof Vnode && \"key\" in firstVnode.props && \"key\" in firstOldProps) {\n patchKeyed(newVnode, children);\n return;\n }\n }\n\n const childrenLength = children.length;\n if (oldChildrenLength === 0) {\n for (let i = 0; i < childrenLength; i++) {\n if (children[i] instanceof Vnode === false) {\n dom.appendChild(document.createTextNode(children[i]));\n continue;\n }\n createNewElement(children[i], newVnode, null);\n }\n return;\n }\n\n for (let i = 0; i < childrenLength; i++) {\n const newChild = children[i] as VnodeWithDom;\n const isText = newChild instanceof Vnode === false;\n const oldChild = oldDomChildren[i];\n\n if (!oldChild) {\n if (isText) {\n newVnode.dom.appendChild(document.createTextNode(newChild as unknown as string));\n continue;\n }\n\n createNewElement(newChild as VnodeWithDom, newVnode, null);\n continue;\n }\n\n if (isText) {\n if (oldChild.nodeType !== 3) {\n newVnode.dom.replaceChild(document.createTextNode(newChild as unknown as string), oldChild);\n continue;\n }\n\n // eslint-disable-next-line eqeqeq\n if (oldChild.nodeValue != (newChild as unknown as string)) {\n oldChild.nodeValue = newChild as unknown as string;\n }\n continue;\n }\n\n if (\"v-keep\" in newChild.props) {\n if (oldChild.props && oldChild.props[\"v-keep\"] === newChild.props[\"v-keep\"]) {\n continue;\n }\n\n const nextOldChild = oldDomChildren[i + 1];\n if (nextOldChild && nextOldChild.props && nextOldChild.props[\"v-keep\"] === newChild.props[\"v-keep\"]) {\n oldChild.remove();\n continue;\n }\n }\n\n if (newChild.tag !== oldChild.nodeName.toLowerCase()) {\n createNewElement(newChild, newVnode, oldChild);\n continue;\n }\n\n newChild.dom = oldChild;\n updateAttributes(newChild, oldChild.props || null);\n oldChild.props = newChild.props;\n if (\"v-text\" in newChild.props) {\n // eslint-disable-next-line eqeqeq\n if (newChild.dom.textContent != newChild.props[\"v-text\"]) {\n newChild.dom.textContent = newChild.props[\"v-text\"];\n }\n continue;\n }\n patch(newChild);\n }\n\n for (let i = childrenLength, l = oldDomChildren.length; i < l; i++) {\n oldDomChildren[i]?.remove();\n }\n}\n\nexport function updateVnode(vnode: VnodeWithDom): string | void {\n callSet(onCleanupSet);\n vnode.props = vnode.props || {};\n patch(vnode);\n callSet(isMounted ? onUpdateSet : onMountSet);\n isMounted = true;\n current.vnode = null;\n current.component = null;\n}\n\nexport function update(): string {\n if (mainVnode) {\n mainVnode.children = [mainComponent];\n updateVnode(mainVnode as VnodeWithDom);\n if (isNodeJs) {\n return mainVnode.dom.innerHTML;\n }\n }\n return \"\";\n}\n\nlet debouncedUpdateTimeout: any;\n\nconst clearDebouncedUpdateMethod = isNodeJs ? clearTimeout : cancelAnimationFrame;\nconst setDebouncedUpdateMethod = isNodeJs ? () => setTimeout(update, 5) : () => requestAnimationFrame(update);\n\nexport function debouncedUpdate() {\n clearDebouncedUpdateMethod(debouncedUpdateTimeout);\n debouncedUpdateTimeout = setDebouncedUpdateMethod();\n}\n\nexport function unmount() {\n if (mainVnode) {\n mainComponent = v(() => null, {}) as VnodeComponentInterface;\n const result = update();\n callSet(onUnmountSet);\n for (const name in eventListenerNames) {\n mainVnode.dom.removeEventListener(name.slice(2).toLowerCase(), eventListener);\n Reflect.deleteProperty(eventListenerNames, name);\n }\n\n mainComponent = null;\n mainVnode = null;\n isMounted = false;\n current.vnode = null;\n current.component = null;\n current.event = null;\n return result;\n }\n\n return \"\";\n}\n\nexport function mount(dom: string | DomElement, component: ValyrianComponent | VnodeComponentInterface | any) {\n const container =\n typeof dom === \"string\" ? (isNodeJs ? createElement(dom, dom === \"svg\") : document.querySelector(dom)) : dom;\n\n if (isComponent(component)) {\n mainComponent = v(component, {}, []) as VnodeComponentInterface;\n } else if (isVnodeComponent(component)) {\n mainComponent = component;\n } else {\n mainComponent = v(() => component, {}, []) as VnodeComponentInterface;\n }\n\n mainVnode = hidrateDomToVnode(container) as VnodeWithDom;\n return update();\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["value", "directive", "children", "i"]
7
7
  }
package/lib/index.ts CHANGED
@@ -412,7 +412,7 @@ function sharedSetAttribute(name: string, value: any, newVnode: VnodeWithDom): v
412
412
  return;
413
413
  }
414
414
 
415
- if (name in newVnodeDom) {
415
+ if (!newVnode.isSVG && name in newVnodeDom) {
416
416
  newVnodeDom[name] = value;
417
417
  return;
418
418
  }
@@ -438,7 +438,7 @@ export function updateAttributes(newVnode: VnodeWithDom, oldProps: Properties |
438
438
  if (oldProps) {
439
439
  for (const name in oldProps) {
440
440
  if (name in vnodeProps === false && !eventListenerNames.has(name) && !reservedProps.has(name)) {
441
- if (name in vnodeDom) {
441
+ if (!newVnode.isSVG && name in vnodeDom) {
442
442
  vnodeDom[name] = null;
443
443
  } else {
444
444
  vnodeDom.removeAttribute(name);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "valyrian.js",
3
- "version": "8.0.2",
3
+ "version": "8.0.3",
4
4
  "description": "Lightweight steel to forge PWAs. (Minimal Frontend Framework with server side rendering and other capabilities)",
5
5
  "repository": "git@github.com:Masquerade-Circus/valyrian.js.git",
6
6
  "author": "Masquerade <christian@masquerade-circus.net>",