{"version":3,"file":"layout-10a68736.js","sources":["../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSymbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_trimmedEndIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTrim.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toNumber.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toFinite.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toInteger.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/identity.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseCreate.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_apply.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/noop.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_shortOut.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/constant.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_defineProperty.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSetToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFindIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsNaN.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_strictIndexOf.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIndexOf.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayIncludes.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copyObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_overRest.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRest.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isIterateeCall.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createAssigner.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseTimes.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayLikeKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_nativeKeysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseKeysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/keysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isKey.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_memoizeCapped.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stringToPath.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toString.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castPath.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_toKey.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/get.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayPush.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isFlattenable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFlatten.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/flatten.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_flatRest.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayReduce.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackClear.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackDelete.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_stackSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Stack.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssign.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseAssignIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayFilter.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/stubArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbols.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbols.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getSymbolsIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_copySymbolsIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGetAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeys.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getAllKeysIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_Uint8Array.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneArrayBuffer.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneDataView.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneRegExp.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneSymbol.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cloneTypedArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneByTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_initCloneObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseClone.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/cloneDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheAdd.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setCacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_SetCache.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arraySome.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_cacheHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalArrays.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_mapToArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_setToArray.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalByTag.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_equalObjects.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqualDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsEqual.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIsMatch.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_isStrictComparable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_getMatchData.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_matchesStrictComparable.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMatches.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseHasIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_hasPath.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/hasIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMatchesProperty.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseProperty.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePropertyDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/property.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseIteratee.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBaseFor.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFor.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseForOwn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createBaseEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/now.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/defaults.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_assignMergeValue.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isArrayLikeObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_safeGet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/toPlainObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMergeDeep.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMerge.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_arrayIncludesWith.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/last.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_castFunction.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forEach.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseFilter.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/filter.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createFind.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/findIndex.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/find.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseMap.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/map.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/forIn.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseGt.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseHas.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/has.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseValues.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/values.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/isUndefined.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseLt.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/mapValues.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseExtremum.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/max.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/merge.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/min.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/minBy.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePickBy.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseSortBy.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_compareAscending.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_compareMultiple.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseOrderBy.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_basePick.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/pick.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseRange.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createRange.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/range.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseReduce.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/reduce.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/sortBy.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_createSet.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseUniq.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/union.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/uniqueId.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/_baseZipObject.js","../../../node_modules/.pnpm/lodash-es@4.17.21/node_modules/lodash-es/zipObject.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/graphlib/graph.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/data/list.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/greedy-fas.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/acyclic.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/util.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/add-border-segments.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/coordinate-system.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/normalize.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/rank/util.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/graphlib/alg/topsort.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/graphlib/alg/dfs.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/graphlib/alg/postorder.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/graphlib/alg/preorder.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/rank/index.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/nesting-graph.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/order/cross-count.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/order/init-order.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/order/barycenter.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/order/sort.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/order/index.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/position/bk.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/position/index.js","../../../node_modules/.pnpm/dagre-d3-es@7.0.9/node_modules/dagre-d3-es/src/dagre/layout.js"],"sourcesContent":["import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\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 */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\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 */\nfunction 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\nexport default arrayMap;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\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 */\nfunction 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\nexport default baseToString;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","import baseTrim from './_baseTrim.js';\nimport isObject from './isObject.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\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 */\nfunction 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 = baseTrim(value);\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\nexport default toNumber;\n","import toNumber from './toNumber.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\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 */\nfunction 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\nexport default toFinite;\n","import toFinite from './toFinite.js';\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 */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nexport default toInteger;\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 */\nfunction identity(value) {\n return value;\n}\n\nexport default identity;\n","import isObject from './isObject.js';\n\n/** Built-in value references. */\nvar objectCreate = Object.create;\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 */\nvar 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\nexport default baseCreate;\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 */\nfunction 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\nexport default apply;\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 */\nfunction noop() {\n // No operation performed.\n}\n\nexport default noop;\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 */\nfunction 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\nexport default copyArray;\n","/** Used to detect hot functions by number of calls within a span of milliseconds. */\nvar HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeNow = Date.now;\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 */\nfunction 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\nexport default shortOut;\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 */\nfunction constant(value) {\n return function() {\n return value;\n };\n}\n\nexport default constant;\n","import getNative from './_getNative.js';\n\nvar defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n}());\n\nexport default defineProperty;\n","import constant from './constant.js';\nimport defineProperty from './_defineProperty.js';\nimport identity from './identity.js';\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 */\nvar 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\nexport default baseSetToString;\n","import baseSetToString from './_baseSetToString.js';\nimport shortOut from './_shortOut.js';\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 */\nvar setToString = shortOut(baseSetToString);\n\nexport default setToString;\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 */\nfunction 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\nexport default arrayEach;\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 */\nfunction 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\nexport default baseFindIndex;\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 */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\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 */\nfunction 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\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\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 */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","import baseIndexOf from './_baseIndexOf.js';\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 */\nfunction arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n}\n\nexport default arrayIncludes;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\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 */\nfunction 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\nexport default isIndex;\n","import defineProperty from './_defineProperty.js';\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 */\nfunction 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\nexport default baseAssignValue;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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 */\nfunction 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\nexport default assignValue;\n","import assignValue from './_assignValue.js';\nimport baseAssignValue from './_baseAssignValue.js';\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 */\nfunction 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\nexport default copyObject;\n","import apply from './_apply.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\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 */\nfunction 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\nexport default overRest;\n","import identity from './identity.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\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 */\nfunction baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n}\n\nexport default baseRest;\n","import eq from './eq.js';\nimport isArrayLike from './isArrayLike.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\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 */\nfunction 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\nexport default isIterateeCall;\n","import baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\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 */\nfunction 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\nexport default createAssigner;\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 */\nfunction 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\nexport default baseTimes;\n","import baseTimes from './_baseTimes.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isIndex from './_isIndex.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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 */\nfunction 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\nexport default arrayLikeKeys;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeys from './_baseKeys.js';\nimport isArrayLike from './isArrayLike.js';\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 */\nfunction keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n}\n\nexport default keys;\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 */\nfunction 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\nexport default nativeKeysIn;\n","import isObject from './isObject.js';\nimport isPrototype from './_isPrototype.js';\nimport nativeKeysIn from './_nativeKeysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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 */\nfunction 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\nexport default baseKeysIn;\n","import arrayLikeKeys from './_arrayLikeKeys.js';\nimport baseKeysIn from './_baseKeysIn.js';\nimport isArrayLike from './isArrayLike.js';\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 */\nfunction keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n}\n\nexport default keysIn;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\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 */\nfunction 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\nexport default isKey;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\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 */\nfunction 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\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\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 */\nvar 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\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\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 */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\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 */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\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 */\nfunction 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\nexport default toKey;\n","import castPath from './_castPath.js';\nimport toKey from './_toKey.js';\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 */\nfunction 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\nexport default baseGet;\n","import baseGet from './_baseGet.js';\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 */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nexport default get;\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 */\nfunction 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\nexport default arrayPush;\n","import Symbol from './_Symbol.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\n\n/** Built-in value references. */\nvar spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;\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 */\nfunction isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n}\n\nexport default isFlattenable;\n","import arrayPush from './_arrayPush.js';\nimport isFlattenable from './_isFlattenable.js';\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 */\nfunction 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\nexport default baseFlatten;\n","import baseFlatten from './_baseFlatten.js';\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 */\nfunction flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n}\n\nexport default flatten;\n","import flatten from './flatten.js';\nimport overRest from './_overRest.js';\nimport setToString from './_setToString.js';\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 */\nfunction flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n}\n\nexport default flatRest;\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 */\nfunction 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\nexport default arrayReduce;\n","import ListCache from './_ListCache.js';\n\n/**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\nfunction stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n}\n\nexport default stackClear;\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 */\nfunction stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n}\n\nexport default stackDelete;\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 */\nfunction stackGet(key) {\n return this.__data__.get(key);\n}\n\nexport default stackGet;\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 */\nfunction stackHas(key) {\n return this.__data__.has(key);\n}\n\nexport default stackHas;\n","import ListCache from './_ListCache.js';\nimport Map from './_Map.js';\nimport MapCache from './_MapCache.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\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 */\nfunction 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\nexport default stackSet;\n","import ListCache from './_ListCache.js';\nimport stackClear from './_stackClear.js';\nimport stackDelete from './_stackDelete.js';\nimport stackGet from './_stackGet.js';\nimport stackHas from './_stackHas.js';\nimport stackSet from './_stackSet.js';\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 */\nfunction Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n}\n\n// Add methods to `Stack`.\nStack.prototype.clear = stackClear;\nStack.prototype['delete'] = stackDelete;\nStack.prototype.get = stackGet;\nStack.prototype.has = stackHas;\nStack.prototype.set = stackSet;\n\nexport default Stack;\n","import copyObject from './_copyObject.js';\nimport keys from './keys.js';\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 */\nfunction baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n}\n\nexport default baseAssign;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\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 */\nfunction baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n}\n\nexport default baseAssignIn;\n","import root from './_root.js';\n\n/** Detect free variable `exports`. */\nvar freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n/** Detect free variable `module`. */\nvar freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n/** Detect the popular CommonJS extension `module.exports`. */\nvar moduleExports = freeModule && freeModule.exports === freeExports;\n\n/** Built-in value references. */\nvar Buffer = moduleExports ? root.Buffer : undefined,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;\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 */\nfunction 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\nexport default cloneBuffer;\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 */\nfunction 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\nexport default arrayFilter;\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 */\nfunction stubArray() {\n return [];\n}\n\nexport default stubArray;\n","import arrayFilter from './_arrayFilter.js';\nimport stubArray from './stubArray.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\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 */\nvar 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\nexport default getSymbols;\n","import copyObject from './_copyObject.js';\nimport getSymbols from './_getSymbols.js';\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 */\nfunction copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n}\n\nexport default copySymbols;\n","import arrayPush from './_arrayPush.js';\nimport getPrototype from './_getPrototype.js';\nimport getSymbols from './_getSymbols.js';\nimport stubArray from './stubArray.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeGetSymbols = Object.getOwnPropertySymbols;\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 */\nvar 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\nexport default getSymbolsIn;\n","import copyObject from './_copyObject.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\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 */\nfunction copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n}\n\nexport default copySymbolsIn;\n","import arrayPush from './_arrayPush.js';\nimport isArray from './isArray.js';\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 */\nfunction baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n}\n\nexport default baseGetAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbols from './_getSymbols.js';\nimport keys from './keys.js';\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 */\nfunction getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n}\n\nexport default getAllKeys;\n","import baseGetAllKeys from './_baseGetAllKeys.js';\nimport getSymbolsIn from './_getSymbolsIn.js';\nimport keysIn from './keysIn.js';\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 */\nfunction getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n}\n\nexport default getAllKeysIn;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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 */\nfunction 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\nexport default initCloneArray;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Uint8Array = root.Uint8Array;\n\nexport default Uint8Array;\n","import Uint8Array from './_Uint8Array.js';\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 */\nfunction cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n}\n\nexport default cloneArrayBuffer;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\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 */\nfunction cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n}\n\nexport default cloneDataView;\n","/** Used to match `RegExp` flags from their coerced string values. */\nvar reFlags = /\\w*$/;\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 */\nfunction cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n}\n\nexport default cloneRegExp;\n","import Symbol from './_Symbol.js';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\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 */\nfunction cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n}\n\nexport default cloneSymbol;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\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 */\nfunction cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n}\n\nexport default cloneTypedArray;\n","import cloneArrayBuffer from './_cloneArrayBuffer.js';\nimport cloneDataView from './_cloneDataView.js';\nimport cloneRegExp from './_cloneRegExp.js';\nimport cloneSymbol from './_cloneSymbol.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar 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/**\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 */\nfunction 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\nexport default initCloneByTag;\n","import baseCreate from './_baseCreate.js';\nimport getPrototype from './_getPrototype.js';\nimport isPrototype from './_isPrototype.js';\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 */\nfunction initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n}\n\nexport default initCloneObject;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar mapTag = '[object Map]';\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 */\nfunction baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n}\n\nexport default baseIsMap;\n","import baseIsMap from './_baseIsMap.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsMap = nodeUtil && nodeUtil.isMap;\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 */\nvar isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\nexport default isMap;\n","import getTag from './_getTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar setTag = '[object Set]';\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 */\nfunction baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n}\n\nexport default baseIsSet;\n","import baseIsSet from './_baseIsSet.js';\nimport baseUnary from './_baseUnary.js';\nimport nodeUtil from './_nodeUtil.js';\n\n/* Node.js helper references. */\nvar nodeIsSet = nodeUtil && nodeUtil.isSet;\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 */\nvar isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\nexport default isSet;\n","import Stack from './_Stack.js';\nimport arrayEach from './_arrayEach.js';\nimport assignValue from './_assignValue.js';\nimport baseAssign from './_baseAssign.js';\nimport baseAssignIn from './_baseAssignIn.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport copyArray from './_copyArray.js';\nimport copySymbols from './_copySymbols.js';\nimport copySymbolsIn from './_copySymbolsIn.js';\nimport getAllKeys from './_getAllKeys.js';\nimport getAllKeysIn from './_getAllKeysIn.js';\nimport getTag from './_getTag.js';\nimport initCloneArray from './_initCloneArray.js';\nimport initCloneByTag from './_initCloneByTag.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isMap from './isMap.js';\nimport isObject from './isObject.js';\nimport isSet from './isSet.js';\nimport keys from './keys.js';\nimport keysIn from './keysIn.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n objectTag = '[object Object]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n weakMapTag = '[object WeakMap]';\n\nvar 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 identify `toStringTag` values supported by `_.clone`. */\nvar cloneableTags = {};\ncloneableTags[argsTag] = cloneableTags[arrayTag] =\ncloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\ncloneableTags[boolTag] = cloneableTags[dateTag] =\ncloneableTags[float32Tag] = cloneableTags[float64Tag] =\ncloneableTags[int8Tag] = cloneableTags[int16Tag] =\ncloneableTags[int32Tag] = cloneableTags[mapTag] =\ncloneableTags[numberTag] = cloneableTags[objectTag] =\ncloneableTags[regexpTag] = cloneableTags[setTag] =\ncloneableTags[stringTag] = cloneableTags[symbolTag] =\ncloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\ncloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\ncloneableTags[errorTag] = cloneableTags[funcTag] =\ncloneableTags[weakMapTag] = false;\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 */\nfunction 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\nexport default baseClone;\n","import baseClone from './_baseClone.js';\n\n/** Used to compose bitmasks for cloning. */\nvar CLONE_DEEP_FLAG = 1,\n CLONE_SYMBOLS_FLAG = 4;\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 */\nfunction cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n}\n\nexport default cloneDeep;\n","/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\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 */\nfunction setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n}\n\nexport default setCacheAdd;\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 */\nfunction setCacheHas(value) {\n return this.__data__.has(value);\n}\n\nexport default setCacheHas;\n","import MapCache from './_MapCache.js';\nimport setCacheAdd from './_setCacheAdd.js';\nimport setCacheHas from './_setCacheHas.js';\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 */\nfunction 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// Add methods to `SetCache`.\nSetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\nSetCache.prototype.has = setCacheHas;\n\nexport default SetCache;\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 */\nfunction 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\nexport default arraySome;\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 */\nfunction cacheHas(cache, key) {\n return cache.has(key);\n}\n\nexport default cacheHas;\n","import SetCache from './_SetCache.js';\nimport arraySome from './_arraySome.js';\nimport cacheHas from './_cacheHas.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\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 */\nfunction 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 // Check that cyclic values are equal.\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\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\nexport default equalArrays;\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 */\nfunction 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\nexport default mapToArray;\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 */\nfunction 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\nexport default setToArray;\n","import Symbol from './_Symbol.js';\nimport Uint8Array from './_Uint8Array.js';\nimport eq from './eq.js';\nimport equalArrays from './_equalArrays.js';\nimport mapToArray from './_mapToArray.js';\nimport setToArray from './_setToArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n/** `Object#toString` result references. */\nvar boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]';\n\nvar arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]';\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;\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 */\nfunction 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\nexport default equalByTag;\n","import getAllKeys from './_getAllKeys.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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 */\nfunction 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 // Check that cyclic values are equal.\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\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\nexport default equalObjects;\n","import Stack from './_Stack.js';\nimport equalArrays from './_equalArrays.js';\nimport equalByTag from './_equalByTag.js';\nimport equalObjects from './_equalObjects.js';\nimport getTag from './_getTag.js';\nimport isArray from './isArray.js';\nimport isBuffer from './isBuffer.js';\nimport isTypedArray from './isTypedArray.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1;\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n objectTag = '[object Object]';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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 */\nfunction 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\nexport default baseIsEqualDeep;\n","import baseIsEqualDeep from './_baseIsEqualDeep.js';\nimport isObjectLike from './isObjectLike.js';\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 */\nfunction 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\nexport default baseIsEqual;\n","import Stack from './_Stack.js';\nimport baseIsEqual from './_baseIsEqual.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\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 */\nfunction 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\nexport default baseIsMatch;\n","import isObject from './isObject.js';\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 */\nfunction isStrictComparable(value) {\n return value === value && !isObject(value);\n}\n\nexport default isStrictComparable;\n","import isStrictComparable from './_isStrictComparable.js';\nimport keys from './keys.js';\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 */\nfunction 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\nexport default getMatchData;\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 */\nfunction 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\nexport default matchesStrictComparable;\n","import baseIsMatch from './_baseIsMatch.js';\nimport getMatchData from './_getMatchData.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\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 */\nfunction 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\nexport default baseMatches;\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 */\nfunction baseHasIn(object, key) {\n return object != null && key in Object(object);\n}\n\nexport default baseHasIn;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\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 */\nfunction 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\nexport default hasPath;\n","import baseHasIn from './_baseHasIn.js';\nimport hasPath from './_hasPath.js';\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 */\nfunction hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n}\n\nexport default hasIn;\n","import baseIsEqual from './_baseIsEqual.js';\nimport get from './get.js';\nimport hasIn from './hasIn.js';\nimport isKey from './_isKey.js';\nimport isStrictComparable from './_isStrictComparable.js';\nimport matchesStrictComparable from './_matchesStrictComparable.js';\nimport toKey from './_toKey.js';\n\n/** Used to compose bitmasks for value comparisons. */\nvar COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\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 */\nfunction 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\nexport default baseMatchesProperty;\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 */\nfunction baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n}\n\nexport default baseProperty;\n","import baseGet from './_baseGet.js';\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 */\nfunction basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n}\n\nexport default basePropertyDeep;\n","import baseProperty from './_baseProperty.js';\nimport basePropertyDeep from './_basePropertyDeep.js';\nimport isKey from './_isKey.js';\nimport toKey from './_toKey.js';\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 */\nfunction property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n}\n\nexport default property;\n","import baseMatches from './_baseMatches.js';\nimport baseMatchesProperty from './_baseMatchesProperty.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\nimport property from './property.js';\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 */\nfunction 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\nexport default baseIteratee;\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 */\nfunction 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\nexport default createBaseFor;\n","import createBaseFor from './_createBaseFor.js';\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 */\nvar baseFor = createBaseFor();\n\nexport default baseFor;\n","import baseFor from './_baseFor.js';\nimport keys from './keys.js';\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 */\nfunction baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n}\n\nexport default baseForOwn;\n","import isArrayLike from './isArrayLike.js';\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 */\nfunction 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\nexport default createBaseEach;\n","import baseForOwn from './_baseForOwn.js';\nimport createBaseEach from './_createBaseEach.js';\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 */\nvar baseEach = createBaseEach(baseForOwn);\n\nexport default baseEach;\n","import root from './_root.js';\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 */\nvar now = function() {\n return root.Date.now();\n};\n\nexport default now;\n","import baseRest from './_baseRest.js';\nimport eq from './eq.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport keysIn from './keysIn.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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 */\nvar 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\nexport default defaults;\n","import baseAssignValue from './_baseAssignValue.js';\nimport eq from './eq.js';\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 */\nfunction 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\nexport default assignMergeValue;\n","import isArrayLike from './isArrayLike.js';\nimport isObjectLike from './isObjectLike.js';\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 */\nfunction isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n}\n\nexport default isArrayLikeObject;\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 */\nfunction 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\nexport default safeGet;\n","import copyObject from './_copyObject.js';\nimport keysIn from './keysIn.js';\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 */\nfunction toPlainObject(value) {\n return copyObject(value, keysIn(value));\n}\n\nexport default toPlainObject;\n","import assignMergeValue from './_assignMergeValue.js';\nimport cloneBuffer from './_cloneBuffer.js';\nimport cloneTypedArray from './_cloneTypedArray.js';\nimport copyArray from './_copyArray.js';\nimport initCloneObject from './_initCloneObject.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\nimport isBuffer from './isBuffer.js';\nimport isFunction from './isFunction.js';\nimport isObject from './isObject.js';\nimport isPlainObject from './isPlainObject.js';\nimport isTypedArray from './isTypedArray.js';\nimport safeGet from './_safeGet.js';\nimport toPlainObject from './toPlainObject.js';\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 */\nfunction 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\nexport default baseMergeDeep;\n","import Stack from './_Stack.js';\nimport assignMergeValue from './_assignMergeValue.js';\nimport baseFor from './_baseFor.js';\nimport baseMergeDeep from './_baseMergeDeep.js';\nimport isObject from './isObject.js';\nimport keysIn from './keysIn.js';\nimport safeGet from './_safeGet.js';\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 */\nfunction 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\nexport default baseMerge;\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 */\nfunction 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\nexport default arrayIncludesWith;\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 */\nfunction last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n}\n\nexport default last;\n","import identity from './identity.js';\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 */\nfunction castFunction(value) {\n return typeof value == 'function' ? value : identity;\n}\n\nexport default castFunction;\n","import arrayEach from './_arrayEach.js';\nimport baseEach from './_baseEach.js';\nimport castFunction from './_castFunction.js';\nimport isArray from './isArray.js';\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 */\nfunction forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, castFunction(iteratee));\n}\n\nexport default forEach;\n","import baseEach from './_baseEach.js';\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 */\nfunction 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\nexport default baseFilter;\n","import arrayFilter from './_arrayFilter.js';\nimport baseFilter from './_baseFilter.js';\nimport baseIteratee from './_baseIteratee.js';\nimport isArray from './isArray.js';\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 * // Combining several predicates using `_.overEvery` or `_.overSome`.\n * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));\n * // => objects for ['fred', 'barney']\n */\nfunction filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n}\n\nexport default filter;\n","import baseIteratee from './_baseIteratee.js';\nimport isArrayLike from './isArrayLike.js';\nimport keys from './keys.js';\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 */\nfunction createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(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\nexport default createFind;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIteratee from './_baseIteratee.js';\nimport toInteger from './toInteger.js';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max;\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 */\nfunction 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, baseIteratee(predicate, 3), index);\n}\n\nexport default findIndex;\n","import createFind from './_createFind.js';\nimport findIndex from './findIndex.js';\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 */\nvar find = createFind(findIndex);\n\nexport default find;\n","import baseEach from './_baseEach.js';\nimport isArrayLike from './isArrayLike.js';\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 */\nfunction 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\nexport default baseMap;\n","import arrayMap from './_arrayMap.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport isArray from './isArray.js';\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 */\nfunction map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n}\n\nexport default map;\n","import baseFor from './_baseFor.js';\nimport castFunction from './_castFunction.js';\nimport keysIn from './keysIn.js';\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 */\nfunction forIn(object, iteratee) {\n return object == null\n ? object\n : baseFor(object, castFunction(iteratee), keysIn);\n}\n\nexport default forIn;\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 */\nfunction baseGt(value, other) {\n return value > other;\n}\n\nexport default baseGt;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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 */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\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 */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n","import arrayMap from './_arrayMap.js';\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 */\nfunction baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n}\n\nexport default baseValues;\n","import baseValues from './_baseValues.js';\nimport keys from './keys.js';\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 */\nfunction values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n}\n\nexport default values;\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 */\nfunction isUndefined(value) {\n return value === undefined;\n}\n\nexport default isUndefined;\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 */\nfunction baseLt(value, other) {\n return value < other;\n}\n\nexport default baseLt;\n","import baseAssignValue from './_baseAssignValue.js';\nimport baseForOwn from './_baseForOwn.js';\nimport baseIteratee from './_baseIteratee.js';\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 */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nexport default mapValues;\n","import isSymbol from './isSymbol.js';\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 */\nfunction 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\nexport default baseExtremum;\n","import baseExtremum from './_baseExtremum.js';\nimport baseGt from './_baseGt.js';\nimport identity from './identity.js';\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 */\nfunction max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n}\n\nexport default max;\n","import baseMerge from './_baseMerge.js';\nimport createAssigner from './_createAssigner.js';\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 */\nvar merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n});\n\nexport default merge;\n","import baseExtremum from './_baseExtremum.js';\nimport baseLt from './_baseLt.js';\nimport identity from './identity.js';\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 */\nfunction min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n}\n\nexport default min;\n","import baseExtremum from './_baseExtremum.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseLt from './_baseLt.js';\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 */\nfunction minBy(array, iteratee) {\n return (array && array.length)\n ? baseExtremum(array, baseIteratee(iteratee, 2), baseLt)\n : undefined;\n}\n\nexport default minBy;\n","import assignValue from './_assignValue.js';\nimport castPath from './_castPath.js';\nimport isIndex from './_isIndex.js';\nimport isObject from './isObject.js';\nimport toKey from './_toKey.js';\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 */\nfunction 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 (key === '__proto__' || key === 'constructor' || key === 'prototype') {\n return object;\n }\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\nexport default baseSet;\n","import baseGet from './_baseGet.js';\nimport baseSet from './_baseSet.js';\nimport castPath from './_castPath.js';\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 */\nfunction 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\nexport default basePickBy;\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 */\nfunction 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\nexport default baseSortBy;\n","import isSymbol from './isSymbol.js';\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 */\nfunction 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\nexport default compareAscending;\n","import compareAscending from './_compareAscending.js';\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 */\nfunction 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\nexport default compareMultiple;\n","import arrayMap from './_arrayMap.js';\nimport baseGet from './_baseGet.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseMap from './_baseMap.js';\nimport baseSortBy from './_baseSortBy.js';\nimport baseUnary from './_baseUnary.js';\nimport compareMultiple from './_compareMultiple.js';\nimport identity from './identity.js';\nimport isArray from './isArray.js';\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 */\nfunction baseOrderBy(collection, iteratees, orders) {\n if (iteratees.length) {\n iteratees = arrayMap(iteratees, function(iteratee) {\n if (isArray(iteratee)) {\n return function(value) {\n return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);\n }\n }\n return iteratee;\n });\n } else {\n iteratees = [identity];\n }\n\n var index = -1;\n iteratees = arrayMap(iteratees, baseUnary(baseIteratee));\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\nexport default baseOrderBy;\n","import basePickBy from './_basePickBy.js';\nimport hasIn from './hasIn.js';\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 */\nfunction basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n}\n\nexport default basePick;\n","import basePick from './_basePick.js';\nimport flatRest from './_flatRest.js';\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 */\nvar pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n});\n\nexport default pick;\n","/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeCeil = Math.ceil,\n nativeMax = Math.max;\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 */\nfunction 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\nexport default baseRange;\n","import baseRange from './_baseRange.js';\nimport isIterateeCall from './_isIterateeCall.js';\nimport toFinite from './toFinite.js';\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 */\nfunction 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\nexport default createRange;\n","import createRange from './_createRange.js';\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 */\nvar range = createRange();\n\nexport default range;\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 */\nfunction 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\nexport default baseReduce;\n","import arrayReduce from './_arrayReduce.js';\nimport baseEach from './_baseEach.js';\nimport baseIteratee from './_baseIteratee.js';\nimport baseReduce from './_baseReduce.js';\nimport isArray from './isArray.js';\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 */\nfunction reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n}\n\nexport default reduce;\n","import baseFlatten from './_baseFlatten.js';\nimport baseOrderBy from './_baseOrderBy.js';\nimport baseRest from './_baseRest.js';\nimport isIterateeCall from './_isIterateeCall.js';\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': 30 },\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', 30]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]\n */\nvar 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\nexport default sortBy;\n","import Set from './_Set.js';\nimport noop from './noop.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\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 */\nvar createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n};\n\nexport default createSet;\n","import SetCache from './_SetCache.js';\nimport arrayIncludes from './_arrayIncludes.js';\nimport arrayIncludesWith from './_arrayIncludesWith.js';\nimport cacheHas from './_cacheHas.js';\nimport createSet from './_createSet.js';\nimport setToArray from './_setToArray.js';\n\n/** Used as the size to enable large array optimizations. */\nvar LARGE_ARRAY_SIZE = 200;\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 */\nfunction 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\nexport default baseUniq;\n","import baseFlatten from './_baseFlatten.js';\nimport baseRest from './_baseRest.js';\nimport baseUniq from './_baseUniq.js';\nimport isArrayLikeObject from './isArrayLikeObject.js';\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 */\nvar union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n});\n\nexport default union;\n","import toString from './toString.js';\n\n/** Used to generate unique IDs. */\nvar idCounter = 0;\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 */\nfunction uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n}\n\nexport default uniqueId;\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 */\nfunction 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\nexport default baseZipObject;\n","import assignValue from './_assignValue.js';\nimport baseZipObject from './_baseZipObject.js';\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 */\nfunction zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n}\n\nexport default zipObject;\n","import * as _ from 'lodash-es';\n\nvar DEFAULT_EDGE_NAME = '\\x00';\nvar GRAPH_NODE = '\\x00';\nvar EDGE_KEY_DELIM = '\\x01';\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\n\n// Implementation notes:\n//\n// * Node id query functions should return string ids for the nodes\n// * Edge id query functions should return an \"edgeObj\", edge object, that is\n// composed of enough information to uniquely identify an edge: {v, w, name}.\n// * Internally we use an \"edgeId\", a stringified form of the edgeObj, to\n// reference edges. This is because we need a performant way to look these\n// edges up and, object properties, which have string keys, are the closest\n// we're going to get to a performant hashtable in JavaScript.\nexport class Graph {\n constructor(opts = {}) {\n this._isDirected = _.has(opts, 'directed') ? opts.directed : true;\n this._isMultigraph = _.has(opts, 'multigraph') ? opts.multigraph : false;\n this._isCompound = _.has(opts, 'compound') ? opts.compound : false;\n\n // Label for the graph itself\n this._label = undefined;\n\n // Defaults to be set when creating a new node\n this._defaultNodeLabelFn = _.constant(undefined);\n\n // Defaults to be set when creating a new edge\n this._defaultEdgeLabelFn = _.constant(undefined);\n\n // v -> label\n this._nodes = {};\n\n if (this._isCompound) {\n // v -> parent\n this._parent = {};\n\n // v -> children\n this._children = {};\n this._children[GRAPH_NODE] = {};\n }\n\n // v -> edgeObj\n this._in = {};\n\n // u -> v -> Number\n this._preds = {};\n\n // v -> edgeObj\n this._out = {};\n\n // v -> w -> Number\n this._sucs = {};\n\n // e -> edgeObj\n this._edgeObjs = {};\n\n // e -> label\n this._edgeLabels = {};\n }\n /* === Graph functions ========= */\n isDirected() {\n return this._isDirected;\n }\n isMultigraph() {\n return this._isMultigraph;\n }\n isCompound() {\n return this._isCompound;\n }\n setGraph(label) {\n this._label = label;\n return this;\n }\n graph() {\n return this._label;\n }\n /* === Node functions ========== */\n setDefaultNodeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultNodeLabelFn = newDefault;\n return this;\n }\n nodeCount() {\n return this._nodeCount;\n }\n nodes() {\n return _.keys(this._nodes);\n }\n sources() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._in[v]);\n });\n }\n sinks() {\n var self = this;\n return _.filter(this.nodes(), function (v) {\n return _.isEmpty(self._out[v]);\n });\n }\n setNodes(vs, value) {\n var args = arguments;\n var self = this;\n _.each(vs, function (v) {\n if (args.length > 1) {\n self.setNode(v, value);\n } else {\n self.setNode(v);\n }\n });\n return this;\n }\n setNode(v, value) {\n if (_.has(this._nodes, v)) {\n if (arguments.length > 1) {\n this._nodes[v] = value;\n }\n return this;\n }\n\n // @ts-expect-error\n this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);\n if (this._isCompound) {\n this._parent[v] = GRAPH_NODE;\n this._children[v] = {};\n this._children[GRAPH_NODE][v] = true;\n }\n this._in[v] = {};\n this._preds[v] = {};\n this._out[v] = {};\n this._sucs[v] = {};\n ++this._nodeCount;\n return this;\n }\n node(v) {\n return this._nodes[v];\n }\n hasNode(v) {\n return _.has(this._nodes, v);\n }\n removeNode(v) {\n var self = this;\n if (_.has(this._nodes, v)) {\n var removeEdge = function (e) {\n self.removeEdge(self._edgeObjs[e]);\n };\n delete this._nodes[v];\n if (this._isCompound) {\n this._removeFromParentsChildList(v);\n delete this._parent[v];\n _.each(this.children(v), function (child) {\n self.setParent(child);\n });\n delete this._children[v];\n }\n _.each(_.keys(this._in[v]), removeEdge);\n delete this._in[v];\n delete this._preds[v];\n _.each(_.keys(this._out[v]), removeEdge);\n delete this._out[v];\n delete this._sucs[v];\n --this._nodeCount;\n }\n return this;\n }\n setParent(v, parent) {\n if (!this._isCompound) {\n throw new Error('Cannot set parent in a non-compound graph');\n }\n\n if (_.isUndefined(parent)) {\n parent = GRAPH_NODE;\n } else {\n // Coerce parent to string\n parent += '';\n for (var ancestor = parent; !_.isUndefined(ancestor); ancestor = this.parent(ancestor)) {\n if (ancestor === v) {\n throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle');\n }\n }\n\n this.setNode(parent);\n }\n\n this.setNode(v);\n this._removeFromParentsChildList(v);\n this._parent[v] = parent;\n this._children[parent][v] = true;\n return this;\n }\n _removeFromParentsChildList(v) {\n delete this._children[this._parent[v]][v];\n }\n parent(v) {\n if (this._isCompound) {\n var parent = this._parent[v];\n if (parent !== GRAPH_NODE) {\n return parent;\n }\n }\n }\n children(v) {\n if (_.isUndefined(v)) {\n v = GRAPH_NODE;\n }\n\n if (this._isCompound) {\n var children = this._children[v];\n if (children) {\n return _.keys(children);\n }\n } else if (v === GRAPH_NODE) {\n return this.nodes();\n } else if (this.hasNode(v)) {\n return [];\n }\n }\n predecessors(v) {\n var predsV = this._preds[v];\n if (predsV) {\n return _.keys(predsV);\n }\n }\n successors(v) {\n var sucsV = this._sucs[v];\n if (sucsV) {\n return _.keys(sucsV);\n }\n }\n neighbors(v) {\n var preds = this.predecessors(v);\n if (preds) {\n return _.union(preds, this.successors(v));\n }\n }\n isLeaf(v) {\n var neighbors;\n if (this.isDirected()) {\n neighbors = this.successors(v);\n } else {\n neighbors = this.neighbors(v);\n }\n return neighbors.length === 0;\n }\n filterNodes(filter) {\n // @ts-expect-error\n var copy = new this.constructor({\n directed: this._isDirected,\n multigraph: this._isMultigraph,\n compound: this._isCompound,\n });\n\n copy.setGraph(this.graph());\n\n var self = this;\n _.each(this._nodes, function (value, v) {\n if (filter(v)) {\n copy.setNode(v, value);\n }\n });\n\n _.each(this._edgeObjs, function (e) {\n // @ts-expect-error\n if (copy.hasNode(e.v) && copy.hasNode(e.w)) {\n copy.setEdge(e, self.edge(e));\n }\n });\n\n var parents = {};\n function findParent(v) {\n var parent = self.parent(v);\n if (parent === undefined || copy.hasNode(parent)) {\n parents[v] = parent;\n return parent;\n } else if (parent in parents) {\n return parents[parent];\n } else {\n return findParent(parent);\n }\n }\n\n if (this._isCompound) {\n _.each(copy.nodes(), function (v) {\n copy.setParent(v, findParent(v));\n });\n }\n\n return copy;\n }\n /* === Edge functions ========== */\n setDefaultEdgeLabel(newDefault) {\n if (!_.isFunction(newDefault)) {\n newDefault = _.constant(newDefault);\n }\n this._defaultEdgeLabelFn = newDefault;\n return this;\n }\n edgeCount() {\n return this._edgeCount;\n }\n edges() {\n return _.values(this._edgeObjs);\n }\n setPath(vs, value) {\n var self = this;\n var args = arguments;\n _.reduce(vs, function (v, w) {\n if (args.length > 1) {\n self.setEdge(v, w, value);\n } else {\n self.setEdge(v, w);\n }\n return w;\n });\n return this;\n }\n /*\n * setEdge(v, w, [value, [name]])\n * setEdge({ v, w, [name] }, [value])\n */\n setEdge() {\n var v, w, name, value;\n var valueSpecified = false;\n var arg0 = arguments[0];\n\n if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {\n v = arg0.v;\n w = arg0.w;\n name = arg0.name;\n if (arguments.length === 2) {\n value = arguments[1];\n valueSpecified = true;\n }\n } else {\n v = arg0;\n w = arguments[1];\n name = arguments[3];\n if (arguments.length > 2) {\n value = arguments[2];\n valueSpecified = true;\n }\n }\n\n v = '' + v;\n w = '' + w;\n if (!_.isUndefined(name)) {\n name = '' + name;\n }\n\n var e = edgeArgsToId(this._isDirected, v, w, name);\n if (_.has(this._edgeLabels, e)) {\n if (valueSpecified) {\n this._edgeLabels[e] = value;\n }\n return this;\n }\n\n if (!_.isUndefined(name) && !this._isMultigraph) {\n throw new Error('Cannot set a named edge when isMultigraph = false');\n }\n\n // It didn't exist, so we need to create it.\n // First ensure the nodes exist.\n this.setNode(v);\n this.setNode(w);\n\n // @ts-expect-error\n this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);\n\n var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);\n // Ensure we add undirected edges in a consistent way.\n v = edgeObj.v;\n w = edgeObj.w;\n\n Object.freeze(edgeObj);\n this._edgeObjs[e] = edgeObj;\n incrementOrInitEntry(this._preds[w], v);\n incrementOrInitEntry(this._sucs[v], w);\n this._in[w][e] = edgeObj;\n this._out[v][e] = edgeObj;\n this._edgeCount++;\n return this;\n }\n edge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return this._edgeLabels[e];\n }\n hasEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n return _.has(this._edgeLabels, e);\n }\n removeEdge(v, w, name) {\n var e =\n arguments.length === 1\n ? edgeObjToId(this._isDirected, arguments[0])\n : edgeArgsToId(this._isDirected, v, w, name);\n var edge = this._edgeObjs[e];\n if (edge) {\n v = edge.v;\n w = edge.w;\n delete this._edgeLabels[e];\n delete this._edgeObjs[e];\n decrementOrRemoveEntry(this._preds[w], v);\n decrementOrRemoveEntry(this._sucs[v], w);\n delete this._in[w][e];\n delete this._out[v][e];\n this._edgeCount--;\n }\n return this;\n }\n inEdges(v, u) {\n var inV = this._in[v];\n if (inV) {\n var edges = _.values(inV);\n if (!u) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.v === u;\n });\n }\n }\n outEdges(v, w) {\n var outV = this._out[v];\n if (outV) {\n var edges = _.values(outV);\n if (!w) {\n return edges;\n }\n return _.filter(edges, function (edge) {\n return edge.w === w;\n });\n }\n }\n nodeEdges(v, w) {\n var inEdges = this.inEdges(v, w);\n if (inEdges) {\n return inEdges.concat(this.outEdges(v, w));\n }\n }\n}\n\n/* Number of nodes in the graph. Should only be changed by the implementation. */\nGraph.prototype._nodeCount = 0;\n\n/* Number of edges in the graph. Should only be changed by the implementation. */\nGraph.prototype._edgeCount = 0;\n\nfunction incrementOrInitEntry(map, k) {\n if (map[k]) {\n map[k]++;\n } else {\n map[k] = 1;\n }\n}\n\nfunction decrementOrRemoveEntry(map, k) {\n if (!--map[k]) {\n delete map[k];\n }\n}\n\nfunction edgeArgsToId(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (_.isUndefined(name) ? DEFAULT_EDGE_NAME : name);\n}\n\nfunction edgeArgsToObj(isDirected, v_, w_, name) {\n var v = '' + v_;\n var w = '' + w_;\n if (!isDirected && v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n var edgeObj = { v: v, w: w };\n if (name) {\n edgeObj.name = name;\n }\n return edgeObj;\n}\n\nfunction edgeObjToId(isDirected, edgeObj) {\n return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);\n}\n","/*\n * Simple doubly linked list implementation derived from Cormen, et al.,\n * \"Introduction to Algorithms\".\n */\n\nexport { List };\n\nclass List {\n constructor() {\n var sentinel = {};\n sentinel._next = sentinel._prev = sentinel;\n this._sentinel = sentinel;\n }\n dequeue() {\n var sentinel = this._sentinel;\n var entry = sentinel._prev;\n if (entry !== sentinel) {\n unlink(entry);\n return entry;\n }\n }\n enqueue(entry) {\n var sentinel = this._sentinel;\n if (entry._prev && entry._next) {\n unlink(entry);\n }\n entry._next = sentinel._next;\n sentinel._next._prev = entry;\n sentinel._next = entry;\n entry._prev = sentinel;\n }\n toString() {\n var strs = [];\n var sentinel = this._sentinel;\n var curr = sentinel._prev;\n while (curr !== sentinel) {\n strs.push(JSON.stringify(curr, filterOutLinks));\n curr = curr._prev;\n }\n return '[' + strs.join(', ') + ']';\n }\n}\n\nfunction unlink(entry) {\n entry._prev._next = entry._next;\n entry._next._prev = entry._prev;\n delete entry._next;\n delete entry._prev;\n}\n\nfunction filterOutLinks(k, v) {\n if (k !== '_next' && k !== '_prev') {\n return v;\n }\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\nimport { List } from './data/list.js';\n\n/*\n * A greedy heuristic for finding a feedback arc set for a graph. A feedback\n * arc set is a set of edges that can be removed to make a graph acyclic.\n * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, \"A fast and\n * effective heuristic for the feedback arc set problem.\" This implementation\n * adjusts that from the paper to allow for weighted edges.\n */\nexport { greedyFAS };\n\nvar DEFAULT_WEIGHT_FN = _.constant(1);\n\nfunction greedyFAS(g, weightFn) {\n if (g.nodeCount() <= 1) {\n return [];\n }\n var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);\n var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);\n\n // Expand multi-edges\n return _.flatten(\n _.map(results, function (e) {\n return g.outEdges(e.v, e.w);\n })\n );\n}\n\nfunction doGreedyFAS(g, buckets, zeroIdx) {\n var results = [];\n var sources = buckets[buckets.length - 1];\n var sinks = buckets[0];\n\n var entry;\n while (g.nodeCount()) {\n while ((entry = sinks.dequeue())) {\n removeNode(g, buckets, zeroIdx, entry);\n }\n while ((entry = sources.dequeue())) {\n removeNode(g, buckets, zeroIdx, entry);\n }\n if (g.nodeCount()) {\n for (var i = buckets.length - 2; i > 0; --i) {\n entry = buckets[i].dequeue();\n if (entry) {\n results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));\n break;\n }\n }\n }\n }\n\n return results;\n}\n\nfunction removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {\n var results = collectPredecessors ? [] : undefined;\n\n _.forEach(g.inEdges(entry.v), function (edge) {\n var weight = g.edge(edge);\n var uEntry = g.node(edge.v);\n\n if (collectPredecessors) {\n results.push({ v: edge.v, w: edge.w });\n }\n\n uEntry.out -= weight;\n assignBucket(buckets, zeroIdx, uEntry);\n });\n\n _.forEach(g.outEdges(entry.v), function (edge) {\n var weight = g.edge(edge);\n var w = edge.w;\n var wEntry = g.node(w);\n wEntry['in'] -= weight;\n assignBucket(buckets, zeroIdx, wEntry);\n });\n\n g.removeNode(entry.v);\n\n return results;\n}\n\nfunction buildState(g, weightFn) {\n var fasGraph = new Graph();\n var maxIn = 0;\n var maxOut = 0;\n\n _.forEach(g.nodes(), function (v) {\n fasGraph.setNode(v, { v: v, in: 0, out: 0 });\n });\n\n // Aggregate weights on nodes, but also sum the weights across multi-edges\n // into a single edge for the fasGraph.\n _.forEach(g.edges(), function (e) {\n var prevWeight = fasGraph.edge(e.v, e.w) || 0;\n var weight = weightFn(e);\n var edgeWeight = prevWeight + weight;\n fasGraph.setEdge(e.v, e.w, edgeWeight);\n maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight));\n maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight));\n });\n\n var buckets = _.range(maxOut + maxIn + 3).map(function () {\n return new List();\n });\n var zeroIdx = maxIn + 1;\n\n _.forEach(fasGraph.nodes(), function (v) {\n assignBucket(buckets, zeroIdx, fasGraph.node(v));\n });\n\n return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };\n}\n\nfunction assignBucket(buckets, zeroIdx, entry) {\n if (!entry.out) {\n buckets[0].enqueue(entry);\n } else if (!entry['in']) {\n buckets[buckets.length - 1].enqueue(entry);\n } else {\n buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry);\n }\n}\n","import * as _ from 'lodash-es';\nimport { greedyFAS } from './greedy-fas.js';\n\nexport { run, undo };\n\nfunction run(g) {\n var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g);\n _.forEach(fas, function (e) {\n var label = g.edge(e);\n g.removeEdge(e);\n label.forwardName = e.name;\n label.reversed = true;\n g.setEdge(e.w, e.v, label, _.uniqueId('rev'));\n });\n\n function weightFn(g) {\n return function (e) {\n return g.edge(e).weight;\n };\n }\n}\n\nfunction dfsFAS(g) {\n var fas = [];\n var stack = {};\n var visited = {};\n\n function dfs(v) {\n if (_.has(visited, v)) {\n return;\n }\n visited[v] = true;\n stack[v] = true;\n _.forEach(g.outEdges(v), function (e) {\n if (_.has(stack, e.w)) {\n fas.push(e);\n } else {\n dfs(e.w);\n }\n });\n delete stack[v];\n }\n\n _.forEach(g.nodes(), dfs);\n return fas;\n}\n\nfunction undo(g) {\n _.forEach(g.edges(), function (e) {\n var label = g.edge(e);\n if (label.reversed) {\n g.removeEdge(e);\n\n var forwardName = label.forwardName;\n delete label.reversed;\n delete label.forwardName;\n g.setEdge(e.w, e.v, label, forwardName);\n }\n });\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\n\nexport {\n addDummyNode,\n simplify,\n asNonCompoundGraph,\n successorWeights,\n predecessorWeights,\n intersectRect,\n buildLayerMatrix,\n normalizeRanks,\n removeEmptyRanks,\n addBorderNode,\n maxRank,\n partition,\n time,\n notime,\n};\n\n/*\n * Adds a dummy node to the graph and return v.\n */\nfunction addDummyNode(g, type, attrs, name) {\n var v;\n do {\n v = _.uniqueId(name);\n } while (g.hasNode(v));\n\n attrs.dummy = type;\n g.setNode(v, attrs);\n return v;\n}\n\n/*\n * Returns a new graph with only simple edges. Handles aggregation of data\n * associated with multi-edges.\n */\nfunction simplify(g) {\n var simplified = new Graph().setGraph(g.graph());\n _.forEach(g.nodes(), function (v) {\n simplified.setNode(v, g.node(v));\n });\n _.forEach(g.edges(), function (e) {\n var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };\n var label = g.edge(e);\n simplified.setEdge(e.v, e.w, {\n weight: simpleLabel.weight + label.weight,\n minlen: Math.max(simpleLabel.minlen, label.minlen),\n });\n });\n return simplified;\n}\n\nfunction asNonCompoundGraph(g) {\n var simplified = new Graph({ multigraph: g.isMultigraph() }).setGraph(g.graph());\n _.forEach(g.nodes(), function (v) {\n if (!g.children(v).length) {\n simplified.setNode(v, g.node(v));\n }\n });\n _.forEach(g.edges(), function (e) {\n simplified.setEdge(e, g.edge(e));\n });\n return simplified;\n}\n\nfunction successorWeights(g) {\n var weightMap = _.map(g.nodes(), function (v) {\n var sucs = {};\n _.forEach(g.outEdges(v), function (e) {\n sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;\n });\n return sucs;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\nfunction predecessorWeights(g) {\n var weightMap = _.map(g.nodes(), function (v) {\n var preds = {};\n _.forEach(g.inEdges(v), function (e) {\n preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;\n });\n return preds;\n });\n return _.zipObject(g.nodes(), weightMap);\n}\n\n/*\n * Finds where a line starting at point ({x, y}) would intersect a rectangle\n * ({x, y, width, height}) if it were pointing at the rectangle's center.\n */\nfunction intersectRect(rect, point) {\n var x = rect.x;\n var y = rect.y;\n\n // Rectangle intersection algorithm from:\n // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes\n var dx = point.x - x;\n var dy = point.y - y;\n var w = rect.width / 2;\n var h = rect.height / 2;\n\n if (!dx && !dy) {\n throw new Error('Not possible to find intersection inside of the rectangle');\n }\n\n var sx, sy;\n if (Math.abs(dy) * w > Math.abs(dx) * h) {\n // Intersection is top or bottom of rect.\n if (dy < 0) {\n h = -h;\n }\n sx = (h * dx) / dy;\n sy = h;\n } else {\n // Intersection is left or right of rect.\n if (dx < 0) {\n w = -w;\n }\n sx = w;\n sy = (w * dy) / dx;\n }\n\n return { x: x + sx, y: y + sy };\n}\n\n/*\n * Given a DAG with each node assigned \"rank\" and \"order\" properties, this\n * function will produce a matrix with the ids of each node.\n */\nfunction buildLayerMatrix(g) {\n var layering = _.map(_.range(maxRank(g) + 1), function () {\n return [];\n });\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n var rank = node.rank;\n if (!_.isUndefined(rank)) {\n layering[rank][node.order] = v;\n }\n });\n return layering;\n}\n\n/*\n * Adjusts the ranks for all nodes in the graph such that all nodes v have\n * rank(v) >= 0 and at least one node w has rank(w) = 0.\n */\nfunction normalizeRanks(g) {\n var min = _.min(\n _.map(g.nodes(), function (v) {\n return g.node(v).rank;\n })\n );\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (_.has(node, 'rank')) {\n node.rank -= min;\n }\n });\n}\n\nfunction removeEmptyRanks(g) {\n // Ranks may not start at 0, so we need to offset them\n var offset = _.min(\n _.map(g.nodes(), function (v) {\n return g.node(v).rank;\n })\n );\n\n var layers = [];\n _.forEach(g.nodes(), function (v) {\n var rank = g.node(v).rank - offset;\n if (!layers[rank]) {\n layers[rank] = [];\n }\n layers[rank].push(v);\n });\n\n var delta = 0;\n var nodeRankFactor = g.graph().nodeRankFactor;\n _.forEach(layers, function (vs, i) {\n if (_.isUndefined(vs) && i % nodeRankFactor !== 0) {\n --delta;\n } else if (delta) {\n _.forEach(vs, function (v) {\n g.node(v).rank += delta;\n });\n }\n });\n}\n\nfunction addBorderNode(g, prefix, rank, order) {\n var node = {\n width: 0,\n height: 0,\n };\n if (arguments.length >= 4) {\n node.rank = rank;\n node.order = order;\n }\n return addDummyNode(g, 'border', node, prefix);\n}\n\nfunction maxRank(g) {\n return _.max(\n _.map(g.nodes(), function (v) {\n var rank = g.node(v).rank;\n if (!_.isUndefined(rank)) {\n return rank;\n }\n })\n );\n}\n\n/*\n * Partition a collection into two groups: `lhs` and `rhs`. If the supplied\n * function returns true for an entry it goes into `lhs`. Otherwise it goes\n * into `rhs.\n */\nfunction partition(collection, fn) {\n var result = { lhs: [], rhs: [] };\n _.forEach(collection, function (value) {\n if (fn(value)) {\n result.lhs.push(value);\n } else {\n result.rhs.push(value);\n }\n });\n return result;\n}\n\n/*\n * Returns a new function that wraps `fn` with a timer. The wrapper logs the\n * time it takes to execute the function.\n */\nfunction time(name, fn) {\n var start = _.now();\n try {\n return fn();\n } finally {\n console.log(name + ' time: ' + (_.now() - start) + 'ms');\n }\n}\n\nfunction notime(name, fn) {\n return fn();\n}\n","import * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { addBorderSegments };\n\nfunction addBorderSegments(g) {\n function dfs(v) {\n var children = g.children(v);\n var node = g.node(v);\n if (children.length) {\n _.forEach(children, dfs);\n }\n\n if (_.has(node, 'minRank')) {\n node.borderLeft = [];\n node.borderRight = [];\n for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) {\n addBorderNode(g, 'borderLeft', '_bl', v, node, rank);\n addBorderNode(g, 'borderRight', '_br', v, node, rank);\n }\n }\n }\n\n _.forEach(g.children(), dfs);\n}\n\nfunction addBorderNode(g, prop, prefix, sg, sgNode, rank) {\n var label = { width: 0, height: 0, rank: rank, borderType: prop };\n var prev = sgNode[prop][rank - 1];\n var curr = util.addDummyNode(g, 'border', label, prefix);\n sgNode[prop][rank] = curr;\n g.setParent(curr, sg);\n if (prev) {\n g.setEdge(prev, curr, { weight: 1 });\n }\n}\n","import * as _ from 'lodash-es';\n\nexport { adjust, undo };\n\nfunction adjust(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === 'lr' || rankDir === 'rl') {\n swapWidthHeight(g);\n }\n}\n\nfunction undo(g) {\n var rankDir = g.graph().rankdir.toLowerCase();\n if (rankDir === 'bt' || rankDir === 'rl') {\n reverseY(g);\n }\n\n if (rankDir === 'lr' || rankDir === 'rl') {\n swapXY(g);\n swapWidthHeight(g);\n }\n}\n\nfunction swapWidthHeight(g) {\n _.forEach(g.nodes(), function (v) {\n swapWidthHeightOne(g.node(v));\n });\n _.forEach(g.edges(), function (e) {\n swapWidthHeightOne(g.edge(e));\n });\n}\n\nfunction swapWidthHeightOne(attrs) {\n var w = attrs.width;\n attrs.width = attrs.height;\n attrs.height = w;\n}\n\nfunction reverseY(g) {\n _.forEach(g.nodes(), function (v) {\n reverseYOne(g.node(v));\n });\n\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n _.forEach(edge.points, reverseYOne);\n if (_.has(edge, 'y')) {\n reverseYOne(edge);\n }\n });\n}\n\nfunction reverseYOne(attrs) {\n attrs.y = -attrs.y;\n}\n\nfunction swapXY(g) {\n _.forEach(g.nodes(), function (v) {\n swapXYOne(g.node(v));\n });\n\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n _.forEach(edge.points, swapXYOne);\n if (_.has(edge, 'x')) {\n swapXYOne(edge);\n }\n });\n}\n\nfunction swapXYOne(attrs) {\n var x = attrs.x;\n attrs.x = attrs.y;\n attrs.y = x;\n}\n","import * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { run, undo };\n\n/*\n * Breaks any long edges in the graph into short segments that span 1 layer\n * each. This operation is undoable with the denormalize function.\n *\n * Pre-conditions:\n *\n * 1. The input graph is a DAG.\n * 2. Each node in the graph has a \"rank\" property.\n *\n * Post-condition:\n *\n * 1. All edges in the graph have a length of 1.\n * 2. Dummy nodes are added where edges have been split into segments.\n * 3. The graph is augmented with a \"dummyChains\" attribute which contains\n * the first dummy in each chain of dummy nodes produced.\n */\nfunction run(g) {\n g.graph().dummyChains = [];\n _.forEach(g.edges(), function (edge) {\n normalizeEdge(g, edge);\n });\n}\n\nfunction normalizeEdge(g, e) {\n var v = e.v;\n var vRank = g.node(v).rank;\n var w = e.w;\n var wRank = g.node(w).rank;\n var name = e.name;\n var edgeLabel = g.edge(e);\n var labelRank = edgeLabel.labelRank;\n\n if (wRank === vRank + 1) return;\n\n g.removeEdge(e);\n\n var dummy, attrs, i;\n for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {\n edgeLabel.points = [];\n attrs = {\n width: 0,\n height: 0,\n edgeLabel: edgeLabel,\n edgeObj: e,\n rank: vRank,\n };\n dummy = util.addDummyNode(g, 'edge', attrs, '_d');\n if (vRank === labelRank) {\n attrs.width = edgeLabel.width;\n attrs.height = edgeLabel.height;\n // @ts-expect-error\n attrs.dummy = 'edge-label';\n // @ts-expect-error\n attrs.labelpos = edgeLabel.labelpos;\n }\n g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);\n if (i === 0) {\n g.graph().dummyChains.push(dummy);\n }\n v = dummy;\n }\n\n g.setEdge(v, w, { weight: edgeLabel.weight }, name);\n}\n\nfunction undo(g) {\n _.forEach(g.graph().dummyChains, function (v) {\n var node = g.node(v);\n var origLabel = node.edgeLabel;\n var w;\n g.setEdge(node.edgeObj, origLabel);\n while (node.dummy) {\n w = g.successors(v)[0];\n g.removeNode(v);\n origLabel.points.push({ x: node.x, y: node.y });\n if (node.dummy === 'edge-label') {\n origLabel.x = node.x;\n origLabel.y = node.y;\n origLabel.width = node.width;\n origLabel.height = node.height;\n }\n v = w;\n node = g.node(v);\n }\n });\n}\n","import * as _ from 'lodash-es';\n\nexport { longestPath, slack };\n\n/*\n * Initializes ranks for the input graph using the longest path algorithm. This\n * algorithm scales well and is fast in practice, it yields rather poor\n * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom\n * ranks wide and leaving edges longer than necessary. However, due to its\n * speed, this algorithm is good for getting an initial ranking that can be fed\n * into other algorithms.\n *\n * This algorithm does not normalize layers because it will be used by other\n * algorithms in most cases. If using this algorithm directly, be sure to\n * run normalize at the end.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG.\n * 2. Input graph node labels can be assigned properties.\n *\n * Post-conditions:\n *\n * 1. Each node will be assign an (unnormalized) \"rank\" property.\n */\nfunction longestPath(g) {\n var visited = {};\n\n function dfs(v) {\n var label = g.node(v);\n if (_.has(visited, v)) {\n return label.rank;\n }\n visited[v] = true;\n\n var rank = _.min(\n _.map(g.outEdges(v), function (e) {\n return dfs(e.w) - g.edge(e).minlen;\n })\n );\n\n if (\n rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3\n rank === undefined || // return value of _.map([]) for Lodash 4\n rank === null\n ) {\n // return value of _.map([null])\n rank = 0;\n }\n\n return (label.rank = rank);\n }\n\n _.forEach(g.sources(), dfs);\n}\n\n/*\n * Returns the amount of slack for the given edge. The slack is defined as the\n * difference between the length of the edge and its minimum length.\n */\nfunction slack(g, e) {\n return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport { slack } from './util.js';\n\nexport { feasibleTree };\n\n/*\n * Constructs a spanning tree with tight edges and adjusted the input node's\n * ranks to achieve this. A tight edge is one that is has a length that matches\n * its \"minlen\" attribute.\n *\n * The basic structure for this function is derived from Gansner, et al., \"A\n * Technique for Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a DAG.\n * 2. Graph must be connected.\n * 3. Graph must have at least one node.\n * 5. Graph nodes must have been previously assigned a \"rank\" property that\n * respects the \"minlen\" property of incident edges.\n * 6. Graph edges must have a \"minlen\" property.\n *\n * Post-conditions:\n *\n * - Graph nodes will have their rank adjusted to ensure that all edges are\n * tight.\n *\n * Returns a tree (undirected graph) that is constructed using only \"tight\"\n * edges.\n */\nfunction feasibleTree(g) {\n var t = new Graph({ directed: false });\n\n // Choose arbitrary node from which to start our tree\n var start = g.nodes()[0];\n var size = g.nodeCount();\n t.setNode(start, {});\n\n var edge, delta;\n while (tightTree(t, g) < size) {\n edge = findMinSlackEdge(t, g);\n delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);\n shiftRanks(t, g, delta);\n }\n\n return t;\n}\n\n/*\n * Finds a maximal tree of tight edges and returns the number of nodes in the\n * tree.\n */\nfunction tightTree(t, g) {\n function dfs(v) {\n _.forEach(g.nodeEdges(v), function (e) {\n var edgeV = e.v,\n w = v === edgeV ? e.w : edgeV;\n if (!t.hasNode(w) && !slack(g, e)) {\n t.setNode(w, {});\n t.setEdge(v, w, {});\n dfs(w);\n }\n });\n }\n\n _.forEach(t.nodes(), dfs);\n return t.nodeCount();\n}\n\n/*\n * Finds the edge with the smallest slack that is incident on tree and returns\n * it.\n */\nfunction findMinSlackEdge(t, g) {\n return _.minBy(g.edges(), function (e) {\n if (t.hasNode(e.v) !== t.hasNode(e.w)) {\n return slack(g, e);\n }\n });\n}\n\nfunction shiftRanks(t, g, delta) {\n _.forEach(t.nodes(), function (v) {\n g.node(v).rank += delta;\n });\n}\n","import * as _ from 'lodash-es';\n\nexport { topsort, CycleException };\n\ntopsort.CycleException = CycleException;\n\nfunction topsort(g) {\n var visited = {};\n var stack = {};\n var results = [];\n\n function visit(node) {\n if (_.has(stack, node)) {\n throw new CycleException();\n }\n\n if (!_.has(visited, node)) {\n stack[node] = true;\n visited[node] = true;\n _.each(g.predecessors(node), visit);\n delete stack[node];\n results.push(node);\n }\n }\n\n _.each(g.sinks(), visit);\n\n if (_.size(visited) !== g.nodeCount()) {\n throw new CycleException();\n }\n\n return results;\n}\n\nfunction CycleException() {}\nCycleException.prototype = new Error(); // must be an instance of Error to pass testing\n","import * as _ from 'lodash-es';\n\nexport { dfs };\n\n/*\n * A helper that preforms a pre- or post-order traversal on the input graph\n * and returns the nodes in the order they were visited. If the graph is\n * undirected then this algorithm will navigate using neighbors. If the graph\n * is directed then this algorithm will navigate using successors.\n *\n * Order must be one of \"pre\" or \"post\".\n */\nfunction dfs(g, vs, order) {\n if (!_.isArray(vs)) {\n vs = [vs];\n }\n\n var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);\n\n var acc = [];\n var visited = {};\n _.each(vs, function (v) {\n if (!g.hasNode(v)) {\n throw new Error('Graph does not have node: ' + v);\n }\n\n doDfs(g, v, order === 'post', visited, navigation, acc);\n });\n return acc;\n}\n\nfunction doDfs(g, v, postorder, visited, navigation, acc) {\n if (!_.has(visited, v)) {\n visited[v] = true;\n\n if (!postorder) {\n acc.push(v);\n }\n _.each(navigation(v), function (w) {\n doDfs(g, w, postorder, visited, navigation, acc);\n });\n if (postorder) {\n acc.push(v);\n }\n }\n}\n","import { dfs } from './dfs.js';\n\nexport { postorder };\n\nfunction postorder(g, vs) {\n return dfs(g, vs, 'post');\n}\n","import { dfs } from './dfs.js';\n\nexport { preorder };\n\nfunction preorder(g, vs) {\n return dfs(g, vs, 'pre');\n}\n","import * as _ from 'lodash-es';\nimport * as alg from '../../graphlib/alg/index.js';\nimport { simplify } from '../util.js';\nimport { feasibleTree } from './feasible-tree.js';\nimport { longestPath, slack } from './util.js';\n\nexport { networkSimplex };\n\n// Expose some internals for testing purposes\nnetworkSimplex.initLowLimValues = initLowLimValues;\nnetworkSimplex.initCutValues = initCutValues;\nnetworkSimplex.calcCutValue = calcCutValue;\nnetworkSimplex.leaveEdge = leaveEdge;\nnetworkSimplex.enterEdge = enterEdge;\nnetworkSimplex.exchangeEdges = exchangeEdges;\n\n/*\n * The network simplex algorithm assigns ranks to each node in the input graph\n * and iteratively improves the ranking to reduce the length of edges.\n *\n * Preconditions:\n *\n * 1. The input graph must be a DAG.\n * 2. All nodes in the graph must have an object value.\n * 3. All edges in the graph must have \"minlen\" and \"weight\" attributes.\n *\n * Postconditions:\n *\n * 1. All nodes in the graph will have an assigned \"rank\" attribute that has\n * been optimized by the network simplex algorithm. Ranks start at 0.\n *\n *\n * A rough sketch of the algorithm is as follows:\n *\n * 1. Assign initial ranks to each node. We use the longest path algorithm,\n * which assigns ranks to the lowest position possible. In general this\n * leads to very wide bottom ranks and unnecessarily long edges.\n * 2. Construct a feasible tight tree. A tight tree is one such that all\n * edges in the tree have no slack (difference between length of edge\n * and minlen for the edge). This by itself greatly improves the assigned\n * rankings by shorting edges.\n * 3. Iteratively find edges that have negative cut values. Generally a\n * negative cut value indicates that the edge could be removed and a new\n * tree edge could be added to produce a more compact graph.\n *\n * Much of the algorithms here are derived from Gansner, et al., \"A Technique\n * for Drawing Directed Graphs.\" The structure of the file roughly follows the\n * structure of the overall algorithm.\n */\nfunction networkSimplex(g) {\n g = simplify(g);\n longestPath(g);\n var t = feasibleTree(g);\n initLowLimValues(t);\n initCutValues(t, g);\n\n var e, f;\n while ((e = leaveEdge(t))) {\n f = enterEdge(t, g, e);\n exchangeEdges(t, g, e, f);\n }\n}\n\n/*\n * Initializes cut values for all edges in the tree.\n */\nfunction initCutValues(t, g) {\n var vs = alg.postorder(t, t.nodes());\n vs = vs.slice(0, vs.length - 1);\n _.forEach(vs, function (v) {\n assignCutValue(t, g, v);\n });\n}\n\nfunction assignCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n t.edge(child, parent).cutvalue = calcCutValue(t, g, child);\n}\n\n/*\n * Given the tight tree, its graph, and a child in the graph calculate and\n * return the cut value for the edge between the child and its parent.\n */\nfunction calcCutValue(t, g, child) {\n var childLab = t.node(child);\n var parent = childLab.parent;\n // True if the child is on the tail end of the edge in the directed graph\n var childIsTail = true;\n // The graph's view of the tree edge we're inspecting\n var graphEdge = g.edge(child, parent);\n // The accumulated cut value for the edge between this node and its parent\n var cutValue = 0;\n\n if (!graphEdge) {\n childIsTail = false;\n graphEdge = g.edge(parent, child);\n }\n\n cutValue = graphEdge.weight;\n\n _.forEach(g.nodeEdges(child), function (e) {\n var isOutEdge = e.v === child,\n other = isOutEdge ? e.w : e.v;\n\n if (other !== parent) {\n var pointsToHead = isOutEdge === childIsTail,\n otherWeight = g.edge(e).weight;\n\n cutValue += pointsToHead ? otherWeight : -otherWeight;\n if (isTreeEdge(t, child, other)) {\n var otherCutValue = t.edge(child, other).cutvalue;\n cutValue += pointsToHead ? -otherCutValue : otherCutValue;\n }\n }\n });\n\n return cutValue;\n}\n\nfunction initLowLimValues(tree, root) {\n if (arguments.length < 2) {\n root = tree.nodes()[0];\n }\n dfsAssignLowLim(tree, {}, 1, root);\n}\n\nfunction dfsAssignLowLim(tree, visited, nextLim, v, parent) {\n var low = nextLim;\n var label = tree.node(v);\n\n visited[v] = true;\n _.forEach(tree.neighbors(v), function (w) {\n if (!_.has(visited, w)) {\n nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);\n }\n });\n\n label.low = low;\n label.lim = nextLim++;\n if (parent) {\n label.parent = parent;\n } else {\n // TODO should be able to remove this when we incrementally update low lim\n delete label.parent;\n }\n\n return nextLim;\n}\n\nfunction leaveEdge(tree) {\n return _.find(tree.edges(), function (e) {\n return tree.edge(e).cutvalue < 0;\n });\n}\n\nfunction enterEdge(t, g, edge) {\n var v = edge.v;\n var w = edge.w;\n\n // For the rest of this function we assume that v is the tail and w is the\n // head, so if we don't have this edge in the graph we should flip it to\n // match the correct orientation.\n if (!g.hasEdge(v, w)) {\n v = edge.w;\n w = edge.v;\n }\n\n var vLabel = t.node(v);\n var wLabel = t.node(w);\n var tailLabel = vLabel;\n var flip = false;\n\n // If the root is in the tail of the edge then we need to flip the logic that\n // checks for the head and tail nodes in the candidates function below.\n if (vLabel.lim > wLabel.lim) {\n tailLabel = wLabel;\n flip = true;\n }\n\n var candidates = _.filter(g.edges(), function (edge) {\n return (\n flip === isDescendant(t, t.node(edge.v), tailLabel) &&\n flip !== isDescendant(t, t.node(edge.w), tailLabel)\n );\n });\n\n return _.minBy(candidates, function (edge) {\n return slack(g, edge);\n });\n}\n\nfunction exchangeEdges(t, g, e, f) {\n var v = e.v;\n var w = e.w;\n t.removeEdge(v, w);\n t.setEdge(f.v, f.w, {});\n initLowLimValues(t);\n initCutValues(t, g);\n updateRanks(t, g);\n}\n\nfunction updateRanks(t, g) {\n var root = _.find(t.nodes(), function (v) {\n return !g.node(v).parent;\n });\n var vs = alg.preorder(t, root);\n vs = vs.slice(1);\n _.forEach(vs, function (v) {\n var parent = t.node(v).parent,\n edge = g.edge(v, parent),\n flipped = false;\n\n if (!edge) {\n edge = g.edge(parent, v);\n flipped = true;\n }\n\n g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);\n });\n}\n\n/*\n * Returns true if the edge is in the tree.\n */\nfunction isTreeEdge(tree, u, v) {\n return tree.hasEdge(u, v);\n}\n\n/*\n * Returns true if the specified node is descendant of the root node per the\n * assigned low and lim attributes in the tree.\n */\nfunction isDescendant(tree, vLabel, rootLabel) {\n return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;\n}\n","import { feasibleTree } from './feasible-tree.js';\nimport { networkSimplex } from './network-simplex.js';\nimport { longestPath } from './util.js';\n\nexport { rank };\n\n/*\n * Assigns a rank to each node in the input graph that respects the \"minlen\"\n * constraint specified on edges between nodes.\n *\n * This basic structure is derived from Gansner, et al., \"A Technique for\n * Drawing Directed Graphs.\"\n *\n * Pre-conditions:\n *\n * 1. Graph must be a connected DAG\n * 2. Graph nodes must be objects\n * 3. Graph edges must have \"weight\" and \"minlen\" attributes\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have a \"rank\" attribute based on the results of the\n * algorithm. Ranks can start at any index (including negative), we'll\n * fix them up later.\n */\nfunction rank(g) {\n switch (g.graph().ranker) {\n case 'network-simplex':\n networkSimplexRanker(g);\n break;\n case 'tight-tree':\n tightTreeRanker(g);\n break;\n case 'longest-path':\n longestPathRanker(g);\n break;\n default:\n networkSimplexRanker(g);\n }\n}\n\n// A fast and simple ranker, but results are far from optimal.\nvar longestPathRanker = longestPath;\n\nfunction tightTreeRanker(g) {\n longestPath(g);\n feasibleTree(g);\n}\n\nfunction networkSimplexRanker(g) {\n networkSimplex(g);\n}\n","import * as _ from 'lodash-es';\nimport * as util from './util.js';\n\nexport { run, cleanup };\n\n/*\n * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,\n * adds appropriate edges to ensure that all cluster nodes are placed between\n * these boundries, and ensures that the graph is connected.\n *\n * In addition we ensure, through the use of the minlen property, that nodes\n * and subgraph border nodes to not end up on the same rank.\n *\n * Preconditions:\n *\n * 1. Input graph is a DAG\n * 2. Nodes in the input graph has a minlen attribute\n *\n * Postconditions:\n *\n * 1. Input graph is connected.\n * 2. Dummy nodes are added for the tops and bottoms of subgraphs.\n * 3. The minlen attribute for nodes is adjusted to ensure nodes do not\n * get placed on the same rank as subgraph border nodes.\n *\n * The nesting graph idea comes from Sander, \"Layout of Compound Directed\n * Graphs.\"\n */\nfunction run(g) {\n var root = util.addDummyNode(g, 'root', {}, '_root');\n var depths = treeDepths(g);\n var height = _.max(_.values(depths)) - 1; // Note: depths is an Object not an array\n var nodeSep = 2 * height + 1;\n\n g.graph().nestingRoot = root;\n\n // Multiply minlen by nodeSep to align nodes on non-border ranks.\n _.forEach(g.edges(), function (e) {\n g.edge(e).minlen *= nodeSep;\n });\n\n // Calculate a weight that is sufficient to keep subgraphs vertically compact\n var weight = sumWeights(g) + 1;\n\n // Create border nodes and link them up\n _.forEach(g.children(), function (child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n });\n\n // Save the multiplier for node layers for later removal of empty border\n // layers.\n g.graph().nodeRankFactor = nodeSep;\n}\n\nfunction dfs(g, root, nodeSep, weight, height, depths, v) {\n var children = g.children(v);\n if (!children.length) {\n if (v !== root) {\n g.setEdge(root, v, { weight: 0, minlen: nodeSep });\n }\n return;\n }\n\n var top = util.addBorderNode(g, '_bt');\n var bottom = util.addBorderNode(g, '_bb');\n var label = g.node(v);\n\n g.setParent(top, v);\n label.borderTop = top;\n g.setParent(bottom, v);\n label.borderBottom = bottom;\n\n _.forEach(children, function (child) {\n dfs(g, root, nodeSep, weight, height, depths, child);\n\n var childNode = g.node(child);\n var childTop = childNode.borderTop ? childNode.borderTop : child;\n var childBottom = childNode.borderBottom ? childNode.borderBottom : child;\n var thisWeight = childNode.borderTop ? weight : 2 * weight;\n var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;\n\n g.setEdge(top, childTop, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true,\n });\n\n g.setEdge(childBottom, bottom, {\n weight: thisWeight,\n minlen: minlen,\n nestingEdge: true,\n });\n });\n\n if (!g.parent(v)) {\n g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });\n }\n}\n\nfunction treeDepths(g) {\n var depths = {};\n function dfs(v, depth) {\n var children = g.children(v);\n if (children && children.length) {\n _.forEach(children, function (child) {\n dfs(child, depth + 1);\n });\n }\n depths[v] = depth;\n }\n _.forEach(g.children(), function (v) {\n dfs(v, 1);\n });\n return depths;\n}\n\nfunction sumWeights(g) {\n return _.reduce(\n g.edges(),\n function (acc, e) {\n return acc + g.edge(e).weight;\n },\n 0\n );\n}\n\nfunction cleanup(g) {\n var graphLabel = g.graph();\n g.removeNode(graphLabel.nestingRoot);\n delete graphLabel.nestingRoot;\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.nestingEdge) {\n g.removeEdge(e);\n }\n });\n}\n","import * as _ from 'lodash-es';\n\nexport { addSubgraphConstraints };\n\nfunction addSubgraphConstraints(g, cg, vs) {\n var prev = {},\n rootPrev;\n\n _.forEach(vs, function (v) {\n var child = g.parent(v),\n parent,\n prevChild;\n while (child) {\n parent = g.parent(child);\n if (parent) {\n prevChild = prev[parent];\n prev[parent] = child;\n } else {\n prevChild = rootPrev;\n rootPrev = child;\n }\n if (prevChild && prevChild !== child) {\n cg.setEdge(prevChild, child);\n return;\n }\n child = parent;\n }\n });\n\n /*\n function dfs(v) {\n var children = v ? g.children(v) : g.children();\n if (children.length) {\n var min = Number.POSITIVE_INFINITY,\n subgraphs = [];\n _.each(children, function(child) {\n var childMin = dfs(child);\n if (g.children(child).length) {\n subgraphs.push({ v: child, order: childMin });\n }\n min = Math.min(min, childMin);\n });\n _.reduce(_.sortBy(subgraphs, \"order\"), function(prev, curr) {\n cg.setEdge(prev.v, curr.v);\n return curr;\n });\n return min;\n }\n return g.node(v).order;\n }\n dfs(undefined);\n */\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\n\nexport { buildLayerGraph };\n\n/*\n * Constructs a graph that can be used to sort a layer of nodes. The graph will\n * contain all base and subgraph nodes from the request layer in their original\n * hierarchy and any edges that are incident on these nodes and are of the type\n * requested by the \"relationship\" parameter.\n *\n * Nodes from the requested rank that do not have parents are assigned a root\n * node in the output graph, which is set in the root graph attribute. This\n * makes it easy to walk the hierarchy of movable nodes during ordering.\n *\n * Pre-conditions:\n *\n * 1. Input graph is a DAG\n * 2. Base nodes in the input graph have a rank attribute\n * 3. Subgraph nodes in the input graph has minRank and maxRank attributes\n * 4. Edges have an assigned weight\n *\n * Post-conditions:\n *\n * 1. Output graph has all nodes in the movable rank with preserved\n * hierarchy.\n * 2. Root nodes in the movable layer are made children of the node\n * indicated by the root attribute of the graph.\n * 3. Non-movable nodes incident on movable nodes, selected by the\n * relationship parameter, are included in the graph (without hierarchy).\n * 4. Edges incident on movable nodes, selected by the relationship\n * parameter, are added to the output graph.\n * 5. The weights for copied edges are aggregated as need, since the output\n * graph is not a multi-graph.\n */\nfunction buildLayerGraph(g, rank, relationship) {\n var root = createRootNode(g),\n result = new Graph({ compound: true })\n .setGraph({ root: root })\n .setDefaultNodeLabel(function (v) {\n return g.node(v);\n });\n\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v),\n parent = g.parent(v);\n\n if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) {\n result.setNode(v);\n result.setParent(v, parent || root);\n\n // This assumes we have only short edges!\n _.forEach(g[relationship](v), function (e) {\n var u = e.v === v ? e.w : e.v,\n edge = result.edge(u, v),\n weight = !_.isUndefined(edge) ? edge.weight : 0;\n result.setEdge(u, v, { weight: g.edge(e).weight + weight });\n });\n\n if (_.has(node, 'minRank')) {\n result.setNode(v, {\n borderLeft: node.borderLeft[rank],\n borderRight: node.borderRight[rank],\n });\n }\n }\n });\n\n return result;\n}\n\nfunction createRootNode(g) {\n var v;\n while (g.hasNode((v = _.uniqueId('_root'))));\n return v;\n}\n","import * as _ from 'lodash-es';\n\nexport { crossCount };\n\n/*\n * A function that takes a layering (an array of layers, each with an array of\n * ordererd nodes) and a graph and returns a weighted crossing count.\n *\n * Pre-conditions:\n *\n * 1. Input graph must be simple (not a multigraph), directed, and include\n * only simple edges.\n * 2. Edges in the input graph must have assigned weights.\n *\n * Post-conditions:\n *\n * 1. The graph and layering matrix are left unchanged.\n *\n * This algorithm is derived from Barth, et al., \"Bilayer Cross Counting.\"\n */\nfunction crossCount(g, layering) {\n var cc = 0;\n for (var i = 1; i < layering.length; ++i) {\n cc += twoLayerCrossCount(g, layering[i - 1], layering[i]);\n }\n return cc;\n}\n\nfunction twoLayerCrossCount(g, northLayer, southLayer) {\n // Sort all of the edges between the north and south layers by their position\n // in the north layer and then the south. Map these edges to the position of\n // their head in the south layer.\n var southPos = _.zipObject(\n southLayer,\n _.map(southLayer, function (v, i) {\n return i;\n })\n );\n var southEntries = _.flatten(\n _.map(northLayer, function (v) {\n return _.sortBy(\n _.map(g.outEdges(v), function (e) {\n return { pos: southPos[e.w], weight: g.edge(e).weight };\n }),\n 'pos'\n );\n })\n );\n\n // Build the accumulator tree\n var firstIndex = 1;\n while (firstIndex < southLayer.length) firstIndex <<= 1;\n var treeSize = 2 * firstIndex - 1;\n firstIndex -= 1;\n var tree = _.map(new Array(treeSize), function () {\n return 0;\n });\n\n // Calculate the weighted crossings\n var cc = 0;\n _.forEach(\n // @ts-expect-error\n southEntries.forEach(function (entry) {\n var index = entry.pos + firstIndex;\n tree[index] += entry.weight;\n var weightSum = 0;\n // @ts-expect-error\n while (index > 0) {\n // @ts-expect-error\n if (index % 2) {\n weightSum += tree[index + 1];\n }\n // @ts-expect-error\n index = (index - 1) >> 1;\n tree[index] += entry.weight;\n }\n cc += entry.weight * weightSum;\n })\n );\n\n return cc;\n}\n","import * as _ from 'lodash-es';\n\nexport { initOrder };\n\n/*\n * Assigns an initial order value for each node by performing a DFS search\n * starting from nodes in the first rank. Nodes are assigned an order in their\n * rank as they are first visited.\n *\n * This approach comes from Gansner, et al., \"A Technique for Drawing Directed\n * Graphs.\"\n *\n * Returns a layering matrix with an array per layer and each layer sorted by\n * the order of its nodes.\n */\nfunction initOrder(g) {\n var visited = {};\n var simpleNodes = _.filter(g.nodes(), function (v) {\n return !g.children(v).length;\n });\n var maxRank = _.max(\n _.map(simpleNodes, function (v) {\n return g.node(v).rank;\n })\n );\n var layers = _.map(_.range(maxRank + 1), function () {\n return [];\n });\n\n function dfs(v) {\n if (_.has(visited, v)) return;\n visited[v] = true;\n var node = g.node(v);\n layers[node.rank].push(v);\n _.forEach(g.successors(v), dfs);\n }\n\n var orderedVs = _.sortBy(simpleNodes, function (v) {\n return g.node(v).rank;\n });\n _.forEach(orderedVs, dfs);\n\n return layers;\n}\n","import * as _ from 'lodash-es';\n\nexport { barycenter };\n\nfunction barycenter(g, movable) {\n return _.map(movable, function (v) {\n var inV = g.inEdges(v);\n if (!inV.length) {\n return { v: v };\n } else {\n var result = _.reduce(\n inV,\n function (acc, e) {\n var edge = g.edge(e),\n nodeU = g.node(e.v);\n return {\n sum: acc.sum + edge.weight * nodeU.order,\n weight: acc.weight + edge.weight,\n };\n },\n { sum: 0, weight: 0 }\n );\n\n return {\n v: v,\n barycenter: result.sum / result.weight,\n weight: result.weight,\n };\n }\n });\n}\n","import * as _ from 'lodash-es';\n\nexport { resolveConflicts };\n\n/*\n * Given a list of entries of the form {v, barycenter, weight} and a\n * constraint graph this function will resolve any conflicts between the\n * constraint graph and the barycenters for the entries. If the barycenters for\n * an entry would violate a constraint in the constraint graph then we coalesce\n * the nodes in the conflict into a new node that respects the contraint and\n * aggregates barycenter and weight information.\n *\n * This implementation is based on the description in Forster, \"A Fast and\n * Simple Hueristic for Constrained Two-Level Crossing Reduction,\" thought it\n * differs in some specific details.\n *\n * Pre-conditions:\n *\n * 1. Each entry has the form {v, barycenter, weight}, or if the node has\n * no barycenter, then {v}.\n *\n * Returns:\n *\n * A new list of entries of the form {vs, i, barycenter, weight}. The list\n * `vs` may either be a singleton or it may be an aggregation of nodes\n * ordered such that they do not violate constraints from the constraint\n * graph. The property `i` is the lowest original index of any of the\n * elements in `vs`.\n */\nfunction resolveConflicts(entries, cg) {\n var mappedEntries = {};\n _.forEach(entries, function (entry, i) {\n var tmp = (mappedEntries[entry.v] = {\n indegree: 0,\n in: [],\n out: [],\n vs: [entry.v],\n i: i,\n });\n if (!_.isUndefined(entry.barycenter)) {\n // @ts-expect-error\n tmp.barycenter = entry.barycenter;\n // @ts-expect-error\n tmp.weight = entry.weight;\n }\n });\n\n _.forEach(cg.edges(), function (e) {\n var entryV = mappedEntries[e.v];\n var entryW = mappedEntries[e.w];\n if (!_.isUndefined(entryV) && !_.isUndefined(entryW)) {\n entryW.indegree++;\n entryV.out.push(mappedEntries[e.w]);\n }\n });\n\n var sourceSet = _.filter(mappedEntries, function (entry) {\n // @ts-expect-error\n return !entry.indegree;\n });\n\n return doResolveConflicts(sourceSet);\n}\n\nfunction doResolveConflicts(sourceSet) {\n var entries = [];\n\n function handleIn(vEntry) {\n return function (uEntry) {\n if (uEntry.merged) {\n return;\n }\n if (\n _.isUndefined(uEntry.barycenter) ||\n _.isUndefined(vEntry.barycenter) ||\n uEntry.barycenter >= vEntry.barycenter\n ) {\n mergeEntries(vEntry, uEntry);\n }\n };\n }\n\n function handleOut(vEntry) {\n return function (wEntry) {\n wEntry['in'].push(vEntry);\n if (--wEntry.indegree === 0) {\n sourceSet.push(wEntry);\n }\n };\n }\n\n while (sourceSet.length) {\n var entry = sourceSet.pop();\n entries.push(entry);\n _.forEach(entry['in'].reverse(), handleIn(entry));\n _.forEach(entry.out, handleOut(entry));\n }\n\n return _.map(\n _.filter(entries, function (entry) {\n return !entry.merged;\n }),\n function (entry) {\n return _.pick(entry, ['vs', 'i', 'barycenter', 'weight']);\n }\n );\n}\n\nfunction mergeEntries(target, source) {\n var sum = 0;\n var weight = 0;\n\n if (target.weight) {\n sum += target.barycenter * target.weight;\n weight += target.weight;\n }\n\n if (source.weight) {\n sum += source.barycenter * source.weight;\n weight += source.weight;\n }\n\n target.vs = source.vs.concat(target.vs);\n target.barycenter = sum / weight;\n target.weight = weight;\n target.i = Math.min(source.i, target.i);\n source.merged = true;\n}\n","import * as _ from 'lodash-es';\nimport * as util from '../util.js';\n\nexport { sort };\n\nfunction sort(entries, biasRight) {\n var parts = util.partition(entries, function (entry) {\n return _.has(entry, 'barycenter');\n });\n var sortable = parts.lhs,\n unsortable = _.sortBy(parts.rhs, function (entry) {\n return -entry.i;\n }),\n vs = [],\n sum = 0,\n weight = 0,\n vsIndex = 0;\n\n sortable.sort(compareWithBias(!!biasRight));\n\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n\n _.forEach(sortable, function (entry) {\n vsIndex += entry.vs.length;\n vs.push(entry.vs);\n sum += entry.barycenter * entry.weight;\n weight += entry.weight;\n vsIndex = consumeUnsortable(vs, unsortable, vsIndex);\n });\n\n var result = { vs: _.flatten(vs) };\n if (weight) {\n result.barycenter = sum / weight;\n result.weight = weight;\n }\n return result;\n}\n\nfunction consumeUnsortable(vs, unsortable, index) {\n var last;\n while (unsortable.length && (last = _.last(unsortable)).i <= index) {\n unsortable.pop();\n vs.push(last.vs);\n index++;\n }\n return index;\n}\n\nfunction compareWithBias(bias) {\n return function (entryV, entryW) {\n if (entryV.barycenter < entryW.barycenter) {\n return -1;\n } else if (entryV.barycenter > entryW.barycenter) {\n return 1;\n }\n\n return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;\n };\n}\n","import * as _ from 'lodash-es';\nimport { barycenter } from './barycenter.js';\nimport { resolveConflicts } from './resolve-conflicts.js';\nimport { sort } from './sort.js';\n\nexport { sortSubgraph };\n\nfunction sortSubgraph(g, v, cg, biasRight) {\n var movable = g.children(v);\n var node = g.node(v);\n var bl = node ? node.borderLeft : undefined;\n var br = node ? node.borderRight : undefined;\n var subgraphs = {};\n\n if (bl) {\n movable = _.filter(movable, function (w) {\n return w !== bl && w !== br;\n });\n }\n\n var barycenters = barycenter(g, movable);\n _.forEach(barycenters, function (entry) {\n if (g.children(entry.v).length) {\n var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);\n subgraphs[entry.v] = subgraphResult;\n if (_.has(subgraphResult, 'barycenter')) {\n mergeBarycenters(entry, subgraphResult);\n }\n }\n });\n\n var entries = resolveConflicts(barycenters, cg);\n expandSubgraphs(entries, subgraphs);\n\n var result = sort(entries, biasRight);\n\n if (bl) {\n result.vs = _.flatten([bl, result.vs, br]);\n if (g.predecessors(bl).length) {\n var blPred = g.node(g.predecessors(bl)[0]),\n brPred = g.node(g.predecessors(br)[0]);\n if (!_.has(result, 'barycenter')) {\n result.barycenter = 0;\n result.weight = 0;\n }\n result.barycenter =\n (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2);\n result.weight += 2;\n }\n }\n\n return result;\n}\n\nfunction expandSubgraphs(entries, subgraphs) {\n _.forEach(entries, function (entry) {\n entry.vs = _.flatten(\n entry.vs.map(function (v) {\n if (subgraphs[v]) {\n return subgraphs[v].vs;\n }\n return v;\n })\n );\n });\n}\n\nfunction mergeBarycenters(target, other) {\n if (!_.isUndefined(target.barycenter)) {\n target.barycenter =\n (target.barycenter * target.weight + other.barycenter * other.weight) /\n (target.weight + other.weight);\n target.weight += other.weight;\n } else {\n target.barycenter = other.barycenter;\n target.weight = other.weight;\n }\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport * as util from '../util.js';\nimport { addSubgraphConstraints } from './add-subgraph-constraints.js';\nimport { buildLayerGraph } from './build-layer-graph.js';\nimport { crossCount } from './cross-count.js';\nimport { initOrder } from './init-order.js';\nimport { sortSubgraph } from './sort-subgraph.js';\n\nexport { order };\n\n/*\n * Applies heuristics to minimize edge crossings in the graph and sets the best\n * order solution as an order attribute on each node.\n *\n * Pre-conditions:\n *\n * 1. Graph must be DAG\n * 2. Graph nodes must be objects with a \"rank\" attribute\n * 3. Graph edges must have the \"weight\" attribute\n *\n * Post-conditions:\n *\n * 1. Graph nodes will have an \"order\" attribute based on the results of the\n * algorithm.\n */\nfunction order(g) {\n var maxRank = util.maxRank(g),\n downLayerGraphs = buildLayerGraphs(g, _.range(1, maxRank + 1), 'inEdges'),\n upLayerGraphs = buildLayerGraphs(g, _.range(maxRank - 1, -1, -1), 'outEdges');\n\n var layering = initOrder(g);\n assignOrder(g, layering);\n\n var bestCC = Number.POSITIVE_INFINITY,\n best;\n\n for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {\n sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);\n\n layering = util.buildLayerMatrix(g);\n var cc = crossCount(g, layering);\n if (cc < bestCC) {\n lastBest = 0;\n best = _.cloneDeep(layering);\n bestCC = cc;\n }\n }\n\n assignOrder(g, best);\n}\n\nfunction buildLayerGraphs(g, ranks, relationship) {\n return _.map(ranks, function (rank) {\n return buildLayerGraph(g, rank, relationship);\n });\n}\n\nfunction sweepLayerGraphs(layerGraphs, biasRight) {\n var cg = new Graph();\n _.forEach(layerGraphs, function (lg) {\n var root = lg.graph().root;\n var sorted = sortSubgraph(lg, root, cg, biasRight);\n _.forEach(sorted.vs, function (v, i) {\n lg.node(v).order = i;\n });\n addSubgraphConstraints(lg, cg, sorted.vs);\n });\n}\n\nfunction assignOrder(g, layering) {\n _.forEach(layering, function (layer) {\n _.forEach(layer, function (v, i) {\n g.node(v).order = i;\n });\n });\n}\n","import * as _ from 'lodash-es';\n\nexport { parentDummyChains };\n\nfunction parentDummyChains(g) {\n var postorderNums = postorder(g);\n\n _.forEach(g.graph().dummyChains, function (v) {\n var node = g.node(v);\n var edgeObj = node.edgeObj;\n var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);\n var path = pathData.path;\n var lca = pathData.lca;\n var pathIdx = 0;\n var pathV = path[pathIdx];\n var ascending = true;\n\n while (v !== edgeObj.w) {\n node = g.node(v);\n\n if (ascending) {\n while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) {\n pathIdx++;\n }\n\n if (pathV === lca) {\n ascending = false;\n }\n }\n\n if (!ascending) {\n while (\n pathIdx < path.length - 1 &&\n g.node((pathV = path[pathIdx + 1])).minRank <= node.rank\n ) {\n pathIdx++;\n }\n pathV = path[pathIdx];\n }\n\n g.setParent(v, pathV);\n v = g.successors(v)[0];\n }\n });\n}\n\n// Find a path from v to w through the lowest common ancestor (LCA). Return the\n// full path and the LCA.\nfunction findPath(g, postorderNums, v, w) {\n var vPath = [];\n var wPath = [];\n var low = Math.min(postorderNums[v].low, postorderNums[w].low);\n var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);\n var parent;\n var lca;\n\n // Traverse up from v to find the LCA\n parent = v;\n do {\n parent = g.parent(parent);\n vPath.push(parent);\n } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim));\n lca = parent;\n\n // Traverse from w to LCA\n parent = w;\n while ((parent = g.parent(parent)) !== lca) {\n wPath.push(parent);\n }\n\n return { path: vPath.concat(wPath.reverse()), lca: lca };\n}\n\nfunction postorder(g) {\n var result = {};\n var lim = 0;\n\n function dfs(v) {\n var low = lim;\n _.forEach(g.children(v), dfs);\n result[v] = { low: low, lim: lim++ };\n }\n _.forEach(g.children(), dfs);\n\n return result;\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../../graphlib/index.js';\nimport * as util from '../util.js';\n\n/*\n * This module provides coordinate assignment based on Brandes and Köpf, \"Fast\n * and Simple Horizontal Coordinate Assignment.\"\n */\n\nexport {\n positionX,\n findType1Conflicts,\n findType2Conflicts,\n addConflict,\n hasConflict,\n verticalAlignment,\n horizontalCompaction,\n alignCoordinates,\n findSmallestWidthAlignment,\n balance,\n};\n\n/*\n * Marks all edges in the graph with a type-1 conflict with the \"type1Conflict\"\n * property. A type-1 conflict is one where a non-inner segment crosses an\n * inner segment. An inner segment is an edge with both incident nodes marked\n * with the \"dummy\" property.\n *\n * This algorithm scans layer by layer, starting with the second, for type-1\n * conflicts between the current layer and the previous layer. For each layer\n * it scans the nodes from left to right until it reaches one that is incident\n * on an inner segment. It then scans predecessors to determine if they have\n * edges that cross that inner segment. At the end a final scan is done for all\n * nodes on the current rank to see if they cross the last visited inner\n * segment.\n *\n * This algorithm (safely) assumes that a dummy node will only be incident on a\n * single node in the layers being scanned.\n */\nfunction findType1Conflicts(g, layering) {\n var conflicts = {};\n\n function visitLayer(prevLayer, layer) {\n var // last visited node in the previous layer that is incident on an inner\n // segment.\n k0 = 0,\n // Tracks the last node in this layer scanned for crossings with a type-1\n // segment.\n scanPos = 0,\n prevLayerLength = prevLayer.length,\n lastNode = _.last(layer);\n\n _.forEach(layer, function (v, i) {\n var w = findOtherInnerSegmentNode(g, v),\n k1 = w ? g.node(w).order : prevLayerLength;\n\n if (w || v === lastNode) {\n _.forEach(layer.slice(scanPos, i + 1), function (scanNode) {\n _.forEach(g.predecessors(scanNode), function (u) {\n var uLabel = g.node(u),\n uPos = uLabel.order;\n if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) {\n addConflict(conflicts, u, scanNode);\n }\n });\n });\n // @ts-expect-error\n scanPos = i + 1;\n k0 = k1;\n }\n });\n\n return layer;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findType2Conflicts(g, layering) {\n var conflicts = {};\n\n function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {\n var v;\n _.forEach(_.range(southPos, southEnd), function (i) {\n v = south[i];\n if (g.node(v).dummy) {\n _.forEach(g.predecessors(v), function (u) {\n var uNode = g.node(u);\n if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {\n addConflict(conflicts, u, v);\n }\n });\n }\n });\n }\n\n function visitLayer(north, south) {\n var prevNorthPos = -1,\n nextNorthPos,\n southPos = 0;\n\n _.forEach(south, function (v, southLookahead) {\n if (g.node(v).dummy === 'border') {\n var predecessors = g.predecessors(v);\n if (predecessors.length) {\n nextNorthPos = g.node(predecessors[0]).order;\n scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);\n // @ts-expect-error\n southPos = southLookahead;\n prevNorthPos = nextNorthPos;\n }\n }\n scan(south, southPos, south.length, nextNorthPos, north.length);\n });\n\n return south;\n }\n\n _.reduce(layering, visitLayer);\n return conflicts;\n}\n\nfunction findOtherInnerSegmentNode(g, v) {\n if (g.node(v).dummy) {\n return _.find(g.predecessors(v), function (u) {\n return g.node(u).dummy;\n });\n }\n}\n\nfunction addConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n\n var conflictsV = conflicts[v];\n if (!conflictsV) {\n conflicts[v] = conflictsV = {};\n }\n conflictsV[w] = true;\n}\n\nfunction hasConflict(conflicts, v, w) {\n if (v > w) {\n var tmp = v;\n v = w;\n w = tmp;\n }\n return _.has(conflicts[v], w);\n}\n\n/*\n * Try to align nodes into vertical \"blocks\" where possible. This algorithm\n * attempts to align a node with one of its median neighbors. If the edge\n * connecting a neighbor is a type-1 conflict then we ignore that possibility.\n * If a previous node has already formed a block with a node after the node\n * we're trying to form a block with, we also ignore that possibility - our\n * blocks would be split in that scenario.\n */\nfunction verticalAlignment(g, layering, conflicts, neighborFn) {\n var root = {},\n align = {},\n pos = {};\n\n // We cache the position here based on the layering because the graph and\n // layering may be out of sync. The layering matrix is manipulated to\n // generate different extreme alignments.\n _.forEach(layering, function (layer) {\n _.forEach(layer, function (v, order) {\n root[v] = v;\n align[v] = v;\n pos[v] = order;\n });\n });\n\n _.forEach(layering, function (layer) {\n var prevIdx = -1;\n _.forEach(layer, function (v) {\n var ws = neighborFn(v);\n if (ws.length) {\n ws = _.sortBy(ws, function (w) {\n return pos[w];\n });\n var mp = (ws.length - 1) / 2;\n for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {\n var w = ws[i];\n if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) {\n align[w] = v;\n align[v] = root[v] = root[w];\n prevIdx = pos[w];\n }\n }\n }\n });\n });\n\n return { root: root, align: align };\n}\n\nfunction horizontalCompaction(g, layering, root, align, reverseSep) {\n // This portion of the algorithm differs from BK due to a number of problems.\n // Instead of their algorithm we construct a new block graph and do two\n // sweeps. The first sweep places blocks with the smallest possible\n // coordinates. The second sweep removes unused space by moving blocks to the\n // greatest coordinates without violating separation.\n var xs = {},\n blockG = buildBlockGraph(g, layering, root, reverseSep),\n borderType = reverseSep ? 'borderLeft' : 'borderRight';\n\n function iterate(setXsFunc, nextNodesFunc) {\n var stack = blockG.nodes();\n var elem = stack.pop();\n var visited = {};\n while (elem) {\n if (visited[elem]) {\n setXsFunc(elem);\n } else {\n visited[elem] = true;\n stack.push(elem);\n stack = stack.concat(nextNodesFunc(elem));\n }\n\n elem = stack.pop();\n }\n }\n\n // First pass, assign smallest coordinates\n function pass1(elem) {\n xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) {\n return Math.max(acc, xs[e.v] + blockG.edge(e));\n }, 0);\n }\n\n // Second pass, assign greatest coordinates\n function pass2(elem) {\n var min = blockG.outEdges(elem).reduce(function (acc, e) {\n return Math.min(acc, xs[e.w] - blockG.edge(e));\n }, Number.POSITIVE_INFINITY);\n\n var node = g.node(elem);\n if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {\n xs[elem] = Math.max(xs[elem], min);\n }\n }\n\n iterate(pass1, blockG.predecessors.bind(blockG));\n iterate(pass2, blockG.successors.bind(blockG));\n\n // Assign x coordinates to all nodes\n _.forEach(align, function (v) {\n xs[v] = xs[root[v]];\n });\n\n return xs;\n}\n\nfunction buildBlockGraph(g, layering, root, reverseSep) {\n var blockGraph = new Graph(),\n graphLabel = g.graph(),\n sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);\n\n _.forEach(layering, function (layer) {\n var u;\n _.forEach(layer, function (v) {\n var vRoot = root[v];\n blockGraph.setNode(vRoot);\n if (u) {\n var uRoot = root[u],\n prevMax = blockGraph.edge(uRoot, vRoot);\n blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));\n }\n u = v;\n });\n });\n\n return blockGraph;\n}\n\n/*\n * Returns the alignment that has the smallest width of the given alignments.\n */\nfunction findSmallestWidthAlignment(g, xss) {\n return _.minBy(_.values(xss), function (xs) {\n var max = Number.NEGATIVE_INFINITY;\n var min = Number.POSITIVE_INFINITY;\n\n _.forIn(xs, function (x, v) {\n var halfWidth = width(g, v) / 2;\n\n max = Math.max(x + halfWidth, max);\n min = Math.min(x - halfWidth, min);\n });\n\n return max - min;\n });\n}\n\n/*\n * Align the coordinates of each of the layout alignments such that\n * left-biased alignments have their minimum coordinate at the same point as\n * the minimum coordinate of the smallest width alignment and right-biased\n * alignments have their maximum coordinate at the same point as the maximum\n * coordinate of the smallest width alignment.\n */\nfunction alignCoordinates(xss, alignTo) {\n var alignToVals = _.values(alignTo),\n alignToMin = _.min(alignToVals),\n alignToMax = _.max(alignToVals);\n\n _.forEach(['u', 'd'], function (vert) {\n _.forEach(['l', 'r'], function (horiz) {\n var alignment = vert + horiz,\n xs = xss[alignment],\n delta;\n if (xs === alignTo) return;\n\n var xsVals = _.values(xs);\n delta = horiz === 'l' ? alignToMin - _.min(xsVals) : alignToMax - _.max(xsVals);\n\n if (delta) {\n xss[alignment] = _.mapValues(xs, function (x) {\n return x + delta;\n });\n }\n });\n });\n}\n\nfunction balance(xss, align) {\n return _.mapValues(xss.ul, function (ignore, v) {\n if (align) {\n return xss[align.toLowerCase()][v];\n } else {\n var xs = _.sortBy(_.map(xss, v));\n return (xs[1] + xs[2]) / 2;\n }\n });\n}\n\nfunction positionX(g) {\n var layering = util.buildLayerMatrix(g);\n var conflicts = _.merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering));\n\n var xss = {};\n var adjustedLayering;\n _.forEach(['u', 'd'], function (vert) {\n adjustedLayering = vert === 'u' ? layering : _.values(layering).reverse();\n _.forEach(['l', 'r'], function (horiz) {\n if (horiz === 'r') {\n adjustedLayering = _.map(adjustedLayering, function (inner) {\n return _.values(inner).reverse();\n });\n }\n\n var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g);\n var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);\n var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r');\n if (horiz === 'r') {\n xs = _.mapValues(xs, function (x) {\n return -x;\n });\n }\n xss[vert + horiz] = xs;\n });\n });\n\n var smallestWidth = findSmallestWidthAlignment(g, xss);\n alignCoordinates(xss, smallestWidth);\n return balance(xss, g.graph().align);\n}\n\nfunction sep(nodeSep, edgeSep, reverseSep) {\n return function (g, v, w) {\n var vLabel = g.node(v);\n var wLabel = g.node(w);\n var sum = 0;\n var delta;\n\n sum += vLabel.width / 2;\n if (_.has(vLabel, 'labelpos')) {\n switch (vLabel.labelpos.toLowerCase()) {\n case 'l':\n delta = -vLabel.width / 2;\n break;\n case 'r':\n delta = vLabel.width / 2;\n break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;\n sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;\n\n sum += wLabel.width / 2;\n if (_.has(wLabel, 'labelpos')) {\n switch (wLabel.labelpos.toLowerCase()) {\n case 'l':\n delta = wLabel.width / 2;\n break;\n case 'r':\n delta = -wLabel.width / 2;\n break;\n }\n }\n if (delta) {\n sum += reverseSep ? delta : -delta;\n }\n delta = 0;\n\n return sum;\n };\n}\n\nfunction width(g, v) {\n return g.node(v).width;\n}\n","import * as _ from 'lodash-es';\nimport * as util from '../util.js';\nimport { positionX } from './bk.js';\n\nexport { position };\n\nfunction position(g) {\n g = util.asNonCompoundGraph(g);\n\n positionY(g);\n _.forEach(positionX(g), function (x, v) {\n g.node(v).x = x;\n });\n}\n\nfunction positionY(g) {\n var layering = util.buildLayerMatrix(g);\n var rankSep = g.graph().ranksep;\n var prevY = 0;\n _.forEach(layering, function (layer) {\n var maxHeight = _.max(\n _.map(layer, function (v) {\n return g.node(v).height;\n })\n );\n _.forEach(layer, function (v) {\n g.node(v).y = prevY + maxHeight / 2;\n });\n prevY += maxHeight + rankSep;\n });\n}\n","import * as _ from 'lodash-es';\nimport { Graph } from '../graphlib/index.js';\nimport { addBorderSegments } from './add-border-segments.js';\nimport * as coordinateSystem from './coordinate-system.js';\nimport * as acyclic from './acyclic.js';\nimport * as normalize from './normalize.js';\nimport { rank } from './rank/index.js';\nimport * as nestingGraph from './nesting-graph.js';\nimport { order } from './order/index.js';\nimport { parentDummyChains } from './parent-dummy-chains.js';\nimport { position } from './position/index.js';\nimport * as util from './util.js';\n\nexport { layout };\n\nfunction layout(g, opts) {\n var time = opts && opts.debugTiming ? util.time : util.notime;\n time('layout', function () {\n var layoutGraph = time(' buildLayoutGraph', function () {\n return buildLayoutGraph(g);\n });\n time(' runLayout', function () {\n runLayout(layoutGraph, time);\n });\n time(' updateInputGraph', function () {\n updateInputGraph(g, layoutGraph);\n });\n });\n}\n\nfunction runLayout(g, time) {\n time(' makeSpaceForEdgeLabels', function () {\n makeSpaceForEdgeLabels(g);\n });\n time(' removeSelfEdges', function () {\n removeSelfEdges(g);\n });\n time(' acyclic', function () {\n acyclic.run(g);\n });\n time(' nestingGraph.run', function () {\n nestingGraph.run(g);\n });\n time(' rank', function () {\n rank(util.asNonCompoundGraph(g));\n });\n time(' injectEdgeLabelProxies', function () {\n injectEdgeLabelProxies(g);\n });\n time(' removeEmptyRanks', function () {\n util.removeEmptyRanks(g);\n });\n time(' nestingGraph.cleanup', function () {\n nestingGraph.cleanup(g);\n });\n time(' normalizeRanks', function () {\n util.normalizeRanks(g);\n });\n time(' assignRankMinMax', function () {\n assignRankMinMax(g);\n });\n time(' removeEdgeLabelProxies', function () {\n removeEdgeLabelProxies(g);\n });\n time(' normalize.run', function () {\n normalize.run(g);\n });\n time(' parentDummyChains', function () {\n parentDummyChains(g);\n });\n time(' addBorderSegments', function () {\n addBorderSegments(g);\n });\n time(' order', function () {\n order(g);\n });\n time(' insertSelfEdges', function () {\n insertSelfEdges(g);\n });\n time(' adjustCoordinateSystem', function () {\n coordinateSystem.adjust(g);\n });\n time(' position', function () {\n position(g);\n });\n time(' positionSelfEdges', function () {\n positionSelfEdges(g);\n });\n time(' removeBorderNodes', function () {\n removeBorderNodes(g);\n });\n time(' normalize.undo', function () {\n normalize.undo(g);\n });\n time(' fixupEdgeLabelCoords', function () {\n fixupEdgeLabelCoords(g);\n });\n time(' undoCoordinateSystem', function () {\n coordinateSystem.undo(g);\n });\n time(' translateGraph', function () {\n translateGraph(g);\n });\n time(' assignNodeIntersects', function () {\n assignNodeIntersects(g);\n });\n time(' reversePoints', function () {\n reversePointsForReversedEdges(g);\n });\n time(' acyclic.undo', function () {\n acyclic.undo(g);\n });\n}\n\n/*\n * Copies final layout information from the layout graph back to the input\n * graph. This process only copies whitelisted attributes from the layout graph\n * to the input graph, so it serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction updateInputGraph(inputGraph, layoutGraph) {\n _.forEach(inputGraph.nodes(), function (v) {\n var inputLabel = inputGraph.node(v);\n var layoutLabel = layoutGraph.node(v);\n\n if (inputLabel) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n\n if (layoutGraph.children(v).length) {\n inputLabel.width = layoutLabel.width;\n inputLabel.height = layoutLabel.height;\n }\n }\n });\n\n _.forEach(inputGraph.edges(), function (e) {\n var inputLabel = inputGraph.edge(e);\n var layoutLabel = layoutGraph.edge(e);\n\n inputLabel.points = layoutLabel.points;\n if (_.has(layoutLabel, 'x')) {\n inputLabel.x = layoutLabel.x;\n inputLabel.y = layoutLabel.y;\n }\n });\n\n inputGraph.graph().width = layoutGraph.graph().width;\n inputGraph.graph().height = layoutGraph.graph().height;\n}\n\nvar graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy'];\nvar graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' };\nvar graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align'];\nvar nodeNumAttrs = ['width', 'height'];\nvar nodeDefaults = { width: 0, height: 0 };\nvar edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset'];\nvar edgeDefaults = {\n minlen: 1,\n weight: 1,\n width: 0,\n height: 0,\n labeloffset: 10,\n labelpos: 'r',\n};\nvar edgeAttrs = ['labelpos'];\n\n/*\n * Constructs a new graph from the input graph, which can be used for layout.\n * This process copies only whitelisted attributes from the input graph to the\n * layout graph. Thus this function serves as a good place to determine what\n * attributes can influence layout.\n */\nfunction buildLayoutGraph(inputGraph) {\n var g = new Graph({ multigraph: true, compound: true });\n var graph = canonicalize(inputGraph.graph());\n\n g.setGraph(\n _.merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), _.pick(graph, graphAttrs))\n );\n\n _.forEach(inputGraph.nodes(), function (v) {\n var node = canonicalize(inputGraph.node(v));\n g.setNode(v, _.defaults(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));\n g.setParent(v, inputGraph.parent(v));\n });\n\n _.forEach(inputGraph.edges(), function (e) {\n var edge = canonicalize(inputGraph.edge(e));\n g.setEdge(\n e,\n _.merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), _.pick(edge, edgeAttrs))\n );\n });\n\n return g;\n}\n\n/*\n * This idea comes from the Gansner paper: to account for edge labels in our\n * layout we split each rank in half by doubling minlen and halving ranksep.\n * Then we can place labels at these mid-points between nodes.\n *\n * We also add some minimal padding to the width to push the label for the edge\n * away from the edge itself a bit.\n */\nfunction makeSpaceForEdgeLabels(g) {\n var graph = g.graph();\n graph.ranksep /= 2;\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n edge.minlen *= 2;\n if (edge.labelpos.toLowerCase() !== 'c') {\n if (graph.rankdir === 'TB' || graph.rankdir === 'BT') {\n edge.width += edge.labeloffset;\n } else {\n edge.height += edge.labeloffset;\n }\n }\n });\n}\n\n/*\n * Creates temporary dummy nodes that capture the rank in which each edge's\n * label is going to, if it has one of non-zero width and height. We do this\n * so that we can safely remove empty ranks while preserving balance for the\n * label's position.\n */\nfunction injectEdgeLabelProxies(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.width && edge.height) {\n var v = g.node(e.v);\n var w = g.node(e.w);\n var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };\n util.addDummyNode(g, 'edge-proxy', label, '_ep');\n }\n });\n}\n\nfunction assignRankMinMax(g) {\n var maxRank = 0;\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (node.borderTop) {\n node.minRank = g.node(node.borderTop).rank;\n node.maxRank = g.node(node.borderBottom).rank;\n // @ts-expect-error\n maxRank = _.max(maxRank, node.maxRank);\n }\n });\n g.graph().maxRank = maxRank;\n}\n\nfunction removeEdgeLabelProxies(g) {\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (node.dummy === 'edge-proxy') {\n g.edge(node.e).labelRank = node.rank;\n g.removeNode(v);\n }\n });\n}\n\nfunction translateGraph(g) {\n var minX = Number.POSITIVE_INFINITY;\n var maxX = 0;\n var minY = Number.POSITIVE_INFINITY;\n var maxY = 0;\n var graphLabel = g.graph();\n var marginX = graphLabel.marginx || 0;\n var marginY = graphLabel.marginy || 0;\n\n function getExtremes(attrs) {\n var x = attrs.x;\n var y = attrs.y;\n var w = attrs.width;\n var h = attrs.height;\n minX = Math.min(minX, x - w / 2);\n maxX = Math.max(maxX, x + w / 2);\n minY = Math.min(minY, y - h / 2);\n maxY = Math.max(maxY, y + h / 2);\n }\n\n _.forEach(g.nodes(), function (v) {\n getExtremes(g.node(v));\n });\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (_.has(edge, 'x')) {\n getExtremes(edge);\n }\n });\n\n minX -= marginX;\n minY -= marginY;\n\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n node.x -= minX;\n node.y -= minY;\n });\n\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n _.forEach(edge.points, function (p) {\n p.x -= minX;\n p.y -= minY;\n });\n if (_.has(edge, 'x')) {\n edge.x -= minX;\n }\n if (_.has(edge, 'y')) {\n edge.y -= minY;\n }\n });\n\n graphLabel.width = maxX - minX + marginX;\n graphLabel.height = maxY - minY + marginY;\n}\n\nfunction assignNodeIntersects(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n var nodeV = g.node(e.v);\n var nodeW = g.node(e.w);\n var p1, p2;\n if (!edge.points) {\n edge.points = [];\n p1 = nodeW;\n p2 = nodeV;\n } else {\n p1 = edge.points[0];\n p2 = edge.points[edge.points.length - 1];\n }\n edge.points.unshift(util.intersectRect(nodeV, p1));\n edge.points.push(util.intersectRect(nodeW, p2));\n });\n}\n\nfunction fixupEdgeLabelCoords(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (_.has(edge, 'x')) {\n if (edge.labelpos === 'l' || edge.labelpos === 'r') {\n edge.width -= edge.labeloffset;\n }\n switch (edge.labelpos) {\n case 'l':\n edge.x -= edge.width / 2 + edge.labeloffset;\n break;\n case 'r':\n edge.x += edge.width / 2 + edge.labeloffset;\n break;\n }\n }\n });\n}\n\nfunction reversePointsForReversedEdges(g) {\n _.forEach(g.edges(), function (e) {\n var edge = g.edge(e);\n if (edge.reversed) {\n edge.points.reverse();\n }\n });\n}\n\nfunction removeBorderNodes(g) {\n _.forEach(g.nodes(), function (v) {\n if (g.children(v).length) {\n var node = g.node(v);\n var t = g.node(node.borderTop);\n var b = g.node(node.borderBottom);\n var l = g.node(_.last(node.borderLeft));\n var r = g.node(_.last(node.borderRight));\n\n node.width = Math.abs(r.x - l.x);\n node.height = Math.abs(b.y - t.y);\n node.x = l.x + node.width / 2;\n node.y = t.y + node.height / 2;\n }\n });\n\n _.forEach(g.nodes(), function (v) {\n if (g.node(v).dummy === 'border') {\n g.removeNode(v);\n }\n });\n}\n\nfunction removeSelfEdges(g) {\n _.forEach(g.edges(), function (e) {\n if (e.v === e.w) {\n var node = g.node(e.v);\n if (!node.selfEdges) {\n node.selfEdges = [];\n }\n node.selfEdges.push({ e: e, label: g.edge(e) });\n g.removeEdge(e);\n }\n });\n}\n\nfunction insertSelfEdges(g) {\n var layers = util.buildLayerMatrix(g);\n _.forEach(layers, function (layer) {\n var orderShift = 0;\n _.forEach(layer, function (v, i) {\n var node = g.node(v);\n node.order = i + orderShift;\n _.forEach(node.selfEdges, function (selfEdge) {\n util.addDummyNode(\n g,\n 'selfedge',\n {\n width: selfEdge.label.width,\n height: selfEdge.label.height,\n rank: node.rank,\n order: i + ++orderShift,\n e: selfEdge.e,\n label: selfEdge.label,\n },\n '_se'\n );\n });\n delete node.selfEdges;\n });\n });\n}\n\nfunction positionSelfEdges(g) {\n _.forEach(g.nodes(), function (v) {\n var node = g.node(v);\n if (node.dummy === 'selfedge') {\n var selfNode = g.node(node.e.v);\n var x = selfNode.x + selfNode.width / 2;\n var y = selfNode.y;\n var dx = node.x - x;\n var dy = selfNode.height / 2;\n g.setEdge(node.e, node.label);\n g.removeNode(v);\n node.label.points = [\n { x: x + (2 * dx) / 3, y: y - dy },\n { x: x + (5 * dx) / 6, y: y - dy },\n { x: x + dx, y: y },\n { x: x + (5 * dx) / 6, y: y + dy },\n { x: x + (2 * dx) / 3, y: y + dy },\n ];\n node.label.x = node.x;\n node.label.y = node.y;\n }\n });\n}\n\nfunction selectNumberAttrs(obj, attrs) {\n return _.mapValues(_.pick(obj, attrs), Number);\n}\n\nfunction canonicalize(attrs) {\n var newAttrs = {};\n _.forEach(attrs, function (v, k) {\n newAttrs[k.toLowerCase()] = v;\n });\n return newAttrs;\n}\n"],"names":["symbolTag","isSymbol","value","isObjectLike","baseGetTag","arrayMap","array","iteratee","index","length","result","INFINITY","symbolProto","Symbol","symbolToString","baseToString","isArray","reWhitespace","trimmedEndIndex","string","reTrimStart","baseTrim","NAN","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","toNumber","isObject","other","isBinary","MAX_INTEGER","toFinite","sign","toInteger","remainder","identity","objectCreate","baseCreate","object","proto","baseCreate$1","apply","func","thisArg","args","noop","copyArray","source","HOT_COUNT","HOT_SPAN","nativeNow","shortOut","count","lastCalled","stamp","remaining","constant","defineProperty","getNative","defineProperty$1","baseSetToString","baseSetToString$1","setToString","setToString$1","arrayEach","baseFindIndex","predicate","fromIndex","fromRight","baseIsNaN","strictIndexOf","baseIndexOf","arrayIncludes","MAX_SAFE_INTEGER","reIsUint","isIndex","type","baseAssignValue","key","objectProto","hasOwnProperty","assignValue","objValue","eq","copyObject","props","customizer","isNew","newValue","nativeMax","overRest","start","transform","otherArgs","baseRest","isIterateeCall","isArrayLike","createAssigner","assigner","sources","guard","baseTimes","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isBuffer","isType","isTypedArray","skipIndexes","keys","baseKeys","nativeKeysIn","baseKeysIn","isProto","isPrototype","keysIn","reIsDeepProp","reIsPlainProp","isKey","MAX_MEMOIZE_SIZE","memoizeCapped","memoize","cache","rePropName","reEscapeChar","stringToPath","match","number","quote","subString","stringToPath$1","toString","castPath","toKey","baseGet","path","get","defaultValue","arrayPush","values","offset","spreadableSymbol","isFlattenable","baseFlatten","depth","isStrict","flatten","flatRest","arrayReduce","accumulator","initAccum","stackClear","ListCache","stackDelete","data","stackGet","stackHas","LARGE_ARRAY_SIZE","stackSet","pairs","Map","MapCache","Stack","entries","baseAssign","baseAssignIn","freeExports","freeModule","moduleExports","Buffer","root","allocUnsafe","cloneBuffer","buffer","isDeep","arrayFilter","resIndex","stubArray","propertyIsEnumerable","nativeGetSymbols","getSymbols","symbol","getSymbols$1","copySymbols","getSymbolsIn","getPrototype","getSymbolsIn$1","copySymbolsIn","baseGetAllKeys","keysFunc","symbolsFunc","getAllKeys","getAllKeysIn","initCloneArray","Uint8Array","Uint8Array$1","cloneArrayBuffer","arrayBuffer","cloneDataView","dataView","reFlags","cloneRegExp","regexp","symbolValueOf","cloneSymbol","cloneTypedArray","typedArray","boolTag","dateTag","mapTag","numberTag","regexpTag","setTag","stringTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","initCloneByTag","tag","Ctor","initCloneObject","baseIsMap","getTag","nodeIsMap","nodeUtil","isMap","baseUnary","isMap$1","baseIsSet","nodeIsSet","isSet","isSet$1","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","argsTag","arrayTag","errorTag","funcTag","genTag","objectTag","weakMapTag","cloneableTags","baseClone","bitmask","stack","isFlat","isFull","isFunc","stacked","subValue","cloneDeep","HASH_UNDEFINED","setCacheAdd","setCacheHas","SetCache","arraySome","cacheHas","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","equalArrays","equalFunc","isPartial","arrLength","othLength","arrStacked","othStacked","seen","arrValue","othValue","compared","othIndex","mapToArray","map","setToArray","set","equalByTag","convert","equalObjects","objProps","objLength","othProps","objStacked","skipCtor","objCtor","othCtor","baseIsEqualDeep","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","baseIsEqual","baseIsMatch","matchData","noCustomizer","srcValue","isStrictComparable","getMatchData","matchesStrictComparable","baseMatches","baseHasIn","hasPath","hasFunc","isLength","hasIn","baseMatchesProperty","baseProperty","basePropertyDeep","property","baseIteratee","createBaseFor","iterable","baseFor","baseFor$1","baseForOwn","createBaseEach","eachFunc","collection","baseEach","baseEach$1","now","now$1","defaults","propsIndex","propsLength","defaults$1","assignMergeValue","isArrayLikeObject","safeGet","toPlainObject","baseMergeDeep","srcIndex","mergeFunc","isCommon","isTyped","isPlainObject","isFunction","baseMerge","arrayIncludesWith","comparator","last","castFunction","forEach","baseFilter","filter","createFind","findIndexFunc","findIndex","find","find$1","baseMap","forIn","baseGt","baseHas","has","baseValues","isUndefined","baseLt","mapValues","baseExtremum","current","computed","max","merge","merge$1","min","minBy","baseSet","lastIndex","nested","basePickBy","paths","baseSortBy","comparer","compareAscending","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","compareMultiple","orders","objCriteria","othCriteria","ordersLength","order","baseOrderBy","iteratees","criteria","basePick","pick","pick$1","nativeCeil","baseRange","end","step","createRange","range","range$1","baseReduce","reduce","sortBy","sortBy$1","createSet","Set","createSet$1","baseUniq","includes","outer","seenIndex","union","arrays","union$1","idCounter","uniqueId","prefix","id","baseZipObject","assignFunc","valsLength","zipObject","DEFAULT_EDGE_NAME","GRAPH_NODE","EDGE_KEY_DELIM","Graph","opts","_.has","_.constant","label","newDefault","_.isFunction","_.keys","self","_.filter","v","_.isEmpty","vs","_.each","removeEdge","e","child","parent","_.isUndefined","ancestor","children","predsV","sucsV","preds","_.union","neighbors","copy","parents","findParent","_.values","_.reduce","w","name","valueSpecified","arg0","edgeArgsToId","edgeObj","edgeArgsToObj","incrementOrInitEntry","edgeObjToId","edge","decrementOrRemoveEntry","u","inV","edges","outV","inEdges","k","isDirected","v_","w_","tmp","List","sentinel","entry","unlink","strs","curr","filterOutLinks","DEFAULT_WEIGHT_FN","greedyFAS","g","weightFn","state","buildState","results","doGreedyFAS","_.flatten","_.map","buckets","zeroIdx","sinks","removeNode","i","collectPredecessors","_.forEach","weight","uEntry","assignBucket","wEntry","fasGraph","maxIn","maxOut","prevWeight","edgeWeight","_.range","run","fas","dfsFAS","_.uniqueId","visited","dfs","undo","forwardName","addDummyNode","attrs","simplify","simplified","simpleLabel","asNonCompoundGraph","intersectRect","rect","point","x","y","dx","dy","h","sx","sy","buildLayerMatrix","layering","maxRank","node","rank","normalizeRanks","_.min","removeEmptyRanks","layers","delta","nodeRankFactor","addBorderNode","_.max","partition","fn","time","_.now","notime","addBorderSegments","prop","sg","sgNode","prev","util.addDummyNode","adjust","rankDir","swapWidthHeight","reverseY","swapXY","swapWidthHeightOne","reverseYOne","swapXYOne","normalizeEdge","vRank","wRank","edgeLabel","labelRank","dummy","origLabel","longestPath","slack","feasibleTree","t","size","tightTree","findMinSlackEdge","shiftRanks","edgeV","_.minBy","CycleException","_.isArray","navigation","acc","doDfs","postorder","preorder","networkSimplex","initLowLimValues","initCutValues","calcCutValue","leaveEdge","enterEdge","exchangeEdges","f","alg.postorder","assignCutValue","childLab","childIsTail","graphEdge","cutValue","isOutEdge","pointsToHead","otherWeight","isTreeEdge","otherCutValue","tree","dfsAssignLowLim","nextLim","low","_.find","vLabel","wLabel","tailLabel","flip","candidates","isDescendant","updateRanks","alg.preorder","flipped","rootLabel","networkSimplexRanker","tightTreeRanker","longestPathRanker","depths","treeDepths","height","nodeSep","sumWeights","top","util.addBorderNode","bottom","childNode","childTop","childBottom","thisWeight","minlen","cleanup","graphLabel","addSubgraphConstraints","cg","rootPrev","prevChild","buildLayerGraph","relationship","createRootNode","crossCount","cc","twoLayerCrossCount","northLayer","southLayer","southPos","_.zipObject","southEntries","_.sortBy","firstIndex","treeSize","weightSum","initOrder","simpleNodes","orderedVs","barycenter","movable","nodeU","resolveConflicts","mappedEntries","entryV","entryW","sourceSet","doResolveConflicts","handleIn","vEntry","mergeEntries","handleOut","_.pick","target","sum","sort","biasRight","parts","util.partition","sortable","unsortable","vsIndex","compareWithBias","consumeUnsortable","_.last","bias","sortSubgraph","bl","br","subgraphs","barycenters","subgraphResult","mergeBarycenters","expandSubgraphs","blPred","brPred","util.maxRank","downLayerGraphs","buildLayerGraphs","upLayerGraphs","assignOrder","bestCC","best","lastBest","sweepLayerGraphs","util.buildLayerMatrix","_.cloneDeep","ranks","layerGraphs","lg","sorted","layer","parentDummyChains","postorderNums","pathData","findPath","lca","pathIdx","pathV","ascending","vPath","wPath","lim","findType1Conflicts","conflicts","visitLayer","prevLayer","k0","scanPos","prevLayerLength","lastNode","findOtherInnerSegmentNode","k1","scanNode","uLabel","uPos","addConflict","findType2Conflicts","scan","south","southEnd","prevNorthBorder","nextNorthBorder","uNode","north","prevNorthPos","nextNorthPos","southLookahead","predecessors","conflictsV","hasConflict","verticalAlignment","neighborFn","align","pos","prevIdx","ws","mp","il","horizontalCompaction","reverseSep","xs","blockG","buildBlockGraph","borderType","iterate","setXsFunc","nextNodesFunc","elem","pass1","pass2","blockGraph","sepFn","sep","vRoot","uRoot","prevMax","findSmallestWidthAlignment","xss","_.forIn","halfWidth","width","alignCoordinates","alignTo","alignToVals","alignToMin","alignToMax","vert","horiz","alignment","xsVals","_.mapValues","balance","ignore","positionX","_.merge","adjustedLayering","inner","smallestWidth","edgeSep","position","util.asNonCompoundGraph","positionY","rankSep","prevY","maxHeight","layout","util.time","util.notime","layoutGraph","buildLayoutGraph","runLayout","updateInputGraph","makeSpaceForEdgeLabels","removeSelfEdges","acyclic.run","nestingGraph.run","injectEdgeLabelProxies","util.removeEmptyRanks","nestingGraph.cleanup","util.normalizeRanks","assignRankMinMax","removeEdgeLabelProxies","normalize.run","insertSelfEdges","coordinateSystem.adjust","positionSelfEdges","removeBorderNodes","normalize.undo","fixupEdgeLabelCoords","coordinateSystem.undo","translateGraph","assignNodeIntersects","reversePointsForReversedEdges","acyclic.undo","inputGraph","inputLabel","layoutLabel","graphNumAttrs","graphDefaults","graphAttrs","nodeNumAttrs","nodeDefaults","edgeNumAttrs","edgeDefaults","edgeAttrs","graph","canonicalize","selectNumberAttrs","_.defaults","minX","maxX","minY","maxY","marginX","marginY","getExtremes","p","nodeV","nodeW","p1","p2","util.intersectRect","b","l","r","orderShift","selfEdge","selfNode","obj","newAttrs"],"mappings":";;;AAIA,IAAIA,KAAY;AAmBhB,SAASC,EAASC,GAAO;AACvB,SAAO,OAAOA,KAAS,YACpBC,EAAaD,CAAK,KAAKE,GAAWF,CAAK,KAAKF;AACjD;ACjBA,SAASK,EAASC,GAAOC,GAAU;AAKjC,WAJIC,IAAQ,IACRC,IAASH,KAAS,OAAO,IAAIA,EAAM,QACnCI,IAAS,MAAMD,CAAM,GAElB,EAAED,IAAQC;AACf,IAAAC,EAAOF,CAAK,IAAID,EAASD,EAAME,CAAK,GAAGA,GAAOF,CAAK;AAErD,SAAOI;AACT;ACZA,IAAIC,KAAW,IAAI,GAGfC,KAAcC,IAASA,EAAO,YAAY,QAC1CC,KAAiBF,KAAcA,GAAY,WAAW;AAU1D,SAASG,GAAab,GAAO;AAE3B,MAAI,OAAOA,KAAS;AAClB,WAAOA;AAET,MAAIc,EAAQd,CAAK;AAEf,WAAOG,EAASH,GAAOa,EAAY,IAAI;AAEzC,MAAId,EAASC,CAAK;AAChB,WAAOY,KAAiBA,GAAe,KAAKZ,CAAK,IAAI;AAEvD,MAAIQ,IAAUR,IAAQ;AACtB,SAAQQ,KAAU,OAAQ,IAAIR,KAAU,CAACS,KAAY,OAAOD;AAC9D;ACjCA,IAAIO,KAAe;AAUnB,SAASC,GAAgBC,GAAQ;AAG/B,WAFIX,IAAQW,EAAO,QAEZX,OAAWS,GAAa,KAAKE,EAAO,OAAOX,CAAK,CAAC;AAAG;AAC3D,SAAOA;AACT;ACbA,IAAIY,KAAc;AASlB,SAASC,GAASF,GAAQ;AACxB,SAAOA,KACHA,EAAO,MAAM,GAAGD,GAAgBC,CAAM,IAAI,CAAC,EAAE,QAAQC,IAAa,EAAE;AAE1E;ACXA,IAAIE,KAAM,IAAI,GAGVC,KAAa,sBAGbC,KAAa,cAGbC,KAAY,eAGZC,KAAe;AAyBnB,SAASC,GAASzB,GAAO;AACvB,MAAI,OAAOA,KAAS;AAClB,WAAOA;AAET,MAAID,EAASC,CAAK;AAChB,WAAOoB;AAET,MAAIM,EAAS1B,CAAK,GAAG;AACnB,QAAI2B,IAAQ,OAAO3B,EAAM,WAAW,aAAaA,EAAM,QAAS,IAAGA;AACnE,IAAAA,IAAQ0B,EAASC,CAAK,IAAKA,IAAQ,KAAMA;AAAA,EAC1C;AACD,MAAI,OAAO3B,KAAS;AAClB,WAAOA,MAAU,IAAIA,IAAQ,CAACA;AAEhC,EAAAA,IAAQmB,GAASnB,CAAK;AACtB,MAAI4B,IAAWN,GAAW,KAAKtB,CAAK;AACpC,SAAQ4B,KAAYL,GAAU,KAAKvB,CAAK,IACpCwB,GAAaxB,EAAM,MAAM,CAAC,GAAG4B,IAAW,IAAI,CAAC,IAC5CP,GAAW,KAAKrB,CAAK,IAAIoB,KAAM,CAACpB;AACvC;AC1DA,IAAIS,KAAW,IAAI,GACfoB,KAAc;AAyBlB,SAASC,GAAS9B,GAAO;AACvB,MAAI,CAACA;AACH,WAAOA,MAAU,IAAIA,IAAQ;AAG/B,MADAA,IAAQyB,GAASzB,CAAK,GAClBA,MAAUS,MAAYT,MAAU,CAACS,IAAU;AAC7C,QAAIsB,IAAQ/B,IAAQ,IAAI,KAAK;AAC7B,WAAO+B,IAAOF;AAAA,EACf;AACD,SAAO7B,MAAUA,IAAQA,IAAQ;AACnC;ACXA,SAASgC,GAAUhC,GAAO;AACxB,MAAIQ,IAASsB,GAAS9B,CAAK,GACvBiC,IAAYzB,IAAS;AAEzB,SAAOA,MAAWA,IAAUyB,IAAYzB,IAASyB,IAAYzB,IAAU;AACzE;ACjBA,SAAS0B,EAASlC,GAAO;AACvB,SAAOA;AACT;ACfA,IAAImC,KAAe,OAAO,QAUtBC,KAAc,WAAW;AAC3B,WAASC,IAAS;AAAA,EAAE;AACpB,SAAO,SAASC,GAAO;AACrB,QAAI,CAACZ,EAASY,CAAK;AACjB,aAAO;AAET,QAAIH;AACF,aAAOA,GAAaG,CAAK;AAE3B,IAAAD,EAAO,YAAYC;AACnB,QAAI9B,IAAS,IAAI6B;AACjB,WAAAA,EAAO,YAAY,QACZ7B;AAAA,EACX;AACA,EAAC;AAED,MAAA+B,KAAeH;ACnBf,SAASI,GAAMC,GAAMC,GAASC,GAAM;AAClC,UAAQA,EAAK,QAAM;AAAA,IACjB,KAAK;AAAG,aAAOF,EAAK,KAAKC,CAAO;AAAA,IAChC,KAAK;AAAG,aAAOD,EAAK,KAAKC,GAASC,EAAK,CAAC,CAAC;AAAA,IACzC,KAAK;AAAG,aAAOF,EAAK,KAAKC,GAASC,EAAK,CAAC,GAAGA,EAAK,CAAC,CAAC;AAAA,IAClD,KAAK;AAAG,aAAOF,EAAK,KAAKC,GAASC,EAAK,CAAC,GAAGA,EAAK,CAAC,GAAGA,EAAK,CAAC,CAAC;AAAA,EAC5D;AACD,SAAOF,EAAK,MAAMC,GAASC,CAAI;AACjC;ACNA,SAASC,KAAO;AAEhB;ACNA,SAASC,GAAUC,GAAQ1C,GAAO;AAChC,MAAIE,IAAQ,IACRC,IAASuC,EAAO;AAGpB,OADA1C,MAAUA,IAAQ,MAAMG,CAAM,IACvB,EAAED,IAAQC;AACf,IAAAH,EAAME,CAAK,IAAIwC,EAAOxC,CAAK;AAE7B,SAAOF;AACT;AChBA,IAAI2C,KAAY,KACZC,KAAW,IAGXC,KAAY,KAAK;AAWrB,SAASC,GAAST,GAAM;AACtB,MAAIU,IAAQ,GACRC,IAAa;AAEjB,SAAO,WAAW;AAChB,QAAIC,IAAQJ,GAAW,GACnBK,IAAYN,MAAYK,IAAQD;AAGpC,QADAA,IAAaC,GACTC,IAAY;AACd,UAAI,EAAEH,KAASJ;AACb,eAAO,UAAU,CAAC;AAAA;AAGpB,MAAAI,IAAQ;AAEV,WAAOV,EAAK,MAAM,QAAW,SAAS;AAAA,EAC1C;AACA;ACfA,SAASc,EAASvD,GAAO;AACvB,SAAO,WAAW;AAChB,WAAOA;AAAA,EACX;AACA;ACrBA,IAAIwD,KAAkB,WAAW;AAC/B,MAAI;AACF,QAAIf,IAAOgB,GAAU,QAAQ,gBAAgB;AAC7C,WAAAhB,EAAK,CAAE,GAAE,IAAI,CAAA,CAAE,GACRA;AAAA,EACX,QAAI;AAAA,EAAY;AAChB,EAAC;AAED,MAAAiB,KAAeF;ACEf,IAAIG,KAAmBH,KAA4B,SAASf,GAAMxB,GAAQ;AACxE,SAAOuC,GAAef,GAAM,YAAY;AAAA,IACtC,cAAgB;AAAA,IAChB,YAAc;AAAA,IACd,OAASc,EAAStC,CAAM;AAAA,IACxB,UAAY;AAAA,EAChB,CAAG;AACH,IAPwCiB;AASxC,MAAA0B,KAAeD;ACVf,IAAIE,KAAcX,GAASS,EAAe;AAE1C,MAAAG,KAAeD;ACJf,SAASE,GAAU3D,GAAOC,GAAU;AAIlC,WAHIC,IAAQ,IACRC,IAASH,KAAS,OAAO,IAAIA,EAAM,QAEhC,EAAEE,IAAQC,KACXF,EAASD,EAAME,CAAK,GAAGA,GAAOF,CAAK,MAAM;AAA7C;AAIF,SAAOA;AACT;ACRA,SAAS4D,GAAc5D,GAAO6D,GAAWC,GAAWC,GAAW;AAI7D,WAHI5D,IAASH,EAAM,QACfE,IAAQ4D,KAAaC,IAAY,IAAI,KAEjCA,IAAY7D,MAAU,EAAEA,IAAQC;AACtC,QAAI0D,EAAU7D,EAAME,CAAK,GAAGA,GAAOF,CAAK;AACtC,aAAOE;AAGX,SAAO;AACT;ACdA,SAAS8D,GAAUpE,GAAO;AACxB,SAAOA,MAAUA;AACnB;ACCA,SAASqE,GAAcjE,GAAOJ,GAAOkE,GAAW;AAI9C,WAHI5D,IAAQ4D,IAAY,GACpB3D,IAASH,EAAM,QAEZ,EAAEE,IAAQC;AACf,QAAIH,EAAME,CAAK,MAAMN;AACnB,aAAOM;AAGX,SAAO;AACT;ACPA,SAASgE,GAAYlE,GAAOJ,GAAOkE,GAAW;AAC5C,SAAOlE,MAAUA,IACbqE,GAAcjE,GAAOJ,GAAOkE,CAAS,IACrCF,GAAc5D,GAAOgE,IAAWF,CAAS;AAC/C;ACNA,SAASK,GAAcnE,GAAOJ,GAAO;AACnC,MAAIO,IAASH,KAAS,OAAO,IAAIA,EAAM;AACvC,SAAO,CAAC,CAACG,KAAU+D,GAAYlE,GAAOJ,GAAO,CAAC,IAAI;AACpD;ACbA,IAAIwE,KAAmB,kBAGnBC,KAAW;AAUf,SAASC,GAAQ1E,GAAOO,GAAQ;AAC9B,MAAIoE,IAAO,OAAO3E;AAClB,SAAAO,IAASA,KAAiBiE,IAEnB,CAAC,CAACjE,MACNoE,KAAQ,YACNA,KAAQ,YAAYF,GAAS,KAAKzE,CAAK,MACrCA,IAAQ,MAAMA,IAAQ,KAAK,KAAKA,IAAQO;AACjD;ACXA,SAASqE,GAAgBvC,GAAQwC,GAAK7E,GAAO;AAC3C,EAAI6E,KAAO,eAAerB,KACxBA,GAAenB,GAAQwC,GAAK;AAAA,IAC1B,cAAgB;AAAA,IAChB,YAAc;AAAA,IACd,OAAS7E;AAAA,IACT,UAAY;AAAA,EAClB,CAAK,IAEDqC,EAAOwC,CAAG,IAAI7E;AAElB;AClBA,IAAI8E,KAAc,OAAO,WAGrBC,KAAiBD,GAAY;AAYjC,SAASE,GAAY3C,GAAQwC,GAAK7E,GAAO;AACvC,MAAIiF,IAAW5C,EAAOwC,CAAG;AACzB,GAAI,EAAEE,GAAe,KAAK1C,GAAQwC,CAAG,KAAKK,GAAGD,GAAUjF,CAAK,MACvDA,MAAU,UAAa,EAAE6E,KAAOxC,OACnCuC,GAAgBvC,GAAQwC,GAAK7E,CAAK;AAEtC;ACZA,SAASmF,GAAWrC,GAAQsC,GAAO/C,GAAQgD,GAAY;AACrD,MAAIC,IAAQ,CAACjD;AACb,EAAAA,MAAWA,IAAS,CAAA;AAKpB,WAHI/B,IAAQ,IACRC,IAAS6E,EAAM,QAEZ,EAAE9E,IAAQC,KAAQ;AACvB,QAAIsE,IAAMO,EAAM9E,CAAK,GAEjBiF,IAAWF,IACXA,EAAWhD,EAAOwC,CAAG,GAAG/B,EAAO+B,CAAG,GAAGA,GAAKxC,GAAQS,CAAM,IACxD;AAEJ,IAAIyC,MAAa,WACfA,IAAWzC,EAAO+B,CAAG,IAEnBS,IACFV,GAAgBvC,GAAQwC,GAAKU,CAAQ,IAErCP,GAAY3C,GAAQwC,GAAKU,CAAQ;AAAA,EAEpC;AACD,SAAOlD;AACT;AClCA,IAAImD,KAAY,KAAK;AAWrB,SAASC,GAAShD,GAAMiD,GAAOC,GAAW;AACxC,SAAAD,IAAQF,GAAUE,MAAU,SAAajD,EAAK,SAAS,IAAKiD,GAAO,CAAC,GAC7D,WAAW;AAMhB,aALI/C,IAAO,WACPrC,IAAQ,IACRC,IAASiF,GAAU7C,EAAK,SAAS+C,GAAO,CAAC,GACzCtF,IAAQ,MAAMG,CAAM,GAEjB,EAAED,IAAQC;AACf,MAAAH,EAAME,CAAK,IAAIqC,EAAK+C,IAAQpF,CAAK;AAEnC,IAAAA,IAAQ;AAER,aADIsF,IAAY,MAAMF,IAAQ,CAAC,GACxB,EAAEpF,IAAQoF;AACf,MAAAE,EAAUtF,CAAK,IAAIqC,EAAKrC,CAAK;AAE/B,WAAAsF,EAAUF,CAAK,IAAIC,EAAUvF,CAAK,GAC3BoC,GAAMC,GAAM,MAAMmD,CAAS;AAAA,EACtC;AACA;ACrBA,SAASC,GAASpD,GAAMiD,GAAO;AAC7B,SAAO7B,GAAY4B,GAAShD,GAAMiD,GAAOxD,CAAQ,GAAGO,IAAO,EAAE;AAC/D;ACCA,SAASqD,EAAe9F,GAAOM,GAAO+B,GAAQ;AAC5C,MAAI,CAACX,EAASW,CAAM;AAClB,WAAO;AAET,MAAIsC,IAAO,OAAOrE;AAClB,UAAIqE,KAAQ,WACHoB,EAAY1D,CAAM,KAAKqC,GAAQpE,GAAO+B,EAAO,MAAM,IACnDsC,KAAQ,YAAYrE,KAAS+B,KAE7B6C,GAAG7C,EAAO/B,CAAK,GAAGN,CAAK,IAEzB;AACT;ACjBA,SAASgG,GAAeC,GAAU;AAChC,SAAOJ,GAAS,SAASxD,GAAQ6D,GAAS;AACxC,QAAI5F,IAAQ,IACRC,IAAS2F,EAAQ,QACjBb,IAAa9E,IAAS,IAAI2F,EAAQ3F,IAAS,CAAC,IAAI,QAChD4F,IAAQ5F,IAAS,IAAI2F,EAAQ,CAAC,IAAI;AAWtC,SATAb,IAAcY,EAAS,SAAS,KAAK,OAAOZ,KAAc,cACrD9E,KAAU8E,KACX,QAEAc,KAASL,EAAeI,EAAQ,CAAC,GAAGA,EAAQ,CAAC,GAAGC,CAAK,MACvDd,IAAa9E,IAAS,IAAI,SAAY8E,GACtC9E,IAAS,IAEX8B,IAAS,OAAOA,CAAM,GACf,EAAE/B,IAAQC,KAAQ;AACvB,UAAIuC,IAASoD,EAAQ5F,CAAK;AAC1B,MAAIwC,KACFmD,EAAS5D,GAAQS,GAAQxC,GAAO+E,CAAU;AAAA,IAE7C;AACD,WAAOhD;AAAA,EACX,CAAG;AACH;ACzBA,SAAS+D,GAAU,GAAG/F,GAAU;AAI9B,WAHIC,IAAQ,IACRE,IAAS,MAAM,CAAC,GAEb,EAAEF,IAAQ;AACf,IAAAE,EAAOF,CAAK,IAAID,EAASC,CAAK;AAEhC,SAAOE;AACT;ACTA,IAAIsE,KAAc,OAAO,WAGrBC,KAAiBD,GAAY;AAUjC,SAASuB,GAAcrG,GAAOsG,GAAW;AACvC,MAAIC,IAAQzF,EAAQd,CAAK,GACrBwG,IAAQ,CAACD,KAASE,EAAYzG,CAAK,GACnC0G,IAAS,CAACH,KAAS,CAACC,KAASG,EAAS3G,CAAK,GAC3C4G,IAAS,CAACL,KAAS,CAACC,KAAS,CAACE,KAAUG,GAAa7G,CAAK,GAC1D8G,IAAcP,KAASC,KAASE,KAAUE,GAC1CpG,IAASsG,IAAcV,GAAUpG,EAAM,QAAQ,MAAM,IAAI,CAAE,GAC3DO,IAASC,EAAO;AAEpB,WAASqE,KAAO7E;AACd,KAAKsG,KAAavB,GAAe,KAAK/E,GAAO6E,CAAG,MAC5C,EAAEiC;AAAA,KAECjC,KAAO;AAAA,IAEN6B,MAAW7B,KAAO,YAAYA,KAAO;AAAA,IAErC+B,MAAW/B,KAAO,YAAYA,KAAO,gBAAgBA,KAAO;AAAA,IAE7DH,GAAQG,GAAKtE,CAAM,OAExBC,EAAO,KAAKqE,CAAG;AAGnB,SAAOrE;AACT;ACdA,SAASuG,EAAK1E,GAAQ;AACpB,SAAO0D,EAAY1D,CAAM,IAAIgE,GAAchE,CAAM,IAAI2E,GAAS3E,CAAM;AACtE;ACzBA,SAAS4E,GAAa5E,GAAQ;AAC5B,MAAI7B,IAAS,CAAA;AACb,MAAI6B,KAAU;AACZ,aAASwC,KAAO,OAAOxC,CAAM;AAC3B,MAAA7B,EAAO,KAAKqE,CAAG;AAGnB,SAAOrE;AACT;ACZA,IAAIsE,KAAc,OAAO,WAGrBC,KAAiBD,GAAY;AASjC,SAASoC,GAAW7E,GAAQ;AAC1B,MAAI,CAACX,EAASW,CAAM;AAClB,WAAO4E,GAAa5E,CAAM;AAE5B,MAAI8E,IAAUC,GAAY/E,CAAM,GAC5B7B,IAAS,CAAA;AAEb,WAASqE,KAAOxC;AACd,IAAMwC,KAAO,kBAAkBsC,KAAW,CAACpC,GAAe,KAAK1C,GAAQwC,CAAG,MACxErE,EAAO,KAAKqE,CAAG;AAGnB,SAAOrE;AACT;ACHA,SAAS6G,EAAOhF,GAAQ;AACtB,SAAO0D,EAAY1D,CAAM,IAAIgE,GAAchE,GAAQ,EAAI,IAAI6E,GAAW7E,CAAM;AAC9E;ACzBA,IAAIiF,KAAe,oDACfC,KAAgB;AAUpB,SAASC,GAAMxH,GAAOqC,GAAQ;AAC5B,MAAIvB,EAAQd,CAAK;AACf,WAAO;AAET,MAAI2E,IAAO,OAAO3E;AAClB,SAAI2E,KAAQ,YAAYA,KAAQ,YAAYA,KAAQ,aAChD3E,KAAS,QAAQD,EAASC,CAAK,IAC1B,KAEFuH,GAAc,KAAKvH,CAAK,KAAK,CAACsH,GAAa,KAAKtH,CAAK,KACzDqC,KAAU,QAAQrC,KAAS,OAAOqC,CAAM;AAC7C;ACvBA,IAAIoF,KAAmB;AAUvB,SAASC,GAAcjF,GAAM;AAC3B,MAAIjC,IAASmH,GAAQlF,GAAM,SAASoC,GAAK;AACvC,WAAI+C,EAAM,SAASH,MACjBG,EAAM,MAAK,GAEN/C;AAAA,EACX,CAAG,GAEG+C,IAAQpH,EAAO;AACnB,SAAOA;AACT;ACpBA,IAAIqH,KAAa,oGAGbC,KAAe,YASfC,KAAeL,GAAc,SAASzG,GAAQ;AAChD,MAAIT,IAAS,CAAA;AACb,SAAIS,EAAO,WAAW,CAAC,MAAM,MAC3BT,EAAO,KAAK,EAAE,GAEhBS,EAAO,QAAQ4G,IAAY,SAASG,GAAOC,GAAQC,GAAOC,GAAW;AACnE,IAAA3H,EAAO,KAAK0H,IAAQC,EAAU,QAAQL,IAAc,IAAI,IAAKG,KAAUD,CAAM;AAAA,EACjF,CAAG,GACMxH;AACT,CAAC;AAED,MAAA4H,KAAeL;ACHf,SAASM,GAASrI,GAAO;AACvB,SAAOA,KAAS,OAAO,KAAKa,GAAab,CAAK;AAChD;ACZA,SAASsI,GAAStI,GAAOqC,GAAQ;AAC/B,SAAIvB,EAAQd,CAAK,IACRA,IAEFwH,GAAMxH,GAAOqC,CAAM,IAAI,CAACrC,CAAK,IAAI+H,GAAaM,GAASrI,CAAK,CAAC;AACtE;ACfA,IAAIS,KAAW,IAAI;AASnB,SAAS8H,GAAMvI,GAAO;AACpB,MAAI,OAAOA,KAAS,YAAYD,EAASC,CAAK;AAC5C,WAAOA;AAET,MAAIQ,IAAUR,IAAQ;AACtB,SAAQQ,KAAU,OAAQ,IAAIR,KAAU,CAACS,KAAY,OAAOD;AAC9D;ACPA,SAASgI,GAAQnG,GAAQoG,GAAM;AAC7B,EAAAA,IAAOH,GAASG,GAAMpG,CAAM;AAK5B,WAHI/B,IAAQ,GACRC,IAASkI,EAAK,QAEXpG,KAAU,QAAQ/B,IAAQC;AAC/B,IAAA8B,IAASA,EAAOkG,GAAME,EAAKnI,GAAO,CAAC,CAAC;AAEtC,SAAQA,KAASA,KAASC,IAAU8B,IAAS;AAC/C;ACMA,SAASqG,GAAIrG,GAAQoG,GAAME,GAAc;AACvC,MAAInI,IAAS6B,KAAU,OAAO,SAAYmG,GAAQnG,GAAQoG,CAAI;AAC9D,SAAOjI,MAAW,SAAYmI,IAAenI;AAC/C;ACtBA,SAASoI,GAAUxI,GAAOyI,GAAQ;AAKhC,WAJIvI,IAAQ,IACRC,IAASsI,EAAO,QAChBC,IAAS1I,EAAM,QAEZ,EAAEE,IAAQC;AACf,IAAAH,EAAM0I,IAASxI,CAAK,IAAIuI,EAAOvI,CAAK;AAEtC,SAAOF;AACT;ACZA,IAAI2I,KAAmBpI,IAASA,EAAO,qBAAqB;AAS5D,SAASqI,GAAchJ,GAAO;AAC5B,SAAOc,EAAQd,CAAK,KAAKyG,EAAYzG,CAAK,KACxC,CAAC,EAAE+I,MAAoB/I,KAASA,EAAM+I,EAAgB;AAC1D;ACHA,SAASE,GAAY7I,GAAO8I,GAAOjF,GAAWkF,GAAU3I,GAAQ;AAC9D,MAAIF,IAAQ,IACRC,IAASH,EAAM;AAKnB,OAHA6D,MAAcA,IAAY+E,KAC1BxI,MAAWA,IAAS,CAAA,IAEb,EAAEF,IAAQC,KAAQ;AACvB,QAAIP,IAAQI,EAAME,CAAK;AACvB,IAAI4I,IAAQ,KAAKjF,EAAUjE,CAAK,IAC1BkJ,IAAQ,IAEVD,GAAYjJ,GAAOkJ,IAAQ,GAAGjF,GAAWkF,GAAU3I,CAAM,IAEzDoI,GAAUpI,GAAQR,CAAK,IAEfmJ,MACV3I,EAAOA,EAAO,MAAM,IAAIR;AAAA,EAE3B;AACD,SAAOQ;AACT;ACnBA,SAAS4I,EAAQhJ,GAAO;AACtB,MAAIG,IAASH,KAAS,OAAO,IAAIA,EAAM;AACvC,SAAOG,IAAS0I,GAAY7I,GAAO,CAAC,IAAI,CAAA;AAC1C;ACRA,SAASiJ,GAAS5G,GAAM;AACtB,SAAOoB,GAAY4B,GAAShD,GAAM,QAAW2G,CAAO,GAAG3G,IAAO,EAAE;AAClE;ACDA,SAAS6G,GAAYlJ,GAAOC,GAAUkJ,GAAaC,GAAW;AAC5D,MAAIlJ,IAAQ,IACRC,IAASH,KAAS,OAAO,IAAIA,EAAM;AAKvC,OAHIoJ,KAAajJ,MACfgJ,IAAcnJ,EAAM,EAAEE,CAAK,IAEtB,EAAEA,IAAQC;AACf,IAAAgJ,IAAclJ,EAASkJ,GAAanJ,EAAME,CAAK,GAAGA,GAAOF,CAAK;AAEhE,SAAOmJ;AACT;ACdA,SAASE,KAAa;AACpB,OAAK,WAAW,IAAIC,MACpB,KAAK,OAAO;AACd;ACHA,SAASC,GAAY9E,GAAK;AACxB,MAAI+E,IAAO,KAAK,UACZpJ,IAASoJ,EAAK,OAAU/E,CAAG;AAE/B,cAAK,OAAO+E,EAAK,MACVpJ;AACT;ACNA,SAASqJ,GAAShF,GAAK;AACrB,SAAO,KAAK,SAAS,IAAIA,CAAG;AAC9B;ACFA,SAASiF,GAASjF,GAAK;AACrB,SAAO,KAAK,SAAS,IAAIA,CAAG;AAC9B;ACNA,IAAIkF,KAAmB;AAYvB,SAASC,GAASnF,GAAK7E,GAAO;AAC5B,MAAI4J,IAAO,KAAK;AAChB,MAAIA,aAAgBF,IAAW;AAC7B,QAAIO,IAAQL,EAAK;AACjB,QAAI,CAACM,MAAQD,EAAM,SAASF,KAAmB;AAC7C,aAAAE,EAAM,KAAK,CAACpF,GAAK7E,CAAK,CAAC,GACvB,KAAK,OAAO,EAAE4J,EAAK,MACZ;AAET,IAAAA,IAAO,KAAK,WAAW,IAAIO,GAASF,CAAK;AAAA,EAC1C;AACD,SAAAL,EAAK,IAAI/E,GAAK7E,CAAK,GACnB,KAAK,OAAO4J,EAAK,MACV;AACT;ACjBA,SAASQ,EAAMC,GAAS;AACtB,MAAIT,IAAO,KAAK,WAAW,IAAIF,GAAUW,CAAO;AAChD,OAAK,OAAOT,EAAK;AACnB;AAGAQ,EAAM,UAAU,QAAQX;AACxBW,EAAM,UAAU,SAAYT;AAC5BS,EAAM,UAAU,MAAMP;AACtBO,EAAM,UAAU,MAAMN;AACtBM,EAAM,UAAU,MAAMJ;ACZtB,SAASM,GAAWjI,GAAQS,GAAQ;AAClC,SAAOT,KAAU8C,GAAWrC,GAAQiE,EAAKjE,CAAM,GAAGT,CAAM;AAC1D;ACFA,SAASkI,GAAalI,GAAQS,GAAQ;AACpC,SAAOT,KAAU8C,GAAWrC,GAAQuE,EAAOvE,CAAM,GAAGT,CAAM;AAC5D;ACXA,IAAImI,KAAc,OAAO,WAAW,YAAY,WAAW,CAAC,QAAQ,YAAY,SAG5EC,KAAaD,MAAe,OAAO,UAAU,YAAY,UAAU,CAAC,OAAO,YAAY,QAGvFE,KAAgBD,MAAcA,GAAW,YAAYD,IAGrDG,KAASD,KAAgBE,GAAK,SAAS,QACvCC,KAAcF,KAASA,GAAO,cAAc;AAUhD,SAASG,GAAYC,GAAQC,GAAQ;AACnC,MAAIA;AACF,WAAOD,EAAO;AAEhB,MAAIxK,IAASwK,EAAO,QAChBvK,IAASqK,KAAcA,GAAYtK,CAAM,IAAI,IAAIwK,EAAO,YAAYxK,CAAM;AAE9E,SAAAwK,EAAO,KAAKvK,CAAM,GACXA;AACT;ACvBA,SAASyK,GAAY7K,GAAO6D,GAAW;AAMrC,WALI3D,IAAQ,IACRC,IAASH,KAAS,OAAO,IAAIA,EAAM,QACnC8K,IAAW,GACX1K,IAAS,CAAA,GAEN,EAAEF,IAAQC,KAAQ;AACvB,QAAIP,IAAQI,EAAME,CAAK;AACvB,IAAI2D,EAAUjE,GAAOM,GAAOF,CAAK,MAC/BI,EAAO0K,GAAU,IAAIlL;AAAA,EAExB;AACD,SAAOQ;AACT;ACJA,SAAS2K,KAAY;AACnB,SAAO;AACT;AChBA,IAAIrG,KAAc,OAAO,WAGrBsG,KAAuBtG,GAAY,sBAGnCuG,KAAmB,OAAO,uBAS1BC,KAAcD,KAA+B,SAAShJ,GAAQ;AAChE,SAAIA,KAAU,OACL,MAETA,IAAS,OAAOA,CAAM,GACf4I,GAAYI,GAAiBhJ,CAAM,GAAG,SAASkJ,GAAQ;AAC5D,WAAOH,GAAqB,KAAK/I,GAAQkJ,CAAM;AAAA,EACnD,CAAG;AACH,IARqCJ;AAUrC,MAAAK,KAAeF;AClBf,SAASG,GAAY3I,GAAQT,GAAQ;AACnC,SAAO8C,GAAWrC,GAAQwI,GAAWxI,CAAM,GAAGT,CAAM;AACtD;ACPA,IAAIgJ,KAAmB,OAAO,uBAS1BK,KAAgBL,KAA+B,SAAShJ,GAAQ;AAElE,WADI7B,IAAS,CAAA,GACN6B;AACL,IAAAuG,GAAUpI,GAAQ8K,GAAWjJ,CAAM,CAAC,GACpCA,IAASsJ,GAAatJ,CAAM;AAE9B,SAAO7B;AACT,IAPuC2K;AASvC,MAAAS,KAAeF;ACbf,SAASG,GAAc/I,GAAQT,GAAQ;AACrC,SAAO8C,GAAWrC,GAAQ4I,GAAa5I,CAAM,GAAGT,CAAM;AACxD;ACCA,SAASyJ,GAAezJ,GAAQ0J,GAAUC,GAAa;AACrD,MAAIxL,IAASuL,EAAS1J,CAAM;AAC5B,SAAOvB,EAAQuB,CAAM,IAAI7B,IAASoI,GAAUpI,GAAQwL,EAAY3J,CAAM,CAAC;AACzE;ACNA,SAAS4J,GAAW5J,GAAQ;AAC1B,SAAOyJ,GAAezJ,GAAQ0E,GAAMuE,EAAU;AAChD;ACDA,SAASY,GAAa7J,GAAQ;AAC5B,SAAOyJ,GAAezJ,GAAQgF,GAAQqE,EAAY;AACpD;ACbA,IAAI5G,KAAc,OAAO,WAGrBC,KAAiBD,GAAY;AASjC,SAASqH,GAAe/L,GAAO;AAC7B,MAAIG,IAASH,EAAM,QACfI,IAAS,IAAIJ,EAAM,YAAYG,CAAM;AAGzC,SAAIA,KAAU,OAAOH,EAAM,CAAC,KAAK,YAAY2E,GAAe,KAAK3E,GAAO,OAAO,MAC7EI,EAAO,QAAQJ,EAAM,OACrBI,EAAO,QAAQJ,EAAM,QAEhBI;AACT;ACpBA,IAAI4L,KAAaxB,GAAK;AAEtB,MAAAyB,KAAeD;ACIf,SAASE,GAAiBC,GAAa;AACrC,MAAI/L,IAAS,IAAI+L,EAAY,YAAYA,EAAY,UAAU;AAC/D,aAAIH,GAAW5L,CAAM,EAAE,IAAI,IAAI4L,GAAWG,CAAW,CAAC,GAC/C/L;AACT;ACHA,SAASgM,GAAcC,GAAUzB,GAAQ;AACvC,MAAID,IAASC,IAASsB,GAAiBG,EAAS,MAAM,IAAIA,EAAS;AACnE,SAAO,IAAIA,EAAS,YAAY1B,GAAQ0B,EAAS,YAAYA,EAAS,UAAU;AAClF;ACZA,IAAIC,KAAU;AASd,SAASC,GAAYC,GAAQ;AAC3B,MAAIpM,IAAS,IAAIoM,EAAO,YAAYA,EAAO,QAAQF,GAAQ,KAAKE,CAAM,CAAC;AACvE,SAAApM,EAAO,YAAYoM,EAAO,WACnBpM;AACT;ACXA,IAAIE,KAAcC,IAASA,EAAO,YAAY,QAC1CkM,KAAgBnM,KAAcA,GAAY,UAAU;AASxD,SAASoM,GAAYvB,GAAQ;AAC3B,SAAOsB,KAAgB,OAAOA,GAAc,KAAKtB,CAAM,CAAC,IAAI;AAC9D;ACLA,SAASwB,GAAgBC,GAAYhC,GAAQ;AAC3C,MAAID,IAASC,IAASsB,GAAiBU,EAAW,MAAM,IAAIA,EAAW;AACvE,SAAO,IAAIA,EAAW,YAAYjC,GAAQiC,EAAW,YAAYA,EAAW,MAAM;AACpF;ACNA,IAAIC,KAAU,oBACVC,KAAU,iBACVC,KAAS,gBACTC,KAAY,mBACZC,KAAY,mBACZC,KAAS,gBACTC,KAAY,mBACZzN,KAAY,mBAEZ0N,KAAiB,wBACjBC,KAAc,qBACdC,KAAa,yBACbC,KAAa,yBACbC,KAAU,sBACVC,KAAW,uBACXC,KAAW,uBACXC,KAAW,uBACXC,KAAkB,8BAClBC,KAAY,wBACZC,KAAY;AAchB,SAASC,GAAe9L,GAAQ+L,GAAKpD,GAAQ;AAC3C,MAAIqD,IAAOhM,EAAO;AAClB,UAAQ+L,GAAG;AAAA,IACT,KAAKZ;AACH,aAAOlB,GAAiBjK,CAAM;AAAA,IAEhC,KAAK4K;AAAAA,IACL,KAAKC;AACH,aAAO,IAAImB,EAAK,CAAChM,CAAM;AAAA,IAEzB,KAAKoL;AACH,aAAOjB,GAAcnK,GAAQ2I,CAAM;AAAA,IAErC,KAAK0C;AAAAA,IAAY,KAAKC;AAAAA,IACtB,KAAKC;AAAAA,IAAS,KAAKC;AAAAA,IAAU,KAAKC;AAAAA,IAClC,KAAKC;AAAAA,IAAU,KAAKC;AAAAA,IAAiB,KAAKC;AAAAA,IAAW,KAAKC;AACxD,aAAOnB,GAAgB1K,GAAQ2I,CAAM;AAAA,IAEvC,KAAKmC;AACH,aAAO,IAAIkB;AAAA,IAEb,KAAKjB;AAAAA,IACL,KAAKG;AACH,aAAO,IAAIc,EAAKhM,CAAM;AAAA,IAExB,KAAKgL;AACH,aAAOV,GAAYtK,CAAM;AAAA,IAE3B,KAAKiL;AACH,aAAO,IAAIe;AAAA,IAEb,KAAKvO;AACH,aAAOgN,GAAYzK,CAAM;AAAA,EAC5B;AACH;AC/DA,SAASiM,GAAgBjM,GAAQ;AAC/B,SAAQ,OAAOA,EAAO,eAAe,cAAc,CAAC+E,GAAY/E,CAAM,IAClED,GAAWuJ,GAAatJ,CAAM,CAAC,IAC/B;AACN;ACXA,IAAI8K,KAAS;AASb,SAASoB,GAAUvO,GAAO;AACxB,SAAOC,EAAaD,CAAK,KAAKwO,EAAOxO,CAAK,KAAKmN;AACjD;ACVA,IAAIsB,KAAYC,MAAYA,GAAS,OAmBjCC,KAAQF,KAAYG,GAAUH,EAAS,IAAIF;AAE/C,MAAAM,KAAeF;ACtBf,IAAIrB,KAAS;AASb,SAASwB,GAAU9O,GAAO;AACxB,SAAOC,EAAaD,CAAK,KAAKwO,EAAOxO,CAAK,KAAKsN;AACjD;ACVA,IAAIyB,KAAYL,MAAYA,GAAS,OAmBjCM,KAAQD,KAAYH,GAAUG,EAAS,IAAID;AAE/C,MAAAG,KAAeD;ACFf,IAAIE,KAAkB,GAClBC,KAAkB,GAClBC,KAAqB,GAGrBC,KAAU,sBACVC,KAAW,kBACXrC,KAAU,oBACVC,KAAU,iBACVqC,KAAW,kBACXC,KAAU,qBACVC,KAAS,8BACTtC,KAAS,gBACTC,KAAY,mBACZsC,KAAY,mBACZrC,KAAY,mBACZC,KAAS,gBACTC,KAAY,mBACZzN,KAAY,mBACZ6P,KAAa,oBAEbnC,KAAiB,wBACjBC,KAAc,qBACdC,KAAa,yBACbC,KAAa,yBACbC,KAAU,sBACVC,KAAW,uBACXC,KAAW,uBACXC,KAAW,uBACXC,KAAkB,8BAClBC,KAAY,wBACZC,KAAY,wBAGZ0B,IAAgB,CAAA;AACpBA,EAAcP,EAAO,IAAIO,EAAcN,EAAQ,IAC/CM,EAAcpC,EAAc,IAAIoC,EAAcnC,EAAW,IACzDmC,EAAc3C,EAAO,IAAI2C,EAAc1C,EAAO,IAC9C0C,EAAclC,EAAU,IAAIkC,EAAcjC,EAAU,IACpDiC,EAAchC,EAAO,IAAIgC,EAAc/B,EAAQ,IAC/C+B,EAAc9B,EAAQ,IAAI8B,EAAczC,EAAM,IAC9CyC,EAAcxC,EAAS,IAAIwC,EAAcF,EAAS,IAClDE,EAAcvC,EAAS,IAAIuC,EAActC,EAAM,IAC/CsC,EAAcrC,EAAS,IAAIqC,EAAc9P,EAAS,IAClD8P,EAAc7B,EAAQ,IAAI6B,EAAc5B,EAAe,IACvD4B,EAAc3B,EAAS,IAAI2B,EAAc1B,EAAS,IAAI;AACtD0B,EAAcL,EAAQ,IAAIK,EAAcJ,EAAO,IAC/CI,EAAcD,EAAU,IAAI;AAkB5B,SAASE,GAAU7P,GAAO8P,GAASzK,GAAYR,GAAKxC,GAAQ0N,GAAO;AACjE,MAAIvP,GACAwK,IAAS8E,IAAUZ,IACnBc,IAASF,IAAUX,IACnBc,IAASH,IAAUV;AAKvB,MAHI/J,MACF7E,IAAS6B,IAASgD,EAAWrF,GAAO6E,GAAKxC,GAAQ0N,CAAK,IAAI1K,EAAWrF,CAAK,IAExEQ,MAAW;AACb,WAAOA;AAET,MAAI,CAACkB,EAAS1B,CAAK;AACjB,WAAOA;AAET,MAAIuG,IAAQzF,EAAQd,CAAK;AACzB,MAAIuG;AAEF,QADA/F,IAAS2L,GAAenM,CAAK,GACzB,CAACgL;AACH,aAAOnI,GAAU7C,GAAOQ,CAAM;AAAA,SAE3B;AACL,QAAI4N,IAAMI,EAAOxO,CAAK,GAClBkQ,IAAS9B,KAAOoB,MAAWpB,KAAOqB;AAEtC,QAAI9I,EAAS3G,CAAK;AAChB,aAAO8K,GAAY9K,GAAOgL,CAAM;AAElC,QAAIoD,KAAOsB,MAAatB,KAAOiB,MAAYa,KAAU,CAAC7N;AAEpD,UADA7B,IAAUwP,KAAUE,IAAU,CAAA,IAAK5B,GAAgBtO,CAAK,GACpD,CAACgL;AACH,eAAOgF,IACHnE,GAAc7L,GAAOuK,GAAa/J,GAAQR,CAAK,CAAC,IAChDyL,GAAYzL,GAAOsK,GAAW9J,GAAQR,CAAK,CAAC;AAAA,WAE7C;AACL,UAAI,CAAC4P,EAAcxB,CAAG;AACpB,eAAO/L,IAASrC,IAAQ;AAE1B,MAAAQ,IAAS2N,GAAenO,GAAOoO,GAAKpD,CAAM;AAAA,IAC3C;AAAA,EACF;AAED,EAAA+E,MAAUA,IAAQ,IAAI3F;AACtB,MAAI+F,IAAUJ,EAAM,IAAI/P,CAAK;AAC7B,MAAImQ;AACF,WAAOA;AAET,EAAAJ,EAAM,IAAI/P,GAAOQ,CAAM,GAEnBwO,GAAMhP,CAAK,IACbA,EAAM,QAAQ,SAASoQ,GAAU;AAC/B,IAAA5P,EAAO,IAAIqP,GAAUO,GAAUN,GAASzK,GAAY+K,GAAUpQ,GAAO+P,CAAK,CAAC;AAAA,EACjF,CAAK,IACQpB,GAAM3O,CAAK,KACpBA,EAAM,QAAQ,SAASoQ,GAAUvL,GAAK;AACpC,IAAArE,EAAO,IAAIqE,GAAKgL,GAAUO,GAAUN,GAASzK,GAAYR,GAAK7E,GAAO+P,CAAK,CAAC;AAAA,EACjF,CAAK;AAGH,MAAIhE,IAAWkE,IACVD,IAAS9D,KAAeD,KACxB+D,IAAS3I,IAASN,GAEnB3B,IAAQmB,IAAQ,SAAYwF,EAAS/L,CAAK;AAC9C,SAAA+D,GAAUqB,KAASpF,GAAO,SAASoQ,GAAUvL,GAAK;AAChD,IAAIO,MACFP,IAAMuL,GACNA,IAAWpQ,EAAM6E,CAAG,IAGtBG,GAAYxE,GAAQqE,GAAKgL,GAAUO,GAAUN,GAASzK,GAAYR,GAAK7E,GAAO+P,CAAK,CAAC;AAAA,EACxF,CAAG,GACMvP;AACT;AChKA,IAAI0O,KAAkB,GAClBE,KAAqB;AAoBzB,SAASiB,GAAUrQ,GAAO;AACxB,SAAO6P,GAAU7P,GAAOkP,KAAkBE,EAAkB;AAC9D;ACzBA,IAAIkB,KAAiB;AAYrB,SAASC,GAAYvQ,GAAO;AAC1B,cAAK,SAAS,IAAIA,GAAOsQ,EAAc,GAChC;AACT;ACPA,SAASE,GAAYxQ,GAAO;AAC1B,SAAO,KAAK,SAAS,IAAIA,CAAK;AAChC;ACCA,SAASyQ,EAAS5H,GAAQ;AACxB,MAAIvI,IAAQ,IACRC,IAASsI,KAAU,OAAO,IAAIA,EAAO;AAGzC,OADA,KAAK,WAAW,IAAIsB,MACb,EAAE7J,IAAQC;AACf,SAAK,IAAIsI,EAAOvI,CAAK,CAAC;AAE1B;AAGAmQ,EAAS,UAAU,MAAMA,EAAS,UAAU,OAAOF;AACnDE,EAAS,UAAU,MAAMD;ACdzB,SAASE,GAAUtQ,GAAO6D,GAAW;AAInC,WAHI3D,IAAQ,IACRC,IAASH,KAAS,OAAO,IAAIA,EAAM,QAEhC,EAAEE,IAAQC;AACf,QAAI0D,EAAU7D,EAAME,CAAK,GAAGA,GAAOF,CAAK;AACtC,aAAO;AAGX,SAAO;AACT;ACZA,SAASuQ,GAAS/I,GAAO/C,GAAK;AAC5B,SAAO+C,EAAM,IAAI/C,CAAG;AACtB;ACLA,IAAI+L,KAAuB,GACvBC,KAAyB;AAe7B,SAASC,GAAY1Q,GAAOuB,GAAOmO,GAASzK,GAAY0L,GAAWhB,GAAO;AACxE,MAAIiB,IAAYlB,IAAUc,IACtBK,IAAY7Q,EAAM,QAClB8Q,IAAYvP,EAAM;AAEtB,MAAIsP,KAAaC,KAAa,EAAEF,KAAaE,IAAYD;AACvD,WAAO;AAGT,MAAIE,IAAapB,EAAM,IAAI3P,CAAK,GAC5BgR,IAAarB,EAAM,IAAIpO,CAAK;AAChC,MAAIwP,KAAcC;AAChB,WAAOD,KAAcxP,KAASyP,KAAchR;AAE9C,MAAIE,IAAQ,IACRE,IAAS,IACT6Q,IAAQvB,IAAUe,KAA0B,IAAIJ,MAAW;AAM/D,OAJAV,EAAM,IAAI3P,GAAOuB,CAAK,GACtBoO,EAAM,IAAIpO,GAAOvB,CAAK,GAGf,EAAEE,IAAQ2Q,KAAW;AAC1B,QAAIK,IAAWlR,EAAME,CAAK,GACtBiR,IAAW5P,EAAMrB,CAAK;AAE1B,QAAI+E;AACF,UAAImM,IAAWR,IACX3L,EAAWkM,GAAUD,GAAUhR,GAAOqB,GAAOvB,GAAO2P,CAAK,IACzD1K,EAAWiM,GAAUC,GAAUjR,GAAOF,GAAOuB,GAAOoO,CAAK;AAE/D,QAAIyB,MAAa,QAAW;AAC1B,UAAIA;AACF;AAEF,MAAAhR,IAAS;AACT;AAAA,IACD;AAED,QAAI6Q;AACF,UAAI,CAACX,GAAU/O,GAAO,SAAS4P,GAAUE,GAAU;AAC7C,YAAI,CAACd,GAASU,GAAMI,CAAQ,MACvBH,MAAaC,KAAYR,EAAUO,GAAUC,GAAUzB,GAASzK,GAAY0K,CAAK;AACpF,iBAAOsB,EAAK,KAAKI,CAAQ;AAAA,MAEvC,CAAW,GAAG;AACN,QAAAjR,IAAS;AACT;AAAA,MACD;AAAA,eACQ,EACL8Q,MAAaC,KACXR,EAAUO,GAAUC,GAAUzB,GAASzK,GAAY0K,CAAK,IACzD;AACL,MAAAvP,IAAS;AACT;AAAA,IACD;AAAA,EACF;AACD,SAAAuP,EAAM,OAAU3P,CAAK,GACrB2P,EAAM,OAAUpO,CAAK,GACdnB;AACT;AC1EA,SAASkR,GAAWC,GAAK;AACvB,MAAIrR,IAAQ,IACRE,IAAS,MAAMmR,EAAI,IAAI;AAE3B,SAAAA,EAAI,QAAQ,SAAS3R,GAAO6E,GAAK;AAC/B,IAAArE,EAAO,EAAEF,CAAK,IAAI,CAACuE,GAAK7E,CAAK;AAAA,EACjC,CAAG,GACMQ;AACT;ACRA,SAASoR,GAAWC,GAAK;AACvB,MAAIvR,IAAQ,IACRE,IAAS,MAAMqR,EAAI,IAAI;AAE3B,SAAAA,EAAI,QAAQ,SAAS7R,GAAO;AAC1B,IAAAQ,EAAO,EAAEF,CAAK,IAAIN;AAAA,EACtB,CAAG,GACMQ;AACT;ACPA,IAAIoQ,KAAuB,GACvBC,KAAyB,GAGzB5D,KAAU,oBACVC,KAAU,iBACVqC,KAAW,kBACXpC,KAAS,gBACTC,KAAY,mBACZC,KAAY,mBACZC,KAAS,gBACTC,KAAY,mBACZzN,KAAY,mBAEZ0N,KAAiB,wBACjBC,KAAc,qBAGd/M,KAAcC,IAASA,EAAO,YAAY,QAC1CkM,KAAgBnM,KAAcA,GAAY,UAAU;AAmBxD,SAASoR,GAAWzP,GAAQV,GAAOyM,GAAK0B,GAASzK,GAAY0L,GAAWhB,GAAO;AAC7E,UAAQ3B,GAAG;AAAA,IACT,KAAKX;AACH,UAAKpL,EAAO,cAAcV,EAAM,cAC3BU,EAAO,cAAcV,EAAM;AAC9B,eAAO;AAET,MAAAU,IAASA,EAAO,QAChBV,IAAQA,EAAM;AAAA,IAEhB,KAAK6L;AACH,aAAK,EAAAnL,EAAO,cAAcV,EAAM,cAC5B,CAACoP,EAAU,IAAI3E,GAAW/J,CAAM,GAAG,IAAI+J,GAAWzK,CAAK,CAAC;AAAA,IAK9D,KAAKsL;AAAA,IACL,KAAKC;AAAA,IACL,KAAKE;AAGH,aAAOlI,GAAG,CAAC7C,GAAQ,CAACV,CAAK;AAAA,IAE3B,KAAK4N;AACH,aAAOlN,EAAO,QAAQV,EAAM,QAAQU,EAAO,WAAWV,EAAM;AAAA,IAE9D,KAAK0L;AAAA,IACL,KAAKE;AAIH,aAAOlL,KAAWV,IAAQ;AAAA,IAE5B,KAAKwL;AACH,UAAI4E,IAAUL;AAAA,IAEhB,KAAKpE;AACH,UAAI0D,IAAYlB,IAAUc;AAG1B,UAFAmB,MAAYA,IAAUH,KAElBvP,EAAO,QAAQV,EAAM,QAAQ,CAACqP;AAChC,eAAO;AAGT,UAAIb,IAAUJ,EAAM,IAAI1N,CAAM;AAC9B,UAAI8N;AACF,eAAOA,KAAWxO;AAEpB,MAAAmO,KAAWe,IAGXd,EAAM,IAAI1N,GAAQV,CAAK;AACvB,UAAInB,IAASsQ,GAAYiB,EAAQ1P,CAAM,GAAG0P,EAAQpQ,CAAK,GAAGmO,GAASzK,GAAY0L,GAAWhB,CAAK;AAC/F,aAAAA,EAAM,OAAU1N,CAAM,GACf7B;AAAA,IAET,KAAKV;AACH,UAAI+M;AACF,eAAOA,GAAc,KAAKxK,CAAM,KAAKwK,GAAc,KAAKlL,CAAK;AAAA,EAElE;AACD,SAAO;AACT;AC1GA,IAAIiP,KAAuB,GAGvB9L,KAAc,OAAO,WAGrBC,KAAiBD,GAAY;AAejC,SAASkN,GAAa3P,GAAQV,GAAOmO,GAASzK,GAAY0L,GAAWhB,GAAO;AAC1E,MAAIiB,IAAYlB,IAAUc,IACtBqB,IAAWhG,GAAW5J,CAAM,GAC5B6P,IAAYD,EAAS,QACrBE,IAAWlG,GAAWtK,CAAK,GAC3BuP,IAAYiB,EAAS;AAEzB,MAAID,KAAahB,KAAa,CAACF;AAC7B,WAAO;AAGT,WADI1Q,IAAQ4R,GACL5R,OAAS;AACd,QAAIuE,IAAMoN,EAAS3R,CAAK;AACxB,QAAI,EAAE0Q,IAAYnM,KAAOlD,IAAQoD,GAAe,KAAKpD,GAAOkD,CAAG;AAC7D,aAAO;AAAA,EAEV;AAED,MAAIuN,IAAarC,EAAM,IAAI1N,CAAM,GAC7B+O,IAAarB,EAAM,IAAIpO,CAAK;AAChC,MAAIyQ,KAAchB;AAChB,WAAOgB,KAAczQ,KAASyP,KAAc/O;AAE9C,MAAI7B,IAAS;AACb,EAAAuP,EAAM,IAAI1N,GAAQV,CAAK,GACvBoO,EAAM,IAAIpO,GAAOU,CAAM;AAGvB,WADIgQ,IAAWrB,GACR,EAAE1Q,IAAQ4R,KAAW;AAC1B,IAAArN,IAAMoN,EAAS3R,CAAK;AACpB,QAAI2E,IAAW5C,EAAOwC,CAAG,GACrB0M,IAAW5P,EAAMkD,CAAG;AAExB,QAAIQ;AACF,UAAImM,KAAWR,IACX3L,EAAWkM,GAAUtM,GAAUJ,GAAKlD,GAAOU,GAAQ0N,CAAK,IACxD1K,EAAWJ,GAAUsM,GAAU1M,GAAKxC,GAAQV,GAAOoO,CAAK;AAG9D,QAAI,EAAEyB,OAAa,SACVvM,MAAasM,KAAYR,EAAU9L,GAAUsM,GAAUzB,GAASzK,GAAY0K,CAAK,IAClFyB,KACD;AACL,MAAAhR,IAAS;AACT;AAAA,IACD;AACD,IAAA6R,MAAaA,IAAWxN,KAAO;AAAA,EAChC;AACD,MAAIrE,KAAU,CAAC6R,GAAU;AACvB,QAAIC,KAAUjQ,EAAO,aACjBkQ,KAAU5Q,EAAM;AAGpB,IAAI2Q,MAAWC,MACV,iBAAiBlQ,KAAU,iBAAiBV,KAC7C,EAAE,OAAO2Q,MAAW,cAAcA,cAAmBA,MACnD,OAAOC,MAAW,cAAcA,cAAmBA,QACvD/R,IAAS;AAAA,EAEZ;AACD,SAAAuP,EAAM,OAAU1N,CAAM,GACtB0N,EAAM,OAAUpO,CAAK,GACdnB;AACT;AC7EA,IAAIoQ,KAAuB,GAGvBvB,KAAU,sBACVC,KAAW,kBACXI,KAAY,mBAGZ5K,KAAc,OAAO,WAGrBC,KAAiBD,GAAY;AAgBjC,SAAS0N,GAAgBnQ,GAAQV,GAAOmO,GAASzK,GAAY0L,GAAWhB,GAAO;AAC7E,MAAI0C,IAAW3R,EAAQuB,CAAM,GACzBqQ,IAAW5R,EAAQa,CAAK,GACxBgR,IAASF,IAAWnD,KAAWd,EAAOnM,CAAM,GAC5CuQ,IAASF,IAAWpD,KAAWd,EAAO7M,CAAK;AAE/C,EAAAgR,IAASA,KAAUtD,KAAUK,KAAYiD,GACzCC,IAASA,KAAUvD,KAAUK,KAAYkD;AAEzC,MAAIC,IAAWF,KAAUjD,IACrBoD,IAAWF,KAAUlD,IACrBqD,IAAYJ,KAAUC;AAE1B,MAAIG,KAAapM,EAAStE,CAAM,GAAG;AACjC,QAAI,CAACsE,EAAShF,CAAK;AACjB,aAAO;AAET,IAAA8Q,IAAW,IACXI,IAAW;AAAA,EACZ;AACD,MAAIE,KAAa,CAACF;AAChB,WAAA9C,MAAUA,IAAQ,IAAI3F,MACdqI,KAAY5L,GAAaxE,CAAM,IACnCyO,GAAYzO,GAAQV,GAAOmO,GAASzK,GAAY0L,GAAWhB,CAAK,IAChE+B,GAAWzP,GAAQV,GAAOgR,GAAQ7C,GAASzK,GAAY0L,GAAWhB,CAAK;AAE7E,MAAI,EAAED,IAAUc,KAAuB;AACrC,QAAIoC,IAAeH,KAAY9N,GAAe,KAAK1C,GAAQ,aAAa,GACpE4Q,IAAeH,KAAY/N,GAAe,KAAKpD,GAAO,aAAa;AAEvE,QAAIqR,KAAgBC,GAAc;AAChC,UAAIC,IAAeF,IAAe3Q,EAAO,MAAO,IAAGA,GAC/C8Q,IAAeF,IAAetR,EAAM,MAAK,IAAKA;AAElD,aAAAoO,MAAUA,IAAQ,IAAI3F,MACf2G,EAAUmC,GAAcC,GAAcrD,GAASzK,GAAY0K,CAAK;AAAA,IACxE;AAAA,EACF;AACD,SAAKgD,KAGLhD,MAAUA,IAAQ,IAAI3F,MACf4H,GAAa3P,GAAQV,GAAOmO,GAASzK,GAAY0L,GAAWhB,CAAK,KAH/D;AAIX;AC/DA,SAASqD,GAAYpT,GAAO2B,GAAOmO,GAASzK,GAAY0K,GAAO;AAC7D,SAAI/P,MAAU2B,IACL,KAEL3B,KAAS,QAAQ2B,KAAS,QAAS,CAAC1B,EAAaD,CAAK,KAAK,CAACC,EAAa0B,CAAK,IACzE3B,MAAUA,KAAS2B,MAAUA,IAE/B6Q,GAAgBxS,GAAO2B,GAAOmO,GAASzK,GAAY+N,IAAarD,CAAK;AAC9E;ACrBA,IAAIa,KAAuB,GACvBC,KAAyB;AAY7B,SAASwC,GAAYhR,GAAQS,GAAQwQ,GAAWjO,GAAY;AAC1D,MAAI/E,IAAQgT,EAAU,QAClB/S,IAASD,GACTiT,IAAe,CAAClO;AAEpB,MAAIhD,KAAU;AACZ,WAAO,CAAC9B;AAGV,OADA8B,IAAS,OAAOA,CAAM,GACf/B,OAAS;AACd,QAAIsJ,IAAO0J,EAAUhT,CAAK;AAC1B,QAAKiT,KAAgB3J,EAAK,CAAC,IACnBA,EAAK,CAAC,MAAMvH,EAAOuH,EAAK,CAAC,CAAC,IAC1B,EAAEA,EAAK,CAAC,KAAKvH;AAEnB,aAAO;AAAA,EAEV;AACD,SAAO,EAAE/B,IAAQC,KAAQ;AACvB,IAAAqJ,IAAO0J,EAAUhT,CAAK;AACtB,QAAIuE,IAAM+E,EAAK,CAAC,GACZ3E,IAAW5C,EAAOwC,CAAG,GACrB2O,IAAW5J,EAAK,CAAC;AAErB,QAAI2J,KAAgB3J,EAAK,CAAC;AACxB,UAAI3E,MAAa,UAAa,EAAEJ,KAAOxC;AACrC,eAAO;AAAA,WAEJ;AACL,UAAI0N,IAAQ,IAAI3F;AAChB,UAAI/E;AACF,YAAI7E,IAAS6E,EAAWJ,GAAUuO,GAAU3O,GAAKxC,GAAQS,GAAQiN,CAAK;AAExE,UAAI,EAAEvP,MAAW,SACT4S,GAAYI,GAAUvO,GAAU2L,KAAuBC,IAAwBxL,GAAY0K,CAAK,IAChGvP;AAEN,eAAO;AAAA,IAEV;AAAA,EACF;AACD,SAAO;AACT;ACjDA,SAASiT,GAAmBzT,GAAO;AACjC,SAAOA,MAAUA,KAAS,CAAC0B,EAAS1B,CAAK;AAC3C;ACFA,SAAS0T,GAAarR,GAAQ;AAI5B,WAHI7B,IAASuG,EAAK1E,CAAM,GACpB9B,IAASC,EAAO,QAEbD,OAAU;AACf,QAAIsE,IAAMrE,EAAOD,CAAM,GACnBP,IAAQqC,EAAOwC,CAAG;AAEtB,IAAArE,EAAOD,CAAM,IAAI,CAACsE,GAAK7E,GAAOyT,GAAmBzT,CAAK,CAAC;AAAA,EACxD;AACD,SAAOQ;AACT;ACZA,SAASmT,GAAwB9O,GAAK2O,GAAU;AAC9C,SAAO,SAASnR,GAAQ;AACtB,WAAIA,KAAU,OACL,KAEFA,EAAOwC,CAAG,MAAM2O,MACpBA,MAAa,UAAc3O,KAAO,OAAOxC,CAAM;AAAA,EACtD;AACA;ACNA,SAASuR,GAAY9Q,GAAQ;AAC3B,MAAIwQ,IAAYI,GAAa5Q,CAAM;AACnC,SAAIwQ,EAAU,UAAU,KAAKA,EAAU,CAAC,EAAE,CAAC,IAClCK,GAAwBL,EAAU,CAAC,EAAE,CAAC,GAAGA,EAAU,CAAC,EAAE,CAAC,CAAC,IAE1D,SAASjR,GAAQ;AACtB,WAAOA,MAAWS,KAAUuQ,GAAYhR,GAAQS,GAAQwQ,CAAS;AAAA,EACrE;AACA;ACXA,SAASO,GAAUxR,GAAQwC,GAAK;AAC9B,SAAOxC,KAAU,QAAQwC,KAAO,OAAOxC,CAAM;AAC/C;ACMA,SAASyR,GAAQzR,GAAQoG,GAAMsL,GAAS;AACtC,EAAAtL,IAAOH,GAASG,GAAMpG,CAAM;AAM5B,WAJI/B,IAAQ,IACRC,IAASkI,EAAK,QACdjI,IAAS,IAEN,EAAEF,IAAQC,KAAQ;AACvB,QAAIsE,IAAM0D,GAAME,EAAKnI,CAAK,CAAC;AAC3B,QAAI,EAAEE,IAAS6B,KAAU,QAAQ0R,EAAQ1R,GAAQwC,CAAG;AAClD;AAEF,IAAAxC,IAASA,EAAOwC,CAAG;AAAA,EACpB;AACD,SAAIrE,KAAU,EAAEF,KAASC,IAChBC,KAETD,IAAS8B,KAAU,OAAO,IAAIA,EAAO,QAC9B,CAAC,CAAC9B,KAAUyT,GAASzT,CAAM,KAAKmE,GAAQG,GAAKtE,CAAM,MACvDO,EAAQuB,CAAM,KAAKoE,EAAYpE,CAAM;AAC1C;ACPA,SAAS4R,GAAM5R,GAAQoG,GAAM;AAC3B,SAAOpG,KAAU,QAAQyR,GAAQzR,GAAQoG,GAAMoL,EAAS;AAC1D;ACtBA,IAAIjD,KAAuB,GACvBC,KAAyB;AAU7B,SAASqD,GAAoBzL,GAAM+K,GAAU;AAC3C,SAAIhM,GAAMiB,CAAI,KAAKgL,GAAmBD,CAAQ,IACrCG,GAAwBpL,GAAME,CAAI,GAAG+K,CAAQ,IAE/C,SAASnR,GAAQ;AACtB,QAAI4C,IAAWyD,GAAIrG,GAAQoG,CAAI;AAC/B,WAAQxD,MAAa,UAAaA,MAAauO,IAC3CS,GAAM5R,GAAQoG,CAAI,IAClB2K,GAAYI,GAAUvO,GAAU2L,KAAuBC,EAAsB;AAAA,EACrF;AACA;ACvBA,SAASsD,GAAatP,GAAK;AACzB,SAAO,SAASxC,GAAQ;AACtB,WAAOA,KAAU,OAAO,SAAYA,EAAOwC,CAAG;AAAA,EAClD;AACA;ACFA,SAASuP,GAAiB3L,GAAM;AAC9B,SAAO,SAASpG,GAAQ;AACtB,WAAOmG,GAAQnG,GAAQoG,CAAI;AAAA,EAC/B;AACA;ACcA,SAAS4L,GAAS5L,GAAM;AACtB,SAAOjB,GAAMiB,CAAI,IAAI0L,GAAa5L,GAAME,CAAI,CAAC,IAAI2L,GAAiB3L,CAAI;AACxE;AChBA,SAAS6L,EAAatU,GAAO;AAG3B,SAAI,OAAOA,KAAS,aACXA,IAELA,KAAS,OACJkC,IAEL,OAAOlC,KAAS,WACXc,EAAQd,CAAK,IAChBkU,GAAoBlU,EAAM,CAAC,GAAGA,EAAM,CAAC,CAAC,IACtC4T,GAAY5T,CAAK,IAEhBqU,GAASrU,CAAK;AACvB;ACrBA,SAASuU,GAAcpQ,GAAW;AAChC,SAAO,SAAS9B,GAAQhC,GAAU0L,GAAU;AAM1C,aALIzL,IAAQ,IACRkU,IAAW,OAAOnS,CAAM,GACxB+C,IAAQ2G,EAAS1J,CAAM,GACvB9B,IAAS6E,EAAM,QAEZ7E,OAAU;AACf,UAAIsE,IAAMO,EAAMjB,IAAY5D,IAAS,EAAED,CAAK;AAC5C,UAAID,EAASmU,EAAS3P,CAAG,GAAGA,GAAK2P,CAAQ,MAAM;AAC7C;AAAA,IAEH;AACD,WAAOnS;AAAA,EACX;AACA;ACTA,IAAIoS,KAAUF,GAAa;AAE3B,MAAAG,KAAeD;ACJf,SAASE,GAAWtS,GAAQhC,GAAU;AACpC,SAAOgC,KAAUoS,GAAQpS,GAAQhC,GAAU0G,CAAI;AACjD;ACHA,SAAS6N,GAAeC,GAAU1Q,GAAW;AAC3C,SAAO,SAAS2Q,GAAYzU,GAAU;AACpC,QAAIyU,KAAc;AAChB,aAAOA;AAET,QAAI,CAAC/O,EAAY+O,CAAU;AACzB,aAAOD,EAASC,GAAYzU,CAAQ;AAMtC,aAJIE,IAASuU,EAAW,QACpBxU,IAAQ6D,IAAY5D,IAAS,IAC7BiU,IAAW,OAAOM,CAAU,IAExB3Q,IAAY7D,MAAU,EAAEA,IAAQC,MAClCF,EAASmU,EAASlU,CAAK,GAAGA,GAAOkU,CAAQ,MAAM;AAAnD;AAIF,WAAOM;AAAA,EACX;AACA;AClBA,IAAIC,KAAWH,GAAeD,EAAU;AAExC,MAAAK,KAAeD;ACKf,IAAIE,KAAM,WAAW;AACnB,SAAOrK,GAAK,KAAK;AACnB;AAEA,MAAAsK,KAAeD;AChBf,IAAInQ,KAAc,OAAO,WAGrBC,KAAiBD,GAAY,gBAuB7BqQ,KAAWtP,GAAS,SAASxD,GAAQ6D,GAAS;AAChD,EAAA7D,IAAS,OAAOA,CAAM;AAEtB,MAAI/B,IAAQ,IACRC,IAAS2F,EAAQ,QACjBC,IAAQ5F,IAAS,IAAI2F,EAAQ,CAAC,IAAI;AAMtC,OAJIC,KAASL,EAAeI,EAAQ,CAAC,GAAGA,EAAQ,CAAC,GAAGC,CAAK,MACvD5F,IAAS,IAGJ,EAAED,IAAQC;AAMf,aALIuC,IAASoD,EAAQ5F,CAAK,GACtB8E,IAAQiC,EAAOvE,CAAM,GACrBsS,IAAa,IACbC,IAAcjQ,EAAM,QAEjB,EAAEgQ,IAAaC,KAAa;AACjC,UAAIxQ,IAAMO,EAAMgQ,CAAU,GACtBpV,IAAQqC,EAAOwC,CAAG;AAEtB,OAAI7E,MAAU,UACTkF,GAAGlF,GAAO8E,GAAYD,CAAG,CAAC,KAAK,CAACE,GAAe,KAAK1C,GAAQwC,CAAG,OAClExC,EAAOwC,CAAG,IAAI/B,EAAO+B,CAAG;AAAA,IAE3B;AAGH,SAAOxC;AACT,CAAC;AAED,MAAAiT,KAAeH;ACnDf,SAASI,GAAiBlT,GAAQwC,GAAK7E,GAAO;AAC5C,GAAKA,MAAU,UAAa,CAACkF,GAAG7C,EAAOwC,CAAG,GAAG7E,CAAK,KAC7CA,MAAU,UAAa,EAAE6E,KAAOxC,OACnCuC,GAAgBvC,GAAQwC,GAAK7E,CAAK;AAEtC;ACWA,SAASwV,GAAkBxV,GAAO;AAChC,SAAOC,EAAaD,CAAK,KAAK+F,EAAY/F,CAAK;AACjD;ACtBA,SAASyV,GAAQpT,GAAQwC,GAAK;AAC5B,MAAI,EAAAA,MAAQ,iBAAiB,OAAOxC,EAAOwC,CAAG,KAAM,eAIhDA,KAAO;AAIX,WAAOxC,EAAOwC,CAAG;AACnB;ACSA,SAAS6Q,GAAc1V,GAAO;AAC5B,SAAOmF,GAAWnF,GAAOqH,EAAOrH,CAAK,CAAC;AACxC;ACEA,SAAS2V,GAActT,GAAQS,GAAQ+B,GAAK+Q,GAAUC,GAAWxQ,GAAY0K,GAAO;AAClF,MAAI9K,IAAWwQ,GAAQpT,GAAQwC,CAAG,GAC9B2O,IAAWiC,GAAQ3S,GAAQ+B,CAAG,GAC9BsL,IAAUJ,EAAM,IAAIyD,CAAQ;AAEhC,MAAIrD,GAAS;AACX,IAAAoF,GAAiBlT,GAAQwC,GAAKsL,CAAO;AACrC;AAAA,EACD;AACD,MAAI5K,IAAWF,IACXA,EAAWJ,GAAUuO,GAAW3O,IAAM,IAAKxC,GAAQS,GAAQiN,CAAK,IAChE,QAEA+F,IAAWvQ,MAAa;AAE5B,MAAIuQ,GAAU;AACZ,QAAIvP,IAAQzF,EAAQ0S,CAAQ,GACxB9M,IAAS,CAACH,KAASI,EAAS6M,CAAQ,GACpCuC,IAAU,CAACxP,KAAS,CAACG,KAAUG,GAAa2M,CAAQ;AAExD,IAAAjO,IAAWiO,GACPjN,KAASG,KAAUqP,IACjBjV,EAAQmE,CAAQ,IAClBM,IAAWN,IAEJuQ,GAAkBvQ,CAAQ,IACjCM,IAAW1C,GAAUoC,CAAQ,IAEtByB,KACPoP,IAAW,IACXvQ,IAAWuF,GAAY0I,GAAU,EAAI,KAE9BuC,KACPD,IAAW,IACXvQ,IAAWwH,GAAgByG,GAAU,EAAI,KAGzCjO,IAAW,CAAA,IAGNyQ,GAAcxC,CAAQ,KAAK/M,EAAY+M,CAAQ,KACtDjO,IAAWN,GACPwB,EAAYxB,CAAQ,IACtBM,IAAWmQ,GAAczQ,CAAQ,KAE1B,CAACvD,EAASuD,CAAQ,KAAKgR,GAAWhR,CAAQ,OACjDM,IAAW+I,GAAgBkF,CAAQ,MAIrCsC,IAAW;AAAA,EAEd;AACD,EAAIA,MAEF/F,EAAM,IAAIyD,GAAUjO,CAAQ,GAC5BsQ,EAAUtQ,GAAUiO,GAAUoC,GAAUvQ,GAAY0K,CAAK,GACzDA,EAAM,OAAUyD,CAAQ,IAE1B+B,GAAiBlT,GAAQwC,GAAKU,CAAQ;AACxC;ACxEA,SAAS2Q,GAAU7T,GAAQS,GAAQ8S,GAAUvQ,GAAY0K,GAAO;AAC9D,EAAI1N,MAAWS,KAGf2R,GAAQ3R,GAAQ,SAAS0Q,GAAU3O,GAAK;AAEtC,QADAkL,MAAUA,IAAQ,IAAI3F,MAClB1I,EAAS8R,CAAQ;AACnB,MAAAmC,GAActT,GAAQS,GAAQ+B,GAAK+Q,GAAUM,IAAW7Q,GAAY0K,CAAK;AAAA,SAEtE;AACH,UAAIxK,IAAWF,IACXA,EAAWoQ,GAAQpT,GAAQwC,CAAG,GAAG2O,GAAW3O,IAAM,IAAKxC,GAAQS,GAAQiN,CAAK,IAC5E;AAEJ,MAAIxK,MAAa,WACfA,IAAWiO,IAEb+B,GAAiBlT,GAAQwC,GAAKU,CAAQ;AAAA,IACvC;AAAA,EACF,GAAE8B,CAAM;AACX;AC9BA,SAAS8O,GAAkB/V,GAAOJ,GAAOoW,GAAY;AAInD,WAHI9V,IAAQ,IACRC,IAASH,KAAS,OAAO,IAAIA,EAAM,QAEhC,EAAEE,IAAQC;AACf,QAAI6V,EAAWpW,GAAOI,EAAME,CAAK,CAAC;AAChC,aAAO;AAGX,SAAO;AACT;ACLA,SAAS+V,GAAKjW,GAAO;AACnB,MAAIG,IAASH,KAAS,OAAO,IAAIA,EAAM;AACvC,SAAOG,IAASH,EAAMG,IAAS,CAAC,IAAI;AACtC;ACRA,SAAS+V,GAAatW,GAAO;AAC3B,SAAO,OAAOA,KAAS,aAAaA,IAAQkC;AAC9C;ACwBA,SAASqU,EAAQzB,GAAYzU,GAAU;AACrC,MAAIoC,IAAO3B,EAAQgU,CAAU,IAAI/Q,KAAYgR;AAC7C,SAAOtS,EAAKqS,GAAYwB,GAAajW,CAAQ,CAAC;AAChD;AC5BA,SAASmW,GAAW1B,GAAY7Q,GAAW;AACzC,MAAIzD,IAAS,CAAA;AACbuU,SAAAA,GAASD,GAAY,SAAS9U,GAAOM,GAAOwU,GAAY;AACtD,IAAI7Q,EAAUjE,GAAOM,GAAOwU,CAAU,KACpCtU,EAAO,KAAKR,CAAK;AAAA,EAEvB,CAAG,GACMQ;AACT;AC4BA,SAASiW,EAAO3B,GAAY7Q,GAAW;AACrC,MAAIxB,IAAO3B,EAAQgU,CAAU,IAAI7J,KAAcuL;AAC/C,SAAO/T,EAAKqS,GAAYR,EAAarQ,CAAY,CAAC;AACpD;ACtCA,SAASyS,GAAWC,GAAe;AACjC,SAAO,SAAS7B,GAAY7Q,GAAWC,GAAW;AAChD,QAAIsQ,IAAW,OAAOM,CAAU;AAChC,QAAI,CAAC/O,EAAY+O,CAAU,GAAG;AAC5B,UAAIzU,IAAWiU,EAAarQ,CAAY;AACxC,MAAA6Q,IAAa/N,EAAK+N,CAAU,GAC5B7Q,IAAY,SAASY,GAAK;AAAE,eAAOxE,EAASmU,EAAS3P,CAAG,GAAGA,GAAK2P,CAAQ;AAAA;IACzE;AACD,QAAIlU,IAAQqW,EAAc7B,GAAY7Q,GAAWC,CAAS;AAC1D,WAAO5D,IAAQ,KAAKkU,EAASnU,IAAWyU,EAAWxU,CAAK,IAAIA,CAAK,IAAI;AAAA,EACzE;AACA;ACjBA,IAAIkF,KAAY,KAAK;AAqCrB,SAASoR,GAAUxW,GAAO6D,GAAWC,GAAW;AAC9C,MAAI3D,IAASH,KAAS,OAAO,IAAIA,EAAM;AACvC,MAAI,CAACG;AACH,WAAO;AAET,MAAID,IAAQ4D,KAAa,OAAO,IAAIlC,GAAUkC,CAAS;AACvD,SAAI5D,IAAQ,MACVA,IAAQkF,GAAUjF,IAASD,GAAO,CAAC,IAE9B0D,GAAc5D,GAAOkU,EAAarQ,CAAY,GAAG3D,CAAK;AAC/D;ACbA,IAAIuW,KAAOH,GAAWE,EAAS;AAE/B,MAAAE,KAAeD;AC9Bf,SAASE,GAAQjC,GAAYzU,GAAU;AACrC,MAAIC,IAAQ,IACRE,IAASuF,EAAY+O,CAAU,IAAI,MAAMA,EAAW,MAAM,IAAI;AAElEC,SAAAA,GAASD,GAAY,SAAS9U,GAAO6E,GAAKiQ,GAAY;AACpD,IAAAtU,EAAO,EAAEF,CAAK,IAAID,EAASL,GAAO6E,GAAKiQ,CAAU;AAAA,EACrD,CAAG,GACMtU;AACT;AC4BA,SAASmR,EAAImD,GAAYzU,GAAU;AACjC,MAAIoC,IAAO3B,EAAQgU,CAAU,IAAI3U,IAAW4W;AAC5C,SAAOtU,EAAKqS,GAAYR,EAAajU,CAAW,CAAC;AACnD;AClBA,SAAS2W,GAAM3U,GAAQhC,GAAU;AAC/B,SAAOgC,KAAU,OACbA,IACAoS,GAAQpS,GAAQiU,GAAajW,CAAQ,GAAGgH,CAAM;AACpD;AC3BA,SAAS4P,GAAOjX,GAAO2B,GAAO;AAC5B,SAAO3B,IAAQ2B;AACjB;ACVA,IAAImD,KAAc,OAAO,WAGrBC,KAAiBD,GAAY;AAUjC,SAASoS,GAAQ7U,GAAQwC,GAAK;AAC5B,SAAOxC,KAAU,QAAQ0C,GAAe,KAAK1C,GAAQwC,CAAG;AAC1D;ACcA,SAASsS,EAAI9U,GAAQoG,GAAM;AACzB,SAAOpG,KAAU,QAAQyR,GAAQzR,GAAQoG,GAAMyO,EAAO;AACxD;ACpBA,SAASE,GAAW/U,GAAQ+C,GAAO;AACjC,SAAOjF,EAASiF,GAAO,SAASP,GAAK;AACnC,WAAOxC,EAAOwC,CAAG;AAAA,EACrB,CAAG;AACH;ACaA,SAASgE,EAAOxG,GAAQ;AACtB,SAAOA,KAAU,OAAO,KAAK+U,GAAW/U,GAAQ0E,EAAK1E,CAAM,CAAC;AAC9D;ACdA,SAASgV,EAAYrX,GAAO;AAC1B,SAAOA,MAAU;AACnB;ACVA,SAASsX,GAAOtX,GAAO2B,GAAO;AAC5B,SAAO3B,IAAQ2B;AACjB;ACqBA,SAAS4V,GAAUlV,GAAQhC,GAAU;AACnC,MAAIG,IAAS,CAAA;AACb,SAAAH,IAAWiU,EAAajU,CAAW,GAEnCsU,GAAWtS,GAAQ,SAASrC,GAAO6E,GAAKxC,GAAQ;AAC9C,IAAAuC,GAAgBpE,GAAQqE,GAAKxE,EAASL,GAAO6E,GAAKxC,CAAM,CAAC;AAAA,EAC7D,CAAG,GACM7B;AACT;AC5BA,SAASgX,GAAapX,GAAOC,GAAU+V,GAAY;AAIjD,WAHI9V,IAAQ,IACRC,IAASH,EAAM,QAEZ,EAAEE,IAAQC,KAAQ;AACvB,QAAIP,IAAQI,EAAME,CAAK,GACnBmX,IAAUpX,EAASL,CAAK;AAE5B,QAAIyX,KAAW,SAASC,MAAa,SAC5BD,MAAYA,KAAW,CAAC1X,EAAS0X,CAAO,IACzCrB,EAAWqB,GAASC,CAAQ;AAElC,UAAIA,IAAWD,GACXjX,IAASR;AAAA,EAEhB;AACD,SAAOQ;AACT;ACPA,SAASmX,EAAIvX,GAAO;AAClB,SAAQA,KAASA,EAAM,SACnBoX,GAAapX,GAAO8B,GAAU+U,EAAM,IACpC;AACN;ACQA,IAAIW,KAAQ5R,GAAe,SAAS3D,GAAQS,GAAQ8S,GAAU;AAC5D,EAAAM,GAAU7T,GAAQS,GAAQ8S,CAAQ;AACpC,CAAC;AAED,MAAAiC,KAAeD;AChBf,SAASE,EAAI1X,GAAO;AAClB,SAAQA,KAASA,EAAM,SACnBoX,GAAapX,GAAO8B,GAAUoV,EAAM,IACpC;AACN;ACCA,SAASS,GAAM3X,GAAOC,GAAU;AAC9B,SAAQD,KAASA,EAAM,SACnBoX,GAAapX,GAAOkU,EAAajU,CAAW,GAAGiX,EAAM,IACrD;AACN;ACfA,SAASU,GAAQ3V,GAAQoG,GAAMzI,GAAOqF,GAAY;AAChD,MAAI,CAAC3D,EAASW,CAAM;AAClB,WAAOA;AAET,EAAAoG,IAAOH,GAASG,GAAMpG,CAAM;AAO5B,WALI/B,IAAQ,IACRC,IAASkI,EAAK,QACdwP,IAAY1X,IAAS,GACrB2X,IAAS7V,GAEN6V,KAAU,QAAQ,EAAE5X,IAAQC,KAAQ;AACzC,QAAIsE,IAAM0D,GAAME,EAAKnI,CAAK,CAAC,GACvBiF,IAAWvF;AAEf,QAAI6E,MAAQ,eAAeA,MAAQ,iBAAiBA,MAAQ;AAC1D,aAAOxC;AAGT,QAAI/B,KAAS2X,GAAW;AACtB,UAAIhT,IAAWiT,EAAOrT,CAAG;AACzB,MAAAU,IAAWF,IAAaA,EAAWJ,GAAUJ,GAAKqT,CAAM,IAAI,QACxD3S,MAAa,WACfA,IAAW7D,EAASuD,CAAQ,IACxBA,IACCP,GAAQ+D,EAAKnI,IAAQ,CAAC,CAAC,IAAI,CAAA,IAAK,CAAA;AAAA,IAExC;AACD,IAAA0E,GAAYkT,GAAQrT,GAAKU,CAAQ,GACjC2S,IAASA,EAAOrT,CAAG;AAAA,EACpB;AACD,SAAOxC;AACT;ACnCA,SAAS8V,GAAW9V,GAAQ+V,GAAOnU,GAAW;AAK5C,WAJI3D,IAAQ,IACRC,IAAS6X,EAAM,QACf5X,IAAS,CAAA,GAEN,EAAEF,IAAQC,KAAQ;AACvB,QAAIkI,IAAO2P,EAAM9X,CAAK,GAClBN,IAAQwI,GAAQnG,GAAQoG,CAAI;AAEhC,IAAIxE,EAAUjE,GAAOyI,CAAI,KACvBuP,GAAQxX,GAAQ8H,GAASG,GAAMpG,CAAM,GAAGrC,CAAK;AAAA,EAEhD;AACD,SAAOQ;AACT;ACjBA,SAAS6X,GAAWjY,GAAOkY,GAAU;AACnC,MAAI/X,IAASH,EAAM;AAGnB,OADAA,EAAM,KAAKkY,CAAQ,GACZ/X;AACL,IAAAH,EAAMG,CAAM,IAAIH,EAAMG,CAAM,EAAE;AAEhC,SAAOH;AACT;ACRA,SAASmY,GAAiBvY,GAAO2B,GAAO;AACtC,MAAI3B,MAAU2B,GAAO;AACnB,QAAI6W,IAAexY,MAAU,QACzByY,IAAYzY,MAAU,MACtB0Y,IAAiB1Y,MAAUA,GAC3B2Y,IAAc5Y,EAASC,CAAK,GAE5B4Y,IAAejX,MAAU,QACzBkX,IAAYlX,MAAU,MACtBmX,IAAiBnX,MAAUA,GAC3BoX,IAAchZ,EAAS4B,CAAK;AAEhC,QAAK,CAACkX,KAAa,CAACE,KAAe,CAACJ,KAAe3Y,IAAQ2B,KACtDgX,KAAeC,KAAgBE,KAAkB,CAACD,KAAa,CAACE,KAChEN,KAAaG,KAAgBE,KAC7B,CAACN,KAAgBM,KAClB,CAACJ;AACH,aAAO;AAET,QAAK,CAACD,KAAa,CAACE,KAAe,CAACI,KAAe/Y,IAAQ2B,KACtDoX,KAAeP,KAAgBE,KAAkB,CAACD,KAAa,CAACE,KAChEE,KAAaL,KAAgBE,KAC7B,CAACE,KAAgBF,KAClB,CAACI;AACH,aAAO;AAAA,EAEV;AACD,SAAO;AACT;ACtBA,SAASE,GAAgB3W,GAAQV,GAAOsX,GAAQ;AAO9C,WANI3Y,IAAQ,IACR4Y,IAAc7W,EAAO,UACrB8W,IAAcxX,EAAM,UACpBpB,IAAS2Y,EAAY,QACrBE,IAAeH,EAAO,QAEnB,EAAE3Y,IAAQC,KAAQ;AACvB,QAAIC,IAAS+X,GAAiBW,EAAY5Y,CAAK,GAAG6Y,EAAY7Y,CAAK,CAAC;AACpE,QAAIE,GAAQ;AACV,UAAIF,KAAS8Y;AACX,eAAO5Y;AAET,UAAI6Y,IAAQJ,EAAO3Y,CAAK;AACxB,aAAOE,KAAU6Y,KAAS,SAAS,KAAK;AAAA,IACzC;AAAA,EACF;AAQD,SAAOhX,EAAO,QAAQV,EAAM;AAC9B;ACtBA,SAAS2X,GAAYxE,GAAYyE,GAAWN,GAAQ;AAClD,EAAIM,EAAU,SACZA,IAAYpZ,EAASoZ,GAAW,SAASlZ,GAAU;AACjD,WAAIS,EAAQT,CAAQ,IACX,SAASL,GAAO;AACrB,aAAOwI,GAAQxI,GAAOK,EAAS,WAAW,IAAIA,EAAS,CAAC,IAAIA,CAAQ;AAAA,IACrE,IAEIA;AAAA,EACb,CAAK,IAEDkZ,IAAY,CAACrX,CAAQ;AAGvB,MAAI5B,IAAQ;AACZ,EAAAiZ,IAAYpZ,EAASoZ,GAAW3K,GAAU0F,CAAY,CAAC;AAEvD,MAAI9T,IAASuW,GAAQjC,GAAY,SAAS9U,GAAO6E,GAAKiQ,GAAY;AAChE,QAAI0E,IAAWrZ,EAASoZ,GAAW,SAASlZ,GAAU;AACpD,aAAOA,EAASL,CAAK;AAAA,IAC3B,CAAK;AACD,WAAO,EAAE,UAAYwZ,GAAU,OAAS,EAAElZ,GAAO,OAASN;EAC9D,CAAG;AAED,SAAOqY,GAAW7X,GAAQ,SAAS6B,GAAQV,GAAO;AAChD,WAAOqX,GAAgB3W,GAAQV,GAAOsX,CAAM;AAAA,EAChD,CAAG;AACH;AClCA,SAASQ,GAASpX,GAAQ+V,GAAO;AAC/B,SAAOD,GAAW9V,GAAQ+V,GAAO,SAASpY,GAAOyI,GAAM;AACrD,WAAOwL,GAAM5R,GAAQoG,CAAI;AAAA,EAC7B,CAAG;AACH;ACIA,IAAIiR,KAAOrQ,GAAS,SAAShH,GAAQ+V,GAAO;AAC1C,SAAO/V,KAAU,OAAO,CAAA,IAAKoX,GAASpX,GAAQ+V,CAAK;AACrD,CAAC;AAED,MAAAuB,KAAeD;ACvBf,IAAIE,KAAa,KAAK,MAClBpU,KAAY,KAAK;AAarB,SAASqU,GAAUnU,GAAOoU,GAAKC,GAAM5V,GAAW;AAK9C,WAJI7D,IAAQ,IACRC,IAASiF,GAAUoU,IAAYE,IAAMpU,MAAUqU,KAAQ,EAAE,GAAG,CAAC,GAC7DvZ,IAAS,MAAMD,CAAM,GAElBA;AACL,IAAAC,EAAO2D,IAAY5D,IAAS,EAAED,CAAK,IAAIoF,GACvCA,KAASqU;AAEX,SAAOvZ;AACT;ACdA,SAASwZ,GAAY7V,GAAW;AAC9B,SAAO,SAASuB,GAAOoU,GAAKC,GAAM;AAChC,WAAIA,KAAQ,OAAOA,KAAQ,YAAYjU,EAAeJ,GAAOoU,GAAKC,CAAI,MACpED,IAAMC,IAAO,SAGfrU,IAAQ5D,GAAS4D,CAAK,GAClBoU,MAAQ,UACVA,IAAMpU,GACNA,IAAQ,KAERoU,IAAMhY,GAASgY,CAAG,GAEpBC,IAAOA,MAAS,SAAarU,IAAQoU,IAAM,IAAI,KAAMhY,GAASiY,CAAI,GAC3DF,GAAUnU,GAAOoU,GAAKC,GAAM5V,CAAS;AAAA,EAChD;AACA;ACgBA,IAAI8V,KAAQD,GAAW;AAEvB,MAAAE,IAAeD;AChCf,SAASE,GAAWrF,GAAYzU,GAAUkJ,GAAaC,GAAWqL,GAAU;AAC1E,SAAAA,EAASC,GAAY,SAAS9U,GAAOM,GAAOwU,GAAY;AACtD,IAAAvL,IAAcC,KACTA,IAAY,IAAOxJ,KACpBK,EAASkJ,GAAavJ,GAAOM,GAAOwU,CAAU;AAAA,EACtD,CAAG,GACMvL;AACT;ACuBA,SAAS6Q,GAAOtF,GAAYzU,GAAUkJ,GAAa;AACjD,MAAI9G,IAAO3B,EAAQgU,CAAU,IAAIxL,KAAc6Q,IAC3C3Q,IAAY,UAAU,SAAS;AAEnC,SAAO/G,EAAKqS,GAAYR,EAAajU,CAAW,GAAGkJ,GAAaC,GAAWuL,EAAQ;AACrF;ACdA,IAAIsF,KAASxU,GAAS,SAASiP,GAAYyE,GAAW;AACpD,MAAIzE,KAAc;AAChB,WAAO;AAET,MAAIvU,IAASgZ,EAAU;AACvB,SAAIhZ,IAAS,KAAKuF,EAAegP,GAAYyE,EAAU,CAAC,GAAGA,EAAU,CAAC,CAAC,IACrEA,IAAY,CAAA,IACHhZ,IAAS,KAAKuF,EAAeyT,EAAU,CAAC,GAAGA,EAAU,CAAC,GAAGA,EAAU,CAAC,CAAC,MAC9EA,IAAY,CAACA,EAAU,CAAC,CAAC,IAEpBD,GAAYxE,GAAY7L,GAAYsQ,GAAW,CAAC,GAAG,CAAA,CAAE;AAC9D,CAAC;AAED,MAAAe,KAAeD;AC1Cf,IAAI5Z,KAAW,IAAI,GASf8Z,KAAcC,MAAQ,IAAI5I,GAAW,IAAI4I,GAAI,CAAE,EAAA,EAAE,CAAC,CAAC,EAAE,CAAC,KAAM/Z,KAAmB,SAASoI,GAAQ;AAClG,SAAO,IAAI2R,GAAI3R,CAAM;AACvB,IAF4EjG;AAI5E,MAAA6X,KAAeF;ACVf,IAAIxQ,KAAmB;AAWvB,SAAS2Q,GAASta,GAAOC,GAAU+V,GAAY;AAC7C,MAAI9V,IAAQ,IACRqa,IAAWpW,IACXhE,IAASH,EAAM,QACf0V,IAAW,IACXtV,IAAS,CAAE,GACX6Q,IAAO7Q;AAEX,MAAI4V;AACF,IAAAN,IAAW,IACX6E,IAAWxE;AAAA,WAEJ5V,KAAUwJ,IAAkB;AACnC,QAAI8H,IAAMxR,IAAW,OAAOka,GAAUna,CAAK;AAC3C,QAAIyR;AACF,aAAOD,GAAWC,CAAG;AAEvB,IAAAiE,IAAW,IACX6E,IAAWhK,IACXU,IAAO,IAAIZ;AAAA,EACZ;AAEC,IAAAY,IAAOhR,IAAW,CAAE,IAAGG;AAEzB,EAAAoa;AACA,WAAO,EAAEta,IAAQC,KAAQ;AACvB,UAAIP,IAAQI,EAAME,CAAK,GACnBoX,IAAWrX,IAAWA,EAASL,CAAK,IAAIA;AAG5C,UADAA,IAASoW,KAAcpW,MAAU,IAAKA,IAAQ,GAC1C8V,KAAY4B,MAAaA,GAAU;AAErC,iBADImD,IAAYxJ,EAAK,QACdwJ;AACL,cAAIxJ,EAAKwJ,CAAS,MAAMnD;AACtB,qBAASkD;AAGb,QAAIva,KACFgR,EAAK,KAAKqG,CAAQ,GAEpBlX,EAAO,KAAKR,CAAK;AAAA,MAClB;AACI,QAAK2a,EAAStJ,GAAMqG,GAAUtB,CAAU,MACvC/E,MAAS7Q,KACX6Q,EAAK,KAAKqG,CAAQ,GAEpBlX,EAAO,KAAKR,CAAK;AAAA,IAEpB;AACD,SAAOQ;AACT;AChDA,IAAIsa,KAAQjV,GAAS,SAASkV,GAAQ;AACpC,SAAOL,GAASzR,GAAY8R,GAAQ,GAAGvF,IAAmB,EAAI,CAAC;AACjE,CAAC;AAED,MAAAwF,KAAeF;ACtBf,IAAIG,KAAY;AAmBhB,SAASC,GAASC,GAAQ;AACxB,MAAIC,IAAK,EAAEH;AACX,SAAO5S,GAAS8S,CAAM,IAAIC;AAC5B;AChBA,SAASC,GAAcjW,GAAOyD,GAAQyS,GAAY;AAMhD,WALIhb,IAAQ,IACRC,IAAS6E,EAAM,QACfmW,IAAa1S,EAAO,QACpBrI,IAAS,CAAA,GAEN,EAAEF,IAAQC,KAAQ;AACvB,QAAIP,IAAQM,IAAQib,IAAa1S,EAAOvI,CAAK,IAAI;AACjD,IAAAgb,EAAW9a,GAAQ4E,EAAM9E,CAAK,GAAGN,CAAK;AAAA,EACvC;AACD,SAAOQ;AACT;ACDA,SAASgb,GAAUpW,GAAOyD,GAAQ;AAChC,SAAOwS,GAAcjW,KAAS,CAAA,GAAIyD,KAAU,CAAA,GAAI7D,EAAW;AAC7D;ACnBA,IAAIyW,KAAoB,MACpBC,IAAa,MACbC,KAAiB;AAqBd,MAAMC,EAAM;AAAA,EACjB,YAAYC,IAAO,IAAI;AACrB,SAAK,cAAcC,EAAMD,GAAM,UAAU,IAAIA,EAAK,WAAW,IAC7D,KAAK,gBAAgBC,EAAMD,GAAM,YAAY,IAAIA,EAAK,aAAa,IACnE,KAAK,cAAcC,EAAMD,GAAM,UAAU,IAAIA,EAAK,WAAW,IAG7D,KAAK,SAAS,QAGd,KAAK,sBAAsBE,EAAW,MAAS,GAG/C,KAAK,sBAAsBA,EAAW,MAAS,GAG/C,KAAK,SAAS,IAEV,KAAK,gBAEP,KAAK,UAAU,IAGf,KAAK,YAAY,IACjB,KAAK,UAAUL,CAAU,IAAI,KAI/B,KAAK,MAAM,IAGX,KAAK,SAAS,IAGd,KAAK,OAAO,IAGZ,KAAK,QAAQ,IAGb,KAAK,YAAY,IAGjB,KAAK,cAAc;EACpB;AAAA;AAAA,EAED,aAAa;AACX,WAAO,KAAK;AAAA,EACb;AAAA,EACD,eAAe;AACb,WAAO,KAAK;AAAA,EACb;AAAA,EACD,aAAa;AACX,WAAO,KAAK;AAAA,EACb;AAAA,EACD,SAASM,GAAO;AACd,gBAAK,SAASA,GACP;AAAA,EACR;AAAA,EACD,QAAQ;AACN,WAAO,KAAK;AAAA,EACb;AAAA;AAAA,EAED,oBAAoBC,GAAY;AAC9B,WAAKC,GAAaD,CAAU,MAC1BA,IAAaF,EAAWE,CAAU,IAEpC,KAAK,sBAAsBA,GACpB;AAAA,EACR;AAAA,EACD,YAAY;AACV,WAAO,KAAK;AAAA,EACb;AAAA,EACD,QAAQ;AACN,WAAOE,EAAO,KAAK,MAAM;AAAA,EAC1B;AAAA,EACD,UAAU;AACR,QAAIC,IAAO;AACX,WAAOC,EAAS,KAAK,MAAO,GAAE,SAAUC,GAAG;AACzC,aAAOC,GAAUH,EAAK,IAAIE,CAAC,CAAC;AAAA,IAClC,CAAK;AAAA,EACF;AAAA,EACD,QAAQ;AACN,QAAIF,IAAO;AACX,WAAOC,EAAS,KAAK,MAAO,GAAE,SAAUC,GAAG;AACzC,aAAOC,GAAUH,EAAK,KAAKE,CAAC,CAAC;AAAA,IACnC,CAAK;AAAA,EACF;AAAA,EACD,SAASE,GAAIxc,GAAO;AAClB,QAAI2C,IAAO,WACPyZ,IAAO;AACXK,WAAAA,EAAOD,GAAI,SAAUF,GAAG;AACtB,MAAI3Z,EAAK,SAAS,IAChByZ,EAAK,QAAQE,GAAGtc,CAAK,IAErBoc,EAAK,QAAQE,CAAC;AAAA,IAEtB,CAAK,GACM;AAAA,EACR;AAAA,EACD,QAAQA,GAAGtc,GAAO;AAChB,WAAI8b,EAAM,KAAK,QAAQQ,CAAC,KAClB,UAAU,SAAS,MACrB,KAAK,OAAOA,CAAC,IAAItc,IAEZ,SAIT,KAAK,OAAOsc,CAAC,IAAI,UAAU,SAAS,IAAItc,IAAQ,KAAK,oBAAoBsc,CAAC,GACtE,KAAK,gBACP,KAAK,QAAQA,CAAC,IAAIZ,GAClB,KAAK,UAAUY,CAAC,IAAI,IACpB,KAAK,UAAUZ,CAAU,EAAEY,CAAC,IAAI,KAElC,KAAK,IAAIA,CAAC,IAAI,IACd,KAAK,OAAOA,CAAC,IAAI,IACjB,KAAK,KAAKA,CAAC,IAAI,IACf,KAAK,MAAMA,CAAC,IAAI,IAChB,EAAE,KAAK,YACA;AAAA,EACR;AAAA,EACD,KAAKA,GAAG;AACN,WAAO,KAAK,OAAOA,CAAC;AAAA,EACrB;AAAA,EACD,QAAQA,GAAG;AACT,WAAOR,EAAM,KAAK,QAAQQ,CAAC;AAAA,EAC5B;AAAA,EACD,WAAWA,GAAG;AACZ,QAAIF,IAAO;AACX,QAAIN,EAAM,KAAK,QAAQQ,CAAC,GAAG;AACzB,UAAII,IAAa,SAAUC,GAAG;AAC5B,QAAAP,EAAK,WAAWA,EAAK,UAAUO,CAAC,CAAC;AAAA,MACzC;AACM,aAAO,KAAK,OAAOL,CAAC,GAChB,KAAK,gBACP,KAAK,4BAA4BA,CAAC,GAClC,OAAO,KAAK,QAAQA,CAAC,GACrBG,EAAO,KAAK,SAASH,CAAC,GAAG,SAAUM,GAAO;AACxC,QAAAR,EAAK,UAAUQ,CAAK;AAAA,MAC9B,CAAS,GACD,OAAO,KAAK,UAAUN,CAAC,IAEzBG,EAAON,EAAO,KAAK,IAAIG,CAAC,CAAC,GAAGI,CAAU,GACtC,OAAO,KAAK,IAAIJ,CAAC,GACjB,OAAO,KAAK,OAAOA,CAAC,GACpBG,EAAON,EAAO,KAAK,KAAKG,CAAC,CAAC,GAAGI,CAAU,GACvC,OAAO,KAAK,KAAKJ,CAAC,GAClB,OAAO,KAAK,MAAMA,CAAC,GACnB,EAAE,KAAK;AAAA,IACR;AACD,WAAO;AAAA,EACR;AAAA,EACD,UAAUA,GAAGO,GAAQ;AACnB,QAAI,CAAC,KAAK;AACR,YAAM,IAAI,MAAM,2CAA2C;AAG7D,QAAIC,EAAcD,CAAM;AACtB,MAAAA,IAASnB;AAAA,SACJ;AAEL,MAAAmB,KAAU;AACV,eAASE,IAAWF,GAAQ,CAACC,EAAcC,CAAQ,GAAGA,IAAW,KAAK,OAAOA,CAAQ;AACnF,YAAIA,MAAaT;AACf,gBAAM,IAAI,MAAM,aAAaO,IAAS,mBAAmBP,IAAI,uBAAuB;AAIxF,WAAK,QAAQO,CAAM;AAAA,IACpB;AAED,gBAAK,QAAQP,CAAC,GACd,KAAK,4BAA4BA,CAAC,GAClC,KAAK,QAAQA,CAAC,IAAIO,GAClB,KAAK,UAAUA,CAAM,EAAEP,CAAC,IAAI,IACrB;AAAA,EACR;AAAA,EACD,4BAA4BA,GAAG;AAC7B,WAAO,KAAK,UAAU,KAAK,QAAQA,CAAC,CAAC,EAAEA,CAAC;AAAA,EACzC;AAAA,EACD,OAAOA,GAAG;AACR,QAAI,KAAK,aAAa;AACpB,UAAIO,IAAS,KAAK,QAAQP,CAAC;AAC3B,UAAIO,MAAWnB;AACb,eAAOmB;AAAA,IAEV;AAAA,EACF;AAAA,EACD,SAASP,GAAG;AAKV,QAJIQ,EAAcR,CAAC,MACjBA,IAAIZ,IAGF,KAAK,aAAa;AACpB,UAAIsB,IAAW,KAAK,UAAUV,CAAC;AAC/B,UAAIU;AACF,eAAOb,EAAOa,CAAQ;AAAA,IAE9B,OAAW;AAAA,UAAIV,MAAMZ;AACf,eAAO,KAAK;AACP,UAAI,KAAK,QAAQY,CAAC;AACvB,eAAO;;EAEV;AAAA,EACD,aAAaA,GAAG;AACd,QAAIW,IAAS,KAAK,OAAOX,CAAC;AAC1B,QAAIW;AACF,aAAOd,EAAOc,CAAM;AAAA,EAEvB;AAAA,EACD,WAAWX,GAAG;AACZ,QAAIY,IAAQ,KAAK,MAAMZ,CAAC;AACxB,QAAIY;AACF,aAAOf,EAAOe,CAAK;AAAA,EAEtB;AAAA,EACD,UAAUZ,GAAG;AACX,QAAIa,IAAQ,KAAK,aAAab,CAAC;AAC/B,QAAIa;AACF,aAAOC,GAAQD,GAAO,KAAK,WAAWb,CAAC,CAAC;AAAA,EAE3C;AAAA,EACD,OAAOA,GAAG;AACR,QAAIe;AACJ,WAAI,KAAK,eACPA,IAAY,KAAK,WAAWf,CAAC,IAE7Be,IAAY,KAAK,UAAUf,CAAC,GAEvBe,EAAU,WAAW;AAAA,EAC7B;AAAA,EACD,YAAY5G,GAAQ;AAElB,QAAI6G,IAAO,IAAI,KAAK,YAAY;AAAA,MAC9B,UAAU,KAAK;AAAA,MACf,YAAY,KAAK;AAAA,MACjB,UAAU,KAAK;AAAA,IACrB,CAAK;AAED,IAAAA,EAAK,SAAS,KAAK,MAAO,CAAA;AAE1B,QAAIlB,IAAO;AACXK,IAAAA,EAAO,KAAK,QAAQ,SAAUzc,GAAOsc,GAAG;AACtC,MAAI7F,EAAO6F,CAAC,KACVgB,EAAK,QAAQhB,GAAGtc,CAAK;AAAA,IAE7B,CAAK,GAEDyc,EAAO,KAAK,WAAW,SAAUE,GAAG;AAElC,MAAIW,EAAK,QAAQX,EAAE,CAAC,KAAKW,EAAK,QAAQX,EAAE,CAAC,KACvCW,EAAK,QAAQX,GAAGP,EAAK,KAAKO,CAAC,CAAC;AAAA,IAEpC,CAAK;AAED,QAAIY,IAAU,CAAA;AACd,aAASC,EAAWlB,GAAG;AACrB,UAAIO,IAAST,EAAK,OAAOE,CAAC;AAC1B,aAAIO,MAAW,UAAaS,EAAK,QAAQT,CAAM,KAC7CU,EAAQjB,CAAC,IAAIO,GACNA,KACEA,KAAUU,IACZA,EAAQV,CAAM,IAEdW,EAAWX,CAAM;AAAA,IAE3B;AAED,WAAI,KAAK,eACPJ,EAAOa,EAAK,MAAO,GAAE,SAAUhB,GAAG;AAChC,MAAAgB,EAAK,UAAUhB,GAAGkB,EAAWlB,CAAC,CAAC;AAAA,IACvC,CAAO,GAGIgB;AAAA,EACR;AAAA;AAAA,EAED,oBAAoBrB,GAAY;AAC9B,WAAKC,GAAaD,CAAU,MAC1BA,IAAaF,EAAWE,CAAU,IAEpC,KAAK,sBAAsBA,GACpB;AAAA,EACR;AAAA,EACD,YAAY;AACV,WAAO,KAAK;AAAA,EACb;AAAA,EACD,QAAQ;AACN,WAAOwB,EAAS,KAAK,SAAS;AAAA,EAC/B;AAAA,EACD,QAAQjB,GAAIxc,GAAO;AACjB,QAAIoc,IAAO,MACPzZ,IAAO;AACX+a,WAAAA,GAASlB,GAAI,SAAUF,GAAGqB,GAAG;AAC3B,aAAIhb,EAAK,SAAS,IAChByZ,EAAK,QAAQE,GAAGqB,GAAG3d,CAAK,IAExBoc,EAAK,QAAQE,GAAGqB,CAAC,GAEZA;AAAA,IACb,CAAK,GACM;AAAA,EACR;AAAA;AAAA;AAAA;AAAA;AAAA,EAKD,UAAU;AACR,QAAIrB,GAAGqB,GAAGC,GAAM5d,GACZ6d,IAAiB,IACjBC,IAAO,UAAU,CAAC;AAEtB,IAAI,OAAOA,KAAS,YAAYA,MAAS,QAAQ,OAAOA,KACtDxB,IAAIwB,EAAK,GACTH,IAAIG,EAAK,GACTF,IAAOE,EAAK,MACR,UAAU,WAAW,MACvB9d,IAAQ,UAAU,CAAC,GACnB6d,IAAiB,QAGnBvB,IAAIwB,GACJH,IAAI,UAAU,CAAC,GACfC,IAAO,UAAU,CAAC,GACd,UAAU,SAAS,MACrB5d,IAAQ,UAAU,CAAC,GACnB6d,IAAiB,MAIrBvB,IAAI,KAAKA,GACTqB,IAAI,KAAKA,GACJb,EAAcc,CAAI,MACrBA,IAAO,KAAKA;AAGd,QAAIjB,IAAIoB,EAAa,KAAK,aAAazB,GAAGqB,GAAGC,CAAI;AACjD,QAAI9B,EAAM,KAAK,aAAaa,CAAC;AAC3B,aAAIkB,MACF,KAAK,YAAYlB,CAAC,IAAI3c,IAEjB;AAGT,QAAI,CAAC8c,EAAcc,CAAI,KAAK,CAAC,KAAK;AAChC,YAAM,IAAI,MAAM,mDAAmD;AAKrE,SAAK,QAAQtB,CAAC,GACd,KAAK,QAAQqB,CAAC,GAGd,KAAK,YAAYhB,CAAC,IAAIkB,IAAiB7d,IAAQ,KAAK,oBAAoBsc,GAAGqB,GAAGC,CAAI;AAElF,QAAII,IAAUC,GAAc,KAAK,aAAa3B,GAAGqB,GAAGC,CAAI;AAExD,WAAAtB,IAAI0B,EAAQ,GACZL,IAAIK,EAAQ,GAEZ,OAAO,OAAOA,CAAO,GACrB,KAAK,UAAUrB,CAAC,IAAIqB,GACpBE,GAAqB,KAAK,OAAOP,CAAC,GAAGrB,CAAC,GACtC4B,GAAqB,KAAK,MAAM5B,CAAC,GAAGqB,CAAC,GACrC,KAAK,IAAIA,CAAC,EAAEhB,CAAC,IAAIqB,GACjB,KAAK,KAAK1B,CAAC,EAAEK,CAAC,IAAIqB,GAClB,KAAK,cACE;AAAA,EACR;AAAA,EACD,KAAK1B,GAAGqB,GAAGC,GAAM;AACf,QAAIjB,IACF,UAAU,WAAW,IACjBwB,GAAY,KAAK,aAAa,UAAU,CAAC,CAAC,IAC1CJ,EAAa,KAAK,aAAazB,GAAGqB,GAAGC,CAAI;AAC/C,WAAO,KAAK,YAAYjB,CAAC;AAAA,EAC1B;AAAA,EACD,QAAQL,GAAGqB,GAAGC,GAAM;AAClB,QAAIjB,IACF,UAAU,WAAW,IACjBwB,GAAY,KAAK,aAAa,UAAU,CAAC,CAAC,IAC1CJ,EAAa,KAAK,aAAazB,GAAGqB,GAAGC,CAAI;AAC/C,WAAO9B,EAAM,KAAK,aAAaa,CAAC;AAAA,EACjC;AAAA,EACD,WAAWL,GAAGqB,GAAGC,GAAM;AACrB,QAAIjB,IACF,UAAU,WAAW,IACjBwB,GAAY,KAAK,aAAa,UAAU,CAAC,CAAC,IAC1CJ,EAAa,KAAK,aAAazB,GAAGqB,GAAGC,CAAI,GAC3CQ,IAAO,KAAK,UAAUzB,CAAC;AAC3B,WAAIyB,MACF9B,IAAI8B,EAAK,GACTT,IAAIS,EAAK,GACT,OAAO,KAAK,YAAYzB,CAAC,GACzB,OAAO,KAAK,UAAUA,CAAC,GACvB0B,GAAuB,KAAK,OAAOV,CAAC,GAAGrB,CAAC,GACxC+B,GAAuB,KAAK,MAAM/B,CAAC,GAAGqB,CAAC,GACvC,OAAO,KAAK,IAAIA,CAAC,EAAEhB,CAAC,GACpB,OAAO,KAAK,KAAKL,CAAC,EAAEK,CAAC,GACrB,KAAK,eAEA;AAAA,EACR;AAAA,EACD,QAAQL,GAAGgC,GAAG;AACZ,QAAIC,IAAM,KAAK,IAAIjC,CAAC;AACpB,QAAIiC,GAAK;AACP,UAAIC,IAAQf,EAASc,CAAG;AACxB,aAAKD,IAGEjC,EAASmC,GAAO,SAAUJ,GAAM;AACrC,eAAOA,EAAK,MAAME;AAAA,MAC1B,CAAO,IAJQE;AAAA,IAKV;AAAA,EACF;AAAA,EACD,SAASlC,GAAGqB,GAAG;AACb,QAAIc,IAAO,KAAK,KAAKnC,CAAC;AACtB,QAAImC,GAAM;AACR,UAAID,IAAQf,EAASgB,CAAI;AACzB,aAAKd,IAGEtB,EAASmC,GAAO,SAAUJ,GAAM;AACrC,eAAOA,EAAK,MAAMT;AAAA,MAC1B,CAAO,IAJQa;AAAA,IAKV;AAAA,EACF;AAAA,EACD,UAAUlC,GAAGqB,GAAG;AACd,QAAIe,IAAU,KAAK,QAAQpC,GAAGqB,CAAC;AAC/B,QAAIe;AACF,aAAOA,EAAQ,OAAO,KAAK,SAASpC,GAAGqB,CAAC,CAAC;AAAA,EAE5C;AACH;AAGA/B,EAAM,UAAU,aAAa;AAG7BA,EAAM,UAAU,aAAa;AAE7B,SAASsC,GAAqBvM,GAAKgN,GAAG;AACpC,EAAIhN,EAAIgN,CAAC,IACPhN,EAAIgN,CAAC,MAELhN,EAAIgN,CAAC,IAAI;AAEb;AAEA,SAASN,GAAuB1M,GAAKgN,GAAG;AACtC,EAAK,EAAEhN,EAAIgN,CAAC,KACV,OAAOhN,EAAIgN,CAAC;AAEhB;AAEA,SAASZ,EAAaa,GAAYC,GAAIC,GAAIlB,GAAM;AAC9C,MAAItB,IAAI,KAAKuC,GACTlB,IAAI,KAAKmB;AACb,MAAI,CAACF,KAActC,IAAIqB,GAAG;AACxB,QAAIoB,IAAMzC;AACV,IAAAA,IAAIqB,GACJA,IAAIoB;AAAA,EACL;AACD,SAAOzC,IAAIX,KAAiBgC,IAAIhC,MAAkBmB,EAAcc,CAAI,IAAInC,KAAoBmC;AAC9F;AAEA,SAASK,GAAcW,GAAYC,GAAIC,GAAIlB,GAAM;AAC/C,MAAItB,IAAI,KAAKuC,GACTlB,IAAI,KAAKmB;AACb,MAAI,CAACF,KAActC,IAAIqB,GAAG;AACxB,QAAIoB,IAAMzC;AACV,IAAAA,IAAIqB,GACJA,IAAIoB;AAAA,EACL;AACD,MAAIf,IAAU,EAAE,GAAG1B,GAAG,GAAGqB,EAAC;AAC1B,SAAIC,MACFI,EAAQ,OAAOJ,IAEVI;AACT;AAEA,SAASG,GAAYS,GAAYZ,GAAS;AACxC,SAAOD,EAAaa,GAAYZ,EAAQ,GAAGA,EAAQ,GAAGA,EAAQ,IAAI;AACpE;ACtfA,MAAMgB,GAAK;AAAA,EACT,cAAc;AACZ,QAAIC,IAAW,CAAA;AACf,IAAAA,EAAS,QAAQA,EAAS,QAAQA,GAClC,KAAK,YAAYA;AAAA,EAClB;AAAA,EACD,UAAU;AACR,QAAIA,IAAW,KAAK,WAChBC,IAAQD,EAAS;AACrB,QAAIC,MAAUD;AACZ,aAAAE,GAAOD,CAAK,GACLA;AAAA,EAEV;AAAA,EACD,QAAQA,GAAO;AACb,QAAID,IAAW,KAAK;AACpB,IAAIC,EAAM,SAASA,EAAM,SACvBC,GAAOD,CAAK,GAEdA,EAAM,QAAQD,EAAS,OACvBA,EAAS,MAAM,QAAQC,GACvBD,EAAS,QAAQC,GACjBA,EAAM,QAAQD;AAAA,EACf;AAAA,EACD,WAAW;AAIT,aAHIG,IAAO,CAAA,GACPH,IAAW,KAAK,WAChBI,IAAOJ,EAAS,OACbI,MAASJ;AACd,MAAAG,EAAK,KAAK,KAAK,UAAUC,GAAMC,EAAc,CAAC,GAC9CD,IAAOA,EAAK;AAEd,WAAO,MAAMD,EAAK,KAAK,IAAI,IAAI;AAAA,EAChC;AACH;AAEA,SAASD,GAAOD,GAAO;AACrB,EAAAA,EAAM,MAAM,QAAQA,EAAM,OAC1BA,EAAM,MAAM,QAAQA,EAAM,OAC1B,OAAOA,EAAM,OACb,OAAOA,EAAM;AACf;AAEA,SAASI,GAAeX,GAAGrC,GAAG;AAC5B,MAAIqC,MAAM,WAAWA,MAAM;AACzB,WAAOrC;AAEX;ACzCA,IAAIiD,KAAoBxD,EAAW,CAAC;AAEpC,SAASyD,GAAUC,GAAGC,GAAU;AAC9B,MAAID,EAAE,UAAW,KAAI;AACnB,WAAO;AAET,MAAIE,IAAQC,GAAWH,GAAGC,KAAYH,EAAiB,GACnDM,IAAUC,GAAYH,EAAM,OAAOA,EAAM,SAASA,EAAM,OAAO;AAGnE,SAAOI;AAAAA,IACLC,EAAMH,GAAS,SAAUlD,GAAG;AAC1B,aAAO8C,EAAE,SAAS9C,EAAE,GAAGA,EAAE,CAAC;AAAA,IAChC,CAAK;AAAA,EACL;AACA;AAEA,SAASmD,GAAYL,GAAGQ,GAASC,GAAS;AAMxC,WALIL,IAAU,CAAA,GACV3Z,IAAU+Z,EAAQA,EAAQ,SAAS,CAAC,GACpCE,IAAQF,EAAQ,CAAC,GAEjBf,GACGO,EAAE,eAAa;AACpB,WAAQP,IAAQiB,EAAM;AACpB,MAAAC,GAAWX,GAAGQ,GAASC,GAAShB,CAAK;AAEvC,WAAQA,IAAQhZ,EAAQ;AACtB,MAAAka,GAAWX,GAAGQ,GAASC,GAAShB,CAAK;AAEvC,QAAIO,EAAE;AACJ,eAASY,IAAIJ,EAAQ,SAAS,GAAGI,IAAI,GAAG,EAAEA;AAExC,YADAnB,IAAQe,EAAQI,CAAC,EAAE,QAAO,GACtBnB,GAAO;AACT,UAAAW,IAAUA,EAAQ,OAAOO,GAAWX,GAAGQ,GAASC,GAAShB,GAAO,EAAI,CAAC;AACrE;AAAA,QACD;AAAA;AAAA,EAGN;AAED,SAAOW;AACT;AAEA,SAASO,GAAWX,GAAGQ,GAASC,GAAShB,GAAOoB,GAAqB;AACnE,MAAIT,IAAUS,IAAsB,CAAE,IAAG;AAEzCC,SAAAA,EAAUd,EAAE,QAAQP,EAAM,CAAC,GAAG,SAAUd,GAAM;AAC5C,QAAIoC,IAASf,EAAE,KAAKrB,CAAI,GACpBqC,IAAShB,EAAE,KAAKrB,EAAK,CAAC;AAE1B,IAAIkC,KACFT,EAAQ,KAAK,EAAE,GAAGzB,EAAK,GAAG,GAAGA,EAAK,EAAC,CAAE,GAGvCqC,EAAO,OAAOD,GACdE,GAAaT,GAASC,GAASO,CAAM;AAAA,EACzC,CAAG,GAEDF,EAAUd,EAAE,SAASP,EAAM,CAAC,GAAG,SAAUd,GAAM;AAC7C,QAAIoC,IAASf,EAAE,KAAKrB,CAAI,GACpBT,IAAIS,EAAK,GACTuC,IAASlB,EAAE,KAAK9B,CAAC;AACrB,IAAAgD,EAAO,MAASH,GAChBE,GAAaT,GAASC,GAASS,CAAM;AAAA,EACzC,CAAG,GAEDlB,EAAE,WAAWP,EAAM,CAAC,GAEbW;AACT;AAEA,SAASD,GAAWH,GAAGC,GAAU;AAC/B,MAAIkB,IAAW,IAAIhF,KACfiF,IAAQ,GACRC,IAAS;AAEbP,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,IAAAsE,EAAS,QAAQtE,GAAG,EAAE,GAAGA,GAAG,IAAI,GAAG,KAAK,EAAC,CAAE;AAAA,EAC/C,CAAG,GAIDiE,EAAUd,EAAE,MAAO,GAAE,SAAU9C,GAAG;AAChC,QAAIoE,IAAaH,EAAS,KAAKjE,EAAE,GAAGA,EAAE,CAAC,KAAK,GACxC6D,IAASd,EAAS/C,CAAC,GACnBqE,IAAaD,IAAaP;AAC9B,IAAAI,EAAS,QAAQjE,EAAE,GAAGA,EAAE,GAAGqE,CAAU,GACrCF,IAAS,KAAK,IAAIA,GAASF,EAAS,KAAKjE,EAAE,CAAC,EAAE,OAAO6D,CAAM,GAC3DK,IAAQ,KAAK,IAAIA,GAAQD,EAAS,KAAKjE,EAAE,CAAC,EAAE,MAAS6D,CAAM;AAAA,EAC/D,CAAG;AAED,MAAIP,IAAUgB,EAAQH,IAASD,IAAQ,CAAC,EAAE,IAAI,WAAY;AACxD,WAAO,IAAI7B,GAAI;AAAA,EACnB,CAAG,GACGkB,IAAUW,IAAQ;AAEtBN,SAAAA,EAAUK,EAAS,MAAO,GAAE,SAAUtE,GAAG;AACvC,IAAAoE,GAAaT,GAASC,GAASU,EAAS,KAAKtE,CAAC,CAAC;AAAA,EACnD,CAAG,GAEM,EAAE,OAAOsE,GAAU,SAASX,GAAS,SAASC;AACvD;AAEA,SAASQ,GAAaT,GAASC,GAAShB,GAAO;AAC7C,EAAKA,EAAM,MAECA,EAAM,KAGhBe,EAAQf,EAAM,MAAMA,EAAM,KAAQgB,CAAO,EAAE,QAAQhB,CAAK,IAFxDe,EAAQA,EAAQ,SAAS,CAAC,EAAE,QAAQf,CAAK,IAFzCe,EAAQ,CAAC,EAAE,QAAQf,CAAK;AAM5B;ACxHA,SAASgC,GAAIzB,GAAG;AACd,MAAI0B,IAAM1B,EAAE,MAAK,EAAG,cAAc,WAAWD,GAAUC,GAAGC,EAASD,CAAC,CAAC,IAAI2B,GAAO3B,CAAC;AACjFc,EAAAA,EAAUY,GAAK,SAAUxE,GAAG;AAC1B,QAAIX,IAAQyD,EAAE,KAAK9C,CAAC;AACpB,IAAA8C,EAAE,WAAW9C,CAAC,GACdX,EAAM,cAAcW,EAAE,MACtBX,EAAM,WAAW,IACjByD,EAAE,QAAQ9C,EAAE,GAAGA,EAAE,GAAGX,GAAOqF,GAAW,KAAK,CAAC;AAAA,EAChD,CAAG;AAED,WAAS3B,EAASD,GAAG;AACnB,WAAO,SAAU9C,GAAG;AAClB,aAAO8C,EAAE,KAAK9C,CAAC,EAAE;AAAA,IACvB;AAAA,EACG;AACH;AAEA,SAASyE,GAAO3B,GAAG;AACjB,MAAI0B,IAAM,CAAA,GACNpR,IAAQ,CAAA,GACRuR,IAAU,CAAA;AAEd,WAASC,EAAIjF,GAAG;AACd,IAAIR,EAAMwF,GAAShF,CAAC,MAGpBgF,EAAQhF,CAAC,IAAI,IACbvM,EAAMuM,CAAC,IAAI,IACXiE,EAAUd,EAAE,SAASnD,CAAC,GAAG,SAAUK,GAAG;AACpC,MAAIb,EAAM/L,GAAO4M,EAAE,CAAC,IAClBwE,EAAI,KAAKxE,CAAC,IAEV4E,EAAI5E,EAAE,CAAC;AAAA,IAEf,CAAK,GACD,OAAO5M,EAAMuM,CAAC;AAAA,EACf;AAEDiE,SAAAA,EAAUd,EAAE,MAAO,GAAE8B,CAAG,GACjBJ;AACT;AAEA,SAASK,GAAK/B,GAAG;AACfc,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAU,GAAG;AAChC,QAAIzD,IAAQyD,EAAE,KAAK,CAAC;AACpB,QAAIzD,EAAM,UAAU;AAClB,MAAAyD,EAAE,WAAW,CAAC;AAEd,UAAIgC,IAAczF,EAAM;AACxB,aAAOA,EAAM,UACb,OAAOA,EAAM,aACbyD,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAGzD,GAAOyF,CAAW;AAAA,IACvC;AAAA,EACL,CAAG;AACH;ACpCA,SAASC,EAAajC,GAAG9a,GAAMgd,GAAO/D,GAAM;AAC1C,MAAItB;AACJ;AACE,IAAAA,IAAI+E,GAAWzD,CAAI;AAAA,SACZ6B,EAAE,QAAQnD,CAAC;AAEpB,SAAAqF,EAAM,QAAQhd,GACd8a,EAAE,QAAQnD,GAAGqF,CAAK,GACXrF;AACT;AAMA,SAASsF,GAASnC,GAAG;AACnB,MAAIoC,IAAa,IAAIjG,EAAO,EAAC,SAAS6D,EAAE,MAAK,CAAE;AAC/Cc,SAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,IAAAuF,EAAW,QAAQvF,GAAGmD,EAAE,KAAKnD,CAAC,CAAC;AAAA,EACnC,CAAG,GACDiE,EAAUd,EAAE,MAAO,GAAE,SAAU9C,GAAG;AAChC,QAAImF,IAAcD,EAAW,KAAKlF,EAAE,GAAGA,EAAE,CAAC,KAAK,EAAE,QAAQ,GAAG,QAAQ,EAAC,GACjEX,IAAQyD,EAAE,KAAK9C,CAAC;AACpB,IAAAkF,EAAW,QAAQlF,EAAE,GAAGA,EAAE,GAAG;AAAA,MAC3B,QAAQmF,EAAY,SAAS9F,EAAM;AAAA,MACnC,QAAQ,KAAK,IAAI8F,EAAY,QAAQ9F,EAAM,MAAM;AAAA,IACvD,CAAK;AAAA,EACL,CAAG,GACM6F;AACT;AAEA,SAASE,GAAmBtC,GAAG;AAC7B,MAAIoC,IAAa,IAAIjG,EAAM,EAAE,YAAY6D,EAAE,aAAc,EAAA,CAAE,EAAE,SAASA,EAAE,MAAO,CAAA;AAC/Ec,SAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,IAAKmD,EAAE,SAASnD,CAAC,EAAE,UACjBuF,EAAW,QAAQvF,GAAGmD,EAAE,KAAKnD,CAAC,CAAC;AAAA,EAErC,CAAG,GACDiE,EAAUd,EAAE,MAAO,GAAE,SAAU9C,GAAG;AAChC,IAAAkF,EAAW,QAAQlF,GAAG8C,EAAE,KAAK9C,CAAC,CAAC;AAAA,EACnC,CAAG,GACMkF;AACT;AA4BA,SAASG,GAAcC,GAAMC,GAAO;AAClC,MAAIC,IAAIF,EAAK,GACTG,IAAIH,EAAK,GAITI,IAAKH,EAAM,IAAIC,GACfG,IAAKJ,EAAM,IAAIE,GACfzE,IAAIsE,EAAK,QAAQ,GACjBM,IAAIN,EAAK,SAAS;AAEtB,MAAI,CAACI,KAAM,CAACC;AACV,UAAM,IAAI,MAAM,2DAA2D;AAG7E,MAAIE,GAAIC;AACR,SAAI,KAAK,IAAIH,CAAE,IAAI3E,IAAI,KAAK,IAAI0E,CAAE,IAAIE,KAEhCD,IAAK,MACPC,IAAI,CAACA,IAEPC,IAAMD,IAAIF,IAAMC,GAChBG,IAAKF,MAGDF,IAAK,MACP1E,IAAI,CAACA,IAEP6E,IAAK7E,GACL8E,IAAM9E,IAAI2E,IAAMD,IAGX,EAAE,GAAGF,IAAIK,GAAI,GAAGJ,IAAIK;AAC7B;AAMA,SAASC,GAAiBjD,GAAG;AAC3B,MAAIkD,IAAW3C,EAAMiB,EAAQ2B,GAAQnD,CAAC,IAAI,CAAC,GAAG,WAAY;AACxD,WAAO;EACX,CAAG;AACDc,SAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,QAAIuG,IAAOpD,EAAE,KAAKnD,CAAC,GACfwG,IAAOD,EAAK;AAChB,IAAK/F,EAAcgG,CAAI,MACrBH,EAASG,CAAI,EAAED,EAAK,KAAK,IAAIvG;AAAA,EAEnC,CAAG,GACMqG;AACT;AAMA,SAASI,GAAetD,GAAG;AACzB,MAAI3H,IAAMkL;AAAAA,IACRhD,EAAMP,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAC5B,aAAOmD,EAAE,KAAKnD,CAAC,EAAE;AAAA,IACvB,CAAK;AAAA,EACL;AACEiE,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,QAAIuG,IAAOpD,EAAE,KAAKnD,CAAC;AACnB,IAAIR,EAAM+G,GAAM,MAAM,MACpBA,EAAK,QAAQ/K;AAAAA,EAEnB,CAAG;AACH;AAEA,SAASmL,GAAiBxD,GAAG;AAE3B,MAAI3W,IAASka;AAAAA,IACXhD,EAAMP,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAC5B,aAAOmD,EAAE,KAAKnD,CAAC,EAAE;AAAA,IACvB,CAAK;AAAA,EACL,GAEM4G,IAAS,CAAA;AACb3C,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,QAAIwG,IAAOrD,EAAE,KAAKnD,CAAC,EAAE,OAAOxT;AAC5B,IAAKoa,EAAOJ,CAAI,MACdI,EAAOJ,CAAI,IAAI,KAEjBI,EAAOJ,CAAI,EAAE,KAAKxG,CAAC;AAAA,EACvB,CAAG;AAED,MAAI6G,IAAQ,GACRC,IAAiB3D,EAAE,MAAK,EAAG;AAC/Bc,EAAAA,EAAU2C,GAAQ,SAAU1G,GAAI6D,GAAG;AACjC,IAAIvD,EAAcN,CAAE,KAAK6D,IAAI+C,MAAmB,IAC9C,EAAED,IACOA,KACT5C,EAAU/D,GAAI,SAAUF,GAAG;AACzB,MAAAmD,EAAE,KAAKnD,CAAC,EAAE,QAAQ6G;AAAA,IAC1B,CAAO;AAAA,EAEP,CAAG;AACH;AAEA,SAASE,GAAc5D,GAAGtE,GAAQ2H,GAAMzJ,GAAO;AAC7C,MAAIwJ,IAAO;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,EACZ;AACE,SAAI,UAAU,UAAU,MACtBA,EAAK,OAAOC,GACZD,EAAK,QAAQxJ,IAERqI,EAAajC,GAAG,UAAUoD,GAAM1H,CAAM;AAC/C;AAEA,SAASyH,GAAQnD,GAAG;AAClB,SAAO6D;AAAAA,IACLtD,EAAMP,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAC5B,UAAIwG,IAAOrD,EAAE,KAAKnD,CAAC,EAAE;AACrB,UAAI,CAACQ,EAAcgG,CAAI;AACrB,eAAOA;AAAA,IAEf,CAAK;AAAA,EACL;AACA;AAOA,SAASS,GAAUzO,GAAY0O,GAAI;AACjC,MAAIhjB,IAAS,EAAE,KAAK,CAAE,GAAE,KAAK,CAAE,EAAA;AAC/B+f,SAAAA,EAAUzL,GAAY,SAAU9U,GAAO;AACrC,IAAIwjB,EAAGxjB,CAAK,IACVQ,EAAO,IAAI,KAAKR,CAAK,IAErBQ,EAAO,IAAI,KAAKR,CAAK;AAAA,EAE3B,CAAG,GACMQ;AACT;AAMA,SAASijB,GAAK7F,GAAM4F,GAAI;AACtB,MAAI9d,IAAQge;AACZ,MAAI;AACF,WAAOF,EAAE;AAAA,EACb,UAAY;AACR,YAAQ,IAAI5F,IAAO,aAAa8F,GAAK,IAAKhe,KAAS,IAAI;AAAA,EACxD;AACH;AAEA,SAASie,GAAO/F,GAAM4F,GAAI;AACxB,SAAOA,EAAE;AACX;ACpPA,SAASI,GAAkBnE,GAAG;AAC5B,WAAS8B,EAAIjF,GAAG;AACd,QAAIU,IAAWyC,EAAE,SAASnD,CAAC,GACvBuG,IAAOpD,EAAE,KAAKnD,CAAC;AAKnB,QAJIU,EAAS,UACXuD,EAAUvD,GAAUuE,CAAG,GAGrBzF,EAAM+G,GAAM,SAAS,GAAG;AAC1B,MAAAA,EAAK,aAAa,IAClBA,EAAK,cAAc;AACnB,eAASC,IAAOD,EAAK,SAASD,IAAUC,EAAK,UAAU,GAAGC,IAAOF,GAAS,EAAEE;AAC1E,QAAAO,GAAc5D,GAAG,cAAc,OAAOnD,GAAGuG,GAAMC,CAAI,GACnDO,GAAc5D,GAAG,eAAe,OAAOnD,GAAGuG,GAAMC,CAAI;AAAA,IAEvD;AAAA,EACF;AAEDvC,EAAAA,EAAUd,EAAE,SAAU,GAAE8B,CAAG;AAC7B;AAEA,SAAS8B,GAAc5D,GAAGoE,GAAM1I,GAAQ2I,GAAIC,GAAQjB,GAAM;AACxD,MAAI9G,IAAQ,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM8G,GAAM,YAAYe,KACvDG,IAAOD,EAAOF,CAAI,EAAEf,IAAO,CAAC,GAC5BzD,IAAO4E,EAAkBxE,GAAG,UAAUzD,GAAOb,CAAM;AACvD,EAAA4I,EAAOF,CAAI,EAAEf,CAAI,IAAIzD,GACrBI,EAAE,UAAUJ,GAAMyE,CAAE,GAChBE,KACFvE,EAAE,QAAQuE,GAAM3E,GAAM,EAAE,QAAQ,EAAC,CAAE;AAEvC;AC/BA,SAAS6E,GAAOzE,GAAG;AACjB,MAAI0E,IAAU1E,EAAE,MAAO,EAAC,QAAQ,YAAW;AAC3C,GAAI0E,MAAY,QAAQA,MAAY,SAClCC,GAAgB3E,CAAC;AAErB;AAEA,SAAS+B,GAAK/B,GAAG;AACf,MAAI0E,IAAU1E,EAAE,MAAO,EAAC,QAAQ,YAAW;AAC3C,GAAI0E,MAAY,QAAQA,MAAY,SAClCE,GAAS5E,CAAC,IAGR0E,MAAY,QAAQA,MAAY,UAClCG,GAAO7E,CAAC,GACR2E,GAAgB3E,CAAC;AAErB;AAEA,SAAS2E,GAAgB3E,GAAG;AAC1Bc,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,IAAAiI,GAAmB9E,EAAE,KAAKnD,CAAC,CAAC;AAAA,EAChC,CAAG,GACDiE,EAAUd,EAAE,MAAO,GAAE,SAAU,GAAG;AAChC,IAAA8E,GAAmB9E,EAAE,KAAK,CAAC,CAAC;AAAA,EAChC,CAAG;AACH;AAEA,SAAS8E,GAAmB5C,GAAO;AACjC,MAAIhE,IAAIgE,EAAM;AACd,EAAAA,EAAM,QAAQA,EAAM,QACpBA,EAAM,SAAShE;AACjB;AAEA,SAAS0G,GAAS5E,GAAG;AACnBc,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,IAAAkI,GAAY/E,EAAE,KAAKnD,CAAC,CAAC;AAAA,EACzB,CAAG,GAEDiE,EAAUd,EAAE,MAAO,GAAE,SAAU,GAAG;AAChC,QAAIrB,IAAOqB,EAAE,KAAK,CAAC;AACnBc,IAAAA,EAAUnC,EAAK,QAAQoG,EAAW,GAC9B1I,EAAMsC,GAAM,GAAG,KACjBoG,GAAYpG,CAAI;AAAA,EAEtB,CAAG;AACH;AAEA,SAASoG,GAAY7C,GAAO;AAC1B,EAAAA,EAAM,IAAI,CAACA,EAAM;AACnB;AAEA,SAAS2C,GAAO7E,GAAG;AACjBc,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,IAAAmI,GAAUhF,EAAE,KAAKnD,CAAC,CAAC;AAAA,EACvB,CAAG,GAEDiE,EAAUd,EAAE,MAAO,GAAE,SAAU,GAAG;AAChC,QAAIrB,IAAOqB,EAAE,KAAK,CAAC;AACnBc,IAAAA,EAAUnC,EAAK,QAAQqG,EAAS,GAC5B3I,EAAMsC,GAAM,GAAG,KACjBqG,GAAUrG,CAAI;AAAA,EAEpB,CAAG;AACH;AAEA,SAASqG,GAAU9C,GAAO;AACxB,MAAIQ,IAAIR,EAAM;AACd,EAAAA,EAAM,IAAIA,EAAM,GAChBA,EAAM,IAAIQ;AACZ;ACrDA,SAASjB,GAAIzB,GAAG;AACd,EAAAA,EAAE,MAAK,EAAG,cAAc,IACxBc,EAAUd,EAAE,MAAO,GAAE,SAAUrB,GAAM;AACnC,IAAAsG,GAAcjF,GAAGrB,CAAI;AAAA,EACzB,CAAG;AACH;AAEA,SAASsG,GAAcjF,GAAG,GAAG;AAC3B,MAAInD,IAAI,EAAE,GACNqI,IAAQlF,EAAE,KAAKnD,CAAC,EAAE,MAClBqB,IAAI,EAAE,GACNiH,IAAQnF,EAAE,KAAK9B,CAAC,EAAE,MAClBC,IAAO,EAAE,MACTiH,IAAYpF,EAAE,KAAK,CAAC,GACpBqF,IAAYD,EAAU;AAE1B,MAAID,MAAUD,IAAQ,GAEtB;AAAA,IAAAlF,EAAE,WAAW,CAAC;AAEd,QAAIsF,GAAOpD,GAAOtB;AAClB,SAAKA,IAAI,GAAG,EAAEsE,GAAOA,IAAQC,GAAO,EAAEvE,GAAG,EAAEsE;AACzC,MAAAE,EAAU,SAAS,IACnBlD,IAAQ;AAAA,QACN,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,WAAWkD;AAAA,QACX,SAAS;AAAA,QACT,MAAMF;AAAA,MACZ,GACII,IAAQd,EAAkBxE,GAAG,QAAQkC,GAAO,IAAI,GAC5CgD,MAAUG,MACZnD,EAAM,QAAQkD,EAAU,OACxBlD,EAAM,SAASkD,EAAU,QAEzBlD,EAAM,QAAQ,cAEdA,EAAM,WAAWkD,EAAU,WAE7BpF,EAAE,QAAQnD,GAAGyI,GAAO,EAAE,QAAQF,EAAU,UAAUjH,CAAI,GAClDyC,MAAM,KACRZ,EAAE,MAAO,EAAC,YAAY,KAAKsF,CAAK,GAElCzI,IAAIyI;AAGN,IAAAtF,EAAE,QAAQnD,GAAGqB,GAAG,EAAE,QAAQkH,EAAU,UAAUjH,CAAI;AAAA;AACpD;AAEA,SAAS4D,GAAK/B,GAAG;AACfc,EAAAA,EAAUd,EAAE,MAAO,EAAC,aAAa,SAAUnD,GAAG;AAC5C,QAAIuG,IAAOpD,EAAE,KAAKnD,CAAC,GACf0I,IAAYnC,EAAK,WACjBlF;AAEJ,SADA8B,EAAE,QAAQoD,EAAK,SAASmC,CAAS,GAC1BnC,EAAK;AACV,MAAAlF,IAAI8B,EAAE,WAAWnD,CAAC,EAAE,CAAC,GACrBmD,EAAE,WAAWnD,CAAC,GACd0I,EAAU,OAAO,KAAK,EAAE,GAAGnC,EAAK,GAAG,GAAGA,EAAK,EAAC,CAAE,GAC1CA,EAAK,UAAU,iBACjBmC,EAAU,IAAInC,EAAK,GACnBmC,EAAU,IAAInC,EAAK,GACnBmC,EAAU,QAAQnC,EAAK,OACvBmC,EAAU,SAASnC,EAAK,SAE1BvG,IAAIqB,GACJkF,IAAOpD,EAAE,KAAKnD,CAAC;AAAA,EAErB,CAAG;AACH;ACjEA,SAAS2I,GAAYxF,GAAG;AACtB,MAAI6B,IAAU,CAAA;AAEd,WAASC,EAAIjF,GAAG;AACd,QAAIN,IAAQyD,EAAE,KAAKnD,CAAC;AACpB,QAAIR,EAAMwF,GAAShF,CAAC;AAClB,aAAON,EAAM;AAEf,IAAAsF,EAAQhF,CAAC,IAAI;AAEb,QAAIwG,IAAOE;AAAAA,MACThD,EAAMP,EAAE,SAASnD,CAAC,GAAG,SAAUK,GAAG;AAChC,eAAO4E,EAAI5E,EAAE,CAAC,IAAI8C,EAAE,KAAK9C,CAAC,EAAE;AAAA,MACpC,CAAO;AAAA,IACP;AAEI,YACEmG,MAAS,OAAO;AAAA,IAChBA,MAAS;AAAA,IACTA,MAAS,UAGTA,IAAO,IAGD9G,EAAM,OAAO8G;AAAA,EACtB;AAEDvC,EAAAA,EAAUd,EAAE,QAAS,GAAE8B,CAAG;AAC5B;AAMA,SAAS2D,EAAMzF,GAAG,GAAG;AACnB,SAAOA,EAAE,KAAK,EAAE,CAAC,EAAE,OAAOA,EAAE,KAAK,EAAE,CAAC,EAAE,OAAOA,EAAE,KAAK,CAAC,EAAE;AACzD;AC/BA,SAAS0F,GAAa1F,GAAG;AACvB,MAAI2F,IAAI,IAAIxJ,EAAM,EAAE,UAAU,GAAO,CAAA,GAGjClW,IAAQ+Z,EAAE,MAAO,EAAC,CAAC,GACnB4F,IAAO5F,EAAE;AACb,EAAA2F,EAAE,QAAQ1f,GAAO,CAAA,CAAE;AAGnB,WADI0Y,GAAM+E,GACHmC,GAAUF,GAAG3F,CAAC,IAAI4F;AACvB,IAAAjH,IAAOmH,GAAiBH,GAAG3F,CAAC,GAC5B0D,IAAQiC,EAAE,QAAQhH,EAAK,CAAC,IAAI8G,EAAMzF,GAAGrB,CAAI,IAAI,CAAC8G,EAAMzF,GAAGrB,CAAI,GAC3DoH,GAAWJ,GAAG3F,GAAG0D,CAAK;AAGxB,SAAOiC;AACT;AAMA,SAASE,GAAUF,GAAG3F,GAAG;AACvB,WAAS8B,EAAIjF,GAAG;AACdiE,IAAAA,EAAUd,EAAE,UAAUnD,CAAC,GAAG,SAAUK,GAAG;AACrC,UAAI8I,IAAQ9I,EAAE,GACZgB,IAAIrB,MAAMmJ,IAAQ9I,EAAE,IAAI8I;AAC1B,MAAI,CAACL,EAAE,QAAQzH,CAAC,KAAK,CAACuH,EAAMzF,GAAG9C,CAAC,MAC9ByI,EAAE,QAAQzH,GAAG,CAAA,CAAE,GACfyH,EAAE,QAAQ9I,GAAGqB,GAAG,CAAE,CAAA,GAClB4D,EAAI5D,CAAC;AAAA,IAEb,CAAK;AAAA,EACF;AAED4C,SAAAA,EAAU6E,EAAE,MAAO,GAAE7D,CAAG,GACjB6D,EAAE;AACX;AAMA,SAASG,GAAiBH,GAAG3F,GAAG;AAC9B,SAAOiG,GAAQjG,EAAE,MAAO,GAAE,SAAU9C,GAAG;AACrC,QAAIyI,EAAE,QAAQzI,EAAE,CAAC,MAAMyI,EAAE,QAAQzI,EAAE,CAAC;AAClC,aAAOuI,EAAMzF,GAAG9C,CAAC;AAAA,EAEvB,CAAG;AACH;AAEA,SAAS6I,GAAWJ,GAAG3F,GAAG0D,GAAO;AAC/B5C,EAAAA,EAAU6E,EAAE,MAAO,GAAE,SAAU9I,GAAG;AAChC,IAAAmD,EAAE,KAAKnD,CAAC,EAAE,QAAQ6G;AAAA,EACtB,CAAG;AACH;ACpDA,SAASwC,KAAiB;AAAE;AAC5BA,GAAe,YAAY,IAAI;ACvB/B,SAASpE,GAAI9B,GAAGjD,GAAInD,GAAO;AACzB,EAAKuM,EAAUpJ,CAAE,MACfA,IAAK,CAACA,CAAE;AAGV,MAAIqJ,KAAcpG,EAAE,eAAeA,EAAE,aAAaA,EAAE,WAAW,KAAKA,CAAC,GAEjEqG,IAAM,CAAA,GACNxE,IAAU,CAAA;AACd7E,SAAAA,EAAOD,GAAI,SAAUF,GAAG;AACtB,QAAI,CAACmD,EAAE,QAAQnD,CAAC;AACd,YAAM,IAAI,MAAM,+BAA+BA,CAAC;AAGlD,IAAAyJ,GAAMtG,GAAGnD,GAAGjD,MAAU,QAAQiI,GAASuE,GAAYC,CAAG;AAAA,EAC1D,CAAG,GACMA;AACT;AAEA,SAASC,GAAMtG,GAAGnD,GAAG0J,GAAW1E,GAASuE,GAAYC,GAAK;AACxD,EAAKhK,EAAMwF,GAAShF,CAAC,MACnBgF,EAAQhF,CAAC,IAAI,IAER0J,KACHF,EAAI,KAAKxJ,CAAC,GAEZG,EAAOoJ,EAAWvJ,CAAC,GAAG,SAAUqB,GAAG;AACjC,IAAAoI,GAAMtG,GAAG9B,GAAGqI,GAAW1E,GAASuE,GAAYC,CAAG;AAAA,EACrD,CAAK,GACGE,KACFF,EAAI,KAAKxJ,CAAC;AAGhB;ACzCA,SAAS0J,GAAUvG,GAAGjD,GAAI;AACxB,SAAO+E,GAAI9B,GAAGjD,GAAI,MAAM;AAC1B;ACFA,SAASyJ,GAASxG,GAAGjD,GAAI;AACvB,SAAO+E,GAAI9B,GAAGjD,GAAI,KAAK;AACzB;ACGA0J,EAAe,mBAAmBC;AAClCD,EAAe,gBAAgBE;AAC/BF,EAAe,eAAeG;AAC9BH,EAAe,YAAYI;AAC3BJ,EAAe,YAAYK;AAC3BL,EAAe,gBAAgBM;AAmC/B,SAASN,EAAezG,GAAG;AACzB,EAAAA,IAAImC,GAASnC,CAAC,GACdwF,GAAYxF,CAAC;AACb,MAAI2F,IAAID,GAAa1F,CAAC;AACtB,EAAA0G,GAAiBf,CAAC,GAClBgB,GAAchB,GAAG3F,CAAC;AAGlB,WADI9C,GAAG8J,GACC9J,IAAI2J,GAAUlB,CAAC;AACrB,IAAAqB,IAAIF,GAAUnB,GAAG3F,GAAG9C,CAAC,GACrB6J,GAAcpB,GAAG3F,GAAG9C,GAAG8J,CAAC;AAE5B;AAKA,SAASL,GAAchB,GAAG3F,GAAG;AAC3B,MAAIjD,IAAKkK,GAActB,GAAGA,EAAE,MAAO,CAAA;AACnC,EAAA5I,IAAKA,EAAG,MAAM,GAAGA,EAAG,SAAS,CAAC,GAC9B+D,EAAU/D,GAAI,SAAUF,GAAG;AACzB,IAAAqK,GAAevB,GAAG3F,GAAGnD,CAAC;AAAA,EAC1B,CAAG;AACH;AAEA,SAASqK,GAAevB,GAAG3F,GAAG7C,GAAO;AACnC,MAAIgK,IAAWxB,EAAE,KAAKxI,CAAK,GACvBC,IAAS+J,EAAS;AACtB,EAAAxB,EAAE,KAAKxI,GAAOC,CAAM,EAAE,WAAWwJ,GAAajB,GAAG3F,GAAG7C,CAAK;AAC3D;AAMA,SAASyJ,GAAajB,GAAG3F,GAAG7C,GAAO;AACjC,MAAIgK,IAAWxB,EAAE,KAAKxI,CAAK,GACvBC,IAAS+J,EAAS,QAElBC,IAAc,IAEdC,IAAYrH,EAAE,KAAK7C,GAAOC,CAAM,GAEhCkK,IAAW;AAEf,SAAKD,MACHD,IAAc,IACdC,IAAYrH,EAAE,KAAK5C,GAAQD,CAAK,IAGlCmK,IAAWD,EAAU,QAErBvG,EAAUd,EAAE,UAAU7C,CAAK,GAAG,SAAUD,GAAG;AACzC,QAAIqK,IAAYrK,EAAE,MAAMC,GACtBjb,IAAQqlB,IAAYrK,EAAE,IAAIA,EAAE;AAE9B,QAAIhb,MAAUkb,GAAQ;AACpB,UAAIoK,IAAeD,MAAcH,GAC/BK,IAAczH,EAAE,KAAK9C,CAAC,EAAE;AAG1B,UADAoK,KAAYE,IAAeC,IAAc,CAACA,GACtCC,GAAW/B,GAAGxI,GAAOjb,CAAK,GAAG;AAC/B,YAAIylB,IAAgBhC,EAAE,KAAKxI,GAAOjb,CAAK,EAAE;AACzC,QAAAolB,KAAYE,IAAe,CAACG,IAAgBA;AAAA,MAC7C;AAAA,IACF;AAAA,EACL,CAAG,GAEML;AACT;AAEA,SAASZ,GAAiBkB,GAAMzc,GAAM;AACpC,EAAI,UAAU,SAAS,MACrBA,IAAOyc,EAAK,MAAO,EAAC,CAAC,IAEvBC,GAAgBD,GAAM,CAAA,GAAI,GAAGzc,CAAI;AACnC;AAEA,SAAS0c,GAAgBD,GAAM/F,GAASiG,GAASjL,GAAGO,GAAQ;AAC1D,MAAI2K,IAAMD,GACNvL,IAAQqL,EAAK,KAAK/K,CAAC;AAEvB,SAAAgF,EAAQhF,CAAC,IAAI,IACbiE,EAAU8G,EAAK,UAAU/K,CAAC,GAAG,SAAUqB,GAAG;AACxC,IAAK7B,EAAMwF,GAAS3D,CAAC,MACnB4J,IAAUD,GAAgBD,GAAM/F,GAASiG,GAAS5J,GAAGrB,CAAC;AAAA,EAE5D,CAAG,GAEDN,EAAM,MAAMwL,GACZxL,EAAM,MAAMuL,KACR1K,IACFb,EAAM,SAASa,IAGf,OAAOb,EAAM,QAGRuL;AACT;AAEA,SAASjB,GAAUe,GAAM;AACvB,SAAOI,GAAOJ,EAAK,MAAO,GAAE,SAAU,GAAG;AACvC,WAAOA,EAAK,KAAK,CAAC,EAAE,WAAW;AAAA,EACnC,CAAG;AACH;AAEA,SAASd,GAAUnB,GAAG3F,GAAGrB,GAAM;AAC7B,MAAI9B,IAAI8B,EAAK,GACTT,IAAIS,EAAK;AAKb,EAAKqB,EAAE,QAAQnD,GAAGqB,CAAC,MACjBrB,IAAI8B,EAAK,GACTT,IAAIS,EAAK;AAGX,MAAIsJ,IAAStC,EAAE,KAAK9I,CAAC,GACjBqL,IAASvC,EAAE,KAAKzH,CAAC,GACjBiK,IAAYF,GACZG,IAAO;AAIX,EAAIH,EAAO,MAAMC,EAAO,QACtBC,IAAYD,GACZE,IAAO;AAGT,MAAIC,IAAazL,EAASoD,EAAE,MAAO,GAAE,SAAUrB,GAAM;AACnD,WACEyJ,MAASE,GAAa3C,GAAGA,EAAE,KAAKhH,EAAK,CAAC,GAAGwJ,CAAS,KAClDC,MAASE,GAAa3C,GAAGA,EAAE,KAAKhH,EAAK,CAAC,GAAGwJ,CAAS;AAAA,EAExD,CAAG;AAED,SAAOlC,GAAQoC,GAAY,SAAU1J,GAAM;AACzC,WAAO8G,EAAMzF,GAAGrB,CAAI;AAAA,EACxB,CAAG;AACH;AAEA,SAASoI,GAAcpB,GAAG3F,GAAG9C,GAAG8J,GAAG;AACjC,MAAInK,IAAIK,EAAE,GACNgB,IAAIhB,EAAE;AACV,EAAAyI,EAAE,WAAW9I,GAAGqB,CAAC,GACjByH,EAAE,QAAQqB,EAAE,GAAGA,EAAE,GAAG,CAAA,CAAE,GACtBN,GAAiBf,CAAC,GAClBgB,GAAchB,GAAG3F,CAAC,GAClBuI,GAAY5C,GAAG3F,CAAC;AAClB;AAEA,SAASuI,GAAY5C,GAAG3F,GAAG;AACzB,MAAI7U,IAAO6c,GAAOrC,EAAE,MAAO,GAAE,SAAU9I,GAAG;AACxC,WAAO,CAACmD,EAAE,KAAKnD,CAAC,EAAE;AAAA,EACtB,CAAG,GACGE,IAAKyL,GAAa7C,GAAGxa,CAAI;AAC7B,EAAA4R,IAAKA,EAAG,MAAM,CAAC,GACf+D,EAAU/D,GAAI,SAAUF,GAAG;AACzB,QAAIO,IAASuI,EAAE,KAAK9I,CAAC,EAAE,QACrB8B,IAAOqB,EAAE,KAAKnD,GAAGO,CAAM,GACvBqL,IAAU;AAEZ,IAAK9J,MACHA,IAAOqB,EAAE,KAAK5C,GAAQP,CAAC,GACvB4L,IAAU,KAGZzI,EAAE,KAAKnD,CAAC,EAAE,OAAOmD,EAAE,KAAK5C,CAAM,EAAE,QAAQqL,IAAU9J,EAAK,SAAS,CAACA,EAAK;AAAA,EAC1E,CAAG;AACH;AAKA,SAAS+I,GAAWE,GAAM/I,GAAGhC,GAAG;AAC9B,SAAO+K,EAAK,QAAQ/I,GAAGhC,CAAC;AAC1B;AAMA,SAASyL,GAAaV,GAAMK,GAAQS,GAAW;AAC7C,SAAOA,EAAU,OAAOT,EAAO,OAAOA,EAAO,OAAOS,EAAU;AAChE;AClNA,SAASrF,GAAKrD,GAAG;AACf,UAAQA,EAAE,MAAK,EAAG,QAAM;AAAA,IACtB,KAAK;AACH,MAAA2I,GAAqB3I,CAAC;AACtB;AAAA,IACF,KAAK;AACH,MAAA4I,GAAgB5I,CAAC;AACjB;AAAA,IACF,KAAK;AACH,MAAA6I,GAAkB7I,CAAC;AACnB;AAAA,IACF;AACE,MAAA2I,GAAqB3I,CAAC;AAAA,EACzB;AACH;AAGA,IAAI6I,KAAoBrD;AAExB,SAASoD,GAAgB5I,GAAG;AAC1B,EAAAwF,GAAYxF,CAAC,GACb0F,GAAa1F,CAAC;AAChB;AAEA,SAAS2I,GAAqB3I,GAAG;AAC/B,EAAAyG,EAAezG,CAAC;AAClB;ACvBA,SAASyB,GAAIzB,GAAG;AACd,MAAI7U,IAAOqZ,EAAkBxE,GAAG,QAAQ,CAAA,GAAI,OAAO,GAC/C8I,IAASC,GAAW/I,CAAC,GACrBgJ,IAASnF,EAAM7F,EAAS8K,CAAM,CAAC,IAAI,GACnCG,IAAU,IAAID,IAAS;AAE3B,EAAAhJ,EAAE,MAAK,EAAG,cAAc7U,GAGxB2V,EAAUd,EAAE,MAAO,GAAE,SAAU9C,GAAG;AAChC,IAAA8C,EAAE,KAAK9C,CAAC,EAAE,UAAU+L;AAAA,EACxB,CAAG;AAGD,MAAIlI,IAASmI,GAAWlJ,CAAC,IAAI;AAG7Bc,EAAAA,EAAUd,EAAE,SAAU,GAAE,SAAU7C,GAAO;AACvC,IAAA2E,GAAI9B,GAAG7U,GAAM8d,GAASlI,GAAQiI,GAAQF,GAAQ3L,CAAK;AAAA,EACvD,CAAG,GAID6C,EAAE,MAAK,EAAG,iBAAiBiJ;AAC7B;AAEA,SAASnH,GAAI9B,GAAG7U,GAAM8d,GAASlI,GAAQiI,GAAQF,GAAQjM,GAAG;AACxD,MAAIU,IAAWyC,EAAE,SAASnD,CAAC;AAC3B,MAAI,CAACU,EAAS,QAAQ;AACpB,IAAIV,MAAM1R,KACR6U,EAAE,QAAQ7U,GAAM0R,GAAG,EAAE,QAAQ,GAAG,QAAQoM,EAAO,CAAE;AAEnD;AAAA,EACD;AAED,MAAIE,IAAMC,GAAmBpJ,GAAG,KAAK,GACjCqJ,IAASD,GAAmBpJ,GAAG,KAAK,GACpCzD,IAAQyD,EAAE,KAAKnD,CAAC;AAEpB,EAAAmD,EAAE,UAAUmJ,GAAKtM,CAAC,GAClBN,EAAM,YAAY4M,GAClBnJ,EAAE,UAAUqJ,GAAQxM,CAAC,GACrBN,EAAM,eAAe8M,GAErBvI,EAAUvD,GAAU,SAAUJ,GAAO;AACnC,IAAA2E,GAAI9B,GAAG7U,GAAM8d,GAASlI,GAAQiI,GAAQF,GAAQ3L,CAAK;AAEnD,QAAImM,IAAYtJ,EAAE,KAAK7C,CAAK,GACxBoM,IAAWD,EAAU,YAAYA,EAAU,YAAYnM,GACvDqM,IAAcF,EAAU,eAAeA,EAAU,eAAenM,GAChEsM,IAAaH,EAAU,YAAYvI,IAAS,IAAIA,GAChD2I,IAASH,MAAaC,IAAc,IAAIR,IAASF,EAAOjM,CAAC,IAAI;AAEjE,IAAAmD,EAAE,QAAQmJ,GAAKI,GAAU;AAAA,MACvB,QAAQE;AAAA,MACR,QAAQC;AAAA,MACR,aAAa;AAAA,IACnB,CAAK,GAED1J,EAAE,QAAQwJ,GAAaH,GAAQ;AAAA,MAC7B,QAAQI;AAAA,MACR,QAAQC;AAAA,MACR,aAAa;AAAA,IACnB,CAAK;AAAA,EACL,CAAG,GAEI1J,EAAE,OAAOnD,CAAC,KACbmD,EAAE,QAAQ7U,GAAMge,GAAK,EAAE,QAAQ,GAAG,QAAQH,IAASF,EAAOjM,CAAC,EAAG,CAAA;AAElE;AAEA,SAASkM,GAAW/I,GAAG;AACrB,MAAI8I,IAAS,CAAA;AACb,WAAShH,EAAIjF,GAAGpT,GAAO;AACrB,QAAI8T,IAAWyC,EAAE,SAASnD,CAAC;AAC3B,IAAIU,KAAYA,EAAS,UACvBuD,EAAUvD,GAAU,SAAUJ,GAAO;AACnC,MAAA2E,EAAI3E,GAAO1T,IAAQ,CAAC;AAAA,IAC5B,CAAO,GAEHqf,EAAOjM,CAAC,IAAIpT;AAAA,EACb;AACDqX,SAAAA,EAAUd,EAAE,SAAU,GAAE,SAAUnD,GAAG;AACnC,IAAAiF,EAAIjF,GAAG,CAAC;AAAA,EACZ,CAAG,GACMiM;AACT;AAEA,SAASI,GAAWlJ,GAAG;AACrB,SAAO/B;AAAAA,IACL+B,EAAE,MAAO;AAAA,IACT,SAAUqG,GAAKnJ,GAAG;AAChB,aAAOmJ,IAAMrG,EAAE,KAAK9C,CAAC,EAAE;AAAA,IACxB;AAAA,IACD;AAAA,EACJ;AACA;AAEA,SAASyM,GAAQ3J,GAAG;AAClB,MAAI4J,IAAa5J,EAAE;AACnB,EAAAA,EAAE,WAAW4J,EAAW,WAAW,GACnC,OAAOA,EAAW,aAClB9I,EAAUd,EAAE,MAAO,GAAE,SAAU9C,GAAG;AAChC,QAAIyB,IAAOqB,EAAE,KAAK9C,CAAC;AACnB,IAAIyB,EAAK,eACPqB,EAAE,WAAW9C,CAAC;AAAA,EAEpB,CAAG;AACH;ACpIA,SAAS2M,GAAuB7J,GAAG8J,GAAI/M,GAAI;AACzC,MAAIwH,IAAO,CAAE,GACXwF;AAEFjJ,EAAAA,EAAU/D,GAAI,SAAUF,GAAG;AAIzB,aAHIM,IAAQ6C,EAAE,OAAOnD,CAAC,GACpBO,GACA4M,GACK7M,KAAO;AASZ,UARAC,IAAS4C,EAAE,OAAO7C,CAAK,GACnBC,KACF4M,IAAYzF,EAAKnH,CAAM,GACvBmH,EAAKnH,CAAM,IAAID,MAEf6M,IAAYD,GACZA,IAAW5M,IAET6M,KAAaA,MAAc7M,GAAO;AACpC,QAAA2M,EAAG,QAAQE,GAAW7M,CAAK;AAC3B;AAAA,MACD;AACD,MAAAA,IAAQC;AAAA,IACT;AAAA,EACL,CAAG;AAyBH;ACjBA,SAAS6M,GAAgBjK,GAAGqD,GAAM6G,GAAc;AAC9C,MAAI/e,IAAOgf,GAAenK,CAAC,GACzBjf,IAAS,IAAIob,EAAM,EAAE,UAAU,GAAI,CAAE,EAClC,SAAS,EAAE,MAAMhR,GAAM,EACvB,oBAAoB,SAAU0R,GAAG;AAChC,WAAOmD,EAAE,KAAKnD,CAAC;AAAA,EACvB,CAAO;AAELiE,SAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,QAAIuG,IAAOpD,EAAE,KAAKnD,CAAC,GACjBO,IAAS4C,EAAE,OAAOnD,CAAC;AAErB,KAAIuG,EAAK,SAASC,KAASD,EAAK,WAAWC,KAAQA,KAAQD,EAAK,aAC9DriB,EAAO,QAAQ8b,CAAC,GAChB9b,EAAO,UAAU8b,GAAGO,KAAUjS,CAAI,GAGlC2V,EAAUd,EAAEkK,CAAY,EAAErN,CAAC,GAAG,SAAUK,GAAG;AACzC,UAAI2B,IAAI3B,EAAE,MAAML,IAAIK,EAAE,IAAIA,EAAE,GAC1ByB,IAAO5d,EAAO,KAAK8d,GAAGhC,CAAC,GACvBkE,IAAU1D,EAAcsB,CAAI,IAAkB,IAAdA,EAAK;AACvC,MAAA5d,EAAO,QAAQ8d,GAAGhC,GAAG,EAAE,QAAQmD,EAAE,KAAK9C,CAAC,EAAE,SAAS6D,EAAQ,CAAA;AAAA,IAClE,CAAO,GAEG1E,EAAM+G,GAAM,SAAS,KACvBriB,EAAO,QAAQ8b,GAAG;AAAA,MAChB,YAAYuG,EAAK,WAAWC,CAAI;AAAA,MAChC,aAAaD,EAAK,YAAYC,CAAI;AAAA,IAC5C,CAAS;AAAA,EAGT,CAAG,GAEMtiB;AACT;AAEA,SAASopB,GAAenK,GAAG;AAEzB,WADInD,GACGmD,EAAE,QAASnD,IAAI+E,GAAW,OAAO,CAAC;AAAG;AAC5C,SAAO/E;AACT;ACvDA,SAASuN,GAAWpK,GAAGkD,GAAU;AAE/B,WADImH,IAAK,GACAzJ,IAAI,GAAGA,IAAIsC,EAAS,QAAQ,EAAEtC;AACrC,IAAAyJ,KAAMC,GAAmBtK,GAAGkD,EAAStC,IAAI,CAAC,GAAGsC,EAAStC,CAAC,CAAC;AAE1D,SAAOyJ;AACT;AAEA,SAASC,GAAmBtK,GAAGuK,GAAYC,GAAY;AAuBrD,WAnBIC,IAAWC;AAAAA,IACbF;AAAA,IACAjK,EAAMiK,GAAY,SAAU3N,GAAG+D,GAAG;AAChC,aAAOA;AAAA,IACb,CAAK;AAAA,EACL,GACM+J,IAAerK;AAAAA,IACjBC,EAAMgK,GAAY,SAAU1N,GAAG;AAC7B,aAAO+N;AAAAA,QACLrK,EAAMP,EAAE,SAASnD,CAAC,GAAG,SAAUK,GAAG;AAChC,iBAAO,EAAE,KAAKuN,EAASvN,EAAE,CAAC,GAAG,QAAQ8C,EAAE,KAAK9C,CAAC,EAAE,OAAM;AAAA,QAC/D,CAAS;AAAA,QACD;AAAA,MACR;AAAA,IACA,CAAK;AAAA,EACL,GAGM2N,IAAa,GACVA,IAAaL,EAAW;AAAQ,IAAAK,MAAe;AACtD,MAAIC,IAAW,IAAID,IAAa;AAChC,EAAAA,KAAc;AACd,MAAIjD,IAAOrH,EAAM,IAAI,MAAMuK,CAAQ,GAAG,WAAY;AAChD,WAAO;AAAA,EACX,CAAG,GAGGT,IAAK;AACTvJ,SAAAA;AAAAA;AAAAA,IAEE6J,EAAa,QAAQ,SAAUlL,GAAO;AACpC,UAAI5e,IAAQ4e,EAAM,MAAMoL;AACxB,MAAAjD,EAAK/mB,CAAK,KAAK4e,EAAM;AAGrB,eAFIsL,IAAY,GAETlqB,IAAQ;AAEb,QAAIA,IAAQ,MACVkqB,KAAanD,EAAK/mB,IAAQ,CAAC,IAG7BA,IAASA,IAAQ,KAAM,GACvB+mB,EAAK/mB,CAAK,KAAK4e,EAAM;AAEvB,MAAA4K,KAAM5K,EAAM,SAASsL;AAAA,IAC3B,CAAK;AAAA,EACL,GAESV;AACT;AClEA,SAASW,GAAUhL,GAAG;AACpB,MAAI6B,IAAU,CAAA,GACVoJ,IAAcrO,EAASoD,EAAE,MAAO,GAAE,SAAUnD,GAAG;AACjD,WAAO,CAACmD,EAAE,SAASnD,CAAC,EAAE;AAAA,EAC1B,CAAG,GACGsG,IAAUU;AAAAA,IACZtD,EAAM0K,GAAa,SAAUpO,GAAG;AAC9B,aAAOmD,EAAE,KAAKnD,CAAC,EAAE;AAAA,IACvB,CAAK;AAAA,EACL,GACM4G,IAASlD,EAAMiB,EAAQ2B,IAAU,CAAC,GAAG,WAAY;AACnD,WAAO;EACX,CAAG;AAED,WAASrB,EAAIjF,GAAG;AACd,QAAIR,CAAAA,EAAMwF,GAAShF,CAAC,GACpB;AAAA,MAAAgF,EAAQhF,CAAC,IAAI;AACb,UAAIuG,IAAOpD,EAAE,KAAKnD,CAAC;AACnB,MAAA4G,EAAOL,EAAK,IAAI,EAAE,KAAKvG,CAAC,GACxBiE,EAAUd,EAAE,WAAWnD,CAAC,GAAGiF,CAAG;AAAA;AAAA,EAC/B;AAED,MAAIoJ,IAAYN,GAASK,GAAa,SAAUpO,GAAG;AACjD,WAAOmD,EAAE,KAAKnD,CAAC,EAAE;AAAA,EACrB,CAAG;AACDiE,SAAAA,EAAUoK,GAAWpJ,CAAG,GAEjB2B;AACT;ACvCA,SAAS0H,GAAWnL,GAAGoL,GAAS;AAC9B,SAAO7K,EAAM6K,GAAS,SAAUvO,GAAG;AACjC,QAAIiC,IAAMkB,EAAE,QAAQnD,CAAC;AACrB,QAAKiC,EAAI,QAEF;AACL,UAAI/d,IAASkd;AAAAA,QACXa;AAAA,QACA,SAAUuH,GAAKnJ,GAAG;AAChB,cAAIyB,IAAOqB,EAAE,KAAK9C,CAAC,GACjBmO,IAAQrL,EAAE,KAAK9C,EAAE,CAAC;AACpB,iBAAO;AAAA,YACL,KAAKmJ,EAAI,MAAM1H,EAAK,SAAS0M,EAAM;AAAA,YACnC,QAAQhF,EAAI,SAAS1H,EAAK;AAAA,UACtC;AAAA,QACS;AAAA,QACD,EAAE,KAAK,GAAG,QAAQ,EAAG;AAAA,MAC7B;AAEM,aAAO;AAAA,QACL,GAAG9B;AAAA,QACH,YAAY9b,EAAO,MAAMA,EAAO;AAAA,QAChC,QAAQA,EAAO;AAAA,MACvB;AAAA,IACK;AApBC,aAAO,EAAE,GAAG8b;EAqBlB,CAAG;AACH;ACDA,SAASyO,GAAiB1gB,GAASkf,GAAI;AACrC,MAAIyB,IAAgB,CAAA;AACpBzK,EAAAA,EAAUlW,GAAS,SAAU6U,GAAOmB,GAAG;AACrC,QAAItB,IAAOiM,EAAc9L,EAAM,CAAC,IAAI;AAAA,MAClC,UAAU;AAAA,MACV,IAAI,CAAE;AAAA,MACN,KAAK,CAAE;AAAA,MACP,IAAI,CAACA,EAAM,CAAC;AAAA,MACZ,GAAGmB;AAAA,IACT;AACI,IAAKvD,EAAcoC,EAAM,UAAU,MAEjCH,EAAI,aAAaG,EAAM,YAEvBH,EAAI,SAASG,EAAM;AAAA,EAEzB,CAAG,GAEDqB,EAAUgJ,EAAG,MAAO,GAAE,SAAU5M,GAAG;AACjC,QAAIsO,IAASD,EAAcrO,EAAE,CAAC,GAC1BuO,IAASF,EAAcrO,EAAE,CAAC;AAC9B,IAAI,CAACG,EAAcmO,CAAM,KAAK,CAACnO,EAAcoO,CAAM,MACjDA,EAAO,YACPD,EAAO,IAAI,KAAKD,EAAcrO,EAAE,CAAC,CAAC;AAAA,EAExC,CAAG;AAED,MAAIwO,IAAY9O,EAAS2O,GAAe,SAAU9L,GAAO;AAEvD,WAAO,CAACA,EAAM;AAAA,EAClB,CAAG;AAED,SAAOkM,GAAmBD,CAAS;AACrC;AAEA,SAASC,GAAmBD,GAAW;AACrC,MAAI9gB,IAAU,CAAA;AAEd,WAASghB,EAASC,GAAQ;AACxB,WAAO,SAAU7K,GAAQ;AACvB,MAAIA,EAAO,WAIT3D,EAAc2D,EAAO,UAAU,KAC/B3D,EAAcwO,EAAO,UAAU,KAC/B7K,EAAO,cAAc6K,EAAO,eAE5BC,GAAaD,GAAQ7K,CAAM;AAAA,IAEnC;AAAA,EACG;AAED,WAAS+K,EAAUF,GAAQ;AACzB,WAAO,SAAU3K,GAAQ;AACvB,MAAAA,EAAO,GAAM,KAAK2K,CAAM,GACpB,EAAE3K,EAAO,aAAa,KACxBwK,EAAU,KAAKxK,CAAM;AAAA,IAE7B;AAAA,EACG;AAED,SAAOwK,EAAU,UAAQ;AACvB,QAAIjM,IAAQiM,EAAU;AACtB,IAAA9gB,EAAQ,KAAK6U,CAAK,GAClBqB,EAAUrB,EAAM,GAAM,QAAO,GAAImM,EAASnM,CAAK,CAAC,GAChDqB,EAAUrB,EAAM,KAAKsM,EAAUtM,CAAK,CAAC;AAAA,EACtC;AAED,SAAOc;AAAAA,IACL3D,EAAShS,GAAS,SAAU6U,GAAO;AACjC,aAAO,CAACA,EAAM;AAAA,IACpB,CAAK;AAAA,IACD,SAAUA,GAAO;AACf,aAAOuM,GAAOvM,GAAO,CAAC,MAAM,KAAK,cAAc,QAAQ,CAAC;AAAA,IACzD;AAAA,EACL;AACA;AAEA,SAASqM,GAAaG,GAAQ5oB,GAAQ;AACpC,MAAI6oB,IAAM,GACNnL,IAAS;AAEb,EAAIkL,EAAO,WACTC,KAAOD,EAAO,aAAaA,EAAO,QAClClL,KAAUkL,EAAO,SAGf5oB,EAAO,WACT6oB,KAAO7oB,EAAO,aAAaA,EAAO,QAClC0d,KAAU1d,EAAO,SAGnB4oB,EAAO,KAAK5oB,EAAO,GAAG,OAAO4oB,EAAO,EAAE,GACtCA,EAAO,aAAaC,IAAMnL,GAC1BkL,EAAO,SAASlL,GAChBkL,EAAO,IAAI,KAAK,IAAI5oB,EAAO,GAAG4oB,EAAO,CAAC,GACtC5oB,EAAO,SAAS;AAClB;AC1HA,SAAS8oB,GAAKvhB,GAASwhB,GAAW;AAChC,MAAIC,IAAQC,GAAe1hB,GAAS,SAAU6U,GAAO;AACnD,WAAOpD,EAAMoD,GAAO,YAAY;AAAA,EACpC,CAAG,GACG8M,IAAWF,EAAM,KACnBG,IAAa5B,GAASyB,EAAM,KAAK,SAAU5M,GAAO;AAChD,WAAO,CAACA,EAAM;AAAA,EACpB,CAAK,GACD1C,IAAK,CAAE,GACPmP,IAAM,GACNnL,IAAS,GACT0L,IAAU;AAEZ,EAAAF,EAAS,KAAKG,GAAgB,CAAC,CAACN,CAAS,CAAC,GAE1CK,IAAUE,GAAkB5P,GAAIyP,GAAYC,CAAO,GAEnD3L,EAAUyL,GAAU,SAAU9M,GAAO;AACnC,IAAAgN,KAAWhN,EAAM,GAAG,QACpB1C,EAAG,KAAK0C,EAAM,EAAE,GAChByM,KAAOzM,EAAM,aAAaA,EAAM,QAChCsB,KAAUtB,EAAM,QAChBgN,IAAUE,GAAkB5P,GAAIyP,GAAYC,CAAO;AAAA,EACvD,CAAG;AAED,MAAI1rB,IAAS,EAAE,IAAIuf,EAAUvD,CAAE,EAAC;AAChC,SAAIgE,MACFhgB,EAAO,aAAamrB,IAAMnL,GAC1BhgB,EAAO,SAASggB,IAEXhgB;AACT;AAEA,SAAS4rB,GAAkB5P,GAAIyP,GAAY3rB,GAAO;AAEhD,WADI+V,GACG4V,EAAW,WAAW5V,IAAOgW,GAAOJ,CAAU,GAAG,KAAK3rB;AAC3D,IAAA2rB,EAAW,IAAG,GACdzP,EAAG,KAAKnG,EAAK,EAAE,GACf/V;AAEF,SAAOA;AACT;AAEA,SAAS6rB,GAAgBG,GAAM;AAC7B,SAAO,SAAUrB,GAAQC,GAAQ;AAC/B,WAAID,EAAO,aAAaC,EAAO,aACtB,KACED,EAAO,aAAaC,EAAO,aAC7B,IAGDoB,IAA6BpB,EAAO,IAAID,EAAO,IAAxCA,EAAO,IAAIC,EAAO;AAAA,EACrC;AACA;ACnDA,SAASqB,GAAa9M,GAAGnD,GAAGiN,GAAIsC,GAAW;AACzC,MAAIhB,IAAUpL,EAAE,SAASnD,CAAC,GACtBuG,IAAOpD,EAAE,KAAKnD,CAAC,GACfkQ,IAAK3J,IAAOA,EAAK,aAAa,QAC9B4J,IAAK5J,IAAOA,EAAK,cAAc,QAC/B6J,IAAY,CAAA;AAEhB,EAAIF,MACF3B,IAAUxO,EAASwO,GAAS,SAAUlN,GAAG;AACvC,WAAOA,MAAM6O,KAAM7O,MAAM8O;AAAA,EAC/B,CAAK;AAGH,MAAIE,IAAc/B,GAAWnL,GAAGoL,CAAO;AACvCtK,EAAAA,EAAUoM,GAAa,SAAUzN,GAAO;AACtC,QAAIO,EAAE,SAASP,EAAM,CAAC,EAAE,QAAQ;AAC9B,UAAI0N,IAAiBL,GAAa9M,GAAGP,EAAM,GAAGqK,GAAIsC,CAAS;AAC3D,MAAAa,EAAUxN,EAAM,CAAC,IAAI0N,GACjB9Q,EAAM8Q,GAAgB,YAAY,KACpCC,GAAiB3N,GAAO0N,CAAc;AAAA,IAEzC;AAAA,EACL,CAAG;AAED,MAAIviB,IAAU0gB,GAAiB4B,GAAapD,CAAE;AAC9C,EAAAuD,GAAgBziB,GAASqiB,CAAS;AAElC,MAAIlsB,IAASorB,GAAKvhB,GAASwhB,CAAS;AAEpC,MAAIW,MACFhsB,EAAO,KAAKuf,EAAU,CAACyM,GAAIhsB,EAAO,IAAIisB,CAAE,CAAC,GACrChN,EAAE,aAAa+M,CAAE,EAAE,SAAQ;AAC7B,QAAIO,IAAStN,EAAE,KAAKA,EAAE,aAAa+M,CAAE,EAAE,CAAC,CAAC,GACvCQ,IAASvN,EAAE,KAAKA,EAAE,aAAagN,CAAE,EAAE,CAAC,CAAC;AACvC,IAAK3Q,EAAMtb,GAAQ,YAAY,MAC7BA,EAAO,aAAa,GACpBA,EAAO,SAAS,IAElBA,EAAO,cACJA,EAAO,aAAaA,EAAO,SAASusB,EAAO,QAAQC,EAAO,UAAUxsB,EAAO,SAAS,IACvFA,EAAO,UAAU;AAAA,EAClB;AAGH,SAAOA;AACT;AAEA,SAASssB,GAAgBziB,GAASqiB,GAAW;AAC3CnM,EAAAA,EAAUlW,GAAS,SAAU6U,GAAO;AAClC,IAAAA,EAAM,KAAKa;AAAAA,MACTb,EAAM,GAAG,IAAI,SAAU5C,GAAG;AACxB,eAAIoQ,EAAUpQ,CAAC,IACNoQ,EAAUpQ,CAAC,EAAE,KAEfA;AAAA,MACf,CAAO;AAAA,IACP;AAAA,EACA,CAAG;AACH;AAEA,SAASuQ,GAAiBnB,GAAQ/pB,GAAO;AACvC,EAAKmb,EAAc4O,EAAO,UAAU,KAMlCA,EAAO,aAAa/pB,EAAM,YAC1B+pB,EAAO,SAAS/pB,EAAM,WANtB+pB,EAAO,cACJA,EAAO,aAAaA,EAAO,SAAS/pB,EAAM,aAAaA,EAAM,WAC7D+pB,EAAO,SAAS/pB,EAAM,SACzB+pB,EAAO,UAAU/pB,EAAM;AAK3B;ACnDA,SAAS0X,GAAMoG,GAAG;AAChB,MAAImD,IAAUqK,GAAaxN,CAAC,GAC1ByN,IAAkBC,GAAiB1N,GAAGwB,EAAQ,GAAG2B,IAAU,CAAC,GAAG,SAAS,GACxEwK,IAAgBD,GAAiB1N,GAAGwB,EAAQ2B,IAAU,GAAG,IAAI,EAAE,GAAG,UAAU,GAE1ED,IAAW8H,GAAUhL,CAAC;AAC1B,EAAA4N,GAAY5N,GAAGkD,CAAQ;AAKvB,WAHI2K,IAAS,OAAO,mBAClBC,GAEOlN,IAAI,GAAGmN,IAAW,GAAGA,IAAW,GAAG,EAAEnN,GAAG,EAAEmN,GAAU;AAC3D,IAAAC,GAAiBpN,IAAI,IAAI6M,IAAkBE,GAAe/M,IAAI,KAAK,CAAC,GAEpEsC,IAAW+K,GAAsBjO,CAAC;AAClC,QAAIqK,IAAKD,GAAWpK,GAAGkD,CAAQ;AAC/B,IAAImH,IAAKwD,MACPE,IAAW,GACXD,IAAOI,GAAYhL,CAAQ,GAC3B2K,IAASxD;AAAA,EAEZ;AAED,EAAAuD,GAAY5N,GAAG8N,CAAI;AACrB;AAEA,SAASJ,GAAiB1N,GAAGmO,GAAOjE,GAAc;AAChD,SAAO3J,EAAM4N,GAAO,SAAU9K,GAAM;AAClC,WAAO4G,GAAgBjK,GAAGqD,GAAM6G,CAAY;AAAA,EAChD,CAAG;AACH;AAEA,SAAS8D,GAAiBI,GAAahC,GAAW;AAChD,MAAItC,IAAK,IAAI3N;AACb2E,EAAAA,EAAUsN,GAAa,SAAUC,GAAI;AACnC,QAAIljB,IAAOkjB,EAAG,MAAK,EAAG,MAClBC,IAASxB,GAAauB,GAAIljB,GAAM2e,GAAIsC,CAAS;AACjDtL,IAAAA,EAAUwN,EAAO,IAAI,SAAUzR,GAAG+D,GAAG;AACnC,MAAAyN,EAAG,KAAKxR,CAAC,EAAE,QAAQ+D;AAAA,IACzB,CAAK,GACDiJ,GAAuBwE,GAAIvE,GAAIwE,EAAO,EAAE;AAAA,EAC5C,CAAG;AACH;AAEA,SAASV,GAAY5N,GAAGkD,GAAU;AAChCpC,EAAAA,EAAUoC,GAAU,SAAUqL,GAAO;AACnCzN,IAAAA,EAAUyN,GAAO,SAAU1R,GAAG,GAAG;AAC/B,MAAAmD,EAAE,KAAKnD,CAAC,EAAE,QAAQ;AAAA,IACxB,CAAK;AAAA,EACL,CAAG;AACH;ACxEA,SAAS2R,GAAkBxO,GAAG;AAC5B,MAAIyO,IAAgBlI,GAAUvG,CAAC;AAE/Bc,EAAAA,EAAUd,EAAE,MAAO,EAAC,aAAa,SAAUnD,GAAG;AAU5C,aATIuG,IAAOpD,EAAE,KAAKnD,CAAC,GACf0B,IAAU6E,EAAK,SACfsL,IAAWC,GAAS3O,GAAGyO,GAAelQ,EAAQ,GAAGA,EAAQ,CAAC,GAC1DvV,IAAO0lB,EAAS,MAChBE,IAAMF,EAAS,KACfG,IAAU,GACVC,IAAQ9lB,EAAK6lB,CAAO,GACpBE,IAAY,IAETlS,MAAM0B,EAAQ,KAAG;AAGtB,UAFA6E,IAAOpD,EAAE,KAAKnD,CAAC,GAEXkS,GAAW;AACb,gBAAQD,IAAQ9lB,EAAK6lB,CAAO,OAAOD,KAAO5O,EAAE,KAAK8O,CAAK,EAAE,UAAU1L,EAAK;AACrE,UAAAyL;AAGF,QAAIC,MAAUF,MACZG,IAAY;AAAA,MAEf;AAED,UAAI,CAACA,GAAW;AACd,eACEF,IAAU7lB,EAAK,SAAS,KACxBgX,EAAE,KAAM8O,IAAQ9lB,EAAK6lB,IAAU,CAAC,CAAG,EAAC,WAAWzL,EAAK;AAEpD,UAAAyL;AAEF,QAAAC,IAAQ9lB,EAAK6lB,CAAO;AAAA,MACrB;AAED,MAAA7O,EAAE,UAAUnD,GAAGiS,CAAK,GACpBjS,IAAImD,EAAE,WAAWnD,CAAC,EAAE,CAAC;AAAA,IACtB;AAAA,EACL,CAAG;AACH;AAIA,SAAS8R,GAAS3O,GAAGyO,GAAe5R,GAAGqB,GAAG;AACxC,MAAI8Q,IAAQ,CAAA,GACRC,IAAQ,CAAA,GACRlH,IAAM,KAAK,IAAI0G,EAAc5R,CAAC,EAAE,KAAK4R,EAAcvQ,CAAC,EAAE,GAAG,GACzDgR,IAAM,KAAK,IAAIT,EAAc5R,CAAC,EAAE,KAAK4R,EAAcvQ,CAAC,EAAE,GAAG,GACzDd,GACAwR;AAGJ,EAAAxR,IAASP;AACT;AACE,IAAAO,IAAS4C,EAAE,OAAO5C,CAAM,GACxB4R,EAAM,KAAK5R,CAAM;AAAA,SACVA,MAAWqR,EAAcrR,CAAM,EAAE,MAAM2K,KAAOmH,IAAMT,EAAcrR,CAAM,EAAE;AAKnF,OAJAwR,IAAMxR,GAGNA,IAASc,IACDd,IAAS4C,EAAE,OAAO5C,CAAM,OAAOwR;AACrC,IAAAK,EAAM,KAAK7R,CAAM;AAGnB,SAAO,EAAE,MAAM4R,EAAM,OAAOC,EAAM,SAAS,GAAG,KAAKL;AACrD;AAEA,SAASrI,GAAUvG,GAAG;AACpB,MAAIjf,IAAS,CAAA,GACTmuB,IAAM;AAEV,WAASpN,EAAIjF,GAAG;AACd,QAAIkL,IAAMmH;AACVpO,IAAAA,EAAUd,EAAE,SAASnD,CAAC,GAAGiF,CAAG,GAC5B/gB,EAAO8b,CAAC,IAAI,EAAE,KAAKkL,GAAK,KAAKmH;EAC9B;AACDpO,SAAAA,EAAUd,EAAE,SAAU,GAAE8B,CAAG,GAEpB/gB;AACT;AC9CA,SAASouB,GAAmBnP,GAAGkD,GAAU;AACvC,MAAIkM,IAAY,CAAA;AAEhB,WAASC,EAAWC,GAAWf,GAAO;AACpC,QAEEgB,IAAK,GAGLC,IAAU,GACVC,IAAkBH,EAAU,QAC5BI,IAAW9C,GAAO2B,CAAK;AAEzBzN,WAAAA,EAAUyN,GAAO,SAAU1R,GAAG+D,GAAG;AAC/B,UAAI1C,IAAIyR,GAA0B3P,GAAGnD,CAAC,GACpC+S,IAAK1R,IAAI8B,EAAE,KAAK9B,CAAC,EAAE,QAAQuR;AAE7B,OAAIvR,KAAKrB,MAAM6S,OACb5O,EAAUyN,EAAM,MAAMiB,GAAS5O,IAAI,CAAC,GAAG,SAAUiP,GAAU;AACzD/O,QAAAA,EAAUd,EAAE,aAAa6P,CAAQ,GAAG,SAAUhR,GAAG;AAC/C,cAAIiR,IAAS9P,EAAE,KAAKnB,CAAC,GACnBkR,IAAOD,EAAO;AAChB,WAAKC,IAAOR,KAAMK,IAAKG,MAAS,EAAED,EAAO,SAAS9P,EAAE,KAAK6P,CAAQ,EAAE,UACjEG,GAAYZ,GAAWvQ,GAAGgR,CAAQ;AAAA,QAEhD,CAAW;AAAA,MACX,CAAS,GAEDL,IAAU5O,IAAI,GACd2O,IAAKK;AAAA,IAEb,CAAK,GAEMrB;AAAA,EACR;AAEDtQ,SAAAA,GAASiF,GAAUmM,CAAU,GACtBD;AACT;AAEA,SAASa,GAAmBjQ,GAAGkD,GAAU;AACvC,MAAIkM,IAAY,CAAA;AAEhB,WAASc,EAAKC,GAAO1F,GAAU2F,GAAUC,GAAiBC,GAAiB;AACzE,QAAIzT;AACJiE,IAAAA,EAAUU,EAAQiJ,GAAU2F,CAAQ,GAAG,SAAUxP,GAAG;AAClD,MAAA/D,IAAIsT,EAAMvP,CAAC,GACPZ,EAAE,KAAKnD,CAAC,EAAE,SACZiE,EAAUd,EAAE,aAAanD,CAAC,GAAG,SAAUgC,GAAG;AACxC,YAAI0R,IAAQvQ,EAAE,KAAKnB,CAAC;AACpB,QAAI0R,EAAM,UAAUA,EAAM,QAAQF,KAAmBE,EAAM,QAAQD,MACjEN,GAAYZ,GAAWvQ,GAAGhC,CAAC;AAAA,MAEvC,CAAS;AAAA,IAET,CAAK;AAAA,EACF;AAED,WAASwS,EAAWmB,GAAOL,GAAO;AAChC,QAAIM,IAAe,IACjBC,GACAjG,IAAW;AAEb3J,WAAAA,EAAUqP,GAAO,SAAUtT,GAAG8T,GAAgB;AAC5C,UAAI3Q,EAAE,KAAKnD,CAAC,EAAE,UAAU,UAAU;AAChC,YAAI+T,IAAe5Q,EAAE,aAAanD,CAAC;AACnC,QAAI+T,EAAa,WACfF,IAAe1Q,EAAE,KAAK4Q,EAAa,CAAC,CAAC,EAAE,OACvCV,EAAKC,GAAO1F,GAAUkG,GAAgBF,GAAcC,CAAY,GAEhEjG,IAAWkG,GACXF,IAAeC;AAAA,MAElB;AACD,MAAAR,EAAKC,GAAO1F,GAAU0F,EAAM,QAAQO,GAAcF,EAAM,MAAM;AAAA,IACpE,CAAK,GAEML;AAAA,EACR;AAEDlS,SAAAA,GAASiF,GAAUmM,CAAU,GACtBD;AACT;AAEA,SAASO,GAA0B3P,GAAGnD,GAAG;AACvC,MAAImD,EAAE,KAAKnD,CAAC,EAAE;AACZ,WAAOmL,GAAOhI,EAAE,aAAanD,CAAC,GAAG,SAAUgC,GAAG;AAC5C,aAAOmB,EAAE,KAAKnB,CAAC,EAAE;AAAA,IACvB,CAAK;AAEL;AAEA,SAASmR,GAAYZ,GAAWvS,GAAGqB,GAAG;AACpC,MAAIrB,IAAIqB,GAAG;AACT,QAAIoB,IAAMzC;AACV,IAAAA,IAAIqB,GACJA,IAAIoB;AAAA,EACL;AAED,MAAIuR,IAAazB,EAAUvS,CAAC;AAC5B,EAAKgU,MACHzB,EAAUvS,CAAC,IAAIgU,IAAa,KAE9BA,EAAW3S,CAAC,IAAI;AAClB;AAEA,SAAS4S,GAAY1B,GAAWvS,GAAGqB,GAAG;AACpC,MAAIrB,IAAIqB,GAAG;AACT,QAAIoB,IAAMzC;AACV,IAAAA,IAAIqB,GACJA,IAAIoB;AAAA,EACL;AACD,SAAOjD,EAAM+S,EAAUvS,CAAC,GAAGqB,CAAC;AAC9B;AAUA,SAAS6S,GAAkB/Q,GAAGkD,GAAUkM,GAAW4B,GAAY;AAC7D,MAAI7lB,IAAO,CAAE,GACX8lB,IAAQ,CAAE,GACVC,IAAM,CAAA;AAKRpQ,SAAAA,EAAUoC,GAAU,SAAUqL,GAAO;AACnCzN,IAAAA,EAAUyN,GAAO,SAAU1R,GAAGjD,GAAO;AACnC,MAAAzO,EAAK0R,CAAC,IAAIA,GACVoU,EAAMpU,CAAC,IAAIA,GACXqU,EAAIrU,CAAC,IAAIjD;AAAA,IACf,CAAK;AAAA,EACL,CAAG,GAEDkH,EAAUoC,GAAU,SAAUqL,GAAO;AACnC,QAAI4C,IAAU;AACdrQ,IAAAA,EAAUyN,GAAO,SAAU1R,GAAG;AAC5B,UAAIuU,IAAKJ,EAAWnU,CAAC;AACrB,UAAIuU,EAAG,QAAQ;AACb,QAAAA,IAAKxG,GAASwG,GAAI,SAAUlT,GAAG;AAC7B,iBAAOgT,EAAIhT,CAAC;AAAA,QACtB,CAAS;AAED,iBADImT,KAAMD,EAAG,SAAS,KAAK,GAClBxQ,IAAI,KAAK,MAAMyQ,CAAE,GAAGC,IAAK,KAAK,KAAKD,CAAE,GAAGzQ,KAAK0Q,GAAI,EAAE1Q,GAAG;AAC7D,cAAI1C,IAAIkT,EAAGxQ,CAAC;AACZ,UAAIqQ,EAAMpU,CAAC,MAAMA,KAAKsU,IAAUD,EAAIhT,CAAC,KAAK,CAAC4S,GAAY1B,GAAWvS,GAAGqB,CAAC,MACpE+S,EAAM/S,CAAC,IAAIrB,GACXoU,EAAMpU,CAAC,IAAI1R,EAAK0R,CAAC,IAAI1R,EAAK+S,CAAC,GAC3BiT,IAAUD,EAAIhT,CAAC;AAAA,QAElB;AAAA,MACF;AAAA,IACP,CAAK;AAAA,EACL,CAAG,GAEM,EAAE,MAAM/S,GAAM,OAAO8lB,EAAK;AACnC;AAEA,SAASM,GAAqBvR,GAAGkD,GAAU/X,GAAM8lB,GAAOO,GAAY;AAMlE,MAAIC,IAAK,CAAE,GACTC,IAASC,GAAgB3R,GAAGkD,GAAU/X,GAAMqmB,CAAU,GACtDI,IAAaJ,IAAa,eAAe;AAE3C,WAASK,EAAQC,GAAWC,GAAe;AAIzC,aAHIzhB,IAAQohB,EAAO,SACfM,IAAO1hB,EAAM,OACbuR,IAAU,CAAA,GACPmQ;AACL,MAAInQ,EAAQmQ,CAAI,IACdF,EAAUE,CAAI,KAEdnQ,EAAQmQ,CAAI,IAAI,IAChB1hB,EAAM,KAAK0hB,CAAI,GACf1hB,IAAQA,EAAM,OAAOyhB,EAAcC,CAAI,CAAC,IAG1CA,IAAO1hB,EAAM;EAEhB;AAGD,WAAS2hB,EAAMD,GAAM;AACnB,IAAAP,EAAGO,CAAI,IAAIN,EAAO,QAAQM,CAAI,EAAE,OAAO,SAAU3L,GAAKnJ,GAAG;AACvD,aAAO,KAAK,IAAImJ,GAAKoL,EAAGvU,EAAE,CAAC,IAAIwU,EAAO,KAAKxU,CAAC,CAAC;AAAA,IAC9C,GAAE,CAAC;AAAA,EACL;AAGD,WAASgV,EAAMF,GAAM;AACnB,QAAI3Z,IAAMqZ,EAAO,SAASM,CAAI,EAAE,OAAO,SAAU3L,GAAKnJ,GAAG;AACvD,aAAO,KAAK,IAAImJ,GAAKoL,EAAGvU,EAAE,CAAC,IAAIwU,EAAO,KAAKxU,CAAC,CAAC;AAAA,IACnD,GAAO,OAAO,iBAAiB,GAEvBkG,IAAOpD,EAAE,KAAKgS,CAAI;AACtB,IAAI3Z,MAAQ,OAAO,qBAAqB+K,EAAK,eAAewO,MAC1DH,EAAGO,CAAI,IAAI,KAAK,IAAIP,EAAGO,CAAI,GAAG3Z,CAAG;AAAA,EAEpC;AAED,SAAAwZ,EAAQI,GAAOP,EAAO,aAAa,KAAKA,CAAM,CAAC,GAC/CG,EAAQK,GAAOR,EAAO,WAAW,KAAKA,CAAM,CAAC,GAG7C5Q,EAAUmQ,GAAO,SAAUpU,GAAG;AAC5B,IAAA4U,EAAG5U,CAAC,IAAI4U,EAAGtmB,EAAK0R,CAAC,CAAC;AAAA,EACtB,CAAG,GAEM4U;AACT;AAEA,SAASE,GAAgB3R,GAAGkD,GAAU/X,GAAMqmB,GAAY;AACtD,MAAIW,IAAa,IAAIhW,EAAO,GAC1ByN,IAAa5J,EAAE,MAAO,GACtBoS,IAAQC,GAAIzI,EAAW,SAASA,EAAW,SAAS4H,CAAU;AAEhE1Q,SAAAA,EAAUoC,GAAU,SAAUqL,GAAO;AACnC,QAAI1P;AACJiC,IAAAA,EAAUyN,GAAO,SAAU1R,GAAG;AAC5B,UAAIyV,IAAQnnB,EAAK0R,CAAC;AAElB,UADAsV,EAAW,QAAQG,CAAK,GACpBzT,GAAG;AACL,YAAI0T,IAAQpnB,EAAK0T,CAAC,GAChB2T,IAAUL,EAAW,KAAKI,GAAOD,CAAK;AACxC,QAAAH,EAAW,QAAQI,GAAOD,GAAO,KAAK,IAAIF,EAAMpS,GAAGnD,GAAGgC,CAAC,GAAG2T,KAAW,CAAC,CAAC;AAAA,MACxE;AACD,MAAA3T,IAAIhC;AAAA,IACV,CAAK;AAAA,EACL,CAAG,GAEMsV;AACT;AAKA,SAASM,GAA2BzS,GAAG0S,GAAK;AAC1C,SAAOzM,GAAQjI,EAAS0U,CAAG,GAAG,SAAUjB,GAAI;AAC1C,QAAIvZ,IAAM,OAAO,mBACbG,IAAM,OAAO;AAEjBsa,WAAAA,GAAQlB,GAAI,SAAU/O,GAAG7F,GAAG;AAC1B,UAAI+V,IAAYC,GAAM7S,GAAGnD,CAAC,IAAI;AAE9B,MAAA3E,IAAM,KAAK,IAAIwK,IAAIkQ,GAAW1a,CAAG,GACjCG,IAAM,KAAK,IAAIqK,IAAIkQ,GAAWva,CAAG;AAAA,IACvC,CAAK,GAEMH,IAAMG;AAAA,EACjB,CAAG;AACH;AASA,SAASya,GAAiBJ,GAAKK,GAAS;AACtC,MAAIC,IAAchV,EAAS+U,CAAO,GAChCE,IAAa1P,EAAMyP,CAAW,GAC9BE,IAAarP,EAAMmP,CAAW;AAEhClS,EAAAA,EAAU,CAAC,KAAK,GAAG,GAAG,SAAUqS,GAAM;AACpCrS,IAAAA,EAAU,CAAC,KAAK,GAAG,GAAG,SAAUsS,GAAO;AACrC,UAAIC,IAAYF,IAAOC,GACrB3B,IAAKiB,EAAIW,CAAS,GAClB3P;AACF,UAAI+N,MAAOsB,GAEX;AAAA,YAAIO,IAAStV,EAASyT,CAAE;AACxB,QAAA/N,IAAQ0P,MAAU,MAAMH,IAAa1P,EAAM+P,CAAM,IAAIJ,IAAarP,EAAMyP,CAAM,GAE1E5P,MACFgP,EAAIW,CAAS,IAAIE,GAAY9B,GAAI,SAAU/O,GAAG;AAC5C,iBAAOA,IAAIgB;AAAA,QACrB,CAAS;AAAA;AAAA,IAET,CAAK;AAAA,EACL,CAAG;AACH;AAEA,SAAS8P,GAAQd,GAAKzB,GAAO;AAC3B,SAAOsC,GAAYb,EAAI,IAAI,SAAUe,GAAQ5W,GAAG;AAC9C,QAAIoU;AACF,aAAOyB,EAAIzB,EAAM,YAAW,CAAE,EAAEpU,CAAC;AAEjC,QAAI4U,IAAK7G,GAASrK,EAAMmS,GAAK7V,CAAC,CAAC;AAC/B,YAAQ4U,EAAG,CAAC,IAAIA,EAAG,CAAC,KAAK;AAAA,EAE/B,CAAG;AACH;AAEA,SAASiC,GAAU1T,GAAG;AACpB,MAAIkD,IAAW+K,GAAsBjO,CAAC,GAClCoP,IAAYuE,GAAQxE,GAAmBnP,GAAGkD,CAAQ,GAAG+M,GAAmBjQ,GAAGkD,CAAQ,CAAC,GAEpFwP,IAAM,CAAA,GACNkB;AACJ9S,EAAAA,EAAU,CAAC,KAAK,GAAG,GAAG,SAAUqS,GAAM;AACpC,IAAAS,IAAmBT,MAAS,MAAMjQ,IAAWlF,EAASkF,CAAQ,EAAE,WAChEpC,EAAU,CAAC,KAAK,GAAG,GAAG,SAAUsS,GAAO;AACrC,MAAIA,MAAU,QACZQ,IAAmBrT,EAAMqT,GAAkB,SAAUC,GAAO;AAC1D,eAAO7V,EAAS6V,CAAK,EAAE;MACjC,CAAS;AAGH,UAAI7C,KAAcmC,MAAS,MAAMnT,EAAE,eAAeA,EAAE,YAAY,KAAKA,CAAC,GAClEiR,IAAQF,GAAkB/Q,GAAG4T,GAAkBxE,GAAW4B,CAAU,GACpES,IAAKF,GAAqBvR,GAAG4T,GAAkB3C,EAAM,MAAMA,EAAM,OAAOmC,MAAU,GAAG;AACzF,MAAIA,MAAU,QACZ3B,IAAK8B,GAAY9B,GAAI,SAAU/O,GAAG;AAChC,eAAO,CAACA;AAAA,MAClB,CAAS,IAEHgQ,EAAIS,IAAOC,CAAK,IAAI3B;AAAA,IAC1B,CAAK;AAAA,EACL,CAAG;AAED,MAAIqC,IAAgBrB,GAA2BzS,GAAG0S,CAAG;AACrD,SAAAI,GAAiBJ,GAAKoB,CAAa,GAC5BN,GAAQd,GAAK1S,EAAE,MAAO,EAAC,KAAK;AACrC;AAEA,SAASqS,GAAIpJ,GAAS8K,GAASvC,GAAY;AACzC,SAAO,SAAUxR,GAAGnD,GAAGqB,GAAG;AACxB,QAAI+J,IAASjI,EAAE,KAAKnD,CAAC,GACjBqL,IAASlI,EAAE,KAAK9B,CAAC,GACjBgO,IAAM,GACNxI;AAGJ,QADAwI,KAAOjE,EAAO,QAAQ,GAClB5L,EAAM4L,GAAQ,UAAU;AAC1B,cAAQA,EAAO,SAAS,YAAa,GAAA;AAAA,QACnC,KAAK;AACH,UAAAvE,IAAQ,CAACuE,EAAO,QAAQ;AACxB;AAAA,QACF,KAAK;AACH,UAAAvE,IAAQuE,EAAO,QAAQ;AACvB;AAAA,MACH;AAWH,QATIvE,MACFwI,KAAOsF,IAAa9N,IAAQ,CAACA,IAE/BA,IAAQ,GAERwI,MAAQjE,EAAO,QAAQ8L,IAAU9K,KAAW,GAC5CiD,MAAQhE,EAAO,QAAQ6L,IAAU9K,KAAW,GAE5CiD,KAAOhE,EAAO,QAAQ,GAClB7L,EAAM6L,GAAQ,UAAU;AAC1B,cAAQA,EAAO,SAAS,YAAa,GAAA;AAAA,QACnC,KAAK;AACH,UAAAxE,IAAQwE,EAAO,QAAQ;AACvB;AAAA,QACF,KAAK;AACH,UAAAxE,IAAQ,CAACwE,EAAO,QAAQ;AACxB;AAAA,MACH;AAEH,WAAIxE,MACFwI,KAAOsF,IAAa9N,IAAQ,CAACA,IAE/BA,IAAQ,GAEDwI;AAAA,EACX;AACA;AAEA,SAAS2G,GAAM7S,GAAGnD,GAAG;AACnB,SAAOmD,EAAE,KAAKnD,CAAC,EAAE;AACnB;AChaA,SAASmX,GAAShU,GAAG;AACnB,EAAAA,IAAIiU,GAAwBjU,CAAC,GAE7BkU,GAAUlU,CAAC,GACXc,EAAU4S,GAAU1T,CAAC,GAAG,SAAU0C,GAAG7F,GAAG;AACtC,IAAAmD,EAAE,KAAKnD,CAAC,EAAE,IAAI6F;AAAA,EAClB,CAAG;AACH;AAEA,SAASwR,GAAUlU,GAAG;AACpB,MAAIkD,IAAW+K,GAAsBjO,CAAC,GAClCmU,IAAUnU,EAAE,MAAK,EAAG,SACpBoU,IAAQ;AACZtT,EAAAA,EAAUoC,GAAU,SAAUqL,GAAO;AACnC,QAAI8F,IAAYxQ;AAAAA,MACdtD,EAAMgO,GAAO,SAAU1R,GAAG;AACxB,eAAOmD,EAAE,KAAKnD,CAAC,EAAE;AAAA,MACzB,CAAO;AAAA,IACP;AACIiE,IAAAA,EAAUyN,GAAO,SAAU1R,GAAG;AAC5B,MAAAmD,EAAE,KAAKnD,CAAC,EAAE,IAAIuX,IAAQC,IAAY;AAAA,IACxC,CAAK,GACDD,KAASC,IAAYF;AAAA,EACzB,CAAG;AACH;ACfA,SAASG,GAAOtU,GAAG5D,GAAM;AACvB,MAAI4H,IAAO5H,KAAQA,EAAK,cAAcmY,KAAYC;AAClDxQ,EAAAA,EAAK,UAAU,WAAY;AACzB,QAAIyQ,IAAczQ,EAAK,sBAAsB,WAAY;AACvD,aAAO0Q,GAAiB1U,CAAC;AAAA,IAC/B,CAAK;AACDgE,IAAAA,EAAK,eAAe,WAAY;AAC9B,MAAA2Q,GAAUF,GAAazQ,CAAI;AAAA,IACjC,CAAK,GACDA,EAAK,sBAAsB,WAAY;AACrC,MAAA4Q,GAAiB5U,GAAGyU,CAAW;AAAA,IACrC,CAAK;AAAA,EACL,CAAG;AACH;AAEA,SAASE,GAAU3U,GAAGgE,GAAM;AAC1B,EAAAA,EAAK,8BAA8B,WAAY;AAC7C,IAAA6Q,GAAuB7U,CAAC;AAAA,EAC5B,CAAG,GACDgE,EAAK,uBAAuB,WAAY;AACtC,IAAA8Q,GAAgB9U,CAAC;AAAA,EACrB,CAAG,GACDgE,EAAK,eAAe,WAAY;AAC9B+Q,IAAAA,GAAY/U,CAAC;AAAA,EACjB,CAAG,GACDgE,EAAK,wBAAwB,WAAY;AACvCgR,IAAAA,GAAiBhV,CAAC;AAAA,EACtB,CAAG,GACDgE,EAAK,YAAY,WAAY;AAC3B,IAAAX,GAAK4Q,GAAwBjU,CAAC,CAAC;AAAA,EACnC,CAAG,GACDgE,EAAK,8BAA8B,WAAY;AAC7C,IAAAiR,GAAuBjV,CAAC;AAAA,EAC5B,CAAG,GACDgE,EAAK,wBAAwB,WAAY;AACvCkR,IAAAA,GAAsBlV,CAAC;AAAA,EAC3B,CAAG,GACDgE,EAAK,4BAA4B,WAAY;AAC3CmR,IAAAA,GAAqBnV,CAAC;AAAA,EAC1B,CAAG,GACDgE,EAAK,sBAAsB,WAAY;AACrCoR,IAAAA,GAAoBpV,CAAC;AAAA,EACzB,CAAG,GACDgE,EAAK,wBAAwB,WAAY;AACvC,IAAAqR,GAAiBrV,CAAC;AAAA,EACtB,CAAG,GACDgE,EAAK,8BAA8B,WAAY;AAC7C,IAAAsR,GAAuBtV,CAAC;AAAA,EAC5B,CAAG,GACDgE,EAAK,qBAAqB,WAAY;AACpCuR,IAAAA,GAAcvV,CAAC;AAAA,EACnB,CAAG,GACDgE,EAAK,yBAAyB,WAAY;AACxC,IAAAwK,GAAkBxO,CAAC;AAAA,EACvB,CAAG,GACDgE,EAAK,yBAAyB,WAAY;AACxC,IAAAG,GAAkBnE,CAAC;AAAA,EACvB,CAAG,GACDgE,EAAK,aAAa,WAAY;AAC5B,IAAApK,GAAMoG,CAAC;AAAA,EACX,CAAG,GACDgE,EAAK,uBAAuB,WAAY;AACtC,IAAAwR,GAAgBxV,CAAC;AAAA,EACrB,CAAG,GACDgE,EAAK,8BAA8B,WAAY;AAC7CyR,IAAAA,GAAwBzV,CAAC;AAAA,EAC7B,CAAG,GACDgE,EAAK,gBAAgB,WAAY;AAC/B,IAAAgQ,GAAShU,CAAC;AAAA,EACd,CAAG,GACDgE,EAAK,yBAAyB,WAAY;AACxC,IAAA0R,GAAkB1V,CAAC;AAAA,EACvB,CAAG,GACDgE,EAAK,yBAAyB,WAAY;AACxC,IAAA2R,GAAkB3V,CAAC;AAAA,EACvB,CAAG,GACDgE,EAAK,sBAAsB,WAAY;AACrC4R,IAAAA,GAAe5V,CAAC;AAAA,EACpB,CAAG,GACDgE,EAAK,4BAA4B,WAAY;AAC3C,IAAA6R,GAAqB7V,CAAC;AAAA,EAC1B,CAAG,GACDgE,EAAK,4BAA4B,WAAY;AAC3C8R,IAAAA,GAAsB9V,CAAC;AAAA,EAC3B,CAAG,GACDgE,EAAK,sBAAsB,WAAY;AACrC,IAAA+R,GAAe/V,CAAC;AAAA,EACpB,CAAG,GACDgE,EAAK,4BAA4B,WAAY;AAC3C,IAAAgS,GAAqBhW,CAAC;AAAA,EAC1B,CAAG,GACDgE,EAAK,qBAAqB,WAAY;AACpC,IAAAiS,GAA8BjW,CAAC;AAAA,EACnC,CAAG,GACDgE,EAAK,oBAAoB,WAAY;AACnCkS,IAAAA,GAAalW,CAAC;AAAA,EAClB,CAAG;AACH;AAQA,SAAS4U,GAAiBuB,GAAY1B,GAAa;AACjD3T,EAAAA,EAAUqV,EAAW,MAAO,GAAE,SAAUtZ,GAAG;AACzC,QAAIuZ,IAAaD,EAAW,KAAKtZ,CAAC,GAC9BwZ,IAAc5B,EAAY,KAAK5X,CAAC;AAEpC,IAAIuZ,MACFA,EAAW,IAAIC,EAAY,GAC3BD,EAAW,IAAIC,EAAY,GAEvB5B,EAAY,SAAS5X,CAAC,EAAE,WAC1BuZ,EAAW,QAAQC,EAAY,OAC/BD,EAAW,SAASC,EAAY;AAAA,EAGxC,CAAG,GAEDvV,EAAUqV,EAAW,MAAO,GAAE,SAAUjZ,GAAG;AACzC,QAAIkZ,IAAaD,EAAW,KAAKjZ,CAAC,GAC9BmZ,IAAc5B,EAAY,KAAKvX,CAAC;AAEpC,IAAAkZ,EAAW,SAASC,EAAY,QAC5Bha,EAAMga,GAAa,GAAG,MACxBD,EAAW,IAAIC,EAAY,GAC3BD,EAAW,IAAIC,EAAY;AAAA,EAEjC,CAAG,GAEDF,EAAW,MAAK,EAAG,QAAQ1B,EAAY,MAAO,EAAC,OAC/C0B,EAAW,MAAK,EAAG,SAAS1B,EAAY,MAAO,EAAC;AAClD;AAEA,IAAI6B,KAAgB,CAAC,WAAW,WAAW,WAAW,WAAW,SAAS,GACtEC,KAAgB,EAAE,SAAS,IAAI,SAAS,IAAI,SAAS,IAAI,SAAS,QAClEC,KAAa,CAAC,aAAa,UAAU,WAAW,OAAO,GACvDC,KAAe,CAAC,SAAS,QAAQ,GACjCC,KAAe,EAAE,OAAO,GAAG,QAAQ,EAAC,GACpCC,KAAe,CAAC,UAAU,UAAU,SAAS,UAAU,aAAa,GACpEC,KAAe;AAAA,EACjB,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,UAAU;AACZ,GACIC,KAAY,CAAC,UAAU;AAQ3B,SAASnC,GAAiByB,GAAY;AACpC,MAAInW,IAAI,IAAI7D,EAAM,EAAE,YAAY,IAAM,UAAU,GAAI,CAAE,GAClD2a,IAAQC,GAAaZ,EAAW,MAAO,CAAA;AAE3C,SAAAnW,EAAE;AAAA,IACA2T,GAAQ,CAAA,GAAI4C,IAAeS,GAAkBF,GAAOR,EAAa,GAAGtK,GAAO8K,GAAON,EAAU,CAAC;AAAA,EACjG,GAEE1V,EAAUqV,EAAW,MAAO,GAAE,SAAUtZ,GAAG;AACzC,QAAIuG,IAAO2T,GAAaZ,EAAW,KAAKtZ,CAAC,CAAC;AAC1C,IAAAmD,EAAE,QAAQnD,GAAGoa,GAAWD,GAAkB5T,GAAMqT,EAAY,GAAGC,EAAY,CAAC,GAC5E1W,EAAE,UAAUnD,GAAGsZ,EAAW,OAAOtZ,CAAC,CAAC;AAAA,EACvC,CAAG,GAEDiE,EAAUqV,EAAW,MAAO,GAAE,SAAUjZ,GAAG;AACzC,QAAIyB,IAAOoY,GAAaZ,EAAW,KAAKjZ,CAAC,CAAC;AAC1C,IAAA8C,EAAE;AAAA,MACA9C;AAAA,MACAyW,GAAQ,CAAA,GAAIiD,IAAcI,GAAkBrY,GAAMgY,EAAY,GAAG3K,GAAOrN,GAAMkY,EAAS,CAAC;AAAA,IAC9F;AAAA,EACA,CAAG,GAEM7W;AACT;AAUA,SAAS6U,GAAuB7U,GAAG;AACjC,MAAI8W,IAAQ9W,EAAE;AACd,EAAA8W,EAAM,WAAW,GACjBhW,EAAUd,EAAE,MAAO,GAAE,SAAU9C,GAAG;AAChC,QAAIyB,IAAOqB,EAAE,KAAK9C,CAAC;AACnB,IAAAyB,EAAK,UAAU,GACXA,EAAK,SAAS,YAAW,MAAO,QAC9BmY,EAAM,YAAY,QAAQA,EAAM,YAAY,OAC9CnY,EAAK,SAASA,EAAK,cAEnBA,EAAK,UAAUA,EAAK;AAAA,EAG5B,CAAG;AACH;AAQA,SAASsW,GAAuBjV,GAAG;AACjCc,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAU,GAAG;AAChC,QAAIrB,IAAOqB,EAAE,KAAK,CAAC;AACnB,QAAIrB,EAAK,SAASA,EAAK,QAAQ;AAC7B,UAAI9B,IAAImD,EAAE,KAAK,EAAE,CAAC,GACd9B,IAAI8B,EAAE,KAAK,EAAE,CAAC,GACdzD,IAAQ,EAAE,OAAO2B,EAAE,OAAOrB,EAAE,QAAQ,IAAIA,EAAE,MAAM,EAAI;AACxD2H,MAAAA,EAAkBxE,GAAG,cAAczD,GAAO,KAAK;AAAA,IAChD;AAAA,EACL,CAAG;AACH;AAEA,SAAS8Y,GAAiBrV,GAAG;AAC3B,MAAImD,IAAU;AACdrC,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,QAAIuG,IAAOpD,EAAE,KAAKnD,CAAC;AACnB,IAAIuG,EAAK,cACPA,EAAK,UAAUpD,EAAE,KAAKoD,EAAK,SAAS,EAAE,MACtCA,EAAK,UAAUpD,EAAE,KAAKoD,EAAK,YAAY,EAAE,MAEzCD,IAAUU,EAAMV,GAASC,EAAK,OAAO;AAAA,EAE3C,CAAG,GACDpD,EAAE,MAAK,EAAG,UAAUmD;AACtB;AAEA,SAASmS,GAAuBtV,GAAG;AACjCc,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,QAAIuG,IAAOpD,EAAE,KAAKnD,CAAC;AACnB,IAAIuG,EAAK,UAAU,iBACjBpD,EAAE,KAAKoD,EAAK,CAAC,EAAE,YAAYA,EAAK,MAChCpD,EAAE,WAAWnD,CAAC;AAAA,EAEpB,CAAG;AACH;AAEA,SAASkZ,GAAe/V,GAAG;AACzB,MAAIkX,IAAO,OAAO,mBACdC,IAAO,GACPC,IAAO,OAAO,mBACdC,IAAO,GACPzN,IAAa5J,EAAE,SACfsX,IAAU1N,EAAW,WAAW,GAChC2N,IAAU3N,EAAW,WAAW;AAEpC,WAAS4N,EAAYtV,GAAO;AAC1B,QAAIQ,IAAIR,EAAM,GACVS,IAAIT,EAAM,GACVhE,IAAIgE,EAAM,OACVY,IAAIZ,EAAM;AACd,IAAAgV,IAAO,KAAK,IAAIA,GAAMxU,IAAIxE,IAAI,CAAC,GAC/BiZ,IAAO,KAAK,IAAIA,GAAMzU,IAAIxE,IAAI,CAAC,GAC/BkZ,IAAO,KAAK,IAAIA,GAAMzU,IAAIG,IAAI,CAAC,GAC/BuU,IAAO,KAAK,IAAIA,GAAM1U,IAAIG,IAAI,CAAC;AAAA,EAChC;AAEDhC,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,IAAA2a,EAAYxX,EAAE,KAAKnD,CAAC,CAAC;AAAA,EACzB,CAAG,GACDiE,EAAUd,EAAE,MAAO,GAAE,SAAU9C,GAAG;AAChC,QAAIyB,IAAOqB,EAAE,KAAK9C,CAAC;AACnB,IAAIb,EAAMsC,GAAM,GAAG,KACjB6Y,EAAY7Y,CAAI;AAAA,EAEtB,CAAG,GAEDuY,KAAQI,GACRF,KAAQG,GAERzW,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,QAAIuG,IAAOpD,EAAE,KAAKnD,CAAC;AACnB,IAAAuG,EAAK,KAAK8T,GACV9T,EAAK,KAAKgU;AAAA,EACd,CAAG,GAEDtW,EAAUd,EAAE,MAAO,GAAE,SAAU9C,GAAG;AAChC,QAAIyB,IAAOqB,EAAE,KAAK9C,CAAC;AACnB4D,IAAAA,EAAUnC,EAAK,QAAQ,SAAU8Y,GAAG;AAClC,MAAAA,EAAE,KAAKP,GACPO,EAAE,KAAKL;AAAA,IACb,CAAK,GACG/a,EAAMsC,GAAM,GAAG,MACjBA,EAAK,KAAKuY,IAER7a,EAAMsC,GAAM,GAAG,MACjBA,EAAK,KAAKyY;AAAA,EAEhB,CAAG,GAEDxN,EAAW,QAAQuN,IAAOD,IAAOI,GACjC1N,EAAW,SAASyN,IAAOD,IAAOG;AACpC;AAEA,SAASvB,GAAqBhW,GAAG;AAC/Bc,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAU,GAAG;AAChC,QAAIrB,IAAOqB,EAAE,KAAK,CAAC,GACf0X,IAAQ1X,EAAE,KAAK,EAAE,CAAC,GAClB2X,IAAQ3X,EAAE,KAAK,EAAE,CAAC,GAClB4X,GAAIC;AACR,IAAKlZ,EAAK,UAKRiZ,IAAKjZ,EAAK,OAAO,CAAC,GAClBkZ,IAAKlZ,EAAK,OAAOA,EAAK,OAAO,SAAS,CAAC,MALvCA,EAAK,SAAS,IACdiZ,IAAKD,GACLE,IAAKH,IAKP/Y,EAAK,OAAO,QAAQmZ,GAAmBJ,GAAOE,CAAE,CAAC,GACjDjZ,EAAK,OAAO,KAAKmZ,GAAmBH,GAAOE,CAAE,CAAC;AAAA,EAClD,CAAG;AACH;AAEA,SAAShC,GAAqB7V,GAAG;AAC/Bc,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAU,GAAG;AAChC,QAAIrB,IAAOqB,EAAE,KAAK,CAAC;AACnB,QAAI3D,EAAMsC,GAAM,GAAG;AAIjB,eAHIA,EAAK,aAAa,OAAOA,EAAK,aAAa,SAC7CA,EAAK,SAASA,EAAK,cAEbA,EAAK,UAAQ;AAAA,QACnB,KAAK;AACH,UAAAA,EAAK,KAAKA,EAAK,QAAQ,IAAIA,EAAK;AAChC;AAAA,QACF,KAAK;AACH,UAAAA,EAAK,KAAKA,EAAK,QAAQ,IAAIA,EAAK;AAChC;AAAA,MACH;AAAA,EAEP,CAAG;AACH;AAEA,SAASsX,GAA8BjW,GAAG;AACxCc,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAU,GAAG;AAChC,QAAIrB,IAAOqB,EAAE,KAAK,CAAC;AACnB,IAAIrB,EAAK,YACPA,EAAK,OAAO;EAElB,CAAG;AACH;AAEA,SAASgX,GAAkB3V,GAAG;AAC5Bc,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,QAAImD,EAAE,SAASnD,CAAC,EAAE,QAAQ;AACxB,UAAIuG,IAAOpD,EAAE,KAAKnD,CAAC,GACf,IAAImD,EAAE,KAAKoD,EAAK,SAAS,GACzB2U,IAAI/X,EAAE,KAAKoD,EAAK,YAAY,GAC5B4U,IAAIhY,EAAE,KAAK4M,GAAOxJ,EAAK,UAAU,CAAC,GAClC6U,IAAIjY,EAAE,KAAK4M,GAAOxJ,EAAK,WAAW,CAAC;AAEvC,MAAAA,EAAK,QAAQ,KAAK,IAAI6U,EAAE,IAAID,EAAE,CAAC,GAC/B5U,EAAK,SAAS,KAAK,IAAI2U,EAAE,IAAI,EAAE,CAAC,GAChC3U,EAAK,IAAI4U,EAAE,IAAI5U,EAAK,QAAQ,GAC5BA,EAAK,IAAI,EAAE,IAAIA,EAAK,SAAS;AAAA,IAC9B;AAAA,EACL,CAAG,GAEDtC,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,IAAImD,EAAE,KAAKnD,CAAC,EAAE,UAAU,YACtBmD,EAAE,WAAWnD,CAAC;AAAA,EAEpB,CAAG;AACH;AAEA,SAASiY,GAAgB9U,GAAG;AAC1Bc,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAU,GAAG;AAChC,QAAI,EAAE,MAAM,EAAE,GAAG;AACf,UAAIoD,IAAOpD,EAAE,KAAK,EAAE,CAAC;AACrB,MAAKoD,EAAK,cACRA,EAAK,YAAY,KAEnBA,EAAK,UAAU,KAAK,EAAE,GAAM,OAAOpD,EAAE,KAAK,CAAC,EAAG,CAAA,GAC9CA,EAAE,WAAW,CAAC;AAAA,IACf;AAAA,EACL,CAAG;AACH;AAEA,SAASwV,GAAgBxV,GAAG;AAC1B,MAAIyD,IAASwK,GAAsBjO,CAAC;AACpCc,EAAAA,EAAU2C,GAAQ,SAAU8K,GAAO;AACjC,QAAI2J,IAAa;AACjBpX,IAAAA,EAAUyN,GAAO,SAAU1R,GAAG+D,GAAG;AAC/B,UAAIwC,IAAOpD,EAAE,KAAKnD,CAAC;AACnB,MAAAuG,EAAK,QAAQxC,IAAIsX,GACjBpX,EAAUsC,EAAK,WAAW,SAAU+U,GAAU;AAC5C3T,QAAAA;AAAAA,UACExE;AAAA,UACA;AAAA,UACA;AAAA,YACE,OAAOmY,EAAS,MAAM;AAAA,YACtB,QAAQA,EAAS,MAAM;AAAA,YACvB,MAAM/U,EAAK;AAAA,YACX,OAAOxC,IAAI,EAAEsX;AAAA,YACb,GAAGC,EAAS;AAAA,YACZ,OAAOA,EAAS;AAAA,UACjB;AAAA,UACD;AAAA,QACV;AAAA,MACA,CAAO,GACD,OAAO/U,EAAK;AAAA,IAClB,CAAK;AAAA,EACL,CAAG;AACH;AAEA,SAASsS,GAAkB1V,GAAG;AAC5Bc,EAAAA,EAAUd,EAAE,MAAO,GAAE,SAAUnD,GAAG;AAChC,QAAIuG,IAAOpD,EAAE,KAAKnD,CAAC;AACnB,QAAIuG,EAAK,UAAU,YAAY;AAC7B,UAAIgV,IAAWpY,EAAE,KAAKoD,EAAK,EAAE,CAAC,GAC1BV,IAAI0V,EAAS,IAAIA,EAAS,QAAQ,GAClCzV,IAAIyV,EAAS,GACbxV,IAAKQ,EAAK,IAAIV,GACdG,IAAKuV,EAAS,SAAS;AAC3B,MAAApY,EAAE,QAAQoD,EAAK,GAAGA,EAAK,KAAK,GAC5BpD,EAAE,WAAWnD,CAAC,GACduG,EAAK,MAAM,SAAS;AAAA,QAClB,EAAE,GAAGV,IAAK,IAAIE,IAAM,GAAG,GAAGD,IAAIE,EAAI;AAAA,QAClC,EAAE,GAAGH,IAAK,IAAIE,IAAM,GAAG,GAAGD,IAAIE,EAAI;AAAA,QAClC,EAAE,GAAGH,IAAIE,GAAI,GAAGD,EAAG;AAAA,QACnB,EAAE,GAAGD,IAAK,IAAIE,IAAM,GAAG,GAAGD,IAAIE,EAAI;AAAA,QAClC,EAAE,GAAGH,IAAK,IAAIE,IAAM,GAAG,GAAGD,IAAIE,EAAI;AAAA,MAC1C,GACMO,EAAK,MAAM,IAAIA,EAAK,GACpBA,EAAK,MAAM,IAAIA,EAAK;AAAA,IACrB;AAAA,EACL,CAAG;AACH;AAEA,SAAS4T,GAAkBqB,GAAKnW,GAAO;AACrC,SAAOqR,GAAYvH,GAAOqM,GAAKnW,CAAK,GAAG,MAAM;AAC/C;AAEA,SAAS6U,GAAa7U,GAAO;AAC3B,MAAIoW,IAAW,CAAA;AACfxX,SAAAA,EAAUoB,GAAO,SAAUrF,GAAGqC,GAAG;AAC/B,IAAAoZ,EAASpZ,EAAE,YAAa,CAAA,IAAIrC;AAAA,EAChC,CAAG,GACMyb;AACT;"}