Files
speckle-server/scratch/edge-debug-selection/Default/Cache/Cache_Data/f_0000ad
T

677 lines
113 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 { OperationTypeNode } from "/_nuxt/node_modules/graphql/language/ast.mjs?v=e4f18c29";
import { isEqualType, isTypeSubTypeOf } from "/_nuxt/node_modules/graphql/utilities/typeComparators.mjs?v=e4f18c29";
import {
isEnumType,
isInputObjectType,
isInputType,
isInterfaceType,
isNamedType,
isNonNullType,
isObjectType,
isOutputType,
isRequiredArgument,
isRequiredInputField,
isUnionType,
} from "/_nuxt/node_modules/graphql/type/definition.mjs?v=e4f18c29";
import { GraphQLDeprecatedDirective, isDirective } from "/_nuxt/node_modules/graphql/type/directives.mjs?v=e4f18c29";
import { isIntrospectionType } from "/_nuxt/node_modules/graphql/type/introspection.mjs?v=e4f18c29";
import { assertSchema } from "/_nuxt/node_modules/graphql/type/schema.mjs?v=e4f18c29";
/**
* Implements the "Type Validation" sub-sections of the specification's
* "Type System" section.
*
* Validation runs synchronously, returning an array of encountered errors, or
* an empty array if no errors were encountered and the Schema is valid.
*/
export function validateSchema(schema) {
// First check to ensure the provided value is in fact a GraphQLSchema.
assertSchema(schema); // If this Schema has already been validated, return the previous results.
if (schema.__validationErrors) {
return schema.__validationErrors;
} // Validate the schema, producing a list of errors.
const context = new SchemaValidationContext(schema);
validateRootTypes(context);
validateDirectives(context);
validateTypes(context); // Persist the results of validation before returning to ensure validation
// does not run multiple times for this schema.
const errors = context.getErrors();
schema.__validationErrors = errors;
return errors;
}
/**
* Utility function which asserts a schema is valid by throwing an error if
* it is invalid.
*/
export function assertValidSchema(schema) {
const errors = validateSchema(schema);
if (errors.length !== 0) {
throw new Error(errors.map((error) => error.message).join('\n\n'));
}
}
class SchemaValidationContext {
constructor(schema) {
this._errors = [];
this.schema = schema;
}
reportError(message, nodes) {
const _nodes = Array.isArray(nodes) ? nodes.filter(Boolean) : nodes;
this._errors.push(
new GraphQLError(message, {
nodes: _nodes,
}),
);
}
getErrors() {
return this._errors;
}
}
function validateRootTypes(context) {
const schema = context.schema;
const queryType = schema.getQueryType();
if (!queryType) {
context.reportError('Query root type must be provided.', schema.astNode);
} else if (!isObjectType(queryType)) {
var _getOperationTypeNode;
context.reportError(
`Query root type must be Object type, it cannot be ${inspect(
queryType,
)}.`,
(_getOperationTypeNode = getOperationTypeNode(
schema,
OperationTypeNode.QUERY,
)) !== null && _getOperationTypeNode !== void 0
? _getOperationTypeNode
: queryType.astNode,
);
}
const mutationType = schema.getMutationType();
if (mutationType && !isObjectType(mutationType)) {
var _getOperationTypeNode2;
context.reportError(
'Mutation root type must be Object type if provided, it cannot be ' +
`${inspect(mutationType)}.`,
(_getOperationTypeNode2 = getOperationTypeNode(
schema,
OperationTypeNode.MUTATION,
)) !== null && _getOperationTypeNode2 !== void 0
? _getOperationTypeNode2
: mutationType.astNode,
);
}
const subscriptionType = schema.getSubscriptionType();
if (subscriptionType && !isObjectType(subscriptionType)) {
var _getOperationTypeNode3;
context.reportError(
'Subscription root type must be Object type if provided, it cannot be ' +
`${inspect(subscriptionType)}.`,
(_getOperationTypeNode3 = getOperationTypeNode(
schema,
OperationTypeNode.SUBSCRIPTION,
)) !== null && _getOperationTypeNode3 !== void 0
? _getOperationTypeNode3
: subscriptionType.astNode,
);
}
}
function getOperationTypeNode(schema, operation) {
var _flatMap$find;
return (_flatMap$find = [schema.astNode, ...schema.extensionASTNodes]
.flatMap(
// FIXME: https://github.com/graphql/graphql-js/issues/2203
(schemaNode) => {
var _schemaNode$operation;
return (
/* c8 ignore next */
(_schemaNode$operation =
schemaNode === null || schemaNode === void 0
? void 0
: schemaNode.operationTypes) !== null &&
_schemaNode$operation !== void 0
? _schemaNode$operation
: []
);
},
)
.find((operationNode) => operationNode.operation === operation)) === null ||
_flatMap$find === void 0
? void 0
: _flatMap$find.type;
}
function validateDirectives(context) {
for (const directive of context.schema.getDirectives()) {
// Ensure all directives are in fact GraphQL directives.
if (!isDirective(directive)) {
context.reportError(
`Expected directive but got: ${inspect(directive)}.`,
directive === null || directive === void 0 ? void 0 : directive.astNode,
);
continue;
} // Ensure they are named correctly.
validateName(context, directive); // TODO: Ensure proper locations.
// Ensure the arguments are valid.
for (const arg of directive.args) {
// Ensure they are named correctly.
validateName(context, arg); // Ensure the type is an input type.
if (!isInputType(arg.type)) {
context.reportError(
`The type of @${directive.name}(${arg.name}:) must be Input Type ` +
`but got: ${inspect(arg.type)}.`,
arg.astNode,
);
}
if (isRequiredArgument(arg) && arg.deprecationReason != null) {
var _arg$astNode;
context.reportError(
`Required argument @${directive.name}(${arg.name}:) cannot be deprecated.`,
[
getDeprecatedDirectiveNode(arg.astNode),
(_arg$astNode = arg.astNode) === null || _arg$astNode === void 0
? void 0
: _arg$astNode.type,
],
);
}
}
}
}
function validateName(context, node) {
// Ensure names are valid, however introspection types opt out.
if (node.name.startsWith('__')) {
context.reportError(
`Name "${node.name}" must not begin with "__", which is reserved by GraphQL introspection.`,
node.astNode,
);
}
}
function validateTypes(context) {
const validateInputObjectCircularRefs =
createInputObjectCircularRefsValidator(context);
const typeMap = context.schema.getTypeMap();
for (const type of Object.values(typeMap)) {
// Ensure all provided types are in fact GraphQL type.
if (!isNamedType(type)) {
context.reportError(
`Expected GraphQL named type but got: ${inspect(type)}.`,
type.astNode,
);
continue;
} // Ensure it is named correctly (excluding introspection types).
if (!isIntrospectionType(type)) {
validateName(context, type);
}
if (isObjectType(type)) {
// Ensure fields are valid
validateFields(context, type); // Ensure objects implement the interfaces they claim to.
validateInterfaces(context, type);
} else if (isInterfaceType(type)) {
// Ensure fields are valid.
validateFields(context, type); // Ensure interfaces implement the interfaces they claim to.
validateInterfaces(context, type);
} else if (isUnionType(type)) {
// Ensure Unions include valid member types.
validateUnionMembers(context, type);
} else if (isEnumType(type)) {
// Ensure Enums have valid values.
validateEnumValues(context, type);
} else if (isInputObjectType(type)) {
// Ensure Input Object fields are valid.
validateInputFields(context, type); // Ensure Input Objects do not contain non-nullable circular references
validateInputObjectCircularRefs(type);
}
}
}
function validateFields(context, type) {
const fields = Object.values(type.getFields()); // Objects and Interfaces both must define one or more fields.
if (fields.length === 0) {
context.reportError(`Type ${type.name} must define one or more fields.`, [
type.astNode,
...type.extensionASTNodes,
]);
}
for (const field of fields) {
// Ensure they are named correctly.
validateName(context, field); // Ensure the type is an output type
if (!isOutputType(field.type)) {
var _field$astNode;
context.reportError(
`The type of ${type.name}.${field.name} must be Output Type ` +
`but got: ${inspect(field.type)}.`,
(_field$astNode = field.astNode) === null || _field$astNode === void 0
? void 0
: _field$astNode.type,
);
} // Ensure the arguments are valid
for (const arg of field.args) {
const argName = arg.name; // Ensure they are named correctly.
validateName(context, arg); // Ensure the type is an input type
if (!isInputType(arg.type)) {
var _arg$astNode2;
context.reportError(
`The type of ${type.name}.${field.name}(${argName}:) must be Input ` +
`Type but got: ${inspect(arg.type)}.`,
(_arg$astNode2 = arg.astNode) === null || _arg$astNode2 === void 0
? void 0
: _arg$astNode2.type,
);
}
if (isRequiredArgument(arg) && arg.deprecationReason != null) {
var _arg$astNode3;
context.reportError(
`Required argument ${type.name}.${field.name}(${argName}:) cannot be deprecated.`,
[
getDeprecatedDirectiveNode(arg.astNode),
(_arg$astNode3 = arg.astNode) === null || _arg$astNode3 === void 0
? void 0
: _arg$astNode3.type,
],
);
}
}
}
}
function validateInterfaces(context, type) {
const ifaceTypeNames = Object.create(null);
for (const iface of type.getInterfaces()) {
if (!isInterfaceType(iface)) {
context.reportError(
`Type ${inspect(type)} must only implement Interface types, ` +
`it cannot implement ${inspect(iface)}.`,
getAllImplementsInterfaceNodes(type, iface),
);
continue;
}
if (type === iface) {
context.reportError(
`Type ${type.name} cannot implement itself because it would create a circular reference.`,
getAllImplementsInterfaceNodes(type, iface),
);
continue;
}
if (ifaceTypeNames[iface.name]) {
context.reportError(
`Type ${type.name} can only implement ${iface.name} once.`,
getAllImplementsInterfaceNodes(type, iface),
);
continue;
}
ifaceTypeNames[iface.name] = true;
validateTypeImplementsAncestors(context, type, iface);
validateTypeImplementsInterface(context, type, iface);
}
}
function validateTypeImplementsInterface(context, type, iface) {
const typeFieldMap = type.getFields(); // Assert each interface field is implemented.
for (const ifaceField of Object.values(iface.getFields())) {
const fieldName = ifaceField.name;
const typeField = typeFieldMap[fieldName]; // Assert interface field exists on type.
if (!typeField) {
context.reportError(
`Interface field ${iface.name}.${fieldName} expected but ${type.name} does not provide it.`,
[ifaceField.astNode, type.astNode, ...type.extensionASTNodes],
);
continue;
} // Assert interface field type is satisfied by type field type, by being
// a valid subtype. (covariant)
if (!isTypeSubTypeOf(context.schema, typeField.type, ifaceField.type)) {
var _ifaceField$astNode, _typeField$astNode;
context.reportError(
`Interface field ${iface.name}.${fieldName} expects type ` +
`${inspect(ifaceField.type)} but ${type.name}.${fieldName} ` +
`is type ${inspect(typeField.type)}.`,
[
(_ifaceField$astNode = ifaceField.astNode) === null ||
_ifaceField$astNode === void 0
? void 0
: _ifaceField$astNode.type,
(_typeField$astNode = typeField.astNode) === null ||
_typeField$astNode === void 0
? void 0
: _typeField$astNode.type,
],
);
} // Assert each interface field arg is implemented.
for (const ifaceArg of ifaceField.args) {
const argName = ifaceArg.name;
const typeArg = typeField.args.find((arg) => arg.name === argName); // Assert interface field arg exists on object field.
if (!typeArg) {
context.reportError(
`Interface field argument ${iface.name}.${fieldName}(${argName}:) expected but ${type.name}.${fieldName} does not provide it.`,
[ifaceArg.astNode, typeField.astNode],
);
continue;
} // Assert interface field arg type matches object field arg type.
// (invariant)
// TODO: change to contravariant?
if (!isEqualType(ifaceArg.type, typeArg.type)) {
var _ifaceArg$astNode, _typeArg$astNode;
context.reportError(
`Interface field argument ${iface.name}.${fieldName}(${argName}:) ` +
`expects type ${inspect(ifaceArg.type)} but ` +
`${type.name}.${fieldName}(${argName}:) is type ` +
`${inspect(typeArg.type)}.`,
[
(_ifaceArg$astNode = ifaceArg.astNode) === null ||
_ifaceArg$astNode === void 0
? void 0
: _ifaceArg$astNode.type,
(_typeArg$astNode = typeArg.astNode) === null ||
_typeArg$astNode === void 0
? void 0
: _typeArg$astNode.type,
],
);
} // TODO: validate default values?
} // Assert additional arguments must not be required.
for (const typeArg of typeField.args) {
const argName = typeArg.name;
const ifaceArg = ifaceField.args.find((arg) => arg.name === argName);
if (!ifaceArg && isRequiredArgument(typeArg)) {
context.reportError(
`Object field ${type.name}.${fieldName} includes required argument ${argName} that is missing from the Interface field ${iface.name}.${fieldName}.`,
[typeArg.astNode, ifaceField.astNode],
);
}
}
}
}
function validateTypeImplementsAncestors(context, type, iface) {
const ifaceInterfaces = type.getInterfaces();
for (const transitive of iface.getInterfaces()) {
if (!ifaceInterfaces.includes(transitive)) {
context.reportError(
transitive === type
? `Type ${type.name} cannot implement ${iface.name} because it would create a circular reference.`
: `Type ${type.name} must implement ${transitive.name} because it is implemented by ${iface.name}.`,
[
...getAllImplementsInterfaceNodes(iface, transitive),
...getAllImplementsInterfaceNodes(type, iface),
],
);
}
}
}
function validateUnionMembers(context, union) {
const memberTypes = union.getTypes();
if (memberTypes.length === 0) {
context.reportError(
`Union type ${union.name} must define one or more member types.`,
[union.astNode, ...union.extensionASTNodes],
);
}
const includedTypeNames = Object.create(null);
for (const memberType of memberTypes) {
if (includedTypeNames[memberType.name]) {
context.reportError(
`Union type ${union.name} can only include type ${memberType.name} once.`,
getUnionMemberTypeNodes(union, memberType.name),
);
continue;
}
includedTypeNames[memberType.name] = true;
if (!isObjectType(memberType)) {
context.reportError(
`Union type ${union.name} can only include Object types, ` +
`it cannot include ${inspect(memberType)}.`,
getUnionMemberTypeNodes(union, String(memberType)),
);
}
}
}
function validateEnumValues(context, enumType) {
const enumValues = enumType.getValues();
if (enumValues.length === 0) {
context.reportError(
`Enum type ${enumType.name} must define one or more values.`,
[enumType.astNode, ...enumType.extensionASTNodes],
);
}
for (const enumValue of enumValues) {
// Ensure valid name.
validateName(context, enumValue);
}
}
function validateInputFields(context, inputObj) {
const fields = Object.values(inputObj.getFields());
if (fields.length === 0) {
context.reportError(
`Input Object type ${inputObj.name} must define one or more fields.`,
[inputObj.astNode, ...inputObj.extensionASTNodes],
);
} // Ensure the arguments are valid
for (const field of fields) {
// Ensure they are named correctly.
validateName(context, field); // Ensure the type is an input type
if (!isInputType(field.type)) {
var _field$astNode2;
context.reportError(
`The type of ${inputObj.name}.${field.name} must be Input Type ` +
`but got: ${inspect(field.type)}.`,
(_field$astNode2 = field.astNode) === null || _field$astNode2 === void 0
? void 0
: _field$astNode2.type,
);
}
if (isRequiredInputField(field) && field.deprecationReason != null) {
var _field$astNode3;
context.reportError(
`Required input field ${inputObj.name}.${field.name} cannot be deprecated.`,
[
getDeprecatedDirectiveNode(field.astNode),
(_field$astNode3 = field.astNode) === null ||
_field$astNode3 === void 0
? void 0
: _field$astNode3.type,
],
);
}
if (inputObj.isOneOf) {
validateOneOfInputObjectField(inputObj, field, context);
}
}
}
function validateOneOfInputObjectField(type, field, context) {
if (isNonNullType(field.type)) {
var _field$astNode4;
context.reportError(
`OneOf input field ${type.name}.${field.name} must be nullable.`,
(_field$astNode4 = field.astNode) === null || _field$astNode4 === void 0
? void 0
: _field$astNode4.type,
);
}
if (field.defaultValue !== undefined) {
context.reportError(
`OneOf input field ${type.name}.${field.name} cannot have a default value.`,
field.astNode,
);
}
}
function createInputObjectCircularRefsValidator(context) {
// Modified copy of algorithm from 'src/validation/rules/NoFragmentCycles.js'.
// Tracks already visited types to maintain O(N) and to ensure that cycles
// are not redundantly reported.
const visitedTypes = Object.create(null); // Array of types nodes used to produce meaningful errors
const fieldPath = []; // Position in the type path
const fieldPathIndexByTypeName = Object.create(null);
return detectCycleRecursive; // This does a straight-forward DFS to find cycles.
// It does not terminate when a cycle was found but continues to explore
// the graph to find all possible cycles.
function detectCycleRecursive(inputObj) {
if (visitedTypes[inputObj.name]) {
return;
}
visitedTypes[inputObj.name] = true;
fieldPathIndexByTypeName[inputObj.name] = fieldPath.length;
const fields = Object.values(inputObj.getFields());
for (const field of fields) {
if (isNonNullType(field.type) && isInputObjectType(field.type.ofType)) {
const fieldType = field.type.ofType;
const cycleIndex = fieldPathIndexByTypeName[fieldType.name];
fieldPath.push(field);
if (cycleIndex === undefined) {
detectCycleRecursive(fieldType);
} else {
const cyclePath = fieldPath.slice(cycleIndex);
const pathStr = cyclePath.map((fieldObj) => fieldObj.name).join('.');
context.reportError(
`Cannot reference Input Object "${fieldType.name}" within itself through a series of non-null fields: "${pathStr}".`,
cyclePath.map((fieldObj) => fieldObj.astNode),
);
}
fieldPath.pop();
}
}
fieldPathIndexByTypeName[inputObj.name] = undefined;
}
}
function getAllImplementsInterfaceNodes(type, iface) {
const { astNode, extensionASTNodes } = type;
const nodes =
astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes; // FIXME: https://github.com/graphql/graphql-js/issues/2203
return nodes
.flatMap((typeNode) => {
var _typeNode$interfaces;
return (
/* c8 ignore next */
(_typeNode$interfaces = typeNode.interfaces) !== null &&
_typeNode$interfaces !== void 0
? _typeNode$interfaces
: []
);
})
.filter((ifaceNode) => ifaceNode.name.value === iface.name);
}
function getUnionMemberTypeNodes(union, typeName) {
const { astNode, extensionASTNodes } = union;
const nodes =
astNode != null ? [astNode, ...extensionASTNodes] : extensionASTNodes; // FIXME: https://github.com/graphql/graphql-js/issues/2203
return nodes
.flatMap((unionNode) => {
var _unionNode$types;
return (
/* c8 ignore next */
(_unionNode$types = unionNode.types) !== null &&
_unionNode$types !== void 0
? _unionNode$types
: []
);
})
.filter((typeNode) => typeNode.name.value === typeName);
}
function getDeprecatedDirectiveNode(definitionNode) {
var _definitionNode$direc;
return definitionNode === null || definitionNode === void 0
? void 0
: (_definitionNode$direc = definitionNode.directives) === null ||
_definitionNode$direc === void 0
? void 0
: _definitionNode$direc.find(
(node) => node.name.value === GraphQLDeprecatedDirective.name,
);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInZhbGlkYXRlLm1qcz92PWU0ZjE4YzI5Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluc3BlY3QgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL2pzdXRpbHMvaW5zcGVjdC5tanM/dj1lNGYxOGMyOVwiO1xuaW1wb3J0IHsgR3JhcGhRTEVycm9yIH0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC9lcnJvci9HcmFwaFFMRXJyb3IubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7IE9wZXJhdGlvblR5cGVOb2RlIH0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC9sYW5ndWFnZS9hc3QubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7IGlzRXF1YWxUeXBlLCBpc1R5cGVTdWJUeXBlT2YgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL3V0aWxpdGllcy90eXBlQ29tcGFyYXRvcnMubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7XG4gIGlzRW51bVR5cGUsXG4gIGlzSW5wdXRPYmplY3RUeXBlLFxuICBpc0lucHV0VHlwZSxcbiAgaXNJbnRlcmZhY2VUeXBlLFxuICBpc05hbWVkVHlwZSxcbiAgaXNOb25OdWxsVHlwZSxcbiAgaXNPYmplY3RUeXBlLFxuICBpc091dHB1dFR5cGUsXG4gIGlzUmVxdWlyZWRBcmd1bWVudCxcbiAgaXNSZXF1aXJlZElucHV0RmllbGQsXG4gIGlzVW5pb25UeXBlLFxufSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL3R5cGUvZGVmaW5pdGlvbi5tanM/dj1lNGYxOGMyOVwiO1xuaW1wb3J0IHsgR3JhcGhRTERlcHJlY2F0ZWREaXJlY3RpdmUsIGlzRGlyZWN0aXZlIH0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC90eXBlL2RpcmVjdGl2ZXMubWpzP3Y9ZTRmMThjMjlcIjtcbmltcG9ydCB7IGlzSW50cm9zcGVjdGlvblR5cGUgfSBmcm9tIFwiL19udXh0L25vZGVfbW9kdWxlcy9ncmFwaHFsL3R5cGUvaW50cm9zcGVjdGlvbi5tanM/dj1lNGYxOGMyOVwiO1xuaW1wb3J0IHsgYXNzZXJ0U2NoZW1hIH0gZnJvbSBcIi9fbnV4dC9ub2RlX21vZHVsZXMvZ3JhcGhxbC90eXBlL3NjaGVtYS5tanM/dj1lNGYxOGMyOVwiO1xuLyoqXG4gKiBJbXBsZW1lbnRzIHRoZSBcIlR5cGUgVmFsaWRhdGlvblwiIHN1Yi1zZWN0aW9ucyBvZiB0aGUgc3BlY2lmaWNhdGlvbidzXG4gKiBcIlR5cGUgU3lzdGVtXCIgc2VjdGlvbi5cbiAqXG4gKiBWYWxpZGF0aW9uIHJ1bnMgc3luY2hyb25vdXNseSwgcmV0dXJuaW5nIGFuIGFycmF5IG9mIGVuY291bnRlcmVkIGVycm9ycywgb3JcbiAqIGFuIGVtcHR5IGFycmF5IGlmIG5vIGVycm9ycyB3ZXJlIGVuY291bnRlcmVkIGFuZCB0aGUgU2NoZW1hIGlzIHZhbGlkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZVNjaGVtYShzY2hlbWEpIHtcbiAgLy8gRmlyc3QgY2hlY2sgdG8gZW5zdXJlIHRoZSBwcm92aWRlZCB2YWx1ZSBpcyBpbiBmYWN0IGEgR3JhcGhRTFNjaGVtYS5cbiAgYXNzZXJ0U2NoZW1hKHNjaGVtYSk7IC8vIElmIHRoaXMgU2NoZW1hIGhhcyBhbHJlYWR5IGJlZW4gdmFsaWRhdGVkLCByZXR1cm4gdGhlIHByZXZpb3VzIHJlc3VsdHMuXG5cbiAgaWYgKHNjaGVtYS5fX3ZhbGlkYXRpb25FcnJvcnMpIHtcbiAgICByZXR1cm4gc2NoZW1hLl9fdmFsaWRhdGlvbkVycm9ycztcbiAgfSAvLyBWYWxpZGF0ZSB0aGUgc2NoZW1hLCBwcm9kdWNpbmcgYSBsaXN0IG9mIGVycm9ycy5cblxuICBjb25zdCBjb250ZXh0ID0gbmV3IFNjaGVtYVZhbGlkYXRpb25Db250ZXh0KHNjaGVtYSk7XG4gIHZhbGlkYXRlUm9vdFR5cGVzKGNvbnRleHQpO1xuICB2YWxpZGF0ZURpcmVjdGl2ZXMoY29udGV4dCk7XG4gIHZhbGlkYXRlVHlwZXMoY29udGV4dCk7IC8vIFBlcnNpc3QgdGhlIHJlc3VsdHMgb2YgdmFsaWRhdGlvbiBiZWZvcmUgcmV0dXJuaW5nIHRvIGVuc3VyZSB2YWxpZGF0aW9uXG4gIC8vIGRvZXMgbm90IHJ1biBtdWx0aXBsZSB0aW1lcyBmb3IgdGhpcyBzY2hlbWEuXG5cbiAgY29uc3QgZXJyb3JzID0gY29udGV4dC5nZXRFcnJvcnMoKTtcbiAgc2NoZW1hLl9fdmFsaWRhdGlvbkVycm9ycyA9IGVycm9ycztcbiAgcmV0dXJuIGVycm9ycztcbn1cbi8qKlxuICogVXRpbGl0eSBmdW5jdGlvbiB3aGljaCBhc3NlcnRzIGEgc2NoZW1hIGlzIHZhbGlkIGJ5IHRocm93aW5nIGFuIGVycm9yIGlmXG4gKiBpdCBpcyBpbnZhbGlkLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRWYWxpZFNjaGVtYShzY2hlbWEpIHtcbiAgY29uc3QgZXJyb3JzID0gdmFsaWRhdGVTY2hlbWEoc2NoZW1hKTtcblxuICBpZiAoZXJyb3JzLmxlbmd0aCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihlcnJvcnMubWFwKChlcnJvcikgPT4gZXJyb3IubWVzc2FnZSkuam9pbignXFxuXFxuJykpO1xuICB9XG59XG5cbmNsYXNzIFNjaGVtYVZhbGlkYXRpb25Db250ZXh0IHtcbiAgY29uc3RydWN0b3Ioc2NoZW1hKSB7XG4gICAgdGhpcy5fZXJyb3JzID0gW107XG4gICAgdGhpcy5zY2hlbWEgPSBzY2hlbWE7XG4gIH1cblxuICByZXBvcnRFcnJvcihtZXNzYWdlLCBub2Rlcykge1xuICAgIGNvbnN0IF9ub2RlcyA9IEFycmF5LmlzQXJyYXkobm9kZXMpID8gbm9kZXMuZmlsdGVyKEJvb2xlYW4pIDogbm9kZXM7XG5cbiAgICB0aGlzLl9lcnJvcnMucHVzaChcbiAgICAgIG5ldyBHcmFwaFFMRXJyb3IobWVzc2FnZSwge1xuICAgICAgICBub2RlczogX25vZGVzLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIGdldEVycm9ycygpIHtcbiAgICByZXR1cm4gdGhpcy5fZXJyb3JzO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlUm9vdFR5cGVzKGNvbnRleHQpIHtcbiAgY29uc3Qgc2NoZW1hID0gY29udGV4dC5zY2hlbWE7XG4gIGNvbnN0IHF1ZXJ5VHlwZSA9IHNjaGVtYS5nZXRRdWVyeVR5cGUoKTtcblxuICBpZiAoIXF1ZXJ5VHlwZSkge1xuICAgIGNvbnRleHQucmVwb3J0RXJyb3IoJ1F1ZXJ5IHJvb3QgdHlwZSBtdXN0IGJlIHByb3ZpZGVkLicsIHNjaGVtYS5hc3ROb2RlKTtcbiAgfSBlbHNlIGlmICghaXNPYmplY3RUeXBlKHF1ZXJ5VHlwZSkpIHtcbiAgICB2YXIgX2dldE9wZXJhdGlvblR5cGVOb2RlO1xuXG4gICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgIGBRdWVyeSByb290IHR5cGUgbXVzdCBiZSBPYmplY3QgdHlwZSwgaXQgY2Fubm90IGJlICR7aW5zcGVjdChcbiAgICAgICAgcXVlcnlUeXBlLFxuICAgICAgKX0uYCxcbiAgICAgIChfZ2V0T3BlcmF0aW9uVHlwZU5vZGUgPSBnZXRPcGVyYXRpb25UeXBlTm9kZShcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBPcGVyYXRpb25UeXBlTm9kZS5RVUVSWSxcbiAgICAgICkpICE9PSBudWxsICYmIF9nZXRPcGVyYXRpb25UeXBlTm9kZSAhPT0gdm9pZCAwXG4gICAgICAgID8gX2dldE9wZXJhdGlvblR5cGVOb2RlXG4gICAgICAgIDogcXVlcnlUeXBlLmFzdE5vZGUsXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IG11dGF0aW9uVHlwZSA9IHNjaGVtYS5nZXRNdXRhdGlvblR5cGUoKTtcblxuICBpZiAobXV0YXRpb25UeXBlICYmICFpc09iamVjdFR5cGUobXV0YXRpb25UeXBlKSkge1xuICAgIHZhciBfZ2V0T3BlcmF0aW9uVHlwZU5vZGUyO1xuXG4gICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICdNdXRhdGlvbiByb290IHR5cGUgbXVzdCBiZSBPYmplY3QgdHlwZSBpZiBwcm92aWRlZCwgaXQgY2Fubm90IGJlICcgK1xuICAgICAgICBgJHtpbnNwZWN0KG11dGF0aW9uVHlwZSl9LmAsXG4gICAgICAoX2dldE9wZXJhdGlvblR5cGVOb2RlMiA9IGdldE9wZXJhdGlvblR5cGVOb2RlKFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIE9wZXJhdGlvblR5cGVOb2RlLk1VVEFUSU9OLFxuICAgICAgKSkgIT09IG51bGwgJiYgX2dldE9wZXJhdGlvblR5cGVOb2RlMiAhPT0gdm9pZCAwXG4gICAgICAgID8gX2dldE9wZXJhdGlvblR5cGVOb2RlMlxuICAgICAgICA6IG11dGF0aW9uVHlwZS5hc3ROb2RlLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBzdWJzY3JpcHRpb25UeXBlID0gc2NoZW1hLmdldFN1YnNjcmlwdGlvblR5cGUoKTtcblxuICBpZiAoc3Vic2NyaXB0aW9uVHlwZSAmJiAhaXNPYmplY3RUeXBlKHN1YnNjcmlwdGlvblR5cGUpKSB7XG4gICAgdmFyIF9nZXRPcGVyYXRpb25UeXBlTm9kZTM7XG5cbiAgICBjb250ZXh0LnJlcG9ydEVycm9yKFxuICAgICAgJ1N1YnNjcmlwdGlvbiByb290IHR5cGUgbXVzdCBiZSBPYmplY3QgdHlwZSBpZiBwcm92aWRlZCwgaXQgY2Fubm90IGJlICcgK1xuICAgICAgICBgJHtpbnNwZWN0KHN1YnNjcmlwdGlvblR5cGUpfS5gLFxuICAgICAgKF9nZXRPcGVyYXRpb25UeXBlTm9kZTMgPSBnZXRPcGVyYXRpb25UeXBlTm9kZShcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBPcGVyYXRpb25UeXBlTm9kZS5TVUJTQ1JJUFRJT04sXG4gICAgICApKSAhPT0gbnVsbCAmJiBfZ2V0T3BlcmF0aW9uVHlwZU5vZGUzICE9PSB2b2lkIDBcbiAgICAgICAgPyBfZ2V0T3BlcmF0aW9uVHlwZU5vZGUzXG4gICAgICAgIDogc3Vic2NyaXB0aW9uVHlwZS5hc3ROb2RlLFxuICAgICk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0T3BlcmF0aW9uVHlwZU5vZGUoc2NoZW1hLCBvcGVyYXRpb24pIHtcbiAgdmFyIF9mbGF0TWFwJGZpbmQ7XG5cbiAgcmV0dXJuIChfZmxhdE1hcCRmaW5kID0gW3NjaGVtYS5hc3ROb2RlLCAuLi5zY2hlbWEuZXh0ZW5zaW9uQVNUTm9kZXNdXG4gICAgLmZsYXRNYXAoXG4gICAgICAvLyBGSVhNRTogaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwvZ3JhcGhxbC1qcy9pc3N1ZXMvMjIwM1xuICAgICAgKHNjaGVtYU5vZGUpID0+IHtcbiAgICAgICAgdmFyIF9zY2hlbWFOb2RlJG9wZXJhdGlvbjtcblxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0ICovXG4gICAgICAgICAgKF9zY2hlbWFOb2RlJG9wZXJhdGlvbiA9XG4gICAgICAgICAgICBzY2hlbWFOb2RlID09PSBudWxsIHx8IHNjaGVtYU5vZGUgPT09IHZvaWQgMFxuICAgICAgICAgICAgICA/IHZvaWQgMFxuICAgICAgICAgICAgICA6IHNjaGVtYU5vZGUub3BlcmF0aW9uVHlwZXMpICE9PSBudWxsICYmXG4gICAgICAgICAgICBfc2NoZW1hTm9kZSRvcGVyYXRpb24gIT09IHZvaWQgMFxuICAgICAgICAgICAgPyBfc2NoZW1hTm9kZSRvcGVyYXRpb25cbiAgICAgICAgICAgIDogW11cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKVxuICAgIC5maW5kKChvcGVyYXRpb25Ob2RlKSA9PiBvcGVyYXRpb25Ob2RlLm9wZXJhdGlvbiA9PT0gb3BlcmF0aW9uKSkgPT09IG51bGwgfHxcbiAgICBfZmxhdE1hcCRmaW5kID09PSB2b2lkIDBcbiAgICA/IHZvaWQgMFxuICAgIDogX2ZsYXRNYXAkZmluZC50eXBlO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZURpcmVjdGl2ZXMoY29udGV4dCkge1xuICBmb3IgKGNvbnN0IGRpcmVjdGl2ZSBvZiBjb250ZXh0LnNjaGVtYS5nZXREaXJlY3RpdmVzKCkpIHtcbiAgICAvLyBFbnN1cmUgYWxsIGRpcmVjdGl2ZXMgYXJlIGluIGZhY3QgR3JhcGhRTCBkaXJlY3RpdmVzLlxuICAgIGlmICghaXNEaXJlY3RpdmUoZGlyZWN0aXZlKSkge1xuICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgYEV4cGVjdGVkIGRpcmVjdGl2ZSBidXQgZ290OiAke2luc3BlY3QoZGlyZWN0aXZlKX0uYCxcbiAgICAgICAgZGlyZWN0aXZlID09PSBudWxsIHx8IGRpcmVjdGl2ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGlyZWN0aXZlLmFzdE5vZGUsXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBFbnN1cmUgdGhleSBhcmUgbmFtZWQgY29ycmVjdGx5LlxuXG4gICAgdmFsaWRhdGVOYW1lKGNvbnRleHQsIGRpcmVjdGl2ZSk7IC8vIFRPRE86IEVuc3VyZSBwcm9wZXIgbG9jYXRpb25zLlxuICAgIC8vIEVuc3VyZSB0aGUgYXJndW1lbnRzIGFyZSB2YWxpZC5cblxuICAgIGZvciAoY29uc3QgYXJnIG9mIGRpcmVjdGl2ZS5hcmdzKSB7XG4gICAgICAvLyBFbnN1cmUgdGhleSBhcmUgbmFtZWQgY29ycmVjdGx5LlxuICAgICAgdmFsaWRhdGVOYW1lKGNvbnRleHQsIGFyZyk7IC8vIEVuc3VyZSB0aGUgdHlwZSBpcyBhbiBpbnB1dCB0eXBlLlxuXG4gICAgICBpZiAoIWlzSW5wdXRUeXBlKGFyZy50eXBlKSkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydEVycm9yKFxuICAgICAgICAgIGBUaGUgdHlwZSBvZiBAJHtkaXJlY3RpdmUubmFtZX0oJHthcmcubmFtZX06KSBtdXN0IGJlIElucHV0IFR5cGUgYCArXG4gICAgICAgICAgICBgYnV0IGdvdDogJHtpbnNwZWN0KGFyZy50eXBlKX0uYCxcbiAgICAgICAgICBhcmcuYXN0Tm9kZSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzUmVxdWlyZWRBcmd1bWVudChhcmcpICYmIGFyZy5kZXByZWNhdGlvblJlYXNvbiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBfYXJnJGFzdE5vZGU7XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgICBgUmVxdWlyZWQgYXJndW1lbnQgQCR7ZGlyZWN0aXZlLm5hbWV9KCR7YXJnLm5hbWV9OikgY2Fubm90IGJlIGRlcHJlY2F0ZWQuYCxcbiAgICAgICAgICBbXG4gICAgICAgICAgICBnZXREZXByZWNhdGVkRGlyZWN0aXZlTm9kZShhcmcuYXN0Tm9kZSksXG4gICAgICAgICAgICAoX2FyZyRhc3ROb2RlID0gYXJnLmFzdE5vZGUpID09PSBudWxsIHx8IF9hcmckYXN0Tm9kZSA9PT0gdm9pZCAwXG4gICAgICAgICAgICAgID8gdm9pZCAwXG4gICAgICAgICAgICAgIDogX2FyZyRhc3ROb2RlLnR5cGUsXG4gICAgICAgICAgXSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVOYW1lKGNvbnRleHQsIG5vZGUpIHtcbiAgLy8gRW5zdXJlIG5hbWVzIGFyZSB2YWxpZCwgaG93ZXZlciBpbnRyb3NwZWN0aW9uIHR5cGVzIG9wdCBvdXQuXG4gIGlmIChub2RlLm5hbWUuc3RhcnRzV2l0aCgnX18nKSkge1xuICAgIGNvbnRleHQucmVwb3J0RXJyb3IoXG4gICAgICBgTmFtZSBcIiR7bm9kZS5uYW1lfVwiIG11c3Qgbm90IGJlZ2luIHdpdGggXCJfX1wiLCB3aGljaCBpcyByZXNlcnZlZCBieSBHcmFwaFFMIGludHJvc3BlY3Rpb24uYCxcbiAgICAgIG5vZGUuYXN0Tm9kZSxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlVHlwZXMoY29udGV4dCkge1xuICBjb25zdCB2YWxpZGF0ZUlucHV0T2JqZWN0Q2lyY3VsYXJSZWZzID1cbiAgICBjcmVhdGVJbnB1dE9iamVjdENpcmN1bGFyUmVmc1ZhbGlkYXRvcihjb250ZXh0KTtcbiAgY29uc3QgdHlwZU1hcCA9IGNvbnRleHQuc2NoZW1hLmdldFR5cGVNYXAoKTtcblxuICBmb3IgKGNvbnN0IHR5cGUgb2YgT2JqZWN0LnZhbHVlcyh0eXBlTWFwKSkge1xuICAgIC8vIEVuc3VyZSBhbGwgcHJvdmlkZWQgdHlwZXMgYXJlIGluIGZhY3QgR3JhcGhRTCB0eXBlLlxuICAgIGlmICghaXNOYW1lZFR5cGUodHlwZSkpIHtcbiAgICAgIGNvbnRleHQucmVwb3J0RXJyb3IoXG4gICAgICAgIGBFeHBlY3RlZCBHcmFwaFFMIG5hbWVkIHR5cGUgYnV0IGdvdDogJHtpbnNwZWN0KHR5cGUpfS5gLFxuICAgICAgICB0eXBlLmFzdE5vZGUsXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfSAvLyBFbnN1cmUgaXQgaXMgbmFtZWQgY29ycmVjdGx5IChleGNsdWRpbmcgaW50cm9zcGVjdGlvbiB0eXBlcykuXG5cbiAgICBpZiAoIWlzSW50cm9zcGVjdGlvblR5cGUodHlwZSkpIHtcbiAgICAgIHZhbGlkYXRlTmFtZShjb250ZXh0LCB0eXBlKTtcbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RUeXBlKHR5cGUpKSB7XG4gICAgICAvLyBFbnN1cmUgZmllbGRzIGFyZSB2YWxpZFxuICAgICAgdmFsaWRhdGVGaWVsZHMoY29udGV4dCwgdHlwZSk7IC8vIEVuc3VyZSBvYmplY3RzIGltcGxlbWVudCB0aGUgaW50ZXJmYWNlcyB0aGV5IGNsYWltIHRvLlxuXG4gICAgICB2YWxpZGF0ZUludGVyZmFjZXMoY29udGV4dCwgdHlwZSk7XG4gICAgfSBlbHNlIGlmIChpc0ludGVyZmFjZVR5cGUodHlwZSkpIHtcbiAgICAgIC8vIEVuc3VyZSBmaWVsZHMgYXJlIHZhbGlkLlxuICAgICAgdmFsaWRhdGVGaWVsZHMoY29udGV4dCwgdHlwZSk7IC8vIEVuc3VyZSBpbnRlcmZhY2VzIGltcGxlbWVudCB0aGUgaW50ZXJmYWNlcyB0aGV5IGNsYWltIHRvLlxuXG4gICAgICB2YWxpZGF0ZUludGVyZmFjZXMoY29udGV4dCwgdHlwZSk7XG4gICAgfSBlbHNlIGlmIChpc1VuaW9uVHlwZSh0eXBlKSkge1xuICAgICAgLy8gRW5zdXJlIFVuaW9ucyBpbmNsdWRlIHZhbGlkIG1lbWJlciB0eXBlcy5cbiAgICAgIHZhbGlkYXRlVW5pb25NZW1iZXJzKGNvbnRleHQsIHR5cGUpO1xuICAgIH0gZWxzZSBpZiAoaXNFbnVtVHlwZSh0eXBlKSkge1xuICAgICAgLy8gRW5zdXJlIEVudW1zIGhhdmUgdmFsaWQgdmFsdWVzLlxuICAgICAgdmFsaWRhdGVFbnVtVmFsdWVzKGNvbnRleHQsIHR5cGUpO1xuICAgIH0gZWxzZSBpZiAoaXNJbnB1dE9iamVjdFR5cGUodHlwZSkpIHtcbiAgICAgIC8vIEVuc3VyZSBJbnB1dCBPYmplY3QgZmllbGRzIGFyZSB2YWxpZC5cbiAgICAgIHZhbGlkYXRlSW5wdXRGaWVsZHMoY29udGV4dCwgdHlwZSk7IC8vIEVuc3VyZSBJbnB1dCBPYmplY3RzIGRvIG5vdCBjb250YWluIG5vbi1udWxsYWJsZSBjaXJjdWxhciByZWZlcmVuY2VzXG5cbiAgICAgIHZhbGlkYXRlSW5wdXRPYmplY3RDaXJjdWxhclJlZnModHlwZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlRmllbGRzKGNvbnRleHQsIHR5cGUpIHtcbiAgY29uc3QgZmllbGRzID0gT2JqZWN0LnZhbHVlcyh0eXBlLmdldEZpZWxkcygpKTsgLy8gT2JqZWN0cyBhbmQgSW50ZXJmYWNlcyBib3RoIG11c3QgZGVmaW5lIG9uZSBvciBtb3JlIGZpZWxkcy5cblxuICBpZiAoZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnRleHQucmVwb3J0RXJyb3IoYFR5cGUgJHt0eXBlLm5hbWV9IG11c3QgZGVmaW5lIG9uZSBvciBtb3JlIGZpZWxkcy5gLCBbXG4gICAgICB0eXBlLmFzdE5vZGUsXG4gICAgICAuLi50eXBlLmV4dGVuc2lvbkFTVE5vZGVzLFxuICAgIF0pO1xuICB9XG5cbiAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAvLyBFbnN1cmUgdGhleSBhcmUgbmFtZWQgY29ycmVjdGx5LlxuICAgIHZhbGlkYXRlTmFtZShjb250ZXh0LCBmaWVsZCk7IC8vIEVuc3VyZSB0aGUgdHlwZSBpcyBhbiBvdXRwdXQgdHlwZVxuXG4gICAgaWYgKCFpc091dHB1dFR5cGUoZmllbGQudHlwZSkpIHtcbiAgICAgIHZhciBfZmllbGQkYXN0Tm9kZTtcblxuICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgYFRoZSB0eXBlIG9mICR7dHlwZS5uYW1lfS4ke2ZpZWxkLm5hbWV9IG11c3QgYmUgT3V0cHV0IFR5cGUgYCArXG4gICAgICAgICAgYGJ1dCBnb3Q6ICR7aW5zcGVjdChmaWVsZC50eXBlKX0uYCxcbiAgICAgICAgKF9maWVsZCRhc3ROb2RlID0gZmllbGQuYXN0Tm9kZSkgPT09IG51bGwgfHwgX2ZpZWxkJGFzdE5vZGUgPT09IHZvaWQgMFxuICAgICAgICAgID8gdm9pZCAwXG4gICAgICAgICAgOiBfZmllbGQkYXN0Tm9kZS50eXBlLFxuICAgICAgKTtcbiAgICB9IC8vIEVuc3VyZSB0aGUgYXJndW1lbnRzIGFyZSB2YWxpZFxuXG4gICAgZm9yIChjb25zdCBhcmcgb2YgZmllbGQuYXJncykge1xuICAgICAgY29uc3QgYXJnTmFtZSA9IGFyZy5uYW1lOyAvLyBFbnN1cmUgdGhleSBhcmUgbmFtZWQgY29ycmVjdGx5LlxuXG4gICAgICB2YWxpZGF0ZU5hbWUoY29udGV4dCwgYXJnKTsgLy8gRW5zdXJlIHRoZSB0eXBlIGlzIGFuIGlucHV0IHR5cGVcblxuICAgICAgaWYgKCFpc0lucHV0VHlwZShhcmcudHlwZSkpIHtcbiAgICAgICAgdmFyIF9hcmckYXN0Tm9kZTI7XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgICBgVGhlIHR5cGUgb2YgJHt0eXBlLm5hbWV9LiR7ZmllbGQubmFtZX0oJHthcmdOYW1lfTopIG11c3QgYmUgSW5wdXQgYCArXG4gICAgICAgICAgICBgVHlwZSBidXQgZ290OiAke2luc3BlY3QoYXJnLnR5cGUpfS5gLFxuICAgICAgICAgIChfYXJnJGFzdE5vZGUyID0gYXJnLmFzdE5vZGUpID09PSBudWxsIHx8IF9hcmckYXN0Tm9kZTIgPT09IHZvaWQgMFxuICAgICAgICAgICAgPyB2b2lkIDBcbiAgICAgICAgICAgIDogX2FyZyRhc3ROb2RlMi50eXBlLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNSZXF1aXJlZEFyZ3VtZW50KGFyZykgJiYgYXJnLmRlcHJlY2F0aW9uUmVhc29uICE9IG51bGwpIHtcbiAgICAgICAgdmFyIF9hcmckYXN0Tm9kZTM7XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgICBgUmVxdWlyZWQgYXJndW1lbnQgJHt0eXBlLm5hbWV9LiR7ZmllbGQubmFtZX0oJHthcmdOYW1lfTopIGNhbm5vdCBiZSBkZXByZWNhdGVkLmAsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgZ2V0RGVwcmVjYXRlZERpcmVjdGl2ZU5vZGUoYXJnLmFzdE5vZGUpLFxuICAgICAgICAgICAgKF9hcmckYXN0Tm9kZTMgPSBhcmcuYXN0Tm9kZSkgPT09IG51bGwgfHwgX2FyZyRhc3ROb2RlMyA9PT0gdm9pZCAwXG4gICAgICAgICAgICAgID8gdm9pZCAwXG4gICAgICAgICAgICAgIDogX2FyZyRhc3ROb2RlMy50eXBlLFxuICAgICAgICAgIF0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSW50ZXJmYWNlcyhjb250ZXh0LCB0eXBlKSB7XG4gIGNvbnN0IGlmYWNlVHlwZU5hbWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmb3IgKGNvbnN0IGlmYWNlIG9mIHR5cGUuZ2V0SW50ZXJmYWNlcygpKSB7XG4gICAgaWYgKCFpc0ludGVyZmFjZVR5cGUoaWZhY2UpKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydEVycm9yKFxuICAgICAgICBgVHlwZSAke2luc3BlY3QodHlwZSl9IG11c3Qgb25seSBpbXBsZW1lbnQgSW50ZXJmYWNlIHR5cGVzLCBgICtcbiAgICAgICAgICBgaXQgY2Fubm90IGltcGxlbWVudCAke2luc3BlY3QoaWZhY2UpfS5gLFxuICAgICAgICBnZXRBbGxJbXBsZW1lbnRzSW50ZXJmYWNlTm9kZXModHlwZSwgaWZhY2UpLFxuICAgICAgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBpZmFjZSkge1xuICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgYFR5cGUgJHt0eXBlLm5hbWV9IGNhbm5vdCBpbXBsZW1lbnQgaXRzZWxmIGJlY2F1c2UgaXQgd291bGQgY3JlYXRlIGEgY2lyY3VsYXIgcmVmZXJlbmNlLmAsXG4gICAgICAgIGdldEFsbEltcGxlbWVudHNJbnRlcmZhY2VOb2Rlcyh0eXBlLCBpZmFjZSksXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGlmYWNlVHlwZU5hbWVzW2lmYWNlLm5hbWVdKSB7XG4gICAgICBjb250ZXh0LnJlcG9ydEVycm9yKFxuICAgICAgICBgVHlwZSAke3R5cGUubmFtZX0gY2FuIG9ubHkgaW1wbGVtZW50ICR7aWZhY2UubmFtZX0gb25jZS5gLFxuICAgICAgICBnZXRBbGxJbXBsZW1lbnRzSW50ZXJmYWNlTm9kZXModHlwZSwgaWZhY2UpLFxuICAgICAgKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmYWNlVHlwZU5hbWVzW2lmYWNlLm5hbWVdID0gdHJ1ZTtcbiAgICB2YWxpZGF0ZVR5cGVJbXBsZW1lbnRzQW5jZXN0b3JzKGNvbnRleHQsIHR5cGUsIGlmYWNlKTtcbiAgICB2YWxpZGF0ZVR5cGVJbXBsZW1lbnRzSW50ZXJmYWNlKGNvbnRleHQsIHR5cGUsIGlmYWNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVR5cGVJbXBsZW1lbnRzSW50ZXJmYWNlKGNvbnRleHQsIHR5cGUsIGlmYWNlKSB7XG4gIGNvbnN0IHR5cGVGaWVsZE1hcCA9IHR5cGUuZ2V0RmllbGRzKCk7IC8vIEFzc2VydCBlYWNoIGludGVyZmFjZSBmaWVsZCBpcyBpbXBsZW1lbnRlZC5cblxuICBmb3IgKGNvbnN0IGlmYWNlRmllbGQgb2YgT2JqZWN0LnZhbHVlcyhpZmFjZS5nZXRGaWVsZHMoKSkpIHtcbiAgICBjb25zdCBmaWVsZE5hbWUgPSBpZmFjZUZpZWxkLm5hbWU7XG4gICAgY29uc3QgdHlwZUZpZWxkID0gdHlwZUZpZWxkTWFwW2ZpZWxkTmFtZV07IC8vIEFzc2VydCBpbnRlcmZhY2UgZmllbGQgZXhpc3RzIG9uIHR5cGUuXG5cbiAgICBpZiAoIXR5cGVGaWVsZCkge1xuICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgYEludGVyZmFjZSBmaWVsZCAke2lmYWNlLm5hbWV9LiR7ZmllbGROYW1lfSBleHBlY3RlZCBidXQgJHt0eXBlLm5hbWV9IGRvZXMgbm90IHByb3ZpZGUgaXQuYCxcbiAgICAgICAgW2lmYWNlRmllbGQuYXN0Tm9kZSwgdHlwZS5hc3ROb2RlLCAuLi50eXBlLmV4dGVuc2lvbkFTVE5vZGVzXSxcbiAgICAgICk7XG4gICAgICBjb250aW51ZTtcbiAgICB9IC8vIEFzc2VydCBpbnRlcmZhY2UgZmllbGQgdHlwZSBpcyBzYXRpc2ZpZWQgYnkgdHlwZSBmaWVsZCB0eXBlLCBieSBiZWluZ1xuICAgIC8vIGEgdmFsaWQgc3VidHlwZS4gKGNvdmFyaWFudClcblxuICAgIGlmICghaXNUeXBlU3ViVHlwZU9mKGNvbnRleHQuc2NoZW1hLCB0eXBlRmllbGQudHlwZSwgaWZhY2VGaWVsZC50eXBlKSkge1xuICAgICAgdmFyIF9pZmFjZUZpZWxkJGFzdE5vZGUsIF90eXBlRmllbGQkYXN0Tm9kZTtcblxuICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgYEludGVyZmFjZSBmaWVsZCAke2lmYWNlLm5hbWV9LiR7ZmllbGROYW1lfSBleHBlY3RzIHR5cGUgYCArXG4gICAgICAgICAgYCR7aW5zcGVjdChpZmFjZUZpZWxkLnR5cGUpfSBidXQgJHt0eXBlLm5hbWV9LiR7ZmllbGROYW1lfSBgICtcbiAgICAgICAgICBgaXMgdHlwZSAke2luc3BlY3QodHlwZUZpZWxkLnR5cGUpfS5gLFxuICAgICAgICBbXG4gICAgICAgICAgKF9pZmFjZUZpZWxkJGFzdE5vZGUgPSBpZmFjZUZpZWxkLmFzdE5vZGUpID09PSBudWxsIHx8XG4gICAgICAgICAgX2lmYWNlRmllbGQkYXN0Tm9kZSA9PT0gdm9pZCAwXG4gICAgICAgICAgICA/IHZvaWQgMFxuICAgICAgICAgICAgOiBfaWZhY2VGaWVsZCRhc3ROb2RlLnR5cGUsXG4gICAgICAgICAgKF90eXBlRmllbGQkYXN0Tm9kZSA9IHR5cGVGaWVsZC5hc3ROb2RlKSA9PT0gbnVsbCB8fFxuICAgICAgICAgIF90eXBlRmllbGQkYXN0Tm9kZSA9PT0gdm9pZCAwXG4gICAgICAgICAgICA/IHZvaWQgMFxuICAgICAgICAgICAgOiBfdHlwZUZpZWxkJGFzdE5vZGUudHlwZSxcbiAgICAgICAgXSxcbiAgICAgICk7XG4gICAgfSAvLyBBc3NlcnQgZWFjaCBpbnRlcmZhY2UgZmllbGQgYXJnIGlzIGltcGxlbWVudGVkLlxuXG4gICAgZm9yIChjb25zdCBpZmFjZUFyZyBvZiBpZmFjZUZpZWxkLmFyZ3MpIHtcbiAgICAgIGNvbnN0IGFyZ05hbWUgPSBpZmFjZUFyZy5uYW1lO1xuICAgICAgY29uc3QgdHlwZUFyZyA9IHR5cGVGaWVsZC5hcmdzLmZpbmQoKGFyZykgPT4gYXJnLm5hbWUgPT09IGFyZ05hbWUpOyAvLyBBc3NlcnQgaW50ZXJmYWNlIGZpZWxkIGFyZyBleGlzdHMgb24gb2JqZWN0IGZpZWxkLlxuXG4gICAgICBpZiAoIXR5cGVBcmcpIHtcbiAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgICBgSW50ZXJmYWNlIGZpZWxkIGFyZ3VtZW50ICR7aWZhY2UubmFtZX0uJHtmaWVsZE5hbWV9KCR7YXJnTmFtZX06KSBleHBlY3RlZCBidXQgJHt0eXBlLm5hbWV9LiR7ZmllbGROYW1lfSBkb2VzIG5vdCBwcm92aWRlIGl0LmAsXG4gICAgICAgICAgW2lmYWNlQXJnLmFzdE5vZGUsIHR5cGVGaWVsZC5hc3ROb2RlXSxcbiAgICAgICAgKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9IC8vIEFzc2VydCBpbnRlcmZhY2UgZmllbGQgYXJnIHR5cGUgbWF0Y2hlcyBvYmplY3QgZmllbGQgYXJnIHR5cGUuXG4gICAgICAvLyAoaW52YXJpYW50KVxuICAgICAgLy8gVE9ETzogY2hhbmdlIHRvIGNvbnRyYXZhcmlhbnQ/XG5cbiAgICAgIGlmICghaXNFcXVhbFR5cGUoaWZhY2VBcmcudHlwZSwgdHlwZUFyZy50eXBlKSkge1xuICAgICAgICB2YXIgX2lmYWNlQXJnJGFzdE5vZGUsIF90eXBlQXJnJGFzdE5vZGU7XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgICBgSW50ZXJmYWNlIGZpZWxkIGFyZ3VtZW50ICR7aWZhY2UubmFtZX0uJHtmaWVsZE5hbWV9KCR7YXJnTmFtZX06KSBgICtcbiAgICAgICAgICAgIGBleHBlY3RzIHR5cGUgJHtpbnNwZWN0KGlmYWNlQXJnLnR5cGUpfSBidXQgYCArXG4gICAgICAgICAgICBgJHt0eXBlLm5hbWV9LiR7ZmllbGROYW1lfSgke2FyZ05hbWV9OikgaXMgdHlwZSBgICtcbiAgICAgICAgICAgIGAke2luc3BlY3QodHlwZUFyZy50eXBlKX0uYCxcbiAgICAgICAgICBbXG4gICAgICAgICAgICAoX2lmYWNlQXJnJGFzdE5vZGUgPSBpZmFjZUFyZy5hc3ROb2RlKSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgX2lmYWNlQXJnJGFzdE5vZGUgPT09IHZvaWQgMFxuICAgICAgICAgICAgICA/IHZvaWQgMFxuICAgICAgICAgICAgICA6IF9pZmFjZUFyZyRhc3ROb2RlLnR5cGUsXG4gICAgICAgICAgICAoX3R5cGVBcmckYXN0Tm9kZSA9IHR5cGVBcmcuYXN0Tm9kZSkgPT09IG51bGwgfHxcbiAgICAgICAgICAgIF90eXBlQXJnJGFzdE5vZGUgPT09IHZvaWQgMFxuICAgICAgICAgICAgICA/IHZvaWQgMFxuICAgICAgICAgICAgICA6IF90eXBlQXJnJGFzdE5vZGUudHlwZSxcbiAgICAgICAgICBdLFxuICAgICAgICApO1xuICAgICAgfSAvLyBUT0RPOiB2YWxpZGF0ZSBkZWZhdWx0IHZhbHVlcz9cbiAgICB9IC8vIEFzc2VydCBhZGRpdGlvbmFsIGFyZ3VtZW50cyBtdXN0IG5vdCBiZSByZXF1aXJlZC5cblxuICAgIGZvciAoY29uc3QgdHlwZUFyZyBvZiB0eXBlRmllbGQuYXJncykge1xuICAgICAgY29uc3QgYXJnTmFtZSA9IHR5cGVBcmcubmFtZTtcbiAgICAgIGNvbnN0IGlmYWNlQXJnID0gaWZhY2VGaWVsZC5hcmdzLmZpbmQoKGFyZykgPT4gYXJnLm5hbWUgPT09IGFyZ05hbWUpO1xuXG4gICAgICBpZiAoIWlmYWNlQXJnICYmIGlzUmVxdWlyZWRBcmd1bWVudCh0eXBlQXJnKSkge1xuICAgICAgICBjb250ZXh0LnJlcG9ydEVycm9yKFxuICAgICAgICAgIGBPYmplY3QgZmllbGQgJHt0eXBlLm5hbWV9LiR7ZmllbGROYW1lfSBpbmNsdWRlcyByZXF1aXJlZCBhcmd1bWVudCAke2FyZ05hbWV9IHRoYXQgaXMgbWlzc2luZyBmcm9tIHRoZSBJbnRlcmZhY2UgZmllbGQgJHtpZmFjZS5uYW1lfS4ke2ZpZWxkTmFtZX0uYCxcbiAgICAgICAgICBbdHlwZUFyZy5hc3ROb2RlLCBpZmFjZUZpZWxkLmFzdE5vZGVdLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVR5cGVJbXBsZW1lbnRzQW5jZXN0b3JzKGNvbnRleHQsIHR5cGUsIGlmYWNlKSB7XG4gIGNvbnN0IGlmYWNlSW50ZXJmYWNlcyA9IHR5cGUuZ2V0SW50ZXJmYWNlcygpO1xuXG4gIGZvciAoY29uc3QgdHJhbnNpdGl2ZSBvZiBpZmFjZS5nZXRJbnRlcmZhY2VzKCkpIHtcbiAgICBpZiAoIWlmYWNlSW50ZXJmYWNlcy5pbmNsdWRlcyh0cmFuc2l0aXZlKSkge1xuICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgdHJhbnNpdGl2ZSA9PT0gdHlwZVxuICAgICAgICAgID8gYFR5cGUgJHt0eXBlLm5hbWV9IGNhbm5vdCBpbXBsZW1lbnQgJHtpZmFjZS5uYW1lfSBiZWNhdXNlIGl0IHdvdWxkIGNyZWF0ZSBhIGNpcmN1bGFyIHJlZmVyZW5jZS5gXG4gICAgICAgICAgOiBgVHlwZSAke3R5cGUubmFtZX0gbXVzdCBpbXBsZW1lbnQgJHt0cmFuc2l0aXZlLm5hbWV9IGJlY2F1c2UgaXQgaXMgaW1wbGVtZW50ZWQgYnkgJHtpZmFjZS5uYW1lfS5gLFxuICAgICAgICBbXG4gICAgICAgICAgLi4uZ2V0QWxsSW1wbGVtZW50c0ludGVyZmFjZU5vZGVzKGlmYWNlLCB0cmFuc2l0aXZlKSxcbiAgICAgICAgICAuLi5nZXRBbGxJbXBsZW1lbnRzSW50ZXJmYWNlTm9kZXModHlwZSwgaWZhY2UpLFxuICAgICAgICBdLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVVbmlvbk1lbWJlcnMoY29udGV4dCwgdW5pb24pIHtcbiAgY29uc3QgbWVtYmVyVHlwZXMgPSB1bmlvbi5nZXRUeXBlcygpO1xuXG4gIGlmIChtZW1iZXJUeXBlcy5sZW5ndGggPT09IDApIHtcbiAgICBjb250ZXh0LnJlcG9ydEVycm9yKFxuICAgICAgYFVuaW9uIHR5cGUgJHt1bmlvbi5uYW1lfSBtdXN0IGRlZmluZSBvbmUgb3IgbW9yZSBtZW1iZXIgdHlwZXMuYCxcbiAgICAgIFt1bmlvbi5hc3ROb2RlLCAuLi51bmlvbi5leHRlbnNpb25BU1ROb2Rlc10sXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IGluY2x1ZGVkVHlwZU5hbWVzID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICBmb3IgKGNvbnN0IG1lbWJlclR5cGUgb2YgbWVtYmVyVHlwZXMpIHtcbiAgICBpZiAoaW5jbHVkZWRUeXBlTmFtZXNbbWVtYmVyVHlwZS5uYW1lXSkge1xuICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgYFVuaW9uIHR5cGUgJHt1bmlvbi5uYW1lfSBjYW4gb25seSBpbmNsdWRlIHR5cGUgJHttZW1iZXJUeXBlLm5hbWV9IG9uY2UuYCxcbiAgICAgICAgZ2V0VW5pb25NZW1iZXJUeXBlTm9kZXModW5pb24sIG1lbWJlclR5cGUubmFtZSksXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaW5jbHVkZWRUeXBlTmFtZXNbbWVtYmVyVHlwZS5uYW1lXSA9IHRydWU7XG5cbiAgICBpZiAoIWlzT2JqZWN0VHlwZShtZW1iZXJUeXBlKSkge1xuICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgYFVuaW9uIHR5cGUgJHt1bmlvbi5uYW1lfSBjYW4gb25seSBpbmNsdWRlIE9iamVjdCB0eXBlcywgYCArXG4gICAgICAgICAgYGl0IGNhbm5vdCBpbmNsdWRlICR7aW5zcGVjdChtZW1iZXJUeXBlKX0uYCxcbiAgICAgICAgZ2V0VW5pb25NZW1iZXJUeXBlTm9kZXModW5pb24sIFN0cmluZyhtZW1iZXJUeXBlKSksXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUVudW1WYWx1ZXMoY29udGV4dCwgZW51bVR5cGUpIHtcbiAgY29uc3QgZW51bVZhbHVlcyA9IGVudW1UeXBlLmdldFZhbHVlcygpO1xuXG4gIGlmIChlbnVtVmFsdWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnRleHQucmVwb3J0RXJyb3IoXG4gICAgICBgRW51bSB0eXBlICR7ZW51bVR5cGUubmFtZX0gbXVzdCBkZWZpbmUgb25lIG9yIG1vcmUgdmFsdWVzLmAsXG4gICAgICBbZW51bVR5cGUuYXN0Tm9kZSwgLi4uZW51bVR5cGUuZXh0ZW5zaW9uQVNUTm9kZXNdLFxuICAgICk7XG4gIH1cblxuICBmb3IgKGNvbnN0IGVudW1WYWx1ZSBvZiBlbnVtVmFsdWVzKSB7XG4gICAgLy8gRW5zdXJlIHZhbGlkIG5hbWUuXG4gICAgdmFsaWRhdGVOYW1lKGNvbnRleHQsIGVudW1WYWx1ZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVJbnB1dEZpZWxkcyhjb250ZXh0LCBpbnB1dE9iaikge1xuICBjb25zdCBmaWVsZHMgPSBPYmplY3QudmFsdWVzKGlucHV0T2JqLmdldEZpZWxkcygpKTtcblxuICBpZiAoZmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnRleHQucmVwb3J0RXJyb3IoXG4gICAgICBgSW5wdXQgT2JqZWN0IHR5cGUgJHtpbnB1dE9iai5uYW1lfSBtdXN0IGRlZmluZSBvbmUgb3IgbW9yZSBmaWVsZHMuYCxcbiAgICAgIFtpbnB1dE9iai5hc3ROb2RlLCAuLi5pbnB1dE9iai5leHRlbnNpb25BU1ROb2Rlc10sXG4gICAgKTtcbiAgfSAvLyBFbnN1cmUgdGhlIGFyZ3VtZW50cyBhcmUgdmFsaWRcblxuICBmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcykge1xuICAgIC8vIEVuc3VyZSB0aGV5IGFyZSBuYW1lZCBjb3JyZWN0bHkuXG4gICAgdmFsaWRhdGVOYW1lKGNvbnRleHQsIGZpZWxkKTsgLy8gRW5zdXJlIHRoZSB0eXBlIGlzIGFuIGlucHV0IHR5cGVcblxuICAgIGlmICghaXNJbnB1dFR5cGUoZmllbGQudHlwZSkpIHtcbiAgICAgIHZhciBfZmllbGQkYXN0Tm9kZTI7XG5cbiAgICAgIGNvbnRleHQucmVwb3J0RXJyb3IoXG4gICAgICAgIGBUaGUgdHlwZSBvZiAke2lucHV0T2JqLm5hbWV9LiR7ZmllbGQubmFtZX0gbXVzdCBiZSBJbnB1dCBUeXBlIGAgK1xuICAgICAgICAgIGBidXQgZ290OiAke2luc3BlY3QoZmllbGQudHlwZSl9LmAsXG4gICAgICAgIChfZmllbGQkYXN0Tm9kZTIgPSBmaWVsZC5hc3ROb2RlKSA9PT0gbnVsbCB8fCBfZmllbGQkYXN0Tm9kZTIgPT09IHZvaWQgMFxuICAgICAgICAgID8gdm9pZCAwXG4gICAgICAgICAgOiBfZmllbGQkYXN0Tm9kZTIudHlwZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGlzUmVxdWlyZWRJbnB1dEZpZWxkKGZpZWxkKSAmJiBmaWVsZC5kZXByZWNhdGlvblJlYXNvbiAhPSBudWxsKSB7XG4gICAgICB2YXIgX2ZpZWxkJGFzdE5vZGUzO1xuXG4gICAgICBjb250ZXh0LnJlcG9ydEVycm9yKFxuICAgICAgICBgUmVxdWlyZWQgaW5wdXQgZmllbGQgJHtpbnB1dE9iai5uYW1lfS4ke2ZpZWxkLm5hbWV9IGNhbm5vdCBiZSBkZXByZWNhdGVkLmAsXG4gICAgICAgIFtcbiAgICAgICAgICBnZXREZXByZWNhdGVkRGlyZWN0aXZlTm9kZShmaWVsZC5hc3ROb2RlKSxcbiAgICAgICAgICAoX2ZpZWxkJGFzdE5vZGUzID0gZmllbGQuYXN0Tm9kZSkgPT09IG51bGwgfHxcbiAgICAgICAgICBfZmllbGQkYXN0Tm9kZTMgPT09IHZvaWQgMFxuICAgICAgICAgICAgPyB2b2lkIDBcbiAgICAgICAgICAgIDogX2ZpZWxkJGFzdE5vZGUzLnR5cGUsXG4gICAgICAgIF0sXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChpbnB1dE9iai5pc09uZU9mKSB7XG4gICAgICB2YWxpZGF0ZU9uZU9mSW5wdXRPYmplY3RGaWVsZChpbnB1dE9iaiwgZmllbGQsIGNvbnRleHQpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU9uZU9mSW5wdXRPYmplY3RGaWVsZCh0eXBlLCBmaWVsZCwgY29udGV4dCkge1xuICBpZiAoaXNOb25OdWxsVHlwZShmaWVsZC50eXBlKSkge1xuICAgIHZhciBfZmllbGQkYXN0Tm9kZTQ7XG5cbiAgICBjb250ZXh0LnJlcG9ydEVycm9yKFxuICAgICAgYE9uZU9mIGlucHV0IGZpZWxkICR7dHlwZS5uYW1lfS4ke2ZpZWxkLm5hbWV9IG11c3QgYmUgbnVsbGFibGUuYCxcbiAgICAgIChfZmllbGQkYXN0Tm9kZTQgPSBmaWVsZC5hc3ROb2RlKSA9PT0gbnVsbCB8fCBfZmllbGQkYXN0Tm9kZTQgPT09IHZvaWQgMFxuICAgICAgICA/IHZvaWQgMFxuICAgICAgICA6IF9maWVsZCRhc3ROb2RlNC50eXBlLFxuICAgICk7XG4gIH1cblxuICBpZiAoZmllbGQuZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBjb250ZXh0LnJlcG9ydEVycm9yKFxuICAgICAgYE9uZU9mIGlucHV0IGZpZWxkICR7dHlwZS5uYW1lfS4ke2ZpZWxkLm5hbWV9IGNhbm5vdCBoYXZlIGEgZGVmYXVsdCB2YWx1ZS5gLFxuICAgICAgZmllbGQuYXN0Tm9kZSxcbiAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUlucHV0T2JqZWN0Q2lyY3VsYXJSZWZzVmFsaWRhdG9yKGNvbnRleHQpIHtcbiAgLy8gTW9kaWZpZWQgY29weSBvZiBhbGdvcml0aG0gZnJvbSAnc3JjL3ZhbGlkYXRpb24vcnVsZXMvTm9GcmFnbWVudEN5Y2xlcy5qcycuXG4gIC8vIFRyYWNrcyBhbHJlYWR5IHZpc2l0ZWQgdHlwZXMgdG8gbWFpbnRhaW4gTyhOKSBhbmQgdG8gZW5zdXJlIHRoYXQgY3ljbGVzXG4gIC8vIGFyZSBub3QgcmVkdW5kYW50bHkgcmVwb3J0ZWQuXG4gIGNvbnN0IHZpc2l0ZWRUeXBlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7IC8vIEFycmF5IG9mIHR5cGVzIG5vZGVzIHVzZWQgdG8gcHJvZHVjZSBtZWFuaW5nZnVsIGVycm9yc1xuXG4gIGNvbnN0IGZpZWxkUGF0aCA9IFtdOyAvLyBQb3NpdGlvbiBpbiB0aGUgdHlwZSBwYXRoXG5cbiAgY29uc3QgZmllbGRQYXRoSW5kZXhCeVR5cGVOYW1lID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgcmV0dXJuIGRldGVjdEN5Y2xlUmVjdXJzaXZlOyAvLyBUaGlzIGRvZXMgYSBzdHJhaWdodC1mb3J3YXJkIERGUyB0byBmaW5kIGN5Y2xlcy5cbiAgLy8gSXQgZG9lcyBub3QgdGVybWluYXRlIHdoZW4gYSBjeWNsZSB3YXMgZm91bmQgYnV0IGNvbnRpbnVlcyB0byBleHBsb3JlXG4gIC8vIHRoZSBncmFwaCB0byBmaW5kIGFsbCBwb3NzaWJsZSBjeWNsZXMuXG5cbiAgZnVuY3Rpb24gZGV0ZWN0Q3ljbGVSZWN1cnNpdmUoaW5wdXRPYmopIHtcbiAgICBpZiAodmlzaXRlZFR5cGVzW2lucHV0T2JqLm5hbWVdKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmlzaXRlZFR5cGVzW2lucHV0T2JqLm5hbWVdID0gdHJ1ZTtcbiAgICBmaWVsZFBhdGhJbmRleEJ5VHlwZU5hbWVbaW5wdXRPYmoubmFtZV0gPSBmaWVsZFBhdGgubGVuZ3RoO1xuICAgIGNvbnN0IGZpZWxkcyA9IE9iamVjdC52YWx1ZXMoaW5wdXRPYmouZ2V0RmllbGRzKCkpO1xuXG4gICAgZm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChpc05vbk51bGxUeXBlKGZpZWxkLnR5cGUpICYmIGlzSW5wdXRPYmplY3RUeXBlKGZpZWxkLnR5cGUub2ZUeXBlKSkge1xuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBmaWVsZC50eXBlLm9mVHlwZTtcbiAgICAgICAgY29uc3QgY3ljbGVJbmRleCA9IGZpZWxkUGF0aEluZGV4QnlUeXBlTmFtZVtmaWVsZFR5cGUubmFtZV07XG4gICAgICAgIGZpZWxkUGF0aC5wdXNoKGZpZWxkKTtcblxuICAgICAgICBpZiAoY3ljbGVJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgZGV0ZWN0Q3ljbGVSZWN1cnNpdmUoZmllbGRUeXBlKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjeWNsZVBhdGggPSBmaWVsZFBhdGguc2xpY2UoY3ljbGVJbmRleCk7XG4gICAgICAgICAgY29uc3QgcGF0aFN0ciA9IGN5Y2xlUGF0aC5tYXAoKGZpZWxkT2JqKSA9PiBmaWVsZE9iai5uYW1lKS5qb2luKCcuJyk7XG4gICAgICAgICAgY29udGV4dC5yZXBvcnRFcnJvcihcbiAgICAgICAgICAgIGBDYW5ub3QgcmVmZXJlbmNlIElucHV0IE9iamVjdCBcIiR7ZmllbGRUeXBlLm5hbWV9XCIgd2l0aGluIGl0c2VsZiB0aHJvdWdoIGEgc2VyaWVzIG9mIG5vbi1udWxsIGZpZWxkczogXCIke3BhdGhTdHJ9XCIuYCxcbiAgICAgICAgICAgIGN5Y2xlUGF0aC5tYXAoKGZpZWxkT2JqKSA9PiBmaWVsZE9iai5hc3ROb2RlKSxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgZmllbGRQYXRoLnBvcCgpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZpZWxkUGF0aEluZGV4QnlUeXBlTmFtZVtpbnB1dE9iai5uYW1lXSA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRBbGxJbXBsZW1lbnRzSW50ZXJmYWNlTm9kZXModHlwZSwgaWZhY2UpIHtcbiAgY29uc3QgeyBhc3ROb2RlLCBleHRlbnNpb25BU1ROb2RlcyB9ID0gdHlwZTtcbiAgY29uc3Qgbm9kZXMgPVxuICAgIGFzdE5vZGUgIT0gbnVsbCA/IFthc3ROb2RlLCAuLi5leHRlbnNpb25BU1ROb2Rlc10gOiBleHRlbnNpb25BU1ROb2RlczsgLy8gRklYTUU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ncmFwaHFsL2dyYXBocWwtanMvaXNzdWVzLzIyMDNcblxuICByZXR1cm4gbm9kZXNcbiAgICAuZmxhdE1hcCgodHlwZU5vZGUpID0+IHtcbiAgICAgIHZhciBfdHlwZU5vZGUkaW50ZXJmYWNlcztcblxuICAgICAgcmV0dXJuIChcbiAgICAgICAgLyogYzggaWdub3JlIG5leHQgKi9cbiAgICAgICAgKF90eXBlTm9kZSRpbnRlcmZhY2VzID0gdHlwZU5vZGUuaW50ZXJmYWNlcykgIT09IG51bGwgJiZcbiAgICAgICAgICBfdHlwZU5vZGUkaW50ZXJmYWNlcyAhPT0gdm9pZCAwXG4gICAgICAgICAgPyBfdHlwZU5vZGUkaW50ZXJmYWNlc1xuICAgICAgICAgIDogW11cbiAgICAgICk7XG4gICAgfSlcbiAgICAuZmlsdGVyKChpZmFjZU5vZGUpID0+IGlmYWNlTm9kZS5uYW1lLnZhbHVlID09PSBpZmFjZS5uYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0VW5pb25NZW1iZXJUeXBlTm9kZXModW5pb24sIHR5cGVOYW1lKSB7XG4gIGNvbnN0IHsgYXN0Tm9kZSwgZXh0ZW5zaW9uQVNUTm9kZXMgfSA9IHVuaW9uO1xuICBjb25zdCBub2RlcyA9XG4gICAgYXN0Tm9kZSAhPSBudWxsID8gW2FzdE5vZGUsIC4uLmV4dGVuc2lvbkFTVE5vZGVzXSA6IGV4dGVuc2lvbkFTVE5vZGVzOyAvLyBGSVhNRTogaHR0cHM6Ly9naXRodWIuY29tL2dyYXBocWwvZ3JhcGhxbC1qcy9pc3N1ZXMvMjIwM1xuXG4gIHJldHVybiBub2Rlc1xuICAgIC5mbGF0TWFwKCh1bmlvbk5vZGUpID0+IHtcbiAgICAgIHZhciBfdW5pb25Ob2RlJHR5cGVzO1xuXG4gICAgICByZXR1cm4gKFxuICAgICAgICAvKiBjOCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICAoX3VuaW9uTm9kZSR0eXBlcyA9IHVuaW9uTm9kZS50eXBlcykgIT09IG51bGwgJiZcbiAgICAgICAgICBfdW5pb25Ob2RlJHR5cGVzICE9PSB2b2lkIDBcbiAgICAgICAgICA/IF91bmlvbk5vZGUkdHlwZXNcbiAgICAgICAgICA6IFtdXG4gICAgICApO1xuICAgIH0pXG4gICAgLmZpbHRlcigodHlwZU5vZGUpID0+IHR5cGVOb2RlLm5hbWUudmFsdWUgPT09IHR5cGVOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0RGVwcmVjYXRlZERpcmVjdGl2ZU5vZGUoZGVmaW5pdGlvbk5vZGUpIHtcbiAgdmFyIF9kZWZpbml0aW9uTm9kZSRkaXJlYztcblxuICByZXR1cm4gZGVmaW5pdGlvbk5vZGUgPT09IG51bGwgfHwgZGVmaW5pdGlvbk5vZGUgPT09IHZvaWQgMFxuICAgID8gdm9pZCAwXG4gICAgOiAoX2RlZmluaXRpb25Ob2RlJGRpcmVjID0gZGVmaW5pdGlvbk5vZGUuZGlyZWN0aXZlcykgPT09IG51bGwgfHxcbiAgICAgIF9kZWZpbml0aW9uTm9kZSRkaXJlYyA9PT0gdm9pZCAwXG4gICAgPyB2b2lkIDBcbiAgICA6IF9kZWZpbml0aW9uTm9kZSRkaXJlYy5maW5kKFxuICAgICAgICAobm9kZSkgPT4gbm9kZS5uYW1lLnZhbHVlID09PSBHcmFwaFFMRGVwcmVjYXRlZERpcmVjdGl2ZS5uYW1lLFxuICAgICAgKTtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQ3BGLE1BQU0sQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDNUYsTUFBTSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzNGLE1BQU0sQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDbkgsTUFBTSxDQUFDO0FBQ1AsQ0FBQyxDQUFDLFVBQVU7QUFDWixDQUFDLENBQUMsaUJBQWlCO0FBQ25C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QyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN2RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDM0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQztBQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMvRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJO0FBQ3hCOztBQUVBLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVTtBQUMzRCxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDakMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVc7QUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTztBQUMvRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtBQUNkLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTOztBQUV4QyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUztBQUN0RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLOztBQUVyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUztBQUN4QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJOztBQUVyRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVc7QUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQzdFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRU4sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU87O0FBRXhCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVztBQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNwRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsMEJBQTBCLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztBQUNuRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQzNFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJO0FBQ2pDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDO0FBQ0Y7O0FBRUEsUUFBUSxDQUFDLFlBQVksQ0FBQyxPQUFP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QUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDOztBQUVsRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ25DLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTzs7QUFFeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVc7QUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDN0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ2pCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSTtBQUMvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDOztBQUVsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVM7O0FBRWxFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDOztBQUVqRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFROztBQUV6QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVc7QUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUMvRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUMzRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUk7QUFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFTixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDcEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUTs7QUFFekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXO0FBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDM0YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNWLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUM7QUFDbkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM3RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSTtBQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUNGOztBQUVBLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQyxDQUFDLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7O0FBRTVDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNqQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVztBQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDbkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVE7QUFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVKLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDeEIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVc7QUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDakcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDhCQUE4QixDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNuRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtBQUNkLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVc7QUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNsRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDO0FBQ25ELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO0FBQ2QsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFSixDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7QUFDckMsQ0FBQyxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDekQsQ0FBQyxDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDekQsQ0FBQyxDQUFDO0FBQ0Y7O0FBRUEsUUFBUSxDQUFDLCtCQUErQixDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQy9ELENBQUMsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsV0FBVzs7QUFFdEYsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdELENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUk7QUFDckMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUk7O0FBRXZGLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUNwQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVztBQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNuRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQztBQUNyRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUTtBQUNkLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN6RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTOztBQUVsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDM0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTzs7QUFFakQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVc7QUFDekIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNuRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSTtBQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3RDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSTtBQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxXQUFXOztBQUV2RCxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM1QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSTtBQUNuQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLOztBQUU5SCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3BCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVztBQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQztBQUMvQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRO0FBQ2hCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxJQUFJO0FBQ3hFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUztBQUNuQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLGFBQWE7O0FBRXRDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTzs7QUFFL0MsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXO0FBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM5RSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzFELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUM5RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1YsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM3RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3ZDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJO0FBQ3RDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNyQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSTtBQUNyQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDWCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNULENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU07QUFDeEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsUUFBUTs7QUFFekQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUk7QUFDbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDOztBQUUxRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxF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QUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQzs7QUFFaEMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVM7QUFDdEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQzs7QUFFakUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLFFBQVE7O0FBRXpCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxXQUFXO0FBQ3pCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzVDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQy9FLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNqQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUk7QUFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBRUosQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDeEUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFROztBQUV6QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVztBQUN6QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUNuRixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDUixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7QUFDbkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RELENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNuQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLElBQUk7QUFDbEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQzs7QUFFSixDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUMxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyw2QkFBNkIsQ0FBQyxRQUFRLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUM7QUFDN0QsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUNGOztBQUVBLFFBQVEsQ0FB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USxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsTUFBTTtBQUM5RCxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7O0FBRXRELENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDaEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDN0UsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTTtBQUMzQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztBQUNuRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7O0FBRTdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUN0QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLFNBQVMsQ0FBQztBQUN6QyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNmLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUM7QUFDdkQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFdBQVc7QUFDN0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7QUFDekQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVSLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDdkIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUVKLENBQUMsQ0FBQyxDQUFDLENBQUMsd0JBQXdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO0FBQ3ZELENBQUMsQ0FBQztBQUNGOztBQUVBLFFBQVEsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyRCxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUk7QUFDN0MsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7QUFDZCxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDOztBQUVsSSxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ1QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVTs7QUFFOUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO0FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDM0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDL0QsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3hDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztBQUN0QixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7QUFDL0Q7O0FBRUEsUUFBUSxDQUFDLHVCQUF1QixDQUFDLEtBQUssQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2xELENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztBQUM5QyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQztBQUNkLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUM7O0FBRWxJLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDVCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxLQUFLOztBQUUxQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7QUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUMzQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN2RCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDcEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDO0FBQ3ZCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDYixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ1AsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDO0FBQzNEOztBQUVBLFFBQVEsQ0FBQywwQkFBMEIsQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNwRCxDQUFDLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxLQUFLOztBQUUzQixDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDNUQsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ1gsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNwRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0FBQ3JDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztBQUNYLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsSUFBSTtBQUNoQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLElBQUk7QUFDckUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNQOyJ9