1 line
3.4 MiB
1 line
3.4 MiB
{"version":3,"file":"bundle.js","sources":["../../builder/node_modules/svelte/internal/index.mjs","../../builder/src/common/Button.svelte","../../builder/node_modules/lodash/lodash.min.js","../../builder/node_modules/lodash/fp/_mapping.js","../../builder/node_modules/lodash/fp/placeholder.js","../../builder/node_modules/lodash/fp/_baseConvert.js","../../builder/node_modules/lodash/fp.js","../../builder/node_modules/shortid/lib/random/random-from-seed.js","../../builder/node_modules/shortid/lib/alphabet.js","../../builder/node_modules/shortid/lib/random/random-byte-browser.js","../../builder/node_modules/nanoid/format.js","../../builder/node_modules/shortid/lib/generate.js","../../builder/node_modules/shortid/lib/build.js","../../builder/node_modules/shortid/lib/is-valid.js","../../builder/node_modules/shortid/lib/index.js","../../builder/node_modules/shortid/index.js","../../builder/node_modules/lodash/lodash.js","../../builder/node_modules/rollup-plugin-node-globals/src/global.js","../../builder/node_modules/@nx-js/compiler-util/dist/es.es5.js","../../builder/node_modules/lunr/lunr.js","../../builder/node_modules/buffer-es6/base64.js","../../builder/node_modules/buffer-es6/ieee754.js","../../builder/node_modules/buffer-es6/isArray.js","../../builder/node_modules/buffer-es6/index.js","../../builder/node_modules/safe-buffer/index.js","../../builder/node_modules/budibase-core/budibase-core.esm.mjs","../../builder/src/common/core.js","../../builder/src/builderStore/store.js","../../builder/src/builderStore/index.js","../../builder/node_modules/svelte/store/index.mjs","../../builder/src/NoPackage.svelte","../../builder/node_modules/feather-icons/dist/feather.js","../../builder/src/common/icon.js","../../builder/src/nav/NavItem.svelte","../../builder/src/nav/Nav.svelte","../../builder/src/database/HierarchyRow.svelte","../../builder/src/common/Textbox.svelte","../../builder/src/common/Dropdown.svelte","../../builder/src/common/ButtonGroup.svelte","../../builder/src/common/NumberBox.svelte","../../builder/src/common/ValuesList.svelte","../../builder/src/common/ErrorsBox.svelte","../../builder/src/common/Checkbox.svelte","../../builder/node_modules/flatpickr/dist/flatpickr.js","../../builder/src/common/DatePicker.svelte","../../builder/src/database/FieldView.svelte","../../builder/node_modules/uikit/dist/js/uikit.js","../../builder/src/common/Modal.svelte","../../builder/src/database/RecordView.svelte","../../builder/src/common/CodeArea.svelte","../../builder/src/database/IndexView.svelte","../../builder/src/database/ActionsHeader.svelte","../../builder/src/common/DropdownButton.svelte","../../builder/src/database/DatabaseRoot.svelte","../../builder/src/common/ComingSoon.svelte","../../builder/src/actionsAndTriggers/ActionView.svelte","../../builder/src/actionsAndTriggers/Actions.svelte","../../builder/src/actionsAndTriggers/TriggerView.svelte","../../builder/src/actionsAndTriggers/Triggers.svelte","../../builder/src/actionsAndTriggers/ActionsAndTriggersRoot.svelte","../../builder/src/accessLevels/AccessLevelView.svelte","../../builder/src/accessLevels/AccessLevelsRoot.svelte","../../builder/src/PackageRoot.svelte","../../builder/src/App.svelte","../../builder/node_modules/uikit/dist/js/uikit.min.js","../../builder/src/main.js"],"sourcesContent":["function noop() { }\nconst identity = x => x;\nfunction assign(tar, src) {\n // @ts-ignore\n for (const k in src)\n tar[k] = src[k];\n return tar;\n}\nfunction is_promise(value) {\n return value && typeof value === 'object' && typeof value.then === 'function';\n}\nfunction add_location(element, file, line, column, char) {\n element.__svelte_meta = {\n loc: { file, line, column, char }\n };\n}\nfunction run(fn) {\n return fn();\n}\nfunction blank_object() {\n return Object.create(null);\n}\nfunction run_all(fns) {\n fns.forEach(run);\n}\nfunction is_function(thing) {\n return typeof thing === 'function';\n}\nfunction safe_not_equal(a, b) {\n return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');\n}\nfunction not_equal(a, b) {\n return a != a ? b == b : a !== b;\n}\nfunction validate_store(store, name) {\n if (!store || typeof store.subscribe !== 'function') {\n throw new Error(`'${name}' is not a store with a 'subscribe' method`);\n }\n}\nfunction subscribe(component, store, callback) {\n const unsub = store.subscribe(callback);\n component.$$.on_destroy.push(unsub.unsubscribe\n ? () => unsub.unsubscribe()\n : unsub);\n}\nfunction create_slot(definition, ctx, fn) {\n if (definition) {\n const slot_ctx = get_slot_context(definition, ctx, fn);\n return definition[0](slot_ctx);\n }\n}\nfunction get_slot_context(definition, ctx, fn) {\n return definition[1]\n ? assign({}, assign(ctx.$$scope.ctx, definition[1](fn ? fn(ctx) : {})))\n : ctx.$$scope.ctx;\n}\nfunction get_slot_changes(definition, ctx, changed, fn) {\n return definition[1]\n ? assign({}, assign(ctx.$$scope.changed || {}, definition[1](fn ? fn(changed) : {})))\n : ctx.$$scope.changed || {};\n}\nfunction exclude_internal_props(props) {\n const result = {};\n for (const k in props)\n if (k[0] !== '$')\n result[k] = props[k];\n return result;\n}\nfunction once(fn) {\n let ran = false;\n return function (...args) {\n if (ran)\n return;\n ran = true;\n fn.call(this, ...args);\n };\n}\n\nconst is_client = typeof window !== 'undefined';\nlet now = is_client\n ? () => window.performance.now()\n : () => Date.now();\nlet raf = cb => requestAnimationFrame(cb);\n// used internally for testing\nfunction set_now(fn) {\n now = fn;\n}\nfunction set_raf(fn) {\n raf = fn;\n}\n\nconst tasks = new Set();\nlet running = false;\nfunction run_tasks() {\n tasks.forEach(task => {\n if (!task[0](now())) {\n tasks.delete(task);\n task[1]();\n }\n });\n running = tasks.size > 0;\n if (running)\n raf(run_tasks);\n}\nfunction clear_loops() {\n // for testing...\n tasks.forEach(task => tasks.delete(task));\n running = false;\n}\nfunction loop(fn) {\n let task;\n if (!running) {\n running = true;\n raf(run_tasks);\n }\n return {\n promise: new Promise(fulfil => {\n tasks.add(task = [fn, fulfil]);\n }),\n abort() {\n tasks.delete(task);\n }\n };\n}\n\nfunction append(target, node) {\n target.appendChild(node);\n}\nfunction insert(target, node, anchor) {\n target.insertBefore(node, anchor || null);\n}\nfunction detach(node) {\n node.parentNode.removeChild(node);\n}\nfunction detach_between(before, after) {\n while (before.nextSibling && before.nextSibling !== after) {\n before.parentNode.removeChild(before.nextSibling);\n }\n}\nfunction detach_before(after) {\n while (after.previousSibling) {\n after.parentNode.removeChild(after.previousSibling);\n }\n}\nfunction detach_after(before) {\n while (before.nextSibling) {\n before.parentNode.removeChild(before.nextSibling);\n }\n}\nfunction destroy_each(iterations, detaching) {\n for (let i = 0; i < iterations.length; i += 1) {\n if (iterations[i])\n iterations[i].d(detaching);\n }\n}\nfunction element(name) {\n return document.createElement(name);\n}\nfunction object_without_properties(obj, exclude) {\n // eslint-disable-next-line @typescript-eslint/no-object-literal-type-assertion\n const target = {};\n for (const k in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, k)\n // @ts-ignore\n && exclude.indexOf(k) === -1) {\n // @ts-ignore\n target[k] = obj[k];\n }\n }\n return target;\n}\nfunction svg_element(name) {\n return document.createElementNS('http://www.w3.org/2000/svg', name);\n}\nfunction text(data) {\n return document.createTextNode(data);\n}\nfunction space() {\n return text(' ');\n}\nfunction empty() {\n return text('');\n}\nfunction listen(node, event, handler, options) {\n node.addEventListener(event, handler, options);\n return () => node.removeEventListener(event, handler, options);\n}\nfunction prevent_default(fn) {\n return function (event) {\n event.preventDefault();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction stop_propagation(fn) {\n return function (event) {\n event.stopPropagation();\n // @ts-ignore\n return fn.call(this, event);\n };\n}\nfunction attr(node, attribute, value) {\n if (value == null)\n node.removeAttribute(attribute);\n else\n node.setAttribute(attribute, value);\n}\nfunction set_attributes(node, attributes) {\n for (const key in attributes) {\n if (key === 'style') {\n node.style.cssText = attributes[key];\n }\n else if (key in node) {\n node[key] = attributes[key];\n }\n else {\n attr(node, key, attributes[key]);\n }\n }\n}\nfunction set_custom_element_data(node, prop, value) {\n if (prop in node) {\n node[prop] = value;\n }\n else {\n attr(node, prop, value);\n }\n}\nfunction xlink_attr(node, attribute, value) {\n node.setAttributeNS('http://www.w3.org/1999/xlink', attribute, value);\n}\nfunction get_binding_group_value(group) {\n const value = [];\n for (let i = 0; i < group.length; i += 1) {\n if (group[i].checked)\n value.push(group[i].__value);\n }\n return value;\n}\nfunction to_number(value) {\n return value === '' ? undefined : +value;\n}\nfunction time_ranges_to_array(ranges) {\n const array = [];\n for (let i = 0; i < ranges.length; i += 1) {\n array.push({ start: ranges.start(i), end: ranges.end(i) });\n }\n return array;\n}\nfunction children(element) {\n return Array.from(element.childNodes);\n}\nfunction claim_element(nodes, name, attributes, svg) {\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeName === name) {\n for (let j = 0; j < node.attributes.length; j += 1) {\n const attribute = node.attributes[j];\n if (!attributes[attribute.name])\n node.removeAttribute(attribute.name);\n }\n return nodes.splice(i, 1)[0]; // TODO strip unwanted attributes\n }\n }\n return svg ? svg_element(name) : element(name);\n}\nfunction claim_text(nodes, data) {\n for (let i = 0; i < nodes.length; i += 1) {\n const node = nodes[i];\n if (node.nodeType === 3) {\n node.data = data;\n return nodes.splice(i, 1)[0];\n }\n }\n return text(data);\n}\nfunction set_data(text, data) {\n data = '' + data;\n if (text.data !== data)\n text.data = data;\n}\nfunction set_input_type(input, type) {\n try {\n input.type = type;\n }\n catch (e) {\n // do nothing\n }\n}\nfunction set_style(node, key, value) {\n node.style.setProperty(key, value);\n}\nfunction select_option(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n if (option.__value === value) {\n option.selected = true;\n return;\n }\n }\n}\nfunction select_options(select, value) {\n for (let i = 0; i < select.options.length; i += 1) {\n const option = select.options[i];\n option.selected = ~value.indexOf(option.__value);\n }\n}\nfunction select_value(select) {\n const selected_option = select.querySelector(':checked') || select.options[0];\n return selected_option && selected_option.__value;\n}\nfunction select_multiple_value(select) {\n return [].map.call(select.querySelectorAll(':checked'), option => option.__value);\n}\nfunction add_resize_listener(element, fn) {\n if (getComputedStyle(element).position === 'static') {\n element.style.position = 'relative';\n }\n const object = document.createElement('object');\n object.setAttribute('style', 'display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden; pointer-events: none; z-index: -1;');\n object.type = 'text/html';\n object.tabIndex = -1;\n let win;\n object.onload = () => {\n win = object.contentDocument.defaultView;\n win.addEventListener('resize', fn);\n };\n if (/Trident/.test(navigator.userAgent)) {\n element.appendChild(object);\n object.data = 'about:blank';\n }\n else {\n object.data = 'about:blank';\n element.appendChild(object);\n }\n return {\n cancel: () => {\n win && win.removeEventListener && win.removeEventListener('resize', fn);\n element.removeChild(object);\n }\n };\n}\nfunction toggle_class(element, name, toggle) {\n element.classList[toggle ? 'add' : 'remove'](name);\n}\nfunction custom_event(type, detail) {\n const e = document.createEvent('CustomEvent');\n e.initCustomEvent(type, false, false, detail);\n return e;\n}\n\nlet stylesheet;\nlet active = 0;\nlet current_rules = {};\n// https://github.com/darkskyapp/string-hash/blob/master/index.js\nfunction hash(str) {\n let hash = 5381;\n let i = str.length;\n while (i--)\n hash = ((hash << 5) - hash) ^ str.charCodeAt(i);\n return hash >>> 0;\n}\nfunction create_rule(node, a, b, duration, delay, ease, fn, uid = 0) {\n const step = 16.666 / duration;\n let keyframes = '{\\n';\n for (let p = 0; p <= 1; p += step) {\n const t = a + (b - a) * ease(p);\n keyframes += p * 100 + `%{${fn(t, 1 - t)}}\\n`;\n }\n const rule = keyframes + `100% {${fn(b, 1 - b)}}\\n}`;\n const name = `__svelte_${hash(rule)}_${uid}`;\n if (!current_rules[name]) {\n if (!stylesheet) {\n const style = element('style');\n document.head.appendChild(style);\n stylesheet = style.sheet;\n }\n current_rules[name] = true;\n stylesheet.insertRule(`@keyframes ${name} ${rule}`, stylesheet.cssRules.length);\n }\n const animation = node.style.animation || '';\n node.style.animation = `${animation ? `${animation}, ` : ``}${name} ${duration}ms linear ${delay}ms 1 both`;\n active += 1;\n return name;\n}\nfunction delete_rule(node, name) {\n node.style.animation = (node.style.animation || '')\n .split(', ')\n .filter(name\n ? anim => anim.indexOf(name) < 0 // remove specific animation\n : anim => anim.indexOf('__svelte') === -1 // remove all Svelte animations\n )\n .join(', ');\n if (name && !--active)\n clear_rules();\n}\nfunction clear_rules() {\n raf(() => {\n if (active)\n return;\n let i = stylesheet.cssRules.length;\n while (i--)\n stylesheet.deleteRule(i);\n current_rules = {};\n });\n}\n\nfunction create_animation(node, from, fn, params) {\n if (!from)\n return noop;\n const to = node.getBoundingClientRect();\n if (from.left === to.left && from.right === to.right && from.top === to.top && from.bottom === to.bottom)\n return noop;\n const { delay = 0, duration = 300, easing = identity, \n // @ts-ignore todo: should this be separated from destructuring? Or start/end added to public api and documentation?\n start: start_time = now() + delay, \n // @ts-ignore todo:\n end = start_time + duration, tick = noop, css } = fn(node, { from, to }, params);\n let running = true;\n let started = false;\n let name;\n function start() {\n if (css) {\n name = create_rule(node, 0, 1, duration, delay, easing, css);\n }\n if (!delay) {\n started = true;\n }\n }\n function stop() {\n if (css)\n delete_rule(node, name);\n running = false;\n }\n loop(now => {\n if (!started && now >= start_time) {\n started = true;\n }\n if (started && now >= end) {\n tick(1, 0);\n stop();\n }\n if (!running) {\n return false;\n }\n if (started) {\n const p = now - start_time;\n const t = 0 + 1 * easing(p / duration);\n tick(t, 1 - t);\n }\n return true;\n });\n start();\n tick(0, 1);\n return stop;\n}\nfunction fix_position(node) {\n const style = getComputedStyle(node);\n if (style.position !== 'absolute' && style.position !== 'fixed') {\n const { width, height } = style;\n const a = node.getBoundingClientRect();\n node.style.position = 'absolute';\n node.style.width = width;\n node.style.height = height;\n add_transform(node, a);\n }\n}\nfunction add_transform(node, a) {\n const b = node.getBoundingClientRect();\n if (a.left !== b.left || a.top !== b.top) {\n const style = getComputedStyle(node);\n const transform = style.transform === 'none' ? '' : style.transform;\n node.style.transform = `${transform} translate(${a.left - b.left}px, ${a.top - b.top}px)`;\n }\n}\n\nlet current_component;\nfunction set_current_component(component) {\n current_component = component;\n}\nfunction get_current_component() {\n if (!current_component)\n throw new Error(`Function called outside component initialization`);\n return current_component;\n}\nfunction beforeUpdate(fn) {\n get_current_component().$$.before_update.push(fn);\n}\nfunction onMount(fn) {\n get_current_component().$$.on_mount.push(fn);\n}\nfunction afterUpdate(fn) {\n get_current_component().$$.after_update.push(fn);\n}\nfunction onDestroy(fn) {\n get_current_component().$$.on_destroy.push(fn);\n}\nfunction createEventDispatcher() {\n const component = current_component;\n return (type, detail) => {\n const callbacks = component.$$.callbacks[type];\n if (callbacks) {\n // TODO are there situations where events could be dispatched\n // in a server (non-DOM) environment?\n const event = custom_event(type, detail);\n callbacks.slice().forEach(fn => {\n fn.call(component, event);\n });\n }\n };\n}\nfunction setContext(key, context) {\n get_current_component().$$.context.set(key, context);\n}\nfunction getContext(key) {\n return get_current_component().$$.context.get(key);\n}\n// TODO figure out if we still want to support\n// shorthand events, or if we want to implement\n// a real bubbling mechanism\nfunction bubble(component, event) {\n const callbacks = component.$$.callbacks[event.type];\n if (callbacks) {\n callbacks.slice().forEach(fn => fn(event));\n }\n}\n\nconst dirty_components = [];\nconst intros = { enabled: false };\nconst binding_callbacks = [];\nconst render_callbacks = [];\nconst flush_callbacks = [];\nconst resolved_promise = Promise.resolve();\nlet update_scheduled = false;\nfunction schedule_update() {\n if (!update_scheduled) {\n update_scheduled = true;\n resolved_promise.then(flush);\n }\n}\nfunction tick() {\n schedule_update();\n return resolved_promise;\n}\nfunction add_render_callback(fn) {\n render_callbacks.push(fn);\n}\nfunction add_flush_callback(fn) {\n flush_callbacks.push(fn);\n}\nfunction flush() {\n const seen_callbacks = new Set();\n do {\n // first, call beforeUpdate functions\n // and update components\n while (dirty_components.length) {\n const component = dirty_components.shift();\n set_current_component(component);\n update(component.$$);\n }\n while (binding_callbacks.length)\n binding_callbacks.pop()();\n // then, once components are updated, call\n // afterUpdate functions. This may cause\n // subsequent updates...\n for (let i = 0; i < render_callbacks.length; i += 1) {\n const callback = render_callbacks[i];\n if (!seen_callbacks.has(callback)) {\n callback();\n // ...so guard against infinite loops\n seen_callbacks.add(callback);\n }\n }\n render_callbacks.length = 0;\n } while (dirty_components.length);\n while (flush_callbacks.length) {\n flush_callbacks.pop()();\n }\n update_scheduled = false;\n}\nfunction update($$) {\n if ($$.fragment) {\n $$.update($$.dirty);\n run_all($$.before_update);\n $$.fragment.p($$.dirty, $$.ctx);\n $$.dirty = null;\n $$.after_update.forEach(add_render_callback);\n }\n}\n\nlet promise;\nfunction wait() {\n if (!promise) {\n promise = Promise.resolve();\n promise.then(() => {\n promise = null;\n });\n }\n return promise;\n}\nfunction dispatch(node, direction, kind) {\n node.dispatchEvent(custom_event(`${direction ? 'intro' : 'outro'}${kind}`));\n}\nconst outroing = new Set();\nlet outros;\nfunction group_outros() {\n outros = {\n r: 0,\n c: [],\n p: outros // parent group\n };\n}\nfunction check_outros() {\n if (!outros.r) {\n run_all(outros.c);\n }\n outros = outros.p;\n}\nfunction transition_in(block, local) {\n if (block && block.i) {\n outroing.delete(block);\n block.i(local);\n }\n}\nfunction transition_out(block, local, detach, callback) {\n if (block && block.o) {\n if (outroing.has(block))\n return;\n outroing.add(block);\n outros.c.push(() => {\n outroing.delete(block);\n if (callback) {\n if (detach)\n block.d(1);\n callback();\n }\n });\n block.o(local);\n }\n}\nfunction create_in_transition(node, fn, params) {\n let config = fn(node, params);\n let running = false;\n let animation_name;\n let task;\n let uid = 0;\n function cleanup() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config;\n if (css)\n animation_name = create_rule(node, 0, 1, duration, delay, easing, css, uid++);\n tick(0, 1);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n if (task)\n task.abort();\n running = true;\n add_render_callback(() => dispatch(node, true, 'start'));\n task = loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(1, 0);\n dispatch(node, true, 'end');\n cleanup();\n return running = false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(t, 1 - t);\n }\n }\n return running;\n });\n }\n let started = false;\n return {\n start() {\n if (started)\n return;\n delete_rule(node);\n if (is_function(config)) {\n config = config();\n wait().then(go);\n }\n else {\n go();\n }\n },\n invalidate() {\n started = false;\n },\n end() {\n if (running) {\n cleanup();\n running = false;\n }\n }\n };\n}\nfunction create_out_transition(node, fn, params) {\n let config = fn(node, params);\n let running = true;\n let animation_name;\n const group = outros;\n group.r += 1;\n function go() {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config;\n if (css)\n animation_name = create_rule(node, 1, 0, duration, delay, easing, css);\n const start_time = now() + delay;\n const end_time = start_time + duration;\n add_render_callback(() => dispatch(node, false, 'start'));\n loop(now => {\n if (running) {\n if (now >= end_time) {\n tick(0, 1);\n dispatch(node, false, 'end');\n if (!--group.r) {\n // this will result in `end()` being called,\n // so we don't need to clean up here\n run_all(group.c);\n }\n return false;\n }\n if (now >= start_time) {\n const t = easing((now - start_time) / duration);\n tick(1 - t, t);\n }\n }\n return running;\n });\n }\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go();\n });\n }\n else {\n go();\n }\n return {\n end(reset) {\n if (reset && config.tick) {\n config.tick(1, 0);\n }\n if (running) {\n if (animation_name)\n delete_rule(node, animation_name);\n running = false;\n }\n }\n };\n}\nfunction create_bidirectional_transition(node, fn, params, intro) {\n let config = fn(node, params);\n let t = intro ? 0 : 1;\n let running_program = null;\n let pending_program = null;\n let animation_name = null;\n function clear_animation() {\n if (animation_name)\n delete_rule(node, animation_name);\n }\n function init(program, duration) {\n const d = program.b - t;\n duration *= Math.abs(d);\n return {\n a: t,\n b: program.b,\n d,\n duration,\n start: program.start,\n end: program.start + duration,\n group: program.group\n };\n }\n function go(b) {\n const { delay = 0, duration = 300, easing = identity, tick = noop, css } = config;\n const program = {\n start: now() + delay,\n b\n };\n if (!b) {\n // @ts-ignore todo: improve typings\n program.group = outros;\n outros.r += 1;\n }\n if (running_program) {\n pending_program = program;\n }\n else {\n // if this is an intro, and there's a delay, we need to do\n // an initial tick and/or apply CSS animation immediately\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, b, duration, delay, easing, css);\n }\n if (b)\n tick(0, 1);\n running_program = init(program, duration);\n add_render_callback(() => dispatch(node, b, 'start'));\n loop(now => {\n if (pending_program && now > pending_program.start) {\n running_program = init(pending_program, duration);\n pending_program = null;\n dispatch(node, running_program.b, 'start');\n if (css) {\n clear_animation();\n animation_name = create_rule(node, t, running_program.b, running_program.duration, 0, easing, config.css);\n }\n }\n if (running_program) {\n if (now >= running_program.end) {\n tick(t = running_program.b, 1 - t);\n dispatch(node, running_program.b, 'end');\n if (!pending_program) {\n // we're done\n if (running_program.b) {\n // intro — we can tidy up immediately\n clear_animation();\n }\n else {\n // outro — needs to be coordinated\n if (!--running_program.group.r)\n run_all(running_program.group.c);\n }\n }\n running_program = null;\n }\n else if (now >= running_program.start) {\n const p = now - running_program.start;\n t = running_program.a + running_program.d * easing(p / running_program.duration);\n tick(t, 1 - t);\n }\n }\n return !!(running_program || pending_program);\n });\n }\n }\n return {\n run(b) {\n if (is_function(config)) {\n wait().then(() => {\n // @ts-ignore\n config = config();\n go(b);\n });\n }\n else {\n go(b);\n }\n },\n end() {\n clear_animation();\n running_program = pending_program = null;\n }\n };\n}\n\nfunction handle_promise(promise, info) {\n const token = info.token = {};\n function update(type, index, key, value) {\n if (info.token !== token)\n return;\n info.resolved = key && { [key]: value };\n const child_ctx = assign(assign({}, info.ctx), info.resolved);\n const block = type && (info.current = type)(child_ctx);\n if (info.block) {\n if (info.blocks) {\n info.blocks.forEach((block, i) => {\n if (i !== index && block) {\n group_outros();\n transition_out(block, 1, 1, () => {\n info.blocks[i] = null;\n });\n check_outros();\n }\n });\n }\n else {\n info.block.d(1);\n }\n block.c();\n transition_in(block, 1);\n block.m(info.mount(), info.anchor);\n flush();\n }\n info.block = block;\n if (info.blocks)\n info.blocks[index] = block;\n }\n if (is_promise(promise)) {\n promise.then(value => {\n update(info.then, 1, info.value, value);\n }, error => {\n update(info.catch, 2, info.error, error);\n });\n // if we previously had a then/catch block, destroy it\n if (info.current !== info.pending) {\n update(info.pending, 0);\n return true;\n }\n }\n else {\n if (info.current !== info.then) {\n update(info.then, 1, info.value, promise);\n return true;\n }\n info.resolved = { [info.value]: promise };\n }\n}\n\nconst globals = (typeof window !== 'undefined' ? window : global);\n\nfunction destroy_block(block, lookup) {\n block.d(1);\n lookup.delete(block.key);\n}\nfunction outro_and_destroy_block(block, lookup) {\n transition_out(block, 1, 1, () => {\n lookup.delete(block.key);\n });\n}\nfunction fix_and_destroy_block(block, lookup) {\n block.f();\n destroy_block(block, lookup);\n}\nfunction fix_and_outro_and_destroy_block(block, lookup) {\n block.f();\n outro_and_destroy_block(block, lookup);\n}\nfunction update_keyed_each(old_blocks, changed, get_key, dynamic, ctx, list, lookup, node, destroy, create_each_block, next, get_context) {\n let o = old_blocks.length;\n let n = list.length;\n let i = o;\n const old_indexes = {};\n while (i--)\n old_indexes[old_blocks[i].key] = i;\n const new_blocks = [];\n const new_lookup = new Map();\n const deltas = new Map();\n i = n;\n while (i--) {\n const child_ctx = get_context(ctx, list, i);\n const key = get_key(child_ctx);\n let block = lookup.get(key);\n if (!block) {\n block = create_each_block(key, child_ctx);\n block.c();\n }\n else if (dynamic) {\n block.p(changed, child_ctx);\n }\n new_lookup.set(key, new_blocks[i] = block);\n if (key in old_indexes)\n deltas.set(key, Math.abs(i - old_indexes[key]));\n }\n const will_move = new Set();\n const did_move = new Set();\n function insert(block) {\n transition_in(block, 1);\n block.m(node, next);\n lookup.set(block.key, block);\n next = block.first;\n n--;\n }\n while (o && n) {\n const new_block = new_blocks[n - 1];\n const old_block = old_blocks[o - 1];\n const new_key = new_block.key;\n const old_key = old_block.key;\n if (new_block === old_block) {\n // do nothing\n next = new_block.first;\n o--;\n n--;\n }\n else if (!new_lookup.has(old_key)) {\n // remove old block\n destroy(old_block, lookup);\n o--;\n }\n else if (!lookup.has(new_key) || will_move.has(new_key)) {\n insert(new_block);\n }\n else if (did_move.has(old_key)) {\n o--;\n }\n else if (deltas.get(new_key) > deltas.get(old_key)) {\n did_move.add(new_key);\n insert(new_block);\n }\n else {\n will_move.add(old_key);\n o--;\n }\n }\n while (o--) {\n const old_block = old_blocks[o];\n if (!new_lookup.has(old_block.key))\n destroy(old_block, lookup);\n }\n while (n)\n insert(new_blocks[n - 1]);\n return new_blocks;\n}\nfunction measure(blocks) {\n const rects = {};\n let i = blocks.length;\n while (i--)\n rects[blocks[i].key] = blocks[i].node.getBoundingClientRect();\n return rects;\n}\n\nfunction get_spread_update(levels, updates) {\n const update = {};\n const to_null_out = {};\n const accounted_for = { $$scope: 1 };\n let i = levels.length;\n while (i--) {\n const o = levels[i];\n const n = updates[i];\n if (n) {\n for (const key in o) {\n if (!(key in n))\n to_null_out[key] = 1;\n }\n for (const key in n) {\n if (!accounted_for[key]) {\n update[key] = n[key];\n accounted_for[key] = 1;\n }\n }\n levels[i] = n;\n }\n else {\n for (const key in o) {\n accounted_for[key] = 1;\n }\n }\n }\n for (const key in to_null_out) {\n if (!(key in update))\n update[key] = undefined;\n }\n return update;\n}\n\nconst invalid_attribute_name_character = /[\\s'\">/=\\u{FDD0}-\\u{FDEF}\\u{FFFE}\\u{FFFF}\\u{1FFFE}\\u{1FFFF}\\u{2FFFE}\\u{2FFFF}\\u{3FFFE}\\u{3FFFF}\\u{4FFFE}\\u{4FFFF}\\u{5FFFE}\\u{5FFFF}\\u{6FFFE}\\u{6FFFF}\\u{7FFFE}\\u{7FFFF}\\u{8FFFE}\\u{8FFFF}\\u{9FFFE}\\u{9FFFF}\\u{AFFFE}\\u{AFFFF}\\u{BFFFE}\\u{BFFFF}\\u{CFFFE}\\u{CFFFF}\\u{DFFFE}\\u{DFFFF}\\u{EFFFE}\\u{EFFFF}\\u{FFFFE}\\u{FFFFF}\\u{10FFFE}\\u{10FFFF}]/u;\n// https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n// https://infra.spec.whatwg.org/#noncharacter\nfunction spread(args) {\n const attributes = Object.assign({}, ...args);\n let str = '';\n Object.keys(attributes).forEach(name => {\n if (invalid_attribute_name_character.test(name))\n return;\n const value = attributes[name];\n if (value === undefined)\n return;\n if (value === true)\n str += \" \" + name;\n const escaped = String(value)\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n str += \" \" + name + \"=\" + JSON.stringify(escaped);\n });\n return str;\n}\nconst escaped = {\n '\"': '"',\n \"'\": ''',\n '&': '&',\n '<': '<',\n '>': '>'\n};\nfunction escape(html) {\n return String(html).replace(/[\"'&<>]/g, match => escaped[match]);\n}\nfunction each(items, fn) {\n let str = '';\n for (let i = 0; i < items.length; i += 1) {\n str += fn(items[i], i);\n }\n return str;\n}\nconst missing_component = {\n $$render: () => ''\n};\nfunction validate_component(component, name) {\n if (!component || !component.$$render) {\n if (name === 'svelte:component')\n name += ' this={...}';\n throw new Error(`<${name}> is not a valid SSR component. You may need to review your build config to ensure that dependencies are compiled, rather than imported as pre-compiled modules`);\n }\n return component;\n}\nfunction debug(file, line, column, values) {\n console.log(`{@debug} ${file ? file + ' ' : ''}(${line}:${column})`); // eslint-disable-line no-console\n console.log(values); // eslint-disable-line no-console\n return '';\n}\nlet on_destroy;\nfunction create_ssr_component(fn) {\n function $$render(result, props, bindings, slots) {\n const parent_component = current_component;\n const $$ = {\n on_destroy,\n context: new Map(parent_component ? parent_component.$$.context : []),\n // these will be immediately discarded\n on_mount: [],\n before_update: [],\n after_update: [],\n callbacks: blank_object()\n };\n set_current_component({ $$ });\n const html = fn(result, props, bindings, slots);\n set_current_component(parent_component);\n return html;\n }\n return {\n render: (props = {}, options = {}) => {\n on_destroy = [];\n const result = { head: '', css: new Set() };\n const html = $$render(result, props, {}, options);\n run_all(on_destroy);\n return {\n html,\n css: {\n code: Array.from(result.css).map(css => css.code).join('\\n'),\n map: null // TODO\n },\n head: result.head\n };\n },\n $$render\n };\n}\n/**\n * Get the current value from a store by subscribing and immediately unsubscribing.\n * @param store readable\n */\nfunction get_store_value(store) {\n let value;\n const unsubscribe = store.subscribe(_ => value = _);\n if (unsubscribe.unsubscribe)\n unsubscribe.unsubscribe();\n else\n unsubscribe();\n return value;\n}\nfunction add_attribute(name, value) {\n if (!value)\n return '';\n return ` ${name}${value === true ? '' : `=${typeof value === 'string' ? JSON.stringify(value) : `\"${value}\"`}`}`;\n}\nfunction add_classes(classes) {\n return classes ? ` class=\"${classes}\"` : ``;\n}\n\nfunction bind(component, name, callback) {\n if (component.$$.props.indexOf(name) === -1)\n return;\n component.$$.bound[name] = callback;\n callback(component.$$.ctx[name]);\n}\nfunction mount_component(component, target, anchor) {\n const { fragment, on_mount, on_destroy, after_update } = component.$$;\n fragment.m(target, anchor);\n // onMount happens before the initial afterUpdate\n add_render_callback(() => {\n const new_on_destroy = on_mount.map(run).filter(is_function);\n if (on_destroy) {\n on_destroy.push(...new_on_destroy);\n }\n else {\n // Edge case - component was destroyed immediately,\n // most likely as a result of a binding initialising\n run_all(new_on_destroy);\n }\n component.$$.on_mount = [];\n });\n after_update.forEach(add_render_callback);\n}\nfunction destroy_component(component, detaching) {\n if (component.$$.fragment) {\n run_all(component.$$.on_destroy);\n component.$$.fragment.d(detaching);\n // TODO null out other refs, including component.$$ (but need to\n // preserve final state?)\n component.$$.on_destroy = component.$$.fragment = null;\n component.$$.ctx = {};\n }\n}\nfunction make_dirty(component, key) {\n if (!component.$$.dirty) {\n dirty_components.push(component);\n schedule_update();\n component.$$.dirty = blank_object();\n }\n component.$$.dirty[key] = true;\n}\nfunction init(component, options, instance, create_fragment, not_equal, prop_names) {\n const parent_component = current_component;\n set_current_component(component);\n const props = options.props || {};\n const $$ = component.$$ = {\n fragment: null,\n ctx: null,\n // state\n props: prop_names,\n update: noop,\n not_equal,\n bound: blank_object(),\n // lifecycle\n on_mount: [],\n on_destroy: [],\n before_update: [],\n after_update: [],\n context: new Map(parent_component ? parent_component.$$.context : []),\n // everything else\n callbacks: blank_object(),\n dirty: null\n };\n let ready = false;\n $$.ctx = instance\n ? instance(component, props, (key, value) => {\n if ($$.ctx && not_equal($$.ctx[key], $$.ctx[key] = value)) {\n if ($$.bound[key])\n $$.bound[key](value);\n if (ready)\n make_dirty(component, key);\n }\n })\n : props;\n $$.update();\n ready = true;\n run_all($$.before_update);\n $$.fragment = create_fragment($$.ctx);\n if (options.target) {\n if (options.hydrate) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment.l(children(options.target));\n }\n else {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n $$.fragment.c();\n }\n if (options.intro)\n transition_in(component.$$.fragment);\n mount_component(component, options.target, options.anchor);\n flush();\n }\n set_current_component(parent_component);\n}\nlet SvelteElement;\nif (typeof HTMLElement !== 'undefined') {\n SvelteElement = class extends HTMLElement {\n constructor() {\n super();\n this.attachShadow({ mode: 'open' });\n }\n connectedCallback() {\n // @ts-ignore todo: improve typings\n for (const key in this.$$.slotted) {\n // @ts-ignore todo: improve typings\n this.appendChild(this.$$.slotted[key]);\n }\n }\n attributeChangedCallback(attr, _oldValue, newValue) {\n this[attr] = newValue;\n }\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n // TODO should this delegate to addEventListener?\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set() {\n // overridden by instance, if it has props\n }\n };\n}\nclass SvelteComponent {\n $destroy() {\n destroy_component(this, 1);\n this.$destroy = noop;\n }\n $on(type, callback) {\n const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));\n callbacks.push(callback);\n return () => {\n const index = callbacks.indexOf(callback);\n if (index !== -1)\n callbacks.splice(index, 1);\n };\n }\n $set() {\n // overridden by instance, if it has props\n }\n}\nclass SvelteComponentDev extends SvelteComponent {\n constructor(options) {\n if (!options || (!options.target && !options.$$inline)) {\n throw new Error(`'target' is a required option`);\n }\n super();\n }\n $destroy() {\n super.$destroy();\n this.$destroy = () => {\n console.warn(`Component was already destroyed`); // eslint-disable-line no-console\n };\n }\n}\n\nexport { SvelteComponent, SvelteComponentDev, SvelteElement, add_attribute, add_classes, add_flush_callback, add_location, add_render_callback, add_resize_listener, add_transform, afterUpdate, append, assign, attr, beforeUpdate, bind, binding_callbacks, blank_object, bubble, check_outros, children, claim_element, claim_text, clear_loops, createEventDispatcher, create_animation, create_bidirectional_transition, create_in_transition, create_out_transition, create_slot, create_ssr_component, current_component, custom_event, debug, destroy_block, destroy_component, destroy_each, detach, detach_after, detach_before, detach_between, dirty_components, each, element, empty, escape, escaped, exclude_internal_props, fix_and_destroy_block, fix_and_outro_and_destroy_block, fix_position, flush, getContext, get_binding_group_value, get_slot_changes, get_slot_context, get_spread_update, get_store_value, globals, group_outros, handle_promise, identity, init, insert, intros, invalid_attribute_name_character, is_client, is_function, is_promise, listen, loop, measure, missing_component, mount_component, noop, not_equal, now, object_without_properties, onDestroy, onMount, once, outro_and_destroy_block, prevent_default, raf, run, run_all, safe_not_equal, schedule_update, select_multiple_value, select_option, select_options, select_value, setContext, set_attributes, set_current_component, set_custom_element_data, set_data, set_input_type, set_now, set_raf, set_style, space, spread, stop_propagation, subscribe, svg_element, text, tick, time_ranges_to_array, to_number, toggle_class, transition_in, transition_out, update_keyed_each, validate_component, validate_store, xlink_attr };\n","<script>\r\n\r\nexport let color = \"primary\";\r\nexport let className = \"\";\r\nexport let style = \"\";\r\nexport let groupPosition = \"\";\r\nexport let grouped = false;\r\n\r\n$: borderClass = grouped \r\n ? \"\"\r\n : \"border-normal\";\r\n\r\n</script>\r\n\r\n<button class=\"{color} {className} {borderClass} {grouped ? \"grouped\" : \"\"}\" \r\n style=\"{style}\"\r\n on:click>\r\n <slot/>\r\n</button>\r\n\r\n<style>\r\n\r\n.border-normal { border-radius: var(--borderradiusall); }\r\n.border-left { border-radius: var(--borderradius) 0 0 var(--borderradius); }\r\n.border-right { border-radius: 0 var(--borderradius) var(--borderradius) 0; }\r\n.border-middle { border-radius: 0; }\r\n\r\nbutton { \r\n border-style: solid; \r\n padding: 7px 15px;\r\n cursor:pointer;\r\n}\r\n\r\n/* ---- PRIMARY ----*/\r\n.primary {\r\n background-color: var(--primary100);\r\n border-color: var(--primary100);\r\n color: var(--white);\r\n}\r\n\r\n.primary:hover {\r\n background-color: var(--primary75);\r\n border-color: var(--primary75);\r\n}\r\n\r\n.primary:active {\r\n background-color: var(--primarydark);\r\n border-color: var(--primarydark);\r\n}\r\n\r\n.primary-outline {\r\n background-color: var(--white);\r\n border-color: var(--primary100);\r\n color: var(--primary100);\r\n}\r\n\r\n.primary-outline:hover {\r\n background-color: var(--primary10);\r\n}\r\n\r\n.primary-outline:pressed {\r\n background-color: var(--primary25);\r\n}\r\n\r\n/* ---- secondary ----*/\r\n\r\n.secondary {\r\n background-color: var(--secondary100);\r\n border-color: var(--secondary100);\r\n color: var(--white);\r\n}\r\n\r\n.secondary:hover {\r\n background-color: var(--secondary75);\r\n border-color: var(--secondary75);\r\n}\r\n\r\n.secondary:pressed {\r\n background-color: var(--secondarydark);\r\n border-color: var(--secondarydark);\r\n}\r\n\r\n.secondary-outline {\r\n background-color: var(--white);\r\n border-color: var(--secondary100);\r\n color: var(--secondary100);\r\n}\r\n\r\n.secondary-outline:hover {\r\n background-color: var(--secondary10);\r\n}\r\n\r\n.secondary-outline:pressed {\r\n background-color: var(--secondary25);\r\n}\r\n\r\n\r\n/* ---- success ----*/\r\n.success {\r\n background-color: var(--success100);\r\n border-color: var(--success100);\r\n color: var(--white);\r\n}\r\n\r\n.success:hover {\r\n background-color: var(--success75);\r\n border-color: var(--success75);\r\n}\r\n\r\n.success:pressed {\r\n background-color: var(--successdark);\r\n border-color: var(--successdark);\r\n}\r\n\r\n.success-outline {\r\n background-color: var(--white);\r\n border-color: var(--success100);\r\n color: var(--success100);\r\n}\r\n\r\n.success-outline:hover {\r\n background-color: var(--success10);\r\n}\r\n\r\n.success-outline:pressed {\r\n background-color: var(--success25);\r\n}\r\n\r\n/* ---- deletion ----*/\r\n.deletion {\r\n background-color: var(--deletion100);\r\n border-color: var(--deletion100);\r\n color: var(--white);\r\n}\r\n\r\n.deletion:hover {\r\n background-color: var(--deletion75);\r\n border-color: var(--deletion75);\r\n}\r\n\r\n.deletion:pressed {\r\n background-color: var(--deletiondark);\r\n border-color: var(--deletiondark);\r\n}\r\n\r\n.deletion-outline {\r\n background-color: var(--white);\r\n border-color: var(--deletion100);\r\n color: var(--deletion100);\r\n}\r\n\r\n.deletion-outline:hover {\r\n background-color: var(--deletion10);\r\n}\r\n\r\n.deletion-outline:pressed {\r\n background-color: var(--deletion25);\r\n}\r\n\r\n\r\n</style>","/**\n * @license\n * Lodash lodash.com/license | Underscore.js 1.8.3 underscorejs.org/LICENSE\n */\n;(function(){function n(n,t,r){switch(r.length){case 0:return n.call(t);case 1:return n.call(t,r[0]);case 2:return n.call(t,r[0],r[1]);case 3:return n.call(t,r[0],r[1],r[2])}return n.apply(t,r)}function t(n,t,r,e){for(var u=-1,i=null==n?0:n.length;++u<i;){var o=n[u];t(e,o,r(o),n)}return e}function r(n,t){for(var r=-1,e=null==n?0:n.length;++r<e&&false!==t(n[r],r,n););return n}function e(n,t){for(var r=null==n?0:n.length;r--&&false!==t(n[r],r,n););return n}function u(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(!t(n[r],r,n))return false;\nreturn true}function i(n,t){for(var r=-1,e=null==n?0:n.length,u=0,i=[];++r<e;){var o=n[r];t(o,r,n)&&(i[u++]=o)}return i}function o(n,t){return!(null==n||!n.length)&&-1<v(n,t,0)}function f(n,t,r){for(var e=-1,u=null==n?0:n.length;++e<u;)if(r(t,n[e]))return true;return false}function c(n,t){for(var r=-1,e=null==n?0:n.length,u=Array(e);++r<e;)u[r]=t(n[r],r,n);return u}function a(n,t){for(var r=-1,e=t.length,u=n.length;++r<e;)n[u+r]=t[r];return n}function l(n,t,r,e){var u=-1,i=null==n?0:n.length;for(e&&i&&(r=n[++u]);++u<i;)r=t(r,n[u],u,n);\nreturn r}function s(n,t,r,e){var u=null==n?0:n.length;for(e&&u&&(r=n[--u]);u--;)r=t(r,n[u],u,n);return r}function h(n,t){for(var r=-1,e=null==n?0:n.length;++r<e;)if(t(n[r],r,n))return true;return false}function p(n,t,r){var e;return r(n,function(n,r,u){if(t(n,r,u))return e=r,false}),e}function _(n,t,r,e){var u=n.length;for(r+=e?1:-1;e?r--:++r<u;)if(t(n[r],r,n))return r;return-1}function v(n,t,r){if(t===t)n:{--r;for(var e=n.length;++r<e;)if(n[r]===t){n=r;break n}n=-1}else n=_(n,d,r);return n}function g(n,t,r,e){\n--r;for(var u=n.length;++r<u;)if(e(n[r],t))return r;return-1}function d(n){return n!==n}function y(n,t){var r=null==n?0:n.length;return r?m(n,t)/r:F}function b(n){return function(t){return null==t?T:t[n]}}function x(n){return function(t){return null==n?T:n[t]}}function j(n,t,r,e,u){return u(n,function(n,u,i){r=e?(e=false,n):t(r,n,u,i)}),r}function w(n,t){var r=n.length;for(n.sort(t);r--;)n[r]=n[r].c;return n}function m(n,t){for(var r,e=-1,u=n.length;++e<u;){var i=t(n[e]);i!==T&&(r=r===T?i:r+i)}return r;\n}function A(n,t){for(var r=-1,e=Array(n);++r<n;)e[r]=t(r);return e}function E(n,t){return c(t,function(t){return[t,n[t]]})}function k(n){return function(t){return n(t)}}function S(n,t){return c(t,function(t){return n[t]})}function O(n,t){return n.has(t)}function I(n,t){for(var r=-1,e=n.length;++r<e&&-1<v(t,n[r],0););return r}function R(n,t){for(var r=n.length;r--&&-1<v(t,n[r],0););return r}function z(n){return\"\\\\\"+Un[n]}function W(n){var t=-1,r=Array(n.size);return n.forEach(function(n,e){r[++t]=[e,n];\n}),r}function B(n,t){return function(r){return n(t(r))}}function L(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){var o=n[r];o!==t&&\"__lodash_placeholder__\"!==o||(n[r]=\"__lodash_placeholder__\",i[u++]=r)}return i}function U(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=n}),r}function C(n){var t=-1,r=Array(n.size);return n.forEach(function(n){r[++t]=[n,n]}),r}function D(n){if(Rn.test(n)){for(var t=On.lastIndex=0;On.test(n);)++t;n=t}else n=Qn(n);return n}function M(n){return Rn.test(n)?n.match(On)||[]:n.split(\"\");\n}var T,$=1/0,F=NaN,N=[[\"ary\",128],[\"bind\",1],[\"bindKey\",2],[\"curry\",8],[\"curryRight\",16],[\"flip\",512],[\"partial\",32],[\"partialRight\",64],[\"rearg\",256]],P=/\\b__p\\+='';/g,Z=/\\b(__p\\+=)''\\+/g,q=/(__e\\(.*?\\)|\\b__t\\))\\+'';/g,V=/&(?:amp|lt|gt|quot|#39);/g,K=/[&<>\"']/g,G=RegExp(V.source),H=RegExp(K.source),J=/<%-([\\s\\S]+?)%>/g,Y=/<%([\\s\\S]+?)%>/g,Q=/<%=([\\s\\S]+?)%>/g,X=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,nn=/^\\w*$/,tn=/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,rn=/[\\\\^$.*+?()[\\]{}|]/g,en=RegExp(rn.source),un=/^\\s+|\\s+$/g,on=/^\\s+/,fn=/\\s+$/,cn=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,an=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,ln=/,? & /,sn=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,hn=/\\\\(\\\\)?/g,pn=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,_n=/\\w*$/,vn=/^[-+]0x[0-9a-f]+$/i,gn=/^0b[01]+$/i,dn=/^\\[object .+?Constructor\\]$/,yn=/^0o[0-7]+$/i,bn=/^(?:0|[1-9]\\d*)$/,xn=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,jn=/($^)/,wn=/['\\n\\r\\u2028\\u2029\\\\]/g,mn=\"[\\\\ufe0e\\\\ufe0f]?(?:[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]|\\\\ud83c[\\\\udffb-\\\\udfff])?(?:\\\\u200d(?:[^\\\\ud800-\\\\udfff]|(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}|[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff])[\\\\ufe0e\\\\ufe0f]?(?:[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]|\\\\ud83c[\\\\udffb-\\\\udfff])?)*\",An=\"(?:[\\\\u2700-\\\\u27bf]|(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}|[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff])\"+mn,En=\"(?:[^\\\\ud800-\\\\udfff][\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]?|[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]|(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}|[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]|[\\\\ud800-\\\\udfff])\",kn=RegExp(\"['\\u2019]\",\"g\"),Sn=RegExp(\"[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]\",\"g\"),On=RegExp(\"\\\\ud83c[\\\\udffb-\\\\udfff](?=\\\\ud83c[\\\\udffb-\\\\udfff])|\"+En+mn,\"g\"),In=RegExp([\"[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]?[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]+(?:['\\u2019](?:d|ll|m|re|s|t|ve))?(?=[\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000]|[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]|$)|(?:[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]|[^\\\\ud800-\\\\udfff\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\d+\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde])+(?:['\\u2019](?:D|LL|M|RE|S|T|VE))?(?=[\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000]|[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde](?:[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]|[^\\\\ud800-\\\\udfff\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\d+\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde])|$)|[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]?(?:[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]|[^\\\\ud800-\\\\udfff\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\d+\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde])+(?:['\\u2019](?:d|ll|m|re|s|t|ve))?|[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]+(?:['\\u2019](?:D|LL|M|RE|S|T|VE))?|\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])|\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])|\\\\d+\",An].join(\"|\"),\"g\"),Rn=RegExp(\"[\\\\u200d\\\\ud800-\\\\udfff\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\\\\ufe0e\\\\ufe0f]\"),zn=/[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,Wn=\"Array Buffer DataView Date Error Float32Array Float64Array Function Int8Array Int16Array Int32Array Map Math Object Promise RegExp Set String Symbol TypeError Uint8Array Uint8ClampedArray Uint16Array Uint32Array WeakMap _ clearTimeout isFinite parseInt setTimeout\".split(\" \"),Bn={};\nBn[\"[object Float32Array]\"]=Bn[\"[object Float64Array]\"]=Bn[\"[object Int8Array]\"]=Bn[\"[object Int16Array]\"]=Bn[\"[object Int32Array]\"]=Bn[\"[object Uint8Array]\"]=Bn[\"[object Uint8ClampedArray]\"]=Bn[\"[object Uint16Array]\"]=Bn[\"[object Uint32Array]\"]=true,Bn[\"[object Arguments]\"]=Bn[\"[object Array]\"]=Bn[\"[object ArrayBuffer]\"]=Bn[\"[object Boolean]\"]=Bn[\"[object DataView]\"]=Bn[\"[object Date]\"]=Bn[\"[object Error]\"]=Bn[\"[object Function]\"]=Bn[\"[object Map]\"]=Bn[\"[object Number]\"]=Bn[\"[object Object]\"]=Bn[\"[object RegExp]\"]=Bn[\"[object Set]\"]=Bn[\"[object String]\"]=Bn[\"[object WeakMap]\"]=false;\nvar Ln={};Ln[\"[object Arguments]\"]=Ln[\"[object Array]\"]=Ln[\"[object ArrayBuffer]\"]=Ln[\"[object DataView]\"]=Ln[\"[object Boolean]\"]=Ln[\"[object Date]\"]=Ln[\"[object Float32Array]\"]=Ln[\"[object Float64Array]\"]=Ln[\"[object Int8Array]\"]=Ln[\"[object Int16Array]\"]=Ln[\"[object Int32Array]\"]=Ln[\"[object Map]\"]=Ln[\"[object Number]\"]=Ln[\"[object Object]\"]=Ln[\"[object RegExp]\"]=Ln[\"[object Set]\"]=Ln[\"[object String]\"]=Ln[\"[object Symbol]\"]=Ln[\"[object Uint8Array]\"]=Ln[\"[object Uint8ClampedArray]\"]=Ln[\"[object Uint16Array]\"]=Ln[\"[object Uint32Array]\"]=true,\nLn[\"[object Error]\"]=Ln[\"[object Function]\"]=Ln[\"[object WeakMap]\"]=false;var Un={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},Cn=parseFloat,Dn=parseInt,Mn=typeof global==\"object\"&&global&&global.Object===Object&&global,Tn=typeof self==\"object\"&&self&&self.Object===Object&&self,$n=Mn||Tn||Function(\"return this\")(),Fn=typeof exports==\"object\"&&exports&&!exports.nodeType&&exports,Nn=Fn&&typeof module==\"object\"&&module&&!module.nodeType&&module,Pn=Nn&&Nn.exports===Fn,Zn=Pn&&Mn.process,qn=function(){\ntry{var n=Nn&&Nn.f&&Nn.f(\"util\").types;return n?n:Zn&&Zn.binding&&Zn.binding(\"util\")}catch(n){}}(),Vn=qn&&qn.isArrayBuffer,Kn=qn&&qn.isDate,Gn=qn&&qn.isMap,Hn=qn&&qn.isRegExp,Jn=qn&&qn.isSet,Yn=qn&&qn.isTypedArray,Qn=b(\"length\"),Xn=x({\"\\xc0\":\"A\",\"\\xc1\":\"A\",\"\\xc2\":\"A\",\"\\xc3\":\"A\",\"\\xc4\":\"A\",\"\\xc5\":\"A\",\"\\xe0\":\"a\",\"\\xe1\":\"a\",\"\\xe2\":\"a\",\"\\xe3\":\"a\",\"\\xe4\":\"a\",\"\\xe5\":\"a\",\"\\xc7\":\"C\",\"\\xe7\":\"c\",\"\\xd0\":\"D\",\"\\xf0\":\"d\",\"\\xc8\":\"E\",\"\\xc9\":\"E\",\"\\xca\":\"E\",\"\\xcb\":\"E\",\"\\xe8\":\"e\",\"\\xe9\":\"e\",\"\\xea\":\"e\",\"\\xeb\":\"e\",\"\\xcc\":\"I\",\n\"\\xcd\":\"I\",\"\\xce\":\"I\",\"\\xcf\":\"I\",\"\\xec\":\"i\",\"\\xed\":\"i\",\"\\xee\":\"i\",\"\\xef\":\"i\",\"\\xd1\":\"N\",\"\\xf1\":\"n\",\"\\xd2\":\"O\",\"\\xd3\":\"O\",\"\\xd4\":\"O\",\"\\xd5\":\"O\",\"\\xd6\":\"O\",\"\\xd8\":\"O\",\"\\xf2\":\"o\",\"\\xf3\":\"o\",\"\\xf4\":\"o\",\"\\xf5\":\"o\",\"\\xf6\":\"o\",\"\\xf8\":\"o\",\"\\xd9\":\"U\",\"\\xda\":\"U\",\"\\xdb\":\"U\",\"\\xdc\":\"U\",\"\\xf9\":\"u\",\"\\xfa\":\"u\",\"\\xfb\":\"u\",\"\\xfc\":\"u\",\"\\xdd\":\"Y\",\"\\xfd\":\"y\",\"\\xff\":\"y\",\"\\xc6\":\"Ae\",\"\\xe6\":\"ae\",\"\\xde\":\"Th\",\"\\xfe\":\"th\",\"\\xdf\":\"ss\",\"\\u0100\":\"A\",\"\\u0102\":\"A\",\"\\u0104\":\"A\",\"\\u0101\":\"a\",\"\\u0103\":\"a\",\"\\u0105\":\"a\",\"\\u0106\":\"C\",\n\"\\u0108\":\"C\",\"\\u010a\":\"C\",\"\\u010c\":\"C\",\"\\u0107\":\"c\",\"\\u0109\":\"c\",\"\\u010b\":\"c\",\"\\u010d\":\"c\",\"\\u010e\":\"D\",\"\\u0110\":\"D\",\"\\u010f\":\"d\",\"\\u0111\":\"d\",\"\\u0112\":\"E\",\"\\u0114\":\"E\",\"\\u0116\":\"E\",\"\\u0118\":\"E\",\"\\u011a\":\"E\",\"\\u0113\":\"e\",\"\\u0115\":\"e\",\"\\u0117\":\"e\",\"\\u0119\":\"e\",\"\\u011b\":\"e\",\"\\u011c\":\"G\",\"\\u011e\":\"G\",\"\\u0120\":\"G\",\"\\u0122\":\"G\",\"\\u011d\":\"g\",\"\\u011f\":\"g\",\"\\u0121\":\"g\",\"\\u0123\":\"g\",\"\\u0124\":\"H\",\"\\u0126\":\"H\",\"\\u0125\":\"h\",\"\\u0127\":\"h\",\"\\u0128\":\"I\",\"\\u012a\":\"I\",\"\\u012c\":\"I\",\"\\u012e\":\"I\",\"\\u0130\":\"I\",\"\\u0129\":\"i\",\n\"\\u012b\":\"i\",\"\\u012d\":\"i\",\"\\u012f\":\"i\",\"\\u0131\":\"i\",\"\\u0134\":\"J\",\"\\u0135\":\"j\",\"\\u0136\":\"K\",\"\\u0137\":\"k\",\"\\u0138\":\"k\",\"\\u0139\":\"L\",\"\\u013b\":\"L\",\"\\u013d\":\"L\",\"\\u013f\":\"L\",\"\\u0141\":\"L\",\"\\u013a\":\"l\",\"\\u013c\":\"l\",\"\\u013e\":\"l\",\"\\u0140\":\"l\",\"\\u0142\":\"l\",\"\\u0143\":\"N\",\"\\u0145\":\"N\",\"\\u0147\":\"N\",\"\\u014a\":\"N\",\"\\u0144\":\"n\",\"\\u0146\":\"n\",\"\\u0148\":\"n\",\"\\u014b\":\"n\",\"\\u014c\":\"O\",\"\\u014e\":\"O\",\"\\u0150\":\"O\",\"\\u014d\":\"o\",\"\\u014f\":\"o\",\"\\u0151\":\"o\",\"\\u0154\":\"R\",\"\\u0156\":\"R\",\"\\u0158\":\"R\",\"\\u0155\":\"r\",\"\\u0157\":\"r\",\"\\u0159\":\"r\",\n\"\\u015a\":\"S\",\"\\u015c\":\"S\",\"\\u015e\":\"S\",\"\\u0160\":\"S\",\"\\u015b\":\"s\",\"\\u015d\":\"s\",\"\\u015f\":\"s\",\"\\u0161\":\"s\",\"\\u0162\":\"T\",\"\\u0164\":\"T\",\"\\u0166\":\"T\",\"\\u0163\":\"t\",\"\\u0165\":\"t\",\"\\u0167\":\"t\",\"\\u0168\":\"U\",\"\\u016a\":\"U\",\"\\u016c\":\"U\",\"\\u016e\":\"U\",\"\\u0170\":\"U\",\"\\u0172\":\"U\",\"\\u0169\":\"u\",\"\\u016b\":\"u\",\"\\u016d\":\"u\",\"\\u016f\":\"u\",\"\\u0171\":\"u\",\"\\u0173\":\"u\",\"\\u0174\":\"W\",\"\\u0175\":\"w\",\"\\u0176\":\"Y\",\"\\u0177\":\"y\",\"\\u0178\":\"Y\",\"\\u0179\":\"Z\",\"\\u017b\":\"Z\",\"\\u017d\":\"Z\",\"\\u017a\":\"z\",\"\\u017c\":\"z\",\"\\u017e\":\"z\",\"\\u0132\":\"IJ\",\"\\u0133\":\"ij\",\n\"\\u0152\":\"Oe\",\"\\u0153\":\"oe\",\"\\u0149\":\"'n\",\"\\u017f\":\"s\"}),nt=x({\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"}),tt=x({\"&\":\"&\",\"<\":\"<\",\">\":\">\",\""\":'\"',\"'\":\"'\"}),rt=function x(mn){function An(n){if(yu(n)&&!ff(n)&&!(n instanceof Un)){if(n instanceof On)return n;if(oi.call(n,\"__wrapped__\"))return Fe(n)}return new On(n)}function En(){}function On(n,t){this.__wrapped__=n,this.__actions__=[],this.__chain__=!!t,this.__index__=0,this.__values__=T}function Un(n){this.__wrapped__=n,\nthis.__actions__=[],this.__dir__=1,this.__filtered__=false,this.__iteratees__=[],this.__takeCount__=4294967295,this.__views__=[]}function Mn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Tn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Fn(n){var t=-1,r=null==n?0:n.length;for(this.clear();++t<r;){var e=n[t];this.set(e[0],e[1])}}function Nn(n){var t=-1,r=null==n?0:n.length;for(this.__data__=new Fn;++t<r;)this.add(n[t]);\n}function Zn(n){this.size=(this.__data__=new Tn(n)).size}function qn(n,t){var r,e=ff(n),u=!e&&of(n),i=!e&&!u&&af(n),o=!e&&!u&&!i&&_f(n),u=(e=e||u||i||o)?A(n.length,ni):[],f=u.length;for(r in n)!t&&!oi.call(n,r)||e&&(\"length\"==r||i&&(\"offset\"==r||\"parent\"==r)||o&&(\"buffer\"==r||\"byteLength\"==r||\"byteOffset\"==r)||Se(r,f))||u.push(r);return u}function Qn(n){var t=n.length;return t?n[ir(0,t-1)]:T}function et(n,t){return De(Ur(n),pt(t,0,n.length))}function ut(n){return De(Ur(n))}function it(n,t,r){(r===T||lu(n[t],r))&&(r!==T||t in n)||st(n,t,r);\n}function ot(n,t,r){var e=n[t];oi.call(n,t)&&lu(e,r)&&(r!==T||t in n)||st(n,t,r)}function ft(n,t){for(var r=n.length;r--;)if(lu(n[r][0],t))return r;return-1}function ct(n,t,r,e){return uo(n,function(n,u,i){t(e,n,r(n),i)}),e}function at(n,t){return n&&Cr(t,Wu(t),n)}function lt(n,t){return n&&Cr(t,Bu(t),n)}function st(n,t,r){\"__proto__\"==t&&Ai?Ai(n,t,{configurable:true,enumerable:true,value:r,writable:true}):n[t]=r}function ht(n,t){for(var r=-1,e=t.length,u=Ku(e),i=null==n;++r<e;)u[r]=i?T:Ru(n,t[r]);return u;\n}function pt(n,t,r){return n===n&&(r!==T&&(n=n<=r?n:r),t!==T&&(n=n>=t?n:t)),n}function _t(n,t,e,u,i,o){var f,c=1&t,a=2&t,l=4&t;if(e&&(f=i?e(n,u,i,o):e(n)),f!==T)return f;if(!du(n))return n;if(u=ff(n)){if(f=me(n),!c)return Ur(n,f)}else{var s=vo(n),h=\"[object Function]\"==s||\"[object GeneratorFunction]\"==s;if(af(n))return Ir(n,c);if(\"[object Object]\"==s||\"[object Arguments]\"==s||h&&!i){if(f=a||h?{}:Ae(n),!c)return a?Mr(n,lt(f,n)):Dr(n,at(f,n))}else{if(!Ln[s])return i?n:{};f=Ee(n,s,c)}}if(o||(o=new Zn),\ni=o.get(n))return i;o.set(n,f),pf(n)?n.forEach(function(r){f.add(_t(r,t,e,r,n,o))}):sf(n)&&n.forEach(function(r,u){f.set(u,_t(r,t,e,u,n,o))});var a=l?a?ve:_e:a?Bu:Wu,p=u?T:a(n);return r(p||n,function(r,u){p&&(u=r,r=n[u]),ot(f,u,_t(r,t,e,u,n,o))}),f}function vt(n){var t=Wu(n);return function(r){return gt(r,n,t)}}function gt(n,t,r){var e=r.length;if(null==n)return!e;for(n=Qu(n);e--;){var u=r[e],i=t[u],o=n[u];if(o===T&&!(u in n)||!i(o))return false}return true}function dt(n,t,r){if(typeof n!=\"function\")throw new ti(\"Expected a function\");\nreturn bo(function(){n.apply(T,r)},t)}function yt(n,t,r,e){var u=-1,i=o,a=true,l=n.length,s=[],h=t.length;if(!l)return s;r&&(t=c(t,k(r))),e?(i=f,a=false):200<=t.length&&(i=O,a=false,t=new Nn(t));n:for(;++u<l;){var p=n[u],_=null==r?p:r(p),p=e||0!==p?p:0;if(a&&_===_){for(var v=h;v--;)if(t[v]===_)continue n;s.push(p)}else i(t,_,e)||s.push(p)}return s}function bt(n,t){var r=true;return uo(n,function(n,e,u){return r=!!t(n,e,u)}),r}function xt(n,t,r){for(var e=-1,u=n.length;++e<u;){var i=n[e],o=t(i);if(null!=o&&(f===T?o===o&&!wu(o):r(o,f)))var f=o,c=i;\n}return c}function jt(n,t){var r=[];return uo(n,function(n,e,u){t(n,e,u)&&r.push(n)}),r}function wt(n,t,r,e,u){var i=-1,o=n.length;for(r||(r=ke),u||(u=[]);++i<o;){var f=n[i];0<t&&r(f)?1<t?wt(f,t-1,r,e,u):a(u,f):e||(u[u.length]=f)}return u}function mt(n,t){return n&&oo(n,t,Wu)}function At(n,t){return n&&fo(n,t,Wu)}function Et(n,t){return i(t,function(t){return _u(n[t])})}function kt(n,t){t=Sr(t,n);for(var r=0,e=t.length;null!=n&&r<e;)n=n[Me(t[r++])];return r&&r==e?n:T}function St(n,t,r){return t=t(n),\nff(n)?t:a(t,r(n))}function Ot(n){if(null==n)n=n===T?\"[object Undefined]\":\"[object Null]\";else if(mi&&mi in Qu(n)){var t=oi.call(n,mi),r=n[mi];try{n[mi]=T;var e=true}catch(n){}var u=ai.call(n);e&&(t?n[mi]=r:delete n[mi]),n=u}else n=ai.call(n);return n}function It(n,t){return n>t}function Rt(n,t){return null!=n&&oi.call(n,t)}function zt(n,t){return null!=n&&t in Qu(n)}function Wt(n,t,r){for(var e=r?f:o,u=n[0].length,i=n.length,a=i,l=Ku(i),s=1/0,h=[];a--;){var p=n[a];a&&t&&(p=c(p,k(t))),s=Ci(p.length,s),\nl[a]=!r&&(t||120<=u&&120<=p.length)?new Nn(a&&p):T}var p=n[0],_=-1,v=l[0];n:for(;++_<u&&h.length<s;){var g=p[_],d=t?t(g):g,g=r||0!==g?g:0;if(v?!O(v,d):!e(h,d,r)){for(a=i;--a;){var y=l[a];if(y?!O(y,d):!e(n[a],d,r))continue n}v&&v.push(d),h.push(g)}}return h}function Bt(n,t,r){var e={};return mt(n,function(n,u,i){t(e,r(n),u,i)}),e}function Lt(t,r,e){return r=Sr(r,t),t=2>r.length?t:kt(t,hr(r,0,-1)),r=null==t?t:t[Me(Ve(r))],null==r?T:n(r,t,e)}function Ut(n){return yu(n)&&\"[object Arguments]\"==Ot(n)}function Ct(n){\nreturn yu(n)&&\"[object ArrayBuffer]\"==Ot(n)}function Dt(n){return yu(n)&&\"[object Date]\"==Ot(n)}function Mt(n,t,r,e,u){if(n===t)t=true;else if(null==n||null==t||!yu(n)&&!yu(t))t=n!==n&&t!==t;else n:{var i=ff(n),o=ff(t),f=i?\"[object Array]\":vo(n),c=o?\"[object Array]\":vo(t),f=\"[object Arguments]\"==f?\"[object Object]\":f,c=\"[object Arguments]\"==c?\"[object Object]\":c,a=\"[object Object]\"==f,o=\"[object Object]\"==c;if((c=f==c)&&af(n)){if(!af(t)){t=false;break n}i=true,a=false}if(c&&!a)u||(u=new Zn),t=i||_f(n)?se(n,t,r,e,Mt,u):he(n,t,f,r,e,Mt,u);else{\nif(!(1&r)&&(i=a&&oi.call(n,\"__wrapped__\"),f=o&&oi.call(t,\"__wrapped__\"),i||f)){n=i?n.value():n,t=f?t.value():t,u||(u=new Zn),t=Mt(n,t,r,e,u);break n}if(c)t:if(u||(u=new Zn),i=1&r,f=_e(n),o=f.length,c=_e(t).length,o==c||i){for(a=o;a--;){var l=f[a];if(!(i?l in t:oi.call(t,l))){t=false;break t}}if((c=u.get(n))&&u.get(t))t=c==t;else{c=true,u.set(n,t),u.set(t,n);for(var s=i;++a<o;){var l=f[a],h=n[l],p=t[l];if(e)var _=i?e(p,h,l,t,n,u):e(h,p,l,n,t,u);if(_===T?h!==p&&!Mt(h,p,r,e,u):!_){c=false;break}s||(s=\"constructor\"==l);\n}c&&!s&&(r=n.constructor,e=t.constructor,r!=e&&\"constructor\"in n&&\"constructor\"in t&&!(typeof r==\"function\"&&r instanceof r&&typeof e==\"function\"&&e instanceof e)&&(c=false)),u.delete(n),u.delete(t),t=c}}else t=false;else t=false}}return t}function Tt(n){return yu(n)&&\"[object Map]\"==vo(n)}function $t(n,t,r,e){var u=r.length,i=u,o=!e;if(null==n)return!i;for(n=Qu(n);u--;){var f=r[u];if(o&&f[2]?f[1]!==n[f[0]]:!(f[0]in n))return false}for(;++u<i;){var f=r[u],c=f[0],a=n[c],l=f[1];if(o&&f[2]){if(a===T&&!(c in n))return false;\n}else{if(f=new Zn,e)var s=e(a,l,c,n,t,f);if(s===T?!Mt(l,a,3,e,f):!s)return false}}return true}function Ft(n){return!(!du(n)||ci&&ci in n)&&(_u(n)?hi:dn).test(Te(n))}function Nt(n){return yu(n)&&\"[object RegExp]\"==Ot(n)}function Pt(n){return yu(n)&&\"[object Set]\"==vo(n)}function Zt(n){return yu(n)&&gu(n.length)&&!!Bn[Ot(n)]}function qt(n){return typeof n==\"function\"?n:null==n?$u:typeof n==\"object\"?ff(n)?Jt(n[0],n[1]):Ht(n):Zu(n)}function Vt(n){if(!ze(n))return Li(n);var t,r=[];for(t in Qu(n))oi.call(n,t)&&\"constructor\"!=t&&r.push(t);\nreturn r}function Kt(n,t){return n<t}function Gt(n,t){var r=-1,e=su(n)?Ku(n.length):[];return uo(n,function(n,u,i){e[++r]=t(n,u,i)}),e}function Ht(n){var t=xe(n);return 1==t.length&&t[0][2]?We(t[0][0],t[0][1]):function(r){return r===n||$t(r,n,t)}}function Jt(n,t){return Ie(n)&&t===t&&!du(t)?We(Me(n),t):function(r){var e=Ru(r,n);return e===T&&e===t?zu(r,n):Mt(t,e,3)}}function Yt(n,t,r,e,u){n!==t&&oo(t,function(i,o){if(u||(u=new Zn),du(i)){var f=u,c=Le(n,o),a=Le(t,o),l=f.get(a);if(l)it(n,o,l);else{\nvar l=e?e(c,a,o+\"\",n,t,f):T,s=l===T;if(s){var h=ff(a),p=!h&&af(a),_=!h&&!p&&_f(a),l=a;h||p||_?ff(c)?l=c:hu(c)?l=Ur(c):p?(s=false,l=Ir(a,true)):_?(s=false,l=zr(a,true)):l=[]:xu(a)||of(a)?(l=c,of(c)?l=Ou(c):du(c)&&!_u(c)||(l=Ae(a))):s=false}s&&(f.set(a,l),Yt(l,a,r,e,f),f.delete(a)),it(n,o,l)}}else f=e?e(Le(n,o),i,o+\"\",n,t,u):T,f===T&&(f=i),it(n,o,f)},Bu)}function Qt(n,t){var r=n.length;if(r)return t+=0>t?r:0,Se(t,r)?n[t]:T}function Xt(n,t,r){var e=-1;return t=c(t.length?t:[$u],k(ye())),n=Gt(n,function(n){return{\na:c(t,function(t){return t(n)}),b:++e,c:n}}),w(n,function(n,t){var e;n:{e=-1;for(var u=n.a,i=t.a,o=u.length,f=r.length;++e<o;){var c=Wr(u[e],i[e]);if(c){e=e>=f?c:c*(\"desc\"==r[e]?-1:1);break n}}e=n.b-t.b}return e})}function nr(n,t){return tr(n,t,function(t,r){return zu(n,r)})}function tr(n,t,r){for(var e=-1,u=t.length,i={};++e<u;){var o=t[e],f=kt(n,o);r(f,o)&&lr(i,Sr(o,n),f)}return i}function rr(n){return function(t){return kt(t,n)}}function er(n,t,r,e){var u=e?g:v,i=-1,o=t.length,f=n;for(n===t&&(t=Ur(t)),\nr&&(f=c(n,k(r)));++i<o;)for(var a=0,l=t[i],l=r?r(l):l;-1<(a=u(f,l,a,e));)f!==n&&xi.call(f,a,1),xi.call(n,a,1);return n}function ur(n,t){for(var r=n?t.length:0,e=r-1;r--;){var u=t[r];if(r==e||u!==i){var i=u;Se(u)?xi.call(n,u,1):xr(n,u)}}}function ir(n,t){return n+Ii(Ti()*(t-n+1))}function or(n,t){var r=\"\";if(!n||1>t||9007199254740991<t)return r;do t%2&&(r+=n),(t=Ii(t/2))&&(n+=n);while(t);return r}function fr(n,t){return xo(Be(n,t,$u),n+\"\")}function cr(n){return Qn(Uu(n))}function ar(n,t){var r=Uu(n);\nreturn De(r,pt(t,0,r.length))}function lr(n,t,r,e){if(!du(n))return n;t=Sr(t,n);for(var u=-1,i=t.length,o=i-1,f=n;null!=f&&++u<i;){var c=Me(t[u]),a=r;if(u!=o){var l=f[c],a=e?e(l,c,f):T;a===T&&(a=du(l)?l:Se(t[u+1])?[]:{})}ot(f,c,a),f=f[c]}return n}function sr(n){return De(Uu(n))}function hr(n,t,r){var e=-1,u=n.length;for(0>t&&(t=-t>u?0:u+t),r=r>u?u:r,0>r&&(r+=u),u=t>r?0:r-t>>>0,t>>>=0,r=Ku(u);++e<u;)r[e]=n[e+t];return r}function pr(n,t){var r;return uo(n,function(n,e,u){return r=t(n,e,u),!r}),!!r}\nfunction _r(n,t,r){var e=0,u=null==n?e:n.length;if(typeof t==\"number\"&&t===t&&2147483647>=u){for(;e<u;){var i=e+u>>>1,o=n[i];null!==o&&!wu(o)&&(r?o<=t:o<t)?e=i+1:u=i}return u}return vr(n,t,$u,r)}function vr(n,t,r,e){t=r(t);for(var u=0,i=null==n?0:n.length,o=t!==t,f=null===t,c=wu(t),a=t===T;u<i;){var l=Ii((u+i)/2),s=r(n[l]),h=s!==T,p=null===s,_=s===s,v=wu(s);(o?e||_:a?_&&(e||h):f?_&&h&&(e||!p):c?_&&h&&!p&&(e||!v):p||v?0:e?s<=t:s<t)?u=l+1:i=l}return Ci(i,4294967294)}function gr(n,t){for(var r=-1,e=n.length,u=0,i=[];++r<e;){\nvar o=n[r],f=t?t(o):o;if(!r||!lu(f,c)){var c=f;i[u++]=0===o?0:o}}return i}function dr(n){return typeof n==\"number\"?n:wu(n)?F:+n}function yr(n){if(typeof n==\"string\")return n;if(ff(n))return c(n,yr)+\"\";if(wu(n))return ro?ro.call(n):\"\";var t=n+\"\";return\"0\"==t&&1/n==-$?\"-0\":t}function br(n,t,r){var e=-1,u=o,i=n.length,c=true,a=[],l=a;if(r)c=false,u=f;else if(200<=i){if(u=t?null:so(n))return U(u);c=false,u=O,l=new Nn}else l=t?[]:a;n:for(;++e<i;){var s=n[e],h=t?t(s):s,s=r||0!==s?s:0;if(c&&h===h){for(var p=l.length;p--;)if(l[p]===h)continue n;\nt&&l.push(h),a.push(s)}else u(l,h,r)||(l!==a&&l.push(h),a.push(s))}return a}function xr(n,t){return t=Sr(t,n),n=2>t.length?n:kt(n,hr(t,0,-1)),null==n||delete n[Me(Ve(t))]}function jr(n,t,r,e){for(var u=n.length,i=e?u:-1;(e?i--:++i<u)&&t(n[i],i,n););return r?hr(n,e?0:i,e?i+1:u):hr(n,e?i+1:0,e?u:i)}function wr(n,t){var r=n;return r instanceof Un&&(r=r.value()),l(t,function(n,t){return t.func.apply(t.thisArg,a([n],t.args))},r)}function mr(n,t,r){var e=n.length;if(2>e)return e?br(n[0]):[];for(var u=-1,i=Ku(e);++u<e;)for(var o=n[u],f=-1;++f<e;)f!=u&&(i[u]=yt(i[u]||o,n[f],t,r));\nreturn br(wt(i,1),t,r)}function Ar(n,t,r){for(var e=-1,u=n.length,i=t.length,o={};++e<u;)r(o,n[e],e<i?t[e]:T);return o}function Er(n){return hu(n)?n:[]}function kr(n){return typeof n==\"function\"?n:$u}function Sr(n,t){return ff(n)?n:Ie(n,t)?[n]:jo(Iu(n))}function Or(n,t,r){var e=n.length;return r=r===T?e:r,!t&&r>=e?n:hr(n,t,r)}function Ir(n,t){if(t)return n.slice();var r=n.length,r=gi?gi(r):new n.constructor(r);return n.copy(r),r}function Rr(n){var t=new n.constructor(n.byteLength);return new vi(t).set(new vi(n)),\nt}function zr(n,t){return new n.constructor(t?Rr(n.buffer):n.buffer,n.byteOffset,n.length)}function Wr(n,t){if(n!==t){var r=n!==T,e=null===n,u=n===n,i=wu(n),o=t!==T,f=null===t,c=t===t,a=wu(t);if(!f&&!a&&!i&&n>t||i&&o&&c&&!f&&!a||e&&o&&c||!r&&c||!u)return 1;if(!e&&!i&&!a&&n<t||a&&r&&u&&!e&&!i||f&&r&&u||!o&&u||!c)return-1}return 0}function Br(n,t,r,e){var u=-1,i=n.length,o=r.length,f=-1,c=t.length,a=Ui(i-o,0),l=Ku(c+a);for(e=!e;++f<c;)l[f]=t[f];for(;++u<o;)(e||u<i)&&(l[r[u]]=n[u]);for(;a--;)l[f++]=n[u++];\nreturn l}function Lr(n,t,r,e){var u=-1,i=n.length,o=-1,f=r.length,c=-1,a=t.length,l=Ui(i-f,0),s=Ku(l+a);for(e=!e;++u<l;)s[u]=n[u];for(l=u;++c<a;)s[l+c]=t[c];for(;++o<f;)(e||u<i)&&(s[l+r[o]]=n[u++]);return s}function Ur(n,t){var r=-1,e=n.length;for(t||(t=Ku(e));++r<e;)t[r]=n[r];return t}function Cr(n,t,r,e){var u=!r;r||(r={});for(var i=-1,o=t.length;++i<o;){var f=t[i],c=e?e(r[f],n[f],f,r,n):T;c===T&&(c=n[f]),u?st(r,f,c):ot(r,f,c)}return r}function Dr(n,t){return Cr(n,po(n),t)}function Mr(n,t){return Cr(n,_o(n),t);\n}function Tr(n,r){return function(e,u){var i=ff(e)?t:ct,o=r?r():{};return i(e,n,ye(u,2),o)}}function $r(n){return fr(function(t,r){var e=-1,u=r.length,i=1<u?r[u-1]:T,o=2<u?r[2]:T,i=3<n.length&&typeof i==\"function\"?(u--,i):T;for(o&&Oe(r[0],r[1],o)&&(i=3>u?T:i,u=1),t=Qu(t);++e<u;)(o=r[e])&&n(t,o,e,i);return t})}function Fr(n,t){return function(r,e){if(null==r)return r;if(!su(r))return n(r,e);for(var u=r.length,i=t?u:-1,o=Qu(r);(t?i--:++i<u)&&false!==e(o[i],i,o););return r}}function Nr(n){return function(t,r,e){\nvar u=-1,i=Qu(t);e=e(t);for(var o=e.length;o--;){var f=e[n?o:++u];if(false===r(i[f],f,i))break}return t}}function Pr(n,t,r){function e(){return(this&&this!==$n&&this instanceof e?i:n).apply(u?r:this,arguments)}var u=1&t,i=Vr(n);return e}function Zr(n){return function(t){t=Iu(t);var r=Rn.test(t)?M(t):T,e=r?r[0]:t.charAt(0);return t=r?Or(r,1).join(\"\"):t.slice(1),e[n]()+t}}function qr(n){return function(t){return l(Mu(Du(t).replace(kn,\"\")),n,\"\")}}function Vr(n){return function(){var t=arguments;switch(t.length){\ncase 0:return new n;case 1:return new n(t[0]);case 2:return new n(t[0],t[1]);case 3:return new n(t[0],t[1],t[2]);case 4:return new n(t[0],t[1],t[2],t[3]);case 5:return new n(t[0],t[1],t[2],t[3],t[4]);case 6:return new n(t[0],t[1],t[2],t[3],t[4],t[5]);case 7:return new n(t[0],t[1],t[2],t[3],t[4],t[5],t[6])}var r=eo(n.prototype),t=n.apply(r,t);return du(t)?t:r}}function Kr(t,r,e){function u(){for(var o=arguments.length,f=Ku(o),c=o,a=de(u);c--;)f[c]=arguments[c];return c=3>o&&f[0]!==a&&f[o-1]!==a?[]:L(f,a),\no-=c.length,o<e?ue(t,r,Jr,u.placeholder,T,f,c,T,T,e-o):n(this&&this!==$n&&this instanceof u?i:t,this,f)}var i=Vr(t);return u}function Gr(n){return function(t,r,e){var u=Qu(t);if(!su(t)){var i=ye(r,3);t=Wu(t),r=function(n){return i(u[n],n,u)}}return r=n(t,r,e),-1<r?u[i?t[r]:r]:T}}function Hr(n){return pe(function(t){var r=t.length,e=r,u=On.prototype.thru;for(n&&t.reverse();e--;){var i=t[e];if(typeof i!=\"function\")throw new ti(\"Expected a function\");if(u&&!o&&\"wrapper\"==ge(i))var o=new On([],true)}for(e=o?e:r;++e<r;)var i=t[e],u=ge(i),f=\"wrapper\"==u?ho(i):T,o=f&&Re(f[0])&&424==f[1]&&!f[4].length&&1==f[9]?o[ge(f[0])].apply(o,f[3]):1==i.length&&Re(i)?o[u]():o.thru(i);\nreturn function(){var n=arguments,e=n[0];if(o&&1==n.length&&ff(e))return o.plant(e).value();for(var u=0,n=r?t[u].apply(this,n):e;++u<r;)n=t[u].call(this,n);return n}})}function Jr(n,t,r,e,u,i,o,f,c,a){function l(){for(var d=arguments.length,y=Ku(d),b=d;b--;)y[b]=arguments[b];if(_){var x,j=de(l),b=y.length;for(x=0;b--;)y[b]===j&&++x}if(e&&(y=Br(y,e,u,_)),i&&(y=Lr(y,i,o,_)),d-=x,_&&d<a)return j=L(y,j),ue(n,t,Jr,l.placeholder,r,y,j,f,c,a-d);if(j=h?r:this,b=p?j[n]:n,d=y.length,f){x=y.length;for(var w=Ci(f.length,x),m=Ur(y);w--;){\nvar A=f[w];y[w]=Se(A,x)?m[A]:T}}else v&&1<d&&y.reverse();return s&&c<d&&(y.length=c),this&&this!==$n&&this instanceof l&&(b=g||Vr(b)),b.apply(j,y)}var s=128&t,h=1&t,p=2&t,_=24&t,v=512&t,g=p?T:Vr(n);return l}function Yr(n,t){return function(r,e){return Bt(r,n,t(e))}}function Qr(n,t){return function(r,e){var u;if(r===T&&e===T)return t;if(r!==T&&(u=r),e!==T){if(u===T)return e;typeof r==\"string\"||typeof e==\"string\"?(r=yr(r),e=yr(e)):(r=dr(r),e=dr(e)),u=n(r,e)}return u}}function Xr(t){return pe(function(r){\nreturn r=c(r,k(ye())),fr(function(e){var u=this;return t(r,function(t){return n(t,u,e)})})})}function ne(n,t){t=t===T?\" \":yr(t);var r=t.length;return 2>r?r?or(t,n):t:(r=or(t,Oi(n/D(t))),Rn.test(t)?Or(M(r),0,n).join(\"\"):r.slice(0,n))}function te(t,r,e,u){function i(){for(var r=-1,c=arguments.length,a=-1,l=u.length,s=Ku(l+c),h=this&&this!==$n&&this instanceof i?f:t;++a<l;)s[a]=u[a];for(;c--;)s[a++]=arguments[++r];return n(h,o?e:this,s)}var o=1&r,f=Vr(t);return i}function re(n){return function(t,r,e){\ne&&typeof e!=\"number\"&&Oe(t,r,e)&&(r=e=T),t=Au(t),r===T?(r=t,t=0):r=Au(r),e=e===T?t<r?1:-1:Au(e);var u=-1;r=Ui(Oi((r-t)/(e||1)),0);for(var i=Ku(r);r--;)i[n?r:++u]=t,t+=e;return i}}function ee(n){return function(t,r){return typeof t==\"string\"&&typeof r==\"string\"||(t=Su(t),r=Su(r)),n(t,r)}}function ue(n,t,r,e,u,i,o,f,c,a){var l=8&t,s=l?o:T;o=l?T:o;var h=l?i:T;return i=l?T:i,t=(t|(l?32:64))&~(l?64:32),4&t||(t&=-4),u=[n,t,u,h,s,i,o,f,c,a],r=r.apply(T,u),Re(n)&&yo(r,u),r.placeholder=e,Ue(r,n,t)}function ie(n){\nvar t=Yu[n];return function(n,r){if(n=Su(n),(r=null==r?0:Ci(Eu(r),292))&&Wi(n)){var e=(Iu(n)+\"e\").split(\"e\"),e=t(e[0]+\"e\"+(+e[1]+r)),e=(Iu(e)+\"e\").split(\"e\");return+(e[0]+\"e\"+(+e[1]-r))}return t(n)}}function oe(n){return function(t){var r=vo(t);return\"[object Map]\"==r?W(t):\"[object Set]\"==r?C(t):E(t,n(t))}}function fe(n,t,r,e,u,i,o,f){var c=2&t;if(!c&&typeof n!=\"function\")throw new ti(\"Expected a function\");var a=e?e.length:0;if(a||(t&=-97,e=u=T),o=o===T?o:Ui(Eu(o),0),f=f===T?f:Eu(f),a-=u?u.length:0,\n64&t){var l=e,s=u;e=u=T}var h=c?T:ho(n);return i=[n,t,r,e,u,l,s,i,o,f],h&&(r=i[1],n=h[1],t=r|n,e=128==n&&8==r||128==n&&256==r&&i[7].length<=h[8]||384==n&&h[7].length<=h[8]&&8==r,131>t||e)&&(1&n&&(i[2]=h[2],t|=1&r?0:4),(r=h[3])&&(e=i[3],i[3]=e?Br(e,r,h[4]):r,i[4]=e?L(i[3],\"__lodash_placeholder__\"):h[4]),(r=h[5])&&(e=i[5],i[5]=e?Lr(e,r,h[6]):r,i[6]=e?L(i[5],\"__lodash_placeholder__\"):h[6]),(r=h[7])&&(i[7]=r),128&n&&(i[8]=null==i[8]?h[8]:Ci(i[8],h[8])),null==i[9]&&(i[9]=h[9]),i[0]=h[0],i[1]=t),n=i[0],\nt=i[1],r=i[2],e=i[3],u=i[4],f=i[9]=i[9]===T?c?0:n.length:Ui(i[9]-a,0),!f&&24&t&&(t&=-25),Ue((h?co:yo)(t&&1!=t?8==t||16==t?Kr(n,t,f):32!=t&&33!=t||u.length?Jr.apply(T,i):te(n,t,r,e):Pr(n,t,r),i),n,t)}function ce(n,t,r,e){return n===T||lu(n,ei[r])&&!oi.call(e,r)?t:n}function ae(n,t,r,e,u,i){return du(n)&&du(t)&&(i.set(t,n),Yt(n,t,T,ae,i),i.delete(t)),n}function le(n){return xu(n)?T:n}function se(n,t,r,e,u,i){var o=1&r,f=n.length,c=t.length;if(f!=c&&!(o&&c>f))return false;if((c=i.get(n))&&i.get(t))return c==t;\nvar c=-1,a=true,l=2&r?new Nn:T;for(i.set(n,t),i.set(t,n);++c<f;){var s=n[c],p=t[c];if(e)var _=o?e(p,s,c,t,n,i):e(s,p,c,n,t,i);if(_!==T){if(_)continue;a=false;break}if(l){if(!h(t,function(n,t){if(!O(l,t)&&(s===n||u(s,n,r,e,i)))return l.push(t)})){a=false;break}}else if(s!==p&&!u(s,p,r,e,i)){a=false;break}}return i.delete(n),i.delete(t),a}function he(n,t,r,e,u,i,o){switch(r){case\"[object DataView]\":if(n.byteLength!=t.byteLength||n.byteOffset!=t.byteOffset)break;n=n.buffer,t=t.buffer;case\"[object ArrayBuffer]\":\nif(n.byteLength!=t.byteLength||!i(new vi(n),new vi(t)))break;return true;case\"[object Boolean]\":case\"[object Date]\":case\"[object Number]\":return lu(+n,+t);case\"[object Error]\":return n.name==t.name&&n.message==t.message;case\"[object RegExp]\":case\"[object String]\":return n==t+\"\";case\"[object Map]\":var f=W;case\"[object Set]\":if(f||(f=U),n.size!=t.size&&!(1&e))break;return(r=o.get(n))?r==t:(e|=2,o.set(n,t),t=se(f(n),f(t),e,u,i,o),o.delete(n),t);case\"[object Symbol]\":if(to)return to.call(n)==to.call(t)}\nreturn false}function pe(n){return xo(Be(n,T,Ze),n+\"\")}function _e(n){return St(n,Wu,po)}function ve(n){return St(n,Bu,_o)}function ge(n){for(var t=n.name+\"\",r=Gi[t],e=oi.call(Gi,t)?r.length:0;e--;){var u=r[e],i=u.func;if(null==i||i==n)return u.name}return t}function de(n){return(oi.call(An,\"placeholder\")?An:n).placeholder}function ye(){var n=An.iteratee||Fu,n=n===Fu?qt:n;return arguments.length?n(arguments[0],arguments[1]):n}function be(n,t){var r=n.__data__,e=typeof t;return(\"string\"==e||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==t:null===t)?r[typeof t==\"string\"?\"string\":\"hash\"]:r.map;\n}function xe(n){for(var t=Wu(n),r=t.length;r--;){var e=t[r],u=n[e];t[r]=[e,u,u===u&&!du(u)]}return t}function je(n,t){var r=null==n?T:n[t];return Ft(r)?r:T}function we(n,t,r){t=Sr(t,n);for(var e=-1,u=t.length,i=false;++e<u;){var o=Me(t[e]);if(!(i=null!=n&&r(n,o)))break;n=n[o]}return i||++e!=u?i:(u=null==n?0:n.length,!!u&&gu(u)&&Se(o,u)&&(ff(n)||of(n)))}function me(n){var t=n.length,r=new n.constructor(t);return t&&\"string\"==typeof n[0]&&oi.call(n,\"index\")&&(r.index=n.index,r.input=n.input),r}function Ae(n){\nreturn typeof n.constructor!=\"function\"||ze(n)?{}:eo(di(n))}function Ee(n,t,r){var e=n.constructor;switch(t){case\"[object ArrayBuffer]\":return Rr(n);case\"[object Boolean]\":case\"[object Date]\":return new e(+n);case\"[object DataView]\":return t=r?Rr(n.buffer):n.buffer,new n.constructor(t,n.byteOffset,n.byteLength);case\"[object Float32Array]\":case\"[object Float64Array]\":case\"[object Int8Array]\":case\"[object Int16Array]\":case\"[object Int32Array]\":case\"[object Uint8Array]\":case\"[object Uint8ClampedArray]\":\ncase\"[object Uint16Array]\":case\"[object Uint32Array]\":return zr(n,r);case\"[object Map]\":return new e;case\"[object Number]\":case\"[object String]\":return new e(n);case\"[object RegExp]\":return t=new n.constructor(n.source,_n.exec(n)),t.lastIndex=n.lastIndex,t;case\"[object Set]\":return new e;case\"[object Symbol]\":return to?Qu(to.call(n)):{}}}function ke(n){return ff(n)||of(n)||!!(ji&&n&&n[ji])}function Se(n,t){var r=typeof n;return t=null==t?9007199254740991:t,!!t&&(\"number\"==r||\"symbol\"!=r&&bn.test(n))&&-1<n&&0==n%1&&n<t;\n}function Oe(n,t,r){if(!du(r))return false;var e=typeof t;return!!(\"number\"==e?su(r)&&Se(t,r.length):\"string\"==e&&t in r)&&lu(r[t],n)}function Ie(n,t){if(ff(n))return false;var r=typeof n;return!(\"number\"!=r&&\"symbol\"!=r&&\"boolean\"!=r&&null!=n&&!wu(n))||(nn.test(n)||!X.test(n)||null!=t&&n in Qu(t))}function Re(n){var t=ge(n),r=An[t];return typeof r==\"function\"&&t in Un.prototype&&(n===r||(t=ho(r),!!t&&n===t[0]))}function ze(n){var t=n&&n.constructor;return n===(typeof t==\"function\"&&t.prototype||ei)}function We(n,t){\nreturn function(r){return null!=r&&(r[n]===t&&(t!==T||n in Qu(r)))}}function Be(t,r,e){return r=Ui(r===T?t.length-1:r,0),function(){for(var u=arguments,i=-1,o=Ui(u.length-r,0),f=Ku(o);++i<o;)f[i]=u[r+i];for(i=-1,o=Ku(r+1);++i<r;)o[i]=u[i];return o[r]=e(f),n(t,this,o)}}function Le(n,t){if((\"constructor\"!==t||\"function\"!=typeof n[t])&&\"__proto__\"!=t)return n[t]}function Ue(n,t,r){var e=t+\"\";t=xo;var u,i=$e;return u=(u=e.match(an))?u[1].split(ln):[],r=i(u,r),(i=r.length)&&(u=i-1,r[u]=(1<i?\"& \":\"\")+r[u],\nr=r.join(2<i?\", \":\" \"),e=e.replace(cn,\"{\\n/* [wrapped with \"+r+\"] */\\n\")),t(n,e)}function Ce(n){var t=0,r=0;return function(){var e=Di(),u=16-(e-r);if(r=e,0<u){if(800<=++t)return arguments[0]}else t=0;return n.apply(T,arguments)}}function De(n,t){var r=-1,e=n.length,u=e-1;for(t=t===T?e:t;++r<t;){var e=ir(r,u),i=n[e];n[e]=n[r],n[r]=i}return n.length=t,n}function Me(n){if(typeof n==\"string\"||wu(n))return n;var t=n+\"\";return\"0\"==t&&1/n==-$?\"-0\":t}function Te(n){if(null!=n){try{return ii.call(n)}catch(n){}\nreturn n+\"\"}return\"\"}function $e(n,t){return r(N,function(r){var e=\"_.\"+r[0];t&r[1]&&!o(n,e)&&n.push(e)}),n.sort()}function Fe(n){if(n instanceof Un)return n.clone();var t=new On(n.__wrapped__,n.__chain__);return t.__actions__=Ur(n.__actions__),t.__index__=n.__index__,t.__values__=n.__values__,t}function Ne(n,t,r){var e=null==n?0:n.length;return e?(r=null==r?0:Eu(r),0>r&&(r=Ui(e+r,0)),_(n,ye(t,3),r)):-1}function Pe(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e-1;return r!==T&&(u=Eu(r),u=0>r?Ui(e+u,0):Ci(u,e-1)),\n_(n,ye(t,3),u,true)}function Ze(n){return(null==n?0:n.length)?wt(n,1):[]}function qe(n){return n&&n.length?n[0]:T}function Ve(n){var t=null==n?0:n.length;return t?n[t-1]:T}function Ke(n,t){return n&&n.length&&t&&t.length?er(n,t):n}function Ge(n){return null==n?n:$i.call(n)}function He(n){if(!n||!n.length)return[];var t=0;return n=i(n,function(n){if(hu(n))return t=Ui(n.length,t),true}),A(t,function(t){return c(n,b(t))})}function Je(t,r){if(!t||!t.length)return[];var e=He(t);return null==r?e:c(e,function(t){\nreturn n(r,T,t)})}function Ye(n){return n=An(n),n.__chain__=true,n}function Qe(n,t){return t(n)}function Xe(){return this}function nu(n,t){return(ff(n)?r:uo)(n,ye(t,3))}function tu(n,t){return(ff(n)?e:io)(n,ye(t,3))}function ru(n,t){return(ff(n)?c:Gt)(n,ye(t,3))}function eu(n,t,r){return t=r?T:t,t=n&&null==t?n.length:t,fe(n,128,T,T,T,T,t)}function uu(n,t){var r;if(typeof t!=\"function\")throw new ti(\"Expected a function\");return n=Eu(n),function(){return 0<--n&&(r=t.apply(this,arguments)),1>=n&&(t=T),\nr}}function iu(n,t,r){return t=r?T:t,n=fe(n,8,T,T,T,T,T,t),n.placeholder=iu.placeholder,n}function ou(n,t,r){return t=r?T:t,n=fe(n,16,T,T,T,T,T,t),n.placeholder=ou.placeholder,n}function fu(n,t,r){function e(t){var r=c,e=a;return c=a=T,_=t,s=n.apply(e,r)}function u(n){var r=n-p;return n-=_,p===T||r>=t||0>r||g&&n>=l}function i(){var n=Go();if(u(n))return o(n);var r,e=bo;r=n-_,n=t-(n-p),r=g?Ci(n,l-r):n,h=e(i,r)}function o(n){return h=T,d&&c?e(n):(c=a=T,s)}function f(){var n=Go(),r=u(n);if(c=arguments,\na=this,p=n,r){if(h===T)return _=n=p,h=bo(i,t),v?e(n):s;if(g)return lo(h),h=bo(i,t),e(p)}return h===T&&(h=bo(i,t)),s}var c,a,l,s,h,p,_=0,v=false,g=false,d=true;if(typeof n!=\"function\")throw new ti(\"Expected a function\");return t=Su(t)||0,du(r)&&(v=!!r.leading,l=(g=\"maxWait\"in r)?Ui(Su(r.maxWait)||0,t):l,d=\"trailing\"in r?!!r.trailing:d),f.cancel=function(){h!==T&&lo(h),_=0,c=p=a=h=T},f.flush=function(){return h===T?s:o(Go())},f}function cu(n,t){function r(){var e=arguments,u=t?t.apply(this,e):e[0],i=r.cache;\nreturn i.has(u)?i.get(u):(e=n.apply(this,e),r.cache=i.set(u,e)||i,e)}if(typeof n!=\"function\"||null!=t&&typeof t!=\"function\")throw new ti(\"Expected a function\");return r.cache=new(cu.Cache||Fn),r}function au(n){if(typeof n!=\"function\")throw new ti(\"Expected a function\");return function(){var t=arguments;switch(t.length){case 0:return!n.call(this);case 1:return!n.call(this,t[0]);case 2:return!n.call(this,t[0],t[1]);case 3:return!n.call(this,t[0],t[1],t[2])}return!n.apply(this,t)}}function lu(n,t){return n===t||n!==n&&t!==t;\n}function su(n){return null!=n&&gu(n.length)&&!_u(n)}function hu(n){return yu(n)&&su(n)}function pu(n){if(!yu(n))return false;var t=Ot(n);return\"[object Error]\"==t||\"[object DOMException]\"==t||typeof n.message==\"string\"&&typeof n.name==\"string\"&&!xu(n)}function _u(n){return!!du(n)&&(n=Ot(n),\"[object Function]\"==n||\"[object GeneratorFunction]\"==n||\"[object AsyncFunction]\"==n||\"[object Proxy]\"==n)}function vu(n){return typeof n==\"number\"&&n==Eu(n)}function gu(n){return typeof n==\"number\"&&-1<n&&0==n%1&&9007199254740991>=n;\n}function du(n){var t=typeof n;return null!=n&&(\"object\"==t||\"function\"==t)}function yu(n){return null!=n&&typeof n==\"object\"}function bu(n){return typeof n==\"number\"||yu(n)&&\"[object Number]\"==Ot(n)}function xu(n){return!(!yu(n)||\"[object Object]\"!=Ot(n))&&(n=di(n),null===n||(n=oi.call(n,\"constructor\")&&n.constructor,typeof n==\"function\"&&n instanceof n&&ii.call(n)==li))}function ju(n){return typeof n==\"string\"||!ff(n)&&yu(n)&&\"[object String]\"==Ot(n)}function wu(n){return typeof n==\"symbol\"||yu(n)&&\"[object Symbol]\"==Ot(n);\n}function mu(n){if(!n)return[];if(su(n))return ju(n)?M(n):Ur(n);if(wi&&n[wi]){n=n[wi]();for(var t,r=[];!(t=n.next()).done;)r.push(t.value);return r}return t=vo(n),(\"[object Map]\"==t?W:\"[object Set]\"==t?U:Uu)(n)}function Au(n){return n?(n=Su(n),n===$||n===-$?1.7976931348623157e308*(0>n?-1:1):n===n?n:0):0===n?n:0}function Eu(n){n=Au(n);var t=n%1;return n===n?t?n-t:n:0}function ku(n){return n?pt(Eu(n),0,4294967295):0}function Su(n){if(typeof n==\"number\")return n;if(wu(n))return F;if(du(n)&&(n=typeof n.valueOf==\"function\"?n.valueOf():n,\nn=du(n)?n+\"\":n),typeof n!=\"string\")return 0===n?n:+n;n=n.replace(un,\"\");var t=gn.test(n);return t||yn.test(n)?Dn(n.slice(2),t?2:8):vn.test(n)?F:+n}function Ou(n){return Cr(n,Bu(n))}function Iu(n){return null==n?\"\":yr(n)}function Ru(n,t,r){return n=null==n?T:kt(n,t),n===T?r:n}function zu(n,t){return null!=n&&we(n,t,zt)}function Wu(n){return su(n)?qn(n):Vt(n)}function Bu(n){if(su(n))n=qn(n,true);else if(du(n)){var t,r=ze(n),e=[];for(t in n)(\"constructor\"!=t||!r&&oi.call(n,t))&&e.push(t);n=e}else{if(t=[],\nnull!=n)for(r in Qu(n))t.push(r);n=t}return n}function Lu(n,t){if(null==n)return{};var r=c(ve(n),function(n){return[n]});return t=ye(t),tr(n,r,function(n,r){return t(n,r[0])})}function Uu(n){return null==n?[]:S(n,Wu(n))}function Cu(n){return $f(Iu(n).toLowerCase())}function Du(n){return(n=Iu(n))&&n.replace(xn,Xn).replace(Sn,\"\")}function Mu(n,t,r){return n=Iu(n),t=r?T:t,t===T?zn.test(n)?n.match(In)||[]:n.match(sn)||[]:n.match(t)||[]}function Tu(n){return function(){return n}}function $u(n){return n;\n}function Fu(n){return qt(typeof n==\"function\"?n:_t(n,1))}function Nu(n,t,e){var u=Wu(t),i=Et(t,u);null!=e||du(t)&&(i.length||!u.length)||(e=t,t=n,n=this,i=Et(t,Wu(t)));var o=!(du(e)&&\"chain\"in e&&!e.chain),f=_u(n);return r(i,function(r){var e=t[r];n[r]=e,f&&(n.prototype[r]=function(){var t=this.__chain__;if(o||t){var r=n(this.__wrapped__);return(r.__actions__=Ur(this.__actions__)).push({func:e,args:arguments,thisArg:n}),r.__chain__=t,r}return e.apply(n,a([this.value()],arguments))})}),n}function Pu(){}\nfunction Zu(n){return Ie(n)?b(Me(n)):rr(n)}function qu(){return[]}function Vu(){return false}mn=null==mn?$n:rt.defaults($n.Object(),mn,rt.pick($n,Wn));var Ku=mn.Array,Gu=mn.Date,Hu=mn.Error,Ju=mn.Function,Yu=mn.Math,Qu=mn.Object,Xu=mn.RegExp,ni=mn.String,ti=mn.TypeError,ri=Ku.prototype,ei=Qu.prototype,ui=mn[\"__core-js_shared__\"],ii=Ju.prototype.toString,oi=ei.hasOwnProperty,fi=0,ci=function(){var n=/[^.]+$/.exec(ui&&ui.keys&&ui.keys.IE_PROTO||\"\");return n?\"Symbol(src)_1.\"+n:\"\"}(),ai=ei.toString,li=ii.call(Qu),si=$n._,hi=Xu(\"^\"+ii.call(oi).replace(rn,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),pi=Pn?mn.Buffer:T,_i=mn.Symbol,vi=mn.Uint8Array,gi=pi?pi.g:T,di=B(Qu.getPrototypeOf,Qu),yi=Qu.create,bi=ei.propertyIsEnumerable,xi=ri.splice,ji=_i?_i.isConcatSpreadable:T,wi=_i?_i.iterator:T,mi=_i?_i.toStringTag:T,Ai=function(){\ntry{var n=je(Qu,\"defineProperty\");return n({},\"\",{}),n}catch(n){}}(),Ei=mn.clearTimeout!==$n.clearTimeout&&mn.clearTimeout,ki=Gu&&Gu.now!==$n.Date.now&&Gu.now,Si=mn.setTimeout!==$n.setTimeout&&mn.setTimeout,Oi=Yu.ceil,Ii=Yu.floor,Ri=Qu.getOwnPropertySymbols,zi=pi?pi.isBuffer:T,Wi=mn.isFinite,Bi=ri.join,Li=B(Qu.keys,Qu),Ui=Yu.max,Ci=Yu.min,Di=Gu.now,Mi=mn.parseInt,Ti=Yu.random,$i=ri.reverse,Fi=je(mn,\"DataView\"),Ni=je(mn,\"Map\"),Pi=je(mn,\"Promise\"),Zi=je(mn,\"Set\"),qi=je(mn,\"WeakMap\"),Vi=je(Qu,\"create\"),Ki=qi&&new qi,Gi={},Hi=Te(Fi),Ji=Te(Ni),Yi=Te(Pi),Qi=Te(Zi),Xi=Te(qi),no=_i?_i.prototype:T,to=no?no.valueOf:T,ro=no?no.toString:T,eo=function(){\nfunction n(){}return function(t){return du(t)?yi?yi(t):(n.prototype=t,t=new n,n.prototype=T,t):{}}}();An.templateSettings={escape:J,evaluate:Y,interpolate:Q,variable:\"\",imports:{_:An}},An.prototype=En.prototype,An.prototype.constructor=An,On.prototype=eo(En.prototype),On.prototype.constructor=On,Un.prototype=eo(En.prototype),Un.prototype.constructor=Un,Mn.prototype.clear=function(){this.__data__=Vi?Vi(null):{},this.size=0},Mn.prototype.delete=function(n){return n=this.has(n)&&delete this.__data__[n],\nthis.size-=n?1:0,n},Mn.prototype.get=function(n){var t=this.__data__;return Vi?(n=t[n],\"__lodash_hash_undefined__\"===n?T:n):oi.call(t,n)?t[n]:T},Mn.prototype.has=function(n){var t=this.__data__;return Vi?t[n]!==T:oi.call(t,n)},Mn.prototype.set=function(n,t){var r=this.__data__;return this.size+=this.has(n)?0:1,r[n]=Vi&&t===T?\"__lodash_hash_undefined__\":t,this},Tn.prototype.clear=function(){this.__data__=[],this.size=0},Tn.prototype.delete=function(n){var t=this.__data__;return n=ft(t,n),!(0>n)&&(n==t.length-1?t.pop():xi.call(t,n,1),\n--this.size,true)},Tn.prototype.get=function(n){var t=this.__data__;return n=ft(t,n),0>n?T:t[n][1]},Tn.prototype.has=function(n){return-1<ft(this.__data__,n)},Tn.prototype.set=function(n,t){var r=this.__data__,e=ft(r,n);return 0>e?(++this.size,r.push([n,t])):r[e][1]=t,this},Fn.prototype.clear=function(){this.size=0,this.__data__={hash:new Mn,map:new(Ni||Tn),string:new Mn}},Fn.prototype.delete=function(n){return n=be(this,n).delete(n),this.size-=n?1:0,n},Fn.prototype.get=function(n){return be(this,n).get(n);\n},Fn.prototype.has=function(n){return be(this,n).has(n)},Fn.prototype.set=function(n,t){var r=be(this,n),e=r.size;return r.set(n,t),this.size+=r.size==e?0:1,this},Nn.prototype.add=Nn.prototype.push=function(n){return this.__data__.set(n,\"__lodash_hash_undefined__\"),this},Nn.prototype.has=function(n){return this.__data__.has(n)},Zn.prototype.clear=function(){this.__data__=new Tn,this.size=0},Zn.prototype.delete=function(n){var t=this.__data__;return n=t.delete(n),this.size=t.size,n},Zn.prototype.get=function(n){\nreturn this.__data__.get(n)},Zn.prototype.has=function(n){return this.__data__.has(n)},Zn.prototype.set=function(n,t){var r=this.__data__;if(r instanceof Tn){var e=r.__data__;if(!Ni||199>e.length)return e.push([n,t]),this.size=++r.size,this;r=this.__data__=new Fn(e)}return r.set(n,t),this.size=r.size,this};var uo=Fr(mt),io=Fr(At,true),oo=Nr(),fo=Nr(true),co=Ki?function(n,t){return Ki.set(n,t),n}:$u,ao=Ai?function(n,t){return Ai(n,\"toString\",{configurable:true,enumerable:false,value:Tu(t),writable:true})}:$u,lo=Ei||function(n){\nreturn $n.clearTimeout(n)},so=Zi&&1/U(new Zi([,-0]))[1]==$?function(n){return new Zi(n)}:Pu,ho=Ki?function(n){return Ki.get(n)}:Pu,po=Ri?function(n){return null==n?[]:(n=Qu(n),i(Ri(n),function(t){return bi.call(n,t)}))}:qu,_o=Ri?function(n){for(var t=[];n;)a(t,po(n)),n=di(n);return t}:qu,vo=Ot;(Fi&&\"[object DataView]\"!=vo(new Fi(new ArrayBuffer(1)))||Ni&&\"[object Map]\"!=vo(new Ni)||Pi&&\"[object Promise]\"!=vo(Pi.resolve())||Zi&&\"[object Set]\"!=vo(new Zi)||qi&&\"[object WeakMap]\"!=vo(new qi))&&(vo=function(n){\nvar t=Ot(n);if(n=(n=\"[object Object]\"==t?n.constructor:T)?Te(n):\"\")switch(n){case Hi:return\"[object DataView]\";case Ji:return\"[object Map]\";case Yi:return\"[object Promise]\";case Qi:return\"[object Set]\";case Xi:return\"[object WeakMap]\"}return t});var go=ui?_u:Vu,yo=Ce(co),bo=Si||function(n,t){return $n.setTimeout(n,t)},xo=Ce(ao),jo=function(n){n=cu(n,function(n){return 500===t.size&&t.clear(),n});var t=n.cache;return n}(function(n){var t=[];return 46===n.charCodeAt(0)&&t.push(\"\"),n.replace(tn,function(n,r,e,u){\nt.push(e?u.replace(hn,\"$1\"):r||n)}),t}),wo=fr(function(n,t){return hu(n)?yt(n,wt(t,1,hu,true)):[]}),mo=fr(function(n,t){var r=Ve(t);return hu(r)&&(r=T),hu(n)?yt(n,wt(t,1,hu,true),ye(r,2)):[]}),Ao=fr(function(n,t){var r=Ve(t);return hu(r)&&(r=T),hu(n)?yt(n,wt(t,1,hu,true),T,r):[]}),Eo=fr(function(n){var t=c(n,Er);return t.length&&t[0]===n[0]?Wt(t):[]}),ko=fr(function(n){var t=Ve(n),r=c(n,Er);return t===Ve(r)?t=T:r.pop(),r.length&&r[0]===n[0]?Wt(r,ye(t,2)):[]}),So=fr(function(n){var t=Ve(n),r=c(n,Er);return(t=typeof t==\"function\"?t:T)&&r.pop(),\nr.length&&r[0]===n[0]?Wt(r,T,t):[]}),Oo=fr(Ke),Io=pe(function(n,t){var r=null==n?0:n.length,e=ht(n,t);return ur(n,c(t,function(n){return Se(n,r)?+n:n}).sort(Wr)),e}),Ro=fr(function(n){return br(wt(n,1,hu,true))}),zo=fr(function(n){var t=Ve(n);return hu(t)&&(t=T),br(wt(n,1,hu,true),ye(t,2))}),Wo=fr(function(n){var t=Ve(n),t=typeof t==\"function\"?t:T;return br(wt(n,1,hu,true),T,t)}),Bo=fr(function(n,t){return hu(n)?yt(n,t):[]}),Lo=fr(function(n){return mr(i(n,hu))}),Uo=fr(function(n){var t=Ve(n);return hu(t)&&(t=T),\nmr(i(n,hu),ye(t,2))}),Co=fr(function(n){var t=Ve(n),t=typeof t==\"function\"?t:T;return mr(i(n,hu),T,t)}),Do=fr(He),Mo=fr(function(n){var t=n.length,t=1<t?n[t-1]:T,t=typeof t==\"function\"?(n.pop(),t):T;return Je(n,t)}),To=pe(function(n){function t(t){return ht(t,n)}var r=n.length,e=r?n[0]:0,u=this.__wrapped__;return!(1<r||this.__actions__.length)&&u instanceof Un&&Se(e)?(u=u.slice(e,+e+(r?1:0)),u.__actions__.push({func:Qe,args:[t],thisArg:T}),new On(u,this.__chain__).thru(function(n){return r&&!n.length&&n.push(T),\nn})):this.thru(t)}),$o=Tr(function(n,t,r){oi.call(n,r)?++n[r]:st(n,r,1)}),Fo=Gr(Ne),No=Gr(Pe),Po=Tr(function(n,t,r){oi.call(n,r)?n[r].push(t):st(n,r,[t])}),Zo=fr(function(t,r,e){var u=-1,i=typeof r==\"function\",o=su(t)?Ku(t.length):[];return uo(t,function(t){o[++u]=i?n(r,t,e):Lt(t,r,e)}),o}),qo=Tr(function(n,t,r){st(n,r,t)}),Vo=Tr(function(n,t,r){n[r?0:1].push(t)},function(){return[[],[]]}),Ko=fr(function(n,t){if(null==n)return[];var r=t.length;return 1<r&&Oe(n,t[0],t[1])?t=[]:2<r&&Oe(t[0],t[1],t[2])&&(t=[t[0]]),\nXt(n,wt(t,1),[])}),Go=ki||function(){return $n.Date.now()},Ho=fr(function(n,t,r){var e=1;if(r.length)var u=L(r,de(Ho)),e=32|e;return fe(n,e,t,r,u)}),Jo=fr(function(n,t,r){var e=3;if(r.length)var u=L(r,de(Jo)),e=32|e;return fe(t,e,n,r,u)}),Yo=fr(function(n,t){return dt(n,1,t)}),Qo=fr(function(n,t,r){return dt(n,Su(t)||0,r)});cu.Cache=Fn;var Xo=fr(function(t,r){r=1==r.length&&ff(r[0])?c(r[0],k(ye())):c(wt(r,1),k(ye()));var e=r.length;return fr(function(u){for(var i=-1,o=Ci(u.length,e);++i<o;)u[i]=r[i].call(this,u[i]);\nreturn n(t,this,u)})}),nf=fr(function(n,t){return fe(n,32,T,t,L(t,de(nf)))}),tf=fr(function(n,t){return fe(n,64,T,t,L(t,de(tf)))}),rf=pe(function(n,t){return fe(n,256,T,T,T,t)}),ef=ee(It),uf=ee(function(n,t){return n>=t}),of=Ut(function(){return arguments}())?Ut:function(n){return yu(n)&&oi.call(n,\"callee\")&&!bi.call(n,\"callee\")},ff=Ku.isArray,cf=Vn?k(Vn):Ct,af=zi||Vu,lf=Kn?k(Kn):Dt,sf=Gn?k(Gn):Tt,hf=Hn?k(Hn):Nt,pf=Jn?k(Jn):Pt,_f=Yn?k(Yn):Zt,vf=ee(Kt),gf=ee(function(n,t){return n<=t}),df=$r(function(n,t){\nif(ze(t)||su(t))Cr(t,Wu(t),n);else for(var r in t)oi.call(t,r)&&ot(n,r,t[r])}),yf=$r(function(n,t){Cr(t,Bu(t),n)}),bf=$r(function(n,t,r,e){Cr(t,Bu(t),n,e)}),xf=$r(function(n,t,r,e){Cr(t,Wu(t),n,e)}),jf=pe(ht),wf=fr(function(n,t){n=Qu(n);var r=-1,e=t.length,u=2<e?t[2]:T;for(u&&Oe(t[0],t[1],u)&&(e=1);++r<e;)for(var u=t[r],i=Bu(u),o=-1,f=i.length;++o<f;){var c=i[o],a=n[c];(a===T||lu(a,ei[c])&&!oi.call(n,c))&&(n[c]=u[c])}return n}),mf=fr(function(t){return t.push(T,ae),n(Of,T,t)}),Af=Yr(function(n,t,r){\nnull!=t&&typeof t.toString!=\"function\"&&(t=ai.call(t)),n[t]=r},Tu($u)),Ef=Yr(function(n,t,r){null!=t&&typeof t.toString!=\"function\"&&(t=ai.call(t)),oi.call(n,t)?n[t].push(r):n[t]=[r]},ye),kf=fr(Lt),Sf=$r(function(n,t,r){Yt(n,t,r)}),Of=$r(function(n,t,r,e){Yt(n,t,r,e)}),If=pe(function(n,t){var r={};if(null==n)return r;var e=false;t=c(t,function(t){return t=Sr(t,n),e||(e=1<t.length),t}),Cr(n,ve(n),r),e&&(r=_t(r,7,le));for(var u=t.length;u--;)xr(r,t[u]);return r}),Rf=pe(function(n,t){return null==n?{}:nr(n,t);\n}),zf=oe(Wu),Wf=oe(Bu),Bf=qr(function(n,t,r){return t=t.toLowerCase(),n+(r?Cu(t):t)}),Lf=qr(function(n,t,r){return n+(r?\"-\":\"\")+t.toLowerCase()}),Uf=qr(function(n,t,r){return n+(r?\" \":\"\")+t.toLowerCase()}),Cf=Zr(\"toLowerCase\"),Df=qr(function(n,t,r){return n+(r?\"_\":\"\")+t.toLowerCase()}),Mf=qr(function(n,t,r){return n+(r?\" \":\"\")+$f(t)}),Tf=qr(function(n,t,r){return n+(r?\" \":\"\")+t.toUpperCase()}),$f=Zr(\"toUpperCase\"),Ff=fr(function(t,r){try{return n(t,T,r)}catch(n){return pu(n)?n:new Hu(n)}}),Nf=pe(function(n,t){\nreturn r(t,function(t){t=Me(t),st(n,t,Ho(n[t],n))}),n}),Pf=Hr(),Zf=Hr(true),qf=fr(function(n,t){return function(r){return Lt(r,n,t)}}),Vf=fr(function(n,t){return function(r){return Lt(n,r,t)}}),Kf=Xr(c),Gf=Xr(u),Hf=Xr(h),Jf=re(),Yf=re(true),Qf=Qr(function(n,t){return n+t},0),Xf=ie(\"ceil\"),nc=Qr(function(n,t){return n/t},1),tc=ie(\"floor\"),rc=Qr(function(n,t){return n*t},1),ec=ie(\"round\"),uc=Qr(function(n,t){return n-t},0);return An.after=function(n,t){if(typeof t!=\"function\")throw new ti(\"Expected a function\");\nreturn n=Eu(n),function(){if(1>--n)return t.apply(this,arguments)}},An.ary=eu,An.assign=df,An.assignIn=yf,An.assignInWith=bf,An.assignWith=xf,An.at=jf,An.before=uu,An.bind=Ho,An.bindAll=Nf,An.bindKey=Jo,An.castArray=function(){if(!arguments.length)return[];var n=arguments[0];return ff(n)?n:[n]},An.chain=Ye,An.chunk=function(n,t,r){if(t=(r?Oe(n,t,r):t===T)?1:Ui(Eu(t),0),r=null==n?0:n.length,!r||1>t)return[];for(var e=0,u=0,i=Ku(Oi(r/t));e<r;)i[u++]=hr(n,e,e+=t);return i},An.compact=function(n){for(var t=-1,r=null==n?0:n.length,e=0,u=[];++t<r;){\nvar i=n[t];i&&(u[e++]=i)}return u},An.concat=function(){var n=arguments.length;if(!n)return[];for(var t=Ku(n-1),r=arguments[0];n--;)t[n-1]=arguments[n];return a(ff(r)?Ur(r):[r],wt(t,1))},An.cond=function(t){var r=null==t?0:t.length,e=ye();return t=r?c(t,function(n){if(\"function\"!=typeof n[1])throw new ti(\"Expected a function\");return[e(n[0]),n[1]]}):[],fr(function(e){for(var u=-1;++u<r;){var i=t[u];if(n(i[0],this,e))return n(i[1],this,e)}})},An.conforms=function(n){return vt(_t(n,1))},An.constant=Tu,\nAn.countBy=$o,An.create=function(n,t){var r=eo(n);return null==t?r:at(r,t)},An.curry=iu,An.curryRight=ou,An.debounce=fu,An.defaults=wf,An.defaultsDeep=mf,An.defer=Yo,An.delay=Qo,An.difference=wo,An.differenceBy=mo,An.differenceWith=Ao,An.drop=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),hr(n,0>t?0:t,e)):[]},An.dropRight=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),t=e-t,hr(n,0,0>t?0:t)):[]},An.dropRightWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),true,true):[];\n},An.dropWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),true):[]},An.fill=function(n,t,r,e){var u=null==n?0:n.length;if(!u)return[];for(r&&typeof r!=\"number\"&&Oe(n,t,r)&&(r=0,e=u),u=n.length,r=Eu(r),0>r&&(r=-r>u?0:u+r),e=e===T||e>u?u:Eu(e),0>e&&(e+=u),e=r>e?0:ku(e);r<e;)n[r++]=t;return n},An.filter=function(n,t){return(ff(n)?i:jt)(n,ye(t,3))},An.flatMap=function(n,t){return wt(ru(n,t),1)},An.flatMapDeep=function(n,t){return wt(ru(n,t),$)},An.flatMapDepth=function(n,t,r){return r=r===T?1:Eu(r),\nwt(ru(n,t),r)},An.flatten=Ze,An.flattenDeep=function(n){return(null==n?0:n.length)?wt(n,$):[]},An.flattenDepth=function(n,t){return null!=n&&n.length?(t=t===T?1:Eu(t),wt(n,t)):[]},An.flip=function(n){return fe(n,512)},An.flow=Pf,An.flowRight=Zf,An.fromPairs=function(n){for(var t=-1,r=null==n?0:n.length,e={};++t<r;){var u=n[t];e[u[0]]=u[1]}return e},An.functions=function(n){return null==n?[]:Et(n,Wu(n))},An.functionsIn=function(n){return null==n?[]:Et(n,Bu(n))},An.groupBy=Po,An.initial=function(n){\nreturn(null==n?0:n.length)?hr(n,0,-1):[]},An.intersection=Eo,An.intersectionBy=ko,An.intersectionWith=So,An.invert=Af,An.invertBy=Ef,An.invokeMap=Zo,An.iteratee=Fu,An.keyBy=qo,An.keys=Wu,An.keysIn=Bu,An.map=ru,An.mapKeys=function(n,t){var r={};return t=ye(t,3),mt(n,function(n,e,u){st(r,t(n,e,u),n)}),r},An.mapValues=function(n,t){var r={};return t=ye(t,3),mt(n,function(n,e,u){st(r,e,t(n,e,u))}),r},An.matches=function(n){return Ht(_t(n,1))},An.matchesProperty=function(n,t){return Jt(n,_t(t,1))},An.memoize=cu,\nAn.merge=Sf,An.mergeWith=Of,An.method=qf,An.methodOf=Vf,An.mixin=Nu,An.negate=au,An.nthArg=function(n){return n=Eu(n),fr(function(t){return Qt(t,n)})},An.omit=If,An.omitBy=function(n,t){return Lu(n,au(ye(t)))},An.once=function(n){return uu(2,n)},An.orderBy=function(n,t,r,e){return null==n?[]:(ff(t)||(t=null==t?[]:[t]),r=e?T:r,ff(r)||(r=null==r?[]:[r]),Xt(n,t,r))},An.over=Kf,An.overArgs=Xo,An.overEvery=Gf,An.overSome=Hf,An.partial=nf,An.partialRight=tf,An.partition=Vo,An.pick=Rf,An.pickBy=Lu,An.property=Zu,\nAn.propertyOf=function(n){return function(t){return null==n?T:kt(n,t)}},An.pull=Oo,An.pullAll=Ke,An.pullAllBy=function(n,t,r){return n&&n.length&&t&&t.length?er(n,t,ye(r,2)):n},An.pullAllWith=function(n,t,r){return n&&n.length&&t&&t.length?er(n,t,T,r):n},An.pullAt=Io,An.range=Jf,An.rangeRight=Yf,An.rearg=rf,An.reject=function(n,t){return(ff(n)?i:jt)(n,au(ye(t,3)))},An.remove=function(n,t){var r=[];if(!n||!n.length)return r;var e=-1,u=[],i=n.length;for(t=ye(t,3);++e<i;){var o=n[e];t(o,e,n)&&(r.push(o),\nu.push(e))}return ur(n,u),r},An.rest=function(n,t){if(typeof n!=\"function\")throw new ti(\"Expected a function\");return t=t===T?t:Eu(t),fr(n,t)},An.reverse=Ge,An.sampleSize=function(n,t,r){return t=(r?Oe(n,t,r):t===T)?1:Eu(t),(ff(n)?et:ar)(n,t)},An.set=function(n,t,r){return null==n?n:lr(n,t,r)},An.setWith=function(n,t,r,e){return e=typeof e==\"function\"?e:T,null==n?n:lr(n,t,r,e)},An.shuffle=function(n){return(ff(n)?ut:sr)(n)},An.slice=function(n,t,r){var e=null==n?0:n.length;return e?(r&&typeof r!=\"number\"&&Oe(n,t,r)?(t=0,\nr=e):(t=null==t?0:Eu(t),r=r===T?e:Eu(r)),hr(n,t,r)):[]},An.sortBy=Ko,An.sortedUniq=function(n){return n&&n.length?gr(n):[]},An.sortedUniqBy=function(n,t){return n&&n.length?gr(n,ye(t,2)):[]},An.split=function(n,t,r){return r&&typeof r!=\"number\"&&Oe(n,t,r)&&(t=r=T),r=r===T?4294967295:r>>>0,r?(n=Iu(n))&&(typeof t==\"string\"||null!=t&&!hf(t))&&(t=yr(t),!t&&Rn.test(n))?Or(M(n),0,r):n.split(t,r):[]},An.spread=function(t,r){if(typeof t!=\"function\")throw new ti(\"Expected a function\");return r=null==r?0:Ui(Eu(r),0),\nfr(function(e){var u=e[r];return e=Or(e,0,r),u&&a(e,u),n(t,this,e)})},An.tail=function(n){var t=null==n?0:n.length;return t?hr(n,1,t):[]},An.take=function(n,t,r){return n&&n.length?(t=r||t===T?1:Eu(t),hr(n,0,0>t?0:t)):[]},An.takeRight=function(n,t,r){var e=null==n?0:n.length;return e?(t=r||t===T?1:Eu(t),t=e-t,hr(n,0>t?0:t,e)):[]},An.takeRightWhile=function(n,t){return n&&n.length?jr(n,ye(t,3),false,true):[]},An.takeWhile=function(n,t){return n&&n.length?jr(n,ye(t,3)):[]},An.tap=function(n,t){return t(n),\nn},An.throttle=function(n,t,r){var e=true,u=true;if(typeof n!=\"function\")throw new ti(\"Expected a function\");return du(r)&&(e=\"leading\"in r?!!r.leading:e,u=\"trailing\"in r?!!r.trailing:u),fu(n,t,{leading:e,maxWait:t,trailing:u})},An.thru=Qe,An.toArray=mu,An.toPairs=zf,An.toPairsIn=Wf,An.toPath=function(n){return ff(n)?c(n,Me):wu(n)?[n]:Ur(jo(Iu(n)))},An.toPlainObject=Ou,An.transform=function(n,t,e){var u=ff(n),i=u||af(n)||_f(n);if(t=ye(t,4),null==e){var o=n&&n.constructor;e=i?u?new o:[]:du(n)&&_u(o)?eo(di(n)):{};\n}return(i?r:mt)(n,function(n,r,u){return t(e,n,r,u)}),e},An.unary=function(n){return eu(n,1)},An.union=Ro,An.unionBy=zo,An.unionWith=Wo,An.uniq=function(n){return n&&n.length?br(n):[]},An.uniqBy=function(n,t){return n&&n.length?br(n,ye(t,2)):[]},An.uniqWith=function(n,t){return t=typeof t==\"function\"?t:T,n&&n.length?br(n,T,t):[]},An.unset=function(n,t){return null==n||xr(n,t)},An.unzip=He,An.unzipWith=Je,An.update=function(n,t,r){return null==n?n:lr(n,t,kr(r)(kt(n,t)),void 0)},An.updateWith=function(n,t,r,e){\nreturn e=typeof e==\"function\"?e:T,null!=n&&(n=lr(n,t,kr(r)(kt(n,t)),e)),n},An.values=Uu,An.valuesIn=function(n){return null==n?[]:S(n,Bu(n))},An.without=Bo,An.words=Mu,An.wrap=function(n,t){return nf(kr(t),n)},An.xor=Lo,An.xorBy=Uo,An.xorWith=Co,An.zip=Do,An.zipObject=function(n,t){return Ar(n||[],t||[],ot)},An.zipObjectDeep=function(n,t){return Ar(n||[],t||[],lr)},An.zipWith=Mo,An.entries=zf,An.entriesIn=Wf,An.extend=yf,An.extendWith=bf,Nu(An,An),An.add=Qf,An.attempt=Ff,An.camelCase=Bf,An.capitalize=Cu,\nAn.ceil=Xf,An.clamp=function(n,t,r){return r===T&&(r=t,t=T),r!==T&&(r=Su(r),r=r===r?r:0),t!==T&&(t=Su(t),t=t===t?t:0),pt(Su(n),t,r)},An.clone=function(n){return _t(n,4)},An.cloneDeep=function(n){return _t(n,5)},An.cloneDeepWith=function(n,t){return t=typeof t==\"function\"?t:T,_t(n,5,t)},An.cloneWith=function(n,t){return t=typeof t==\"function\"?t:T,_t(n,4,t)},An.conformsTo=function(n,t){return null==t||gt(n,t,Wu(t))},An.deburr=Du,An.defaultTo=function(n,t){return null==n||n!==n?t:n},An.divide=nc,An.endsWith=function(n,t,r){\nn=Iu(n),t=yr(t);var e=n.length,e=r=r===T?e:pt(Eu(r),0,e);return r-=t.length,0<=r&&n.slice(r,e)==t},An.eq=lu,An.escape=function(n){return(n=Iu(n))&&H.test(n)?n.replace(K,nt):n},An.escapeRegExp=function(n){return(n=Iu(n))&&en.test(n)?n.replace(rn,\"\\\\$&\"):n},An.every=function(n,t,r){var e=ff(n)?u:bt;return r&&Oe(n,t,r)&&(t=T),e(n,ye(t,3))},An.find=Fo,An.findIndex=Ne,An.findKey=function(n,t){return p(n,ye(t,3),mt)},An.findLast=No,An.findLastIndex=Pe,An.findLastKey=function(n,t){return p(n,ye(t,3),At);\n},An.floor=tc,An.forEach=nu,An.forEachRight=tu,An.forIn=function(n,t){return null==n?n:oo(n,ye(t,3),Bu)},An.forInRight=function(n,t){return null==n?n:fo(n,ye(t,3),Bu)},An.forOwn=function(n,t){return n&&mt(n,ye(t,3))},An.forOwnRight=function(n,t){return n&&At(n,ye(t,3))},An.get=Ru,An.gt=ef,An.gte=uf,An.has=function(n,t){return null!=n&&we(n,t,Rt)},An.hasIn=zu,An.head=qe,An.identity=$u,An.includes=function(n,t,r,e){return n=su(n)?n:Uu(n),r=r&&!e?Eu(r):0,e=n.length,0>r&&(r=Ui(e+r,0)),ju(n)?r<=e&&-1<n.indexOf(t,r):!!e&&-1<v(n,t,r);\n},An.indexOf=function(n,t,r){var e=null==n?0:n.length;return e?(r=null==r?0:Eu(r),0>r&&(r=Ui(e+r,0)),v(n,t,r)):-1},An.inRange=function(n,t,r){return t=Au(t),r===T?(r=t,t=0):r=Au(r),n=Su(n),n>=Ci(t,r)&&n<Ui(t,r)},An.invoke=kf,An.isArguments=of,An.isArray=ff,An.isArrayBuffer=cf,An.isArrayLike=su,An.isArrayLikeObject=hu,An.isBoolean=function(n){return true===n||false===n||yu(n)&&\"[object Boolean]\"==Ot(n)},An.isBuffer=af,An.isDate=lf,An.isElement=function(n){return yu(n)&&1===n.nodeType&&!xu(n)},An.isEmpty=function(n){\nif(null==n)return true;if(su(n)&&(ff(n)||typeof n==\"string\"||typeof n.splice==\"function\"||af(n)||_f(n)||of(n)))return!n.length;var t=vo(n);if(\"[object Map]\"==t||\"[object Set]\"==t)return!n.size;if(ze(n))return!Vt(n).length;for(var r in n)if(oi.call(n,r))return false;return true},An.isEqual=function(n,t){return Mt(n,t)},An.isEqualWith=function(n,t,r){var e=(r=typeof r==\"function\"?r:T)?r(n,t):T;return e===T?Mt(n,t,T,r):!!e},An.isError=pu,An.isFinite=function(n){return typeof n==\"number\"&&Wi(n)},An.isFunction=_u,\nAn.isInteger=vu,An.isLength=gu,An.isMap=sf,An.isMatch=function(n,t){return n===t||$t(n,t,xe(t))},An.isMatchWith=function(n,t,r){return r=typeof r==\"function\"?r:T,$t(n,t,xe(t),r)},An.isNaN=function(n){return bu(n)&&n!=+n},An.isNative=function(n){if(go(n))throw new Hu(\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\");return Ft(n)},An.isNil=function(n){return null==n},An.isNull=function(n){return null===n},An.isNumber=bu,An.isObject=du,An.isObjectLike=yu,An.isPlainObject=xu,An.isRegExp=hf,\nAn.isSafeInteger=function(n){return vu(n)&&-9007199254740991<=n&&9007199254740991>=n},An.isSet=pf,An.isString=ju,An.isSymbol=wu,An.isTypedArray=_f,An.isUndefined=function(n){return n===T},An.isWeakMap=function(n){return yu(n)&&\"[object WeakMap]\"==vo(n)},An.isWeakSet=function(n){return yu(n)&&\"[object WeakSet]\"==Ot(n)},An.join=function(n,t){return null==n?\"\":Bi.call(n,t)},An.kebabCase=Lf,An.last=Ve,An.lastIndexOf=function(n,t,r){var e=null==n?0:n.length;if(!e)return-1;var u=e;if(r!==T&&(u=Eu(r),u=0>u?Ui(e+u,0):Ci(u,e-1)),\nt===t){for(r=u+1;r--&&n[r]!==t;);n=r}else n=_(n,d,u,true);return n},An.lowerCase=Uf,An.lowerFirst=Cf,An.lt=vf,An.lte=gf,An.max=function(n){return n&&n.length?xt(n,$u,It):T},An.maxBy=function(n,t){return n&&n.length?xt(n,ye(t,2),It):T},An.mean=function(n){return y(n,$u)},An.meanBy=function(n,t){return y(n,ye(t,2))},An.min=function(n){return n&&n.length?xt(n,$u,Kt):T},An.minBy=function(n,t){return n&&n.length?xt(n,ye(t,2),Kt):T},An.stubArray=qu,An.stubFalse=Vu,An.stubObject=function(){return{}},An.stubString=function(){\nreturn\"\"},An.stubTrue=function(){return true},An.multiply=rc,An.nth=function(n,t){return n&&n.length?Qt(n,Eu(t)):T},An.noConflict=function(){return $n._===this&&($n._=si),this},An.noop=Pu,An.now=Go,An.pad=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return!t||e>=t?n:(t=(t-e)/2,ne(Ii(t),r)+n+ne(Oi(t),r))},An.padEnd=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return t&&e<t?n+ne(t-e,r):n},An.padStart=function(n,t,r){n=Iu(n);var e=(t=Eu(t))?D(n):0;return t&&e<t?ne(t-e,r)+n:n},An.parseInt=function(n,t,r){\nreturn r||null==t?t=0:t&&(t=+t),Mi(Iu(n).replace(on,\"\"),t||0)},An.random=function(n,t,r){if(r&&typeof r!=\"boolean\"&&Oe(n,t,r)&&(t=r=T),r===T&&(typeof t==\"boolean\"?(r=t,t=T):typeof n==\"boolean\"&&(r=n,n=T)),n===T&&t===T?(n=0,t=1):(n=Au(n),t===T?(t=n,n=0):t=Au(t)),n>t){var e=n;n=t,t=e}return r||n%1||t%1?(r=Ti(),Ci(n+r*(t-n+Cn(\"1e-\"+((r+\"\").length-1))),t)):ir(n,t)},An.reduce=function(n,t,r){var e=ff(n)?l:j,u=3>arguments.length;return e(n,ye(t,4),r,u,uo)},An.reduceRight=function(n,t,r){var e=ff(n)?s:j,u=3>arguments.length;\nreturn e(n,ye(t,4),r,u,io)},An.repeat=function(n,t,r){return t=(r?Oe(n,t,r):t===T)?1:Eu(t),or(Iu(n),t)},An.replace=function(){var n=arguments,t=Iu(n[0]);return 3>n.length?t:t.replace(n[1],n[2])},An.result=function(n,t,r){t=Sr(t,n);var e=-1,u=t.length;for(u||(u=1,n=T);++e<u;){var i=null==n?T:n[Me(t[e])];i===T&&(e=u,i=r),n=_u(i)?i.call(n):i}return n},An.round=ec,An.runInContext=x,An.sample=function(n){return(ff(n)?Qn:cr)(n)},An.size=function(n){if(null==n)return 0;if(su(n))return ju(n)?D(n):n.length;\nvar t=vo(n);return\"[object Map]\"==t||\"[object Set]\"==t?n.size:Vt(n).length},An.snakeCase=Df,An.some=function(n,t,r){var e=ff(n)?h:pr;return r&&Oe(n,t,r)&&(t=T),e(n,ye(t,3))},An.sortedIndex=function(n,t){return _r(n,t)},An.sortedIndexBy=function(n,t,r){return vr(n,t,ye(r,2))},An.sortedIndexOf=function(n,t){var r=null==n?0:n.length;if(r){var e=_r(n,t);if(e<r&&lu(n[e],t))return e}return-1},An.sortedLastIndex=function(n,t){return _r(n,t,true)},An.sortedLastIndexBy=function(n,t,r){return vr(n,t,ye(r,2),true);\n},An.sortedLastIndexOf=function(n,t){if(null==n?0:n.length){var r=_r(n,t,true)-1;if(lu(n[r],t))return r}return-1},An.startCase=Mf,An.startsWith=function(n,t,r){return n=Iu(n),r=null==r?0:pt(Eu(r),0,n.length),t=yr(t),n.slice(r,r+t.length)==t},An.subtract=uc,An.sum=function(n){return n&&n.length?m(n,$u):0},An.sumBy=function(n,t){return n&&n.length?m(n,ye(t,2)):0},An.template=function(n,t,r){var e=An.templateSettings;r&&Oe(n,t,r)&&(t=T),n=Iu(n),t=bf({},t,e,ce),r=bf({},t.imports,e.imports,ce);var u,i,o=Wu(r),f=S(r,o),c=0;\nr=t.interpolate||jn;var a=\"__p+='\";r=Xu((t.escape||jn).source+\"|\"+r.source+\"|\"+(r===Q?pn:jn).source+\"|\"+(t.evaluate||jn).source+\"|$\",\"g\");var l=oi.call(t,\"sourceURL\")?\"//# sourceURL=\"+(t.sourceURL+\"\").replace(/[\\r\\n]/g,\" \")+\"\\n\":\"\";if(n.replace(r,function(t,r,e,o,f,l){return e||(e=o),a+=n.slice(c,l).replace(wn,z),r&&(u=true,a+=\"'+__e(\"+r+\")+'\"),f&&(i=true,a+=\"';\"+f+\";\\n__p+='\"),e&&(a+=\"'+((__t=(\"+e+\"))==null?'':__t)+'\"),c=l+t.length,t}),a+=\"';\",(t=oi.call(t,\"variable\")&&t.variable)||(a=\"with(obj){\"+a+\"}\"),\na=(i?a.replace(P,\"\"):a).replace(Z,\"$1\").replace(q,\"$1;\"),a=\"function(\"+(t||\"obj\")+\"){\"+(t?\"\":\"obj||(obj={});\")+\"var __t,__p=''\"+(u?\",__e=_.escape\":\"\")+(i?\",__j=Array.prototype.join;function print(){__p+=__j.call(arguments,'')}\":\";\")+a+\"return __p}\",t=Ff(function(){return Ju(o,l+\"return \"+a).apply(T,f)}),t.source=a,pu(t))throw t;return t},An.times=function(n,t){if(n=Eu(n),1>n||9007199254740991<n)return[];var r=4294967295,e=Ci(n,4294967295);for(t=ye(t),n-=4294967295,e=A(e,t);++r<n;)t(r);return e},An.toFinite=Au,\nAn.toInteger=Eu,An.toLength=ku,An.toLower=function(n){return Iu(n).toLowerCase()},An.toNumber=Su,An.toSafeInteger=function(n){return n?pt(Eu(n),-9007199254740991,9007199254740991):0===n?n:0},An.toString=Iu,An.toUpper=function(n){return Iu(n).toUpperCase()},An.trim=function(n,t,r){return(n=Iu(n))&&(r||t===T)?n.replace(un,\"\"):n&&(t=yr(t))?(n=M(n),r=M(t),t=I(n,r),r=R(n,r)+1,Or(n,t,r).join(\"\")):n},An.trimEnd=function(n,t,r){return(n=Iu(n))&&(r||t===T)?n.replace(fn,\"\"):n&&(t=yr(t))?(n=M(n),t=R(n,M(t))+1,\nOr(n,0,t).join(\"\")):n},An.trimStart=function(n,t,r){return(n=Iu(n))&&(r||t===T)?n.replace(on,\"\"):n&&(t=yr(t))?(n=M(n),t=I(n,M(t)),Or(n,t).join(\"\")):n},An.truncate=function(n,t){var r=30,e=\"...\";if(du(t))var u=\"separator\"in t?t.separator:u,r=\"length\"in t?Eu(t.length):r,e=\"omission\"in t?yr(t.omission):e;n=Iu(n);var i=n.length;if(Rn.test(n))var o=M(n),i=o.length;if(r>=i)return n;if(i=r-D(e),1>i)return e;if(r=o?Or(o,0,i).join(\"\"):n.slice(0,i),u===T)return r+e;if(o&&(i+=r.length-i),hf(u)){if(n.slice(i).search(u)){\nvar f=r;for(u.global||(u=Xu(u.source,Iu(_n.exec(u))+\"g\")),u.lastIndex=0;o=u.exec(f);)var c=o.index;r=r.slice(0,c===T?i:c)}}else n.indexOf(yr(u),i)!=i&&(u=r.lastIndexOf(u),-1<u&&(r=r.slice(0,u)));return r+e},An.unescape=function(n){return(n=Iu(n))&&G.test(n)?n.replace(V,tt):n},An.uniqueId=function(n){var t=++fi;return Iu(n)+t},An.upperCase=Tf,An.upperFirst=$f,An.each=nu,An.eachRight=tu,An.first=qe,Nu(An,function(){var n={};return mt(An,function(t,r){oi.call(An.prototype,r)||(n[r]=t)}),n}(),{chain:false\n}),An.VERSION=\"4.17.14\",r(\"bind bindKey curry curryRight partial partialRight\".split(\" \"),function(n){An[n].placeholder=An}),r([\"drop\",\"take\"],function(n,t){Un.prototype[n]=function(r){r=r===T?1:Ui(Eu(r),0);var e=this.__filtered__&&!t?new Un(this):this.clone();return e.__filtered__?e.__takeCount__=Ci(r,e.__takeCount__):e.__views__.push({size:Ci(r,4294967295),type:n+(0>e.__dir__?\"Right\":\"\")}),e},Un.prototype[n+\"Right\"]=function(t){return this.reverse()[n](t).reverse()}}),r([\"filter\",\"map\",\"takeWhile\"],function(n,t){\nvar r=t+1,e=1==r||3==r;Un.prototype[n]=function(n){var t=this.clone();return t.__iteratees__.push({iteratee:ye(n,3),type:r}),t.__filtered__=t.__filtered__||e,t}}),r([\"head\",\"last\"],function(n,t){var r=\"take\"+(t?\"Right\":\"\");Un.prototype[n]=function(){return this[r](1).value()[0]}}),r([\"initial\",\"tail\"],function(n,t){var r=\"drop\"+(t?\"\":\"Right\");Un.prototype[n]=function(){return this.__filtered__?new Un(this):this[r](1)}}),Un.prototype.compact=function(){return this.filter($u)},Un.prototype.find=function(n){\nreturn this.filter(n).head()},Un.prototype.findLast=function(n){return this.reverse().find(n)},Un.prototype.invokeMap=fr(function(n,t){return typeof n==\"function\"?new Un(this):this.map(function(r){return Lt(r,n,t)})}),Un.prototype.reject=function(n){return this.filter(au(ye(n)))},Un.prototype.slice=function(n,t){n=Eu(n);var r=this;return r.__filtered__&&(0<n||0>t)?new Un(r):(0>n?r=r.takeRight(-n):n&&(r=r.drop(n)),t!==T&&(t=Eu(t),r=0>t?r.dropRight(-t):r.take(t-n)),r)},Un.prototype.takeRightWhile=function(n){\nreturn this.reverse().takeWhile(n).reverse()},Un.prototype.toArray=function(){return this.take(4294967295)},mt(Un.prototype,function(n,t){var r=/^(?:filter|find|map|reject)|While$/.test(t),e=/^(?:head|last)$/.test(t),u=An[e?\"take\"+(\"last\"==t?\"Right\":\"\"):t],i=e||/^find/.test(t);u&&(An.prototype[t]=function(){function t(n){return n=u.apply(An,a([n],f)),e&&h?n[0]:n}var o=this.__wrapped__,f=e?[1]:arguments,c=o instanceof Un,l=f[0],s=c||ff(o);s&&r&&typeof l==\"function\"&&1!=l.length&&(c=s=false);var h=this.__chain__,p=!!this.__actions__.length,l=i&&!h,c=c&&!p;\nreturn!i&&s?(o=c?o:new Un(this),o=n.apply(o,f),o.__actions__.push({func:Qe,args:[t],thisArg:T}),new On(o,h)):l&&c?n.apply(this,f):(o=this.thru(t),l?e?o.value()[0]:o.value():o)})}),r(\"pop push shift sort splice unshift\".split(\" \"),function(n){var t=ri[n],r=/^(?:push|sort|unshift)$/.test(n)?\"tap\":\"thru\",e=/^(?:pop|shift)$/.test(n);An.prototype[n]=function(){var n=arguments;if(e&&!this.__chain__){var u=this.value();return t.apply(ff(u)?u:[],n)}return this[r](function(r){return t.apply(ff(r)?r:[],n)});\n}}),mt(Un.prototype,function(n,t){var r=An[t];if(r){var e=r.name+\"\";oi.call(Gi,e)||(Gi[e]=[]),Gi[e].push({name:t,func:r})}}),Gi[Jr(T,2).name]=[{name:\"wrapper\",func:T}],Un.prototype.clone=function(){var n=new Un(this.__wrapped__);return n.__actions__=Ur(this.__actions__),n.__dir__=this.__dir__,n.__filtered__=this.__filtered__,n.__iteratees__=Ur(this.__iteratees__),n.__takeCount__=this.__takeCount__,n.__views__=Ur(this.__views__),n},Un.prototype.reverse=function(){if(this.__filtered__){var n=new Un(this);\nn.__dir__=-1,n.__filtered__=true}else n=this.clone(),n.__dir__*=-1;return n},Un.prototype.value=function(){var n,t=this.__wrapped__.value(),r=this.__dir__,e=ff(t),u=0>r,i=e?t.length:0;n=i;for(var o=this.__views__,f=0,c=-1,a=o.length;++c<a;){var l=o[c],s=l.size;switch(l.type){case\"drop\":f+=s;break;case\"dropRight\":n-=s;break;case\"take\":n=Ci(n,f+s);break;case\"takeRight\":f=Ui(f,n-s)}}if(n={start:f,end:n},o=n.start,f=n.end,n=f-o,o=u?f:o-1,f=this.__iteratees__,c=f.length,a=0,l=Ci(n,this.__takeCount__),!e||!u&&i==n&&l==n)return wr(t,this.__actions__);\ne=[];n:for(;n--&&a<l;){for(o+=r,u=-1,i=t[o];++u<c;){var h=f[u],s=h.type,h=(0,h.iteratee)(i);if(2==s)i=h;else if(!h){if(1==s)continue n;break n}}e[a++]=i}return e},An.prototype.at=To,An.prototype.chain=function(){return Ye(this)},An.prototype.commit=function(){return new On(this.value(),this.__chain__)},An.prototype.next=function(){this.__values__===T&&(this.__values__=mu(this.value()));var n=this.__index__>=this.__values__.length;return{done:n,value:n?T:this.__values__[this.__index__++]}},An.prototype.plant=function(n){\nfor(var t,r=this;r instanceof En;){var e=Fe(r);e.__index__=0,e.__values__=T,t?u.__wrapped__=e:t=e;var u=e,r=r.__wrapped__}return u.__wrapped__=n,t},An.prototype.reverse=function(){var n=this.__wrapped__;return n instanceof Un?(this.__actions__.length&&(n=new Un(this)),n=n.reverse(),n.__actions__.push({func:Qe,args:[Ge],thisArg:T}),new On(n,this.__chain__)):this.thru(Ge)},An.prototype.toJSON=An.prototype.valueOf=An.prototype.value=function(){return wr(this.__wrapped__,this.__actions__)},An.prototype.first=An.prototype.head,\nwi&&(An.prototype[wi]=Xe),An}();typeof define==\"function\"&&typeof define.amd==\"object\"&&define.amd?($n._=rt, define(function(){return rt})):Nn?((Nn.exports=rt)._=rt,Fn._=rt):$n._=rt}).call(this);","/** Used to map aliases to their real names. */\nexports.aliasToReal = {\n\n // Lodash aliases.\n 'each': 'forEach',\n 'eachRight': 'forEachRight',\n 'entries': 'toPairs',\n 'entriesIn': 'toPairsIn',\n 'extend': 'assignIn',\n 'extendAll': 'assignInAll',\n 'extendAllWith': 'assignInAllWith',\n 'extendWith': 'assignInWith',\n 'first': 'head',\n\n // Methods that are curried variants of others.\n 'conforms': 'conformsTo',\n 'matches': 'isMatch',\n 'property': 'get',\n\n // Ramda aliases.\n '__': 'placeholder',\n 'F': 'stubFalse',\n 'T': 'stubTrue',\n 'all': 'every',\n 'allPass': 'overEvery',\n 'always': 'constant',\n 'any': 'some',\n 'anyPass': 'overSome',\n 'apply': 'spread',\n 'assoc': 'set',\n 'assocPath': 'set',\n 'complement': 'negate',\n 'compose': 'flowRight',\n 'contains': 'includes',\n 'dissoc': 'unset',\n 'dissocPath': 'unset',\n 'dropLast': 'dropRight',\n 'dropLastWhile': 'dropRightWhile',\n 'equals': 'isEqual',\n 'identical': 'eq',\n 'indexBy': 'keyBy',\n 'init': 'initial',\n 'invertObj': 'invert',\n 'juxt': 'over',\n 'omitAll': 'omit',\n 'nAry': 'ary',\n 'path': 'get',\n 'pathEq': 'matchesProperty',\n 'pathOr': 'getOr',\n 'paths': 'at',\n 'pickAll': 'pick',\n 'pipe': 'flow',\n 'pluck': 'map',\n 'prop': 'get',\n 'propEq': 'matchesProperty',\n 'propOr': 'getOr',\n 'props': 'at',\n 'symmetricDifference': 'xor',\n 'symmetricDifferenceBy': 'xorBy',\n 'symmetricDifferenceWith': 'xorWith',\n 'takeLast': 'takeRight',\n 'takeLastWhile': 'takeRightWhile',\n 'unapply': 'rest',\n 'unnest': 'flatten',\n 'useWith': 'overArgs',\n 'where': 'conformsTo',\n 'whereEq': 'isMatch',\n 'zipObj': 'zipObject'\n};\n\n/** Used to map ary to method names. */\nexports.aryMethod = {\n '1': [\n 'assignAll', 'assignInAll', 'attempt', 'castArray', 'ceil', 'create',\n 'curry', 'curryRight', 'defaultsAll', 'defaultsDeepAll', 'floor', 'flow',\n 'flowRight', 'fromPairs', 'invert', 'iteratee', 'memoize', 'method', 'mergeAll',\n 'methodOf', 'mixin', 'nthArg', 'over', 'overEvery', 'overSome','rest', 'reverse',\n 'round', 'runInContext', 'spread', 'template', 'trim', 'trimEnd', 'trimStart',\n 'uniqueId', 'words', 'zipAll'\n ],\n '2': [\n 'add', 'after', 'ary', 'assign', 'assignAllWith', 'assignIn', 'assignInAllWith',\n 'at', 'before', 'bind', 'bindAll', 'bindKey', 'chunk', 'cloneDeepWith',\n 'cloneWith', 'concat', 'conformsTo', 'countBy', 'curryN', 'curryRightN',\n 'debounce', 'defaults', 'defaultsDeep', 'defaultTo', 'delay', 'difference',\n 'divide', 'drop', 'dropRight', 'dropRightWhile', 'dropWhile', 'endsWith', 'eq',\n 'every', 'filter', 'find', 'findIndex', 'findKey', 'findLast', 'findLastIndex',\n 'findLastKey', 'flatMap', 'flatMapDeep', 'flattenDepth', 'forEach',\n 'forEachRight', 'forIn', 'forInRight', 'forOwn', 'forOwnRight', 'get',\n 'groupBy', 'gt', 'gte', 'has', 'hasIn', 'includes', 'indexOf', 'intersection',\n 'invertBy', 'invoke', 'invokeMap', 'isEqual', 'isMatch', 'join', 'keyBy',\n 'lastIndexOf', 'lt', 'lte', 'map', 'mapKeys', 'mapValues', 'matchesProperty',\n 'maxBy', 'meanBy', 'merge', 'mergeAllWith', 'minBy', 'multiply', 'nth', 'omit',\n 'omitBy', 'overArgs', 'pad', 'padEnd', 'padStart', 'parseInt', 'partial',\n 'partialRight', 'partition', 'pick', 'pickBy', 'propertyOf', 'pull', 'pullAll',\n 'pullAt', 'random', 'range', 'rangeRight', 'rearg', 'reject', 'remove',\n 'repeat', 'restFrom', 'result', 'sampleSize', 'some', 'sortBy', 'sortedIndex',\n 'sortedIndexOf', 'sortedLastIndex', 'sortedLastIndexOf', 'sortedUniqBy',\n 'split', 'spreadFrom', 'startsWith', 'subtract', 'sumBy', 'take', 'takeRight',\n 'takeRightWhile', 'takeWhile', 'tap', 'throttle', 'thru', 'times', 'trimChars',\n 'trimCharsEnd', 'trimCharsStart', 'truncate', 'union', 'uniqBy', 'uniqWith',\n 'unset', 'unzipWith', 'without', 'wrap', 'xor', 'zip', 'zipObject',\n 'zipObjectDeep'\n ],\n '3': [\n 'assignInWith', 'assignWith', 'clamp', 'differenceBy', 'differenceWith',\n 'findFrom', 'findIndexFrom', 'findLastFrom', 'findLastIndexFrom', 'getOr',\n 'includesFrom', 'indexOfFrom', 'inRange', 'intersectionBy', 'intersectionWith',\n 'invokeArgs', 'invokeArgsMap', 'isEqualWith', 'isMatchWith', 'flatMapDepth',\n 'lastIndexOfFrom', 'mergeWith', 'orderBy', 'padChars', 'padCharsEnd',\n 'padCharsStart', 'pullAllBy', 'pullAllWith', 'rangeStep', 'rangeStepRight',\n 'reduce', 'reduceRight', 'replace', 'set', 'slice', 'sortedIndexBy',\n 'sortedLastIndexBy', 'transform', 'unionBy', 'unionWith', 'update', 'xorBy',\n 'xorWith', 'zipWith'\n ],\n '4': [\n 'fill', 'setWith', 'updateWith'\n ]\n};\n\n/** Used to map ary to rearg configs. */\nexports.aryRearg = {\n '2': [1, 0],\n '3': [2, 0, 1],\n '4': [3, 2, 0, 1]\n};\n\n/** Used to map method names to their iteratee ary. */\nexports.iterateeAry = {\n 'dropRightWhile': 1,\n 'dropWhile': 1,\n 'every': 1,\n 'filter': 1,\n 'find': 1,\n 'findFrom': 1,\n 'findIndex': 1,\n 'findIndexFrom': 1,\n 'findKey': 1,\n 'findLast': 1,\n 'findLastFrom': 1,\n 'findLastIndex': 1,\n 'findLastIndexFrom': 1,\n 'findLastKey': 1,\n 'flatMap': 1,\n 'flatMapDeep': 1,\n 'flatMapDepth': 1,\n 'forEach': 1,\n 'forEachRight': 1,\n 'forIn': 1,\n 'forInRight': 1,\n 'forOwn': 1,\n 'forOwnRight': 1,\n 'map': 1,\n 'mapKeys': 1,\n 'mapValues': 1,\n 'partition': 1,\n 'reduce': 2,\n 'reduceRight': 2,\n 'reject': 1,\n 'remove': 1,\n 'some': 1,\n 'takeRightWhile': 1,\n 'takeWhile': 1,\n 'times': 1,\n 'transform': 2\n};\n\n/** Used to map method names to iteratee rearg configs. */\nexports.iterateeRearg = {\n 'mapKeys': [1],\n 'reduceRight': [1, 0]\n};\n\n/** Used to map method names to rearg configs. */\nexports.methodRearg = {\n 'assignInAllWith': [1, 0],\n 'assignInWith': [1, 2, 0],\n 'assignAllWith': [1, 0],\n 'assignWith': [1, 2, 0],\n 'differenceBy': [1, 2, 0],\n 'differenceWith': [1, 2, 0],\n 'getOr': [2, 1, 0],\n 'intersectionBy': [1, 2, 0],\n 'intersectionWith': [1, 2, 0],\n 'isEqualWith': [1, 2, 0],\n 'isMatchWith': [2, 1, 0],\n 'mergeAllWith': [1, 0],\n 'mergeWith': [1, 2, 0],\n 'padChars': [2, 1, 0],\n 'padCharsEnd': [2, 1, 0],\n 'padCharsStart': [2, 1, 0],\n 'pullAllBy': [2, 1, 0],\n 'pullAllWith': [2, 1, 0],\n 'rangeStep': [1, 2, 0],\n 'rangeStepRight': [1, 2, 0],\n 'setWith': [3, 1, 2, 0],\n 'sortedIndexBy': [2, 1, 0],\n 'sortedLastIndexBy': [2, 1, 0],\n 'unionBy': [1, 2, 0],\n 'unionWith': [1, 2, 0],\n 'updateWith': [3, 1, 2, 0],\n 'xorBy': [1, 2, 0],\n 'xorWith': [1, 2, 0],\n 'zipWith': [1, 2, 0]\n};\n\n/** Used to map method names to spread configs. */\nexports.methodSpread = {\n 'assignAll': { 'start': 0 },\n 'assignAllWith': { 'start': 0 },\n 'assignInAll': { 'start': 0 },\n 'assignInAllWith': { 'start': 0 },\n 'defaultsAll': { 'start': 0 },\n 'defaultsDeepAll': { 'start': 0 },\n 'invokeArgs': { 'start': 2 },\n 'invokeArgsMap': { 'start': 2 },\n 'mergeAll': { 'start': 0 },\n 'mergeAllWith': { 'start': 0 },\n 'partial': { 'start': 1 },\n 'partialRight': { 'start': 1 },\n 'without': { 'start': 1 },\n 'zipAll': { 'start': 0 }\n};\n\n/** Used to identify methods which mutate arrays or objects. */\nexports.mutate = {\n 'array': {\n 'fill': true,\n 'pull': true,\n 'pullAll': true,\n 'pullAllBy': true,\n 'pullAllWith': true,\n 'pullAt': true,\n 'remove': true,\n 'reverse': true\n },\n 'object': {\n 'assign': true,\n 'assignAll': true,\n 'assignAllWith': true,\n 'assignIn': true,\n 'assignInAll': true,\n 'assignInAllWith': true,\n 'assignInWith': true,\n 'assignWith': true,\n 'defaults': true,\n 'defaultsAll': true,\n 'defaultsDeep': true,\n 'defaultsDeepAll': true,\n 'merge': true,\n 'mergeAll': true,\n 'mergeAllWith': true,\n 'mergeWith': true,\n },\n 'set': {\n 'set': true,\n 'setWith': true,\n 'unset': true,\n 'update': true,\n 'updateWith': true\n }\n};\n\n/** Used to map real names to their aliases. */\nexports.realToAlias = (function() {\n var hasOwnProperty = Object.prototype.hasOwnProperty,\n object = exports.aliasToReal,\n result = {};\n\n for (var key in object) {\n var value = object[key];\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }\n return result;\n}());\n\n/** Used to map method names to other names. */\nexports.remap = {\n 'assignAll': 'assign',\n 'assignAllWith': 'assignWith',\n 'assignInAll': 'assignIn',\n 'assignInAllWith': 'assignInWith',\n 'curryN': 'curry',\n 'curryRightN': 'curryRight',\n 'defaultsAll': 'defaults',\n 'defaultsDeepAll': 'defaultsDeep',\n 'findFrom': 'find',\n 'findIndexFrom': 'findIndex',\n 'findLastFrom': 'findLast',\n 'findLastIndexFrom': 'findLastIndex',\n 'getOr': 'get',\n 'includesFrom': 'includes',\n 'indexOfFrom': 'indexOf',\n 'invokeArgs': 'invoke',\n 'invokeArgsMap': 'invokeMap',\n 'lastIndexOfFrom': 'lastIndexOf',\n 'mergeAll': 'merge',\n 'mergeAllWith': 'mergeWith',\n 'padChars': 'pad',\n 'padCharsEnd': 'padEnd',\n 'padCharsStart': 'padStart',\n 'propertyOf': 'get',\n 'rangeStep': 'range',\n 'rangeStepRight': 'rangeRight',\n 'restFrom': 'rest',\n 'spreadFrom': 'spread',\n 'trimChars': 'trim',\n 'trimCharsEnd': 'trimEnd',\n 'trimCharsStart': 'trimStart',\n 'zipAll': 'zip'\n};\n\n/** Used to track methods that skip fixing their arity. */\nexports.skipFixed = {\n 'castArray': true,\n 'flow': true,\n 'flowRight': true,\n 'iteratee': true,\n 'mixin': true,\n 'rearg': true,\n 'runInContext': true\n};\n\n/** Used to track methods that skip rearranging arguments. */\nexports.skipRearg = {\n 'add': true,\n 'assign': true,\n 'assignIn': true,\n 'bind': true,\n 'bindKey': true,\n 'concat': true,\n 'difference': true,\n 'divide': true,\n 'eq': true,\n 'gt': true,\n 'gte': true,\n 'isEqual': true,\n 'lt': true,\n 'lte': true,\n 'matchesProperty': true,\n 'merge': true,\n 'multiply': true,\n 'overArgs': true,\n 'partial': true,\n 'partialRight': true,\n 'propertyOf': true,\n 'random': true,\n 'range': true,\n 'rangeRight': true,\n 'subtract': true,\n 'zip': true,\n 'zipObject': true,\n 'zipObjectDeep': true\n};\n","/**\n * The default argument placeholder value for methods.\n *\n * @type {Object}\n */\nmodule.exports = {};\n","var mapping = require('./_mapping'),\n fallbackHolder = require('./placeholder');\n\n/** Built-in value reference. */\nvar push = Array.prototype.push;\n\n/**\n * Creates a function, with an arity of `n`, that invokes `func` with the\n * arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} n The arity of the new function.\n * @returns {Function} Returns the new function.\n */\nfunction baseArity(func, n) {\n return n == 2\n ? function(a, b) { return func.apply(undefined, arguments); }\n : function(a) { return func.apply(undefined, arguments); };\n}\n\n/**\n * Creates a function that invokes `func`, with up to `n` arguments, ignoring\n * any additional arguments.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @param {number} n The arity cap.\n * @returns {Function} Returns the new function.\n */\nfunction baseAry(func, n) {\n return n == 2\n ? function(a, b) { return func(a, b); }\n : function(a) { return func(a); };\n}\n\n/**\n * Creates a clone of `array`.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the cloned array.\n */\nfunction cloneArray(array) {\n var length = array ? array.length : 0,\n result = Array(length);\n\n while (length--) {\n result[length] = array[length];\n }\n return result;\n}\n\n/**\n * Creates a function that clones a given object using the assignment `func`.\n *\n * @private\n * @param {Function} func The assignment function.\n * @returns {Function} Returns the new cloner function.\n */\nfunction createCloner(func) {\n return function(object) {\n return func({}, object);\n };\n}\n\n/**\n * A specialized version of `_.spread` which flattens the spread array into\n * the arguments of the invoked `func`.\n *\n * @private\n * @param {Function} func The function to spread arguments over.\n * @param {number} start The start position of the spread.\n * @returns {Function} Returns the new function.\n */\nfunction flatSpread(func, start) {\n return function() {\n var length = arguments.length,\n lastIndex = length - 1,\n args = Array(length);\n\n while (length--) {\n args[length] = arguments[length];\n }\n var array = args[start],\n otherArgs = args.slice(0, start);\n\n if (array) {\n push.apply(otherArgs, array);\n }\n if (start != lastIndex) {\n push.apply(otherArgs, args.slice(start + 1));\n }\n return func.apply(this, otherArgs);\n };\n}\n\n/**\n * Creates a function that wraps `func` and uses `cloner` to clone the first\n * argument it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} cloner The function to clone arguments.\n * @returns {Function} Returns the new immutable function.\n */\nfunction wrapImmutable(func, cloner) {\n return function() {\n var length = arguments.length;\n if (!length) {\n return;\n }\n var args = Array(length);\n while (length--) {\n args[length] = arguments[length];\n }\n var result = args[0] = cloner.apply(undefined, args);\n func.apply(undefined, args);\n return result;\n };\n}\n\n/**\n * The base implementation of `convert` which accepts a `util` object of methods\n * required to perform conversions.\n *\n * @param {Object} util The util object.\n * @param {string} name The name of the function to convert.\n * @param {Function} func The function to convert.\n * @param {Object} [options] The options object.\n * @param {boolean} [options.cap=true] Specify capping iteratee arguments.\n * @param {boolean} [options.curry=true] Specify currying.\n * @param {boolean} [options.fixed=true] Specify fixed arity.\n * @param {boolean} [options.immutable=true] Specify immutable operations.\n * @param {boolean} [options.rearg=true] Specify rearranging arguments.\n * @returns {Function|Object} Returns the converted function or object.\n */\nfunction baseConvert(util, name, func, options) {\n var isLib = typeof name == 'function',\n isObj = name === Object(name);\n\n if (isObj) {\n options = func;\n func = name;\n name = undefined;\n }\n if (func == null) {\n throw new TypeError;\n }\n options || (options = {});\n\n var config = {\n 'cap': 'cap' in options ? options.cap : true,\n 'curry': 'curry' in options ? options.curry : true,\n 'fixed': 'fixed' in options ? options.fixed : true,\n 'immutable': 'immutable' in options ? options.immutable : true,\n 'rearg': 'rearg' in options ? options.rearg : true\n };\n\n var defaultHolder = isLib ? func : fallbackHolder,\n forceCurry = ('curry' in options) && options.curry,\n forceFixed = ('fixed' in options) && options.fixed,\n forceRearg = ('rearg' in options) && options.rearg,\n pristine = isLib ? func.runInContext() : undefined;\n\n var helpers = isLib ? func : {\n 'ary': util.ary,\n 'assign': util.assign,\n 'clone': util.clone,\n 'curry': util.curry,\n 'forEach': util.forEach,\n 'isArray': util.isArray,\n 'isError': util.isError,\n 'isFunction': util.isFunction,\n 'isWeakMap': util.isWeakMap,\n 'iteratee': util.iteratee,\n 'keys': util.keys,\n 'rearg': util.rearg,\n 'toInteger': util.toInteger,\n 'toPath': util.toPath\n };\n\n var ary = helpers.ary,\n assign = helpers.assign,\n clone = helpers.clone,\n curry = helpers.curry,\n each = helpers.forEach,\n isArray = helpers.isArray,\n isError = helpers.isError,\n isFunction = helpers.isFunction,\n isWeakMap = helpers.isWeakMap,\n keys = helpers.keys,\n rearg = helpers.rearg,\n toInteger = helpers.toInteger,\n toPath = helpers.toPath;\n\n var aryMethodKeys = keys(mapping.aryMethod);\n\n var wrappers = {\n 'castArray': function(castArray) {\n return function() {\n var value = arguments[0];\n return isArray(value)\n ? castArray(cloneArray(value))\n : castArray.apply(undefined, arguments);\n };\n },\n 'iteratee': function(iteratee) {\n return function() {\n var func = arguments[0],\n arity = arguments[1],\n result = iteratee(func, arity),\n length = result.length;\n\n if (config.cap && typeof arity == 'number') {\n arity = arity > 2 ? (arity - 2) : 1;\n return (length && length <= arity) ? result : baseAry(result, arity);\n }\n return result;\n };\n },\n 'mixin': function(mixin) {\n return function(source) {\n var func = this;\n if (!isFunction(func)) {\n return mixin(func, Object(source));\n }\n var pairs = [];\n each(keys(source), function(key) {\n if (isFunction(source[key])) {\n pairs.push([key, func.prototype[key]]);\n }\n });\n\n mixin(func, Object(source));\n\n each(pairs, function(pair) {\n var value = pair[1];\n if (isFunction(value)) {\n func.prototype[pair[0]] = value;\n } else {\n delete func.prototype[pair[0]];\n }\n });\n return func;\n };\n },\n 'nthArg': function(nthArg) {\n return function(n) {\n var arity = n < 0 ? 1 : (toInteger(n) + 1);\n return curry(nthArg(n), arity);\n };\n },\n 'rearg': function(rearg) {\n return function(func, indexes) {\n var arity = indexes ? indexes.length : 0;\n return curry(rearg(func, indexes), arity);\n };\n },\n 'runInContext': function(runInContext) {\n return function(context) {\n return baseConvert(util, runInContext(context), options);\n };\n }\n };\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Casts `func` to a function with an arity capped iteratee if needed.\n *\n * @private\n * @param {string} name The name of the function to inspect.\n * @param {Function} func The function to inspect.\n * @returns {Function} Returns the cast function.\n */\n function castCap(name, func) {\n if (config.cap) {\n var indexes = mapping.iterateeRearg[name];\n if (indexes) {\n return iterateeRearg(func, indexes);\n }\n var n = !isLib && mapping.iterateeAry[name];\n if (n) {\n return iterateeAry(func, n);\n }\n }\n return func;\n }\n\n /**\n * Casts `func` to a curried function if needed.\n *\n * @private\n * @param {string} name The name of the function to inspect.\n * @param {Function} func The function to inspect.\n * @param {number} n The arity of `func`.\n * @returns {Function} Returns the cast function.\n */\n function castCurry(name, func, n) {\n return (forceCurry || (config.curry && n > 1))\n ? curry(func, n)\n : func;\n }\n\n /**\n * Casts `func` to a fixed arity function if needed.\n *\n * @private\n * @param {string} name The name of the function to inspect.\n * @param {Function} func The function to inspect.\n * @param {number} n The arity cap.\n * @returns {Function} Returns the cast function.\n */\n function castFixed(name, func, n) {\n if (config.fixed && (forceFixed || !mapping.skipFixed[name])) {\n var data = mapping.methodSpread[name],\n start = data && data.start;\n\n return start === undefined ? ary(func, n) : flatSpread(func, start);\n }\n return func;\n }\n\n /**\n * Casts `func` to an rearged function if needed.\n *\n * @private\n * @param {string} name The name of the function to inspect.\n * @param {Function} func The function to inspect.\n * @param {number} n The arity of `func`.\n * @returns {Function} Returns the cast function.\n */\n function castRearg(name, func, n) {\n return (config.rearg && n > 1 && (forceRearg || !mapping.skipRearg[name]))\n ? rearg(func, mapping.methodRearg[name] || mapping.aryRearg[n])\n : func;\n }\n\n /**\n * Creates a clone of `object` by `path`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {Array|string} path The path to clone by.\n * @returns {Object} Returns the cloned object.\n */\n function cloneByPath(object, path) {\n path = toPath(path);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n result = clone(Object(object)),\n nested = result;\n\n while (nested != null && ++index < length) {\n var key = path[index],\n value = nested[key];\n\n if (value != null &&\n !(isFunction(value) || isError(value) || isWeakMap(value))) {\n nested[key] = clone(index == lastIndex ? value : Object(value));\n }\n nested = nested[key];\n }\n return result;\n }\n\n /**\n * Converts `lodash` to an immutable auto-curried iteratee-first data-last\n * version with conversion `options` applied.\n *\n * @param {Object} [options] The options object. See `baseConvert` for more details.\n * @returns {Function} Returns the converted `lodash`.\n */\n function convertLib(options) {\n return _.runInContext.convert(options)(undefined);\n }\n\n /**\n * Create a converter function for `func` of `name`.\n *\n * @param {string} name The name of the function to convert.\n * @param {Function} func The function to convert.\n * @returns {Function} Returns the new converter function.\n */\n function createConverter(name, func) {\n var realName = mapping.aliasToReal[name] || name,\n methodName = mapping.remap[realName] || realName,\n oldOptions = options;\n\n return function(options) {\n var newUtil = isLib ? pristine : helpers,\n newFunc = isLib ? pristine[methodName] : func,\n newOptions = assign(assign({}, oldOptions), options);\n\n return baseConvert(newUtil, realName, newFunc, newOptions);\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke its iteratee, with up to `n`\n * arguments, ignoring any additional arguments.\n *\n * @private\n * @param {Function} func The function to cap iteratee arguments for.\n * @param {number} n The arity cap.\n * @returns {Function} Returns the new function.\n */\n function iterateeAry(func, n) {\n return overArg(func, function(func) {\n return typeof func == 'function' ? baseAry(func, n) : func;\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke its iteratee with arguments\n * arranged according to the specified `indexes` where the argument value at\n * the first index is provided as the first argument, the argument value at\n * the second index is provided as the second argument, and so on.\n *\n * @private\n * @param {Function} func The function to rearrange iteratee arguments for.\n * @param {number[]} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n */\n function iterateeRearg(func, indexes) {\n return overArg(func, function(func) {\n var n = indexes.length;\n return baseArity(rearg(baseAry(func, n), indexes), n);\n });\n }\n\n /**\n * Creates a function that invokes `func` with its first argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function() {\n var length = arguments.length;\n if (!length) {\n return func();\n }\n var args = Array(length);\n while (length--) {\n args[length] = arguments[length];\n }\n var index = config.rearg ? 0 : (length - 1);\n args[index] = transform(args[index]);\n return func.apply(undefined, args);\n };\n }\n\n /**\n * Creates a function that wraps `func` and applys the conversions\n * rules by `name`.\n *\n * @private\n * @param {string} name The name of the function to wrap.\n * @param {Function} func The function to wrap.\n * @returns {Function} Returns the converted function.\n */\n function wrap(name, func, placeholder) {\n var result,\n realName = mapping.aliasToReal[name] || name,\n wrapped = func,\n wrapper = wrappers[realName];\n\n if (wrapper) {\n wrapped = wrapper(func);\n }\n else if (config.immutable) {\n if (mapping.mutate.array[realName]) {\n wrapped = wrapImmutable(func, cloneArray);\n }\n else if (mapping.mutate.object[realName]) {\n wrapped = wrapImmutable(func, createCloner(func));\n }\n else if (mapping.mutate.set[realName]) {\n wrapped = wrapImmutable(func, cloneByPath);\n }\n }\n each(aryMethodKeys, function(aryKey) {\n each(mapping.aryMethod[aryKey], function(otherName) {\n if (realName == otherName) {\n var data = mapping.methodSpread[realName],\n afterRearg = data && data.afterRearg;\n\n result = afterRearg\n ? castFixed(realName, castRearg(realName, wrapped, aryKey), aryKey)\n : castRearg(realName, castFixed(realName, wrapped, aryKey), aryKey);\n\n result = castCap(realName, result);\n result = castCurry(realName, result, aryKey);\n return false;\n }\n });\n return !result;\n });\n\n result || (result = wrapped);\n if (result == func) {\n result = forceCurry ? curry(result, 1) : function() {\n return func.apply(this, arguments);\n };\n }\n result.convert = createConverter(realName, func);\n result.placeholder = func.placeholder = placeholder;\n\n return result;\n }\n\n /*--------------------------------------------------------------------------*/\n\n if (!isObj) {\n return wrap(name, func, defaultHolder);\n }\n var _ = func;\n\n // Convert methods by ary cap.\n var pairs = [];\n each(aryMethodKeys, function(aryKey) {\n each(mapping.aryMethod[aryKey], function(key) {\n var func = _[mapping.remap[key] || key];\n if (func) {\n pairs.push([key, wrap(key, func, _)]);\n }\n });\n });\n\n // Convert remaining methods.\n each(keys(_), function(key) {\n var func = _[key];\n if (typeof func == 'function') {\n var length = pairs.length;\n while (length--) {\n if (pairs[length][0] == key) {\n return;\n }\n }\n func.convert = createConverter(key, func);\n pairs.push([key, func]);\n }\n });\n\n // Assign to `_` leaving `_.prototype` unchanged to allow chaining.\n each(pairs, function(pair) {\n _[pair[0]] = pair[1];\n });\n\n _.convert = convertLib;\n _.placeholder = _;\n\n // Assign aliases.\n each(keys(_), function(key) {\n each(mapping.realToAlias[key] || [], function(alias) {\n _[alias] = _[key];\n });\n });\n\n return _;\n}\n\nmodule.exports = baseConvert;\n","var _ = require('./lodash.min').runInContext();\nmodule.exports = require('./fp/_baseConvert')(_, _);\n","'use strict';\n\n// Found this seed-based random generator somewhere\n// Based on The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu)\n\nvar seed = 1;\n\n/**\n * return a random number based on a seed\n * @param seed\n * @returns {number}\n */\nfunction getNextValue() {\n seed = (seed * 9301 + 49297) % 233280;\n return seed/(233280.0);\n}\n\nfunction setSeed(_seed_) {\n seed = _seed_;\n}\n\nmodule.exports = {\n nextValue: getNextValue,\n seed: setSeed\n};\n","'use strict';\n\nvar randomFromSeed = require('./random/random-from-seed');\n\nvar ORIGINAL = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';\nvar alphabet;\nvar previousSeed;\n\nvar shuffled;\n\nfunction reset() {\n shuffled = false;\n}\n\nfunction setCharacters(_alphabet_) {\n if (!_alphabet_) {\n if (alphabet !== ORIGINAL) {\n alphabet = ORIGINAL;\n reset();\n }\n return;\n }\n\n if (_alphabet_ === alphabet) {\n return;\n }\n\n if (_alphabet_.length !== ORIGINAL.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. You submitted ' + _alphabet_.length + ' characters: ' + _alphabet_);\n }\n\n var unique = _alphabet_.split('').filter(function(item, ind, arr){\n return ind !== arr.lastIndexOf(item);\n });\n\n if (unique.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. These characters were not unique: ' + unique.join(', '));\n }\n\n alphabet = _alphabet_;\n reset();\n}\n\nfunction characters(_alphabet_) {\n setCharacters(_alphabet_);\n return alphabet;\n}\n\nfunction setSeed(seed) {\n randomFromSeed.seed(seed);\n if (previousSeed !== seed) {\n reset();\n previousSeed = seed;\n }\n}\n\nfunction shuffle() {\n if (!alphabet) {\n setCharacters(ORIGINAL);\n }\n\n var sourceArray = alphabet.split('');\n var targetArray = [];\n var r = randomFromSeed.nextValue();\n var characterIndex;\n\n while (sourceArray.length > 0) {\n r = randomFromSeed.nextValue();\n characterIndex = Math.floor(r * sourceArray.length);\n targetArray.push(sourceArray.splice(characterIndex, 1)[0]);\n }\n return targetArray.join('');\n}\n\nfunction getShuffled() {\n if (shuffled) {\n return shuffled;\n }\n shuffled = shuffle();\n return shuffled;\n}\n\n/**\n * lookup shuffled letter\n * @param index\n * @returns {string}\n */\nfunction lookup(index) {\n var alphabetShuffled = getShuffled();\n return alphabetShuffled[index];\n}\n\nfunction get () {\n return alphabet || ORIGINAL;\n}\n\nmodule.exports = {\n get: get,\n characters: characters,\n seed: setSeed,\n lookup: lookup,\n shuffled: getShuffled\n};\n","'use strict';\n\nvar crypto = typeof window === 'object' && (window.crypto || window.msCrypto); // IE 11 uses window.msCrypto\n\nvar randomByte;\n\nif (!crypto || !crypto.getRandomValues) {\n randomByte = function(size) {\n var bytes = [];\n for (var i = 0; i < size; i++) {\n bytes.push(Math.floor(Math.random() * 256));\n }\n return bytes;\n };\n} else {\n randomByte = function(size) {\n return crypto.getRandomValues(new Uint8Array(size));\n };\n}\n\nmodule.exports = randomByte;\n","/**\n * Secure random string generator with custom alphabet.\n *\n * Alphabet must contain 256 symbols or less. Otherwise, the generator\n * will not be secure.\n *\n * @param {generator} random The random bytes generator.\n * @param {string} alphabet Symbols to be used in new random string.\n * @param {size} size The number of symbols in new random string.\n *\n * @return {string} Random string.\n *\n * @example\n * const format = require('nanoid/format')\n *\n * function random (size) {\n * const result = []\n * for (let i = 0; i < size; i++) {\n * result.push(randomByte())\n * }\n * return result\n * }\n *\n * format(random, \"abcdef\", 5) //=> \"fbaef\"\n *\n * @name format\n * @function\n */\nmodule.exports = function (random, alphabet, size) {\n var mask = (2 << Math.log(alphabet.length - 1) / Math.LN2) - 1\n var step = Math.ceil(1.6 * mask * size / alphabet.length)\n size = +size\n\n var id = ''\n while (true) {\n var bytes = random(step)\n for (var i = 0; i < step; i++) {\n var byte = bytes[i] & mask\n if (alphabet[byte]) {\n id += alphabet[byte]\n if (id.length === size) return id\n }\n }\n }\n}\n\n/**\n * @callback generator\n * @param {number} bytes The number of bytes to generate.\n * @return {number[]} Random bytes.\n */\n","'use strict';\n\nvar alphabet = require('./alphabet');\nvar random = require('./random/random-byte');\nvar format = require('nanoid/format');\n\nfunction generate(number) {\n var loopCounter = 0;\n var done;\n\n var str = '';\n\n while (!done) {\n str = str + format(random, alphabet.get(), 1);\n done = number < (Math.pow(16, loopCounter + 1 ) );\n loopCounter++;\n }\n return str;\n}\n\nmodule.exports = generate;\n","'use strict';\n\nvar generate = require('./generate');\nvar alphabet = require('./alphabet');\n\n// Ignore all milliseconds before a certain time to reduce the size of the date entropy without sacrificing uniqueness.\n// This number should be updated every year or so to keep the generated id short.\n// To regenerate `new Date() - 0` and bump the version. Always bump the version!\nvar REDUCE_TIME = 1459707606518;\n\n// don't change unless we change the algos or REDUCE_TIME\n// must be an integer and less than 16\nvar version = 6;\n\n// Counter is used when shortid is called multiple times in one second.\nvar counter;\n\n// Remember the last time shortid was called in case counter is needed.\nvar previousSeconds;\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction build(clusterWorkerId) {\n var str = '';\n\n var seconds = Math.floor((Date.now() - REDUCE_TIME) * 0.001);\n\n if (seconds === previousSeconds) {\n counter++;\n } else {\n counter = 0;\n previousSeconds = seconds;\n }\n\n str = str + generate(version);\n str = str + generate(clusterWorkerId);\n if (counter > 0) {\n str = str + generate(counter);\n }\n str = str + generate(seconds);\n return str;\n}\n\nmodule.exports = build;\n","'use strict';\nvar alphabet = require('./alphabet');\n\nfunction isShortId(id) {\n if (!id || typeof id !== 'string' || id.length < 6 ) {\n return false;\n }\n\n var nonAlphabetic = new RegExp('[^' +\n alphabet.get().replace(/[|\\\\{}()[\\]^$+*?.-]/g, '\\\\$&') +\n ']');\n return !nonAlphabetic.test(id);\n}\n\nmodule.exports = isShortId;\n","'use strict';\n\nvar alphabet = require('./alphabet');\nvar build = require('./build');\nvar isValid = require('./is-valid');\n\n// if you are using cluster or multiple servers use this to make each instance\n// has a unique value for worker\n// Note: I don't know if this is automatically set when using third\n// party cluster solutions such as pm2.\nvar clusterWorkerId = require('./util/cluster-worker-id') || 0;\n\n/**\n * Set the seed.\n * Highly recommended if you don't want people to try to figure out your id schema.\n * exposed as shortid.seed(int)\n * @param seed Integer value to seed the random alphabet. ALWAYS USE THE SAME SEED or you might get overlaps.\n */\nfunction seed(seedValue) {\n alphabet.seed(seedValue);\n return module.exports;\n}\n\n/**\n * Set the cluster worker or machine id\n * exposed as shortid.worker(int)\n * @param workerId worker must be positive integer. Number less than 16 is recommended.\n * returns shortid module so it can be chained.\n */\nfunction worker(workerId) {\n clusterWorkerId = workerId;\n return module.exports;\n}\n\n/**\n *\n * sets new characters to use in the alphabet\n * returns the shuffled alphabet\n */\nfunction characters(newCharacters) {\n if (newCharacters !== undefined) {\n alphabet.characters(newCharacters);\n }\n\n return alphabet.shuffled();\n}\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction generate() {\n return build(clusterWorkerId);\n}\n\n// Export all other functions as properties of the generate function\nmodule.exports = generate;\nmodule.exports.generate = generate;\nmodule.exports.seed = seed;\nmodule.exports.worker = worker;\nmodule.exports.characters = characters;\nmodule.exports.isValid = isValid;\n","'use strict';\nmodule.exports = require('./lib/index');\n","/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.14';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used as default options for `_.truncate`. */\n var DEFAULT_TRUNC_LENGTH = 30,\n DEFAULT_TRUNC_OMISSION = '...';\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295,\n MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n domExcTag = '[object DOMException]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]',\n weakSetTag = '[object WeakSet]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match empty string literals in compiled template source. */\n var reEmptyStringLeading = /\\b__p \\+= '';/g,\n reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n\n /** Used to match HTML entities and HTML characters. */\n var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n reUnescapedHtml = /[&<>\"']/g,\n reHasEscapedHtml = RegExp(reEscapedHtml.source),\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match template delimiters. */\n var reEscape = /<%-([\\s\\S]+?)%>/g,\n reEvaluate = /<%([\\s\\S]+?)%>/g,\n reInterpolate = /<%=([\\s\\S]+?)%>/g;\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n reHasRegExpChar = RegExp(reRegExpChar.source);\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g,\n reTrimStart = /^\\s+/,\n reTrimEnd = /\\s+$/;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match words composed of alphanumeric characters. */\n var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /**\n * Used to match\n * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n */\n var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n\n /** Used to ensure capturing order of template delimiters. */\n var reNoMatch = /($^)/;\n\n /** Used to match unescaped characters in compiled string literals. */\n var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsDingbatRange = '\\\\u2700-\\\\u27bf',\n rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n rsPunctuationRange = '\\\\u2000-\\\\u206f',\n rsSpaceRange = ' \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000',\n rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n rsVarRange = '\\\\ufe0e\\\\ufe0f',\n rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n\n /** Used to compose unicode capture groups. */\n var rsApos = \"['\\u2019]\",\n rsAstral = '[' + rsAstralRange + ']',\n rsBreak = '[' + rsBreakRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsDigits = '\\\\d+',\n rsDingbat = '[' + rsDingbatRange + ']',\n rsLower = '[' + rsLowerRange + ']',\n rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsUpper = '[' + rsUpperRange + ']',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match apostrophes. */\n var reApos = RegExp(rsApos, 'g');\n\n /**\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n */\n var reComboMark = RegExp(rsCombo, 'g');\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to match complex or compound words. */\n var reUnicodeWord = RegExp([\n rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',\n rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',\n rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,\n rsUpper + '+' + rsOptContrUpper,\n rsOrdUpper,\n rsOrdLower,\n rsDigits,\n rsEmoji\n ].join('|'), 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to detect strings that need a more robust regexp to match words. */\n var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;\n\n /** Used to assign default `context` object properties. */\n var contextProps = [\n 'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',\n 'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',\n 'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',\n 'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',\n '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'\n ];\n\n /** Used to make template sourceURLs easier to identify. */\n var templateCounter = -1;\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A', '\\xc1': 'A', '\\xc2': 'A', '\\xc3': 'A', '\\xc4': 'A', '\\xc5': 'A',\n '\\xe0': 'a', '\\xe1': 'a', '\\xe2': 'a', '\\xe3': 'a', '\\xe4': 'a', '\\xe5': 'a',\n '\\xc7': 'C', '\\xe7': 'c',\n '\\xd0': 'D', '\\xf0': 'd',\n '\\xc8': 'E', '\\xc9': 'E', '\\xca': 'E', '\\xcb': 'E',\n '\\xe8': 'e', '\\xe9': 'e', '\\xea': 'e', '\\xeb': 'e',\n '\\xcc': 'I', '\\xcd': 'I', '\\xce': 'I', '\\xcf': 'I',\n '\\xec': 'i', '\\xed': 'i', '\\xee': 'i', '\\xef': 'i',\n '\\xd1': 'N', '\\xf1': 'n',\n '\\xd2': 'O', '\\xd3': 'O', '\\xd4': 'O', '\\xd5': 'O', '\\xd6': 'O', '\\xd8': 'O',\n '\\xf2': 'o', '\\xf3': 'o', '\\xf4': 'o', '\\xf5': 'o', '\\xf6': 'o', '\\xf8': 'o',\n '\\xd9': 'U', '\\xda': 'U', '\\xdb': 'U', '\\xdc': 'U',\n '\\xf9': 'u', '\\xfa': 'u', '\\xfb': 'u', '\\xfc': 'u',\n '\\xdd': 'Y', '\\xfd': 'y', '\\xff': 'y',\n '\\xc6': 'Ae', '\\xe6': 'ae',\n '\\xde': 'Th', '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n '\\u0100': 'A', '\\u0102': 'A', '\\u0104': 'A',\n '\\u0101': 'a', '\\u0103': 'a', '\\u0105': 'a',\n '\\u0106': 'C', '\\u0108': 'C', '\\u010a': 'C', '\\u010c': 'C',\n '\\u0107': 'c', '\\u0109': 'c', '\\u010b': 'c', '\\u010d': 'c',\n '\\u010e': 'D', '\\u0110': 'D', '\\u010f': 'd', '\\u0111': 'd',\n '\\u0112': 'E', '\\u0114': 'E', '\\u0116': 'E', '\\u0118': 'E', '\\u011a': 'E',\n '\\u0113': 'e', '\\u0115': 'e', '\\u0117': 'e', '\\u0119': 'e', '\\u011b': 'e',\n '\\u011c': 'G', '\\u011e': 'G', '\\u0120': 'G', '\\u0122': 'G',\n '\\u011d': 'g', '\\u011f': 'g', '\\u0121': 'g', '\\u0123': 'g',\n '\\u0124': 'H', '\\u0126': 'H', '\\u0125': 'h', '\\u0127': 'h',\n '\\u0128': 'I', '\\u012a': 'I', '\\u012c': 'I', '\\u012e': 'I', '\\u0130': 'I',\n '\\u0129': 'i', '\\u012b': 'i', '\\u012d': 'i', '\\u012f': 'i', '\\u0131': 'i',\n '\\u0134': 'J', '\\u0135': 'j',\n '\\u0136': 'K', '\\u0137': 'k', '\\u0138': 'k',\n '\\u0139': 'L', '\\u013b': 'L', '\\u013d': 'L', '\\u013f': 'L', '\\u0141': 'L',\n '\\u013a': 'l', '\\u013c': 'l', '\\u013e': 'l', '\\u0140': 'l', '\\u0142': 'l',\n '\\u0143': 'N', '\\u0145': 'N', '\\u0147': 'N', '\\u014a': 'N',\n '\\u0144': 'n', '\\u0146': 'n', '\\u0148': 'n', '\\u014b': 'n',\n '\\u014c': 'O', '\\u014e': 'O', '\\u0150': 'O',\n '\\u014d': 'o', '\\u014f': 'o', '\\u0151': 'o',\n '\\u0154': 'R', '\\u0156': 'R', '\\u0158': 'R',\n '\\u0155': 'r', '\\u0157': 'r', '\\u0159': 'r',\n '\\u015a': 'S', '\\u015c': 'S', '\\u015e': 'S', '\\u0160': 'S',\n '\\u015b': 's', '\\u015d': 's', '\\u015f': 's', '\\u0161': 's',\n '\\u0162': 'T', '\\u0164': 'T', '\\u0166': 'T',\n '\\u0163': 't', '\\u0165': 't', '\\u0167': 't',\n '\\u0168': 'U', '\\u016a': 'U', '\\u016c': 'U', '\\u016e': 'U', '\\u0170': 'U', '\\u0172': 'U',\n '\\u0169': 'u', '\\u016b': 'u', '\\u016d': 'u', '\\u016f': 'u', '\\u0171': 'u', '\\u0173': 'u',\n '\\u0174': 'W', '\\u0175': 'w',\n '\\u0176': 'Y', '\\u0177': 'y', '\\u0178': 'Y',\n '\\u0179': 'Z', '\\u017b': 'Z', '\\u017d': 'Z',\n '\\u017a': 'z', '\\u017c': 'z', '\\u017e': 'z',\n '\\u0132': 'IJ', '\\u0133': 'ij',\n '\\u0152': 'Oe', '\\u0153': 'oe',\n '\\u0149': \"'n\", '\\u017f': 's'\n };\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": '''\n };\n\n /** Used to map HTML entities to characters. */\n var htmlUnescapes = {\n '&': '&',\n '<': '<',\n '>': '>',\n '"': '\"',\n ''': \"'\"\n };\n\n /** Used to escape characters for inclusion in compiled string literals. */\n var stringEscapes = {\n '\\\\': '\\\\',\n \"'\": \"'\",\n '\\n': 'n',\n '\\r': 'r',\n '\\u2028': 'u2028',\n '\\u2029': 'u2029'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n // Use `util.types` for Node.js 10+.\n var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n if (types) {\n return types;\n }\n\n // Legacy `process.binding('util')` for Node.js < 10.\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.forEachRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEachRight(array, iteratee) {\n var length = array == null ? 0 : array.length;\n\n while (length--) {\n if (iteratee(array[length], length, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.reduceRight` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the last element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n var length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[--length];\n }\n while (length--) {\n accumulator = iteratee(accumulator, array[length], length, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * Splits an ASCII `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function asciiWords(string) {\n return string.match(reAsciiWord) || [];\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * This function is like `baseIndexOf` except that it accepts a comparator.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOfWith(array, value, fromIndex, comparator) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (comparator(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.mean` and `_.meanBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the mean.\n */\n function baseMean(array, iteratee) {\n var length = array == null ? 0 : array.length;\n return length ? (baseSum(array, iteratee) / length) : NAN;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.sum` and `_.sumBy` without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {number} Returns the sum.\n */\n function baseSum(array, iteratee) {\n var result,\n index = -1,\n length = array.length;\n\n while (++index < length) {\n var current = iteratee(array[index]);\n if (current !== undefined) {\n result = result === undefined ? current : (result + current);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n * of key-value pairs for `object` corresponding to the property names of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the key-value pairs.\n */\n function baseToPairs(object, props) {\n return arrayMap(props, function(key) {\n return [key, object[key]];\n });\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n * letters to basic Latin letters.\n *\n * @private\n * @param {string} letter The matched letter to deburr.\n * @returns {string} Returns the deburred letter.\n */\n var deburrLetter = basePropertyOf(deburredLetters);\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Used by `_.template` to escape characters for inclusion in compiled string literals.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n function escapeStringChar(chr) {\n return '\\\\' + stringEscapes[chr];\n }\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Checks if `string` contains a word composed of Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a word is found, else `false`.\n */\n function hasUnicodeWord(string) {\n return reHasUnicodeWord.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * Converts `set` to its value-value pairs.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the value-value pairs.\n */\n function setToPairs(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = [value, value];\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * A specialized version of `_.lastIndexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictLastIndexOf(array, value, fromIndex) {\n var index = fromIndex + 1;\n while (index--) {\n if (array[index] === value) {\n return index;\n }\n }\n return index;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Used by `_.unescape` to convert HTML entities to characters.\n *\n * @private\n * @param {string} chr The matched character to unescape.\n * @returns {string} Returns the unescaped character.\n */\n var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /**\n * Splits a Unicode `string` into an array of its words.\n *\n * @private\n * @param {string} The string to inspect.\n * @returns {Array} Returns the words of `string`.\n */\n function unicodeWords(string) {\n return string.match(reUnicodeWord) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Create a new pristine `lodash` function using the `context` object.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Util\n * @param {Object} [context=root] The context object.\n * @returns {Function} Returns a new `lodash` function.\n * @example\n *\n * _.mixin({ 'foo': _.constant('foo') });\n *\n * var lodash = _.runInContext();\n * lodash.mixin({ 'bar': lodash.constant('bar') });\n *\n * _.isFunction(_.foo);\n * // => true\n * _.isFunction(_.bar);\n * // => false\n *\n * lodash.isFunction(lodash.foo);\n * // => false\n * lodash.isFunction(lodash.bar);\n * // => true\n *\n * // Create a suped-up `defer` in Node.js.\n * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n */\n var runInContext = (function runInContext(context) {\n context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n\n /** Built-in constructor references. */\n var Array = context.Array,\n Date = context.Date,\n Error = context.Error,\n Function = context.Function,\n Math = context.Math,\n Object = context.Object,\n RegExp = context.RegExp,\n String = context.String,\n TypeError = context.TypeError;\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = context['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? context.Buffer : undefined,\n Symbol = context.Symbol,\n Uint8Array = context.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /** Mocked built-ins. */\n var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n ctxNow = Date && Date.now !== root.Date.now && Date.now,\n ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = context.isFinite,\n nativeJoin = arrayProto.join,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeParseInt = context.parseInt,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(context, 'DataView'),\n Map = getNative(context, 'Map'),\n Promise = getNative(context, 'Promise'),\n Set = getNative(context, 'Set'),\n WeakMap = getNative(context, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n /**\n * By default, the template delimiters used by lodash are like those in\n * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n * following template settings to use alternative delimiters.\n *\n * @static\n * @memberOf _\n * @type {Object}\n */\n lodash.templateSettings = {\n\n /**\n * Used to detect `data` property values to be HTML-escaped.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'escape': reEscape,\n\n /**\n * Used to detect code to be evaluated.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'evaluate': reEvaluate,\n\n /**\n * Used to detect `data` property values to inject.\n *\n * @memberOf _.templateSettings\n * @type {RegExp}\n */\n 'interpolate': reInterpolate,\n\n /**\n * Used to reference the data object in the template text.\n *\n * @memberOf _.templateSettings\n * @type {string}\n */\n 'variable': '',\n\n /**\n * Used to import variables into the compiled template.\n *\n * @memberOf _.templateSettings\n * @type {Object}\n */\n 'imports': {\n\n /**\n * A reference to the `lodash` function.\n *\n * @memberOf _.templateSettings.imports\n * @type {Function}\n */\n '_': lodash\n }\n };\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.sample` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @returns {*} Returns the random element.\n */\n function arraySample(array) {\n var length = array.length;\n return length ? array[baseRandom(0, length - 1)] : undefined;\n }\n\n /**\n * A specialized version of `_.sampleSize` for arrays.\n *\n * @private\n * @param {Array} array The array to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function arraySampleSize(array, n) {\n return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n }\n\n /**\n * A specialized version of `_.shuffle` for arrays.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function arrayShuffle(array) {\n return shuffleSelf(copyArray(array));\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.conforms` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n */\n function baseConforms(source) {\n var props = keys(source);\n return function(object) {\n return baseConformsTo(object, source, props);\n };\n }\n\n /**\n * The base implementation of `_.conformsTo` which accepts `props` to check.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n */\n function baseConformsTo(object, source, props) {\n var length = props.length;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (length--) {\n var key = props[length],\n predicate = source[key],\n value = object[key];\n\n if ((value === undefined && !(key in object)) || !predicate(value)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEachRight = createBaseEach(baseForOwnRight, true);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.fill` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n */\n function baseFill(array, value, start, end) {\n var length = array.length;\n\n start = toInteger(start);\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = (end === undefined || end > length) ? length : toInteger(end);\n if (end < 0) {\n end += length;\n }\n end = start > end ? 0 : toLength(end);\n while (start < end) {\n array[start++] = value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of `_.inRange` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to check.\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n */\n function baseInRange(number, start, end) {\n return number >= nativeMin(start, end) && number < nativeMax(start, end);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n */\n function baseIsArrayBuffer(value) {\n return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n stack || (stack = new Stack);\n if (isObject(srcValue)) {\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || isFunction(objValue)) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.nth` which doesn't coerce arguments.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {number} n The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n */\n function baseNth(array, n) {\n var length = array.length;\n if (!length) {\n return;\n }\n n += n < 0 ? length : 0;\n return isIndex(n, length) ? array[n] : undefined;\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.pullAllBy` without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n */\n function basePullAll(array, values, iteratee, comparator) {\n var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n index = -1,\n length = values.length,\n seen = array;\n\n if (array === values) {\n values = copyArray(values);\n }\n if (iteratee) {\n seen = arrayMap(array, baseUnary(iteratee));\n }\n while (++index < length) {\n var fromIndex = 0,\n value = values[index],\n computed = iteratee ? iteratee(value) : value;\n\n while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n if (seen !== array) {\n splice.call(seen, fromIndex, 1);\n }\n splice.call(array, fromIndex, 1);\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.pullAt` without support for individual\n * indexes or capturing the removed elements.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {number[]} indexes The indexes of elements to remove.\n * @returns {Array} Returns `array`.\n */\n function basePullAt(array, indexes) {\n var length = array ? indexes.length : 0,\n lastIndex = length - 1;\n\n while (length--) {\n var index = indexes[length];\n if (length == lastIndex || index !== previous) {\n var previous = index;\n if (isIndex(index)) {\n splice.call(array, index, 1);\n } else {\n baseUnset(array, index);\n }\n }\n }\n return array;\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.repeat` which doesn't coerce arguments.\n *\n * @private\n * @param {string} string The string to repeat.\n * @param {number} n The number of times to repeat the string.\n * @returns {string} Returns the repeated string.\n */\n function baseRepeat(string, n) {\n var result = '';\n if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n return result;\n }\n // Leverage the exponentiation by squaring algorithm for a faster repeat.\n // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n do {\n if (n % 2) {\n result += string;\n }\n n = nativeFloor(n / 2);\n if (n) {\n string += string;\n }\n } while (n);\n\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.sample`.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n */\n function baseSample(collection) {\n return arraySample(values(collection));\n }\n\n /**\n * The base implementation of `_.sampleSize` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to sample.\n * @param {number} n The number of elements to sample.\n * @returns {Array} Returns the random elements.\n */\n function baseSampleSize(collection, n) {\n var array = values(collection);\n return shuffleSelf(array, baseClamp(n, 0, array.length));\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.shuffle`.\n *\n * @private\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n */\n function baseShuffle(collection) {\n return shuffleSelf(values(collection));\n }\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n * performs a binary search of `array` to determine the index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndex(array, value, retHighest) {\n var low = 0,\n high = array == null ? low : array.length;\n\n if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n while (low < high) {\n var mid = (low + high) >>> 1,\n computed = array[mid];\n\n if (computed !== null && !isSymbol(computed) &&\n (retHighest ? (computed <= value) : (computed < value))) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return high;\n }\n return baseSortedIndexBy(array, value, identity, retHighest);\n }\n\n /**\n * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n * which invokes `iteratee` for `value` and each element of `array` to compute\n * their sort ranking. The iteratee is invoked with one argument; (value).\n *\n * @private\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} iteratee The iteratee invoked per element.\n * @param {boolean} [retHighest] Specify returning the highest qualified index.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n */\n function baseSortedIndexBy(array, value, iteratee, retHighest) {\n value = iteratee(value);\n\n var low = 0,\n high = array == null ? 0 : array.length,\n valIsNaN = value !== value,\n valIsNull = value === null,\n valIsSymbol = isSymbol(value),\n valIsUndefined = value === undefined;\n\n while (low < high) {\n var mid = nativeFloor((low + high) / 2),\n computed = iteratee(array[mid]),\n othIsDefined = computed !== undefined,\n othIsNull = computed === null,\n othIsReflexive = computed === computed,\n othIsSymbol = isSymbol(computed);\n\n if (valIsNaN) {\n var setLow = retHighest || othIsReflexive;\n } else if (valIsUndefined) {\n setLow = othIsReflexive && (retHighest || othIsDefined);\n } else if (valIsNull) {\n setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n } else if (valIsSymbol) {\n setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n } else if (othIsNull || othIsSymbol) {\n setLow = false;\n } else {\n setLow = retHighest ? (computed <= value) : (computed < value);\n }\n if (setLow) {\n low = mid + 1;\n } else {\n high = mid;\n }\n }\n return nativeMin(high, MAX_ARRAY_INDEX);\n }\n\n /**\n * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseSortedUniq(array, iteratee) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n if (!index || !eq(computed, seen)) {\n var seen = computed;\n result[resIndex++] = value === 0 ? 0 : value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.toNumber` which doesn't ensure correct\n * conversions of binary, hexadecimal, or octal string values.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n */\n function baseToNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n return +value;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `_.update`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to update.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseUpdate(object, path, updater, customizer) {\n return baseSet(object, path, updater(baseGet(object, path)), customizer);\n }\n\n /**\n * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n * without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to query.\n * @param {Function} predicate The function invoked per iteration.\n * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseWhile(array, predicate, isDrop, fromRight) {\n var length = array.length,\n index = fromRight ? length : -1;\n\n while ((fromRight ? index-- : ++index < length) &&\n predicate(array[index], index, array)) {}\n\n return isDrop\n ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))\n : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * The base implementation of methods like `_.xor`, without support for\n * iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of values.\n */\n function baseXor(arrays, iteratee, comparator) {\n var length = arrays.length;\n if (length < 2) {\n return length ? baseUniq(arrays[0]) : [];\n }\n var index = -1,\n result = Array(length);\n\n while (++index < length) {\n var array = arrays[index],\n othIndex = -1;\n\n while (++othIndex < length) {\n if (othIndex != index) {\n result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n }\n }\n }\n return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to `identity` if it's not a function.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Function} Returns cast function.\n */\n function castFunction(value) {\n return typeof value == 'function' ? value : identity;\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * A `baseRest` alias which can be replaced with `identity` by module\n * replacement plugins.\n *\n * @private\n * @type {Function}\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n var castRest = baseRest;\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n *\n * @private\n * @param {number|Object} id The timer id or timeout object of the timer to clear.\n */\n var clearTimeout = ctxClearTimeout || function(id) {\n return root.clearTimeout(id);\n };\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.lowerFirst`.\n *\n * @private\n * @param {string} methodName The name of the `String` case method to use.\n * @returns {Function} Returns the new case function.\n */\n function createCaseFirst(methodName) {\n return function(string) {\n string = toString(string);\n\n var strSymbols = hasUnicode(string)\n ? stringToArray(string)\n : undefined;\n\n var chr = strSymbols\n ? strSymbols[0]\n : string.charAt(0);\n\n var trailing = strSymbols\n ? castSlice(strSymbols, 1).join('')\n : string.slice(1);\n\n return chr[methodName]() + trailing;\n };\n }\n\n /**\n * Creates a function like `_.camelCase`.\n *\n * @private\n * @param {Function} callback The function to combine each word.\n * @returns {Function} Returns the new compounder function.\n */\n function createCompounder(callback) {\n return function(string) {\n return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n };\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = getIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a `_.flow` or `_.flowRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new flow function.\n */\n function createFlow(fromRight) {\n return flatRest(function(funcs) {\n var length = funcs.length,\n index = length,\n prereq = LodashWrapper.prototype.thru;\n\n if (fromRight) {\n funcs.reverse();\n }\n while (index--) {\n var func = funcs[index];\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n var wrapper = new LodashWrapper([], true);\n }\n }\n index = wrapper ? index : length;\n while (++index < length) {\n func = funcs[index];\n\n var funcName = getFuncName(func),\n data = funcName == 'wrapper' ? getData(func) : undefined;\n\n if (data && isLaziable(data[0]) &&\n data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&\n !data[4].length && data[9] == 1\n ) {\n wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n } else {\n wrapper = (func.length == 1 && isLaziable(func))\n ? wrapper[funcName]()\n : wrapper.thru(func);\n }\n }\n return function() {\n var args = arguments,\n value = args[0];\n\n if (wrapper && args.length == 1 && isArray(value)) {\n return wrapper.plant(value).value();\n }\n var index = 0,\n result = length ? funcs[index].apply(this, args) : value;\n\n while (++index < length) {\n result = funcs[index].call(this, result);\n }\n return result;\n };\n });\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that performs a mathematical operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @param {number} [defaultValue] The value used for `undefined` arguments.\n * @returns {Function} Returns the new mathematical operation function.\n */\n function createMathOperation(operator, defaultValue) {\n return function(value, other) {\n var result;\n if (value === undefined && other === undefined) {\n return defaultValue;\n }\n if (value !== undefined) {\n result = value;\n }\n if (other !== undefined) {\n if (result === undefined) {\n return other;\n }\n if (typeof value == 'string' || typeof other == 'string') {\n value = baseToString(value);\n other = baseToString(other);\n } else {\n value = baseToNumber(value);\n other = baseToNumber(other);\n }\n result = operator(value, other);\n }\n return result;\n };\n }\n\n /**\n * Creates a function like `_.over`.\n *\n * @private\n * @param {Function} arrayFunc The function to iterate over iteratees.\n * @returns {Function} Returns the new over function.\n */\n function createOver(arrayFunc) {\n return flatRest(function(iteratees) {\n iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n return baseRest(function(args) {\n var thisArg = this;\n return arrayFunc(iteratees, function(iteratee) {\n return apply(iteratee, thisArg, args);\n });\n });\n });\n }\n\n /**\n * Creates the padding for `string` based on `length`. The `chars` string\n * is truncated if the number of characters exceeds `length`.\n *\n * @private\n * @param {number} length The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padding for `string`.\n */\n function createPadding(length, chars) {\n chars = chars === undefined ? ' ' : baseToString(chars);\n\n var charsLength = chars.length;\n if (charsLength < 2) {\n return charsLength ? baseRepeat(chars, length) : chars;\n }\n var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n return hasUnicode(chars)\n ? castSlice(stringToArray(result), 0, length).join('')\n : result.slice(0, length);\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that performs a relational operation on two values.\n *\n * @private\n * @param {Function} operator The function to perform the operation.\n * @returns {Function} Returns the new relational operation function.\n */\n function createRelationalOperation(operator) {\n return function(value, other) {\n if (!(typeof value == 'string' && typeof other == 'string')) {\n value = toNumber(value);\n other = toNumber(other);\n }\n return operator(value, other);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a function like `_.round`.\n *\n * @private\n * @param {string} methodName The name of the `Math` method to use when rounding.\n * @returns {Function} Returns the new round function.\n */\n function createRound(methodName) {\n var func = Math[methodName];\n return function(number, precision) {\n number = toNumber(number);\n precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n if (precision && nativeIsFinite(number)) {\n // Shift with exponential notation to avoid floating-point issues.\n // See [MDN](https://mdn.io/round#Examples) for more details.\n var pair = (toString(number) + 'e').split('e'),\n value = func(pair[0] + 'e' + (+pair[1] + precision));\n\n pair = (toString(value) + 'e').split('e');\n return +(pair[0] + 'e' + (+pair[1] - precision));\n }\n return func(number);\n };\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a `_.toPairs` or `_.toPairsIn` function.\n *\n * @private\n * @param {Function} keysFunc The function to get the keys of a given object.\n * @returns {Function} Returns the new pairs function.\n */\n function createToPairs(keysFunc) {\n return function(object) {\n var tag = getTag(object);\n if (tag == mapTag) {\n return mapToArray(object);\n }\n if (tag == setTag) {\n return setToPairs(object);\n }\n return baseToPairs(object, keysFunc(object));\n };\n }\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n * of source objects to the destination object for all destination properties\n * that resolve to `undefined`.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to assign.\n * @param {Object} object The parent object of `objValue`.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsAssignIn(objValue, srcValue, key, object) {\n if (objValue === undefined ||\n (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n return srcValue;\n }\n return objValue;\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n * this function returns the custom method, otherwise it returns `baseIteratee`.\n * If arguments are provided, the chosen function is invoked with them and\n * its result is returned.\n *\n * @private\n * @param {*} [value] The value to convert to an iteratee.\n * @param {number} [arity] The arity of the created iteratee.\n * @returns {Function} Returns the chosen function or its result.\n */\n function getIteratee() {\n var result = lodash.iteratee || iteratee;\n result = result === iteratee ? baseIteratee : result;\n return arguments.length ? result(arguments[0], arguments[1]) : result;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `func` is capable of being masked.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n */\n var isMaskable = coreJsData ? isFunction : stubFalse;\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n if (key === 'constructor' && typeof object[key] === 'function') {\n return;\n }\n\n if (key == '__proto__') {\n return;\n }\n\n return object[key];\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n var setTimeout = ctxSetTimeout || function(func, wait) {\n return root.setTimeout(func, wait);\n };\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n *\n * @private\n * @param {Array} array The array to shuffle.\n * @param {number} [size=array.length] The size of `array`.\n * @returns {Array} Returns `array`.\n */\n function shuffleSelf(array, size) {\n var index = -1,\n length = array.length,\n lastIndex = length - 1;\n\n size = size === undefined ? length : size;\n while (++index < size) {\n var rand = baseRandom(index, lastIndex),\n value = array[rand];\n\n array[rand] = array[index];\n array[index] = value;\n }\n array.length = size;\n return array;\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of elements split into groups the length of `size`.\n * If `array` can't be split evenly, the final chunk will be the remaining\n * elements.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to process.\n * @param {number} [size=1] The length of each chunk\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the new array of chunks.\n * @example\n *\n * _.chunk(['a', 'b', 'c', 'd'], 2);\n * // => [['a', 'b'], ['c', 'd']]\n *\n * _.chunk(['a', 'b', 'c', 'd'], 3);\n * // => [['a', 'b', 'c'], ['d']]\n */\n function chunk(array, size, guard) {\n if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {\n size = 1;\n } else {\n size = nativeMax(toInteger(size), 0);\n }\n var length = array == null ? 0 : array.length;\n if (!length || size < 1) {\n return [];\n }\n var index = 0,\n resIndex = 0,\n result = Array(nativeCeil(length / size));\n\n while (index < length) {\n result[resIndex++] = baseSlice(array, index, (index += size));\n }\n return result;\n }\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.difference` except that it accepts `comparator`\n * which is invoked to compare elements of `array` to `values`. The order and\n * references of result values are determined by the first array. The comparator\n * is invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n *\n * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }]\n */\n var differenceWith = baseRest(function(array, values) {\n var comparator = last(values);\n if (isArrayLikeObject(comparator)) {\n comparator = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.dropRight([1, 2, 3]);\n * // => [1, 2]\n *\n * _.dropRight([1, 2, 3], 2);\n * // => [1]\n *\n * _.dropRight([1, 2, 3], 5);\n * // => []\n *\n * _.dropRight([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the end.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.dropRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropRightWhile(users, ['active', false]);\n * // => objects for ['barney']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropRightWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` excluding elements dropped from the beginning.\n * Elements are dropped until `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.dropWhile(users, function(o) { return !o.active; });\n * // => objects for ['pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.dropWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.dropWhile(users, ['active', false]);\n * // => objects for ['pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.dropWhile(users, 'active');\n * // => objects for ['barney', 'fred', 'pebbles']\n */\n function dropWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), true)\n : [];\n }\n\n /**\n * Fills elements of `array` with `value` from `start` up to, but not\n * including, `end`.\n *\n * **Note:** This method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Array\n * @param {Array} array The array to fill.\n * @param {*} value The value to fill `array` with.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.fill(array, 'a');\n * console.log(array);\n * // => ['a', 'a', 'a']\n *\n * _.fill(Array(3), 2);\n * // => [2, 2, 2]\n *\n * _.fill([4, 6, 8, 10], '*', 1, 3);\n * // => [4, '*', '*', 10]\n */\n function fill(array, value, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n start = 0;\n end = length;\n }\n return baseFill(array, value, start, end);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Recursively flatten `array` up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * var array = [1, [2, [3, [4]], 5]];\n *\n * _.flattenDepth(array, 1);\n * // => [1, 2, [3, [4]], 5]\n *\n * _.flattenDepth(array, 2);\n * // => [1, 2, 3, [4], 5]\n */\n function flattenDepth(array, depth) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(array, depth);\n }\n\n /**\n * The inverse of `_.toPairs`; this method returns an object composed\n * from key-value `pairs`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} pairs The key-value pairs.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.fromPairs([['a', 1], ['b', 2]]);\n * // => { 'a': 1, 'b': 2 }\n */\n function fromPairs(pairs) {\n var index = -1,\n length = pairs == null ? 0 : pairs.length,\n result = {};\n\n while (++index < length) {\n var pair = pairs[index];\n result[pair[0]] = pair[1];\n }\n return result;\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `iteratee`\n * which is invoked for each element of each `arrays` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [2.1]\n *\n * // The `_.property` iteratee shorthand.\n * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }]\n */\n var intersectionBy = baseRest(function(arrays) {\n var iteratee = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n if (iteratee === last(mapped)) {\n iteratee = undefined;\n } else {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, getIteratee(iteratee, 2))\n : [];\n });\n\n /**\n * This method is like `_.intersection` except that it accepts `comparator`\n * which is invoked to compare elements of `arrays`. The order and references\n * of result values are determined by the first array. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.intersectionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }]\n */\n var intersectionWith = baseRest(function(arrays) {\n var comparator = last(arrays),\n mapped = arrayMap(arrays, castArrayLikeObject);\n\n comparator = typeof comparator == 'function' ? comparator : undefined;\n if (comparator) {\n mapped.pop();\n }\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped, undefined, comparator)\n : [];\n });\n\n /**\n * Converts all elements in `array` into a string separated by `separator`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to convert.\n * @param {string} [separator=','] The element separator.\n * @returns {string} Returns the joined string.\n * @example\n *\n * _.join(['a', 'b', 'c'], '~');\n * // => 'a~b~c'\n */\n function join(array, separator) {\n return array == null ? '' : nativeJoin.call(array, separator);\n }\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * This method is like `_.indexOf` except that it iterates over elements of\n * `array` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.lastIndexOf([1, 2, 1, 2], 2);\n * // => 3\n *\n * // Search from the `fromIndex`.\n * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n * // => 1\n */\n function lastIndexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n }\n return value === value\n ? strictLastIndexOf(array, value, index)\n : baseFindIndex(array, baseIsNaN, index, true);\n }\n\n /**\n * Gets the element at index `n` of `array`. If `n` is negative, the nth\n * element from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.11.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=0] The index of the element to return.\n * @returns {*} Returns the nth element of `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n *\n * _.nth(array, 1);\n * // => 'b'\n *\n * _.nth(array, -2);\n * // => 'c';\n */\n function nth(array, n) {\n return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;\n }\n\n /**\n * Removes all given values from `array` using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n * to remove elements from an array by predicate.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...*} [values] The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pull(array, 'a', 'c');\n * console.log(array);\n * // => ['b', 'b']\n */\n var pull = baseRest(pullAll);\n\n /**\n * This method is like `_.pull` except that it accepts an array of values to remove.\n *\n * **Note:** Unlike `_.difference`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n *\n * _.pullAll(array, ['a', 'c']);\n * console.log(array);\n * // => ['b', 'b']\n */\n function pullAll(array, values) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values)\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `iteratee` which is\n * invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The iteratee is invoked with one argument: (value).\n *\n * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n *\n * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n * console.log(array);\n * // => [{ 'x': 2 }]\n */\n function pullAllBy(array, values, iteratee) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, getIteratee(iteratee, 2))\n : array;\n }\n\n /**\n * This method is like `_.pullAll` except that it accepts `comparator` which\n * is invoked to compare elements of `array` to `values`. The comparator is\n * invoked with two arguments: (arrVal, othVal).\n *\n * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Array} values The values to remove.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n *\n * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n * console.log(array);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n */\n function pullAllWith(array, values, comparator) {\n return (array && array.length && values && values.length)\n ? basePullAll(array, values, undefined, comparator)\n : array;\n }\n\n /**\n * Removes elements from `array` corresponding to `indexes` and returns an\n * array of removed elements.\n *\n * **Note:** Unlike `_.at`, this method mutates `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = ['a', 'b', 'c', 'd'];\n * var pulled = _.pullAt(array, [1, 3]);\n *\n * console.log(array);\n * // => ['a', 'c']\n *\n * console.log(pulled);\n * // => ['b', 'd']\n */\n var pullAt = flatRest(function(array, indexes) {\n var length = array == null ? 0 : array.length,\n result = baseAt(array, indexes);\n\n basePullAt(array, arrayMap(indexes, function(index) {\n return isIndex(index, length) ? +index : index;\n }).sort(compareAscending));\n\n return result;\n });\n\n /**\n * Removes all elements from `array` that `predicate` returns truthy for\n * and returns an array of the removed elements. The predicate is invoked\n * with three arguments: (value, index, array).\n *\n * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n * to pull elements from an array by value.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new array of removed elements.\n * @example\n *\n * var array = [1, 2, 3, 4];\n * var evens = _.remove(array, function(n) {\n * return n % 2 == 0;\n * });\n *\n * console.log(array);\n * // => [1, 3]\n *\n * console.log(evens);\n * // => [2, 4]\n */\n function remove(array, predicate) {\n var result = [];\n if (!(array && array.length)) {\n return result;\n }\n var index = -1,\n indexes = [],\n length = array.length;\n\n predicate = getIteratee(predicate, 3);\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result.push(value);\n indexes.push(index);\n }\n }\n basePullAt(array, indexes);\n return result;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Uses a binary search to determine the lowest index at which `value`\n * should be inserted into `array` in order to maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedIndex([30, 50], 40);\n * // => 1\n */\n function sortedIndex(array, value) {\n return baseSortedIndex(array, value);\n }\n\n /**\n * This method is like `_.sortedIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n * // => 0\n */\n function sortedIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n }\n\n /**\n * This method is like `_.indexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n * // => 1\n */\n function sortedIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value);\n if (index < length && eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.sortedIndex` except that it returns the highest\n * index at which `value` should be inserted into `array` in order to\n * maintain its sort order.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n * // => 4\n */\n function sortedLastIndex(array, value) {\n return baseSortedIndex(array, value, true);\n }\n\n /**\n * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n * which is invoked for `value` and each element of `array` to compute their\n * sort ranking. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The sorted array to inspect.\n * @param {*} value The value to evaluate.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the index at which `value` should be inserted\n * into `array`.\n * @example\n *\n * var objects = [{ 'x': 4 }, { 'x': 5 }];\n *\n * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n * // => 1\n *\n * // The `_.property` iteratee shorthand.\n * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n * // => 1\n */\n function sortedLastIndexBy(array, value, iteratee) {\n return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n }\n\n /**\n * This method is like `_.lastIndexOf` except that it performs a binary\n * search on a sorted `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n * // => 3\n */\n function sortedLastIndexOf(array, value) {\n var length = array == null ? 0 : array.length;\n if (length) {\n var index = baseSortedIndex(array, value, true) - 1;\n if (eq(array[index], value)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * This method is like `_.uniq` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniq([1, 1, 2]);\n * // => [1, 2]\n */\n function sortedUniq(array) {\n return (array && array.length)\n ? baseSortedUniq(array)\n : [];\n }\n\n /**\n * This method is like `_.uniqBy` except that it's designed and optimized\n * for sorted arrays.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n * // => [1.1, 2.3]\n */\n function sortedUniqBy(array, iteratee) {\n return (array && array.length)\n ? baseSortedUniq(array, getIteratee(iteratee, 2))\n : [];\n }\n\n /**\n * Gets all but the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.tail([1, 2, 3]);\n * // => [2, 3]\n */\n function tail(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 1, length) : [];\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates a slice of `array` with elements taken from the end. Elements are\n * taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.takeRightWhile(users, function(o) { return !o.active; });\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n * // => objects for ['pebbles']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeRightWhile(users, ['active', false]);\n * // => objects for ['fred', 'pebbles']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeRightWhile(users, 'active');\n * // => []\n */\n function takeRightWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3), false, true)\n : [];\n }\n\n /**\n * Creates a slice of `array` with elements taken from the beginning. Elements\n * are taken until `predicate` returns falsey. The predicate is invoked with\n * three arguments: (value, index, array).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.takeWhile(users, function(o) { return !o.active; });\n * // => objects for ['barney', 'fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.takeWhile(users, { 'user': 'barney', 'active': false });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.takeWhile(users, ['active', false]);\n * // => objects for ['barney', 'fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.takeWhile(users, 'active');\n * // => []\n */\n function takeWhile(array, predicate) {\n return (array && array.length)\n ? baseWhile(array, getIteratee(predicate, 3))\n : [];\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * This method is like `_.union` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which uniqueness is computed. Result values are chosen from the first\n * array in which the value occurs. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n var unionBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.union` except that it accepts `comparator` which\n * is invoked to compare elements of `arrays`. Result values are chosen from\n * the first array in which the value occurs. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.unionWith(objects, others, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var unionWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `comparator` which\n * is invoked to compare elements of `array`. The order of result values is\n * determined by the order they occur in the array.The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.uniqWith(objects, _.isEqual);\n * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n */\n function uniqWith(array, comparator) {\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return (array && array.length) ? baseUniq(array, undefined, comparator) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * This method is like `_.unzip` except that it accepts `iteratee` to specify\n * how regrouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * regrouped values.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n * // => [[1, 10, 100], [2, 20, 200]]\n *\n * _.unzipWith(zipped, _.add);\n * // => [3, 30, 300]\n */\n function unzipWith(array, iteratee) {\n if (!(array && array.length)) {\n return [];\n }\n var result = unzip(array);\n if (iteratee == null) {\n return result;\n }\n return arrayMap(result, function(group) {\n return apply(iteratee, undefined, group);\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of unique values that is the\n * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n * of the given arrays. The order of result values is determined by the order\n * they occur in the arrays.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.without\n * @example\n *\n * _.xor([2, 1], [2, 3]);\n * // => [1, 3]\n */\n var xor = baseRest(function(arrays) {\n return baseXor(arrayFilter(arrays, isArrayLikeObject));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `iteratee` which is\n * invoked for each element of each `arrays` to generate the criterion by\n * which by which they're compared. The order of result values is determined\n * by the order they occur in the arrays. The iteratee is invoked with one\n * argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2, 3.4]\n *\n * // The `_.property` iteratee shorthand.\n * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\n var xorBy = baseRest(function(arrays) {\n var iteratee = last(arrays);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n });\n\n /**\n * This method is like `_.xor` except that it accepts `comparator` which is\n * invoked to compare elements of `arrays`. The order of result values is\n * determined by the order they occur in the arrays. The comparator is invoked\n * with two arguments: (arrVal, othVal).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n *\n * _.xorWith(objects, others, _.isEqual);\n * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n */\n var xorWith = baseRest(function(arrays) {\n var comparator = last(arrays);\n comparator = typeof comparator == 'function' ? comparator : undefined;\n return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /**\n * This method is like `_.zipObject` except that it supports property paths.\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n */\n function zipObjectDeep(props, values) {\n return baseZipObject(props || [], values || [], baseSet);\n }\n\n /**\n * This method is like `_.zip` except that it accepts `iteratee` to specify\n * how grouped values should be combined. The iteratee is invoked with the\n * elements of each group: (...group).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @param {Function} [iteratee=_.identity] The function to combine\n * grouped values.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n * return a + b + c;\n * });\n * // => [111, 222]\n */\n var zipWith = baseRest(function(arrays) {\n var length = arrays.length,\n iteratee = length > 1 ? arrays[length - 1] : undefined;\n\n iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n return unzipWith(arrays, iteratee);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * This method is like `_.find` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=collection.length-1] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * _.findLast([1, 2, 3, 4], function(n) {\n * return n % 2 == 1;\n * });\n * // => 3\n */\n var findLast = createFind(findLastIndex);\n\n /**\n * Creates a flattened array of values by running each element in `collection`\n * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n * with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [n, n];\n * }\n *\n * _.flatMap([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDeep([1, 2], duplicate);\n * // => [1, 1, 2, 2]\n */\n function flatMapDeep(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), INFINITY);\n }\n\n /**\n * This method is like `_.flatMap` except that it recursively flattens the\n * mapped results up to `depth` times.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {number} [depth=1] The maximum recursion depth.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * function duplicate(n) {\n * return [[[n, n]]];\n * }\n *\n * _.flatMapDepth([1, 2], duplicate, 2);\n * // => [[1, 1], [2, 2]]\n */\n function flatMapDepth(collection, iteratee, depth) {\n depth = depth === undefined ? 1 : toInteger(depth);\n return baseFlatten(map(collection, iteratee), depth);\n }\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forEach` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @alias eachRight\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEach\n * @example\n *\n * _.forEachRight([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `2` then `1`.\n */\n function forEachRight(collection, iteratee) {\n var func = isArray(collection) ? arrayEachRight : baseEachRight;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Checks if `value` is in `collection`. If `collection` is a string, it's\n * checked for a substring of `value`, otherwise\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * is used for equality comparisons. If `fromIndex` is negative, it's used as\n * the offset from the end of `collection`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {boolean} Returns `true` if `value` is found, else `false`.\n * @example\n *\n * _.includes([1, 2, 3], 1);\n * // => true\n *\n * _.includes([1, 2, 3], 1, 2);\n * // => false\n *\n * _.includes({ 'a': 1, 'b': 2 }, 1);\n * // => true\n *\n * _.includes('abcd', 'bc');\n * // => true\n */\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;\n\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax(length + fromIndex, 0);\n }\n return isString(collection)\n ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)\n : (!!length && baseIndexOf(collection, value, fromIndex) > -1);\n }\n\n /**\n * Invokes the method at `path` of each element in `collection`, returning\n * an array of the results of each invoked method. Any additional arguments\n * are provided to each invoked method. If `path` is a function, it's invoked\n * for, and `this` bound to, each element in `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array|Function|string} path The path of the method to invoke or\n * the function invoked per iteration.\n * @param {...*} [args] The arguments to invoke each method with.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n * // => [[1, 5, 7], [1, 2, 3]]\n *\n * _.invokeMap([123, 456], String.prototype.split, '');\n * // => [['1', '2', '3'], ['4', '5', '6']]\n */\n var invokeMap = baseRest(function(collection, path, args) {\n var index = -1,\n isFunc = typeof path == 'function',\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value) {\n result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n });\n return result;\n });\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the last element responsible for generating the key. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * var array = [\n * { 'dir': 'left', 'code': 97 },\n * { 'dir': 'right', 'code': 100 }\n * ];\n *\n * _.keyBy(array, function(o) {\n * return String.fromCharCode(o.code);\n * });\n * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n *\n * _.keyBy(array, 'dir');\n * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n */\n var keyBy = createAggregator(function(result, value, key) {\n baseAssignValue(result, key, value);\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.sortBy` except that it allows specifying the sort\n * orders of the iteratees to sort by. If `orders` is unspecified, all values\n * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n * descending or \"asc\" for ascending sort order of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @param {string[]} [orders] The sort orders of `iteratees`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 34 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 36 }\n * ];\n *\n * // Sort by `user` in ascending order and by `age` in descending order.\n * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n */\n function orderBy(collection, iteratees, orders, guard) {\n if (collection == null) {\n return [];\n }\n if (!isArray(iteratees)) {\n iteratees = iteratees == null ? [] : [iteratees];\n }\n orders = guard ? undefined : orders;\n if (!isArray(orders)) {\n orders = orders == null ? [] : [orders];\n }\n return baseOrderBy(collection, iteratees, orders);\n }\n\n /**\n * Creates an array of elements split into two groups, the first of which\n * contains elements `predicate` returns truthy for, the second of which\n * contains elements `predicate` returns falsey for. The predicate is\n * invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of grouped elements.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true },\n * { 'user': 'pebbles', 'age': 1, 'active': false }\n * ];\n *\n * _.partition(users, function(o) { return o.active; });\n * // => objects for [['fred'], ['barney', 'pebbles']]\n *\n * // The `_.matches` iteratee shorthand.\n * _.partition(users, { 'age': 1, 'active': false });\n * // => objects for [['pebbles'], ['barney', 'fred']]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.partition(users, ['active', false]);\n * // => objects for [['barney', 'pebbles'], ['fred']]\n *\n * // The `_.property` iteratee shorthand.\n * _.partition(users, 'active');\n * // => objects for [['fred'], ['barney', 'pebbles']]\n */\n var partition = createAggregator(function(result, value, key) {\n result[key ? 0 : 1].push(value);\n }, function() { return [[], []]; });\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * This method is like `_.reduce` except that it iterates over elements of\n * `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduce\n * @example\n *\n * var array = [[0, 1], [2, 3], [4, 5]];\n *\n * _.reduceRight(array, function(flattened, other) {\n * return flattened.concat(other);\n * }, []);\n * // => [4, 5, 2, 3, 0, 1]\n */\n function reduceRight(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduceRight : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(getIteratee(predicate, 3)));\n }\n\n /**\n * Gets a random element from `collection`.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @returns {*} Returns the random element.\n * @example\n *\n * _.sample([1, 2, 3, 4]);\n * // => 2\n */\n function sample(collection) {\n var func = isArray(collection) ? arraySample : baseSample;\n return func(collection);\n }\n\n /**\n * Gets `n` random elements at unique keys from `collection` up to the\n * size of `collection`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Collection\n * @param {Array|Object} collection The collection to sample.\n * @param {number} [n=1] The number of elements to sample.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the random elements.\n * @example\n *\n * _.sampleSize([1, 2, 3], 2);\n * // => [3, 1]\n *\n * _.sampleSize([1, 2, 3], 4);\n * // => [2, 3, 1]\n */\n function sampleSize(collection, n, guard) {\n if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n return func(collection, n);\n }\n\n /**\n * Creates an array of shuffled values, using a version of the\n * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to shuffle.\n * @returns {Array} Returns the new shuffled array.\n * @example\n *\n * _.shuffle([1, 2, 3, 4]);\n * // => [4, 1, 3, 2]\n */\n function shuffle(collection) {\n var func = isArray(collection) ? arrayShuffle : baseShuffle;\n return func(collection);\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, getIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = ctxNow || function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with up to `n` arguments,\n * ignoring any additional arguments.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @param {number} [n=func.length] The arity cap.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n * // => [6, 8, 10]\n */\n function ary(func, n, guard) {\n n = guard ? undefined : n;\n n = (func && n == null) ? func.length : n;\n return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a function that invokes the method at `object[key]` with `partials`\n * prepended to the arguments it receives.\n *\n * This method differs from `_.bind` by allowing bound functions to reference\n * methods that may be redefined or don't yet exist. See\n * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n * for more details.\n *\n * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Function\n * @param {Object} object The object to invoke the method on.\n * @param {string} key The key of the method.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * var object = {\n * 'user': 'fred',\n * 'greet': function(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n * };\n *\n * var bound = _.bindKey(object, 'greet', 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * object.greet = function(greeting, punctuation) {\n * return greeting + 'ya ' + this.user + punctuation;\n * };\n *\n * bound('!');\n * // => 'hiya fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bindKey(object, 'greet', _, '!');\n * bound('hi');\n * // => 'hiya fred!'\n */\n var bindKey = baseRest(function(object, key, partials) {\n var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bindKey));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(key, bitmask, object, partials, holders);\n });\n\n /**\n * Creates a function that accepts arguments of `func` and either invokes\n * `func` returning its result, if at least `arity` number of arguments have\n * been provided, or returns a function that accepts the remaining `func`\n * arguments, and so on. The arity of `func` may be specified if `func.length`\n * is not sufficient.\n *\n * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curry(abc);\n *\n * curried(1)(2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2)(3);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(1)(_, 3)(2);\n * // => [1, 2, 3]\n */\n function curry(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curry.placeholder;\n return result;\n }\n\n /**\n * This method is like `_.curry` except that arguments are applied to `func`\n * in the manner of `_.partialRight` instead of `_.partial`.\n *\n * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for provided arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of curried functions.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to curry.\n * @param {number} [arity=func.length] The arity of `func`.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the new curried function.\n * @example\n *\n * var abc = function(a, b, c) {\n * return [a, b, c];\n * };\n *\n * var curried = _.curryRight(abc);\n *\n * curried(3)(2)(1);\n * // => [1, 2, 3]\n *\n * curried(2, 3)(1);\n * // => [1, 2, 3]\n *\n * curried(1, 2, 3);\n * // => [1, 2, 3]\n *\n * // Curried with placeholders.\n * curried(3)(1, _)(2);\n * // => [1, 2, 3]\n */\n function curryRight(func, arity, guard) {\n arity = guard ? undefined : arity;\n var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n result.placeholder = curryRight.placeholder;\n return result;\n }\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n clearTimeout(timerId);\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that invokes `func` with arguments reversed.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to flip arguments for.\n * @returns {Function} Returns the new flipped function.\n * @example\n *\n * var flipped = _.flip(function() {\n * return _.toArray(arguments);\n * });\n *\n * flipped('a', 'b', 'c', 'd');\n * // => ['d', 'c', 'b', 'a']\n */\n function flip(func) {\n return createWrap(func, WRAP_FLIP_FLAG);\n }\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with its arguments transformed.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Function\n * @param {Function} func The function to wrap.\n * @param {...(Function|Function[])} [transforms=[_.identity]]\n * The argument transforms.\n * @returns {Function} Returns the new function.\n * @example\n *\n * function doubled(n) {\n * return n * 2;\n * }\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var func = _.overArgs(function(x, y) {\n * return [x, y];\n * }, [square, doubled]);\n *\n * func(9, 3);\n * // => [81, 6]\n *\n * func(10, 5);\n * // => [100, 10]\n */\n var overArgs = castRest(function(func, transforms) {\n transforms = (transforms.length == 1 && isArray(transforms[0]))\n ? arrayMap(transforms[0], baseUnary(getIteratee()))\n : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n\n var funcsLength = transforms.length;\n return baseRest(function(args) {\n var index = -1,\n length = nativeMin(args.length, funcsLength);\n\n while (++index < length) {\n args[index] = transforms[index].call(this, args[index]);\n }\n return apply(func, this, args);\n });\n });\n\n /**\n * Creates a function that invokes `func` with `partials` prepended to the\n * arguments it receives. This method is like `_.bind` except it does **not**\n * alter the `this` binding.\n *\n * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 0.2.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var sayHelloTo = _.partial(greet, 'hello');\n * sayHelloTo('fred');\n * // => 'hello fred'\n *\n * // Partially applied with placeholders.\n * var greetFred = _.partial(greet, _, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n */\n var partial = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partial));\n return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n });\n\n /**\n * This method is like `_.partial` except that partially applied arguments\n * are appended to the arguments it receives.\n *\n * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n * builds, may be used as a placeholder for partially applied arguments.\n *\n * **Note:** This method doesn't set the \"length\" property of partially\n * applied functions.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Function\n * @param {Function} func The function to partially apply arguments to.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new partially applied function.\n * @example\n *\n * function greet(greeting, name) {\n * return greeting + ' ' + name;\n * }\n *\n * var greetFred = _.partialRight(greet, 'fred');\n * greetFred('hi');\n * // => 'hi fred'\n *\n * // Partially applied with placeholders.\n * var sayHelloTo = _.partialRight(greet, 'hello', _);\n * sayHelloTo('fred');\n * // => 'hello fred'\n */\n var partialRight = baseRest(function(func, partials) {\n var holders = replaceHolders(partials, getHolder(partialRight));\n return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n });\n\n /**\n * Creates a function that invokes `func` with arguments arranged according\n * to the specified `indexes` where the argument value at the first index is\n * provided as the first argument, the argument value at the second index is\n * provided as the second argument, and so on.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} func The function to rearrange arguments for.\n * @param {...(number|number[])} indexes The arranged argument indexes.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var rearged = _.rearg(function(a, b, c) {\n * return [a, b, c];\n * }, [2, 0, 1]);\n *\n * rearged('b', 'c', 'a')\n * // => ['a', 'b', 'c']\n */\n var rearg = flatRest(function(func, indexes) {\n return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n });\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * create function and an array of arguments much like\n * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n *\n * **Note:** This method is based on the\n * [spread operator](https://mdn.io/spread_operator).\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Function\n * @param {Function} func The function to spread arguments over.\n * @param {number} [start=0] The start position of the spread.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.spread(function(who, what) {\n * return who + ' says ' + what;\n * });\n *\n * say(['fred', 'hello']);\n * // => 'fred says hello'\n *\n * var numbers = Promise.all([\n * Promise.resolve(40),\n * Promise.resolve(36)\n * ]);\n *\n * numbers.then(_.spread(function(x, y) {\n * return x + y;\n * }));\n * // => a Promise of 76\n */\n function spread(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start == null ? 0 : nativeMax(toInteger(start), 0);\n return baseRest(function(args) {\n var array = args[start],\n otherArgs = castSlice(args, 0, start);\n\n if (array) {\n arrayPush(otherArgs, array);\n }\n return apply(func, this, otherArgs);\n });\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /**\n * Creates a function that accepts up to one argument, ignoring any\n * additional arguments.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n * @example\n *\n * _.map(['6', '8', '10'], _.unary(parseInt));\n * // => [6, 8, 10]\n */\n function unary(func) {\n return ary(func, 1);\n }\n\n /**\n * Creates a function that provides `value` to `wrapper` as its first\n * argument. Any additional arguments provided to the function are appended\n * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n * binding of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {*} value The value to wrap.\n * @param {Function} [wrapper=identity] The wrapper function.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var p = _.wrap(_.escape, function(func, text) {\n * return '<p>' + func(text) + '</p>';\n * });\n *\n * p('fred, barney, & pebbles');\n * // => '<p>fred, barney, & pebbles</p>'\n */\n function wrap(value, wrapper) {\n return partial(castFunction(wrapper), value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Casts `value` as an array if it's not one.\n *\n * @static\n * @memberOf _\n * @since 4.4.0\n * @category Lang\n * @param {*} value The value to inspect.\n * @returns {Array} Returns the cast array.\n * @example\n *\n * _.castArray(1);\n * // => [1]\n *\n * _.castArray({ 'a': 1 });\n * // => [{ 'a': 1 }]\n *\n * _.castArray('abc');\n * // => ['abc']\n *\n * _.castArray(null);\n * // => [null]\n *\n * _.castArray(undefined);\n * // => [undefined]\n *\n * _.castArray();\n * // => []\n *\n * var array = [1, 2, 3];\n * console.log(_.castArray(array) === array);\n * // => true\n */\n function castArray() {\n if (!arguments.length) {\n return [];\n }\n var value = arguments[0];\n return isArray(value) ? value : [value];\n }\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it accepts `customizer` which\n * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n * cloning is handled by the method instead. The `customizer` is invoked with\n * up to four arguments; (value [, index|key, object, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeepWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(false);\n * }\n * }\n *\n * var el = _.cloneWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 0\n */\n function cloneWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.cloneWith` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @param {Function} [customizer] The function to customize cloning.\n * @returns {*} Returns the deep cloned value.\n * @see _.cloneWith\n * @example\n *\n * function customizer(value) {\n * if (_.isElement(value)) {\n * return value.cloneNode(true);\n * }\n * }\n *\n * var el = _.cloneDeepWith(document.body, customizer);\n *\n * console.log(el === document.body);\n * // => false\n * console.log(el.nodeName);\n * // => 'BODY'\n * console.log(el.childNodes.length);\n * // => 20\n */\n function cloneDeepWith(value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n }\n\n /**\n * Checks if `object` conforms to `source` by invoking the predicate\n * properties of `source` with the corresponding property values of `object`.\n *\n * **Note:** This method is equivalent to `_.conforms` when `source` is\n * partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property predicates to conform to.\n * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n * // => true\n *\n * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n * // => false\n */\n function conformsTo(object, source) {\n return source == null || baseConformsTo(object, source, keys(source));\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is greater than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n * @see _.lt\n * @example\n *\n * _.gt(3, 1);\n * // => true\n *\n * _.gt(3, 3);\n * // => false\n *\n * _.gt(1, 3);\n * // => false\n */\n var gt = createRelationalOperation(baseGt);\n\n /**\n * Checks if `value` is greater than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than or equal to\n * `other`, else `false`.\n * @see _.lte\n * @example\n *\n * _.gte(3, 1);\n * // => true\n *\n * _.gte(3, 3);\n * // => true\n *\n * _.gte(1, 3);\n * // => false\n */\n var gte = createRelationalOperation(function(value, other) {\n return value >= other;\n });\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is classified as an `ArrayBuffer` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n * @example\n *\n * _.isArrayBuffer(new ArrayBuffer(2));\n * // => true\n *\n * _.isArrayBuffer(new Array(2));\n * // => false\n */\n var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is likely a DOM element.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n * @example\n *\n * _.isElement(document.body);\n * // => true\n *\n * _.isElement('<body>');\n * // => false\n */\n function isElement(value) {\n return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n }\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * This method is like `_.isEqual` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with up to\n * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, othValue) {\n * if (isGreeting(objValue) && isGreeting(othValue)) {\n * return true;\n * }\n * }\n *\n * var array = ['hello', 'goodbye'];\n * var other = ['hi', 'goodbye'];\n *\n * _.isEqualWith(array, other, customizer);\n * // => true\n */\n function isEqualWith(value, other, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n var result = customizer ? customizer(value, other) : undefined;\n return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n }\n\n /**\n * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n * `SyntaxError`, `TypeError`, or `URIError` object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n * @example\n *\n * _.isError(new Error);\n * // => true\n *\n * _.isError(Error);\n * // => false\n */\n function isError(value) {\n if (!isObjectLike(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == errorTag || tag == domExcTag ||\n (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is an integer.\n *\n * **Note:** This method is based on\n * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n * @example\n *\n * _.isInteger(3);\n * // => true\n *\n * _.isInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isInteger(Infinity);\n * // => false\n *\n * _.isInteger('3');\n * // => false\n */\n function isInteger(value) {\n return typeof value == 'number' && value == toInteger(value);\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Performs a partial deep comparison between `object` and `source` to\n * determine if `object` contains equivalent property values.\n *\n * **Note:** This method is equivalent to `_.matches` when `source` is\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n *\n * _.isMatch(object, { 'b': 2 });\n * // => true\n *\n * _.isMatch(object, { 'b': 1 });\n * // => false\n */\n function isMatch(object, source) {\n return object === source || baseIsMatch(object, source, getMatchData(source));\n }\n\n /**\n * This method is like `_.isMatch` except that it accepts `customizer` which\n * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n * are handled by the method instead. The `customizer` is invoked with five\n * arguments: (objValue, srcValue, index|key, object, source).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n * @example\n *\n * function isGreeting(value) {\n * return /^h(?:i|ello)$/.test(value);\n * }\n *\n * function customizer(objValue, srcValue) {\n * if (isGreeting(objValue) && isGreeting(srcValue)) {\n * return true;\n * }\n * }\n *\n * var object = { 'greeting': 'hello' };\n * var source = { 'greeting': 'hi' };\n *\n * _.isMatchWith(object, source, customizer);\n * // => true\n */\n function isMatchWith(object, source, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return baseIsMatch(object, source, getMatchData(source), customizer);\n }\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is a pristine native function.\n *\n * **Note:** This method can't reliably detect native functions in the presence\n * of the core-js package because core-js circumvents this kind of detection.\n * Despite multiple requests, the core-js maintainer has made it clear: any\n * attempt to fix the detection will be obstructed. As a result, we're left\n * with little choice but to throw an error. Unfortunately, this also affects\n * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n * which rely on core-js.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n * @example\n *\n * _.isNative(Array.prototype.push);\n * // => true\n *\n * _.isNative(_);\n * // => false\n */\n function isNative(value) {\n if (isMaskable(value)) {\n throw new Error(CORE_ERROR_TEXT);\n }\n return baseIsNative(value);\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is `null` or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n * @example\n *\n * _.isNil(null);\n * // => true\n *\n * _.isNil(void 0);\n * // => true\n *\n * _.isNil(NaN);\n * // => false\n */\n function isNil(value) {\n return value == null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n * double precision number which isn't the result of a rounded unsafe integer.\n *\n * **Note:** This method is based on\n * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n * @example\n *\n * _.isSafeInteger(3);\n * // => true\n *\n * _.isSafeInteger(Number.MIN_VALUE);\n * // => false\n *\n * _.isSafeInteger(Infinity);\n * // => false\n *\n * _.isSafeInteger('3');\n * // => false\n */\n function isSafeInteger(value) {\n return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Checks if `value` is classified as a `WeakMap` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n * @example\n *\n * _.isWeakMap(new WeakMap);\n * // => true\n *\n * _.isWeakMap(new Map);\n * // => false\n */\n function isWeakMap(value) {\n return isObjectLike(value) && getTag(value) == weakMapTag;\n }\n\n /**\n * Checks if `value` is classified as a `WeakSet` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n * @example\n *\n * _.isWeakSet(new WeakSet);\n * // => true\n *\n * _.isWeakSet(new Set);\n * // => false\n */\n function isWeakSet(value) {\n return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n }\n\n /**\n * Checks if `value` is less than `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n * @see _.gt\n * @example\n *\n * _.lt(1, 3);\n * // => true\n *\n * _.lt(3, 3);\n * // => false\n *\n * _.lt(3, 1);\n * // => false\n */\n var lt = createRelationalOperation(baseLt);\n\n /**\n * Checks if `value` is less than or equal to `other`.\n *\n * @static\n * @memberOf _\n * @since 3.9.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than or equal to\n * `other`, else `false`.\n * @see _.gte\n * @example\n *\n * _.lte(1, 3);\n * // => true\n *\n * _.lte(3, 3);\n * // => true\n *\n * _.lte(3, 1);\n * // => false\n */\n var lte = createRelationalOperation(function(value, other) {\n return value <= other;\n });\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to an integer suitable for use as the length of an\n * array-like object.\n *\n * **Note:** This method is based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toLength(3.2);\n * // => 3\n *\n * _.toLength(Number.MIN_VALUE);\n * // => 0\n *\n * _.toLength(Infinity);\n * // => 4294967295\n *\n * _.toLength('3.2');\n * // => 3\n */\n function toLength(value) {\n return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a safe integer. A safe integer can be compared and\n * represented correctly.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toSafeInteger(3.2);\n * // => 3\n *\n * _.toSafeInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toSafeInteger(Infinity);\n * // => 9007199254740991\n *\n * _.toSafeInteger('3.2');\n * // => 3\n */\n function toSafeInteger(value) {\n return value\n ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Assigns own enumerable string keyed properties of source objects to the\n * destination object. Source objects are applied from left to right.\n * Subsequent sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object` and is loosely based on\n * [`Object.assign`](https://mdn.io/Object/assign).\n *\n * @static\n * @memberOf _\n * @since 0.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assignIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assign({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'c': 3 }\n */\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * This method is like `_.assignIn` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extendWith\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignInWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keysIn(source), object, customizer);\n });\n\n /**\n * This method is like `_.assign` except that it accepts `customizer`\n * which is invoked to produce the assigned values. If `customizer` returns\n * `undefined`, assignment is handled by the method instead. The `customizer`\n * is invoked with five arguments: (objValue, srcValue, key, object, source).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @see _.assignInWith\n * @example\n *\n * function customizer(objValue, srcValue) {\n * return _.isUndefined(objValue) ? srcValue : objValue;\n * }\n *\n * var defaults = _.partialRight(_.assignWith, customizer);\n *\n * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var assignWith = createAssigner(function(object, source, srcIndex, customizer) {\n copyObject(source, keys(source), object, customizer);\n });\n\n /**\n * Creates an array of values corresponding to `paths` of `object`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Array} Returns the picked values.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _.at(object, ['a[0].b.c', 'a[1]']);\n * // => [3, 4]\n */\n var at = flatRest(baseAt);\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Iterates over own and inherited enumerable string keyed properties of an\n * object and invokes `iteratee` for each property. The iteratee is invoked\n * with three arguments: (value, key, object). Iteratee functions may exit\n * iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forInRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forIn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n */\n function forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * This method is like `_.forIn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forIn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forInRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n */\n function forInRight(object, iteratee) {\n return object == null\n ? object\n : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n }\n\n /**\n * Iterates over own enumerable string keyed properties of an object and\n * invokes `iteratee` for each property. The iteratee is invoked with three\n * arguments: (value, key, object). Iteratee functions may exit iteration\n * early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 0.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwnRight\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwn(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forOwn(object, iteratee) {\n return object && baseForOwn(object, getIteratee(iteratee, 3));\n }\n\n /**\n * This method is like `_.forOwn` except that it iterates over properties of\n * `object` in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns `object`.\n * @see _.forOwn\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.forOwnRight(new Foo, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n */\n function forOwnRight(object, iteratee) {\n return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n }\n\n /**\n * Creates an array of function property names from own enumerable properties\n * of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functionsIn\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functions(new Foo);\n * // => ['a', 'b']\n */\n function functions(object) {\n return object == null ? [] : baseFunctions(object, keys(object));\n }\n\n /**\n * Creates an array of function property names from own and inherited\n * enumerable properties of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @returns {Array} Returns the function names.\n * @see _.functions\n * @example\n *\n * function Foo() {\n * this.a = _.constant('a');\n * this.b = _.constant('b');\n * }\n *\n * Foo.prototype.c = _.constant('c');\n *\n * _.functionsIn(new Foo);\n * // => ['a', 'b', 'c']\n */\n function functionsIn(object) {\n return object == null ? [] : baseFunctions(object, keysIn(object));\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, getIteratee);\n\n /**\n * Invokes the method at `path` of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n *\n * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n * // => [2, 3]\n */\n var invoke = baseRest(baseInvoke);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * The opposite of `_.mapValues`; this method creates an object with the\n * same values as `object` and keys generated by running each own enumerable\n * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n * with three arguments: (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 3.8.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapValues\n * @example\n *\n * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n * return key + value;\n * });\n * // => { 'a1': 1, 'b2': 2 }\n */\n function mapKeys(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, iteratee(value, key, object), value);\n });\n return result;\n }\n\n /**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\n function mapValues(object, iteratee) {\n var result = {};\n iteratee = getIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(getIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = getIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * This method is like `_.set` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.setWith(object, '[0][1]', 'a', Object);\n * // => { '0': { '1': 'a' } }\n */\n function setWith(object, path, value, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseSet(object, path, value, customizer);\n }\n\n /**\n * Creates an array of own enumerable string keyed-value pairs for `object`\n * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n * entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entries\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairs(new Foo);\n * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n */\n var toPairs = createToPairs(keys);\n\n /**\n * Creates an array of own and inherited enumerable string keyed-value pairs\n * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n * or set, its entries are returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias entriesIn\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the key-value pairs.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.toPairsIn(new Foo);\n * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n */\n var toPairsIn = createToPairs(keysIn);\n\n /**\n * An alternative to `_.reduce`; this method transforms `object` to a new\n * `accumulator` object which is the result of running each of its own\n * enumerable string keyed properties thru `iteratee`, with each invocation\n * potentially mutating the `accumulator` object. If `accumulator` is not\n * provided, a new object with the same `[[Prototype]]` will be used. The\n * iteratee is invoked with four arguments: (accumulator, value, key, object).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The custom accumulator value.\n * @returns {*} Returns the accumulated value.\n * @example\n *\n * _.transform([2, 3, 4], function(result, n) {\n * result.push(n *= n);\n * return n % 2 == 0;\n * }, []);\n * // => [4, 9]\n *\n * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] }\n */\n function transform(object, iteratee, accumulator) {\n var isArr = isArray(object),\n isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n\n iteratee = getIteratee(iteratee, 4);\n if (accumulator == null) {\n var Ctor = object && object.constructor;\n if (isArrLike) {\n accumulator = isArr ? new Ctor : [];\n }\n else if (isObject(object)) {\n accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n }\n else {\n accumulator = {};\n }\n }\n (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {\n return iteratee(accumulator, value, index, object);\n });\n return accumulator;\n }\n\n /**\n * Removes the property at `path` of `object`.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n * _.unset(object, 'a[0].b.c');\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n *\n * _.unset(object, ['a', '0', 'b', 'c']);\n * // => true\n *\n * console.log(object);\n * // => { 'a': [{ 'b': {} }] };\n */\n function unset(object, path) {\n return object == null ? true : baseUnset(object, path);\n }\n\n /**\n * This method is like `_.set` except that accepts `updater` to produce the\n * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n * is invoked with one argument: (value).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n * console.log(object.a[0].b.c);\n * // => 9\n *\n * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n * console.log(object.x[0].y.z);\n * // => 0\n */\n function update(object, path, updater) {\n return object == null ? object : baseUpdate(object, path, castFunction(updater));\n }\n\n /**\n * This method is like `_.update` except that it accepts `customizer` which is\n * invoked to produce the objects of `path`. If `customizer` returns `undefined`\n * path creation is handled by the method instead. The `customizer` is invoked\n * with three arguments: (nsValue, key, nsObject).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.6.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {Function} updater The function to produce the updated value.\n * @param {Function} [customizer] The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {};\n *\n * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n * // => { '0': { '1': 'a' } }\n */\n function updateWith(object, path, updater, customizer) {\n customizer = typeof customizer == 'function' ? customizer : undefined;\n return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /**\n * Creates an array of the own and inherited enumerable string keyed property\n * values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.valuesIn(new Foo);\n * // => [1, 2, 3] (iteration order is not guaranteed)\n */\n function valuesIn(object) {\n return object == null ? [] : baseValues(object, keysIn(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Checks if `n` is between `start` and up to, but not including, `end`. If\n * `end` is not specified, it's set to `start` with `start` then set to `0`.\n * If `start` is greater than `end` the params are swapped to support\n * negative ranges.\n *\n * @static\n * @memberOf _\n * @since 3.3.0\n * @category Number\n * @param {number} number The number to check.\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n * @see _.range, _.rangeRight\n * @example\n *\n * _.inRange(3, 2, 4);\n * // => true\n *\n * _.inRange(4, 8);\n * // => true\n *\n * _.inRange(4, 2);\n * // => false\n *\n * _.inRange(2, 2);\n * // => false\n *\n * _.inRange(1.2, 2);\n * // => true\n *\n * _.inRange(5.2, 4);\n * // => false\n *\n * _.inRange(-3, -2, -6);\n * // => true\n */\n function inRange(number, start, end) {\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n number = toNumber(number);\n return baseInRange(number, start, end);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the camel cased string.\n * @example\n *\n * _.camelCase('Foo Bar');\n * // => 'fooBar'\n *\n * _.camelCase('--foo-bar--');\n * // => 'fooBar'\n *\n * _.camelCase('__FOO_BAR__');\n * // => 'fooBar'\n */\n var camelCase = createCompounder(function(result, word, index) {\n word = word.toLowerCase();\n return result + (index ? capitalize(word) : word);\n });\n\n /**\n * Converts the first character of `string` to upper case and the remaining\n * to lower case.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to capitalize.\n * @returns {string} Returns the capitalized string.\n * @example\n *\n * _.capitalize('FRED');\n * // => 'Fred'\n */\n function capitalize(string) {\n return upperFirst(toString(string).toLowerCase());\n }\n\n /**\n * Deburrs `string` by converting\n * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n * letters to basic Latin letters and removing\n * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to deburr.\n * @returns {string} Returns the deburred string.\n * @example\n *\n * _.deburr('déjà vu');\n * // => 'deja vu'\n */\n function deburr(string) {\n string = toString(string);\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n }\n\n /**\n * Checks if `string` ends with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=string.length] The position to search up to.\n * @returns {boolean} Returns `true` if `string` ends with `target`,\n * else `false`.\n * @example\n *\n * _.endsWith('abc', 'c');\n * // => true\n *\n * _.endsWith('abc', 'b');\n * // => false\n *\n * _.endsWith('abc', 'b', 2);\n * // => true\n */\n function endsWith(string, target, position) {\n string = toString(string);\n target = baseToString(target);\n\n var length = string.length;\n position = position === undefined\n ? length\n : baseClamp(toInteger(position), 0, length);\n\n var end = position;\n position -= target.length;\n return position >= 0 && string.slice(position, end) == target;\n }\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escapeRegExp('[lodash](https://lodash.com/)');\n * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n */\n function escapeRegExp(string) {\n string = toString(string);\n return (string && reHasRegExpChar.test(string))\n ? string.replace(reRegExpChar, '\\\\$&')\n : string;\n }\n\n /**\n * Converts `string` to\n * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the kebab cased string.\n * @example\n *\n * _.kebabCase('Foo Bar');\n * // => 'foo-bar'\n *\n * _.kebabCase('fooBar');\n * // => 'foo-bar'\n *\n * _.kebabCase('__FOO_BAR__');\n * // => 'foo-bar'\n */\n var kebabCase = createCompounder(function(result, word, index) {\n return result + (index ? '-' : '') + word.toLowerCase();\n });\n\n /**\n * Converts `string`, as space separated words, to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.lowerCase('--Foo-Bar--');\n * // => 'foo bar'\n *\n * _.lowerCase('fooBar');\n * // => 'foo bar'\n *\n * _.lowerCase('__FOO_BAR__');\n * // => 'foo bar'\n */\n var lowerCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toLowerCase();\n });\n\n /**\n * Converts the first character of `string` to lower case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.lowerFirst('Fred');\n * // => 'fred'\n *\n * _.lowerFirst('FRED');\n * // => 'fRED'\n */\n var lowerFirst = createCaseFirst('toLowerCase');\n\n /**\n * Pads `string` on the left and right sides if it's shorter than `length`.\n * Padding characters are truncated if they can't be evenly divided by `length`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.pad('abc', 8);\n * // => ' abc '\n *\n * _.pad('abc', 8, '_-');\n * // => '_-abc_-_'\n *\n * _.pad('abc', 3);\n * // => 'abc'\n */\n function pad(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n if (!length || strLength >= length) {\n return string;\n }\n var mid = (length - strLength) / 2;\n return (\n createPadding(nativeFloor(mid), chars) +\n string +\n createPadding(nativeCeil(mid), chars)\n );\n }\n\n /**\n * Pads `string` on the right side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padEnd('abc', 6);\n * // => 'abc '\n *\n * _.padEnd('abc', 6, '_-');\n * // => 'abc_-_'\n *\n * _.padEnd('abc', 3);\n * // => 'abc'\n */\n function padEnd(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (string + createPadding(length - strLength, chars))\n : string;\n }\n\n /**\n * Pads `string` on the left side if it's shorter than `length`. Padding\n * characters are truncated if they exceed `length`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to pad.\n * @param {number} [length=0] The padding length.\n * @param {string} [chars=' '] The string used as padding.\n * @returns {string} Returns the padded string.\n * @example\n *\n * _.padStart('abc', 6);\n * // => ' abc'\n *\n * _.padStart('abc', 6, '_-');\n * // => '_-_abc'\n *\n * _.padStart('abc', 3);\n * // => 'abc'\n */\n function padStart(string, length, chars) {\n string = toString(string);\n length = toInteger(length);\n\n var strLength = length ? stringSize(string) : 0;\n return (length && strLength < length)\n ? (createPadding(length - strLength, chars) + string)\n : string;\n }\n\n /**\n * Converts `string` to an integer of the specified radix. If `radix` is\n * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n * hexadecimal, in which case a `radix` of `16` is used.\n *\n * **Note:** This method aligns with the\n * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category String\n * @param {string} string The string to convert.\n * @param {number} [radix=10] The radix to interpret `value` by.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.parseInt('08');\n * // => 8\n *\n * _.map(['6', '08', '10'], _.parseInt);\n * // => [6, 8, 10]\n */\n function parseInt(string, radix, guard) {\n if (guard || radix == null) {\n radix = 0;\n } else if (radix) {\n radix = +radix;\n }\n return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n }\n\n /**\n * Repeats the given string `n` times.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to repeat.\n * @param {number} [n=1] The number of times to repeat the string.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the repeated string.\n * @example\n *\n * _.repeat('*', 3);\n * // => '***'\n *\n * _.repeat('abc', 2);\n * // => 'abcabc'\n *\n * _.repeat('abc', 0);\n * // => ''\n */\n function repeat(string, n, guard) {\n if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {\n n = 1;\n } else {\n n = toInteger(n);\n }\n return baseRepeat(toString(string), n);\n }\n\n /**\n * Replaces matches for `pattern` in `string` with `replacement`.\n *\n * **Note:** This method is based on\n * [`String#replace`](https://mdn.io/String/replace).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to modify.\n * @param {RegExp|string} pattern The pattern to replace.\n * @param {Function|string} replacement The match replacement.\n * @returns {string} Returns the modified string.\n * @example\n *\n * _.replace('Hi Fred', 'Fred', 'Barney');\n * // => 'Hi Barney'\n */\n function replace() {\n var args = arguments,\n string = toString(args[0]);\n\n return args.length < 3 ? string : string.replace(args[1], args[2]);\n }\n\n /**\n * Converts `string` to\n * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the snake cased string.\n * @example\n *\n * _.snakeCase('Foo Bar');\n * // => 'foo_bar'\n *\n * _.snakeCase('fooBar');\n * // => 'foo_bar'\n *\n * _.snakeCase('--FOO-BAR--');\n * // => 'foo_bar'\n */\n var snakeCase = createCompounder(function(result, word, index) {\n return result + (index ? '_' : '') + word.toLowerCase();\n });\n\n /**\n * Splits `string` by `separator`.\n *\n * **Note:** This method is based on\n * [`String#split`](https://mdn.io/String/split).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to split.\n * @param {RegExp|string} separator The separator pattern to split by.\n * @param {number} [limit] The length to truncate results to.\n * @returns {Array} Returns the string segments.\n * @example\n *\n * _.split('a-b-c', '-', 2);\n * // => ['a', 'b']\n */\n function split(string, separator, limit) {\n if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n separator = limit = undefined;\n }\n limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n if (!limit) {\n return [];\n }\n string = toString(string);\n if (string && (\n typeof separator == 'string' ||\n (separator != null && !isRegExp(separator))\n )) {\n separator = baseToString(separator);\n if (!separator && hasUnicode(string)) {\n return castSlice(stringToArray(string), 0, limit);\n }\n }\n return string.split(separator, limit);\n }\n\n /**\n * Converts `string` to\n * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n *\n * @static\n * @memberOf _\n * @since 3.1.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the start cased string.\n * @example\n *\n * _.startCase('--foo-bar--');\n * // => 'Foo Bar'\n *\n * _.startCase('fooBar');\n * // => 'Foo Bar'\n *\n * _.startCase('__FOO_BAR__');\n * // => 'FOO BAR'\n */\n var startCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + upperFirst(word);\n });\n\n /**\n * Checks if `string` starts with the given target string.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {string} [target] The string to search for.\n * @param {number} [position=0] The position to search from.\n * @returns {boolean} Returns `true` if `string` starts with `target`,\n * else `false`.\n * @example\n *\n * _.startsWith('abc', 'a');\n * // => true\n *\n * _.startsWith('abc', 'b');\n * // => false\n *\n * _.startsWith('abc', 'b', 1);\n * // => true\n */\n function startsWith(string, target, position) {\n string = toString(string);\n position = position == null\n ? 0\n : baseClamp(toInteger(position), 0, string.length);\n\n target = baseToString(target);\n return string.slice(position, position + target.length) == target;\n }\n\n /**\n * Creates a compiled template function that can interpolate data properties\n * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n * properties may be accessed as free variables in the template. If a setting\n * object is given, it takes precedence over `_.templateSettings` values.\n *\n * **Note:** In the development build `_.template` utilizes\n * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n * for easier debugging.\n *\n * For more information on precompiling templates see\n * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n *\n * For more information on Chrome extension sandboxes see\n * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The template string.\n * @param {Object} [options={}] The options object.\n * @param {RegExp} [options.escape=_.templateSettings.escape]\n * The HTML \"escape\" delimiter.\n * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n * The \"evaluate\" delimiter.\n * @param {Object} [options.imports=_.templateSettings.imports]\n * An object to import into the template as free variables.\n * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n * The \"interpolate\" delimiter.\n * @param {string} [options.sourceURL='lodash.templateSources[n]']\n * The sourceURL of the compiled template.\n * @param {string} [options.variable='obj']\n * The data object variable name.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Function} Returns the compiled template function.\n * @example\n *\n * // Use the \"interpolate\" delimiter to create a compiled template.\n * var compiled = _.template('hello <%= user %>!');\n * compiled({ 'user': 'fred' });\n * // => 'hello fred!'\n *\n * // Use the HTML \"escape\" delimiter to escape data property values.\n * var compiled = _.template('<b><%- value %></b>');\n * compiled({ 'value': '<script>' });\n * // => '<b><script></b>'\n *\n * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the internal `print` function in \"evaluate\" delimiters.\n * var compiled = _.template('<% print(\"hello \" + user); %>!');\n * compiled({ 'user': 'barney' });\n * // => 'hello barney!'\n *\n * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n * // Disable support by replacing the \"interpolate\" delimiter.\n * var compiled = _.template('hello ${ user }!');\n * compiled({ 'user': 'pebbles' });\n * // => 'hello pebbles!'\n *\n * // Use backslashes to treat delimiters as plain text.\n * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n * compiled({ 'value': 'ignored' });\n * // => '<%- value %>'\n *\n * // Use the `imports` option to import `jQuery` as `jq`.\n * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n * compiled({ 'users': ['fred', 'barney'] });\n * // => '<li>fred</li><li>barney</li>'\n *\n * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n * compiled(data);\n * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n *\n * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n * compiled.source;\n * // => function(data) {\n * // var __t, __p = '';\n * // __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n * // return __p;\n * // }\n *\n * // Use custom template delimiters.\n * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n * var compiled = _.template('hello {{ user }}!');\n * compiled({ 'user': 'mustache' });\n * // => 'hello mustache!'\n *\n * // Use the `source` property to inline compiled templates for meaningful\n * // line numbers in error messages and stack traces.\n * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n * var JST = {\\\n * \"main\": ' + _.template(mainText).source + '\\\n * };\\\n * ');\n */\n function template(string, options, guard) {\n // Based on John Resig's `tmpl` implementation\n // (http://ejohn.org/blog/javascript-micro-templating/)\n // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n var settings = lodash.templateSettings;\n\n if (guard && isIterateeCall(string, options, guard)) {\n options = undefined;\n }\n string = toString(string);\n options = assignInWith({}, options, settings, customDefaultsAssignIn);\n\n var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n importsKeys = keys(imports),\n importsValues = baseValues(imports, importsKeys);\n\n var isEscaping,\n isEvaluating,\n index = 0,\n interpolate = options.interpolate || reNoMatch,\n source = \"__p += '\";\n\n // Compile the regexp to match each delimiter.\n var reDelimiters = RegExp(\n (options.escape || reNoMatch).source + '|' +\n interpolate.source + '|' +\n (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +\n (options.evaluate || reNoMatch).source + '|$'\n , 'g');\n\n // Use a sourceURL for easier debugging.\n // The sourceURL gets injected into the source that's eval-ed, so be careful\n // with lookup (in case of e.g. prototype pollution), and strip newlines if any.\n // A newline wouldn't be a valid sourceURL anyway, and it'd enable code injection.\n var sourceURL = '//# sourceURL=' +\n (hasOwnProperty.call(options, 'sourceURL')\n ? (options.sourceURL + '').replace(/[\\r\\n]/g, ' ')\n : ('lodash.templateSources[' + (++templateCounter) + ']')\n ) + '\\n';\n\n string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n interpolateValue || (interpolateValue = esTemplateValue);\n\n // Escape characters that can't be included in string literals.\n source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);\n\n // Replace delimiters with snippets.\n if (escapeValue) {\n isEscaping = true;\n source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n }\n if (evaluateValue) {\n isEvaluating = true;\n source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n }\n if (interpolateValue) {\n source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n }\n index = offset + match.length;\n\n // The JS engine embedded in Adobe products needs `match` returned in\n // order to produce the correct `offset` value.\n return match;\n });\n\n source += \"';\\n\";\n\n // If `variable` is not specified wrap a with-statement around the generated\n // code to add the data object to the top of the scope chain.\n // Like with sourceURL, we take care to not check the option's prototype,\n // as this configuration is a code injection vector.\n var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n if (!variable) {\n source = 'with (obj) {\\n' + source + '\\n}\\n';\n }\n // Cleanup code by stripping empty strings.\n source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)\n .replace(reEmptyStringMiddle, '$1')\n .replace(reEmptyStringTrailing, '$1;');\n\n // Frame code as the function body.\n source = 'function(' + (variable || 'obj') + ') {\\n' +\n (variable\n ? ''\n : 'obj || (obj = {});\\n'\n ) +\n \"var __t, __p = ''\" +\n (isEscaping\n ? ', __e = _.escape'\n : ''\n ) +\n (isEvaluating\n ? ', __j = Array.prototype.join;\\n' +\n \"function print() { __p += __j.call(arguments, '') }\\n\"\n : ';\\n'\n ) +\n source +\n 'return __p\\n}';\n\n var result = attempt(function() {\n return Function(importsKeys, sourceURL + 'return ' + source)\n .apply(undefined, importsValues);\n });\n\n // Provide the compiled function's source by its `toString` method or\n // the `source` property as a convenience for inlining compiled templates.\n result.source = source;\n if (isError(result)) {\n throw result;\n }\n return result;\n }\n\n /**\n * Converts `string`, as a whole, to lower case just like\n * [String#toLowerCase](https://mdn.io/toLowerCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the lower cased string.\n * @example\n *\n * _.toLower('--Foo-Bar--');\n * // => '--foo-bar--'\n *\n * _.toLower('fooBar');\n * // => 'foobar'\n *\n * _.toLower('__FOO_BAR__');\n * // => '__foo_bar__'\n */\n function toLower(value) {\n return toString(value).toLowerCase();\n }\n\n /**\n * Converts `string`, as a whole, to upper case just like\n * [String#toUpperCase](https://mdn.io/toUpperCase).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.toUpper('--foo-bar--');\n * // => '--FOO-BAR--'\n *\n * _.toUpper('fooBar');\n * // => 'FOOBAR'\n *\n * _.toUpper('__foo_bar__');\n * // => '__FOO_BAR__'\n */\n function toUpper(value) {\n return toString(value).toUpperCase();\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /**\n * Removes trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimEnd(' abc ');\n * // => ' abc'\n *\n * _.trimEnd('-_-abc-_-', '_-');\n * // => '-_-abc'\n */\n function trimEnd(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimEnd, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n\n return castSlice(strSymbols, 0, end).join('');\n }\n\n /**\n * Removes leading whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trimStart(' abc ');\n * // => 'abc '\n *\n * _.trimStart('-_-abc-_-', '_-');\n * // => 'abc-_-'\n */\n function trimStart(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrimStart, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n start = charsStartIndex(strSymbols, stringToArray(chars));\n\n return castSlice(strSymbols, start).join('');\n }\n\n /**\n * Truncates `string` if it's longer than the given maximum string length.\n * The last characters of the truncated string are replaced with the omission\n * string which defaults to \"...\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to truncate.\n * @param {Object} [options={}] The options object.\n * @param {number} [options.length=30] The maximum string length.\n * @param {string} [options.omission='...'] The string to indicate text is omitted.\n * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n * @returns {string} Returns the truncated string.\n * @example\n *\n * _.truncate('hi-diddly-ho there, neighborino');\n * // => 'hi-diddly-ho there, neighbo...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': ' '\n * });\n * // => 'hi-diddly-ho there,...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'length': 24,\n * 'separator': /,? +/\n * });\n * // => 'hi-diddly-ho there...'\n *\n * _.truncate('hi-diddly-ho there, neighborino', {\n * 'omission': ' [...]'\n * });\n * // => 'hi-diddly-ho there, neig [...]'\n */\n function truncate(string, options) {\n var length = DEFAULT_TRUNC_LENGTH,\n omission = DEFAULT_TRUNC_OMISSION;\n\n if (isObject(options)) {\n var separator = 'separator' in options ? options.separator : separator;\n length = 'length' in options ? toInteger(options.length) : length;\n omission = 'omission' in options ? baseToString(options.omission) : omission;\n }\n string = toString(string);\n\n var strLength = string.length;\n if (hasUnicode(string)) {\n var strSymbols = stringToArray(string);\n strLength = strSymbols.length;\n }\n if (length >= strLength) {\n return string;\n }\n var end = length - stringSize(omission);\n if (end < 1) {\n return omission;\n }\n var result = strSymbols\n ? castSlice(strSymbols, 0, end).join('')\n : string.slice(0, end);\n\n if (separator === undefined) {\n return result + omission;\n }\n if (strSymbols) {\n end += (result.length - end);\n }\n if (isRegExp(separator)) {\n if (string.slice(end).search(separator)) {\n var match,\n substring = result;\n\n if (!separator.global) {\n separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n }\n separator.lastIndex = 0;\n while ((match = separator.exec(substring))) {\n var newEnd = match.index;\n }\n result = result.slice(0, newEnd === undefined ? end : newEnd);\n }\n } else if (string.indexOf(baseToString(separator), end) != end) {\n var index = result.lastIndexOf(separator);\n if (index > -1) {\n result = result.slice(0, index);\n }\n }\n return result + omission;\n }\n\n /**\n * The inverse of `_.escape`; this method converts the HTML entities\n * `&`, `<`, `>`, `"`, and `'` in `string` to\n * their corresponding characters.\n *\n * **Note:** No other HTML entities are unescaped. To unescape additional\n * HTML entities use a third-party library like [_he_](https://mths.be/he).\n *\n * @static\n * @memberOf _\n * @since 0.6.0\n * @category String\n * @param {string} [string=''] The string to unescape.\n * @returns {string} Returns the unescaped string.\n * @example\n *\n * _.unescape('fred, barney, & pebbles');\n * // => 'fred, barney, & pebbles'\n */\n function unescape(string) {\n string = toString(string);\n return (string && reHasEscapedHtml.test(string))\n ? string.replace(reEscapedHtml, unescapeHtmlChar)\n : string;\n }\n\n /**\n * Converts `string`, as space separated words, to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the upper cased string.\n * @example\n *\n * _.upperCase('--foo-bar');\n * // => 'FOO BAR'\n *\n * _.upperCase('fooBar');\n * // => 'FOO BAR'\n *\n * _.upperCase('__foo_bar__');\n * // => 'FOO BAR'\n */\n var upperCase = createCompounder(function(result, word, index) {\n return result + (index ? ' ' : '') + word.toUpperCase();\n });\n\n /**\n * Converts the first character of `string` to upper case.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category String\n * @param {string} [string=''] The string to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.upperFirst('fred');\n * // => 'Fred'\n *\n * _.upperFirst('FRED');\n * // => 'FRED'\n */\n var upperFirst = createCaseFirst('toUpperCase');\n\n /**\n * Splits `string` into an array of its words.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to inspect.\n * @param {RegExp|string} [pattern] The pattern to match words.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the words of `string`.\n * @example\n *\n * _.words('fred, barney, & pebbles');\n * // => ['fred', 'barney', 'pebbles']\n *\n * _.words('fred, barney, & pebbles', /[^, ]+/g);\n * // => ['fred', 'barney', '&', 'pebbles']\n */\n function words(string, pattern, guard) {\n string = toString(string);\n pattern = guard ? undefined : pattern;\n\n if (pattern === undefined) {\n return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n }\n return string.match(pattern) || [];\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Attempts to invoke `func`, returning either the result or the caught error\n * object. Any additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Function} func The function to attempt.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {*} Returns the `func` result or error object.\n * @example\n *\n * // Avoid throwing errors for invalid selectors.\n * var elements = _.attempt(function(selector) {\n * return document.querySelectorAll(selector);\n * }, '>_>');\n *\n * if (_.isError(elements)) {\n * elements = [];\n * }\n */\n var attempt = baseRest(function(func, args) {\n try {\n return apply(func, undefined, args);\n } catch (e) {\n return isError(e) ? e : new Error(e);\n }\n });\n\n /**\n * Binds methods of an object to the object itself, overwriting the existing\n * method.\n *\n * **Note:** This method doesn't set the \"length\" property of bound functions.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Object} object The object to bind and assign the bound methods to.\n * @param {...(string|string[])} methodNames The object method names to bind.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var view = {\n * 'label': 'docs',\n * 'click': function() {\n * console.log('clicked ' + this.label);\n * }\n * };\n *\n * _.bindAll(view, ['click']);\n * jQuery(element).on('click', view.click);\n * // => Logs 'clicked docs' when clicked.\n */\n var bindAll = flatRest(function(object, methodNames) {\n arrayEach(methodNames, function(key) {\n key = toKey(key);\n baseAssignValue(object, key, bind(object[key], object));\n });\n return object;\n });\n\n /**\n * Creates a function that iterates over `pairs` and invokes the corresponding\n * function of the first predicate to return truthy. The predicate-function\n * pairs are invoked with the `this` binding and arguments of the created\n * function.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Array} pairs The predicate-function pairs.\n * @returns {Function} Returns the new composite function.\n * @example\n *\n * var func = _.cond([\n * [_.matches({ 'a': 1 }), _.constant('matches A')],\n * [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n * [_.stubTrue, _.constant('no match')]\n * ]);\n *\n * func({ 'a': 1, 'b': 2 });\n * // => 'matches A'\n *\n * func({ 'a': 0, 'b': 1 });\n * // => 'matches B'\n *\n * func({ 'a': '1', 'b': '2' });\n * // => 'no match'\n */\n function cond(pairs) {\n var length = pairs == null ? 0 : pairs.length,\n toIteratee = getIteratee();\n\n pairs = !length ? [] : arrayMap(pairs, function(pair) {\n if (typeof pair[1] != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return [toIteratee(pair[0]), pair[1]];\n });\n\n return baseRest(function(args) {\n var index = -1;\n while (++index < length) {\n var pair = pairs[index];\n if (apply(pair[0], this, args)) {\n return apply(pair[1], this, args);\n }\n }\n });\n }\n\n /**\n * Creates a function that invokes the predicate properties of `source` with\n * the corresponding property values of a given object, returning `true` if\n * all predicates return truthy, else `false`.\n *\n * **Note:** The created function is equivalent to `_.conformsTo` with\n * `source` partially applied.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {Object} source The object of property predicates to conform to.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 2, 'b': 1 },\n * { 'a': 1, 'b': 2 }\n * ];\n *\n * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n * // => [{ 'a': 1, 'b': 2 }]\n */\n function conforms(source) {\n return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * Checks `value` to determine whether a default value should be returned in\n * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n * or `undefined`.\n *\n * @static\n * @memberOf _\n * @since 4.14.0\n * @category Util\n * @param {*} value The value to check.\n * @param {*} defaultValue The default value.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * _.defaultTo(1, 10);\n * // => 1\n *\n * _.defaultTo(undefined, 10);\n * // => 10\n */\n function defaultTo(value, defaultValue) {\n return (value == null || value !== value) ? defaultValue : value;\n }\n\n /**\n * Creates a function that returns the result of invoking the given functions\n * with the `this` binding of the created function, where each successive\n * invocation is supplied the return value of the previous.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flowRight\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flow([_.add, square]);\n * addSquare(1, 2);\n * // => 9\n */\n var flow = createFlow();\n\n /**\n * This method is like `_.flow` except that it creates a function that\n * invokes the given functions from right to left.\n *\n * @static\n * @since 3.0.0\n * @memberOf _\n * @category Util\n * @param {...(Function|Function[])} [funcs] The functions to invoke.\n * @returns {Function} Returns the new composite function.\n * @see _.flow\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var addSquare = _.flowRight([square, _.add]);\n * addSquare(1, 2);\n * // => 9\n */\n var flowRight = createFlow(true);\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between the\n * value at `path` of a given object to `srcValue`, returning `true` if the\n * object value is equivalent, else `false`.\n *\n * **Note:** Partial comparisons will match empty array and empty object\n * `srcValue` values against any array or object value, respectively. See\n * `_.isEqual` for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.2.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.find(objects, _.matchesProperty('a', 4));\n * // => { 'a': 4, 'b': 5, 'c': 6 }\n */\n function matchesProperty(path, srcValue) {\n return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that invokes the method at `path` of a given object.\n * Any additional arguments are provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Array|string} path The path of the method to invoke.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': _.constant(2) } },\n * { 'a': { 'b': _.constant(1) } }\n * ];\n *\n * _.map(objects, _.method('a.b'));\n * // => [2, 1]\n *\n * _.map(objects, _.method(['a', 'b']));\n * // => [2, 1]\n */\n var method = baseRest(function(path, args) {\n return function(object) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * The opposite of `_.method`; this method creates a function that invokes\n * the method at a given path of `object`. Any additional arguments are\n * provided to the invoked method.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Util\n * @param {Object} object The object to query.\n * @param {...*} [args] The arguments to invoke the method with.\n * @returns {Function} Returns the new invoker function.\n * @example\n *\n * var array = _.times(3, _.constant),\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n * // => [2, 0]\n */\n var methodOf = baseRest(function(object, args) {\n return function(path) {\n return baseInvoke(object, path, args);\n };\n });\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that gets the argument at index `n`. If `n` is negative,\n * the nth argument from the end is returned.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [n=0] The index of the argument to return.\n * @returns {Function} Returns the new pass-thru function.\n * @example\n *\n * var func = _.nthArg(1);\n * func('a', 'b', 'c', 'd');\n * // => 'b'\n *\n * var func = _.nthArg(-2);\n * func('a', 'b', 'c', 'd');\n * // => 'c'\n */\n function nthArg(n) {\n n = toInteger(n);\n return baseRest(function(args) {\n return baseNth(args, n);\n });\n }\n\n /**\n * Creates a function that invokes `iteratees` with the arguments it receives\n * and returns their results.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to invoke.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.over([Math.max, Math.min]);\n *\n * func(1, 2, 3, 4);\n * // => [4, 1]\n */\n var over = createOver(arrayMap);\n\n /**\n * Creates a function that checks if **all** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overEvery([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => false\n *\n * func(NaN);\n * // => false\n */\n var overEvery = createOver(arrayEvery);\n\n /**\n * Creates a function that checks if **any** of the `predicates` return\n * truthy when invoked with the arguments it receives.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {...(Function|Function[])} [predicates=[_.identity]]\n * The predicates to check.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var func = _.overSome([Boolean, isFinite]);\n *\n * func('1');\n * // => true\n *\n * func(null);\n * // => true\n *\n * func(NaN);\n * // => false\n */\n var overSome = createOver(arraySome);\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * The opposite of `_.property`; this method creates a function that returns\n * the value at a given path of `object`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var array = [0, 1, 2],\n * object = { 'a': array, 'b': array, 'c': array };\n *\n * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n * // => [2, 0]\n *\n * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n * // => [2, 0]\n */\n function propertyOf(object) {\n return function(path) {\n return object == null ? undefined : baseGet(object, path);\n };\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method is like `_.range` except that it populates values in\n * descending order.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.range\n * @example\n *\n * _.rangeRight(4);\n * // => [3, 2, 1, 0]\n *\n * _.rangeRight(-4);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 5);\n * // => [4, 3, 2, 1]\n *\n * _.rangeRight(0, 20, 5);\n * // => [15, 10, 5, 0]\n *\n * _.rangeRight(0, -4, -1);\n * // => [-3, -2, -1, 0]\n *\n * _.rangeRight(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.rangeRight(0);\n * // => []\n */\n var rangeRight = createRange(true);\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * This method returns a new empty object.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Object} Returns the new empty object.\n * @example\n *\n * var objects = _.times(2, _.stubObject);\n *\n * console.log(objects);\n * // => [{}, {}]\n *\n * console.log(objects[0] === objects[1]);\n * // => false\n */\n function stubObject() {\n return {};\n }\n\n /**\n * This method returns an empty string.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {string} Returns the empty string.\n * @example\n *\n * _.times(2, _.stubString);\n * // => ['', '']\n */\n function stubString() {\n return '';\n }\n\n /**\n * This method returns `true`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `true`.\n * @example\n *\n * _.times(2, _.stubTrue);\n * // => [true, true]\n */\n function stubTrue() {\n return true;\n }\n\n /**\n * Invokes the iteratee `n` times, returning an array of the results of\n * each invocation. The iteratee is invoked with one argument; (index).\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n * @example\n *\n * _.times(3, String);\n * // => ['0', '1', '2']\n *\n * _.times(4, _.constant(0));\n * // => [0, 0, 0, 0]\n */\n function times(n, iteratee) {\n n = toInteger(n);\n if (n < 1 || n > MAX_SAFE_INTEGER) {\n return [];\n }\n var index = MAX_ARRAY_LENGTH,\n length = nativeMin(n, MAX_ARRAY_LENGTH);\n\n iteratee = getIteratee(iteratee);\n n -= MAX_ARRAY_LENGTH;\n\n var result = baseTimes(length, iteratee);\n while (++index < n) {\n iteratee(index);\n }\n return result;\n }\n\n /**\n * Converts `value` to a property path array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Util\n * @param {*} value The value to convert.\n * @returns {Array} Returns the new property path array.\n * @example\n *\n * _.toPath('a.b.c');\n * // => ['a', 'b', 'c']\n *\n * _.toPath('a[0].b.c');\n * // => ['a', '0', 'b', 'c']\n */\n function toPath(value) {\n if (isArray(value)) {\n return arrayMap(value, toKey);\n }\n return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Adds two numbers.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {number} augend The first number in an addition.\n * @param {number} addend The second number in an addition.\n * @returns {number} Returns the total.\n * @example\n *\n * _.add(6, 4);\n * // => 10\n */\n var add = createMathOperation(function(augend, addend) {\n return augend + addend;\n }, 0);\n\n /**\n * Computes `number` rounded up to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round up.\n * @param {number} [precision=0] The precision to round up to.\n * @returns {number} Returns the rounded up number.\n * @example\n *\n * _.ceil(4.006);\n * // => 5\n *\n * _.ceil(6.004, 2);\n * // => 6.01\n *\n * _.ceil(6040, -2);\n * // => 6100\n */\n var ceil = createRound('ceil');\n\n /**\n * Divide two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} dividend The first number in a division.\n * @param {number} divisor The second number in a division.\n * @returns {number} Returns the quotient.\n * @example\n *\n * _.divide(6, 4);\n * // => 1.5\n */\n var divide = createMathOperation(function(dividend, divisor) {\n return dividend / divisor;\n }, 1);\n\n /**\n * Computes `number` rounded down to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round down.\n * @param {number} [precision=0] The precision to round down to.\n * @returns {number} Returns the rounded down number.\n * @example\n *\n * _.floor(4.006);\n * // => 4\n *\n * _.floor(0.046, 2);\n * // => 0.04\n *\n * _.floor(4060, -2);\n * // => 4000\n */\n var floor = createRound('floor');\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * This method is like `_.max` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.maxBy(objects, function(o) { return o.n; });\n * // => { 'n': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.maxBy(objects, 'n');\n * // => { 'n': 2 }\n */\n function maxBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)\n : undefined;\n }\n\n /**\n * Computes the mean of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the mean.\n * @example\n *\n * _.mean([4, 2, 8, 6]);\n * // => 5\n */\n function mean(array) {\n return baseMean(array, identity);\n }\n\n /**\n * This method is like `_.mean` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be averaged.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the mean.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.meanBy(objects, function(o) { return o.n; });\n * // => 5\n *\n * // The `_.property` iteratee shorthand.\n * _.meanBy(objects, 'n');\n * // => 5\n */\n function meanBy(array, iteratee) {\n return baseMean(array, getIteratee(iteratee, 2));\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /**\n * This method is like `_.min` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * the value is ranked. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * var objects = [{ 'n': 1 }, { 'n': 2 }];\n *\n * _.minBy(objects, function(o) { return o.n; });\n * // => { 'n': 1 }\n *\n * // The `_.property` iteratee shorthand.\n * _.minBy(objects, 'n');\n * // => { 'n': 1 }\n */\n function minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)\n : undefined;\n }\n\n /**\n * Multiply two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.7.0\n * @category Math\n * @param {number} multiplier The first number in a multiplication.\n * @param {number} multiplicand The second number in a multiplication.\n * @returns {number} Returns the product.\n * @example\n *\n * _.multiply(6, 4);\n * // => 24\n */\n var multiply = createMathOperation(function(multiplier, multiplicand) {\n return multiplier * multiplicand;\n }, 1);\n\n /**\n * Computes `number` rounded to `precision`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Math\n * @param {number} number The number to round.\n * @param {number} [precision=0] The precision to round to.\n * @returns {number} Returns the rounded number.\n * @example\n *\n * _.round(4.006);\n * // => 4\n *\n * _.round(4.006, 2);\n * // => 4.01\n *\n * _.round(4060, -2);\n * // => 4100\n */\n var round = createRound('round');\n\n /**\n * Subtract two numbers.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {number} minuend The first number in a subtraction.\n * @param {number} subtrahend The second number in a subtraction.\n * @returns {number} Returns the difference.\n * @example\n *\n * _.subtract(6, 4);\n * // => 2\n */\n var subtract = createMathOperation(function(minuend, subtrahend) {\n return minuend - subtrahend;\n }, 0);\n\n /**\n * Computes the sum of the values in `array`.\n *\n * @static\n * @memberOf _\n * @since 3.4.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {number} Returns the sum.\n * @example\n *\n * _.sum([4, 2, 8, 6]);\n * // => 20\n */\n function sum(array) {\n return (array && array.length)\n ? baseSum(array, identity)\n : 0;\n }\n\n /**\n * This method is like `_.sum` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the value to be summed.\n * The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Math\n * @param {Array} array The array to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {number} Returns the sum.\n * @example\n *\n * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n *\n * _.sumBy(objects, function(o) { return o.n; });\n * // => 20\n *\n * // The `_.property` iteratee shorthand.\n * _.sumBy(objects, 'n');\n * // => 20\n */\n function sumBy(array, iteratee) {\n return (array && array.length)\n ? baseSum(array, getIteratee(iteratee, 2))\n : 0;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.ary = ary;\n lodash.assign = assign;\n lodash.assignIn = assignIn;\n lodash.assignInWith = assignInWith;\n lodash.assignWith = assignWith;\n lodash.at = at;\n lodash.before = before;\n lodash.bind = bind;\n lodash.bindAll = bindAll;\n lodash.bindKey = bindKey;\n lodash.castArray = castArray;\n lodash.chain = chain;\n lodash.chunk = chunk;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.cond = cond;\n lodash.conforms = conforms;\n lodash.constant = constant;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.curry = curry;\n lodash.curryRight = curryRight;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.differenceBy = differenceBy;\n lodash.differenceWith = differenceWith;\n lodash.drop = drop;\n lodash.dropRight = dropRight;\n lodash.dropRightWhile = dropRightWhile;\n lodash.dropWhile = dropWhile;\n lodash.fill = fill;\n lodash.filter = filter;\n lodash.flatMap = flatMap;\n lodash.flatMapDeep = flatMapDeep;\n lodash.flatMapDepth = flatMapDepth;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.flattenDepth = flattenDepth;\n lodash.flip = flip;\n lodash.flow = flow;\n lodash.flowRight = flowRight;\n lodash.fromPairs = fromPairs;\n lodash.functions = functions;\n lodash.functionsIn = functionsIn;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.intersectionBy = intersectionBy;\n lodash.intersectionWith = intersectionWith;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.invokeMap = invokeMap;\n lodash.iteratee = iteratee;\n lodash.keyBy = keyBy;\n lodash.keys = keys;\n lodash.keysIn = keysIn;\n lodash.map = map;\n lodash.mapKeys = mapKeys;\n lodash.mapValues = mapValues;\n lodash.matches = matches;\n lodash.matchesProperty = matchesProperty;\n lodash.memoize = memoize;\n lodash.merge = merge;\n lodash.mergeWith = mergeWith;\n lodash.method = method;\n lodash.methodOf = methodOf;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.nthArg = nthArg;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.orderBy = orderBy;\n lodash.over = over;\n lodash.overArgs = overArgs;\n lodash.overEvery = overEvery;\n lodash.overSome = overSome;\n lodash.partial = partial;\n lodash.partialRight = partialRight;\n lodash.partition = partition;\n lodash.pick = pick;\n lodash.pickBy = pickBy;\n lodash.property = property;\n lodash.propertyOf = propertyOf;\n lodash.pull = pull;\n lodash.pullAll = pullAll;\n lodash.pullAllBy = pullAllBy;\n lodash.pullAllWith = pullAllWith;\n lodash.pullAt = pullAt;\n lodash.range = range;\n lodash.rangeRight = rangeRight;\n lodash.rearg = rearg;\n lodash.reject = reject;\n lodash.remove = remove;\n lodash.rest = rest;\n lodash.reverse = reverse;\n lodash.sampleSize = sampleSize;\n lodash.set = set;\n lodash.setWith = setWith;\n lodash.shuffle = shuffle;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.sortedUniq = sortedUniq;\n lodash.sortedUniqBy = sortedUniqBy;\n lodash.split = split;\n lodash.spread = spread;\n lodash.tail = tail;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.takeRightWhile = takeRightWhile;\n lodash.takeWhile = takeWhile;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.toPairs = toPairs;\n lodash.toPairsIn = toPairsIn;\n lodash.toPath = toPath;\n lodash.toPlainObject = toPlainObject;\n lodash.transform = transform;\n lodash.unary = unary;\n lodash.union = union;\n lodash.unionBy = unionBy;\n lodash.unionWith = unionWith;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.uniqWith = uniqWith;\n lodash.unset = unset;\n lodash.unzip = unzip;\n lodash.unzipWith = unzipWith;\n lodash.update = update;\n lodash.updateWith = updateWith;\n lodash.values = values;\n lodash.valuesIn = valuesIn;\n lodash.without = without;\n lodash.words = words;\n lodash.wrap = wrap;\n lodash.xor = xor;\n lodash.xorBy = xorBy;\n lodash.xorWith = xorWith;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n lodash.zipObjectDeep = zipObjectDeep;\n lodash.zipWith = zipWith;\n\n // Add aliases.\n lodash.entries = toPairs;\n lodash.entriesIn = toPairsIn;\n lodash.extend = assignIn;\n lodash.extendWith = assignInWith;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.add = add;\n lodash.attempt = attempt;\n lodash.camelCase = camelCase;\n lodash.capitalize = capitalize;\n lodash.ceil = ceil;\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.cloneDeepWith = cloneDeepWith;\n lodash.cloneWith = cloneWith;\n lodash.conformsTo = conformsTo;\n lodash.deburr = deburr;\n lodash.defaultTo = defaultTo;\n lodash.divide = divide;\n lodash.endsWith = endsWith;\n lodash.eq = eq;\n lodash.escape = escape;\n lodash.escapeRegExp = escapeRegExp;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLast = findLast;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.floor = floor;\n lodash.forEach = forEach;\n lodash.forEachRight = forEachRight;\n lodash.forIn = forIn;\n lodash.forInRight = forInRight;\n lodash.forOwn = forOwn;\n lodash.forOwnRight = forOwnRight;\n lodash.get = get;\n lodash.gt = gt;\n lodash.gte = gte;\n lodash.has = has;\n lodash.hasIn = hasIn;\n lodash.head = head;\n lodash.identity = identity;\n lodash.includes = includes;\n lodash.indexOf = indexOf;\n lodash.inRange = inRange;\n lodash.invoke = invoke;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayBuffer = isArrayBuffer;\n lodash.isArrayLike = isArrayLike;\n lodash.isArrayLikeObject = isArrayLikeObject;\n lodash.isBoolean = isBoolean;\n lodash.isBuffer = isBuffer;\n lodash.isDate = isDate;\n lodash.isElement = isElement;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isEqualWith = isEqualWith;\n lodash.isError = isError;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isInteger = isInteger;\n lodash.isLength = isLength;\n lodash.isMap = isMap;\n lodash.isMatch = isMatch;\n lodash.isMatchWith = isMatchWith;\n lodash.isNaN = isNaN;\n lodash.isNative = isNative;\n lodash.isNil = isNil;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isObjectLike = isObjectLike;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isSafeInteger = isSafeInteger;\n lodash.isSet = isSet;\n lodash.isString = isString;\n lodash.isSymbol = isSymbol;\n lodash.isTypedArray = isTypedArray;\n lodash.isUndefined = isUndefined;\n lodash.isWeakMap = isWeakMap;\n lodash.isWeakSet = isWeakSet;\n lodash.join = join;\n lodash.kebabCase = kebabCase;\n lodash.last = last;\n lodash.lastIndexOf = lastIndexOf;\n lodash.lowerCase = lowerCase;\n lodash.lowerFirst = lowerFirst;\n lodash.lt = lt;\n lodash.lte = lte;\n lodash.max = max;\n lodash.maxBy = maxBy;\n lodash.mean = mean;\n lodash.meanBy = meanBy;\n lodash.min = min;\n lodash.minBy = minBy;\n lodash.stubArray = stubArray;\n lodash.stubFalse = stubFalse;\n lodash.stubObject = stubObject;\n lodash.stubString = stubString;\n lodash.stubTrue = stubTrue;\n lodash.multiply = multiply;\n lodash.nth = nth;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.now = now;\n lodash.pad = pad;\n lodash.padEnd = padEnd;\n lodash.padStart = padStart;\n lodash.parseInt = parseInt;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.reduceRight = reduceRight;\n lodash.repeat = repeat;\n lodash.replace = replace;\n lodash.result = result;\n lodash.round = round;\n lodash.runInContext = runInContext;\n lodash.sample = sample;\n lodash.size = size;\n lodash.snakeCase = snakeCase;\n lodash.some = some;\n lodash.sortedIndex = sortedIndex;\n lodash.sortedIndexBy = sortedIndexBy;\n lodash.sortedIndexOf = sortedIndexOf;\n lodash.sortedLastIndex = sortedLastIndex;\n lodash.sortedLastIndexBy = sortedLastIndexBy;\n lodash.sortedLastIndexOf = sortedLastIndexOf;\n lodash.startCase = startCase;\n lodash.startsWith = startsWith;\n lodash.subtract = subtract;\n lodash.sum = sum;\n lodash.sumBy = sumBy;\n lodash.template = template;\n lodash.times = times;\n lodash.toFinite = toFinite;\n lodash.toInteger = toInteger;\n lodash.toLength = toLength;\n lodash.toLower = toLower;\n lodash.toNumber = toNumber;\n lodash.toSafeInteger = toSafeInteger;\n lodash.toString = toString;\n lodash.toUpper = toUpper;\n lodash.trim = trim;\n lodash.trimEnd = trimEnd;\n lodash.trimStart = trimStart;\n lodash.truncate = truncate;\n lodash.unescape = unescape;\n lodash.uniqueId = uniqueId;\n lodash.upperCase = upperCase;\n lodash.upperFirst = upperFirst;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.eachRight = forEachRight;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Assign default placeholders.\n arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {\n lodash[methodName].placeholder = lodash;\n });\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = lodashFunc.name + '';\n if (!hasOwnProperty.call(realNames, key)) {\n realNames[key] = [];\n }\n realNames[key].push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add chain sequence methods to the `lodash` wrapper.\n lodash.prototype.at = wrapperAt;\n lodash.prototype.chain = wrapperChain;\n lodash.prototype.commit = wrapperCommit;\n lodash.prototype.next = wrapperNext;\n lodash.prototype.plant = wrapperPlant;\n lodash.prototype.reverse = wrapperReverse;\n lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n return lodash;\n });\n\n /*--------------------------------------------------------------------------*/\n\n // Export lodash.\n var _ = runInContext();\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = _;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return _;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = _)._ = _;\n // Export for CommonJS support.\n freeExports._ = _;\n }\n else {\n // Export to the global object.\n root._ = _;\n }\n}.call(this));\n","export default (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n","var filters = new Map();\nvar limiters = new Map();\n\nfunction filter(name, handler) {\n if (typeof name !== 'string') {\n throw new TypeError('First argument must be a string.');\n }\n if (typeof handler !== 'function') {\n throw new TypeError('Second argument must be a function.');\n }\n if (filters.has(name)) {\n throw new Error((\"A filter named \" + name + \" is already registered.\"));\n }\n filters.set(name, handler);\n}\n\nfunction limiter(name, handler) {\n if (typeof name !== 'string') {\n throw new TypeError('First argument must be a string.');\n }\n if (typeof handler !== 'function') {\n throw new TypeError('Second argument must be a function.');\n }\n if (limiters.has(name)) {\n throw new Error((\"A limiter named \" + name + \" is already registered.\"));\n }\n limiters.set(name, handler);\n}\n\nfunction compileRawExpression(src) {\n return new Function('context', 'tempVars', // eslint-disable-line\n (\"const sandbox = $nxCompileToSandbox(context, tempVars)\\n try { with (sandbox) { return \" + src + \" } } catch (err) {\\n if (!(err instanceof TypeError)) throw err\\n }\\n $nxClearSandbox()\"));\n}\n\nfunction compileRawCode(src) {\n return new Function('context', 'tempVars', // eslint-disable-line\n (\"const sandbox = $nxCompileToSandbox(context, tempVars)\\n with (sandbox) { \" + src + \" }\\n $nxClearSandbox()\"));\n}\n\nvar filterRegex = /(?:[^\\|]|\\|\\|)+/g;\nvar limiterRegex = /(?:[^&]|&&)+/g;\nvar argsRegex = /\\S+/g;\n\nfunction parseExpression(src) {\n var tokens = src.match(filterRegex);\n if (tokens.length === 1) {\n return compileRawExpression(tokens[0]);\n }\n\n var expression = {\n exec: compileRawExpression(tokens[0]),\n filters: []\n };\n for (var i = 1; i < tokens.length; i++) {\n var filterTokens = tokens[i].match(argsRegex);\n var filterName = filterTokens.shift();\n var effect = filters.get(filterName);\n if (!effect) {\n throw new Error((\"There is no filter named: \" + filterName + \".\"));\n }\n expression.filters.push({ effect: effect, argExpressions: filterTokens.map(compileRawExpression) });\n }\n return expression;\n}\n\nfunction parseCode(src) {\n var tokens = src.match(limiterRegex);\n if (tokens.length === 1) {\n return compileRawCode(tokens[0]);\n }\n\n var code = {\n exec: compileRawCode(tokens[0]),\n limiters: []\n };\n for (var i = 1; i < tokens.length; i++) {\n var limiterTokens = tokens[i].match(argsRegex);\n var limiterName = limiterTokens.shift();\n var effect = limiters.get(limiterName);\n if (!effect) {\n throw new Error((\"There is no limiter named: \" + limiterName + \".\"));\n }\n code.limiters.push({ effect: effect, argExpressions: limiterTokens.map(compileRawExpression) });\n }\n return code;\n}\n\nvar expressionCache = new Map();\nvar codeCache = new Map();\n\nfunction compileExpression(src) {\n if (typeof src !== 'string') {\n throw new TypeError('First argument must be a string.');\n }\n var expression = expressionCache.get(src);\n if (!expression) {\n expression = parseExpression(src);\n expressionCache.set(src, expression);\n }\n\n if (typeof expression === 'function') {\n return expression;\n }\n\n return function evaluateExpression(context, tempVars) {\n var value = expression.exec(context, tempVars);\n for (var i = 0, list = expression.filters; i < list.length; i += 1) {\n var filter = list[i];\n\n var args = filter.argExpressions.map(evaluateArgExpression, context);\n value = filter.effect.apply(filter, [ value ].concat( args ));\n }\n return value;\n };\n}\n\nfunction compileCode(src) {\n if (typeof src !== 'string') {\n throw new TypeError('First argument must be a string.');\n }\n var code = codeCache.get(src);\n if (!code) {\n code = parseCode(src);\n codeCache.set(src, code);\n }\n\n if (typeof code === 'function') {\n return code;\n }\n\n var context = {};\n return function evaluateCode(state, tempVars) {\n var i = 0;\n function next() {\n Object.assign(context, tempVars);\n if (i < code.limiters.length) {\n var limiter = code.limiters[i++];\n var args = limiter.argExpressions.map(evaluateArgExpression, state);\n limiter.effect.apply(limiter, [ next, context ].concat( args ));\n } else {\n code.exec(state, tempVars);\n }\n }\n next();\n };\n}\n\nfunction evaluateArgExpression(argExpression) {\n return argExpression(this);\n}\n\nvar hasHandler = { has: has };\nvar allHandlers = { has: has, get: get };\nvar globals = new Set();\nvar temp;\n\nvar globalObj;\nif (typeof window !== 'undefined') { globalObj = window; } // eslint-disable-line\nelse if (typeof global !== 'undefined') { globalObj = global; } // eslint-disable-line\n else if (typeof self !== 'undefined') { globalObj = self; } // eslint-disable-line\nglobalObj.$nxCompileToSandbox = toSandbox;\nglobalObj.$nxClearSandbox = clearSandbox;\n\nfunction expose() {\n var globalNames = [], len = arguments.length;\n while ( len-- ) globalNames[ len ] = arguments[ len ];\n\n for (var i = 0, list = globalNames; i < list.length; i += 1) {\n var globalName = list[i];\n\n globals.add(globalName);\n }\n}\n\nfunction hide() {\n var globalNames = [], len = arguments.length;\n while ( len-- ) globalNames[ len ] = arguments[ len ];\n\n for (var i = 0, list = globalNames; i < list.length; i += 1) {\n var globalName = list[i];\n\n globals.delete(globalName);\n }\n}\n\nfunction hideAll() {\n globals.clear();\n}\n\nfunction has(target, key) {\n return globals.has(key) ? key in target : true;\n}\n\nfunction get(target, key) {\n return key in temp ? temp[key] : target[key];\n}\n\nfunction toSandbox(obj, tempVars) {\n if (tempVars) {\n temp = tempVars;\n return new Proxy(obj, allHandlers);\n }\n return new Proxy(obj, hasHandler);\n}\n\nfunction clearSandbox() {\n temp = undefined;\n}\n\nexport { compileExpression, compileCode, compileRawExpression, compileRawCode, expose, hide, hideAll, filters, limiters, filter, limiter };\n","/**\n * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.6\n * Copyright (C) 2019 Oliver Nightingale\n * @license MIT\n */\n\n;(function(){\n\n/**\n * A convenience function for configuring and constructing\n * a new lunr Index.\n *\n * A lunr.Builder instance is created and the pipeline setup\n * with a trimmer, stop word filter and stemmer.\n *\n * This builder object is yielded to the configuration function\n * that is passed as a parameter, allowing the list of fields\n * and other builder parameters to be customised.\n *\n * All documents _must_ be added within the passed config function.\n *\n * @example\n * var idx = lunr(function () {\n * this.field('title')\n * this.field('body')\n * this.ref('id')\n *\n * documents.forEach(function (doc) {\n * this.add(doc)\n * }, this)\n * })\n *\n * @see {@link lunr.Builder}\n * @see {@link lunr.Pipeline}\n * @see {@link lunr.trimmer}\n * @see {@link lunr.stopWordFilter}\n * @see {@link lunr.stemmer}\n * @namespace {function} lunr\n */\nvar lunr = function (config) {\n var builder = new lunr.Builder\n\n builder.pipeline.add(\n lunr.trimmer,\n lunr.stopWordFilter,\n lunr.stemmer\n )\n\n builder.searchPipeline.add(\n lunr.stemmer\n )\n\n config.call(builder, builder)\n return builder.build()\n}\n\nlunr.version = \"2.3.6\"\n/*!\n * lunr.utils\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A namespace containing utils for the rest of the lunr library\n * @namespace lunr.utils\n */\nlunr.utils = {}\n\n/**\n * Print a warning message to the console.\n *\n * @param {String} message The message to be printed.\n * @memberOf lunr.utils\n * @function\n */\nlunr.utils.warn = (function (global) {\n /* eslint-disable no-console */\n return function (message) {\n if (global.console && console.warn) {\n console.warn(message)\n }\n }\n /* eslint-enable no-console */\n})(this)\n\n/**\n * Convert an object to a string.\n *\n * In the case of `null` and `undefined` the function returns\n * the empty string, in all other cases the result of calling\n * `toString` on the passed object is returned.\n *\n * @param {Any} obj The object to convert to a string.\n * @return {String} string representation of the passed object.\n * @memberOf lunr.utils\n */\nlunr.utils.asString = function (obj) {\n if (obj === void 0 || obj === null) {\n return \"\"\n } else {\n return obj.toString()\n }\n}\n\n/**\n * Clones an object.\n *\n * Will create a copy of an existing object such that any mutations\n * on the copy cannot affect the original.\n *\n * Only shallow objects are supported, passing a nested object to this\n * function will cause a TypeError.\n *\n * Objects with primitives, and arrays of primitives are supported.\n *\n * @param {Object} obj The object to clone.\n * @return {Object} a clone of the passed object.\n * @throws {TypeError} when a nested object is passed.\n * @memberOf Utils\n */\nlunr.utils.clone = function (obj) {\n if (obj === null || obj === undefined) {\n return obj\n }\n\n var clone = Object.create(null),\n keys = Object.keys(obj)\n\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i],\n val = obj[key]\n\n if (Array.isArray(val)) {\n clone[key] = val.slice()\n continue\n }\n\n if (typeof val === 'string' ||\n typeof val === 'number' ||\n typeof val === 'boolean') {\n clone[key] = val\n continue\n }\n\n throw new TypeError(\"clone is not deep and does not support nested objects\")\n }\n\n return clone\n}\nlunr.FieldRef = function (docRef, fieldName, stringValue) {\n this.docRef = docRef\n this.fieldName = fieldName\n this._stringValue = stringValue\n}\n\nlunr.FieldRef.joiner = \"/\"\n\nlunr.FieldRef.fromString = function (s) {\n var n = s.indexOf(lunr.FieldRef.joiner)\n\n if (n === -1) {\n throw \"malformed field ref string\"\n }\n\n var fieldRef = s.slice(0, n),\n docRef = s.slice(n + 1)\n\n return new lunr.FieldRef (docRef, fieldRef, s)\n}\n\nlunr.FieldRef.prototype.toString = function () {\n if (this._stringValue == undefined) {\n this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef\n }\n\n return this._stringValue\n}\n/*!\n * lunr.Set\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A lunr set.\n *\n * @constructor\n */\nlunr.Set = function (elements) {\n this.elements = Object.create(null)\n\n if (elements) {\n this.length = elements.length\n\n for (var i = 0; i < this.length; i++) {\n this.elements[elements[i]] = true\n }\n } else {\n this.length = 0\n }\n}\n\n/**\n * A complete set that contains all elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.complete = {\n intersect: function (other) {\n return other\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return true\n }\n}\n\n/**\n * An empty set that contains no elements.\n *\n * @static\n * @readonly\n * @type {lunr.Set}\n */\nlunr.Set.empty = {\n intersect: function () {\n return this\n },\n\n union: function (other) {\n return other\n },\n\n contains: function () {\n return false\n }\n}\n\n/**\n * Returns true if this set contains the specified object.\n *\n * @param {object} object - Object whose presence in this set is to be tested.\n * @returns {boolean} - True if this set contains the specified object.\n */\nlunr.Set.prototype.contains = function (object) {\n return !!this.elements[object]\n}\n\n/**\n * Returns a new set containing only the elements that are present in both\n * this set and the specified set.\n *\n * @param {lunr.Set} other - set to intersect with this set.\n * @returns {lunr.Set} a new set that is the intersection of this and the specified set.\n */\n\nlunr.Set.prototype.intersect = function (other) {\n var a, b, elements, intersection = []\n\n if (other === lunr.Set.complete) {\n return this\n }\n\n if (other === lunr.Set.empty) {\n return other\n }\n\n if (this.length < other.length) {\n a = this\n b = other\n } else {\n a = other\n b = this\n }\n\n elements = Object.keys(a.elements)\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i]\n if (element in b.elements) {\n intersection.push(element)\n }\n }\n\n return new lunr.Set (intersection)\n}\n\n/**\n * Returns a new set combining the elements of this and the specified set.\n *\n * @param {lunr.Set} other - set to union with this set.\n * @return {lunr.Set} a new set that is the union of this and the specified set.\n */\n\nlunr.Set.prototype.union = function (other) {\n if (other === lunr.Set.complete) {\n return lunr.Set.complete\n }\n\n if (other === lunr.Set.empty) {\n return this\n }\n\n return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))\n}\n/**\n * A function to calculate the inverse document frequency for\n * a posting. This is shared between the builder and the index\n *\n * @private\n * @param {object} posting - The posting for a given term\n * @param {number} documentCount - The total number of documents.\n */\nlunr.idf = function (posting, documentCount) {\n var documentsWithTerm = 0\n\n for (var fieldName in posting) {\n if (fieldName == '_index') continue // Ignore the term index, its not a field\n documentsWithTerm += Object.keys(posting[fieldName]).length\n }\n\n var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)\n\n return Math.log(1 + Math.abs(x))\n}\n\n/**\n * A token wraps a string representation of a token\n * as it is passed through the text processing pipeline.\n *\n * @constructor\n * @param {string} [str=''] - The string token being wrapped.\n * @param {object} [metadata={}] - Metadata associated with this token.\n */\nlunr.Token = function (str, metadata) {\n this.str = str || \"\"\n this.metadata = metadata || {}\n}\n\n/**\n * Returns the token string that is being wrapped by this object.\n *\n * @returns {string}\n */\nlunr.Token.prototype.toString = function () {\n return this.str\n}\n\n/**\n * A token update function is used when updating or optionally\n * when cloning a token.\n *\n * @callback lunr.Token~updateFunction\n * @param {string} str - The string representation of the token.\n * @param {Object} metadata - All metadata associated with this token.\n */\n\n/**\n * Applies the given function to the wrapped string token.\n *\n * @example\n * token.update(function (str, metadata) {\n * return str.toUpperCase()\n * })\n *\n * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.update = function (fn) {\n this.str = fn(this.str, this.metadata)\n return this\n}\n\n/**\n * Creates a clone of this token. Optionally a function can be\n * applied to the cloned token.\n *\n * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.\n * @returns {lunr.Token}\n */\nlunr.Token.prototype.clone = function (fn) {\n fn = fn || function (s) { return s }\n return new lunr.Token (fn(this.str, this.metadata), this.metadata)\n}\n/*!\n * lunr.tokenizer\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A function for splitting a string into tokens ready to be inserted into\n * the search index. Uses `lunr.tokenizer.separator` to split strings, change\n * the value of this property to change how strings are split into tokens.\n *\n * This tokenizer will convert its parameter to a string by calling `toString` and\n * then will split this string on the character in `lunr.tokenizer.separator`.\n * Arrays will have their elements converted to strings and wrapped in a lunr.Token.\n *\n * Optional metadata can be passed to the tokenizer, this metadata will be cloned and\n * added as metadata to every token that is created from the object to be tokenized.\n *\n * @static\n * @param {?(string|object|object[])} obj - The object to convert into tokens\n * @param {?object} metadata - Optional metadata to associate with every token\n * @returns {lunr.Token[]}\n * @see {@link lunr.Pipeline}\n */\nlunr.tokenizer = function (obj, metadata) {\n if (obj == null || obj == undefined) {\n return []\n }\n\n if (Array.isArray(obj)) {\n return obj.map(function (t) {\n return new lunr.Token(\n lunr.utils.asString(t).toLowerCase(),\n lunr.utils.clone(metadata)\n )\n })\n }\n\n var str = obj.toString().trim().toLowerCase(),\n len = str.length,\n tokens = []\n\n for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {\n var char = str.charAt(sliceEnd),\n sliceLength = sliceEnd - sliceStart\n\n if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {\n\n if (sliceLength > 0) {\n var tokenMetadata = lunr.utils.clone(metadata) || {}\n tokenMetadata[\"position\"] = [sliceStart, sliceLength]\n tokenMetadata[\"index\"] = tokens.length\n\n tokens.push(\n new lunr.Token (\n str.slice(sliceStart, sliceEnd),\n tokenMetadata\n )\n )\n }\n\n sliceStart = sliceEnd + 1\n }\n\n }\n\n return tokens\n}\n\n/**\n * The separator used to split a string into tokens. Override this property to change the behaviour of\n * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.\n *\n * @static\n * @see lunr.tokenizer\n */\nlunr.tokenizer.separator = /[\\s\\-]+/\n/*!\n * lunr.Pipeline\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.Pipelines maintain an ordered list of functions to be applied to all\n * tokens in documents entering the search index and queries being ran against\n * the index.\n *\n * An instance of lunr.Index created with the lunr shortcut will contain a\n * pipeline with a stop word filter and an English language stemmer. Extra\n * functions can be added before or after either of these functions or these\n * default functions can be removed.\n *\n * When run the pipeline will call each function in turn, passing a token, the\n * index of that token in the original list of all tokens and finally a list of\n * all the original tokens.\n *\n * The output of functions in the pipeline will be passed to the next function\n * in the pipeline. To exclude a token from entering the index the function\n * should return undefined, the rest of the pipeline will not be called with\n * this token.\n *\n * For serialisation of pipelines to work, all functions used in an instance of\n * a pipeline should be registered with lunr.Pipeline. Registered functions can\n * then be loaded. If trying to load a serialised pipeline that uses functions\n * that are not registered an error will be thrown.\n *\n * If not planning on serialising the pipeline then registering pipeline functions\n * is not necessary.\n *\n * @constructor\n */\nlunr.Pipeline = function () {\n this._stack = []\n}\n\nlunr.Pipeline.registeredFunctions = Object.create(null)\n\n/**\n * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token\n * string as well as all known metadata. A pipeline function can mutate the token string\n * or mutate (or add) metadata for a given token.\n *\n * A pipeline function can indicate that the passed token should be discarded by returning\n * null. This token will not be passed to any downstream pipeline functions and will not be\n * added to the index.\n *\n * Multiple tokens can be returned by returning an array of tokens. Each token will be passed\n * to any downstream pipeline functions and all will returned tokens will be added to the index.\n *\n * Any number of pipeline functions may be chained together using a lunr.Pipeline.\n *\n * @interface lunr.PipelineFunction\n * @param {lunr.Token} token - A token from the document being processed.\n * @param {number} i - The index of this token in the complete list of tokens for this document/field.\n * @param {lunr.Token[]} tokens - All tokens for this document/field.\n * @returns {(?lunr.Token|lunr.Token[])}\n */\n\n/**\n * Register a function with the pipeline.\n *\n * Functions that are used in the pipeline should be registered if the pipeline\n * needs to be serialised, or a serialised pipeline needs to be loaded.\n *\n * Registering a function does not add it to a pipeline, functions must still be\n * added to instances of the pipeline for them to be used when running a pipeline.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @param {String} label - The label to register this function with\n */\nlunr.Pipeline.registerFunction = function (fn, label) {\n if (label in this.registeredFunctions) {\n lunr.utils.warn('Overwriting existing registered function: ' + label)\n }\n\n fn.label = label\n lunr.Pipeline.registeredFunctions[fn.label] = fn\n}\n\n/**\n * Warns if the function is not registered as a Pipeline function.\n *\n * @param {lunr.PipelineFunction} fn - The function to check for.\n * @private\n */\nlunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {\n var isRegistered = fn.label && (fn.label in this.registeredFunctions)\n\n if (!isRegistered) {\n lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\\n', fn)\n }\n}\n\n/**\n * Loads a previously serialised pipeline.\n *\n * All functions to be loaded must already be registered with lunr.Pipeline.\n * If any function from the serialised data has not been registered then an\n * error will be thrown.\n *\n * @param {Object} serialised - The serialised pipeline to load.\n * @returns {lunr.Pipeline}\n */\nlunr.Pipeline.load = function (serialised) {\n var pipeline = new lunr.Pipeline\n\n serialised.forEach(function (fnName) {\n var fn = lunr.Pipeline.registeredFunctions[fnName]\n\n if (fn) {\n pipeline.add(fn)\n } else {\n throw new Error('Cannot load unregistered function: ' + fnName)\n }\n })\n\n return pipeline\n}\n\n/**\n * Adds new functions to the end of the pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.\n */\nlunr.Pipeline.prototype.add = function () {\n var fns = Array.prototype.slice.call(arguments)\n\n fns.forEach(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n this._stack.push(fn)\n }, this)\n}\n\n/**\n * Adds a single function after a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.after = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n pos = pos + 1\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Adds a single function before a function that already exists in the\n * pipeline.\n *\n * Logs a warning if the function has not been registered.\n *\n * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.\n * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.\n */\nlunr.Pipeline.prototype.before = function (existingFn, newFn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(newFn)\n\n var pos = this._stack.indexOf(existingFn)\n if (pos == -1) {\n throw new Error('Cannot find existingFn')\n }\n\n this._stack.splice(pos, 0, newFn)\n}\n\n/**\n * Removes a function from the pipeline.\n *\n * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.\n */\nlunr.Pipeline.prototype.remove = function (fn) {\n var pos = this._stack.indexOf(fn)\n if (pos == -1) {\n return\n }\n\n this._stack.splice(pos, 1)\n}\n\n/**\n * Runs the current list of functions that make up the pipeline against the\n * passed tokens.\n *\n * @param {Array} tokens The tokens to run through the pipeline.\n * @returns {Array}\n */\nlunr.Pipeline.prototype.run = function (tokens) {\n var stackLength = this._stack.length\n\n for (var i = 0; i < stackLength; i++) {\n var fn = this._stack[i]\n var memo = []\n\n for (var j = 0; j < tokens.length; j++) {\n var result = fn(tokens[j], j, tokens)\n\n if (result === void 0 || result === '') continue\n\n if (Array.isArray(result)) {\n for (var k = 0; k < result.length; k++) {\n memo.push(result[k])\n }\n } else {\n memo.push(result)\n }\n }\n\n tokens = memo\n }\n\n return tokens\n}\n\n/**\n * Convenience method for passing a string through a pipeline and getting\n * strings out. This method takes care of wrapping the passed string in a\n * token and mapping the resulting tokens back to strings.\n *\n * @param {string} str - The string to pass through the pipeline.\n * @param {?object} metadata - Optional metadata to associate with the token\n * passed to the pipeline.\n * @returns {string[]}\n */\nlunr.Pipeline.prototype.runString = function (str, metadata) {\n var token = new lunr.Token (str, metadata)\n\n return this.run([token]).map(function (t) {\n return t.toString()\n })\n}\n\n/**\n * Resets the pipeline by removing any existing processors.\n *\n */\nlunr.Pipeline.prototype.reset = function () {\n this._stack = []\n}\n\n/**\n * Returns a representation of the pipeline ready for serialisation.\n *\n * Logs a warning if the function has not been registered.\n *\n * @returns {Array}\n */\nlunr.Pipeline.prototype.toJSON = function () {\n return this._stack.map(function (fn) {\n lunr.Pipeline.warnIfFunctionNotRegistered(fn)\n\n return fn.label\n })\n}\n/*!\n * lunr.Vector\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A vector is used to construct the vector space of documents and queries. These\n * vectors support operations to determine the similarity between two documents or\n * a document and a query.\n *\n * Normally no parameters are required for initializing a vector, but in the case of\n * loading a previously dumped vector the raw elements can be provided to the constructor.\n *\n * For performance reasons vectors are implemented with a flat array, where an elements\n * index is immediately followed by its value. E.g. [index, value, index, value]. This\n * allows the underlying array to be as sparse as possible and still offer decent\n * performance when being used for vector calculations.\n *\n * @constructor\n * @param {Number[]} [elements] - The flat list of element index and element value pairs.\n */\nlunr.Vector = function (elements) {\n this._magnitude = 0\n this.elements = elements || []\n}\n\n\n/**\n * Calculates the position within the vector to insert a given index.\n *\n * This is used internally by insert and upsert. If there are duplicate indexes then\n * the position is returned as if the value for that index were to be updated, but it\n * is the callers responsibility to check whether there is a duplicate at that index\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @returns {Number}\n */\nlunr.Vector.prototype.positionForIndex = function (index) {\n // For an empty vector the tuple can be inserted at the beginning\n if (this.elements.length == 0) {\n return 0\n }\n\n var start = 0,\n end = this.elements.length / 2,\n sliceLength = end - start,\n pivotPoint = Math.floor(sliceLength / 2),\n pivotIndex = this.elements[pivotPoint * 2]\n\n while (sliceLength > 1) {\n if (pivotIndex < index) {\n start = pivotPoint\n }\n\n if (pivotIndex > index) {\n end = pivotPoint\n }\n\n if (pivotIndex == index) {\n break\n }\n\n sliceLength = end - start\n pivotPoint = start + Math.floor(sliceLength / 2)\n pivotIndex = this.elements[pivotPoint * 2]\n }\n\n if (pivotIndex == index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex > index) {\n return pivotPoint * 2\n }\n\n if (pivotIndex < index) {\n return (pivotPoint + 1) * 2\n }\n}\n\n/**\n * Inserts an element at an index within the vector.\n *\n * Does not allow duplicates, will throw an error if there is already an entry\n * for this index.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n */\nlunr.Vector.prototype.insert = function (insertIdx, val) {\n this.upsert(insertIdx, val, function () {\n throw \"duplicate index\"\n })\n}\n\n/**\n * Inserts or updates an existing index within the vector.\n *\n * @param {Number} insertIdx - The index at which the element should be inserted.\n * @param {Number} val - The value to be inserted into the vector.\n * @param {function} fn - A function that is called for updates, the existing value and the\n * requested value are passed as arguments\n */\nlunr.Vector.prototype.upsert = function (insertIdx, val, fn) {\n this._magnitude = 0\n var position = this.positionForIndex(insertIdx)\n\n if (this.elements[position] == insertIdx) {\n this.elements[position + 1] = fn(this.elements[position + 1], val)\n } else {\n this.elements.splice(position, 0, insertIdx, val)\n }\n}\n\n/**\n * Calculates the magnitude of this vector.\n *\n * @returns {Number}\n */\nlunr.Vector.prototype.magnitude = function () {\n if (this._magnitude) return this._magnitude\n\n var sumOfSquares = 0,\n elementsLength = this.elements.length\n\n for (var i = 1; i < elementsLength; i += 2) {\n var val = this.elements[i]\n sumOfSquares += val * val\n }\n\n return this._magnitude = Math.sqrt(sumOfSquares)\n}\n\n/**\n * Calculates the dot product of this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The vector to compute the dot product with.\n * @returns {Number}\n */\nlunr.Vector.prototype.dot = function (otherVector) {\n var dotProduct = 0,\n a = this.elements, b = otherVector.elements,\n aLen = a.length, bLen = b.length,\n aVal = 0, bVal = 0,\n i = 0, j = 0\n\n while (i < aLen && j < bLen) {\n aVal = a[i], bVal = b[j]\n if (aVal < bVal) {\n i += 2\n } else if (aVal > bVal) {\n j += 2\n } else if (aVal == bVal) {\n dotProduct += a[i + 1] * b[j + 1]\n i += 2\n j += 2\n }\n }\n\n return dotProduct\n}\n\n/**\n * Calculates the similarity between this vector and another vector.\n *\n * @param {lunr.Vector} otherVector - The other vector to calculate the\n * similarity with.\n * @returns {Number}\n */\nlunr.Vector.prototype.similarity = function (otherVector) {\n return this.dot(otherVector) / this.magnitude() || 0\n}\n\n/**\n * Converts the vector to an array of the elements within the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toArray = function () {\n var output = new Array (this.elements.length / 2)\n\n for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {\n output[j] = this.elements[i]\n }\n\n return output\n}\n\n/**\n * A JSON serializable representation of the vector.\n *\n * @returns {Number[]}\n */\nlunr.Vector.prototype.toJSON = function () {\n return this.elements\n}\n/* eslint-disable */\n/*!\n * lunr.stemmer\n * Copyright (C) 2019 Oliver Nightingale\n * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt\n */\n\n/**\n * lunr.stemmer is an english language stemmer, this is a JavaScript\n * implementation of the PorterStemmer taken from http://tartarus.org/~martin\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token - The string to stem\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n * @function\n */\nlunr.stemmer = (function(){\n var step2list = {\n \"ational\" : \"ate\",\n \"tional\" : \"tion\",\n \"enci\" : \"ence\",\n \"anci\" : \"ance\",\n \"izer\" : \"ize\",\n \"bli\" : \"ble\",\n \"alli\" : \"al\",\n \"entli\" : \"ent\",\n \"eli\" : \"e\",\n \"ousli\" : \"ous\",\n \"ization\" : \"ize\",\n \"ation\" : \"ate\",\n \"ator\" : \"ate\",\n \"alism\" : \"al\",\n \"iveness\" : \"ive\",\n \"fulness\" : \"ful\",\n \"ousness\" : \"ous\",\n \"aliti\" : \"al\",\n \"iviti\" : \"ive\",\n \"biliti\" : \"ble\",\n \"logi\" : \"log\"\n },\n\n step3list = {\n \"icate\" : \"ic\",\n \"ative\" : \"\",\n \"alize\" : \"al\",\n \"iciti\" : \"ic\",\n \"ical\" : \"ic\",\n \"ful\" : \"\",\n \"ness\" : \"\"\n },\n\n c = \"[^aeiou]\", // consonant\n v = \"[aeiouy]\", // vowel\n C = c + \"[^aeiouy]*\", // consonant sequence\n V = v + \"[aeiou]*\", // vowel sequence\n\n mgr0 = \"^(\" + C + \")?\" + V + C, // [C]VC... is m>0\n meq1 = \"^(\" + C + \")?\" + V + C + \"(\" + V + \")?$\", // [C]VC[V] is m=1\n mgr1 = \"^(\" + C + \")?\" + V + C + V + C, // [C]VCVC... is m>1\n s_v = \"^(\" + C + \")?\" + v; // vowel in stem\n\n var re_mgr0 = new RegExp(mgr0);\n var re_mgr1 = new RegExp(mgr1);\n var re_meq1 = new RegExp(meq1);\n var re_s_v = new RegExp(s_v);\n\n var re_1a = /^(.+?)(ss|i)es$/;\n var re2_1a = /^(.+?)([^s])s$/;\n var re_1b = /^(.+?)eed$/;\n var re2_1b = /^(.+?)(ed|ing)$/;\n var re_1b_2 = /.$/;\n var re2_1b_2 = /(at|bl|iz)$/;\n var re3_1b_2 = new RegExp(\"([^aeiouylsz])\\\\1$\");\n var re4_1b_2 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var re_1c = /^(.+?[^aeiou])y$/;\n var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;\n\n var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;\n\n var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;\n var re2_4 = /^(.+?)(s|t)(ion)$/;\n\n var re_5 = /^(.+?)e$/;\n var re_5_1 = /ll$/;\n var re3_5 = new RegExp(\"^\" + C + v + \"[^aeiouwxy]$\");\n\n var porterStemmer = function porterStemmer(w) {\n var stem,\n suffix,\n firstch,\n re,\n re2,\n re3,\n re4;\n\n if (w.length < 3) { return w; }\n\n firstch = w.substr(0,1);\n if (firstch == \"y\") {\n w = firstch.toUpperCase() + w.substr(1);\n }\n\n // Step 1a\n re = re_1a\n re2 = re2_1a;\n\n if (re.test(w)) { w = w.replace(re,\"$1$2\"); }\n else if (re2.test(w)) { w = w.replace(re2,\"$1$2\"); }\n\n // Step 1b\n re = re_1b;\n re2 = re2_1b;\n if (re.test(w)) {\n var fp = re.exec(w);\n re = re_mgr0;\n if (re.test(fp[1])) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1];\n re2 = re_s_v;\n if (re2.test(stem)) {\n w = stem;\n re2 = re2_1b_2;\n re3 = re3_1b_2;\n re4 = re4_1b_2;\n if (re2.test(w)) { w = w + \"e\"; }\n else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,\"\"); }\n else if (re4.test(w)) { w = w + \"e\"; }\n }\n }\n\n // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)\n re = re_1c;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n w = stem + \"i\";\n }\n\n // Step 2\n re = re_2;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step2list[suffix];\n }\n }\n\n // Step 3\n re = re_3;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n suffix = fp[2];\n re = re_mgr0;\n if (re.test(stem)) {\n w = stem + step3list[suffix];\n }\n }\n\n // Step 4\n re = re_4;\n re2 = re2_4;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n if (re.test(stem)) {\n w = stem;\n }\n } else if (re2.test(w)) {\n var fp = re2.exec(w);\n stem = fp[1] + fp[2];\n re2 = re_mgr1;\n if (re2.test(stem)) {\n w = stem;\n }\n }\n\n // Step 5\n re = re_5;\n if (re.test(w)) {\n var fp = re.exec(w);\n stem = fp[1];\n re = re_mgr1;\n re2 = re_meq1;\n re3 = re3_5;\n if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {\n w = stem;\n }\n }\n\n re = re_5_1;\n re2 = re_mgr1;\n if (re.test(w) && re2.test(w)) {\n re = re_1b_2;\n w = w.replace(re,\"\");\n }\n\n // and turn initial Y back to y\n\n if (firstch == \"y\") {\n w = firstch.toLowerCase() + w.substr(1);\n }\n\n return w;\n };\n\n return function (token) {\n return token.update(porterStemmer);\n }\n})();\n\nlunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')\n/*!\n * lunr.stopWordFilter\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.generateStopWordFilter builds a stopWordFilter function from the provided\n * list of stop words.\n *\n * The built in lunr.stopWordFilter is built using this generator and can be used\n * to generate custom stopWordFilters for applications or non English languages.\n *\n * @function\n * @param {Array} token The token to pass through the filter\n * @returns {lunr.PipelineFunction}\n * @see lunr.Pipeline\n * @see lunr.stopWordFilter\n */\nlunr.generateStopWordFilter = function (stopWords) {\n var words = stopWords.reduce(function (memo, stopWord) {\n memo[stopWord] = stopWord\n return memo\n }, {})\n\n return function (token) {\n if (token && words[token.toString()] !== token.toString()) return token\n }\n}\n\n/**\n * lunr.stopWordFilter is an English language stop word list filter, any words\n * contained in the list will not be passed through the filter.\n *\n * This is intended to be used in the Pipeline. If the token does not pass the\n * filter then undefined will be returned.\n *\n * @function\n * @implements {lunr.PipelineFunction}\n * @params {lunr.Token} token - A token to check for being a stop word.\n * @returns {lunr.Token}\n * @see {@link lunr.Pipeline}\n */\nlunr.stopWordFilter = lunr.generateStopWordFilter([\n 'a',\n 'able',\n 'about',\n 'across',\n 'after',\n 'all',\n 'almost',\n 'also',\n 'am',\n 'among',\n 'an',\n 'and',\n 'any',\n 'are',\n 'as',\n 'at',\n 'be',\n 'because',\n 'been',\n 'but',\n 'by',\n 'can',\n 'cannot',\n 'could',\n 'dear',\n 'did',\n 'do',\n 'does',\n 'either',\n 'else',\n 'ever',\n 'every',\n 'for',\n 'from',\n 'get',\n 'got',\n 'had',\n 'has',\n 'have',\n 'he',\n 'her',\n 'hers',\n 'him',\n 'his',\n 'how',\n 'however',\n 'i',\n 'if',\n 'in',\n 'into',\n 'is',\n 'it',\n 'its',\n 'just',\n 'least',\n 'let',\n 'like',\n 'likely',\n 'may',\n 'me',\n 'might',\n 'most',\n 'must',\n 'my',\n 'neither',\n 'no',\n 'nor',\n 'not',\n 'of',\n 'off',\n 'often',\n 'on',\n 'only',\n 'or',\n 'other',\n 'our',\n 'own',\n 'rather',\n 'said',\n 'say',\n 'says',\n 'she',\n 'should',\n 'since',\n 'so',\n 'some',\n 'than',\n 'that',\n 'the',\n 'their',\n 'them',\n 'then',\n 'there',\n 'these',\n 'they',\n 'this',\n 'tis',\n 'to',\n 'too',\n 'twas',\n 'us',\n 'wants',\n 'was',\n 'we',\n 'were',\n 'what',\n 'when',\n 'where',\n 'which',\n 'while',\n 'who',\n 'whom',\n 'why',\n 'will',\n 'with',\n 'would',\n 'yet',\n 'you',\n 'your'\n])\n\nlunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')\n/*!\n * lunr.trimmer\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.trimmer is a pipeline function for trimming non word\n * characters from the beginning and end of tokens before they\n * enter the index.\n *\n * This implementation may not work correctly for non latin\n * characters and should either be removed or adapted for use\n * with languages with non-latin characters.\n *\n * @static\n * @implements {lunr.PipelineFunction}\n * @param {lunr.Token} token The token to pass through the filter\n * @returns {lunr.Token}\n * @see lunr.Pipeline\n */\nlunr.trimmer = function (token) {\n return token.update(function (s) {\n return s.replace(/^\\W+/, '').replace(/\\W+$/, '')\n })\n}\n\nlunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')\n/*!\n * lunr.TokenSet\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * A token set is used to store the unique list of all tokens\n * within an index. Token sets are also used to represent an\n * incoming query to the index, this query token set and index\n * token set are then intersected to find which tokens to look\n * up in the inverted index.\n *\n * A token set can hold multiple tokens, as in the case of the\n * index token set, or it can hold a single token as in the\n * case of a simple query token set.\n *\n * Additionally token sets are used to perform wildcard matching.\n * Leading, contained and trailing wildcards are supported, and\n * from this edit distance matching can also be provided.\n *\n * Token sets are implemented as a minimal finite state automata,\n * where both common prefixes and suffixes are shared between tokens.\n * This helps to reduce the space used for storing the token set.\n *\n * @constructor\n */\nlunr.TokenSet = function () {\n this.final = false\n this.edges = {}\n this.id = lunr.TokenSet._nextId\n lunr.TokenSet._nextId += 1\n}\n\n/**\n * Keeps track of the next, auto increment, identifier to assign\n * to a new tokenSet.\n *\n * TokenSets require a unique identifier to be correctly minimised.\n *\n * @private\n */\nlunr.TokenSet._nextId = 1\n\n/**\n * Creates a TokenSet instance from the given sorted array of words.\n *\n * @param {String[]} arr - A sorted array of strings to create the set from.\n * @returns {lunr.TokenSet}\n * @throws Will throw an error if the input array is not sorted.\n */\nlunr.TokenSet.fromArray = function (arr) {\n var builder = new lunr.TokenSet.Builder\n\n for (var i = 0, len = arr.length; i < len; i++) {\n builder.insert(arr[i])\n }\n\n builder.finish()\n return builder.root\n}\n\n/**\n * Creates a token set from a query clause.\n *\n * @private\n * @param {Object} clause - A single clause from lunr.Query.\n * @param {string} clause.term - The query clause term.\n * @param {number} [clause.editDistance] - The optional edit distance for the term.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromClause = function (clause) {\n if ('editDistance' in clause) {\n return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)\n } else {\n return lunr.TokenSet.fromString(clause.term)\n }\n}\n\n/**\n * Creates a token set representing a single string with a specified\n * edit distance.\n *\n * Insertions, deletions, substitutions and transpositions are each\n * treated as an edit distance of 1.\n *\n * Increasing the allowed edit distance will have a dramatic impact\n * on the performance of both creating and intersecting these TokenSets.\n * It is advised to keep the edit distance less than 3.\n *\n * @param {string} str - The string to create the token set from.\n * @param {number} editDistance - The allowed edit distance to match.\n * @returns {lunr.Vector}\n */\nlunr.TokenSet.fromFuzzyString = function (str, editDistance) {\n var root = new lunr.TokenSet\n\n var stack = [{\n node: root,\n editsRemaining: editDistance,\n str: str\n }]\n\n while (stack.length) {\n var frame = stack.pop()\n\n // no edit\n if (frame.str.length > 0) {\n var char = frame.str.charAt(0),\n noEditNode\n\n if (char in frame.node.edges) {\n noEditNode = frame.node.edges[char]\n } else {\n noEditNode = new lunr.TokenSet\n frame.node.edges[char] = noEditNode\n }\n\n if (frame.str.length == 1) {\n noEditNode.final = true\n }\n\n stack.push({\n node: noEditNode,\n editsRemaining: frame.editsRemaining,\n str: frame.str.slice(1)\n })\n }\n\n if (frame.editsRemaining == 0) {\n continue\n }\n\n // insertion\n if (\"*\" in frame.node.edges) {\n var insertionNode = frame.node.edges[\"*\"]\n } else {\n var insertionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = insertionNode\n }\n\n if (frame.str.length == 0) {\n insertionNode.final = true\n }\n\n stack.push({\n node: insertionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str\n })\n\n // deletion\n // can only do a deletion if we have enough edits remaining\n // and if there are characters left to delete in the string\n if (frame.str.length > 1) {\n stack.push({\n node: frame.node,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // deletion\n // just removing the last character from the str\n if (frame.str.length == 1) {\n frame.node.final = true\n }\n\n // substitution\n // can only do a substitution if we have enough edits remaining\n // and if there are characters left to substitute\n if (frame.str.length >= 1) {\n if (\"*\" in frame.node.edges) {\n var substitutionNode = frame.node.edges[\"*\"]\n } else {\n var substitutionNode = new lunr.TokenSet\n frame.node.edges[\"*\"] = substitutionNode\n }\n\n if (frame.str.length == 1) {\n substitutionNode.final = true\n }\n\n stack.push({\n node: substitutionNode,\n editsRemaining: frame.editsRemaining - 1,\n str: frame.str.slice(1)\n })\n }\n\n // transposition\n // can only do a transposition if there are edits remaining\n // and there are enough characters to transpose\n if (frame.str.length > 1) {\n var charA = frame.str.charAt(0),\n charB = frame.str.charAt(1),\n transposeNode\n\n if (charB in frame.node.edges) {\n transposeNode = frame.node.edges[charB]\n } else {\n transposeNode = new lunr.TokenSet\n frame.node.edges[charB] = transposeNode\n }\n\n if (frame.str.length == 1) {\n transposeNode.final = true\n }\n\n stack.push({\n node: transposeNode,\n editsRemaining: frame.editsRemaining - 1,\n str: charA + frame.str.slice(2)\n })\n }\n }\n\n return root\n}\n\n/**\n * Creates a TokenSet from a string.\n *\n * The string may contain one or more wildcard characters (*)\n * that will allow wildcard matching when intersecting with\n * another TokenSet.\n *\n * @param {string} str - The string to create a TokenSet from.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.fromString = function (str) {\n var node = new lunr.TokenSet,\n root = node\n\n /*\n * Iterates through all characters within the passed string\n * appending a node for each character.\n *\n * When a wildcard character is found then a self\n * referencing edge is introduced to continually match\n * any number of any characters.\n */\n for (var i = 0, len = str.length; i < len; i++) {\n var char = str[i],\n final = (i == len - 1)\n\n if (char == \"*\") {\n node.edges[char] = node\n node.final = final\n\n } else {\n var next = new lunr.TokenSet\n next.final = final\n\n node.edges[char] = next\n node = next\n }\n }\n\n return root\n}\n\n/**\n * Converts this TokenSet into an array of strings\n * contained within the TokenSet.\n *\n * @returns {string[]}\n */\nlunr.TokenSet.prototype.toArray = function () {\n var words = []\n\n var stack = [{\n prefix: \"\",\n node: this\n }]\n\n while (stack.length) {\n var frame = stack.pop(),\n edges = Object.keys(frame.node.edges),\n len = edges.length\n\n if (frame.node.final) {\n /* In Safari, at this point the prefix is sometimes corrupted, see:\n * https://github.com/olivernn/lunr.js/issues/279 Calling any\n * String.prototype method forces Safari to \"cast\" this string to what\n * it's supposed to be, fixing the bug. */\n frame.prefix.charAt(0)\n words.push(frame.prefix)\n }\n\n for (var i = 0; i < len; i++) {\n var edge = edges[i]\n\n stack.push({\n prefix: frame.prefix.concat(edge),\n node: frame.node.edges[edge]\n })\n }\n }\n\n return words\n}\n\n/**\n * Generates a string representation of a TokenSet.\n *\n * This is intended to allow TokenSets to be used as keys\n * in objects, largely to aid the construction and minimisation\n * of a TokenSet. As such it is not designed to be a human\n * friendly representation of the TokenSet.\n *\n * @returns {string}\n */\nlunr.TokenSet.prototype.toString = function () {\n // NOTE: Using Object.keys here as this.edges is very likely\n // to enter 'hash-mode' with many keys being added\n //\n // avoiding a for-in loop here as it leads to the function\n // being de-optimised (at least in V8). From some simple\n // benchmarks the performance is comparable, but allowing\n // V8 to optimize may mean easy performance wins in the future.\n\n if (this._str) {\n return this._str\n }\n\n var str = this.final ? '1' : '0',\n labels = Object.keys(this.edges).sort(),\n len = labels.length\n\n for (var i = 0; i < len; i++) {\n var label = labels[i],\n node = this.edges[label]\n\n str = str + label + node.id\n }\n\n return str\n}\n\n/**\n * Returns a new TokenSet that is the intersection of\n * this TokenSet and the passed TokenSet.\n *\n * This intersection will take into account any wildcards\n * contained within the TokenSet.\n *\n * @param {lunr.TokenSet} b - An other TokenSet to intersect with.\n * @returns {lunr.TokenSet}\n */\nlunr.TokenSet.prototype.intersect = function (b) {\n var output = new lunr.TokenSet,\n frame = undefined\n\n var stack = [{\n qNode: b,\n output: output,\n node: this\n }]\n\n while (stack.length) {\n frame = stack.pop()\n\n // NOTE: As with the #toString method, we are using\n // Object.keys and a for loop instead of a for-in loop\n // as both of these objects enter 'hash' mode, causing\n // the function to be de-optimised in V8\n var qEdges = Object.keys(frame.qNode.edges),\n qLen = qEdges.length,\n nEdges = Object.keys(frame.node.edges),\n nLen = nEdges.length\n\n for (var q = 0; q < qLen; q++) {\n var qEdge = qEdges[q]\n\n for (var n = 0; n < nLen; n++) {\n var nEdge = nEdges[n]\n\n if (nEdge == qEdge || qEdge == '*') {\n var node = frame.node.edges[nEdge],\n qNode = frame.qNode.edges[qEdge],\n final = node.final && qNode.final,\n next = undefined\n\n if (nEdge in frame.output.edges) {\n // an edge already exists for this character\n // no need to create a new node, just set the finality\n // bit unless this node is already final\n next = frame.output.edges[nEdge]\n next.final = next.final || final\n\n } else {\n // no edge exists yet, must create one\n // set the finality bit and insert it\n // into the output\n next = new lunr.TokenSet\n next.final = final\n frame.output.edges[nEdge] = next\n }\n\n stack.push({\n qNode: qNode,\n output: next,\n node: node\n })\n }\n }\n }\n }\n\n return output\n}\nlunr.TokenSet.Builder = function () {\n this.previousWord = \"\"\n this.root = new lunr.TokenSet\n this.uncheckedNodes = []\n this.minimizedNodes = {}\n}\n\nlunr.TokenSet.Builder.prototype.insert = function (word) {\n var node,\n commonPrefix = 0\n\n if (word < this.previousWord) {\n throw new Error (\"Out of order word insertion\")\n }\n\n for (var i = 0; i < word.length && i < this.previousWord.length; i++) {\n if (word[i] != this.previousWord[i]) break\n commonPrefix++\n }\n\n this.minimize(commonPrefix)\n\n if (this.uncheckedNodes.length == 0) {\n node = this.root\n } else {\n node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child\n }\n\n for (var i = commonPrefix; i < word.length; i++) {\n var nextNode = new lunr.TokenSet,\n char = word[i]\n\n node.edges[char] = nextNode\n\n this.uncheckedNodes.push({\n parent: node,\n char: char,\n child: nextNode\n })\n\n node = nextNode\n }\n\n node.final = true\n this.previousWord = word\n}\n\nlunr.TokenSet.Builder.prototype.finish = function () {\n this.minimize(0)\n}\n\nlunr.TokenSet.Builder.prototype.minimize = function (downTo) {\n for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {\n var node = this.uncheckedNodes[i],\n childKey = node.child.toString()\n\n if (childKey in this.minimizedNodes) {\n node.parent.edges[node.char] = this.minimizedNodes[childKey]\n } else {\n // Cache the key for this node since\n // we know it can't change anymore\n node.child._str = childKey\n\n this.minimizedNodes[childKey] = node.child\n }\n\n this.uncheckedNodes.pop()\n }\n}\n/*!\n * lunr.Index\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * An index contains the built index of all documents and provides a query interface\n * to the index.\n *\n * Usually instances of lunr.Index will not be created using this constructor, instead\n * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be\n * used to load previously built and serialized indexes.\n *\n * @constructor\n * @param {Object} attrs - The attributes of the built search index.\n * @param {Object} attrs.invertedIndex - An index of term/field to document reference.\n * @param {Object<string, lunr.Vector>} attrs.fieldVectors - Field vectors\n * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.\n * @param {string[]} attrs.fields - The names of indexed document fields.\n * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.\n */\nlunr.Index = function (attrs) {\n this.invertedIndex = attrs.invertedIndex\n this.fieldVectors = attrs.fieldVectors\n this.tokenSet = attrs.tokenSet\n this.fields = attrs.fields\n this.pipeline = attrs.pipeline\n}\n\n/**\n * A result contains details of a document matching a search query.\n * @typedef {Object} lunr.Index~Result\n * @property {string} ref - The reference of the document this result represents.\n * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.\n * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.\n */\n\n/**\n * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple\n * query language which itself is parsed into an instance of lunr.Query.\n *\n * For programmatically building queries it is advised to directly use lunr.Query, the query language\n * is best used for human entered text rather than program generated text.\n *\n * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported\n * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'\n * or 'world', though those that contain both will rank higher in the results.\n *\n * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can\n * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding\n * wildcards will increase the number of documents that will be found but can also have a negative\n * impact on query performance, especially with wildcards at the beginning of a term.\n *\n * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term\n * hello in the title field will match this query. Using a field not present in the index will lead\n * to an error being thrown.\n *\n * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term\n * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported\n * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.\n * Avoid large values for edit distance to improve query performance.\n *\n * Each term also supports a presence modifier. By default a term's presence in document is optional, however\n * this can be changed to either required or prohibited. For a term's presence to be required in a document the\n * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and\n * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not\n * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.\n *\n * To escape special characters the backslash character '\\' can be used, this allows searches to include\n * characters that would normally be considered modifiers, e.g. `foo\\~2` will search for a term \"foo~2\" instead\n * of attempting to apply a boost of 2 to the search term \"foo\".\n *\n * @typedef {string} lunr.Index~QueryString\n * @example <caption>Simple single term query</caption>\n * hello\n * @example <caption>Multiple term query</caption>\n * hello world\n * @example <caption>term scoped to a field</caption>\n * title:hello\n * @example <caption>term with a boost of 10</caption>\n * hello^10\n * @example <caption>term with an edit distance of 2</caption>\n * hello~2\n * @example <caption>terms with presence modifiers</caption>\n * -foo +bar baz\n */\n\n/**\n * Performs a search against the index using lunr query syntax.\n *\n * Results will be returned sorted by their score, the most relevant results\n * will be returned first. For details on how the score is calculated, please see\n * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.\n *\n * For more programmatic querying use lunr.Index#query.\n *\n * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.\n * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.search = function (queryString) {\n return this.query(function (query) {\n var parser = new lunr.QueryParser(queryString, query)\n parser.parse()\n })\n}\n\n/**\n * A query builder callback provides a query object to be used to express\n * the query to perform on the index.\n *\n * @callback lunr.Index~queryBuilder\n * @param {lunr.Query} query - The query object to build up.\n * @this lunr.Query\n */\n\n/**\n * Performs a query against the index using the yielded lunr.Query object.\n *\n * If performing programmatic queries against the index, this method is preferred\n * over lunr.Index#search so as to avoid the additional query parsing overhead.\n *\n * A query object is yielded to the supplied function which should be used to\n * express the query to be run against the index.\n *\n * Note that although this function takes a callback parameter it is _not_ an\n * asynchronous operation, the callback is just yielded a query object to be\n * customized.\n *\n * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.\n * @returns {lunr.Index~Result[]}\n */\nlunr.Index.prototype.query = function (fn) {\n // for each query clause\n // * process terms\n // * expand terms from token set\n // * find matching documents and metadata\n // * get document vectors\n // * score documents\n\n var query = new lunr.Query(this.fields),\n matchingFields = Object.create(null),\n queryVectors = Object.create(null),\n termFieldCache = Object.create(null),\n requiredMatches = Object.create(null),\n prohibitedMatches = Object.create(null)\n\n /*\n * To support field level boosts a query vector is created per\n * field. An empty vector is eagerly created to support negated\n * queries.\n */\n for (var i = 0; i < this.fields.length; i++) {\n queryVectors[this.fields[i]] = new lunr.Vector\n }\n\n fn.call(query, query)\n\n for (var i = 0; i < query.clauses.length; i++) {\n /*\n * Unless the pipeline has been disabled for this term, which is\n * the case for terms with wildcards, we need to pass the clause\n * term through the search pipeline. A pipeline returns an array\n * of processed terms. Pipeline functions may expand the passed\n * term, which means we may end up performing multiple index lookups\n * for a single query term.\n */\n var clause = query.clauses[i],\n terms = null,\n clauseMatches = lunr.Set.complete\n\n if (clause.usePipeline) {\n terms = this.pipeline.runString(clause.term, {\n fields: clause.fields\n })\n } else {\n terms = [clause.term]\n }\n\n for (var m = 0; m < terms.length; m++) {\n var term = terms[m]\n\n /*\n * Each term returned from the pipeline needs to use the same query\n * clause object, e.g. the same boost and or edit distance. The\n * simplest way to do this is to re-use the clause object but mutate\n * its term property.\n */\n clause.term = term\n\n /*\n * From the term in the clause we create a token set which will then\n * be used to intersect the indexes token set to get a list of terms\n * to lookup in the inverted index\n */\n var termTokenSet = lunr.TokenSet.fromClause(clause),\n expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()\n\n /*\n * If a term marked as required does not exist in the tokenSet it is\n * impossible for the search to return any matches. We set all the field\n * scoped required matches set to empty and stop examining any further\n * clauses.\n */\n if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = lunr.Set.empty\n }\n\n break\n }\n\n for (var j = 0; j < expandedTerms.length; j++) {\n /*\n * For each term get the posting and termIndex, this is required for\n * building the query vector.\n */\n var expandedTerm = expandedTerms[j],\n posting = this.invertedIndex[expandedTerm],\n termIndex = posting._index\n\n for (var k = 0; k < clause.fields.length; k++) {\n /*\n * For each field that this query term is scoped by (by default\n * all fields are in scope) we need to get all the document refs\n * that have this term in that field.\n *\n * The posting is the entry in the invertedIndex for the matching\n * term from above.\n */\n var field = clause.fields[k],\n fieldPosting = posting[field],\n matchingDocumentRefs = Object.keys(fieldPosting),\n termField = expandedTerm + \"/\" + field,\n matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)\n\n /*\n * if the presence of this term is required ensure that the matching\n * documents are added to the set of required matches for this clause.\n *\n */\n if (clause.presence == lunr.Query.presence.REQUIRED) {\n clauseMatches = clauseMatches.union(matchingDocumentsSet)\n\n if (requiredMatches[field] === undefined) {\n requiredMatches[field] = lunr.Set.complete\n }\n }\n\n /*\n * if the presence of this term is prohibited ensure that the matching\n * documents are added to the set of prohibited matches for this field,\n * creating that set if it does not yet exist.\n */\n if (clause.presence == lunr.Query.presence.PROHIBITED) {\n if (prohibitedMatches[field] === undefined) {\n prohibitedMatches[field] = lunr.Set.empty\n }\n\n prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)\n\n /*\n * Prohibited matches should not be part of the query vector used for\n * similarity scoring and no metadata should be extracted so we continue\n * to the next field\n */\n continue\n }\n\n /*\n * The query field vector is populated using the termIndex found for\n * the term and a unit value with the appropriate boost applied.\n * Using upsert because there could already be an entry in the vector\n * for the term we are working with. In that case we just add the scores\n * together.\n */\n queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })\n\n /**\n * If we've already seen this term, field combo then we've already collected\n * the matching documents and metadata, no need to go through all that again\n */\n if (termFieldCache[termField]) {\n continue\n }\n\n for (var l = 0; l < matchingDocumentRefs.length; l++) {\n /*\n * All metadata for this term/field/document triple\n * are then extracted and collected into an instance\n * of lunr.MatchData ready to be returned in the query\n * results\n */\n var matchingDocumentRef = matchingDocumentRefs[l],\n matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),\n metadata = fieldPosting[matchingDocumentRef],\n fieldMatch\n\n if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {\n matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)\n } else {\n fieldMatch.add(expandedTerm, field, metadata)\n }\n\n }\n\n termFieldCache[termField] = true\n }\n }\n }\n\n /**\n * If the presence was required we need to update the requiredMatches field sets.\n * We do this after all fields for the term have collected their matches because\n * the clause terms presence is required in _any_ of the fields not _all_ of the\n * fields.\n */\n if (clause.presence === lunr.Query.presence.REQUIRED) {\n for (var k = 0; k < clause.fields.length; k++) {\n var field = clause.fields[k]\n requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)\n }\n }\n }\n\n /**\n * Need to combine the field scoped required and prohibited\n * matching documents into a global set of required and prohibited\n * matches\n */\n var allRequiredMatches = lunr.Set.complete,\n allProhibitedMatches = lunr.Set.empty\n\n for (var i = 0; i < this.fields.length; i++) {\n var field = this.fields[i]\n\n if (requiredMatches[field]) {\n allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])\n }\n\n if (prohibitedMatches[field]) {\n allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])\n }\n }\n\n var matchingFieldRefs = Object.keys(matchingFields),\n results = [],\n matches = Object.create(null)\n\n /*\n * If the query is negated (contains only prohibited terms)\n * we need to get _all_ fieldRefs currently existing in the\n * index. This is only done when we know that the query is\n * entirely prohibited terms to avoid any cost of getting all\n * fieldRefs unnecessarily.\n *\n * Additionally, blank MatchData must be created to correctly\n * populate the results.\n */\n if (query.isNegated()) {\n matchingFieldRefs = Object.keys(this.fieldVectors)\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n var matchingFieldRef = matchingFieldRefs[i]\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)\n matchingFields[matchingFieldRef] = new lunr.MatchData\n }\n }\n\n for (var i = 0; i < matchingFieldRefs.length; i++) {\n /*\n * Currently we have document fields that match the query, but we\n * need to return documents. The matchData and scores are combined\n * from multiple fields belonging to the same document.\n *\n * Scores are calculated by field, using the query vectors created\n * above, and combined into a final document score using addition.\n */\n var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),\n docRef = fieldRef.docRef\n\n if (!allRequiredMatches.contains(docRef)) {\n continue\n }\n\n if (allProhibitedMatches.contains(docRef)) {\n continue\n }\n\n var fieldVector = this.fieldVectors[fieldRef],\n score = queryVectors[fieldRef.fieldName].similarity(fieldVector),\n docMatch\n\n if ((docMatch = matches[docRef]) !== undefined) {\n docMatch.score += score\n docMatch.matchData.combine(matchingFields[fieldRef])\n } else {\n var match = {\n ref: docRef,\n score: score,\n matchData: matchingFields[fieldRef]\n }\n matches[docRef] = match\n results.push(match)\n }\n }\n\n /*\n * Sort the results objects by score, highest first.\n */\n return results.sort(function (a, b) {\n return b.score - a.score\n })\n}\n\n/**\n * Prepares the index for JSON serialization.\n *\n * The schema for this JSON blob will be described in a\n * separate JSON schema file.\n *\n * @returns {Object}\n */\nlunr.Index.prototype.toJSON = function () {\n var invertedIndex = Object.keys(this.invertedIndex)\n .sort()\n .map(function (term) {\n return [term, this.invertedIndex[term]]\n }, this)\n\n var fieldVectors = Object.keys(this.fieldVectors)\n .map(function (ref) {\n return [ref, this.fieldVectors[ref].toJSON()]\n }, this)\n\n return {\n version: lunr.version,\n fields: this.fields,\n fieldVectors: fieldVectors,\n invertedIndex: invertedIndex,\n pipeline: this.pipeline.toJSON()\n }\n}\n\n/**\n * Loads a previously serialized lunr.Index\n *\n * @param {Object} serializedIndex - A previously serialized lunr.Index\n * @returns {lunr.Index}\n */\nlunr.Index.load = function (serializedIndex) {\n var attrs = {},\n fieldVectors = {},\n serializedVectors = serializedIndex.fieldVectors,\n invertedIndex = Object.create(null),\n serializedInvertedIndex = serializedIndex.invertedIndex,\n tokenSetBuilder = new lunr.TokenSet.Builder,\n pipeline = lunr.Pipeline.load(serializedIndex.pipeline)\n\n if (serializedIndex.version != lunr.version) {\n lunr.utils.warn(\"Version mismatch when loading serialised index. Current version of lunr '\" + lunr.version + \"' does not match serialized index '\" + serializedIndex.version + \"'\")\n }\n\n for (var i = 0; i < serializedVectors.length; i++) {\n var tuple = serializedVectors[i],\n ref = tuple[0],\n elements = tuple[1]\n\n fieldVectors[ref] = new lunr.Vector(elements)\n }\n\n for (var i = 0; i < serializedInvertedIndex.length; i++) {\n var tuple = serializedInvertedIndex[i],\n term = tuple[0],\n posting = tuple[1]\n\n tokenSetBuilder.insert(term)\n invertedIndex[term] = posting\n }\n\n tokenSetBuilder.finish()\n\n attrs.fields = serializedIndex.fields\n\n attrs.fieldVectors = fieldVectors\n attrs.invertedIndex = invertedIndex\n attrs.tokenSet = tokenSetBuilder.root\n attrs.pipeline = pipeline\n\n return new lunr.Index(attrs)\n}\n/*!\n * lunr.Builder\n * Copyright (C) 2019 Oliver Nightingale\n */\n\n/**\n * lunr.Builder performs indexing on a set of documents and\n * returns instances of lunr.Index ready for querying.\n *\n * All configuration of the index is done via the builder, the\n * fields to index, the document reference, the text processing\n * pipeline and document scoring parameters are all set on the\n * builder before indexing.\n *\n * @constructor\n * @property {string} _ref - Internal reference to the document reference field.\n * @property {string[]} _fields - Internal reference to the document fields to index.\n * @property {object} invertedIndex - The inverted index maps terms to document fields.\n * @property {object} documentTermFrequencies - Keeps track of document term frequencies.\n * @property {object} documentLengths - Keeps track of the length of documents added to the index.\n * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.\n * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.\n * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.\n * @property {number} documentCount - Keeps track of the total number of documents indexed.\n * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.\n * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.\n * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.\n * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.\n */\nlunr.Builder = function () {\n this._ref = \"id\"\n this._fields = Object.create(null)\n this._documents = Object.create(null)\n this.invertedIndex = Object.create(null)\n this.fieldTermFrequencies = {}\n this.fieldLengths = {}\n this.tokenizer = lunr.tokenizer\n this.pipeline = new lunr.Pipeline\n this.searchPipeline = new lunr.Pipeline\n this.documentCount = 0\n this._b = 0.75\n this._k1 = 1.2\n this.termIndex = 0\n this.metadataWhitelist = []\n}\n\n/**\n * Sets the document field used as the document reference. Every document must have this field.\n * The type of this field in the document should be a string, if it is not a string it will be\n * coerced into a string by calling toString.\n *\n * The default ref is 'id'.\n *\n * The ref should _not_ be changed during indexing, it should be set before any documents are\n * added to the index. Changing it during indexing can lead to inconsistent results.\n *\n * @param {string} ref - The name of the reference field in the document.\n */\nlunr.Builder.prototype.ref = function (ref) {\n this._ref = ref\n}\n\n/**\n * A function that is used to extract a field from a document.\n *\n * Lunr expects a field to be at the top level of a document, if however the field\n * is deeply nested within a document an extractor function can be used to extract\n * the right field for indexing.\n *\n * @callback fieldExtractor\n * @param {object} doc - The document being added to the index.\n * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.\n * @example <caption>Extracting a nested field</caption>\n * function (doc) { return doc.nested.field }\n */\n\n/**\n * Adds a field to the list of document fields that will be indexed. Every document being\n * indexed should have this field. Null values for this field in indexed documents will\n * not cause errors but will limit the chance of that document being retrieved by searches.\n *\n * All fields should be added before adding documents to the index. Adding fields after\n * a document has been indexed will have no effect on already indexed documents.\n *\n * Fields can be boosted at build time. This allows terms within that field to have more\n * importance when ranking search results. Use a field boost to specify that matches within\n * one field are more important than other fields.\n *\n * @param {string} fieldName - The name of a field to index in all documents.\n * @param {object} attributes - Optional attributes associated with this field.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.\n * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.\n * @throws {RangeError} fieldName cannot contain unsupported characters '/'\n */\nlunr.Builder.prototype.field = function (fieldName, attributes) {\n if (/\\//.test(fieldName)) {\n throw new RangeError (\"Field '\" + fieldName + \"' contains illegal character '/'\")\n }\n\n this._fields[fieldName] = attributes || {}\n}\n\n/**\n * A parameter to tune the amount of field length normalisation that is applied when\n * calculating relevance scores. A value of 0 will completely disable any normalisation\n * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b\n * will be clamped to the range 0 - 1.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.b = function (number) {\n if (number < 0) {\n this._b = 0\n } else if (number > 1) {\n this._b = 1\n } else {\n this._b = number\n }\n}\n\n/**\n * A parameter that controls the speed at which a rise in term frequency results in term\n * frequency saturation. The default value is 1.2. Setting this to a higher value will give\n * slower saturation levels, a lower value will result in quicker saturation.\n *\n * @param {number} number - The value to set for this tuning parameter.\n */\nlunr.Builder.prototype.k1 = function (number) {\n this._k1 = number\n}\n\n/**\n * Adds a document to the index.\n *\n * Before adding fields to the index the index should have been fully setup, with the document\n * ref and all fields to index already having been specified.\n *\n * The document must have a field name as specified by the ref (by default this is 'id') and\n * it should have all fields defined for indexing, though null or undefined values will not\n * cause errors.\n *\n * Entire documents can be boosted at build time. Applying a boost to a document indicates that\n * this document should rank higher in search results than other documents.\n *\n * @param {object} doc - The document to add to the index.\n * @param {object} attributes - Optional attributes associated with this document.\n * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.\n */\nlunr.Builder.prototype.add = function (doc, attributes) {\n var docRef = doc[this._ref],\n fields = Object.keys(this._fields)\n\n this._documents[docRef] = attributes || {}\n this.documentCount += 1\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i],\n extractor = this._fields[fieldName].extractor,\n field = extractor ? extractor(doc) : doc[fieldName],\n tokens = this.tokenizer(field, {\n fields: [fieldName]\n }),\n terms = this.pipeline.run(tokens),\n fieldRef = new lunr.FieldRef (docRef, fieldName),\n fieldTerms = Object.create(null)\n\n this.fieldTermFrequencies[fieldRef] = fieldTerms\n this.fieldLengths[fieldRef] = 0\n\n // store the length of this field for this document\n this.fieldLengths[fieldRef] += terms.length\n\n // calculate term frequencies for this field\n for (var j = 0; j < terms.length; j++) {\n var term = terms[j]\n\n if (fieldTerms[term] == undefined) {\n fieldTerms[term] = 0\n }\n\n fieldTerms[term] += 1\n\n // add to inverted index\n // create an initial posting if one doesn't exist\n if (this.invertedIndex[term] == undefined) {\n var posting = Object.create(null)\n posting[\"_index\"] = this.termIndex\n this.termIndex += 1\n\n for (var k = 0; k < fields.length; k++) {\n posting[fields[k]] = Object.create(null)\n }\n\n this.invertedIndex[term] = posting\n }\n\n // add an entry for this term/fieldName/docRef to the invertedIndex\n if (this.invertedIndex[term][fieldName][docRef] == undefined) {\n this.invertedIndex[term][fieldName][docRef] = Object.create(null)\n }\n\n // store all whitelisted metadata about this token in the\n // inverted index\n for (var l = 0; l < this.metadataWhitelist.length; l++) {\n var metadataKey = this.metadataWhitelist[l],\n metadata = term.metadata[metadataKey]\n\n if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {\n this.invertedIndex[term][fieldName][docRef][metadataKey] = []\n }\n\n this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)\n }\n }\n\n }\n}\n\n/**\n * Calculates the average document length for this index\n *\n * @private\n */\nlunr.Builder.prototype.calculateAverageFieldLengths = function () {\n\n var fieldRefs = Object.keys(this.fieldLengths),\n numberOfFields = fieldRefs.length,\n accumulator = {},\n documentsWithField = {}\n\n for (var i = 0; i < numberOfFields; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n field = fieldRef.fieldName\n\n documentsWithField[field] || (documentsWithField[field] = 0)\n documentsWithField[field] += 1\n\n accumulator[field] || (accumulator[field] = 0)\n accumulator[field] += this.fieldLengths[fieldRef]\n }\n\n var fields = Object.keys(this._fields)\n\n for (var i = 0; i < fields.length; i++) {\n var fieldName = fields[i]\n accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]\n }\n\n this.averageFieldLength = accumulator\n}\n\n/**\n * Builds a vector space model of every document using lunr.Vector\n *\n * @private\n */\nlunr.Builder.prototype.createFieldVectors = function () {\n var fieldVectors = {},\n fieldRefs = Object.keys(this.fieldTermFrequencies),\n fieldRefsLength = fieldRefs.length,\n termIdfCache = Object.create(null)\n\n for (var i = 0; i < fieldRefsLength; i++) {\n var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),\n fieldName = fieldRef.fieldName,\n fieldLength = this.fieldLengths[fieldRef],\n fieldVector = new lunr.Vector,\n termFrequencies = this.fieldTermFrequencies[fieldRef],\n terms = Object.keys(termFrequencies),\n termsLength = terms.length\n\n\n var fieldBoost = this._fields[fieldName].boost || 1,\n docBoost = this._documents[fieldRef.docRef].boost || 1\n\n for (var j = 0; j < termsLength; j++) {\n var term = terms[j],\n tf = termFrequencies[term],\n termIndex = this.invertedIndex[term]._index,\n idf, score, scoreWithPrecision\n\n if (termIdfCache[term] === undefined) {\n idf = lunr.idf(this.invertedIndex[term], this.documentCount)\n termIdfCache[term] = idf\n } else {\n idf = termIdfCache[term]\n }\n\n score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)\n score *= fieldBoost\n score *= docBoost\n scoreWithPrecision = Math.round(score * 1000) / 1000\n // Converts 1.23456789 to 1.234.\n // Reducing the precision so that the vectors take up less\n // space when serialised. Doing it now so that they behave\n // the same before and after serialisation. Also, this is\n // the fastest approach to reducing a number's precision in\n // JavaScript.\n\n fieldVector.insert(termIndex, scoreWithPrecision)\n }\n\n fieldVectors[fieldRef] = fieldVector\n }\n\n this.fieldVectors = fieldVectors\n}\n\n/**\n * Creates a token set of all tokens in the index using lunr.TokenSet\n *\n * @private\n */\nlunr.Builder.prototype.createTokenSet = function () {\n this.tokenSet = lunr.TokenSet.fromArray(\n Object.keys(this.invertedIndex).sort()\n )\n}\n\n/**\n * Builds the index, creating an instance of lunr.Index.\n *\n * This completes the indexing process and should only be called\n * once all documents have been added to the index.\n *\n * @returns {lunr.Index}\n */\nlunr.Builder.prototype.build = function () {\n this.calculateAverageFieldLengths()\n this.createFieldVectors()\n this.createTokenSet()\n\n return new lunr.Index({\n invertedIndex: this.invertedIndex,\n fieldVectors: this.fieldVectors,\n tokenSet: this.tokenSet,\n fields: Object.keys(this._fields),\n pipeline: this.searchPipeline\n })\n}\n\n/**\n * Applies a plugin to the index builder.\n *\n * A plugin is a function that is called with the index builder as its context.\n * Plugins can be used to customise or extend the behaviour of the index\n * in some way. A plugin is just a function, that encapsulated the custom\n * behaviour that should be applied when building the index.\n *\n * The plugin function will be called with the index builder as its argument, additional\n * arguments can also be passed when calling use. The function will be called\n * with the index builder as its context.\n *\n * @param {Function} plugin The plugin to apply.\n */\nlunr.Builder.prototype.use = function (fn) {\n var args = Array.prototype.slice.call(arguments, 1)\n args.unshift(this)\n fn.apply(this, args)\n}\n/**\n * Contains and collects metadata about a matching document.\n * A single instance of lunr.MatchData is returned as part of every\n * lunr.Index~Result.\n *\n * @constructor\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n * @property {object} metadata - A cloned collection of metadata associated with this document.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData = function (term, field, metadata) {\n var clonedMetadata = Object.create(null),\n metadataKeys = Object.keys(metadata || {})\n\n // Cloning the metadata to prevent the original\n // being mutated during match data combination.\n // Metadata is kept in an array within the inverted\n // index so cloning the data can be done with\n // Array#slice\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n clonedMetadata[key] = metadata[key].slice()\n }\n\n this.metadata = Object.create(null)\n\n if (term !== undefined) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = clonedMetadata\n }\n}\n\n/**\n * An instance of lunr.MatchData will be created for every term that matches a\n * document. However only one instance is required in a lunr.Index~Result. This\n * method combines metadata from another instance of lunr.MatchData with this\n * objects metadata.\n *\n * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.\n * @see {@link lunr.Index~Result}\n */\nlunr.MatchData.prototype.combine = function (otherMatchData) {\n var terms = Object.keys(otherMatchData.metadata)\n\n for (var i = 0; i < terms.length; i++) {\n var term = terms[i],\n fields = Object.keys(otherMatchData.metadata[term])\n\n if (this.metadata[term] == undefined) {\n this.metadata[term] = Object.create(null)\n }\n\n for (var j = 0; j < fields.length; j++) {\n var field = fields[j],\n keys = Object.keys(otherMatchData.metadata[term][field])\n\n if (this.metadata[term][field] == undefined) {\n this.metadata[term][field] = Object.create(null)\n }\n\n for (var k = 0; k < keys.length; k++) {\n var key = keys[k]\n\n if (this.metadata[term][field][key] == undefined) {\n this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]\n } else {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])\n }\n\n }\n }\n }\n}\n\n/**\n * Add metadata for a term/field pair to this instance of match data.\n *\n * @param {string} term - The term this match data is associated with\n * @param {string} field - The field in which the term was found\n * @param {object} metadata - The metadata recorded about this term in this field\n */\nlunr.MatchData.prototype.add = function (term, field, metadata) {\n if (!(term in this.metadata)) {\n this.metadata[term] = Object.create(null)\n this.metadata[term][field] = metadata\n return\n }\n\n if (!(field in this.metadata[term])) {\n this.metadata[term][field] = metadata\n return\n }\n\n var metadataKeys = Object.keys(metadata)\n\n for (var i = 0; i < metadataKeys.length; i++) {\n var key = metadataKeys[i]\n\n if (key in this.metadata[term][field]) {\n this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])\n } else {\n this.metadata[term][field][key] = metadata[key]\n }\n }\n}\n/**\n * A lunr.Query provides a programmatic way of defining queries to be performed\n * against a {@link lunr.Index}.\n *\n * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method\n * so the query object is pre-initialized with the right index fields.\n *\n * @constructor\n * @property {lunr.Query~Clause[]} clauses - An array of query clauses.\n * @property {string[]} allFields - An array of all available fields in a lunr.Index.\n */\nlunr.Query = function (allFields) {\n this.clauses = []\n this.allFields = allFields\n}\n\n/**\n * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.\n *\n * This allows wildcards to be added to the beginning and end of a term without having to manually do any string\n * concatenation.\n *\n * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.\n *\n * @constant\n * @default\n * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour\n * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists\n * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example <caption>query term with trailing wildcard</caption>\n * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })\n * @example <caption>query term with leading and trailing wildcard</caption>\n * query.term('foo', {\n * wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING\n * })\n */\n\nlunr.Query.wildcard = new String (\"*\")\nlunr.Query.wildcard.NONE = 0\nlunr.Query.wildcard.LEADING = 1\nlunr.Query.wildcard.TRAILING = 2\n\n/**\n * Constants for indicating what kind of presence a term must have in matching documents.\n *\n * @constant\n * @enum {number}\n * @see lunr.Query~Clause\n * @see lunr.Query#clause\n * @see lunr.Query#term\n * @example <caption>query term with required presence</caption>\n * query.term('foo', { presence: lunr.Query.presence.REQUIRED })\n */\nlunr.Query.presence = {\n /**\n * Term's presence in a document is optional, this is the default value.\n */\n OPTIONAL: 1,\n\n /**\n * Term's presence in a document is required, documents that do not contain\n * this term will not be returned.\n */\n REQUIRED: 2,\n\n /**\n * Term's presence in a document is prohibited, documents that do contain\n * this term will not be returned.\n */\n PROHIBITED: 3\n}\n\n/**\n * A single clause in a {@link lunr.Query} contains a term and details on how to\n * match that term against a {@link lunr.Index}.\n *\n * @typedef {Object} lunr.Query~Clause\n * @property {string[]} fields - The fields in an index this clause should be matched against.\n * @property {number} [boost=1] - Any boost that should be applied when matching this clause.\n * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.\n * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.\n * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.\n * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.\n */\n\n/**\n * Adds a {@link lunr.Query~Clause} to this query.\n *\n * Unless the clause contains the fields to be matched all fields will be matched. In addition\n * a default boost of 1 is applied to the clause.\n *\n * @param {lunr.Query~Clause} clause - The clause to add to this query.\n * @see lunr.Query~Clause\n * @returns {lunr.Query}\n */\nlunr.Query.prototype.clause = function (clause) {\n if (!('fields' in clause)) {\n clause.fields = this.allFields\n }\n\n if (!('boost' in clause)) {\n clause.boost = 1\n }\n\n if (!('usePipeline' in clause)) {\n clause.usePipeline = true\n }\n\n if (!('wildcard' in clause)) {\n clause.wildcard = lunr.Query.wildcard.NONE\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {\n clause.term = \"*\" + clause.term\n }\n\n if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {\n clause.term = \"\" + clause.term + \"*\"\n }\n\n if (!('presence' in clause)) {\n clause.presence = lunr.Query.presence.OPTIONAL\n }\n\n this.clauses.push(clause)\n\n return this\n}\n\n/**\n * A negated query is one in which every clause has a presence of\n * prohibited. These queries require some special processing to return\n * the expected results.\n *\n * @returns boolean\n */\nlunr.Query.prototype.isNegated = function () {\n for (var i = 0; i < this.clauses.length; i++) {\n if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {\n return false\n }\n }\n\n return true\n}\n\n/**\n * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}\n * to the list of clauses that make up this query.\n *\n * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion\n * to a token or token-like string should be done before calling this method.\n *\n * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an\n * array, each term in the array will share the same options.\n *\n * @param {object|object[]} term - The term(s) to add to the query.\n * @param {object} [options] - Any additional properties to add to the query clause.\n * @returns {lunr.Query}\n * @see lunr.Query#clause\n * @see lunr.Query~Clause\n * @example <caption>adding a single term to a query</caption>\n * query.term(\"foo\")\n * @example <caption>adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard</caption>\n * query.term(\"foo\", {\n * fields: [\"title\"],\n * boost: 10,\n * wildcard: lunr.Query.wildcard.TRAILING\n * })\n * @example <caption>using lunr.tokenizer to convert a string to tokens before using them as terms</caption>\n * query.term(lunr.tokenizer(\"foo bar\"))\n */\nlunr.Query.prototype.term = function (term, options) {\n if (Array.isArray(term)) {\n term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)\n return this\n }\n\n var clause = options || {}\n clause.term = term.toString()\n\n this.clause(clause)\n\n return this\n}\nlunr.QueryParseError = function (message, start, end) {\n this.name = \"QueryParseError\"\n this.message = message\n this.start = start\n this.end = end\n}\n\nlunr.QueryParseError.prototype = new Error\nlunr.QueryLexer = function (str) {\n this.lexemes = []\n this.str = str\n this.length = str.length\n this.pos = 0\n this.start = 0\n this.escapeCharPositions = []\n}\n\nlunr.QueryLexer.prototype.run = function () {\n var state = lunr.QueryLexer.lexText\n\n while (state) {\n state = state(this)\n }\n}\n\nlunr.QueryLexer.prototype.sliceString = function () {\n var subSlices = [],\n sliceStart = this.start,\n sliceEnd = this.pos\n\n for (var i = 0; i < this.escapeCharPositions.length; i++) {\n sliceEnd = this.escapeCharPositions[i]\n subSlices.push(this.str.slice(sliceStart, sliceEnd))\n sliceStart = sliceEnd + 1\n }\n\n subSlices.push(this.str.slice(sliceStart, this.pos))\n this.escapeCharPositions.length = 0\n\n return subSlices.join('')\n}\n\nlunr.QueryLexer.prototype.emit = function (type) {\n this.lexemes.push({\n type: type,\n str: this.sliceString(),\n start: this.start,\n end: this.pos\n })\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.escapeCharacter = function () {\n this.escapeCharPositions.push(this.pos - 1)\n this.pos += 1\n}\n\nlunr.QueryLexer.prototype.next = function () {\n if (this.pos >= this.length) {\n return lunr.QueryLexer.EOS\n }\n\n var char = this.str.charAt(this.pos)\n this.pos += 1\n return char\n}\n\nlunr.QueryLexer.prototype.width = function () {\n return this.pos - this.start\n}\n\nlunr.QueryLexer.prototype.ignore = function () {\n if (this.start == this.pos) {\n this.pos += 1\n }\n\n this.start = this.pos\n}\n\nlunr.QueryLexer.prototype.backup = function () {\n this.pos -= 1\n}\n\nlunr.QueryLexer.prototype.acceptDigitRun = function () {\n var char, charCode\n\n do {\n char = this.next()\n charCode = char.charCodeAt(0)\n } while (charCode > 47 && charCode < 58)\n\n if (char != lunr.QueryLexer.EOS) {\n this.backup()\n }\n}\n\nlunr.QueryLexer.prototype.more = function () {\n return this.pos < this.length\n}\n\nlunr.QueryLexer.EOS = 'EOS'\nlunr.QueryLexer.FIELD = 'FIELD'\nlunr.QueryLexer.TERM = 'TERM'\nlunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'\nlunr.QueryLexer.BOOST = 'BOOST'\nlunr.QueryLexer.PRESENCE = 'PRESENCE'\n\nlunr.QueryLexer.lexField = function (lexer) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.FIELD)\n lexer.ignore()\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexTerm = function (lexer) {\n if (lexer.width() > 1) {\n lexer.backup()\n lexer.emit(lunr.QueryLexer.TERM)\n }\n\n lexer.ignore()\n\n if (lexer.more()) {\n return lunr.QueryLexer.lexText\n }\n}\n\nlunr.QueryLexer.lexEditDistance = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexBoost = function (lexer) {\n lexer.ignore()\n lexer.acceptDigitRun()\n lexer.emit(lunr.QueryLexer.BOOST)\n return lunr.QueryLexer.lexText\n}\n\nlunr.QueryLexer.lexEOS = function (lexer) {\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n}\n\n// This matches the separator used when tokenising fields\n// within a document. These should match otherwise it is\n// not possible to search for some tokens within a document.\n//\n// It is possible for the user to change the separator on the\n// tokenizer so it _might_ clash with any other of the special\n// characters already used within the search string, e.g. :.\n//\n// This means that it is possible to change the separator in\n// such a way that makes some words unsearchable using a search\n// string.\nlunr.QueryLexer.termSeparator = lunr.tokenizer.separator\n\nlunr.QueryLexer.lexText = function (lexer) {\n while (true) {\n var char = lexer.next()\n\n if (char == lunr.QueryLexer.EOS) {\n return lunr.QueryLexer.lexEOS\n }\n\n // Escape character is '\\'\n if (char.charCodeAt(0) == 92) {\n lexer.escapeCharacter()\n continue\n }\n\n if (char == \":\") {\n return lunr.QueryLexer.lexField\n }\n\n if (char == \"~\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexEditDistance\n }\n\n if (char == \"^\") {\n lexer.backup()\n if (lexer.width() > 0) {\n lexer.emit(lunr.QueryLexer.TERM)\n }\n return lunr.QueryLexer.lexBoost\n }\n\n // \"+\" indicates term presence is required\n // checking for length to ensure that only\n // leading \"+\" are considered\n if (char == \"+\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n // \"-\" indicates term presence is prohibited\n // checking for length to ensure that only\n // leading \"-\" are considered\n if (char == \"-\" && lexer.width() === 1) {\n lexer.emit(lunr.QueryLexer.PRESENCE)\n return lunr.QueryLexer.lexText\n }\n\n if (char.match(lunr.QueryLexer.termSeparator)) {\n return lunr.QueryLexer.lexTerm\n }\n }\n}\n\nlunr.QueryParser = function (str, query) {\n this.lexer = new lunr.QueryLexer (str)\n this.query = query\n this.currentClause = {}\n this.lexemeIdx = 0\n}\n\nlunr.QueryParser.prototype.parse = function () {\n this.lexer.run()\n this.lexemes = this.lexer.lexemes\n\n var state = lunr.QueryParser.parseClause\n\n while (state) {\n state = state(this)\n }\n\n return this.query\n}\n\nlunr.QueryParser.prototype.peekLexeme = function () {\n return this.lexemes[this.lexemeIdx]\n}\n\nlunr.QueryParser.prototype.consumeLexeme = function () {\n var lexeme = this.peekLexeme()\n this.lexemeIdx += 1\n return lexeme\n}\n\nlunr.QueryParser.prototype.nextClause = function () {\n var completedClause = this.currentClause\n this.query.clause(completedClause)\n this.currentClause = {}\n}\n\nlunr.QueryParser.parseClause = function (parser) {\n var lexeme = parser.peekLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.type) {\n case lunr.QueryLexer.PRESENCE:\n return lunr.QueryParser.parsePresence\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expected either a field or a term, found \" + lexeme.type\n\n if (lexeme.str.length >= 1) {\n errorMessage += \" with value '\" + lexeme.str + \"'\"\n }\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n}\n\nlunr.QueryParser.parsePresence = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n switch (lexeme.str) {\n case \"-\":\n parser.currentClause.presence = lunr.Query.presence.PROHIBITED\n break\n case \"+\":\n parser.currentClause.presence = lunr.Query.presence.REQUIRED\n break\n default:\n var errorMessage = \"unrecognised presence operator'\" + lexeme.str + \"'\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term or field, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.FIELD:\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term or field, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseField = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n if (parser.query.allFields.indexOf(lexeme.str) == -1) {\n var possibleFields = parser.query.allFields.map(function (f) { return \"'\" + f + \"'\" }).join(', '),\n errorMessage = \"unrecognised field '\" + lexeme.str + \"', possible fields: \" + possibleFields\n\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.fields = [lexeme.str]\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n var errorMessage = \"expecting term, found nothing\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n return lunr.QueryParser.parseTerm\n default:\n var errorMessage = \"expecting term, found '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseTerm = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n parser.currentClause.term = lexeme.str.toLowerCase()\n\n if (lexeme.str.indexOf(\"*\") != -1) {\n parser.currentClause.usePipeline = false\n }\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseEditDistance = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var editDistance = parseInt(lexeme.str, 10)\n\n if (isNaN(editDistance)) {\n var errorMessage = \"edit distance must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.editDistance = editDistance\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\nlunr.QueryParser.parseBoost = function (parser) {\n var lexeme = parser.consumeLexeme()\n\n if (lexeme == undefined) {\n return\n }\n\n var boost = parseInt(lexeme.str, 10)\n\n if (isNaN(boost)) {\n var errorMessage = \"boost must be numeric\"\n throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)\n }\n\n parser.currentClause.boost = boost\n\n var nextLexeme = parser.peekLexeme()\n\n if (nextLexeme == undefined) {\n parser.nextClause()\n return\n }\n\n switch (nextLexeme.type) {\n case lunr.QueryLexer.TERM:\n parser.nextClause()\n return lunr.QueryParser.parseTerm\n case lunr.QueryLexer.FIELD:\n parser.nextClause()\n return lunr.QueryParser.parseField\n case lunr.QueryLexer.EDIT_DISTANCE:\n return lunr.QueryParser.parseEditDistance\n case lunr.QueryLexer.BOOST:\n return lunr.QueryParser.parseBoost\n case lunr.QueryLexer.PRESENCE:\n parser.nextClause()\n return lunr.QueryParser.parsePresence\n default:\n var errorMessage = \"Unexpected lexeme type '\" + nextLexeme.type + \"'\"\n throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)\n }\n}\n\n /**\n * export the module via AMD, CommonJS or as a browser global\n * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js\n */\n ;(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n // AMD. Register as an anonymous module.\n define(factory)\n } else if (typeof exports === 'object') {\n /**\n * Node. Does not work with strict CommonJS, but\n * only CommonJS-like enviroments that support module.exports,\n * like Node.\n */\n module.exports = factory()\n } else {\n // Browser globals (root is window)\n root.lunr = factory()\n }\n }(this, function () {\n /**\n * Just return a value to define the module export.\n * This example returns an object, but the module\n * can return a function as the exported value.\n */\n return lunr\n }))\n})();\n","\nvar lookup = []\nvar revLookup = []\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array\nvar inited = false;\nfunction init () {\n inited = true;\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i]\n revLookup[code.charCodeAt(i)] = i\n }\n\n revLookup['-'.charCodeAt(0)] = 62\n revLookup['_'.charCodeAt(0)] = 63\n}\n\nexport function toByteArray (b64) {\n if (!inited) {\n init();\n }\n var i, j, l, tmp, placeHolders, arr\n var len = b64.length\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders)\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len\n\n var L = 0\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)]\n arr[L++] = (tmp >> 16) & 0xFF\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4)\n arr[L++] = tmp & 0xFF\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2)\n arr[L++] = (tmp >> 8) & 0xFF\n arr[L++] = tmp & 0xFF\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp\n var output = []\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2])\n output.push(tripletToBase64(tmp))\n }\n return output.join('')\n}\n\nexport function fromByteArray (uint8) {\n if (!inited) {\n init();\n }\n var tmp\n var len = uint8.length\n var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes\n var output = ''\n var parts = []\n var maxChunkLength = 16383 // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)))\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1]\n output += lookup[tmp >> 2]\n output += lookup[(tmp << 4) & 0x3F]\n output += '=='\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1])\n output += lookup[tmp >> 10]\n output += lookup[(tmp >> 4) & 0x3F]\n output += lookup[(tmp << 2) & 0x3F]\n output += '='\n }\n\n parts.push(output)\n\n return parts.join('')\n}\n","\nexport function read (buffer, offset, isLE, mLen, nBytes) {\n var e, m\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var nBits = -7\n var i = isLE ? (nBytes - 1) : 0\n var d = isLE ? -1 : 1\n var s = buffer[offset + i]\n\n i += d\n\n e = s & ((1 << (-nBits)) - 1)\n s >>= (-nBits)\n nBits += eLen\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1)\n e >>= (-nBits)\n nBits += mLen\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen)\n e = e - eBias\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nexport function write (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c\n var eLen = nBytes * 8 - mLen - 1\n var eMax = (1 << eLen) - 1\n var eBias = eMax >> 1\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0)\n var i = isLE ? 0 : (nBytes - 1)\n var d = isLE ? 1 : -1\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0\n\n value = Math.abs(value)\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0\n e = eMax\n } else {\n e = Math.floor(Math.log(value) / Math.LN2)\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--\n c *= 2\n }\n if (e + eBias >= 1) {\n value += rt / c\n } else {\n value += rt * Math.pow(2, 1 - eBias)\n }\n if (value * c >= 2) {\n e++\n c /= 2\n }\n\n if (e + eBias >= eMax) {\n m = 0\n e = eMax\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen)\n e = e + eBias\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen)\n e = 0\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m\n eLen += mLen\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128\n}\n","var toString = {}.toString;\n\nexport default Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license MIT\n */\n/* eslint-disable no-proto */\n\n\nimport * as base64 from './base64'\nimport * as ieee754 from './ieee754'\nimport isArray from './isArray'\n\nexport var INSPECT_MAX_BYTES = 50\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined\n ? global.TYPED_ARRAY_SUPPORT\n : true\n\n/*\n * Export kMaxLength after typed array support is determined.\n */\nvar _kMaxLength = kMaxLength()\nexport {_kMaxLength as kMaxLength};\nfunction typedArraySupport () {\n return true;\n // rollup issues\n // try {\n // var arr = new Uint8Array(1)\n // arr.__proto__ = {\n // __proto__: Uint8Array.prototype,\n // foo: function () { return 42 }\n // }\n // return arr.foo() === 42 && // typed array instances can be augmented\n // typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n // arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray`\n // } catch (e) {\n // return false\n // }\n}\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length)\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length)\n }\n that.length = length\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nexport function Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192 // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype\n return arr\n}\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n}\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype\n Buffer.__proto__ = Uint8Array\n if (typeof Symbol !== 'undefined' && Symbol.species &&\n Buffer[Symbol.species] === Buffer) {\n // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n // Object.defineProperty(Buffer, Symbol.species, {\n // value: null,\n // configurable: true\n // })\n }\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size)\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n}\n\nfunction allocUnsafe (that, size) {\n assertSize(size)\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n}\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n}\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8'\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0\n that = createBuffer(that, length)\n\n var actual = that.write(string, encoding)\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual)\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0\n that = createBuffer(that, length)\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array)\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset)\n } else {\n array = new Uint8Array(array, byteOffset, length)\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array\n that.__proto__ = Buffer.prototype\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array)\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (internalIsBuffer(obj)) {\n var len = checked(obj.length) | 0\n that = createBuffer(that, len)\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len)\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\n\nexport function SlowBuffer (length) {\n if (+length != length) { // eslint-disable-line eqeqeq\n length = 0\n }\n return Buffer.alloc(+length)\n}\nBuffer.isBuffer = isBuffer;\nfunction internalIsBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length\n var y = b.length\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i]\n y = b[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n}\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i\n if (length === undefined) {\n length = 0\n for (i = 0; i < list.length; ++i) {\n length += list[i].length\n }\n }\n\n var buffer = Buffer.allocUnsafe(length)\n var pos = 0\n for (i = 0; i < list.length; ++i) {\n var buf = list[i]\n if (!internalIsBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos)\n pos += buf.length\n }\n return buffer\n}\n\nfunction byteLength (string, encoding) {\n if (internalIsBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string\n }\n\n var len = string.length\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\nBuffer.byteLength = byteLength\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0\n start >>>= 0\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8'\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase()\n loweredCase = true\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true\n\nfunction swap (b, n, m) {\n var i = b[n]\n b[n] = b[m]\n b[m] = i\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1)\n }\n return this\n}\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3)\n swap(this, i + 1, i + 2)\n }\n return this\n}\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7)\n swap(this, i + 1, i + 6)\n swap(this, i + 2, i + 5)\n swap(this, i + 3, i + 4)\n }\n return this\n}\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n}\n\nBuffer.prototype.equals = function equals (b) {\n if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n}\n\nBuffer.prototype.inspect = function inspect () {\n var str = ''\n var max = INSPECT_MAX_BYTES\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ')\n if (this.length > max) str += ' ... '\n }\n return '<Buffer ' + str + '>'\n}\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!internalIsBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0\n }\n if (end === undefined) {\n end = target ? target.length : 0\n }\n if (thisStart === undefined) {\n thisStart = 0\n }\n if (thisEnd === undefined) {\n thisEnd = this.length\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0\n end >>>= 0\n thisStart >>>= 0\n thisEnd >>>= 0\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart\n var y = end - start\n var len = Math.min(x, y)\n\n var thisCopy = this.slice(thisStart, thisEnd)\n var targetCopy = target.slice(start, end)\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i]\n y = targetCopy[i]\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n}\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset\n byteOffset = 0\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000\n }\n byteOffset = +byteOffset // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1)\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding)\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (internalIsBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1\n var arrLength = arr.length\n var valLength = val.length\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase()\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2\n arrLength /= 2\n valLength /= 2\n byteOffset /= 2\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i\n if (dir) {\n var foundIndex = -1\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex\n foundIndex = -1\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength\n for (i = byteOffset; i >= 0; i--) {\n var found = true\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n}\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n}\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n}\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0\n var remaining = buf.length - offset\n if (!length) {\n length = remaining\n } else {\n length = Number(length)\n if (length > remaining) {\n length = remaining\n }\n }\n\n // must be an even number of digits\n var strLen = string.length\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16)\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8'\n length = this.length\n offset = 0\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset\n length = this.length\n offset = 0\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0\n if (isFinite(length)) {\n length = length | 0\n if (encoding === undefined) encoding = 'utf8'\n } else {\n encoding = length\n length = undefined\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset\n if (length === undefined || length > remaining) length = remaining\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8'\n\n var loweredCase = false\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase()\n loweredCase = true\n }\n }\n}\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n}\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return base64.fromByteArray(buf)\n } else {\n return base64.fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end)\n var res = []\n\n var i = start\n while (i < end) {\n var firstByte = buf[i]\n var codePoint = null\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte\n }\n break\n case 2:\n secondByte = buf[i + 1]\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F)\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint\n }\n }\n break\n case 3:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F)\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint\n }\n }\n break\n case 4:\n secondByte = buf[i + 1]\n thirdByte = buf[i + 2]\n fourthByte = buf[i + 3]\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F)\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD\n bytesPerSequence = 1\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000\n res.push(codePoint >>> 10 & 0x3FF | 0xD800)\n codePoint = 0xDC00 | codePoint & 0x3FF\n }\n\n res.push(codePoint)\n i += bytesPerSequence\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = ''\n var i = 0\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n )\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F)\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = ''\n end = Math.min(buf.length, end)\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i])\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length\n\n if (!start || start < 0) start = 0\n if (!end || end < 0 || end > len) end = len\n\n var out = ''\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i])\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end)\n var res = ''\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256)\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length\n start = ~~start\n end = end === undefined ? len : ~~end\n\n if (start < 0) {\n start += len\n if (start < 0) start = 0\n } else if (start > len) {\n start = len\n }\n\n if (end < 0) {\n end += len\n if (end < 0) end = 0\n } else if (end > len) {\n end = len\n }\n\n if (end < start) end = start\n\n var newBuf\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end)\n newBuf.__proto__ = Buffer.prototype\n } else {\n var sliceLen = end - start\n newBuf = new Buffer(sliceLen, undefined)\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start]\n }\n }\n\n return newBuf\n}\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length)\n }\n\n var val = this[offset + --byteLength]\n var mul = 1\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul\n }\n\n return val\n}\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n return this[offset]\n}\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return this[offset] | (this[offset + 1] << 8)\n}\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n return (this[offset] << 8) | this[offset + 1]\n}\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n}\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n}\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var val = this[offset]\n var mul = 1\n var i = 0\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) checkOffset(offset, byteLength, this.length)\n\n var i = byteLength\n var mul = 1\n var val = this[offset + --i]\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul\n }\n mul *= 0x80\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength)\n\n return val\n}\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length)\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n}\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset] | (this[offset + 1] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length)\n var val = this[offset + 1] | (this[offset] << 8)\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n}\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n}\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n}\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, true, 23, 4)\n}\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length)\n return ieee754.read(this, offset, false, 23, 4)\n}\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, true, 52, 8)\n}\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length)\n return ieee754.read(this, offset, false, 52, 8)\n}\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var mul = 1\n var i = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n byteLength = byteLength | 0\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1\n checkInt(this, value, offset, byteLength, maxBytes, 0)\n }\n\n var i = byteLength - 1\n var mul = 1\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24)\n this[offset + 2] = (value >>> 16)\n this[offset + 1] = (value >>> 8)\n this[offset] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = 0\n var mul = 1\n var sub = 0\n this[offset] = value & 0xFF\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1)\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit)\n }\n\n var i = byteLength - 1\n var mul = 1\n var sub = 0\n this[offset + i] = value & 0xFF\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF\n }\n\n return offset + byteLength\n}\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80)\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value)\n if (value < 0) value = 0xff + value + 1\n this[offset] = (value & 0xff)\n return offset + 1\n}\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n } else {\n objectWriteUInt16(this, value, offset, true)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8)\n this[offset + 1] = (value & 0xff)\n } else {\n objectWriteUInt16(this, value, offset, false)\n }\n return offset + 2\n}\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff)\n this[offset + 1] = (value >>> 8)\n this[offset + 2] = (value >>> 16)\n this[offset + 3] = (value >>> 24)\n } else {\n objectWriteUInt32(this, value, offset, true)\n }\n return offset + 4\n}\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value\n offset = offset | 0\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000)\n if (value < 0) value = 0xffffffff + value + 1\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24)\n this[offset + 1] = (value >>> 16)\n this[offset + 2] = (value >>> 8)\n this[offset + 3] = (value & 0xff)\n } else {\n objectWriteUInt32(this, value, offset, false)\n }\n return offset + 4\n}\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38)\n }\n ieee754.write(buf, value, offset, littleEndian, 23, 4)\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n}\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308)\n }\n ieee754.write(buf, value, offset, littleEndian, 52, 8)\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n}\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n}\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0\n if (!end && end !== 0) end = this.length\n if (targetStart >= target.length) targetStart = target.length\n if (!targetStart) targetStart = 0\n if (end > 0 && end < start) end = start\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start\n }\n\n var len = end - start\n var i\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start]\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start]\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n )\n }\n\n return len\n}\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start\n start = 0\n end = this.length\n } else if (typeof end === 'string') {\n encoding = end\n end = this.length\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0)\n if (code < 256) {\n val = code\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0\n end = end === undefined ? this.length : end >>> 0\n\n if (!val) val = 0\n\n var i\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val\n }\n } else {\n var bytes = internalIsBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString())\n var len = bytes.length\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len]\n }\n }\n\n return this\n}\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '')\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '='\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity\n var codePoint\n var length = string.length\n var leadSurrogate = null\n var bytes = []\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i)\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n leadSurrogate = codePoint\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD)\n }\n\n leadSurrogate = null\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint)\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n )\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF)\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo\n var byteArray = []\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i)\n hi = c >> 8\n lo = c % 256\n byteArray.push(lo)\n byteArray.push(hi)\n }\n\n return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n return base64.toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i]\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nexport function isBuffer(obj) {\n return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer')\nvar Buffer = buffer.Buffer\n\n// alternative to using Object.keys for old browsers\nfunction copyProps (src, dst) {\n for (var key in src) {\n dst[key] = src[key]\n }\n}\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n module.exports = buffer\n} else {\n // Copy properties from require('buffer')\n copyProps(buffer, exports)\n exports.Buffer = SafeBuffer\n}\n\nfunction SafeBuffer (arg, encodingOrOffset, length) {\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype)\n\n// Copy static methods from Buffer\ncopyProps(Buffer, SafeBuffer)\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n if (typeof arg === 'number') {\n throw new TypeError('Argument must not be a number')\n }\n return Buffer(arg, encodingOrOffset, length)\n}\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n var buf = Buffer(size)\n if (fill !== undefined) {\n if (typeof encoding === 'string') {\n buf.fill(fill, encoding)\n } else {\n buf.fill(fill)\n }\n } else {\n buf.fill(0)\n }\n return buf\n}\n\nSafeBuffer.allocUnsafe = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return Buffer(size)\n}\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n if (typeof size !== 'number') {\n throw new TypeError('Argument must be a number')\n }\n return buffer.SlowBuffer(size)\n}\n","import { union, reduce, isUndefined, cloneDeep, split, some, map, filter, isEmpty as isEmpty$1, countBy, includes as includes$1, last, find, constant as constant$1, take, first, intersection, mapValues, isNull as isNull$1, has as has$1, isNumber as isNumber$1, isString as isString$1, isBoolean as isBoolean$1, isDate as isDate$1, isArray as isArray$2, isObject, clone, values, keyBy, keys as keys$1, orderBy, concat, reverse, difference, merge as merge$1, flatten, each, pull, join as join$2, max, defaultCase as defaultCase$1, uniqBy, every, uniqWith, isFunction as isFunction$1, groupBy, differenceBy, intersectionBy, isEqual } from 'lodash/fp';\nimport { generate } from 'shortid';\nimport _, { toNumber, flow, isArray as isArray$1, join as join$1, replace, trim, dropRight, takeRight, head, isUndefined as isUndefined$1, isNull, isNaN as isNaN$1, reduce as reduce$1, isEmpty, constant, tail, includes, startsWith, findIndex, isInteger, isDate, isString, split as split$1, cloneDeep as cloneDeep$1, keys, isFunction, merge, has, isBoolean, isNumber, isObjectLike, assign, some as some$1, each as each$1, find as find$1, orderBy as orderBy$1, union as union$1 } from 'lodash';\nimport { compileCode as compileCode$1, compileExpression as compileExpression$1 } from '@nx-js/compiler-util';\nimport lunr from 'lunr';\nimport { Buffer as Buffer$1 } from 'safe-buffer';\n\nconst commonPlus = extra => union(['onBegin', 'onComplete', 'onError'])(extra);\n\nconst common = () => commonPlus([]);\n\nconst _events = {\n recordApi: {\n save: commonPlus([\n 'onInvalid',\n 'onRecordUpdated',\n 'onRecordCreated']),\n delete: common(),\n getContext: common(),\n getNew: common(),\n load: common(),\n validate: common(),\n uploadFile: common(),\n downloadFile: common(),\n },\n indexApi: {\n buildIndex: common(),\n listItems: common(),\n delete: common(),\n aggregates: common(),\n },\n collectionApi: {\n getAllowedRecordTypes: common(),\n initialise: common(),\n delete: common(),\n },\n authApi: {\n authenticate: common(),\n authenticateTemporaryAccess: common(),\n createTemporaryAccess: common(),\n createUser: common(),\n enableUser: common(),\n disableUser: common(),\n loadAccessLevels: common(),\n getNewAccessLevel: common(),\n getNewUser: common(),\n getNewUserAuth: common(),\n getUsers: common(),\n saveAccessLevels: common(),\n isAuthorized: common(),\n changeMyPassword: common(),\n setPasswordFromTemporaryCode: common(),\n scorePassword: common(),\n isValidPassword: common(),\n validateUser: common(),\n validateAccessLevels: common(),\n setUserAccessLevels: common(),\n },\n templateApi: {\n saveApplicationHierarchy: common(),\n saveActionsAndTriggers: common(),\n },\n actionsApi: {\n execute: common(),\n },\n};\n\nconst _eventsList = [];\n\nconst makeEvent = (area, method, name) => `${area}:${method}:${name}`;\n\nfor (const areaKey in _events) {\n for (const methodKey in _events[areaKey]) {\n _events[areaKey][methodKey] = reduce((obj, s) => {\n obj[s] = makeEvent(areaKey, methodKey, s);\n return obj;\n },\n {})(_events[areaKey][methodKey]);\n }\n}\n\n\nfor (const areaKey in _events) {\n for (const methodKey in _events[areaKey]) {\n for (const name in _events[areaKey][methodKey]) {\n _eventsList.push(\n _events[areaKey][methodKey][name],\n );\n }\n }\n}\n\n\nconst events = _events;\n\nconst eventsList = _eventsList;\n\nclass BadRequestError extends Error {\n constructor(message) {\n super(message);\n this.httpStatusCode = 400;\n }\n}\n\nclass UnauthorisedError extends Error {\n constructor(message) {\n super(message);\n this.httpStatusCode = 401;\n }\n}\n\nclass ForbiddenError extends Error {\n constructor(message) {\n super(message);\n this.httpStatusCode = 403;\n }\n}\n\nclass NotFoundError extends Error {\n constructor(message) {\n super(message);\n this.httpStatusCode = 404;\n }\n}\n\nconst apiWrapper = async (app, eventNamespace, isAuthorized, eventContext, func, ...params) => {\n pushCallStack(app, eventNamespace);\n\n if (!isAuthorized(app)) {\n handleNotAuthorized(app, eventContext, eventNamespace);\n return;\n }\n\n const startDate = Date.now();\n const elapsed = () => (Date.now() - startDate);\n\n try {\n await app.publish(\n eventNamespace.onBegin,\n eventContext,\n );\n\n const result = await func(...params);\n\n await publishComplete(app, eventContext, eventNamespace, elapsed, result);\n return result;\n } catch (error) {\n await publishError(app, eventContext, eventNamespace, elapsed, error);\n throw error;\n }\n};\n\nconst apiWrapperSync = (app, eventNamespace, isAuthorized, eventContext, func, ...params) => {\n pushCallStack(app, eventNamespace);\n\n if (!isAuthorized(app)) {\n handleNotAuthorized(app, eventContext, eventNamespace);\n return;\n }\n\n const startDate = Date.now();\n const elapsed = () => (Date.now() - startDate);\n\n try {\n app.publish(\n eventNamespace.onBegin,\n eventContext,\n );\n\n const result = func(...params);\n\n publishComplete(app, eventContext, eventNamespace, elapsed, result);\n return result;\n } catch (error) {\n publishError(app, eventContext, eventNamespace, elapsed, error);\n throw error;\n }\n};\n\nconst handleNotAuthorized = (app, eventContext, eventNamespace) => {\n const err = new UnauthorisedError(`Unauthorized: ${eventNamespace}`);\n publishError(app, eventContext, eventNamespace, () => 0, err);\n throw err;\n};\n\nconst pushCallStack = (app, eventNamespace, seedCallId) => {\n const callId = generate();\n\n const createCallStack = () => ({\n seedCallId: !isUndefined(seedCallId)\n ? seedCallId\n : callId,\n threadCallId: callId,\n stack: [],\n });\n\n if (isUndefined(app.calls)) {\n app.calls = createCallStack();\n }\n\n app.calls.stack.push({\n namespace: eventNamespace,\n callId,\n });\n};\n\nconst popCallStack = (app) => {\n app.calls.stack.pop();\n if (app.calls.stack.length === 0) {\n delete app.calls;\n }\n};\n\nconst publishError = async (app, eventContext, eventNamespace, elapsed, err) => {\n const ctx = cloneDeep(eventContext);\n ctx.error = err;\n ctx.elapsed = elapsed();\n await app.publish(\n eventNamespace.onError,\n ctx,\n );\n popCallStack(app);\n};\n\nconst publishComplete = async (app, eventContext, eventNamespace, elapsed, result) => {\n const endcontext = cloneDeep(eventContext);\n endcontext.result = result;\n endcontext.elapsed = elapsed();\n await app.publish(\n eventNamespace.onComplete,\n endcontext,\n );\n popCallStack(app);\n return result;\n};\n\nconst lockOverlapMilliseconds = 10;\n\nconst getLock = async (app, lockFile, timeoutMilliseconds, maxLockRetries, retryCount = 0) => {\n try {\n const timeout = (await app.getEpochTime())\n + timeoutMilliseconds;\n\n const lock = {\n timeout,\n key: lockFile,\n totalTimeout: timeoutMilliseconds,\n };\n\n await app.datastore.createFile(\n lockFile,\n getLockFileContent(\n lock.totalTimeout,\n lock.timeout,\n ),\n );\n\n return lock;\n } catch (e) {\n if (retryCount == maxLockRetries) { return NO_LOCK; }\n\n const lock = parseLockFileContent(\n lockFile,\n await app.datastore.loadFile(lockFile),\n );\n\n const currentEpochTime = await app.getEpochTime();\n\n if (currentEpochTime < lock.timeout) {\n return NO_LOCK;\n }\n\n try {\n await app.datastore.deleteFile(lockFile);\n } catch (_) {\n //empty\n }\n\n await sleepForRetry();\n\n return await getLock(\n app, lockFile, timeoutMilliseconds,\n maxLockRetries, retryCount + 1,\n );\n }\n};\n\nconst getLockFileContent = (totalTimeout, epochTime) => `${totalTimeout}:${epochTime.toString()}`;\n\nconst parseLockFileContent = (key, content) => $(content, [\n split(':'),\n parts => ({\n totalTimeout: new Number(parts[0]),\n timeout: new Number(parts[1]),\n key,\n }),\n]);\n\nconst releaseLock = async (app, lock) => {\n const currentEpochTime = await app.getEpochTime();\n // only release if not timedout\n if (currentEpochTime < (lock.timeout - lockOverlapMilliseconds)) {\n try {\n await app.datastore.deleteFile(lock.key);\n } catch (_) {\n //empty\n }\n }\n};\n\nconst NO_LOCK = 'no lock';\nconst isNolock = id => id === NO_LOCK;\n\nconst sleepForRetry = () => new Promise(resolve => setTimeout(resolve, lockOverlapMilliseconds));\n\n// this is the combinator function\nconst $$ = (...funcs) => arg => flow(funcs)(arg);\n\n// this is the pipe function\nconst $ = (arg, funcs) => $$(...funcs)(arg);\n\nconst keySep = '/';\nconst trimKeySep = str => trim(str, keySep);\nconst splitByKeySep = str => split$1(str, keySep);\nconst safeKey = key => replace(`${keySep}${trimKeySep(key)}`, `${keySep}${keySep}`, keySep);\nconst joinKey = (...strs) => {\n const paramsOrArray = strs.length === 1 & isArray$1(strs[0])\n ? strs[0] : strs;\n return safeKey(join$1(paramsOrArray, keySep));\n};\nconst splitKey = $$(trimKeySep, splitByKeySep);\nconst getDirFomKey = $$(splitKey, dropRight, p => joinKey(...p));\nconst getFileFromKey = $$(splitKey, takeRight, head);\n\nconst configFolder = `${keySep}.config`;\nconst fieldDefinitions = joinKey(configFolder, 'fields.json');\nconst templateDefinitions = joinKey(configFolder, 'templates.json');\nconst appDefinitionFile = joinKey(configFolder, 'appDefinition.json');\nconst dirIndex = folderPath => joinKey(configFolder, 'dir', ...splitKey(folderPath), 'dir.idx');\nconst getIndexKeyFromFileKey = $$(getDirFomKey, dirIndex);\n\nconst ifExists = (val, exists, notExists) => (isUndefined$1(val)\n ? isUndefined$1(notExists) ? (() => { })() : notExists()\n : exists());\n\nconst getOrDefault = (val, defaultVal) => ifExists(val, () => val, () => defaultVal);\n\nconst not = func => val => !func(val);\nconst isDefined = not(isUndefined$1);\nconst isNonNull = not(isNull);\nconst isNotNaN = not(isNaN$1);\n\nconst allTrue = (...funcArgs) => val => reduce$1(funcArgs,\n (result, conditionFunc) => (isNull(result) || result == true) && conditionFunc(val),\n null);\n\nconst anyTrue = (...funcArgs) => val => reduce$1(funcArgs,\n (result, conditionFunc) => result == true || conditionFunc(val),\n null);\n\nconst insensitiveEquals = (str1, str2) => str1.trim().toLowerCase() === str2.trim().toLowerCase();\n\nconst isSomething = allTrue(isDefined, isNonNull, isNotNaN);\nconst isNothing = not(isSomething);\nconst isNothingOrEmpty = v => isNothing(v) || isEmpty(v);\nconst somethingOrGetDefault = getDefaultFunc => val => (isSomething(val) ? val : getDefaultFunc());\nconst somethingOrDefault = (val, defaultVal) => somethingOrGetDefault(constant(defaultVal))(val);\n\nconst mapIfSomethingOrDefault = (mapFunc, defaultVal) => val => (isSomething(val) ? mapFunc(val) : defaultVal);\n\nconst mapIfSomethingOrBlank = mapFunc => mapIfSomethingOrDefault(mapFunc, '');\n\nconst none = predicate => collection => !some(predicate)(collection);\n\nconst all = predicate => collection => none(v => !predicate(v))(collection);\n\nconst isNotEmpty = ob => !isEmpty(ob);\nconst isNonEmptyArray = allTrue(isArray$1, isNotEmpty);\nconst isNonEmptyString = allTrue(isString, isNotEmpty);\nconst tryOr = failFunc => (func, ...args) => {\n try {\n return func.apply(null, ...args);\n } catch (_) {\n return failFunc();\n }\n};\n\nconst tryAwaitOr = failFunc => async (func, ...args) => {\n try {\n return await func.apply(null, ...args);\n } catch (_) {\n return await failFunc();\n }\n};\n\nconst defineError = (func, errorPrefix) => {\n try {\n return func();\n } catch (err) {\n err.message = `${errorPrefix} : ${err.message}`;\n throw err;\n }\n};\n\nconst tryOrIgnore = tryOr(() => { });\nconst tryAwaitOrIgnore = tryAwaitOr(async () => { });\nconst causesException = (func) => {\n try {\n func();\n return false;\n } catch (e) {\n return true;\n }\n};\n\nconst executesWithoutException = func => !causesException(func);\n\nconst handleErrorWith = returnValInError => tryOr(constant(returnValInError));\n\nconst handleErrorWithUndefined = handleErrorWith(undefined);\n\nconst switchCase = (...cases) => (value) => {\n const nextCase = () => head(cases)[0](value);\n const nextResult = () => head(cases)[1](value);\n\n if (isEmpty(cases)) return; // undefined\n if (nextCase() === true) return nextResult();\n return switchCase(...tail(cases))(value);\n};\n\nconst isValue = val1 => val2 => (val1 === val2);\nconst isOneOf = (...vals) => val => includes(vals, val);\nconst defaultCase = constant(true);\nconst memberMatches = (member, match) => obj => match(obj[member]);\n\n\nconst StartsWith = searchFor => searchIn => startsWith(searchIn, searchFor);\n\nconst contains = val => array => (findIndex(array, v => v === val) > -1);\n\nconst getHashCode = (s) => {\n let hash = 0; let i; let char; let\n l;\n if (s.length == 0) return hash;\n for (i = 0, l = s.length; i < l; i++) {\n char = s.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash |= 0; // Convert to 32bit integer\n }\n\n // converting to string, but dont want a \"-\" prefixed\n if (hash < 0) { return `n${(hash * -1).toString()}`; }\n return hash.toString();\n};\n\n// thanks to https://blog.grossman.io/how-to-write-async-await-without-try-catch-blocks-in-javascript/\nconst awEx = async (promise) => {\n try {\n const result = await promise;\n return [undefined, result];\n } catch (error) {\n return [error, undefined];\n }\n};\n\nconst isSafeInteger = n => isInteger(n)\n && n <= Number.MAX_SAFE_INTEGER\n && n >= 0 - Number.MAX_SAFE_INTEGER;\n\nconst toDateOrNull = s => (isNull(s) ? null\n : isDate(s) ? s : new Date(s));\nconst toBoolOrNull = s => (isNull(s) ? null\n : s === 'true' || s === true);\nconst toNumberOrNull = s => (isNull(s) ? null\n : toNumber(s));\n\nconst isArrayOfString = opts => isArray$1(opts) && all(isString)(opts);\n\nconst pause = async duration => new Promise(res => setTimeout(res, duration));\n\nconst retry = async (fn, retries, delay, ...args) => {\n try {\n return await fn(...args);\n } catch (err) {\n if (retries > 1) {\n return await pause(delay).then(async () => await retry(fn, (retries - 1), delay, ...args));\n }\n throw err;\n }\n};\n\nvar index = {\n ifExists,\n getOrDefault,\n isDefined,\n isNonNull,\n isNotNaN,\n allTrue,\n isSomething,\n mapIfSomethingOrDefault,\n mapIfSomethingOrBlank,\n configFolder,\n fieldDefinitions,\n isNothing,\n not,\n switchCase,\n defaultCase,\n StartsWith,\n contains,\n templateDefinitions,\n handleErrorWith,\n handleErrorWithUndefined,\n tryOr,\n tryOrIgnore,\n tryAwaitOr,\n tryAwaitOrIgnore,\n dirIndex,\n keySep,\n $,\n $$,\n getDirFomKey,\n getFileFromKey,\n splitKey,\n somethingOrDefault,\n getIndexKeyFromFileKey,\n joinKey,\n somethingOrGetDefault,\n appDefinitionFile,\n isValue,\n all,\n isOneOf,\n memberMatches,\n defineError,\n anyTrue,\n isNonEmptyArray,\n causesException,\n executesWithoutException,\n none,\n getHashCode,\n awEx,\n apiWrapper,\n events,\n eventsList,\n isNothingOrEmpty,\n isSafeInteger,\n toNumber,\n toDate: toDateOrNull,\n toBool: toBoolOrNull,\n isArrayOfString,\n getLock,\n NO_LOCK,\n isNolock,\n insensitiveEquals,\n pause,\n retry,\n};\n\nconst stringNotEmpty = s => isSomething(s) && s.trim().length > 0;\n\nconst makerule = (field, error, isValid) => ({ field, error, isValid });\n\nconst validationError = (rule, item) => ({ ...rule, item });\n\nconst applyRuleSet = ruleSet => itemToValidate => $(ruleSet, [\n map(applyRule(itemToValidate)),\n filter(isSomething),\n]);\n\nconst applyRule = itemTovalidate => rule => (rule.isValid(itemTovalidate)\n ? null\n : validationError(rule, itemTovalidate));\n\nconst filterEval = 'FILTER_EVALUATE';\nconst filterCompile = 'FILTER_COMPILE';\nconst mapEval = 'MAP_EVALUATE';\nconst mapCompile = 'MAP_COMPILE';\n\n\nconst getEvaluateResult = () => ({\n isError: false,\n passedFilter: true,\n result: null,\n});\n\nconst compileFilter = index => compileExpression$1(index.filter);\n\nconst compileMap = index => compileCode$1(index.map);\n\nconst passesFilter = (record, index) => {\n const context = { record };\n if (!index.filter) return true;\n\n const compiledFilter = defineError(\n () => compileFilter(index),\n filterCompile,\n );\n\n return defineError(\n () => compiledFilter(context),\n filterEval,\n );\n};\n\nconst mapRecord = (record, index) => {\n const recordClone = cloneDeep$1(record);\n const context = { record: recordClone };\n\n const map = index.map ? index.map : 'return {...record};';\n\n const compiledMap = defineError(\n () => compileCode$1(map),\n mapCompile,\n );\n\n const mapped = defineError(\n () => compiledMap(context),\n mapEval,\n );\n\n const mappedKeys = keys(mapped);\n for (let i = 0; i < mappedKeys.length; i++) {\n const key = mappedKeys[i];\n mapped[key] = isUndefined$1(mapped[key]) ? null : mapped[key];\n if (isFunction(mapped[key])) {\n delete mapped[key];\n }\n }\n\n mapped.key = record.key;\n mapped.sortKey = index.getSortKey\n ? compileCode$1(index.getSortKey)(context)\n : record.id;\n\n return mapped;\n};\n\nconst evaluate = record => (index) => {\n const result = getEvaluateResult();\n\n try {\n result.passedFilter = passesFilter(record, index);\n } catch (err) {\n result.isError = true;\n result.passedFilter = false;\n result.result = err.message;\n }\n\n if (!result.passedFilter) return result;\n\n try {\n result.result = mapRecord(record, index);\n } catch (err) {\n result.isError = true;\n result.result = err.message;\n }\n\n return result;\n};\n\nconst indexTypes = { reference: 'reference', ancestor: 'ancestor' };\n\nconst indexRuleSet = [\n makerule('map', 'index has no map function',\n index => isNonEmptyString(index.map)),\n makerule('map', \"index's map function does not compile\",\n index => !isNonEmptyString(index.map)\n || executesWithoutException(() => compileMap(index))),\n makerule('filter', \"index's filter function does not compile\",\n index => !isNonEmptyString(index.filter)\n || executesWithoutException(() => compileFilter(index))),\n makerule('name', 'must declare a name for index',\n index => isNonEmptyString(index.name)),\n makerule('name', 'there is a duplicate named index on this node',\n index => isEmpty$1(index.name)\n || countBy('name')(index.parent().indexes)[index.name] === 1),\n makerule('indexType', 'reference index may only exist on a record node',\n index => isRecord(index.parent())\n || index.indexType !== indexTypes.reference),\n makerule('indexType', `index type must be one of: ${join$1(', ', keys(indexTypes))}`,\n index => includes$1(index.indexType)(keys(indexTypes))),\n];\n\nconst getFlattenedHierarchy = (appHierarchy, useCached = true) => {\n if (isSomething(appHierarchy.getFlattenedHierarchy) && useCached) { return appHierarchy.getFlattenedHierarchy(); }\n\n const flattenHierarchy = (currentNode, flattened) => {\n flattened.push(currentNode);\n if ((!currentNode.children\n || currentNode.children.length === 0)\n && (!currentNode.indexes\n || currentNode.indexes.length === 0)\n && (!currentNode.aggregateGroups\n || currentNode.aggregateGroups.length === 0)) {\n return flattened;\n }\n\n const unionIfAny = l2 => l1 => union(l1)(!l2 ? [] : l2);\n\n const children = $([], [\n unionIfAny(currentNode.children),\n unionIfAny(currentNode.indexes),\n unionIfAny(currentNode.aggregateGroups),\n ]);\n\n for (const child of children) {\n flattenHierarchy(child, flattened);\n }\n return flattened;\n };\n\n appHierarchy.getFlattenedHierarchy = () => flattenHierarchy(appHierarchy, []);\n return appHierarchy.getFlattenedHierarchy();\n};\n\nconst getLastPartInKey = key => last(splitKey(key));\n\nconst getNodesInPath = appHierarchy => key => $(appHierarchy, [\n getFlattenedHierarchy,\n filter(n => new RegExp(`${n.pathRegx()}`).test(key)),\n]);\n\nconst getExactNodeForPath = appHierarchy => key => $(appHierarchy, [\n getFlattenedHierarchy,\n find(n => new RegExp(`${n.pathRegx()}$`).test(key)),\n]);\n\nconst getNodeForCollectionPath = appHierarchy => collectionKey => $(appHierarchy, [\n getFlattenedHierarchy,\n find(n => (isCollectionRecord(n)\n && new RegExp(`${n.collectionPathRegx()}$`).test(collectionKey))),\n]);\n\nconst hasMatchingAncestor = ancestorPredicate => decendantNode => switchCase(\n\n [node => isNothing(node.parent()),\n constant$1(false)],\n\n [node => ancestorPredicate(node.parent()),\n constant$1(true)],\n\n [defaultCase,\n node => hasMatchingAncestor(ancestorPredicate)(node.parent())],\n\n)(decendantNode);\n\nconst getNode = (appHierarchy, nodeKey) => $(appHierarchy, [\n getFlattenedHierarchy,\n find(n => n.nodeKey() === nodeKey\n || (isCollectionRecord(n)\n && n.collectionNodeKey() === nodeKey)),\n]);\n\nconst getCollectionNode = (appHierarchy, nodeKey) => $(appHierarchy, [\n getFlattenedHierarchy,\n find(n => (isCollectionRecord(n)\n && n.collectionNodeKey() === nodeKey)),\n]);\n\nconst getNodeByKeyOrNodeKey = (appHierarchy, keyOrNodeKey) => {\n const nodeByKey = getExactNodeForPath(appHierarchy)(keyOrNodeKey);\n return isNothing(nodeByKey)\n ? getNode(appHierarchy, keyOrNodeKey)\n : nodeByKey;\n};\n\nconst getCollectionNodeByKeyOrNodeKey = (appHierarchy, keyOrNodeKey) => {\n const nodeByKey = getNodeForCollectionPath(appHierarchy)(keyOrNodeKey);\n return isNothing(nodeByKey)\n ? getCollectionNode(appHierarchy, keyOrNodeKey)\n : nodeByKey;\n};\n\nconst isNode = (appHierarchy, key) => isSomething(getExactNodeForPath(appHierarchy)(key));\n\nconst getActualKeyOfParent = (parentNodeKey, actualChildKey) => $(actualChildKey, [\n splitKey,\n take(splitKey(parentNodeKey).length),\n ks => joinKey(...ks),\n]);\n\nconst getParentKey = (key) => {\n return $(key, [\n splitKey,\n take(splitKey(key).length - 1),\n joinKey,\n ]);\n};\n\nconst isKeyAncestorOf = ancestorKey => decendantNode => hasMatchingAncestor(p => p.nodeKey() === ancestorKey)(decendantNode);\n\nconst hasNoMatchingAncestors = parentPredicate => node => !hasMatchingAncestor(parentPredicate)(node);\n\nconst findField = (recordNode, fieldName) => find(f => f.name == fieldName)(recordNode.fields);\n\nconst isAncestor = decendant => ancestor => isKeyAncestorOf(ancestor.nodeKey())(decendant);\n\nconst isDecendant = ancestor => decendant => isAncestor(decendant)(ancestor);\n\nconst getRecordNodeId = recordKey => $(recordKey, [\n splitKey,\n last,\n getRecordNodeIdFromId,\n]);\n\nconst getRecordNodeIdFromId = recordId => $(recordId, [split('-'), first, parseInt]);\n\nconst getRecordNodeById = (hierarchy, recordId) => $(hierarchy, [\n getFlattenedHierarchy,\n find(n => isRecord(n)\n && n.nodeId === getRecordNodeIdFromId(recordId)),\n]);\n\nconst recordNodeIdIsAllowed = indexNode => nodeId => indexNode.allowedRecordNodeIds.length === 0\n || includes$1(nodeId)(indexNode.allowedRecordNodeIds);\n\nconst recordNodeIsAllowed = indexNode => recordNode => recordNodeIdIsAllowed(indexNode)(recordNode.nodeId);\n\nconst getAllowedRecordNodesForIndex = (appHierarchy, indexNode) => {\n const recordNodes = $(appHierarchy, [\n getFlattenedHierarchy,\n filter(isRecord),\n ]);\n\n if (isGlobalIndex(indexNode)) {\n return $(recordNodes, [\n filter(recordNodeIsAllowed(indexNode)),\n ]);\n }\n\n if (isAncestorIndex(indexNode)) {\n return $(recordNodes, [\n filter(isDecendant(indexNode.parent())),\n filter(recordNodeIsAllowed(indexNode)),\n ]);\n }\n\n if (isReferenceIndex(indexNode)) {\n return $(recordNodes, [\n filter(n => some(fieldReversesReferenceToIndex(indexNode))(n.fields)),\n ]);\n }\n};\n\nconst getNodeFromNodeKeyHash = hierarchy => hash => $(hierarchy, [\n getFlattenedHierarchy,\n find(n => getHashCode(n.nodeKey()) === hash),\n]);\n\nconst isRecord = node => isSomething(node) && node.type === 'record';\nconst isSingleRecord = node => isRecord(node) && node.isSingle;\nconst isCollectionRecord = node => isRecord(node) && !node.isSingle;\nconst isIndex = node => isSomething(node) && node.type === 'index';\nconst isaggregateGroup = node => isSomething(node) && node.type === 'aggregateGroup';\nconst isShardedIndex = node => isIndex(node) && isNonEmptyString(node.getShardName);\nconst isRoot = node => isSomething(node) && node.isRoot();\nconst isDecendantOfARecord = hasMatchingAncestor(isRecord);\nconst isGlobalIndex = node => isIndex(node) && isRoot(node.parent());\nconst isReferenceIndex = node => isIndex(node) && node.indexType === indexTypes.reference;\nconst isAncestorIndex = node => isIndex(node) && node.indexType === indexTypes.ancestor;\n\nconst fieldReversesReferenceToNode = node => field => field.type === 'reference'\n && intersection(field.typeOptions.reverseIndexNodeKeys)(map(i => i.nodeKey())(node.indexes))\n .length > 0;\n\nconst fieldReversesReferenceToIndex = indexNode => field => field.type === 'reference'\n && intersection(field.typeOptions.reverseIndexNodeKeys)([indexNode.nodeKey()])\n .length > 0;\n\nvar hierarchy = {\n getLastPartInKey,\n getNodesInPath,\n getExactNodeForPath,\n hasMatchingAncestor,\n getNode,\n getNodeByKeyOrNodeKey,\n isNode,\n getActualKeyOfParent,\n getParentKey,\n isKeyAncestorOf,\n hasNoMatchingAncestors,\n findField,\n isAncestor,\n isDecendant,\n getRecordNodeId,\n getRecordNodeIdFromId,\n getRecordNodeById,\n recordNodeIdIsAllowed,\n recordNodeIsAllowed,\n getAllowedRecordNodesForIndex,\n getNodeFromNodeKeyHash,\n isRecord,\n isCollectionRecord,\n isIndex,\n isaggregateGroup,\n isShardedIndex,\n isRoot,\n isDecendantOfARecord,\n isGlobalIndex,\n isReferenceIndex,\n isAncestorIndex,\n fieldReversesReferenceToNode,\n fieldReversesReferenceToIndex,\n getFlattenedHierarchy,\n};\n\nconst getSafeFieldParser = (tryParse, defaultValueFunctions) => (field, record) => {\n if (has(record, field.name)) {\n return getSafeValueParser(tryParse, defaultValueFunctions)(record[field.name]);\n }\n return defaultValueFunctions[field.getUndefinedValue]();\n};\n\nconst getSafeValueParser = (tryParse, defaultValueFunctions) => (value) => {\n const parsed = tryParse(value);\n if (parsed.success) {\n return parsed.value;\n }\n return defaultValueFunctions.default();\n};\n\nconst getNewValue = (tryParse, defaultValueFunctions) => (field) => {\n const getInitialValue = isUndefined(field) || isUndefined(field.getInitialValue)\n ? 'default'\n : field.getInitialValue;\n\n return has(defaultValueFunctions, getInitialValue)\n ? defaultValueFunctions[getInitialValue]()\n : getSafeValueParser(tryParse, defaultValueFunctions)(getInitialValue);\n};\n\nconst typeFunctions = specificFunctions => merge({\n value: constant$1,\n null: constant$1(null),\n}, specificFunctions);\n\nconst validateTypeConstraints = validationRules => async (field, record, context) => {\n const fieldValue = record[field.name];\n const validateRule = async r => (!await r.isValid(fieldValue, field.typeOptions, context)\n ? r.getMessage(fieldValue, field.typeOptions)\n : '');\n\n const errors = [];\n for (const r of validationRules) {\n const err = await validateRule(r);\n if (isNotEmpty(err)) errors.push(err);\n }\n\n return errors;\n};\n\nconst getDefaultOptions = mapValues(v => v.defaultValue);\n\nconst makerule$1 = (isValid, getMessage) => ({ isValid, getMessage });\nconst parsedFailed = val => ({ success: false, value: val });\nconst parsedSuccess = val => ({ success: true, value: val });\nconst getDefaultExport = (name, tryParse, functions, options, validationRules, sampleValue, stringify) => ({\n getNew: getNewValue(tryParse, functions),\n safeParseField: getSafeFieldParser(tryParse, functions),\n safeParseValue: getSafeValueParser(tryParse, functions),\n tryParse,\n name,\n getDefaultOptions: () => getDefaultOptions(cloneDeep(options)),\n optionDefinitions: options,\n validateTypeConstraints: validateTypeConstraints(validationRules),\n sampleValue,\n stringify: val => (val === null || val === undefined\n ? '' : stringify(val)),\n getDefaultValue: functions.default,\n});\n\nconst stringFunctions = typeFunctions({\n default: constant(null),\n});\n\nconst stringTryParse = switchCase(\n [isString, parsedSuccess],\n [isNull, parsedSuccess],\n [defaultCase, v => parsedSuccess(v.toString())],\n);\n\nconst options = {\n maxLength: {\n defaultValue: null,\n isValid: n => n === null || isSafeInteger(n) && n > 0,\n requirementDescription: 'max length must be null (no limit) or a greater than zero integer',\n parse: toNumberOrNull,\n },\n values: {\n defaultValue: null,\n isValid: v => v === null || (isArrayOfString(v) && v.length > 0 && v.length < 10000),\n requirementDescription: \"'values' must be null (no values) or an arry of at least one string\",\n parse: s => s,\n },\n allowDeclaredValuesOnly: {\n defaultValue: false,\n isValid: isBoolean,\n requirementDescription: 'allowDeclaredValuesOnly must be true or false',\n parse: toBoolOrNull,\n },\n};\n\nconst typeConstraints = [\n makerule$1(async (val, opts) => val === null || opts.maxLength === null || val.length <= opts.maxLength,\n (val, opts) => `value exceeds maximum length of ${opts.maxLength}`),\n makerule$1(async (val, opts) => val === null\n || opts.allowDeclaredValuesOnly === false\n || includes(opts.values, val),\n (val) => `\"${val}\" does not exist in the list of allowed values`),\n];\n\nvar string = getDefaultExport(\n 'string',\n stringTryParse,\n stringFunctions,\n options,\n typeConstraints,\n 'abcde',\n str => str,\n);\n\nconst boolFunctions = typeFunctions({\n default: constant(null),\n});\n\nconst boolTryParse = switchCase(\n [isBoolean, parsedSuccess],\n [isNull, parsedSuccess],\n [isOneOf('true', '1', 'yes', 'on'), () => parsedSuccess(true)],\n [isOneOf('false', '0', 'no', 'off'), () => parsedSuccess(false)],\n [defaultCase, parsedFailed],\n);\n\nconst options$1 = {\n allowNulls: {\n defaultValue: true,\n isValid: isBoolean,\n requirementDescription: 'must be a true or false',\n parse: toBoolOrNull,\n },\n};\n\nconst typeConstraints$1 = [\n makerule$1(async (val, opts) => opts.allowNulls === true || val !== null,\n () => 'field cannot be null'),\n];\n\nvar bool = getDefaultExport(\n 'bool', boolTryParse, boolFunctions,\n options$1, typeConstraints$1, true, JSON.stringify,\n);\n\nconst numberFunctions = typeFunctions({\n default: constant(null),\n});\n\nconst parseStringtoNumberOrNull = (s) => {\n const num = Number(s);\n return isNaN(num) ? parsedFailed(s) : parsedSuccess(num);\n};\n\nconst numberTryParse = switchCase(\n [isNumber, parsedSuccess],\n [isString, parseStringtoNumberOrNull],\n [isNull, parsedSuccess],\n [defaultCase, parsedFailed],\n);\n\nconst options$2 = {\n maxValue: {\n defaultValue: Number.MAX_SAFE_INTEGER,\n isValid: isSafeInteger,\n requirementDescription: 'must be a valid integer',\n parse: toNumberOrNull,\n },\n minValue: {\n defaultValue: 0 - Number.MAX_SAFE_INTEGER,\n isValid: isSafeInteger,\n requirementDescription: 'must be a valid integer',\n parse: toNumberOrNull,\n },\n decimalPlaces: {\n defaultValue: 0,\n isValid: n => isSafeInteger(n) && n >= 0,\n requirementDescription: 'must be a positive integer',\n parse: toNumberOrNull,\n },\n};\n\nconst getDecimalPlaces = (val) => {\n const splitDecimal = val.toString().split('.');\n if (splitDecimal.length === 1) return 0;\n return splitDecimal[1].length;\n};\n\nconst typeConstraints$2 = [\n makerule$1(async (val, opts) => val === null || opts.minValue === null || val >= opts.minValue,\n (val, opts) => `value (${val.toString()}) must be greater than or equal to ${opts.minValue}`),\n makerule$1(async (val, opts) => val === null || opts.maxValue === null || val <= opts.maxValue,\n (val, opts) => `value (${val.toString()}) must be less than or equal to ${opts.minValue} options`),\n makerule$1(async (val, opts) => val === null || opts.decimalPlaces >= getDecimalPlaces(val),\n (val, opts) => `value (${val.toString()}) must have ${opts.decimalPlaces} decimal places or less`),\n];\n\nvar number = getDefaultExport(\n 'number',\n numberTryParse,\n numberFunctions,\n options$2,\n typeConstraints$2,\n 1,\n num => num.toString(),\n);\n\nconst dateFunctions = typeFunctions({\n default: constant(null),\n now: () => new Date(),\n});\n\nconst isValidDate = d => d instanceof Date && !isNaN(d);\n\nconst parseStringToDate = s => switchCase(\n [isValidDate, parsedSuccess],\n [defaultCase, parsedFailed],\n)(new Date(s));\n\n\nconst dateTryParse = switchCase(\n [isDate, parsedSuccess],\n [isString, parseStringToDate],\n [isNull, parsedSuccess],\n [defaultCase, parsedFailed],\n);\n\nconst options$3 = {\n maxValue: {\n defaultValue: new Date(32503680000000),\n isValid: isDate,\n requirementDescription: 'must be a valid date',\n parse: toDateOrNull,\n },\n minValue: {\n defaultValue: new Date(-8520336000000),\n isValid: isDate,\n requirementDescription: 'must be a valid date',\n parse: toDateOrNull,\n },\n};\n\nconst typeConstraints$3 = [\n makerule$1(async (val, opts) => val === null || opts.minValue === null || val >= opts.minValue,\n (val, opts) => `value (${val.toString()}) must be greater than or equal to ${opts.minValue}`),\n makerule$1(async (val, opts) => val === null || opts.maxValue === null || val <= opts.maxValue,\n (val, opts) => `value (${val.toString()}) must be less than or equal to ${opts.minValue} options`),\n];\n\nvar datetime = getDefaultExport(\n 'datetime',\n dateTryParse,\n dateFunctions,\n options$3,\n typeConstraints$3,\n new Date(1984, 4, 1),\n date => JSON.stringify(date).replace(new RegExp('\"', 'g'), ''),\n);\n\nconst arrayFunctions = () => typeFunctions({\n default: constant([]),\n});\n\nconst mapToParsedArrary = type => $$(\n map(i => type.safeParseValue(i)),\n parsedSuccess,\n);\n\nconst arrayTryParse = type => switchCase(\n [isArray$1, mapToParsedArrary(type)],\n [defaultCase, parsedFailed],\n);\n\nconst typeName = type => `array<${type}>`;\n\n\nconst options$4 = {\n maxLength: {\n defaultValue: 10000,\n isValid: isSafeInteger,\n requirementDescription: 'must be a positive integer',\n parse: toNumberOrNull,\n },\n minLength: {\n defaultValue: 0,\n isValid: n => isSafeInteger(n) && n >= 0,\n requirementDescription: 'must be a positive integer',\n parse: toNumberOrNull,\n },\n};\n\nconst typeConstraints$4 = [\n makerule$1(async (val, opts) => val === null || val.length >= opts.minLength,\n (val, opts) => `must choose ${opts.minLength} or more options`),\n makerule$1(async (val, opts) => val === null || val.length <= opts.maxLength,\n (val, opts) => `cannot choose more than ${opts.maxLength} options`),\n];\n\nvar array = type => getDefaultExport(\n typeName(type.name),\n arrayTryParse(type),\n arrayFunctions(type),\n options$4,\n typeConstraints$4,\n [type.sampleValue],\n JSON.stringify,\n);\n\nconst referenceNothing = () => ({ key: '' });\n\nconst referenceFunctions = typeFunctions({\n default: referenceNothing,\n});\n\nconst hasStringValue = (ob, path) => has(ob, path)\n && isString(ob[path]);\n\nconst isObjectWithKey = v => isObjectLike(v)\n && hasStringValue(v, 'key');\n\nconst referenceTryParse = v => switchCase(\n [isObjectWithKey, parsedSuccess],\n [isNull, () => parsedSuccess(referenceNothing())],\n [defaultCase, parsedFailed],\n)(v);\n\nconst options$5 = {\n indexNodeKey: {\n defaultValue: null,\n isValid: isNonEmptyString,\n requirementDescription: 'must be a non-empty string',\n parse: s => s,\n },\n displayValue: {\n defaultValue: '',\n isValid: isNonEmptyString,\n requirementDescription: 'must be a non-empty string',\n parse: s => s,\n },\n reverseIndexNodeKeys: {\n defaultValue: null,\n isValid: v => isArrayOfString(v) && v.length > 0,\n requirementDescription: 'must be a non-empty array of strings',\n parse: s => s,\n },\n};\n\nconst isEmptyString = s => isString(s) && isEmpty(s);\n\nconst ensureReferenceExists = async (val, opts, context) => isEmptyString(val.key)\n || await context.referenceExists(opts, val.key);\n\nconst typeConstraints$5 = [\n makerule$1(\n ensureReferenceExists,\n (val, opts) => `\"${val[opts.displayValue]}\" does not exist in options list (key: ${val.key})`,\n ),\n];\n\nvar reference = getDefaultExport(\n 'reference',\n referenceTryParse,\n referenceFunctions,\n options$5,\n typeConstraints$5,\n { key: 'key', value: 'value' },\n JSON.stringify,\n);\n\nconst illegalCharacters = '*?\\\\/:<>|\\0\\b\\f\\v';\n\nconst isLegalFilename = (filePath) => {\n const fn = fileName(filePath);\n return fn.length <= 255\n && intersection(fn.split(''))(illegalCharacters.split('')).length === 0\n && none(f => f === '..')(splitKey(filePath));\n};\n\nconst fileNothing = () => ({ relativePath: '', size: 0 });\n\nconst fileFunctions = typeFunctions({\n default: fileNothing,\n});\n\nconst fileTryParse = v => switchCase(\n [isValidFile, parsedSuccess],\n [isNull$1, () => parsedSuccess(fileNothing())],\n [defaultCase, parsedFailed],\n)(v);\n\nconst fileName = filePath => $(filePath, [\n splitKey,\n last,\n]);\n\nconst isValidFile = f => !isNull$1(f)\n && has$1('relativePath')(f) && has$1('size')(f)\n && isNumber$1(f.size)\n && isString$1(f.relativePath)\n && isLegalFilename(f.relativePath);\n\nconst options$6 = {};\n\nconst typeConstraints$6 = [];\n\nvar file = getDefaultExport(\n 'file',\n fileTryParse,\n fileFunctions,\n options$6,\n typeConstraints$6,\n { relativePath: 'some_file.jpg', size: 1000 },\n JSON.stringify,\n);\n\nconst allTypes = () => {\n const basicTypes = {\n string, number, datetime, bool, reference, file,\n };\n\n const arrays = $(basicTypes, [\n keys,\n map((k) => {\n const kvType = {};\n const concreteArray = array(basicTypes[k]);\n kvType[concreteArray.name] = concreteArray;\n return kvType;\n }),\n types => assign({}, ...types),\n ]);\n\n return merge({}, basicTypes, arrays);\n};\n\n\nconst all$1 = allTypes();\n\nconst getType = (typeName) => {\n if (!has(all$1, typeName)) throw new BadRequestError(`Do not recognise type ${typeName}`);\n return all$1[typeName];\n};\n\nconst getSampleFieldValue = field => getType(field.type).sampleValue;\n\nconst getNewFieldValue = field => getType(field.type).getNew(field);\n\nconst safeParseField = (field, record) => getType(field.type).safeParseField(field, record);\n\nconst validateFieldParse = (field, record) => (has(record, field.name)\n ? getType(field.type).tryParse(record[field.name])\n : parsedSuccess(undefined)); // fields may be undefined by default\n\nconst getDefaultOptions$1 = type => getType(type).getDefaultOptions();\n\nconst validateTypeConstraints$1 = async (field, record, context) => await getType(field.type).validateTypeConstraints(field, record, context);\n\nconst detectType = (value) => {\n if (isString$1(value)) return string;\n if (isBoolean$1(value)) return bool;\n if (isNumber$1(value)) return number;\n if (isDate$1(value)) return datetime;\n if (isArray$2(value)) return array(detectType(value[0]));\n if (isObject(value)\n && has(value, 'key')\n && has(value, 'value')) return reference;\n if (isObject(value)\n && has(value, 'relativePath')\n && has(value, 'size')) return file;\n\n throw new BadRequestError(`cannot determine type: ${JSON.stringify(value)}`);\n};\n\n// 5 minutes\nconst tempCodeExpiryLength = 5 * 60 * 1000;\n\nconst AUTH_FOLDER = '/.auth';\nconst USERS_LIST_FILE = joinKey(AUTH_FOLDER, 'users.json');\nconst userAuthFile = username => joinKey(AUTH_FOLDER, `auth_${username}.json`);\nconst USERS_LOCK_FILE = joinKey(AUTH_FOLDER, 'users_lock');\nconst ACCESS_LEVELS_FILE = joinKey(AUTH_FOLDER, 'access_levels.json');\nconst ACCESS_LEVELS_LOCK_FILE = joinKey(AUTH_FOLDER, 'access_levels_lock');\n\nconst permissionTypes = {\n CREATE_RECORD: 'create record',\n UPDATE_RECORD: 'update record',\n READ_RECORD: 'read record',\n DELETE_RECORD: 'delete record',\n READ_INDEX: 'read index',\n MANAGE_INDEX: 'manage index',\n MANAGE_COLLECTION: 'manage collection',\n WRITE_TEMPLATES: 'write templates',\n CREATE_USER: 'create user',\n SET_PASSWORD: 'set password',\n CREATE_TEMPORARY_ACCESS: 'create temporary access',\n ENABLE_DISABLE_USER: 'enable or disable user',\n WRITE_ACCESS_LEVELS: 'write access levels',\n LIST_USERS: 'list users',\n LIST_ACCESS_LEVELS: 'list access levels',\n EXECUTE_ACTION: 'execute action',\n SET_USER_ACCESS_LEVELS: 'set user access levels',\n};\n\nconst getUserByName = (users, name) => $(users, [\n find(u => u.name.toLowerCase() === name.toLowerCase()),\n]);\n\nconst stripUserOfSensitiveStuff = (user) => {\n const stripped = clone(user);\n delete stripped.tempCode;\n return stripped;\n};\n\nconst parseTemporaryCode = fullCode => $(fullCode, [\n split(':'),\n parts => ({\n id: parts[1],\n code: parts[2],\n }),\n]);\n\nconst isAuthorized = app => (permissionType, resourceKey) => apiWrapperSync(\n app,\n events.authApi.isAuthorized,\n alwaysAuthorized,\n { resourceKey, permissionType },\n _isAuthorized, app, permissionType, resourceKey,\n);\n\nconst _isAuthorized = (app, permissionType, resourceKey) => {\n if (!app.user) {\n return false;\n }\n\n const validType = $(permissionTypes, [\n values,\n includes$1(permissionType),\n ]);\n\n if (!validType) {\n return false;\n }\n\n const permMatchesResource = (userperm) => {\n const nodeKey = isNothing(resourceKey)\n ? null\n : isNode(app.hierarchy, resourceKey)\n ? getNodeByKeyOrNodeKey(\n app.hierarchy, resourceKey,\n ).nodeKey()\n : resourceKey;\n\n return (userperm.type === permissionType)\n && (\n isNothing(resourceKey)\n || nodeKey === userperm.nodeKey\n );\n };\n\n return $(app.user.permissions, [\n some(permMatchesResource),\n ]);\n};\n\nconst nodePermission = type => ({\n add: (nodeKey, accessLevel) => accessLevel.permissions.push({ type, nodeKey }),\n isAuthorized: resourceKey => app => isAuthorized(app)(type, resourceKey),\n isNode: true,\n get: nodeKey => ({ type, nodeKey }),\n});\n\nconst staticPermission = type => ({\n add: accessLevel => accessLevel.permissions.push({ type }),\n isAuthorized: app => isAuthorized(app)(type),\n isNode: false,\n get: () => ({ type }),\n});\n\nconst createRecord = nodePermission(permissionTypes.CREATE_RECORD);\n\nconst updateRecord = nodePermission(permissionTypes.UPDATE_RECORD);\n\nconst deleteRecord = nodePermission(permissionTypes.DELETE_RECORD);\n\nconst readRecord = nodePermission(permissionTypes.READ_RECORD);\n\nconst writeTemplates = staticPermission(permissionTypes.WRITE_TEMPLATES);\n\nconst createUser = staticPermission(permissionTypes.CREATE_USER);\n\nconst setPassword = staticPermission(permissionTypes.SET_PASSWORD);\n\nconst readIndex = nodePermission(permissionTypes.READ_INDEX);\n\nconst manageIndex = staticPermission(permissionTypes.MANAGE_INDEX);\n\nconst manageCollection = staticPermission(permissionTypes.MANAGE_COLLECTION);\n\nconst createTemporaryAccess = staticPermission(permissionTypes.CREATE_TEMPORARY_ACCESS);\n\nconst enableDisableUser = staticPermission(permissionTypes.ENABLE_DISABLE_USER);\n\nconst writeAccessLevels = staticPermission(permissionTypes.WRITE_ACCESS_LEVELS);\n\nconst listUsers = staticPermission(permissionTypes.LIST_USERS);\n\nconst listAccessLevels = staticPermission(permissionTypes.LIST_ACCESS_LEVELS);\n\nconst setUserAccessLevels = staticPermission(permissionTypes.SET_USER_ACCESS_LEVELS);\n\nconst executeAction = nodePermission(permissionTypes.EXECUTE_ACTION);\n\nconst alwaysAuthorized = () => true;\n\nconst permission = {\n createRecord,\n updateRecord,\n deleteRecord,\n readRecord,\n writeTemplates,\n createUser,\n setPassword,\n readIndex,\n createTemporaryAccess,\n enableDisableUser,\n writeAccessLevels,\n listUsers,\n listAccessLevels,\n manageIndex,\n manageCollection,\n executeAction,\n setUserAccessLevels,\n};\n\nconst getNew = app => (collectionKey, recordTypeName) => {\n const recordNode = getRecordNode(app, collectionKey, recordTypeName);\n return apiWrapperSync(\n app,\n events.recordApi.getNew,\n permission.createRecord.isAuthorized(recordNode.nodeKey()),\n { collectionKey, recordTypeName },\n _getNew, recordNode, collectionKey,\n );\n};\n\nconst _getNew = (recordNode, collectionKey) => constructRecord(recordNode, getNewFieldValue, collectionKey);\n\nconst getRecordNode = (app, collectionKey) => {\n collectionKey = safeKey(collectionKey);\n return getNodeForCollectionPath(app.hierarchy)(collectionKey);\n};\n\nconst getNewChild = app => (recordKey, collectionName, recordTypeName) => \n getNew(app)(joinKey(recordKey, collectionName), recordTypeName);\n\nconst constructRecord = (recordNode, getFieldValue, collectionKey) => {\n const record = $(recordNode.fields, [\n keyBy('name'),\n mapValues(getFieldValue),\n ]);\n\n record.id = `${recordNode.nodeId}-${generate()}`;\n record.key = joinKey(collectionKey, record.id);\n record.isNew = true;\n record.type = recordNode.name;\n return record;\n};\n\nconst getRecordFileName = key => joinKey(key, 'record.json');\n\nconst load = app => async key => apiWrapper(\n app,\n events.recordApi.load,\n permission.readRecord.isAuthorized(key),\n { key },\n _load, app, key,\n);\n\nconst _load = async (app, key, keyStack = []) => {\n key = safeKey(key);\n const recordNode = getExactNodeForPath(app.hierarchy)(key);\n const storedData = await app.datastore.loadJson(\n getRecordFileName(key),\n );\n\n const loadedRecord = $(recordNode.fields, [\n keyBy('name'),\n mapValues(f => safeParseField(f, storedData)),\n ]);\n\n const newKeyStack = [...keyStack, key];\n\n const references = $(recordNode.fields, [\n filter(f => f.type === 'reference'\n && isNonEmptyString(loadedRecord[f.name].key)\n && !includes$1(loadedRecord[f.name].key)(newKeyStack)),\n map(f => ({\n promise: _load(app, loadedRecord[f.name].key, newKeyStack),\n index: getNode(app.hierarchy, f.typeOptions.indexNodeKey),\n field: f,\n })),\n ]);\n\n if (references.length > 0) {\n const refRecords = await Promise.all(\n map(p => p.promise)(references),\n );\n\n for (const ref of references) {\n loadedRecord[ref.field.name] = mapRecord(\n refRecords[references.indexOf(ref)],\n ref.index,\n );\n }\n }\n\n loadedRecord.transactionId = storedData.transactionId;\n loadedRecord.isNew = false;\n loadedRecord.key = key;\n loadedRecord.id = $(key, [splitKey, last]);\n loadedRecord.type = recordNode.name;\n return loadedRecord;\n};\n\n// adapted from https://github.com/dex4er/js-promise-readable\r\n// thanks :)\r\n \r\nconst promiseReadableStream = stream => {\r\n \r\n let _errored;\r\n\r\n const _errorHandler = err => {\r\n _errored = err;\r\n };\r\n\r\n stream.on(\"error\", _errorHandler);\r\n \r\n const read = (size) => {\r\n \r\n return new Promise((resolve, reject) => {\r\n if (_errored) {\r\n const err = _errored;\r\n _errored = undefined;\r\n return reject(err)\r\n }\r\n \r\n if (!stream.readable || stream.closed || stream.destroyed) {\r\n return resolve();\r\n }\r\n \r\n const readableHandler = () => {\r\n const chunk = stream.read(size);\r\n \r\n if (chunk) {\r\n removeListeners();\r\n resolve(chunk);\r\n }\r\n };\r\n \r\n const closeHandler = () => {\r\n removeListeners();\r\n resolve();\r\n };\r\n \r\n const endHandler = () => {\r\n removeListeners();\r\n resolve();\r\n };\r\n \r\n const errorHandler = (err) => {\r\n _errored = undefined;\r\n removeListeners();\r\n reject(err);\r\n };\r\n \r\n const removeListeners = () => {\r\n stream.removeListener(\"close\", closeHandler);\r\n stream.removeListener(\"error\", errorHandler);\r\n stream.removeListener(\"end\", endHandler);\r\n stream.removeListener(\"readable\", readableHandler);\r\n };\r\n \r\n stream.on(\"close\", closeHandler);\r\n stream.on(\"end\", endHandler);\r\n stream.on(\"error\", errorHandler);\r\n stream.on(\"readable\", readableHandler);\r\n \r\n readableHandler();\r\n });\r\n };\r\n \r\n \r\n const destroy = () => {\r\n if (stream) {\r\n if (_errorHandler) {\r\n stream.removeListener(\"error\", _errorHandler);\r\n }\r\n if (typeof stream.destroy === \"function\") {\r\n stream.destroy();\r\n }\r\n }\r\n };\r\n \r\n return {read, destroy, stream};\r\n };\n\nconst getIndexedDataKey = (indexNode, indexKey, record) => {\n const getShardName = (indexNode, record) => {\n const shardNameFunc = compileCode$1(indexNode.getShardName);\n try {\n return shardNameFunc({ record });\n } catch(e) {\n const errorDetails = `shardCode: ${indexNode.getShardName} :: record: ${JSON.stringify(record)} :: `;\n e.message = \"Error running index shardname func: \" + errorDetails + e.message;\n throw e;\n }\n };\n\n const shardName = isNonEmptyString(indexNode.getShardName)\n ? `${getShardName(indexNode, record)}.csv`\n : 'index.csv';\n\n return joinKey(indexKey, shardName);\n};\n\nconst getShardKeysInRange = async (app, indexKey, startRecord = null, endRecord = null) => {\n const indexNode = getExactNodeForPath(app.hierarchy)(indexKey);\n\n const startShardName = !startRecord\n ? null\n : shardNameFromKey(\n getIndexedDataKey(\n indexNode,\n indexKey,\n startRecord,\n ),\n );\n\n const endShardName = !endRecord\n ? null\n : shardNameFromKey(\n getIndexedDataKey(\n indexNode,\n indexKey,\n endRecord,\n ),\n );\n\n return $(await getShardMap(app.datastore, indexKey), [\n filter(k => (startRecord === null || k >= startShardName)\n && (endRecord === null || k <= endShardName)),\n map(k => joinKey(indexKey, `${k}.csv`)),\n ]);\n};\n\nconst ensureShardNameIsInShardMap = async (store, indexKey, indexedDataKey) => {\n const map = await getShardMap(store, indexKey);\n const shardName = shardNameFromKey(indexedDataKey);\n if (!includes$1(shardName)(map)) {\n map.push(shardName);\n await writeShardMap(store, indexKey, map);\n }\n};\n\nconst getShardMap = async (datastore, indexKey) => {\n const shardMapKey = getShardMapKey(indexKey);\n try {\n return await datastore.loadJson(shardMapKey);\n } catch (_) {\n await datastore.createJson(shardMapKey, []);\n return [];\n }\n};\n\nconst writeShardMap = async (datastore, indexKey, shardMap) => await datastore.updateJson(\n getShardMapKey(indexKey),\n shardMap,\n);\n\nconst getAllShardKeys = async (app, indexKey) => await getShardKeysInRange(app, indexKey);\n\nconst getShardMapKey = indexKey => joinKey(indexKey, 'shardMap.json');\n\nconst getUnshardedIndexDataKey = indexKey => joinKey(indexKey, 'index.csv');\n\nconst createIndexFile = async (datastore, indexedDataKey, index) => {\n if (isShardedIndex(index)) {\n const indexKey = getParentKey(indexedDataKey);\n const shardMap = await getShardMap(datastore, indexKey);\n shardMap.push(\n shardNameFromKey(indexedDataKey),\n );\n await writeShardMap(datastore, indexKey, shardMap);\n }\n await datastore.createFile(indexedDataKey, '');\n};\n\nconst shardNameFromKey = key => $(key, [\n splitKey,\n last,\n]).replace('.csv', '');\n\nconst getIndexKey_BasedOnDecendant = (decendantKey, indexNode) => {\n if (isGlobalIndex(indexNode)) { return `${indexNode.nodeKey()}`; }\n\n const indexedDataParentKey = getActualKeyOfParent(\n indexNode.parent().nodeKey(),\n decendantKey,\n );\n\n return joinKey(\n indexedDataParentKey,\n indexNode.name,\n );\n};\n\nconst generateSchema = (hierarchy, indexNode) => {\n const recordNodes = getAllowedRecordNodesForIndex(hierarchy, indexNode);\n const mappedRecords = $(recordNodes, [\n map(n => mapRecord(createSampleRecord(n), indexNode)),\n ]);\n\n // always has record key and sort key\n const schema = {\n sortKey: all$1.string,\n key: all$1.string,\n };\n\n const fieldsHas = has$1(schema);\n const setField = (fieldName, value) => {\n if (value === null || value === undefined) { return; }\n\n const thisType = detectType(value);\n if (fieldsHas(fieldName)) {\n if (schema[fieldName] !== thisType) {\n schema[fieldName] = all$1.string;\n }\n } else {\n schema[fieldName] = thisType;\n }\n };\n\n for (const mappedRec of mappedRecords) {\n for (const f in mappedRec) {\n setField(f, mappedRec[f]);\n }\n }\n\n // returing an array of {name, type}\n return $(schema, [\n keys$1,\n map(k => ({ name: k, type: schema[k].name })),\n filter(s => s.name !== 'sortKey'),\n orderBy('name', ['desc']), // reverse aplha\n concat([{ name: 'sortKey', type: all$1.string.name }]), // sortKey on end\n reverse, // sortKey first, then rest are alphabetical\n ]);\n};\n\nconst createSampleRecord = recordNode => constructRecord(\n recordNode,\n getSampleFieldValue,\n recordNode.parent().nodeKey(),\n);\n\nvar global$1 = (typeof global !== \"undefined\" ? global :\n typeof self !== \"undefined\" ? self :\n typeof window !== \"undefined\" ? window : {});\n\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar inited = false;\nfunction init () {\n inited = true;\n var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n for (var i = 0, len = code.length; i < len; ++i) {\n lookup[i] = code[i];\n revLookup[code.charCodeAt(i)] = i;\n }\n\n revLookup['-'.charCodeAt(0)] = 62;\n revLookup['_'.charCodeAt(0)] = 63;\n}\n\nfunction toByteArray (b64) {\n if (!inited) {\n init();\n }\n var i, j, l, tmp, placeHolders, arr;\n var len = b64.length;\n\n if (len % 4 > 0) {\n throw new Error('Invalid string. Length must be a multiple of 4')\n }\n\n // the number of equal signs (place holders)\n // if there are two placeholders, than the two characters before it\n // represent one byte\n // if there is only one, then the three characters before it represent 2 bytes\n // this is just a cheap hack to not do indexOf twice\n placeHolders = b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0;\n\n // base64 is 4/3 + up to two characters of the original data\n arr = new Arr(len * 3 / 4 - placeHolders);\n\n // if there are placeholders, only get up to the last complete 4 chars\n l = placeHolders > 0 ? len - 4 : len;\n\n var L = 0;\n\n for (i = 0, j = 0; i < l; i += 4, j += 3) {\n tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)];\n arr[L++] = (tmp >> 16) & 0xFF;\n arr[L++] = (tmp >> 8) & 0xFF;\n arr[L++] = tmp & 0xFF;\n }\n\n if (placeHolders === 2) {\n tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4);\n arr[L++] = tmp & 0xFF;\n } else if (placeHolders === 1) {\n tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2);\n arr[L++] = (tmp >> 8) & 0xFF;\n arr[L++] = tmp & 0xFF;\n }\n\n return arr\n}\n\nfunction tripletToBase64 (num) {\n return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F]\n}\n\nfunction encodeChunk (uint8, start, end) {\n var tmp;\n var output = [];\n for (var i = start; i < end; i += 3) {\n tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]);\n output.push(tripletToBase64(tmp));\n }\n return output.join('')\n}\n\nfunction fromByteArray (uint8) {\n if (!inited) {\n init();\n }\n var tmp;\n var len = uint8.length;\n var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n var output = '';\n var parts = [];\n var maxChunkLength = 16383; // must be multiple of 3\n\n // go through the array every three bytes, we'll deal with trailing stuff later\n for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength)));\n }\n\n // pad the end with zeros, but make sure to not forget the extra bytes\n if (extraBytes === 1) {\n tmp = uint8[len - 1];\n output += lookup[tmp >> 2];\n output += lookup[(tmp << 4) & 0x3F];\n output += '==';\n } else if (extraBytes === 2) {\n tmp = (uint8[len - 2] << 8) + (uint8[len - 1]);\n output += lookup[tmp >> 10];\n output += lookup[(tmp >> 4) & 0x3F];\n output += lookup[(tmp << 2) & 0x3F];\n output += '=';\n }\n\n parts.push(output);\n\n return parts.join('')\n}\n\nvar base64 = /*#__PURE__*/Object.freeze({\n toByteArray: toByteArray,\n fromByteArray: fromByteArray\n});\n\nfunction read (buffer, offset, isLE, mLen, nBytes) {\n var e, m;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var nBits = -7;\n var i = isLE ? (nBytes - 1) : 0;\n var d = isLE ? -1 : 1;\n var s = buffer[offset + i];\n\n i += d;\n\n e = s & ((1 << (-nBits)) - 1);\n s >>= (-nBits);\n nBits += eLen;\n for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n m = e & ((1 << (-nBits)) - 1);\n e >>= (-nBits);\n nBits += mLen;\n for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n if (e === 0) {\n e = 1 - eBias;\n } else if (e === eMax) {\n return m ? NaN : ((s ? -1 : 1) * Infinity)\n } else {\n m = m + Math.pow(2, mLen);\n e = e - eBias;\n }\n return (s ? -1 : 1) * m * Math.pow(2, e - mLen)\n}\n\nfunction write (buffer, value, offset, isLE, mLen, nBytes) {\n var e, m, c;\n var eLen = nBytes * 8 - mLen - 1;\n var eMax = (1 << eLen) - 1;\n var eBias = eMax >> 1;\n var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0);\n var i = isLE ? 0 : (nBytes - 1);\n var d = isLE ? 1 : -1;\n var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0;\n\n value = Math.abs(value);\n\n if (isNaN(value) || value === Infinity) {\n m = isNaN(value) ? 1 : 0;\n e = eMax;\n } else {\n e = Math.floor(Math.log(value) / Math.LN2);\n if (value * (c = Math.pow(2, -e)) < 1) {\n e--;\n c *= 2;\n }\n if (e + eBias >= 1) {\n value += rt / c;\n } else {\n value += rt * Math.pow(2, 1 - eBias);\n }\n if (value * c >= 2) {\n e++;\n c /= 2;\n }\n\n if (e + eBias >= eMax) {\n m = 0;\n e = eMax;\n } else if (e + eBias >= 1) {\n m = (value * c - 1) * Math.pow(2, mLen);\n e = e + eBias;\n } else {\n m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n e = 0;\n }\n }\n\n for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n e = (e << mLen) | m;\n eLen += mLen;\n for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n buffer[offset + i - d] |= s * 128;\n}\n\nvar toString = {}.toString;\n\nvar isArray = Array.isArray || function (arr) {\n return toString.call(arr) == '[object Array]';\n};\n\nvar INSPECT_MAX_BYTES = 50;\n\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n * === true Use Uint8Array implementation (fastest)\n * === false Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n * incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\nBuffer.TYPED_ARRAY_SUPPORT = global$1.TYPED_ARRAY_SUPPORT !== undefined\n ? global$1.TYPED_ARRAY_SUPPORT\n : true;\n\nfunction kMaxLength () {\n return Buffer.TYPED_ARRAY_SUPPORT\n ? 0x7fffffff\n : 0x3fffffff\n}\n\nfunction createBuffer (that, length) {\n if (kMaxLength() < length) {\n throw new RangeError('Invalid typed array length')\n }\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = new Uint8Array(length);\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n if (that === null) {\n that = new Buffer(length);\n }\n that.length = length;\n }\n\n return that\n}\n\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\nfunction Buffer (arg, encodingOrOffset, length) {\n if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n return new Buffer(arg, encodingOrOffset, length)\n }\n\n // Common case.\n if (typeof arg === 'number') {\n if (typeof encodingOrOffset === 'string') {\n throw new Error(\n 'If encoding is specified then the first argument must be a string'\n )\n }\n return allocUnsafe(this, arg)\n }\n return from(this, arg, encodingOrOffset, length)\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n\n// TODO: Legacy, not needed anymore. Remove in next major version.\nBuffer._augment = function (arr) {\n arr.__proto__ = Buffer.prototype;\n return arr\n};\n\nfunction from (that, value, encodingOrOffset, length) {\n if (typeof value === 'number') {\n throw new TypeError('\"value\" argument must not be a number')\n }\n\n if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n return fromArrayBuffer(that, value, encodingOrOffset, length)\n }\n\n if (typeof value === 'string') {\n return fromString(that, value, encodingOrOffset)\n }\n\n return fromObject(that, value)\n}\n\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\nBuffer.from = function (value, encodingOrOffset, length) {\n return from(null, value, encodingOrOffset, length)\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n Buffer.prototype.__proto__ = Uint8Array.prototype;\n Buffer.__proto__ = Uint8Array;\n}\n\nfunction assertSize (size) {\n if (typeof size !== 'number') {\n throw new TypeError('\"size\" argument must be a number')\n } else if (size < 0) {\n throw new RangeError('\"size\" argument must not be negative')\n }\n}\n\nfunction alloc (that, size, fill, encoding) {\n assertSize(size);\n if (size <= 0) {\n return createBuffer(that, size)\n }\n if (fill !== undefined) {\n // Only pay attention to encoding if it's a string. This\n // prevents accidentally sending in a number that would\n // be interpretted as a start offset.\n return typeof encoding === 'string'\n ? createBuffer(that, size).fill(fill, encoding)\n : createBuffer(that, size).fill(fill)\n }\n return createBuffer(that, size)\n}\n\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\nBuffer.alloc = function (size, fill, encoding) {\n return alloc(null, size, fill, encoding)\n};\n\nfunction allocUnsafe (that, size) {\n assertSize(size);\n that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) {\n for (var i = 0; i < size; ++i) {\n that[i] = 0;\n }\n }\n return that\n}\n\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\nBuffer.allocUnsafe = function (size) {\n return allocUnsafe(null, size)\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\nBuffer.allocUnsafeSlow = function (size) {\n return allocUnsafe(null, size)\n};\n\nfunction fromString (that, string, encoding) {\n if (typeof encoding !== 'string' || encoding === '') {\n encoding = 'utf8';\n }\n\n if (!Buffer.isEncoding(encoding)) {\n throw new TypeError('\"encoding\" must be a valid string encoding')\n }\n\n var length = byteLength(string, encoding) | 0;\n that = createBuffer(that, length);\n\n var actual = that.write(string, encoding);\n\n if (actual !== length) {\n // Writing a hex string, for example, that contains invalid characters will\n // cause everything after the first invalid character to be ignored. (e.g.\n // 'abxxcd' will be treated as 'ab')\n that = that.slice(0, actual);\n }\n\n return that\n}\n\nfunction fromArrayLike (that, array) {\n var length = array.length < 0 ? 0 : checked(array.length) | 0;\n that = createBuffer(that, length);\n for (var i = 0; i < length; i += 1) {\n that[i] = array[i] & 255;\n }\n return that\n}\n\nfunction fromArrayBuffer (that, array, byteOffset, length) {\n array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n if (byteOffset < 0 || array.byteLength < byteOffset) {\n throw new RangeError('\\'offset\\' is out of bounds')\n }\n\n if (array.byteLength < byteOffset + (length || 0)) {\n throw new RangeError('\\'length\\' is out of bounds')\n }\n\n if (byteOffset === undefined && length === undefined) {\n array = new Uint8Array(array);\n } else if (length === undefined) {\n array = new Uint8Array(array, byteOffset);\n } else {\n array = new Uint8Array(array, byteOffset, length);\n }\n\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n // Return an augmented `Uint8Array` instance, for best performance\n that = array;\n that.__proto__ = Buffer.prototype;\n } else {\n // Fallback: Return an object instance of the Buffer class\n that = fromArrayLike(that, array);\n }\n return that\n}\n\nfunction fromObject (that, obj) {\n if (internalIsBuffer(obj)) {\n var len = checked(obj.length) | 0;\n that = createBuffer(that, len);\n\n if (that.length === 0) {\n return that\n }\n\n obj.copy(that, 0, 0, len);\n return that\n }\n\n if (obj) {\n if ((typeof ArrayBuffer !== 'undefined' &&\n obj.buffer instanceof ArrayBuffer) || 'length' in obj) {\n if (typeof obj.length !== 'number' || isnan(obj.length)) {\n return createBuffer(that, 0)\n }\n return fromArrayLike(that, obj)\n }\n\n if (obj.type === 'Buffer' && isArray(obj.data)) {\n return fromArrayLike(that, obj.data)\n }\n }\n\n throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.')\n}\n\nfunction checked (length) {\n // Note: cannot use `length < kMaxLength()` here because that fails when\n // length is NaN (which is otherwise coerced to zero.)\n if (length >= kMaxLength()) {\n throw new RangeError('Attempt to allocate Buffer larger than maximum ' +\n 'size: 0x' + kMaxLength().toString(16) + ' bytes')\n }\n return length | 0\n}\nBuffer.isBuffer = isBuffer;\nfunction internalIsBuffer (b) {\n return !!(b != null && b._isBuffer)\n}\n\nBuffer.compare = function compare (a, b) {\n if (!internalIsBuffer(a) || !internalIsBuffer(b)) {\n throw new TypeError('Arguments must be Buffers')\n }\n\n if (a === b) return 0\n\n var x = a.length;\n var y = b.length;\n\n for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n if (a[i] !== b[i]) {\n x = a[i];\n y = b[i];\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n};\n\nBuffer.isEncoding = function isEncoding (encoding) {\n switch (String(encoding).toLowerCase()) {\n case 'hex':\n case 'utf8':\n case 'utf-8':\n case 'ascii':\n case 'latin1':\n case 'binary':\n case 'base64':\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return true\n default:\n return false\n }\n};\n\nBuffer.concat = function concat (list, length) {\n if (!isArray(list)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n\n if (list.length === 0) {\n return Buffer.alloc(0)\n }\n\n var i;\n if (length === undefined) {\n length = 0;\n for (i = 0; i < list.length; ++i) {\n length += list[i].length;\n }\n }\n\n var buffer = Buffer.allocUnsafe(length);\n var pos = 0;\n for (i = 0; i < list.length; ++i) {\n var buf = list[i];\n if (!internalIsBuffer(buf)) {\n throw new TypeError('\"list\" argument must be an Array of Buffers')\n }\n buf.copy(buffer, pos);\n pos += buf.length;\n }\n return buffer\n};\n\nfunction byteLength (string, encoding) {\n if (internalIsBuffer(string)) {\n return string.length\n }\n if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' &&\n (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n return string.byteLength\n }\n if (typeof string !== 'string') {\n string = '' + string;\n }\n\n var len = string.length;\n if (len === 0) return 0\n\n // Use a for loop to avoid recursion\n var loweredCase = false;\n for (;;) {\n switch (encoding) {\n case 'ascii':\n case 'latin1':\n case 'binary':\n return len\n case 'utf8':\n case 'utf-8':\n case undefined:\n return utf8ToBytes(string).length\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return len * 2\n case 'hex':\n return len >>> 1\n case 'base64':\n return base64ToBytes(string).length\n default:\n if (loweredCase) return utf8ToBytes(string).length // assume utf8\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n}\nBuffer.byteLength = byteLength;\n\nfunction slowToString (encoding, start, end) {\n var loweredCase = false;\n\n // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n // property of a typed array.\n\n // This behaves neither like String nor Uint8Array in that we set start/end\n // to their upper/lower bounds if the value passed is out of range.\n // undefined is handled specially as per ECMA-262 6th Edition,\n // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n if (start === undefined || start < 0) {\n start = 0;\n }\n // Return early if start > this.length. Done here to prevent potential uint32\n // coercion fail below.\n if (start > this.length) {\n return ''\n }\n\n if (end === undefined || end > this.length) {\n end = this.length;\n }\n\n if (end <= 0) {\n return ''\n }\n\n // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n end >>>= 0;\n start >>>= 0;\n\n if (end <= start) {\n return ''\n }\n\n if (!encoding) encoding = 'utf8';\n\n while (true) {\n switch (encoding) {\n case 'hex':\n return hexSlice(this, start, end)\n\n case 'utf8':\n case 'utf-8':\n return utf8Slice(this, start, end)\n\n case 'ascii':\n return asciiSlice(this, start, end)\n\n case 'latin1':\n case 'binary':\n return latin1Slice(this, start, end)\n\n case 'base64':\n return base64Slice(this, start, end)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return utf16leSlice(this, start, end)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = (encoding + '').toLowerCase();\n loweredCase = true;\n }\n }\n}\n\n// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\nBuffer.prototype._isBuffer = true;\n\nfunction swap (b, n, m) {\n var i = b[n];\n b[n] = b[m];\n b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16 () {\n var len = this.length;\n if (len % 2 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 16-bits')\n }\n for (var i = 0; i < len; i += 2) {\n swap(this, i, i + 1);\n }\n return this\n};\n\nBuffer.prototype.swap32 = function swap32 () {\n var len = this.length;\n if (len % 4 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 32-bits')\n }\n for (var i = 0; i < len; i += 4) {\n swap(this, i, i + 3);\n swap(this, i + 1, i + 2);\n }\n return this\n};\n\nBuffer.prototype.swap64 = function swap64 () {\n var len = this.length;\n if (len % 8 !== 0) {\n throw new RangeError('Buffer size must be a multiple of 64-bits')\n }\n for (var i = 0; i < len; i += 8) {\n swap(this, i, i + 7);\n swap(this, i + 1, i + 6);\n swap(this, i + 2, i + 5);\n swap(this, i + 3, i + 4);\n }\n return this\n};\n\nBuffer.prototype.toString = function toString () {\n var length = this.length | 0;\n if (length === 0) return ''\n if (arguments.length === 0) return utf8Slice(this, 0, length)\n return slowToString.apply(this, arguments)\n};\n\nBuffer.prototype.equals = function equals (b) {\n if (!internalIsBuffer(b)) throw new TypeError('Argument must be a Buffer')\n if (this === b) return true\n return Buffer.compare(this, b) === 0\n};\n\nBuffer.prototype.inspect = function inspect () {\n var str = '';\n var max = INSPECT_MAX_BYTES;\n if (this.length > 0) {\n str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n if (this.length > max) str += ' ... ';\n }\n return '<Buffer ' + str + '>'\n};\n\nBuffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) {\n if (!internalIsBuffer(target)) {\n throw new TypeError('Argument must be a Buffer')\n }\n\n if (start === undefined) {\n start = 0;\n }\n if (end === undefined) {\n end = target ? target.length : 0;\n }\n if (thisStart === undefined) {\n thisStart = 0;\n }\n if (thisEnd === undefined) {\n thisEnd = this.length;\n }\n\n if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n throw new RangeError('out of range index')\n }\n\n if (thisStart >= thisEnd && start >= end) {\n return 0\n }\n if (thisStart >= thisEnd) {\n return -1\n }\n if (start >= end) {\n return 1\n }\n\n start >>>= 0;\n end >>>= 0;\n thisStart >>>= 0;\n thisEnd >>>= 0;\n\n if (this === target) return 0\n\n var x = thisEnd - thisStart;\n var y = end - start;\n var len = Math.min(x, y);\n\n var thisCopy = this.slice(thisStart, thisEnd);\n var targetCopy = target.slice(start, end);\n\n for (var i = 0; i < len; ++i) {\n if (thisCopy[i] !== targetCopy[i]) {\n x = thisCopy[i];\n y = targetCopy[i];\n break\n }\n }\n\n if (x < y) return -1\n if (y < x) return 1\n return 0\n};\n\n// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\nfunction bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) {\n // Empty buffer means no match\n if (buffer.length === 0) return -1\n\n // Normalize byteOffset\n if (typeof byteOffset === 'string') {\n encoding = byteOffset;\n byteOffset = 0;\n } else if (byteOffset > 0x7fffffff) {\n byteOffset = 0x7fffffff;\n } else if (byteOffset < -0x80000000) {\n byteOffset = -0x80000000;\n }\n byteOffset = +byteOffset; // Coerce to Number.\n if (isNaN(byteOffset)) {\n // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n byteOffset = dir ? 0 : (buffer.length - 1);\n }\n\n // Normalize byteOffset: negative offsets start from the end of the buffer\n if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n if (byteOffset >= buffer.length) {\n if (dir) return -1\n else byteOffset = buffer.length - 1;\n } else if (byteOffset < 0) {\n if (dir) byteOffset = 0;\n else return -1\n }\n\n // Normalize val\n if (typeof val === 'string') {\n val = Buffer.from(val, encoding);\n }\n\n // Finally, search either indexOf (if dir is true) or lastIndexOf\n if (internalIsBuffer(val)) {\n // Special case: looking for empty string/buffer always fails\n if (val.length === 0) {\n return -1\n }\n return arrayIndexOf(buffer, val, byteOffset, encoding, dir)\n } else if (typeof val === 'number') {\n val = val & 0xFF; // Search for a byte value [0-255]\n if (Buffer.TYPED_ARRAY_SUPPORT &&\n typeof Uint8Array.prototype.indexOf === 'function') {\n if (dir) {\n return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset)\n } else {\n return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset)\n }\n }\n return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir)\n }\n\n throw new TypeError('val must be string, number or Buffer')\n}\n\nfunction arrayIndexOf (arr, val, byteOffset, encoding, dir) {\n var indexSize = 1;\n var arrLength = arr.length;\n var valLength = val.length;\n\n if (encoding !== undefined) {\n encoding = String(encoding).toLowerCase();\n if (encoding === 'ucs2' || encoding === 'ucs-2' ||\n encoding === 'utf16le' || encoding === 'utf-16le') {\n if (arr.length < 2 || val.length < 2) {\n return -1\n }\n indexSize = 2;\n arrLength /= 2;\n valLength /= 2;\n byteOffset /= 2;\n }\n }\n\n function read (buf, i) {\n if (indexSize === 1) {\n return buf[i]\n } else {\n return buf.readUInt16BE(i * indexSize)\n }\n }\n\n var i;\n if (dir) {\n var foundIndex = -1;\n for (i = byteOffset; i < arrLength; i++) {\n if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n if (foundIndex === -1) foundIndex = i;\n if (i - foundIndex + 1 === valLength) return foundIndex * indexSize\n } else {\n if (foundIndex !== -1) i -= i - foundIndex;\n foundIndex = -1;\n }\n }\n } else {\n if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n for (i = byteOffset; i >= 0; i--) {\n var found = true;\n for (var j = 0; j < valLength; j++) {\n if (read(arr, i + j) !== read(val, j)) {\n found = false;\n break\n }\n }\n if (found) return i\n }\n }\n\n return -1\n}\n\nBuffer.prototype.includes = function includes (val, byteOffset, encoding) {\n return this.indexOf(val, byteOffset, encoding) !== -1\n};\n\nBuffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, true)\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) {\n return bidirectionalIndexOf(this, val, byteOffset, encoding, false)\n};\n\nfunction hexWrite (buf, string, offset, length) {\n offset = Number(offset) || 0;\n var remaining = buf.length - offset;\n if (!length) {\n length = remaining;\n } else {\n length = Number(length);\n if (length > remaining) {\n length = remaining;\n }\n }\n\n // must be an even number of digits\n var strLen = string.length;\n if (strLen % 2 !== 0) throw new TypeError('Invalid hex string')\n\n if (length > strLen / 2) {\n length = strLen / 2;\n }\n for (var i = 0; i < length; ++i) {\n var parsed = parseInt(string.substr(i * 2, 2), 16);\n if (isNaN(parsed)) return i\n buf[offset + i] = parsed;\n }\n return i\n}\n\nfunction utf8Write (buf, string, offset, length) {\n return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nfunction asciiWrite (buf, string, offset, length) {\n return blitBuffer(asciiToBytes(string), buf, offset, length)\n}\n\nfunction latin1Write (buf, string, offset, length) {\n return asciiWrite(buf, string, offset, length)\n}\n\nfunction base64Write (buf, string, offset, length) {\n return blitBuffer(base64ToBytes(string), buf, offset, length)\n}\n\nfunction ucs2Write (buf, string, offset, length) {\n return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length)\n}\n\nBuffer.prototype.write = function write (string, offset, length, encoding) {\n // Buffer#write(string)\n if (offset === undefined) {\n encoding = 'utf8';\n length = this.length;\n offset = 0;\n // Buffer#write(string, encoding)\n } else if (length === undefined && typeof offset === 'string') {\n encoding = offset;\n length = this.length;\n offset = 0;\n // Buffer#write(string, offset[, length][, encoding])\n } else if (isFinite(offset)) {\n offset = offset | 0;\n if (isFinite(length)) {\n length = length | 0;\n if (encoding === undefined) encoding = 'utf8';\n } else {\n encoding = length;\n length = undefined;\n }\n // legacy write(string, encoding, offset, length) - remove in v0.13\n } else {\n throw new Error(\n 'Buffer.write(string, encoding, offset[, length]) is no longer supported'\n )\n }\n\n var remaining = this.length - offset;\n if (length === undefined || length > remaining) length = remaining;\n\n if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) {\n throw new RangeError('Attempt to write outside buffer bounds')\n }\n\n if (!encoding) encoding = 'utf8';\n\n var loweredCase = false;\n for (;;) {\n switch (encoding) {\n case 'hex':\n return hexWrite(this, string, offset, length)\n\n case 'utf8':\n case 'utf-8':\n return utf8Write(this, string, offset, length)\n\n case 'ascii':\n return asciiWrite(this, string, offset, length)\n\n case 'latin1':\n case 'binary':\n return latin1Write(this, string, offset, length)\n\n case 'base64':\n // Warning: maxLength not taken into account in base64Write\n return base64Write(this, string, offset, length)\n\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return ucs2Write(this, string, offset, length)\n\n default:\n if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding)\n encoding = ('' + encoding).toLowerCase();\n loweredCase = true;\n }\n }\n};\n\nBuffer.prototype.toJSON = function toJSON () {\n return {\n type: 'Buffer',\n data: Array.prototype.slice.call(this._arr || this, 0)\n }\n};\n\nfunction base64Slice (buf, start, end) {\n if (start === 0 && end === buf.length) {\n return fromByteArray(buf)\n } else {\n return fromByteArray(buf.slice(start, end))\n }\n}\n\nfunction utf8Slice (buf, start, end) {\n end = Math.min(buf.length, end);\n var res = [];\n\n var i = start;\n while (i < end) {\n var firstByte = buf[i];\n var codePoint = null;\n var bytesPerSequence = (firstByte > 0xEF) ? 4\n : (firstByte > 0xDF) ? 3\n : (firstByte > 0xBF) ? 2\n : 1;\n\n if (i + bytesPerSequence <= end) {\n var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n switch (bytesPerSequence) {\n case 1:\n if (firstByte < 0x80) {\n codePoint = firstByte;\n }\n break\n case 2:\n secondByte = buf[i + 1];\n if ((secondByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F);\n if (tempCodePoint > 0x7F) {\n codePoint = tempCodePoint;\n }\n }\n break\n case 3:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F);\n if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n codePoint = tempCodePoint;\n }\n }\n break\n case 4:\n secondByte = buf[i + 1];\n thirdByte = buf[i + 2];\n fourthByte = buf[i + 3];\n if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F);\n if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n codePoint = tempCodePoint;\n }\n }\n }\n }\n\n if (codePoint === null) {\n // we did not generate a valid codePoint so insert a\n // replacement char (U+FFFD) and advance only 1 byte\n codePoint = 0xFFFD;\n bytesPerSequence = 1;\n } else if (codePoint > 0xFFFF) {\n // encode to utf16 (surrogate pair dance)\n codePoint -= 0x10000;\n res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n codePoint = 0xDC00 | codePoint & 0x3FF;\n }\n\n res.push(codePoint);\n i += bytesPerSequence;\n }\n\n return decodeCodePointsArray(res)\n}\n\n// Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray (codePoints) {\n var len = codePoints.length;\n if (len <= MAX_ARGUMENTS_LENGTH) {\n return String.fromCharCode.apply(String, codePoints) // avoid extra slice()\n }\n\n // Decode in chunks to avoid \"call stack size exceeded\".\n var res = '';\n var i = 0;\n while (i < len) {\n res += String.fromCharCode.apply(\n String,\n codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH)\n );\n }\n return res\n}\n\nfunction asciiSlice (buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i] & 0x7F);\n }\n return ret\n}\n\nfunction latin1Slice (buf, start, end) {\n var ret = '';\n end = Math.min(buf.length, end);\n\n for (var i = start; i < end; ++i) {\n ret += String.fromCharCode(buf[i]);\n }\n return ret\n}\n\nfunction hexSlice (buf, start, end) {\n var len = buf.length;\n\n if (!start || start < 0) start = 0;\n if (!end || end < 0 || end > len) end = len;\n\n var out = '';\n for (var i = start; i < end; ++i) {\n out += toHex(buf[i]);\n }\n return out\n}\n\nfunction utf16leSlice (buf, start, end) {\n var bytes = buf.slice(start, end);\n var res = '';\n for (var i = 0; i < bytes.length; i += 2) {\n res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n }\n return res\n}\n\nBuffer.prototype.slice = function slice (start, end) {\n var len = this.length;\n start = ~~start;\n end = end === undefined ? len : ~~end;\n\n if (start < 0) {\n start += len;\n if (start < 0) start = 0;\n } else if (start > len) {\n start = len;\n }\n\n if (end < 0) {\n end += len;\n if (end < 0) end = 0;\n } else if (end > len) {\n end = len;\n }\n\n if (end < start) end = start;\n\n var newBuf;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n newBuf = this.subarray(start, end);\n newBuf.__proto__ = Buffer.prototype;\n } else {\n var sliceLen = end - start;\n newBuf = new Buffer(sliceLen, undefined);\n for (var i = 0; i < sliceLen; ++i) {\n newBuf[i] = this[i + start];\n }\n }\n\n return newBuf\n};\n\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\nfunction checkOffset (offset, ext, length) {\n if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint')\n if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length')\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var val = this[offset];\n var mul = 1;\n var i = 0;\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n\n return val\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n checkOffset(offset, byteLength, this.length);\n }\n\n var val = this[offset + --byteLength];\n var mul = 1;\n while (byteLength > 0 && (mul *= 0x100)) {\n val += this[offset + --byteLength] * mul;\n }\n\n return val\n};\n\nBuffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n return this[offset]\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return this[offset] | (this[offset + 1] << 8)\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n return (this[offset] << 8) | this[offset + 1]\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return ((this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16)) +\n (this[offset + 3] * 0x1000000)\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset] * 0x1000000) +\n ((this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n this[offset + 3])\n};\n\nBuffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var val = this[offset];\n var mul = 1;\n var i = 0;\n while (++i < byteLength && (mul *= 0x100)) {\n val += this[offset + i] * mul;\n }\n mul *= 0x80;\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n return val\n};\n\nBuffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) {\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) checkOffset(offset, byteLength, this.length);\n\n var i = byteLength;\n var mul = 1;\n var val = this[offset + --i];\n while (i > 0 && (mul *= 0x100)) {\n val += this[offset + --i] * mul;\n }\n mul *= 0x80;\n\n if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n\n return val\n};\n\nBuffer.prototype.readInt8 = function readInt8 (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 1, this.length);\n if (!(this[offset] & 0x80)) return (this[offset])\n return ((0xff - this[offset] + 1) * -1)\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset] | (this[offset + 1] << 8);\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 2, this.length);\n var val = this[offset + 1] | (this[offset] << 8);\n return (val & 0x8000) ? val | 0xFFFF0000 : val\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset]) |\n (this[offset + 1] << 8) |\n (this[offset + 2] << 16) |\n (this[offset + 3] << 24)\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n\n return (this[offset] << 24) |\n (this[offset + 1] << 16) |\n (this[offset + 2] << 8) |\n (this[offset + 3])\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return read(this, offset, true, 23, 4)\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 4, this.length);\n return read(this, offset, false, 23, 4)\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return read(this, offset, true, 52, 8)\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) {\n if (!noAssert) checkOffset(offset, 8, this.length);\n return read(this, offset, false, 52, 8)\n};\n\nfunction checkInt (buf, value, offset, ext, max, min) {\n if (!internalIsBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance')\n if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds')\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var mul = 1;\n var i = 0;\n this[offset] = value & 0xFF;\n while (++i < byteLength && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n byteLength = byteLength | 0;\n if (!noAssert) {\n var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n checkInt(this, value, offset, byteLength, maxBytes, 0);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n this[offset + i] = value & 0xFF;\n while (--i >= 0 && (mul *= 0x100)) {\n this[offset + i] = (value / mul) & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n this[offset] = (value & 0xff);\n return offset + 1\n};\n\nfunction objectWriteUInt16 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffff + value + 1;\n for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>>\n (littleEndian ? i : 1 - i) * 8;\n }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8);\n this[offset + 1] = (value & 0xff);\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n return offset + 2\n};\n\nfunction objectWriteUInt32 (buf, value, offset, littleEndian) {\n if (value < 0) value = 0xffffffff + value + 1;\n for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff;\n }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset + 3] = (value >>> 24);\n this[offset + 2] = (value >>> 16);\n this[offset + 1] = (value >>> 8);\n this[offset] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24);\n this[offset + 1] = (value >>> 16);\n this[offset + 2] = (value >>> 8);\n this[offset + 3] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = 0;\n var mul = 1;\n var sub = 0;\n this[offset] = value & 0xFF;\n while (++i < byteLength && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) {\n var limit = Math.pow(2, 8 * byteLength - 1);\n\n checkInt(this, value, offset, byteLength, limit - 1, -limit);\n }\n\n var i = byteLength - 1;\n var mul = 1;\n var sub = 0;\n this[offset + i] = value & 0xFF;\n while (--i >= 0 && (mul *= 0x100)) {\n if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n sub = 1;\n }\n this[offset + i] = ((value / mul) >> 0) - sub & 0xFF;\n }\n\n return offset + byteLength\n};\n\nBuffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n if (value < 0) value = 0xff + value + 1;\n this[offset] = (value & 0xff);\n return offset + 1\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n } else {\n objectWriteUInt16(this, value, offset, true);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 8);\n this[offset + 1] = (value & 0xff);\n } else {\n objectWriteUInt16(this, value, offset, false);\n }\n return offset + 2\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value & 0xff);\n this[offset + 1] = (value >>> 8);\n this[offset + 2] = (value >>> 16);\n this[offset + 3] = (value >>> 24);\n } else {\n objectWriteUInt32(this, value, offset, true);\n }\n return offset + 4\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) {\n value = +value;\n offset = offset | 0;\n if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n if (value < 0) value = 0xffffffff + value + 1;\n if (Buffer.TYPED_ARRAY_SUPPORT) {\n this[offset] = (value >>> 24);\n this[offset + 1] = (value >>> 16);\n this[offset + 2] = (value >>> 8);\n this[offset + 3] = (value & 0xff);\n } else {\n objectWriteUInt32(this, value, offset, false);\n }\n return offset + 4\n};\n\nfunction checkIEEE754 (buf, value, offset, ext, max, min) {\n if (offset + ext > buf.length) throw new RangeError('Index out of range')\n if (offset < 0) throw new RangeError('Index out of range')\n}\n\nfunction writeFloat (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);\n }\n write(buf, value, offset, littleEndian, 23, 4);\n return offset + 4\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) {\n return writeFloat(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) {\n return writeFloat(this, value, offset, false, noAssert)\n};\n\nfunction writeDouble (buf, value, offset, littleEndian, noAssert) {\n if (!noAssert) {\n checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);\n }\n write(buf, value, offset, littleEndian, 52, 8);\n return offset + 8\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) {\n return writeDouble(this, value, offset, true, noAssert)\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) {\n return writeDouble(this, value, offset, false, noAssert)\n};\n\n// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\nBuffer.prototype.copy = function copy (target, targetStart, start, end) {\n if (!start) start = 0;\n if (!end && end !== 0) end = this.length;\n if (targetStart >= target.length) targetStart = target.length;\n if (!targetStart) targetStart = 0;\n if (end > 0 && end < start) end = start;\n\n // Copy 0 bytes; we're done\n if (end === start) return 0\n if (target.length === 0 || this.length === 0) return 0\n\n // Fatal error conditions\n if (targetStart < 0) {\n throw new RangeError('targetStart out of bounds')\n }\n if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds')\n if (end < 0) throw new RangeError('sourceEnd out of bounds')\n\n // Are we oob?\n if (end > this.length) end = this.length;\n if (target.length - targetStart < end - start) {\n end = target.length - targetStart + start;\n }\n\n var len = end - start;\n var i;\n\n if (this === target && start < targetStart && targetStart < end) {\n // descending copy from end\n for (i = len - 1; i >= 0; --i) {\n target[i + targetStart] = this[i + start];\n }\n } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n // ascending copy from start\n for (i = 0; i < len; ++i) {\n target[i + targetStart] = this[i + start];\n }\n } else {\n Uint8Array.prototype.set.call(\n target,\n this.subarray(start, start + len),\n targetStart\n );\n }\n\n return len\n};\n\n// Usage:\n// buffer.fill(number[, offset[, end]])\n// buffer.fill(buffer[, offset[, end]])\n// buffer.fill(string[, offset[, end]][, encoding])\nBuffer.prototype.fill = function fill (val, start, end, encoding) {\n // Handle string cases:\n if (typeof val === 'string') {\n if (typeof start === 'string') {\n encoding = start;\n start = 0;\n end = this.length;\n } else if (typeof end === 'string') {\n encoding = end;\n end = this.length;\n }\n if (val.length === 1) {\n var code = val.charCodeAt(0);\n if (code < 256) {\n val = code;\n }\n }\n if (encoding !== undefined && typeof encoding !== 'string') {\n throw new TypeError('encoding must be a string')\n }\n if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n throw new TypeError('Unknown encoding: ' + encoding)\n }\n } else if (typeof val === 'number') {\n val = val & 255;\n }\n\n // Invalid ranges are not set to a default, so can range check early.\n if (start < 0 || this.length < start || this.length < end) {\n throw new RangeError('Out of range index')\n }\n\n if (end <= start) {\n return this\n }\n\n start = start >>> 0;\n end = end === undefined ? this.length : end >>> 0;\n\n if (!val) val = 0;\n\n var i;\n if (typeof val === 'number') {\n for (i = start; i < end; ++i) {\n this[i] = val;\n }\n } else {\n var bytes = internalIsBuffer(val)\n ? val\n : utf8ToBytes(new Buffer(val, encoding).toString());\n var len = bytes.length;\n for (i = 0; i < end - start; ++i) {\n this[i + start] = bytes[i % len];\n }\n }\n\n return this\n};\n\n// HELPER FUNCTIONS\n// ================\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean (str) {\n // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n str = stringtrim(str).replace(INVALID_BASE64_RE, '');\n // Node converts strings with length < 2 to ''\n if (str.length < 2) return ''\n // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n while (str.length % 4 !== 0) {\n str = str + '=';\n }\n return str\n}\n\nfunction stringtrim (str) {\n if (str.trim) return str.trim()\n return str.replace(/^\\s+|\\s+$/g, '')\n}\n\nfunction toHex (n) {\n if (n < 16) return '0' + n.toString(16)\n return n.toString(16)\n}\n\nfunction utf8ToBytes (string, units) {\n units = units || Infinity;\n var codePoint;\n var length = string.length;\n var leadSurrogate = null;\n var bytes = [];\n\n for (var i = 0; i < length; ++i) {\n codePoint = string.charCodeAt(i);\n\n // is surrogate component\n if (codePoint > 0xD7FF && codePoint < 0xE000) {\n // last char was a lead\n if (!leadSurrogate) {\n // no lead yet\n if (codePoint > 0xDBFF) {\n // unexpected trail\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n } else if (i + 1 === length) {\n // unpaired lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n continue\n }\n\n // valid lead\n leadSurrogate = codePoint;\n\n continue\n }\n\n // 2 leads in a row\n if (codePoint < 0xDC00) {\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n leadSurrogate = codePoint;\n continue\n }\n\n // valid surrogate pair\n codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n } else if (leadSurrogate) {\n // valid bmp char, but last char was a lead\n if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n }\n\n leadSurrogate = null;\n\n // encode utf8\n if (codePoint < 0x80) {\n if ((units -= 1) < 0) break\n bytes.push(codePoint);\n } else if (codePoint < 0x800) {\n if ((units -= 2) < 0) break\n bytes.push(\n codePoint >> 0x6 | 0xC0,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x10000) {\n if ((units -= 3) < 0) break\n bytes.push(\n codePoint >> 0xC | 0xE0,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else if (codePoint < 0x110000) {\n if ((units -= 4) < 0) break\n bytes.push(\n codePoint >> 0x12 | 0xF0,\n codePoint >> 0xC & 0x3F | 0x80,\n codePoint >> 0x6 & 0x3F | 0x80,\n codePoint & 0x3F | 0x80\n );\n } else {\n throw new Error('Invalid code point')\n }\n }\n\n return bytes\n}\n\nfunction asciiToBytes (str) {\n var byteArray = [];\n for (var i = 0; i < str.length; ++i) {\n // Node's code seems to be doing this and not & 0x7F..\n byteArray.push(str.charCodeAt(i) & 0xFF);\n }\n return byteArray\n}\n\nfunction utf16leToBytes (str, units) {\n var c, hi, lo;\n var byteArray = [];\n for (var i = 0; i < str.length; ++i) {\n if ((units -= 2) < 0) break\n\n c = str.charCodeAt(i);\n hi = c >> 8;\n lo = c % 256;\n byteArray.push(lo);\n byteArray.push(hi);\n }\n\n return byteArray\n}\n\n\nfunction base64ToBytes (str) {\n return toByteArray(base64clean(str))\n}\n\nfunction blitBuffer (src, dst, offset, length) {\n for (var i = 0; i < length; ++i) {\n if ((i + offset >= dst.length) || (i >= src.length)) break\n dst[i + offset] = src[i];\n }\n return i\n}\n\nfunction isnan (val) {\n return val !== val // eslint-disable-line no-self-compare\n}\n\n\n// the following is from is-buffer, also by Feross Aboukhadijeh and with same lisence\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nfunction isBuffer(obj) {\n return obj != null && (!!obj._isBuffer || isFastBuffer(obj) || isSlowBuffer(obj))\n}\n\nfunction isFastBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isFastBuffer(obj.slice(0, 0))\n}\n\n// Copyright Joyent, Inc. and other Node contributors.\nvar isBufferEncoding = Buffer.isEncoding\n || function(encoding) {\n switch (encoding && encoding.toLowerCase()) {\n case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true;\n default: return false;\n }\n };\n\n\nfunction assertEncoding(encoding) {\n if (encoding && !isBufferEncoding(encoding)) {\n throw new Error('Unknown encoding: ' + encoding);\n }\n}\n\n// StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters. CESU-8 is handled as part of the UTF-8 encoding.\n//\n// @TODO Handling all encodings inside a single object makes it very difficult\n// to reason about this code, so it should be split up in the future.\n// @TODO There should be a utf8-strict encoding that rejects invalid UTF-8 code\n// points as used by CESU-8.\nfunction StringDecoder(encoding) {\n this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, '');\n assertEncoding(encoding);\n switch (this.encoding) {\n case 'utf8':\n // CESU-8 represents each of Surrogate Pair by 3-bytes\n this.surrogateSize = 3;\n break;\n case 'ucs2':\n case 'utf16le':\n // UTF-16 represents each of Surrogate Pair by 2-bytes\n this.surrogateSize = 2;\n this.detectIncompleteChar = utf16DetectIncompleteChar;\n break;\n case 'base64':\n // Base-64 stores 3 bytes in 4 chars, and pads the remainder.\n this.surrogateSize = 3;\n this.detectIncompleteChar = base64DetectIncompleteChar;\n break;\n default:\n this.write = passThroughWrite;\n return;\n }\n\n // Enough space to store all bytes of a single character. UTF-8 needs 4\n // bytes, but CESU-8 may require up to 6 (3 bytes per surrogate).\n this.charBuffer = new Buffer(6);\n // Number of bytes received for the current incomplete multi-byte character.\n this.charReceived = 0;\n // Number of bytes expected for the current incomplete multi-byte character.\n this.charLength = 0;\n}\n\n// write decodes the given buffer and returns it as JS string that is\n// guaranteed to not contain any partial multi-byte characters. Any partial\n// character found at the end of the buffer is buffered up, and will be\n// returned when calling write again with the remaining bytes.\n//\n// Note: Converting a Buffer containing an orphan surrogate to a String\n// currently works, but converting a String to a Buffer (via `new Buffer`, or\n// Buffer#write) will replace incomplete surrogates with the unicode\n// replacement character. See https://codereview.chromium.org/121173009/ .\nStringDecoder.prototype.write = function(buffer) {\n var charStr = '';\n // if our last write ended with an incomplete multibyte character\n while (this.charLength) {\n // determine how many remaining bytes this buffer has to offer for this char\n var available = (buffer.length >= this.charLength - this.charReceived) ?\n this.charLength - this.charReceived :\n buffer.length;\n\n // add the new bytes to the char buffer\n buffer.copy(this.charBuffer, this.charReceived, 0, available);\n this.charReceived += available;\n\n if (this.charReceived < this.charLength) {\n // still not enough chars in this buffer? wait for more ...\n return '';\n }\n\n // remove bytes belonging to the current character from the buffer\n buffer = buffer.slice(available, buffer.length);\n\n // get the character that was split\n charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding);\n\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n var charCode = charStr.charCodeAt(charStr.length - 1);\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n this.charLength += this.surrogateSize;\n charStr = '';\n continue;\n }\n this.charReceived = this.charLength = 0;\n\n // if there are no more bytes in this buffer, just emit our char\n if (buffer.length === 0) {\n return charStr;\n }\n break;\n }\n\n // determine and set charLength / charReceived\n this.detectIncompleteChar(buffer);\n\n var end = buffer.length;\n if (this.charLength) {\n // buffer the incomplete character bytes we got\n buffer.copy(this.charBuffer, 0, buffer.length - this.charReceived, end);\n end -= this.charReceived;\n }\n\n charStr += buffer.toString(this.encoding, 0, end);\n\n var end = charStr.length - 1;\n var charCode = charStr.charCodeAt(end);\n // CESU-8: lead surrogate (D800-DBFF) is also the incomplete character\n if (charCode >= 0xD800 && charCode <= 0xDBFF) {\n var size = this.surrogateSize;\n this.charLength += size;\n this.charReceived += size;\n this.charBuffer.copy(this.charBuffer, size, 0, size);\n buffer.copy(this.charBuffer, 0, 0, size);\n return charStr.substring(0, end);\n }\n\n // or just emit the charStr\n return charStr;\n};\n\n// detectIncompleteChar determines if there is an incomplete UTF-8 character at\n// the end of the given buffer. If so, it sets this.charLength to the byte\n// length that character, and sets this.charReceived to the number of bytes\n// that are available for this character.\nStringDecoder.prototype.detectIncompleteChar = function(buffer) {\n // determine how many bytes we have to check at the end of this buffer\n var i = (buffer.length >= 3) ? 3 : buffer.length;\n\n // Figure out if one of the last i bytes of our buffer announces an\n // incomplete char.\n for (; i > 0; i--) {\n var c = buffer[buffer.length - i];\n\n // See http://en.wikipedia.org/wiki/UTF-8#Description\n\n // 110XXXXX\n if (i == 1 && c >> 5 == 0x06) {\n this.charLength = 2;\n break;\n }\n\n // 1110XXXX\n if (i <= 2 && c >> 4 == 0x0E) {\n this.charLength = 3;\n break;\n }\n\n // 11110XXX\n if (i <= 3 && c >> 3 == 0x1E) {\n this.charLength = 4;\n break;\n }\n }\n this.charReceived = i;\n};\n\nStringDecoder.prototype.end = function(buffer) {\n var res = '';\n if (buffer && buffer.length)\n res = this.write(buffer);\n\n if (this.charReceived) {\n var cr = this.charReceived;\n var buf = this.charBuffer;\n var enc = this.encoding;\n res += buf.slice(0, cr).toString(enc);\n }\n\n return res;\n};\n\nfunction passThroughWrite(buffer) {\n return buffer.toString(this.encoding);\n}\n\nfunction utf16DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 2;\n this.charLength = this.charReceived ? 2 : 0;\n}\n\nfunction base64DetectIncompleteChar(buffer) {\n this.charReceived = buffer.length % 3;\n this.charLength = this.charReceived ? 3 : 0;\n}\n\nconst BUFFER_MAX_BYTES = 524288; // 0.5Mb\n\nconst CONTINUE_READING_RECORDS = \"CONTINUE_READING\";\nconst READ_REMAINING_TEXT = \"READ_REMAINING\";\nconst CANCEL_READ = \"CANCEL\";\n\nconst getIndexWriter = (hierarchy, indexNode, readableStream, writableStream, end) => {\n const schema = generateSchema(hierarchy, indexNode);\n\n return ({\n read: read$1(readableStream, schema),\n updateIndex: updateIndex(readableStream, writableStream, schema, end)\n });\n};\n\nconst getIndexReader = (hierarchy, indexNode, readableStream) => \n read$1(\n readableStream, \n generateSchema(hierarchy, indexNode)\n );\n\nconst updateIndex = (readableStream, writableStream, schema) => async (itemsToWrite, keysToRemove) => {\n const write = newOutputWriter(BUFFER_MAX_BYTES, writableStream);\n const writtenItems = []; \n await read$1(readableStream, schema)(\n async indexedItem => {\n const updated = find(i => indexedItem.key === i.key)(itemsToWrite);\n const removed = find(k => indexedItem.key === k)(keysToRemove);\n \n if(isSomething(removed)) \n return CONTINUE_READING_RECORDS;\n\n if(isSomething(updated)) {\n const serializedItem = serializeItem(schema, updated);\n await write(serializedItem);\n writtenItems.push(updated);\n } else {\n await write(\n serializeItem(schema, indexedItem)\n );\n } \n\n return CONTINUE_READING_RECORDS;\n\n },\n async text => await write(text)\n );\n\n if(writtenItems.length !== itemsToWrite.length) {\n const toAdd = difference(itemsToWrite, writtenItems);\n for(let added of toAdd) {\n await write(\n serializeItem(schema, added)\n );\n }\n } else if(writtenItems.length === 0) {\n // potentially are no records\n await write(\"\");\n }\n\n await write();\n await writableStream.end();\n};\n\nconst read$1 = (readableStream, schema) => async (onGetItem, onGetText) => {\n const readInput = newInputReader(readableStream);\n let text = await readInput();\n let status = CONTINUE_READING_RECORDS;\n while(text.length > 0) {\n\n if(status === READ_REMAINING_TEXT) {\n await onGetText(text);\n continue;\n }\n\n if(status === CANCEL_READ) {\n return;\n }\n\n let rowText = \"\";\n let currentCharIndex=0;\n for(let currentChar of text) {\n rowText += currentChar;\n if(currentChar === \"\\r\") {\n status = await onGetItem(\n deserializeRow(schema, rowText)\n );\n rowText = \"\";\n if(status === READ_REMAINING_TEXT) {\n break;\n }\n }\n currentCharIndex++;\n }\n\n if(currentCharIndex < text.length -1) {\n await onGetText(text.substring(currentCharIndex + 1));\n }\n\n text = await readInput();\n }\n\n await readableStream.destroy();\n\n};\n\nconst newOutputWriter = (flushBoundary, writableStream) => {\n \n let currentBuffer = null;\n\n return async (text) => {\n\n if(isString$1(text) && currentBuffer === null)\n currentBuffer = Buffer$1.from(text, \"utf8\");\n else if(isString$1(text))\n currentBuffer = Buffer$1.concat([\n currentBuffer,\n Buffer$1.from(text, \"utf8\")\n ]);\n \n if(currentBuffer !== null &&\n (currentBuffer.length > flushBoundary\n || !isString$1(text))) {\n\n await writableStream.write(currentBuffer);\n currentBuffer = null;\n }\n }\n};\n\nconst newInputReader = (readableStream) => {\n\n const decoder = new StringDecoder('utf8');\n let remainingBytes = [];\n\n return async () => {\n\n let nextBytesBuffer = await readableStream.read(BUFFER_MAX_BYTES);\n const remainingBuffer = Buffer$1.from(remainingBytes);\n\n if(!nextBytesBuffer) nextBytesBuffer = Buffer$1.from([]);\n\n const moreToRead = nextBytesBuffer.length === BUFFER_MAX_BYTES;\n\n const buffer = Buffer$1.concat(\n [remainingBuffer, nextBytesBuffer],\n remainingBuffer.length + nextBytesBuffer.length);\n\n const text = decoder.write(buffer);\n remainingBytes = decoder.end(buffer);\n\n if(!moreToRead && remainingBytes.length > 0) {\n // if for any reason, we have remaining bytes at the end\n // of the stream, just discard - dont see why this should\n // ever happen, but if it does, it could cause a stack overflow\n remainingBytes = [];\n }\n\n return text;\n };\n};\n\nconst deserializeRow = (schema, rowText) => {\n let currentPropIndex = 0;\n let currentCharIndex = 0;\n let currentValueText = \"\";\n let isEscaped = false;\n const item = {};\n\n const setCurrentProp = () => {\n const currentProp = schema[currentPropIndex];\n const type = getType(currentProp.type);\n const value = currentValueText === \"\"\n ? type.getDefaultValue()\n : type.safeParseValue(\n currentValueText);\n item[currentProp.name] = value;\n };\n \n while(currentPropIndex < schema.length) {\n\n if(currentCharIndex < rowText.length) {\n const currentChar = rowText[currentCharIndex];\n if(isEscaped) {\n if(currentChar === \"r\") {\n currentValueText += \"\\r\";\n } else {\n currentValueText += currentChar;\n }\n isEscaped = false;\n } else {\n if(currentChar === \",\") {\n setCurrentProp();\n currentValueText = \"\";\n currentPropIndex++;\n } else if(currentChar === \"\\\\\") {\n isEscaped = true;\n } else {\n currentValueText += currentChar;\n }\n }\n currentCharIndex++; \n } else {\n currentValueText = \"\";\n setCurrentProp();\n currentPropIndex++;\n }\n }\n\n return item;\n};\n\nconst serializeItem = (schema, item) => {\n\n let rowText = \"\";\n\n for(let prop of schema) {\n const type = getType(prop.type);\n const value = has$1(prop.name)(item)\n ? item[prop.name]\n : type.getDefaultValue();\n \n const valStr = type.stringify(value);\n\n for(let i = 0; i < valStr.length; i++) {\n const currentChar = valStr[i];\n if(currentChar === \",\" \n || currentChar === \"\\r\" \n || currentChar === \"\\\\\") {\n rowText += \"\\\\\";\n }\n\n if(currentChar === \"\\r\") {\n rowText += \"r\";\n } else {\n rowText += currentChar;\n }\n }\n\n rowText += \",\";\n }\n\n rowText += \"\\r\";\n return rowText;\n};\n\nconst readIndex$1 = async (hierarchy, datastore, index, indexedDataKey) => {\n const records = [];\n const doRead = iterateIndex(\n async item => {\n records.push(item);\n return CONTINUE_READING_RECORDS;\n },\n async () => records\n );\n\n return await doRead(hierarchy, datastore, index, indexedDataKey);\n};\n\nconst searchIndex = async (hierarchy, datastore, index, indexedDataKey, searchPhrase) => {\n const records = [];\n const schema = generateSchema(hierarchy, index);\n const doRead = iterateIndex(\n async item => {\n const idx = lunr(function () {\n this.ref('key');\n for (const field of schema) {\n this.field(field.name);\n }\n this.add(item);\n });\n const searchResults = idx.search(searchPhrase);\n if (searchResults.length === 1) {\n item._searchResult = searchResults[0];\n records.push(item);\n }\n return CONTINUE_READING_RECORDS;\n },\n async () => records\n );\n\n return await doRead(hierarchy, datastore, index, indexedDataKey);\n};\n\nconst iterateIndex = (onGetItem, getFinalResult) => async (hierarchy, datastore, index, indexedDataKey) => {\n try {\n const readableStream = promiseReadableStream(\n await datastore.readableFileStream(indexedDataKey)\n );\n\n const read = getIndexReader(hierarchy, index, readableStream);\n await read(onGetItem);\n return getFinalResult();\n } catch (e) {\n if (await datastore.exists(indexedDataKey)) {\n throw e;\n } else {\n await createIndexFile(\n datastore,\n indexedDataKey,\n index,\n );\n }\n return [];\n }\n};\n\nconst listItems = app => async (indexKey, options) => apiWrapper(\n app,\n events.indexApi.listItems,\n permission.readIndex.isAuthorized(indexKey),\n { indexKey, options },\n _listItems, app, indexKey, options,\n);\n\nconst defaultOptions = { rangeStartParams: null, rangeEndParams: null, searchPhrase: null };\n\nconst _listItems = async (app, indexKey, options = defaultOptions) => {\n const { searchPhrase, rangeStartParams, rangeEndParams } = $({}, [\n merge$1(options),\n merge$1(defaultOptions),\n ]);\n\n const getItems = async key => (isNonEmptyString(searchPhrase)\n ? await searchIndex(\n app.hierarchy,\n app.datastore,\n indexNode,\n key,\n searchPhrase,\n )\n : await readIndex$1(\n app.hierarchy,\n app.datastore,\n indexNode,\n key,\n ));\n\n indexKey = safeKey(indexKey);\n const indexNode = getExactNodeForPath(app.hierarchy)(indexKey);\n\n if (!isIndex(indexNode)) { throw new Error('supplied key is not an index'); }\n\n if (isShardedIndex(indexNode)) {\n const shardKeys = await getShardKeysInRange(\n app, indexKey, rangeStartParams, rangeEndParams,\n );\n const items = [];\n for (const k of shardKeys) {\n items.push(await getItems(k));\n }\n return flatten(items);\n }\n return await getItems(\n getUnshardedIndexDataKey(indexKey),\n );\n};\n\nconst getContext = app => recordKey => apiWrapperSync(\n app,\n events.recordApi.getContext,\n permission.readRecord.isAuthorized(recordKey),\n { recordKey },\n _getContext, app, recordKey,\n);\n\nconst _getContext = (app, recordKey) => {\n const recordNode = getExactNodeForPath(app.hierarchy)(recordKey);\n\n const cachedReferenceIndexes = {};\n\n const lazyLoadReferenceIndex = async (typeOptions) => {\n if (!has(cachedReferenceIndexes, typeOptions.indexNodeKey)) {\n cachedReferenceIndexes[typeOptions.indexNodeKey] = {\n typeOptions,\n data: await readReferenceIndex(\n app, recordKey, typeOptions,\n ),\n };\n }\n\n return cachedReferenceIndexes[typeOptions.indexNodeKey];\n };\n\n const getTypeOptions = typeOptions_or_fieldName => (isString$1(typeOptions_or_fieldName)\n ? findField(recordNode, typeOptions_or_fieldName)\n .typeOptions\n : typeOptions_or_fieldName);\n\n return {\n referenceExists: async (typeOptions_or_fieldName, key) => {\n const typeOptions = getTypeOptions(typeOptions_or_fieldName);\n const { data } = await lazyLoadReferenceIndex(typeOptions);\n return some$1(data, i => i.key === key);\n },\n referenceOptions: async (typeOptions_or_fieldName) => {\n const typeOptions = getTypeOptions(typeOptions_or_fieldName);\n const { data } = await lazyLoadReferenceIndex(typeOptions);\n return data;\n },\n recordNode,\n };\n};\n\nconst readReferenceIndex = async (app, recordKey, typeOptions) => {\n const indexNode = getNode(app.hierarchy, typeOptions.indexNodeKey);\n const indexKey = isGlobalIndex(indexNode)\n ? indexNode.nodeKey()\n : getIndexKey_BasedOnDecendant(\n recordKey, indexNode,\n );\n\n const items = await listItems(app)(indexKey);\n return $(items, [\n map(i => ({\n key: i.key,\n value: i[typeOptions.displayValue],\n })),\n ]);\n};\n\nconst fieldParseError = (fieldName, value) => ({\n fields: [fieldName],\n message: `Could not parse field ${fieldName}:${value}`,\n});\n\nconst validateAllFieldParse = (record, recordNode) => $(recordNode.fields, [\n map(f => ({ name: f.name, parseResult: validateFieldParse(f, record) })),\n reduce((errors, f) => {\n if (f.parseResult.success) return errors;\n errors.push(\n fieldParseError(f.name, f.parseResult.value),\n );\n return errors;\n }, []),\n]);\n\nconst validateAllTypeConstraints = async (record, recordNode, context) => {\n const errors = [];\n for (const field of recordNode.fields) {\n $(await validateTypeConstraints$1(field, record, context), [\n filter(isNonEmptyString),\n map(m => ({ message: m, fields: [field.name] })),\n each(e => errors.push(e)),\n ]);\n }\n return errors;\n};\n\nconst runRecordValidationRules = (record, recordNode) => {\n const runValidationRule = (rule) => {\n const isValid = compileExpression$1(rule.expressionWhenValid);\n const expressionContext = { record, _ };\n return (isValid(expressionContext)\n ? { valid: true }\n : ({\n valid: false,\n fields: rule.invalidFields,\n message: rule.messageWhenInvalid,\n }));\n };\n\n return $(recordNode.validationRules, [\n map(runValidationRule),\n flatten,\n filter(r => r.valid === false),\n map(r => ({ fields: r.fields, message: r.message })),\n ]);\n};\n\nconst validate = app => async (record, context) => {\n context = isNothing(context)\n ? _getContext(app, record.key)\n : context;\n\n const recordNode = getExactNodeForPath(app.hierarchy)(record.key);\n const fieldParseFails = validateAllFieldParse(record, recordNode);\n\n // non parsing would cause further issues - exit here\n if (!isEmpty$1(fieldParseFails)) { return ({ isValid: false, errors: fieldParseFails }); }\n\n const recordValidationRuleFails = runRecordValidationRules(record, recordNode);\n const typeContraintFails = await validateAllTypeConstraints(record, recordNode, context);\n\n if (isEmpty$1(fieldParseFails)\n && isEmpty$1(recordValidationRuleFails)\n && isEmpty$1(typeContraintFails)) {\n return ({ isValid: true, errors: [] });\n }\n\n return ({\n isValid: false,\n errors: _.union(fieldParseFails, typeContraintFails, recordValidationRuleFails),\n });\n};\n\nconst ensureCollectionIsInitialised = async (datastore, node, parentKey) => {\n if (!await datastore.exists(parentKey)) {\n await datastore.createFolder(parentKey);\n await datastore.createFolder(\n joinKey(parentKey, 'allids'),\n );\n await datastore.createFolder(\n joinKey(\n parentKey,\n 'allids',\n node.nodeId.toString(),\n ),\n );\n }\n};\n\nconst initialiseRootCollections = async (datastore, hierarchy) => {\n const rootCollectionRecord = allTrue(\n n => isRoot(n.parent()),\n isCollectionRecord,\n );\n\n const flathierarchy = getFlattenedHierarchy(hierarchy);\n\n const collectionRecords = $(flathierarchy, [\n filter(rootCollectionRecord),\n ]);\n\n for (const col of collectionRecords) {\n await ensureCollectionIsInitialised(\n datastore,\n col,\n col.collectionPathRegx(),\n );\n }\n};\n\nconst initialiseChildCollections = async (app, recordKey) => {\n const childCollectionRecords = $(recordKey, [\n getExactNodeForPath(app.hierarchy),\n n => n.children,\n filter(isCollectionRecord),\n ]);\n\n for (const child of childCollectionRecords) {\n await ensureCollectionIsInitialised(\n app.datastore,\n child,\n joinKey(recordKey, child.collectionName),\n );\n }\n};\n\nconst allIdChars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';\n\nconst allIdsStringsForFactor = (collectionNode) => {\n const factor = collectionNode.allidsShardFactor;\n const charRangePerShard = 64 / factor;\n const allIdStrings = [];\n let index = 0;\n let currentIdsShard = '';\n while (index < 64) {\n currentIdsShard += allIdChars[index];\n if ((index + 1) % charRangePerShard === 0) {\n allIdStrings.push(currentIdsShard);\n currentIdsShard = '';\n }\n index++;\n }\n\n return allIdStrings;\n};\n\nconst getAllIdsShardNames = (appHierarchy, collectionKey) => {\n const collectionRecordNode = getNodeForCollectionPath(appHierarchy)(collectionKey);\n return $(collectionRecordNode, [\n c => [c.nodeId],\n map(i => map(c => _allIdsShardKey(collectionKey, i, c))(allIdsStringsForFactor(collectionRecordNode))),\n flatten,\n ]);\n};\n\nconst _allIdsShardKey = (collectionKey, childNo, shardKey) => joinKey(\n collectionKey,\n 'allids',\n childNo,\n shardKey,\n);\n\nconst getAllIdsShardKey = (appHierarchy, collectionKey, recordId) => {\n const indexOfFirstDash = recordId.indexOf('-');\n\n const collectionNode = getNodeForCollectionPath(appHierarchy)(collectionKey);\n\n const idFirstChar = recordId[indexOfFirstDash + 1];\n const allIdsShardId = $(collectionNode, [\n allIdsStringsForFactor,\n find(i => i.includes(idFirstChar)),\n ]);\n\n return _allIdsShardKey(\n collectionKey,\n recordId.slice(0, indexOfFirstDash),\n allIdsShardId,\n );\n};\n\nconst getOrCreateShardFile = async (datastore, allIdsKey) => {\n try {\n return await datastore.loadFile(allIdsKey);\n } catch (eLoad) {\n try {\n await datastore.createFile(allIdsKey, '');\n return '';\n } catch (eCreate) {\n throw new Error(\n `Error loading, then creating allIds ${allIdsKey\n } : LOAD : ${eLoad.message\n } : CREATE : ${eCreate}`,\n );\n }\n }\n};\n\nconst getShardFile = async (datastore, allIdsKey) => {\n try {\n return await datastore.loadFile(allIdsKey);\n } catch (eLoad) {\n return '';\n }\n};\n\nconst addToAllIds = (appHierarchy, datastore) => async (record) => {\n const allIdsKey = getAllIdsShardKey(\n appHierarchy,\n getParentKey(record.key),\n record.id,\n );\n\n let allIds = await getOrCreateShardFile(datastore, allIdsKey);\n\n allIds += `${allIds.length > 0 ? ',' : ''}${record.id}`;\n\n await datastore.updateFile(allIdsKey, allIds);\n};\n\nconst getAllIdsIterator = app => async (collection_Key_or_NodeKey) => {\n collection_Key_or_NodeKey = safeKey(collection_Key_or_NodeKey);\n const targetNode = getCollectionNodeByKeyOrNodeKey(\n app.hierarchy,\n collection_Key_or_NodeKey,\n );\n\n const getAllIdsIteratorForCollectionKey = async (collectionKey) => {\n const all_allIdsKeys = getAllIdsShardNames(app.hierarchy, collectionKey);\n let shardIndex = 0;\n\n const allIdsFromShardIterator = async () => {\n if (shardIndex === all_allIdsKeys.length) { return ({ done: true, result: { ids: [], collectionKey } }); }\n\n const shardKey = all_allIdsKeys[shardIndex];\n\n const allIds = await getAllIdsFromShard(app.datastore, shardKey);\n\n shardIndex++;\n\n return ({\n result: {\n ids: allIds,\n collectionKey,\n },\n done: false,\n });\n };\n\n return allIdsFromShardIterator;\n };\n\n const ancestors = $(getFlattenedHierarchy(app.hierarchy), [\n filter(isCollectionRecord),\n filter(n => isAncestor(targetNode)(n)\n || n.nodeKey() === targetNode.nodeKey()),\n orderBy([n => n.nodeKey().length], ['asc']),\n ]); // parents first\n\n const traverseForIteraterators = async (parentRecordKey = '', currentNodeIndex = 0) => {\n const currentNode = ancestors[currentNodeIndex];\n const currentCollectionKey = joinKey(\n parentRecordKey,\n currentNode.collectionName,\n );\n if (currentNode.nodeKey() === targetNode.nodeKey()) {\n return [\n await getAllIdsIteratorForCollectionKey(\n currentCollectionKey,\n )];\n }\n const allIterators = [];\n const currentIterator = await getAllIdsIteratorForCollectionKey(\n currentCollectionKey,\n );\n\n let ids = await currentIterator();\n while (ids.done === false) {\n for (const id of ids.result.ids) {\n allIterators.push(\n await traverseForIteraterators(\n joinKey(currentCollectionKey, id),\n currentNodeIndex + 1,\n ),\n );\n }\n\n ids = await currentIterator();\n }\n\n return flatten(allIterators);\n };\n\n const iteratorsArray = await traverseForIteraterators();\n let currentIteratorIndex = 0;\n return async () => {\n if (iteratorsArray.length === 0) { return { done: true, result: [] }; }\n const innerResult = await iteratorsArray[currentIteratorIndex]();\n if (!innerResult.done) { return innerResult; }\n if (currentIteratorIndex == iteratorsArray.length - 1) {\n return { done: true, result: innerResult.result };\n }\n currentIteratorIndex++;\n return { done: false, result: innerResult.result };\n };\n};\n\nconst getAllIdsFromShard = async (datastore, shardKey) => {\n const allIdsStr = await getShardFile(datastore, shardKey);\n\n const allIds = [];\n let currentId = '';\n for (let i = 0; i < allIdsStr.length; i++) {\n const currentChar = allIdsStr.charAt(i);\n const isLast = (i === allIdsStr.length - 1);\n if (currentChar === ',' || isLast) {\n if (isLast) currentId += currentChar;\n allIds.push(currentId);\n currentId = '';\n } else {\n currentId += currentChar;\n }\n }\n return allIds;\n};\n\nconst removeFromAllIds = (appHierarchy, datastore) => async (record) => {\n const shardKey = getAllIdsShardKey(\n appHierarchy,\n getParentKey(record.key),\n record.id,\n );\n const allIds = await getAllIdsFromShard(datastore, shardKey);\n\n const newIds = $(allIds, [\n pull(record.id),\n join$2(','),\n ]);\n\n await datastore.updateFile(shardKey, newIds);\n};\n\nconst TRANSACTIONS_FOLDER = `${keySep}.transactions`;\nconst LOCK_FILENAME = 'lock';\nconst LOCK_FILE_KEY = joinKey(\n TRANSACTIONS_FOLDER, LOCK_FILENAME,\n);\nconst idSep = '$';\n\nconst isOfType = typ => trans => trans.transactionType === typ;\n\nconst CREATE_RECORD_TRANSACTION = 'create';\nconst UPDATE_RECORD_TRANSACTION = 'update';\nconst DELETE_RECORD_TRANSACTION = 'delete';\nconst BUILD_INDEX_TRANSACTION = 'build';\n\nconst isUpdate = isOfType(UPDATE_RECORD_TRANSACTION);\nconst isDelete = isOfType(DELETE_RECORD_TRANSACTION);\nconst isCreate = isOfType(CREATE_RECORD_TRANSACTION);\nconst isBuildIndex = isOfType(BUILD_INDEX_TRANSACTION);\n\nconst keyToFolderName = nodeKey => getHashCode(nodeKey);\n\nconst getTransactionId = (recordId, transactionType, uniqueId) => \n `${recordId}${idSep}${transactionType}${idSep}${uniqueId}`;\n\nconst buildIndexFolder = '.BUILD-';\nconst nodeKeyHashFromBuildFolder = folder => folder.replace(buildIndexFolder, '');\n\nconst isBuildIndexFolder = key => getLastPartInKey(key).startsWith(buildIndexFolder);\n\nconst IndexNodeKeyFolder = indexNodeKey => joinKey(\n TRANSACTIONS_FOLDER,\n buildIndexFolder + keyToFolderName(indexNodeKey),\n);\n\nconst IndexNodeKeyBatchFolder = (indexNodeKey, count) => \n joinKey(IndexNodeKeyFolder(indexNodeKey), Math.floor(count / BUILDINDEX_BATCH_COUNT).toString());\n\nconst BUILDINDEX_BATCH_COUNT = 1000;\nconst timeoutMilliseconds = 30 * 1000; // 30 secs\nconst maxLockRetries = 1;\n\nconst transactionForCreateRecord = async (app, record) => await transaction(\n app.datastore, CREATE_RECORD_TRANSACTION,\n record.key, { record },\n getTransactionKey_Records,\n);\n\nconst transactionForUpdateRecord = async (app, oldRecord, newRecord) => await transaction(\n app.datastore, UPDATE_RECORD_TRANSACTION,\n newRecord.key, { oldRecord, record: newRecord },\n getTransactionKey_Records,\n);\n\nconst transactionForDeleteRecord = async (app, record) => await transaction(\n app.datastore, DELETE_RECORD_TRANSACTION,\n record.key, { record },\n getTransactionKey_Records,\n);\n\nconst transactionForBuildIndex = async (app, indexNodeKey, recordKey, count) => {\n const transactionFolder = IndexNodeKeyBatchFolder(indexNodeKey, count);\n if (count % BUILDINDEX_BATCH_COUNT === 0) {\n await app.datastore.createFolder(transactionFolder);\n }\n\n return await transaction(\n app.datastore, BUILD_INDEX_TRANSACTION,\n recordKey, { recordKey },\n id => joinKey(transactionFolder, id),\n );\n};\n\nconst createBuildIndexFolder = async (datastore, indexNodeKey) => await datastore.createFolder(\n IndexNodeKeyFolder(indexNodeKey),\n);\n\nconst getTransactionKey_Records = id => joinKey(TRANSACTIONS_FOLDER, id);\n\nconst transaction = async (datastore, transactionType, recordKey, data, getTransactionKey) => {\n const recordId = getLastPartInKey(recordKey);\n const uniqueId = generate();\n const id = getTransactionId(\n recordId, transactionType, uniqueId,\n );\n\n const key = getTransactionKey(id);\n\n const trans = {\n transactionType,\n recordKey,\n ...data,\n id,\n };\n\n await datastore.createJson(\n key, trans,\n );\n\n return trans;\n};\n\nconst initialiseIndex = async (datastore, parentKey, index) => {\n const indexKey = joinKey(parentKey, index.name);\n\n await datastore.createFolder(indexKey);\n\n if (isShardedIndex(index)) {\n await datastore.createFile(\n getShardMapKey(indexKey),\n '[]',\n );\n } else {\n await createIndexFile(\n datastore,\n getUnshardedIndexDataKey(indexKey),\n index,\n );\n }\n};\n\nconst save = app => async (record, context) => apiWrapper(\n app,\n events.recordApi.save,\n record.isNew\n ? permission.createRecord.isAuthorized(record.key)\n : permission.updateRecord.isAuthorized(record.key), { record },\n _save, app, record, context, false,\n);\n\n\nconst _save = async (app, record, context, skipValidation = false) => {\n const recordClone = cloneDeep(record);\n if (!skipValidation) {\n const validationResult = await validate(app)(recordClone, context);\n if (!validationResult.isValid) {\n await app.publish(events.recordApi.save.onInvalid, { record, validationResult });\n throw new BadRequestError(`Save : Record Invalid : ${\n JSON.stringify(validationResult.errors)}`);\n }\n }\n\n if (recordClone.isNew) {\n await addToAllIds(app.hierarchy, app.datastore)(recordClone);\n const transaction = await transactionForCreateRecord(\n app, recordClone,\n );\n recordClone.transactionId = transaction.id;\n await app.datastore.createFolder(recordClone.key);\n await app.datastore.createFolder(\n joinKey(recordClone.key, 'files'),\n );\n await app.datastore.createJson(\n getRecordFileName(recordClone.key),\n recordClone,\n );\n await initialiseReverseReferenceIndexes(app, record);\n await initialiseAncestorIndexes(app, record);\n await initialiseChildCollections(app, recordClone.key);\n await app.publish(events.recordApi.save.onRecordCreated, {\n record: recordClone,\n });\n } else {\n const oldRecord = await _load(app, recordClone.key);\n const transaction = await transactionForUpdateRecord(\n app, oldRecord, recordClone,\n );\n recordClone.transactionId = transaction.id;\n await app.datastore.updateJson(\n getRecordFileName(recordClone.key),\n recordClone,\n );\n\n await app.publish(events.recordApi.save.onRecordUpdated, {\n old: oldRecord,\n new: recordClone,\n });\n }\n\n await app.cleanupTransactions();\n\n const returnedClone = cloneDeep(recordClone);\n returnedClone.isNew = false;\n return returnedClone;\n};\n\nconst initialiseAncestorIndexes = async (app, record) => {\n const recordNode = getExactNodeForPath(app.hierarchy)(record.key);\n\n for (const index of recordNode.indexes) {\n const indexKey = joinKey(record.key, index.name);\n if (!await app.datastore.exists(indexKey)) { await initialiseIndex(app.datastore, record.key, index); }\n }\n};\n\nconst initialiseReverseReferenceIndexes = async (app, record) => {\n const recordNode = getExactNodeForPath(app.hierarchy)(record.key);\n\n const indexNodes = $(fieldsThatReferenceThisRecord(app, recordNode), [\n map(f => $(f.typeOptions.reverseIndexNodeKeys, [\n map(n => getNode(\n app.hierarchy,\n n,\n )),\n ])),\n flatten,\n ]);\n\n for (const indexNode of indexNodes) {\n await initialiseIndex(\n app.datastore, record.key, indexNode,\n );\n }\n};\n\nconst fieldsThatReferenceThisRecord = (app, recordNode) => $(app.hierarchy, [\n getFlattenedHierarchy,\n filter(isRecord),\n map(n => n.fields),\n flatten,\n filter(fieldReversesReferenceToNode(recordNode)),\n]);\n\nconst deleteCollection = (app, disableCleanup = false) => async key => apiWrapper(\n app,\n events.collectionApi.delete,\n permission.manageCollection.isAuthorized,\n { key },\n _deleteCollection, app, key, disableCleanup,\n);\n\n\nconst _deleteCollection = async (app, key, disableCleanup) => {\n key = safeKey(key);\n const node = getNodeForCollectionPath(app.hierarchy)(key);\n\n await deleteRecords(app, key);\n await deleteAllIdsFolders(app, node, key);\n await deleteCollectionFolder(app, key);\n if (!disableCleanup) { await app.cleanupTransactions(); }\n};\n\nconst deleteCollectionFolder = async (app, key) => await app.datastore.deleteFolder(key);\n\n\nconst deleteAllIdsFolders = async (app, node, key) => {\n await app.datastore.deleteFolder(\n joinKey(\n key, 'allids',\n node.nodeId,\n ),\n );\n\n await app.datastore.deleteFolder(\n joinKey(key, 'allids'),\n );\n};\n\nconst deleteRecords = async (app, key) => {\n const deletedAllIdsShards = [];\n const deleteAllIdsShard = async (recordId) => {\n const shardKey = getAllIdsShardKey(\n app.hierarchy, key, recordId,\n );\n\n if (includes$1(shardKey)(deletedAllIdsShards)) {\n return;\n }\n\n deletedAllIdsShards.push(shardKey);\n\n await app.datastore.deleteFile(shardKey);\n };\n\n const iterate = await getAllIdsIterator(app)(key);\n\n let ids = await iterate();\n while (!ids.done) {\n if (ids.result.collectionKey === key) {\n for (const id of ids.result.ids) {\n await _deleteRecord(\n app,\n joinKey(key, id),\n true,\n );\n await deleteAllIdsShard(id);\n }\n }\n\n ids = await iterate();\n }\n};\n\nconst _deleteIndex = async (app, indexKey, includeFolder) => {\n const indexNode = getExactNodeForPath(app.hierarchy)(indexKey);\n\n if (!isIndex(indexNode)) { throw new Error('Supplied key is not an index'); }\n\n if (isShardedIndex(indexNode)) {\n const shardKeys = await getAllShardKeys(app, indexKey);\n for (const k of shardKeys) {\n await tryAwaitOrIgnore(\n app.datastore.deleteFile(k),\n );\n }\n tryAwaitOrIgnore(\n await app.datastore.deleteFile(\n getShardMapKey(indexKey),\n ),\n );\n } else {\n await tryAwaitOrIgnore(\n app.datastore.deleteFile(\n getUnshardedIndexDataKey(indexKey),\n ),\n );\n }\n\n if (includeFolder) {\n tryAwaitOrIgnore(\n await app.datastore.deleteFolder(indexKey),\n );\n }\n};\n\nconst deleteRecord$1 = (app, disableCleanup = false) => async key => apiWrapper(\n app,\n events.recordApi.delete,\n permission.deleteRecord.isAuthorized(key),\n { key },\n _deleteRecord, app, key, disableCleanup,\n);\n\n// called deleteRecord because delete is a keyword\nconst _deleteRecord = async (app, key, disableCleanup) => {\n key = safeKey(key);\n const node = getExactNodeForPath(app.hierarchy)(key);\n\n const record = await _load(app, key);\n await transactionForDeleteRecord(app, record);\n\n for (const collectionRecord of node.children) {\n const collectionKey = joinKey(\n key, collectionRecord.collectionName,\n );\n await _deleteCollection(app, collectionKey, true);\n }\n\n await app.datastore.deleteFile(\n getRecordFileName(key),\n );\n\n await deleteFiles(app, key);\n\n await removeFromAllIds(app.hierarchy, app.datastore)(record);\n\n if (!disableCleanup) { await app.cleanupTransactions(); }\n\n await app.datastore.deleteFolder(key);\n await deleteIndexes(app, key);\n};\n\nconst deleteIndexes = async (app, key) => {\n const node = getExactNodeForPath(app.hierarchy)(key);\n /* const reverseIndexKeys = $(app.hierarchy, [\n getFlattenedHierarchy,\n map(n => n.fields),\n flatten,\n filter(isSomething),\n filter(fieldReversesReferenceToNode(node)),\n map(f => $(f.typeOptions.reverseIndexNodeKeys, [\n map(n => getNode(\n app.hierarchy,\n n))\n ])\n ),\n flatten,\n map(n => joinKey(key, n.name))\n ]);\n\n for(let i of reverseIndexKeys) {\n await _deleteIndex(app, i, true);\n } */\n\n\n for (const index of node.indexes) {\n const indexKey = joinKey(key, index.name);\n await _deleteIndex(app, indexKey, true);\n }\n};\n\nconst deleteFiles = async (app, key) => {\n const filesFolder = joinKey(key, 'files');\n const allFiles = await app.datastore.getFolderContents(\n filesFolder,\n );\n\n for (const file of allFiles) {\n await app.datastore.deleteFile(file);\n }\n\n await app.datastore.deleteFolder(\n joinKey(key, 'files'),\n );\n};\n\nconst uploadFile = app => async (recordKey, readableStream, relativeFilePath) => apiWrapper(\n app,\n events.recordApi.uploadFile,\n permission.updateRecord.isAuthorized(recordKey),\n { recordKey, readableStream, relativeFilePath },\n _uploadFile, app, recordKey, readableStream, relativeFilePath,\n);\n\nconst _uploadFile = async (app, recordKey, readableStream, relativeFilePath) => {\n if (isNothing(recordKey)) { throw new BadRequestError('Record Key not supplied'); }\n if (isNothing(relativeFilePath)) { throw new BadRequestError('file path not supplied'); }\n if (!isLegalFilename(relativeFilePath)) { throw new BadRequestError('Illegal filename'); }\n\n const record = await _load(app, recordKey);\n\n const fullFilePath = safeGetFullFilePath(\n recordKey, relativeFilePath,\n );\n\n const tempFilePath = `${fullFilePath}_${generate()}.temp`;\n\n const outputStream = await app.datastore.writableFileStream(\n tempFilePath,\n );\n\n return new Promise((resolve,reject) => {\n readableStream.pipe(outputStream);\n outputStream.on('error', reject);\n outputStream.on('finish', resolve);\n })\n .then(() => app.datastore.getFileSize(tempFilePath))\n .then(size => {\n const isExpectedFileSize = checkFileSizeAgainstFields(\n app, record, relativeFilePath, size\n ); \n if (!isExpectedFileSize) { throw new BadRequestError(`Fields for ${relativeFilePath} do not have expected size: ${join(',')(incorrectFields)}`); } \n\n })\n .then(() => tryAwaitOrIgnore(app.datastore.deleteFile, fullFilePath))\n .then(() => app.datastore.renameFile(tempFilePath, fullFilePath));\n\n /*\n readableStream.pipe(outputStream);\n\n await new Promise(fulfill => outputStream.on('finish', fulfill));\n\n const isExpectedFileSize = checkFileSizeAgainstFields(\n app,\n record, relativeFilePath,\n await app.datastore.getFileSize(tempFilePath),\n );\n\n if (!isExpectedFileSize) {\n throw new Error(\n `Fields for ${relativeFilePath} do not have expected size`);\n }\n\n await tryAwaitOrIgnore(app.datastore.deleteFile, fullFilePath);\n\n await app.datastore.renameFile(tempFilePath, fullFilePath);\n */\n};\n\nconst checkFileSizeAgainstFields = (app, record, relativeFilePath, expectedSize) => {\n const recordNode = getExactNodeForPath(app.hierarchy)(record.key);\n\n const incorrectFileFields = $(recordNode.fields, [\n filter(f => f.type === 'file'\n && record[f.name].relativePath === relativeFilePath\n && record[f.name].size !== expectedSize),\n map(f => f.name),\n ]);\n\n const incorrectFileArrayFields = $(recordNode.fields, [\n filter(a => a.type === 'array<file>'\n && $(record[a.name], [\n some(f => record[f.name].relativePath === relativeFilePath\n && record[f.name].size !== expectedSize),\n ])),\n map(f => f.name),\n ]);\n\n const incorrectFields = [\n ...incorrectFileFields,\n ...incorrectFileArrayFields,\n ];\n\n if (incorrectFields.length > 0) {\n return false;\n }\n\n return true;\n};\n\nconst safeGetFullFilePath = (recordKey, relativeFilePath) => {\n const naughtyUser = () => { throw new ForbiddenError('naughty naughty'); };\n\n if (relativeFilePath.startsWith('..')) naughtyUser();\n\n const pathParts = splitKey(relativeFilePath);\n\n if (includes$1('..')(pathParts)) naughtyUser();\n\n const recordKeyParts = splitKey(recordKey);\n\n const fullPathParts = [\n ...recordKeyParts,\n 'files',\n ...filter(p => p !== '.')(pathParts),\n ];\n\n return joinKey(fullPathParts);\n};\n\nconst downloadFile = app => async (recordKey, relativePath) => apiWrapper(\n app,\n events.recordApi.uploadFile,\n permission.readRecord.isAuthorized(recordKey),\n { recordKey, relativePath },//remove dupe key 'recordKey' from object\n _downloadFile, app, recordKey, relativePath,\n); \n\n\nconst _downloadFile = async (app, recordKey, relativePath) => {\n if (isNothing(recordKey)) { throw new BadRequestError('Record Key not supplied'); }\n if (isNothing(relativePath)) { throw new BadRequestError('file path not supplied'); }\n\n return await app.datastore.readableFileStream(\n safeGetFullFilePath(\n recordKey, relativePath,\n ),\n );\n};\n\nconst customId = app => (nodeName, id) => {\n const node = $(app.hierarchy, [\n getFlattenedHierarchy,\n find(n => n.name === nodeName),\n ]);\n\n if (!node) throw new NotFoundError(`Cannot find node ${nodeName}`);\n\n return `${node.nodeId}-${id}`;\n};\n\nconst setCustomId = app => (record, id) => {\n record.id = customId(app)(record.type, id);\n\n const keyParts = splitKey(record.key);\n\n record.key = $(keyParts, [\n take(keyParts.length - 1),\n union([record.id]),\n joinKey,\n ]);\n\n return record;\n};\n\nconst api = app => ({\n getNew: getNew(app),\n getNewChild: getNewChild(app),\n save: save(app),\n load: load(app),\n delete: deleteRecord$1(app, false),\n validate: validate(app),\n getContext: getContext(app),\n uploadFile: uploadFile(app),\n downloadFile: downloadFile(app),\n customId: customId(app),\n setCustomId: setCustomId(app),\n});\n\n\nconst getRecordApi = app => api(app);\n\nconst getAllowedRecordTypes = app => key => apiWrapperSync(\n app,\n events.collectionApi.getAllowedRecordTypes,\n alwaysAuthorized,\n { key },\n _getAllowedRecordTypes, app, key,\n);\n\nconst _getAllowedRecordTypes = (app, key) => {\n key = safeKey(key);\n const node = getNodeForCollectionPath(app.hierarchy)(key);\n return isNothing(node) ? [] : [node.name];\n};\n\nconst getCollectionApi = app => ({\n getAllowedRecordTypes: getAllowedRecordTypes(app),\n getAllIdsIterator: getAllIdsIterator(app),\n delete: deleteCollection(app),\n});\n\n/** rebuilds an index\n * @param {object} app - the application container\n * @param {string} indexNodeKey - node key of the index, which the index belongs to\n */\nconst buildIndex = app => async indexNodeKey => apiWrapper(\n app,\n events.indexApi.buildIndex,\n permission.manageIndex.isAuthorized,\n { indexNodeKey },\n _buildIndex, app, indexNodeKey,\n);\n\nconst _buildIndex = async (app, indexNodeKey) => {\n const indexNode = getNode(app.hierarchy, indexNodeKey);\n\n await createBuildIndexFolder(app.datastore, indexNodeKey);\n\n if (!isIndex(indexNode)) { throw new BadRequestError('BuildIndex: must supply an indexnode'); }\n\n if (indexNode.indexType === 'reference') {\n await buildReverseReferenceIndex(\n app, indexNode,\n );\n } else {\n await buildHeirarchalIndex(\n app, indexNode,\n );\n }\n\n await app.cleanupTransactions();\n};\n\nconst buildReverseReferenceIndex = async (app, indexNode) => {\n // Iterate through all referencING records,\n // and update referenced index for each record\n let recordCount = 0;\n const referencingNodes = $(app.hierarchy, [\n getFlattenedHierarchy,\n filter(n => isRecord(n)\n && some(fieldReversesReferenceToIndex(indexNode))(n.fields)),\n ]);\n\n const createTransactionsForReferencingNode = async (referencingNode) => {\n const iterateReferencingNodes = await getAllIdsIterator(app)(referencingNode.collectionNodeKey());\n\n let referencingIdIterator = await iterateReferencingNodes();\n while (!referencingIdIterator.done) {\n const { result } = referencingIdIterator;\n for (const id of result.ids) {\n const recordKey = joinKey(result.collectionKey, id);\n await transactionForBuildIndex(app, indexNode.nodeKey(), recordKey, recordCount);\n recordCount++;\n }\n referencingIdIterator = await iterateReferencingNodes();\n }\n };\n\n for (const referencingNode of referencingNodes) {\n await createTransactionsForReferencingNode(referencingNode);\n }\n};\n\nconst buildHeirarchalIndex = async (app, indexNode) => {\n let recordCount = 0;\n\n const createTransactionsForIds = async (collectionKey, ids) => {\n for (const recordId of ids) {\n const recordKey = joinKey(collectionKey, recordId);\n\n const recordNode = getRecordNodeById(\n app.hierarchy,\n recordId,\n );\n\n if (recordNodeApplies(indexNode)(recordNode)) {\n await transactionForBuildIndex(\n app, indexNode.nodeKey(),\n recordKey, recordCount,\n );\n recordCount++;\n }\n }\n };\n\n\n const collectionRecords = getAllowedRecordNodesForIndex(app.hierarchy, indexNode);\n\n for (const targetCollectionRecordNode of collectionRecords) {\n const allIdsIterator = await getAllIdsIterator(app)(targetCollectionRecordNode.collectionNodeKey());\n\n let allIds = await allIdsIterator();\n while (allIds.done === false) {\n await createTransactionsForIds(\n allIds.result.collectionKey,\n allIds.result.ids,\n );\n allIds = await allIdsIterator();\n }\n }\n\n return recordCount;\n};\n\nconst recordNodeApplies = indexNode => recordNode => includes$1(recordNode.nodeId)(indexNode.allowedRecordNodeIds);\n\nconst aggregates = app => async (indexKey, rangeStartParams = null, rangeEndParams = null) => apiWrapper(\n app,\n events.indexApi.aggregates,\n permission.readIndex.isAuthorized(indexKey),\n { indexKey, rangeStartParams, rangeEndParams },\n _aggregates, app, indexKey, rangeStartParams, rangeEndParams,\n);\n\nconst _aggregates = async (app, indexKey, rangeStartParams, rangeEndParams) => {\n indexKey = safeKey(indexKey);\n const indexNode = getExactNodeForPath(app.hierarchy)(indexKey);\n\n if (!isIndex(indexNode)) { throw new BadRequestError('supplied key is not an index'); }\n\n if (isShardedIndex(indexNode)) {\n const shardKeys = await getShardKeysInRange(\n app, indexKey, rangeStartParams, rangeEndParams,\n );\n let aggregateResult = null;\n for (const k of shardKeys) {\n const shardResult = await getAggregates(app.hierarchy, app.datastore, indexNode, k);\n if (aggregateResult === null) {\n aggregateResult = shardResult;\n } else {\n aggregateResult = mergeShardAggregate(\n aggregateResult,\n shardResult,\n );\n }\n }\n return aggregateResult;\n }\n return await getAggregates(\n app.hierarchy,\n app.datastore,\n indexNode,\n getUnshardedIndexDataKey(indexKey),\n );\n};\n\nconst mergeShardAggregate = (totals, shard) => {\n const mergeGrouping = (tot, shr) => {\n tot.count += shr.count;\n for (const aggName in tot) {\n if (aggName === 'count') continue;\n const totagg = tot[aggName];\n const shragg = shr[aggName];\n totagg.sum += shragg.sum;\n totagg.max = totagg.max > shragg.max\n ? totagg.max\n : shragg.max;\n totagg.min = totagg.min < shragg.min\n ? totagg.min\n : shragg.min;\n totagg.mean = totagg.sum / tot.count;\n }\n return tot;\n };\n\n for (const aggGroupDef in totals) {\n for (const grouping in shard[aggGroupDef]) {\n const groupingTotal = totals[aggGroupDef][grouping];\n totals[aggGroupDef][grouping] = isUndefined(groupingTotal)\n ? shard[aggGroupDef][grouping]\n : mergeGrouping(\n totals[aggGroupDef][grouping],\n shard[aggGroupDef][grouping],\n );\n }\n }\n\n return totals;\n};\n\nconst getAggregates = async (hierarchy, datastore, index, indexedDataKey) => {\n const aggregateResult = {};\n const doRead = iterateIndex(\n async item => {\n applyItemToAggregateResult(\n index, aggregateResult, item,\n );\n return CONTINUE_READING_RECORDS;\n },\n async () => aggregateResult\n );\n\n return await doRead(hierarchy, datastore, index, indexedDataKey);\n};\n\n\nconst applyItemToAggregateResult = (indexNode, result, item) => {\n const getInitialAggregateResult = () => ({\n sum: 0, mean: null, max: null, min: null,\n });\n\n const applyAggregateResult = (agg, existing, count) => {\n const value = compileCode$1(agg.aggregatedValue)({ record: item });\n\n if (!isNumber$1(value)) return existing;\n\n existing.sum += value;\n existing.max = value > existing.max || existing.max === null\n ? value\n : existing.max;\n existing.min = value < existing.min || existing.min === null\n ? value\n : existing.min;\n existing.mean = existing.sum / count;\n return existing;\n };\n\n for (const aggGroup of indexNode.aggregateGroups) {\n if (!has$1(aggGroup.name)(result)) {\n result[aggGroup.name] = {};\n }\n\n const thisGroupResult = result[aggGroup.name];\n\n if (isNonEmptyString(aggGroup.condition)) {\n if (!compileExpression$1(aggGroup.condition)({ record: item })) {\n continue;\n }\n }\n\n let group = isNonEmptyString(aggGroup.groupBy)\n ? compileCode$1(aggGroup.groupBy)({ record: item })\n : 'all';\n if (!isNonEmptyString(group)) {\n group = '(none)';\n }\n\n if (!has$1(group)(thisGroupResult)) {\n thisGroupResult[group] = { count: 0 };\n for (const agg of aggGroup.aggregates) {\n thisGroupResult[group][agg.name] = getInitialAggregateResult();\n }\n }\n\n thisGroupResult[group].count++;\n\n for (const agg of aggGroup.aggregates) {\n const existingValues = thisGroupResult[group][agg.name];\n thisGroupResult[group][agg.name] = applyAggregateResult(\n agg, existingValues,\n thisGroupResult[group].count,\n );\n }\n }\n};\n\nconst getIndexApi = app => ({\n listItems: listItems(app),\n buildIndex: buildIndex(app),\n aggregates: aggregates(app),\n});\n\nconst createNodeErrors = {\n indexCannotBeParent: 'Index template cannot be a parent',\n allNonRootNodesMustHaveParent: 'Only the root node may have no parent',\n indexParentMustBeRecordOrRoot: 'An index may only have a record or root as a parent',\n aggregateParentMustBeAnIndex: 'aggregateGroup parent must be an index',\n};\n\nconst pathRegxMaker = node => () => node.nodeKey().replace(/{id}/g, '[a-zA-Z0-9_-]+');\n\nconst nodeKeyMaker = node => () => switchCase(\n\n [n => isRecord(n) && !isSingleRecord(n),\n n => joinKey(\n node.parent().nodeKey(),\n node.collectionName,\n `${n.nodeId}-{id}`,\n )],\n\n [isRoot,\n constant('/')],\n\n [defaultCase,\n n => joinKey(node.parent().nodeKey(), n.name)],\n\n)(node);\n\n\nconst validate$1 = parent => (node) => {\n if (isIndex(node)\n && isSomething(parent)\n && !isRoot(parent)\n && !isRecord(parent)) {\n throw new BadRequestError(createNodeErrors.indexParentMustBeRecordOrRoot);\n }\n\n if (isaggregateGroup(node)\n && isSomething(parent)\n && !isIndex(parent)) {\n throw new BadRequestError(createNodeErrors.aggregateParentMustBeAnIndex);\n }\n\n if (isNothing(parent) && !isRoot(node)) { throw new BadRequestError(createNodeErrors.allNonRootNodesMustHaveParent); }\n\n return node;\n};\n\nconst construct = parent => (node) => {\n node.nodeKey = nodeKeyMaker(node);\n node.pathRegx = pathRegxMaker(node);\n node.parent = constant(parent);\n node.isRoot = () => isNothing(parent)\n && node.name === 'root'\n && node.type === 'root';\n if (isCollectionRecord(node)) {\n node.collectionNodeKey = () => joinKey(\n parent.nodeKey(), node.collectionName,\n );\n node.collectionPathRegx = () => joinKey(\n parent.pathRegx(), node.collectionName,\n );\n }\n return node;\n};\n\nconst addToParent = (obj) => {\n const parent = obj.parent();\n if (isSomething(parent)) {\n if (isIndex(obj))\n // Q: why are indexes not children ?\n // A: because they cannot have children of their own.\n { parent.indexes.push(obj); } else if (isaggregateGroup(obj)) { parent.aggregateGroups.push(obj); } else { parent.children.push(obj); }\n\n if (isRecord(obj)) {\n const defaultIndex = find$1(\n parent.indexes,\n i => i.name === `${parent.name}_index`,\n );\n if (defaultIndex) {\n defaultIndex.allowedRecordNodeIds.push(obj.nodeId);\n }\n }\n }\n return obj;\n};\n\nconst constructNode = (parent, obj) => $(obj, [\n construct(parent),\n validate$1(parent),\n addToParent,\n]);\n\nconst getNodeId = (parentNode) => {\n // this case is handled better elsewhere\n if (!parentNode) return null;\n const findRoot = n => (isRoot(n) ? n : findRoot(n.parent()));\n const root = findRoot(parentNode);\n\n return ($(root, [\n getFlattenedHierarchy,\n map(n => n.nodeId),\n max]) + 1);\n};\n\nconst constructHierarchy = (node, parent) => {\n construct(parent)(node);\n if (node.indexes) {\n each$1(node.indexes,\n child => constructHierarchy(child, node));\n }\n if (node.aggregateGroups) {\n each$1(node.aggregateGroups,\n child => constructHierarchy(child, node));\n }\n if (node.children && node.children.length > 0) {\n each$1(node.children,\n child => constructHierarchy(child, node));\n }\n if (node.fields) {\n each$1(node.fields,\n f => each$1(f.typeOptions, (val, key) => {\n const def = all$1[f.type].optionDefinitions[key];\n if (!def) {\n // unknown typeOption\n delete f.typeOptions[key];\n } else {\n f.typeOptions[key] = def.parse(val);\n }\n }));\n }\n return node;\n};\n\n\nconst getNewRootLevel = () => construct()({\n name: 'root',\n type: 'root',\n children: [],\n pathMaps: [],\n indexes: [],\n nodeId: 0,\n});\n\nconst _getNewRecordTemplate = (parent, name, createDefaultIndex, isSingle) => {\n const node = constructNode(parent, {\n name,\n type: 'record',\n fields: [],\n children: [],\n validationRules: [],\n nodeId: getNodeId(parent),\n indexes: [],\n allidsShardFactor: isRecord(parent) ? 1 : 64,\n collectionName: '',\n isSingle,\n });\n\n if (createDefaultIndex) {\n const defaultIndex = getNewIndexTemplate(parent);\n defaultIndex.name = `${name}_index`;\n defaultIndex.allowedRecordNodeIds.push(node.nodeId);\n }\n\n return node;\n};\n\nconst getNewRecordTemplate = (parent, name = '', createDefaultIndex = true) => _getNewRecordTemplate(parent, name, createDefaultIndex, false);\n\nconst getNewSingleRecordTemplate = parent => _getNewRecordTemplate(parent, '', false, true);\n\nconst getNewIndexTemplate = (parent, type = 'ancestor') => constructNode(parent, {\n name: '',\n type: 'index',\n map: 'return {...record};',\n filter: '',\n indexType: type,\n getShardName: '',\n getSortKey: 'record.id',\n aggregateGroups: [],\n allowedRecordNodeIds: [],\n nodeId: getNodeId(parent),\n});\n\nconst getNewAggregateGroupTemplate = index => constructNode(index, {\n name: '',\n type: 'aggregateGroup',\n groupBy: '',\n aggregates: [],\n condition: '',\n nodeId: getNodeId(index),\n});\n\nconst getNewAggregateTemplate = (set) => {\n const aggregatedValue = {\n name: '',\n aggregatedValue: '',\n };\n set.aggregates.push(aggregatedValue);\n return aggregatedValue;\n};\n\nconst fieldErrors = {\n AddFieldValidationFailed: 'Add field validation: ',\n};\n\nconst allowedTypes = () => keys$1(all$1);\n\nconst getNewField = type => ({\n name: '', // how field is referenced internally\n type,\n typeOptions: getDefaultOptions$1(type),\n label: '', // how field is displayed\n getInitialValue: 'default', // function that gets value when initially created\n getUndefinedValue: 'default', // function that gets value when field undefined on record\n});\n\nconst fieldRules = allFields => [\n makerule('name', 'field name is not set',\n f => isNonEmptyString(f.name)),\n makerule('type', 'field type is not set',\n f => isNonEmptyString(f.type)),\n makerule('label', 'field label is not set',\n f => isNonEmptyString(f.label)),\n makerule('getInitialValue', 'getInitialValue function is not set',\n f => isNonEmptyString(f.getInitialValue)),\n makerule('getUndefinedValue', 'getUndefinedValue function is not set',\n f => isNonEmptyString(f.getUndefinedValue)),\n makerule('name', 'field name is duplicated',\n f => isNothingOrEmpty(f.name)\n || countBy('name')(allFields)[f.name] === 1),\n makerule('type', 'type is unknown',\n f => isNothingOrEmpty(f.type)\n || some(t => f.type === t)(allowedTypes())),\n];\n\nconst typeOptionsRules = (field) => {\n const type = all$1[field.type];\n if (isNothing(type)) return [];\n\n const def = optName => type.optionDefinitions[optName];\n\n return $(field.typeOptions, [\n keys$1,\n filter(o => isSomething(def(o))\n && isSomething(def(o).isValid)),\n map(o => makerule(\n `typeOptions.${o}`,\n `${def(o).requirementDescription}`,\n field => def(o).isValid(field.typeOptions[o]),\n )),\n ]);\n};\n\nconst validateField = allFields => (field) => {\n const everySingleField = includes$1(field)(allFields) ? allFields : [...allFields, field];\n return applyRuleSet([...fieldRules(everySingleField), ...typeOptionsRules(field)])(field);\n};\n\nconst validateAllFields = recordNode => $(recordNode.fields, [\n map(validateField(recordNode.fields)),\n flatten,\n]);\n\nconst addField = (recordTemplate, field) => {\n if (isNothingOrEmpty(field.label)) {\n field.label = field.name;\n }\n const validationMessages = validateField([...recordTemplate.fields, field])(field);\n if (validationMessages.length > 0) {\n const errors = map(m => m.error)(validationMessages);\n throw new BadRequestError(`${fieldErrors.AddFieldValidationFailed} ${errors.join(', ')}`);\n }\n recordTemplate.fields.push(field);\n};\n\nconst getNewRecordValidationRule = (invalidFields,\n messageWhenInvalid,\n expressionWhenValid) => ({\n invalidFields, messageWhenInvalid, expressionWhenValid,\n});\n\nconst getStaticValue = switchCase(\n [isNumber$1, v => v.toString()],\n [isBoolean$1, v => v.toString()],\n [defaultCase$1, v => `'${v}'`],\n);\n\nconst commonRecordValidationRules = ({\n\n fieldNotEmpty: fieldName => getNewRecordValidationRule(\n [fieldName],\n `${fieldName} is empty`,\n `!_.isEmpty(record['${fieldName}'])`,\n ),\n\n fieldBetween: (fieldName, min, max) => getNewRecordValidationRule(\n [fieldName],\n `${fieldName} must be between ${min.toString()} and ${max.toString()}`,\n `record['${fieldName}'] >= ${getStaticValue(min)} && record['${fieldName}'] <= ${getStaticValue(max)} `,\n ),\n\n fieldGreaterThan: (fieldName, min, max) => getNewRecordValidationRule(\n [fieldName],\n `${fieldName} must be greater than ${min.toString()} and ${max.toString()}`,\n `record['${fieldName}'] >= ${getStaticValue(min)} `,\n ),\n});\n\nconst addRecordValidationRule = recordNode => rule => recordNode.validationRules.push(rule);\n\nconst createTrigger = () => ({\n actionName: '',\n eventName: '',\n // function, has access to event context,\n // returns object that is used as parameter to action\n // only used if triggered by event\n optionsCreator: '',\n // action runs if true,\n // has access to event context\n condition: '',\n});\n\nconst createAction = () => ({\n name: '',\n behaviourSource: '',\n // name of function in actionSource\n behaviourName: '',\n // parameter passed into behaviour.\n // any other parms passed at runtime e.g.\n // by trigger, or manually, will be merged into this\n initialOptions: {},\n});\n\nconst aggregateRules = [\n makerule('name', 'choose a name for the aggregate',\n a => isNonEmptyString(a.name)),\n makerule('aggregatedValue', 'aggregatedValue does not compile',\n a => isEmpty(a.aggregatedValue)\n || executesWithoutException(\n () => compileCode$1(a.aggregatedValue),\n )),\n];\n\nconst validateAggregate = aggregate => applyRuleSet(aggregateRules)(aggregate);\n\nconst validateAllAggregates = all => $(all, [\n map(validateAggregate),\n flatten,\n]);\n\nconst ruleSet = (...sets) => constant$1(flatten([...sets]));\n\nconst commonRules = [\n makerule('name', 'node name is not set',\n node => stringNotEmpty(node.name)),\n makerule('type', 'node type not recognised',\n anyTrue(isRecord, isRoot, isIndex, isaggregateGroup)),\n];\n\nconst recordRules = [\n makerule('fields', 'no fields have been added to the record',\n node => isNonEmptyArray(node.fields)),\n makerule('validationRules', \"validation rule is missing a 'messageWhenValid' member\",\n node => every(r => has(r, 'messageWhenInvalid'))(node.validationRules)),\n makerule('validationRules', \"validation rule is missing a 'expressionWhenValid' member\",\n node => every(r => has(r, 'expressionWhenValid'))(node.validationRules)),\n];\n\n\nconst aggregateGroupRules = [\n makerule('condition', 'condition does not compile',\n a => isEmpty$1(a.condition)\n || executesWithoutException(\n () => compileExpression$1(a.condition),\n )),\n];\n\nconst getRuleSet = node => switchCase(\n\n [isRecord, ruleSet(\n commonRules,\n recordRules,\n )],\n\n [isIndex, ruleSet(\n commonRules,\n indexRuleSet,\n )],\n\n [isaggregateGroup, ruleSet(\n commonRules,\n aggregateGroupRules,\n )],\n\n [defaultCase, ruleSet(commonRules, [])],\n)(node);\n\nconst validateNode = node => applyRuleSet(getRuleSet(node))(node);\n\nconst validateAll = (appHierarchy) => {\n const flattened = getFlattenedHierarchy(\n appHierarchy,\n );\n\n const duplicateNameRule = makerule(\n 'name', 'node names must be unique under shared parent',\n n => filter(f => f.parent() === n.parent()\n && f.name === n.name)(flattened).length === 1,\n );\n\n const duplicateNodeKeyErrors = $(flattened, [\n map(n => applyRuleSet([duplicateNameRule])(n)),\n filter(isSomething),\n flatten,\n ]);\n\n const fieldErrors = $(flattened, [\n filter(isRecord),\n map(validateAllFields),\n flatten,\n ]);\n\n const aggregateErrors = $(flattened, [\n filter(isaggregateGroup),\n map(s => validateAllAggregates(\n s.aggregates,\n )),\n flatten,\n ]);\n\n return $(flattened, [\n map(validateNode),\n flatten,\n union(duplicateNodeKeyErrors),\n union(fieldErrors),\n union(aggregateErrors),\n ]);\n};\n\nconst actionRules = [\n makerule('name', 'action must have a name',\n a => isNonEmptyString(a.name)),\n makerule('behaviourName', 'must supply a behaviour name to the action',\n a => isNonEmptyString(a.behaviourName)),\n makerule('behaviourSource', 'must supply a behaviour source for the action',\n a => isNonEmptyString(a.behaviourSource)),\n];\n\nconst duplicateActionRule = makerule('', 'action name must be unique', () => {});\n\nconst validateAction = action => applyRuleSet(actionRules)(action);\n\n\nconst validateActions = (allActions) => {\n const duplicateActions = $(allActions, [\n filter(a => filter(a2 => a2.name === a.name)(allActions).length > 1),\n map(a => validationError(duplicateActionRule, a)),\n ]);\n\n const errors = $(allActions, [\n map(validateAction),\n flatten,\n union(duplicateActions),\n uniqBy('name'),\n ]);\n\n return errors;\n};\n\nconst triggerRules = actions => ([\n makerule('actionName', 'must specify an action',\n t => isNonEmptyString(t.actionName)),\n makerule('eventName', 'must specify and event',\n t => isNonEmptyString(t.eventName)),\n makerule('actionName', 'specified action not supplied',\n t => !t.actionName\n || some(a => a.name === t.actionName)(actions)),\n makerule('eventName', 'invalid Event Name',\n t => !t.eventName\n || includes$1(t.eventName)(eventsList)),\n makerule('optionsCreator', 'Options Creator does not compile - check your expression',\n (t) => {\n if (!t.optionsCreator) return true;\n try {\n compileCode$1(t.optionsCreator);\n return true;\n } catch (_) { return false; }\n }),\n makerule('condition', 'Trigger condition does not compile - check your expression',\n (t) => {\n if (!t.condition) return true;\n try {\n compileExpression$1(t.condition);\n return true;\n } catch (_) { return false; }\n }),\n]);\n\nconst validateTrigger = (trigger, allActions) => {\n const errors = applyRuleSet(triggerRules(allActions))(trigger);\n\n return errors;\n};\n\nconst validateTriggers = (triggers, allActions) => $(triggers, [\n map(t => validateTrigger(t, allActions)),\n flatten,\n]);\n\nconst getApplicationDefinition = datastore => async () => {\n const exists = await datastore.exists(appDefinitionFile);\n\n if (!exists) throw new Error('Application definition does not exist');\n\n const appDefinition = await datastore.loadJson(appDefinitionFile);\n appDefinition.hierarchy = constructHierarchy(\n appDefinition.hierarchy,\n );\n return appDefinition;\n};\n\nconst saveApplicationHierarchy = app => async hierarchy => apiWrapper(\n app,\n events.templateApi.saveApplicationHierarchy,\n permission.writeTemplates.isAuthorized,\n { hierarchy },\n _saveApplicationHierarchy, app.datastore, hierarchy,\n);\n\n\nconst _saveApplicationHierarchy = async (datastore, hierarchy) => {\n const validationErrors = await validateAll(hierarchy);\n if (validationErrors.length > 0) {\n throw new Error(`Hierarchy is invalid: ${join$1(\n validationErrors.map(e => `${e.item.nodeKey ? e.item.nodeKey() : ''} : ${e.error}`),\n ',',\n )}`);\n }\n\n if (await datastore.exists(appDefinitionFile)) {\n const appDefinition = await datastore.loadJson(appDefinitionFile);\n appDefinition.hierarchy = hierarchy;\n await datastore.updateJson(appDefinitionFile, appDefinition);\n } else {\n await datastore.createFolder('/.config');\n const appDefinition = { actions: [], triggers: [], hierarchy };\n await datastore.createJson(appDefinitionFile, appDefinition);\n }\n};\n\nconst saveActionsAndTriggers = app => async (actions, triggers) => apiWrapper(\n app,\n events.templateApi.saveActionsAndTriggers,\n permission.writeTemplates.isAuthorized,\n { actions, triggers },\n _saveActionsAndTriggers, app.datastore, actions, triggers,\n);\n\nconst _saveActionsAndTriggers = async (datastore, actions, triggers) => {\n if (await datastore.exists(appDefinitionFile)) {\n const appDefinition = await datastore.loadJson(appDefinitionFile);\n appDefinition.actions = actions;\n appDefinition.triggers = triggers;\n\n const actionValidErrs = map(e => e.error)(validateActions(actions));\n\n if (actionValidErrs.length > 0) {\n throw new BadRequestError(`Actions are invalid: ${join$1(actionValidErrs, ', ')}`);\n }\n\n const triggerValidErrs = map(e => e.error)(validateTriggers(triggers, actions));\n\n if (triggerValidErrs.length > 0) {\n throw new BadRequestError(`Triggers are invalid: ${join$1(triggerValidErrs, ', ')}`);\n }\n\n await datastore.updateJson(appDefinitionFile, appDefinition);\n } else {\n throw new BadRequestError('Cannot save actions: Application definition does not exist');\n }\n};\n\nconst getBehaviourSources = async (datastore) => {\n await datastore.loadFile('/.config/behaviourSources.js');\n};\n\nconst api$1 = app => ({\n\n getApplicationDefinition: getApplicationDefinition(app.datastore),\n saveApplicationHierarchy: saveApplicationHierarchy(app),\n saveActionsAndTriggers: saveActionsAndTriggers(app),\n getBehaviourSources: () => getBehaviourSources(app.datastore),\n getNewRootLevel,\n constructNode,\n getNewIndexTemplate,\n getNewRecordTemplate,\n getNewField,\n validateField,\n addField,\n fieldErrors,\n getNewRecordValidationRule,\n commonRecordValidationRules,\n addRecordValidationRule,\n createAction,\n createTrigger,\n validateActions,\n validateTrigger,\n getNewAggregateGroupTemplate,\n getNewAggregateTemplate,\n constructHierarchy,\n getNewSingleRecordTemplate,\n allTypes: all$1,\n validateNode,\n validateAll,\n validateTriggers,\n});\n\n\nconst getTemplateApi = app => api$1(app);\n\nconst getUsers = app => async () => apiWrapper(\n app,\n events.authApi.getUsers,\n permission.listUsers.isAuthorized,\n {},\n _getUsers, app,\n);\n\nconst _getUsers = async app => $(await app.datastore.loadJson(USERS_LIST_FILE), [\n map(stripUserOfSensitiveStuff),\n]);\n\nconst loadAccessLevels = app => async () => apiWrapper(\n app,\n events.authApi.loadAccessLevels,\n permission.listAccessLevels.isAuthorized,\n {},\n _loadAccessLevels, app,\n);\n\nconst _loadAccessLevels = async app => await app.datastore.loadJson(ACCESS_LEVELS_FILE);\n\nconst dummyHash = '$argon2i$v=19$m=4096,t=3,p=1$UZRo409UYBGjHJS3CV6Uxw$rU84qUqPeORFzKYmYY0ceBLDaPO+JWSH4PfNiKXfIKk';\n\nconst authenticate = app => async (username, password) => apiWrapper(\n app,\n events.authApi.authenticate,\n alwaysAuthorized,\n { username, password },\n _authenticate, app, username, password,\n);\n\nconst _authenticate = async (app, username, password) => {\n if (isNothingOrEmpty(username) || isNothingOrEmpty(password)) { return null; }\n\n const allUsers = await _getUsers(app);\n let user = getUserByName(\n allUsers,\n username,\n );\n\n const notAUser = 'not-a-user';\n // continue with non-user - so time to verify remains consistent\n // with verification of a valid user\n if (!user || !user.enabled) { user = notAUser; }\n\n let userAuth;\n try {\n userAuth = await app.datastore.loadJson(\n userAuthFile(username),\n );\n } catch (_) {\n userAuth = { accessLevels: [], passwordHash: dummyHash };\n }\n\n const permissions = await buildUserPermissions(app, user.accessLevels);\n\n const verified = await app.crypto.verify(\n userAuth.passwordHash,\n password,\n );\n\n if (user === notAUser) { return null; }\n\n return verified\n ? {\n ...user, permissions, temp: false, isUser: true,\n }\n : null;\n};\n\nconst authenticateTemporaryAccess = app => async (tempAccessCode) => {\n if (isNothingOrEmpty(tempAccessCode)) { return null; }\n\n const temp = parseTemporaryCode(tempAccessCode);\n let user = $(await _getUsers(app), [\n find(u => u.temporaryAccessId === temp.id),\n ]);\n\n const notAUser = 'not-a-user';\n if (!user || !user.enabled) { user = notAUser; }\n\n let userAuth;\n try {\n userAuth = await app.datastore.loadJson(\n userAuthFile(user.name),\n );\n } catch (e) {\n userAuth = {\n temporaryAccessHash: dummyHash,\n temporaryAccessExpiryEpoch: (await app.getEpochTime() + 10000),\n };\n }\n\n if (userAuth.temporaryAccessExpiryEpoch < await app.getEpochTime()) { user = notAUser; }\n\n const tempCode = !temp.code ? generate() : temp.code;\n const verified = await app.crypto.verify(\n userAuth.temporaryAccessHash,\n tempCode,\n );\n\n if (user === notAUser) { return null; }\n\n return verified\n ? {\n ...user,\n permissions: [],\n temp: true,\n isUser: true,\n }\n : null;\n};\n\nconst buildUserPermissions = async (app, userAccessLevels) => {\n const allAccessLevels = await _loadAccessLevels(app);\n\n return $(allAccessLevels.levels, [\n filter(l => some(ua => l.name === ua)(userAccessLevels)),\n map(l => l.permissions),\n flatten,\n ]);\n};\n\nconst createTemporaryAccess$1 = app => async userName => apiWrapper(\n app,\n events.authApi.createTemporaryAccess,\n alwaysAuthorized,\n { userName },\n _createTemporaryAccess, app, userName,\n);\n\nconst _createTemporaryAccess = async (app, userName) => {\n const tempCode = await getTemporaryCode(app);\n\n const lock = await getLock(\n app, USERS_LOCK_FILE, 1000, 2,\n );\n\n if (isNolock(lock)) { throw new Error('Unable to create temporary access, could not get lock - try again'); }\n\n try {\n const users = await app.datastore.loadJson(USERS_LIST_FILE);\n\n const user = getUserByName(users, userName);\n user.temporaryAccessId = tempCode.temporaryAccessId;\n\n await app.datastore.updateJson(\n USERS_LIST_FILE,\n users,\n );\n } finally {\n await releaseLock(app, lock);\n }\n\n const userAuth = await app.datastore.loadJson(\n userAuthFile(userName),\n );\n userAuth.temporaryAccessHash = tempCode.temporaryAccessHash;\n\n userAuth.temporaryAccessExpiryEpoch = tempCode.temporaryAccessExpiryEpoch;\n\n await app.datastore.updateJson(\n userAuthFile(userName),\n userAuth,\n );\n\n return tempCode.tempCode;\n};\n\nconst getTemporaryCode = async (app) => {\n const tempCode = generate()\n + generate()\n + generate()\n + generate();\n\n const tempId = generate();\n\n return {\n temporaryAccessHash: await app.crypto.hash(\n tempCode,\n ),\n temporaryAccessExpiryEpoch:\n (await app.getEpochTime()) + tempCodeExpiryLength,\n tempCode: `tmp:${tempId}:${tempCode}`,\n temporaryAccessId: tempId,\n };\n};\n\nconst userRules = allUsers => [\n makerule('name', 'username must be set',\n u => isNonEmptyString(u.name)),\n makerule('accessLevels', 'user must have at least one access level',\n u => u.accessLevels.length > 0),\n makerule('name', 'username must be unique',\n u => filter(u2 => insensitiveEquals(u2.name, u.name))(allUsers).length === 1),\n makerule('accessLevels', 'access levels must only contain stings',\n u => all(isNonEmptyString)(u.accessLevels)),\n];\n\nconst validateUser = () => (allusers, user) => applyRuleSet(userRules(allusers))(user);\n\nconst getNewUser = app => () => apiWrapperSync(\n app,\n events.authApi.getNewUser,\n permission.createUser.isAuthorized,\n {},\n _getNewUser, app,\n);\n\nconst _getNewUser = () => ({\n name: '',\n accessLevels: [],\n enabled: true,\n temporaryAccessId: '',\n});\n\nconst getNewUserAuth = app => () => apiWrapperSync(\n app,\n events.authApi.getNewUserAuth,\n permission.createUser.isAuthorized,\n {},\n _getNewUserAuth, app,\n);\n\nconst _getNewUserAuth = () => ({\n passwordHash: '',\n temporaryAccessHash: '',\n temporaryAccessExpiryEpoch: 0,\n});\n\nconst isValidPassword = app => password => apiWrapperSync(\n app,\n events.authApi.isValidPassword,\n alwaysAuthorized,\n { password },\n _isValidPassword, app, password,\n);\n\nconst _isValidPassword = (app, password) => scorePassword(password).score > 30;\n\nconst changeMyPassword = app => async (currentPw, newpassword) => apiWrapper(\n app,\n events.authApi.changeMyPassword,\n alwaysAuthorized,\n { currentPw, newpassword },\n _changeMyPassword, app, currentPw, newpassword,\n);\n\nconst _changeMyPassword = async (app, currentPw, newpassword) => {\n const existingAuth = await app.datastore.loadJson(\n userAuthFile(app.user.name),\n );\n\n if (isSomething(existingAuth.passwordHash)) {\n const verified = await app.crypto.verify(\n existingAuth.passwordHash,\n currentPw,\n );\n\n if (verified) {\n await await doSet(\n app, existingAuth,\n app.user.name, newpassword,\n );\n return true;\n }\n }\n\n return false;\n};\n\nconst setPasswordFromTemporaryCode = app => async (tempCode, newpassword) => apiWrapper(\n app,\n events.authApi.setPasswordFromTemporaryCode,\n alwaysAuthorized,\n { tempCode, newpassword },\n _setPasswordFromTemporaryCode, app, tempCode, newpassword,\n);\n\n\nconst _setPasswordFromTemporaryCode = async (app, tempCode, newpassword) => {\n const currentTime = await app.getEpochTime();\n\n const temp = parseTemporaryCode(tempCode);\n\n const user = $(await _getUsers(app), [\n find(u => u.temporaryAccessId === temp.id),\n ]);\n\n if (!user) { return false; }\n\n const existingAuth = await app.datastore.loadJson(\n userAuthFile(user.name),\n );\n\n if (isSomething(existingAuth.temporaryAccessHash)\n && existingAuth.temporaryAccessExpiryEpoch > currentTime) {\n const verified = await app.crypto.verify(\n existingAuth.temporaryAccessHash,\n temp.code,\n );\n\n if (verified) {\n await doSet(\n app, existingAuth,\n user.name, newpassword,\n );\n return true;\n }\n }\n\n return false;\n};\n\nconst doSet = async (app, auth, username, newpassword) => {\n auth.temporaryAccessHash = '';\n auth.temporaryAccessExpiryEpoch = 0;\n auth.passwordHash = await app.crypto.hash(\n newpassword,\n );\n await app.datastore.updateJson(\n userAuthFile(username),\n auth,\n );\n};\n\nconst scorePassword = app => password => apiWrapperSync(\n app,\n events.authApi.scorePassword,\n alwaysAuthorized,\n { password },\n _scorePassword, password,\n);\n\nconst _scorePassword = (password) => {\n // from https://stackoverflow.com/questions/948172/password-strength-meter\n // thank you https://stackoverflow.com/users/46617/tm-lv\n\n let score = 0;\n if (!password) { return score; }\n\n // award every unique letter until 5 repetitions\n const letters = new Object();\n for (let i = 0; i < password.length; i++) {\n letters[password[i]] = (letters[password[i]] || 0) + 1;\n score += 5.0 / letters[password[i]];\n }\n\n // bonus points for mixing it up\n const variations = {\n digits: /\\d/.test(password),\n lower: /[a-z]/.test(password),\n upper: /[A-Z]/.test(password),\n nonWords: /\\W/.test(password),\n };\n\n let variationCount = 0;\n for (const check in variations) {\n variationCount += (variations[check] == true) ? 1 : 0;\n }\n score += (variationCount - 1) * 10;\n\n const strengthText = score > 80\n ? 'strong'\n : score > 60\n ? 'good'\n : score >= 30\n ? 'weak'\n : 'very weak';\n\n return {\n score: parseInt(score),\n strengthText,\n };\n};\n\nconst createUser$1 = app => async (user, password = null) => apiWrapper(\n app,\n events.authApi.createUser,\n permission.createUser.isAuthorized,\n { user, password },\n _createUser, app, user, password,\n);\n\nconst _createUser = async (app, user, password = null) => {\n const lock = await getLock(\n app, USERS_LOCK_FILE, 1000, 2,\n );\n\n if (isNolock(lock)) { throw new Error('Unable to create user, could not get lock - try again'); }\n\n const users = await app.datastore.loadJson(USERS_LIST_FILE);\n\n const userErrors = validateUser(app)([...users, user], user);\n if (userErrors.length > 0) { throw new BadRequestError(`User is invalid. ${join$2('; ')(userErrors)}`); }\n\n const { auth, tempCode, temporaryAccessId } = await getAccess(\n app, password,\n );\n user.tempCode = tempCode;\n user.temporaryAccessId = temporaryAccessId;\n\n if (some(u => insensitiveEquals(u.name, user.name))(users)) { \n throw new BadRequestError('User already exists'); \n }\n\n users.push(\n stripUserOfSensitiveStuff(user),\n );\n\n await app.datastore.updateJson(\n USERS_LIST_FILE,\n users,\n );\n\n try {\n await app.datastore.createJson(\n userAuthFile(user.name),\n auth,\n );\n } catch (_) {\n await app.datastore.updateJson(\n userAuthFile(user.name),\n auth,\n );\n }\n\n await releaseLock(app, lock);\n\n return user;\n};\n\nconst getAccess = async (app, password) => {\n const auth = getNewUserAuth(app)();\n\n if (isNonEmptyString(password)) {\n if (isValidPassword(password)) {\n auth.passwordHash = await app.crypto.hash(password);\n auth.temporaryAccessHash = '';\n auth.temporaryAccessId = '';\n auth.temporaryAccessExpiryEpoch = 0;\n return { auth };\n }\n throw new BadRequestError('Password does not meet requirements');\n } else {\n const tempAccess = await getTemporaryCode(app);\n auth.temporaryAccessHash = tempAccess.temporaryAccessHash;\n auth.temporaryAccessExpiryEpoch = tempAccess.temporaryAccessExpiryEpoch;\n auth.passwordHash = '';\n return ({\n auth,\n tempCode: tempAccess.tempCode,\n temporaryAccessId: tempAccess.temporaryAccessId,\n });\n }\n};\n\nconst enableUser = app => async username => apiWrapper(\n app,\n events.authApi.enableUser,\n permission.enableDisableUser.isAuthorized,\n { username },\n _enableUser, app, username,\n);\n\nconst disableUser = app => async username => apiWrapper(\n app,\n events.authApi.disableUser,\n permission.enableDisableUser.isAuthorized,\n { username },\n _disableUser, app, username,\n);\n\nconst _enableUser = async (app, username) => await toggleUser(app, username, true);\n\nconst _disableUser = async (app, username) => await toggleUser(app, username, false);\n\nconst toggleUser = async (app, username, enabled) => {\n const lock = await getLock(app, USERS_LOCK_FILE, 1000, 1, 0);\n\n const actionName = enabled ? 'enable' : 'disable';\n\n if (isNolock(lock)) { throw new Error(`Could not ${actionName} user - cannot get lock`); }\n\n try {\n const users = await app.datastore.loadJson(USERS_LIST_FILE);\n const user = getUserByName(users, username);\n if (!user) { throw new NotFoundError(`Could not find user to ${actionName}`); }\n\n if (user.enabled === !enabled) {\n user.enabled = enabled;\n await app.datastore.updateJson(USERS_LIST_FILE, users);\n }\n } finally {\n releaseLock(app, lock);\n }\n};\n\nconst getNewAccessLevel = () => () => ({\n name: '',\n permissions: [],\n default:false\n});\n\nconst isAllowedType = t => $(permissionTypes, [\n values,\n includes$1(t),\n]);\n\nconst isRecordOrIndexType = t => some(p => p === t)([\n permissionTypes.CREATE_RECORD,\n permissionTypes.UPDATE_RECORD,\n permissionTypes.DELETE_RECORD,\n permissionTypes.READ_RECORD,\n permissionTypes.READ_INDEX,\n permissionTypes.EXECUTE_ACTION,\n]);\n\n\nconst permissionRules = app => ([\n makerule('type', 'type must be one of allowed types',\n p => isAllowedType(p.type)),\n makerule('nodeKey', 'record and index permissions must include a valid nodeKey',\n p => (!isRecordOrIndexType(p.type))\n || isSomething(getNode(app.hierarchy, p.nodeKey))),\n]);\n\nconst applyPermissionRules = app => applyRuleSet(permissionRules(app));\n\nconst accessLevelRules = allLevels => ([\n makerule('name', 'name must be set',\n l => isNonEmptyString(l.name)),\n makerule('name', 'access level names must be unique',\n l => isEmpty$1(l.name)\n || filter(a => insensitiveEquals(l.name, a.name))(allLevels).length === 1),\n]);\n\nconst applyLevelRules = allLevels => applyRuleSet(accessLevelRules(allLevels));\n\nconst validateAccessLevel = app => (allLevels, level) => {\n const errs = $(level.permissions, [\n map(applyPermissionRules(app)),\n flatten,\n concat(\n applyLevelRules(allLevels)(level),\n ),\n ]);\n\n return errs;\n};\n\nconst validateAccessLevels = app => allLevels => apiWrapperSync(\n app,\n events.authApi.validateAccessLevels,\n alwaysAuthorized,\n { allLevels },\n _validateAccessLevels, app, allLevels,\n);\n\nconst _validateAccessLevels = (app, allLevels) => $(allLevels, [\n map(l => validateAccessLevel(app)(allLevels, l)),\n flatten,\n uniqWith((x, y) => x.field === y.field\n && x.item === y.item\n && x.error === y.error),\n]);\n\nconst saveAccessLevels = app => async accessLevels => apiWrapper(\n app,\n events.authApi.saveAccessLevels,\n permission.writeAccessLevels.isAuthorized,\n { accessLevels },\n _saveAccessLevels, app, accessLevels,\n);\n\nconst _saveAccessLevels = async (app, accessLevels) => {\n const validationErrors = validateAccessLevels(app)(accessLevels.levels);\n if (validationErrors.length > 0) {\n const errs = $(validationErrors, [\n map(e => e.error),\n join$2(', '),\n ]);\n throw new Error(\n `Access Levels Invalid: ${errs}`,\n );\n }\n\n const lock = await getLock(\n app, ACCESS_LEVELS_LOCK_FILE, 2000, 2,\n );\n\n if (isNolock(lock)) { throw new Error('Could not get lock to save access levels'); }\n\n try {\n const existing = await app.datastore.loadJson(ACCESS_LEVELS_FILE);\n if (existing.version !== accessLevels.version) { throw new Error('Access levels have already been updated, since you loaded'); }\n\n accessLevels.version++;\n\n app.datastore.updateJson(ACCESS_LEVELS_FILE, accessLevels);\n } finally {\n await releaseLock(app, lock);\n }\n};\n\nconst generateFullPermissions = (app) => {\n const allNodes = getFlattenedHierarchy(app.hierarchy);\n const accessLevel = { permissions: [] };\n\n const recordNodes = $(allNodes, [\n filter(isRecord),\n ]);\n\n for (const n of recordNodes) {\n permission.createRecord.add(n.nodeKey(), accessLevel);\n permission.updateRecord.add(n.nodeKey(), accessLevel);\n permission.deleteRecord.add(n.nodeKey(), accessLevel);\n permission.readRecord.add(n.nodeKey(), accessLevel);\n }\n\n const indexNodes = $(allNodes, [\n filter(isIndex),\n ]);\n\n for (const n of indexNodes) {\n permission.readIndex.add(n.nodeKey(), accessLevel);\n }\n\n for (const a of keys$1(app.actions)) {\n permission.executeAction.add(a, accessLevel);\n }\n\n $(permission, [\n values,\n filter(p => !p.isNode),\n each(p => p.add(accessLevel)),\n ]);\n\n return accessLevel.permissions;\n};\n\nconst setUserAccessLevels$1 = app => async (userName, accessLevels) => apiWrapper(\n app,\n events.authApi.setUserAccessLevels,\n permission.setUserAccessLevels.isAuthorized,\n { userName, accessLevels },\n _setUserAccessLevels, app, userName, accessLevels,\n);\n\nconst _setUserAccessLevels = async (app, username, accessLevels) => {\n const lock = await getLock(app, USERS_LOCK_FILE, 1000, 1, 0);\n\n const actualAccessLevels = $(\n await app.datastore.loadJson(ACCESS_LEVELS_FILE),\n [\n l => l.levels,\n map(l => l.name),\n ],\n );\n\n const missing = difference(accessLevels)(actualAccessLevels);\n if (missing.length > 0) {\n throw new Error(`Invalid access levels supplied: ${join$2(', ', missing)}`);\n }\n\n if (isNolock(lock)) { throw new Error('Could set user access levels cannot get lock'); }\n\n try {\n const users = await app.datastore.loadJson(USERS_LIST_FILE);\n const user = getUserByName(users, username);\n if (!user) { throw new NotFoundError(`Could not find user with ${username}`); }\n\n user.accessLevels = accessLevels;\n await app.datastore.updateJson(USERS_LIST_FILE, users);\n } finally {\n releaseLock(app, lock);\n }\n};\n\nconst getAuthApi = app => ({\n authenticate: authenticate(app),\n authenticateTemporaryAccess: authenticateTemporaryAccess(app),\n createTemporaryAccess: createTemporaryAccess$1(app),\n createUser: createUser$1(app),\n loadAccessLevels: loadAccessLevels(app),\n enableUser: enableUser(app),\n disableUser: disableUser(app),\n getNewAccessLevel: getNewAccessLevel(app),\n getNewUser: getNewUser(app),\n getNewUserAuth: getNewUserAuth(app),\n getUsers: getUsers(app),\n saveAccessLevels: saveAccessLevels(app),\n isAuthorized: isAuthorized(app),\n changeMyPassword: changeMyPassword(app),\n setPasswordFromTemporaryCode: setPasswordFromTemporaryCode(app),\n scorePassword,\n isValidPassword: isValidPassword(app),\n validateUser: validateUser(app),\n validateAccessLevels: validateAccessLevels(app),\n generateFullPermissions: () => generateFullPermissions(app),\n setUserAccessLevels: setUserAccessLevels$1(app),\n});\n\nconst executeAction$1 = app => (actionName, options) => {\n apiWrapperSync(\n app,\n events.actionsApi.execute,\n permission.executeAction.isAuthorized(actionName),\n { actionName, options },\n app.actions[actionName], options,\n );\n};\n\nconst _executeAction = (behaviourSources, action, options) => behaviourSources[action.behaviourSource][action.behaviourName](options);\n\nconst getActionsApi = app => ({\n execute: executeAction$1(app),\n});\n\nconst publish = handlers => async (eventName, context = {}) => {\n if (!has(handlers, eventName)) return;\n\n for (const handler of handlers[eventName]) {\n await handler(eventName, context);\n }\n};\n\nconst subscribe = handlers => (eventName, handler) => {\n if (!has(handlers, eventName)) {\n handlers[eventName] = [];\n }\n handlers[eventName].push(handler);\n};\n\nconst createEventAggregator = () => {\n const handlers = {};\n const eventAggregator = ({\n publish: publish(handlers),\n subscribe: subscribe(handlers),\n });\n return eventAggregator;\n};\n\nconst createJson = originalCreateFile => async (key, obj, retries = 5, delay = 500) => await retry(originalCreateFile, retries, delay, key, JSON.stringify(obj));\n\nconst createNewFile = originalCreateFile => async (path, content, retries = 5, delay = 500) => await retry(originalCreateFile, retries, delay, path, content);\n\nconst loadJson = datastore => async (key, retries = 5, delay = 500) => {\n try {\n return await retry(JSON.parse, retries, delay, await datastore.loadFile(key));\n } catch (err) {\n throw new NotFoundError(err.message);\n }\n};\n\nconst updateJson = datastore => async (key, obj, retries = 5, delay = 500) => {\n try {\n return await retry(datastore.updateFile, retries, delay, key, JSON.stringify(obj));\n } catch (err) {\n throw new NotFoundError(err.message);\n }\n};\n\nconst setupDatastore = (datastore) => {\n const originalCreateFile = datastore.createFile;\n datastore.loadJson = loadJson(datastore);\n datastore.createJson = createJson(originalCreateFile);\n datastore.updateJson = updateJson(datastore);\n datastore.createFile = createNewFile(originalCreateFile);\n if (datastore.createEmptyDb) { delete datastore.createEmptyDb; }\n return datastore;\n};\n\nconst compileCode = code => {\r\n let func; \r\n \r\n try {\r\n func = compileCode$1(code);\r\n } catch(e) {\r\n e.message = `Error compiling code : ${code} : ${e.message}`;\r\n throw e;\r\n }\r\n\r\n return func;\r\n};\r\n\r\nconst compileExpression = code => {\r\n let func; \r\n \r\n try {\r\n func = compileExpression$1(code);\r\n } catch(e) {\r\n e.message = `Error compiling expression : ${code} : ${e.message}`;\r\n throw e;\r\n }\r\n \r\n return func;\r\n};\n\nconst initialiseActions = (subscribe, behaviourSources, actions, triggers, apis) => {\n validateSources(behaviourSources, actions);\n subscribeTriggers(subscribe, behaviourSources, actions, triggers, apis);\n return createActionsCollection(behaviourSources, actions);\n};\n\nconst createActionsCollection = (behaviourSources, actions) => $(actions, [\n reduce((all, a) => {\n all[a.name] = opts => _executeAction(behaviourSources, a, opts);\n return all;\n }, {}),\n]);\n\nconst subscribeTriggers = (subscribe, behaviourSources, actions, triggers, apis) => {\n const createOptions = (optionsCreator, eventContext) => {\n if (!optionsCreator) return {};\n const create = compileCode(optionsCreator);\n return create({ context: eventContext, apis });\n };\n\n const shouldRunTrigger = (trigger, eventContext) => {\n if (!trigger.condition) return true;\n const shouldRun = compileExpression(trigger.condition);\n return shouldRun({ context: eventContext });\n };\n\n for (let trig of triggers) {\n subscribe(trig.eventName, async (ev, ctx) => {\n if (shouldRunTrigger(trig, ctx)) {\n await _executeAction(\n behaviourSources,\n find(a => a.name === trig.actionName)(actions),\n createOptions(trig.optionsCreator, ctx),\n );\n }\n });\n }\n};\n\nconst validateSources = (behaviourSources, actions) => {\n const declaredSources = $(actions, [\n uniqBy(a => a.behaviourSource),\n map(a => a.behaviourSource),\n ]);\n\n const suppliedSources = keys$1(behaviourSources);\n\n const missingSources = difference(\n declaredSources, suppliedSources,\n );\n\n if (missingSources.length > 0) {\n throw new BadRequestError(`Declared behaviour sources are not supplied: ${join$2(', ', missingSources)}`);\n }\n\n const missingBehaviours = $(actions, [\n filter(a => !isFunction$1(behaviourSources[a.behaviourSource][a.behaviourName])),\n map(a => `Action: ${a.name} : ${a.behaviourSource}.${a.behaviourName}`),\n ]);\n\n if (missingBehaviours.length > 0) {\n throw new NotFoundError(`Missing behaviours: could not find behaviour functions: ${join$2(', ', missingBehaviours)}`);\n }\n};\n\nconst retrieve = async (app) => {\n const transactionFiles = await app.datastore.getFolderContents(\n TRANSACTIONS_FOLDER,\n );\n\n let transactions = [];\n\n if (some(isBuildIndexFolder)(transactionFiles)) {\n const buildIndexFolder = find(isBuildIndexFolder)(transactionFiles);\n\n transactions = await retrieveBuildIndexTransactions(\n app,\n joinKey(TRANSACTIONS_FOLDER, buildIndexFolder),\n );\n }\n\n if (transactions.length > 0) return transactions;\n\n return await retrieveStandardTransactions(\n app, transactionFiles,\n );\n};\n\nconst retrieveBuildIndexTransactions = async (app, buildIndexFolder) => {\n const childFolders = await app.datastore.getFolderContents(buildIndexFolder);\n if (childFolders.length === 0) {\n // cleanup\n await app.datastore.deleteFolder(buildIndexFolder);\n return [];\n }\n\n const getTransactionFiles = async (childFolderIndex = 0) => {\n if (childFolderIndex >= childFolders.length) return [];\n\n const childFolderKey = joinKey(buildIndexFolder, childFolders[childFolderIndex]);\n const files = await app.datastore.getFolderContents(\n childFolderKey,\n );\n\n if (files.length === 0) {\n await app.datastore.deleteFolder(childFolderKey);\n return await getTransactionFiles(childFolderIndex + 1);\n }\n\n return { childFolderKey, files };\n };\n\n const transactionFiles = await getTransactionFiles();\n\n if (transactionFiles.files.length === 0) return [];\n\n const transactions = $(transactionFiles.files, [\n map(parseTransactionId),\n ]);\n\n for (const t of transactions) {\n const transactionContent = await app.datastore.loadJson(\n joinKey(\n transactionFiles.childFolderKey,\n t.fullId,\n ),\n );\n t.record = await _load(app, transactionContent.recordKey);\n }\n\n transactions.indexNode = $(buildIndexFolder, [\n getLastPartInKey,\n nodeKeyHashFromBuildFolder,\n getNodeFromNodeKeyHash(app.hierarchy),\n ]);\n\n transactions.folderKey = transactionFiles.childFolderKey;\n\n return transactions;\n};\n\nconst retrieveStandardTransactions = async (app, transactionFiles) => {\n const transactionIds = $(transactionFiles, [\n filter(f => f !== LOCK_FILENAME\n && !isBuildIndexFolder(f)),\n map(parseTransactionId),\n ]);\n\n const transactionIdsByRecord = $(transactionIds, [\n groupBy('recordId'),\n ]);\n\n const dedupedTransactions = [];\n\n const verify = async (t) => {\n if (t.verified === true) return t;\n\n const id = getTransactionId(\n t.recordId,\n t.transactionType,\n t.uniqueId,\n );\n\n const transaction = await app.datastore.loadJson(\n joinKey(TRANSACTIONS_FOLDER, id),\n );\n\n if (isDelete(t)) {\n t.record = transaction.record;\n t.verified = true;\n return t;\n }\n\n const rec = await _load(\n app,\n transaction.recordKey,\n );\n if (rec.transactionId === id) {\n t.record = rec;\n if (transaction.oldRecord) { t.oldRecord = transaction.oldRecord; }\n t.verified = true;\n } else {\n t.verified = false;\n }\n\n return t;\n };\n\n const pickOne = async (trans, forType) => {\n const transForType = filter(forType)(trans);\n if (transForType.length === 1) {\n const t = await verify(transForType[0]);\n return (t.verified === true ? t : null);\n }\n for (let t of transForType) {\n t = await verify(t);\n if (t.verified === true) { return t; }\n }\n\n return null;\n };\n\n for (const recordId in transactionIdsByRecord) {\n const transIdsForRecord = transactionIdsByRecord[recordId];\n if (transIdsForRecord.length === 1) {\n const t = await verify(transIdsForRecord[0]);\n if (t.verified) { dedupedTransactions.push(t); }\n continue;\n }\n if (some(isDelete)(transIdsForRecord)) {\n const t = await verify(find(isDelete)(transIdsForRecord));\n if (t.verified) { dedupedTransactions.push(t); }\n continue;\n }\n if (some(isUpdate)(transIdsForRecord)) {\n const upd = await pickOne(transIdsForRecord, isUpdate);\n if (isSomething(upd) && upd.verified) { dedupedTransactions.push(upd); }\n continue;\n }\n if (some(isCreate)(transIdsForRecord)) {\n const cre = await pickOne(transIdsForRecord, isCreate);\n if (isSomething(cre)) { dedupedTransactions.push(cre); }\n continue;\n }\n }\n\n const duplicates = $(transactionIds, [\n filter(t => none(ddt => ddt.uniqueId === t.uniqueId)(dedupedTransactions)),\n ]);\n\n\n const deletePromises = map(t => app.datastore.deleteFile(\n joinKey(\n TRANSACTIONS_FOLDER,\n getTransactionId(\n t.recordId,\n t.transactionType,\n t.uniqueId,\n ),\n ),\n ))(duplicates);\n\n await Promise.all(deletePromises);\n\n return dedupedTransactions;\n};\n\nconst parseTransactionId = (id) => {\n const splitId = split(idSep)(id);\n return ({\n recordId: splitId[0],\n transactionType: splitId[1],\n uniqueId: splitId[2],\n fullId: id,\n });\n};\n\nconst getRelevantAncestorIndexes = (appHierarchy, record) => {\n const key = record.key;\n const keyParts = splitKey(key);\n const nodeId = getRecordNodeId(key);\n\n const flatHierarchy = orderBy$1(getFlattenedHierarchy(appHierarchy),\n [node => node.pathRegx().length],\n ['desc']);\n\n const makeindexNodeAndKey_ForAncestorIndex = (indexNode, indexKey) => makeIndexNodeAndKey(indexNode, joinKey(indexKey, indexNode.name));\n\n const traverseAncestorIndexesInPath = () => reduce((acc, part) => {\n const currentIndexKey = joinKey(acc.lastIndexKey, part);\n acc.lastIndexKey = currentIndexKey;\n const testPathRegx = p => new RegExp(`${p.pathRegx()}$`).test(currentIndexKey);\n const nodeMatch = find(testPathRegx)(flatHierarchy);\n\n if (isNothing(nodeMatch)) { return acc; }\n\n if (!isRecord(nodeMatch)\n || nodeMatch.indexes.length === 0) { return acc; }\n\n const indexes = $(nodeMatch.indexes, [\n filter(i => i.indexType === indexTypes.ancestor\n && (i.allowedRecordNodeIds.length === 0\n || includes$1(nodeId)(i.allowedRecordNodeIds))),\n ]);\n\n each(v => acc.nodesAndKeys.push(\n makeindexNodeAndKey_ForAncestorIndex(v, currentIndexKey),\n ))(indexes);\n\n return acc;\n }, { lastIndexKey: '', nodesAndKeys: [] })(keyParts).nodesAndKeys;\n\n const rootIndexes = $(flatHierarchy, [\n filter(n => isGlobalIndex(n) && recordNodeIdIsAllowed(n)(nodeId)),\n map(i => makeIndexNodeAndKey(i, i.nodeKey())),\n ]);\n\n return union(traverseAncestorIndexesInPath())(rootIndexes);\n};\n\nconst getRelevantReverseReferenceIndexes = (appHierarchy, record) => $(record.key, [\n getExactNodeForPath(appHierarchy),\n n => n.fields,\n filter(f => f.type === 'reference'\n && isSomething(record[f.name])\n && isNonEmptyString(record[f.name].key)),\n map(f => $(f.typeOptions.reverseIndexNodeKeys, [\n map(n => ({\n recordNode: getNode(appHierarchy, n),\n field: f,\n })),\n ])),\n flatten,\n map(n => makeIndexNodeAndKey(\n n.recordNode,\n joinKey(record[n.field.name].key, n.recordNode.name),\n )),\n]);\n\nconst makeIndexNodeAndKey = (indexNode, indexKey) => ({ indexNode, indexKey });\n\n// adapted from https://github.com/dex4er/js-promise-writable\r\n // Thank you :) \r\n const promiseWriteableStream = stream => {\r\n \r\n let _errored;\r\n \r\n const _errorHandler = err => {\r\n _errored = err;\r\n };\r\n\r\n stream.on(\"error\", _errorHandler); \r\n \r\n const write = chunk => { \r\n let rejected = false;\r\n \r\n return new Promise((resolve, reject) => {\r\n if (_errored) {\r\n const err = _errored;\r\n _errored = undefined;\r\n return reject(err);\r\n }\r\n \r\n if (!stream.writable || stream.closed || stream.destroyed) {\r\n return reject(new Error(\"write after end\"));\r\n }\r\n \r\n const writeErrorHandler = err => {\r\n _errored = undefined;\r\n rejected = true;\r\n reject(err);\r\n };\r\n \r\n stream.once(\"error\", writeErrorHandler);\r\n \r\n const canWrite = stream.write(chunk);\r\n \r\n stream.removeListener(\"error\", writeErrorHandler);\r\n \r\n if (canWrite) {\r\n if (!rejected) {\r\n resolve(chunk.length);\r\n }\r\n } else {\r\n const errorHandler = err => {\r\n _errored = undefined;\r\n removeListeners();\r\n reject(err);\r\n };\r\n \r\n const drainHandler = () => {\r\n removeListeners();\r\n resolve(chunk.length);\r\n };\r\n \r\n const closeHandler = () => {\r\n removeListeners();\r\n resolve(chunk.length);\r\n };\r\n \r\n const finishHandler = () => {\r\n removeListeners();\r\n resolve(chunk.length);\r\n };\r\n \r\n const removeListeners = () => {\r\n stream.removeListener(\"close\", closeHandler);\r\n stream.removeListener(\"drain\", drainHandler);\r\n stream.removeListener(\"error\", errorHandler);\r\n stream.removeListener(\"finish\", finishHandler);\r\n };\r\n \r\n stream.on(\"close\", closeHandler);\r\n stream.on(\"drain\", drainHandler);\r\n stream.on(\"error\", errorHandler);\r\n stream.on(\"finish\", finishHandler);\r\n }\r\n })\r\n };\r\n \r\n const end = () => {\r\n \r\n return new Promise((resolve, reject) => {\r\n if (_errored) {\r\n const err = _errored;\r\n _errored = undefined;\r\n return reject(err);\r\n }\r\n \r\n if (!stream.writable || stream.closed || stream.destroyed) {\r\n return resolve();\r\n }\r\n \r\n const finishHandler = () => {\r\n removeListeners();\r\n resolve();\r\n };\r\n \r\n const errorHandler = (err) => {\r\n _errored = undefined;\r\n removeListeners();\r\n reject(err);\r\n };\r\n \r\n const removeListeners = () => {\r\n stream.removeListener(\"error\", errorHandler);\r\n stream.removeListener(\"finish\", finishHandler);\r\n };\r\n \r\n stream.on(\"finish\", finishHandler);\r\n stream.on(\"error\", errorHandler);\r\n \r\n stream.end();\r\n })\r\n };\r\n\r\n return {write, end};\r\n };\n\nconst applyToShard = async (hierarchy, store, indexKey,\n indexNode, indexShardKey, recordsToWrite, keysToRemove) => {\n const createIfNotExists = recordsToWrite.length > 0;\n const writer = await getWriter(hierarchy, store, indexKey, indexShardKey, indexNode, createIfNotExists);\n if (writer === SHARD_DELETED) return;\n\n await writer.updateIndex(recordsToWrite, keysToRemove);\n await swapTempFileIn(store, indexShardKey);\n};\n\nconst SHARD_DELETED = 'SHARD_DELETED';\nconst getWriter = async (hierarchy, store, indexKey, indexedDataKey, indexNode, createIfNotExists) => {\n let readableStream = null;\n\n if (isShardedIndex(indexNode)) {\n await ensureShardNameIsInShardMap(store, indexKey, indexedDataKey);\n if(!await store.exists(indexedDataKey)) {\n await store.createFile(indexedDataKey, \"\");\n }\n }\n\n try {\n\n readableStream = promiseReadableStream(\n await store.readableFileStream(indexedDataKey)\n );\n\n } catch (e) {\n\n if (await store.exists(indexedDataKey)) {\n throw e;\n } else {\n if (createIfNotExists) { \n await store.createFile(indexedDataKey, ''); \n } else { \n return SHARD_DELETED; \n }\n\n readableStream = promiseReadableStream(\n await store.readableFileStream(indexedDataKey)\n );\n\n }\n }\n\n const writableStream = promiseWriteableStream(\n await store.writableFileStream(indexedDataKey + \".temp\")\n );\n\n return getIndexWriter(\n hierarchy, indexNode,\n readableStream, writableStream\n );\n};\n\nconst swapTempFileIn = async (store, indexedDataKey, isRetry = false) => {\n const tempFile = `${indexedDataKey}.temp`;\n try {\n await store.deleteFile(indexedDataKey);\n } catch (e) {\n // ignore failure, incase it has not been created yet\n }\n try {\n await store.renameFile(tempFile, indexedDataKey);\n } catch (e) {\n // retrying in case delete failure was for some other reason\n if (!isRetry) {\n await swapTempFileIn(store, indexedDataKey, true);\n } else {\n throw new Error(\"Failed to swap in index filed: \" + e.message);\n }\n }\n};\n\nconst executeTransactions = app => async (transactions) => {\n const recordsByShard = mappedRecordsByIndexShard(app.hierarchy, transactions);\n\n for (const shard of keys$1(recordsByShard)) {\n await applyToShard(\n app.hierarchy, app.datastore,\n recordsByShard[shard].indexKey,\n recordsByShard[shard].indexNode,\n shard,\n recordsByShard[shard].writes,\n recordsByShard[shard].removes,\n );\n }\n};\n\nconst mappedRecordsByIndexShard = (hierarchy, transactions) => {\n const updates = getUpdateTransactionsByShard(\n hierarchy, transactions,\n );\n\n const created = getCreateTransactionsByShard(\n hierarchy, transactions,\n );\n const deletes = getDeleteTransactionsByShard(\n hierarchy, transactions,\n );\n\n const indexBuild = getBuildIndexTransactionsByShard(\n hierarchy,\n transactions,\n );\n\n const toRemove = [\n ...deletes,\n ...updates.toRemove,\n ];\n\n const toWrite = [\n ...created,\n ...updates.toWrite,\n ...indexBuild,\n ];\n\n const transByShard = {};\n\n const initialiseShard = (t) => {\n if (isUndefined(transByShard[t.indexShardKey])) {\n transByShard[t.indexShardKey] = {\n writes: [],\n removes: [],\n indexKey: t.indexKey,\n indexNodeKey: t.indexNodeKey,\n indexNode: t.indexNode,\n };\n }\n };\n\n for (const trans of toWrite) {\n initialiseShard(trans);\n transByShard[trans.indexShardKey].writes.push(\n trans.mappedRecord.result,\n );\n }\n\n for (const trans of toRemove) {\n initialiseShard(trans);\n transByShard[trans.indexShardKey].removes.push(\n trans.mappedRecord.result.key,\n );\n }\n\n return transByShard;\n};\n\nconst getUpdateTransactionsByShard = (hierarchy, transactions) => {\n const updateTransactions = $(transactions, [filter(isUpdate)]);\n\n const evaluateIndex = (record, indexNodeAndPath) => {\n const mappedRecord = evaluate(record)(indexNodeAndPath.indexNode);\n return ({\n mappedRecord,\n indexNode: indexNodeAndPath.indexNode,\n indexKey: indexNodeAndPath.indexKey,\n indexShardKey: getIndexedDataKey(\n indexNodeAndPath.indexNode,\n indexNodeAndPath.indexKey,\n mappedRecord.result,\n ),\n });\n };\n\n const getIndexNodesToApply = indexFilter => (t, indexes) => $(indexes, [\n map(n => ({\n old: evaluateIndex(t.oldRecord, n),\n new: evaluateIndex(t.record, n),\n })),\n filter(indexFilter),\n ]);\n\n const toRemoveFilter = (n, isUnreferenced) => n.old.mappedRecord.passedFilter === true\n && (n.new.mappedRecord.passedFilter === false\n || isUnreferenced);\n\n const toAddFilter = (n, isNewlyReferenced) => (n.old.mappedRecord.passedFilter === false\n || isNewlyReferenced)\n && n.new.mappedRecord.passedFilter === true;\n\n const toUpdateFilter = n => n.new.mappedRecord.passedFilter === true\n && n.old.mappedRecord.passedFilter === true\n && !isEqual(n.old.mappedRecord.result,\n n.new.mappedRecord.result);\n\n const toRemove = [];\n const toWrite = [];\n\n for (const t of updateTransactions) {\n const ancestorIdxs = getRelevantAncestorIndexes(\n hierarchy, t.record,\n );\n\n const referenceChanges = diffReverseRefForUpdate(\n hierarchy, t.oldRecord, t.record,\n );\n\n // old records to remove (filtered out)\n const filteredOut_toRemove = union$1(\n getIndexNodesToApply(toRemoveFilter)(t, ancestorIdxs),\n // still referenced - check filter\n getIndexNodesToApply(toRemoveFilter)(t, referenceChanges.notChanged),\n // un referenced - remove if in there already\n getIndexNodesToApply(n => toRemoveFilter(n, true))(t, referenceChanges.unReferenced),\n );\n\n // new records to add (filtered in)\n const filteredIn_toAdd = union$1(\n getIndexNodesToApply(toAddFilter)(t, ancestorIdxs),\n // newly referenced - check filter\n getIndexNodesToApply(n => toAddFilter(n, true))(t, referenceChanges.newlyReferenced),\n // reference unchanged - rerun filter in case something else changed\n getIndexNodesToApply(toAddFilter)(t, referenceChanges.notChanged),\n );\n\n const changed = union$1(\n getIndexNodesToApply(toUpdateFilter)(t, ancestorIdxs),\n // still referenced - recheck filter\n getIndexNodesToApply(toUpdateFilter)(t, referenceChanges.notChanged),\n );\n\n const shardKeyChanged = $(changed, [\n filter(c => c.old.indexShardKey !== c.new.indexShardKey),\n ]);\n\n const changedInSameShard = $(shardKeyChanged, [\n difference(changed),\n ]);\n\n for (const res of shardKeyChanged) {\n pull(res)(changed);\n filteredOut_toRemove.push(res);\n filteredIn_toAdd.push(res);\n }\n\n toRemove.push(\n $(filteredOut_toRemove, [\n map(i => i.old),\n ]),\n );\n\n toWrite.push(\n $(filteredIn_toAdd, [\n map(i => i.new),\n ]),\n );\n\n toWrite.push(\n $(changedInSameShard, [\n map(i => i.new),\n ]),\n );\n }\n\n return ({\n toRemove: flatten(toRemove),\n toWrite: flatten(toWrite),\n });\n};\n\nconst getBuildIndexTransactionsByShard = (hierarchy, transactions) => {\n const buildTransactions = $(transactions, [filter(isBuildIndex)]);\n if (!isNonEmptyArray(buildTransactions)) return [];\n const indexNode = transactions.indexNode;\n\n const getIndexKeys = (t) => {\n if (isGlobalIndex(indexNode)) {\n return [indexNode.nodeKey()];\n }\n\n if (isReferenceIndex(indexNode)) {\n const recordNode = getExactNodeForPath(hierarchy)(t.record.key);\n const refFields = $(recordNode.fields, [\n filter(fieldReversesReferenceToIndex(indexNode)),\n ]);\n const indexKeys = [];\n for (const refField of refFields) {\n const refValue = t.record[refField.name];\n if (isSomething(refValue)\n && isNonEmptyString(refValue.key)) {\n const indexKey = joinKey(\n refValue.key,\n indexNode.name,\n );\n\n if (!includes$1(indexKey)(indexKeys)) { indexKeys.push(indexKey); }\n }\n }\n return indexKeys;\n }\n\n return [joinKey(\n getActualKeyOfParent(\n indexNode.parent().nodeKey(),\n t.record.key,\n ),\n indexNode.name,\n )];\n };\n\n return $(buildTransactions, [\n map((t) => {\n const mappedRecord = evaluate(t.record)(indexNode);\n if (!mappedRecord.passedFilter) return null;\n const indexKeys = getIndexKeys(t);\n return $(indexKeys, [\n map(indexKey => ({\n mappedRecord,\n indexNode,\n indexKey,\n indexShardKey: getIndexedDataKey(\n indexNode,\n indexKey,\n mappedRecord.result,\n ),\n })),\n ]);\n }),\n flatten,\n filter(isSomething),\n ]);\n};\n\nconst get_Create_Delete_TransactionsByShard = pred => (hierarchy, transactions) => {\n const createTransactions = $(transactions, [filter(pred)]);\n\n const getIndexNodesToApply = (t, indexes) => $(indexes, [\n map((n) => {\n const mappedRecord = evaluate(t.record)(n.indexNode);\n return ({\n mappedRecord,\n indexNode: n.indexNode,\n indexKey: n.indexKey,\n indexShardKey: getIndexedDataKey(\n n.indexNode,\n n.indexKey,\n mappedRecord.result,\n ),\n });\n }),\n filter(n => n.mappedRecord.passedFilter),\n ]);\n\n const allToApply = [];\n\n for (const t of createTransactions) {\n const ancestorIdxs = getRelevantAncestorIndexes(hierarchy, t.record);\n const reverseRef = getRelevantReverseReferenceIndexes(hierarchy, t.record);\n\n allToApply.push(\n getIndexNodesToApply(t, ancestorIdxs),\n );\n allToApply.push(\n getIndexNodesToApply(t, reverseRef),\n );\n }\n\n return flatten(allToApply);\n};\n\nconst getDeleteTransactionsByShard = get_Create_Delete_TransactionsByShard(isDelete);\n\nconst getCreateTransactionsByShard = get_Create_Delete_TransactionsByShard(isCreate);\n\nconst diffReverseRefForUpdate = (appHierarchy, oldRecord, newRecord) => {\n const oldIndexes = getRelevantReverseReferenceIndexes(\n appHierarchy, oldRecord,\n );\n const newIndexes = getRelevantReverseReferenceIndexes(\n appHierarchy, newRecord,\n );\n\n const unReferenced = differenceBy(\n i => i.indexKey,\n oldIndexes, newIndexes,\n );\n\n const newlyReferenced = differenceBy(\n i => i.indexKey,\n newIndexes, oldIndexes,\n );\n\n const notChanged = intersectionBy(\n i => i.indexKey,\n newIndexes, oldIndexes,\n );\n\n return {\n unReferenced,\n newlyReferenced,\n notChanged,\n };\n};\n\nconst cleanup = async (app) => {\n const lock = await getTransactionLock(app);\n if (isNolock(lock)) return;\n\n try {\n const transactions = await retrieve(app);\n if (transactions.length > 0) {\n await executeTransactions(app)(transactions);\n\n const folder = transactions.folderKey\n ? transactions.folderKey\n : TRANSACTIONS_FOLDER;\n\n const deleteFiles = $(transactions, [\n map(t => joinKey(\n folder,\n getTransactionId(\n t.recordId, t.transactionType,\n t.uniqueId,\n ),\n )),\n map(app.datastore.deleteFile),\n ]);\n\n await Promise.all(deleteFiles);\n }\n } finally {\n await releaseLock(app, lock);\n }\n};\n\nconst getTransactionLock = async app => await getLock(\n app, LOCK_FILE_KEY,\n timeoutMilliseconds, maxLockRetries,\n);\n\nconst initialiseData = async (datastore, applicationDefinition, accessLevels) => {\n await datastore.createFolder(configFolder);\n await datastore.createJson(appDefinitionFile, applicationDefinition);\n\n await initialiseRootCollections(datastore, applicationDefinition.hierarchy);\n await initialiseRootIndexes(datastore, applicationDefinition.hierarchy);\n\n await initialiseRootSingleRecords(datastore, applicationDefinition.hierarchy);\n\n await datastore.createFolder(TRANSACTIONS_FOLDER);\n\n await datastore.createFolder(AUTH_FOLDER);\n\n await datastore.createJson(USERS_LIST_FILE, []);\n\n await datastore.createJson(\n ACCESS_LEVELS_FILE, \n accessLevels ? accessLevels : { version: 0, levels: [] });\n};\n\nconst initialiseRootIndexes = async (datastore, hierarchy) => {\n const flathierarchy = getFlattenedHierarchy(hierarchy);\n const globalIndexes = $(flathierarchy, [\n filter(isGlobalIndex),\n ]);\n\n for (const index of globalIndexes) {\n if (!await datastore.exists(index.nodeKey())) { await initialiseIndex(datastore, '', index); }\n }\n};\n\nconst initialiseRootSingleRecords = async (datastore, hierachy) => {\n const flathierarchy = getFlattenedHierarchy(hierachy);\n const singleRecords = $(flathierarchy, [\n filter(isSingleRecord),\n ]);\n\n /* for (let record of singleRecords) {\n const result = getNew({ datastore: datastore, hierarchy: appDefinition.hierarchy })\n (record.nodeKey(),\n record.name\n );\n\n _save({ datastore: datastore, hierarchy: appDefinition.hierarchy },\n result\n );\n } */\n};\n\nconst getDatabaseManager = databaseManager => ({\n createEmptyMasterDb: createEmptyMasterDb(databaseManager),\n createEmptyInstanceDb: createEmptyInstanceDb(databaseManager),\n getInstanceDbRootConfig: databaseManager.getInstanceDbRootConfig,\n masterDatastoreConfig: getMasterDatastoreConfig(databaseManager),\n getInstanceDatastoreConfig: getInstanceDatastoreConfig(databaseManager),\n});\n\nconst getMasterDatastoreConfig = databaseManager => databaseManager.getDatastoreConfig('master');\n\nconst getInstanceDatastoreConfig = databaseManager => (applicationId, instanceId) => databaseManager.getDatastoreConfig(\n applicationId, instanceId,\n);\n\nconst createEmptyMasterDb = databaseManager => async () => await databaseManager.createEmptyDb('master');\n\nconst createEmptyInstanceDb = databaseManager => async (applicationId, instanceId) => {\n if (isNothing(applicationId)) { throw new Error('CreateDb: application id not supplied'); }\n if (isNothing(instanceId)) { throw new Error('CreateDb: instance id not supplied'); }\n\n return await databaseManager.createEmptyDb(\n applicationId,\n instanceId,\n );\n};\n\nconst getAppApis = async (store, behaviourSources = null, \n cleanupTransactions = null, \n getEpochTime = null,\n crypto = null,\n appDefinition = null) => {\n\n store = setupDatastore(store);\n\n if(!appDefinition)\n appDefinition = await getApplicationDefinition(store)();\n\n if(!behaviourSources)\n behaviourSources = await getBehaviourSources(store);\n\n const eventAggregator = createEventAggregator();\n\n const app = {\n datastore:store,\n crypto,\n publish:eventAggregator.publish,\n hierarchy:appDefinition.hierarchy,\n actions:appDefinition.actions\n };\n\n const templateApi = getTemplateApi(app); \n\n app.cleanupTransactions = isSomething(cleanupTransactions) \n ? cleanupTransactions\n : async () => await cleanup(app);\n\n app.getEpochTime = isSomething(getEpochTime)\n ? getEpochTime\n : async () => (new Date()).getTime();\n\n const recordApi = getRecordApi(app);\n const collectionApi = getCollectionApi(app);\n const indexApi = getIndexApi(app);\n const authApi = getAuthApi(app);\n const actionsApi = getActionsApi(app);\n\n const authenticateAs = async (username, password) => {\n app.user = await authApi.authenticate(username, password);\n };\n\n const withFullAccess = () => {\n app.user = {\n name: \"app\",\n permissions : generateFullPermissions(app),\n isUser:false,\n temp:false\n };\n };\n\n const asUser = (user) => {\n app.user = user;\n };\n\n \n\n let apis = {\n recordApi, \n templateApi,\n collectionApi,\n indexApi,\n authApi,\n actionsApi,\n subscribe: eventAggregator.subscribe,\n authenticateAs,\n withFullAccess,\n asUser\n };\n\n apis.actions = initialiseActions(\n eventAggregator.subscribe,\n behaviourSources,\n appDefinition.actions,\n appDefinition.triggers,\n apis);\n\n\n return apis;\n};\n\nexport default getAppApis;\nexport { index as common, events, eventsList, getActionsApi, getAppApis, getAuthApi, getCollectionApi, getDatabaseManager, getIndexApi, getRecordApi, getTemplateApi, hierarchy, initialiseData, setupDatastore };\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVkaWJhc2UtY29yZS5lc20ubWpzIiwic291cmNlcyI6WyIuLi9zcmMvY29tbW9uL2V2ZW50cy5qcyIsIi4uL3NyYy9jb21tb24vZXJyb3JzLmpzIiwiLi4vc3JjL2NvbW1vbi9hcGlXcmFwcGVyLmpzIiwiLi4vc3JjL2NvbW1vbi9sb2NrLmpzIiwiLi4vc3JjL2NvbW1vbi9pbmRleC5qcyIsIi4uL3NyYy9jb21tb24vdmFsaWRhdGlvbkNvbW1vbi5qcyIsIi4uL3NyYy9pbmRleGluZy9ldmFsdWF0ZS5qcyIsIi4uL3NyYy90ZW1wbGF0ZUFwaS9pbmRleGVzLmpzIiwiLi4vc3JjL3RlbXBsYXRlQXBpL2hpZXJhcmNoeS5qcyIsIi4uL3NyYy90eXBlcy90eXBlSGVscGVycy5qcyIsIi4uL3NyYy90eXBlcy9zdHJpbmcuanMiLCIuLi9zcmMvdHlwZXMvYm9vbC5qcyIsIi4uL3NyYy90eXBlcy9udW1iZXIuanMiLCIuLi9zcmMvdHlwZXMvZGF0ZXRpbWUuanMiLCIuLi9zcmMvdHlwZXMvYXJyYXkuanMiLCIuLi9zcmMvdHlwZXMvcmVmZXJlbmNlLmpzIiwiLi4vc3JjL3R5cGVzL2ZpbGUuanMiLCIuLi9zcmMvdHlwZXMvaW5kZXguanMiLCIuLi9zcmMvYXV0aEFwaS9hdXRoQ29tbW9uLmpzIiwiLi4vc3JjL2F1dGhBcGkvaXNBdXRob3JpemVkLmpzIiwiLi4vc3JjL2F1dGhBcGkvcGVybWlzc2lvbnMuanMiLCIuLi9zcmMvcmVjb3JkQXBpL2dldE5ldy5qcyIsIi4uL3NyYy9yZWNvcmRBcGkvbG9hZC5qcyIsIi4uL3NyYy9pbmRleGluZy9wcm9taXNlUmVhZGFibGVTdHJlYW0uanMiLCIuLi9zcmMvaW5kZXhpbmcvc2hhcmRpbmcuanMiLCIuLi9zcmMvaW5kZXhpbmcvaW5kZXhTY2hlbWFDcmVhdG9yLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JvbGx1cC1wbHVnaW4tbm9kZS1nbG9iYWxzL3NyYy9nbG9iYWwuanMiLCIuLi9ub2RlX21vZHVsZXMvYnVmZmVyLWVzNi9iYXNlNjQuanMiLCIuLi9ub2RlX21vZHVsZXMvYnVmZmVyLWVzNi9pZWVlNzU0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL2J1ZmZlci1lczYvaXNBcnJheS5qcyIsIi4uL25vZGVfbW9kdWxlcy9idWZmZXItZXM2L2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3JvbGx1cC1wbHVnaW4tbm9kZS1idWlsdGlucy9zcmMvZXM2L3N0cmluZy1kZWNvZGVyLmpzIiwiLi4vc3JjL2luZGV4aW5nL3NlcmlhbGl6ZXIuanMiLCIuLi9zcmMvaW5kZXhpbmcvcmVhZC5qcyIsIi4uL3NyYy9pbmRleEFwaS9saXN0SXRlbXMuanMiLCIuLi9zcmMvcmVjb3JkQXBpL2dldENvbnRleHQuanMiLCIuLi9zcmMvcmVjb3JkQXBpL3ZhbGlkYXRlLmpzIiwiLi4vc3JjL2NvbGxlY3Rpb25BcGkvaW5pdGlhbGlzZS5qcyIsIi4uL3NyYy9pbmRleGluZy9hbGxJZHMuanMiLCIuLi9zcmMvdHJhbnNhY3Rpb25zL3RyYW5zYWN0aW9uc0NvbW1vbi5qcyIsIi4uL3NyYy90cmFuc2FjdGlvbnMvY3JlYXRlLmpzIiwiLi4vc3JjL2luZGV4aW5nL2luaXRpYWxpc2VJbmRleC5qcyIsIi4uL3NyYy9yZWNvcmRBcGkvc2F2ZS5qcyIsIi4uL3NyYy9jb2xsZWN0aW9uQXBpL2RlbGV0ZS5qcyIsIi4uL3NyYy9pbmRleEFwaS9kZWxldGUuanMiLCIuLi9zcmMvcmVjb3JkQXBpL2RlbGV0ZS5qcyIsIi4uL3NyYy9yZWNvcmRBcGkvdXBsb2FkRmlsZS5qcyIsIi4uL3NyYy9yZWNvcmRBcGkvZG93bmxvYWRGaWxlLmpzIiwiLi4vc3JjL3JlY29yZEFwaS9jdXN0b21JZC5qcyIsIi4uL3NyYy9yZWNvcmRBcGkvaW5kZXguanMiLCIuLi9zcmMvY29sbGVjdGlvbkFwaS9nZXRBbGxvd2VkUmVjb3JkVHlwZXMuanMiLCIuLi9zcmMvY29sbGVjdGlvbkFwaS9pbmRleC5qcyIsIi4uL3NyYy9pbmRleEFwaS9idWlsZEluZGV4LmpzIiwiLi4vc3JjL2luZGV4QXBpL2FnZ3JlZ2F0ZXMuanMiLCIuLi9zcmMvaW5kZXhBcGkvaW5kZXguanMiLCIuLi9zcmMvdGVtcGxhdGVBcGkvY3JlYXRlTm9kZXMuanMiLCIuLi9zcmMvdGVtcGxhdGVBcGkvZmllbGRzLmpzIiwiLi4vc3JjL3RlbXBsYXRlQXBpL3JlY29yZFZhbGlkYXRpb25SdWxlcy5qcyIsIi4uL3NyYy90ZW1wbGF0ZUFwaS9jcmVhdGVBY3Rpb25zLmpzIiwiLi4vc3JjL3RlbXBsYXRlQXBpL3ZhbGlkYXRlQWdncmVnYXRlLmpzIiwiLi4vc3JjL3RlbXBsYXRlQXBpL3ZhbGlkYXRlLmpzIiwiLi4vc3JjL3RlbXBsYXRlQXBpL2dldEFwcGxpY2F0aW9uRGVmaW5pdGlvbi5qcyIsIi4uL3NyYy90ZW1wbGF0ZUFwaS9zYXZlQXBwbGljYXRpb25IaWVyYXJjaHkuanMiLCIuLi9zcmMvdGVtcGxhdGVBcGkvc2F2ZUFjdGlvbnNBbmRUcmlnZ2Vycy5qcyIsIi4uL3NyYy90ZW1wbGF0ZUFwaS9nZXRCZWhhdmlvdXJTb3VyY2VzLmpzIiwiLi4vc3JjL3RlbXBsYXRlQXBpL2luZGV4LmpzIiwiLi4vc3JjL2F1dGhBcGkvZ2V0VXNlcnMuanMiLCIuLi9zcmMvYXV0aEFwaS9sb2FkQWNjZXNzTGV2ZWxzLmpzIiwiLi4vc3JjL2F1dGhBcGkvYXV0aGVudGljYXRlLmpzIiwiLi4vc3JjL2F1dGhBcGkvY3JlYXRlVGVtcG9yYXJ5QWNjZXNzLmpzIiwiLi4vc3JjL2F1dGhBcGkvdmFsaWRhdGVVc2VyLmpzIiwiLi4vc3JjL2F1dGhBcGkvZ2V0TmV3VXNlci5qcyIsIi4uL3NyYy9hdXRoQXBpL3NldFBhc3N3b3JkLmpzIiwiLi4vc3JjL2F1dGhBcGkvY3JlYXRlVXNlci5qcyIsIi4uL3NyYy9hdXRoQXBpL2VuYWJsZVVzZXIuanMiLCIuLi9zcmMvYXV0aEFwaS9nZXROZXdBY2Nlc3NMZXZlbC5qcyIsIi4uL3NyYy9hdXRoQXBpL3ZhbGlkYXRlQWNjZXNzTGV2ZWxzLmpzIiwiLi4vc3JjL2F1dGhBcGkvc2F2ZUFjY2Vzc0xldmVscy5qcyIsIi4uL3NyYy9hdXRoQXBpL2dlbmVyYXRlRnVsbFBlcm1pc3Npb25zLmpzIiwiLi4vc3JjL2F1dGhBcGkvc2V0VXNlckFjY2Vzc0xldmVscy5qcyIsIi4uL3NyYy9hdXRoQXBpL2luZGV4LmpzIiwiLi4vc3JjL2FjdGlvbnNBcGkvZXhlY3V0ZS5qcyIsIi4uL3NyYy9hY3Rpb25zQXBpL2luZGV4LmpzIiwiLi4vc3JjL2FwcEluaXRpYWxpc2UvZXZlbnRBZ2dyZWdhdG9yLmpzIiwiLi4vc3JjL2FwcEluaXRpYWxpc2UvaW5kZXguanMiLCIuLi9zcmMvY29tbW9uL2NvbXBpbGVDb2RlLmpzIiwiLi4vc3JjL2FjdGlvbnNBcGkvaW5pdGlhbGlzZS5qcyIsIi4uL3NyYy90cmFuc2FjdGlvbnMvcmV0cmlldmUuanMiLCIuLi9zcmMvaW5kZXhpbmcvcmVsZXZhbnQuanMiLCIuLi9zcmMvaW5kZXhpbmcvcHJvbWlzZVdyaXRhYmxlU3RyZWFtLmpzIiwiLi4vc3JjL2luZGV4aW5nL2FwcGx5LmpzIiwiLi4vc3JjL3RyYW5zYWN0aW9ucy9leGVjdXRlLmpzIiwiLi4vc3JjL3RyYW5zYWN0aW9ucy9jbGVhbnVwLmpzIiwiLi4vc3JjL2FwcEluaXRpYWxpc2UvaW5pdGlhbGlzZURhdGEuanMiLCIuLi9zcmMvYXBwSW5pdGlhbGlzZS9kYXRhYmFzZU1hbmFnZXIuanMiLCIuLi9zcmMvaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdW5pb24sIHJlZHVjZSB9IGZyb20gJ2xvZGFzaC9mcCc7XG5cbmNvbnN0IGNvbW1vblBsdXMgPSBleHRyYSA9PiB1bmlvbihbJ29uQmVnaW4nLCAnb25Db21wbGV0ZScsICdvbkVycm9yJ10pKGV4dHJhKTtcblxuY29uc3QgY29tbW9uID0gKCkgPT4gY29tbW9uUGx1cyhbXSk7XG5cbmNvbnN0IF9ldmVudHMgPSB7XG4gIHJlY29yZEFwaToge1xuICAgIHNhdmU6IGNvbW1vblBsdXMoW1xuICAgICAgJ29uSW52YWxpZCcsXG4gICAgICAnb25SZWNvcmRVcGRhdGVkJyxcbiAgICAgICdvblJlY29yZENyZWF0ZWQnXSksXG4gICAgZGVsZXRlOiBjb21tb24oKSxcbiAgICBnZXRDb250ZXh0OiBjb21tb24oKSxcbiAgICBnZXROZXc6IGNvbW1vbigpLFxuICAgIGxvYWQ6IGNvbW1vbigpLFxuICAgIHZhbGlkYXRlOiBjb21tb24oKSxcbiAgICB1cGxvYWRGaWxlOiBjb21tb24oKSxcbiAgICBkb3dubG9hZEZpbGU6IGNvbW1vbigpLFxuICB9LFxuICBpbmRleEFwaToge1xuICAgIGJ1aWxkSW5kZXg6IGNvbW1vbigpLFxuICAgIGxpc3RJdGVtczogY29tbW9uKCksXG4gICAgZGVsZXRlOiBjb21tb24oKSxcbiAgICBhZ2dyZWdhdGVzOiBjb21tb24oKSxcbiAgfSxcbiAgY29sbGVjdGlvbkFwaToge1xuICAgIGdldEFsbG93ZWRSZWNvcmRUeXBlczogY29tbW9uKCksXG4gICAgaW5pdGlhbGlzZTogY29tbW9uKCksXG4gICAgZGVsZXRlOiBjb21tb24oKSxcbiAgfSxcbiAgYXV0aEFwaToge1xuICAgIGF1dGhlbnRpY2F0ZTogY29tbW9uKCksXG4gICAgYXV0aGVudGljYXRlVGVtcG9yYXJ5QWNjZXNzOiBjb21tb24oKSxcbiAgICBjcmVhdGVUZW1wb3JhcnlBY2Nlc3M6IGNvbW1vbigpLFxuICAgIGNyZWF0ZVVzZXI6IGNvbW1vbigpLFxuICAgIGVuYWJsZVVzZXI6IGNvbW1vbigpLFxuICAgIGRpc2FibGVVc2VyOiBjb21tb24oKSxcbiAgICBsb2FkQWNjZXNzTGV2ZWxzOiBjb21tb24oKSxcbiAgICBnZXROZXdBY2Nlc3NMZXZlbDogY29tbW9uKCksXG4gICAgZ2V0TmV3VXNlcjogY29tbW9uKCksXG4gICAgZ2V0TmV3VXNlckF1dGg6IGNvbW1vbigpLFxuICAgIGdldFVzZXJzOiBjb21tb24oKSxcbiAgICBzYXZlQWNjZXNzTGV2ZWxzOiBjb21tb24oKSxcbiAgICBpc0F1dGhvcml6ZWQ6IGNvbW1vbigpLFxuICAgIGNoYW5nZU15UGFzc3dvcmQ6IGNvbW1vbigpLFxuICAgIHNldFBhc3N3b3JkRnJvbVRlbXBvcmFyeUNvZGU6IGNvbW1vbigpLFxuICAgIHNjb3JlUGFzc3dvcmQ6IGNvbW1vbigpLFxuICAgIGlzVmFsaWRQYXNzd29yZDogY29tbW9uKCksXG4gICAgdmFsaWRhdGVVc2VyOiBjb21tb24oKSxcbiAgICB2YWxpZGF0ZUFjY2Vzc0xldmVsczogY29tbW9uKCksXG4gICAgc2V0VXNlckFjY2Vzc0xldmVsczogY29tbW9uKCksXG4gIH0sXG4gIHRlbXBsYXRlQXBpOiB7XG4gICAgc2F2ZUFwcGxpY2F0aW9uSGllcmFyY2h5OiBjb21tb24oKSxcbiAgICBzYXZlQWN0aW9uc0FuZFRyaWdnZXJzOiBjb21tb24oKSxcbiAgfSxcbiAgYWN0aW9uc0FwaToge1xuICAgIGV4ZWN1dGU6IGNvbW1vbigpLFxuICB9LFxufTtcblxuY29uc3QgX2V2ZW50c0xpc3QgPSBbXTtcblxuY29uc3QgbWFrZUV2ZW50ID0gKGFyZWEsIG1ldGhvZCwgbmFtZSkgPT4gYCR7YXJlYX06JHttZXRob2R9OiR7bmFtZX1gO1xuXG5mb3IgKGNvbnN0IGFyZWFLZXkgaW4gX2V2ZW50cykge1xuICBmb3IgKGNvbnN0IG1ldGhvZEtleSBpbiBfZXZlbnRzW2FyZWFLZXldKSB7XG4gICAgX2V2ZW50c1thcmVhS2V5XVttZXRob2RLZXldID0gcmVkdWNlKChvYmosIHMpID0+IHtcbiAgICAgIG9ialtzXSA9IG1ha2VFdmVudChhcmVhS2V5LCBtZXRob2RLZXksIHMpO1xuICAgICAgcmV0dXJuIG9iajtcbiAgICB9LFxuICAgIHt9KShfZXZlbnRzW2FyZWFLZXldW21ldGhvZEtleV0pO1xuICB9XG59XG5cblxuZm9yIChjb25zdCBhcmVhS2V5IGluIF9ldmVudHMpIHtcbiAgZm9yIChjb25zdCBtZXRob2RLZXkgaW4gX2V2ZW50c1thcmVhS2V5XSkge1xuICAgIGZvciAoY29uc3QgbmFtZSBpbiBfZXZlbnRzW2FyZWFLZXldW21ldGhvZEtleV0pIHtcbiAgICAgIF9ldmVudHNMaXN0LnB1c2goXG4gICAgICAgIF9ldmVudHNbYXJlYUtleV1bbWV0aG9kS2V5XVtuYW1lXSxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cblxuZXhwb3J0IGNvbnN0IGV2ZW50cyA9IF9ldmVudHM7XG5cbmV4cG9ydCBjb25zdCBldmVudHNMaXN0ID0gX2V2ZW50c0xpc3Q7XG5cbmV4cG9ydCBkZWZhdWx0IHsgZXZlbnRzOiBfZXZlbnRzLCBldmVudHNMaXN0OiBfZXZlbnRzTGlzdCB9O1xuIiwiZXhwb3J0IGNsYXNzIEJhZFJlcXVlc3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmh0dHBTdGF0dXNDb2RlID0gNDAwO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuYXV0aG9yaXNlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuaHR0cFN0YXR1c0NvZGUgPSA0MDE7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgRm9yYmlkZGVuRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gICAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgICAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAgICAgdGhpcy5odHRwU3RhdHVzQ29kZSA9IDQwMztcbiAgICB9XG59XG5cbmV4cG9ydCBjbGFzcyBOb3RGb3VuZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICAgICAgc3VwZXIobWVzc2FnZSk7XG4gICAgICAgIHRoaXMuaHR0cFN0YXR1c0NvZGUgPSA0MDQ7XG4gICAgfVxufVxuXG5leHBvcnQgY2xhc3MgQ29uZmxpY3RFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlKSB7XG4gICAgICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgICAgICB0aGlzLmh0dHBTdGF0dXNDb2RlID0gNDA5O1xuICAgIH1cbn0iLCJpbXBvcnQgeyBjbG9uZURlZXAsIGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSAnc2hvcnRpZCc7XG5pbXBvcnQgeyBVbmF1dGhvcmlzZWRFcnJvciB9IGZyb20gJy4vZXJyb3JzJztcblxuZXhwb3J0IGNvbnN0IGFwaVdyYXBwZXIgPSBhc3luYyAoYXBwLCBldmVudE5hbWVzcGFjZSwgaXNBdXRob3JpemVkLCBldmVudENvbnRleHQsIGZ1bmMsIC4uLnBhcmFtcykgPT4ge1xuICBwdXNoQ2FsbFN0YWNrKGFwcCwgZXZlbnROYW1lc3BhY2UpO1xuXG4gIGlmICghaXNBdXRob3JpemVkKGFwcCkpIHtcbiAgICBoYW5kbGVOb3RBdXRob3JpemVkKGFwcCwgZXZlbnRDb250ZXh0LCBldmVudE5hbWVzcGFjZSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgc3RhcnREYXRlID0gRGF0ZS5ub3coKTtcbiAgY29uc3QgZWxhcHNlZCA9ICgpID0+IChEYXRlLm5vdygpIC0gc3RhcnREYXRlKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC5wdWJsaXNoKFxuICAgICAgZXZlbnROYW1lc3BhY2Uub25CZWdpbixcbiAgICAgIGV2ZW50Q29udGV4dCxcbiAgICApO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZnVuYyguLi5wYXJhbXMpO1xuXG4gICAgYXdhaXQgcHVibGlzaENvbXBsZXRlKGFwcCwgZXZlbnRDb250ZXh0LCBldmVudE5hbWVzcGFjZSwgZWxhcHNlZCwgcmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGF3YWl0IHB1Ymxpc2hFcnJvcihhcHAsIGV2ZW50Q29udGV4dCwgZXZlbnROYW1lc3BhY2UsIGVsYXBzZWQsIGVycm9yKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGFwaVdyYXBwZXJTeW5jID0gKGFwcCwgZXZlbnROYW1lc3BhY2UsIGlzQXV0aG9yaXplZCwgZXZlbnRDb250ZXh0LCBmdW5jLCAuLi5wYXJhbXMpID0+IHtcbiAgcHVzaENhbGxTdGFjayhhcHAsIGV2ZW50TmFtZXNwYWNlKTtcblxuICBpZiAoIWlzQXV0aG9yaXplZChhcHApKSB7XG4gICAgaGFuZGxlTm90QXV0aG9yaXplZChhcHAsIGV2ZW50Q29udGV4dCwgZXZlbnROYW1lc3BhY2UpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHN0YXJ0RGF0ZSA9IERhdGUubm93KCk7XG4gIGNvbnN0IGVsYXBzZWQgPSAoKSA9PiAoRGF0ZS5ub3coKSAtIHN0YXJ0RGF0ZSk7XG5cbiAgdHJ5IHtcbiAgICBhcHAucHVibGlzaChcbiAgICAgIGV2ZW50TmFtZXNwYWNlLm9uQmVnaW4sXG4gICAgICBldmVudENvbnRleHQsXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3VsdCA9IGZ1bmMoLi4ucGFyYW1zKTtcblxuICAgIHB1Ymxpc2hDb21wbGV0ZShhcHAsIGV2ZW50Q29udGV4dCwgZXZlbnROYW1lc3BhY2UsIGVsYXBzZWQsIHJlc3VsdCk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBwdWJsaXNoRXJyb3IoYXBwLCBldmVudENvbnRleHQsIGV2ZW50TmFtZXNwYWNlLCBlbGFwc2VkLCBlcnJvcik7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn07XG5cbmNvbnN0IGhhbmRsZU5vdEF1dGhvcml6ZWQgPSAoYXBwLCBldmVudENvbnRleHQsIGV2ZW50TmFtZXNwYWNlKSA9PiB7XG4gIGNvbnN0IGVyciA9IG5ldyBVbmF1dGhvcmlzZWRFcnJvcihgVW5hdXRob3JpemVkOiAke2V2ZW50TmFtZXNwYWNlfWApO1xuICBwdWJsaXNoRXJyb3IoYXBwLCBldmVudENvbnRleHQsIGV2ZW50TmFtZXNwYWNlLCAoKSA9PiAwLCBlcnIpO1xuICB0aHJvdyBlcnI7XG59O1xuXG5jb25zdCBwdXNoQ2FsbFN0YWNrID0gKGFwcCwgZXZlbnROYW1lc3BhY2UsIHNlZWRDYWxsSWQpID0+IHtcbiAgY29uc3QgY2FsbElkID0gZ2VuZXJhdGUoKTtcblxuICBjb25zdCBjcmVhdGVDYWxsU3RhY2sgPSAoKSA9PiAoe1xuICAgIHNlZWRDYWxsSWQ6ICFpc1VuZGVmaW5lZChzZWVkQ2FsbElkKVxuICAgICAgPyBzZWVkQ2FsbElkXG4gICAgICA6IGNhbGxJZCxcbiAgICB0aHJlYWRDYWxsSWQ6IGNhbGxJZCxcbiAgICBzdGFjazogW10sXG4gIH0pO1xuXG4gIGlmIChpc1VuZGVmaW5lZChhcHAuY2FsbHMpKSB7XG4gICAgYXBwLmNhbGxzID0gY3JlYXRlQ2FsbFN0YWNrKCk7XG4gIH1cblxuICBhcHAuY2FsbHMuc3RhY2sucHVzaCh7XG4gICAgbmFtZXNwYWNlOiBldmVudE5hbWVzcGFjZSxcbiAgICBjYWxsSWQsXG4gIH0pO1xufTtcblxuY29uc3QgcG9wQ2FsbFN0YWNrID0gKGFwcCkgPT4ge1xuICBhcHAuY2FsbHMuc3RhY2sucG9wKCk7XG4gIGlmIChhcHAuY2FsbHMuc3RhY2subGVuZ3RoID09PSAwKSB7XG4gICAgZGVsZXRlIGFwcC5jYWxscztcbiAgfVxufTtcblxuY29uc3QgcHVibGlzaEVycm9yID0gYXN5bmMgKGFwcCwgZXZlbnRDb250ZXh0LCBldmVudE5hbWVzcGFjZSwgZWxhcHNlZCwgZXJyKSA9PiB7XG4gIGNvbnN0IGN0eCA9IGNsb25lRGVlcChldmVudENvbnRleHQpO1xuICBjdHguZXJyb3IgPSBlcnI7XG4gIGN0eC5lbGFwc2VkID0gZWxhcHNlZCgpO1xuICBhd2FpdCBhcHAucHVibGlzaChcbiAgICBldmVudE5hbWVzcGFjZS5vbkVycm9yLFxuICAgIGN0eCxcbiAgKTtcbiAgcG9wQ2FsbFN0YWNrKGFwcCk7XG59O1xuXG5jb25zdCBwdWJsaXNoQ29tcGxldGUgPSBhc3luYyAoYXBwLCBldmVudENvbnRleHQsIGV2ZW50TmFtZXNwYWNlLCBlbGFwc2VkLCByZXN1bHQpID0+IHtcbiAgY29uc3QgZW5kY29udGV4dCA9IGNsb25lRGVlcChldmVudENvbnRleHQpO1xuICBlbmRjb250ZXh0LnJlc3VsdCA9IHJlc3VsdDtcbiAgZW5kY29udGV4dC5lbGFwc2VkID0gZWxhcHNlZCgpO1xuICBhd2FpdCBhcHAucHVibGlzaChcbiAgICBldmVudE5hbWVzcGFjZS5vbkNvbXBsZXRlLFxuICAgIGVuZGNvbnRleHQsXG4gICk7XG4gIHBvcENhbGxTdGFjayhhcHApO1xuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGRlZmF1bHQgYXBpV3JhcHBlcjtcbiIsImltcG9ydCB7IHNwbGl0IH0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7ICQgfSBmcm9tICcuL2luZGV4JztcblxuY29uc3QgbG9ja092ZXJsYXBNaWxsaXNlY29uZHMgPSAxMDtcblxuZXhwb3J0IGNvbnN0IGdldExvY2sgPSBhc3luYyAoYXBwLCBsb2NrRmlsZSwgdGltZW91dE1pbGxpc2Vjb25kcywgbWF4TG9ja1JldHJpZXMsIHJldHJ5Q291bnQgPSAwKSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgdGltZW91dCA9IChhd2FpdCBhcHAuZ2V0RXBvY2hUaW1lKCkpXG4gICAgICAgICAgICArIHRpbWVvdXRNaWxsaXNlY29uZHM7XG5cbiAgICBjb25zdCBsb2NrID0ge1xuICAgICAgdGltZW91dCxcbiAgICAgIGtleTogbG9ja0ZpbGUsXG4gICAgICB0b3RhbFRpbWVvdXQ6IHRpbWVvdXRNaWxsaXNlY29uZHMsXG4gICAgfTtcblxuICAgIGF3YWl0IGFwcC5kYXRhc3RvcmUuY3JlYXRlRmlsZShcbiAgICAgIGxvY2tGaWxlLFxuICAgICAgZ2V0TG9ja0ZpbGVDb250ZW50KFxuICAgICAgICBsb2NrLnRvdGFsVGltZW91dCxcbiAgICAgICAgbG9jay50aW1lb3V0LFxuICAgICAgKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGxvY2s7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBpZiAocmV0cnlDb3VudCA9PSBtYXhMb2NrUmV0cmllcykgeyByZXR1cm4gTk9fTE9DSzsgfVxuXG4gICAgY29uc3QgbG9jayA9IHBhcnNlTG9ja0ZpbGVDb250ZW50KFxuICAgICAgbG9ja0ZpbGUsXG4gICAgICBhd2FpdCBhcHAuZGF0YXN0b3JlLmxvYWRGaWxlKGxvY2tGaWxlKSxcbiAgICApO1xuXG4gICAgY29uc3QgY3VycmVudEVwb2NoVGltZSA9IGF3YWl0IGFwcC5nZXRFcG9jaFRpbWUoKTtcblxuICAgIGlmIChjdXJyZW50RXBvY2hUaW1lIDwgbG9jay50aW1lb3V0KSB7XG4gICAgICByZXR1cm4gTk9fTE9DSztcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgYXBwLmRhdGFzdG9yZS5kZWxldGVGaWxlKGxvY2tGaWxlKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICAvL2VtcHR5XG4gICAgfVxuXG4gICAgYXdhaXQgc2xlZXBGb3JSZXRyeSgpO1xuXG4gICAgcmV0dXJuIGF3YWl0IGdldExvY2soXG4gICAgICBhcHAsIGxvY2tGaWxlLCB0aW1lb3V0TWlsbGlzZWNvbmRzLFxuICAgICAgbWF4TG9ja1JldHJpZXMsIHJldHJ5Q291bnQgKyAxLFxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRMb2NrRmlsZUNvbnRlbnQgPSAodG90YWxUaW1lb3V0LCBlcG9jaFRpbWUpID0+IGAke3RvdGFsVGltZW91dH06JHtlcG9jaFRpbWUudG9TdHJpbmcoKX1gO1xuXG5jb25zdCBwYXJzZUxvY2tGaWxlQ29udGVudCA9IChrZXksIGNvbnRlbnQpID0+ICQoY29udGVudCwgW1xuICBzcGxpdCgnOicpLFxuICBwYXJ0cyA9PiAoe1xuICAgIHRvdGFsVGltZW91dDogbmV3IE51bWJlcihwYXJ0c1swXSksXG4gICAgdGltZW91dDogbmV3IE51bWJlcihwYXJ0c1sxXSksXG4gICAga2V5LFxuICB9KSxcbl0pO1xuXG5leHBvcnQgY29uc3QgcmVsZWFzZUxvY2sgPSBhc3luYyAoYXBwLCBsb2NrKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRFcG9jaFRpbWUgPSBhd2FpdCBhcHAuZ2V0RXBvY2hUaW1lKCk7XG4gIC8vIG9ubHkgcmVsZWFzZSBpZiBub3QgdGltZWRvdXRcbiAgaWYgKGN1cnJlbnRFcG9jaFRpbWUgPCAobG9jay50aW1lb3V0IC0gbG9ja092ZXJsYXBNaWxsaXNlY29uZHMpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGFwcC5kYXRhc3RvcmUuZGVsZXRlRmlsZShsb2NrLmtleSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgLy9lbXB0eVxuICAgIH1cbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGV4dGVuZExvY2sgPSBhc3luYyAoYXBwLCBsb2NrKSA9PiB7XG4gIGNvbnN0IGN1cnJlbnRFcG9jaFRpbWUgPSBhd2FpdCBhcHAuZ2V0RXBvY2hUaW1lKCk7XG4gIC8vIG9ubHkgcmVsZWFzZSBpZiBub3QgdGltZWRvdXRcbiAgaWYgKGN1cnJlbnRFcG9jaFRpbWUgPCAobG9jay50aW1lb3V0IC0gbG9ja092ZXJsYXBNaWxsaXNlY29uZHMpKSB7XG4gICAgdHJ5IHtcbiAgICAgIGxvY2sudGltZW91dCA9IGN1cnJlbnRFcG9jaFRpbWUgKyBsb2NrLnRpbWVvdXRNaWxsaXNlY29uZHM7XG4gICAgICBhd2FpdCBhcHAuZGF0YXN0b3JlLnVwZGF0ZUZpbGUoXG4gICAgICAgIGxvY2sua2V5LFxuICAgICAgICBnZXRMb2NrRmlsZUNvbnRlbnQobG9jay50b3RhbFRpbWVvdXQsIGxvY2sudGltZW91dCksXG4gICAgICApO1xuICAgICAgcmV0dXJuIGxvY2s7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgLy9lbXB0eVxuICAgIH1cbiAgfVxuICByZXR1cm4gTk9fTE9DSztcbn07XG5cbmV4cG9ydCBjb25zdCBOT19MT0NLID0gJ25vIGxvY2snO1xuZXhwb3J0IGNvbnN0IGlzTm9sb2NrID0gaWQgPT4gaWQgPT09IE5PX0xPQ0s7XG5cbmNvbnN0IHNsZWVwRm9yUmV0cnkgPSAoKSA9PiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgbG9ja092ZXJsYXBNaWxsaXNlY29uZHMpKTtcbiIsImltcG9ydCB7XG4gIGlzVW5kZWZpbmVkLCBpc05hTiwgaXNOdWxsLFxuICByZWR1Y2UsIGNvbnN0YW50LCBoZWFkLCBpc0VtcHR5LFxuICB0YWlsLCBmaW5kSW5kZXgsIHN0YXJ0c1dpdGgsIGpvaW4sXG4gIGRyb3BSaWdodCwgZmxvdywgdGFrZVJpZ2h0LCB0cmltLFxuICBzcGxpdCwgaW5jbHVkZXMsIHJlcGxhY2UsIGlzQXJyYXksXG4gIGlzU3RyaW5nLCBpc0ludGVnZXIsIGlzRGF0ZSwgdG9OdW1iZXIsXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBzb21lIH0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7IGV2ZW50cywgZXZlbnRzTGlzdCB9IGZyb20gJy4vZXZlbnRzJztcbmltcG9ydCB7IGFwaVdyYXBwZXIgfSBmcm9tICcuL2FwaVdyYXBwZXInO1xuaW1wb3J0IHtcbiAgZ2V0TG9jaywgTk9fTE9DSyxcbiAgaXNOb2xvY2tcbn0gZnJvbSAnLi9sb2NrJztcblxuLy8gdGhpcyBpcyB0aGUgY29tYmluYXRvciBmdW5jdGlvblxuZXhwb3J0IGNvbnN0ICQkID0gKC4uLmZ1bmNzKSA9PiBhcmcgPT4gZmxvdyhmdW5jcykoYXJnKTtcblxuLy8gdGhpcyBpcyB0aGUgcGlwZSBmdW5jdGlvblxuZXhwb3J0IGNvbnN0ICQgPSAoYXJnLCBmdW5jcykgPT4gJCQoLi4uZnVuY3MpKGFyZyk7XG5cbmV4cG9ydCBjb25zdCBrZXlTZXAgPSAnLyc7XG5jb25zdCB0cmltS2V5U2VwID0gc3RyID0+IHRyaW0oc3RyLCBrZXlTZXApO1xuY29uc3Qgc3BsaXRCeUtleVNlcCA9IHN0ciA9PiBzcGxpdChzdHIsIGtleVNlcCk7XG5leHBvcnQgY29uc3Qgc2FmZUtleSA9IGtleSA9PiByZXBsYWNlKGAke2tleVNlcH0ke3RyaW1LZXlTZXAoa2V5KX1gLCBgJHtrZXlTZXB9JHtrZXlTZXB9YCwga2V5U2VwKTtcbmV4cG9ydCBjb25zdCBqb2luS2V5ID0gKC4uLnN0cnMpID0+IHtcbiAgY29uc3QgcGFyYW1zT3JBcnJheSA9IHN0cnMubGVuZ3RoID09PSAxICYgaXNBcnJheShzdHJzWzBdKVxuICAgID8gc3Ryc1swXSA6IHN0cnM7XG4gIHJldHVybiBzYWZlS2V5KGpvaW4ocGFyYW1zT3JBcnJheSwga2V5U2VwKSk7XG59O1xuZXhwb3J0IGNvbnN0IHNwbGl0S2V5ID0gJCQodHJpbUtleVNlcCwgc3BsaXRCeUtleVNlcCk7XG5leHBvcnQgY29uc3QgZ2V0RGlyRm9tS2V5ID0gJCQoc3BsaXRLZXksIGRyb3BSaWdodCwgcCA9PiBqb2luS2V5KC4uLnApKTtcbmV4cG9ydCBjb25zdCBnZXRGaWxlRnJvbUtleSA9ICQkKHNwbGl0S2V5LCB0YWtlUmlnaHQsIGhlYWQpO1xuXG5leHBvcnQgY29uc3QgY29uZmlnRm9sZGVyID0gYCR7a2V5U2VwfS5jb25maWdgO1xuZXhwb3J0IGNvbnN0IGZpZWxkRGVmaW5pdGlvbnMgPSBqb2luS2V5KGNvbmZpZ0ZvbGRlciwgJ2ZpZWxkcy5qc29uJyk7XG5leHBvcnQgY29uc3QgdGVtcGxhdGVEZWZpbml0aW9ucyA9IGpvaW5LZXkoY29uZmlnRm9sZGVyLCAndGVtcGxhdGVzLmpzb24nKTtcbmV4cG9ydCBjb25zdCBhcHBEZWZpbml0aW9uRmlsZSA9IGpvaW5LZXkoY29uZmlnRm9sZGVyLCAnYXBwRGVmaW5pdGlvbi5qc29uJyk7XG5leHBvcnQgY29uc3QgZGlySW5kZXggPSBmb2xkZXJQYXRoID0+IGpvaW5LZXkoY29uZmlnRm9sZGVyLCAnZGlyJywgLi4uc3BsaXRLZXkoZm9sZGVyUGF0aCksICdkaXIuaWR4Jyk7XG5leHBvcnQgY29uc3QgZ2V0SW5kZXhLZXlGcm9tRmlsZUtleSA9ICQkKGdldERpckZvbUtleSwgZGlySW5kZXgpO1xuXG5leHBvcnQgY29uc3QgaWZFeGlzdHMgPSAodmFsLCBleGlzdHMsIG5vdEV4aXN0cykgPT4gKGlzVW5kZWZpbmVkKHZhbClcbiAgPyBpc1VuZGVmaW5lZChub3RFeGlzdHMpID8gKCgpID0+IHsgfSkoKSA6IG5vdEV4aXN0cygpXG4gIDogZXhpc3RzKCkpO1xuXG5leHBvcnQgY29uc3QgZ2V0T3JEZWZhdWx0ID0gKHZhbCwgZGVmYXVsdFZhbCkgPT4gaWZFeGlzdHModmFsLCAoKSA9PiB2YWwsICgpID0+IGRlZmF1bHRWYWwpO1xuXG5leHBvcnQgY29uc3Qgbm90ID0gZnVuYyA9PiB2YWwgPT4gIWZ1bmModmFsKTtcbmV4cG9ydCBjb25zdCBpc0RlZmluZWQgPSBub3QoaXNVbmRlZmluZWQpO1xuZXhwb3J0IGNvbnN0IGlzTm9uTnVsbCA9IG5vdChpc051bGwpO1xuZXhwb3J0IGNvbnN0IGlzTm90TmFOID0gbm90KGlzTmFOKTtcblxuZXhwb3J0IGNvbnN0IGFsbFRydWUgPSAoLi4uZnVuY0FyZ3MpID0+IHZhbCA9PiByZWR1Y2UoZnVuY0FyZ3MsXG4gIChyZXN1bHQsIGNvbmRpdGlvbkZ1bmMpID0+IChpc051bGwocmVzdWx0KSB8fCByZXN1bHQgPT0gdHJ1ZSkgJiYgY29uZGl0aW9uRnVuYyh2YWwpLFxuICBudWxsKTtcblxuZXhwb3J0IGNvbnN0IGFueVRydWUgPSAoLi4uZnVuY0FyZ3MpID0+IHZhbCA9PiByZWR1Y2UoZnVuY0FyZ3MsXG4gIChyZXN1bHQsIGNvbmRpdGlvbkZ1bmMpID0+IHJlc3VsdCA9PSB0cnVlIHx8IGNvbmRpdGlvbkZ1bmModmFsKSxcbiAgbnVsbCk7XG5cbmV4cG9ydCBjb25zdCBpbnNlbnNpdGl2ZUVxdWFscyA9IChzdHIxLCBzdHIyKSA9PiBzdHIxLnRyaW0oKS50b0xvd2VyQ2FzZSgpID09PSBzdHIyLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG5leHBvcnQgY29uc3QgaXNTb21ldGhpbmcgPSBhbGxUcnVlKGlzRGVmaW5lZCwgaXNOb25OdWxsLCBpc05vdE5hTik7XG5leHBvcnQgY29uc3QgaXNOb3RoaW5nID0gbm90KGlzU29tZXRoaW5nKTtcbmV4cG9ydCBjb25zdCBpc05vdGhpbmdPckVtcHR5ID0gdiA9PiBpc05vdGhpbmcodikgfHwgaXNFbXB0eSh2KTtcbmV4cG9ydCBjb25zdCBzb21ldGhpbmdPckdldERlZmF1bHQgPSBnZXREZWZhdWx0RnVuYyA9PiB2YWwgPT4gKGlzU29tZXRoaW5nKHZhbCkgPyB2YWwgOiBnZXREZWZhdWx0RnVuYygpKTtcbmV4cG9ydCBjb25zdCBzb21ldGhpbmdPckRlZmF1bHQgPSAodmFsLCBkZWZhdWx0VmFsKSA9PiBzb21ldGhpbmdPckdldERlZmF1bHQoY29uc3RhbnQoZGVmYXVsdFZhbCkpKHZhbCk7XG5cbmV4cG9ydCBjb25zdCBtYXBJZlNvbWV0aGluZ09yRGVmYXVsdCA9IChtYXBGdW5jLCBkZWZhdWx0VmFsKSA9PiB2YWwgPT4gKGlzU29tZXRoaW5nKHZhbCkgPyBtYXBGdW5jKHZhbCkgOiBkZWZhdWx0VmFsKTtcblxuZXhwb3J0IGNvbnN0IG1hcElmU29tZXRoaW5nT3JCbGFuayA9IG1hcEZ1bmMgPT4gbWFwSWZTb21ldGhpbmdPckRlZmF1bHQobWFwRnVuYywgJycpO1xuXG5leHBvcnQgY29uc3Qgbm9uZSA9IHByZWRpY2F0ZSA9PiBjb2xsZWN0aW9uID0+ICFzb21lKHByZWRpY2F0ZSkoY29sbGVjdGlvbik7XG5cbmV4cG9ydCBjb25zdCBhbGwgPSBwcmVkaWNhdGUgPT4gY29sbGVjdGlvbiA9PiBub25lKHYgPT4gIXByZWRpY2F0ZSh2KSkoY29sbGVjdGlvbik7XG5cbmV4cG9ydCBjb25zdCBpc05vdEVtcHR5ID0gb2IgPT4gIWlzRW1wdHkob2IpO1xuZXhwb3J0IGNvbnN0IGlzQXN5bmMgPSBmbiA9PiBmbi5jb25zdHJ1Y3Rvci5uYW1lID09PSAnQXN5bmNGdW5jdGlvbic7XG5leHBvcnQgY29uc3QgaXNOb25FbXB0eUFycmF5ID0gYWxsVHJ1ZShpc0FycmF5LCBpc05vdEVtcHR5KTtcbmV4cG9ydCBjb25zdCBpc05vbkVtcHR5U3RyaW5nID0gYWxsVHJ1ZShpc1N0cmluZywgaXNOb3RFbXB0eSk7XG5leHBvcnQgY29uc3QgdHJ5T3IgPSBmYWlsRnVuYyA9PiAoZnVuYywgLi4uYXJncykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBmdW5jLmFwcGx5KG51bGwsIC4uLmFyZ3MpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIGZhaWxGdW5jKCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB0cnlBd2FpdE9yID0gZmFpbEZ1bmMgPT4gYXN5bmMgKGZ1bmMsIC4uLmFyZ3MpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZnVuYy5hcHBseShudWxsLCAuLi5hcmdzKTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBhd2FpdCBmYWlsRnVuYygpO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZGVmaW5lRXJyb3IgPSAoZnVuYywgZXJyb3JQcmVmaXgpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZnVuYygpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnIubWVzc2FnZSA9IGAke2Vycm9yUHJlZml4fSA6ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICB0aHJvdyBlcnI7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB0cnlPcklnbm9yZSA9IHRyeU9yKCgpID0+IHsgfSk7XG5leHBvcnQgY29uc3QgdHJ5QXdhaXRPcklnbm9yZSA9IHRyeUF3YWl0T3IoYXN5bmMgKCkgPT4geyB9KTtcbmV4cG9ydCBjb25zdCBjYXVzZXNFeGNlcHRpb24gPSAoZnVuYykgPT4ge1xuICB0cnkge1xuICAgIGZ1bmMoKTtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGV4ZWN1dGVzV2l0aG91dEV4Y2VwdGlvbiA9IGZ1bmMgPT4gIWNhdXNlc0V4Y2VwdGlvbihmdW5jKTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZUVycm9yV2l0aCA9IHJldHVyblZhbEluRXJyb3IgPT4gdHJ5T3IoY29uc3RhbnQocmV0dXJuVmFsSW5FcnJvcikpO1xuXG5leHBvcnQgY29uc3QgaGFuZGxlRXJyb3JXaXRoVW5kZWZpbmVkID0gaGFuZGxlRXJyb3JXaXRoKHVuZGVmaW5lZCk7XG5cbmV4cG9ydCBjb25zdCBzd2l0Y2hDYXNlID0gKC4uLmNhc2VzKSA9PiAodmFsdWUpID0+IHtcbiAgY29uc3QgbmV4dENhc2UgPSAoKSA9PiBoZWFkKGNhc2VzKVswXSh2YWx1ZSk7XG4gIGNvbnN0IG5leHRSZXN1bHQgPSAoKSA9PiBoZWFkKGNhc2VzKVsxXSh2YWx1ZSk7XG5cbiAgaWYgKGlzRW1wdHkoY2FzZXMpKSByZXR1cm47IC8vIHVuZGVmaW5lZFxuICBpZiAobmV4dENhc2UoKSA9PT0gdHJ1ZSkgcmV0dXJuIG5leHRSZXN1bHQoKTtcbiAgcmV0dXJuIHN3aXRjaENhc2UoLi4udGFpbChjYXNlcykpKHZhbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCBpc1ZhbHVlID0gdmFsMSA9PiB2YWwyID0+ICh2YWwxID09PSB2YWwyKTtcbmV4cG9ydCBjb25zdCBpc09uZU9mID0gKC4uLnZhbHMpID0+IHZhbCA9PiBpbmNsdWRlcyh2YWxzLCB2YWwpO1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRDYXNlID0gY29uc3RhbnQodHJ1ZSk7XG5leHBvcnQgY29uc3QgbWVtYmVyTWF0Y2hlcyA9IChtZW1iZXIsIG1hdGNoKSA9PiBvYmogPT4gbWF0Y2gob2JqW21lbWJlcl0pO1xuXG5cbmV4cG9ydCBjb25zdCBTdGFydHNXaXRoID0gc2VhcmNoRm9yID0+IHNlYXJjaEluID0+IHN0YXJ0c1dpdGgoc2VhcmNoSW4sIHNlYXJjaEZvcik7XG5cbmV4cG9ydCBjb25zdCBjb250YWlucyA9IHZhbCA9PiBhcnJheSA9PiAoZmluZEluZGV4KGFycmF5LCB2ID0+IHYgPT09IHZhbCkgPiAtMSk7XG5cbmV4cG9ydCBjb25zdCBnZXRIYXNoQ29kZSA9IChzKSA9PiB7XG4gIGxldCBoYXNoID0gMDsgbGV0IGk7IGxldCBjaGFyOyBsZXRcbiAgICBsO1xuICBpZiAocy5sZW5ndGggPT0gMCkgcmV0dXJuIGhhc2g7XG4gIGZvciAoaSA9IDAsIGwgPSBzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGNoYXIgPSBzLmNoYXJDb2RlQXQoaSk7XG4gICAgaGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgY2hhcjtcbiAgICBoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuICB9XG5cbiAgLy8gY29udmVydGluZyB0byBzdHJpbmcsIGJ1dCBkb250IHdhbnQgYSBcIi1cIiBwcmVmaXhlZFxuICBpZiAoaGFzaCA8IDApIHsgcmV0dXJuIGBuJHsoaGFzaCAqIC0xKS50b1N0cmluZygpfWA7IH1cbiAgcmV0dXJuIGhhc2gudG9TdHJpbmcoKTtcbn07XG5cbi8vIHRoYW5rcyB0byBodHRwczovL2Jsb2cuZ3Jvc3NtYW4uaW8vaG93LXRvLXdyaXRlLWFzeW5jLWF3YWl0LXdpdGhvdXQtdHJ5LWNhdGNoLWJsb2Nrcy1pbi1qYXZhc2NyaXB0L1xuZXhwb3J0IGNvbnN0IGF3RXggPSBhc3luYyAocHJvbWlzZSkgPT4ge1xuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHByb21pc2U7XG4gICAgcmV0dXJuIFt1bmRlZmluZWQsIHJlc3VsdF07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFtlcnJvciwgdW5kZWZpbmVkXTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGlzU2FmZUludGVnZXIgPSBuID0+IGlzSW50ZWdlcihuKVxuICAgICYmIG4gPD0gTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVJcbiAgICAmJiBuID49IDAgLSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtcblxuZXhwb3J0IGNvbnN0IHRvRGF0ZU9yTnVsbCA9IHMgPT4gKGlzTnVsbChzKSA/IG51bGxcbiAgOiBpc0RhdGUocykgPyBzIDogbmV3IERhdGUocykpO1xuZXhwb3J0IGNvbnN0IHRvQm9vbE9yTnVsbCA9IHMgPT4gKGlzTnVsbChzKSA/IG51bGxcbiAgOiBzID09PSAndHJ1ZScgfHwgcyA9PT0gdHJ1ZSk7XG5leHBvcnQgY29uc3QgdG9OdW1iZXJPck51bGwgPSBzID0+IChpc051bGwocykgPyBudWxsXG4gIDogdG9OdW1iZXIocykpO1xuXG5leHBvcnQgY29uc3QgaXNBcnJheU9mU3RyaW5nID0gb3B0cyA9PiBpc0FycmF5KG9wdHMpICYmIGFsbChpc1N0cmluZykob3B0cyk7XG5cbmV4cG9ydCBjb25zdCBwYXVzZSA9IGFzeW5jIGR1cmF0aW9uID0+IG5ldyBQcm9taXNlKHJlcyA9PiBzZXRUaW1lb3V0KHJlcywgZHVyYXRpb24pKTtcblxuZXhwb3J0IGNvbnN0IHJldHJ5ID0gYXN5bmMgKGZuLCByZXRyaWVzLCBkZWxheSwgLi4uYXJncykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBmbiguLi5hcmdzKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHJldHJpZXMgPiAxKSB7XG4gICAgICByZXR1cm4gYXdhaXQgcGF1c2UoZGVsYXkpLnRoZW4oYXN5bmMgKCkgPT4gYXdhaXQgcmV0cnkoZm4sIChyZXRyaWVzIC0gMSksIGRlbGF5LCAuLi5hcmdzKSk7XG4gICAgfVxuICAgIHRocm93IGVycjtcbiAgfVxufTtcblxuZXhwb3J0IHsgZXZlbnRzIH0gZnJvbSAnLi9ldmVudHMnO1xuZXhwb3J0IHsgYXBpV3JhcHBlciwgYXBpV3JhcHBlclN5bmMgfSBmcm9tICcuL2FwaVdyYXBwZXInO1xuZXhwb3J0IHtcbiAgZ2V0TG9jaywgTk9fTE9DSywgcmVsZWFzZUxvY2ssXG4gIGV4dGVuZExvY2ssIGlzTm9sb2NrLFxufSBmcm9tICcuL2xvY2snO1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGlmRXhpc3RzLFxuICBnZXRPckRlZmF1bHQsXG4gIGlzRGVmaW5lZCxcbiAgaXNOb25OdWxsLFxuICBpc05vdE5hTixcbiAgYWxsVHJ1ZSxcbiAgaXNTb21ldGhpbmcsXG4gIG1hcElmU29tZXRoaW5nT3JEZWZhdWx0LFxuICBtYXBJZlNvbWV0aGluZ09yQmxhbmssXG4gIGNvbmZpZ0ZvbGRlcixcbiAgZmllbGREZWZpbml0aW9ucyxcbiAgaXNOb3RoaW5nLFxuICBub3QsXG4gIHN3aXRjaENhc2UsXG4gIGRlZmF1bHRDYXNlLFxuICBTdGFydHNXaXRoLFxuICBjb250YWlucyxcbiAgdGVtcGxhdGVEZWZpbml0aW9ucyxcbiAgaGFuZGxlRXJyb3JXaXRoLFxuICBoYW5kbGVFcnJvcldpdGhVbmRlZmluZWQsXG4gIHRyeU9yLFxuICB0cnlPcklnbm9yZSxcbiAgdHJ5QXdhaXRPcixcbiAgdHJ5QXdhaXRPcklnbm9yZSxcbiAgZGlySW5kZXgsXG4gIGtleVNlcCxcbiAgJCxcbiAgJCQsXG4gIGdldERpckZvbUtleSxcbiAgZ2V0RmlsZUZyb21LZXksXG4gIHNwbGl0S2V5LFxuICBzb21ldGhpbmdPckRlZmF1bHQsXG4gIGdldEluZGV4S2V5RnJvbUZpbGVLZXksXG4gIGpvaW5LZXksXG4gIHNvbWV0aGluZ09yR2V0RGVmYXVsdCxcbiAgYXBwRGVmaW5pdGlvbkZpbGUsXG4gIGlzVmFsdWUsXG4gIGFsbCxcbiAgaXNPbmVPZixcbiAgbWVtYmVyTWF0Y2hlcyxcbiAgZGVmaW5lRXJyb3IsXG4gIGFueVRydWUsXG4gIGlzTm9uRW1wdHlBcnJheSxcbiAgY2F1c2VzRXhjZXB0aW9uLFxuICBleGVjdXRlc1dpdGhvdXRFeGNlcHRpb24sXG4gIG5vbmUsXG4gIGdldEhhc2hDb2RlLFxuICBhd0V4LFxuICBhcGlXcmFwcGVyLFxuICBldmVudHMsXG4gIGV2ZW50c0xpc3QsXG4gIGlzTm90aGluZ09yRW1wdHksXG4gIGlzU2FmZUludGVnZXIsXG4gIHRvTnVtYmVyLFxuICB0b0RhdGU6IHRvRGF0ZU9yTnVsbCxcbiAgdG9Cb29sOiB0b0Jvb2xPck51bGwsXG4gIGlzQXJyYXlPZlN0cmluZyxcbiAgZ2V0TG9jayxcbiAgTk9fTE9DSyxcbiAgaXNOb2xvY2ssXG4gIGluc2Vuc2l0aXZlRXF1YWxzLFxuICBwYXVzZSxcbiAgcmV0cnksXG59O1xuIiwiaW1wb3J0IHsgZmlsdGVyLCBtYXAgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgJCwgaXNTb21ldGhpbmcgfSBmcm9tICcuL2luZGV4JztcblxuZXhwb3J0IGNvbnN0IHN0cmluZ05vdEVtcHR5ID0gcyA9PiBpc1NvbWV0aGluZyhzKSAmJiBzLnRyaW0oKS5sZW5ndGggPiAwO1xuXG5leHBvcnQgY29uc3QgbWFrZXJ1bGUgPSAoZmllbGQsIGVycm9yLCBpc1ZhbGlkKSA9PiAoeyBmaWVsZCwgZXJyb3IsIGlzVmFsaWQgfSk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0aW9uRXJyb3IgPSAocnVsZSwgaXRlbSkgPT4gKHsgLi4ucnVsZSwgaXRlbSB9KTtcblxuZXhwb3J0IGNvbnN0IGFwcGx5UnVsZVNldCA9IHJ1bGVTZXQgPT4gaXRlbVRvVmFsaWRhdGUgPT4gJChydWxlU2V0LCBbXG4gIG1hcChhcHBseVJ1bGUoaXRlbVRvVmFsaWRhdGUpKSxcbiAgZmlsdGVyKGlzU29tZXRoaW5nKSxcbl0pO1xuXG5leHBvcnQgY29uc3QgYXBwbHlSdWxlID0gaXRlbVRvdmFsaWRhdGUgPT4gcnVsZSA9PiAocnVsZS5pc1ZhbGlkKGl0ZW1Ub3ZhbGlkYXRlKVxuICA/IG51bGxcbiAgOiB2YWxpZGF0aW9uRXJyb3IocnVsZSwgaXRlbVRvdmFsaWRhdGUpKTtcbiIsImltcG9ydCB7IGNvbXBpbGVFeHByZXNzaW9uLCBjb21waWxlQ29kZSB9IGZyb20gJ0BueC1qcy9jb21waWxlci11dGlsJztcbmltcG9ydCB7XG4gIGlzVW5kZWZpbmVkLCBrZXlzLCBcbiAgY2xvbmVEZWVwLCBpc0Z1bmN0aW9uLFxufSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgZGVmaW5lRXJyb3IgfSBmcm9tICcuLi9jb21tb24nO1xuXG5leHBvcnQgY29uc3QgZmlsdGVyRXZhbCA9ICdGSUxURVJfRVZBTFVBVEUnO1xuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBpbGUgPSAnRklMVEVSX0NPTVBJTEUnO1xuZXhwb3J0IGNvbnN0IG1hcEV2YWwgPSAnTUFQX0VWQUxVQVRFJztcbmV4cG9ydCBjb25zdCBtYXBDb21waWxlID0gJ01BUF9DT01QSUxFJztcbmV4cG9ydCBjb25zdCByZW1vdmVVbmRlY2xhcmVkRmllbGRzID0gJ1JFTU9WRV9VTkRFQ0xBUkVEX0ZJRUxEUyc7XG5leHBvcnQgY29uc3QgYWRkVW5NYXBwZWRGaWVsZHMgPSAnQUREX1VOTUFQUEVEX0ZJRUxEUyc7XG5leHBvcnQgY29uc3QgYWRkVGhlS2V5ID0gJ0FERF9LRVknO1xuXG5cbmNvbnN0IGdldEV2YWx1YXRlUmVzdWx0ID0gKCkgPT4gKHtcbiAgaXNFcnJvcjogZmFsc2UsXG4gIHBhc3NlZEZpbHRlcjogdHJ1ZSxcbiAgcmVzdWx0OiBudWxsLFxufSk7XG5cbmV4cG9ydCBjb25zdCBjb21waWxlRmlsdGVyID0gaW5kZXggPT4gY29tcGlsZUV4cHJlc3Npb24oaW5kZXguZmlsdGVyKTtcblxuZXhwb3J0IGNvbnN0IGNvbXBpbGVNYXAgPSBpbmRleCA9PiBjb21waWxlQ29kZShpbmRleC5tYXApO1xuXG5leHBvcnQgY29uc3QgcGFzc2VzRmlsdGVyID0gKHJlY29yZCwgaW5kZXgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHsgcmVjb3JkIH07XG4gIGlmICghaW5kZXguZmlsdGVyKSByZXR1cm4gdHJ1ZTtcblxuICBjb25zdCBjb21waWxlZEZpbHRlciA9IGRlZmluZUVycm9yKFxuICAgICgpID0+IGNvbXBpbGVGaWx0ZXIoaW5kZXgpLFxuICAgIGZpbHRlckNvbXBpbGUsXG4gICk7XG5cbiAgcmV0dXJuIGRlZmluZUVycm9yKFxuICAgICgpID0+IGNvbXBpbGVkRmlsdGVyKGNvbnRleHQpLFxuICAgIGZpbHRlckV2YWwsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgbWFwUmVjb3JkID0gKHJlY29yZCwgaW5kZXgpID0+IHtcbiAgY29uc3QgcmVjb3JkQ2xvbmUgPSBjbG9uZURlZXAocmVjb3JkKTtcbiAgY29uc3QgY29udGV4dCA9IHsgcmVjb3JkOiByZWNvcmRDbG9uZSB9O1xuXG4gIGNvbnN0IG1hcCA9IGluZGV4Lm1hcCA/IGluZGV4Lm1hcCA6ICdyZXR1cm4gey4uLnJlY29yZH07JztcblxuICBjb25zdCBjb21waWxlZE1hcCA9IGRlZmluZUVycm9yKFxuICAgICgpID0+IGNvbXBpbGVDb2RlKG1hcCksXG4gICAgbWFwQ29tcGlsZSxcbiAgKTtcblxuICBjb25zdCBtYXBwZWQgPSBkZWZpbmVFcnJvcihcbiAgICAoKSA9PiBjb21waWxlZE1hcChjb250ZXh0KSxcbiAgICBtYXBFdmFsLFxuICApO1xuXG4gIGNvbnN0IG1hcHBlZEtleXMgPSBrZXlzKG1hcHBlZCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWFwcGVkS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGtleSA9IG1hcHBlZEtleXNbaV07XG4gICAgbWFwcGVkW2tleV0gPSBpc1VuZGVmaW5lZChtYXBwZWRba2V5XSkgPyBudWxsIDogbWFwcGVkW2tleV07XG4gICAgaWYgKGlzRnVuY3Rpb24obWFwcGVkW2tleV0pKSB7XG4gICAgICBkZWxldGUgbWFwcGVkW2tleV07XG4gICAgfVxuICB9XG5cbiAgbWFwcGVkLmtleSA9IHJlY29yZC5rZXk7XG4gIG1hcHBlZC5zb3J0S2V5ID0gaW5kZXguZ2V0U29ydEtleVxuICAgID8gY29tcGlsZUNvZGUoaW5kZXguZ2V0U29ydEtleSkoY29udGV4dClcbiAgICA6IHJlY29yZC5pZDtcblxuICByZXR1cm4gbWFwcGVkO1xufTtcblxuZXhwb3J0IGNvbnN0IGV2YWx1YXRlID0gcmVjb3JkID0+IChpbmRleCkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBnZXRFdmFsdWF0ZVJlc3VsdCgpO1xuXG4gIHRyeSB7XG4gICAgcmVzdWx0LnBhc3NlZEZpbHRlciA9IHBhc3Nlc0ZpbHRlcihyZWNvcmQsIGluZGV4KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmVzdWx0LmlzRXJyb3IgPSB0cnVlO1xuICAgIHJlc3VsdC5wYXNzZWRGaWx0ZXIgPSBmYWxzZTtcbiAgICByZXN1bHQucmVzdWx0ID0gZXJyLm1lc3NhZ2U7XG4gIH1cblxuICBpZiAoIXJlc3VsdC5wYXNzZWRGaWx0ZXIpIHJldHVybiByZXN1bHQ7XG5cbiAgdHJ5IHtcbiAgICByZXN1bHQucmVzdWx0ID0gbWFwUmVjb3JkKHJlY29yZCwgaW5kZXgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXN1bHQuaXNFcnJvciA9IHRydWU7XG4gICAgcmVzdWx0LnJlc3VsdCA9IGVyci5tZXNzYWdlO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGV2YWx1YXRlO1xuIiwiaW1wb3J0IHtcbiAgbWFwLCBpc0VtcHR5LCBjb3VudEJ5LCBmbGF0dGVuLCBpbmNsdWRlcyxcbn0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7IGpvaW4sIGtleXMgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgYXBwbHlSdWxlU2V0LCBtYWtlcnVsZSB9IGZyb20gJy4uL2NvbW1vbi92YWxpZGF0aW9uQ29tbW9uJztcbmltcG9ydCB7IGNvbXBpbGVGaWx0ZXIsIGNvbXBpbGVNYXAgfSBmcm9tICcuLi9pbmRleGluZy9ldmFsdWF0ZSc7XG5pbXBvcnQgeyBpc05vbkVtcHR5U3RyaW5nLCBleGVjdXRlc1dpdGhvdXRFeGNlcHRpb24sICQgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgaXNSZWNvcmQgfSBmcm9tICcuL2hpZXJhcmNoeSc7XG5cbmV4cG9ydCBjb25zdCBpbmRleFR5cGVzID0geyByZWZlcmVuY2U6ICdyZWZlcmVuY2UnLCBhbmNlc3RvcjogJ2FuY2VzdG9yJyB9O1xuXG5leHBvcnQgY29uc3QgaW5kZXhSdWxlU2V0ID0gW1xuICBtYWtlcnVsZSgnbWFwJywgJ2luZGV4IGhhcyBubyBtYXAgZnVuY3Rpb24nLFxuICAgIGluZGV4ID0+IGlzTm9uRW1wdHlTdHJpbmcoaW5kZXgubWFwKSksXG4gIG1ha2VydWxlKCdtYXAnLCBcImluZGV4J3MgbWFwIGZ1bmN0aW9uIGRvZXMgbm90IGNvbXBpbGVcIixcbiAgICBpbmRleCA9PiAhaXNOb25FbXB0eVN0cmluZyhpbmRleC5tYXApXG4gICAgICAgICAgICAgICAgfHwgZXhlY3V0ZXNXaXRob3V0RXhjZXB0aW9uKCgpID0+IGNvbXBpbGVNYXAoaW5kZXgpKSksXG4gIG1ha2VydWxlKCdmaWx0ZXInLCBcImluZGV4J3MgZmlsdGVyIGZ1bmN0aW9uIGRvZXMgbm90IGNvbXBpbGVcIixcbiAgICBpbmRleCA9PiAhaXNOb25FbXB0eVN0cmluZyhpbmRleC5maWx0ZXIpXG4gICAgICAgICAgICAgICAgfHwgZXhlY3V0ZXNXaXRob3V0RXhjZXB0aW9uKCgpID0+IGNvbXBpbGVGaWx0ZXIoaW5kZXgpKSksXG4gIG1ha2VydWxlKCduYW1lJywgJ211c3QgZGVjbGFyZSBhIG5hbWUgZm9yIGluZGV4JyxcbiAgICBpbmRleCA9PiBpc05vbkVtcHR5U3RyaW5nKGluZGV4Lm5hbWUpKSxcbiAgbWFrZXJ1bGUoJ25hbWUnLCAndGhlcmUgaXMgYSBkdXBsaWNhdGUgbmFtZWQgaW5kZXggb24gdGhpcyBub2RlJyxcbiAgICBpbmRleCA9PiBpc0VtcHR5KGluZGV4Lm5hbWUpXG4gICAgICAgICAgICAgICAgfHwgY291bnRCeSgnbmFtZScpKGluZGV4LnBhcmVudCgpLmluZGV4ZXMpW2luZGV4Lm5hbWVdID09PSAxKSxcbiAgbWFrZXJ1bGUoJ2luZGV4VHlwZScsICdyZWZlcmVuY2UgaW5kZXggbWF5IG9ubHkgZXhpc3Qgb24gYSByZWNvcmQgbm9kZScsXG4gICAgaW5kZXggPT4gaXNSZWNvcmQoaW5kZXgucGFyZW50KCkpXG4gICAgICAgICAgICAgICAgICB8fCBpbmRleC5pbmRleFR5cGUgIT09IGluZGV4VHlwZXMucmVmZXJlbmNlKSxcbiAgbWFrZXJ1bGUoJ2luZGV4VHlwZScsIGBpbmRleCB0eXBlIG11c3QgYmUgb25lIG9mOiAke2pvaW4oJywgJywga2V5cyhpbmRleFR5cGVzKSl9YCxcbiAgICBpbmRleCA9PiBpbmNsdWRlcyhpbmRleC5pbmRleFR5cGUpKGtleXMoaW5kZXhUeXBlcykpKSxcbl07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUluZGV4ID0gKGluZGV4LCBhbGxSZWZlcmVuY2VJbmRleGVzT25Ob2RlKSA9PiBhcHBseVJ1bGVTZXQoaW5kZXhSdWxlU2V0KGFsbFJlZmVyZW5jZUluZGV4ZXNPbk5vZGUpKShpbmRleCk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFsbEluZGV4ZXMgPSBub2RlID0+ICQobm9kZS5pbmRleGVzLCBbXG4gIG1hcChpID0+IHZhbGlkYXRlSW5kZXgoaSwgbm9kZS5pbmRleGVzKSksXG4gIGZsYXR0ZW4sXG5dKTtcbiIsImltcG9ydCB7XG4gIGZpbmQsIGNvbnN0YW50LCBtYXAsIGxhc3QsXG4gIGZpcnN0LCBzcGxpdCwgaW50ZXJzZWN0aW9uLCB0YWtlLFxuICB1bmlvbiwgaW5jbHVkZXMsIGZpbHRlciwgc29tZSxcbn0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7XG4gICQsIHN3aXRjaENhc2UsIGlzTm90aGluZywgaXNTb21ldGhpbmcsXG4gIGRlZmF1bHRDYXNlLCBzcGxpdEtleSwgaXNOb25FbXB0eVN0cmluZyxcbiAgam9pbktleSwgZ2V0SGFzaENvZGUsXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBpbmRleFR5cGVzIH0gZnJvbSAnLi9pbmRleGVzJztcblxuZXhwb3J0IGNvbnN0IGdldEZsYXR0ZW5lZEhpZXJhcmNoeSA9IChhcHBIaWVyYXJjaHksIHVzZUNhY2hlZCA9IHRydWUpID0+IHtcbiAgaWYgKGlzU29tZXRoaW5nKGFwcEhpZXJhcmNoeS5nZXRGbGF0dGVuZWRIaWVyYXJjaHkpICYmIHVzZUNhY2hlZCkgeyByZXR1cm4gYXBwSGllcmFyY2h5LmdldEZsYXR0ZW5lZEhpZXJhcmNoeSgpOyB9XG5cbiAgY29uc3QgZmxhdHRlbkhpZXJhcmNoeSA9IChjdXJyZW50Tm9kZSwgZmxhdHRlbmVkKSA9PiB7XG4gICAgZmxhdHRlbmVkLnB1c2goY3VycmVudE5vZGUpO1xuICAgIGlmICgoIWN1cnJlbnROb2RlLmNoaWxkcmVuXG4gICAgICAgICAgICB8fCBjdXJyZW50Tm9kZS5jaGlsZHJlbi5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAmJiAoIWN1cnJlbnROb2RlLmluZGV4ZXNcbiAgICAgICAgICAgIHx8IGN1cnJlbnROb2RlLmluZGV4ZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgJiYgKCFjdXJyZW50Tm9kZS5hZ2dyZWdhdGVHcm91cHNcbiAgICAgICAgICAgIHx8IGN1cnJlbnROb2RlLmFnZ3JlZ2F0ZUdyb3Vwcy5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm4gZmxhdHRlbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHVuaW9uSWZBbnkgPSBsMiA9PiBsMSA9PiB1bmlvbihsMSkoIWwyID8gW10gOiBsMik7XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9ICQoW10sIFtcbiAgICAgIHVuaW9uSWZBbnkoY3VycmVudE5vZGUuY2hpbGRyZW4pLFxuICAgICAgdW5pb25JZkFueShjdXJyZW50Tm9kZS5pbmRleGVzKSxcbiAgICAgIHVuaW9uSWZBbnkoY3VycmVudE5vZGUuYWdncmVnYXRlR3JvdXBzKSxcbiAgICBdKTtcblxuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcbiAgICAgIGZsYXR0ZW5IaWVyYXJjaHkoY2hpbGQsIGZsYXR0ZW5lZCk7XG4gICAgfVxuICAgIHJldHVybiBmbGF0dGVuZWQ7XG4gIH07XG5cbiAgYXBwSGllcmFyY2h5LmdldEZsYXR0ZW5lZEhpZXJhcmNoeSA9ICgpID0+IGZsYXR0ZW5IaWVyYXJjaHkoYXBwSGllcmFyY2h5LCBbXSk7XG4gIHJldHVybiBhcHBIaWVyYXJjaHkuZ2V0RmxhdHRlbmVkSGllcmFyY2h5KCk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0TGFzdFBhcnRJbktleSA9IGtleSA9PiBsYXN0KHNwbGl0S2V5KGtleSkpO1xuXG5leHBvcnQgY29uc3QgZ2V0Tm9kZXNJblBhdGggPSBhcHBIaWVyYXJjaHkgPT4ga2V5ID0+ICQoYXBwSGllcmFyY2h5LCBbXG4gIGdldEZsYXR0ZW5lZEhpZXJhcmNoeSxcbiAgZmlsdGVyKG4gPT4gbmV3IFJlZ0V4cChgJHtuLnBhdGhSZWd4KCl9YCkudGVzdChrZXkpKSxcbl0pO1xuXG5leHBvcnQgY29uc3QgZ2V0RXhhY3ROb2RlRm9yUGF0aCA9IGFwcEhpZXJhcmNoeSA9PiBrZXkgPT4gJChhcHBIaWVyYXJjaHksIFtcbiAgZ2V0RmxhdHRlbmVkSGllcmFyY2h5LFxuICBmaW5kKG4gPT4gbmV3IFJlZ0V4cChgJHtuLnBhdGhSZWd4KCl9JGApLnRlc3Qoa2V5KSksXG5dKTtcblxuZXhwb3J0IGNvbnN0IGdldE5vZGVGb3JDb2xsZWN0aW9uUGF0aCA9IGFwcEhpZXJhcmNoeSA9PiBjb2xsZWN0aW9uS2V5ID0+ICQoYXBwSGllcmFyY2h5LCBbXG4gIGdldEZsYXR0ZW5lZEhpZXJhcmNoeSxcbiAgZmluZChuID0+IChpc0NvbGxlY3Rpb25SZWNvcmQobilcbiAgICAgICAgICAgICAgICAgICAmJiBuZXcgUmVnRXhwKGAke24uY29sbGVjdGlvblBhdGhSZWd4KCl9JGApLnRlc3QoY29sbGVjdGlvbktleSkpKSxcbl0pO1xuXG5leHBvcnQgY29uc3QgaGFzTWF0Y2hpbmdBbmNlc3RvciA9IGFuY2VzdG9yUHJlZGljYXRlID0+IGRlY2VuZGFudE5vZGUgPT4gc3dpdGNoQ2FzZShcblxuICBbbm9kZSA9PiBpc05vdGhpbmcobm9kZS5wYXJlbnQoKSksXG4gICAgY29uc3RhbnQoZmFsc2UpXSxcblxuICBbbm9kZSA9PiBhbmNlc3RvclByZWRpY2F0ZShub2RlLnBhcmVudCgpKSxcbiAgICBjb25zdGFudCh0cnVlKV0sXG5cbiAgW2RlZmF1bHRDYXNlLFxuICAgIG5vZGUgPT4gaGFzTWF0Y2hpbmdBbmNlc3RvcihhbmNlc3RvclByZWRpY2F0ZSkobm9kZS5wYXJlbnQoKSldLFxuXG4pKGRlY2VuZGFudE5vZGUpO1xuXG5leHBvcnQgY29uc3QgZ2V0Tm9kZSA9IChhcHBIaWVyYXJjaHksIG5vZGVLZXkpID0+ICQoYXBwSGllcmFyY2h5LCBbXG4gIGdldEZsYXR0ZW5lZEhpZXJhcmNoeSxcbiAgZmluZChuID0+IG4ubm9kZUtleSgpID09PSBub2RlS2V5XG4gICAgICAgICAgICAgICAgICB8fCAoaXNDb2xsZWN0aW9uUmVjb3JkKG4pXG4gICAgICAgICAgICAgICAgICAgICAgJiYgbi5jb2xsZWN0aW9uTm9kZUtleSgpID09PSBub2RlS2V5KSksXG5dKTtcblxuZXhwb3J0IGNvbnN0IGdldENvbGxlY3Rpb25Ob2RlID0gKGFwcEhpZXJhcmNoeSwgbm9kZUtleSkgPT4gJChhcHBIaWVyYXJjaHksIFtcbiAgZ2V0RmxhdHRlbmVkSGllcmFyY2h5LFxuICBmaW5kKG4gPT4gKGlzQ29sbGVjdGlvblJlY29yZChuKVxuICAgICAgICAgICAgICAgICAgICAmJiBuLmNvbGxlY3Rpb25Ob2RlS2V5KCkgPT09IG5vZGVLZXkpKSxcbl0pO1xuXG5leHBvcnQgY29uc3QgZ2V0Tm9kZUJ5S2V5T3JOb2RlS2V5ID0gKGFwcEhpZXJhcmNoeSwga2V5T3JOb2RlS2V5KSA9PiB7XG4gIGNvbnN0IG5vZGVCeUtleSA9IGdldEV4YWN0Tm9kZUZvclBhdGgoYXBwSGllcmFyY2h5KShrZXlPck5vZGVLZXkpO1xuICByZXR1cm4gaXNOb3RoaW5nKG5vZGVCeUtleSlcbiAgICA/IGdldE5vZGUoYXBwSGllcmFyY2h5LCBrZXlPck5vZGVLZXkpXG4gICAgOiBub2RlQnlLZXk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Q29sbGVjdGlvbk5vZGVCeUtleU9yTm9kZUtleSA9IChhcHBIaWVyYXJjaHksIGtleU9yTm9kZUtleSkgPT4ge1xuICBjb25zdCBub2RlQnlLZXkgPSBnZXROb2RlRm9yQ29sbGVjdGlvblBhdGgoYXBwSGllcmFyY2h5KShrZXlPck5vZGVLZXkpO1xuICByZXR1cm4gaXNOb3RoaW5nKG5vZGVCeUtleSlcbiAgICA/IGdldENvbGxlY3Rpb25Ob2RlKGFwcEhpZXJhcmNoeSwga2V5T3JOb2RlS2V5KVxuICAgIDogbm9kZUJ5S2V5O1xufTtcblxuZXhwb3J0IGNvbnN0IGlzTm9kZSA9IChhcHBIaWVyYXJjaHksIGtleSkgPT4gaXNTb21ldGhpbmcoZ2V0RXhhY3ROb2RlRm9yUGF0aChhcHBIaWVyYXJjaHkpKGtleSkpO1xuXG5leHBvcnQgY29uc3QgZ2V0QWN0dWFsS2V5T2ZQYXJlbnQgPSAocGFyZW50Tm9kZUtleSwgYWN0dWFsQ2hpbGRLZXkpID0+ICQoYWN0dWFsQ2hpbGRLZXksIFtcbiAgc3BsaXRLZXksXG4gIHRha2Uoc3BsaXRLZXkocGFyZW50Tm9kZUtleSkubGVuZ3RoKSxcbiAga3MgPT4gam9pbktleSguLi5rcyksXG5dKTtcblxuZXhwb3J0IGNvbnN0IGdldFBhcmVudEtleSA9IChrZXkpID0+IHtcbiAgcmV0dXJuICQoa2V5LCBbXG4gICAgc3BsaXRLZXksXG4gICAgdGFrZShzcGxpdEtleShrZXkpLmxlbmd0aCAtIDEpLFxuICAgIGpvaW5LZXksXG4gIF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzS2V5QW5jZXN0b3JPZiA9IGFuY2VzdG9yS2V5ID0+IGRlY2VuZGFudE5vZGUgPT4gaGFzTWF0Y2hpbmdBbmNlc3RvcihwID0+IHAubm9kZUtleSgpID09PSBhbmNlc3RvcktleSkoZGVjZW5kYW50Tm9kZSk7XG5cbmV4cG9ydCBjb25zdCBoYXNOb01hdGNoaW5nQW5jZXN0b3JzID0gcGFyZW50UHJlZGljYXRlID0+IG5vZGUgPT4gIWhhc01hdGNoaW5nQW5jZXN0b3IocGFyZW50UHJlZGljYXRlKShub2RlKTtcblxuZXhwb3J0IGNvbnN0IGZpbmRGaWVsZCA9IChyZWNvcmROb2RlLCBmaWVsZE5hbWUpID0+IGZpbmQoZiA9PiBmLm5hbWUgPT0gZmllbGROYW1lKShyZWNvcmROb2RlLmZpZWxkcyk7XG5cbmV4cG9ydCBjb25zdCBpc0FuY2VzdG9yID0gZGVjZW5kYW50ID0+IGFuY2VzdG9yID0+IGlzS2V5QW5jZXN0b3JPZihhbmNlc3Rvci5ub2RlS2V5KCkpKGRlY2VuZGFudCk7XG5cbmV4cG9ydCBjb25zdCBpc0RlY2VuZGFudCA9IGFuY2VzdG9yID0+IGRlY2VuZGFudCA9PiBpc0FuY2VzdG9yKGRlY2VuZGFudCkoYW5jZXN0b3IpO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjb3JkTm9kZUlkID0gcmVjb3JkS2V5ID0+ICQocmVjb3JkS2V5LCBbXG4gIHNwbGl0S2V5LFxuICBsYXN0LFxuICBnZXRSZWNvcmROb2RlSWRGcm9tSWQsXG5dKTtcblxuZXhwb3J0IGNvbnN0IGdldFJlY29yZE5vZGVJZEZyb21JZCA9IHJlY29yZElkID0+ICQocmVjb3JkSWQsIFtzcGxpdCgnLScpLCBmaXJzdCwgcGFyc2VJbnRdKTtcblxuZXhwb3J0IGNvbnN0IGdldFJlY29yZE5vZGVCeUlkID0gKGhpZXJhcmNoeSwgcmVjb3JkSWQpID0+ICQoaGllcmFyY2h5LCBbXG4gIGdldEZsYXR0ZW5lZEhpZXJhcmNoeSxcbiAgZmluZChuID0+IGlzUmVjb3JkKG4pXG4gICAgICAgICAgICAgICAgICAgICYmIG4ubm9kZUlkID09PSBnZXRSZWNvcmROb2RlSWRGcm9tSWQocmVjb3JkSWQpKSxcbl0pO1xuXG5leHBvcnQgY29uc3QgcmVjb3JkTm9kZUlkSXNBbGxvd2VkID0gaW5kZXhOb2RlID0+IG5vZGVJZCA9PiBpbmRleE5vZGUuYWxsb3dlZFJlY29yZE5vZGVJZHMubGVuZ3RoID09PSAwXG4gICAgfHwgaW5jbHVkZXMobm9kZUlkKShpbmRleE5vZGUuYWxsb3dlZFJlY29yZE5vZGVJZHMpO1xuXG5leHBvcnQgY29uc3QgcmVjb3JkTm9kZUlzQWxsb3dlZCA9IGluZGV4Tm9kZSA9PiByZWNvcmROb2RlID0+IHJlY29yZE5vZGVJZElzQWxsb3dlZChpbmRleE5vZGUpKHJlY29yZE5vZGUubm9kZUlkKTtcblxuZXhwb3J0IGNvbnN0IGdldEFsbG93ZWRSZWNvcmROb2Rlc0ZvckluZGV4ID0gKGFwcEhpZXJhcmNoeSwgaW5kZXhOb2RlKSA9PiB7XG4gIGNvbnN0IHJlY29yZE5vZGVzID0gJChhcHBIaWVyYXJjaHksIFtcbiAgICBnZXRGbGF0dGVuZWRIaWVyYXJjaHksXG4gICAgZmlsdGVyKGlzUmVjb3JkKSxcbiAgXSk7XG5cbiAgaWYgKGlzR2xvYmFsSW5kZXgoaW5kZXhOb2RlKSkge1xuICAgIHJldHVybiAkKHJlY29yZE5vZGVzLCBbXG4gICAgICBmaWx0ZXIocmVjb3JkTm9kZUlzQWxsb3dlZChpbmRleE5vZGUpKSxcbiAgICBdKTtcbiAgfVxuXG4gIGlmIChpc0FuY2VzdG9ySW5kZXgoaW5kZXhOb2RlKSkge1xuICAgIHJldHVybiAkKHJlY29yZE5vZGVzLCBbXG4gICAgICBmaWx0ZXIoaXNEZWNlbmRhbnQoaW5kZXhOb2RlLnBhcmVudCgpKSksXG4gICAgICBmaWx0ZXIocmVjb3JkTm9kZUlzQWxsb3dlZChpbmRleE5vZGUpKSxcbiAgICBdKTtcbiAgfVxuXG4gIGlmIChpc1JlZmVyZW5jZUluZGV4KGluZGV4Tm9kZSkpIHtcbiAgICByZXR1cm4gJChyZWNvcmROb2RlcywgW1xuICAgICAgZmlsdGVyKG4gPT4gc29tZShmaWVsZFJldmVyc2VzUmVmZXJlbmNlVG9JbmRleChpbmRleE5vZGUpKShuLmZpZWxkcykpLFxuICAgIF0pO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0Tm9kZUZyb21Ob2RlS2V5SGFzaCA9IGhpZXJhcmNoeSA9PiBoYXNoID0+ICQoaGllcmFyY2h5LCBbXG4gIGdldEZsYXR0ZW5lZEhpZXJhcmNoeSxcbiAgZmluZChuID0+IGdldEhhc2hDb2RlKG4ubm9kZUtleSgpKSA9PT0gaGFzaCksXG5dKTtcblxuZXhwb3J0IGNvbnN0IGlzUmVjb3JkID0gbm9kZSA9PiBpc1NvbWV0aGluZyhub2RlKSAmJiBub2RlLnR5cGUgPT09ICdyZWNvcmQnO1xuZXhwb3J0IGNvbnN0IGlzU2luZ2xlUmVjb3JkID0gbm9kZSA9PiBpc1JlY29yZChub2RlKSAmJiBub2RlLmlzU2luZ2xlO1xuZXhwb3J0IGNvbnN0IGlzQ29sbGVjdGlvblJlY29yZCA9IG5vZGUgPT4gaXNSZWNvcmQobm9kZSkgJiYgIW5vZGUuaXNTaW5nbGU7XG5leHBvcnQgY29uc3QgaXNJbmRleCA9IG5vZGUgPT4gaXNTb21ldGhpbmcobm9kZSkgJiYgbm9kZS50eXBlID09PSAnaW5kZXgnO1xuZXhwb3J0IGNvbnN0IGlzYWdncmVnYXRlR3JvdXAgPSBub2RlID0+IGlzU29tZXRoaW5nKG5vZGUpICYmIG5vZGUudHlwZSA9PT0gJ2FnZ3JlZ2F0ZUdyb3VwJztcbmV4cG9ydCBjb25zdCBpc1NoYXJkZWRJbmRleCA9IG5vZGUgPT4gaXNJbmRleChub2RlKSAmJiBpc05vbkVtcHR5U3RyaW5nKG5vZGUuZ2V0U2hhcmROYW1lKTtcbmV4cG9ydCBjb25zdCBpc1Jvb3QgPSBub2RlID0+IGlzU29tZXRoaW5nKG5vZGUpICYmIG5vZGUuaXNSb290KCk7XG5leHBvcnQgY29uc3QgaXNEZWNlbmRhbnRPZkFSZWNvcmQgPSBoYXNNYXRjaGluZ0FuY2VzdG9yKGlzUmVjb3JkKTtcbmV4cG9ydCBjb25zdCBpc0dsb2JhbEluZGV4ID0gbm9kZSA9PiBpc0luZGV4KG5vZGUpICYmIGlzUm9vdChub2RlLnBhcmVudCgpKTtcbmV4cG9ydCBjb25zdCBpc1JlZmVyZW5jZUluZGV4ID0gbm9kZSA9PiBpc0luZGV4KG5vZGUpICYmIG5vZGUuaW5kZXhUeXBlID09PSBpbmRleFR5cGVzLnJlZmVyZW5jZTtcbmV4cG9ydCBjb25zdCBpc0FuY2VzdG9ySW5kZXggPSBub2RlID0+IGlzSW5kZXgobm9kZSkgJiYgbm9kZS5pbmRleFR5cGUgPT09IGluZGV4VHlwZXMuYW5jZXN0b3I7XG5cbmV4cG9ydCBjb25zdCBmaWVsZFJldmVyc2VzUmVmZXJlbmNlVG9Ob2RlID0gbm9kZSA9PiBmaWVsZCA9PiBmaWVsZC50eXBlID09PSAncmVmZXJlbmNlJ1xuICAgICYmIGludGVyc2VjdGlvbihmaWVsZC50eXBlT3B0aW9ucy5yZXZlcnNlSW5kZXhOb2RlS2V5cykobWFwKGkgPT4gaS5ub2RlS2V5KCkpKG5vZGUuaW5kZXhlcykpXG4gICAgICAubGVuZ3RoID4gMDtcblxuZXhwb3J0IGNvbnN0IGZpZWxkUmV2ZXJzZXNSZWZlcmVuY2VUb0luZGV4ID0gaW5kZXhOb2RlID0+IGZpZWxkID0+IGZpZWxkLnR5cGUgPT09ICdyZWZlcmVuY2UnXG4gICAgJiYgaW50ZXJzZWN0aW9uKGZpZWxkLnR5cGVPcHRpb25zLnJldmVyc2VJbmRleE5vZGVLZXlzKShbaW5kZXhOb2RlLm5vZGVLZXkoKV0pXG4gICAgICAubGVuZ3RoID4gMDtcblxuZXhwb3J0IGRlZmF1bHQge1xuICBnZXRMYXN0UGFydEluS2V5LFxuICBnZXROb2Rlc0luUGF0aCxcbiAgZ2V0RXhhY3ROb2RlRm9yUGF0aCxcbiAgaGFzTWF0Y2hpbmdBbmNlc3RvcixcbiAgZ2V0Tm9kZSxcbiAgZ2V0Tm9kZUJ5S2V5T3JOb2RlS2V5LFxuICBpc05vZGUsXG4gIGdldEFjdHVhbEtleU9mUGFyZW50LFxuICBnZXRQYXJlbnRLZXksXG4gIGlzS2V5QW5jZXN0b3JPZixcbiAgaGFzTm9NYXRjaGluZ0FuY2VzdG9ycyxcbiAgZmluZEZpZWxkLFxuICBpc0FuY2VzdG9yLFxuICBpc0RlY2VuZGFudCxcbiAgZ2V0UmVjb3JkTm9kZUlkLFxuICBnZXRSZWNvcmROb2RlSWRGcm9tSWQsXG4gIGdldFJlY29yZE5vZGVCeUlkLFxuICByZWNvcmROb2RlSWRJc0FsbG93ZWQsXG4gIHJlY29yZE5vZGVJc0FsbG93ZWQsXG4gIGdldEFsbG93ZWRSZWNvcmROb2Rlc0ZvckluZGV4LFxuICBnZXROb2RlRnJvbU5vZGVLZXlIYXNoLFxuICBpc1JlY29yZCxcbiAgaXNDb2xsZWN0aW9uUmVjb3JkLFxuICBpc0luZGV4LFxuICBpc2FnZ3JlZ2F0ZUdyb3VwLFxuICBpc1NoYXJkZWRJbmRleCxcbiAgaXNSb290LFxuICBpc0RlY2VuZGFudE9mQVJlY29yZCxcbiAgaXNHbG9iYWxJbmRleCxcbiAgaXNSZWZlcmVuY2VJbmRleCxcbiAgaXNBbmNlc3RvckluZGV4LFxuICBmaWVsZFJldmVyc2VzUmVmZXJlbmNlVG9Ob2RlLFxuICBmaWVsZFJldmVyc2VzUmVmZXJlbmNlVG9JbmRleCxcbiAgZ2V0RmxhdHRlbmVkSGllcmFyY2h5LFxufTtcbiIsImltcG9ydCB7IG1lcmdlLCBoYXMgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgY29uc3RhbnQsIGlzVW5kZWZpbmVkLCBcbiAgbWFwVmFsdWVzLCBjbG9uZURlZXAsXG59IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyBpc05vdEVtcHR5IH0gZnJvbSAnLi4vY29tbW9uJztcblxuZXhwb3J0IGNvbnN0IGdldFNhZmVGaWVsZFBhcnNlciA9ICh0cnlQYXJzZSwgZGVmYXVsdFZhbHVlRnVuY3Rpb25zKSA9PiAoZmllbGQsIHJlY29yZCkgPT4ge1xuICBpZiAoaGFzKHJlY29yZCwgZmllbGQubmFtZSkpIHtcbiAgICByZXR1cm4gZ2V0U2FmZVZhbHVlUGFyc2VyKHRyeVBhcnNlLCBkZWZhdWx0VmFsdWVGdW5jdGlvbnMpKHJlY29yZFtmaWVsZC5uYW1lXSk7XG4gIH1cbiAgcmV0dXJuIGRlZmF1bHRWYWx1ZUZ1bmN0aW9uc1tmaWVsZC5nZXRVbmRlZmluZWRWYWx1ZV0oKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTYWZlVmFsdWVQYXJzZXIgPSAodHJ5UGFyc2UsIGRlZmF1bHRWYWx1ZUZ1bmN0aW9ucykgPT4gKHZhbHVlKSA9PiB7XG4gIGNvbnN0IHBhcnNlZCA9IHRyeVBhcnNlKHZhbHVlKTtcbiAgaWYgKHBhcnNlZC5zdWNjZXNzKSB7XG4gICAgcmV0dXJuIHBhcnNlZC52YWx1ZTtcbiAgfVxuICByZXR1cm4gZGVmYXVsdFZhbHVlRnVuY3Rpb25zLmRlZmF1bHQoKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdWYWx1ZSA9ICh0cnlQYXJzZSwgZGVmYXVsdFZhbHVlRnVuY3Rpb25zKSA9PiAoZmllbGQpID0+IHtcbiAgY29uc3QgZ2V0SW5pdGlhbFZhbHVlID0gaXNVbmRlZmluZWQoZmllbGQpIHx8IGlzVW5kZWZpbmVkKGZpZWxkLmdldEluaXRpYWxWYWx1ZSlcbiAgICA/ICdkZWZhdWx0J1xuICAgIDogZmllbGQuZ2V0SW5pdGlhbFZhbHVlO1xuXG4gIHJldHVybiBoYXMoZGVmYXVsdFZhbHVlRnVuY3Rpb25zLCBnZXRJbml0aWFsVmFsdWUpXG4gICAgPyBkZWZhdWx0VmFsdWVGdW5jdGlvbnNbZ2V0SW5pdGlhbFZhbHVlXSgpXG4gICAgOiBnZXRTYWZlVmFsdWVQYXJzZXIodHJ5UGFyc2UsIGRlZmF1bHRWYWx1ZUZ1bmN0aW9ucykoZ2V0SW5pdGlhbFZhbHVlKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0eXBlRnVuY3Rpb25zID0gc3BlY2lmaWNGdW5jdGlvbnMgPT4gbWVyZ2Uoe1xuICB2YWx1ZTogY29uc3RhbnQsXG4gIG51bGw6IGNvbnN0YW50KG51bGwpLFxufSwgc3BlY2lmaWNGdW5jdGlvbnMpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUeXBlQ29uc3RyYWludHMgPSB2YWxpZGF0aW9uUnVsZXMgPT4gYXN5bmMgKGZpZWxkLCByZWNvcmQsIGNvbnRleHQpID0+IHtcbiAgY29uc3QgZmllbGRWYWx1ZSA9IHJlY29yZFtmaWVsZC5uYW1lXTtcbiAgY29uc3QgdmFsaWRhdGVSdWxlID0gYXN5bmMgciA9PiAoIWF3YWl0IHIuaXNWYWxpZChmaWVsZFZhbHVlLCBmaWVsZC50eXBlT3B0aW9ucywgY29udGV4dClcbiAgICA/IHIuZ2V0TWVzc2FnZShmaWVsZFZhbHVlLCBmaWVsZC50eXBlT3B0aW9ucylcbiAgICA6ICcnKTtcblxuICBjb25zdCBlcnJvcnMgPSBbXTtcbiAgZm9yIChjb25zdCByIG9mIHZhbGlkYXRpb25SdWxlcykge1xuICAgIGNvbnN0IGVyciA9IGF3YWl0IHZhbGlkYXRlUnVsZShyKTtcbiAgICBpZiAoaXNOb3RFbXB0eShlcnIpKSBlcnJvcnMucHVzaChlcnIpO1xuICB9XG5cbiAgcmV0dXJuIGVycm9ycztcbn07XG5cbmNvbnN0IGdldERlZmF1bHRPcHRpb25zID0gbWFwVmFsdWVzKHYgPT4gdi5kZWZhdWx0VmFsdWUpO1xuXG5leHBvcnQgY29uc3QgbWFrZXJ1bGUgPSAoaXNWYWxpZCwgZ2V0TWVzc2FnZSkgPT4gKHsgaXNWYWxpZCwgZ2V0TWVzc2FnZSB9KTtcbmV4cG9ydCBjb25zdCBwYXJzZWRGYWlsZWQgPSB2YWwgPT4gKHsgc3VjY2VzczogZmFsc2UsIHZhbHVlOiB2YWwgfSk7XG5leHBvcnQgY29uc3QgcGFyc2VkU3VjY2VzcyA9IHZhbCA9PiAoeyBzdWNjZXNzOiB0cnVlLCB2YWx1ZTogdmFsIH0pO1xuZXhwb3J0IGNvbnN0IGdldERlZmF1bHRFeHBvcnQgPSAobmFtZSwgdHJ5UGFyc2UsIGZ1bmN0aW9ucywgb3B0aW9ucywgdmFsaWRhdGlvblJ1bGVzLCBzYW1wbGVWYWx1ZSwgc3RyaW5naWZ5KSA9PiAoe1xuICBnZXROZXc6IGdldE5ld1ZhbHVlKHRyeVBhcnNlLCBmdW5jdGlvbnMpLFxuICBzYWZlUGFyc2VGaWVsZDogZ2V0U2FmZUZpZWxkUGFyc2VyKHRyeVBhcnNlLCBmdW5jdGlvbnMpLFxuICBzYWZlUGFyc2VWYWx1ZTogZ2V0U2FmZVZhbHVlUGFyc2VyKHRyeVBhcnNlLCBmdW5jdGlvbnMpLFxuICB0cnlQYXJzZSxcbiAgbmFtZSxcbiAgZ2V0RGVmYXVsdE9wdGlvbnM6ICgpID0+IGdldERlZmF1bHRPcHRpb25zKGNsb25lRGVlcChvcHRpb25zKSksXG4gIG9wdGlvbkRlZmluaXRpb25zOiBvcHRpb25zLFxuICB2YWxpZGF0ZVR5cGVDb25zdHJhaW50czogdmFsaWRhdGVUeXBlQ29uc3RyYWludHModmFsaWRhdGlvblJ1bGVzKSxcbiAgc2FtcGxlVmFsdWUsXG4gIHN0cmluZ2lmeTogdmFsID0+ICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWRcbiAgICA/ICcnIDogc3RyaW5naWZ5KHZhbCkpLFxuICBnZXREZWZhdWx0VmFsdWU6IGZ1bmN0aW9ucy5kZWZhdWx0LFxufSk7XG4iLCJpbXBvcnQge1xuICBjb25zdGFudCwgaXNTdHJpbmcsXG4gIGlzTnVsbCwgaW5jbHVkZXMsIGlzQm9vbGVhbixcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIHR5cGVGdW5jdGlvbnMsXG4gIG1ha2VydWxlLCBwYXJzZWRTdWNjZXNzLCBnZXREZWZhdWx0RXhwb3J0LFxufSBmcm9tICcuL3R5cGVIZWxwZXJzJztcbmltcG9ydCB7XG4gIHN3aXRjaENhc2UsIGRlZmF1bHRDYXNlLCB0b0Jvb2xPck51bGwsIHRvTnVtYmVyT3JOdWxsLFxuICBpc1NhZmVJbnRlZ2VyLCBpc0FycmF5T2ZTdHJpbmcsXG59IGZyb20gJy4uL2NvbW1vbic7XG5cbmNvbnN0IHN0cmluZ0Z1bmN0aW9ucyA9IHR5cGVGdW5jdGlvbnMoe1xuICBkZWZhdWx0OiBjb25zdGFudChudWxsKSxcbn0pO1xuXG5jb25zdCBzdHJpbmdUcnlQYXJzZSA9IHN3aXRjaENhc2UoXG4gIFtpc1N0cmluZywgcGFyc2VkU3VjY2Vzc10sXG4gIFtpc051bGwsIHBhcnNlZFN1Y2Nlc3NdLFxuICBbZGVmYXVsdENhc2UsIHYgPT4gcGFyc2VkU3VjY2Vzcyh2LnRvU3RyaW5nKCkpXSxcbik7XG5cbmNvbnN0IG9wdGlvbnMgPSB7XG4gIG1heExlbmd0aDoge1xuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBpc1ZhbGlkOiBuID0+IG4gPT09IG51bGwgfHwgaXNTYWZlSW50ZWdlcihuKSAmJiBuID4gMCxcbiAgICByZXF1aXJlbWVudERlc2NyaXB0aW9uOiAnbWF4IGxlbmd0aCBtdXN0IGJlIG51bGwgKG5vIGxpbWl0KSBvciBhIGdyZWF0ZXIgdGhhbiB6ZXJvIGludGVnZXInLFxuICAgIHBhcnNlOiB0b051bWJlck9yTnVsbCxcbiAgfSxcbiAgdmFsdWVzOiB7XG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIGlzVmFsaWQ6IHYgPT4gdiA9PT0gbnVsbCB8fCAoaXNBcnJheU9mU3RyaW5nKHYpICYmIHYubGVuZ3RoID4gMCAmJiB2Lmxlbmd0aCA8IDEwMDAwKSxcbiAgICByZXF1aXJlbWVudERlc2NyaXB0aW9uOiBcIid2YWx1ZXMnIG11c3QgYmUgbnVsbCAobm8gdmFsdWVzKSBvciBhbiBhcnJ5IG9mIGF0IGxlYXN0IG9uZSBzdHJpbmdcIixcbiAgICBwYXJzZTogcyA9PiBzLFxuICB9LFxuICBhbGxvd0RlY2xhcmVkVmFsdWVzT25seToge1xuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2UsXG4gICAgaXNWYWxpZDogaXNCb29sZWFuLFxuICAgIHJlcXVpcmVtZW50RGVzY3JpcHRpb246ICdhbGxvd0RlY2xhcmVkVmFsdWVzT25seSBtdXN0IGJlIHRydWUgb3IgZmFsc2UnLFxuICAgIHBhcnNlOiB0b0Jvb2xPck51bGwsXG4gIH0sXG59O1xuXG5jb25zdCB0eXBlQ29uc3RyYWludHMgPSBbXG4gIG1ha2VydWxlKGFzeW5jICh2YWwsIG9wdHMpID0+IHZhbCA9PT0gbnVsbCB8fCBvcHRzLm1heExlbmd0aCA9PT0gbnVsbCB8fCB2YWwubGVuZ3RoIDw9IG9wdHMubWF4TGVuZ3RoLFxuICAgICh2YWwsIG9wdHMpID0+IGB2YWx1ZSBleGNlZWRzIG1heGltdW0gbGVuZ3RoIG9mICR7b3B0cy5tYXhMZW5ndGh9YCksXG4gIG1ha2VydWxlKGFzeW5jICh2YWwsIG9wdHMpID0+IHZhbCA9PT0gbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgb3B0cy5hbGxvd0RlY2xhcmVkVmFsdWVzT25seSA9PT0gZmFsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGluY2x1ZGVzKG9wdHMudmFsdWVzLCB2YWwpLFxuICAodmFsKSA9PiBgXCIke3ZhbH1cIiBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCBvZiBhbGxvd2VkIHZhbHVlc2ApLFxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0RGVmYXVsdEV4cG9ydChcbiAgJ3N0cmluZycsXG4gIHN0cmluZ1RyeVBhcnNlLFxuICBzdHJpbmdGdW5jdGlvbnMsXG4gIG9wdGlvbnMsXG4gIHR5cGVDb25zdHJhaW50cyxcbiAgJ2FiY2RlJyxcbiAgc3RyID0+IHN0cixcbik7XG4iLCJpbXBvcnQgeyBjb25zdGFudCwgaXNCb29sZWFuLCBpc051bGwgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgdHlwZUZ1bmN0aW9ucyxcbiAgbWFrZXJ1bGUsIHBhcnNlZEZhaWxlZCwgcGFyc2VkU3VjY2VzcyxcbiAgZ2V0RGVmYXVsdEV4cG9ydCxcbn0gZnJvbSAnLi90eXBlSGVscGVycyc7XG5pbXBvcnQge1xuICBzd2l0Y2hDYXNlLCBkZWZhdWx0Q2FzZSwgaXNPbmVPZiwgdG9Cb29sT3JOdWxsLFxufSBmcm9tICcuLi9jb21tb24nO1xuXG5jb25zdCBib29sRnVuY3Rpb25zID0gdHlwZUZ1bmN0aW9ucyh7XG4gIGRlZmF1bHQ6IGNvbnN0YW50KG51bGwpLFxufSk7XG5cbmNvbnN0IGJvb2xUcnlQYXJzZSA9IHN3aXRjaENhc2UoXG4gIFtpc0Jvb2xlYW4sIHBhcnNlZFN1Y2Nlc3NdLFxuICBbaXNOdWxsLCBwYXJzZWRTdWNjZXNzXSxcbiAgW2lzT25lT2YoJ3RydWUnLCAnMScsICd5ZXMnLCAnb24nKSwgKCkgPT4gcGFyc2VkU3VjY2Vzcyh0cnVlKV0sXG4gIFtpc09uZU9mKCdmYWxzZScsICcwJywgJ25vJywgJ29mZicpLCAoKSA9PiBwYXJzZWRTdWNjZXNzKGZhbHNlKV0sXG4gIFtkZWZhdWx0Q2FzZSwgcGFyc2VkRmFpbGVkXSxcbik7XG5cbmNvbnN0IG9wdGlvbnMgPSB7XG4gIGFsbG93TnVsbHM6IHtcbiAgICBkZWZhdWx0VmFsdWU6IHRydWUsXG4gICAgaXNWYWxpZDogaXNCb29sZWFuLFxuICAgIHJlcXVpcmVtZW50RGVzY3JpcHRpb246ICdtdXN0IGJlIGEgdHJ1ZSBvciBmYWxzZScsXG4gICAgcGFyc2U6IHRvQm9vbE9yTnVsbCxcbiAgfSxcbn07XG5cbmNvbnN0IHR5cGVDb25zdHJhaW50cyA9IFtcbiAgbWFrZXJ1bGUoYXN5bmMgKHZhbCwgb3B0cykgPT4gb3B0cy5hbGxvd051bGxzID09PSB0cnVlIHx8IHZhbCAhPT0gbnVsbCxcbiAgICAoKSA9PiAnZmllbGQgY2Fubm90IGJlIG51bGwnKSxcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGdldERlZmF1bHRFeHBvcnQoXG4gICdib29sJywgYm9vbFRyeVBhcnNlLCBib29sRnVuY3Rpb25zLFxuICBvcHRpb25zLCB0eXBlQ29uc3RyYWludHMsIHRydWUsIEpTT04uc3RyaW5naWZ5LFxuKTtcbiIsImltcG9ydCB7XG4gIGNvbnN0YW50LCBpc051bWJlciwgaXNTdHJpbmcsIGlzTnVsbCxcbn0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7XG4gIG1ha2VydWxlLCB0eXBlRnVuY3Rpb25zLFxuICBwYXJzZWRGYWlsZWQsIHBhcnNlZFN1Y2Nlc3MsIGdldERlZmF1bHRFeHBvcnQsXG59IGZyb20gJy4vdHlwZUhlbHBlcnMnO1xuaW1wb3J0IHtcbiAgc3dpdGNoQ2FzZSwgZGVmYXVsdENhc2UsIHRvTnVtYmVyT3JOdWxsLFxuICBpc1NhZmVJbnRlZ2VyLFxufSBmcm9tICcuLi9jb21tb24nO1xuXG5jb25zdCBudW1iZXJGdW5jdGlvbnMgPSB0eXBlRnVuY3Rpb25zKHtcbiAgZGVmYXVsdDogY29uc3RhbnQobnVsbCksXG59KTtcblxuY29uc3QgcGFyc2VTdHJpbmd0b051bWJlck9yTnVsbCA9IChzKSA9PiB7XG4gIGNvbnN0IG51bSA9IE51bWJlcihzKTtcbiAgcmV0dXJuIGlzTmFOKG51bSkgPyBwYXJzZWRGYWlsZWQocykgOiBwYXJzZWRTdWNjZXNzKG51bSk7XG59O1xuXG5jb25zdCBudW1iZXJUcnlQYXJzZSA9IHN3aXRjaENhc2UoXG4gIFtpc051bWJlciwgcGFyc2VkU3VjY2Vzc10sXG4gIFtpc1N0cmluZywgcGFyc2VTdHJpbmd0b051bWJlck9yTnVsbF0sXG4gIFtpc051bGwsIHBhcnNlZFN1Y2Nlc3NdLFxuICBbZGVmYXVsdENhc2UsIHBhcnNlZEZhaWxlZF0sXG4pO1xuXG5jb25zdCBvcHRpb25zID0ge1xuICBtYXhWYWx1ZToge1xuICAgIGRlZmF1bHRWYWx1ZTogTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIsXG4gICAgaXNWYWxpZDogaXNTYWZlSW50ZWdlcixcbiAgICByZXF1aXJlbWVudERlc2NyaXB0aW9uOiAnbXVzdCBiZSBhIHZhbGlkIGludGVnZXInLFxuICAgIHBhcnNlOiB0b051bWJlck9yTnVsbCxcbiAgfSxcbiAgbWluVmFsdWU6IHtcbiAgICBkZWZhdWx0VmFsdWU6IDAgLSBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICBpc1ZhbGlkOiBpc1NhZmVJbnRlZ2VyLFxuICAgIHJlcXVpcmVtZW50RGVzY3JpcHRpb246ICdtdXN0IGJlIGEgdmFsaWQgaW50ZWdlcicsXG4gICAgcGFyc2U6IHRvTnVtYmVyT3JOdWxsLFxuICB9LFxuICBkZWNpbWFsUGxhY2VzOiB7XG4gICAgZGVmYXVsdFZhbHVlOiAwLFxuICAgIGlzVmFsaWQ6IG4gPT4gaXNTYWZlSW50ZWdlcihuKSAmJiBuID49IDAsXG4gICAgcmVxdWlyZW1lbnREZXNjcmlwdGlvbjogJ211c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyxcbiAgICBwYXJzZTogdG9OdW1iZXJPck51bGwsXG4gIH0sXG59O1xuXG5jb25zdCBnZXREZWNpbWFsUGxhY2VzID0gKHZhbCkgPT4ge1xuICBjb25zdCBzcGxpdERlY2ltYWwgPSB2YWwudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICBpZiAoc3BsaXREZWNpbWFsLmxlbmd0aCA9PT0gMSkgcmV0dXJuIDA7XG4gIHJldHVybiBzcGxpdERlY2ltYWxbMV0ubGVuZ3RoO1xufTtcblxuY29uc3QgdHlwZUNvbnN0cmFpbnRzID0gW1xuICBtYWtlcnVsZShhc3luYyAodmFsLCBvcHRzKSA9PiB2YWwgPT09IG51bGwgfHwgb3B0cy5taW5WYWx1ZSA9PT0gbnVsbCB8fCB2YWwgPj0gb3B0cy5taW5WYWx1ZSxcbiAgICAodmFsLCBvcHRzKSA9PiBgdmFsdWUgKCR7dmFsLnRvU3RyaW5nKCl9KSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke29wdHMubWluVmFsdWV9YCksXG4gIG1ha2VydWxlKGFzeW5jICh2YWwsIG9wdHMpID0+IHZhbCA9PT0gbnVsbCB8fCBvcHRzLm1heFZhbHVlID09PSBudWxsIHx8IHZhbCA8PSBvcHRzLm1heFZhbHVlLFxuICAgICh2YWwsIG9wdHMpID0+IGB2YWx1ZSAoJHt2YWwudG9TdHJpbmcoKX0pIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7b3B0cy5taW5WYWx1ZX0gb3B0aW9uc2ApLFxuICBtYWtlcnVsZShhc3luYyAodmFsLCBvcHRzKSA9PiB2YWwgPT09IG51bGwgfHwgb3B0cy5kZWNpbWFsUGxhY2VzID49IGdldERlY2ltYWxQbGFjZXModmFsKSxcbiAgICAodmFsLCBvcHRzKSA9PiBgdmFsdWUgKCR7dmFsLnRvU3RyaW5nKCl9KSBtdXN0IGhhdmUgJHtvcHRzLmRlY2ltYWxQbGFjZXN9IGRlY2ltYWwgcGxhY2VzIG9yIGxlc3NgKSxcbl07XG5cbmV4cG9ydCBkZWZhdWx0IGdldERlZmF1bHRFeHBvcnQoXG4gICdudW1iZXInLFxuICBudW1iZXJUcnlQYXJzZSxcbiAgbnVtYmVyRnVuY3Rpb25zLFxuICBvcHRpb25zLFxuICB0eXBlQ29uc3RyYWludHMsXG4gIDEsXG4gIG51bSA9PiBudW0udG9TdHJpbmcoKSxcbik7XG4iLCJpbXBvcnQge1xuICBjb25zdGFudCwgaXNEYXRlLCBpc1N0cmluZywgaXNOdWxsLFxufSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgbWFrZXJ1bGUsIHR5cGVGdW5jdGlvbnMsXG4gIHBhcnNlZEZhaWxlZCwgcGFyc2VkU3VjY2VzcywgZ2V0RGVmYXVsdEV4cG9ydCxcbn0gZnJvbSAnLi90eXBlSGVscGVycyc7XG5pbXBvcnQge1xuICBzd2l0Y2hDYXNlLCBkZWZhdWx0Q2FzZSwgdG9EYXRlT3JOdWxsLFxufSBmcm9tICcuLi9jb21tb24nO1xuXG5jb25zdCBkYXRlRnVuY3Rpb25zID0gdHlwZUZ1bmN0aW9ucyh7XG4gIGRlZmF1bHQ6IGNvbnN0YW50KG51bGwpLFxuICBub3c6ICgpID0+IG5ldyBEYXRlKCksXG59KTtcblxuY29uc3QgaXNWYWxpZERhdGUgPSBkID0+IGQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTihkKTtcblxuY29uc3QgcGFyc2VTdHJpbmdUb0RhdGUgPSBzID0+IHN3aXRjaENhc2UoXG4gIFtpc1ZhbGlkRGF0ZSwgcGFyc2VkU3VjY2Vzc10sXG4gIFtkZWZhdWx0Q2FzZSwgcGFyc2VkRmFpbGVkXSxcbikobmV3IERhdGUocykpO1xuXG5cbmNvbnN0IGRhdGVUcnlQYXJzZSA9IHN3aXRjaENhc2UoXG4gIFtpc0RhdGUsIHBhcnNlZFN1Y2Nlc3NdLFxuICBbaXNTdHJpbmcsIHBhcnNlU3RyaW5nVG9EYXRlXSxcbiAgW2lzTnVsbCwgcGFyc2VkU3VjY2Vzc10sXG4gIFtkZWZhdWx0Q2FzZSwgcGFyc2VkRmFpbGVkXSxcbik7XG5cbmNvbnN0IG9wdGlvbnMgPSB7XG4gIG1heFZhbHVlOiB7XG4gICAgZGVmYXVsdFZhbHVlOiBuZXcgRGF0ZSgzMjUwMzY4MDAwMDAwMCksXG4gICAgaXNWYWxpZDogaXNEYXRlLFxuICAgIHJlcXVpcmVtZW50RGVzY3JpcHRpb246ICdtdXN0IGJlIGEgdmFsaWQgZGF0ZScsXG4gICAgcGFyc2U6IHRvRGF0ZU9yTnVsbCxcbiAgfSxcbiAgbWluVmFsdWU6IHtcbiAgICBkZWZhdWx0VmFsdWU6IG5ldyBEYXRlKC04NTIwMzM2MDAwMDAwKSxcbiAgICBpc1ZhbGlkOiBpc0RhdGUsXG4gICAgcmVxdWlyZW1lbnREZXNjcmlwdGlvbjogJ211c3QgYmUgYSB2YWxpZCBkYXRlJyxcbiAgICBwYXJzZTogdG9EYXRlT3JOdWxsLFxuICB9LFxufTtcblxuY29uc3QgdHlwZUNvbnN0cmFpbnRzID0gW1xuICBtYWtlcnVsZShhc3luYyAodmFsLCBvcHRzKSA9PiB2YWwgPT09IG51bGwgfHwgb3B0cy5taW5WYWx1ZSA9PT0gbnVsbCB8fCB2YWwgPj0gb3B0cy5taW5WYWx1ZSxcbiAgICAodmFsLCBvcHRzKSA9PiBgdmFsdWUgKCR7dmFsLnRvU3RyaW5nKCl9KSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAke29wdHMubWluVmFsdWV9YCksXG4gIG1ha2VydWxlKGFzeW5jICh2YWwsIG9wdHMpID0+IHZhbCA9PT0gbnVsbCB8fCBvcHRzLm1heFZhbHVlID09PSBudWxsIHx8IHZhbCA8PSBvcHRzLm1heFZhbHVlLFxuICAgICh2YWwsIG9wdHMpID0+IGB2YWx1ZSAoJHt2YWwudG9TdHJpbmcoKX0pIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICR7b3B0cy5taW5WYWx1ZX0gb3B0aW9uc2ApLFxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0RGVmYXVsdEV4cG9ydChcbiAgJ2RhdGV0aW1lJyxcbiAgZGF0ZVRyeVBhcnNlLFxuICBkYXRlRnVuY3Rpb25zLFxuICBvcHRpb25zLFxuICB0eXBlQ29uc3RyYWludHMsXG4gIG5ldyBEYXRlKDE5ODQsIDQsIDEpLFxuICBkYXRlID0+IEpTT04uc3RyaW5naWZ5KGRhdGUpLnJlcGxhY2UobmV3IFJlZ0V4cCgnXCInLCAnZycpLCAnJyksXG4pO1xuIiwiaW1wb3J0IHsgY29uc3RhbnQsIGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7XG4gIHR5cGVGdW5jdGlvbnMsIG1ha2VydWxlLFxuICBwYXJzZWRGYWlsZWQsIGdldERlZmF1bHRFeHBvcnQsIHBhcnNlZFN1Y2Nlc3MsXG59IGZyb20gJy4vdHlwZUhlbHBlcnMnO1xuaW1wb3J0IHtcbiAgc3dpdGNoQ2FzZSwgZGVmYXVsdENhc2UsIHRvTnVtYmVyT3JOdWxsLFxuICAkJCwgaXNTYWZlSW50ZWdlcixcbn0gZnJvbSAnLi4vY29tbW9uJztcblxuY29uc3QgYXJyYXlGdW5jdGlvbnMgPSAoKSA9PiB0eXBlRnVuY3Rpb25zKHtcbiAgZGVmYXVsdDogY29uc3RhbnQoW10pLFxufSk7XG5cbmNvbnN0IG1hcFRvUGFyc2VkQXJyYXJ5ID0gdHlwZSA9PiAkJChcbiAgbWFwKGkgPT4gdHlwZS5zYWZlUGFyc2VWYWx1ZShpKSksXG4gIHBhcnNlZFN1Y2Nlc3MsXG4pO1xuXG5jb25zdCBhcnJheVRyeVBhcnNlID0gdHlwZSA9PiBzd2l0Y2hDYXNlKFxuICBbaXNBcnJheSwgbWFwVG9QYXJzZWRBcnJhcnkodHlwZSldLFxuICBbZGVmYXVsdENhc2UsIHBhcnNlZEZhaWxlZF0sXG4pO1xuXG5jb25zdCB0eXBlTmFtZSA9IHR5cGUgPT4gYGFycmF5PCR7dHlwZX0+YDtcblxuXG5jb25zdCBvcHRpb25zID0ge1xuICBtYXhMZW5ndGg6IHtcbiAgICBkZWZhdWx0VmFsdWU6IDEwMDAwLFxuICAgIGlzVmFsaWQ6IGlzU2FmZUludGVnZXIsXG4gICAgcmVxdWlyZW1lbnREZXNjcmlwdGlvbjogJ211c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJyxcbiAgICBwYXJzZTogdG9OdW1iZXJPck51bGwsXG4gIH0sXG4gIG1pbkxlbmd0aDoge1xuICAgIGRlZmF1bHRWYWx1ZTogMCxcbiAgICBpc1ZhbGlkOiBuID0+IGlzU2FmZUludGVnZXIobikgJiYgbiA+PSAwLFxuICAgIHJlcXVpcmVtZW50RGVzY3JpcHRpb246ICdtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicsXG4gICAgcGFyc2U6IHRvTnVtYmVyT3JOdWxsLFxuICB9LFxufTtcblxuY29uc3QgdHlwZUNvbnN0cmFpbnRzID0gW1xuICBtYWtlcnVsZShhc3luYyAodmFsLCBvcHRzKSA9PiB2YWwgPT09IG51bGwgfHwgdmFsLmxlbmd0aCA+PSBvcHRzLm1pbkxlbmd0aCxcbiAgICAodmFsLCBvcHRzKSA9PiBgbXVzdCBjaG9vc2UgJHtvcHRzLm1pbkxlbmd0aH0gb3IgbW9yZSBvcHRpb25zYCksXG4gIG1ha2VydWxlKGFzeW5jICh2YWwsIG9wdHMpID0+IHZhbCA9PT0gbnVsbCB8fCB2YWwubGVuZ3RoIDw9IG9wdHMubWF4TGVuZ3RoLFxuICAgICh2YWwsIG9wdHMpID0+IGBjYW5ub3QgY2hvb3NlIG1vcmUgdGhhbiAke29wdHMubWF4TGVuZ3RofSBvcHRpb25zYCksXG5dO1xuXG5leHBvcnQgZGVmYXVsdCB0eXBlID0+IGdldERlZmF1bHRFeHBvcnQoXG4gIHR5cGVOYW1lKHR5cGUubmFtZSksXG4gIGFycmF5VHJ5UGFyc2UodHlwZSksXG4gIGFycmF5RnVuY3Rpb25zKHR5cGUpLFxuICBvcHRpb25zLFxuICB0eXBlQ29uc3RyYWludHMsXG4gIFt0eXBlLnNhbXBsZVZhbHVlXSxcbiAgSlNPTi5zdHJpbmdpZnksXG4pO1xuIiwiaW1wb3J0IHtcbiAgaXNTdHJpbmcsIGlzT2JqZWN0TGlrZSxcbiAgaXNOdWxsLCBoYXMsIGlzRW1wdHksXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICB0eXBlRnVuY3Rpb25zLCBtYWtlcnVsZSxcbiAgcGFyc2VkU3VjY2VzcywgZ2V0RGVmYXVsdEV4cG9ydCxcbiAgcGFyc2VkRmFpbGVkLFxufSBmcm9tICcuL3R5cGVIZWxwZXJzJztcbmltcG9ydCB7XG4gIHN3aXRjaENhc2UsIGRlZmF1bHRDYXNlLFxuICBpc05vbkVtcHR5U3RyaW5nLCBpc0FycmF5T2ZTdHJpbmcsXG59IGZyb20gJy4uL2NvbW1vbic7XG5cbmNvbnN0IHJlZmVyZW5jZU5vdGhpbmcgPSAoKSA9PiAoeyBrZXk6ICcnIH0pO1xuXG5jb25zdCByZWZlcmVuY2VGdW5jdGlvbnMgPSB0eXBlRnVuY3Rpb25zKHtcbiAgZGVmYXVsdDogcmVmZXJlbmNlTm90aGluZyxcbn0pO1xuXG5jb25zdCBoYXNTdHJpbmdWYWx1ZSA9IChvYiwgcGF0aCkgPT4gaGFzKG9iLCBwYXRoKVxuICAgICYmIGlzU3RyaW5nKG9iW3BhdGhdKTtcblxuY29uc3QgaXNPYmplY3RXaXRoS2V5ID0gdiA9PiBpc09iamVjdExpa2UodilcbiAgICAmJiBoYXNTdHJpbmdWYWx1ZSh2LCAna2V5Jyk7XG5cbmNvbnN0IHJlZmVyZW5jZVRyeVBhcnNlID0gdiA9PiBzd2l0Y2hDYXNlKFxuICBbaXNPYmplY3RXaXRoS2V5LCBwYXJzZWRTdWNjZXNzXSxcbiAgW2lzTnVsbCwgKCkgPT4gcGFyc2VkU3VjY2VzcyhyZWZlcmVuY2VOb3RoaW5nKCkpXSxcbiAgW2RlZmF1bHRDYXNlLCBwYXJzZWRGYWlsZWRdLFxuKSh2KTtcblxuY29uc3Qgb3B0aW9ucyA9IHtcbiAgaW5kZXhOb2RlS2V5OiB7XG4gICAgZGVmYXVsdFZhbHVlOiBudWxsLFxuICAgIGlzVmFsaWQ6IGlzTm9uRW1wdHlTdHJpbmcsXG4gICAgcmVxdWlyZW1lbnREZXNjcmlwdGlvbjogJ211c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyxcbiAgICBwYXJzZTogcyA9PiBzLFxuICB9LFxuICBkaXNwbGF5VmFsdWU6IHtcbiAgICBkZWZhdWx0VmFsdWU6ICcnLFxuICAgIGlzVmFsaWQ6IGlzTm9uRW1wdHlTdHJpbmcsXG4gICAgcmVxdWlyZW1lbnREZXNjcmlwdGlvbjogJ211c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyxcbiAgICBwYXJzZTogcyA9PiBzLFxuICB9LFxuICByZXZlcnNlSW5kZXhOb2RlS2V5czoge1xuICAgIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgICBpc1ZhbGlkOiB2ID0+IGlzQXJyYXlPZlN0cmluZyh2KSAmJiB2Lmxlbmd0aCA+IDAsXG4gICAgcmVxdWlyZW1lbnREZXNjcmlwdGlvbjogJ211c3QgYmUgYSBub24tZW1wdHkgYXJyYXkgb2Ygc3RyaW5ncycsXG4gICAgcGFyc2U6IHMgPT4gcyxcbiAgfSxcbn07XG5cbmNvbnN0IGlzRW1wdHlTdHJpbmcgPSBzID0+IGlzU3RyaW5nKHMpICYmIGlzRW1wdHkocyk7XG5cbmNvbnN0IGVuc3VyZVJlZmVyZW5jZUV4aXN0cyA9IGFzeW5jICh2YWwsIG9wdHMsIGNvbnRleHQpID0+IGlzRW1wdHlTdHJpbmcodmFsLmtleSlcbiAgICB8fCBhd2FpdCBjb250ZXh0LnJlZmVyZW5jZUV4aXN0cyhvcHRzLCB2YWwua2V5KTtcblxuY29uc3QgdHlwZUNvbnN0cmFpbnRzID0gW1xuICBtYWtlcnVsZShcbiAgICBlbnN1cmVSZWZlcmVuY2VFeGlzdHMsXG4gICAgKHZhbCwgb3B0cykgPT4gYFwiJHt2YWxbb3B0cy5kaXNwbGF5VmFsdWVdfVwiIGRvZXMgbm90IGV4aXN0IGluIG9wdGlvbnMgbGlzdCAoa2V5OiAke3ZhbC5rZXl9KWAsXG4gICksXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBnZXREZWZhdWx0RXhwb3J0KFxuICAncmVmZXJlbmNlJyxcbiAgcmVmZXJlbmNlVHJ5UGFyc2UsXG4gIHJlZmVyZW5jZUZ1bmN0aW9ucyxcbiAgb3B0aW9ucyxcbiAgdHlwZUNvbnN0cmFpbnRzLFxuICB7IGtleTogJ2tleScsIHZhbHVlOiAndmFsdWUnIH0sXG4gIEpTT04uc3RyaW5naWZ5LFxuKTtcbiIsImltcG9ydCB7XG4gIGxhc3QsIGhhcywgaXNTdHJpbmcsIGludGVyc2VjdGlvbixcbiAgaXNOdWxsLCBpc051bWJlcixcbn0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7XG4gIHR5cGVGdW5jdGlvbnMsIHBhcnNlZEZhaWxlZCxcbiAgcGFyc2VkU3VjY2VzcywgZ2V0RGVmYXVsdEV4cG9ydCxcbn0gZnJvbSAnLi90eXBlSGVscGVycyc7XG5pbXBvcnQge1xuICBzd2l0Y2hDYXNlLCBkZWZhdWx0Q2FzZSwgbm9uZSxcbiAgJCwgc3BsaXRLZXksXG59IGZyb20gJy4uL2NvbW1vbic7XG5cbmNvbnN0IGlsbGVnYWxDaGFyYWN0ZXJzID0gJyo/XFxcXC86PD58XFwwXFxiXFxmXFx2JztcblxuZXhwb3J0IGNvbnN0IGlzTGVnYWxGaWxlbmFtZSA9IChmaWxlUGF0aCkgPT4ge1xuICBjb25zdCBmbiA9IGZpbGVOYW1lKGZpbGVQYXRoKTtcbiAgcmV0dXJuIGZuLmxlbmd0aCA8PSAyNTVcbiAgICAmJiBpbnRlcnNlY3Rpb24oZm4uc3BsaXQoJycpKShpbGxlZ2FsQ2hhcmFjdGVycy5zcGxpdCgnJykpLmxlbmd0aCA9PT0gMFxuICAgICYmIG5vbmUoZiA9PiBmID09PSAnLi4nKShzcGxpdEtleShmaWxlUGF0aCkpO1xufTtcblxuY29uc3QgZmlsZU5vdGhpbmcgPSAoKSA9PiAoeyByZWxhdGl2ZVBhdGg6ICcnLCBzaXplOiAwIH0pO1xuXG5jb25zdCBmaWxlRnVuY3Rpb25zID0gdHlwZUZ1bmN0aW9ucyh7XG4gIGRlZmF1bHQ6IGZpbGVOb3RoaW5nLFxufSk7XG5cbmNvbnN0IGZpbGVUcnlQYXJzZSA9IHYgPT4gc3dpdGNoQ2FzZShcbiAgW2lzVmFsaWRGaWxlLCBwYXJzZWRTdWNjZXNzXSxcbiAgW2lzTnVsbCwgKCkgPT4gcGFyc2VkU3VjY2VzcyhmaWxlTm90aGluZygpKV0sXG4gIFtkZWZhdWx0Q2FzZSwgcGFyc2VkRmFpbGVkXSxcbikodik7XG5cbmNvbnN0IGZpbGVOYW1lID0gZmlsZVBhdGggPT4gJChmaWxlUGF0aCwgW1xuICBzcGxpdEtleSxcbiAgbGFzdCxcbl0pO1xuXG5jb25zdCBpc1ZhbGlkRmlsZSA9IGYgPT4gIWlzTnVsbChmKVxuICAgICYmIGhhcygncmVsYXRpdmVQYXRoJykoZikgJiYgaGFzKCdzaXplJykoZilcbiAgICAmJiBpc051bWJlcihmLnNpemUpXG4gICAgJiYgaXNTdHJpbmcoZi5yZWxhdGl2ZVBhdGgpXG4gICAgJiYgaXNMZWdhbEZpbGVuYW1lKGYucmVsYXRpdmVQYXRoKTtcblxuY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG5jb25zdCB0eXBlQ29uc3RyYWludHMgPSBbXTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0RGVmYXVsdEV4cG9ydChcbiAgJ2ZpbGUnLFxuICBmaWxlVHJ5UGFyc2UsXG4gIGZpbGVGdW5jdGlvbnMsXG4gIG9wdGlvbnMsXG4gIHR5cGVDb25zdHJhaW50cyxcbiAgeyByZWxhdGl2ZVBhdGg6ICdzb21lX2ZpbGUuanBnJywgc2l6ZTogMTAwMCB9LFxuICBKU09OLnN0cmluZ2lmeSxcbik7XG4iLCJpbXBvcnQge1xuICBhc3NpZ24sIGtleXMsIG1lcmdlLCBoYXMsXG59IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQge1xuICBtYXAsIGlzU3RyaW5nLCBpc051bWJlcixcbiAgaXNCb29sZWFuLCBpc0RhdGUsXG4gIGlzT2JqZWN0LCBpc0FycmF5LFxufSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgJCB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBwYXJzZWRTdWNjZXNzIH0gZnJvbSAnLi90eXBlSGVscGVycyc7XG5pbXBvcnQgc3RyaW5nIGZyb20gJy4vc3RyaW5nJztcbmltcG9ydCBib29sIGZyb20gJy4vYm9vbCc7XG5pbXBvcnQgbnVtYmVyIGZyb20gJy4vbnVtYmVyJztcbmltcG9ydCBkYXRldGltZSBmcm9tICcuL2RhdGV0aW1lJztcbmltcG9ydCBhcnJheSBmcm9tICcuL2FycmF5JztcbmltcG9ydCByZWZlcmVuY2UgZnJvbSAnLi9yZWZlcmVuY2UnO1xuaW1wb3J0IGZpbGUgZnJvbSAnLi9maWxlJztcbmltcG9ydCB7IEJhZFJlcXVlc3RFcnJvciB9IGZyb20gJy4uL2NvbW1vbi9lcnJvcnMnO1xuXG5jb25zdCBhbGxUeXBlcyA9ICgpID0+IHtcbiAgY29uc3QgYmFzaWNUeXBlcyA9IHtcbiAgICBzdHJpbmcsIG51bWJlciwgZGF0ZXRpbWUsIGJvb2wsIHJlZmVyZW5jZSwgZmlsZSxcbiAgfTtcblxuICBjb25zdCBhcnJheXMgPSAkKGJhc2ljVHlwZXMsIFtcbiAgICBrZXlzLFxuICAgIG1hcCgoaykgPT4ge1xuICAgICAgY29uc3Qga3ZUeXBlID0ge307XG4gICAgICBjb25zdCBjb25jcmV0ZUFycmF5ID0gYXJyYXkoYmFzaWNUeXBlc1trXSk7XG4gICAgICBrdlR5cGVbY29uY3JldGVBcnJheS5uYW1lXSA9IGNvbmNyZXRlQXJyYXk7XG4gICAgICByZXR1cm4ga3ZUeXBlO1xuICAgIH0pLFxuICAgIHR5cGVzID0+IGFzc2lnbih7fSwgLi4udHlwZXMpLFxuICBdKTtcblxuICByZXR1cm4gbWVyZ2Uoe30sIGJhc2ljVHlwZXMsIGFycmF5cyk7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBhbGwgPSBhbGxUeXBlcygpO1xuXG5leHBvcnQgY29uc3QgZ2V0VHlwZSA9ICh0eXBlTmFtZSkgPT4ge1xuICBpZiAoIWhhcyhhbGwsIHR5cGVOYW1lKSkgdGhyb3cgbmV3IEJhZFJlcXVlc3RFcnJvcihgRG8gbm90IHJlY29nbmlzZSB0eXBlICR7dHlwZU5hbWV9YCk7XG4gIHJldHVybiBhbGxbdHlwZU5hbWVdO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFNhbXBsZUZpZWxkVmFsdWUgPSBmaWVsZCA9PiBnZXRUeXBlKGZpZWxkLnR5cGUpLnNhbXBsZVZhbHVlO1xuXG5leHBvcnQgY29uc3QgZ2V0TmV3RmllbGRWYWx1ZSA9IGZpZWxkID0+IGdldFR5cGUoZmllbGQudHlwZSkuZ2V0TmV3KGZpZWxkKTtcblxuZXhwb3J0IGNvbnN0IHNhZmVQYXJzZUZpZWxkID0gKGZpZWxkLCByZWNvcmQpID0+IGdldFR5cGUoZmllbGQudHlwZSkuc2FmZVBhcnNlRmllbGQoZmllbGQsIHJlY29yZCk7XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUZpZWxkUGFyc2UgPSAoZmllbGQsIHJlY29yZCkgPT4gKGhhcyhyZWNvcmQsIGZpZWxkLm5hbWUpXG4gID8gZ2V0VHlwZShmaWVsZC50eXBlKS50cnlQYXJzZShyZWNvcmRbZmllbGQubmFtZV0pXG4gIDogcGFyc2VkU3VjY2Vzcyh1bmRlZmluZWQpKTsgLy8gZmllbGRzIG1heSBiZSB1bmRlZmluZWQgYnkgZGVmYXVsdFxuXG5leHBvcnQgY29uc3QgZ2V0RGVmYXVsdE9wdGlvbnMgPSB0eXBlID0+IGdldFR5cGUodHlwZSkuZ2V0RGVmYXVsdE9wdGlvbnMoKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVHlwZUNvbnN0cmFpbnRzID0gYXN5bmMgKGZpZWxkLCByZWNvcmQsIGNvbnRleHQpID0+IGF3YWl0IGdldFR5cGUoZmllbGQudHlwZSkudmFsaWRhdGVUeXBlQ29uc3RyYWludHMoZmllbGQsIHJlY29yZCwgY29udGV4dCk7XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RUeXBlID0gKHZhbHVlKSA9PiB7XG4gIGlmIChpc1N0cmluZyh2YWx1ZSkpIHJldHVybiBzdHJpbmc7XG4gIGlmIChpc0Jvb2xlYW4odmFsdWUpKSByZXR1cm4gYm9vbDtcbiAgaWYgKGlzTnVtYmVyKHZhbHVlKSkgcmV0dXJuIG51bWJlcjtcbiAgaWYgKGlzRGF0ZSh2YWx1ZSkpIHJldHVybiBkYXRldGltZTtcbiAgaWYgKGlzQXJyYXkodmFsdWUpKSByZXR1cm4gYXJyYXkoZGV0ZWN0VHlwZSh2YWx1ZVswXSkpO1xuICBpZiAoaXNPYmplY3QodmFsdWUpXG4gICAgICAgJiYgaGFzKHZhbHVlLCAna2V5JylcbiAgICAgICAmJiBoYXModmFsdWUsICd2YWx1ZScpKSByZXR1cm4gcmVmZXJlbmNlO1xuICBpZiAoaXNPYmplY3QodmFsdWUpXG4gICAgICAgICYmIGhhcyh2YWx1ZSwgJ3JlbGF0aXZlUGF0aCcpXG4gICAgICAgICYmIGhhcyh2YWx1ZSwgJ3NpemUnKSkgcmV0dXJuIGZpbGU7XG5cbiAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFcnJvcihgY2Fubm90IGRldGVybWluZSB0eXBlOiAke0pTT04uc3RyaW5naWZ5KHZhbHVlKX1gKTtcbn07XG4iLCJpbXBvcnQgeyBjbG9uZSwgZmluZCwgc3BsaXQgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgam9pbktleSwgJCB9IGZyb20gJy4uL2NvbW1vbic7XG4vLyA1IG1pbnV0ZXNcbmV4cG9ydCBjb25zdCB0ZW1wQ29kZUV4cGlyeUxlbmd0aCA9IDUgKiA2MCAqIDEwMDA7XG5cbmV4cG9ydCBjb25zdCBBVVRIX0ZPTERFUiA9ICcvLmF1dGgnO1xuZXhwb3J0IGNvbnN0IFVTRVJTX0xJU1RfRklMRSA9IGpvaW5LZXkoQVVUSF9GT0xERVIsICd1c2Vycy5qc29uJyk7XG5leHBvcnQgY29uc3QgdXNlckF1dGhGaWxlID0gdXNlcm5hbWUgPT4gam9pbktleShBVVRIX0ZPTERFUiwgYGF1dGhfJHt1c2VybmFtZX0uanNvbmApO1xuZXhwb3J0IGNvbnN0IFVTRVJTX0xPQ0tfRklMRSA9IGpvaW5LZXkoQVVUSF9GT0xERVIsICd1c2Vyc19sb2NrJyk7XG5leHBvcnQgY29uc3QgQUNDRVNTX0xFVkVMU19GSUxFID0gam9pbktleShBVVRIX0ZPTERFUiwgJ2FjY2Vzc19sZXZlbHMuanNvbicpO1xuZXhwb3J0IGNvbnN0IEFDQ0VTU19MRVZFTFNfTE9DS19GSUxFID0gam9pbktleShBVVRIX0ZPTERFUiwgJ2FjY2Vzc19sZXZlbHNfbG9jaycpO1xuXG5leHBvcnQgY29uc3QgcGVybWlzc2lvblR5cGVzID0ge1xuICBDUkVBVEVfUkVDT1JEOiAnY3JlYXRlIHJlY29yZCcsXG4gIFVQREFURV9SRUNPUkQ6ICd1cGRhdGUgcmVjb3JkJyxcbiAgUkVBRF9SRUNPUkQ6ICdyZWFkIHJlY29yZCcsXG4gIERFTEVURV9SRUNPUkQ6ICdkZWxldGUgcmVjb3JkJyxcbiAgUkVBRF9JTkRFWDogJ3JlYWQgaW5kZXgnLFxuICBNQU5BR0VfSU5ERVg6ICdtYW5hZ2UgaW5kZXgnLFxuICBNQU5BR0VfQ09MTEVDVElPTjogJ21hbmFnZSBjb2xsZWN0aW9uJyxcbiAgV1JJVEVfVEVNUExBVEVTOiAnd3JpdGUgdGVtcGxhdGVzJyxcbiAgQ1JFQVRFX1VTRVI6ICdjcmVhdGUgdXNlcicsXG4gIFNFVF9QQVNTV09SRDogJ3NldCBwYXNzd29yZCcsXG4gIENSRUFURV9URU1QT1JBUllfQUNDRVNTOiAnY3JlYXRlIHRlbXBvcmFyeSBhY2Nlc3MnLFxuICBFTkFCTEVfRElTQUJMRV9VU0VSOiAnZW5hYmxlIG9yIGRpc2FibGUgdXNlcicsXG4gIFdSSVRFX0FDQ0VTU19MRVZFTFM6ICd3cml0ZSBhY2Nlc3MgbGV2ZWxzJyxcbiAgTElTVF9VU0VSUzogJ2xpc3QgdXNlcnMnLFxuICBMSVNUX0FDQ0VTU19MRVZFTFM6ICdsaXN0IGFjY2VzcyBsZXZlbHMnLFxuICBFWEVDVVRFX0FDVElPTjogJ2V4ZWN1dGUgYWN0aW9uJyxcbiAgU0VUX1VTRVJfQUNDRVNTX0xFVkVMUzogJ3NldCB1c2VyIGFjY2VzcyBsZXZlbHMnLFxufTtcblxuZXhwb3J0IGNvbnN0IGdldFVzZXJCeU5hbWUgPSAodXNlcnMsIG5hbWUpID0+ICQodXNlcnMsIFtcbiAgZmluZCh1ID0+IHUubmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lLnRvTG93ZXJDYXNlKCkpLFxuXSk7XG5cbmV4cG9ydCBjb25zdCBzdHJpcFVzZXJPZlNlbnNpdGl2ZVN0dWZmID0gKHVzZXIpID0+IHtcbiAgY29uc3Qgc3RyaXBwZWQgPSBjbG9uZSh1c2VyKTtcbiAgZGVsZXRlIHN0cmlwcGVkLnRlbXBDb2RlO1xuICByZXR1cm4gc3RyaXBwZWQ7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VUZW1wb3JhcnlDb2RlID0gZnVsbENvZGUgPT4gJChmdWxsQ29kZSwgW1xuICBzcGxpdCgnOicpLFxuICBwYXJ0cyA9PiAoe1xuICAgIGlkOiBwYXJ0c1sxXSxcbiAgICBjb2RlOiBwYXJ0c1syXSxcbiAgfSksXG5dKTtcbiIsImltcG9ydCB7IHZhbHVlcywgaW5jbHVkZXMsIHNvbWUgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgcGVybWlzc2lvblR5cGVzIH0gZnJvbSAnLi9hdXRoQ29tbW9uJztcbmltcG9ydCB7XG4gICQsIGlzTm90aGluZywgYXBpV3JhcHBlclN5bmMsIGV2ZW50cyxcbn0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGdldE5vZGVCeUtleU9yTm9kZUtleSwgaXNOb2RlIH0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7IGFsd2F5c0F1dGhvcml6ZWQgfSBmcm9tICcuL3Blcm1pc3Npb25zJztcblxuZXhwb3J0IGNvbnN0IGlzQXV0aG9yaXplZCA9IGFwcCA9PiAocGVybWlzc2lvblR5cGUsIHJlc291cmNlS2V5KSA9PiBhcGlXcmFwcGVyU3luYyhcbiAgYXBwLFxuICBldmVudHMuYXV0aEFwaS5pc0F1dGhvcml6ZWQsXG4gIGFsd2F5c0F1dGhvcml6ZWQsXG4gIHsgcmVzb3VyY2VLZXksIHBlcm1pc3Npb25UeXBlIH0sXG4gIF9pc0F1dGhvcml6ZWQsIGFwcCwgcGVybWlzc2lvblR5cGUsIHJlc291cmNlS2V5LFxuKTtcblxuZXhwb3J0IGNvbnN0IF9pc0F1dGhvcml6ZWQgPSAoYXBwLCBwZXJtaXNzaW9uVHlwZSwgcmVzb3VyY2VLZXkpID0+IHtcbiAgaWYgKCFhcHAudXNlcikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkVHlwZSA9ICQocGVybWlzc2lvblR5cGVzLCBbXG4gICAgdmFsdWVzLFxuICAgIGluY2x1ZGVzKHBlcm1pc3Npb25UeXBlKSxcbiAgXSk7XG5cbiAgaWYgKCF2YWxpZFR5cGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwZXJtTWF0Y2hlc1Jlc291cmNlID0gKHVzZXJwZXJtKSA9PiB7XG4gICAgY29uc3Qgbm9kZUtleSA9IGlzTm90aGluZyhyZXNvdXJjZUtleSlcbiAgICAgID8gbnVsbFxuICAgICAgOiBpc05vZGUoYXBwLmhpZXJhcmNoeSwgcmVzb3VyY2VLZXkpXG4gICAgICAgID8gZ2V0Tm9kZUJ5S2V5T3JOb2RlS2V5KFxuICAgICAgICAgIGFwcC5oaWVyYXJjaHksIHJlc291cmNlS2V5LFxuICAgICAgICApLm5vZGVLZXkoKVxuICAgICAgICA6IHJlc291cmNlS2V5O1xuXG4gICAgcmV0dXJuICh1c2VycGVybS50eXBlID09PSBwZXJtaXNzaW9uVHlwZSlcbiAgICAgICAgJiYgKFxuICAgICAgICAgIGlzTm90aGluZyhyZXNvdXJjZUtleSlcbiAgICAgICAgICAgIHx8IG5vZGVLZXkgPT09IHVzZXJwZXJtLm5vZGVLZXlcbiAgICAgICAgKTtcbiAgfTtcblxuICByZXR1cm4gJChhcHAudXNlci5wZXJtaXNzaW9ucywgW1xuICAgIHNvbWUocGVybU1hdGNoZXNSZXNvdXJjZSksXG4gIF0pO1xufTtcbiIsImltcG9ydCB7IHBlcm1pc3Npb25UeXBlcyB9IGZyb20gJy4vYXV0aENvbW1vbic7XG5pbXBvcnQgeyBpc0F1dGhvcml6ZWQgfSBmcm9tICcuL2lzQXV0aG9yaXplZCc7XG5cbmV4cG9ydCBjb25zdCB0ZW1wb3JhcnlBY2Nlc3NQZXJtaXNzaW9ucyA9ICgpID0+IChbeyB0eXBlOiBwZXJtaXNzaW9uVHlwZXMuU0VUX1BBU1NXT1JEIH1dKTtcblxuY29uc3Qgbm9kZVBlcm1pc3Npb24gPSB0eXBlID0+ICh7XG4gIGFkZDogKG5vZGVLZXksIGFjY2Vzc0xldmVsKSA9PiBhY2Nlc3NMZXZlbC5wZXJtaXNzaW9ucy5wdXNoKHsgdHlwZSwgbm9kZUtleSB9KSxcbiAgaXNBdXRob3JpemVkOiByZXNvdXJjZUtleSA9PiBhcHAgPT4gaXNBdXRob3JpemVkKGFwcCkodHlwZSwgcmVzb3VyY2VLZXkpLFxuICBpc05vZGU6IHRydWUsXG4gIGdldDogbm9kZUtleSA9PiAoeyB0eXBlLCBub2RlS2V5IH0pLFxufSk7XG5cbmNvbnN0IHN0YXRpY1Blcm1pc3Npb24gPSB0eXBlID0+ICh7XG4gIGFkZDogYWNjZXNzTGV2ZWwgPT4gYWNjZXNzTGV2ZWwucGVybWlzc2lvbnMucHVzaCh7IHR5cGUgfSksXG4gIGlzQXV0aG9yaXplZDogYXBwID0+IGlzQXV0aG9yaXplZChhcHApKHR5cGUpLFxuICBpc05vZGU6IGZhbHNlLFxuICBnZXQ6ICgpID0+ICh7IHR5cGUgfSksXG59KTtcblxuY29uc3QgY3JlYXRlUmVjb3JkID0gbm9kZVBlcm1pc3Npb24ocGVybWlzc2lvblR5cGVzLkNSRUFURV9SRUNPUkQpO1xuXG5jb25zdCB1cGRhdGVSZWNvcmQgPSBub2RlUGVybWlzc2lvbihwZXJtaXNzaW9uVHlwZXMuVVBEQVRFX1JFQ09SRCk7XG5cbmNvbnN0IGRlbGV0ZVJlY29yZCA9IG5vZGVQZXJtaXNzaW9uKHBlcm1pc3Npb25UeXBlcy5ERUxFVEVfUkVDT1JEKTtcblxuY29uc3QgcmVhZFJlY29yZCA9IG5vZGVQZXJtaXNzaW9uKHBlcm1pc3Npb25UeXBlcy5SRUFEX1JFQ09SRCk7XG5cbmNvbnN0IHdyaXRlVGVtcGxhdGVzID0gc3RhdGljUGVybWlzc2lvbihwZXJtaXNzaW9uVHlwZXMuV1JJVEVfVEVNUExBVEVTKTtcblxuY29uc3QgY3JlYXRlVXNlciA9IHN0YXRpY1Blcm1pc3Npb24ocGVybWlzc2lvblR5cGVzLkNSRUFURV9VU0VSKTtcblxuY29uc3Qgc2V0UGFzc3dvcmQgPSBzdGF0aWNQZXJtaXNzaW9uKHBlcm1pc3Npb25UeXBlcy5TRVRfUEFTU1dPUkQpO1xuXG5jb25zdCByZWFkSW5kZXggPSBub2RlUGVybWlzc2lvbihwZXJtaXNzaW9uVHlwZXMuUkVBRF9JTkRFWCk7XG5cbmNvbnN0IG1hbmFnZUluZGV4ID0gc3RhdGljUGVybWlzc2lvbihwZXJtaXNzaW9uVHlwZXMuTUFOQUdFX0lOREVYKTtcblxuY29uc3QgbWFuYWdlQ29sbGVjdGlvbiA9IHN0YXRpY1Blcm1pc3Npb24ocGVybWlzc2lvblR5cGVzLk1BTkFHRV9DT0xMRUNUSU9OKTtcblxuY29uc3QgY3JlYXRlVGVtcG9yYXJ5QWNjZXNzID0gc3RhdGljUGVybWlzc2lvbihwZXJtaXNzaW9uVHlwZXMuQ1JFQVRFX1RFTVBPUkFSWV9BQ0NFU1MpO1xuXG5jb25zdCBlbmFibGVEaXNhYmxlVXNlciA9IHN0YXRpY1Blcm1pc3Npb24ocGVybWlzc2lvblR5cGVzLkVOQUJMRV9ESVNBQkxFX1VTRVIpO1xuXG5jb25zdCB3cml0ZUFjY2Vzc0xldmVscyA9IHN0YXRpY1Blcm1pc3Npb24ocGVybWlzc2lvblR5cGVzLldSSVRFX0FDQ0VTU19MRVZFTFMpO1xuXG5jb25zdCBsaXN0VXNlcnMgPSBzdGF0aWNQZXJtaXNzaW9uKHBlcm1pc3Npb25UeXBlcy5MSVNUX1VTRVJTKTtcblxuY29uc3QgbGlzdEFjY2Vzc0xldmVscyA9IHN0YXRpY1Blcm1pc3Npb24ocGVybWlzc2lvblR5cGVzLkxJU1RfQUNDRVNTX0xFVkVMUyk7XG5cbmNvbnN0IHNldFVzZXJBY2Nlc3NMZXZlbHMgPSBzdGF0aWNQZXJtaXNzaW9uKHBlcm1pc3Npb25UeXBlcy5TRVRfVVNFUl9BQ0NFU1NfTEVWRUxTKTtcblxuY29uc3QgZXhlY3V0ZUFjdGlvbiA9IG5vZGVQZXJtaXNzaW9uKHBlcm1pc3Npb25UeXBlcy5FWEVDVVRFX0FDVElPTik7XG5cbmV4cG9ydCBjb25zdCBhbHdheXNBdXRob3JpemVkID0gKCkgPT4gdHJ1ZTtcblxuZXhwb3J0IGNvbnN0IHBlcm1pc3Npb24gPSB7XG4gIGNyZWF0ZVJlY29yZCxcbiAgdXBkYXRlUmVjb3JkLFxuICBkZWxldGVSZWNvcmQsXG4gIHJlYWRSZWNvcmQsXG4gIHdyaXRlVGVtcGxhdGVzLFxuICBjcmVhdGVVc2VyLFxuICBzZXRQYXNzd29yZCxcbiAgcmVhZEluZGV4LFxuICBjcmVhdGVUZW1wb3JhcnlBY2Nlc3MsXG4gIGVuYWJsZURpc2FibGVVc2VyLFxuICB3cml0ZUFjY2Vzc0xldmVscyxcbiAgbGlzdFVzZXJzLFxuICBsaXN0QWNjZXNzTGV2ZWxzLFxuICBtYW5hZ2VJbmRleCxcbiAgbWFuYWdlQ29sbGVjdGlvbixcbiAgZXhlY3V0ZUFjdGlvbixcbiAgc2V0VXNlckFjY2Vzc0xldmVscyxcbn07XG4iLCJpbXBvcnQge1xuICBrZXlCeSwgbWFwVmFsdWVzLFxufSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICdzaG9ydGlkJztcbmltcG9ydCB7IGdldE5vZGVGb3JDb2xsZWN0aW9uUGF0aCB9IGZyb20gJy4uL3RlbXBsYXRlQXBpL2hpZXJhcmNoeSc7XG5pbXBvcnQgeyBnZXROZXdGaWVsZFZhbHVlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgJCwgam9pbktleSwgc2FmZUtleSwgYXBpV3JhcHBlclN5bmMsIGV2ZW50cyxcbn0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IHBlcm1pc3Npb24gfSBmcm9tICcuLi9hdXRoQXBpL3Blcm1pc3Npb25zJztcblxuZXhwb3J0IGNvbnN0IGdldE5ldyA9IGFwcCA9PiAoY29sbGVjdGlvbktleSwgcmVjb3JkVHlwZU5hbWUpID0+IHtcbiAgY29uc3QgcmVjb3JkTm9kZSA9IGdldFJlY29yZE5vZGUoYXBwLCBjb2xsZWN0aW9uS2V5LCByZWNvcmRUeXBlTmFtZSk7XG4gIHJldHVybiBhcGlXcmFwcGVyU3luYyhcbiAgICBhcHAsXG4gICAgZXZlbnRzLnJlY29yZEFwaS5nZXROZXcsXG4gICAgcGVybWlzc2lvbi5jcmVhdGVSZWNvcmQuaXNBdXRob3JpemVkKHJlY29yZE5vZGUubm9kZUtleSgpKSxcbiAgICB7IGNvbGxlY3Rpb25LZXksIHJlY29yZFR5cGVOYW1lIH0sXG4gICAgX2dldE5ldywgcmVjb3JkTm9kZSwgY29sbGVjdGlvbktleSxcbiAgKTtcbn07XG5cbmNvbnN0IF9nZXROZXcgPSAocmVjb3JkTm9kZSwgY29sbGVjdGlvbktleSkgPT4gY29uc3RydWN0UmVjb3JkKHJlY29yZE5vZGUsIGdldE5ld0ZpZWxkVmFsdWUsIGNvbGxlY3Rpb25LZXkpO1xuXG5jb25zdCBnZXRSZWNvcmROb2RlID0gKGFwcCwgY29sbGVjdGlvbktleSkgPT4ge1xuICBjb2xsZWN0aW9uS2V5ID0gc2FmZUtleShjb2xsZWN0aW9uS2V5KTtcbiAgcmV0dXJuIGdldE5vZGVGb3JDb2xsZWN0aW9uUGF0aChhcHAuaGllcmFyY2h5KShjb2xsZWN0aW9uS2V5KTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdDaGlsZCA9IGFwcCA9PiAocmVjb3JkS2V5LCBjb2xsZWN0aW9uTmFtZSwgcmVjb3JkVHlwZU5hbWUpID0+IFxuICBnZXROZXcoYXBwKShqb2luS2V5KHJlY29yZEtleSwgY29sbGVjdGlvbk5hbWUpLCByZWNvcmRUeXBlTmFtZSk7XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RSZWNvcmQgPSAocmVjb3JkTm9kZSwgZ2V0RmllbGRWYWx1ZSwgY29sbGVjdGlvbktleSkgPT4ge1xuICBjb25zdCByZWNvcmQgPSAkKHJlY29yZE5vZGUuZmllbGRzLCBbXG4gICAga2V5QnkoJ25hbWUnKSxcbiAgICBtYXBWYWx1ZXMoZ2V0RmllbGRWYWx1ZSksXG4gIF0pO1xuXG4gIHJlY29yZC5pZCA9IGAke3JlY29yZE5vZGUubm9kZUlkfS0ke2dlbmVyYXRlKCl9YDtcbiAgcmVjb3JkLmtleSA9IGpvaW5LZXkoY29sbGVjdGlvbktleSwgcmVjb3JkLmlkKTtcbiAgcmVjb3JkLmlzTmV3ID0gdHJ1ZTtcbiAgcmVjb3JkLnR5cGUgPSByZWNvcmROb2RlLm5hbWU7XG4gIHJldHVybiByZWNvcmQ7XG59O1xuIiwiaW1wb3J0IHtcbiAga2V5QnksIG1hcFZhbHVlcywgZmlsdGVyLCBcbiAgbWFwLCBpbmNsdWRlcywgbGFzdCxcbn0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7IGdldEV4YWN0Tm9kZUZvclBhdGgsIGdldE5vZGUgfSBmcm9tICcuLi90ZW1wbGF0ZUFwaS9oaWVyYXJjaHknO1xuaW1wb3J0IHsgc2FmZVBhcnNlRmllbGQgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQge1xuICAkLCBzcGxpdEtleSwgc2FmZUtleSwgaXNOb25FbXB0eVN0cmluZyxcbiAgYXBpV3JhcHBlciwgZXZlbnRzLCBqb2luS2V5LFxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgbWFwUmVjb3JkIH0gZnJvbSAnLi4vaW5kZXhpbmcvZXZhbHVhdGUnO1xuaW1wb3J0IHsgcGVybWlzc2lvbiB9IGZyb20gJy4uL2F1dGhBcGkvcGVybWlzc2lvbnMnO1xuXG5leHBvcnQgY29uc3QgZ2V0UmVjb3JkRmlsZU5hbWUgPSBrZXkgPT4gam9pbktleShrZXksICdyZWNvcmQuanNvbicpO1xuXG5leHBvcnQgY29uc3QgbG9hZCA9IGFwcCA9PiBhc3luYyBrZXkgPT4gYXBpV3JhcHBlcihcbiAgYXBwLFxuICBldmVudHMucmVjb3JkQXBpLmxvYWQsXG4gIHBlcm1pc3Npb24ucmVhZFJlY29yZC5pc0F1dGhvcml6ZWQoa2V5KSxcbiAgeyBrZXkgfSxcbiAgX2xvYWQsIGFwcCwga2V5LFxuKTtcblxuZXhwb3J0IGNvbnN0IF9sb2FkID0gYXN5bmMgKGFwcCwga2V5LCBrZXlTdGFjayA9IFtdKSA9PiB7XG4gIGtleSA9IHNhZmVLZXkoa2V5KTtcbiAgY29uc3QgcmVjb3JkTm9kZSA9IGdldEV4YWN0Tm9kZUZvclBhdGgoYXBwLmhpZXJhcmNoeSkoa2V5KTtcbiAgY29uc3Qgc3RvcmVkRGF0YSA9IGF3YWl0IGFwcC5kYXRhc3RvcmUubG9hZEpzb24oXG4gICAgZ2V0UmVjb3JkRmlsZU5hbWUoa2V5KSxcbiAgKTtcblxuICBjb25zdCBsb2FkZWRSZWNvcmQgPSAkKHJlY29yZE5vZGUuZmllbGRzLCBbXG4gICAga2V5QnkoJ25hbWUnKSxcbiAgICBtYXBWYWx1ZXMoZiA9PiBzYWZlUGFyc2VGaWVsZChmLCBzdG9yZWREYXRhKSksXG4gIF0pO1xuXG4gIGNvbnN0IG5ld0tleVN0YWNrID0gWy4uLmtleVN0YWNrLCBrZXldO1xuXG4gIGNvbnN0IHJlZmVyZW5jZXMgPSAkKHJlY29yZE5vZGUuZmllbGRzLCBbXG4gICAgZmlsdGVyKGYgPT4gZi50eXBlID09PSAncmVmZXJlbmNlJ1xuICAgICAgICAgICAgICAgICAgICAmJiBpc05vbkVtcHR5U3RyaW5nKGxvYWRlZFJlY29yZFtmLm5hbWVdLmtleSlcbiAgICAgICAgICAgICAgICAgICAgJiYgIWluY2x1ZGVzKGxvYWRlZFJlY29yZFtmLm5hbWVdLmtleSkobmV3S2V5U3RhY2spKSxcbiAgICBtYXAoZiA9PiAoe1xuICAgICAgcHJvbWlzZTogX2xvYWQoYXBwLCBsb2FkZWRSZWNvcmRbZi5uYW1lXS5rZXksIG5ld0tleVN0YWNrKSxcbiAgICAgIGluZGV4OiBnZXROb2RlKGFwcC5oaWVyYXJjaHksIGYudHlwZU9wdGlvbnMuaW5kZXhOb2RlS2V5KSxcbiAgICAgIGZpZWxkOiBmLFxuICAgIH0pKSxcbiAgXSk7XG5cbiAgaWYgKHJlZmVyZW5jZXMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IHJlZlJlY29yZHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIG1hcChwID0+IHAucHJvbWlzZSkocmVmZXJlbmNlcyksXG4gICAgKTtcblxuICAgIGZvciAoY29uc3QgcmVmIG9mIHJlZmVyZW5jZXMpIHtcbiAgICAgIGxvYWRlZFJlY29yZFtyZWYuZmllbGQubmFtZV0gPSBtYXBSZWNvcmQoXG4gICAgICAgIHJlZlJlY29yZHNbcmVmZXJlbmNlcy5pbmRleE9mKHJlZildLFxuICAgICAgICByZWYuaW5kZXgsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGxvYWRlZFJlY29yZC50cmFuc2FjdGlvbklkID0gc3RvcmVkRGF0YS50cmFuc2FjdGlvbklkO1xuICBsb2FkZWRSZWNvcmQuaXNOZXcgPSBmYWxzZTtcbiAgbG9hZGVkUmVjb3JkLmtleSA9IGtleTtcbiAgbG9hZGVkUmVjb3JkLmlkID0gJChrZXksIFtzcGxpdEtleSwgbGFzdF0pO1xuICBsb2FkZWRSZWNvcmQudHlwZSA9IHJlY29yZE5vZGUubmFtZTtcbiAgcmV0dXJuIGxvYWRlZFJlY29yZDtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGxvYWQ7XG4iLCIvLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2RleDRlci9qcy1wcm9taXNlLXJlYWRhYmxlXHJcbi8vIHRoYW5rcyA6KVxyXG4gIFxyXG5leHBvcnQgY29uc3QgcHJvbWlzZVJlYWRhYmxlU3RyZWFtID0gc3RyZWFtID0+IHtcclxuICAgXHJcbiAgICBsZXQgX2Vycm9yZWQ7XHJcblxyXG4gICAgY29uc3QgX2Vycm9ySGFuZGxlciA9IGVyciA9PiB7XHJcbiAgICAgICAgX2Vycm9yZWQgPSBlcnI7XHJcbiAgICB9O1xyXG5cclxuICAgIHN0cmVhbS5vbihcImVycm9yXCIsIF9lcnJvckhhbmRsZXIpO1xyXG4gIFxyXG4gICAgY29uc3QgcmVhZCA9IChzaXplKSA9PiB7XHJcbiAgXHJcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgICAgaWYgKF9lcnJvcmVkKSB7XHJcbiAgICAgICAgICBjb25zdCBlcnIgPSBfZXJyb3JlZDtcclxuICAgICAgICAgIF9lcnJvcmVkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpXHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGlmICghc3RyZWFtLnJlYWRhYmxlIHx8IHN0cmVhbS5jbG9zZWQgfHwgc3RyZWFtLmRlc3Ryb3llZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgY29uc3QgcmVhZGFibGVIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgICAgICAgY29uc3QgY2h1bmsgPSBzdHJlYW0ucmVhZChzaXplKTtcclxuICBcclxuICAgICAgICAgIGlmIChjaHVuaykge1xyXG4gICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShjaHVuayk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNvbnN0IGNsb3NlSGFuZGxlciA9ICgpID0+IHtcclxuICAgICAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xyXG4gICAgICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjb25zdCBlbmRIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNvbnN0IGVycm9ySGFuZGxlciA9IChlcnIpID0+IHtcclxuICAgICAgICAgIF9lcnJvcmVkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XHJcbiAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlTGlzdGVuZXJzID0gKCkgPT4ge1xyXG4gICAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIiwgY2xvc2VIYW5kbGVyKTtcclxuICAgICAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsIGVycm9ySGFuZGxlcik7XHJcbiAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIiwgZW5kSGFuZGxlcik7XHJcbiAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJyZWFkYWJsZVwiLCByZWFkYWJsZUhhbmRsZXIpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBzdHJlYW0ub24oXCJjbG9zZVwiLCBjbG9zZUhhbmRsZXIpO1xyXG4gICAgICAgIHN0cmVhbS5vbihcImVuZFwiLCBlbmRIYW5kbGVyKTtcclxuICAgICAgICBzdHJlYW0ub24oXCJlcnJvclwiLCBlcnJvckhhbmRsZXIpO1xyXG4gICAgICAgIHN0cmVhbS5vbihcInJlYWRhYmxlXCIsIHJlYWRhYmxlSGFuZGxlcik7XHJcbiAgXHJcbiAgICAgICAgcmVhZGFibGVIYW5kbGVyKCk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIFxyXG4gIFxyXG4gICAgY29uc3QgZGVzdHJveSA9ICgpID0+IHtcclxuICAgICAgaWYgKHN0cmVhbSkge1xyXG4gICAgICAgIGlmIChfZXJyb3JIYW5kbGVyKSB7XHJcbiAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCBfZXJyb3JIYW5kbGVyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHR5cGVvZiBzdHJlYW0uZGVzdHJveSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcbiAgICAgICAgICBzdHJlYW0uZGVzdHJveSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfTtcclxuICBcclxuICAgIHJldHVybiB7cmVhZCwgZGVzdHJveSwgc3RyZWFtfTtcclxuICB9XHJcbiAgXHJcbiAgZXhwb3J0IGRlZmF1bHQgcHJvbWlzZVJlYWRhYmxlU3RyZWFtXHJcbiAgIiwiaW1wb3J0IHsgY29tcGlsZUNvZGUgfSBmcm9tICdAbngtanMvY29tcGlsZXItdXRpbCc7XG5pbXBvcnQge1xuICBmaWx0ZXIsIGluY2x1ZGVzLCBtYXAsIGxhc3QsXG59IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQge1xuICBnZXRBY3R1YWxLZXlPZlBhcmVudCwgaXNHbG9iYWxJbmRleCxcbiAgZ2V0UGFyZW50S2V5LCBpc1NoYXJkZWRJbmRleCxcbiAgZ2V0RXhhY3ROb2RlRm9yUGF0aCxcbn0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7XG4gIGpvaW5LZXksIGlzTm9uRW1wdHlTdHJpbmcsIHNwbGl0S2V5LCAkLFxufSBmcm9tICcuLi9jb21tb24nO1xuXG5leHBvcnQgY29uc3QgZ2V0SW5kZXhlZERhdGFLZXkgPSAoaW5kZXhOb2RlLCBpbmRleEtleSwgcmVjb3JkKSA9PiB7XG4gIGNvbnN0IGdldFNoYXJkTmFtZSA9IChpbmRleE5vZGUsIHJlY29yZCkgPT4ge1xuICAgIGNvbnN0IHNoYXJkTmFtZUZ1bmMgPSBjb21waWxlQ29kZShpbmRleE5vZGUuZ2V0U2hhcmROYW1lKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHNoYXJkTmFtZUZ1bmMoeyByZWNvcmQgfSk7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBjb25zdCBlcnJvckRldGFpbHMgPSBgc2hhcmRDb2RlOiAke2luZGV4Tm9kZS5nZXRTaGFyZE5hbWV9IDo6IHJlY29yZDogJHtKU09OLnN0cmluZ2lmeShyZWNvcmQpfSA6OiBgXG4gICAgICBlLm1lc3NhZ2UgPSBcIkVycm9yIHJ1bm5pbmcgaW5kZXggc2hhcmRuYW1lIGZ1bmM6IFwiICsgZXJyb3JEZXRhaWxzICsgZS5tZXNzYWdlO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgc2hhcmROYW1lID0gaXNOb25FbXB0eVN0cmluZyhpbmRleE5vZGUuZ2V0U2hhcmROYW1lKVxuICAgID8gYCR7Z2V0U2hhcmROYW1lKGluZGV4Tm9kZSwgcmVjb3JkKX0uY3N2YFxuICAgIDogJ2luZGV4LmNzdic7XG5cbiAgcmV0dXJuIGpvaW5LZXkoaW5kZXhLZXksIHNoYXJkTmFtZSk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0U2hhcmRLZXlzSW5SYW5nZSA9IGFzeW5jIChhcHAsIGluZGV4S2V5LCBzdGFydFJlY29yZCA9IG51bGwsIGVuZFJlY29yZCA9IG51bGwpID0+IHtcbiAgY29uc3QgaW5kZXhOb2RlID0gZ2V0RXhhY3ROb2RlRm9yUGF0aChhcHAuaGllcmFyY2h5KShpbmRleEtleSk7XG5cbiAgY29uc3Qgc3RhcnRTaGFyZE5hbWUgPSAhc3RhcnRSZWNvcmRcbiAgICA/IG51bGxcbiAgICA6IHNoYXJkTmFtZUZyb21LZXkoXG4gICAgICBnZXRJbmRleGVkRGF0YUtleShcbiAgICAgICAgaW5kZXhOb2RlLFxuICAgICAgICBpbmRleEtleSxcbiAgICAgICAgc3RhcnRSZWNvcmQsXG4gICAgICApLFxuICAgICk7XG5cbiAgY29uc3QgZW5kU2hhcmROYW1lID0gIWVuZFJlY29yZFxuICAgID8gbnVsbFxuICAgIDogc2hhcmROYW1lRnJvbUtleShcbiAgICAgIGdldEluZGV4ZWREYXRhS2V5KFxuICAgICAgICBpbmRleE5vZGUsXG4gICAgICAgIGluZGV4S2V5LFxuICAgICAgICBlbmRSZWNvcmQsXG4gICAgICApLFxuICAgICk7XG5cbiAgcmV0dXJuICQoYXdhaXQgZ2V0U2hhcmRNYXAoYXBwLmRhdGFzdG9yZSwgaW5kZXhLZXkpLCBbXG4gICAgZmlsdGVyKGsgPT4gKHN0YXJ0UmVjb3JkID09PSBudWxsIHx8IGsgPj0gc3RhcnRTaGFyZE5hbWUpXG4gICAgICAgICAgICAgICAgICAgICYmIChlbmRSZWNvcmQgPT09IG51bGwgfHwgayA8PSBlbmRTaGFyZE5hbWUpKSxcbiAgICBtYXAoayA9PiBqb2luS2V5KGluZGV4S2V5LCBgJHtrfS5jc3ZgKSksXG4gIF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGVuc3VyZVNoYXJkTmFtZUlzSW5TaGFyZE1hcCA9IGFzeW5jIChzdG9yZSwgaW5kZXhLZXksIGluZGV4ZWREYXRhS2V5KSA9PiB7XG4gIGNvbnN0IG1hcCA9IGF3YWl0IGdldFNoYXJkTWFwKHN0b3JlLCBpbmRleEtleSk7XG4gIGNvbnN0IHNoYXJkTmFtZSA9IHNoYXJkTmFtZUZyb21LZXkoaW5kZXhlZERhdGFLZXkpO1xuICBpZiAoIWluY2x1ZGVzKHNoYXJkTmFtZSkobWFwKSkge1xuICAgIG1hcC5wdXNoKHNoYXJkTmFtZSk7XG4gICAgYXdhaXQgd3JpdGVTaGFyZE1hcChzdG9yZSwgaW5kZXhLZXksIG1hcCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBnZXRTaGFyZE1hcCA9IGFzeW5jIChkYXRhc3RvcmUsIGluZGV4S2V5KSA9PiB7XG4gIGNvbnN0IHNoYXJkTWFwS2V5ID0gZ2V0U2hhcmRNYXBLZXkoaW5kZXhLZXkpO1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBkYXRhc3RvcmUubG9hZEpzb24oc2hhcmRNYXBLZXkpO1xuICB9IGNhdGNoIChfKSB7XG4gICAgYXdhaXQgZGF0YXN0b3JlLmNyZWF0ZUpzb24oc2hhcmRNYXBLZXksIFtdKTtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCB3cml0ZVNoYXJkTWFwID0gYXN5bmMgKGRhdGFzdG9yZSwgaW5kZXhLZXksIHNoYXJkTWFwKSA9PiBhd2FpdCBkYXRhc3RvcmUudXBkYXRlSnNvbihcbiAgZ2V0U2hhcmRNYXBLZXkoaW5kZXhLZXkpLFxuICBzaGFyZE1hcCxcbik7XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxTaGFyZEtleXMgPSBhc3luYyAoYXBwLCBpbmRleEtleSkgPT4gYXdhaXQgZ2V0U2hhcmRLZXlzSW5SYW5nZShhcHAsIGluZGV4S2V5KTtcblxuZXhwb3J0IGNvbnN0IGdldFNoYXJkTWFwS2V5ID0gaW5kZXhLZXkgPT4gam9pbktleShpbmRleEtleSwgJ3NoYXJkTWFwLmpzb24nKTtcblxuZXhwb3J0IGNvbnN0IGdldFVuc2hhcmRlZEluZGV4RGF0YUtleSA9IGluZGV4S2V5ID0+IGpvaW5LZXkoaW5kZXhLZXksICdpbmRleC5jc3YnKTtcblxuZXhwb3J0IGNvbnN0IGdldEluZGV4Rm9sZGVyS2V5ID0gaW5kZXhLZXkgPT4gaW5kZXhLZXk7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVJbmRleEZpbGUgPSBhc3luYyAoZGF0YXN0b3JlLCBpbmRleGVkRGF0YUtleSwgaW5kZXgpID0+IHtcbiAgaWYgKGlzU2hhcmRlZEluZGV4KGluZGV4KSkge1xuICAgIGNvbnN0IGluZGV4S2V5ID0gZ2V0UGFyZW50S2V5KGluZGV4ZWREYXRhS2V5KTtcbiAgICBjb25zdCBzaGFyZE1hcCA9IGF3YWl0IGdldFNoYXJkTWFwKGRhdGFzdG9yZSwgaW5kZXhLZXkpO1xuICAgIHNoYXJkTWFwLnB1c2goXG4gICAgICBzaGFyZE5hbWVGcm9tS2V5KGluZGV4ZWREYXRhS2V5KSxcbiAgICApO1xuICAgIGF3YWl0IHdyaXRlU2hhcmRNYXAoZGF0YXN0b3JlLCBpbmRleEtleSwgc2hhcmRNYXApO1xuICB9XG4gIGF3YWl0IGRhdGFzdG9yZS5jcmVhdGVGaWxlKGluZGV4ZWREYXRhS2V5LCAnJyk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hhcmROYW1lRnJvbUtleSA9IGtleSA9PiAkKGtleSwgW1xuICBzcGxpdEtleSxcbiAgbGFzdCxcbl0pLnJlcGxhY2UoJy5jc3YnLCAnJyk7XG5cbmV4cG9ydCBjb25zdCBnZXRJbmRleEtleV9CYXNlZE9uRGVjZW5kYW50ID0gKGRlY2VuZGFudEtleSwgaW5kZXhOb2RlKSA9PiB7XG4gIGlmIChpc0dsb2JhbEluZGV4KGluZGV4Tm9kZSkpIHsgcmV0dXJuIGAke2luZGV4Tm9kZS5ub2RlS2V5KCl9YDsgfVxuXG4gIGNvbnN0IGluZGV4ZWREYXRhUGFyZW50S2V5ID0gZ2V0QWN0dWFsS2V5T2ZQYXJlbnQoXG4gICAgaW5kZXhOb2RlLnBhcmVudCgpLm5vZGVLZXkoKSxcbiAgICBkZWNlbmRhbnRLZXksXG4gICk7XG5cbiAgcmV0dXJuIGpvaW5LZXkoXG4gICAgaW5kZXhlZERhdGFQYXJlbnRLZXksXG4gICAgaW5kZXhOb2RlLm5hbWUsXG4gICk7XG59O1xuIiwiaW1wb3J0IHtcbiAgaGFzLCBrZXlzLCBtYXAsIG9yZGVyQnksXG4gIGZpbHRlciwgY29uY2F0LCByZXZlcnNlLFxufSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgZ2V0QWxsb3dlZFJlY29yZE5vZGVzRm9ySW5kZXggfSBmcm9tICcuLi90ZW1wbGF0ZUFwaS9oaWVyYXJjaHknO1xuaW1wb3J0IHsgbWFwUmVjb3JkIH0gZnJvbSAnLi9ldmFsdWF0ZSc7XG5pbXBvcnQgeyBjb25zdHJ1Y3RSZWNvcmQgfSBmcm9tICcuLi9yZWNvcmRBcGkvZ2V0TmV3JztcbmltcG9ydCB7IGdldFNhbXBsZUZpZWxkVmFsdWUsIGRldGVjdFR5cGUsIGFsbCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7ICQgfSBmcm9tICcuLi9jb21tb24nO1xuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVTY2hlbWEgPSAoaGllcmFyY2h5LCBpbmRleE5vZGUpID0+IHtcbiAgY29uc3QgcmVjb3JkTm9kZXMgPSBnZXRBbGxvd2VkUmVjb3JkTm9kZXNGb3JJbmRleChoaWVyYXJjaHksIGluZGV4Tm9kZSk7XG4gIGNvbnN0IG1hcHBlZFJlY29yZHMgPSAkKHJlY29yZE5vZGVzLCBbXG4gICAgbWFwKG4gPT4gbWFwUmVjb3JkKGNyZWF0ZVNhbXBsZVJlY29yZChuKSwgaW5kZXhOb2RlKSksXG4gIF0pO1xuXG4gIC8vIGFsd2F5cyBoYXMgcmVjb3JkIGtleSBhbmQgc29ydCBrZXlcbiAgY29uc3Qgc2NoZW1hID0ge1xuICAgIHNvcnRLZXk6IGFsbC5zdHJpbmcsXG4gICAga2V5OiBhbGwuc3RyaW5nLFxuICB9O1xuXG4gIGNvbnN0IGZpZWxkc0hhcyA9IGhhcyhzY2hlbWEpO1xuICBjb25zdCBzZXRGaWVsZCA9IChmaWVsZE5hbWUsIHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHsgcmV0dXJuOyB9XG5cbiAgICBjb25zdCB0aGlzVHlwZSA9IGRldGVjdFR5cGUodmFsdWUpO1xuICAgIGlmIChmaWVsZHNIYXMoZmllbGROYW1lKSkge1xuICAgICAgaWYgKHNjaGVtYVtmaWVsZE5hbWVdICE9PSB0aGlzVHlwZSkge1xuICAgICAgICBzY2hlbWFbZmllbGROYW1lXSA9IGFsbC5zdHJpbmc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHNjaGVtYVtmaWVsZE5hbWVdID0gdGhpc1R5cGU7XG4gICAgfVxuICB9O1xuXG4gIGZvciAoY29uc3QgbWFwcGVkUmVjIG9mIG1hcHBlZFJlY29yZHMpIHtcbiAgICBmb3IgKGNvbnN0IGYgaW4gbWFwcGVkUmVjKSB7XG4gICAgICBzZXRGaWVsZChmLCBtYXBwZWRSZWNbZl0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIHJldHVyaW5nIGFuIGFycmF5IG9mIHtuYW1lLCB0eXBlfVxuICByZXR1cm4gJChzY2hlbWEsIFtcbiAgICBrZXlzLFxuICAgIG1hcChrID0+ICh7IG5hbWU6IGssIHR5cGU6IHNjaGVtYVtrXS5uYW1lIH0pKSxcbiAgICBmaWx0ZXIocyA9PiBzLm5hbWUgIT09ICdzb3J0S2V5JyksXG4gICAgb3JkZXJCeSgnbmFtZScsIFsnZGVzYyddKSwgLy8gcmV2ZXJzZSBhcGxoYVxuICAgIGNvbmNhdChbeyBuYW1lOiAnc29ydEtleScsIHR5cGU6IGFsbC5zdHJpbmcubmFtZSB9XSksIC8vIHNvcnRLZXkgb24gZW5kXG4gICAgcmV2ZXJzZSwgLy8gc29ydEtleSBmaXJzdCwgdGhlbiByZXN0IGFyZSBhbHBoYWJldGljYWxcbiAgXSk7XG59O1xuXG5jb25zdCBjcmVhdGVTYW1wbGVSZWNvcmQgPSByZWNvcmROb2RlID0+IGNvbnN0cnVjdFJlY29yZChcbiAgcmVjb3JkTm9kZSxcbiAgZ2V0U2FtcGxlRmllbGRWYWx1ZSxcbiAgcmVjb3JkTm9kZS5wYXJlbnQoKS5ub2RlS2V5KCksXG4pO1xuIiwiZXhwb3J0IGRlZmF1bHQgKHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOlxuICAgICAgICAgICAgdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDpcbiAgICAgICAgICAgIHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgPyB3aW5kb3cgOiB7fSk7XG4iLCJcbnZhciBsb29rdXAgPSBbXVxudmFyIHJldkxvb2t1cCA9IFtdXG52YXIgQXJyID0gdHlwZW9mIFVpbnQ4QXJyYXkgIT09ICd1bmRlZmluZWQnID8gVWludDhBcnJheSA6IEFycmF5XG52YXIgaW5pdGVkID0gZmFsc2U7XG5mdW5jdGlvbiBpbml0ICgpIHtcbiAgaW5pdGVkID0gdHJ1ZTtcbiAgdmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBsb29rdXBbaV0gPSBjb2RlW2ldXG4gICAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG4gIH1cblxuICByZXZMb29rdXBbJy0nLmNoYXJDb2RlQXQoMCldID0gNjJcbiAgcmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0J5dGVBcnJheSAoYjY0KSB7XG4gIGlmICghaW5pdGVkKSB7XG4gICAgaW5pdCgpO1xuICB9XG4gIHZhciBpLCBqLCBsLCB0bXAsIHBsYWNlSG9sZGVycywgYXJyXG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIHRoZSBudW1iZXIgb2YgZXF1YWwgc2lnbnMgKHBsYWNlIGhvbGRlcnMpXG4gIC8vIGlmIHRoZXJlIGFyZSB0d28gcGxhY2Vob2xkZXJzLCB0aGFuIHRoZSB0d28gY2hhcmFjdGVycyBiZWZvcmUgaXRcbiAgLy8gcmVwcmVzZW50IG9uZSBieXRlXG4gIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lLCB0aGVuIHRoZSB0aHJlZSBjaGFyYWN0ZXJzIGJlZm9yZSBpdCByZXByZXNlbnQgMiBieXRlc1xuICAvLyB0aGlzIGlzIGp1c3QgYSBjaGVhcCBoYWNrIHRvIG5vdCBkbyBpbmRleE9mIHR3aWNlXG4gIHBsYWNlSG9sZGVycyA9IGI2NFtsZW4gLSAyXSA9PT0gJz0nID8gMiA6IGI2NFtsZW4gLSAxXSA9PT0gJz0nID8gMSA6IDBcblxuICAvLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbiAgYXJyID0gbmV3IEFycihsZW4gKiAzIC8gNCAtIHBsYWNlSG9sZGVycylcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIGwgPSBwbGFjZUhvbGRlcnMgPiAwID8gbGVuIC0gNCA6IGxlblxuXG4gIHZhciBMID0gMFxuXG4gIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbDsgaSArPSA0LCBqICs9IDMpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbTCsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnMgPT09IDIpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9IGVsc2UgaWYgKHBsYWNlSG9sZGVycyA9PT0gMSkge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICsgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9ICh1aW50OFtpXSA8PCAxNikgKyAodWludDhbaSArIDFdIDw8IDgpICsgKHVpbnQ4W2kgKyAyXSlcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmcm9tQnl0ZUFycmF5ICh1aW50OCkge1xuICBpZiAoIWluaXRlZCkge1xuICAgIGluaXQoKTtcbiAgfVxuICB2YXIgdG1wXG4gIHZhciBsZW4gPSB1aW50OC5sZW5ndGhcbiAgdmFyIGV4dHJhQnl0ZXMgPSBsZW4gJSAzIC8vIGlmIHdlIGhhdmUgMSBieXRlIGxlZnQsIHBhZCAyIGJ5dGVzXG4gIHZhciBvdXRwdXQgPSAnJ1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFt0bXAgPj4gMl1cbiAgICBvdXRwdXQgKz0gbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXVxuICAgIG91dHB1dCArPSAnPT0nXG4gIH0gZWxzZSBpZiAoZXh0cmFCeXRlcyA9PT0gMikge1xuICAgIHRtcCA9ICh1aW50OFtsZW4gLSAyXSA8PCA4KSArICh1aW50OFtsZW4gLSAxXSlcbiAgICBvdXRwdXQgKz0gbG9va3VwW3RtcCA+PiAxMF1cbiAgICBvdXRwdXQgKz0gbG9va3VwWyh0bXAgPj4gNCkgJiAweDNGXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA8PCAyKSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9ICc9J1xuICB9XG5cbiAgcGFydHMucHVzaChvdXRwdXQpXG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCJcbmV4cG9ydCBmdW5jdGlvbiByZWFkIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdyaXRlIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwidmFyIHRvU3RyaW5nID0ge30udG9TdHJpbmc7XG5cbmV4cG9ydCBkZWZhdWx0IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuIiwiLyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gKi9cblxuXG5pbXBvcnQgKiBhcyBiYXNlNjQgZnJvbSAnLi9iYXNlNjQnXG5pbXBvcnQgKiBhcyBpZWVlNzU0IGZyb20gJy4vaWVlZTc1NCdcbmltcG9ydCBpc0FycmF5IGZyb20gJy4vaXNBcnJheSdcblxuZXhwb3J0IHZhciBJTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHJ1ZVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG52YXIgX2tNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcbmV4cG9ydCB7X2tNYXhMZW5ndGggYXMga01heExlbmd0aH07XG5mdW5jdGlvbiB0eXBlZEFycmF5U3VwcG9ydCAoKSB7XG4gIHJldHVybiB0cnVlO1xuICAvLyByb2xsdXAgaXNzdWVzXG4gIC8vIHRyeSB7XG4gIC8vICAgdmFyIGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gIC8vICAgYXJyLl9fcHJvdG9fXyA9IHtcbiAgLy8gICAgIF9fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsXG4gIC8vICAgICBmb286IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDQyIH1cbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIGFyci5mb28oKSA9PT0gNDIgJiYgLy8gdHlwZWQgYXJyYXkgaW5zdGFuY2VzIGNhbiBiZSBhdWdtZW50ZWRcbiAgLy8gICAgICAgdHlwZW9mIGFyci5zdWJhcnJheSA9PT0gJ2Z1bmN0aW9uJyAmJiAvLyBjaHJvbWUgOS0xMCBsYWNrIGBzdWJhcnJheWBcbiAgLy8gICAgICAgYXJyLnN1YmFycmF5KDEsIDEpLmJ5dGVMZW5ndGggPT09IDAgLy8gaWUxMCBoYXMgYnJva2VuIGBzdWJhcnJheWBcbiAgLy8gfSBjYXRjaCAoZSkge1xuICAvLyAgIHJldHVybiBmYWxzZVxuICAvLyB9XG59XG5cbmZ1bmN0aW9uIGtNYXhMZW5ndGggKCkge1xuICByZXR1cm4gQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRcbiAgICA/IDB4N2ZmZmZmZmZcbiAgICA6IDB4M2ZmZmZmZmZcbn1cblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyICh0aGF0LCBsZW5ndGgpIHtcbiAgaWYgKGtNYXhMZW5ndGgoKSA8IGxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCcpXG4gIH1cbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2UsIGZvciBiZXN0IHBlcmZvcm1hbmNlXG4gICAgdGhhdCA9IG5ldyBVaW50OEFycmF5KGxlbmd0aClcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgaWYgKHRoYXQgPT09IG51bGwpIHtcbiAgICAgIHRoYXQgPSBuZXcgQnVmZmVyKGxlbmd0aClcbiAgICB9XG4gICAgdGhhdC5sZW5ndGggPSBsZW5ndGhcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIC8vIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgLy8gICB2YWx1ZTogbnVsbCxcbiAgICAvLyAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIC8vIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKGludGVybmFsSXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5leHBvcnQgZnVuY3Rpb24gU2xvd0J1ZmZlciAobGVuZ3RoKSB7XG4gIGlmICgrbGVuZ3RoICE9IGxlbmd0aCkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGVxZXFlcVxuICAgIGxlbmd0aCA9IDBcbiAgfVxuICByZXR1cm4gQnVmZmVyLmFsbG9jKCtsZW5ndGgpXG59XG5CdWZmZXIuaXNCdWZmZXIgPSBpc0J1ZmZlcjtcbmZ1bmN0aW9uIGludGVybmFsSXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghaW50ZXJuYWxJc0J1ZmZlcihhKSB8fCAhaW50ZXJuYWxJc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFpbnRlcm5hbElzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChpbnRlcm5hbElzQnVmZmVyKHN0cmluZykpIHtcbiAgICByZXR1cm4gc3RyaW5nLmxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIChBcnJheUJ1ZmZlci5pc1ZpZXcoc3RyaW5nKSB8fCBzdHJpbmcgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICBzdHJpbmcgPSAnJyArIHN0cmluZ1xuICB9XG5cbiAgdmFyIGxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKGxlbiA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBVc2UgYSBmb3IgbG9vcCB0byBhdm9pZCByZWN1cnNpb25cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGVuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiBsZW4gKiAyXG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gbGVuID4+PiAxXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSByZXR1cm4gdXRmOFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGggLy8gYXNzdW1lIHV0ZjhcbiAgICAgICAgZW5jb2RpbmcgPSAoJycgKyBlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cbkJ1ZmZlci5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aFxuXG5mdW5jdGlvbiBzbG93VG9TdHJpbmcgKGVuY29kaW5nLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG5cbiAgLy8gTm8gbmVlZCB0byB2ZXJpZnkgdGhhdCBcInRoaXMubGVuZ3RoIDw9IE1BWF9VSU5UMzJcIiBzaW5jZSBpdCdzIGEgcmVhZC1vbmx5XG4gIC8vIHByb3BlcnR5IG9mIGEgdHlwZWQgYXJyYXkuXG5cbiAgLy8gVGhpcyBiZWhhdmVzIG5laXRoZXIgbGlrZSBTdHJpbmcgbm9yIFVpbnQ4QXJyYXkgaW4gdGhhdCB3ZSBzZXQgc3RhcnQvZW5kXG4gIC8vIHRvIHRoZWlyIHVwcGVyL2xvd2VyIGJvdW5kcyBpZiB0aGUgdmFsdWUgcGFzc2VkIGlzIG91dCBvZiByYW5nZS5cbiAgLy8gdW5kZWZpbmVkIGlzIGhhbmRsZWQgc3BlY2lhbGx5IGFzIHBlciBFQ01BLTI2MiA2dGggRWRpdGlvbixcbiAgLy8gU2VjdGlvbiAxMy4zLjMuNyBSdW50aW1lIFNlbWFudGljczogS2V5ZWRCaW5kaW5nSW5pdGlhbGl6YXRpb24uXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkIHx8IHN0YXJ0IDwgMCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIC8vIFJldHVybiBlYXJseSBpZiBzdGFydCA+IHRoaXMubGVuZ3RoLiBEb25lIGhlcmUgdG8gcHJldmVudCBwb3RlbnRpYWwgdWludDMyXG4gIC8vIGNvZXJjaW9uIGZhaWwgYmVsb3cuXG4gIGlmIChzdGFydCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoZW5kID09PSB1bmRlZmluZWQgfHwgZW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKGVuZCA8PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyBGb3JjZSBjb2Vyc2lvbiB0byB1aW50MzIuIFRoaXMgd2lsbCBhbHNvIGNvZXJjZSBmYWxzZXkvTmFOIHZhbHVlcyB0byAwLlxuICBlbmQgPj4+PSAwXG4gIHN0YXJ0ID4+Pj0gMFxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdXRmMTZsZVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9IChlbmNvZGluZyArICcnKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG4vLyBUaGUgcHJvcGVydHkgaXMgdXNlZCBieSBgQnVmZmVyLmlzQnVmZmVyYCBhbmQgYGlzLWJ1ZmZlcmAgKGluIFNhZmFyaSA1LTcpIHRvIGRldGVjdFxuLy8gQnVmZmVyIGluc3RhbmNlcy5cbkJ1ZmZlci5wcm90b3R5cGUuX2lzQnVmZmVyID0gdHJ1ZVxuXG5mdW5jdGlvbiBzd2FwIChiLCBuLCBtKSB7XG4gIHZhciBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgMiAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gMikge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDEpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMzIgPSBmdW5jdGlvbiBzd2FwMzIgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDQpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAzKVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyAyKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDY0ID0gZnVuY3Rpb24gc3dhcDY0ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICB2YXIgbGVuZ3RoID0gdGhpcy5sZW5ndGggfCAwXG4gIGlmIChsZW5ndGggPT09IDApIHJldHVybiAnJ1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCAwLCBsZW5ndGgpXG4gIHJldHVybiBzbG93VG9TdHJpbmcuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmVxdWFscyA9IGZ1bmN0aW9uIGVxdWFscyAoYikge1xuICBpZiAoIWludGVybmFsSXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IElOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIWludGVybmFsSXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgdmFyIHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIHZhciB5ID0gZW5kIC0gc3RhcnRcbiAgdmFyIGxlbiA9IE1hdGgubWluKHgsIHkpXG5cbiAgdmFyIHRoaXNDb3B5ID0gdGhpcy5zbGljZSh0aGlzU3RhcnQsIHRoaXNFbmQpXG4gIHZhciB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAgLy8gQ29lcmNlIHRvIE51bWJlci5cbiAgaWYgKGlzTmFOKGJ5dGVPZmZzZXQpKSB7XG4gICAgLy8gYnl0ZU9mZnNldDogaXQgaXQncyB1bmRlZmluZWQsIG51bGwsIE5hTiwgXCJmb29cIiwgZXRjLCBzZWFyY2ggd2hvbGUgYnVmZmVyXG4gICAgYnl0ZU9mZnNldCA9IGRpciA/IDAgOiAoYnVmZmVyLmxlbmd0aCAtIDEpXG4gIH1cblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldDogbmVnYXRpdmUgb2Zmc2V0cyBzdGFydCBmcm9tIHRoZSBlbmQgb2YgdGhlIGJ1ZmZlclxuICBpZiAoYnl0ZU9mZnNldCA8IDApIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoICsgYnl0ZU9mZnNldFxuICBpZiAoYnl0ZU9mZnNldCA+PSBidWZmZXIubGVuZ3RoKSB7XG4gICAgaWYgKGRpcikgcmV0dXJuIC0xXG4gICAgZWxzZSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCAtIDFcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgMCkge1xuICAgIGlmIChkaXIpIGJ5dGVPZmZzZXQgPSAwXG4gICAgZWxzZSByZXR1cm4gLTFcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSB2YWxcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsID0gQnVmZmVyLmZyb20odmFsLCBlbmNvZGluZylcbiAgfVxuXG4gIC8vIEZpbmFsbHksIHNlYXJjaCBlaXRoZXIgaW5kZXhPZiAoaWYgZGlyIGlzIHRydWUpIG9yIGxhc3RJbmRleE9mXG4gIGlmIChpbnRlcm5hbElzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghaW50ZXJuYWxJc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IGludGVybmFsSXNCdWZmZXIodmFsKVxuICAgICAgPyB2YWxcbiAgICAgIDogdXRmOFRvQnl0ZXMobmV3IEJ1ZmZlcih2YWwsIGVuY29kaW5nKS50b1N0cmluZygpKVxuICAgIHZhciBsZW4gPSBieXRlcy5sZW5ndGhcbiAgICBmb3IgKGkgPSAwOyBpIDwgZW5kIC0gc3RhcnQ7ICsraSkge1xuICAgICAgdGhpc1tpICsgc3RhcnRdID0gYnl0ZXNbaSAlIGxlbl1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpc1xufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbnZhciBJTlZBTElEX0JBU0U2NF9SRSA9IC9bXitcXC8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgc3RyaXBzIG91dCBpbnZhbGlkIGNoYXJhY3RlcnMgbGlrZSBcXG4gYW5kIFxcdCBmcm9tIHRoZSBzdHJpbmcsIGJhc2U2NC1qcyBkb2VzIG5vdFxuICBzdHIgPSBzdHJpbmd0cmltKHN0cikucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gc3RyaW5ndHJpbSAoc3RyKSB7XG4gIGlmIChzdHIudHJpbSkgcmV0dXJuIHN0ci50cmltKClcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJylcbn1cblxuZnVuY3Rpb24gdG9IZXggKG4pIHtcbiAgaWYgKG4gPCAxNikgcmV0dXJuICcwJyArIG4udG9TdHJpbmcoMTYpXG4gIHJldHVybiBuLnRvU3RyaW5nKDE2KVxufVxuXG5mdW5jdGlvbiB1dGY4VG9CeXRlcyAoc3RyaW5nLCB1bml0cykge1xuICB1bml0cyA9IHVuaXRzIHx8IEluZmluaXR5XG4gIHZhciBjb2RlUG9pbnRcbiAgdmFyIGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgdmFyIGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIHZhciBieXRlcyA9IFtdXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvZGVQb2ludCA9IHN0cmluZy5jaGFyQ29kZUF0KGkpXG5cbiAgICAvLyBpcyBzdXJyb2dhdGUgY29tcG9uZW50XG4gICAgaWYgKGNvZGVQb2ludCA+IDB4RDdGRiAmJiBjb2RlUG9pbnQgPCAweEUwMDApIHtcbiAgICAgIC8vIGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoIWxlYWRTdXJyb2dhdGUpIHtcbiAgICAgICAgLy8gbm8gbGVhZCB5ZXRcbiAgICAgICAgaWYgKGNvZGVQb2ludCA+IDB4REJGRikge1xuICAgICAgICAgIC8vIHVuZXhwZWN0ZWQgdHJhaWxcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9IGVsc2UgaWYgKGkgKyAxID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAvLyB1bnBhaXJlZCBsZWFkXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkIGxlYWRcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIgbGVhZHMgaW4gYSByb3dcbiAgICAgIGlmIChjb2RlUG9pbnQgPCAweERDMDApIHtcbiAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gdmFsaWQgc3Vycm9nYXRlIHBhaXJcbiAgICAgIGNvZGVQb2ludCA9IChsZWFkU3Vycm9nYXRlIC0gMHhEODAwIDw8IDEwIHwgY29kZVBvaW50IC0gMHhEQzAwKSArIDB4MTAwMDBcbiAgICB9IGVsc2UgaWYgKGxlYWRTdXJyb2dhdGUpIHtcbiAgICAgIC8vIHZhbGlkIGJtcCBjaGFyLCBidXQgbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgIH1cblxuICAgIGxlYWRTdXJyb2dhdGUgPSBudWxsXG5cbiAgICAvLyBlbmNvZGUgdXRmOFxuICAgIGlmIChjb2RlUG9pbnQgPCAweDgwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDEpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goY29kZVBvaW50KVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHg4MDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiB8IDB4QzAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDMpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgfCAweEUwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDExMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSA0KSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHgxMiB8IDB4RjAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweEMgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29kZSBwb2ludCcpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpVG9CeXRlcyAoc3RyKSB7XG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIC8vIE5vZGUncyBjb2RlIHNlZW1zIHRvIGJlIGRvaW5nIHRoaXMgYW5kIG5vdCAmIDB4N0YuLlxuICAgIGJ5dGVBcnJheS5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpICYgMHhGRilcbiAgfVxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVUb0J5dGVzIChzdHIsIHVuaXRzKSB7XG4gIHZhciBjLCBoaSwgbG9cbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG5cblxuLy8gdGhlIGZvbGxvd2luZyBpcyBmcm9tIGlzLWJ1ZmZlciwgYWxzbyBieSBGZXJvc3MgQWJvdWtoYWRpamVoIGFuZCB3aXRoIHNhbWUgbGlzZW5jZVxuLy8gVGhlIF9pc0J1ZmZlciBjaGVjayBpcyBmb3IgU2FmYXJpIDUtNyBzdXBwb3J0LCBiZWNhdXNlIGl0J3MgbWlzc2luZ1xuLy8gT2JqZWN0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvci4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseVxuZXhwb3J0IGZ1bmN0aW9uIGlzQnVmZmVyKG9iaikge1xuICByZXR1cm4gb2JqICE9IG51bGwgJiYgKCEhb2JqLl9pc0J1ZmZlciB8fCBpc0Zhc3RCdWZmZXIob2JqKSB8fCBpc1Nsb3dCdWZmZXIob2JqKSlcbn1cblxuZnVuY3Rpb24gaXNGYXN0QnVmZmVyIChvYmopIHtcbiAgcmV0dXJuICEhb2JqLmNvbnN0cnVjdG9yICYmIHR5cGVvZiBvYmouY29uc3RydWN0b3IuaXNCdWZmZXIgPT09ICdmdW5jdGlvbicgJiYgb2JqLmNvbnN0cnVjdG9yLmlzQnVmZmVyKG9iailcbn1cblxuLy8gRm9yIE5vZGUgdjAuMTAgc3VwcG9ydC4gUmVtb3ZlIHRoaXMgZXZlbnR1YWxseS5cbmZ1bmN0aW9uIGlzU2xvd0J1ZmZlciAob2JqKSB7XG4gIHJldHVybiB0eXBlb2Ygb2JqLnJlYWRGbG9hdExFID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmouc2xpY2UgPT09ICdmdW5jdGlvbicgJiYgaXNGYXN0QnVmZmVyKG9iai5zbGljZSgwLCAwKSlcbn1cbiIsIi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG5pbXBvcnQge0J1ZmZlcn0gZnJvbSAnYnVmZmVyJztcbnZhciBpc0J1ZmZlckVuY29kaW5nID0gQnVmZmVyLmlzRW5jb2RpbmdcbiAgfHwgZnVuY3Rpb24oZW5jb2RpbmcpIHtcbiAgICAgICBzd2l0Y2ggKGVuY29kaW5nICYmIGVuY29kaW5nLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgIGNhc2UgJ2hleCc6IGNhc2UgJ3V0ZjgnOiBjYXNlICd1dGYtOCc6IGNhc2UgJ2FzY2lpJzogY2FzZSAnYmluYXJ5JzogY2FzZSAnYmFzZTY0JzogY2FzZSAndWNzMic6IGNhc2UgJ3Vjcy0yJzogY2FzZSAndXRmMTZsZSc6IGNhc2UgJ3V0Zi0xNmxlJzogY2FzZSAncmF3JzogcmV0dXJuIHRydWU7XG4gICAgICAgICBkZWZhdWx0OiByZXR1cm4gZmFsc2U7XG4gICAgICAgfVxuICAgICB9XG5cblxuZnVuY3Rpb24gYXNzZXJ0RW5jb2RpbmcoZW5jb2RpbmcpIHtcbiAgaWYgKGVuY29kaW5nICYmICFpc0J1ZmZlckVuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKTtcbiAgfVxufVxuXG4vLyBTdHJpbmdEZWNvZGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZSBmb3IgZWZmaWNpZW50bHkgc3BsaXR0aW5nIGEgc2VyaWVzIG9mXG4vLyBidWZmZXJzIGludG8gYSBzZXJpZXMgb2YgSlMgc3RyaW5ncyB3aXRob3V0IGJyZWFraW5nIGFwYXJ0IG11bHRpLWJ5dGVcbi8vIGNoYXJhY3RlcnMuIENFU1UtOCBpcyBoYW5kbGVkIGFzIHBhcnQgb2YgdGhlIFVURi04IGVuY29kaW5nLlxuLy9cbi8vIEBUT0RPIEhhbmRsaW5nIGFsbCBlbmNvZGluZ3MgaW5zaWRlIGEgc2luZ2xlIG9iamVjdCBtYWtlcyBpdCB2ZXJ5IGRpZmZpY3VsdFxuLy8gdG8gcmVhc29uIGFib3V0IHRoaXMgY29kZSwgc28gaXQgc2hvdWxkIGJlIHNwbGl0IHVwIGluIHRoZSBmdXR1cmUuXG4vLyBAVE9ETyBUaGVyZSBzaG91bGQgYmUgYSB1dGY4LXN0cmljdCBlbmNvZGluZyB0aGF0IHJlamVjdHMgaW52YWxpZCBVVEYtOCBjb2RlXG4vLyBwb2ludHMgYXMgdXNlZCBieSBDRVNVLTguXG5leHBvcnQgZnVuY3Rpb24gU3RyaW5nRGVjb2RlcihlbmNvZGluZykge1xuICB0aGlzLmVuY29kaW5nID0gKGVuY29kaW5nIHx8ICd1dGY4JykudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9dLywgJycpO1xuICBhc3NlcnRFbmNvZGluZyhlbmNvZGluZyk7XG4gIHN3aXRjaCAodGhpcy5lbmNvZGluZykge1xuICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgLy8gQ0VTVS04IHJlcHJlc2VudHMgZWFjaCBvZiBTdXJyb2dhdGUgUGFpciBieSAzLWJ5dGVzXG4gICAgICB0aGlzLnN1cnJvZ2F0ZVNpemUgPSAzO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICAvLyBVVEYtMTYgcmVwcmVzZW50cyBlYWNoIG9mIFN1cnJvZ2F0ZSBQYWlyIGJ5IDItYnl0ZXNcbiAgICAgIHRoaXMuc3Vycm9nYXRlU2l6ZSA9IDI7XG4gICAgICB0aGlzLmRldGVjdEluY29tcGxldGVDaGFyID0gdXRmMTZEZXRlY3RJbmNvbXBsZXRlQ2hhcjtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAvLyBCYXNlLTY0IHN0b3JlcyAzIGJ5dGVzIGluIDQgY2hhcnMsIGFuZCBwYWRzIHRoZSByZW1haW5kZXIuXG4gICAgICB0aGlzLnN1cnJvZ2F0ZVNpemUgPSAzO1xuICAgICAgdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhciA9IGJhc2U2NERldGVjdEluY29tcGxldGVDaGFyO1xuICAgICAgYnJlYWs7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRoaXMud3JpdGUgPSBwYXNzVGhyb3VnaFdyaXRlO1xuICAgICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRW5vdWdoIHNwYWNlIHRvIHN0b3JlIGFsbCBieXRlcyBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIuIFVURi04IG5lZWRzIDRcbiAgLy8gYnl0ZXMsIGJ1dCBDRVNVLTggbWF5IHJlcXVpcmUgdXAgdG8gNiAoMyBieXRlcyBwZXIgc3Vycm9nYXRlKS5cbiAgdGhpcy5jaGFyQnVmZmVyID0gbmV3IEJ1ZmZlcig2KTtcbiAgLy8gTnVtYmVyIG9mIGJ5dGVzIHJlY2VpdmVkIGZvciB0aGUgY3VycmVudCBpbmNvbXBsZXRlIG11bHRpLWJ5dGUgY2hhcmFjdGVyLlxuICB0aGlzLmNoYXJSZWNlaXZlZCA9IDA7XG4gIC8vIE51bWJlciBvZiBieXRlcyBleHBlY3RlZCBmb3IgdGhlIGN1cnJlbnQgaW5jb21wbGV0ZSBtdWx0aS1ieXRlIGNoYXJhY3Rlci5cbiAgdGhpcy5jaGFyTGVuZ3RoID0gMDtcbn07XG5cblxuLy8gd3JpdGUgZGVjb2RlcyB0aGUgZ2l2ZW4gYnVmZmVyIGFuZCByZXR1cm5zIGl0IGFzIEpTIHN0cmluZyB0aGF0IGlzXG4vLyBndWFyYW50ZWVkIHRvIG5vdCBjb250YWluIGFueSBwYXJ0aWFsIG11bHRpLWJ5dGUgY2hhcmFjdGVycy4gQW55IHBhcnRpYWxcbi8vIGNoYXJhY3RlciBmb3VuZCBhdCB0aGUgZW5kIG9mIHRoZSBidWZmZXIgaXMgYnVmZmVyZWQgdXAsIGFuZCB3aWxsIGJlXG4vLyByZXR1cm5lZCB3aGVuIGNhbGxpbmcgd3JpdGUgYWdhaW4gd2l0aCB0aGUgcmVtYWluaW5nIGJ5dGVzLlxuLy9cbi8vIE5vdGU6IENvbnZlcnRpbmcgYSBCdWZmZXIgY29udGFpbmluZyBhbiBvcnBoYW4gc3Vycm9nYXRlIHRvIGEgU3RyaW5nXG4vLyBjdXJyZW50bHkgd29ya3MsIGJ1dCBjb252ZXJ0aW5nIGEgU3RyaW5nIHRvIGEgQnVmZmVyICh2aWEgYG5ldyBCdWZmZXJgLCBvclxuLy8gQnVmZmVyI3dyaXRlKSB3aWxsIHJlcGxhY2UgaW5jb21wbGV0ZSBzdXJyb2dhdGVzIHdpdGggdGhlIHVuaWNvZGVcbi8vIHJlcGxhY2VtZW50IGNoYXJhY3Rlci4gU2VlIGh0dHBzOi8vY29kZXJldmlldy5jaHJvbWl1bS5vcmcvMTIxMTczMDA5LyAuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICB2YXIgY2hhclN0ciA9ICcnO1xuICAvLyBpZiBvdXIgbGFzdCB3cml0ZSBlbmRlZCB3aXRoIGFuIGluY29tcGxldGUgbXVsdGlieXRlIGNoYXJhY3RlclxuICB3aGlsZSAodGhpcy5jaGFyTGVuZ3RoKSB7XG4gICAgLy8gZGV0ZXJtaW5lIGhvdyBtYW55IHJlbWFpbmluZyBieXRlcyB0aGlzIGJ1ZmZlciBoYXMgdG8gb2ZmZXIgZm9yIHRoaXMgY2hhclxuICAgIHZhciBhdmFpbGFibGUgPSAoYnVmZmVyLmxlbmd0aCA+PSB0aGlzLmNoYXJMZW5ndGggLSB0aGlzLmNoYXJSZWNlaXZlZCkgP1xuICAgICAgICB0aGlzLmNoYXJMZW5ndGggLSB0aGlzLmNoYXJSZWNlaXZlZCA6XG4gICAgICAgIGJ1ZmZlci5sZW5ndGg7XG5cbiAgICAvLyBhZGQgdGhlIG5ldyBieXRlcyB0byB0aGUgY2hhciBidWZmZXJcbiAgICBidWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsIHRoaXMuY2hhclJlY2VpdmVkLCAwLCBhdmFpbGFibGUpO1xuICAgIHRoaXMuY2hhclJlY2VpdmVkICs9IGF2YWlsYWJsZTtcblxuICAgIGlmICh0aGlzLmNoYXJSZWNlaXZlZCA8IHRoaXMuY2hhckxlbmd0aCkge1xuICAgICAgLy8gc3RpbGwgbm90IGVub3VnaCBjaGFycyBpbiB0aGlzIGJ1ZmZlcj8gd2FpdCBmb3IgbW9yZSAuLi5cbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICAvLyByZW1vdmUgYnl0ZXMgYmVsb25naW5nIHRvIHRoZSBjdXJyZW50IGNoYXJhY3RlciBmcm9tIHRoZSBidWZmZXJcbiAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UoYXZhaWxhYmxlLCBidWZmZXIubGVuZ3RoKTtcblxuICAgIC8vIGdldCB0aGUgY2hhcmFjdGVyIHRoYXQgd2FzIHNwbGl0XG4gICAgY2hhclN0ciA9IHRoaXMuY2hhckJ1ZmZlci5zbGljZSgwLCB0aGlzLmNoYXJMZW5ndGgpLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO1xuXG4gICAgLy8gQ0VTVS04OiBsZWFkIHN1cnJvZ2F0ZSAoRDgwMC1EQkZGKSBpcyBhbHNvIHRoZSBpbmNvbXBsZXRlIGNoYXJhY3RlclxuICAgIHZhciBjaGFyQ29kZSA9IGNoYXJTdHIuY2hhckNvZGVBdChjaGFyU3RyLmxlbmd0aCAtIDEpO1xuICAgIGlmIChjaGFyQ29kZSA+PSAweEQ4MDAgJiYgY2hhckNvZGUgPD0gMHhEQkZGKSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggKz0gdGhpcy5zdXJyb2dhdGVTaXplO1xuICAgICAgY2hhclN0ciA9ICcnO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIHRoaXMuY2hhclJlY2VpdmVkID0gdGhpcy5jaGFyTGVuZ3RoID0gMDtcblxuICAgIC8vIGlmIHRoZXJlIGFyZSBubyBtb3JlIGJ5dGVzIGluIHRoaXMgYnVmZmVyLCBqdXN0IGVtaXQgb3VyIGNoYXJcbiAgICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGNoYXJTdHI7XG4gICAgfVxuICAgIGJyZWFrO1xuICB9XG5cbiAgLy8gZGV0ZXJtaW5lIGFuZCBzZXQgY2hhckxlbmd0aCAvIGNoYXJSZWNlaXZlZFxuICB0aGlzLmRldGVjdEluY29tcGxldGVDaGFyKGJ1ZmZlcik7XG5cbiAgdmFyIGVuZCA9IGJ1ZmZlci5sZW5ndGg7XG4gIGlmICh0aGlzLmNoYXJMZW5ndGgpIHtcbiAgICAvLyBidWZmZXIgdGhlIGluY29tcGxldGUgY2hhcmFjdGVyIGJ5dGVzIHdlIGdvdFxuICAgIGJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlciwgMCwgYnVmZmVyLmxlbmd0aCAtIHRoaXMuY2hhclJlY2VpdmVkLCBlbmQpO1xuICAgIGVuZCAtPSB0aGlzLmNoYXJSZWNlaXZlZDtcbiAgfVxuXG4gIGNoYXJTdHIgKz0gYnVmZmVyLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcsIDAsIGVuZCk7XG5cbiAgdmFyIGVuZCA9IGNoYXJTdHIubGVuZ3RoIC0gMTtcbiAgdmFyIGNoYXJDb2RlID0gY2hhclN0ci5jaGFyQ29kZUF0KGVuZCk7XG4gIC8vIENFU1UtODogbGVhZCBzdXJyb2dhdGUgKEQ4MDAtREJGRikgaXMgYWxzbyB0aGUgaW5jb21wbGV0ZSBjaGFyYWN0ZXJcbiAgaWYgKGNoYXJDb2RlID49IDB4RDgwMCAmJiBjaGFyQ29kZSA8PSAweERCRkYpIHtcbiAgICB2YXIgc2l6ZSA9IHRoaXMuc3Vycm9nYXRlU2l6ZTtcbiAgICB0aGlzLmNoYXJMZW5ndGggKz0gc2l6ZTtcbiAgICB0aGlzLmNoYXJSZWNlaXZlZCArPSBzaXplO1xuICAgIHRoaXMuY2hhckJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlciwgc2l6ZSwgMCwgc2l6ZSk7XG4gICAgYnVmZmVyLmNvcHkodGhpcy5jaGFyQnVmZmVyLCAwLCAwLCBzaXplKTtcbiAgICByZXR1cm4gY2hhclN0ci5zdWJzdHJpbmcoMCwgZW5kKTtcbiAgfVxuXG4gIC8vIG9yIGp1c3QgZW1pdCB0aGUgY2hhclN0clxuICByZXR1cm4gY2hhclN0cjtcbn07XG5cbi8vIGRldGVjdEluY29tcGxldGVDaGFyIGRldGVybWluZXMgaWYgdGhlcmUgaXMgYW4gaW5jb21wbGV0ZSBVVEYtOCBjaGFyYWN0ZXIgYXRcbi8vIHRoZSBlbmQgb2YgdGhlIGdpdmVuIGJ1ZmZlci4gSWYgc28sIGl0IHNldHMgdGhpcy5jaGFyTGVuZ3RoIHRvIHRoZSBieXRlXG4vLyBsZW5ndGggdGhhdCBjaGFyYWN0ZXIsIGFuZCBzZXRzIHRoaXMuY2hhclJlY2VpdmVkIHRvIHRoZSBudW1iZXIgb2YgYnl0ZXNcbi8vIHRoYXQgYXJlIGF2YWlsYWJsZSBmb3IgdGhpcyBjaGFyYWN0ZXIuXG5TdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5kZXRlY3RJbmNvbXBsZXRlQ2hhciA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICAvLyBkZXRlcm1pbmUgaG93IG1hbnkgYnl0ZXMgd2UgaGF2ZSB0byBjaGVjayBhdCB0aGUgZW5kIG9mIHRoaXMgYnVmZmVyXG4gIHZhciBpID0gKGJ1ZmZlci5sZW5ndGggPj0gMykgPyAzIDogYnVmZmVyLmxlbmd0aDtcblxuICAvLyBGaWd1cmUgb3V0IGlmIG9uZSBvZiB0aGUgbGFzdCBpIGJ5dGVzIG9mIG91ciBidWZmZXIgYW5ub3VuY2VzIGFuXG4gIC8vIGluY29tcGxldGUgY2hhci5cbiAgZm9yICg7IGkgPiAwOyBpLS0pIHtcbiAgICB2YXIgYyA9IGJ1ZmZlcltidWZmZXIubGVuZ3RoIC0gaV07XG5cbiAgICAvLyBTZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOCNEZXNjcmlwdGlvblxuXG4gICAgLy8gMTEwWFhYWFhcbiAgICBpZiAoaSA9PSAxICYmIGMgPj4gNSA9PSAweDA2KSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggPSAyO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gMTExMFhYWFhcbiAgICBpZiAoaSA8PSAyICYmIGMgPj4gNCA9PSAweDBFKSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggPSAzO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gMTExMTBYWFhcbiAgICBpZiAoaSA8PSAzICYmIGMgPj4gMyA9PSAweDFFKSB7XG4gICAgICB0aGlzLmNoYXJMZW5ndGggPSA0O1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG4gIHRoaXMuY2hhclJlY2VpdmVkID0gaTtcbn07XG5cblN0cmluZ0RlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKGJ1ZmZlcikge1xuICB2YXIgcmVzID0gJyc7XG4gIGlmIChidWZmZXIgJiYgYnVmZmVyLmxlbmd0aClcbiAgICByZXMgPSB0aGlzLndyaXRlKGJ1ZmZlcik7XG5cbiAgaWYgKHRoaXMuY2hhclJlY2VpdmVkKSB7XG4gICAgdmFyIGNyID0gdGhpcy5jaGFyUmVjZWl2ZWQ7XG4gICAgdmFyIGJ1ZiA9IHRoaXMuY2hhckJ1ZmZlcjtcbiAgICB2YXIgZW5jID0gdGhpcy5lbmNvZGluZztcbiAgICByZXMgKz0gYnVmLnNsaWNlKDAsIGNyKS50b1N0cmluZyhlbmMpO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cbmZ1bmN0aW9uIHBhc3NUaHJvdWdoV3JpdGUoYnVmZmVyKSB7XG4gIHJldHVybiBidWZmZXIudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7XG59XG5cbmZ1bmN0aW9uIHV0ZjE2RGV0ZWN0SW5jb21wbGV0ZUNoYXIoYnVmZmVyKSB7XG4gIHRoaXMuY2hhclJlY2VpdmVkID0gYnVmZmVyLmxlbmd0aCAlIDI7XG4gIHRoaXMuY2hhckxlbmd0aCA9IHRoaXMuY2hhclJlY2VpdmVkID8gMiA6IDA7XG59XG5cbmZ1bmN0aW9uIGJhc2U2NERldGVjdEluY29tcGxldGVDaGFyKGJ1ZmZlcikge1xuICB0aGlzLmNoYXJSZWNlaXZlZCA9IGJ1ZmZlci5sZW5ndGggJSAzO1xuICB0aGlzLmNoYXJMZW5ndGggPSB0aGlzLmNoYXJSZWNlaXZlZCA/IDMgOiAwO1xufVxuIiwiaW1wb3J0IHtnZW5lcmF0ZVNjaGVtYX0gZnJvbSBcIi4vaW5kZXhTY2hlbWFDcmVhdG9yXCI7XG5pbXBvcnQgeyBoYXMsIGlzU3RyaW5nLCBkaWZmZXJlbmNlLCBmaW5kIH0gZnJvbSBcImxvZGFzaC9mcFwiO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSBcInNhZmUtYnVmZmVyXCI7XG5pbXBvcnQge1N0cmluZ0RlY29kZXJ9IGZyb20gXCJzdHJpbmdfZGVjb2RlclwiO1xuaW1wb3J0IHtnZXRUeXBlfSBmcm9tIFwiLi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzU29tZXRoaW5nIH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuXG5leHBvcnQgY29uc3QgQlVGRkVSX01BWF9CWVRFUyA9IDUyNDI4ODsgLy8gMC41TWJcblxuZXhwb3J0IGNvbnN0IENPTlRJTlVFX1JFQURJTkdfUkVDT1JEUyA9IFwiQ09OVElOVUVfUkVBRElOR1wiO1xuZXhwb3J0IGNvbnN0IFJFQURfUkVNQUlOSU5HX1RFWFQgPSBcIlJFQURfUkVNQUlOSU5HXCI7XG5leHBvcnQgY29uc3QgQ0FOQ0VMX1JFQUQgPSBcIkNBTkNFTFwiO1xuXG5leHBvcnQgY29uc3QgZ2V0SW5kZXhXcml0ZXIgPSAoaGllcmFyY2h5LCBpbmRleE5vZGUsIHJlYWRhYmxlU3RyZWFtLCB3cml0YWJsZVN0cmVhbSwgZW5kKSA9PiB7XG4gICAgY29uc3Qgc2NoZW1hID0gZ2VuZXJhdGVTY2hlbWEoaGllcmFyY2h5LCBpbmRleE5vZGUpO1xuXG4gICAgcmV0dXJuICh7XG4gICAgICAgIHJlYWQ6IHJlYWQocmVhZGFibGVTdHJlYW0sIHNjaGVtYSksXG4gICAgICAgIHVwZGF0ZUluZGV4OiB1cGRhdGVJbmRleChyZWFkYWJsZVN0cmVhbSwgd3JpdGFibGVTdHJlYW0sIHNjaGVtYSwgZW5kKVxuICAgIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEluZGV4UmVhZGVyID0gKGhpZXJhcmNoeSwgaW5kZXhOb2RlLCByZWFkYWJsZVN0cmVhbSkgPT4gXG4gICAgcmVhZChcbiAgICAgICAgcmVhZGFibGVTdHJlYW0sIFxuICAgICAgICBnZW5lcmF0ZVNjaGVtYShoaWVyYXJjaHksIGluZGV4Tm9kZSlcbiAgICApO1xuXG5jb25zdCB1cGRhdGVJbmRleCA9IChyZWFkYWJsZVN0cmVhbSwgd3JpdGFibGVTdHJlYW0sIHNjaGVtYSkgPT4gYXN5bmMgKGl0ZW1zVG9Xcml0ZSwga2V5c1RvUmVtb3ZlKSA9PiB7XG4gICAgY29uc3Qgd3JpdGUgPSBuZXdPdXRwdXRXcml0ZXIoQlVGRkVSX01BWF9CWVRFUywgd3JpdGFibGVTdHJlYW0pO1xuICAgIGNvbnN0IHdyaXR0ZW5JdGVtcyA9IFtdOyBcbiAgICBhd2FpdCByZWFkKHJlYWRhYmxlU3RyZWFtLCBzY2hlbWEpKFxuICAgICAgICBhc3luYyBpbmRleGVkSXRlbSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1cGRhdGVkID0gZmluZChpID0+IGluZGV4ZWRJdGVtLmtleSA9PT0gaS5rZXkpKGl0ZW1zVG9Xcml0ZSk7XG4gICAgICAgICAgICBjb25zdCByZW1vdmVkID0gZmluZChrID0+IGluZGV4ZWRJdGVtLmtleSA9PT0gaykoa2V5c1RvUmVtb3ZlKTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYoaXNTb21ldGhpbmcocmVtb3ZlZCkpIFxuICAgICAgICAgICAgICAgIHJldHVybiBDT05USU5VRV9SRUFESU5HX1JFQ09SRFM7XG5cbiAgICAgICAgICAgIGlmKGlzU29tZXRoaW5nKHVwZGF0ZWQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2VyaWFsaXplZEl0ZW0gPSAgc2VyaWFsaXplSXRlbShzY2hlbWEsIHVwZGF0ZWQpO1xuICAgICAgICAgICAgICAgIGF3YWl0IHdyaXRlKHNlcmlhbGl6ZWRJdGVtKTtcbiAgICAgICAgICAgICAgICB3cml0dGVuSXRlbXMucHVzaCh1cGRhdGVkKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgd3JpdGUoXG4gICAgICAgICAgICAgICAgICAgIHNlcmlhbGl6ZUl0ZW0oc2NoZW1hLCBpbmRleGVkSXRlbSlcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBcblxuICAgICAgICAgICAgcmV0dXJuIENPTlRJTlVFX1JFQURJTkdfUkVDT1JEUztcblxuICAgICAgICB9LFxuICAgICAgICBhc3luYyB0ZXh0ID0+IGF3YWl0IHdyaXRlKHRleHQpXG4gICAgKTtcblxuICAgIGlmKHdyaXR0ZW5JdGVtcy5sZW5ndGggIT09IGl0ZW1zVG9Xcml0ZS5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgdG9BZGQgPSBkaWZmZXJlbmNlKGl0ZW1zVG9Xcml0ZSwgd3JpdHRlbkl0ZW1zKTtcbiAgICAgICAgZm9yKGxldCBhZGRlZCBvZiB0b0FkZCkge1xuICAgICAgICAgICAgYXdhaXQgd3JpdGUoXG4gICAgICAgICAgICAgICAgc2VyaWFsaXplSXRlbShzY2hlbWEsIGFkZGVkKVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZih3cml0dGVuSXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIC8vIHBvdGVudGlhbGx5IGFyZSBubyByZWNvcmRzXG4gICAgICAgIGF3YWl0IHdyaXRlKFwiXCIpO1xuICAgIH1cblxuICAgIGF3YWl0IHdyaXRlKCk7XG4gICAgYXdhaXQgd3JpdGFibGVTdHJlYW0uZW5kKCk7XG59O1xuXG5jb25zdCByZWFkID0gKHJlYWRhYmxlU3RyZWFtLCBzY2hlbWEpID0+IGFzeW5jIChvbkdldEl0ZW0sIG9uR2V0VGV4dCkgPT4ge1xuICAgIGNvbnN0IHJlYWRJbnB1dCA9IG5ld0lucHV0UmVhZGVyKHJlYWRhYmxlU3RyZWFtKTtcbiAgICBsZXQgdGV4dCA9IGF3YWl0IHJlYWRJbnB1dCgpO1xuICAgIGxldCBzdGF0dXMgPSBDT05USU5VRV9SRUFESU5HX1JFQ09SRFM7XG4gICAgd2hpbGUodGV4dC5sZW5ndGggPiAwKSB7XG5cbiAgICAgICAgaWYoc3RhdHVzID09PSBSRUFEX1JFTUFJTklOR19URVhUKSB7XG4gICAgICAgICAgICBhd2FpdCBvbkdldFRleHQodGV4dCk7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHN0YXR1cyA9PT0gQ0FOQ0VMX1JFQUQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCByb3dUZXh0ID0gXCJcIjtcbiAgICAgICAgbGV0IGN1cnJlbnRDaGFySW5kZXg9MDtcbiAgICAgICAgZm9yKGxldCBjdXJyZW50Q2hhciBvZiB0ZXh0KSB7XG4gICAgICAgICAgICByb3dUZXh0ICs9IGN1cnJlbnRDaGFyO1xuICAgICAgICAgICAgaWYoY3VycmVudENoYXIgPT09IFwiXFxyXCIpIHtcbiAgICAgICAgICAgICAgICBzdGF0dXMgPSBhd2FpdCBvbkdldEl0ZW0oXG4gICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplUm93KHNjaGVtYSwgcm93VGV4dClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIHJvd1RleHQgPSBcIlwiO1xuICAgICAgICAgICAgICAgIGlmKHN0YXR1cyA9PT0gUkVBRF9SRU1BSU5JTkdfVEVYVCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdXJyZW50Q2hhckluZGV4Kys7XG4gICAgICAgIH1cblxuICAgICAgICBpZihjdXJyZW50Q2hhckluZGV4IDwgdGV4dC5sZW5ndGggLTEpIHtcbiAgICAgICAgICAgIGF3YWl0IG9uR2V0VGV4dCh0ZXh0LnN1YnN0cmluZyhjdXJyZW50Q2hhckluZGV4ICsgMSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGV4dCA9IGF3YWl0IHJlYWRJbnB1dCgpO1xuICAgIH1cblxuICAgIGF3YWl0IHJlYWRhYmxlU3RyZWFtLmRlc3Ryb3koKTtcblxufTtcblxuY29uc3QgbmV3T3V0cHV0V3JpdGVyID0gKGZsdXNoQm91bmRhcnksIHdyaXRhYmxlU3RyZWFtKSA9PiB7XG4gICAgXG4gICAgbGV0IGN1cnJlbnRCdWZmZXIgPSBudWxsO1xuXG4gICAgcmV0dXJuIGFzeW5jICh0ZXh0KSA9PiB7XG5cbiAgICAgICAgaWYoaXNTdHJpbmcodGV4dCkgJiYgY3VycmVudEJ1ZmZlciA9PT0gbnVsbClcbiAgICAgICAgICAgIGN1cnJlbnRCdWZmZXIgPSBCdWZmZXIuZnJvbSh0ZXh0LCBcInV0ZjhcIik7XG4gICAgICAgIGVsc2UgaWYoaXNTdHJpbmcodGV4dCkpXG4gICAgICAgICAgICBjdXJyZW50QnVmZmVyID0gQnVmZmVyLmNvbmNhdChbXG4gICAgICAgICAgICAgICAgY3VycmVudEJ1ZmZlcixcbiAgICAgICAgICAgICAgICBCdWZmZXIuZnJvbSh0ZXh0LCBcInV0ZjhcIilcbiAgICAgICAgICAgIF0pO1xuICAgICAgICBcbiAgICAgICAgaWYoY3VycmVudEJ1ZmZlciAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgKGN1cnJlbnRCdWZmZXIubGVuZ3RoID4gZmx1c2hCb3VuZGFyeVxuICAgICAgICAgICAgIHx8ICFpc1N0cmluZyh0ZXh0KSkpIHtcblxuICAgICAgICAgICAgYXdhaXQgd3JpdGFibGVTdHJlYW0ud3JpdGUoY3VycmVudEJ1ZmZlcik7XG4gICAgICAgICAgICBjdXJyZW50QnVmZmVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cbn07XG5cbmNvbnN0IG5ld0lucHV0UmVhZGVyID0gKHJlYWRhYmxlU3RyZWFtKSA9PiB7XG5cbiAgICBjb25zdCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ3V0ZjgnKTtcbiAgICBsZXQgcmVtYWluaW5nQnl0ZXMgPSBbXTtcblxuICAgIHJldHVybiBhc3luYyAoKSA9PiB7XG5cbiAgICAgICAgbGV0IG5leHRCeXRlc0J1ZmZlciA9IGF3YWl0IHJlYWRhYmxlU3RyZWFtLnJlYWQoQlVGRkVSX01BWF9CWVRFUyk7XG4gICAgICAgIGNvbnN0IHJlbWFpbmluZ0J1ZmZlciA9IEJ1ZmZlci5mcm9tKHJlbWFpbmluZ0J5dGVzKTtcblxuICAgICAgICBpZighbmV4dEJ5dGVzQnVmZmVyKSBuZXh0Qnl0ZXNCdWZmZXIgPSBCdWZmZXIuZnJvbShbXSk7XG5cbiAgICAgICAgY29uc3QgbW9yZVRvUmVhZCA9IG5leHRCeXRlc0J1ZmZlci5sZW5ndGggPT09IEJVRkZFUl9NQVhfQllURVM7XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmNvbmNhdChcbiAgICAgICAgICAgIFtyZW1haW5pbmdCdWZmZXIsIG5leHRCeXRlc0J1ZmZlcl0sXG4gICAgICAgICAgICByZW1haW5pbmdCdWZmZXIubGVuZ3RoICsgbmV4dEJ5dGVzQnVmZmVyLmxlbmd0aCk7XG5cbiAgICAgICAgY29uc3QgdGV4dCA9IGRlY29kZXIud3JpdGUoYnVmZmVyKTtcbiAgICAgICAgcmVtYWluaW5nQnl0ZXMgPSBkZWNvZGVyLmVuZChidWZmZXIpO1xuXG4gICAgICAgIGlmKCFtb3JlVG9SZWFkICYmIHJlbWFpbmluZ0J5dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIC8vIGlmIGZvciBhbnkgcmVhc29uLCB3ZSBoYXZlIHJlbWFpbmluZyBieXRlcyBhdCB0aGUgZW5kXG4gICAgICAgICAgICAvLyBvZiB0aGUgc3RyZWFtLCBqdXN0IGRpc2NhcmQgLSBkb250IHNlZSB3aHkgdGhpcyBzaG91bGRcbiAgICAgICAgICAgIC8vIGV2ZXIgaGFwcGVuLCBidXQgaWYgaXQgZG9lcywgaXQgY291bGQgY2F1c2UgYSBzdGFjayBvdmVyZmxvd1xuICAgICAgICAgICAgcmVtYWluaW5nQnl0ZXMgPSBbXTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0ZXh0O1xuICAgIH07XG59O1xuXG5jb25zdCBkZXNlcmlhbGl6ZVJvdyA9IChzY2hlbWEsIHJvd1RleHQpID0+IHtcbiAgICBsZXQgY3VycmVudFByb3BJbmRleCA9IDA7XG4gICAgbGV0IGN1cnJlbnRDaGFySW5kZXggPSAwO1xuICAgIGxldCBjdXJyZW50VmFsdWVUZXh0ID0gXCJcIjtcbiAgICBsZXQgaXNFc2NhcGVkID0gZmFsc2U7XG4gICAgY29uc3QgaXRlbSA9IHt9O1xuXG4gICAgY29uc3Qgc2V0Q3VycmVudFByb3AgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRQcm9wID0gc2NoZW1hW2N1cnJlbnRQcm9wSW5kZXhdO1xuICAgICAgICBjb25zdCB0eXBlID0gZ2V0VHlwZShjdXJyZW50UHJvcC50eXBlKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjdXJyZW50VmFsdWVUZXh0ID09PSBcIlwiXG4gICAgICAgICAgICAgICAgICAgICAgPyB0eXBlLmdldERlZmF1bHRWYWx1ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgOiB0eXBlLnNhZmVQYXJzZVZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWVUZXh0KTtcbiAgICAgICAgaXRlbVtjdXJyZW50UHJvcC5uYW1lXSA9IHZhbHVlO1xuICAgIH07XG4gICAgXG4gICAgd2hpbGUoY3VycmVudFByb3BJbmRleCA8IHNjaGVtYS5sZW5ndGgpIHtcblxuICAgICAgICBpZihjdXJyZW50Q2hhckluZGV4IDwgcm93VGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDaGFyID0gcm93VGV4dFtjdXJyZW50Q2hhckluZGV4XTtcbiAgICAgICAgICAgIGlmKGlzRXNjYXBlZCkge1xuICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRDaGFyID09PSBcInJcIikge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWVUZXh0ICs9IFwiXFxyXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlVGV4dCArPSBjdXJyZW50Q2hhcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaXNFc2NhcGVkID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmKGN1cnJlbnRDaGFyID09PSBcIixcIikge1xuICAgICAgICAgICAgICAgICAgICBzZXRDdXJyZW50UHJvcCgpO1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWVUZXh0ID0gXCJcIjtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFByb3BJbmRleCsrO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZihjdXJyZW50Q2hhciA9PT0gXCJcXFxcXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNFc2NhcGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWVUZXh0ICs9IGN1cnJlbnRDaGFyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnJlbnRDaGFySW5kZXgrKzsgXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjdXJyZW50VmFsdWVUZXh0ID0gXCJcIjtcbiAgICAgICAgICAgIHNldEN1cnJlbnRQcm9wKCk7XG4gICAgICAgICAgICBjdXJyZW50UHJvcEluZGV4Kys7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaXRlbTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZXJpYWxpemVJdGVtID0gKHNjaGVtYSwgaXRlbSkgID0+IHtcblxuICAgIGxldCByb3dUZXh0ID0gXCJcIlxuXG4gICAgZm9yKGxldCBwcm9wIG9mIHNjaGVtYSkge1xuICAgICAgICBjb25zdCB0eXBlID0gZ2V0VHlwZShwcm9wLnR5cGUpO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGhhcyhwcm9wLm5hbWUpKGl0ZW0pXG4gICAgICAgICAgICAgICAgICAgICAgPyBpdGVtW3Byb3AubmFtZV1cbiAgICAgICAgICAgICAgICAgICAgICA6IHR5cGUuZ2V0RGVmYXVsdFZhbHVlKClcbiAgICAgICAgXG4gICAgICAgIGNvbnN0IHZhbFN0ciA9IHR5cGUuc3RyaW5naWZ5KHZhbHVlKTtcblxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgdmFsU3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q2hhciA9IHZhbFN0cltpXTtcbiAgICAgICAgICAgIGlmKGN1cnJlbnRDaGFyID09PSBcIixcIiBcbiAgICAgICAgICAgICAgIHx8IGN1cnJlbnRDaGFyID09PSBcIlxcclwiIFxuICAgICAgICAgICAgICAgfHwgY3VycmVudENoYXIgPT09IFwiXFxcXFwiKSB7XG4gICAgICAgICAgICAgICAgcm93VGV4dCArPSBcIlxcXFxcIjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYoY3VycmVudENoYXIgPT09IFwiXFxyXCIpIHtcbiAgICAgICAgICAgICAgICByb3dUZXh0ICs9IFwiclwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByb3dUZXh0ICs9IGN1cnJlbnRDaGFyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcm93VGV4dCArPSBcIixcIjtcbiAgICB9XG5cbiAgICByb3dUZXh0ICs9IFwiXFxyXCI7XG4gICAgcmV0dXJuIHJvd1RleHQ7XG59OyIsImltcG9ydCBsdW5yIGZyb20gJ2x1bnInO1xuaW1wb3J0IHtcbiAgZ2V0SGFzaENvZGUsXG4gIGpvaW5LZXlcbn0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7XG4gIGdldEFjdHVhbEtleU9mUGFyZW50LFxuICBpc0dsb2JhbEluZGV4LFxufSBmcm9tICcuLi90ZW1wbGF0ZUFwaS9oaWVyYXJjaHknO1xuaW1wb3J0IHtwcm9taXNlUmVhZGFibGVTdHJlYW19IGZyb20gXCIuL3Byb21pc2VSZWFkYWJsZVN0cmVhbVwiO1xuaW1wb3J0IHsgY3JlYXRlSW5kZXhGaWxlIH0gZnJvbSAnLi9zaGFyZGluZyc7XG5pbXBvcnQgeyBnZW5lcmF0ZVNjaGVtYSB9IGZyb20gJy4vaW5kZXhTY2hlbWFDcmVhdG9yJztcbmltcG9ydCB7IGdldEluZGV4UmVhZGVyLCBDT05USU5VRV9SRUFESU5HX1JFQ09SRFMgfSBmcm9tICcuL3NlcmlhbGl6ZXInO1xuXG5leHBvcnQgY29uc3QgcmVhZEluZGV4ID0gYXN5bmMgKGhpZXJhcmNoeSwgZGF0YXN0b3JlLCBpbmRleCwgaW5kZXhlZERhdGFLZXkpID0+IHtcbiAgY29uc3QgcmVjb3JkcyA9IFtdO1xuICBjb25zdCBkb1JlYWQgPSBpdGVyYXRlSW5kZXgoXG4gICAgICAgIGFzeW5jIGl0ZW0gPT4ge1xuICAgICAgcmVjb3Jkcy5wdXNoKGl0ZW0pO1xuICAgICAgcmV0dXJuIENPTlRJTlVFX1JFQURJTkdfUkVDT1JEUztcbiAgICB9LFxuICAgICAgICBhc3luYyAoKSA9PiByZWNvcmRzXG4gICk7XG5cbiAgcmV0dXJuIGF3YWl0IGRvUmVhZChoaWVyYXJjaHksIGRhdGFzdG9yZSwgaW5kZXgsIGluZGV4ZWREYXRhS2V5KTtcbn07XG5cbmV4cG9ydCBjb25zdCBzZWFyY2hJbmRleCA9IGFzeW5jIChoaWVyYXJjaHksIGRhdGFzdG9yZSwgaW5kZXgsIGluZGV4ZWREYXRhS2V5LCBzZWFyY2hQaHJhc2UpID0+IHtcbiAgY29uc3QgcmVjb3JkcyA9IFtdO1xuICBjb25zdCBzY2hlbWEgPSBnZW5lcmF0ZVNjaGVtYShoaWVyYXJjaHksIGluZGV4KTtcbiAgY29uc3QgZG9SZWFkID0gaXRlcmF0ZUluZGV4KFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IGx1bnIoZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzLnJlZigna2V5Jyk7XG4gICAgICAgIGZvciAoY29uc3QgZmllbGQgb2Ygc2NoZW1hKSB7XG4gICAgICAgICAgdGhpcy5maWVsZChmaWVsZC5uYW1lKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmFkZChpdGVtKTtcbiAgICAgIH0pO1xuICAgICAgY29uc3Qgc2VhcmNoUmVzdWx0cyA9IGlkeC5zZWFyY2goc2VhcmNoUGhyYXNlKTtcbiAgICAgIGlmIChzZWFyY2hSZXN1bHRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICBpdGVtLl9zZWFyY2hSZXN1bHQgPSBzZWFyY2hSZXN1bHRzWzBdO1xuICAgICAgICByZWNvcmRzLnB1c2goaXRlbSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gQ09OVElOVUVfUkVBRElOR19SRUNPUkRTO1xuICAgIH0sXG4gICAgICAgIGFzeW5jICgpID0+IHJlY29yZHNcbiAgKTtcblxuICByZXR1cm4gYXdhaXQgZG9SZWFkKGhpZXJhcmNoeSwgZGF0YXN0b3JlLCBpbmRleCwgaW5kZXhlZERhdGFLZXkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEluZGV4ZWREYXRhS2V5X2Zyb21JbmRleEtleSA9IChpbmRleEtleSkgPT4gXG4gIGAke2luZGV4S2V5fSR7aW5kZXhLZXkuZW5kc1dpdGgoJy5jc3YnKSA/ICcnIDogJy5jc3YnfWA7XG5cbmV4cG9ydCBjb25zdCB1bmlxdWVJbmRleE5hbWUgPSBpbmRleCA9PiBgaWR4XyR7XG4gIGdldEhhc2hDb2RlKGAke2luZGV4LmZpbHRlcn0ke2luZGV4Lm1hcH1gKVxufS5jc3ZgO1xuXG5leHBvcnQgY29uc3QgZ2V0SW5kZXhlZERhdGFLZXkgPSAoZGVjZW5kYW50S2V5LCBpbmRleE5vZGUpID0+IHtcbiAgaWYgKGlzR2xvYmFsSW5kZXgoaW5kZXhOb2RlKSkgeyByZXR1cm4gYCR7aW5kZXhOb2RlLm5vZGVLZXkoKX0uY3N2YDsgfVxuXG4gIGNvbnN0IGluZGV4ZWREYXRhUGFyZW50S2V5ID0gZ2V0QWN0dWFsS2V5T2ZQYXJlbnQoXG4gICAgaW5kZXhOb2RlLnBhcmVudCgpLm5vZGVLZXkoKSxcbiAgICBkZWNlbmRhbnRLZXksXG4gICk7XG5cbiAgY29uc3QgaW5kZXhOYW1lID0gaW5kZXhOb2RlLm5hbWVcbiAgICA/IGAke2luZGV4Tm9kZS5uYW1lfS5jc3ZgXG4gICAgOiB1bmlxdWVJbmRleE5hbWUoaW5kZXhOb2RlKTtcblxuICByZXR1cm4gam9pbktleShcbiAgICBpbmRleGVkRGF0YVBhcmVudEtleSxcbiAgICBpbmRleE5hbWUsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgaXRlcmF0ZUluZGV4ID0gKG9uR2V0SXRlbSwgZ2V0RmluYWxSZXN1bHQpID0+IGFzeW5jIChoaWVyYXJjaHksIGRhdGFzdG9yZSwgaW5kZXgsIGluZGV4ZWREYXRhS2V5KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVhZGFibGVTdHJlYW0gPSBwcm9taXNlUmVhZGFibGVTdHJlYW0oXG4gICAgICAgIGF3YWl0IGRhdGFzdG9yZS5yZWFkYWJsZUZpbGVTdHJlYW0oaW5kZXhlZERhdGFLZXkpXG4gICAgKTtcblxuICAgIGNvbnN0IHJlYWQgPSBnZXRJbmRleFJlYWRlcihoaWVyYXJjaHksIGluZGV4LCByZWFkYWJsZVN0cmVhbSk7XG4gICAgYXdhaXQgcmVhZChvbkdldEl0ZW0pO1xuICAgIHJldHVybiBnZXRGaW5hbFJlc3VsdCgpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGF3YWl0IGRhdGFzdG9yZS5leGlzdHMoaW5kZXhlZERhdGFLZXkpKSB7XG4gICAgICB0aHJvdyBlO1xuICAgIH0gZWxzZSB7XG4gICAgICBhd2FpdCBjcmVhdGVJbmRleEZpbGUoXG4gICAgICAgIGRhdGFzdG9yZSxcbiAgICAgICAgaW5kZXhlZERhdGFLZXksXG4gICAgICAgIGluZGV4LFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG59O1xuIiwiaW1wb3J0IHsgZmxhdHRlbiwgbWVyZ2UgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHtcbiAgc2FmZUtleSwgYXBpV3JhcHBlciwgJCxcbiAgZXZlbnRzLCBpc05vbkVtcHR5U3RyaW5nLFxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgcmVhZEluZGV4LCBzZWFyY2hJbmRleCB9IGZyb20gJy4uL2luZGV4aW5nL3JlYWQnO1xuaW1wb3J0IHtcbiAgZ2V0VW5zaGFyZGVkSW5kZXhEYXRhS2V5LFxuICBnZXRTaGFyZEtleXNJblJhbmdlLFxufSBmcm9tICcuLi9pbmRleGluZy9zaGFyZGluZyc7XG5pbXBvcnQge1xuICBnZXRFeGFjdE5vZGVGb3JQYXRoLCBpc0luZGV4LFxuICBpc1NoYXJkZWRJbmRleCxcbn0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7IHBlcm1pc3Npb24gfSBmcm9tICcuLi9hdXRoQXBpL3Blcm1pc3Npb25zJztcblxuZXhwb3J0IGNvbnN0IGxpc3RJdGVtcyA9IGFwcCA9PiBhc3luYyAoaW5kZXhLZXksIG9wdGlvbnMpID0+IGFwaVdyYXBwZXIoXG4gIGFwcCxcbiAgZXZlbnRzLmluZGV4QXBpLmxpc3RJdGVtcyxcbiAgcGVybWlzc2lvbi5yZWFkSW5kZXguaXNBdXRob3JpemVkKGluZGV4S2V5KSxcbiAgeyBpbmRleEtleSwgb3B0aW9ucyB9LFxuICBfbGlzdEl0ZW1zLCBhcHAsIGluZGV4S2V5LCBvcHRpb25zLFxuKTtcblxuY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7IHJhbmdlU3RhcnRQYXJhbXM6IG51bGwsIHJhbmdlRW5kUGFyYW1zOiBudWxsLCBzZWFyY2hQaHJhc2U6IG51bGwgfTtcblxuY29uc3QgX2xpc3RJdGVtcyA9IGFzeW5jIChhcHAsIGluZGV4S2V5LCBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnMpID0+IHtcbiAgY29uc3QgeyBzZWFyY2hQaHJhc2UsIHJhbmdlU3RhcnRQYXJhbXMsIHJhbmdlRW5kUGFyYW1zIH0gPSAkKHt9LCBbXG4gICAgbWVyZ2Uob3B0aW9ucyksXG4gICAgbWVyZ2UoZGVmYXVsdE9wdGlvbnMpLFxuICBdKTtcblxuICBjb25zdCBnZXRJdGVtcyA9IGFzeW5jIGtleSA9PiAoaXNOb25FbXB0eVN0cmluZyhzZWFyY2hQaHJhc2UpXG4gICAgPyBhd2FpdCBzZWFyY2hJbmRleChcbiAgICAgIGFwcC5oaWVyYXJjaHksXG4gICAgICBhcHAuZGF0YXN0b3JlLFxuICAgICAgaW5kZXhOb2RlLFxuICAgICAga2V5LFxuICAgICAgc2VhcmNoUGhyYXNlLFxuICAgIClcbiAgICA6IGF3YWl0IHJlYWRJbmRleChcbiAgICAgIGFwcC5oaWVyYXJjaHksXG4gICAgICBhcHAuZGF0YXN0b3JlLFxuICAgICAgaW5kZXhOb2RlLFxuICAgICAga2V5LFxuICAgICkpO1xuXG4gIGluZGV4S2V5ID0gc2FmZUtleShpbmRleEtleSk7XG4gIGNvbnN0IGluZGV4Tm9kZSA9IGdldEV4YWN0Tm9kZUZvclBhdGgoYXBwLmhpZXJhcmNoeSkoaW5kZXhLZXkpO1xuXG4gIGlmICghaXNJbmRleChpbmRleE5vZGUpKSB7IHRocm93IG5ldyBFcnJvcignc3VwcGxpZWQga2V5IGlzIG5vdCBhbiBpbmRleCcpOyB9XG5cbiAgaWYgKGlzU2hhcmRlZEluZGV4KGluZGV4Tm9kZSkpIHtcbiAgICBjb25zdCBzaGFyZEtleXMgPSBhd2FpdCBnZXRTaGFyZEtleXNJblJhbmdlKFxuICAgICAgYXBwLCBpbmRleEtleSwgcmFuZ2VTdGFydFBhcmFtcywgcmFuZ2VFbmRQYXJhbXMsXG4gICAgKTtcbiAgICBjb25zdCBpdGVtcyA9IFtdO1xuICAgIGZvciAoY29uc3QgayBvZiBzaGFyZEtleXMpIHtcbiAgICAgIGl0ZW1zLnB1c2goYXdhaXQgZ2V0SXRlbXMoaykpO1xuICAgIH1cbiAgICByZXR1cm4gZmxhdHRlbihpdGVtcyk7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IGdldEl0ZW1zKFxuICAgIGdldFVuc2hhcmRlZEluZGV4RGF0YUtleShpbmRleEtleSksXG4gICk7XG59O1xuIiwiaW1wb3J0IHsgaGFzLCBzb21lIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IG1hcCwgaXNTdHJpbmcgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHtcbiAgZ2V0RXhhY3ROb2RlRm9yUGF0aCxcbiAgZmluZEZpZWxkLCBnZXROb2RlLCBpc0dsb2JhbEluZGV4LFxufSBmcm9tICcuLi90ZW1wbGF0ZUFwaS9oaWVyYXJjaHknO1xuaW1wb3J0IHsgbGlzdEl0ZW1zIH0gZnJvbSAnLi4vaW5kZXhBcGkvbGlzdEl0ZW1zJztcbmltcG9ydCB7XG4gICQsIGFwaVdyYXBwZXJTeW5jLCBldmVudHMsXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRJbmRleEtleV9CYXNlZE9uRGVjZW5kYW50IH0gZnJvbSAnLi4vaW5kZXhpbmcvc2hhcmRpbmcnO1xuaW1wb3J0IHsgcGVybWlzc2lvbiB9IGZyb20gJy4uL2F1dGhBcGkvcGVybWlzc2lvbnMnO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29udGV4dCA9IGFwcCA9PiByZWNvcmRLZXkgPT4gYXBpV3JhcHBlclN5bmMoXG4gIGFwcCxcbiAgZXZlbnRzLnJlY29yZEFwaS5nZXRDb250ZXh0LFxuICBwZXJtaXNzaW9uLnJlYWRSZWNvcmQuaXNBdXRob3JpemVkKHJlY29yZEtleSksXG4gIHsgcmVjb3JkS2V5IH0sXG4gIF9nZXRDb250ZXh0LCBhcHAsIHJlY29yZEtleSxcbik7XG5cbmV4cG9ydCBjb25zdCBfZ2V0Q29udGV4dCA9IChhcHAsIHJlY29yZEtleSkgPT4ge1xuICBjb25zdCByZWNvcmROb2RlID0gZ2V0RXhhY3ROb2RlRm9yUGF0aChhcHAuaGllcmFyY2h5KShyZWNvcmRLZXkpO1xuXG4gIGNvbnN0IGNhY2hlZFJlZmVyZW5jZUluZGV4ZXMgPSB7fTtcblxuICBjb25zdCBsYXp5TG9hZFJlZmVyZW5jZUluZGV4ID0gYXN5bmMgKHR5cGVPcHRpb25zKSA9PiB7XG4gICAgaWYgKCFoYXMoY2FjaGVkUmVmZXJlbmNlSW5kZXhlcywgdHlwZU9wdGlvbnMuaW5kZXhOb2RlS2V5KSkge1xuICAgICAgY2FjaGVkUmVmZXJlbmNlSW5kZXhlc1t0eXBlT3B0aW9ucy5pbmRleE5vZGVLZXldID0ge1xuICAgICAgICB0eXBlT3B0aW9ucyxcbiAgICAgICAgZGF0YTogYXdhaXQgcmVhZFJlZmVyZW5jZUluZGV4KFxuICAgICAgICAgIGFwcCwgcmVjb3JkS2V5LCB0eXBlT3B0aW9ucyxcbiAgICAgICAgKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlZFJlZmVyZW5jZUluZGV4ZXNbdHlwZU9wdGlvbnMuaW5kZXhOb2RlS2V5XTtcbiAgfTtcblxuICBjb25zdCBnZXRUeXBlT3B0aW9ucyA9IHR5cGVPcHRpb25zX29yX2ZpZWxkTmFtZSA9PiAoaXNTdHJpbmcodHlwZU9wdGlvbnNfb3JfZmllbGROYW1lKVxuICAgID8gZmluZEZpZWxkKHJlY29yZE5vZGUsIHR5cGVPcHRpb25zX29yX2ZpZWxkTmFtZSlcbiAgICAgIC50eXBlT3B0aW9uc1xuICAgIDogdHlwZU9wdGlvbnNfb3JfZmllbGROYW1lKTtcblxuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZUV4aXN0czogYXN5bmMgKHR5cGVPcHRpb25zX29yX2ZpZWxkTmFtZSwga2V5KSA9PiB7XG4gICAgICBjb25zdCB0eXBlT3B0aW9ucyA9IGdldFR5cGVPcHRpb25zKHR5cGVPcHRpb25zX29yX2ZpZWxkTmFtZSk7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IGxhenlMb2FkUmVmZXJlbmNlSW5kZXgodHlwZU9wdGlvbnMpO1xuICAgICAgcmV0dXJuIHNvbWUoZGF0YSwgaSA9PiBpLmtleSA9PT0ga2V5KTtcbiAgICB9LFxuICAgIHJlZmVyZW5jZU9wdGlvbnM6IGFzeW5jICh0eXBlT3B0aW9uc19vcl9maWVsZE5hbWUpID0+IHtcbiAgICAgIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnModHlwZU9wdGlvbnNfb3JfZmllbGROYW1lKTtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgbGF6eUxvYWRSZWZlcmVuY2VJbmRleCh0eXBlT3B0aW9ucyk7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9LFxuICAgIHJlY29yZE5vZGUsXG4gIH07XG59O1xuXG5jb25zdCByZWFkUmVmZXJlbmNlSW5kZXggPSBhc3luYyAoYXBwLCByZWNvcmRLZXksIHR5cGVPcHRpb25zKSA9PiB7XG4gIGNvbnN0IGluZGV4Tm9kZSA9IGdldE5vZGUoYXBwLmhpZXJhcmNoeSwgdHlwZU9wdGlvbnMuaW5kZXhOb2RlS2V5KTtcbiAgY29uc3QgaW5kZXhLZXkgPSBpc0dsb2JhbEluZGV4KGluZGV4Tm9kZSlcbiAgICA/IGluZGV4Tm9kZS5ub2RlS2V5KClcbiAgICA6IGdldEluZGV4S2V5X0Jhc2VkT25EZWNlbmRhbnQoXG4gICAgICByZWNvcmRLZXksIGluZGV4Tm9kZSxcbiAgICApO1xuXG4gIGNvbnN0IGl0ZW1zID0gYXdhaXQgbGlzdEl0ZW1zKGFwcCkoaW5kZXhLZXkpO1xuICByZXR1cm4gJChpdGVtcywgW1xuICAgIG1hcChpID0+ICh7XG4gICAgICBrZXk6IGkua2V5LFxuICAgICAgdmFsdWU6IGlbdHlwZU9wdGlvbnMuZGlzcGxheVZhbHVlXSxcbiAgICB9KSksXG4gIF0pO1xufTtcbiIsImltcG9ydCB7XG4gIG1hcCwgcmVkdWNlLCBmaWx0ZXIsXG4gIGlzRW1wdHksIGZsYXR0ZW4sIGVhY2gsXG59IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiB9IGZyb20gJ0BueC1qcy9jb21waWxlci11dGlsJztcbmltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBnZXRFeGFjdE5vZGVGb3JQYXRoIH0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7IHZhbGlkYXRlRmllbGRQYXJzZSwgdmFsaWRhdGVUeXBlQ29uc3RyYWludHMgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyAkLCBpc05vdGhpbmcsIGlzTm9uRW1wdHlTdHJpbmcgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgX2dldENvbnRleHQgfSBmcm9tICcuL2dldENvbnRleHQnO1xuXG5jb25zdCBmaWVsZFBhcnNlRXJyb3IgPSAoZmllbGROYW1lLCB2YWx1ZSkgPT4gKHtcbiAgZmllbGRzOiBbZmllbGROYW1lXSxcbiAgbWVzc2FnZTogYENvdWxkIG5vdCBwYXJzZSBmaWVsZCAke2ZpZWxkTmFtZX06JHt2YWx1ZX1gLFxufSk7XG5cbmNvbnN0IHZhbGlkYXRlQWxsRmllbGRQYXJzZSA9IChyZWNvcmQsIHJlY29yZE5vZGUpID0+ICQocmVjb3JkTm9kZS5maWVsZHMsIFtcbiAgbWFwKGYgPT4gKHsgbmFtZTogZi5uYW1lLCBwYXJzZVJlc3VsdDogdmFsaWRhdGVGaWVsZFBhcnNlKGYsIHJlY29yZCkgfSkpLFxuICByZWR1Y2UoKGVycm9ycywgZikgPT4ge1xuICAgIGlmIChmLnBhcnNlUmVzdWx0LnN1Y2Nlc3MpIHJldHVybiBlcnJvcnM7XG4gICAgZXJyb3JzLnB1c2goXG4gICAgICBmaWVsZFBhcnNlRXJyb3IoZi5uYW1lLCBmLnBhcnNlUmVzdWx0LnZhbHVlKSxcbiAgICApO1xuICAgIHJldHVybiBlcnJvcnM7XG4gIH0sIFtdKSxcbl0pO1xuXG5jb25zdCB2YWxpZGF0ZUFsbFR5cGVDb25zdHJhaW50cyA9IGFzeW5jIChyZWNvcmQsIHJlY29yZE5vZGUsIGNvbnRleHQpID0+IHtcbiAgY29uc3QgZXJyb3JzID0gW107XG4gIGZvciAoY29uc3QgZmllbGQgb2YgcmVjb3JkTm9kZS5maWVsZHMpIHtcbiAgICAkKGF3YWl0IHZhbGlkYXRlVHlwZUNvbnN0cmFpbnRzKGZpZWxkLCByZWNvcmQsIGNvbnRleHQpLCBbXG4gICAgICBmaWx0ZXIoaXNOb25FbXB0eVN0cmluZyksXG4gICAgICBtYXAobSA9PiAoeyBtZXNzYWdlOiBtLCBmaWVsZHM6IFtmaWVsZC5uYW1lXSB9KSksXG4gICAgICBlYWNoKGUgPT4gZXJyb3JzLnB1c2goZSkpLFxuICAgIF0pO1xuICB9XG4gIHJldHVybiBlcnJvcnM7XG59O1xuXG5jb25zdCBydW5SZWNvcmRWYWxpZGF0aW9uUnVsZXMgPSAocmVjb3JkLCByZWNvcmROb2RlKSA9PiB7XG4gIGNvbnN0IHJ1blZhbGlkYXRpb25SdWxlID0gKHJ1bGUpID0+IHtcbiAgICBjb25zdCBpc1ZhbGlkID0gY29tcGlsZUV4cHJlc3Npb24ocnVsZS5leHByZXNzaW9uV2hlblZhbGlkKTtcbiAgICBjb25zdCBleHByZXNzaW9uQ29udGV4dCA9IHsgcmVjb3JkLCBfIH07XG4gICAgcmV0dXJuIChpc1ZhbGlkKGV4cHJlc3Npb25Db250ZXh0KVxuICAgICAgPyB7IHZhbGlkOiB0cnVlIH1cbiAgICAgIDogKHtcbiAgICAgICAgdmFsaWQ6IGZhbHNlLFxuICAgICAgICBmaWVsZHM6IHJ1bGUuaW52YWxpZEZpZWxkcyxcbiAgICAgICAgbWVzc2FnZTogcnVsZS5tZXNzYWdlV2hlbkludmFsaWQsXG4gICAgICB9KSk7XG4gIH07XG5cbiAgcmV0dXJuICQocmVjb3JkTm9kZS52YWxpZGF0aW9uUnVsZXMsIFtcbiAgICBtYXAocnVuVmFsaWRhdGlvblJ1bGUpLFxuICAgIGZsYXR0ZW4sXG4gICAgZmlsdGVyKHIgPT4gci52YWxpZCA9PT0gZmFsc2UpLFxuICAgIG1hcChyID0+ICh7IGZpZWxkczogci5maWVsZHMsIG1lc3NhZ2U6IHIubWVzc2FnZSB9KSksXG4gIF0pO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlID0gYXBwID0+IGFzeW5jIChyZWNvcmQsIGNvbnRleHQpID0+IHtcbiAgY29udGV4dCA9IGlzTm90aGluZyhjb250ZXh0KVxuICAgID8gX2dldENvbnRleHQoYXBwLCByZWNvcmQua2V5KVxuICAgIDogY29udGV4dDtcblxuICBjb25zdCByZWNvcmROb2RlID0gZ2V0RXhhY3ROb2RlRm9yUGF0aChhcHAuaGllcmFyY2h5KShyZWNvcmQua2V5KTtcbiAgY29uc3QgZmllbGRQYXJzZUZhaWxzID0gdmFsaWRhdGVBbGxGaWVsZFBhcnNlKHJlY29yZCwgcmVjb3JkTm9kZSk7XG5cbiAgLy8gbm9uIHBhcnNpbmcgd291bGQgY2F1c2UgZnVydGhlciBpc3N1ZXMgLSBleGl0IGhlcmVcbiAgaWYgKCFpc0VtcHR5KGZpZWxkUGFyc2VGYWlscykpIHsgcmV0dXJuICh7IGlzVmFsaWQ6IGZhbHNlLCBlcnJvcnM6IGZpZWxkUGFyc2VGYWlscyB9KTsgfVxuXG4gIGNvbnN0IHJlY29yZFZhbGlkYXRpb25SdWxlRmFpbHMgPSBydW5SZWNvcmRWYWxpZGF0aW9uUnVsZXMocmVjb3JkLCByZWNvcmROb2RlKTtcbiAgY29uc3QgdHlwZUNvbnRyYWludEZhaWxzID0gYXdhaXQgdmFsaWRhdGVBbGxUeXBlQ29uc3RyYWludHMocmVjb3JkLCByZWNvcmROb2RlLCBjb250ZXh0KTtcblxuICBpZiAoaXNFbXB0eShmaWVsZFBhcnNlRmFpbHMpXG4gICAgICAgJiYgaXNFbXB0eShyZWNvcmRWYWxpZGF0aW9uUnVsZUZhaWxzKVxuICAgICAgICYmIGlzRW1wdHkodHlwZUNvbnRyYWludEZhaWxzKSkge1xuICAgIHJldHVybiAoeyBpc1ZhbGlkOiB0cnVlLCBlcnJvcnM6IFtdIH0pO1xuICB9XG5cbiAgcmV0dXJuICh7XG4gICAgaXNWYWxpZDogZmFsc2UsXG4gICAgZXJyb3JzOiBfLnVuaW9uKGZpZWxkUGFyc2VGYWlscywgdHlwZUNvbnRyYWludEZhaWxzLCByZWNvcmRWYWxpZGF0aW9uUnVsZUZhaWxzKSxcbiAgfSk7XG59O1xuIiwiaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7XG4gIGdldEZsYXR0ZW5lZEhpZXJhcmNoeSxcbiAgaXNDb2xsZWN0aW9uUmVjb3JkLFxuICBpc1Jvb3QsXG4gIGdldEV4YWN0Tm9kZUZvclBhdGgsXG59IGZyb20gJy4uL3RlbXBsYXRlQXBpL2hpZXJhcmNoeSc7XG5pbXBvcnQgeyAkLCBhbGxUcnVlLCBqb2luS2V5IH0gZnJvbSAnLi4vY29tbW9uJztcblxuY29uc3QgZW5zdXJlQ29sbGVjdGlvbklzSW5pdGlhbGlzZWQgPSBhc3luYyAoZGF0YXN0b3JlLCBub2RlLCBwYXJlbnRLZXkpID0+IHtcbiAgaWYgKCFhd2FpdCBkYXRhc3RvcmUuZXhpc3RzKHBhcmVudEtleSkpIHtcbiAgICBhd2FpdCBkYXRhc3RvcmUuY3JlYXRlRm9sZGVyKHBhcmVudEtleSk7XG4gICAgYXdhaXQgZGF0YXN0b3JlLmNyZWF0ZUZvbGRlcihcbiAgICAgIGpvaW5LZXkocGFyZW50S2V5LCAnYWxsaWRzJyksXG4gICAgKTtcbiAgICBhd2FpdCBkYXRhc3RvcmUuY3JlYXRlRm9sZGVyKFxuICAgICAgam9pbktleShcbiAgICAgICAgcGFyZW50S2V5LFxuICAgICAgICAnYWxsaWRzJyxcbiAgICAgICAgbm9kZS5ub2RlSWQudG9TdHJpbmcoKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufTtcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxpc2VSb290Q29sbGVjdGlvbnMgPSBhc3luYyAoZGF0YXN0b3JlLCBoaWVyYXJjaHkpID0+IHtcbiAgY29uc3Qgcm9vdENvbGxlY3Rpb25SZWNvcmQgPSBhbGxUcnVlKFxuICAgIG4gPT4gaXNSb290KG4ucGFyZW50KCkpLFxuICAgIGlzQ29sbGVjdGlvblJlY29yZCxcbiAgKTtcblxuICBjb25zdCBmbGF0aGllcmFyY2h5ID0gZ2V0RmxhdHRlbmVkSGllcmFyY2h5KGhpZXJhcmNoeSk7XG5cbiAgY29uc3QgY29sbGVjdGlvblJlY29yZHMgPSAkKGZsYXRoaWVyYXJjaHksIFtcbiAgICBmaWx0ZXIocm9vdENvbGxlY3Rpb25SZWNvcmQpLFxuICBdKTtcblxuICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xsZWN0aW9uUmVjb3Jkcykge1xuICAgIGF3YWl0IGVuc3VyZUNvbGxlY3Rpb25Jc0luaXRpYWxpc2VkKFxuICAgICAgZGF0YXN0b3JlLFxuICAgICAgY29sLFxuICAgICAgY29sLmNvbGxlY3Rpb25QYXRoUmVneCgpLFxuICAgICk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsaXNlQ2hpbGRDb2xsZWN0aW9ucyA9IGFzeW5jIChhcHAsIHJlY29yZEtleSkgPT4ge1xuICBjb25zdCBjaGlsZENvbGxlY3Rpb25SZWNvcmRzID0gJChyZWNvcmRLZXksIFtcbiAgICBnZXRFeGFjdE5vZGVGb3JQYXRoKGFwcC5oaWVyYXJjaHkpLFxuICAgIG4gPT4gbi5jaGlsZHJlbixcbiAgICBmaWx0ZXIoaXNDb2xsZWN0aW9uUmVjb3JkKSxcbiAgXSk7XG5cbiAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZENvbGxlY3Rpb25SZWNvcmRzKSB7XG4gICAgYXdhaXQgZW5zdXJlQ29sbGVjdGlvbklzSW5pdGlhbGlzZWQoXG4gICAgICBhcHAuZGF0YXN0b3JlLFxuICAgICAgY2hpbGQsXG4gICAgICBqb2luS2V5KHJlY29yZEtleSwgY2hpbGQuY29sbGVjdGlvbk5hbWUpLFxuICAgICk7XG4gIH1cbn07XG4iLCJpbXBvcnQge1xuICBqb2luLCBwdWxsLFxuICBtYXAsIGZsYXR0ZW4sIG9yZGVyQnksXG4gIGZpbHRlciwgZmluZCxcbn0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7XG4gIGdldFBhcmVudEtleSxcbiAgZ2V0RmxhdHRlbmVkSGllcmFyY2h5LFxuICBnZXRDb2xsZWN0aW9uTm9kZUJ5S2V5T3JOb2RlS2V5LCBnZXROb2RlRm9yQ29sbGVjdGlvblBhdGgsXG4gIGlzQ29sbGVjdGlvblJlY29yZCwgaXNBbmNlc3Rvcixcbn0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7IGpvaW5LZXksIHNhZmVLZXksICQgfSBmcm9tICcuLi9jb21tb24nO1xuXG5jb25zdCBhbGxJZENoYXJzID0gJzAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXy0nO1xuXG5jb25zdCBhbGxJZHNTdHJpbmdzRm9yRmFjdG9yID0gKGNvbGxlY3Rpb25Ob2RlKSA9PiB7XG4gIGNvbnN0IGZhY3RvciA9IGNvbGxlY3Rpb25Ob2RlLmFsbGlkc1NoYXJkRmFjdG9yO1xuICBjb25zdCBjaGFyUmFuZ2VQZXJTaGFyZCA9IDY0IC8gZmFjdG9yO1xuICBjb25zdCBhbGxJZFN0cmluZ3MgPSBbXTtcbiAgbGV0IGluZGV4ID0gMDtcbiAgbGV0IGN1cnJlbnRJZHNTaGFyZCA9ICcnO1xuICB3aGlsZSAoaW5kZXggPCA2NCkge1xuICAgIGN1cnJlbnRJZHNTaGFyZCArPSBhbGxJZENoYXJzW2luZGV4XTtcbiAgICBpZiAoKGluZGV4ICsgMSkgJSBjaGFyUmFuZ2VQZXJTaGFyZCA9PT0gMCkge1xuICAgICAgYWxsSWRTdHJpbmdzLnB1c2goY3VycmVudElkc1NoYXJkKTtcbiAgICAgIGN1cnJlbnRJZHNTaGFyZCA9ICcnO1xuICAgIH1cbiAgICBpbmRleCsrO1xuICB9XG5cbiAgcmV0dXJuIGFsbElkU3RyaW5ncztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxJZHNTaGFyZE5hbWVzID0gKGFwcEhpZXJhcmNoeSwgY29sbGVjdGlvbktleSkgPT4ge1xuICBjb25zdCBjb2xsZWN0aW9uUmVjb3JkTm9kZSA9IGdldE5vZGVGb3JDb2xsZWN0aW9uUGF0aChhcHBIaWVyYXJjaHkpKGNvbGxlY3Rpb25LZXkpO1xuICByZXR1cm4gJChjb2xsZWN0aW9uUmVjb3JkTm9kZSwgW1xuICAgIGMgPT4gW2Mubm9kZUlkXSxcbiAgICBtYXAoaSA9PiBtYXAoYyA9PiBfYWxsSWRzU2hhcmRLZXkoY29sbGVjdGlvbktleSwgaSwgYykpKGFsbElkc1N0cmluZ3NGb3JGYWN0b3IoY29sbGVjdGlvblJlY29yZE5vZGUpKSksXG4gICAgZmxhdHRlbixcbiAgXSk7XG59O1xuXG5jb25zdCBfYWxsSWRzU2hhcmRLZXkgPSAoY29sbGVjdGlvbktleSwgY2hpbGRObywgc2hhcmRLZXkpID0+IGpvaW5LZXkoXG4gIGNvbGxlY3Rpb25LZXksXG4gICdhbGxpZHMnLFxuICBjaGlsZE5vLFxuICBzaGFyZEtleSxcbik7XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxJZHNTaGFyZEtleSA9IChhcHBIaWVyYXJjaHksIGNvbGxlY3Rpb25LZXksIHJlY29yZElkKSA9PiB7XG4gIGNvbnN0IGluZGV4T2ZGaXJzdERhc2ggPSByZWNvcmRJZC5pbmRleE9mKCctJyk7XG5cbiAgY29uc3QgY29sbGVjdGlvbk5vZGUgPSBnZXROb2RlRm9yQ29sbGVjdGlvblBhdGgoYXBwSGllcmFyY2h5KShjb2xsZWN0aW9uS2V5KTtcblxuICBjb25zdCBpZEZpcnN0Q2hhciA9IHJlY29yZElkW2luZGV4T2ZGaXJzdERhc2ggKyAxXTtcbiAgY29uc3QgYWxsSWRzU2hhcmRJZCA9ICQoY29sbGVjdGlvbk5vZGUsIFtcbiAgICBhbGxJZHNTdHJpbmdzRm9yRmFjdG9yLFxuICAgIGZpbmQoaSA9PiBpLmluY2x1ZGVzKGlkRmlyc3RDaGFyKSksXG4gIF0pO1xuXG4gIHJldHVybiBfYWxsSWRzU2hhcmRLZXkoXG4gICAgY29sbGVjdGlvbktleSxcbiAgICByZWNvcmRJZC5zbGljZSgwLCBpbmRleE9mRmlyc3REYXNoKSxcbiAgICBhbGxJZHNTaGFyZElkLFxuICApO1xufTtcblxuY29uc3QgZ2V0T3JDcmVhdGVTaGFyZEZpbGUgPSBhc3luYyAoZGF0YXN0b3JlLCBhbGxJZHNLZXkpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZGF0YXN0b3JlLmxvYWRGaWxlKGFsbElkc0tleSk7XG4gIH0gY2F0Y2ggKGVMb2FkKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGRhdGFzdG9yZS5jcmVhdGVGaWxlKGFsbElkc0tleSwgJycpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH0gY2F0Y2ggKGVDcmVhdGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYEVycm9yIGxvYWRpbmcsIHRoZW4gY3JlYXRpbmcgYWxsSWRzICR7YWxsSWRzS2V5XG4gICAgICAgIH0gOiBMT0FEIDogJHtlTG9hZC5tZXNzYWdlXG4gICAgICAgIH0gOiBDUkVBVEUgOiAke2VDcmVhdGV9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59O1xuXG5jb25zdCBnZXRTaGFyZEZpbGUgPSBhc3luYyAoZGF0YXN0b3JlLCBhbGxJZHNLZXkpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgZGF0YXN0b3JlLmxvYWRGaWxlKGFsbElkc0tleSk7XG4gIH0gY2F0Y2ggKGVMb2FkKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59O1xuXG5leHBvcnQgY29uc3QgYWRkVG9BbGxJZHMgPSAoYXBwSGllcmFyY2h5LCBkYXRhc3RvcmUpID0+IGFzeW5jIChyZWNvcmQpID0+IHtcbiAgY29uc3QgYWxsSWRzS2V5ID0gZ2V0QWxsSWRzU2hhcmRLZXkoXG4gICAgYXBwSGllcmFyY2h5LFxuICAgIGdldFBhcmVudEtleShyZWNvcmQua2V5KSxcbiAgICByZWNvcmQuaWQsXG4gICk7XG5cbiAgbGV0IGFsbElkcyA9IGF3YWl0IGdldE9yQ3JlYXRlU2hhcmRGaWxlKGRhdGFzdG9yZSwgYWxsSWRzS2V5KTtcblxuICBhbGxJZHMgKz0gYCR7YWxsSWRzLmxlbmd0aCA+IDAgPyAnLCcgOiAnJ30ke3JlY29yZC5pZH1gO1xuXG4gIGF3YWl0IGRhdGFzdG9yZS51cGRhdGVGaWxlKGFsbElkc0tleSwgYWxsSWRzKTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxJZHNJdGVyYXRvciA9IGFwcCA9PiBhc3luYyAoY29sbGVjdGlvbl9LZXlfb3JfTm9kZUtleSkgPT4ge1xuICBjb2xsZWN0aW9uX0tleV9vcl9Ob2RlS2V5ID0gc2FmZUtleShjb2xsZWN0aW9uX0tleV9vcl9Ob2RlS2V5KTtcbiAgY29uc3QgdGFyZ2V0Tm9kZSA9IGdldENvbGxlY3Rpb25Ob2RlQnlLZXlPck5vZGVLZXkoXG4gICAgYXBwLmhpZXJhcmNoeSxcbiAgICBjb2xsZWN0aW9uX0tleV9vcl9Ob2RlS2V5LFxuICApO1xuXG4gIGNvbnN0IGdldEFsbElkc0l0ZXJhdG9yRm9yQ29sbGVjdGlvbktleSA9IGFzeW5jIChjb2xsZWN0aW9uS2V5KSA9PiB7XG4gICAgY29uc3QgYWxsX2FsbElkc0tleXMgPSBnZXRBbGxJZHNTaGFyZE5hbWVzKGFwcC5oaWVyYXJjaHksIGNvbGxlY3Rpb25LZXkpO1xuICAgIGxldCBzaGFyZEluZGV4ID0gMDtcblxuICAgIGNvbnN0IGFsbElkc0Zyb21TaGFyZEl0ZXJhdG9yID0gYXN5bmMgKCkgPT4ge1xuICAgICAgaWYgKHNoYXJkSW5kZXggPT09IGFsbF9hbGxJZHNLZXlzLmxlbmd0aCkgeyByZXR1cm4gKHsgZG9uZTogdHJ1ZSwgcmVzdWx0OiB7IGlkczogW10sIGNvbGxlY3Rpb25LZXkgfSB9KTsgfVxuXG4gICAgICBjb25zdCBzaGFyZEtleSA9IGFsbF9hbGxJZHNLZXlzW3NoYXJkSW5kZXhdO1xuXG4gICAgICBjb25zdCBhbGxJZHMgPSBhd2FpdCBnZXRBbGxJZHNGcm9tU2hhcmQoYXBwLmRhdGFzdG9yZSwgc2hhcmRLZXkpO1xuXG4gICAgICBzaGFyZEluZGV4Kys7XG5cbiAgICAgIHJldHVybiAoe1xuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBpZHM6IGFsbElkcyxcbiAgICAgICAgICBjb2xsZWN0aW9uS2V5LFxuICAgICAgICB9LFxuICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICByZXR1cm4gYWxsSWRzRnJvbVNoYXJkSXRlcmF0b3I7XG4gIH07XG5cbiAgY29uc3QgYW5jZXN0b3JzID0gJChnZXRGbGF0dGVuZWRIaWVyYXJjaHkoYXBwLmhpZXJhcmNoeSksIFtcbiAgICBmaWx0ZXIoaXNDb2xsZWN0aW9uUmVjb3JkKSxcbiAgICBmaWx0ZXIobiA9PiBpc0FuY2VzdG9yKHRhcmdldE5vZGUpKG4pXG4gICAgICAgICAgICAgICAgICAgIHx8IG4ubm9kZUtleSgpID09PSB0YXJnZXROb2RlLm5vZGVLZXkoKSksXG4gICAgb3JkZXJCeShbbiA9PiBuLm5vZGVLZXkoKS5sZW5ndGhdLCBbJ2FzYyddKSxcbiAgXSk7IC8vIHBhcmVudHMgZmlyc3RcblxuICBjb25zdCB0cmF2ZXJzZUZvckl0ZXJhdGVyYXRvcnMgPSBhc3luYyAocGFyZW50UmVjb3JkS2V5ID0gJycsIGN1cnJlbnROb2RlSW5kZXggPSAwKSA9PiB7XG4gICAgY29uc3QgY3VycmVudE5vZGUgPSBhbmNlc3RvcnNbY3VycmVudE5vZGVJbmRleF07XG4gICAgY29uc3QgY3VycmVudENvbGxlY3Rpb25LZXkgPSBqb2luS2V5KFxuICAgICAgcGFyZW50UmVjb3JkS2V5LFxuICAgICAgY3VycmVudE5vZGUuY29sbGVjdGlvbk5hbWUsXG4gICAgKTtcbiAgICBpZiAoY3VycmVudE5vZGUubm9kZUtleSgpID09PSB0YXJnZXROb2RlLm5vZGVLZXkoKSkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgYXdhaXQgZ2V0QWxsSWRzSXRlcmF0b3JGb3JDb2xsZWN0aW9uS2V5KFxuICAgICAgICAgIGN1cnJlbnRDb2xsZWN0aW9uS2V5LFxuICAgICAgICApXTtcbiAgICB9XG4gICAgY29uc3QgYWxsSXRlcmF0b3JzID0gW107XG4gICAgY29uc3QgY3VycmVudEl0ZXJhdG9yID0gYXdhaXQgZ2V0QWxsSWRzSXRlcmF0b3JGb3JDb2xsZWN0aW9uS2V5KFxuICAgICAgY3VycmVudENvbGxlY3Rpb25LZXksXG4gICAgKTtcblxuICAgIGxldCBpZHMgPSBhd2FpdCBjdXJyZW50SXRlcmF0b3IoKTtcbiAgICB3aGlsZSAoaWRzLmRvbmUgPT09IGZhbHNlKSB7XG4gICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkcy5yZXN1bHQuaWRzKSB7XG4gICAgICAgIGFsbEl0ZXJhdG9ycy5wdXNoKFxuICAgICAgICAgIGF3YWl0IHRyYXZlcnNlRm9ySXRlcmF0ZXJhdG9ycyhcbiAgICAgICAgICAgIGpvaW5LZXkoY3VycmVudENvbGxlY3Rpb25LZXksIGlkKSxcbiAgICAgICAgICAgIGN1cnJlbnROb2RlSW5kZXggKyAxLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlkcyA9IGF3YWl0IGN1cnJlbnRJdGVyYXRvcigpO1xuICAgIH1cblxuICAgIHJldHVybiBmbGF0dGVuKGFsbEl0ZXJhdG9ycyk7XG4gIH07XG5cbiAgY29uc3QgaXRlcmF0b3JzQXJyYXkgPSBhd2FpdCB0cmF2ZXJzZUZvckl0ZXJhdGVyYXRvcnMoKTtcbiAgbGV0IGN1cnJlbnRJdGVyYXRvckluZGV4ID0gMDtcbiAgcmV0dXJuIGFzeW5jICgpID0+IHtcbiAgICBpZiAoaXRlcmF0b3JzQXJyYXkubGVuZ3RoID09PSAwKSB7IHJldHVybiB7IGRvbmU6IHRydWUsIHJlc3VsdDogW10gfTsgfVxuICAgIGNvbnN0IGlubmVyUmVzdWx0ID0gYXdhaXQgaXRlcmF0b3JzQXJyYXlbY3VycmVudEl0ZXJhdG9ySW5kZXhdKCk7XG4gICAgaWYgKCFpbm5lclJlc3VsdC5kb25lKSB7IHJldHVybiBpbm5lclJlc3VsdDsgfVxuICAgIGlmIChjdXJyZW50SXRlcmF0b3JJbmRleCA9PSBpdGVyYXRvcnNBcnJheS5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4geyBkb25lOiB0cnVlLCByZXN1bHQ6IGlubmVyUmVzdWx0LnJlc3VsdCB9O1xuICAgIH1cbiAgICBjdXJyZW50SXRlcmF0b3JJbmRleCsrO1xuICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCByZXN1bHQ6IGlubmVyUmVzdWx0LnJlc3VsdCB9O1xuICB9O1xufTtcblxuY29uc3QgZ2V0QWxsSWRzRnJvbVNoYXJkID0gYXN5bmMgKGRhdGFzdG9yZSwgc2hhcmRLZXkpID0+IHtcbiAgY29uc3QgYWxsSWRzU3RyID0gYXdhaXQgZ2V0U2hhcmRGaWxlKGRhdGFzdG9yZSwgc2hhcmRLZXkpO1xuXG4gIGNvbnN0IGFsbElkcyA9IFtdO1xuICBsZXQgY3VycmVudElkID0gJyc7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWxsSWRzU3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgY3VycmVudENoYXIgPSBhbGxJZHNTdHIuY2hhckF0KGkpO1xuICAgIGNvbnN0IGlzTGFzdCA9IChpID09PSBhbGxJZHNTdHIubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGN1cnJlbnRDaGFyID09PSAnLCcgfHwgaXNMYXN0KSB7XG4gICAgICBpZiAoaXNMYXN0KSBjdXJyZW50SWQgKz0gY3VycmVudENoYXI7XG4gICAgICBhbGxJZHMucHVzaChjdXJyZW50SWQpO1xuICAgICAgY3VycmVudElkID0gJyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRJZCArPSBjdXJyZW50Q2hhcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsbElkcztcbn07XG5cbmV4cG9ydCBjb25zdCByZW1vdmVGcm9tQWxsSWRzID0gKGFwcEhpZXJhcmNoeSwgZGF0YXN0b3JlKSA9PiBhc3luYyAocmVjb3JkKSA9PiB7XG4gIGNvbnN0IHNoYXJkS2V5ID0gZ2V0QWxsSWRzU2hhcmRLZXkoXG4gICAgYXBwSGllcmFyY2h5LFxuICAgIGdldFBhcmVudEtleShyZWNvcmQua2V5KSxcbiAgICByZWNvcmQuaWQsXG4gICk7XG4gIGNvbnN0IGFsbElkcyA9IGF3YWl0IGdldEFsbElkc0Zyb21TaGFyZChkYXRhc3RvcmUsIHNoYXJkS2V5KTtcblxuICBjb25zdCBuZXdJZHMgPSAkKGFsbElkcywgW1xuICAgIHB1bGwocmVjb3JkLmlkKSxcbiAgICBqb2luKCcsJyksXG4gIF0pO1xuXG4gIGF3YWl0IGRhdGFzdG9yZS51cGRhdGVGaWxlKHNoYXJkS2V5LCBuZXdJZHMpO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0QWxsSWRzSXRlcmF0b3I7XG4iLCJpbXBvcnQge1xuICBqb2luS2V5LCBrZXlTZXAsIGdldEhhc2hDb2RlLFxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0TGFzdFBhcnRJbktleSB9IGZyb20gJy4uL3RlbXBsYXRlQXBpL2hpZXJhcmNoeSc7XG5cbmV4cG9ydCBjb25zdCBUUkFOU0FDVElPTlNfRk9MREVSID0gYCR7a2V5U2VwfS50cmFuc2FjdGlvbnNgO1xuZXhwb3J0IGNvbnN0IExPQ0tfRklMRU5BTUUgPSAnbG9jayc7XG5leHBvcnQgY29uc3QgTE9DS19GSUxFX0tFWSA9IGpvaW5LZXkoXG4gIFRSQU5TQUNUSU9OU19GT0xERVIsIExPQ0tfRklMRU5BTUUsXG4pO1xuZXhwb3J0IGNvbnN0IGlkU2VwID0gJyQnO1xuXG5jb25zdCBpc09mVHlwZSA9IHR5cCA9PiB0cmFucyA9PiB0cmFucy50cmFuc2FjdGlvblR5cGUgPT09IHR5cDtcblxuZXhwb3J0IGNvbnN0IENSRUFURV9SRUNPUkRfVFJBTlNBQ1RJT04gPSAnY3JlYXRlJztcbmV4cG9ydCBjb25zdCBVUERBVEVfUkVDT1JEX1RSQU5TQUNUSU9OID0gJ3VwZGF0ZSc7XG5leHBvcnQgY29uc3QgREVMRVRFX1JFQ09SRF9UUkFOU0FDVElPTiA9ICdkZWxldGUnO1xuZXhwb3J0IGNvbnN0IEJVSUxEX0lOREVYX1RSQU5TQUNUSU9OID0gJ2J1aWxkJztcblxuZXhwb3J0IGNvbnN0IGlzVXBkYXRlID0gaXNPZlR5cGUoVVBEQVRFX1JFQ09SRF9UUkFOU0FDVElPTik7XG5leHBvcnQgY29uc3QgaXNEZWxldGUgPSBpc09mVHlwZShERUxFVEVfUkVDT1JEX1RSQU5TQUNUSU9OKTtcbmV4cG9ydCBjb25zdCBpc0NyZWF0ZSA9IGlzT2ZUeXBlKENSRUFURV9SRUNPUkRfVFJBTlNBQ1RJT04pO1xuZXhwb3J0IGNvbnN0IGlzQnVpbGRJbmRleCA9IGlzT2ZUeXBlKEJVSUxEX0lOREVYX1RSQU5TQUNUSU9OKTtcblxuZXhwb3J0IGNvbnN0IGtleVRvRm9sZGVyTmFtZSA9IG5vZGVLZXkgPT4gZ2V0SGFzaENvZGUobm9kZUtleSk7XG5cbmV4cG9ydCBjb25zdCBnZXRUcmFuc2FjdGlvbklkID0gKHJlY29yZElkLCB0cmFuc2FjdGlvblR5cGUsIHVuaXF1ZUlkKSA9PiBcbiAgYCR7cmVjb3JkSWR9JHtpZFNlcH0ke3RyYW5zYWN0aW9uVHlwZX0ke2lkU2VwfSR7dW5pcXVlSWR9YDtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkSW5kZXhGb2xkZXIgPSAnLkJVSUxELSc7XG5leHBvcnQgY29uc3Qgbm9kZUtleUhhc2hGcm9tQnVpbGRGb2xkZXIgPSBmb2xkZXIgPT4gZm9sZGVyLnJlcGxhY2UoYnVpbGRJbmRleEZvbGRlciwgJycpO1xuXG5leHBvcnQgY29uc3QgaXNCdWlsZEluZGV4Rm9sZGVyID0ga2V5ID0+IGdldExhc3RQYXJ0SW5LZXkoa2V5KS5zdGFydHNXaXRoKGJ1aWxkSW5kZXhGb2xkZXIpO1xuXG5leHBvcnQgY29uc3QgSW5kZXhOb2RlS2V5Rm9sZGVyID0gaW5kZXhOb2RlS2V5ID0+IGpvaW5LZXkoXG4gIFRSQU5TQUNUSU9OU19GT0xERVIsXG4gIGJ1aWxkSW5kZXhGb2xkZXIgKyBrZXlUb0ZvbGRlck5hbWUoaW5kZXhOb2RlS2V5KSxcbik7XG5cbmV4cG9ydCBjb25zdCBJbmRleE5vZGVLZXlCYXRjaEZvbGRlciA9IChpbmRleE5vZGVLZXksIGNvdW50KSA9PiBcbiAgam9pbktleShJbmRleE5vZGVLZXlGb2xkZXIoaW5kZXhOb2RlS2V5KSwgTWF0aC5mbG9vcihjb3VudCAvIEJVSUxESU5ERVhfQkFUQ0hfQ09VTlQpLnRvU3RyaW5nKCkpO1xuXG5leHBvcnQgY29uc3QgSW5kZXhTaGFyZEtleUZvbGRlciA9IChpbmRleE5vZGVLZXksIGluZGV4U2hhcmRLZXkpID0+IFxuICBqb2luS2V5KEluZGV4Tm9kZUtleUZvbGRlcihpbmRleE5vZGVLZXkpLCBpbmRleFNoYXJkS2V5KTtcblxuZXhwb3J0IGNvbnN0IEJVSUxESU5ERVhfQkFUQ0hfQ09VTlQgPSAxMDAwO1xuZXhwb3J0IGNvbnN0IHRpbWVvdXRNaWxsaXNlY29uZHMgPSAzMCAqIDEwMDA7IC8vIDMwIHNlY3NcbmV4cG9ydCBjb25zdCBtYXhMb2NrUmV0cmllcyA9IDE7XG4iLCJpbXBvcnQgeyBnZW5lcmF0ZSB9IGZyb20gJ3Nob3J0aWQnO1xuaW1wb3J0IHsgam9pbktleSB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRMYXN0UGFydEluS2V5IH0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7XG4gIEluZGV4Tm9kZUtleUZvbGRlciwgQlVJTERJTkRFWF9CQVRDSF9DT1VOVCxcbiAgSW5kZXhOb2RlS2V5QmF0Y2hGb2xkZXIsIFRSQU5TQUNUSU9OU19GT0xERVIsIGdldFRyYW5zYWN0aW9uSWQsIENSRUFURV9SRUNPUkRfVFJBTlNBQ1RJT04sIFVQREFURV9SRUNPUkRfVFJBTlNBQ1RJT04sXG4gIERFTEVURV9SRUNPUkRfVFJBTlNBQ1RJT04sIEJVSUxEX0lOREVYX1RSQU5TQUNUSU9OLFxufSBmcm9tICcuL3RyYW5zYWN0aW9uc0NvbW1vbic7XG5cblxuZXhwb3J0IGNvbnN0IHRyYW5zYWN0aW9uRm9yQ3JlYXRlUmVjb3JkID0gYXN5bmMgKGFwcCwgcmVjb3JkKSA9PiBhd2FpdCB0cmFuc2FjdGlvbihcbiAgYXBwLmRhdGFzdG9yZSwgQ1JFQVRFX1JFQ09SRF9UUkFOU0FDVElPTixcbiAgcmVjb3JkLmtleSwgeyByZWNvcmQgfSxcbiAgZ2V0VHJhbnNhY3Rpb25LZXlfUmVjb3Jkcyxcbik7XG5cbmV4cG9ydCBjb25zdCB0cmFuc2FjdGlvbkZvclVwZGF0ZVJlY29yZCA9IGFzeW5jIChhcHAsIG9sZFJlY29yZCwgbmV3UmVjb3JkKSA9PiBhd2FpdCB0cmFuc2FjdGlvbihcbiAgYXBwLmRhdGFzdG9yZSwgVVBEQVRFX1JFQ09SRF9UUkFOU0FDVElPTixcbiAgbmV3UmVjb3JkLmtleSwgeyBvbGRSZWNvcmQsIHJlY29yZDogbmV3UmVjb3JkIH0sXG4gIGdldFRyYW5zYWN0aW9uS2V5X1JlY29yZHMsXG4pO1xuXG5leHBvcnQgY29uc3QgdHJhbnNhY3Rpb25Gb3JEZWxldGVSZWNvcmQgPSBhc3luYyAoYXBwLCByZWNvcmQpID0+IGF3YWl0IHRyYW5zYWN0aW9uKFxuICBhcHAuZGF0YXN0b3JlLCBERUxFVEVfUkVDT1JEX1RSQU5TQUNUSU9OLFxuICByZWNvcmQua2V5LCB7IHJlY29yZCB9LFxuICBnZXRUcmFuc2FjdGlvbktleV9SZWNvcmRzLFxuKTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zYWN0aW9uRm9yQnVpbGRJbmRleCA9IGFzeW5jIChhcHAsIGluZGV4Tm9kZUtleSwgcmVjb3JkS2V5LCBjb3VudCkgPT4ge1xuICBjb25zdCB0cmFuc2FjdGlvbkZvbGRlciA9IEluZGV4Tm9kZUtleUJhdGNoRm9sZGVyKGluZGV4Tm9kZUtleSwgY291bnQpO1xuICBpZiAoY291bnQgJSBCVUlMRElOREVYX0JBVENIX0NPVU5UID09PSAwKSB7XG4gICAgYXdhaXQgYXBwLmRhdGFzdG9yZS5jcmVhdGVGb2xkZXIodHJhbnNhY3Rpb25Gb2xkZXIpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHRyYW5zYWN0aW9uKFxuICAgIGFwcC5kYXRhc3RvcmUsIEJVSUxEX0lOREVYX1RSQU5TQUNUSU9OLFxuICAgIHJlY29yZEtleSwgeyByZWNvcmRLZXkgfSxcbiAgICBpZCA9PiBqb2luS2V5KHRyYW5zYWN0aW9uRm9sZGVyLCBpZCksXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlQnVpbGRJbmRleEZvbGRlciA9IGFzeW5jIChkYXRhc3RvcmUsIGluZGV4Tm9kZUtleSkgPT4gYXdhaXQgZGF0YXN0b3JlLmNyZWF0ZUZvbGRlcihcbiAgSW5kZXhOb2RlS2V5Rm9sZGVyKGluZGV4Tm9kZUtleSksXG4pO1xuXG5jb25zdCBnZXRUcmFuc2FjdGlvbktleV9SZWNvcmRzID0gaWQgPT4gam9pbktleShUUkFOU0FDVElPTlNfRk9MREVSLCBpZCk7XG5cbmNvbnN0IHRyYW5zYWN0aW9uID0gYXN5bmMgKGRhdGFzdG9yZSwgdHJhbnNhY3Rpb25UeXBlLCByZWNvcmRLZXksIGRhdGEsIGdldFRyYW5zYWN0aW9uS2V5KSA9PiB7XG4gIGNvbnN0IHJlY29yZElkID0gZ2V0TGFzdFBhcnRJbktleShyZWNvcmRLZXkpO1xuICBjb25zdCB1bmlxdWVJZCA9IGdlbmVyYXRlKCk7XG4gIGNvbnN0IGlkID0gZ2V0VHJhbnNhY3Rpb25JZChcbiAgICByZWNvcmRJZCwgdHJhbnNhY3Rpb25UeXBlLCB1bmlxdWVJZCxcbiAgKTtcblxuICBjb25zdCBrZXkgPSBnZXRUcmFuc2FjdGlvbktleShpZCk7XG5cbiAgY29uc3QgdHJhbnMgPSB7XG4gICAgdHJhbnNhY3Rpb25UeXBlLFxuICAgIHJlY29yZEtleSxcbiAgICAuLi5kYXRhLFxuICAgIGlkLFxuICB9O1xuXG4gIGF3YWl0IGRhdGFzdG9yZS5jcmVhdGVKc29uKFxuICAgIGtleSwgdHJhbnMsXG4gICk7XG5cbiAgcmV0dXJuIHRyYW5zO1xufTtcbiIsImltcG9ydCB7IGlzU2hhcmRlZEluZGV4IH0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7IGpvaW5LZXkgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgZ2V0U2hhcmRNYXBLZXksIGdldFVuc2hhcmRlZEluZGV4RGF0YUtleSwgY3JlYXRlSW5kZXhGaWxlIH0gZnJvbSAnLi9zaGFyZGluZyc7XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsaXNlSW5kZXggPSBhc3luYyAoZGF0YXN0b3JlLCBwYXJlbnRLZXksIGluZGV4KSA9PiB7XG4gIGNvbnN0IGluZGV4S2V5ID0gam9pbktleShwYXJlbnRLZXksIGluZGV4Lm5hbWUpO1xuXG4gIGF3YWl0IGRhdGFzdG9yZS5jcmVhdGVGb2xkZXIoaW5kZXhLZXkpO1xuXG4gIGlmIChpc1NoYXJkZWRJbmRleChpbmRleCkpIHtcbiAgICBhd2FpdCBkYXRhc3RvcmUuY3JlYXRlRmlsZShcbiAgICAgIGdldFNoYXJkTWFwS2V5KGluZGV4S2V5KSxcbiAgICAgICdbXScsXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBjcmVhdGVJbmRleEZpbGUoXG4gICAgICBkYXRhc3RvcmUsXG4gICAgICBnZXRVbnNoYXJkZWRJbmRleERhdGFLZXkoaW5kZXhLZXkpLFxuICAgICAgaW5kZXgsXG4gICAgKTtcbiAgfVxufTtcbiIsImltcG9ydCB7XG4gIGNsb25lRGVlcCxcbiAgZmxhdHRlbixcbiAgbWFwLFxuICBmaWx0ZXIsXG59IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyBpbml0aWFsaXNlQ2hpbGRDb2xsZWN0aW9ucyB9IGZyb20gJy4uL2NvbGxlY3Rpb25BcGkvaW5pdGlhbGlzZSc7XG5pbXBvcnQgeyB2YWxpZGF0ZSB9IGZyb20gJy4vdmFsaWRhdGUnO1xuaW1wb3J0IHsgX2xvYWQsIGdldFJlY29yZEZpbGVOYW1lIH0gZnJvbSAnLi9sb2FkJztcbmltcG9ydCB7XG4gIGFwaVdyYXBwZXIsIGV2ZW50cywgJCwgam9pbktleSxcbn0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7XG4gIGdldEZsYXR0ZW5lZEhpZXJhcmNoeSxcbiAgZ2V0RXhhY3ROb2RlRm9yUGF0aCxcbiAgaXNSZWNvcmQsXG4gIGdldE5vZGUsXG4gIGZpZWxkUmV2ZXJzZXNSZWZlcmVuY2VUb05vZGUsXG59IGZyb20gJy4uL3RlbXBsYXRlQXBpL2hpZXJhcmNoeSc7XG5pbXBvcnQgeyBtYXBSZWNvcmQgfSBmcm9tICcuLi9pbmRleGluZy9ldmFsdWF0ZSc7XG5pbXBvcnQgeyBsaXN0SXRlbXMgfSBmcm9tICcuLi9pbmRleEFwaS9saXN0SXRlbXMnO1xuaW1wb3J0IHsgYWRkVG9BbGxJZHMgfSBmcm9tICcuLi9pbmRleGluZy9hbGxJZHMnO1xuaW1wb3J0IHtcbiAgdHJhbnNhY3Rpb25Gb3JDcmVhdGVSZWNvcmQsXG4gIHRyYW5zYWN0aW9uRm9yVXBkYXRlUmVjb3JkLFxufSBmcm9tICcuLi90cmFuc2FjdGlvbnMvY3JlYXRlJztcbmltcG9ydCB7IHBlcm1pc3Npb24gfSBmcm9tICcuLi9hdXRoQXBpL3Blcm1pc3Npb25zJztcbmltcG9ydCB7IGluaXRpYWxpc2VJbmRleCB9IGZyb20gJy4uL2luZGV4aW5nL2luaXRpYWxpc2VJbmRleCc7XG5pbXBvcnQgeyBCYWRSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9jb21tb24vZXJyb3JzJztcblxuZXhwb3J0IGNvbnN0IHNhdmUgPSBhcHAgPT4gYXN5bmMgKHJlY29yZCwgY29udGV4dCkgPT4gYXBpV3JhcHBlcihcbiAgYXBwLFxuICBldmVudHMucmVjb3JkQXBpLnNhdmUsXG4gIHJlY29yZC5pc05ld1xuICAgID8gcGVybWlzc2lvbi5jcmVhdGVSZWNvcmQuaXNBdXRob3JpemVkKHJlY29yZC5rZXkpXG4gICAgOiBwZXJtaXNzaW9uLnVwZGF0ZVJlY29yZC5pc0F1dGhvcml6ZWQocmVjb3JkLmtleSksIHsgcmVjb3JkIH0sXG4gIF9zYXZlLCBhcHAsIHJlY29yZCwgY29udGV4dCwgZmFsc2UsXG4pO1xuXG5cbmV4cG9ydCBjb25zdCBfc2F2ZSA9IGFzeW5jIChhcHAsIHJlY29yZCwgY29udGV4dCwgc2tpcFZhbGlkYXRpb24gPSBmYWxzZSkgPT4ge1xuICBjb25zdCByZWNvcmRDbG9uZSA9IGNsb25lRGVlcChyZWNvcmQpO1xuICBpZiAoIXNraXBWYWxpZGF0aW9uKSB7XG4gICAgY29uc3QgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHZhbGlkYXRlKGFwcCkocmVjb3JkQ2xvbmUsIGNvbnRleHQpO1xuICAgIGlmICghdmFsaWRhdGlvblJlc3VsdC5pc1ZhbGlkKSB7XG4gICAgICBhd2FpdCBhcHAucHVibGlzaChldmVudHMucmVjb3JkQXBpLnNhdmUub25JbnZhbGlkLCB7IHJlY29yZCwgdmFsaWRhdGlvblJlc3VsdCB9KTtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoYFNhdmUgOiBSZWNvcmQgSW52YWxpZCA6ICR7XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHZhbGlkYXRpb25SZXN1bHQuZXJyb3JzKX1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAocmVjb3JkQ2xvbmUuaXNOZXcpIHtcbiAgICBhd2FpdCBhZGRUb0FsbElkcyhhcHAuaGllcmFyY2h5LCBhcHAuZGF0YXN0b3JlKShyZWNvcmRDbG9uZSk7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBhd2FpdCB0cmFuc2FjdGlvbkZvckNyZWF0ZVJlY29yZChcbiAgICAgIGFwcCwgcmVjb3JkQ2xvbmUsXG4gICAgKTtcbiAgICByZWNvcmRDbG9uZS50cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb24uaWQ7XG4gICAgYXdhaXQgYXBwLmRhdGFzdG9yZS5jcmVhdGVGb2xkZXIocmVjb3JkQ2xvbmUua2V5KTtcbiAgICBhd2FpdCBhcHAuZGF0YXN0b3JlLmNyZWF0ZUZvbGRlcihcbiAgICAgIGpvaW5LZXkocmVjb3JkQ2xvbmUua2V5LCAnZmlsZXMnKSxcbiAgICApO1xuICAgIGF3YWl0IGFwcC5kYXRhc3RvcmUuY3JlYXRlSnNvbihcbiAgICAgIGdldFJlY29yZEZpbGVOYW1lKHJlY29yZENsb25lLmtleSksXG4gICAgICByZWNvcmRDbG9uZSxcbiAgICApO1xuICAgIGF3YWl0IGluaXRpYWxpc2VSZXZlcnNlUmVmZXJlbmNlSW5kZXhlcyhhcHAsIHJlY29yZCk7XG4gICAgYXdhaXQgaW5pdGlhbGlzZUFuY2VzdG9ySW5kZXhlcyhhcHAsIHJlY29yZCk7XG4gICAgYXdhaXQgaW5pdGlhbGlzZUNoaWxkQ29sbGVjdGlvbnMoYXBwLCByZWNvcmRDbG9uZS5rZXkpO1xuICAgIGF3YWl0IGFwcC5wdWJsaXNoKGV2ZW50cy5yZWNvcmRBcGkuc2F2ZS5vblJlY29yZENyZWF0ZWQsIHtcbiAgICAgIHJlY29yZDogcmVjb3JkQ2xvbmUsXG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3Qgb2xkUmVjb3JkID0gYXdhaXQgX2xvYWQoYXBwLCByZWNvcmRDbG9uZS5rZXkpO1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXdhaXQgdHJhbnNhY3Rpb25Gb3JVcGRhdGVSZWNvcmQoXG4gICAgICBhcHAsIG9sZFJlY29yZCwgcmVjb3JkQ2xvbmUsXG4gICAgKTtcbiAgICByZWNvcmRDbG9uZS50cmFuc2FjdGlvbklkID0gdHJhbnNhY3Rpb24uaWQ7XG4gICAgYXdhaXQgYXBwLmRhdGFzdG9yZS51cGRhdGVKc29uKFxuICAgICAgZ2V0UmVjb3JkRmlsZU5hbWUocmVjb3JkQ2xvbmUua2V5KSxcbiAgICAgIHJlY29yZENsb25lLFxuICAgICk7XG5cbiAgICBhd2FpdCBhcHAucHVibGlzaChldmVudHMucmVjb3JkQXBpLnNhdmUub25SZWNvcmRVcGRhdGVkLCB7XG4gICAgICBvbGQ6IG9sZFJlY29yZCxcbiAgICAgIG5ldzogcmVjb3JkQ2xvbmUsXG4gICAgfSk7XG4gIH1cblxuICBhd2FpdCBhcHAuY2xlYW51cFRyYW5zYWN0aW9ucygpO1xuXG4gIGNvbnN0IHJldHVybmVkQ2xvbmUgPSBjbG9uZURlZXAocmVjb3JkQ2xvbmUpO1xuICByZXR1cm5lZENsb25lLmlzTmV3ID0gZmFsc2U7XG4gIHJldHVybiByZXR1cm5lZENsb25lO1xufTtcblxuY29uc3QgaW5pdGlhbGlzZUFuY2VzdG9ySW5kZXhlcyA9IGFzeW5jIChhcHAsIHJlY29yZCkgPT4ge1xuICBjb25zdCByZWNvcmROb2RlID0gZ2V0RXhhY3ROb2RlRm9yUGF0aChhcHAuaGllcmFyY2h5KShyZWNvcmQua2V5KTtcblxuICBmb3IgKGNvbnN0IGluZGV4IG9mIHJlY29yZE5vZGUuaW5kZXhlcykge1xuICAgIGNvbnN0IGluZGV4S2V5ID0gam9pbktleShyZWNvcmQua2V5LCBpbmRleC5uYW1lKTtcbiAgICBpZiAoIWF3YWl0IGFwcC5kYXRhc3RvcmUuZXhpc3RzKGluZGV4S2V5KSkgeyBhd2FpdCBpbml0aWFsaXNlSW5kZXgoYXBwLmRhdGFzdG9yZSwgcmVjb3JkLmtleSwgaW5kZXgpOyB9XG4gIH1cbn07XG5cbmNvbnN0IGluaXRpYWxpc2VSZXZlcnNlUmVmZXJlbmNlSW5kZXhlcyA9IGFzeW5jIChhcHAsIHJlY29yZCkgPT4ge1xuICBjb25zdCByZWNvcmROb2RlID0gZ2V0RXhhY3ROb2RlRm9yUGF0aChhcHAuaGllcmFyY2h5KShyZWNvcmQua2V5KTtcblxuICBjb25zdCBpbmRleE5vZGVzID0gJChmaWVsZHNUaGF0UmVmZXJlbmNlVGhpc1JlY29yZChhcHAsIHJlY29yZE5vZGUpLCBbXG4gICAgbWFwKGYgPT4gJChmLnR5cGVPcHRpb25zLnJldmVyc2VJbmRleE5vZGVLZXlzLCBbXG4gICAgICBtYXAobiA9PiBnZXROb2RlKFxuICAgICAgICBhcHAuaGllcmFyY2h5LFxuICAgICAgICBuLFxuICAgICAgKSksXG4gICAgXSkpLFxuICAgIGZsYXR0ZW4sXG4gIF0pO1xuXG4gIGZvciAoY29uc3QgaW5kZXhOb2RlIG9mIGluZGV4Tm9kZXMpIHtcbiAgICBhd2FpdCBpbml0aWFsaXNlSW5kZXgoXG4gICAgICBhcHAuZGF0YXN0b3JlLCByZWNvcmQua2V5LCBpbmRleE5vZGUsXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgbWFpbnRhaW5SZWZlcmVudGlhbEludGVncml0eSA9IGFzeW5jIChhcHAsIGluZGV4aW5nQXBpLCBvbGRSZWNvcmQsIG5ld1JlY29yZCkgPT4ge1xuICAvKlxuICAgICAgICBGT1JFQUNIIEZpZWxkIHRoYXQgcmVmZXJlbmNlIHRoaXMgb2JqZWN0XG4gICAgICAgIC0gb3B0aW9ucyBJbmRleCBub2RlIHRoYXQgZm9yIGZpZWxkXG4gICAgICAgIC0gaGFzIG9wdGlvbnMgaW5kZXggY2hhbmdlZCBmb3IgcmVmZXJlbmNlZCByZWNvcmQ/XG4gICAgICAgIC0gRk9SRUFDSCByZXZlcnNlIGluZGV4IG9mIGZpZWxkXG4gICAgICAgICAgLSBGT1JFQUNIIHJlZmVyZW5jaW5nUmVjb3JkIGluIHJldmVyc2UgaW5kZXhcbiAgICAgICAgICAgIC0gSXMgZmllbGQgdmFsdWUgc3RpbGwgcG9pbnRpbmcgdG8gcmVmZXJlbmNlZFJlY29yZFxuICAgICAgICAgICAgLSBVcGRhdGUgcmVmZXJlbmNpbmdSZWNvcmQuZmllbGROYW1lIHRvIG5ldyB2YWx1ZVxuICAgICAgICAgICAgLSBTYXZlXG4gICAgICAgICovXG4gIGNvbnN0IHJlY29yZE5vZGUgPSBnZXRFeGFjdE5vZGVGb3JQYXRoKGFwcC5oaWVyYXJjaHkpKG5ld1JlY29yZC5rZXkpO1xuICBjb25zdCByZWZlcmVuY2VGaWVsZHMgPSBmaWVsZHNUaGF0UmVmZXJlbmNlVGhpc1JlY29yZChcbiAgICBhcHAsIHJlY29yZE5vZGUsXG4gICk7XG5cbiAgY29uc3QgdXBkYXRlcyA9ICQocmVmZXJlbmNlRmllbGRzLCBbXG4gICAgbWFwKGYgPT4gKHtcbiAgICAgIG5vZGU6IGdldE5vZGUoXG4gICAgICAgIGFwcC5oaWVyYXJjaHksIGYudHlwZU9wdGlvbnMuaW5kZXhOb2RlS2V5LFxuICAgICAgKSxcbiAgICAgIGZpZWxkOiBmLFxuICAgIH0pKSxcbiAgICBtYXAobiA9PiAoe1xuICAgICAgb2xkOiBtYXBSZWNvcmQob2xkUmVjb3JkLCBuLm5vZGUpLFxuICAgICAgbmV3OiBtYXBSZWNvcmQobmV3UmVjb3JkLCBuLm5vZGUpLFxuICAgICAgaW5kZXhOb2RlOiBuLm5vZGUsXG4gICAgICBmaWVsZDogbi5maWVsZCxcbiAgICAgIHJldmVyc2VJbmRleEtleXM6ICQobi5maWVsZC50eXBlT3B0aW9ucy5yZXZlcnNlSW5kZXhOb2RlS2V5cywgW1xuICAgICAgICBtYXAoayA9PiBqb2luS2V5KFxuICAgICAgICAgIG5ld1JlY29yZC5rZXksXG4gICAgICAgICAgZ2V0TGFzdFBhcnRJbktleShrKSxcbiAgICAgICAgKSksXG4gICAgICBdKSxcbiAgICB9KSksXG4gICAgZmlsdGVyKGRpZmYgPT4gIWlzRXF1YWwoZGlmZi5vbGQpKGRpZmYubmV3KSksXG4gIF0pO1xuXG4gIGZvciAoY29uc3QgdXBkYXRlIG9mIHVwZGF0ZXMpIHtcbiAgICBmb3IgKGNvbnN0IHJldmVyc2VJbmRleEtleSBvZiB1cGRhdGUucmV2ZXJzZUluZGV4S2V5cykge1xuICAgICAgY29uc3Qgcm93cyA9IGF3YWl0IGxpc3RJdGVtcyhhcHApKHJldmVyc2VJbmRleEtleSk7XG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIG1hcChyID0+IHIua2V5KShyb3dzKSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBhd2FpdCBfbG9hZChhcHAsIGtleSk7XG4gICAgICAgIGlmIChyZWNvcmRbdXBkYXRlLmZpZWxkLm5hbWVdLmtleSA9PT0gbmV3UmVjb3JkLmtleSkge1xuICAgICAgICAgIHJlY29yZFt1cGRhdGUuZmllbGQubmFtZV0gPSB1cGRhdGUubmV3O1xuICAgICAgICAgIGF3YWl0IF9zYXZlKGFwcCwgaW5kZXhpbmdBcGksIHJlY29yZCwgdW5kZWZpbmVkLCB0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufTtcblxuY29uc3QgZmllbGRzVGhhdFJlZmVyZW5jZVRoaXNSZWNvcmQgPSAoYXBwLCByZWNvcmROb2RlKSA9PiAkKGFwcC5oaWVyYXJjaHksIFtcbiAgZ2V0RmxhdHRlbmVkSGllcmFyY2h5LFxuICBmaWx0ZXIoaXNSZWNvcmQpLFxuICBtYXAobiA9PiBuLmZpZWxkcyksXG4gIGZsYXR0ZW4sXG4gIGZpbHRlcihmaWVsZFJldmVyc2VzUmVmZXJlbmNlVG9Ob2RlKHJlY29yZE5vZGUpKSxcbl0pO1xuIiwiaW1wb3J0IHsgaW5jbHVkZXMgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgZ2V0Tm9kZUZvckNvbGxlY3Rpb25QYXRoIH0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7XG4gIHNhZmVLZXksIGFwaVdyYXBwZXIsXG4gIGV2ZW50cywgam9pbktleSxcbn0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IF9kZWxldGVSZWNvcmQgfSBmcm9tICcuLi9yZWNvcmRBcGkvZGVsZXRlJztcbmltcG9ydCB7IGdldEFsbElkc0l0ZXJhdG9yLCBnZXRBbGxJZHNTaGFyZEtleSB9IGZyb20gJy4uL2luZGV4aW5nL2FsbElkcyc7XG5pbXBvcnQgeyBwZXJtaXNzaW9uIH0gZnJvbSAnLi4vYXV0aEFwaS9wZXJtaXNzaW9ucyc7XG5cbmV4cG9ydCBjb25zdCBkZWxldGVDb2xsZWN0aW9uID0gKGFwcCwgZGlzYWJsZUNsZWFudXAgPSBmYWxzZSkgPT4gYXN5bmMga2V5ID0+IGFwaVdyYXBwZXIoXG4gIGFwcCxcbiAgZXZlbnRzLmNvbGxlY3Rpb25BcGkuZGVsZXRlLFxuICBwZXJtaXNzaW9uLm1hbmFnZUNvbGxlY3Rpb24uaXNBdXRob3JpemVkLFxuICB7IGtleSB9LFxuICBfZGVsZXRlQ29sbGVjdGlvbiwgYXBwLCBrZXksIGRpc2FibGVDbGVhbnVwLFxuKTtcblxuXG5leHBvcnQgY29uc3QgX2RlbGV0ZUNvbGxlY3Rpb24gPSBhc3luYyAoYXBwLCBrZXksIGRpc2FibGVDbGVhbnVwKSA9PiB7XG4gIGtleSA9IHNhZmVLZXkoa2V5KTtcbiAgY29uc3Qgbm9kZSA9IGdldE5vZGVGb3JDb2xsZWN0aW9uUGF0aChhcHAuaGllcmFyY2h5KShrZXkpO1xuXG4gIGF3YWl0IGRlbGV0ZVJlY29yZHMoYXBwLCBrZXkpO1xuICBhd2FpdCBkZWxldGVBbGxJZHNGb2xkZXJzKGFwcCwgbm9kZSwga2V5KTtcbiAgYXdhaXQgZGVsZXRlQ29sbGVjdGlvbkZvbGRlcihhcHAsIGtleSk7XG4gIGlmICghZGlzYWJsZUNsZWFudXApIHsgYXdhaXQgYXBwLmNsZWFudXBUcmFuc2FjdGlvbnMoKTsgfVxufTtcblxuY29uc3QgZGVsZXRlQ29sbGVjdGlvbkZvbGRlciA9IGFzeW5jIChhcHAsIGtleSkgPT4gYXdhaXQgYXBwLmRhdGFzdG9yZS5kZWxldGVGb2xkZXIoa2V5KTtcblxuXG5jb25zdCBkZWxldGVBbGxJZHNGb2xkZXJzID0gYXN5bmMgKGFwcCwgbm9kZSwga2V5KSA9PiB7XG4gIGF3YWl0IGFwcC5kYXRhc3RvcmUuZGVsZXRlRm9sZGVyKFxuICAgIGpvaW5LZXkoXG4gICAgICBrZXksICdhbGxpZHMnLFxuICAgICAgbm9kZS5ub2RlSWQsXG4gICAgKSxcbiAgKTtcblxuICBhd2FpdCBhcHAuZGF0YXN0b3JlLmRlbGV0ZUZvbGRlcihcbiAgICBqb2luS2V5KGtleSwgJ2FsbGlkcycpLFxuICApO1xufTtcblxuY29uc3QgZGVsZXRlUmVjb3JkcyA9IGFzeW5jIChhcHAsIGtleSkgPT4ge1xuICBjb25zdCBkZWxldGVkQWxsSWRzU2hhcmRzID0gW107XG4gIGNvbnN0IGRlbGV0ZUFsbElkc1NoYXJkID0gYXN5bmMgKHJlY29yZElkKSA9PiB7XG4gICAgY29uc3Qgc2hhcmRLZXkgPSBnZXRBbGxJZHNTaGFyZEtleShcbiAgICAgIGFwcC5oaWVyYXJjaHksIGtleSwgcmVjb3JkSWQsXG4gICAgKTtcblxuICAgIGlmIChpbmNsdWRlcyhzaGFyZEtleSkoZGVsZXRlZEFsbElkc1NoYXJkcykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBkZWxldGVkQWxsSWRzU2hhcmRzLnB1c2goc2hhcmRLZXkpO1xuXG4gICAgYXdhaXQgYXBwLmRhdGFzdG9yZS5kZWxldGVGaWxlKHNoYXJkS2V5KTtcbiAgfTtcblxuICBjb25zdCBpdGVyYXRlID0gYXdhaXQgZ2V0QWxsSWRzSXRlcmF0b3IoYXBwKShrZXkpO1xuXG4gIGxldCBpZHMgPSBhd2FpdCBpdGVyYXRlKCk7XG4gIHdoaWxlICghaWRzLmRvbmUpIHtcbiAgICBpZiAoaWRzLnJlc3VsdC5jb2xsZWN0aW9uS2V5ID09PSBrZXkpIHtcbiAgICAgIGZvciAoY29uc3QgaWQgb2YgaWRzLnJlc3VsdC5pZHMpIHtcbiAgICAgICAgYXdhaXQgX2RlbGV0ZVJlY29yZChcbiAgICAgICAgICBhcHAsXG4gICAgICAgICAgam9pbktleShrZXksIGlkKSxcbiAgICAgICAgICB0cnVlLFxuICAgICAgICApO1xuICAgICAgICBhd2FpdCBkZWxldGVBbGxJZHNTaGFyZChpZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWRzID0gYXdhaXQgaXRlcmF0ZSgpO1xuICB9XG59O1xuIiwiaW1wb3J0IHtcbiAgdHJ5QXdhaXRPcklnbm9yZSxcbn0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7XG4gIGlzSW5kZXgsIGlzU2hhcmRlZEluZGV4LFxuICBnZXRFeGFjdE5vZGVGb3JQYXRoLFxufSBmcm9tICcuLi90ZW1wbGF0ZUFwaS9oaWVyYXJjaHknO1xuaW1wb3J0IHtcbiAgZ2V0QWxsU2hhcmRLZXlzLCBnZXRTaGFyZE1hcEtleSxcbiAgZ2V0VW5zaGFyZGVkSW5kZXhEYXRhS2V5LFxufSBmcm9tICcuLi9pbmRleGluZy9zaGFyZGluZyc7XG5cbmV4cG9ydCBjb25zdCBfZGVsZXRlSW5kZXggPSBhc3luYyAoYXBwLCBpbmRleEtleSwgaW5jbHVkZUZvbGRlcikgPT4ge1xuICBjb25zdCBpbmRleE5vZGUgPSBnZXRFeGFjdE5vZGVGb3JQYXRoKGFwcC5oaWVyYXJjaHkpKGluZGV4S2V5KTtcblxuICBpZiAoIWlzSW5kZXgoaW5kZXhOb2RlKSkgeyB0aHJvdyBuZXcgRXJyb3IoJ1N1cHBsaWVkIGtleSBpcyBub3QgYW4gaW5kZXgnKTsgfVxuXG4gIGlmIChpc1NoYXJkZWRJbmRleChpbmRleE5vZGUpKSB7XG4gICAgY29uc3Qgc2hhcmRLZXlzID0gYXdhaXQgZ2V0QWxsU2hhcmRLZXlzKGFwcCwgaW5kZXhLZXkpO1xuICAgIGZvciAoY29uc3QgayBvZiBzaGFyZEtleXMpIHtcbiAgICAgIGF3YWl0IHRyeUF3YWl0T3JJZ25vcmUoXG4gICAgICAgIGFwcC5kYXRhc3RvcmUuZGVsZXRlRmlsZShrKSxcbiAgICAgICk7XG4gICAgfVxuICAgIHRyeUF3YWl0T3JJZ25vcmUoXG4gICAgICBhd2FpdCBhcHAuZGF0YXN0b3JlLmRlbGV0ZUZpbGUoXG4gICAgICAgIGdldFNoYXJkTWFwS2V5KGluZGV4S2V5KSxcbiAgICAgICksXG4gICAgKTtcbiAgfSBlbHNlIHtcbiAgICBhd2FpdCB0cnlBd2FpdE9ySWdub3JlKFxuICAgICAgYXBwLmRhdGFzdG9yZS5kZWxldGVGaWxlKFxuICAgICAgICBnZXRVbnNoYXJkZWRJbmRleERhdGFLZXkoaW5kZXhLZXkpLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKGluY2x1ZGVGb2xkZXIpIHtcbiAgICB0cnlBd2FpdE9ySWdub3JlKFxuICAgICAgYXdhaXQgYXBwLmRhdGFzdG9yZS5kZWxldGVGb2xkZXIoaW5kZXhLZXkpLFxuICAgICk7XG4gIH1cbn07XG4iLCJpbXBvcnQge1xuICBzYWZlS2V5LCBhcGlXcmFwcGVyLFxuICBldmVudHMsIGpvaW5LZXksXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBfbG9hZCwgZ2V0UmVjb3JkRmlsZU5hbWUgfSBmcm9tICcuL2xvYWQnO1xuaW1wb3J0IHsgX2RlbGV0ZUNvbGxlY3Rpb24gfSBmcm9tICcuLi9jb2xsZWN0aW9uQXBpL2RlbGV0ZSc7XG5pbXBvcnQge1xuICBnZXRFeGFjdE5vZGVGb3JQYXRoLFxuICBnZXRGbGF0dGVuZWRIaWVyYXJjaHksIGdldE5vZGUsXG4gIGZpZWxkUmV2ZXJzZXNSZWZlcmVuY2VUb05vZGUsXG59IGZyb20gJy4uL3RlbXBsYXRlQXBpL2hpZXJhcmNoeSc7XG5pbXBvcnQgeyBfZGVsZXRlSW5kZXggfSBmcm9tICcuLi9pbmRleEFwaS9kZWxldGUnO1xuaW1wb3J0IHsgdHJhbnNhY3Rpb25Gb3JEZWxldGVSZWNvcmQgfSBmcm9tICcuLi90cmFuc2FjdGlvbnMvY3JlYXRlJztcbmltcG9ydCB7IHJlbW92ZUZyb21BbGxJZHMgfSBmcm9tICcuLi9pbmRleGluZy9hbGxJZHMnO1xuaW1wb3J0IHsgcGVybWlzc2lvbiB9IGZyb20gJy4uL2F1dGhBcGkvcGVybWlzc2lvbnMnO1xuXG5leHBvcnQgY29uc3QgZGVsZXRlUmVjb3JkID0gKGFwcCwgZGlzYWJsZUNsZWFudXAgPSBmYWxzZSkgPT4gYXN5bmMga2V5ID0+IGFwaVdyYXBwZXIoXG4gIGFwcCxcbiAgZXZlbnRzLnJlY29yZEFwaS5kZWxldGUsXG4gIHBlcm1pc3Npb24uZGVsZXRlUmVjb3JkLmlzQXV0aG9yaXplZChrZXkpLFxuICB7IGtleSB9LFxuICBfZGVsZXRlUmVjb3JkLCBhcHAsIGtleSwgZGlzYWJsZUNsZWFudXAsXG4pO1xuXG4vLyBjYWxsZWQgZGVsZXRlUmVjb3JkIGJlY2F1c2UgZGVsZXRlIGlzIGEga2V5d29yZFxuZXhwb3J0IGNvbnN0IF9kZWxldGVSZWNvcmQgPSBhc3luYyAoYXBwLCBrZXksIGRpc2FibGVDbGVhbnVwKSA9PiB7XG4gIGtleSA9IHNhZmVLZXkoa2V5KTtcbiAgY29uc3Qgbm9kZSA9IGdldEV4YWN0Tm9kZUZvclBhdGgoYXBwLmhpZXJhcmNoeSkoa2V5KTtcblxuICBjb25zdCByZWNvcmQgPSBhd2FpdCBfbG9hZChhcHAsIGtleSk7XG4gIGF3YWl0IHRyYW5zYWN0aW9uRm9yRGVsZXRlUmVjb3JkKGFwcCwgcmVjb3JkKTtcblxuICBmb3IgKGNvbnN0IGNvbGxlY3Rpb25SZWNvcmQgb2Ygbm9kZS5jaGlsZHJlbikge1xuICAgIGNvbnN0IGNvbGxlY3Rpb25LZXkgPSBqb2luS2V5KFxuICAgICAga2V5LCBjb2xsZWN0aW9uUmVjb3JkLmNvbGxlY3Rpb25OYW1lLFxuICAgICk7XG4gICAgYXdhaXQgX2RlbGV0ZUNvbGxlY3Rpb24oYXBwLCBjb2xsZWN0aW9uS2V5LCB0cnVlKTtcbiAgfVxuXG4gIGF3YWl0IGFwcC5kYXRhc3RvcmUuZGVsZXRlRmlsZShcbiAgICBnZXRSZWNvcmRGaWxlTmFtZShrZXkpLFxuICApO1xuXG4gIGF3YWl0IGRlbGV0ZUZpbGVzKGFwcCwga2V5KTtcblxuICBhd2FpdCByZW1vdmVGcm9tQWxsSWRzKGFwcC5oaWVyYXJjaHksIGFwcC5kYXRhc3RvcmUpKHJlY29yZCk7XG5cbiAgaWYgKCFkaXNhYmxlQ2xlYW51cCkgeyBhd2FpdCBhcHAuY2xlYW51cFRyYW5zYWN0aW9ucygpOyB9XG5cbiAgYXdhaXQgYXBwLmRhdGFzdG9yZS5kZWxldGVGb2xkZXIoa2V5KTtcbiAgYXdhaXQgZGVsZXRlSW5kZXhlcyhhcHAsIGtleSk7XG59O1xuXG5jb25zdCBkZWxldGVJbmRleGVzID0gYXN5bmMgKGFwcCwga2V5KSA9PiB7XG4gIGNvbnN0IG5vZGUgPSBnZXRFeGFjdE5vZGVGb3JQYXRoKGFwcC5oaWVyYXJjaHkpKGtleSk7XG4gIC8qIGNvbnN0IHJldmVyc2VJbmRleEtleXMgPSAkKGFwcC5oaWVyYXJjaHksIFtcbiAgICAgICAgZ2V0RmxhdHRlbmVkSGllcmFyY2h5LFxuICAgICAgICBtYXAobiA9PiBuLmZpZWxkcyksXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIGZpbHRlcihpc1NvbWV0aGluZyksXG4gICAgICAgIGZpbHRlcihmaWVsZFJldmVyc2VzUmVmZXJlbmNlVG9Ob2RlKG5vZGUpKSxcbiAgICAgICAgbWFwKGYgPT4gJChmLnR5cGVPcHRpb25zLnJldmVyc2VJbmRleE5vZGVLZXlzLCBbXG4gICAgICAgICAgICAgICAgICAgIG1hcChuID0+IGdldE5vZGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFwcC5oaWVyYXJjaHksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4pKVxuICAgICAgICAgICAgICAgIF0pXG4gICAgICAgICksXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIG1hcChuID0+IGpvaW5LZXkoa2V5LCBuLm5hbWUpKVxuICAgIF0pO1xuXG4gICAgZm9yKGxldCBpIG9mIHJldmVyc2VJbmRleEtleXMpIHtcbiAgICAgICAgYXdhaXQgX2RlbGV0ZUluZGV4KGFwcCwgaSwgdHJ1ZSk7XG4gICAgfSAqL1xuXG5cbiAgZm9yIChjb25zdCBpbmRleCBvZiBub2RlLmluZGV4ZXMpIHtcbiAgICBjb25zdCBpbmRleEtleSA9IGpvaW5LZXkoa2V5LCBpbmRleC5uYW1lKTtcbiAgICBhd2FpdCBfZGVsZXRlSW5kZXgoYXBwLCBpbmRleEtleSwgdHJ1ZSk7XG4gIH1cbn07XG5cbmNvbnN0IGRlbGV0ZUZpbGVzID0gYXN5bmMgKGFwcCwga2V5KSA9PiB7XG4gIGNvbnN0IGZpbGVzRm9sZGVyID0gam9pbktleShrZXksICdmaWxlcycpO1xuICBjb25zdCBhbGxGaWxlcyA9IGF3YWl0IGFwcC5kYXRhc3RvcmUuZ2V0Rm9sZGVyQ29udGVudHMoXG4gICAgZmlsZXNGb2xkZXIsXG4gICk7XG5cbiAgZm9yIChjb25zdCBmaWxlIG9mIGFsbEZpbGVzKSB7XG4gICAgYXdhaXQgYXBwLmRhdGFzdG9yZS5kZWxldGVGaWxlKGZpbGUpO1xuICB9XG5cbiAgYXdhaXQgYXBwLmRhdGFzdG9yZS5kZWxldGVGb2xkZXIoXG4gICAgam9pbktleShrZXksICdmaWxlcycpLFxuICApO1xufTtcbiIsImltcG9ydCB7XG4gIGluY2x1ZGVzLCBmaWx0ZXIsXG4gIG1hcCwgc29tZSxcbn0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSAnc2hvcnRpZCc7XG5pbXBvcnQgeyBfbG9hZCB9IGZyb20gJy4vbG9hZCc7XG5pbXBvcnQge1xuICBhcGlXcmFwcGVyLCBldmVudHMsIHNwbGl0S2V5LFxuICAkLCBqb2luS2V5LCBpc05vdGhpbmcsIHRyeUF3YWl0T3JJZ25vcmUsXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRFeGFjdE5vZGVGb3JQYXRoIH0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7IHBlcm1pc3Npb24gfSBmcm9tICcuLi9hdXRoQXBpL3Blcm1pc3Npb25zJztcbmltcG9ydCB7IGlzTGVnYWxGaWxlbmFtZSB9IGZyb20gJy4uL3R5cGVzL2ZpbGUnO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEVycm9yLCBGb3JiaWRkZW5FcnJvciB9IGZyb20gJy4uL2NvbW1vbi9lcnJvcnMnO1xuXG5leHBvcnQgY29uc3QgdXBsb2FkRmlsZSA9IGFwcCA9PiBhc3luYyAocmVjb3JkS2V5LCByZWFkYWJsZVN0cmVhbSwgcmVsYXRpdmVGaWxlUGF0aCkgPT4gYXBpV3JhcHBlcihcbiAgYXBwLFxuICBldmVudHMucmVjb3JkQXBpLnVwbG9hZEZpbGUsXG4gIHBlcm1pc3Npb24udXBkYXRlUmVjb3JkLmlzQXV0aG9yaXplZChyZWNvcmRLZXkpLFxuICB7IHJlY29yZEtleSwgcmVhZGFibGVTdHJlYW0sIHJlbGF0aXZlRmlsZVBhdGggfSxcbiAgX3VwbG9hZEZpbGUsIGFwcCwgcmVjb3JkS2V5LCByZWFkYWJsZVN0cmVhbSwgcmVsYXRpdmVGaWxlUGF0aCxcbik7XG5cbmNvbnN0IF91cGxvYWRGaWxlID0gYXN5bmMgKGFwcCwgcmVjb3JkS2V5LCByZWFkYWJsZVN0cmVhbSwgcmVsYXRpdmVGaWxlUGF0aCkgPT4ge1xuICBpZiAoaXNOb3RoaW5nKHJlY29yZEtleSkpIHsgdGhyb3cgbmV3IEJhZFJlcXVlc3RFcnJvcignUmVjb3JkIEtleSBub3Qgc3VwcGxpZWQnKTsgfVxuICBpZiAoaXNOb3RoaW5nKHJlbGF0aXZlRmlsZVBhdGgpKSB7IHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoJ2ZpbGUgcGF0aCBub3Qgc3VwcGxpZWQnKTsgfVxuICBpZiAoIWlzTGVnYWxGaWxlbmFtZShyZWxhdGl2ZUZpbGVQYXRoKSkgeyB0aHJvdyBuZXcgQmFkUmVxdWVzdEVycm9yKCdJbGxlZ2FsIGZpbGVuYW1lJyk7IH1cblxuICBjb25zdCByZWNvcmQgPSBhd2FpdCBfbG9hZChhcHAsIHJlY29yZEtleSk7XG5cbiAgY29uc3QgZnVsbEZpbGVQYXRoID0gc2FmZUdldEZ1bGxGaWxlUGF0aChcbiAgICByZWNvcmRLZXksIHJlbGF0aXZlRmlsZVBhdGgsXG4gICk7XG5cbiAgY29uc3QgdGVtcEZpbGVQYXRoID0gYCR7ZnVsbEZpbGVQYXRofV8ke2dlbmVyYXRlKCl9LnRlbXBgO1xuXG4gIGNvbnN0IG91dHB1dFN0cmVhbSA9IGF3YWl0IGFwcC5kYXRhc3RvcmUud3JpdGFibGVGaWxlU3RyZWFtKFxuICAgIHRlbXBGaWxlUGF0aCxcbiAgKTtcblxuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUscmVqZWN0KSA9PiB7XG4gICAgcmVhZGFibGVTdHJlYW0ucGlwZShvdXRwdXRTdHJlYW0pO1xuICAgIG91dHB1dFN0cmVhbS5vbignZXJyb3InLCByZWplY3QpO1xuICAgIG91dHB1dFN0cmVhbS5vbignZmluaXNoJywgcmVzb2x2ZSk7XG4gIH0pXG4gIC50aGVuKCgpID0+IGFwcC5kYXRhc3RvcmUuZ2V0RmlsZVNpemUodGVtcEZpbGVQYXRoKSlcbiAgLnRoZW4oc2l6ZSA9PiB7XG4gICAgY29uc3QgaXNFeHBlY3RlZEZpbGVTaXplID0gY2hlY2tGaWxlU2l6ZUFnYWluc3RGaWVsZHMoXG4gICAgICBhcHAsIHJlY29yZCwgcmVsYXRpdmVGaWxlUGF0aCwgc2l6ZVxuICAgICk7ICBcbiAgICBpZiAoIWlzRXhwZWN0ZWRGaWxlU2l6ZSkgeyB0aHJvdyBuZXcgQmFkUmVxdWVzdEVycm9yKGBGaWVsZHMgZm9yICR7cmVsYXRpdmVGaWxlUGF0aH0gZG8gbm90IGhhdmUgZXhwZWN0ZWQgc2l6ZTogJHtqb2luKCcsJykoaW5jb3JyZWN0RmllbGRzKX1gKTsgfSAgXG5cbiAgfSlcbiAgLnRoZW4oKCkgPT4gdHJ5QXdhaXRPcklnbm9yZShhcHAuZGF0YXN0b3JlLmRlbGV0ZUZpbGUsIGZ1bGxGaWxlUGF0aCkpXG4gIC50aGVuKCgpID0+IGFwcC5kYXRhc3RvcmUucmVuYW1lRmlsZSh0ZW1wRmlsZVBhdGgsIGZ1bGxGaWxlUGF0aCkpO1xuXG4gIC8qXG4gIHJlYWRhYmxlU3RyZWFtLnBpcGUob3V0cHV0U3RyZWFtKTtcblxuICBhd2FpdCBuZXcgUHJvbWlzZShmdWxmaWxsID0+IG91dHB1dFN0cmVhbS5vbignZmluaXNoJywgZnVsZmlsbCkpO1xuXG4gIGNvbnN0IGlzRXhwZWN0ZWRGaWxlU2l6ZSA9IGNoZWNrRmlsZVNpemVBZ2FpbnN0RmllbGRzKFxuICAgIGFwcCxcbiAgICByZWNvcmQsIHJlbGF0aXZlRmlsZVBhdGgsXG4gICAgYXdhaXQgYXBwLmRhdGFzdG9yZS5nZXRGaWxlU2l6ZSh0ZW1wRmlsZVBhdGgpLFxuICApO1xuXG4gIGlmICghaXNFeHBlY3RlZEZpbGVTaXplKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYEZpZWxkcyBmb3IgJHtyZWxhdGl2ZUZpbGVQYXRofSBkbyBub3QgaGF2ZSBleHBlY3RlZCBzaXplYCk7XG4gIH1cblxuICBhd2FpdCB0cnlBd2FpdE9ySWdub3JlKGFwcC5kYXRhc3RvcmUuZGVsZXRlRmlsZSwgZnVsbEZpbGVQYXRoKTtcblxuICBhd2FpdCBhcHAuZGF0YXN0b3JlLnJlbmFtZUZpbGUodGVtcEZpbGVQYXRoLCBmdWxsRmlsZVBhdGgpO1xuICAqL1xufTtcblxuY29uc3QgY2hlY2tGaWxlU2l6ZUFnYWluc3RGaWVsZHMgPSAoYXBwLCByZWNvcmQsIHJlbGF0aXZlRmlsZVBhdGgsIGV4cGVjdGVkU2l6ZSkgPT4ge1xuICBjb25zdCByZWNvcmROb2RlID0gZ2V0RXhhY3ROb2RlRm9yUGF0aChhcHAuaGllcmFyY2h5KShyZWNvcmQua2V5KTtcblxuICBjb25zdCBpbmNvcnJlY3RGaWxlRmllbGRzID0gJChyZWNvcmROb2RlLmZpZWxkcywgW1xuICAgIGZpbHRlcihmID0+IGYudHlwZSA9PT0gJ2ZpbGUnXG4gICAgICAmJiByZWNvcmRbZi5uYW1lXS5yZWxhdGl2ZVBhdGggPT09IHJlbGF0aXZlRmlsZVBhdGhcbiAgICAgICYmIHJlY29yZFtmLm5hbWVdLnNpemUgIT09IGV4cGVjdGVkU2l6ZSksXG4gICAgbWFwKGYgPT4gZi5uYW1lKSxcbiAgXSk7XG5cbiAgY29uc3QgaW5jb3JyZWN0RmlsZUFycmF5RmllbGRzID0gJChyZWNvcmROb2RlLmZpZWxkcywgW1xuICAgIGZpbHRlcihhID0+IGEudHlwZSA9PT0gJ2FycmF5PGZpbGU+J1xuICAgICAgJiYgJChyZWNvcmRbYS5uYW1lXSwgW1xuICAgICAgICBzb21lKGYgPT4gcmVjb3JkW2YubmFtZV0ucmVsYXRpdmVQYXRoID09PSByZWxhdGl2ZUZpbGVQYXRoXG4gICAgICAgICAgJiYgcmVjb3JkW2YubmFtZV0uc2l6ZSAhPT0gZXhwZWN0ZWRTaXplKSxcbiAgICAgIF0pKSxcbiAgICBtYXAoZiA9PiBmLm5hbWUpLFxuICBdKTtcblxuICBjb25zdCBpbmNvcnJlY3RGaWVsZHMgPSBbXG4gICAgLi4uaW5jb3JyZWN0RmlsZUZpZWxkcyxcbiAgICAuLi5pbmNvcnJlY3RGaWxlQXJyYXlGaWVsZHMsXG4gIF07XG5cbiAgaWYgKGluY29ycmVjdEZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59O1xuXG5leHBvcnQgY29uc3Qgc2FmZUdldEZ1bGxGaWxlUGF0aCA9IChyZWNvcmRLZXksIHJlbGF0aXZlRmlsZVBhdGgpID0+IHtcbiAgY29uc3QgbmF1Z2h0eVVzZXIgPSAoKSA9PiB7IHRocm93IG5ldyBGb3JiaWRkZW5FcnJvcignbmF1Z2h0eSBuYXVnaHR5Jyk7IH07XG5cbiAgaWYgKHJlbGF0aXZlRmlsZVBhdGguc3RhcnRzV2l0aCgnLi4nKSkgbmF1Z2h0eVVzZXIoKTtcblxuICBjb25zdCBwYXRoUGFydHMgPSBzcGxpdEtleShyZWxhdGl2ZUZpbGVQYXRoKTtcblxuICBpZiAoaW5jbHVkZXMoJy4uJykocGF0aFBhcnRzKSkgbmF1Z2h0eVVzZXIoKTtcblxuICBjb25zdCByZWNvcmRLZXlQYXJ0cyA9IHNwbGl0S2V5KHJlY29yZEtleSk7XG5cbiAgY29uc3QgZnVsbFBhdGhQYXJ0cyA9IFtcbiAgICAuLi5yZWNvcmRLZXlQYXJ0cyxcbiAgICAnZmlsZXMnLFxuICAgIC4uLmZpbHRlcihwID0+IHAgIT09ICcuJykocGF0aFBhcnRzKSxcbiAgXTtcblxuICByZXR1cm4gam9pbktleShmdWxsUGF0aFBhcnRzKTtcbn07XG4iLCJpbXBvcnQgeyBhcGlXcmFwcGVyLCBldmVudHMsIGlzTm90aGluZyB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBwZXJtaXNzaW9uIH0gZnJvbSAnLi4vYXV0aEFwaS9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBzYWZlR2V0RnVsbEZpbGVQYXRoIH0gZnJvbSAnLi91cGxvYWRGaWxlJztcbmltcG9ydCB7IEJhZFJlcXVlc3RFcnJvciB9IGZyb20gJy4uL2NvbW1vbi9lcnJvcnMnO1xuXG5leHBvcnQgY29uc3QgZG93bmxvYWRGaWxlID0gYXBwID0+IGFzeW5jIChyZWNvcmRLZXksIHJlbGF0aXZlUGF0aCkgPT4gYXBpV3JhcHBlcihcbiAgYXBwLFxuICBldmVudHMucmVjb3JkQXBpLnVwbG9hZEZpbGUsXG4gIHBlcm1pc3Npb24ucmVhZFJlY29yZC5pc0F1dGhvcml6ZWQocmVjb3JkS2V5KSxcbiAgeyByZWNvcmRLZXksIHJlbGF0aXZlUGF0aCB9LC8vcmVtb3ZlIGR1cGUga2V5ICdyZWNvcmRLZXknIGZyb20gb2JqZWN0XG4gIF9kb3dubG9hZEZpbGUsIGFwcCwgcmVjb3JkS2V5LCByZWxhdGl2ZVBhdGgsXG4pOyBcblxuXG5jb25zdCBfZG93bmxvYWRGaWxlID0gYXN5bmMgKGFwcCwgcmVjb3JkS2V5LCByZWxhdGl2ZVBhdGgpID0+IHtcbiAgaWYgKGlzTm90aGluZyhyZWNvcmRLZXkpKSB7IHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoJ1JlY29yZCBLZXkgbm90IHN1cHBsaWVkJyk7IH1cbiAgaWYgKGlzTm90aGluZyhyZWxhdGl2ZVBhdGgpKSB7IHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoJ2ZpbGUgcGF0aCBub3Qgc3VwcGxpZWQnKTsgfVxuXG4gIHJldHVybiBhd2FpdCBhcHAuZGF0YXN0b3JlLnJlYWRhYmxlRmlsZVN0cmVhbShcbiAgICBzYWZlR2V0RnVsbEZpbGVQYXRoKFxuICAgICAgcmVjb3JkS2V5LCByZWxhdGl2ZVBhdGgsXG4gICAgKSxcbiAgKTtcbn07XG4iLCJpbXBvcnQgeyBmaW5kLCB0YWtlLCB1bmlvbiB9IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyBnZXRGbGF0dGVuZWRIaWVyYXJjaHkgfSBmcm9tICcuLi90ZW1wbGF0ZUFwaS9oaWVyYXJjaHknO1xuaW1wb3J0IHsgJCwgc3BsaXRLZXksIGpvaW5LZXkgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgTm90Rm91bmRFcnJvciB9IGZyb20gJy4uL2NvbW1vbi9lcnJvcnMnO1xuXG5leHBvcnQgY29uc3QgY3VzdG9tSWQgPSBhcHAgPT4gKG5vZGVOYW1lLCBpZCkgPT4ge1xuICBjb25zdCBub2RlID0gJChhcHAuaGllcmFyY2h5LCBbXG4gICAgZ2V0RmxhdHRlbmVkSGllcmFyY2h5LFxuICAgIGZpbmQobiA9PiBuLm5hbWUgPT09IG5vZGVOYW1lKSxcbiAgXSk7XG5cbiAgaWYgKCFub2RlKSB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihgQ2Fubm90IGZpbmQgbm9kZSAke25vZGVOYW1lfWApO1xuXG4gIHJldHVybiBgJHtub2RlLm5vZGVJZH0tJHtpZH1gO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldEN1c3RvbUlkID0gYXBwID0+IChyZWNvcmQsIGlkKSA9PiB7XG4gIHJlY29yZC5pZCA9IGN1c3RvbUlkKGFwcCkocmVjb3JkLnR5cGUsIGlkKTtcblxuICBjb25zdCBrZXlQYXJ0cyA9IHNwbGl0S2V5KHJlY29yZC5rZXkpO1xuXG4gIHJlY29yZC5rZXkgPSAkKGtleVBhcnRzLCBbXG4gICAgdGFrZShrZXlQYXJ0cy5sZW5ndGggLSAxKSxcbiAgICB1bmlvbihbcmVjb3JkLmlkXSksXG4gICAgam9pbktleSxcbiAgXSk7XG5cbiAgcmV0dXJuIHJlY29yZDtcbn07XG4iLCJpbXBvcnQgeyBnZXROZXcsIGdldE5ld0NoaWxkIH0gZnJvbSAnLi9nZXROZXcnO1xuaW1wb3J0IHsgbG9hZCB9IGZyb20gJy4vbG9hZCc7XG5pbXBvcnQgeyB2YWxpZGF0ZSB9IGZyb20gJy4vdmFsaWRhdGUnO1xuaW1wb3J0IHsgZ2V0Q29udGV4dCB9IGZyb20gJy4vZ2V0Q29udGV4dCc7XG5pbXBvcnQgeyBzYXZlIH0gZnJvbSAnLi9zYXZlJztcbmltcG9ydCB7IGRlbGV0ZVJlY29yZCB9IGZyb20gJy4vZGVsZXRlJztcbmltcG9ydCB7IHVwbG9hZEZpbGUgfSBmcm9tICcuL3VwbG9hZEZpbGUnO1xuaW1wb3J0IHsgZG93bmxvYWRGaWxlIH0gZnJvbSAnLi9kb3dubG9hZEZpbGUnO1xuaW1wb3J0IHsgY3VzdG9tSWQsIHNldEN1c3RvbUlkIH0gZnJvbSAnLi9jdXN0b21JZCc7XG5cbmNvbnN0IGFwaSA9IGFwcCA9PiAoe1xuICBnZXROZXc6IGdldE5ldyhhcHApLFxuICBnZXROZXdDaGlsZDogZ2V0TmV3Q2hpbGQoYXBwKSxcbiAgc2F2ZTogc2F2ZShhcHApLFxuICBsb2FkOiBsb2FkKGFwcCksXG4gIGRlbGV0ZTogZGVsZXRlUmVjb3JkKGFwcCwgZmFsc2UpLFxuICB2YWxpZGF0ZTogdmFsaWRhdGUoYXBwKSxcbiAgZ2V0Q29udGV4dDogZ2V0Q29udGV4dChhcHApLFxuICB1cGxvYWRGaWxlOiB1cGxvYWRGaWxlKGFwcCksXG4gIGRvd25sb2FkRmlsZTogZG93bmxvYWRGaWxlKGFwcCksXG4gIGN1c3RvbUlkOiBjdXN0b21JZChhcHApLFxuICBzZXRDdXN0b21JZDogc2V0Q3VzdG9tSWQoYXBwKSxcbn0pO1xuXG5cbmV4cG9ydCBjb25zdCBnZXRSZWNvcmRBcGkgPSBhcHAgPT4gYXBpKGFwcCk7XG5cbmV4cG9ydCBkZWZhdWx0IGdldFJlY29yZEFwaTtcbiIsImltcG9ydCB7IGdldE5vZGVGb3JDb2xsZWN0aW9uUGF0aCB9IGZyb20gJy4uL3RlbXBsYXRlQXBpL2hpZXJhcmNoeSc7XG5pbXBvcnQge1xuICBpc05vdGhpbmcsIHNhZmVLZXksIGFwaVdyYXBwZXJTeW5jLCBldmVudHMsXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBhbHdheXNBdXRob3JpemVkIH0gZnJvbSAnLi4vYXV0aEFwaS9wZXJtaXNzaW9ucyc7XG5cbmV4cG9ydCBjb25zdCBnZXRBbGxvd2VkUmVjb3JkVHlwZXMgPSBhcHAgPT4ga2V5ID0+IGFwaVdyYXBwZXJTeW5jKFxuICBhcHAsXG4gIGV2ZW50cy5jb2xsZWN0aW9uQXBpLmdldEFsbG93ZWRSZWNvcmRUeXBlcyxcbiAgYWx3YXlzQXV0aG9yaXplZCxcbiAgeyBrZXkgfSxcbiAgX2dldEFsbG93ZWRSZWNvcmRUeXBlcywgYXBwLCBrZXksXG4pO1xuXG5jb25zdCBfZ2V0QWxsb3dlZFJlY29yZFR5cGVzID0gKGFwcCwga2V5KSA9PiB7XG4gIGtleSA9IHNhZmVLZXkoa2V5KTtcbiAgY29uc3Qgbm9kZSA9IGdldE5vZGVGb3JDb2xsZWN0aW9uUGF0aChhcHAuaGllcmFyY2h5KShrZXkpO1xuICByZXR1cm4gaXNOb3RoaW5nKG5vZGUpID8gW10gOiBbbm9kZS5uYW1lXTtcbn07XG4iLCJpbXBvcnQgeyBnZXRBbGxJZHNJdGVyYXRvciB9IGZyb20gJy4uL2luZGV4aW5nL2FsbElkcyc7XG5pbXBvcnQgeyBnZXRBbGxvd2VkUmVjb3JkVHlwZXMgfSBmcm9tICcuL2dldEFsbG93ZWRSZWNvcmRUeXBlcyc7XG5pbXBvcnQgeyBkZWxldGVDb2xsZWN0aW9uIH0gZnJvbSAnLi9kZWxldGUnO1xuXG5leHBvcnQgY29uc3QgZ2V0Q29sbGVjdGlvbkFwaSA9IGFwcCA9PiAoe1xuICBnZXRBbGxvd2VkUmVjb3JkVHlwZXM6IGdldEFsbG93ZWRSZWNvcmRUeXBlcyhhcHApLFxuICBnZXRBbGxJZHNJdGVyYXRvcjogZ2V0QWxsSWRzSXRlcmF0b3IoYXBwKSxcbiAgZGVsZXRlOiBkZWxldGVDb2xsZWN0aW9uKGFwcCksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0Q29sbGVjdGlvbkFwaTtcbiIsImltcG9ydCB7XG4gIGZpbmQsIGZpbHRlciwgXG4gIGluY2x1ZGVzLCBzb21lLFxufSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgZ2V0QWxsSWRzSXRlcmF0b3IgfSBmcm9tICcuLi9pbmRleGluZy9hbGxJZHMnO1xuaW1wb3J0IHtcbiAgZ2V0RmxhdHRlbmVkSGllcmFyY2h5LCBnZXRSZWNvcmROb2RlQnlJZCxcbiAgZ2V0Q29sbGVjdGlvbk5vZGVCeUtleU9yTm9kZUtleSwgZ2V0Tm9kZSwgaXNJbmRleCxcbiAgaXNSZWNvcmQsIGlzRGVjZW5kYW50LCBnZXRBbGxvd2VkUmVjb3JkTm9kZXNGb3JJbmRleCxcbiAgZmllbGRSZXZlcnNlc1JlZmVyZW5jZVRvSW5kZXgsXG59IGZyb20gJy4uL3RlbXBsYXRlQXBpL2hpZXJhcmNoeSc7XG5pbXBvcnQge1xuICBqb2luS2V5LCBhcGlXcmFwcGVyLCBldmVudHMsICQsIGFsbFRydWUsXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQge1xuICBjcmVhdGVCdWlsZEluZGV4Rm9sZGVyLFxuICB0cmFuc2FjdGlvbkZvckJ1aWxkSW5kZXgsXG59IGZyb20gJy4uL3RyYW5zYWN0aW9ucy9jcmVhdGUnO1xuaW1wb3J0IHsgcGVybWlzc2lvbiB9IGZyb20gJy4uL2F1dGhBcGkvcGVybWlzc2lvbnMnO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEVycm9yIH0gZnJvbSAnLi4vY29tbW9uL2Vycm9ycyc7XG5cblxuLyoqIHJlYnVpbGRzIGFuIGluZGV4XG4gKiBAcGFyYW0ge29iamVjdH0gYXBwIC0gdGhlIGFwcGxpY2F0aW9uIGNvbnRhaW5lclxuICogQHBhcmFtIHtzdHJpbmd9IGluZGV4Tm9kZUtleSAtIG5vZGUga2V5IG9mIHRoZSBpbmRleCwgd2hpY2ggdGhlIGluZGV4IGJlbG9uZ3MgdG9cbiAqL1xuZXhwb3J0IGNvbnN0IGJ1aWxkSW5kZXggPSBhcHAgPT4gYXN5bmMgaW5kZXhOb2RlS2V5ID0+IGFwaVdyYXBwZXIoXG4gIGFwcCxcbiAgZXZlbnRzLmluZGV4QXBpLmJ1aWxkSW5kZXgsXG4gIHBlcm1pc3Npb24ubWFuYWdlSW5kZXguaXNBdXRob3JpemVkLFxuICB7IGluZGV4Tm9kZUtleSB9LFxuICBfYnVpbGRJbmRleCwgYXBwLCBpbmRleE5vZGVLZXksXG4pO1xuXG5jb25zdCBfYnVpbGRJbmRleCA9IGFzeW5jIChhcHAsIGluZGV4Tm9kZUtleSkgPT4ge1xuICBjb25zdCBpbmRleE5vZGUgPSBnZXROb2RlKGFwcC5oaWVyYXJjaHksIGluZGV4Tm9kZUtleSk7XG5cbiAgYXdhaXQgY3JlYXRlQnVpbGRJbmRleEZvbGRlcihhcHAuZGF0YXN0b3JlLCBpbmRleE5vZGVLZXkpO1xuXG4gIGlmICghaXNJbmRleChpbmRleE5vZGUpKSB7IHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoJ0J1aWxkSW5kZXg6IG11c3Qgc3VwcGx5IGFuIGluZGV4bm9kZScpOyB9XG5cbiAgaWYgKGluZGV4Tm9kZS5pbmRleFR5cGUgPT09ICdyZWZlcmVuY2UnKSB7XG4gICAgYXdhaXQgYnVpbGRSZXZlcnNlUmVmZXJlbmNlSW5kZXgoXG4gICAgICBhcHAsIGluZGV4Tm9kZSxcbiAgICApO1xuICB9IGVsc2Uge1xuICAgIGF3YWl0IGJ1aWxkSGVpcmFyY2hhbEluZGV4KFxuICAgICAgYXBwLCBpbmRleE5vZGUsXG4gICAgKTtcbiAgfVxuXG4gIGF3YWl0IGFwcC5jbGVhbnVwVHJhbnNhY3Rpb25zKCk7XG59O1xuXG5jb25zdCBidWlsZFJldmVyc2VSZWZlcmVuY2VJbmRleCA9IGFzeW5jIChhcHAsIGluZGV4Tm9kZSkgPT4ge1xuICAvLyBJdGVyYXRlIHRocm91Z2ggYWxsIHJlZmVyZW5jSU5HIHJlY29yZHMsXG4gIC8vIGFuZCB1cGRhdGUgcmVmZXJlbmNlZCBpbmRleCBmb3IgZWFjaCByZWNvcmRcbiAgbGV0IHJlY29yZENvdW50ID0gMDtcbiAgY29uc3QgcmVmZXJlbmNpbmdOb2RlcyA9ICQoYXBwLmhpZXJhcmNoeSwgW1xuICAgIGdldEZsYXR0ZW5lZEhpZXJhcmNoeSxcbiAgICBmaWx0ZXIobiA9PiBpc1JlY29yZChuKVxuICAgICAgICAgICAgICAgICAgICAmJiBzb21lKGZpZWxkUmV2ZXJzZXNSZWZlcmVuY2VUb0luZGV4KGluZGV4Tm9kZSkpKG4uZmllbGRzKSksXG4gIF0pO1xuXG4gIGNvbnN0IGNyZWF0ZVRyYW5zYWN0aW9uc0ZvclJlZmVyZW5jaW5nTm9kZSA9IGFzeW5jIChyZWZlcmVuY2luZ05vZGUpID0+IHtcbiAgICBjb25zdCBpdGVyYXRlUmVmZXJlbmNpbmdOb2RlcyA9IGF3YWl0IGdldEFsbElkc0l0ZXJhdG9yKGFwcCkocmVmZXJlbmNpbmdOb2RlLmNvbGxlY3Rpb25Ob2RlS2V5KCkpO1xuXG4gICAgbGV0IHJlZmVyZW5jaW5nSWRJdGVyYXRvciA9IGF3YWl0IGl0ZXJhdGVSZWZlcmVuY2luZ05vZGVzKCk7XG4gICAgd2hpbGUgKCFyZWZlcmVuY2luZ0lkSXRlcmF0b3IuZG9uZSkge1xuICAgICAgY29uc3QgeyByZXN1bHQgfSA9IHJlZmVyZW5jaW5nSWRJdGVyYXRvcjtcbiAgICAgIGZvciAoY29uc3QgaWQgb2YgcmVzdWx0Lmlkcykge1xuICAgICAgICBjb25zdCByZWNvcmRLZXkgPSBqb2luS2V5KHJlc3VsdC5jb2xsZWN0aW9uS2V5LCBpZCk7XG4gICAgICAgIGF3YWl0IHRyYW5zYWN0aW9uRm9yQnVpbGRJbmRleChhcHAsIGluZGV4Tm9kZS5ub2RlS2V5KCksIHJlY29yZEtleSwgcmVjb3JkQ291bnQpO1xuICAgICAgICByZWNvcmRDb3VudCsrO1xuICAgICAgfVxuICAgICAgcmVmZXJlbmNpbmdJZEl0ZXJhdG9yID0gYXdhaXQgaXRlcmF0ZVJlZmVyZW5jaW5nTm9kZXMoKTtcbiAgICB9XG4gIH07XG5cbiAgZm9yIChjb25zdCByZWZlcmVuY2luZ05vZGUgb2YgcmVmZXJlbmNpbmdOb2Rlcykge1xuICAgIGF3YWl0IGNyZWF0ZVRyYW5zYWN0aW9uc0ZvclJlZmVyZW5jaW5nTm9kZShyZWZlcmVuY2luZ05vZGUpO1xuICB9XG59O1xuXG5jb25zdCBnZXRBbGxvd2VkUGFyZW50Q29sbGVjdGlvbk5vZGVzID0gKGhpZXJhcmNoeSwgaW5kZXhOb2RlKSA9PiAkKGdldEFsbG93ZWRSZWNvcmROb2Rlc0ZvckluZGV4KGhpZXJhcmNoeSwgaW5kZXhOb2RlKSwgW1xuICBtYXAobiA9PiBuLnBhcmVudCgpKSxcbl0pO1xuXG5jb25zdCBidWlsZEhlaXJhcmNoYWxJbmRleCA9IGFzeW5jIChhcHAsIGluZGV4Tm9kZSkgPT4ge1xuICBsZXQgcmVjb3JkQ291bnQgPSAwO1xuXG4gIGNvbnN0IGNyZWF0ZVRyYW5zYWN0aW9uc0ZvcklkcyA9IGFzeW5jIChjb2xsZWN0aW9uS2V5LCBpZHMpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJlY29yZElkIG9mIGlkcykge1xuICAgICAgY29uc3QgcmVjb3JkS2V5ID0gam9pbktleShjb2xsZWN0aW9uS2V5LCByZWNvcmRJZCk7XG5cbiAgICAgIGNvbnN0IHJlY29yZE5vZGUgPSBnZXRSZWNvcmROb2RlQnlJZChcbiAgICAgICAgYXBwLmhpZXJhcmNoeSxcbiAgICAgICAgcmVjb3JkSWQsXG4gICAgICApO1xuXG4gICAgICBpZiAocmVjb3JkTm9kZUFwcGxpZXMoaW5kZXhOb2RlKShyZWNvcmROb2RlKSkge1xuICAgICAgICBhd2FpdCB0cmFuc2FjdGlvbkZvckJ1aWxkSW5kZXgoXG4gICAgICAgICAgYXBwLCBpbmRleE5vZGUubm9kZUtleSgpLFxuICAgICAgICAgIHJlY29yZEtleSwgcmVjb3JkQ291bnQsXG4gICAgICAgICk7XG4gICAgICAgIHJlY29yZENvdW50Kys7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG5cbiAgY29uc3QgY29sbGVjdGlvblJlY29yZHMgPSBnZXRBbGxvd2VkUmVjb3JkTm9kZXNGb3JJbmRleChhcHAuaGllcmFyY2h5LCBpbmRleE5vZGUpO1xuXG4gIGZvciAoY29uc3QgdGFyZ2V0Q29sbGVjdGlvblJlY29yZE5vZGUgb2YgY29sbGVjdGlvblJlY29yZHMpIHtcbiAgICBjb25zdCBhbGxJZHNJdGVyYXRvciA9IGF3YWl0IGdldEFsbElkc0l0ZXJhdG9yKGFwcCkodGFyZ2V0Q29sbGVjdGlvblJlY29yZE5vZGUuY29sbGVjdGlvbk5vZGVLZXkoKSk7XG5cbiAgICBsZXQgYWxsSWRzID0gYXdhaXQgYWxsSWRzSXRlcmF0b3IoKTtcbiAgICB3aGlsZSAoYWxsSWRzLmRvbmUgPT09IGZhbHNlKSB7XG4gICAgICBhd2FpdCBjcmVhdGVUcmFuc2FjdGlvbnNGb3JJZHMoXG4gICAgICAgIGFsbElkcy5yZXN1bHQuY29sbGVjdGlvbktleSxcbiAgICAgICAgYWxsSWRzLnJlc3VsdC5pZHMsXG4gICAgICApO1xuICAgICAgYWxsSWRzID0gYXdhaXQgYWxsSWRzSXRlcmF0b3IoKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVjb3JkQ291bnQ7XG59O1xuXG5jb25zdCBjaG9vc2VDaGlsZFJlY29yZE5vZGVCeUtleSA9IChjb2xsZWN0aW9uTm9kZSwgcmVjb3JkSWQpID0+IGZpbmQoYyA9PiByZWNvcmRJZC5zdGFydHNXaXRoKGMubm9kZUlkKSkoY29sbGVjdGlvbk5vZGUuY2hpbGRyZW4pO1xuXG5jb25zdCByZWNvcmROb2RlQXBwbGllcyA9IGluZGV4Tm9kZSA9PiByZWNvcmROb2RlID0+IGluY2x1ZGVzKHJlY29yZE5vZGUubm9kZUlkKShpbmRleE5vZGUuYWxsb3dlZFJlY29yZE5vZGVJZHMpO1xuXG5jb25zdCBoYXNBcHBsaWNhYmxlRGVjZW5kYW50ID0gKGhpZXJhcmNoeSwgYW5jZXN0b3JOb2RlLCBpbmRleE5vZGUpID0+ICQoaGllcmFyY2h5LCBbXG4gIGdldEZsYXR0ZW5lZEhpZXJhcmNoeSxcbiAgZmlsdGVyKFxuICAgIGFsbFRydWUoXG4gICAgICBpc1JlY29yZCxcbiAgICAgIGlzRGVjZW5kYW50KGFuY2VzdG9yTm9kZSksXG4gICAgICByZWNvcmROb2RlQXBwbGllcyhpbmRleE5vZGUpLFxuICAgICksXG4gICksXG5dKTtcblxuY29uc3QgYXBwbHlBbGxEZWNlbmRhbnRSZWNvcmRzID0gYXN5bmMgKGFwcCwgY29sbGVjdGlvbl9LZXlfb3JfTm9kZUtleSxcbiAgaW5kZXhOb2RlLCBpbmRleEtleSwgY3VycmVudEluZGV4ZWREYXRhLFxuICBjdXJyZW50SW5kZXhlZERhdGFLZXksIHJlY29yZENvdW50ID0gMCkgPT4ge1xuICBjb25zdCBjb2xsZWN0aW9uTm9kZSA9IGdldENvbGxlY3Rpb25Ob2RlQnlLZXlPck5vZGVLZXkoXG4gICAgYXBwLmhpZXJhcmNoeSxcbiAgICBjb2xsZWN0aW9uX0tleV9vcl9Ob2RlS2V5LFxuICApO1xuXG4gIGNvbnN0IGFsbElkc0l0ZXJhdG9yID0gYXdhaXQgZ2V0QWxsSWRzSXRlcmF0b3IoYXBwKShjb2xsZWN0aW9uX0tleV9vcl9Ob2RlS2V5KTtcblxuXG4gIGNvbnN0IGNyZWF0ZVRyYW5zYWN0aW9uc0ZvcklkcyA9IGFzeW5jIChjb2xsZWN0aW9uS2V5LCBhbGxJZHMpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJlY29yZElkIG9mIGFsbElkcykge1xuICAgICAgY29uc3QgcmVjb3JkS2V5ID0gam9pbktleShjb2xsZWN0aW9uS2V5LCByZWNvcmRJZCk7XG5cbiAgICAgIGNvbnN0IHJlY29yZE5vZGUgPSBjaG9vc2VDaGlsZFJlY29yZE5vZGVCeUtleShcbiAgICAgICAgY29sbGVjdGlvbk5vZGUsXG4gICAgICAgIHJlY29yZElkLFxuICAgICAgKTtcblxuICAgICAgaWYgKHJlY29yZE5vZGVBcHBsaWVzKGluZGV4Tm9kZSkocmVjb3JkTm9kZSkpIHtcbiAgICAgICAgYXdhaXQgdHJhbnNhY3Rpb25Gb3JCdWlsZEluZGV4KFxuICAgICAgICAgIGFwcCwgaW5kZXhOb2RlLm5vZGVLZXkoKSxcbiAgICAgICAgICByZWNvcmRLZXksIHJlY29yZENvdW50LFxuICAgICAgICApO1xuICAgICAgICByZWNvcmRDb3VudCsrO1xuICAgICAgfVxuXG4gICAgICBpZiAoaGFzQXBwbGljYWJsZURlY2VuZGFudChhcHAuaGllcmFyY2h5LCByZWNvcmROb2RlLCBpbmRleE5vZGUpKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRDb2xsZWN0aW9uTm9kZSBvZiByZWNvcmROb2RlLmNoaWxkcmVuKSB7XG4gICAgICAgICAgcmVjb3JkQ291bnQgPSBhd2FpdCBhcHBseUFsbERlY2VuZGFudFJlY29yZHMoXG4gICAgICAgICAgICBhcHAsXG4gICAgICAgICAgICBqb2luS2V5KHJlY29yZEtleSwgY2hpbGRDb2xsZWN0aW9uTm9kZS5jb2xsZWN0aW9uTmFtZSksXG4gICAgICAgICAgICBpbmRleE5vZGUsIGluZGV4S2V5LCBjdXJyZW50SW5kZXhlZERhdGEsXG4gICAgICAgICAgICBjdXJyZW50SW5kZXhlZERhdGFLZXksIHJlY29yZENvdW50LFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgbGV0IGFsbElkcyA9IGF3YWl0IGFsbElkc0l0ZXJhdG9yKCk7XG4gIHdoaWxlIChhbGxJZHMuZG9uZSA9PT0gZmFsc2UpIHtcbiAgICBhd2FpdCBjcmVhdGVUcmFuc2FjdGlvbnNGb3JJZHMoXG4gICAgICBhbGxJZHMucmVzdWx0LmNvbGxlY3Rpb25LZXksXG4gICAgICBhbGxJZHMucmVzdWx0LmlkcyxcbiAgICApO1xuICAgIGFsbElkcyA9IGF3YWl0IGFsbElkc0l0ZXJhdG9yKCk7XG4gIH1cblxuICByZXR1cm4gcmVjb3JkQ291bnQ7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBidWlsZEluZGV4O1xuIiwiaW1wb3J0IHsgaGFzLCBpc051bWJlciwgaXNVbmRlZmluZWQgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgY29tcGlsZUV4cHJlc3Npb24sIGNvbXBpbGVDb2RlIH0gZnJvbSAnQG54LWpzL2NvbXBpbGVyLXV0aWwnO1xuaW1wb3J0IHtcbiAgc2FmZUtleSwgYXBpV3JhcHBlcixcbiAgZXZlbnRzLCBpc05vbkVtcHR5U3RyaW5nLFxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgaXRlcmF0ZUluZGV4IH0gZnJvbSAnLi4vaW5kZXhpbmcvcmVhZCc7XG5pbXBvcnQge1xuICBnZXRVbnNoYXJkZWRJbmRleERhdGFLZXksXG4gIGdldFNoYXJkS2V5c0luUmFuZ2UsXG59IGZyb20gJy4uL2luZGV4aW5nL3NoYXJkaW5nJztcbmltcG9ydCB7XG4gIGdldEV4YWN0Tm9kZUZvclBhdGgsIGlzSW5kZXgsXG4gIGlzU2hhcmRlZEluZGV4LFxufSBmcm9tICcuLi90ZW1wbGF0ZUFwaS9oaWVyYXJjaHknO1xuaW1wb3J0IHsgQ09OVElOVUVfUkVBRElOR19SRUNPUkRTIH0gZnJvbSAnLi4vaW5kZXhpbmcvc2VyaWFsaXplcic7XG5pbXBvcnQgeyBwZXJtaXNzaW9uIH0gZnJvbSAnLi4vYXV0aEFwaS9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBCYWRSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9jb21tb24vZXJyb3JzJztcblxuZXhwb3J0IGNvbnN0IGFnZ3JlZ2F0ZXMgPSBhcHAgPT4gYXN5bmMgKGluZGV4S2V5LCByYW5nZVN0YXJ0UGFyYW1zID0gbnVsbCwgcmFuZ2VFbmRQYXJhbXMgPSBudWxsKSA9PiBhcGlXcmFwcGVyKFxuICBhcHAsXG4gIGV2ZW50cy5pbmRleEFwaS5hZ2dyZWdhdGVzLFxuICBwZXJtaXNzaW9uLnJlYWRJbmRleC5pc0F1dGhvcml6ZWQoaW5kZXhLZXkpLFxuICB7IGluZGV4S2V5LCByYW5nZVN0YXJ0UGFyYW1zLCByYW5nZUVuZFBhcmFtcyB9LFxuICBfYWdncmVnYXRlcywgYXBwLCBpbmRleEtleSwgcmFuZ2VTdGFydFBhcmFtcywgcmFuZ2VFbmRQYXJhbXMsXG4pO1xuXG5jb25zdCBfYWdncmVnYXRlcyA9IGFzeW5jIChhcHAsIGluZGV4S2V5LCByYW5nZVN0YXJ0UGFyYW1zLCByYW5nZUVuZFBhcmFtcykgPT4ge1xuICBpbmRleEtleSA9IHNhZmVLZXkoaW5kZXhLZXkpO1xuICBjb25zdCBpbmRleE5vZGUgPSBnZXRFeGFjdE5vZGVGb3JQYXRoKGFwcC5oaWVyYXJjaHkpKGluZGV4S2V5KTtcblxuICBpZiAoIWlzSW5kZXgoaW5kZXhOb2RlKSkgeyB0aHJvdyBuZXcgQmFkUmVxdWVzdEVycm9yKCdzdXBwbGllZCBrZXkgaXMgbm90IGFuIGluZGV4Jyk7IH1cblxuICBpZiAoaXNTaGFyZGVkSW5kZXgoaW5kZXhOb2RlKSkge1xuICAgIGNvbnN0IHNoYXJkS2V5cyA9IGF3YWl0IGdldFNoYXJkS2V5c0luUmFuZ2UoXG4gICAgICBhcHAsIGluZGV4S2V5LCByYW5nZVN0YXJ0UGFyYW1zLCByYW5nZUVuZFBhcmFtcyxcbiAgICApO1xuICAgIGxldCBhZ2dyZWdhdGVSZXN1bHQgPSBudWxsO1xuICAgIGZvciAoY29uc3QgayBvZiBzaGFyZEtleXMpIHtcbiAgICAgIGNvbnN0IHNoYXJkUmVzdWx0ID0gYXdhaXQgZ2V0QWdncmVnYXRlcyhhcHAuaGllcmFyY2h5LCBhcHAuZGF0YXN0b3JlLCBpbmRleE5vZGUsIGspO1xuICAgICAgaWYgKGFnZ3JlZ2F0ZVJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgICBhZ2dyZWdhdGVSZXN1bHQgPSBzaGFyZFJlc3VsdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFnZ3JlZ2F0ZVJlc3VsdCA9IG1lcmdlU2hhcmRBZ2dyZWdhdGUoXG4gICAgICAgICAgYWdncmVnYXRlUmVzdWx0LFxuICAgICAgICAgIHNoYXJkUmVzdWx0LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gYWdncmVnYXRlUmVzdWx0O1xuICB9XG4gIHJldHVybiBhd2FpdCBnZXRBZ2dyZWdhdGVzKFxuICAgIGFwcC5oaWVyYXJjaHksXG4gICAgYXBwLmRhdGFzdG9yZSxcbiAgICBpbmRleE5vZGUsXG4gICAgZ2V0VW5zaGFyZGVkSW5kZXhEYXRhS2V5KGluZGV4S2V5KSxcbiAgKTtcbn07XG5cbmNvbnN0IG1lcmdlU2hhcmRBZ2dyZWdhdGUgPSAodG90YWxzLCBzaGFyZCkgPT4ge1xuICBjb25zdCBtZXJnZUdyb3VwaW5nID0gKHRvdCwgc2hyKSA9PiB7XG4gICAgdG90LmNvdW50ICs9IHNoci5jb3VudDtcbiAgICBmb3IgKGNvbnN0IGFnZ05hbWUgaW4gdG90KSB7XG4gICAgICBpZiAoYWdnTmFtZSA9PT0gJ2NvdW50JykgY29udGludWU7XG4gICAgICBjb25zdCB0b3RhZ2cgPSB0b3RbYWdnTmFtZV07XG4gICAgICBjb25zdCBzaHJhZ2cgPSBzaHJbYWdnTmFtZV07XG4gICAgICB0b3RhZ2cuc3VtICs9IHNocmFnZy5zdW07XG4gICAgICB0b3RhZ2cubWF4ID0gdG90YWdnLm1heCA+IHNocmFnZy5tYXhcbiAgICAgICAgPyB0b3RhZ2cubWF4XG4gICAgICAgIDogc2hyYWdnLm1heDtcbiAgICAgIHRvdGFnZy5taW4gPSB0b3RhZ2cubWluIDwgc2hyYWdnLm1pblxuICAgICAgICA/IHRvdGFnZy5taW5cbiAgICAgICAgOiBzaHJhZ2cubWluO1xuICAgICAgdG90YWdnLm1lYW4gPSB0b3RhZ2cuc3VtIC8gdG90LmNvdW50O1xuICAgIH1cbiAgICByZXR1cm4gdG90O1xuICB9O1xuXG4gIGZvciAoY29uc3QgYWdnR3JvdXBEZWYgaW4gdG90YWxzKSB7XG4gICAgZm9yIChjb25zdCBncm91cGluZyBpbiBzaGFyZFthZ2dHcm91cERlZl0pIHtcbiAgICAgIGNvbnN0IGdyb3VwaW5nVG90YWwgPSB0b3RhbHNbYWdnR3JvdXBEZWZdW2dyb3VwaW5nXTtcbiAgICAgIHRvdGFsc1thZ2dHcm91cERlZl1bZ3JvdXBpbmddID0gaXNVbmRlZmluZWQoZ3JvdXBpbmdUb3RhbClcbiAgICAgICAgPyBzaGFyZFthZ2dHcm91cERlZl1bZ3JvdXBpbmddXG4gICAgICAgIDogbWVyZ2VHcm91cGluZyhcbiAgICAgICAgICB0b3RhbHNbYWdnR3JvdXBEZWZdW2dyb3VwaW5nXSxcbiAgICAgICAgICBzaGFyZFthZ2dHcm91cERlZl1bZ3JvdXBpbmddLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0b3RhbHM7XG59O1xuXG5jb25zdCBnZXRBZ2dyZWdhdGVzID0gYXN5bmMgKGhpZXJhcmNoeSwgZGF0YXN0b3JlLCBpbmRleCwgaW5kZXhlZERhdGFLZXkpID0+IHtcbiAgY29uc3QgYWdncmVnYXRlUmVzdWx0ID0ge307XG4gIGNvbnN0IGRvUmVhZCA9IGl0ZXJhdGVJbmRleChcbiAgICAgICAgYXN5bmMgaXRlbSA9PiB7XG4gICAgICBhcHBseUl0ZW1Ub0FnZ3JlZ2F0ZVJlc3VsdChcbiAgICAgICAgaW5kZXgsIGFnZ3JlZ2F0ZVJlc3VsdCwgaXRlbSxcbiAgICAgICk7XG4gICAgICByZXR1cm4gQ09OVElOVUVfUkVBRElOR19SRUNPUkRTO1xuICAgIH0sXG4gICAgICAgIGFzeW5jICgpID0+IGFnZ3JlZ2F0ZVJlc3VsdFxuICApO1xuXG4gIHJldHVybiBhd2FpdCBkb1JlYWQoaGllcmFyY2h5LCBkYXRhc3RvcmUsIGluZGV4LCBpbmRleGVkRGF0YUtleSk7XG59O1xuXG5cbmNvbnN0IGFwcGx5SXRlbVRvQWdncmVnYXRlUmVzdWx0ID0gKGluZGV4Tm9kZSwgcmVzdWx0LCBpdGVtKSA9PiB7XG4gIGNvbnN0IGdldEluaXRpYWxBZ2dyZWdhdGVSZXN1bHQgPSAoKSA9PiAoe1xuICAgIHN1bTogMCwgbWVhbjogbnVsbCwgbWF4OiBudWxsLCBtaW46IG51bGwsXG4gIH0pO1xuXG4gIGNvbnN0IGFwcGx5QWdncmVnYXRlUmVzdWx0ID0gKGFnZywgZXhpc3RpbmcsIGNvdW50KSA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBjb21waWxlQ29kZShhZ2cuYWdncmVnYXRlZFZhbHVlKSh7IHJlY29yZDogaXRlbSB9KTtcblxuICAgIGlmICghaXNOdW1iZXIodmFsdWUpKSByZXR1cm4gZXhpc3Rpbmc7XG5cbiAgICBleGlzdGluZy5zdW0gKz0gdmFsdWU7XG4gICAgZXhpc3RpbmcubWF4ID0gdmFsdWUgPiBleGlzdGluZy5tYXggfHwgZXhpc3RpbmcubWF4ID09PSBudWxsXG4gICAgICA/IHZhbHVlXG4gICAgICA6IGV4aXN0aW5nLm1heDtcbiAgICBleGlzdGluZy5taW4gPSB2YWx1ZSA8IGV4aXN0aW5nLm1pbiB8fCBleGlzdGluZy5taW4gPT09IG51bGxcbiAgICAgID8gdmFsdWVcbiAgICAgIDogZXhpc3RpbmcubWluO1xuICAgIGV4aXN0aW5nLm1lYW4gPSBleGlzdGluZy5zdW0gLyBjb3VudDtcbiAgICByZXR1cm4gZXhpc3Rpbmc7XG4gIH07XG5cbiAgZm9yIChjb25zdCBhZ2dHcm91cCBvZiBpbmRleE5vZGUuYWdncmVnYXRlR3JvdXBzKSB7XG4gICAgaWYgKCFoYXMoYWdnR3JvdXAubmFtZSkocmVzdWx0KSkge1xuICAgICAgcmVzdWx0W2FnZ0dyb3VwLm5hbWVdID0ge307XG4gICAgfVxuXG4gICAgY29uc3QgdGhpc0dyb3VwUmVzdWx0ID0gcmVzdWx0W2FnZ0dyb3VwLm5hbWVdO1xuXG4gICAgaWYgKGlzTm9uRW1wdHlTdHJpbmcoYWdnR3JvdXAuY29uZGl0aW9uKSkge1xuICAgICAgaWYgKCFjb21waWxlRXhwcmVzc2lvbihhZ2dHcm91cC5jb25kaXRpb24pKHsgcmVjb3JkOiBpdGVtIH0pKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBncm91cCA9IGlzTm9uRW1wdHlTdHJpbmcoYWdnR3JvdXAuZ3JvdXBCeSlcbiAgICAgID8gY29tcGlsZUNvZGUoYWdnR3JvdXAuZ3JvdXBCeSkoeyByZWNvcmQ6IGl0ZW0gfSlcbiAgICAgIDogJ2FsbCc7XG4gICAgaWYgKCFpc05vbkVtcHR5U3RyaW5nKGdyb3VwKSkge1xuICAgICAgZ3JvdXAgPSAnKG5vbmUpJztcbiAgICB9XG5cbiAgICBpZiAoIWhhcyhncm91cCkodGhpc0dyb3VwUmVzdWx0KSkge1xuICAgICAgdGhpc0dyb3VwUmVzdWx0W2dyb3VwXSA9IHsgY291bnQ6IDAgfTtcbiAgICAgIGZvciAoY29uc3QgYWdnIG9mIGFnZ0dyb3VwLmFnZ3JlZ2F0ZXMpIHtcbiAgICAgICAgdGhpc0dyb3VwUmVzdWx0W2dyb3VwXVthZ2cubmFtZV0gPSBnZXRJbml0aWFsQWdncmVnYXRlUmVzdWx0KCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc0dyb3VwUmVzdWx0W2dyb3VwXS5jb3VudCsrO1xuXG4gICAgZm9yIChjb25zdCBhZ2cgb2YgYWdnR3JvdXAuYWdncmVnYXRlcykge1xuICAgICAgY29uc3QgZXhpc3RpbmdWYWx1ZXMgPSB0aGlzR3JvdXBSZXN1bHRbZ3JvdXBdW2FnZy5uYW1lXTtcbiAgICAgIHRoaXNHcm91cFJlc3VsdFtncm91cF1bYWdnLm5hbWVdID0gYXBwbHlBZ2dyZWdhdGVSZXN1bHQoXG4gICAgICAgIGFnZywgZXhpc3RpbmdWYWx1ZXMsXG4gICAgICAgIHRoaXNHcm91cFJlc3VsdFtncm91cF0uY291bnQsXG4gICAgICApO1xuICAgIH1cbiAgfVxufTtcbiIsImltcG9ydCB7IGJ1aWxkSW5kZXggfSBmcm9tICcuL2J1aWxkSW5kZXgnO1xuaW1wb3J0IHsgbGlzdEl0ZW1zIH0gZnJvbSAnLi9saXN0SXRlbXMnO1xuaW1wb3J0IHsgYWdncmVnYXRlcyB9IGZyb20gJy4vYWdncmVnYXRlcyc7XG5cbmV4cG9ydCBjb25zdCBnZXRJbmRleEFwaSA9IGFwcCA9PiAoe1xuICBsaXN0SXRlbXM6IGxpc3RJdGVtcyhhcHApLFxuICBidWlsZEluZGV4OiBidWlsZEluZGV4KGFwcCksXG4gIGFnZ3JlZ2F0ZXM6IGFnZ3JlZ2F0ZXMoYXBwKSxcbn0pO1xuXG5leHBvcnQgZGVmYXVsdCBnZXRJbmRleEFwaTtcbiIsImltcG9ydCB7IGVhY2gsIGNvbnN0YW50LCBmaW5kIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IG1hcCwgbWF4IH0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7XG4gIHN3aXRjaENhc2UsIGRlZmF1bHRDYXNlLCBqb2luS2V5LFxuICAkLCBpc05vdGhpbmcsIGlzU29tZXRoaW5nLFxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHtcbiAgaXNJbmRleCwgaXNSb290LCBpc1NpbmdsZVJlY29yZCwgaXNDb2xsZWN0aW9uUmVjb3JkLFxuICBpc1JlY29yZCwgaXNhZ2dyZWdhdGVHcm91cCxcbiAgZ2V0RmxhdHRlbmVkSGllcmFyY2h5LFxufSBmcm9tICcuL2hpZXJhcmNoeSc7XG5pbXBvcnQgeyBhbGwgfSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBCYWRSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9jb21tb24vZXJyb3JzJztcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZU5vZGVFcnJvcnMgPSB7XG4gIGluZGV4Q2Fubm90QmVQYXJlbnQ6ICdJbmRleCB0ZW1wbGF0ZSBjYW5ub3QgYmUgYSBwYXJlbnQnLFxuICBhbGxOb25Sb290Tm9kZXNNdXN0SGF2ZVBhcmVudDogJ09ubHkgdGhlIHJvb3Qgbm9kZSBtYXkgaGF2ZSBubyBwYXJlbnQnLFxuICBpbmRleFBhcmVudE11c3RCZVJlY29yZE9yUm9vdDogJ0FuIGluZGV4IG1heSBvbmx5IGhhdmUgYSByZWNvcmQgb3Igcm9vdCBhcyBhIHBhcmVudCcsXG4gIGFnZ3JlZ2F0ZVBhcmVudE11c3RCZUFuSW5kZXg6ICdhZ2dyZWdhdGVHcm91cCBwYXJlbnQgbXVzdCBiZSBhbiBpbmRleCcsXG59O1xuXG5jb25zdCBwYXRoUmVneE1ha2VyID0gbm9kZSA9PiAoKSA9PiBub2RlLm5vZGVLZXkoKS5yZXBsYWNlKC97aWR9L2csICdbYS16QS1aMC05Xy1dKycpO1xuXG5jb25zdCBub2RlS2V5TWFrZXIgPSBub2RlID0+ICgpID0+IHN3aXRjaENhc2UoXG5cbiAgW24gPT4gaXNSZWNvcmQobikgJiYgIWlzU2luZ2xlUmVjb3JkKG4pLFxuICAgIG4gPT4gam9pbktleShcbiAgICAgIG5vZGUucGFyZW50KCkubm9kZUtleSgpLFxuICAgICAgbm9kZS5jb2xsZWN0aW9uTmFtZSxcbiAgICAgIGAke24ubm9kZUlkfS17aWR9YCxcbiAgICApXSxcblxuICBbaXNSb290LFxuICAgIGNvbnN0YW50KCcvJyldLFxuXG4gIFtkZWZhdWx0Q2FzZSxcbiAgICBuID0+IGpvaW5LZXkobm9kZS5wYXJlbnQoKS5ub2RlS2V5KCksIG4ubmFtZSldLFxuXG4pKG5vZGUpO1xuXG5cbmNvbnN0IHZhbGlkYXRlID0gcGFyZW50ID0+IChub2RlKSA9PiB7XG4gIGlmIChpc0luZGV4KG5vZGUpXG4gICAgICAgICYmIGlzU29tZXRoaW5nKHBhcmVudClcbiAgICAgICAgJiYgIWlzUm9vdChwYXJlbnQpXG4gICAgICAgICYmICFpc1JlY29yZChwYXJlbnQpKSB7XG4gICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFcnJvcihjcmVhdGVOb2RlRXJyb3JzLmluZGV4UGFyZW50TXVzdEJlUmVjb3JkT3JSb290KTtcbiAgfVxuXG4gIGlmIChpc2FnZ3JlZ2F0ZUdyb3VwKG5vZGUpXG4gICAgICAgICYmIGlzU29tZXRoaW5nKHBhcmVudClcbiAgICAgICAgJiYgIWlzSW5kZXgocGFyZW50KSkge1xuICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoY3JlYXRlTm9kZUVycm9ycy5hZ2dyZWdhdGVQYXJlbnRNdXN0QmVBbkluZGV4KTtcbiAgfVxuXG4gIGlmIChpc05vdGhpbmcocGFyZW50KSAmJiAhaXNSb290KG5vZGUpKSB7IHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoY3JlYXRlTm9kZUVycm9ycy5hbGxOb25Sb290Tm9kZXNNdXN0SGF2ZVBhcmVudCk7IH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbmNvbnN0IGNvbnN0cnVjdCA9IHBhcmVudCA9PiAobm9kZSkgPT4ge1xuICBub2RlLm5vZGVLZXkgPSBub2RlS2V5TWFrZXIobm9kZSk7XG4gIG5vZGUucGF0aFJlZ3ggPSBwYXRoUmVneE1ha2VyKG5vZGUpO1xuICBub2RlLnBhcmVudCA9IGNvbnN0YW50KHBhcmVudCk7XG4gIG5vZGUuaXNSb290ID0gKCkgPT4gaXNOb3RoaW5nKHBhcmVudClcbiAgICAgICAgICAgICAgICAgICAgICAgICYmIG5vZGUubmFtZSA9PT0gJ3Jvb3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAmJiBub2RlLnR5cGUgPT09ICdyb290JztcbiAgaWYgKGlzQ29sbGVjdGlvblJlY29yZChub2RlKSkge1xuICAgIG5vZGUuY29sbGVjdGlvbk5vZGVLZXkgPSAoKSA9PiBqb2luS2V5KFxuICAgICAgcGFyZW50Lm5vZGVLZXkoKSwgbm9kZS5jb2xsZWN0aW9uTmFtZSxcbiAgICApO1xuICAgIG5vZGUuY29sbGVjdGlvblBhdGhSZWd4ID0gKCkgPT4gam9pbktleShcbiAgICAgIHBhcmVudC5wYXRoUmVneCgpLCBub2RlLmNvbGxlY3Rpb25OYW1lLFxuICAgICk7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG5jb25zdCBhZGRUb1BhcmVudCA9IChvYmopID0+IHtcbiAgY29uc3QgcGFyZW50ID0gb2JqLnBhcmVudCgpO1xuICBpZiAoaXNTb21ldGhpbmcocGFyZW50KSkge1xuICAgIGlmIChpc0luZGV4KG9iaikpXG4gICAgLy8gUTogd2h5IGFyZSBpbmRleGVzIG5vdCBjaGlsZHJlbiA/XG4gICAgLy8gQTogYmVjYXVzZSB0aGV5IGNhbm5vdCBoYXZlIGNoaWxkcmVuIG9mIHRoZWlyIG93bi5cbiAgICB7IHBhcmVudC5pbmRleGVzLnB1c2gob2JqKTsgfSBlbHNlIGlmIChpc2FnZ3JlZ2F0ZUdyb3VwKG9iaikpIHsgcGFyZW50LmFnZ3JlZ2F0ZUdyb3Vwcy5wdXNoKG9iaik7IH0gZWxzZSB7IHBhcmVudC5jaGlsZHJlbi5wdXNoKG9iaik7IH1cblxuICAgIGlmIChpc1JlY29yZChvYmopKSB7XG4gICAgICBjb25zdCBkZWZhdWx0SW5kZXggPSBmaW5kKFxuICAgICAgICBwYXJlbnQuaW5kZXhlcyxcbiAgICAgICAgaSA9PiBpLm5hbWUgPT09IGAke3BhcmVudC5uYW1lfV9pbmRleGAsXG4gICAgICApO1xuICAgICAgaWYgKGRlZmF1bHRJbmRleCkge1xuICAgICAgICBkZWZhdWx0SW5kZXguYWxsb3dlZFJlY29yZE5vZGVJZHMucHVzaChvYmoubm9kZUlkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG9iajtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3ROb2RlID0gKHBhcmVudCwgb2JqKSA9PiAkKG9iaiwgW1xuICBjb25zdHJ1Y3QocGFyZW50KSxcbiAgdmFsaWRhdGUocGFyZW50KSxcbiAgYWRkVG9QYXJlbnQsXG5dKTtcblxuY29uc3QgZ2V0Tm9kZUlkID0gKHBhcmVudE5vZGUpID0+IHtcbiAgLy8gdGhpcyBjYXNlIGlzIGhhbmRsZWQgYmV0dGVyIGVsc2V3aGVyZVxuICBpZiAoIXBhcmVudE5vZGUpIHJldHVybiBudWxsO1xuICBjb25zdCBmaW5kUm9vdCA9IG4gPT4gKGlzUm9vdChuKSA/IG4gOiBmaW5kUm9vdChuLnBhcmVudCgpKSk7XG4gIGNvbnN0IHJvb3QgPSBmaW5kUm9vdChwYXJlbnROb2RlKTtcblxuICByZXR1cm4gKCQocm9vdCwgW1xuICAgIGdldEZsYXR0ZW5lZEhpZXJhcmNoeSxcbiAgICBtYXAobiA9PiBuLm5vZGVJZCksXG4gICAgbWF4XSkgKyAxKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjb25zdHJ1Y3RIaWVyYXJjaHkgPSAobm9kZSwgcGFyZW50KSA9PiB7XG4gIGNvbnN0cnVjdChwYXJlbnQpKG5vZGUpO1xuICBpZiAobm9kZS5pbmRleGVzKSB7XG4gICAgZWFjaChub2RlLmluZGV4ZXMsXG4gICAgICBjaGlsZCA9PiBjb25zdHJ1Y3RIaWVyYXJjaHkoY2hpbGQsIG5vZGUpKTtcbiAgfVxuICBpZiAobm9kZS5hZ2dyZWdhdGVHcm91cHMpIHtcbiAgICBlYWNoKG5vZGUuYWdncmVnYXRlR3JvdXBzLFxuICAgICAgY2hpbGQgPT4gY29uc3RydWN0SGllcmFyY2h5KGNoaWxkLCBub2RlKSk7XG4gIH1cbiAgaWYgKG5vZGUuY2hpbGRyZW4gJiYgbm9kZS5jaGlsZHJlbi5sZW5ndGggPiAwKSB7XG4gICAgZWFjaChub2RlLmNoaWxkcmVuLFxuICAgICAgY2hpbGQgPT4gY29uc3RydWN0SGllcmFyY2h5KGNoaWxkLCBub2RlKSk7XG4gIH1cbiAgaWYgKG5vZGUuZmllbGRzKSB7XG4gICAgZWFjaChub2RlLmZpZWxkcyxcbiAgICAgIGYgPT4gZWFjaChmLnR5cGVPcHRpb25zLCAodmFsLCBrZXkpID0+IHtcbiAgICAgICAgY29uc3QgZGVmID0gYWxsW2YudHlwZV0ub3B0aW9uRGVmaW5pdGlvbnNba2V5XTtcbiAgICAgICAgaWYgKCFkZWYpIHtcbiAgICAgICAgICAvLyB1bmtub3duIHR5cGVPcHRpb25cbiAgICAgICAgICBkZWxldGUgZi50eXBlT3B0aW9uc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGYudHlwZU9wdGlvbnNba2V5XSA9IGRlZi5wYXJzZSh2YWwpO1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gIH1cbiAgcmV0dXJuIG5vZGU7XG59O1xuXG5cbmV4cG9ydCBjb25zdCBnZXROZXdSb290TGV2ZWwgPSAoKSA9PiBjb25zdHJ1Y3QoKSh7XG4gIG5hbWU6ICdyb290JyxcbiAgdHlwZTogJ3Jvb3QnLFxuICBjaGlsZHJlbjogW10sXG4gIHBhdGhNYXBzOiBbXSxcbiAgaW5kZXhlczogW10sXG4gIG5vZGVJZDogMCxcbn0pO1xuXG5jb25zdCBfZ2V0TmV3UmVjb3JkVGVtcGxhdGUgPSAocGFyZW50LCBuYW1lLCBjcmVhdGVEZWZhdWx0SW5kZXgsIGlzU2luZ2xlKSA9PiB7XG4gIGNvbnN0IG5vZGUgPSBjb25zdHJ1Y3ROb2RlKHBhcmVudCwge1xuICAgIG5hbWUsXG4gICAgdHlwZTogJ3JlY29yZCcsXG4gICAgZmllbGRzOiBbXSxcbiAgICBjaGlsZHJlbjogW10sXG4gICAgdmFsaWRhdGlvblJ1bGVzOiBbXSxcbiAgICBub2RlSWQ6IGdldE5vZGVJZChwYXJlbnQpLFxuICAgIGluZGV4ZXM6IFtdLFxuICAgIGFsbGlkc1NoYXJkRmFjdG9yOiBpc1JlY29yZChwYXJlbnQpID8gMSA6IDY0LFxuICAgIGNvbGxlY3Rpb25OYW1lOiAnJyxcbiAgICBpc1NpbmdsZSxcbiAgfSk7XG5cbiAgaWYgKGNyZWF0ZURlZmF1bHRJbmRleCkge1xuICAgIGNvbnN0IGRlZmF1bHRJbmRleCA9IGdldE5ld0luZGV4VGVtcGxhdGUocGFyZW50KTtcbiAgICBkZWZhdWx0SW5kZXgubmFtZSA9IGAke25hbWV9X2luZGV4YDtcbiAgICBkZWZhdWx0SW5kZXguYWxsb3dlZFJlY29yZE5vZGVJZHMucHVzaChub2RlLm5vZGVJZCk7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn07XG5cbmV4cG9ydCBjb25zdCBnZXROZXdSZWNvcmRUZW1wbGF0ZSA9IChwYXJlbnQsIG5hbWUgPSAnJywgY3JlYXRlRGVmYXVsdEluZGV4ID0gdHJ1ZSkgPT4gX2dldE5ld1JlY29yZFRlbXBsYXRlKHBhcmVudCwgbmFtZSwgY3JlYXRlRGVmYXVsdEluZGV4LCBmYWxzZSk7XG5cbmV4cG9ydCBjb25zdCBnZXROZXdTaW5nbGVSZWNvcmRUZW1wbGF0ZSA9IHBhcmVudCA9PiBfZ2V0TmV3UmVjb3JkVGVtcGxhdGUocGFyZW50LCAnJywgZmFsc2UsIHRydWUpO1xuXG5leHBvcnQgY29uc3QgZ2V0TmV3SW5kZXhUZW1wbGF0ZSA9IChwYXJlbnQsIHR5cGUgPSAnYW5jZXN0b3InKSA9PiBjb25zdHJ1Y3ROb2RlKHBhcmVudCwge1xuICBuYW1lOiAnJyxcbiAgdHlwZTogJ2luZGV4JyxcbiAgbWFwOiAncmV0dXJuIHsuLi5yZWNvcmR9OycsXG4gIGZpbHRlcjogJycsXG4gIGluZGV4VHlwZTogdHlwZSxcbiAgZ2V0U2hhcmROYW1lOiAnJyxcbiAgZ2V0U29ydEtleTogJ3JlY29yZC5pZCcsXG4gIGFnZ3JlZ2F0ZUdyb3VwczogW10sXG4gIGFsbG93ZWRSZWNvcmROb2RlSWRzOiBbXSxcbiAgbm9kZUlkOiBnZXROb2RlSWQocGFyZW50KSxcbn0pO1xuXG5leHBvcnQgY29uc3QgZ2V0TmV3QWdncmVnYXRlR3JvdXBUZW1wbGF0ZSA9IGluZGV4ID0+IGNvbnN0cnVjdE5vZGUoaW5kZXgsIHtcbiAgbmFtZTogJycsXG4gIHR5cGU6ICdhZ2dyZWdhdGVHcm91cCcsXG4gIGdyb3VwQnk6ICcnLFxuICBhZ2dyZWdhdGVzOiBbXSxcbiAgY29uZGl0aW9uOiAnJyxcbiAgbm9kZUlkOiBnZXROb2RlSWQoaW5kZXgpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBnZXROZXdBZ2dyZWdhdGVUZW1wbGF0ZSA9IChzZXQpID0+IHtcbiAgY29uc3QgYWdncmVnYXRlZFZhbHVlID0ge1xuICAgIG5hbWU6ICcnLFxuICAgIGFnZ3JlZ2F0ZWRWYWx1ZTogJycsXG4gIH07XG4gIHNldC5hZ2dyZWdhdGVzLnB1c2goYWdncmVnYXRlZFZhbHVlKTtcbiAgcmV0dXJuIGFnZ3JlZ2F0ZWRWYWx1ZTtcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0TmV3Um9vdExldmVsLFxuICBnZXROZXdSZWNvcmRUZW1wbGF0ZSxcbiAgZ2V0TmV3SW5kZXhUZW1wbGF0ZSxcbiAgY3JlYXRlTm9kZUVycm9ycyxcbiAgY29uc3RydWN0SGllcmFyY2h5LFxuICBnZXROZXdBZ2dyZWdhdGVHcm91cFRlbXBsYXRlLFxuICBnZXROZXdBZ2dyZWdhdGVUZW1wbGF0ZSxcbn07XG4iLCJpbXBvcnQge1xuICBzb21lLCBtYXAsIGZpbHRlciwga2V5cywgaW5jbHVkZXMsXG4gIGNvdW50QnksIGZsYXR0ZW4sXG59IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQge1xuICBpc1NvbWV0aGluZywgJCxcbiAgaXNOb25FbXB0eVN0cmluZyxcbiAgaXNOb3RoaW5nT3JFbXB0eSxcbiAgaXNOb3RoaW5nLFxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgYWxsLCBnZXREZWZhdWx0T3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGFwcGx5UnVsZVNldCwgbWFrZXJ1bGUgfSBmcm9tICcuLi9jb21tb24vdmFsaWRhdGlvbkNvbW1vbic7XG5pbXBvcnQgeyBCYWRSZXF1ZXN0RXJyb3IgfSBmcm9tICcuLi9jb21tb24vZXJyb3JzJztcblxuZXhwb3J0IGNvbnN0IGZpZWxkRXJyb3JzID0ge1xuICBBZGRGaWVsZFZhbGlkYXRpb25GYWlsZWQ6ICdBZGQgZmllbGQgdmFsaWRhdGlvbjogJyxcbn07XG5cbmV4cG9ydCBjb25zdCBhbGxvd2VkVHlwZXMgPSAoKSA9PiBrZXlzKGFsbCk7XG5cbmV4cG9ydCBjb25zdCBnZXROZXdGaWVsZCA9IHR5cGUgPT4gKHtcbiAgbmFtZTogJycsIC8vIGhvdyBmaWVsZCBpcyByZWZlcmVuY2VkIGludGVybmFsbHlcbiAgdHlwZSxcbiAgdHlwZU9wdGlvbnM6IGdldERlZmF1bHRPcHRpb25zKHR5cGUpLFxuICBsYWJlbDogJycsIC8vIGhvdyBmaWVsZCBpcyBkaXNwbGF5ZWRcbiAgZ2V0SW5pdGlhbFZhbHVlOiAnZGVmYXVsdCcsIC8vIGZ1bmN0aW9uIHRoYXQgZ2V0cyB2YWx1ZSB3aGVuIGluaXRpYWxseSBjcmVhdGVkXG4gIGdldFVuZGVmaW5lZFZhbHVlOiAnZGVmYXVsdCcsIC8vIGZ1bmN0aW9uIHRoYXQgZ2V0cyB2YWx1ZSB3aGVuIGZpZWxkIHVuZGVmaW5lZCBvbiByZWNvcmRcbn0pO1xuXG5jb25zdCBmaWVsZFJ1bGVzID0gYWxsRmllbGRzID0+IFtcbiAgbWFrZXJ1bGUoJ25hbWUnLCAnZmllbGQgbmFtZSBpcyBub3Qgc2V0JyxcbiAgICBmID0+IGlzTm9uRW1wdHlTdHJpbmcoZi5uYW1lKSksXG4gIG1ha2VydWxlKCd0eXBlJywgJ2ZpZWxkIHR5cGUgaXMgbm90IHNldCcsXG4gICAgZiA9PiBpc05vbkVtcHR5U3RyaW5nKGYudHlwZSkpLFxuICBtYWtlcnVsZSgnbGFiZWwnLCAnZmllbGQgbGFiZWwgaXMgbm90IHNldCcsXG4gICAgZiA9PiBpc05vbkVtcHR5U3RyaW5nKGYubGFiZWwpKSxcbiAgbWFrZXJ1bGUoJ2dldEluaXRpYWxWYWx1ZScsICdnZXRJbml0aWFsVmFsdWUgZnVuY3Rpb24gaXMgbm90IHNldCcsXG4gICAgZiA9PiBpc05vbkVtcHR5U3RyaW5nKGYuZ2V0SW5pdGlhbFZhbHVlKSksXG4gIG1ha2VydWxlKCdnZXRVbmRlZmluZWRWYWx1ZScsICdnZXRVbmRlZmluZWRWYWx1ZSBmdW5jdGlvbiBpcyBub3Qgc2V0JyxcbiAgICBmID0+IGlzTm9uRW1wdHlTdHJpbmcoZi5nZXRVbmRlZmluZWRWYWx1ZSkpLFxuICBtYWtlcnVsZSgnbmFtZScsICdmaWVsZCBuYW1lIGlzIGR1cGxpY2F0ZWQnLFxuICAgIGYgPT4gaXNOb3RoaW5nT3JFbXB0eShmLm5hbWUpXG4gICAgICAgICAgICAgfHwgY291bnRCeSgnbmFtZScpKGFsbEZpZWxkcylbZi5uYW1lXSA9PT0gMSksXG4gIG1ha2VydWxlKCd0eXBlJywgJ3R5cGUgaXMgdW5rbm93bicsXG4gICAgZiA9PiBpc05vdGhpbmdPckVtcHR5KGYudHlwZSlcbiAgICAgICAgICAgICB8fCBzb21lKHQgPT4gZi50eXBlID09PSB0KShhbGxvd2VkVHlwZXMoKSkpLFxuXTtcblxuY29uc3QgdHlwZU9wdGlvbnNSdWxlcyA9IChmaWVsZCkgPT4ge1xuICBjb25zdCB0eXBlID0gYWxsW2ZpZWxkLnR5cGVdO1xuICBpZiAoaXNOb3RoaW5nKHR5cGUpKSByZXR1cm4gW107XG5cbiAgY29uc3QgZGVmID0gb3B0TmFtZSA9PiB0eXBlLm9wdGlvbkRlZmluaXRpb25zW29wdE5hbWVdO1xuXG4gIHJldHVybiAkKGZpZWxkLnR5cGVPcHRpb25zLCBbXG4gICAga2V5cyxcbiAgICBmaWx0ZXIobyA9PiBpc1NvbWV0aGluZyhkZWYobykpXG4gICAgICAgICAgICAgICAgICAgICYmIGlzU29tZXRoaW5nKGRlZihvKS5pc1ZhbGlkKSksXG4gICAgbWFwKG8gPT4gbWFrZXJ1bGUoXG4gICAgICBgdHlwZU9wdGlvbnMuJHtvfWAsXG4gICAgICBgJHtkZWYobykucmVxdWlyZW1lbnREZXNjcmlwdGlvbn1gLFxuICAgICAgZmllbGQgPT4gZGVmKG8pLmlzVmFsaWQoZmllbGQudHlwZU9wdGlvbnNbb10pLFxuICAgICkpLFxuICBdKTtcbn07XG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUZpZWxkID0gYWxsRmllbGRzID0+IChmaWVsZCkgPT4ge1xuICBjb25zdCBldmVyeVNpbmdsZUZpZWxkID0gaW5jbHVkZXMoZmllbGQpKGFsbEZpZWxkcykgPyBhbGxGaWVsZHMgOiBbLi4uYWxsRmllbGRzLCBmaWVsZF07XG4gIHJldHVybiBhcHBseVJ1bGVTZXQoWy4uLmZpZWxkUnVsZXMoZXZlcnlTaW5nbGVGaWVsZCksIC4uLnR5cGVPcHRpb25zUnVsZXMoZmllbGQpXSkoZmllbGQpO1xufTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWxsRmllbGRzID0gcmVjb3JkTm9kZSA9PiAkKHJlY29yZE5vZGUuZmllbGRzLCBbXG4gIG1hcCh2YWxpZGF0ZUZpZWxkKHJlY29yZE5vZGUuZmllbGRzKSksXG4gIGZsYXR0ZW4sXG5dKTtcblxuZXhwb3J0IGNvbnN0IGFkZEZpZWxkID0gKHJlY29yZFRlbXBsYXRlLCBmaWVsZCkgPT4ge1xuICBpZiAoaXNOb3RoaW5nT3JFbXB0eShmaWVsZC5sYWJlbCkpIHtcbiAgICBmaWVsZC5sYWJlbCA9IGZpZWxkLm5hbWU7XG4gIH1cbiAgY29uc3QgdmFsaWRhdGlvbk1lc3NhZ2VzID0gdmFsaWRhdGVGaWVsZChbLi4ucmVjb3JkVGVtcGxhdGUuZmllbGRzLCBmaWVsZF0pKGZpZWxkKTtcbiAgaWYgKHZhbGlkYXRpb25NZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZXJyb3JzID0gbWFwKG0gPT4gbS5lcnJvcikodmFsaWRhdGlvbk1lc3NhZ2VzKTtcbiAgICB0aHJvdyBuZXcgQmFkUmVxdWVzdEVycm9yKGAke2ZpZWxkRXJyb3JzLkFkZEZpZWxkVmFsaWRhdGlvbkZhaWxlZH0gJHtlcnJvcnMuam9pbignLCAnKX1gKTtcbiAgfVxuICByZWNvcmRUZW1wbGF0ZS5maWVsZHMucHVzaChmaWVsZCk7XG59O1xuIiwiaW1wb3J0IHsgaXNOdW1iZXIsIGlzQm9vbGVhbiwgZGVmYXVsdENhc2UgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgc3dpdGNoQ2FzZSB9IGZyb20gJy4uL2NvbW1vbic7XG5cbmV4cG9ydCBjb25zdCBnZXROZXdSZWNvcmRWYWxpZGF0aW9uUnVsZSA9IChpbnZhbGlkRmllbGRzLFxuICBtZXNzYWdlV2hlbkludmFsaWQsXG4gIGV4cHJlc3Npb25XaGVuVmFsaWQpID0+ICh7XG4gIGludmFsaWRGaWVsZHMsIG1lc3NhZ2VXaGVuSW52YWxpZCwgZXhwcmVzc2lvbldoZW5WYWxpZCxcbn0pO1xuXG5jb25zdCBnZXRTdGF0aWNWYWx1ZSA9IHN3aXRjaENhc2UoXG4gIFtpc051bWJlciwgdiA9PiB2LnRvU3RyaW5nKCldLFxuICBbaXNCb29sZWFuLCB2ID0+IHYudG9TdHJpbmcoKV0sXG4gIFtkZWZhdWx0Q2FzZSwgdiA9PiBgJyR7dn0nYF0sXG4pO1xuXG5leHBvcnQgY29uc3QgY29tbW9uUmVjb3JkVmFsaWRhdGlvblJ1bGVzID0gKHtcblxuICBmaWVsZE5vdEVtcHR5OiBmaWVsZE5hbWUgPT4gZ2V0TmV3UmVjb3JkVmFsaWRhdGlvblJ1bGUoXG4gICAgW2ZpZWxkTmFtZV0sXG4gICAgYCR7ZmllbGROYW1lfSBpcyBlbXB0eWAsXG4gICAgYCFfLmlzRW1wdHkocmVjb3JkWycke2ZpZWxkTmFtZX0nXSlgLFxuICApLFxuXG4gIGZpZWxkQmV0d2VlbjogKGZpZWxkTmFtZSwgbWluLCBtYXgpID0+IGdldE5ld1JlY29yZFZhbGlkYXRpb25SdWxlKFxuICAgIFtmaWVsZE5hbWVdLFxuICAgIGAke2ZpZWxkTmFtZX0gbXVzdCBiZSBiZXR3ZWVuICR7bWluLnRvU3RyaW5nKCl9IGFuZCAke21heC50b1N0cmluZygpfWAsXG4gICAgYHJlY29yZFsnJHtmaWVsZE5hbWV9J10gPj0gJHtnZXRTdGF0aWNWYWx1ZShtaW4pfSAmJiAgcmVjb3JkWycke2ZpZWxkTmFtZX0nXSA8PSAke2dldFN0YXRpY1ZhbHVlKG1heCl9IGAsXG4gICksXG5cbiAgZmllbGRHcmVhdGVyVGhhbjogKGZpZWxkTmFtZSwgbWluLCBtYXgpID0+IGdldE5ld1JlY29yZFZhbGlkYXRpb25SdWxlKFxuICAgIFtmaWVsZE5hbWVdLFxuICAgIGAke2ZpZWxkTmFtZX0gbXVzdCBiZSBncmVhdGVyIHRoYW4gJHttaW4udG9TdHJpbmcoKX0gYW5kICR7bWF4LnRvU3RyaW5nKCl9YCxcbiAgICBgcmVjb3JkWycke2ZpZWxkTmFtZX0nXSA+PSAke2dldFN0YXRpY1ZhbHVlKG1pbil9ICBgLFxuICApLFxufSk7XG5cbmV4cG9ydCBjb25zdCBhZGRSZWNvcmRWYWxpZGF0aW9uUnVsZSA9IHJlY29yZE5vZGUgPT4gcnVsZSA9PiByZWNvcmROb2RlLnZhbGlkYXRpb25SdWxlcy5wdXNoKHJ1bGUpO1xuIiwiXG5leHBvcnQgY29uc3QgY3JlYXRlVHJpZ2dlciA9ICgpID0+ICh7XG4gIGFjdGlvbk5hbWU6ICcnLFxuICBldmVudE5hbWU6ICcnLFxuICAvLyBmdW5jdGlvbiwgaGFzIGFjY2VzcyB0byBldmVudCBjb250ZXh0LFxuICAvLyByZXR1cm5zIG9iamVjdCB0aGF0IGlzIHVzZWQgYXMgcGFyYW1ldGVyIHRvIGFjdGlvblxuICAvLyBvbmx5IHVzZWQgaWYgdHJpZ2dlcmVkIGJ5IGV2ZW50XG4gIG9wdGlvbnNDcmVhdG9yOiAnJyxcbiAgLy8gYWN0aW9uIHJ1bnMgaWYgdHJ1ZSxcbiAgLy8gaGFzIGFjY2VzcyB0byBldmVudCBjb250ZXh0XG4gIGNvbmRpdGlvbjogJycsXG59KTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUFjdGlvbiA9ICgpID0+ICh7XG4gIG5hbWU6ICcnLFxuICBiZWhhdmlvdXJTb3VyY2U6ICcnLFxuICAvLyBuYW1lIG9mIGZ1bmN0aW9uIGluIGFjdGlvblNvdXJjZVxuICBiZWhhdmlvdXJOYW1lOiAnJyxcbiAgLy8gcGFyYW1ldGVyIHBhc3NlZCBpbnRvIGJlaGF2aW91ci5cbiAgLy8gYW55IG90aGVyIHBhcm1zIHBhc3NlZCBhdCBydW50aW1lIGUuZy5cbiAgLy8gYnkgdHJpZ2dlciwgb3IgbWFudWFsbHksIHdpbGwgYmUgbWVyZ2VkIGludG8gdGhpc1xuICBpbml0aWFsT3B0aW9uczoge30sXG59KTtcbiIsImltcG9ydCB7IGZsYXR0ZW4sIG1hcCB9IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyBpc0VtcHR5IH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IGNvbXBpbGVDb2RlIH0gZnJvbSAnQG54LWpzL2NvbXBpbGVyLXV0aWwnO1xuaW1wb3J0IHtcbiAgaXNOb25FbXB0eVN0cmluZywgXG4gIGV4ZWN1dGVzV2l0aG91dEV4Y2VwdGlvbiwgJCwgXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBhcHBseVJ1bGVTZXQsIG1ha2VydWxlIH0gZnJvbSAnLi4vY29tbW9uL3ZhbGlkYXRpb25Db21tb24nO1xuXG5jb25zdCBhZ2dyZWdhdGVSdWxlcyA9IFtcbiAgbWFrZXJ1bGUoJ25hbWUnLCAnY2hvb3NlIGEgbmFtZSBmb3IgdGhlIGFnZ3JlZ2F0ZScsXG4gICAgYSA9PiBpc05vbkVtcHR5U3RyaW5nKGEubmFtZSkpLFxuICBtYWtlcnVsZSgnYWdncmVnYXRlZFZhbHVlJywgJ2FnZ3JlZ2F0ZWRWYWx1ZSBkb2VzIG5vdCBjb21waWxlJyxcbiAgICBhID0+IGlzRW1wdHkoYS5hZ2dyZWdhdGVkVmFsdWUpXG4gICAgICAgICAgICB8fCBleGVjdXRlc1dpdGhvdXRFeGNlcHRpb24oXG4gICAgICAgICAgICAgICgpID0+IGNvbXBpbGVDb2RlKGEuYWdncmVnYXRlZFZhbHVlKSxcbiAgICAgICAgICAgICkpLFxuXTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWdncmVnYXRlID0gYWdncmVnYXRlID0+IGFwcGx5UnVsZVNldChhZ2dyZWdhdGVSdWxlcykoYWdncmVnYXRlKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWxsQWdncmVnYXRlcyA9IGFsbCA9PiAkKGFsbCwgW1xuICBtYXAodmFsaWRhdGVBZ2dyZWdhdGUpLFxuICBmbGF0dGVuLFxuXSk7XG4iLCJpbXBvcnQge1xuICBmaWx0ZXIsIHVuaW9uLCBjb25zdGFudCxcbiAgbWFwLCBmbGF0dGVuLCBldmVyeSwgdW5pcUJ5LFxuICBzb21lLCBpbmNsdWRlcywgaXNFbXB0eSxcbn0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7IGhhcyB9IGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgY29tcGlsZUNvZGUgfSBmcm9tICdAbngtanMvY29tcGlsZXItdXRpbCc7XG5pbXBvcnQge1xuICAkLCBpc1NvbWV0aGluZywgc3dpdGNoQ2FzZSxcbiAgYW55VHJ1ZSwgaXNOb25FbXB0eUFycmF5LCBleGVjdXRlc1dpdGhvdXRFeGNlcHRpb24sXG4gIGlzTm9uRW1wdHlTdHJpbmcsIGRlZmF1bHRDYXNlLFxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHtcbiAgaXNSZWNvcmQsIGlzUm9vdCwgaXNhZ2dyZWdhdGVHcm91cCxcbiAgaXNJbmRleCwgZ2V0RmxhdHRlbmVkSGllcmFyY2h5LFxufSBmcm9tICcuL2hpZXJhcmNoeSc7XG5pbXBvcnQgeyBldmVudHNMaXN0IH0gZnJvbSAnLi4vY29tbW9uL2V2ZW50cyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFsbEZpZWxkcyB9IGZyb20gJy4vZmllbGRzJztcbmltcG9ydCB7XG4gIGFwcGx5UnVsZVNldCwgbWFrZXJ1bGUsIHN0cmluZ05vdEVtcHR5LFxuICB2YWxpZGF0aW9uRXJyb3IsXG59IGZyb20gJy4uL2NvbW1vbi92YWxpZGF0aW9uQ29tbW9uJztcbmltcG9ydCB7IGluZGV4UnVsZVNldCB9IGZyb20gJy4vaW5kZXhlcyc7XG5pbXBvcnQgeyB2YWxpZGF0ZUFsbEFnZ3JlZ2F0ZXMgfSBmcm9tICcuL3ZhbGlkYXRlQWdncmVnYXRlJztcblxuZXhwb3J0IGNvbnN0IHJ1bGVTZXQgPSAoLi4uc2V0cykgPT4gY29uc3RhbnQoZmxhdHRlbihbLi4uc2V0c10pKTtcblxuY29uc3QgY29tbW9uUnVsZXMgPSBbXG4gIG1ha2VydWxlKCduYW1lJywgJ25vZGUgbmFtZSBpcyBub3Qgc2V0JyxcbiAgICBub2RlID0+IHN0cmluZ05vdEVtcHR5KG5vZGUubmFtZSkpLFxuICBtYWtlcnVsZSgndHlwZScsICdub2RlIHR5cGUgbm90IHJlY29nbmlzZWQnLFxuICAgIGFueVRydWUoaXNSZWNvcmQsIGlzUm9vdCwgaXNJbmRleCwgaXNhZ2dyZWdhdGVHcm91cCkpLFxuXTtcblxuY29uc3QgcmVjb3JkUnVsZXMgPSBbXG4gIG1ha2VydWxlKCdmaWVsZHMnLCAnbm8gZmllbGRzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgcmVjb3JkJyxcbiAgICBub2RlID0+IGlzTm9uRW1wdHlBcnJheShub2RlLmZpZWxkcykpLFxuICBtYWtlcnVsZSgndmFsaWRhdGlvblJ1bGVzJywgXCJ2YWxpZGF0aW9uIHJ1bGUgaXMgbWlzc2luZyBhICdtZXNzYWdlV2hlblZhbGlkJyBtZW1iZXJcIixcbiAgICBub2RlID0+IGV2ZXJ5KHIgPT4gaGFzKHIsICdtZXNzYWdlV2hlbkludmFsaWQnKSkobm9kZS52YWxpZGF0aW9uUnVsZXMpKSxcbiAgbWFrZXJ1bGUoJ3ZhbGlkYXRpb25SdWxlcycsIFwidmFsaWRhdGlvbiBydWxlIGlzIG1pc3NpbmcgYSAnZXhwcmVzc2lvbldoZW5WYWxpZCcgbWVtYmVyXCIsXG4gICAgbm9kZSA9PiBldmVyeShyID0+IGhhcyhyLCAnZXhwcmVzc2lvbldoZW5WYWxpZCcpKShub2RlLnZhbGlkYXRpb25SdWxlcykpLFxuXTtcblxuXG5jb25zdCBhZ2dyZWdhdGVHcm91cFJ1bGVzID0gW1xuICBtYWtlcnVsZSgnY29uZGl0aW9uJywgJ2NvbmRpdGlvbiBkb2VzIG5vdCBjb21waWxlJyxcbiAgICBhID0+IGlzRW1wdHkoYS5jb25kaXRpb24pXG4gICAgICAgICAgICAgfHwgZXhlY3V0ZXNXaXRob3V0RXhjZXB0aW9uKFxuICAgICAgICAgICAgICAgKCkgPT4gY29tcGlsZUV4cHJlc3Npb24oYS5jb25kaXRpb24pLFxuICAgICAgICAgICAgICkpLFxuXTtcblxuY29uc3QgZ2V0UnVsZVNldCA9IG5vZGUgPT4gc3dpdGNoQ2FzZShcblxuICBbaXNSZWNvcmQsIHJ1bGVTZXQoXG4gICAgY29tbW9uUnVsZXMsXG4gICAgcmVjb3JkUnVsZXMsXG4gICldLFxuXG4gIFtpc0luZGV4LCBydWxlU2V0KFxuICAgIGNvbW1vblJ1bGVzLFxuICAgIGluZGV4UnVsZVNldCxcbiAgKV0sXG5cbiAgW2lzYWdncmVnYXRlR3JvdXAsIHJ1bGVTZXQoXG4gICAgY29tbW9uUnVsZXMsXG4gICAgYWdncmVnYXRlR3JvdXBSdWxlcyxcbiAgKV0sXG5cbiAgW2RlZmF1bHRDYXNlLCBydWxlU2V0KGNvbW1vblJ1bGVzLCBbXSldLFxuKShub2RlKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlTm9kZSA9IG5vZGUgPT4gYXBwbHlSdWxlU2V0KGdldFJ1bGVTZXQobm9kZSkpKG5vZGUpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBbGwgPSAoYXBwSGllcmFyY2h5KSA9PiB7XG4gIGNvbnN0IGZsYXR0ZW5lZCA9IGdldEZsYXR0ZW5lZEhpZXJhcmNoeShcbiAgICBhcHBIaWVyYXJjaHksXG4gICk7XG5cbiAgY29uc3QgZHVwbGljYXRlTmFtZVJ1bGUgPSBtYWtlcnVsZShcbiAgICAnbmFtZScsICdub2RlIG5hbWVzIG11c3QgYmUgdW5pcXVlIHVuZGVyIHNoYXJlZCBwYXJlbnQnLFxuICAgIG4gPT4gZmlsdGVyKGYgPT4gZi5wYXJlbnQoKSA9PT0gbi5wYXJlbnQoKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBmLm5hbWUgPT09IG4ubmFtZSkoZmxhdHRlbmVkKS5sZW5ndGggPT09IDEsXG4gICk7XG5cbiAgY29uc3QgZHVwbGljYXRlTm9kZUtleUVycm9ycyA9ICQoZmxhdHRlbmVkLCBbXG4gICAgbWFwKG4gPT4gYXBwbHlSdWxlU2V0KFtkdXBsaWNhdGVOYW1lUnVsZV0pKG4pKSxcbiAgICBmaWx0ZXIoaXNTb21ldGhpbmcpLFxuICAgIGZsYXR0ZW4sXG4gIF0pO1xuXG4gIGNvbnN0IGZpZWxkRXJyb3JzID0gJChmbGF0dGVuZWQsIFtcbiAgICBmaWx0ZXIoaXNSZWNvcmQpLFxuICAgIG1hcCh2YWxpZGF0ZUFsbEZpZWxkcyksXG4gICAgZmxhdHRlbixcbiAgXSk7XG5cbiAgY29uc3QgYWdncmVnYXRlRXJyb3JzID0gJChmbGF0dGVuZWQsIFtcbiAgICBmaWx0ZXIoaXNhZ2dyZWdhdGVHcm91cCksXG4gICAgbWFwKHMgPT4gdmFsaWRhdGVBbGxBZ2dyZWdhdGVzKFxuICAgICAgcy5hZ2dyZWdhdGVzLFxuICAgICkpLFxuICAgIGZsYXR0ZW4sXG4gIF0pO1xuXG4gIHJldHVybiAkKGZsYXR0ZW5lZCwgW1xuICAgIG1hcCh2YWxpZGF0ZU5vZGUpLFxuICAgIGZsYXR0ZW4sXG4gICAgdW5pb24oZHVwbGljYXRlTm9kZUtleUVycm9ycyksXG4gICAgdW5pb24oZmllbGRFcnJvcnMpLFxuICAgIHVuaW9uKGFnZ3JlZ2F0ZUVycm9ycyksXG4gIF0pO1xufTtcblxuY29uc3QgYWN0aW9uUnVsZXMgPSBbXG4gIG1ha2VydWxlKCduYW1lJywgJ2FjdGlvbiBtdXN0IGhhdmUgYSBuYW1lJyxcbiAgICBhID0+IGlzTm9uRW1wdHlTdHJpbmcoYS5uYW1lKSksXG4gIG1ha2VydWxlKCdiZWhhdmlvdXJOYW1lJywgJ211c3Qgc3VwcGx5IGEgYmVoYXZpb3VyIG5hbWUgdG8gdGhlIGFjdGlvbicsXG4gICAgYSA9PiBpc05vbkVtcHR5U3RyaW5nKGEuYmVoYXZpb3VyTmFtZSkpLFxuICBtYWtlcnVsZSgnYmVoYXZpb3VyU291cmNlJywgJ211c3Qgc3VwcGx5IGEgYmVoYXZpb3VyIHNvdXJjZSBmb3IgdGhlIGFjdGlvbicsXG4gICAgYSA9PiBpc05vbkVtcHR5U3RyaW5nKGEuYmVoYXZpb3VyU291cmNlKSksXG5dO1xuXG5jb25zdCBkdXBsaWNhdGVBY3Rpb25SdWxlID0gbWFrZXJ1bGUoJycsICdhY3Rpb24gbmFtZSBtdXN0IGJlIHVuaXF1ZScsICgpID0+IHt9KTtcblxuY29uc3QgdmFsaWRhdGVBY3Rpb24gPSBhY3Rpb24gPT4gYXBwbHlSdWxlU2V0KGFjdGlvblJ1bGVzKShhY3Rpb24pO1xuXG5cbmV4cG9ydCBjb25zdCB2YWxpZGF0ZUFjdGlvbnMgPSAoYWxsQWN0aW9ucykgPT4ge1xuICBjb25zdCBkdXBsaWNhdGVBY3Rpb25zID0gJChhbGxBY3Rpb25zLCBbXG4gICAgZmlsdGVyKGEgPT4gZmlsdGVyKGEyID0+IGEyLm5hbWUgPT09IGEubmFtZSkoYWxsQWN0aW9ucykubGVuZ3RoID4gMSksXG4gICAgbWFwKGEgPT4gdmFsaWRhdGlvbkVycm9yKGR1cGxpY2F0ZUFjdGlvblJ1bGUsIGEpKSxcbiAgXSk7XG5cbiAgY29uc3QgZXJyb3JzID0gJChhbGxBY3Rpb25zLCBbXG4gICAgbWFwKHZhbGlkYXRlQWN0aW9uKSxcbiAgICBmbGF0dGVuLFxuICAgIHVuaW9uKGR1cGxpY2F0ZUFjdGlvbnMpLFxuICAgIHVuaXFCeSgnbmFtZScpLFxuICBdKTtcblxuICByZXR1cm4gZXJyb3JzO1xufTtcblxuY29uc3QgdHJpZ2dlclJ1bGVzID0gYWN0aW9ucyA9PiAoW1xuICBtYWtlcnVsZSgnYWN0aW9uTmFtZScsICdtdXN0IHNwZWNpZnkgYW4gYWN0aW9uJyxcbiAgICB0ID0+IGlzTm9uRW1wdHlTdHJpbmcodC5hY3Rpb25OYW1lKSksXG4gIG1ha2VydWxlKCdldmVudE5hbWUnLCAnbXVzdCBzcGVjaWZ5IGFuZCBldmVudCcsXG4gICAgdCA9PiBpc05vbkVtcHR5U3RyaW5nKHQuZXZlbnROYW1lKSksXG4gIG1ha2VydWxlKCdhY3Rpb25OYW1lJywgJ3NwZWNpZmllZCBhY3Rpb24gbm90IHN1cHBsaWVkJyxcbiAgICB0ID0+ICF0LmFjdGlvbk5hbWVcbiAgICAgICAgICAgICB8fCBzb21lKGEgPT4gYS5uYW1lID09PSB0LmFjdGlvbk5hbWUpKGFjdGlvbnMpKSxcbiAgbWFrZXJ1bGUoJ2V2ZW50TmFtZScsICdpbnZhbGlkIEV2ZW50IE5hbWUnLFxuICAgIHQgPT4gIXQuZXZlbnROYW1lXG4gICAgICAgICAgICAgfHwgaW5jbHVkZXModC5ldmVudE5hbWUpKGV2ZW50c0xpc3QpKSxcbiAgbWFrZXJ1bGUoJ29wdGlvbnNDcmVhdG9yJywgJ09wdGlvbnMgQ3JlYXRvciBkb2VzIG5vdCBjb21waWxlIC0gY2hlY2sgeW91ciBleHByZXNzaW9uJyxcbiAgICAodCkgPT4ge1xuICAgICAgaWYgKCF0Lm9wdGlvbnNDcmVhdG9yKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbXBpbGVDb2RlKHQub3B0aW9uc0NyZWF0b3IpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKF8pIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfSksXG4gIG1ha2VydWxlKCdjb25kaXRpb24nLCAnVHJpZ2dlciBjb25kaXRpb24gZG9lcyBub3QgY29tcGlsZSAtIGNoZWNrIHlvdXIgZXhwcmVzc2lvbicsXG4gICAgKHQpID0+IHtcbiAgICAgIGlmICghdC5jb25kaXRpb24pIHJldHVybiB0cnVlO1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29tcGlsZUV4cHJlc3Npb24odC5jb25kaXRpb24pO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gY2F0Y2ggKF8pIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgfSksXG5dKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVHJpZ2dlciA9ICh0cmlnZ2VyLCBhbGxBY3Rpb25zKSA9PiB7XG4gIGNvbnN0IGVycm9ycyA9IGFwcGx5UnVsZVNldCh0cmlnZ2VyUnVsZXMoYWxsQWN0aW9ucykpKHRyaWdnZXIpO1xuXG4gIHJldHVybiBlcnJvcnM7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVUcmlnZ2VycyA9ICh0cmlnZ2VycywgYWxsQWN0aW9ucykgPT4gJCh0cmlnZ2VycywgW1xuICBtYXAodCA9PiB2YWxpZGF0ZVRyaWdnZXIodCwgYWxsQWN0aW9ucykpLFxuICBmbGF0dGVuLFxuXSk7XG4iLCJpbXBvcnQgeyBhcHBEZWZpbml0aW9uRmlsZSB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBjb25zdHJ1Y3RIaWVyYXJjaHkgfSBmcm9tICcuL2NyZWF0ZU5vZGVzJztcblxuZXhwb3J0IGNvbnN0IGdldEFwcGxpY2F0aW9uRGVmaW5pdGlvbiA9IGRhdGFzdG9yZSA9PiBhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGV4aXN0cyA9IGF3YWl0IGRhdGFzdG9yZS5leGlzdHMoYXBwRGVmaW5pdGlvbkZpbGUpO1xuXG4gIGlmICghZXhpc3RzKSB0aHJvdyBuZXcgRXJyb3IoJ0FwcGxpY2F0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhpc3QnKTtcblxuICBjb25zdCBhcHBEZWZpbml0aW9uID0gYXdhaXQgZGF0YXN0b3JlLmxvYWRKc29uKGFwcERlZmluaXRpb25GaWxlKTtcbiAgYXBwRGVmaW5pdGlvbi5oaWVyYXJjaHkgPSBjb25zdHJ1Y3RIaWVyYXJjaHkoXG4gICAgYXBwRGVmaW5pdGlvbi5oaWVyYXJjaHksXG4gICk7XG4gIHJldHVybiBhcHBEZWZpbml0aW9uO1xufTtcbiIsImltcG9ydCB7IGpvaW4gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHsgcGVybWlzc2lvbiB9IGZyb20gJy4uL2F1dGhBcGkvcGVybWlzc2lvbnMnO1xuaW1wb3J0IHsgYXBwRGVmaW5pdGlvbkZpbGUgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgdmFsaWRhdGVBbGwgfSBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCB7IGFwaVdyYXBwZXIgfSBmcm9tICcuLi9jb21tb24vYXBpV3JhcHBlcic7XG5pbXBvcnQgeyBldmVudHMgfSBmcm9tICcuLi9jb21tb24vZXZlbnRzJztcblxuZXhwb3J0IGNvbnN0IHNhdmVBcHBsaWNhdGlvbkhpZXJhcmNoeSA9IGFwcCA9PiBhc3luYyBoaWVyYXJjaHkgPT4gYXBpV3JhcHBlcihcbiAgYXBwLFxuICBldmVudHMudGVtcGxhdGVBcGkuc2F2ZUFwcGxpY2F0aW9uSGllcmFyY2h5LFxuICBwZXJtaXNzaW9uLndyaXRlVGVtcGxhdGVzLmlzQXV0aG9yaXplZCxcbiAgeyBoaWVyYXJjaHkgfSxcbiAgX3NhdmVBcHBsaWNhdGlvbkhpZXJhcmNoeSwgYXBwLmRhdGFzdG9yZSwgaGllcmFyY2h5LFxuKTtcblxuXG5leHBvcnQgY29uc3QgX3NhdmVBcHBsaWNhdGlvbkhpZXJhcmNoeSA9IGFzeW5jIChkYXRhc3RvcmUsIGhpZXJhcmNoeSkgPT4ge1xuICBjb25zdCB2YWxpZGF0aW9uRXJyb3JzID0gYXdhaXQgdmFsaWRhdGVBbGwoaGllcmFyY2h5KTtcbiAgaWYgKHZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSGllcmFyY2h5IGlzIGludmFsaWQ6ICR7am9pbihcbiAgICAgIHZhbGlkYXRpb25FcnJvcnMubWFwKGUgPT4gYCR7ZS5pdGVtLm5vZGVLZXkgPyBlLml0ZW0ubm9kZUtleSgpIDogJyd9IDogJHtlLmVycm9yfWApLFxuICAgICAgJywnLFxuICAgICl9YCk7XG4gIH1cblxuICBpZiAoYXdhaXQgZGF0YXN0b3JlLmV4aXN0cyhhcHBEZWZpbml0aW9uRmlsZSkpIHtcbiAgICBjb25zdCBhcHBEZWZpbml0aW9uID0gYXdhaXQgZGF0YXN0b3JlLmxvYWRKc29uKGFwcERlZmluaXRpb25GaWxlKTtcbiAgICBhcHBEZWZpbml0aW9uLmhpZXJhcmNoeSA9IGhpZXJhcmNoeTtcbiAgICBhd2FpdCBkYXRhc3RvcmUudXBkYXRlSnNvbihhcHBEZWZpbml0aW9uRmlsZSwgYXBwRGVmaW5pdGlvbik7XG4gIH0gZWxzZSB7XG4gICAgYXdhaXQgZGF0YXN0b3JlLmNyZWF0ZUZvbGRlcignLy5jb25maWcnKTtcbiAgICBjb25zdCBhcHBEZWZpbml0aW9uID0geyBhY3Rpb25zOiBbXSwgdHJpZ2dlcnM6IFtdLCBoaWVyYXJjaHkgfTtcbiAgICBhd2FpdCBkYXRhc3RvcmUuY3JlYXRlSnNvbihhcHBEZWZpbml0aW9uRmlsZSwgYXBwRGVmaW5pdGlvbik7XG4gIH1cbn07XG4iLCJpbXBvcnQgeyBqb2luIH0gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyBhcHBEZWZpbml0aW9uRmlsZSB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyB2YWxpZGF0ZVRyaWdnZXJzLCB2YWxpZGF0ZUFjdGlvbnMgfSBmcm9tICcuL3ZhbGlkYXRlJztcbmltcG9ydCB7IGFwaVdyYXBwZXIgfSBmcm9tICcuLi9jb21tb24vYXBpV3JhcHBlcic7XG5pbXBvcnQgeyBldmVudHMgfSBmcm9tICcuLi9jb21tb24vZXZlbnRzJztcbmltcG9ydCB7IHBlcm1pc3Npb24gfSBmcm9tICcuLi9hdXRoQXBpL3Blcm1pc3Npb25zJztcbmltcG9ydCB7IEJhZFJlcXVlc3RFcnJvciB9IGZyb20gJy4uL2NvbW1vbi9lcnJvcnMnO1xuXG5leHBvcnQgY29uc3Qgc2F2ZUFjdGlvbnNBbmRUcmlnZ2VycyA9IGFwcCA9PiBhc3luYyAoYWN0aW9ucywgdHJpZ2dlcnMpID0+IGFwaVdyYXBwZXIoXG4gIGFwcCxcbiAgZXZlbnRzLnRlbXBsYXRlQXBpLnNhdmVBY3Rpb25zQW5kVHJpZ2dlcnMsXG4gIHBlcm1pc3Npb24ud3JpdGVUZW1wbGF0ZXMuaXNBdXRob3JpemVkLFxuICB7IGFjdGlvbnMsIHRyaWdnZXJzIH0sXG4gIF9zYXZlQWN0aW9uc0FuZFRyaWdnZXJzLCBhcHAuZGF0YXN0b3JlLCBhY3Rpb25zLCB0cmlnZ2Vycyxcbik7XG5cbmV4cG9ydCBjb25zdCBfc2F2ZUFjdGlvbnNBbmRUcmlnZ2VycyA9IGFzeW5jIChkYXRhc3RvcmUsIGFjdGlvbnMsIHRyaWdnZXJzKSA9PiB7XG4gIGlmIChhd2FpdCBkYXRhc3RvcmUuZXhpc3RzKGFwcERlZmluaXRpb25GaWxlKSkge1xuICAgIGNvbnN0IGFwcERlZmluaXRpb24gPSBhd2FpdCBkYXRhc3RvcmUubG9hZEpzb24oYXBwRGVmaW5pdGlvbkZpbGUpO1xuICAgIGFwcERlZmluaXRpb24uYWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgYXBwRGVmaW5pdGlvbi50cmlnZ2VycyA9IHRyaWdnZXJzO1xuXG4gICAgY29uc3QgYWN0aW9uVmFsaWRFcnJzID0gbWFwKGUgPT4gZS5lcnJvcikodmFsaWRhdGVBY3Rpb25zKGFjdGlvbnMpKTtcblxuICAgIGlmIChhY3Rpb25WYWxpZEVycnMubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFcnJvcihgQWN0aW9ucyBhcmUgaW52YWxpZDogJHtqb2luKGFjdGlvblZhbGlkRXJycywgJywgJyl9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJpZ2dlclZhbGlkRXJycyA9IG1hcChlID0+IGUuZXJyb3IpKHZhbGlkYXRlVHJpZ2dlcnModHJpZ2dlcnMsIGFjdGlvbnMpKTtcblxuICAgIGlmICh0cmlnZ2VyVmFsaWRFcnJzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoYFRyaWdnZXJzIGFyZSBpbnZhbGlkOiAke2pvaW4odHJpZ2dlclZhbGlkRXJycywgJywgJyl9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgZGF0YXN0b3JlLnVwZGF0ZUpzb24oYXBwRGVmaW5pdGlvbkZpbGUsIGFwcERlZmluaXRpb24pO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoJ0Nhbm5vdCBzYXZlIGFjdGlvbnM6IEFwcGxpY2F0aW9uIGRlZmluaXRpb24gZG9lcyBub3QgZXhpc3QnKTtcbiAgfVxufTtcbiIsIlxuZXhwb3J0IGNvbnN0IGdldEJlaGF2aW91clNvdXJjZXMgPSBhc3luYyAoZGF0YXN0b3JlKSA9PiB7XG4gICAgYXdhaXQgZGF0YXN0b3JlLmxvYWRGaWxlKCcvLmNvbmZpZy9iZWhhdmlvdXJTb3VyY2VzLmpzJyk7XG59O1xuIiwiaW1wb3J0IHtcbiAgZ2V0TmV3Um9vdExldmVsLFxuICBnZXROZXdSZWNvcmRUZW1wbGF0ZSwgZ2V0TmV3SW5kZXhUZW1wbGF0ZSxcbiAgY3JlYXRlTm9kZUVycm9ycywgY29uc3RydWN0SGllcmFyY2h5LFxuICBnZXROZXdBZ2dyZWdhdGVHcm91cFRlbXBsYXRlLCBnZXROZXdTaW5nbGVSZWNvcmRUZW1wbGF0ZSxcbiAgZ2V0TmV3QWdncmVnYXRlVGVtcGxhdGUsIGNvbnN0cnVjdE5vZGUsXG59XG4gIGZyb20gJy4vY3JlYXRlTm9kZXMnO1xuaW1wb3J0IHtcbiAgZ2V0TmV3RmllbGQsIHZhbGlkYXRlRmllbGQsXG4gIGFkZEZpZWxkLCBmaWVsZEVycm9ycyxcbn0gZnJvbSAnLi9maWVsZHMnO1xuaW1wb3J0IHtcbiAgZ2V0TmV3UmVjb3JkVmFsaWRhdGlvblJ1bGUsIGNvbW1vblJlY29yZFZhbGlkYXRpb25SdWxlcyxcbiAgYWRkUmVjb3JkVmFsaWRhdGlvblJ1bGUsXG59IGZyb20gJy4vcmVjb3JkVmFsaWRhdGlvblJ1bGVzJztcbmltcG9ydCB7IGNyZWF0ZUFjdGlvbiwgY3JlYXRlVHJpZ2dlciB9IGZyb20gJy4vY3JlYXRlQWN0aW9ucyc7XG5pbXBvcnQge1xuICB2YWxpZGF0ZVRyaWdnZXJzLCB2YWxpZGF0ZVRyaWdnZXIsIHZhbGlkYXRlTm9kZSxcbiAgdmFsaWRhdGVBY3Rpb25zLCB2YWxpZGF0ZUFsbCxcbn0gZnJvbSAnLi92YWxpZGF0ZSc7XG5pbXBvcnQgeyBnZXRBcHBsaWNhdGlvbkRlZmluaXRpb24gfSBmcm9tICcuL2dldEFwcGxpY2F0aW9uRGVmaW5pdGlvbic7XG5pbXBvcnQgeyBzYXZlQXBwbGljYXRpb25IaWVyYXJjaHkgfSBmcm9tICcuL3NhdmVBcHBsaWNhdGlvbkhpZXJhcmNoeSc7XG5pbXBvcnQgeyBzYXZlQWN0aW9uc0FuZFRyaWdnZXJzIH0gZnJvbSAnLi9zYXZlQWN0aW9uc0FuZFRyaWdnZXJzJztcbmltcG9ydCB7IGFsbCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdldEJlaGF2aW91clNvdXJjZXMgfSBmcm9tIFwiLi9nZXRCZWhhdmlvdXJTb3VyY2VzXCI7XG5cbmNvbnN0IGFwaSA9IGFwcCA9PiAoe1xuXG4gIGdldEFwcGxpY2F0aW9uRGVmaW5pdGlvbjogZ2V0QXBwbGljYXRpb25EZWZpbml0aW9uKGFwcC5kYXRhc3RvcmUpLFxuICBzYXZlQXBwbGljYXRpb25IaWVyYXJjaHk6IHNhdmVBcHBsaWNhdGlvbkhpZXJhcmNoeShhcHApLFxuICBzYXZlQWN0aW9uc0FuZFRyaWdnZXJzOiBzYXZlQWN0aW9uc0FuZFRyaWdnZXJzKGFwcCksXG4gIGdldEJlaGF2aW91clNvdXJjZXM6ICgpID0+IGdldEJlaGF2aW91clNvdXJjZXMoYXBwLmRhdGFzdG9yZSksXG4gIGdldE5ld1Jvb3RMZXZlbCxcbiAgY29uc3RydWN0Tm9kZSxcbiAgZ2V0TmV3SW5kZXhUZW1wbGF0ZSxcbiAgZ2V0TmV3UmVjb3JkVGVtcGxhdGUsXG4gIGdldE5ld0ZpZWxkLFxuICB2YWxpZGF0ZUZpZWxkLFxuICBhZGRGaWVsZCxcbiAgZmllbGRFcnJvcnMsXG4gIGdldE5ld1JlY29yZFZhbGlkYXRpb25SdWxlLFxuICBjb21tb25SZWNvcmRWYWxpZGF0aW9uUnVsZXMsXG4gIGFkZFJlY29yZFZhbGlkYXRpb25SdWxlLFxuICBjcmVhdGVBY3Rpb24sXG4gIGNyZWF0ZVRyaWdnZXIsXG4gIHZhbGlkYXRlQWN0aW9ucyxcbiAgdmFsaWRhdGVUcmlnZ2VyLFxuICBnZXROZXdBZ2dyZWdhdGVHcm91cFRlbXBsYXRlLFxuICBnZXROZXdBZ2dyZWdhdGVUZW1wbGF0ZSxcbiAgY29uc3RydWN0SGllcmFyY2h5LFxuICBnZXROZXdTaW5nbGVSZWNvcmRUZW1wbGF0ZSxcbiAgYWxsVHlwZXM6IGFsbCxcbiAgdmFsaWRhdGVOb2RlLFxuICB2YWxpZGF0ZUFsbCxcbiAgdmFsaWRhdGVUcmlnZ2Vycyxcbn0pO1xuXG5cbmV4cG9ydCBjb25zdCBnZXRUZW1wbGF0ZUFwaSA9IGFwcCA9PiBhcGkoYXBwKTtcblxuZXhwb3J0IGNvbnN0IGVycm9ycyA9IGNyZWF0ZU5vZGVFcnJvcnM7XG5cbmV4cG9ydCBkZWZhdWx0IGdldFRlbXBsYXRlQXBpO1xuIiwiaW1wb3J0IHsgbWFwIH0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7XG4gIFVTRVJTX0xJU1RfRklMRSxcbiAgc3RyaXBVc2VyT2ZTZW5zaXRpdmVTdHVmZixcbn0gZnJvbSAnLi9hdXRoQ29tbW9uJztcbmltcG9ydCB7ICQsIGFwaVdyYXBwZXIsIGV2ZW50cyB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBwZXJtaXNzaW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9ucyc7XG5cbmV4cG9ydCBjb25zdCBnZXRVc2VycyA9IGFwcCA9PiBhc3luYyAoKSA9PiBhcGlXcmFwcGVyKFxuICBhcHAsXG4gIGV2ZW50cy5hdXRoQXBpLmdldFVzZXJzLFxuICBwZXJtaXNzaW9uLmxpc3RVc2Vycy5pc0F1dGhvcml6ZWQsXG4gIHt9LFxuICBfZ2V0VXNlcnMsIGFwcCxcbik7XG5cbmV4cG9ydCBjb25zdCBfZ2V0VXNlcnMgPSBhc3luYyBhcHAgPT4gJChhd2FpdCBhcHAuZGF0YXN0b3JlLmxvYWRKc29uKFVTRVJTX0xJU1RfRklMRSksIFtcbiAgbWFwKHN0cmlwVXNlck9mU2Vuc2l0aXZlU3R1ZmYpLFxuXSk7XG4iLCJpbXBvcnQgeyBBQ0NFU1NfTEVWRUxTX0ZJTEUgfSBmcm9tICcuL2F1dGhDb21tb24nO1xuaW1wb3J0IHsgYXBpV3JhcHBlciwgZXZlbnRzIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IHBlcm1pc3Npb24gfSBmcm9tICcuL3Blcm1pc3Npb25zJztcblxuZXhwb3J0IGNvbnN0IGxvYWRBY2Nlc3NMZXZlbHMgPSBhcHAgPT4gYXN5bmMgKCkgPT4gYXBpV3JhcHBlcihcbiAgYXBwLFxuICBldmVudHMuYXV0aEFwaS5sb2FkQWNjZXNzTGV2ZWxzLFxuICBwZXJtaXNzaW9uLmxpc3RBY2Nlc3NMZXZlbHMuaXNBdXRob3JpemVkLFxuICB7fSxcbiAgX2xvYWRBY2Nlc3NMZXZlbHMsIGFwcCxcbik7XG5cbmV4cG9ydCBjb25zdCBfbG9hZEFjY2Vzc0xldmVscyA9IGFzeW5jIGFwcCA9PiBhd2FpdCBhcHAuZGF0YXN0b3JlLmxvYWRKc29uKEFDQ0VTU19MRVZFTFNfRklMRSk7XG4iLCJpbXBvcnQge1xuICBmaW5kLCBmaWx0ZXIsIHNvbWUsXG4gIG1hcCwgZmxhdHRlbixcbn0gZnJvbSAnbG9kYXNoL2ZwJztcbmltcG9ydCB7IGdlbmVyYXRlIH0gZnJvbSAnc2hvcnRpZCc7XG5pbXBvcnQgeyBfZ2V0VXNlcnMgfSBmcm9tICcuL2dldFVzZXJzJztcbmltcG9ydCB7XG4gIGdldFVzZXJCeU5hbWUsIHVzZXJBdXRoRmlsZSxcbiAgcGFyc2VUZW1wb3JhcnlDb2RlLFxufSBmcm9tICcuL2F1dGhDb21tb24nO1xuaW1wb3J0IHsgX2xvYWRBY2Nlc3NMZXZlbHMgfSBmcm9tICcuL2xvYWRBY2Nlc3NMZXZlbHMnO1xuaW1wb3J0IHtcbiAgaXNOb3RoaW5nT3JFbXB0eSwgJCwgYXBpV3JhcHBlciwgZXZlbnRzLFxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgYWx3YXlzQXV0aG9yaXplZCB9IGZyb20gJy4vcGVybWlzc2lvbnMnO1xuXG5jb25zdCBkdW1teUhhc2ggPSAnJGFyZ29uMmkkdj0xOSRtPTQwOTYsdD0zLHA9MSRVWlJvNDA5VVlCR2pISlMzQ1Y2VXh3JHJVODRxVXFQZU9SRnpLWW1ZWTBjZUJMRGFQTytKV1NINFBmTmlLWGZJS2snO1xuXG5leHBvcnQgY29uc3QgYXV0aGVudGljYXRlID0gYXBwID0+IGFzeW5jICh1c2VybmFtZSwgcGFzc3dvcmQpID0+IGFwaVdyYXBwZXIoXG4gIGFwcCxcbiAgZXZlbnRzLmF1dGhBcGkuYXV0aGVudGljYXRlLFxuICBhbHdheXNBdXRob3JpemVkLFxuICB7IHVzZXJuYW1lLCBwYXNzd29yZCB9LFxuICBfYXV0aGVudGljYXRlLCBhcHAsIHVzZXJuYW1lLCBwYXNzd29yZCxcbik7XG5cbmV4cG9ydCBjb25zdCBfYXV0aGVudGljYXRlID0gYXN5bmMgKGFwcCwgdXNlcm5hbWUsIHBhc3N3b3JkKSA9PiB7XG4gIGlmIChpc05vdGhpbmdPckVtcHR5KHVzZXJuYW1lKSB8fCBpc05vdGhpbmdPckVtcHR5KHBhc3N3b3JkKSkgeyByZXR1cm4gbnVsbDsgfVxuXG4gIGNvbnN0IGFsbFVzZXJzID0gYXdhaXQgX2dldFVzZXJzKGFwcCk7XG4gIGxldCB1c2VyID0gZ2V0VXNlckJ5TmFtZShcbiAgICBhbGxVc2VycyxcbiAgICB1c2VybmFtZSxcbiAgKTtcblxuICBjb25zdCBub3RBVXNlciA9ICdub3QtYS11c2VyJztcbiAgLy8gY29udGludWUgd2l0aCBub24tdXNlciAtIHNvIHRpbWUgdG8gdmVyaWZ5IHJlbWFpbnMgY29uc2lzdGVudFxuICAvLyB3aXRoIHZlcmlmaWNhdGlvbiBvZiBhIHZhbGlkIHVzZXJcbiAgaWYgKCF1c2VyIHx8ICF1c2VyLmVuYWJsZWQpIHsgdXNlciA9IG5vdEFVc2VyOyB9XG5cbiAgbGV0IHVzZXJBdXRoO1xuICB0cnkge1xuICAgIHVzZXJBdXRoID0gYXdhaXQgYXBwLmRhdGFzdG9yZS5sb2FkSnNvbihcbiAgICAgIHVzZXJBdXRoRmlsZSh1c2VybmFtZSksXG4gICAgKTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHVzZXJBdXRoID0geyBhY2Nlc3NMZXZlbHM6IFtdLCBwYXNzd29yZEhhc2g6IGR1bW15SGFzaCB9O1xuICB9XG5cbiAgY29uc3QgcGVybWlzc2lvbnMgPSBhd2FpdCBidWlsZFVzZXJQZXJtaXNzaW9ucyhhcHAsIHVzZXIuYWNjZXNzTGV2ZWxzKTtcblxuICBjb25zdCB2ZXJpZmllZCA9IGF3YWl0IGFwcC5jcnlwdG8udmVyaWZ5KFxuICAgIHVzZXJBdXRoLnBhc3N3b3JkSGFzaCxcbiAgICBwYXNzd29yZCxcbiAgKTtcblxuICBpZiAodXNlciA9PT0gbm90QVVzZXIpIHsgcmV0dXJuIG51bGw7IH1cblxuICByZXR1cm4gdmVyaWZpZWRcbiAgICA/IHtcbiAgICAgIC4uLnVzZXIsIHBlcm1pc3Npb25zLCB0ZW1wOiBmYWxzZSwgaXNVc2VyOiB0cnVlLFxuICAgIH1cbiAgICA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgYXV0aGVudGljYXRlVGVtcG9yYXJ5QWNjZXNzID0gYXBwID0+IGFzeW5jICh0ZW1wQWNjZXNzQ29kZSkgPT4ge1xuICBpZiAoaXNOb3RoaW5nT3JFbXB0eSh0ZW1wQWNjZXNzQ29kZSkpIHsgcmV0dXJuIG51bGw7IH1cblxuICBjb25zdCB0ZW1wID0gcGFyc2VUZW1wb3JhcnlDb2RlKHRlbXBBY2Nlc3NDb2RlKTtcbiAgbGV0IHVzZXIgPSAkKGF3YWl0IF9nZXRVc2VycyhhcHApLCBbXG4gICAgZmluZCh1ID0+IHUudGVtcG9yYXJ5QWNjZXNzSWQgPT09IHRlbXAuaWQpLFxuICBdKTtcblxuICBjb25zdCBub3RBVXNlciA9ICdub3QtYS11c2VyJztcbiAgaWYgKCF1c2VyIHx8ICF1c2VyLmVuYWJsZWQpIHsgdXNlciA9IG5vdEFVc2VyOyB9XG5cbiAgbGV0IHVzZXJBdXRoO1xuICB0cnkge1xuICAgIHVzZXJBdXRoID0gYXdhaXQgYXBwLmRhdGFzdG9yZS5sb2FkSnNvbihcbiAgICAgIHVzZXJBdXRoRmlsZSh1c2VyLm5hbWUpLFxuICAgICk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB1c2VyQXV0aCA9IHtcbiAgICAgIHRlbXBvcmFyeUFjY2Vzc0hhc2g6IGR1bW15SGFzaCxcbiAgICAgIHRlbXBvcmFyeUFjY2Vzc0V4cGlyeUVwb2NoOiAoYXdhaXQgYXBwLmdldEVwb2NoVGltZSgpICsgMTAwMDApLFxuICAgIH07XG4gIH1cblxuICBpZiAodXNlckF1dGgudGVtcG9yYXJ5QWNjZXNzRXhwaXJ5RXBvY2ggPCBhd2FpdCBhcHAuZ2V0RXBvY2hUaW1lKCkpIHsgdXNlciA9IG5vdEFVc2VyOyB9XG5cbiAgY29uc3QgdGVtcENvZGUgPSAhdGVtcC5jb2RlID8gZ2VuZXJhdGUoKSA6IHRlbXAuY29kZTtcbiAgY29uc3QgdmVyaWZpZWQgPSBhd2FpdCBhcHAuY3J5cHRvLnZlcmlmeShcbiAgICB1c2VyQXV0aC50ZW1wb3JhcnlBY2Nlc3NIYXNoLFxuICAgIHRlbXBDb2RlLFxuICApO1xuXG4gIGlmICh1c2VyID09PSBub3RBVXNlcikgeyByZXR1cm4gbnVsbDsgfVxuXG4gIHJldHVybiB2ZXJpZmllZFxuICAgID8ge1xuICAgICAgLi4udXNlcixcbiAgICAgIHBlcm1pc3Npb25zOiBbXSxcbiAgICAgIHRlbXA6IHRydWUsXG4gICAgICBpc1VzZXI6IHRydWUsXG4gICAgfVxuICAgIDogbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZFVzZXJQZXJtaXNzaW9ucyA9IGFzeW5jIChhcHAsIHVzZXJBY2Nlc3NMZXZlbHMpID0+IHtcbiAgY29uc3QgYWxsQWNjZXNzTGV2ZWxzID0gYXdhaXQgX2xvYWRBY2Nlc3NMZXZlbHMoYXBwKTtcblxuICByZXR1cm4gJChhbGxBY2Nlc3NMZXZlbHMubGV2ZWxzLCBbXG4gICAgZmlsdGVyKGwgPT4gc29tZSh1YSA9PiBsLm5hbWUgPT09IHVhKSh1c2VyQWNjZXNzTGV2ZWxzKSksXG4gICAgbWFwKGwgPT4gbC5wZXJtaXNzaW9ucyksXG4gICAgZmxhdHRlbixcbiAgXSk7XG59O1xuIiwiaW1wb3J0IHsgZ2VuZXJhdGUgfSBmcm9tICdzaG9ydGlkJztcbmltcG9ydCB7XG4gIHRlbXBDb2RlRXhwaXJ5TGVuZ3RoLCBVU0VSU19MT0NLX0ZJTEUsXG4gIFVTRVJTX0xJU1RfRklMRSwgdXNlckF1dGhGaWxlLFxuICBnZXRVc2VyQnlOYW1lLFxufSBmcm9tICcuL2F1dGhDb21tb24nO1xuaW1wb3J0IHtcbiAgZ2V0TG9jaywgaXNOb2xvY2ssXG4gIHJlbGVhc2VMb2NrLFxufSBmcm9tICcuLi9jb21tb24vbG9jayc7XG5pbXBvcnQgeyBhcGlXcmFwcGVyLCBldmVudHMgfSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgYWx3YXlzQXV0aG9yaXplZCB9IGZyb20gJy4vcGVybWlzc2lvbnMnO1xuXG5leHBvcnQgY29uc3QgY3JlYXRlVGVtcG9yYXJ5QWNjZXNzID0gYXBwID0+IGFzeW5jIHVzZXJOYW1lID0+IGFwaVdyYXBwZXIoXG4gIGFwcCxcbiAgZXZlbnRzLmF1dGhBcGkuY3JlYXRlVGVtcG9yYXJ5QWNjZXNzLFxuICBhbHdheXNBdXRob3JpemVkLFxuICB7IHVzZXJOYW1lIH0sXG4gIF9jcmVhdGVUZW1wb3JhcnlBY2Nlc3MsIGFwcCwgdXNlck5hbWUsXG4pO1xuXG5leHBvcnQgY29uc3QgX2NyZWF0ZVRlbXBvcmFyeUFjY2VzcyA9IGFzeW5jIChhcHAsIHVzZXJOYW1lKSA9PiB7XG4gIGNvbnN0IHRlbXBDb2RlID0gYXdhaXQgZ2V0VGVtcG9yYXJ5Q29kZShhcHApO1xuXG4gIGNvbnN0IGxvY2sgPSBhd2FpdCBnZXRMb2NrKFxuICAgIGFwcCwgVVNFUlNfTE9DS19GSUxFLCAxMDAwLCAyLFxuICApO1xuXG4gIGlmIChpc05vbG9jayhsb2NrKSkgeyB0aHJvdyBuZXcgRXJyb3IoJ1VuYWJsZSB0byBjcmVhdGUgdGVtcG9yYXJ5IGFjY2VzcywgY291bGQgbm90IGdldCBsb2NrIC0gdHJ5IGFnYWluJyk7IH1cblxuICB0cnkge1xuICAgIGNvbnN0IHVzZXJzID0gYXdhaXQgYXBwLmRhdGFzdG9yZS5sb2FkSnNvbihVU0VSU19MSVNUX0ZJTEUpO1xuXG4gICAgY29uc3QgdXNlciA9IGdldFVzZXJCeU5hbWUodXNlcnMsIHVzZXJOYW1lKTtcbiAgICB1c2VyLnRlbXBvcmFyeUFjY2Vzc0lkID0gdGVtcENvZGUudGVtcG9yYXJ5QWNjZXNzSWQ7XG5cbiAgICBhd2FpdCBhcHAuZGF0YXN0b3JlLnVwZGF0ZUpzb24oXG4gICAgICBVU0VSU19MSVNUX0ZJTEUsXG4gICAgICB1c2VycyxcbiAgICApO1xuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlbGVhc2VMb2NrKGFwcCwgbG9jayk7XG4gIH1cblxuICBjb25zdCB1c2VyQXV0aCA9IGF3YWl0IGFwcC5kYXRhc3RvcmUubG9hZEpzb24oXG4gICAgdXNlckF1dGhGaWxlKHVzZXJOYW1lKSxcbiAgKTtcbiAgdXNlckF1dGgudGVtcG9yYXJ5QWNjZXNzSGFzaCA9IHRlbXBDb2RlLnRlbXBvcmFyeUFjY2Vzc0hhc2g7XG5cbiAgdXNlckF1dGgudGVtcG9yYXJ5QWNjZXNzRXhwaXJ5RXBvY2ggPSB0ZW1wQ29kZS50ZW1wb3JhcnlBY2Nlc3NFeHBpcnlFcG9jaDtcblxuICBhd2FpdCBhcHAuZGF0YXN0b3JlLnVwZGF0ZUpzb24oXG4gICAgdXNlckF1dGhGaWxlKHVzZXJOYW1lKSxcbiAgICB1c2VyQXV0aCxcbiAgKTtcblxuICByZXR1cm4gdGVtcENvZGUudGVtcENvZGU7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0VGVtcG9yYXJ5Q29kZSA9IGFzeW5jIChhcHApID0+IHtcbiAgY29uc3QgdGVtcENvZGUgPSBnZW5lcmF0ZSgpXG4gICAgICAgICsgZ2VuZXJhdGUoKVxuICAgICAgICArIGdlbmVyYXRlKClcbiAgICAgICAgKyBnZW5lcmF0ZSgpO1xuXG4gIGNvbnN0IHRlbXBJZCA9IGdlbmVyYXRlKCk7XG5cbiAgcmV0dXJuIHtcbiAgICB0ZW1wb3JhcnlBY2Nlc3NIYXNoOiBhd2FpdCBhcHAuY3J5cHRvLmhhc2goXG4gICAgICB0ZW1wQ29kZSxcbiAgICApLFxuICAgIHRlbXBvcmFyeUFjY2Vzc0V4cGlyeUVwb2NoOlxuICAgICAgICAgICAgKGF3YWl0IGFwcC5nZXRFcG9jaFRpbWUoKSkgKyB0ZW1wQ29kZUV4cGlyeUxlbmd0aCxcbiAgICB0ZW1wQ29kZTogYHRtcDoke3RlbXBJZH06JHt0ZW1wQ29kZX1gLFxuICAgIHRlbXBvcmFyeUFjY2Vzc0lkOiB0ZW1wSWQsXG4gIH07XG59O1xuXG5leHBvcnQgY29uc3QgbG9va3NMaWtlVGVtcG9yYXJ5Q29kZSA9IGNvZGUgPT4gY29kZS5zdGFydHNXaXRoKCd0bXA6Jyk7XG4iLCJpbXBvcnQge1xuICBtYXAsIHVuaXFXaXRoLFxuICBmbGF0dGVuLCBmaWx0ZXIsXG59IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyBhcHBseVJ1bGVTZXQsIG1ha2VydWxlIH0gZnJvbSAnLi4vY29tbW9uL3ZhbGlkYXRpb25Db21tb24nO1xuaW1wb3J0IHtcbiAgJCwgaW5zZW5zaXRpdmVFcXVhbHMsIGFwaVdyYXBwZXIsIGV2ZW50cyxcbiAgaXNOb25FbXB0eVN0cmluZywgYWxsLFxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHsgYWx3YXlzQXV0aG9yaXplZCB9IGZyb20gJy4vcGVybWlzc2lvbnMnO1xuXG5jb25zdCB1c2VyUnVsZXMgPSBhbGxVc2VycyA9PiBbXG4gIG1ha2VydWxlKCduYW1lJywgJ3VzZXJuYW1lIG11c3QgYmUgc2V0JyxcbiAgICB1ID0+IGlzTm9uRW1wdHlTdHJpbmcodS5uYW1lKSksXG4gIG1ha2VydWxlKCdhY2Nlc3NMZXZlbHMnLCAndXNlciBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGFjY2VzcyBsZXZlbCcsXG4gICAgdSA9PiB1LmFjY2Vzc0xldmVscy5sZW5ndGggPiAwKSxcbiAgbWFrZXJ1bGUoJ25hbWUnLCAndXNlcm5hbWUgbXVzdCBiZSB1bmlxdWUnLFxuICAgIHUgPT4gZmlsdGVyKHUyID0+IGluc2Vuc2l0aXZlRXF1YWxzKHUyLm5hbWUsIHUubmFtZSkpKGFsbFVzZXJzKS5sZW5ndGggPT09IDEpLFxuICBtYWtlcnVsZSgnYWNjZXNzTGV2ZWxzJywgJ2FjY2VzcyBsZXZlbHMgbXVzdCBvbmx5IGNvbnRhaW4gc3RpbmdzJyxcbiAgICB1ID0+IGFsbChpc05vbkVtcHR5U3RyaW5nKSh1LmFjY2Vzc0xldmVscykpLFxuXTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlVXNlciA9ICgpID0+IChhbGx1c2VycywgdXNlcikgPT4gYXBwbHlSdWxlU2V0KHVzZXJSdWxlcyhhbGx1c2VycykpKHVzZXIpO1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVVc2VycyA9IGFwcCA9PiBhbGxVc2VycyA9PiBhcGlXcmFwcGVyKFxuICBhcHAsXG4gIGV2ZW50cy5hdXRoQXBpLnZhbGlkYXRlVXNlcnMsXG4gIGFsd2F5c0F1dGhvcml6ZWQsXG4gIHsgYWxsVXNlcnMgfSxcbiAgX3ZhbGlkYXRlVXNlcnMsIGFwcCwgYWxsVXNlcnMsXG4pO1xuXG5leHBvcnQgY29uc3QgX3ZhbGlkYXRlVXNlcnMgPSAoYXBwLCBhbGxVc2VycykgPT4gJChhbGxVc2VycywgW1xuICBtYXAobCA9PiB2YWxpZGF0ZVVzZXIoYXBwKShhbGxVc2VycywgbCkpLFxuICBmbGF0dGVuLFxuICB1bmlxV2l0aCgoeCwgeSkgPT4geC5maWVsZCA9PT0geS5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgeC5pdGVtID09PSB5Lml0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHguZXJyb3IgPT09IHkuZXJyb3IpLFxuXSk7XG4iLCJpbXBvcnQgeyBhcGlXcmFwcGVyU3luYywgZXZlbnRzIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IHBlcm1pc3Npb24gfSBmcm9tICcuL3Blcm1pc3Npb25zJztcblxuZXhwb3J0IGNvbnN0IGdldE5ld1VzZXIgPSBhcHAgPT4gKCkgPT4gYXBpV3JhcHBlclN5bmMoXG4gIGFwcCxcbiAgZXZlbnRzLmF1dGhBcGkuZ2V0TmV3VXNlcixcbiAgcGVybWlzc2lvbi5jcmVhdGVVc2VyLmlzQXV0aG9yaXplZCxcbiAge30sXG4gIF9nZXROZXdVc2VyLCBhcHAsXG4pO1xuXG5leHBvcnQgY29uc3QgX2dldE5ld1VzZXIgPSAoKSA9PiAoe1xuICBuYW1lOiAnJyxcbiAgYWNjZXNzTGV2ZWxzOiBbXSxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgdGVtcG9yYXJ5QWNjZXNzSWQ6ICcnLFxufSk7XG5cbmV4cG9ydCBjb25zdCBnZXROZXdVc2VyQXV0aCA9IGFwcCA9PiAoKSA9PiBhcGlXcmFwcGVyU3luYyhcbiAgYXBwLFxuICBldmVudHMuYXV0aEFwaS5nZXROZXdVc2VyQXV0aCxcbiAgcGVybWlzc2lvbi5jcmVhdGVVc2VyLmlzQXV0aG9yaXplZCxcbiAge30sXG4gIF9nZXROZXdVc2VyQXV0aCwgYXBwLFxuKTtcblxuZXhwb3J0IGNvbnN0IF9nZXROZXdVc2VyQXV0aCA9ICgpID0+ICh7XG4gIHBhc3N3b3JkSGFzaDogJycsXG4gIHRlbXBvcmFyeUFjY2Vzc0hhc2g6ICcnLFxuICB0ZW1wb3JhcnlBY2Nlc3NFeHBpcnlFcG9jaDogMCxcbn0pO1xuIiwiaW1wb3J0IHsgZmluZCB9IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyB1c2VyQXV0aEZpbGUsIHBhcnNlVGVtcG9yYXJ5Q29kZSB9IGZyb20gJy4vYXV0aENvbW1vbic7XG5pbXBvcnQge1xuICBpc1NvbWV0aGluZywgJCwgYXBpV3JhcHBlciwgYXBpV3JhcHBlclN5bmMsIGV2ZW50cyxcbn0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IF9nZXRVc2VycyB9IGZyb20gJy4vZ2V0VXNlcnMnO1xuaW1wb3J0IHsgYWx3YXlzQXV0aG9yaXplZCB9IGZyb20gJy4vcGVybWlzc2lvbnMnO1xuXG5leHBvcnQgY29uc3QgaXNWYWxpZFBhc3N3b3JkID0gYXBwID0+IHBhc3N3b3JkID0+IGFwaVdyYXBwZXJTeW5jKFxuICBhcHAsXG4gIGV2ZW50cy5hdXRoQXBpLmlzVmFsaWRQYXNzd29yZCxcbiAgYWx3YXlzQXV0aG9yaXplZCxcbiAgeyBwYXNzd29yZCB9LFxuICBfaXNWYWxpZFBhc3N3b3JkLCBhcHAsIHBhc3N3b3JkLFxuKTtcblxuZXhwb3J0IGNvbnN0IF9pc1ZhbGlkUGFzc3dvcmQgPSAoYXBwLCBwYXNzd29yZCkgPT4gc2NvcmVQYXNzd29yZChwYXNzd29yZCkuc2NvcmUgPiAzMDtcblxuZXhwb3J0IGNvbnN0IGNoYW5nZU15UGFzc3dvcmQgPSBhcHAgPT4gYXN5bmMgKGN1cnJlbnRQdywgbmV3cGFzc3dvcmQpID0+IGFwaVdyYXBwZXIoXG4gIGFwcCxcbiAgZXZlbnRzLmF1dGhBcGkuY2hhbmdlTXlQYXNzd29yZCxcbiAgYWx3YXlzQXV0aG9yaXplZCxcbiAgeyBjdXJyZW50UHcsIG5ld3Bhc3N3b3JkIH0sXG4gIF9jaGFuZ2VNeVBhc3N3b3JkLCBhcHAsIGN1cnJlbnRQdywgbmV3cGFzc3dvcmQsXG4pO1xuXG5leHBvcnQgY29uc3QgX2NoYW5nZU15UGFzc3dvcmQgPSBhc3luYyAoYXBwLCBjdXJyZW50UHcsIG5ld3Bhc3N3b3JkKSA9PiB7XG4gIGNvbnN0IGV4aXN0aW5nQXV0aCA9IGF3YWl0IGFwcC5kYXRhc3RvcmUubG9hZEpzb24oXG4gICAgdXNlckF1dGhGaWxlKGFwcC51c2VyLm5hbWUpLFxuICApO1xuXG4gIGlmIChpc1NvbWV0aGluZyhleGlzdGluZ0F1dGgucGFzc3dvcmRIYXNoKSkge1xuICAgIGNvbnN0IHZlcmlmaWVkID0gYXdhaXQgYXBwLmNyeXB0by52ZXJpZnkoXG4gICAgICBleGlzdGluZ0F1dGgucGFzc3dvcmRIYXNoLFxuICAgICAgY3VycmVudFB3LFxuICAgICk7XG5cbiAgICBpZiAodmVyaWZpZWQpIHtcbiAgICAgIGF3YWl0IGF3YWl0IGRvU2V0KFxuICAgICAgICBhcHAsIGV4aXN0aW5nQXV0aCxcbiAgICAgICAgYXBwLnVzZXIubmFtZSwgbmV3cGFzc3dvcmQsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufTtcblxuZXhwb3J0IGNvbnN0IHNldFBhc3N3b3JkRnJvbVRlbXBvcmFyeUNvZGUgPSBhcHAgPT4gYXN5bmMgKHRlbXBDb2RlLCBuZXdwYXNzd29yZCkgPT4gYXBpV3JhcHBlcihcbiAgYXBwLFxuICBldmVudHMuYXV0aEFwaS5zZXRQYXNzd29yZEZyb21UZW1wb3JhcnlDb2RlLFxuICBhbHdheXNBdXRob3JpemVkLFxuICB7IHRlbXBDb2RlLCBuZXdwYXNzd29yZCB9LFxuICBfc2V0UGFzc3dvcmRGcm9tVGVtcG9yYXJ5Q29kZSwgYXBwLCB0ZW1wQ29kZSwgbmV3cGFzc3dvcmQsXG4pO1xuXG5cbmV4cG9ydCBjb25zdCBfc2V0UGFzc3dvcmRGcm9tVGVtcG9yYXJ5Q29kZSA9IGFzeW5jIChhcHAsIHRlbXBDb2RlLCBuZXdwYXNzd29yZCkgPT4ge1xuICBjb25zdCBjdXJyZW50VGltZSA9IGF3YWl0IGFwcC5nZXRFcG9jaFRpbWUoKTtcblxuICBjb25zdCB0ZW1wID0gcGFyc2VUZW1wb3JhcnlDb2RlKHRlbXBDb2RlKTtcblxuICBjb25zdCB1c2VyID0gJChhd2FpdCBfZ2V0VXNlcnMoYXBwKSwgW1xuICAgIGZpbmQodSA9PiB1LnRlbXBvcmFyeUFjY2Vzc0lkID09PSB0ZW1wLmlkKSxcbiAgXSk7XG5cbiAgaWYgKCF1c2VyKSB7IHJldHVybiBmYWxzZTsgfVxuXG4gIGNvbnN0IGV4aXN0aW5nQXV0aCA9IGF3YWl0IGFwcC5kYXRhc3RvcmUubG9hZEpzb24oXG4gICAgdXNlckF1dGhGaWxlKHVzZXIubmFtZSksXG4gICk7XG5cbiAgaWYgKGlzU29tZXRoaW5nKGV4aXN0aW5nQXV0aC50ZW1wb3JhcnlBY2Nlc3NIYXNoKVxuICAgICAgICYmIGV4aXN0aW5nQXV0aC50ZW1wb3JhcnlBY2Nlc3NFeHBpcnlFcG9jaCA+IGN1cnJlbnRUaW1lKSB7XG4gICAgY29uc3QgdmVyaWZpZWQgPSBhd2FpdCBhcHAuY3J5cHRvLnZlcmlmeShcbiAgICAgIGV4aXN0aW5nQXV0aC50ZW1wb3JhcnlBY2Nlc3NIYXNoLFxuICAgICAgdGVtcC5jb2RlLFxuICAgICk7XG5cbiAgICBpZiAodmVyaWZpZWQpIHtcbiAgICAgIGF3YWl0IGRvU2V0KFxuICAgICAgICBhcHAsIGV4aXN0aW5nQXV0aCxcbiAgICAgICAgdXNlci5uYW1lLCBuZXdwYXNzd29yZCxcbiAgICAgICk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59O1xuXG5jb25zdCBkb1NldCA9IGFzeW5jIChhcHAsIGF1dGgsIHVzZXJuYW1lLCBuZXdwYXNzd29yZCkgPT4ge1xuICBhdXRoLnRlbXBvcmFyeUFjY2Vzc0hhc2ggPSAnJztcbiAgYXV0aC50ZW1wb3JhcnlBY2Nlc3NFeHBpcnlFcG9jaCA9IDA7XG4gIGF1dGgucGFzc3dvcmRIYXNoID0gYXdhaXQgYXBwLmNyeXB0by5oYXNoKFxuICAgIG5ld3Bhc3N3b3JkLFxuICApO1xuICBhd2FpdCBhcHAuZGF0YXN0b3JlLnVwZGF0ZUpzb24oXG4gICAgdXNlckF1dGhGaWxlKHVzZXJuYW1lKSxcbiAgICBhdXRoLFxuICApO1xufTtcblxuZXhwb3J0IGNvbnN0IHNjb3JlUGFzc3dvcmQgPSBhcHAgPT4gcGFzc3dvcmQgPT4gYXBpV3JhcHBlclN5bmMoXG4gIGFwcCxcbiAgZXZlbnRzLmF1dGhBcGkuc2NvcmVQYXNzd29yZCxcbiAgYWx3YXlzQXV0aG9yaXplZCxcbiAgeyBwYXNzd29yZCB9LFxuICBfc2NvcmVQYXNzd29yZCwgcGFzc3dvcmQsXG4pO1xuXG5leHBvcnQgY29uc3QgX3Njb3JlUGFzc3dvcmQgPSAocGFzc3dvcmQpID0+IHtcbiAgLy8gZnJvbSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy85NDgxNzIvcGFzc3dvcmQtc3RyZW5ndGgtbWV0ZXJcbiAgLy8gdGhhbmsgeW91IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vdXNlcnMvNDY2MTcvdG0tbHZcblxuICBsZXQgc2NvcmUgPSAwO1xuICBpZiAoIXBhc3N3b3JkKSB7IHJldHVybiBzY29yZTsgfVxuXG4gIC8vIGF3YXJkIGV2ZXJ5IHVuaXF1ZSBsZXR0ZXIgdW50aWwgNSByZXBldGl0aW9uc1xuICBjb25zdCBsZXR0ZXJzID0gbmV3IE9iamVjdCgpO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHBhc3N3b3JkLmxlbmd0aDsgaSsrKSB7XG4gICAgbGV0dGVyc1twYXNzd29yZFtpXV0gPSAobGV0dGVyc1twYXNzd29yZFtpXV0gfHwgMCkgKyAxO1xuICAgIHNjb3JlICs9IDUuMCAvIGxldHRlcnNbcGFzc3dvcmRbaV1dO1xuICB9XG5cbiAgLy8gYm9udXMgcG9pbnRzIGZvciBtaXhpbmcgaXQgdXBcbiAgY29uc3QgdmFyaWF0aW9ucyA9IHtcbiAgICBkaWdpdHM6IC9cXGQvLnRlc3QocGFzc3dvcmQpLFxuICAgIGxvd2VyOiAvW2Etel0vLnRlc3QocGFzc3dvcmQpLFxuICAgIHVwcGVyOiAvW0EtWl0vLnRlc3QocGFzc3dvcmQpLFxuICAgIG5vbldvcmRzOiAvXFxXLy50ZXN0KHBhc3N3b3JkKSxcbiAgfTtcblxuICBsZXQgdmFyaWF0aW9uQ291bnQgPSAwO1xuICBmb3IgKGNvbnN0IGNoZWNrIGluIHZhcmlhdGlvbnMpIHtcbiAgICB2YXJpYXRpb25Db3VudCArPSAodmFyaWF0aW9uc1tjaGVja10gPT0gdHJ1ZSkgPyAxIDogMDtcbiAgfVxuICBzY29yZSArPSAodmFyaWF0aW9uQ291bnQgLSAxKSAqIDEwO1xuXG4gIGNvbnN0IHN0cmVuZ3RoVGV4dCA9IHNjb3JlID4gODBcbiAgICA/ICdzdHJvbmcnXG4gICAgOiBzY29yZSA+IDYwXG4gICAgICA/ICdnb29kJ1xuICAgICAgOiBzY29yZSA+PSAzMFxuICAgICAgICA/ICd3ZWFrJ1xuICAgICAgICA6ICd2ZXJ5IHdlYWsnO1xuXG4gIHJldHVybiB7XG4gICAgc2NvcmU6IHBhcnNlSW50KHNjb3JlKSxcbiAgICBzdHJlbmd0aFRleHQsXG4gIH07XG59O1xuIiwiaW1wb3J0IHsgam9pbiwgc29tZSB9IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyB2YWxpZGF0ZVVzZXIgfSBmcm9tICcuL3ZhbGlkYXRlVXNlcic7XG5pbXBvcnQgeyBnZXROZXdVc2VyQXV0aCB9IGZyb20gJy4vZ2V0TmV3VXNlcic7XG5pbXBvcnQge1xuICBnZXRMb2NrLCBpc05vbG9jaywgcmVsZWFzZUxvY2ssIGFwaVdyYXBwZXIsIGV2ZW50cyxcbiAgaW5zZW5zaXRpdmVFcXVhbHMsIGlzTm9uRW1wdHlTdHJpbmcsXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQge1xuICBVU0VSU19MT0NLX0ZJTEUsIHN0cmlwVXNlck9mU2Vuc2l0aXZlU3R1ZmYsXG4gIFVTRVJTX0xJU1RfRklMRSwgdXNlckF1dGhGaWxlLFxufSBmcm9tICcuL2F1dGhDb21tb24nO1xuaW1wb3J0IHsgZ2V0VGVtcG9yYXJ5Q29kZSB9IGZyb20gJy4vY3JlYXRlVGVtcG9yYXJ5QWNjZXNzJztcbmltcG9ydCB7IGlzVmFsaWRQYXNzd29yZCB9IGZyb20gJy4vc2V0UGFzc3dvcmQnO1xuaW1wb3J0IHsgcGVybWlzc2lvbiB9IGZyb20gJy4vcGVybWlzc2lvbnMnO1xuaW1wb3J0IHsgQmFkUmVxdWVzdEVycm9yIH0gZnJvbSAnLi4vY29tbW9uL2Vycm9ycyc7XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVVc2VyID0gYXBwID0+IGFzeW5jICh1c2VyLCBwYXNzd29yZCA9IG51bGwpID0+IGFwaVdyYXBwZXIoXG4gIGFwcCxcbiAgZXZlbnRzLmF1dGhBcGkuY3JlYXRlVXNlcixcbiAgcGVybWlzc2lvbi5jcmVhdGVVc2VyLmlzQXV0aG9yaXplZCxcbiAgeyB1c2VyLCBwYXNzd29yZCB9LFxuICBfY3JlYXRlVXNlciwgYXBwLCB1c2VyLCBwYXNzd29yZCxcbik7XG5cbmV4cG9ydCBjb25zdCBfY3JlYXRlVXNlciA9IGFzeW5jIChhcHAsIHVzZXIsIHBhc3N3b3JkID0gbnVsbCkgPT4ge1xuICBjb25zdCBsb2NrID0gYXdhaXQgZ2V0TG9jayhcbiAgICBhcHAsIFVTRVJTX0xPQ0tfRklMRSwgMTAwMCwgMixcbiAgKTtcblxuICBpZiAoaXNOb2xvY2sobG9jaykpIHsgdGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY3JlYXRlIHVzZXIsIGNvdWxkIG5vdCBnZXQgbG9jayAtIHRyeSBhZ2FpbicpOyB9XG5cbiAgY29uc3QgdXNlcnMgPSBhd2FpdCBhcHAuZGF0YXN0b3JlLmxvYWRKc29uKFVTRVJTX0xJU1RfRklMRSk7XG5cbiAgY29uc3QgdXNlckVycm9ycyA9IHZhbGlkYXRlVXNlcihhcHApKFsuLi51c2VycywgdXNlcl0sIHVzZXIpO1xuICBpZiAodXNlckVycm9ycy5sZW5ndGggPiAwKSB7IHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoYFVzZXIgaXMgaW52YWxpZC4gJHtqb2luKCc7ICcpKHVzZXJFcnJvcnMpfWApOyB9XG5cbiAgY29uc3QgeyBhdXRoLCB0ZW1wQ29kZSwgdGVtcG9yYXJ5QWNjZXNzSWQgfSA9IGF3YWl0IGdldEFjY2VzcyhcbiAgICBhcHAsIHBhc3N3b3JkLFxuICApO1xuICB1c2VyLnRlbXBDb2RlID0gdGVtcENvZGU7XG4gIHVzZXIudGVtcG9yYXJ5QWNjZXNzSWQgPSB0ZW1wb3JhcnlBY2Nlc3NJZDtcblxuICBpZiAoc29tZSh1ID0+IGluc2Vuc2l0aXZlRXF1YWxzKHUubmFtZSwgdXNlci5uYW1lKSkodXNlcnMpKSB7IFxuICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXJyb3IoJ1VzZXIgYWxyZWFkeSBleGlzdHMnKTsgXG4gIH1cblxuICB1c2Vycy5wdXNoKFxuICAgIHN0cmlwVXNlck9mU2Vuc2l0aXZlU3R1ZmYodXNlciksXG4gICk7XG5cbiAgYXdhaXQgYXBwLmRhdGFzdG9yZS51cGRhdGVKc29uKFxuICAgIFVTRVJTX0xJU1RfRklMRSxcbiAgICB1c2VycyxcbiAgKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGFwcC5kYXRhc3RvcmUuY3JlYXRlSnNvbihcbiAgICAgIHVzZXJBdXRoRmlsZSh1c2VyLm5hbWUpLFxuICAgICAgYXV0aCxcbiAgICApO1xuICB9IGNhdGNoIChfKSB7XG4gICAgYXdhaXQgYXBwLmRhdGFzdG9yZS51cGRhdGVKc29uKFxuICAgICAgdXNlckF1dGhGaWxlKHVzZXIubmFtZSksXG4gICAgICBhdXRoLFxuICAgICk7XG4gIH1cblxuICBhd2FpdCByZWxlYXNlTG9jayhhcHAsIGxvY2spO1xuXG4gIHJldHVybiB1c2VyO1xufTtcblxuY29uc3QgZ2V0QWNjZXNzID0gYXN5bmMgKGFwcCwgcGFzc3dvcmQpID0+IHtcbiAgY29uc3QgYXV0aCA9IGdldE5ld1VzZXJBdXRoKGFwcCkoKTtcblxuICBpZiAoaXNOb25FbXB0eVN0cmluZyhwYXNzd29yZCkpIHtcbiAgICBpZiAoaXNWYWxpZFBhc3N3b3JkKHBhc3N3b3JkKSkge1xuICAgICAgYXV0aC5wYXNzd29yZEhhc2ggPSBhd2FpdCBhcHAuY3J5cHRvLmhhc2gocGFzc3dvcmQpO1xuICAgICAgYXV0aC50ZW1wb3JhcnlBY2Nlc3NIYXNoID0gJyc7XG4gICAgICBhdXRoLnRlbXBvcmFyeUFjY2Vzc0lkID0gJyc7XG4gICAgICBhdXRoLnRlbXBvcmFyeUFjY2Vzc0V4cGlyeUVwb2NoID0gMDtcbiAgICAgIHJldHVybiB7IGF1dGggfTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFcnJvcignUGFzc3dvcmQgZG9lcyBub3QgbWVldCByZXF1aXJlbWVudHMnKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB0ZW1wQWNjZXNzID0gYXdhaXQgZ2V0VGVtcG9yYXJ5Q29kZShhcHApO1xuICAgIGF1dGgudGVtcG9yYXJ5QWNjZXNzSGFzaCA9IHRlbXBBY2Nlc3MudGVtcG9yYXJ5QWNjZXNzSGFzaDtcbiAgICBhdXRoLnRlbXBvcmFyeUFjY2Vzc0V4cGlyeUVwb2NoID0gdGVtcEFjY2Vzcy50ZW1wb3JhcnlBY2Nlc3NFeHBpcnlFcG9jaDtcbiAgICBhdXRoLnBhc3N3b3JkSGFzaCA9ICcnO1xuICAgIHJldHVybiAoe1xuICAgICAgYXV0aCxcbiAgICAgIHRlbXBDb2RlOiB0ZW1wQWNjZXNzLnRlbXBDb2RlLFxuICAgICAgdGVtcG9yYXJ5QWNjZXNzSWQ6IHRlbXBBY2Nlc3MudGVtcG9yYXJ5QWNjZXNzSWQsXG4gICAgfSk7XG4gIH1cbn07XG4iLCJpbXBvcnQge1xuICBnZXRMb2NrLFxuICBpc05vbG9jaywgcmVsZWFzZUxvY2ssXG59IGZyb20gJy4uL2NvbW1vbi9sb2NrJztcbmltcG9ydCB7IFVTRVJTX0xPQ0tfRklMRSwgVVNFUlNfTElTVF9GSUxFLCBnZXRVc2VyQnlOYW1lIH0gZnJvbSAnLi9hdXRoQ29tbW9uJztcbmltcG9ydCB7IGFwaVdyYXBwZXIsIGV2ZW50cyB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBwZXJtaXNzaW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBOb3RGb3VuZEVycm9yIH0gZnJvbSAnLi4vY29tbW9uL2Vycm9ycyc7XG5cbmV4cG9ydCBjb25zdCBlbmFibGVVc2VyID0gYXBwID0+IGFzeW5jIHVzZXJuYW1lID0+IGFwaVdyYXBwZXIoXG4gIGFwcCxcbiAgZXZlbnRzLmF1dGhBcGkuZW5hYmxlVXNlcixcbiAgcGVybWlzc2lvbi5lbmFibGVEaXNhYmxlVXNlci5pc0F1dGhvcml6ZWQsXG4gIHsgdXNlcm5hbWUgfSxcbiAgX2VuYWJsZVVzZXIsIGFwcCwgdXNlcm5hbWUsXG4pO1xuXG5leHBvcnQgY29uc3QgZGlzYWJsZVVzZXIgPSBhcHAgPT4gYXN5bmMgdXNlcm5hbWUgPT4gYXBpV3JhcHBlcihcbiAgYXBwLFxuICBldmVudHMuYXV0aEFwaS5kaXNhYmxlVXNlcixcbiAgcGVybWlzc2lvbi5lbmFibGVEaXNhYmxlVXNlci5pc0F1dGhvcml6ZWQsXG4gIHsgdXNlcm5hbWUgfSxcbiAgX2Rpc2FibGVVc2VyLCBhcHAsIHVzZXJuYW1lLFxuKTtcblxuZXhwb3J0IGNvbnN0IF9lbmFibGVVc2VyID0gYXN5bmMgKGFwcCwgdXNlcm5hbWUpID0+IGF3YWl0IHRvZ2dsZVVzZXIoYXBwLCB1c2VybmFtZSwgdHJ1ZSk7XG5cbmV4cG9ydCBjb25zdCBfZGlzYWJsZVVzZXIgPSBhc3luYyAoYXBwLCB1c2VybmFtZSkgPT4gYXdhaXQgdG9nZ2xlVXNlcihhcHAsIHVzZXJuYW1lLCBmYWxzZSk7XG5cbmNvbnN0IHRvZ2dsZVVzZXIgPSBhc3luYyAoYXBwLCB1c2VybmFtZSwgZW5hYmxlZCkgPT4ge1xuICBjb25zdCBsb2NrID0gYXdhaXQgZ2V0TG9jayhhcHAsIFVTRVJTX0xPQ0tfRklMRSwgMTAwMCwgMSwgMCk7XG5cbiAgY29uc3QgYWN0aW9uTmFtZSA9IGVuYWJsZWQgPyAnZW5hYmxlJyA6ICdkaXNhYmxlJztcblxuICBpZiAoaXNOb2xvY2sobG9jaykpIHsgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgJHthY3Rpb25OYW1lfSB1c2VyIC0gY2Fubm90IGdldCBsb2NrYCk7IH1cblxuICB0cnkge1xuICAgIGNvbnN0IHVzZXJzID0gYXdhaXQgYXBwLmRhdGFzdG9yZS5sb2FkSnNvbihVU0VSU19MSVNUX0ZJTEUpO1xuICAgIGNvbnN0IHVzZXIgPSBnZXRVc2VyQnlOYW1lKHVzZXJzLCB1c2VybmFtZSk7XG4gICAgaWYgKCF1c2VyKSB7IHRocm93IG5ldyBOb3RGb3VuZEVycm9yKGBDb3VsZCBub3QgZmluZCB1c2VyIHRvICR7YWN0aW9uTmFtZX1gKTsgfVxuXG4gICAgaWYgKHVzZXIuZW5hYmxlZCA9PT0gIWVuYWJsZWQpIHtcbiAgICAgIHVzZXIuZW5hYmxlZCA9IGVuYWJsZWQ7XG4gICAgICBhd2FpdCBhcHAuZGF0YXN0b3JlLnVwZGF0ZUpzb24oVVNFUlNfTElTVF9GSUxFLCB1c2Vycyk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHJlbGVhc2VMb2NrKGFwcCwgbG9jayk7XG4gIH1cbn07XG4iLCJleHBvcnQgY29uc3QgZ2V0TmV3QWNjZXNzTGV2ZWwgPSAoKSA9PiAoKSA9PiAoe1xuICBuYW1lOiAnJyxcbiAgcGVybWlzc2lvbnM6IFtdLFxuICBkZWZhdWx0OmZhbHNlXG59KTtcbiIsImltcG9ydCB7XG4gIHZhbHVlcywgaW5jbHVkZXMsIG1hcCwgY29uY2F0LCBpc0VtcHR5LCB1bmlxV2l0aCwgc29tZSxcbiAgZmxhdHRlbiwgZmlsdGVyLFxufSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgYXBwbHlSdWxlU2V0LCBtYWtlcnVsZSB9IGZyb20gJy4uL2NvbW1vbi92YWxpZGF0aW9uQ29tbW9uJztcbmltcG9ydCB7IHBlcm1pc3Npb25UeXBlcyB9IGZyb20gJy4vYXV0aENvbW1vbic7XG5pbXBvcnQge1xuICAkLCBpc1NvbWV0aGluZywgaW5zZW5zaXRpdmVFcXVhbHMsXG4gIGlzTm9uRW1wdHlTdHJpbmcsIGFwaVdyYXBwZXJTeW5jLCBldmVudHMsXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXROb2RlIH0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7IGFsd2F5c0F1dGhvcml6ZWQgfSBmcm9tICcuL3Blcm1pc3Npb25zJztcblxuY29uc3QgaXNBbGxvd2VkVHlwZSA9IHQgPT4gJChwZXJtaXNzaW9uVHlwZXMsIFtcbiAgdmFsdWVzLFxuICBpbmNsdWRlcyh0KSxcbl0pO1xuXG5jb25zdCBpc1JlY29yZE9ySW5kZXhUeXBlID0gdCA9PiBzb21lKHAgPT4gcCA9PT0gdCkoW1xuICBwZXJtaXNzaW9uVHlwZXMuQ1JFQVRFX1JFQ09SRCxcbiAgcGVybWlzc2lvblR5cGVzLlVQREFURV9SRUNPUkQsXG4gIHBlcm1pc3Npb25UeXBlcy5ERUxFVEVfUkVDT1JELFxuICBwZXJtaXNzaW9uVHlwZXMuUkVBRF9SRUNPUkQsXG4gIHBlcm1pc3Npb25UeXBlcy5SRUFEX0lOREVYLFxuICBwZXJtaXNzaW9uVHlwZXMuRVhFQ1VURV9BQ1RJT04sXG5dKTtcblxuXG5jb25zdCBwZXJtaXNzaW9uUnVsZXMgPSBhcHAgPT4gKFtcbiAgbWFrZXJ1bGUoJ3R5cGUnLCAndHlwZSBtdXN0IGJlIG9uZSBvZiBhbGxvd2VkIHR5cGVzJyxcbiAgICBwID0+IGlzQWxsb3dlZFR5cGUocC50eXBlKSksXG4gIG1ha2VydWxlKCdub2RlS2V5JywgJ3JlY29yZCBhbmQgaW5kZXggcGVybWlzc2lvbnMgbXVzdCBpbmNsdWRlIGEgdmFsaWQgbm9kZUtleScsXG4gICAgcCA9PiAoIWlzUmVjb3JkT3JJbmRleFR5cGUocC50eXBlKSlcbiAgICAgICAgICAgICB8fCBpc1NvbWV0aGluZyhnZXROb2RlKGFwcC5oaWVyYXJjaHksIHAubm9kZUtleSkpKSxcbl0pO1xuXG5jb25zdCBhcHBseVBlcm1pc3Npb25SdWxlcyA9IGFwcCA9PiBhcHBseVJ1bGVTZXQocGVybWlzc2lvblJ1bGVzKGFwcCkpO1xuXG5jb25zdCBhY2Nlc3NMZXZlbFJ1bGVzID0gYWxsTGV2ZWxzID0+IChbXG4gIG1ha2VydWxlKCduYW1lJywgJ25hbWUgbXVzdCBiZSBzZXQnLFxuICAgIGwgPT4gaXNOb25FbXB0eVN0cmluZyhsLm5hbWUpKSxcbiAgbWFrZXJ1bGUoJ25hbWUnLCAnYWNjZXNzIGxldmVsIG5hbWVzIG11c3QgYmUgdW5pcXVlJyxcbiAgICBsID0+IGlzRW1wdHkobC5uYW1lKVxuICAgICAgICAgICAgIHx8IGZpbHRlcihhID0+IGluc2Vuc2l0aXZlRXF1YWxzKGwubmFtZSwgYS5uYW1lKSkoYWxsTGV2ZWxzKS5sZW5ndGggPT09IDEpLFxuXSk7XG5cbmNvbnN0IGFwcGx5TGV2ZWxSdWxlcyA9IGFsbExldmVscyA9PiBhcHBseVJ1bGVTZXQoYWNjZXNzTGV2ZWxSdWxlcyhhbGxMZXZlbHMpKTtcblxuZXhwb3J0IGNvbnN0IHZhbGlkYXRlQWNjZXNzTGV2ZWwgPSBhcHAgPT4gKGFsbExldmVscywgbGV2ZWwpID0+IHtcbiAgY29uc3QgZXJycyA9ICQobGV2ZWwucGVybWlzc2lvbnMsIFtcbiAgICBtYXAoYXBwbHlQZXJtaXNzaW9uUnVsZXMoYXBwKSksXG4gICAgZmxhdHRlbixcbiAgICBjb25jYXQoXG4gICAgICBhcHBseUxldmVsUnVsZXMoYWxsTGV2ZWxzKShsZXZlbCksXG4gICAgKSxcbiAgXSk7XG5cbiAgcmV0dXJuIGVycnM7XG59O1xuXG5leHBvcnQgY29uc3QgdmFsaWRhdGVBY2Nlc3NMZXZlbHMgPSBhcHAgPT4gYWxsTGV2ZWxzID0+IGFwaVdyYXBwZXJTeW5jKFxuICBhcHAsXG4gIGV2ZW50cy5hdXRoQXBpLnZhbGlkYXRlQWNjZXNzTGV2ZWxzLFxuICBhbHdheXNBdXRob3JpemVkLFxuICB7IGFsbExldmVscyB9LFxuICBfdmFsaWRhdGVBY2Nlc3NMZXZlbHMsIGFwcCwgYWxsTGV2ZWxzLFxuKTtcblxuZXhwb3J0IGNvbnN0IF92YWxpZGF0ZUFjY2Vzc0xldmVscyA9IChhcHAsIGFsbExldmVscykgPT4gJChhbGxMZXZlbHMsIFtcbiAgbWFwKGwgPT4gdmFsaWRhdGVBY2Nlc3NMZXZlbChhcHApKGFsbExldmVscywgbCkpLFxuICBmbGF0dGVuLFxuICB1bmlxV2l0aCgoeCwgeSkgPT4geC5maWVsZCA9PT0geS5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgeC5pdGVtID09PSB5Lml0ZW1cbiAgICAgICAgICAgICAgICAgICAgICAgICYmIHguZXJyb3IgPT09IHkuZXJyb3IpLFxuXSk7XG4iLCJpbXBvcnQgeyBqb2luLCBtYXAgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHtcbiAgZ2V0TG9jaywgcmVsZWFzZUxvY2ssICQsXG4gIGlzTm9sb2NrLCBhcGlXcmFwcGVyLCBldmVudHMsXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQge1xuICBBQ0NFU1NfTEVWRUxTX0xPQ0tfRklMRSxcbiAgQUNDRVNTX0xFVkVMU19GSUxFLFxufSBmcm9tICcuL2F1dGhDb21tb24nO1xuaW1wb3J0IHsgdmFsaWRhdGVBY2Nlc3NMZXZlbHMgfSBmcm9tICcuL3ZhbGlkYXRlQWNjZXNzTGV2ZWxzJztcbmltcG9ydCB7IHBlcm1pc3Npb24gfSBmcm9tICcuL3Blcm1pc3Npb25zJztcblxuZXhwb3J0IGNvbnN0IHNhdmVBY2Nlc3NMZXZlbHMgPSBhcHAgPT4gYXN5bmMgYWNjZXNzTGV2ZWxzID0+IGFwaVdyYXBwZXIoXG4gIGFwcCxcbiAgZXZlbnRzLmF1dGhBcGkuc2F2ZUFjY2Vzc0xldmVscyxcbiAgcGVybWlzc2lvbi53cml0ZUFjY2Vzc0xldmVscy5pc0F1dGhvcml6ZWQsXG4gIHsgYWNjZXNzTGV2ZWxzIH0sXG4gIF9zYXZlQWNjZXNzTGV2ZWxzLCBhcHAsIGFjY2Vzc0xldmVscyxcbik7XG5cbmV4cG9ydCBjb25zdCBfc2F2ZUFjY2Vzc0xldmVscyA9IGFzeW5jIChhcHAsIGFjY2Vzc0xldmVscykgPT4ge1xuICBjb25zdCB2YWxpZGF0aW9uRXJyb3JzID0gdmFsaWRhdGVBY2Nlc3NMZXZlbHMoYXBwKShhY2Nlc3NMZXZlbHMubGV2ZWxzKTtcbiAgaWYgKHZhbGlkYXRpb25FcnJvcnMubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGVycnMgPSAkKHZhbGlkYXRpb25FcnJvcnMsIFtcbiAgICAgIG1hcChlID0+IGUuZXJyb3IpLFxuICAgICAgam9pbignLCAnKSxcbiAgICBdKTtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgQWNjZXNzIExldmVscyBJbnZhbGlkOiAke2VycnN9YCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbG9jayA9IGF3YWl0IGdldExvY2soXG4gICAgYXBwLCBBQ0NFU1NfTEVWRUxTX0xPQ0tfRklMRSwgMjAwMCwgMixcbiAgKTtcblxuICBpZiAoaXNOb2xvY2sobG9jaykpIHsgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZ2V0IGxvY2sgdG8gc2F2ZSBhY2Nlc3MgbGV2ZWxzJyk7IH1cblxuICB0cnkge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gYXdhaXQgYXBwLmRhdGFzdG9yZS5sb2FkSnNvbihBQ0NFU1NfTEVWRUxTX0ZJTEUpO1xuICAgIGlmIChleGlzdGluZy52ZXJzaW9uICE9PSBhY2Nlc3NMZXZlbHMudmVyc2lvbikgeyB0aHJvdyBuZXcgRXJyb3IoJ0FjY2VzcyBsZXZlbHMgaGF2ZSBhbHJlYWR5IGJlZW4gdXBkYXRlZCwgc2luY2UgeW91IGxvYWRlZCcpOyB9XG5cbiAgICBhY2Nlc3NMZXZlbHMudmVyc2lvbisrO1xuXG4gICAgYXBwLmRhdGFzdG9yZS51cGRhdGVKc29uKEFDQ0VTU19MRVZFTFNfRklMRSwgYWNjZXNzTGV2ZWxzKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWxlYXNlTG9jayhhcHAsIGxvY2spO1xuICB9XG59O1xuIiwiaW1wb3J0IHtcbiAgZmlsdGVyLCB2YWx1ZXMsIGVhY2gsIGtleXMsXG59IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyBwZXJtaXNzaW9uIH0gZnJvbSAnLi9wZXJtaXNzaW9ucyc7XG5pbXBvcnQge1xuICBnZXRGbGF0dGVuZWRIaWVyYXJjaHksXG4gIGlzSW5kZXgsIGlzUmVjb3JkLFxufSBmcm9tICcuLi90ZW1wbGF0ZUFwaS9oaWVyYXJjaHknO1xuaW1wb3J0IHsgJCB9IGZyb20gJy4uL2NvbW1vbic7XG5cbmV4cG9ydCBjb25zdCBnZW5lcmF0ZUZ1bGxQZXJtaXNzaW9ucyA9IChhcHApID0+IHtcbiAgY29uc3QgYWxsTm9kZXMgPSBnZXRGbGF0dGVuZWRIaWVyYXJjaHkoYXBwLmhpZXJhcmNoeSk7XG4gIGNvbnN0IGFjY2Vzc0xldmVsID0geyBwZXJtaXNzaW9uczogW10gfTtcblxuICBjb25zdCByZWNvcmROb2RlcyA9ICQoYWxsTm9kZXMsIFtcbiAgICBmaWx0ZXIoaXNSZWNvcmQpLFxuICBdKTtcblxuICBmb3IgKGNvbnN0IG4gb2YgcmVjb3JkTm9kZXMpIHtcbiAgICBwZXJtaXNzaW9uLmNyZWF0ZVJlY29yZC5hZGQobi5ub2RlS2V5KCksIGFjY2Vzc0xldmVsKTtcbiAgICBwZXJtaXNzaW9uLnVwZGF0ZVJlY29yZC5hZGQobi5ub2RlS2V5KCksIGFjY2Vzc0xldmVsKTtcbiAgICBwZXJtaXNzaW9uLmRlbGV0ZVJlY29yZC5hZGQobi5ub2RlS2V5KCksIGFjY2Vzc0xldmVsKTtcbiAgICBwZXJtaXNzaW9uLnJlYWRSZWNvcmQuYWRkKG4ubm9kZUtleSgpLCBhY2Nlc3NMZXZlbCk7XG4gIH1cblxuICBjb25zdCBpbmRleE5vZGVzID0gJChhbGxOb2RlcywgW1xuICAgIGZpbHRlcihpc0luZGV4KSxcbiAgXSk7XG5cbiAgZm9yIChjb25zdCBuIG9mIGluZGV4Tm9kZXMpIHtcbiAgICBwZXJtaXNzaW9uLnJlYWRJbmRleC5hZGQobi5ub2RlS2V5KCksIGFjY2Vzc0xldmVsKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgYSBvZiBrZXlzKGFwcC5hY3Rpb25zKSkge1xuICAgIHBlcm1pc3Npb24uZXhlY3V0ZUFjdGlvbi5hZGQoYSwgYWNjZXNzTGV2ZWwpO1xuICB9XG5cbiAgJChwZXJtaXNzaW9uLCBbXG4gICAgdmFsdWVzLFxuICAgIGZpbHRlcihwID0+ICFwLmlzTm9kZSksXG4gICAgZWFjaChwID0+IHAuYWRkKGFjY2Vzc0xldmVsKSksXG4gIF0pO1xuXG4gIHJldHVybiBhY2Nlc3NMZXZlbC5wZXJtaXNzaW9ucztcbn07XG4iLCJpbXBvcnQgeyBkaWZmZXJlbmNlLCBtYXAsIGpvaW4gfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHtcbiAgZ2V0TG9jaywgaXNOb2xvY2ssIHJlbGVhc2VMb2NrLCAkLFxuICBhcGlXcmFwcGVyLCBldmVudHMsXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQge1xuICBVU0VSU19MT0NLX0ZJTEUsIEFDQ0VTU19MRVZFTFNfRklMRSxcbiAgZ2V0VXNlckJ5TmFtZSwgVVNFUlNfTElTVF9GSUxFLFxufSBmcm9tICcuL2F1dGhDb21tb24nO1xuaW1wb3J0IHsgcGVybWlzc2lvbiB9IGZyb20gJy4vcGVybWlzc2lvbnMnO1xuaW1wb3J0IHsgTm90Rm91bmRFcnJvciB9IGZyb20gJy4uL2NvbW1vbi9lcnJvcnMnO1xuXG5leHBvcnQgY29uc3Qgc2V0VXNlckFjY2Vzc0xldmVscyA9IGFwcCA9PiBhc3luYyAodXNlck5hbWUsIGFjY2Vzc0xldmVscykgPT4gYXBpV3JhcHBlcihcbiAgYXBwLFxuICBldmVudHMuYXV0aEFwaS5zZXRVc2VyQWNjZXNzTGV2ZWxzLFxuICBwZXJtaXNzaW9uLnNldFVzZXJBY2Nlc3NMZXZlbHMuaXNBdXRob3JpemVkLFxuICB7IHVzZXJOYW1lLCBhY2Nlc3NMZXZlbHMgfSxcbiAgX3NldFVzZXJBY2Nlc3NMZXZlbHMsIGFwcCwgdXNlck5hbWUsIGFjY2Vzc0xldmVscyxcbik7XG5cbmV4cG9ydCBjb25zdCBfc2V0VXNlckFjY2Vzc0xldmVscyA9IGFzeW5jIChhcHAsIHVzZXJuYW1lLCBhY2Nlc3NMZXZlbHMpID0+IHtcbiAgY29uc3QgbG9jayA9IGF3YWl0IGdldExvY2soYXBwLCBVU0VSU19MT0NLX0ZJTEUsIDEwMDAsIDEsIDApO1xuXG4gIGNvbnN0IGFjdHVhbEFjY2Vzc0xldmVscyA9ICQoXG4gICAgYXdhaXQgYXBwLmRhdGFzdG9yZS5sb2FkSnNvbihBQ0NFU1NfTEVWRUxTX0ZJTEUpLFxuICAgIFtcbiAgICAgIGwgPT4gbC5sZXZlbHMsXG4gICAgICBtYXAobCA9PiBsLm5hbWUpLFxuICAgIF0sXG4gICk7XG5cbiAgY29uc3QgbWlzc2luZyA9IGRpZmZlcmVuY2UoYWNjZXNzTGV2ZWxzKShhY3R1YWxBY2Nlc3NMZXZlbHMpO1xuICBpZiAobWlzc2luZy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGFjY2VzcyBsZXZlbHMgc3VwcGxpZWQ6ICR7am9pbignLCAnLCBtaXNzaW5nKX1gKTtcbiAgfVxuXG4gIGlmIChpc05vbG9jayhsb2NrKSkgeyB0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIHNldCB1c2VyIGFjY2VzcyBsZXZlbHMgY2Fubm90IGdldCBsb2NrJyk7IH1cblxuICB0cnkge1xuICAgIGNvbnN0IHVzZXJzID0gYXdhaXQgYXBwLmRhdGFzdG9yZS5sb2FkSnNvbihVU0VSU19MSVNUX0ZJTEUpO1xuICAgIGNvbnN0IHVzZXIgPSBnZXRVc2VyQnlOYW1lKHVzZXJzLCB1c2VybmFtZSk7XG4gICAgaWYgKCF1c2VyKSB7IHRocm93IG5ldyBOb3RGb3VuZEVycm9yKGBDb3VsZCBub3QgZmluZCB1c2VyIHdpdGggJHt1c2VybmFtZX1gKTsgfVxuXG4gICAgdXNlci5hY2Nlc3NMZXZlbHMgPSBhY2Nlc3NMZXZlbHM7XG4gICAgYXdhaXQgYXBwLmRhdGFzdG9yZS51cGRhdGVKc29uKFVTRVJTX0xJU1RfRklMRSwgdXNlcnMpO1xuICB9IGZpbmFsbHkge1xuICAgIHJlbGVhc2VMb2NrKGFwcCwgbG9jayk7XG4gIH1cbn07XG4iLCJpbXBvcnQge1xuICBhdXRoZW50aWNhdGUsXG4gIGF1dGhlbnRpY2F0ZVRlbXBvcmFyeUFjY2Vzcyxcbn0gZnJvbSAnLi9hdXRoZW50aWNhdGUnO1xuaW1wb3J0IHsgY3JlYXRlVGVtcG9yYXJ5QWNjZXNzIH0gZnJvbSAnLi9jcmVhdGVUZW1wb3JhcnlBY2Nlc3MnO1xuaW1wb3J0IHsgY3JlYXRlVXNlciB9IGZyb20gJy4vY3JlYXRlVXNlcic7XG5pbXBvcnQgeyBlbmFibGVVc2VyLCBkaXNhYmxlVXNlciB9IGZyb20gJy4vZW5hYmxlVXNlcic7XG5pbXBvcnQgeyBsb2FkQWNjZXNzTGV2ZWxzIH0gZnJvbSAnLi9sb2FkQWNjZXNzTGV2ZWxzJztcbmltcG9ydCB7IGdldE5ld0FjY2Vzc0xldmVsIH0gZnJvbSAnLi9nZXROZXdBY2Nlc3NMZXZlbCc7XG5pbXBvcnQgeyBnZXROZXdVc2VyLCBnZXROZXdVc2VyQXV0aCB9IGZyb20gJy4vZ2V0TmV3VXNlcic7XG5pbXBvcnQgeyBnZXRVc2VycyB9IGZyb20gJy4vZ2V0VXNlcnMnO1xuaW1wb3J0IHsgaXNBdXRob3JpemVkIH0gZnJvbSAnLi9pc0F1dGhvcml6ZWQnO1xuaW1wb3J0IHsgc2F2ZUFjY2Vzc0xldmVscyB9IGZyb20gJy4vc2F2ZUFjY2Vzc0xldmVscyc7XG5pbXBvcnQge1xuICBjaGFuZ2VNeVBhc3N3b3JkLFxuICBzY29yZVBhc3N3b3JkLCBzZXRQYXNzd29yZEZyb21UZW1wb3JhcnlDb2RlLFxuICBpc1ZhbGlkUGFzc3dvcmQsXG59IGZyb20gJy4vc2V0UGFzc3dvcmQnO1xuaW1wb3J0IHsgdmFsaWRhdGVVc2VyIH0gZnJvbSAnLi92YWxpZGF0ZVVzZXInO1xuaW1wb3J0IHsgdmFsaWRhdGVBY2Nlc3NMZXZlbHMgfSBmcm9tICcuL3ZhbGlkYXRlQWNjZXNzTGV2ZWxzJztcbmltcG9ydCB7IGdlbmVyYXRlRnVsbFBlcm1pc3Npb25zIH0gZnJvbSAnLi9nZW5lcmF0ZUZ1bGxQZXJtaXNzaW9ucyc7XG5pbXBvcnQgeyBzZXRVc2VyQWNjZXNzTGV2ZWxzIH0gZnJvbSAnLi9zZXRVc2VyQWNjZXNzTGV2ZWxzJztcblxuZXhwb3J0IGNvbnN0IGdldEF1dGhBcGkgPSBhcHAgPT4gKHtcbiAgYXV0aGVudGljYXRlOiBhdXRoZW50aWNhdGUoYXBwKSxcbiAgYXV0aGVudGljYXRlVGVtcG9yYXJ5QWNjZXNzOiBhdXRoZW50aWNhdGVUZW1wb3JhcnlBY2Nlc3MoYXBwKSxcbiAgY3JlYXRlVGVtcG9yYXJ5QWNjZXNzOiBjcmVhdGVUZW1wb3JhcnlBY2Nlc3MoYXBwKSxcbiAgY3JlYXRlVXNlcjogY3JlYXRlVXNlcihhcHApLFxuICBsb2FkQWNjZXNzTGV2ZWxzOiBsb2FkQWNjZXNzTGV2ZWxzKGFwcCksXG4gIGVuYWJsZVVzZXI6IGVuYWJsZVVzZXIoYXBwKSxcbiAgZGlzYWJsZVVzZXI6IGRpc2FibGVVc2VyKGFwcCksXG4gIGdldE5ld0FjY2Vzc0xldmVsOiBnZXROZXdBY2Nlc3NMZXZlbChhcHApLFxuICBnZXROZXdVc2VyOiBnZXROZXdVc2VyKGFwcCksXG4gIGdldE5ld1VzZXJBdXRoOiBnZXROZXdVc2VyQXV0aChhcHApLFxuICBnZXRVc2VyczogZ2V0VXNlcnMoYXBwKSxcbiAgc2F2ZUFjY2Vzc0xldmVsczogc2F2ZUFjY2Vzc0xldmVscyhhcHApLFxuICBpc0F1dGhvcml6ZWQ6IGlzQXV0aG9yaXplZChhcHApLFxuICBjaGFuZ2VNeVBhc3N3b3JkOiBjaGFuZ2VNeVBhc3N3b3JkKGFwcCksXG4gIHNldFBhc3N3b3JkRnJvbVRlbXBvcmFyeUNvZGU6IHNldFBhc3N3b3JkRnJvbVRlbXBvcmFyeUNvZGUoYXBwKSxcbiAgc2NvcmVQYXNzd29yZCxcbiAgaXNWYWxpZFBhc3N3b3JkOiBpc1ZhbGlkUGFzc3dvcmQoYXBwKSxcbiAgdmFsaWRhdGVVc2VyOiB2YWxpZGF0ZVVzZXIoYXBwKSxcbiAgdmFsaWRhdGVBY2Nlc3NMZXZlbHM6IHZhbGlkYXRlQWNjZXNzTGV2ZWxzKGFwcCksXG4gIGdlbmVyYXRlRnVsbFBlcm1pc3Npb25zOiAoKSA9PiBnZW5lcmF0ZUZ1bGxQZXJtaXNzaW9ucyhhcHApLFxuICBzZXRVc2VyQWNjZXNzTGV2ZWxzOiBzZXRVc2VyQWNjZXNzTGV2ZWxzKGFwcCksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0QXV0aEFwaTtcbiIsImltcG9ydCB7IHBlcm1pc3Npb24gfSBmcm9tICcuLi9hdXRoQXBpL3Blcm1pc3Npb25zJztcbmltcG9ydCB7IGFwaVdyYXBwZXJTeW5jIH0gZnJvbSAnLi4vY29tbW9uL2FwaVdyYXBwZXInO1xuaW1wb3J0IHsgZXZlbnRzIH0gZnJvbSAnLi4vY29tbW9uL2V2ZW50cyc7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlQWN0aW9uID0gYXBwID0+IChhY3Rpb25OYW1lLCBvcHRpb25zKSA9PiB7XG4gIGFwaVdyYXBwZXJTeW5jKFxuICAgIGFwcCxcbiAgICBldmVudHMuYWN0aW9uc0FwaS5leGVjdXRlLFxuICAgIHBlcm1pc3Npb24uZXhlY3V0ZUFjdGlvbi5pc0F1dGhvcml6ZWQoYWN0aW9uTmFtZSksXG4gICAgeyBhY3Rpb25OYW1lLCBvcHRpb25zIH0sXG4gICAgYXBwLmFjdGlvbnNbYWN0aW9uTmFtZV0sIG9wdGlvbnMsXG4gICk7XG59O1xuXG5leHBvcnQgY29uc3QgX2V4ZWN1dGVBY3Rpb24gPSAoYmVoYXZpb3VyU291cmNlcywgYWN0aW9uLCBvcHRpb25zKSA9PiBiZWhhdmlvdXJTb3VyY2VzW2FjdGlvbi5iZWhhdmlvdXJTb3VyY2VdW2FjdGlvbi5iZWhhdmlvdXJOYW1lXShvcHRpb25zKTtcbiIsImltcG9ydCB7IGV4ZWN1dGVBY3Rpb24gfSBmcm9tICcuL2V4ZWN1dGUnO1xuXG5leHBvcnQgY29uc3QgZ2V0QWN0aW9uc0FwaSA9IGFwcCA9PiAoe1xuICBleGVjdXRlOiBleGVjdXRlQWN0aW9uKGFwcCksXG59KTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0QWN0aW9uc0FwaTtcbiIsImltcG9ydCB7IGhhcyB9IGZyb20gJ2xvZGFzaCc7XG5cbmNvbnN0IHB1Ymxpc2ggPSBoYW5kbGVycyA9PiBhc3luYyAoZXZlbnROYW1lLCBjb250ZXh0ID0ge30pID0+IHtcbiAgaWYgKCFoYXMoaGFuZGxlcnMsIGV2ZW50TmFtZSkpIHJldHVybjtcblxuICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnNbZXZlbnROYW1lXSkge1xuICAgIGF3YWl0IGhhbmRsZXIoZXZlbnROYW1lLCBjb250ZXh0KTtcbiAgfVxufTtcblxuY29uc3Qgc3Vic2NyaWJlID0gaGFuZGxlcnMgPT4gKGV2ZW50TmFtZSwgaGFuZGxlcikgPT4ge1xuICBpZiAoIWhhcyhoYW5kbGVycywgZXZlbnROYW1lKSkge1xuICAgIGhhbmRsZXJzW2V2ZW50TmFtZV0gPSBbXTtcbiAgfVxuICBoYW5kbGVyc1tldmVudE5hbWVdLnB1c2goaGFuZGxlcik7XG59O1xuXG5leHBvcnQgY29uc3QgY3JlYXRlRXZlbnRBZ2dyZWdhdG9yID0gKCkgPT4ge1xuICBjb25zdCBoYW5kbGVycyA9IHt9O1xuICBjb25zdCBldmVudEFnZ3JlZ2F0b3IgPSAoe1xuICAgIHB1Ymxpc2g6IHB1Ymxpc2goaGFuZGxlcnMpLFxuICAgIHN1YnNjcmliZTogc3Vic2NyaWJlKGhhbmRsZXJzKSxcbiAgfSk7XG4gIHJldHVybiBldmVudEFnZ3JlZ2F0b3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVFdmVudEFnZ3JlZ2F0b3I7XG4iLCJpbXBvcnQgeyByZXRyeSB9IGZyb20gJy4uL2NvbW1vbi9pbmRleCc7XG5pbXBvcnQgeyBOb3RGb3VuZEVycm9yIH0gZnJvbSAnLi4vY29tbW9uL2Vycm9ycyc7XG5cbmNvbnN0IGNyZWF0ZUpzb24gPSBvcmlnaW5hbENyZWF0ZUZpbGUgPT4gYXN5bmMgKGtleSwgb2JqLCByZXRyaWVzID0gNSwgZGVsYXkgPSA1MDApID0+IGF3YWl0IHJldHJ5KG9yaWdpbmFsQ3JlYXRlRmlsZSwgcmV0cmllcywgZGVsYXksIGtleSwgSlNPTi5zdHJpbmdpZnkob2JqKSk7XG5cbmNvbnN0IGNyZWF0ZU5ld0ZpbGUgPSBvcmlnaW5hbENyZWF0ZUZpbGUgPT4gYXN5bmMgKHBhdGgsIGNvbnRlbnQsIHJldHJpZXMgPSA1LCBkZWxheSA9IDUwMCkgPT4gYXdhaXQgcmV0cnkob3JpZ2luYWxDcmVhdGVGaWxlLCByZXRyaWVzLCBkZWxheSwgcGF0aCwgY29udGVudCk7XG5cbmNvbnN0IGxvYWRKc29uID0gZGF0YXN0b3JlID0+IGFzeW5jIChrZXksIHJldHJpZXMgPSA1LCBkZWxheSA9IDUwMCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCByZXRyeShKU09OLnBhcnNlLCByZXRyaWVzLCBkZWxheSwgYXdhaXQgZGF0YXN0b3JlLmxvYWRGaWxlKGtleSkpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICB0aHJvdyBuZXcgTm90Rm91bmRFcnJvcihlcnIubWVzc2FnZSk7XG4gIH1cbn1cblxuY29uc3QgdXBkYXRlSnNvbiA9IGRhdGFzdG9yZSA9PiBhc3luYyAoa2V5LCBvYmosIHJldHJpZXMgPSA1LCBkZWxheSA9IDUwMCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCByZXRyeShkYXRhc3RvcmUudXBkYXRlRmlsZSwgcmV0cmllcywgZGVsYXksIGtleSwgSlNPTi5zdHJpbmdpZnkob2JqKSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKGVyci5tZXNzYWdlKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3Qgc2V0dXBEYXRhc3RvcmUgPSAoZGF0YXN0b3JlKSA9PiB7XG4gIGNvbnN0IG9yaWdpbmFsQ3JlYXRlRmlsZSA9IGRhdGFzdG9yZS5jcmVhdGVGaWxlO1xuICBkYXRhc3RvcmUubG9hZEpzb24gPSBsb2FkSnNvbihkYXRhc3RvcmUpO1xuICBkYXRhc3RvcmUuY3JlYXRlSnNvbiA9IGNyZWF0ZUpzb24ob3JpZ2luYWxDcmVhdGVGaWxlKTtcbiAgZGF0YXN0b3JlLnVwZGF0ZUpzb24gPSB1cGRhdGVKc29uKGRhdGFzdG9yZSk7XG4gIGRhdGFzdG9yZS5jcmVhdGVGaWxlID0gY3JlYXRlTmV3RmlsZShvcmlnaW5hbENyZWF0ZUZpbGUpO1xuICBpZiAoZGF0YXN0b3JlLmNyZWF0ZUVtcHR5RGIpIHsgZGVsZXRlIGRhdGFzdG9yZS5jcmVhdGVFbXB0eURiOyB9XG4gIHJldHVybiBkYXRhc3RvcmU7XG59O1xuXG5leHBvcnQgeyBjcmVhdGVFdmVudEFnZ3JlZ2F0b3IgfSBmcm9tICcuL2V2ZW50QWdncmVnYXRvcic7XG5cbmV4cG9ydCBkZWZhdWx0IHNldHVwRGF0YXN0b3JlO1xuIiwiaW1wb3J0IHsgXHJcbiAgY29tcGlsZUV4cHJlc3Npb24gYXMgY0V4cCwgXHJcbiAgY29tcGlsZUNvZGUgYXMgY0NvZGUgXHJcbn0gZnJvbSAnQG54LWpzL2NvbXBpbGVyLXV0aWwnO1xyXG5cclxuZXhwb3J0IGNvbnN0IGNvbXBpbGVDb2RlID0gY29kZSA9PiB7XHJcbiAgbGV0IGZ1bmM7ICBcclxuICAgIFxyXG4gIHRyeSB7XHJcbiAgICBmdW5jID0gY0NvZGUoY29kZSk7XHJcbiAgfSBjYXRjaChlKSB7XHJcbiAgICBlLm1lc3NhZ2UgPSBgRXJyb3IgY29tcGlsaW5nIGNvZGUgOiAke2NvZGV9IDogJHtlLm1lc3NhZ2V9YDtcclxuICAgIHRocm93IGU7XHJcbiAgfVxyXG5cclxuICByZXR1cm4gZnVuYztcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGNvbXBpbGVFeHByZXNzaW9uID0gY29kZSA9PiB7XHJcbiAgbGV0IGZ1bmM7ICBcclxuICAgICAgXHJcbiAgdHJ5IHtcclxuICAgIGZ1bmMgPSBjRXhwKGNvZGUpO1xyXG4gIH0gY2F0Y2goZSkge1xyXG4gICAgZS5tZXNzYWdlID0gYEVycm9yIGNvbXBpbGluZyBleHByZXNzaW9uIDogJHtjb2RlfSA6ICR7ZS5tZXNzYWdlfWA7XHJcbiAgICB0aHJvdyBlO1xyXG4gIH1cclxuICBcclxuICByZXR1cm4gZnVuYztcclxufVxyXG4iLCJpbXBvcnQge1xuICBpc0Z1bmN0aW9uLCBmaWx0ZXIsIG1hcCxcbiAgdW5pcUJ5LCBrZXlzLCBkaWZmZXJlbmNlLFxuICBqb2luLCByZWR1Y2UsIGZpbmQsXG59IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyBjb21waWxlRXhwcmVzc2lvbiwgY29tcGlsZUNvZGUgfSBmcm9tICcuLi9jb21tb24vY29tcGlsZUNvZGUnO1xuaW1wb3J0IHsgJCB9IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBfZXhlY3V0ZUFjdGlvbiB9IGZyb20gJy4vZXhlY3V0ZSc7XG5pbXBvcnQgeyBCYWRSZXF1ZXN0RXJyb3IsIE5vdEZvdW5kRXJyb3IgfSBmcm9tICcuLi9jb21tb24vZXJyb3JzJztcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxpc2VBY3Rpb25zID0gKHN1YnNjcmliZSwgYmVoYXZpb3VyU291cmNlcywgYWN0aW9ucywgdHJpZ2dlcnMsIGFwaXMpID0+IHtcbiAgdmFsaWRhdGVTb3VyY2VzKGJlaGF2aW91clNvdXJjZXMsIGFjdGlvbnMpO1xuICBzdWJzY3JpYmVUcmlnZ2VycyhzdWJzY3JpYmUsIGJlaGF2aW91clNvdXJjZXMsIGFjdGlvbnMsIHRyaWdnZXJzLCBhcGlzKTtcbiAgcmV0dXJuIGNyZWF0ZUFjdGlvbnNDb2xsZWN0aW9uKGJlaGF2aW91clNvdXJjZXMsIGFjdGlvbnMpO1xufTtcblxuY29uc3QgY3JlYXRlQWN0aW9uc0NvbGxlY3Rpb24gPSAoYmVoYXZpb3VyU291cmNlcywgYWN0aW9ucykgPT4gJChhY3Rpb25zLCBbXG4gIHJlZHVjZSgoYWxsLCBhKSA9PiB7XG4gICAgYWxsW2EubmFtZV0gPSBvcHRzID0+IF9leGVjdXRlQWN0aW9uKGJlaGF2aW91clNvdXJjZXMsIGEsIG9wdHMpO1xuICAgIHJldHVybiBhbGw7XG4gIH0sIHt9KSxcbl0pO1xuXG5jb25zdCBzdWJzY3JpYmVUcmlnZ2VycyA9IChzdWJzY3JpYmUsIGJlaGF2aW91clNvdXJjZXMsIGFjdGlvbnMsIHRyaWdnZXJzLCBhcGlzKSA9PiB7XG4gIGNvbnN0IGNyZWF0ZU9wdGlvbnMgPSAob3B0aW9uc0NyZWF0b3IsIGV2ZW50Q29udGV4dCkgPT4ge1xuICAgIGlmICghb3B0aW9uc0NyZWF0b3IpIHJldHVybiB7fTtcbiAgICBjb25zdCBjcmVhdGUgPSBjb21waWxlQ29kZShvcHRpb25zQ3JlYXRvcik7XG4gICAgcmV0dXJuIGNyZWF0ZSh7IGNvbnRleHQ6IGV2ZW50Q29udGV4dCwgYXBpcyB9KTtcbiAgfTtcblxuICBjb25zdCBzaG91bGRSdW5UcmlnZ2VyID0gKHRyaWdnZXIsIGV2ZW50Q29udGV4dCkgPT4ge1xuICAgIGlmICghdHJpZ2dlci5jb25kaXRpb24pIHJldHVybiB0cnVlO1xuICAgIGNvbnN0IHNob3VsZFJ1biA9IGNvbXBpbGVFeHByZXNzaW9uKHRyaWdnZXIuY29uZGl0aW9uKTtcbiAgICByZXR1cm4gc2hvdWxkUnVuKHsgY29udGV4dDogZXZlbnRDb250ZXh0IH0pO1xuICB9O1xuXG4gIGZvciAobGV0IHRyaWcgb2YgdHJpZ2dlcnMpIHtcbiAgICBzdWJzY3JpYmUodHJpZy5ldmVudE5hbWUsIGFzeW5jIChldiwgY3R4KSA9PiB7XG4gICAgICBpZiAoc2hvdWxkUnVuVHJpZ2dlcih0cmlnLCBjdHgpKSB7XG4gICAgICAgIGF3YWl0IF9leGVjdXRlQWN0aW9uKFxuICAgICAgICAgIGJlaGF2aW91clNvdXJjZXMsXG4gICAgICAgICAgZmluZChhID0+IGEubmFtZSA9PT0gdHJpZy5hY3Rpb25OYW1lKShhY3Rpb25zKSxcbiAgICAgICAgICBjcmVhdGVPcHRpb25zKHRyaWcub3B0aW9uc0NyZWF0b3IsIGN0eCksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn07XG5cbmNvbnN0IHZhbGlkYXRlU291cmNlcyA9IChiZWhhdmlvdXJTb3VyY2VzLCBhY3Rpb25zKSA9PiB7XG4gIGNvbnN0IGRlY2xhcmVkU291cmNlcyA9ICQoYWN0aW9ucywgW1xuICAgIHVuaXFCeShhID0+IGEuYmVoYXZpb3VyU291cmNlKSxcbiAgICBtYXAoYSA9PiBhLmJlaGF2aW91clNvdXJjZSksXG4gIF0pO1xuXG4gIGNvbnN0IHN1cHBsaWVkU291cmNlcyA9IGtleXMoYmVoYXZpb3VyU291cmNlcyk7XG5cbiAgY29uc3QgbWlzc2luZ1NvdXJjZXMgPSBkaWZmZXJlbmNlKFxuICAgIGRlY2xhcmVkU291cmNlcywgc3VwcGxpZWRTb3VyY2VzLFxuICApO1xuXG4gIGlmIChtaXNzaW5nU291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IEJhZFJlcXVlc3RFcnJvcihgRGVjbGFyZWQgYmVoYXZpb3VyIHNvdXJjZXMgYXJlIG5vdCBzdXBwbGllZDogJHtqb2luKCcsICcsIG1pc3NpbmdTb3VyY2VzKX1gKTtcbiAgfVxuXG4gIGNvbnN0IG1pc3NpbmdCZWhhdmlvdXJzID0gJChhY3Rpb25zLCBbXG4gICAgZmlsdGVyKGEgPT4gIWlzRnVuY3Rpb24oYmVoYXZpb3VyU291cmNlc1thLmJlaGF2aW91clNvdXJjZV1bYS5iZWhhdmlvdXJOYW1lXSkpLFxuICAgIG1hcChhID0+IGBBY3Rpb246ICR7YS5uYW1lfSA6ICR7YS5iZWhhdmlvdXJTb3VyY2V9LiR7YS5iZWhhdmlvdXJOYW1lfWApLFxuICBdKTtcblxuICBpZiAobWlzc2luZ0JlaGF2aW91cnMubGVuZ3RoID4gMCkge1xuICAgIHRocm93IG5ldyBOb3RGb3VuZEVycm9yKGBNaXNzaW5nIGJlaGF2aW91cnM6IGNvdWxkIG5vdCBmaW5kIGJlaGF2aW91ciBmdW5jdGlvbnM6ICR7am9pbignLCAnLCBtaXNzaW5nQmVoYXZpb3Vycyl9YCk7XG4gIH1cbn07XG4iLCJpbXBvcnQge1xuICBtYXAsIGZpbHRlciwgZ3JvdXBCeSwgc3BsaXQsXG4gIHNvbWUsIGZpbmQsXG59IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQge1xuICBMT0NLX0ZJTEVOQU1FLCBUUkFOU0FDVElPTlNfRk9MREVSLCBpZFNlcCwgaXNVcGRhdGUsXG4gIG5vZGVLZXlIYXNoRnJvbUJ1aWxkRm9sZGVyLCBpc0J1aWxkSW5kZXhGb2xkZXIsIGdldFRyYW5zYWN0aW9uSWQsXG4gIGlzRGVsZXRlLCBpc0NyZWF0ZSxcbn0gZnJvbSAnLi90cmFuc2FjdGlvbnNDb21tb24nO1xuaW1wb3J0IHtcbiAgam9pbktleSwgJCwgbm9uZSwgaXNTb21ldGhpbmcsXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQgeyBnZXRMYXN0UGFydEluS2V5LCBnZXROb2RlRnJvbU5vZGVLZXlIYXNoIH0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7IF9sb2FkIH0gZnJvbSAnLi4vcmVjb3JkQXBpL2xvYWQnO1xuXG5leHBvcnQgY29uc3QgcmV0cmlldmUgPSBhc3luYyAoYXBwKSA9PiB7XG4gIGNvbnN0IHRyYW5zYWN0aW9uRmlsZXMgPSBhd2FpdCBhcHAuZGF0YXN0b3JlLmdldEZvbGRlckNvbnRlbnRzKFxuICAgIFRSQU5TQUNUSU9OU19GT0xERVIsXG4gICk7XG5cbiAgbGV0IHRyYW5zYWN0aW9ucyA9IFtdO1xuXG4gIGlmIChzb21lKGlzQnVpbGRJbmRleEZvbGRlcikodHJhbnNhY3Rpb25GaWxlcykpIHtcbiAgICBjb25zdCBidWlsZEluZGV4Rm9sZGVyID0gZmluZChpc0J1aWxkSW5kZXhGb2xkZXIpKHRyYW5zYWN0aW9uRmlsZXMpO1xuXG4gICAgdHJhbnNhY3Rpb25zID0gYXdhaXQgcmV0cmlldmVCdWlsZEluZGV4VHJhbnNhY3Rpb25zKFxuICAgICAgYXBwLFxuICAgICAgam9pbktleShUUkFOU0FDVElPTlNfRk9MREVSLCBidWlsZEluZGV4Rm9sZGVyKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKHRyYW5zYWN0aW9ucy5sZW5ndGggPiAwKSByZXR1cm4gdHJhbnNhY3Rpb25zO1xuXG4gIHJldHVybiBhd2FpdCByZXRyaWV2ZVN0YW5kYXJkVHJhbnNhY3Rpb25zKFxuICAgIGFwcCwgdHJhbnNhY3Rpb25GaWxlcyxcbiAgKTtcbn07XG5cbmNvbnN0IHJldHJpZXZlQnVpbGRJbmRleFRyYW5zYWN0aW9ucyA9IGFzeW5jIChhcHAsIGJ1aWxkSW5kZXhGb2xkZXIpID0+IHtcbiAgY29uc3QgY2hpbGRGb2xkZXJzID0gYXdhaXQgYXBwLmRhdGFzdG9yZS5nZXRGb2xkZXJDb250ZW50cyhidWlsZEluZGV4Rm9sZGVyKTtcbiAgaWYgKGNoaWxkRm9sZGVycy5sZW5ndGggPT09IDApIHtcbiAgICAvLyBjbGVhbnVwXG4gICAgYXdhaXQgYXBwLmRhdGFzdG9yZS5kZWxldGVGb2xkZXIoYnVpbGRJbmRleEZvbGRlcik7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgZ2V0VHJhbnNhY3Rpb25GaWxlcyA9IGFzeW5jIChjaGlsZEZvbGRlckluZGV4ID0gMCkgPT4ge1xuICAgIGlmIChjaGlsZEZvbGRlckluZGV4ID49IGNoaWxkRm9sZGVycy5sZW5ndGgpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGNoaWxkRm9sZGVyS2V5ID0gam9pbktleShidWlsZEluZGV4Rm9sZGVyLCBjaGlsZEZvbGRlcnNbY2hpbGRGb2xkZXJJbmRleF0pO1xuICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgYXBwLmRhdGFzdG9yZS5nZXRGb2xkZXJDb250ZW50cyhcbiAgICAgIGNoaWxkRm9sZGVyS2V5LFxuICAgICk7XG5cbiAgICBpZiAoZmlsZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBhd2FpdCBhcHAuZGF0YXN0b3JlLmRlbGV0ZUZvbGRlcihjaGlsZEZvbGRlcktleSk7XG4gICAgICByZXR1cm4gYXdhaXQgZ2V0VHJhbnNhY3Rpb25GaWxlcyhjaGlsZEZvbGRlckluZGV4ICsgMSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY2hpbGRGb2xkZXJLZXksIGZpbGVzIH07XG4gIH07XG5cbiAgY29uc3QgdHJhbnNhY3Rpb25GaWxlcyA9IGF3YWl0IGdldFRyYW5zYWN0aW9uRmlsZXMoKTtcblxuICBpZiAodHJhbnNhY3Rpb25GaWxlcy5maWxlcy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICBjb25zdCB0cmFuc2FjdGlvbnMgPSAkKHRyYW5zYWN0aW9uRmlsZXMuZmlsZXMsIFtcbiAgICBtYXAocGFyc2VUcmFuc2FjdGlvbklkKSxcbiAgXSk7XG5cbiAgZm9yIChjb25zdCB0IG9mIHRyYW5zYWN0aW9ucykge1xuICAgIGNvbnN0IHRyYW5zYWN0aW9uQ29udGVudCA9IGF3YWl0IGFwcC5kYXRhc3RvcmUubG9hZEpzb24oXG4gICAgICBqb2luS2V5KFxuICAgICAgICB0cmFuc2FjdGlvbkZpbGVzLmNoaWxkRm9sZGVyS2V5LFxuICAgICAgICB0LmZ1bGxJZCxcbiAgICAgICksXG4gICAgKTtcbiAgICB0LnJlY29yZCA9IGF3YWl0IF9sb2FkKGFwcCwgdHJhbnNhY3Rpb25Db250ZW50LnJlY29yZEtleSk7XG4gIH1cblxuICB0cmFuc2FjdGlvbnMuaW5kZXhOb2RlID0gJChidWlsZEluZGV4Rm9sZGVyLCBbXG4gICAgZ2V0TGFzdFBhcnRJbktleSxcbiAgICBub2RlS2V5SGFzaEZyb21CdWlsZEZvbGRlcixcbiAgICBnZXROb2RlRnJvbU5vZGVLZXlIYXNoKGFwcC5oaWVyYXJjaHkpLFxuICBdKTtcblxuICB0cmFuc2FjdGlvbnMuZm9sZGVyS2V5ID0gdHJhbnNhY3Rpb25GaWxlcy5jaGlsZEZvbGRlcktleTtcblxuICByZXR1cm4gdHJhbnNhY3Rpb25zO1xufTtcblxuY29uc3QgcmV0cmlldmVTdGFuZGFyZFRyYW5zYWN0aW9ucyA9IGFzeW5jIChhcHAsIHRyYW5zYWN0aW9uRmlsZXMpID0+IHtcbiAgY29uc3QgdHJhbnNhY3Rpb25JZHMgPSAkKHRyYW5zYWN0aW9uRmlsZXMsIFtcbiAgICBmaWx0ZXIoZiA9PiBmICE9PSBMT0NLX0ZJTEVOQU1FXG4gICAgICAgICAgICAgICAgICAgICYmICFpc0J1aWxkSW5kZXhGb2xkZXIoZikpLFxuICAgIG1hcChwYXJzZVRyYW5zYWN0aW9uSWQpLFxuICBdKTtcblxuICBjb25zdCB0cmFuc2FjdGlvbklkc0J5UmVjb3JkID0gJCh0cmFuc2FjdGlvbklkcywgW1xuICAgIGdyb3VwQnkoJ3JlY29yZElkJyksXG4gIF0pO1xuXG4gIGNvbnN0IGRlZHVwZWRUcmFuc2FjdGlvbnMgPSBbXTtcblxuICBjb25zdCB2ZXJpZnkgPSBhc3luYyAodCkgPT4ge1xuICAgIGlmICh0LnZlcmlmaWVkID09PSB0cnVlKSByZXR1cm4gdDtcblxuICAgIGNvbnN0IGlkID0gZ2V0VHJhbnNhY3Rpb25JZChcbiAgICAgIHQucmVjb3JkSWQsXG4gICAgICB0LnRyYW5zYWN0aW9uVHlwZSxcbiAgICAgIHQudW5pcXVlSWQsXG4gICAgKTtcblxuICAgIGNvbnN0IHRyYW5zYWN0aW9uID0gYXdhaXQgYXBwLmRhdGFzdG9yZS5sb2FkSnNvbihcbiAgICAgIGpvaW5LZXkoVFJBTlNBQ1RJT05TX0ZPTERFUiwgaWQpLFxuICAgICk7XG5cbiAgICBpZiAoaXNEZWxldGUodCkpIHtcbiAgICAgIHQucmVjb3JkID0gdHJhbnNhY3Rpb24ucmVjb3JkO1xuICAgICAgdC52ZXJpZmllZCA9IHRydWU7XG4gICAgICByZXR1cm4gdDtcbiAgICB9XG5cbiAgICBjb25zdCByZWMgPSBhd2FpdCBfbG9hZChcbiAgICAgIGFwcCxcbiAgICAgIHRyYW5zYWN0aW9uLnJlY29yZEtleSxcbiAgICApO1xuICAgIGlmIChyZWMudHJhbnNhY3Rpb25JZCA9PT0gaWQpIHtcbiAgICAgIHQucmVjb3JkID0gcmVjO1xuICAgICAgaWYgKHRyYW5zYWN0aW9uLm9sZFJlY29yZCkgeyB0Lm9sZFJlY29yZCA9IHRyYW5zYWN0aW9uLm9sZFJlY29yZDsgfVxuICAgICAgdC52ZXJpZmllZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHQudmVyaWZpZWQgPSBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdDtcbiAgfTtcblxuICBjb25zdCBwaWNrT25lID0gYXN5bmMgKHRyYW5zLCBmb3JUeXBlKSA9PiB7XG4gICAgY29uc3QgdHJhbnNGb3JUeXBlID0gZmlsdGVyKGZvclR5cGUpKHRyYW5zKTtcbiAgICBpZiAodHJhbnNGb3JUeXBlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgdCA9IGF3YWl0IHZlcmlmeSh0cmFuc0ZvclR5cGVbMF0pO1xuICAgICAgcmV0dXJuICh0LnZlcmlmaWVkID09PSB0cnVlID8gdCA6IG51bGwpO1xuICAgIH1cbiAgICBmb3IgKGxldCB0IG9mIHRyYW5zRm9yVHlwZSkge1xuICAgICAgdCA9IGF3YWl0IHZlcmlmeSh0KTtcbiAgICAgIGlmICh0LnZlcmlmaWVkID09PSB0cnVlKSB7IHJldHVybiB0OyB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH07XG5cbiAgZm9yIChjb25zdCByZWNvcmRJZCBpbiB0cmFuc2FjdGlvbklkc0J5UmVjb3JkKSB7XG4gICAgY29uc3QgdHJhbnNJZHNGb3JSZWNvcmQgPSB0cmFuc2FjdGlvbklkc0J5UmVjb3JkW3JlY29yZElkXTtcbiAgICBpZiAodHJhbnNJZHNGb3JSZWNvcmQubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCB0ID0gYXdhaXQgdmVyaWZ5KHRyYW5zSWRzRm9yUmVjb3JkWzBdKTtcbiAgICAgIGlmICh0LnZlcmlmaWVkKSB7IGRlZHVwZWRUcmFuc2FjdGlvbnMucHVzaCh0KTsgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChzb21lKGlzRGVsZXRlKSh0cmFuc0lkc0ZvclJlY29yZCkpIHtcbiAgICAgIGNvbnN0IHQgPSBhd2FpdCB2ZXJpZnkoZmluZChpc0RlbGV0ZSkodHJhbnNJZHNGb3JSZWNvcmQpKTtcbiAgICAgIGlmICh0LnZlcmlmaWVkKSB7IGRlZHVwZWRUcmFuc2FjdGlvbnMucHVzaCh0KTsgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChzb21lKGlzVXBkYXRlKSh0cmFuc0lkc0ZvclJlY29yZCkpIHtcbiAgICAgIGNvbnN0IHVwZCA9IGF3YWl0IHBpY2tPbmUodHJhbnNJZHNGb3JSZWNvcmQsIGlzVXBkYXRlKTtcbiAgICAgIGlmIChpc1NvbWV0aGluZyh1cGQpICYmIHVwZC52ZXJpZmllZCkgeyBkZWR1cGVkVHJhbnNhY3Rpb25zLnB1c2godXBkKTsgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChzb21lKGlzQ3JlYXRlKSh0cmFuc0lkc0ZvclJlY29yZCkpIHtcbiAgICAgIGNvbnN0IGNyZSA9IGF3YWl0IHBpY2tPbmUodHJhbnNJZHNGb3JSZWNvcmQsIGlzQ3JlYXRlKTtcbiAgICAgIGlmIChpc1NvbWV0aGluZyhjcmUpKSB7IGRlZHVwZWRUcmFuc2FjdGlvbnMucHVzaChjcmUpOyB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gIH1cblxuICBjb25zdCBkdXBsaWNhdGVzID0gJCh0cmFuc2FjdGlvbklkcywgW1xuICAgIGZpbHRlcih0ID0+IG5vbmUoZGR0ID0+IGRkdC51bmlxdWVJZCA9PT0gdC51bmlxdWVJZCkoZGVkdXBlZFRyYW5zYWN0aW9ucykpLFxuICBdKTtcblxuXG4gIGNvbnN0IGRlbGV0ZVByb21pc2VzID0gbWFwKHQgPT4gYXBwLmRhdGFzdG9yZS5kZWxldGVGaWxlKFxuICAgIGpvaW5LZXkoXG4gICAgICBUUkFOU0FDVElPTlNfRk9MREVSLFxuICAgICAgZ2V0VHJhbnNhY3Rpb25JZChcbiAgICAgICAgdC5yZWNvcmRJZCxcbiAgICAgICAgdC50cmFuc2FjdGlvblR5cGUsXG4gICAgICAgIHQudW5pcXVlSWQsXG4gICAgICApLFxuICAgICksXG4gICkpKGR1cGxpY2F0ZXMpO1xuXG4gIGF3YWl0IFByb21pc2UuYWxsKGRlbGV0ZVByb21pc2VzKTtcblxuICByZXR1cm4gZGVkdXBlZFRyYW5zYWN0aW9ucztcbn07XG5cbmNvbnN0IHBhcnNlVHJhbnNhY3Rpb25JZCA9IChpZCkgPT4ge1xuICBjb25zdCBzcGxpdElkID0gc3BsaXQoaWRTZXApKGlkKTtcbiAgcmV0dXJuICh7XG4gICAgcmVjb3JkSWQ6IHNwbGl0SWRbMF0sXG4gICAgdHJhbnNhY3Rpb25UeXBlOiBzcGxpdElkWzFdLFxuICAgIHVuaXF1ZUlkOiBzcGxpdElkWzJdLFxuICAgIGZ1bGxJZDogaWQsXG4gIH0pO1xufTtcbiIsImltcG9ydCB7IG9yZGVyQnkgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgcmVkdWNlLCBmaW5kLCBpbmNsdWRlcywgZmxhdHRlbiwgdW5pb24sXG4gIGZpbHRlciwgZWFjaCwgbWFwLFxufSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHtcbiAgam9pbktleSwgc3BsaXRLZXksIGlzTm9uRW1wdHlTdHJpbmcsXG4gIGlzTm90aGluZywgJCwgaXNTb21ldGhpbmcsXG59IGZyb20gJy4uL2NvbW1vbic7XG5pbXBvcnQge1xuICBnZXRGbGF0dGVuZWRIaWVyYXJjaHksIGdldE5vZGUsIGdldFJlY29yZE5vZGVJZCxcbiAgZ2V0RXhhY3ROb2RlRm9yUGF0aCwgcmVjb3JkTm9kZUlkSXNBbGxvd2VkLFxuICBpc1JlY29yZCwgaXNHbG9iYWxJbmRleCxcbn0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7IGluZGV4VHlwZXMgfSBmcm9tICcuLi90ZW1wbGF0ZUFwaS9pbmRleGVzJztcblxuZXhwb3J0IGNvbnN0IGdldFJlbGV2YW50QW5jZXN0b3JJbmRleGVzID0gKGFwcEhpZXJhcmNoeSwgcmVjb3JkKSA9PiB7XG4gIGNvbnN0IGtleSA9IHJlY29yZC5rZXk7XG4gIGNvbnN0IGtleVBhcnRzID0gc3BsaXRLZXkoa2V5KTtcbiAgY29uc3Qgbm9kZUlkID0gZ2V0UmVjb3JkTm9kZUlkKGtleSk7XG5cbiAgY29uc3QgZmxhdEhpZXJhcmNoeSA9IG9yZGVyQnkoZ2V0RmxhdHRlbmVkSGllcmFyY2h5KGFwcEhpZXJhcmNoeSksXG4gICAgW25vZGUgPT4gbm9kZS5wYXRoUmVneCgpLmxlbmd0aF0sXG4gICAgWydkZXNjJ10pO1xuXG4gIGNvbnN0IG1ha2VpbmRleE5vZGVBbmRLZXlfRm9yQW5jZXN0b3JJbmRleCA9IChpbmRleE5vZGUsIGluZGV4S2V5KSA9PiBtYWtlSW5kZXhOb2RlQW5kS2V5KGluZGV4Tm9kZSwgam9pbktleShpbmRleEtleSwgaW5kZXhOb2RlLm5hbWUpKTtcblxuICBjb25zdCB0cmF2ZXJzZUFuY2VzdG9ySW5kZXhlc0luUGF0aCA9ICgpID0+IHJlZHVjZSgoYWNjLCBwYXJ0KSA9PiB7XG4gICAgY29uc3QgY3VycmVudEluZGV4S2V5ID0gam9pbktleShhY2MubGFzdEluZGV4S2V5LCBwYXJ0KTtcbiAgICBhY2MubGFzdEluZGV4S2V5ID0gY3VycmVudEluZGV4S2V5O1xuICAgIGNvbnN0IHRlc3RQYXRoUmVneCA9IHAgPT4gbmV3IFJlZ0V4cChgJHtwLnBhdGhSZWd4KCl9JGApLnRlc3QoY3VycmVudEluZGV4S2V5KTtcbiAgICBjb25zdCBub2RlTWF0Y2ggPSBmaW5kKHRlc3RQYXRoUmVneCkoZmxhdEhpZXJhcmNoeSk7XG5cbiAgICBpZiAoaXNOb3RoaW5nKG5vZGVNYXRjaCkpIHsgcmV0dXJuIGFjYzsgfVxuXG4gICAgaWYgKCFpc1JlY29yZChub2RlTWF0Y2gpXG4gICAgICAgICAgICAgICAgfHwgbm9kZU1hdGNoLmluZGV4ZXMubGVuZ3RoID09PSAwKSB7IHJldHVybiBhY2M7IH1cblxuICAgIGNvbnN0IGluZGV4ZXMgPSAkKG5vZGVNYXRjaC5pbmRleGVzLCBbXG4gICAgICBmaWx0ZXIoaSA9PiBpLmluZGV4VHlwZSA9PT0gaW5kZXhUeXBlcy5hbmNlc3RvclxuICAgICAgICAgICAgICAgICAgICAgICAgJiYgKGkuYWxsb3dlZFJlY29yZE5vZGVJZHMubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgICAgICAgICAgfHwgaW5jbHVkZXMobm9kZUlkKShpLmFsbG93ZWRSZWNvcmROb2RlSWRzKSkpLFxuICAgIF0pO1xuXG4gICAgZWFjaCh2ID0+IGFjYy5ub2Rlc0FuZEtleXMucHVzaChcbiAgICAgIG1ha2VpbmRleE5vZGVBbmRLZXlfRm9yQW5jZXN0b3JJbmRleCh2LCBjdXJyZW50SW5kZXhLZXkpLFxuICAgICkpKGluZGV4ZXMpO1xuXG4gICAgcmV0dXJuIGFjYztcbiAgfSwgeyBsYXN0SW5kZXhLZXk6ICcnLCBub2Rlc0FuZEtleXM6IFtdIH0pKGtleVBhcnRzKS5ub2Rlc0FuZEtleXM7XG5cbiAgY29uc3Qgcm9vdEluZGV4ZXMgPSAkKGZsYXRIaWVyYXJjaHksIFtcbiAgICBmaWx0ZXIobiA9PiBpc0dsb2JhbEluZGV4KG4pICYmIHJlY29yZE5vZGVJZElzQWxsb3dlZChuKShub2RlSWQpKSxcbiAgICBtYXAoaSA9PiBtYWtlSW5kZXhOb2RlQW5kS2V5KGksIGkubm9kZUtleSgpKSksXG4gIF0pO1xuXG4gIHJldHVybiB1bmlvbih0cmF2ZXJzZUFuY2VzdG9ySW5kZXhlc0luUGF0aCgpKShyb290SW5kZXhlcyk7XG59O1xuXG5leHBvcnQgY29uc3QgZ2V0UmVsZXZhbnRSZXZlcnNlUmVmZXJlbmNlSW5kZXhlcyA9IChhcHBIaWVyYXJjaHksIHJlY29yZCkgPT4gJChyZWNvcmQua2V5LCBbXG4gIGdldEV4YWN0Tm9kZUZvclBhdGgoYXBwSGllcmFyY2h5KSxcbiAgbiA9PiBuLmZpZWxkcyxcbiAgZmlsdGVyKGYgPT4gZi50eXBlID09PSAncmVmZXJlbmNlJ1xuICAgICAgICAgICAgICAgICAgICAmJiBpc1NvbWV0aGluZyhyZWNvcmRbZi5uYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgJiYgaXNOb25FbXB0eVN0cmluZyhyZWNvcmRbZi5uYW1lXS5rZXkpKSxcbiAgbWFwKGYgPT4gJChmLnR5cGVPcHRpb25zLnJldmVyc2VJbmRleE5vZGVLZXlzLCBbXG4gICAgbWFwKG4gPT4gKHtcbiAgICAgIHJlY29yZE5vZGU6IGdldE5vZGUoYXBwSGllcmFyY2h5LCBuKSxcbiAgICAgIGZpZWxkOiBmLFxuICAgIH0pKSxcbiAgXSkpLFxuICBmbGF0dGVuLFxuICBtYXAobiA9PiBtYWtlSW5kZXhOb2RlQW5kS2V5KFxuICAgIG4ucmVjb3JkTm9kZSxcbiAgICBqb2luS2V5KHJlY29yZFtuLmZpZWxkLm5hbWVdLmtleSwgbi5yZWNvcmROb2RlLm5hbWUpLFxuICApKSxcbl0pO1xuXG5jb25zdCBtYWtlSW5kZXhOb2RlQW5kS2V5ID0gKGluZGV4Tm9kZSwgaW5kZXhLZXkpID0+ICh7IGluZGV4Tm9kZSwgaW5kZXhLZXkgfSk7XG5cbmV4cG9ydCBkZWZhdWx0IGdldFJlbGV2YW50QW5jZXN0b3JJbmRleGVzO1xuIiwiICAvLyBhZGFwdGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2RleDRlci9qcy1wcm9taXNlLXdyaXRhYmxlXHJcbiAgLy8gVGhhbmsgeW91IDopIFxyXG4gIGV4cG9ydCBjb25zdCBwcm9taXNlV3JpdGVhYmxlU3RyZWFtID0gc3RyZWFtID0+IHtcclxuICBcclxuICAgIGxldCBfZXJyb3JlZDtcclxuICBcclxuICAgIGNvbnN0IF9lcnJvckhhbmRsZXIgPSBlcnIgPT4ge1xyXG4gICAgICAgIF9lcnJvcmVkID0gZXJyO1xyXG4gICAgfTtcclxuXHJcbiAgICBzdHJlYW0ub24oXCJlcnJvclwiLCBfZXJyb3JIYW5kbGVyKTsgICAgXHJcbiAgXHJcbiAgICBjb25zdCB3cml0ZSA9IGNodW5rID0+IHsgIFxyXG4gICAgICBsZXQgcmVqZWN0ZWQgPSBmYWxzZTtcclxuICBcclxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgICBpZiAoX2Vycm9yZWQpIHtcclxuICAgICAgICAgIGNvbnN0IGVyciA9IF9lcnJvcmVkO1xyXG4gICAgICAgICAgX2Vycm9yZWQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGlmICghc3RyZWFtLndyaXRhYmxlIHx8IHN0cmVhbS5jbG9zZWQgfHwgc3RyZWFtLmRlc3Ryb3llZCkge1xyXG4gICAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgRXJyb3IoXCJ3cml0ZSBhZnRlciBlbmRcIikpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjb25zdCB3cml0ZUVycm9ySGFuZGxlciA9IGVyciA9PiB7XHJcbiAgICAgICAgICBfZXJyb3JlZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIHJlamVjdGVkID0gdHJ1ZTtcclxuICAgICAgICAgIHJlamVjdChlcnIpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBzdHJlYW0ub25jZShcImVycm9yXCIsIHdyaXRlRXJyb3JIYW5kbGVyKTtcclxuICBcclxuICAgICAgICBjb25zdCBjYW5Xcml0ZSA9IHN0cmVhbS53cml0ZShjaHVuayk7XHJcbiAgXHJcbiAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIiwgd3JpdGVFcnJvckhhbmRsZXIpO1xyXG4gIFxyXG4gICAgICAgIGlmIChjYW5Xcml0ZSkge1xyXG4gICAgICAgICAgaWYgKCFyZWplY3RlZCkge1xyXG4gICAgICAgICAgICByZXNvbHZlKGNodW5rLmxlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IGVycm9ySGFuZGxlciA9IGVyciA9PiB7XHJcbiAgICAgICAgICAgIF9lcnJvcmVkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcclxuICAgICAgICAgICAgcmVqZWN0KGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICBjb25zdCBkcmFpbkhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xyXG4gICAgICAgICAgICByZXNvbHZlKGNodW5rLmxlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICBjb25zdCBjbG9zZUhhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgIHJlbW92ZUxpc3RlbmVycygpO1xyXG4gICAgICAgICAgICByZXNvbHZlKGNodW5rLmxlbmd0aCk7XHJcbiAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICBjb25zdCBmaW5pc2hIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgICAgICAgICByZW1vdmVMaXN0ZW5lcnMoKTtcclxuICAgICAgICAgICAgcmVzb2x2ZShjaHVuay5sZW5ndGgpO1xyXG4gICAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgICAgY29uc3QgcmVtb3ZlTGlzdGVuZXJzID0gKCkgPT4ge1xyXG4gICAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLCBjbG9zZUhhbmRsZXIpO1xyXG4gICAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLCBkcmFpbkhhbmRsZXIpO1xyXG4gICAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLCBlcnJvckhhbmRsZXIpO1xyXG4gICAgICAgICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIiwgZmluaXNoSGFuZGxlcik7XHJcbiAgICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgICBzdHJlYW0ub24oXCJjbG9zZVwiLCBjbG9zZUhhbmRsZXIpO1xyXG4gICAgICAgICAgc3RyZWFtLm9uKFwiZHJhaW5cIiwgZHJhaW5IYW5kbGVyKTtcclxuICAgICAgICAgIHN0cmVhbS5vbihcImVycm9yXCIsIGVycm9ySGFuZGxlcik7XHJcbiAgICAgICAgICBzdHJlYW0ub24oXCJmaW5pc2hcIiwgZmluaXNoSGFuZGxlcik7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gIFxyXG4gICAgY29uc3QgZW5kID0gKCkgPT4ge1xyXG4gIFxyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xyXG4gICAgICAgIGlmIChfZXJyb3JlZCkge1xyXG4gICAgICAgICAgY29uc3QgZXJyID0gX2Vycm9yZWQ7XHJcbiAgICAgICAgICBfZXJyb3JlZCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgaWYgKCFzdHJlYW0ud3JpdGFibGUgfHwgc3RyZWFtLmNsb3NlZCB8fCBzdHJlYW0uZGVzdHJveWVkKSB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzb2x2ZSgpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBjb25zdCBmaW5pc2hIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XHJcbiAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNvbnN0IGVycm9ySGFuZGxlciA9IChlcnIpID0+IHtcclxuICAgICAgICAgIF9lcnJvcmVkID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgcmVtb3ZlTGlzdGVuZXJzKCk7XHJcbiAgICAgICAgICByZWplY3QoZXJyKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgY29uc3QgcmVtb3ZlTGlzdGVuZXJzID0gKCkgPT4ge1xyXG4gICAgICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIiwgZXJyb3JIYW5kbGVyKTtcclxuICAgICAgICAgIHN0cmVhbS5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLCBmaW5pc2hIYW5kbGVyKTtcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgc3RyZWFtLm9uKFwiZmluaXNoXCIsIGZpbmlzaEhhbmRsZXIpO1xyXG4gICAgICAgIHN0cmVhbS5vbihcImVycm9yXCIsIGVycm9ySGFuZGxlcik7XHJcbiAgXHJcbiAgICAgICAgc3RyZWFtLmVuZCgpO1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB7d3JpdGUsIGVuZH07XHJcbiAgfVxyXG4gIFxyXG4gIGV4cG9ydCBkZWZhdWx0IHByb21pc2VXcml0ZWFibGVTdHJlYW1cclxuICAiLCJpbXBvcnQgeyBlbnN1cmVTaGFyZE5hbWVJc0luU2hhcmRNYXAgfSBmcm9tICcuL3NoYXJkaW5nJztcbmltcG9ydCB7IGdldEluZGV4V3JpdGVyIH0gZnJvbSAnLi9zZXJpYWxpemVyJztcbmltcG9ydCB7IGlzU2hhcmRlZEluZGV4IH0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7cHJvbWlzZVdyaXRlYWJsZVN0cmVhbX0gZnJvbSBcIi4vcHJvbWlzZVdyaXRhYmxlU3RyZWFtXCI7XG5pbXBvcnQge3Byb21pc2VSZWFkYWJsZVN0cmVhbX0gZnJvbSBcIi4vcHJvbWlzZVJlYWRhYmxlU3RyZWFtXCI7XG5cbmV4cG9ydCBjb25zdCBhcHBseVRvU2hhcmQgPSBhc3luYyAoaGllcmFyY2h5LCBzdG9yZSwgaW5kZXhLZXksXG4gIGluZGV4Tm9kZSwgaW5kZXhTaGFyZEtleSwgcmVjb3Jkc1RvV3JpdGUsIGtleXNUb1JlbW92ZSkgPT4ge1xuICBjb25zdCBjcmVhdGVJZk5vdEV4aXN0cyA9IHJlY29yZHNUb1dyaXRlLmxlbmd0aCA+IDA7XG4gIGNvbnN0IHdyaXRlciA9IGF3YWl0IGdldFdyaXRlcihoaWVyYXJjaHksIHN0b3JlLCBpbmRleEtleSwgaW5kZXhTaGFyZEtleSwgaW5kZXhOb2RlLCBjcmVhdGVJZk5vdEV4aXN0cyk7XG4gIGlmICh3cml0ZXIgPT09IFNIQVJEX0RFTEVURUQpIHJldHVybjtcblxuICBhd2FpdCB3cml0ZXIudXBkYXRlSW5kZXgocmVjb3Jkc1RvV3JpdGUsIGtleXNUb1JlbW92ZSk7XG4gIGF3YWl0IHN3YXBUZW1wRmlsZUluKHN0b3JlLCBpbmRleFNoYXJkS2V5KTtcbn07XG5cbmNvbnN0IFNIQVJEX0RFTEVURUQgPSAnU0hBUkRfREVMRVRFRCc7XG5jb25zdCBnZXRXcml0ZXIgPSBhc3luYyAoaGllcmFyY2h5LCBzdG9yZSwgaW5kZXhLZXksIGluZGV4ZWREYXRhS2V5LCBpbmRleE5vZGUsIGNyZWF0ZUlmTm90RXhpc3RzKSA9PiB7XG4gIGxldCByZWFkYWJsZVN0cmVhbSA9IG51bGw7XG5cbiAgaWYgKGlzU2hhcmRlZEluZGV4KGluZGV4Tm9kZSkpIHtcbiAgICBhd2FpdCBlbnN1cmVTaGFyZE5hbWVJc0luU2hhcmRNYXAoc3RvcmUsIGluZGV4S2V5LCBpbmRleGVkRGF0YUtleSk7XG4gICAgaWYoIWF3YWl0IHN0b3JlLmV4aXN0cyhpbmRleGVkRGF0YUtleSkpIHtcbiAgICAgIGF3YWl0IHN0b3JlLmNyZWF0ZUZpbGUoaW5kZXhlZERhdGFLZXksIFwiXCIpO1xuICAgIH1cbiAgfVxuXG4gIHRyeSB7XG5cbiAgICByZWFkYWJsZVN0cmVhbSA9IHByb21pc2VSZWFkYWJsZVN0cmVhbShcbiAgICAgICAgYXdhaXQgc3RvcmUucmVhZGFibGVGaWxlU3RyZWFtKGluZGV4ZWREYXRhS2V5KVxuICAgICk7XG5cbiAgfSBjYXRjaCAoZSkge1xuXG4gICAgaWYgKGF3YWl0IHN0b3JlLmV4aXN0cyhpbmRleGVkRGF0YUtleSkpIHtcbiAgICAgIHRocm93IGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChjcmVhdGVJZk5vdEV4aXN0cykgeyBcbiAgICAgICAgYXdhaXQgc3RvcmUuY3JlYXRlRmlsZShpbmRleGVkRGF0YUtleSwgJycpOyBcbiAgICAgIH0gZWxzZSB7IFxuICAgICAgICByZXR1cm4gU0hBUkRfREVMRVRFRDsgXG4gICAgICB9XG5cbiAgICAgIHJlYWRhYmxlU3RyZWFtID0gcHJvbWlzZVJlYWRhYmxlU3RyZWFtKFxuICAgICAgICAgIGF3YWl0IHN0b3JlLnJlYWRhYmxlRmlsZVN0cmVhbShpbmRleGVkRGF0YUtleSlcbiAgICAgICk7XG5cbiAgICB9XG4gIH1cblxuICBjb25zdCB3cml0YWJsZVN0cmVhbSA9IHByb21pc2VXcml0ZWFibGVTdHJlYW0oXG4gICAgICBhd2FpdCBzdG9yZS53cml0YWJsZUZpbGVTdHJlYW0oaW5kZXhlZERhdGFLZXkgKyBcIi50ZW1wXCIpXG4gICk7XG5cbiAgcmV0dXJuIGdldEluZGV4V3JpdGVyKFxuICAgIGhpZXJhcmNoeSwgaW5kZXhOb2RlLFxuICAgICAgICByZWFkYWJsZVN0cmVhbSwgd3JpdGFibGVTdHJlYW1cbiAgKTtcbn07XG5cbmNvbnN0IHN3YXBUZW1wRmlsZUluID0gYXN5bmMgKHN0b3JlLCBpbmRleGVkRGF0YUtleSwgaXNSZXRyeSA9IGZhbHNlKSA9PiB7XG4gIGNvbnN0IHRlbXBGaWxlID0gYCR7aW5kZXhlZERhdGFLZXl9LnRlbXBgO1xuICB0cnkge1xuICAgIGF3YWl0IHN0b3JlLmRlbGV0ZUZpbGUoaW5kZXhlZERhdGFLZXkpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgLy8gaWdub3JlIGZhaWx1cmUsIGluY2FzZSBpdCBoYXMgbm90IGJlZW4gY3JlYXRlZCB5ZXRcbiAgfVxuICB0cnkge1xuICAgIGF3YWl0IHN0b3JlLnJlbmFtZUZpbGUodGVtcEZpbGUsIGluZGV4ZWREYXRhS2V5KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIHJldHJ5aW5nIGluIGNhc2UgZGVsZXRlIGZhaWx1cmUgd2FzIGZvciBzb21lIG90aGVyIHJlYXNvblxuICAgIGlmICghaXNSZXRyeSkge1xuICAgICAgYXdhaXQgc3dhcFRlbXBGaWxlSW4oc3RvcmUsIGluZGV4ZWREYXRhS2V5LCB0cnVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHN3YXAgaW4gaW5kZXggZmlsZWQ6IFwiICsgZS5tZXNzYWdlKTtcbiAgICB9XG4gIH1cbn07XG4iLCJpbXBvcnQge1xuICBmaWx0ZXIsIG1hcCwgaXNVbmRlZmluZWQsIGluY2x1ZGVzLFxuICBmbGF0dGVuLCBpbnRlcnNlY3Rpb25CeSxcbiAgaXNFcXVhbCwgcHVsbCwga2V5cyxcbiAgZGlmZmVyZW5jZUJ5LCBkaWZmZXJlbmNlLFxufSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgdW5pb24gfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IHtcbiAgZ2V0UmVsZXZhbnRBbmNlc3RvckluZGV4ZXMsXG4gIGdldFJlbGV2YW50UmV2ZXJzZVJlZmVyZW5jZUluZGV4ZXMsXG59IGZyb20gJy4uL2luZGV4aW5nL3JlbGV2YW50JztcbmltcG9ydCB7IGV2YWx1YXRlIH0gZnJvbSAnLi4vaW5kZXhpbmcvZXZhbHVhdGUnO1xuaW1wb3J0IHtcbiAgJCwgaXNTb21ldGhpbmcsXG4gIGlzTm9uRW1wdHlBcnJheSwgam9pbktleSxcbiAgaXNOb25FbXB0eVN0cmluZyxcbn0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IGdldEluZGV4ZWREYXRhS2V5IH0gZnJvbSAnLi4vaW5kZXhpbmcvc2hhcmRpbmcnO1xuaW1wb3J0IHtcbiAgaXNVcGRhdGUsIGlzQ3JlYXRlLFxuICBpc0RlbGV0ZSwgaXNCdWlsZEluZGV4LFxufSBmcm9tICcuL3RyYW5zYWN0aW9uc0NvbW1vbic7XG5pbXBvcnQgeyBhcHBseVRvU2hhcmQgfSBmcm9tICcuLi9pbmRleGluZy9hcHBseSc7XG5pbXBvcnQge1xuICBnZXRBY3R1YWxLZXlPZlBhcmVudCxcbiAgaXNHbG9iYWxJbmRleCwgZmllbGRSZXZlcnNlc1JlZmVyZW5jZVRvSW5kZXgsIGlzUmVmZXJlbmNlSW5kZXgsXG4gIGdldEV4YWN0Tm9kZUZvclBhdGgsXG59IGZyb20gJy4uL3RlbXBsYXRlQXBpL2hpZXJhcmNoeSc7XG5cbmV4cG9ydCBjb25zdCBleGVjdXRlVHJhbnNhY3Rpb25zID0gYXBwID0+IGFzeW5jICh0cmFuc2FjdGlvbnMpID0+IHtcbiAgY29uc3QgcmVjb3Jkc0J5U2hhcmQgPSBtYXBwZWRSZWNvcmRzQnlJbmRleFNoYXJkKGFwcC5oaWVyYXJjaHksIHRyYW5zYWN0aW9ucyk7XG5cbiAgZm9yIChjb25zdCBzaGFyZCBvZiBrZXlzKHJlY29yZHNCeVNoYXJkKSkge1xuICAgIGF3YWl0IGFwcGx5VG9TaGFyZChcbiAgICAgIGFwcC5oaWVyYXJjaHksIGFwcC5kYXRhc3RvcmUsXG4gICAgICByZWNvcmRzQnlTaGFyZFtzaGFyZF0uaW5kZXhLZXksXG4gICAgICByZWNvcmRzQnlTaGFyZFtzaGFyZF0uaW5kZXhOb2RlLFxuICAgICAgc2hhcmQsXG4gICAgICByZWNvcmRzQnlTaGFyZFtzaGFyZF0ud3JpdGVzLFxuICAgICAgcmVjb3Jkc0J5U2hhcmRbc2hhcmRdLnJlbW92ZXMsXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgbWFwcGVkUmVjb3Jkc0J5SW5kZXhTaGFyZCA9IChoaWVyYXJjaHksIHRyYW5zYWN0aW9ucykgPT4ge1xuICBjb25zdCB1cGRhdGVzID0gZ2V0VXBkYXRlVHJhbnNhY3Rpb25zQnlTaGFyZChcbiAgICBoaWVyYXJjaHksIHRyYW5zYWN0aW9ucyxcbiAgKTtcblxuICBjb25zdCBjcmVhdGVkID0gZ2V0Q3JlYXRlVHJhbnNhY3Rpb25zQnlTaGFyZChcbiAgICBoaWVyYXJjaHksIHRyYW5zYWN0aW9ucyxcbiAgKTtcbiAgY29uc3QgZGVsZXRlcyA9IGdldERlbGV0ZVRyYW5zYWN0aW9uc0J5U2hhcmQoXG4gICAgaGllcmFyY2h5LCB0cmFuc2FjdGlvbnMsXG4gICk7XG5cbiAgY29uc3QgaW5kZXhCdWlsZCA9IGdldEJ1aWxkSW5kZXhUcmFuc2FjdGlvbnNCeVNoYXJkKFxuICAgIGhpZXJhcmNoeSxcbiAgICB0cmFuc2FjdGlvbnMsXG4gICk7XG5cbiAgY29uc3QgdG9SZW1vdmUgPSBbXG4gICAgLi4uZGVsZXRlcyxcbiAgICAuLi51cGRhdGVzLnRvUmVtb3ZlLFxuICBdO1xuXG4gIGNvbnN0IHRvV3JpdGUgPSBbXG4gICAgLi4uY3JlYXRlZCxcbiAgICAuLi51cGRhdGVzLnRvV3JpdGUsXG4gICAgLi4uaW5kZXhCdWlsZCxcbiAgXTtcblxuICBjb25zdCB0cmFuc0J5U2hhcmQgPSB7fTtcblxuICBjb25zdCBpbml0aWFsaXNlU2hhcmQgPSAodCkgPT4ge1xuICAgIGlmIChpc1VuZGVmaW5lZCh0cmFuc0J5U2hhcmRbdC5pbmRleFNoYXJkS2V5XSkpIHtcbiAgICAgIHRyYW5zQnlTaGFyZFt0LmluZGV4U2hhcmRLZXldID0ge1xuICAgICAgICB3cml0ZXM6IFtdLFxuICAgICAgICByZW1vdmVzOiBbXSxcbiAgICAgICAgaW5kZXhLZXk6IHQuaW5kZXhLZXksXG4gICAgICAgIGluZGV4Tm9kZUtleTogdC5pbmRleE5vZGVLZXksXG4gICAgICAgIGluZGV4Tm9kZTogdC5pbmRleE5vZGUsXG4gICAgICB9O1xuICAgIH1cbiAgfTtcblxuICBmb3IgKGNvbnN0IHRyYW5zIG9mIHRvV3JpdGUpIHtcbiAgICBpbml0aWFsaXNlU2hhcmQodHJhbnMpO1xuICAgIHRyYW5zQnlTaGFyZFt0cmFucy5pbmRleFNoYXJkS2V5XS53cml0ZXMucHVzaChcbiAgICAgIHRyYW5zLm1hcHBlZFJlY29yZC5yZXN1bHQsXG4gICAgKTtcbiAgfVxuXG4gIGZvciAoY29uc3QgdHJhbnMgb2YgdG9SZW1vdmUpIHtcbiAgICBpbml0aWFsaXNlU2hhcmQodHJhbnMpO1xuICAgIHRyYW5zQnlTaGFyZFt0cmFucy5pbmRleFNoYXJkS2V5XS5yZW1vdmVzLnB1c2goXG4gICAgICB0cmFucy5tYXBwZWRSZWNvcmQucmVzdWx0LmtleSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHRyYW5zQnlTaGFyZDtcbn07XG5cbmNvbnN0IGdldFVwZGF0ZVRyYW5zYWN0aW9uc0J5U2hhcmQgPSAoaGllcmFyY2h5LCB0cmFuc2FjdGlvbnMpID0+IHtcbiAgY29uc3QgdXBkYXRlVHJhbnNhY3Rpb25zID0gJCh0cmFuc2FjdGlvbnMsIFtmaWx0ZXIoaXNVcGRhdGUpXSk7XG5cbiAgY29uc3QgZXZhbHVhdGVJbmRleCA9IChyZWNvcmQsIGluZGV4Tm9kZUFuZFBhdGgpID0+IHtcbiAgICBjb25zdCBtYXBwZWRSZWNvcmQgPSBldmFsdWF0ZShyZWNvcmQpKGluZGV4Tm9kZUFuZFBhdGguaW5kZXhOb2RlKTtcbiAgICByZXR1cm4gKHtcbiAgICAgIG1hcHBlZFJlY29yZCxcbiAgICAgIGluZGV4Tm9kZTogaW5kZXhOb2RlQW5kUGF0aC5pbmRleE5vZGUsXG4gICAgICBpbmRleEtleTogaW5kZXhOb2RlQW5kUGF0aC5pbmRleEtleSxcbiAgICAgIGluZGV4U2hhcmRLZXk6IGdldEluZGV4ZWREYXRhS2V5KFxuICAgICAgICBpbmRleE5vZGVBbmRQYXRoLmluZGV4Tm9kZSxcbiAgICAgICAgaW5kZXhOb2RlQW5kUGF0aC5pbmRleEtleSxcbiAgICAgICAgbWFwcGVkUmVjb3JkLnJlc3VsdCxcbiAgICAgICksXG4gICAgfSk7XG4gIH07XG5cbiAgY29uc3QgZ2V0SW5kZXhOb2Rlc1RvQXBwbHkgPSBpbmRleEZpbHRlciA9PiAodCwgaW5kZXhlcykgPT4gJChpbmRleGVzLCBbXG4gICAgbWFwKG4gPT4gKHtcbiAgICAgIG9sZDogZXZhbHVhdGVJbmRleCh0Lm9sZFJlY29yZCwgbiksXG4gICAgICBuZXc6IGV2YWx1YXRlSW5kZXgodC5yZWNvcmQsIG4pLFxuICAgIH0pKSxcbiAgICBmaWx0ZXIoaW5kZXhGaWx0ZXIpLFxuICBdKTtcblxuICBjb25zdCB0b1JlbW92ZUZpbHRlciA9IChuLCBpc1VucmVmZXJlbmNlZCkgPT4gbi5vbGQubWFwcGVkUmVjb3JkLnBhc3NlZEZpbHRlciA9PT0gdHJ1ZVxuICAgICAgICAmJiAobi5uZXcubWFwcGVkUmVjb3JkLnBhc3NlZEZpbHRlciA9PT0gZmFsc2VcbiAgICAgICAgICAgIHx8IGlzVW5yZWZlcmVuY2VkKTtcblxuICBjb25zdCB0b0FkZEZpbHRlciA9IChuLCBpc05ld2x5UmVmZXJlbmNlZCkgPT4gKG4ub2xkLm1hcHBlZFJlY29yZC5wYXNzZWRGaWx0ZXIgPT09IGZhbHNlXG4gICAgICAgIHx8IGlzTmV3bHlSZWZlcmVuY2VkKVxuICAgICAgICAmJiBuLm5ldy5tYXBwZWRSZWNvcmQucGFzc2VkRmlsdGVyID09PSB0cnVlO1xuXG4gIGNvbnN0IHRvVXBkYXRlRmlsdGVyID0gbiA9PiBuLm5ldy5tYXBwZWRSZWNvcmQucGFzc2VkRmlsdGVyID09PSB0cnVlXG4gICAgICAgICYmIG4ub2xkLm1hcHBlZFJlY29yZC5wYXNzZWRGaWx0ZXIgPT09IHRydWVcbiAgICAgICAgJiYgIWlzRXF1YWwobi5vbGQubWFwcGVkUmVjb3JkLnJlc3VsdCxcbiAgICAgICAgICBuLm5ldy5tYXBwZWRSZWNvcmQucmVzdWx0KTtcblxuICBjb25zdCB0b1JlbW92ZSA9IFtdO1xuICBjb25zdCB0b1dyaXRlID0gW107XG5cbiAgZm9yIChjb25zdCB0IG9mIHVwZGF0ZVRyYW5zYWN0aW9ucykge1xuICAgIGNvbnN0IGFuY2VzdG9ySWR4cyA9IGdldFJlbGV2YW50QW5jZXN0b3JJbmRleGVzKFxuICAgICAgaGllcmFyY2h5LCB0LnJlY29yZCxcbiAgICApO1xuXG4gICAgY29uc3QgcmVmZXJlbmNlQ2hhbmdlcyA9IGRpZmZSZXZlcnNlUmVmRm9yVXBkYXRlKFxuICAgICAgaGllcmFyY2h5LCB0Lm9sZFJlY29yZCwgdC5yZWNvcmQsXG4gICAgKTtcblxuICAgIC8vIG9sZCByZWNvcmRzIHRvIHJlbW92ZSAoZmlsdGVyZWQgb3V0KVxuICAgIGNvbnN0IGZpbHRlcmVkT3V0X3RvUmVtb3ZlID0gdW5pb24oXG4gICAgICBnZXRJbmRleE5vZGVzVG9BcHBseSh0b1JlbW92ZUZpbHRlcikodCwgYW5jZXN0b3JJZHhzKSxcbiAgICAgIC8vIHN0aWxsIHJlZmVyZW5jZWQgLSBjaGVjayBmaWx0ZXJcbiAgICAgIGdldEluZGV4Tm9kZXNUb0FwcGx5KHRvUmVtb3ZlRmlsdGVyKSh0LCByZWZlcmVuY2VDaGFuZ2VzLm5vdENoYW5nZWQpLFxuICAgICAgLy8gdW4gcmVmZXJlbmNlZCAtIHJlbW92ZSBpZiBpbiB0aGVyZSBhbHJlYWR5XG4gICAgICBnZXRJbmRleE5vZGVzVG9BcHBseShuID0+IHRvUmVtb3ZlRmlsdGVyKG4sIHRydWUpKSh0LCByZWZlcmVuY2VDaGFuZ2VzLnVuUmVmZXJlbmNlZCksXG4gICAgKTtcblxuICAgIC8vIG5ldyByZWNvcmRzIHRvIGFkZCAoZmlsdGVyZWQgaW4pXG4gICAgY29uc3QgZmlsdGVyZWRJbl90b0FkZCA9IHVuaW9uKFxuICAgICAgZ2V0SW5kZXhOb2Rlc1RvQXBwbHkodG9BZGRGaWx0ZXIpKHQsIGFuY2VzdG9ySWR4cyksXG4gICAgICAvLyBuZXdseSByZWZlcmVuY2VkIC0gY2hlY2sgZmlsdGVyXG4gICAgICBnZXRJbmRleE5vZGVzVG9BcHBseShuID0+IHRvQWRkRmlsdGVyKG4sIHRydWUpKSh0LCByZWZlcmVuY2VDaGFuZ2VzLm5ld2x5UmVmZXJlbmNlZCksXG4gICAgICAvLyByZWZlcmVuY2UgdW5jaGFuZ2VkIC0gcmVydW4gZmlsdGVyIGluIGNhc2Ugc29tZXRoaW5nIGVsc2UgY2hhbmdlZFxuICAgICAgZ2V0SW5kZXhOb2Rlc1RvQXBwbHkodG9BZGRGaWx0ZXIpKHQsIHJlZmVyZW5jZUNoYW5nZXMubm90Q2hhbmdlZCksXG4gICAgKTtcblxuICAgIGNvbnN0IGNoYW5nZWQgPSB1bmlvbihcbiAgICAgIGdldEluZGV4Tm9kZXNUb0FwcGx5KHRvVXBkYXRlRmlsdGVyKSh0LCBhbmNlc3RvcklkeHMpLFxuICAgICAgLy8gc3RpbGwgcmVmZXJlbmNlZCAtIHJlY2hlY2sgZmlsdGVyXG4gICAgICBnZXRJbmRleE5vZGVzVG9BcHBseSh0b1VwZGF0ZUZpbHRlcikodCwgcmVmZXJlbmNlQ2hhbmdlcy5ub3RDaGFuZ2VkKSxcbiAgICApO1xuXG4gICAgY29uc3Qgc2hhcmRLZXlDaGFuZ2VkID0gJChjaGFuZ2VkLCBbXG4gICAgICBmaWx0ZXIoYyA9PiBjLm9sZC5pbmRleFNoYXJkS2V5ICE9PSBjLm5ldy5pbmRleFNoYXJkS2V5KSxcbiAgICBdKTtcblxuICAgIGNvbnN0IGNoYW5nZWRJblNhbWVTaGFyZCA9ICQoc2hhcmRLZXlDaGFuZ2VkLCBbXG4gICAgICBkaWZmZXJlbmNlKGNoYW5nZWQpLFxuICAgIF0pO1xuXG4gICAgZm9yIChjb25zdCByZXMgb2Ygc2hhcmRLZXlDaGFuZ2VkKSB7XG4gICAgICBwdWxsKHJlcykoY2hhbmdlZCk7XG4gICAgICBmaWx0ZXJlZE91dF90b1JlbW92ZS5wdXNoKHJlcyk7XG4gICAgICBmaWx0ZXJlZEluX3RvQWRkLnB1c2gocmVzKTtcbiAgICB9XG5cbiAgICB0b1JlbW92ZS5wdXNoKFxuICAgICAgJChmaWx0ZXJlZE91dF90b1JlbW92ZSwgW1xuICAgICAgICBtYXAoaSA9PiBpLm9sZCksXG4gICAgICBdKSxcbiAgICApO1xuXG4gICAgdG9Xcml0ZS5wdXNoKFxuICAgICAgJChmaWx0ZXJlZEluX3RvQWRkLCBbXG4gICAgICAgIG1hcChpID0+IGkubmV3KSxcbiAgICAgIF0pLFxuICAgICk7XG5cbiAgICB0b1dyaXRlLnB1c2goXG4gICAgICAkKGNoYW5nZWRJblNhbWVTaGFyZCwgW1xuICAgICAgICBtYXAoaSA9PiBpLm5ldyksXG4gICAgICBdKSxcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuICh7XG4gICAgdG9SZW1vdmU6IGZsYXR0ZW4odG9SZW1vdmUpLFxuICAgIHRvV3JpdGU6IGZsYXR0ZW4odG9Xcml0ZSksXG4gIH0pO1xufTtcblxuY29uc3QgZ2V0QnVpbGRJbmRleFRyYW5zYWN0aW9uc0J5U2hhcmQgPSAoaGllcmFyY2h5LCB0cmFuc2FjdGlvbnMpID0+IHtcbiAgY29uc3QgYnVpbGRUcmFuc2FjdGlvbnMgPSAkKHRyYW5zYWN0aW9ucywgW2ZpbHRlcihpc0J1aWxkSW5kZXgpXSk7XG4gIGlmICghaXNOb25FbXB0eUFycmF5KGJ1aWxkVHJhbnNhY3Rpb25zKSkgcmV0dXJuIFtdO1xuICBjb25zdCBpbmRleE5vZGUgPSB0cmFuc2FjdGlvbnMuaW5kZXhOb2RlO1xuXG4gIGNvbnN0IGdldEluZGV4S2V5cyA9ICh0KSA9PiB7XG4gICAgaWYgKGlzR2xvYmFsSW5kZXgoaW5kZXhOb2RlKSkge1xuICAgICAgcmV0dXJuIFtpbmRleE5vZGUubm9kZUtleSgpXTtcbiAgICB9XG5cbiAgICBpZiAoaXNSZWZlcmVuY2VJbmRleChpbmRleE5vZGUpKSB7XG4gICAgICBjb25zdCByZWNvcmROb2RlID0gZ2V0RXhhY3ROb2RlRm9yUGF0aChoaWVyYXJjaHkpKHQucmVjb3JkLmtleSk7XG4gICAgICBjb25zdCByZWZGaWVsZHMgPSAkKHJlY29yZE5vZGUuZmllbGRzLCBbXG4gICAgICAgIGZpbHRlcihmaWVsZFJldmVyc2VzUmVmZXJlbmNlVG9JbmRleChpbmRleE5vZGUpKSxcbiAgICAgIF0pO1xuICAgICAgY29uc3QgaW5kZXhLZXlzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHJlZkZpZWxkIG9mIHJlZkZpZWxkcykge1xuICAgICAgICBjb25zdCByZWZWYWx1ZSA9IHQucmVjb3JkW3JlZkZpZWxkLm5hbWVdO1xuICAgICAgICBpZiAoaXNTb21ldGhpbmcocmVmVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgJiYgaXNOb25FbXB0eVN0cmluZyhyZWZWYWx1ZS5rZXkpKSB7XG4gICAgICAgICAgY29uc3QgaW5kZXhLZXkgPSBqb2luS2V5KFxuICAgICAgICAgICAgcmVmVmFsdWUua2V5LFxuICAgICAgICAgICAgaW5kZXhOb2RlLm5hbWUsXG4gICAgICAgICAgKTtcblxuICAgICAgICAgIGlmICghaW5jbHVkZXMoaW5kZXhLZXkpKGluZGV4S2V5cykpIHsgaW5kZXhLZXlzLnB1c2goaW5kZXhLZXkpOyB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBpbmRleEtleXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIFtqb2luS2V5KFxuICAgICAgZ2V0QWN0dWFsS2V5T2ZQYXJlbnQoXG4gICAgICAgIGluZGV4Tm9kZS5wYXJlbnQoKS5ub2RlS2V5KCksXG4gICAgICAgIHQucmVjb3JkLmtleSxcbiAgICAgICksXG4gICAgICBpbmRleE5vZGUubmFtZSxcbiAgICApXTtcbiAgfTtcblxuICByZXR1cm4gJChidWlsZFRyYW5zYWN0aW9ucywgW1xuICAgIG1hcCgodCkgPT4ge1xuICAgICAgY29uc3QgbWFwcGVkUmVjb3JkID0gZXZhbHVhdGUodC5yZWNvcmQpKGluZGV4Tm9kZSk7XG4gICAgICBpZiAoIW1hcHBlZFJlY29yZC5wYXNzZWRGaWx0ZXIpIHJldHVybiBudWxsO1xuICAgICAgY29uc3QgaW5kZXhLZXlzID0gZ2V0SW5kZXhLZXlzKHQpO1xuICAgICAgcmV0dXJuICQoaW5kZXhLZXlzLCBbXG4gICAgICAgIG1hcChpbmRleEtleSA9PiAoe1xuICAgICAgICAgIG1hcHBlZFJlY29yZCxcbiAgICAgICAgICBpbmRleE5vZGUsXG4gICAgICAgICAgaW5kZXhLZXksXG4gICAgICAgICAgaW5kZXhTaGFyZEtleTogZ2V0SW5kZXhlZERhdGFLZXkoXG4gICAgICAgICAgICBpbmRleE5vZGUsXG4gICAgICAgICAgICBpbmRleEtleSxcbiAgICAgICAgICAgIG1hcHBlZFJlY29yZC5yZXN1bHQsXG4gICAgICAgICAgKSxcbiAgICAgICAgfSkpLFxuICAgICAgXSk7XG4gICAgfSksXG4gICAgZmxhdHRlbixcbiAgICBmaWx0ZXIoaXNTb21ldGhpbmcpLFxuICBdKTtcbn07XG5cbmNvbnN0IGdldF9DcmVhdGVfRGVsZXRlX1RyYW5zYWN0aW9uc0J5U2hhcmQgPSBwcmVkID0+IChoaWVyYXJjaHksIHRyYW5zYWN0aW9ucykgPT4ge1xuICBjb25zdCBjcmVhdGVUcmFuc2FjdGlvbnMgPSAkKHRyYW5zYWN0aW9ucywgW2ZpbHRlcihwcmVkKV0pO1xuXG4gIGNvbnN0IGdldEluZGV4Tm9kZXNUb0FwcGx5ID0gKHQsIGluZGV4ZXMpID0+ICQoaW5kZXhlcywgW1xuICAgIG1hcCgobikgPT4ge1xuICAgICAgY29uc3QgbWFwcGVkUmVjb3JkID0gZXZhbHVhdGUodC5yZWNvcmQpKG4uaW5kZXhOb2RlKTtcbiAgICAgIHJldHVybiAoe1xuICAgICAgICBtYXBwZWRSZWNvcmQsXG4gICAgICAgIGluZGV4Tm9kZTogbi5pbmRleE5vZGUsXG4gICAgICAgIGluZGV4S2V5OiBuLmluZGV4S2V5LFxuICAgICAgICBpbmRleFNoYXJkS2V5OiBnZXRJbmRleGVkRGF0YUtleShcbiAgICAgICAgICBuLmluZGV4Tm9kZSxcbiAgICAgICAgICBuLmluZGV4S2V5LFxuICAgICAgICAgIG1hcHBlZFJlY29yZC5yZXN1bHQsXG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9KSxcbiAgICBmaWx0ZXIobiA9PiBuLm1hcHBlZFJlY29yZC5wYXNzZWRGaWx0ZXIpLFxuICBdKTtcblxuICBjb25zdCBhbGxUb0FwcGx5ID0gW107XG5cbiAgZm9yIChjb25zdCB0IG9mIGNyZWF0ZVRyYW5zYWN0aW9ucykge1xuICAgIGNvbnN0IGFuY2VzdG9ySWR4cyA9IGdldFJlbGV2YW50QW5jZXN0b3JJbmRleGVzKGhpZXJhcmNoeSwgdC5yZWNvcmQpO1xuICAgIGNvbnN0IHJldmVyc2VSZWYgPSBnZXRSZWxldmFudFJldmVyc2VSZWZlcmVuY2VJbmRleGVzKGhpZXJhcmNoeSwgdC5yZWNvcmQpO1xuXG4gICAgYWxsVG9BcHBseS5wdXNoKFxuICAgICAgZ2V0SW5kZXhOb2Rlc1RvQXBwbHkodCwgYW5jZXN0b3JJZHhzKSxcbiAgICApO1xuICAgIGFsbFRvQXBwbHkucHVzaChcbiAgICAgIGdldEluZGV4Tm9kZXNUb0FwcGx5KHQsIHJldmVyc2VSZWYpLFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gZmxhdHRlbihhbGxUb0FwcGx5KTtcbn07XG5cbmNvbnN0IGdldERlbGV0ZVRyYW5zYWN0aW9uc0J5U2hhcmQgPSBnZXRfQ3JlYXRlX0RlbGV0ZV9UcmFuc2FjdGlvbnNCeVNoYXJkKGlzRGVsZXRlKTtcblxuY29uc3QgZ2V0Q3JlYXRlVHJhbnNhY3Rpb25zQnlTaGFyZCA9IGdldF9DcmVhdGVfRGVsZXRlX1RyYW5zYWN0aW9uc0J5U2hhcmQoaXNDcmVhdGUpO1xuXG5jb25zdCBkaWZmUmV2ZXJzZVJlZkZvclVwZGF0ZSA9IChhcHBIaWVyYXJjaHksIG9sZFJlY29yZCwgbmV3UmVjb3JkKSA9PiB7XG4gIGNvbnN0IG9sZEluZGV4ZXMgPSBnZXRSZWxldmFudFJldmVyc2VSZWZlcmVuY2VJbmRleGVzKFxuICAgIGFwcEhpZXJhcmNoeSwgb2xkUmVjb3JkLFxuICApO1xuICBjb25zdCBuZXdJbmRleGVzID0gZ2V0UmVsZXZhbnRSZXZlcnNlUmVmZXJlbmNlSW5kZXhlcyhcbiAgICBhcHBIaWVyYXJjaHksIG5ld1JlY29yZCxcbiAgKTtcblxuICBjb25zdCB1blJlZmVyZW5jZWQgPSBkaWZmZXJlbmNlQnkoXG4gICAgaSA9PiBpLmluZGV4S2V5LFxuICAgIG9sZEluZGV4ZXMsIG5ld0luZGV4ZXMsXG4gICk7XG5cbiAgY29uc3QgbmV3bHlSZWZlcmVuY2VkID0gZGlmZmVyZW5jZUJ5KFxuICAgIGkgPT4gaS5pbmRleEtleSxcbiAgICBuZXdJbmRleGVzLCBvbGRJbmRleGVzLFxuICApO1xuXG4gIGNvbnN0IG5vdENoYW5nZWQgPSBpbnRlcnNlY3Rpb25CeShcbiAgICBpID0+IGkuaW5kZXhLZXksXG4gICAgbmV3SW5kZXhlcywgb2xkSW5kZXhlcyxcbiAgKTtcblxuICByZXR1cm4ge1xuICAgIHVuUmVmZXJlbmNlZCxcbiAgICBuZXdseVJlZmVyZW5jZWQsXG4gICAgbm90Q2hhbmdlZCxcbiAgfTtcbn07XG4iLCJpbXBvcnQgeyBtYXAgfSBmcm9tICdsb2Rhc2gvZnAnO1xuaW1wb3J0IHsgcmV0cmlldmUgfSBmcm9tICcuL3JldHJpZXZlJztcbmltcG9ydCB7IGV4ZWN1dGVUcmFuc2FjdGlvbnMgfSBmcm9tICcuL2V4ZWN1dGUnO1xuaW1wb3J0IHtcbiAgJCwgam9pbktleSwgZ2V0TG9jaywgaXNOb2xvY2ssIHJlbGVhc2VMb2NrLFxufSBmcm9tICcuLi9jb21tb24nO1xuaW1wb3J0IHtcbiAgTE9DS19GSUxFX0tFWSwgVFJBTlNBQ1RJT05TX0ZPTERFUixcbiAgdGltZW91dE1pbGxpc2Vjb25kcywgZ2V0VHJhbnNhY3Rpb25JZCxcbiAgbWF4TG9ja1JldHJpZXMsXG59IGZyb20gJy4vdHJhbnNhY3Rpb25zQ29tbW9uJztcblxuZXhwb3J0IGNvbnN0IGNsZWFudXAgPSBhc3luYyAoYXBwKSA9PiB7XG4gIGNvbnN0IGxvY2sgPSBhd2FpdCBnZXRUcmFuc2FjdGlvbkxvY2soYXBwKTtcbiAgaWYgKGlzTm9sb2NrKGxvY2spKSByZXR1cm47XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbnMgPSBhd2FpdCByZXRyaWV2ZShhcHApO1xuICAgIGlmICh0cmFuc2FjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgYXdhaXQgZXhlY3V0ZVRyYW5zYWN0aW9ucyhhcHApKHRyYW5zYWN0aW9ucyk7XG5cbiAgICAgIGNvbnN0IGZvbGRlciA9IHRyYW5zYWN0aW9ucy5mb2xkZXJLZXlcbiAgICAgICAgPyB0cmFuc2FjdGlvbnMuZm9sZGVyS2V5XG4gICAgICAgIDogVFJBTlNBQ1RJT05TX0ZPTERFUjtcblxuICAgICAgY29uc3QgZGVsZXRlRmlsZXMgPSAkKHRyYW5zYWN0aW9ucywgW1xuICAgICAgICBtYXAodCA9PiBqb2luS2V5KFxuICAgICAgICAgIGZvbGRlcixcbiAgICAgICAgICBnZXRUcmFuc2FjdGlvbklkKFxuICAgICAgICAgICAgdC5yZWNvcmRJZCwgdC50cmFuc2FjdGlvblR5cGUsXG4gICAgICAgICAgICB0LnVuaXF1ZUlkLFxuICAgICAgICAgICksXG4gICAgICAgICkpLFxuICAgICAgICBtYXAoYXBwLmRhdGFzdG9yZS5kZWxldGVGaWxlKSxcbiAgICAgIF0pO1xuXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChkZWxldGVGaWxlcyk7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIGF3YWl0IHJlbGVhc2VMb2NrKGFwcCwgbG9jayk7XG4gIH1cbn07XG5cbmNvbnN0IGdldFRyYW5zYWN0aW9uTG9jayA9IGFzeW5jIGFwcCA9PiBhd2FpdCBnZXRMb2NrKFxuICBhcHAsIExPQ0tfRklMRV9LRVksXG4gIHRpbWVvdXRNaWxsaXNlY29uZHMsIG1heExvY2tSZXRyaWVzLFxuKTtcbiIsImltcG9ydCB7IGZpbHRlciB9IGZyb20gJ2xvZGFzaC9mcCc7XG5pbXBvcnQgeyBjb25maWdGb2xkZXIsIGFwcERlZmluaXRpb25GaWxlLCAkIH0gZnJvbSAnLi4vY29tbW9uJztcbmltcG9ydCB7IFRSQU5TQUNUSU9OU19GT0xERVIgfSBmcm9tICcuLi90cmFuc2FjdGlvbnMvdHJhbnNhY3Rpb25zQ29tbW9uJztcbmltcG9ydCB7IEFVVEhfRk9MREVSLCBVU0VSU19MSVNUX0ZJTEUsIEFDQ0VTU19MRVZFTFNfRklMRSB9IGZyb20gJy4uL2F1dGhBcGkvYXV0aENvbW1vbic7XG5pbXBvcnQgeyBpbml0aWFsaXNlUm9vdENvbGxlY3Rpb25zIH0gZnJvbSAnLi4vY29sbGVjdGlvbkFwaS9pbml0aWFsaXNlJztcbmltcG9ydCB7IGluaXRpYWxpc2VJbmRleCB9IGZyb20gJy4uL2luZGV4aW5nL2luaXRpYWxpc2VJbmRleCc7XG5pbXBvcnQgeyBnZXRGbGF0dGVuZWRIaWVyYXJjaHksIGlzR2xvYmFsSW5kZXgsIGlzU2luZ2xlUmVjb3JkIH0gZnJvbSAnLi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5JztcbmltcG9ydCB7IF9zYXZlIH0gZnJvbSAnLi4vcmVjb3JkQXBpL3NhdmUnO1xuaW1wb3J0IHsgZ2V0TmV3IH0gZnJvbSAnLi4vcmVjb3JkQXBpL2dldE5ldyc7XG5cbmV4cG9ydCBjb25zdCBpbml0aWFsaXNlRGF0YSA9IGFzeW5jIChkYXRhc3RvcmUsIGFwcGxpY2F0aW9uRGVmaW5pdGlvbiwgYWNjZXNzTGV2ZWxzKSA9PiB7XG4gIGF3YWl0IGRhdGFzdG9yZS5jcmVhdGVGb2xkZXIoY29uZmlnRm9sZGVyKTtcbiAgYXdhaXQgZGF0YXN0b3JlLmNyZWF0ZUpzb24oYXBwRGVmaW5pdGlvbkZpbGUsIGFwcGxpY2F0aW9uRGVmaW5pdGlvbik7XG5cbiAgYXdhaXQgaW5pdGlhbGlzZVJvb3RDb2xsZWN0aW9ucyhkYXRhc3RvcmUsIGFwcGxpY2F0aW9uRGVmaW5pdGlvbi5oaWVyYXJjaHkpO1xuICBhd2FpdCBpbml0aWFsaXNlUm9vdEluZGV4ZXMoZGF0YXN0b3JlLCBhcHBsaWNhdGlvbkRlZmluaXRpb24uaGllcmFyY2h5KTtcblxuICBhd2FpdCBpbml0aWFsaXNlUm9vdFNpbmdsZVJlY29yZHMoZGF0YXN0b3JlLCBhcHBsaWNhdGlvbkRlZmluaXRpb24uaGllcmFyY2h5KTtcblxuICBhd2FpdCBkYXRhc3RvcmUuY3JlYXRlRm9sZGVyKFRSQU5TQUNUSU9OU19GT0xERVIpO1xuXG4gIGF3YWl0IGRhdGFzdG9yZS5jcmVhdGVGb2xkZXIoQVVUSF9GT0xERVIpO1xuXG4gIGF3YWl0IGRhdGFzdG9yZS5jcmVhdGVKc29uKFVTRVJTX0xJU1RfRklMRSwgW10pO1xuXG4gIGF3YWl0IGRhdGFzdG9yZS5jcmVhdGVKc29uKFxuICAgIEFDQ0VTU19MRVZFTFNfRklMRSwgXG4gICAgYWNjZXNzTGV2ZWxzID8gYWNjZXNzTGV2ZWxzIDogeyB2ZXJzaW9uOiAwLCBsZXZlbHM6IFtdIH0pO1xufTtcblxuY29uc3QgaW5pdGlhbGlzZVJvb3RJbmRleGVzID0gYXN5bmMgKGRhdGFzdG9yZSwgaGllcmFyY2h5KSA9PiB7XG4gIGNvbnN0IGZsYXRoaWVyYXJjaHkgPSBnZXRGbGF0dGVuZWRIaWVyYXJjaHkoaGllcmFyY2h5KTtcbiAgY29uc3QgZ2xvYmFsSW5kZXhlcyA9ICQoZmxhdGhpZXJhcmNoeSwgW1xuICAgIGZpbHRlcihpc0dsb2JhbEluZGV4KSxcbiAgXSk7XG5cbiAgZm9yIChjb25zdCBpbmRleCBvZiBnbG9iYWxJbmRleGVzKSB7XG4gICAgaWYgKCFhd2FpdCBkYXRhc3RvcmUuZXhpc3RzKGluZGV4Lm5vZGVLZXkoKSkpIHsgYXdhaXQgaW5pdGlhbGlzZUluZGV4KGRhdGFzdG9yZSwgJycsIGluZGV4KTsgfVxuICB9XG59O1xuXG5jb25zdCBpbml0aWFsaXNlUm9vdFNpbmdsZVJlY29yZHMgPSBhc3luYyAoZGF0YXN0b3JlLCBoaWVyYWNoeSkgPT4ge1xuICBjb25zdCBmbGF0aGllcmFyY2h5ID0gZ2V0RmxhdHRlbmVkSGllcmFyY2h5KGhpZXJhY2h5KTtcbiAgY29uc3Qgc2luZ2xlUmVjb3JkcyA9ICQoZmxhdGhpZXJhcmNoeSwgW1xuICAgIGZpbHRlcihpc1NpbmdsZVJlY29yZCksXG4gIF0pO1xuXG4gIC8qIGZvciAobGV0IHJlY29yZCBvZiBzaW5nbGVSZWNvcmRzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGdldE5ldyh7IGRhdGFzdG9yZTogZGF0YXN0b3JlLCBoaWVyYXJjaHk6IGFwcERlZmluaXRpb24uaGllcmFyY2h5IH0pXG4gICAgICAgICAgICAocmVjb3JkLm5vZGVLZXkoKSxcbiAgICAgICAgICAgICAgICByZWNvcmQubmFtZVxuICAgICAgICAgICAgKTtcblxuICAgICAgICBfc2F2ZSh7IGRhdGFzdG9yZTogZGF0YXN0b3JlLCBoaWVyYXJjaHk6IGFwcERlZmluaXRpb24uaGllcmFyY2h5IH0sXG4gICAgICAgICAgICByZXN1bHRcbiAgICAgICAgKTtcbiAgICB9ICovXG59O1xuIiwiaW1wb3J0IHsgaXNOb3RoaW5nIH0gZnJvbSAnLi4vY29tbW9uJztcblxuZXhwb3J0IGNvbnN0IGdldERhdGFiYXNlTWFuYWdlciA9IGRhdGFiYXNlTWFuYWdlciA9PiAoe1xuICBjcmVhdGVFbXB0eU1hc3RlckRiOiBjcmVhdGVFbXB0eU1hc3RlckRiKGRhdGFiYXNlTWFuYWdlciksXG4gIGNyZWF0ZUVtcHR5SW5zdGFuY2VEYjogY3JlYXRlRW1wdHlJbnN0YW5jZURiKGRhdGFiYXNlTWFuYWdlciksXG4gIGdldEluc3RhbmNlRGJSb290Q29uZmlnOiBkYXRhYmFzZU1hbmFnZXIuZ2V0SW5zdGFuY2VEYlJvb3RDb25maWcsXG4gIG1hc3RlckRhdGFzdG9yZUNvbmZpZzogZ2V0TWFzdGVyRGF0YXN0b3JlQ29uZmlnKGRhdGFiYXNlTWFuYWdlciksXG4gIGdldEluc3RhbmNlRGF0YXN0b3JlQ29uZmlnOiBnZXRJbnN0YW5jZURhdGFzdG9yZUNvbmZpZyhkYXRhYmFzZU1hbmFnZXIpLFxufSk7XG5cbmNvbnN0IGdldE1hc3RlckRhdGFzdG9yZUNvbmZpZyA9IGRhdGFiYXNlTWFuYWdlciA9PiBkYXRhYmFzZU1hbmFnZXIuZ2V0RGF0YXN0b3JlQ29uZmlnKCdtYXN0ZXInKTtcblxuY29uc3QgZ2V0SW5zdGFuY2VEYXRhc3RvcmVDb25maWcgPSBkYXRhYmFzZU1hbmFnZXIgPT4gKGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQpID0+IGRhdGFiYXNlTWFuYWdlci5nZXREYXRhc3RvcmVDb25maWcoXG4gIGFwcGxpY2F0aW9uSWQsIGluc3RhbmNlSWQsXG4pO1xuXG5jb25zdCBjcmVhdGVFbXB0eU1hc3RlckRiID0gZGF0YWJhc2VNYW5hZ2VyID0+IGFzeW5jICgpID0+IGF3YWl0IGRhdGFiYXNlTWFuYWdlci5jcmVhdGVFbXB0eURiKCdtYXN0ZXInKTtcblxuY29uc3QgY3JlYXRlRW1wdHlJbnN0YW5jZURiID0gZGF0YWJhc2VNYW5hZ2VyID0+IGFzeW5jIChhcHBsaWNhdGlvbklkLCBpbnN0YW5jZUlkKSA9PiB7XG4gIGlmIChpc05vdGhpbmcoYXBwbGljYXRpb25JZCkpIHsgdGhyb3cgbmV3IEVycm9yKCdDcmVhdGVEYjogYXBwbGljYXRpb24gaWQgbm90IHN1cHBsaWVkJyk7IH1cbiAgaWYgKGlzTm90aGluZyhpbnN0YW5jZUlkKSkgeyB0aHJvdyBuZXcgRXJyb3IoJ0NyZWF0ZURiOiBpbnN0YW5jZSBpZCBub3Qgc3VwcGxpZWQnKTsgfVxuXG4gIHJldHVybiBhd2FpdCBkYXRhYmFzZU1hbmFnZXIuY3JlYXRlRW1wdHlEYihcbiAgICBhcHBsaWNhdGlvbklkLFxuICAgIGluc3RhbmNlSWQsXG4gICk7XG59O1xuIiwiaW1wb3J0IGdldFJlY29yZEFwaSBmcm9tIFwiLi9yZWNvcmRBcGlcIjtcbmltcG9ydCBnZXRDb2xsZWN0aW9uQXBpIGZyb20gXCIuL2NvbGxlY3Rpb25BcGlcIjtcbmltcG9ydCBnZXRJbmRleEFwaSBmcm9tIFwiLi9pbmRleEFwaVwiO1xuaW1wb3J0IGdldFRlbXBsYXRlQXBpIGZyb20gXCIuL3RlbXBsYXRlQXBpXCI7XG5pbXBvcnQgZ2V0QXV0aEFwaSBmcm9tIFwiLi9hdXRoQXBpXCI7XG5pbXBvcnQgZ2V0QWN0aW9uc0FwaSBmcm9tIFwiLi9hY3Rpb25zQXBpXCI7XG5pbXBvcnQge3NldHVwRGF0YXN0b3JlLCBjcmVhdGVFdmVudEFnZ3JlZ2F0b3J9IGZyb20gXCIuL2FwcEluaXRpYWxpc2VcIjtcbmltcG9ydCB7aW5pdGlhbGlzZUFjdGlvbnN9IGZyb20gXCIuL2FjdGlvbnNBcGkvaW5pdGlhbGlzZVwiXG5pbXBvcnQge2lzU29tZXRoaW5nfSBmcm9tIFwiLi9jb21tb25cIjtcbmltcG9ydCB7Y2xlYW51cH0gZnJvbSBcIi4vdHJhbnNhY3Rpb25zL2NsZWFudXBcIjtcbmltcG9ydCB7Z2VuZXJhdGVGdWxsUGVybWlzc2lvbnN9IGZyb20gXCIuL2F1dGhBcGkvZ2VuZXJhdGVGdWxsUGVybWlzc2lvbnNcIjtcbmltcG9ydCB7Z2V0QXBwbGljYXRpb25EZWZpbml0aW9ufSBmcm9tIFwiLi90ZW1wbGF0ZUFwaS9nZXRBcHBsaWNhdGlvbkRlZmluaXRpb25cIjtcbmltcG9ydCBjb21tb24gZnJvbSBcIi4vY29tbW9uXCI7XG5pbXBvcnQge2dldEJlaGF2aW91clNvdXJjZXN9IGZyb20gXCIuL3RlbXBsYXRlQXBpL2dldEJlaGF2aW91clNvdXJjZXNcIjtcbmltcG9ydCBoaWVyYXJjaHkgZnJvbSBcIi4vdGVtcGxhdGVBcGkvaGllcmFyY2h5XCI7XG5cbmV4cG9ydCBjb25zdCBnZXRBcHBBcGlzID0gYXN5bmMgKHN0b3JlLCBiZWhhdmlvdXJTb3VyY2VzID0gbnVsbCwgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFudXBUcmFuc2FjdGlvbnMgPSBudWxsLCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RXBvY2hUaW1lID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3J5cHRvID0gbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwRGVmaW5pdGlvbiA9IG51bGwpID0+IHtcblxuICAgIHN0b3JlID0gc2V0dXBEYXRhc3RvcmUoc3RvcmUpO1xuXG4gICAgaWYoIWFwcERlZmluaXRpb24pXG4gICAgICAgIGFwcERlZmluaXRpb24gPSBhd2FpdCBnZXRBcHBsaWNhdGlvbkRlZmluaXRpb24oc3RvcmUpKCk7XG5cbiAgICBpZighYmVoYXZpb3VyU291cmNlcylcbiAgICAgICAgYmVoYXZpb3VyU291cmNlcyA9IGF3YWl0IGdldEJlaGF2aW91clNvdXJjZXMoc3RvcmUpO1xuXG4gICAgY29uc3QgZXZlbnRBZ2dyZWdhdG9yID0gY3JlYXRlRXZlbnRBZ2dyZWdhdG9yKCk7XG5cbiAgICBjb25zdCBhcHAgPSB7XG4gICAgICAgIGRhdGFzdG9yZTpzdG9yZSxcbiAgICAgICAgY3J5cHRvLFxuICAgICAgICBwdWJsaXNoOmV2ZW50QWdncmVnYXRvci5wdWJsaXNoLFxuICAgICAgICBoaWVyYXJjaHk6YXBwRGVmaW5pdGlvbi5oaWVyYXJjaHksXG4gICAgICAgIGFjdGlvbnM6YXBwRGVmaW5pdGlvbi5hY3Rpb25zXG4gICAgfTtcblxuICAgIGNvbnN0IHRlbXBsYXRlQXBpID0gZ2V0VGVtcGxhdGVBcGkoYXBwKTsgICAgXG5cbiAgICBhcHAuY2xlYW51cFRyYW5zYWN0aW9ucyA9IGlzU29tZXRoaW5nKGNsZWFudXBUcmFuc2FjdGlvbnMpIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjbGVhbnVwVHJhbnNhY3Rpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IGFzeW5jICgpID0+IGF3YWl0IGNsZWFudXAoYXBwKTtcblxuICAgIGFwcC5nZXRFcG9jaFRpbWUgPSBpc1NvbWV0aGluZyhnZXRFcG9jaFRpbWUpXG4gICAgICAgICAgICAgICAgICAgICAgID8gZ2V0RXBvY2hUaW1lXG4gICAgICAgICAgICAgICAgICAgICAgIDogYXN5bmMgKCkgPT4gKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcblxuICAgIGNvbnN0IHJlY29yZEFwaSA9IGdldFJlY29yZEFwaShhcHApO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25BcGkgPSBnZXRDb2xsZWN0aW9uQXBpKGFwcCk7XG4gICAgY29uc3QgaW5kZXhBcGkgPSBnZXRJbmRleEFwaShhcHApO1xuICAgIGNvbnN0IGF1dGhBcGkgPSBnZXRBdXRoQXBpKGFwcCk7XG4gICAgY29uc3QgYWN0aW9uc0FwaSA9IGdldEFjdGlvbnNBcGkoYXBwKTtcblxuICAgIGNvbnN0IGF1dGhlbnRpY2F0ZUFzID0gYXN5bmMgKHVzZXJuYW1lLCBwYXNzd29yZCkgPT4ge1xuICAgICAgICBhcHAudXNlciA9IGF3YWl0IGF1dGhBcGkuYXV0aGVudGljYXRlKHVzZXJuYW1lLCBwYXNzd29yZCk7XG4gICAgfTtcblxuICAgIGNvbnN0IHdpdGhGdWxsQWNjZXNzID0gKCkgPT4ge1xuICAgICAgICBhcHAudXNlciA9IHtcbiAgICAgICAgICAgIG5hbWU6IFwiYXBwXCIsXG4gICAgICAgICAgICBwZXJtaXNzaW9ucyA6IGdlbmVyYXRlRnVsbFBlcm1pc3Npb25zKGFwcCksXG4gICAgICAgICAgICBpc1VzZXI6ZmFsc2UsXG4gICAgICAgICAgICB0ZW1wOmZhbHNlXG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgYXNVc2VyID0gKHVzZXIpID0+IHtcbiAgICAgICAgYXBwLnVzZXIgPSB1c2VyXG4gICAgfTtcblxuICAgIFxuXG4gICAgbGV0IGFwaXMgPSB7XG4gICAgICAgIHJlY29yZEFwaSwgXG4gICAgICAgIHRlbXBsYXRlQXBpLFxuICAgICAgICBjb2xsZWN0aW9uQXBpLFxuICAgICAgICBpbmRleEFwaSxcbiAgICAgICAgYXV0aEFwaSxcbiAgICAgICAgYWN0aW9uc0FwaSxcbiAgICAgICAgc3Vic2NyaWJlOiBldmVudEFnZ3JlZ2F0b3Iuc3Vic2NyaWJlLFxuICAgICAgICBhdXRoZW50aWNhdGVBcyxcbiAgICAgICAgd2l0aEZ1bGxBY2Nlc3MsXG4gICAgICAgIGFzVXNlclxuICAgIH07XG5cbiAgICBhcGlzLmFjdGlvbnMgPSBpbml0aWFsaXNlQWN0aW9ucyhcbiAgICAgICAgZXZlbnRBZ2dyZWdhdG9yLnN1YnNjcmliZSxcbiAgICAgICAgYmVoYXZpb3VyU291cmNlcyxcbiAgICAgICAgYXBwRGVmaW5pdGlvbi5hY3Rpb25zLFxuICAgICAgICBhcHBEZWZpbml0aW9uLnRyaWdnZXJzLFxuICAgICAgICBhcGlzKTtcblxuXG4gICAgcmV0dXJuIGFwaXM7XG59O1xuXG5leHBvcnQge2V2ZW50cywgZXZlbnRzTGlzdH0gZnJvbSBcIi4vY29tbW9uL2V2ZW50c1wiO1xuZXhwb3J0IHtnZXRUZW1wbGF0ZUFwaX0gZnJvbSBcIi4vdGVtcGxhdGVBcGlcIjtcbmV4cG9ydCB7Z2V0UmVjb3JkQXBpfSBmcm9tIFwiLi9yZWNvcmRBcGlcIjtcbmV4cG9ydCB7Z2V0Q29sbGVjdGlvbkFwaX0gZnJvbSBcIi4vY29sbGVjdGlvbkFwaVwiO1xuZXhwb3J0IHtnZXRBdXRoQXBpfSBmcm9tIFwiLi9hdXRoQXBpXCI7XG5leHBvcnQge2dldEluZGV4QXBpfSBmcm9tIFwiLi9pbmRleEFwaVwiO1xuZXhwb3J0IHtzZXR1cERhdGFzdG9yZX0gZnJvbSBcIi4vYXBwSW5pdGlhbGlzZVwiO1xuZXhwb3J0IHtnZXRBY3Rpb25zQXBpfSBmcm9tIFwiLi9hY3Rpb25zQXBpXCI7XG5leHBvcnQge2luaXRpYWxpc2VEYXRhfSBmcm9tIFwiLi9hcHBJbml0aWFsaXNlL2luaXRpYWxpc2VEYXRhXCI7XG5leHBvcnQge2dldERhdGFiYXNlTWFuYWdlcn0gZnJvbSBcIi4vYXBwSW5pdGlhbGlzZS9kYXRhYmFzZU1hbmFnZXJcIjtcbmV4cG9ydCB7aGllcmFyY2h5fTtcbmV4cG9ydCB7Y29tbW9ufTtcblxuZXhwb3J0IGRlZmF1bHQgZ2V0QXBwQXBpczsiXSwibmFtZXMiOlsic3BsaXQiLCJpc0FycmF5Iiwiam9pbiIsImlzVW5kZWZpbmVkIiwiaXNOYU4iLCJyZWR1Y2UiLCJjb21waWxlRXhwcmVzc2lvbiIsImNvbXBpbGVDb2RlIiwiY2xvbmVEZWVwIiwiaXNFbXB0eSIsImluY2x1ZGVzIiwiY29uc3RhbnQiLCJtYWtlcnVsZSIsIm9wdGlvbnMiLCJ0eXBlQ29uc3RyYWludHMiLCJpc051bGwiLCJoYXMiLCJpc051bWJlciIsImlzU3RyaW5nIiwiYWxsIiwiZ2V0RGVmYXVsdE9wdGlvbnMiLCJ2YWxpZGF0ZVR5cGVDb25zdHJhaW50cyIsImlzQm9vbGVhbiIsImlzRGF0ZSIsImtleXMiLCJnbG9iYWwiLCJiYXNlNjQuZnJvbUJ5dGVBcnJheSIsImllZWU3NTQucmVhZCIsImllZWU3NTQud3JpdGUiLCJiYXNlNjQudG9CeXRlQXJyYXkiLCJyZWFkIiwiQnVmZmVyIiwicmVhZEluZGV4IiwibWVyZ2UiLCJzb21lIiwiZGVsZXRlUmVjb3JkIiwidmFsaWRhdGUiLCJmaW5kIiwiZWFjaCIsImRlZmF1bHRDYXNlIiwiYXBpIiwiY3JlYXRlVGVtcG9yYXJ5QWNjZXNzIiwiY3JlYXRlVXNlciIsInNldFVzZXJBY2Nlc3NMZXZlbHMiLCJleGVjdXRlQWN0aW9uIiwiY0NvZGUiLCJjRXhwIiwiaXNGdW5jdGlvbiIsIm9yZGVyQnkiLCJ1bmlvbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUVBLE1BQU0sVUFBVSxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQyxTQUFTLEVBQUUsWUFB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RyxHQUFHLENBQUMsR0FBRyxJQUFHOztFQUVwQyxJQUFJLENBQUMsR0FBRyxFQUFDOztFQUVULEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQ3hDLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBQztJQUNsSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLElBQUksS0FBSTtJQUM3QixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSTtJQUM1QixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSTtHQUN0Qjs7RUFFRCxJQUFJLFlBQVksS0FBSyxDQUFDLEVBQUU7SUFDdEIsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFDO0lBQ25GLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFJO0dBQ3RCLE1BQU0sSUFBSSxZQUFZLEtBQUssQ0FBQyxFQUFFO0lBQzdCLEdBQUcsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBQztJQUM5SCxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksS0FBSTtJQUM1QixHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSTtHQUN0Qjs7RUFFRCxPQUFPLEdBQUc7Q0FDWDs7QUFFRCxTQUFTLGVBQWUsRUFBRSxHQUFHLEVBQUU7RUFDN0IsT0FBTyxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztDQUMxRzs7QUFFRCxTQUFTLFdBQVcsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRTtFQUN2QyxJQUFJLElBQUc7RUFDUCxJQUFJLE1BQU0sR0FBRyxHQUFFO0VBQ2YsS0FBSyxJQUFJLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFO0lBQ25DLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFDO0lBQzdE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QUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLElBQUksQ0FBQyxFQUFFLEVBQUU7O0VBRTFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUM7RUFDN0IsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFDO0VBQ2QsS0FBSyxJQUFJLEtBQUk7RUFDYixPQUFPLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssSUFBSSxDQUFDLEVBQUUsRUFBRTs7RUFFMUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFO0lBQ1gsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFLO0dBQ2QsTUFBTSxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7SUFDckIsT0FBTyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUM7R0FDM0MsTUFBTTtJQUNMLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFDO0lBQ3pCLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBSztHQUNkO0VBQ0QsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUM7Q0FDaEQ7O0FBRUQsQUFBTyxTQUFTLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRTtFQUNoRSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBQztFQUNYLElBQUksSUFBSSxHQUFHLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEVBQUM7RUFDaEMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUM7RUFDMUIsSUFBSSxLQUFLLEdBQUcsSUFBSSxJQUFJLEVBQUM7RUFDckIsSUFBSSxFQUFFLElBQUksSUFBSSxLQUFLLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFDO0VBQ2hFLElBQUksQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBQztFQUMvQixJQUFJLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBQztFQUNyQixJQUFJLENBQUMsR0FBRyxLQUFLLEdBQUcsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBQzs7RUFFM0QsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFDOztFQUV2QixJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxLQUFLLEtBQUssUUFBUSxFQUFFO0lBQ3RDLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUM7SUFDeEIsQ0FBQyxHQUFHLEtBQUk7R0FDVCxNQUFNO0lBQ0wsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFDO0lBQzFDLElBQUksS0FBSyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFO01BQ3JDLENBQUMsR0FBRTtNQUNILENBQUMsSUFBSSxFQUFDO0tBQ1A7SUFDRCxJQUFJLENBQUMsR0FBRyxLQUFLLElBQUksQ0FBQyxFQUFFO01BQ2xCLEtBQUssSUFBSSxFQUFFLEdBQUcsRUFBQztLQUNoQixNQUFNO01BQ0wsS0FBSyxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFDO0tBQ3JDO0lBQ0QsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtNQUNsQixDQUFDLEdBQUU7TUFDSCxDQUFDLElBQUksRUFBQztLQUNQOztJQUVELElBQUksQ0FBQyxHQUFHLEtBQUssSUFBSSxJQUFJLEVBQUU7TUFDckIsQ0FBQyxHQUFHLEVBQUM7TUFDTCxDQUFDLEdBQUcsS0FBSTtLQUNULE1BQU0sSUFBSSxDQUFDLEdBQUcsS0FBSyxJQUFJLENBQUMsRUFBRTtNQUN6QixDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUM7TUFDdkMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFLO0tBQ2QsTUFBTTtNQUNMLENBQUMsR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBQztNQUN0RCxDQUFDLEdBQUcsRUFBQztLQUNOO0dBQ0Y7O0VBRUQsT0FBTyxJQUFJLElBQUksQ0FBQyxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxFQUFFOztFQUVoRixDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksSUFBSSxJQUFJ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LEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ3ZCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7RUFDckI7O0FBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtFQUNyRSxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUM7RUFDbEQsT0FBT0MsSUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDL0M7O0FBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEdBQUcsU0FBUyxXQUFXLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtFQUNyRSxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUM7RUFDbEQsT0FBT0EsSUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDaEQ7O0FBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtFQUN2RSxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUM7RUFDbEQsT0FBT0EsSUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7RUFDL0M7O0FBRUQsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLEdBQUcsU0FBUyxZQUFZLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRTtFQUN2RSxJQUFJLENBQUMsUUFBUSxFQUFF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RUFBRSxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsRUFBQzs7SUFFM0MsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFDO0dBQzdEOztFQUVELElBQUksQ0FBQyxHQUFHLEVBQUM7RUFDVCxJQUFJLEdBQUcsR0FBRyxFQUFDO0VBQ1gsSUFBSSxHQUFHLEdBQUcsRUFBQztFQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsS0FBSTtFQUMzQixPQUFPLEVBQUUsQ0FBQyxHQUFHLFVBQVUsS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEVBQUU7SUFDekMsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFO01BQ3hELEdBQUcsR0FBRyxFQUFDO0tBQ1I7SUFDRCxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEdBQUcsR0FBRyxLQUFLLENBQUMsSUFBSSxHQUFHLEdBQUcsS0FBSTtHQUNyRDs7RUFFRCxPQUFPLE1BQU0sR0FBRyxVQUFVO0VBQzNCOztBQUVELE1BQU0sQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFNBQVMsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRTtFQUN0RixLQUFLLEdBQUcsQ0FBQyxNQUFLO0VBQ2QsTUFBTSxHQUFHLE1BQU0sR0FBRyxFQUFDO0VBQ25CLElBQUksQ0FBQyxRQUFRLEVBQUU7SUFDYixJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxHQUFHLENBQUMsRUFBQzs7SUFFM0MsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEdBQUcs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\n","import {hierarchy as hierarchyFunctions, \r\n common, getTemplateApi, getAuthApi } from \"budibase-core\"; \r\nimport {find, filter, includes, keyBy, some,\r\n flatten, map} from \"lodash/fp\";\r\n\r\nexport const chain = common.$;\r\n\r\nexport const events = common.eventsList;\r\n\r\nexport const getNode = (hierarchy, nodeId) => \r\n chain(hierarchy, [\r\n hierarchyFunctions.getFlattenedHierarchy,\r\n find(n => n.nodeId === nodeId || n.nodeKey() === nodeId)\r\n ]);\r\n\r\nexport const constructHierarchy = node => {\r\n if(!node) return node;\r\n return templateApi(node).constructHierarchy(node);\r\n}\r\n\r\nexport const createNewHierarchy = () => {\r\n return templateApi().getNewRootLevel();\r\n}\r\n\r\nexport const templateApi = hierarchy => getTemplateApi({hierarchy})\r\nexport const authApi = (hierarchy, actions) => getAuthApi({\r\n hierarchy, actions: keyBy(\"name\")(actions), publish:()=>{}})\r\n\r\nexport const allTypes = templateApi({}).allTypes;\r\n\r\nexport const validate = {\r\n all: templateApi({}).validateAll,\r\n node: templateApi({}).validateNode,\r\n field: templateApi({}).validateField\r\n};\r\n\r\nexport const getPotentialReverseReferenceIndexes = (hierarchy, refIndex) => {\r\n const res = chain(hierarchy, [\r\n hierarchyFunctions.getFlattenedHierarchy,\r\n filter(n => hierarchyFunctions.isAncestor(refIndex)(n)\r\n || hierarchyFunctions.isAncestor(refIndex)(n.parent())),\r\n map(n => n.indexes),\r\n flatten,\r\n filter(hierarchyFunctions.isReferenceIndex)\r\n ]);\r\n\r\n return res;\r\n}\r\n\r\nexport const getPotentialReferenceIndexes = (hierarchy, record) =>\r\n chain(hierarchy, [\r\n hierarchyFunctions.getFlattenedHierarchy,\r\n filter(hierarchyFunctions.isAncestorIndex),\r\n filter(i => hierarchyFunctions.isAncestor(record)(i.parent())\r\n || i.parent().nodeId === record.parent().nodeId\r\n || hierarchyFunctions.isRoot(i.parent()))\r\n ]);\r\n\r\nexport const getDefaultTypeOptions = type => \r\n !type ? {} : allTypes[type].getDefaultOptions();\r\n\r\nexport const getNewAction = () => templateApi({}).createAction();\r\nexport const getNewTrigger = () => templateApi({}).createTrigger();\r\n\r\nexport const validateActions = actions => templateApi({}).validateActions(actions);\r\nexport const validateTriggers = (triggers, actions) => templateApi({}).validateTriggers(triggers, actions);\r\n\r\nexport const generateFullPermissions = (hierarchy, actions) => \r\n authApi(hierarchy,actions).generateFullPermissions();\r\n\r\nexport const getNewAccessLevel = () => \r\n authApi().getNewAccessLevel();\r\n\r\nexport const validateAccessLevels = (hierarchy, actions, accessLevels) => \r\n authApi(hierarchy, actions).validateAccessLevels(accessLevels);","import {hierarchy as hierarchyFunctions, \r\n common, getTemplateApi } from \"budibase-core\";\r\nimport {filter, cloneDeep, sortBy, map, last,\r\n find, isEmpty, groupBy, reduce} from \"lodash/fp\";\r\nimport {chain, getNode, validate,\r\n constructHierarchy, templateApi} from \"../common/core\";\r\nimport {writable} from \"svelte/store\";\r\n\r\nexport const getStore = () => {\r\n\r\n const initial = {\r\n apps:[],\r\n appname:\"\",\r\n hierarchy: {},\r\n actions: [],\r\n triggers: [],\r\n currentNodeIsNew: false,\r\n errors: [],\r\n activeNav: \"database\",\r\n hasAppPackage: false,\r\n accessLevels: [],\r\n currentNode: null};\r\n\r\n const store = writable(initial);\r\n\r\n store.initialise = initialise(store, initial);\r\n store.newChildRecord = newRecord(store, false);\r\n store.newRootRecord = newRecord(store, true);\r\n store.selectExistingNode = selectExistingNode(store);\r\n store.newChildIndex = newIndex(store, false);\r\n store.newRootIndex = newIndex(store, true);\r\n store.saveCurrentNode = saveCurrentNode(store);\r\n store.importAppDefinition = importAppDefinition(store);\r\n store.deleteCurrentNode = deleteCurrentNode(store);\r\n store.saveField = saveField(store);\r\n store.deleteField = deleteField(store);\r\n store.saveAction = saveAction(store);\r\n store.deleteAction = deleteAction(store);\r\n store.saveTrigger = saveTrigger(store);\r\n store.deleteTrigger = deleteTrigger(store);\r\n store.saveLevel = saveLevel(store);\r\n store.deleteLevel = deleteLevel(store);\r\n store.setActiveNav = setActiveNav(store);\r\n return store;\r\n} \r\n\r\nexport default getStore;\r\n\r\nconst initialise = (store, initial) => async () => {\r\n\r\n const appname = window.location.hash \r\n ? last(window.location.hash.substr(1).split(\"/\"))\r\n : \"\";\r\n\r\n if(!appname) {\r\n initial.apps = await fetch(`/_builder/api/apps`)\r\n .then(r => r.json());\r\n initial.hasAppPackage = false;\r\n store.set(initial);\r\n return initial;\r\n }\r\n\r\n const pkg = await fetch(`/_builder/api/${appname}/appPackage`)\r\n .then(r => r.json());\r\n\r\n initial.appname = appname;\r\n initial.hasAppPackage = true;\r\n initial.hierarchy = pkg.appDefinition.hierarchy;\r\n initial.accessLevels = pkg.accessLevels;\r\n initial.actions = reduce((arr, action) => {\r\n arr.push(action);\r\n return arr;\r\n })(pkg.appDefinition.actions, []);\r\n initial.triggers = pkg.appDefinition.triggers;\r\n\r\n if(!!initial.hierarchy && !isEmpty(initial.hierarchy)) {\r\n initial.hierarchy = constructHierarchy(initial.hierarchy);\r\n const shadowHierarchy = createShadowHierarchy(initial.hierarchy);\r\n if(initial.currentNode !== null)\r\n initial.currentNode = getNode(\r\n shadowHierarchy, initial.currentNode.nodeId\r\n );\r\n }\r\n store.set(initial);\r\n return initial;\r\n}\r\n\r\nconst newRecord = (store, useRoot) => () => {\r\n store.update(s => {\r\n s.currentNodeIsNew = true;\r\n const shadowHierarchy = createShadowHierarchy(s.hierarchy);\r\n parent = useRoot ? shadowHierarchy\r\n : getNode(\r\n shadowHierarchy, \r\n s.currentNode.nodeId);\r\n s.errors = [];\r\n s.currentNode = templateApi(shadowHierarchy)\r\n .getNewRecordTemplate(parent, \"\", true);\r\n return s;\r\n });\r\n}\r\n\r\n\r\nconst selectExistingNode = (store) => (nodeId) => {\r\n store.update(s => {\r\n const shadowHierarchy = createShadowHierarchy(s.hierarchy);\r\n s.currentNode = getNode(\r\n shadowHierarchy, nodeId\r\n );\r\n s.currentNodeIsNew = false;\r\n s.errors = [];\r\n return s;\r\n })\r\n}\r\n\r\nconst newIndex = (store, useRoot) => () => {\r\n store.update(s => {\r\n s.currentNodeIsNew = true;\r\n s.errors = [];\r\n const shadowHierarchy = createShadowHierarchy(s.hierarchy);\r\n parent = useRoot ? shadowHierarchy\r\n : getNode(\r\n shadowHierarchy, \r\n s.currentNode.nodeId);\r\n\r\n s.currentNode = templateApi(shadowHierarchy)\r\n .getNewIndexTemplate(parent);\r\n return s;\r\n });\r\n}\r\n\r\nconst saveCurrentNode = (store) => () => {\r\n store.update(s => {\r\n\r\n const errors = validate.node(s.currentNode);\r\n s.errors = errors;\r\n if(errors.length > 0) {\r\n return s;\r\n }\r\n\r\n const parentNode = getNode(\r\n s.hierarchy, s.currentNode.parent().nodeId);\r\n\r\n const existingNode = getNode(\r\n s.hierarchy, s.currentNode.nodeId);\r\n\r\n let index = parentNode.children.length;\r\n if(!!existingNode) {\r\n // remove existing\r\n index = existingNode.parent().children.indexOf(existingNode);\r\n existingNode.parent().children = chain(existingNode.parent().children, [\r\n filter(c => c.nodeId !== existingNode.nodeId)\r\n ]);\r\n }\r\n\r\n // should add node into existing hierarchy\r\n const cloned = cloneDeep(s.currentNode);\r\n templateApi(s.hierarchy).constructNode(\r\n parentNode, \r\n cloned\r\n );\r\n\r\n const newIndexOfchild = child => {\r\n if(child === cloned) return index;\r\n const currentIndex = parentNode.children.indexOf(child);\r\n return currentIndex >= index ? currentIndex + 1 : currentIndex;\r\n }\r\n\r\n parentNode.children = chain(parentNode.children, [\r\n sortBy(newIndexOfchild)\r\n ]);\r\n\r\n s.currentNodeIsNew = false;\r\n \r\n savePackage(store, s);\r\n\r\n return s;\r\n });\r\n}\r\n\r\nconst importAppDefinition = store => appDefinition => {\r\n store.update(s => {\r\n s.hierarchy = appDefinition.hierarchy;\r\n s.currentNode = appDefinition.hierarchy.children.length > 0\r\n ? appDefinition.hierarchy.children[0] \r\n : null;\r\n s.actions = appDefinition.actions;\r\n s.triggers = appDefinition.triggers;\r\n s.currentNodeIsNew = false; \r\n return s;\r\n });\r\n} \r\n\r\nconst deleteCurrentNode = store => () => {\r\n store.update(s => {\r\n const nodeToDelete = getNode(s.hierarchy, s.currentNode.nodeId);\r\n s.currentNode = hierarchyFunctions.isRoot(nodeToDelete.parent())\r\n ? find(n => n != s.currentNode)\r\n (s.hierarchy.children)\r\n : nodeToDelete.parent();\r\n if(hierarchyFunctions.isRecord(nodeToDelete)) {\r\n nodeToDelete.parent().children = filter(c => c.nodeId !== nodeToDelete.nodeId)\r\n (nodeToDelete.parent().children);\r\n } else {\r\n nodeToDelete.parent().indexes = filter(c => c.nodeId !== nodeToDelete.nodeId)\r\n (nodeToDelete.parent().indexes);\r\n }\r\n s.errors = [];\r\n savePackage(store, s);\r\n return s;\r\n });\r\n}\r\n\r\nconst saveField = databaseStore => (field) => {\r\n databaseStore.update(db => {\r\n db.currentNode.fields = filter(f => f.name !== field.name)\r\n (db.currentNode.fields);\r\n \r\n templateApi(db.hierarchy).addField(db.currentNode, field);\r\n return db;\r\n });\r\n}\r\n\r\n\r\nconst deleteField = databaseStore => field => {\r\n databaseStore.update(db => {\r\n db.currentNode.fields = filter(f => f.name !== field.name)\r\n (db.currentNode.fields);\r\n\r\n return db;\r\n });\r\n}\r\n\r\n\r\nconst saveAction = store => (newAction, isNew, oldAction=null) => {\r\n store.update(s => {\r\n\r\n const existingAction = isNew \r\n ? null\r\n : find(a => a.name === oldAction.name)(s.actions);\r\n \r\n if(existingAction) {\r\n s.actions = chain(s.actions, [\r\n map(a => a === existingAction ? newAction : a)\r\n ]);\r\n } else {\r\n s.actions.push(newAction);\r\n }\r\n savePackage(store, s);\r\n return s;\r\n });\r\n}\r\n\r\nconst deleteAction = store => action => {\r\n store.update(s => {\r\n s.actions = filter(a => a.name !== action.name)(s.actions);\r\n savePackage(store, s);\r\n return s;\r\n });\r\n}\r\n\r\nconst saveTrigger = store => (newTrigger, isNew, oldTrigger=null) => {\r\n store.update(s => {\r\n\r\n const existingTrigger = isNew \r\n ? null\r\n : find(a => a.name === oldTrigger.name)(s.triggers);\r\n \r\n if(existingTrigger) {\r\n s.triggers = chain(s.triggers, [\r\n map(a => a === existingTrigger ? newTrigger : a)\r\n ]);\r\n } else {\r\n s.triggers.push(newTrigger);\r\n }\r\n savePackage(store, s);\r\n return s;\r\n });\r\n}\r\n\r\nconst deleteTrigger = store => trigger => {\r\n store.update(s => {\r\n s.triggers = filter(t => t.name !== trigger.name)(s.triggers);\r\n return s;\r\n });\r\n}\r\n\r\nconst saveLevel = store => (newLevel, isNew, oldLevel=null) => {\r\n store.update(s => {\r\n\r\n const existingLevel = isNew \r\n ? null\r\n : find(a => a.name === oldLevel.name)(s.accessLevels);\r\n \r\n if(existingLevel) {\r\n s.accessLevels = chain(s.accessLevels, [\r\n map(a => a === existingLevel ? newLevel : a)\r\n ]);\r\n } else {\r\n s.accessLevels.push(newLevel);\r\n }\r\n savePackage(store, s);\r\n return s;\r\n });\r\n}\r\n\r\nconst deleteLevel = store => level => {\r\n store.update(s => {\r\n s.accessLevels = filter(t => t.name !== level.name)(s.accessLevels);\r\n savePackage(store, s);\r\n return s;\r\n });\r\n}\r\n\r\nconst setActiveNav = databaseStore => navName => {\r\n databaseStore.update(db => {\r\n db.activeNav = navName;\r\n return db;\r\n });\r\n}\r\n\r\nconst createShadowHierarchy = hierarchy => \r\n constructHierarchy(JSON.parse(JSON.stringify(hierarchy)));\r\n\r\nconst savePackage = (store, db) => {\r\n\r\n const appDefinition = {\r\n hierarchy:db.hierarchy,\r\n triggers:db.triggers,\r\n actions: groupBy(\"name\")(db.actions)\r\n };\r\n\r\n const data = {\r\n appDefinition,\r\n accessLevels:db.accessLevels\r\n }\r\n\r\n fetch(`/_builder/api/${db.appname}/appPackage`, {\r\n method: 'POST',\r\n headers: {\r\n 'Content-Type': 'application/json',\r\n },\r\n body: JSON.stringify(data), \r\n });\r\n}\r\n","import {createPackage} from \"./createPackage\";\r\nimport getStore from \"./store\";\r\nimport { last } from \"lodash/fp\";\r\n\r\nexport const database = getStore();\r\n\r\nexport const createNewPackage = () =>\r\n createPackage(packageInfo, database);\r\n\r\nexport const initialise = async () => {\r\n try {\r\n setupRouter(database);\r\n await database.initialise();\r\n } catch(err) {\r\n console.log(err);\r\n }\r\n\r\n} \r\n\r\nconst setupRouter = (writable) => {\r\n const pushState = history.pushState;\r\n history.pushState = () => {\r\n pushState.apply(history, arguments);\r\n //fireEvents('pushState', arguments); \r\n writable.initialise();\r\n }\r\n window.addEventListener('hashchange',()=>{\r\n writable.initialise();\r\n })\r\n}\r\n","import { safe_not_equal, noop, run_all, is_function } from '../internal';\nexport { get_store_value as get } from '../internal';\n\n/**\n * Creates a `Readable` store that allows reading by subscription.\n * @param value initial value\n * @param {StartStopNotifier}start start and stop notifications for subscriptions\n */\nfunction readable(value, start) {\n return {\n subscribe: writable(value, start).subscribe,\n };\n}\n/**\n * Create a `Writable` store that allows both updating and reading by subscription.\n * @param {*=}value initial value\n * @param {StartStopNotifier=}start start and stop notifications for subscriptions\n */\nfunction writable(value, start = noop) {\n let stop;\n const subscribers = [];\n function set(new_value) {\n if (safe_not_equal(value, new_value)) {\n value = new_value;\n if (!stop) {\n return; // not ready\n }\n subscribers.forEach((s) => s[1]());\n subscribers.forEach((s) => s[0](value));\n }\n }\n function update(fn) {\n set(fn(value));\n }\n function subscribe(run, invalidate = noop) {\n const subscriber = [run, invalidate];\n subscribers.push(subscriber);\n if (subscribers.length === 1) {\n stop = start(set) || noop;\n }\n run(value);\n return () => {\n const index = subscribers.indexOf(subscriber);\n if (index !== -1) {\n subscribers.splice(index, 1);\n }\n if (subscribers.length === 0) {\n stop();\n stop = null;\n }\n };\n }\n return { set, update, subscribe };\n}\n/**\n * Derived value store by synchronizing one or more readable stores and\n * applying an aggregation function over its input values.\n * @param {Stores} stores input stores\n * @param {function(Stores=, function(*)=):*}fn function callback that aggregates the values\n * @param {*=}initial_value when used asynchronously\n */\nfunction derived(stores, fn, initial_value) {\n const single = !Array.isArray(stores);\n const stores_array = single\n ? [stores]\n : stores;\n const auto = fn.length < 2;\n const invalidators = [];\n const store = readable(initial_value, (set) => {\n let inited = false;\n const values = [];\n let pending = 0;\n let cleanup = noop;\n const sync = () => {\n if (pending) {\n return;\n }\n cleanup();\n const result = fn(single ? values[0] : values, set);\n if (auto) {\n set(result);\n }\n else {\n cleanup = is_function(result) ? result : noop;\n }\n };\n const unsubscribers = stores_array.map((store, i) => store.subscribe((value) => {\n values[i] = value;\n pending &= ~(1 << i);\n if (inited) {\n sync();\n }\n }, () => {\n run_all(invalidators);\n pending |= (1 << i);\n }));\n inited = true;\n sync();\n return function stop() {\n run_all(unsubscribers);\n cleanup();\n };\n });\n return {\n subscribe(run, invalidate = noop) {\n invalidators.push(invalidate);\n const unsubscribe = store.subscribe(run, invalidate);\n return () => {\n const index = invalidators.indexOf(invalidate);\n if (index !== -1) {\n invalidators.splice(index, 1);\n }\n unsubscribe();\n };\n }\n };\n}\n\nexport { derived, readable, writable };\n","<script>\r\n\r\nimport Button from \"./common/Button.svelte\"\r\nimport { database } from \"./builderStore\";\r\n\r\nlet errors = [];\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <div class=\"inner\">\r\n <img src=\"/_builder/assets/budibase-logo.png\" class=\"logo\" alt=\"budibase logo\"/>\r\n <div>\r\n \r\n <div>\r\n <h4 style=\"margin-bottom: 20px\">Choose an Application</h4>\r\n {#each $database.apps as app}\r\n <a href={`#/${app}`} class=\"app-link\">{app}</a>\r\n {/each}\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n position: fixed;\r\n margin: 0 auto;\r\n text-align: center;\r\n top: 20%;\r\n /*color: #333333;\r\n background-color: #fdfdfd;*/\r\n width:100%;\r\n}\r\n\r\n.inner {\r\n display:inline-block;\r\n margin: auto;\r\n}\r\n\r\n.logo {\r\n width: 300px;\r\n margin-bottom: 40px;\r\n}\r\n\r\n.root :global(.option) {\r\n width:250px;\r\n}\r\n\r\n.app-link {\r\n margin-top: 10px;\r\n display: block;\r\n}\r\n\r\n</style>","(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"feather\"] = factory();\n\telse\n\t\troot[\"feather\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 0);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ \"./dist/icons.json\":\n/*!*************************!*\\\n !*** ./dist/icons.json ***!\n \\*************************/\n/*! exports provided: activity, airplay, alert-circle, alert-octagon, alert-triangle, align-center, align-justify, align-left, align-right, anchor, aperture, archive, arrow-down-circle, arrow-down-left, arrow-down-right, arrow-down, arrow-left-circle, arrow-left, arrow-right-circle, arrow-right, arrow-up-circle, arrow-up-left, arrow-up-right, arrow-up, at-sign, award, bar-chart-2, bar-chart, battery-charging, battery, bell-off, bell, bluetooth, bold, book-open, book, bookmark, box, briefcase, calendar, camera-off, camera, cast, check-circle, check-square, check, chevron-down, chevron-left, chevron-right, chevron-up, chevrons-down, chevrons-left, chevrons-right, chevrons-up, chrome, circle, clipboard, clock, cloud-drizzle, cloud-lightning, cloud-off, cloud-rain, cloud-snow, cloud, code, codepen, codesandbox, coffee, columns, command, compass, copy, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, cpu, credit-card, crop, crosshair, database, delete, disc, dollar-sign, download-cloud, download, droplet, edit-2, edit-3, edit, external-link, eye-off, eye, facebook, fast-forward, feather, figma, file-minus, file-plus, file-text, file, film, filter, flag, folder-minus, folder-plus, folder, framer, frown, gift, git-branch, git-commit, git-merge, git-pull-request, github, gitlab, globe, grid, hard-drive, hash, headphones, heart, help-circle, hexagon, home, image, inbox, info, instagram, italic, key, layers, layout, life-buoy, link-2, link, linkedin, list, loader, lock, log-in, log-out, mail, map-pin, map, maximize-2, maximize, meh, menu, message-circle, message-square, mic-off, mic, minimize-2, minimize, minus-circle, minus-square, minus, monitor, moon, more-horizontal, more-vertical, mouse-pointer, move, music, navigation-2, navigation, octagon, package, paperclip, pause-circle, pause, pen-tool, percent, phone-call, phone-forwarded, phone-incoming, phone-missed, phone-off, phone-outgoing, phone, pie-chart, play-circle, play, plus-circle, plus-square, plus, pocket, power, printer, radio, refresh-ccw, refresh-cw, repeat, rewind, rotate-ccw, rotate-cw, rss, save, scissors, search, send, server, settings, share-2, share, shield-off, shield, shopping-bag, shopping-cart, shuffle, sidebar, skip-back, skip-forward, slack, slash, sliders, smartphone, smile, speaker, square, star, stop-circle, sun, sunrise, sunset, tablet, tag, target, terminal, thermometer, thumbs-down, thumbs-up, toggle-left, toggle-right, trash-2, trash, trello, trending-down, trending-up, triangle, truck, tv, twitter, type, umbrella, underline, unlock, upload-cloud, upload, user-check, user-minus, user-plus, user-x, user, users, video-off, video, voicemail, volume-1, volume-2, volume-x, volume, watch, wifi-off, wifi, wind, x-circle, x-octagon, x-square, x, youtube, zap-off, zap, zoom-in, zoom-out, default */\n/***/ (function(module) {\n\nmodule.exports = {\"activity\":\"<polyline points=\\\"22 12 18 12 15 21 9 3 6 12 2 12\\\"></polyline>\",\"airplay\":\"<path d=\\\"M5 17H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-1\\\"></path><polygon points=\\\"12 15 17 21 7 21 12 15\\\"></polygon>\",\"alert-circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"16\\\" x2=\\\"12\\\" y2=\\\"16\\\"></line>\",\"alert-octagon\":\"<polygon points=\\\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\\\"></polygon><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"16\\\" x2=\\\"12\\\" y2=\\\"16\\\"></line>\",\"alert-triangle\":\"<path d=\\\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\\\"></path><line x1=\\\"12\\\" y1=\\\"9\\\" x2=\\\"12\\\" y2=\\\"13\\\"></line><line x1=\\\"12\\\" y1=\\\"17\\\" x2=\\\"12\\\" y2=\\\"17\\\"></line>\",\"align-center\":\"<line x1=\\\"18\\\" y1=\\\"10\\\" x2=\\\"6\\\" y2=\\\"10\\\"></line><line x1=\\\"21\\\" y1=\\\"6\\\" x2=\\\"3\\\" y2=\\\"6\\\"></line><line x1=\\\"21\\\" y1=\\\"14\\\" x2=\\\"3\\\" y2=\\\"14\\\"></line><line x1=\\\"18\\\" y1=\\\"18\\\" x2=\\\"6\\\" y2=\\\"18\\\"></line>\",\"align-justify\":\"<line x1=\\\"21\\\" y1=\\\"10\\\" x2=\\\"3\\\" y2=\\\"10\\\"></line><line x1=\\\"21\\\" y1=\\\"6\\\" x2=\\\"3\\\" y2=\\\"6\\\"></line><line x1=\\\"21\\\" y1=\\\"14\\\" x2=\\\"3\\\" y2=\\\"14\\\"></line><line x1=\\\"21\\\" y1=\\\"18\\\" x2=\\\"3\\\" y2=\\\"18\\\"></line>\",\"align-left\":\"<line x1=\\\"17\\\" y1=\\\"10\\\" x2=\\\"3\\\" y2=\\\"10\\\"></line><line x1=\\\"21\\\" y1=\\\"6\\\" x2=\\\"3\\\" y2=\\\"6\\\"></line><line x1=\\\"21\\\" y1=\\\"14\\\" x2=\\\"3\\\" y2=\\\"14\\\"></line><line x1=\\\"17\\\" y1=\\\"18\\\" x2=\\\"3\\\" y2=\\\"18\\\"></line>\",\"align-right\":\"<line x1=\\\"21\\\" y1=\\\"10\\\" x2=\\\"7\\\" y2=\\\"10\\\"></line><line x1=\\\"21\\\" y1=\\\"6\\\" x2=\\\"3\\\" y2=\\\"6\\\"></line><line x1=\\\"21\\\" y1=\\\"14\\\" x2=\\\"3\\\" y2=\\\"14\\\"></line><line x1=\\\"21\\\" y1=\\\"18\\\" x2=\\\"7\\\" y2=\\\"18\\\"></line>\",\"anchor\":\"<circle cx=\\\"12\\\" cy=\\\"5\\\" r=\\\"3\\\"></circle><line x1=\\\"12\\\" y1=\\\"22\\\" x2=\\\"12\\\" y2=\\\"8\\\"></line><path d=\\\"M5 12H2a10 10 0 0 0 20 0h-3\\\"></path>\",\"aperture\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"14.31\\\" y1=\\\"8\\\" x2=\\\"20.05\\\" y2=\\\"17.94\\\"></line><line x1=\\\"9.69\\\" y1=\\\"8\\\" x2=\\\"21.17\\\" y2=\\\"8\\\"></line><line x1=\\\"7.38\\\" y1=\\\"12\\\" x2=\\\"13.12\\\" y2=\\\"2.06\\\"></line><line x1=\\\"9.69\\\" y1=\\\"16\\\" x2=\\\"3.95\\\" y2=\\\"6.06\\\"></line><line x1=\\\"14.31\\\" y1=\\\"16\\\" x2=\\\"2.83\\\" y2=\\\"16\\\"></line><line x1=\\\"16.62\\\" y1=\\\"12\\\" x2=\\\"10.88\\\" y2=\\\"21.94\\\"></line>\",\"archive\":\"<polyline points=\\\"21 8 21 21 3 21 3 8\\\"></polyline><rect x=\\\"1\\\" y=\\\"3\\\" width=\\\"22\\\" height=\\\"5\\\"></rect><line x1=\\\"10\\\" y1=\\\"12\\\" x2=\\\"14\\\" y2=\\\"12\\\"></line>\",\"arrow-down-circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><polyline points=\\\"8 12 12 16 16 12\\\"></polyline><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"16\\\"></line>\",\"arrow-down-left\":\"<line x1=\\\"17\\\" y1=\\\"7\\\" x2=\\\"7\\\" y2=\\\"17\\\"></line><polyline points=\\\"17 17 7 17 7 7\\\"></polyline>\",\"arrow-down-right\":\"<line x1=\\\"7\\\" y1=\\\"7\\\" x2=\\\"17\\\" y2=\\\"17\\\"></line><polyline points=\\\"17 7 17 17 7 17\\\"></polyline>\",\"arrow-down\":\"<line x1=\\\"12\\\" y1=\\\"5\\\" x2=\\\"12\\\" y2=\\\"19\\\"></line><polyline points=\\\"19 12 12 19 5 12\\\"></polyline>\",\"arrow-left-circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><polyline points=\\\"12 8 8 12 12 16\\\"></polyline><line x1=\\\"16\\\" y1=\\\"12\\\" x2=\\\"8\\\" y2=\\\"12\\\"></line>\",\"arrow-left\":\"<line x1=\\\"19\\\" y1=\\\"12\\\" x2=\\\"5\\\" y2=\\\"12\\\"></line><polyline points=\\\"12 19 5 12 12 5\\\"></polyline>\",\"arrow-right-circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><polyline points=\\\"12 16 16 12 12 8\\\"></polyline><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line>\",\"arrow-right\":\"<line x1=\\\"5\\\" y1=\\\"12\\\" x2=\\\"19\\\" y2=\\\"12\\\"></line><polyline points=\\\"12 5 19 12 12 19\\\"></polyline>\",\"arrow-up-circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><polyline points=\\\"16 12 12 8 8 12\\\"></polyline><line x1=\\\"12\\\" y1=\\\"16\\\" x2=\\\"12\\\" y2=\\\"8\\\"></line>\",\"arrow-up-left\":\"<line x1=\\\"17\\\" y1=\\\"17\\\" x2=\\\"7\\\" y2=\\\"7\\\"></line><polyline points=\\\"7 17 7 7 17 7\\\"></polyline>\",\"arrow-up-right\":\"<line x1=\\\"7\\\" y1=\\\"17\\\" x2=\\\"17\\\" y2=\\\"7\\\"></line><polyline points=\\\"7 7 17 7 17 17\\\"></polyline>\",\"arrow-up\":\"<line x1=\\\"12\\\" y1=\\\"19\\\" x2=\\\"12\\\" y2=\\\"5\\\"></line><polyline points=\\\"5 12 12 5 19 12\\\"></polyline>\",\"at-sign\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\"></circle><path d=\\\"M16 8v5a3 3 0 0 0 6 0v-1a10 10 0 1 0-3.92 7.94\\\"></path>\",\"award\":\"<circle cx=\\\"12\\\" cy=\\\"8\\\" r=\\\"7\\\"></circle><polyline points=\\\"8.21 13.89 7 23 12 20 17 23 15.79 13.88\\\"></polyline>\",\"bar-chart-2\":\"<line x1=\\\"18\\\" y1=\\\"20\\\" x2=\\\"18\\\" y2=\\\"10\\\"></line><line x1=\\\"12\\\" y1=\\\"20\\\" x2=\\\"12\\\" y2=\\\"4\\\"></line><line x1=\\\"6\\\" y1=\\\"20\\\" x2=\\\"6\\\" y2=\\\"14\\\"></line>\",\"bar-chart\":\"<line x1=\\\"12\\\" y1=\\\"20\\\" x2=\\\"12\\\" y2=\\\"10\\\"></line><line x1=\\\"18\\\" y1=\\\"20\\\" x2=\\\"18\\\" y2=\\\"4\\\"></line><line x1=\\\"6\\\" y1=\\\"20\\\" x2=\\\"6\\\" y2=\\\"16\\\"></line>\",\"battery-charging\":\"<path d=\\\"M5 18H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3.19M15 6h2a2 2 0 0 1 2 2v8a2 2 0 0 1-2 2h-3.19\\\"></path><line x1=\\\"23\\\" y1=\\\"13\\\" x2=\\\"23\\\" y2=\\\"11\\\"></line><polyline points=\\\"11 6 7 12 13 12 9 18\\\"></polyline>\",\"battery\":\"<rect x=\\\"1\\\" y=\\\"6\\\" width=\\\"18\\\" height=\\\"12\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"23\\\" y1=\\\"13\\\" x2=\\\"23\\\" y2=\\\"11\\\"></line>\",\"bell-off\":\"<path d=\\\"M13.73 21a2 2 0 0 1-3.46 0\\\"></path><path d=\\\"M18.63 13A17.89 17.89 0 0 1 18 8\\\"></path><path d=\\\"M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14\\\"></path><path d=\\\"M18 8a6 6 0 0 0-9.33-5\\\"></path><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line>\",\"bell\":\"<path d=\\\"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9\\\"></path><path d=\\\"M13.73 21a2 2 0 0 1-3.46 0\\\"></path>\",\"bluetooth\":\"<polyline points=\\\"6.5 6.5 17.5 17.5 12 23 12 1 17.5 6.5 6.5 17.5\\\"></polyline>\",\"bold\":\"<path d=\\\"M6 4h8a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\\\"></path><path d=\\\"M6 12h9a4 4 0 0 1 4 4 4 4 0 0 1-4 4H6z\\\"></path>\",\"book-open\":\"<path d=\\\"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z\\\"></path><path d=\\\"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z\\\"></path>\",\"book\":\"<path d=\\\"M4 19.5A2.5 2.5 0 0 1 6.5 17H20\\\"></path><path d=\\\"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z\\\"></path>\",\"bookmark\":\"<path d=\\\"M19 21l-7-5-7 5V5a2 2 0 0 1 2-2h10a2 2 0 0 1 2 2z\\\"></path>\",\"box\":\"<path d=\\\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\\\"></path><polyline points=\\\"3.27 6.96 12 12.01 20.73 6.96\\\"></polyline><line x1=\\\"12\\\" y1=\\\"22.08\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line>\",\"briefcase\":\"<rect x=\\\"2\\\" y=\\\"7\\\" width=\\\"20\\\" height=\\\"14\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><path d=\\\"M16 21V5a2 2 0 0 0-2-2h-4a2 2 0 0 0-2 2v16\\\"></path>\",\"calendar\":\"<rect x=\\\"3\\\" y=\\\"4\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"16\\\" y1=\\\"2\\\" x2=\\\"16\\\" y2=\\\"6\\\"></line><line x1=\\\"8\\\" y1=\\\"2\\\" x2=\\\"8\\\" y2=\\\"6\\\"></line><line x1=\\\"3\\\" y1=\\\"10\\\" x2=\\\"21\\\" y2=\\\"10\\\"></line>\",\"camera-off\":\"<line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line><path d=\\\"M21 21H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h3m3-3h6l2 3h4a2 2 0 0 1 2 2v9.34m-7.72-2.06a4 4 0 1 1-5.56-5.56\\\"></path>\",\"camera\":\"<path d=\\\"M23 19a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h4l2-3h6l2 3h4a2 2 0 0 1 2 2z\\\"></path><circle cx=\\\"12\\\" cy=\\\"13\\\" r=\\\"4\\\"></circle>\",\"cast\":\"<path d=\\\"M2 16.1A5 5 0 0 1 5.9 20M2 12.05A9 9 0 0 1 9.95 20M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6\\\"></path><line x1=\\\"2\\\" y1=\\\"20\\\" x2=\\\"2\\\" y2=\\\"20\\\"></line>\",\"check-circle\":\"<path d=\\\"M22 11.08V12a10 10 0 1 1-5.93-9.14\\\"></path><polyline points=\\\"22 4 12 14.01 9 11.01\\\"></polyline>\",\"check-square\":\"<polyline points=\\\"9 11 12 14 22 4\\\"></polyline><path d=\\\"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11\\\"></path>\",\"check\":\"<polyline points=\\\"20 6 9 17 4 12\\\"></polyline>\",\"chevron-down\":\"<polyline points=\\\"6 9 12 15 18 9\\\"></polyline>\",\"chevron-left\":\"<polyline points=\\\"15 18 9 12 15 6\\\"></polyline>\",\"chevron-right\":\"<polyline points=\\\"9 18 15 12 9 6\\\"></polyline>\",\"chevron-up\":\"<polyline points=\\\"18 15 12 9 6 15\\\"></polyline>\",\"chevrons-down\":\"<polyline points=\\\"7 13 12 18 17 13\\\"></polyline><polyline points=\\\"7 6 12 11 17 6\\\"></polyline>\",\"chevrons-left\":\"<polyline points=\\\"11 17 6 12 11 7\\\"></polyline><polyline points=\\\"18 17 13 12 18 7\\\"></polyline>\",\"chevrons-right\":\"<polyline points=\\\"13 17 18 12 13 7\\\"></polyline><polyline points=\\\"6 17 11 12 6 7\\\"></polyline>\",\"chevrons-up\":\"<polyline points=\\\"17 11 12 6 7 11\\\"></polyline><polyline points=\\\"17 18 12 13 7 18\\\"></polyline>\",\"chrome\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\"></circle><line x1=\\\"21.17\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"8\\\"></line><line x1=\\\"3.95\\\" y1=\\\"6.06\\\" x2=\\\"8.54\\\" y2=\\\"14\\\"></line><line x1=\\\"10.88\\\" y1=\\\"21.94\\\" x2=\\\"15.46\\\" y2=\\\"14\\\"></line>\",\"circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle>\",\"clipboard\":\"<path d=\\\"M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2\\\"></path><rect x=\\\"8\\\" y=\\\"2\\\" width=\\\"8\\\" height=\\\"4\\\" rx=\\\"1\\\" ry=\\\"1\\\"></rect>\",\"clock\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><polyline points=\\\"12 6 12 12 16 14\\\"></polyline>\",\"cloud-drizzle\":\"<line x1=\\\"8\\\" y1=\\\"19\\\" x2=\\\"8\\\" y2=\\\"21\\\"></line><line x1=\\\"8\\\" y1=\\\"13\\\" x2=\\\"8\\\" y2=\\\"15\\\"></line><line x1=\\\"16\\\" y1=\\\"19\\\" x2=\\\"16\\\" y2=\\\"21\\\"></line><line x1=\\\"16\\\" y1=\\\"13\\\" x2=\\\"16\\\" y2=\\\"15\\\"></line><line x1=\\\"12\\\" y1=\\\"21\\\" x2=\\\"12\\\" y2=\\\"23\\\"></line><line x1=\\\"12\\\" y1=\\\"15\\\" x2=\\\"12\\\" y2=\\\"17\\\"></line><path d=\\\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\\\"></path>\",\"cloud-lightning\":\"<path d=\\\"M19 16.9A5 5 0 0 0 18 7h-1.26a8 8 0 1 0-11.62 9\\\"></path><polyline points=\\\"13 11 9 17 15 17 11 23\\\"></polyline>\",\"cloud-off\":\"<path d=\\\"M22.61 16.95A5 5 0 0 0 18 10h-1.26a8 8 0 0 0-7.05-6M5 5a8 8 0 0 0 4 15h9a5 5 0 0 0 1.7-.3\\\"></path><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line>\",\"cloud-rain\":\"<line x1=\\\"16\\\" y1=\\\"13\\\" x2=\\\"16\\\" y2=\\\"21\\\"></line><line x1=\\\"8\\\" y1=\\\"13\\\" x2=\\\"8\\\" y2=\\\"21\\\"></line><line x1=\\\"12\\\" y1=\\\"15\\\" x2=\\\"12\\\" y2=\\\"23\\\"></line><path d=\\\"M20 16.58A5 5 0 0 0 18 7h-1.26A8 8 0 1 0 4 15.25\\\"></path>\",\"cloud-snow\":\"<path d=\\\"M20 17.58A5 5 0 0 0 18 8h-1.26A8 8 0 1 0 4 16.25\\\"></path><line x1=\\\"8\\\" y1=\\\"16\\\" x2=\\\"8\\\" y2=\\\"16\\\"></line><line x1=\\\"8\\\" y1=\\\"20\\\" x2=\\\"8\\\" y2=\\\"20\\\"></line><line x1=\\\"12\\\" y1=\\\"18\\\" x2=\\\"12\\\" y2=\\\"18\\\"></line><line x1=\\\"12\\\" y1=\\\"22\\\" x2=\\\"12\\\" y2=\\\"22\\\"></line><line x1=\\\"16\\\" y1=\\\"16\\\" x2=\\\"16\\\" y2=\\\"16\\\"></line><line x1=\\\"16\\\" y1=\\\"20\\\" x2=\\\"16\\\" y2=\\\"20\\\"></line>\",\"cloud\":\"<path d=\\\"M18 10h-1.26A8 8 0 1 0 9 20h9a5 5 0 0 0 0-10z\\\"></path>\",\"code\":\"<polyline points=\\\"16 18 22 12 16 6\\\"></polyline><polyline points=\\\"8 6 2 12 8 18\\\"></polyline>\",\"codepen\":\"<polygon points=\\\"12 2 22 8.5 22 15.5 12 22 2 15.5 2 8.5 12 2\\\"></polygon><line x1=\\\"12\\\" y1=\\\"22\\\" x2=\\\"12\\\" y2=\\\"15.5\\\"></line><polyline points=\\\"22 8.5 12 15.5 2 8.5\\\"></polyline><polyline points=\\\"2 15.5 12 8.5 22 15.5\\\"></polyline><line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"8.5\\\"></line>\",\"codesandbox\":\"<path d=\\\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\\\"></path><polyline points=\\\"7.5 4.21 12 6.81 16.5 4.21\\\"></polyline><polyline points=\\\"7.5 19.79 7.5 14.6 3 12\\\"></polyline><polyline points=\\\"21 12 16.5 14.6 16.5 19.79\\\"></polyline><polyline points=\\\"3.27 6.96 12 12.01 20.73 6.96\\\"></polyline><line x1=\\\"12\\\" y1=\\\"22.08\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line>\",\"coffee\":\"<path d=\\\"M18 8h1a4 4 0 0 1 0 8h-1\\\"></path><path d=\\\"M2 8h16v9a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4V8z\\\"></path><line x1=\\\"6\\\" y1=\\\"1\\\" x2=\\\"6\\\" y2=\\\"4\\\"></line><line x1=\\\"10\\\" y1=\\\"1\\\" x2=\\\"10\\\" y2=\\\"4\\\"></line><line x1=\\\"14\\\" y1=\\\"1\\\" x2=\\\"14\\\" y2=\\\"4\\\"></line>\",\"columns\":\"<path d=\\\"M12 3h7a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-7m0-18H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h7m0-18v18\\\"></path>\",\"command\":\"<path d=\\\"M18 3a3 3 0 0 0-3 3v12a3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3H6a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3V6a3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3h12a3 3 0 0 0 3-3 3 3 0 0 0-3-3z\\\"></path>\",\"compass\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><polygon points=\\\"16.24 7.76 14.12 14.12 7.76 16.24 9.88 9.88 16.24 7.76\\\"></polygon>\",\"copy\":\"<rect x=\\\"9\\\" y=\\\"9\\\" width=\\\"13\\\" height=\\\"13\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><path d=\\\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\\\"></path>\",\"corner-down-left\":\"<polyline points=\\\"9 10 4 15 9 20\\\"></polyline><path d=\\\"M20 4v7a4 4 0 0 1-4 4H4\\\"></path>\",\"corner-down-right\":\"<polyline points=\\\"15 10 20 15 15 20\\\"></polyline><path d=\\\"M4 4v7a4 4 0 0 0 4 4h12\\\"></path>\",\"corner-left-down\":\"<polyline points=\\\"14 15 9 20 4 15\\\"></polyline><path d=\\\"M20 4h-7a4 4 0 0 0-4 4v12\\\"></path>\",\"corner-left-up\":\"<polyline points=\\\"14 9 9 4 4 9\\\"></polyline><path d=\\\"M20 20h-7a4 4 0 0 1-4-4V4\\\"></path>\",\"corner-right-down\":\"<polyline points=\\\"10 15 15 20 20 15\\\"></polyline><path d=\\\"M4 4h7a4 4 0 0 1 4 4v12\\\"></path>\",\"corner-right-up\":\"<polyline points=\\\"10 9 15 4 20 9\\\"></polyline><path d=\\\"M4 20h7a4 4 0 0 0 4-4V4\\\"></path>\",\"corner-up-left\":\"<polyline points=\\\"9 14 4 9 9 4\\\"></polyline><path d=\\\"M20 20v-7a4 4 0 0 0-4-4H4\\\"></path>\",\"corner-up-right\":\"<polyline points=\\\"15 14 20 9 15 4\\\"></polyline><path d=\\\"M4 20v-7a4 4 0 0 1 4-4h12\\\"></path>\",\"cpu\":\"<rect x=\\\"4\\\" y=\\\"4\\\" width=\\\"16\\\" height=\\\"16\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><rect x=\\\"9\\\" y=\\\"9\\\" width=\\\"6\\\" height=\\\"6\\\"></rect><line x1=\\\"9\\\" y1=\\\"1\\\" x2=\\\"9\\\" y2=\\\"4\\\"></line><line x1=\\\"15\\\" y1=\\\"1\\\" x2=\\\"15\\\" y2=\\\"4\\\"></line><line x1=\\\"9\\\" y1=\\\"20\\\" x2=\\\"9\\\" y2=\\\"23\\\"></line><line x1=\\\"15\\\" y1=\\\"20\\\" x2=\\\"15\\\" y2=\\\"23\\\"></line><line x1=\\\"20\\\" y1=\\\"9\\\" x2=\\\"23\\\" y2=\\\"9\\\"></line><line x1=\\\"20\\\" y1=\\\"14\\\" x2=\\\"23\\\" y2=\\\"14\\\"></line><line x1=\\\"1\\\" y1=\\\"9\\\" x2=\\\"4\\\" y2=\\\"9\\\"></line><line x1=\\\"1\\\" y1=\\\"14\\\" x2=\\\"4\\\" y2=\\\"14\\\"></line>\",\"credit-card\":\"<rect x=\\\"1\\\" y=\\\"4\\\" width=\\\"22\\\" height=\\\"16\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"1\\\" y1=\\\"10\\\" x2=\\\"23\\\" y2=\\\"10\\\"></line>\",\"crop\":\"<path d=\\\"M6.13 1L6 16a2 2 0 0 0 2 2h15\\\"></path><path d=\\\"M1 6.13L16 6a2 2 0 0 1 2 2v15\\\"></path>\",\"crosshair\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"22\\\" y1=\\\"12\\\" x2=\\\"18\\\" y2=\\\"12\\\"></line><line x1=\\\"6\\\" y1=\\\"12\\\" x2=\\\"2\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"6\\\" x2=\\\"12\\\" y2=\\\"2\\\"></line><line x1=\\\"12\\\" y1=\\\"22\\\" x2=\\\"12\\\" y2=\\\"18\\\"></line>\",\"database\":\"<ellipse cx=\\\"12\\\" cy=\\\"5\\\" rx=\\\"9\\\" ry=\\\"3\\\"></ellipse><path d=\\\"M21 12c0 1.66-4 3-9 3s-9-1.34-9-3\\\"></path><path d=\\\"M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5\\\"></path>\",\"delete\":\"<path d=\\\"M21 4H8l-7 8 7 8h13a2 2 0 0 0 2-2V6a2 2 0 0 0-2-2z\\\"></path><line x1=\\\"18\\\" y1=\\\"9\\\" x2=\\\"12\\\" y2=\\\"15\\\"></line><line x1=\\\"12\\\" y1=\\\"9\\\" x2=\\\"18\\\" y2=\\\"15\\\"></line>\",\"disc\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"></circle>\",\"dollar-sign\":\"<line x1=\\\"12\\\" y1=\\\"1\\\" x2=\\\"12\\\" y2=\\\"23\\\"></line><path d=\\\"M17 5H9.5a3.5 3.5 0 0 0 0 7h5a3.5 3.5 0 0 1 0 7H6\\\"></path>\",\"download-cloud\":\"<polyline points=\\\"8 17 12 21 16 17\\\"></polyline><line x1=\\\"12\\\" y1=\\\"12\\\" x2=\\\"12\\\" y2=\\\"21\\\"></line><path d=\\\"M20.88 18.09A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.29\\\"></path>\",\"download\":\"<path d=\\\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"></path><polyline points=\\\"7 10 12 15 17 10\\\"></polyline><line x1=\\\"12\\\" y1=\\\"15\\\" x2=\\\"12\\\" y2=\\\"3\\\"></line>\",\"droplet\":\"<path d=\\\"M12 2.69l5.66 5.66a8 8 0 1 1-11.31 0z\\\"></path>\",\"edit-2\":\"<path d=\\\"M17 3a2.828 2.828 0 1 1 4 4L7.5 20.5 2 22l1.5-5.5L17 3z\\\"></path>\",\"edit-3\":\"<path d=\\\"M12 20h9\\\"></path><path d=\\\"M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4L16.5 3.5z\\\"></path>\",\"edit\":\"<path d=\\\"M11 4H4a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7\\\"></path><path d=\\\"M18.5 2.5a2.121 2.121 0 0 1 3 3L12 15l-4 1 1-4 9.5-9.5z\\\"></path>\",\"external-link\":\"<path d=\\\"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6\\\"></path><polyline points=\\\"15 3 21 3 21 9\\\"></polyline><line x1=\\\"10\\\" y1=\\\"14\\\" x2=\\\"21\\\" y2=\\\"3\\\"></line>\",\"eye-off\":\"<path d=\\\"M17.94 17.94A10.07 10.07 0 0 1 12 20c-7 0-11-8-11-8a18.45 18.45 0 0 1 5.06-5.94M9.9 4.24A9.12 9.12 0 0 1 12 4c7 0 11 8 11 8a18.5 18.5 0 0 1-2.16 3.19m-6.72-1.07a3 3 0 1 1-4.24-4.24\\\"></path><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line>\",\"eye\":\"<path d=\\\"M1 12s4-8 11-8 11 8 11 8-4 8-11 8-11-8-11-8z\\\"></path><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"></circle>\",\"facebook\":\"<path d=\\\"M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z\\\"></path>\",\"fast-forward\":\"<polygon points=\\\"13 19 22 12 13 5 13 19\\\"></polygon><polygon points=\\\"2 19 11 12 2 5 2 19\\\"></polygon>\",\"feather\":\"<path d=\\\"M20.24 12.24a6 6 0 0 0-8.49-8.49L5 10.5V19h8.5z\\\"></path><line x1=\\\"16\\\" y1=\\\"8\\\" x2=\\\"2\\\" y2=\\\"22\\\"></line><line x1=\\\"17.5\\\" y1=\\\"15\\\" x2=\\\"9\\\" y2=\\\"15\\\"></line>\",\"figma\":\"<path d=\\\"M5 5.5A3.5 3.5 0 0 1 8.5 2H12v7H8.5A3.5 3.5 0 0 1 5 5.5z\\\"></path><path d=\\\"M12 2h3.5a3.5 3.5 0 1 1 0 7H12V2z\\\"></path><path d=\\\"M12 12.5a3.5 3.5 0 1 1 7 0 3.5 3.5 0 1 1-7 0z\\\"></path><path d=\\\"M5 19.5A3.5 3.5 0 0 1 8.5 16H12v3.5a3.5 3.5 0 1 1-7 0z\\\"></path><path d=\\\"M5 12.5A3.5 3.5 0 0 1 8.5 9H12v7H8.5A3.5 3.5 0 0 1 5 12.5z\\\"></path>\",\"file-minus\":\"<path d=\\\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\\\"></path><polyline points=\\\"14 2 14 8 20 8\\\"></polyline><line x1=\\\"9\\\" y1=\\\"15\\\" x2=\\\"15\\\" y2=\\\"15\\\"></line>\",\"file-plus\":\"<path d=\\\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\\\"></path><polyline points=\\\"14 2 14 8 20 8\\\"></polyline><line x1=\\\"12\\\" y1=\\\"18\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line><line x1=\\\"9\\\" y1=\\\"15\\\" x2=\\\"15\\\" y2=\\\"15\\\"></line>\",\"file-text\":\"<path d=\\\"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z\\\"></path><polyline points=\\\"14 2 14 8 20 8\\\"></polyline><line x1=\\\"16\\\" y1=\\\"13\\\" x2=\\\"8\\\" y2=\\\"13\\\"></line><line x1=\\\"16\\\" y1=\\\"17\\\" x2=\\\"8\\\" y2=\\\"17\\\"></line><polyline points=\\\"10 9 9 9 8 9\\\"></polyline>\",\"file\":\"<path d=\\\"M13 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V9z\\\"></path><polyline points=\\\"13 2 13 9 20 9\\\"></polyline>\",\"film\":\"<rect x=\\\"2\\\" y=\\\"2\\\" width=\\\"20\\\" height=\\\"20\\\" rx=\\\"2.18\\\" ry=\\\"2.18\\\"></rect><line x1=\\\"7\\\" y1=\\\"2\\\" x2=\\\"7\\\" y2=\\\"22\\\"></line><line x1=\\\"17\\\" y1=\\\"2\\\" x2=\\\"17\\\" y2=\\\"22\\\"></line><line x1=\\\"2\\\" y1=\\\"12\\\" x2=\\\"22\\\" y2=\\\"12\\\"></line><line x1=\\\"2\\\" y1=\\\"7\\\" x2=\\\"7\\\" y2=\\\"7\\\"></line><line x1=\\\"2\\\" y1=\\\"17\\\" x2=\\\"7\\\" y2=\\\"17\\\"></line><line x1=\\\"17\\\" y1=\\\"17\\\" x2=\\\"22\\\" y2=\\\"17\\\"></line><line x1=\\\"17\\\" y1=\\\"7\\\" x2=\\\"22\\\" y2=\\\"7\\\"></line>\",\"filter\":\"<polygon points=\\\"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3\\\"></polygon>\",\"flag\":\"<path d=\\\"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z\\\"></path><line x1=\\\"4\\\" y1=\\\"22\\\" x2=\\\"4\\\" y2=\\\"15\\\"></line>\",\"folder-minus\":\"<path d=\\\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\\\"></path><line x1=\\\"9\\\" y1=\\\"14\\\" x2=\\\"15\\\" y2=\\\"14\\\"></line>\",\"folder-plus\":\"<path d=\\\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\\\"></path><line x1=\\\"12\\\" y1=\\\"11\\\" x2=\\\"12\\\" y2=\\\"17\\\"></line><line x1=\\\"9\\\" y1=\\\"14\\\" x2=\\\"15\\\" y2=\\\"14\\\"></line>\",\"folder\":\"<path d=\\\"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z\\\"></path>\",\"framer\":\"<path d=\\\"M5 16V9h14V2H5l14 14h-7m-7 0l7 7v-7m-7 0h7\\\"></path>\",\"frown\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><path d=\\\"M16 16s-1.5-2-4-2-4 2-4 2\\\"></path><line x1=\\\"9\\\" y1=\\\"9\\\" x2=\\\"9.01\\\" y2=\\\"9\\\"></line><line x1=\\\"15\\\" y1=\\\"9\\\" x2=\\\"15.01\\\" y2=\\\"9\\\"></line>\",\"gift\":\"<polyline points=\\\"20 12 20 22 4 22 4 12\\\"></polyline><rect x=\\\"2\\\" y=\\\"7\\\" width=\\\"20\\\" height=\\\"5\\\"></rect><line x1=\\\"12\\\" y1=\\\"22\\\" x2=\\\"12\\\" y2=\\\"7\\\"></line><path d=\\\"M12 7H7.5a2.5 2.5 0 0 1 0-5C11 2 12 7 12 7z\\\"></path><path d=\\\"M12 7h4.5a2.5 2.5 0 0 0 0-5C13 2 12 7 12 7z\\\"></path>\",\"git-branch\":\"<line x1=\\\"6\\\" y1=\\\"3\\\" x2=\\\"6\\\" y2=\\\"15\\\"></line><circle cx=\\\"18\\\" cy=\\\"6\\\" r=\\\"3\\\"></circle><circle cx=\\\"6\\\" cy=\\\"18\\\" r=\\\"3\\\"></circle><path d=\\\"M18 9a9 9 0 0 1-9 9\\\"></path>\",\"git-commit\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\"></circle><line x1=\\\"1.05\\\" y1=\\\"12\\\" x2=\\\"7\\\" y2=\\\"12\\\"></line><line x1=\\\"17.01\\\" y1=\\\"12\\\" x2=\\\"22.96\\\" y2=\\\"12\\\"></line>\",\"git-merge\":\"<circle cx=\\\"18\\\" cy=\\\"18\\\" r=\\\"3\\\"></circle><circle cx=\\\"6\\\" cy=\\\"6\\\" r=\\\"3\\\"></circle><path d=\\\"M6 21V9a9 9 0 0 0 9 9\\\"></path>\",\"git-pull-request\":\"<circle cx=\\\"18\\\" cy=\\\"18\\\" r=\\\"3\\\"></circle><circle cx=\\\"6\\\" cy=\\\"6\\\" r=\\\"3\\\"></circle><path d=\\\"M13 6h3a2 2 0 0 1 2 2v7\\\"></path><line x1=\\\"6\\\" y1=\\\"9\\\" x2=\\\"6\\\" y2=\\\"21\\\"></line>\",\"github\":\"<path d=\\\"M9 19c-5 1.5-5-2.5-7-3m14 6v-3.87a3.37 3.37 0 0 0-.94-2.61c3.14-.35 6.44-1.54 6.44-7A5.44 5.44 0 0 0 20 4.77 5.07 5.07 0 0 0 19.91 1S18.73.65 16 2.48a13.38 13.38 0 0 0-7 0C6.27.65 5.09 1 5.09 1A5.07 5.07 0 0 0 5 4.77a5.44 5.44 0 0 0-1.5 3.78c0 5.42 3.3 6.61 6.44 7A3.37 3.37 0 0 0 9 18.13V22\\\"></path>\",\"gitlab\":\"<path d=\\\"M22.65 14.39L12 22.13 1.35 14.39a.84.84 0 0 1-.3-.94l1.22-3.78 2.44-7.51A.42.42 0 0 1 4.82 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.49h8.1l2.44-7.51A.42.42 0 0 1 18.6 2a.43.43 0 0 1 .58 0 .42.42 0 0 1 .11.18l2.44 7.51L23 13.45a.84.84 0 0 1-.35.94z\\\"></path>\",\"globe\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"2\\\" y1=\\\"12\\\" x2=\\\"22\\\" y2=\\\"12\\\"></line><path d=\\\"M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z\\\"></path>\",\"grid\":\"<rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"7\\\" height=\\\"7\\\"></rect><rect x=\\\"14\\\" y=\\\"3\\\" width=\\\"7\\\" height=\\\"7\\\"></rect><rect x=\\\"14\\\" y=\\\"14\\\" width=\\\"7\\\" height=\\\"7\\\"></rect><rect x=\\\"3\\\" y=\\\"14\\\" width=\\\"7\\\" height=\\\"7\\\"></rect>\",\"hard-drive\":\"<line x1=\\\"22\\\" y1=\\\"12\\\" x2=\\\"2\\\" y2=\\\"12\\\"></line><path d=\\\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\\\"></path><line x1=\\\"6\\\" y1=\\\"16\\\" x2=\\\"6\\\" y2=\\\"16\\\"></line><line x1=\\\"10\\\" y1=\\\"16\\\" x2=\\\"10\\\" y2=\\\"16\\\"></line>\",\"hash\":\"<line x1=\\\"4\\\" y1=\\\"9\\\" x2=\\\"20\\\" y2=\\\"9\\\"></line><line x1=\\\"4\\\" y1=\\\"15\\\" x2=\\\"20\\\" y2=\\\"15\\\"></line><line x1=\\\"10\\\" y1=\\\"3\\\" x2=\\\"8\\\" y2=\\\"21\\\"></line><line x1=\\\"16\\\" y1=\\\"3\\\" x2=\\\"14\\\" y2=\\\"21\\\"></line>\",\"headphones\":\"<path d=\\\"M3 18v-6a9 9 0 0 1 18 0v6\\\"></path><path d=\\\"M21 19a2 2 0 0 1-2 2h-1a2 2 0 0 1-2-2v-3a2 2 0 0 1 2-2h3zM3 19a2 2 0 0 0 2 2h1a2 2 0 0 0 2-2v-3a2 2 0 0 0-2-2H3z\\\"></path>\",\"heart\":\"<path d=\\\"M20.84 4.61a5.5 5.5 0 0 0-7.78 0L12 5.67l-1.06-1.06a5.5 5.5 0 0 0-7.78 7.78l1.06 1.06L12 21.23l7.78-7.78 1.06-1.06a5.5 5.5 0 0 0 0-7.78z\\\"></path>\",\"help-circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><path d=\\\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3\\\"></path><line x1=\\\"12\\\" y1=\\\"17\\\" x2=\\\"12\\\" y2=\\\"17\\\"></line>\",\"hexagon\":\"<path d=\\\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\\\"></path>\",\"home\":\"<path d=\\\"M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z\\\"></path><polyline points=\\\"9 22 9 12 15 12 15 22\\\"></polyline>\",\"image\":\"<rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><circle cx=\\\"8.5\\\" cy=\\\"8.5\\\" r=\\\"1.5\\\"></circle><polyline points=\\\"21 15 16 10 5 21\\\"></polyline>\",\"inbox\":\"<polyline points=\\\"22 12 16 12 14 15 10 15 8 12 2 12\\\"></polyline><path d=\\\"M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z\\\"></path>\",\"info\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"12\\\" y1=\\\"16\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"8\\\"></line>\",\"instagram\":\"<rect x=\\\"2\\\" y=\\\"2\\\" width=\\\"20\\\" height=\\\"20\\\" rx=\\\"5\\\" ry=\\\"5\\\"></rect><path d=\\\"M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z\\\"></path><line x1=\\\"17.5\\\" y1=\\\"6.5\\\" x2=\\\"17.5\\\" y2=\\\"6.5\\\"></line>\",\"italic\":\"<line x1=\\\"19\\\" y1=\\\"4\\\" x2=\\\"10\\\" y2=\\\"4\\\"></line><line x1=\\\"14\\\" y1=\\\"20\\\" x2=\\\"5\\\" y2=\\\"20\\\"></line><line x1=\\\"15\\\" y1=\\\"4\\\" x2=\\\"9\\\" y2=\\\"20\\\"></line>\",\"key\":\"<path d=\\\"M21 2l-2 2m-7.61 7.61a5.5 5.5 0 1 1-7.778 7.778 5.5 5.5 0 0 1 7.777-7.777zm0 0L15.5 7.5m0 0l3 3L22 7l-3-3m-3.5 3.5L19 4\\\"></path>\",\"layers\":\"<polygon points=\\\"12 2 2 7 12 12 22 7 12 2\\\"></polygon><polyline points=\\\"2 17 12 22 22 17\\\"></polyline><polyline points=\\\"2 12 12 17 22 12\\\"></polyline>\",\"layout\":\"<rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"3\\\" y1=\\\"9\\\" x2=\\\"21\\\" y2=\\\"9\\\"></line><line x1=\\\"9\\\" y1=\\\"21\\\" x2=\\\"9\\\" y2=\\\"9\\\"></line>\",\"life-buoy\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"4\\\"></circle><line x1=\\\"4.93\\\" y1=\\\"4.93\\\" x2=\\\"9.17\\\" y2=\\\"9.17\\\"></line><line x1=\\\"14.83\\\" y1=\\\"14.83\\\" x2=\\\"19.07\\\" y2=\\\"19.07\\\"></line><line x1=\\\"14.83\\\" y1=\\\"9.17\\\" x2=\\\"19.07\\\" y2=\\\"4.93\\\"></line><line x1=\\\"14.83\\\" y1=\\\"9.17\\\" x2=\\\"18.36\\\" y2=\\\"5.64\\\"></line><line x1=\\\"4.93\\\" y1=\\\"19.07\\\" x2=\\\"9.17\\\" y2=\\\"14.83\\\"></line>\",\"link-2\":\"<path d=\\\"M15 7h3a5 5 0 0 1 5 5 5 5 0 0 1-5 5h-3m-6 0H6a5 5 0 0 1-5-5 5 5 0 0 1 5-5h3\\\"></path><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line>\",\"link\":\"<path d=\\\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\\\"></path><path d=\\\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\\\"></path>\",\"linkedin\":\"<path d=\\\"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z\\\"></path><rect x=\\\"2\\\" y=\\\"9\\\" width=\\\"4\\\" height=\\\"12\\\"></rect><circle cx=\\\"4\\\" cy=\\\"4\\\" r=\\\"2\\\"></circle>\",\"list\":\"<line x1=\\\"8\\\" y1=\\\"6\\\" x2=\\\"21\\\" y2=\\\"6\\\"></line><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"21\\\" y2=\\\"12\\\"></line><line x1=\\\"8\\\" y1=\\\"18\\\" x2=\\\"21\\\" y2=\\\"18\\\"></line><line x1=\\\"3\\\" y1=\\\"6\\\" x2=\\\"3\\\" y2=\\\"6\\\"></line><line x1=\\\"3\\\" y1=\\\"12\\\" x2=\\\"3\\\" y2=\\\"12\\\"></line><line x1=\\\"3\\\" y1=\\\"18\\\" x2=\\\"3\\\" y2=\\\"18\\\"></line>\",\"loader\":\"<line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"6\\\"></line><line x1=\\\"12\\\" y1=\\\"18\\\" x2=\\\"12\\\" y2=\\\"22\\\"></line><line x1=\\\"4.93\\\" y1=\\\"4.93\\\" x2=\\\"7.76\\\" y2=\\\"7.76\\\"></line><line x1=\\\"16.24\\\" y1=\\\"16.24\\\" x2=\\\"19.07\\\" y2=\\\"19.07\\\"></line><line x1=\\\"2\\\" y1=\\\"12\\\" x2=\\\"6\\\" y2=\\\"12\\\"></line><line x1=\\\"18\\\" y1=\\\"12\\\" x2=\\\"22\\\" y2=\\\"12\\\"></line><line x1=\\\"4.93\\\" y1=\\\"19.07\\\" x2=\\\"7.76\\\" y2=\\\"16.24\\\"></line><line x1=\\\"16.24\\\" y1=\\\"7.76\\\" x2=\\\"19.07\\\" y2=\\\"4.93\\\"></line>\",\"lock\":\"<rect x=\\\"3\\\" y=\\\"11\\\" width=\\\"18\\\" height=\\\"11\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><path d=\\\"M7 11V7a5 5 0 0 1 10 0v4\\\"></path>\",\"log-in\":\"<path d=\\\"M15 3h4a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2h-4\\\"></path><polyline points=\\\"10 17 15 12 10 7\\\"></polyline><line x1=\\\"15\\\" y1=\\\"12\\\" x2=\\\"3\\\" y2=\\\"12\\\"></line>\",\"log-out\":\"<path d=\\\"M9 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h4\\\"></path><polyline points=\\\"16 17 21 12 16 7\\\"></polyline><line x1=\\\"21\\\" y1=\\\"12\\\" x2=\\\"9\\\" y2=\\\"12\\\"></line>\",\"mail\":\"<path d=\\\"M4 4h16c1.1 0 2 .9 2 2v12c0 1.1-.9 2-2 2H4c-1.1 0-2-.9-2-2V6c0-1.1.9-2 2-2z\\\"></path><polyline points=\\\"22,6 12,13 2,6\\\"></polyline>\",\"map-pin\":\"<path d=\\\"M21 10c0 7-9 13-9 13s-9-6-9-13a9 9 0 0 1 18 0z\\\"></path><circle cx=\\\"12\\\" cy=\\\"10\\\" r=\\\"3\\\"></circle>\",\"map\":\"<polygon points=\\\"1 6 1 22 8 18 16 22 23 18 23 2 16 6 8 2 1 6\\\"></polygon><line x1=\\\"8\\\" y1=\\\"2\\\" x2=\\\"8\\\" y2=\\\"18\\\"></line><line x1=\\\"16\\\" y1=\\\"6\\\" x2=\\\"16\\\" y2=\\\"22\\\"></line>\",\"maximize-2\":\"<polyline points=\\\"15 3 21 3 21 9\\\"></polyline><polyline points=\\\"9 21 3 21 3 15\\\"></polyline><line x1=\\\"21\\\" y1=\\\"3\\\" x2=\\\"14\\\" y2=\\\"10\\\"></line><line x1=\\\"3\\\" y1=\\\"21\\\" x2=\\\"10\\\" y2=\\\"14\\\"></line>\",\"maximize\":\"<path d=\\\"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3\\\"></path>\",\"meh\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"8\\\" y1=\\\"15\\\" x2=\\\"16\\\" y2=\\\"15\\\"></line><line x1=\\\"9\\\" y1=\\\"9\\\" x2=\\\"9.01\\\" y2=\\\"9\\\"></line><line x1=\\\"15\\\" y1=\\\"9\\\" x2=\\\"15.01\\\" y2=\\\"9\\\"></line>\",\"menu\":\"<line x1=\\\"3\\\" y1=\\\"12\\\" x2=\\\"21\\\" y2=\\\"12\\\"></line><line x1=\\\"3\\\" y1=\\\"6\\\" x2=\\\"21\\\" y2=\\\"6\\\"></line><line x1=\\\"3\\\" y1=\\\"18\\\" x2=\\\"21\\\" y2=\\\"18\\\"></line>\",\"message-circle\":\"<path d=\\\"M21 11.5a8.38 8.38 0 0 1-.9 3.8 8.5 8.5 0 0 1-7.6 4.7 8.38 8.38 0 0 1-3.8-.9L3 21l1.9-5.7a8.38 8.38 0 0 1-.9-3.8 8.5 8.5 0 0 1 4.7-7.6 8.38 8.38 0 0 1 3.8-.9h.5a8.48 8.48 0 0 1 8 8v.5z\\\"></path>\",\"message-square\":\"<path d=\\\"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z\\\"></path>\",\"mic-off\":\"<line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line><path d=\\\"M9 9v3a3 3 0 0 0 5.12 2.12M15 9.34V4a3 3 0 0 0-5.94-.6\\\"></path><path d=\\\"M17 16.95A7 7 0 0 1 5 12v-2m14 0v2a7 7 0 0 1-.11 1.23\\\"></path><line x1=\\\"12\\\" y1=\\\"19\\\" x2=\\\"12\\\" y2=\\\"23\\\"></line><line x1=\\\"8\\\" y1=\\\"23\\\" x2=\\\"16\\\" y2=\\\"23\\\"></line>\",\"mic\":\"<path d=\\\"M12 1a3 3 0 0 0-3 3v8a3 3 0 0 0 6 0V4a3 3 0 0 0-3-3z\\\"></path><path d=\\\"M19 10v2a7 7 0 0 1-14 0v-2\\\"></path><line x1=\\\"12\\\" y1=\\\"19\\\" x2=\\\"12\\\" y2=\\\"23\\\"></line><line x1=\\\"8\\\" y1=\\\"23\\\" x2=\\\"16\\\" y2=\\\"23\\\"></line>\",\"minimize-2\":\"<polyline points=\\\"4 14 10 14 10 20\\\"></polyline><polyline points=\\\"20 10 14 10 14 4\\\"></polyline><line x1=\\\"14\\\" y1=\\\"10\\\" x2=\\\"21\\\" y2=\\\"3\\\"></line><line x1=\\\"3\\\" y1=\\\"21\\\" x2=\\\"10\\\" y2=\\\"14\\\"></line>\",\"minimize\":\"<path d=\\\"M8 3v3a2 2 0 0 1-2 2H3m18 0h-3a2 2 0 0 1-2-2V3m0 18v-3a2 2 0 0 1 2-2h3M3 16h3a2 2 0 0 1 2 2v3\\\"></path>\",\"minus-circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line>\",\"minus-square\":\"<rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line>\",\"minus\":\"<line x1=\\\"5\\\" y1=\\\"12\\\" x2=\\\"19\\\" y2=\\\"12\\\"></line>\",\"monitor\":\"<rect x=\\\"2\\\" y=\\\"3\\\" width=\\\"20\\\" height=\\\"14\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"8\\\" y1=\\\"21\\\" x2=\\\"16\\\" y2=\\\"21\\\"></line><line x1=\\\"12\\\" y1=\\\"17\\\" x2=\\\"12\\\" y2=\\\"21\\\"></line>\",\"moon\":\"<path d=\\\"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z\\\"></path>\",\"more-horizontal\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"1\\\"></circle><circle cx=\\\"19\\\" cy=\\\"12\\\" r=\\\"1\\\"></circle><circle cx=\\\"5\\\" cy=\\\"12\\\" r=\\\"1\\\"></circle>\",\"more-vertical\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"1\\\"></circle><circle cx=\\\"12\\\" cy=\\\"5\\\" r=\\\"1\\\"></circle><circle cx=\\\"12\\\" cy=\\\"19\\\" r=\\\"1\\\"></circle>\",\"mouse-pointer\":\"<path d=\\\"M3 3l7.07 16.97 2.51-7.39 7.39-2.51L3 3z\\\"></path><path d=\\\"M13 13l6 6\\\"></path>\",\"move\":\"<polyline points=\\\"5 9 2 12 5 15\\\"></polyline><polyline points=\\\"9 5 12 2 15 5\\\"></polyline><polyline points=\\\"15 19 12 22 9 19\\\"></polyline><polyline points=\\\"19 9 22 12 19 15\\\"></polyline><line x1=\\\"2\\\" y1=\\\"12\\\" x2=\\\"22\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"22\\\"></line>\",\"music\":\"<path d=\\\"M9 18V5l12-2v13\\\"></path><circle cx=\\\"6\\\" cy=\\\"18\\\" r=\\\"3\\\"></circle><circle cx=\\\"18\\\" cy=\\\"16\\\" r=\\\"3\\\"></circle>\",\"navigation-2\":\"<polygon points=\\\"12 2 19 21 12 17 5 21 12 2\\\"></polygon>\",\"navigation\":\"<polygon points=\\\"3 11 22 2 13 21 11 13 3 11\\\"></polygon>\",\"octagon\":\"<polygon points=\\\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\\\"></polygon>\",\"package\":\"<line x1=\\\"16.5\\\" y1=\\\"9.4\\\" x2=\\\"7.5\\\" y2=\\\"4.21\\\"></line><path d=\\\"M21 16V8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16z\\\"></path><polyline points=\\\"3.27 6.96 12 12.01 20.73 6.96\\\"></polyline><line x1=\\\"12\\\" y1=\\\"22.08\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line>\",\"paperclip\":\"<path d=\\\"M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66l-9.2 9.19a2 2 0 0 1-2.83-2.83l8.49-8.48\\\"></path>\",\"pause-circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"10\\\" y1=\\\"15\\\" x2=\\\"10\\\" y2=\\\"9\\\"></line><line x1=\\\"14\\\" y1=\\\"15\\\" x2=\\\"14\\\" y2=\\\"9\\\"></line>\",\"pause\":\"<rect x=\\\"6\\\" y=\\\"4\\\" width=\\\"4\\\" height=\\\"16\\\"></rect><rect x=\\\"14\\\" y=\\\"4\\\" width=\\\"4\\\" height=\\\"16\\\"></rect>\",\"pen-tool\":\"<path d=\\\"M12 19l7-7 3 3-7 7-3-3z\\\"></path><path d=\\\"M18 13l-1.5-7.5L2 2l3.5 14.5L13 18l5-5z\\\"></path><path d=\\\"M2 2l7.586 7.586\\\"></path><circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"2\\\"></circle>\",\"percent\":\"<line x1=\\\"19\\\" y1=\\\"5\\\" x2=\\\"5\\\" y2=\\\"19\\\"></line><circle cx=\\\"6.5\\\" cy=\\\"6.5\\\" r=\\\"2.5\\\"></circle><circle cx=\\\"17.5\\\" cy=\\\"17.5\\\" r=\\\"2.5\\\"></circle>\",\"phone-call\":\"<path d=\\\"M15.05 5A5 5 0 0 1 19 8.95M15.05 1A9 9 0 0 1 23 8.94m-1 7.98v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"></path>\",\"phone-forwarded\":\"<polyline points=\\\"19 1 23 5 19 9\\\"></polyline><line x1=\\\"15\\\" y1=\\\"5\\\" x2=\\\"23\\\" y2=\\\"5\\\"></line><path d=\\\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"></path>\",\"phone-incoming\":\"<polyline points=\\\"16 2 16 8 22 8\\\"></polyline><line x1=\\\"23\\\" y1=\\\"1\\\" x2=\\\"16\\\" y2=\\\"8\\\"></line><path d=\\\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"></path>\",\"phone-missed\":\"<line x1=\\\"23\\\" y1=\\\"1\\\" x2=\\\"17\\\" y2=\\\"7\\\"></line><line x1=\\\"17\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"7\\\"></line><path d=\\\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"></path>\",\"phone-off\":\"<path d=\\\"M10.68 13.31a16 16 0 0 0 3.41 2.6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7 2 2 0 0 1 1.72 2v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.42 19.42 0 0 1-3.33-2.67m-2.67-3.34a19.79 19.79 0 0 1-3.07-8.63A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91\\\"></path><line x1=\\\"23\\\" y1=\\\"1\\\" x2=\\\"1\\\" y2=\\\"23\\\"></line>\",\"phone-outgoing\":\"<polyline points=\\\"23 7 23 1 17 1\\\"></polyline><line x1=\\\"16\\\" y1=\\\"8\\\" x2=\\\"23\\\" y2=\\\"1\\\"></line><path d=\\\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"></path>\",\"phone\":\"<path d=\\\"M22 16.92v3a2 2 0 0 1-2.18 2 19.79 19.79 0 0 1-8.63-3.07 19.5 19.5 0 0 1-6-6 19.79 19.79 0 0 1-3.07-8.67A2 2 0 0 1 4.11 2h3a2 2 0 0 1 2 1.72 12.84 12.84 0 0 0 .7 2.81 2 2 0 0 1-.45 2.11L8.09 9.91a16 16 0 0 0 6 6l1.27-1.27a2 2 0 0 1 2.11-.45 12.84 12.84 0 0 0 2.81.7A2 2 0 0 1 22 16.92z\\\"></path>\",\"pie-chart\":\"<path d=\\\"M21.21 15.89A10 10 0 1 1 8 2.83\\\"></path><path d=\\\"M22 12A10 10 0 0 0 12 2v10z\\\"></path>\",\"play-circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><polygon points=\\\"10 8 16 12 10 16 10 8\\\"></polygon>\",\"play\":\"<polygon points=\\\"5 3 19 12 5 21 5 3\\\"></polygon>\",\"plus-circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"16\\\"></line><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line>\",\"plus-square\":\"<rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"16\\\"></line><line x1=\\\"8\\\" y1=\\\"12\\\" x2=\\\"16\\\" y2=\\\"12\\\"></line>\",\"plus\":\"<line x1=\\\"12\\\" y1=\\\"5\\\" x2=\\\"12\\\" y2=\\\"19\\\"></line><line x1=\\\"5\\\" y1=\\\"12\\\" x2=\\\"19\\\" y2=\\\"12\\\"></line>\",\"pocket\":\"<path d=\\\"M4 3h16a2 2 0 0 1 2 2v6a10 10 0 0 1-10 10A10 10 0 0 1 2 11V5a2 2 0 0 1 2-2z\\\"></path><polyline points=\\\"8 10 12 14 16 10\\\"></polyline>\",\"power\":\"<path d=\\\"M18.36 6.64a9 9 0 1 1-12.73 0\\\"></path><line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line>\",\"printer\":\"<polyline points=\\\"6 9 6 2 18 2 18 9\\\"></polyline><path d=\\\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\\\"></path><rect x=\\\"6\\\" y=\\\"14\\\" width=\\\"12\\\" height=\\\"8\\\"></rect>\",\"radio\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"2\\\"></circle><path d=\\\"M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14\\\"></path>\",\"refresh-ccw\":\"<polyline points=\\\"1 4 1 10 7 10\\\"></polyline><polyline points=\\\"23 20 23 14 17 14\\\"></polyline><path d=\\\"M20.49 9A9 9 0 0 0 5.64 5.64L1 10m22 4l-4.64 4.36A9 9 0 0 1 3.51 15\\\"></path>\",\"refresh-cw\":\"<polyline points=\\\"23 4 23 10 17 10\\\"></polyline><polyline points=\\\"1 20 1 14 7 14\\\"></polyline><path d=\\\"M3.51 9a9 9 0 0 1 14.85-3.36L23 10M1 14l4.64 4.36A9 9 0 0 0 20.49 15\\\"></path>\",\"repeat\":\"<polyline points=\\\"17 1 21 5 17 9\\\"></polyline><path d=\\\"M3 11V9a4 4 0 0 1 4-4h14\\\"></path><polyline points=\\\"7 23 3 19 7 15\\\"></polyline><path d=\\\"M21 13v2a4 4 0 0 1-4 4H3\\\"></path>\",\"rewind\":\"<polygon points=\\\"11 19 2 12 11 5 11 19\\\"></polygon><polygon points=\\\"22 19 13 12 22 5 22 19\\\"></polygon>\",\"rotate-ccw\":\"<polyline points=\\\"1 4 1 10 7 10\\\"></polyline><path d=\\\"M3.51 15a9 9 0 1 0 2.13-9.36L1 10\\\"></path>\",\"rotate-cw\":\"<polyline points=\\\"23 4 23 10 17 10\\\"></polyline><path d=\\\"M20.49 15a9 9 0 1 1-2.12-9.36L23 10\\\"></path>\",\"rss\":\"<path d=\\\"M4 11a9 9 0 0 1 9 9\\\"></path><path d=\\\"M4 4a16 16 0 0 1 16 16\\\"></path><circle cx=\\\"5\\\" cy=\\\"19\\\" r=\\\"1\\\"></circle>\",\"save\":\"<path d=\\\"M19 21H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11l5 5v11a2 2 0 0 1-2 2z\\\"></path><polyline points=\\\"17 21 17 13 7 13 7 21\\\"></polyline><polyline points=\\\"7 3 7 8 15 8\\\"></polyline>\",\"scissors\":\"<circle cx=\\\"6\\\" cy=\\\"6\\\" r=\\\"3\\\"></circle><circle cx=\\\"6\\\" cy=\\\"18\\\" r=\\\"3\\\"></circle><line x1=\\\"20\\\" y1=\\\"4\\\" x2=\\\"8.12\\\" y2=\\\"15.88\\\"></line><line x1=\\\"14.47\\\" y1=\\\"14.48\\\" x2=\\\"20\\\" y2=\\\"20\\\"></line><line x1=\\\"8.12\\\" y1=\\\"8.12\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line>\",\"search\":\"<circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"></circle><line x1=\\\"21\\\" y1=\\\"21\\\" x2=\\\"16.65\\\" y2=\\\"16.65\\\"></line>\",\"send\":\"<line x1=\\\"22\\\" y1=\\\"2\\\" x2=\\\"11\\\" y2=\\\"13\\\"></line><polygon points=\\\"22 2 15 22 11 13 2 9 22 2\\\"></polygon>\",\"server\":\"<rect x=\\\"2\\\" y=\\\"2\\\" width=\\\"20\\\" height=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><rect x=\\\"2\\\" y=\\\"14\\\" width=\\\"20\\\" height=\\\"8\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"6\\\" y1=\\\"6\\\" x2=\\\"6\\\" y2=\\\"6\\\"></line><line x1=\\\"6\\\" y1=\\\"18\\\" x2=\\\"6\\\" y2=\\\"18\\\"></line>\",\"settings\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"3\\\"></circle><path d=\\\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\\\"></path>\",\"share-2\":\"<circle cx=\\\"18\\\" cy=\\\"5\\\" r=\\\"3\\\"></circle><circle cx=\\\"6\\\" cy=\\\"12\\\" r=\\\"3\\\"></circle><circle cx=\\\"18\\\" cy=\\\"19\\\" r=\\\"3\\\"></circle><line x1=\\\"8.59\\\" y1=\\\"13.51\\\" x2=\\\"15.42\\\" y2=\\\"17.49\\\"></line><line x1=\\\"15.41\\\" y1=\\\"6.51\\\" x2=\\\"8.59\\\" y2=\\\"10.49\\\"></line>\",\"share\":\"<path d=\\\"M4 12v8a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-8\\\"></path><polyline points=\\\"16 6 12 2 8 6\\\"></polyline><line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"15\\\"></line>\",\"shield-off\":\"<path d=\\\"M19.69 14a6.9 6.9 0 0 0 .31-2V5l-8-3-3.16 1.18\\\"></path><path d=\\\"M4.73 4.73L4 5v7c0 6 8 10 8 10a20.29 20.29 0 0 0 5.62-4.38\\\"></path><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line>\",\"shield\":\"<path d=\\\"M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z\\\"></path>\",\"shopping-bag\":\"<path d=\\\"M6 2L3 6v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2V6l-3-4z\\\"></path><line x1=\\\"3\\\" y1=\\\"6\\\" x2=\\\"21\\\" y2=\\\"6\\\"></line><path d=\\\"M16 10a4 4 0 0 1-8 0\\\"></path>\",\"shopping-cart\":\"<circle cx=\\\"9\\\" cy=\\\"21\\\" r=\\\"1\\\"></circle><circle cx=\\\"20\\\" cy=\\\"21\\\" r=\\\"1\\\"></circle><path d=\\\"M1 1h4l2.68 13.39a2 2 0 0 0 2 1.61h9.72a2 2 0 0 0 2-1.61L23 6H6\\\"></path>\",\"shuffle\":\"<polyline points=\\\"16 3 21 3 21 8\\\"></polyline><line x1=\\\"4\\\" y1=\\\"20\\\" x2=\\\"21\\\" y2=\\\"3\\\"></line><polyline points=\\\"21 16 21 21 16 21\\\"></polyline><line x1=\\\"15\\\" y1=\\\"15\\\" x2=\\\"21\\\" y2=\\\"21\\\"></line><line x1=\\\"4\\\" y1=\\\"4\\\" x2=\\\"9\\\" y2=\\\"9\\\"></line>\",\"sidebar\":\"<rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"9\\\" y1=\\\"3\\\" x2=\\\"9\\\" y2=\\\"21\\\"></line>\",\"skip-back\":\"<polygon points=\\\"19 20 9 12 19 4 19 20\\\"></polygon><line x1=\\\"5\\\" y1=\\\"19\\\" x2=\\\"5\\\" y2=\\\"5\\\"></line>\",\"skip-forward\":\"<polygon points=\\\"5 4 15 12 5 20 5 4\\\"></polygon><line x1=\\\"19\\\" y1=\\\"5\\\" x2=\\\"19\\\" y2=\\\"19\\\"></line>\",\"slack\":\"<path d=\\\"M14.5 10c-.83 0-1.5-.67-1.5-1.5v-5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5z\\\"></path><path d=\\\"M20.5 10H19V8.5c0-.83.67-1.5 1.5-1.5s1.5.67 1.5 1.5-.67 1.5-1.5 1.5z\\\"></path><path d=\\\"M9.5 14c.83 0 1.5.67 1.5 1.5v5c0 .83-.67 1.5-1.5 1.5S8 21.33 8 20.5v-5c0-.83.67-1.5 1.5-1.5z\\\"></path><path d=\\\"M3.5 14H5v1.5c0 .83-.67 1.5-1.5 1.5S2 16.33 2 15.5 2.67 14 3.5 14z\\\"></path><path d=\\\"M14 14.5c0-.83.67-1.5 1.5-1.5h5c.83 0 1.5.67 1.5 1.5s-.67 1.5-1.5 1.5h-5c-.83 0-1.5-.67-1.5-1.5z\\\"></path><path d=\\\"M15.5 19H14v1.5c0 .83.67 1.5 1.5 1.5s1.5-.67 1.5-1.5-.67-1.5-1.5-1.5z\\\"></path><path d=\\\"M10 9.5C10 8.67 9.33 8 8.5 8h-5C2.67 8 2 8.67 2 9.5S2.67 11 3.5 11h5c.83 0 1.5-.67 1.5-1.5z\\\"></path><path d=\\\"M8.5 5H10V3.5C10 2.67 9.33 2 8.5 2S7 2.67 7 3.5 7.67 5 8.5 5z\\\"></path>\",\"slash\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"4.93\\\" y1=\\\"4.93\\\" x2=\\\"19.07\\\" y2=\\\"19.07\\\"></line>\",\"sliders\":\"<line x1=\\\"4\\\" y1=\\\"21\\\" x2=\\\"4\\\" y2=\\\"14\\\"></line><line x1=\\\"4\\\" y1=\\\"10\\\" x2=\\\"4\\\" y2=\\\"3\\\"></line><line x1=\\\"12\\\" y1=\\\"21\\\" x2=\\\"12\\\" y2=\\\"12\\\"></line><line x1=\\\"12\\\" y1=\\\"8\\\" x2=\\\"12\\\" y2=\\\"3\\\"></line><line x1=\\\"20\\\" y1=\\\"21\\\" x2=\\\"20\\\" y2=\\\"16\\\"></line><line x1=\\\"20\\\" y1=\\\"12\\\" x2=\\\"20\\\" y2=\\\"3\\\"></line><line x1=\\\"1\\\" y1=\\\"14\\\" x2=\\\"7\\\" y2=\\\"14\\\"></line><line x1=\\\"9\\\" y1=\\\"8\\\" x2=\\\"15\\\" y2=\\\"8\\\"></line><line x1=\\\"17\\\" y1=\\\"16\\\" x2=\\\"23\\\" y2=\\\"16\\\"></line>\",\"smartphone\":\"<rect x=\\\"5\\\" y=\\\"2\\\" width=\\\"14\\\" height=\\\"20\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"12\\\" y1=\\\"18\\\" x2=\\\"12\\\" y2=\\\"18\\\"></line>\",\"smile\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><path d=\\\"M8 14s1.5 2 4 2 4-2 4-2\\\"></path><line x1=\\\"9\\\" y1=\\\"9\\\" x2=\\\"9.01\\\" y2=\\\"9\\\"></line><line x1=\\\"15\\\" y1=\\\"9\\\" x2=\\\"15.01\\\" y2=\\\"9\\\"></line>\",\"speaker\":\"<rect x=\\\"4\\\" y=\\\"2\\\" width=\\\"16\\\" height=\\\"20\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><circle cx=\\\"12\\\" cy=\\\"14\\\" r=\\\"4\\\"></circle><line x1=\\\"12\\\" y1=\\\"6\\\" x2=\\\"12\\\" y2=\\\"6\\\"></line>\",\"square\":\"<rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect>\",\"star\":\"<polygon points=\\\"12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2\\\"></polygon>\",\"stop-circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><rect x=\\\"9\\\" y=\\\"9\\\" width=\\\"6\\\" height=\\\"6\\\"></rect>\",\"sun\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"5\\\"></circle><line x1=\\\"12\\\" y1=\\\"1\\\" x2=\\\"12\\\" y2=\\\"3\\\"></line><line x1=\\\"12\\\" y1=\\\"21\\\" x2=\\\"12\\\" y2=\\\"23\\\"></line><line x1=\\\"4.22\\\" y1=\\\"4.22\\\" x2=\\\"5.64\\\" y2=\\\"5.64\\\"></line><line x1=\\\"18.36\\\" y1=\\\"18.36\\\" x2=\\\"19.78\\\" y2=\\\"19.78\\\"></line><line x1=\\\"1\\\" y1=\\\"12\\\" x2=\\\"3\\\" y2=\\\"12\\\"></line><line x1=\\\"21\\\" y1=\\\"12\\\" x2=\\\"23\\\" y2=\\\"12\\\"></line><line x1=\\\"4.22\\\" y1=\\\"19.78\\\" x2=\\\"5.64\\\" y2=\\\"18.36\\\"></line><line x1=\\\"18.36\\\" y1=\\\"5.64\\\" x2=\\\"19.78\\\" y2=\\\"4.22\\\"></line>\",\"sunrise\":\"<path d=\\\"M17 18a5 5 0 0 0-10 0\\\"></path><line x1=\\\"12\\\" y1=\\\"2\\\" x2=\\\"12\\\" y2=\\\"9\\\"></line><line x1=\\\"4.22\\\" y1=\\\"10.22\\\" x2=\\\"5.64\\\" y2=\\\"11.64\\\"></line><line x1=\\\"1\\\" y1=\\\"18\\\" x2=\\\"3\\\" y2=\\\"18\\\"></line><line x1=\\\"21\\\" y1=\\\"18\\\" x2=\\\"23\\\" y2=\\\"18\\\"></line><line x1=\\\"18.36\\\" y1=\\\"11.64\\\" x2=\\\"19.78\\\" y2=\\\"10.22\\\"></line><line x1=\\\"23\\\" y1=\\\"22\\\" x2=\\\"1\\\" y2=\\\"22\\\"></line><polyline points=\\\"8 6 12 2 16 6\\\"></polyline>\",\"sunset\":\"<path d=\\\"M17 18a5 5 0 0 0-10 0\\\"></path><line x1=\\\"12\\\" y1=\\\"9\\\" x2=\\\"12\\\" y2=\\\"2\\\"></line><line x1=\\\"4.22\\\" y1=\\\"10.22\\\" x2=\\\"5.64\\\" y2=\\\"11.64\\\"></line><line x1=\\\"1\\\" y1=\\\"18\\\" x2=\\\"3\\\" y2=\\\"18\\\"></line><line x1=\\\"21\\\" y1=\\\"18\\\" x2=\\\"23\\\" y2=\\\"18\\\"></line><line x1=\\\"18.36\\\" y1=\\\"11.64\\\" x2=\\\"19.78\\\" y2=\\\"10.22\\\"></line><line x1=\\\"23\\\" y1=\\\"22\\\" x2=\\\"1\\\" y2=\\\"22\\\"></line><polyline points=\\\"16 5 12 9 8 5\\\"></polyline>\",\"tablet\":\"<rect x=\\\"4\\\" y=\\\"2\\\" width=\\\"16\\\" height=\\\"20\\\" rx=\\\"2\\\" ry=\\\"2\\\" transform=\\\"rotate(180 12 12)\\\"></rect><line x1=\\\"12\\\" y1=\\\"18\\\" x2=\\\"12\\\" y2=\\\"18\\\"></line>\",\"tag\":\"<path d=\\\"M20.59 13.41l-7.17 7.17a2 2 0 0 1-2.83 0L2 12V2h10l8.59 8.59a2 2 0 0 1 0 2.82z\\\"></path><line x1=\\\"7\\\" y1=\\\"7\\\" x2=\\\"7\\\" y2=\\\"7\\\"></line>\",\"target\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"6\\\"></circle><circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"2\\\"></circle>\",\"terminal\":\"<polyline points=\\\"4 17 10 11 4 5\\\"></polyline><line x1=\\\"12\\\" y1=\\\"19\\\" x2=\\\"20\\\" y2=\\\"19\\\"></line>\",\"thermometer\":\"<path d=\\\"M14 14.76V3.5a2.5 2.5 0 0 0-5 0v11.26a4.5 4.5 0 1 0 5 0z\\\"></path>\",\"thumbs-down\":\"<path d=\\\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\\\"></path>\",\"thumbs-up\":\"<path d=\\\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\\\"></path>\",\"toggle-left\":\"<rect x=\\\"1\\\" y=\\\"5\\\" width=\\\"22\\\" height=\\\"14\\\" rx=\\\"7\\\" ry=\\\"7\\\"></rect><circle cx=\\\"8\\\" cy=\\\"12\\\" r=\\\"3\\\"></circle>\",\"toggle-right\":\"<rect x=\\\"1\\\" y=\\\"5\\\" width=\\\"22\\\" height=\\\"14\\\" rx=\\\"7\\\" ry=\\\"7\\\"></rect><circle cx=\\\"16\\\" cy=\\\"12\\\" r=\\\"3\\\"></circle>\",\"trash-2\":\"<polyline points=\\\"3 6 5 6 21 6\\\"></polyline><path d=\\\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\\\"></path><line x1=\\\"10\\\" y1=\\\"11\\\" x2=\\\"10\\\" y2=\\\"17\\\"></line><line x1=\\\"14\\\" y1=\\\"11\\\" x2=\\\"14\\\" y2=\\\"17\\\"></line>\",\"trash\":\"<polyline points=\\\"3 6 5 6 21 6\\\"></polyline><path d=\\\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6m3 0V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\\\"></path>\",\"trello\":\"<rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><rect x=\\\"7\\\" y=\\\"7\\\" width=\\\"3\\\" height=\\\"9\\\"></rect><rect x=\\\"14\\\" y=\\\"7\\\" width=\\\"3\\\" height=\\\"5\\\"></rect>\",\"trending-down\":\"<polyline points=\\\"23 18 13.5 8.5 8.5 13.5 1 6\\\"></polyline><polyline points=\\\"17 18 23 18 23 12\\\"></polyline>\",\"trending-up\":\"<polyline points=\\\"23 6 13.5 15.5 8.5 10.5 1 18\\\"></polyline><polyline points=\\\"17 6 23 6 23 12\\\"></polyline>\",\"triangle\":\"<path d=\\\"M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z\\\"></path>\",\"truck\":\"<rect x=\\\"1\\\" y=\\\"3\\\" width=\\\"15\\\" height=\\\"13\\\"></rect><polygon points=\\\"16 8 20 8 23 11 23 16 16 16 16 8\\\"></polygon><circle cx=\\\"5.5\\\" cy=\\\"18.5\\\" r=\\\"2.5\\\"></circle><circle cx=\\\"18.5\\\" cy=\\\"18.5\\\" r=\\\"2.5\\\"></circle>\",\"tv\":\"<rect x=\\\"2\\\" y=\\\"7\\\" width=\\\"20\\\" height=\\\"15\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><polyline points=\\\"17 2 12 7 7 2\\\"></polyline>\",\"twitter\":\"<path d=\\\"M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z\\\"></path>\",\"type\":\"<polyline points=\\\"4 7 4 4 20 4 20 7\\\"></polyline><line x1=\\\"9\\\" y1=\\\"20\\\" x2=\\\"15\\\" y2=\\\"20\\\"></line><line x1=\\\"12\\\" y1=\\\"4\\\" x2=\\\"12\\\" y2=\\\"20\\\"></line>\",\"umbrella\":\"<path d=\\\"M23 12a11.05 11.05 0 0 0-22 0zm-5 7a3 3 0 0 1-6 0v-7\\\"></path>\",\"underline\":\"<path d=\\\"M6 3v7a6 6 0 0 0 6 6 6 6 0 0 0 6-6V3\\\"></path><line x1=\\\"4\\\" y1=\\\"21\\\" x2=\\\"20\\\" y2=\\\"21\\\"></line>\",\"unlock\":\"<rect x=\\\"3\\\" y=\\\"11\\\" width=\\\"18\\\" height=\\\"11\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><path d=\\\"M7 11V7a5 5 0 0 1 9.9-1\\\"></path>\",\"upload-cloud\":\"<polyline points=\\\"16 16 12 12 8 16\\\"></polyline><line x1=\\\"12\\\" y1=\\\"12\\\" x2=\\\"12\\\" y2=\\\"21\\\"></line><path d=\\\"M20.39 18.39A5 5 0 0 0 18 9h-1.26A8 8 0 1 0 3 16.3\\\"></path><polyline points=\\\"16 16 12 12 8 16\\\"></polyline>\",\"upload\":\"<path d=\\\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\\\"></path><polyline points=\\\"17 8 12 3 7 8\\\"></polyline><line x1=\\\"12\\\" y1=\\\"3\\\" x2=\\\"12\\\" y2=\\\"15\\\"></line>\",\"user-check\":\"<path d=\\\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\\\"></path><circle cx=\\\"8.5\\\" cy=\\\"7\\\" r=\\\"4\\\"></circle><polyline points=\\\"17 11 19 13 23 9\\\"></polyline>\",\"user-minus\":\"<path d=\\\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\\\"></path><circle cx=\\\"8.5\\\" cy=\\\"7\\\" r=\\\"4\\\"></circle><line x1=\\\"23\\\" y1=\\\"11\\\" x2=\\\"17\\\" y2=\\\"11\\\"></line>\",\"user-plus\":\"<path d=\\\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\\\"></path><circle cx=\\\"8.5\\\" cy=\\\"7\\\" r=\\\"4\\\"></circle><line x1=\\\"20\\\" y1=\\\"8\\\" x2=\\\"20\\\" y2=\\\"14\\\"></line><line x1=\\\"23\\\" y1=\\\"11\\\" x2=\\\"17\\\" y2=\\\"11\\\"></line>\",\"user-x\":\"<path d=\\\"M16 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\\\"></path><circle cx=\\\"8.5\\\" cy=\\\"7\\\" r=\\\"4\\\"></circle><line x1=\\\"18\\\" y1=\\\"8\\\" x2=\\\"23\\\" y2=\\\"13\\\"></line><line x1=\\\"23\\\" y1=\\\"8\\\" x2=\\\"18\\\" y2=\\\"13\\\"></line>\",\"user\":\"<path d=\\\"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2\\\"></path><circle cx=\\\"12\\\" cy=\\\"7\\\" r=\\\"4\\\"></circle>\",\"users\":\"<path d=\\\"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2\\\"></path><circle cx=\\\"9\\\" cy=\\\"7\\\" r=\\\"4\\\"></circle><path d=\\\"M23 21v-2a4 4 0 0 0-3-3.87\\\"></path><path d=\\\"M16 3.13a4 4 0 0 1 0 7.75\\\"></path>\",\"video-off\":\"<path d=\\\"M16 16v1a2 2 0 0 1-2 2H3a2 2 0 0 1-2-2V7a2 2 0 0 1 2-2h2m5.66 0H14a2 2 0 0 1 2 2v3.34l1 1L23 7v10\\\"></path><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line>\",\"video\":\"<polygon points=\\\"23 7 16 12 23 17 23 7\\\"></polygon><rect x=\\\"1\\\" y=\\\"5\\\" width=\\\"15\\\" height=\\\"14\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect>\",\"voicemail\":\"<circle cx=\\\"5.5\\\" cy=\\\"11.5\\\" r=\\\"4.5\\\"></circle><circle cx=\\\"18.5\\\" cy=\\\"11.5\\\" r=\\\"4.5\\\"></circle><line x1=\\\"5.5\\\" y1=\\\"16\\\" x2=\\\"18.5\\\" y2=\\\"16\\\"></line>\",\"volume-1\":\"<polygon points=\\\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\\\"></polygon><path d=\\\"M15.54 8.46a5 5 0 0 1 0 7.07\\\"></path>\",\"volume-2\":\"<polygon points=\\\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\\\"></polygon><path d=\\\"M19.07 4.93a10 10 0 0 1 0 14.14M15.54 8.46a5 5 0 0 1 0 7.07\\\"></path>\",\"volume-x\":\"<polygon points=\\\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\\\"></polygon><line x1=\\\"23\\\" y1=\\\"9\\\" x2=\\\"17\\\" y2=\\\"15\\\"></line><line x1=\\\"17\\\" y1=\\\"9\\\" x2=\\\"23\\\" y2=\\\"15\\\"></line>\",\"volume\":\"<polygon points=\\\"11 5 6 9 2 9 2 15 6 15 11 19 11 5\\\"></polygon>\",\"watch\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"7\\\"></circle><polyline points=\\\"12 9 12 12 13.5 13.5\\\"></polyline><path d=\\\"M16.51 17.35l-.35 3.83a2 2 0 0 1-2 1.82H9.83a2 2 0 0 1-2-1.82l-.35-3.83m.01-10.7l.35-3.83A2 2 0 0 1 9.83 1h4.35a2 2 0 0 1 2 1.82l.35 3.83\\\"></path>\",\"wifi-off\":\"<line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line><path d=\\\"M16.72 11.06A10.94 10.94 0 0 1 19 12.55\\\"></path><path d=\\\"M5 12.55a10.94 10.94 0 0 1 5.17-2.39\\\"></path><path d=\\\"M10.71 5.05A16 16 0 0 1 22.58 9\\\"></path><path d=\\\"M1.42 9a15.91 15.91 0 0 1 4.7-2.88\\\"></path><path d=\\\"M8.53 16.11a6 6 0 0 1 6.95 0\\\"></path><line x1=\\\"12\\\" y1=\\\"20\\\" x2=\\\"12\\\" y2=\\\"20\\\"></line>\",\"wifi\":\"<path d=\\\"M5 12.55a11 11 0 0 1 14.08 0\\\"></path><path d=\\\"M1.42 9a16 16 0 0 1 21.16 0\\\"></path><path d=\\\"M8.53 16.11a6 6 0 0 1 6.95 0\\\"></path><line x1=\\\"12\\\" y1=\\\"20\\\" x2=\\\"12\\\" y2=\\\"20\\\"></line>\",\"wind\":\"<path d=\\\"M9.59 4.59A2 2 0 1 1 11 8H2m10.59 11.41A2 2 0 1 0 14 16H2m15.73-8.27A2.5 2.5 0 1 1 19.5 12H2\\\"></path>\",\"x-circle\":\"<circle cx=\\\"12\\\" cy=\\\"12\\\" r=\\\"10\\\"></circle><line x1=\\\"15\\\" y1=\\\"9\\\" x2=\\\"9\\\" y2=\\\"15\\\"></line><line x1=\\\"9\\\" y1=\\\"9\\\" x2=\\\"15\\\" y2=\\\"15\\\"></line>\",\"x-octagon\":\"<polygon points=\\\"7.86 2 16.14 2 22 7.86 22 16.14 16.14 22 7.86 22 2 16.14 2 7.86 7.86 2\\\"></polygon><line x1=\\\"15\\\" y1=\\\"9\\\" x2=\\\"9\\\" y2=\\\"15\\\"></line><line x1=\\\"9\\\" y1=\\\"9\\\" x2=\\\"15\\\" y2=\\\"15\\\"></line>\",\"x-square\":\"<rect x=\\\"3\\\" y=\\\"3\\\" width=\\\"18\\\" height=\\\"18\\\" rx=\\\"2\\\" ry=\\\"2\\\"></rect><line x1=\\\"9\\\" y1=\\\"9\\\" x2=\\\"15\\\" y2=\\\"15\\\"></line><line x1=\\\"15\\\" y1=\\\"9\\\" x2=\\\"9\\\" y2=\\\"15\\\"></line>\",\"x\":\"<line x1=\\\"18\\\" y1=\\\"6\\\" x2=\\\"6\\\" y2=\\\"18\\\"></line><line x1=\\\"6\\\" y1=\\\"6\\\" x2=\\\"18\\\" y2=\\\"18\\\"></line>\",\"youtube\":\"<path d=\\\"M22.54 6.42a2.78 2.78 0 0 0-1.94-2C18.88 4 12 4 12 4s-6.88 0-8.6.46a2.78 2.78 0 0 0-1.94 2A29 29 0 0 0 1 11.75a29 29 0 0 0 .46 5.33A2.78 2.78 0 0 0 3.4 19c1.72.46 8.6.46 8.6.46s6.88 0 8.6-.46a2.78 2.78 0 0 0 1.94-2 29 29 0 0 0 .46-5.25 29 29 0 0 0-.46-5.33z\\\"></path><polygon points=\\\"9.75 15.02 15.5 11.75 9.75 8.48 9.75 15.02\\\"></polygon>\",\"zap-off\":\"<polyline points=\\\"12.41 6.75 13 2 10.57 4.92\\\"></polyline><polyline points=\\\"18.57 12.91 21 10 15.66 10\\\"></polyline><polyline points=\\\"8 8 3 14 12 14 11 22 16 16\\\"></polyline><line x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"23\\\" y2=\\\"23\\\"></line>\",\"zap\":\"<polygon points=\\\"13 2 3 14 12 14 11 22 21 10 12 10 13 2\\\"></polygon>\",\"zoom-in\":\"<circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"></circle><line x1=\\\"21\\\" y1=\\\"21\\\" x2=\\\"16.65\\\" y2=\\\"16.65\\\"></line><line x1=\\\"11\\\" y1=\\\"8\\\" x2=\\\"11\\\" y2=\\\"14\\\"></line><line x1=\\\"8\\\" y1=\\\"11\\\" x2=\\\"14\\\" y2=\\\"11\\\"></line>\",\"zoom-out\":\"<circle cx=\\\"11\\\" cy=\\\"11\\\" r=\\\"8\\\"></circle><line x1=\\\"21\\\" y1=\\\"21\\\" x2=\\\"16.65\\\" y2=\\\"16.65\\\"></line><line x1=\\\"8\\\" y1=\\\"11\\\" x2=\\\"14\\\" y2=\\\"11\\\"></line>\"};\n\n/***/ }),\n\n/***/ \"./node_modules/classnames/dedupe.js\":\n/*!*******************************************!*\\\n !*** ./node_modules/classnames/dedupe.js ***!\n \\*******************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!\n Copyright (c) 2016 Jed Watson.\n Licensed under the MIT License (MIT), see\n http://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar classNames = (function () {\n\t\t// don't inherit from Object so we can skip hasOwnProperty check later\n\t\t// http://stackoverflow.com/questions/15518328/creating-js-object-with-object-createnull#answer-21079232\n\t\tfunction StorageObject() {}\n\t\tStorageObject.prototype = Object.create(null);\n\n\t\tfunction _parseArray (resultSet, array) {\n\t\t\tvar length = array.length;\n\n\t\t\tfor (var i = 0; i < length; ++i) {\n\t\t\t\t_parse(resultSet, array[i]);\n\t\t\t}\n\t\t}\n\n\t\tvar hasOwn = {}.hasOwnProperty;\n\n\t\tfunction _parseNumber (resultSet, num) {\n\t\t\tresultSet[num] = true;\n\t\t}\n\n\t\tfunction _parseObject (resultSet, object) {\n\t\t\tfor (var k in object) {\n\t\t\t\tif (hasOwn.call(object, k)) {\n\t\t\t\t\t// set value to false instead of deleting it to avoid changing object structure\n\t\t\t\t\t// https://www.smashingmagazine.com/2012/11/writing-fast-memory-efficient-javascript/#de-referencing-misconceptions\n\t\t\t\t\tresultSet[k] = !!object[k];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar SPACE = /\\s+/;\n\t\tfunction _parseString (resultSet, str) {\n\t\t\tvar array = str.split(SPACE);\n\t\t\tvar length = array.length;\n\n\t\t\tfor (var i = 0; i < length; ++i) {\n\t\t\t\tresultSet[array[i]] = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction _parse (resultSet, arg) {\n\t\t\tif (!arg) return;\n\t\t\tvar argType = typeof arg;\n\n\t\t\t// 'foo bar'\n\t\t\tif (argType === 'string') {\n\t\t\t\t_parseString(resultSet, arg);\n\n\t\t\t// ['foo', 'bar', ...]\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\t_parseArray(resultSet, arg);\n\n\t\t\t// { 'foo': true, ... }\n\t\t\t} else if (argType === 'object') {\n\t\t\t\t_parseObject(resultSet, arg);\n\n\t\t\t// '130'\n\t\t\t} else if (argType === 'number') {\n\t\t\t\t_parseNumber(resultSet, arg);\n\t\t\t}\n\t\t}\n\n\t\tfunction _classNames () {\n\t\t\t// don't leak arguments\n\t\t\t// https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments\n\t\t\tvar len = arguments.length;\n\t\t\tvar args = Array(len);\n\t\t\tfor (var i = 0; i < len; i++) {\n\t\t\t\targs[i] = arguments[i];\n\t\t\t}\n\n\t\t\tvar classSet = new StorageObject();\n\t\t\t_parseArray(classSet, args);\n\n\t\t\tvar list = [];\n\n\t\t\tfor (var k in classSet) {\n\t\t\t\tif (classSet[k]) {\n\t\t\t\t\tlist.push(k)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn list.join(' ');\n\t\t}\n\n\t\treturn _classNames;\n\t})();\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tmodule.exports = classNames;\n\t} else if (true) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\t!(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {\n\t\t\treturn classNames;\n\t\t}).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),\n\t\t\t\t__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));\n\t} else {}\n}());\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/es/array/from.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/core-js/es/array/from.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(/*! ../../modules/es.string.iterator */ \"./node_modules/core-js/modules/es.string.iterator.js\");\n__webpack_require__(/*! ../../modules/es.array.from */ \"./node_modules/core-js/modules/es.array.from.js\");\nvar path = __webpack_require__(/*! ../../internals/path */ \"./node_modules/core-js/internals/path.js\");\n\nmodule.exports = path.Array.from;\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/a-function.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/core-js/internals/a-function.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n if (typeof it != 'function') {\n throw TypeError(String(it) + ' is not a function');\n } return it;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/an-object.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/core-js/internals/an-object.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\n\nmodule.exports = function (it) {\n if (!isObject(it)) {\n throw TypeError(String(it) + ' is not an object');\n } return it;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/array-from.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/core-js/internals/array-from.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar bind = __webpack_require__(/*! ../internals/bind-context */ \"./node_modules/core-js/internals/bind-context.js\");\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \"./node_modules/core-js/internals/to-object.js\");\nvar callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ \"./node_modules/core-js/internals/call-with-safe-iteration-closing.js\");\nvar isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ \"./node_modules/core-js/internals/is-array-iterator-method.js\");\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \"./node_modules/core-js/internals/to-length.js\");\nvar createProperty = __webpack_require__(/*! ../internals/create-property */ \"./node_modules/core-js/internals/create-property.js\");\nvar getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ \"./node_modules/core-js/internals/get-iterator-method.js\");\n\n// `Array.from` method\n// https://tc39.github.io/ecma262/#sec-array.from\nmodule.exports = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {\n var O = toObject(arrayLike);\n var C = typeof this == 'function' ? this : Array;\n var argumentsLength = arguments.length;\n var mapfn = argumentsLength > 1 ? arguments[1] : undefined;\n var mapping = mapfn !== undefined;\n var index = 0;\n var iteratorMethod = getIteratorMethod(O);\n var length, result, step, iterator;\n if (mapping) mapfn = bind(mapfn, argumentsLength > 2 ? arguments[2] : undefined, 2);\n // if the target is not iterable or it's an array with the default iterator - use a simple case\n if (iteratorMethod != undefined && !(C == Array && isArrayIteratorMethod(iteratorMethod))) {\n iterator = iteratorMethod.call(O);\n result = new C();\n for (;!(step = iterator.next()).done; index++) {\n createProperty(result, index, mapping\n ? callWithSafeIterationClosing(iterator, mapfn, [step.value, index], true)\n : step.value\n );\n }\n } else {\n length = toLength(O.length);\n result = new C(length);\n for (;length > index; index++) {\n createProperty(result, index, mapping ? mapfn(O[index], index) : O[index]);\n }\n }\n result.length = index;\n return result;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/array-includes.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/core-js/internals/array-includes.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \"./node_modules/core-js/internals/to-indexed-object.js\");\nvar toLength = __webpack_require__(/*! ../internals/to-length */ \"./node_modules/core-js/internals/to-length.js\");\nvar toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ \"./node_modules/core-js/internals/to-absolute-index.js\");\n\n// `Array.prototype.{ indexOf, includes }` methods implementation\n// false -> Array#indexOf\n// https://tc39.github.io/ecma262/#sec-array.prototype.indexof\n// true -> Array#includes\n// https://tc39.github.io/ecma262/#sec-array.prototype.includes\nmodule.exports = function (IS_INCLUDES) {\n return function ($this, el, fromIndex) {\n var O = toIndexedObject($this);\n var length = toLength(O.length);\n var index = toAbsoluteIndex(fromIndex, length);\n var value;\n // Array#includes uses SameValueZero equality algorithm\n // eslint-disable-next-line no-self-compare\n if (IS_INCLUDES && el != el) while (length > index) {\n value = O[index++];\n // eslint-disable-next-line no-self-compare\n if (value != value) return true;\n // Array#indexOf ignores holes, Array#includes - not\n } else for (;length > index; index++) if (IS_INCLUDES || index in O) {\n if (O[index] === el) return IS_INCLUDES || index || 0;\n } return !IS_INCLUDES && -1;\n };\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/bind-context.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/core-js/internals/bind-context.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar aFunction = __webpack_require__(/*! ../internals/a-function */ \"./node_modules/core-js/internals/a-function.js\");\n\n// optional / simple context binding\nmodule.exports = function (fn, that, length) {\n aFunction(fn);\n if (that === undefined) return fn;\n switch (length) {\n case 0: return function () {\n return fn.call(that);\n };\n case 1: return function (a) {\n return fn.call(that, a);\n };\n case 2: return function (a, b) {\n return fn.call(that, a, b);\n };\n case 3: return function (a, b, c) {\n return fn.call(that, a, b, c);\n };\n }\n return function (/* ...args */) {\n return fn.apply(that, arguments);\n };\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/call-with-safe-iteration-closing.js\":\n/*!****************************************************************************!*\\\n !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***!\n \\****************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\n\n// call something on iterator step with safe closing on error\nmodule.exports = function (iterator, fn, value, ENTRIES) {\n try {\n return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value);\n // 7.4.6 IteratorClose(iterator, completion)\n } catch (error) {\n var returnMethod = iterator['return'];\n if (returnMethod !== undefined) anObject(returnMethod.call(iterator));\n throw error;\n }\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/check-correctness-of-iteration.js\":\n/*!**************************************************************************!*\\\n !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***!\n \\**************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar SAFE_CLOSING = false;\n\ntry {\n var called = 0;\n var iteratorWithReturn = {\n next: function () {\n return { done: !!called++ };\n },\n 'return': function () {\n SAFE_CLOSING = true;\n }\n };\n iteratorWithReturn[ITERATOR] = function () {\n return this;\n };\n // eslint-disable-next-line no-throw-literal\n Array.from(iteratorWithReturn, function () { throw 2; });\n} catch (error) { /* empty */ }\n\nmodule.exports = function (exec, SKIP_CLOSING) {\n if (!SKIP_CLOSING && !SAFE_CLOSING) return false;\n var ITERATION_SUPPORT = false;\n try {\n var object = {};\n object[ITERATOR] = function () {\n return {\n next: function () {\n return { done: ITERATION_SUPPORT = true };\n }\n };\n };\n exec(object);\n } catch (error) { /* empty */ }\n return ITERATION_SUPPORT;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/classof-raw.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/core-js/internals/classof-raw.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nvar toString = {}.toString;\n\nmodule.exports = function (it) {\n return toString.call(it).slice(8, -1);\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/classof.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/core-js/internals/classof.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar classofRaw = __webpack_require__(/*! ../internals/classof-raw */ \"./node_modules/core-js/internals/classof-raw.js\");\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n// ES3 wrong here\nvar CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';\n\n// fallback for IE11 Script Access Denied error\nvar tryGet = function (it, key) {\n try {\n return it[key];\n } catch (error) { /* empty */ }\n};\n\n// getting tag from ES6+ `Object.prototype.toString`\nmodule.exports = function (it) {\n var O, tag, result;\n return it === undefined ? 'Undefined' : it === null ? 'Null'\n // @@toStringTag case\n : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag\n // builtinTag case\n : CORRECT_ARGUMENTS ? classofRaw(O)\n // ES3 arguments fallback\n : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/copy-constructor-properties.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***!\n \\***********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(/*! ../internals/has */ \"./node_modules/core-js/internals/has.js\");\nvar ownKeys = __webpack_require__(/*! ../internals/own-keys */ \"./node_modules/core-js/internals/own-keys.js\");\nvar getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ \"./node_modules/core-js/internals/object-get-own-property-descriptor.js\");\nvar definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ \"./node_modules/core-js/internals/object-define-property.js\");\n\nmodule.exports = function (target, source) {\n var keys = ownKeys(source);\n var defineProperty = definePropertyModule.f;\n var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f;\n for (var i = 0; i < keys.length; i++) {\n var key = keys[i];\n if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key));\n }\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/correct-prototype-getter.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/core-js/internals/correct-prototype-getter.js ***!\n \\********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\n\nmodule.exports = !fails(function () {\n function F() { /* empty */ }\n F.prototype.constructor = null;\n return Object.getPrototypeOf(new F()) !== F.prototype;\n});\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/create-iterator-constructor.js\":\n/*!***********************************************************************!*\\\n !*** ./node_modules/core-js/internals/create-iterator-constructor.js ***!\n \\***********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ \"./node_modules/core-js/internals/iterators-core.js\").IteratorPrototype;\nvar create = __webpack_require__(/*! ../internals/object-create */ \"./node_modules/core-js/internals/object-create.js\");\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \"./node_modules/core-js/internals/create-property-descriptor.js\");\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \"./node_modules/core-js/internals/set-to-string-tag.js\");\nvar Iterators = __webpack_require__(/*! ../internals/iterators */ \"./node_modules/core-js/internals/iterators.js\");\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (IteratorConstructor, NAME, next) {\n var TO_STRING_TAG = NAME + ' Iterator';\n IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) });\n setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true);\n Iterators[TO_STRING_TAG] = returnThis;\n return IteratorConstructor;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/create-property-descriptor.js\":\n/*!**********************************************************************!*\\\n !*** ./node_modules/core-js/internals/create-property-descriptor.js ***!\n \\**********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = function (bitmap, value) {\n return {\n enumerable: !(bitmap & 1),\n configurable: !(bitmap & 2),\n writable: !(bitmap & 4),\n value: value\n };\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/create-property.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/core-js/internals/create-property.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ \"./node_modules/core-js/internals/to-primitive.js\");\nvar definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ \"./node_modules/core-js/internals/object-define-property.js\");\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \"./node_modules/core-js/internals/create-property-descriptor.js\");\n\nmodule.exports = function (object, key, value) {\n var propertyKey = toPrimitive(key);\n if (propertyKey in object) definePropertyModule.f(object, propertyKey, createPropertyDescriptor(0, value));\n else object[propertyKey] = value;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/define-iterator.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/core-js/internals/define-iterator.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ \"./node_modules/core-js/internals/create-iterator-constructor.js\");\nvar getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ \"./node_modules/core-js/internals/object-get-prototype-of.js\");\nvar setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ \"./node_modules/core-js/internals/object-set-prototype-of.js\");\nvar setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ \"./node_modules/core-js/internals/set-to-string-tag.js\");\nvar hide = __webpack_require__(/*! ../internals/hide */ \"./node_modules/core-js/internals/hide.js\");\nvar redefine = __webpack_require__(/*! ../internals/redefine */ \"./node_modules/core-js/internals/redefine.js\");\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \"./node_modules/core-js/internals/is-pure.js\");\nvar Iterators = __webpack_require__(/*! ../internals/iterators */ \"./node_modules/core-js/internals/iterators.js\");\nvar IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ \"./node_modules/core-js/internals/iterators-core.js\");\n\nvar IteratorPrototype = IteratorsCore.IteratorPrototype;\nvar BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS;\nvar ITERATOR = wellKnownSymbol('iterator');\nvar KEYS = 'keys';\nvar VALUES = 'values';\nvar ENTRIES = 'entries';\n\nvar returnThis = function () { return this; };\n\nmodule.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {\n createIteratorConstructor(IteratorConstructor, NAME, next);\n\n var getIterationMethod = function (KIND) {\n if (KIND === DEFAULT && defaultIterator) return defaultIterator;\n if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND];\n switch (KIND) {\n case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };\n case VALUES: return function values() { return new IteratorConstructor(this, KIND); };\n case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };\n } return function () { return new IteratorConstructor(this); };\n };\n\n var TO_STRING_TAG = NAME + ' Iterator';\n var INCORRECT_VALUES_NAME = false;\n var IterablePrototype = Iterable.prototype;\n var nativeIterator = IterablePrototype[ITERATOR]\n || IterablePrototype['@@iterator']\n || DEFAULT && IterablePrototype[DEFAULT];\n var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT);\n var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;\n var CurrentIteratorPrototype, methods, KEY;\n\n // fix native\n if (anyNativeIterator) {\n CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable()));\n if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) {\n if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) {\n if (setPrototypeOf) {\n setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype);\n } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') {\n hide(CurrentIteratorPrototype, ITERATOR, returnThis);\n }\n }\n // Set @@toStringTag to native iterators\n setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true);\n if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis;\n }\n }\n\n // fix Array#{values, @@iterator}.name in V8 / FF\n if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {\n INCORRECT_VALUES_NAME = true;\n defaultIterator = function values() { return nativeIterator.call(this); };\n }\n\n // define iterator\n if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) {\n hide(IterablePrototype, ITERATOR, defaultIterator);\n }\n Iterators[NAME] = defaultIterator;\n\n // export additional methods\n if (DEFAULT) {\n methods = {\n values: getIterationMethod(VALUES),\n keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),\n entries: getIterationMethod(ENTRIES)\n };\n if (FORCED) for (KEY in methods) {\n if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {\n redefine(IterablePrototype, KEY, methods[KEY]);\n }\n } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods);\n }\n\n return methods;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/descriptors.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/core-js/internals/descriptors.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !fails(function () {\n return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/document-create-element.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/core-js/internals/document-create-element.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\n\nvar document = global.document;\n// typeof document.createElement is 'object' in old IE\nvar exist = isObject(document) && isObject(document.createElement);\n\nmodule.exports = function (it) {\n return exist ? document.createElement(it) : {};\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/enum-bug-keys.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/core-js/internals/enum-bug-keys.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\n// IE8- don't enum bug keys\nmodule.exports = [\n 'constructor',\n 'hasOwnProperty',\n 'isPrototypeOf',\n 'propertyIsEnumerable',\n 'toLocaleString',\n 'toString',\n 'valueOf'\n];\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/export.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/core-js/internals/export.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ \"./node_modules/core-js/internals/object-get-own-property-descriptor.js\").f;\nvar hide = __webpack_require__(/*! ../internals/hide */ \"./node_modules/core-js/internals/hide.js\");\nvar redefine = __webpack_require__(/*! ../internals/redefine */ \"./node_modules/core-js/internals/redefine.js\");\nvar setGlobal = __webpack_require__(/*! ../internals/set-global */ \"./node_modules/core-js/internals/set-global.js\");\nvar copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ \"./node_modules/core-js/internals/copy-constructor-properties.js\");\nvar isForced = __webpack_require__(/*! ../internals/is-forced */ \"./node_modules/core-js/internals/is-forced.js\");\n\n/*\n options.target - name of the target object\n options.global - target is the global object\n options.stat - export as static methods of target\n options.proto - export as prototype methods of target\n options.real - real prototype method for the `pure` version\n options.forced - export even if the native feature is available\n options.bind - bind methods to the target, required for the `pure` version\n options.wrap - wrap constructors to preventing global pollution, required for the `pure` version\n options.unsafe - use the simple assignment of property instead of delete + defineProperty\n options.sham - add a flag to not completely full polyfills\n options.enumerable - export as enumerable property\n options.noTargetGet - prevent calling a getter on target\n*/\nmodule.exports = function (options, source) {\n var TARGET = options.target;\n var GLOBAL = options.global;\n var STATIC = options.stat;\n var FORCED, target, key, targetProperty, sourceProperty, descriptor;\n if (GLOBAL) {\n target = global;\n } else if (STATIC) {\n target = global[TARGET] || setGlobal(TARGET, {});\n } else {\n target = (global[TARGET] || {}).prototype;\n }\n if (target) for (key in source) {\n sourceProperty = source[key];\n if (options.noTargetGet) {\n descriptor = getOwnPropertyDescriptor(target, key);\n targetProperty = descriptor && descriptor.value;\n } else targetProperty = target[key];\n FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced);\n // contained in target\n if (!FORCED && targetProperty !== undefined) {\n if (typeof sourceProperty === typeof targetProperty) continue;\n copyConstructorProperties(sourceProperty, targetProperty);\n }\n // add a flag to not completely full polyfills\n if (options.sham || (targetProperty && targetProperty.sham)) {\n hide(sourceProperty, 'sham', true);\n }\n // extend global\n redefine(target, key, sourceProperty, options);\n }\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/fails.js\":\n/*!*************************************************!*\\\n !*** ./node_modules/core-js/internals/fails.js ***!\n \\*************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = function (exec) {\n try {\n return !!exec();\n } catch (error) {\n return true;\n }\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/function-to-string.js\":\n/*!**************************************************************!*\\\n !*** ./node_modules/core-js/internals/function-to-string.js ***!\n \\**************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar shared = __webpack_require__(/*! ../internals/shared */ \"./node_modules/core-js/internals/shared.js\");\n\nmodule.exports = shared('native-function-to-string', Function.toString);\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/get-iterator-method.js\":\n/*!***************************************************************!*\\\n !*** ./node_modules/core-js/internals/get-iterator-method.js ***!\n \\***************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar classof = __webpack_require__(/*! ../internals/classof */ \"./node_modules/core-js/internals/classof.js\");\nvar Iterators = __webpack_require__(/*! ../internals/iterators */ \"./node_modules/core-js/internals/iterators.js\");\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\n\nvar ITERATOR = wellKnownSymbol('iterator');\n\nmodule.exports = function (it) {\n if (it != undefined) return it[ITERATOR]\n || it['@@iterator']\n || Iterators[classof(it)];\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/global.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/core-js/internals/global.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n/* WEBPACK VAR INJECTION */(function(global) {var O = 'object';\nvar check = function (it) {\n return it && it.Math == Math && it;\n};\n\n// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028\nmodule.exports =\n // eslint-disable-next-line no-undef\n check(typeof globalThis == O && globalThis) ||\n check(typeof window == O && window) ||\n check(typeof self == O && self) ||\n check(typeof global == O && global) ||\n // eslint-disable-next-line no-new-func\n Function('return this')();\n\n/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../webpack/buildin/global.js */ \"./node_modules/webpack/buildin/global.js\")))\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/has.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/core-js/internals/has.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nvar hasOwnProperty = {}.hasOwnProperty;\n\nmodule.exports = function (it, key) {\n return hasOwnProperty.call(it, key);\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/hidden-keys.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/core-js/internals/hidden-keys.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/hide.js\":\n/*!************************************************!*\\\n !*** ./node_modules/core-js/internals/hide.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ \"./node_modules/core-js/internals/object-define-property.js\");\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \"./node_modules/core-js/internals/create-property-descriptor.js\");\n\nmodule.exports = DESCRIPTORS ? function (object, key, value) {\n return definePropertyModule.f(object, key, createPropertyDescriptor(1, value));\n} : function (object, key, value) {\n object[key] = value;\n return object;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/html.js\":\n/*!************************************************!*\\\n !*** ./node_modules/core-js/internals/html.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\n\nvar document = global.document;\n\nmodule.exports = document && document.documentElement;\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/ie8-dom-define.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/core-js/internals/ie8-dom-define.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\nvar createElement = __webpack_require__(/*! ../internals/document-create-element */ \"./node_modules/core-js/internals/document-create-element.js\");\n\n// Thank's IE8 for his funny defineProperty\nmodule.exports = !DESCRIPTORS && !fails(function () {\n return Object.defineProperty(createElement('div'), 'a', {\n get: function () { return 7; }\n }).a != 7;\n});\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/indexed-object.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/core-js/internals/indexed-object.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n// fallback for non-array-like ES3 and non-enumerable old V8 strings\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\nvar classof = __webpack_require__(/*! ../internals/classof-raw */ \"./node_modules/core-js/internals/classof-raw.js\");\n\nvar split = ''.split;\n\nmodule.exports = fails(function () {\n // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346\n // eslint-disable-next-line no-prototype-builtins\n return !Object('z').propertyIsEnumerable(0);\n}) ? function (it) {\n return classof(it) == 'String' ? split.call(it, '') : Object(it);\n} : Object;\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/internal-state.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/core-js/internals/internal-state.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ \"./node_modules/core-js/internals/native-weak-map.js\");\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\nvar hide = __webpack_require__(/*! ../internals/hide */ \"./node_modules/core-js/internals/hide.js\");\nvar objectHas = __webpack_require__(/*! ../internals/has */ \"./node_modules/core-js/internals/has.js\");\nvar sharedKey = __webpack_require__(/*! ../internals/shared-key */ \"./node_modules/core-js/internals/shared-key.js\");\nvar hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ \"./node_modules/core-js/internals/hidden-keys.js\");\n\nvar WeakMap = global.WeakMap;\nvar set, get, has;\n\nvar enforce = function (it) {\n return has(it) ? get(it) : set(it, {});\n};\n\nvar getterFor = function (TYPE) {\n return function (it) {\n var state;\n if (!isObject(it) || (state = get(it)).type !== TYPE) {\n throw TypeError('Incompatible receiver, ' + TYPE + ' required');\n } return state;\n };\n};\n\nif (NATIVE_WEAK_MAP) {\n var store = new WeakMap();\n var wmget = store.get;\n var wmhas = store.has;\n var wmset = store.set;\n set = function (it, metadata) {\n wmset.call(store, it, metadata);\n return metadata;\n };\n get = function (it) {\n return wmget.call(store, it) || {};\n };\n has = function (it) {\n return wmhas.call(store, it);\n };\n} else {\n var STATE = sharedKey('state');\n hiddenKeys[STATE] = true;\n set = function (it, metadata) {\n hide(it, STATE, metadata);\n return metadata;\n };\n get = function (it) {\n return objectHas(it, STATE) ? it[STATE] : {};\n };\n has = function (it) {\n return objectHas(it, STATE);\n };\n}\n\nmodule.exports = {\n set: set,\n get: get,\n has: has,\n enforce: enforce,\n getterFor: getterFor\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/is-array-iterator-method.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***!\n \\********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\nvar Iterators = __webpack_require__(/*! ../internals/iterators */ \"./node_modules/core-js/internals/iterators.js\");\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar ArrayPrototype = Array.prototype;\n\n// check on default Array iterator\nmodule.exports = function (it) {\n return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it);\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/is-forced.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/core-js/internals/is-forced.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\n\nvar replacement = /#|\\.prototype\\./;\n\nvar isForced = function (feature, detection) {\n var value = data[normalize(feature)];\n return value == POLYFILL ? true\n : value == NATIVE ? false\n : typeof detection == 'function' ? fails(detection)\n : !!detection;\n};\n\nvar normalize = isForced.normalize = function (string) {\n return String(string).replace(replacement, '.').toLowerCase();\n};\n\nvar data = isForced.data = {};\nvar NATIVE = isForced.NATIVE = 'N';\nvar POLYFILL = isForced.POLYFILL = 'P';\n\nmodule.exports = isForced;\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/is-object.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/core-js/internals/is-object.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = function (it) {\n return typeof it === 'object' ? it !== null : typeof it === 'function';\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/is-pure.js\":\n/*!***************************************************!*\\\n !*** ./node_modules/core-js/internals/is-pure.js ***!\n \\***************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = false;\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/iterators-core.js\":\n/*!**********************************************************!*\\\n !*** ./node_modules/core-js/internals/iterators-core.js ***!\n \\**********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ \"./node_modules/core-js/internals/object-get-prototype-of.js\");\nvar hide = __webpack_require__(/*! ../internals/hide */ \"./node_modules/core-js/internals/hide.js\");\nvar has = __webpack_require__(/*! ../internals/has */ \"./node_modules/core-js/internals/has.js\");\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \"./node_modules/core-js/internals/is-pure.js\");\n\nvar ITERATOR = wellKnownSymbol('iterator');\nvar BUGGY_SAFARI_ITERATORS = false;\n\nvar returnThis = function () { return this; };\n\n// `%IteratorPrototype%` object\n// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object\nvar IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;\n\nif ([].keys) {\n arrayIterator = [].keys();\n // Safari 8 has buggy iterators w/o `next`\n if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;\n else {\n PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator));\n if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;\n }\n}\n\nif (IteratorPrototype == undefined) IteratorPrototype = {};\n\n// 25.1.2.1.1 %IteratorPrototype%[@@iterator]()\nif (!IS_PURE && !has(IteratorPrototype, ITERATOR)) hide(IteratorPrototype, ITERATOR, returnThis);\n\nmodule.exports = {\n IteratorPrototype: IteratorPrototype,\n BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/iterators.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/core-js/internals/iterators.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nmodule.exports = {};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/native-symbol.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/core-js/internals/native-symbol.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar fails = __webpack_require__(/*! ../internals/fails */ \"./node_modules/core-js/internals/fails.js\");\n\nmodule.exports = !!Object.getOwnPropertySymbols && !fails(function () {\n // Chrome 38 Symbol has incorrect toString conversion\n // eslint-disable-next-line no-undef\n return !String(Symbol());\n});\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/native-weak-map.js\":\n/*!***********************************************************!*\\\n !*** ./node_modules/core-js/internals/native-weak-map.js ***!\n \\***********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar nativeFunctionToString = __webpack_require__(/*! ../internals/function-to-string */ \"./node_modules/core-js/internals/function-to-string.js\");\n\nvar WeakMap = global.WeakMap;\n\nmodule.exports = typeof WeakMap === 'function' && /native code/.test(nativeFunctionToString.call(WeakMap));\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/object-create.js\":\n/*!*********************************************************!*\\\n !*** ./node_modules/core-js/internals/object-create.js ***!\n \\*********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ \"./node_modules/core-js/internals/object-define-properties.js\");\nvar enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ \"./node_modules/core-js/internals/enum-bug-keys.js\");\nvar hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ \"./node_modules/core-js/internals/hidden-keys.js\");\nvar html = __webpack_require__(/*! ../internals/html */ \"./node_modules/core-js/internals/html.js\");\nvar documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ \"./node_modules/core-js/internals/document-create-element.js\");\nvar sharedKey = __webpack_require__(/*! ../internals/shared-key */ \"./node_modules/core-js/internals/shared-key.js\");\nvar IE_PROTO = sharedKey('IE_PROTO');\n\nvar PROTOTYPE = 'prototype';\nvar Empty = function () { /* empty */ };\n\n// Create object with fake `null` prototype: use iframe Object with cleared prototype\nvar createDict = function () {\n // Thrash, waste and sodomy: IE GC bug\n var iframe = documentCreateElement('iframe');\n var length = enumBugKeys.length;\n var lt = '<';\n var script = 'script';\n var gt = '>';\n var js = 'java' + script + ':';\n var iframeDocument;\n iframe.style.display = 'none';\n html.appendChild(iframe);\n iframe.src = String(js);\n iframeDocument = iframe.contentWindow.document;\n iframeDocument.open();\n iframeDocument.write(lt + script + gt + 'document.F=Object' + lt + '/' + script + gt);\n iframeDocument.close();\n createDict = iframeDocument.F;\n while (length--) delete createDict[PROTOTYPE][enumBugKeys[length]];\n return createDict();\n};\n\n// 19.1.2.2 / 15.2.3.5 Object.create(O [, Properties])\nmodule.exports = Object.create || function create(O, Properties) {\n var result;\n if (O !== null) {\n Empty[PROTOTYPE] = anObject(O);\n result = new Empty();\n Empty[PROTOTYPE] = null;\n // add \"__proto__\" for Object.getPrototypeOf polyfill\n result[IE_PROTO] = O;\n } else result = createDict();\n return Properties === undefined ? result : defineProperties(result, Properties);\n};\n\nhiddenKeys[IE_PROTO] = true;\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/object-define-properties.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/core-js/internals/object-define-properties.js ***!\n \\********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ \"./node_modules/core-js/internals/object-define-property.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar objectKeys = __webpack_require__(/*! ../internals/object-keys */ \"./node_modules/core-js/internals/object-keys.js\");\n\nmodule.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) {\n anObject(O);\n var keys = objectKeys(Properties);\n var length = keys.length;\n var i = 0;\n var key;\n while (length > i) definePropertyModule.f(O, key = keys[i++], Properties[key]);\n return O;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/object-define-property.js\":\n/*!******************************************************************!*\\\n !*** ./node_modules/core-js/internals/object-define-property.js ***!\n \\******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ \"./node_modules/core-js/internals/ie8-dom-define.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\nvar toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ \"./node_modules/core-js/internals/to-primitive.js\");\n\nvar nativeDefineProperty = Object.defineProperty;\n\nexports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) {\n anObject(O);\n P = toPrimitive(P, true);\n anObject(Attributes);\n if (IE8_DOM_DEFINE) try {\n return nativeDefineProperty(O, P, Attributes);\n } catch (error) { /* empty */ }\n if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported');\n if ('value' in Attributes) O[P] = Attributes.value;\n return O;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/object-get-own-property-descriptor.js\":\n/*!******************************************************************************!*\\\n !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***!\n \\******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ \"./node_modules/core-js/internals/descriptors.js\");\nvar propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ \"./node_modules/core-js/internals/object-property-is-enumerable.js\");\nvar createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ \"./node_modules/core-js/internals/create-property-descriptor.js\");\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \"./node_modules/core-js/internals/to-indexed-object.js\");\nvar toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ \"./node_modules/core-js/internals/to-primitive.js\");\nvar has = __webpack_require__(/*! ../internals/has */ \"./node_modules/core-js/internals/has.js\");\nvar IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ \"./node_modules/core-js/internals/ie8-dom-define.js\");\n\nvar nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\nexports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {\n O = toIndexedObject(O);\n P = toPrimitive(P, true);\n if (IE8_DOM_DEFINE) try {\n return nativeGetOwnPropertyDescriptor(O, P);\n } catch (error) { /* empty */ }\n if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]);\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/object-get-own-property-names.js\":\n/*!*************************************************************************!*\\\n !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***!\n \\*************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n// 19.1.2.7 / 15.2.3.4 Object.getOwnPropertyNames(O)\nvar internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ \"./node_modules/core-js/internals/object-keys-internal.js\");\nvar enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ \"./node_modules/core-js/internals/enum-bug-keys.js\");\n\nvar hiddenKeys = enumBugKeys.concat('length', 'prototype');\n\nexports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {\n return internalObjectKeys(O, hiddenKeys);\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/object-get-own-property-symbols.js\":\n/*!***************************************************************************!*\\\n !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***!\n \\***************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nexports.f = Object.getOwnPropertySymbols;\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/object-get-prototype-of.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/core-js/internals/object-get-prototype-of.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(/*! ../internals/has */ \"./node_modules/core-js/internals/has.js\");\nvar toObject = __webpack_require__(/*! ../internals/to-object */ \"./node_modules/core-js/internals/to-object.js\");\nvar sharedKey = __webpack_require__(/*! ../internals/shared-key */ \"./node_modules/core-js/internals/shared-key.js\");\nvar CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ \"./node_modules/core-js/internals/correct-prototype-getter.js\");\n\nvar IE_PROTO = sharedKey('IE_PROTO');\nvar ObjectPrototype = Object.prototype;\n\n// 19.1.2.9 / 15.2.3.2 Object.getPrototypeOf(O)\nmodule.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) {\n O = toObject(O);\n if (has(O, IE_PROTO)) return O[IE_PROTO];\n if (typeof O.constructor == 'function' && O instanceof O.constructor) {\n return O.constructor.prototype;\n } return O instanceof Object ? ObjectPrototype : null;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/object-keys-internal.js\":\n/*!****************************************************************!*\\\n !*** ./node_modules/core-js/internals/object-keys-internal.js ***!\n \\****************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar has = __webpack_require__(/*! ../internals/has */ \"./node_modules/core-js/internals/has.js\");\nvar toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ \"./node_modules/core-js/internals/to-indexed-object.js\");\nvar arrayIncludes = __webpack_require__(/*! ../internals/array-includes */ \"./node_modules/core-js/internals/array-includes.js\");\nvar hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ \"./node_modules/core-js/internals/hidden-keys.js\");\n\nvar arrayIndexOf = arrayIncludes(false);\n\nmodule.exports = function (object, names) {\n var O = toIndexedObject(object);\n var i = 0;\n var result = [];\n var key;\n for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key);\n // Don't enum bug & hidden keys\n while (names.length > i) if (has(O, key = names[i++])) {\n ~arrayIndexOf(result, key) || result.push(key);\n }\n return result;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/object-keys.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/core-js/internals/object-keys.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ \"./node_modules/core-js/internals/object-keys-internal.js\");\nvar enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ \"./node_modules/core-js/internals/enum-bug-keys.js\");\n\n// 19.1.2.14 / 15.2.3.14 Object.keys(O)\nmodule.exports = Object.keys || function keys(O) {\n return internalObjectKeys(O, enumBugKeys);\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/object-property-is-enumerable.js\":\n/*!*************************************************************************!*\\\n !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***!\n \\*************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar nativePropertyIsEnumerable = {}.propertyIsEnumerable;\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\n// Nashorn ~ JDK8 bug\nvar NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);\n\nexports.f = NASHORN_BUG ? function propertyIsEnumerable(V) {\n var descriptor = getOwnPropertyDescriptor(this, V);\n return !!descriptor && descriptor.enumerable;\n} : nativePropertyIsEnumerable;\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/object-set-prototype-of.js\":\n/*!*******************************************************************!*\\\n !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***!\n \\*******************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar validateSetPrototypeOfArguments = __webpack_require__(/*! ../internals/validate-set-prototype-of-arguments */ \"./node_modules/core-js/internals/validate-set-prototype-of-arguments.js\");\n\n// Works with __proto__ only. Old v8 can't work with null proto objects.\n/* eslint-disable no-proto */\nmodule.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () {\n var correctSetter = false;\n var test = {};\n var setter;\n try {\n setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;\n setter.call(test, []);\n correctSetter = test instanceof Array;\n } catch (error) { /* empty */ }\n return function setPrototypeOf(O, proto) {\n validateSetPrototypeOfArguments(O, proto);\n if (correctSetter) setter.call(O, proto);\n else O.__proto__ = proto;\n return O;\n };\n}() : undefined);\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/own-keys.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/core-js/internals/own-keys.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ \"./node_modules/core-js/internals/object-get-own-property-names.js\");\nvar getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ \"./node_modules/core-js/internals/object-get-own-property-symbols.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\n\nvar Reflect = global.Reflect;\n\n// all object keys, includes non-enumerable and symbols\nmodule.exports = Reflect && Reflect.ownKeys || function ownKeys(it) {\n var keys = getOwnPropertyNamesModule.f(anObject(it));\n var getOwnPropertySymbols = getOwnPropertySymbolsModule.f;\n return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/path.js\":\n/*!************************************************!*\\\n !*** ./node_modules/core-js/internals/path.js ***!\n \\************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nmodule.exports = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/redefine.js\":\n/*!****************************************************!*\\\n !*** ./node_modules/core-js/internals/redefine.js ***!\n \\****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar shared = __webpack_require__(/*! ../internals/shared */ \"./node_modules/core-js/internals/shared.js\");\nvar hide = __webpack_require__(/*! ../internals/hide */ \"./node_modules/core-js/internals/hide.js\");\nvar has = __webpack_require__(/*! ../internals/has */ \"./node_modules/core-js/internals/has.js\");\nvar setGlobal = __webpack_require__(/*! ../internals/set-global */ \"./node_modules/core-js/internals/set-global.js\");\nvar nativeFunctionToString = __webpack_require__(/*! ../internals/function-to-string */ \"./node_modules/core-js/internals/function-to-string.js\");\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \"./node_modules/core-js/internals/internal-state.js\");\n\nvar getInternalState = InternalStateModule.get;\nvar enforceInternalState = InternalStateModule.enforce;\nvar TEMPLATE = String(nativeFunctionToString).split('toString');\n\nshared('inspectSource', function (it) {\n return nativeFunctionToString.call(it);\n});\n\n(module.exports = function (O, key, value, options) {\n var unsafe = options ? !!options.unsafe : false;\n var simple = options ? !!options.enumerable : false;\n var noTargetGet = options ? !!options.noTargetGet : false;\n if (typeof value == 'function') {\n if (typeof key == 'string' && !has(value, 'name')) hide(value, 'name', key);\n enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : '');\n }\n if (O === global) {\n if (simple) O[key] = value;\n else setGlobal(key, value);\n return;\n } else if (!unsafe) {\n delete O[key];\n } else if (!noTargetGet && O[key]) {\n simple = true;\n }\n if (simple) O[key] = value;\n else hide(O, key, value);\n// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative\n})(Function.prototype, 'toString', function toString() {\n return typeof this == 'function' && getInternalState(this).source || nativeFunctionToString.call(this);\n});\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/require-object-coercible.js\":\n/*!********************************************************************!*\\\n !*** ./node_modules/core-js/internals/require-object-coercible.js ***!\n \\********************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\n// `RequireObjectCoercible` abstract operation\n// https://tc39.github.io/ecma262/#sec-requireobjectcoercible\nmodule.exports = function (it) {\n if (it == undefined) throw TypeError(\"Can't call method on \" + it);\n return it;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/set-global.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/core-js/internals/set-global.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar hide = __webpack_require__(/*! ../internals/hide */ \"./node_modules/core-js/internals/hide.js\");\n\nmodule.exports = function (key, value) {\n try {\n hide(global, key, value);\n } catch (error) {\n global[key] = value;\n } return value;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/set-to-string-tag.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/core-js/internals/set-to-string-tag.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar defineProperty = __webpack_require__(/*! ../internals/object-define-property */ \"./node_modules/core-js/internals/object-define-property.js\").f;\nvar has = __webpack_require__(/*! ../internals/has */ \"./node_modules/core-js/internals/has.js\");\nvar wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ \"./node_modules/core-js/internals/well-known-symbol.js\");\n\nvar TO_STRING_TAG = wellKnownSymbol('toStringTag');\n\nmodule.exports = function (it, TAG, STATIC) {\n if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {\n defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG });\n }\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/shared-key.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/core-js/internals/shared-key.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar shared = __webpack_require__(/*! ../internals/shared */ \"./node_modules/core-js/internals/shared.js\");\nvar uid = __webpack_require__(/*! ../internals/uid */ \"./node_modules/core-js/internals/uid.js\");\n\nvar keys = shared('keys');\n\nmodule.exports = function (key) {\n return keys[key] || (keys[key] = uid(key));\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/shared.js\":\n/*!**************************************************!*\\\n !*** ./node_modules/core-js/internals/shared.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar setGlobal = __webpack_require__(/*! ../internals/set-global */ \"./node_modules/core-js/internals/set-global.js\");\nvar IS_PURE = __webpack_require__(/*! ../internals/is-pure */ \"./node_modules/core-js/internals/is-pure.js\");\n\nvar SHARED = '__core-js_shared__';\nvar store = global[SHARED] || setGlobal(SHARED, {});\n\n(module.exports = function (key, value) {\n return store[key] || (store[key] = value !== undefined ? value : {});\n})('versions', []).push({\n version: '3.1.3',\n mode: IS_PURE ? 'pure' : 'global',\n copyright: '© 2019 Denis Pushkarev (zloirock.ru)'\n});\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/string-at.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/core-js/internals/string-at.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(/*! ../internals/to-integer */ \"./node_modules/core-js/internals/to-integer.js\");\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \"./node_modules/core-js/internals/require-object-coercible.js\");\n\n// CONVERT_TO_STRING: true -> String#at\n// CONVERT_TO_STRING: false -> String#codePointAt\nmodule.exports = function (that, pos, CONVERT_TO_STRING) {\n var S = String(requireObjectCoercible(that));\n var position = toInteger(pos);\n var size = S.length;\n var first, second;\n if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;\n first = S.charCodeAt(position);\n return first < 0xD800 || first > 0xDBFF || position + 1 === size\n || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF\n ? CONVERT_TO_STRING ? S.charAt(position) : first\n : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/to-absolute-index.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/core-js/internals/to-absolute-index.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(/*! ../internals/to-integer */ \"./node_modules/core-js/internals/to-integer.js\");\n\nvar max = Math.max;\nvar min = Math.min;\n\n// Helper for a popular repeating case of the spec:\n// Let integer be ? ToInteger(index).\n// If integer < 0, let result be max((length + integer), 0); else let result be min(length, length).\nmodule.exports = function (index, length) {\n var integer = toInteger(index);\n return integer < 0 ? max(integer + length, 0) : min(integer, length);\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/to-indexed-object.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/core-js/internals/to-indexed-object.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n// toObject with fallback for non-array-like ES3 strings\nvar IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ \"./node_modules/core-js/internals/indexed-object.js\");\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \"./node_modules/core-js/internals/require-object-coercible.js\");\n\nmodule.exports = function (it) {\n return IndexedObject(requireObjectCoercible(it));\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/to-integer.js\":\n/*!******************************************************!*\\\n !*** ./node_modules/core-js/internals/to-integer.js ***!\n \\******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nvar ceil = Math.ceil;\nvar floor = Math.floor;\n\n// `ToInteger` abstract operation\n// https://tc39.github.io/ecma262/#sec-tointeger\nmodule.exports = function (argument) {\n return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/to-length.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/core-js/internals/to-length.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar toInteger = __webpack_require__(/*! ../internals/to-integer */ \"./node_modules/core-js/internals/to-integer.js\");\n\nvar min = Math.min;\n\n// `ToLength` abstract operation\n// https://tc39.github.io/ecma262/#sec-tolength\nmodule.exports = function (argument) {\n return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/to-object.js\":\n/*!*****************************************************!*\\\n !*** ./node_modules/core-js/internals/to-object.js ***!\n \\*****************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ \"./node_modules/core-js/internals/require-object-coercible.js\");\n\n// `ToObject` abstract operation\n// https://tc39.github.io/ecma262/#sec-toobject\nmodule.exports = function (argument) {\n return Object(requireObjectCoercible(argument));\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/to-primitive.js\":\n/*!********************************************************!*\\\n !*** ./node_modules/core-js/internals/to-primitive.js ***!\n \\********************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\n\n// 7.1.1 ToPrimitive(input [, PreferredType])\n// instead of the ES6 spec version, we didn't implement @@toPrimitive case\n// and the second argument - flag - preferred type is a string\nmodule.exports = function (it, S) {\n if (!isObject(it)) return it;\n var fn, val;\n if (S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n if (typeof (fn = it.valueOf) == 'function' && !isObject(val = fn.call(it))) return val;\n if (!S && typeof (fn = it.toString) == 'function' && !isObject(val = fn.call(it))) return val;\n throw TypeError(\"Can't convert object to primitive value\");\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/uid.js\":\n/*!***********************************************!*\\\n !*** ./node_modules/core-js/internals/uid.js ***!\n \\***********************************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nvar id = 0;\nvar postfix = Math.random();\n\nmodule.exports = function (key) {\n return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + postfix).toString(36));\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/validate-set-prototype-of-arguments.js\":\n/*!*******************************************************************************!*\\\n !*** ./node_modules/core-js/internals/validate-set-prototype-of-arguments.js ***!\n \\*******************************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar isObject = __webpack_require__(/*! ../internals/is-object */ \"./node_modules/core-js/internals/is-object.js\");\nvar anObject = __webpack_require__(/*! ../internals/an-object */ \"./node_modules/core-js/internals/an-object.js\");\n\nmodule.exports = function (O, proto) {\n anObject(O);\n if (!isObject(proto) && proto !== null) {\n throw TypeError(\"Can't set \" + String(proto) + ' as a prototype');\n }\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/internals/well-known-symbol.js\":\n/*!*************************************************************!*\\\n !*** ./node_modules/core-js/internals/well-known-symbol.js ***!\n \\*************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar global = __webpack_require__(/*! ../internals/global */ \"./node_modules/core-js/internals/global.js\");\nvar shared = __webpack_require__(/*! ../internals/shared */ \"./node_modules/core-js/internals/shared.js\");\nvar uid = __webpack_require__(/*! ../internals/uid */ \"./node_modules/core-js/internals/uid.js\");\nvar NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ \"./node_modules/core-js/internals/native-symbol.js\");\n\nvar Symbol = global.Symbol;\nvar store = shared('wks');\n\nmodule.exports = function (name) {\n return store[name] || (store[name] = NATIVE_SYMBOL && Symbol[name]\n || (NATIVE_SYMBOL ? Symbol : uid)('Symbol.' + name));\n};\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/modules/es.array.from.js\":\n/*!*******************************************************!*\\\n !*** ./node_modules/core-js/modules/es.array.from.js ***!\n \\*******************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar $ = __webpack_require__(/*! ../internals/export */ \"./node_modules/core-js/internals/export.js\");\nvar from = __webpack_require__(/*! ../internals/array-from */ \"./node_modules/core-js/internals/array-from.js\");\nvar checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ \"./node_modules/core-js/internals/check-correctness-of-iteration.js\");\n\nvar INCORRECT_ITERATION = !checkCorrectnessOfIteration(function (iterable) {\n Array.from(iterable);\n});\n\n// `Array.from` method\n// https://tc39.github.io/ecma262/#sec-array.from\n$({ target: 'Array', stat: true, forced: INCORRECT_ITERATION }, {\n from: from\n});\n\n\n/***/ }),\n\n/***/ \"./node_modules/core-js/modules/es.string.iterator.js\":\n/*!************************************************************!*\\\n !*** ./node_modules/core-js/modules/es.string.iterator.js ***!\n \\************************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\nvar codePointAt = __webpack_require__(/*! ../internals/string-at */ \"./node_modules/core-js/internals/string-at.js\");\nvar InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ \"./node_modules/core-js/internals/internal-state.js\");\nvar defineIterator = __webpack_require__(/*! ../internals/define-iterator */ \"./node_modules/core-js/internals/define-iterator.js\");\n\nvar STRING_ITERATOR = 'String Iterator';\nvar setInternalState = InternalStateModule.set;\nvar getInternalState = InternalStateModule.getterFor(STRING_ITERATOR);\n\n// `String.prototype[@@iterator]` method\n// https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator\ndefineIterator(String, 'String', function (iterated) {\n setInternalState(this, {\n type: STRING_ITERATOR,\n string: String(iterated),\n index: 0\n });\n// `%StringIteratorPrototype%.next` method\n// https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next\n}, function next() {\n var state = getInternalState(this);\n var string = state.string;\n var index = state.index;\n var point;\n if (index >= string.length) return { value: undefined, done: true };\n point = codePointAt(string, index, true);\n state.index += point.length;\n return { value: point, done: false };\n});\n\n\n/***/ }),\n\n/***/ \"./node_modules/webpack/buildin/global.js\":\n/*!***********************************!*\\\n !*** (webpack)/buildin/global.js ***!\n \\***********************************/\n/*! no static exports found */\n/***/ (function(module, exports) {\n\nvar g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n/***/ }),\n\n/***/ \"./src/default-attrs.json\":\n/*!********************************!*\\\n !*** ./src/default-attrs.json ***!\n \\********************************/\n/*! exports provided: xmlns, width, height, viewBox, fill, stroke, stroke-width, stroke-linecap, stroke-linejoin, default */\n/***/ (function(module) {\n\nmodule.exports = {\"xmlns\":\"http://www.w3.org/2000/svg\",\"width\":24,\"height\":24,\"viewBox\":\"0 0 24 24\",\"fill\":\"none\",\"stroke\":\"currentColor\",\"stroke-width\":2,\"stroke-linecap\":\"round\",\"stroke-linejoin\":\"round\"};\n\n/***/ }),\n\n/***/ \"./src/icon.js\":\n/*!*********************!*\\\n !*** ./src/icon.js ***!\n \\*********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nvar _dedupe = __webpack_require__(/*! classnames/dedupe */ \"./node_modules/classnames/dedupe.js\");\n\nvar _dedupe2 = _interopRequireDefault(_dedupe);\n\nvar _defaultAttrs = __webpack_require__(/*! ./default-attrs.json */ \"./src/default-attrs.json\");\n\nvar _defaultAttrs2 = _interopRequireDefault(_defaultAttrs);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nvar Icon = function () {\n function Icon(name, contents) {\n var tags = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];\n\n _classCallCheck(this, Icon);\n\n this.name = name;\n this.contents = contents;\n this.tags = tags;\n this.attrs = _extends({}, _defaultAttrs2.default, { class: 'feather feather-' + name });\n }\n\n /**\n * Create an SVG string.\n * @param {Object} attrs\n * @returns {string}\n */\n\n\n _createClass(Icon, [{\n key: 'toSvg',\n value: function toSvg() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n var combinedAttrs = _extends({}, this.attrs, attrs, { class: (0, _dedupe2.default)(this.attrs.class, attrs.class) });\n\n return '<svg ' + attrsToString(combinedAttrs) + '>' + this.contents + '</svg>';\n }\n\n /**\n * Return string representation of an `Icon`.\n *\n * Added for backward compatibility. If old code expects `feather.icons.<name>`\n * to be a string, `toString()` will get implicitly called.\n *\n * @returns {string}\n */\n\n }, {\n key: 'toString',\n value: function toString() {\n return this.contents;\n }\n }]);\n\n return Icon;\n}();\n\n/**\n * Convert attributes object to string of HTML attributes.\n * @param {Object} attrs\n * @returns {string}\n */\n\n\nfunction attrsToString(attrs) {\n return Object.keys(attrs).map(function (key) {\n return key + '=\"' + attrs[key] + '\"';\n }).join(' ');\n}\n\nexports.default = Icon;\n\n/***/ }),\n\n/***/ \"./src/icons.js\":\n/*!**********************!*\\\n !*** ./src/icons.js ***!\n \\**********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _icon = __webpack_require__(/*! ./icon */ \"./src/icon.js\");\n\nvar _icon2 = _interopRequireDefault(_icon);\n\nvar _icons = __webpack_require__(/*! ../dist/icons.json */ \"./dist/icons.json\");\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nvar _tags = __webpack_require__(/*! ./tags.json */ \"./src/tags.json\");\n\nvar _tags2 = _interopRequireDefault(_tags);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nexports.default = Object.keys(_icons2.default).map(function (key) {\n return new _icon2.default(key, _icons2.default[key], _tags2.default[key]);\n}).reduce(function (object, icon) {\n object[icon.name] = icon;\n return object;\n}, {});\n\n/***/ }),\n\n/***/ \"./src/index.js\":\n/*!**********************!*\\\n !*** ./src/index.js ***!\n \\**********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nvar _icons = __webpack_require__(/*! ./icons */ \"./src/icons.js\");\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nvar _toSvg = __webpack_require__(/*! ./to-svg */ \"./src/to-svg.js\");\n\nvar _toSvg2 = _interopRequireDefault(_toSvg);\n\nvar _replace = __webpack_require__(/*! ./replace */ \"./src/replace.js\");\n\nvar _replace2 = _interopRequireDefault(_replace);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\nmodule.exports = { icons: _icons2.default, toSvg: _toSvg2.default, replace: _replace2.default };\n\n/***/ }),\n\n/***/ \"./src/replace.js\":\n/*!************************!*\\\n !*** ./src/replace.js ***!\n \\************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; /* eslint-env browser */\n\n\nvar _dedupe = __webpack_require__(/*! classnames/dedupe */ \"./node_modules/classnames/dedupe.js\");\n\nvar _dedupe2 = _interopRequireDefault(_dedupe);\n\nvar _icons = __webpack_require__(/*! ./icons */ \"./src/icons.js\");\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Replace all HTML elements that have a `data-feather` attribute with SVG markup\n * corresponding to the element's `data-feather` attribute value.\n * @param {Object} attrs\n */\nfunction replace() {\n var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n if (typeof document === 'undefined') {\n throw new Error('`feather.replace()` only works in a browser environment.');\n }\n\n var elementsToReplace = document.querySelectorAll('[data-feather]');\n\n Array.from(elementsToReplace).forEach(function (element) {\n return replaceElement(element, attrs);\n });\n}\n\n/**\n * Replace a single HTML element with SVG markup\n * corresponding to the element's `data-feather` attribute value.\n * @param {HTMLElement} element\n * @param {Object} attrs\n */\nfunction replaceElement(element) {\n var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n var elementAttrs = getAttrs(element);\n var name = elementAttrs['data-feather'];\n delete elementAttrs['data-feather'];\n\n var svgString = _icons2.default[name].toSvg(_extends({}, attrs, elementAttrs, { class: (0, _dedupe2.default)(attrs.class, elementAttrs.class) }));\n var svgDocument = new DOMParser().parseFromString(svgString, 'image/svg+xml');\n var svgElement = svgDocument.querySelector('svg');\n\n element.parentNode.replaceChild(svgElement, element);\n}\n\n/**\n * Get the attributes of an HTML element.\n * @param {HTMLElement} element\n * @returns {Object}\n */\nfunction getAttrs(element) {\n return Array.from(element.attributes).reduce(function (attrs, attr) {\n attrs[attr.name] = attr.value;\n return attrs;\n }, {});\n}\n\nexports.default = replace;\n\n/***/ }),\n\n/***/ \"./src/tags.json\":\n/*!***********************!*\\\n !*** ./src/tags.json ***!\n \\***********************/\n/*! exports provided: activity, airplay, alert-circle, alert-octagon, alert-triangle, at-sign, award, aperture, bell, bell-off, bluetooth, book-open, book, bookmark, briefcase, clipboard, clock, cloud-drizzle, cloud-lightning, cloud-rain, cloud-snow, cloud, codepen, codesandbox, coffee, command, compass, copy, corner-down-left, corner-down-right, corner-left-down, corner-left-up, corner-right-down, corner-right-up, corner-up-left, corner-up-right, credit-card, crop, crosshair, database, delete, disc, dollar-sign, droplet, edit, edit-2, edit-3, eye, eye-off, external-link, facebook, fast-forward, figma, film, folder-minus, folder-plus, folder, framer, frown, gift, git-branch, git-commit, git-merge, git-pull-request, github, gitlab, global, hard-drive, hash, headphones, heart, help-circle, hexagon, home, image, inbox, instagram, key, life-bouy, linkedin, lock, log-in, log-out, mail, map-pin, map, maximize, maximize-2, meh, menu, message-circle, message-square, mic-off, mic, minimize, minimize-2, monitor, moon, more-horizontal, more-vertical, mouse-pointer, move, navigation, navigation-2, octagon, package, paperclip, pause, pause-circle, pen-tool, play, play-circle, plus, plus-circle, plus-square, pocket, power, radio, rewind, rss, save, search, send, settings, shield, shield-off, shopping-bag, shopping-cart, shuffle, skip-back, skip-forward, slash, sliders, smile, speaker, star, sun, sunrise, sunset, tag, target, terminal, thumbs-down, thumbs-up, toggle-left, toggle-right, trash, trash-2, triangle, truck, twitter, umbrella, video-off, video, voicemail, volume, volume-1, volume-2, volume-x, watch, wind, x-circle, x-octagon, x-square, x, youtube, zap-off, zap, default */\n/***/ (function(module) {\n\nmodule.exports = {\"activity\":[\"pulse\",\"health\",\"action\",\"motion\"],\"airplay\":[\"stream\",\"cast\",\"mirroring\"],\"alert-circle\":[\"warning\"],\"alert-octagon\":[\"warning\"],\"alert-triangle\":[\"warning\"],\"at-sign\":[\"mention\"],\"award\":[\"achievement\",\"badge\"],\"aperture\":[\"camera\",\"photo\"],\"bell\":[\"alarm\",\"notification\"],\"bell-off\":[\"alarm\",\"notification\",\"silent\"],\"bluetooth\":[\"wireless\"],\"book-open\":[\"read\"],\"book\":[\"read\",\"dictionary\",\"booklet\",\"magazine\"],\"bookmark\":[\"read\",\"clip\",\"marker\",\"tag\"],\"briefcase\":[\"work\",\"bag\",\"baggage\",\"folder\"],\"clipboard\":[\"copy\"],\"clock\":[\"time\",\"watch\",\"alarm\"],\"cloud-drizzle\":[\"weather\",\"shower\"],\"cloud-lightning\":[\"weather\",\"bolt\"],\"cloud-rain\":[\"weather\"],\"cloud-snow\":[\"weather\",\"blizzard\"],\"cloud\":[\"weather\"],\"codepen\":[\"logo\"],\"codesandbox\":[\"logo\"],\"coffee\":[\"drink\",\"cup\",\"mug\",\"tea\",\"cafe\",\"hot\",\"beverage\"],\"command\":[\"keyboard\",\"cmd\"],\"compass\":[\"navigation\",\"safari\",\"travel\"],\"copy\":[\"clone\",\"duplicate\"],\"corner-down-left\":[\"arrow\"],\"corner-down-right\":[\"arrow\"],\"corner-left-down\":[\"arrow\"],\"corner-left-up\":[\"arrow\"],\"corner-right-down\":[\"arrow\"],\"corner-right-up\":[\"arrow\"],\"corner-up-left\":[\"arrow\"],\"corner-up-right\":[\"arrow\"],\"credit-card\":[\"purchase\",\"payment\",\"cc\"],\"crop\":[\"photo\",\"image\"],\"crosshair\":[\"aim\",\"target\"],\"database\":[\"storage\"],\"delete\":[\"remove\"],\"disc\":[\"album\",\"cd\",\"dvd\",\"music\"],\"dollar-sign\":[\"currency\",\"money\",\"payment\"],\"droplet\":[\"water\"],\"edit\":[\"pencil\",\"change\"],\"edit-2\":[\"pencil\",\"change\"],\"edit-3\":[\"pencil\",\"change\"],\"eye\":[\"view\",\"watch\"],\"eye-off\":[\"view\",\"watch\"],\"external-link\":[\"outbound\"],\"facebook\":[\"logo\"],\"fast-forward\":[\"music\"],\"figma\":[\"logo\",\"design\",\"tool\"],\"film\":[\"movie\",\"video\"],\"folder-minus\":[\"directory\"],\"folder-plus\":[\"directory\"],\"folder\":[\"directory\"],\"framer\":[\"logo\",\"design\",\"tool\"],\"frown\":[\"emoji\",\"face\",\"bad\",\"sad\",\"emotion\"],\"gift\":[\"present\",\"box\",\"birthday\",\"party\"],\"git-branch\":[\"code\",\"version control\"],\"git-commit\":[\"code\",\"version control\"],\"git-merge\":[\"code\",\"version control\"],\"git-pull-request\":[\"code\",\"version control\"],\"github\":[\"logo\",\"version control\"],\"gitlab\":[\"logo\",\"version control\"],\"global\":[\"world\",\"browser\",\"language\",\"translate\"],\"hard-drive\":[\"computer\",\"server\"],\"hash\":[\"hashtag\",\"number\",\"pound\"],\"headphones\":[\"music\",\"audio\"],\"heart\":[\"like\",\"love\"],\"help-circle\":[\"question mark\"],\"hexagon\":[\"shape\",\"node.js\",\"logo\"],\"home\":[\"house\"],\"image\":[\"picture\"],\"inbox\":[\"email\"],\"instagram\":[\"logo\",\"camera\"],\"key\":[\"password\",\"login\",\"authentication\"],\"life-bouy\":[\"help\",\"life ring\",\"support\"],\"linkedin\":[\"logo\"],\"lock\":[\"security\",\"password\"],\"log-in\":[\"sign in\",\"arrow\"],\"log-out\":[\"sign out\",\"arrow\"],\"mail\":[\"email\"],\"map-pin\":[\"location\",\"navigation\",\"travel\",\"marker\"],\"map\":[\"location\",\"navigation\",\"travel\"],\"maximize\":[\"fullscreen\"],\"maximize-2\":[\"fullscreen\",\"arrows\"],\"meh\":[\"emoji\",\"face\",\"neutral\",\"emotion\"],\"menu\":[\"bars\",\"navigation\",\"hamburger\"],\"message-circle\":[\"comment\",\"chat\"],\"message-square\":[\"comment\",\"chat\"],\"mic-off\":[\"record\"],\"mic\":[\"record\"],\"minimize\":[\"exit fullscreen\"],\"minimize-2\":[\"exit fullscreen\",\"arrows\"],\"monitor\":[\"tv\"],\"moon\":[\"dark\",\"night\"],\"more-horizontal\":[\"ellipsis\"],\"more-vertical\":[\"ellipsis\"],\"mouse-pointer\":[\"arrow\",\"cursor\"],\"move\":[\"arrows\"],\"navigation\":[\"location\",\"travel\"],\"navigation-2\":[\"location\",\"travel\"],\"octagon\":[\"stop\"],\"package\":[\"box\"],\"paperclip\":[\"attachment\"],\"pause\":[\"music\",\"stop\"],\"pause-circle\":[\"music\",\"stop\"],\"pen-tool\":[\"vector\",\"drawing\"],\"play\":[\"music\",\"start\"],\"play-circle\":[\"music\",\"start\"],\"plus\":[\"add\",\"new\"],\"plus-circle\":[\"add\",\"new\"],\"plus-square\":[\"add\",\"new\"],\"pocket\":[\"logo\",\"save\"],\"power\":[\"on\",\"off\"],\"radio\":[\"signal\"],\"rewind\":[\"music\"],\"rss\":[\"feed\",\"subscribe\"],\"save\":[\"floppy disk\"],\"search\":[\"find\",\"magnifier\",\"magnifying glass\"],\"send\":[\"message\",\"mail\",\"paper airplane\"],\"settings\":[\"cog\",\"edit\",\"gear\",\"preferences\"],\"shield\":[\"security\"],\"shield-off\":[\"security\"],\"shopping-bag\":[\"ecommerce\",\"cart\",\"purchase\",\"store\"],\"shopping-cart\":[\"ecommerce\",\"cart\",\"purchase\",\"store\"],\"shuffle\":[\"music\"],\"skip-back\":[\"music\"],\"skip-forward\":[\"music\"],\"slash\":[\"ban\",\"no\"],\"sliders\":[\"settings\",\"controls\"],\"smile\":[\"emoji\",\"face\",\"happy\",\"good\",\"emotion\"],\"speaker\":[\"music\"],\"star\":[\"bookmark\",\"favorite\",\"like\"],\"sun\":[\"brightness\",\"weather\",\"light\"],\"sunrise\":[\"weather\"],\"sunset\":[\"weather\"],\"tag\":[\"label\"],\"target\":[\"bullseye\"],\"terminal\":[\"code\",\"command line\"],\"thumbs-down\":[\"dislike\",\"bad\"],\"thumbs-up\":[\"like\",\"good\"],\"toggle-left\":[\"on\",\"off\",\"switch\"],\"toggle-right\":[\"on\",\"off\",\"switch\"],\"trash\":[\"garbage\",\"delete\",\"remove\"],\"trash-2\":[\"garbage\",\"delete\",\"remove\"],\"triangle\":[\"delta\"],\"truck\":[\"delivery\",\"van\",\"shipping\"],\"twitter\":[\"logo\"],\"umbrella\":[\"rain\",\"weather\"],\"video-off\":[\"camera\",\"movie\",\"film\"],\"video\":[\"camera\",\"movie\",\"film\"],\"voicemail\":[\"phone\"],\"volume\":[\"music\",\"sound\",\"mute\"],\"volume-1\":[\"music\",\"sound\"],\"volume-2\":[\"music\",\"sound\"],\"volume-x\":[\"music\",\"sound\",\"mute\"],\"watch\":[\"clock\",\"time\"],\"wind\":[\"weather\",\"air\"],\"x-circle\":[\"cancel\",\"close\",\"delete\",\"remove\",\"times\"],\"x-octagon\":[\"delete\",\"stop\",\"alert\",\"warning\",\"times\"],\"x-square\":[\"cancel\",\"close\",\"delete\",\"remove\",\"times\"],\"x\":[\"cancel\",\"close\",\"delete\",\"remove\",\"times\"],\"youtube\":[\"logo\",\"video\",\"play\"],\"zap-off\":[\"flash\",\"camera\",\"lightning\"],\"zap\":[\"flash\",\"camera\",\"lightning\"]};\n\n/***/ }),\n\n/***/ \"./src/to-svg.js\":\n/*!***********************!*\\\n !*** ./src/to-svg.js ***!\n \\***********************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n\"use strict\";\n\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\n\nvar _icons = __webpack_require__(/*! ./icons */ \"./src/icons.js\");\n\nvar _icons2 = _interopRequireDefault(_icons);\n\nfunction _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }\n\n/**\n * Create an SVG string.\n * @deprecated\n * @param {string} name\n * @param {Object} attrs\n * @returns {string}\n */\nfunction toSvg(name) {\n var attrs = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n\n console.warn('feather.toSvg() is deprecated. Please use feather.icons[name].toSvg() instead.');\n\n if (!name) {\n throw new Error('The required `key` (icon name) parameter is missing.');\n }\n\n if (!_icons2.default[name]) {\n throw new Error('No icon matching \\'' + name + '\\'. See the complete list of icons at https://feathericons.com');\n }\n\n return _icons2.default[name].toSvg(attrs);\n}\n\nexports.default = toSvg;\n\n/***/ }),\n\n/***/ 0:\n/*!**************************************************!*\\\n !*** multi core-js/es/array/from ./src/index.js ***!\n \\**************************************************/\n/*! no static exports found */\n/***/ (function(module, exports, __webpack_require__) {\n\n__webpack_require__(/*! core-js/es/array/from */\"./node_modules/core-js/es/array/from.js\");\nmodule.exports = __webpack_require__(/*! /home/travis/build/feathericons/feather/src/index.js */\"./src/index.js\");\n\n\n/***/ })\n\n/******/ });\n});\n//# sourceMappingURL=feather.js.map","import feather from \"feather-icons\";\r\nexport default icon => feather.toSvg(icon);","<script>\r\n\r\nimport {database} from \"../builderStore\";\r\nimport getIcon from \"../common/icon\";\r\n\r\nexport let name = \"\";\r\nexport let label = \"\";\r\nexport let icon = \"\";\r\n\r\nlet navActive = \"\";\r\n\r\ndatabase.subscribe(db => {\r\n navActive = (db.activeNav === name ? \"active\" : \"\")\r\n});\r\n\r\nconst setActive = () => \r\n database.setActiveNav(name);\r\n\r\n</script>\r\n\r\n<div class=\"{navActive}\">\r\n <div class=\"nav-item\" \r\n on:click={setActive}>\r\n <div class=\"inner\">\r\n <div class=\"icon\">{@html getIcon(icon)}</div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.nav-item {\r\n padding: 0px 5px;\r\n display: block;\r\n padding: 10px;\r\n color: var(--slate);\r\n cursor: pointer;\r\n}\r\n\r\n.inner {\r\n padding: 0px 20px 10px 0px;\r\n display: inline-block;\r\n width:100%;\r\n}\r\n\r\n.nav-item:hover {\r\n background-color: var(--primary25);\r\n}\r\n\r\n.icon {\r\n font-size:0.9em; \r\n display: inline-block; \r\n position: relative;\r\n top: 5px;\r\n margin-right:5px;\r\n width:100%;\r\n}\r\n\r\n.active > div {\r\n background-color: var(--primary10);\r\n color: var(--secondary100);\r\n}\r\n\r\n.active>div:hover {\r\n background-color: var(--slate);\r\n color: var(--secondary100);\r\n}\r\n\r\n.active {\r\n background-color: white; \r\n}\r\n\r\n\r\n</style>","<script>\r\n\r\nimport NavItem from \"./NavItem.svelte\";\r\n\r\nexport let width=50;\r\n\r\n</script>\r\n\r\n<nav class=\"nav\"\r\n style=\"width: {width};\">\r\n <img src=\"/_builder/assets/budibase-logo-only.png\" class=\"logo\" alt=\"budibase logo\"/>\r\n <NavItem name=\"database\" label=\"Database\" icon=\"database\" />\r\n <NavItem name=\"actions\" label=\"Actions\" icon=\"zap\" />\r\n <NavItem name=\"access levels\" label=\"Access Levels\" icon=\"user\" />\r\n <NavItem name=\"user interface\" label=\"User Interface\" icon=\"monitor\"/>\r\n <NavItem name=\"package\" label=\"Package\" icon=\"package\"/>\r\n</nav>\r\n\r\n\r\n\r\n<style>\r\n\r\n.nav {\r\n height: 100%;\r\n position: fixed;\r\n left: 0px;\r\n background-color: var(--secondary100);\r\n color: var(--darkslate);\r\n}\r\n\r\n.nav > img {\r\n width:100%;\r\n margin-bottom: 30px;\r\n margin-top: 5px;\r\n margin-left:0px;\r\n}\r\n\r\n</style>","<script>\r\n\r\nimport {database} from \"../builderStore\";\r\nimport {cloneDeep} from \"lodash\";\r\nexport let level = 0;\r\nexport let node;\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <div class=\"title\" on:click={() => database.selectExistingNode(node.nodeId)} style=\"padding-left: {20 + (level * 20)}px\">\r\n {node.name}\r\n </div>\r\n {#if node.children}\r\n {#each node.children as child}\r\n <svelte:self node={child} \r\n level={level+1}/>\r\n {/each}\r\n {/if}\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.root { \r\n display: block;\r\n font-size: 13pt;\r\n width: 100%;\r\n cursor: pointer;\r\n}\r\n\r\n.title {\r\n font: var(--bodytext);\r\n padding-top: 10px;\r\n padding-right: 5px;\r\n padding-bottom: 10px;\r\n color: var(--secondary100);\r\n}\r\n\r\n.title:hover {\r\n background-color: var(--secondary10);\r\n}\r\n\r\n</style>","<script>\r\nexport let text = \"\";\r\nexport let label = \"\";\r\n</script>\r\n\r\n<div class=\"container\">\r\n <div class=\"label\">{label}</div>\r\n <input class=\"control uk-input\" bind:value={text} >\r\n</div>\r\n\r\n<style>\r\n\r\n.container {\r\n display: grid;\r\n grid-template-columns: [label] 100px [control] auto;\r\n margin: 20px 0px;\r\n}\r\n.label {\r\n grid-column-start: label;\r\n align-self: center;\r\n}\r\n.control {\r\n grid-column-start: control;\r\n align-self: center;\r\n margin: 0;\r\n}\r\n\r\ninput {\r\n width:300px;\r\n}\r\n\r\n</style>","<script>\r\nimport {createEventDispatcher} from \"svelte\";\r\n\r\nexport let selected;\r\nexport let label;\r\nexport let options;\r\nexport let valueMember;\r\nexport let textMember;\r\nexport let multiple=false;\r\n\r\nconst dispatch =createEventDispatcher();\r\n\r\n\r\n</script>\r\n\r\n<div class=\"container\">\r\n <div class=\"label\">{label}</div>\r\n\r\n {#if multiple}\r\n \r\n <select class=\"control uk-select\" multiple bind:value={selected} on:change>\r\n {#each options as option}\r\n <option value={!valueMember ? option : valueMember(option)}>{!textMember ? option : textMember(option)}</option>\r\n {/each}\r\n </select>\r\n\r\n {:else}\r\n\r\n <select class=\"control uk-select\" bind:value={selected} on:change>\r\n {#each options as option}\r\n <option value={!valueMember ? option : valueMember(option)}>{!textMember ? option : textMember(option)}</option>\r\n {/each}\r\n </select>\r\n {/if}\r\n\r\n</div>\r\n\r\n<style>\r\n\r\n.container {\r\n display: grid;\r\n grid-template-columns: [label] 100px [control] auto;\r\n margin: 20px 0px;\r\n}\r\n.label {\r\n grid-column-start: label;\r\n align-self: center;\r\n}\r\n.control {\r\n grid-column-start: control;\r\n align-self: center;\r\n margin: 0;\r\n}\r\n\r\nselect {\r\n width:300px;\r\n}\r\n\r\n</style>","<script>\r\nexport let style=\"\";\r\n</script>\r\n\r\n<div class=\"root\" style={style}>\r\n <slot />\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n display: flex;\r\n}\r\n\r\n.root:last-child {\r\n border-radius: 0 var(--borderradius) var(--borderradius) 0;\r\n}\r\n\r\n.root:first-child {\r\n border-radius: var(--borderradius) 0 0 var(--borderradius); \r\n}\r\n\r\n.root:not(:first-child):not(:last-child) {\r\n border-radius: 0;\r\n}\r\n\r\n</style>","<script>\r\n\r\nexport let value;\r\nexport let label;\r\n\r\nconst inputChanged = ev => {\r\n try {\r\n value = Number(ev.target.value);\r\n } catch(_) {\r\n value = null;\r\n }\r\n}\r\n\r\nlet numberText = value === null || value === undefined\r\n ? \"\" : value.toString();\r\n\r\n\r\n</script>\r\n\r\n<div class=\"container\">\r\n <div class=\"label\">{label}</div>\r\n <input class=\"control\" type=\"text\" value={value} on:change={inputChanged} >\r\n</div>\r\n\r\n<style>\r\n\r\n.container {\r\n display: grid;\r\n grid-template-columns: [label] 100px [control] auto;\r\n margin: 20px 0px;\r\n}\r\n.label {\r\n grid-column-start: label;\r\n align-self: center;\r\n}\r\n.control {\r\n grid-column-start: control;\r\n align-self: center;\r\n margin: 0;\r\n}\r\n\r\ninput {\r\n width:300px;\r\n}\r\n\r\n</style>","<script>\r\nimport {join} from \"lodash/fp\";\r\n\r\nexport let values;\r\nexport let label;\r\n\r\nconst inputChanged = ev => {\r\n try {\r\n values = ev.target.value.split(\"\\n\");\r\n } catch(_) {\r\n values = [];\r\n }\r\n}\r\n\r\n$: valuesText = join(\"\\n\")(values);\r\n\r\n\r\n</script>\r\n\r\n<div class=\"container\">\r\n <div class=\"label\">{label}</div>\r\n <textarea class=\"control\" value={valuesText} on:change={inputChanged} ></textarea>\r\n</div>\r\n\r\n<style>\r\n\r\n.container {\r\n display: grid;\r\n grid-template-columns: [label] 100px [control] auto;\r\n margin: 20px 0px;\r\n}\r\n.label {\r\n grid-column-start: label;\r\n align-self: center;\r\n}\r\n.control {\r\n grid-column-start: control;\r\n align-self: center;\r\n margin: 0;\r\n}\r\n\r\ntextarea {\r\n width:300px;\r\n height:200px;\r\n}\r\n\r\n</style>","<script>\r\nexport let errors = [];\r\n\r\n$:hasErrors = errors.length > 0;\r\n</script>\r\n\r\n{#if hasErrors}\r\n<div class=\"error-container\">\r\n {#each errors as error}\r\n <div class=\"error-row\">{error.field ? `${error.field}: ` : \"\"}{error.error}</div>\r\n {/each}\r\n</div>\r\n{/if}\r\n\r\n<style>\r\n\r\n.error-container {\r\n padding:10px;\r\n border-style: solid;\r\n border-color: var(--deletion100);\r\n border-radius: var(--borderradiusall);\r\n background: var(--deletion75);\r\n}\r\n\r\n.error-row {\r\n padding: 5px 0px;\r\n}\r\n\r\n</style>","<script>\r\n\r\nexport let checked=false;\r\nexport let label=\"\";\r\n\r\n</script>\r\n\r\n<input class=\"uk-checkbox\" type=\"checkbox\" bind:checked on:change />{label}\r\n\r\n<style>\r\n\r\ninput {\r\n margin-right:7px;\r\n}\r\n\r\n</style>","/* flatpickr v4.6.1, @license MIT */\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n (global = global || self, global.flatpickr = factory());\n}(this, function () { 'use strict';\n\n /*! *****************************************************************************\r\n Copyright (c) Microsoft Corporation. All rights reserved.\r\n Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\n this file except in compliance with the License. You may obtain a copy of the\r\n License at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\n THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\n KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\n WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\n MERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\n See the Apache Version 2.0 License for specific language governing permissions\r\n and limitations under the License.\r\n ***************************************************************************** */\r\n\r\n var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n };\r\n return __assign.apply(this, arguments);\r\n };\n\n var HOOKS = [\n \"onChange\",\n \"onClose\",\n \"onDayCreate\",\n \"onDestroy\",\n \"onKeyDown\",\n \"onMonthChange\",\n \"onOpen\",\n \"onParseConfig\",\n \"onReady\",\n \"onValueUpdate\",\n \"onYearChange\",\n \"onPreCalendarPosition\",\n ];\n var defaults = {\n _disable: [],\n _enable: [],\n allowInput: false,\n altFormat: \"F j, Y\",\n altInput: false,\n altInputClass: \"form-control input\",\n animate: typeof window === \"object\" &&\n window.navigator.userAgent.indexOf(\"MSIE\") === -1,\n ariaDateFormat: \"F j, Y\",\n clickOpens: true,\n closeOnSelect: true,\n conjunction: \", \",\n dateFormat: \"Y-m-d\",\n defaultHour: 12,\n defaultMinute: 0,\n defaultSeconds: 0,\n disable: [],\n disableMobile: false,\n enable: [],\n enableSeconds: false,\n enableTime: false,\n errorHandler: function (err) {\n return typeof console !== \"undefined\" && console.warn(err);\n },\n getWeek: function (givenDate) {\n var date = new Date(givenDate.getTime());\n date.setHours(0, 0, 0, 0);\n // Thursday in current week decides the year.\n date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7));\n // January 4 is always in week 1.\n var week1 = new Date(date.getFullYear(), 0, 4);\n // Adjust to Thursday in week 1 and count number of weeks from date to week1.\n return (1 +\n Math.round(((date.getTime() - week1.getTime()) / 86400000 -\n 3 +\n ((week1.getDay() + 6) % 7)) /\n 7));\n },\n hourIncrement: 1,\n ignoredFocusElements: [],\n inline: false,\n locale: \"default\",\n minuteIncrement: 5,\n mode: \"single\",\n nextArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M13.207 8.472l-7.854 7.854-0.707-0.707 7.146-7.146-7.146-7.148 0.707-0.707 7.854 7.854z' /></svg>\",\n noCalendar: false,\n now: new Date(),\n onChange: [],\n onClose: [],\n onDayCreate: [],\n onDestroy: [],\n onKeyDown: [],\n onMonthChange: [],\n onOpen: [],\n onParseConfig: [],\n onReady: [],\n onValueUpdate: [],\n onYearChange: [],\n onPreCalendarPosition: [],\n plugins: [],\n position: \"auto\",\n positionElement: undefined,\n prevArrow: \"<svg version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' viewBox='0 0 17 17'><g></g><path d='M5.207 8.471l7.146 7.147-0.707 0.707-7.853-7.854 7.854-7.853 0.707 0.707-7.147 7.146z' /></svg>\",\n shorthandCurrentMonth: false,\n showMonths: 1,\n static: false,\n time_24hr: false,\n weekNumbers: false,\n wrap: false\n };\n\n var english = {\n weekdays: {\n shorthand: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n longhand: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ]\n },\n months: {\n shorthand: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n longhand: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ]\n },\n daysInMonth: [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],\n firstDayOfWeek: 0,\n ordinal: function (nth) {\n var s = nth % 100;\n if (s > 3 && s < 21)\n return \"th\";\n switch (s % 10) {\n case 1:\n return \"st\";\n case 2:\n return \"nd\";\n case 3:\n return \"rd\";\n default:\n return \"th\";\n }\n },\n rangeSeparator: \" to \",\n weekAbbreviation: \"Wk\",\n scrollTitle: \"Scroll to increment\",\n toggleTitle: \"Click to toggle\",\n amPM: [\"AM\", \"PM\"],\n yearAriaLabel: \"Year\",\n time_24hr: false\n };\n\n var pad = function (number) { return (\"0\" + number).slice(-2); };\n var int = function (bool) { return (bool === true ? 1 : 0); };\n /* istanbul ignore next */\n function debounce(func, wait, immediate) {\n if (immediate === void 0) { immediate = false; }\n var timeout;\n return function () {\n var context = this, args = arguments;\n timeout !== null && clearTimeout(timeout);\n timeout = window.setTimeout(function () {\n timeout = null;\n if (!immediate)\n func.apply(context, args);\n }, wait);\n if (immediate && !timeout)\n func.apply(context, args);\n };\n }\n var arrayify = function (obj) {\n return obj instanceof Array ? obj : [obj];\n };\n\n function toggleClass(elem, className, bool) {\n if (bool === true)\n return elem.classList.add(className);\n elem.classList.remove(className);\n }\n function createElement(tag, className, content) {\n var e = window.document.createElement(tag);\n className = className || \"\";\n content = content || \"\";\n e.className = className;\n if (content !== undefined)\n e.textContent = content;\n return e;\n }\n function clearNode(node) {\n while (node.firstChild)\n node.removeChild(node.firstChild);\n }\n function findParent(node, condition) {\n if (condition(node))\n return node;\n else if (node.parentNode)\n return findParent(node.parentNode, condition);\n return undefined; // nothing found\n }\n function createNumberInput(inputClassName, opts) {\n var wrapper = createElement(\"div\", \"numInputWrapper\"), numInput = createElement(\"input\", \"numInput \" + inputClassName), arrowUp = createElement(\"span\", \"arrowUp\"), arrowDown = createElement(\"span\", \"arrowDown\");\n if (navigator.userAgent.indexOf(\"MSIE 9.0\") === -1) {\n numInput.type = \"number\";\n }\n else {\n numInput.type = \"text\";\n numInput.pattern = \"\\\\d*\";\n }\n if (opts !== undefined)\n for (var key in opts)\n numInput.setAttribute(key, opts[key]);\n wrapper.appendChild(numInput);\n wrapper.appendChild(arrowUp);\n wrapper.appendChild(arrowDown);\n return wrapper;\n }\n function getEventTarget(event) {\n if (typeof event.composedPath === \"function\") {\n var path = event.composedPath();\n return path[0];\n }\n return event.target;\n }\n\n var doNothing = function () { return undefined; };\n var monthToStr = function (monthNumber, shorthand, locale) { return locale.months[shorthand ? \"shorthand\" : \"longhand\"][monthNumber]; };\n var revFormat = {\n D: doNothing,\n F: function (dateObj, monthName, locale) {\n dateObj.setMonth(locale.months.longhand.indexOf(monthName));\n },\n G: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n H: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n J: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n K: function (dateObj, amPM, locale) {\n dateObj.setHours((dateObj.getHours() % 12) +\n 12 * int(new RegExp(locale.amPM[1], \"i\").test(amPM)));\n },\n M: function (dateObj, shortMonth, locale) {\n dateObj.setMonth(locale.months.shorthand.indexOf(shortMonth));\n },\n S: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n U: function (_, unixSeconds) { return new Date(parseFloat(unixSeconds) * 1000); },\n W: function (dateObj, weekNum, locale) {\n var weekNumber = parseInt(weekNum);\n var date = new Date(dateObj.getFullYear(), 0, 2 + (weekNumber - 1) * 7, 0, 0, 0, 0);\n date.setDate(date.getDate() - date.getDay() + locale.firstDayOfWeek);\n return date;\n },\n Y: function (dateObj, year) {\n dateObj.setFullYear(parseFloat(year));\n },\n Z: function (_, ISODate) { return new Date(ISODate); },\n d: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n h: function (dateObj, hour) {\n dateObj.setHours(parseFloat(hour));\n },\n i: function (dateObj, minutes) {\n dateObj.setMinutes(parseFloat(minutes));\n },\n j: function (dateObj, day) {\n dateObj.setDate(parseFloat(day));\n },\n l: doNothing,\n m: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n n: function (dateObj, month) {\n dateObj.setMonth(parseFloat(month) - 1);\n },\n s: function (dateObj, seconds) {\n dateObj.setSeconds(parseFloat(seconds));\n },\n u: function (_, unixMillSeconds) {\n return new Date(parseFloat(unixMillSeconds));\n },\n w: doNothing,\n y: function (dateObj, year) {\n dateObj.setFullYear(2000 + parseFloat(year));\n }\n };\n var tokenRegex = {\n D: \"(\\\\w+)\",\n F: \"(\\\\w+)\",\n G: \"(\\\\d\\\\d|\\\\d)\",\n H: \"(\\\\d\\\\d|\\\\d)\",\n J: \"(\\\\d\\\\d|\\\\d)\\\\w+\",\n K: \"\",\n M: \"(\\\\w+)\",\n S: \"(\\\\d\\\\d|\\\\d)\",\n U: \"(.+)\",\n W: \"(\\\\d\\\\d|\\\\d)\",\n Y: \"(\\\\d{4})\",\n Z: \"(.+)\",\n d: \"(\\\\d\\\\d|\\\\d)\",\n h: \"(\\\\d\\\\d|\\\\d)\",\n i: \"(\\\\d\\\\d|\\\\d)\",\n j: \"(\\\\d\\\\d|\\\\d)\",\n l: \"(\\\\w+)\",\n m: \"(\\\\d\\\\d|\\\\d)\",\n n: \"(\\\\d\\\\d|\\\\d)\",\n s: \"(\\\\d\\\\d|\\\\d)\",\n u: \"(.+)\",\n w: \"(\\\\d\\\\d|\\\\d)\",\n y: \"(\\\\d{2})\"\n };\n var formats = {\n // get the date in UTC\n Z: function (date) { return date.toISOString(); },\n // weekday name, short, e.g. Thu\n D: function (date, locale, options) {\n return locale.weekdays.shorthand[formats.w(date, locale, options)];\n },\n // full month name e.g. January\n F: function (date, locale, options) {\n return monthToStr(formats.n(date, locale, options) - 1, false, locale);\n },\n // padded hour 1-12\n G: function (date, locale, options) {\n return pad(formats.h(date, locale, options));\n },\n // hours with leading zero e.g. 03\n H: function (date) { return pad(date.getHours()); },\n // day (1-30) with ordinal suffix e.g. 1st, 2nd\n J: function (date, locale) {\n return locale.ordinal !== undefined\n ? date.getDate() + locale.ordinal(date.getDate())\n : date.getDate();\n },\n // AM/PM\n K: function (date, locale) { return locale.amPM[int(date.getHours() > 11)]; },\n // shorthand month e.g. Jan, Sep, Oct, etc\n M: function (date, locale) {\n return monthToStr(date.getMonth(), true, locale);\n },\n // seconds 00-59\n S: function (date) { return pad(date.getSeconds()); },\n // unix timestamp\n U: function (date) { return date.getTime() / 1000; },\n W: function (date, _, options) {\n return options.getWeek(date);\n },\n // full year e.g. 2016\n Y: function (date) { return date.getFullYear(); },\n // day in month, padded (01-30)\n d: function (date) { return pad(date.getDate()); },\n // hour from 1-12 (am/pm)\n h: function (date) { return (date.getHours() % 12 ? date.getHours() % 12 : 12); },\n // minutes, padded with leading zero e.g. 09\n i: function (date) { return pad(date.getMinutes()); },\n // day in month (1-30)\n j: function (date) { return date.getDate(); },\n // weekday name, full, e.g. Thursday\n l: function (date, locale) {\n return locale.weekdays.longhand[date.getDay()];\n },\n // padded month number (01-12)\n m: function (date) { return pad(date.getMonth() + 1); },\n // the month number (1-12)\n n: function (date) { return date.getMonth() + 1; },\n // seconds 0-59\n s: function (date) { return date.getSeconds(); },\n // Unix Milliseconds\n u: function (date) { return date.getTime(); },\n // number of the day of the week\n w: function (date) { return date.getDay(); },\n // last two digits of year e.g. 16 for 2016\n y: function (date) { return String(date.getFullYear()).substring(2); }\n };\n\n var createDateFormatter = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (dateObj, frmt, overrideLocale) {\n var locale = overrideLocale || l10n;\n if (config.formatDate !== undefined) {\n return config.formatDate(dateObj, frmt, locale);\n }\n return frmt\n .split(\"\")\n .map(function (c, i, arr) {\n return formats[c] && arr[i - 1] !== \"\\\\\"\n ? formats[c](dateObj, locale, config)\n : c !== \"\\\\\"\n ? c\n : \"\";\n })\n .join(\"\");\n };\n };\n var createDateParser = function (_a) {\n var _b = _a.config, config = _b === void 0 ? defaults : _b, _c = _a.l10n, l10n = _c === void 0 ? english : _c;\n return function (date, givenFormat, timeless, customLocale) {\n if (date !== 0 && !date)\n return undefined;\n var locale = customLocale || l10n;\n var parsedDate;\n var dateOrig = date;\n if (date instanceof Date)\n parsedDate = new Date(date.getTime());\n else if (typeof date !== \"string\" &&\n date.toFixed !== undefined // timestamp\n )\n // create a copy\n parsedDate = new Date(date);\n else if (typeof date === \"string\") {\n // date string\n var format = givenFormat || (config || defaults).dateFormat;\n var datestr = String(date).trim();\n if (datestr === \"today\") {\n parsedDate = new Date();\n timeless = true;\n }\n else if (/Z$/.test(datestr) ||\n /GMT$/.test(datestr) // datestrings w/ timezone\n )\n parsedDate = new Date(date);\n else if (config && config.parseDate)\n parsedDate = config.parseDate(date, format);\n else {\n parsedDate =\n !config || !config.noCalendar\n ? new Date(new Date().getFullYear(), 0, 1, 0, 0, 0, 0)\n : new Date(new Date().setHours(0, 0, 0, 0));\n var matched = void 0, ops = [];\n for (var i = 0, matchIndex = 0, regexStr = \"\"; i < format.length; i++) {\n var token_1 = format[i];\n var isBackSlash = token_1 === \"\\\\\";\n var escaped = format[i - 1] === \"\\\\\" || isBackSlash;\n if (tokenRegex[token_1] && !escaped) {\n regexStr += tokenRegex[token_1];\n var match = new RegExp(regexStr).exec(date);\n if (match && (matched = true)) {\n ops[token_1 !== \"Y\" ? \"push\" : \"unshift\"]({\n fn: revFormat[token_1],\n val: match[++matchIndex]\n });\n }\n }\n else if (!isBackSlash)\n regexStr += \".\"; // don't really care\n ops.forEach(function (_a) {\n var fn = _a.fn, val = _a.val;\n return (parsedDate = fn(parsedDate, val, locale) || parsedDate);\n });\n }\n parsedDate = matched ? parsedDate : undefined;\n }\n }\n /* istanbul ignore next */\n if (!(parsedDate instanceof Date && !isNaN(parsedDate.getTime()))) {\n config.errorHandler(new Error(\"Invalid date provided: \" + dateOrig));\n return undefined;\n }\n if (timeless === true)\n parsedDate.setHours(0, 0, 0, 0);\n return parsedDate;\n };\n };\n /**\n * Compute the difference in dates, measured in ms\n */\n function compareDates(date1, date2, timeless) {\n if (timeless === void 0) { timeless = true; }\n if (timeless !== false) {\n return (new Date(date1.getTime()).setHours(0, 0, 0, 0) -\n new Date(date2.getTime()).setHours(0, 0, 0, 0));\n }\n return date1.getTime() - date2.getTime();\n }\n var isBetween = function (ts, ts1, ts2) {\n return ts > Math.min(ts1, ts2) && ts < Math.max(ts1, ts2);\n };\n var duration = {\n DAY: 86400000\n };\n\n if (typeof Object.assign !== \"function\") {\n Object.assign = function (target) {\n var args = [];\n for (var _i = 1; _i < arguments.length; _i++) {\n args[_i - 1] = arguments[_i];\n }\n if (!target) {\n throw TypeError(\"Cannot convert undefined or null to object\");\n }\n var _loop_1 = function (source) {\n if (source) {\n Object.keys(source).forEach(function (key) { return (target[key] = source[key]); });\n }\n };\n for (var _a = 0, args_1 = args; _a < args_1.length; _a++) {\n var source = args_1[_a];\n _loop_1(source);\n }\n return target;\n };\n }\n\n var DEBOUNCED_CHANGE_MS = 300;\n function FlatpickrInstance(element, instanceConfig) {\n var self = {\n config: __assign({}, defaults, flatpickr.defaultConfig),\n l10n: english\n };\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n self._handlers = [];\n self.pluginElements = [];\n self.loadedPlugins = [];\n self._bind = bind;\n self._setHoursFromDate = setHoursFromDate;\n self._positionCalendar = positionCalendar;\n self.changeMonth = changeMonth;\n self.changeYear = changeYear;\n self.clear = clear;\n self.close = close;\n self._createElement = createElement;\n self.destroy = destroy;\n self.isEnabled = isEnabled;\n self.jumpToDate = jumpToDate;\n self.open = open;\n self.redraw = redraw;\n self.set = set;\n self.setDate = setDate;\n self.toggle = toggle;\n function setupHelperFunctions() {\n self.utils = {\n getDaysInMonth: function (month, yr) {\n if (month === void 0) { month = self.currentMonth; }\n if (yr === void 0) { yr = self.currentYear; }\n if (month === 1 && ((yr % 4 === 0 && yr % 100 !== 0) || yr % 400 === 0))\n return 29;\n return self.l10n.daysInMonth[month];\n }\n };\n }\n function init() {\n self.element = self.input = element;\n self.isOpen = false;\n parseConfig();\n setupLocale();\n setupInputs();\n setupDates();\n setupHelperFunctions();\n if (!self.isMobile)\n build();\n bindEvents();\n if (self.selectedDates.length || self.config.noCalendar) {\n if (self.config.enableTime) {\n setHoursFromDate(self.config.noCalendar\n ? self.latestSelectedDateObj || self.config.minDate\n : undefined);\n }\n updateValue(false);\n }\n setCalendarWidth();\n self.showTimeInput =\n self.selectedDates.length > 0 || self.config.noCalendar;\n var isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n /* TODO: investigate this further\n \n Currently, there is weird positioning behavior in safari causing pages\n to scroll up. https://github.com/chmln/flatpickr/issues/563\n \n However, most browsers are not Safari and positioning is expensive when used\n in scale. https://github.com/chmln/flatpickr/issues/1096\n */\n if (!self.isMobile && isSafari) {\n positionCalendar();\n }\n triggerEvent(\"onReady\");\n }\n function bindToInstance(fn) {\n return fn.bind(self);\n }\n function setCalendarWidth() {\n var config = self.config;\n if (config.weekNumbers === false && config.showMonths === 1)\n return;\n else if (config.noCalendar !== true) {\n window.requestAnimationFrame(function () {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.style.visibility = \"hidden\";\n self.calendarContainer.style.display = \"block\";\n }\n if (self.daysContainer !== undefined) {\n var daysWidth = (self.days.offsetWidth + 1) * config.showMonths;\n self.daysContainer.style.width = daysWidth + \"px\";\n self.calendarContainer.style.width =\n daysWidth +\n (self.weekWrapper !== undefined\n ? self.weekWrapper.offsetWidth\n : 0) +\n \"px\";\n self.calendarContainer.style.removeProperty(\"visibility\");\n self.calendarContainer.style.removeProperty(\"display\");\n }\n });\n }\n }\n /**\n * The handler for all events targeting the time inputs\n */\n function updateTime(e) {\n if (self.selectedDates.length === 0) {\n setDefaultTime();\n }\n if (e !== undefined && e.type !== \"blur\") {\n timeWrapper(e);\n }\n var prevValue = self._input.value;\n setHoursFromInputs();\n updateValue();\n if (self._input.value !== prevValue) {\n self._debouncedChange();\n }\n }\n function ampm2military(hour, amPM) {\n return (hour % 12) + 12 * int(amPM === self.l10n.amPM[1]);\n }\n function military2ampm(hour) {\n switch (hour % 24) {\n case 0:\n case 12:\n return 12;\n default:\n return hour % 12;\n }\n }\n /**\n * Syncs the selected date object time with user's time input\n */\n function setHoursFromInputs() {\n if (self.hourElement === undefined || self.minuteElement === undefined)\n return;\n var hours = (parseInt(self.hourElement.value.slice(-2), 10) || 0) % 24, minutes = (parseInt(self.minuteElement.value, 10) || 0) % 60, seconds = self.secondElement !== undefined\n ? (parseInt(self.secondElement.value, 10) || 0) % 60\n : 0;\n if (self.amPM !== undefined) {\n hours = ampm2military(hours, self.amPM.textContent);\n }\n var limitMinHours = self.config.minTime !== undefined ||\n (self.config.minDate &&\n self.minDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.minDate, true) ===\n 0);\n var limitMaxHours = self.config.maxTime !== undefined ||\n (self.config.maxDate &&\n self.maxDateHasTime &&\n self.latestSelectedDateObj &&\n compareDates(self.latestSelectedDateObj, self.config.maxDate, true) ===\n 0);\n if (limitMaxHours) {\n var maxTime = self.config.maxTime !== undefined\n ? self.config.maxTime\n : self.config.maxDate;\n hours = Math.min(hours, maxTime.getHours());\n if (hours === maxTime.getHours())\n minutes = Math.min(minutes, maxTime.getMinutes());\n if (minutes === maxTime.getMinutes())\n seconds = Math.min(seconds, maxTime.getSeconds());\n }\n if (limitMinHours) {\n var minTime = self.config.minTime !== undefined\n ? self.config.minTime\n : self.config.minDate;\n hours = Math.max(hours, minTime.getHours());\n if (hours === minTime.getHours())\n minutes = Math.max(minutes, minTime.getMinutes());\n if (minutes === minTime.getMinutes())\n seconds = Math.max(seconds, minTime.getSeconds());\n }\n setHours(hours, minutes, seconds);\n }\n /**\n * Syncs time input values with a date\n */\n function setHoursFromDate(dateObj) {\n var date = dateObj || self.latestSelectedDateObj;\n if (date)\n setHours(date.getHours(), date.getMinutes(), date.getSeconds());\n }\n function setDefaultHours() {\n var hours = self.config.defaultHour;\n var minutes = self.config.defaultMinute;\n var seconds = self.config.defaultSeconds;\n if (self.config.minDate !== undefined) {\n var minHr = self.config.minDate.getHours();\n var minMinutes = self.config.minDate.getMinutes();\n hours = Math.max(hours, minHr);\n if (hours === minHr)\n minutes = Math.max(minMinutes, minutes);\n if (hours === minHr && minutes === minMinutes)\n seconds = self.config.minDate.getSeconds();\n }\n if (self.config.maxDate !== undefined) {\n var maxHr = self.config.maxDate.getHours();\n var maxMinutes = self.config.maxDate.getMinutes();\n hours = Math.min(hours, maxHr);\n if (hours === maxHr)\n minutes = Math.min(maxMinutes, minutes);\n if (hours === maxHr && minutes === maxMinutes)\n seconds = self.config.maxDate.getSeconds();\n }\n setHours(hours, minutes, seconds);\n }\n /**\n * Sets the hours, minutes, and optionally seconds\n * of the latest selected date object and the\n * corresponding time inputs\n * @param {Number} hours the hour. whether its military\n * or am-pm gets inferred from config\n * @param {Number} minutes the minutes\n * @param {Number} seconds the seconds (optional)\n */\n function setHours(hours, minutes, seconds) {\n if (self.latestSelectedDateObj !== undefined) {\n self.latestSelectedDateObj.setHours(hours % 24, minutes, seconds || 0, 0);\n }\n if (!self.hourElement || !self.minuteElement || self.isMobile)\n return;\n self.hourElement.value = pad(!self.config.time_24hr\n ? ((12 + hours) % 12) + 12 * int(hours % 12 === 0)\n : hours);\n self.minuteElement.value = pad(minutes);\n if (self.amPM !== undefined)\n self.amPM.textContent = self.l10n.amPM[int(hours >= 12)];\n if (self.secondElement !== undefined)\n self.secondElement.value = pad(seconds);\n }\n /**\n * Handles the year input and incrementing events\n * @param {Event} event the keyup or increment event\n */\n function onYearInput(event) {\n var year = parseInt(event.target.value) + (event.delta || 0);\n if (year / 1000 > 1 ||\n (event.key === \"Enter\" && !/[^\\d]/.test(year.toString()))) {\n changeYear(year);\n }\n }\n /**\n * Essentially addEventListener + tracking\n * @param {Element} element the element to addEventListener to\n * @param {String} event the event name\n * @param {Function} handler the event handler\n */\n function bind(element, event, handler, options) {\n if (event instanceof Array)\n return event.forEach(function (ev) { return bind(element, ev, handler, options); });\n if (element instanceof Array)\n return element.forEach(function (el) { return bind(el, event, handler, options); });\n element.addEventListener(event, handler, options);\n self._handlers.push({\n element: element,\n event: event,\n handler: handler,\n options: options\n });\n }\n /**\n * A mousedown handler which mimics click.\n * Minimizes latency, since we don't need to wait for mouseup in most cases.\n * Also, avoids handling right clicks.\n *\n * @param {Function} handler the event handler\n */\n function onClick(handler) {\n return function (evt) {\n evt.which === 1 && handler(evt);\n };\n }\n function triggerChange() {\n triggerEvent(\"onChange\");\n }\n /**\n * Adds all the necessary event listeners\n */\n function bindEvents() {\n if (self.config.wrap) {\n [\"open\", \"close\", \"toggle\", \"clear\"].forEach(function (evt) {\n Array.prototype.forEach.call(self.element.querySelectorAll(\"[data-\" + evt + \"]\"), function (el) {\n return bind(el, \"click\", self[evt]);\n });\n });\n }\n if (self.isMobile) {\n setupMobile();\n return;\n }\n var debouncedResize = debounce(onResize, 50);\n self._debouncedChange = debounce(triggerChange, DEBOUNCED_CHANGE_MS);\n if (self.daysContainer && !/iPhone|iPad|iPod/i.test(navigator.userAgent))\n bind(self.daysContainer, \"mouseover\", function (e) {\n if (self.config.mode === \"range\")\n onMouseOver(e.target);\n });\n bind(window.document.body, \"keydown\", onKeyDown);\n if (!self.config.inline && !self.config.static)\n bind(window, \"resize\", debouncedResize);\n if (window.ontouchstart !== undefined)\n bind(window.document, \"touchstart\", documentClick);\n else\n bind(window.document, \"mousedown\", onClick(documentClick));\n bind(window.document, \"focus\", documentClick, { capture: true });\n if (self.config.clickOpens === true) {\n bind(self._input, \"focus\", self.open);\n bind(self._input, \"mousedown\", onClick(self.open));\n }\n if (self.daysContainer !== undefined) {\n bind(self.monthNav, \"mousedown\", onClick(onMonthNavClick));\n bind(self.monthNav, [\"keyup\", \"increment\"], onYearInput);\n bind(self.daysContainer, \"mousedown\", onClick(selectDate));\n }\n if (self.timeContainer !== undefined &&\n self.minuteElement !== undefined &&\n self.hourElement !== undefined) {\n var selText = function (e) {\n return e.target.select();\n };\n bind(self.timeContainer, [\"increment\"], updateTime);\n bind(self.timeContainer, \"blur\", updateTime, { capture: true });\n bind(self.timeContainer, \"mousedown\", onClick(timeIncrement));\n bind([self.hourElement, self.minuteElement], [\"focus\", \"click\"], selText);\n if (self.secondElement !== undefined)\n bind(self.secondElement, \"focus\", function () { return self.secondElement && self.secondElement.select(); });\n if (self.amPM !== undefined) {\n bind(self.amPM, \"mousedown\", onClick(function (e) {\n updateTime(e);\n triggerChange();\n }));\n }\n }\n }\n /**\n * Set the calendar view to a particular date.\n * @param {Date} jumpDate the date to set the view to\n * @param {boolean} triggerChange if change events should be triggered\n */\n function jumpToDate(jumpDate, triggerChange) {\n var jumpTo = jumpDate !== undefined\n ? self.parseDate(jumpDate)\n : self.latestSelectedDateObj ||\n (self.config.minDate && self.config.minDate > self.now\n ? self.config.minDate\n : self.config.maxDate && self.config.maxDate < self.now\n ? self.config.maxDate\n : self.now);\n var oldYear = self.currentYear;\n var oldMonth = self.currentMonth;\n try {\n if (jumpTo !== undefined) {\n self.currentYear = jumpTo.getFullYear();\n self.currentMonth = jumpTo.getMonth();\n }\n }\n catch (e) {\n /* istanbul ignore next */\n e.message = \"Invalid date supplied: \" + jumpTo;\n self.config.errorHandler(e);\n }\n if (triggerChange && self.currentYear !== oldYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n if (triggerChange &&\n (self.currentYear !== oldYear || self.currentMonth !== oldMonth)) {\n triggerEvent(\"onMonthChange\");\n }\n self.redraw();\n }\n /**\n * The up/down arrow handler for time inputs\n * @param {Event} e the click event\n */\n function timeIncrement(e) {\n if (~e.target.className.indexOf(\"arrow\"))\n incrementNumInput(e, e.target.classList.contains(\"arrowUp\") ? 1 : -1);\n }\n /**\n * Increments/decrements the value of input associ-\n * ated with the up/down arrow by dispatching an\n * \"increment\" event on the input.\n *\n * @param {Event} e the click event\n * @param {Number} delta the diff (usually 1 or -1)\n * @param {Element} inputElem the input element\n */\n function incrementNumInput(e, delta, inputElem) {\n var target = e && e.target;\n var input = inputElem ||\n (target && target.parentNode && target.parentNode.firstChild);\n var event = createEvent(\"increment\");\n event.delta = delta;\n input && input.dispatchEvent(event);\n }\n function build() {\n var fragment = window.document.createDocumentFragment();\n self.calendarContainer = createElement(\"div\", \"flatpickr-calendar\");\n self.calendarContainer.tabIndex = -1;\n if (!self.config.noCalendar) {\n fragment.appendChild(buildMonthNav());\n self.innerContainer = createElement(\"div\", \"flatpickr-innerContainer\");\n if (self.config.weekNumbers) {\n var _a = buildWeeks(), weekWrapper = _a.weekWrapper, weekNumbers = _a.weekNumbers;\n self.innerContainer.appendChild(weekWrapper);\n self.weekNumbers = weekNumbers;\n self.weekWrapper = weekWrapper;\n }\n self.rContainer = createElement(\"div\", \"flatpickr-rContainer\");\n self.rContainer.appendChild(buildWeekdays());\n if (!self.daysContainer) {\n self.daysContainer = createElement(\"div\", \"flatpickr-days\");\n self.daysContainer.tabIndex = -1;\n }\n buildDays();\n self.rContainer.appendChild(self.daysContainer);\n self.innerContainer.appendChild(self.rContainer);\n fragment.appendChild(self.innerContainer);\n }\n if (self.config.enableTime) {\n fragment.appendChild(buildTime());\n }\n toggleClass(self.calendarContainer, \"rangeMode\", self.config.mode === \"range\");\n toggleClass(self.calendarContainer, \"animate\", self.config.animate === true);\n toggleClass(self.calendarContainer, \"multiMonth\", self.config.showMonths > 1);\n self.calendarContainer.appendChild(fragment);\n var customAppend = self.config.appendTo !== undefined &&\n self.config.appendTo.nodeType !== undefined;\n if (self.config.inline || self.config.static) {\n self.calendarContainer.classList.add(self.config.inline ? \"inline\" : \"static\");\n if (self.config.inline) {\n if (!customAppend && self.element.parentNode)\n self.element.parentNode.insertBefore(self.calendarContainer, self._input.nextSibling);\n else if (self.config.appendTo !== undefined)\n self.config.appendTo.appendChild(self.calendarContainer);\n }\n if (self.config.static) {\n var wrapper = createElement(\"div\", \"flatpickr-wrapper\");\n if (self.element.parentNode)\n self.element.parentNode.insertBefore(wrapper, self.element);\n wrapper.appendChild(self.element);\n if (self.altInput)\n wrapper.appendChild(self.altInput);\n wrapper.appendChild(self.calendarContainer);\n }\n }\n if (!self.config.static && !self.config.inline)\n (self.config.appendTo !== undefined\n ? self.config.appendTo\n : window.document.body).appendChild(self.calendarContainer);\n }\n function createDay(className, date, dayNumber, i) {\n var dateIsEnabled = isEnabled(date, true), dayElement = createElement(\"span\", \"flatpickr-day \" + className, date.getDate().toString());\n dayElement.dateObj = date;\n dayElement.$i = i;\n dayElement.setAttribute(\"aria-label\", self.formatDate(date, self.config.ariaDateFormat));\n if (className.indexOf(\"hidden\") === -1 &&\n compareDates(date, self.now) === 0) {\n self.todayDateElem = dayElement;\n dayElement.classList.add(\"today\");\n dayElement.setAttribute(\"aria-current\", \"date\");\n }\n if (dateIsEnabled) {\n dayElement.tabIndex = -1;\n if (isDateSelected(date)) {\n dayElement.classList.add(\"selected\");\n self.selectedDateElem = dayElement;\n if (self.config.mode === \"range\") {\n toggleClass(dayElement, \"startRange\", self.selectedDates[0] &&\n compareDates(date, self.selectedDates[0], true) === 0);\n toggleClass(dayElement, \"endRange\", self.selectedDates[1] &&\n compareDates(date, self.selectedDates[1], true) === 0);\n if (className === \"nextMonthDay\")\n dayElement.classList.add(\"inRange\");\n }\n }\n }\n else {\n dayElement.classList.add(\"flatpickr-disabled\");\n }\n if (self.config.mode === \"range\") {\n if (isDateInRange(date) && !isDateSelected(date))\n dayElement.classList.add(\"inRange\");\n }\n if (self.weekNumbers &&\n self.config.showMonths === 1 &&\n className !== \"prevMonthDay\" &&\n dayNumber % 7 === 1) {\n self.weekNumbers.insertAdjacentHTML(\"beforeend\", \"<span class='flatpickr-day'>\" + self.config.getWeek(date) + \"</span>\");\n }\n triggerEvent(\"onDayCreate\", dayElement);\n return dayElement;\n }\n function focusOnDayElem(targetNode) {\n targetNode.focus();\n if (self.config.mode === \"range\")\n onMouseOver(targetNode);\n }\n function getFirstAvailableDay(delta) {\n var startMonth = delta > 0 ? 0 : self.config.showMonths - 1;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n for (var m = startMonth; m != endMonth; m += delta) {\n var month = self.daysContainer.children[m];\n var startIndex = delta > 0 ? 0 : month.children.length - 1;\n var endIndex = delta > 0 ? month.children.length : -1;\n for (var i = startIndex; i != endIndex; i += delta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 && isEnabled(c.dateObj))\n return c;\n }\n }\n return undefined;\n }\n function getNextAvailableDay(current, delta) {\n var givenMonth = current.className.indexOf(\"Month\") === -1\n ? current.dateObj.getMonth()\n : self.currentMonth;\n var endMonth = delta > 0 ? self.config.showMonths : -1;\n var loopDelta = delta > 0 ? 1 : -1;\n for (var m = givenMonth - self.currentMonth; m != endMonth; m += loopDelta) {\n var month = self.daysContainer.children[m];\n var startIndex = givenMonth - self.currentMonth === m\n ? current.$i + delta\n : delta < 0\n ? month.children.length - 1\n : 0;\n var numMonthDays = month.children.length;\n for (var i = startIndex; i >= 0 && i < numMonthDays && i != (delta > 0 ? numMonthDays : -1); i += loopDelta) {\n var c = month.children[i];\n if (c.className.indexOf(\"hidden\") === -1 &&\n isEnabled(c.dateObj) &&\n Math.abs(current.$i - i) >= Math.abs(delta))\n return focusOnDayElem(c);\n }\n }\n self.changeMonth(loopDelta);\n focusOnDay(getFirstAvailableDay(loopDelta), 0);\n return undefined;\n }\n function focusOnDay(current, offset) {\n var dayFocused = isInView(document.activeElement || document.body);\n var startElem = current !== undefined\n ? current\n : dayFocused\n ? document.activeElement\n : self.selectedDateElem !== undefined && isInView(self.selectedDateElem)\n ? self.selectedDateElem\n : self.todayDateElem !== undefined && isInView(self.todayDateElem)\n ? self.todayDateElem\n : getFirstAvailableDay(offset > 0 ? 1 : -1);\n if (startElem === undefined)\n return self._input.focus();\n if (!dayFocused)\n return focusOnDayElem(startElem);\n getNextAvailableDay(startElem, offset);\n }\n function buildMonthDays(year, month) {\n var firstOfMonth = (new Date(year, month, 1).getDay() - self.l10n.firstDayOfWeek + 7) % 7;\n var prevMonthDays = self.utils.getDaysInMonth((month - 1 + 12) % 12);\n var daysInMonth = self.utils.getDaysInMonth(month), days = window.document.createDocumentFragment(), isMultiMonth = self.config.showMonths > 1, prevMonthDayClass = isMultiMonth ? \"prevMonthDay hidden\" : \"prevMonthDay\", nextMonthDayClass = isMultiMonth ? \"nextMonthDay hidden\" : \"nextMonthDay\";\n var dayNumber = prevMonthDays + 1 - firstOfMonth, dayIndex = 0;\n // prepend days from the ending of previous month\n for (; dayNumber <= prevMonthDays; dayNumber++, dayIndex++) {\n days.appendChild(createDay(prevMonthDayClass, new Date(year, month - 1, dayNumber), dayNumber, dayIndex));\n }\n // Start at 1 since there is no 0th day\n for (dayNumber = 1; dayNumber <= daysInMonth; dayNumber++, dayIndex++) {\n days.appendChild(createDay(\"\", new Date(year, month, dayNumber), dayNumber, dayIndex));\n }\n // append days from the next month\n for (var dayNum = daysInMonth + 1; dayNum <= 42 - firstOfMonth &&\n (self.config.showMonths === 1 || dayIndex % 7 !== 0); dayNum++, dayIndex++) {\n days.appendChild(createDay(nextMonthDayClass, new Date(year, month + 1, dayNum % daysInMonth), dayNum, dayIndex));\n }\n //updateNavigationCurrentMonth();\n var dayContainer = createElement(\"div\", \"dayContainer\");\n dayContainer.appendChild(days);\n return dayContainer;\n }\n function buildDays() {\n if (self.daysContainer === undefined) {\n return;\n }\n clearNode(self.daysContainer);\n // TODO: week numbers for each month\n if (self.weekNumbers)\n clearNode(self.weekNumbers);\n var frag = document.createDocumentFragment();\n for (var i = 0; i < self.config.showMonths; i++) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n frag.appendChild(buildMonthDays(d.getFullYear(), d.getMonth()));\n }\n self.daysContainer.appendChild(frag);\n self.days = self.daysContainer.firstChild;\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n onMouseOver();\n }\n }\n function buildMonthSwitch() {\n if (self.config.showMonths > 1)\n return;\n var shouldBuildMonth = function (month) {\n if (self.config.minDate !== undefined &&\n self.currentYear === self.config.minDate.getFullYear() &&\n month < self.config.minDate.getMonth()) {\n return false;\n }\n return !(self.config.maxDate !== undefined &&\n self.currentYear === self.config.maxDate.getFullYear() &&\n month > self.config.maxDate.getMonth());\n };\n self.monthsDropdownContainer.tabIndex = -1;\n self.monthsDropdownContainer.innerHTML = \"\";\n for (var i = 0; i < 12; i++) {\n if (!shouldBuildMonth(i))\n continue;\n var month = createElement(\"option\", \"flatpickr-monthDropdown-month\");\n month.value = new Date(self.currentYear, i).getMonth().toString();\n month.textContent = monthToStr(i, false, self.l10n);\n month.tabIndex = -1;\n if (self.currentMonth === i) {\n month.selected = true;\n }\n self.monthsDropdownContainer.appendChild(month);\n }\n }\n function buildMonth() {\n var container = createElement(\"div\", \"flatpickr-month\");\n var monthNavFragment = window.document.createDocumentFragment();\n var monthElement;\n if (self.config.showMonths > 1) {\n monthElement = createElement(\"span\", \"cur-month\");\n }\n else {\n self.monthsDropdownContainer = createElement(\"select\", \"flatpickr-monthDropdown-months\");\n bind(self.monthsDropdownContainer, \"change\", function (e) {\n var target = e.target;\n var selectedMonth = parseInt(target.value, 10);\n self.changeMonth(selectedMonth - self.currentMonth);\n triggerEvent(\"onMonthChange\");\n });\n buildMonthSwitch();\n monthElement = self.monthsDropdownContainer;\n }\n var yearInput = createNumberInput(\"cur-year\", { tabindex: \"-1\" });\n var yearElement = yearInput.getElementsByTagName(\"input\")[0];\n yearElement.setAttribute(\"aria-label\", self.l10n.yearAriaLabel);\n if (self.config.minDate) {\n yearElement.setAttribute(\"min\", self.config.minDate.getFullYear().toString());\n }\n if (self.config.maxDate) {\n yearElement.setAttribute(\"max\", self.config.maxDate.getFullYear().toString());\n yearElement.disabled =\n !!self.config.minDate &&\n self.config.minDate.getFullYear() === self.config.maxDate.getFullYear();\n }\n var currentMonth = createElement(\"div\", \"flatpickr-current-month\");\n currentMonth.appendChild(monthElement);\n currentMonth.appendChild(yearInput);\n monthNavFragment.appendChild(currentMonth);\n container.appendChild(monthNavFragment);\n return {\n container: container,\n yearElement: yearElement,\n monthElement: monthElement\n };\n }\n function buildMonths() {\n clearNode(self.monthNav);\n self.monthNav.appendChild(self.prevMonthNav);\n if (self.config.showMonths) {\n self.yearElements = [];\n self.monthElements = [];\n }\n for (var m = self.config.showMonths; m--;) {\n var month = buildMonth();\n self.yearElements.push(month.yearElement);\n self.monthElements.push(month.monthElement);\n self.monthNav.appendChild(month.container);\n }\n self.monthNav.appendChild(self.nextMonthNav);\n }\n function buildMonthNav() {\n self.monthNav = createElement(\"div\", \"flatpickr-months\");\n self.yearElements = [];\n self.monthElements = [];\n self.prevMonthNav = createElement(\"span\", \"flatpickr-prev-month\");\n self.prevMonthNav.innerHTML = self.config.prevArrow;\n self.nextMonthNav = createElement(\"span\", \"flatpickr-next-month\");\n self.nextMonthNav.innerHTML = self.config.nextArrow;\n buildMonths();\n Object.defineProperty(self, \"_hidePrevMonthArrow\", {\n get: function () { return self.__hidePrevMonthArrow; },\n set: function (bool) {\n if (self.__hidePrevMonthArrow !== bool) {\n toggleClass(self.prevMonthNav, \"flatpickr-disabled\", bool);\n self.__hidePrevMonthArrow = bool;\n }\n }\n });\n Object.defineProperty(self, \"_hideNextMonthArrow\", {\n get: function () { return self.__hideNextMonthArrow; },\n set: function (bool) {\n if (self.__hideNextMonthArrow !== bool) {\n toggleClass(self.nextMonthNav, \"flatpickr-disabled\", bool);\n self.__hideNextMonthArrow = bool;\n }\n }\n });\n self.currentYearElement = self.yearElements[0];\n updateNavigationCurrentMonth();\n return self.monthNav;\n }\n function buildTime() {\n self.calendarContainer.classList.add(\"hasTime\");\n if (self.config.noCalendar)\n self.calendarContainer.classList.add(\"noCalendar\");\n self.timeContainer = createElement(\"div\", \"flatpickr-time\");\n self.timeContainer.tabIndex = -1;\n var separator = createElement(\"span\", \"flatpickr-time-separator\", \":\");\n var hourInput = createNumberInput(\"flatpickr-hour\");\n self.hourElement = hourInput.getElementsByTagName(\"input\")[0];\n var minuteInput = createNumberInput(\"flatpickr-minute\");\n self.minuteElement = minuteInput.getElementsByTagName(\"input\")[0];\n self.hourElement.tabIndex = self.minuteElement.tabIndex = -1;\n self.hourElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getHours()\n : self.config.time_24hr\n ? self.config.defaultHour\n : military2ampm(self.config.defaultHour));\n self.minuteElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getMinutes()\n : self.config.defaultMinute);\n self.hourElement.setAttribute(\"step\", self.config.hourIncrement.toString());\n self.minuteElement.setAttribute(\"step\", self.config.minuteIncrement.toString());\n self.hourElement.setAttribute(\"min\", self.config.time_24hr ? \"0\" : \"1\");\n self.hourElement.setAttribute(\"max\", self.config.time_24hr ? \"23\" : \"12\");\n self.minuteElement.setAttribute(\"min\", \"0\");\n self.minuteElement.setAttribute(\"max\", \"59\");\n self.timeContainer.appendChild(hourInput);\n self.timeContainer.appendChild(separator);\n self.timeContainer.appendChild(minuteInput);\n if (self.config.time_24hr)\n self.timeContainer.classList.add(\"time24hr\");\n if (self.config.enableSeconds) {\n self.timeContainer.classList.add(\"hasSeconds\");\n var secondInput = createNumberInput(\"flatpickr-second\");\n self.secondElement = secondInput.getElementsByTagName(\"input\")[0];\n self.secondElement.value = pad(self.latestSelectedDateObj\n ? self.latestSelectedDateObj.getSeconds()\n : self.config.defaultSeconds);\n self.secondElement.setAttribute(\"step\", self.minuteElement.getAttribute(\"step\"));\n self.secondElement.setAttribute(\"min\", \"0\");\n self.secondElement.setAttribute(\"max\", \"59\");\n self.timeContainer.appendChild(createElement(\"span\", \"flatpickr-time-separator\", \":\"));\n self.timeContainer.appendChild(secondInput);\n }\n if (!self.config.time_24hr) {\n // add self.amPM if appropriate\n self.amPM = createElement(\"span\", \"flatpickr-am-pm\", self.l10n.amPM[int((self.latestSelectedDateObj\n ? self.hourElement.value\n : self.config.defaultHour) > 11)]);\n self.amPM.title = self.l10n.toggleTitle;\n self.amPM.tabIndex = -1;\n self.timeContainer.appendChild(self.amPM);\n }\n return self.timeContainer;\n }\n function buildWeekdays() {\n if (!self.weekdayContainer)\n self.weekdayContainer = createElement(\"div\", \"flatpickr-weekdays\");\n else\n clearNode(self.weekdayContainer);\n for (var i = self.config.showMonths; i--;) {\n var container = createElement(\"div\", \"flatpickr-weekdaycontainer\");\n self.weekdayContainer.appendChild(container);\n }\n updateWeekdays();\n return self.weekdayContainer;\n }\n function updateWeekdays() {\n var firstDayOfWeek = self.l10n.firstDayOfWeek;\n var weekdays = self.l10n.weekdays.shorthand.slice();\n if (firstDayOfWeek > 0 && firstDayOfWeek < weekdays.length) {\n weekdays = weekdays.splice(firstDayOfWeek, weekdays.length).concat(weekdays.splice(0, firstDayOfWeek));\n }\n for (var i = self.config.showMonths; i--;) {\n self.weekdayContainer.children[i].innerHTML = \"\\n <span class='flatpickr-weekday'>\\n \" + weekdays.join(\"</span><span class='flatpickr-weekday'>\") + \"\\n </span>\\n \";\n }\n }\n /* istanbul ignore next */\n function buildWeeks() {\n self.calendarContainer.classList.add(\"hasWeeks\");\n var weekWrapper = createElement(\"div\", \"flatpickr-weekwrapper\");\n weekWrapper.appendChild(createElement(\"span\", \"flatpickr-weekday\", self.l10n.weekAbbreviation));\n var weekNumbers = createElement(\"div\", \"flatpickr-weeks\");\n weekWrapper.appendChild(weekNumbers);\n return {\n weekWrapper: weekWrapper,\n weekNumbers: weekNumbers\n };\n }\n function changeMonth(value, isOffset) {\n if (isOffset === void 0) { isOffset = true; }\n var delta = isOffset ? value : value - self.currentMonth;\n if ((delta < 0 && self._hidePrevMonthArrow === true) ||\n (delta > 0 && self._hideNextMonthArrow === true))\n return;\n self.currentMonth += delta;\n if (self.currentMonth < 0 || self.currentMonth > 11) {\n self.currentYear += self.currentMonth > 11 ? 1 : -1;\n self.currentMonth = (self.currentMonth + 12) % 12;\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n buildDays();\n triggerEvent(\"onMonthChange\");\n updateNavigationCurrentMonth();\n }\n function clear(triggerChangeEvent, toInitial) {\n if (triggerChangeEvent === void 0) { triggerChangeEvent = true; }\n if (toInitial === void 0) { toInitial = true; }\n self.input.value = \"\";\n if (self.altInput !== undefined)\n self.altInput.value = \"\";\n if (self.mobileInput !== undefined)\n self.mobileInput.value = \"\";\n self.selectedDates = [];\n self.latestSelectedDateObj = undefined;\n if (toInitial === true) {\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n }\n self.showTimeInput = false;\n if (self.config.enableTime === true) {\n setDefaultHours();\n }\n self.redraw();\n if (triggerChangeEvent)\n // triggerChangeEvent is true (default) or an Event\n triggerEvent(\"onChange\");\n }\n function close() {\n self.isOpen = false;\n if (!self.isMobile) {\n if (self.calendarContainer !== undefined) {\n self.calendarContainer.classList.remove(\"open\");\n }\n if (self._input !== undefined) {\n self._input.classList.remove(\"active\");\n }\n }\n triggerEvent(\"onClose\");\n }\n function destroy() {\n if (self.config !== undefined)\n triggerEvent(\"onDestroy\");\n for (var i = self._handlers.length; i--;) {\n var h = self._handlers[i];\n h.element.removeEventListener(h.event, h.handler, h.options);\n }\n self._handlers = [];\n if (self.mobileInput) {\n if (self.mobileInput.parentNode)\n self.mobileInput.parentNode.removeChild(self.mobileInput);\n self.mobileInput = undefined;\n }\n else if (self.calendarContainer && self.calendarContainer.parentNode) {\n if (self.config.static && self.calendarContainer.parentNode) {\n var wrapper = self.calendarContainer.parentNode;\n wrapper.lastChild && wrapper.removeChild(wrapper.lastChild);\n if (wrapper.parentNode) {\n while (wrapper.firstChild)\n wrapper.parentNode.insertBefore(wrapper.firstChild, wrapper);\n wrapper.parentNode.removeChild(wrapper);\n }\n }\n else\n self.calendarContainer.parentNode.removeChild(self.calendarContainer);\n }\n if (self.altInput) {\n self.input.type = \"text\";\n if (self.altInput.parentNode)\n self.altInput.parentNode.removeChild(self.altInput);\n delete self.altInput;\n }\n if (self.input) {\n self.input.type = self.input._type;\n self.input.classList.remove(\"flatpickr-input\");\n self.input.removeAttribute(\"readonly\");\n self.input.value = \"\";\n }\n [\n \"_showTimeInput\",\n \"latestSelectedDateObj\",\n \"_hideNextMonthArrow\",\n \"_hidePrevMonthArrow\",\n \"__hideNextMonthArrow\",\n \"__hidePrevMonthArrow\",\n \"isMobile\",\n \"isOpen\",\n \"selectedDateElem\",\n \"minDateHasTime\",\n \"maxDateHasTime\",\n \"days\",\n \"daysContainer\",\n \"_input\",\n \"_positionElement\",\n \"innerContainer\",\n \"rContainer\",\n \"monthNav\",\n \"todayDateElem\",\n \"calendarContainer\",\n \"weekdayContainer\",\n \"prevMonthNav\",\n \"nextMonthNav\",\n \"monthsDropdownContainer\",\n \"currentMonthElement\",\n \"currentYearElement\",\n \"navigationCurrentMonth\",\n \"selectedDateElem\",\n \"config\",\n ].forEach(function (k) {\n try {\n delete self[k];\n }\n catch (_) { }\n });\n }\n function isCalendarElem(elem) {\n if (self.config.appendTo && self.config.appendTo.contains(elem))\n return true;\n return self.calendarContainer.contains(elem);\n }\n function documentClick(e) {\n if (self.isOpen && !self.config.inline) {\n var eventTarget_1 = getEventTarget(e);\n var isCalendarElement = isCalendarElem(eventTarget_1);\n var isInput = eventTarget_1 === self.input ||\n eventTarget_1 === self.altInput ||\n self.element.contains(eventTarget_1) ||\n // web components\n // e.path is not present in all browsers. circumventing typechecks\n (e.path &&\n e.path.indexOf &&\n (~e.path.indexOf(self.input) ||\n ~e.path.indexOf(self.altInput)));\n var lostFocus = e.type === \"blur\"\n ? isInput &&\n e.relatedTarget &&\n !isCalendarElem(e.relatedTarget)\n : !isInput &&\n !isCalendarElement &&\n !isCalendarElem(e.relatedTarget);\n var isIgnored = !self.config.ignoredFocusElements.some(function (elem) {\n return elem.contains(eventTarget_1);\n });\n if (lostFocus && isIgnored) {\n self.close();\n if (self.config.mode === \"range\" && self.selectedDates.length === 1) {\n self.clear(false);\n self.redraw();\n }\n }\n }\n }\n function changeYear(newYear) {\n if (!newYear ||\n (self.config.minDate && newYear < self.config.minDate.getFullYear()) ||\n (self.config.maxDate && newYear > self.config.maxDate.getFullYear()))\n return;\n var newYearNum = newYear, isNewYear = self.currentYear !== newYearNum;\n self.currentYear = newYearNum || self.currentYear;\n if (self.config.maxDate &&\n self.currentYear === self.config.maxDate.getFullYear()) {\n self.currentMonth = Math.min(self.config.maxDate.getMonth(), self.currentMonth);\n }\n else if (self.config.minDate &&\n self.currentYear === self.config.minDate.getFullYear()) {\n self.currentMonth = Math.max(self.config.minDate.getMonth(), self.currentMonth);\n }\n if (isNewYear) {\n self.redraw();\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n }\n function isEnabled(date, timeless) {\n if (timeless === void 0) { timeless = true; }\n var dateToCheck = self.parseDate(date, undefined, timeless); // timeless\n if ((self.config.minDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.minDate, timeless !== undefined ? timeless : !self.minDateHasTime) < 0) ||\n (self.config.maxDate &&\n dateToCheck &&\n compareDates(dateToCheck, self.config.maxDate, timeless !== undefined ? timeless : !self.maxDateHasTime) > 0))\n return false;\n if (self.config.enable.length === 0 && self.config.disable.length === 0)\n return true;\n if (dateToCheck === undefined)\n return false;\n var bool = self.config.enable.length > 0, array = bool ? self.config.enable : self.config.disable;\n for (var i = 0, d = void 0; i < array.length; i++) {\n d = array[i];\n if (typeof d === \"function\" &&\n d(dateToCheck) // disabled by function\n )\n return bool;\n else if (d instanceof Date &&\n dateToCheck !== undefined &&\n d.getTime() === dateToCheck.getTime())\n // disabled by date\n return bool;\n else if (typeof d === \"string\" && dateToCheck !== undefined) {\n // disabled by date string\n var parsed = self.parseDate(d, undefined, true);\n return parsed && parsed.getTime() === dateToCheck.getTime()\n ? bool\n : !bool;\n }\n else if (\n // disabled by range\n typeof d === \"object\" &&\n dateToCheck !== undefined &&\n d.from &&\n d.to &&\n dateToCheck.getTime() >= d.from.getTime() &&\n dateToCheck.getTime() <= d.to.getTime())\n return bool;\n }\n return !bool;\n }\n function isInView(elem) {\n if (self.daysContainer !== undefined)\n return (elem.className.indexOf(\"hidden\") === -1 &&\n self.daysContainer.contains(elem));\n return false;\n }\n function onKeyDown(e) {\n // e.key e.keyCode\n // \"Backspace\" 8\n // \"Tab\" 9\n // \"Enter\" 13\n // \"Escape\" (IE \"Esc\") 27\n // \"ArrowLeft\" (IE \"Left\") 37\n // \"ArrowUp\" (IE \"Up\") 38\n // \"ArrowRight\" (IE \"Right\") 39\n // \"ArrowDown\" (IE \"Down\") 40\n // \"Delete\" (IE \"Del\") 46\n var isInput = e.target === self._input;\n var allowInput = self.config.allowInput;\n var allowKeydown = self.isOpen && (!allowInput || !isInput);\n var allowInlineKeydown = self.config.inline && isInput && !allowInput;\n if (e.keyCode === 13 && isInput) {\n if (allowInput) {\n self.setDate(self._input.value, true, e.target === self.altInput\n ? self.config.altFormat\n : self.config.dateFormat);\n return e.target.blur();\n }\n else {\n self.open();\n }\n }\n else if (isCalendarElem(e.target) ||\n allowKeydown ||\n allowInlineKeydown) {\n var isTimeObj = !!self.timeContainer &&\n self.timeContainer.contains(e.target);\n switch (e.keyCode) {\n case 13:\n if (isTimeObj) {\n e.preventDefault();\n updateTime();\n focusAndClose();\n }\n else\n selectDate(e);\n break;\n case 27: // escape\n e.preventDefault();\n focusAndClose();\n break;\n case 8:\n case 46:\n if (isInput && !self.config.allowInput) {\n e.preventDefault();\n self.clear();\n }\n break;\n case 37:\n case 39:\n if (!isTimeObj && !isInput) {\n e.preventDefault();\n if (self.daysContainer !== undefined &&\n (allowInput === false ||\n (document.activeElement && isInView(document.activeElement)))) {\n var delta_1 = e.keyCode === 39 ? 1 : -1;\n if (!e.ctrlKey)\n focusOnDay(undefined, delta_1);\n else {\n e.stopPropagation();\n changeMonth(delta_1);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n }\n }\n else if (self.hourElement)\n self.hourElement.focus();\n break;\n case 38:\n case 40:\n e.preventDefault();\n var delta = e.keyCode === 40 ? 1 : -1;\n if ((self.daysContainer && e.target.$i !== undefined) ||\n e.target === self.input) {\n if (e.ctrlKey) {\n e.stopPropagation();\n changeYear(self.currentYear - delta);\n focusOnDay(getFirstAvailableDay(1), 0);\n }\n else if (!isTimeObj)\n focusOnDay(undefined, delta * 7);\n }\n else if (e.target === self.currentYearElement) {\n changeYear(self.currentYear - delta);\n }\n else if (self.config.enableTime) {\n if (!isTimeObj && self.hourElement)\n self.hourElement.focus();\n updateTime(e);\n self._debouncedChange();\n }\n break;\n case 9:\n if (isTimeObj) {\n var elems = [\n self.hourElement,\n self.minuteElement,\n self.secondElement,\n self.amPM,\n ]\n .concat(self.pluginElements)\n .filter(function (x) { return x; });\n var i = elems.indexOf(e.target);\n if (i !== -1) {\n var target = elems[i + (e.shiftKey ? -1 : 1)];\n e.preventDefault();\n (target || self._input).focus();\n }\n }\n else if (!self.config.noCalendar &&\n self.daysContainer &&\n self.daysContainer.contains(e.target) &&\n e.shiftKey) {\n e.preventDefault();\n self._input.focus();\n }\n break;\n default:\n break;\n }\n }\n if (self.amPM !== undefined && e.target === self.amPM) {\n switch (e.key) {\n case self.l10n.amPM[0].charAt(0):\n case self.l10n.amPM[0].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[0];\n setHoursFromInputs();\n updateValue();\n break;\n case self.l10n.amPM[1].charAt(0):\n case self.l10n.amPM[1].charAt(0).toLowerCase():\n self.amPM.textContent = self.l10n.amPM[1];\n setHoursFromInputs();\n updateValue();\n break;\n }\n }\n if (isInput || isCalendarElem(e.target)) {\n triggerEvent(\"onKeyDown\", e);\n }\n }\n function onMouseOver(elem) {\n if (self.selectedDates.length !== 1 ||\n (elem &&\n (!elem.classList.contains(\"flatpickr-day\") ||\n elem.classList.contains(\"flatpickr-disabled\"))))\n return;\n var hoverDate = elem\n ? elem.dateObj.getTime()\n : self.days.firstElementChild.dateObj.getTime(), initialDate = self.parseDate(self.selectedDates[0], undefined, true).getTime(), rangeStartDate = Math.min(hoverDate, self.selectedDates[0].getTime()), rangeEndDate = Math.max(hoverDate, self.selectedDates[0].getTime());\n var containsDisabled = false;\n var minRange = 0, maxRange = 0;\n for (var t = rangeStartDate; t < rangeEndDate; t += duration.DAY) {\n if (!isEnabled(new Date(t), true)) {\n containsDisabled =\n containsDisabled || (t > rangeStartDate && t < rangeEndDate);\n if (t < initialDate && (!minRange || t > minRange))\n minRange = t;\n else if (t > initialDate && (!maxRange || t < maxRange))\n maxRange = t;\n }\n }\n for (var m = 0; m < self.config.showMonths; m++) {\n var month = self.daysContainer.children[m];\n var _loop_1 = function (i, l) {\n var dayElem = month.children[i], date = dayElem.dateObj;\n var timestamp = date.getTime();\n var outOfRange = (minRange > 0 && timestamp < minRange) ||\n (maxRange > 0 && timestamp > maxRange);\n if (outOfRange) {\n dayElem.classList.add(\"notAllowed\");\n [\"inRange\", \"startRange\", \"endRange\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n return \"continue\";\n }\n else if (containsDisabled && !outOfRange)\n return \"continue\";\n [\"startRange\", \"inRange\", \"endRange\", \"notAllowed\"].forEach(function (c) {\n dayElem.classList.remove(c);\n });\n if (elem !== undefined) {\n elem.classList.add(hoverDate <= self.selectedDates[0].getTime()\n ? \"startRange\"\n : \"endRange\");\n if (initialDate < hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"startRange\");\n else if (initialDate > hoverDate && timestamp === initialDate)\n dayElem.classList.add(\"endRange\");\n if (timestamp >= minRange &&\n (maxRange === 0 || timestamp <= maxRange) &&\n isBetween(timestamp, initialDate, hoverDate))\n dayElem.classList.add(\"inRange\");\n }\n };\n for (var i = 0, l = month.children.length; i < l; i++) {\n _loop_1(i, l);\n }\n }\n }\n function onResize() {\n if (self.isOpen && !self.config.static && !self.config.inline)\n positionCalendar();\n }\n function setDefaultTime() {\n self.setDate(self.config.minDate !== undefined\n ? new Date(self.config.minDate.getTime())\n : new Date(), true);\n setDefaultHours();\n updateValue();\n }\n function open(e, positionElement) {\n if (positionElement === void 0) { positionElement = self._positionElement; }\n if (self.isMobile === true) {\n if (e) {\n e.preventDefault();\n e.target && e.target.blur();\n }\n if (self.mobileInput !== undefined) {\n self.mobileInput.focus();\n self.mobileInput.click();\n }\n triggerEvent(\"onOpen\");\n return;\n }\n if (self._input.disabled || self.config.inline)\n return;\n var wasOpen = self.isOpen;\n self.isOpen = true;\n if (!wasOpen) {\n self.calendarContainer.classList.add(\"open\");\n self._input.classList.add(\"active\");\n triggerEvent(\"onOpen\");\n positionCalendar(positionElement);\n }\n if (self.config.enableTime === true && self.config.noCalendar === true) {\n if (self.selectedDates.length === 0) {\n setDefaultTime();\n }\n if (self.config.allowInput === false &&\n (e === undefined ||\n !self.timeContainer.contains(e.relatedTarget))) {\n setTimeout(function () { return self.hourElement.select(); }, 50);\n }\n }\n }\n function minMaxDateSetter(type) {\n return function (date) {\n var dateObj = (self.config[\"_\" + type + \"Date\"] = self.parseDate(date, self.config.dateFormat));\n var inverseDateObj = self.config[\"_\" + (type === \"min\" ? \"max\" : \"min\") + \"Date\"];\n if (dateObj !== undefined) {\n self[type === \"min\" ? \"minDateHasTime\" : \"maxDateHasTime\"] =\n dateObj.getHours() > 0 ||\n dateObj.getMinutes() > 0 ||\n dateObj.getSeconds() > 0;\n }\n if (self.selectedDates) {\n self.selectedDates = self.selectedDates.filter(function (d) { return isEnabled(d); });\n if (!self.selectedDates.length && type === \"min\")\n setHoursFromDate(dateObj);\n updateValue();\n }\n if (self.daysContainer) {\n redraw();\n if (dateObj !== undefined)\n self.currentYearElement[type] = dateObj.getFullYear().toString();\n else\n self.currentYearElement.removeAttribute(type);\n self.currentYearElement.disabled =\n !!inverseDateObj &&\n dateObj !== undefined &&\n inverseDateObj.getFullYear() === dateObj.getFullYear();\n }\n };\n }\n function parseConfig() {\n var boolOpts = [\n \"wrap\",\n \"weekNumbers\",\n \"allowInput\",\n \"clickOpens\",\n \"time_24hr\",\n \"enableTime\",\n \"noCalendar\",\n \"altInput\",\n \"shorthandCurrentMonth\",\n \"inline\",\n \"static\",\n \"enableSeconds\",\n \"disableMobile\",\n ];\n var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));\n var formats = {};\n self.config.parseDate = userConfig.parseDate;\n self.config.formatDate = userConfig.formatDate;\n Object.defineProperty(self.config, \"enable\", {\n get: function () { return self.config._enable; },\n set: function (dates) {\n self.config._enable = parseDateRules(dates);\n }\n });\n Object.defineProperty(self.config, \"disable\", {\n get: function () { return self.config._disable; },\n set: function (dates) {\n self.config._disable = parseDateRules(dates);\n }\n });\n var timeMode = userConfig.mode === \"time\";\n if (!userConfig.dateFormat && (userConfig.enableTime || timeMode)) {\n var defaultDateFormat = flatpickr.defaultConfig.dateFormat || defaults.dateFormat;\n formats.dateFormat =\n userConfig.noCalendar || timeMode\n ? \"H:i\" + (userConfig.enableSeconds ? \":S\" : \"\")\n : defaultDateFormat + \" H:i\" + (userConfig.enableSeconds ? \":S\" : \"\");\n }\n if (userConfig.altInput &&\n (userConfig.enableTime || timeMode) &&\n !userConfig.altFormat) {\n var defaultAltFormat = flatpickr.defaultConfig.altFormat || defaults.altFormat;\n formats.altFormat =\n userConfig.noCalendar || timeMode\n ? \"h:i\" + (userConfig.enableSeconds ? \":S K\" : \" K\")\n : defaultAltFormat + (\" h:i\" + (userConfig.enableSeconds ? \":S\" : \"\") + \" K\");\n }\n if (!userConfig.altInputClass) {\n self.config.altInputClass =\n self.input.className + \" \" + self.config.altInputClass;\n }\n Object.defineProperty(self.config, \"minDate\", {\n get: function () { return self.config._minDate; },\n set: minMaxDateSetter(\"min\")\n });\n Object.defineProperty(self.config, \"maxDate\", {\n get: function () { return self.config._maxDate; },\n set: minMaxDateSetter(\"max\")\n });\n var minMaxTimeSetter = function (type) { return function (val) {\n self.config[type === \"min\" ? \"_minTime\" : \"_maxTime\"] = self.parseDate(val, \"H:i\");\n }; };\n Object.defineProperty(self.config, \"minTime\", {\n get: function () { return self.config._minTime; },\n set: minMaxTimeSetter(\"min\")\n });\n Object.defineProperty(self.config, \"maxTime\", {\n get: function () { return self.config._maxTime; },\n set: minMaxTimeSetter(\"max\")\n });\n if (userConfig.mode === \"time\") {\n self.config.noCalendar = true;\n self.config.enableTime = true;\n }\n Object.assign(self.config, formats, userConfig);\n for (var i = 0; i < boolOpts.length; i++)\n self.config[boolOpts[i]] =\n self.config[boolOpts[i]] === true ||\n self.config[boolOpts[i]] === \"true\";\n HOOKS.filter(function (hook) { return self.config[hook] !== undefined; }).forEach(function (hook) {\n self.config[hook] = arrayify(self.config[hook] || []).map(bindToInstance);\n });\n self.isMobile =\n !self.config.disableMobile &&\n !self.config.inline &&\n self.config.mode === \"single\" &&\n !self.config.disable.length &&\n !self.config.enable.length &&\n !self.config.weekNumbers &&\n /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n for (var i = 0; i < self.config.plugins.length; i++) {\n var pluginConf = self.config.plugins[i](self) || {};\n for (var key in pluginConf) {\n if (HOOKS.indexOf(key) > -1) {\n self.config[key] = arrayify(pluginConf[key])\n .map(bindToInstance)\n .concat(self.config[key]);\n }\n else if (typeof userConfig[key] === \"undefined\")\n self.config[key] = pluginConf[key];\n }\n }\n triggerEvent(\"onParseConfig\");\n }\n function setupLocale() {\n if (typeof self.config.locale !== \"object\" &&\n typeof flatpickr.l10ns[self.config.locale] === \"undefined\")\n self.config.errorHandler(new Error(\"flatpickr: invalid locale \" + self.config.locale));\n self.l10n = __assign({}, flatpickr.l10ns[\"default\"], (typeof self.config.locale === \"object\"\n ? self.config.locale\n : self.config.locale !== \"default\"\n ? flatpickr.l10ns[self.config.locale]\n : undefined));\n tokenRegex.K = \"(\" + self.l10n.amPM[0] + \"|\" + self.l10n.amPM[1] + \"|\" + self.l10n.amPM[0].toLowerCase() + \"|\" + self.l10n.amPM[1].toLowerCase() + \")\";\n var userConfig = __assign({}, instanceConfig, JSON.parse(JSON.stringify(element.dataset || {})));\n if (userConfig.time_24hr === undefined &&\n flatpickr.defaultConfig.time_24hr === undefined) {\n self.config.time_24hr = self.l10n.time_24hr;\n }\n self.formatDate = createDateFormatter(self);\n self.parseDate = createDateParser({ config: self.config, l10n: self.l10n });\n }\n function positionCalendar(customPositionElement) {\n if (self.calendarContainer === undefined)\n return;\n triggerEvent(\"onPreCalendarPosition\");\n var positionElement = customPositionElement || self._positionElement;\n var calendarHeight = Array.prototype.reduce.call(self.calendarContainer.children, (function (acc, child) { return acc + child.offsetHeight; }), 0), calendarWidth = self.calendarContainer.offsetWidth, configPos = self.config.position.split(\" \"), configPosVertical = configPos[0], configPosHorizontal = configPos.length > 1 ? configPos[1] : null, inputBounds = positionElement.getBoundingClientRect(), distanceFromBottom = window.innerHeight - inputBounds.bottom, showOnTop = configPosVertical === \"above\" ||\n (configPosVertical !== \"below\" &&\n distanceFromBottom < calendarHeight &&\n inputBounds.top > calendarHeight);\n var top = window.pageYOffset +\n inputBounds.top +\n (!showOnTop ? positionElement.offsetHeight + 2 : -calendarHeight - 2);\n toggleClass(self.calendarContainer, \"arrowTop\", !showOnTop);\n toggleClass(self.calendarContainer, \"arrowBottom\", showOnTop);\n if (self.config.inline)\n return;\n var left = window.pageXOffset +\n inputBounds.left -\n (configPosHorizontal != null && configPosHorizontal === \"center\"\n ? (calendarWidth - inputBounds.width) / 2\n : 0);\n var right = window.document.body.offsetWidth - inputBounds.right;\n var rightMost = left + calendarWidth > window.document.body.offsetWidth;\n var centerMost = right + calendarWidth > window.document.body.offsetWidth;\n toggleClass(self.calendarContainer, \"rightMost\", rightMost);\n if (self.config.static)\n return;\n self.calendarContainer.style.top = top + \"px\";\n if (!rightMost) {\n self.calendarContainer.style.left = left + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n else if (!centerMost) {\n self.calendarContainer.style.left = \"auto\";\n self.calendarContainer.style.right = right + \"px\";\n }\n else {\n var doc = document.styleSheets[0];\n // some testing environments don't have css support\n if (doc === undefined)\n return;\n var bodyWidth = window.document.body.offsetWidth;\n var centerLeft = Math.max(0, bodyWidth / 2 - calendarWidth / 2);\n var centerBefore = \".flatpickr-calendar.centerMost:before\";\n var centerAfter = \".flatpickr-calendar.centerMost:after\";\n var centerIndex = doc.cssRules.length;\n var centerStyle = \"{left:\" + inputBounds.left + \"px;right:auto;}\";\n toggleClass(self.calendarContainer, \"rightMost\", false);\n toggleClass(self.calendarContainer, \"centerMost\", true);\n doc.insertRule(centerBefore + \",\" + centerAfter + centerStyle, centerIndex);\n self.calendarContainer.style.left = centerLeft + \"px\";\n self.calendarContainer.style.right = \"auto\";\n }\n }\n function redraw() {\n if (self.config.noCalendar || self.isMobile)\n return;\n updateNavigationCurrentMonth();\n buildDays();\n }\n function focusAndClose() {\n self._input.focus();\n if (window.navigator.userAgent.indexOf(\"MSIE\") !== -1 ||\n navigator.msMaxTouchPoints !== undefined) {\n // hack - bugs in the way IE handles focus keeps the calendar open\n setTimeout(self.close, 0);\n }\n else {\n self.close();\n }\n }\n function selectDate(e) {\n e.preventDefault();\n e.stopPropagation();\n var isSelectable = function (day) {\n return day.classList &&\n day.classList.contains(\"flatpickr-day\") &&\n !day.classList.contains(\"flatpickr-disabled\") &&\n !day.classList.contains(\"notAllowed\");\n };\n var t = findParent(e.target, isSelectable);\n if (t === undefined)\n return;\n var target = t;\n var selectedDate = (self.latestSelectedDateObj = new Date(target.dateObj.getTime()));\n var shouldChangeMonth = (selectedDate.getMonth() < self.currentMonth ||\n selectedDate.getMonth() >\n self.currentMonth + self.config.showMonths - 1) &&\n self.config.mode !== \"range\";\n self.selectedDateElem = target;\n if (self.config.mode === \"single\")\n self.selectedDates = [selectedDate];\n else if (self.config.mode === \"multiple\") {\n var selectedIndex = isDateSelected(selectedDate);\n if (selectedIndex)\n self.selectedDates.splice(parseInt(selectedIndex), 1);\n else\n self.selectedDates.push(selectedDate);\n }\n else if (self.config.mode === \"range\") {\n if (self.selectedDates.length === 2) {\n self.clear(false, false);\n }\n self.latestSelectedDateObj = selectedDate;\n self.selectedDates.push(selectedDate);\n // unless selecting same date twice, sort ascendingly\n if (compareDates(selectedDate, self.selectedDates[0], true) !== 0)\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n setHoursFromInputs();\n if (shouldChangeMonth) {\n var isNewYear = self.currentYear !== selectedDate.getFullYear();\n self.currentYear = selectedDate.getFullYear();\n self.currentMonth = selectedDate.getMonth();\n if (isNewYear) {\n triggerEvent(\"onYearChange\");\n buildMonthSwitch();\n }\n triggerEvent(\"onMonthChange\");\n }\n updateNavigationCurrentMonth();\n buildDays();\n updateValue();\n if (self.config.enableTime)\n setTimeout(function () { return (self.showTimeInput = true); }, 50);\n // maintain focus\n if (!shouldChangeMonth &&\n self.config.mode !== \"range\" &&\n self.config.showMonths === 1)\n focusOnDayElem(target);\n else if (self.selectedDateElem !== undefined &&\n self.hourElement === undefined) {\n self.selectedDateElem && self.selectedDateElem.focus();\n }\n if (self.hourElement !== undefined)\n self.hourElement !== undefined && self.hourElement.focus();\n if (self.config.closeOnSelect) {\n var single = self.config.mode === \"single\" && !self.config.enableTime;\n var range = self.config.mode === \"range\" &&\n self.selectedDates.length === 2 &&\n !self.config.enableTime;\n if (single || range) {\n focusAndClose();\n }\n }\n triggerChange();\n }\n var CALLBACKS = {\n locale: [setupLocale, updateWeekdays],\n showMonths: [buildMonths, setCalendarWidth, buildWeekdays],\n minDate: [jumpToDate],\n maxDate: [jumpToDate]\n };\n function set(option, value) {\n if (option !== null && typeof option === \"object\") {\n Object.assign(self.config, option);\n for (var key in option) {\n if (CALLBACKS[key] !== undefined)\n CALLBACKS[key].forEach(function (x) { return x(); });\n }\n }\n else {\n self.config[option] = value;\n if (CALLBACKS[option] !== undefined)\n CALLBACKS[option].forEach(function (x) { return x(); });\n else if (HOOKS.indexOf(option) > -1)\n self.config[option] = arrayify(value);\n }\n self.redraw();\n updateValue(false);\n }\n function setSelectedDate(inputDate, format) {\n var dates = [];\n if (inputDate instanceof Array)\n dates = inputDate.map(function (d) { return self.parseDate(d, format); });\n else if (inputDate instanceof Date || typeof inputDate === \"number\")\n dates = [self.parseDate(inputDate, format)];\n else if (typeof inputDate === \"string\") {\n switch (self.config.mode) {\n case \"single\":\n case \"time\":\n dates = [self.parseDate(inputDate, format)];\n break;\n case \"multiple\":\n dates = inputDate\n .split(self.config.conjunction)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n case \"range\":\n dates = inputDate\n .split(self.l10n.rangeSeparator)\n .map(function (date) { return self.parseDate(date, format); });\n break;\n default:\n break;\n }\n }\n else\n self.config.errorHandler(new Error(\"Invalid date supplied: \" + JSON.stringify(inputDate)));\n self.selectedDates = dates.filter(function (d) { return d instanceof Date && isEnabled(d, false); });\n if (self.config.mode === \"range\")\n self.selectedDates.sort(function (a, b) { return a.getTime() - b.getTime(); });\n }\n function setDate(date, triggerChange, format) {\n if (triggerChange === void 0) { triggerChange = false; }\n if (format === void 0) { format = self.config.dateFormat; }\n if ((date !== 0 && !date) || (date instanceof Array && date.length === 0))\n return self.clear(triggerChange);\n setSelectedDate(date, format);\n self.showTimeInput = self.selectedDates.length > 0;\n self.latestSelectedDateObj = self.selectedDates[self.selectedDates.length - 1];\n self.redraw();\n jumpToDate();\n setHoursFromDate();\n if (self.selectedDates.length === 0) {\n self.clear(false);\n }\n updateValue(triggerChange);\n if (triggerChange)\n triggerEvent(\"onChange\");\n }\n function parseDateRules(arr) {\n return arr\n .slice()\n .map(function (rule) {\n if (typeof rule === \"string\" ||\n typeof rule === \"number\" ||\n rule instanceof Date) {\n return self.parseDate(rule, undefined, true);\n }\n else if (rule &&\n typeof rule === \"object\" &&\n rule.from &&\n rule.to)\n return {\n from: self.parseDate(rule.from, undefined),\n to: self.parseDate(rule.to, undefined)\n };\n return rule;\n })\n .filter(function (x) { return x; }); // remove falsy values\n }\n function setupDates() {\n self.selectedDates = [];\n self.now = self.parseDate(self.config.now) || new Date();\n // Workaround IE11 setting placeholder as the input's value\n var preloadedDate = self.config.defaultDate ||\n ((self.input.nodeName === \"INPUT\" ||\n self.input.nodeName === \"TEXTAREA\") &&\n self.input.placeholder &&\n self.input.value === self.input.placeholder\n ? null\n : self.input.value);\n if (preloadedDate)\n setSelectedDate(preloadedDate, self.config.dateFormat);\n self._initialDate =\n self.selectedDates.length > 0\n ? self.selectedDates[0]\n : self.config.minDate &&\n self.config.minDate.getTime() > self.now.getTime()\n ? self.config.minDate\n : self.config.maxDate &&\n self.config.maxDate.getTime() < self.now.getTime()\n ? self.config.maxDate\n : self.now;\n self.currentYear = self._initialDate.getFullYear();\n self.currentMonth = self._initialDate.getMonth();\n if (self.selectedDates.length > 0)\n self.latestSelectedDateObj = self.selectedDates[0];\n if (self.config.minTime !== undefined)\n self.config.minTime = self.parseDate(self.config.minTime, \"H:i\");\n if (self.config.maxTime !== undefined)\n self.config.maxTime = self.parseDate(self.config.maxTime, \"H:i\");\n self.minDateHasTime =\n !!self.config.minDate &&\n (self.config.minDate.getHours() > 0 ||\n self.config.minDate.getMinutes() > 0 ||\n self.config.minDate.getSeconds() > 0);\n self.maxDateHasTime =\n !!self.config.maxDate &&\n (self.config.maxDate.getHours() > 0 ||\n self.config.maxDate.getMinutes() > 0 ||\n self.config.maxDate.getSeconds() > 0);\n Object.defineProperty(self, \"showTimeInput\", {\n get: function () { return self._showTimeInput; },\n set: function (bool) {\n self._showTimeInput = bool;\n if (self.calendarContainer)\n toggleClass(self.calendarContainer, \"showTimeInput\", bool);\n self.isOpen && positionCalendar();\n }\n });\n }\n function setupInputs() {\n self.input = self.config.wrap\n ? element.querySelector(\"[data-input]\")\n : element;\n /* istanbul ignore next */\n if (!self.input) {\n self.config.errorHandler(new Error(\"Invalid input element specified\"));\n return;\n }\n // hack: store previous type to restore it after destroy()\n self.input._type = self.input.type;\n self.input.type = \"text\";\n self.input.classList.add(\"flatpickr-input\");\n self._input = self.input;\n if (self.config.altInput) {\n // replicate self.element\n self.altInput = createElement(self.input.nodeName, self.config.altInputClass);\n self._input = self.altInput;\n self.altInput.placeholder = self.input.placeholder;\n self.altInput.disabled = self.input.disabled;\n self.altInput.required = self.input.required;\n self.altInput.tabIndex = self.input.tabIndex;\n self.altInput.type = \"text\";\n self.input.setAttribute(\"type\", \"hidden\");\n if (!self.config.static && self.input.parentNode)\n self.input.parentNode.insertBefore(self.altInput, self.input.nextSibling);\n }\n if (!self.config.allowInput)\n self._input.setAttribute(\"readonly\", \"readonly\");\n self._positionElement = self.config.positionElement || self._input;\n }\n function setupMobile() {\n var inputType = self.config.enableTime\n ? self.config.noCalendar\n ? \"time\"\n : \"datetime-local\"\n : \"date\";\n self.mobileInput = createElement(\"input\", self.input.className + \" flatpickr-mobile\");\n self.mobileInput.step = self.input.getAttribute(\"step\") || \"any\";\n self.mobileInput.tabIndex = 1;\n self.mobileInput.type = inputType;\n self.mobileInput.disabled = self.input.disabled;\n self.mobileInput.required = self.input.required;\n self.mobileInput.placeholder = self.input.placeholder;\n self.mobileFormatStr =\n inputType === \"datetime-local\"\n ? \"Y-m-d\\\\TH:i:S\"\n : inputType === \"date\"\n ? \"Y-m-d\"\n : \"H:i:S\";\n if (self.selectedDates.length > 0) {\n self.mobileInput.defaultValue = self.mobileInput.value = self.formatDate(self.selectedDates[0], self.mobileFormatStr);\n }\n if (self.config.minDate)\n self.mobileInput.min = self.formatDate(self.config.minDate, \"Y-m-d\");\n if (self.config.maxDate)\n self.mobileInput.max = self.formatDate(self.config.maxDate, \"Y-m-d\");\n self.input.type = \"hidden\";\n if (self.altInput !== undefined)\n self.altInput.type = \"hidden\";\n try {\n if (self.input.parentNode)\n self.input.parentNode.insertBefore(self.mobileInput, self.input.nextSibling);\n }\n catch (_a) { }\n bind(self.mobileInput, \"change\", function (e) {\n self.setDate(e.target.value, false, self.mobileFormatStr);\n triggerEvent(\"onChange\");\n triggerEvent(\"onClose\");\n });\n }\n function toggle(e) {\n if (self.isOpen === true)\n return self.close();\n self.open(e);\n }\n function triggerEvent(event, data) {\n // If the instance has been destroyed already, all hooks have been removed\n if (self.config === undefined)\n return;\n var hooks = self.config[event];\n if (hooks !== undefined && hooks.length > 0) {\n for (var i = 0; hooks[i] && i < hooks.length; i++)\n hooks[i](self.selectedDates, self.input.value, self, data);\n }\n if (event === \"onChange\") {\n self.input.dispatchEvent(createEvent(\"change\"));\n // many front-end frameworks bind to the input event\n self.input.dispatchEvent(createEvent(\"input\"));\n }\n }\n function createEvent(name) {\n var e = document.createEvent(\"Event\");\n e.initEvent(name, true, true);\n return e;\n }\n function isDateSelected(date) {\n for (var i = 0; i < self.selectedDates.length; i++) {\n if (compareDates(self.selectedDates[i], date) === 0)\n return \"\" + i;\n }\n return false;\n }\n function isDateInRange(date) {\n if (self.config.mode !== \"range\" || self.selectedDates.length < 2)\n return false;\n return (compareDates(date, self.selectedDates[0]) >= 0 &&\n compareDates(date, self.selectedDates[1]) <= 0);\n }\n function updateNavigationCurrentMonth() {\n if (self.config.noCalendar || self.isMobile || !self.monthNav)\n return;\n self.yearElements.forEach(function (yearElement, i) {\n var d = new Date(self.currentYear, self.currentMonth, 1);\n d.setMonth(self.currentMonth + i);\n if (self.config.showMonths > 1) {\n self.monthElements[i].textContent =\n monthToStr(d.getMonth(), self.config.shorthandCurrentMonth, self.l10n) + \" \";\n }\n else {\n self.monthsDropdownContainer.value = d.getMonth().toString();\n }\n yearElement.value = d.getFullYear().toString();\n });\n self._hidePrevMonthArrow =\n self.config.minDate !== undefined &&\n (self.currentYear === self.config.minDate.getFullYear()\n ? self.currentMonth <= self.config.minDate.getMonth()\n : self.currentYear < self.config.minDate.getFullYear());\n self._hideNextMonthArrow =\n self.config.maxDate !== undefined &&\n (self.currentYear === self.config.maxDate.getFullYear()\n ? self.currentMonth + 1 > self.config.maxDate.getMonth()\n : self.currentYear > self.config.maxDate.getFullYear());\n }\n function getDateStr(format) {\n return self.selectedDates\n .map(function (dObj) { return self.formatDate(dObj, format); })\n .filter(function (d, i, arr) {\n return self.config.mode !== \"range\" ||\n self.config.enableTime ||\n arr.indexOf(d) === i;\n })\n .join(self.config.mode !== \"range\"\n ? self.config.conjunction\n : self.l10n.rangeSeparator);\n }\n /**\n * Updates the values of inputs associated with the calendar\n */\n function updateValue(triggerChange) {\n if (triggerChange === void 0) { triggerChange = true; }\n if (self.mobileInput !== undefined && self.mobileFormatStr) {\n self.mobileInput.value =\n self.latestSelectedDateObj !== undefined\n ? self.formatDate(self.latestSelectedDateObj, self.mobileFormatStr)\n : \"\";\n }\n self.input.value = getDateStr(self.config.dateFormat);\n if (self.altInput !== undefined) {\n self.altInput.value = getDateStr(self.config.altFormat);\n }\n if (triggerChange !== false)\n triggerEvent(\"onValueUpdate\");\n }\n function onMonthNavClick(e) {\n var isPrevMonth = self.prevMonthNav.contains(e.target);\n var isNextMonth = self.nextMonthNav.contains(e.target);\n if (isPrevMonth || isNextMonth) {\n changeMonth(isPrevMonth ? -1 : 1);\n }\n else if (self.yearElements.indexOf(e.target) >= 0) {\n e.target.select();\n }\n else if (e.target.classList.contains(\"arrowUp\")) {\n self.changeYear(self.currentYear + 1);\n }\n else if (e.target.classList.contains(\"arrowDown\")) {\n self.changeYear(self.currentYear - 1);\n }\n }\n function timeWrapper(e) {\n e.preventDefault();\n var isKeyDown = e.type === \"keydown\", input = e.target;\n if (self.amPM !== undefined && e.target === self.amPM) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n var min = parseFloat(input.getAttribute(\"min\")), max = parseFloat(input.getAttribute(\"max\")), step = parseFloat(input.getAttribute(\"step\")), curValue = parseInt(input.value, 10), delta = e.delta ||\n (isKeyDown ? (e.which === 38 ? 1 : -1) : 0);\n var newValue = curValue + step * delta;\n if (typeof input.value !== \"undefined\" && input.value.length === 2) {\n var isHourElem = input === self.hourElement, isMinuteElem = input === self.minuteElement;\n if (newValue < min) {\n newValue =\n max +\n newValue +\n int(!isHourElem) +\n (int(isHourElem) && int(!self.amPM));\n if (isMinuteElem)\n incrementNumInput(undefined, -1, self.hourElement);\n }\n else if (newValue > max) {\n newValue =\n input === self.hourElement ? newValue - max - int(!self.amPM) : min;\n if (isMinuteElem)\n incrementNumInput(undefined, 1, self.hourElement);\n }\n if (self.amPM &&\n isHourElem &&\n (step === 1\n ? newValue + curValue === 23\n : Math.abs(newValue - curValue) > step)) {\n self.amPM.textContent =\n self.l10n.amPM[int(self.amPM.textContent === self.l10n.amPM[0])];\n }\n input.value = pad(newValue);\n }\n }\n init();\n return self;\n }\n /* istanbul ignore next */\n function _flatpickr(nodeList, config) {\n // static list\n var nodes = Array.prototype.slice\n .call(nodeList)\n .filter(function (x) { return x instanceof HTMLElement; });\n var instances = [];\n for (var i = 0; i < nodes.length; i++) {\n var node = nodes[i];\n try {\n if (node.getAttribute(\"data-fp-omit\") !== null)\n continue;\n if (node._flatpickr !== undefined) {\n node._flatpickr.destroy();\n node._flatpickr = undefined;\n }\n node._flatpickr = FlatpickrInstance(node, config || {});\n instances.push(node._flatpickr);\n }\n catch (e) {\n console.error(e);\n }\n }\n return instances.length === 1 ? instances[0] : instances;\n }\n /* istanbul ignore next */\n if (typeof HTMLElement !== \"undefined\" &&\n typeof HTMLCollection !== \"undefined\" &&\n typeof NodeList !== \"undefined\") {\n // browser env\n HTMLCollection.prototype.flatpickr = NodeList.prototype.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n HTMLElement.prototype.flatpickr = function (config) {\n return _flatpickr([this], config);\n };\n }\n /* istanbul ignore next */\n var flatpickr = function (selector, config) {\n if (typeof selector === \"string\") {\n return _flatpickr(window.document.querySelectorAll(selector), config);\n }\n else if (selector instanceof Node) {\n return _flatpickr([selector], config);\n }\n else {\n return _flatpickr(selector, config);\n }\n };\n /* istanbul ignore next */\n flatpickr.defaultConfig = {};\n flatpickr.l10ns = {\n en: __assign({}, english),\n \"default\": __assign({}, english)\n };\n flatpickr.localize = function (l10n) {\n flatpickr.l10ns[\"default\"] = __assign({}, flatpickr.l10ns[\"default\"], l10n);\n };\n flatpickr.setDefaults = function (config) {\n flatpickr.defaultConfig = __assign({}, flatpickr.defaultConfig, config);\n };\n flatpickr.parseDate = createDateParser({});\n flatpickr.formatDate = createDateFormatter({});\n flatpickr.compareDates = compareDates;\n /* istanbul ignore next */\n if (typeof jQuery !== \"undefined\" && typeof jQuery.fn !== \"undefined\") {\n jQuery.fn.flatpickr = function (config) {\n return _flatpickr(this, config);\n };\n }\n // eslint-disable-next-line @typescript-eslint/camelcase\n Date.prototype.fp_incr = function (days) {\n return new Date(this.getFullYear(), this.getMonth(), this.getDate() + (typeof days === \"string\" ? parseInt(days, 10) : days));\n };\n if (typeof window !== \"undefined\") {\n window.flatpickr = flatpickr;\n }\n\n return flatpickr;\n\n}));\n","<script>\r\n\r\nimport flatpickr from \"flatpickr\";\r\nimport \"flatpickr/dist/flatpickr.css\";\r\nimport { onMount } from 'svelte';\r\n\r\nexport let value;\r\nexport let label;\r\nlet input;\r\nlet fpInstance;\r\n\r\n$: if (fpInstance) fpInstance.setDate(value);\r\n\r\nonMount(() => {\r\n fpInstance = flatpickr(input, {});\r\n\r\n fpInstance.config.onChange.push(selectedDates => {\r\n if(selectedDates.length > 0)\r\n value = new Date(selectedDates[0]);\r\n });\r\n\r\n return fpInstance;\r\n})\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n</script>\r\n\r\n\r\n <div class=\"container\" >\r\n <div class=\"label\">{label}</div>\r\n <input class=\"control\" bind:this={input} />\r\n</div>\r\n\r\n<style>\r\n.container {\r\n display: grid;\r\n grid-template-columns: [label] 100px [control] auto;\r\n margin: 20px 0px;\r\n}\r\n.label {\r\n grid-column-start: label;\r\n align-self: center;\r\n} \r\n\r\n.control {\r\n grid-column-start: control;\r\n align-self: center;\r\n margin: 0;\r\n}\r\n\r\ninput {\r\n width:300px;\r\n}\r\n\r\n\r\n</style>","<script>\r\nimport Dropdown from \"../common/Dropdown.svelte\";\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport NumberBox from \"../common/NumberBox.svelte\";\r\nimport ValuesList from \"../common/ValuesList.svelte\";\r\nimport ErrorsBox from \"../common/ErrorsBox.svelte\";\r\nimport Checkbox from \"../common/Checkbox.svelte\";\r\nimport DatePicker from \"../common/DatePicker.svelte\";\r\nimport {cloneDeep, assign, keys, \r\n isNumber, includes, map, isBoolean} from \"lodash/fp\";\r\nimport {allTypes, validate, getPotentialReferenceIndexes,\r\n getDefaultTypeOptions, getNode,\r\n getPotentialReverseReferenceIndexes} from \"../common/core\";\r\n\r\nexport let field;\r\nexport let allFields;\r\nexport let onFinished = () => {};\r\nexport let database;\r\n\r\nlet errors = [];\r\nlet clonedField = cloneDeep(field);\r\n\r\n$: isNew = !!field && field.name.length === 0;\r\n\r\n$: possibleReferenceIndexes = getPotentialReferenceIndexes(\r\n database.hierarchy, database.currentNode\r\n);\r\n\r\n$: selectedReverseRefIndex = \r\n !clonedField.typeOptions.indexNodeKey \r\n ? \"\"\r\n : getNode(database.hierarchy, clonedField.typeOptions.indexNodeKey);\r\n\r\n$: possibleReverseReferenceIndexes = \r\n !selectedReverseRefIndex \r\n ? []\r\n : getPotentialReverseReferenceIndexes(\r\n database.hierarchy, selectedReverseRefIndex);\r\n\r\nconst typeChanged = (ev) => \r\n clonedField.typeOptions = getDefaultTypeOptions(ev.detail);\r\n\r\n\r\nconst save = () => {\r\n\r\n errors = validate.field(allFields)(clonedField);\r\n if(errors.length > 0) return;\r\n field.typeOptions = cloneDeep(clonedField.typeOptions);\r\n onFinished(\r\n assign(field)(clonedField)\r\n );\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n <ErrorsBox errors={errors} />\r\n\r\n <Dropdown label=\"Type\" bind:selected={clonedField.type} options={keys(allTypes)} on:change={typeChanged} />\r\n\r\n {#if isNew}\r\n <Textbox label=\"Field Name\" bind:text={clonedField.name} />\r\n {:else}\r\n <div style=\"font-weight: bold\">{clonedField.name}</div>\r\n {/if}\r\n\r\n <Textbox label=\"Label\" bind:text={clonedField.label} />\r\n \r\n {#if clonedField.type === \"string\"}\r\n <NumberBox label=\"Max Length\" bind:value={clonedField.typeOptions.maxLength} />\r\n <ValuesList label=\"Values (options)\" bind:values={clonedField.typeOptions.values} />\r\n <Checkbox label=\"Declared Values Only\" bind:checked={clonedField.typeOptions.allowDeclaredValuesOnly} />\r\n {:else if clonedField.type === \"bool\"}\r\n <Checkbox label=\"Allow Null\" bind:checked={clonedField.typeOptions.allowNulls} />\r\n {:else if clonedField.type === \"datetime\"}\r\n <DatePicker label=\"Min Value\" bind:value={clonedField.typeOptions.minValue} />\r\n <DatePicker label=\"Max Value\" bind:value={clonedField.typeOptions.maxValue} />\r\n {:else if clonedField.type === \"number\"}\r\n <NumberBox label=\"Min Value\" bind:value={clonedField.typeOptions.minValue} />\r\n <NumberBox label=\"Max Value\" bind:value={clonedField.typeOptions.maxValue} />\r\n <NumberBox label=\"Decimal Places\" bind:value={clonedField.typeOptions.decimalPlaces} />\r\n {:else if clonedField.type === \"reference\"}\r\n <Dropdown label=\"Lookup Index\" \r\n options={possibleReferenceIndexes} \r\n valueMember={n => n.nodeKey()}\r\n textMember={n => n.name}\r\n bind:selected={clonedField.typeOptions.indexNodeKey} />\r\n\r\n <Dropdown label=\"Reverse Reference Index\" \r\n options={possibleReverseReferenceIndexes} \r\n multiple=true\r\n valueMember={n => n.nodeKey()}\r\n textMember={n => n.name}\r\n bind:selected={clonedField.typeOptions.reverseIndexNodeKeys} />\r\n\r\n <Textbox label=\"Display Value\" bind:text={clonedField.typeOptions.displayValue} />\r\n\r\n {:else if clonedField.type.startsWith(\"array\")}\r\n <NumberBox label=\"Min Length\" bind:value={clonedField.typeOptions.minLength} />\r\n <NumberBox label=\"Max Length\" bind:value={clonedField.typeOptions.maxLength} />\r\n {/if}\r\n\r\n <ButtonGroup style=\"float: right;\">\r\n <Button color=\"primary\" grouped on:click={save}>Save</Button>\r\n <Button color=\"secondary\" grouped on:click={() => onFinished(false)}>Cancel</Button>\r\n </ButtonGroup>\r\n\r\n</div>\r\n\r\n<style>\r\n\r\n\r\n\r\n</style>","/*! UIkit 3.1.6 | http://www.getuikit.com | (c) 2014 - 2018 YOOtheme | MIT License */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define('uikit', factory) :\n (global = global || self, global.UIkit = factory());\n}(this, function () { 'use strict';\n\n function bind(fn, context) {\n return function (a) {\n var l = arguments.length;\n return l ? l > 1 ? fn.apply(context, arguments) : fn.call(context, a) : fn.call(context);\n };\n }\n\n var objPrototype = Object.prototype;\n var hasOwnProperty = objPrototype.hasOwnProperty;\n\n function hasOwn(obj, key) {\n return hasOwnProperty.call(obj, key);\n }\n\n var hyphenateCache = {};\n var hyphenateRe = /([a-z\\d])([A-Z])/g;\n\n function hyphenate(str) {\n\n if (!(str in hyphenateCache)) {\n hyphenateCache[str] = str\n .replace(hyphenateRe, '$1-$2')\n .toLowerCase();\n }\n\n return hyphenateCache[str];\n }\n\n var camelizeRe = /-(\\w)/g;\n\n function camelize(str) {\n return str.replace(camelizeRe, toUpper);\n }\n\n function toUpper(_, c) {\n return c ? c.toUpperCase() : '';\n }\n\n function ucfirst(str) {\n return str.length ? toUpper(null, str.charAt(0)) + str.slice(1) : '';\n }\n\n var strPrototype = String.prototype;\n var startsWithFn = strPrototype.startsWith || function (search) { return this.lastIndexOf(search, 0) === 0; };\n\n function startsWith(str, search) {\n return startsWithFn.call(str, search);\n }\n\n var endsWithFn = strPrototype.endsWith || function (search) { return this.substr(-search.length) === search; };\n\n function endsWith(str, search) {\n return endsWithFn.call(str, search);\n }\n\n var arrPrototype = Array.prototype;\n\n var includesFn = function (search, i) { return ~this.indexOf(search, i); };\n var includesStr = strPrototype.includes || includesFn;\n var includesArray = arrPrototype.includes || includesFn;\n\n function includes(obj, search) {\n return obj && (isString(obj) ? includesStr : includesArray).call(obj, search);\n }\n\n var findIndexFn = arrPrototype.findIndex || function (predicate) {\n var arguments$1 = arguments;\n\n for (var i = 0; i < this.length; i++) {\n if (predicate.call(arguments$1[1], this[i], i, this)) {\n return i;\n }\n }\n return -1;\n };\n\n function findIndex(array, predicate) {\n return findIndexFn.call(array, predicate);\n }\n\n var isArray = Array.isArray;\n\n function isFunction(obj) {\n return typeof obj === 'function';\n }\n\n function isObject(obj) {\n return obj !== null && typeof obj === 'object';\n }\n\n function isPlainObject(obj) {\n return isObject(obj) && Object.getPrototypeOf(obj) === objPrototype;\n }\n\n function isWindow(obj) {\n return isObject(obj) && obj === obj.window;\n }\n\n function isDocument(obj) {\n return isObject(obj) && obj.nodeType === 9;\n }\n\n function isJQuery(obj) {\n return isObject(obj) && !!obj.jquery;\n }\n\n function isNode(obj) {\n return obj instanceof Node || isObject(obj) && obj.nodeType >= 1;\n }\n\n var toString = objPrototype.toString;\n function isNodeCollection(obj) {\n return toString.call(obj).match(/^\\[object (NodeList|HTMLCollection)\\]$/);\n }\n\n function isBoolean(value) {\n return typeof value === 'boolean';\n }\n\n function isString(value) {\n return typeof value === 'string';\n }\n\n function isNumber(value) {\n return typeof value === 'number';\n }\n\n function isNumeric(value) {\n return isNumber(value) || isString(value) && !isNaN(value - parseFloat(value));\n }\n\n function isEmpty(obj) {\n return !(isArray(obj)\n ? obj.length\n : isObject(obj)\n ? Object.keys(obj).length\n : false\n );\n }\n\n function isUndefined(value) {\n return value === void 0;\n }\n\n function toBoolean(value) {\n return isBoolean(value)\n ? value\n : value === 'true' || value === '1' || value === ''\n ? true\n : value === 'false' || value === '0'\n ? false\n : value;\n }\n\n function toNumber(value) {\n var number = Number(value);\n return !isNaN(number) ? number : false;\n }\n\n function toFloat(value) {\n return parseFloat(value) || 0;\n }\n\n function toNode(element) {\n return isNode(element) || isWindow(element) || isDocument(element)\n ? element\n : isNodeCollection(element) || isJQuery(element)\n ? element[0]\n : isArray(element)\n ? toNode(element[0])\n : null;\n }\n\n function toNodes(element) {\n return isNode(element)\n ? [element]\n : isNodeCollection(element)\n ? arrPrototype.slice.call(element)\n : isArray(element)\n ? element.map(toNode).filter(Boolean)\n : isJQuery(element)\n ? element.toArray()\n : [];\n }\n\n function toList(value) {\n return isArray(value)\n ? value\n : isString(value)\n ? value.split(/,(?![^(]*\\))/).map(function (value) { return isNumeric(value)\n ? toNumber(value)\n : toBoolean(value.trim()); })\n : [value];\n }\n\n function toMs(time) {\n return !time\n ? 0\n : endsWith(time, 'ms')\n ? toFloat(time)\n : toFloat(time) * 1000;\n }\n\n function isEqual(value, other) {\n return value === other\n || isObject(value)\n && isObject(other)\n && Object.keys(value).length === Object.keys(other).length\n && each(value, function (val, key) { return val === other[key]; });\n }\n\n function swap(value, a, b) {\n return value.replace(new RegExp((a + \"|\" + b), 'mg'), function (match) {\n return match === a ? b : a;\n });\n }\n\n var assign = Object.assign || function (target) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n target = Object(target);\n for (var i = 0; i < args.length; i++) {\n var source = args[i];\n if (source !== null) {\n for (var key in source) {\n if (hasOwn(source, key)) {\n target[key] = source[key];\n }\n }\n }\n }\n return target;\n };\n\n function each(obj, cb) {\n for (var key in obj) {\n if (false === cb(obj[key], key)) {\n return false;\n }\n }\n return true;\n }\n\n function sortBy(array, prop) {\n return array.sort(function (ref, ref$1) {\n var propA = ref[prop]; if ( propA === void 0 ) propA = 0;\n var propB = ref$1[prop]; if ( propB === void 0 ) propB = 0;\n\n return propA > propB\n ? 1\n : propB > propA\n ? -1\n : 0;\n }\n );\n }\n\n function uniqueBy(array, prop) {\n var seen = new Set();\n return array.filter(function (ref) {\n var check = ref[prop];\n\n return seen.has(check)\n ? false\n : seen.add(check) || true;\n } // IE 11 does not return the Set object\n );\n }\n\n function clamp(number, min, max) {\n if ( min === void 0 ) min = 0;\n if ( max === void 0 ) max = 1;\n\n return Math.min(Math.max(toNumber(number) || 0, min), max);\n }\n\n function noop() {}\n\n function intersectRect(r1, r2) {\n return r1.left < r2.right &&\n r1.right > r2.left &&\n r1.top < r2.bottom &&\n r1.bottom > r2.top;\n }\n\n function pointInRect(point, rect) {\n return point.x <= rect.right &&\n point.x >= rect.left &&\n point.y <= rect.bottom &&\n point.y >= rect.top;\n }\n\n var Dimensions = {\n\n ratio: function(dimensions, prop, value) {\n var obj;\n\n\n var aProp = prop === 'width' ? 'height' : 'width';\n\n return ( obj = {}, obj[aProp] = dimensions[prop] ? Math.round(value * dimensions[aProp] / dimensions[prop]) : dimensions[aProp], obj[prop] = value, obj );\n },\n\n contain: function(dimensions, maxDimensions) {\n var this$1 = this;\n\n dimensions = assign({}, dimensions);\n\n each(dimensions, function (_, prop) { return dimensions = dimensions[prop] > maxDimensions[prop]\n ? this$1.ratio(dimensions, prop, maxDimensions[prop])\n : dimensions; }\n );\n\n return dimensions;\n },\n\n cover: function(dimensions, maxDimensions) {\n var this$1 = this;\n\n dimensions = this.contain(dimensions, maxDimensions);\n\n each(dimensions, function (_, prop) { return dimensions = dimensions[prop] < maxDimensions[prop]\n ? this$1.ratio(dimensions, prop, maxDimensions[prop])\n : dimensions; }\n );\n\n return dimensions;\n }\n\n };\n\n function attr(element, name, value) {\n\n if (isObject(name)) {\n for (var key in name) {\n attr(element, key, name[key]);\n }\n return;\n }\n\n if (isUndefined(value)) {\n element = toNode(element);\n return element && element.getAttribute(name);\n } else {\n toNodes(element).forEach(function (element) {\n\n if (isFunction(value)) {\n value = value.call(element, attr(element, name));\n }\n\n if (value === null) {\n removeAttr(element, name);\n } else {\n element.setAttribute(name, value);\n }\n });\n }\n\n }\n\n function hasAttr(element, name) {\n return toNodes(element).some(function (element) { return element.hasAttribute(name); });\n }\n\n function removeAttr(element, name) {\n element = toNodes(element);\n name.split(' ').forEach(function (name) { return element.forEach(function (element) { return element.hasAttribute(name) && element.removeAttribute(name); }\n ); }\n );\n }\n\n function data(element, attribute) {\n for (var i = 0, attrs = [attribute, (\"data-\" + attribute)]; i < attrs.length; i++) {\n if (hasAttr(element, attrs[i])) {\n return attr(element, attrs[i]);\n }\n }\n }\n\n function query(selector, context) {\n return toNode(selector) || find(selector, getContext(selector, context));\n }\n\n function queryAll(selector, context) {\n var nodes = toNodes(selector);\n return nodes.length && nodes || findAll(selector, getContext(selector, context));\n }\n\n function getContext(selector, context) {\n if ( context === void 0 ) context = document;\n\n return isContextSelector(selector) || isDocument(context)\n ? context\n : context.ownerDocument;\n }\n\n function find(selector, context) {\n return toNode(_query(selector, context, 'querySelector'));\n }\n\n function findAll(selector, context) {\n return toNodes(_query(selector, context, 'querySelectorAll'));\n }\n\n function _query(selector, context, queryFn) {\n if ( context === void 0 ) context = document;\n\n\n if (!selector || !isString(selector)) {\n return null;\n }\n\n selector = selector.replace(contextSanitizeRe, '$1 *');\n\n var removes;\n\n if (isContextSelector(selector)) {\n\n removes = [];\n\n selector = splitSelector(selector).map(function (selector, i) {\n\n var ctx = context;\n\n if (selector[0] === '!') {\n\n var selectors = selector.substr(1).trim().split(' ');\n ctx = closest(context.parentNode, selectors[0]);\n selector = selectors.slice(1).join(' ').trim();\n\n }\n\n if (selector[0] === '-') {\n\n var selectors$1 = selector.substr(1).trim().split(' ');\n var prev = (ctx || context).previousElementSibling;\n ctx = matches(prev, selector.substr(1)) ? prev : null;\n selector = selectors$1.slice(1).join(' ');\n\n }\n\n if (!ctx) {\n return null;\n }\n\n if (!ctx.id) {\n ctx.id = \"uk-\" + (Date.now()) + i;\n removes.push(function () { return removeAttr(ctx, 'id'); });\n }\n\n return (\"#\" + (escape(ctx.id)) + \" \" + selector);\n\n }).filter(Boolean).join(',');\n\n context = document;\n\n }\n\n try {\n\n return context[queryFn](selector);\n\n } catch (e) {\n\n return null;\n\n } finally {\n\n removes && removes.forEach(function (remove) { return remove(); });\n\n }\n\n }\n\n var contextSelectorRe = /(^|[^\\\\],)\\s*[!>+~-]/;\n var contextSanitizeRe = /([!>+~-])(?=\\s+[!>+~-]|\\s*$)/g;\n\n function isContextSelector(selector) {\n return isString(selector) && selector.match(contextSelectorRe);\n }\n\n var selectorRe = /.*?[^\\\\](?:,|$)/g;\n\n function splitSelector(selector) {\n return selector.match(selectorRe).map(function (selector) { return selector.replace(/,$/, '').trim(); });\n }\n\n var elProto = Element.prototype;\n var matchesFn = elProto.matches || elProto.webkitMatchesSelector || elProto.msMatchesSelector;\n\n function matches(element, selector) {\n return toNodes(element).some(function (element) { return matchesFn.call(element, selector); });\n }\n\n var closestFn = elProto.closest || function (selector) {\n var ancestor = this;\n\n do {\n\n if (matches(ancestor, selector)) {\n return ancestor;\n }\n\n ancestor = ancestor.parentNode;\n\n } while (ancestor && ancestor.nodeType === 1);\n };\n\n function closest(element, selector) {\n\n if (startsWith(selector, '>')) {\n selector = selector.slice(1);\n }\n\n return isNode(element)\n ? element.parentNode && closestFn.call(element, selector)\n : toNodes(element).map(function (element) { return closest(element, selector); }).filter(Boolean);\n }\n\n function parents(element, selector) {\n var elements = [];\n var parent = toNode(element).parentNode;\n\n while (parent && parent.nodeType === 1) {\n\n if (matches(parent, selector)) {\n elements.push(parent);\n }\n\n parent = parent.parentNode;\n }\n\n return elements;\n }\n\n var escapeFn = window.CSS && CSS.escape || function (css) { return css.replace(/([^\\x7f-\\uFFFF\\w-])/g, function (match) { return (\"\\\\\" + match); }); };\n function escape(css) {\n return isString(css) ? escapeFn.call(null, css) : '';\n }\n\n var voidElements = {\n area: true,\n base: true,\n br: true,\n col: true,\n embed: true,\n hr: true,\n img: true,\n input: true,\n keygen: true,\n link: true,\n menuitem: true,\n meta: true,\n param: true,\n source: true,\n track: true,\n wbr: true\n };\n function isVoidElement(element) {\n return toNodes(element).some(function (element) { return voidElements[element.tagName.toLowerCase()]; });\n }\n\n function isVisible(element) {\n return toNodes(element).some(function (element) { return element.offsetWidth || element.offsetHeight || element.getClientRects().length; });\n }\n\n var selInput = 'input,select,textarea,button';\n function isInput(element) {\n return toNodes(element).some(function (element) { return matches(element, selInput); });\n }\n\n function filter(element, selector) {\n return toNodes(element).filter(function (element) { return matches(element, selector); });\n }\n\n function within(element, selector) {\n return !isString(selector)\n ? element === selector || (isDocument(selector)\n ? selector.documentElement\n : toNode(selector)).contains(toNode(element)) // IE 11 document does not implement contains\n : matches(element, selector) || closest(element, selector);\n }\n\n function on() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n\n var ref = getArgs(args);\n var targets = ref[0];\n var type = ref[1];\n var selector = ref[2];\n var listener = ref[3];\n var useCapture = ref[4];\n\n targets = toEventTargets(targets);\n\n if (selector) {\n listener = delegate(targets, selector, listener);\n }\n\n if (listener.length > 1) {\n listener = detail(listener);\n }\n\n type.split(' ').forEach(function (type) { return targets.forEach(function (target) { return target.addEventListener(type, listener, useCapture); }\n ); }\n );\n return function () { return off(targets, type, listener, useCapture); };\n }\n\n function off(targets, type, listener, useCapture) {\n if ( useCapture === void 0 ) useCapture = false;\n\n targets = toEventTargets(targets);\n type.split(' ').forEach(function (type) { return targets.forEach(function (target) { return target.removeEventListener(type, listener, useCapture); }\n ); }\n );\n }\n\n function once() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n\n var ref = getArgs(args);\n var element = ref[0];\n var type = ref[1];\n var selector = ref[2];\n var listener = ref[3];\n var useCapture = ref[4];\n var condition = ref[5];\n var off = on(element, type, selector, function (e) {\n var result = !condition || condition(e);\n if (result) {\n off();\n listener(e, result);\n }\n }, useCapture);\n\n return off;\n }\n\n function trigger(targets, event, detail) {\n return toEventTargets(targets).reduce(function (notCanceled, target) { return notCanceled && target.dispatchEvent(createEvent(event, true, true, detail)); }\n , true);\n }\n\n function createEvent(e, bubbles, cancelable, detail) {\n if ( bubbles === void 0 ) bubbles = true;\n if ( cancelable === void 0 ) cancelable = false;\n\n if (isString(e)) {\n var event = document.createEvent('CustomEvent'); // IE 11\n event.initCustomEvent(e, bubbles, cancelable, detail);\n e = event;\n }\n\n return e;\n }\n\n function getArgs(args) {\n if (isFunction(args[2])) {\n args.splice(2, 0, false);\n }\n return args;\n }\n\n function delegate(delegates, selector, listener) {\n var this$1 = this;\n\n return function (e) {\n\n delegates.forEach(function (delegate) {\n\n var current = selector[0] === '>'\n ? findAll(selector, delegate).reverse().filter(function (element) { return within(e.target, element); })[0]\n : closest(e.target, selector);\n\n if (current) {\n e.delegate = delegate;\n e.current = current;\n\n listener.call(this$1, e);\n }\n\n });\n\n };\n }\n\n function detail(listener) {\n return function (e) { return isArray(e.detail) ? listener.apply(void 0, [e].concat(e.detail)) : listener(e); };\n }\n\n function isEventTarget(target) {\n return target && 'addEventListener' in target;\n }\n\n function toEventTarget(target) {\n return isEventTarget(target) ? target : toNode(target);\n }\n\n function toEventTargets(target) {\n return isArray(target)\n ? target.map(toEventTarget).filter(Boolean)\n : isString(target)\n ? findAll(target)\n : isEventTarget(target)\n ? [target]\n : toNodes(target);\n }\n\n function isTouch(e) {\n return e.pointerType === 'touch' || e.touches;\n }\n\n function getEventPos(e, prop) {\n if ( prop === void 0 ) prop = 'client';\n\n var touches = e.touches;\n var changedTouches = e.changedTouches;\n var ref = touches && touches[0] || changedTouches && changedTouches[0] || e;\n var x = ref[(prop + \"X\")];\n var y = ref[(prop + \"Y\")];\n\n return {x: x, y: y};\n }\n\n /* global setImmediate */\n\n var Promise = 'Promise' in window ? window.Promise : PromiseFn;\n\n var Deferred = function() {\n var this$1 = this;\n\n this.promise = new Promise(function (resolve, reject) {\n this$1.reject = reject;\n this$1.resolve = resolve;\n });\n };\n\n /**\n * Promises/A+ polyfill v1.1.4 (https://github.com/bramstein/promis)\n */\n\n var RESOLVED = 0;\n var REJECTED = 1;\n var PENDING = 2;\n\n var async = 'setImmediate' in window ? setImmediate : setTimeout;\n\n function PromiseFn(executor) {\n\n this.state = PENDING;\n this.value = undefined;\n this.deferred = [];\n\n var promise = this;\n\n try {\n executor(\n function (x) {\n promise.resolve(x);\n },\n function (r) {\n promise.reject(r);\n }\n );\n } catch (e) {\n promise.reject(e);\n }\n }\n\n PromiseFn.reject = function (r) {\n return new PromiseFn(function (resolve, reject) {\n reject(r);\n });\n };\n\n PromiseFn.resolve = function (x) {\n return new PromiseFn(function (resolve, reject) {\n resolve(x);\n });\n };\n\n PromiseFn.all = function all(iterable) {\n return new PromiseFn(function (resolve, reject) {\n var result = [];\n var count = 0;\n\n if (iterable.length === 0) {\n resolve(result);\n }\n\n function resolver(i) {\n return function (x) {\n result[i] = x;\n count += 1;\n\n if (count === iterable.length) {\n resolve(result);\n }\n };\n }\n\n for (var i = 0; i < iterable.length; i += 1) {\n PromiseFn.resolve(iterable[i]).then(resolver(i), reject);\n }\n });\n };\n\n PromiseFn.race = function race(iterable) {\n return new PromiseFn(function (resolve, reject) {\n for (var i = 0; i < iterable.length; i += 1) {\n PromiseFn.resolve(iterable[i]).then(resolve, reject);\n }\n });\n };\n\n var p = PromiseFn.prototype;\n\n p.resolve = function resolve(x) {\n var promise = this;\n\n if (promise.state === PENDING) {\n if (x === promise) {\n throw new TypeError('Promise settled with itself.');\n }\n\n var called = false;\n\n try {\n var then = x && x.then;\n\n if (x !== null && isObject(x) && isFunction(then)) {\n then.call(\n x,\n function (x) {\n if (!called) {\n promise.resolve(x);\n }\n called = true;\n },\n function (r) {\n if (!called) {\n promise.reject(r);\n }\n called = true;\n }\n );\n return;\n }\n } catch (e) {\n if (!called) {\n promise.reject(e);\n }\n return;\n }\n\n promise.state = RESOLVED;\n promise.value = x;\n promise.notify();\n }\n };\n\n p.reject = function reject(reason) {\n var promise = this;\n\n if (promise.state === PENDING) {\n if (reason === promise) {\n throw new TypeError('Promise settled with itself.');\n }\n\n promise.state = REJECTED;\n promise.value = reason;\n promise.notify();\n }\n };\n\n p.notify = function notify() {\n var this$1 = this;\n\n async(function () {\n if (this$1.state !== PENDING) {\n while (this$1.deferred.length) {\n var ref = this$1.deferred.shift();\n var onResolved = ref[0];\n var onRejected = ref[1];\n var resolve = ref[2];\n var reject = ref[3];\n\n try {\n if (this$1.state === RESOLVED) {\n if (isFunction(onResolved)) {\n resolve(onResolved.call(undefined, this$1.value));\n } else {\n resolve(this$1.value);\n }\n } else if (this$1.state === REJECTED) {\n if (isFunction(onRejected)) {\n resolve(onRejected.call(undefined, this$1.value));\n } else {\n reject(this$1.value);\n }\n }\n } catch (e) {\n reject(e);\n }\n }\n }\n });\n };\n\n p.then = function then(onResolved, onRejected) {\n var this$1 = this;\n\n return new PromiseFn(function (resolve, reject) {\n this$1.deferred.push([onResolved, onRejected, resolve, reject]);\n this$1.notify();\n });\n };\n\n p.catch = function (onRejected) {\n return this.then(undefined, onRejected);\n };\n\n function ajax(url, options) {\n return new Promise(function (resolve, reject) {\n\n var env = assign({\n data: null,\n method: 'GET',\n headers: {},\n xhr: new XMLHttpRequest(),\n beforeSend: noop,\n responseType: ''\n }, options);\n\n env.beforeSend(env);\n\n var xhr = env.xhr;\n\n for (var prop in env) {\n if (prop in xhr) {\n try {\n\n xhr[prop] = env[prop];\n\n } catch (e) {}\n }\n }\n\n xhr.open(env.method.toUpperCase(), url);\n\n for (var header in env.headers) {\n xhr.setRequestHeader(header, env.headers[header]);\n }\n\n on(xhr, 'load', function () {\n\n if (xhr.status === 0 || xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) {\n resolve(xhr);\n } else {\n reject(assign(Error(xhr.statusText), {\n xhr: xhr,\n status: xhr.status\n }));\n }\n\n });\n\n on(xhr, 'error', function () { return reject(assign(Error('Network Error'), {xhr: xhr})); });\n on(xhr, 'timeout', function () { return reject(assign(Error('Network Timeout'), {xhr: xhr})); });\n\n xhr.send(env.data);\n });\n }\n\n function getImage(src, srcset, sizes) {\n\n return new Promise(function (resolve, reject) {\n var img = new Image();\n\n img.onerror = reject;\n img.onload = function () { return resolve(img); };\n\n sizes && (img.sizes = sizes);\n srcset && (img.srcset = srcset);\n img.src = src;\n });\n\n }\n\n /* global DocumentTouch */\n\n var isIE = /msie|trident/i.test(window.navigator.userAgent);\n var isRtl = attr(document.documentElement, 'dir') === 'rtl';\n\n var hasTouchEvents = 'ontouchstart' in window;\n var hasPointerEvents = window.PointerEvent;\n var hasTouch = hasTouchEvents\n || window.DocumentTouch && document instanceof DocumentTouch\n || navigator.maxTouchPoints; // IE >=11\n\n var pointerDown = hasPointerEvents ? 'pointerdown' : hasTouchEvents ? 'touchstart' : 'mousedown';\n var pointerMove = hasPointerEvents ? 'pointermove' : hasTouchEvents ? 'touchmove' : 'mousemove';\n var pointerUp = hasPointerEvents ? 'pointerup' : hasTouchEvents ? 'touchend' : 'mouseup';\n var pointerEnter = hasPointerEvents ? 'pointerenter' : hasTouchEvents ? '' : 'mouseenter';\n var pointerLeave = hasPointerEvents ? 'pointerleave' : hasTouchEvents ? '' : 'mouseleave';\n var pointerCancel = hasPointerEvents ? 'pointercancel' : 'touchcancel';\n\n function ready(fn) {\n\n if (document.readyState !== 'loading') {\n fn();\n return;\n }\n\n var unbind = on(document, 'DOMContentLoaded', function () {\n unbind();\n fn();\n });\n }\n\n function index(element, ref) {\n return ref\n ? toNodes(element).indexOf(toNode(ref))\n : toNodes((element = toNode(element)) && element.parentNode.children).indexOf(element);\n }\n\n function getIndex(i, elements, current, finite) {\n if ( current === void 0 ) current = 0;\n if ( finite === void 0 ) finite = false;\n\n\n elements = toNodes(elements);\n\n var length = elements.length;\n\n i = isNumeric(i)\n ? toNumber(i)\n : i === 'next'\n ? current + 1\n : i === 'previous'\n ? current - 1\n : index(elements, i);\n\n if (finite) {\n return clamp(i, 0, length - 1);\n }\n\n i %= length;\n\n return i < 0 ? i + length : i;\n }\n\n function empty(element) {\n element = $(element);\n element.innerHTML = '';\n return element;\n }\n\n function html(parent, html) {\n parent = $(parent);\n return isUndefined(html)\n ? parent.innerHTML\n : append(parent.hasChildNodes() ? empty(parent) : parent, html);\n }\n\n function prepend(parent, element) {\n\n parent = $(parent);\n\n if (!parent.hasChildNodes()) {\n return append(parent, element);\n } else {\n return insertNodes(element, function (element) { return parent.insertBefore(element, parent.firstChild); });\n }\n }\n\n function append(parent, element) {\n parent = $(parent);\n return insertNodes(element, function (element) { return parent.appendChild(element); });\n }\n\n function before(ref, element) {\n ref = $(ref);\n return insertNodes(element, function (element) { return ref.parentNode.insertBefore(element, ref); });\n }\n\n function after(ref, element) {\n ref = $(ref);\n return insertNodes(element, function (element) { return ref.nextSibling\n ? before(ref.nextSibling, element)\n : append(ref.parentNode, element); }\n );\n }\n\n function insertNodes(element, fn) {\n element = isString(element) ? fragment(element) : element;\n return element\n ? 'length' in element\n ? toNodes(element).map(fn)\n : fn(element)\n : null;\n }\n\n function remove(element) {\n toNodes(element).map(function (element) { return element.parentNode && element.parentNode.removeChild(element); });\n }\n\n function wrapAll(element, structure) {\n\n structure = toNode(before(element, structure));\n\n while (structure.firstChild) {\n structure = structure.firstChild;\n }\n\n append(structure, element);\n\n return structure;\n }\n\n function wrapInner(element, structure) {\n return toNodes(toNodes(element).map(function (element) { return element.hasChildNodes ? wrapAll(toNodes(element.childNodes), structure) : append(element, structure); }\n ));\n }\n\n function unwrap(element) {\n toNodes(element)\n .map(function (element) { return element.parentNode; })\n .filter(function (value, index, self) { return self.indexOf(value) === index; })\n .forEach(function (parent) {\n before(parent, parent.childNodes);\n remove(parent);\n });\n }\n\n var fragmentRe = /^\\s*<(\\w+|!)[^>]*>/;\n var singleTagRe = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/;\n\n function fragment(html) {\n\n var matches = singleTagRe.exec(html);\n if (matches) {\n return document.createElement(matches[1]);\n }\n\n var container = document.createElement('div');\n if (fragmentRe.test(html)) {\n container.insertAdjacentHTML('beforeend', html.trim());\n } else {\n container.textContent = html;\n }\n\n return container.childNodes.length > 1 ? toNodes(container.childNodes) : container.firstChild;\n\n }\n\n function apply(node, fn) {\n\n if (!node || node.nodeType !== 1) {\n return;\n }\n\n fn(node);\n node = node.firstElementChild;\n while (node) {\n apply(node, fn);\n node = node.nextElementSibling;\n }\n }\n\n function $(selector, context) {\n return !isString(selector)\n ? toNode(selector)\n : isHtml(selector)\n ? toNode(fragment(selector))\n : find(selector, context);\n }\n\n function $$(selector, context) {\n return !isString(selector)\n ? toNodes(selector)\n : isHtml(selector)\n ? toNodes(fragment(selector))\n : findAll(selector, context);\n }\n\n function isHtml(str) {\n return str[0] === '<' || str.match(/^\\s*</);\n }\n\n function addClass(element) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n apply$1(element, args, 'add');\n }\n\n function removeClass(element) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n apply$1(element, args, 'remove');\n }\n\n function removeClasses(element, cls) {\n attr(element, 'class', function (value) { return (value || '').replace(new RegExp((\"\\\\b\" + cls + \"\\\\b\"), 'g'), ''); });\n }\n\n function replaceClass(element) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n args[0] && removeClass(element, args[0]);\n args[1] && addClass(element, args[1]);\n }\n\n function hasClass(element, cls) {\n return cls && toNodes(element).some(function (element) { return element.classList.contains(cls.split(' ')[0]); });\n }\n\n function toggleClass(element) {\n var args = [], len = arguments.length - 1;\n while ( len-- > 0 ) args[ len ] = arguments[ len + 1 ];\n\n\n if (!args.length) {\n return;\n }\n\n args = getArgs$1(args);\n\n var force = !isString(args[args.length - 1]) ? args.pop() : []; // in iOS 9.3 force === undefined evaluates to false\n\n args = args.filter(Boolean);\n\n toNodes(element).forEach(function (ref) {\n var classList = ref.classList;\n\n for (var i = 0; i < args.length; i++) {\n supports.Force\n ? classList.toggle.apply(classList, [args[i]].concat(force))\n : (classList[(!isUndefined(force) ? force : !classList.contains(args[i])) ? 'add' : 'remove'](args[i]));\n }\n });\n\n }\n\n function apply$1(element, args, fn) {\n args = getArgs$1(args).filter(Boolean);\n\n args.length && toNodes(element).forEach(function (ref) {\n var classList = ref.classList;\n\n supports.Multiple\n ? classList[fn].apply(classList, args)\n : args.forEach(function (cls) { return classList[fn](cls); });\n });\n }\n\n function getArgs$1(args) {\n return args.reduce(function (args, arg) { return args.concat.call(args, isString(arg) && includes(arg, ' ') ? arg.trim().split(' ') : arg); }\n , []);\n }\n\n // IE 11\n var supports = {\n\n get Multiple() {\n return this.get('_multiple');\n },\n\n get Force() {\n return this.get('_force');\n },\n\n get: function(key) {\n\n if (!hasOwn(this, key)) {\n var ref = document.createElement('_');\n var classList = ref.classList;\n classList.add('a', 'b');\n classList.toggle('c', false);\n this._multiple = classList.contains('b');\n this._force = !classList.contains('c');\n }\n\n return this[key];\n }\n\n };\n\n var cssNumber = {\n 'animation-iteration-count': true,\n 'column-count': true,\n 'fill-opacity': true,\n 'flex-grow': true,\n 'flex-shrink': true,\n 'font-weight': true,\n 'line-height': true,\n 'opacity': true,\n 'order': true,\n 'orphans': true,\n 'stroke-dasharray': true,\n 'stroke-dashoffset': true,\n 'widows': true,\n 'z-index': true,\n 'zoom': true\n };\n\n function css(element, property, value) {\n\n return toNodes(element).map(function (element) {\n\n if (isString(property)) {\n\n property = propName(property);\n\n if (isUndefined(value)) {\n return getStyle(element, property);\n } else if (!value && !isNumber(value)) {\n element.style.removeProperty(property);\n } else {\n element.style[property] = isNumeric(value) && !cssNumber[property] ? (value + \"px\") : value;\n }\n\n } else if (isArray(property)) {\n\n var styles = getStyles(element);\n\n return property.reduce(function (props, property) {\n props[property] = styles[propName(property)];\n return props;\n }, {});\n\n } else if (isObject(property)) {\n each(property, function (value, property) { return css(element, property, value); });\n }\n\n return element;\n\n })[0];\n\n }\n\n function getStyles(element, pseudoElt) {\n element = toNode(element);\n return element.ownerDocument.defaultView.getComputedStyle(element, pseudoElt);\n }\n\n function getStyle(element, property, pseudoElt) {\n return getStyles(element, pseudoElt)[property];\n }\n\n var vars = {};\n\n function getCssVar(name) {\n\n var docEl = document.documentElement;\n\n if (!isIE) {\n return getStyles(docEl).getPropertyValue((\"--uk-\" + name));\n }\n\n if (!(name in vars)) {\n\n /* usage in css: .uk-name:before { content:\"xyz\" } */\n\n var element = append(docEl, document.createElement('div'));\n\n addClass(element, (\"uk-\" + name));\n\n vars[name] = getStyle(element, 'content', ':before').replace(/^[\"'](.*)[\"']$/, '$1');\n\n remove(element);\n\n }\n\n return vars[name];\n\n }\n\n var cssProps = {};\n\n function propName(name) {\n\n var ret = cssProps[name];\n if (!ret) {\n ret = cssProps[name] = vendorPropName(name) || name;\n }\n return ret;\n }\n\n var cssPrefixes = ['webkit', 'moz', 'ms'];\n\n function vendorPropName(name) {\n\n name = hyphenate(name);\n\n var ref = document.documentElement;\n var style = ref.style;\n\n if (name in style) {\n return name;\n }\n\n var i = cssPrefixes.length, prefixedName;\n\n while (i--) {\n prefixedName = \"-\" + (cssPrefixes[i]) + \"-\" + name;\n if (prefixedName in style) {\n return prefixedName;\n }\n }\n }\n\n function transition(element, props, duration, timing) {\n if ( duration === void 0 ) duration = 400;\n if ( timing === void 0 ) timing = 'linear';\n\n\n return Promise.all(toNodes(element).map(function (element) { return new Promise(function (resolve, reject) {\n\n for (var name in props) {\n var value = css(element, name);\n if (value === '') {\n css(element, name, value);\n }\n }\n\n var timer = setTimeout(function () { return trigger(element, 'transitionend'); }, duration);\n\n once(element, 'transitionend transitioncanceled', function (ref) {\n var type = ref.type;\n\n clearTimeout(timer);\n removeClass(element, 'uk-transition');\n css(element, {\n 'transition-property': '',\n 'transition-duration': '',\n 'transition-timing-function': ''\n });\n type === 'transitioncanceled' ? reject() : resolve();\n }, false, function (ref) {\n var target = ref.target;\n\n return element === target;\n });\n\n addClass(element, 'uk-transition');\n css(element, assign({\n 'transition-property': Object.keys(props).map(propName).join(','),\n 'transition-duration': (duration + \"ms\"),\n 'transition-timing-function': timing\n }, props));\n\n }); }\n ));\n\n }\n\n var Transition = {\n\n start: transition,\n\n stop: function(element) {\n trigger(element, 'transitionend');\n return Promise.resolve();\n },\n\n cancel: function(element) {\n trigger(element, 'transitioncanceled');\n },\n\n inProgress: function(element) {\n return hasClass(element, 'uk-transition');\n }\n\n };\n\n var animationPrefix = 'uk-animation-';\n var clsCancelAnimation = 'uk-cancel-animation';\n\n function animate(element, animation, duration, origin, out) {\n var arguments$1 = arguments;\n if ( duration === void 0 ) duration = 200;\n\n\n return Promise.all(toNodes(element).map(function (element) { return new Promise(function (resolve, reject) {\n\n if (hasClass(element, clsCancelAnimation)) {\n requestAnimationFrame(function () { return Promise.resolve().then(function () { return animate.apply(void 0, arguments$1).then(resolve, reject); }\n ); }\n );\n return;\n }\n\n var cls = animation + \" \" + animationPrefix + (out ? 'leave' : 'enter');\n\n if (startsWith(animation, animationPrefix)) {\n\n if (origin) {\n cls += \" uk-transform-origin-\" + origin;\n }\n\n if (out) {\n cls += \" \" + animationPrefix + \"reverse\";\n }\n\n }\n\n reset();\n\n once(element, 'animationend animationcancel', function (ref) {\n var type = ref.type;\n\n\n var hasReset = false;\n\n if (type === 'animationcancel') {\n reject();\n reset();\n } else {\n resolve();\n Promise.resolve().then(function () {\n hasReset = true;\n reset();\n });\n }\n\n requestAnimationFrame(function () {\n if (!hasReset) {\n addClass(element, clsCancelAnimation);\n\n requestAnimationFrame(function () { return removeClass(element, clsCancelAnimation); });\n }\n });\n\n }, false, function (ref) {\n var target = ref.target;\n\n return element === target;\n });\n\n css(element, 'animationDuration', (duration + \"ms\"));\n addClass(element, cls);\n\n function reset() {\n css(element, 'animationDuration', '');\n removeClasses(element, (animationPrefix + \"\\\\S*\"));\n }\n\n }); }\n ));\n\n }\n\n var inProgress = new RegExp((animationPrefix + \"(enter|leave)\"));\n var Animation = {\n\n in: function(element, animation, duration, origin) {\n return animate(element, animation, duration, origin, false);\n },\n\n out: function(element, animation, duration, origin) {\n return animate(element, animation, duration, origin, true);\n },\n\n inProgress: function(element) {\n return inProgress.test(attr(element, 'class'));\n },\n\n cancel: function(element) {\n trigger(element, 'animationcancel');\n }\n\n };\n\n var dirs = {\n width: ['x', 'left', 'right'],\n height: ['y', 'top', 'bottom']\n };\n\n function positionAt(element, target, elAttach, targetAttach, elOffset, targetOffset, flip, boundary) {\n\n elAttach = getPos(elAttach);\n targetAttach = getPos(targetAttach);\n\n var flipped = {element: elAttach, target: targetAttach};\n\n if (!element || !target) {\n return flipped;\n }\n\n var dim = getDimensions(element);\n var targetDim = getDimensions(target);\n var position = targetDim;\n\n moveTo(position, elAttach, dim, -1);\n moveTo(position, targetAttach, targetDim, 1);\n\n elOffset = getOffsets(elOffset, dim.width, dim.height);\n targetOffset = getOffsets(targetOffset, targetDim.width, targetDim.height);\n\n elOffset['x'] += targetOffset['x'];\n elOffset['y'] += targetOffset['y'];\n\n position.left += elOffset['x'];\n position.top += elOffset['y'];\n\n if (flip) {\n\n var boundaries = [getDimensions(getWindow(element))];\n\n if (boundary) {\n boundaries.unshift(getDimensions(boundary));\n }\n\n each(dirs, function (ref, prop) {\n var dir = ref[0];\n var align = ref[1];\n var alignFlip = ref[2];\n\n\n if (!(flip === true || includes(flip, dir))) {\n return;\n }\n\n boundaries.some(function (boundary) {\n\n var elemOffset = elAttach[dir] === align\n ? -dim[prop]\n : elAttach[dir] === alignFlip\n ? dim[prop]\n : 0;\n\n var targetOffset = targetAttach[dir] === align\n ? targetDim[prop]\n : targetAttach[dir] === alignFlip\n ? -targetDim[prop]\n : 0;\n\n if (position[align] < boundary[align] || position[align] + dim[prop] > boundary[alignFlip]) {\n\n var centerOffset = dim[prop] / 2;\n var centerTargetOffset = targetAttach[dir] === 'center' ? -targetDim[prop] / 2 : 0;\n\n return elAttach[dir] === 'center' && (\n apply(centerOffset, centerTargetOffset)\n || apply(-centerOffset, -centerTargetOffset)\n ) || apply(elemOffset, targetOffset);\n\n }\n\n function apply(elemOffset, targetOffset) {\n\n var newVal = position[align] + elemOffset + targetOffset - elOffset[dir] * 2;\n\n if (newVal >= boundary[align] && newVal + dim[prop] <= boundary[alignFlip]) {\n position[align] = newVal;\n\n ['element', 'target'].forEach(function (el) {\n flipped[el][dir] = !elemOffset\n ? flipped[el][dir]\n : flipped[el][dir] === dirs[prop][1]\n ? dirs[prop][2]\n : dirs[prop][1];\n });\n\n return true;\n }\n\n }\n\n });\n\n });\n }\n\n offset(element, position);\n\n return flipped;\n }\n\n function offset(element, coordinates) {\n\n element = toNode(element);\n\n if (coordinates) {\n\n var currentOffset = offset(element);\n var pos = css(element, 'position');\n\n ['left', 'top'].forEach(function (prop) {\n if (prop in coordinates) {\n var value = css(element, prop);\n css(element, prop, coordinates[prop] - currentOffset[prop]\n + toFloat(pos === 'absolute' && value === 'auto'\n ? position(element)[prop]\n : value)\n );\n }\n });\n\n return;\n }\n\n return getDimensions(element);\n }\n\n function getDimensions(element) {\n\n element = toNode(element);\n\n var ref = getWindow(element);\n var top = ref.pageYOffset;\n var left = ref.pageXOffset;\n\n if (isWindow(element)) {\n\n var height = element.innerHeight;\n var width = element.innerWidth;\n\n return {\n top: top,\n left: left,\n height: height,\n width: width,\n bottom: top + height,\n right: left + width\n };\n }\n\n var style, hidden;\n\n if (!isVisible(element) && css(element, 'display') === 'none') {\n\n style = attr(element, 'style');\n hidden = attr(element, 'hidden');\n\n attr(element, {\n style: ((style || '') + \";display:block !important;\"),\n hidden: null\n });\n }\n\n var rect = element.getBoundingClientRect();\n\n if (!isUndefined(style)) {\n attr(element, {style: style, hidden: hidden});\n }\n\n return {\n height: rect.height,\n width: rect.width,\n top: rect.top + top,\n left: rect.left + left,\n bottom: rect.bottom + top,\n right: rect.right + left\n };\n }\n\n function position(element) {\n element = toNode(element);\n\n var parent = element.offsetParent || getDocEl(element);\n var parentOffset = offset(parent);\n var ref = ['top', 'left'].reduce(function (props, prop) {\n var propName = ucfirst(prop);\n props[prop] -= parentOffset[prop]\n + toFloat(css(element, (\"margin\" + propName)))\n + toFloat(css(parent, (\"border\" + propName + \"Width\")));\n return props;\n }, offset(element));\n var top = ref.top;\n var left = ref.left;\n\n return {top: top, left: left};\n }\n\n var height = dimension('height');\n var width = dimension('width');\n\n function dimension(prop) {\n var propName = ucfirst(prop);\n return function (element, value) {\n\n element = toNode(element);\n\n if (isUndefined(value)) {\n\n if (isWindow(element)) {\n return element[(\"inner\" + propName)];\n }\n\n if (isDocument(element)) {\n var doc = element.documentElement;\n return Math.max(doc[(\"offset\" + propName)], doc[(\"scroll\" + propName)]);\n }\n\n value = css(element, prop);\n value = value === 'auto' ? element[(\"offset\" + propName)] : toFloat(value) || 0;\n\n return value - boxModelAdjust(prop, element);\n\n } else {\n\n css(element, prop, !value && value !== 0\n ? ''\n : +value + boxModelAdjust(prop, element) + 'px'\n );\n\n }\n\n };\n }\n\n function boxModelAdjust(prop, element, sizing) {\n if ( sizing === void 0 ) sizing = 'border-box';\n\n return css(element, 'boxSizing') === sizing\n ? dirs[prop].slice(1).map(ucfirst).reduce(function (value, prop) { return value\n + toFloat(css(element, (\"padding\" + prop)))\n + toFloat(css(element, (\"border\" + prop + \"Width\"))); }\n , 0)\n : 0;\n }\n\n function moveTo(position, attach, dim, factor) {\n each(dirs, function (ref, prop) {\n var dir = ref[0];\n var align = ref[1];\n var alignFlip = ref[2];\n\n if (attach[dir] === alignFlip) {\n position[align] += dim[prop] * factor;\n } else if (attach[dir] === 'center') {\n position[align] += dim[prop] * factor / 2;\n }\n });\n }\n\n function getPos(pos) {\n\n var x = /left|center|right/;\n var y = /top|center|bottom/;\n\n pos = (pos || '').split(' ');\n\n if (pos.length === 1) {\n pos = x.test(pos[0])\n ? pos.concat(['center'])\n : y.test(pos[0])\n ? ['center'].concat(pos)\n : ['center', 'center'];\n }\n\n return {\n x: x.test(pos[0]) ? pos[0] : 'center',\n y: y.test(pos[1]) ? pos[1] : 'center'\n };\n }\n\n function getOffsets(offsets, width, height) {\n\n var ref = (offsets || '').split(' ');\n var x = ref[0];\n var y = ref[1];\n\n return {\n x: x ? toFloat(x) * (endsWith(x, '%') ? width / 100 : 1) : 0,\n y: y ? toFloat(y) * (endsWith(y, '%') ? height / 100 : 1) : 0\n };\n }\n\n function flipPosition(pos) {\n switch (pos) {\n case 'left':\n return 'right';\n case 'right':\n return 'left';\n case 'top':\n return 'bottom';\n case 'bottom':\n return 'top';\n default:\n return pos;\n }\n }\n\n function isInView(element, topOffset, leftOffset) {\n if ( topOffset === void 0 ) topOffset = 0;\n if ( leftOffset === void 0 ) leftOffset = 0;\n\n\n if (!isVisible(element)) {\n return false;\n }\n\n element = toNode(element);\n\n var win = getWindow(element);\n var client = element.getBoundingClientRect();\n var bounding = {\n top: -topOffset,\n left: -leftOffset,\n bottom: topOffset + height(win),\n right: leftOffset + width(win)\n };\n\n return intersectRect(client, bounding) || pointInRect({x: client.left, y: client.top}, bounding);\n\n }\n\n function scrolledOver(element, heightOffset) {\n if ( heightOffset === void 0 ) heightOffset = 0;\n\n\n if (!isVisible(element)) {\n return 0;\n }\n\n element = toNode(element);\n\n var win = getWindow(element);\n var doc = getDocument(element);\n var elHeight = element.offsetHeight + heightOffset;\n var ref = offsetPosition(element);\n var top = ref[0];\n var vp = height(win);\n var vh = vp + Math.min(0, top - vp);\n var diff = Math.max(0, vp - (height(doc) + heightOffset - (top + elHeight)));\n\n return clamp(((vh + win.pageYOffset - top) / ((vh + (elHeight - (diff < vp ? diff : 0))) / 100)) / 100);\n }\n\n function scrollTop(element, top) {\n element = toNode(element);\n\n if (isWindow(element) || isDocument(element)) {\n var ref = getWindow(element);\n var scrollTo = ref.scrollTo;\n var pageXOffset = ref.pageXOffset;\n scrollTo(pageXOffset, top);\n } else {\n element.scrollTop = top;\n }\n }\n\n function offsetPosition(element) {\n var offset = [0, 0];\n\n do {\n\n offset[0] += element.offsetTop;\n offset[1] += element.offsetLeft;\n\n if (css(element, 'position') === 'fixed') {\n var win = getWindow(element);\n offset[0] += win.pageYOffset;\n offset[1] += win.pageXOffset;\n return offset;\n }\n\n } while ((element = element.offsetParent));\n\n return offset;\n }\n\n function toPx(value, property, element) {\n if ( property === void 0 ) property = 'width';\n if ( element === void 0 ) element = window;\n\n return isNumeric(value)\n ? +value\n : endsWith(value, 'vh')\n ? percent(height(getWindow(element)), value)\n : endsWith(value, 'vw')\n ? percent(width(getWindow(element)), value)\n : endsWith(value, '%')\n ? percent(getDimensions(element)[property], value)\n : toFloat(value);\n }\n\n function percent(base, value) {\n return base * toFloat(value) / 100;\n }\n\n function getWindow(element) {\n return isWindow(element) ? element : getDocument(element).defaultView;\n }\n\n function getDocument(element) {\n return toNode(element).ownerDocument;\n }\n\n function getDocEl(element) {\n return getDocument(element).documentElement;\n }\n\n /*\n Based on:\n Copyright (c) 2016 Wilson Page wilsonpage@me.com\n https://github.com/wilsonpage/fastdom\n */\n\n var fastdom = {\n\n reads: [],\n writes: [],\n\n read: function(task) {\n this.reads.push(task);\n scheduleFlush();\n return task;\n },\n\n write: function(task) {\n this.writes.push(task);\n scheduleFlush();\n return task;\n },\n\n clear: function(task) {\n return remove$1(this.reads, task) || remove$1(this.writes, task);\n },\n\n flush: flush\n\n };\n\n function flush() {\n runTasks(fastdom.reads);\n runTasks(fastdom.writes.splice(0, fastdom.writes.length));\n\n fastdom.scheduled = false;\n\n if (fastdom.reads.length || fastdom.writes.length) {\n scheduleFlush(true);\n }\n }\n\n function scheduleFlush(microtask) {\n if ( microtask === void 0 ) microtask = false;\n\n if (!fastdom.scheduled) {\n fastdom.scheduled = true;\n if (microtask) {\n Promise.resolve().then(flush);\n } else {\n requestAnimationFrame(flush);\n }\n }\n }\n\n function runTasks(tasks) {\n var task;\n while ((task = tasks.shift())) {\n task();\n }\n }\n\n function remove$1(array, item) {\n var index = array.indexOf(item);\n return !!~index && !!array.splice(index, 1);\n }\n\n function MouseTracker() {}\n\n MouseTracker.prototype = {\n\n positions: [],\n position: null,\n\n init: function() {\n var this$1 = this;\n\n\n this.positions = [];\n this.position = null;\n\n var ticking = false;\n this.unbind = on(document, 'mousemove', function (e) {\n\n if (ticking) {\n return;\n }\n\n setTimeout(function () {\n\n var time = Date.now();\n var ref = this$1.positions;\n var length = ref.length;\n\n if (length && (time - this$1.positions[length - 1].time > 100)) {\n this$1.positions.splice(0, length);\n }\n\n this$1.positions.push({time: time, x: e.pageX, y: e.pageY});\n\n if (this$1.positions.length > 5) {\n this$1.positions.shift();\n }\n\n ticking = false;\n }, 5);\n\n ticking = true;\n });\n\n },\n\n cancel: function() {\n if (this.unbind) {\n this.unbind();\n }\n },\n\n movesTo: function(target) {\n\n if (this.positions.length < 2) {\n return false;\n }\n\n var p = offset(target);\n var position = this.positions[this.positions.length - 1];\n var ref = this.positions;\n var prevPos = ref[0];\n\n if (p.left <= position.x && position.x <= p.right && p.top <= position.y && position.y <= p.bottom) {\n return false;\n }\n\n var points = [\n [{x: p.left, y: p.top}, {x: p.right, y: p.bottom}],\n [{x: p.right, y: p.top}, {x: p.left, y: p.bottom}]\n ];\n\n if (p.right <= position.x) ; else if (p.left >= position.x) {\n points[0].reverse();\n points[1].reverse();\n } else if (p.bottom <= position.y) {\n points[0].reverse();\n } else if (p.top >= position.y) {\n points[1].reverse();\n }\n\n return !!points.reduce(function (result, point) {\n return result + (slope(prevPos, point[0]) < slope(position, point[0]) && slope(prevPos, point[1]) > slope(position, point[1]));\n }, 0);\n }\n\n };\n\n function slope(a, b) {\n return (b.y - a.y) / (b.x - a.x);\n }\n\n var strats = {};\n\n strats.events =\n strats.created =\n strats.beforeConnect =\n strats.connected =\n strats.beforeDisconnect =\n strats.disconnected =\n strats.destroy = concatStrat;\n\n // args strategy\n strats.args = function (parentVal, childVal) {\n return childVal !== false && concatStrat(childVal || parentVal);\n };\n\n // update strategy\n strats.update = function (parentVal, childVal) {\n return sortBy(concatStrat(parentVal, isFunction(childVal) ? {read: childVal} : childVal), 'order');\n };\n\n // property strategy\n strats.props = function (parentVal, childVal) {\n\n if (isArray(childVal)) {\n childVal = childVal.reduce(function (value, key) {\n value[key] = String;\n return value;\n }, {});\n }\n\n return strats.methods(parentVal, childVal);\n };\n\n // extend strategy\n strats.computed =\n strats.methods = function (parentVal, childVal) {\n return childVal\n ? parentVal\n ? assign({}, parentVal, childVal)\n : childVal\n : parentVal;\n };\n\n // data strategy\n strats.data = function (parentVal, childVal, vm) {\n\n if (!vm) {\n\n if (!childVal) {\n return parentVal;\n }\n\n if (!parentVal) {\n return childVal;\n }\n\n return function (vm) {\n return mergeFnData(parentVal, childVal, vm);\n };\n\n }\n\n return mergeFnData(parentVal, childVal, vm);\n };\n\n function mergeFnData(parentVal, childVal, vm) {\n return strats.computed(\n isFunction(parentVal)\n ? parentVal.call(vm, vm)\n : parentVal,\n isFunction(childVal)\n ? childVal.call(vm, vm)\n : childVal\n );\n }\n\n // concat strategy\n function concatStrat(parentVal, childVal) {\n\n parentVal = parentVal && !isArray(parentVal) ? [parentVal] : parentVal;\n\n return childVal\n ? parentVal\n ? parentVal.concat(childVal)\n : isArray(childVal)\n ? childVal\n : [childVal]\n : parentVal;\n }\n\n // default strategy\n function defaultStrat(parentVal, childVal) {\n return isUndefined(childVal) ? parentVal : childVal;\n }\n\n function mergeOptions(parent, child, vm) {\n\n var options = {};\n\n if (isFunction(child)) {\n child = child.options;\n }\n\n if (child.extends) {\n parent = mergeOptions(parent, child.extends, vm);\n }\n\n if (child.mixins) {\n for (var i = 0, l = child.mixins.length; i < l; i++) {\n parent = mergeOptions(parent, child.mixins[i], vm);\n }\n }\n\n for (var key in parent) {\n mergeKey(key);\n }\n\n for (var key$1 in child) {\n if (!hasOwn(parent, key$1)) {\n mergeKey(key$1);\n }\n }\n\n function mergeKey(key) {\n options[key] = (strats[key] || defaultStrat)(parent[key], child[key], vm);\n }\n\n return options;\n }\n\n function parseOptions(options, args) {\n var obj;\n\n if ( args === void 0 ) args = [];\n\n try {\n\n return !options\n ? {}\n : startsWith(options, '{')\n ? JSON.parse(options)\n : args.length && !includes(options, ':')\n ? (( obj = {}, obj[args[0]] = options, obj ))\n : options.split(';').reduce(function (options, option) {\n var ref = option.split(/:(.*)/);\n var key = ref[0];\n var value = ref[1];\n if (key && !isUndefined(value)) {\n options[key.trim()] = value.trim();\n }\n return options;\n }, {});\n\n } catch (e) {\n return {};\n }\n\n }\n\n var id = 0;\n\n var Player = function(el) {\n this.id = ++id;\n this.el = toNode(el);\n };\n\n Player.prototype.isVideo = function () {\n return this.isYoutube() || this.isVimeo() || this.isHTML5();\n };\n\n Player.prototype.isHTML5 = function () {\n return this.el.tagName === 'VIDEO';\n };\n\n Player.prototype.isIFrame = function () {\n return this.el.tagName === 'IFRAME';\n };\n\n Player.prototype.isYoutube = function () {\n return this.isIFrame() && !!this.el.src.match(/\\/\\/.*?youtube(-nocookie)?\\.[a-z]+\\/(watch\\?v=[^&\\s]+|embed)|youtu\\.be\\/.*/);\n };\n\n Player.prototype.isVimeo = function () {\n return this.isIFrame() && !!this.el.src.match(/vimeo\\.com\\/video\\/.*/);\n };\n\n Player.prototype.enableApi = function () {\n var this$1 = this;\n\n\n if (this.ready) {\n return this.ready;\n }\n\n var youtube = this.isYoutube();\n var vimeo = this.isVimeo();\n\n var poller;\n\n if (youtube || vimeo) {\n\n return this.ready = new Promise(function (resolve) {\n\n once(this$1.el, 'load', function () {\n if (youtube) {\n var listener = function () { return post(this$1.el, {event: 'listening', id: this$1.id}); };\n poller = setInterval(listener, 100);\n listener();\n }\n });\n\n listen(function (data) { return youtube && data.id === this$1.id && data.event === 'onReady' || vimeo && Number(data.player_id) === this$1.id; })\n .then(function () {\n resolve();\n poller && clearInterval(poller);\n });\n\n attr(this$1.el, 'src', (\"\" + (this$1.el.src) + (includes(this$1.el.src, '?') ? '&' : '?') + (youtube ? 'enablejsapi=1' : (\"api=1&player_id=\" + (this$1.id)))));\n\n });\n\n }\n\n return Promise.resolve();\n\n };\n\n Player.prototype.play = function () {\n var this$1 = this;\n\n\n if (!this.isVideo()) {\n return;\n }\n\n if (this.isIFrame()) {\n this.enableApi().then(function () { return post(this$1.el, {func: 'playVideo', method: 'play'}); });\n } else if (this.isHTML5()) {\n try {\n var promise = this.el.play();\n\n if (promise) {\n promise.catch(noop);\n }\n } catch (e) {}\n }\n };\n\n Player.prototype.pause = function () {\n var this$1 = this;\n\n\n if (!this.isVideo()) {\n return;\n }\n\n if (this.isIFrame()) {\n this.enableApi().then(function () { return post(this$1.el, {func: 'pauseVideo', method: 'pause'}); });\n } else if (this.isHTML5()) {\n this.el.pause();\n }\n };\n\n Player.prototype.mute = function () {\n var this$1 = this;\n\n\n if (!this.isVideo()) {\n return;\n }\n\n if (this.isIFrame()) {\n this.enableApi().then(function () { return post(this$1.el, {func: 'mute', method: 'setVolume', value: 0}); });\n } else if (this.isHTML5()) {\n this.el.muted = true;\n attr(this.el, 'muted', '');\n }\n\n };\n\n function post(el, cmd) {\n try {\n el.contentWindow.postMessage(JSON.stringify(assign({event: 'command'}, cmd)), '*');\n } catch (e) {}\n }\n\n function listen(cb) {\n\n return new Promise(function (resolve) {\n\n once(window, 'message', function (_, data) { return resolve(data); }, false, function (ref) {\n var data = ref.data;\n\n\n if (!data || !isString(data)) {\n return;\n }\n\n try {\n data = JSON.parse(data);\n } catch (e) {\n return;\n }\n\n return data && cb(data);\n\n });\n\n });\n\n }\n\n var IntersectionObserver = 'IntersectionObserver' in window\n ? window.IntersectionObserver\n : /*@__PURE__*/(function () {\n function IntersectionObserverClass(callback, ref) {\n var this$1 = this;\n if ( ref === void 0 ) ref = {};\n var rootMargin = ref.rootMargin; if ( rootMargin === void 0 ) rootMargin = '0 0';\n\n\n this.targets = [];\n\n var ref$1 = (rootMargin || '0 0').split(' ').map(toFloat);\n var offsetTop = ref$1[0];\n var offsetLeft = ref$1[1];\n\n this.offsetTop = offsetTop;\n this.offsetLeft = offsetLeft;\n\n var pending;\n this.apply = function () {\n\n if (pending) {\n return;\n }\n\n pending = requestAnimationFrame(function () { return setTimeout(function () {\n var records = this$1.takeRecords();\n\n if (records.length) {\n callback(records, this$1);\n }\n\n pending = false;\n }); });\n\n };\n\n this.off = on(window, 'scroll resize load', this.apply, {passive: true, capture: true});\n\n }\n\n IntersectionObserverClass.prototype.takeRecords = function () {\n var this$1 = this;\n\n return this.targets.filter(function (entry) {\n\n var inView = isInView(entry.target, this$1.offsetTop, this$1.offsetLeft);\n\n if (entry.isIntersecting === null || inView ^ entry.isIntersecting) {\n entry.isIntersecting = inView;\n return true;\n }\n\n });\n };\n\n IntersectionObserverClass.prototype.observe = function (target) {\n this.targets.push({\n target: target,\n isIntersecting: null\n });\n this.apply();\n };\n\n IntersectionObserverClass.prototype.disconnect = function () {\n this.targets = [];\n this.off();\n };\n\n return IntersectionObserverClass;\n }());\n\n\n\n var util = /*#__PURE__*/Object.freeze({\n ajax: ajax,\n getImage: getImage,\n transition: transition,\n Transition: Transition,\n animate: animate,\n Animation: Animation,\n attr: attr,\n hasAttr: hasAttr,\n removeAttr: removeAttr,\n data: data,\n addClass: addClass,\n removeClass: removeClass,\n removeClasses: removeClasses,\n replaceClass: replaceClass,\n hasClass: hasClass,\n toggleClass: toggleClass,\n positionAt: positionAt,\n offset: offset,\n position: position,\n height: height,\n width: width,\n boxModelAdjust: boxModelAdjust,\n flipPosition: flipPosition,\n isInView: isInView,\n scrolledOver: scrolledOver,\n scrollTop: scrollTop,\n offsetPosition: offsetPosition,\n toPx: toPx,\n ready: ready,\n index: index,\n getIndex: getIndex,\n empty: empty,\n html: html,\n prepend: prepend,\n append: append,\n before: before,\n after: after,\n remove: remove,\n wrapAll: wrapAll,\n wrapInner: wrapInner,\n unwrap: unwrap,\n fragment: fragment,\n apply: apply,\n $: $,\n $$: $$,\n isIE: isIE,\n isRtl: isRtl,\n hasTouch: hasTouch,\n pointerDown: pointerDown,\n pointerMove: pointerMove,\n pointerUp: pointerUp,\n pointerEnter: pointerEnter,\n pointerLeave: pointerLeave,\n pointerCancel: pointerCancel,\n on: on,\n off: off,\n once: once,\n trigger: trigger,\n createEvent: createEvent,\n toEventTargets: toEventTargets,\n isTouch: isTouch,\n getEventPos: getEventPos,\n fastdom: fastdom,\n isVoidElement: isVoidElement,\n isVisible: isVisible,\n selInput: selInput,\n isInput: isInput,\n filter: filter,\n within: within,\n bind: bind,\n hasOwn: hasOwn,\n hyphenate: hyphenate,\n camelize: camelize,\n ucfirst: ucfirst,\n startsWith: startsWith,\n endsWith: endsWith,\n includes: includes,\n findIndex: findIndex,\n isArray: isArray,\n isFunction: isFunction,\n isObject: isObject,\n isPlainObject: isPlainObject,\n isWindow: isWindow,\n isDocument: isDocument,\n isJQuery: isJQuery,\n isNode: isNode,\n isNodeCollection: isNodeCollection,\n isBoolean: isBoolean,\n isString: isString,\n isNumber: isNumber,\n isNumeric: isNumeric,\n isEmpty: isEmpty,\n isUndefined: isUndefined,\n toBoolean: toBoolean,\n toNumber: toNumber,\n toFloat: toFloat,\n toNode: toNode,\n toNodes: toNodes,\n toList: toList,\n toMs: toMs,\n isEqual: isEqual,\n swap: swap,\n assign: assign,\n each: each,\n sortBy: sortBy,\n uniqueBy: uniqueBy,\n clamp: clamp,\n noop: noop,\n intersectRect: intersectRect,\n pointInRect: pointInRect,\n Dimensions: Dimensions,\n MouseTracker: MouseTracker,\n mergeOptions: mergeOptions,\n parseOptions: parseOptions,\n Player: Player,\n Promise: Promise,\n Deferred: Deferred,\n IntersectionObserver: IntersectionObserver,\n query: query,\n queryAll: queryAll,\n find: find,\n findAll: findAll,\n matches: matches,\n closest: closest,\n parents: parents,\n escape: escape,\n css: css,\n getStyles: getStyles,\n getStyle: getStyle,\n getCssVar: getCssVar,\n propName: propName\n });\n\n function componentAPI (UIkit) {\n\n var DATA = UIkit.data;\n\n var components = {};\n\n UIkit.component = function (name, options) {\n\n if (!options) {\n\n if (isPlainObject(components[name])) {\n components[name] = UIkit.extend(components[name]);\n }\n\n return components[name];\n\n }\n\n UIkit[name] = function (element, data) {\n var i = arguments.length, argsArray = Array(i);\n while ( i-- ) argsArray[i] = arguments[i];\n\n\n var component = UIkit.component(name);\n\n if (isPlainObject(element)) {\n return new component({data: element});\n }\n\n if (component.options.functional) {\n return new component({data: [].concat( argsArray )});\n }\n\n return element && element.nodeType ? init(element) : $$(element).map(init)[0];\n\n function init(element) {\n\n var instance = UIkit.getComponent(element, name);\n\n if (instance) {\n if (!data) {\n return instance;\n } else {\n instance.$destroy();\n }\n }\n\n return new component({el: element, data: data});\n\n }\n\n };\n\n var opt = isPlainObject(options) ? assign({}, options) : options.options;\n\n opt.name = name;\n\n if (opt.install) {\n opt.install(UIkit, opt, name);\n }\n\n if (UIkit._initialized && !opt.functional) {\n var id = hyphenate(name);\n fastdom.read(function () { return UIkit[name]((\"[uk-\" + id + \"],[data-uk-\" + id + \"]\")); });\n }\n\n return components[name] = isPlainObject(options) ? opt : options;\n };\n\n UIkit.getComponents = function (element) { return element && element[DATA] || {}; };\n UIkit.getComponent = function (element, name) { return UIkit.getComponents(element)[name]; };\n\n UIkit.connect = function (node) {\n\n if (node[DATA]) {\n for (var name in node[DATA]) {\n node[DATA][name]._callConnected();\n }\n }\n\n for (var i = 0; i < node.attributes.length; i++) {\n\n var name$1 = getComponentName(node.attributes[i].name);\n\n if (name$1 && name$1 in components) {\n UIkit[name$1](node);\n }\n\n }\n\n };\n\n UIkit.disconnect = function (node) {\n for (var name in node[DATA]) {\n node[DATA][name]._callDisconnected();\n }\n };\n\n }\n\n function getComponentName(attribute) {\n return startsWith(attribute, 'uk-') || startsWith(attribute, 'data-uk-')\n ? camelize(attribute.replace('data-uk-', '').replace('uk-', ''))\n : false;\n }\n\n function boot (UIkit) {\n\n var connect = UIkit.connect;\n var disconnect = UIkit.disconnect;\n\n if (!('MutationObserver' in window)) {\n return;\n }\n\n if (document.body) {\n\n init();\n\n } else {\n\n (new MutationObserver(function () {\n\n if (document.body) {\n this.disconnect();\n init();\n }\n\n })).observe(document, {childList: true, subtree: true});\n\n }\n\n function init() {\n\n apply(document.body, connect);\n\n // Safari renders prior to first animation frame\n fastdom.flush();\n\n (new MutationObserver(function (mutations) { return mutations.forEach(applyMutation); })).observe(document, {\n childList: true,\n subtree: true,\n characterData: true,\n attributes: true\n });\n\n UIkit._initialized = true;\n }\n\n function applyMutation(mutation) {\n\n var target = mutation.target;\n var type = mutation.type;\n\n var update = type !== 'attributes'\n ? applyChildList(mutation)\n : applyAttribute(mutation);\n\n update && UIkit.update(target);\n\n }\n\n function applyAttribute(ref) {\n var target = ref.target;\n var attributeName = ref.attributeName;\n\n\n if (attributeName === 'href') {\n return true;\n }\n\n var name = getComponentName(attributeName);\n\n if (!name || !(name in UIkit)) {\n return;\n }\n\n if (hasAttr(target, attributeName)) {\n UIkit[name](target);\n return true;\n }\n\n var component = UIkit.getComponent(target, name);\n\n if (component) {\n component.$destroy();\n return true;\n }\n\n }\n\n function applyChildList(ref) {\n var addedNodes = ref.addedNodes;\n var removedNodes = ref.removedNodes;\n\n\n for (var i = 0; i < addedNodes.length; i++) {\n apply(addedNodes[i], connect);\n }\n\n for (var i$1 = 0; i$1 < removedNodes.length; i$1++) {\n apply(removedNodes[i$1], disconnect);\n }\n\n return true;\n }\n\n function apply(node, fn) {\n\n if (node.nodeType !== 1 || hasAttr(node, 'uk-no-boot')) {\n return;\n }\n\n fn(node);\n node = node.firstElementChild;\n while (node) {\n var next = node.nextElementSibling;\n apply(node, fn);\n node = next;\n }\n }\n\n }\n\n function globalAPI (UIkit) {\n\n var DATA = UIkit.data;\n\n UIkit.use = function (plugin) {\n\n if (plugin.installed) {\n return;\n }\n\n plugin.call(null, this);\n plugin.installed = true;\n\n return this;\n };\n\n UIkit.mixin = function (mixin, component) {\n component = (isString(component) ? UIkit.component(component) : component) || this;\n component.options = mergeOptions(component.options, mixin);\n };\n\n UIkit.extend = function (options) {\n\n options = options || {};\n\n var Super = this;\n var Sub = function UIkitComponent(options) {\n this._init(options);\n };\n\n Sub.prototype = Object.create(Super.prototype);\n Sub.prototype.constructor = Sub;\n Sub.options = mergeOptions(Super.options, options);\n\n Sub.super = Super;\n Sub.extend = Super.extend;\n\n return Sub;\n };\n\n UIkit.update = function (element, e) {\n\n element = element ? toNode(element) : document.body;\n\n path(element, function (element) { return update(element[DATA], e); });\n apply(element, function (element) { return update(element[DATA], e); });\n\n };\n\n var container;\n Object.defineProperty(UIkit, 'container', {\n\n get: function() {\n return container || document.body;\n },\n\n set: function(element) {\n container = $(element);\n }\n\n });\n\n function update(data, e) {\n\n if (!data) {\n return;\n }\n\n for (var name in data) {\n if (data[name]._connected) {\n data[name]._callUpdate(e);\n }\n }\n\n }\n\n function path(node, fn) {\n if (node && node !== document.body && node.parentNode) {\n path(node.parentNode, fn);\n fn(node.parentNode);\n }\n }\n\n }\n\n function hooksAPI (UIkit) {\n\n UIkit.prototype._callHook = function (hook) {\n var this$1 = this;\n\n\n var handlers = this.$options[hook];\n\n if (handlers) {\n handlers.forEach(function (handler) { return handler.call(this$1); });\n }\n };\n\n UIkit.prototype._callConnected = function () {\n\n if (this._connected) {\n return;\n }\n\n this._data = {};\n this._computeds = {};\n this._initProps();\n\n this._callHook('beforeConnect');\n this._connected = true;\n\n this._initEvents();\n this._initObserver();\n\n this._callHook('connected');\n this._callUpdate();\n };\n\n UIkit.prototype._callDisconnected = function () {\n\n if (!this._connected) {\n return;\n }\n\n this._callHook('beforeDisconnect');\n\n if (this._observer) {\n this._observer.disconnect();\n this._observer = null;\n }\n\n this._unbindEvents();\n this._callHook('disconnected');\n\n this._connected = false;\n\n };\n\n UIkit.prototype._callUpdate = function (e) {\n var this$1 = this;\n if ( e === void 0 ) e = 'update';\n\n\n var type = e.type || e;\n\n if (includes(['update', 'resize'], type)) {\n this._callWatches();\n }\n\n var updates = this.$options.update;\n var ref = this._frames;\n var reads = ref.reads;\n var writes = ref.writes;\n\n if (!updates) {\n return;\n }\n\n updates.forEach(function (ref, i) {\n var read = ref.read;\n var write = ref.write;\n var events = ref.events;\n\n\n if (type !== 'update' && !includes(events, type)) {\n return;\n }\n\n if (read && !includes(fastdom.reads, reads[i])) {\n reads[i] = fastdom.read(function () {\n\n var result = this$1._connected && read.call(this$1, this$1._data, type);\n\n if (result === false && write) {\n fastdom.clear(writes[i]);\n } else if (isPlainObject(result)) {\n assign(this$1._data, result);\n }\n });\n }\n\n if (write && !includes(fastdom.writes, writes[i])) {\n writes[i] = fastdom.write(function () { return this$1._connected && write.call(this$1, this$1._data, type); });\n }\n\n });\n\n };\n\n }\n\n function stateAPI (UIkit) {\n\n var uid = 0;\n\n UIkit.prototype._init = function (options) {\n\n options = options || {};\n options.data = normalizeData(options, this.constructor.options);\n\n this.$options = mergeOptions(this.constructor.options, options, this);\n this.$el = null;\n this.$props = {};\n\n this._frames = {reads: {}, writes: {}};\n this._events = [];\n\n this._uid = uid++;\n this._initData();\n this._initMethods();\n this._initComputeds();\n this._callHook('created');\n\n if (options.el) {\n this.$mount(options.el);\n }\n };\n\n UIkit.prototype._initData = function () {\n\n var ref = this.$options;\n var data = ref.data; if ( data === void 0 ) data = {};\n\n for (var key in data) {\n this.$props[key] = this[key] = data[key];\n }\n };\n\n UIkit.prototype._initMethods = function () {\n\n var ref = this.$options;\n var methods = ref.methods;\n\n if (methods) {\n for (var key in methods) {\n this[key] = bind(methods[key], this);\n }\n }\n };\n\n UIkit.prototype._initComputeds = function () {\n\n var ref = this.$options;\n var computed = ref.computed;\n\n this._computeds = {};\n\n if (computed) {\n for (var key in computed) {\n registerComputed(this, key, computed[key]);\n }\n }\n };\n\n UIkit.prototype._callWatches = function () {\n\n var ref = this;\n var computed = ref.$options.computed;\n var _computeds = ref._computeds;\n\n for (var key in _computeds) {\n\n var value = _computeds[key];\n delete _computeds[key];\n\n if (computed[key].watch && !isEqual(value, this[key])) {\n computed[key].watch.call(this, this[key], value);\n }\n\n }\n\n };\n\n UIkit.prototype._initProps = function (props) {\n\n var key;\n\n props = props || getProps(this.$options, this.$name);\n\n for (key in props) {\n if (!isUndefined(props[key])) {\n this.$props[key] = props[key];\n }\n }\n\n var exclude = [this.$options.computed, this.$options.methods];\n for (key in this.$props) {\n if (key in props && notIn(exclude, key)) {\n this[key] = this.$props[key];\n }\n }\n };\n\n UIkit.prototype._initEvents = function () {\n var this$1 = this;\n\n\n var ref = this.$options;\n var events = ref.events;\n\n if (events) {\n\n events.forEach(function (event) {\n\n if (!hasOwn(event, 'handler')) {\n for (var key in event) {\n registerEvent(this$1, event[key], key);\n }\n } else {\n registerEvent(this$1, event);\n }\n\n });\n }\n };\n\n UIkit.prototype._unbindEvents = function () {\n this._events.forEach(function (unbind) { return unbind(); });\n this._events = [];\n };\n\n UIkit.prototype._initObserver = function () {\n var this$1 = this;\n\n\n var ref = this.$options;\n var attrs = ref.attrs;\n var props = ref.props;\n var el = ref.el;\n if (this._observer || !props || attrs === false) {\n return;\n }\n\n attrs = isArray(attrs) ? attrs : Object.keys(props);\n\n this._observer = new MutationObserver(function () {\n\n var data = getProps(this$1.$options, this$1.$name);\n if (attrs.some(function (key) { return !isUndefined(data[key]) && data[key] !== this$1.$props[key]; })) {\n this$1.$reset();\n }\n\n });\n\n var filter = attrs.map(function (key) { return hyphenate(key); }).concat(this.$name);\n\n this._observer.observe(el, {\n attributes: true,\n attributeFilter: filter.concat(filter.map(function (key) { return (\"data-\" + key); }))\n });\n };\n\n function getProps(opts, name) {\n\n var data$1 = {};\n var args = opts.args; if ( args === void 0 ) args = [];\n var props = opts.props; if ( props === void 0 ) props = {};\n var el = opts.el;\n\n if (!props) {\n return data$1;\n }\n\n for (var key in props) {\n var prop = hyphenate(key);\n var value = data(el, prop);\n\n if (!isUndefined(value)) {\n\n value = props[key] === Boolean && value === ''\n ? true\n : coerce(props[key], value);\n\n if (prop === 'target' && (!value || startsWith(value, '_'))) {\n continue;\n }\n\n data$1[key] = value;\n }\n }\n\n var options = parseOptions(data(el, name), args);\n\n for (var key$1 in options) {\n var prop$1 = camelize(key$1);\n if (props[prop$1] !== undefined) {\n data$1[prop$1] = coerce(props[prop$1], options[key$1]);\n }\n }\n\n return data$1;\n }\n\n function registerComputed(component, key, cb) {\n Object.defineProperty(component, key, {\n\n enumerable: true,\n\n get: function() {\n\n var _computeds = component._computeds;\n var $props = component.$props;\n var $el = component.$el;\n\n if (!hasOwn(_computeds, key)) {\n _computeds[key] = (cb.get || cb).call(component, $props, $el);\n }\n\n return _computeds[key];\n },\n\n set: function(value) {\n\n var _computeds = component._computeds;\n\n _computeds[key] = cb.set ? cb.set.call(component, value) : value;\n\n if (isUndefined(_computeds[key])) {\n delete _computeds[key];\n }\n }\n\n });\n }\n\n function registerEvent(component, event, key) {\n\n if (!isPlainObject(event)) {\n event = ({name: key, handler: event});\n }\n\n var name = event.name;\n var el = event.el;\n var handler = event.handler;\n var capture = event.capture;\n var passive = event.passive;\n var delegate = event.delegate;\n var filter = event.filter;\n var self = event.self;\n el = isFunction(el)\n ? el.call(component)\n : el || component.$el;\n\n if (isArray(el)) {\n el.forEach(function (el) { return registerEvent(component, assign({}, event, {el: el}), key); });\n return;\n }\n\n if (!el || filter && !filter.call(component)) {\n return;\n }\n\n handler = detail(isString(handler) ? component[handler] : bind(handler, component));\n\n if (self) {\n handler = selfFilter(handler);\n }\n\n component._events.push(\n on(\n el,\n name,\n !delegate\n ? null\n : isString(delegate)\n ? delegate\n : delegate.call(component),\n handler,\n isBoolean(passive)\n ? {passive: passive, capture: capture}\n : capture\n )\n );\n\n }\n\n function selfFilter(handler) {\n return function selfHandler(e) {\n if (e.target === e.currentTarget || e.target === e.current) {\n return handler.call(null, e);\n }\n };\n }\n\n function notIn(options, key) {\n return options.every(function (arr) { return !arr || !hasOwn(arr, key); });\n }\n\n function detail(listener) {\n return function (e) { return isArray(e.detail) ? listener.apply(void 0, [e].concat(e.detail)) : listener(e); };\n }\n\n function coerce(type, value) {\n\n if (type === Boolean) {\n return toBoolean(value);\n } else if (type === Number) {\n return toNumber(value);\n } else if (type === 'list') {\n return toList(value);\n }\n\n return type ? type(value) : value;\n }\n\n function normalizeData(ref, ref$1) {\n var data = ref.data;\n var el = ref.el;\n var args = ref$1.args;\n var props = ref$1.props; if ( props === void 0 ) props = {};\n\n data = isArray(data)\n ? !isEmpty(args)\n ? data.slice(0, args.length).reduce(function (data, value, index) {\n if (isPlainObject(value)) {\n assign(data, value);\n } else {\n data[args[index]] = value;\n }\n return data;\n }, {})\n : undefined\n : data;\n\n if (data) {\n for (var key in data) {\n if (isUndefined(data[key])) {\n delete data[key];\n } else {\n data[key] = props[key] ? coerce(props[key], data[key]) : data[key];\n }\n }\n }\n\n return data;\n }\n }\n\n function instanceAPI (UIkit) {\n\n var DATA = UIkit.data;\n\n UIkit.prototype.$mount = function (el) {\n\n var ref = this.$options;\n var name = ref.name;\n\n if (!el[DATA]) {\n el[DATA] = {};\n }\n\n if (el[DATA][name]) {\n return;\n }\n\n el[DATA][name] = this;\n\n this.$el = this.$options.el = this.$options.el || el;\n\n if (within(el, document)) {\n this._callConnected();\n }\n };\n\n UIkit.prototype.$emit = function (e) {\n this._callUpdate(e);\n };\n\n UIkit.prototype.$reset = function () {\n this._callDisconnected();\n this._callConnected();\n };\n\n UIkit.prototype.$destroy = function (removeEl) {\n if ( removeEl === void 0 ) removeEl = false;\n\n\n var ref = this.$options;\n var el = ref.el;\n var name = ref.name;\n\n if (el) {\n this._callDisconnected();\n }\n\n this._callHook('destroy');\n\n if (!el || !el[DATA]) {\n return;\n }\n\n delete el[DATA][name];\n\n if (!isEmpty(el[DATA])) {\n delete el[DATA];\n }\n\n if (removeEl) {\n remove(this.$el);\n }\n };\n\n UIkit.prototype.$create = function (component, element, data) {\n return UIkit[component](element, data);\n };\n\n UIkit.prototype.$update = UIkit.update;\n UIkit.prototype.$getComponent = UIkit.getComponent;\n\n var names = {};\n Object.defineProperties(UIkit.prototype, {\n\n $container: Object.getOwnPropertyDescriptor(UIkit, 'container'),\n\n $name: {\n\n get: function() {\n var ref = this.$options;\n var name = ref.name;\n\n if (!names[name]) {\n names[name] = UIkit.prefix + hyphenate(name);\n }\n\n return names[name];\n }\n\n }\n\n });\n\n }\n\n var UIkit = function (options) {\n this._init(options);\n };\n\n UIkit.util = util;\n UIkit.data = '__uikit__';\n UIkit.prefix = 'uk-';\n UIkit.options = {};\n\n globalAPI(UIkit);\n hooksAPI(UIkit);\n stateAPI(UIkit);\n componentAPI(UIkit);\n instanceAPI(UIkit);\n\n var Class = {\n\n connected: function() {\n !hasClass(this.$el, this.$name) && addClass(this.$el, this.$name);\n }\n\n };\n\n var Togglable = {\n\n props: {\n cls: Boolean,\n animation: 'list',\n duration: Number,\n origin: String,\n transition: String,\n queued: Boolean\n },\n\n data: {\n cls: false,\n animation: [false],\n duration: 200,\n origin: false,\n transition: 'linear',\n queued: false,\n\n initProps: {\n overflow: '',\n height: '',\n paddingTop: '',\n paddingBottom: '',\n marginTop: '',\n marginBottom: ''\n },\n\n hideProps: {\n overflow: 'hidden',\n height: 0,\n paddingTop: 0,\n paddingBottom: 0,\n marginTop: 0,\n marginBottom: 0\n }\n\n },\n\n computed: {\n\n hasAnimation: function(ref) {\n var animation = ref.animation;\n\n return !!animation[0];\n },\n\n hasTransition: function(ref) {\n var animation = ref.animation;\n\n return this.hasAnimation && animation[0] === true;\n }\n\n },\n\n methods: {\n\n toggleElement: function(targets, show, animate) {\n var this$1 = this;\n\n return new Promise(function (resolve) {\n\n targets = toNodes(targets);\n\n var all = function (targets) { return Promise.all(targets.map(function (el) { return this$1._toggleElement(el, show, animate); })); };\n var toggled = targets.filter(function (el) { return this$1.isToggled(el); });\n var untoggled = targets.filter(function (el) { return !includes(toggled, el); });\n\n var p;\n\n if (!this$1.queued || !isUndefined(animate) || !isUndefined(show) || !this$1.hasAnimation || targets.length < 2) {\n\n p = all(untoggled.concat(toggled));\n\n } else {\n\n var body = document.body;\n var scroll = body.scrollTop;\n var el = toggled[0];\n var inProgress = Animation.inProgress(el) && hasClass(el, 'uk-animation-leave')\n || Transition.inProgress(el) && el.style.height === '0px';\n\n p = all(toggled);\n\n if (!inProgress) {\n p = p.then(function () {\n var p = all(untoggled);\n body.scrollTop = scroll;\n return p;\n });\n }\n\n }\n\n p.then(resolve, noop);\n\n });\n },\n\n toggleNow: function(targets, show) {\n var this$1 = this;\n\n return new Promise(function (resolve) { return Promise.all(toNodes(targets).map(function (el) { return this$1._toggleElement(el, show, false); })).then(resolve, noop); });\n },\n\n isToggled: function(el) {\n var nodes = toNodes(el || this.$el);\n return this.cls\n ? hasClass(nodes, this.cls.split(' ')[0])\n : !hasAttr(nodes, 'hidden');\n },\n\n updateAria: function(el) {\n if (this.cls === false) {\n attr(el, 'aria-hidden', !this.isToggled(el));\n }\n },\n\n _toggleElement: function(el, show, animate) {\n var this$1 = this;\n\n\n show = isBoolean(show)\n ? show\n : Animation.inProgress(el)\n ? hasClass(el, 'uk-animation-leave')\n : Transition.inProgress(el)\n ? el.style.height === '0px'\n : !this.isToggled(el);\n\n if (!trigger(el, (\"before\" + (show ? 'show' : 'hide')), [this])) {\n return Promise.reject();\n }\n\n var promise = (\n isFunction(animate)\n ? animate\n : animate === false || !this.hasAnimation\n ? this._toggle\n : this.hasTransition\n ? toggleHeight(this)\n : toggleAnimation(this)\n )(el, show);\n\n trigger(el, show ? 'show' : 'hide', [this]);\n\n var final = function () {\n trigger(el, show ? 'shown' : 'hidden', [this$1]);\n this$1.$update(el);\n };\n\n return promise ? promise.then(final) : Promise.resolve(final());\n },\n\n _toggle: function(el, toggled) {\n\n if (!el) {\n return;\n }\n\n toggled = Boolean(toggled);\n\n var changed;\n if (this.cls) {\n changed = includes(this.cls, ' ') || toggled !== hasClass(el, this.cls);\n changed && toggleClass(el, this.cls, includes(this.cls, ' ') ? undefined : toggled);\n } else {\n changed = toggled === hasAttr(el, 'hidden');\n changed && attr(el, 'hidden', !toggled ? '' : null);\n }\n\n $$('[autofocus]', el).some(function (el) { return isVisible(el) ? el.focus() || true : el.blur(); });\n\n this.updateAria(el);\n changed && this.$update(el);\n }\n\n }\n\n };\n\n function toggleHeight(ref) {\n var isToggled = ref.isToggled;\n var duration = ref.duration;\n var initProps = ref.initProps;\n var hideProps = ref.hideProps;\n var transition = ref.transition;\n var _toggle = ref._toggle;\n\n return function (el, show) {\n\n var inProgress = Transition.inProgress(el);\n var inner = el.hasChildNodes ? toFloat(css(el.firstElementChild, 'marginTop')) + toFloat(css(el.lastElementChild, 'marginBottom')) : 0;\n var currentHeight = isVisible(el) ? height(el) + (inProgress ? 0 : inner) : 0;\n\n Transition.cancel(el);\n\n if (!isToggled(el)) {\n _toggle(el, true);\n }\n\n height(el, '');\n\n // Update child components first\n fastdom.flush();\n\n var endHeight = height(el) + (inProgress ? 0 : inner);\n height(el, currentHeight);\n\n return (show\n ? Transition.start(el, assign({}, initProps, {overflow: 'hidden', height: endHeight}), Math.round(duration * (1 - currentHeight / endHeight)), transition)\n : Transition.start(el, hideProps, Math.round(duration * (currentHeight / endHeight)), transition).then(function () { return _toggle(el, false); })\n ).then(function () { return css(el, initProps); });\n\n };\n }\n\n function toggleAnimation(ref) {\n var animation = ref.animation;\n var duration = ref.duration;\n var origin = ref.origin;\n var _toggle = ref._toggle;\n\n return function (el, show) {\n\n Animation.cancel(el);\n\n if (show) {\n _toggle(el, true);\n return Animation.in(el, animation[0], duration, origin);\n }\n\n return Animation.out(el, animation[1] || animation[0], duration, origin).then(function () { return _toggle(el, false); });\n };\n }\n\n var Accordion = {\n\n mixins: [Class, Togglable],\n\n props: {\n targets: String,\n active: null,\n collapsible: Boolean,\n multiple: Boolean,\n toggle: String,\n content: String,\n transition: String\n },\n\n data: {\n targets: '> *',\n active: false,\n animation: [true],\n collapsible: true,\n multiple: false,\n clsOpen: 'uk-open',\n toggle: '> .uk-accordion-title',\n content: '> .uk-accordion-content',\n transition: 'ease'\n },\n\n computed: {\n\n items: function(ref, $el) {\n var targets = ref.targets;\n\n return $$(targets, $el);\n }\n\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return ((this.targets) + \" \" + (this.$props.toggle));\n },\n\n handler: function(e) {\n e.preventDefault();\n this.toggle(index($$(((this.targets) + \" \" + (this.$props.toggle)), this.$el), e.current));\n }\n\n }\n\n ],\n\n connected: function() {\n\n if (this.active === false) {\n return;\n }\n\n var active = this.items[Number(this.active)];\n if (active && !hasClass(active, this.clsOpen)) {\n this.toggle(active, false);\n }\n },\n\n update: function() {\n var this$1 = this;\n\n\n this.items.forEach(function (el) { return this$1._toggle($(this$1.content, el), hasClass(el, this$1.clsOpen)); });\n\n var active = !this.collapsible && !hasClass(this.items, this.clsOpen) && this.items[0];\n if (active) {\n this.toggle(active, false);\n }\n },\n\n methods: {\n\n toggle: function(item, animate) {\n var this$1 = this;\n\n\n var index = getIndex(item, this.items);\n var active = filter(this.items, (\".\" + (this.clsOpen)));\n\n item = this.items[index];\n\n item && [item]\n .concat(!this.multiple && !includes(active, item) && active || [])\n .forEach(function (el) {\n\n var isItem = el === item;\n var state = isItem && !hasClass(el, this$1.clsOpen);\n\n if (!state && isItem && !this$1.collapsible && active.length < 2) {\n return;\n }\n\n toggleClass(el, this$1.clsOpen, state);\n\n var content = el._wrapper ? el._wrapper.firstElementChild : $(this$1.content, el);\n\n if (!el._wrapper) {\n el._wrapper = wrapAll(content, '<div>');\n attr(el._wrapper, 'hidden', state ? '' : null);\n }\n\n this$1._toggle(content, true);\n this$1.toggleElement(el._wrapper, state, animate).then(function () {\n\n if (hasClass(el, this$1.clsOpen) !== state) {\n return;\n }\n\n if (!state) {\n this$1._toggle(content, false);\n }\n\n el._wrapper = null;\n unwrap(content);\n\n });\n\n });\n }\n\n }\n\n };\n\n var Alert = {\n\n mixins: [Class, Togglable],\n\n args: 'animation',\n\n props: {\n close: String\n },\n\n data: {\n animation: [true],\n selClose: '.uk-alert-close',\n duration: 150,\n hideProps: assign({opacity: 0}, Togglable.data.hideProps)\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return this.selClose;\n },\n\n handler: function(e) {\n e.preventDefault();\n this.close();\n }\n\n }\n\n ],\n\n methods: {\n\n close: function() {\n var this$1 = this;\n\n this.toggleElement(this.$el).then(function () { return this$1.$destroy(true); });\n }\n\n }\n\n };\n\n function Core (UIkit) {\n\n ready(function () {\n\n UIkit.update();\n on(window, 'load resize', function () { return UIkit.update(null, 'resize'); });\n on(document, 'loadedmetadata load', function (ref) {\n var target = ref.target;\n\n return UIkit.update(target, 'resize');\n }, true);\n\n // throttle `scroll` event (Safari triggers multiple `scroll` events per frame)\n var pending;\n on(window, 'scroll', function (e) {\n\n if (pending) {\n return;\n }\n pending = true;\n fastdom.write(function () { return pending = false; });\n\n var target = e.target;\n UIkit.update(target.nodeType !== 1 ? document.body : target, e.type);\n\n }, {passive: true, capture: true});\n\n var started = 0;\n on(document, 'animationstart', function (ref) {\n var target = ref.target;\n\n if ((css(target, 'animationName') || '').match(/^uk-.*(left|right)/)) {\n\n started++;\n css(document.body, 'overflowX', 'hidden');\n setTimeout(function () {\n if (!--started) {\n css(document.body, 'overflowX', '');\n }\n }, toMs(css(target, 'animationDuration')) + 100);\n }\n }, true);\n\n var off;\n on(document, pointerDown, function (e) {\n\n off && off();\n\n if (!isTouch(e)) {\n return;\n }\n\n var pos = getEventPos(e);\n var target = 'tagName' in e.target ? e.target : e.target.parentNode;\n off = once(document, pointerUp, function (e) {\n\n var ref = getEventPos(e);\n var x = ref.x;\n var y = ref.y;\n\n // swipe\n if (target && x && Math.abs(pos.x - x) > 100 || y && Math.abs(pos.y - y) > 100) {\n\n setTimeout(function () {\n trigger(target, 'swipe');\n trigger(target, (\"swipe\" + (swipeDirection(pos.x, pos.y, x, y))));\n });\n\n }\n\n });\n }, {passive: true});\n\n });\n\n }\n\n function swipeDirection(x1, y1, x2, y2) {\n return Math.abs(x1 - x2) >= Math.abs(y1 - y2)\n ? x1 - x2 > 0\n ? 'Left'\n : 'Right'\n : y1 - y2 > 0\n ? 'Up'\n : 'Down';\n }\n\n var Video = {\n\n args: 'autoplay',\n\n props: {\n automute: Boolean,\n autoplay: Boolean\n },\n\n data: {\n automute: false,\n autoplay: true\n },\n\n computed: {\n\n inView: function(ref) {\n var autoplay = ref.autoplay;\n\n return autoplay === 'inview';\n }\n\n },\n\n connected: function() {\n\n if (this.inView && !hasAttr(this.$el, 'preload')) {\n this.$el.preload = 'none';\n }\n\n this.player = new Player(this.$el);\n\n if (this.automute) {\n this.player.mute();\n }\n\n },\n\n update: {\n\n read: function() {\n\n return !this.player\n ? false\n : {\n visible: isVisible(this.$el) && css(this.$el, 'visibility') !== 'hidden',\n inView: this.inView && isInView(this.$el)\n };\n },\n\n write: function(ref) {\n var visible = ref.visible;\n var inView = ref.inView;\n\n\n if (!visible || this.inView && !inView) {\n this.player.pause();\n } else if (this.autoplay === true || this.inView && inView) {\n this.player.play();\n }\n\n },\n\n events: ['resize', 'scroll']\n\n }\n\n };\n\n var Cover = {\n\n mixins: [Class, Video],\n\n props: {\n width: Number,\n height: Number\n },\n\n data: {\n automute: true\n },\n\n update: {\n\n read: function() {\n\n var el = this.$el;\n\n if (!isVisible(el)) {\n return false;\n }\n\n var ref = el.parentNode;\n var height = ref.offsetHeight;\n var width = ref.offsetWidth;\n\n return {height: height, width: width};\n },\n\n write: function(ref) {\n var height = ref.height;\n var width = ref.width;\n\n\n var el = this.$el;\n var elWidth = this.width || el.naturalWidth || el.videoWidth || el.clientWidth;\n var elHeight = this.height || el.naturalHeight || el.videoHeight || el.clientHeight;\n\n if (!elWidth || !elHeight) {\n return;\n }\n\n css(el, Dimensions.cover(\n {\n width: elWidth,\n height: elHeight\n },\n {\n width: width + (width % 2 ? 1 : 0),\n height: height + (height % 2 ? 1 : 0)\n }\n ));\n\n },\n\n events: ['resize']\n\n }\n\n };\n\n var Position = {\n\n props: {\n pos: String,\n offset: null,\n flip: Boolean,\n clsPos: String\n },\n\n data: {\n pos: (\"bottom-\" + (!isRtl ? 'left' : 'right')),\n flip: true,\n offset: false,\n clsPos: ''\n },\n\n computed: {\n\n pos: function(ref) {\n var pos = ref.pos;\n\n return (pos + (!includes(pos, '-') ? '-center' : '')).split('-');\n },\n\n dir: function() {\n return this.pos[0];\n },\n\n align: function() {\n return this.pos[1];\n }\n\n },\n\n methods: {\n\n positionAt: function(element, target, boundary) {\n\n removeClasses(element, ((this.clsPos) + \"-(top|bottom|left|right)(-[a-z]+)?\"));\n css(element, {top: '', left: ''});\n\n var node;\n var ref = this;\n var offset$1 = ref.offset;\n var axis = this.getAxis();\n\n if (!isNumeric(offset$1)) {\n node = $(offset$1);\n offset$1 = node\n ? offset(node)[axis === 'x' ? 'left' : 'top'] - offset(target)[axis === 'x' ? 'right' : 'bottom']\n : 0;\n }\n\n var ref$1 = positionAt(\n element,\n target,\n axis === 'x' ? ((flipPosition(this.dir)) + \" \" + (this.align)) : ((this.align) + \" \" + (flipPosition(this.dir))),\n axis === 'x' ? ((this.dir) + \" \" + (this.align)) : ((this.align) + \" \" + (this.dir)),\n axis === 'x' ? (\"\" + (this.dir === 'left' ? -offset$1 : offset$1)) : (\" \" + (this.dir === 'top' ? -offset$1 : offset$1)),\n null,\n this.flip,\n boundary\n ).target;\n var x = ref$1.x;\n var y = ref$1.y;\n\n this.dir = axis === 'x' ? x : y;\n this.align = axis === 'x' ? y : x;\n\n toggleClass(element, ((this.clsPos) + \"-\" + (this.dir) + \"-\" + (this.align)), this.offset === false);\n\n },\n\n getAxis: function() {\n return this.dir === 'top' || this.dir === 'bottom' ? 'y' : 'x';\n }\n\n }\n\n };\n\n var active;\n\n var Drop = {\n\n mixins: [Position, Togglable],\n\n args: 'pos',\n\n props: {\n mode: 'list',\n toggle: Boolean,\n boundary: Boolean,\n boundaryAlign: Boolean,\n delayShow: Number,\n delayHide: Number,\n clsDrop: String\n },\n\n data: {\n mode: ['click', 'hover'],\n toggle: '- *',\n boundary: window,\n boundaryAlign: false,\n delayShow: 0,\n delayHide: 800,\n clsDrop: false,\n hoverIdle: 200,\n animation: ['uk-animation-fade'],\n cls: 'uk-open'\n },\n\n computed: {\n\n boundary: function(ref, $el) {\n var boundary = ref.boundary;\n\n return query(boundary, $el);\n },\n\n clsDrop: function(ref) {\n var clsDrop = ref.clsDrop;\n\n return clsDrop || (\"uk-\" + (this.$options.name));\n },\n\n clsPos: function() {\n return this.clsDrop;\n }\n\n },\n\n created: function() {\n this.tracker = new MouseTracker();\n },\n\n connected: function() {\n\n addClass(this.$el, this.clsDrop);\n\n var ref = this.$props;\n var toggle = ref.toggle;\n this.toggle = toggle && this.$create('toggle', query(toggle, this.$el), {\n target: this.$el,\n mode: this.mode\n });\n\n !this.toggle && trigger(this.$el, 'updatearia');\n\n },\n\n events: [\n\n\n {\n\n name: 'click',\n\n delegate: function() {\n return (\".\" + (this.clsDrop) + \"-close\");\n },\n\n handler: function(e) {\n e.preventDefault();\n this.hide(false);\n }\n\n },\n\n {\n\n name: 'click',\n\n delegate: function() {\n return 'a[href^=\"#\"]';\n },\n\n handler: function(e) {\n\n var id = e.target.hash;\n\n if (!id) {\n e.preventDefault();\n }\n\n if (!id || !within(id, this.$el)) {\n this.hide(false);\n }\n }\n\n },\n\n {\n\n name: 'beforescroll',\n\n handler: function() {\n this.hide(false);\n }\n\n },\n\n {\n\n name: 'toggle',\n\n self: true,\n\n handler: function(e, toggle) {\n\n e.preventDefault();\n\n if (this.isToggled()) {\n this.hide(false);\n } else {\n this.show(toggle, false);\n }\n }\n\n },\n\n {\n\n name: pointerEnter,\n\n filter: function() {\n return includes(this.mode, 'hover');\n },\n\n handler: function(e) {\n\n if (isTouch(e)) {\n return;\n }\n\n if (active\n && active !== this\n && active.toggle\n && includes(active.toggle.mode, 'hover')\n && !within(e.target, active.toggle.$el)\n && !pointInRect({x: e.pageX, y: e.pageY}, offset(active.$el))\n ) {\n active.hide(false);\n }\n\n e.preventDefault();\n this.show(this.toggle);\n }\n\n },\n\n {\n\n name: 'toggleshow',\n\n handler: function(e, toggle) {\n\n if (toggle && !includes(toggle.target, this.$el)) {\n return;\n }\n\n e.preventDefault();\n this.show(toggle || this.toggle);\n }\n\n },\n\n {\n\n name: (\"togglehide \" + pointerLeave),\n\n handler: function(e, toggle) {\n\n if (isTouch(e) || toggle && !includes(toggle.target, this.$el)) {\n return;\n }\n\n e.preventDefault();\n\n if (this.toggle && includes(this.toggle.mode, 'hover')) {\n this.hide();\n }\n }\n\n },\n\n {\n\n name: 'beforeshow',\n\n self: true,\n\n handler: function() {\n this.clearTimers();\n Animation.cancel(this.$el);\n this.position();\n }\n\n },\n\n {\n\n name: 'show',\n\n self: true,\n\n handler: function() {\n this.tracker.init();\n trigger(this.$el, 'updatearia');\n registerEvent();\n }\n\n },\n\n {\n\n name: 'beforehide',\n\n self: true,\n\n handler: function() {\n this.clearTimers();\n }\n\n },\n\n {\n\n name: 'hide',\n\n handler: function(ref) {\n var target = ref.target;\n\n\n if (this.$el !== target) {\n active = active === null && within(target, this.$el) && this.isToggled() ? this : active;\n return;\n }\n\n active = this.isActive() ? null : active;\n trigger(this.$el, 'updatearia');\n this.tracker.cancel();\n }\n\n },\n\n {\n\n name: 'updatearia',\n\n self: true,\n\n handler: function(e, toggle) {\n\n e.preventDefault();\n\n this.updateAria(this.$el);\n\n if (toggle || this.toggle) {\n attr((toggle || this.toggle).$el, 'aria-expanded', this.isToggled() ? 'true' : 'false');\n toggleClass(this.toggle.$el, this.cls, this.isToggled());\n }\n }\n }\n\n ],\n\n update: {\n\n write: function() {\n\n if (this.isToggled() && !Animation.inProgress(this.$el)) {\n this.position();\n }\n\n },\n\n events: ['resize']\n\n },\n\n methods: {\n\n show: function(toggle, delay) {\n var this$1 = this;\n if ( delay === void 0 ) delay = true;\n\n\n var show = function () { return !this$1.isToggled() && this$1.toggleElement(this$1.$el, true); };\n var tryShow = function () {\n\n this$1.toggle = toggle || this$1.toggle;\n\n this$1.clearTimers();\n\n if (this$1.isActive()) {\n return;\n } else if (delay && active && active !== this$1 && active.isDelaying) {\n this$1.showTimer = setTimeout(this$1.show, 10);\n return;\n } else if (this$1.isParentOf(active)) {\n\n if (active.hideTimer) {\n active.hide(false);\n } else {\n return;\n }\n\n } else if (active && this$1.isChildOf(active)) {\n\n active.clearTimers();\n\n } else if (active && !this$1.isChildOf(active) && !this$1.isParentOf(active)) {\n\n var prev;\n while (active && active !== prev && !this$1.isChildOf(active)) {\n prev = active;\n active.hide(false);\n }\n\n }\n\n if (delay && this$1.delayShow) {\n this$1.showTimer = setTimeout(show, this$1.delayShow);\n } else {\n show();\n }\n\n active = this$1;\n };\n\n if (toggle && this.toggle && toggle.$el !== this.toggle.$el) {\n\n once(this.$el, 'hide', tryShow);\n this.hide(false);\n\n } else {\n tryShow();\n }\n },\n\n hide: function(delay) {\n var this$1 = this;\n if ( delay === void 0 ) delay = true;\n\n\n var hide = function () { return this$1.toggleNow(this$1.$el, false); };\n\n this.clearTimers();\n\n this.isDelaying = this.tracker.movesTo(this.$el);\n\n if (delay && this.isDelaying) {\n this.hideTimer = setTimeout(this.hide, this.hoverIdle);\n } else if (delay && this.delayHide) {\n this.hideTimer = setTimeout(hide, this.delayHide);\n } else {\n hide();\n }\n },\n\n clearTimers: function() {\n clearTimeout(this.showTimer);\n clearTimeout(this.hideTimer);\n this.showTimer = null;\n this.hideTimer = null;\n this.isDelaying = false;\n },\n\n isActive: function() {\n return active === this;\n },\n\n isChildOf: function(drop) {\n return drop && drop !== this && within(this.$el, drop.$el);\n },\n\n isParentOf: function(drop) {\n return drop && drop !== this && within(drop.$el, this.$el);\n },\n\n position: function() {\n\n removeClasses(this.$el, ((this.clsDrop) + \"-(stack|boundary)\"));\n css(this.$el, {top: '', left: '', display: 'block'});\n toggleClass(this.$el, ((this.clsDrop) + \"-boundary\"), this.boundaryAlign);\n\n var boundary = offset(this.boundary);\n var alignTo = this.boundaryAlign ? boundary : offset(this.toggle.$el);\n\n if (this.align === 'justify') {\n var prop = this.getAxis() === 'y' ? 'width' : 'height';\n css(this.$el, prop, alignTo[prop]);\n } else if (this.$el.offsetWidth > Math.max(boundary.right - alignTo.left, alignTo.right - boundary.left)) {\n addClass(this.$el, ((this.clsDrop) + \"-stack\"));\n }\n\n this.positionAt(this.$el, this.boundaryAlign ? this.boundary : this.toggle.$el, this.boundary);\n\n css(this.$el, 'display', '');\n\n }\n\n }\n\n };\n\n var registered;\n\n function registerEvent() {\n\n if (registered) {\n return;\n }\n\n registered = true;\n on(document, pointerUp, function (ref) {\n var target = ref.target;\n var defaultPrevented = ref.defaultPrevented;\n\n var prev;\n\n if (defaultPrevented) {\n return;\n }\n\n while (active && active !== prev && !within(target, active.$el) && !(active.toggle && within(target, active.toggle.$el))) {\n prev = active;\n active.hide(false);\n }\n });\n }\n\n var Dropdown = {\n\n extends: Drop\n\n };\n\n var FormCustom = {\n\n mixins: [Class],\n\n args: 'target',\n\n props: {\n target: Boolean\n },\n\n data: {\n target: false\n },\n\n computed: {\n\n input: function(_, $el) {\n return $(selInput, $el);\n },\n\n state: function() {\n return this.input.nextElementSibling;\n },\n\n target: function(ref, $el) {\n var target = ref.target;\n\n return target && (target === true\n && this.input.parentNode === $el\n && this.input.nextElementSibling\n || query(target, $el));\n }\n\n },\n\n update: function() {\n\n var ref = this;\n var target = ref.target;\n var input = ref.input;\n\n if (!target) {\n return;\n }\n\n var option;\n var prop = isInput(target) ? 'value' : 'textContent';\n var prev = target[prop];\n var value = input.files && input.files[0]\n ? input.files[0].name\n : matches(input, 'select') && (option = $$('option', input).filter(function (el) { return el.selected; })[0])\n ? option.textContent\n : input.value;\n\n if (prev !== value) {\n target[prop] = value;\n }\n\n },\n\n events: [\n\n {\n name: 'change',\n\n handler: function() {\n this.$emit();\n }\n },\n\n {\n name: 'reset',\n\n el: function() {\n return closest(this.$el, 'form');\n },\n\n handler: function() {\n this.$emit();\n }\n }\n\n ]\n\n };\n\n // Deprecated\n var Gif = {\n\n update: {\n\n read: function(data) {\n\n var inview = isInView(this.$el);\n\n if (!inview || data.isInView === inview) {\n return false;\n }\n\n data.isInView = inview;\n },\n\n write: function() {\n this.$el.src = this.$el.src;\n },\n\n events: ['scroll', 'resize']\n }\n\n };\n\n var Margin = {\n\n props: {\n margin: String,\n firstColumn: Boolean\n },\n\n data: {\n margin: 'uk-margin-small-top',\n firstColumn: 'uk-first-column'\n },\n\n update: {\n\n read: function(data) {\n\n var items = this.$el.children;\n var rows = [[]];\n\n if (!items.length || !isVisible(this.$el)) {\n return data.rows = rows;\n }\n\n data.rows = getRows(items);\n data.stacks = !data.rows.some(function (row) { return row.length > 1; });\n\n },\n\n write: function(ref) {\n var this$1 = this;\n var rows = ref.rows;\n\n\n rows.forEach(function (row, i) { return row.forEach(function (el, j) {\n toggleClass(el, this$1.margin, i !== 0);\n toggleClass(el, this$1.firstColumn, j === 0);\n }); }\n );\n\n },\n\n events: ['resize']\n\n }\n\n };\n\n function getRows(items) {\n var rows = [[]];\n\n for (var i = 0; i < items.length; i++) {\n\n var el = items[i];\n var dim = getOffset(el);\n\n if (!dim.height) {\n continue;\n }\n\n for (var j = rows.length - 1; j >= 0; j--) {\n\n var row = rows[j];\n\n if (!row[0]) {\n row.push(el);\n break;\n }\n\n var leftDim = (void 0);\n if (row[0].offsetParent === el.offsetParent) {\n leftDim = getOffset(row[0]);\n } else {\n dim = getOffset(el, true);\n leftDim = getOffset(row[0], true);\n }\n\n if (dim.top >= leftDim.bottom - 1) {\n rows.push([el]);\n break;\n }\n\n if (dim.bottom > leftDim.top) {\n\n if (dim.left < leftDim.left && !isRtl) {\n row.unshift(el);\n break;\n }\n\n row.push(el);\n break;\n }\n\n if (j === 0) {\n rows.unshift([el]);\n break;\n }\n\n }\n\n }\n\n return rows;\n\n }\n\n function getOffset(element, offset) {\n var assign;\n\n if ( offset === void 0 ) offset = false;\n\n var offsetTop = element.offsetTop;\n var offsetLeft = element.offsetLeft;\n var offsetHeight = element.offsetHeight;\n\n if (offset) {\n (assign = offsetPosition(element), offsetTop = assign[0], offsetLeft = assign[1]);\n }\n\n return {\n top: offsetTop,\n left: offsetLeft,\n height: offsetHeight,\n bottom: offsetTop + offsetHeight\n };\n }\n\n var Grid = {\n\n extends: Margin,\n\n mixins: [Class],\n\n name: 'grid',\n\n props: {\n masonry: Boolean,\n parallax: Number\n },\n\n data: {\n margin: 'uk-grid-margin',\n clsStack: 'uk-grid-stack',\n masonry: false,\n parallax: 0\n },\n\n computed: {\n\n length: function(_, $el) {\n return $el.children.length;\n },\n\n parallax: function(ref) {\n var parallax = ref.parallax;\n\n return parallax && this.length ? Math.abs(parallax) : '';\n }\n\n },\n\n connected: function() {\n this.masonry && addClass(this.$el, 'uk-flex-top uk-flex-wrap-top');\n },\n\n update: [\n\n {\n\n read: function(ref) {\n var rows = ref.rows;\n\n\n if (this.masonry || this.parallax) {\n rows = rows.map(function (elements) { return sortBy(elements, 'offsetLeft'); });\n\n if (isRtl) {\n rows.map(function (row) { return row.reverse(); });\n }\n\n }\n\n var transitionInProgress = rows.some(function (elements) { return elements.some(Transition.inProgress); });\n var translates = false;\n var elHeight = '';\n\n if (this.masonry && this.length) {\n\n var height = 0;\n\n translates = rows.reduce(function (translates, row, i) {\n\n translates[i] = row.map(function (_, j) { return i === 0 ? 0 : toFloat(translates[i - 1][j]) + (height - toFloat(rows[i - 1][j] && rows[i - 1][j].offsetHeight)); });\n height = row.reduce(function (height, el) { return Math.max(height, el.offsetHeight); }, 0);\n\n return translates;\n\n }, []);\n\n elHeight = maxColumnHeight(rows) + getMarginTop(this.$el, this.margin) * (rows.length - 1);\n\n }\n\n return {rows: rows, translates: translates, height: !transitionInProgress ? elHeight : false};\n\n },\n\n write: function(ref) {\n var stacks = ref.stacks;\n var height = ref.height;\n\n\n toggleClass(this.$el, this.clsStack, stacks);\n\n css(this.$el, 'paddingBottom', this.parallax);\n height !== false && css(this.$el, 'height', height);\n\n },\n\n events: ['resize']\n\n },\n\n {\n\n read: function(ref) {\n var height$1 = ref.height;\n\n return {\n scrolled: this.parallax\n ? scrolledOver(this.$el, height$1 ? height$1 - height(this.$el) : 0) * this.parallax\n : false\n };\n },\n\n write: function(ref) {\n var rows = ref.rows;\n var scrolled = ref.scrolled;\n var translates = ref.translates;\n\n\n if (scrolled === false && !translates) {\n return;\n }\n\n rows.forEach(function (row, i) { return row.forEach(function (el, j) { return css(el, 'transform', !scrolled && !translates ? '' : (\"translateY(\" + ((translates && -translates[i][j]) + (scrolled ? j % 2 ? scrolled : scrolled / 8 : 0)) + \"px)\")); }\n ); }\n );\n\n },\n\n events: ['scroll', 'resize']\n\n }\n\n ]\n\n };\n\n function getMarginTop(root, cls) {\n\n var nodes = toNodes(root.children);\n var ref = nodes.filter(function (el) { return hasClass(el, cls); });\n var node = ref[0];\n\n return toFloat(node\n ? css(node, 'marginTop')\n : css(nodes[0], 'paddingLeft'));\n }\n\n function maxColumnHeight(rows) {\n return Math.max.apply(Math, rows.reduce(function (sum, row) {\n row.forEach(function (el, i) { return sum[i] = (sum[i] || 0) + el.offsetHeight; });\n return sum;\n }, []));\n }\n\n // IE 11 fix (min-height on a flex container won't apply to its flex items)\n var FlexBug = isIE ? {\n\n data: {\n selMinHeight: false,\n forceHeight: false\n },\n\n computed: {\n\n elements: function(ref, $el) {\n var selMinHeight = ref.selMinHeight;\n\n return selMinHeight ? $$(selMinHeight, $el) : [$el];\n }\n\n },\n\n update: [\n\n {\n\n read: function() {\n css(this.elements, 'height', '');\n },\n\n order: -5,\n\n events: ['resize']\n\n },\n\n {\n\n write: function() {\n var this$1 = this;\n\n this.elements.forEach(function (el) {\n var height = toFloat(css(el, 'minHeight'));\n if (height && (this$1.forceHeight || Math.round(height + boxModelAdjust('height', el, 'content-box')) >= el.offsetHeight)) {\n css(el, 'height', height);\n }\n });\n },\n\n order: 5,\n\n events: ['resize']\n\n }\n\n ]\n\n } : {};\n\n var HeightMatch = {\n\n mixins: [FlexBug],\n\n args: 'target',\n\n props: {\n target: String,\n row: Boolean\n },\n\n data: {\n target: '> *',\n row: true,\n forceHeight: true\n },\n\n computed: {\n\n elements: function(ref, $el) {\n var target = ref.target;\n\n return $$(target, $el);\n }\n\n },\n\n update: {\n\n read: function() {\n return {\n rows: (this.row ? getRows(this.elements) : [this.elements]).map(match)\n };\n },\n\n write: function(ref) {\n var rows = ref.rows;\n\n rows.forEach(function (ref) {\n var heights = ref.heights;\n var elements = ref.elements;\n\n return elements.forEach(function (el, i) { return css(el, 'minHeight', heights[i]); }\n );\n }\n );\n },\n\n events: ['resize']\n\n }\n\n };\n\n function match(elements) {\n var assign;\n\n\n if (elements.length < 2) {\n return {heights: [''], elements: elements};\n }\n\n var ref = getHeights(elements);\n var heights = ref.heights;\n var max = ref.max;\n var hasMinHeight = elements.some(function (el) { return el.style.minHeight; });\n var hasShrunk = elements.some(function (el, i) { return !el.style.minHeight && heights[i] < max; });\n\n if (hasMinHeight && hasShrunk) {\n css(elements, 'minHeight', '');\n ((assign = getHeights(elements), heights = assign.heights, max = assign.max));\n }\n\n heights = elements.map(function (el, i) { return heights[i] === max && toFloat(el.style.minHeight).toFixed(2) !== max.toFixed(2) ? '' : max; }\n );\n\n return {heights: heights, elements: elements};\n }\n\n function getHeights(elements) {\n var heights = elements.map(function (el) { return offset(el).height - boxModelAdjust('height', el, 'content-box'); });\n var max = Math.max.apply(null, heights);\n\n return {heights: heights, max: max};\n }\n\n var HeightViewport = {\n\n mixins: [FlexBug],\n\n props: {\n expand: Boolean,\n offsetTop: Boolean,\n offsetBottom: Boolean,\n minHeight: Number\n },\n\n data: {\n expand: false,\n offsetTop: false,\n offsetBottom: false,\n minHeight: 0\n },\n\n update: {\n\n read: function(ref) {\n var prev = ref.minHeight;\n\n\n var minHeight = '';\n var box = boxModelAdjust('height', this.$el, 'content-box');\n\n if (this.expand) {\n\n minHeight = height(window) - (offsetHeight(document.documentElement) - offsetHeight(this.$el)) - box || '';\n\n } else {\n\n // on mobile devices (iOS and Android) window.innerHeight !== 100vh\n minHeight = 'calc(100vh';\n\n if (this.offsetTop) {\n\n var ref$1 = offset(this.$el);\n var top = ref$1.top;\n minHeight += top < height(window) / 2 ? (\" - \" + top + \"px\") : '';\n\n }\n\n if (this.offsetBottom === true) {\n\n minHeight += \" - \" + (offsetHeight(this.$el.nextElementSibling)) + \"px\";\n\n } else if (isNumeric(this.offsetBottom)) {\n\n minHeight += \" - \" + (this.offsetBottom) + \"vh\";\n\n } else if (this.offsetBottom && endsWith(this.offsetBottom, 'px')) {\n\n minHeight += \" - \" + (toFloat(this.offsetBottom)) + \"px\";\n\n } else if (isString(this.offsetBottom)) {\n\n minHeight += \" - \" + (offsetHeight(query(this.offsetBottom, this.$el))) + \"px\";\n\n }\n\n minHeight += (box ? (\" - \" + box + \"px\") : '') + \")\";\n\n }\n\n return {minHeight: minHeight, prev: prev};\n },\n\n write: function(ref) {\n var minHeight = ref.minHeight;\n var prev = ref.prev;\n\n\n css(this.$el, {minHeight: minHeight});\n\n if (minHeight !== prev) {\n this.$update(this.$el, 'resize');\n }\n\n if (this.minHeight && toFloat(css(this.$el, 'minHeight')) < this.minHeight) {\n css(this.$el, 'minHeight', this.minHeight);\n }\n\n },\n\n events: ['resize']\n\n }\n\n };\n\n function offsetHeight(el) {\n return el && el.offsetHeight || 0;\n }\n\n var Svg = {\n\n args: 'src',\n\n props: {\n id: Boolean,\n icon: String,\n src: String,\n style: String,\n width: Number,\n height: Number,\n ratio: Number,\n 'class': String,\n strokeAnimation: Boolean,\n attributes: 'list'\n },\n\n data: {\n ratio: 1,\n include: ['style', 'class'],\n 'class': '',\n strokeAnimation: false\n },\n\n beforeConnect: function() {\n var this$1 = this;\n var assign;\n\n\n this.class += ' uk-svg';\n\n if (!this.icon && includes(this.src, '#')) {\n\n var parts = this.src.split('#');\n\n if (parts.length > 1) {\n (assign = parts, this.src = assign[0], this.icon = assign[1]);\n }\n }\n\n this.svg = this.getSvg().then(function (el) {\n this$1.applyAttributes(el);\n return this$1.svgEl = insertSVG(el, this$1.$el);\n }, noop);\n\n },\n\n disconnected: function() {\n var this$1 = this;\n\n\n if (isVoidElement(this.$el)) {\n attr(this.$el, 'hidden', null);\n }\n\n if (this.svg) {\n this.svg.then(function (svg) { return (!this$1._connected || svg !== this$1.svgEl) && remove(svg); }, noop);\n }\n\n this.svg = this.svgEl = null;\n\n },\n\n update: {\n\n read: function() {\n return !!(this.strokeAnimation && this.svgEl && isVisible(this.svgEl));\n },\n\n write: function() {\n applyAnimation(this.svgEl);\n },\n\n type: ['resize']\n\n },\n\n methods: {\n\n getSvg: function() {\n var this$1 = this;\n\n return loadSVG(this.src).then(function (svg) { return parseSVG(svg, this$1.icon) || Promise.reject('SVG not found.'); }\n );\n },\n\n applyAttributes: function(el) {\n var this$1 = this;\n\n\n for (var prop in this.$options.props) {\n if (this[prop] && includes(this.include, prop)) {\n attr(el, prop, this[prop]);\n }\n }\n\n for (var attribute in this.attributes) {\n var ref = this.attributes[attribute].split(':', 2);\n var prop$1 = ref[0];\n var value = ref[1];\n attr(el, prop$1, value);\n }\n\n if (!this.id) {\n removeAttr(el, 'id');\n }\n\n var props = ['width', 'height'];\n var dimensions = [this.width, this.height];\n\n if (!dimensions.some(function (val) { return val; })) {\n dimensions = props.map(function (prop) { return attr(el, prop); });\n }\n\n var viewBox = attr(el, 'viewBox');\n if (viewBox && !dimensions.some(function (val) { return val; })) {\n dimensions = viewBox.split(' ').slice(2);\n }\n\n dimensions.forEach(function (val, i) {\n val = (val | 0) * this$1.ratio;\n val && attr(el, props[i], val);\n\n if (val && !dimensions[i ^ 1]) {\n removeAttr(el, props[i ^ 1]);\n }\n });\n\n attr(el, 'data-svg', this.icon || this.src);\n\n }\n\n }\n\n };\n\n var svgs = {};\n\n function loadSVG(src) {\n\n if (svgs[src]) {\n return svgs[src];\n }\n\n return svgs[src] = new Promise(function (resolve, reject) {\n\n if (!src) {\n reject();\n return;\n }\n\n if (startsWith(src, 'data:')) {\n resolve(decodeURIComponent(src.split(',')[1]));\n } else {\n\n ajax(src).then(\n function (xhr) { return resolve(xhr.response); },\n function () { return reject('SVG not found.'); }\n );\n\n }\n\n });\n }\n\n function parseSVG(svg, icon) {\n\n if (icon && includes(svg, '<symbol')) {\n svg = parseSymbols(svg, icon) || svg;\n }\n\n svg = $(svg.substr(svg.indexOf('<svg')));\n return svg && svg.hasChildNodes() && svg;\n }\n\n var symbolRe = /<symbol(.*?id=(['\"])(.*?)\\2[^]*?<\\/)symbol>/g;\n var symbols = {};\n\n function parseSymbols(svg, icon) {\n\n if (!symbols[svg]) {\n\n symbols[svg] = {};\n\n var match;\n while ((match = symbolRe.exec(svg))) {\n symbols[svg][match[3]] = \"<svg xmlns=\\\"http://www.w3.org/2000/svg\\\"\" + (match[1]) + \"svg>\";\n }\n\n symbolRe.lastIndex = 0;\n\n }\n\n return symbols[svg][icon];\n }\n\n function applyAnimation(el) {\n\n var length = getMaxPathLength(el);\n\n if (length) {\n el.style.setProperty('--uk-animation-stroke', length);\n }\n\n }\n\n function getMaxPathLength(el) {\n return Math.ceil(Math.max.apply(Math, $$('[stroke]', el).map(function (stroke) { return stroke.getTotalLength && stroke.getTotalLength() || 0; }\n ).concat([0])));\n }\n\n function insertSVG(el, root) {\n if (isVoidElement(root) || root.tagName === 'CANVAS') {\n\n attr(root, 'hidden', true);\n\n var next = root.nextElementSibling;\n return equals(el, next)\n ? next\n : after(root, el);\n\n } else {\n\n var last = root.lastElementChild;\n return equals(el, last)\n ? last\n : append(root, el);\n\n }\n }\n\n function equals(el, other) {\n return attr(el, 'data-svg') === attr(other, 'data-svg');\n }\n\n var closeIcon = \"<svg width=\\\"14\\\" height=\\\"14\\\" viewBox=\\\"0 0 14 14\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><line fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.1\\\" x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"13\\\" y2=\\\"13\\\"/><line fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.1\\\" x1=\\\"13\\\" y1=\\\"1\\\" x2=\\\"1\\\" y2=\\\"13\\\"/></svg>\";\n\n var closeLarge = \"<svg width=\\\"20\\\" height=\\\"20\\\" viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><line fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.4\\\" x1=\\\"1\\\" y1=\\\"1\\\" x2=\\\"19\\\" y2=\\\"19\\\"/><line fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.4\\\" x1=\\\"19\\\" y1=\\\"1\\\" x2=\\\"1\\\" y2=\\\"19\\\"/></svg>\";\n\n var marker = \"<svg width=\\\"20\\\" height=\\\"20\\\" viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><rect x=\\\"9\\\" y=\\\"4\\\" width=\\\"1\\\" height=\\\"11\\\"/><rect x=\\\"4\\\" y=\\\"9\\\" width=\\\"11\\\" height=\\\"1\\\"/></svg>\";\n\n var navbarToggleIcon = \"<svg width=\\\"20\\\" height=\\\"20\\\" viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><rect y=\\\"9\\\" width=\\\"20\\\" height=\\\"2\\\"/><rect y=\\\"3\\\" width=\\\"20\\\" height=\\\"2\\\"/><rect y=\\\"15\\\" width=\\\"20\\\" height=\\\"2\\\"/></svg>\";\n\n var overlayIcon = \"<svg width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><rect x=\\\"19\\\" y=\\\"0\\\" width=\\\"1\\\" height=\\\"40\\\"/><rect x=\\\"0\\\" y=\\\"19\\\" width=\\\"40\\\" height=\\\"1\\\"/></svg>\";\n\n var paginationNext = \"<svg width=\\\"7\\\" height=\\\"12\\\" viewBox=\\\"0 0 7 12\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.2\\\" points=\\\"1 1 6 6 1 11\\\"/></svg>\";\n\n var paginationPrevious = \"<svg width=\\\"7\\\" height=\\\"12\\\" viewBox=\\\"0 0 7 12\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.2\\\" points=\\\"6 1 1 6 6 11\\\"/></svg>\";\n\n var searchIcon = \"<svg width=\\\"20\\\" height=\\\"20\\\" viewBox=\\\"0 0 20 20\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><circle fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.1\\\" cx=\\\"9\\\" cy=\\\"9\\\" r=\\\"7\\\"/><path fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.1\\\" d=\\\"M14,14 L18,18 L14,14 Z\\\"/></svg>\";\n\n var searchLarge = \"<svg width=\\\"40\\\" height=\\\"40\\\" viewBox=\\\"0 0 40 40\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><circle fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.8\\\" cx=\\\"17.5\\\" cy=\\\"17.5\\\" r=\\\"16.5\\\"/><line fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.8\\\" x1=\\\"38\\\" y1=\\\"39\\\" x2=\\\"29\\\" y2=\\\"30\\\"/></svg>\";\n\n var searchNavbar = \"<svg width=\\\"24\\\" height=\\\"24\\\" viewBox=\\\"0 0 24 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><circle fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.1\\\" cx=\\\"10.5\\\" cy=\\\"10.5\\\" r=\\\"9.5\\\"/><line fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.1\\\" x1=\\\"23\\\" y1=\\\"23\\\" x2=\\\"17\\\" y2=\\\"17\\\"/></svg>\";\n\n var slidenavNext = \"<svg width=\\\"14px\\\" height=\\\"24px\\\" viewBox=\\\"0 0 14 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.4\\\" points=\\\"1.225,23 12.775,12 1.225,1 \\\"/></svg>\";\n\n var slidenavNextLarge = \"<svg width=\\\"25px\\\" height=\\\"40px\\\" viewBox=\\\"0 0 25 40\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"2\\\" points=\\\"4.002,38.547 22.527,20.024 4,1.5 \\\"/></svg>\";\n\n var slidenavPrevious = \"<svg width=\\\"14px\\\" height=\\\"24px\\\" viewBox=\\\"0 0 14 24\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.4\\\" points=\\\"12.775,1 1.225,12 12.775,23 \\\"/></svg>\";\n\n var slidenavPreviousLarge = \"<svg width=\\\"25px\\\" height=\\\"40px\\\" viewBox=\\\"0 0 25 40\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"2\\\" points=\\\"20.527,1.5 2,20.024 20.525,38.547 \\\"/></svg>\";\n\n var spinner = \"<svg width=\\\"30\\\" height=\\\"30\\\" viewBox=\\\"0 0 30 30\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><circle fill=\\\"none\\\" stroke=\\\"#000\\\" cx=\\\"15\\\" cy=\\\"15\\\" r=\\\"14\\\"/></svg>\";\n\n var totop = \"<svg width=\\\"18\\\" height=\\\"10\\\" viewBox=\\\"0 0 18 10\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\"><polyline fill=\\\"none\\\" stroke=\\\"#000\\\" stroke-width=\\\"1.2\\\" points=\\\"1 9 9 1 17 9 \\\"/></svg>\";\n\n var parsed = {};\n var icons = {\n spinner: spinner,\n totop: totop,\n marker: marker,\n 'close-icon': closeIcon,\n 'close-large': closeLarge,\n 'navbar-toggle-icon': navbarToggleIcon,\n 'overlay-icon': overlayIcon,\n 'pagination-next': paginationNext,\n 'pagination-previous': paginationPrevious,\n 'search-icon': searchIcon,\n 'search-large': searchLarge,\n 'search-navbar': searchNavbar,\n 'slidenav-next': slidenavNext,\n 'slidenav-next-large': slidenavNextLarge,\n 'slidenav-previous': slidenavPrevious,\n 'slidenav-previous-large': slidenavPreviousLarge\n };\n\n var Icon = {\n\n install: install,\n\n extends: Svg,\n\n args: 'icon',\n\n props: ['icon'],\n\n data: {include: []},\n\n isIcon: true,\n\n beforeConnect: function() {\n addClass(this.$el, 'uk-icon');\n },\n\n methods: {\n\n getSvg: function() {\n\n var icon = getIcon(applyRtl(this.icon));\n\n if (!icon) {\n return Promise.reject('Icon not found.');\n }\n\n return Promise.resolve(icon);\n }\n\n }\n\n };\n\n var IconComponent = {\n\n args: false,\n\n extends: Icon,\n\n data: function (vm) { return ({\n icon: hyphenate(vm.constructor.options.name)\n }); },\n\n beforeConnect: function() {\n addClass(this.$el, this.$name);\n }\n\n };\n\n var Slidenav = {\n\n extends: IconComponent,\n\n beforeConnect: function() {\n addClass(this.$el, 'uk-slidenav');\n },\n\n computed: {\n\n icon: function(ref, $el) {\n var icon = ref.icon;\n\n return hasClass($el, 'uk-slidenav-large')\n ? (icon + \"-large\")\n : icon;\n }\n\n }\n\n };\n\n var Search = {\n\n extends: IconComponent,\n\n computed: {\n\n icon: function(ref, $el) {\n var icon = ref.icon;\n\n return hasClass($el, 'uk-search-icon') && parents($el, '.uk-search-large').length\n ? 'search-large'\n : parents($el, '.uk-search-navbar').length\n ? 'search-navbar'\n : icon;\n }\n\n }\n\n };\n\n var Close = {\n\n extends: IconComponent,\n\n computed: {\n\n icon: function() {\n return (\"close-\" + (hasClass(this.$el, 'uk-close-large') ? 'large' : 'icon'));\n }\n\n }\n\n };\n\n var Spinner = {\n\n extends: IconComponent,\n\n connected: function() {\n var this$1 = this;\n\n this.svg.then(function (svg) { return this$1.ratio !== 1 && css($('circle', svg), 'strokeWidth', 1 / this$1.ratio); }, noop);\n }\n\n };\n\n function install(UIkit) {\n UIkit.icon.add = function (name, svg) {\n var obj;\n\n\n var added = isString(name) ? (( obj = {}, obj[name] = svg, obj )) : name;\n each(added, function (svg, name) {\n icons[name] = svg;\n delete parsed[name];\n });\n\n if (UIkit._initialized) {\n apply(document.body, function (el) { return each(UIkit.getComponents(el), function (cmp) {\n cmp.$options.isIcon && cmp.icon in added && cmp.$reset();\n }); }\n );\n }\n };\n }\n\n function getIcon(icon) {\n\n if (!icons[icon]) {\n return null;\n }\n\n if (!parsed[icon]) {\n parsed[icon] = $(icons[icon].trim());\n }\n\n return parsed[icon].cloneNode(true);\n }\n\n function applyRtl(icon) {\n return isRtl ? swap(swap(icon, 'left', 'right'), 'previous', 'next') : icon;\n }\n\n var Img = {\n\n args: 'dataSrc',\n\n props: {\n dataSrc: String,\n dataSrcset: Boolean,\n sizes: String,\n width: Number,\n height: Number,\n offsetTop: String,\n offsetLeft: String,\n target: String\n },\n\n data: {\n dataSrc: '',\n dataSrcset: false,\n sizes: false,\n width: false,\n height: false,\n offsetTop: '50vh',\n offsetLeft: 0,\n target: false\n },\n\n computed: {\n\n cacheKey: function(ref) {\n var dataSrc = ref.dataSrc;\n\n return ((this.$name) + \".\" + dataSrc);\n },\n\n width: function(ref) {\n var width = ref.width;\n var dataWidth = ref.dataWidth;\n\n return width || dataWidth;\n },\n\n height: function(ref) {\n var height = ref.height;\n var dataHeight = ref.dataHeight;\n\n return height || dataHeight;\n },\n\n sizes: function(ref) {\n var sizes = ref.sizes;\n var dataSizes = ref.dataSizes;\n\n return sizes || dataSizes;\n },\n\n isImg: function(_, $el) {\n return isImg($el);\n },\n\n target: {\n\n get: function(ref) {\n var target = ref.target;\n\n return [this.$el].concat(queryAll(target, this.$el));\n },\n\n watch: function() {\n this.observe();\n }\n\n },\n\n offsetTop: function(ref) {\n var offsetTop = ref.offsetTop;\n\n return toPx(offsetTop, 'height');\n },\n\n offsetLeft: function(ref) {\n var offsetLeft = ref.offsetLeft;\n\n return toPx(offsetLeft, 'width');\n }\n\n },\n\n connected: function() {\n\n if (storage[this.cacheKey]) {\n setSrcAttrs(this.$el, storage[this.cacheKey] || this.dataSrc, this.dataSrcset, this.sizes);\n } else if (this.isImg && this.width && this.height) {\n setSrcAttrs(this.$el, getPlaceholderImage(this.width, this.height, this.sizes));\n }\n\n this.observer = new IntersectionObserver(this.load, {\n rootMargin: ((this.offsetTop) + \"px \" + (this.offsetLeft) + \"px\")\n });\n\n requestAnimationFrame(this.observe);\n\n },\n\n disconnected: function() {\n this.observer.disconnect();\n },\n\n update: {\n\n read: function(ref) {\n var this$1 = this;\n var image = ref.image;\n\n\n if (!image && document.readyState === 'complete') {\n this.load(this.observer.takeRecords());\n }\n\n if (this.isImg) {\n return false;\n }\n\n image && image.then(function (img) { return img && img.currentSrc !== '' && setSrcAttrs(this$1.$el, currentSrc(img)); });\n\n },\n\n write: function(data) {\n\n if (this.dataSrcset && window.devicePixelRatio !== 1) {\n\n var bgSize = css(this.$el, 'backgroundSize');\n if (bgSize.match(/^(auto\\s?)+$/) || toFloat(bgSize) === data.bgSize) {\n data.bgSize = getSourceSize(this.dataSrcset, this.sizes);\n css(this.$el, 'backgroundSize', ((data.bgSize) + \"px\"));\n }\n\n }\n\n },\n\n events: ['resize']\n\n },\n\n methods: {\n\n load: function(entries) {\n var this$1 = this;\n\n\n if (!entries.some(function (entry) { return entry.isIntersecting; })) {\n return;\n }\n\n this._data.image = getImage(this.dataSrc, this.dataSrcset, this.sizes).then(function (img) {\n\n setSrcAttrs(this$1.$el, currentSrc(img), img.srcset, img.sizes);\n storage[this$1.cacheKey] = currentSrc(img);\n return img;\n\n }, noop);\n\n this.observer.disconnect();\n },\n\n observe: function() {\n var this$1 = this;\n\n if (!this._data.image && this._connected) {\n this.target.forEach(function (el) { return this$1.observer.observe(el); });\n }\n }\n\n }\n\n };\n\n function setSrcAttrs(el, src, srcset, sizes) {\n\n if (isImg(el)) {\n sizes && (el.sizes = sizes);\n srcset && (el.srcset = srcset);\n src && (el.src = src);\n } else if (src) {\n\n var change = !includes(el.style.backgroundImage, src);\n if (change) {\n css(el, 'backgroundImage', (\"url(\" + (escape(src)) + \")\"));\n trigger(el, createEvent('load', false));\n }\n\n }\n\n }\n\n function getPlaceholderImage(width, height, sizes) {\n var assign;\n\n\n if (sizes) {\n ((assign = Dimensions.ratio({width: width, height: height}, 'width', toPx(sizesToPixel(sizes))), width = assign.width, height = assign.height));\n }\n\n return (\"data:image/svg+xml;utf8,<svg xmlns=\\\"http://www.w3.org/2000/svg\\\" width=\\\"\" + width + \"\\\" height=\\\"\" + height + \"\\\"></svg>\");\n }\n\n var sizesRe = /\\s*(.*?)\\s*(\\w+|calc\\(.*?\\))\\s*(?:,|$)/g;\n function sizesToPixel(sizes) {\n var matches;\n\n sizesRe.lastIndex = 0;\n\n while ((matches = sizesRe.exec(sizes))) {\n if (!matches[1] || window.matchMedia(matches[1]).matches) {\n matches = evaluateSize(matches[2]);\n break;\n }\n }\n\n return matches || '100vw';\n }\n\n var sizeRe = /\\d+(?:\\w+|%)/g;\n var additionRe = /[+-]?(\\d+)/g;\n function evaluateSize(size) {\n return startsWith(size, 'calc')\n ? size\n .substring(5, size.length - 1)\n .replace(sizeRe, function (size) { return toPx(size); })\n .replace(/ /g, '')\n .match(additionRe)\n .reduce(function (a, b) { return a + +b; }, 0)\n : size;\n }\n\n var srcSetRe = /\\s+\\d+w\\s*(?:,|$)/g;\n function getSourceSize(srcset, sizes) {\n var srcSize = toPx(sizesToPixel(sizes));\n var descriptors = (srcset.match(srcSetRe) || []).map(toFloat).sort(function (a, b) { return a - b; });\n\n return descriptors.filter(function (size) { return size >= srcSize; })[0] || descriptors.pop() || '';\n }\n\n function isImg(el) {\n return el.tagName === 'IMG';\n }\n\n function currentSrc(el) {\n return el.currentSrc || el.src;\n }\n\n var key = '__test__';\n var storage;\n\n // workaround for Safari's private browsing mode and accessing sessionStorage in Blink\n try {\n storage = window.sessionStorage || {};\n storage[key] = 1;\n delete storage[key];\n } catch (e) {\n storage = {};\n }\n\n var Media = {\n\n props: {\n media: Boolean\n },\n\n data: {\n media: false\n },\n\n computed: {\n\n matchMedia: function() {\n var media = toMedia(this.media);\n return !media || window.matchMedia(media).matches;\n }\n\n }\n\n };\n\n function toMedia(value) {\n\n if (isString(value)) {\n if (value[0] === '@') {\n var name = \"breakpoint-\" + (value.substr(1));\n value = toFloat(getCssVar(name));\n } else if (isNaN(value)) {\n return value;\n }\n }\n\n return value && !isNaN(value) ? (\"(min-width: \" + value + \"px)\") : false;\n }\n\n var Leader = {\n\n mixins: [Class, Media],\n\n props: {\n fill: String\n },\n\n data: {\n fill: '',\n clsWrapper: 'uk-leader-fill',\n clsHide: 'uk-leader-hide',\n attrFill: 'data-fill'\n },\n\n computed: {\n\n fill: function(ref) {\n var fill = ref.fill;\n\n return fill || getCssVar('leader-fill-content');\n }\n\n },\n\n connected: function() {\n var assign;\n\n (assign = wrapInner(this.$el, (\"<span class=\\\"\" + (this.clsWrapper) + \"\\\">\")), this.wrapper = assign[0]);\n },\n\n disconnected: function() {\n unwrap(this.wrapper.childNodes);\n },\n\n update: {\n\n read: function(ref) {\n var changed = ref.changed;\n var width = ref.width;\n\n\n var prev = width;\n\n width = Math.floor(this.$el.offsetWidth / 2);\n\n return {\n width: width,\n fill: this.fill,\n changed: changed || prev !== width,\n hide: !this.matchMedia\n };\n },\n\n write: function(data) {\n\n toggleClass(this.wrapper, this.clsHide, data.hide);\n\n if (data.changed) {\n data.changed = false;\n attr(this.wrapper, this.attrFill, new Array(data.width).join(data.fill));\n }\n\n },\n\n events: ['resize']\n\n }\n\n };\n\n var Container = {\n\n props: {\n container: Boolean\n },\n\n data: {\n container: true\n },\n\n computed: {\n\n container: function(ref) {\n var container = ref.container;\n\n return container === true && this.$container || container && $(container);\n }\n\n }\n\n };\n\n var active$1;\n\n var Modal = {\n\n mixins: [Class, Container, Togglable],\n\n props: {\n selPanel: String,\n selClose: String,\n escClose: Boolean,\n bgClose: Boolean,\n stack: Boolean\n },\n\n data: {\n cls: 'uk-open',\n escClose: true,\n bgClose: true,\n overlay: true,\n stack: false\n },\n\n computed: {\n\n panel: function(ref, $el) {\n var selPanel = ref.selPanel;\n\n return $(selPanel, $el);\n },\n\n transitionElement: function() {\n return this.panel;\n },\n\n bgClose: function(ref) {\n var bgClose = ref.bgClose;\n\n return bgClose && this.panel;\n }\n\n },\n\n beforeDisconnect: function() {\n if (this.isToggled()) {\n this.toggleNow(this.$el, false);\n }\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return this.selClose;\n },\n\n handler: function(e) {\n e.preventDefault();\n this.hide();\n }\n\n },\n\n {\n\n name: 'toggle',\n\n self: true,\n\n handler: function(e) {\n\n if (e.defaultPrevented) {\n return;\n }\n\n e.preventDefault();\n this.toggle();\n }\n\n },\n\n {\n name: 'beforeshow',\n\n self: true,\n\n handler: function(e) {\n\n var prev = active$1 && active$1 !== this && active$1;\n\n active$1 = this;\n\n if (prev) {\n if (this.stack) {\n this.prev = prev;\n } else {\n\n active$1 = prev;\n\n if (prev.isToggled()) {\n prev.hide().then(this.show);\n } else {\n once(prev.$el, 'beforeshow hidden', this.show, false, function (ref) {\n var target = ref.target;\n var type = ref.type;\n\n return type === 'hidden' && target === prev.$el;\n });\n }\n e.preventDefault();\n\n }\n\n return;\n }\n\n registerEvents();\n\n }\n\n },\n\n {\n\n name: 'show',\n\n self: true,\n\n handler: function() {\n\n if (!hasClass(document.documentElement, this.clsPage)) {\n this.scrollbarWidth = width(window) - width(document);\n css(document.body, 'overflowY', this.scrollbarWidth && this.overlay ? 'scroll' : '');\n }\n\n addClass(document.documentElement, this.clsPage);\n\n }\n\n },\n\n {\n\n name: 'hide',\n\n self: true,\n\n handler: function() {\n if (!active$1 || active$1 === this && !this.prev) {\n deregisterEvents();\n }\n }\n\n },\n\n {\n\n name: 'hidden',\n\n self: true,\n\n handler: function() {\n\n var found;\n var ref = this;\n var prev = ref.prev;\n\n active$1 = active$1 && active$1 !== this && active$1 || prev;\n\n if (!active$1) {\n\n css(document.body, 'overflowY', '');\n\n } else {\n while (prev) {\n\n if (prev.clsPage === this.clsPage) {\n found = true;\n break;\n }\n\n prev = prev.prev;\n\n }\n\n }\n\n if (!found) {\n removeClass(document.documentElement, this.clsPage);\n }\n\n }\n\n }\n\n ],\n\n methods: {\n\n toggle: function() {\n return this.isToggled() ? this.hide() : this.show();\n },\n\n show: function() {\n var this$1 = this;\n\n\n if (this.isToggled()) {\n return Promise.resolve();\n }\n\n if (this.container && this.$el.parentNode !== this.container) {\n append(this.container, this.$el);\n return new Promise(function (resolve) { return requestAnimationFrame(function () { return this$1.show().then(resolve); }\n ); }\n );\n }\n\n return this.toggleElement(this.$el, true, animate$1(this));\n },\n\n hide: function() {\n return this.isToggled()\n ? this.toggleElement(this.$el, false, animate$1(this))\n : Promise.resolve();\n },\n\n getActive: function() {\n return active$1;\n }\n\n }\n\n };\n\n var events;\n\n function registerEvents() {\n\n if (events) {\n return;\n }\n\n events = [\n on(document, pointerUp, function (ref) {\n var target = ref.target;\n var defaultPrevented = ref.defaultPrevented;\n\n if (active$1 && active$1.bgClose && !defaultPrevented && (!active$1.overlay || within(target, active$1.$el)) && !within(target, active$1.panel)) {\n active$1.hide();\n }\n }),\n on(document, 'keydown', function (e) {\n if (e.keyCode === 27 && active$1 && active$1.escClose) {\n e.preventDefault();\n active$1.hide();\n }\n })\n ];\n }\n\n function deregisterEvents() {\n events && events.forEach(function (unbind) { return unbind(); });\n events = null;\n }\n\n function animate$1(ref) {\n var transitionElement = ref.transitionElement;\n var _toggle = ref._toggle;\n\n return function (el, show) { return new Promise(function (resolve, reject) { return once(el, 'show hide', function () {\n el._reject && el._reject();\n el._reject = reject;\n\n _toggle(el, show);\n\n if (toMs(css(transitionElement, 'transitionDuration'))) {\n once(transitionElement, 'transitionend', resolve, false, function (e) { return e.target === transitionElement; });\n } else {\n resolve();\n }\n }); }\n ); };\n }\n\n var Modal$1 = {\n\n install: install$1,\n\n mixins: [Modal],\n\n data: {\n clsPage: 'uk-modal-page',\n selPanel: '.uk-modal-dialog',\n selClose: '.uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full'\n },\n\n events: [\n\n {\n name: 'show',\n\n self: true,\n\n handler: function() {\n\n if (hasClass(this.panel, 'uk-margin-auto-vertical')) {\n addClass(this.$el, 'uk-flex');\n } else {\n css(this.$el, 'display', 'block');\n }\n\n height(this.$el); // force reflow\n }\n },\n\n {\n name: 'hidden',\n\n self: true,\n\n handler: function() {\n\n css(this.$el, 'display', '');\n removeClass(this.$el, 'uk-flex');\n\n }\n }\n\n ]\n\n };\n\n function install$1(UIkit) {\n\n UIkit.modal.dialog = function (content, options) {\n\n var dialog = UIkit.modal((\" <div class=\\\"uk-modal\\\"> <div class=\\\"uk-modal-dialog\\\">\" + content + \"</div> </div> \"), options);\n\n dialog.show();\n\n on(dialog.$el, 'hidden', function (ref) {\n var target = ref.target;\n var currentTarget = ref.currentTarget;\n\n if (target === currentTarget) {\n Promise.resolve(function () { return dialog.$destroy(true); });\n }\n });\n\n return dialog;\n };\n\n UIkit.modal.alert = function (message, options) {\n\n options = assign({bgClose: false, escClose: false, labels: UIkit.modal.labels}, options);\n\n return new Promise(\n function (resolve) { return on(UIkit.modal.dialog((\" <div class=\\\"uk-modal-body\\\">\" + (isString(message) ? message : html(message)) + \"</div> <div class=\\\"uk-modal-footer uk-text-right\\\"> <button class=\\\"uk-button uk-button-primary uk-modal-close\\\" autofocus>\" + (options.labels.ok) + \"</button> </div> \"), options).$el, 'hide', resolve); }\n );\n };\n\n UIkit.modal.confirm = function (message, options) {\n\n options = assign({bgClose: false, escClose: true, labels: UIkit.modal.labels}, options);\n\n return new Promise(function (resolve, reject) {\n\n var confirm = UIkit.modal.dialog((\" <form> <div class=\\\"uk-modal-body\\\">\" + (isString(message) ? message : html(message)) + \"</div> <div class=\\\"uk-modal-footer uk-text-right\\\"> <button class=\\\"uk-button uk-button-default uk-modal-close\\\" type=\\\"button\\\">\" + (options.labels.cancel) + \"</button> <button class=\\\"uk-button uk-button-primary\\\" autofocus>\" + (options.labels.ok) + \"</button> </div> </form> \"), options);\n\n var resolved = false;\n\n on(confirm.$el, 'submit', 'form', function (e) {\n e.preventDefault();\n resolve();\n resolved = true;\n confirm.hide();\n });\n on(confirm.$el, 'hide', function () {\n if (!resolved) {\n reject();\n }\n });\n\n });\n };\n\n UIkit.modal.prompt = function (message, value, options) {\n\n options = assign({bgClose: false, escClose: true, labels: UIkit.modal.labels}, options);\n\n return new Promise(function (resolve) {\n\n var prompt = UIkit.modal.dialog((\" <form class=\\\"uk-form-stacked\\\"> <div class=\\\"uk-modal-body\\\"> <label>\" + (isString(message) ? message : html(message)) + \"</label> <input class=\\\"uk-input\\\" autofocus> </div> <div class=\\\"uk-modal-footer uk-text-right\\\"> <button class=\\\"uk-button uk-button-default uk-modal-close\\\" type=\\\"button\\\">\" + (options.labels.cancel) + \"</button> <button class=\\\"uk-button uk-button-primary\\\">\" + (options.labels.ok) + \"</button> </div> </form> \"), options),\n input = $('input', prompt.$el);\n\n input.value = value;\n\n var resolved = false;\n\n on(prompt.$el, 'submit', 'form', function (e) {\n e.preventDefault();\n resolve(input.value);\n resolved = true;\n prompt.hide();\n });\n on(prompt.$el, 'hide', function () {\n if (!resolved) {\n resolve(null);\n }\n });\n\n });\n };\n\n UIkit.modal.labels = {\n ok: 'Ok',\n cancel: 'Cancel'\n };\n\n }\n\n var Nav = {\n\n extends: Accordion,\n\n data: {\n targets: '> .uk-parent',\n toggle: '> a',\n content: '> ul'\n }\n\n };\n\n var Navbar = {\n\n mixins: [Class, FlexBug],\n\n props: {\n dropdown: String,\n mode: 'list',\n align: String,\n offset: Number,\n boundary: Boolean,\n boundaryAlign: Boolean,\n clsDrop: String,\n delayShow: Number,\n delayHide: Number,\n dropbar: Boolean,\n dropbarMode: String,\n dropbarAnchor: Boolean,\n duration: Number\n },\n\n data: {\n dropdown: '.uk-navbar-nav > li',\n align: !isRtl ? 'left' : 'right',\n clsDrop: 'uk-navbar-dropdown',\n mode: undefined,\n offset: undefined,\n delayShow: undefined,\n delayHide: undefined,\n boundaryAlign: undefined,\n flip: 'x',\n boundary: true,\n dropbar: false,\n dropbarMode: 'slide',\n dropbarAnchor: false,\n duration: 200,\n forceHeight: true,\n selMinHeight: '.uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle'\n },\n\n computed: {\n\n boundary: function(ref, $el) {\n var boundary = ref.boundary;\n var boundaryAlign = ref.boundaryAlign;\n\n return (boundary === true || boundaryAlign) ? $el : boundary;\n },\n\n dropbarAnchor: function(ref, $el) {\n var dropbarAnchor = ref.dropbarAnchor;\n\n return query(dropbarAnchor, $el);\n },\n\n pos: function(ref) {\n var align = ref.align;\n\n return (\"bottom-\" + align);\n },\n\n dropdowns: function(ref, $el) {\n var dropdown = ref.dropdown;\n var clsDrop = ref.clsDrop;\n\n return $$((dropdown + \" .\" + clsDrop), $el);\n }\n\n },\n\n beforeConnect: function() {\n\n var ref = this.$props;\n var dropbar = ref.dropbar;\n\n this.dropbar = dropbar && (query(dropbar, this.$el) || $('+ .uk-navbar-dropbar', this.$el) || $('<div></div>'));\n\n if (this.dropbar) {\n\n addClass(this.dropbar, 'uk-navbar-dropbar');\n\n if (this.dropbarMode === 'slide') {\n addClass(this.dropbar, 'uk-navbar-dropbar-slide');\n }\n }\n\n },\n\n disconnected: function() {\n this.dropbar && remove(this.dropbar);\n },\n\n update: function() {\n var this$1 = this;\n\n\n this.$create(\n 'drop',\n this.dropdowns.filter(function (el) { return !this$1.getDropdown(el); }),\n assign({}, this.$props, {boundary: this.boundary, pos: this.pos, offset: this.dropbar || this.offset})\n );\n\n },\n\n events: [\n\n {\n name: 'mouseover',\n\n delegate: function() {\n return this.dropdown;\n },\n\n handler: function(ref) {\n var current = ref.current;\n\n var active = this.getActive();\n if (active && active.toggle && !within(active.toggle.$el, current) && !active.tracker.movesTo(active.$el)) {\n active.hide(false);\n }\n }\n\n },\n\n {\n name: 'mouseleave',\n\n el: function() {\n return this.dropbar;\n },\n\n handler: function() {\n var active = this.getActive();\n\n if (active && !this.dropdowns.some(function (el) { return matches(el, ':hover'); })) {\n active.hide();\n }\n }\n },\n\n {\n name: 'beforeshow',\n\n capture: true,\n\n filter: function() {\n return this.dropbar;\n },\n\n handler: function() {\n\n if (!this.dropbar.parentNode) {\n after(this.dropbarAnchor || this.$el, this.dropbar);\n }\n\n }\n },\n\n {\n name: 'show',\n\n capture: true,\n\n filter: function() {\n return this.dropbar;\n },\n\n handler: function(_, drop) {\n\n var $el = drop.$el;\n var dir = drop.dir;\n\n this.clsDrop && addClass($el, ((this.clsDrop) + \"-dropbar\"));\n\n if (dir === 'bottom') {\n this.transitionTo($el.offsetHeight + toFloat(css($el, 'marginTop')) + toFloat(css($el, 'marginBottom')), $el);\n }\n }\n },\n\n {\n name: 'beforehide',\n\n filter: function() {\n return this.dropbar;\n },\n\n handler: function(e, ref) {\n var $el = ref.$el;\n\n\n var active = this.getActive();\n\n if (matches(this.dropbar, ':hover') && active && active.$el === $el) {\n e.preventDefault();\n }\n }\n },\n\n {\n name: 'hide',\n\n filter: function() {\n return this.dropbar;\n },\n\n handler: function(_, ref) {\n var $el = ref.$el;\n\n\n var active = this.getActive();\n\n if (!active || active && active.$el === $el) {\n this.transitionTo(0);\n }\n }\n }\n\n ],\n\n methods: {\n\n getActive: function() {\n var ref = this.dropdowns.map(this.getDropdown).filter(function (drop) { return drop && drop.isActive(); });\n var active = ref[0];\n return active && includes(active.mode, 'hover') && within(active.toggle.$el, this.$el) && active;\n },\n\n transitionTo: function(newHeight, el) {\n var this$1 = this;\n\n\n var ref = this;\n var dropbar = ref.dropbar;\n var oldHeight = isVisible(dropbar) ? height(dropbar) : 0;\n\n el = oldHeight < newHeight && el;\n\n css(el, 'clip', (\"rect(0,\" + (el.offsetWidth) + \"px,\" + oldHeight + \"px,0)\"));\n\n height(dropbar, oldHeight);\n\n Transition.cancel([el, dropbar]);\n return Promise.all([\n Transition.start(dropbar, {height: newHeight}, this.duration),\n Transition.start(el, {clip: (\"rect(0,\" + (el.offsetWidth) + \"px,\" + newHeight + \"px,0)\")}, this.duration)\n ])\n .catch(noop)\n .then(function () {\n css(el, {clip: ''});\n this$1.$update(dropbar);\n });\n },\n\n getDropdown: function(el) {\n return this.$getComponent(el, 'drop') || this.$getComponent(el, 'dropdown');\n }\n\n }\n\n };\n\n var Offcanvas = {\n\n mixins: [Modal],\n\n args: 'mode',\n\n props: {\n mode: String,\n flip: Boolean,\n overlay: Boolean\n },\n\n data: {\n mode: 'slide',\n flip: false,\n overlay: false,\n clsPage: 'uk-offcanvas-page',\n clsContainer: 'uk-offcanvas-container',\n selPanel: '.uk-offcanvas-bar',\n clsFlip: 'uk-offcanvas-flip',\n clsContainerAnimation: 'uk-offcanvas-container-animation',\n clsSidebarAnimation: 'uk-offcanvas-bar-animation',\n clsMode: 'uk-offcanvas',\n clsOverlay: 'uk-offcanvas-overlay',\n selClose: '.uk-offcanvas-close'\n },\n\n computed: {\n\n clsFlip: function(ref) {\n var flip = ref.flip;\n var clsFlip = ref.clsFlip;\n\n return flip ? clsFlip : '';\n },\n\n clsOverlay: function(ref) {\n var overlay = ref.overlay;\n var clsOverlay = ref.clsOverlay;\n\n return overlay ? clsOverlay : '';\n },\n\n clsMode: function(ref) {\n var mode = ref.mode;\n var clsMode = ref.clsMode;\n\n return (clsMode + \"-\" + mode);\n },\n\n clsSidebarAnimation: function(ref) {\n var mode = ref.mode;\n var clsSidebarAnimation = ref.clsSidebarAnimation;\n\n return mode === 'none' || mode === 'reveal' ? '' : clsSidebarAnimation;\n },\n\n clsContainerAnimation: function(ref) {\n var mode = ref.mode;\n var clsContainerAnimation = ref.clsContainerAnimation;\n\n return mode !== 'push' && mode !== 'reveal' ? '' : clsContainerAnimation;\n },\n\n transitionElement: function(ref) {\n var mode = ref.mode;\n\n return mode === 'reveal' ? this.panel.parentNode : this.panel;\n }\n\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return 'a[href^=\"#\"]';\n },\n\n handler: function(ref) {\n var current = ref.current;\n\n if (current.hash && $(current.hash, document.body)) {\n this.hide();\n }\n }\n\n },\n\n {\n name: 'touchstart',\n\n passive: true,\n\n el: function() {\n return this.panel;\n },\n\n handler: function(ref) {\n var targetTouches = ref.targetTouches;\n\n\n if (targetTouches.length === 1) {\n this.clientY = targetTouches[0].clientY;\n }\n\n }\n\n },\n\n {\n name: 'touchmove',\n\n self: true,\n passive: false,\n\n filter: function() {\n return this.overlay;\n },\n\n handler: function(e) {\n e.cancelable && e.preventDefault();\n }\n\n },\n\n {\n name: 'touchmove',\n\n passive: false,\n\n el: function() {\n return this.panel;\n },\n\n handler: function(e) {\n\n if (e.targetTouches.length !== 1) {\n return;\n }\n\n var clientY = event.targetTouches[0].clientY - this.clientY;\n var ref = this.panel;\n var scrollTop = ref.scrollTop;\n var scrollHeight = ref.scrollHeight;\n var clientHeight = ref.clientHeight;\n\n if (clientHeight >= scrollHeight\n || scrollTop === 0 && clientY > 0\n || scrollHeight - scrollTop <= clientHeight && clientY < 0\n ) {\n e.cancelable && e.preventDefault();\n }\n\n }\n\n },\n\n {\n name: 'show',\n\n self: true,\n\n handler: function() {\n\n if (this.mode === 'reveal' && !hasClass(this.panel.parentNode, this.clsMode)) {\n wrapAll(this.panel, '<div>');\n addClass(this.panel.parentNode, this.clsMode);\n }\n\n css(document.documentElement, 'overflowY', this.overlay ? 'hidden' : '');\n addClass(document.body, this.clsContainer, this.clsFlip);\n css(this.$el, 'display', 'block');\n addClass(this.$el, this.clsOverlay);\n addClass(this.panel, this.clsSidebarAnimation, this.mode !== 'reveal' ? this.clsMode : '');\n\n height(document.body); // force reflow\n addClass(document.body, this.clsContainerAnimation);\n\n this.clsContainerAnimation && suppressUserScale();\n\n }\n },\n\n {\n name: 'hide',\n\n self: true,\n\n handler: function() {\n removeClass(document.body, this.clsContainerAnimation);\n\n var active = this.getActive();\n if (this.mode === 'none' || active && active !== this && active !== this.prev) {\n trigger(this.panel, 'transitionend');\n }\n }\n },\n\n {\n name: 'hidden',\n\n self: true,\n\n handler: function() {\n\n this.clsContainerAnimation && resumeUserScale();\n\n if (this.mode === 'reveal') {\n unwrap(this.panel);\n }\n\n removeClass(this.panel, this.clsSidebarAnimation, this.clsMode);\n removeClass(this.$el, this.clsOverlay);\n css(this.$el, 'display', '');\n removeClass(document.body, this.clsContainer, this.clsFlip);\n\n css(document.documentElement, 'overflowY', '');\n\n }\n },\n\n {\n name: 'swipeLeft swipeRight',\n\n handler: function(e) {\n\n if (this.isToggled() && endsWith(e.type, 'Left') ^ this.flip) {\n this.hide();\n }\n\n }\n }\n\n ]\n\n };\n\n // Chrome in responsive mode zooms page upon opening offcanvas\n function suppressUserScale() {\n getViewport().content += ',user-scalable=0';\n }\n\n function resumeUserScale() {\n var viewport = getViewport();\n viewport.content = viewport.content.replace(/,user-scalable=0$/, '');\n }\n\n function getViewport() {\n return $('meta[name=\"viewport\"]', document.head) || append(document.head, '<meta name=\"viewport\">');\n }\n\n var OverflowAuto = {\n\n mixins: [Class],\n\n props: {\n selContainer: String,\n selContent: String\n },\n\n data: {\n selContainer: '.uk-modal',\n selContent: '.uk-modal-dialog'\n },\n\n computed: {\n\n container: function(ref, $el) {\n var selContainer = ref.selContainer;\n\n return closest($el, selContainer);\n },\n\n content: function(ref, $el) {\n var selContent = ref.selContent;\n\n return closest($el, selContent);\n }\n\n },\n\n connected: function() {\n css(this.$el, 'minHeight', 150);\n },\n\n update: {\n\n read: function() {\n\n if (!this.content || !this.container) {\n return false;\n }\n\n return {\n current: toFloat(css(this.$el, 'maxHeight')),\n max: Math.max(150, height(this.container) - (offset(this.content).height - height(this.$el)))\n };\n },\n\n write: function(ref) {\n var current = ref.current;\n var max = ref.max;\n\n css(this.$el, 'maxHeight', max);\n if (Math.round(current) !== Math.round(max)) {\n trigger(this.$el, 'resize');\n }\n },\n\n events: ['resize']\n\n }\n\n };\n\n var Responsive = {\n\n props: ['width', 'height'],\n\n connected: function() {\n addClass(this.$el, 'uk-responsive-width');\n },\n\n update: {\n\n read: function() {\n return isVisible(this.$el) && this.width && this.height\n ? {width: width(this.$el.parentNode), height: this.height}\n : false;\n },\n\n write: function(dim) {\n height(this.$el, Dimensions.contain({\n height: this.height,\n width: this.width\n }, dim).height);\n },\n\n events: ['resize']\n\n }\n\n };\n\n var Scroll = {\n\n props: {\n duration: Number,\n offset: Number\n },\n\n data: {\n duration: 1000,\n offset: 0\n },\n\n methods: {\n\n scrollTo: function(el) {\n var this$1 = this;\n\n\n el = el && $(el) || document.body;\n\n var docHeight = height(document);\n var winHeight = height(window);\n\n var target = offset(el).top - this.offset;\n if (target + winHeight > docHeight) {\n target = docHeight - winHeight;\n }\n\n if (!trigger(this.$el, 'beforescroll', [this, el])) {\n return;\n }\n\n var start = Date.now();\n var startY = window.pageYOffset;\n var step = function () {\n\n var currentY = startY + (target - startY) * ease(clamp((Date.now() - start) / this$1.duration));\n\n scrollTop(window, currentY);\n\n // scroll more if we have not reached our destination\n if (currentY !== target) {\n requestAnimationFrame(step);\n } else {\n trigger(this$1.$el, 'scrolled', [this$1, el]);\n }\n\n };\n\n step();\n\n }\n\n },\n\n events: {\n\n click: function(e) {\n\n if (e.defaultPrevented) {\n return;\n }\n\n e.preventDefault();\n this.scrollTo(escape(decodeURIComponent(this.$el.hash)).substr(1));\n }\n\n }\n\n };\n\n function ease(k) {\n return 0.5 * (1 - Math.cos(Math.PI * k));\n }\n\n var Scrollspy = {\n\n args: 'cls',\n\n props: {\n cls: String,\n target: String,\n hidden: Boolean,\n offsetTop: Number,\n offsetLeft: Number,\n repeat: Boolean,\n delay: Number\n },\n\n data: function () { return ({\n cls: false,\n target: false,\n hidden: true,\n offsetTop: 0,\n offsetLeft: 0,\n repeat: false,\n delay: 0,\n inViewClass: 'uk-scrollspy-inview'\n }); },\n\n computed: {\n\n elements: function(ref, $el) {\n var target = ref.target;\n\n return target ? $$(target, $el) : [$el];\n }\n\n },\n\n update: [\n\n {\n\n write: function() {\n if (this.hidden) {\n css(filter(this.elements, (\":not(.\" + (this.inViewClass) + \")\")), 'visibility', 'hidden');\n }\n }\n\n },\n\n {\n\n read: function(ref) {\n var this$1 = this;\n var update = ref.update;\n\n\n if (!update) {\n return;\n }\n\n this.elements.forEach(function (el) {\n\n var state = el._ukScrollspyState;\n\n if (!state) {\n state = {cls: data(el, 'uk-scrollspy-class') || this$1.cls};\n }\n\n state.show = isInView(el, this$1.offsetTop, this$1.offsetLeft);\n el._ukScrollspyState = state;\n\n });\n\n },\n\n write: function(data) {\n var this$1 = this;\n\n\n // Let child components be applied at least once first\n if (!data.update) {\n this.$emit();\n return data.update = true;\n }\n\n this.elements.forEach(function (el) {\n\n var state = el._ukScrollspyState;\n var cls = state.cls;\n\n if (state.show && !state.inview && !state.queued) {\n\n var show = function () {\n\n css(el, 'visibility', '');\n addClass(el, this$1.inViewClass);\n toggleClass(el, cls);\n\n trigger(el, 'inview');\n\n this$1.$update(el);\n\n state.inview = true;\n state.abort && state.abort();\n };\n\n if (this$1.delay) {\n\n state.queued = true;\n data.promise = (data.promise || Promise.resolve()).then(function () {\n return !state.inview && new Promise(function (resolve) {\n\n var timer = setTimeout(function () {\n\n show();\n resolve();\n\n }, data.promise || this$1.elements.length === 1 ? this$1.delay : 0);\n\n state.abort = function () {\n clearTimeout(timer);\n resolve();\n state.queued = false;\n };\n\n });\n\n });\n\n } else {\n show();\n }\n\n } else if (!state.show && (state.inview || state.queued) && this$1.repeat) {\n\n state.abort && state.abort();\n\n if (!state.inview) {\n return;\n }\n\n css(el, 'visibility', this$1.hidden ? 'hidden' : '');\n removeClass(el, this$1.inViewClass);\n toggleClass(el, cls);\n\n trigger(el, 'outview');\n\n this$1.$update(el);\n\n state.inview = false;\n\n }\n\n\n });\n\n },\n\n events: ['scroll', 'resize']\n\n }\n\n ]\n\n };\n\n var ScrollspyNav = {\n\n props: {\n cls: String,\n closest: String,\n scroll: Boolean,\n overflow: Boolean,\n offset: Number\n },\n\n data: {\n cls: 'uk-active',\n closest: false,\n scroll: false,\n overflow: true,\n offset: 0\n },\n\n computed: {\n\n links: function(_, $el) {\n return $$('a[href^=\"#\"]', $el).filter(function (el) { return el.hash; });\n },\n\n elements: function(ref) {\n var selector = ref.closest;\n\n return closest(this.links, selector || '*');\n },\n\n targets: function() {\n return $$(this.links.map(function (el) { return escape(el.hash).substr(1); }).join(','));\n }\n\n },\n\n update: [\n\n {\n\n read: function() {\n if (this.scroll) {\n this.$create('scroll', this.links, {offset: this.offset || 0});\n }\n }\n\n },\n\n {\n\n read: function(data) {\n var this$1 = this;\n\n\n var scroll = window.pageYOffset + this.offset + 1;\n var max = height(document) - height(window) + this.offset;\n\n data.active = false;\n\n this.targets.every(function (el, i) {\n\n var ref = offset(el);\n var top = ref.top;\n var last = i + 1 === this$1.targets.length;\n\n if (!this$1.overflow && (i === 0 && top > scroll || last && top + el.offsetTop < scroll)) {\n return false;\n }\n\n if (!last && offset(this$1.targets[i + 1]).top <= scroll) {\n return true;\n }\n\n if (scroll >= max) {\n for (var j = this$1.targets.length - 1; j > i; j--) {\n if (isInView(this$1.targets[j])) {\n el = this$1.targets[j];\n break;\n }\n }\n }\n\n return !(data.active = $(filter(this$1.links, (\"[href=\\\"#\" + (el.id) + \"\\\"]\"))));\n\n });\n\n },\n\n write: function(ref) {\n var active = ref.active;\n\n\n this.links.forEach(function (el) { return el.blur(); });\n removeClass(this.elements, this.cls);\n\n if (active) {\n trigger(this.$el, 'active', [active, addClass(this.closest ? closest(active, this.closest) : active, this.cls)]);\n }\n\n },\n\n events: ['scroll', 'resize']\n\n }\n\n ]\n\n };\n\n var Sticky = {\n\n mixins: [Class, Media],\n\n props: {\n top: null,\n bottom: Boolean,\n offset: Number,\n animation: String,\n clsActive: String,\n clsInactive: String,\n clsFixed: String,\n clsBelow: String,\n selTarget: String,\n widthElement: Boolean,\n showOnUp: Boolean,\n targetOffset: Number\n },\n\n data: {\n top: 0,\n bottom: false,\n offset: 0,\n animation: '',\n clsActive: 'uk-active',\n clsInactive: '',\n clsFixed: 'uk-sticky-fixed',\n clsBelow: 'uk-sticky-below',\n selTarget: '',\n widthElement: false,\n showOnUp: false,\n targetOffset: false\n },\n\n computed: {\n\n selTarget: function(ref, $el) {\n var selTarget = ref.selTarget;\n\n return selTarget && $(selTarget, $el) || $el;\n },\n\n widthElement: function(ref, $el) {\n var widthElement = ref.widthElement;\n\n return query(widthElement, $el) || this.placeholder;\n },\n\n isActive: {\n\n get: function() {\n return hasClass(this.selTarget, this.clsActive);\n },\n\n set: function(value) {\n if (value && !this.isActive) {\n replaceClass(this.selTarget, this.clsInactive, this.clsActive);\n trigger(this.$el, 'active');\n } else if (!value && !hasClass(this.selTarget, this.clsInactive)) {\n replaceClass(this.selTarget, this.clsActive, this.clsInactive);\n trigger(this.$el, 'inactive');\n }\n }\n\n }\n\n },\n\n connected: function() {\n this.placeholder = $('+ .uk-sticky-placeholder', this.$el) || $('<div class=\"uk-sticky-placeholder\"></div>');\n this.isFixed = false;\n this.isActive = false;\n },\n\n disconnected: function() {\n\n if (this.isFixed) {\n this.hide();\n removeClass(this.selTarget, this.clsInactive);\n }\n\n remove(this.placeholder);\n this.placeholder = null;\n this.widthElement = null;\n },\n\n events: [\n\n {\n\n name: 'load hashchange popstate',\n\n el: window,\n\n handler: function() {\n var this$1 = this;\n\n\n if (!(this.targetOffset !== false && location.hash && window.pageYOffset > 0)) {\n return;\n }\n\n var target = $(location.hash);\n\n if (target) {\n fastdom.read(function () {\n\n var ref = offset(target);\n var top = ref.top;\n var elTop = offset(this$1.$el).top;\n var elHeight = this$1.$el.offsetHeight;\n\n if (this$1.isFixed && elTop + elHeight >= top && elTop <= top + target.offsetHeight) {\n scrollTop(window, top - elHeight - (isNumeric(this$1.targetOffset) ? this$1.targetOffset : 0) - this$1.offset);\n }\n\n });\n }\n\n }\n\n }\n\n ],\n\n update: [\n\n {\n\n read: function(ref, type) {\n var height = ref.height;\n\n\n if (this.isActive && type !== 'update') {\n\n this.hide();\n height = this.$el.offsetHeight;\n this.show();\n\n }\n\n height = !this.isActive ? this.$el.offsetHeight : height;\n\n this.topOffset = offset(this.isFixed ? this.placeholder : this.$el).top;\n this.bottomOffset = this.topOffset + height;\n\n var bottom = parseProp('bottom', this);\n\n this.top = Math.max(toFloat(parseProp('top', this)), this.topOffset) - this.offset;\n this.bottom = bottom && bottom - height;\n this.inactive = !this.matchMedia;\n\n return {\n lastScroll: false,\n height: height,\n margins: css(this.$el, ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'])\n };\n },\n\n write: function(ref) {\n var height = ref.height;\n var margins = ref.margins;\n\n\n var ref$1 = this;\n var placeholder = ref$1.placeholder;\n\n css(placeholder, assign({height: height}, margins));\n\n if (!within(placeholder, document)) {\n after(this.$el, placeholder);\n attr(placeholder, 'hidden', '');\n }\n\n // ensure active/inactive classes are applied\n this.isActive = this.isActive;\n\n },\n\n events: ['resize']\n\n },\n\n {\n\n read: function(ref) {\n var scroll = ref.scroll; if ( scroll === void 0 ) scroll = 0;\n\n\n this.width = (isVisible(this.widthElement) ? this.widthElement : this.$el).offsetWidth;\n\n this.scroll = window.pageYOffset;\n\n return {\n dir: scroll <= this.scroll ? 'down' : 'up',\n scroll: this.scroll,\n visible: isVisible(this.$el),\n top: offsetPosition(this.placeholder)[0]\n };\n },\n\n write: function(data, type) {\n var this$1 = this;\n\n\n var initTimestamp = data.initTimestamp; if ( initTimestamp === void 0 ) initTimestamp = 0;\n var dir = data.dir;\n var lastDir = data.lastDir;\n var lastScroll = data.lastScroll;\n var scroll = data.scroll;\n var top = data.top;\n var visible = data.visible;\n var now = performance.now();\n\n data.lastScroll = scroll;\n\n if (scroll < 0 || scroll === lastScroll || !visible || this.disabled || this.showOnUp && type !== 'scroll') {\n return;\n }\n\n if (now - initTimestamp > 300 || dir !== lastDir) {\n data.initScroll = scroll;\n data.initTimestamp = now;\n }\n\n data.lastDir = dir;\n\n if (this.showOnUp && Math.abs(data.initScroll - scroll) <= 30 && Math.abs(lastScroll - scroll) <= 10) {\n return;\n }\n\n if (this.inactive\n || scroll < this.top\n || this.showOnUp && (scroll <= this.top || dir === 'down' || dir === 'up' && !this.isFixed && scroll <= this.bottomOffset)\n ) {\n\n if (!this.isFixed) {\n\n if (Animation.inProgress(this.$el) && top > scroll) {\n Animation.cancel(this.$el);\n this.hide();\n }\n\n return;\n }\n\n this.isFixed = false;\n\n if (this.animation && scroll > this.topOffset) {\n Animation.cancel(this.$el);\n Animation.out(this.$el, this.animation).then(function () { return this$1.hide(); }, noop);\n } else {\n this.hide();\n }\n\n } else if (this.isFixed) {\n\n this.update();\n\n } else if (this.animation) {\n\n Animation.cancel(this.$el);\n this.show();\n Animation.in(this.$el, this.animation).catch(noop);\n\n } else {\n this.show();\n }\n\n },\n\n events: ['resize', 'scroll']\n\n }\n\n ],\n\n methods: {\n\n show: function() {\n\n this.isFixed = true;\n this.update();\n attr(this.placeholder, 'hidden', null);\n\n },\n\n hide: function() {\n\n this.isActive = false;\n removeClass(this.$el, this.clsFixed, this.clsBelow);\n css(this.$el, {position: '', top: '', width: ''});\n attr(this.placeholder, 'hidden', '');\n\n },\n\n update: function() {\n\n var active = this.top !== 0 || this.scroll > this.top;\n var top = Math.max(0, this.offset);\n\n if (this.bottom && this.scroll > this.bottom - this.offset) {\n top = this.bottom - this.scroll;\n }\n\n css(this.$el, {\n position: 'fixed',\n top: (top + \"px\"),\n width: this.width\n });\n\n this.isActive = active;\n toggleClass(this.$el, this.clsBelow, this.scroll > this.bottomOffset);\n addClass(this.$el, this.clsFixed);\n\n }\n\n }\n\n };\n\n function parseProp(prop, ref) {\n var $props = ref.$props;\n var $el = ref.$el;\n var propOffset = ref[(prop + \"Offset\")];\n\n\n var value = $props[prop];\n\n if (!value) {\n return;\n }\n\n if (isNumeric(value)) {\n\n return propOffset + toFloat(value);\n\n } else if (isString(value) && value.match(/^-?\\d+vh$/)) {\n\n return height(window) * toFloat(value) / 100;\n\n } else {\n\n var el = value === true ? $el.parentNode : query(value, $el);\n\n if (el) {\n return offset(el).top + el.offsetHeight;\n }\n\n }\n }\n\n var Switcher = {\n\n mixins: [Togglable],\n\n args: 'connect',\n\n props: {\n connect: String,\n toggle: String,\n active: Number,\n swiping: Boolean\n },\n\n data: {\n connect: '~.uk-switcher',\n toggle: '> * > :first-child',\n active: 0,\n swiping: true,\n cls: 'uk-active',\n clsContainer: 'uk-switcher',\n attrItem: 'uk-switcher-item',\n queued: true\n },\n\n computed: {\n\n connects: function(ref, $el) {\n var connect = ref.connect;\n\n return queryAll(connect, $el);\n },\n\n toggles: function(ref, $el) {\n var toggle = ref.toggle;\n\n return $$(toggle, $el);\n }\n\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return ((this.toggle) + \":not(.uk-disabled)\");\n },\n\n handler: function(e) {\n e.preventDefault();\n this.show(toNodes(this.$el.children).filter(function (el) { return within(e.current, el); })[0]);\n }\n\n },\n\n {\n name: 'click',\n\n el: function() {\n return this.connects;\n },\n\n delegate: function() {\n return (\"[\" + (this.attrItem) + \"],[data-\" + (this.attrItem) + \"]\");\n },\n\n handler: function(e) {\n e.preventDefault();\n this.show(data(e.current, this.attrItem));\n }\n },\n\n {\n name: 'swipeRight swipeLeft',\n\n filter: function() {\n return this.swiping;\n },\n\n el: function() {\n return this.connects;\n },\n\n handler: function(ref) {\n var type = ref.type;\n\n this.show(endsWith(type, 'Left') ? 'next' : 'previous');\n }\n }\n\n ],\n\n update: function() {\n var this$1 = this;\n\n\n this.connects.forEach(function (list) { return this$1.updateAria(list.children); });\n var ref = this.$el;\n var children = ref.children;\n this.show(filter(children, (\".\" + (this.cls)))[0] || children[this.active] || children[0]);\n\n },\n\n methods: {\n\n index: function() {\n return !isEmpty(this.connects) && index(filter(this.connects[0].children, (\".\" + (this.cls)))[0]);\n },\n\n show: function(item) {\n var this$1 = this;\n\n\n var ref = this.$el;\n var children = ref.children;\n var length = children.length;\n var prev = this.index();\n var hasPrev = prev >= 0;\n var dir = item === 'previous' ? -1 : 1;\n\n var toggle, active, next = getIndex(item, children, prev);\n\n for (var i = 0; i < length; i++, next = (next + dir + length) % length) {\n if (!matches(this.toggles[next], '.uk-disabled *, .uk-disabled, [disabled]')) {\n toggle = this.toggles[next];\n active = children[next];\n break;\n }\n }\n\n if (!active || prev >= 0 && hasClass(active, this.cls) || prev === next) {\n return;\n }\n\n removeClass(children, this.cls);\n addClass(active, this.cls);\n attr(this.toggles, 'aria-expanded', false);\n attr(toggle, 'aria-expanded', true);\n\n this.connects.forEach(function (list) {\n if (!hasPrev) {\n this$1.toggleNow(list.children[next]);\n } else {\n this$1.toggleElement([list.children[prev], list.children[next]]);\n }\n });\n\n }\n\n }\n\n };\n\n var Tab = {\n\n mixins: [Class],\n\n extends: Switcher,\n\n props: {\n media: Boolean\n },\n\n data: {\n media: 960,\n attrItem: 'uk-tab-item'\n },\n\n connected: function() {\n\n var cls = hasClass(this.$el, 'uk-tab-left')\n ? 'uk-tab-left'\n : hasClass(this.$el, 'uk-tab-right')\n ? 'uk-tab-right'\n : false;\n\n if (cls) {\n this.$create('toggle', this.$el, {cls: cls, mode: 'media', media: this.media});\n }\n }\n\n };\n\n var Toggle = {\n\n mixins: [Media, Togglable],\n\n args: 'target',\n\n props: {\n href: String,\n target: null,\n mode: 'list'\n },\n\n data: {\n href: false,\n target: false,\n mode: 'click',\n queued: true\n },\n\n computed: {\n\n target: function(ref, $el) {\n var href = ref.href;\n var target = ref.target;\n\n target = queryAll(target || href, $el);\n return target.length && target || [$el];\n }\n\n },\n\n connected: function() {\n trigger(this.target, 'updatearia', [this]);\n },\n\n events: [\n\n {\n\n name: (pointerEnter + \" \" + pointerLeave),\n\n filter: function() {\n return includes(this.mode, 'hover');\n },\n\n handler: function(e) {\n if (!isTouch(e)) {\n this.toggle((\"toggle\" + (e.type === pointerEnter ? 'show' : 'hide')));\n }\n }\n\n },\n\n {\n\n name: 'click',\n\n filter: function() {\n return includes(this.mode, 'click') || hasTouch && includes(this.mode, 'hover');\n },\n\n handler: function(e) {\n\n // TODO better isToggled handling\n var link;\n if (closest(e.target, 'a[href=\"#\"], a[href=\"\"]')\n || (link = closest(e.target, 'a[href]')) && (\n this.cls\n || !isVisible(this.target)\n || link.hash && matches(this.target, link.hash)\n )\n ) {\n e.preventDefault();\n }\n\n this.toggle();\n }\n\n }\n\n ],\n\n update: {\n\n read: function() {\n return includes(this.mode, 'media') && this.media\n ? {match: this.matchMedia}\n : false;\n },\n\n write: function(ref) {\n var match = ref.match;\n\n\n var toggled = this.isToggled(this.target);\n if (match ? !toggled : toggled) {\n this.toggle();\n }\n\n },\n\n events: ['resize']\n\n },\n\n methods: {\n\n toggle: function(type) {\n if (trigger(this.target, type || 'toggle', [this])) {\n this.toggleElement(this.target);\n }\n }\n\n }\n\n };\n\n function core (UIkit) {\n\n // core components\n UIkit.component('accordion', Accordion);\n UIkit.component('alert', Alert);\n UIkit.component('cover', Cover);\n UIkit.component('drop', Drop);\n UIkit.component('dropdown', Dropdown);\n UIkit.component('formCustom', FormCustom);\n UIkit.component('gif', Gif);\n UIkit.component('grid', Grid);\n UIkit.component('heightMatch', HeightMatch);\n UIkit.component('heightViewport', HeightViewport);\n UIkit.component('icon', Icon);\n UIkit.component('img', Img);\n UIkit.component('leader', Leader);\n UIkit.component('margin', Margin);\n UIkit.component('modal', Modal$1);\n UIkit.component('nav', Nav);\n UIkit.component('navbar', Navbar);\n UIkit.component('offcanvas', Offcanvas);\n UIkit.component('overflowAuto', OverflowAuto);\n UIkit.component('responsive', Responsive);\n UIkit.component('scroll', Scroll);\n UIkit.component('scrollspy', Scrollspy);\n UIkit.component('scrollspyNav', ScrollspyNav);\n UIkit.component('sticky', Sticky);\n UIkit.component('svg', Svg);\n UIkit.component('switcher', Switcher);\n UIkit.component('tab', Tab);\n UIkit.component('toggle', Toggle);\n UIkit.component('video', Video);\n\n // Icon components\n UIkit.component('close', Close);\n UIkit.component('marker', IconComponent);\n UIkit.component('navbarToggleIcon', IconComponent);\n UIkit.component('overlayIcon', IconComponent);\n UIkit.component('paginationNext', IconComponent);\n UIkit.component('paginationPrevious', IconComponent);\n UIkit.component('searchIcon', Search);\n UIkit.component('slidenavNext', Slidenav);\n UIkit.component('slidenavPrevious', Slidenav);\n UIkit.component('spinner', Spinner);\n UIkit.component('totop', IconComponent);\n\n // core functionality\n UIkit.use(Core);\n\n }\n\n UIkit.version = '3.1.6';\n\n core(UIkit);\n\n var Countdown = {\n\n mixins: [Class],\n\n props: {\n date: String,\n clsWrapper: String\n },\n\n data: {\n date: '',\n clsWrapper: '.uk-countdown-%unit%'\n },\n\n computed: {\n\n date: function(ref) {\n var date = ref.date;\n\n return Date.parse(date);\n },\n\n days: function(ref, $el) {\n var clsWrapper = ref.clsWrapper;\n\n return $(clsWrapper.replace('%unit%', 'days'), $el);\n },\n\n hours: function(ref, $el) {\n var clsWrapper = ref.clsWrapper;\n\n return $(clsWrapper.replace('%unit%', 'hours'), $el);\n },\n\n minutes: function(ref, $el) {\n var clsWrapper = ref.clsWrapper;\n\n return $(clsWrapper.replace('%unit%', 'minutes'), $el);\n },\n\n seconds: function(ref, $el) {\n var clsWrapper = ref.clsWrapper;\n\n return $(clsWrapper.replace('%unit%', 'seconds'), $el);\n },\n\n units: function() {\n var this$1 = this;\n\n return ['days', 'hours', 'minutes', 'seconds'].filter(function (unit) { return this$1[unit]; });\n }\n\n },\n\n connected: function() {\n this.start();\n },\n\n disconnected: function() {\n var this$1 = this;\n\n this.stop();\n this.units.forEach(function (unit) { return empty(this$1[unit]); });\n },\n\n events: [\n\n {\n\n name: 'visibilitychange',\n\n el: document,\n\n handler: function() {\n if (document.hidden) {\n this.stop();\n } else {\n this.start();\n }\n }\n\n }\n\n ],\n\n update: {\n\n write: function() {\n var this$1 = this;\n\n\n var timespan = getTimeSpan(this.date);\n\n if (timespan.total <= 0) {\n\n this.stop();\n\n timespan.days\n = timespan.hours\n = timespan.minutes\n = timespan.seconds\n = 0;\n }\n\n this.units.forEach(function (unit) {\n\n var digits = String(Math.floor(timespan[unit]));\n\n digits = digits.length < 2 ? (\"0\" + digits) : digits;\n\n var el = this$1[unit];\n if (el.textContent !== digits) {\n digits = digits.split('');\n\n if (digits.length !== el.children.length) {\n html(el, digits.map(function () { return '<span></span>'; }).join(''));\n }\n\n digits.forEach(function (digit, i) { return el.children[i].textContent = digit; });\n }\n\n });\n\n }\n\n },\n\n methods: {\n\n start: function() {\n var this$1 = this;\n\n\n this.stop();\n\n if (this.date && this.units.length) {\n this.$emit();\n this.timer = setInterval(function () { return this$1.$emit(); }, 1000);\n }\n\n },\n\n stop: function() {\n\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = null;\n }\n\n }\n\n }\n\n };\n\n function getTimeSpan(date) {\n\n var total = date - Date.now();\n\n return {\n total: total,\n seconds: total / 1000 % 60,\n minutes: total / 1000 / 60 % 60,\n hours: total / 1000 / 60 / 60 % 24,\n days: total / 1000 / 60 / 60 / 24\n };\n }\n\n var targetClass = 'uk-animation-target';\n\n var Animate = {\n\n props: {\n animation: Number\n },\n\n data: {\n animation: 150\n },\n\n computed: {\n\n target: function() {\n return this.$el;\n }\n\n },\n\n methods: {\n\n animate: function(action) {\n var this$1 = this;\n\n\n addStyle();\n\n var children = toNodes(this.target.children);\n var propsFrom = children.map(function (el) { return getProps(el, true); });\n\n var oldHeight = height(this.target);\n var oldScrollY = window.pageYOffset;\n\n action();\n\n Transition.cancel(this.target);\n children.forEach(Transition.cancel);\n\n reset(this.target);\n this.$update(this.target);\n fastdom.flush();\n\n var newHeight = height(this.target);\n\n children = children.concat(toNodes(this.target.children).filter(function (el) { return !includes(children, el); }));\n\n var propsTo = children.map(function (el, i) { return el.parentNode && i in propsFrom\n ? propsFrom[i]\n ? isVisible(el)\n ? getPositionWithMargin(el)\n : {opacity: 0}\n : {opacity: isVisible(el) ? 1 : 0}\n : false; }\n );\n\n propsFrom = propsTo.map(function (props, i) {\n var from = children[i].parentNode === this$1.target\n ? propsFrom[i] || getProps(children[i])\n : false;\n\n if (from) {\n if (!props) {\n delete from.opacity;\n } else if (!('opacity' in props)) {\n var opacity = from.opacity;\n\n if (opacity % 1) {\n props.opacity = 1;\n } else {\n delete from.opacity;\n }\n }\n }\n\n return from;\n });\n\n addClass(this.target, targetClass);\n children.forEach(function (el, i) { return propsFrom[i] && css(el, propsFrom[i]); });\n css(this.target, 'height', oldHeight);\n scrollTop(window, oldScrollY);\n\n return Promise.all(children.map(function (el, i) { return propsFrom[i] && propsTo[i]\n ? Transition.start(el, propsTo[i], this$1.animation, 'ease')\n : Promise.resolve(); }\n ).concat(Transition.start(this.target, {height: newHeight}, this.animation, 'ease'))).then(function () {\n children.forEach(function (el, i) { return css(el, {display: propsTo[i].opacity === 0 ? 'none' : '', zIndex: ''}); });\n reset(this$1.target);\n this$1.$update(this$1.target);\n fastdom.flush(); // needed for IE11\n }, noop);\n\n }\n }\n };\n\n function getProps(el, opacity) {\n\n var zIndex = css(el, 'zIndex');\n\n return isVisible(el)\n ? assign({\n display: '',\n opacity: opacity ? css(el, 'opacity') : '0',\n pointerEvents: 'none',\n position: 'absolute',\n zIndex: zIndex === 'auto' ? index(el) : zIndex\n }, getPositionWithMargin(el))\n : false;\n }\n\n function reset(el) {\n css(el.children, {\n height: '',\n left: '',\n opacity: '',\n pointerEvents: '',\n position: '',\n top: '',\n width: ''\n });\n removeClass(el, targetClass);\n css(el, 'height', '');\n }\n\n function getPositionWithMargin(el) {\n var ref = el.getBoundingClientRect();\n var height = ref.height;\n var width = ref.width;\n var ref$1 = position(el);\n var top = ref$1.top;\n var left = ref$1.left;\n top += toFloat(css(el, 'marginTop'));\n\n return {top: top, left: left, height: height, width: width};\n }\n\n var style;\n\n function addStyle() {\n if (style) {\n return;\n }\n style = append(document.head, '<style>').sheet;\n style.insertRule(\n (\".\" + targetClass + \" > * {\\n margin-top: 0 !important;\\n transform: none !important;\\n }\"), 0\n );\n }\n\n var Filter = {\n\n mixins: [Animate],\n\n args: 'target',\n\n props: {\n target: Boolean,\n selActive: Boolean\n },\n\n data: {\n target: null,\n selActive: false,\n attrItem: 'uk-filter-control',\n cls: 'uk-active',\n animation: 250\n },\n\n computed: {\n\n toggles: {\n\n get: function(ref, $el) {\n var attrItem = ref.attrItem;\n\n return $$((\"[\" + (this.attrItem) + \"],[data-\" + (this.attrItem) + \"]\"), $el);\n },\n\n watch: function() {\n this.updateState();\n }\n\n },\n\n target: function(ref, $el) {\n var target = ref.target;\n\n return $(target, $el);\n },\n\n children: {\n\n get: function() {\n return toNodes(this.target && this.target.children);\n },\n\n watch: function(list, old) {\n if (!isEqualList(list, old)) {\n this.updateState();\n }\n }\n }\n\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return (\"[\" + (this.attrItem) + \"],[data-\" + (this.attrItem) + \"]\");\n },\n\n handler: function(e) {\n\n e.preventDefault();\n this.apply(e.current);\n\n }\n\n }\n\n ],\n\n connected: function() {\n var this$1 = this;\n\n\n this.updateState();\n\n if (this.selActive !== false) {\n var actives = $$(this.selActive, this.$el);\n this.toggles.forEach(function (el) { return toggleClass(el, this$1.cls, includes(actives, el)); });\n }\n\n },\n\n methods: {\n\n apply: function(el) {\n this.setState(mergeState(el, this.attrItem, this.getState()));\n },\n\n getState: function() {\n var this$1 = this;\n\n return this.toggles\n .filter(function (item) { return hasClass(item, this$1.cls); })\n .reduce(function (state, el) { return mergeState(el, this$1.attrItem, state); }, {filter: {'': ''}, sort: []});\n },\n\n setState: function(state, animate) {\n var this$1 = this;\n if ( animate === void 0 ) animate = true;\n\n\n state = assign({filter: {'': ''}, sort: []}, state);\n\n trigger(this.$el, 'beforeFilter', [this, state]);\n\n var ref = this;\n var children = ref.children;\n\n this.toggles.forEach(function (el) { return toggleClass(el, this$1.cls, !!matchFilter(el, this$1.attrItem, state)); });\n\n var apply = function () {\n\n var selector = getSelector(state);\n\n children.forEach(function (el) { return css(el, 'display', selector && !matches(el, selector) ? 'none' : ''); });\n\n var ref = state.sort;\n var sort = ref[0];\n var order = ref[1];\n\n if (sort) {\n var sorted = sortItems(children, sort, order);\n if (!isEqual(sorted, children)) {\n sorted.forEach(function (el) { return append(this$1.target, el); });\n }\n }\n\n };\n\n if (animate) {\n this.animate(apply).then(function () { return trigger(this$1.$el, 'afterFilter', [this$1]); });\n } else {\n apply();\n trigger(this.$el, 'afterFilter', [this]);\n }\n\n },\n\n updateState: function() {\n var this$1 = this;\n\n fastdom.write(function () { return this$1.setState(this$1.getState(), false); });\n }\n\n }\n\n };\n\n function getFilter(el, attr) {\n return parseOptions(data(el, attr), ['filter']);\n }\n\n function mergeState(el, attr, state) {\n\n var filterBy = getFilter(el, attr);\n var filter = filterBy.filter;\n var group = filterBy.group;\n var sort = filterBy.sort;\n var order = filterBy.order; if ( order === void 0 ) order = 'asc';\n\n if (filter || isUndefined(sort)) {\n\n if (group) {\n\n if (filter) {\n delete state.filter[''];\n state.filter[group] = filter;\n } else {\n delete state.filter[group];\n\n if (isEmpty(state.filter) || '' in state.filter) {\n state.filter = {'': filter || ''};\n }\n\n }\n\n } else {\n state.filter = {'': filter || ''};\n }\n\n }\n\n if (!isUndefined(sort)) {\n state.sort = [sort, order];\n }\n\n return state;\n }\n\n function matchFilter(el, attr, ref) {\n var stateFilter = ref.filter; if ( stateFilter === void 0 ) stateFilter = {'': ''};\n var ref_sort = ref.sort;\n var stateSort = ref_sort[0];\n var stateOrder = ref_sort[1];\n\n\n var ref$1 = getFilter(el, attr);\n var filter = ref$1.filter; if ( filter === void 0 ) filter = '';\n var group = ref$1.group; if ( group === void 0 ) group = '';\n var sort = ref$1.sort;\n var order = ref$1.order; if ( order === void 0 ) order = 'asc';\n\n return isUndefined(sort)\n ? group in stateFilter && filter === stateFilter[group]\n || !filter && group && !(group in stateFilter) && !stateFilter['']\n : stateSort === sort && stateOrder === order;\n }\n\n function isEqualList(listA, listB) {\n return listA.length === listB.length\n && listA.every(function (el) { return ~listB.indexOf(el); });\n }\n\n function getSelector(ref) {\n var filter = ref.filter;\n\n var selector = '';\n each(filter, function (value) { return selector += value || ''; });\n return selector;\n }\n\n function sortItems(nodes, sort, order) {\n return assign([], nodes).sort(function (a, b) { return data(a, sort).localeCompare(data(b, sort), undefined, {numeric: true}) * (order === 'asc' || -1); });\n }\n\n var Animations = {\n\n slide: {\n\n show: function(dir) {\n return [\n {transform: translate(dir * -100)},\n {transform: translate()}\n ];\n },\n\n percent: function(current) {\n return translated(current);\n },\n\n translate: function(percent, dir) {\n return [\n {transform: translate(dir * -100 * percent)},\n {transform: translate(dir * 100 * (1 - percent))}\n ];\n }\n\n }\n\n };\n\n function translated(el) {\n return Math.abs(css(el, 'transform').split(',')[4] / el.offsetWidth) || 0;\n }\n\n function translate(value, unit) {\n if ( value === void 0 ) value = 0;\n if ( unit === void 0 ) unit = '%';\n\n value += value ? unit : '';\n return isIE ? (\"translateX(\" + value + \")\") : (\"translate3d(\" + value + \", 0, 0)\"); // currently not translate3d in IE, translate3d within translate3d does not work while transitioning\n }\n\n function scale3d(value) {\n return (\"scale3d(\" + value + \", \" + value + \", 1)\");\n }\n\n var Animations$1 = assign({}, Animations, {\n\n fade: {\n\n show: function() {\n return [\n {opacity: 0},\n {opacity: 1}\n ];\n },\n\n percent: function(current) {\n return 1 - css(current, 'opacity');\n },\n\n translate: function(percent) {\n return [\n {opacity: 1 - percent},\n {opacity: percent}\n ];\n }\n\n },\n\n scale: {\n\n show: function() {\n return [\n {opacity: 0, transform: scale3d(1 - .2)},\n {opacity: 1, transform: scale3d(1)}\n ];\n },\n\n percent: function(current) {\n return 1 - css(current, 'opacity');\n },\n\n translate: function(percent) {\n return [\n {opacity: 1 - percent, transform: scale3d(1 - .2 * percent)},\n {opacity: percent, transform: scale3d(1 - .2 + .2 * percent)}\n ];\n }\n\n }\n\n });\n\n function Transitioner(prev, next, dir, ref) {\n var animation = ref.animation;\n var easing = ref.easing;\n\n\n var percent = animation.percent;\n var translate = animation.translate;\n var show = animation.show; if ( show === void 0 ) show = noop;\n var props = show(dir);\n var deferred = new Deferred();\n\n return {\n\n dir: dir,\n\n show: function(duration, percent, linear) {\n var this$1 = this;\n if ( percent === void 0 ) percent = 0;\n\n\n var timing = linear ? 'linear' : easing;\n duration -= Math.round(duration * clamp(percent, -1, 1));\n\n this.translate(percent);\n\n triggerUpdate(next, 'itemin', {percent: percent, duration: duration, timing: timing, dir: dir});\n triggerUpdate(prev, 'itemout', {percent: 1 - percent, duration: duration, timing: timing, dir: dir});\n\n Promise.all([\n Transition.start(next, props[1], duration, timing),\n Transition.start(prev, props[0], duration, timing)\n ]).then(function () {\n this$1.reset();\n deferred.resolve();\n }, noop);\n\n return deferred.promise;\n },\n\n stop: function() {\n return Transition.stop([next, prev]);\n },\n\n cancel: function() {\n Transition.cancel([next, prev]);\n },\n\n reset: function() {\n for (var prop in props[0]) {\n css([next, prev], prop, '');\n }\n },\n\n forward: function(duration, percent) {\n if ( percent === void 0 ) percent = this.percent();\n\n Transition.cancel([next, prev]);\n return this.show(duration, percent, true);\n\n },\n\n translate: function(percent) {\n\n this.reset();\n\n var props = translate(percent, dir);\n css(next, props[1]);\n css(prev, props[0]);\n triggerUpdate(next, 'itemtranslatein', {percent: percent, dir: dir});\n triggerUpdate(prev, 'itemtranslateout', {percent: 1 - percent, dir: dir});\n\n },\n\n percent: function() {\n return percent(prev || next, next, dir);\n },\n\n getDistance: function() {\n return prev && prev.offsetWidth;\n }\n\n };\n\n }\n\n function triggerUpdate(el, type, data) {\n trigger(el, createEvent(type, false, false, data));\n }\n\n var SliderAutoplay = {\n\n props: {\n autoplay: Boolean,\n autoplayInterval: Number,\n pauseOnHover: Boolean\n },\n\n data: {\n autoplay: false,\n autoplayInterval: 7000,\n pauseOnHover: true\n },\n\n connected: function() {\n this.autoplay && this.startAutoplay();\n },\n\n disconnected: function() {\n this.stopAutoplay();\n },\n\n update: function() {\n attr(this.slides, 'tabindex', '-1');\n },\n\n events: [\n\n {\n\n name: 'visibilitychange',\n\n el: document,\n\n filter: function() {\n return this.autoplay;\n },\n\n handler: function() {\n if (document.hidden) {\n this.stopAutoplay();\n } else {\n this.startAutoplay();\n }\n }\n\n },\n\n {\n\n name: 'mouseenter',\n\n filter: function() {\n return this.autoplay && this.pauseOnHover;\n },\n\n handler: function() {\n this.isHovering = true;\n }\n\n },\n\n {\n\n name: 'mouseleave',\n\n filter: function() {\n return this.autoplay && this.pauseOnHover;\n },\n\n handler: function() {\n this.isHovering = false;\n }\n\n }\n\n ],\n\n methods: {\n\n startAutoplay: function() {\n var this$1 = this;\n\n\n this.stopAutoplay();\n\n this.interval = setInterval(\n function () { return !within(document.activeElement, this$1.$el)\n && !this$1.isHovering\n && !this$1.stack.length\n && this$1.show('next'); },\n this.autoplayInterval\n );\n\n },\n\n stopAutoplay: function() {\n this.interval && clearInterval(this.interval);\n }\n\n }\n\n };\n\n var SliderDrag = {\n\n props: {\n draggable: Boolean\n },\n\n data: {\n draggable: true,\n threshold: 10\n },\n\n created: function() {\n var this$1 = this;\n\n\n ['start', 'move', 'end'].forEach(function (key) {\n\n var fn = this$1[key];\n this$1[key] = function (e) {\n\n var pos = getEventPos(e).x * (isRtl ? -1 : 1);\n\n this$1.prevPos = pos !== this$1.pos ? this$1.pos : this$1.prevPos;\n this$1.pos = pos;\n\n fn(e);\n };\n\n });\n\n },\n\n events: [\n\n {\n\n name: pointerDown,\n\n delegate: function() {\n return this.selSlides;\n },\n\n handler: function(e) {\n\n if (!this.draggable\n || !isTouch(e) && hasTextNodesOnly(e.target)\n || e.button > 0\n || this.length < 2\n ) {\n return;\n }\n\n this.start(e);\n }\n\n },\n\n {\n\n // Workaround for iOS 11 bug: https://bugs.webkit.org/show_bug.cgi?id=184250\n\n name: 'touchmove',\n passive: false,\n handler: 'move',\n delegate: function() {\n return this.selSlides;\n }\n\n },\n\n {\n name: 'dragstart',\n\n handler: function(e) {\n e.preventDefault();\n }\n }\n\n ],\n\n methods: {\n\n start: function() {\n var this$1 = this;\n\n\n this.drag = this.pos;\n\n if (this._transitioner) {\n\n this.percent = this._transitioner.percent();\n this.drag += this._transitioner.getDistance() * this.percent * this.dir;\n\n this._transitioner.cancel();\n this._transitioner.translate(this.percent);\n\n this.dragging = true;\n\n this.stack = [];\n\n } else {\n this.prevIndex = this.index;\n }\n\n // See above workaround notice\n var off = pointerMove !== 'touchmove'\n ? on(document, pointerMove, this.move, {passive: false})\n : noop;\n this.unbindMove = function () {\n off();\n this$1.unbindMove = null;\n };\n on(window, 'scroll', this.unbindMove);\n on(document, pointerUp, this.end, true);\n\n css(this.list, 'userSelect', 'none');\n\n },\n\n move: function(e) {\n var this$1 = this;\n\n\n // See above workaround notice\n if (!this.unbindMove) {\n return;\n }\n\n var distance = this.pos - this.drag;\n\n if (distance === 0 || this.prevPos === this.pos || !this.dragging && Math.abs(distance) < this.threshold) {\n return;\n }\n\n css(this.list, 'pointerEvents', 'none');\n\n e.cancelable && e.preventDefault();\n\n this.dragging = true;\n this.dir = (distance < 0 ? 1 : -1);\n\n var ref = this;\n var slides = ref.slides;\n var ref$1 = this;\n var prevIndex = ref$1.prevIndex;\n var dis = Math.abs(distance);\n var nextIndex = this.getIndex(prevIndex + this.dir, prevIndex);\n var width = this._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth;\n\n while (nextIndex !== prevIndex && dis > width) {\n\n this.drag -= width * this.dir;\n\n prevIndex = nextIndex;\n dis -= width;\n nextIndex = this.getIndex(prevIndex + this.dir, prevIndex);\n width = this._getDistance(prevIndex, nextIndex) || slides[prevIndex].offsetWidth;\n\n }\n\n this.percent = dis / width;\n\n var prev = slides[prevIndex];\n var next = slides[nextIndex];\n var changed = this.index !== nextIndex;\n var edge = prevIndex === nextIndex;\n\n var itemShown;\n\n [this.index, this.prevIndex].filter(function (i) { return !includes([nextIndex, prevIndex], i); }).forEach(function (i) {\n trigger(slides[i], 'itemhidden', [this$1]);\n\n if (edge) {\n itemShown = true;\n this$1.prevIndex = prevIndex;\n }\n\n });\n\n if (this.index === prevIndex && this.prevIndex !== prevIndex || itemShown) {\n trigger(slides[this.index], 'itemshown', [this]);\n }\n\n if (changed) {\n this.prevIndex = prevIndex;\n this.index = nextIndex;\n\n !edge && trigger(prev, 'beforeitemhide', [this]);\n trigger(next, 'beforeitemshow', [this]);\n }\n\n this._transitioner = this._translate(Math.abs(this.percent), prev, !edge && next);\n\n if (changed) {\n !edge && trigger(prev, 'itemhide', [this]);\n trigger(next, 'itemshow', [this]);\n }\n\n },\n\n end: function() {\n\n off(window, 'scroll', this.unbindMove);\n this.unbindMove && this.unbindMove();\n off(document, pointerUp, this.end, true);\n\n if (this.dragging) {\n\n this.dragging = null;\n\n if (this.index === this.prevIndex) {\n this.percent = 1 - this.percent;\n this.dir *= -1;\n this._show(false, this.index, true);\n this._transitioner = null;\n } else {\n\n var dirChange = (isRtl ? this.dir * (isRtl ? 1 : -1) : this.dir) < 0 === this.prevPos > this.pos;\n this.index = dirChange ? this.index : this.prevIndex;\n\n if (dirChange) {\n this.percent = 1 - this.percent;\n }\n\n this.show(this.dir > 0 && !dirChange || this.dir < 0 && dirChange ? 'next' : 'previous', true);\n }\n\n }\n\n css(this.list, {userSelect: '', pointerEvents: ''});\n\n this.drag\n = this.percent\n = null;\n\n }\n\n }\n\n };\n\n function hasTextNodesOnly(el) {\n return !el.children.length && el.childNodes.length;\n }\n\n var SliderNav = {\n\n data: {\n selNav: false\n },\n\n computed: {\n\n nav: function(ref, $el) {\n var selNav = ref.selNav;\n\n return $(selNav, $el);\n },\n\n selNavItem: function(ref) {\n var attrItem = ref.attrItem;\n\n return (\"[\" + attrItem + \"],[data-\" + attrItem + \"]\");\n },\n\n navItems: function(_, $el) {\n return $$(this.selNavItem, $el);\n }\n\n },\n\n update: {\n\n write: function() {\n var this$1 = this;\n\n\n if (this.nav && this.length !== this.nav.children.length) {\n html(this.nav, this.slides.map(function (_, i) { return (\"<li \" + (this$1.attrItem) + \"=\\\"\" + i + \"\\\"><a href=\\\"#\\\"></a></li>\"); }).join(''));\n }\n\n toggleClass($$(this.selNavItem, this.$el).concat(this.nav), 'uk-hidden', !this.maxIndex);\n\n this.updateNav();\n\n },\n\n events: ['resize']\n\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return this.selNavItem;\n },\n\n handler: function(e) {\n e.preventDefault();\n this.show(data(e.current, this.attrItem));\n }\n\n },\n\n {\n\n name: 'itemshow',\n handler: 'updateNav'\n\n }\n\n ],\n\n methods: {\n\n updateNav: function() {\n var this$1 = this;\n\n\n var i = this.getValidIndex();\n this.navItems.forEach(function (el) {\n\n var cmd = data(el, this$1.attrItem);\n\n toggleClass(el, this$1.clsActive, toNumber(cmd) === i);\n toggleClass(el, 'uk-invisible', this$1.finite && (cmd === 'previous' && i === 0 || cmd === 'next' && i >= this$1.maxIndex));\n });\n\n }\n\n }\n\n };\n\n var Slider = {\n\n mixins: [SliderAutoplay, SliderDrag, SliderNav],\n\n props: {\n clsActivated: Boolean,\n easing: String,\n index: Number,\n finite: Boolean,\n velocity: Number\n },\n\n data: function () { return ({\n easing: 'ease',\n finite: false,\n velocity: 1,\n index: 0,\n stack: [],\n percent: 0,\n clsActive: 'uk-active',\n clsActivated: false,\n Transitioner: false,\n transitionOptions: {}\n }); },\n\n computed: {\n\n duration: function(ref, $el) {\n var velocity = ref.velocity;\n\n return speedUp($el.offsetWidth / velocity);\n },\n\n length: function() {\n return this.slides.length;\n },\n\n list: function(ref, $el) {\n var selList = ref.selList;\n\n return $(selList, $el);\n },\n\n maxIndex: function() {\n return this.length - 1;\n },\n\n selSlides: function(ref) {\n var selList = ref.selList;\n\n return (selList + \" > *\");\n },\n\n slides: function() {\n return toNodes(this.list.children);\n }\n\n },\n\n events: {\n\n itemshown: function() {\n this.$update(this.list);\n }\n\n },\n\n methods: {\n\n show: function(index, force) {\n var this$1 = this;\n if ( force === void 0 ) force = false;\n\n\n if (this.dragging || !this.length) {\n return;\n }\n\n var ref = this;\n var stack = ref.stack;\n var queueIndex = force ? 0 : stack.length;\n var reset = function () {\n stack.splice(queueIndex, 1);\n\n if (stack.length) {\n this$1.show(stack.shift(), true);\n }\n };\n\n stack[force ? 'unshift' : 'push'](index);\n\n if (!force && stack.length > 1) {\n\n if (stack.length === 2) {\n this._transitioner.forward(Math.min(this.duration, 200));\n }\n\n return;\n }\n\n var prevIndex = this.index;\n var prev = hasClass(this.slides, this.clsActive) && this.slides[prevIndex];\n var nextIndex = this.getIndex(index, this.index);\n var next = this.slides[nextIndex];\n\n if (prev === next) {\n reset();\n return;\n }\n\n this.dir = getDirection(index, prevIndex);\n this.prevIndex = prevIndex;\n this.index = nextIndex;\n\n prev && trigger(prev, 'beforeitemhide', [this]);\n if (!trigger(next, 'beforeitemshow', [this, prev])) {\n this.index = this.prevIndex;\n reset();\n return;\n }\n\n var promise = this._show(prev, next, force).then(function () {\n\n prev && trigger(prev, 'itemhidden', [this$1]);\n trigger(next, 'itemshown', [this$1]);\n\n return new Promise(function (resolve) {\n fastdom.write(function () {\n stack.shift();\n if (stack.length) {\n this$1.show(stack.shift(), true);\n } else {\n this$1._transitioner = null;\n }\n resolve();\n });\n });\n\n });\n\n prev && trigger(prev, 'itemhide', [this]);\n trigger(next, 'itemshow', [this]);\n\n return promise;\n\n },\n\n getIndex: function(index, prev) {\n if ( index === void 0 ) index = this.index;\n if ( prev === void 0 ) prev = this.index;\n\n return clamp(getIndex(index, this.slides, prev, this.finite), 0, this.maxIndex);\n },\n\n getValidIndex: function(index, prevIndex) {\n if ( index === void 0 ) index = this.index;\n if ( prevIndex === void 0 ) prevIndex = this.prevIndex;\n\n return this.getIndex(index, prevIndex);\n },\n\n _show: function(prev, next, force) {\n\n this._transitioner = this._getTransitioner(\n prev,\n next,\n this.dir,\n assign({\n easing: force\n ? next.offsetWidth < 600\n ? 'cubic-bezier(0.25, 0.46, 0.45, 0.94)' /* easeOutQuad */\n : 'cubic-bezier(0.165, 0.84, 0.44, 1)' /* easeOutQuart */\n : this.easing\n }, this.transitionOptions)\n );\n\n if (!force && !prev) {\n this._transitioner.translate(1);\n return Promise.resolve();\n }\n\n var ref = this.stack;\n var length = ref.length;\n return this._transitioner[length > 1 ? 'forward' : 'show'](length > 1 ? Math.min(this.duration, 75 + 75 / (length - 1)) : this.duration, this.percent);\n\n },\n\n _getDistance: function(prev, next) {\n return new this._getTransitioner(prev, prev !== next && next).getDistance();\n },\n\n _translate: function(percent, prev, next) {\n if ( prev === void 0 ) prev = this.prevIndex;\n if ( next === void 0 ) next = this.index;\n\n var transitioner = this._getTransitioner(prev !== next ? prev : false, next);\n transitioner.translate(percent);\n return transitioner;\n },\n\n _getTransitioner: function(prev, next, dir, options) {\n if ( prev === void 0 ) prev = this.prevIndex;\n if ( next === void 0 ) next = this.index;\n if ( dir === void 0 ) dir = this.dir || 1;\n if ( options === void 0 ) options = this.transitionOptions;\n\n return new this.Transitioner(\n isNumber(prev) ? this.slides[prev] : prev,\n isNumber(next) ? this.slides[next] : next,\n dir * (isRtl ? -1 : 1),\n options\n );\n }\n\n }\n\n };\n\n function getDirection(index, prevIndex) {\n return index === 'next'\n ? 1\n : index === 'previous'\n ? -1\n : index < prevIndex\n ? -1\n : 1;\n }\n\n function speedUp(x) {\n return .5 * x + 300; // parabola through (400,500; 600,600; 1800,1200)\n }\n\n var Slideshow = {\n\n mixins: [Slider],\n\n props: {\n animation: String\n },\n\n data: {\n animation: 'slide',\n clsActivated: 'uk-transition-active',\n Animations: Animations,\n Transitioner: Transitioner\n },\n\n computed: {\n\n animation: function(ref) {\n var animation = ref.animation;\n var Animations = ref.Animations;\n\n return assign(animation in Animations ? Animations[animation] : Animations.slide, {name: animation});\n },\n\n transitionOptions: function() {\n return {animation: this.animation};\n }\n\n },\n\n events: {\n\n 'itemshow itemhide itemshown itemhidden': function(ref) {\n var target = ref.target;\n\n this.$update(target);\n },\n\n beforeitemshow: function(ref) {\n var target = ref.target;\n\n addClass(target, this.clsActive);\n },\n\n itemshown: function(ref) {\n var target = ref.target;\n\n addClass(target, this.clsActivated);\n },\n\n itemhidden: function(ref) {\n var target = ref.target;\n\n removeClass(target, this.clsActive, this.clsActivated);\n }\n\n }\n\n };\n\n var lightboxPanel = {\n\n mixins: [Container, Modal, Togglable, Slideshow],\n\n functional: true,\n\n props: {\n delayControls: Number,\n preload: Number,\n videoAutoplay: Boolean,\n template: String\n },\n\n data: function () { return ({\n preload: 1,\n videoAutoplay: false,\n delayControls: 3000,\n items: [],\n cls: 'uk-open',\n clsPage: 'uk-lightbox-page',\n selList: '.uk-lightbox-items',\n attrItem: 'uk-lightbox-item',\n selClose: '.uk-close-large',\n pauseOnHover: false,\n velocity: 2,\n Animations: Animations$1,\n template: \"<div class=\\\"uk-lightbox uk-overflow-hidden\\\"> <ul class=\\\"uk-lightbox-items\\\"></ul> <div class=\\\"uk-lightbox-toolbar uk-position-top uk-text-right uk-transition-slide-top uk-transition-opaque\\\"> <button class=\\\"uk-lightbox-toolbar-icon uk-close-large\\\" type=\\\"button\\\" uk-close></button> </div> <a class=\\\"uk-lightbox-button uk-position-center-left uk-position-medium uk-transition-fade\\\" href=\\\"#\\\" uk-slidenav-previous uk-lightbox-item=\\\"previous\\\"></a> <a class=\\\"uk-lightbox-button uk-position-center-right uk-position-medium uk-transition-fade\\\" href=\\\"#\\\" uk-slidenav-next uk-lightbox-item=\\\"next\\\"></a> <div class=\\\"uk-lightbox-toolbar uk-lightbox-caption uk-position-bottom uk-text-center uk-transition-slide-bottom uk-transition-opaque\\\"></div> </div>\"\n }); },\n\n created: function() {\n var this$1 = this;\n\n\n this.$mount(append(this.container, this.template));\n\n this.caption = $('.uk-lightbox-caption', this.$el);\n\n this.items.forEach(function () { return append(this$1.list, '<li></li>'); });\n\n },\n\n events: [\n\n {\n\n name: (pointerMove + \" \" + pointerDown + \" keydown\"),\n\n handler: 'showControls'\n\n },\n\n {\n\n name: 'click',\n\n self: true,\n\n delegate: function() {\n return this.selSlides;\n },\n\n handler: function(e) {\n\n if (e.defaultPrevented) {\n return;\n }\n\n this.hide();\n }\n\n },\n\n {\n\n name: 'shown',\n\n self: true,\n\n handler: function() {\n this.showControls();\n }\n\n },\n\n {\n\n name: 'hide',\n\n self: true,\n\n handler: function() {\n\n this.hideControls();\n\n removeClass(this.slides, this.clsActive);\n Transition.stop(this.slides);\n\n }\n },\n\n {\n\n name: 'hidden',\n\n self: true,\n\n handler: function() {\n this.$destroy(true);\n }\n\n },\n\n {\n\n name: 'keyup',\n\n el: document,\n\n handler: function(e) {\n\n if (!this.isToggled(this.$el)) {\n return;\n }\n\n switch (e.keyCode) {\n case 37:\n this.show('previous');\n break;\n case 39:\n this.show('next');\n break;\n }\n }\n },\n\n {\n\n name: 'beforeitemshow',\n\n handler: function(e) {\n\n if (this.isToggled()) {\n return;\n }\n\n this.draggable = false;\n\n e.preventDefault();\n\n this.toggleNow(this.$el, true);\n\n this.animation = Animations$1['scale'];\n removeClass(e.target, this.clsActive);\n this.stack.splice(1, 0, this.index);\n\n }\n\n },\n\n {\n\n name: 'itemshow',\n\n handler: function(ref) {\n var target = ref.target;\n\n\n var i = index(target);\n var ref$1 = this.getItem(i);\n var caption = ref$1.caption;\n\n css(this.caption, 'display', caption ? '' : 'none');\n html(this.caption, caption);\n\n for (var j = 0; j <= this.preload; j++) {\n this.loadItem(this.getIndex(i + j));\n this.loadItem(this.getIndex(i - j));\n }\n\n }\n\n },\n\n {\n\n name: 'itemshown',\n\n handler: function() {\n this.draggable = this.$props.draggable;\n }\n\n },\n\n {\n\n name: 'itemload',\n\n handler: function(_, item) {\n var this$1 = this;\n\n\n var source = item.source;\n var type = item.type;\n var alt = item.alt;\n\n this.setItem(item, '<span uk-spinner></span>');\n\n if (!source) {\n return;\n }\n\n var matches;\n\n // Image\n if (type === 'image' || source.match(/\\.(jp(e)?g|png|gif|svg|webp)($|\\?)/i)) {\n\n getImage(source).then(\n function (img) { return this$1.setItem(item, (\"<img width=\\\"\" + (img.width) + \"\\\" height=\\\"\" + (img.height) + \"\\\" src=\\\"\" + source + \"\\\" alt=\\\"\" + (alt ? alt : '') + \"\\\">\")); },\n function () { return this$1.setError(item); }\n );\n\n // Video\n } else if (type === 'video' || source.match(/\\.(mp4|webm|ogv)($|\\?)/i)) {\n\n var video = $((\"<video controls playsinline\" + (item.poster ? (\" poster=\\\"\" + (item.poster) + \"\\\"\") : '') + \" uk-video=\\\"\" + (this.videoAutoplay) + \"\\\"></video>\"));\n attr(video, 'src', source);\n\n once(video, 'error loadedmetadata', function (type) {\n if (type === 'error') {\n this$1.setError(item);\n } else {\n attr(video, {width: video.videoWidth, height: video.videoHeight});\n this$1.setItem(item, video);\n }\n });\n\n // Iframe\n } else if (type === 'iframe' || source.match(/\\.(html|php)($|\\?)/i)) {\n\n this.setItem(item, (\"<iframe class=\\\"uk-lightbox-iframe\\\" src=\\\"\" + source + \"\\\" frameborder=\\\"0\\\" allowfullscreen></iframe>\"));\n\n // YouTube\n } else if ((matches = source.match(/\\/\\/.*?youtube(-nocookie)?\\.[a-z]+\\/watch\\?v=([^&\\s]+)/) || source.match(/()youtu\\.be\\/(.*)/))) {\n\n var id = matches[2];\n var setIframe = function (width, height) {\n if ( width === void 0 ) width = 640;\n if ( height === void 0 ) height = 450;\n\n return this$1.setItem(item, getIframe((\"https://www.youtube\" + (matches[1] || '') + \".com/embed/\" + id), width, height, this$1.videoAutoplay));\n };\n\n getImage((\"https://img.youtube.com/vi/\" + id + \"/maxresdefault.jpg\")).then(\n function (ref) {\n var width = ref.width;\n var height = ref.height;\n\n // YouTube default 404 thumb, fall back to low resolution\n if (width === 120 && height === 90) {\n getImage((\"https://img.youtube.com/vi/\" + id + \"/0.jpg\")).then(\n function (ref) {\n var width = ref.width;\n var height = ref.height;\n\n return setIframe(width, height);\n },\n setIframe\n );\n } else {\n setIframe(width, height);\n }\n },\n setIframe\n );\n\n // Vimeo\n } else if ((matches = source.match(/(\\/\\/.*?)vimeo\\.[a-z]+\\/([0-9]+).*?/))) {\n\n ajax((\"https://vimeo.com/api/oembed.json?maxwidth=1920&url=\" + (encodeURI(source))), {responseType: 'json', withCredentials: false})\n .then(\n function (ref) {\n var ref_response = ref.response;\n var height = ref_response.height;\n var width = ref_response.width;\n\n return this$1.setItem(item, getIframe((\"https://player.vimeo.com/video/\" + (matches[2])), width, height, this$1.videoAutoplay));\n },\n function () { return this$1.setError(item); }\n );\n\n }\n\n }\n\n }\n\n ],\n\n methods: {\n\n loadItem: function(index) {\n if ( index === void 0 ) index = this.index;\n\n\n var item = this.getItem(index);\n\n if (item.content) {\n return;\n }\n\n trigger(this.$el, 'itemload', [item]);\n },\n\n getItem: function(index) {\n if ( index === void 0 ) index = this.index;\n\n return this.items[index] || {};\n },\n\n setItem: function(item, content) {\n assign(item, {content: content});\n var el = html(this.slides[this.items.indexOf(item)], content);\n trigger(this.$el, 'itemloaded', [this, el]);\n this.$update(el);\n },\n\n setError: function(item) {\n this.setItem(item, '<span uk-icon=\"icon: bolt; ratio: 2\"></span>');\n },\n\n showControls: function() {\n\n clearTimeout(this.controlsTimer);\n this.controlsTimer = setTimeout(this.hideControls, this.delayControls);\n\n addClass(this.$el, 'uk-active', 'uk-transition-active');\n\n },\n\n hideControls: function() {\n removeClass(this.$el, 'uk-active', 'uk-transition-active');\n }\n\n }\n\n };\n\n function getIframe(src, width, height, autoplay) {\n return (\"<iframe src=\\\"\" + src + \"\\\" width=\\\"\" + width + \"\\\" height=\\\"\" + height + \"\\\" style=\\\"max-width: 100%; box-sizing: border-box;\\\" frameborder=\\\"0\\\" allowfullscreen uk-video=\\\"autoplay: \" + autoplay + \"\\\" uk-responsive></iframe>\");\n }\n\n var Lightbox = {\n\n install: install$2,\n\n props: {toggle: String},\n\n data: {toggle: 'a'},\n\n computed: {\n\n toggles: {\n\n get: function(ref, $el) {\n var toggle = ref.toggle;\n\n return $$(toggle, $el);\n },\n\n watch: function() {\n this.hide();\n }\n\n },\n\n items: function() {\n return uniqueBy(this.toggles.map(toItem), 'source');\n }\n\n },\n\n disconnected: function() {\n this.hide();\n },\n\n events: [\n\n {\n\n name: 'click',\n\n delegate: function() {\n return ((this.toggle) + \":not(.uk-disabled)\");\n },\n\n handler: function(e) {\n e.preventDefault();\n var src = data(e.current, 'href');\n this.show(findIndex(this.items, function (ref) {\n var source = ref.source;\n\n return source === src;\n }));\n }\n\n }\n\n ],\n\n methods: {\n\n show: function(index) {\n var this$1 = this;\n\n\n this.panel = this.panel || this.$create('lightboxPanel', assign({}, this.$props, {items: this.items}));\n\n on(this.panel.$el, 'hidden', function () { return this$1.panel = false; });\n\n return this.panel.show(index);\n\n },\n\n hide: function() {\n\n return this.panel && this.panel.hide();\n\n }\n\n }\n\n };\n\n function install$2(UIkit, Lightbox) {\n\n if (!UIkit.lightboxPanel) {\n UIkit.component('lightboxPanel', lightboxPanel);\n }\n\n assign(\n Lightbox.props,\n UIkit.component('lightboxPanel').options.props\n );\n\n }\n\n function toItem(el) {\n return ['href', 'caption', 'type', 'poster', 'alt'].reduce(function (obj, attr) {\n obj[attr === 'href' ? 'source' : attr] = data(el, attr);\n return obj;\n }, {});\n }\n\n var obj;\n\n var containers = {};\n\n var Notification = {\n\n functional: true,\n\n args: ['message', 'status'],\n\n data: {\n message: '',\n status: '',\n timeout: 5000,\n group: null,\n pos: 'top-center',\n clsClose: 'uk-notification-close',\n clsMsg: 'uk-notification-message'\n },\n\n install: install$3,\n\n computed: {\n\n marginProp: function(ref) {\n var pos = ref.pos;\n\n return (\"margin\" + (startsWith(pos, 'top') ? 'Top' : 'Bottom'));\n },\n\n startProps: function() {\n var obj;\n\n return ( obj = {opacity: 0}, obj[this.marginProp] = -this.$el.offsetHeight, obj );\n }\n\n },\n\n created: function() {\n\n if (!containers[this.pos]) {\n containers[this.pos] = append(this.$container, (\"<div class=\\\"uk-notification uk-notification-\" + (this.pos) + \"\\\"></div>\"));\n }\n\n var container = css(containers[this.pos], 'display', 'block');\n\n this.$mount(append(container,\n (\"<div class=\\\"\" + (this.clsMsg) + (this.status ? (\" \" + (this.clsMsg) + \"-\" + (this.status)) : '') + \"\\\"> <a href=\\\"#\\\" class=\\\"\" + (this.clsClose) + \"\\\" data-uk-close></a> <div>\" + (this.message) + \"</div> </div>\")\n ));\n\n },\n\n connected: function() {\n var this$1 = this;\n var obj;\n\n\n var margin = toFloat(css(this.$el, this.marginProp));\n Transition.start(\n css(this.$el, this.startProps),\n ( obj = {opacity: 1}, obj[this.marginProp] = margin, obj )\n ).then(function () {\n if (this$1.timeout) {\n this$1.timer = setTimeout(this$1.close, this$1.timeout);\n }\n });\n\n },\n\n events: ( obj = {\n\n click: function(e) {\n if (closest(e.target, 'a[href=\"#\"],a[href=\"\"]')) {\n e.preventDefault();\n }\n this.close();\n }\n\n }, obj[pointerEnter] = function () {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n }, obj[pointerLeave] = function () {\n if (this.timeout) {\n this.timer = setTimeout(this.close, this.timeout);\n }\n }, obj ),\n\n methods: {\n\n close: function(immediate) {\n var this$1 = this;\n\n\n var removeFn = function () {\n\n trigger(this$1.$el, 'close', [this$1]);\n remove(this$1.$el);\n\n if (!containers[this$1.pos].children.length) {\n css(containers[this$1.pos], 'display', 'none');\n }\n\n };\n\n if (this.timer) {\n clearTimeout(this.timer);\n }\n\n if (immediate) {\n removeFn();\n } else {\n Transition.start(this.$el, this.startProps).then(removeFn);\n }\n }\n\n }\n\n };\n\n function install$3(UIkit) {\n UIkit.notification.closeAll = function (group, immediate) {\n apply(document.body, function (el) {\n var notification = UIkit.getComponent(el, 'notification');\n if (notification && (!group || group === notification.group)) {\n notification.close(immediate);\n }\n });\n };\n }\n\n var props = ['x', 'y', 'bgx', 'bgy', 'rotate', 'scale', 'color', 'backgroundColor', 'borderColor', 'opacity', 'blur', 'hue', 'grayscale', 'invert', 'saturate', 'sepia', 'fopacity', 'stroke'];\n\n var Parallax = {\n\n mixins: [Media],\n\n props: props.reduce(function (props, prop) {\n props[prop] = 'list';\n return props;\n }, {}),\n\n data: props.reduce(function (data, prop) {\n data[prop] = undefined;\n return data;\n }, {}),\n\n computed: {\n\n props: function(properties, $el) {\n var this$1 = this;\n\n\n return props.reduce(function (props, prop) {\n\n if (isUndefined(properties[prop])) {\n return props;\n }\n\n var isColor = prop.match(/color/i);\n var isCssProp = isColor || prop === 'opacity';\n\n var pos, bgPos, diff;\n var steps = properties[prop].slice(0);\n\n if (isCssProp) {\n css($el, prop, '');\n }\n\n if (steps.length < 2) {\n steps.unshift((prop === 'scale'\n ? 1\n : isCssProp\n ? css($el, prop)\n : 0) || 0);\n }\n\n var unit = getUnit(steps);\n\n if (isColor) {\n\n var ref = $el.style;\n var color = ref.color;\n steps = steps.map(function (step) { return parseColor($el, step); });\n $el.style.color = color;\n\n } else if (startsWith(prop, 'bg')) {\n\n var attr = prop === 'bgy' ? 'height' : 'width';\n steps = steps.map(function (step) { return toPx(step, attr, this$1.$el); });\n\n css($el, (\"background-position-\" + (prop[2])), '');\n bgPos = css($el, 'backgroundPosition').split(' ')[prop[2] === 'x' ? 0 : 1]; // IE 11 can't read background-position-[x|y]\n\n if (this$1.covers) {\n\n var min = Math.min.apply(Math, steps);\n var max = Math.max.apply(Math, steps);\n var down = steps.indexOf(min) < steps.indexOf(max);\n\n diff = max - min;\n\n steps = steps.map(function (step) { return step - (down ? min : max); });\n pos = (down ? -diff : 0) + \"px\";\n\n } else {\n\n pos = bgPos;\n\n }\n\n } else {\n\n steps = steps.map(toFloat);\n\n }\n\n if (prop === 'stroke') {\n\n if (!steps.some(function (step) { return step; })) {\n return props;\n }\n\n var length = getMaxPathLength(this$1.$el);\n css($el, 'strokeDasharray', length);\n\n if (unit === '%') {\n steps = steps.map(function (step) { return step * length / 100; });\n }\n\n steps = steps.reverse();\n\n prop = 'strokeDashoffset';\n }\n\n props[prop] = {steps: steps, unit: unit, pos: pos, bgPos: bgPos, diff: diff};\n\n return props;\n\n }, {});\n\n },\n\n bgProps: function() {\n var this$1 = this;\n\n return ['bgx', 'bgy'].filter(function (bg) { return bg in this$1.props; });\n },\n\n covers: function(_, $el) {\n return covers($el);\n }\n\n },\n\n disconnected: function() {\n delete this._image;\n },\n\n update: {\n\n read: function(data) {\n var this$1 = this;\n\n\n data.active = this.matchMedia;\n\n if (!data.active) {\n return;\n }\n\n if (!data.image && this.covers && this.bgProps.length) {\n var src = css(this.$el, 'backgroundImage').replace(/^none|url\\([\"']?(.+?)[\"']?\\)$/, '$1');\n\n if (src) {\n var img = new Image();\n img.src = src;\n data.image = img;\n\n if (!img.naturalWidth) {\n img.onload = function () { return this$1.$emit(); };\n }\n }\n\n }\n\n var image = data.image;\n\n if (!image || !image.naturalWidth) {\n return;\n }\n\n var dimEl = {\n width: this.$el.offsetWidth,\n height: this.$el.offsetHeight\n };\n var dimImage = {\n width: image.naturalWidth,\n height: image.naturalHeight\n };\n\n var dim = Dimensions.cover(dimImage, dimEl);\n\n this.bgProps.forEach(function (prop) {\n\n var ref = this$1.props[prop];\n var diff = ref.diff;\n var bgPos = ref.bgPos;\n var steps = ref.steps;\n var attr = prop === 'bgy' ? 'height' : 'width';\n var span = dim[attr] - dimEl[attr];\n\n if (span < diff) {\n dimEl[attr] = dim[attr] + diff - span;\n } else if (span > diff) {\n\n var posPercentage = dimEl[attr] / toPx(bgPos, attr, this$1.$el);\n\n if (posPercentage) {\n this$1.props[prop].steps = steps.map(function (step) { return step - (span - diff) / posPercentage; });\n }\n }\n\n dim = Dimensions.cover(dimImage, dimEl);\n });\n\n data.dim = dim;\n },\n\n write: function(ref) {\n var dim = ref.dim;\n var active = ref.active;\n\n\n if (!active) {\n css(this.$el, {backgroundSize: '', backgroundRepeat: ''});\n return;\n }\n\n dim && css(this.$el, {\n backgroundSize: ((dim.width) + \"px \" + (dim.height) + \"px\"),\n backgroundRepeat: 'no-repeat'\n });\n\n },\n\n events: ['resize']\n\n },\n\n methods: {\n\n reset: function() {\n var this$1 = this;\n\n each(this.getCss(0), function (_, prop) { return css(this$1.$el, prop, ''); });\n },\n\n getCss: function(percent) {\n\n var ref = this;\n var props = ref.props;\n return Object.keys(props).reduce(function (css, prop) {\n\n var ref = props[prop];\n var steps = ref.steps;\n var unit = ref.unit;\n var pos = ref.pos;\n var value = getValue(steps, percent);\n\n switch (prop) {\n\n // transforms\n case 'x':\n case 'y': {\n unit = unit || 'px';\n css.transform += \" translate\" + (ucfirst(prop)) + \"(\" + (toFloat(value).toFixed(unit === 'px' ? 0 : 2)) + unit + \")\";\n break;\n }\n case 'rotate':\n unit = unit || 'deg';\n css.transform += \" rotate(\" + (value + unit) + \")\";\n break;\n case 'scale':\n css.transform += \" scale(\" + value + \")\";\n break;\n\n // bg image\n case 'bgy':\n case 'bgx':\n css[(\"background-position-\" + (prop[2]))] = \"calc(\" + pos + \" + \" + value + \"px)\";\n break;\n\n // color\n case 'color':\n case 'backgroundColor':\n case 'borderColor': {\n\n var ref$1 = getStep(steps, percent);\n var start = ref$1[0];\n var end = ref$1[1];\n var p = ref$1[2];\n\n css[prop] = \"rgba(\" + (start.map(function (value, i) {\n value = value + p * (end[i] - value);\n return i === 3 ? toFloat(value) : parseInt(value, 10);\n }).join(',')) + \")\";\n break;\n }\n // CSS Filter\n case 'blur':\n unit = unit || 'px';\n css.filter += \" blur(\" + (value + unit) + \")\";\n break;\n case 'hue':\n unit = unit || 'deg';\n css.filter += \" hue-rotate(\" + (value + unit) + \")\";\n break;\n case 'fopacity':\n unit = unit || '%';\n css.filter += \" opacity(\" + (value + unit) + \")\";\n break;\n case 'grayscale':\n case 'invert':\n case 'saturate':\n case 'sepia':\n unit = unit || '%';\n css.filter += \" \" + prop + \"(\" + (value + unit) + \")\";\n break;\n default:\n css[prop] = value;\n }\n\n return css;\n\n }, {transform: '', filter: ''});\n\n }\n\n }\n\n };\n\n function parseColor(el, color) {\n return css(css(el, 'color', color), 'color')\n .split(/[(),]/g)\n .slice(1, -1)\n .concat(1)\n .slice(0, 4)\n .map(toFloat);\n }\n\n function getStep(steps, percent) {\n var count = steps.length - 1;\n var index = Math.min(Math.floor(count * percent), count - 1);\n var step = steps.slice(index, index + 2);\n\n step.push(percent === 1 ? 1 : percent % (1 / count) * count);\n\n return step;\n }\n\n function getValue(steps, percent, digits) {\n if ( digits === void 0 ) digits = 2;\n\n var ref = getStep(steps, percent);\n var start = ref[0];\n var end = ref[1];\n var p = ref[2];\n return (isNumber(start)\n ? start + Math.abs(start - end) * p * (start < end ? 1 : -1)\n : +end\n ).toFixed(digits);\n }\n\n function getUnit(steps) {\n return steps.reduce(function (unit, step) { return isString(step) && step.replace(/-|\\d/g, '').trim() || unit; }, '');\n }\n\n function covers(el) {\n var ref = el.style;\n var backgroundSize = ref.backgroundSize;\n var covers = css(css(el, 'backgroundSize', ''), 'backgroundSize') === 'cover';\n el.style.backgroundSize = backgroundSize;\n return covers;\n }\n\n var Parallax$1 = {\n\n mixins: [Parallax],\n\n props: {\n target: String,\n viewport: Number,\n easing: Number\n },\n\n data: {\n target: false,\n viewport: 1,\n easing: 1\n },\n\n computed: {\n\n target: function(ref, $el) {\n var target = ref.target;\n\n return getOffsetElement(target && query(target, $el) || $el);\n }\n\n },\n\n update: {\n\n read: function(ref, type) {\n var percent = ref.percent;\n var active = ref.active;\n\n\n if (type !== 'scroll') {\n percent = false;\n }\n\n if (!active) {\n return;\n }\n\n var prev = percent;\n percent = ease$1(scrolledOver(this.target) / (this.viewport || 1), this.easing);\n\n return {\n percent: percent,\n style: prev !== percent ? this.getCss(percent) : false\n };\n },\n\n write: function(ref) {\n var style = ref.style;\n var active = ref.active;\n\n\n if (!active) {\n this.reset();\n return;\n }\n\n style && css(this.$el, style);\n\n },\n\n events: ['scroll', 'resize']\n }\n\n };\n\n function ease$1(percent, easing) {\n return clamp(percent * (1 - (easing - easing * percent)));\n }\n\n // SVG elements do not inherit from HTMLElement\n function getOffsetElement(el) {\n return el\n ? 'offsetTop' in el\n ? el\n : getOffsetElement(el.parentNode)\n : document.body;\n }\n\n var SliderReactive = {\n\n update: {\n\n write: function() {\n\n if (this.stack.length || this.dragging) {\n return;\n }\n\n var index = this.getValidIndex();\n delete this.index;\n removeClass(this.slides, this.clsActive, this.clsActivated);\n this.show(index);\n\n },\n\n events: ['resize']\n\n }\n\n };\n\n function Transitioner$1 (prev, next, dir, ref) {\n var center = ref.center;\n var easing = ref.easing;\n var list = ref.list;\n\n\n var deferred = new Deferred();\n\n var from = prev\n ? getLeft(prev, list, center)\n : getLeft(next, list, center) + bounds(next).width * dir;\n var to = next\n ? getLeft(next, list, center)\n : from + bounds(prev).width * dir * (isRtl ? -1 : 1);\n\n return {\n\n dir: dir,\n\n show: function(duration, percent, linear) {\n if ( percent === void 0 ) percent = 0;\n\n\n var timing = linear ? 'linear' : easing;\n duration -= Math.round(duration * clamp(percent, -1, 1));\n\n this.translate(percent);\n\n prev && this.updateTranslates();\n percent = prev ? percent : clamp(percent, 0, 1);\n triggerUpdate$1(this.getItemIn(), 'itemin', {percent: percent, duration: duration, timing: timing, dir: dir});\n prev && triggerUpdate$1(this.getItemIn(true), 'itemout', {percent: 1 - percent, duration: duration, timing: timing, dir: dir});\n\n Transition\n .start(list, {transform: translate(-to * (isRtl ? -1 : 1), 'px')}, duration, timing)\n .then(deferred.resolve, noop);\n\n return deferred.promise;\n\n },\n\n stop: function() {\n return Transition.stop(list);\n },\n\n cancel: function() {\n Transition.cancel(list);\n },\n\n reset: function() {\n css(list, 'transform', '');\n },\n\n forward: function(duration, percent) {\n if ( percent === void 0 ) percent = this.percent();\n\n Transition.cancel(list);\n return this.show(duration, percent, true);\n },\n\n translate: function(percent) {\n\n var distance = this.getDistance() * dir * (isRtl ? -1 : 1);\n\n css(list, 'transform', translate(clamp(\n -to + (distance - distance * percent),\n -getWidth(list),\n bounds(list).width\n ) * (isRtl ? -1 : 1), 'px'));\n\n this.updateTranslates();\n\n if (prev) {\n percent = clamp(percent, -1, 1);\n triggerUpdate$1(this.getItemIn(), 'itemtranslatein', {percent: percent, dir: dir});\n triggerUpdate$1(this.getItemIn(true), 'itemtranslateout', {percent: 1 - percent, dir: dir});\n }\n\n },\n\n percent: function() {\n return Math.abs((css(list, 'transform').split(',')[4] * (isRtl ? -1 : 1) + from) / (to - from));\n },\n\n getDistance: function() {\n return Math.abs(to - from);\n },\n\n getItemIn: function(out) {\n if ( out === void 0 ) out = false;\n\n\n var actives = this.getActives();\n var all = sortBy(slides(list), 'offsetLeft');\n var i = index(all, actives[dir * (out ? -1 : 1) > 0 ? actives.length - 1 : 0]);\n\n return ~i && all[i + (prev && !out ? dir : 0)];\n\n },\n\n getActives: function() {\n\n var left = getLeft(prev || next, list, center);\n\n return sortBy(slides(list).filter(function (slide) {\n var slideLeft = getElLeft(slide, list);\n return slideLeft >= left && slideLeft + bounds(slide).width <= bounds(list).width + left;\n }), 'offsetLeft');\n\n },\n\n updateTranslates: function() {\n\n var actives = this.getActives();\n\n slides(list).forEach(function (slide) {\n var isActive = includes(actives, slide);\n\n triggerUpdate$1(slide, (\"itemtranslate\" + (isActive ? 'in' : 'out')), {\n percent: isActive ? 1 : 0,\n dir: slide.offsetLeft <= next.offsetLeft ? 1 : -1\n });\n });\n }\n\n };\n\n }\n\n function getLeft(el, list, center) {\n\n var left = getElLeft(el, list);\n\n return center\n ? left - centerEl(el, list)\n : Math.min(left, getMax(list));\n\n }\n\n function getMax(list) {\n return Math.max(0, getWidth(list) - bounds(list).width);\n }\n\n function getWidth(list) {\n return slides(list).reduce(function (right, el) { return bounds(el).width + right; }, 0);\n }\n\n function getMaxWidth(list) {\n return slides(list).reduce(function (right, el) { return Math.max(right, bounds(el).width); }, 0);\n }\n\n function centerEl(el, list) {\n return bounds(list).width / 2 - bounds(el).width / 2;\n }\n\n function getElLeft(el, list) {\n return (position(el).left + (isRtl ? bounds(el).width - bounds(list).width : 0)) * (isRtl ? -1 : 1);\n }\n\n function bounds(el) {\n return el.getBoundingClientRect();\n }\n\n function triggerUpdate$1(el, type, data) {\n trigger(el, createEvent(type, false, false, data));\n }\n\n function slides(list) {\n return toNodes(list.children);\n }\n\n var Slider$1 = {\n\n mixins: [Class, Slider, SliderReactive],\n\n props: {\n center: Boolean,\n sets: Boolean\n },\n\n data: {\n center: false,\n sets: false,\n attrItem: 'uk-slider-item',\n selList: '.uk-slider-items',\n selNav: '.uk-slider-nav',\n clsContainer: 'uk-slider-container',\n Transitioner: Transitioner$1\n },\n\n computed: {\n\n avgWidth: function() {\n return getWidth(this.list) / this.length;\n },\n\n finite: function(ref) {\n var finite = ref.finite;\n\n return finite || getWidth(this.list) < bounds(this.list).width + getMaxWidth(this.list) + this.center;\n },\n\n maxIndex: function() {\n\n if (!this.finite || this.center && !this.sets) {\n return this.length - 1;\n }\n\n if (this.center) {\n return this.sets[this.sets.length - 1];\n }\n\n css(this.slides, 'order', '');\n\n var max = getMax(this.list);\n var i = this.length;\n\n while (i--) {\n if (getElLeft(this.list.children[i], this.list) < max) {\n return Math.min(i + 1, this.length - 1);\n }\n }\n\n return 0;\n },\n\n sets: function(ref) {\n var this$1 = this;\n var sets = ref.sets;\n\n\n var width = bounds(this.list).width / (this.center ? 2 : 1);\n\n var left = 0;\n var leftCenter = width;\n var slideLeft = 0;\n\n sets = sets && this.slides.reduce(function (sets, slide, i) {\n\n var ref = bounds(slide);\n var slideWidth = ref.width;\n var slideRight = slideLeft + slideWidth;\n\n if (slideRight > left) {\n\n if (!this$1.center && i > this$1.maxIndex) {\n i = this$1.maxIndex;\n }\n\n if (!includes(sets, i)) {\n\n var cmp = this$1.slides[i + 1];\n if (this$1.center && cmp && slideWidth < leftCenter - bounds(cmp).width / 2) {\n leftCenter -= slideWidth;\n } else {\n leftCenter = width;\n sets.push(i);\n left = slideLeft + width + (this$1.center ? slideWidth / 2 : 0);\n }\n\n }\n }\n\n slideLeft += slideWidth;\n\n return sets;\n\n }, []);\n\n return !isEmpty(sets) && sets;\n\n },\n\n transitionOptions: function() {\n return {\n center: this.center,\n list: this.list\n };\n }\n\n },\n\n connected: function() {\n toggleClass(this.$el, this.clsContainer, !$((\".\" + (this.clsContainer)), this.$el));\n },\n\n update: {\n\n write: function() {\n var this$1 = this;\n\n\n $$((\"[\" + (this.attrItem) + \"],[data-\" + (this.attrItem) + \"]\"), this.$el).forEach(function (el) {\n var index = data(el, this$1.attrItem);\n this$1.maxIndex && toggleClass(el, 'uk-hidden', isNumeric(index) && (this$1.sets && !includes(this$1.sets, toFloat(index)) || index > this$1.maxIndex));\n });\n\n },\n\n events: ['resize']\n\n },\n\n events: {\n\n beforeitemshow: function(e) {\n\n if (!this.dragging && this.sets && this.stack.length < 2 && !includes(this.sets, this.index)) {\n this.index = this.getValidIndex();\n }\n\n var diff = Math.abs(\n this.index\n - this.prevIndex\n + (this.dir > 0 && this.index < this.prevIndex || this.dir < 0 && this.index > this.prevIndex ? (this.maxIndex + 1) * this.dir : 0)\n );\n\n if (!this.dragging && diff > 1) {\n\n for (var i = 0; i < diff; i++) {\n this.stack.splice(1, 0, this.dir > 0 ? 'next' : 'previous');\n }\n\n e.preventDefault();\n return;\n }\n\n this.duration = speedUp(this.avgWidth / this.velocity)\n * (bounds(\n this.dir < 0 || !this.slides[this.prevIndex]\n ? this.slides[this.index]\n : this.slides[this.prevIndex]\n ).width / this.avgWidth);\n\n this.reorder();\n\n },\n\n itemshow: function() {\n !isUndefined(this.prevIndex) && addClass(this._getTransitioner().getItemIn(), this.clsActive);\n },\n\n itemshown: function() {\n var this$1 = this;\n\n var actives = this._getTransitioner(this.index).getActives();\n this.slides.forEach(function (slide) { return toggleClass(slide, this$1.clsActive, includes(actives, slide)); });\n (!this.sets || includes(this.sets, toFloat(this.index))) && this.slides.forEach(function (slide) { return toggleClass(slide, this$1.clsActivated, includes(actives, slide)); });\n }\n\n },\n\n methods: {\n\n reorder: function() {\n var this$1 = this;\n\n\n css(this.slides, 'order', '');\n\n if (this.finite) {\n return;\n }\n\n var index = this.dir > 0 && this.slides[this.prevIndex] ? this.prevIndex : this.index;\n\n this.slides.forEach(function (slide, i) { return css(slide, 'order', this$1.dir > 0 && i < index\n ? 1\n : this$1.dir < 0 && i >= this$1.index\n ? -1\n : ''\n ); }\n );\n\n if (!this.center) {\n return;\n }\n\n var next = this.slides[index];\n var width = bounds(this.list).width / 2 - bounds(next).width / 2;\n var j = 0;\n\n while (width > 0) {\n var slideIndex = this.getIndex(--j + index, index);\n var slide = this.slides[slideIndex];\n\n css(slide, 'order', slideIndex > index ? -2 : -1);\n width -= bounds(slide).width;\n }\n\n },\n\n getValidIndex: function(index, prevIndex) {\n if ( index === void 0 ) index = this.index;\n if ( prevIndex === void 0 ) prevIndex = this.prevIndex;\n\n\n index = this.getIndex(index, prevIndex);\n\n if (!this.sets) {\n return index;\n }\n\n var prev;\n\n do {\n\n if (includes(this.sets, index)) {\n return index;\n }\n\n prev = index;\n index = this.getIndex(index + this.dir, prevIndex);\n\n } while (index !== prev);\n\n return index;\n }\n\n }\n\n };\n\n var SliderParallax = {\n\n mixins: [Parallax],\n\n data: {\n selItem: '!li'\n },\n\n computed: {\n\n item: function(ref, $el) {\n var selItem = ref.selItem;\n\n return query(selItem, $el);\n }\n\n },\n\n events: [\n\n {\n\n name: 'itemshown',\n\n self: true,\n\n el: function() {\n return this.item;\n },\n\n handler: function() {\n css(this.$el, this.getCss(.5));\n }\n\n },\n\n {\n name: 'itemin itemout',\n\n self: true,\n\n el: function() {\n return this.item;\n },\n\n handler: function(ref) {\n var type = ref.type;\n var ref_detail = ref.detail;\n var percent = ref_detail.percent;\n var duration = ref_detail.duration;\n var timing = ref_detail.timing;\n var dir = ref_detail.dir;\n\n\n Transition.cancel(this.$el);\n css(this.$el, this.getCss(getCurrent(type, dir, percent)));\n\n Transition.start(this.$el, this.getCss(isIn(type)\n ? .5\n : dir > 0\n ? 1\n : 0\n ), duration, timing).catch(noop);\n\n }\n },\n\n {\n name: 'transitioncanceled transitionend',\n\n self: true,\n\n el: function() {\n return this.item;\n },\n\n handler: function() {\n Transition.cancel(this.$el);\n }\n\n },\n\n {\n name: 'itemtranslatein itemtranslateout',\n\n self: true,\n\n el: function() {\n return this.item;\n },\n\n handler: function(ref) {\n var type = ref.type;\n var ref_detail = ref.detail;\n var percent = ref_detail.percent;\n var dir = ref_detail.dir;\n\n Transition.cancel(this.$el);\n css(this.$el, this.getCss(getCurrent(type, dir, percent)));\n }\n }\n\n ]\n\n };\n\n function isIn(type) {\n return endsWith(type, 'in');\n }\n\n function getCurrent(type, dir, percent) {\n\n percent /= 2;\n\n return !isIn(type)\n ? dir < 0\n ? percent\n : 1 - percent\n : dir < 0\n ? 1 - percent\n : percent;\n }\n\n var Animations$2 = assign({}, Animations, {\n\n fade: {\n\n show: function() {\n return [\n {opacity: 0, zIndex: 0},\n {zIndex: -1}\n ];\n },\n\n percent: function(current) {\n return 1 - css(current, 'opacity');\n },\n\n translate: function(percent) {\n return [\n {opacity: 1 - percent, zIndex: 0},\n {zIndex: -1}\n ];\n }\n\n },\n\n scale: {\n\n show: function() {\n return [\n {opacity: 0, transform: scale3d(1 + .5), zIndex: 0},\n {zIndex: -1}\n ];\n },\n\n percent: function(current) {\n return 1 - css(current, 'opacity');\n },\n\n translate: function(percent) {\n return [\n {opacity: 1 - percent, transform: scale3d(1 + .5 * percent), zIndex: 0},\n {zIndex: -1}\n ];\n }\n\n },\n\n pull: {\n\n show: function(dir) {\n return dir < 0\n ? [\n {transform: translate(30), zIndex: -1},\n {transform: translate(), zIndex: 0}\n ]\n : [\n {transform: translate(-100), zIndex: 0},\n {transform: translate(), zIndex: -1}\n ];\n },\n\n percent: function(current, next, dir) {\n return dir < 0\n ? 1 - translated(next)\n : translated(current);\n },\n\n translate: function(percent, dir) {\n return dir < 0\n ? [\n {transform: translate(30 * percent), zIndex: -1},\n {transform: translate(-100 * (1 - percent)), zIndex: 0}\n ]\n : [\n {transform: translate(-percent * 100), zIndex: 0},\n {transform: translate(30 * (1 - percent)), zIndex: -1}\n ];\n }\n\n },\n\n push: {\n\n show: function(dir) {\n return dir < 0\n ? [\n {transform: translate(100), zIndex: 0},\n {transform: translate(), zIndex: -1}\n ]\n : [\n {transform: translate(-30), zIndex: -1},\n {transform: translate(), zIndex: 0}\n ];\n },\n\n percent: function(current, next, dir) {\n return dir > 0\n ? 1 - translated(next)\n : translated(current);\n },\n\n translate: function(percent, dir) {\n return dir < 0\n ? [\n {transform: translate(percent * 100), zIndex: 0},\n {transform: translate(-30 * (1 - percent)), zIndex: -1}\n ]\n : [\n {transform: translate(-30 * percent), zIndex: -1},\n {transform: translate(100 * (1 - percent)), zIndex: 0}\n ];\n }\n\n }\n\n });\n\n var Slideshow$1 = {\n\n mixins: [Class, Slideshow, SliderReactive],\n\n props: {\n ratio: String,\n minHeight: Number,\n maxHeight: Number\n },\n\n data: {\n ratio: '16:9',\n minHeight: false,\n maxHeight: false,\n selList: '.uk-slideshow-items',\n attrItem: 'uk-slideshow-item',\n selNav: '.uk-slideshow-nav',\n Animations: Animations$2\n },\n\n update: {\n\n read: function() {\n\n var ref = this.ratio.split(':').map(Number);\n var width = ref[0];\n var height = ref[1];\n\n height = height * this.list.offsetWidth / width || 0;\n\n if (this.minHeight) {\n height = Math.max(this.minHeight, height);\n }\n\n if (this.maxHeight) {\n height = Math.min(this.maxHeight, height);\n }\n\n return {height: height - boxModelAdjust(this.list, 'content-box')};\n },\n\n write: function(ref) {\n var height = ref.height;\n\n css(this.list, 'minHeight', height);\n },\n\n events: ['resize']\n\n }\n\n };\n\n var Sortable = {\n\n mixins: [Class, Animate],\n\n props: {\n group: String,\n threshold: Number,\n clsItem: String,\n clsPlaceholder: String,\n clsDrag: String,\n clsDragState: String,\n clsBase: String,\n clsNoDrag: String,\n clsEmpty: String,\n clsCustom: String,\n handle: String\n },\n\n data: {\n group: false,\n threshold: 5,\n clsItem: 'uk-sortable-item',\n clsPlaceholder: 'uk-sortable-placeholder',\n clsDrag: 'uk-sortable-drag',\n clsDragState: 'uk-drag',\n clsBase: 'uk-sortable',\n clsNoDrag: 'uk-sortable-nodrag',\n clsEmpty: 'uk-sortable-empty',\n clsCustom: '',\n handle: false\n },\n\n created: function() {\n var this$1 = this;\n\n ['init', 'start', 'move', 'end'].forEach(function (key) {\n var fn = this$1[key];\n this$1[key] = function (e) {\n this$1.scrollY = window.pageYOffset;\n var ref = getEventPos(e, 'page');\n var x = ref.x;\n var y = ref.y;\n this$1.pos = {x: x, y: y};\n\n fn(e);\n };\n });\n },\n\n events: {\n\n name: pointerDown,\n passive: false,\n handler: 'init'\n\n },\n\n update: {\n\n write: function() {\n\n if (this.clsEmpty) {\n toggleClass(this.$el, this.clsEmpty, isEmpty(this.$el.children));\n }\n\n css(this.handle ? $$(this.handle, this.$el) : this.$el.children, {touchAction: 'none', userSelect: 'none'});\n\n if (!this.drag) {\n return;\n }\n\n offset(this.drag, {top: this.pos.y + this.origin.top, left: this.pos.x + this.origin.left});\n\n var ref = offset(this.drag);\n var top = ref.top;\n var offsetHeight = ref.height;\n var bottom = top + offsetHeight;\n var scroll;\n\n if (top > 0 && top < this.scrollY) {\n scroll = this.scrollY - 5;\n } else if (bottom < height(document) && bottom > height(window) + this.scrollY) {\n scroll = this.scrollY + 5;\n }\n\n scroll && setTimeout(function () { return scrollTop(window, scroll); }, 5);\n }\n\n },\n\n methods: {\n\n init: function(e) {\n\n var target = e.target;\n var button = e.button;\n var defaultPrevented = e.defaultPrevented;\n var ref = toNodes(this.$el.children).filter(function (el) { return within(target, el); });\n var placeholder = ref[0];\n\n if (!placeholder\n || defaultPrevented\n || button > 0\n || isInput(target)\n || within(target, (\".\" + (this.clsNoDrag)))\n || this.handle && !within(target, this.handle)\n ) {\n return;\n }\n\n e.preventDefault();\n\n this.touched = [this];\n this.placeholder = placeholder;\n this.origin = assign({target: target, index: index(placeholder)}, this.pos);\n\n on(document, pointerMove, this.move);\n on(document, pointerUp, this.end);\n on(window, 'scroll', this.scroll);\n\n if (!this.threshold) {\n this.start(e);\n }\n\n },\n\n start: function(e) {\n\n this.drag = append(this.$container, this.placeholder.outerHTML.replace(/^<li/i, '<div').replace(/li>$/i, 'div>'));\n\n css(this.drag, assign({\n boxSizing: 'border-box',\n width: this.placeholder.offsetWidth,\n height: this.placeholder.offsetHeight\n }, css(this.placeholder, ['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'])));\n attr(this.drag, 'uk-no-boot', '');\n addClass(this.drag, this.clsDrag, this.clsCustom);\n\n height(this.drag.firstElementChild, height(this.placeholder.firstElementChild));\n\n var ref = offset(this.placeholder);\n var left = ref.left;\n var top = ref.top;\n assign(this.origin, {left: left - this.pos.x, top: top - this.pos.y});\n\n addClass(this.placeholder, this.clsPlaceholder);\n addClass(this.$el.children, this.clsItem);\n addClass(document.documentElement, this.clsDragState);\n\n trigger(this.$el, 'start', [this, this.placeholder]);\n\n this.move(e);\n },\n\n move: function(e) {\n\n if (!this.drag) {\n\n if (Math.abs(this.pos.x - this.origin.x) > this.threshold || Math.abs(this.pos.y - this.origin.y) > this.threshold) {\n this.start(e);\n }\n\n return;\n }\n\n this.$emit();\n\n var target = e.type === 'mousemove' ? e.target : document.elementFromPoint(this.pos.x - window.pageXOffset, this.pos.y - window.pageYOffset);\n\n var sortable = this.getSortable(target);\n var previous = this.getSortable(this.placeholder);\n var move = sortable !== previous;\n\n if (!sortable || within(target, this.placeholder) || move && (!sortable.group || sortable.group !== previous.group)) {\n return;\n }\n\n target = sortable.$el === target.parentNode && target || toNodes(sortable.$el.children).filter(function (element) { return within(target, element); })[0];\n\n if (move) {\n previous.remove(this.placeholder);\n } else if (!target) {\n return;\n }\n\n sortable.insert(this.placeholder, target);\n\n if (!includes(this.touched, sortable)) {\n this.touched.push(sortable);\n }\n\n },\n\n end: function(e) {\n\n off(document, pointerMove, this.move);\n off(document, pointerUp, this.end);\n off(window, 'scroll', this.scroll);\n\n if (!this.drag) {\n if (e.type === 'touchend') {\n e.target.click();\n }\n\n return;\n }\n\n var sortable = this.getSortable(this.placeholder);\n\n if (this === sortable) {\n if (this.origin.index !== index(this.placeholder)) {\n trigger(this.$el, 'moved', [this, this.placeholder]);\n }\n } else {\n trigger(sortable.$el, 'added', [sortable, this.placeholder]);\n trigger(this.$el, 'removed', [this, this.placeholder]);\n }\n\n trigger(this.$el, 'stop', [this, this.placeholder]);\n\n remove(this.drag);\n this.drag = null;\n\n var classes = this.touched.map(function (sortable) { return ((sortable.clsPlaceholder) + \" \" + (sortable.clsItem)); }).join(' ');\n this.touched.forEach(function (sortable) { return removeClass(sortable.$el.children, classes); });\n\n removeClass(document.documentElement, this.clsDragState);\n\n },\n\n scroll: function() {\n var scroll = window.pageYOffset;\n if (scroll !== this.scrollY) {\n this.pos.y += scroll - this.scrollY;\n this.scrollY = scroll;\n this.$emit();\n }\n },\n\n insert: function(element, target) {\n var this$1 = this;\n\n\n addClass(this.$el.children, this.clsItem);\n\n var insert = function () {\n\n if (target) {\n\n if (!within(element, this$1.$el) || isPredecessor(element, target)) {\n before(target, element);\n } else {\n after(target, element);\n }\n\n } else {\n append(this$1.$el, element);\n }\n\n };\n\n if (this.animation) {\n this.animate(insert);\n } else {\n insert();\n }\n\n },\n\n remove: function(element) {\n\n if (!within(element, this.$el)) {\n return;\n }\n\n css(this.handle ? $$(this.handle, element) : element, {touchAction: '', userSelect: ''});\n\n if (this.animation) {\n this.animate(function () { return remove(element); });\n } else {\n remove(element);\n }\n\n },\n\n getSortable: function(element) {\n return element && (this.$getComponent(element, 'sortable') || this.getSortable(element.parentNode));\n }\n\n }\n\n };\n\n function isPredecessor(element, target) {\n return element.parentNode === target.parentNode && index(element) > index(target);\n }\n\n var obj$1;\n\n var actives = [];\n\n var Tooltip = {\n\n mixins: [Container, Togglable, Position],\n\n args: 'title',\n\n props: {\n delay: Number,\n title: String\n },\n\n data: {\n pos: 'top',\n title: '',\n delay: 0,\n animation: ['uk-animation-scale-up'],\n duration: 100,\n cls: 'uk-active',\n clsPos: 'uk-tooltip'\n },\n\n beforeConnect: function() {\n this._hasTitle = hasAttr(this.$el, 'title');\n attr(this.$el, {title: '', 'aria-expanded': false});\n },\n\n disconnected: function() {\n this.hide();\n attr(this.$el, {title: this._hasTitle ? this.title : null, 'aria-expanded': null});\n },\n\n methods: {\n\n show: function() {\n var this$1 = this;\n\n\n if (this.isActive()) {\n return;\n }\n\n actives.forEach(function (active) { return active.hide(); });\n actives.push(this);\n\n this._unbind = on(document, pointerUp, function (e) { return !within(e.target, this$1.$el) && this$1.hide(); });\n\n clearTimeout(this.showTimer);\n this.showTimer = setTimeout(function () {\n this$1._show();\n this$1.hideTimer = setInterval(function () {\n\n if (!isVisible(this$1.$el)) {\n this$1.hide();\n }\n\n }, 150);\n }, this.delay);\n },\n\n hide: function() {\n\n if (!this.isActive() || matches(this.$el, 'input') && this.$el === document.activeElement) {\n return;\n }\n\n actives.splice(actives.indexOf(this), 1);\n\n clearTimeout(this.showTimer);\n clearInterval(this.hideTimer);\n attr(this.$el, 'aria-expanded', false);\n this.toggleElement(this.tooltip, false);\n this.tooltip && remove(this.tooltip);\n this.tooltip = false;\n this._unbind();\n\n },\n\n _show: function() {\n\n this.tooltip = append(this.container,\n (\"<div class=\\\"\" + (this.clsPos) + \"\\\" aria-expanded=\\\"true\\\" aria-hidden> <div class=\\\"\" + (this.clsPos) + \"-inner\\\">\" + (this.title) + \"</div> </div>\")\n );\n\n this.positionAt(this.tooltip, this.$el);\n\n this.origin = this.getAxis() === 'y'\n ? ((flipPosition(this.dir)) + \"-\" + (this.align))\n : ((this.align) + \"-\" + (flipPosition(this.dir)));\n\n this.toggleElement(this.tooltip, true);\n\n },\n\n isActive: function() {\n return includes(actives, this);\n }\n\n },\n\n events: ( obj$1 = {\n\n focus: 'show',\n blur: 'hide'\n\n }, obj$1[(pointerEnter + \" \" + pointerLeave)] = function (e) {\n if (isTouch(e)) {\n return;\n }\n e.type === pointerEnter\n ? this.show()\n : this.hide();\n }, obj$1[pointerDown] = function (e) {\n if (!isTouch(e)) {\n return;\n }\n this.isActive()\n ? this.hide()\n : this.show();\n }, obj$1 )\n\n };\n\n var Upload = {\n\n props: {\n allow: String,\n clsDragover: String,\n concurrent: Number,\n maxSize: Number,\n method: String,\n mime: String,\n msgInvalidMime: String,\n msgInvalidName: String,\n msgInvalidSize: String,\n multiple: Boolean,\n name: String,\n params: Object,\n type: String,\n url: String\n },\n\n data: {\n allow: false,\n clsDragover: 'uk-dragover',\n concurrent: 1,\n maxSize: 0,\n method: 'POST',\n mime: false,\n msgInvalidMime: 'Invalid File Type: %s',\n msgInvalidName: 'Invalid File Name: %s',\n msgInvalidSize: 'Invalid File Size: %s Kilobytes Max',\n multiple: false,\n name: 'files[]',\n params: {},\n type: '',\n url: '',\n abort: noop,\n beforeAll: noop,\n beforeSend: noop,\n complete: noop,\n completeAll: noop,\n error: noop,\n fail: noop,\n load: noop,\n loadEnd: noop,\n loadStart: noop,\n progress: noop\n },\n\n events: {\n\n change: function(e) {\n\n if (!matches(e.target, 'input[type=\"file\"]')) {\n return;\n }\n\n e.preventDefault();\n\n if (e.target.files) {\n this.upload(e.target.files);\n }\n\n e.target.value = '';\n },\n\n drop: function(e) {\n stop(e);\n\n var transfer = e.dataTransfer;\n\n if (!transfer || !transfer.files) {\n return;\n }\n\n removeClass(this.$el, this.clsDragover);\n\n this.upload(transfer.files);\n },\n\n dragenter: function(e) {\n stop(e);\n },\n\n dragover: function(e) {\n stop(e);\n addClass(this.$el, this.clsDragover);\n },\n\n dragleave: function(e) {\n stop(e);\n removeClass(this.$el, this.clsDragover);\n }\n\n },\n\n methods: {\n\n upload: function(files) {\n var this$1 = this;\n\n\n if (!files.length) {\n return;\n }\n\n trigger(this.$el, 'upload', [files]);\n\n for (var i = 0; i < files.length; i++) {\n\n if (this.maxSize && this.maxSize * 1000 < files[i].size) {\n this.fail(this.msgInvalidSize.replace('%s', this.maxSize));\n return;\n }\n\n if (this.allow && !match$1(this.allow, files[i].name)) {\n this.fail(this.msgInvalidName.replace('%s', this.allow));\n return;\n }\n\n if (this.mime && !match$1(this.mime, files[i].type)) {\n this.fail(this.msgInvalidMime.replace('%s', this.mime));\n return;\n }\n\n }\n\n if (!this.multiple) {\n files = [files[0]];\n }\n\n this.beforeAll(this, files);\n\n var chunks = chunk(files, this.concurrent);\n var upload = function (files) {\n\n var data = new FormData();\n\n files.forEach(function (file) { return data.append(this$1.name, file); });\n\n for (var key in this$1.params) {\n data.append(key, this$1.params[key]);\n }\n\n ajax(this$1.url, {\n data: data,\n method: this$1.method,\n responseType: this$1.type,\n beforeSend: function (env) {\n\n var xhr = env.xhr;\n xhr.upload && on(xhr.upload, 'progress', this$1.progress);\n ['loadStart', 'load', 'loadEnd', 'abort'].forEach(function (type) { return on(xhr, type.toLowerCase(), this$1[type]); }\n );\n\n this$1.beforeSend(env);\n\n }\n }).then(\n function (xhr) {\n\n this$1.complete(xhr);\n\n if (chunks.length) {\n upload(chunks.shift());\n } else {\n this$1.completeAll(xhr);\n }\n\n },\n function (e) { return this$1.error(e); }\n );\n\n };\n\n upload(chunks.shift());\n\n }\n\n }\n\n };\n\n function match$1(pattern, path) {\n return path.match(new RegExp((\"^\" + (pattern.replace(/\\//g, '\\\\/').replace(/\\*\\*/g, '(\\\\/[^\\\\/]+)*').replace(/\\*/g, '[^\\\\/]+').replace(/((?!\\\\))\\?/g, '$1.')) + \"$\"), 'i'));\n }\n\n function chunk(files, size) {\n var chunks = [];\n for (var i = 0; i < files.length; i += size) {\n var chunk = [];\n for (var j = 0; j < size; j++) {\n chunk.push(files[i + j]);\n }\n chunks.push(chunk);\n }\n return chunks;\n }\n\n function stop(e) {\n e.preventDefault();\n e.stopPropagation();\n }\n\n UIkit.component('countdown', Countdown);\n UIkit.component('filter', Filter);\n UIkit.component('lightbox', Lightbox);\n UIkit.component('lightboxPanel', lightboxPanel);\n UIkit.component('notification', Notification);\n UIkit.component('parallax', Parallax$1);\n UIkit.component('slider', Slider$1);\n UIkit.component('sliderParallax', SliderParallax);\n UIkit.component('slideshow', Slideshow$1);\n UIkit.component('slideshowParallax', SliderParallax);\n UIkit.component('sortable', Sortable);\n UIkit.component('tooltip', Tooltip);\n UIkit.component('upload', Upload);\n\n {\n boot(UIkit);\n }\n\n return UIkit;\n\n}));\n","<script>\r\nimport UIkit from \"uikit\";\r\n\r\nexport let isOpen = false;\r\nexport let onClosed = () => {};\r\n\r\nlet ukModal;\r\nlet listenerAdded = false;\r\n\r\n$: if(ukModal && !listenerAdded) {\r\n listenerAdded = true;\r\n ukModal.addEventListener(\"hide\", onClosed);\r\n}\r\n\r\n$: {\r\n if(ukModal) {\r\n if(isOpen) {\r\n UIkit.modal(ukModal).show();\r\n } else {\r\n UIkit.modal(ukModal).hide();\r\n }\r\n }\r\n}\r\n\r\n</script>\r\n\r\n<div bind:this={ukModal} uk-modal >\r\n <div class=\"uk-modal-dialog uk-modal-body\" uk-overflow-auto>\r\n <slot />\r\n </div>\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n</style>","<script>\r\n\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport getIcon from \"../common/icon\";\r\nimport FieldView from \"./FieldView.svelte\";\r\nimport Modal from \"../common/Modal.svelte\";\r\nimport {map, join, filter, some, \r\n find, keys, isDate} from \"lodash/fp\";\r\nimport { database } from \"../builderStore\";\r\nimport {common, hierarchy as h} from \"budibase-core\";\r\nimport {templateApi, chain, validate} from \"../common/core\";\r\n\r\nlet record;\r\nlet getIndexAllowedRecords;\r\nlet editingField = false;\r\nlet fieldToEdit;\r\nlet isNewField = false;\r\nlet newField;\r\nlet editField;\r\nlet deleteField;\r\nlet onFinishedFieldEdit;\r\nlet editIndex;\r\n\r\ndatabase.subscribe($database => {\r\n record = $database.currentNode;\r\n const flattened = h.getFlattenedHierarchy($database.hierarchy);\r\n getIndexAllowedRecords = index => \r\n chain(index.allowedRecordNodeIds, [\r\n filter(id => some(n => n.nodeId === id)(flattened)),\r\n map(id => find(n => n.nodeId === id)\r\n (flattened).name),\r\n join(\", \")\r\n ]);\r\n\r\n newField = () => {\r\n isNewField = true;\r\n fieldToEdit = templateApi($database.hierarchy).getNewField(\"string\");\r\n editingField = true;\r\n }\r\n\r\n onFinishedFieldEdit = (field) => {\r\n if(field) {\r\n database.saveField(field);\r\n }\r\n editingField = false;\r\n }\r\n\r\n editField = (field) => {\r\n isNewField = false;\r\n fieldToEdit = field;\r\n editingField = true;\r\n }\r\n\r\n deleteField = (field) => {\r\n database.deleteField(field);\r\n }\r\n\r\n editIndex = index => {\r\n database.selectExistingNode(index.nodeId);\r\n }\r\n\r\n})\r\n\r\nlet getTypeOptionsValueText = value => {\r\n if(value === Number.MAX_SAFE_INTEGER\r\n || value === Number.MIN_SAFE_INTEGER\r\n || new Date(value).getTime() === new Date(8640000000000000).getTime()\r\n || new Date(value).getTime() === new Date(-8640000000000000).getTime()) return \"(any)\";\r\n \r\n if(value === null) return \"(not set)\";\r\n return value;\r\n}\r\n\r\nlet getTypeOptions = typeOptions => \r\n chain(typeOptions, [\r\n keys,\r\n map(k => `<span style=\"color:var(--slate)\">${k}: </span>${getTypeOptionsValueText(typeOptions[k])}`),\r\n join(\"<br>\")\r\n ]);\r\n\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n <Textbox label=\"Name\" bind:text={record.name} />\r\n <div>{record.nodeKey()}</div>\r\n {#if !record.isSingle}\r\n <Textbox label=\"Collection Name\" bind:text={record.collectionName} />\r\n <Textbox label=\"Shard Factor\" bind:text={record.allidsShardFactor} />\r\n {/if}\r\n\r\n <h4>\r\n Fields <span class=\"add-field-button\" on:click={newField}>{@html getIcon(\"plus\")}</span>\r\n </h4>\r\n\r\n {#if record.fields.length > 0}\r\n <table class=\"fields-table uk-table\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Type</th>\r\n <th>Options</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {#each record.fields as field}\r\n <tr>\r\n <td >\r\n <div>{field.label}</div>\r\n <div style=\"font-size: 0.7em; color: var(--slate)\">{field.name}</div>\r\n </td>\r\n <td >{field.type}</td>\r\n <td >{@html getTypeOptions(field.typeOptions)}</td>\r\n <td>\r\n <span class=\"edit-button\" on:click={() => editField(field)}>{@html getIcon(\"edit\")}</span>\r\n <span class=\"edit-button\" on:click={() => deleteField(field)}>{@html getIcon(\"trash\")}</span>\r\n </td>\r\n </tr>\r\n {/each}\r\n </tbody>\r\n </table>\r\n {:else}\r\n (no fields added)\r\n {/if}\r\n\r\n {#if editingField}\r\n <Modal bind:isOpen={editingField}>\r\n <FieldView field={fieldToEdit} \r\n onFinished={onFinishedFieldEdit}\r\n allFields={record.fields} \r\n database={$database}/>\r\n </Modal>\r\n {/if}\r\n\r\n <h4>\r\n Indexes \r\n </h4>\r\n\r\n {#each record.indexes as index}\r\n <div class=\"index-container\">\r\n <div class=\"index-name\">\r\n {index.name}\r\n <span style=\"margin-left: 7px\" on:click={() => editIndex(index)}>{@html getIcon(\"edit\")}</span>\r\n </div>\r\n <div class=\"index-field-row\">\r\n <span class=\"index-label\">records indexed: </span> \r\n <span>{getIndexAllowedRecords(index)}</span>\r\n <span class=\"index-label\" style=\"margin-left: 15px\">type:</span> \r\n <span>{index.indexType}</span>\r\n </div>\r\n <div class=\"index-field-row\">\r\n <span class=\"index-label\">map:</span>\r\n <code class=\"index-mapfilter\">{index.map}</code>\r\n </div>\r\n {#if index.filter}\r\n <div class=\"index-field-row\">\r\n <span class=\"index-label\">filter:</span>\r\n <code class=\"index-mapfilter\">{index.filter}</code>\r\n </div>\r\n {/if}\r\n </div>\r\n {:else}\r\n (no indexes added)\r\n {/each}\r\n\r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.root {\r\n height: 100%;\r\n padding: 15px;\r\n}\r\n\r\n.fields-table {\r\n margin:10px;\r\n border-collapse:collapse;\r\n}\r\n\r\n.add-field-button {\r\n margin-left:15px;\r\n cursor:pointer;\r\n}\r\n\r\n.edit-button {\r\n cursor:pointer;\r\n color: var(--white);\r\n}\r\n\r\n.edit-button:hover {\r\n color: var(--secondary75);\r\n}\r\n\r\nth {\r\n text-align: left;\r\n}\r\n\r\ntd {\r\n padding: 5px 30px 5px 0px;\r\n margin:0;\r\n \r\n}\r\n\r\nthead > tr {\r\n border-width: 0px 0px 1px 0px;\r\n border-style: solid;\r\n border-color: var(--secondary75);\r\n margin-bottom: 20px;\r\n}\r\n\r\ntbody > tr {\r\n border-width: 0px 0px 1px 0px;\r\n border-style: solid;\r\n border-color: var(--primary10);\r\n}\r\n\r\ntbody > tr:hover {\r\n background-color: var(--primary10);\r\n}\r\n\r\ntbody > tr:hover .edit-button {\r\n color: var(--secondary75);\r\n}\r\n\r\n.index-container {\r\n border-style: solid;\r\n border-width: 0 0 1px 0;\r\n border-color: var(--secondary25);\r\n padding: 10px;\r\n margin-bottom: 5px;\r\n}\r\n\r\n.index-label {\r\n color: var(--slate);\r\n}\r\n\r\n.index-name {\r\n font-weight: bold;\r\n color: var(--primary100);\r\n}\r\n\r\n.index-container code {\r\n margin: 0;\r\n display: inline;\r\n background-color: var(--primary10);\r\n color: var(--secondary100);\r\n padding:3px;\r\n}\r\n\r\n.index-field-row {\r\n margin-top: 7px;\r\n}\r\n\r\n</style>","<script>\r\n// todo: use https://ace.c9.io\r\nexport let text = \"\";\r\nexport let label = \"\";\r\n</script>\r\n\r\n<div>{label}</div>\r\n<textarea bind:value={text}></textarea>\r\n\r\n<style>\r\n\r\ntextarea {\r\n padding:3px;\r\n background: var(--darkslate);\r\n color: var(--white);\r\n font-family: 'Courier New', Courier, monospace;\r\n width:95%;\r\n height:100px;\r\n}\r\n\r\n</style>","<script>\r\n\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport CodeArea from \"../common/CodeArea.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport Dropdown from \"../common/Dropdown.svelte\";\r\nimport {database} from \"../builderStore\";\r\nimport {filter, some, map} from \"lodash/fp\";\r\nimport {hierarchy as hierarchyFunctions, common} from \"budibase-core\";\r\n\r\nconst chain = common.$;\r\n\r\nlet index;\r\nlet indexableRecords = [];\r\n\r\ndatabase.subscribe($database => {\r\n index = $database.currentNode;\r\n indexableRecords = chain($database.hierarchy,[\r\n hierarchyFunctions.getFlattenedHierarchy,\r\n filter(hierarchyFunctions.isDecendant(index.parent())),\r\n filter(hierarchyFunctions.isRecord),\r\n map(n => ({\r\n node:n,\r\n isallowed: some(id => n.nodeId === id)(index.allowedRecordNodeIds)\r\n }))\r\n ]);\r\n});\r\n\r\nconst toggleAllowedRecord = record => {\r\n if(record.isallowed) {\r\n index.allowedRecordNodeIds = filter(id => id !== record.node.nodeId)\r\n (index.allowedRecordNodeIds);\r\n } else {\r\n index.allowedRecordNodeIds.push(record.node.nodeId);\r\n }\r\n};\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <Textbox bind:text={index.name} label=\"Name\"/>\r\n \r\n <div class=\"allowed-records\">\r\n <div>Records to Index</div>\r\n {#each indexableRecords as rec}\r\n <input type=\"checkbox\" checked={rec.isallowed} on:change={() => toggleAllowedRecord(rec)}/>\r\n <span>{rec.node.name}</span>\r\n {/each}\r\n </div>\r\n\r\n\r\n <Dropdown label=\"Index Type\" bind:selected={index.indexType} options={[\"ancestor\", \"reference\"]} />\r\n\r\n <CodeArea bind:text={index.map} label=\"Map (javascript)\"/>\r\n <CodeArea bind:text={index.filter} label=\"Filter (javascript expression)\"/>\r\n <CodeArea bind:text={index.getShardName} label=\"Shard Name (javascript expression)\"/>\r\n\r\n \r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n height: 100%;\r\n padding: 15px;\r\n}\r\n\r\n.allowed-records {\r\n margin: 20px 0px;\r\n}\r\n\r\n.allowed-records > span {\r\n margin-right:30px;\r\n}\r\n\r\n</style>","<script>\r\nimport Button from \"../common/Button.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport {database} from \"../builderStore\";\r\nimport Modal from \"../common/Modal.svelte\";\r\nimport ErrorsBox from \"../common/ErrorsBox.svelte\";\r\n\r\nexport let left;\r\nlet confirmDelete = false;\r\nconst openConfirmDelete = () => {\r\n confirmDelete = true;\r\n}\r\n\r\nconst deleteCurrentNode = () => {\r\n confirmDelete = false;\r\n database.deleteCurrentNode();\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\" style=\"left: {left}\">\r\n\r\n <ButtonGroup>\r\n <Button color=\"secondary\" grouped on:click={database.saveCurrentNode}>\r\n {#if $database.currentNodeIsNew}\r\n Create\r\n {:else}\r\n Update\r\n {/if}\r\n </Button>\r\n\r\n {#if !$database.currentNodeIsNew}\r\n <Button color=\"secondary\" grouped on:click={openConfirmDelete}>\r\n Delete\r\n </Button>\r\n {/if}\r\n </ButtonGroup>\r\n\r\n {#if !!$database.errors && $database.errors.length > 0}\r\n <div style=\"width: 500px\">\r\n <ErrorsBox errors={$database.errors}/>\r\n </div>\r\n {/if}\r\n \r\n <Modal bind:isOpen={confirmDelete}>\r\n <div style=\"margin: 10px 0px 20px 0px\">Are you sure you want to delete {$database.currentNode.name} ?</div>\r\n <div style=\"float:right\">\r\n <Button color=\"primary\" on:click={deleteCurrentNode}>Yes</Button>\r\n <Button color=\"secondary\" on:click={() => confirmDelete = false}>No</Button>\r\n </div>\r\n </Modal>\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n padding:5px;\r\n top:0;\r\n width:100%;\r\n}\r\n\r\n</style>","<script>\r\n\r\nimport getIcon from \"./icon\";\r\nexport let iconName;\r\nexport let actions = []; // [ {label: \"Action Name\", onclick: () => {...} } ]\r\nlet isDroppedDown = false;\r\n\r\n</script>\r\n\r\n\r\n<div class=\"root\" on:click={() => isDroppedDown = !isDroppedDown}>\r\n {@html getIcon(iconName)}\r\n \r\n <div class=\"dropdown-background\" on:click|stopPropagation={() => isDroppedDown = false} style=\"display: {isDroppedDown ? 'block' : 'none'}\"></div>\r\n\r\n <div class=\"dropdown-content\" style=\"display: {isDroppedDown ? 'inline-block' : 'none'}\">\r\n {#each actions as action}\r\n <div class=\"action-row\" on:click={action.onclick}>\r\n {action.label}\r\n </div>\r\n {/each}\r\n </div>\r\n \r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.dropdown-background {\r\n position: fixed;\r\n top:0;\r\n left:0;\r\n width:100vw;\r\n height:100vh;\r\n}\r\n\r\n.root {\r\n cursor: pointer;\r\n z-index: 1;\r\n}\r\n\r\n.dropdown-content {\r\n position: absolute;\r\n background-color: var(--white);\r\n min-width: 160px;\r\n box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);\r\n z-index: 1;\r\n font-weight: normal;\r\n border-style:solid;\r\n border-width: 1px;\r\n border-color: var(--secondary10);\r\n}\r\n\r\n.dropdown-content:not(:focus) {\r\n display: none;\r\n}\r\n\r\n.action-row {\r\n padding: 7px 10px;\r\n cursor:pointer;\r\n}\r\n\r\n.action-row:hover {\r\n background-color: var(--primary100);\r\n color:var(--white);\r\n}\r\n\r\n</style>","<script>\r\n\r\nimport HierarchyRow from \"./HierarchyRow.svelte\";\r\nimport RecordView from \"./RecordView.svelte\";\r\nimport IndexView from \"./IndexView.svelte\";\r\nimport ActionsHeader from \"./ActionsHeader.svelte\";\r\nimport {database} from \"../builderStore\";\r\nimport getIcon from \"../common/icon\";\r\nimport DropdownButton from \"../common/DropdownButton.svelte\";\r\nimport {hierarchy as hierarchyFunctions} from \"budibase-core\";\r\n\r\nconst hierarchyWidth = \"200px\";\r\n\r\nconst defaultNewIndexActions = [{\r\n label:\"New Root Index\", \r\n onclick: database.newRootIndex\r\n}];\r\n\r\nconst defaultNewRecordActions = [{\r\n label:\"New Root Record\", \r\n onclick: database.newRootRecord\r\n}];\r\n\r\nlet newIndexActions = defaultNewIndexActions;\r\nlet newRecordActions = defaultNewRecordActions;\r\n\r\ndatabase.subscribe(db => {\r\n if(!db.currentNode || hierarchyFunctions.isIndex(db.currentNode)) {\r\n newRecordActions = defaultNewRecordActions;\r\n newIndexActions = defaultNewIndexActions;\r\n } else {\r\n newRecordActions = [\r\n ...defaultNewRecordActions,\r\n {label: `New Child Record of ${db.currentNode.name}`, \r\n onclick: database.newChildRecord}\r\n ];\r\n\r\n newIndexActions = [\r\n ...defaultNewIndexActions,\r\n {label: `New Index on ${db.currentNode.name}`, \r\n onclick: database.newChildIndex}\r\n ];\r\n }\r\n});\r\n\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <div class=\"hierarchy\" style=\"width: {hierarchyWidth}\">\r\n <div class=\"hierarchy-title-row\">\r\n <div class=\"hierarchy-title\">Records</div>\r\n <DropdownButton iconName=\"plus\" actions={newRecordActions} />\r\n </div>\r\n {#each $database.hierarchy.children as record}\r\n <HierarchyRow node={record} />\r\n {/each}\r\n\r\n <div class=\"hierarchy-title-row\" style=\"margin-top: 20px\">\r\n <div class=\"hierarchy-title\">Indexes</div>\r\n <DropdownButton iconName=\"plus\" actions={newIndexActions} />\r\n </div>\r\n {#each $database.hierarchy.indexes as index}\r\n <HierarchyRow node={index} />\r\n {/each}\r\n </div>\r\n <div class=\"node-container\">\r\n <div class=\"actions-header\">\r\n {#if $database.currentNode}\r\n <ActionsHeader left={hierarchyWidth}/>\r\n {/if}\r\n </div>\r\n <div class=\"node-view\">\r\n {#if !$database.currentNode}\r\n <h1 style=\"margin-left: 100px\">:)</h1>\r\n {:else if $database.currentNode.type === \"record\"}\r\n <RecordView />\r\n {:else}\r\n <IndexView />\r\n {/if}\r\n </div>\r\n </div>\r\n</div>\r\n\r\n\r\n<style>\r\n.root {\r\n display: flex;\r\n height: 100%;\r\n position: relative;\r\n}\r\n\r\n.hierarchy {\r\n flex: 0 1 auto;\r\n background-color: var(--primary10);\r\n overflow-y: auto;\r\n height: 100%;\r\n}\r\n\r\n.node-container {\r\n flex: 1 1 auto;\r\n display: flex;\r\n flex-direction: column;\r\n}\r\n\r\n.actions-header {\r\n flex: 0 1 auto;\r\n}\r\n\r\n.node-view {\r\n overflow-y: auto;\r\n flex: 1 1 auto;\r\n}\r\n\r\n.hierarchy-title-row {\r\n padding: 15px 7px;\r\n /*background-color: var(--secondary75);\r\n color: var(--white);*/\r\n font-size: 11pt;\r\n display: flex;\r\n font-weight: bold;\r\n}\r\n\r\n.hierarchy-title {\r\n flex: auto 1 1;\r\n}\r\n\r\n\r\n</style>","<script>\r\n\r\nexport let name = \"\";\r\n\r\n</script>\r\n\r\n<div>\r\n <h4>Coming Sometime: {name}</h4>\r\n</div>\r\n\r\n<style>\r\n\r\nh4 {\r\n margin-top: 20px;\r\n}\r\n\r\n</style>","<script>\r\n\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport {cloneDeep, filter, keys,\r\nmap, isUndefined} from \"lodash/fp\";\r\nimport ErrorsBox from \"../common/ErrorsBox.svelte\";\r\nimport {validateActions, chain} from \"../common/core\";\r\nimport getIcon from \"../common/icon\";\r\n\r\nexport let action;\r\nexport let onFinished = (action) => {};\r\nexport let allActions;\r\nexport let isNew = true;\r\n\r\nlet optKey = \"\";\r\nlet optValue = \"\";\r\n\r\nlet clonedAction = cloneDeep(action); \r\nlet initialOptions = chain(action.initialOptions, [\r\n keys,\r\n map(k => ({key:k, value:action.initialOptions[k]}))\r\n]);\r\nlet errors = [];\r\n\r\nconst addNewOption = () => {\r\n\r\n if(optKey && optValue && isUndefined(clonedAction.initialOptions[optKey])) {\r\n clonedAction.initialOptions[optKey] = optValue;\r\n initialOptions = [...initialOptions, {\r\n key:optKey, value: optValue\r\n }];\r\n optKey = \"\";\r\n optValue = \"\";\r\n }\r\n}\r\n\r\nconst removeOption = (opt) => {\r\n if(opt) {\r\n delete clonedAction.initialOptions[opt.key]\r\n initialOptions = chain(initialOptions, [\r\n filter(o => o.key !== opt.key)\r\n ]);\r\n }\r\n}\r\n\r\nconst save = () => {\r\n\r\n const newActionsList = [\r\n ...chain(allActions ,[filter(a => a !== action)]),\r\n clonedAction]\r\n\r\n errors = chain(newActionsList ,[\r\n validateActions,\r\n map(e => e.error)\r\n ]);\r\n\r\n if(errors.length === 0)\r\n onFinished(clonedAction);\r\n}\r\n\r\nconst cancel = () => {\r\n onFinished();\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n <ErrorsBox {errors} />\r\n\r\n <Textbox label=\"Name\" bind:text={clonedAction.name} />\r\n <Textbox label=\"Behaviour Source\" bind:text={clonedAction.behaviourSource} />\r\n <Textbox label=\"Behaviour\" bind:text={clonedAction.behaviourName} />\r\n\r\n\r\n <div class=\" uk-form-stacked\" style=\"margin-bottom: 20px\">\r\n <label class=\"uk-form-label\">Default Options</label>\r\n <div class=\"uk-grid-small\" uk-grid>\r\n <input class=\"uk-input uk-width-1-4\" placeholder=\"key\" bind:value={optKey} > \r\n <input class=\"uk-input uk-width-1-4\" placeholder=\"value\" bind:value={optValue} > \r\n <Button color=\"primary-outline uk-width-1-4\" on:click={addNewOption}>Add</Button>\r\n </div>\r\n <div style=\"margin-top: 10px\">\r\n {#each initialOptions as option}\r\n <span class=\"option-container\">{option.key} : {option.value} <span style=\"font-size:10pt; cursor: pointer\" on:click={() => removeOption(option)}>{@html getIcon(\"trash-2\")}</span></span>\r\n {/each}\r\n </div>\r\n </div>\r\n\r\n <ButtonGroup>\r\n <Button color=\"primary\" grouped on:click={save}>Save</Button>\r\n <Button color=\"secondary\" grouped on:click={cancel}>Cancel</Button>\r\n </ButtonGroup>\r\n\r\n \r\n</div>\r\n\r\n\r\n<style>\r\n\r\n.root {\r\n padding: 10px;\r\n}\r\n\r\n.option-container {\r\n border-style: dotted;\r\n border-width: 1px;\r\n border-color: var(--primary75);\r\n padding: 3px;\r\n margin-right: 5px;\r\n}\r\n\r\n</style>","<script>\r\n\r\nimport getIcon from \"../common/icon\";\r\nimport {database} from \"../builderStore\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport ActionView from \"./ActionView.svelte\";\r\nimport Modal from \"../common/Modal.svelte\";\r\nimport {chain} from \"../common/core\";\r\nimport {keys, map, join} from \"lodash/fp\";\r\n\r\nexport let editingActionIsNew = false;\r\nexport let editingAction = null;\r\nexport let onActionEdit = (action) => {};\r\nexport let onActionDelete = (action) => {};\r\nexport let onActionSave = (action) => {};\r\nexport let onActionCancel = () => {};\r\n\r\n$: isEditing = (editingAction !== null); \r\n\r\nlet getDefaultOptionsHtml = defaultOptions => \r\n chain(defaultOptions, [\r\n keys,\r\n map(k => `<span style=\"color:var(--slate)\">${k}: </span>${JSON.stringify(defaultOptions[k])}`),\r\n join(\"<br>\")\r\n ]);\r\n\r\n\r\nlet actionEditingFinished = (action) => {\r\n \r\n if(action) {\r\n onActionSave(action)\r\n } else {\r\n onActionCancel();\r\n }\r\n}\r\n\r\n</script>\r\n\r\n<h3>Actions</h3>\r\n\r\n{#if $database.actions}\r\n<table class=\"fields-table uk-table uk-table-small\">\r\n <thead>\r\n <tr>\r\n <th>Description</th>\r\n <th>Behaviour Source</th>\r\n <th>Behaviour Name</th>\r\n <th>Default Options</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {#each $database.actions as action}\r\n <tr>\r\n <td >{action.name}</td>\r\n <td >{action.behaviourSource}</td>\r\n <td >{action.behaviourName}</td>\r\n <td >{@html getDefaultOptionsHtml(action.initialOptions)}</td>\r\n <td class=\"edit-button\">\r\n <span on:click={() => onActionEdit(action)}>{@html getIcon(\"edit\")}</span>\r\n <span on:click={() => onActionDelete(action)}>{@html getIcon(\"trash\")}</span>\r\n </td>\r\n </tr>\r\n {/each}\r\n </tbody>\r\n</table>\r\n{:else}\r\n(no actions added)\r\n{/if}\r\n\r\n\r\n<Modal bind:isOpen={isEditing}>\r\n {#if isEditing}\r\n <ActionView action={editingAction}\r\n allActions={$database.actions}\r\n onFinished={actionEditingFinished}\r\n isNew={editingActionIsNew}/>\r\n {/if} \r\n</Modal>\r\n\r\n\r\n<style>\r\n\r\n.edit-button {\r\n cursor:pointer;\r\n color: var(--white);\r\n}\r\n\r\ntr:hover .edit-button {\r\n color: var(--secondary75);\r\n}\r\n\r\n\r\n</style>","<script>\r\n\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport Dropdown from \"../common/Dropdown.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport CodeArea from \"../common/CodeArea.svelte\";\r\nimport {cloneDeep, filter, keys, some,\r\nmap, isUndefined} from \"lodash/fp\";\r\nimport ErrorsBox from \"../common/ErrorsBox.svelte\";\r\nimport {validateTriggers, chain, events} from \"../common/core\";\r\nimport getIcon from \"../common/icon\";\r\n\r\nexport let trigger;\r\nexport let onFinished = (action) => {};\r\nexport let allTriggers;\r\nexport let allActions;\r\nexport let isNew = true;\r\n\r\nlet clonedTrigger = cloneDeep(trigger); \r\nlet errors = [];\r\n$: actionNames = map(a => a.name)(allActions);\r\n\r\nlet cancel = () => onFinished();\r\nlet save = () => {\r\n const newTriggersList = [\r\n ...chain(allTriggers ,[filter(t => t !== trigger)]),\r\n clonedTrigger]\r\n\r\n errors = validateTriggers(newTriggersList, allActions);\r\n\r\n const test = map(t =>(!t.actionName || some(a => a.name === t.actionName)(allActions)))(newTriggersList)\r\n\r\n if(errors.length === 0)\r\n onFinished(clonedTrigger);\r\n}\r\n\r\n</script>\r\n\r\n<div>\r\n\r\n <ErrorsBox {errors} style=\"margin-bottom:20px\"/>\r\n \r\n <Dropdown label=\"Event\" \r\n options={[\"\",...events]}\r\n bind:selected={clonedTrigger.eventName} />\r\n <Dropdown label=\"Action\" \r\n options={[\"\",...actionNames]}\r\n bind:selected={clonedTrigger.actionName} />\r\n <CodeArea label=\"Condition (javascript)\"\r\n bind:text={clonedTrigger.condition} />\r\n <CodeArea label=\"Action Options Creator (javascript)\"\r\n bind:text={clonedTrigger.optionsCreator} />\r\n\r\n <ButtonGroup>\r\n <Button grouped on:click={save}>Save</Button>\r\n <Button grouped on:click={cancel}>Cancel</Button>\r\n </ButtonGroup>\r\n\r\n</div>\r\n\r\n<style>\r\n\r\n</style>","<script>\r\n\r\nimport {database} from \"../builderStore\";\r\nimport getIcon from \"../common/icon\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport Modal from \"../common/Modal.svelte\";\r\nimport TriggerView from \"./TriggerView.svelte\";\r\n\r\n\r\nexport let editingTrigger = null;\r\nexport let editingTriggerIsNew = true;\r\nexport let onTriggerEdit = (trigger) => {};\r\nexport let onTriggerDelete = (trigger) => {};\r\nexport let onTriggerSave = (trigger) => {};\r\nexport let onTriggerCancel = () => {};\r\n\r\n$: isEditing = (editingTrigger !== null); \r\n\r\nlet triggerEditingFinished = (trigger) => {\r\n \r\n if(trigger) {\r\n onTriggerSave(trigger)\r\n } else {\r\n onTriggerCancel();\r\n }\r\n}\r\n\r\n</script>\r\n\r\n<h3>Triggers</h3>\r\n\r\n{#if $database.triggers}\r\n<table class=\"fields-table uk-table uk-table-small\">\r\n <thead>\r\n <tr>\r\n <th>Event</th>\r\n <th>Action</th>\r\n <th>Condition</th>\r\n <th>Create Options</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {#each $database.triggers as trigger}\r\n <tr>\r\n <td >{trigger.eventName}</td>\r\n <td >{trigger.actionName}</td>\r\n <td >{trigger.condition}</td>\r\n <td >{trigger.optionsCreator}</td>\r\n <td class=\"edit-button\">\r\n <span on:click={() => onTriggerEdit(trigger)}>{@html getIcon(\"edit\")}</span>\r\n <span on:click={() => onTriggerDelete(trigger)}>{@html getIcon(\"trash\")}</span>\r\n </td>\r\n </tr>\r\n {/each}\r\n </tbody>\r\n</table>\r\n{:else}\r\n(no triggers added)\r\n{/if}\r\n\r\n\r\n<Modal bind:isOpen={isEditing}>\r\n {#if isEditing}\r\n <TriggerView trigger={editingTrigger}\r\n allActions={$database.actions}\r\n allTriggers={$database.triggers}\r\n onFinished={triggerEditingFinished}\r\n isNew={editingTriggerIsNew}/>\r\n {/if} \r\n</Modal>\r\n\r\n<style>\r\n\r\n.edit-button {\r\n cursor:pointer;\r\n color: var(--white);\r\n}\r\n\r\ntr:hover .edit-button {\r\n color: var(--secondary75);\r\n}\r\n\r\n</style>","<script>\r\n\r\nimport getIcon from \"../common/icon\";\r\nimport {database} from \"../builderStore\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport Actions from \"./Actions.svelte\";\r\nimport Triggers from \"./Triggers.svelte\";\r\nimport {getNewAction, getNewTrigger} from \"../common/core\";\r\n\r\nlet editingAction = null;\r\nlet editingActionIsNew = true;\r\nlet editingTrigger = null;\r\nlet editingTriggerIsNew = true;\r\n\r\nlet getDefaultOptionsHtml = defaultOptions => \r\n chain(defaultOptions, [\r\n keys,\r\n map(k => `<span style=\"color:var(--slate)\">${k}: </span>${JSON.parse(typeOptions[k])}`),\r\n join(\"<br>\")\r\n ]);\r\n\r\nlet onActionEdit = (action) => {\r\n editingAction = action;\r\n editingActionIsNew = false;\r\n}\r\n\r\nlet newAction = () => {\r\n editingAction = getNewAction();\r\n editingActionIsNew = true;\r\n}\r\n\r\nlet onActionDelete = (action) => {\r\n database.deleteAction(action);\r\n}\r\n\r\nlet deleteTrigger = () => {}\r\n\r\nlet editTrigger = (trigger) => {\r\n editingTrigger = trigger;\r\n editingTriggerIsNew = false;\r\n}\r\n\r\nlet newTrigger = () => {\r\n editingTrigger = getNewTrigger();\r\n editingTriggerIsNew = true;\r\n}\r\n\r\nlet onActionSave = action => {\r\n database.saveAction(\r\n action, \r\n editingActionIsNew, \r\n editingAction);\r\n\r\n editingAction = null;\r\n}\r\n\r\nlet onActionCancel = () => {\r\n editingAction = null;\r\n}\r\n\r\nlet onTriggerSave = trigger => {\r\n database.saveTrigger(\r\n trigger, \r\n editingTriggerIsNew, \r\n editingTrigger);\r\n\r\n editingTrigger = null;\r\n}\r\n\r\nlet onTriggerCancel = () => {\r\n editingTrigger = null;\r\n}\r\n\r\nlet onTriggerEdit = (trigger) => {\r\n editingTrigger = trigger;\r\n editingTriggerIsNew = false;\r\n}\r\n\r\n\r\nlet onTriggerDelete = (trigger) => {\r\n database.deleteTrigger(trigger);\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n<ButtonGroup>\r\n <Button color=\"secondary\" \r\n grouped\r\n on:click={newAction}>Create New Action</Button>\r\n <Button color=\"secondary\" \r\n grouped\r\n on:click={newTrigger}>Create New Trigger</Button>\r\n</ButtonGroup>\r\n\r\n<Actions {editingActionIsNew} {editingAction} \r\n {onActionEdit} {onActionDelete} {onActionSave}\r\n {onActionCancel} />\r\n\r\n<Triggers {editingTriggerIsNew} {editingTrigger} \r\n {onTriggerEdit} {onTriggerDelete} {onTriggerSave}\r\n {onTriggerCancel} />\r\n\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n padding: 10px;\r\n}\r\n\r\n\r\n</style>","<script>\r\n\r\nimport {cloneDeep, map, some, filter} from \"lodash/fp\";\r\nimport Textbox from \"../common/Textbox.svelte\";\r\nimport Checkbox from \"../common/Checkbox.svelte\";\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport {validateAccessLevels} from \"../common/core\";\r\nimport ErrorsBox from \"../common/ErrorsBox.svelte\";\r\n\r\nexport let level;\r\nexport let allPermissions;\r\nexport let onFinished;\r\nexport let isNew;\r\nexport let allLevels;\r\nexport let hierarchy;\r\nexport let actions;\r\n\r\nlet errors = [];\r\nlet clonedLevel = cloneDeep(level);\r\n\r\nconst matchPermissions = (p1, p2) => \r\n p1.type === p2.type\r\n && \r\n ((!p2.nodeKey && !p1.nodeKey)\r\n || p2.nodeKey === p1.nodeKey);\r\n\r\nconst hasPermission = hasPerm => \r\n some(p => matchPermissions(p, hasPerm))\r\n (clonedLevel.permissions);\r\n\r\n$: permissionMatrix = \r\n map(p => ({permission:p, hasPermission: hasPermission(p)}))\r\n (allPermissions)\r\n\r\nconst getPermissionName = perm => \r\n perm.nodeKey\r\n ? `${perm.type} - ${perm.nodeKey}`\r\n : perm.type;\r\n\r\nconst save = () => {\r\n\r\n const newLevels = \r\n isNew \r\n ? [...allLevels, clonedLevel]\r\n : [...filter(l => l.name !== level.name)(allLevels), clonedLevel];\r\n\r\n errors = validateAccessLevels(\r\n hierarchy,\r\n actions,\r\n newLevels\r\n );\r\n\r\n if(errors.length > 0) return;\r\n\r\n onFinished(clonedLevel);\r\n}\r\n\r\nconst permissionChanged = perm => ev => {\r\n const hasPermission = ev.target.checked;\r\n\r\n if(hasPermission) {\r\n clonedLevel.permissions.push(perm);\r\n } else {\r\n clonedLevel.permissions = filter(p => !matchPermissions(p, perm));\r\n }\r\n}\r\n\r\n</script>\r\n\r\n<div>\r\n\r\n <ErrorsBox {errors} />\r\n\r\n <Textbox label=\"Name\" bind:text={clonedLevel.name} />\r\n\r\n {#each permissionMatrix as permission}\r\n <div>\r\n <Checkbox label={getPermissionName(permission.permission)} \r\n checked={permission.hasPermission} \r\n on:change={permissionChanged(permission.permission)} />\r\n </div>\r\n {/each}\r\n\r\n\r\n <ButtonGroup style=\"margin-top: 10px\">\r\n <Button color=\"primary\" grouped on:click={save}>Save</Button>\r\n <Button color=\"secondary\" grouped on:click={() => onFinished()}>Cancel</Button>\r\n </ButtonGroup>\r\n\r\n\r\n</div>\r\n\r\n<style>\r\n\r\n</style>","<script>\r\n\r\nimport ButtonGroup from \"../common/ButtonGroup.svelte\";\r\nimport Button from \"../common/Button.svelte\";\r\nimport {database} from \"../builderStore\";\r\nimport {generateFullPermissions, getNewAccessLevel} from \"../common/core\";\r\nimport getIcon from \"../common/icon\";\r\nimport AccessLevelView from \"./AccessLevelView.svelte\";\r\nimport Modal from \"../common/Modal.svelte\";\r\n\r\nlet editingLevel = null;\r\nlet editingLevelIsNew = false;\r\n$: isEditing = (editingLevel !== null); \r\n\r\nlet allPermissions = [];\r\ndatabase.subscribe(db => {\r\n allPermissions = generateFullPermissions(db.hierarchy, db.actions);\r\n})\r\n\r\nlet onLevelEdit = (level) => {\r\n editingLevel = level;\r\n editingLevelIsNew = false;\r\n};\r\n\r\nlet onLevelCancel = () => {\r\n editingAction = null;\r\n};\r\n\r\nlet onLevelDelete = (level) => {\r\n database.deleteLevel(level);\r\n};\r\n\r\n\r\nlet createNewLevel = () => {\r\n editingLevelIsNew = true;\r\n editingLevel = getNewAccessLevel();\r\n}\r\n\r\nlet onEditingFinished = (level) => {\r\n if(level) {\r\n database.saveLevel(level, editingLevelIsNew, editingLevel);\r\n }\r\n editingLevel = null;\r\n}\r\n\r\nconst getPermissionsString = perms => {\r\n return `${perms.length} / ${allPermissions.length}`;\r\n}\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n\r\n<ButtonGroup>\r\n <Button grouped color=\"secondary\" on:click={createNewLevel}>Create New Access Level</Button>\r\n</ButtonGroup>\r\n\r\n{#if $database.accessLevels}\r\n<table class=\"fields-table uk-table uk-table-small\">\r\n <thead>\r\n <tr>\r\n <th>Name</th>\r\n <th>Permissions</th>\r\n <th></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n {#each $database.accessLevels as level}\r\n <tr>\r\n <td >{level.name}</td>\r\n <td >{getPermissionsString(level.permissions)}</td>\r\n <td class=\"edit-button\">\r\n <span on:click={() => onLevelEdit(level)}>{@html getIcon(\"edit\")}</span>\r\n <span on:click={() => onLevelDelete(level)}>{@html getIcon(\"trash\")}</span>\r\n </td>\r\n </tr>\r\n {/each}\r\n </tbody>\r\n</table>\r\n{:else}\r\n(no actions added)\r\n{/if}\r\n\r\n\r\n<Modal bind:isOpen={isEditing}>\r\n {#if isEditing}\r\n <AccessLevelView level={editingLevel}\r\n allPermissions={allPermissions}\r\n onFinished={onEditingFinished}\r\n isNew={editingLevelIsNew}\r\n allLevels={$database.accessLevels}\r\n hierarchy={$database.hierarchy}\r\n actions={$database.actions} />\r\n {/if} \r\n</Modal>\r\n\r\n\r\n</div>\r\n\r\n<style>\r\n\r\n.root {\r\n padding:10px;\r\n}\r\n\r\n.edit-button {\r\n cursor:pointer;\r\n color: var(--white);\r\n}\r\n\r\ntr:hover .edit-button {\r\n color: var(--secondary75);\r\n}\r\n\r\n\r\n</style>","<script>\r\n\r\nimport Nav from \"./nav/Nav.svelte\";\r\nimport Database from \"./database/DatabaseRoot.svelte\" ;\r\nimport UserInterface from \"./userInterface/UserInterfaceRoot.svelte\" ;\r\nimport ActionsAndTriggers from \"./actionsAndTriggers/ActionsAndTriggersRoot.svelte\" ;\r\nimport AccessLevels from \"./accessLevels/AccessLevelsRoot.svelte\" ;\r\nimport ComingSoon from \"./common/ComingSoon.svelte\";\r\n\r\nimport {database} from \"./builderStore\";\r\n\r\nexport let navWidth = \"50px\";\r\n\r\n\r\n</script>\r\n\r\n<div class=\"root\">\r\n <Nav width={navWidth} />\r\n <div class=\"content\" \r\n style=\"width: calc(100% - {navWidth}); left: {navWidth}\"> \r\n {#if $database.activeNav === \"database\"}\r\n <Database />\r\n {:else if $database.activeNav === \"actions\"}\r\n <ActionsAndTriggers />\r\n {:else if $database.activeNav === \"access levels\"}\r\n <AccessLevels />\r\n {:else if $database.activeNav === \"user interface\"}\r\n <UserInterface />\r\n {/if}\r\n </div>\r\n</div>\r\n\r\n\r\n\r\n<style>\r\n\t.root {\r\n height: 100%;\r\n\t}\r\n \r\n\r\n .content {\r\n position: fixed;\r\n height: 100%;\r\n background-color: var(--white);\r\n margin:0;\r\n }\r\n\r\n\r\n</style>","<script>\n\t\n\timport NoPackage from \"./NoPackage.svelte\";\n\timport PackageRoot from \"./PackageRoot.svelte\";\n\timport {database, initialise} from \"./builderStore\";\n\timport { onMount } from 'svelte';\n\t\n\tlet init = initialise();\n\n</script>\n\n<main>\n\n\t{#await init}\n\t\n\t\t<h1>loading</h1>\n\n\t{:then result}\n\t\t{#if $database.hasAppPackage}\n\t\t<PackageRoot />\n\t\t{/if}\n\n\t\t{#if !$database.hasAppPackage}\n\t\t<NoPackage />\n\t\t{/if}\n\n\t{:catch err}\n\t\t<h1 style=\"color:red\">{err}</h1>\n\t{/await}\n</main>\n\n<style>\n\tmain {\n\t\theight: 100%;\n\t\twidth: 100%;\n\t\tfont-family: \"Lato\", Helvetica, Arial, sans-serif;\n\t}\n</style>","/*! UIkit 3.1.6 | http://www.getuikit.com | (c) 2014 - 2018 YOOtheme | MIT License */\n\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(\"uikit\",e):(t=t||self).UIkit=e()}(this,function(){\"use strict\";function l(n,i){return function(t){var e=arguments.length;return e?1<e?n.apply(i,arguments):n.call(i,t):n.call(i)}}var e=Object.prototype,n=e.hasOwnProperty;function c(t,e){return n.call(t,e)}var i={},r=/([a-z\\d])([A-Z])/g;function d(t){return t in i||(i[t]=t.replace(r,\"$1-$2\").toLowerCase()),i[t]}var o=/-(\\w)/g;function f(t){return t.replace(o,s)}function s(t,e){return e?e.toUpperCase():\"\"}function p(t){return t.length?s(0,t.charAt(0))+t.slice(1):\"\"}var t=String.prototype,a=t.startsWith||function(t){return 0===this.lastIndexOf(t,0)};function w(t,e){return a.call(t,e)}var h=t.endsWith||function(t){return this.substr(-t.length)===t};function u(t,e){return h.call(t,e)}function m(t,e){return~this.indexOf(t,e)}var g=Array.prototype,v=t.includes||m,b=g.includes||m;function y(t,e){return t&&(D(t)?v:b).call(t,e)}var x=g.findIndex||function(t){for(var e=arguments,n=0;n<this.length;n++)if(t.call(e[1],this[n],n,this))return n;return-1};function k(t,e){return x.call(t,e)}var $=Array.isArray;function I(t){return\"function\"==typeof t}function S(t){return null!==t&&\"object\"==typeof t}function T(t){return S(t)&&Object.getPrototypeOf(t)===e}function E(t){return S(t)&&t===t.window}function A(t){return S(t)&&9===t.nodeType}function C(t){return S(t)&&!!t.jquery}function N(t){return t instanceof Node||S(t)&&1<=t.nodeType}var _=e.toString;function M(t){return _.call(t).match(/^\\[object (NodeList|HTMLCollection)\\]$/)}function O(t){return\"boolean\"==typeof t}function D(t){return\"string\"==typeof t}function B(t){return\"number\"==typeof t}function z(t){return B(t)||D(t)&&!isNaN(t-parseFloat(t))}function P(t){return!($(t)?t.length:S(t)&&Object.keys(t).length)}function H(t){return void 0===t}function L(t){return O(t)?t:\"true\"===t||\"1\"===t||\"\"===t||\"false\"!==t&&\"0\"!==t&&t}function F(t){var e=Number(t);return!isNaN(e)&&e}function j(t){return parseFloat(t)||0}function W(t){return N(t)||E(t)||A(t)?t:M(t)||C(t)?t[0]:$(t)?W(t[0]):null}function V(t){return N(t)?[t]:M(t)?g.slice.call(t):$(t)?t.map(W).filter(Boolean):C(t)?t.toArray():[]}function Y(t){return $(t)?t:D(t)?t.split(/,(?![^(]*\\))/).map(function(t){return z(t)?F(t):L(t.trim())}):[t]}function R(t){return t?u(t,\"ms\")?j(t):1e3*j(t):0}function q(t,n){return t===n||S(t)&&S(n)&&Object.keys(t).length===Object.keys(n).length&&K(t,function(t,e){return t===n[e]})}function U(t,e,n){return t.replace(new RegExp(e+\"|\"+n,\"mg\"),function(t){return t===e?n:e})}var X=Object.assign||function(t){for(var e=[],n=arguments.length-1;0<n--;)e[n]=arguments[n+1];t=Object(t);for(var i=0;i<e.length;i++){var r=e[i];if(null!==r)for(var o in r)c(r,o)&&(t[o]=r[o])}return t};function K(t,e){for(var n in t)if(!1===e(t[n],n))return!1;return!0}function G(t,r){return t.sort(function(t,e){var n=t[r];void 0===n&&(n=0);var i=e[r];return void 0===i&&(i=0),i<n?1:n<i?-1:0})}function J(t,n){var i=new Set;return t.filter(function(t){var e=t[n];return!i.has(e)&&(i.add(e)||!0)})}function Z(t,e,n){return void 0===e&&(e=0),void 0===n&&(n=1),Math.min(Math.max(F(t)||0,e),n)}function Q(){}function tt(t,e){return t.left<e.right&&t.right>e.left&&t.top<e.bottom&&t.bottom>e.top}function et(t,e){return t.x<=e.right&&t.x>=e.left&&t.y<=e.bottom&&t.y>=e.top}var nt={ratio:function(t,e,n){var i,r=\"width\"===e?\"height\":\"width\";return(i={})[r]=t[e]?Math.round(n*t[r]/t[e]):t[r],i[e]=n,i},contain:function(n,i){var r=this;return K(n=X({},n),function(t,e){return n=n[e]>i[e]?r.ratio(n,e,i[e]):n}),n},cover:function(n,i){var r=this;return K(n=this.contain(n,i),function(t,e){return n=n[e]<i[e]?r.ratio(n,e,i[e]):n}),n}};function it(t,e,n){if(S(e))for(var i in e)it(t,i,e[i]);else{if(H(n))return(t=W(t))&&t.getAttribute(e);V(t).forEach(function(t){I(n)&&(n=n.call(t,it(t,e))),null===n?ot(t,e):t.setAttribute(e,n)})}}function rt(t,e){return V(t).some(function(t){return t.hasAttribute(e)})}function ot(t,e){t=V(t),e.split(\" \").forEach(function(e){return t.forEach(function(t){return t.hasAttribute(e)&&t.removeAttribute(e)})})}function st(t,e){for(var n=0,i=[e,\"data-\"+e];n<i.length;n++)if(rt(t,i[n]))return it(t,i[n])}function at(t,e){return W(t)||ut(t,ct(t,e))}function ht(t,e){var n=V(t);return n.length&&n||lt(t,ct(t,e))}function ct(t,e){return void 0===e&&(e=document),mt(t)||A(e)?e:e.ownerDocument}function ut(t,e){return W(dt(t,e,\"querySelector\"))}function lt(t,e){return V(dt(t,e,\"querySelectorAll\"))}function dt(t,s,e){if(void 0===s&&(s=document),!t||!D(t))return null;var a;mt(t=t.replace(pt,\"$1 *\"))&&(a=[],t=function(t){return t.match(gt).map(function(t){return t.replace(/,$/,\"\").trim()})}(t).map(function(t,e){var n=s;if(\"!\"===t[0]){var i=t.substr(1).trim().split(\" \");n=xt(s.parentNode,i[0]),t=i.slice(1).join(\" \").trim()}if(\"-\"===t[0]){var r=t.substr(1).trim().split(\" \"),o=(n||s).previousElementSibling;n=bt(o,t.substr(1))?o:null,t=r.slice(1).join(\" \")}return n?(n.id||(n.id=\"uk-\"+Date.now()+e,a.push(function(){return ot(n,\"id\")})),\"#\"+It(n.id)+\" \"+t):null}).filter(Boolean).join(\",\"),s=document);try{return s[e](t)}catch(t){return null}finally{a&&a.forEach(function(t){return t()})}}var ft=/(^|[^\\\\],)\\s*[!>+~-]/,pt=/([!>+~-])(?=\\s+[!>+~-]|\\s*$)/g;function mt(t){return D(t)&&t.match(ft)}var gt=/.*?[^\\\\](?:,|$)/g;var vt=Element.prototype,wt=vt.matches||vt.webkitMatchesSelector||vt.msMatchesSelector;function bt(t,e){return V(t).some(function(t){return wt.call(t,e)})}var yt=vt.closest||function(t){var e=this;do{if(bt(e,t))return e;e=e.parentNode}while(e&&1===e.nodeType)};function xt(t,e){return w(e,\">\")&&(e=e.slice(1)),N(t)?t.parentNode&&yt.call(t,e):V(t).map(function(t){return xt(t,e)}).filter(Boolean)}function kt(t,e){for(var n=[],i=W(t).parentNode;i&&1===i.nodeType;)bt(i,e)&&n.push(i),i=i.parentNode;return n}var $t=window.CSS&&CSS.escape||function(t){return t.replace(/([^\\x7f-\\uFFFF\\w-])/g,function(t){return\"\\\\\"+t})};function It(t){return D(t)?$t.call(null,t):\"\"}var St={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,menuitem:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0};function Tt(t){return V(t).some(function(t){return St[t.tagName.toLowerCase()]})}function Et(t){return V(t).some(function(t){return t.offsetWidth||t.offsetHeight||t.getClientRects().length})}var At=\"input,select,textarea,button\";function Ct(t){return V(t).some(function(t){return bt(t,At)})}function Nt(t,e){return V(t).filter(function(t){return bt(t,e)})}function _t(t,e){return D(e)?bt(t,e)||xt(t,e):t===e||(A(e)?e.documentElement:W(e)).contains(W(t))}function Mt(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var n=Pt(t),i=n[0],r=n[1],o=n[2],s=n[3],a=n[4];return i=Ft(i),o&&(s=function(t,i,r){var o=this;return function(n){t.forEach(function(t){var e=\">\"===i[0]?lt(i,t).reverse().filter(function(t){return _t(n.target,t)})[0]:xt(n.target,i);e&&(n.delegate=t,n.current=e,r.call(o,n))})}}(i,o,s)),1<s.length&&(s=function(e){return function(t){return $(t.detail)?e.apply(void 0,[t].concat(t.detail)):e(t)}}(s)),r.split(\" \").forEach(function(e){return i.forEach(function(t){return t.addEventListener(e,s,a)})}),function(){return Ot(i,r,s,a)}}function Ot(t,e,n,i){void 0===i&&(i=!1),t=Ft(t),e.split(\" \").forEach(function(e){return t.forEach(function(t){return t.removeEventListener(e,n,i)})})}function Dt(){for(var t=[],e=arguments.length;e--;)t[e]=arguments[e];var n=Pt(t),i=n[0],r=n[1],o=n[2],s=n[3],a=n[4],h=n[5],c=Mt(i,r,o,function(t){var e=!h||h(t);e&&(c(),s(t,e))},a);return c}function Bt(t,n,i){return Ft(t).reduce(function(t,e){return t&&e.dispatchEvent(zt(n,!0,!0,i))},!0)}function zt(t,e,n,i){if(void 0===e&&(e=!0),void 0===n&&(n=!1),D(t)){var r=document.createEvent(\"CustomEvent\");r.initCustomEvent(t,e,n,i),t=r}return t}function Pt(t){return I(t[2])&&t.splice(2,0,!1),t}function Ht(t){return t&&\"addEventListener\"in t}function Lt(t){return Ht(t)?t:W(t)}function Ft(t){return $(t)?t.map(Lt).filter(Boolean):D(t)?lt(t):Ht(t)?[t]:V(t)}function jt(t){return\"touch\"===t.pointerType||t.touches}function Wt(t,e){void 0===e&&(e=\"client\");var n=t.touches,i=t.changedTouches,r=n&&n[0]||i&&i[0]||t;return{x:r[e+\"X\"],y:r[e+\"Y\"]}}function Vt(){var n=this;this.promise=new Yt(function(t,e){n.reject=e,n.resolve=t})}var Yt=\"Promise\"in window?window.Promise:Ut,Rt=2,qt=\"setImmediate\"in window?setImmediate:setTimeout;function Ut(t){this.state=Rt,this.value=void 0,this.deferred=[];var e=this;try{t(function(t){e.resolve(t)},function(t){e.reject(t)})}catch(t){e.reject(t)}}Ut.reject=function(n){return new Ut(function(t,e){e(n)})},Ut.resolve=function(n){return new Ut(function(t,e){t(n)})},Ut.all=function(s){return new Ut(function(n,t){var i=[],r=0;function e(e){return function(t){i[e]=t,(r+=1)===s.length&&n(i)}}0===s.length&&n(i);for(var o=0;o<s.length;o+=1)Ut.resolve(s[o]).then(e(o),t)})},Ut.race=function(i){return new Ut(function(t,e){for(var n=0;n<i.length;n+=1)Ut.resolve(i[n]).then(t,e)})};var Xt=Ut.prototype;function Kt(s,a){return new Yt(function(t,e){var n=X({data:null,method:\"GET\",headers:{},xhr:new XMLHttpRequest,beforeSend:Q,responseType:\"\"},a);n.beforeSend(n);var i=n.xhr;for(var r in n)if(r in i)try{i[r]=n[r]}catch(t){}for(var o in i.open(n.method.toUpperCase(),s),n.headers)i.setRequestHeader(o,n.headers[o]);Mt(i,\"load\",function(){0===i.status||200<=i.status&&i.status<300||304===i.status?t(i):e(X(Error(i.statusText),{xhr:i,status:i.status}))}),Mt(i,\"error\",function(){return e(X(Error(\"Network Error\"),{xhr:i}))}),Mt(i,\"timeout\",function(){return e(X(Error(\"Network Timeout\"),{xhr:i}))}),i.send(n.data)})}function Gt(i,r,o){return new Yt(function(t,e){var n=new Image;n.onerror=e,n.onload=function(){return t(n)},o&&(n.sizes=o),r&&(n.srcset=r),n.src=i})}Xt.resolve=function(t){var e=this;if(e.state===Rt){if(t===e)throw new TypeError(\"Promise settled with itself.\");var n=!1;try{var i=t&&t.then;if(null!==t&&S(t)&&I(i))return void i.call(t,function(t){n||e.resolve(t),n=!0},function(t){n||e.reject(t),n=!0})}catch(t){return void(n||e.reject(t))}e.state=0,e.value=t,e.notify()}},Xt.reject=function(t){var e=this;if(e.state===Rt){if(t===e)throw new TypeError(\"Promise settled with itself.\");e.state=1,e.value=t,e.notify()}},Xt.notify=function(){var o=this;qt(function(){if(o.state!==Rt)for(;o.deferred.length;){var t=o.deferred.shift(),e=t[0],n=t[1],i=t[2],r=t[3];try{0===o.state?I(e)?i(e.call(void 0,o.value)):i(o.value):1===o.state&&(I(n)?i(n.call(void 0,o.value)):r(o.value))}catch(t){r(t)}}})},Xt.then=function(n,i){var r=this;return new Ut(function(t,e){r.deferred.push([n,i,t,e]),r.notify()})},Xt.catch=function(t){return this.then(void 0,t)};var Jt=/msie|trident/i.test(window.navigator.userAgent),Zt=\"rtl\"===it(document.documentElement,\"dir\"),Qt=\"ontouchstart\"in window,te=window.PointerEvent,ee=Qt||window.DocumentTouch&&document instanceof DocumentTouch||navigator.maxTouchPoints,ne=te?\"pointerdown\":Qt?\"touchstart\":\"mousedown\",ie=te?\"pointermove\":Qt?\"touchmove\":\"mousemove\",re=te?\"pointerup\":Qt?\"touchend\":\"mouseup\",oe=te?\"pointerenter\":Qt?\"\":\"mouseenter\",se=te?\"pointerleave\":Qt?\"\":\"mouseleave\",ae=te?\"pointercancel\":\"touchcancel\";function he(t){if(\"loading\"===document.readyState)var e=Mt(document,\"DOMContentLoaded\",function(){e(),t()});else t()}function ce(t,e){return e?V(t).indexOf(W(e)):V((t=W(t))&&t.parentNode.children).indexOf(t)}function ue(t,e,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var r=(e=V(e)).length;return t=z(t)?F(t):\"next\"===t?n+1:\"previous\"===t?n-1:ce(e,t),i?Z(t,0,r-1):(t%=r)<0?t+r:t}function le(t){return(t=Se(t)).innerHTML=\"\",t}function de(t,e){return t=Se(t),H(e)?t.innerHTML:fe(t.hasChildNodes()?le(t):t,e)}function fe(e,t){return e=Se(e),ge(t,function(t){return e.appendChild(t)})}function pe(e,t){return e=Se(e),ge(t,function(t){return e.parentNode.insertBefore(t,e)})}function me(e,t){return e=Se(e),ge(t,function(t){return e.nextSibling?pe(e.nextSibling,t):fe(e.parentNode,t)})}function ge(t,e){return(t=D(t)?$e(t):t)?\"length\"in t?V(t).map(e):e(t):null}function ve(t){V(t).map(function(t){return t.parentNode&&t.parentNode.removeChild(t)})}function we(t,e){for(e=W(pe(t,e));e.firstChild;)e=e.firstChild;return fe(e,t),e}function be(t,e){return V(V(t).map(function(t){return t.hasChildNodes?we(V(t.childNodes),e):fe(t,e)}))}function ye(t){V(t).map(function(t){return t.parentNode}).filter(function(t,e,n){return n.indexOf(t)===e}).forEach(function(t){pe(t,t.childNodes),ve(t)})}var xe=/^\\s*<(\\w+|!)[^>]*>/,ke=/^<(\\w+)\\s*\\/?>(?:<\\/\\1>)?$/;function $e(t){var e=ke.exec(t);if(e)return document.createElement(e[1]);var n=document.createElement(\"div\");return xe.test(t)?n.insertAdjacentHTML(\"beforeend\",t.trim()):n.textContent=t,1<n.childNodes.length?V(n.childNodes):n.firstChild}function Ie(t,e){if(t&&1===t.nodeType)for(e(t),t=t.firstElementChild;t;)Ie(t,e),t=t.nextElementSibling}function Se(t,e){return D(t)?Ee(t)?W($e(t)):ut(t,e):W(t)}function Te(t,e){return D(t)?Ee(t)?V($e(t)):lt(t,e):V(t)}function Ee(t){return\"<\"===t[0]||t.match(/^\\s*</)}function Ae(t){for(var e=[],n=arguments.length-1;0<n--;)e[n]=arguments[n+1];De(t,e,\"add\")}function Ce(t){for(var e=[],n=arguments.length-1;0<n--;)e[n]=arguments[n+1];De(t,e,\"remove\")}function Ne(t,e){it(t,\"class\",function(t){return(t||\"\").replace(new RegExp(\"\\\\b\"+e+\"\\\\b\",\"g\"),\"\")})}function _e(t){for(var e=[],n=arguments.length-1;0<n--;)e[n]=arguments[n+1];e[0]&&Ce(t,e[0]),e[1]&&Ae(t,e[1])}function Me(t,e){return e&&V(t).some(function(t){return t.classList.contains(e.split(\" \")[0])})}function Oe(t){for(var i=[],e=arguments.length-1;0<e--;)i[e]=arguments[e+1];if(i.length){var r=D((i=Be(i))[i.length-1])?[]:i.pop();i=i.filter(Boolean),V(t).forEach(function(t){for(var e=t.classList,n=0;n<i.length;n++)ze.Force?e.toggle.apply(e,[i[n]].concat(r)):e[(H(r)?!e.contains(i[n]):r)?\"add\":\"remove\"](i[n])})}}function De(t,n,i){(n=Be(n).filter(Boolean)).length&&V(t).forEach(function(t){var e=t.classList;ze.Multiple?e[i].apply(e,n):n.forEach(function(t){return e[i](t)})})}function Be(t){return t.reduce(function(t,e){return t.concat.call(t,D(e)&&y(e,\" \")?e.trim().split(\" \"):e)},[])}var ze={get Multiple(){return this.get(\"_multiple\")},get Force(){return this.get(\"_force\")},get:function(t){if(!c(this,t)){var e=document.createElement(\"_\").classList;e.add(\"a\",\"b\"),e.toggle(\"c\",!1),this._multiple=e.contains(\"b\"),this._force=!e.contains(\"c\")}return this[t]}},Pe={\"animation-iteration-count\":!0,\"column-count\":!0,\"fill-opacity\":!0,\"flex-grow\":!0,\"flex-shrink\":!0,\"font-weight\":!0,\"line-height\":!0,opacity:!0,order:!0,orphans:!0,\"stroke-dasharray\":!0,\"stroke-dashoffset\":!0,widows:!0,\"z-index\":!0,zoom:!0};function He(t,e,r){return V(t).map(function(n){if(D(e)){if(e=Ye(e),H(r))return Fe(n,e);r||B(r)?n.style[e]=z(r)&&!Pe[e]?r+\"px\":r:n.style.removeProperty(e)}else{if($(e)){var i=Le(n);return e.reduce(function(t,e){return t[e]=i[Ye(e)],t},{})}S(e)&&K(e,function(t,e){return He(n,e,t)})}return n})[0]}function Le(t,e){return(t=W(t)).ownerDocument.defaultView.getComputedStyle(t,e)}function Fe(t,e,n){return Le(t,n)[e]}var je={};function We(t){var e=document.documentElement;if(!Jt)return Le(e).getPropertyValue(\"--uk-\"+t);if(!(t in je)){var n=fe(e,document.createElement(\"div\"));Ae(n,\"uk-\"+t),je[t]=Fe(n,\"content\",\":before\").replace(/^[\"'](.*)[\"']$/,\"$1\"),ve(n)}return je[t]}var Ve={};function Ye(t){var e=Ve[t];return e=e||(Ve[t]=function(t){t=d(t);var e=document.documentElement.style;if(t in e)return t;var n,i=Re.length;for(;i--;)if((n=\"-\"+Re[i]+\"-\"+t)in e)return n}(t)||t)}var Re=[\"webkit\",\"moz\",\"ms\"];function qe(t,s,a,h){return void 0===a&&(a=400),void 0===h&&(h=\"linear\"),Yt.all(V(t).map(function(o){return new Yt(function(n,i){for(var t in s){var e=He(o,t);\"\"===e&&He(o,t,e)}var r=setTimeout(function(){return Bt(o,\"transitionend\")},a);Dt(o,\"transitionend transitioncanceled\",function(t){var e=t.type;clearTimeout(r),Ce(o,\"uk-transition\"),He(o,{\"transition-property\":\"\",\"transition-duration\":\"\",\"transition-timing-function\":\"\"}),\"transitioncanceled\"===e?i():n()},!1,function(t){var e=t.target;return o===e}),Ae(o,\"uk-transition\"),He(o,X({\"transition-property\":Object.keys(s).map(Ye).join(\",\"),\"transition-duration\":a+\"ms\",\"transition-timing-function\":h},s))})}))}var Ue={start:qe,stop:function(t){return Bt(t,\"transitionend\"),Yt.resolve()},cancel:function(t){Bt(t,\"transitioncanceled\")},inProgress:function(t){return Me(t,\"uk-transition\")}},Xe=\"uk-animation-\",Ke=\"uk-cancel-animation\";function Ge(t,e,n,a,h){var c=arguments;return void 0===n&&(n=200),Yt.all(V(t).map(function(s){return new Yt(function(i,r){if(Me(s,Ke))requestAnimationFrame(function(){return Yt.resolve().then(function(){return Ge.apply(void 0,c).then(i,r)})});else{var t=e+\" \"+Xe+(h?\"leave\":\"enter\");w(e,Xe)&&(a&&(t+=\" uk-transform-origin-\"+a),h&&(t+=\" \"+Xe+\"reverse\")),o(),Dt(s,\"animationend animationcancel\",function(t){var e=t.type,n=!1;\"animationcancel\"===e?(r(),o()):(i(),Yt.resolve().then(function(){n=!0,o()})),requestAnimationFrame(function(){n||(Ae(s,Ke),requestAnimationFrame(function(){return Ce(s,Ke)}))})},!1,function(t){var e=t.target;return s===e}),He(s,\"animationDuration\",n+\"ms\"),Ae(s,t)}function o(){He(s,\"animationDuration\",\"\"),Ne(s,Xe+\"\\\\S*\")}})}))}var Je=new RegExp(Xe+\"(enter|leave)\"),Ze={in:function(t,e,n,i){return Ge(t,e,n,i,!1)},out:function(t,e,n,i){return Ge(t,e,n,i,!0)},inProgress:function(t){return Je.test(it(t,\"class\"))},cancel:function(t){Bt(t,\"animationcancel\")}},Qe={width:[\"x\",\"left\",\"right\"],height:[\"y\",\"top\",\"bottom\"]};function tn(t,e,u,l,d,n,i,r){u=un(u),l=un(l);var f={element:u,target:l};if(!t||!e)return f;var p=nn(t),m=nn(e),g=m;if(cn(g,u,p,-1),cn(g,l,m,1),d=ln(d,p.width,p.height),n=ln(n,m.width,m.height),d.x+=n.x,d.y+=n.y,g.left+=d.x,g.top+=d.y,i){var o=[nn(bn(t))];r&&o.unshift(nn(r)),K(Qe,function(t,s){var a=t[0],h=t[1],c=t[2];!0!==i&&!y(i,a)||o.some(function(i){var t=u[a]===h?-p[s]:u[a]===c?p[s]:0,e=l[a]===h?m[s]:l[a]===c?-m[s]:0;if(g[h]<i[h]||g[h]+p[s]>i[c]){var n=p[s]/2,r=\"center\"===l[a]?-m[s]/2:0;return\"center\"===u[a]&&(o(n,r)||o(-n,-r))||o(t,e)}function o(e,t){var n=g[h]+e+t-2*d[a];if(n>=i[h]&&n+p[s]<=i[c])return g[h]=n,[\"element\",\"target\"].forEach(function(t){f[t][a]=e?f[t][a]===Qe[s][1]?Qe[s][2]:Qe[s][1]:f[t][a]}),!0}})})}return en(t,g),f}function en(n,i){if(n=W(n),!i)return nn(n);var r=en(n),o=He(n,\"position\");[\"left\",\"top\"].forEach(function(t){if(t in i){var e=He(n,t);He(n,t,i[t]-r[t]+j(\"absolute\"===o&&\"auto\"===e?rn(n)[t]:e))}})}function nn(t){var e,n,i=bn(t=W(t)),r=i.pageYOffset,o=i.pageXOffset;if(E(t)){var s=t.innerHeight,a=t.innerWidth;return{top:r,left:o,height:s,width:a,bottom:r+s,right:o+a}}Et(t)||\"none\"!==He(t,\"display\")||(e=it(t,\"style\"),n=it(t,\"hidden\"),it(t,{style:(e||\"\")+\";display:block !important;\",hidden:null}));var h=t.getBoundingClientRect();return H(e)||it(t,{style:e,hidden:n}),{height:h.height,width:h.width,top:h.top+r,left:h.left+o,bottom:h.bottom+r,right:h.right+o}}function rn(i){var r=(i=W(i)).offsetParent||function(t){return yn(t).documentElement}(i),o=en(r),t=[\"top\",\"left\"].reduce(function(t,e){var n=p(e);return t[e]-=o[e]+j(He(i,\"margin\"+n))+j(He(r,\"border\"+n+\"Width\")),t},en(i));return{top:t.top,left:t.left}}var on=an(\"height\"),sn=an(\"width\");function an(i){var r=p(i);return function(t,e){if(t=W(t),H(e)){if(E(t))return t[\"inner\"+r];if(A(t)){var n=t.documentElement;return Math.max(n[\"offset\"+r],n[\"scroll\"+r])}return(e=\"auto\"===(e=He(t,i))?t[\"offset\"+r]:j(e)||0)-hn(i,t)}He(t,i,e||0===e?+e+hn(i,t)+\"px\":\"\")}}function hn(t,n,e){return void 0===e&&(e=\"border-box\"),He(n,\"boxSizing\")===e?Qe[t].slice(1).map(p).reduce(function(t,e){return t+j(He(n,\"padding\"+e))+j(He(n,\"border\"+e+\"Width\"))},0):0}function cn(o,s,a,h){K(Qe,function(t,e){var n=t[0],i=t[1],r=t[2];s[n]===r?o[i]+=a[e]*h:\"center\"===s[n]&&(o[i]+=a[e]*h/2)})}function un(t){var e=/left|center|right/,n=/top|center|bottom/;return 1===(t=(t||\"\").split(\" \")).length&&(t=e.test(t[0])?t.concat([\"center\"]):n.test(t[0])?[\"center\"].concat(t):[\"center\",\"center\"]),{x:e.test(t[0])?t[0]:\"center\",y:n.test(t[1])?t[1]:\"center\"}}function ln(t,e,n){var i=(t||\"\").split(\" \"),r=i[0],o=i[1];return{x:r?j(r)*(u(r,\"%\")?e/100:1):0,y:o?j(o)*(u(o,\"%\")?n/100:1):0}}function dn(t){switch(t){case\"left\":return\"right\";case\"right\":return\"left\";case\"top\":return\"bottom\";case\"bottom\":return\"top\";default:return t}}function fn(t,e,n){if(void 0===e&&(e=0),void 0===n&&(n=0),!Et(t))return!1;var i=bn(t=W(t)),r=t.getBoundingClientRect(),o={top:-e,left:-n,bottom:e+on(i),right:n+sn(i)};return tt(r,o)||et({x:r.left,y:r.top},o)}function pn(t,e){if(void 0===e&&(e=0),!Et(t))return 0;var n=bn(t=W(t)),i=yn(t),r=t.offsetHeight+e,o=gn(t)[0],s=on(n),a=s+Math.min(0,o-s),h=Math.max(0,s-(on(i)+e-(o+r)));return Z((a+n.pageYOffset-o)/((a+(r-(h<s?h:0)))/100)/100)}function mn(t,e){if(E(t=W(t))||A(t)){var n=bn(t);(0,n.scrollTo)(n.pageXOffset,e)}else t.scrollTop=e}function gn(t){var e=[0,0];do{if(e[0]+=t.offsetTop,e[1]+=t.offsetLeft,\"fixed\"===He(t,\"position\")){var n=bn(t);return e[0]+=n.pageYOffset,e[1]+=n.pageXOffset,e}}while(t=t.offsetParent);return e}function vn(t,e,n){return void 0===e&&(e=\"width\"),void 0===n&&(n=window),z(t)?+t:u(t,\"vh\")?wn(on(bn(n)),t):u(t,\"vw\")?wn(sn(bn(n)),t):u(t,\"%\")?wn(nn(n)[e],t):j(t)}function wn(t,e){return t*j(e)/100}function bn(t){return E(t)?t:yn(t).defaultView}function yn(t){return W(t).ownerDocument}var xn={reads:[],writes:[],read:function(t){return this.reads.push(t),$n(),t},write:function(t){return this.writes.push(t),$n(),t},clear:function(t){return Sn(this.reads,t)||Sn(this.writes,t)},flush:kn};function kn(){In(xn.reads),In(xn.writes.splice(0,xn.writes.length)),xn.scheduled=!1,(xn.reads.length||xn.writes.length)&&$n(!0)}function $n(t){void 0===t&&(t=!1),xn.scheduled||(xn.scheduled=!0,t?Yt.resolve().then(kn):requestAnimationFrame(kn))}function In(t){for(var e;e=t.shift();)e()}function Sn(t,e){var n=t.indexOf(e);return!!~n&&!!t.splice(n,1)}function Tn(){}function En(t,e){return(e.y-t.y)/(e.x-t.x)}Tn.prototype={positions:[],position:null,init:function(){var i=this;this.positions=[],this.position=null;var r=!1;this.unbind=Mt(document,\"mousemove\",function(n){r||(setTimeout(function(){var t=Date.now(),e=i.positions.length;e&&100<t-i.positions[e-1].time&&i.positions.splice(0,e),i.positions.push({time:t,x:n.pageX,y:n.pageY}),5<i.positions.length&&i.positions.shift(),r=!1},5),r=!0)})},cancel:function(){this.unbind&&this.unbind()},movesTo:function(t){if(this.positions.length<2)return!1;var e=en(t),n=this.positions[this.positions.length-1],i=this.positions[0];if(e.left<=n.x&&n.x<=e.right&&e.top<=n.y&&n.y<=e.bottom)return!1;var r=[[{x:e.left,y:e.top},{x:e.right,y:e.bottom}],[{x:e.right,y:e.top},{x:e.left,y:e.bottom}]];return e.right<=n.x||(e.left>=n.x?(r[0].reverse(),r[1].reverse()):e.bottom<=n.y?r[0].reverse():e.top>=n.y&&r[1].reverse()),!!r.reduce(function(t,e){return t+(En(i,e[0])<En(n,e[0])&&En(i,e[1])>En(n,e[1]))},0)}};var An={};function Cn(t,e,n){return An.computed(I(t)?t.call(n,n):t,I(e)?e.call(n,n):e)}function Nn(t,e){return t=t&&!$(t)?[t]:t,e?t?t.concat(e):$(e)?e:[e]:t}function _n(e,n,i){var r={};if(I(n)&&(n=n.options),n.extends&&(e=_n(e,n.extends,i)),n.mixins)for(var t=0,o=n.mixins.length;t<o;t++)e=_n(e,n.mixins[t],i);for(var s in e)h(s);for(var a in n)c(e,a)||h(a);function h(t){r[t]=(An[t]||function(t,e){return H(e)?t:e})(e[t],n[t],i)}return r}function Mn(t,e){var n;void 0===e&&(e=[]);try{return t?w(t,\"{\")?JSON.parse(t):e.length&&!y(t,\":\")?((n={})[e[0]]=t,n):t.split(\";\").reduce(function(t,e){var n=e.split(/:(.*)/),i=n[0],r=n[1];return i&&!H(r)&&(t[i.trim()]=r.trim()),t},{}):{}}catch(t){return{}}}An.events=An.created=An.beforeConnect=An.connected=An.beforeDisconnect=An.disconnected=An.destroy=Nn,An.args=function(t,e){return!1!==e&&Nn(e||t)},An.update=function(t,e){return G(Nn(t,I(e)?{read:e}:e),\"order\")},An.props=function(t,e){return $(e)&&(e=e.reduce(function(t,e){return t[e]=String,t},{})),An.methods(t,e)},An.computed=An.methods=function(t,e){return e?t?X({},t,e):e:t},An.data=function(e,n,t){return t?Cn(e,n,t):n?e?function(t){return Cn(e,n,t)}:n:e};function On(t){this.id=++Dn,this.el=W(t)}var Dn=0;function Bn(t,e){try{t.contentWindow.postMessage(JSON.stringify(X({event:\"command\"},e)),\"*\")}catch(t){}}On.prototype.isVideo=function(){return this.isYoutube()||this.isVimeo()||this.isHTML5()},On.prototype.isHTML5=function(){return\"VIDEO\"===this.el.tagName},On.prototype.isIFrame=function(){return\"IFRAME\"===this.el.tagName},On.prototype.isYoutube=function(){return this.isIFrame()&&!!this.el.src.match(/\\/\\/.*?youtube(-nocookie)?\\.[a-z]+\\/(watch\\?v=[^&\\s]+|embed)|youtu\\.be\\/.*/)},On.prototype.isVimeo=function(){return this.isIFrame()&&!!this.el.src.match(/vimeo\\.com\\/video\\/.*/)},On.prototype.enableApi=function(){var e=this;if(this.ready)return this.ready;var n,i=this.isYoutube(),r=this.isVimeo();return i||r?this.ready=new Yt(function(t){Dt(e.el,\"load\",function(){if(i){var t=function(){return Bn(e.el,{event:\"listening\",id:e.id})};n=setInterval(t,100),t()}}),function(i){return new Yt(function(n){Dt(window,\"message\",function(t,e){return n(e)},!1,function(t){var e=t.data;if(e&&D(e)){try{e=JSON.parse(e)}catch(t){return}return e&&i(e)}})})}(function(t){return i&&t.id===e.id&&\"onReady\"===t.event||r&&Number(t.player_id)===e.id}).then(function(){t(),n&&clearInterval(n)}),it(e.el,\"src\",e.el.src+(y(e.el.src,\"?\")?\"&\":\"?\")+(i?\"enablejsapi=1\":\"api=1&player_id=\"+e.id))}):Yt.resolve()},On.prototype.play=function(){var t=this;if(this.isVideo())if(this.isIFrame())this.enableApi().then(function(){return Bn(t.el,{func:\"playVideo\",method:\"play\"})});else if(this.isHTML5())try{var e=this.el.play();e&&e.catch(Q)}catch(t){}},On.prototype.pause=function(){var t=this;this.isVideo()&&(this.isIFrame()?this.enableApi().then(function(){return Bn(t.el,{func:\"pauseVideo\",method:\"pause\"})}):this.isHTML5()&&this.el.pause())},On.prototype.mute=function(){var t=this;this.isVideo()&&(this.isIFrame()?this.enableApi().then(function(){return Bn(t.el,{func:\"mute\",method:\"setVolume\",value:0})}):this.isHTML5()&&(this.el.muted=!0,it(this.el,\"muted\",\"\")))};var zn=\"IntersectionObserver\"in window?window.IntersectionObserver:function(){function t(e,t){var n=this;void 0===t&&(t={});var i=t.rootMargin;void 0===i&&(i=\"0 0\"),this.targets=[];var r,o=(i||\"0 0\").split(\" \").map(j),s=o[0],a=o[1];this.offsetTop=s,this.offsetLeft=a,this.apply=function(){r=r||requestAnimationFrame(function(){return setTimeout(function(){var t=n.takeRecords();t.length&&e(t,n),r=!1})})},this.off=Mt(window,\"scroll resize load\",this.apply,{passive:!0,capture:!0})}return t.prototype.takeRecords=function(){var n=this;return this.targets.filter(function(t){var e=fn(t.target,n.offsetTop,n.offsetLeft);if(null===t.isIntersecting||e^t.isIntersecting)return t.isIntersecting=e,!0})},t.prototype.observe=function(t){this.targets.push({target:t,isIntersecting:null}),this.apply()},t.prototype.disconnect=function(){this.targets=[],this.off()},t}();function Pn(t){return!(!w(t,\"uk-\")&&!w(t,\"data-uk-\"))&&f(t.replace(\"data-uk-\",\"\").replace(\"uk-\",\"\"))}function Hn(t){this._init(t)}var Ln,Fn,jn,Wn,Vn,Yn,Rn,qn,Un;function Xn(t,e){if(t)for(var n in t)t[n]._connected&&t[n]._callUpdate(e)}function Kn(t,e){var n={},i=t.args;void 0===i&&(i=[]);var r=t.props;void 0===r&&(r={});var o=t.el;if(!r)return n;for(var s in r){var a=d(s),h=st(o,a);if(!H(h)){if(h=r[s]===Boolean&&\"\"===h||Qn(r[s],h),\"target\"===a&&(!h||w(h,\"_\")))continue;n[s]=h}}var c=Mn(st(o,e),i);for(var u in c){var l=f(u);void 0!==r[l]&&(n[l]=Qn(r[l],c[u]))}return n}function Gn(i,r,o){Object.defineProperty(i,r,{enumerable:!0,get:function(){var t=i._computeds,e=i.$props,n=i.$el;return c(t,r)||(t[r]=(o.get||o).call(i,e,n)),t[r]},set:function(t){var e=i._computeds;e[r]=o.set?o.set.call(i,t):t,H(e[r])&&delete e[r]}})}function Jn(e,n,i){T(n)||(n={name:i,handler:n});var t=n.name,r=n.el,o=n.handler,s=n.capture,a=n.passive,h=n.delegate,c=n.filter,u=n.self;r=I(r)?r.call(e):r||e.$el,$(r)?r.forEach(function(t){return Jn(e,X({},n,{el:t}),i)}):!r||c&&!c.call(e)||(o=function(e){return function(t){return $(t.detail)?e.apply(void 0,[t].concat(t.detail)):e(t)}}(D(o)?e[o]:l(o,e)),u&&(o=function(e){return function(t){if(t.target===t.currentTarget||t.target===t.current)return e.call(null,t)}}(o)),e._events.push(Mt(r,t,h?D(h)?h:h.call(e):null,o,O(a)?{passive:a,capture:s}:s)))}function Zn(t,e){return t.every(function(t){return!t||!c(t,e)})}function Qn(t,e){return t===Boolean?L(e):t===Number?F(e):\"list\"===t?Y(e):t?t(e):e}Hn.util=Object.freeze({ajax:Kt,getImage:Gt,transition:qe,Transition:Ue,animate:Ge,Animation:Ze,attr:it,hasAttr:rt,removeAttr:ot,data:st,addClass:Ae,removeClass:Ce,removeClasses:Ne,replaceClass:_e,hasClass:Me,toggleClass:Oe,positionAt:tn,offset:en,position:rn,height:on,width:sn,boxModelAdjust:hn,flipPosition:dn,isInView:fn,scrolledOver:pn,scrollTop:mn,offsetPosition:gn,toPx:vn,ready:he,index:ce,getIndex:ue,empty:le,html:de,prepend:function(e,t){return(e=Se(e)).hasChildNodes()?ge(t,function(t){return e.insertBefore(t,e.firstChild)}):fe(e,t)},append:fe,before:pe,after:me,remove:ve,wrapAll:we,wrapInner:be,unwrap:ye,fragment:$e,apply:Ie,$:Se,$$:Te,isIE:Jt,isRtl:Zt,hasTouch:ee,pointerDown:ne,pointerMove:ie,pointerUp:re,pointerEnter:oe,pointerLeave:se,pointerCancel:ae,on:Mt,off:Ot,once:Dt,trigger:Bt,createEvent:zt,toEventTargets:Ft,isTouch:jt,getEventPos:Wt,fastdom:xn,isVoidElement:Tt,isVisible:Et,selInput:At,isInput:Ct,filter:Nt,within:_t,bind:l,hasOwn:c,hyphenate:d,camelize:f,ucfirst:p,startsWith:w,endsWith:u,includes:y,findIndex:k,isArray:$,isFunction:I,isObject:S,isPlainObject:T,isWindow:E,isDocument:A,isJQuery:C,isNode:N,isNodeCollection:M,isBoolean:O,isString:D,isNumber:B,isNumeric:z,isEmpty:P,isUndefined:H,toBoolean:L,toNumber:F,toFloat:j,toNode:W,toNodes:V,toList:Y,toMs:R,isEqual:q,swap:U,assign:X,each:K,sortBy:G,uniqueBy:J,clamp:Z,noop:Q,intersectRect:tt,pointInRect:et,Dimensions:nt,MouseTracker:Tn,mergeOptions:_n,parseOptions:Mn,Player:On,Promise:Yt,Deferred:Vt,IntersectionObserver:zn,query:at,queryAll:ht,find:ut,findAll:lt,matches:bt,closest:xt,parents:kt,escape:It,css:He,getStyles:Le,getStyle:Fe,getCssVar:We,propName:Ye}),Hn.data=\"__uikit__\",Hn.prefix=\"uk-\",Hn.options={},jn=(Ln=Hn).data,Ln.use=function(t){if(!t.installed)return t.call(null,this),t.installed=!0,this},Ln.mixin=function(t,e){(e=(D(e)?Ln.component(e):e)||this).options=_n(e.options,t)},Ln.extend=function(t){function e(t){this._init(t)}return t=t||{},((e.prototype=Object.create(this.prototype)).constructor=e).options=_n(this.options,t),e.super=this,e.extend=this.extend,e},Ln.update=function(t,e){(function t(e,n){e&&e!==document.body&&e.parentNode&&(t(e.parentNode,n),n(e.parentNode))})(t=t?W(t):document.body,function(t){return Xn(t[jn],e)}),Ie(t,function(t){return Xn(t[jn],e)})},Object.defineProperty(Ln,\"container\",{get:function(){return Fn||document.body},set:function(t){Fn=Se(t)}}),(Wn=Hn).prototype._callHook=function(t){var e=this,n=this.$options[t];n&&n.forEach(function(t){return t.call(e)})},Wn.prototype._callConnected=function(){this._connected||(this._data={},this._computeds={},this._initProps(),this._callHook(\"beforeConnect\"),this._connected=!0,this._initEvents(),this._initObserver(),this._callHook(\"connected\"),this._callUpdate())},Wn.prototype._callDisconnected=function(){this._connected&&(this._callHook(\"beforeDisconnect\"),this._observer&&(this._observer.disconnect(),this._observer=null),this._unbindEvents(),this._callHook(\"disconnected\"),this._connected=!1)},Wn.prototype._callUpdate=function(t){var o=this;void 0===t&&(t=\"update\");var s=t.type||t;y([\"update\",\"resize\"],s)&&this._callWatches();var e=this.$options.update,n=this._frames,a=n.reads,h=n.writes;e&&e.forEach(function(t,e){var n=t.read,i=t.write,r=t.events;\"update\"!==s&&!y(r,s)||(n&&!y(xn.reads,a[e])&&(a[e]=xn.read(function(){var t=o._connected&&n.call(o,o._data,s);!1===t&&i?xn.clear(h[e]):T(t)&&X(o._data,t)})),i&&!y(xn.writes,h[e])&&(h[e]=xn.write(function(){return o._connected&&i.call(o,o._data,s)})))})},Yn=0,(Vn=Hn).prototype._init=function(t){(t=t||{}).data=function(t,e){var n=t.data,i=(t.el,e.args),r=e.props;if(void 0===r&&(r={}),n=$(n)?P(i)?void 0:n.slice(0,i.length).reduce(function(t,e,n){return T(e)?X(t,e):t[i[n]]=e,t},{}):n)for(var o in n)H(n[o])?delete n[o]:n[o]=r[o]?Qn(r[o],n[o]):n[o];return n}(t,this.constructor.options),this.$options=_n(this.constructor.options,t,this),this.$el=null,this.$props={},this._frames={reads:{},writes:{}},this._events=[],this._uid=Yn++,this._initData(),this._initMethods(),this._initComputeds(),this._callHook(\"created\"),t.el&&this.$mount(t.el)},Vn.prototype._initData=function(){var t=this.$options.data;for(var e in void 0===t&&(t={}),t)this.$props[e]=this[e]=t[e]},Vn.prototype._initMethods=function(){var t=this.$options.methods;if(t)for(var e in t)this[e]=l(t[e],this)},Vn.prototype._initComputeds=function(){var t=this.$options.computed;if(this._computeds={},t)for(var e in t)Gn(this,e,t[e])},Vn.prototype._callWatches=function(){var t=this.$options.computed,e=this._computeds;for(var n in e){var i=e[n];delete e[n],t[n].watch&&!q(i,this[n])&&t[n].watch.call(this,this[n],i)}},Vn.prototype._initProps=function(t){var e;for(e in t=t||Kn(this.$options,this.$name))H(t[e])||(this.$props[e]=t[e]);var n=[this.$options.computed,this.$options.methods];for(e in this.$props)e in t&&Zn(n,e)&&(this[e]=this.$props[e])},Vn.prototype._initEvents=function(){var n=this,t=this.$options.events;t&&t.forEach(function(t){if(c(t,\"handler\"))Jn(n,t);else for(var e in t)Jn(n,t[e],e)})},Vn.prototype._unbindEvents=function(){this._events.forEach(function(t){return t()}),this._events=[]},Vn.prototype._initObserver=function(){var n=this,t=this.$options,i=t.attrs,e=t.props,r=t.el;if(!this._observer&&e&&!1!==i){i=$(i)?i:Object.keys(e),this._observer=new MutationObserver(function(){var e=Kn(n.$options,n.$name);i.some(function(t){return!H(e[t])&&e[t]!==n.$props[t]})&&n.$reset()});var o=i.map(function(t){return d(t)}).concat(this.$name);this._observer.observe(r,{attributes:!0,attributeFilter:o.concat(o.map(function(t){return\"data-\"+t}))})}},qn=(Rn=Hn).data,Un={},Rn.component=function(s,t){if(!t)return T(Un[s])&&(Un[s]=Rn.extend(Un[s])),Un[s];Rn[s]=function(t,n){for(var e=arguments.length,i=Array(e);e--;)i[e]=arguments[e];var r=Rn.component(s);return T(t)?new r({data:t}):r.options.functional?new r({data:[].concat(i)}):t&&t.nodeType?o(t):Te(t).map(o)[0];function o(t){var e=Rn.getComponent(t,s);if(e){if(!n)return e;e.$destroy()}return new r({el:t,data:n})}};var e=T(t)?X({},t):t.options;if(e.name=s,e.install&&e.install(Rn,e,s),Rn._initialized&&!e.functional){var n=d(s);xn.read(function(){return Rn[s](\"[uk-\"+n+\"],[data-uk-\"+n+\"]\")})}return Un[s]=T(t)?e:t},Rn.getComponents=function(t){return t&&t[qn]||{}},Rn.getComponent=function(t,e){return Rn.getComponents(t)[e]},Rn.connect=function(t){if(t[qn])for(var e in t[qn])t[qn][e]._callConnected();for(var n=0;n<t.attributes.length;n++){var i=Pn(t.attributes[n].name);i&&i in Un&&Rn[i](t)}},Rn.disconnect=function(t){for(var e in t[qn])t[qn][e]._callDisconnected()},function(i){var r=i.data;i.prototype.$mount=function(t){var e=this.$options.name;t[r]||(t[r]={}),t[r][e]||((t[r][e]=this).$el=this.$options.el=this.$options.el||t,_t(t,document)&&this._callConnected())},i.prototype.$emit=function(t){this._callUpdate(t)},i.prototype.$reset=function(){this._callDisconnected(),this._callConnected()},i.prototype.$destroy=function(t){void 0===t&&(t=!1);var e=this.$options,n=e.el,i=e.name;n&&this._callDisconnected(),this._callHook(\"destroy\"),n&&n[r]&&(delete n[r][i],P(n[r])||delete n[r],t&&ve(this.$el))},i.prototype.$create=function(t,e,n){return i[t](e,n)},i.prototype.$update=i.update,i.prototype.$getComponent=i.getComponent;var e={};Object.defineProperties(i.prototype,{$container:Object.getOwnPropertyDescriptor(i,\"container\"),$name:{get:function(){var t=this.$options.name;return e[t]||(e[t]=i.prefix+d(t)),e[t]}}})}(Hn);var ti={connected:function(){Me(this.$el,this.$name)||Ae(this.$el,this.$name)}},ei={props:{cls:Boolean,animation:\"list\",duration:Number,origin:String,transition:String,queued:Boolean},data:{cls:!1,animation:[!1],duration:200,origin:!1,transition:\"linear\",queued:!1,initProps:{overflow:\"\",height:\"\",paddingTop:\"\",paddingBottom:\"\",marginTop:\"\",marginBottom:\"\"},hideProps:{overflow:\"hidden\",height:0,paddingTop:0,paddingBottom:0,marginTop:0,marginBottom:0}},computed:{hasAnimation:function(t){return!!t.animation[0]},hasTransition:function(t){var e=t.animation;return this.hasAnimation&&!0===e[0]}},methods:{toggleElement:function(c,u,l){var d=this;return new Yt(function(t){c=V(c);function e(t){return Yt.all(t.map(function(t){return d._toggleElement(t,u,l)}))}var n,i=c.filter(function(t){return d.isToggled(t)}),r=c.filter(function(t){return!y(i,t)});if(d.queued&&H(l)&&H(u)&&d.hasAnimation&&!(c.length<2)){var o=document.body,s=o.scrollTop,a=i[0],h=Ze.inProgress(a)&&Me(a,\"uk-animation-leave\")||Ue.inProgress(a)&&\"0px\"===a.style.height;n=e(i),h||(n=n.then(function(){var t=e(r);return o.scrollTop=s,t}))}else n=e(r.concat(i));n.then(t,Q)})},toggleNow:function(e,n){var i=this;return new Yt(function(t){return Yt.all(V(e).map(function(t){return i._toggleElement(t,n,!1)})).then(t,Q)})},isToggled:function(t){var e=V(t||this.$el);return this.cls?Me(e,this.cls.split(\" \")[0]):!rt(e,\"hidden\")},updateAria:function(t){!1===this.cls&&it(t,\"aria-hidden\",!this.isToggled(t))},_toggleElement:function(t,e,n){var i=this;if(e=O(e)?e:Ze.inProgress(t)?Me(t,\"uk-animation-leave\"):Ue.inProgress(t)?\"0px\"===t.style.height:!this.isToggled(t),!Bt(t,\"before\"+(e?\"show\":\"hide\"),[this]))return Yt.reject();var r=(I(n)?n:!1!==n&&this.hasAnimation?this.hasTransition?function(t){var s=t.isToggled,a=t.duration,h=t.initProps,c=t.hideProps,u=t.transition,l=t._toggle;return function(t,e){var n=Ue.inProgress(t),i=t.hasChildNodes?j(He(t.firstElementChild,\"marginTop\"))+j(He(t.lastElementChild,\"marginBottom\")):0,r=Et(t)?on(t)+(n?0:i):0;Ue.cancel(t),s(t)||l(t,!0),on(t,\"\"),xn.flush();var o=on(t)+(n?0:i);return on(t,r),(e?Ue.start(t,X({},h,{overflow:\"hidden\",height:o}),Math.round(a*(1-r/o)),u):Ue.start(t,c,Math.round(a*(r/o)),u).then(function(){return l(t,!1)})).then(function(){return He(t,h)})}}(this):function(t){var n=t.animation,i=t.duration,r=t.origin,o=t._toggle;return function(t,e){return Ze.cancel(t),e?(o(t,!0),Ze.in(t,n[0],i,r)):Ze.out(t,n[1]||n[0],i,r).then(function(){return o(t,!1)})}}(this):this._toggle)(t,e);Bt(t,e?\"show\":\"hide\",[this]);function o(){Bt(t,e?\"shown\":\"hidden\",[i]),i.$update(t)}return r?r.then(o):Yt.resolve(o())},_toggle:function(t,e){var n;t&&(e=Boolean(e),this.cls?(n=y(this.cls,\" \")||e!==Me(t,this.cls))&&Oe(t,this.cls,y(this.cls,\" \")?void 0:e):(n=e===rt(t,\"hidden\"))&&it(t,\"hidden\",e?null:\"\"),Te(\"[autofocus]\",t).some(function(t){return Et(t)?t.focus()||!0:t.blur()}),this.updateAria(t),n&&this.$update(t))}}};var ni={mixins:[ti,ei],props:{targets:String,active:null,collapsible:Boolean,multiple:Boolean,toggle:String,content:String,transition:String},data:{targets:\"> *\",active:!1,animation:[!0],collapsible:!0,multiple:!1,clsOpen:\"uk-open\",toggle:\"> .uk-accordion-title\",content:\"> .uk-accordion-content\",transition:\"ease\"},computed:{items:function(t,e){return Te(t.targets,e)}},events:[{name:\"click\",delegate:function(){return this.targets+\" \"+this.$props.toggle},handler:function(t){t.preventDefault(),this.toggle(ce(Te(this.targets+\" \"+this.$props.toggle,this.$el),t.current))}}],connected:function(){if(!1!==this.active){var t=this.items[Number(this.active)];t&&!Me(t,this.clsOpen)&&this.toggle(t,!1)}},update:function(){var e=this;this.items.forEach(function(t){return e._toggle(Se(e.content,t),Me(t,e.clsOpen))});var t=!this.collapsible&&!Me(this.items,this.clsOpen)&&this.items[0];t&&this.toggle(t,!1)},methods:{toggle:function(r,o){var s=this,t=ue(r,this.items),a=Nt(this.items,\".\"+this.clsOpen);(r=this.items[t])&&[r].concat(!this.multiple&&!y(a,r)&&a||[]).forEach(function(t){var e=t===r,n=e&&!Me(t,s.clsOpen);if(n||!e||s.collapsible||!(a.length<2)){Oe(t,s.clsOpen,n);var i=t._wrapper?t._wrapper.firstElementChild:Se(s.content,t);t._wrapper||(t._wrapper=we(i,\"<div>\"),it(t._wrapper,\"hidden\",n?\"\":null)),s._toggle(i,!0),s.toggleElement(t._wrapper,n,o).then(function(){Me(t,s.clsOpen)===n&&(n||s._toggle(i,!1),t._wrapper=null,ye(i))})}})}}},ii={mixins:[ti,ei],args:\"animation\",props:{close:String},data:{animation:[!0],selClose:\".uk-alert-close\",duration:150,hideProps:X({opacity:0},ei.data.hideProps)},events:[{name:\"click\",delegate:function(){return this.selClose},handler:function(t){t.preventDefault(),this.close()}}],methods:{close:function(){var t=this;this.toggleElement(this.$el).then(function(){return t.$destroy(!0)})}}};function ri(r){he(function(){var n;r.update(),Mt(window,\"load resize\",function(){return r.update(null,\"resize\")}),Mt(document,\"loadedmetadata load\",function(t){var e=t.target;return r.update(e,\"resize\")},!0),Mt(window,\"scroll\",function(t){if(!n){n=!0,xn.write(function(){return n=!1});var e=t.target;r.update(1!==e.nodeType?document.body:e,t.type)}},{passive:!0,capture:!0});var e,i=0;Mt(document,\"animationstart\",function(t){var e=t.target;(He(e,\"animationName\")||\"\").match(/^uk-.*(left|right)/)&&(i++,He(document.body,\"overflowX\",\"hidden\"),setTimeout(function(){--i||He(document.body,\"overflowX\",\"\")},R(He(e,\"animationDuration\"))+100))},!0),Mt(document,ne,function(t){if(e&&e(),jt(t)){var r=Wt(t),o=\"tagName\"in t.target?t.target:t.target.parentNode;e=Dt(document,re,function(t){var e=Wt(t),n=e.x,i=e.y;(o&&n&&100<Math.abs(r.x-n)||i&&100<Math.abs(r.y-i))&&setTimeout(function(){Bt(o,\"swipe\"),Bt(o,\"swipe\"+function(t,e,n,i){return Math.abs(t-n)>=Math.abs(e-i)?0<t-n?\"Left\":\"Right\":0<e-i?\"Up\":\"Down\"}(r.x,r.y,n,i))})})}},{passive:!0})})}var oi,si,ai={args:\"autoplay\",props:{automute:Boolean,autoplay:Boolean},data:{automute:!1,autoplay:!0},computed:{inView:function(t){return\"inview\"===t.autoplay}},connected:function(){this.inView&&!rt(this.$el,\"preload\")&&(this.$el.preload=\"none\"),this.player=new On(this.$el),this.automute&&this.player.mute()},update:{read:function(){return!!this.player&&{visible:Et(this.$el)&&\"hidden\"!==He(this.$el,\"visibility\"),inView:this.inView&&fn(this.$el)}},write:function(t){var e=t.visible,n=t.inView;!e||this.inView&&!n?this.player.pause():(!0===this.autoplay||this.inView&&n)&&this.player.play()},events:[\"resize\",\"scroll\"]}},hi={mixins:[ti,ai],props:{width:Number,height:Number},data:{automute:!0},update:{read:function(){var t=this.$el;if(!Et(t))return!1;var e=t.parentNode;return{height:e.offsetHeight,width:e.offsetWidth}},write:function(t){var e=t.height,n=t.width,i=this.$el,r=this.width||i.naturalWidth||i.videoWidth||i.clientWidth,o=this.height||i.naturalHeight||i.videoHeight||i.clientHeight;r&&o&&He(i,nt.cover({width:r,height:o},{width:n+(n%2?1:0),height:e+(e%2?1:0)}))},events:[\"resize\"]}},ci={props:{pos:String,offset:null,flip:Boolean,clsPos:String},data:{pos:\"bottom-\"+(Zt?\"right\":\"left\"),flip:!0,offset:!1,clsPos:\"\"},computed:{pos:function(t){var e=t.pos;return(e+(y(e,\"-\")?\"\":\"-center\")).split(\"-\")},dir:function(){return this.pos[0]},align:function(){return this.pos[1]}},methods:{positionAt:function(t,e,n){var i;Ne(t,this.clsPos+\"-(top|bottom|left|right)(-[a-z]+)?\"),He(t,{top:\"\",left:\"\"});var r=this.offset,o=this.getAxis();z(r)||(r=(i=Se(r))?en(i)[\"x\"===o?\"left\":\"top\"]-en(e)[\"x\"===o?\"right\":\"bottom\"]:0);var s=tn(t,e,\"x\"===o?dn(this.dir)+\" \"+this.align:this.align+\" \"+dn(this.dir),\"x\"===o?this.dir+\" \"+this.align:this.align+\" \"+this.dir,\"x\"===o?\"\"+(\"left\"===this.dir?-r:r):\" \"+(\"top\"===this.dir?-r:r),null,this.flip,n).target,a=s.x,h=s.y;this.dir=\"x\"===o?a:h,this.align=\"x\"===o?h:a,Oe(t,this.clsPos+\"-\"+this.dir+\"-\"+this.align,!1===this.offset)},getAxis:function(){return\"top\"===this.dir||\"bottom\"===this.dir?\"y\":\"x\"}}},ui={mixins:[ci,ei],args:\"pos\",props:{mode:\"list\",toggle:Boolean,boundary:Boolean,boundaryAlign:Boolean,delayShow:Number,delayHide:Number,clsDrop:String},data:{mode:[\"click\",\"hover\"],toggle:\"- *\",boundary:window,boundaryAlign:!1,delayShow:0,delayHide:800,clsDrop:!1,hoverIdle:200,animation:[\"uk-animation-fade\"],cls:\"uk-open\"},computed:{boundary:function(t,e){return at(t.boundary,e)},clsDrop:function(t){return t.clsDrop||\"uk-\"+this.$options.name},clsPos:function(){return this.clsDrop}},created:function(){this.tracker=new Tn},connected:function(){Ae(this.$el,this.clsDrop);var t=this.$props.toggle;this.toggle=t&&this.$create(\"toggle\",at(t,this.$el),{target:this.$el,mode:this.mode}),this.toggle||Bt(this.$el,\"updatearia\")},events:[{name:\"click\",delegate:function(){return\".\"+this.clsDrop+\"-close\"},handler:function(t){t.preventDefault(),this.hide(!1)}},{name:\"click\",delegate:function(){return'a[href^=\"#\"]'},handler:function(t){var e=t.target.hash;e||t.preventDefault(),e&&_t(e,this.$el)||this.hide(!1)}},{name:\"beforescroll\",handler:function(){this.hide(!1)}},{name:\"toggle\",self:!0,handler:function(t,e){t.preventDefault(),this.isToggled()?this.hide(!1):this.show(e,!1)}},{name:oe,filter:function(){return y(this.mode,\"hover\")},handler:function(t){jt(t)||(oi&&oi!==this&&oi.toggle&&y(oi.toggle.mode,\"hover\")&&!_t(t.target,oi.toggle.$el)&&!et({x:t.pageX,y:t.pageY},en(oi.$el))&&oi.hide(!1),t.preventDefault(),this.show(this.toggle))}},{name:\"toggleshow\",handler:function(t,e){e&&!y(e.target,this.$el)||(t.preventDefault(),this.show(e||this.toggle))}},{name:\"togglehide \"+se,handler:function(t,e){jt(t)||e&&!y(e.target,this.$el)||(t.preventDefault(),this.toggle&&y(this.toggle.mode,\"hover\")&&this.hide())}},{name:\"beforeshow\",self:!0,handler:function(){this.clearTimers(),Ze.cancel(this.$el),this.position()}},{name:\"show\",self:!0,handler:function(){this.tracker.init(),Bt(this.$el,\"updatearia\"),function(){if(si)return;si=!0,Mt(document,re,function(t){var e,n=t.target;if(!t.defaultPrevented)for(;oi&&oi!==e&&!_t(n,oi.$el)&&(!oi.toggle||!_t(n,oi.toggle.$el));)(e=oi).hide(!1)})}()}},{name:\"beforehide\",self:!0,handler:function(){this.clearTimers()}},{name:\"hide\",handler:function(t){var e=t.target;this.$el===e?(oi=this.isActive()?null:oi,Bt(this.$el,\"updatearia\"),this.tracker.cancel()):oi=null===oi&&_t(e,this.$el)&&this.isToggled()?this:oi}},{name:\"updatearia\",self:!0,handler:function(t,e){t.preventDefault(),this.updateAria(this.$el),(e||this.toggle)&&(it((e||this.toggle).$el,\"aria-expanded\",this.isToggled()?\"true\":\"false\"),Oe(this.toggle.$el,this.cls,this.isToggled()))}}],update:{write:function(){this.isToggled()&&!Ze.inProgress(this.$el)&&this.position()},events:[\"resize\"]},methods:{show:function(e,n){var i=this;void 0===n&&(n=!0);function r(){return!i.isToggled()&&i.toggleElement(i.$el,!0)}function t(){if(i.toggle=e||i.toggle,i.clearTimers(),!i.isActive())if(n&&oi&&oi!==i&&oi.isDelaying)i.showTimer=setTimeout(i.show,10);else{if(i.isParentOf(oi)){if(!oi.hideTimer)return;oi.hide(!1)}else if(oi&&i.isChildOf(oi))oi.clearTimers();else if(oi&&!i.isChildOf(oi)&&!i.isParentOf(oi))for(var t;oi&&oi!==t&&!i.isChildOf(oi);)(t=oi).hide(!1);n&&i.delayShow?i.showTimer=setTimeout(r,i.delayShow):r(),oi=i}}e&&this.toggle&&e.$el!==this.toggle.$el?(Dt(this.$el,\"hide\",t),this.hide(!1)):t()},hide:function(t){var e=this;void 0===t&&(t=!0);function n(){return e.toggleNow(e.$el,!1)}this.clearTimers(),this.isDelaying=this.tracker.movesTo(this.$el),t&&this.isDelaying?this.hideTimer=setTimeout(this.hide,this.hoverIdle):t&&this.delayHide?this.hideTimer=setTimeout(n,this.delayHide):n()},clearTimers:function(){clearTimeout(this.showTimer),clearTimeout(this.hideTimer),this.showTimer=null,this.hideTimer=null,this.isDelaying=!1},isActive:function(){return oi===this},isChildOf:function(t){return t&&t!==this&&_t(this.$el,t.$el)},isParentOf:function(t){return t&&t!==this&&_t(t.$el,this.$el)},position:function(){Ne(this.$el,this.clsDrop+\"-(stack|boundary)\"),He(this.$el,{top:\"\",left:\"\",display:\"block\"}),Oe(this.$el,this.clsDrop+\"-boundary\",this.boundaryAlign);var t=en(this.boundary),e=this.boundaryAlign?t:en(this.toggle.$el);if(\"justify\"===this.align){var n=\"y\"===this.getAxis()?\"width\":\"height\";He(this.$el,n,e[n])}else this.$el.offsetWidth>Math.max(t.right-e.left,e.right-t.left)&&Ae(this.$el,this.clsDrop+\"-stack\");this.positionAt(this.$el,this.boundaryAlign?this.boundary:this.toggle.$el,this.boundary),He(this.$el,\"display\",\"\")}}};var li={extends:ui},di={mixins:[ti],args:\"target\",props:{target:Boolean},data:{target:!1},computed:{input:function(t,e){return Se(At,e)},state:function(){return this.input.nextElementSibling},target:function(t,e){var n=t.target;return n&&(!0===n&&this.input.parentNode===e&&this.input.nextElementSibling||at(n,e))}},update:function(){var t=this.target,e=this.input;if(t){var n,i=Ct(t)?\"value\":\"textContent\",r=t[i],o=e.files&&e.files[0]?e.files[0].name:bt(e,\"select\")&&(n=Te(\"option\",e).filter(function(t){return t.selected})[0])?n.textContent:e.value;r!==o&&(t[i]=o)}},events:[{name:\"change\",handler:function(){this.$emit()}},{name:\"reset\",el:function(){return xt(this.$el,\"form\")},handler:function(){this.$emit()}}]},fi={update:{read:function(t){var e=fn(this.$el);if(!e||t.isInView===e)return!1;t.isInView=e},write:function(){this.$el.src=this.$el.src},events:[\"scroll\",\"resize\"]}},pi={props:{margin:String,firstColumn:Boolean},data:{margin:\"uk-margin-small-top\",firstColumn:\"uk-first-column\"},update:{read:function(t){var e=this.$el.children;if(!e.length||!Et(this.$el))return t.rows=[[]];t.rows=mi(e),t.stacks=!t.rows.some(function(t){return 1<t.length})},write:function(t){var i=this;t.rows.forEach(function(t,n){return t.forEach(function(t,e){Oe(t,i.margin,0!==n),Oe(t,i.firstColumn,0===e)})})},events:[\"resize\"]}};function mi(t){for(var e=[[]],n=0;n<t.length;n++){var i=t[n],r=gi(i);if(r.height)for(var o=e.length-1;0<=o;o--){var s=e[o];if(!s[0]){s.push(i);break}var a=void 0;if(a=s[0].offsetParent===i.offsetParent?gi(s[0]):(r=gi(i,!0),gi(s[0],!0)),r.top>=a.bottom-1){e.push([i]);break}if(r.bottom>a.top){if(r.left<a.left&&!Zt){s.unshift(i);break}s.push(i);break}if(0===o){e.unshift([i]);break}}}return e}function gi(t,e){var n;void 0===e&&(e=!1);var i=t.offsetTop,r=t.offsetLeft,o=t.offsetHeight;return e&&(i=(n=gn(t))[0],r=n[1]),{top:i,left:r,height:o,bottom:i+o}}var vi={extends:pi,mixins:[ti],name:\"grid\",props:{masonry:Boolean,parallax:Number},data:{margin:\"uk-grid-margin\",clsStack:\"uk-grid-stack\",masonry:!1,parallax:0},computed:{length:function(t,e){return e.children.length},parallax:function(t){var e=t.parallax;return e&&this.length?Math.abs(e):\"\"}},connected:function(){this.masonry&&Ae(this.$el,\"uk-flex-top uk-flex-wrap-top\")},update:[{read:function(t){var r=t.rows;(this.masonry||this.parallax)&&(r=r.map(function(t){return G(t,\"offsetLeft\")}),Zt&&r.map(function(t){return t.reverse()}));var e=r.some(function(t){return t.some(Ue.inProgress)}),n=!1,i=\"\";if(this.masonry&&this.length){var o=0;n=r.reduce(function(n,t,i){return n[i]=t.map(function(t,e){return 0===i?0:j(n[i-1][e])+(o-j(r[i-1][e]&&r[i-1][e].offsetHeight))}),o=t.reduce(function(t,e){return Math.max(t,e.offsetHeight)},0),n},[]),i=function(t){return Math.max.apply(Math,t.reduce(function(n,t){return t.forEach(function(t,e){return n[e]=(n[e]||0)+t.offsetHeight}),n},[]))}(r)+function(t,e){var n=V(t.children),i=n.filter(function(t){return Me(t,e)})[0];return j(i?He(i,\"marginTop\"):He(n[0],\"paddingLeft\"))}(this.$el,this.margin)*(r.length-1)}return{rows:r,translates:n,height:!e&&i}},write:function(t){var e=t.stacks,n=t.height;Oe(this.$el,this.clsStack,e),He(this.$el,\"paddingBottom\",this.parallax),!1!==n&&He(this.$el,\"height\",n)},events:[\"resize\"]},{read:function(t){var e=t.height;return{scrolled:!!this.parallax&&pn(this.$el,e?e-on(this.$el):0)*this.parallax}},write:function(t){var e=t.rows,i=t.scrolled,r=t.translates;!1===i&&!r||e.forEach(function(t,n){return t.forEach(function(t,e){return He(t,\"transform\",i||r?\"translateY(\"+((r&&-r[n][e])+(i?e%2?i:i/8:0))+\"px)\":\"\")})})},events:[\"scroll\",\"resize\"]}]};var wi=Jt?{data:{selMinHeight:!1,forceHeight:!1},computed:{elements:function(t,e){var n=t.selMinHeight;return n?Te(n,e):[e]}},update:[{read:function(){He(this.elements,\"height\",\"\")},order:-5,events:[\"resize\"]},{write:function(){var n=this;this.elements.forEach(function(t){var e=j(He(t,\"minHeight\"));e&&(n.forceHeight||Math.round(e+hn(\"height\",t,\"content-box\"))>=t.offsetHeight)&&He(t,\"height\",e)})},order:5,events:[\"resize\"]}]}:{},bi={mixins:[wi],args:\"target\",props:{target:String,row:Boolean},data:{target:\"> *\",row:!0,forceHeight:!0},computed:{elements:function(t,e){return Te(t.target,e)}},update:{read:function(){return{rows:(this.row?mi(this.elements):[this.elements]).map(yi)}},write:function(t){t.rows.forEach(function(t){var n=t.heights;return t.elements.forEach(function(t,e){return He(t,\"minHeight\",n[e])})})},events:[\"resize\"]}};function yi(t){var e;if(t.length<2)return{heights:[\"\"],elements:t};var n=xi(t),i=n.heights,r=n.max,o=t.some(function(t){return t.style.minHeight}),s=t.some(function(t,e){return!t.style.minHeight&&i[e]<r});return o&&s&&(He(t,\"minHeight\",\"\"),e=xi(t),i=e.heights,r=e.max),{heights:i=t.map(function(t,e){return i[e]===r&&j(t.style.minHeight).toFixed(2)!==r.toFixed(2)?\"\":r}),elements:t}}function xi(t){var e=t.map(function(t){return en(t).height-hn(\"height\",t,\"content-box\")});return{heights:e,max:Math.max.apply(null,e)}}var ki={mixins:[wi],props:{expand:Boolean,offsetTop:Boolean,offsetBottom:Boolean,minHeight:Number},data:{expand:!1,offsetTop:!1,offsetBottom:!1,minHeight:0},update:{read:function(t){var e=t.minHeight,n=\"\",i=hn(\"height\",this.$el,\"content-box\");if(this.expand)n=on(window)-($i(document.documentElement)-$i(this.$el))-i||\"\";else{if(n=\"calc(100vh\",this.offsetTop){var r=en(this.$el).top;n+=r<on(window)/2?\" - \"+r+\"px\":\"\"}!0===this.offsetBottom?n+=\" - \"+$i(this.$el.nextElementSibling)+\"px\":z(this.offsetBottom)?n+=\" - \"+this.offsetBottom+\"vh\":this.offsetBottom&&u(this.offsetBottom,\"px\")?n+=\" - \"+j(this.offsetBottom)+\"px\":D(this.offsetBottom)&&(n+=\" - \"+$i(at(this.offsetBottom,this.$el))+\"px\"),n+=(i?\" - \"+i+\"px\":\"\")+\")\"}return{minHeight:n,prev:e}},write:function(t){var e=t.minHeight,n=t.prev;He(this.$el,{minHeight:e}),e!==n&&this.$update(this.$el,\"resize\"),this.minHeight&&j(He(this.$el,\"minHeight\"))<this.minHeight&&He(this.$el,\"minHeight\",this.minHeight)},events:[\"resize\"]}};function $i(t){return t&&t.offsetHeight||0}var Ii={args:\"src\",props:{id:Boolean,icon:String,src:String,style:String,width:Number,height:Number,ratio:Number,class:String,strokeAnimation:Boolean,attributes:\"list\"},data:{ratio:1,include:[\"style\",\"class\"],class:\"\",strokeAnimation:!1},beforeConnect:function(){var t,e=this;if(this.class+=\" uk-svg\",!this.icon&&y(this.src,\"#\")){var n=this.src.split(\"#\");1<n.length&&(t=n,this.src=t[0],this.icon=t[1])}this.svg=this.getSvg().then(function(t){return e.applyAttributes(t),e.svgEl=function(t,e){{if(Tt(e)||\"CANVAS\"===e.tagName){it(e,\"hidden\",!0);var n=e.nextElementSibling;return Ci(t,n)?n:me(e,t)}var i=e.lastElementChild;return Ci(t,i)?i:fe(e,t)}}(t,e.$el)},Q)},disconnected:function(){var e=this;Tt(this.$el)&&it(this.$el,\"hidden\",null),this.svg&&this.svg.then(function(t){return(!e._connected||t!==e.svgEl)&&ve(t)},Q),this.svg=this.svgEl=null},update:{read:function(){return!!(this.strokeAnimation&&this.svgEl&&Et(this.svgEl))},write:function(){!function(t){var e=Ai(t);e&&t.style.setProperty(\"--uk-animation-stroke\",e)}(this.svgEl)},type:[\"resize\"]},methods:{getSvg:function(){var e=this;return function(n){if(Si[n])return Si[n];return Si[n]=new Yt(function(e,t){n?w(n,\"data:\")?e(decodeURIComponent(n.split(\",\")[1])):Kt(n).then(function(t){return e(t.response)},function(){return t(\"SVG not found.\")}):t()})}(this.src).then(function(t){return function(t,e){e&&y(t,\"<symbol\")&&(t=function(t,e){if(!Ei[t]){var n;for(Ei[t]={};n=Ti.exec(t);)Ei[t][n[3]]='<svg xmlns=\"http://www.w3.org/2000/svg\"'+n[1]+\"svg>\";Ti.lastIndex=0}return Ei[t][e]}(t,e)||t);return(t=Se(t.substr(t.indexOf(\"<svg\"))))&&t.hasChildNodes()&&t}(t,e.icon)||Yt.reject(\"SVG not found.\")})},applyAttributes:function(n){var i=this;for(var t in this.$options.props)this[t]&&y(this.include,t)&&it(n,t,this[t]);for(var e in this.attributes){var r=this.attributes[e].split(\":\",2),o=r[0],s=r[1];it(n,o,s)}this.id||ot(n,\"id\");var a=[\"width\",\"height\"],h=[this.width,this.height];h.some(function(t){return t})||(h=a.map(function(t){return it(n,t)}));var c=it(n,\"viewBox\");c&&!h.some(function(t){return t})&&(h=c.split(\" \").slice(2)),h.forEach(function(t,e){(t=(0|t)*i.ratio)&&it(n,a[e],t),t&&!h[1^e]&&ot(n,a[1^e])}),it(n,\"data-svg\",this.icon||this.src)}}},Si={};var Ti=/<symbol(.*?id=(['\"])(.*?)\\2[^]*?<\\/)symbol>/g,Ei={};function Ai(t){return Math.ceil(Math.max.apply(Math,Te(\"[stroke]\",t).map(function(t){return t.getTotalLength&&t.getTotalLength()||0}).concat([0])))}function Ci(t,e){return it(t,\"data-svg\")===it(e,\"data-svg\")}var Ni={},_i={spinner:'<svg width=\"30\" height=\"30\" viewBox=\"0 0 30 30\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" cx=\"15\" cy=\"15\" r=\"14\"/></svg>',totop:'<svg width=\"18\" height=\"10\" viewBox=\"0 0 18 10\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"1 9 9 1 17 9 \"/></svg>',marker:'<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"9\" y=\"4\" width=\"1\" height=\"11\"/><rect x=\"4\" y=\"9\" width=\"11\" height=\"1\"/></svg>',\"close-icon\":'<svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" xmlns=\"http://www.w3.org/2000/svg\"><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"1\" y1=\"1\" x2=\"13\" y2=\"13\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"13\" y1=\"1\" x2=\"1\" y2=\"13\"/></svg>',\"close-large\":'<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" x1=\"1\" y1=\"1\" x2=\"19\" y2=\"19\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" x1=\"19\" y1=\"1\" x2=\"1\" y2=\"19\"/></svg>',\"navbar-toggle-icon\":'<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><rect y=\"9\" width=\"20\" height=\"2\"/><rect y=\"3\" width=\"20\" height=\"2\"/><rect y=\"15\" width=\"20\" height=\"2\"/></svg>',\"overlay-icon\":'<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"19\" y=\"0\" width=\"1\" height=\"40\"/><rect x=\"0\" y=\"19\" width=\"40\" height=\"1\"/></svg>',\"pagination-next\":'<svg width=\"7\" height=\"12\" viewBox=\"0 0 7 12\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"1 1 6 6 1 11\"/></svg>',\"pagination-previous\":'<svg width=\"7\" height=\"12\" viewBox=\"0 0 7 12\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.2\" points=\"6 1 1 6 6 11\"/></svg>',\"search-icon\":'<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"9\" cy=\"9\" r=\"7\"/><path fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" d=\"M14,14 L18,18 L14,14 Z\"/></svg>',\"search-large\":'<svg width=\"40\" height=\"40\" viewBox=\"0 0 40 40\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.8\" cx=\"17.5\" cy=\"17.5\" r=\"16.5\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.8\" x1=\"38\" y1=\"39\" x2=\"29\" y2=\"30\"/></svg>',\"search-navbar\":'<svg width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\"><circle fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" cx=\"10.5\" cy=\"10.5\" r=\"9.5\"/><line fill=\"none\" stroke=\"#000\" stroke-width=\"1.1\" x1=\"23\" y1=\"23\" x2=\"17\" y2=\"17\"/></svg>',\"slidenav-next\":'<svg width=\"14px\" height=\"24px\" viewBox=\"0 0 14 24\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" points=\"1.225,23 12.775,12 1.225,1 \"/></svg>',\"slidenav-next-large\":'<svg width=\"25px\" height=\"40px\" viewBox=\"0 0 25 40\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"2\" points=\"4.002,38.547 22.527,20.024 4,1.5 \"/></svg>',\"slidenav-previous\":'<svg width=\"14px\" height=\"24px\" viewBox=\"0 0 14 24\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"1.4\" points=\"12.775,1 1.225,12 12.775,23 \"/></svg>',\"slidenav-previous-large\":'<svg width=\"25px\" height=\"40px\" viewBox=\"0 0 25 40\" xmlns=\"http://www.w3.org/2000/svg\"><polyline fill=\"none\" stroke=\"#000\" stroke-width=\"2\" points=\"20.527,1.5 2,20.024 20.525,38.547 \"/></svg>'},Mi={install:function(r){r.icon.add=function(t,e){var n,i=D(t)?((n={})[t]=e,n):t;K(i,function(t,e){_i[e]=t,delete Ni[e]}),r._initialized&&Ie(document.body,function(t){return K(r.getComponents(t),function(t){t.$options.isIcon&&t.icon in i&&t.$reset()})})}},extends:Ii,args:\"icon\",props:[\"icon\"],data:{include:[]},isIcon:!0,beforeConnect:function(){Ae(this.$el,\"uk-icon\")},methods:{getSvg:function(){var t=function(t){if(!_i[t])return null;Ni[t]||(Ni[t]=Se(_i[t].trim()));return Ni[t].cloneNode(!0)}(function(t){return Zt?U(U(t,\"left\",\"right\"),\"previous\",\"next\"):t}(this.icon));return t?Yt.resolve(t):Yt.reject(\"Icon not found.\")}}},Oi={args:!1,extends:Mi,data:function(t){return{icon:d(t.constructor.options.name)}},beforeConnect:function(){Ae(this.$el,this.$name)}},Di={extends:Oi,beforeConnect:function(){Ae(this.$el,\"uk-slidenav\")},computed:{icon:function(t,e){var n=t.icon;return Me(e,\"uk-slidenav-large\")?n+\"-large\":n}}},Bi={extends:Oi,computed:{icon:function(t,e){var n=t.icon;return Me(e,\"uk-search-icon\")&&kt(e,\".uk-search-large\").length?\"search-large\":kt(e,\".uk-search-navbar\").length?\"search-navbar\":n}}},zi={extends:Oi,computed:{icon:function(){return\"close-\"+(Me(this.$el,\"uk-close-large\")?\"large\":\"icon\")}}},Pi={extends:Oi,connected:function(){var e=this;this.svg.then(function(t){return 1!==e.ratio&&He(Se(\"circle\",t),\"strokeWidth\",1/e.ratio)},Q)}};var Hi={args:\"dataSrc\",props:{dataSrc:String,dataSrcset:Boolean,sizes:String,width:Number,height:Number,offsetTop:String,offsetLeft:String,target:String},data:{dataSrc:\"\",dataSrcset:!1,sizes:!1,width:!1,height:!1,offsetTop:\"50vh\",offsetLeft:0,target:!1},computed:{cacheKey:function(t){var e=t.dataSrc;return this.$name+\".\"+e},width:function(t){var e=t.width,n=t.dataWidth;return e||n},height:function(t){var e=t.height,n=t.dataHeight;return e||n},sizes:function(t){var e=t.sizes,n=t.dataSizes;return e||n},isImg:function(t,e){return Ri(e)},target:{get:function(t){var e=t.target;return[this.$el].concat(ht(e,this.$el))},watch:function(){this.observe()}},offsetTop:function(t){return vn(t.offsetTop,\"height\")},offsetLeft:function(t){return vn(t.offsetLeft,\"width\")}},connected:function(){Ui[this.cacheKey]?Li(this.$el,Ui[this.cacheKey]||this.dataSrc,this.dataSrcset,this.sizes):this.isImg&&this.width&&this.height&&Li(this.$el,function(t,e,n){var i;n&&(i=nt.ratio({width:t,height:e},\"width\",vn(ji(n))),t=i.width,e=i.height);return'data:image/svg+xml;utf8,<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"'+t+'\" height=\"'+e+'\"></svg>'}(this.width,this.height,this.sizes)),this.observer=new zn(this.load,{rootMargin:this.offsetTop+\"px \"+this.offsetLeft+\"px\"}),requestAnimationFrame(this.observe)},disconnected:function(){this.observer.disconnect()},update:{read:function(t){var e=this,n=t.image;if(n||\"complete\"!==document.readyState||this.load(this.observer.takeRecords()),this.isImg)return!1;n&&n.then(function(t){return t&&\"\"!==t.currentSrc&&Li(e.$el,qi(t))})},write:function(t){if(this.dataSrcset&&1!==window.devicePixelRatio){var e=He(this.$el,\"backgroundSize\");!e.match(/^(auto\\s?)+$/)&&j(e)!==t.bgSize||(t.bgSize=function(t,e){var n=vn(ji(e)),i=(t.match(Yi)||[]).map(j).sort(function(t,e){return t-e});return i.filter(function(t){return n<=t})[0]||i.pop()||\"\"}(this.dataSrcset,this.sizes),He(this.$el,\"backgroundSize\",t.bgSize+\"px\"))}},events:[\"resize\"]},methods:{load:function(t){var e=this;t.some(function(t){return t.isIntersecting})&&(this._data.image=Gt(this.dataSrc,this.dataSrcset,this.sizes).then(function(t){return Li(e.$el,qi(t),t.srcset,t.sizes),Ui[e.cacheKey]=qi(t),t},Q),this.observer.disconnect())},observe:function(){var e=this;!this._data.image&&this._connected&&this.target.forEach(function(t){return e.observer.observe(t)})}}};function Li(t,e,n,i){if(Ri(t))i&&(t.sizes=i),n&&(t.srcset=n),e&&(t.src=e);else if(e){!y(t.style.backgroundImage,e)&&(He(t,\"backgroundImage\",\"url(\"+It(e)+\")\"),Bt(t,zt(\"load\",!1)))}}var Fi=/\\s*(.*?)\\s*(\\w+|calc\\(.*?\\))\\s*(?:,|$)/g;function ji(t){var e,n;for(Fi.lastIndex=0;e=Fi.exec(t);)if(!e[1]||window.matchMedia(e[1]).matches){e=w(n=e[2],\"calc\")?n.substring(5,n.length-1).replace(Wi,function(t){return vn(t)}).replace(/ /g,\"\").match(Vi).reduce(function(t,e){return t+ +e},0):n;break}return e||\"100vw\"}var Wi=/\\d+(?:\\w+|%)/g,Vi=/[+-]?(\\d+)/g;var Yi=/\\s+\\d+w\\s*(?:,|$)/g;function Ri(t){return\"IMG\"===t.tagName}function qi(t){return t.currentSrc||t.src}var Ui,Xi=\"__test__\";try{(Ui=window.sessionStorage||{})[Xi]=1,delete Ui[Xi]}catch(t){Ui={}}var Ki={props:{media:Boolean},data:{media:!1},computed:{matchMedia:function(){var t=function(t){if(D(t)){if(\"@\"===t[0])t=j(We(\"breakpoint-\"+t.substr(1)));else if(isNaN(t))return t}return!(!t||isNaN(t))&&\"(min-width: \"+t+\"px)\"}(this.media);return!t||window.matchMedia(t).matches}}};var Gi,Ji,Zi={mixins:[ti,Ki],props:{fill:String},data:{fill:\"\",clsWrapper:\"uk-leader-fill\",clsHide:\"uk-leader-hide\",attrFill:\"data-fill\"},computed:{fill:function(t){return t.fill||We(\"leader-fill-content\")}},connected:function(){var t;t=be(this.$el,'<span class=\"'+this.clsWrapper+'\">'),this.wrapper=t[0]},disconnected:function(){ye(this.wrapper.childNodes)},update:{read:function(t){var e=t.changed,n=t.width,i=n;return{width:n=Math.floor(this.$el.offsetWidth/2),fill:this.fill,changed:e||i!==n,hide:!this.matchMedia}},write:function(t){Oe(this.wrapper,this.clsHide,t.hide),t.changed&&(t.changed=!1,it(this.wrapper,this.attrFill,new Array(t.width).join(t.fill)))},events:[\"resize\"]}},Qi={props:{container:Boolean},data:{container:!0},computed:{container:function(t){var e=t.container;return!0===e&&this.$container||e&&Se(e)}}},tr={mixins:[ti,Qi,ei],props:{selPanel:String,selClose:String,escClose:Boolean,bgClose:Boolean,stack:Boolean},data:{cls:\"uk-open\",escClose:!0,bgClose:!0,overlay:!0,stack:!1},computed:{panel:function(t,e){return Se(t.selPanel,e)},transitionElement:function(){return this.panel},bgClose:function(t){return t.bgClose&&this.panel}},beforeDisconnect:function(){this.isToggled()&&this.toggleNow(this.$el,!1)},events:[{name:\"click\",delegate:function(){return this.selClose},handler:function(t){t.preventDefault(),this.hide()}},{name:\"toggle\",self:!0,handler:function(t){t.defaultPrevented||(t.preventDefault(),this.toggle())}},{name:\"beforeshow\",self:!0,handler:function(t){var n=Gi&&Gi!==this&&Gi;Gi=this,n?this.stack?this.prev=n:((Gi=n).isToggled()?n.hide().then(this.show):Dt(n.$el,\"beforeshow hidden\",this.show,!1,function(t){var e=t.target;return\"hidden\"===t.type&&e===n.$el}),t.preventDefault()):function(){if(Ji)return;Ji=[Mt(document,re,function(t){var e=t.target,n=t.defaultPrevented;!Gi||!Gi.bgClose||n||Gi.overlay&&!_t(e,Gi.$el)||_t(e,Gi.panel)||Gi.hide()}),Mt(document,\"keydown\",function(t){27===t.keyCode&&Gi&&Gi.escClose&&(t.preventDefault(),Gi.hide())})]}()}},{name:\"show\",self:!0,handler:function(){Me(document.documentElement,this.clsPage)||(this.scrollbarWidth=sn(window)-sn(document),He(document.body,\"overflowY\",this.scrollbarWidth&&this.overlay?\"scroll\":\"\")),Ae(document.documentElement,this.clsPage)}},{name:\"hide\",self:!0,handler:function(){Gi&&(Gi!==this||this.prev)||(Ji&&Ji.forEach(function(t){return t()}),Ji=null)}},{name:\"hidden\",self:!0,handler:function(){var t,e=this.prev;if(Gi=Gi&&Gi!==this&&Gi||e)for(;e;){if(e.clsPage===this.clsPage){t=!0;break}e=e.prev}else He(document.body,\"overflowY\",\"\");t||Ce(document.documentElement,this.clsPage)}}],methods:{toggle:function(){return this.isToggled()?this.hide():this.show()},show:function(){var e=this;return this.isToggled()?Yt.resolve():this.container&&this.$el.parentNode!==this.container?(fe(this.container,this.$el),new Yt(function(t){return requestAnimationFrame(function(){return e.show().then(t)})})):this.toggleElement(this.$el,!0,er(this))},hide:function(){return this.isToggled()?this.toggleElement(this.$el,!1,er(this)):Yt.resolve()},getActive:function(){return Gi}}};function er(t){var r=t.transitionElement,o=t._toggle;return function(n,i){return new Yt(function(t,e){return Dt(n,\"show hide\",function(){n._reject&&n._reject(),n._reject=e,o(n,i),R(He(r,\"transitionDuration\"))?Dt(r,\"transitionend\",t,!1,function(t){return t.target===r}):t()})})}}var nr={install:function(a){a.modal.dialog=function(t,e){var n=a.modal(' <div class=\"uk-modal\"> <div class=\"uk-modal-dialog\">'+t+\"</div> </div> \",e);return n.show(),Mt(n.$el,\"hidden\",function(t){t.target===t.currentTarget&&Yt.resolve(function(){return n.$destroy(!0)})}),n},a.modal.alert=function(e,n){return n=X({bgClose:!1,escClose:!1,labels:a.modal.labels},n),new Yt(function(t){return Mt(a.modal.dialog(' <div class=\"uk-modal-body\">'+(D(e)?e:de(e))+'</div> <div class=\"uk-modal-footer uk-text-right\"> <button class=\"uk-button uk-button-primary uk-modal-close\" autofocus>'+n.labels.ok+\"</button> </div> \",n).$el,\"hide\",t)})},a.modal.confirm=function(r,o){return o=X({bgClose:!1,escClose:!0,labels:a.modal.labels},o),new Yt(function(e,t){var n=a.modal.dialog(' <form> <div class=\"uk-modal-body\">'+(D(r)?r:de(r))+'</div> <div class=\"uk-modal-footer uk-text-right\"> <button class=\"uk-button uk-button-default uk-modal-close\" type=\"button\">'+o.labels.cancel+'</button> <button class=\"uk-button uk-button-primary\" autofocus>'+o.labels.ok+\"</button> </div> </form> \",o),i=!1;Mt(n.$el,\"submit\",\"form\",function(t){t.preventDefault(),e(),i=!0,n.hide()}),Mt(n.$el,\"hide\",function(){i||t()})})},a.modal.prompt=function(t,o,s){return s=X({bgClose:!1,escClose:!0,labels:a.modal.labels},s),new Yt(function(e){var n=a.modal.dialog(' <form class=\"uk-form-stacked\"> <div class=\"uk-modal-body\"> <label>'+(D(t)?t:de(t))+'</label> <input class=\"uk-input\" autofocus> </div> <div class=\"uk-modal-footer uk-text-right\"> <button class=\"uk-button uk-button-default uk-modal-close\" type=\"button\">'+s.labels.cancel+'</button> <button class=\"uk-button uk-button-primary\">'+s.labels.ok+\"</button> </div> </form> \",s),i=Se(\"input\",n.$el);i.value=o;var r=!1;Mt(n.$el,\"submit\",\"form\",function(t){t.preventDefault(),e(i.value),r=!0,n.hide()}),Mt(n.$el,\"hide\",function(){r||e(null)})})},a.modal.labels={ok:\"Ok\",cancel:\"Cancel\"}},mixins:[tr],data:{clsPage:\"uk-modal-page\",selPanel:\".uk-modal-dialog\",selClose:\".uk-modal-close, .uk-modal-close-default, .uk-modal-close-outside, .uk-modal-close-full\"},events:[{name:\"show\",self:!0,handler:function(){Me(this.panel,\"uk-margin-auto-vertical\")?Ae(this.$el,\"uk-flex\"):He(this.$el,\"display\",\"block\"),on(this.$el)}},{name:\"hidden\",self:!0,handler:function(){He(this.$el,\"display\",\"\"),Ce(this.$el,\"uk-flex\")}}]};var ir={extends:ni,data:{targets:\"> .uk-parent\",toggle:\"> a\",content:\"> ul\"}},rr={mixins:[ti,wi],props:{dropdown:String,mode:\"list\",align:String,offset:Number,boundary:Boolean,boundaryAlign:Boolean,clsDrop:String,delayShow:Number,delayHide:Number,dropbar:Boolean,dropbarMode:String,dropbarAnchor:Boolean,duration:Number},data:{dropdown:\".uk-navbar-nav > li\",align:Zt?\"right\":\"left\",clsDrop:\"uk-navbar-dropdown\",mode:void 0,offset:void 0,delayShow:void 0,delayHide:void 0,boundaryAlign:void 0,flip:\"x\",boundary:!0,dropbar:!1,dropbarMode:\"slide\",dropbarAnchor:!1,duration:200,forceHeight:!0,selMinHeight:\".uk-navbar-nav > li > a, .uk-navbar-item, .uk-navbar-toggle\"},computed:{boundary:function(t,e){var n=t.boundary,i=t.boundaryAlign;return!0===n||i?e:n},dropbarAnchor:function(t,e){return at(t.dropbarAnchor,e)},pos:function(t){return\"bottom-\"+t.align},dropdowns:function(t,e){return Te(t.dropdown+\" .\"+t.clsDrop,e)}},beforeConnect:function(){var t=this.$props.dropbar;this.dropbar=t&&(at(t,this.$el)||Se(\"+ .uk-navbar-dropbar\",this.$el)||Se(\"<div></div>\")),this.dropbar&&(Ae(this.dropbar,\"uk-navbar-dropbar\"),\"slide\"===this.dropbarMode&&Ae(this.dropbar,\"uk-navbar-dropbar-slide\"))},disconnected:function(){this.dropbar&&ve(this.dropbar)},update:function(){var e=this;this.$create(\"drop\",this.dropdowns.filter(function(t){return!e.getDropdown(t)}),X({},this.$props,{boundary:this.boundary,pos:this.pos,offset:this.dropbar||this.offset}))},events:[{name:\"mouseover\",delegate:function(){return this.dropdown},handler:function(t){var e=t.current,n=this.getActive();n&&n.toggle&&!_t(n.toggle.$el,e)&&!n.tracker.movesTo(n.$el)&&n.hide(!1)}},{name:\"mouseleave\",el:function(){return this.dropbar},handler:function(){var t=this.getActive();t&&!this.dropdowns.some(function(t){return bt(t,\":hover\")})&&t.hide()}},{name:\"beforeshow\",capture:!0,filter:function(){return this.dropbar},handler:function(){this.dropbar.parentNode||me(this.dropbarAnchor||this.$el,this.dropbar)}},{name:\"show\",capture:!0,filter:function(){return this.dropbar},handler:function(t,e){var n=e.$el,i=e.dir;this.clsDrop&&Ae(n,this.clsDrop+\"-dropbar\"),\"bottom\"===i&&this.transitionTo(n.offsetHeight+j(He(n,\"marginTop\"))+j(He(n,\"marginBottom\")),n)}},{name:\"beforehide\",filter:function(){return this.dropbar},handler:function(t,e){var n=e.$el,i=this.getActive();bt(this.dropbar,\":hover\")&&i&&i.$el===n&&t.preventDefault()}},{name:\"hide\",filter:function(){return this.dropbar},handler:function(t,e){var n=e.$el,i=this.getActive();(!i||i&&i.$el===n)&&this.transitionTo(0)}}],methods:{getActive:function(){var t=this.dropdowns.map(this.getDropdown).filter(function(t){return t&&t.isActive()})[0];return t&&y(t.mode,\"hover\")&&_t(t.toggle.$el,this.$el)&&t},transitionTo:function(t,e){var n=this,i=this.dropbar,r=Et(i)?on(i):0;return He(e=r<t&&e,\"clip\",\"rect(0,\"+e.offsetWidth+\"px,\"+r+\"px,0)\"),on(i,r),Ue.cancel([e,i]),Yt.all([Ue.start(i,{height:t},this.duration),Ue.start(e,{clip:\"rect(0,\"+e.offsetWidth+\"px,\"+t+\"px,0)\"},this.duration)]).catch(Q).then(function(){He(e,{clip:\"\"}),n.$update(i)})},getDropdown:function(t){return this.$getComponent(t,\"drop\")||this.$getComponent(t,\"dropdown\")}}},or={mixins:[tr],args:\"mode\",props:{mode:String,flip:Boolean,overlay:Boolean},data:{mode:\"slide\",flip:!1,overlay:!1,clsPage:\"uk-offcanvas-page\",clsContainer:\"uk-offcanvas-container\",selPanel:\".uk-offcanvas-bar\",clsFlip:\"uk-offcanvas-flip\",clsContainerAnimation:\"uk-offcanvas-container-animation\",clsSidebarAnimation:\"uk-offcanvas-bar-animation\",clsMode:\"uk-offcanvas\",clsOverlay:\"uk-offcanvas-overlay\",selClose:\".uk-offcanvas-close\"},computed:{clsFlip:function(t){var e=t.flip,n=t.clsFlip;return e?n:\"\"},clsOverlay:function(t){var e=t.overlay,n=t.clsOverlay;return e?n:\"\"},clsMode:function(t){var e=t.mode;return t.clsMode+\"-\"+e},clsSidebarAnimation:function(t){var e=t.mode,n=t.clsSidebarAnimation;return\"none\"===e||\"reveal\"===e?\"\":n},clsContainerAnimation:function(t){var e=t.mode,n=t.clsContainerAnimation;return\"push\"!==e&&\"reveal\"!==e?\"\":n},transitionElement:function(t){return\"reveal\"===t.mode?this.panel.parentNode:this.panel}},events:[{name:\"click\",delegate:function(){return'a[href^=\"#\"]'},handler:function(t){var e=t.current;e.hash&&Se(e.hash,document.body)&&this.hide()}},{name:\"touchstart\",passive:!0,el:function(){return this.panel},handler:function(t){var e=t.targetTouches;1===e.length&&(this.clientY=e[0].clientY)}},{name:\"touchmove\",self:!0,passive:!1,filter:function(){return this.overlay},handler:function(t){t.cancelable&&t.preventDefault()}},{name:\"touchmove\",passive:!1,el:function(){return this.panel},handler:function(t){if(1===t.targetTouches.length){var e=event.targetTouches[0].clientY-this.clientY,n=this.panel,i=n.scrollTop,r=n.scrollHeight,o=n.clientHeight;(r<=o||0===i&&0<e||r-i<=o&&e<0)&&t.cancelable&&t.preventDefault()}}},{name:\"show\",self:!0,handler:function(){\"reveal\"!==this.mode||Me(this.panel.parentNode,this.clsMode)||(we(this.panel,\"<div>\"),Ae(this.panel.parentNode,this.clsMode)),He(document.documentElement,\"overflowY\",this.overlay?\"hidden\":\"\"),Ae(document.body,this.clsContainer,this.clsFlip),He(this.$el,\"display\",\"block\"),Ae(this.$el,this.clsOverlay),Ae(this.panel,this.clsSidebarAnimation,\"reveal\"!==this.mode?this.clsMode:\"\"),on(document.body),Ae(document.body,this.clsContainerAnimation),this.clsContainerAnimation&&(sr().content+=\",user-scalable=0\")}},{name:\"hide\",self:!0,handler:function(){Ce(document.body,this.clsContainerAnimation);var t=this.getActive();(\"none\"===this.mode||t&&t!==this&&t!==this.prev)&&Bt(this.panel,\"transitionend\")}},{name:\"hidden\",self:!0,handler:function(){this.clsContainerAnimation&&function(){var t=sr();t.content=t.content.replace(/,user-scalable=0$/,\"\")}(),\"reveal\"===this.mode&&ye(this.panel),Ce(this.panel,this.clsSidebarAnimation,this.clsMode),Ce(this.$el,this.clsOverlay),He(this.$el,\"display\",\"\"),Ce(document.body,this.clsContainer,this.clsFlip),He(document.documentElement,\"overflowY\",\"\")}},{name:\"swipeLeft swipeRight\",handler:function(t){this.isToggled()&&u(t.type,\"Left\")^this.flip&&this.hide()}}]};function sr(){return Se('meta[name=\"viewport\"]',document.head)||fe(document.head,'<meta name=\"viewport\">')}var ar={mixins:[ti],props:{selContainer:String,selContent:String},data:{selContainer:\".uk-modal\",selContent:\".uk-modal-dialog\"},computed:{container:function(t,e){return xt(e,t.selContainer)},content:function(t,e){return xt(e,t.selContent)}},connected:function(){He(this.$el,\"minHeight\",150)},update:{read:function(){return!(!this.content||!this.container)&&{current:j(He(this.$el,\"maxHeight\")),max:Math.max(150,on(this.container)-(en(this.content).height-on(this.$el)))}},write:function(t){var e=t.current,n=t.max;He(this.$el,\"maxHeight\",n),Math.round(e)!==Math.round(n)&&Bt(this.$el,\"resize\")},events:[\"resize\"]}},hr={props:[\"width\",\"height\"],connected:function(){Ae(this.$el,\"uk-responsive-width\")},update:{read:function(){return!!(Et(this.$el)&&this.width&&this.height)&&{width:sn(this.$el.parentNode),height:this.height}},write:function(t){on(this.$el,nt.contain({height:this.height,width:this.width},t).height)},events:[\"resize\"]}},cr={props:{duration:Number,offset:Number},data:{duration:1e3,offset:0},methods:{scrollTo:function(e){var n=this;e=e&&Se(e)||document.body;var t=on(document),i=on(window),r=en(e).top-this.offset;if(t<r+i&&(r=t-i),Bt(this.$el,\"beforescroll\",[this,e])){var o=Date.now(),s=window.pageYOffset,a=function(){var t=s+(r-s)*function(t){return.5*(1-Math.cos(Math.PI*t))}(Z((Date.now()-o)/n.duration));mn(window,t),t!==r?requestAnimationFrame(a):Bt(n.$el,\"scrolled\",[n,e])};a()}}},events:{click:function(t){t.defaultPrevented||(t.preventDefault(),this.scrollTo(It(decodeURIComponent(this.$el.hash)).substr(1)))}}};var ur={args:\"cls\",props:{cls:String,target:String,hidden:Boolean,offsetTop:Number,offsetLeft:Number,repeat:Boolean,delay:Number},data:function(){return{cls:!1,target:!1,hidden:!0,offsetTop:0,offsetLeft:0,repeat:!1,delay:0,inViewClass:\"uk-scrollspy-inview\"}},computed:{elements:function(t,e){var n=t.target;return n?Te(n,e):[e]}},update:[{write:function(){this.hidden&&He(Nt(this.elements,\":not(.\"+this.inViewClass+\")\"),\"visibility\",\"hidden\")}},{read:function(t){var n=this;t.update&&this.elements.forEach(function(t){var e=t._ukScrollspyState;(e=e||{cls:st(t,\"uk-scrollspy-class\")||n.cls}).show=fn(t,n.offsetTop,n.offsetLeft),t._ukScrollspyState=e})},write:function(r){var o=this;if(!r.update)return this.$emit(),r.update=!0;this.elements.forEach(function(t){var n=t._ukScrollspyState,e=n.cls;if(!n.show||n.inview||n.queued){if(!n.show&&(n.inview||n.queued)&&o.repeat){if(n.abort&&n.abort(),!n.inview)return;He(t,\"visibility\",o.hidden?\"hidden\":\"\"),Ce(t,o.inViewClass),Oe(t,e),Bt(t,\"outview\"),o.$update(t),n.inview=!1}}else{var i=function(){He(t,\"visibility\",\"\"),Ae(t,o.inViewClass),Oe(t,e),Bt(t,\"inview\"),o.$update(t),n.inview=!0,n.abort&&n.abort()};o.delay?(n.queued=!0,r.promise=(r.promise||Yt.resolve()).then(function(){return!n.inview&&new Yt(function(t){var e=setTimeout(function(){i(),t()},r.promise||1===o.elements.length?o.delay:0);n.abort=function(){clearTimeout(e),t(),n.queued=!1}})})):i()}})},events:[\"scroll\",\"resize\"]}]},lr={props:{cls:String,closest:String,scroll:Boolean,overflow:Boolean,offset:Number},data:{cls:\"uk-active\",closest:!1,scroll:!1,overflow:!0,offset:0},computed:{links:function(t,e){return Te('a[href^=\"#\"]',e).filter(function(t){return t.hash})},elements:function(t){var e=t.closest;return xt(this.links,e||\"*\")},targets:function(){return Te(this.links.map(function(t){return It(t.hash).substr(1)}).join(\",\"))}},update:[{read:function(){this.scroll&&this.$create(\"scroll\",this.links,{offset:this.offset||0})}},{read:function(o){var s=this,a=window.pageYOffset+this.offset+1,h=on(document)-on(window)+this.offset;o.active=!1,this.targets.every(function(t,e){var n=en(t).top,i=e+1===s.targets.length;if(!s.overflow&&(0===e&&a<n||i&&n+t.offsetTop<a))return!1;if(!i&&en(s.targets[e+1]).top<=a)return!0;if(h<=a)for(var r=s.targets.length-1;e<r;r--)if(fn(s.targets[r])){t=s.targets[r];break}return!(o.active=Se(Nt(s.links,'[href=\"#'+t.id+'\"]')))})},write:function(t){var e=t.active;this.links.forEach(function(t){return t.blur()}),Ce(this.elements,this.cls),e&&Bt(this.$el,\"active\",[e,Ae(this.closest?xt(e,this.closest):e,this.cls)])},events:[\"scroll\",\"resize\"]}]},dr={mixins:[ti,Ki],props:{top:null,bottom:Boolean,offset:Number,animation:String,clsActive:String,clsInactive:String,clsFixed:String,clsBelow:String,selTarget:String,widthElement:Boolean,showOnUp:Boolean,targetOffset:Number},data:{top:0,bottom:!1,offset:0,animation:\"\",clsActive:\"uk-active\",clsInactive:\"\",clsFixed:\"uk-sticky-fixed\",clsBelow:\"uk-sticky-below\",selTarget:\"\",widthElement:!1,showOnUp:!1,targetOffset:!1},computed:{selTarget:function(t,e){var n=t.selTarget;return n&&Se(n,e)||e},widthElement:function(t,e){return at(t.widthElement,e)||this.placeholder},isActive:{get:function(){return Me(this.selTarget,this.clsActive)},set:function(t){t&&!this.isActive?(_e(this.selTarget,this.clsInactive,this.clsActive),Bt(this.$el,\"active\")):t||Me(this.selTarget,this.clsInactive)||(_e(this.selTarget,this.clsActive,this.clsInactive),Bt(this.$el,\"inactive\"))}}},connected:function(){this.placeholder=Se(\"+ .uk-sticky-placeholder\",this.$el)||Se('<div class=\"uk-sticky-placeholder\"></div>'),this.isFixed=!1,this.isActive=!1},disconnected:function(){this.isFixed&&(this.hide(),Ce(this.selTarget,this.clsInactive)),ve(this.placeholder),this.placeholder=null,this.widthElement=null},events:[{name:\"load hashchange popstate\",el:window,handler:function(){var i=this;if(!1!==this.targetOffset&&location.hash&&0<window.pageYOffset){var r=Se(location.hash);r&&xn.read(function(){var t=en(r).top,e=en(i.$el).top,n=i.$el.offsetHeight;i.isFixed&&t<=e+n&&e<=t+r.offsetHeight&&mn(window,t-n-(z(i.targetOffset)?i.targetOffset:0)-i.offset)})}}}],update:[{read:function(t,e){var n=t.height;this.isActive&&\"update\"!==e&&(this.hide(),n=this.$el.offsetHeight,this.show()),n=this.isActive?n:this.$el.offsetHeight,this.topOffset=en(this.isFixed?this.placeholder:this.$el).top,this.bottomOffset=this.topOffset+n;var i=fr(\"bottom\",this);return this.top=Math.max(j(fr(\"top\",this)),this.topOffset)-this.offset,this.bottom=i&&i-n,this.inactive=!this.matchMedia,{lastScroll:!1,height:n,margins:He(this.$el,[\"marginTop\",\"marginBottom\",\"marginLeft\",\"marginRight\"])}},write:function(t){var e=t.height,n=t.margins,i=this.placeholder;He(i,X({height:e},n)),_t(i,document)||(me(this.$el,i),it(i,\"hidden\",\"\")),this.isActive=this.isActive},events:[\"resize\"]},{read:function(t){var e=t.scroll;return void 0===e&&(e=0),this.width=(Et(this.widthElement)?this.widthElement:this.$el).offsetWidth,this.scroll=window.pageYOffset,{dir:e<=this.scroll?\"down\":\"up\",scroll:this.scroll,visible:Et(this.$el),top:gn(this.placeholder)[0]}},write:function(t,e){var n=this,i=t.initTimestamp;void 0===i&&(i=0);var r=t.dir,o=t.lastDir,s=t.lastScroll,a=t.scroll,h=t.top,c=t.visible,u=performance.now();if(!((t.lastScroll=a)<0||a===s||!c||this.disabled||this.showOnUp&&\"scroll\"!==e||((300<u-i||r!==o)&&(t.initScroll=a,t.initTimestamp=u),t.lastDir=r,this.showOnUp&&Math.abs(t.initScroll-a)<=30&&Math.abs(s-a)<=10)))if(this.inactive||a<this.top||this.showOnUp&&(a<=this.top||\"down\"===r||\"up\"===r&&!this.isFixed&&a<=this.bottomOffset)){if(!this.isFixed)return void(Ze.inProgress(this.$el)&&a<h&&(Ze.cancel(this.$el),this.hide()));this.isFixed=!1,this.animation&&a>this.topOffset?(Ze.cancel(this.$el),Ze.out(this.$el,this.animation).then(function(){return n.hide()},Q)):this.hide()}else this.isFixed?this.update():this.animation?(Ze.cancel(this.$el),this.show(),Ze.in(this.$el,this.animation).catch(Q)):this.show()},events:[\"resize\",\"scroll\"]}],methods:{show:function(){this.isFixed=!0,this.update(),it(this.placeholder,\"hidden\",null)},hide:function(){this.isActive=!1,Ce(this.$el,this.clsFixed,this.clsBelow),He(this.$el,{position:\"\",top:\"\",width:\"\"}),it(this.placeholder,\"hidden\",\"\")},update:function(){var t=0!==this.top||this.scroll>this.top,e=Math.max(0,this.offset);this.bottom&&this.scroll>this.bottom-this.offset&&(e=this.bottom-this.scroll),He(this.$el,{position:\"fixed\",top:e+\"px\",width:this.width}),this.isActive=t,Oe(this.$el,this.clsBelow,this.scroll>this.bottomOffset),Ae(this.$el,this.clsFixed)}}};function fr(t,e){var n=e.$props,i=e.$el,r=e[t+\"Offset\"],o=n[t];if(o){if(z(o))return r+j(o);if(D(o)&&o.match(/^-?\\d+vh$/))return on(window)*j(o)/100;var s=!0===o?i.parentNode:at(o,i);return s?en(s).top+s.offsetHeight:void 0}}var pr,mr={mixins:[ei],args:\"connect\",props:{connect:String,toggle:String,active:Number,swiping:Boolean},data:{connect:\"~.uk-switcher\",toggle:\"> * > :first-child\",active:0,swiping:!0,cls:\"uk-active\",clsContainer:\"uk-switcher\",attrItem:\"uk-switcher-item\",queued:!0},computed:{connects:function(t,e){return ht(t.connect,e)},toggles:function(t,e){return Te(t.toggle,e)}},events:[{name:\"click\",delegate:function(){return this.toggle+\":not(.uk-disabled)\"},handler:function(e){e.preventDefault(),this.show(V(this.$el.children).filter(function(t){return _t(e.current,t)})[0])}},{name:\"click\",el:function(){return this.connects},delegate:function(){return\"[\"+this.attrItem+\"],[data-\"+this.attrItem+\"]\"},handler:function(t){t.preventDefault(),this.show(st(t.current,this.attrItem))}},{name:\"swipeRight swipeLeft\",filter:function(){return this.swiping},el:function(){return this.connects},handler:function(t){var e=t.type;this.show(u(e,\"Left\")?\"next\":\"previous\")}}],update:function(){var e=this;this.connects.forEach(function(t){return e.updateAria(t.children)});var t=this.$el.children;this.show(Nt(t,\".\"+this.cls)[0]||t[this.active]||t[0])},methods:{index:function(){return!P(this.connects)&&ce(Nt(this.connects[0].children,\".\"+this.cls)[0])},show:function(t){for(var e,n,i=this,r=this.$el.children,o=r.length,s=this.index(),a=0<=s,h=\"previous\"===t?-1:1,c=ue(t,r,s),u=0;u<o;u++,c=(c+h+o)%o)if(!bt(this.toggles[c],\".uk-disabled *, .uk-disabled, [disabled]\")){e=this.toggles[c],n=r[c];break}!n||0<=s&&Me(n,this.cls)||s===c||(Ce(r,this.cls),Ae(n,this.cls),it(this.toggles,\"aria-expanded\",!1),it(e,\"aria-expanded\",!0),this.connects.forEach(function(t){a?i.toggleElement([t.children[s],t.children[c]]):i.toggleNow(t.children[c])}))}}},gr={mixins:[ti],extends:mr,props:{media:Boolean},data:{media:960,attrItem:\"uk-tab-item\"},connected:function(){var t=Me(this.$el,\"uk-tab-left\")?\"uk-tab-left\":!!Me(this.$el,\"uk-tab-right\")&&\"uk-tab-right\";t&&this.$create(\"toggle\",this.$el,{cls:t,mode:\"media\",media:this.media})}},vr={mixins:[Ki,ei],args:\"target\",props:{href:String,target:null,mode:\"list\"},data:{href:!1,target:!1,mode:\"click\",queued:!0},computed:{target:function(t,e){var n=t.href,i=t.target;return(i=ht(i||n,e)).length&&i||[e]}},connected:function(){Bt(this.target,\"updatearia\",[this])},events:[{name:oe+\" \"+se,filter:function(){return y(this.mode,\"hover\")},handler:function(t){jt(t)||this.toggle(\"toggle\"+(t.type===oe?\"show\":\"hide\"))}},{name:\"click\",filter:function(){return y(this.mode,\"click\")||ee&&y(this.mode,\"hover\")},handler:function(t){var e;(xt(t.target,'a[href=\"#\"], a[href=\"\"]')||(e=xt(t.target,\"a[href]\"))&&(this.cls||!Et(this.target)||e.hash&&bt(this.target,e.hash)))&&t.preventDefault(),this.toggle()}}],update:{read:function(){return!(!y(this.mode,\"media\")||!this.media)&&{match:this.matchMedia}},write:function(t){var e=t.match,n=this.isToggled(this.target);(e?!n:n)&&this.toggle()},events:[\"resize\"]},methods:{toggle:function(t){Bt(this.target,t||\"toggle\",[this])&&this.toggleElement(this.target)}}};Hn.version=\"3.1.6\",(pr=Hn).component(\"accordion\",ni),pr.component(\"alert\",ii),pr.component(\"cover\",hi),pr.component(\"drop\",ui),pr.component(\"dropdown\",li),pr.component(\"formCustom\",di),pr.component(\"gif\",fi),pr.component(\"grid\",vi),pr.component(\"heightMatch\",bi),pr.component(\"heightViewport\",ki),pr.component(\"icon\",Mi),pr.component(\"img\",Hi),pr.component(\"leader\",Zi),pr.component(\"margin\",pi),pr.component(\"modal\",nr),pr.component(\"nav\",ir),pr.component(\"navbar\",rr),pr.component(\"offcanvas\",or),pr.component(\"overflowAuto\",ar),pr.component(\"responsive\",hr),pr.component(\"scroll\",cr),pr.component(\"scrollspy\",ur),pr.component(\"scrollspyNav\",lr),pr.component(\"sticky\",dr),pr.component(\"svg\",Ii),pr.component(\"switcher\",mr),pr.component(\"tab\",gr),pr.component(\"toggle\",vr),pr.component(\"video\",ai),pr.component(\"close\",zi),pr.component(\"marker\",Oi),pr.component(\"navbarToggleIcon\",Oi),pr.component(\"overlayIcon\",Oi),pr.component(\"paginationNext\",Oi),pr.component(\"paginationPrevious\",Oi),pr.component(\"searchIcon\",Bi),pr.component(\"slidenavNext\",Di),pr.component(\"slidenavPrevious\",Di),pr.component(\"spinner\",Pi),pr.component(\"totop\",Oi),pr.use(ri);var wr={mixins:[ti],props:{date:String,clsWrapper:String},data:{date:\"\",clsWrapper:\".uk-countdown-%unit%\"},computed:{date:function(t){var e=t.date;return Date.parse(e)},days:function(t,e){return Se(t.clsWrapper.replace(\"%unit%\",\"days\"),e)},hours:function(t,e){return Se(t.clsWrapper.replace(\"%unit%\",\"hours\"),e)},minutes:function(t,e){return Se(t.clsWrapper.replace(\"%unit%\",\"minutes\"),e)},seconds:function(t,e){return Se(t.clsWrapper.replace(\"%unit%\",\"seconds\"),e)},units:function(){var e=this;return[\"days\",\"hours\",\"minutes\",\"seconds\"].filter(function(t){return e[t]})}},connected:function(){this.start()},disconnected:function(){var e=this;this.stop(),this.units.forEach(function(t){return le(e[t])})},events:[{name:\"visibilitychange\",el:document,handler:function(){document.hidden?this.stop():this.start()}}],update:{write:function(){var i=this,r=function(t){var e=t-Date.now();return{total:e,seconds:e/1e3%60,minutes:e/1e3/60%60,hours:e/1e3/60/60%24,days:e/1e3/60/60/24}}(this.date);r.total<=0&&(this.stop(),r.days=r.hours=r.minutes=r.seconds=0),this.units.forEach(function(t){var e=String(Math.floor(r[t]));e=e.length<2?\"0\"+e:e;var n=i[t];n.textContent!==e&&((e=e.split(\"\")).length!==n.children.length&&de(n,e.map(function(){return\"<span></span>\"}).join(\"\")),e.forEach(function(t,e){return n.children[e].textContent=t}))})}},methods:{start:function(){var t=this;this.stop(),this.date&&this.units.length&&(this.$emit(),this.timer=setInterval(function(){return t.$emit()},1e3))},stop:function(){this.timer&&(clearInterval(this.timer),this.timer=null)}}};var br,yr=\"uk-animation-target\",xr={props:{animation:Number},data:{animation:150},computed:{target:function(){return this.$el}},methods:{animate:function(t){var i=this;!function(){if(br)return;(br=fe(document.head,\"<style>\").sheet).insertRule(\".\"+yr+\" > * {\\n margin-top: 0 !important;\\n transform: none !important;\\n }\",0)}();var r=V(this.target.children),o=r.map(function(t){return kr(t,!0)}),e=on(this.target),n=window.pageYOffset;t(),Ue.cancel(this.target),r.forEach(Ue.cancel),$r(this.target),this.$update(this.target),xn.flush();var s=on(this.target),a=(r=r.concat(V(this.target.children).filter(function(t){return!y(r,t)}))).map(function(t,e){return!!(t.parentNode&&e in o)&&(o[e]?Et(t)?Ir(t):{opacity:0}:{opacity:Et(t)?1:0})});return o=a.map(function(t,e){var n=r[e].parentNode===i.target&&(o[e]||kr(r[e]));if(n)if(t){if(!(\"opacity\"in t)){n.opacity%1?t.opacity=1:delete n.opacity}}else delete n.opacity;return n}),Ae(this.target,yr),r.forEach(function(t,e){return o[e]&&He(t,o[e])}),He(this.target,\"height\",e),mn(window,n),Yt.all(r.map(function(t,e){return o[e]&&a[e]?Ue.start(t,a[e],i.animation,\"ease\"):Yt.resolve()}).concat(Ue.start(this.target,{height:s},this.animation,\"ease\"))).then(function(){r.forEach(function(t,e){return He(t,{display:0===a[e].opacity?\"none\":\"\",zIndex:\"\"})}),$r(i.target),i.$update(i.target),xn.flush()},Q)}}};function kr(t,e){var n=He(t,\"zIndex\");return!!Et(t)&&X({display:\"\",opacity:e?He(t,\"opacity\"):\"0\",pointerEvents:\"none\",position:\"absolute\",zIndex:\"auto\"===n?ce(t):n},Ir(t))}function $r(t){He(t.children,{height:\"\",left:\"\",opacity:\"\",pointerEvents:\"\",position:\"\",top:\"\",width:\"\"}),Ce(t,yr),He(t,\"height\",\"\")}function Ir(t){var e=t.getBoundingClientRect(),n=e.height,i=e.width,r=rn(t),o=r.top,s=r.left;return{top:o+=j(He(t,\"marginTop\")),left:s,height:n,width:i}}var Sr={mixins:[xr],args:\"target\",props:{target:Boolean,selActive:Boolean},data:{target:null,selActive:!1,attrItem:\"uk-filter-control\",cls:\"uk-active\",animation:250},computed:{toggles:{get:function(t,e){t.attrItem;return Te(\"[\"+this.attrItem+\"],[data-\"+this.attrItem+\"]\",e)},watch:function(){this.updateState()}},target:function(t,e){return Se(t.target,e)},children:{get:function(){return V(this.target&&this.target.children)},watch:function(t,e){!function(t,e){return t.length===e.length&&t.every(function(t){return~e.indexOf(t)})}(t,e)&&this.updateState()}}},events:[{name:\"click\",delegate:function(){return\"[\"+this.attrItem+\"],[data-\"+this.attrItem+\"]\"},handler:function(t){t.preventDefault(),this.apply(t.current)}}],connected:function(){var e=this;if(this.updateState(),!1!==this.selActive){var n=Te(this.selActive,this.$el);this.toggles.forEach(function(t){return Oe(t,e.cls,y(n,t))})}},methods:{apply:function(t){this.setState(Er(t,this.attrItem,this.getState()))},getState:function(){var n=this;return this.toggles.filter(function(t){return Me(t,n.cls)}).reduce(function(t,e){return Er(e,n.attrItem,t)},{filter:{\"\":\"\"},sort:[]})},setState:function(o,t){var s=this;void 0===t&&(t=!0),o=X({filter:{\"\":\"\"},sort:[]},o),Bt(this.$el,\"beforeFilter\",[this,o]);var a=this.children;this.toggles.forEach(function(t){return Oe(t,s.cls,!!function(t,e,n){var i=n.filter;void 0===i&&(i={\"\":\"\"});var r=n.sort,o=r[0],s=r[1],a=Tr(t,e),h=a.filter;void 0===h&&(h=\"\");var c=a.group;void 0===c&&(c=\"\");var u=a.sort,l=a.order;void 0===l&&(l=\"asc\");return H(u)?c in i&&h===i[c]||!h&&c&&!(c in i)&&!i[\"\"]:o===u&&s===l}(t,s.attrItem,o))});function e(){var e=function(t){var e=t.filter,n=\"\";return K(e,function(t){return n+=t||\"\"}),n}(o);a.forEach(function(t){return He(t,\"display\",e&&!bt(t,e)?\"none\":\"\")});var t=o.sort,n=t[0],i=t[1];if(n){var r=function(t,n,i){return X([],t).sort(function(t,e){return st(t,n).localeCompare(st(e,n),void 0,{numeric:!0})*(\"asc\"===i||-1)})}(a,n,i);q(r,a)||r.forEach(function(t){return fe(s.target,t)})}}t?this.animate(e).then(function(){return Bt(s.$el,\"afterFilter\",[s])}):(e(),Bt(this.$el,\"afterFilter\",[this]))},updateState:function(){var t=this;xn.write(function(){return t.setState(t.getState(),!1)})}}};function Tr(t,e){return Mn(st(t,e),[\"filter\"])}function Er(t,e,n){var i=Tr(t,e),r=i.filter,o=i.group,s=i.sort,a=i.order;return void 0===a&&(a=\"asc\"),(r||H(s))&&(o?r?(delete n.filter[\"\"],n.filter[o]=r):(delete n.filter[o],(P(n.filter)||\"\"in n.filter)&&(n.filter={\"\":r||\"\"})):n.filter={\"\":r||\"\"}),H(s)||(n.sort=[s,a]),n}var Ar={slide:{show:function(t){return[{transform:Nr(-100*t)},{transform:Nr()}]},percent:function(t){return Cr(t)},translate:function(t,e){return[{transform:Nr(-100*e*t)},{transform:Nr(100*e*(1-t))}]}}};function Cr(t){return Math.abs(He(t,\"transform\").split(\",\")[4]/t.offsetWidth)||0}function Nr(t,e){return void 0===t&&(t=0),void 0===e&&(e=\"%\"),t+=t?e:\"\",Jt?\"translateX(\"+t+\")\":\"translate3d(\"+t+\", 0, 0)\"}function _r(t){return\"scale3d(\"+t+\", \"+t+\", 1)\"}var Mr=X({},Ar,{fade:{show:function(){return[{opacity:0},{opacity:1}]},percent:function(t){return 1-He(t,\"opacity\")},translate:function(t){return[{opacity:1-t},{opacity:t}]}},scale:{show:function(){return[{opacity:0,transform:_r(.8)},{opacity:1,transform:_r(1)}]},percent:function(t){return 1-He(t,\"opacity\")},translate:function(t){return[{opacity:1-t,transform:_r(1-.2*t)},{opacity:t,transform:_r(.8+.2*t)}]}}});function Or(t,e,n){Bt(t,zt(e,!1,!1,n))}var Dr={mixins:[{props:{autoplay:Boolean,autoplayInterval:Number,pauseOnHover:Boolean},data:{autoplay:!1,autoplayInterval:7e3,pauseOnHover:!0},connected:function(){this.autoplay&&this.startAutoplay()},disconnected:function(){this.stopAutoplay()},update:function(){it(this.slides,\"tabindex\",\"-1\")},events:[{name:\"visibilitychange\",el:document,filter:function(){return this.autoplay},handler:function(){document.hidden?this.stopAutoplay():this.startAutoplay()}},{name:\"mouseenter\",filter:function(){return this.autoplay&&this.pauseOnHover},handler:function(){this.isHovering=!0}},{name:\"mouseleave\",filter:function(){return this.autoplay&&this.pauseOnHover},handler:function(){this.isHovering=!1}}],methods:{startAutoplay:function(){var t=this;this.stopAutoplay(),this.interval=setInterval(function(){return!_t(document.activeElement,t.$el)&&!t.isHovering&&!t.stack.length&&t.show(\"next\")},this.autoplayInterval)},stopAutoplay:function(){this.interval&&clearInterval(this.interval)}}},{props:{draggable:Boolean},data:{draggable:!0,threshold:10},created:function(){var i=this;[\"start\",\"move\",\"end\"].forEach(function(t){var n=i[t];i[t]=function(t){var e=Wt(t).x*(Zt?-1:1);i.prevPos=e!==i.pos?i.pos:i.prevPos,i.pos=e,n(t)}})},events:[{name:ne,delegate:function(){return this.selSlides},handler:function(t){!this.draggable||!jt(t)&&function(t){return!t.children.length&&t.childNodes.length}(t.target)||0<t.button||this.length<2||this.start(t)}},{name:\"touchmove\",passive:!1,handler:\"move\",delegate:function(){return this.selSlides}},{name:\"dragstart\",handler:function(t){t.preventDefault()}}],methods:{start:function(){var t=this;this.drag=this.pos,this._transitioner?(this.percent=this._transitioner.percent(),this.drag+=this._transitioner.getDistance()*this.percent*this.dir,this._transitioner.cancel(),this._transitioner.translate(this.percent),this.dragging=!0,this.stack=[]):this.prevIndex=this.index;var e=\"touchmove\"!=ie?Mt(document,ie,this.move,{passive:!1}):Q;this.unbindMove=function(){e(),t.unbindMove=null},Mt(window,\"scroll\",this.unbindMove),Mt(document,re,this.end,!0),He(this.list,\"userSelect\",\"none\")},move:function(t){var e=this;if(this.unbindMove){var n=this.pos-this.drag;if(!(0==n||this.prevPos===this.pos||!this.dragging&&Math.abs(n)<this.threshold)){He(this.list,\"pointerEvents\",\"none\"),t.cancelable&&t.preventDefault(),this.dragging=!0,this.dir=n<0?1:-1;for(var i=this.slides,r=this.prevIndex,o=Math.abs(n),s=this.getIndex(r+this.dir,r),a=this._getDistance(r,s)||i[r].offsetWidth;s!==r&&a<o;)this.drag-=a*this.dir,r=s,o-=a,s=this.getIndex(r+this.dir,r),a=this._getDistance(r,s)||i[r].offsetWidth;this.percent=o/a;var h,c=i[r],u=i[s],l=this.index!==s,d=r===s;[this.index,this.prevIndex].filter(function(t){return!y([s,r],t)}).forEach(function(t){Bt(i[t],\"itemhidden\",[e]),d&&(h=!0,e.prevIndex=r)}),(this.index===r&&this.prevIndex!==r||h)&&Bt(i[this.index],\"itemshown\",[this]),l&&(this.prevIndex=r,this.index=s,d||Bt(c,\"beforeitemhide\",[this]),Bt(u,\"beforeitemshow\",[this])),this._transitioner=this._translate(Math.abs(this.percent),c,!d&&u),l&&(d||Bt(c,\"itemhide\",[this]),Bt(u,\"itemshow\",[this]))}}},end:function(){if(Ot(window,\"scroll\",this.unbindMove),this.unbindMove&&this.unbindMove(),Ot(document,re,this.end,!0),this.dragging)if(this.dragging=null,this.index===this.prevIndex)this.percent=1-this.percent,this.dir*=-1,this._show(!1,this.index,!0),this._transitioner=null;else{var t=(Zt?this.dir*(Zt?1:-1):this.dir)<0==this.prevPos>this.pos;this.index=t?this.index:this.prevIndex,t&&(this.percent=1-this.percent),this.show(0<this.dir&&!t||this.dir<0&&t?\"next\":\"previous\",!0)}He(this.list,{userSelect:\"\",pointerEvents:\"\"}),this.drag=this.percent=null}}},{data:{selNav:!1},computed:{nav:function(t,e){return Se(t.selNav,e)},selNavItem:function(t){var e=t.attrItem;return\"[\"+e+\"],[data-\"+e+\"]\"},navItems:function(t,e){return Te(this.selNavItem,e)}},update:{write:function(){var n=this;this.nav&&this.length!==this.nav.children.length&&de(this.nav,this.slides.map(function(t,e){return\"<li \"+n.attrItem+'=\"'+e+'\"><a href=\"#\"></a></li>'}).join(\"\")),Oe(Te(this.selNavItem,this.$el).concat(this.nav),\"uk-hidden\",!this.maxIndex),this.updateNav()},events:[\"resize\"]},events:[{name:\"click\",delegate:function(){return this.selNavItem},handler:function(t){t.preventDefault(),this.show(st(t.current,this.attrItem))}},{name:\"itemshow\",handler:\"updateNav\"}],methods:{updateNav:function(){var n=this,i=this.getValidIndex();this.navItems.forEach(function(t){var e=st(t,n.attrItem);Oe(t,n.clsActive,F(e)===i),Oe(t,\"uk-invisible\",n.finite&&(\"previous\"===e&&0===i||\"next\"===e&&i>=n.maxIndex))})}}}],props:{clsActivated:Boolean,easing:String,index:Number,finite:Boolean,velocity:Number},data:function(){return{easing:\"ease\",finite:!1,velocity:1,index:0,stack:[],percent:0,clsActive:\"uk-active\",clsActivated:!1,Transitioner:!1,transitionOptions:{}}},computed:{duration:function(t,e){var n=t.velocity;return Br(e.offsetWidth/n)},length:function(){return this.slides.length},list:function(t,e){return Se(t.selList,e)},maxIndex:function(){return this.length-1},selSlides:function(t){return t.selList+\" > *\"},slides:function(){return V(this.list.children)}},events:{itemshown:function(){this.$update(this.list)}},methods:{show:function(t,e){var n=this;if(void 0===e&&(e=!1),!this.dragging&&this.length){var i=this.stack,r=e?0:i.length,o=function(){i.splice(r,1),i.length&&n.show(i.shift(),!0)};if(i[e?\"unshift\":\"push\"](t),!e&&1<i.length)2===i.length&&this._transitioner.forward(Math.min(this.duration,200));else{var s=this.index,a=Me(this.slides,this.clsActive)&&this.slides[s],h=this.getIndex(t,this.index),c=this.slides[h];if(a!==c){if(this.dir=function(t,e){return\"next\"===t?1:\"previous\"===t?-1:t<e?-1:1}(t,s),this.prevIndex=s,this.index=h,a&&Bt(a,\"beforeitemhide\",[this]),!Bt(c,\"beforeitemshow\",[this,a]))return this.index=this.prevIndex,void o();var u=this._show(a,c,e).then(function(){return a&&Bt(a,\"itemhidden\",[n]),Bt(c,\"itemshown\",[n]),new Yt(function(t){xn.write(function(){i.shift(),i.length?n.show(i.shift(),!0):n._transitioner=null,t()})})});return a&&Bt(a,\"itemhide\",[this]),Bt(c,\"itemshow\",[this]),u}o()}}},getIndex:function(t,e){return void 0===t&&(t=this.index),void 0===e&&(e=this.index),Z(ue(t,this.slides,e,this.finite),0,this.maxIndex)},getValidIndex:function(t,e){return void 0===t&&(t=this.index),void 0===e&&(e=this.prevIndex),this.getIndex(t,e)},_show:function(t,e,n){if(this._transitioner=this._getTransitioner(t,e,this.dir,X({easing:n?e.offsetWidth<600?\"cubic-bezier(0.25, 0.46, 0.45, 0.94)\":\"cubic-bezier(0.165, 0.84, 0.44, 1)\":this.easing},this.transitionOptions)),!n&&!t)return this._transitioner.translate(1),Yt.resolve();var i=this.stack.length;return this._transitioner[1<i?\"forward\":\"show\"](1<i?Math.min(this.duration,75+75/(i-1)):this.duration,this.percent)},_getDistance:function(t,e){return new this._getTransitioner(t,t!==e&&e).getDistance()},_translate:function(t,e,n){void 0===e&&(e=this.prevIndex),void 0===n&&(n=this.index);var i=this._getTransitioner(e!==n&&e,n);return i.translate(t),i},_getTransitioner:function(t,e,n,i){return void 0===t&&(t=this.prevIndex),void 0===e&&(e=this.index),void 0===n&&(n=this.dir||1),void 0===i&&(i=this.transitionOptions),new this.Transitioner(B(t)?this.slides[t]:t,B(e)?this.slides[e]:e,n*(Zt?-1:1),i)}}};function Br(t){return.5*t+300}var zr={mixins:[Dr],props:{animation:String},data:{animation:\"slide\",clsActivated:\"uk-transition-active\",Animations:Ar,Transitioner:function(o,s,a,t){var e=t.animation,h=t.easing,n=e.percent,i=e.translate,r=e.show;void 0===r&&(r=Q);var c=r(a),u=new Vt;return{dir:a,show:function(t,e,n){var i=this;void 0===e&&(e=0);var r=n?\"linear\":h;return t-=Math.round(t*Z(e,-1,1)),this.translate(e),Or(s,\"itemin\",{percent:e,duration:t,timing:r,dir:a}),Or(o,\"itemout\",{percent:1-e,duration:t,timing:r,dir:a}),Yt.all([Ue.start(s,c[1],t,r),Ue.start(o,c[0],t,r)]).then(function(){i.reset(),u.resolve()},Q),u.promise},stop:function(){return Ue.stop([s,o])},cancel:function(){Ue.cancel([s,o])},reset:function(){for(var t in c[0])He([s,o],t,\"\")},forward:function(t,e){return void 0===e&&(e=this.percent()),Ue.cancel([s,o]),this.show(t,e,!0)},translate:function(t){this.reset();var e=i(t,a);He(s,e[1]),He(o,e[0]),Or(s,\"itemtranslatein\",{percent:t,dir:a}),Or(o,\"itemtranslateout\",{percent:1-t,dir:a})},percent:function(){return n(o||s,s,a)},getDistance:function(){return o&&o.offsetWidth}}}},computed:{animation:function(t){var e=t.animation,n=t.Animations;return X(e in n?n[e]:n.slide,{name:e})},transitionOptions:function(){return{animation:this.animation}}},events:{\"itemshow itemhide itemshown itemhidden\":function(t){var e=t.target;this.$update(e)},beforeitemshow:function(t){Ae(t.target,this.clsActive)},itemshown:function(t){Ae(t.target,this.clsActivated)},itemhidden:function(t){Ce(t.target,this.clsActive,this.clsActivated)}}},Pr={mixins:[Qi,tr,ei,zr],functional:!0,props:{delayControls:Number,preload:Number,videoAutoplay:Boolean,template:String},data:function(){return{preload:1,videoAutoplay:!1,delayControls:3e3,items:[],cls:\"uk-open\",clsPage:\"uk-lightbox-page\",selList:\".uk-lightbox-items\",attrItem:\"uk-lightbox-item\",selClose:\".uk-close-large\",pauseOnHover:!1,velocity:2,Animations:Mr,template:'<div class=\"uk-lightbox uk-overflow-hidden\"> <ul class=\"uk-lightbox-items\"></ul> <div class=\"uk-lightbox-toolbar uk-position-top uk-text-right uk-transition-slide-top uk-transition-opaque\"> <button class=\"uk-lightbox-toolbar-icon uk-close-large\" type=\"button\" uk-close></button> </div> <a class=\"uk-lightbox-button uk-position-center-left uk-position-medium uk-transition-fade\" href=\"#\" uk-slidenav-previous uk-lightbox-item=\"previous\"></a> <a class=\"uk-lightbox-button uk-position-center-right uk-position-medium uk-transition-fade\" href=\"#\" uk-slidenav-next uk-lightbox-item=\"next\"></a> <div class=\"uk-lightbox-toolbar uk-lightbox-caption uk-position-bottom uk-text-center uk-transition-slide-bottom uk-transition-opaque\"></div> </div>'}},created:function(){var t=this;this.$mount(fe(this.container,this.template)),this.caption=Se(\".uk-lightbox-caption\",this.$el),this.items.forEach(function(){return fe(t.list,\"<li></li>\")})},events:[{name:ie+\" \"+ne+\" keydown\",handler:\"showControls\"},{name:\"click\",self:!0,delegate:function(){return this.selSlides},handler:function(t){t.defaultPrevented||this.hide()}},{name:\"shown\",self:!0,handler:function(){this.showControls()}},{name:\"hide\",self:!0,handler:function(){this.hideControls(),Ce(this.slides,this.clsActive),Ue.stop(this.slides)}},{name:\"hidden\",self:!0,handler:function(){this.$destroy(!0)}},{name:\"keyup\",el:document,handler:function(t){if(this.isToggled(this.$el))switch(t.keyCode){case 37:this.show(\"previous\");break;case 39:this.show(\"next\")}}},{name:\"beforeitemshow\",handler:function(t){this.isToggled()||(this.draggable=!1,t.preventDefault(),this.toggleNow(this.$el,!0),this.animation=Mr.scale,Ce(t.target,this.clsActive),this.stack.splice(1,0,this.index))}},{name:\"itemshow\",handler:function(t){var e=ce(t.target),n=this.getItem(e).caption;He(this.caption,\"display\",n?\"\":\"none\"),de(this.caption,n);for(var i=0;i<=this.preload;i++)this.loadItem(this.getIndex(e+i)),this.loadItem(this.getIndex(e-i))}},{name:\"itemshown\",handler:function(){this.draggable=this.$props.draggable}},{name:\"itemload\",handler:function(t,r){var o,s=this,e=r.source,n=r.type,i=r.alt;if(this.setItem(r,\"<span uk-spinner></span>\"),e)if(\"image\"===n||e.match(/\\.(jp(e)?g|png|gif|svg|webp)($|\\?)/i))Gt(e).then(function(t){return s.setItem(r,'<img width=\"'+t.width+'\" height=\"'+t.height+'\" src=\"'+e+'\" alt=\"'+(i||\"\")+'\">')},function(){return s.setError(r)});else if(\"video\"===n||e.match(/\\.(mp4|webm|ogv)($|\\?)/i)){var a=Se(\"<video controls playsinline\"+(r.poster?' poster=\"'+r.poster+'\"':\"\")+' uk-video=\"'+this.videoAutoplay+'\"></video>');it(a,\"src\",e),Dt(a,\"error loadedmetadata\",function(t){\"error\"===t?s.setError(r):(it(a,{width:a.videoWidth,height:a.videoHeight}),s.setItem(r,a))})}else if(\"iframe\"===n||e.match(/\\.(html|php)($|\\?)/i))this.setItem(r,'<iframe class=\"uk-lightbox-iframe\" src=\"'+e+'\" frameborder=\"0\" allowfullscreen></iframe>');else if(o=e.match(/\\/\\/.*?youtube(-nocookie)?\\.[a-z]+\\/watch\\?v=([^&\\s]+)/)||e.match(/()youtu\\.be\\/(.*)/)){var h=o[2],c=function(t,e){return void 0===t&&(t=640),void 0===e&&(e=450),s.setItem(r,Hr(\"https://www.youtube\"+(o[1]||\"\")+\".com/embed/\"+h,t,e,s.videoAutoplay))};Gt(\"https://img.youtube.com/vi/\"+h+\"/maxresdefault.jpg\").then(function(t){var e=t.width,n=t.height;120===e&&90===n?Gt(\"https://img.youtube.com/vi/\"+h+\"/0.jpg\").then(function(t){var e=t.width,n=t.height;return c(e,n)},c):c(e,n)},c)}else(o=e.match(/(\\/\\/.*?)vimeo\\.[a-z]+\\/([0-9]+).*?/))&&Kt(\"https://vimeo.com/api/oembed.json?maxwidth=1920&url=\"+encodeURI(e),{responseType:\"json\",withCredentials:!1}).then(function(t){var e=t.response,n=e.height,i=e.width;return s.setItem(r,Hr(\"https://player.vimeo.com/video/\"+o[2],i,n,s.videoAutoplay))},function(){return s.setError(r)})}}],methods:{loadItem:function(t){void 0===t&&(t=this.index);var e=this.getItem(t);e.content||Bt(this.$el,\"itemload\",[e])},getItem:function(t){return void 0===t&&(t=this.index),this.items[t]||{}},setItem:function(t,e){X(t,{content:e});var n=de(this.slides[this.items.indexOf(t)],e);Bt(this.$el,\"itemloaded\",[this,n]),this.$update(n)},setError:function(t){this.setItem(t,'<span uk-icon=\"icon: bolt; ratio: 2\"></span>')},showControls:function(){clearTimeout(this.controlsTimer),this.controlsTimer=setTimeout(this.hideControls,this.delayControls),Ae(this.$el,\"uk-active\",\"uk-transition-active\")},hideControls:function(){Ce(this.$el,\"uk-active\",\"uk-transition-active\")}}};function Hr(t,e,n,i){return'<iframe src=\"'+t+'\" width=\"'+e+'\" height=\"'+n+'\" style=\"max-width: 100%; box-sizing: border-box;\" frameborder=\"0\" allowfullscreen uk-video=\"autoplay: '+i+'\" uk-responsive></iframe>'}var Lr,Fr={install:function(t,e){t.lightboxPanel||t.component(\"lightboxPanel\",Pr);X(e.props,t.component(\"lightboxPanel\").options.props)},props:{toggle:String},data:{toggle:\"a\"},computed:{toggles:{get:function(t,e){return Te(t.toggle,e)},watch:function(){this.hide()}},items:function(){return J(this.toggles.map(jr),\"source\")}},disconnected:function(){this.hide()},events:[{name:\"click\",delegate:function(){return this.toggle+\":not(.uk-disabled)\"},handler:function(t){t.preventDefault();var e=st(t.current,\"href\");this.show(k(this.items,function(t){return t.source===e}))}}],methods:{show:function(t){var e=this;return this.panel=this.panel||this.$create(\"lightboxPanel\",X({},this.$props,{items:this.items})),Mt(this.panel.$el,\"hidden\",function(){return e.panel=!1}),this.panel.show(t)},hide:function(){return this.panel&&this.panel.hide()}}};function jr(n){return[\"href\",\"caption\",\"type\",\"poster\",\"alt\"].reduce(function(t,e){return t[\"href\"===e?\"source\":e]=st(n,e),t},{})}var Wr={},Vr={functional:!0,args:[\"message\",\"status\"],data:{message:\"\",status:\"\",timeout:5e3,group:null,pos:\"top-center\",clsClose:\"uk-notification-close\",clsMsg:\"uk-notification-message\"},install:function(r){r.notification.closeAll=function(n,i){Ie(document.body,function(t){var e=r.getComponent(t,\"notification\");!e||n&&n!==e.group||e.close(i)})}},computed:{marginProp:function(t){return\"margin\"+(w(t.pos,\"top\")?\"Top\":\"Bottom\")},startProps:function(){var t;return(t={opacity:0})[this.marginProp]=-this.$el.offsetHeight,t}},created:function(){Wr[this.pos]||(Wr[this.pos]=fe(this.$container,'<div class=\"uk-notification uk-notification-'+this.pos+'\"></div>'));var t=He(Wr[this.pos],\"display\",\"block\");this.$mount(fe(t,'<div class=\"'+this.clsMsg+(this.status?\" \"+this.clsMsg+\"-\"+this.status:\"\")+'\"> <a href=\"#\" class=\"'+this.clsClose+'\" data-uk-close></a> <div>'+this.message+\"</div> </div>\"))},connected:function(){var t,e=this,n=j(He(this.$el,this.marginProp));Ue.start(He(this.$el,this.startProps),((t={opacity:1})[this.marginProp]=n,t)).then(function(){e.timeout&&(e.timer=setTimeout(e.close,e.timeout))})},events:(Lr={click:function(t){xt(t.target,'a[href=\"#\"],a[href=\"\"]')&&t.preventDefault(),this.close()}},Lr[oe]=function(){this.timer&&clearTimeout(this.timer)},Lr[se]=function(){this.timeout&&(this.timer=setTimeout(this.close,this.timeout))},Lr),methods:{close:function(t){function e(){Bt(n.$el,\"close\",[n]),ve(n.$el),Wr[n.pos].children.length||He(Wr[n.pos],\"display\",\"none\")}var n=this;this.timer&&clearTimeout(this.timer),t?e():Ue.start(this.$el,this.startProps).then(e)}}};var Yr=[\"x\",\"y\",\"bgx\",\"bgy\",\"rotate\",\"scale\",\"color\",\"backgroundColor\",\"borderColor\",\"opacity\",\"blur\",\"hue\",\"grayscale\",\"invert\",\"saturate\",\"sepia\",\"fopacity\",\"stroke\"],Rr={mixins:[Ki],props:Yr.reduce(function(t,e){return t[e]=\"list\",t},{}),data:Yr.reduce(function(t,e){return t[e]=void 0,t},{}),computed:{props:function(m,g){var v=this;return Yr.reduce(function(t,e){if(H(m[e]))return t;var n,i,r,o=e.match(/color/i),s=o||\"opacity\"===e,a=m[e].slice(0);s&&He(g,e,\"\"),a.length<2&&a.unshift((\"scale\"===e?1:s?He(g,e):0)||0);var h=function(t){return t.reduce(function(t,e){return D(e)&&e.replace(/-|\\d/g,\"\").trim()||t},\"\")}(a);if(o){var c=g.style.color;a=a.map(function(t){return function(t,e){return He(He(t,\"color\",e),\"color\").split(/[(),]/g).slice(1,-1).concat(1).slice(0,4).map(j)}(g,t)}),g.style.color=c}else if(w(e,\"bg\")){var u=\"bgy\"===e?\"height\":\"width\";if(a=a.map(function(t){return vn(t,u,v.$el)}),He(g,\"background-position-\"+e[2],\"\"),i=He(g,\"backgroundPosition\").split(\" \")[\"x\"===e[2]?0:1],v.covers){var l=Math.min.apply(Math,a),d=Math.max.apply(Math,a),f=a.indexOf(l)<a.indexOf(d);r=d-l,a=a.map(function(t){return t-(f?l:d)}),n=(f?-r:0)+\"px\"}else n=i}else a=a.map(j);if(\"stroke\"===e){if(!a.some(function(t){return t}))return t;var p=Ai(v.$el);He(g,\"strokeDasharray\",p),\"%\"===h&&(a=a.map(function(t){return t*p/100})),a=a.reverse(),e=\"strokeDashoffset\"}return t[e]={steps:a,unit:h,pos:n,bgPos:i,diff:r},t},{})},bgProps:function(){var e=this;return[\"bgx\",\"bgy\"].filter(function(t){return t in e.props})},covers:function(t,e){return function(t){var e=t.style.backgroundSize,n=\"cover\"===He(He(t,\"backgroundSize\",\"\"),\"backgroundSize\");return t.style.backgroundSize=e,n}(e)}},disconnected:function(){delete this._image},update:{read:function(t){var h=this;if(t.active=this.matchMedia,t.active){if(!t.image&&this.covers&&this.bgProps.length){var e=He(this.$el,\"backgroundImage\").replace(/^none|url\\([\"']?(.+?)[\"']?\\)$/,\"$1\");if(e){var n=new Image;n.src=e,(t.image=n).naturalWidth||(n.onload=function(){return h.$emit()})}}var i=t.image;if(i&&i.naturalWidth){var c={width:this.$el.offsetWidth,height:this.$el.offsetHeight},u={width:i.naturalWidth,height:i.naturalHeight},l=nt.cover(u,c);this.bgProps.forEach(function(t){var e=h.props[t],n=e.diff,i=e.bgPos,r=e.steps,o=\"bgy\"===t?\"height\":\"width\",s=l[o]-c[o];if(s<n)c[o]=l[o]+n-s;else if(n<s){var a=c[o]/vn(i,o,h.$el);a&&(h.props[t].steps=r.map(function(t){return t-(s-n)/a}))}l=nt.cover(u,c)}),t.dim=l}}},write:function(t){var e=t.dim;t.active?e&&He(this.$el,{backgroundSize:e.width+\"px \"+e.height+\"px\",backgroundRepeat:\"no-repeat\"}):He(this.$el,{backgroundSize:\"\",backgroundRepeat:\"\"})},events:[\"resize\"]},methods:{reset:function(){var n=this;K(this.getCss(0),function(t,e){return He(n.$el,e,\"\")})},getCss:function(l){var d=this.props;return Object.keys(d).reduce(function(t,e){var n=d[e],i=n.steps,r=n.unit,o=n.pos,s=function(t,e,n){void 0===n&&(n=2);var i=qr(t,e),r=i[0],o=i[1],s=i[2];return(B(r)?r+Math.abs(r-o)*s*(r<o?1:-1):+o).toFixed(n)}(i,l);switch(e){case\"x\":case\"y\":r=r||\"px\",t.transform+=\" translate\"+p(e)+\"(\"+j(s).toFixed(\"px\"===r?0:2)+r+\")\";break;case\"rotate\":r=r||\"deg\",t.transform+=\" rotate(\"+(s+r)+\")\";break;case\"scale\":t.transform+=\" scale(\"+s+\")\";break;case\"bgy\":case\"bgx\":t[\"background-position-\"+e[2]]=\"calc(\"+o+\" + \"+s+\"px)\";break;case\"color\":case\"backgroundColor\":case\"borderColor\":var a=qr(i,l),h=a[0],c=a[1],u=a[2];t[e]=\"rgba(\"+h.map(function(t,e){return t+=u*(c[e]-t),3===e?j(t):parseInt(t,10)}).join(\",\")+\")\";break;case\"blur\":r=r||\"px\",t.filter+=\" blur(\"+(s+r)+\")\";break;case\"hue\":r=r||\"deg\",t.filter+=\" hue-rotate(\"+(s+r)+\")\";break;case\"fopacity\":r=r||\"%\",t.filter+=\" opacity(\"+(s+r)+\")\";break;case\"grayscale\":case\"invert\":case\"saturate\":case\"sepia\":r=r||\"%\",t.filter+=\" \"+e+\"(\"+(s+r)+\")\";break;default:t[e]=s}return t},{transform:\"\",filter:\"\"})}}};function qr(t,e){var n=t.length-1,i=Math.min(Math.floor(n*e),n-1),r=t.slice(i,i+2);return r.push(1===e?1:e%(1/n)*n),r}var Ur={mixins:[Rr],props:{target:String,viewport:Number,easing:Number},data:{target:!1,viewport:1,easing:1},computed:{target:function(t,e){var n=t.target;return function t(e){return e?\"offsetTop\"in e?e:t(e.parentNode):document.body}(n&&at(n,e)||e)}},update:{read:function(t,e){var n=t.percent;if(\"scroll\"!==e&&(n=!1),t.active){var i=n;return{percent:n=function(t,e){return Z(t*(1-(e-e*t)))}(pn(this.target)/(this.viewport||1),this.easing),style:i!==n&&this.getCss(n)}}},write:function(t){var e=t.style;t.active?e&&He(this.$el,e):this.reset()},events:[\"scroll\",\"resize\"]}};var Xr={update:{write:function(){if(!this.stack.length&&!this.dragging){var t=this.getValidIndex();delete this.index,Ce(this.slides,this.clsActive,this.clsActivated),this.show(t)}},events:[\"resize\"]}};function Kr(t,e,n){var i=Zr(t,e);return n?i-function(t,e){return Qr(e).width/2-Qr(t).width/2}(t,e):Math.min(i,Gr(e))}function Gr(t){return Math.max(0,Jr(t)-Qr(t).width)}function Jr(t){return eo(t).reduce(function(t,e){return Qr(e).width+t},0)}function Zr(t,e){return(rn(t).left+(Zt?Qr(t).width-Qr(e).width:0))*(Zt?-1:1)}function Qr(t){return t.getBoundingClientRect()}function to(t,e,n){Bt(t,zt(e,!1,!1,n))}function eo(t){return V(t.children)}var no={mixins:[ti,Dr,Xr],props:{center:Boolean,sets:Boolean},data:{center:!1,sets:!1,attrItem:\"uk-slider-item\",selList:\".uk-slider-items\",selNav:\".uk-slider-nav\",clsContainer:\"uk-slider-container\",Transitioner:function(r,i,o,t){var e=t.center,s=t.easing,a=t.list,h=new Vt,n=r?Kr(r,a,e):Kr(i,a,e)+Qr(i).width*o,c=i?Kr(i,a,e):n+Qr(r).width*o*(Zt?-1:1);return{dir:o,show:function(t,e,n){void 0===e&&(e=0);var i=n?\"linear\":s;return t-=Math.round(t*Z(e,-1,1)),this.translate(e),r&&this.updateTranslates(),e=r?e:Z(e,0,1),to(this.getItemIn(),\"itemin\",{percent:e,duration:t,timing:i,dir:o}),r&&to(this.getItemIn(!0),\"itemout\",{percent:1-e,duration:t,timing:i,dir:o}),Ue.start(a,{transform:Nr(-c*(Zt?-1:1),\"px\")},t,i).then(h.resolve,Q),h.promise},stop:function(){return Ue.stop(a)},cancel:function(){Ue.cancel(a)},reset:function(){He(a,\"transform\",\"\")},forward:function(t,e){return void 0===e&&(e=this.percent()),Ue.cancel(a),this.show(t,e,!0)},translate:function(t){var e=this.getDistance()*o*(Zt?-1:1);He(a,\"transform\",Nr(Z(e-e*t-c,-Jr(a),Qr(a).width)*(Zt?-1:1),\"px\")),this.updateTranslates(),r&&(t=Z(t,-1,1),to(this.getItemIn(),\"itemtranslatein\",{percent:t,dir:o}),to(this.getItemIn(!0),\"itemtranslateout\",{percent:1-t,dir:o}))},percent:function(){return Math.abs((He(a,\"transform\").split(\",\")[4]*(Zt?-1:1)+n)/(c-n))},getDistance:function(){return Math.abs(c-n)},getItemIn:function(t){void 0===t&&(t=!1);var e=this.getActives(),n=G(eo(a),\"offsetLeft\"),i=ce(n,e[0<o*(t?-1:1)?e.length-1:0]);return~i&&n[i+(r&&!t?o:0)]},getActives:function(){var n=Kr(r||i,a,e);return G(eo(a).filter(function(t){var e=Zr(t,a);return n<=e&&e+Qr(t).width<=Qr(a).width+n}),\"offsetLeft\")},updateTranslates:function(){var n=this.getActives();eo(a).forEach(function(t){var e=y(n,t);to(t,\"itemtranslate\"+(e?\"in\":\"out\"),{percent:e?1:0,dir:t.offsetLeft<=i.offsetLeft?1:-1})})}}}},computed:{avgWidth:function(){return Jr(this.list)/this.length},finite:function(t){return t.finite||Jr(this.list)<Qr(this.list).width+function(t){return eo(t).reduce(function(t,e){return Math.max(t,Qr(e).width)},0)}(this.list)+this.center},maxIndex:function(){if(!this.finite||this.center&&!this.sets)return this.length-1;if(this.center)return this.sets[this.sets.length-1];He(this.slides,\"order\",\"\");for(var t=Gr(this.list),e=this.length;e--;)if(Zr(this.list.children[e],this.list)<t)return Math.min(e+1,this.length-1);return 0},sets:function(t){var o=this,e=t.sets,s=Qr(this.list).width/(this.center?2:1),a=0,h=s,c=0;return!P(e=e&&this.slides.reduce(function(t,e,n){var i=Qr(e).width;if(a<c+i&&(!o.center&&n>o.maxIndex&&(n=o.maxIndex),!y(t,n))){var r=o.slides[n+1];o.center&&r&&i<h-Qr(r).width/2?h-=i:(h=s,t.push(n),a=c+s+(o.center?i/2:0))}return c+=i,t},[]))&&e},transitionOptions:function(){return{center:this.center,list:this.list}}},connected:function(){Oe(this.$el,this.clsContainer,!Se(\".\"+this.clsContainer,this.$el))},update:{write:function(){var n=this;Te(\"[\"+this.attrItem+\"],[data-\"+this.attrItem+\"]\",this.$el).forEach(function(t){var e=st(t,n.attrItem);n.maxIndex&&Oe(t,\"uk-hidden\",z(e)&&(n.sets&&!y(n.sets,j(e))||e>n.maxIndex))})},events:[\"resize\"]},events:{beforeitemshow:function(t){!this.dragging&&this.sets&&this.stack.length<2&&!y(this.sets,this.index)&&(this.index=this.getValidIndex());var e=Math.abs(this.index-this.prevIndex+(0<this.dir&&this.index<this.prevIndex||this.dir<0&&this.index>this.prevIndex?(this.maxIndex+1)*this.dir:0));if(!this.dragging&&1<e){for(var n=0;n<e;n++)this.stack.splice(1,0,0<this.dir?\"next\":\"previous\");t.preventDefault()}else this.duration=Br(this.avgWidth/this.velocity)*(Qr(this.dir<0||!this.slides[this.prevIndex]?this.slides[this.index]:this.slides[this.prevIndex]).width/this.avgWidth),this.reorder()},itemshow:function(){H(this.prevIndex)||Ae(this._getTransitioner().getItemIn(),this.clsActive)},itemshown:function(){var e=this,n=this._getTransitioner(this.index).getActives();this.slides.forEach(function(t){return Oe(t,e.clsActive,y(n,t))}),this.sets&&!y(this.sets,j(this.index))||this.slides.forEach(function(t){return Oe(t,e.clsActivated,y(n,t))})}},methods:{reorder:function(){var n=this;if(He(this.slides,\"order\",\"\"),!this.finite){var i=0<this.dir&&this.slides[this.prevIndex]?this.prevIndex:this.index;if(this.slides.forEach(function(t,e){return He(t,\"order\",0<n.dir&&e<i?1:n.dir<0&&e>=n.index?-1:\"\")}),this.center)for(var t=this.slides[i],e=Qr(this.list).width/2-Qr(t).width/2,r=0;0<e;){var o=this.getIndex(--r+i,i),s=this.slides[o];He(s,\"order\",i<o?-2:-1),e-=Qr(s).width}}},getValidIndex:function(t,e){if(void 0===t&&(t=this.index),void 0===e&&(e=this.prevIndex),t=this.getIndex(t,e),!this.sets)return t;var n;do{if(y(this.sets,t))return t;n=t,t=this.getIndex(t+this.dir,e)}while(t!==n);return t}}},io={mixins:[Rr],data:{selItem:\"!li\"},computed:{item:function(t,e){return at(t.selItem,e)}},events:[{name:\"itemshown\",self:!0,el:function(){return this.item},handler:function(){He(this.$el,this.getCss(.5))}},{name:\"itemin itemout\",self:!0,el:function(){return this.item},handler:function(t){var e=t.type,n=t.detail,i=n.percent,r=n.duration,o=n.timing,s=n.dir;Ue.cancel(this.$el),He(this.$el,this.getCss(oo(e,s,i))),Ue.start(this.$el,this.getCss(ro(e)?.5:0<s?1:0),r,o).catch(Q)}},{name:\"transitioncanceled transitionend\",self:!0,el:function(){return this.item},handler:function(){Ue.cancel(this.$el)}},{name:\"itemtranslatein itemtranslateout\",self:!0,el:function(){return this.item},handler:function(t){var e=t.type,n=t.detail,i=n.percent,r=n.dir;Ue.cancel(this.$el),He(this.$el,this.getCss(oo(e,r,i)))}}]};function ro(t){return u(t,\"in\")}function oo(t,e,n){return n/=2,ro(t)?e<0?1-n:n:e<0?n:1-n}var so,ao=X({},Ar,{fade:{show:function(){return[{opacity:0,zIndex:0},{zIndex:-1}]},percent:function(t){return 1-He(t,\"opacity\")},translate:function(t){return[{opacity:1-t,zIndex:0},{zIndex:-1}]}},scale:{show:function(){return[{opacity:0,transform:_r(1.5),zIndex:0},{zIndex:-1}]},percent:function(t){return 1-He(t,\"opacity\")},translate:function(t){return[{opacity:1-t,transform:_r(1+.5*t),zIndex:0},{zIndex:-1}]}},pull:{show:function(t){return t<0?[{transform:Nr(30),zIndex:-1},{transform:Nr(),zIndex:0}]:[{transform:Nr(-100),zIndex:0},{transform:Nr(),zIndex:-1}]},percent:function(t,e,n){return n<0?1-Cr(e):Cr(t)},translate:function(t,e){return e<0?[{transform:Nr(30*t),zIndex:-1},{transform:Nr(-100*(1-t)),zIndex:0}]:[{transform:Nr(100*-t),zIndex:0},{transform:Nr(30*(1-t)),zIndex:-1}]}},push:{show:function(t){return t<0?[{transform:Nr(100),zIndex:0},{transform:Nr(),zIndex:-1}]:[{transform:Nr(-30),zIndex:-1},{transform:Nr(),zIndex:0}]},percent:function(t,e,n){return 0<n?1-Cr(e):Cr(t)},translate:function(t,e){return e<0?[{transform:Nr(100*t),zIndex:0},{transform:Nr(-30*(1-t)),zIndex:-1}]:[{transform:Nr(-30*t),zIndex:-1},{transform:Nr(100*(1-t)),zIndex:0}]}}}),ho={mixins:[ti,zr,Xr],props:{ratio:String,minHeight:Number,maxHeight:Number},data:{ratio:\"16:9\",minHeight:!1,maxHeight:!1,selList:\".uk-slideshow-items\",attrItem:\"uk-slideshow-item\",selNav:\".uk-slideshow-nav\",Animations:ao},update:{read:function(){var t=this.ratio.split(\":\").map(Number),e=t[0],n=t[1];return n=n*this.list.offsetWidth/e||0,this.minHeight&&(n=Math.max(this.minHeight,n)),this.maxHeight&&(n=Math.min(this.maxHeight,n)),{height:n-hn(this.list,\"content-box\")}},write:function(t){var e=t.height;He(this.list,\"minHeight\",e)},events:[\"resize\"]}},co={mixins:[ti,xr],props:{group:String,threshold:Number,clsItem:String,clsPlaceholder:String,clsDrag:String,clsDragState:String,clsBase:String,clsNoDrag:String,clsEmpty:String,clsCustom:String,handle:String},data:{group:!1,threshold:5,clsItem:\"uk-sortable-item\",clsPlaceholder:\"uk-sortable-placeholder\",clsDrag:\"uk-sortable-drag\",clsDragState:\"uk-drag\",clsBase:\"uk-sortable\",clsNoDrag:\"uk-sortable-nodrag\",clsEmpty:\"uk-sortable-empty\",clsCustom:\"\",handle:!1},created:function(){var o=this;[\"init\",\"start\",\"move\",\"end\"].forEach(function(t){var r=o[t];o[t]=function(t){o.scrollY=window.pageYOffset;var e=Wt(t,\"page\"),n=e.x,i=e.y;o.pos={x:n,y:i},r(t)}})},events:{name:ne,passive:!1,handler:\"init\"},update:{write:function(){if(this.clsEmpty&&Oe(this.$el,this.clsEmpty,P(this.$el.children)),He(this.handle?Te(this.handle,this.$el):this.$el.children,{touchAction:\"none\",userSelect:\"none\"}),this.drag){en(this.drag,{top:this.pos.y+this.origin.top,left:this.pos.x+this.origin.left});var t,e=en(this.drag),n=e.top,i=n+e.height;0<n&&n<this.scrollY?t=this.scrollY-5:i<on(document)&&i>on(window)+this.scrollY&&(t=this.scrollY+5),t&&setTimeout(function(){return mn(window,t)},5)}}},methods:{init:function(t){var e=t.target,n=t.button,i=t.defaultPrevented,r=V(this.$el.children).filter(function(t){return _t(e,t)})[0];!r||i||0<n||Ct(e)||_t(e,\".\"+this.clsNoDrag)||this.handle&&!_t(e,this.handle)||(t.preventDefault(),this.touched=[this],this.placeholder=r,this.origin=X({target:e,index:ce(r)},this.pos),Mt(document,ie,this.move),Mt(document,re,this.end),Mt(window,\"scroll\",this.scroll),this.threshold||this.start(t))},start:function(t){this.drag=fe(this.$container,this.placeholder.outerHTML.replace(/^<li/i,\"<div\").replace(/li>$/i,\"div>\")),He(this.drag,X({boxSizing:\"border-box\",width:this.placeholder.offsetWidth,height:this.placeholder.offsetHeight},He(this.placeholder,[\"paddingLeft\",\"paddingRight\",\"paddingTop\",\"paddingBottom\"]))),it(this.drag,\"uk-no-boot\",\"\"),Ae(this.drag,this.clsDrag,this.clsCustom),on(this.drag.firstElementChild,on(this.placeholder.firstElementChild));var e=en(this.placeholder),n=e.left,i=e.top;X(this.origin,{left:n-this.pos.x,top:i-this.pos.y}),Ae(this.placeholder,this.clsPlaceholder),Ae(this.$el.children,this.clsItem),Ae(document.documentElement,this.clsDragState),Bt(this.$el,\"start\",[this,this.placeholder]),this.move(t)},move:function(t){if(this.drag){this.$emit();var e=\"mousemove\"===t.type?t.target:document.elementFromPoint(this.pos.x-window.pageXOffset,this.pos.y-window.pageYOffset),n=this.getSortable(e),i=this.getSortable(this.placeholder),r=n!==i;if(n&&!_t(e,this.placeholder)&&(!r||n.group&&n.group===i.group)){if(e=n.$el===e.parentNode&&e||V(n.$el.children).filter(function(t){return _t(e,t)})[0],r)i.remove(this.placeholder);else if(!e)return;n.insert(this.placeholder,e),y(this.touched,n)||this.touched.push(n)}}else(Math.abs(this.pos.x-this.origin.x)>this.threshold||Math.abs(this.pos.y-this.origin.y)>this.threshold)&&this.start(t)},end:function(t){if(Ot(document,ie,this.move),Ot(document,re,this.end),Ot(window,\"scroll\",this.scroll),this.drag){var e=this.getSortable(this.placeholder);this===e?this.origin.index!==ce(this.placeholder)&&Bt(this.$el,\"moved\",[this,this.placeholder]):(Bt(e.$el,\"added\",[e,this.placeholder]),Bt(this.$el,\"removed\",[this,this.placeholder])),Bt(this.$el,\"stop\",[this,this.placeholder]),ve(this.drag),this.drag=null;var n=this.touched.map(function(t){return t.clsPlaceholder+\" \"+t.clsItem}).join(\" \");this.touched.forEach(function(t){return Ce(t.$el.children,n)}),Ce(document.documentElement,this.clsDragState)}else\"touchend\"===t.type&&t.target.click()},scroll:function(){var t=window.pageYOffset;t!==this.scrollY&&(this.pos.y+=t-this.scrollY,this.scrollY=t,this.$emit())},insert:function(t,e){var n=this;Ae(this.$el.children,this.clsItem);function i(){e?!_t(t,n.$el)||function(t,e){return t.parentNode===e.parentNode&&ce(t)>ce(e)}(t,e)?pe(e,t):me(e,t):fe(n.$el,t)}this.animation?this.animate(i):i()},remove:function(t){_t(t,this.$el)&&(He(this.handle?Te(this.handle,t):t,{touchAction:\"\",userSelect:\"\"}),this.animation?this.animate(function(){return ve(t)}):ve(t))},getSortable:function(t){return t&&(this.$getComponent(t,\"sortable\")||this.getSortable(t.parentNode))}}};var uo,lo,fo,po=[],mo={mixins:[Qi,ei,ci],args:\"title\",props:{delay:Number,title:String},data:{pos:\"top\",title:\"\",delay:0,animation:[\"uk-animation-scale-up\"],duration:100,cls:\"uk-active\",clsPos:\"uk-tooltip\"},beforeConnect:function(){this._hasTitle=rt(this.$el,\"title\"),it(this.$el,{title:\"\",\"aria-expanded\":!1})},disconnected:function(){this.hide(),it(this.$el,{title:this._hasTitle?this.title:null,\"aria-expanded\":null})},methods:{show:function(){var e=this;this.isActive()||(po.forEach(function(t){return t.hide()}),po.push(this),this._unbind=Mt(document,re,function(t){return!_t(t.target,e.$el)&&e.hide()}),clearTimeout(this.showTimer),this.showTimer=setTimeout(function(){e._show(),e.hideTimer=setInterval(function(){Et(e.$el)||e.hide()},150)},this.delay))},hide:function(){!this.isActive()||bt(this.$el,\"input\")&&this.$el===document.activeElement||(po.splice(po.indexOf(this),1),clearTimeout(this.showTimer),clearInterval(this.hideTimer),it(this.$el,\"aria-expanded\",!1),this.toggleElement(this.tooltip,!1),this.tooltip&&ve(this.tooltip),this.tooltip=!1,this._unbind())},_show:function(){this.tooltip=fe(this.container,'<div class=\"'+this.clsPos+'\" aria-expanded=\"true\" aria-hidden> <div class=\"'+this.clsPos+'-inner\">'+this.title+\"</div> </div>\"),this.positionAt(this.tooltip,this.$el),this.origin=\"y\"===this.getAxis()?dn(this.dir)+\"-\"+this.align:this.align+\"-\"+dn(this.dir),this.toggleElement(this.tooltip,!0)},isActive:function(){return y(po,this)}},events:(so={focus:\"show\",blur:\"hide\"},so[oe+\" \"+se]=function(t){jt(t)||(t.type===oe?this.show():this.hide())},so[ne]=function(t){jt(t)&&(this.isActive()?this.hide():this.show())},so)},go={props:{allow:String,clsDragover:String,concurrent:Number,maxSize:Number,method:String,mime:String,msgInvalidMime:String,msgInvalidName:String,msgInvalidSize:String,multiple:Boolean,name:String,params:Object,type:String,url:String},data:{allow:!1,clsDragover:\"uk-dragover\",concurrent:1,maxSize:0,method:\"POST\",mime:!1,msgInvalidMime:\"Invalid File Type: %s\",msgInvalidName:\"Invalid File Name: %s\",msgInvalidSize:\"Invalid File Size: %s Kilobytes Max\",multiple:!1,name:\"files[]\",params:{},type:\"\",url:\"\",abort:Q,beforeAll:Q,beforeSend:Q,complete:Q,completeAll:Q,error:Q,fail:Q,load:Q,loadEnd:Q,loadStart:Q,progress:Q},events:{change:function(t){bt(t.target,'input[type=\"file\"]')&&(t.preventDefault(),t.target.files&&this.upload(t.target.files),t.target.value=\"\")},drop:function(t){wo(t);var e=t.dataTransfer;e&&e.files&&(Ce(this.$el,this.clsDragover),this.upload(e.files))},dragenter:function(t){wo(t)},dragover:function(t){wo(t),Ae(this.$el,this.clsDragover)},dragleave:function(t){wo(t),Ce(this.$el,this.clsDragover)}},methods:{upload:function(t){var i=this;if(t.length){Bt(this.$el,\"upload\",[t]);for(var e=0;e<t.length;e++){if(this.maxSize&&1e3*this.maxSize<t[e].size)return void this.fail(this.msgInvalidSize.replace(\"%s\",this.maxSize));if(this.allow&&!vo(this.allow,t[e].name))return void this.fail(this.msgInvalidName.replace(\"%s\",this.allow));if(this.mime&&!vo(this.mime,t[e].type))return void this.fail(this.msgInvalidMime.replace(\"%s\",this.mime))}this.multiple||(t=[t[0]]),this.beforeAll(this,t);var r=function(t,e){for(var n=[],i=0;i<t.length;i+=e){for(var r=[],o=0;o<e;o++)r.push(t[i+o]);n.push(r)}return n}(t,this.concurrent),o=function(t){var e=new FormData;for(var n in t.forEach(function(t){return e.append(i.name,t)}),i.params)e.append(n,i.params[n]);Kt(i.url,{data:e,method:i.method,responseType:i.type,beforeSend:function(t){var e=t.xhr;e.upload&&Mt(e.upload,\"progress\",i.progress),[\"loadStart\",\"load\",\"loadEnd\",\"abort\"].forEach(function(t){return Mt(e,t.toLowerCase(),i[t])}),i.beforeSend(t)}}).then(function(t){i.complete(t),r.length?o(r.shift()):i.completeAll(t)},function(t){return i.error(t)})};o(r.shift())}}}};function vo(t,e){return e.match(new RegExp(\"^\"+t.replace(/\\//g,\"\\\\/\").replace(/\\*\\*/g,\"(\\\\/[^\\\\/]+)*\").replace(/\\*/g,\"[^\\\\/]+\").replace(/((?!\\\\))\\?/g,\"$1.\")+\"$\",\"i\"))}function wo(t){t.preventDefault(),t.stopPropagation()}function bo(){xo(document.body,lo),xn.flush(),new MutationObserver(function(t){return t.forEach(yo)}).observe(document,{childList:!0,subtree:!0,characterData:!0,attributes:!0}),uo._initialized=!0}function yo(t){var e=t.target;(\"attributes\"!==t.type?function(t){for(var e=t.addedNodes,n=t.removedNodes,i=0;i<e.length;i++)xo(e[i],lo);for(var r=0;r<n.length;r++)xo(n[r],fo);return!0}(t):function(t){var e=t.target,n=t.attributeName;if(\"href\"===n)return!0;var i=Pn(n);if(!(i&&i in uo))return;if(rt(e,n))return uo[i](e),!0;var r=uo.getComponent(e,i);if(r)return r.$destroy(),!0}(t))&&uo.update(e)}function xo(t,e){if(1===t.nodeType&&!rt(t,\"uk-no-boot\"))for(e(t),t=t.firstElementChild;t;){var n=t.nextElementSibling;xo(t,e),t=n}}return Hn.component(\"countdown\",wr),Hn.component(\"filter\",Sr),Hn.component(\"lightbox\",Fr),Hn.component(\"lightboxPanel\",Pr),Hn.component(\"notification\",Vr),Hn.component(\"parallax\",Ur),Hn.component(\"slider\",no),Hn.component(\"sliderParallax\",io),Hn.component(\"slideshow\",ho),Hn.component(\"slideshowParallax\",io),Hn.component(\"sortable\",co),Hn.component(\"tooltip\",mo),Hn.component(\"upload\",go),lo=(uo=Hn).connect,fo=uo.disconnect,\"MutationObserver\"in window&&(document.body?bo():new MutationObserver(function(){document.body&&(this.disconnect(),bo())}).observe(document,{childList:!0,subtree:!0})),Hn});","import App from \"./App.svelte\";\nimport \"./global.css\";\nimport \"./fonts.css\";\nimport \"/assets/lato-latin-ext.woff2\";\nimport \"/assets/lato-latin.woff2\";\nimport \"/assets/budibase-logo.png\";\nimport \"/assets/budibase-logo-only.png\";\nimport \"uikit/dist/css/uikit.min.css\";\nimport \"uikit/dist/js/uikit.min.js\";\n\nconst app = new App({\n\ttarget: document.getElementById(\"app\")\n});\n\n\n"],"names":["noop","assign","tar","src","k","run","fn","blank_object","Object","create","run_all","fns","forEach","is_function","thing","safe_not_equal","a","b","subscribe","component","store","callback","unsub","$$","on_destroy","push","unsubscribe","create_slot","definition","ctx","slot_ctx","get_slot_context","$$scope","get_slot_changes","changed","append","target","node","appendChild","insert","anchor","insertBefore","detach","parentNode","removeChild","destroy_each","iterations","detaching","i","length","d","element","name","document","createElement","text","data","createTextNode","space","empty","listen","event","handler","options","addEventListener","removeEventListener","attr","attribute","value","removeAttribute","setAttribute","set_data","set_style","key","style","setProperty","select_option","select","option","__value","selected","select_options","indexOf","current_component","set_current_component","onMount","Error","get_current_component","on_mount","bubble","callbacks","type","slice","dirty_components","binding_callbacks","render_callbacks","flush_callbacks","resolved_promise","Promise","resolve","update_scheduled","add_render_callback","add_flush_callback","flush","seen_callbacks","Set","shift","update","pop","has","add","fragment","dirty","before_update","p","after_update","outroing","outros","group_outros","r","c","check_outros","transition_in","block","local","delete","transition_out","o","handle_promise","promise","info","token","index","resolved","[object Object]","child_ctx","current","blocks","m","mount","then","error","catch","pending","bind","props","bound","mount_component","new_on_destroy","map","filter","destroy_component","make_dirty","init","instance","create_fragment","not_equal","prop_names","parent_component","context","Map","ready","hydrate","l","Array","from","childNodes","intro","SvelteComponent","this","$destroy","splice","color","className","borderClass","grouped","groupPosition","n","t","call","apply","e","u","v","f","s","h","_","g","y","F","T","x","j","A","S","O","I","R","z","Un","W","size","B","L","U","D","Rn","test","On","lastIndex","Qn","M","match","split","$","NaN","N","P","Z","q","V","K","G","RegExp","source","H","J","Y","Q","X","nn","tn","rn","en","un","on","cn","an","ln","sn","hn","pn","_n","vn","gn","dn","yn","bn","xn","jn","wn","mn","An","kn","Sn","In","join","zn","Wn","Bn","Ln","\\","'","\n","\r","
","
","Cn","parseFloat","Dn","parseInt","Mn","global","Tn","self","$n","Function","Fn","exports","nodeType","Nn","module","Pn","Zn","process","qn","types","binding","Vn","isArrayBuffer","Kn","isDate","Gn","isMap","Hn","isRegExp","Jn","isSet","Yn","isTypedArray","Xn","À","Á","Â","Ã","Ä","Å","à","á","â","ã","ä","å","Ç","ç","Ð","ð","È","É","Ê","Ë","è","é","ê","ë","Ì","Í","Î","Ï","ì","í","î","ï","Ñ","ñ","Ò","Ó","Ô","Õ","Ö","Ø","ò","ó","ô","õ","ö","ø","Ù","Ú","Û","Ü","ù","ú","û","ü","Ý","ý","ÿ","Æ","æ","Þ","þ","ß","Ā","Ă","Ą","ā","ă","ą","Ć","Ĉ","Ċ","Č","ć","ĉ","ċ","č","Ď","Đ","ď","đ","Ē","Ĕ","Ė","Ę","Ě","ē","ĕ","ė","ę","ě","Ĝ","Ğ","Ġ","Ģ","ĝ","ğ","ġ","ģ","Ĥ","Ħ","ĥ","ħ","Ĩ","Ī","Ĭ","Į","İ","ĩ","ī","ĭ","į","ı","Ĵ","ĵ","Ķ","ķ","ĸ","Ĺ","Ļ","Ľ","Ŀ","Ł","ĺ","ļ","ľ","ŀ","ł","Ń","Ņ","Ň","Ŋ","ń","ņ","ň","ŋ","Ō","Ŏ","Ő","ō","ŏ","ő","Ŕ","Ŗ","Ř","ŕ","ŗ","ř","Ś","Ŝ","Ş","Š","ś","ŝ","ş","š","Ţ","Ť","Ŧ","ţ","ť","ŧ","Ũ","Ū","Ŭ","Ů","Ű","Ų","ũ","ū","ŭ","ů","ű","ų","Ŵ","ŵ","Ŷ","ŷ","Ÿ","Ź","Ż","Ž","ź","ż","ž","IJ","ij","Œ","œ","ʼn","ſ","nt","&","<",">","\"","tt","&","<",">",""","'","rt","yu","ff","oi","Fe","En","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","clear","set","__data__","of","af","_f","ni","Se","ir","it","lu","st","ot","ft","ct","uo","at","Cr","Wu","Ai","configurable","enumerable","writable","ht","Ku","Ru","pt","_t","du","constructor","input","me","Ur","vo","Ir","Ae","_o","Mr","Bu","lt","po","Dr","Rr","buffer","byteOffset","byteLength","zr","exec","to","Qu","Ee","get","pf","sf","ve","_e","gt","dt","ti","bo","yt","bt","xt","wu","jt","wt","ke","mt","oo","At","fo","Et","_u","kt","Sr","Me","St","Ot","mi","ai","It","Rt","zt","Wt","Ci","Lt","hr","Ve","Ut","Mt","se","vi","message","he","$t","Ft","ci","hi","Te","qt","$u","Jt","Ht","Zu","Vt","ze","Li","Kt","Gt","su","xe","We","Ie","zu","Yt","Le","hu","xu","Ou","Qt","Xt","ye","sort","w","Wr","tr","lr","er","xi","ur","xr","Ii","Ti","or","fr","xo","Be","pr","_r","vr","gr","dr","yr","ro","br","so","jr","wr","func","thisArg","args","mr","Ar","Er","kr","jo","Iu","Or","gi","copy","Br","Ui","Lr","Tr","$r","Oe","Fr","Nr","Zr","charAt","qr","Mu","Du","replace","Vr","arguments","eo","prototype","Kr","de","ue","Jr","placeholder","Gr","Hr","pe","thru","reverse","ge","ho","Re","plant","Yr","Bt","Qr","Xr","ne","Oi","te","re","Au","ee","Su","yo","Ue","ie","Yu","Eu","Wi","oe","C","E","fe","co","Pr","ce","ei","ae","le","Ze","Gi","iteratee","Fu","be","je","we","gu","di","ji","$e","Ce","Di","De","ii","clone","Ne","Pe","qe","Ke","Ge","$i","He","Je","Ye","Qe","nu","tu","io","ru","eu","uu","fu","Go","lo","leading","maxWait","trailing","cancel","cu","cache","Cache","au","pu","vu","bu","li","ju","mu","wi","next","done","Uu","ku","valueOf","Lu","Cu","$f","toLowerCase","Tu","Nu","chain","Pu","rr","qu","Vu","defaults","pick","Gu","Date","Hu","Ju","Math","Xu","String","TypeError","ri","ui","toString","hasOwnProperty","fi","keys","IE_PROTO","si","pi","Buffer","_i","Symbol","Uint8Array","getPrototypeOf","yi","bi","propertyIsEnumerable","isConcatSpreadable","iterator","toStringTag","Ei","clearTimeout","ki","now","Si","setTimeout","ceil","floor","Ri","getOwnPropertySymbols","zi","isBuffer","isFinite","Bi","max","min","Mi","random","Fi","Ni","Pi","Zi","qi","Vi","Ki","Hi","Ji","Yi","Qi","Xi","no","templateSettings","escape","evaluate","interpolate","variable","imports","hash","string","ao","ArrayBuffer","go","charCodeAt","wo","mo","Ao","Eo","ko","So","Oo","Io","Ro","zo","Wo","Bo","Lo","Uo","Co","Do","Mo","To","$o","Fo","No","Po","Zo","qo","Vo","Ko","Ho","Jo","Yo","Qo","Xo","nf","tf","rf","ef","uf","isArray","cf","lf","hf","vf","gf","df","yf","bf","xf","jf","wf","mf","Of","Af","Ef","kf","Sf","If","Rf","nr","zf","Wf","Bf","Lf","Uf","Cf","Df","Mf","Tf","toUpperCase","Ff","Nf","Pf","Zf","qf","Vf","Kf","Gf","Hf","Jf","Yf","Qf","Xf","nc","tc","rc","ec","uc","after","ary","assignIn","assignInWith","assignWith","before","bindAll","bindKey","castArray","chunk","compact","concat","cond","conforms","vt","constant","countBy","curry","iu","curryRight","ou","debounce","defaultsDeep","defer","delay","difference","differenceBy","differenceWith","drop","dropRight","dropRightWhile","dropWhile","fill","flatMap","flatMapDeep","flatMapDepth","flatten","flattenDeep","flattenDepth","flip","flow","flowRight","fromPairs","functions","functionsIn","groupBy","initial","intersection","intersectionBy","intersectionWith","invert","invertBy","invokeMap","keyBy","keysIn","mapKeys","mapValues","matches","matchesProperty","memoize","merge","mergeWith","method","methodOf","mixin","negate","nthArg","omit","omitBy","once","orderBy","over","overArgs","overEvery","overSome","partial","partialRight","partition","pickBy","property","propertyOf","pull","pullAll","pullAllBy","pullAllWith","pullAt","range","rangeRight","rearg","reject","remove","rest","sampleSize","setWith","shuffle","sortBy","sortedUniq","sortedUniqBy","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toArray","toPairs","toPairsIn","toPath","toPlainObject","transform","unary","union","unionBy","unionWith","uniq","uniqBy","uniqWith","unset","unzip","unzipWith","updateWith","values","valuesIn","without","words","wrap","xor","xorBy","xorWith","zip","zipObject","zipObjectDeep","zipWith","entries","entriesIn","extend","extendWith","attempt","camelCase","capitalize","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","deburr","defaultTo","divide","endsWith","eq","escapeRegExp","every","find","findIndex","findKey","findLast","findLastIndex","findLastKey","forEachRight","forIn","forInRight","forOwn","forOwnRight","gte","hasIn","head","identity","includes","inRange","invoke","isArguments","isArrayLike","isArrayLikeObject","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isError","isFunction","isInteger","isLength","isMatch","isMatchWith","isNaN","isNative","isNil","isNull","isNumber","isObject","isObjectLike","isPlainObject","isSafeInteger","isString","isSymbol","isUndefined","isWeakMap","isWeakSet","kebabCase","last","lastIndexOf","lowerCase","lowerFirst","lte","maxBy","mean","meanBy","minBy","stubArray","stubFalse","stubObject","stubString","stubTrue","multiply","nth","noConflict","pad","padEnd","padStart","reduce","reduceRight","repeat","result","round","runInContext","sample","snakeCase","some","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startCase","startsWith","subtract","sum","sumBy","template","sourceURL","times","toFinite","toInteger","toLength","toLower","toNumber","toSafeInteger","toUpper","trim","trimEnd","trimStart","truncate","separator","omission","search","unescape","uniqueId","upperCase","upperFirst","each","eachRight","first","VERSION","start","end","commit","toJSON","extendAll","extendAllWith","__","all","allPass","always","any","anyPass","assoc","assocPath","complement","compose","contains","dissoc","dissocPath","dropLast","dropLastWhile","equals","identical","indexBy","invertObj","juxt","omitAll","nAry","path","pathEq","pathOr","paths","pickAll","pipe","pluck","prop","propEq","propOr","symmetricDifference","symmetricDifferenceBy","symmetricDifferenceWith","takeLast","takeLastWhile","unapply","unnest","useWith","where","whereEq","zipObj","1","2","3","4","findFrom","findIndexFrom","findLastFrom","findLastIndexFrom","assignInAllWith","assignAllWith","getOr","mergeAllWith","padChars","padCharsEnd","padCharsStart","rangeStep","rangeStepRight","assignAll","assignInAll","defaultsAll","defaultsDeepAll","invokeArgs","invokeArgsMap","mergeAll","zipAll","array","object","aliasToReal","curryN","curryRightN","includesFrom","indexOfFrom","lastIndexOfFrom","restFrom","spreadFrom","trimChars","trimCharsEnd","trimCharsStart","baseAry","cloneArray","wrapImmutable","cloner","undefined","baseConvert","util","isLib","isObj","config","cap","fixed","immutable","defaultHolder","fallbackHolder","forceCurry","forceFixed","forceRearg","pristine","helpers","aryMethodKeys","mapping","aryMethod","wrappers","arity","pairs","pair","indexes","castCap","iterateeRearg","overArg","baseArity","iterateeAry","castFixed","skipFixed","methodSpread","otherArgs","flatSpread","castRearg","skipRearg","methodRearg","aryRearg","cloneByPath","nested","createConverter","realName","methodName","remap","oldOptions","newUtil","newFunc","newOptions","wrapped","wrapper","mutate","createCloner","aryKey","otherName","afterRearg","convert","realToAlias","alias","require$$0","require$$1","seed","alphabet","previousSeed","shuffled","nextValue","_seed_","ORIGINAL","reset","setCharacters","_alphabet_","unique","item","ind","arr","getShuffled","characterIndex","sourceArray","targetArray","randomFromSeed","characters","lookup","crypto","window","msCrypto","getRandomValues","bytes","mask","log","LN2","step","id","byte","counter","previousSeconds","number","loopCounter","str","format","pow","REDUCE_TIME","version","clusterWorkerId","seconds","generate","build","seedValue","workerId","newCharacters","isValid","LARGE_ARRAY_SIZE","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","PLACEHOLDER","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","WRAP_BIND_FLAG","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","HOT_COUNT","HOT_SPAN","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","NAN","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","domExcTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","weakSetTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","root","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","require","nodeIsArrayBuffer","nodeIsDate","nodeIsMap","nodeIsRegExp","nodeIsSet","nodeIsTypedArray","arrayAggregator","setter","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","offset","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","arg","replaceHolders","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","uid","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","nativeObjectToString","objectCtorString","oldDash","reIsNative","allocUnsafe","getPrototype","objectCreate","spreadableSymbol","symIterator","symToStringTag","defineProperty","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","nativeIsBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","baseLodash","chainAll","Hash","entry","ListCache","MapCache","SetCache","Stack","arrayLikeKeys","inherited","isArr","isArg","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","skip","lower","upper","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","initCloneArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","baseAssignIn","getSymbols","copySymbols","symbol","regexp","Ctor","cloneArrayBuffer","dataView","cloneDataView","cloneTypedArray","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","wait","baseDifference","isCommon","valuesLength","outer","computed","valuesIndex","getMapData","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","other","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","Infinity","seen","baseInvoke","parent","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","baseIteratee","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","getMatchData","matchesStrictComparable","isKey","isStrictComparable","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","criteria","objCriteria","othCriteria","ordersLength","compareAscending","order","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","baseSetData","baseSetToString","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","high","mid","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","createCompounder","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","getFuncName","funcName","getData","isLaziable","createHybrid","partialsRight","holdersRight","argPos","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","arrLength","oldArray","reorder","createInverter","toIteratee","baseInverter","createMathOperation","operator","defaultValue","createOver","arrayFunc","createPadding","chars","charsLength","createRange","baseRange","createRelationalOperation","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrValue","otherFunc","getValue","hasPath","hasFunc","ctorString","isMaskable","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","count","lastCalled","stamp","remaining","rand","memoizeCapped","quote","subString","mapped","group","interceptor","wrapperAt","lastArgs","lastThis","timerId","lastCallTime","lastInvokeTime","maxing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","resolver","memoized","transforms","funcsLength","iteratorToArray","remainder","isBinary","propsIndex","propsLength","basePick","word","pattern","hasUnicodeWord","unicodeWords","asciiWords","methodNames","basePropertyDeep","augend","addend","dividend","divisor","multiplier","multiplicand","minuend","subtrahend","baseConforms","properties","baseFill","limit","isArrLike","position","baseInRange","strictLastIndexOf","strLength","radix","floating","temp","settings","isEscaping","isEvaluating","importsKeys","importsValues","reDelimiters","escapeValue","interpolateValue","esTemplateValue","evaluateValue","substring","newEnd","prefix","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","dir","isRight","view","getView","iterLength","takeCount","iterIndex","filters","limiters","compileRawExpression","compileRawCode","filterRegex","limiterRegex","argsRegex","expressionCache","codeCache","compileExpression","expression","tokens","filterTokens","filterName","effect","argExpressions","parseExpression","tempVars","list","evaluateArgExpression","compileCode","code","limiterTokens","limiterName","parseCode","state","limiter","argExpression","globalObj","hasHandler","allHandlers","globals","$nxCompileToSandbox","obj","Proxy","$nxClearSandbox","step2list","step3list","re_mgr0","re_mgr1","re_meq1","re_s_v","re_1a","re2_1a","re_1b","re2_1b","re_1b_2","re2_1b_2","re3_1b_2","re4_1b_2","re_1c","re_2","re_3","re_4","re2_4","re_5","re_5_1","re3_5","porterStemmer","lunr","builder","Builder","pipeline","trimmer","stopWordFilter","stemmer","searchPipeline","utils","warn","console","asString","val","FieldRef","docRef","fieldName","stringValue","_stringValue","joiner","fromString","fieldRef","elements","complete","intersect","idf","posting","documentCount","documentsWithTerm","abs","Token","metadata","tokenizer","len","sliceEnd","sliceStart","sliceLength","tokenMetadata","Pipeline","_stack","registeredFunctions","registerFunction","label","warnIfFunctionNotRegistered","load","serialised","fnName","existingFn","newFn","pos","stackLength","memo","runString","Vector","_magnitude","positionForIndex","pivotPoint","pivotIndex","insertIdx","upsert","magnitude","sumOfSquares","elementsLength","sqrt","dot","otherVector","dotProduct","aLen","bLen","aVal","bVal","similarity","output","ational","tional","enci","anci","izer","bli","alli","entli","eli","ousli","ization","ation","ator","alism","iveness","fulness","ousness","aliti","iviti","biliti","logi","icate","ative","alize","iciti","ical","ful","ness","stem","suffix","firstch","re2","re3","re4","substr","fp","generateStopWordFilter","stopWords","stopWord","TokenSet","final","edges","_nextId","fromArray","finish","fromClause","clause","fromFuzzyString","term","editDistance","editsRemaining","frame","noEditNode","char","insertionNode","substitutionNode","transposeNode","charA","charB","edge","_str","labels","qNode","qEdges","qLen","nEdges","nLen","qEdge","nEdge","previousWord","uncheckedNodes","minimizedNodes","commonPrefix","minimize","child","nextNode","downTo","childKey","Index","attrs","invertedIndex","fieldVectors","tokenSet","fields","queryString","query","QueryParser","parse","Query","matchingFields","queryVectors","termFieldCache","requiredMatches","prohibitedMatches","clauses","terms","clauseMatches","usePipeline","termTokenSet","expandedTerms","presence","REQUIRED","field","expandedTerm","termIndex","_index","fieldPosting","matchingDocumentRefs","termField","matchingDocumentsSet","PROHIBITED","boost","fieldMatch","matchingDocumentRef","matchingFieldRef","MatchData","allRequiredMatches","allProhibitedMatches","matchingFieldRefs","results","isNegated","docMatch","fieldVector","score","combine","ref","serializedIndex","serializedVectors","serializedInvertedIndex","tokenSetBuilder","tuple","_ref","_fields","_documents","fieldTermFrequencies","fieldLengths","_b","_k1","metadataWhitelist","attributes","RangeError","k1","doc","extractor","fieldTerms","metadataKey","calculateAverageFieldLengths","fieldRefs","numberOfFields","documentsWithField","averageFieldLength","createFieldVectors","fieldRefsLength","termIdfCache","fieldLength","termFrequencies","termsLength","fieldBoost","docBoost","scoreWithPrecision","createTokenSet","use","unshift","clonedMetadata","metadataKeys","otherMatchData","allFields","wildcard","NONE","LEADING","TRAILING","OPTIONAL","QueryParseError","QueryLexer","lexemes","escapeCharPositions","lexText","sliceString","subSlices","emit","escapeCharacter","EOS","width","ignore","backup","acceptDigitRun","charCode","more","FIELD","TERM","EDIT_DISTANCE","BOOST","PRESENCE","lexField","lexer","lexTerm","lexEditDistance","lexBoost","lexEOS","termSeparator","currentClause","lexemeIdx","parseClause","peekLexeme","consumeLexeme","lexeme","nextClause","completedClause","parser","parsePresence","parseField","parseTerm","errorMessage","nextLexeme","possibleFields","parseEditDistance","parseBoost","revLookup","Arr","inited","encodeChunk","uint8","tmp","num","fromByteArray","extraBytes","parts","len2","read","isLE","mLen","nBytes","eLen","eMax","eBias","nBits","write","TYPED_ARRAY_SUPPORT","_kMaxLength","kMaxLength","createBuffer","that","__proto__","encodingOrOffset","fromArrayLike","fromArrayBuffer","encoding","isEncoding","actual","internalIsBuffer","checked","fromObject","assertSize","_isBuffer","isView","loweredCase","utf8ToBytes","base64ToBytes","swap","bidirectionalIndexOf","arrayIndexOf","indexSize","valLength","buf","readUInt16BE","foundIndex","found","hexWrite","Number","strLen","parsed","utf8Write","blitBuffer","asciiWrite","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","units","utf16leToBytes","base64Slice","base64.fromByteArray","utf8Slice","res","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","fromCharCode","decodeCodePointsArray","poolSize","_augment","alloc","allocUnsafeSlow","compare","swap16","swap32","swap64","hexSlice","asciiSlice","latin1Slice","utf16leSlice","inspect","thisStart","thisEnd","thisCopy","targetCopy","_arr","ret","out","toHex","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","ieee754.write","writeDouble","newBuf","subarray","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","ieee754.read","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","leadSurrogate","b64","placeHolders","base64.toByteArray","stringtrim","base64clean","dst","isFastBuffer","isSlowBuffer","copyProps","SafeBuffer","SlowBuffer","commonPlus","extra","common","_events","recordApi","save","getContext","getNew","validate","uploadFile","downloadFile","indexApi","buildIndex","listItems","aggregates","collectionApi","getAllowedRecordTypes","initialise","authApi","authenticate","authenticateTemporaryAccess","createTemporaryAccess","createUser","enableUser","disableUser","loadAccessLevels","getNewAccessLevel","getNewUser","getNewUserAuth","getUsers","saveAccessLevels","isAuthorized","changeMyPassword","setPasswordFromTemporaryCode","scorePassword","isValidPassword","validateUser","validateAccessLevels","setUserAccessLevels","templateApi","saveApplicationHierarchy","saveActionsAndTriggers","actionsApi","execute","_eventsList","makeEvent","area","areaKey","methodKey","events","eventsList","BadRequestError","super","httpStatusCode","UnauthorisedError","NotFoundError","apiWrapper","async","app","eventNamespace","eventContext","params","pushCallStack","handleNotAuthorized","startDate","elapsed","publish","onBegin","publishComplete","publishError","apiWrapperSync","err","seedCallId","callId","calls","threadCallId","createCallStack","namespace","popCallStack","onError","endcontext","onComplete","getLock","lockFile","timeoutMilliseconds","maxLockRetries","retryCount","lock","timeout","getEpochTime","totalTimeout","datastore","createFile","getLockFileContent","NO_LOCK","parseLockFileContent","loadFile","deleteFile","sleepForRetry","epochTime","content","releaseLock","isNolock","trimKeySep","joinKey","strs","paramsOrArray","isArray$1","safeKey","join$1","splitKey","split$1","getDirFomKey","getFileFromKey","fieldDefinitions","templateDefinitions","appDefinitionFile","dirIndex","folderPath","getIndexKeyFromFileKey","ifExists","exists","notExists","isUndefined$1","not","isDefined","isNonNull","isNotNaN","isNaN$1","allTrue","funcArgs","reduce$1","conditionFunc","anyTrue","insensitiveEquals","str1","str2","isSomething","isNothing","isNothingOrEmpty","somethingOrGetDefault","getDefaultFunc","mapIfSomethingOrDefault","mapFunc","defaultVal","none","isNotEmpty","ob","isNonEmptyArray","isNonEmptyString","tryOr","failFunc","tryAwaitOr","tryOrIgnore","tryAwaitOrIgnore","causesException","executesWithoutException","handleErrorWith","returnValInError","handleErrorWithUndefined","switchCase","cases","nextCase","nextResult","isOneOf","vals","defaultCase","getHashCode","toDateOrNull","toBoolOrNull","toNumberOrNull","isArrayOfString","opts","pause","duration","retry","retries","getOrDefault","mapIfSomethingOrBlank","configFolder","StartsWith","searchFor","searchIn","keySep","somethingOrDefault","isValue","val1","val2","memberMatches","member","defineError","errorPrefix","awEx","toDate","toBool","makerule","validationError","rule","applyRuleSet","ruleSet","itemToValidate","applyRule","itemTovalidate","indexTypes","ancestor","indexRuleSet","compileCode$1","compileMap","compileExpression$1","compileFilter","isEmpty$1","isRecord","indexType","includes$1","getFlattenedHierarchy","appHierarchy","useCached","flattenHierarchy","currentNode","flattened","children","aggregateGroups","unionIfAny","l2","l1","getExactNodeForPath","pathRegx","hasMatchingAncestor","ancestorPredicate","decendantNode","constant$1","getNode","nodeKey","isCollectionRecord","collectionNodeKey","getNodeByKeyOrNodeKey","keyOrNodeKey","nodeByKey","isNode","isKeyAncestorOf","ancestorKey","isAncestor","decendant","isDecendant","getRecordNodeIdFromId","recordId","recordNodeIdIsAllowed","indexNode","nodeId","allowedRecordNodeIds","recordNodeIsAllowed","recordNode","isSingle","isaggregateGroup","isRoot","isDecendantOfARecord","isGlobalIndex","isReferenceIndex","isAncestorIndex","fieldReversesReferenceToIndex","typeOptions","reverseIndexNodeKeys","hierarchy","getLastPartInKey","getNodesInPath","getActualKeyOfParent","parentNodeKey","actualChildKey","ks","getParentKey","hasNoMatchingAncestors","parentPredicate","findField","getRecordNodeId","recordKey","getRecordNodeById","getAllowedRecordNodesForIndex","recordNodes","getNodeFromNodeKeyHash","isShardedIndex","getShardName","fieldReversesReferenceToNode","getSafeFieldParser","tryParse","defaultValueFunctions","record","getSafeValueParser","getUndefinedValue","success","default","getNewValue","getInitialValue","typeFunctions","specificFunctions","null","validateTypeConstraints","validationRules","fieldValue","validateRule","getMessage","errors","getDefaultOptions","makerule$1","parsedFailed","parsedSuccess","getDefaultExport","sampleValue","stringify","safeParseField","safeParseValue","optionDefinitions","getDefaultValue","stringFunctions","stringTryParse","requirementDescription","allowDeclaredValuesOnly","typeConstraints","boolFunctions","boolTryParse","options$1","allowNulls","typeConstraints$1","bool","JSON","numberFunctions","numberTryParse","options$2","maxValue","minValue","decimalPlaces","typeConstraints$2","splitDecimal","getDecimalPlaces","dateFunctions","isValidDate","dateTryParse","options$3","typeConstraints$3","datetime","date","mapToParsedArrary","options$4","minLength","typeConstraints$4","typeName","arrayTryParse","arrayFunctions","referenceNothing","referenceFunctions","isObjectWithKey","hasStringValue","options$5","indexNodeKey","displayValue","typeConstraints$5","isEmptyString","referenceExists","fileNothing","relativePath","fileFunctions","fileName","filePath","isValidFile","isNull$1","has$1","isNumber$1","isString$1","isLegalFilename","file","all$1","basicTypes","kvType","concreteArray","allTypes","getDefaultOptions$1","getType","USERS_LIST_FILE","userAuthFile","username","USERS_LOCK_FILE","ACCESS_LEVELS_FILE","ACCESS_LEVELS_LOCK_FILE","permissionTypes","CREATE_RECORD","UPDATE_RECORD","READ_RECORD","DELETE_RECORD","READ_INDEX","MANAGE_INDEX","MANAGE_COLLECTION","WRITE_TEMPLATES","CREATE_USER","SET_PASSWORD","CREATE_TEMPORARY_ACCESS","ENABLE_DISABLE_USER","WRITE_ACCESS_LEVELS","LIST_USERS","LIST_ACCESS_LEVELS","EXECUTE_ACTION","SET_USER_ACCESS_LEVELS","getUserByName","users","stripUserOfSensitiveStuff","user","stripped","tempCode","parseTemporaryCode","fullCode","permissionType","resourceKey","alwaysAuthorized","_isAuthorized","permissions","userperm","nodePermission","accessLevel","staticPermission","createRecord","updateRecord","deleteRecord","readRecord","writeTemplates","setPassword","readIndex","manageIndex","manageCollection","enableDisableUser","writeAccessLevels","listUsers","listAccessLevels","executeAction","permission","global$1","toByteArray","createNodeErrors","nodeKeyMaker","isSingleRecord","collectionName","validate$1","construct","pathRegxMaker","collectionPathRegx","addToParent","defaultIndex","find$1","constructNode","getNodeId","findRoot","constructHierarchy","each$1","def","getNewRootLevel","pathMaps","_getNewRecordTemplate","createDefaultIndex","allidsShardFactor","getNewIndexTemplate","getNewRecordTemplate","getNewSingleRecordTemplate","getSortKey","getNewAggregateGroupTemplate","condition","getNewAggregateTemplate","aggregatedValue","fieldErrors","AddFieldValidationFailed","getNewField","fieldRules","keys$1","allowedTypes","typeOptionsRules","optName","validateField","everySingleField","validateAllFields","addField","recordTemplate","validationMessages","getNewRecordValidationRule","invalidFields","messageWhenInvalid","expressionWhenValid","getStaticValue","isBoolean$1","defaultCase$1","commonRecordValidationRules","fieldNotEmpty","fieldBetween","fieldGreaterThan","addRecordValidationRule","createTrigger","actionName","eventName","optionsCreator","createAction","behaviourSource","behaviourName","initialOptions","aggregateRules","validateAggregate","aggregate","sets","commonRules","stringNotEmpty","recordRules","aggregateGroupRules","validateNode","getRuleSet","validateAll","duplicateNameRule","duplicateNodeKeyErrors","aggregateErrors","validateAllAggregates","actionRules","duplicateActionRule","validateAction","validateActions","allActions","duplicateActions","a2","validateTrigger","trigger","triggerRules","validateTriggers","triggers","getApplicationDefinition","appDefinition","loadJson","_saveApplicationHierarchy","validationErrors","updateJson","createFolder","createJson","_saveActionsAndTriggers","actionValidErrs","triggerValidErrs","getTemplateApi","getBehaviourSources","api$1","_getUsers","_loadAccessLevels","dummyHash","password","_authenticate","allUsers","userAuth","enabled","accessLevels","passwordHash","buildUserPermissions","verified","verify","isUser","tempAccessCode","temporaryAccessId","temporaryAccessHash","temporaryAccessExpiryEpoch","userAccessLevels","allAccessLevels","levels","ua","createTemporaryAccess$1","userName","_createTemporaryAccess","getTemporaryCode","tempId","allusers","u2","userRules","_getNewUser","_getNewUserAuth","_isValidPassword","currentPw","newpassword","_changeMyPassword","existingAuth","doSet","_setPasswordFromTemporaryCode","currentTime","auth","_scorePassword","letters","variations","digits","nonWords","variationCount","check","strengthText","createUser$1","_createUser","userErrors","join$2","getAccess","tempAccess","_enableUser","_disableUser","toggleUser","permissionRules","isAllowedType","isRecordOrIndexType","applyPermissionRules","applyLevelRules","allLevels","accessLevelRules","_validateAccessLevels","level","validateAccessLevel","_saveAccessLevels","errs","setUserAccessLevels$1","_setUserAccessLevels","actualAccessLevels","missing","getAuthApi","generateFullPermissions","allNodes","indexNodes","hierarchyFunctions","getPotentialReverseReferenceIndexes","refIndex","getPotentialReferenceIndexes","getDefaultTypeOptions","getNewAction","getNewTrigger","appname","location","apps","fetch","json","hasAppPackage","pkg","shadowHierarchy","createShadowHierarchy","newRecord","useRoot","currentNodeIsNew","selectExistingNode","newIndex","saveCurrentNode","existingNode","cloned","currentIndex","savePackage","importAppDefinition","deleteCurrentNode","nodeToDelete","saveField","databaseStore","db","deleteField","saveAction","newAction","oldAction","existingAction","deleteAction","saveTrigger","newTrigger","oldTrigger","existingTrigger","deleteTrigger","saveLevel","newLevel","oldLevel","existingLevel","deleteLevel","setActiveNav","navName","activeNav","headers","Content-Type","body","database","stop","subscribers","new_value","invalidate","subscriber","newChildRecord","newRootRecord","newChildIndex","newRootIndex","getStore","setupRouter","pushState","history","$database","factory","modules","installedModules","__webpack_require__","moduleId","getter","__esModule","./dist/icons.json","activity","airplay","alert-circle","alert-octagon","alert-triangle","align-center","align-justify","align-left","align-right","aperture","archive","arrow-down-circle","arrow-down-left","arrow-down-right","arrow-down","arrow-left-circle","arrow-left","arrow-right-circle","arrow-right","arrow-up-circle","arrow-up-left","arrow-up-right","arrow-up","at-sign","award","bar-chart-2","bar-chart","battery-charging","battery","bell-off","bell","bluetooth","bold","book-open","book","bookmark","box","briefcase","calendar","camera-off","camera","cast","check-circle","check-square","chevron-down","chevron-left","chevron-right","chevron-up","chevrons-down","chevrons-left","chevrons-right","chevrons-up","chrome","circle","clipboard","clock","cloud-drizzle","cloud-lightning","cloud-off","cloud-rain","cloud-snow","cloud","codepen","codesandbox","coffee","columns","command","compass","corner-down-left","corner-down-right","corner-left-down","corner-left-up","corner-right-down","corner-right-up","corner-up-left","corner-up-right","cpu","credit-card","crop","crosshair","disc","dollar-sign","download-cloud","download","droplet","edit-2","edit-3","edit","external-link","eye-off","eye","facebook","fast-forward","feather","figma","file-minus","file-plus","file-text","film","flag","folder-minus","folder-plus","folder","framer","frown","gift","git-branch","git-commit","git-merge","git-pull-request","github","gitlab","globe","grid","hard-drive","headphones","heart","help-circle","hexagon","home","image","inbox","instagram","italic","layers","layout","life-buoy","link-2","link","linkedin","loader","log-in","log-out","mail","map-pin","maximize-2","maximize","meh","menu","message-circle","message-square","mic-off","mic","minimize-2","minus-circle","minus-square","minus","monitor","moon","more-horizontal","more-vertical","mouse-pointer","move","music","navigation-2","navigation","octagon","package","paperclip","pause-circle","pen-tool","percent","phone-call","phone-forwarded","phone-incoming","phone-missed","phone-off","phone-outgoing","phone","pie-chart","play-circle","play","plus-circle","plus-square","plus","pocket","power","printer","radio","refresh-ccw","refresh-cw","rewind","rotate-ccw","rotate-cw","rss","scissors","send","server","share-2","share","shield-off","shield","shopping-bag","shopping-cart","sidebar","skip-back","skip-forward","slack","slash","sliders","smartphone","smile","speaker","square","star","stop-circle","sun","sunrise","sunset","tablet","terminal","thermometer","thumbs-down","thumbs-up","toggle-left","toggle-right","trash-2","trash","trello","trending-down","trending-up","triangle","truck","tv","twitter","umbrella","underline","unlock","upload-cloud","upload","user-check","user-minus","user-plus","user-x","video-off","video","voicemail","volume-1","volume-2","volume-x","volume","watch","wifi-off","wifi","wind","x-circle","x-octagon","x-square","youtube","zap-off","zap","zoom-in","zoom-out","./node_modules/classnames/dedupe.js","__WEBPACK_AMD_DEFINE_RESULT__","classNames","StorageObject","_parseArray","resultSet","_parse","hasOwn","SPACE","argType","_parseString","_parseObject","_parseNumber","classSet","./node_modules/core-js/es/array/from.js","./node_modules/core-js/internals/a-function.js","./node_modules/core-js/internals/an-object.js","./node_modules/core-js/internals/array-from.js","toObject","callWithSafeIterationClosing","isArrayIteratorMethod","createProperty","getIteratorMethod","arrayLike","argumentsLength","mapfn","iteratorMethod","./node_modules/core-js/internals/array-includes.js","toIndexedObject","toAbsoluteIndex","IS_INCLUDES","$this","el","./node_modules/core-js/internals/bind-context.js","aFunction","./node_modules/core-js/internals/call-with-safe-iteration-closing.js","anObject","ENTRIES","returnMethod","./node_modules/core-js/internals/check-correctness-of-iteration.js","ITERATOR","wellKnownSymbol","SAFE_CLOSING","called","iteratorWithReturn","return","SKIP_CLOSING","ITERATION_SUPPORT","./node_modules/core-js/internals/classof-raw.js","./node_modules/core-js/internals/classof.js","classofRaw","TO_STRING_TAG","CORRECT_ARGUMENTS","tryGet","callee","./node_modules/core-js/internals/copy-constructor-properties.js","ownKeys","getOwnPropertyDescriptorModule","definePropertyModule","getOwnPropertyDescriptor","./node_modules/core-js/internals/correct-prototype-getter.js","fails","./node_modules/core-js/internals/create-iterator-constructor.js","IteratorPrototype","createPropertyDescriptor","setToStringTag","Iterators","returnThis","IteratorConstructor","NAME","./node_modules/core-js/internals/create-property-descriptor.js","bitmap","./node_modules/core-js/internals/create-property.js","toPrimitive","propertyKey","./node_modules/core-js/internals/define-iterator.js","createIteratorConstructor","setPrototypeOf","hide","redefine","IS_PURE","IteratorsCore","BUGGY_SAFARI_ITERATORS","Iterable","DEFAULT","IS_SET","FORCED","CurrentIteratorPrototype","methods","KEY","getIterationMethod","KIND","defaultIterator","IterablePrototype","INCORRECT_VALUES_NAME","nativeIterator","anyNativeIterator","forced","./node_modules/core-js/internals/descriptors.js","./node_modules/core-js/internals/document-create-element.js","exist","./node_modules/core-js/internals/enum-bug-keys.js","./node_modules/core-js/internals/export.js","setGlobal","copyConstructorProperties","isForced","targetProperty","sourceProperty","descriptor","TARGET","GLOBAL","STATIC","stat","noTargetGet","sham","./node_modules/core-js/internals/fails.js","./node_modules/core-js/internals/function-to-string.js","shared","./node_modules/core-js/internals/get-iterator-method.js","classof","./node_modules/core-js/internals/global.js","globalThis","./node_modules/core-js/internals/has.js","./node_modules/core-js/internals/hidden-keys.js","./node_modules/core-js/internals/hide.js","DESCRIPTORS","./node_modules/core-js/internals/html.js","documentElement","./node_modules/core-js/internals/ie8-dom-define.js","./node_modules/core-js/internals/indexed-object.js","./node_modules/core-js/internals/internal-state.js","NATIVE_WEAK_MAP","objectHas","sharedKey","hiddenKeys","wmget","wmhas","wmset","STATE","enforce","getterFor","TYPE","./node_modules/core-js/internals/is-array-iterator-method.js","ArrayPrototype","./node_modules/core-js/internals/is-forced.js","replacement","feature","detection","normalize","POLYFILL","NATIVE","./node_modules/core-js/internals/is-object.js","./node_modules/core-js/internals/is-pure.js","./node_modules/core-js/internals/iterators-core.js","PrototypeOfArrayIteratorPrototype","arrayIterator","./node_modules/core-js/internals/iterators.js","./node_modules/core-js/internals/native-symbol.js","./node_modules/core-js/internals/native-weak-map.js","nativeFunctionToString","./node_modules/core-js/internals/object-create.js","defineProperties","enumBugKeys","html","documentCreateElement","Empty","createDict","iframeDocument","iframe","display","contentWindow","open","close","Properties","./node_modules/core-js/internals/object-define-properties.js","objectKeys","./node_modules/core-js/internals/object-define-property.js","IE8_DOM_DEFINE","nativeDefineProperty","Attributes","./node_modules/core-js/internals/object-get-own-property-descriptor.js","propertyIsEnumerableModule","nativeGetOwnPropertyDescriptor","./node_modules/core-js/internals/object-get-own-property-names.js","internalObjectKeys","getOwnPropertyNames","./node_modules/core-js/internals/object-get-own-property-symbols.js","./node_modules/core-js/internals/object-get-prototype-of.js","CORRECT_PROTOTYPE_GETTER","ObjectPrototype","./node_modules/core-js/internals/object-keys-internal.js","names","./node_modules/core-js/internals/object-keys.js","./node_modules/core-js/internals/object-property-is-enumerable.js","nativePropertyIsEnumerable","NASHORN_BUG","./node_modules/core-js/internals/object-set-prototype-of.js","validateSetPrototypeOfArguments","correctSetter","./node_modules/core-js/internals/own-keys.js","getOwnPropertyNamesModule","getOwnPropertySymbolsModule","Reflect","./node_modules/core-js/internals/path.js","./node_modules/core-js/internals/redefine.js","InternalStateModule","getInternalState","enforceInternalState","TEMPLATE","unsafe","simple","./node_modules/core-js/internals/require-object-coercible.js","./node_modules/core-js/internals/set-global.js","./node_modules/core-js/internals/set-to-string-tag.js","TAG","./node_modules/core-js/internals/shared-key.js","./node_modules/core-js/internals/shared.js","mode","copyright","./node_modules/core-js/internals/string-at.js","requireObjectCoercible","CONVERT_TO_STRING","second","./node_modules/core-js/internals/to-absolute-index.js","integer","./node_modules/core-js/internals/to-indexed-object.js","IndexedObject","./node_modules/core-js/internals/to-integer.js","argument","./node_modules/core-js/internals/to-length.js","./node_modules/core-js/internals/to-object.js","./node_modules/core-js/internals/to-primitive.js","./node_modules/core-js/internals/uid.js","postfix","./node_modules/core-js/internals/validate-set-prototype-of-arguments.js","./node_modules/core-js/internals/well-known-symbol.js","NATIVE_SYMBOL","./node_modules/core-js/modules/es.array.from.js","checkCorrectnessOfIteration","./node_modules/core-js/modules/es.string.iterator.js","codePointAt","defineIterator","setInternalState","iterated","point","./node_modules/webpack/buildin/global.js","eval","./src/default-attrs.json","xmlns","height","viewBox","stroke","stroke-width","stroke-linecap","stroke-linejoin","./src/icon.js","_extends","_createClass","Constructor","protoProps","staticProps","_dedupe2","_interopRequireDefault","_defaultAttrs2","Icon","contents","tags","_classCallCheck","class","attrsToString","./src/icons.js","_icon2","_icons2","_tags2","icon","./src/index.js","_toSvg2","_replace2","icons","toSvg","./src/replace.js","elementsToReplace","querySelectorAll","elementAttrs","getAttrs","svgString","svgElement","DOMParser","parseFromString","querySelector","replaceChild","replaceElement","./src/tags.json","life-bouy","./src/to-svg.js","_icons","0","getIcon","navActive","setActive","textMember","valueMember","multiple","selected_option","inputChanged","ev","valuesText","hasErrors","__assign","HOOKS","_disable","_enable","allowInput","altFormat","altInput","altInputClass","animate","navigator","userAgent","ariaDateFormat","clickOpens","closeOnSelect","conjunction","dateFormat","defaultHour","defaultMinute","defaultSeconds","disable","disableMobile","enable","enableSeconds","enableTime","errorHandler","getWeek","givenDate","getTime","setHours","setDate","getDate","getDay","week1","getFullYear","hourIncrement","ignoredFocusElements","inline","locale","minuteIncrement","nextArrow","noCalendar","onChange","onClose","onDayCreate","onDestroy","onKeyDown","onMonthChange","onOpen","onParseConfig","onReady","onValueUpdate","onYearChange","onPreCalendarPosition","plugins","positionElement","prevArrow","shorthandCurrentMonth","showMonths","static","time_24hr","weekNumbers","english","weekdays","shorthand","longhand","months","daysInMonth","firstDayOfWeek","ordinal","rangeSeparator","weekAbbreviation","scrollTitle","toggleTitle","amPM","yearAriaLabel","int","immediate","arrayify","toggleClass","elem","classList","textContent","clearNode","firstChild","createNumberInput","inputClassName","numInput","arrowUp","arrowDown","doNothing","monthToStr","monthNumber","revFormat","dateObj","monthName","setMonth","hour","day","getHours","shortMonth","setSeconds","unixSeconds","weekNum","weekNumber","year","setFullYear","ISODate","minutes","setMinutes","month","unixMillSeconds","tokenRegex","formats","toISOString","getMonth","getSeconds","getMinutes","createDateFormatter","_a","_c","l10n","frmt","overrideLocale","formatDate","createDateParser","givenFormat","timeless","customLocale","parsedDate","dateOrig","toFixed","datestr","parseDate","matched","ops","matchIndex","regexStr","token_1","isBackSlash","escaped","compareDates","date1","date2","isBetween","ts","ts1","ts2","DAY","_loop_1","args_1","DEBOUNCED_CHANGE_MS","FlatpickrInstance","instanceConfig","flatpickr","defaultConfig","bindToInstance","setCalendarWidth","requestAnimationFrame","calendarContainer","visibility","daysContainer","daysWidth","days","offsetWidth","weekWrapper","removeProperty","updateTime","selectedDates","setDefaultTime","preventDefault","isKeyDown","getAttribute","curValue","delta","which","isHourElem","hourElement","isMinuteElem","minuteElement","incrementNumInput","timeWrapper","prevValue","_input","setHoursFromInputs","updateValue","_debouncedChange","hours","secondElement","limitMinHours","minTime","minDate","minDateHasTime","latestSelectedDateObj","limitMaxHours","maxTime","maxDate","maxDateHasTime","setHoursFromDate","setDefaultHours","minHr","minMinutes","maxHr","maxMinutes","isMobile","onYearInput","changeYear","_handlers","onClick","evt","triggerChange","triggerEvent","bindEvents","inputType","mobileInput","tabIndex","disabled","required","mobileFormatStr","nextSibling","setupMobile","debouncedResize","onResize","onMouseOver","ontouchstart","documentClick","capture","monthNav","onMonthNavClick","selectDate","timeContainer","timeIncrement","jumpToDate","jumpDate","jumpTo","oldYear","currentYear","oldMonth","currentMonth","buildMonthSwitch","redraw","inputElem","createEvent","dispatchEvent","createDocumentFragment","yearElements","monthElements","prevMonthNav","innerHTML","nextMonthNav","buildMonths","__hidePrevMonthArrow","__hideNextMonthArrow","currentYearElement","updateNavigationCurrentMonth","innerContainer","buildWeeks","rContainer","buildWeekdays","buildDays","hourInput","getElementsByTagName","minuteInput","military2ampm","secondInput","title","buildTime","customAppend","appendTo","createDay","dayNumber","dateIsEnabled","isEnabled","dayElement","todayDateElem","isDateSelected","selectedDateElem","isDateInRange","insertAdjacentHTML","focusOnDayElem","targetNode","focus","getFirstAvailableDay","startMonth","endMonth","startIndex","endIndex","focusOnDay","dayFocused","isInView","activeElement","startElem","givenMonth","loopDelta","numMonthDays","changeMonth","getNextAvailableDay","buildMonthDays","firstOfMonth","prevMonthDays","getDaysInMonth","isMultiMonth","prevMonthDayClass","nextMonthDayClass","dayIndex","dayNum","dayContainer","frag","shouldBuildMonth","monthsDropdownContainer","buildMonth","monthElement","container","monthNavFragment","selectedMonth","yearInput","tabindex","yearElement","weekdayContainer","updateWeekdays","isOffset","_hidePrevMonthArrow","_hideNextMonthArrow","isCalendarElem","isOpen","eventTarget_1","composedPath","getEventTarget","isCalendarElement","isInput","lostFocus","relatedTarget","isIgnored","newYear","newYearNum","isNewYear","dateToCheck","allowKeydown","allowInlineKeydown","keyCode","blur","isTimeObj","focusAndClose","delta_1","ctrlKey","stopPropagation","elems","pluginElements","shiftKey","hoverDate","firstElementChild","initialDate","rangeStartDate","rangeEndDate","containsDisabled","minRange","maxRange","dayElem","timestamp","outOfRange","positionCalendar","minMaxDateSetter","inverseDateObj","setupLocale","l10ns","userConfig","dataset","customPositionElement","_positionElement","calendarHeight","acc","offsetHeight","calendarWidth","configPos","configPosVertical","configPosHorizontal","inputBounds","getBoundingClientRect","distanceFromBottom","innerHeight","bottom","showOnTop","top","pageYOffset","left","pageXOffset","right","rightMost","centerMost","styleSheets","bodyWidth","centerLeft","centerIndex","cssRules","centerStyle","insertRule","centerBefore","msMaxTouchPoints","findParent","selectedDate","shouldChangeMonth","selectedIndex","showTimeInput","single","loadedPlugins","_bind","_setHoursFromDate","_positionCalendar","triggerChangeEvent","toInitial","_initialDate","_createElement","destroy","lastChild","_type","click","wasOpen","CALLBACKS","setSelectedDate","toggle","inputDate","dates","parseDateRules","hooks","initEvent","getDateStr","dObj","isPrevMonth","isNextMonth","boolOpts","timeMode","defaultDateFormat","defaultAltFormat","_minDate","_maxDate","minMaxTimeSetter","_minTime","_maxTime","hook","pluginConf","parseConfig","nodeName","preloadedDate","defaultDate","_showTimeInput","setupDates","isSafari","_flatpickr","nodeList","nodes","HTMLElement","instances","HTMLCollection","NodeList","selector","Node","localize","setDefaults","jQuery","fp_incr","fpInstance","clonedField","possibleReferenceIndexes","func_1","possibleReverseReferenceIndexes","func_2","func_3","typeChanged","onFinished","selectedReverseRefIndex","detail","objPrototype","hyphenateCache","hyphenateRe","hyphenate","camelizeRe","camelize","ucfirst","strPrototype","startsWithFn","endsWithFn","arrPrototype","includesFn","includesStr","includesArray","findIndexFn","arguments$1","isWindow","isDocument","isJQuery","jquery","isNodeCollection","isNumeric","toBoolean","toFloat","toNode","toNodes","Boolean","toList","toMs","cb","ref$1","propA","propB","uniqueBy","intersectRect","r1","r2","pointInRect","rect","Dimensions","ratio","dimensions","aProp","contain","maxDimensions","this$1","cover","removeAttr","hasAttr","hasAttribute","queryAll","findAll","isContextSelector","ownerDocument","_query","queryFn","removes","contextSanitizeRe","selectorRe","splitSelector","selectors","closest","selectors$1","prev","previousElementSibling","contextSelectorRe","elProto","Element","matchesFn","webkitMatchesSelector","msMatchesSelector","closestFn","parents","escapeFn","CSS","css","voidElements","base","col","embed","img","keygen","menuitem","meta","param","track","wbr","isVoidElement","tagName","isVisible","getClientRects","selInput","within","getArgs","targets","listener","useCapture","toEventTargets","delegates","delegate","off","notCanceled","bubbles","cancelable","initCustomEvent","isEventTarget","toEventTarget","isTouch","pointerType","touches","getEventPos","changedTouches","PromiseFn","Deferred","PENDING","setImmediate","executor","deferred","race","ajax","url","env","xhr","XMLHttpRequest","beforeSend","responseType","header","setRequestHeader","status","statusText","getImage","srcset","sizes","Image","onerror","onload","notify","reason","onResolved","onRejected","isIE","isRtl","hasTouchEvents","hasPointerEvents","PointerEvent","hasTouch","DocumentTouch","maxTouchPoints","pointerDown","pointerMove","pointerUp","pointerEnter","pointerLeave","pointerCancel","readyState","unbind","getIndex","finite","hasChildNodes","insertNodes","wrapAll","structure","wrapInner","unwrap","fragmentRe","singleTagRe","nextElementSibling","isHtml","addClass","apply$1","removeClass","removeClasses","cls","replaceClass","hasClass","force","getArgs$1","supports","Force","Multiple","_multiple","_force","cssNumber","animation-iteration-count","column-count","fill-opacity","flex-grow","flex-shrink","font-weight","line-height","opacity","orphans","stroke-dasharray","stroke-dashoffset","widows","z-index","zoom","propName","getStyle","styles","getStyles","pseudoElt","defaultView","getComputedStyle","vars","getCssVar","docEl","getPropertyValue","cssProps","prefixedName","cssPrefixes","vendorPropName","transition","timing","timer","transition-property","transition-duration","transition-timing-function","Transition","inProgress","animationPrefix","clsCancelAnimation","animation","origin","hasReset","Animation","in","dirs","positionAt","elAttach","targetAttach","elOffset","targetOffset","boundary","getPos","flipped","dim","getDimensions","targetDim","moveTo","getOffsets","boundaries","getWindow","align","alignFlip","elemOffset","centerOffset","centerTargetOffset","newVal","coordinates","currentOffset","hidden","innerWidth","offsetParent","getDocument","getDocEl","parentOffset","dimension","boxModelAdjust","sizing","attach","factor","offsets","flipPosition","topOffset","leftOffset","win","client","bounding","scrolledOver","heightOffset","elHeight","offsetPosition","vp","vh","diff","scrollTop","scrollTo","offsetTop","offsetLeft","toPx","fastdom","reads","writes","task","scheduleFlush","remove$1","runTasks","scheduled","microtask","tasks","MouseTracker","slope","positions","ticking","pageX","pageY","movesTo","prevPos","points","strats","mergeFnData","parentVal","childVal","vm","concatStrat","mergeOptions","extends","mixins","mergeKey","key$1","parseOptions","created","beforeConnect","connected","beforeDisconnect","disconnected","Player","post","cmd","postMessage","isVideo","isYoutube","isVimeo","isHTML5","isIFrame","enableApi","poller","vimeo","setInterval","player_id","clearInterval","mute","muted","IntersectionObserver","IntersectionObserverClass","rootMargin","records","takeRecords","passive","inView","isIntersecting","observe","disconnect","getComponentName","UIkit","_init","freeze","prepend","DATA","_connected","_callUpdate","plugin","installed","Sub","globalAPI","_callHook","handlers","$options","_callConnected","_data","_computeds","_initProps","_initEvents","_initObserver","_callDisconnected","_observer","_unbindEvents","_callWatches","updates","_frames","hooksAPI","getProps","data$1","coerce","prop$1","registerComputed","$props","$el","registerEvent","currentTarget","selfFilter","notIn","normalizeData","_uid","_initData","_initMethods","_initComputeds","$mount","$name","exclude","MutationObserver","$reset","attributeFilter","stateAPI","components","argsArray","functional","getComponent","opt","install","_initialized","getComponents","connect","name$1","componentAPI","$emit","removeEl","$create","$update","$getComponent","$container","instanceAPI","Class","Togglable","queued","initProps","overflow","paddingTop","paddingBottom","marginTop","marginBottom","hideProps","hasAnimation","hasTransition","toggleElement","show","_toggleElement","toggled","isToggled","untoggled","scroll","toggleNow","updateAria","_toggle","inner","lastElementChild","currentHeight","endHeight","toggleAnimation","Accordion","active","collapsible","clsOpen","items","isItem","_wrapper","Alert","selClose","Core","started","x1","y1","x2","y2","registered","Video","automute","autoplay","preload","player","visible","Cover","elWidth","naturalWidth","videoWidth","clientWidth","naturalHeight","videoHeight","clientHeight","Position","clsPos","offset$1","axis","getAxis","Drop","boundaryAlign","delayShow","delayHide","clsDrop","hoverIdle","tracker","clearTimers","defaultPrevented","isActive","tryShow","isDelaying","showTimer","isParentOf","hideTimer","isChildOf","alignTo","Dropdown","FormCustom","files","Gif","inview","Margin","margin","firstColumn","rows","getRows","stacks","row","getOffset","leftDim","Grid","masonry","parallax","clsStack","transitionInProgress","translates","maxColumnHeight","height$1","scrolled","FlexBug","selMinHeight","forceHeight","HeightMatch","heights","getHeights","hasMinHeight","minHeight","hasShrunk","HeightViewport","expand","offsetBottom","Svg","strokeAnimation","include","svg","getSvg","applyAttributes","svgEl","insertSVG","getMaxPathLength","svgs","decodeURIComponent","response","symbols","symbolRe","parseSymbols","parseSVG","getTotalLength","spinner","totop","marker","close-icon","close-large","navbar-toggle-icon","overlay-icon","pagination-next","pagination-previous","search-icon","search-large","search-navbar","slidenav-next","slidenav-next-large","slidenav-previous","slidenav-previous-large","added","cmp","isIcon","cloneNode","applyRtl","IconComponent","Slidenav","Search","Close","Spinner","Img","dataSrc","dataSrcset","cacheKey","dataWidth","dataHeight","dataSizes","isImg","storage","setSrcAttrs","sizesToPixel","observer","currentSrc","devicePixelRatio","bgSize","srcSize","descriptors","srcSetRe","change","backgroundImage","sizesRe","matchMedia","sizeRe","additionRe","sessionStorage","active$1","Media","media","toMedia","Leader","clsWrapper","clsHide","attrFill","Container","Modal","selPanel","escClose","bgClose","overlay","panel","transitionElement","clsPage","scrollbarWidth","animate$1","getActive","_reject","Modal$1","modal","dialog","alert","confirm","prompt","ok","Nav","Navbar","dropdown","dropbar","dropbarMode","dropbarAnchor","dropdowns","getDropdown","transitionTo","newHeight","oldHeight","clip","Offcanvas","clsContainer","clsFlip","clsContainerAnimation","clsSidebarAnimation","clsMode","clsOverlay","targetTouches","clientY","scrollHeight","getViewport","viewport","OverflowAuto","selContainer","selContent","Responsive","Scroll","docHeight","winHeight","startY","currentY","cos","PI","Scrollspy","inViewClass","_ukScrollspyState","abort","ScrollspyNav","links","Sticky","clsActive","clsInactive","clsFixed","clsBelow","selTarget","widthElement","showOnUp","isFixed","elTop","bottomOffset","parseProp","inactive","lastScroll","margins","initTimestamp","lastDir","performance","initScroll","propOffset","Switcher","swiping","attrItem","connects","toggles","hasPrev","Tab","Toggle","href","core","Countdown","unit","total","timespan","digit","targetClass","Animate","sheet","propsFrom","oldScrollY","propsTo","getPositionWithMargin","zIndex","pointerEvents","Filter","selActive","updateState","old","listA","listB","actives","setState","mergeState","getState","stateFilter","ref_sort","stateSort","stateOrder","getFilter","matchFilter","getSelector","sorted","localeCompare","numeric","sortItems","filterBy","Animations","slide","translate","translated","scale3d","Animations$1","fade","scale","triggerUpdate","SliderAutoplay","autoplayInterval","pauseOnHover","startAutoplay","stopAutoplay","slides","isHovering","interval","SliderDrag","draggable","threshold","selSlides","button","drag","_transitioner","getDistance","dragging","prevIndex","unbindMove","distance","dis","nextIndex","_getDistance","itemShown","_translate","_show","dirChange","userSelect","Slider","selNav","nav","selNavItem","navItems","maxIndex","updateNav","getValidIndex","clsActivated","easing","velocity","Transitioner","transitionOptions","speedUp","selList","itemshown","queueIndex","forward","getDirection","_getTransitioner","transitioner","Slideshow","linear","itemshow itemhide itemshown itemhidden","beforeitemshow","itemhidden","lightboxPanel","delayControls","videoAutoplay","caption","showControls","hideControls","getItem","loadItem","alt","setItem","setError","poster","setIframe","getIframe","encodeURI","withCredentials","ref_response","controlsTimer","Lightbox","toItem","containers","Notification","clsClose","clsMsg","notification","closeAll","marginProp","startProps","removeFn","Parallax","bgPos","isColor","isCssProp","steps","getUnit","covers","down","bgProps","bg","backgroundSize","_image","dimEl","dimImage","span","posPercentage","backgroundRepeat","getCss","getStep","Parallax$1","getOffsetElement","ease$1","SliderReactive","getLeft","center","getElLeft","bounds","centerEl","getMax","getWidth","triggerUpdate$1","Slider$1","updateTranslates","getItemIn","getActives","slideLeft","avgWidth","leftCenter","slideWidth","slideRight","itemshow","slideIndex","SliderParallax","selItem","ref_detail","getCurrent","isIn","obj$1","Animations$2","Slideshow$1","maxHeight","Sortable","clsItem","clsPlaceholder","clsDrag","clsDragState","clsBase","clsNoDrag","clsEmpty","clsCustom","handle","scrollY","touchAction","touched","outerHTML","boxSizing","elementFromPoint","sortable","getSortable","classes","isPredecessor","Tooltip","_hasTitle","aria-expanded","_unbind","tooltip","Upload","allow","clsDragover","concurrent","maxSize","mime","msgInvalidMime","msgInvalidName","msgInvalidSize","beforeAll","completeAll","fail","loadEnd","loadStart","progress","transfer","dataTransfer","dragenter","dragover","dragleave","match$1","chunks","FormData","mutations","applyMutation","childList","subtree","characterData","mutation","addedNodes","removedNodes","i$1","applyChildList","attributeName","applyAttribute","boot","ukModal","onClosed","listenerAdded","getTypeOptions","click_handler","click_handler_1","editingField","fieldToEdit","onFinishedFieldEdit","getIndexAllowedRecords","click_handler_2","newField","editField","editIndex","MIN_SAFE_INTEGER","getTypeOptionsValueText","rec","isallowed","change_handler","indexableRecords","toggleAllowedRecord","openConfirmDelete","confirmDelete","onclick","iconName","isDroppedDown","previousSibling","hierarchyWidth","newRecordActions","newIndexActions","defaultNewIndexActions","defaultNewRecordActions","clonedAction","addNewOption","optKey","optValue","removeOption","newActionsList","getDefaultOptionsHtml","editingAction","actionEditingFinished","editingActionIsNew","isEditing","onActionEdit","onActionDelete","onActionSave","onActionCancel","defaultOptions","clonedTrigger","actionNames","allTriggers","newTriggersList","editingTrigger","triggerEditingFinished","editingTriggerIsNew","onTriggerEdit","onTriggerDelete","onTriggerSave","onTriggerCancel","getPermissionName","hasPermission","permissionChanged","clonedLevel","permissionMatrix","allPermissions","matchPermissions","p1","p2","hasPerm","perm","newLevels","createNewLevel","getPermissionsString","editingLevel","onEditingFinished","editingLevelIsNew","onLevelEdit","onLevelDelete","perms","navWidth","et","ut","Tt","Ct","Nt","Pt","Dt","Zt","Xe","sr","ar","cr","getElementById"],"mappings":"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IC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IACvfC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IACvfC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,IAAIC,IAAS,KAAKC,IAAS,KA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"} |