807 lines
120 KiB
Plaintext
807 lines
120 KiB
Plaintext
import { inspect } from "/_nuxt/node_modules/graphql/jsutils/inspect.mjs?v=e4f18c29";
|
|
import { GraphQLError } from "/_nuxt/node_modules/graphql/error/GraphQLError.mjs?v=e4f18c29";
|
|
import { Kind } from "/_nuxt/node_modules/graphql/language/kinds.mjs?v=e4f18c29";
|
|
import { print } from "/_nuxt/node_modules/graphql/language/printer.mjs?v=e4f18c29";
|
|
import {
|
|
getNamedType,
|
|
isInterfaceType,
|
|
isLeafType,
|
|
isListType,
|
|
isNonNullType,
|
|
isObjectType,
|
|
} from "/_nuxt/node_modules/graphql/type/definition.mjs?v=e4f18c29";
|
|
import { sortValueNode } from "/_nuxt/node_modules/graphql/utilities/sortValueNode.mjs?v=e4f18c29";
|
|
import { typeFromAST } from "/_nuxt/node_modules/graphql/utilities/typeFromAST.mjs?v=e4f18c29";
|
|
|
|
function reasonMessage(reason) {
|
|
if (Array.isArray(reason)) {
|
|
return reason
|
|
.map(
|
|
([responseName, subReason]) =>
|
|
`subfields "${responseName}" conflict because ` +
|
|
reasonMessage(subReason),
|
|
)
|
|
.join(' and ');
|
|
}
|
|
|
|
return reason;
|
|
}
|
|
/**
|
|
* Overlapping fields can be merged
|
|
*
|
|
* A selection set is only valid if all fields (including spreading any
|
|
* fragments) either correspond to distinct response names or can be merged
|
|
* without ambiguity.
|
|
*
|
|
* See https://spec.graphql.org/draft/#sec-Field-Selection-Merging
|
|
*/
|
|
|
|
export function OverlappingFieldsCanBeMergedRule(context) {
|
|
// A memoization for when two fragments are compared "between" each other for
|
|
// conflicts. Two fragments may be compared many times, so memoizing this can
|
|
// dramatically improve the performance of this validator.
|
|
const comparedFragmentPairs = new PairSet(); // A cache for the "field map" and list of fragment names found in any given
|
|
// selection set. Selection sets may be asked for this information multiple
|
|
// times, so this improves the performance of this validator.
|
|
|
|
const cachedFieldsAndFragmentNames = new Map();
|
|
return {
|
|
SelectionSet(selectionSet) {
|
|
const conflicts = findConflictsWithinSelectionSet(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
context.getParentType(),
|
|
selectionSet,
|
|
);
|
|
|
|
for (const [[responseName, reason], fields1, fields2] of conflicts) {
|
|
const reasonMsg = reasonMessage(reason);
|
|
context.reportError(
|
|
new GraphQLError(
|
|
`Fields "${responseName}" conflict because ${reasonMsg}. Use different aliases on the fields to fetch both if this was intentional.`,
|
|
{
|
|
nodes: fields1.concat(fields2),
|
|
},
|
|
),
|
|
);
|
|
}
|
|
},
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Algorithm:
|
|
*
|
|
* Conflicts occur when two fields exist in a query which will produce the same
|
|
* response name, but represent differing values, thus creating a conflict.
|
|
* The algorithm below finds all conflicts via making a series of comparisons
|
|
* between fields. In order to compare as few fields as possible, this makes
|
|
* a series of comparisons "within" sets of fields and "between" sets of fields.
|
|
*
|
|
* Given any selection set, a collection produces both a set of fields by
|
|
* also including all inline fragments, as well as a list of fragments
|
|
* referenced by fragment spreads.
|
|
*
|
|
* A) Each selection set represented in the document first compares "within" its
|
|
* collected set of fields, finding any conflicts between every pair of
|
|
* overlapping fields.
|
|
* Note: This is the *only time* that a the fields "within" a set are compared
|
|
* to each other. After this only fields "between" sets are compared.
|
|
*
|
|
* B) Also, if any fragment is referenced in a selection set, then a
|
|
* comparison is made "between" the original set of fields and the
|
|
* referenced fragment.
|
|
*
|
|
* C) Also, if multiple fragments are referenced, then comparisons
|
|
* are made "between" each referenced fragment.
|
|
*
|
|
* D) When comparing "between" a set of fields and a referenced fragment, first
|
|
* a comparison is made between each field in the original set of fields and
|
|
* each field in the the referenced set of fields.
|
|
*
|
|
* E) Also, if any fragment is referenced in the referenced selection set,
|
|
* then a comparison is made "between" the original set of fields and the
|
|
* referenced fragment (recursively referring to step D).
|
|
*
|
|
* F) When comparing "between" two fragments, first a comparison is made between
|
|
* each field in the first referenced set of fields and each field in the the
|
|
* second referenced set of fields.
|
|
*
|
|
* G) Also, any fragments referenced by the first must be compared to the
|
|
* second, and any fragments referenced by the second must be compared to the
|
|
* first (recursively referring to step F).
|
|
*
|
|
* H) When comparing two fields, if both have selection sets, then a comparison
|
|
* is made "between" both selection sets, first comparing the set of fields in
|
|
* the first selection set with the set of fields in the second.
|
|
*
|
|
* I) Also, if any fragment is referenced in either selection set, then a
|
|
* comparison is made "between" the other set of fields and the
|
|
* referenced fragment.
|
|
*
|
|
* J) Also, if two fragments are referenced in both selection sets, then a
|
|
* comparison is made "between" the two fragments.
|
|
*
|
|
*/
|
|
// Find all conflicts found "within" a selection set, including those found
|
|
// via spreading in fragments. Called when visiting each SelectionSet in the
|
|
// GraphQL Document.
|
|
function findConflictsWithinSelectionSet(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
parentType,
|
|
selectionSet,
|
|
) {
|
|
const conflicts = [];
|
|
const [fieldMap, fragmentNames] = getFieldsAndFragmentNames(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
parentType,
|
|
selectionSet,
|
|
); // (A) Find find all conflicts "within" the fields of this selection set.
|
|
// Note: this is the *only place* `collectConflictsWithin` is called.
|
|
|
|
collectConflictsWithin(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
fieldMap,
|
|
);
|
|
|
|
if (fragmentNames.length !== 0) {
|
|
// (B) Then collect conflicts between these fields and those represented by
|
|
// each spread fragment name found.
|
|
for (let i = 0; i < fragmentNames.length; i++) {
|
|
collectConflictsBetweenFieldsAndFragment(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
false,
|
|
fieldMap,
|
|
fragmentNames[i],
|
|
); // (C) Then compare this fragment with all other fragments found in this
|
|
// selection set to collect conflicts between fragments spread together.
|
|
// This compares each item in the list of fragment names to every other
|
|
// item in that same list (except for itself).
|
|
|
|
for (let j = i + 1; j < fragmentNames.length; j++) {
|
|
collectConflictsBetweenFragments(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
false,
|
|
fragmentNames[i],
|
|
fragmentNames[j],
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
return conflicts;
|
|
} // Collect all conflicts found between a set of fields and a fragment reference
|
|
// including via spreading in any nested fragments.
|
|
|
|
function collectConflictsBetweenFieldsAndFragment(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
fieldMap,
|
|
fragmentName,
|
|
) {
|
|
const fragment = context.getFragment(fragmentName);
|
|
|
|
if (!fragment) {
|
|
return;
|
|
}
|
|
|
|
const [fieldMap2, referencedFragmentNames] =
|
|
getReferencedFieldsAndFragmentNames(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
fragment,
|
|
); // Do not compare a fragment's fieldMap to itself.
|
|
|
|
if (fieldMap === fieldMap2) {
|
|
return;
|
|
} // (D) First collect any conflicts between the provided collection of fields
|
|
// and the collection of fields represented by the given fragment.
|
|
|
|
collectConflictsBetween(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
fieldMap,
|
|
fieldMap2,
|
|
); // (E) Then collect any conflicts between the provided collection of fields
|
|
// and any fragment names found in the given fragment.
|
|
|
|
for (const referencedFragmentName of referencedFragmentNames) {
|
|
// Memoize so two fragments are not compared for conflicts more than once.
|
|
if (
|
|
comparedFragmentPairs.has(
|
|
referencedFragmentName,
|
|
fragmentName,
|
|
areMutuallyExclusive,
|
|
)
|
|
) {
|
|
continue;
|
|
}
|
|
|
|
comparedFragmentPairs.add(
|
|
referencedFragmentName,
|
|
fragmentName,
|
|
areMutuallyExclusive,
|
|
);
|
|
collectConflictsBetweenFieldsAndFragment(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
fieldMap,
|
|
referencedFragmentName,
|
|
);
|
|
}
|
|
} // Collect all conflicts found between two fragments, including via spreading in
|
|
// any nested fragments.
|
|
|
|
function collectConflictsBetweenFragments(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
fragmentName1,
|
|
fragmentName2,
|
|
) {
|
|
// No need to compare a fragment to itself.
|
|
if (fragmentName1 === fragmentName2) {
|
|
return;
|
|
} // Memoize so two fragments are not compared for conflicts more than once.
|
|
|
|
if (
|
|
comparedFragmentPairs.has(
|
|
fragmentName1,
|
|
fragmentName2,
|
|
areMutuallyExclusive,
|
|
)
|
|
) {
|
|
return;
|
|
}
|
|
|
|
comparedFragmentPairs.add(fragmentName1, fragmentName2, areMutuallyExclusive);
|
|
const fragment1 = context.getFragment(fragmentName1);
|
|
const fragment2 = context.getFragment(fragmentName2);
|
|
|
|
if (!fragment1 || !fragment2) {
|
|
return;
|
|
}
|
|
|
|
const [fieldMap1, referencedFragmentNames1] =
|
|
getReferencedFieldsAndFragmentNames(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
fragment1,
|
|
);
|
|
const [fieldMap2, referencedFragmentNames2] =
|
|
getReferencedFieldsAndFragmentNames(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
fragment2,
|
|
); // (F) First, collect all conflicts between these two collections of fields
|
|
// (not including any nested fragments).
|
|
|
|
collectConflictsBetween(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
fieldMap1,
|
|
fieldMap2,
|
|
); // (G) Then collect conflicts between the first fragment and any nested
|
|
// fragments spread in the second fragment.
|
|
|
|
for (const referencedFragmentName2 of referencedFragmentNames2) {
|
|
collectConflictsBetweenFragments(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
fragmentName1,
|
|
referencedFragmentName2,
|
|
);
|
|
} // (G) Then collect conflicts between the second fragment and any nested
|
|
// fragments spread in the first fragment.
|
|
|
|
for (const referencedFragmentName1 of referencedFragmentNames1) {
|
|
collectConflictsBetweenFragments(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
referencedFragmentName1,
|
|
fragmentName2,
|
|
);
|
|
}
|
|
} // Find all conflicts found between two selection sets, including those found
|
|
// via spreading in fragments. Called when determining if conflicts exist
|
|
// between the sub-fields of two overlapping fields.
|
|
|
|
function findConflictsBetweenSubSelectionSets(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
parentType1,
|
|
selectionSet1,
|
|
parentType2,
|
|
selectionSet2,
|
|
) {
|
|
const conflicts = [];
|
|
const [fieldMap1, fragmentNames1] = getFieldsAndFragmentNames(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
parentType1,
|
|
selectionSet1,
|
|
);
|
|
const [fieldMap2, fragmentNames2] = getFieldsAndFragmentNames(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
parentType2,
|
|
selectionSet2,
|
|
); // (H) First, collect all conflicts between these two collections of field.
|
|
|
|
collectConflictsBetween(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
fieldMap1,
|
|
fieldMap2,
|
|
); // (I) Then collect conflicts between the first collection of fields and
|
|
// those referenced by each fragment name associated with the second.
|
|
|
|
for (const fragmentName2 of fragmentNames2) {
|
|
collectConflictsBetweenFieldsAndFragment(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
fieldMap1,
|
|
fragmentName2,
|
|
);
|
|
} // (I) Then collect conflicts between the second collection of fields and
|
|
// those referenced by each fragment name associated with the first.
|
|
|
|
for (const fragmentName1 of fragmentNames1) {
|
|
collectConflictsBetweenFieldsAndFragment(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
fieldMap2,
|
|
fragmentName1,
|
|
);
|
|
} // (J) Also collect conflicts between any fragment names by the first and
|
|
// fragment names by the second. This compares each item in the first set of
|
|
// names to each item in the second set of names.
|
|
|
|
for (const fragmentName1 of fragmentNames1) {
|
|
for (const fragmentName2 of fragmentNames2) {
|
|
collectConflictsBetweenFragments(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
fragmentName1,
|
|
fragmentName2,
|
|
);
|
|
}
|
|
}
|
|
|
|
return conflicts;
|
|
} // Collect all Conflicts "within" one collection of fields.
|
|
|
|
function collectConflictsWithin(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
fieldMap,
|
|
) {
|
|
// A field map is a keyed collection, where each key represents a response
|
|
// name and the value at that key is a list of all fields which provide that
|
|
// response name. For every response name, if there are multiple fields, they
|
|
// must be compared to find a potential conflict.
|
|
for (const [responseName, fields] of Object.entries(fieldMap)) {
|
|
// This compares every field in the list to every other field in this list
|
|
// (except to itself). If the list only has one item, nothing needs to
|
|
// be compared.
|
|
if (fields.length > 1) {
|
|
for (let i = 0; i < fields.length; i++) {
|
|
for (let j = i + 1; j < fields.length; j++) {
|
|
const conflict = findConflict(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
false, // within one collection is never mutually exclusive
|
|
responseName,
|
|
fields[i],
|
|
fields[j],
|
|
);
|
|
|
|
if (conflict) {
|
|
conflicts.push(conflict);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} // Collect all Conflicts between two collections of fields. This is similar to,
|
|
// but different from the `collectConflictsWithin` function above. This check
|
|
// assumes that `collectConflictsWithin` has already been called on each
|
|
// provided collection of fields. This is true because this validator traverses
|
|
// each individual selection set.
|
|
|
|
function collectConflictsBetween(
|
|
context,
|
|
conflicts,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
parentFieldsAreMutuallyExclusive,
|
|
fieldMap1,
|
|
fieldMap2,
|
|
) {
|
|
// A field map is a keyed collection, where each key represents a response
|
|
// name and the value at that key is a list of all fields which provide that
|
|
// response name. For any response name which appears in both provided field
|
|
// maps, each field from the first field map must be compared to every field
|
|
// in the second field map to find potential conflicts.
|
|
for (const [responseName, fields1] of Object.entries(fieldMap1)) {
|
|
const fields2 = fieldMap2[responseName];
|
|
|
|
if (fields2) {
|
|
for (const field1 of fields1) {
|
|
for (const field2 of fields2) {
|
|
const conflict = findConflict(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
parentFieldsAreMutuallyExclusive,
|
|
responseName,
|
|
field1,
|
|
field2,
|
|
);
|
|
|
|
if (conflict) {
|
|
conflicts.push(conflict);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} // Determines if there is a conflict between two particular fields, including
|
|
// comparing their sub-fields.
|
|
|
|
function findConflict(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
parentFieldsAreMutuallyExclusive,
|
|
responseName,
|
|
field1,
|
|
field2,
|
|
) {
|
|
const [parentType1, node1, def1] = field1;
|
|
const [parentType2, node2, def2] = field2; // If it is known that two fields could not possibly apply at the same
|
|
// time, due to the parent types, then it is safe to permit them to diverge
|
|
// in aliased field or arguments used as they will not present any ambiguity
|
|
// by differing.
|
|
// It is known that two parent types could never overlap if they are
|
|
// different Object types. Interface or Union types might overlap - if not
|
|
// in the current state of the schema, then perhaps in some future version,
|
|
// thus may not safely diverge.
|
|
|
|
const areMutuallyExclusive =
|
|
parentFieldsAreMutuallyExclusive ||
|
|
(parentType1 !== parentType2 &&
|
|
isObjectType(parentType1) &&
|
|
isObjectType(parentType2));
|
|
|
|
if (!areMutuallyExclusive) {
|
|
// Two aliases must refer to the same field.
|
|
const name1 = node1.name.value;
|
|
const name2 = node2.name.value;
|
|
|
|
if (name1 !== name2) {
|
|
return [
|
|
[responseName, `"${name1}" and "${name2}" are different fields`],
|
|
[node1],
|
|
[node2],
|
|
];
|
|
} // Two field calls must have the same arguments.
|
|
|
|
if (!sameArguments(node1, node2)) {
|
|
return [
|
|
[responseName, 'they have differing arguments'],
|
|
[node1],
|
|
[node2],
|
|
];
|
|
}
|
|
} // The return type for each field.
|
|
|
|
const type1 = def1 === null || def1 === void 0 ? void 0 : def1.type;
|
|
const type2 = def2 === null || def2 === void 0 ? void 0 : def2.type;
|
|
|
|
if (type1 && type2 && doTypesConflict(type1, type2)) {
|
|
return [
|
|
[
|
|
responseName,
|
|
`they return conflicting types "${inspect(type1)}" and "${inspect(
|
|
type2,
|
|
)}"`,
|
|
],
|
|
[node1],
|
|
[node2],
|
|
];
|
|
} // Collect and compare sub-fields. Use the same "visited fragment names" list
|
|
// for both collections so fields in a fragment reference are never
|
|
// compared to themselves.
|
|
|
|
const selectionSet1 = node1.selectionSet;
|
|
const selectionSet2 = node2.selectionSet;
|
|
|
|
if (selectionSet1 && selectionSet2) {
|
|
const conflicts = findConflictsBetweenSubSelectionSets(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
comparedFragmentPairs,
|
|
areMutuallyExclusive,
|
|
getNamedType(type1),
|
|
selectionSet1,
|
|
getNamedType(type2),
|
|
selectionSet2,
|
|
);
|
|
return subfieldConflicts(conflicts, responseName, node1, node2);
|
|
}
|
|
}
|
|
|
|
function sameArguments(node1, node2) {
|
|
const args1 = node1.arguments;
|
|
const args2 = node2.arguments;
|
|
|
|
if (args1 === undefined || args1.length === 0) {
|
|
return args2 === undefined || args2.length === 0;
|
|
}
|
|
|
|
if (args2 === undefined || args2.length === 0) {
|
|
return false;
|
|
}
|
|
/* c8 ignore next */
|
|
|
|
if (args1.length !== args2.length) {
|
|
/* c8 ignore next */
|
|
return false;
|
|
/* c8 ignore next */
|
|
}
|
|
|
|
const values2 = new Map(args2.map(({ name, value }) => [name.value, value]));
|
|
return args1.every((arg1) => {
|
|
const value1 = arg1.value;
|
|
const value2 = values2.get(arg1.name.value);
|
|
|
|
if (value2 === undefined) {
|
|
return false;
|
|
}
|
|
|
|
return stringifyValue(value1) === stringifyValue(value2);
|
|
});
|
|
}
|
|
|
|
function stringifyValue(value) {
|
|
return print(sortValueNode(value));
|
|
} // Two types conflict if both types could not apply to a value simultaneously.
|
|
// Composite types are ignored as their individual field types will be compared
|
|
// later recursively. However List and Non-Null types must match.
|
|
|
|
function doTypesConflict(type1, type2) {
|
|
if (isListType(type1)) {
|
|
return isListType(type2)
|
|
? doTypesConflict(type1.ofType, type2.ofType)
|
|
: true;
|
|
}
|
|
|
|
if (isListType(type2)) {
|
|
return true;
|
|
}
|
|
|
|
if (isNonNullType(type1)) {
|
|
return isNonNullType(type2)
|
|
? doTypesConflict(type1.ofType, type2.ofType)
|
|
: true;
|
|
}
|
|
|
|
if (isNonNullType(type2)) {
|
|
return true;
|
|
}
|
|
|
|
if (isLeafType(type1) || isLeafType(type2)) {
|
|
return type1 !== type2;
|
|
}
|
|
|
|
return false;
|
|
} // Given a selection set, return the collection of fields (a mapping of response
|
|
// name to field nodes and definitions) as well as a list of fragment names
|
|
// referenced via fragment spreads.
|
|
|
|
function getFieldsAndFragmentNames(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
parentType,
|
|
selectionSet,
|
|
) {
|
|
const cached = cachedFieldsAndFragmentNames.get(selectionSet);
|
|
|
|
if (cached) {
|
|
return cached;
|
|
}
|
|
|
|
const nodeAndDefs = Object.create(null);
|
|
const fragmentNames = Object.create(null);
|
|
|
|
_collectFieldsAndFragmentNames(
|
|
context,
|
|
parentType,
|
|
selectionSet,
|
|
nodeAndDefs,
|
|
fragmentNames,
|
|
);
|
|
|
|
const result = [nodeAndDefs, Object.keys(fragmentNames)];
|
|
cachedFieldsAndFragmentNames.set(selectionSet, result);
|
|
return result;
|
|
} // Given a reference to a fragment, return the represented collection of fields
|
|
// as well as a list of nested fragment names referenced via fragment spreads.
|
|
|
|
function getReferencedFieldsAndFragmentNames(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
fragment,
|
|
) {
|
|
// Short-circuit building a type from the node if possible.
|
|
const cached = cachedFieldsAndFragmentNames.get(fragment.selectionSet);
|
|
|
|
if (cached) {
|
|
return cached;
|
|
}
|
|
|
|
const fragmentType = typeFromAST(context.getSchema(), fragment.typeCondition);
|
|
return getFieldsAndFragmentNames(
|
|
context,
|
|
cachedFieldsAndFragmentNames,
|
|
fragmentType,
|
|
fragment.selectionSet,
|
|
);
|
|
}
|
|
|
|
function _collectFieldsAndFragmentNames(
|
|
context,
|
|
parentType,
|
|
selectionSet,
|
|
nodeAndDefs,
|
|
fragmentNames,
|
|
) {
|
|
for (const selection of selectionSet.selections) {
|
|
switch (selection.kind) {
|
|
case Kind.FIELD: {
|
|
const fieldName = selection.name.value;
|
|
let fieldDef;
|
|
|
|
if (isObjectType(parentType) || isInterfaceType(parentType)) {
|
|
fieldDef = parentType.getFields()[fieldName];
|
|
}
|
|
|
|
const responseName = selection.alias
|
|
? selection.alias.value
|
|
: fieldName;
|
|
|
|
if (!nodeAndDefs[responseName]) {
|
|
nodeAndDefs[responseName] = [];
|
|
}
|
|
|
|
nodeAndDefs[responseName].push([parentType, selection, fieldDef]);
|
|
break;
|
|
}
|
|
|
|
case Kind.FRAGMENT_SPREAD:
|
|
fragmentNames[selection.name.value] = true;
|
|
break;
|
|
|
|
case Kind.INLINE_FRAGMENT: {
|
|
const typeCondition = selection.typeCondition;
|
|
const inlineFragmentType = typeCondition
|
|
? typeFromAST(context.getSchema(), typeCondition)
|
|
: parentType;
|
|
|
|
_collectFieldsAndFragmentNames(
|
|
context,
|
|
inlineFragmentType,
|
|
selection.selectionSet,
|
|
nodeAndDefs,
|
|
fragmentNames,
|
|
);
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
} // Given a series of Conflicts which occurred between two sub-fields, generate
|
|
// a single Conflict.
|
|
|
|
function subfieldConflicts(conflicts, responseName, node1, node2) {
|
|
if (conflicts.length > 0) {
|
|
return [
|
|
[responseName, conflicts.map(([reason]) => reason)],
|
|
[node1, ...conflicts.map(([, fields1]) => fields1).flat()],
|
|
[node2, ...conflicts.map(([, , fields2]) => fields2).flat()],
|
|
];
|
|
}
|
|
}
|
|
/**
|
|
* A way to keep track of pairs of things when the ordering of the pair does not matter.
|
|
*/
|
|
|
|
class PairSet {
|
|
constructor() {
|
|
this._data = new Map();
|
|
}
|
|
|
|
has(a, b, areMutuallyExclusive) {
|
|
var _this$_data$get;
|
|
|
|
const [key1, key2] = a < b ? [a, b] : [b, a];
|
|
const result =
|
|
(_this$_data$get = this._data.get(key1)) === null ||
|
|
_this$_data$get === void 0
|
|
? void 0
|
|
: _this$_data$get.get(key2);
|
|
|
|
if (result === undefined) {
|
|
return false;
|
|
} // areMutuallyExclusive being false is a superset of being true, hence if
|
|
// we want to know if this PairSet "has" these two with no exclusivity,
|
|
// we have to ensure it was added as such.
|
|
|
|
return areMutuallyExclusive ? true : areMutuallyExclusive === result;
|
|
}
|
|
|
|
add(a, b, areMutuallyExclusive) {
|
|
const [key1, key2] = a < b ? [a, b] : [b, a];
|
|
|
|
const map = this._data.get(key1);
|
|
|
|
if (map === undefined) {
|
|
this._data.set(key1, new Map([[key2, areMutuallyExclusive]]));
|
|
} else {
|
|
map.set(key2, areMutuallyExclusive);
|
|
}
|
|
}
|
|
}
|
|
|
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk92ZXJsYXBwaW5nRmllbGRzQ2FuQmVNZXJnZWRSdWxlLm1qcz92PWU0ZjE4YzI5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluc3BlY3QgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL2pzdXRpbHMvaW5zcGVjdC5tanM/dj1lNGYxOGMyOVwiO1xuaW1wb3J0IHsgR3JhcGhRTEVycm9yIH0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC9lcnJvci9HcmFwaFFMRXJyb3IubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7IEtpbmQgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL2xhbmd1YWdlL2tpbmRzLm1qcz92PWU0ZjE4YzI5XCI7XG5pbXBvcnQgeyBwcmludCB9IGZyb20gXCIvX251eHQvbm9kZV9tb2R1bGVzL2dyYXBocWwvbGFuZ3VhZ2UvcHJpbnRlci5tanM/dj1lNGYxOGMyOVwiO1xuaW1wb3J0IHtcbiAgZ2V0TmFtZWRUeXBlLFxuICBpc0ludGVyZmFjZVR5cGUsXG4gIGlzTGVhZlR5cGUsXG4gIGlzTGlzdFR5cGUsXG4gIGlzTm9uTnVsbFR5cGUsXG4gIGlzT2JqZWN0VHlwZSxcbn0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC90eXBlL2RlZmluaXRpb24ubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7IHNvcnRWYWx1ZU5vZGUgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL3V0aWxpdGllcy9zb3J0VmFsdWVOb2RlLm1qcz92PWU0ZjE4YzI5XCI7XG5pbXBvcnQgeyB0eXBlRnJvbUFTVCB9IGZyb20gXCIvX251eHQvbm9kZV9tb2R1bGVzL2dyYXBocWwvdXRpbGl0aWVzL3R5cGVGcm9tQVNULm1qcz92PWU0ZjE4YzI5XCI7XG5cbmZ1bmN0aW9uIHJlYXNvbk1lc3NhZ2UocmVhc29uKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHJlYXNvbikpIHtcbiAgICByZXR1cm4gcmVhc29uXG4gICAgICAubWFwKFxuICAgICAgICAoW3Jlc3BvbnNlTmFtZSwgc3ViUmVhc29uXSkgPT5cbiAgICAgICAgICBgc3ViZmllbGRzIFwiJHtyZXNwb25zZU5hbWV9XCIgY29uZmxpY3QgYmVjYXVzZSBgICtcbiAgICAgICAgICByZWFzb25NZXNzYWdlKHN1YlJlYXNvbiksXG4gICAgICApXG4gICAgICAuam9pbignIGFuZCAnKTtcbiAgfVxuXG4gIHJldHVybiByZWFzb247XG59XG4vKipcbiAqIE92ZXJsYXBwaW5nIGZpZWxkcyBjYW4gYmUgbWVyZ2VkXG4gKlxuICogQSBzZWxlY3Rpb24gc2V0IGlzIG9ubHkgdmFsaWQgaWYgYWxsIGZpZWxkcyAoaW5jbHVkaW5nIHNwcmVhZGluZyBhbnlcbiAqIGZyYWdtZW50cykgZWl0aGVyIGNvcnJlc3BvbmQgdG8gZGlzdGluY3QgcmVzcG9uc2UgbmFtZXMgb3IgY2FuIGJlIG1lcmdlZFxuICogd2l0aG91dCBhbWJpZ3VpdHkuXG4gKlxuICogU2VlIGh0dHBzOi8vc3BlYy5ncmFwaHFsLm9yZy9kcmFmdC8jc2VjLUZpZWxkLVNlbGVjdGlvbi1NZXJnaW5nXG4gKi9cblxuZXhwb3J0IGZ1bmN0aW9uIE92ZXJsYXBwaW5nRmllbGRzQ2FuQmVNZXJnZWRSdWxlKGNvbnRleHQpIHtcbiAgLy8gQSBtZW1vaXphdGlvbiBmb3Igd2hlbiB0d28gZnJhZ21lbnRzIGFyZSBjb21wYXJlZCBcImJldHdlZW5cIiBlYWNoIG90aGVyIGZvclxuICAvLyBjb25mbGljdHMuIFR3byBmcmFnbWVudHMgbWF5IGJlIGNvbXBhcmVkIG1hbnkgdGltZXMsIHNvIG1lbW9pemluZyB0aGlzIGNhblxuICAvLyBkcmFtYXRpY2FsbHkgaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhpcyB2YWxpZGF0b3IuXG4gIGNvbnN0IGNvbXBhcmVkRnJhZ21lbnRQYWlycyA9IG5ldyBQYWlyU2V0KCk7IC8vIEEgY2FjaGUgZm9yIHRoZSBcImZpZWxkIG1hcFwiIGFuZCBsaXN0IG9mIGZyYWdtZW50IG5hbWVzIGZvdW5kIGluIGFueSBnaXZlblxuICAvLyBzZWxlY3Rpb24gc2V0LiBTZWxlY3Rpb24gc2V0cyBtYXkgYmUgYXNrZWQgZm9yIHRoaXMgaW5mb3JtYXRpb24gbXVsdGlwbGVcbiAgLy8gdGltZXMsIHNvIHRoaXMgaW1wcm92ZXMgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMgdmFsaWRhdG9yLlxuXG4gIGNvbnN0IGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMgPSBuZXcgTWFwKCk7XG4gIHJldHVybiB7XG4gICAgU2VsZWN0aW9uU2V0KHNlbGVjdGlvblNldCkge1xuICAgICAgY29uc3QgY29uZmxpY3RzID0gZmluZENvbmZsaWN0c1dpdGhpblNlbGVjdGlvblNldChcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2FjaGVkRmllbGRzQW5kRnJhZ21lbnROYW1lcyxcbiAgICAgICAgY29tcGFyZWRGcmFnbWVudFBhaXJzLFxuICAgICAgICBjb250ZXh0LmdldFBhcmVudFR5cGUoKSxcbiAgICAgICAgc2VsZWN0aW9uU2V0LFxuICAgICAgKTtcblxuICAgICAgZm9yIChjb25zdCBbW3Jlc3BvbnNlTmFtZSwgcmVhc29uXSwgZmllbGRzMSwgZmllbGRzMl0gb2YgY29uZmxpY3RzKSB7XG4gICAgICAgIGNvbnN0IHJlYXNvbk1zZyA9IHJlYXNvbk1lc3NhZ2UocmVhc29uKTtcbiAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgICBuZXcgR3JhcGhRTEVycm9yKFxuICAgICAgICAgICAgYEZpZWxkcyBcIiR7cmVzcG9uc2VOYW1lfVwiIGNvbmZsaWN0IGJlY2F1c2UgJHtyZWFzb25Nc2d9LiBVc2UgZGlmZmVyZW50IGFsaWFzZXMgb24gdGhlIGZpZWxkcyB0byBmZXRjaCBib3RoIGlmIHRoaXMgd2FzIGludGVudGlvbmFsLmAsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG5vZGVzOiBmaWVsZHMxLmNvbmNhdChmaWVsZHMyKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuXG4vKipcbiAqIEFsZ29yaXRobTpcbiAqXG4gKiBDb25mbGljdHMgb2NjdXIgd2hlbiB0d28gZmllbGRzIGV4aXN0IGluIGEgcXVlcnkgd2hpY2ggd2lsbCBwcm9kdWNlIHRoZSBzYW1lXG4gKiByZXNwb25zZSBuYW1lLCBidXQgcmVwcmVzZW50IGRpZmZlcmluZyB2YWx1ZXMsIHRodXMgY3JlYXRpbmcgYSBjb25mbGljdC5cbiAqIFRoZSBhbGdvcml0aG0gYmVsb3cgZmluZHMgYWxsIGNvbmZsaWN0cyB2aWEgbWFraW5nIGEgc2VyaWVzIG9mIGNvbXBhcmlzb25zXG4gKiBiZXR3ZWVuIGZpZWxkcy4gSW4gb3JkZXIgdG8gY29tcGFyZSBhcyBmZXcgZmllbGRzIGFzIHBvc3NpYmxlLCB0aGlzIG1ha2VzXG4gKiBhIHNlcmllcyBvZiBjb21wYXJpc29ucyBcIndpdGhpblwiIHNldHMgb2YgZmllbGRzIGFuZCBcImJldHdlZW5cIiBzZXRzIG9mIGZpZWxkcy5cbiAqXG4gKiBHaXZlbiBhbnkgc2VsZWN0aW9uIHNldCwgYSBjb2xsZWN0aW9uIHByb2R1Y2VzIGJvdGggYSBzZXQgb2YgZmllbGRzIGJ5XG4gKiBhbHNvIGluY2x1ZGluZyBhbGwgaW5saW5lIGZyYWdtZW50cywgYXMgd2VsbCBhcyBhIGxpc3Qgb2YgZnJhZ21lbnRzXG4gKiByZWZlcmVuY2VkIGJ5IGZyYWdtZW50IHNwcmVhZHMuXG4gKlxuICogQSkgRWFjaCBzZWxlY3Rpb24gc2V0IHJlcHJlc2VudGVkIGluIHRoZSBkb2N1bWVudCBmaXJzdCBjb21wYXJlcyBcIndpdGhpblwiIGl0c1xuICogY29sbGVjdGVkIHNldCBvZiBmaWVsZHMsIGZpbmRpbmcgYW55IGNvbmZsaWN0cyBiZXR3ZWVuIGV2ZXJ5IHBhaXIgb2ZcbiAqIG92ZXJsYXBwaW5nIGZpZWxkcy5cbiAqIE5vdGU6IFRoaXMgaXMgdGhlICpvbmx5IHRpbWUqIHRoYXQgYSB0aGUgZmllbGRzIFwid2l0aGluXCIgYSBzZXQgYXJlIGNvbXBhcmVkXG4gKiB0byBlYWNoIG90aGVyLiBBZnRlciB0aGlzIG9ubHkgZmllbGRzIFwiYmV0d2VlblwiIHNldHMgYXJlIGNvbXBhcmVkLlxuICpcbiAqIEIpIEFsc28sIGlmIGFueSBmcmFnbWVudCBpcyByZWZlcmVuY2VkIGluIGEgc2VsZWN0aW9uIHNldCwgdGhlbiBhXG4gKiBjb21wYXJpc29uIGlzIG1hZGUgXCJiZXR3ZWVuXCIgdGhlIG9yaWdpbmFsIHNldCBvZiBmaWVsZHMgYW5kIHRoZVxuICogcmVmZXJlbmNlZCBmcmFnbWVudC5cbiAqXG4gKiBDKSBBbHNvLCBpZiBtdWx0aXBsZSBmcmFnbWVudHMgYXJlIHJlZmVyZW5jZWQsIHRoZW4gY29tcGFyaXNvbnNcbiAqIGFyZSBtYWRlIFwiYmV0d2VlblwiIGVhY2ggcmVmZXJlbmNlZCBmcmFnbWVudC5cbiAqXG4gKiBEKSBXaGVuIGNvbXBhcmluZyBcImJldHdlZW5cIiBhIHNldCBvZiBmaWVsZHMgYW5kIGEgcmVmZXJlbmNlZCBmcmFnbWVudCwgZmlyc3RcbiAqIGEgY29tcGFyaXNvbiBpcyBtYWRlIGJldHdlZW4gZWFjaCBmaWVsZCBpbiB0aGUgb3JpZ2luYWwgc2V0IG9mIGZpZWxkcyBhbmRcbiAqIGVhY2ggZmllbGQgaW4gdGhlIHRoZSByZWZlcmVuY2VkIHNldCBvZiBmaWVsZHMuXG4gKlxuICogRSkgQWxzbywgaWYgYW55IGZyYWdtZW50IGlzIHJlZmVyZW5jZWQgaW4gdGhlIHJlZmVyZW5jZWQgc2VsZWN0aW9uIHNldCxcbiAqIHRoZW4gYSBjb21wYXJpc29uIGlzIG1hZGUgXCJiZXR3ZWVuXCIgdGhlIG9yaWdpbmFsIHNldCBvZiBmaWVsZHMgYW5kIHRoZVxuICogcmVmZXJlbmNlZCBmcmFnbWVudCAocmVjdXJzaXZlbHkgcmVmZXJyaW5nIHRvIHN0ZXAgRCkuXG4gKlxuICogRikgV2hlbiBjb21wYXJpbmcgXCJiZXR3ZWVuXCIgdHdvIGZyYWdtZW50cywgZmlyc3QgYSBjb21wYXJpc29uIGlzIG1hZGUgYmV0d2VlblxuICogZWFjaCBmaWVsZCBpbiB0aGUgZmlyc3QgcmVmZXJlbmNlZCBzZXQgb2YgZmllbGRzIGFuZCBlYWNoIGZpZWxkIGluIHRoZSB0aGVcbiAqIHNlY29uZCByZWZlcmVuY2VkIHNldCBvZiBmaWVsZHMuXG4gKlxuICogRykgQWxzbywgYW55IGZyYWdtZW50cyByZWZlcmVuY2VkIGJ5IHRoZSBmaXJzdCBtdXN0IGJlIGNvbXBhcmVkIHRvIHRoZVxuICogc2Vjb25kLCBhbmQgYW55IGZyYWdtZW50cyByZWZlcmVuY2VkIGJ5IHRoZSBzZWNvbmQgbXVzdCBiZSBjb21wYXJlZCB0byB0aGVcbiAqIGZpcnN0IChyZWN1cnNpdmVseSByZWZlcnJpbmcgdG8gc3RlcCBGKS5cbiAqXG4gKiBIKSBXaGVuIGNvbXBhcmluZyB0d28gZmllbGRzLCBpZiBib3RoIGhhdmUgc2VsZWN0aW9uIHNldHMsIHRoZW4gYSBjb21wYXJpc29uXG4gKiBpcyBtYWRlIFwiYmV0d2VlblwiIGJvdGggc2VsZWN0aW9uIHNldHMsIGZpcnN0IGNvbXBhcmluZyB0aGUgc2V0IG9mIGZpZWxkcyBpblxuICogdGhlIGZpcnN0IHNlbGVjdGlvbiBzZXQgd2l0aCB0aGUgc2V0IG9mIGZpZWxkcyBpbiB0aGUgc2Vjb25kLlxuICpcbiAqIEkpIEFsc28sIGlmIGFueSBmcmFnbWVudCBpcyByZWZlcmVuY2VkIGluIGVpdGhlciBzZWxlY3Rpb24gc2V0LCB0aGVuIGFcbiAqIGNvbXBhcmlzb24gaXMgbWFkZSBcImJldHdlZW5cIiB0aGUgb3RoZXIgc2V0IG9mIGZpZWxkcyBhbmQgdGhlXG4gKiByZWZlcmVuY2VkIGZyYWdtZW50LlxuICpcbiAqIEopIEFsc28sIGlmIHR3byBmcmFnbWVudHMgYXJlIHJlZmVyZW5jZWQgaW4gYm90aCBzZWxlY3Rpb24gc2V0cywgdGhlbiBhXG4gKiBjb21wYXJpc29uIGlzIG1hZGUgXCJiZXR3ZWVuXCIgdGhlIHR3byBmcmFnbWVudHMuXG4gKlxuICovXG4vLyBGaW5kIGFsbCBjb25mbGljdHMgZm91bmQgXCJ3aXRoaW5cIiBhIHNlbGVjdGlvbiBzZXQsIGluY2x1ZGluZyB0aG9zZSBmb3VuZFxuLy8gdmlhIHNwcmVhZGluZyBpbiBmcmFnbWVudHMuIENhbGxlZCB3aGVuIHZpc2l0aW5nIGVhY2ggU2VsZWN0aW9uU2V0IGluIHRoZVxuLy8gR3JhcGhRTCBEb2N1bWVudC5cbmZ1bmN0aW9uIGZpbmRDb25mbGljdHNXaXRoaW5TZWxlY3Rpb25TZXQoXG4gIGNvbnRleHQsXG4gIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gIGNvbXBhcmVkRnJhZ21lbnRQYWlycyxcbiAgcGFyZW50VHlwZSxcbiAgc2VsZWN0aW9uU2V0LFxuKSB7XG4gIGNvbnN0IGNvbmZsaWN0cyA9IFtdO1xuICBjb25zdCBbZmllbGRNYXAsIGZyYWdtZW50TmFtZXNdID0gZ2V0RmllbGRzQW5kRnJhZ21lbnROYW1lcyhcbiAgICBjb250ZXh0LFxuICAgIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gICAgcGFyZW50VHlwZSxcbiAgICBzZWxlY3Rpb25TZXQsXG4gICk7IC8vIChBKSBGaW5kIGZpbmQgYWxsIGNvbmZsaWN0cyBcIndpdGhpblwiIHRoZSBmaWVsZHMgb2YgdGhpcyBzZWxlY3Rpb24gc2V0LlxuICAvLyBOb3RlOiB0aGlzIGlzIHRoZSAqb25seSBwbGFjZSogYGNvbGxlY3RDb25mbGljdHNXaXRoaW5gIGlzIGNhbGxlZC5cblxuICBjb2xsZWN0Q29uZmxpY3RzV2l0aGluKFxuICAgIGNvbnRleHQsXG4gICAgY29uZmxpY3RzLFxuICAgIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gICAgY29tcGFyZWRGcmFnbWVudFBhaXJzLFxuICAgIGZpZWxkTWFwLFxuICApO1xuXG4gIGlmIChmcmFnbWVudE5hbWVzLmxlbmd0aCAhPT0gMCkge1xuICAgIC8vIChCKSBUaGVuIGNvbGxlY3QgY29uZmxpY3RzIGJldHdlZW4gdGhlc2UgZmllbGRzIGFuZCB0aG9zZSByZXByZXNlbnRlZCBieVxuICAgIC8vIGVhY2ggc3ByZWFkIGZyYWdtZW50IG5hbWUgZm91bmQuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmcmFnbWVudE5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb2xsZWN0Q29uZmxpY3RzQmV0d2VlbkZpZWxkc0FuZEZyYWdtZW50KFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjb25mbGljdHMsXG4gICAgICAgIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gICAgICAgIGNvbXBhcmVkRnJhZ21lbnRQYWlycyxcbiAgICAgICAgZmFsc2UsXG4gICAgICAgIGZpZWxkTWFwLFxuICAgICAgICBmcmFnbWVudE5hbWVzW2ldLFxuICAgICAgKTsgLy8gKEMpIFRoZW4gY29tcGFyZSB0aGlzIGZyYWdtZW50IHdpdGggYWxsIG90aGVyIGZyYWdtZW50cyBmb3VuZCBpbiB0aGlzXG4gICAgICAvLyBzZWxlY3Rpb24gc2V0IHRvIGNvbGxlY3QgY29uZmxpY3RzIGJldHdlZW4gZnJhZ21lbnRzIHNwcmVhZCB0b2dldGhlci5cbiAgICAgIC8vIFRoaXMgY29tcGFyZXMgZWFjaCBpdGVtIGluIHRoZSBsaXN0IG9mIGZyYWdtZW50IG5hbWVzIHRvIGV2ZXJ5IG90aGVyXG4gICAgICAvLyBpdGVtIGluIHRoYXQgc2FtZSBsaXN0IChleGNlcHQgZm9yIGl0c2VsZikuXG5cbiAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGZyYWdtZW50TmFtZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29sbGVjdENvbmZsaWN0c0JldHdlZW5GcmFnbWVudHMoXG4gICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICBjb25mbGljdHMsXG4gICAgICAgICAgY2FjaGVkRmllbGRzQW5kRnJhZ21lbnROYW1lcyxcbiAgICAgICAgICBjb21wYXJlZEZyYWdtZW50UGFpcnMsXG4gICAgICAgICAgZmFsc2UsXG4gICAgICAgICAgZnJhZ21lbnROYW1lc1tpXSxcbiAgICAgICAgICBmcmFnbWVudE5hbWVzW2pdLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb25mbGljdHM7XG59IC8vIENvbGxlY3QgYWxsIGNvbmZsaWN0cyBmb3VuZCBiZXR3ZWVuIGEgc2V0IG9mIGZpZWxkcyBhbmQgYSBmcmFnbWVudCByZWZlcmVuY2Vcbi8vIGluY2x1ZGluZyB2aWEgc3ByZWFkaW5nIGluIGFueSBuZXN0ZWQgZnJhZ21lbnRzLlxuXG5mdW5jdGlvbiBjb2xsZWN0Q29uZmxpY3RzQmV0d2VlbkZpZWxkc0FuZEZyYWdtZW50KFxuICBjb250ZXh0LFxuICBjb25mbGljdHMsXG4gIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gIGNvbXBhcmVkRnJhZ21lbnRQYWlycyxcbiAgYXJlTXV0dWFsbHlFeGNsdXNpdmUsXG4gIGZpZWxkTWFwLFxuICBmcmFnbWVudE5hbWUsXG4pIHtcbiAgY29uc3QgZnJhZ21lbnQgPSBjb250ZXh0LmdldEZyYWdtZW50KGZyYWdtZW50TmFtZSk7XG5cbiAgaWYgKCFmcmFnbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IFtmaWVsZE1hcDIsIHJlZmVyZW5jZWRGcmFnbWVudE5hbWVzXSA9XG4gICAgZ2V0UmVmZXJlbmNlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMoXG4gICAgICBjb250ZXh0LFxuICAgICAgY2FjaGVkRmllbGRzQW5kRnJhZ21lbnROYW1lcyxcbiAgICAgIGZyYWdtZW50LFxuICAgICk7IC8vIERvIG5vdCBjb21wYXJlIGEgZnJhZ21lbnQncyBmaWVsZE1hcCB0byBpdHNlbGYuXG5cbiAgaWYgKGZpZWxkTWFwID09PSBmaWVsZE1hcDIpIHtcbiAgICByZXR1cm47XG4gIH0gLy8gKEQpIEZpcnN0IGNvbGxlY3QgYW55IGNvbmZsaWN0cyBiZXR3ZWVuIHRoZSBwcm92aWRlZCBjb2xsZWN0aW9uIG9mIGZpZWxkc1xuICAvLyBhbmQgdGhlIGNvbGxlY3Rpb24gb2YgZmllbGRzIHJlcHJlc2VudGVkIGJ5IHRoZSBnaXZlbiBmcmFnbWVudC5cblxuICBjb2xsZWN0Q29uZmxpY3RzQmV0d2VlbihcbiAgICBjb250ZXh0LFxuICAgIGNvbmZsaWN0cyxcbiAgICBjYWNoZWRGaWVsZHNBbmRGcmFnbWVudE5hbWVzLFxuICAgIGNvbXBhcmVkRnJhZ21lbnRQYWlycyxcbiAgICBhcmVNdXR1YWxseUV4Y2x1c2l2ZSxcbiAgICBmaWVsZE1hcCxcbiAgICBmaWVsZE1hcDIsXG4gICk7IC8vIChFKSBUaGVuIGNvbGxlY3QgYW55IGNvbmZsaWN0cyBiZXR3ZWVuIHRoZSBwcm92aWRlZCBjb2xsZWN0aW9uIG9mIGZpZWxkc1xuICAvLyBhbmQgYW55IGZyYWdtZW50IG5hbWVzIGZvdW5kIGluIHRoZSBnaXZlbiBmcmFnbWVudC5cblxuICBmb3IgKGNvbnN0IHJlZmVyZW5jZWRGcmFnbWVudE5hbWUgb2YgcmVmZXJlbmNlZEZyYWdtZW50TmFtZXMpIHtcbiAgICAvLyBNZW1vaXplIHNvIHR3byBmcmFnbWVudHMgYXJlIG5vdCBjb21wYXJlZCBmb3IgY29uZmxpY3RzIG1vcmUgdGhhbiBvbmNlLlxuICAgIGlmIChcbiAgICAgIGNvbXBhcmVkRnJhZ21lbnRQYWlycy5oYXMoXG4gICAgICAgIHJlZmVyZW5jZWRGcmFnbWVudE5hbWUsXG4gICAgICAgIGZyYWdtZW50TmFtZSxcbiAgICAgICAgYXJlTXV0dWFsbHlFeGNsdXNpdmUsXG4gICAgICApXG4gICAgKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb21wYXJlZEZyYWdtZW50UGFpcnMuYWRkKFxuICAgICAgcmVmZXJlbmNlZEZyYWdtZW50TmFtZSxcbiAgICAgIGZyYWdtZW50TmFtZSxcbiAgICAgIGFyZU11dHVhbGx5RXhjbHVzaXZlLFxuICAgICk7XG4gICAgY29sbGVjdENvbmZsaWN0c0JldHdlZW5GaWVsZHNBbmRGcmFnbWVudChcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb25mbGljdHMsXG4gICAgICBjYWNoZWRGaWVsZHNBbmRGcmFnbWVudE5hbWVzLFxuICAgICAgY29tcGFyZWRGcmFnbWVudFBhaXJzLFxuICAgICAgYXJlTXV0dWFsbHlFeGNsdXNpdmUsXG4gICAgICBmaWVsZE1hcCxcbiAgICAgIHJlZmVyZW5jZWRGcmFnbWVudE5hbWUsXG4gICAgKTtcbiAgfVxufSAvLyBDb2xsZWN0IGFsbCBjb25mbGljdHMgZm91bmQgYmV0d2VlbiB0d28gZnJhZ21lbnRzLCBpbmNsdWRpbmcgdmlhIHNwcmVhZGluZyBpblxuLy8gYW55IG5lc3RlZCBmcmFnbWVudHMuXG5cbmZ1bmN0aW9uIGNvbGxlY3RDb25mbGljdHNCZXR3ZWVuRnJhZ21lbnRzKFxuICBjb250ZXh0LFxuICBjb25mbGljdHMsXG4gIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gIGNvbXBhcmVkRnJhZ21lbnRQYWlycyxcbiAgYXJlTXV0dWFsbHlFeGNsdXNpdmUsXG4gIGZyYWdtZW50TmFtZTEsXG4gIGZyYWdtZW50TmFtZTIsXG4pIHtcbiAgLy8gTm8gbmVlZCB0byBjb21wYXJlIGEgZnJhZ21lbnQgdG8gaXRzZWxmLlxuICBpZiAoZnJhZ21lbnROYW1lMSA9PT0gZnJhZ21lbnROYW1lMikge1xuICAgIHJldHVybjtcbiAgfSAvLyBNZW1vaXplIHNvIHR3byBmcmFnbWVudHMgYXJlIG5vdCBjb21wYXJlZCBmb3IgY29uZmxpY3RzIG1vcmUgdGhhbiBvbmNlLlxuXG4gIGlmIChcbiAgICBjb21wYXJlZEZyYWdtZW50UGFpcnMuaGFzKFxuICAgICAgZnJhZ21lbnROYW1lMSxcbiAgICAgIGZyYWdtZW50TmFtZTIsXG4gICAgICBhcmVNdXR1YWxseUV4Y2x1c2l2ZSxcbiAgICApXG4gICkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbXBhcmVkRnJhZ21lbnRQYWlycy5hZGQoZnJhZ21lbnROYW1lMSwgZnJhZ21lbnROYW1lMiwgYXJlTXV0dWFsbHlFeGNsdXNpdmUpO1xuICBjb25zdCBmcmFnbWVudDEgPSBjb250ZXh0LmdldEZyYWdtZW50KGZyYWdtZW50TmFtZTEpO1xuICBjb25zdCBmcmFnbWVudDIgPSBjb250ZXh0LmdldEZyYWdtZW50KGZyYWdtZW50TmFtZTIpO1xuXG4gIGlmICghZnJhZ21lbnQxIHx8ICFmcmFnbWVudDIpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBbZmllbGRNYXAxLCByZWZlcmVuY2VkRnJhZ21lbnROYW1lczFdID1cbiAgICBnZXRSZWZlcmVuY2VkRmllbGRzQW5kRnJhZ21lbnROYW1lcyhcbiAgICAgIGNvbnRleHQsXG4gICAgICBjYWNoZWRGaWVsZHNBbmRGcmFnbWVudE5hbWVzLFxuICAgICAgZnJhZ21lbnQxLFxuICAgICk7XG4gIGNvbnN0IFtmaWVsZE1hcDIsIHJlZmVyZW5jZWRGcmFnbWVudE5hbWVzMl0gPVxuICAgIGdldFJlZmVyZW5jZWRGaWVsZHNBbmRGcmFnbWVudE5hbWVzKFxuICAgICAgY29udGV4dCxcbiAgICAgIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gICAgICBmcmFnbWVudDIsXG4gICAgKTsgLy8gKEYpIEZpcnN0LCBjb2xsZWN0IGFsbCBjb25mbGljdHMgYmV0d2VlbiB0aGVzZSB0d28gY29sbGVjdGlvbnMgb2YgZmllbGRzXG4gIC8vIChub3QgaW5jbHVkaW5nIGFueSBuZXN0ZWQgZnJhZ21lbnRzKS5cblxuICBjb2xsZWN0Q29uZmxpY3RzQmV0d2VlbihcbiAgICBjb250ZXh0LFxuICAgIGNvbmZsaWN0cyxcbiAgICBjYWNoZWRGaWVsZHNBbmRGcmFnbWVudE5hbWVzLFxuICAgIGNvbXBhcmVkRnJhZ21lbnRQYWlycyxcbiAgICBhcmVNdXR1YWxseUV4Y2x1c2l2ZSxcbiAgICBmaWVsZE1hcDEsXG4gICAgZmllbGRNYXAyLFxuICApOyAvLyAoRykgVGhlbiBjb2xsZWN0IGNvbmZsaWN0cyBiZXR3ZWVuIHRoZSBmaXJzdCBmcmFnbWVudCBhbmQgYW55IG5lc3RlZFxuICAvLyBmcmFnbWVudHMgc3ByZWFkIGluIHRoZSBzZWNvbmQgZnJhZ21lbnQuXG5cbiAgZm9yIChjb25zdCByZWZlcmVuY2VkRnJhZ21lbnROYW1lMiBvZiByZWZlcmVuY2VkRnJhZ21lbnROYW1lczIpIHtcbiAgICBjb2xsZWN0Q29uZmxpY3RzQmV0d2VlbkZyYWdtZW50cyhcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb25mbGljdHMsXG4gICAgICBjYWNoZWRGaWVsZHNBbmRGcmFnbWVudE5hbWVzLFxuICAgICAgY29tcGFyZWRGcmFnbWVudFBhaXJzLFxuICAgICAgYXJlTXV0dWFsbHlFeGNsdXNpdmUsXG4gICAgICBmcmFnbWVudE5hbWUxLFxuICAgICAgcmVmZXJlbmNlZEZyYWdtZW50TmFtZTIsXG4gICAgKTtcbiAgfSAvLyAoRykgVGhlbiBjb2xsZWN0IGNvbmZsaWN0cyBiZXR3ZWVuIHRoZSBzZWNvbmQgZnJhZ21lbnQgYW5kIGFueSBuZXN0ZWRcbiAgLy8gZnJhZ21lbnRzIHNwcmVhZCBpbiB0aGUgZmlyc3QgZnJhZ21lbnQuXG5cbiAgZm9yIChjb25zdCByZWZlcmVuY2VkRnJhZ21lbnROYW1lMSBvZiByZWZlcmVuY2VkRnJhZ21lbnROYW1lczEpIHtcbiAgICBjb2xsZWN0Q29uZmxpY3RzQmV0d2VlbkZyYWdtZW50cyhcbiAgICAgIGNvbnRleHQsXG4gICAgICBjb25mbGljdHMsXG4gICAgICBjYWNoZWRGaWVsZHNBbmRGcmFnbWVudE5hbWVzLFxuICAgICAgY29tcGFyZWRGcmFnbWVudFBhaXJzLFxuICAgICAgYXJlTXV0dWFsbHlFeGNsdXNpdmUsXG4gICAgICByZWZlcmVuY2VkRnJhZ21lbnROYW1lMSxcbiAgICAgIGZyYWdtZW50TmFtZTIsXG4gICAgKTtcbiAgfVxufSAvLyBGaW5kIGFsbCBjb25mbGljdHMgZm91bmQgYmV0d2VlbiB0d28gc2VsZWN0aW9uIHNldHMsIGluY2x1ZGluZyB0aG9zZSBmb3VuZFxuLy8gdmlhIHNwcmVhZGluZyBpbiBmcmFnbWVudHMuIENhbGxlZCB3aGVuIGRldGVybWluaW5nIGlmIGNvbmZsaWN0cyBleGlzdFxuLy8gYmV0d2VlbiB0aGUgc3ViLWZpZWxkcyBvZiB0d28gb3ZlcmxhcHBpbmcgZmllbGRzLlxuXG5mdW5jdGlvbiBmaW5kQ29uZmxpY3RzQmV0d2VlblN1YlNlbGVjdGlvblNldHMoXG4gIGNvbnRleHQsXG4gIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gIGNvbXBhcmVkRnJhZ21lbnRQYWlycyxcbiAgYXJlTXV0dWFsbHlFeGNsdXNpdmUsXG4gIHBhcmVudFR5cGUxLFxuICBzZWxlY3Rpb25TZXQxLFxuICBwYXJlbnRUeXBlMixcbiAgc2VsZWN0aW9uU2V0Mixcbikge1xuICBjb25zdCBjb25mbGljdHMgPSBbXTtcbiAgY29uc3QgW2ZpZWxkTWFwMSwgZnJhZ21lbnROYW1lczFdID0gZ2V0RmllbGRzQW5kRnJhZ21lbnROYW1lcyhcbiAgICBjb250ZXh0LFxuICAgIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gICAgcGFyZW50VHlwZTEsXG4gICAgc2VsZWN0aW9uU2V0MSxcbiAgKTtcbiAgY29uc3QgW2ZpZWxkTWFwMiwgZnJhZ21lbnROYW1lczJdID0gZ2V0RmllbGRzQW5kRnJhZ21lbnROYW1lcyhcbiAgICBjb250ZXh0LFxuICAgIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gICAgcGFyZW50VHlwZTIsXG4gICAgc2VsZWN0aW9uU2V0MixcbiAgKTsgLy8gKEgpIEZpcnN0LCBjb2xsZWN0IGFsbCBjb25mbGljdHMgYmV0d2VlbiB0aGVzZSB0d28gY29sbGVjdGlvbnMgb2YgZmllbGQuXG5cbiAgY29sbGVjdENvbmZsaWN0c0JldHdlZW4oXG4gICAgY29udGV4dCxcbiAgICBjb25mbGljdHMsXG4gICAgY2FjaGVkRmllbGRzQW5kRnJhZ21lbnROYW1lcyxcbiAgICBjb21wYXJlZEZyYWdtZW50UGFpcnMsXG4gICAgYXJlTXV0dWFsbHlFeGNsdXNpdmUsXG4gICAgZmllbGRNYXAxLFxuICAgIGZpZWxkTWFwMixcbiAgKTsgLy8gKEkpIFRoZW4gY29sbGVjdCBjb25mbGljdHMgYmV0d2VlbiB0aGUgZmlyc3QgY29sbGVjdGlvbiBvZiBmaWVsZHMgYW5kXG4gIC8vIHRob3NlIHJlZmVyZW5jZWQgYnkgZWFjaCBmcmFnbWVudCBuYW1lIGFzc29jaWF0ZWQgd2l0aCB0aGUgc2Vjb25kLlxuXG4gIGZvciAoY29uc3QgZnJhZ21lbnROYW1lMiBvZiBmcmFnbWVudE5hbWVzMikge1xuICAgIGNvbGxlY3RDb25mbGljdHNCZXR3ZWVuRmllbGRzQW5kRnJhZ21lbnQoXG4gICAgICBjb250ZXh0LFxuICAgICAgY29uZmxpY3RzLFxuICAgICAgY2FjaGVkRmllbGRzQW5kRnJhZ21lbnROYW1lcyxcbiAgICAgIGNvbXBhcmVkRnJhZ21lbnRQYWlycyxcbiAgICAgIGFyZU11dHVhbGx5RXhjbHVzaXZlLFxuICAgICAgZmllbGRNYXAxLFxuICAgICAgZnJhZ21lbnROYW1lMixcbiAgICApO1xuICB9IC8vIChJKSBUaGVuIGNvbGxlY3QgY29uZmxpY3RzIGJldHdlZW4gdGhlIHNlY29uZCBjb2xsZWN0aW9uIG9mIGZpZWxkcyBhbmRcbiAgLy8gdGhvc2UgcmVmZXJlbmNlZCBieSBlYWNoIGZyYWdtZW50IG5hbWUgYXNzb2NpYXRlZCB3aXRoIHRoZSBmaXJzdC5cblxuICBmb3IgKGNvbnN0IGZyYWdtZW50TmFtZTEgb2YgZnJhZ21lbnROYW1lczEpIHtcbiAgICBjb2xsZWN0Q29uZmxpY3RzQmV0d2VlbkZpZWxkc0FuZEZyYWdtZW50KFxuICAgICAgY29udGV4dCxcbiAgICAgIGNvbmZsaWN0cyxcbiAgICAgIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gICAgICBjb21wYXJlZEZyYWdtZW50UGFpcnMsXG4gICAgICBhcmVNdXR1YWxseUV4Y2x1c2l2ZSxcbiAgICAgIGZpZWxkTWFwMixcbiAgICAgIGZyYWdtZW50TmFtZTEsXG4gICAgKTtcbiAgfSAvLyAoSikgQWxzbyBjb2xsZWN0IGNvbmZsaWN0cyBiZXR3ZWVuIGFueSBmcmFnbWVudCBuYW1lcyBieSB0aGUgZmlyc3QgYW5kXG4gIC8vIGZyYWdtZW50IG5hbWVzIGJ5IHRoZSBzZWNvbmQuIFRoaXMgY29tcGFyZXMgZWFjaCBpdGVtIGluIHRoZSBmaXJzdCBzZXQgb2ZcbiAgLy8gbmFtZXMgdG8gZWFjaCBpdGVtIGluIHRoZSBzZWNvbmQgc2V0IG9mIG5hbWVzLlxuXG4gIGZvciAoY29uc3QgZnJhZ21lbnROYW1lMSBvZiBmcmFnbWVudE5hbWVzMSkge1xuICAgIGZvciAoY29uc3QgZnJhZ21lbnROYW1lMiBvZiBmcmFnbWVudE5hbWVzMikge1xuICAgICAgY29sbGVjdENvbmZsaWN0c0JldHdlZW5GcmFnbWVudHMoXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNvbmZsaWN0cyxcbiAgICAgICAgY2FjaGVkRmllbGRzQW5kRnJhZ21lbnROYW1lcyxcbiAgICAgICAgY29tcGFyZWRGcmFnbWVudFBhaXJzLFxuICAgICAgICBhcmVNdXR1YWxseUV4Y2x1c2l2ZSxcbiAgICAgICAgZnJhZ21lbnROYW1lMSxcbiAgICAgICAgZnJhZ21lbnROYW1lMixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGNvbmZsaWN0cztcbn0gLy8gQ29sbGVjdCBhbGwgQ29uZmxpY3RzIFwid2l0aGluXCIgb25lIGNvbGxlY3Rpb24gb2YgZmllbGRzLlxuXG5mdW5jdGlvbiBjb2xsZWN0Q29uZmxpY3RzV2l0aGluKFxuICBjb250ZXh0LFxuICBjb25mbGljdHMsXG4gIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gIGNvbXBhcmVkRnJhZ21lbnRQYWlycyxcbiAgZmllbGRNYXAsXG4pIHtcbiAgLy8gQSBmaWVsZCBtYXAgaXMgYSBrZXllZCBjb2xsZWN0aW9uLCB3aGVyZSBlYWNoIGtleSByZXByZXNlbnRzIGEgcmVzcG9uc2VcbiAgLy8gbmFtZSBhbmQgdGhlIHZhbHVlIGF0IHRoYXQga2V5IGlzIGEgbGlzdCBvZiBhbGwgZmllbGRzIHdoaWNoIHByb3ZpZGUgdGhhdFxuICAvLyByZXNwb25zZSBuYW1lLiBGb3IgZXZlcnkgcmVzcG9uc2UgbmFtZSwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZpZWxkcywgdGhleVxuICAvLyBtdXN0IGJlIGNvbXBhcmVkIHRvIGZpbmQgYSBwb3RlbnRpYWwgY29uZmxpY3QuXG4gIGZvciAoY29uc3QgW3Jlc3BvbnNlTmFtZSwgZmllbGRzXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZE1hcCkpIHtcbiAgICAvLyBUaGlzIGNvbXBhcmVzIGV2ZXJ5IGZpZWxkIGluIHRoZSBsaXN0IHRvIGV2ZXJ5IG90aGVyIGZpZWxkIGluIHRoaXMgbGlzdFxuICAgIC8vIChleGNlcHQgdG8gaXRzZWxmKS4gSWYgdGhlIGxpc3Qgb25seSBoYXMgb25lIGl0ZW0sIG5vdGhpbmcgbmVlZHMgdG9cbiAgICAvLyBiZSBjb21wYXJlZC5cbiAgICBpZiAoZmllbGRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmllbGRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IGZpZWxkcy5sZW5ndGg7IGorKykge1xuICAgICAgICAgIGNvbnN0IGNvbmZsaWN0ID0gZmluZENvbmZsaWN0KFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gICAgICAgICAgICBjb21wYXJlZEZyYWdtZW50UGFpcnMsXG4gICAgICAgICAgICBmYWxzZSwgLy8gd2l0aGluIG9uZSBjb2xsZWN0aW9uIGlzIG5ldmVyIG11dHVhbGx5IGV4Y2x1c2l2ZVxuICAgICAgICAgICAgcmVzcG9uc2VOYW1lLFxuICAgICAgICAgICAgZmllbGRzW2ldLFxuICAgICAgICAgICAgZmllbGRzW2pdLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICBpZiAoY29uZmxpY3QpIHtcbiAgICAgICAgICAgIGNvbmZsaWN0cy5wdXNoKGNvbmZsaWN0KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gQ29sbGVjdCBhbGwgQ29uZmxpY3RzIGJldHdlZW4gdHdvIGNvbGxlY3Rpb25zIG9mIGZpZWxkcy4gVGhpcyBpcyBzaW1pbGFyIHRvLFxuLy8gYnV0IGRpZmZlcmVudCBmcm9tIHRoZSBgY29sbGVjdENvbmZsaWN0c1dpdGhpbmAgZnVuY3Rpb24gYWJvdmUuIFRoaXMgY2hlY2tcbi8vIGFzc3VtZXMgdGhhdCBgY29sbGVjdENvbmZsaWN0c1dpdGhpbmAgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgb24gZWFjaFxuLy8gcHJvdmlkZWQgY29sbGVjdGlvbiBvZiBmaWVsZHMuIFRoaXMgaXMgdHJ1ZSBiZWNhdXNlIHRoaXMgdmFsaWRhdG9yIHRyYXZlcnNlc1xuLy8gZWFjaCBpbmRpdmlkdWFsIHNlbGVjdGlvbiBzZXQuXG5cbmZ1bmN0aW9uIGNvbGxlY3RDb25mbGljdHNCZXR3ZWVuKFxuICBjb250ZXh0LFxuICBjb25mbGljdHMsXG4gIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gIGNvbXBhcmVkRnJhZ21lbnRQYWlycyxcbiAgcGFyZW50RmllbGRzQXJlTXV0dWFsbHlFeGNsdXNpdmUsXG4gIGZpZWxkTWFwMSxcbiAgZmllbGRNYXAyLFxuKSB7XG4gIC8vIEEgZmllbGQgbWFwIGlzIGEga2V5ZWQgY29sbGVjdGlvbiwgd2hlcmUgZWFjaCBrZXkgcmVwcmVzZW50cyBhIHJlc3BvbnNlXG4gIC8vIG5hbWUgYW5kIHRoZSB2YWx1ZSBhdCB0aGF0IGtleSBpcyBhIGxpc3Qgb2YgYWxsIGZpZWxkcyB3aGljaCBwcm92aWRlIHRoYXRcbiAgLy8gcmVzcG9uc2UgbmFtZS4gRm9yIGFueSByZXNwb25zZSBuYW1lIHdoaWNoIGFwcGVhcnMgaW4gYm90aCBwcm92aWRlZCBmaWVsZFxuICAvLyBtYXBzLCBlYWNoIGZpZWxkIGZyb20gdGhlIGZpcnN0IGZpZWxkIG1hcCBtdXN0IGJlIGNvbXBhcmVkIHRvIGV2ZXJ5IGZpZWxkXG4gIC8vIGluIHRoZSBzZWNvbmQgZmllbGQgbWFwIHRvIGZpbmQgcG90ZW50aWFsIGNvbmZsaWN0cy5cbiAgZm9yIChjb25zdCBbcmVzcG9uc2VOYW1lLCBmaWVsZHMxXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZE1hcDEpKSB7XG4gICAgY29uc3QgZmllbGRzMiA9IGZpZWxkTWFwMltyZXNwb25zZU5hbWVdO1xuXG4gICAgaWYgKGZpZWxkczIpIHtcbiAgICAgIGZvciAoY29uc3QgZmllbGQxIG9mIGZpZWxkczEpIHtcbiAgICAgICAgZm9yIChjb25zdCBmaWVsZDIgb2YgZmllbGRzMikge1xuICAgICAgICAgIGNvbnN0IGNvbmZsaWN0ID0gZmluZENvbmZsaWN0KFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gICAgICAgICAgICBjb21wYXJlZEZyYWdtZW50UGFpcnMsXG4gICAgICAgICAgICBwYXJlbnRGaWVsZHNBcmVNdXR1YWxseUV4Y2x1c2l2ZSxcbiAgICAgICAgICAgIHJlc3BvbnNlTmFtZSxcbiAgICAgICAgICAgIGZpZWxkMSxcbiAgICAgICAgICAgIGZpZWxkMixcbiAgICAgICAgICApO1xuXG4gICAgICAgICAgaWYgKGNvbmZsaWN0KSB7XG4gICAgICAgICAgICBjb25mbGljdHMucHVzaChjb25mbGljdCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIERldGVybWluZXMgaWYgdGhlcmUgaXMgYSBjb25mbGljdCBiZXR3ZWVuIHR3byBwYXJ0aWN1bGFyIGZpZWxkcywgaW5jbHVkaW5nXG4vLyBjb21wYXJpbmcgdGhlaXIgc3ViLWZpZWxkcy5cblxuZnVuY3Rpb24gZmluZENvbmZsaWN0KFxuICBjb250ZXh0LFxuICBjYWNoZWRGaWVsZHNBbmRGcmFnbWVudE5hbWVzLFxuICBjb21wYXJlZEZyYWdtZW50UGFpcnMsXG4gIHBhcmVudEZpZWxkc0FyZU11dHVhbGx5RXhjbHVzaXZlLFxuICByZXNwb25zZU5hbWUsXG4gIGZpZWxkMSxcbiAgZmllbGQyLFxuKSB7XG4gIGNvbnN0IFtwYXJlbnRUeXBlMSwgbm9kZTEsIGRlZjFdID0gZmllbGQxO1xuICBjb25zdCBbcGFyZW50VHlwZTIsIG5vZGUyLCBkZWYyXSA9IGZpZWxkMjsgLy8gSWYgaXQgaXMga25vd24gdGhhdCB0d28gZmllbGRzIGNvdWxkIG5vdCBwb3NzaWJseSBhcHBseSBhdCB0aGUgc2FtZVxuICAvLyB0aW1lLCBkdWUgdG8gdGhlIHBhcmVudCB0eXBlcywgdGhlbiBpdCBpcyBzYWZlIHRvIHBlcm1pdCB0aGVtIHRvIGRpdmVyZ2VcbiAgLy8gaW4gYWxpYXNlZCBmaWVsZCBvciBhcmd1bWVudHMgdXNlZCBhcyB0aGV5IHdpbGwgbm90IHByZXNlbnQgYW55IGFtYmlndWl0eVxuICAvLyBieSBkaWZmZXJpbmcuXG4gIC8vIEl0IGlzIGtub3duIHRoYXQgdHdvIHBhcmVudCB0eXBlcyBjb3VsZCBuZXZlciBvdmVybGFwIGlmIHRoZXkgYXJlXG4gIC8vIGRpZmZlcmVudCBPYmplY3QgdHlwZXMuIEludGVyZmFjZSBvciBVbmlvbiB0eXBlcyBtaWdodCBvdmVybGFwIC0gaWYgbm90XG4gIC8vIGluIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBzY2hlbWEsIHRoZW4gcGVyaGFwcyBpbiBzb21lIGZ1dHVyZSB2ZXJzaW9uLFxuICAvLyB0aHVzIG1heSBub3Qgc2FmZWx5IGRpdmVyZ2UuXG5cbiAgY29uc3QgYXJlTXV0dWFsbHlFeGNsdXNpdmUgPVxuICAgIHBhcmVudEZpZWxkc0FyZU11dHVhbGx5RXhjbHVzaXZlIHx8XG4gICAgKHBhcmVudFR5cGUxICE9PSBwYXJlbnRUeXBlMiAmJlxuICAgICAgaXNPYmplY3RUeXBlKHBhcmVudFR5cGUxKSAmJlxuICAgICAgaXNPYmplY3RUeXBlKHBhcmVudFR5cGUyKSk7XG5cbiAgaWYgKCFhcmVNdXR1YWxseUV4Y2x1c2l2ZSkge1xuICAgIC8vIFR3byBhbGlhc2VzIG11c3QgcmVmZXIgdG8gdGhlIHNhbWUgZmllbGQuXG4gICAgY29uc3QgbmFtZTEgPSBub2RlMS5uYW1lLnZhbHVlO1xuICAgIGNvbnN0IG5hbWUyID0gbm9kZTIubmFtZS52YWx1ZTtcblxuICAgIGlmIChuYW1lMSAhPT0gbmFtZTIpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFtyZXNwb25zZU5hbWUsIGBcIiR7bmFtZTF9XCIgYW5kIFwiJHtuYW1lMn1cIiBhcmUgZGlmZmVyZW50IGZpZWxkc2BdLFxuICAgICAgICBbbm9kZTFdLFxuICAgICAgICBbbm9kZTJdLFxuICAgICAgXTtcbiAgICB9IC8vIFR3byBmaWVsZCBjYWxscyBtdXN0IGhhdmUgdGhlIHNhbWUgYXJndW1lbnRzLlxuXG4gICAgaWYgKCFzYW1lQXJndW1lbnRzKG5vZGUxLCBub2RlMikpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIFtyZXNwb25zZU5hbWUsICd0aGV5IGhhdmUgZGlmZmVyaW5nIGFyZ3VtZW50cyddLFxuICAgICAgICBbbm9kZTFdLFxuICAgICAgICBbbm9kZTJdLFxuICAgICAgXTtcbiAgICB9XG4gIH0gLy8gVGhlIHJldHVybiB0eXBlIGZvciBlYWNoIGZpZWxkLlxuXG4gIGNvbnN0IHR5cGUxID0gZGVmMSA9PT0gbnVsbCB8fCBkZWYxID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWYxLnR5cGU7XG4gIGNvbnN0IHR5cGUyID0gZGVmMiA9PT0gbnVsbCB8fCBkZWYyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWYyLnR5cGU7XG5cbiAgaWYgKHR5cGUxICYmIHR5cGUyICYmIGRvVHlwZXNDb25mbGljdCh0eXBlMSwgdHlwZTIpKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIFtcbiAgICAgICAgcmVzcG9uc2VOYW1lLFxuICAgICAgICBgdGhleSByZXR1cm4gY29uZmxpY3RpbmcgdHlwZXMgXCIke2luc3BlY3QodHlwZTEpfVwiIGFuZCBcIiR7aW5zcGVjdChcbiAgICAgICAgICB0eXBlMixcbiAgICAgICAgKX1cImAsXG4gICAgICBdLFxuICAgICAgW25vZGUxXSxcbiAgICAgIFtub2RlMl0sXG4gICAgXTtcbiAgfSAvLyBDb2xsZWN0IGFuZCBjb21wYXJlIHN1Yi1maWVsZHMuIFVzZSB0aGUgc2FtZSBcInZpc2l0ZWQgZnJhZ21lbnQgbmFtZXNcIiBsaXN0XG4gIC8vIGZvciBib3RoIGNvbGxlY3Rpb25zIHNvIGZpZWxkcyBpbiBhIGZyYWdtZW50IHJlZmVyZW5jZSBhcmUgbmV2ZXJcbiAgLy8gY29tcGFyZWQgdG8gdGhlbXNlbHZlcy5cblxuICBjb25zdCBzZWxlY3Rpb25TZXQxID0gbm9kZTEuc2VsZWN0aW9uU2V0O1xuICBjb25zdCBzZWxlY3Rpb25TZXQyID0gbm9kZTIuc2VsZWN0aW9uU2V0O1xuXG4gIGlmIChzZWxlY3Rpb25TZXQxICYmIHNlbGVjdGlvblNldDIpIHtcbiAgICBjb25zdCBjb25mbGljdHMgPSBmaW5kQ29uZmxpY3RzQmV0d2VlblN1YlNlbGVjdGlvblNldHMoXG4gICAgICBjb250ZXh0LFxuICAgICAgY2FjaGVkRmllbGRzQW5kRnJhZ21lbnROYW1lcyxcbiAgICAgIGNvbXBhcmVkRnJhZ21lbnRQYWlycyxcbiAgICAgIGFyZU11dHVhbGx5RXhjbHVzaXZlLFxuICAgICAgZ2V0TmFtZWRUeXBlKHR5cGUxKSxcbiAgICAgIHNlbGVjdGlvblNldDEsXG4gICAgICBnZXROYW1lZFR5cGUodHlwZTIpLFxuICAgICAgc2VsZWN0aW9uU2V0MixcbiAgICApO1xuICAgIHJldHVybiBzdWJmaWVsZENvbmZsaWN0cyhjb25mbGljdHMsIHJlc3BvbnNlTmFtZSwgbm9kZTEsIG5vZGUyKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzYW1lQXJndW1lbnRzKG5vZGUxLCBub2RlMikge1xuICBjb25zdCBhcmdzMSA9IG5vZGUxLmFyZ3VtZW50cztcbiAgY29uc3QgYXJnczIgPSBub2RlMi5hcmd1bWVudHM7XG5cbiAgaWYgKGFyZ3MxID09PSB1bmRlZmluZWQgfHwgYXJnczEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGFyZ3MyID09PSB1bmRlZmluZWQgfHwgYXJnczIubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgaWYgKGFyZ3MyID09PSB1bmRlZmluZWQgfHwgYXJnczIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8qIGM4IGlnbm9yZSBuZXh0ICovXG5cbiAgaWYgKGFyZ3MxLmxlbmd0aCAhPT0gYXJnczIubGVuZ3RoKSB7XG4gICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICByZXR1cm4gZmFsc2U7XG4gICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgfVxuXG4gIGNvbnN0IHZhbHVlczIgPSBuZXcgTWFwKGFyZ3MyLm1hcCgoeyBuYW1lLCB2YWx1ZSB9KSA9PiBbbmFtZS52YWx1ZSwgdmFsdWVdKSk7XG4gIHJldHVybiBhcmdzMS5ldmVyeSgoYXJnMSkgPT4ge1xuICAgIGNvbnN0IHZhbHVlMSA9IGFyZzEudmFsdWU7XG4gICAgY29uc3QgdmFsdWUyID0gdmFsdWVzMi5nZXQoYXJnMS5uYW1lLnZhbHVlKTtcblxuICAgIGlmICh2YWx1ZTIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBzdHJpbmdpZnlWYWx1ZSh2YWx1ZTEpID09PSBzdHJpbmdpZnlWYWx1ZSh2YWx1ZTIpO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5VmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHByaW50KHNvcnRWYWx1ZU5vZGUodmFsdWUpKTtcbn0gLy8gVHdvIHR5cGVzIGNvbmZsaWN0IGlmIGJvdGggdHlwZXMgY291bGQgbm90IGFwcGx5IHRvIGEgdmFsdWUgc2ltdWx0YW5lb3VzbHkuXG4vLyBDb21wb3NpdGUgdHlwZXMgYXJlIGlnbm9yZWQgYXMgdGhlaXIgaW5kaXZpZHVhbCBmaWVsZCB0eXBlcyB3aWxsIGJlIGNvbXBhcmVkXG4vLyBsYXRlciByZWN1cnNpdmVseS4gSG93ZXZlciBMaXN0IGFuZCBOb24tTnVsbCB0eXBlcyBtdXN0IG1hdGNoLlxuXG5mdW5jdGlvbiBkb1R5cGVzQ29uZmxpY3QodHlwZTEsIHR5cGUyKSB7XG4gIGlmIChpc0xpc3RUeXBlKHR5cGUxKSkge1xuICAgIHJldHVybiBpc0xpc3RUeXBlKHR5cGUyKVxuICAgICAgPyBkb1R5cGVzQ29uZmxpY3QodHlwZTEub2ZUeXBlLCB0eXBlMi5vZlR5cGUpXG4gICAgICA6IHRydWU7XG4gIH1cblxuICBpZiAoaXNMaXN0VHlwZSh0eXBlMikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc05vbk51bGxUeXBlKHR5cGUxKSkge1xuICAgIHJldHVybiBpc05vbk51bGxUeXBlKHR5cGUyKVxuICAgICAgPyBkb1R5cGVzQ29uZmxpY3QodHlwZTEub2ZUeXBlLCB0eXBlMi5vZlR5cGUpXG4gICAgICA6IHRydWU7XG4gIH1cblxuICBpZiAoaXNOb25OdWxsVHlwZSh0eXBlMikpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChpc0xlYWZUeXBlKHR5cGUxKSB8fCBpc0xlYWZUeXBlKHR5cGUyKSkge1xuICAgIHJldHVybiB0eXBlMSAhPT0gdHlwZTI7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59IC8vIEdpdmVuIGEgc2VsZWN0aW9uIHNldCwgcmV0dXJuIHRoZSBjb2xsZWN0aW9uIG9mIGZpZWxkcyAoYSBtYXBwaW5nIG9mIHJlc3BvbnNlXG4vLyBuYW1lIHRvIGZpZWxkIG5vZGVzIGFuZCBkZWZpbml0aW9ucykgYXMgd2VsbCBhcyBhIGxpc3Qgb2YgZnJhZ21lbnQgbmFtZXNcbi8vIHJlZmVyZW5jZWQgdmlhIGZyYWdtZW50IHNwcmVhZHMuXG5cbmZ1bmN0aW9uIGdldEZpZWxkc0FuZEZyYWdtZW50TmFtZXMoXG4gIGNvbnRleHQsXG4gIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gIHBhcmVudFR5cGUsXG4gIHNlbGVjdGlvblNldCxcbikge1xuICBjb25zdCBjYWNoZWQgPSBjYWNoZWRGaWVsZHNBbmRGcmFnbWVudE5hbWVzLmdldChzZWxlY3Rpb25TZXQpO1xuXG4gIGlmIChjYWNoZWQpIHtcbiAgICByZXR1cm4gY2FjaGVkO1xuICB9XG5cbiAgY29uc3Qgbm9kZUFuZERlZnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBjb25zdCBmcmFnbWVudE5hbWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBfY29sbGVjdEZpZWxkc0FuZEZyYWdtZW50TmFtZXMoXG4gICAgY29udGV4dCxcbiAgICBwYXJlbnRUeXBlLFxuICAgIHNlbGVjdGlvblNldCxcbiAgICBub2RlQW5kRGVmcyxcbiAgICBmcmFnbWVudE5hbWVzLFxuICApO1xuXG4gIGNvbnN0IHJlc3VsdCA9IFtub2RlQW5kRGVmcywgT2JqZWN0LmtleXMoZnJhZ21lbnROYW1lcyldO1xuICBjYWNoZWRGaWVsZHNBbmRGcmFnbWVudE5hbWVzLnNldChzZWxlY3Rpb25TZXQsIHJlc3VsdCk7XG4gIHJldHVybiByZXN1bHQ7XG59IC8vIEdpdmVuIGEgcmVmZXJlbmNlIHRvIGEgZnJhZ21lbnQsIHJldHVybiB0aGUgcmVwcmVzZW50ZWQgY29sbGVjdGlvbiBvZiBmaWVsZHNcbi8vIGFzIHdlbGwgYXMgYSBsaXN0IG9mIG5lc3RlZCBmcmFnbWVudCBuYW1lcyByZWZlcmVuY2VkIHZpYSBmcmFnbWVudCBzcHJlYWRzLlxuXG5mdW5jdGlvbiBnZXRSZWZlcmVuY2VkRmllbGRzQW5kRnJhZ21lbnROYW1lcyhcbiAgY29udGV4dCxcbiAgY2FjaGVkRmllbGRzQW5kRnJhZ21lbnROYW1lcyxcbiAgZnJhZ21lbnQsXG4pIHtcbiAgLy8gU2hvcnQtY2lyY3VpdCBidWlsZGluZyBhIHR5cGUgZnJvbSB0aGUgbm9kZSBpZiBwb3NzaWJsZS5cbiAgY29uc3QgY2FjaGVkID0gY2FjaGVkRmllbGRzQW5kRnJhZ21lbnROYW1lcy5nZXQoZnJhZ21lbnQuc2VsZWN0aW9uU2V0KTtcblxuICBpZiAoY2FjaGVkKSB7XG4gICAgcmV0dXJuIGNhY2hlZDtcbiAgfVxuXG4gIGNvbnN0IGZyYWdtZW50VHlwZSA9IHR5cGVGcm9tQVNUKGNvbnRleHQuZ2V0U2NoZW1hKCksIGZyYWdtZW50LnR5cGVDb25kaXRpb24pO1xuICByZXR1cm4gZ2V0RmllbGRzQW5kRnJhZ21lbnROYW1lcyhcbiAgICBjb250ZXh0LFxuICAgIGNhY2hlZEZpZWxkc0FuZEZyYWdtZW50TmFtZXMsXG4gICAgZnJhZ21lbnRUeXBlLFxuICAgIGZyYWdtZW50LnNlbGVjdGlvblNldCxcbiAgKTtcbn1cblxuZnVuY3Rpb24gX2NvbGxlY3RGaWVsZHNBbmRGcmFnbWVudE5hbWVzKFxuICBjb250ZXh0LFxuICBwYXJlbnRUeXBlLFxuICBzZWxlY3Rpb25TZXQsXG4gIG5vZGVBbmREZWZzLFxuICBmcmFnbWVudE5hbWVzLFxuKSB7XG4gIGZvciAoY29uc3Qgc2VsZWN0aW9uIG9mIHNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSB7XG4gICAgc3dpdGNoIChzZWxlY3Rpb24ua2luZCkge1xuICAgICAgY2FzZSBLaW5kLkZJRUxEOiB7XG4gICAgICAgIGNvbnN0IGZpZWxkTmFtZSA9IHNlbGVjdGlvbi5uYW1lLnZhbHVlO1xuICAgICAgICBsZXQgZmllbGREZWY7XG5cbiAgICAgICAgaWYgKGlzT2JqZWN0VHlwZShwYXJlbnRUeXBlKSB8fCBpc0ludGVyZmFjZVR5cGUocGFyZW50VHlwZSkpIHtcbiAgICAgICAgICBmaWVsZERlZiA9IHBhcmVudFR5cGUuZ2V0RmllbGRzKClbZmllbGROYW1lXTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlTmFtZSA9IHNlbGVjdGlvbi5hbGlhc1xuICAgICAgICAgID8gc2VsZWN0aW9uLmFsaWFzLnZhbHVlXG4gICAgICAgICAgOiBmaWVsZE5hbWU7XG5cbiAgICAgICAgaWYgKCFub2RlQW5kRGVmc1tyZXNwb25zZU5hbWVdKSB7XG4gICAgICAgICAgbm9kZUFuZERlZnNbcmVzcG9uc2VOYW1lXSA9IFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZUFuZERlZnNbcmVzcG9uc2VOYW1lXS5wdXNoKFtwYXJlbnRUeXBlLCBzZWxlY3Rpb24sIGZpZWxkRGVmXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICBjYXNlIEtpbmQuRlJBR01FTlRfU1BSRUFEOlxuICAgICAgICBmcmFnbWVudE5hbWVzW3NlbGVjdGlvbi5uYW1lLnZhbHVlXSA9IHRydWU7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEtpbmQuSU5MSU5FX0ZSQUdNRU5UOiB7XG4gICAgICAgIGNvbnN0IHR5cGVDb25kaXRpb24gPSBzZWxlY3Rpb24udHlwZUNvbmRpdGlvbjtcbiAgICAgICAgY29uc3QgaW5saW5lRnJhZ21lbnRUeXBlID0gdHlwZUNvbmRpdGlvblxuICAgICAgICAgID8gdHlwZUZyb21BU1QoY29udGV4dC5nZXRTY2hlbWEoKSwgdHlwZUNvbmRpdGlvbilcbiAgICAgICAgICA6IHBhcmVudFR5cGU7XG5cbiAgICAgICAgX2NvbGxlY3RGaWVsZHNBbmRGcmFnbWVudE5hbWVzKFxuICAgICAgICAgIGNvbnRleHQsXG4gICAgICAgICAgaW5saW5lRnJhZ21lbnRUeXBlLFxuICAgICAgICAgIHNlbGVjdGlvbi5zZWxlY3Rpb25TZXQsXG4gICAgICAgICAgbm9kZUFuZERlZnMsXG4gICAgICAgICAgZnJhZ21lbnROYW1lcyxcbiAgICAgICAgKTtcblxuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0gLy8gR2l2ZW4gYSBzZXJpZXMgb2YgQ29uZmxpY3RzIHdoaWNoIG9jY3VycmVkIGJldHdlZW4gdHdvIHN1Yi1maWVsZHMsIGdlbmVyYXRlXG4vLyBhIHNpbmdsZSBDb25mbGljdC5cblxuZnVuY3Rpb24gc3ViZmllbGRDb25mbGljdHMoY29uZmxpY3RzLCByZXNwb25zZU5hbWUsIG5vZGUxLCBub2RlMikge1xuICBpZiAoY29uZmxpY3RzLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gW1xuICAgICAgW3Jlc3BvbnNlTmFtZSwgY29uZmxpY3RzLm1hcCgoW3JlYXNvbl0pID0+IHJlYXNvbildLFxuICAgICAgW25vZGUxLCAuLi5jb25mbGljdHMubWFwKChbLCBmaWVsZHMxXSkgPT4gZmllbGRzMSkuZmxhdCgpXSxcbiAgICAgIFtub2RlMiwgLi4uY29uZmxpY3RzLm1hcCgoWywgLCBmaWVsZHMyXSkgPT4gZmllbGRzMikuZmxhdCgpXSxcbiAgICBdO1xuICB9XG59XG4vKipcbiAqIEEgd2F5IHRvIGtlZXAgdHJhY2sgb2YgcGFpcnMgb2YgdGhpbmdzIHdoZW4gdGhlIG9yZGVyaW5nIG9mIHRoZSBwYWlyIGRvZXMgbm90IG1hdHRlci5cbiAqL1xuXG5jbGFzcyBQYWlyU2V0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZGF0YSA9IG5ldyBNYXAoKTtcbiAgfVxuXG4gIGhhcyhhLCBiLCBhcmVNdXR1YWxseUV4Y2x1c2l2ZSkge1xuICAgIHZhciBfdGhpcyRfZGF0YSRnZXQ7XG5cbiAgICBjb25zdCBba2V5MSwga2V5Ml0gPSBhIDwgYiA/IFthLCBiXSA6IFtiLCBhXTtcbiAgICBjb25zdCByZXN1bHQgPVxuICAgICAgKF90aGlzJF9kYXRhJGdldCA9IHRoaXMuX2RhdGEuZ2V0KGtleTEpKSA9PT0gbnVsbCB8fFxuICAgICAgX3RoaXMkX2RhdGEkZ2V0ID09PSB2b2lkIDBcbiAgICAgICAgPyB2b2lkIDBcbiAgICAgICAgOiBfdGhpcyRfZGF0YSRnZXQuZ2V0KGtleTIpO1xuXG4gICAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfSAvLyBhcmVNdXR1YWxseUV4Y2x1c2l2ZSBiZWluZyBmYWxzZSBpcyBhIHN1cGVyc2V0IG9mIGJlaW5nIHRydWUsIGhlbmNlIGlmXG4gICAgLy8gd2Ugd2FudCB0byBrbm93IGlmIHRoaXMgUGFpclNldCBcImhhc1wiIHRoZXNlIHR3byB3aXRoIG5vIGV4Y2x1c2l2aXR5LFxuICAgIC8vIHdlIGhhdmUgdG8gZW5zdXJlIGl0IHdhcyBhZGRlZCBhcyBzdWNoLlxuXG4gICAgcmV0dXJuIGFyZU11dHVhbGx5RXhjbHVzaXZlID8gdHJ1ZSA6IGFyZU11dHVhbGx5RXhjbHVzaXZlID09PSByZXN1bHQ7XG4gIH1cblxuICBhZGQoYSwgYiwgYXJlTXV0dWFsbHlFeGNsdXNpdmUpIHtcbiAgICBjb25zdCBba2V5MSwga2V5Ml0gPSBhIDwgYiA/IFthLCBiXSA6IFtiLCBhXTtcblxuICAgIGNvbnN0IG1hcCA9IHRoaXMuX2RhdGEuZ2V0KGtleTEpO1xuXG4gICAgaWYgKG1hcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLl9kYXRhLnNldChrZXkxLCBuZXcgTWFwKFtba2V5MiwgYXJlTXV0dWFsbHlFeGNsdXNpdmVdXSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBtYXAuc2V0KGtleTIsIGFyZU11dHVhbGx5RXhjbHVzaXZlKTtcbiAgICB9XG4gIH1cbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3BGLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDNUYsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUNoRixNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ25GLE1BQU0sQ0FBQztBQUNQLENBQUMsQ0FBQyxZQUFZO0FBQ2QsQ0FBQyxDQUFDLGVBQWU7QUFDakIsQ0FBQyxDQUFDLFVBQVU7QUFDWixDQUFDLENBQUMsVUFBVTtBQUNaLENBQUMsQ0FBQyxhQUFhO0FBQ2YsQ0FBQyxDQUFDLFlBQVk7QUFDZCxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ25FLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDbEcsTUFBTSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQzs7QUFFOUYsUUFBUSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMvQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQzdCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHO0FBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztBQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLENBQUMsQ0FBQzs7QUFFRixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU07QUFDZjtBQUNBLENBQUMsQ0FBQztBQUNGLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUM3QixDQUFDO0FBQ0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDO0FBQ3BFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO0FBQ3JFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTO0FBQ3BCLENBQUM7QUFDRCxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztBQUMzRCxDQUFDLENBQUM7O0FBRUYsTUFBTSxDQUFDLFFBQVEsQ0FBQyxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMxRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO0FBQzVFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxTQUFTO0FBQzNELENBQUMsQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDdEgsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3JFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxF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QUFTO0FBQ1osQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUMzRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUTtBQUMxRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO0FBQ2xFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU07QUFDL0UsQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDdkUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzdELENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLE9BQU87QUFDakMsQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDckUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU07QUFDckIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFDdEUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVE7QUFDcEUsQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ25FLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDL0QsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLFFBQVE7QUFDdEIsQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDdkQsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUTtBQUM5QyxDQUFDO0FBQ0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMxRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7QUFDekUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxNQUFNO0FBQ2pELENBQUM7QUFDRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxHQUFHO0FBQ3pFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztBQUN0RSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBQ0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQ3pFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFDMUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU07QUFDbEMsQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztBQUN0RSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO0FBQzFFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUNELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDO0FBQzVFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTTtBQUMvRCxDQUFDO0FBQ0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FB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QztBQUNKLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNWLENBQUMsQ0FBQzs7QUFFRixDQUFDLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLG9CQUFvQixDQUFDO0FBQy9FLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQztBQUN0RCxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7O0FBRXRELENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUNWLENBQUMsQ0FBQzs7QUFFRixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztBQUN2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO0FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0FBQ2xDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7QUFDZixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsd0JBQXdCLENBQUMsQ0FBQztBQUM5QyxDQUFDLENBQUMsQ0FBQyxDQUFDLG1DQUFtQztBQUN2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPO0FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsNEJBQTRCO0FBQ2xDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7QUFDZixDQUFDLENBQUMsQ0FBQyxDQUFD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QUcsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDMUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRO0FBQ2xELENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ2pFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDO0FBQzFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztBQUN4RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRO0FBQ2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVk7QUFDdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTztBQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw0QkFBNEI7QUFDeEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMscUJBQXFCO0FBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBQzlELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVk7QUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFWCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3hCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ3BDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNOLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDaEYsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJ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LENBQUM7QUFDdEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2xDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsQ0FBQzs7QUFFaEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQztBQUM3QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLO0FBQy9DLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLO0FBQ2xDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLOztBQUVsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsU0FBUzs7QUFFckQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNiLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDdkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSzs7QUFFckMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSTtBQUNyRSxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJOztBQUVyRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN2RCxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztBQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVk7QUFDcEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU87QUFDekUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO0FBQ2YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FB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QyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRCxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLO0FBQ2hCLENBQUMsQ0FBQztBQUNGLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDOztBQUVyQixDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSztBQUNoQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDOztBQUVGLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDOUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSztBQUM3QixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7O0FBRS9DLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDOUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEtBQUs7QUFDbEIsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFSixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDO0FBQzVELENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSjs7QUFFQSxRQUFRLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9CLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNwQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsY0FBYztBQUMvRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQ3ZFLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSzs7QUFFaEUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEtBQUs7QUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU07QUFDbEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7QUFDWixDQUFDLENBQUM7O0FBRUYsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUk7QUFDZixDQUFDLENBQUM7O0FBRUYsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVCLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxLQUFLO0FBQzlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNO0FBQ2xELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJO0FBQ1osQ0FBQyxDQUFDOztBQUVGLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJO0FBQ2YsQ0FBQyxDQUFDOztBQUVGLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDOUMsQ0FBQyxDQUFD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Q3ZCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUs7QUFDOUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFROztBQUVwQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDdEQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVSLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7QUFDdkMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQztBQUM1QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTOztBQUVyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFUixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO0FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRU4sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO0FBQy9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSTtBQUNsRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSzs7QUFFYixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsYUFBYTtBQUNyRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztBQUNuQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhO0FBQzFELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVB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QyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLO0FBQ2xCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDN0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsV0FBVztBQUMxRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsSUFBSTs7QUFFN0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsb0JBQW9CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO0FBQ3hFLENBQUMsQ0FBQzs7QUFFRixDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLENBQUM7QUFDbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVoRCxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQzs7QUFFcEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLG9CQUFvQixDQUFDO0FBQ3pDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFDRjsifQ== |