diff --git a/pkg/nnbd_migration/analysis_options.yaml b/pkg/nnbd_migration/analysis_options.yaml index b03bab6bf91..6fc8bee2cb3 100644 --- a/pkg/nnbd_migration/analysis_options.yaml +++ b/pkg/nnbd_migration/analysis_options.yaml @@ -26,4 +26,5 @@ linter: - empty_constructor_bodies - empty_statements - unnecessary_brace_in_string_interps + - use_super_parameters - valid_regexps diff --git a/pkg/nnbd_migration/lib/fix_reason_target.dart b/pkg/nnbd_migration/lib/fix_reason_target.dart index 43d1b3fde35..1588b0530e6 100644 --- a/pkg/nnbd_migration/lib/fix_reason_target.dart +++ b/pkg/nnbd_migration/lib/fix_reason_target.dart @@ -47,8 +47,7 @@ abstract class FixReasonTarget { class _FixReasonTarget_NamedParameter extends _FixReasonTarget_Part { final String name; - _FixReasonTarget_NamedParameter(FixReasonTarget inner, this.name) - : super(inner); + _FixReasonTarget_NamedParameter(super.inner, this.name); @override int get hashCode => Object.hash(2, inner, name); @@ -76,8 +75,7 @@ abstract class _FixReasonTarget_Part extends FixReasonTarget { class _FixReasonTarget_PositionalParameter extends _FixReasonTarget_Part { final int index; - _FixReasonTarget_PositionalParameter(FixReasonTarget inner, this.index) - : super(inner); + _FixReasonTarget_PositionalParameter(super.inner, this.index); @override int get hashCode => Object.hash(1, inner, index); @@ -95,7 +93,7 @@ class _FixReasonTarget_PositionalParameter extends _FixReasonTarget_Part { /// Fix reason target representing the return type of a function type. class _FixReasonTarget_ReturnType extends _FixReasonTarget_Part { - _FixReasonTarget_ReturnType(FixReasonTarget inner) : super(inner); + _FixReasonTarget_ReturnType(super.inner); @override int get hashCode => Object.hash(3, inner); @@ -127,8 +125,7 @@ class _FixReasonTarget_Root extends FixReasonTarget { class _FixReasonTarget_TypeArgument extends _FixReasonTarget_Part { final int index; - _FixReasonTarget_TypeArgument(FixReasonTarget inner, this.index) - : super(inner); + _FixReasonTarget_TypeArgument(super.inner, this.index); @override int get hashCode => Object.hash(5, inner, index); @@ -159,7 +156,7 @@ class _FixReasonTarget_TypeArgument extends _FixReasonTarget_Part { /// argument of type argument of" or simply "type argument". The solution is to /// describe the fix reason target as "type argument of yielded type". class _FixReasonTarget_YieldedType extends _FixReasonTarget_Part { - _FixReasonTarget_YieldedType(FixReasonTarget inner) : super(inner); + _FixReasonTarget_YieldedType(super.inner); @override int get hashCode => Object.hash(4, inner); diff --git a/pkg/nnbd_migration/lib/src/edge_origin.dart b/pkg/nnbd_migration/lib/src/edge_origin.dart index ff7d8cebbe5..05a7345fcf6 100644 --- a/pkg/nnbd_migration/lib/src/edge_origin.dart +++ b/pkg/nnbd_migration/lib/src/edge_origin.dart @@ -26,8 +26,8 @@ class AlreadyMigratedTypeOrigin extends EdgeOrigin { /// Indicates whether the already-migrated type is nullable or not. final bool isNullable; - AlreadyMigratedTypeOrigin.forElement(Element element, this.isNullable) - : super.forElement(element); + AlreadyMigratedTypeOrigin.forElement(Element super.element, this.isNullable) + : super.forElement(); @override String get description => '${isNullable ? 'nullable' : 'non-nullable'}' @@ -50,11 +50,10 @@ class AlwaysNullableTypeOrigin extends EdgeOrigin { /// it is the `dynamic` type). final bool isVoid; - AlwaysNullableTypeOrigin(Source? source, AstNode node, this.isVoid) - : super(source, node); + AlwaysNullableTypeOrigin(super.source, AstNode super.node, this.isVoid); - AlwaysNullableTypeOrigin.forElement(Element element, this.isVoid) - : super.forElement(element); + AlwaysNullableTypeOrigin.forElement(Element super.element, this.isVoid) + : super.forElement(); @override String get description => @@ -67,7 +66,7 @@ class AlwaysNullableTypeOrigin extends EdgeOrigin { /// Edge origin resulting from the presence of an Angular annotation such as /// `@Optional()`, `@ViewChild(...)`, or `@ContentChild(...)`. class AngularAnnotationOrigin extends EdgeOrigin { - AngularAnnotationOrigin(Source? source, AstNode node) : super(source, node); + AngularAnnotationOrigin(super.source, AstNode super.node); @override String get description => @@ -88,8 +87,7 @@ class AngularAnnotationOrigin extends EdgeOrigin { /// this class is used for the edge connecting the type of f's `i` parameter to /// `never`, due to the `checkNotNull` call proclaiming that `i` is not `null`. class ArgumentErrorCheckNotNullOrigin extends EdgeOrigin { - ArgumentErrorCheckNotNullOrigin(Source? source, SimpleIdentifier node) - : super(source, node); + ArgumentErrorCheckNotNullOrigin(super.source, SimpleIdentifier super.node); @override String get description => 'value checked to be non-null'; @@ -100,7 +98,7 @@ class ArgumentErrorCheckNotNullOrigin extends EdgeOrigin { /// Edge origin resulting from a use of built_value's `@nullable` annotation. class BuiltValueNullableOrigin extends EdgeOrigin { - BuiltValueNullableOrigin(Source? source, AstNode node) : super(source, node); + BuiltValueNullableOrigin(super.source, AstNode super.node); @override String get description => 'method is marked with the `@nullable` annotation'; @@ -112,7 +110,7 @@ class BuiltValueNullableOrigin extends EdgeOrigin { /// An edge origin used for edges that originated because of a tear-off of /// `call` on a function type. class CallTearOffOrigin extends EdgeOrigin { - CallTearOffOrigin(Source? source, AstNode node) : super(source, node); + CallTearOffOrigin(super.source, AstNode super.node); @override String get description => 'tear-off of .call'; @@ -124,8 +122,7 @@ class CallTearOffOrigin extends EdgeOrigin { /// Edge origin resulting from the use of a value on the LHS of a compound /// assignment. class CompoundAssignmentOrigin extends EdgeOrigin { - CompoundAssignmentOrigin(Source? source, AssignmentExpression node) - : super(source, node); + CompoundAssignmentOrigin(super.source, AssignmentExpression super.node); @override String get description => 'compound assignment'; @@ -140,7 +137,7 @@ class CompoundAssignmentOrigin extends EdgeOrigin { /// Edge origin resulting from the use of an element which does not affect the /// nullability graph in other ways. class DummyOrigin extends EdgeOrigin { - DummyOrigin(Source? source, AstNode node) : super(source, node); + DummyOrigin(super.source, AstNode super.node); @override String get description => 'dummy'; @@ -152,7 +149,7 @@ class DummyOrigin extends EdgeOrigin { /// An edge origin used for edges that originated because of an assignment /// involving a value with a dynamic type. class DynamicAssignmentOrigin extends EdgeOrigin { - DynamicAssignmentOrigin(Source? source, AstNode? node) : super(source, node); + DynamicAssignmentOrigin(super.source, super.node); @override String get description => 'assignment of dynamic value'; @@ -196,7 +193,7 @@ abstract class EdgeOrigin extends EdgeOriginInfo { /// An edge origin used for edges that originated because of a reference to an /// enum value, which cannot be null. class EnumValueOrigin extends EdgeOrigin { - EnumValueOrigin(Source? source, AstNode node) : super(source, node); + EnumValueOrigin(super.source, AstNode super.node); @override String get description => 'non-nullable enum value'; @@ -208,7 +205,7 @@ class EnumValueOrigin extends EdgeOrigin { /// Edge origin resulting from an explicit or implicit `dynamic` type annotation /// appearing in an external declaration. class ExternalDynamicOrigin extends EdgeOrigin { - ExternalDynamicOrigin(Source? source, AstNode node) : super(source, node); + ExternalDynamicOrigin(super.source, AstNode super.node); @override String get description => 'dynamic type in external declaration'; @@ -220,8 +217,7 @@ class ExternalDynamicOrigin extends EdgeOrigin { /// Edge origin resulting from the relationship between a field formal parameter /// and the corresponding field. class FieldFormalParameterOrigin extends EdgeOrigin { - FieldFormalParameterOrigin(Source? source, FieldFormalParameter node) - : super(source, node); + FieldFormalParameterOrigin(super.source, FieldFormalParameter super.node); @override String get description => 'field formal parameter'; @@ -237,7 +233,7 @@ class FieldFormalParameterOrigin extends EdgeOrigin { /// that failed to initialize the field (or the class, if the constructor is /// synthetic). class FieldNotInitializedOrigin extends EdgeOrigin { - FieldNotInitializedOrigin(Source? source, AstNode node) : super(source, node); + FieldNotInitializedOrigin(super.source, AstNode super.node); @override String get description => 'field not initialized'; @@ -256,8 +252,7 @@ class FieldNotInitializedOrigin extends EdgeOrigin { /// this class is used for the edge connecting the type of `l`'s `int` type /// parameter to the type of `i`. class ForEachVariableOrigin extends EdgeOrigin { - ForEachVariableOrigin(Source? source, ForEachParts node) - : super(source, node); + ForEachVariableOrigin(super.source, ForEachParts super.node); @override String get description => 'variable in "for each" loop'; @@ -268,8 +263,7 @@ class ForEachVariableOrigin extends EdgeOrigin { /// Edge origin resulting from the relationship between a getter and a setter. class GetterSetterCorrespondenceOrigin extends EdgeOrigin { - GetterSetterCorrespondenceOrigin(Source? source, AstNode node) - : super(source, node); + GetterSetterCorrespondenceOrigin(super.source, AstNode super.node); @override String get description => 'getter/setter correspondence'; @@ -288,7 +282,7 @@ class GetterSetterCorrespondenceOrigin extends EdgeOrigin { /// `x` and `y` are nullable, due to the fact that the `int` in the return type /// is the greatest lower bound of the two other `int`s. class GreatestLowerBoundOrigin extends EdgeOrigin { - GreatestLowerBoundOrigin(Source? source, AstNode? node) : super(source, node); + GreatestLowerBoundOrigin(super.source, super.node); @override String get description => 'greatest lower bound'; @@ -299,7 +293,7 @@ class GreatestLowerBoundOrigin extends EdgeOrigin { /// Edge origin resulting from the presence of a `??` operator. class IfNullOrigin extends EdgeOrigin { - IfNullOrigin(Source? source, AstNode node) : super(source, node); + IfNullOrigin(super.source, AstNode super.node); @override String get description => 'if-null operator'; @@ -322,8 +316,7 @@ class IfNullOrigin extends EdgeOrigin { /// between the implicit constructor for `D` and the explicit constructor for /// `C`. class ImplicitMixinSuperCallOrigin extends EdgeOrigin { - ImplicitMixinSuperCallOrigin(Source? source, ClassTypeAlias node) - : super(source, node); + ImplicitMixinSuperCallOrigin(super.source, ClassTypeAlias super.node); @override String get description => 'implicit super call in mixin constructor'; @@ -335,8 +328,7 @@ class ImplicitMixinSuperCallOrigin extends EdgeOrigin { /// Edge origin resulting from the implicit assignment of `null` to a top level /// variable or field that lacks an initializer. class ImplicitNullInitializerOrigin extends EdgeOrigin { - ImplicitNullInitializerOrigin(Source? source, AstNode node) - : super(source, node); + ImplicitNullInitializerOrigin(super.source, AstNode super.node); @override String get description => 'uninitialized variable'; @@ -348,8 +340,7 @@ class ImplicitNullInitializerOrigin extends EdgeOrigin { /// Edge origin resulting from a `return;` statement which implicitly returns /// `null`. class ImplicitNullReturnOrigin extends EdgeOrigin { - ImplicitNullReturnOrigin(Source? source, ReturnStatement node) - : super(source, node); + ImplicitNullReturnOrigin(super.source, ReturnStatement super.node); @override String get description => 'implicit return of null'; @@ -364,7 +355,7 @@ class ImplicitNullReturnOrigin extends EdgeOrigin { /// Edge origin used for edges that arise from an implicit use of `this`, e.g. /// during a method call from an extension. class ImplicitThisOrigin extends EdgeOrigin { - ImplicitThisOrigin(Source? source, AstNode node) : super(source, node); + ImplicitThisOrigin(super.source, AstNode super.node); @override String get description => 'implicit use of `this`'; @@ -376,8 +367,7 @@ class ImplicitThisOrigin extends EdgeOrigin { /// Edge origin resulting from the inference of a type parameter, which /// can affects the nullability of that type parameter's bound. class InferredTypeParameterInstantiationOrigin extends EdgeOrigin { - InferredTypeParameterInstantiationOrigin(Source? source, AstNode node) - : super(source, node); + InferredTypeParameterInstantiationOrigin(super.source, AstNode super.node); @override String get description => 'inferred type parameter'; @@ -389,7 +379,7 @@ class InferredTypeParameterInstantiationOrigin extends EdgeOrigin { /// An edge origin used for edges that originated because of an instance /// creation expression. class InstanceCreationOrigin extends EdgeOrigin { - InstanceCreationOrigin(Source? source, AstNode node) : super(source, node); + InstanceCreationOrigin(super.source, AstNode super.node); @override String get description => 'instance creation'; @@ -407,8 +397,7 @@ class InstanceCreationOrigin extends EdgeOrigin { /// this class is used for the edge connecting the type of x's type parameter /// with the type bound in the declaration of C. class InstantiateToBoundsOrigin extends EdgeOrigin { - InstantiateToBoundsOrigin(Source? source, NamedType node) - : super(source, node); + InstantiateToBoundsOrigin(super.source, NamedType super.node); @override String get description => 'type instantiated to bounds'; @@ -423,8 +412,7 @@ class InstantiateToBoundsOrigin extends EdgeOrigin { /// Before the migration, there was no way to say `is int?`, and therefore, /// `is int` should migrate to non-null int. class IsCheckMainTypeOrigin extends EdgeOrigin { - IsCheckMainTypeOrigin(Source? source, TypeAnnotation node) - : super(source, node); + IsCheckMainTypeOrigin(super.source, TypeAnnotation super.node); @override String get description => '"is" check does not accept null'; @@ -436,8 +424,7 @@ class IsCheckMainTypeOrigin extends EdgeOrigin { /// An edge origin used for the return type of an iterator method that might be /// changed into an extension method from package:collection. class IteratorMethodReturnOrigin extends EdgeOrigin { - IteratorMethodReturnOrigin(Source? source, AstNode node) - : super(source, node); + IteratorMethodReturnOrigin(super.source, AstNode super.node); @override String get description => @@ -450,8 +437,7 @@ class IteratorMethodReturnOrigin extends EdgeOrigin { /// An edge origin used for the type argument of a list constructor that /// specified an initial length, because that type argument must be nullable. class ListLengthConstructorOrigin extends EdgeOrigin { - ListLengthConstructorOrigin(Source? source, AstNode node) - : super(source, node); + ListLengthConstructorOrigin(super.source, AstNode super.node); @override String get description => 'construction of list via a length'; @@ -463,7 +449,7 @@ class ListLengthConstructorOrigin extends EdgeOrigin { /// An edge origin used for edges that originated because a literal expression /// has a known nullability. class LiteralOrigin extends EdgeOrigin { - LiteralOrigin(Source? source, AstNode node) : super(source, node); + LiteralOrigin(super.source, AstNode super.node); @override String get description => 'literal expression'; @@ -485,8 +471,7 @@ class LiteralOrigin extends EdgeOrigin { /// parameter, due to the fact that the call to `f` implicitly passes a null /// value for `i`. class NamedParameterNotSuppliedOrigin extends EdgeOrigin { - NamedParameterNotSuppliedOrigin(Source? source, AstNode node) - : super(source, node); + NamedParameterNotSuppliedOrigin(super.source, AstNode super.node); @override String get description => 'named parameter not supplied'; @@ -498,7 +483,7 @@ class NamedParameterNotSuppliedOrigin extends EdgeOrigin { /// Edge origin for the nullability of an expression that whose type is fixed by /// the language definition to be non-nullable `bool`. class NonNullableBoolTypeOrigin extends EdgeOrigin { - NonNullableBoolTypeOrigin(Source? source, AstNode node) : super(source, node); + NonNullableBoolTypeOrigin(super.source, AstNode super.node); @override String get description => 'non-null boolean expression'; @@ -510,8 +495,7 @@ class NonNullableBoolTypeOrigin extends EdgeOrigin { /// Edge origin resulting from the class/superclass relationship for a class /// whose superclass is implicitly `Object`. class NonNullableObjectSuperclass extends EdgeOrigin { - NonNullableObjectSuperclass(Source? source, AstNode node) - : super(source, node); + NonNullableObjectSuperclass(super.source, AstNode super.node); @override String get description => 'implicit supertype of Object'; @@ -523,7 +507,7 @@ class NonNullableObjectSuperclass extends EdgeOrigin { /// Edge origin resulting from the usage of a value in a circumstance that /// requires it to be non-nullable class NonNullableUsageOrigin extends EdgeOrigin { - NonNullableUsageOrigin(Source? source, AstNode node) : super(source, node); + NonNullableUsageOrigin(super.source, AstNode super.node); @override String get description => 'value cannot be null'; @@ -542,7 +526,7 @@ class NonNullableUsageOrigin extends EdgeOrigin { /// this class is used for the edge connecting the type of f's `i` parameter to /// `never`, due to the assert statement proclaiming that `i` is not `null`. class NonNullAssertionOrigin extends EdgeOrigin { - NonNullAssertionOrigin(Source? source, Assertion node) : super(source, node); + NonNullAssertionOrigin(super.source, Assertion super.node); @override String get description => 'value asserted to be non-null'; @@ -564,11 +548,10 @@ class NullabilityCommentOrigin extends EdgeOrigin { /// non-nullable. final bool isNullable; - NullabilityCommentOrigin(Source? source, AstNode node, this.isNullable) + NullabilityCommentOrigin(super.source, AstNode super.node, this.isNullable) : assert(node is TypeAnnotation || node is FunctionTypedFormalParameter || - (node is FieldFormalParameter && node.parameters != null)), - super(source, node); + (node is FieldFormalParameter && node.parameters != null)); @override String get description => @@ -586,8 +569,8 @@ class NullabilityCommentOrigin extends EdgeOrigin { /// this class is used for the edge connecting `always` to the type of f's `i` /// parameter, due to the fact that `i` is optional and has no initializer. class OptionalFormalParameterOrigin extends EdgeOrigin { - OptionalFormalParameterOrigin(Source? source, DefaultFormalParameter node) - : super(source, node); + OptionalFormalParameterOrigin( + super.source, DefaultFormalParameter super.node); @override String get description => 'optional formal parameter must be nullable'; @@ -599,8 +582,7 @@ class OptionalFormalParameterOrigin extends EdgeOrigin { /// Edge origin resulting from an inheritance relationship between two method /// parameters. class ParameterInheritanceOrigin extends EdgeOrigin { - ParameterInheritanceOrigin(Source? source, AstNode node) - : super(source, node); + ParameterInheritanceOrigin(super.source, AstNode super.node); @override String get description => 'function parameter override'; @@ -621,8 +603,7 @@ class ParameterInheritanceOrigin extends EdgeOrigin { /// this class is used for the edge connecting the type of f's `i` parameter to /// `never`, due to the `checkNotNull` call proclaiming that `i` is not `null`. class QuiverCheckNotNullOrigin extends EdgeOrigin { - QuiverCheckNotNullOrigin(Source? source, SimpleIdentifier node) - : super(source, node); + QuiverCheckNotNullOrigin(super.source, SimpleIdentifier super.node); @override String get description => 'value checked to be non-null'; @@ -634,8 +615,7 @@ class QuiverCheckNotNullOrigin extends EdgeOrigin { /// Edge origin resulting from an inheritance relationship between two method /// return types. class ReturnTypeInheritanceOrigin extends EdgeOrigin { - ReturnTypeInheritanceOrigin(Source? source, AstNode node) - : super(source, node); + ReturnTypeInheritanceOrigin(super.source, AstNode super.node); @override String get description => 'function return type override'; @@ -648,7 +628,7 @@ class ReturnTypeInheritanceOrigin extends EdgeOrigin { /// directive. The type of such parameters is fixed by the language as /// non-nullable `StackTrace`. class StackTraceTypeOrigin extends EdgeOrigin { - StackTraceTypeOrigin(Source? source, AstNode? node) : super(source, node); + StackTraceTypeOrigin(super.source, super.node); @override String get description => 'stack trace variable is nullable'; @@ -663,8 +643,7 @@ class ThisOrSuperOrigin extends EdgeOrigin { /// expression in question is `super`. final bool isThis; - ThisOrSuperOrigin(Source? source, AstNode node, this.isThis) - : super(source, node); + ThisOrSuperOrigin(super.source, AstNode super.node, this.isThis); @override String get description => @@ -677,7 +656,7 @@ class ThisOrSuperOrigin extends EdgeOrigin { /// An edge origin used for edges that originated from the type of a `throw` or /// `rethrow`. class ThrowOrigin extends EdgeOrigin { - ThrowOrigin(Source? source, AstNode node) : super(source, node); + ThrowOrigin(super.source, AstNode super.node); @override String get description => @@ -694,7 +673,7 @@ class ThrowOrigin extends EdgeOrigin { /// unioned with references to the nodes referring to source code. The origin of /// those union edges will be [TypedefReferenceOrigin]. class TypedefReferenceOrigin extends EdgeOrigin { - TypedefReferenceOrigin(Source? source, NamedType node) : super(source, node); + TypedefReferenceOrigin(super.source, NamedType super.node); @override String get description => 'reference to typedef'; @@ -706,8 +685,7 @@ class TypedefReferenceOrigin extends EdgeOrigin { /// Edge origin resulting from the instantiation of a type parameter, which /// affects the nullability of that type parameter's bound. class TypeParameterInstantiationOrigin extends EdgeOrigin { - TypeParameterInstantiationOrigin(Source? source, TypeAnnotation node) - : super(source, node); + TypeParameterInstantiationOrigin(super.source, TypeAnnotation super.node); @override String get description => 'type parameter instantiation'; @@ -722,7 +700,7 @@ class TypeParameterInstantiationOrigin extends EdgeOrigin { /// Edge origin resulting from the read of a variable that has not been /// definitely assigned a value. class UninitializedReadOrigin extends EdgeOrigin { - UninitializedReadOrigin(Source? source, AstNode node) : super(source, node); + UninitializedReadOrigin(super.source, AstNode super.node); @override String get description => 'local variable might not be initialized'; diff --git a/pkg/nnbd_migration/lib/src/edit_plan.dart b/pkg/nnbd_migration/lib/src/edit_plan.dart index b3757c81324..3ebdfad2b9f 100644 --- a/pkg/nnbd_migration/lib/src/edit_plan.dart +++ b/pkg/nnbd_migration/lib/src/edit_plan.dart @@ -985,9 +985,8 @@ class _ExtractEditPlan extends _NestedEditPlan { /// even when [EditPlan.removeViaComments] is true. final bool _alwaysDelete; - _ExtractEditPlan(AstNode? sourceNode, NodeProducingEditPlan innerPlan, - this._planner, this._infoBefore, this._infoAfter, this._alwaysDelete) - : super(sourceNode, innerPlan); + _ExtractEditPlan(super.sourceNode, super.innerPlan, this._planner, + this._infoBefore, this._infoAfter, this._alwaysDelete); @override Map>? _getChanges(bool parens) { @@ -1027,7 +1026,7 @@ class _ExtractEditPlan extends _NestedEditPlan { abstract class _NestedEditPlan extends NodeProducingEditPlan { final NodeProducingEditPlan innerPlan; - _NestedEditPlan(AstNode? sourceNode, this.innerPlan) : super._(sourceNode); + _NestedEditPlan(super.sourceNode, this.innerPlan) : super._(); @override bool get endsInCascade => innerPlan.endsInCascade; @@ -1563,9 +1562,8 @@ class _PassThroughBuilderImpl implements PassThroughBuilder { /// [EditPlan] representing an AstNode that is not to be changed, but may have /// some changes applied to some of its descendants. class _PassThroughEditPlan extends _SimpleEditPlan { - _PassThroughEditPlan._(AstNode? node, Precedence precedence, - bool endsInCascade, Map>? innerChanges) - : super(node, precedence, endsInCascade, innerChanges); + _PassThroughEditPlan._( + super.node, super.precedence, super.endsInCascade, super.innerChanges); } /// [EditPlan] applying to a [ParenthesizedExpression]. Unlike the normal @@ -1582,8 +1580,7 @@ class _ProvisionalParenEditPlan extends _NestedEditPlan { /// structures it points to) may be incorporated into this edit plan and later /// modified. _ProvisionalParenEditPlan( - ParenthesizedExpression node, NodeProducingEditPlan innerPlan) - : super(node, innerPlan); + ParenthesizedExpression super.node, super.innerPlan); @override Map>? _getChanges(bool parens) { @@ -1652,8 +1649,8 @@ class _SimpleEditPlan extends NodeProducingEditPlan { bool _finalized = false; _SimpleEditPlan( - AstNode? node, this._precedence, this.endsInCascade, this._innerChanges) - : super._(node); + super.node, this._precedence, this.endsInCascade, this._innerChanges) + : super._(); @override Map>? _getChanges(bool parens) { diff --git a/pkg/nnbd_migration/lib/src/expression_checks.dart b/pkg/nnbd_migration/lib/src/expression_checks.dart index 4ffd65bcac6..a248ab7a48d 100644 --- a/pkg/nnbd_migration/lib/src/expression_checks.dart +++ b/pkg/nnbd_migration/lib/src/expression_checks.dart @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. import 'package:analyzer/dart/ast/ast.dart'; -import 'package:analyzer/src/generated/source.dart'; import 'package:nnbd_migration/fix_reason_target.dart'; import 'package:nnbd_migration/instrumentation.dart'; import 'package:nnbd_migration/src/edge_origin.dart'; @@ -36,9 +35,8 @@ class ExpressionChecksOrigin extends EdgeOrigin { /// package. final bool isSetupAssignment; - ExpressionChecksOrigin(Source? source, Expression? node, this.checks, - {this.isSetupAssignment = false}) - : super(source, node); + ExpressionChecksOrigin(super.source, Expression? super.node, this.checks, + {this.isSetupAssignment = false}); @override String get description => 'data flow'; diff --git a/pkg/nnbd_migration/lib/src/fix_aggregator.dart b/pkg/nnbd_migration/lib/src/fix_aggregator.dart index 781b3ff96ad..b6fbb1bc14f 100644 --- a/pkg/nnbd_migration/lib/src/fix_aggregator.dart +++ b/pkg/nnbd_migration/lib/src/fix_aggregator.dart @@ -251,8 +251,7 @@ class IntroduceThenChange extends ExpressionChange { /// The change that should be made to the value the future completes with. final ExpressionChange innerChange; - IntroduceThenChange(DartType resultType, this.innerChange) - : super(resultType); + IntroduceThenChange(super.resultType, this.innerChange); @override NullabilityFixDescription get description => @@ -1346,7 +1345,7 @@ class NodeChangeForVariableDeclarationList /// [ExpressionChange] describing the addition of a comment explaining that a /// literal `null` could not be migrated. class NoValidMigrationChange extends ExpressionChange { - NoValidMigrationChange(DartType resultType) : super(resultType); + NoValidMigrationChange(super.resultType); @override NullabilityFixDescription get description => @@ -1372,7 +1371,7 @@ class NullCheckChange extends ExpressionChange { /// The hint that is causing this `!` to be added, if any. final HintComment? hint; - NullCheckChange(DartType resultType, {this.hint}) : super(resultType); + NullCheckChange(super.resultType, {this.hint}); @override NullabilityFixDescription get description => diff --git a/pkg/nnbd_migration/lib/src/front_end/migration_info.dart b/pkg/nnbd_migration/lib/src/front_end/migration_info.dart index 0fec61fcf63..20ae04a7e74 100644 --- a/pkg/nnbd_migration/lib/src/front_end/migration_info.dart +++ b/pkg/nnbd_migration/lib/src/front_end/migration_info.dart @@ -128,8 +128,7 @@ class NavigationSource extends NavigationRegion { final NavigationTarget target; /// Initialize a newly created link. - NavigationSource(int offset, int? line, int length, this.target) - : super(offset, line, length); + NavigationSource(super.offset, super.line, super.length, this.target); } /// A location to which a user might want to navigate. diff --git a/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart b/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart index 60672048d43..f45e8813f6c 100644 --- a/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart +++ b/pkg/nnbd_migration/lib/src/front_end/resources/resources.g.dart @@ -7708,7 +7708,7 @@ bGpzLW1ldGEgewogIGNvbG9yOiAjNjI3OTc4Owp9Cg== '''; String? _migration_js; -// migration_dart md5 is '358ff21ba0b18687adae31d00e4667d8' +// migration_dart md5 is '44cdadc80b2f19b5b323eac5c801d5a6' String _migration_js_base64 = ''' KGZ1bmN0aW9uIGRhcnRQcm9ncmFtKCl7ZnVuY3Rpb24gY29weVByb3BlcnRpZXMoYSxiKXt2YXIgcz1P YmplY3Qua2V5cyhhKQpmb3IodmFyIHI9MDtyPHMubGVuZ3RoO3IrKyl7dmFyIHE9c1tyXQpiW3FdPWFb @@ -7818,7 +7818,7 @@ ZnVuY3Rpb24gSkIoYSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKU1U6ZnVuY3Rpb24gU1UoKXt9LApS ZTpmdW5jdGlvbiBSZSgpe30sCncyOmZ1bmN0aW9uIHcyKCl7fSwKd3Y6ZnVuY3Rpb24gd3YoYSl7dGhp cy5hPWF9LApRQzpmdW5jdGlvbiBRQygpe30sCmRjKCl7dGhyb3cgQS5iKEEuTDQoIkNhbm5vdCBtb2Rp ZnkgdW5tb2RpZmlhYmxlIE1hcCIpKX0sCk5RKGEpe3ZhciBzPXYubWFuZ2xlZEdsb2JhbE5hbWVzW2Fd -CmlmKHMhPW51bGwpcmV0dXJuIHMKcmV0dXJuIm1pbmlmaWVkOiIrYX0sCndWKGEsYil7dmFyIHMKaWYo +CmlmKHMhPW51bGwpcmV0dXJuIHMKcmV0dXJuIm1pbmlmaWVkOiIrYX0sCkdwKGEsYil7dmFyIHMKaWYo YiE9bnVsbCl7cz1iLngKaWYocyE9bnVsbClyZXR1cm4gc31yZXR1cm4gdC5hVS5iKGEpfSwKRWooYSl7 dmFyIHMKaWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhCmlmKHR5cGVvZiBhPT0ibnVtYmVyIil7 aWYoYSE9PTApcmV0dXJuIiIrYX1lbHNlIGlmKCEwPT09YSlyZXR1cm4idHJ1ZSIKZWxzZSBpZighMT09 @@ -7833,3794 +7833,3815 @@ YSwxNikKcmV0dXJuIG59aWYoYjwyfHxiPjM2KXRocm93IEEuYihBLlRFKGIsMiwzNiwicmFkaXgiLG4p KQppZihiPT09MTAmJnMhPW51bGwpcmV0dXJuIHBhcnNlSW50KGEsMTApCmlmKGI8MTB8fHM9PW51bGwp e3I9Yjw9MTA/NDcrYjo4NitiCnE9bVsxXQpmb3IocD1xLmxlbmd0aCxvPTA7bzxwOysrbylpZigoQi54 Qi5XKHEsbyl8MzIpPnIpcmV0dXJuIG59cmV0dXJuIHBhcnNlSW50KGEsYil9LApsaChhKXtyZXR1cm4g -QS5INShhKX0sCkg1KGEpe3ZhciBzLHIscSxwLG8KaWYoYSBpbnN0YW5jZW9mIEEuTWgpcmV0dXJuIEEu -ZG0oQS56SyhhKSxudWxsKQpzPUouaWEoYSkKaWYocz09PUIuT2t8fHM9PT1CLlVifHx0LmJJLmIoYSkp -e3I9Qi5PNChhKQpxPXIhPT0iT2JqZWN0IiYmciE9PSIiCmlmKHEpcmV0dXJuIHIKcD1hLmNvbnN0cnVj -dG9yCmlmKHR5cGVvZiBwPT0iZnVuY3Rpb24iKXtvPXAubmFtZQppZih0eXBlb2Ygbz09InN0cmluZyIp -cT1vIT09Ik9iamVjdCImJm8hPT0iIgplbHNlIHE9ITEKaWYocSlyZXR1cm4gb319cmV0dXJuIEEuZG0o -QS56SyhhKSxudWxsKX0sCk0wKCl7aWYoISFzZWxmLmxvY2F0aW9uKXJldHVybiBzZWxmLmxvY2F0aW9u -LmhyZWYKcmV0dXJuIG51bGx9LApmdyhhLGIsYyl7dmFyIHMscixxLHAKaWYoYzw9NTAwJiZiPT09MCYm -Yz09PWEubGVuZ3RoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsYSkKZm9yKHM9 -YixyPSIiO3M8YztzPXEpe3E9cys1MDAKcD1xPGM/cTpjCnIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBw -bHkobnVsbCxhLnN1YmFycmF5KHMscCkpfXJldHVybiByfSwKTHcoYSl7dmFyIHMKaWYoMDw9YSl7aWYo -YTw9NjU1MzUpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoYSkKaWYoYTw9MTExNDExMSl7cz1hLTY1 -NTM2CnJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKChCLmpuLndHKHMsMTApfDU1Mjk2KT4+PjAscyYx -MDIzfDU2MzIwKX19dGhyb3cgQS5iKEEuVEUoYSwwLDExMTQxMTEsbnVsbCxudWxsKSl9LApvMihhKXtp -ZihhLmRhdGU9PT12b2lkIDApYS5kYXRlPW5ldyBEYXRlKGEuYSkKcmV0dXJuIGEuZGF0ZX0sCnRKKGEp -e3ZhciBzPUEubzIoYSkuZ2V0RnVsbFllYXIoKSswCnJldHVybiBzfSwKTlMoYSl7dmFyIHM9QS5vMihh -KS5nZXRNb250aCgpKzEKcmV0dXJuIHN9LApqQShhKXt2YXIgcz1BLm8yKGEpLmdldERhdGUoKSswCnJl -dHVybiBzfSwKSVgoYSl7dmFyIHM9QS5vMihhKS5nZXRIb3VycygpKzAKcmV0dXJuIHN9LApjaChhKXt2 -YXIgcz1BLm8yKGEpLmdldE1pbnV0ZXMoKSswCnJldHVybiBzfSwKSmQoYSl7dmFyIHM9QS5vMihhKS5n -ZXRTZWNvbmRzKCkrMApyZXR1cm4gc30sCm8xKGEpe3ZhciBzPUEubzIoYSkuZ2V0TWlsbGlzZWNvbmRz -KCkrMApyZXR1cm4gc30sCnpvKGEsYixjKXt2YXIgcyxyLHE9e30KcS5hPTAKcz1bXQpyPVtdCnEuYT1i -Lmxlbmd0aApCLk5tLkZWKHMsYikKcS5iPSIiCmlmKGMhPW51bGwmJmMuYSE9PTApYy5LKDAsbmV3IEEu -Q2oocSxyLHMpKQpyZXR1cm4gSi5KeShhLG5ldyBBLkxJKEIuVGUsMCxzLHIsMCkpfSwKRWsoYSxiLGMp -e3ZhciBzLHIscT1jPT1udWxsfHxjLmE9PT0wCmlmKHEpe3M9Yi5sZW5ndGgKaWYocz09PTApe2lmKCEh -YS4kMClyZXR1cm4gYS4kMCgpfWVsc2UgaWYocz09PTEpe2lmKCEhYS4kMSlyZXR1cm4gYS4kMShiWzBd -KX1lbHNlIGlmKHM9PT0yKXtpZighIWEuJDIpcmV0dXJuIGEuJDIoYlswXSxiWzFdKX1lbHNlIGlmKHM9 -PT0zKXtpZighIWEuJDMpcmV0dXJuIGEuJDMoYlswXSxiWzFdLGJbMl0pfWVsc2UgaWYocz09PTQpe2lm -KCEhYS4kNClyZXR1cm4gYS4kNChiWzBdLGJbMV0sYlsyXSxiWzNdKX1lbHNlIGlmKHM9PT01KWlmKCEh -YS4kNSlyZXR1cm4gYS4kNShiWzBdLGJbMV0sYlsyXSxiWzNdLGJbNF0pCnI9YVsiIisiJCIrc10KaWYo -ciE9bnVsbClyZXR1cm4gci5hcHBseShhLGIpfXJldHVybiBBLlpUKGEsYixjKX0sClpUKGEsYixjKXt2 -YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmPWIubGVuZ3RoLGU9YS4kUgppZihmPGUpcmV0dXJu -IEEuem8oYSxiLGMpCnM9YS4kRApyPXM9PW51bGwKcT0hcj9zKCk6bnVsbApwPUouaWEoYSkKbz1wLiRD -CmlmKHR5cGVvZiBvPT0ic3RyaW5nIilvPXBbb10KaWYocil7aWYoYyE9bnVsbCYmYy5hIT09MClyZXR1 -cm4gQS56byhhLGIsYykKaWYoZj09PWUpcmV0dXJuIG8uYXBwbHkoYSxiKQpyZXR1cm4gQS56byhhLGIs -Yyl9aWYoQXJyYXkuaXNBcnJheShxKSl7aWYoYyE9bnVsbCYmYy5hIT09MClyZXR1cm4gQS56byhhLGIs -YykKbj1lK3EubGVuZ3RoCmlmKGY+bilyZXR1cm4gQS56byhhLGIsbnVsbCkKaWYoZjxuKXttPXEuc2xp -Y2UoZi1lKQpsPUEuWTEoYiwhMCx0LnopCkIuTm0uRlYobCxtKX1lbHNlIGw9YgpyZXR1cm4gby5hcHBs -eShhLGwpfWVsc2V7aWYoZj5lKXJldHVybiBBLnpvKGEsYixjKQpsPUEuWTEoYiwhMCx0LnopCms9T2Jq -ZWN0LmtleXMocSkKaWYoYz09bnVsbClmb3Iocj1rLmxlbmd0aCxqPTA7ajxrLmxlbmd0aDtrLmxlbmd0 -aD09PXJ8fCgwLEEubGspKGspLCsrail7aT1xW0EubihrW2pdKV0KaWYoQi5Odj09PWkpcmV0dXJuIEEu -em8oYSxsLGMpCkIuTm0uaShsLGkpfWVsc2V7Zm9yKHI9ay5sZW5ndGgsaD0wLGo9MDtqPGsubGVuZ3Ro -O2subGVuZ3RoPT09cnx8KDAsQS5saykoayksKytqKXtnPUEubihrW2pdKQppZihjLng0KGcpKXsrK2gK -Qi5ObS5pKGwsYy5xKDAsZykpfWVsc2V7aT1xW2ddCmlmKEIuTnY9PT1pKXJldHVybiBBLnpvKGEsbCxj -KQpCLk5tLmkobCxpKX19aWYoaCE9PWMuYSlyZXR1cm4gQS56byhhLGwsYyl9cmV0dXJuIG8uYXBwbHko -YSxsKX19LApwWShhKXt0aHJvdyBBLmIoQS50TChhKSl9LApPSChhLGIpe2lmKGE9PW51bGwpSi5IbShh -KQp0aHJvdyBBLmIoQS51KGEsYikpfSwKdShhLGIpe3ZhciBzLHI9ImluZGV4IgppZighQS5vayhiKSly -ZXR1cm4gbmV3IEEuQVQoITAsYixyLG51bGwpCnM9QS5JWihKLkhtKGEpKQppZihiPDB8fGI+PXMpcmV0 -dXJuIEEuQ2YoYixhLHIsbnVsbCxzKQpyZXR1cm4gQS5PNyhiLHIpfSwKYXUoYSxiLGMpe2lmKGE+Yyly -ZXR1cm4gQS5URShhLDAsYywic3RhcnQiLG51bGwpCmlmKGIhPW51bGwpaWYoYjxhfHxiPmMpcmV0dXJu -IEEuVEUoYixhLGMsImVuZCIsbnVsbCkKcmV0dXJuIG5ldyBBLkFUKCEwLGIsImVuZCIsbnVsbCl9LAp0 -TChhKXtyZXR1cm4gbmV3IEEuQVQoITAsYSxudWxsLG51bGwpfSwKYihhKXt2YXIgcyxyCmlmKGE9PW51 -bGwpYT1uZXcgQS5GKCkKcz1uZXcgRXJyb3IoKQpzLmRhcnRFeGNlcHRpb249YQpyPUEuaAppZigiZGVm -aW5lUHJvcGVydHkiIGluIE9iamVjdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHMsIm1lc3NhZ2UiLHtn -ZXQ6cn0pCnMubmFtZT0iIn1lbHNlIHMudG9TdHJpbmc9cgpyZXR1cm4gc30sCmgoKXtyZXR1cm4gSi5Z -Uyh0aGlzLmRhcnRFeGNlcHRpb24pfSwKdihhKXt0aHJvdyBBLmIoYSl9LApsayhhKXt0aHJvdyBBLmIo -QS5hNChhKSl9LApjTShhKXt2YXIgcyxyLHEscCxvLG4KYT1BLmVBKGEucmVwbGFjZShTdHJpbmcoe30p -LCIkcmVjZWl2ZXIkIikpCnM9YS5tYXRjaCgvXFxcJFthLXpBLVpdK1xcXCQvZykKaWYocz09bnVsbClz -PUEuUUkoW10sdC5zKQpyPXMuaW5kZXhPZigiXFwkYXJndW1lbnRzXFwkIikKcT1zLmluZGV4T2YoIlxc -JGFyZ3VtZW50c0V4cHJcXCQiKQpwPXMuaW5kZXhPZigiXFwkZXhwclxcJCIpCm89cy5pbmRleE9mKCJc -XCRtZXRob2RcXCQiKQpuPXMuaW5kZXhPZigiXFwkcmVjZWl2ZXJcXCQiKQpyZXR1cm4gbmV3IEEuZjko -YS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFxcXCRhcmd1bWVudHNcXFxcXFwkIiwiZyIpLCIoKD86eHxb -XnhdKSopIikucmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkYXJndW1lbnRzRXhwclxcXFxcXCQiLCJn -IiksIigoPzp4fFteeF0pKikiKS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFxcXCRleHByXFxcXFxcJCIs -ImciKSwiKCg/Onh8W154XSkqKSIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxcXFxcJG1ldGhvZFxcXFxc -XCQiLCJnIiksIigoPzp4fFteeF0pKikiKS5yZXBsYWNlKG5ldyBSZWdFeHAoIlxcXFxcXCRyZWNlaXZl -clxcXFxcXCQiLCJnIiksIigoPzp4fFteeF0pKikiKSxyLHEscCxvLG4pfSwKUzcoYSl7cmV0dXJuIGZ1 -bmN0aW9uKCRleHByJCl7dmFyICRhcmd1bWVudHNFeHByJD0iJGFyZ3VtZW50cyQiCnRyeXskZXhwciQu -JG1ldGhvZCQoJGFyZ3VtZW50c0V4cHIkKX1jYXRjaChzKXtyZXR1cm4gcy5tZXNzYWdlfX0oYSl9LApN -aihhKXtyZXR1cm4gZnVuY3Rpb24oJGV4cHIkKXt0cnl7JGV4cHIkLiRtZXRob2QkfWNhdGNoKHMpe3Jl -dHVybiBzLm1lc3NhZ2V9fShhKX0sClQzKGEsYil7dmFyIHM9Yj09bnVsbCxyPXM/bnVsbDpiLm1ldGhv -ZApyZXR1cm4gbmV3IEEuYXooYSxyLHM/bnVsbDpiLnJlY2VpdmVyKX0sClJ1KGEpe3ZhciBzCmlmKGE9 -PW51bGwpcmV0dXJuIG5ldyBBLnRlKGEpCmlmKGEgaW5zdGFuY2VvZiBBLmJxKXtzPWEuYQpyZXR1cm4g -QS50VyhhLHM9PW51bGw/dC5LLmEocyk6cyl9aWYodHlwZW9mIGEhPT0ib2JqZWN0IilyZXR1cm4gYQpp -ZigiZGFydEV4Y2VwdGlvbiIgaW4gYSlyZXR1cm4gQS50VyhhLGEuZGFydEV4Y2VwdGlvbikKcmV0dXJu -IEEudGwoYSl9LAp0VyhhLGIpe2lmKHQudS5iKGIpKWlmKGIuJHRocm93bkpzRXJyb3I9PW51bGwpYi4k -dGhyb3duSnNFcnJvcj1hCnJldHVybiBifSwKdGwoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxo -LGcsZixlPW51bGwKaWYoISgibWVzc2FnZSIgaW4gYSkpcmV0dXJuIGEKcz1hLm1lc3NhZ2UKaWYoIm51 -bWJlciIgaW4gYSYmdHlwZW9mIGEubnVtYmVyPT0ibnVtYmVyIil7cj1hLm51bWJlcgpxPXImNjU1MzUK -aWYoKEIuam4ud0cociwxNikmODE5MSk9PT0xMClzd2l0Y2gocSl7Y2FzZSA0Mzg6cmV0dXJuIEEudFco -YSxBLlQzKEEuRWoocykrIiAoRXJyb3IgIitxKyIpIixlKSkKY2FzZSA0NDU6Y2FzZSA1MDA3OnA9QS5F -aihzKQpyZXR1cm4gQS50VyhhLG5ldyBBLlcwKHArIiAoRXJyb3IgIitxKyIpIixlKSl9fWlmKGEgaW5z -dGFuY2VvZiBUeXBlRXJyb3Ipe289JC5TbigpCm49JC5scSgpCm09JC5OOSgpCmw9JC5pSSgpCms9JC5V -TigpCmo9JC5aaCgpCmk9JC5yTigpCiQuYzMoKQpoPSQuSEsoKQpnPSQucjEoKQpmPW8ucVMocykKaWYo -ZiE9bnVsbClyZXR1cm4gQS50VyhhLEEuVDMoQS5uKHMpLGYpKQplbHNle2Y9bi5xUyhzKQppZihmIT1u -dWxsKXtmLm1ldGhvZD0iY2FsbCIKcmV0dXJuIEEudFcoYSxBLlQzKEEubihzKSxmKSl9ZWxzZXtmPW0u -cVMocykKaWYoZj09bnVsbCl7Zj1sLnFTKHMpCmlmKGY9PW51bGwpe2Y9ay5xUyhzKQppZihmPT1udWxs -KXtmPWoucVMocykKaWYoZj09bnVsbCl7Zj1pLnFTKHMpCmlmKGY9PW51bGwpe2Y9bC5xUyhzKQppZihm -PT1udWxsKXtmPWgucVMocykKaWYoZj09bnVsbCl7Zj1nLnFTKHMpCnA9ZiE9bnVsbH1lbHNlIHA9ITB9 -ZWxzZSBwPSEwfWVsc2UgcD0hMH1lbHNlIHA9ITB9ZWxzZSBwPSEwfWVsc2UgcD0hMH1lbHNlIHA9ITAK -aWYocCl7QS5uKHMpCnJldHVybiBBLnRXKGEsbmV3IEEuVzAocyxmPT1udWxsP2U6Zi5tZXRob2QpKX19 -fXJldHVybiBBLnRXKGEsbmV3IEEudlYodHlwZW9mIHM9PSJzdHJpbmciP3M6IiIpKX1pZihhIGluc3Rh -bmNlb2YgUmFuZ2VFcnJvcil7aWYodHlwZW9mIHM9PSJzdHJpbmciJiZzLmluZGV4T2YoImNhbGwgc3Rh -Y2siKSE9PS0xKXJldHVybiBuZXcgQS5LWSgpCnM9ZnVuY3Rpb24oYil7dHJ5e3JldHVybiBTdHJpbmco -Yil9Y2F0Y2goZCl7fXJldHVybiBudWxsfShhKQpyZXR1cm4gQS50VyhhLG5ldyBBLkFUKCExLGUsZSx0 -eXBlb2Ygcz09InN0cmluZyI/cy5yZXBsYWNlKC9eUmFuZ2VFcnJvcjpccyovLCIiKTpzKSl9aWYodHlw -ZW9mIEludGVybmFsRXJyb3I9PSJmdW5jdGlvbiImJmEgaW5zdGFuY2VvZiBJbnRlcm5hbEVycm9yKWlm -KHR5cGVvZiBzPT0ic3RyaW5nIiYmcz09PSJ0b28gbXVjaCByZWN1cnNpb24iKXJldHVybiBuZXcgQS5L -WSgpCnJldHVybiBhfSwKdHMoYSl7dmFyIHMKaWYoYSBpbnN0YW5jZW9mIEEuYnEpcmV0dXJuIGEuYgpp -ZihhPT1udWxsKXJldHVybiBuZXcgQS5YTyhhKQpzPWEuJGNhY2hlZFRyYWNlCmlmKHMhPW51bGwpcmV0 -dXJuIHMKcmV0dXJuIGEuJGNhY2hlZFRyYWNlPW5ldyBBLlhPKGEpfSwKQ1UoYSl7aWYoYT09bnVsbHx8 -dHlwZW9mIGEhPSJvYmplY3QiKXJldHVybiBKLlUzKGEpCmVsc2UgcmV0dXJuIEEuZVEoYSl9LApCNyhh -LGIpe3ZhciBzLHIscSxwPWEubGVuZ3RoCmZvcihzPTA7czxwO3M9cSl7cj1zKzEKcT1yKzEKYi5ZNSgw -LGFbc10sYVtyXSl9cmV0dXJuIGJ9LApmdChhLGIsYyxkLGUsZil7dC5ZLmEoYSkKc3dpdGNoKEEuSVoo -Yikpe2Nhc2UgMDpyZXR1cm4gYS4kMCgpCmNhc2UgMTpyZXR1cm4gYS4kMShjKQpjYXNlIDI6cmV0dXJu -IGEuJDIoYyxkKQpjYXNlIDM6cmV0dXJuIGEuJDMoYyxkLGUpCmNhc2UgNDpyZXR1cm4gYS4kNChjLGQs -ZSxmKX10aHJvdyBBLmIobmV3IEEuQ0QoIlVuc3VwcG9ydGVkIG51bWJlciBvZiBhcmd1bWVudHMgZm9y -IHdyYXBwZWQgY2xvc3VyZSIpKX0sCnRSKGEsYil7dmFyIHMKaWYoYT09bnVsbClyZXR1cm4gbnVsbApz -PWEuJGlkZW50aXR5CmlmKCEhcylyZXR1cm4gcwpzPWZ1bmN0aW9uKGMsZCxlKXtyZXR1cm4gZnVuY3Rp -b24oZixnLGgsaSl7cmV0dXJuIGUoYyxkLGYsZyxoLGkpfX0oYSxiLEEuZnQpCmEuJGlkZW50aXR5PXMK -cmV0dXJuIHN9LAppQShhMil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaT1hMi5jbyxoPWEyLmlTLGc9 -YTIuaUksZj1hMi5uREEsZT1hMi5hSSxkPWEyLmZzLGM9YTIuY3MsYj1kWzBdLGE9Y1swXSxhMD1pW2Jd -LGExPWEyLmZUCmExLnRvU3RyaW5nCnM9aD9PYmplY3QuY3JlYXRlKG5ldyBBLnp4KCkuY29uc3RydWN0 -b3IucHJvdG90eXBlKTpPYmplY3QuY3JlYXRlKG5ldyBBLnJUKG51bGwsbnVsbCkuY29uc3RydWN0b3Iu -cHJvdG90eXBlKQpzLiRpbml0aWFsaXplPXMuY29uc3RydWN0b3IKaWYoaClyPWZ1bmN0aW9uIHN0YXRp -Y190ZWFyX29mZigpe3RoaXMuJGluaXRpYWxpemUoKX0KZWxzZSByPWZ1bmN0aW9uIHRlYXJfb2ZmKGEz -LGE0KXt0aGlzLiRpbml0aWFsaXplKGEzLGE0KX0Kcy5jb25zdHJ1Y3Rvcj1yCnIucHJvdG90eXBlPXMK -cy4kX25hbWU9YgpzLiRfdGFyZ2V0PWEwCnE9IWgKaWYocSlwPUEuYngoYixhMCxnLGYpCmVsc2V7cy4k -c3RhdGljX25hbWU9YgpwPWEwfXMuJFM9QS5pbShhMSxoLGcpCnNbYV09cApmb3Iobz1wLG49MTtuPGQu -bGVuZ3RoOysrbil7bT1kW25dCmlmKHR5cGVvZiBtPT0ic3RyaW5nIil7bD1pW21dCms9bQptPWx9ZWxz -ZSBrPSIiCmo9Y1tuXQppZihqIT1udWxsKXtpZihxKW09QS5ieChrLG0sZyxmKQpzW2pdPW19aWYobj09 -PWUpbz1tfXMuJEM9bwpzLiRSPWEyLnJDCnMuJEQ9YTIuZFYKcmV0dXJuIHJ9LAppbShhLGIsYyl7aWYo -dHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKHR5cGVvZiBhPT0ic3RyaW5nIil7aWYoYil0aHJv -dyBBLmIoIkNhbm5vdCBjb21wdXRlIHNpZ25hdHVyZSBmb3Igc3RhdGljIHRlYXJvZmYuIikKcmV0dXJu -IGZ1bmN0aW9uKGQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxkKX19KGEsQS5Ubil9 -dGhyb3cgQS5iKCJFcnJvciBpbiBmdW5jdGlvblR5cGUgb2YgdGVhcm9mZiIpfSwKdnEoYSxiLGMsZCl7 -dmFyIHM9QS55Uwpzd2l0Y2goYj8tMTphKXtjYXNlIDA6cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJu -IGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcylbZV0oKX19KGMscykKY2FzZSAxOnJldHVybiBmdW5jdGlv -bihlLGYpe3JldHVybiBmdW5jdGlvbihnKXtyZXR1cm4gZih0aGlzKVtlXShnKX19KGMscykKY2FzZSAy -OnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbihnLGgpe3JldHVybiBmKHRoaXMpW2Vd -KGcsaCl9fShjLHMpCmNhc2UgMzpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oZyxo -LGkpe3JldHVybiBmKHRoaXMpW2VdKGcsaCxpKX19KGMscykKY2FzZSA0OnJldHVybiBmdW5jdGlvbihl -LGYpe3JldHVybiBmdW5jdGlvbihnLGgsaSxqKXtyZXR1cm4gZih0aGlzKVtlXShnLGgsaSxqKX19KGMs -cykKY2FzZSA1OnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbihnLGgsaSxqLGspe3Jl -dHVybiBmKHRoaXMpW2VdKGcsaCxpLGosayl9fShjLHMpCmRlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKGUs -Zil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkoZih0aGlzKSxhcmd1bWVudHMpfX0oZCxz -KX19LApieChhLGIsYyxkKXt2YXIgcyxyCmlmKGMpcmV0dXJuIEEuSGYoYSxiLGQpCnM9Yi5sZW5ndGgK -cj1BLnZxKHMsZCxhLGIpCnJldHVybiByfSwKWjQoYSxiLGMsZCl7dmFyIHM9QS55UyxyPUEuQU8Kc3dp -dGNoKGI/LTE6YSl7Y2FzZSAwOnRocm93IEEuYihuZXcgQS5FcSgiSW50ZXJjZXB0ZWQgZnVuY3Rpb24g -d2l0aCBubyBhcmd1bWVudHMuIikpCmNhc2UgMTpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBm -dW5jdGlvbigpe3JldHVybiBmKHRoaXMpW2VdKGcodGhpcykpfX0oYyxyLHMpCmNhc2UgMjpyZXR1cm4g -ZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMp -LGgpfX0oYyxyLHMpCmNhc2UgMzpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbiho -LGkpe3JldHVybiBmKHRoaXMpW2VdKGcodGhpcyksaCxpKX19KGMscixzKQpjYXNlIDQ6cmV0dXJuIGZ1 -bmN0aW9uKGUsZixnKXtyZXR1cm4gZnVuY3Rpb24oaCxpLGope3JldHVybiBmKHRoaXMpW2VdKGcodGhp -cyksaCxpLGopfX0oYyxyLHMpCmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5j -dGlvbihoLGksaixrKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMpLGgsaSxqLGspfX0oYyxyLHMpCmNh -c2UgNjpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbihoLGksaixrLGwpe3JldHVy -biBmKHRoaXMpW2VdKGcodGhpcyksaCxpLGosayxsKX19KGMscixzKQpkZWZhdWx0OnJldHVybiBmdW5j -dGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHE9W2codGhpcyldCkFycmF5LnByb3RvdHlw -ZS5wdXNoLmFwcGx5KHEsYXJndW1lbnRzKQpyZXR1cm4gZS5hcHBseShmKHRoaXMpLHEpfX0oZCxyLHMp -fX0sCkhmKGEsYixjKXt2YXIgcyxyCmlmKCQuQWw9PW51bGwpJC5BbD1BLm05KCJpbnRlcmNlcHRvciIp -CmlmKCQuaTA9PW51bGwpJC5pMD1BLm05KCJyZWNlaXZlciIpCnM9Yi5sZW5ndGgKcj1BLlo0KHMsYyxh -LGIpCnJldHVybiByfSwKVTIoYSl7cmV0dXJuIEEuaUEoYSl9LApUbihhLGIpe3JldHVybiBBLmNFKHYu -dHlwZVVuaXZlcnNlLEEueksoYS5hKSxiKX0sCnlTKGEpe3JldHVybiBhLmF9LApBTyhhKXtyZXR1cm4g -YS5ifSwKbTkoYSl7dmFyIHMscixxLHA9bmV3IEEuclQoInJlY2VpdmVyIiwiaW50ZXJjZXB0b3IiKSxv -PUouRXAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocCksdC5YKQpmb3Iocz1vLmxlbmd0aCxyPTA7 -cjxzOysrcil7cT1vW3JdCmlmKHBbcV09PT1hKXJldHVybiBxfXRocm93IEEuYihBLnhZKCJGaWVsZCBu -YW1lICIrYSsiIG5vdCBmb3VuZC4iLG51bGwpKX0sCm9UKGEpe2lmKGE9PW51bGwpQS5mTygiYm9vbGVh -biBleHByZXNzaW9uIG11c3Qgbm90IGJlIG51bGwiKQpyZXR1cm4gYX0sCmZPKGEpe3Rocm93IEEuYihu -ZXcgQS5rWShhKSl9LAphZyhhKXt0aHJvdyBBLmIobmV3IEEucChhKSl9LApZZyhhKXtyZXR1cm4gdi5n -ZXRJc29sYXRlVGFnKGEpfSwKaXcoYSxiLGMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse3ZhbHVl -OmMsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSl9LAp3Myhh -KXt2YXIgcyxyLHEscCxvLG49QS5uKCQuTkYuJDEoYSkpLG09JC5ud1tuXQppZihtIT1udWxsKXtPYmpl -Y3QuZGVmaW5lUHJvcGVydHkoYSx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTptLGVudW1lcmFi -bGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnJldHVybiBtLml9cz0kLnZ2 -W25dCmlmKHMhPW51bGwpcmV0dXJuIHMKcj12LmludGVyY2VwdG9yc0J5VGFnW25dCmlmKHI9PW51bGwp -e3E9QS5rKCQuVFguJDIoYSxuKSkKaWYocSE9bnVsbCl7bT0kLm53W3FdCmlmKG0hPW51bGwpe09iamVj -dC5kZWZpbmVQcm9wZXJ0eShhLHYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOm0sZW51bWVyYWJs -ZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSkKcmV0dXJuIG0uaX1zPSQudnZb -cV0KaWYocyE9bnVsbClyZXR1cm4gcwpyPXYuaW50ZXJjZXB0b3JzQnlUYWdbcV0Kbj1xfX1pZihyPT1u -dWxsKXJldHVybiBudWxsCnM9ci5wcm90b3R5cGUKcD1uWzBdCmlmKHA9PT0iISIpe209QS5WYShzKQok -Lm53W25dPW0KT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdi5kaXNwYXRjaFByb3BlcnR5TmFtZSx7dmFs -dWU6bSxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KQpyZXR1 -cm4gbS5pfWlmKHA9PT0ifiIpeyQudnZbbl09cwpyZXR1cm4gc31pZihwPT09Ii0iKXtvPUEuVmEocykK -T2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSx2LmRpc3BhdGNoUHJv -cGVydHlOYW1lLHt2YWx1ZTpvLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFi -bGU6dHJ1ZX0pCnJldHVybiBvLml9aWYocD09PSIrIilyZXR1cm4gQS5MYyhhLHMpCmlmKHA9PT0iKiIp -dGhyb3cgQS5iKEEuU1kobikpCmlmKHYubGVhZlRhZ3Nbbl09PT10cnVlKXtvPUEuVmEocykKT2JqZWN0 -LmRlZmluZVByb3BlcnR5KE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSx2LmRpc3BhdGNoUHJvcGVydHlO -YW1lLHt2YWx1ZTpvLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1 -ZX0pCnJldHVybiBvLml9ZWxzZSByZXR1cm4gQS5MYyhhLHMpfSwKTGMoYSxiKXt2YXIgcz1PYmplY3Qu -Z2V0UHJvdG90eXBlT2YoYSkKT2JqZWN0LmRlZmluZVByb3BlcnR5KHMsdi5kaXNwYXRjaFByb3BlcnR5 -TmFtZSx7dmFsdWU6Si5RdShiLHMsbnVsbCxudWxsKSxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRy -dWUsY29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4gYn0sClZhKGEpe3JldHVybiBKLlF1KGEsITEsbnVs -bCwhIWEuJGlYail9LApWRihhLGIsYyl7dmFyIHM9Yi5wcm90b3R5cGUKaWYodi5sZWFmVGFnc1thXT09 -PXRydWUpcmV0dXJuIEEuVmEocykKZWxzZSByZXR1cm4gSi5RdShzLGMsbnVsbCxudWxsKX0sClhEKCl7 -aWYoITA9PT0kLkJ2KXJldHVybgokLkJ2PSEwCkEuWjEoKX0sCloxKCl7dmFyIHMscixxLHAsbyxuLG0s -bAokLm53PU9iamVjdC5jcmVhdGUobnVsbCkKJC52dj1PYmplY3QuY3JlYXRlKG51bGwpCkEua08oKQpz -PXYuaW50ZXJjZXB0b3JzQnlUYWcKcj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhzKQppZih0eXBl -b2Ygd2luZG93IT0idW5kZWZpbmVkIil7d2luZG93CnE9ZnVuY3Rpb24oKXt9CmZvcihwPTA7cDxyLmxl -bmd0aDsrK3Ape289cltwXQpuPSQueDcuJDEobykKaWYobiE9bnVsbCl7bT1BLlZGKG8sc1tvXSxuKQpp -ZihtIT1udWxsKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobix2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2 -YWx1ZTptLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnEu -cHJvdG90eXBlPW59fX19Zm9yKHA9MDtwPHIubGVuZ3RoOysrcCl7bz1yW3BdCmlmKC9eW0EtWmEtel9d -Ly50ZXN0KG8pKXtsPXNbb10Kc1siISIrb109bApzWyJ+IitvXT1sCnNbIi0iK29dPWwKc1siKyIrb109 -bApzWyIqIitvXT1sfX19LAprTygpe3ZhciBzLHIscSxwLG8sbixtPUIuWXEoKQptPUEudWQoQi5LVSxB -LnVkKEIuZlEsQS51ZChCLmk3LEEudWQoQi5pNyxBLnVkKEIueGksQS51ZChCLmRrLEEudWQoQi53YihC -Lk80KSxtKSkpKSkpKQppZih0eXBlb2YgZGFydE5hdGl2ZURpc3BhdGNoSG9va3NUcmFuc2Zvcm1lciE9 -InVuZGVmaW5lZCIpe3M9ZGFydE5hdGl2ZURpc3BhdGNoSG9va3NUcmFuc2Zvcm1lcgppZih0eXBlb2Yg -cz09ImZ1bmN0aW9uIilzPVtzXQppZihzLmNvbnN0cnVjdG9yPT1BcnJheSlmb3Iocj0wO3I8cy5sZW5n -dGg7KytyKXtxPXNbcl0KaWYodHlwZW9mIHE9PSJmdW5jdGlvbiIpbT1xKG0pfHxtfX1wPW0uZ2V0VGFn -Cm89bS5nZXRVbmtub3duVGFnCm49bS5wcm90b3R5cGVGb3JUYWcKJC5ORj1uZXcgQS5kQyhwKQokLlRY -PW5ldyBBLndOKG8pCiQueDc9bmV3IEEuVlgobil9LAp1ZChhLGIpe3JldHVybiBhKGIpfHxifSwKdjQo -YSxiLGMsZCxlLGYpe3ZhciBzPWI/Im0iOiIiLHI9Yz8iIjoiaSIscT1kPyJ1IjoiIixwPWU/InMiOiIi -LG89Zj8iZyI6IiIsbj1mdW5jdGlvbihnLGgpe3RyeXtyZXR1cm4gbmV3IFJlZ0V4cChnLGgpfWNhdGNo -KG0pe3JldHVybiBtfX0oYSxzK3IrcStwK28pCmlmKG4gaW5zdGFuY2VvZiBSZWdFeHApcmV0dXJuIG4K -dGhyb3cgQS5iKEEucnIoIklsbGVnYWwgUmVnRXhwIHBhdHRlcm4gKCIrU3RyaW5nKG4pKyIpIixhLG51 -bGwpKX0sClNRKGEsYixjKXt2YXIgcwppZih0eXBlb2YgYj09InN0cmluZyIpcmV0dXJuIGEuaW5kZXhP -ZihiLGMpPj0wCmVsc2UgaWYoYiBpbnN0YW5jZW9mIEEuVlIpe3M9Qi54Qi55bihhLGMpCnJldHVybiBi -LmIudGVzdChzKX1lbHNle3M9Si5GTChiLEIueEIueW4oYSxjKSkKcmV0dXJuIXMuZ2wwKHMpfX0sCkE0 -KGEpe2lmKGEuaW5kZXhPZigiJCIsMCk+PTApcmV0dXJuIGEucmVwbGFjZSgvXCQvZywiJCQkJCIpCnJl -dHVybiBhfSwKZUEoYSl7aWYoL1tbXF17fSgpKis/LlxcXiR8XS8udGVzdChhKSlyZXR1cm4gYS5yZXBs -YWNlKC9bW1xde30oKSorPy5cXF4kfF0vZywiXFwkJiIpCnJldHVybiBhfSwKeXMoYSxiLGMpe3ZhciBz -PUEubk0oYSxiLGMpCnJldHVybiBzfSwKbk0oYSxiLGMpe3ZhciBzLHIscSxwCmlmKGI9PT0iIil7aWYo -YT09PSIiKXJldHVybiBjCnM9YS5sZW5ndGgKcj0iIitjCmZvcihxPTA7cTxzOysrcSlyPXIrYVtxXStj -CnJldHVybiByLmNoYXJDb2RlQXQoMCk9PTA/cjpyfXA9YS5pbmRleE9mKGIsMCkKaWYocDwwKXJldHVy -biBhCmlmKGEubGVuZ3RoPDUwMHx8Yy5pbmRleE9mKCIkIiwwKT49MClyZXR1cm4gYS5zcGxpdChiKS5q -b2luKGMpCnJldHVybiBhLnJlcGxhY2UobmV3IFJlZ0V4cChBLmVBKGIpLCJnIiksQS5BNChjKSl9LApQ -RDpmdW5jdGlvbiBQRChhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApXVTpmdW5jdGlvbiBXVSgpe30s -CkxQOmZ1bmN0aW9uIExQKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy4kdGk9 -ZH0sClhSOmZ1bmN0aW9uIFhSKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCkxJOmZ1bmN0aW9uIExJ -KGEsYixjLGQsZSl7dmFyIF89dGhpcwpfLmE9YQpfLmM9YgpfLmQ9YwpfLmU9ZApfLmY9ZX0sCkNqOmZ1 -bmN0aW9uIENqKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCmY5OmZ1bmN0aW9uIGY5 -KGEsYixjLGQsZSxmKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1m -fSwKVzA6ZnVuY3Rpb24gVzAoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmF6OmZ1bmN0aW9uIGF6KGEs -YixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCnZWOmZ1bmN0aW9uIHZWKGEpe3RoaXMuYT1h -fSwKdGU6ZnVuY3Rpb24gdGUoYSl7dGhpcy5hPWF9LApicTpmdW5jdGlvbiBicShhLGIpe3RoaXMuYT1h -CnRoaXMuYj1ifSwKWE86ZnVuY3Rpb24gWE8oYSl7dGhpcy5hPWEKdGhpcy5iPW51bGx9LApUcDpmdW5j -dGlvbiBUcCgpe30sCkF5OmZ1bmN0aW9uIEF5KCl7fSwKRTE6ZnVuY3Rpb24gRTEoKXt9LApsYzpmdW5j -dGlvbiBsYygpe30sCnp4OmZ1bmN0aW9uIHp4KCl7fSwKclQ6ZnVuY3Rpb24gclQoYSxiKXt0aGlzLmE9 -YQp0aGlzLmI9Yn0sCkVxOmZ1bmN0aW9uIEVxKGEpe3RoaXMuYT1hfSwKa1k6ZnVuY3Rpb24ga1koYSl7 -dGhpcy5hPWF9LAprcjpmdW5jdGlvbiBrcigpe30sCk41OmZ1bmN0aW9uIE41KGEpe3ZhciBfPXRoaXMK -Xy5hPTAKXy5mPV8uZT1fLmQ9Xy5jPV8uYj1udWxsCl8ucj0wCl8uJHRpPWF9LAp2aDpmdW5jdGlvbiB2 -aChhLGIpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5kPV8uYz1udWxsfSwKaTU6ZnVuY3Rpb24gaTUo -YSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKTjY6ZnVuY3Rpb24gTjYoYSxiLGMpe3ZhciBfPXRoaXMK -Xy5hPWEKXy5iPWIKXy5kPV8uYz1udWxsCl8uJHRpPWN9LApkQzpmdW5jdGlvbiBkQyhhKXt0aGlzLmE9 -YX0sCndOOmZ1bmN0aW9uIHdOKGEpe3RoaXMuYT1hfSwKVlg6ZnVuY3Rpb24gVlgoYSl7dGhpcy5hPWF9 -LApWUjpmdW5jdGlvbiBWUihhLGIpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5kPV8uYz1udWxsfSwK -RUs6ZnVuY3Rpb24gRUsoYSl7dGhpcy5iPWF9LApLVzpmdW5jdGlvbiBLVyhhLGIsYyl7dGhpcy5hPWEK -dGhpcy5iPWIKdGhpcy5jPWN9LApQYjpmdW5jdGlvbiBQYihhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpf -LmI9YgpfLmM9YwpfLmQ9bnVsbH0sCnRROmZ1bmN0aW9uIHRRKGEsYil7dGhpcy5hPWEKdGhpcy5jPWJ9 -LAp1bjpmdW5jdGlvbiB1bihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApTZDpmdW5j -dGlvbiBTZChhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9bnVsbH0sClhGKGEp -e3JldHVybiBhfSwKb2QoYSxiLGMpe2lmKGE+Pj4wIT09YXx8YT49Yyl0aHJvdyBBLmIoQS51KGIsYSkp -fSwKck0oYSxiLGMpe3ZhciBzCmlmKCEoYT4+PjAhPT1hKSlzPWI+Pj4wIT09Ynx8YT5ifHxiPmMKZWxz -ZSBzPSEwCmlmKHMpdGhyb3cgQS5iKEEuYXUoYSxiLGMpKQpyZXR1cm4gYn0sCkVUOmZ1bmN0aW9uIEVU -KCl7fSwKTFo6ZnVuY3Rpb24gTFooKXt9LApEZzpmdW5jdGlvbiBEZygpe30sClBnOmZ1bmN0aW9uIFBn -KCl7fSwKeGo6ZnVuY3Rpb24geGooKXt9LApkRTpmdW5jdGlvbiBkRSgpe30sClpBOmZ1bmN0aW9uIFpB -KCl7fSwKZFQ6ZnVuY3Rpb24gZFQoKXt9LApQcTpmdW5jdGlvbiBQcSgpe30sCmVFOmZ1bmN0aW9uIGVF -KCl7fSwKVjY6ZnVuY3Rpb24gVjYoKXt9LApSRzpmdW5jdGlvbiBSRygpe30sClZQOmZ1bmN0aW9uIFZQ -KCl7fSwKV0I6ZnVuY3Rpb24gV0IoKXt9LApaRzpmdW5jdGlvbiBaRygpe30sCmN6KGEsYil7dmFyIHM9 -Yi5jCnJldHVybiBzPT1udWxsP2IuYz1BLkIoYSxiLnksITApOnN9LAp4WihhLGIpe3ZhciBzPWIuYwpy -ZXR1cm4gcz09bnVsbD9iLmM9QS5KKGEsImI4IixbYi55XSk6c30sClExKGEpe3ZhciBzPWEueAppZihz -PT09Nnx8cz09PTd8fHM9PT04KXJldHVybiBBLlExKGEueSkKcmV0dXJuIHM9PT0xMXx8cz09PTEyfSwK -bUQoYSl7cmV0dXJuIGEuYXR9LApOMChhKXtyZXR1cm4gQS5FKHYudHlwZVVuaXZlcnNlLGEsITEpfSwK -UEwoYSxiLGEwLGExKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjPWIueApzd2l0 -Y2goYyl7Y2FzZSA1OmNhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpyZXR1cm4gYgpjYXNlIDY6cz1i -LnkKcj1BLlBMKGEscyxhMCxhMSkKaWYocj09PXMpcmV0dXJuIGIKcmV0dXJuIEEuQyhhLHIsITApCmNh -c2UgNzpzPWIueQpyPUEuUEwoYSxzLGEwLGExKQppZihyPT09cylyZXR1cm4gYgpyZXR1cm4gQS5CKGEs -ciwhMCkKY2FzZSA4OnM9Yi55CnI9QS5QTChhLHMsYTAsYTEpCmlmKHI9PT1zKXJldHVybiBiCnJldHVy -biBBLmYoYSxyLCEwKQpjYXNlIDk6cT1iLnoKcD1BLmJaKGEscSxhMCxhMSkKaWYocD09PXEpcmV0dXJu -IGIKcmV0dXJuIEEuSihhLGIueSxwKQpjYXNlIDEwOm89Yi55Cm49QS5QTChhLG8sYTAsYTEpCm09Yi56 -Cmw9QS5iWihhLG0sYTAsYTEpCmlmKG49PT1vJiZsPT09bSlyZXR1cm4gYgpyZXR1cm4gQS5hKGEsbixs -KQpjYXNlIDExOms9Yi55Cmo9QS5QTChhLGssYTAsYTEpCmk9Yi56Cmg9QS5xVChhLGksYTAsYTEpCmlm -KGo9PT1rJiZoPT09aSlyZXR1cm4gYgpyZXR1cm4gQS5kKGEsaixoKQpjYXNlIDEyOmc9Yi56CmExKz1n -Lmxlbmd0aApmPUEuYlooYSxnLGEwLGExKQpvPWIueQpuPUEuUEwoYSxvLGEwLGExKQppZihmPT09ZyYm -bj09PW8pcmV0dXJuIGIKcmV0dXJuIEEuRChhLG4sZiwhMCkKY2FzZSAxMzplPWIueQppZihlPGExKXJl -dHVybiBiCmQ9YTBbZS1hMV0KaWYoZD09bnVsbClyZXR1cm4gYgpyZXR1cm4gZApkZWZhdWx0OnRocm93 -IEEuYihBLmhWKCJBdHRlbXB0ZWQgdG8gc3Vic3RpdHV0ZSB1bmV4cGVjdGVkIFJUSSBraW5kICIrYykp -fX0sCmJaKGEsYixjLGQpe3ZhciBzLHIscSxwLG89Yi5sZW5ndGgsbj1BLnZVKG8pCmZvcihzPSExLHI9 -MDtyPG87KytyKXtxPWJbcl0KcD1BLlBMKGEscSxjLGQpCmlmKHAhPT1xKXM9ITAKbltyXT1wfXJldHVy -biBzP246Yn0sCnZPKGEsYixjLGQpe3ZhciBzLHIscSxwLG8sbixtPWIubGVuZ3RoLGw9QS52VShtKQpm -b3Iocz0hMSxyPTA7cjxtO3IrPTMpe3E9YltyXQpwPWJbcisxXQpvPWJbcisyXQpuPUEuUEwoYSxvLGMs -ZCkKaWYobiE9PW8pcz0hMApsLnNwbGljZShyLDMscSxwLG4pfXJldHVybiBzP2w6Yn0sCnFUKGEsYixj -LGQpe3ZhciBzLHI9Yi5hLHE9QS5iWihhLHIsYyxkKSxwPWIuYixvPUEuYlooYSxwLGMsZCksbj1iLmMs -bT1BLnZPKGEsbixjLGQpCmlmKHE9PT1yJiZvPT09cCYmbT09PW4pcmV0dXJuIGIKcz1uZXcgQS5HKCkK -cy5hPXEKcy5iPW8Kcy5jPW0KcmV0dXJuIHN9LApRSShhLGIpe2Fbdi5hcnJheVJ0aV09YgpyZXR1cm4g -YX0sCkpTKGEpe3ZhciBzPWEuJFMKaWYocyE9bnVsbCl7aWYodHlwZW9mIHM9PSJudW1iZXIiKXJldHVy -biBBLkJwKHMpCnJldHVybiBhLiRTKCl9cmV0dXJuIG51bGx9LApVZShhLGIpe3ZhciBzCmlmKEEuUTEo -YikpaWYoYSBpbnN0YW5jZW9mIEEuVHApe3M9QS5KUyhhKQppZihzIT1udWxsKXJldHVybiBzfXJldHVy -biBBLnpLKGEpfSwKeksoYSl7dmFyIHMKaWYoYSBpbnN0YW5jZW9mIEEuTWgpe3M9YS4kdGkKcmV0dXJu -IHMhPW51bGw/czpBLlZVKGEpfWlmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIEEudDYoYSkKcmV0dXJu -IEEuVlUoSi5pYShhKSl9LAp0NihhKXt2YXIgcz1hW3YuYXJyYXlSdGldLHI9dC5iCmlmKHM9PW51bGwp -cmV0dXJuIHIKaWYocy5jb25zdHJ1Y3RvciE9PXIuY29uc3RydWN0b3IpcmV0dXJuIHIKcmV0dXJuIHN9 -LApMaChhKXt2YXIgcz1hLiR0aQpyZXR1cm4gcyE9bnVsbD9zOkEuVlUoYSl9LApWVShhKXt2YXIgcz1h -LmNvbnN0cnVjdG9yLHI9cy4kY2NhY2hlCmlmKHIhPW51bGwpcmV0dXJuIHIKcmV0dXJuIEEucjkoYSxz -KX0sCnI5KGEsYil7dmFyIHM9YSBpbnN0YW5jZW9mIEEuVHA/YS5fX3Byb3RvX18uX19wcm90b19fLmNv -bnN0cnVjdG9yOmIscj1BLmFpKHYudHlwZVVuaXZlcnNlLHMubmFtZSkKYi4kY2NhY2hlPXIKcmV0dXJu -IHJ9LApCcChhKXt2YXIgcyxyPXYudHlwZXMscT1yW2FdCmlmKHR5cGVvZiBxPT0ic3RyaW5nIil7cz1B -LkUodi50eXBlVW5pdmVyc2UscSwhMSkKclthXT1zCnJldHVybiBzfXJldHVybiBxfSwKS3goYSl7dmFy -IHMscixxLHA9YS53CmlmKHAhPW51bGwpcmV0dXJuIHAKcz1hLmF0CnI9cy5yZXBsYWNlKC9cKi9nLCIi -KQppZihyPT09cylyZXR1cm4gYS53PW5ldyBBLmxZKGEpCnE9QS5FKHYudHlwZVVuaXZlcnNlLHIsITAp -CnA9cS53CnJldHVybiBhLnc9cD09bnVsbD9xLnc9bmV3IEEubFkocSk6cH0sCnhxKGEpe3JldHVybiBB -Lkt4KEEuRSh2LnR5cGVVbml2ZXJzZSxhLCExKSl9LApKSihhKXt2YXIgcyxyLHEscCxvPXRoaXMKaWYo -bz09PXQuSylyZXR1cm4gQS5SRShvLGEsQS5rZSkKaWYoIUEuQTgobykpaWYoIShvPT09dC5fKSlzPSEx -CmVsc2Ugcz0hMAplbHNlIHM9ITAKaWYocylyZXR1cm4gQS5SRShvLGEsQS5JdykKcz1vLngKcj1zPT09 -Nj9vLnk6bwppZihyPT09dC5TKXE9QS5vawplbHNlIGlmKHI9PT10LmdSfHxyPT09dC5kaSlxPUEuS0gK -ZWxzZSBpZihyPT09dC5OKXE9QS5NTQplbHNlIHE9cj09PXQueT9BLnJROm51bGwKaWYocSE9bnVsbCly -ZXR1cm4gQS5SRShvLGEscSkKaWYoci54PT09OSl7cD1yLnkKaWYoci56LmV2ZXJ5KEEuY2MpKXtvLnI9 -IiRpIitwCmlmKHA9PT0iek0iKXJldHVybiBBLlJFKG8sYSxBLnlNKQpyZXR1cm4gQS5SRShvLGEsQS50 -NCl9fWVsc2UgaWYocz09PTcpcmV0dXJuIEEuUkUobyxhLEEuQVEpCnJldHVybiBBLlJFKG8sYSxBLllP -KX0sClJFKGEsYixjKXthLmI9YwpyZXR1cm4gYS5iKGIpfSwKQXUoYSl7dmFyIHMscj10aGlzLHE9QS5P -egppZighQS5BOChyKSlpZighKHI9PT10Ll8pKXM9ITEKZWxzZSBzPSEwCmVsc2Ugcz0hMAppZihzKXE9 -QS5obgplbHNlIGlmKHI9PT10LkspcT1BLlRpCmVsc2V7cz1BLmxSKHIpCmlmKHMpcT1BLmw0fXIuYT1x -CnJldHVybiByLmEoYSl9LApRaihhKXt2YXIgcyxyPWEueAppZighQS5BOChhKSlpZighKGE9PT10Ll8p -KWlmKCEoYT09PXQuYXcpKWlmKHIhPT03KXM9cj09PTgmJkEuUWooYS55KXx8YT09PXQuUHx8YT09PXQu -VAplbHNlIHM9ITAKZWxzZSBzPSEwCmVsc2Ugcz0hMAplbHNlIHM9ITAKcmV0dXJuIHN9LApZTyhhKXt2 -YXIgcz10aGlzCmlmKGE9PW51bGwpcmV0dXJuIEEuUWoocykKcmV0dXJuIEEuV2Uodi50eXBlVW5pdmVy -c2UsQS5VZShhLHMpLG51bGwscyxudWxsKX0sCkFRKGEpe2lmKGE9PW51bGwpcmV0dXJuITAKcmV0dXJu -IHRoaXMueS5iKGEpfSwKdDQoYSl7dmFyIHMscj10aGlzCmlmKGE9PW51bGwpcmV0dXJuIEEuUWoocikK -cz1yLnIKaWYoYSBpbnN0YW5jZW9mIEEuTWgpcmV0dXJuISFhW3NdCnJldHVybiEhSi5pYShhKVtzXX0s -CnlNKGEpe3ZhciBzLHI9dGhpcwppZihhPT1udWxsKXJldHVybiBBLlFqKHIpCmlmKHR5cGVvZiBhIT0i -b2JqZWN0IilyZXR1cm4hMQppZihBcnJheS5pc0FycmF5KGEpKXJldHVybiEwCnM9ci5yCmlmKGEgaW5z -dGFuY2VvZiBBLk1oKXJldHVybiEhYVtzXQpyZXR1cm4hIUouaWEoYSlbc119LApPeihhKXt2YXIgcyxy -PXRoaXMKaWYoYT09bnVsbCl7cz1BLmxSKHIpCmlmKHMpcmV0dXJuIGF9ZWxzZSBpZihyLmIoYSkpcmV0 -dXJuIGEKQS5tNChhLHIpfSwKbDQoYSl7dmFyIHM9dGhpcwppZihhPT1udWxsKXJldHVybiBhCmVsc2Ug -aWYocy5iKGEpKXJldHVybiBhCkEubTQoYSxzKX0sCm00KGEsYil7dGhyb3cgQS5iKEEuWmMoQS5XSyhh -LEEuVWUoYSxiKSxBLmRtKGIsbnVsbCkpKSl9LApEaChhLGIsYyxkKXt2YXIgcz1udWxsCmlmKEEuV2Uo -di50eXBlVW5pdmVyc2UsYSxzLGIscykpcmV0dXJuIGEKdGhyb3cgQS5iKEEuWmMoIlRoZSB0eXBlIGFy -Z3VtZW50ICciK0EuZG0oYSxzKSsiJyBpcyBub3QgYSBzdWJ0eXBlIG9mIHRoZSB0eXBlIHZhcmlhYmxl -IGJvdW5kICciK0EuZG0oYixzKSsiJyBvZiB0eXBlIHZhcmlhYmxlICciK2MrIicgaW4gJyIrZCsiJy4i -KSl9LApXSyhhLGIsYyl7dmFyIHM9QS5obChhKQpyZXR1cm4gcysiOiB0eXBlICciK0EuZG0oYj09bnVs -bD9BLnpLKGEpOmIsbnVsbCkrIicgaXMgbm90IGEgc3VidHlwZSBvZiB0eXBlICciK2MrIicifSwKWmMo -YSl7cmV0dXJuIG5ldyBBLmlNKCJUeXBlRXJyb3I6ICIrYSl9LApxKGEsYil7cmV0dXJuIG5ldyBBLmlN -KCJUeXBlRXJyb3I6ICIrQS5XSyhhLG51bGwsYikpfSwKa2UoYSl7cmV0dXJuIGEhPW51bGx9LApUaShh -KXtpZihhIT1udWxsKXJldHVybiBhCnRocm93IEEuYihBLnEoYSwiT2JqZWN0IikpfSwKSXcoYSl7cmV0 -dXJuITB9LApobihhKXtyZXR1cm4gYX0sCnJRKGEpe3JldHVybiEwPT09YXx8ITE9PT1hfSwKcDgoYSl7 -aWYoITA9PT1hKXJldHVybiEwCmlmKCExPT09YSlyZXR1cm4hMQp0aHJvdyBBLmIoQS5xKGEsImJvb2wi -KSl9LAptTChhKXtpZighMD09PWEpcmV0dXJuITAKaWYoITE9PT1hKXJldHVybiExCmlmKGE9PW51bGwp -cmV0dXJuIGEKdGhyb3cgQS5iKEEucShhLCJib29sIikpfSwKTTQoYSl7aWYoITA9PT1hKXJldHVybiEw -CmlmKCExPT09YSlyZXR1cm4hMQppZihhPT1udWxsKXJldHVybiBhCnRocm93IEEuYihBLnEoYSwiYm9v -bD8iKSl9LApyVihhKXtpZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIGEKdGhyb3cgQS5iKEEucShh -LCJkb3VibGUiKSl9LAp0RihhKXtpZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIGEKaWYoYT09bnVs -bClyZXR1cm4gYQp0aHJvdyBBLmIoQS5xKGEsImRvdWJsZSIpKX0sClFrKGEpe2lmKHR5cGVvZiBhPT0i -bnVtYmVyIilyZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRocm93IEEuYihBLnEoYSwiZG91Ymxl -PyIpKX0sCm9rKGEpe3JldHVybiB0eXBlb2YgYT09Im51bWJlciImJk1hdGguZmxvb3IoYSk9PT1hfSwK -SVooYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiJiZNYXRoLmZsb29yKGEpPT09YSlyZXR1cm4gYQp0aHJv -dyBBLmIoQS5xKGEsImludCIpKX0sCnVQKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIiYmTWF0aC5mbG9v -cihhKT09PWEpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBBLmIoQS5xKGEsImludCIp -KX0sClVjKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIiYmTWF0aC5mbG9vcihhKT09PWEpcmV0dXJuIGEK -aWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBBLmIoQS5xKGEsImludD8iKSl9LApLSChhKXtyZXR1cm4g -dHlwZW9mIGE9PSJudW1iZXIifSwKejUoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCnRo -cm93IEEuYihBLnEoYSwibnVtIikpfSwKVzEoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBh -CmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgQS5iKEEucShhLCJudW0iKSl9LApjVShhKXtpZih0eXBl +QS5INShhKX0sCkg1KGEpe3ZhciBzLHIscSxwCmlmKGEgaW5zdGFuY2VvZiBBLk1oKXJldHVybiBBLmRt +KEEueksoYSksbnVsbCkKcz1KLmlhKGEpCmlmKHM9PT1CLk9rfHxzPT09Qi5VYnx8dC5iSS5iKGEpKXty +PUIuTzQoYSkKaWYociE9PSJPYmplY3QiJiZyIT09IiIpcmV0dXJuIHIKcT1hLmNvbnN0cnVjdG9yCmlm +KHR5cGVvZiBxPT0iZnVuY3Rpb24iKXtwPXEubmFtZQppZih0eXBlb2YgcD09InN0cmluZyImJnAhPT0i +T2JqZWN0IiYmcCE9PSIiKXJldHVybiBwfX1yZXR1cm4gQS5kbShBLnpLKGEpLG51bGwpfSwKTTAoKXtp +ZighIXNlbGYubG9jYXRpb24pcmV0dXJuIHNlbGYubG9jYXRpb24uaHJlZgpyZXR1cm4gbnVsbH0sCmZ3 +KGEsYixjKXt2YXIgcyxyLHEscAppZihjPD01MDAmJmI9PT0wJiZjPT09YS5sZW5ndGgpcmV0dXJuIFN0 +cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxhKQpmb3Iocz1iLHI9IiI7czxjO3M9cSl7cT1zKzUw +MApwPXE8Yz9xOmMKcis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGEuc3ViYXJyYXkocyxw +KSl9cmV0dXJuIHJ9LApMdyhhKXt2YXIgcwppZigwPD1hKXtpZihhPD02NTUzNSlyZXR1cm4gU3RyaW5n +LmZyb21DaGFyQ29kZShhKQppZihhPD0xMTE0MTExKXtzPWEtNjU1MzYKcmV0dXJuIFN0cmluZy5mcm9t +Q2hhckNvZGUoKEIuam4ud0cocywxMCl8NTUyOTYpPj4+MCxzJjEwMjN8NTYzMjApfX10aHJvdyBBLmIo +QS5URShhLDAsMTExNDExMSxudWxsLG51bGwpKX0sCm8yKGEpe2lmKGEuZGF0ZT09PXZvaWQgMClhLmRh +dGU9bmV3IERhdGUoYS5hKQpyZXR1cm4gYS5kYXRlfSwKdEooYSl7dmFyIHM9QS5vMihhKS5nZXRGdWxs +WWVhcigpKzAKcmV0dXJuIHN9LApOUyhhKXt2YXIgcz1BLm8yKGEpLmdldE1vbnRoKCkrMQpyZXR1cm4g +c30sCmpBKGEpe3ZhciBzPUEubzIoYSkuZ2V0RGF0ZSgpKzAKcmV0dXJuIHN9LApJWChhKXt2YXIgcz1B +Lm8yKGEpLmdldEhvdXJzKCkrMApyZXR1cm4gc30sCmNoKGEpe3ZhciBzPUEubzIoYSkuZ2V0TWludXRl +cygpKzAKcmV0dXJuIHN9LApKZChhKXt2YXIgcz1BLm8yKGEpLmdldFNlY29uZHMoKSswCnJldHVybiBz +fSwKbzEoYSl7dmFyIHM9QS5vMihhKS5nZXRNaWxsaXNlY29uZHMoKSswCnJldHVybiBzfSwKem8oYSxi +LGMpe3ZhciBzLHIscT17fQpxLmE9MApzPVtdCnI9W10KcS5hPWIubGVuZ3RoCkIuTm0uRlYocyxiKQpx +LmI9IiIKaWYoYyE9bnVsbCYmYy5hIT09MCljLksoMCxuZXcgQS5DaihxLHIscykpCnJldHVybiBKLkp5 +KGEsbmV3IEEuTEkoQi5UZSwwLHMsciwwKSl9LApFayhhLGIsYyl7dmFyIHMscixxPWM9PW51bGx8fGMu +YT09PTAKaWYocSl7cz1iLmxlbmd0aAppZihzPT09MCl7aWYoISFhLiQwKXJldHVybiBhLiQwKCl9ZWxz +ZSBpZihzPT09MSl7aWYoISFhLiQxKXJldHVybiBhLiQxKGJbMF0pfWVsc2UgaWYocz09PTIpe2lmKCEh +YS4kMilyZXR1cm4gYS4kMihiWzBdLGJbMV0pfWVsc2UgaWYocz09PTMpe2lmKCEhYS4kMylyZXR1cm4g +YS4kMyhiWzBdLGJbMV0sYlsyXSl9ZWxzZSBpZihzPT09NCl7aWYoISFhLiQ0KXJldHVybiBhLiQ0KGJb +MF0sYlsxXSxiWzJdLGJbM10pfWVsc2UgaWYocz09PTUpaWYoISFhLiQ1KXJldHVybiBhLiQ1KGJbMF0s +YlsxXSxiWzJdLGJbM10sYls0XSkKcj1hWyIiKyIkIitzXQppZihyIT1udWxsKXJldHVybiByLmFwcGx5 +KGEsYil9cmV0dXJuIEEuWlQoYSxiLGMpfSwKWlQoYSxiLGMpe3ZhciBzLHIscSxwLG8sbixtLGwsayxq +LGksaCxnLGY9Yi5sZW5ndGgsZT1hLiRSCmlmKGY8ZSlyZXR1cm4gQS56byhhLGIsYykKcz1hLiRECnI9 +cz09bnVsbApxPSFyP3MoKTpudWxsCnA9Si5pYShhKQpvPXAuJEMKaWYodHlwZW9mIG89PSJzdHJpbmci +KW89cFtvXQppZihyKXtpZihjIT1udWxsJiZjLmEhPT0wKXJldHVybiBBLnpvKGEsYixjKQppZihmPT09 +ZSlyZXR1cm4gby5hcHBseShhLGIpCnJldHVybiBBLnpvKGEsYixjKX1pZihBcnJheS5pc0FycmF5KHEp +KXtpZihjIT1udWxsJiZjLmEhPT0wKXJldHVybiBBLnpvKGEsYixjKQpuPWUrcS5sZW5ndGgKaWYoZj5u +KXJldHVybiBBLnpvKGEsYixudWxsKQppZihmPG4pe209cS5zbGljZShmLWUpCmw9QS5ZMShiLCEwLHQu +eikKQi5ObS5GVihsLG0pfWVsc2UgbD1iCnJldHVybiBvLmFwcGx5KGEsbCl9ZWxzZXtpZihmPmUpcmV0 +dXJuIEEuem8oYSxiLGMpCmw9QS5ZMShiLCEwLHQueikKaz1PYmplY3Qua2V5cyhxKQppZihjPT1udWxs +KWZvcihyPWsubGVuZ3RoLGo9MDtqPGsubGVuZ3RoO2subGVuZ3RoPT09cnx8KDAsQS5saykoayksKytq +KXtpPXFbQS5uKGtbal0pXQppZihCLk52PT09aSlyZXR1cm4gQS56byhhLGwsYykKQi5ObS5pKGwsaSl9 +ZWxzZXtmb3Iocj1rLmxlbmd0aCxoPTAsaj0wO2o8ay5sZW5ndGg7ay5sZW5ndGg9PT1yfHwoMCxBLmxr +KShrKSwrK2ope2c9QS5uKGtbal0pCmlmKGMueDQoZykpeysraApCLk5tLmkobCxjLnEoMCxnKSl9ZWxz +ZXtpPXFbZ10KaWYoQi5Odj09PWkpcmV0dXJuIEEuem8oYSxsLGMpCkIuTm0uaShsLGkpfX1pZihoIT09 +Yy5hKXJldHVybiBBLnpvKGEsbCxjKX1yZXR1cm4gby5hcHBseShhLGwpfX0sCnBZKGEpe3Rocm93IEEu +YihBLnRMKGEpKX0sCk9IKGEsYil7aWYoYT09bnVsbClKLkhtKGEpCnRocm93IEEuYihBLnUoYSxiKSl9 +LAp1KGEsYil7dmFyIHMscj0iaW5kZXgiCmlmKCFBLm9rKGIpKXJldHVybiBuZXcgQS5BVCghMCxiLHIs +bnVsbCkKcz1BLklaKEouSG0oYSkpCmlmKGI8MHx8Yj49cylyZXR1cm4gQS5DZihiLGEscixudWxsLHMp +CnJldHVybiBBLk83KGIscil9LAphdShhLGIsYyl7aWYoYT5jKXJldHVybiBBLlRFKGEsMCxjLCJzdGFy +dCIsbnVsbCkKaWYoYiE9bnVsbClpZihiPGF8fGI+YylyZXR1cm4gQS5URShiLGEsYywiZW5kIixudWxs +KQpyZXR1cm4gbmV3IEEuQVQoITAsYiwiZW5kIixudWxsKX0sCnRMKGEpe3JldHVybiBuZXcgQS5BVCgh +MCxhLG51bGwsbnVsbCl9LApiKGEpe3ZhciBzLHIKaWYoYT09bnVsbClhPW5ldyBBLkYoKQpzPW5ldyBF +cnJvcigpCnMuZGFydEV4Y2VwdGlvbj1hCnI9QS5oCmlmKCJkZWZpbmVQcm9wZXJ0eSIgaW4gT2JqZWN0 +KXtPYmplY3QuZGVmaW5lUHJvcGVydHkocywibWVzc2FnZSIse2dldDpyfSkKcy5uYW1lPSIifWVsc2Ug +cy50b1N0cmluZz1yCnJldHVybiBzfSwKaCgpe3JldHVybiBKLllTKHRoaXMuZGFydEV4Y2VwdGlvbil9 +LAp2KGEpe3Rocm93IEEuYihhKX0sCmxrKGEpe3Rocm93IEEuYihBLmE0KGEpKX0sCmNNKGEpe3ZhciBz +LHIscSxwLG8sbgphPUEuZUEoYS5yZXBsYWNlKFN0cmluZyh7fSksIiRyZWNlaXZlciQiKSkKcz1hLm1h +dGNoKC9cXFwkW2EtekEtWl0rXFxcJC9nKQppZihzPT1udWxsKXM9QS5RSShbXSx0LnMpCnI9cy5pbmRl +eE9mKCJcXCRhcmd1bWVudHNcXCQiKQpxPXMuaW5kZXhPZigiXFwkYXJndW1lbnRzRXhwclxcJCIpCnA9 +cy5pbmRleE9mKCJcXCRleHByXFwkIikKbz1zLmluZGV4T2YoIlxcJG1ldGhvZFxcJCIpCm49cy5pbmRl +eE9mKCJcXCRyZWNlaXZlclxcJCIpCnJldHVybiBuZXcgQS5mOShhLnJlcGxhY2UobmV3IFJlZ0V4cCgi +XFxcXFxcJGFyZ3VtZW50c1xcXFxcXCQiLCJnIiksIigoPzp4fFteeF0pKikiKS5yZXBsYWNlKG5ldyBS +ZWdFeHAoIlxcXFxcXCRhcmd1bWVudHNFeHByXFxcXFxcJCIsImciKSwiKCg/Onh8W154XSkqKSIpLnJl +cGxhY2UobmV3IFJlZ0V4cCgiXFxcXFxcJGV4cHJcXFxcXFwkIiwiZyIpLCIoKD86eHxbXnhdKSopIiku +cmVwbGFjZShuZXcgUmVnRXhwKCJcXFxcXFwkbWV0aG9kXFxcXFxcJCIsImciKSwiKCg/Onh8W154XSkq +KSIpLnJlcGxhY2UobmV3IFJlZ0V4cCgiXFxcXFxcJHJlY2VpdmVyXFxcXFxcJCIsImciKSwiKCg/Onh8 +W154XSkqKSIpLHIscSxwLG8sbil9LApTNyhhKXtyZXR1cm4gZnVuY3Rpb24oJGV4cHIkKXt2YXIgJGFy +Z3VtZW50c0V4cHIkPSIkYXJndW1lbnRzJCIKdHJ5eyRleHByJC4kbWV0aG9kJCgkYXJndW1lbnRzRXhw +ciQpfWNhdGNoKHMpe3JldHVybiBzLm1lc3NhZ2V9fShhKX0sCk1qKGEpe3JldHVybiBmdW5jdGlvbigk +ZXhwciQpe3RyeXskZXhwciQuJG1ldGhvZCR9Y2F0Y2gocyl7cmV0dXJuIHMubWVzc2FnZX19KGEpfSwK +VDMoYSxiKXt2YXIgcz1iPT1udWxsLHI9cz9udWxsOmIubWV0aG9kCnJldHVybiBuZXcgQS5heihhLHIs +cz9udWxsOmIucmVjZWl2ZXIpfSwKUnUoYSl7dmFyIHMKaWYoYT09bnVsbClyZXR1cm4gbmV3IEEudGUo +YSkKaWYoYSBpbnN0YW5jZW9mIEEuYnEpe3M9YS5hCnJldHVybiBBLnRXKGEscz09bnVsbD90LksuYShz +KTpzKX1pZih0eXBlb2YgYSE9PSJvYmplY3QiKXJldHVybiBhCmlmKCJkYXJ0RXhjZXB0aW9uIiBpbiBh +KXJldHVybiBBLnRXKGEsYS5kYXJ0RXhjZXB0aW9uKQpyZXR1cm4gQS50bChhKX0sCnRXKGEsYil7aWYo +dC51LmIoYikpaWYoYi4kdGhyb3duSnNFcnJvcj09bnVsbCliLiR0aHJvd25Kc0Vycm9yPWEKcmV0dXJu +IGJ9LAp0bChhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGU9bnVsbAppZighKCJtZXNz +YWdlIiBpbiBhKSlyZXR1cm4gYQpzPWEubWVzc2FnZQppZigibnVtYmVyIiBpbiBhJiZ0eXBlb2YgYS5u +dW1iZXI9PSJudW1iZXIiKXtyPWEubnVtYmVyCnE9ciY2NTUzNQppZigoQi5qbi53RyhyLDE2KSY4MTkx +KT09PTEwKXN3aXRjaChxKXtjYXNlIDQzODpyZXR1cm4gQS50VyhhLEEuVDMoQS5FaihzKSsiIChFcnJv +ciAiK3ErIikiLGUpKQpjYXNlIDQ0NTpjYXNlIDUwMDc6cD1BLkVqKHMpCnJldHVybiBBLnRXKGEsbmV3 +IEEuVzAocCsiIChFcnJvciAiK3ErIikiLGUpKX19aWYoYSBpbnN0YW5jZW9mIFR5cGVFcnJvcil7bz0k +LlNuKCkKbj0kLmxxKCkKbT0kLk45KCkKbD0kLmlJKCkKaz0kLlVOKCkKaj0kLlpoKCkKaT0kLnJOKCkK +JC5jMygpCmg9JC5ISygpCmc9JC5yMSgpCmY9by5xUyhzKQppZihmIT1udWxsKXJldHVybiBBLnRXKGEs +QS5UMyhBLm4ocyksZikpCmVsc2V7Zj1uLnFTKHMpCmlmKGYhPW51bGwpe2YubWV0aG9kPSJjYWxsIgpy +ZXR1cm4gQS50VyhhLEEuVDMoQS5uKHMpLGYpKX1lbHNle2Y9bS5xUyhzKQppZihmPT1udWxsKXtmPWwu +cVMocykKaWYoZj09bnVsbCl7Zj1rLnFTKHMpCmlmKGY9PW51bGwpe2Y9ai5xUyhzKQppZihmPT1udWxs +KXtmPWkucVMocykKaWYoZj09bnVsbCl7Zj1sLnFTKHMpCmlmKGY9PW51bGwpe2Y9aC5xUyhzKQppZihm +PT1udWxsKXtmPWcucVMocykKcD1mIT1udWxsfWVsc2UgcD0hMH1lbHNlIHA9ITB9ZWxzZSBwPSEwfWVs +c2UgcD0hMH1lbHNlIHA9ITB9ZWxzZSBwPSEwfWVsc2UgcD0hMAppZihwKXtBLm4ocykKcmV0dXJuIEEu +dFcoYSxuZXcgQS5XMChzLGY9PW51bGw/ZTpmLm1ldGhvZCkpfX19cmV0dXJuIEEudFcoYSxuZXcgQS52 +Vih0eXBlb2Ygcz09InN0cmluZyI/czoiIikpfWlmKGEgaW5zdGFuY2VvZiBSYW5nZUVycm9yKXtpZih0 +eXBlb2Ygcz09InN0cmluZyImJnMuaW5kZXhPZigiY2FsbCBzdGFjayIpIT09LTEpcmV0dXJuIG5ldyBB +LktZKCkKcz1mdW5jdGlvbihiKXt0cnl7cmV0dXJuIFN0cmluZyhiKX1jYXRjaChkKXt9cmV0dXJuIG51 +bGx9KGEpCnJldHVybiBBLnRXKGEsbmV3IEEuQVQoITEsZSxlLHR5cGVvZiBzPT0ic3RyaW5nIj9zLnJl +cGxhY2UoL15SYW5nZUVycm9yOlxzKi8sIiIpOnMpKX1pZih0eXBlb2YgSW50ZXJuYWxFcnJvcj09ImZ1 +bmN0aW9uIiYmYSBpbnN0YW5jZW9mIEludGVybmFsRXJyb3IpaWYodHlwZW9mIHM9PSJzdHJpbmciJiZz +PT09InRvbyBtdWNoIHJlY3Vyc2lvbiIpcmV0dXJuIG5ldyBBLktZKCkKcmV0dXJuIGF9LAp0cyhhKXt2 +YXIgcwppZihhIGluc3RhbmNlb2YgQS5icSlyZXR1cm4gYS5iCmlmKGE9PW51bGwpcmV0dXJuIG5ldyBB +LlhPKGEpCnM9YS4kY2FjaGVkVHJhY2UKaWYocyE9bnVsbClyZXR1cm4gcwpyZXR1cm4gYS4kY2FjaGVk +VHJhY2U9bmV3IEEuWE8oYSl9LApDVShhKXtpZihhPT1udWxsfHx0eXBlb2YgYSE9Im9iamVjdCIpcmV0 +dXJuIEouVTMoYSkKZWxzZSByZXR1cm4gQS5lUShhKX0sCkI3KGEsYil7dmFyIHMscixxLHA9YS5sZW5n +dGgKZm9yKHM9MDtzPHA7cz1xKXtyPXMrMQpxPXIrMQpiLlk1KDAsYVtzXSxhW3JdKX1yZXR1cm4gYn0s +CmZ0KGEsYixjLGQsZSxmKXt0LlkuYShhKQpzd2l0Y2goQS5JWihiKSl7Y2FzZSAwOnJldHVybiBhLiQw +KCkKY2FzZSAxOnJldHVybiBhLiQxKGMpCmNhc2UgMjpyZXR1cm4gYS4kMihjLGQpCmNhc2UgMzpyZXR1 +cm4gYS4kMyhjLGQsZSkKY2FzZSA0OnJldHVybiBhLiQ0KGMsZCxlLGYpfXRocm93IEEuYihuZXcgQS5D +RCgiVW5zdXBwb3J0ZWQgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3Igd3JhcHBlZCBjbG9zdXJlIikpfSwK +dFIoYSxiKXt2YXIgcwppZihhPT1udWxsKXJldHVybiBudWxsCnM9YS4kaWRlbnRpdHkKaWYoISFzKXJl +dHVybiBzCnM9ZnVuY3Rpb24oYyxkLGUpe3JldHVybiBmdW5jdGlvbihmLGcsaCxpKXtyZXR1cm4gZShj +LGQsZixnLGgsaSl9fShhLGIsQS5mdCkKYS4kaWRlbnRpdHk9cwpyZXR1cm4gc30sCmlBKGEyKXt2YXIg +cyxyLHEscCxvLG4sbSxsLGssaixpPWEyLmNvLGg9YTIuaVMsZz1hMi5pSSxmPWEyLm5EQSxlPWEyLmFJ +LGQ9YTIuZnMsYz1hMi5jcyxiPWRbMF0sYT1jWzBdLGEwPWlbYl0sYTE9YTIuZlQKYTEudG9TdHJpbmcK +cz1oP09iamVjdC5jcmVhdGUobmV3IEEuengoKS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUpOk9iamVjdC5j +cmVhdGUobmV3IEEuclQobnVsbCxudWxsKS5jb25zdHJ1Y3Rvci5wcm90b3R5cGUpCnMuJGluaXRpYWxp +emU9cy5jb25zdHJ1Y3RvcgppZihoKXI9ZnVuY3Rpb24gc3RhdGljX3RlYXJfb2ZmKCl7dGhpcy4kaW5p +dGlhbGl6ZSgpfQplbHNlIHI9ZnVuY3Rpb24gdGVhcl9vZmYoYTMsYTQpe3RoaXMuJGluaXRpYWxpemUo +YTMsYTQpfQpzLmNvbnN0cnVjdG9yPXIKci5wcm90b3R5cGU9cwpzLiRfbmFtZT1iCnMuJF90YXJnZXQ9 +YTAKcT0haAppZihxKXA9QS5ieChiLGEwLGcsZikKZWxzZXtzLiRzdGF0aWNfbmFtZT1iCnA9YTB9cy4k +Uz1BLmltKGExLGgsZykKc1thXT1wCmZvcihvPXAsbj0xO248ZC5sZW5ndGg7KytuKXttPWRbbl0KaWYo +dHlwZW9mIG09PSJzdHJpbmciKXtsPWlbbV0Kaz1tCm09bH1lbHNlIGs9IiIKaj1jW25dCmlmKGohPW51 +bGwpe2lmKHEpbT1BLmJ4KGssbSxnLGYpCnNbal09bX1pZihuPT09ZSlvPW19cy4kQz1vCnMuJFI9YTIu +ckMKcy4kRD1hMi5kVgpyZXR1cm4gcn0sCmltKGEsYixjKXtpZih0eXBlb2YgYT09Im51bWJlciIpcmV0 +dXJuIGEKaWYodHlwZW9mIGE9PSJzdHJpbmciKXtpZihiKXRocm93IEEuYigiQ2Fubm90IGNvbXB1dGUg +c2lnbmF0dXJlIGZvciBzdGF0aWMgdGVhcm9mZi4iKQpyZXR1cm4gZnVuY3Rpb24oZCxlKXtyZXR1cm4g +ZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGQpfX0oYSxBLlRuKX10aHJvdyBBLmIoIkVycm9yIGluIGZ1 +bmN0aW9uVHlwZSBvZiB0ZWFyb2ZmIil9LAp2cShhLGIsYyxkKXt2YXIgcz1BLnlTCnN3aXRjaChiPy0x +OmEpe2Nhc2UgMDpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZih0 +aGlzKVtlXSgpfX0oYyxzKQpjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9u +KGcpe3JldHVybiBmKHRoaXMpW2VdKGcpfX0oYyxzKQpjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKGUsZil7 +cmV0dXJuIGZ1bmN0aW9uKGcsaCl7cmV0dXJuIGYodGhpcylbZV0oZyxoKX19KGMscykKY2FzZSAzOnJl +dHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbihnLGgsaSl7cmV0dXJuIGYodGhpcylbZV0o +ZyxoLGkpfX0oYyxzKQpjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9uKGcs +aCxpLGope3JldHVybiBmKHRoaXMpW2VdKGcsaCxpLGopfX0oYyxzKQpjYXNlIDU6cmV0dXJuIGZ1bmN0 +aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9uKGcsaCxpLGosayl7cmV0dXJuIGYodGhpcylbZV0oZyxoLGks +aixrKX19KGMscykKZGVmYXVsdDpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oKXty +ZXR1cm4gZS5hcHBseShmKHRoaXMpLGFyZ3VtZW50cyl9fShkLHMpfX0sCmJ4KGEsYixjLGQpe3ZhciBz +LHIKaWYoYylyZXR1cm4gQS5IZihhLGIsZCkKcz1iLmxlbmd0aApyPUEudnEocyxkLGEsYikKcmV0dXJu +IHJ9LApaNChhLGIsYyxkKXt2YXIgcz1BLnlTLHI9QS5BTwpzd2l0Y2goYj8tMTphKXtjYXNlIDA6dGhy +b3cgQS5iKG5ldyBBLkVxKCJJbnRlcmNlcHRlZCBmdW5jdGlvbiB3aXRoIG5vIGFyZ3VtZW50cy4iKSkK +Y2FzZSAxOnJldHVybiBmdW5jdGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhp +cylbZV0oZyh0aGlzKSl9fShjLHIscykKY2FzZSAyOnJldHVybiBmdW5jdGlvbihlLGYsZyl7cmV0dXJu +IGZ1bmN0aW9uKGgpe3JldHVybiBmKHRoaXMpW2VdKGcodGhpcyksaCl9fShjLHIscykKY2FzZSAzOnJl +dHVybiBmdW5jdGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKGgsaSl7cmV0dXJuIGYodGhpcylbZV0o +Zyh0aGlzKSxoLGkpfX0oYyxyLHMpCmNhc2UgNDpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBm +dW5jdGlvbihoLGksail7cmV0dXJuIGYodGhpcylbZV0oZyh0aGlzKSxoLGksail9fShjLHIscykKY2Fz +ZSA1OnJldHVybiBmdW5jdGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKGgsaSxqLGspe3JldHVybiBm +KHRoaXMpW2VdKGcodGhpcyksaCxpLGosayl9fShjLHIscykKY2FzZSA2OnJldHVybiBmdW5jdGlvbihl +LGYsZyl7cmV0dXJuIGZ1bmN0aW9uKGgsaSxqLGssbCl7cmV0dXJuIGYodGhpcylbZV0oZyh0aGlzKSxo +LGksaixrLGwpfX0oYyxyLHMpCmRlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKGUsZixnKXtyZXR1cm4gZnVu +Y3Rpb24oKXt2YXIgcT1bZyh0aGlzKV0KQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkocSxhcmd1bWVu +dHMpCnJldHVybiBlLmFwcGx5KGYodGhpcykscSl9fShkLHIscyl9fSwKSGYoYSxiLGMpe3ZhciBzLHIK +aWYoJC5BbD09bnVsbCkkLkFsPUEubTkoImludGVyY2VwdG9yIikKaWYoJC5pMD09bnVsbCkkLmkwPUEu +bTkoInJlY2VpdmVyIikKcz1iLmxlbmd0aApyPUEuWjQocyxjLGEsYikKcmV0dXJuIHJ9LApVMihhKXty +ZXR1cm4gQS5pQShhKX0sClRuKGEsYil7cmV0dXJuIEEuY0Uodi50eXBlVW5pdmVyc2UsQS56SyhhLmEp +LGIpfSwKeVMoYSl7cmV0dXJuIGEuYX0sCkFPKGEpe3JldHVybiBhLmJ9LAptOShhKXt2YXIgcyxyLHEs +cD1uZXcgQS5yVCgicmVjZWl2ZXIiLCJpbnRlcmNlcHRvciIpLG89Si5FcChPYmplY3QuZ2V0T3duUHJv +cGVydHlOYW1lcyhwKSx0LlgpCmZvcihzPW8ubGVuZ3RoLHI9MDtyPHM7KytyKXtxPW9bcl0KaWYocFtx +XT09PWEpcmV0dXJuIHF9dGhyb3cgQS5iKEEueFkoIkZpZWxkIG5hbWUgIithKyIgbm90IGZvdW5kLiIs +bnVsbCkpfSwKb1QoYSl7aWYoYT09bnVsbClBLmZPKCJib29sZWFuIGV4cHJlc3Npb24gbXVzdCBub3Qg +YmUgbnVsbCIpCnJldHVybiBhfSwKZk8oYSl7dGhyb3cgQS5iKG5ldyBBLmtZKGEpKX0sCmFnKGEpe3Ro +cm93IEEuYihuZXcgQS5wKGEpKX0sCllnKGEpe3JldHVybiB2LmdldElzb2xhdGVUYWcoYSl9LAppdyhh +LGIsYyl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7dmFsdWU6YyxlbnVtZXJhYmxlOmZhbHNlLHdy +aXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KX0sCnczKGEpe3ZhciBzLHIscSxwLG8sbj1BLm4o +JC5ORi4kMShhKSksbT0kLm53W25dCmlmKG0hPW51bGwpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHYu +ZGlzcGF0Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOm0sZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVl +LGNvbmZpZ3VyYWJsZTp0cnVlfSkKcmV0dXJuIG0uaX1zPSQudnZbbl0KaWYocyE9bnVsbClyZXR1cm4g +cwpyPXYuaW50ZXJjZXB0b3JzQnlUYWdbbl0KaWYocj09bnVsbCl7cT1BLmsoJC5UWC4kMihhLG4pKQpp +ZihxIT1udWxsKXttPSQubndbcV0KaWYobSE9bnVsbCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdi5k +aXNwYXRjaFByb3BlcnR5TmFtZSx7dmFsdWU6bSxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUs +Y29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4gbS5pfXM9JC52dltxXQppZihzIT1udWxsKXJldHVybiBz +CnI9di5pbnRlcmNlcHRvcnNCeVRhZ1txXQpuPXF9fWlmKHI9PW51bGwpcmV0dXJuIG51bGwKcz1yLnBy +b3RvdHlwZQpwPW5bMF0KaWYocD09PSIhIil7bT1BLlZhKHMpCiQubndbbl09bQpPYmplY3QuZGVmaW5l +UHJvcGVydHkoYSx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTptLGVudW1lcmFibGU6ZmFsc2Us +d3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnJldHVybiBtLml9aWYocD09PSJ+Iil7JC52 +dltuXT1zCnJldHVybiBzfWlmKHA9PT0iLSIpe289QS5WYShzKQpPYmplY3QuZGVmaW5lUHJvcGVydHko +T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpLHYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOm8sZW51 +bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSkKcmV0dXJuIG8uaX1p +ZihwPT09IisiKXJldHVybiBBLkxjKGEscykKaWYocD09PSIqIil0aHJvdyBBLmIoQS5TWShuKSkKaWYo +di5sZWFmVGFnc1tuXT09PXRydWUpe289QS5WYShzKQpPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0 +LmdldFByb3RvdHlwZU9mKGEpLHYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOm8sZW51bWVyYWJs +ZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSkKcmV0dXJuIG8uaX1lbHNlIHJl +dHVybiBBLkxjKGEscyl9LApMYyhhLGIpe3ZhciBzPU9iamVjdC5nZXRQcm90b3R5cGVPZihhKQpPYmpl +Y3QuZGVmaW5lUHJvcGVydHkocyx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTpKLlF1KGIscyxu +dWxsLG51bGwpLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0p +CnJldHVybiBifSwKVmEoYSl7cmV0dXJuIEouUXUoYSwhMSxudWxsLCEhYS4kaVhqKX0sClZGKGEsYixj +KXt2YXIgcz1iLnByb3RvdHlwZQppZih2LmxlYWZUYWdzW2FdPT09dHJ1ZSlyZXR1cm4gQS5WYShzKQpl +bHNlIHJldHVybiBKLlF1KHMsYyxudWxsLG51bGwpfSwKWEQoKXtpZighMD09PSQuQnYpcmV0dXJuCiQu +QnY9ITAKQS5aMSgpfSwKWjEoKXt2YXIgcyxyLHEscCxvLG4sbSxsCiQubnc9T2JqZWN0LmNyZWF0ZShu +dWxsKQokLnZ2PU9iamVjdC5jcmVhdGUobnVsbCkKQS5rTygpCnM9di5pbnRlcmNlcHRvcnNCeVRhZwpy +PU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHMpCmlmKHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQi +KXt3aW5kb3cKcT1mdW5jdGlvbigpe30KZm9yKHA9MDtwPHIubGVuZ3RoOysrcCl7bz1yW3BdCm49JC54 +Ny4kMShvKQppZihuIT1udWxsKXttPUEuVkYobyxzW29dLG4pCmlmKG0hPW51bGwpe09iamVjdC5kZWZp +bmVQcm9wZXJ0eShuLHYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOm0sZW51bWVyYWJsZTpmYWxz +ZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSkKcS5wcm90b3R5cGU9bn19fX1mb3IocD0w +O3A8ci5sZW5ndGg7KytwKXtvPXJbcF0KaWYoL15bQS1aYS16X10vLnRlc3Qobykpe2w9c1tvXQpzWyIh +IitvXT1sCnNbIn4iK29dPWwKc1siLSIrb109bApzWyIrIitvXT1sCnNbIioiK29dPWx9fX0sCmtPKCl7 +dmFyIHMscixxLHAsbyxuLG09Qi5ZcSgpCm09QS51ZChCLktVLEEudWQoQi5mUSxBLnVkKEIuaTcsQS51 +ZChCLmk3LEEudWQoQi54aSxBLnVkKEIuZGssQS51ZChCLndiKEIuTzQpLG0pKSkpKSkpCmlmKHR5cGVv +ZiBkYXJ0TmF0aXZlRGlzcGF0Y2hIb29rc1RyYW5zZm9ybWVyIT0idW5kZWZpbmVkIil7cz1kYXJ0TmF0 +aXZlRGlzcGF0Y2hIb29rc1RyYW5zZm9ybWVyCmlmKHR5cGVvZiBzPT0iZnVuY3Rpb24iKXM9W3NdCmlm +KHMuY29uc3RydWN0b3I9PUFycmF5KWZvcihyPTA7cjxzLmxlbmd0aDsrK3Ipe3E9c1tyXQppZih0eXBl +b2YgcT09ImZ1bmN0aW9uIiltPXEobSl8fG19fXA9bS5nZXRUYWcKbz1tLmdldFVua25vd25UYWcKbj1t +LnByb3RvdHlwZUZvclRhZwokLk5GPW5ldyBBLmRDKHApCiQuVFg9bmV3IEEud04obykKJC54Nz1uZXcg +QS5WWChuKX0sCnVkKGEsYil7cmV0dXJuIGEoYil8fGJ9LAp2NChhLGIsYyxkLGUsZil7dmFyIHM9Yj8i +bSI6IiIscj1jPyIiOiJpIixxPWQ/InUiOiIiLHA9ZT8icyI6IiIsbz1mPyJnIjoiIixuPWZ1bmN0aW9u +KGcsaCl7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGcsaCl9Y2F0Y2gobSl7cmV0dXJuIG19fShhLHMrcitx +K3ArbykKaWYobiBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gbgp0aHJvdyBBLmIoQS5ycigiSWxsZWdh +bCBSZWdFeHAgcGF0dGVybiAoIitTdHJpbmcobikrIikiLGEsbnVsbCkpfSwKU1EoYSxiLGMpe3ZhciBz +CmlmKHR5cGVvZiBiPT0ic3RyaW5nIilyZXR1cm4gYS5pbmRleE9mKGIsYyk+PTAKZWxzZSBpZihiIGlu +c3RhbmNlb2YgQS5WUil7cz1CLnhCLnluKGEsYykKcmV0dXJuIGIuYi50ZXN0KHMpfWVsc2V7cz1KLkZM +KGIsQi54Qi55bihhLGMpKQpyZXR1cm4hcy5nbDAocyl9fSwKQTQoYSl7aWYoYS5pbmRleE9mKCIkIiww +KT49MClyZXR1cm4gYS5yZXBsYWNlKC9cJC9nLCIkJCQkIikKcmV0dXJuIGF9LAplQShhKXtpZigvW1tc +XXt9KCkqKz8uXFxeJHxdLy50ZXN0KGEpKXJldHVybiBhLnJlcGxhY2UoL1tbXF17fSgpKis/LlxcXiR8 +XS9nLCJcXCQmIikKcmV0dXJuIGF9LAp5cyhhLGIsYyl7dmFyIHM9QS5uTShhLGIsYykKcmV0dXJuIHN9 +LApuTShhLGIsYyl7dmFyIHMscixxLHAKaWYoYj09PSIiKXtpZihhPT09IiIpcmV0dXJuIGMKcz1hLmxl +bmd0aApyPSIiK2MKZm9yKHE9MDtxPHM7KytxKXI9cithW3FdK2MKcmV0dXJuIHIuY2hhckNvZGVBdCgw +KT09MD9yOnJ9cD1hLmluZGV4T2YoYiwwKQppZihwPDApcmV0dXJuIGEKaWYoYS5sZW5ndGg8NTAwfHxj +LmluZGV4T2YoIiQiLDApPj0wKXJldHVybiBhLnNwbGl0KGIpLmpvaW4oYykKcmV0dXJuIGEucmVwbGFj +ZShuZXcgUmVnRXhwKEEuZUEoYiksImciKSxBLkE0KGMpKX0sClBEOmZ1bmN0aW9uIFBEKGEsYil7dGhp +cy5hPWEKdGhpcy4kdGk9Yn0sCldVOmZ1bmN0aW9uIFdVKCl7fSwKTFA6ZnVuY3Rpb24gTFAoYSxiLGMs +ZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLiR0aT1kfSwKWFI6ZnVuY3Rpb24gWFIoYSxi +KXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKTEk6ZnVuY3Rpb24gTEkoYSxiLGMsZCxlKXt2YXIgXz10aGlz +Cl8uYT1hCl8uYz1iCl8uZD1jCl8uZT1kCl8uZj1lfSwKQ2o6ZnVuY3Rpb24gQ2ooYSxiLGMpe3RoaXMu +YT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKZjk6ZnVuY3Rpb24gZjkoYSxiLGMsZCxlLGYpe3ZhciBfPXRo +aXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWQKXy5lPWUKXy5mPWZ9LApXMDpmdW5jdGlvbiBXMChhLGIp +e3RoaXMuYT1hCnRoaXMuYj1ifSwKYXo6ZnVuY3Rpb24gYXooYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1i +CnRoaXMuYz1jfSwKdlY6ZnVuY3Rpb24gdlYoYSl7dGhpcy5hPWF9LAp0ZTpmdW5jdGlvbiB0ZShhKXt0 +aGlzLmE9YX0sCmJxOmZ1bmN0aW9uIGJxKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApYTzpmdW5jdGlv +biBYTyhhKXt0aGlzLmE9YQp0aGlzLmI9bnVsbH0sClRwOmZ1bmN0aW9uIFRwKCl7fSwKQXk6ZnVuY3Rp +b24gQXkoKXt9LApFMTpmdW5jdGlvbiBFMSgpe30sCmxjOmZ1bmN0aW9uIGxjKCl7fSwKeng6ZnVuY3Rp +b24gengoKXt9LApyVDpmdW5jdGlvbiByVChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKRXE6ZnVuY3Rp +b24gRXEoYSl7dGhpcy5hPWF9LAprWTpmdW5jdGlvbiBrWShhKXt0aGlzLmE9YX0sCmtyOmZ1bmN0aW9u +IGtyKCl7fSwKTjU6ZnVuY3Rpb24gTjUoYSl7dmFyIF89dGhpcwpfLmE9MApfLmY9Xy5lPV8uZD1fLmM9 +Xy5iPW51bGwKXy5yPTAKXy4kdGk9YX0sCmV3OmZ1bmN0aW9uIGV3KGEpe3RoaXMuYT1hfSwKdmg6ZnVu +Y3Rpb24gdmgoYSxiKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uZD1fLmM9bnVsbH0sCmk1OmZ1bmN0 +aW9uIGk1KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCk42OmZ1bmN0aW9uIE42KGEsYixjKXt2YXIg +Xz10aGlzCl8uYT1hCl8uYj1iCl8uZD1fLmM9bnVsbApfLiR0aT1jfSwKZEM6ZnVuY3Rpb24gZEMoYSl7 +dGhpcy5hPWF9LAp3TjpmdW5jdGlvbiB3TihhKXt0aGlzLmE9YX0sClZYOmZ1bmN0aW9uIFZYKGEpe3Ro +aXMuYT1hfSwKVlI6ZnVuY3Rpb24gVlIoYSxiKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uZD1fLmM9 +bnVsbH0sCkVLOmZ1bmN0aW9uIEVLKGEpe3RoaXMuYj1hfSwKS1c6ZnVuY3Rpb24gS1coYSxiLGMpe3Ro +aXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKUGI6ZnVuY3Rpb24gUGIoYSxiLGMpe3ZhciBfPXRoaXMK +Xy5hPWEKXy5iPWIKXy5jPWMKXy5kPW51bGx9LAp0UTpmdW5jdGlvbiB0UShhLGIpe3RoaXMuYT1hCnRo +aXMuYz1ifSwKdW46ZnVuY3Rpb24gdW4oYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwK +U2Q6ZnVuY3Rpb24gU2QoYSxiLGMpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPW51bGx9 +LApYRihhKXtyZXR1cm4gYX0sCm9kKGEsYixjKXtpZihhPj4+MCE9PWF8fGE+PWMpdGhyb3cgQS5iKEEu +dShiLGEpKX0sCnJNKGEsYixjKXt2YXIgcwppZighKGE+Pj4wIT09YSkpcz1iPj4+MCE9PWJ8fGE+Ynx8 +Yj5jCmVsc2Ugcz0hMAppZihzKXRocm93IEEuYihBLmF1KGEsYixjKSkKcmV0dXJuIGJ9LApFVDpmdW5j +dGlvbiBFVCgpe30sCkxaOmZ1bmN0aW9uIExaKCl7fSwKRGc6ZnVuY3Rpb24gRGcoKXt9LApQZzpmdW5j +dGlvbiBQZygpe30sCnhqOmZ1bmN0aW9uIHhqKCl7fSwKZEU6ZnVuY3Rpb24gZEUoKXt9LApaQTpmdW5j +dGlvbiBaQSgpe30sCmRUOmZ1bmN0aW9uIGRUKCl7fSwKUHE6ZnVuY3Rpb24gUHEoKXt9LAplRTpmdW5j +dGlvbiBlRSgpe30sClY2OmZ1bmN0aW9uIFY2KCl7fSwKUkc6ZnVuY3Rpb24gUkcoKXt9LApWUDpmdW5j +dGlvbiBWUCgpe30sCldCOmZ1bmN0aW9uIFdCKCl7fSwKWkc6ZnVuY3Rpb24gWkcoKXt9LApjeihhLGIp +e3ZhciBzPWIuYwpyZXR1cm4gcz09bnVsbD9iLmM9QS5CKGEsYi55LCEwKTpzfSwKeFooYSxiKXt2YXIg +cz1iLmMKcmV0dXJuIHM9PW51bGw/Yi5jPUEuSihhLCJiOCIsW2IueV0pOnN9LApRMShhKXt2YXIgcz1h +LngKaWYocz09PTZ8fHM9PT03fHxzPT09OClyZXR1cm4gQS5RMShhLnkpCnJldHVybiBzPT09MTF8fHM9 +PT0xMn0sCm1EKGEpe3JldHVybiBhLmF0fSwKTjAoYSl7cmV0dXJuIEEuRSh2LnR5cGVVbml2ZXJzZSxh +LCExKX0sClBMKGEsYixhMCxhMSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYz1i +LngKc3dpdGNoKGMpe2Nhc2UgNTpjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6cmV0dXJuIGIKY2Fz +ZSA2OnM9Yi55CnI9QS5QTChhLHMsYTAsYTEpCmlmKHI9PT1zKXJldHVybiBiCnJldHVybiBBLkMoYSxy +LCEwKQpjYXNlIDc6cz1iLnkKcj1BLlBMKGEscyxhMCxhMSkKaWYocj09PXMpcmV0dXJuIGIKcmV0dXJu +IEEuQihhLHIsITApCmNhc2UgODpzPWIueQpyPUEuUEwoYSxzLGEwLGExKQppZihyPT09cylyZXR1cm4g +YgpyZXR1cm4gQS5mKGEsciwhMCkKY2FzZSA5OnE9Yi56CnA9QS5iWihhLHEsYTAsYTEpCmlmKHA9PT1x +KXJldHVybiBiCnJldHVybiBBLkooYSxiLnkscCkKY2FzZSAxMDpvPWIueQpuPUEuUEwoYSxvLGEwLGEx +KQptPWIuegpsPUEuYlooYSxtLGEwLGExKQppZihuPT09byYmbD09PW0pcmV0dXJuIGIKcmV0dXJuIEEu +YShhLG4sbCkKY2FzZSAxMTprPWIueQpqPUEuUEwoYSxrLGEwLGExKQppPWIuegpoPUEucVQoYSxpLGEw +LGExKQppZihqPT09ayYmaD09PWkpcmV0dXJuIGIKcmV0dXJuIEEuZChhLGosaCkKY2FzZSAxMjpnPWIu +egphMSs9Zy5sZW5ndGgKZj1BLmJaKGEsZyxhMCxhMSkKbz1iLnkKbj1BLlBMKGEsbyxhMCxhMSkKaWYo +Zj09PWcmJm49PT1vKXJldHVybiBiCnJldHVybiBBLkQoYSxuLGYsITApCmNhc2UgMTM6ZT1iLnkKaWYo +ZTxhMSlyZXR1cm4gYgpkPWEwW2UtYTFdCmlmKGQ9PW51bGwpcmV0dXJuIGIKcmV0dXJuIGQKZGVmYXVs +dDp0aHJvdyBBLmIoQS5oVigiQXR0ZW1wdGVkIHRvIHN1YnN0aXR1dGUgdW5leHBlY3RlZCBSVEkga2lu +ZCAiK2MpKX19LApiWihhLGIsYyxkKXt2YXIgcyxyLHEscCxvPWIubGVuZ3RoLG49QS52VShvKQpmb3Io +cz0hMSxyPTA7cjxvOysrcil7cT1iW3JdCnA9QS5QTChhLHEsYyxkKQppZihwIT09cSlzPSEwCm5bcl09 +cH1yZXR1cm4gcz9uOmJ9LAp2TyhhLGIsYyxkKXt2YXIgcyxyLHEscCxvLG4sbT1iLmxlbmd0aCxsPUEu +dlUobSkKZm9yKHM9ITEscj0wO3I8bTtyKz0zKXtxPWJbcl0KcD1iW3IrMV0Kbz1iW3IrMl0Kbj1BLlBM +KGEsbyxjLGQpCmlmKG4hPT1vKXM9ITAKbC5zcGxpY2UociwzLHEscCxuKX1yZXR1cm4gcz9sOmJ9LApx +VChhLGIsYyxkKXt2YXIgcyxyPWIuYSxxPUEuYlooYSxyLGMsZCkscD1iLmIsbz1BLmJaKGEscCxjLGQp +LG49Yi5jLG09QS52TyhhLG4sYyxkKQppZihxPT09ciYmbz09PXAmJm09PT1uKXJldHVybiBiCnM9bmV3 +IEEuRygpCnMuYT1xCnMuYj1vCnMuYz1tCnJldHVybiBzfSwKUUkoYSxiKXthW3YuYXJyYXlSdGldPWIK +cmV0dXJuIGF9LApKUyhhKXt2YXIgcz1hLiRTCmlmKHMhPW51bGwpe2lmKHR5cGVvZiBzPT0ibnVtYmVy +IilyZXR1cm4gQS5CcChzKQpyZXR1cm4gYS4kUygpfXJldHVybiBudWxsfSwKVWUoYSxiKXt2YXIgcwpp +ZihBLlExKGIpKWlmKGEgaW5zdGFuY2VvZiBBLlRwKXtzPUEuSlMoYSkKaWYocyE9bnVsbClyZXR1cm4g +c31yZXR1cm4gQS56SyhhKX0sCnpLKGEpe3ZhciBzCmlmKGEgaW5zdGFuY2VvZiBBLk1oKXtzPWEuJHRp +CnJldHVybiBzIT1udWxsP3M6QS5WVShhKX1pZihBcnJheS5pc0FycmF5KGEpKXJldHVybiBBLnQ2KGEp +CnJldHVybiBBLlZVKEouaWEoYSkpfSwKdDYoYSl7dmFyIHM9YVt2LmFycmF5UnRpXSxyPXQuYgppZihz +PT1udWxsKXJldHVybiByCmlmKHMuY29uc3RydWN0b3IhPT1yLmNvbnN0cnVjdG9yKXJldHVybiByCnJl +dHVybiBzfSwKTGgoYSl7dmFyIHM9YS4kdGkKcmV0dXJuIHMhPW51bGw/czpBLlZVKGEpfSwKVlUoYSl7 +dmFyIHM9YS5jb25zdHJ1Y3RvcixyPXMuJGNjYWNoZQppZihyIT1udWxsKXJldHVybiByCnJldHVybiBB +LnI5KGEscyl9LApyOShhLGIpe3ZhciBzPWEgaW5zdGFuY2VvZiBBLlRwP2EuX19wcm90b19fLl9fcHJv +dG9fXy5jb25zdHJ1Y3RvcjpiLHI9QS5haSh2LnR5cGVVbml2ZXJzZSxzLm5hbWUpCmIuJGNjYWNoZT1y +CnJldHVybiByfSwKQnAoYSl7dmFyIHMscj12LnR5cGVzLHE9clthXQppZih0eXBlb2YgcT09InN0cmlu +ZyIpe3M9QS5FKHYudHlwZVVuaXZlcnNlLHEsITEpCnJbYV09cwpyZXR1cm4gc31yZXR1cm4gcX0sCkt4 +KGEpe3ZhciBzLHIscSxwPWEudwppZihwIT1udWxsKXJldHVybiBwCnM9YS5hdApyPXMucmVwbGFjZSgv +XCovZywiIikKaWYocj09PXMpcmV0dXJuIGEudz1uZXcgQS5sWShhKQpxPUEuRSh2LnR5cGVVbml2ZXJz +ZSxyLCEwKQpwPXEudwpyZXR1cm4gYS53PXA9PW51bGw/cS53PW5ldyBBLmxZKHEpOnB9LAp4cShhKXty +ZXR1cm4gQS5LeChBLkUodi50eXBlVW5pdmVyc2UsYSwhMSkpfSwKSkooYSl7dmFyIHMscixxLHAsbz10 +aGlzCmlmKG89PT10LkspcmV0dXJuIEEuUkUobyxhLEEua2UpCmlmKCFBLkE4KG8pKWlmKCEobz09PXQu +Xykpcz0hMQplbHNlIHM9ITAKZWxzZSBzPSEwCmlmKHMpcmV0dXJuIEEuUkUobyxhLEEuSXcpCnM9by54 +CnI9cz09PTY/by55Om8KaWYocj09PXQuUylxPUEub2sKZWxzZSBpZihyPT09dC5nUnx8cj09PXQuZGkp +cT1BLktICmVsc2UgaWYocj09PXQuTilxPUEuTU0KZWxzZSBxPXI9PT10Lnk/QS5yUTpudWxsCmlmKHEh +PW51bGwpcmV0dXJuIEEuUkUobyxhLHEpCmlmKHIueD09PTkpe3A9ci55CmlmKHIuei5ldmVyeShBLmNj +KSl7by5yPSIkaSIrcAppZihwPT09InpNIilyZXR1cm4gQS5SRShvLGEsQS55TSkKcmV0dXJuIEEuUkUo +byxhLEEudDQpfX1lbHNlIGlmKHM9PT03KXJldHVybiBBLlJFKG8sYSxBLkFRKQpyZXR1cm4gQS5SRShv +LGEsQS5ZTyl9LApSRShhLGIsYyl7YS5iPWMKcmV0dXJuIGEuYihiKX0sCkF1KGEpe3ZhciBzLHI9dGhp +cyxxPUEuT3oKaWYoIUEuQTgocikpaWYoIShyPT09dC5fKSlzPSExCmVsc2Ugcz0hMAplbHNlIHM9ITAK +aWYocylxPUEuaG4KZWxzZSBpZihyPT09dC5LKXE9QS5UaQplbHNle3M9QS5sUihyKQppZihzKXE9QS5s +NH1yLmE9cQpyZXR1cm4gci5hKGEpfSwKUWooYSl7dmFyIHMscj1hLngKaWYoIUEuQTgoYSkpaWYoIShh +PT09dC5fKSlpZighKGE9PT10LmF3KSlpZihyIT09NylzPXI9PT04JiZBLlFqKGEueSl8fGE9PT10LlB8 +fGE9PT10LlQKZWxzZSBzPSEwCmVsc2Ugcz0hMAplbHNlIHM9ITAKZWxzZSBzPSEwCnJldHVybiBzfSwK +WU8oYSl7dmFyIHM9dGhpcwppZihhPT1udWxsKXJldHVybiBBLlFqKHMpCnJldHVybiBBLldlKHYudHlw +ZVVuaXZlcnNlLEEuVWUoYSxzKSxudWxsLHMsbnVsbCl9LApBUShhKXtpZihhPT1udWxsKXJldHVybiEw +CnJldHVybiB0aGlzLnkuYihhKX0sCnQ0KGEpe3ZhciBzLHI9dGhpcwppZihhPT1udWxsKXJldHVybiBB +LlFqKHIpCnM9ci5yCmlmKGEgaW5zdGFuY2VvZiBBLk1oKXJldHVybiEhYVtzXQpyZXR1cm4hIUouaWEo +YSlbc119LAp5TShhKXt2YXIgcyxyPXRoaXMKaWYoYT09bnVsbClyZXR1cm4gQS5RaihyKQppZih0eXBl +b2YgYSE9Im9iamVjdCIpcmV0dXJuITEKaWYoQXJyYXkuaXNBcnJheShhKSlyZXR1cm4hMApzPXIucgpp +ZihhIGluc3RhbmNlb2YgQS5NaClyZXR1cm4hIWFbc10KcmV0dXJuISFKLmlhKGEpW3NdfSwKT3ooYSl7 +dmFyIHMscj10aGlzCmlmKGE9PW51bGwpe3M9QS5sUihyKQppZihzKXJldHVybiBhfWVsc2UgaWYoci5i +KGEpKXJldHVybiBhCkEubTQoYSxyKX0sCmw0KGEpe3ZhciBzPXRoaXMKaWYoYT09bnVsbClyZXR1cm4g +YQplbHNlIGlmKHMuYihhKSlyZXR1cm4gYQpBLm00KGEscyl9LAptNChhLGIpe3Rocm93IEEuYihBLlpj +KEEuV0soYSxBLlVlKGEsYiksQS5kbShiLG51bGwpKSkpfSwKRGgoYSxiLGMsZCl7dmFyIHM9bnVsbApp +ZihBLldlKHYudHlwZVVuaXZlcnNlLGEscyxiLHMpKXJldHVybiBhCnRocm93IEEuYihBLlpjKCJUaGUg +dHlwZSBhcmd1bWVudCAnIitBLmRtKGEscykrIicgaXMgbm90IGEgc3VidHlwZSBvZiB0aGUgdHlwZSB2 +YXJpYWJsZSBib3VuZCAnIitBLmRtKGIscykrIicgb2YgdHlwZSB2YXJpYWJsZSAnIitjKyInIGluICci +K2QrIicuIikpfSwKV0soYSxiLGMpe3ZhciBzPUEuaGwoYSkKcmV0dXJuIHMrIjogdHlwZSAnIitBLmRt +KGI9PW51bGw/QS56SyhhKTpiLG51bGwpKyInIGlzIG5vdCBhIHN1YnR5cGUgb2YgdHlwZSAnIitjKyIn +In0sClpjKGEpe3JldHVybiBuZXcgQS5pTSgiVHlwZUVycm9yOiAiK2EpfSwKcShhLGIpe3JldHVybiBu +ZXcgQS5pTSgiVHlwZUVycm9yOiAiK0EuV0soYSxudWxsLGIpKX0sCmtlKGEpe3JldHVybiBhIT1udWxs +fSwKVGkoYSl7aWYoYSE9bnVsbClyZXR1cm4gYQp0aHJvdyBBLmIoQS5xKGEsIk9iamVjdCIpKX0sCkl3 +KGEpe3JldHVybiEwfSwKaG4oYSl7cmV0dXJuIGF9LApyUShhKXtyZXR1cm4hMD09PWF8fCExPT09YX0s +CnA4KGEpe2lmKCEwPT09YSlyZXR1cm4hMAppZighMT09PWEpcmV0dXJuITEKdGhyb3cgQS5iKEEucShh +LCJib29sIikpfSwKbUwoYSl7aWYoITA9PT1hKXJldHVybiEwCmlmKCExPT09YSlyZXR1cm4hMQppZihh +PT1udWxsKXJldHVybiBhCnRocm93IEEuYihBLnEoYSwiYm9vbCIpKX0sCk00KGEpe2lmKCEwPT09YSly +ZXR1cm4hMAppZighMT09PWEpcmV0dXJuITEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBBLmIoQS5x +KGEsImJvb2w/IikpfSwKclYoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCnRocm93IEEu +YihBLnEoYSwiZG91YmxlIikpfSwKdEYoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlm +KGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgQS5iKEEucShhLCJkb3VibGUiKSl9LApRayhhKXtpZih0eXBl b2YgYT09Im51bWJlciIpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBBLmIoQS5xKGEs -Im51bT8iKSl9LApNTShhKXtyZXR1cm4gdHlwZW9mIGE9PSJzdHJpbmcifSwKbihhKXtpZih0eXBlb2Yg -YT09InN0cmluZyIpcmV0dXJuIGEKdGhyb3cgQS5iKEEucShhLCJTdHJpbmciKSl9LApoTihhKXtpZih0 -eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBBLmIoQS5x -KGEsIlN0cmluZyIpKX0sCmsoYSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhCmlmKGE9PW51 -bGwpcmV0dXJuIGEKdGhyb3cgQS5iKEEucShhLCJTdHJpbmc/IikpfSwKaW8oYSxiKXt2YXIgcyxyLHEK -Zm9yKHM9IiIscj0iIixxPTA7cTxhLmxlbmd0aDsrK3Escj0iLCAiKXMrPXIrQS5kbShhW3FdLGIpCnJl -dHVybiBzfSwKYkkoYTQsYTUsYTYpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGMs -YixhLGEwLGExLGEyLGEzPSIsICIKaWYoYTYhPW51bGwpe3M9YTYubGVuZ3RoCmlmKGE1PT1udWxsKXth -NT1BLlFJKFtdLHQucykKcj1udWxsfWVsc2Ugcj1hNS5sZW5ndGgKcT1hNS5sZW5ndGgKZm9yKHA9cztw -PjA7LS1wKUIuTm0uaShhNSwiVCIrKHErcCkpCmZvcihvPXQuWCxuPXQuXyxtPSI8IixsPSIiLHA9MDtw -PHM7KytwLGw9YTMpe2s9YTUubGVuZ3RoCmo9ay0xLXAKaWYoIShqPj0wKSlyZXR1cm4gQS5PSChhNSxq -KQptPUIueEIuaChtK2wsYTVbal0pCmk9YTZbcF0KaD1pLngKaWYoIShoPT09Mnx8aD09PTN8fGg9PT00 -fHxoPT09NXx8aT09PW8pKWlmKCEoaT09PW4pKWs9ITEKZWxzZSBrPSEwCmVsc2Ugaz0hMAppZighaylt -Kz0iIGV4dGVuZHMgIitBLmRtKGksYTUpfW0rPSI+In1lbHNle209IiIKcj1udWxsfW89YTQueQpnPWE0 -LnoKZj1nLmEKZT1mLmxlbmd0aApkPWcuYgpjPWQubGVuZ3RoCmI9Zy5jCmE9Yi5sZW5ndGgKYTA9QS5k -bShvLGE1KQpmb3IoYTE9IiIsYTI9IiIscD0wO3A8ZTsrK3AsYTI9YTMpYTErPWEyK0EuZG0oZltwXSxh -NSkKaWYoYz4wKXthMSs9YTIrIlsiCmZvcihhMj0iIixwPTA7cDxjOysrcCxhMj1hMylhMSs9YTIrQS5k -bShkW3BdLGE1KQphMSs9Il0ifWlmKGE+MCl7YTErPWEyKyJ7Igpmb3IoYTI9IiIscD0wO3A8YTtwKz0z -LGEyPWEzKXthMSs9YTIKaWYoYltwKzFdKWExKz0icmVxdWlyZWQgIgphMSs9QS5kbShiW3ArMl0sYTUp -KyIgIitiW3BdfWExKz0ifSJ9aWYociE9bnVsbCl7YTUudG9TdHJpbmcKYTUubGVuZ3RoPXJ9cmV0dXJu -IG0rIigiK2ExKyIpID0+ICIrYTB9LApkbShhLGIpe3ZhciBzLHIscSxwLG8sbixtLGw9YS54CmlmKGw9 -PT01KXJldHVybiJlcmFzZWQiCmlmKGw9PT0yKXJldHVybiJkeW5hbWljIgppZihsPT09MylyZXR1cm4i -dm9pZCIKaWYobD09PTEpcmV0dXJuIk5ldmVyIgppZihsPT09NClyZXR1cm4iYW55IgppZihsPT09Nil7 -cz1BLmRtKGEueSxiKQpyZXR1cm4gc31pZihsPT09Nyl7cj1hLnkKcz1BLmRtKHIsYikKcT1yLngKcmV0 -dXJuKHE9PT0xMXx8cT09PTEyPyIoIitzKyIpIjpzKSsiPyJ9aWYobD09PTgpcmV0dXJuIkZ1dHVyZU9y -PCIrQS5kbShhLnksYikrIj4iCmlmKGw9PT05KXtwPUEubzMoYS55KQpvPWEuegpyZXR1cm4gby5sZW5n -dGg+MD9wKygiPCIrQS5pbyhvLGIpKyI+Iik6cH1pZihsPT09MTEpcmV0dXJuIEEuYkkoYSxiLG51bGwp -CmlmKGw9PT0xMilyZXR1cm4gQS5iSShhLnksYixhLnopCmlmKGw9PT0xMyl7bj1hLnkKbT1iLmxlbmd0 -aApuPW0tMS1uCmlmKCEobj49MCYmbjxtKSlyZXR1cm4gQS5PSChiLG4pCnJldHVybiBiW25dfXJldHVy -biI/In0sCm8zKGEpe3ZhciBzPXYubWFuZ2xlZEdsb2JhbE5hbWVzW2FdCmlmKHMhPW51bGwpcmV0dXJu -IHMKcmV0dXJuIm1pbmlmaWVkOiIrYX0sClFvKGEsYil7dmFyIHM9YS50UltiXQpmb3IoO3R5cGVvZiBz -PT0ic3RyaW5nIjspcz1hLnRSW3NdCnJldHVybiBzfSwKYWkoYSxiKXt2YXIgcyxyLHEscCxvLG49YS5l -VCxtPW5bYl0KaWYobT09bnVsbClyZXR1cm4gQS5FKGEsYiwhMSkKZWxzZSBpZih0eXBlb2YgbT09Im51 -bWJlciIpe3M9bQpyPUEubShhLDUsIiMiKQpxPUEudlUocykKZm9yKHA9MDtwPHM7KytwKXFbcF09cgpv -PUEuSihhLGIscSkKbltiXT1vCnJldHVybiBvfWVsc2UgcmV0dXJuIG19LAp4YihhLGIpe3JldHVybiBB -Lkl4KGEudFIsYil9LApGRihhLGIpe3JldHVybiBBLkl4KGEuZVQsYil9LApFKGEsYixjKXt2YXIgcyxy -PWEuZUMscT1yLmdldChiKQppZihxIT1udWxsKXJldHVybiBxCnM9QS5pKEEubyhhLG51bGwsYixjKSkK -ci5zZXQoYixzKQpyZXR1cm4gc30sCmNFKGEsYixjKXt2YXIgcyxyLHE9Yi5RCmlmKHE9PW51bGwpcT1i -LlE9bmV3IE1hcCgpCnM9cS5nZXQoYykKaWYocyE9bnVsbClyZXR1cm4gcwpyPUEuaShBLm8oYSxiLGMs -ITApKQpxLnNldChjLHIpCnJldHVybiByfSwKdjUoYSxiLGMpe3ZhciBzLHIscSxwPWIuYXMKaWYocD09 -bnVsbClwPWIuYXM9bmV3IE1hcCgpCnM9Yy5hdApyPXAuZ2V0KHMpCmlmKHIhPW51bGwpcmV0dXJuIHIK -cT1BLmEoYSxiLGMueD09PTEwP2MuejpbY10pCnAuc2V0KHMscSkKcmV0dXJuIHF9LApCRChhLGIpe2Iu -YT1BLkF1CmIuYj1BLkpKCnJldHVybiBifSwKbShhLGIsYyl7dmFyIHMscixxPWEuZUMuZ2V0KGMpCmlm -KHEhPW51bGwpcmV0dXJuIHEKcz1uZXcgQS5KYyhudWxsLG51bGwpCnMueD1iCnMuYXQ9YwpyPUEuQkQo -YSxzKQphLmVDLnNldChjLHIpCnJldHVybiByfSwKQyhhLGIsYyl7dmFyIHMscj1iLmF0KyIqIixxPWEu -ZUMuZ2V0KHIpCmlmKHEhPW51bGwpcmV0dXJuIHEKcz1BLlo3KGEsYixyLGMpCmEuZUMuc2V0KHIscykK -cmV0dXJuIHN9LApaNyhhLGIsYyxkKXt2YXIgcyxyLHEKaWYoZCl7cz1iLngKaWYoIUEuQTgoYikpcj1i -PT09dC5QfHxiPT09dC5UfHxzPT09N3x8cz09PTYKZWxzZSByPSEwCmlmKHIpcmV0dXJuIGJ9cT1uZXcg -QS5KYyhudWxsLG51bGwpCnEueD02CnEueT1iCnEuYXQ9YwpyZXR1cm4gQS5CRChhLHEpfSwKQihhLGIs -Yyl7dmFyIHMscj1iLmF0KyI/IixxPWEuZUMuZ2V0KHIpCmlmKHEhPW51bGwpcmV0dXJuIHEKcz1BLmxs -KGEsYixyLGMpCmEuZUMuc2V0KHIscykKcmV0dXJuIHN9LApsbChhLGIsYyxkKXt2YXIgcyxyLHEscApp -ZihkKXtzPWIueAppZighQS5BOChiKSlpZighKGI9PT10LlB8fGI9PT10LlQpKWlmKHMhPT03KXI9cz09 -PTgmJkEubFIoYi55KQplbHNlIHI9ITAKZWxzZSByPSEwCmVsc2Ugcj0hMAppZihyKXJldHVybiBiCmVs -c2UgaWYocz09PTF8fGI9PT10LmF3KXJldHVybiB0LlAKZWxzZSBpZihzPT09Nil7cT1iLnkKaWYocS54 -PT09OCYmQS5sUihxLnkpKXJldHVybiBxCmVsc2UgcmV0dXJuIEEuY3ooYSxiKX19cD1uZXcgQS5KYyhu -dWxsLG51bGwpCnAueD03CnAueT1iCnAuYXQ9YwpyZXR1cm4gQS5CRChhLHApfSwKZihhLGIsYyl7dmFy -IHMscj1iLmF0KyIvIixxPWEuZUMuZ2V0KHIpCmlmKHEhPW51bGwpcmV0dXJuIHEKcz1BLmVWKGEsYixy -LGMpCmEuZUMuc2V0KHIscykKcmV0dXJuIHN9LAplVihhLGIsYyxkKXt2YXIgcyxyLHEKaWYoZCl7cz1i -LngKaWYoIUEuQTgoYikpaWYoIShiPT09dC5fKSlyPSExCmVsc2Ugcj0hMAplbHNlIHI9ITAKaWYocnx8 -Yj09PXQuSylyZXR1cm4gYgplbHNlIGlmKHM9PT0xKXJldHVybiBBLkooYSwiYjgiLFtiXSkKZWxzZSBp -ZihiPT09dC5QfHxiPT09dC5UKXJldHVybiB0LmJHfXE9bmV3IEEuSmMobnVsbCxudWxsKQpxLng9OApx -Lnk9YgpxLmF0PWMKcmV0dXJuIEEuQkQoYSxxKX0sCkgoYSxiKXt2YXIgcyxyLHE9IiIrYisiXiIscD1h -LmVDLmdldChxKQppZihwIT1udWxsKXJldHVybiBwCnM9bmV3IEEuSmMobnVsbCxudWxsKQpzLng9MTMK -cy55PWIKcy5hdD1xCnI9QS5CRChhLHMpCmEuZUMuc2V0KHEscikKcmV0dXJuIHJ9LApVeChhKXt2YXIg -cyxyLHEscD1hLmxlbmd0aApmb3Iocz0iIixyPSIiLHE9MDtxPHA7KytxLHI9IiwiKXMrPXIrYVtxXS5h -dApyZXR1cm4gc30sClM0KGEpe3ZhciBzLHIscSxwLG8sbj1hLmxlbmd0aApmb3Iocz0iIixyPSIiLHE9 -MDtxPG47cSs9MyxyPSIsIil7cD1hW3FdCm89YVtxKzFdPyIhIjoiOiIKcys9citwK28rYVtxKzJdLmF0 -fXJldHVybiBzfSwKSihhLGIsYyl7dmFyIHMscixxLHA9YgppZihjLmxlbmd0aD4wKXArPSI8IitBLlV4 -KGMpKyI+IgpzPWEuZUMuZ2V0KHApCmlmKHMhPW51bGwpcmV0dXJuIHMKcj1uZXcgQS5KYyhudWxsLG51 -bGwpCnIueD05CnIueT1iCnIuej1jCmlmKGMubGVuZ3RoPjApci5jPWNbMF0Kci5hdD1wCnE9QS5CRChh -LHIpCmEuZUMuc2V0KHAscSkKcmV0dXJuIHF9LAphKGEsYixjKXt2YXIgcyxyLHEscCxvLG4KaWYoYi54 -PT09MTApe3M9Yi55CnI9Yi56LmNvbmNhdChjKX1lbHNle3I9YwpzPWJ9cT1zLmF0KygiOzwiK0EuVXgo -cikrIj4iKQpwPWEuZUMuZ2V0KHEpCmlmKHAhPW51bGwpcmV0dXJuIHAKbz1uZXcgQS5KYyhudWxsLG51 -bGwpCm8ueD0xMApvLnk9cwpvLno9cgpvLmF0PXEKbj1BLkJEKGEsbykKYS5lQy5zZXQocSxuKQpyZXR1 -cm4gbn0sCmQoYSxiLGMpe3ZhciBzLHIscSxwLG8sbj1iLmF0LG09Yy5hLGw9bS5sZW5ndGgsaz1jLmIs -aj1rLmxlbmd0aCxpPWMuYyxoPWkubGVuZ3RoLGc9IigiK0EuVXgobSkKaWYoaj4wKXtzPWw+MD8iLCI6 -IiIKZys9cysiWyIrQS5VeChrKSsiXSJ9aWYoaD4wKXtzPWw+MD8iLCI6IiIKZys9cysieyIrQS5TNChp -KSsifSJ9cj1uKyhnKyIpIikKcT1hLmVDLmdldChyKQppZihxIT1udWxsKXJldHVybiBxCnA9bmV3IEEu -SmMobnVsbCxudWxsKQpwLng9MTEKcC55PWIKcC56PWMKcC5hdD1yCm89QS5CRChhLHApCmEuZUMuc2V0 -KHIsbykKcmV0dXJuIG99LApEKGEsYixjLGQpe3ZhciBzLHI9Yi5hdCsoIjwiK0EuVXgoYykrIj4iKSxx -PWEuZUMuZ2V0KHIpCmlmKHEhPW51bGwpcmV0dXJuIHEKcz1BLmh3KGEsYixjLHIsZCkKYS5lQy5zZXQo -cixzKQpyZXR1cm4gc30sCmh3KGEsYixjLGQsZSl7dmFyIHMscixxLHAsbyxuLG0sbAppZihlKXtzPWMu -bGVuZ3RoCnI9QS52VShzKQpmb3IocT0wLHA9MDtwPHM7KytwKXtvPWNbcF0KaWYoby54PT09MSl7cltw -XT1vOysrcX19aWYocT4wKXtuPUEuUEwoYSxiLHIsMCkKbT1BLmJaKGEsYyxyLDApCnJldHVybiBBLkQo -YSxuLG0sYyE9PW0pfX1sPW5ldyBBLkpjKG51bGwsbnVsbCkKbC54PTEyCmwueT1iCmwuej1jCmwuYXQ9 -ZApyZXR1cm4gQS5CRChhLGwpfSwKbyhhLGIsYyxkKXtyZXR1cm57dTphLGU6YixyOmMsczpbXSxwOjAs -bjpkfX0sCmkoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoPWEucixnPWEucwpmb3Iocz1oLmxl -bmd0aCxyPTA7cjxzOyl7cT1oLmNoYXJDb2RlQXQocikKaWYocT49NDgmJnE8PTU3KXI9QS5BKHIrMSxx -LGgsZykKZWxzZSBpZigoKChxfDMyKT4+PjApLTk3JjY1NTM1KTwyNnx8cT09PTk1fHxxPT09MzYpcj1B -LnQoYSxyLGgsZywhMSkKZWxzZSBpZihxPT09NDYpcj1BLnQoYSxyLGgsZywhMCkKZWxzZXsrK3IKc3dp -dGNoKHEpe2Nhc2UgNDQ6YnJlYWsKY2FzZSA1ODpnLnB1c2goITEpCmJyZWFrCmNhc2UgMzM6Zy5wdXNo -KCEwKQpicmVhawpjYXNlIDU5OmcucHVzaChBLksoYS51LGEuZSxnLnBvcCgpKSkKYnJlYWsKY2FzZSA5 -NDpnLnB1c2goQS5IKGEudSxnLnBvcCgpKSkKYnJlYWsKY2FzZSAzNTpnLnB1c2goQS5tKGEudSw1LCIj -IikpCmJyZWFrCmNhc2UgNjQ6Zy5wdXNoKEEubShhLnUsMiwiQCIpKQpicmVhawpjYXNlIDEyNjpnLnB1 -c2goQS5tKGEudSwzLCJ+IikpCmJyZWFrCmNhc2UgNjA6Zy5wdXNoKGEucCkKYS5wPWcubGVuZ3RoCmJy -ZWFrCmNhc2UgNjI6cD1hLnUKbz1nLnNwbGljZShhLnApCkEucihhLnUsYS5lLG8pCmEucD1nLnBvcCgp -Cm49Zy5wb3AoKQppZih0eXBlb2Ygbj09InN0cmluZyIpZy5wdXNoKEEuSihwLG4sbykpCmVsc2V7bT1B -LksocCxhLmUsbikKc3dpdGNoKG0ueCl7Y2FzZSAxMTpnLnB1c2goQS5EKHAsbSxvLGEubikpCmJyZWFr -CmRlZmF1bHQ6Zy5wdXNoKEEuYShwLG0sbykpCmJyZWFrfX1icmVhawpjYXNlIDM4OkEuSShhLGcpCmJy -ZWFrCmNhc2UgNDI6cD1hLnUKZy5wdXNoKEEuQyhwLEEuSyhwLGEuZSxnLnBvcCgpKSxhLm4pKQpicmVh -awpjYXNlIDYzOnA9YS51CmcucHVzaChBLkIocCxBLksocCxhLmUsZy5wb3AoKSksYS5uKSkKYnJlYWsK -Y2FzZSA0NzpwPWEudQpnLnB1c2goQS5mKHAsQS5LKHAsYS5lLGcucG9wKCkpLGEubikpCmJyZWFrCmNh -c2UgNDA6Zy5wdXNoKGEucCkKYS5wPWcubGVuZ3RoCmJyZWFrCmNhc2UgNDE6cD1hLnUKbD1uZXcgQS5H -KCkKaz1wLnNFQQpqPXAuc0VBCm49Zy5wb3AoKQppZih0eXBlb2Ygbj09Im51bWJlciIpc3dpdGNoKG4p -e2Nhc2UtMTprPWcucG9wKCkKYnJlYWsKY2FzZS0yOmo9Zy5wb3AoKQpicmVhawpkZWZhdWx0OmcucHVz -aChuKQpicmVha31lbHNlIGcucHVzaChuKQpvPWcuc3BsaWNlKGEucCkKQS5yKGEudSxhLmUsbykKYS5w -PWcucG9wKCkKbC5hPW8KbC5iPWsKbC5jPWoKZy5wdXNoKEEuZChwLEEuSyhwLGEuZSxnLnBvcCgpKSxs -KSkKYnJlYWsKY2FzZSA5MTpnLnB1c2goYS5wKQphLnA9Zy5sZW5ndGgKYnJlYWsKY2FzZSA5MzpvPWcu -c3BsaWNlKGEucCkKQS5yKGEudSxhLmUsbykKYS5wPWcucG9wKCkKZy5wdXNoKG8pCmcucHVzaCgtMSkK -YnJlYWsKY2FzZSAxMjM6Zy5wdXNoKGEucCkKYS5wPWcubGVuZ3RoCmJyZWFrCmNhc2UgMTI1Om89Zy5z -cGxpY2UoYS5wKQpBLnkoYS51LGEuZSxvKQphLnA9Zy5wb3AoKQpnLnB1c2gobykKZy5wdXNoKC0yKQpi -cmVhawpkZWZhdWx0OnRocm93IkJhZCBjaGFyYWN0ZXIgIitxfX19aT1nLnBvcCgpCnJldHVybiBBLkso -YS51LGEuZSxpKX0sCkEoYSxiLGMsZCl7dmFyIHMscixxPWItNDgKZm9yKHM9Yy5sZW5ndGg7YTxzOysr -YSl7cj1jLmNoYXJDb2RlQXQoYSkKaWYoIShyPj00OCYmcjw9NTcpKWJyZWFrCnE9cSoxMCsoci00OCl9 -ZC5wdXNoKHEpCnJldHVybiBhfSwKdChhLGIsYyxkLGUpe3ZhciBzLHIscSxwLG8sbixtPWIrMQpmb3Io -cz1jLmxlbmd0aDttPHM7KyttKXtyPWMuY2hhckNvZGVBdChtKQppZihyPT09NDYpe2lmKGUpYnJlYWsK -ZT0hMH1lbHNle2lmKCEoKCgocnwzMik+Pj4wKS05NyY2NTUzNSk8MjZ8fHI9PT05NXx8cj09PTM2KSlx -PXI+PTQ4JiZyPD01NwplbHNlIHE9ITAKaWYoIXEpYnJlYWt9fXA9Yy5zdWJzdHJpbmcoYixtKQppZihl -KXtzPWEudQpvPWEuZQppZihvLng9PT0xMClvPW8ueQpuPUEuUW8ocyxvLnkpW3BdCmlmKG49PW51bGwp -QS52KCdObyAiJytwKyciIGluICInK0EubUQobykrJyInKQpkLnB1c2goQS5jRShzLG8sbikpfWVsc2Ug -ZC5wdXNoKHApCnJldHVybiBtfSwKSShhLGIpe3ZhciBzPWIucG9wKCkKaWYoMD09PXMpe2IucHVzaChB -Lm0oYS51LDEsIjAmIikpCnJldHVybn1pZigxPT09cyl7Yi5wdXNoKEEubShhLnUsNCwiMSYiKSkKcmV0 -dXJufXRocm93IEEuYihBLmhWKCJVbmV4cGVjdGVkIGV4dGVuZGVkIG9wZXJhdGlvbiAiK0EuRWoocykp -KX0sCksoYSxiLGMpe2lmKHR5cGVvZiBjPT0ic3RyaW5nIilyZXR1cm4gQS5KKGEsYyxhLnNFQSkKZWxz -ZSBpZih0eXBlb2YgYz09Im51bWJlciIpcmV0dXJuIEEuVFYoYSxiLGMpCmVsc2UgcmV0dXJuIGN9LApy -KGEsYixjKXt2YXIgcyxyPWMubGVuZ3RoCmZvcihzPTA7czxyOysrcyljW3NdPUEuSyhhLGIsY1tzXSl9 -LAp5KGEsYixjKXt2YXIgcyxyPWMubGVuZ3RoCmZvcihzPTI7czxyO3MrPTMpY1tzXT1BLksoYSxiLGNb -c10pfSwKVFYoYSxiLGMpe3ZhciBzLHIscT1iLngKaWYocT09PTEwKXtpZihjPT09MClyZXR1cm4gYi55 -CnM9Yi56CnI9cy5sZW5ndGgKaWYoYzw9cilyZXR1cm4gc1tjLTFdCmMtPXIKYj1iLnkKcT1iLnh9ZWxz -ZSBpZihjPT09MClyZXR1cm4gYgppZihxIT09OSl0aHJvdyBBLmIoQS5oVigiSW5kZXhlZCBiYXNlIG11 -c3QgYmUgYW4gaW50ZXJmYWNlIHR5cGUiKSkKcz1iLnoKaWYoYzw9cy5sZW5ndGgpcmV0dXJuIHNbYy0x -XQp0aHJvdyBBLmIoQS5oVigiQmFkIGluZGV4ICIrYysiIGZvciAiK2JbIlsiXSgwKSkpfSwKV2UoYSxi -LGMsZCxlKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssagppZihiPT09ZClyZXR1cm4hMAppZighQS5BOChk -KSlpZighKGQ9PT10Ll8pKXM9ITEKZWxzZSBzPSEwCmVsc2Ugcz0hMAppZihzKXJldHVybiEwCnI9Yi54 -CmlmKHI9PT00KXJldHVybiEwCmlmKEEuQTgoYikpcmV0dXJuITEKaWYoYi54IT09MSlzPSExCmVsc2Ug -cz0hMAppZihzKXJldHVybiEwCnE9cj09PTEzCmlmKHEpaWYoQS5XZShhLGNbYi55XSxjLGQsZSkpcmV0 -dXJuITAKcD1kLngKcz1iPT09dC5QfHxiPT09dC5UCmlmKHMpe2lmKHA9PT04KXJldHVybiBBLldlKGEs -YixjLGQueSxlKQpyZXR1cm4gZD09PXQuUHx8ZD09PXQuVHx8cD09PTd8fHA9PT02fWlmKGQ9PT10Lksp -e2lmKHI9PT04KXJldHVybiBBLldlKGEsYi55LGMsZCxlKQppZihyPT09NilyZXR1cm4gQS5XZShhLGIu -eSxjLGQsZSkKcmV0dXJuIHIhPT03fWlmKHI9PT02KXJldHVybiBBLldlKGEsYi55LGMsZCxlKQppZihw -PT09Nil7cz1BLmN6KGEsZCkKcmV0dXJuIEEuV2UoYSxiLGMscyxlKX1pZihyPT09OCl7aWYoIUEuV2Uo -YSxiLnksYyxkLGUpKXJldHVybiExCnJldHVybiBBLldlKGEsQS54WihhLGIpLGMsZCxlKX1pZihyPT09 -Nyl7cz1BLldlKGEsdC5QLGMsZCxlKQpyZXR1cm4gcyYmQS5XZShhLGIueSxjLGQsZSl9aWYocD09PTgp -e2lmKEEuV2UoYSxiLGMsZC55LGUpKXJldHVybiEwCnJldHVybiBBLldlKGEsYixjLEEueFooYSxkKSxl -KX1pZihwPT09Nyl7cz1BLldlKGEsYixjLHQuUCxlKQpyZXR1cm4gc3x8QS5XZShhLGIsYyxkLnksZSl9 -aWYocSlyZXR1cm4hMQpzPXIhPT0xMQppZigoIXN8fHI9PT0xMikmJmQ9PT10LlkpcmV0dXJuITAKaWYo -cD09PTEyKXtpZihiPT09dC5FKXJldHVybiEwCmlmKHIhPT0xMilyZXR1cm4hMQpvPWIuegpuPWQuegpt -PW8ubGVuZ3RoCmlmKG0hPT1uLmxlbmd0aClyZXR1cm4hMQpjPWM9PW51bGw/bzpvLmNvbmNhdChjKQpl -PWU9PW51bGw/bjpuLmNvbmNhdChlKQpmb3IobD0wO2w8bTsrK2wpe2s9b1tsXQpqPW5bbF0KaWYoIUEu -V2UoYSxrLGMsaixlKXx8IUEuV2UoYSxqLGUsayxjKSlyZXR1cm4hMX1yZXR1cm4gQS5iTyhhLGIueSxj -LGQueSxlKX1pZihwPT09MTEpe2lmKGI9PT10LkUpcmV0dXJuITAKaWYocylyZXR1cm4hMQpyZXR1cm4g -QS5iTyhhLGIsYyxkLGUpfWlmKHI9PT05KXtpZihwIT09OSlyZXR1cm4hMQpyZXR1cm4gQS5wRyhhLGIs -YyxkLGUpfXJldHVybiExfSwKYk8oYTMsYTQsYTUsYTYsYTcpe3ZhciBzLHIscSxwLG8sbixtLGwsayxq -LGksaCxnLGYsZSxkLGMsYixhLGEwLGExLGEyCmlmKCFBLldlKGEzLGE0LnksYTUsYTYueSxhNykpcmV0 -dXJuITEKcz1hNC56CnI9YTYuegpxPXMuYQpwPXIuYQpvPXEubGVuZ3RoCm49cC5sZW5ndGgKaWYobz5u -KXJldHVybiExCm09bi1vCmw9cy5iCms9ci5iCmo9bC5sZW5ndGgKaT1rLmxlbmd0aAppZihvK2o8bitp -KXJldHVybiExCmZvcihoPTA7aDxvOysraCl7Zz1xW2hdCmlmKCFBLldlKGEzLHBbaF0sYTcsZyxhNSkp -cmV0dXJuITF9Zm9yKGg9MDtoPG07KytoKXtnPWxbaF0KaWYoIUEuV2UoYTMscFtvK2hdLGE3LGcsYTUp -KXJldHVybiExfWZvcihoPTA7aDxpOysraCl7Zz1sW20raF0KaWYoIUEuV2UoYTMsa1toXSxhNyxnLGE1 -KSlyZXR1cm4hMX1mPXMuYwplPXIuYwpkPWYubGVuZ3RoCmM9ZS5sZW5ndGgKZm9yKGI9MCxhPTA7YTxj -O2ErPTMpe2EwPWVbYV0KZm9yKDshMDspe2lmKGI+PWQpcmV0dXJuITEKYTE9ZltiXQpiKz0zCmlmKGEw -PGExKXJldHVybiExCmEyPWZbYi0yXQppZihhMTxhMCl7aWYoYTIpcmV0dXJuITEKY29udGludWV9Zz1l -W2ErMV0KaWYoYTImJiFnKXJldHVybiExCmc9ZltiLTFdCmlmKCFBLldlKGEzLGVbYSsyXSxhNyxnLGE1 -KSlyZXR1cm4hMQpicmVha319Zm9yKDtiPGQ7KXtpZihmW2IrMV0pcmV0dXJuITEKYis9M31yZXR1cm4h -MH0sCnBHKGEsYixjLGQsZSl7dmFyIHMscixxLHAsbyxuLG0sbD1iLnksaz1kLnkKZm9yKDtsIT09azsp -e3M9YS50UltsXQppZihzPT1udWxsKXJldHVybiExCmlmKHR5cGVvZiBzPT0ic3RyaW5nIil7bD1zCmNv -bnRpbnVlfXI9c1trXQppZihyPT1udWxsKXJldHVybiExCnE9ci5sZW5ndGgKcD1xPjA/bmV3IEFycmF5 -KHEpOnYudHlwZVVuaXZlcnNlLnNFQQpmb3Iobz0wO288cTsrK28pcFtvXT1BLmNFKGEsYixyW29dKQpy -ZXR1cm4gQS5TVyhhLHAsbnVsbCxjLGQueixlKX1uPWIuegptPWQuegpyZXR1cm4gQS5TVyhhLG4sbnVs -bCxjLG0sZSl9LApTVyhhLGIsYyxkLGUsZil7dmFyIHMscixxLHA9Yi5sZW5ndGgKZm9yKHM9MDtzPHA7 -KytzKXtyPWJbc10KcT1lW3NdCmlmKCFBLldlKGEscixkLHEsZikpcmV0dXJuITF9cmV0dXJuITB9LAps -UihhKXt2YXIgcyxyPWEueAppZighKGE9PT10LlB8fGE9PT10LlQpKWlmKCFBLkE4KGEpKWlmKHIhPT03 -KWlmKCEocj09PTYmJkEubFIoYS55KSkpcz1yPT09OCYmQS5sUihhLnkpCmVsc2Ugcz0hMAplbHNlIHM9 -ITAKZWxzZSBzPSEwCmVsc2Ugcz0hMApyZXR1cm4gc30sCmNjKGEpe3ZhciBzCmlmKCFBLkE4KGEpKWlm -KCEoYT09PXQuXykpcz0hMQplbHNlIHM9ITAKZWxzZSBzPSEwCnJldHVybiBzfSwKQTgoYSl7dmFyIHM9 -YS54CnJldHVybiBzPT09Mnx8cz09PTN8fHM9PT00fHxzPT09NXx8YT09PXQuWH0sCkl4KGEsYil7dmFy -IHMscixxPU9iamVjdC5rZXlzKGIpLHA9cS5sZW5ndGgKZm9yKHM9MDtzPHA7KytzKXtyPXFbc10KYVty -XT1iW3JdfX0sCnZVKGEpe3JldHVybiBhPjA/bmV3IEFycmF5KGEpOnYudHlwZVVuaXZlcnNlLnNFQX0s -CkpjOmZ1bmN0aW9uIEpjKGEsYil7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLnc9Xy5yPV8uYz1udWxs -Cl8ueD0wCl8uYXQ9Xy5hcz1fLlE9Xy56PV8ueT1udWxsfSwKRzpmdW5jdGlvbiBHKCl7dGhpcy5jPXRo -aXMuYj10aGlzLmE9bnVsbH0sCmxZOmZ1bmN0aW9uIGxZKGEpe3RoaXMuYT1hfSwKa1M6ZnVuY3Rpb24g -a1MoKXt9LAppTTpmdW5jdGlvbiBpTShhKXt0aGlzLmE9YX0sCnhnKCl7dmFyIHMscixxPXt9CmlmKHNl -bGYuc2NoZWR1bGVJbW1lZGlhdGUhPW51bGwpcmV0dXJuIEEuRVgoKQppZihzZWxmLk11dGF0aW9uT2Jz -ZXJ2ZXIhPW51bGwmJnNlbGYuZG9jdW1lbnQhPW51bGwpe3M9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVt -ZW50KCJkaXYiKQpyPXNlbGYuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpCnEuYT1udWxsCm5l -dyBzZWxmLk11dGF0aW9uT2JzZXJ2ZXIoQS50UihuZXcgQS50aChxKSwxKSkub2JzZXJ2ZShzLHtjaGls -ZExpc3Q6dHJ1ZX0pCnJldHVybiBuZXcgQS5oYShxLHMscil9ZWxzZSBpZihzZWxmLnNldEltbWVkaWF0 -ZSE9bnVsbClyZXR1cm4gQS55dCgpCnJldHVybiBBLnFXKCl9LApaVihhKXtzZWxmLnNjaGVkdWxlSW1t -ZWRpYXRlKEEudFIobmV3IEEuVnModC5NLmEoYSkpLDApKX0sCm9BKGEpe3NlbGYuc2V0SW1tZWRpYXRl -KEEudFIobmV3IEEuRnQodC5NLmEoYSkpLDApKX0sCkJ6KGEpe3QuTS5hKGEpCkEuUU4oMCxhKX0sClFO -KGEsYil7dmFyIHM9bmV3IEEuVzMoKQpzLkNZKGEsYikKcmV0dXJuIHN9LApGWChhKXtyZXR1cm4gbmV3 -IEEuaWgobmV3IEEudnMoJC5YMyxhLkMoInZzPDA+IikpLGEuQygiaWg8MD4iKSl9LApESShhLGIpe2Eu -JDIoMCxudWxsKQpiLmI9ITAKcmV0dXJuIGIuYX0sCmpRKGEsYil7QS5KZShhLGIpfSwKeUMoYSxiKXti -LmFNKDAsYSl9LApmMyhhLGIpe2IudzAoQS5SdShhKSxBLnRzKGEpKX0sCkplKGEsYil7dmFyIHMscixx -PW5ldyBBLldNKGIpLHA9bmV3IEEuU1goYikKaWYoYSBpbnN0YW5jZW9mIEEudnMpYS5RZChxLHAsdC56 -KQplbHNle3M9dC56CmlmKHQuaS5iKGEpKWEuU3EocSxwLHMpCmVsc2V7cj1uZXcgQS52cygkLlgzLHQu -YykKci5hPTgKci5jPWEKci5RZChxLHAscyl9fX0sCmx6KGEpe3ZhciBzPWZ1bmN0aW9uKGIsYyl7cmV0 -dXJuIGZ1bmN0aW9uKGQsZSl7d2hpbGUodHJ1ZSl0cnl7YihkLGUpCmJyZWFrfWNhdGNoKHIpe2U9cgpk -PWN9fX0oYSwxKQpyZXR1cm4gJC5YMy5MaihuZXcgQS5HcyhzKSx0LkgsdC5TLHQueil9LApHUShhKXty -ZXR1cm4gbmV3IEEuRnkoYSwxKX0sClRoKCl7cmV0dXJuIEIud1F9LApZbShhKXtyZXR1cm4gbmV3IEEu -RnkoYSwzKX0sCmwwKGEsYil7cmV0dXJuIG5ldyBBLnE0KGEsYi5DKCJxNDwwPiIpKX0sClRsKGEsYil7 -dmFyIHM9QS5jYihhLCJlcnJvciIsdC5LKQpyZXR1cm4gbmV3IEEuQ3cocyxiPT1udWxsP0EudjAoYSk6 -Yil9LAp2MChhKXt2YXIgcwppZih0LnUuYihhKSl7cz1hLmdJSSgpCmlmKHMhPW51bGwpcmV0dXJuIHN9 -cmV0dXJuIEIucGR9LApBOShhLGIpe3ZhciBzLHIscQpmb3Iocz10LmM7cj1hLmEsKHImNCkhPT0wOylh -PXMuYShhLmMpCmlmKChyJjI0KSE9PTApe3E9Yi5haCgpCmIudWcoYSkKQS5IWihiLHEpfWVsc2V7cT10 -LmUuYShiLmMpCmIuYT1iLmEmMXw0CmIuYz1hCmEualEocSl9fSwKSFooYSxhMCl7dmFyIHMscixxLHAs -byxuLG0sbCxrLGosaSxoLGcsZixlLGQsYz17fSxiPWMuYT1hCmZvcihzPXQubixyPXQuZSxxPXQuaTsh -MDspe3A9e30Kbz1iLmEKbj0obyYxNik9PT0wCm09IW4KaWYoYTA9PW51bGwpe2lmKG0mJihvJjEpPT09 -MCl7bD1zLmEoYi5jKQpBLlNpKGwuYSxsLmIpfXJldHVybn1wLmE9YTAKaz1hMC5hCmZvcihiPWEwO2sh -PW51bGw7Yj1rLGs9ail7Yi5hPW51bGwKQS5IWihjLmEsYikKcC5hPWsKaj1rLmF9bz1jLmEKaT1vLmMK -cC5iPW0KcC5jPWkKaWYobil7aD1iLmMKaD0oaCYxKSE9PTB8fChoJjE1KT09PTh9ZWxzZSBoPSEwCmlm -KGgpe2c9Yi5iLmIKaWYobSl7bz1vLmI9PT1nCm89IShvfHxvKX1lbHNlIG89ITEKaWYobyl7cy5hKGkp -CkEuU2koaS5hLGkuYikKcmV0dXJufWY9JC5YMwppZihmIT09ZykkLlgzPWcKZWxzZSBmPW51bGwKYj1i -LmMKaWYoKGImMTUpPT09OCluZXcgQS5SVChwLGMsbSkuJDAoKQplbHNlIGlmKG4pe2lmKChiJjEpIT09 -MCluZXcgQS5ycShwLGkpLiQwKCl9ZWxzZSBpZigoYiYyKSE9PTApbmV3IEEuUlcoYyxwKS4kMCgpCmlm -KGYhPW51bGwpJC5YMz1mCmI9cC5jCmlmKHEuYihiKSl7bz1wLmEuJHRpCm89by5DKCJiODwyPiIpLmIo -Yil8fCFvLnpbMV0uYihiKX1lbHNlIG89ITEKaWYobyl7cS5hKGIpCmU9cC5hLmIKaWYoKGIuYSYyNCkh -PT0wKXtkPXIuYShlLmMpCmUuYz1udWxsCmEwPWUuTjgoZCkKZS5hPWIuYSYzMHxlLmEmMQplLmM9Yi5j -CmMuYT1iCmNvbnRpbnVlfWVsc2UgQS5BOShiLGUpCnJldHVybn19ZT1wLmEuYgpkPXIuYShlLmMpCmUu -Yz1udWxsCmEwPWUuTjgoZCkKYj1wLmIKbz1wLmMKaWYoIWIpe2UuJHRpLmMuYShvKQplLmE9OAplLmM9 -b31lbHNle3MuYShvKQplLmE9ZS5hJjF8MTYKZS5jPW99Yy5hPWUKYj1lfX0sClZIKGEsYil7dmFyIHMK -aWYodC5tLmIoYSkpcmV0dXJuIGIuTGooYSx0LnosdC5LLHQubCkKcz10LnYKaWYocy5iKGEpKXJldHVy -biBzLmEoYSkKdGhyb3cgQS5iKEEuTDMoYSwib25FcnJvciIsdS5jKSl9LApwdSgpe3ZhciBzLHIKZm9y -KHM9JC5TNjtzIT1udWxsO3M9JC5TNil7JC5tZz1udWxsCnI9cy5iCiQuUzY9cgppZihyPT1udWxsKSQu -azg9bnVsbApzLmEuJDAoKX19LAplTigpeyQuVUQ9ITAKdHJ5e0EucHUoKX1maW5hbGx5eyQubWc9bnVs -bAokLlVEPSExCmlmKCQuUzYhPW51bGwpJC51dCgpLiQxKEEuVUkoKSl9fSwKZVcoYSl7dmFyIHM9bmV3 -IEEuT00oYSkscj0kLms4CmlmKHI9PW51bGwpeyQuUzY9JC5rOD1zCmlmKCEkLlVEKSQudXQoKS4kMShB -LlVJKCkpfWVsc2UgJC5rOD1yLmI9c30sCnJSKGEpe3ZhciBzLHIscSxwPSQuUzYKaWYocD09bnVsbCl7 -QS5lVyhhKQokLm1nPSQuazgKcmV0dXJufXM9bmV3IEEuT00oYSkKcj0kLm1nCmlmKHI9PW51bGwpe3Mu -Yj1wCiQuUzY9JC5tZz1zfWVsc2V7cT1yLmIKcy5iPXEKJC5tZz1yLmI9cwppZihxPT1udWxsKSQuazg9 -c319LApyYihhKXt2YXIgcz1udWxsLHI9JC5YMwppZihCLk5VPT09cil7QS5UayhzLHMsQi5OVSxhKQpy -ZXR1cm59QS5UayhzLHMscix0Lk0uYShyLkdZKGEpKSl9LApRdyhhLGIpe0EuY2IoYSwic3RyZWFtIix0 -LkspCnJldHVybiBuZXcgQS54SShiLkMoInhJPDA+IikpfSwKU2koYSxiKXtBLnJSKG5ldyBBLkV2KGEs -YikpfSwKVDgoYSxiLGMsZCxlKXt2YXIgcyxyPSQuWDMKaWYocj09PWMpcmV0dXJuIGQuJDAoKQokLlgz -PWMKcz1yCnRyeXtyPWQuJDAoKQpyZXR1cm4gcn1maW5hbGx5eyQuWDM9c319LAp5dihhLGIsYyxkLGUs -ZixnKXt2YXIgcyxyPSQuWDMKaWYocj09PWMpcmV0dXJuIGQuJDEoZSkKJC5YMz1jCnM9cgp0cnl7cj1k -LiQxKGUpCnJldHVybiByfWZpbmFsbHl7JC5YMz1zfX0sClF4KGEsYixjLGQsZSxmLGcsaCxpKXt2YXIg -cyxyPSQuWDMKaWYocj09PWMpcmV0dXJuIGQuJDIoZSxmKQokLlgzPWMKcz1yCnRyeXtyPWQuJDIoZSxm -KQpyZXR1cm4gcn1maW5hbGx5eyQuWDM9c319LApUayhhLGIsYyxkKXt0Lk0uYShkKQppZihCLk5VIT09 -YylkPWMuR1koZCkKQS5lVyhkKX0sCnRoOmZ1bmN0aW9uIHRoKGEpe3RoaXMuYT1hfSwKaGE6ZnVuY3Rp -b24gaGEoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKVnM6ZnVuY3Rpb24gVnMoYSl7 -dGhpcy5hPWF9LApGdDpmdW5jdGlvbiBGdChhKXt0aGlzLmE9YX0sClczOmZ1bmN0aW9uIFczKCl7fSwK -eUg6ZnVuY3Rpb24geUgoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmloOmZ1bmN0aW9uIGloKGEsYil7 -dGhpcy5hPWEKdGhpcy5iPSExCnRoaXMuJHRpPWJ9LApXTTpmdW5jdGlvbiBXTShhKXt0aGlzLmE9YX0s -ClNYOmZ1bmN0aW9uIFNYKGEpe3RoaXMuYT1hfSwKR3M6ZnVuY3Rpb24gR3MoYSl7dGhpcy5hPWF9LApG -eTpmdW5jdGlvbiBGeShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKR1Y6ZnVuY3Rpb24gR1YoYSxiKXt2 -YXIgXz10aGlzCl8uYT1hCl8uZD1fLmM9Xy5iPW51bGwKXy4kdGk9Yn0sCnE0OmZ1bmN0aW9uIHE0KGEs -Yil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCkN3OmZ1bmN0aW9uIEN3KGEsYil7dGhpcy5hPWEKdGhpcy5i -PWJ9LApQZjpmdW5jdGlvbiBQZigpe30sClpmOmZ1bmN0aW9uIFpmKGEsYil7dGhpcy5hPWEKdGhpcy4k -dGk9Yn0sCkZlOmZ1bmN0aW9uIEZlKGEsYixjLGQsZSl7dmFyIF89dGhpcwpfLmE9bnVsbApfLmI9YQpf -LmM9YgpfLmQ9YwpfLmU9ZApfLiR0aT1lfSwKdnM6ZnVuY3Rpb24gdnMoYSxiKXt2YXIgXz10aGlzCl8u -YT0wCl8uYj1hCl8uYz1udWxsCl8uJHRpPWJ9LApkYTpmdW5jdGlvbiBkYShhLGIpe3RoaXMuYT1hCnRo -aXMuYj1ifSwKb1E6ZnVuY3Rpb24gb1EoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCnBWOmZ1bmN0aW9u -IHBWKGEpe3RoaXMuYT1hfSwKVTc6ZnVuY3Rpb24gVTcoYSl7dGhpcy5hPWF9LAp2cjpmdW5jdGlvbiB2 -cihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApydDpmdW5jdGlvbiBydChhLGIpe3Ro -aXMuYT1hCnRoaXMuYj1ifSwKS0Y6ZnVuY3Rpb24gS0YoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sClpM -OmZ1bmN0aW9uIFpMKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sClJUOmZ1bmN0aW9u -IFJUKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCmpaOmZ1bmN0aW9uIGpaKGEpe3Ro -aXMuYT1hfSwKcnE6ZnVuY3Rpb24gcnEoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sClJXOmZ1bmN0aW9u -IFJXKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApPTTpmdW5jdGlvbiBPTShhKXt0aGlzLmE9YQp0aGlz -LmI9bnVsbH0sCnFoOmZ1bmN0aW9uIHFoKCl7fSwKQjU6ZnVuY3Rpb24gQjUoYSxiKXt0aGlzLmE9YQp0 -aGlzLmI9Yn0sCnVPOmZ1bmN0aW9uIHVPKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApNTzpmdW5jdGlv -biBNTygpe30sCmtUOmZ1bmN0aW9uIGtUKCl7fSwKeEk6ZnVuY3Rpb24geEkoYSl7dGhpcy4kdGk9YX0s -Cm0wOmZ1bmN0aW9uIG0wKCl7fSwKRXY6ZnVuY3Rpb24gRXYoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0s -CkppOmZ1bmN0aW9uIEppKCl7fSwKVnA6ZnVuY3Rpb24gVnAoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0s -Ck9SOmZ1bmN0aW9uIE9SKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCkVGKGEsYixj -KXtyZXR1cm4gYi5DKCJAPDA+IikuS3EoYykuQygiRm88MSwyPiIpLmEoQS5CNyhhLG5ldyBBLk41KGIu -QygiQDwwPiIpLktxKGMpLkMoIk41PDEsMj4iKSkpKX0sCkZsKGEsYil7cmV0dXJuIG5ldyBBLk41KGEu -QygiQDwwPiIpLktxKGIpLkMoIk41PDEsMj4iKSl9LApMcyhhKXtyZXR1cm4gbmV3IEEuYjYoYS5DKCJi -NjwwPiIpKX0sClQyKCl7dmFyIHM9T2JqZWN0LmNyZWF0ZShudWxsKQpzWyI8bm9uLWlkZW50aWZpZXIt -a2V5PiJdPXMKZGVsZXRlIHNbIjxub24taWRlbnRpZmllci1rZXk+Il0KcmV0dXJuIHN9LApyaihhLGIs -Yyl7dmFyIHM9bmV3IEEubG0oYSxiLGMuQygibG08MD4iKSkKcy5jPWEuZQpyZXR1cm4gc30sCkVQKGEs -YixjKXt2YXIgcyxyCmlmKEEuaEIoYSkpe2lmKGI9PT0iKCImJmM9PT0iKSIpcmV0dXJuIiguLi4pIgpy -ZXR1cm4gYisiLi4uIitjfXM9QS5RSShbXSx0LnMpCkIuTm0uaSgkLnosYSkKdHJ5e0EuVnIoYSxzKX1m -aW5hbGx5e2lmKDA+PSQuei5sZW5ndGgpcmV0dXJuIEEuT0goJC56LC0xKQokLnoucG9wKCl9cj1BLmwo -Yix0LmsuYShzKSwiLCAiKStjCnJldHVybiByLmNoYXJDb2RlQXQoMCk9PTA/cjpyfSwKeChhLGIsYyl7 -dmFyIHMscgppZihBLmhCKGEpKXJldHVybiBiKyIuLi4iK2MKcz1uZXcgQS5NKGIpCkIuTm0uaSgkLnos -YSkKdHJ5e3I9cwpyLmE9QS5sKHIuYSxhLCIsICIpfWZpbmFsbHl7aWYoMD49JC56Lmxlbmd0aClyZXR1 -cm4gQS5PSCgkLnosLTEpCiQuei5wb3AoKX1zLmErPWMKcj1zLmEKcmV0dXJuIHIuY2hhckNvZGVBdCgw -KT09MD9yOnJ9LApoQihhKXt2YXIgcyxyCmZvcihzPSQuei5sZW5ndGgscj0wO3I8czsrK3IpaWYoYT09 -PSQueltyXSlyZXR1cm4hMApyZXR1cm4hMX0sClZyKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbD1hLmdB -KGEpLGs9MCxqPTAKd2hpbGUoITApe2lmKCEoazw4MHx8ajwzKSlicmVhawppZighbC5HKCkpcmV0dXJu -CnM9QS5FaihsLmdsKCkpCkIuTm0uaShiLHMpCmsrPXMubGVuZ3RoKzI7KytqfWlmKCFsLkcoKSl7aWYo -ajw9NSlyZXR1cm4KaWYoMD49Yi5sZW5ndGgpcmV0dXJuIEEuT0goYiwtMSkKcj1iLnBvcCgpCmlmKDA+ -PWIubGVuZ3RoKXJldHVybiBBLk9IKGIsLTEpCnE9Yi5wb3AoKX1lbHNle3A9bC5nbCgpOysragppZigh -bC5HKCkpe2lmKGo8PTQpe0IuTm0uaShiLEEuRWoocCkpCnJldHVybn1yPUEuRWoocCkKaWYoMD49Yi5s -ZW5ndGgpcmV0dXJuIEEuT0goYiwtMSkKcT1iLnBvcCgpCmsrPXIubGVuZ3RoKzJ9ZWxzZXtvPWwuZ2wo -KTsrK2oKZm9yKDtsLkcoKTtwPW8sbz1uKXtuPWwuZ2woKTsrK2oKaWYoaj4xMDApe3doaWxlKCEwKXtp -ZighKGs+NzUmJmo+MykpYnJlYWsKaWYoMD49Yi5sZW5ndGgpcmV0dXJuIEEuT0goYiwtMSkKay09Yi5w -b3AoKS5sZW5ndGgrMjstLWp9Qi5ObS5pKGIsIi4uLiIpCnJldHVybn19cT1BLkVqKHApCnI9QS5Faihv -KQprKz1yLmxlbmd0aCtxLmxlbmd0aCs0fX1pZihqPmIubGVuZ3RoKzIpe2srPTUKbT0iLi4uIn1lbHNl -IG09bnVsbAp3aGlsZSghMCl7aWYoIShrPjgwJiZiLmxlbmd0aD4zKSlicmVhawppZigwPj1iLmxlbmd0 -aClyZXR1cm4gQS5PSChiLC0xKQprLT1iLnBvcCgpLmxlbmd0aCsyCmlmKG09PW51bGwpe2srPTUKbT0i -Li4uIn19aWYobSE9bnVsbClCLk5tLmkoYixtKQpCLk5tLmkoYixxKQpCLk5tLmkoYixyKX0sCnRNKGEs -Yil7dmFyIHMscixxPUEuTHMoYikKZm9yKHM9YS5sZW5ndGgscj0wO3I8YS5sZW5ndGg7YS5sZW5ndGg9 -PT1zfHwoMCxBLmxrKShhKSwrK3IpcS5pKDAsYi5hKGFbcl0pKQpyZXR1cm4gcX0sCm5PKGEpe3ZhciBz -LHI9e30KaWYoQS5oQihhKSlyZXR1cm4iey4uLn0iCnM9bmV3IEEuTSgiIikKdHJ5e0IuTm0uaSgkLnos -YSkKcy5hKz0ieyIKci5hPSEwCmEuSygwLG5ldyBBLnJhKHIscykpCnMuYSs9In0ifWZpbmFsbHl7aWYo -MD49JC56Lmxlbmd0aClyZXR1cm4gQS5PSCgkLnosLTEpCiQuei5wb3AoKX1yPXMuYQpyZXR1cm4gci5j -aGFyQ29kZUF0KDApPT0wP3I6cn0sCmI2OmZ1bmN0aW9uIGI2KGEpe3ZhciBfPXRoaXMKXy5hPTAKXy5m -PV8uZT1fLmQ9Xy5jPV8uYj1udWxsCl8ucj0wCl8uJHRpPWF9LApibjpmdW5jdGlvbiBibihhKXt0aGlz -LmE9YQp0aGlzLmM9dGhpcy5iPW51bGx9LApsbTpmdW5jdGlvbiBsbShhLGIsYyl7dmFyIF89dGhpcwpf -LmE9YQpfLmI9YgpfLmQ9Xy5jPW51bGwKXy4kdGk9Y30sCm1XOmZ1bmN0aW9uIG1XKCl7fSwKdXk6ZnVu -Y3Rpb24gdXkoKXt9LApsRDpmdW5jdGlvbiBsRCgpe30sCmlsOmZ1bmN0aW9uIGlsKCl7fSwKcmE6ZnVu -Y3Rpb24gcmEoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCllrOmZ1bmN0aW9uIFlrKCl7fSwKeVE6ZnVu -Y3Rpb24geVEoYSl7dGhpcy5hPWF9LApLUDpmdW5jdGlvbiBLUCgpe30sClBuOmZ1bmN0aW9uIFBuKCl7 -fSwKR2o6ZnVuY3Rpb24gR2ooYSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKbGY6ZnVuY3Rpb24gbGYo -KXt9LApWajpmdW5jdGlvbiBWaigpe30sClh2OmZ1bmN0aW9uIFh2KCl7fSwKblk6ZnVuY3Rpb24gblko -KXt9LApXWTpmdW5jdGlvbiBXWSgpe30sClJVOmZ1bmN0aW9uIFJVKCl7fSwKRlA6ZnVuY3Rpb24gRlAo -KXt9LApCUyhhLGIpe3ZhciBzLHIscSxwPW51bGwKdHJ5e3A9SlNPTi5wYXJzZShhKX1jYXRjaChyKXtz -PUEuUnUocikKcT1BLnJyKFN0cmluZyhzKSxudWxsLG51bGwpCnRocm93IEEuYihxKX1xPUEuUWUocCkK -cmV0dXJuIHF9LApRZShhKXt2YXIgcwppZihhPT1udWxsKXJldHVybiBudWxsCmlmKHR5cGVvZiBhIT0i -b2JqZWN0IilyZXR1cm4gYQppZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkhPT1BcnJheS5wcm90b3R5 -cGUpcmV0dXJuIG5ldyBBLnV3KGEsT2JqZWN0LmNyZWF0ZShudWxsKSkKZm9yKHM9MDtzPGEubGVuZ3Ro -OysrcylhW3NdPUEuUWUoYVtzXSkKcmV0dXJuIGF9LApreShhLGIsYyxkKXt2YXIgcyxyCmlmKGIgaW5z -dGFuY2VvZiBVaW50OEFycmF5KXtzPWIKZD1zLmxlbmd0aAppZihkLWM8MTUpcmV0dXJuIG51bGwKcj1B -LlJQKGEscyxjLGQpCmlmKHIhPW51bGwmJmEpaWYoci5pbmRleE9mKCJcdWZmZmQiKT49MClyZXR1cm4g -bnVsbApyZXR1cm4gcn1yZXR1cm4gbnVsbH0sClJQKGEsYixjLGQpe3ZhciBzPWE/JC5IRygpOiQucmYo -KQppZihzPT1udWxsKXJldHVybiBudWxsCmlmKDA9PT1jJiZkPT09Yi5sZW5ndGgpcmV0dXJuIEEuUmIo -cyxiKQpyZXR1cm4gQS5SYihzLGIuc3ViYXJyYXkoYyxBLmpCKGMsZCxiLmxlbmd0aCkpKX0sClJiKGEs -Yil7dmFyIHMscgp0cnl7cz1hLmRlY29kZShiKQpyZXR1cm4gc31jYXRjaChyKXt9cmV0dXJuIG51bGx9 -LAp4TShhLGIsYyxkLGUsZil7aWYoQi5qbi56WShmLDQpIT09MCl0aHJvdyBBLmIoQS5ycigiSW52YWxp -ZCBiYXNlNjQgcGFkZGluZywgcGFkZGVkIGxlbmd0aCBtdXN0IGJlIG11bHRpcGxlIG9mIGZvdXIsIGlz -ICIrZixhLGMpKQppZihkK2UhPT1mKXRocm93IEEuYihBLnJyKCJJbnZhbGlkIGJhc2U2NCBwYWRkaW5n -LCAnPScgbm90IGF0IHRoZSBlbmQiLGEsYikpCmlmKGU+Mil0aHJvdyBBLmIoQS5ycigiSW52YWxpZCBi -YXNlNjQgcGFkZGluZywgbW9yZSB0aGFuIHR3byAnPScgY2hhcmFjdGVycyIsYSxiKSl9LApHeShhLGIs -Yyl7cmV0dXJuIG5ldyBBLlVkKGEsYil9LApOQyhhKXtyZXR1cm4gYS5MdCgpfSwKVWcoYSxiKXtyZXR1 -cm4gbmV3IEEudHUoYSxbXSxBLkN5KCkpfSwKdVgoYSxiLGMpe3ZhciBzLHI9bmV3IEEuTSgiIikscT1B -LlVnKHIsYikKcS5pVShhKQpzPXIuYQpyZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6c30sCmo0KGEp -e3N3aXRjaChhKXtjYXNlIDY1OnJldHVybiJNaXNzaW5nIGV4dGVuc2lvbiBieXRlIgpjYXNlIDY3OnJl -dHVybiJVbmV4cGVjdGVkIGV4dGVuc2lvbiBieXRlIgpjYXNlIDY5OnJldHVybiJJbnZhbGlkIFVURi04 -IGJ5dGUiCmNhc2UgNzE6cmV0dXJuIk92ZXJsb25nIGVuY29kaW5nIgpjYXNlIDczOnJldHVybiJPdXQg -b2YgdW5pY29kZSByYW5nZSIKY2FzZSA3NTpyZXR1cm4iRW5jb2RlZCBzdXJyb2dhdGUiCmNhc2UgNzc6 -cmV0dXJuIlVuZmluaXNoZWQgVVRGLTggb2N0ZXQgc2VxdWVuY2UiCmRlZmF1bHQ6cmV0dXJuIiJ9fSwK -ankoYSxiLGMpe3ZhciBzLHIscSxwPWMtYixvPW5ldyBVaW50OEFycmF5KHApCmZvcihzPUouVTYoYSks -cj0wO3I8cDsrK3Ipe3E9cy5xKGEsYityKQppZigocSY0Mjk0OTY3MDQwKT4+PjAhPT0wKXE9MjU1Cmlm -KCEocjxwKSlyZXR1cm4gQS5PSChvLHIpCm9bcl09cX1yZXR1cm4gb30sCnV3OmZ1bmN0aW9uIHV3KGEs -Yil7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPW51bGx9LAppODpmdW5jdGlvbiBpOChhKXt0aGlzLmE9 -YX0sCnhyOmZ1bmN0aW9uIHhyKCl7fSwKTno6ZnVuY3Rpb24gTnooKXt9LApDVjpmdW5jdGlvbiBDVigp -e30sClU4OmZ1bmN0aW9uIFU4KCl7fSwKVWs6ZnVuY3Rpb24gVWsoKXt9LAp3STpmdW5jdGlvbiB3SSgp -e30sClppOmZ1bmN0aW9uIFppKCl7fSwKVWQ6ZnVuY3Rpb24gVWQoYSxiKXt0aGlzLmE9YQp0aGlzLmI9 -Yn0sCks4OmZ1bmN0aW9uIEs4KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApieTpmdW5jdGlvbiBieSgp -e30sCm9qOmZ1bmN0aW9uIG9qKGEpe3RoaXMuYj1hfSwKTXg6ZnVuY3Rpb24gTXgoYSl7dGhpcy5hPWF9 -LApTaDpmdW5jdGlvbiBTaCgpe30sCnRpOmZ1bmN0aW9uIHRpKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9 -LAp0dTpmdW5jdGlvbiB0dShhLGIsYyl7dGhpcy5jPWEKdGhpcy5hPWIKdGhpcy5iPWN9LAp1NTpmdW5j -dGlvbiB1NSgpe30sCkUzOmZ1bmN0aW9uIEUzKCl7fSwKUnc6ZnVuY3Rpb24gUncoYSl7dGhpcy5iPTAK -dGhpcy5jPWF9LApHWTpmdW5jdGlvbiBHWShhKXt0aGlzLmE9YX0sCmJ6OmZ1bmN0aW9uIGJ6KGEpe3Ro -aXMuYT1hCnRoaXMuYj0xNgp0aGlzLmM9MH0sClFBKGEsYil7dmFyIHM9QS5IcChhLGIpCmlmKHMhPW51 -bGwpcmV0dXJuIHMKdGhyb3cgQS5iKEEucnIoYSxudWxsLG51bGwpKX0sCm9zKGEpe2lmKGEgaW5zdGFu -Y2VvZiBBLlRwKXJldHVybiBhWyJbIl0oMCkKcmV0dXJuIkluc3RhbmNlIG9mICciK0EubGgoYSkrIici -fSwKTzEoYSxiKXthPUEuYihhKQppZihhPT1udWxsKWE9dC5LLmEoYSkKYS5zdGFjaz1iWyJbIl0oMCkK -dGhyb3cgYQp0aHJvdyBBLmIoInVucmVhY2hhYmxlIil9LApPOChhLGIsYyxkKXt2YXIgcyxyPWM/Si5L -aChhLGQpOkouUWkoYSxkKQppZihhIT09MCYmYiE9bnVsbClmb3Iocz0wO3M8ci5sZW5ndGg7KytzKXJb -c109YgpyZXR1cm4gcn0sClBXKGEsYixjKXt2YXIgcyxyPUEuUUkoW10sYy5DKCJqZDwwPiIpKQpmb3Io -cz1KLklUKGEpO3MuRygpOylCLk5tLmkocixjLmEocy5nbCgpKSkKaWYoYilyZXR1cm4gcgpyZXR1cm4g -Si5FcChyLGMpfSwKWTEoYSxiLGMpe3ZhciBzCmlmKGIpcmV0dXJuIEEuZXYoYSxjKQpzPUouRXAoQS5l -dihhLGMpLGMpCnJldHVybiBzfSwKZXYoYSxiKXt2YXIgcyxyCmlmKEFycmF5LmlzQXJyYXkoYSkpcmV0 -dXJuIEEuUUkoYS5zbGljZSgwKSxiLkMoImpkPDA+IikpCnM9QS5RSShbXSxiLkMoImpkPDA+IikpCmZv -cihyPUouSVQoYSk7ci5HKCk7KUIuTm0uaShzLHIuZ2woKSkKcmV0dXJuIHN9LApBRihhLGIpe3JldHVy -biBKLnpDKEEuUFcoYSwhMSxiKSl9LApITShhLGIsYyl7dmFyIHM9QS5mdyhhLGIsQS5qQihiLGMsYS5s -ZW5ndGgpKQpyZXR1cm4gc30sCk9vKGEpe3JldHVybiBBLkx3KGEpfSwKbnUoYSl7cmV0dXJuIG5ldyBB -LlZSKGEsQS52NChhLCExLCEwLCExLCExLCExKSl9LApsKGEsYixjKXt2YXIgcz1KLklUKGIpCmlmKCFz -LkcoKSlyZXR1cm4gYQppZihjLmxlbmd0aD09PTApe2RvIGErPUEuRWoocy5nbCgpKQp3aGlsZShzLkco -KSl9ZWxzZXthKz1BLkVqKHMuZ2woKSkKZm9yKDtzLkcoKTspYT1hK2MrQS5FaihzLmdsKCkpfXJldHVy -biBhfSwKbHIoYSxiLGMsZCl7cmV0dXJuIG5ldyBBLm1wKGEsYixjLGQpfSwKdW8oKXt2YXIgcz1BLk0w -KCkKaWYocyE9bnVsbClyZXR1cm4gQS5oSyhzKQp0aHJvdyBBLmIoQS5MNCgiJ1VyaS5iYXNlJyBpcyBu -b3Qgc3VwcG9ydGVkIikpfSwKZVAoYSxiLGMsZCl7dmFyIHMscixxLHAsbyxuLG09IjAxMjM0NTY3ODlB -QkNERUYiCmlmKGM9PT1CLnhNKXtzPSQuejQoKS5iCnM9cy50ZXN0KGIpfWVsc2Ugcz0hMQppZihzKXJl -dHVybiBiCkEuTGgoYykuQygiVWsuUyIpLmEoYikKcj1jLmdaRSgpLldKKGIpCmZvcihzPXIubGVuZ3Ro -LHE9MCxwPSIiO3E8czsrK3Epe289cltxXQppZihvPDEyOCl7bj1vPj4+NAppZighKG48OCkpcmV0dXJu -IEEuT0goYSxuKQpuPShhW25dJjE8PChvJjE1KSkhPT0wfWVsc2Ugbj0hMQppZihuKXArPUEuTHcobykK -ZWxzZSBwPWQmJm89PT0zMj9wKyIrIjpwKyIlIittW28+Pj40JjE1XSttW28mMTVdfXJldHVybiBwLmNo -YXJDb2RlQXQoMCk9PTA/cDpwfSwKR3EoYSl7dmFyIHM9TWF0aC5hYnMoYSkscj1hPDA/Ii0iOiIiCmlm -KHM+PTEwMDApcmV0dXJuIiIrYQppZihzPj0xMDApcmV0dXJuIHIrIjAiK3MKaWYocz49MTApcmV0dXJu -IHIrIjAwIitzCnJldHVybiByKyIwMDAiK3N9LApWeChhKXtpZihhPj0xMDApcmV0dXJuIiIrYQppZihh -Pj0xMClyZXR1cm4iMCIrYQpyZXR1cm4iMDAiK2F9LApoMChhKXtpZihhPj0xMClyZXR1cm4iIithCnJl -dHVybiIwIithfSwKaGwoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIifHxBLnJRKGEpfHxhPT1udWxsKXJl -dHVybiBKLllTKGEpCmlmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gSlNPTi5zdHJpbmdpZnkoYSkK -cmV0dXJuIEEub3MoYSl9LApoVihhKXtyZXR1cm4gbmV3IEEuQzYoYSl9LAp4WShhLGIpe3JldHVybiBu -ZXcgQS5BVCghMSxudWxsLGIsYSl9LApMMyhhLGIsYyl7cmV0dXJuIG5ldyBBLkFUKCEwLGEsYixjKX0s -Ck1SKGEsYixjKXtyZXR1cm4gYX0sCk83KGEsYil7cmV0dXJuIG5ldyBBLmJKKG51bGwsbnVsbCwhMCxh -LGIsIlZhbHVlIG5vdCBpbiByYW5nZSIpfSwKVEUoYSxiLGMsZCxlKXtyZXR1cm4gbmV3IEEuYkooYixj -LCEwLGEsZCwiSW52YWxpZCB2YWx1ZSIpfSwKd0EoYSxiLGMsZCl7aWYoYTxifHxhPmMpdGhyb3cgQS5i -KEEuVEUoYSxiLGMsZCxudWxsKSkKcmV0dXJuIGF9LApqQihhLGIsYyl7aWYoMD5hfHxhPmMpdGhyb3cg -QS5iKEEuVEUoYSwwLGMsInN0YXJ0IixudWxsKSkKaWYoYiE9bnVsbCl7aWYoYT5ifHxiPmMpdGhyb3cg -QS5iKEEuVEUoYixhLGMsImVuZCIsbnVsbCkpCnJldHVybiBifXJldHVybiBjfSwKazEoYSxiKXtpZihh -PDApdGhyb3cgQS5iKEEuVEUoYSwwLG51bGwsYixudWxsKSkKcmV0dXJuIGF9LApDZihhLGIsYyxkLGUp -e3ZhciBzPUEuSVooZT09bnVsbD9KLkhtKGIpOmUpCnJldHVybiBuZXcgQS5lWShzLCEwLGEsYywiSW5k -ZXggb3V0IG9mIHJhbmdlIil9LApMNChhKXtyZXR1cm4gbmV3IEEudWIoYSl9LApTWShhKXtyZXR1cm4g -bmV3IEEuZHMoYSl9LApQVihhKXtyZXR1cm4gbmV3IEEubGooYSl9LAphNChhKXtyZXR1cm4gbmV3IEEu -VVYoYSl9LApycihhLGIsYyl7cmV0dXJuIG5ldyBBLmFFKGEsYixjKX0sCmY1KGEsYixjLGQpe3ZhciBz -LHI9Qi5DRC5nbShhKQpiPUIuQ0QuZ20oYikKYz1CLkNELmdtKGMpCmQ9Qi5DRC5nbShkKQpzPSQudDgo -KQpyZXR1cm4gQS5xTChBLnljKEEueWMoQS55YyhBLnljKHMsciksYiksYyksZCkpfSwKaEsoYTUpe3Zh -ciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGMsYixhLGEwLGExLGEyLGEzPW51bGwsYTQ9 -YTUubGVuZ3RoCmlmKGE0Pj01KXtzPSgoQi54Qi5XKGE1LDQpXjU4KSozfEIueEIuVyhhNSwwKV4xMDB8 -Qi54Qi5XKGE1LDEpXjk3fEIueEIuVyhhNSwyKV4xMTZ8Qi54Qi5XKGE1LDMpXjk3KT4+PjAKaWYocz09 -PTApcmV0dXJuIEEuS0QoYTQ8YTQ/Qi54Qi5OaihhNSwwLGE0KTphNSw1LGEzKS5nbFIoKQplbHNlIGlm -KHM9PT0zMilyZXR1cm4gQS5LRChCLnhCLk5qKGE1LDUsYTQpLDAsYTMpLmdsUigpfXI9QS5POCg4LDAs -ITEsdC5TKQpCLk5tLlk1KHIsMCwwKQpCLk5tLlk1KHIsMSwtMSkKQi5ObS5ZNShyLDIsLTEpCkIuTm0u -WTUociw3LC0xKQpCLk5tLlk1KHIsMywwKQpCLk5tLlk1KHIsNCwwKQpCLk5tLlk1KHIsNSxhNCkKQi5O -bS5ZNShyLDYsYTQpCmlmKEEuVUIoYTUsMCxhNCwwLHIpPj0xNClCLk5tLlk1KHIsNyxhNCkKcT1yWzFd -CmlmKHE+PTApaWYoQS5VQihhNSwwLHEsMjAscik9PT0yMClyWzddPXEKcD1yWzJdKzEKbz1yWzNdCm49 -cls0XQptPXJbNV0KbD1yWzZdCmlmKGw8bSltPWwKaWYobjxwKW49bQplbHNlIGlmKG48PXEpbj1xKzEK -aWYobzxwKW89bgprPXJbN108MAppZihrKWlmKHA+cSszKXtqPWEzCms9ITF9ZWxzZXtpPW8+MAppZihp -JiZvKzE9PT1uKXtqPWEzCms9ITF9ZWxzZXtpZighKG08YTQmJm09PT1uKzImJkIueEIuUWkoYTUsIi4u -IixuKSkpaD1tPm4rMiYmQi54Qi5RaShhNSwiLy4uIixtLTMpCmVsc2UgaD0hMAppZihoKXtqPWEzCms9 -ITF9ZWxzZXtpZihxPT09NClpZihCLnhCLlFpKGE1LCJmaWxlIiwwKSl7aWYocDw9MCl7aWYoIUIueEIu -UWkoYTUsIi8iLG4pKXtnPSJmaWxlOi8vLyIKcz0zfWVsc2V7Zz0iZmlsZTovLyIKcz0yfWE1PWcrQi54 -Qi5OaihhNSxuLGE0KQpxLT0wCmk9cy0wCm0rPWkKbCs9aQphND1hNS5sZW5ndGgKcD03Cm89NwpuPTd9 -ZWxzZSBpZihuPT09bSl7KytsCmY9bSsxCmE1PUIueEIuaTcoYTUsbixtLCIvIik7KythNAptPWZ9aj0i -ZmlsZSJ9ZWxzZSBpZihCLnhCLlFpKGE1LCJodHRwIiwwKSl7aWYoaSYmbyszPT09biYmQi54Qi5RaShh -NSwiODAiLG8rMSkpe2wtPTMKZT1uLTMKbS09MwphNT1CLnhCLmk3KGE1LG8sbiwiIikKYTQtPTMKbj1l -fWo9Imh0dHAifWVsc2Ugaj1hMwplbHNlIGlmKHE9PT01JiZCLnhCLlFpKGE1LCJodHRwcyIsMCkpe2lm -KGkmJm8rND09PW4mJkIueEIuUWkoYTUsIjQ0MyIsbysxKSl7bC09NAplPW4tNAptLT00CmE1PUIueEIu -aTcoYTUsbyxuLCIiKQphNC09MwpuPWV9aj0iaHR0cHMifWVsc2Ugaj1hMwprPSEwfX19ZWxzZSBqPWEz -CmlmKGspe2lmKGE0PGE1Lmxlbmd0aCl7YTU9Qi54Qi5OaihhNSwwLGE0KQpxLT0wCnAtPTAKby09MApu -LT0wCm0tPTAKbC09MH1yZXR1cm4gbmV3IEEuVWYoYTUscSxwLG8sbixtLGwsail9aWYoaj09bnVsbClp -ZihxPjApaj1BLlBpKGE1LDAscSkKZWxzZXtpZihxPT09MClBLlIzKGE1LDAsIkludmFsaWQgZW1wdHkg -c2NoZW1lIikKaj0iIn1pZihwPjApe2Q9cSszCmM9ZDxwP0EuelIoYTUsZCxwLTEpOiIiCmI9QS5PZShh -NSxwLG8sITEpCmk9bysxCmlmKGk8bil7YT1BLkhwKEIueEIuTmooYTUsaSxuKSxhMykKYTA9QS53Qihh -PT1udWxsP0EudihBLnJyKCJJbnZhbGlkIHBvcnQiLGE1LGkpKTphLGopfWVsc2UgYTA9YTN9ZWxzZXth -MD1hMwpiPWEwCmM9IiJ9YTE9QS5rYShhNSxuLG0sYTMsaixiIT1udWxsKQphMj1tPGw/QS5sZShhNSxt -KzEsbCxhMyk6YTMKcmV0dXJuIEEuQ2coaixjLGIsYTAsYTEsYTIsbDxhND9BLnRHKGE1LGwrMSxhNCk6 -YTMpfSwKTXQoYSl7QS5uKGEpCnJldHVybiBBLmt1KGEsMCxhLmxlbmd0aCxCLnhNLCExKX0sCldYKGEp -e3ZhciBzPXQuTgpyZXR1cm4gQi5ObS5OMChBLlFJKGEuc3BsaXQoIiYiKSx0LnMpLEEuRmwocyxzKSxu -ZXcgQS5uMShCLnhNKSx0LkkpfSwKSGgoYSxiLGMpe3ZhciBzLHIscSxwLG8sbixtPSJJUHY0IGFkZHJl -c3Mgc2hvdWxkIGNvbnRhaW4gZXhhY3RseSA0IHBhcnRzIixsPSJlYWNoIHBhcnQgbXVzdCBiZSBpbiB0 -aGUgcmFuZ2UgMC4uMjU1IixrPW5ldyBBLmNTKGEpLGo9bmV3IFVpbnQ4QXJyYXkoNCkKZm9yKHM9Yixy -PXMscT0wO3M8YzsrK3Mpe3A9Qi54Qi5PKGEscykKaWYocCE9PTQ2KXtpZigocF40OCk+OSlrLiQyKCJp -bnZhbGlkIGNoYXJhY3RlciIscyl9ZWxzZXtpZihxPT09MylrLiQyKG0scykKbz1BLlFBKEIueEIuTmoo -YSxyLHMpLG51bGwpCmlmKG8+MjU1KWsuJDIobCxyKQpuPXErMQppZighKHE8NCkpcmV0dXJuIEEuT0go -aixxKQpqW3FdPW8Kcj1zKzEKcT1ufX1pZihxIT09MylrLiQyKG0sYykKbz1BLlFBKEIueEIuTmooYSxy -LGMpLG51bGwpCmlmKG8+MjU1KWsuJDIobCxyKQppZighKHE8NCkpcmV0dXJuIEEuT0goaixxKQpqW3Fd -PW8KcmV0dXJuIGp9LAplZyhhLGEwLGExKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUs -ZD1udWxsLGM9bmV3IEEuVkMoYSksYj1uZXcgQS5KVChjLGEpCmlmKGEubGVuZ3RoPDIpYy4kMigiYWRk -cmVzcyBpcyB0b28gc2hvcnQiLGQpCnM9QS5RSShbXSx0LnQpCmZvcihyPWEwLHE9cixwPSExLG89ITE7 -cjxhMTsrK3Ipe249Qi54Qi5PKGEscikKaWYobj09PTU4KXtpZihyPT09YTApeysrcgppZihCLnhCLk8o -YSxyKSE9PTU4KWMuJDIoImludmFsaWQgc3RhcnQgY29sb24uIixyKQpxPXJ9aWYocj09PXEpe2lmKHAp -Yy4kMigib25seSBvbmUgd2lsZGNhcmQgYDo6YCBpcyBhbGxvd2VkIixyKQpCLk5tLmkocywtMSkKcD0h -MH1lbHNlIEIuTm0uaShzLGIuJDIocSxyKSkKcT1yKzF9ZWxzZSBpZihuPT09NDYpbz0hMH1pZihzLmxl -bmd0aD09PTApYy4kMigidG9vIGZldyBwYXJ0cyIsZCkKbT1xPT09YTEKbD1CLk5tLmdyWihzKQppZiht -JiZsIT09LTEpYy4kMigiZXhwZWN0ZWQgYSBwYXJ0IGFmdGVyIGxhc3QgYDpgIixhMSkKaWYoIW0paWYo -IW8pQi5ObS5pKHMsYi4kMihxLGExKSkKZWxzZXtrPUEuSGgoYSxxLGExKQpCLk5tLmkocywoa1swXTw8 -OHxrWzFdKT4+PjApCkIuTm0uaShzLChrWzJdPDw4fGtbM10pPj4+MCl9aWYocCl7aWYocy5sZW5ndGg+ -NyljLiQyKCJhbiBhZGRyZXNzIHdpdGggYSB3aWxkY2FyZCBtdXN0IGhhdmUgbGVzcyB0aGFuIDcgcGFy -dHMiLGQpfWVsc2UgaWYocy5sZW5ndGghPT04KWMuJDIoImFuIGFkZHJlc3Mgd2l0aG91dCBhIHdpbGRj -YXJkIG11c3QgY29udGFpbiBleGFjdGx5IDggcGFydHMiLGQpCmo9bmV3IFVpbnQ4QXJyYXkoMTYpCmZv -cihsPXMubGVuZ3RoLGk9OS1sLHI9MCxoPTA7cjxsOysrcil7Zz1zW3JdCmlmKGc9PT0tMSlmb3IoZj0w -O2Y8aTsrK2Ype2lmKCEoaD49MCYmaDwxNikpcmV0dXJuIEEuT0goaixoKQpqW2hdPTAKZT1oKzEKaWYo -IShlPDE2KSlyZXR1cm4gQS5PSChqLGUpCmpbZV09MApoKz0yfWVsc2V7ZT1CLmpuLndHKGcsOCkKaWYo -IShoPj0wJiZoPDE2KSlyZXR1cm4gQS5PSChqLGgpCmpbaF09ZQplPWgrMQppZighKGU8MTYpKXJldHVy -biBBLk9IKGosZSkKaltlXT1nJjI1NQpoKz0yfX1yZXR1cm4gan0sCkNnKGEsYixjLGQsZSxmLGcpe3Jl -dHVybiBuZXcgQS5EbihhLGIsYyxkLGUsZixnKX0sCktMKGEsYixjLGQsZSxmLGcpe3ZhciBzLHIscSxw -LG8sbgpmPWY9PW51bGw/IiI6QS5QaShmLDAsZi5sZW5ndGgpCmc9QS56UihnLDAsZz09bnVsbD8wOmcu -bGVuZ3RoKQphPUEuT2UoYSwwLGE9PW51bGw/MDphLmxlbmd0aCwhMSkKcz1BLmxlKG51bGwsMCwwLGUp -CnI9QS50RyhudWxsLDAsMCkKZD1BLndCKGQsZikKcT1mPT09ImZpbGUiCmlmKGE9PW51bGwpcD1nLmxl -bmd0aCE9PTB8fGQhPW51bGx8fHEKZWxzZSBwPSExCmlmKHApYT0iIgpwPWE9PW51bGwKbz0hcApiPUEu -a2EoYiwwLGI9PW51bGw/MDpiLmxlbmd0aCxjLGYsbykKbj1mLmxlbmd0aD09PTAKaWYobiYmcCYmIUIu -eEIubihiLCIvIikpYj1BLndGKGIsIW58fG8pCmVsc2UgYj1BLnhlKGIpCnJldHVybiBBLkNnKGYsZyxw -JiZCLnhCLm4oYiwiLy8iKT8iIjphLGQsYixzLHIpfSwKd0soYSl7aWYoYT09PSJodHRwIilyZXR1cm4g -ODAKaWYoYT09PSJodHRwcyIpcmV0dXJuIDQ0MwpyZXR1cm4gMH0sClIzKGEsYixjKXt0aHJvdyBBLmIo -QS5ycihjLGEsYikpfSwKWGQoYSxiLGMsZCl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoPW51bGws -Zz1iLmxlbmd0aAppZihnIT09MCl7cT0wCndoaWxlKCEwKXtpZighKHE8Zykpe3M9IiIKcj0wCmJyZWFr -fWlmKEIueEIuVyhiLHEpPT09NjQpe3M9Qi54Qi5OaihiLDAscSkKcj1xKzEKYnJlYWt9KytxfWlmKHI8 -ZyYmQi54Qi5XKGIscik9PT05MSl7Zm9yKHA9cixvPS0xO3A8ZzsrK3Ape249Qi54Qi5XKGIscCkKaWYo -bj09PTM3JiZvPDApe209Qi54Qi5RaShiLCIyNSIscCsxKT9wKzI6cApvPXAKcD1tfWVsc2UgaWYobj09 -PTkzKWJyZWFrfWlmKHA9PT1nKXRocm93IEEuYihBLnJyKCJJbnZhbGlkIElQdjYgaG9zdCBlbnRyeS4i -LGIscikpCmw9bzwwP3A6bwpBLmVnKGIscisxLGwpOysrcAppZihwIT09ZyYmQi54Qi5XKGIscCkhPT01 -OCl0aHJvdyBBLmIoQS5ycigiSW52YWxpZCBlbmQgb2YgYXV0aG9yaXR5IixiLHApKX1lbHNlIHA9cgp3 -aGlsZSghMCl7aWYoIShwPGcpKXtrPWgKYnJlYWt9aWYoQi54Qi5XKGIscCk9PT01OCl7aj1CLnhCLnlu -KGIscCsxKQprPWoubGVuZ3RoIT09MD9BLlFBKGosaCk6aApicmVha30rK3B9aT1CLnhCLk5qKGIscixw -KX1lbHNle2s9aAppPWsKcz0iIn1yZXR1cm4gQS5LTChpLGgsQS5RSShjLnNwbGl0KCIvIiksdC5zKSxr -LGQsYSxzKX0sCmtFKGEsYil7dmFyIHMscixxLHAsbwpmb3Iocz1hLmxlbmd0aCxyPTA7cjxzOysrcil7 -cT1hW3JdCnA9Si5VNihxKQpvPXAuZ2socSkKaWYoMD5vKUEudihBLlRFKDAsMCxwLmdrKHEpLG51bGws -bnVsbCkpCmlmKEEuU1EocSwiLyIsMCkpe3M9QS5MNCgiSWxsZWdhbCBwYXRoIGNoYXJhY3RlciAiK0Eu -RWoocSkpCnRocm93IEEuYihzKX19fSwKSE4oYSxiLGMpe3ZhciBzLHIscSxwCmZvcihzPUEucUMoYSxj -LG51bGwsQS50NihhKS5jKSxyPXMuJHRpLHM9bmV3IEEuYTcocyxzLmdrKHMpLHIuQygiYTc8YUwuRT4i -KSkscj1yLkMoImFMLkUiKTtzLkcoKTspe3E9cy5kCmlmKHE9PW51bGwpcT1yLmEocSkKcD1BLm51KCdb -IiovOjw+P1xcXFx8XScpCmlmKEEuU1EocSxwLDApKXtzPUEuTDQoIklsbGVnYWwgY2hhcmFjdGVyIGlu -IHBhdGg6ICIrcSkKdGhyb3cgQS5iKHMpfX19LApyZyhhLGIpe3ZhciBzCmlmKCEoNjU8PWEmJmE8PTkw -KSlzPTk3PD1hJiZhPD0xMjIKZWxzZSBzPSEwCmlmKHMpcmV0dXJuCnM9QS5MNCgiSWxsZWdhbCBkcml2 -ZSBsZXR0ZXIgIitBLk9vKGEpKQp0aHJvdyBBLmIocyl9LAp3QihhLGIpe2lmKGEhPW51bGwmJmE9PT1B -LndLKGIpKXJldHVybiBudWxsCnJldHVybiBhfSwKT2UoYSxiLGMsZCl7dmFyIHMscixxLHAsbyxuCmlm -KGE9PW51bGwpcmV0dXJuIG51bGwKaWYoYj09PWMpcmV0dXJuIiIKaWYoQi54Qi5PKGEsYik9PT05MSl7 -cz1jLTEKaWYoQi54Qi5PKGEscykhPT05MylBLlIzKGEsYiwiTWlzc2luZyBlbmQgYF1gIHRvIG1hdGNo -IGBbYCBpbiBob3N0IikKcj1iKzEKcT1BLnRvKGEscixzKQppZihxPHMpe3A9cSsxCm89QS5PQShhLEIu -eEIuUWkoYSwiMjUiLHApP3ErMzpwLHMsIiUyNSIpfWVsc2Ugbz0iIgpBLmVnKGEscixxKQpyZXR1cm4g -Qi54Qi5OaihhLGIscSkudG9Mb3dlckNhc2UoKStvKyJdIn1mb3Iobj1iO248YzsrK24paWYoQi54Qi5P -KGEsbik9PT01OCl7cT1CLnhCLlhVKGEsIiUiLGIpCnE9cT49YiYmcTxjP3E6YwppZihxPGMpe3A9cSsx -Cm89QS5PQShhLEIueEIuUWkoYSwiMjUiLHApP3ErMzpwLGMsIiUyNSIpfWVsc2Ugbz0iIgpBLmVnKGEs -YixxKQpyZXR1cm4iWyIrQi54Qi5OaihhLGIscSkrbysiXSJ9cmV0dXJuIEEuT0woYSxiLGMpfSwKdG8o -YSxiLGMpe3ZhciBzPUIueEIuWFUoYSwiJSIsYikKcmV0dXJuIHM+PWImJnM8Yz9zOmN9LApPQShhLGIs -YyxkKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPWQhPT0iIj9uZXcgQS5NKGQpOm51bGwKZm9yKHM9 -YixyPXMscT0hMDtzPGM7KXtwPUIueEIuTyhhLHMpCmlmKHA9PT0zNyl7bz1BLnJ2KGEscywhMCkKbj1v -PT1udWxsCmlmKG4mJnEpe3MrPTMKY29udGludWV9aWYoaT09bnVsbClpPW5ldyBBLk0oIiIpCm09aS5h -Kz1CLnhCLk5qKGEscixzKQppZihuKW89Qi54Qi5OaihhLHMscyszKQplbHNlIGlmKG89PT0iJSIpQS5S -MyhhLHMsIlpvbmVJRCBzaG91bGQgbm90IGNvbnRhaW4gJSBhbnltb3JlIikKaS5hPW0rbwpzKz0zCnI9 -cwpxPSEwfWVsc2V7aWYocDwxMjcpe249cD4+PjQKaWYoIShuPDgpKXJldHVybiBBLk9IKEIuRjMsbikK -bj0oQi5GM1tuXSYxPDwocCYxNSkpIT09MH1lbHNlIG49ITEKaWYobil7aWYocSYmNjU8PXAmJjkwPj1w -KXtpZihpPT1udWxsKWk9bmV3IEEuTSgiIikKaWYocjxzKXtpLmErPUIueEIuTmooYSxyLHMpCnI9c31x -PSExfSsrc31lbHNle2lmKChwJjY0NTEyKT09PTU1Mjk2JiZzKzE8Yyl7bD1CLnhCLk8oYSxzKzEpCmlm -KChsJjY0NTEyKT09PTU2MzIwKXtwPShwJjEwMjMpPDwxMHxsJjEwMjN8NjU1MzYKaz0yfWVsc2Ugaz0x -fWVsc2Ugaz0xCmo9Qi54Qi5OaihhLHIscykKaWYoaT09bnVsbCl7aT1uZXcgQS5NKCIiKQpuPWl9ZWxz -ZSBuPWkKbi5hKz1qCm4uYSs9QS56WChwKQpzKz1rCnI9c319fWlmKGk9PW51bGwpcmV0dXJuIEIueEIu -TmooYSxiLGMpCmlmKHI8YylpLmErPUIueEIuTmooYSxyLGMpCm49aS5hCnJldHVybiBuLmNoYXJDb2Rl -QXQoMCk9PTA/bjpufSwKT0woYSxiLGMpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGkKZm9yKHM9Yixy -PXMscT1udWxsLHA9ITA7czxjOyl7bz1CLnhCLk8oYSxzKQppZihvPT09Mzcpe249QS5ydihhLHMsITAp -Cm09bj09bnVsbAppZihtJiZwKXtzKz0zCmNvbnRpbnVlfWlmKHE9PW51bGwpcT1uZXcgQS5NKCIiKQps -PUIueEIuTmooYSxyLHMpCms9cS5hKz0hcD9sLnRvTG93ZXJDYXNlKCk6bAppZihtKXtuPUIueEIuTmoo -YSxzLHMrMykKaj0zfWVsc2UgaWYobj09PSIlIil7bj0iJTI1IgpqPTF9ZWxzZSBqPTMKcS5hPWsrbgpz -Kz1qCnI9cwpwPSEwfWVsc2V7aWYobzwxMjcpe209bz4+PjQKaWYoIShtPDgpKXJldHVybiBBLk9IKEIu -ZWEsbSkKbT0oQi5lYVttXSYxPDwobyYxNSkpIT09MH1lbHNlIG09ITEKaWYobSl7aWYocCYmNjU8PW8m -JjkwPj1vKXtpZihxPT1udWxsKXE9bmV3IEEuTSgiIikKaWYocjxzKXtxLmErPUIueEIuTmooYSxyLHMp -CnI9c31wPSExfSsrc31lbHNle2lmKG88PTkzKXttPW8+Pj40CmlmKCEobTw4KSlyZXR1cm4gQS5PSChC -LmFrLG0pCm09KEIuYWtbbV0mMTw8KG8mMTUpKSE9PTB9ZWxzZSBtPSExCmlmKG0pQS5SMyhhLHMsIklu -dmFsaWQgY2hhcmFjdGVyIikKZWxzZXtpZigobyY2NDUxMik9PT01NTI5NiYmcysxPGMpe2k9Qi54Qi5P -KGEscysxKQppZigoaSY2NDUxMik9PT01NjMyMCl7bz0obyYxMDIzKTw8MTB8aSYxMDIzfDY1NTM2Cmo9 -Mn1lbHNlIGo9MX1lbHNlIGo9MQpsPUIueEIuTmooYSxyLHMpCmlmKCFwKWw9bC50b0xvd2VyQ2FzZSgp -CmlmKHE9PW51bGwpe3E9bmV3IEEuTSgiIikKbT1xfWVsc2UgbT1xCm0uYSs9bAptLmErPUEuelgobykK -cys9agpyPXN9fX19aWYocT09bnVsbClyZXR1cm4gQi54Qi5OaihhLGIsYykKaWYocjxjKXtsPUIueEIu -TmooYSxyLGMpCnEuYSs9IXA/bC50b0xvd2VyQ2FzZSgpOmx9bT1xLmEKcmV0dXJuIG0uY2hhckNvZGVB -dCgwKT09MD9tOm19LApQaShhLGIsYyl7dmFyIHMscixxLHAKaWYoYj09PWMpcmV0dXJuIiIKaWYoIUEu -RXQoQi54Qi5XKGEsYikpKUEuUjMoYSxiLCJTY2hlbWUgbm90IHN0YXJ0aW5nIHdpdGggYWxwaGFiZXRp -YyBjaGFyYWN0ZXIiKQpmb3Iocz1iLHI9ITE7czxjOysrcyl7cT1CLnhCLlcoYSxzKQppZihxPDEyOCl7 -cD1xPj4+NAppZighKHA8OCkpcmV0dXJuIEEuT0goQi5tSyxwKQpwPShCLm1LW3BdJjE8PChxJjE1KSkh -PT0wfWVsc2UgcD0hMQppZighcClBLlIzKGEscywiSWxsZWdhbCBzY2hlbWUgY2hhcmFjdGVyIikKaWYo -NjU8PXEmJnE8PTkwKXI9ITB9YT1CLnhCLk5qKGEsYixjKQpyZXR1cm4gQS5ZYShyP2EudG9Mb3dlckNh -c2UoKTphKX0sCllhKGEpe2lmKGE9PT0iaHR0cCIpcmV0dXJuImh0dHAiCmlmKGE9PT0iZmlsZSIpcmV0 -dXJuImZpbGUiCmlmKGE9PT0iaHR0cHMiKXJldHVybiJodHRwcyIKaWYoYT09PSJwYWNrYWdlIilyZXR1 -cm4icGFja2FnZSIKcmV0dXJuIGF9LAp6UihhLGIsYyl7aWYoYT09bnVsbClyZXR1cm4iIgpyZXR1cm4g -QS5QSShhLGIsYyxCLnRvLCExKX0sCmthKGEsYixjLGQsZSxmKXt2YXIgcyxyLHE9ZT09PSJmaWxlIixw -PXF8fGYKaWYoYT09bnVsbCl7aWYoZD09bnVsbClyZXR1cm4gcT8iLyI6IiIKcz1BLnQ2KGQpCnI9bmV3 -IEEubEooZCxzLkMoInFVKDEpIikuYShuZXcgQS5SWigpKSxzLkMoImxKPDEscVU+IikpLkgoMCwiLyIp -fWVsc2UgaWYoZCE9bnVsbCl0aHJvdyBBLmIoQS54WSgiQm90aCBwYXRoIGFuZCBwYXRoU2VnbWVudHMg -c3BlY2lmaWVkIixudWxsKSkKZWxzZSByPUEuUEkoYSxiLGMsQi5XZCwhMCkKaWYoci5sZW5ndGg9PT0w -KXtpZihxKXJldHVybiIvIn1lbHNlIGlmKHAmJiFCLnhCLm4ociwiLyIpKXI9Ii8iK3IKcmV0dXJuIEEu -SnIocixlLGYpfSwKSnIoYSxiLGMpe3ZhciBzPWIubGVuZ3RoPT09MAppZihzJiYhYyYmIUIueEIubihh -LCIvIikpcmV0dXJuIEEud0YoYSwhc3x8YykKcmV0dXJuIEEueGUoYSl9LApsZShhLGIsYyxkKXt2YXIg -cyxyPXt9CmlmKGEhPW51bGwpe2lmKGQhPW51bGwpdGhyb3cgQS5iKEEueFkoIkJvdGggcXVlcnkgYW5k -IHF1ZXJ5UGFyYW1ldGVycyBzcGVjaWZpZWQiLG51bGwpKQpyZXR1cm4gQS5QSShhLGIsYyxCLlZDLCEw -KX1pZihkPT1udWxsKXJldHVybiBudWxsCnM9bmV3IEEuTSgiIikKci5hPSIiCmQuSygwLG5ldyBBLnk1 -KG5ldyBBLk1FKHIscykpKQpyPXMuYQpyZXR1cm4gci5jaGFyQ29kZUF0KDApPT0wP3I6cn0sCnRHKGEs -YixjKXtpZihhPT1udWxsKXJldHVybiBudWxsCnJldHVybiBBLlBJKGEsYixjLEIuVkMsITApfSwKcnYo -YSxiLGMpe3ZhciBzLHIscSxwLG8sbj1iKzIKaWYobj49YS5sZW5ndGgpcmV0dXJuIiUiCnM9Qi54Qi5P -KGEsYisxKQpyPUIueEIuTyhhLG4pCnE9QS5vbyhzKQpwPUEub28ocikKaWYocTwwfHxwPDApcmV0dXJu -IiUiCm89cSoxNitwCmlmKG88MTI3KXtuPUIuam4ud0cobyw0KQppZighKG48OCkpcmV0dXJuIEEuT0go -Qi5GMyxuKQpuPShCLkYzW25dJjE8PChvJjE1KSkhPT0wfWVsc2Ugbj0hMQppZihuKXJldHVybiBBLkx3 -KGMmJjY1PD1vJiY5MD49bz8ob3wzMik+Pj4wOm8pCmlmKHM+PTk3fHxyPj05NylyZXR1cm4gQi54Qi5O -aihhLGIsYiszKS50b1VwcGVyQ2FzZSgpCnJldHVybiBudWxsfSwKelgoYSl7dmFyIHMscixxLHAsbyxu -LG0sbCxrPSIwMTIzNDU2Nzg5QUJDREVGIgppZihhPDEyOCl7cz1uZXcgVWludDhBcnJheSgzKQpzWzBd -PTM3CnNbMV09Qi54Qi5XKGssYT4+PjQpCnNbMl09Qi54Qi5XKGssYSYxNSl9ZWxzZXtpZihhPjIwNDcp -aWYoYT42NTUzNSl7cj0yNDAKcT00fWVsc2V7cj0yMjQKcT0zfWVsc2V7cj0xOTIKcT0yfXA9MypxCnM9 -bmV3IFVpbnQ4QXJyYXkocCkKZm9yKG89MDstLXEscT49MDtyPTEyOCl7bj1CLmpuLmJmKGEsNipxKSY2 -M3xyCmlmKCEobzxwKSlyZXR1cm4gQS5PSChzLG8pCnNbb109MzcKbT1vKzEKbD1CLnhCLlcoayxuPj4+ -NCkKaWYoIShtPHApKXJldHVybiBBLk9IKHMsbSkKc1ttXT1sCmw9bysyCm09Qi54Qi5XKGssbiYxNSkK -aWYoIShsPHApKXJldHVybiBBLk9IKHMsbCkKc1tsXT1tCm8rPTN9fXJldHVybiBBLkhNKHMsMCxudWxs -KX0sClBJKGEsYixjLGQsZSl7dmFyIHM9QS5VbChhLGIsYyxkLGUpCnJldHVybiBzPT1udWxsP0IueEIu -TmooYSxiLGMpOnN9LApVbChhLGIsYyxkLGUpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGk9bnVsbApm -b3Iocz0hZSxyPWIscT1yLHA9aTtyPGM7KXtvPUIueEIuTyhhLHIpCmlmKG88MTI3KXtuPW8+Pj40Cmlm -KCEobjw4KSlyZXR1cm4gQS5PSChkLG4pCm49KGRbbl0mMTw8KG8mMTUpKSE9PTB9ZWxzZSBuPSExCmlm -KG4pKytyCmVsc2V7aWYobz09PTM3KXttPUEucnYoYSxyLCExKQppZihtPT1udWxsKXtyKz0zCmNvbnRp -bnVlfWlmKCIlIj09PW0pe209IiUyNSIKbD0xfWVsc2UgbD0zfWVsc2V7aWYocylpZihvPD05Myl7bj1v -Pj4+NAppZighKG48OCkpcmV0dXJuIEEuT0goQi5hayxuKQpuPShCLmFrW25dJjE8PChvJjE1KSkhPT0w -fWVsc2Ugbj0hMQplbHNlIG49ITEKaWYobil7QS5SMyhhLHIsIkludmFsaWQgY2hhcmFjdGVyIikKbD1p -Cm09bH1lbHNle2lmKChvJjY0NTEyKT09PTU1Mjk2KXtuPXIrMQppZihuPGMpe2s9Qi54Qi5PKGEsbikK -aWYoKGsmNjQ1MTIpPT09NTYzMjApe289KG8mMTAyMyk8PDEwfGsmMTAyM3w2NTUzNgpsPTJ9ZWxzZSBs -PTF9ZWxzZSBsPTF9ZWxzZSBsPTEKbT1BLnpYKG8pfX1pZihwPT1udWxsKXtwPW5ldyBBLk0oIiIpCm49 -cH1lbHNlIG49cApqPW4uYSs9Qi54Qi5OaihhLHEscikKbi5hPWorQS5FaihtKQppZih0eXBlb2YgbCE9 -PSJudW1iZXIiKXJldHVybiBBLnBZKGwpCnIrPWwKcT1yfX1pZihwPT1udWxsKXJldHVybiBpCmlmKHE8 -YylwLmErPUIueEIuTmooYSxxLGMpCnM9cC5hCnJldHVybiBzLmNoYXJDb2RlQXQoMCk9PTA/czpzfSwK -eUIoYSl7aWYoQi54Qi5uKGEsIi4iKSlyZXR1cm4hMApyZXR1cm4gQi54Qi5PWShhLCIvLiIpIT09LTF9 -LAp4ZShhKXt2YXIgcyxyLHEscCxvLG4sbQppZighQS55QihhKSlyZXR1cm4gYQpzPUEuUUkoW10sdC5z -KQpmb3Iocj1hLnNwbGl0KCIvIikscT1yLmxlbmd0aCxwPSExLG89MDtvPHE7KytvKXtuPXJbb10KaWYo -Si5STShuLCIuLiIpKXttPXMubGVuZ3RoCmlmKG0hPT0wKXtpZigwPj1tKXJldHVybiBBLk9IKHMsLTEp -CnMucG9wKCkKaWYocy5sZW5ndGg9PT0wKUIuTm0uaShzLCIiKX1wPSEwfWVsc2UgaWYoIi4iPT09bilw -PSEwCmVsc2V7Qi5ObS5pKHMsbikKcD0hMX19aWYocClCLk5tLmkocywiIikKcmV0dXJuIEIuTm0uSChz -LCIvIil9LAp3RihhLGIpe3ZhciBzLHIscSxwLG8sbgppZighQS55QihhKSlyZXR1cm4hYj9BLkMxKGEp -OmEKcz1BLlFJKFtdLHQucykKZm9yKHI9YS5zcGxpdCgiLyIpLHE9ci5sZW5ndGgscD0hMSxvPTA7bzxx -Oysrbyl7bj1yW29dCmlmKCIuLiI9PT1uKWlmKHMubGVuZ3RoIT09MCYmQi5ObS5ncloocykhPT0iLi4i -KXtpZigwPj1zLmxlbmd0aClyZXR1cm4gQS5PSChzLC0xKQpzLnBvcCgpCnA9ITB9ZWxzZXtCLk5tLmko -cywiLi4iKQpwPSExfWVsc2UgaWYoIi4iPT09bilwPSEwCmVsc2V7Qi5ObS5pKHMsbikKcD0hMX19cj1z -Lmxlbmd0aAppZihyIT09MClpZihyPT09MSl7aWYoMD49cilyZXR1cm4gQS5PSChzLDApCnI9c1swXS5s -ZW5ndGg9PT0wfWVsc2Ugcj0hMQplbHNlIHI9ITAKaWYocilyZXR1cm4iLi8iCmlmKHB8fEIuTm0uZ3Ja -KHMpPT09Ii4uIilCLk5tLmkocywiIikKaWYoIWIpe2lmKDA+PXMubGVuZ3RoKXJldHVybiBBLk9IKHMs -MCkKQi5ObS5ZNShzLDAsQS5DMShzWzBdKSl9cmV0dXJuIEIuTm0uSChzLCIvIil9LApDMShhKXt2YXIg -cyxyLHEscD1hLmxlbmd0aAppZihwPj0yJiZBLkV0KEIueEIuVyhhLDApKSlmb3Iocz0xO3M8cDsrK3Mp -e3I9Qi54Qi5XKGEscykKaWYocj09PTU4KXJldHVybiBCLnhCLk5qKGEsMCxzKSsiJTNBIitCLnhCLnlu -KGEscysxKQppZihyPD0xMjcpe3E9cj4+PjQKaWYoIShxPDgpKXJldHVybiBBLk9IKEIubUsscSkKcT0o -Qi5tS1txXSYxPDwociYxNSkpPT09MH1lbHNlIHE9ITAKaWYocSlicmVha31yZXR1cm4gYX0sCnVqKGEs -Yil7aWYoYS5oQigicGFja2FnZSIpJiZhLmM9PW51bGwpcmV0dXJuIEEuZkYoYiwwLGIubGVuZ3RoKQpy -ZXR1cm4tMX0sCm1uKGEpe3ZhciBzLHIscSxwPWEuZ0ZqKCksbz1wLmxlbmd0aAppZihvPjAmJkouSG0o -cFswXSk9PT0yJiZKLmE2KHBbMF0sMSk9PT01OCl7aWYoMD49bylyZXR1cm4gQS5PSChwLDApCkEucmco -Si5hNihwWzBdLDApLCExKQpBLkhOKHAsITEsMSkKcz0hMH1lbHNle0EuSE4ocCwhMSwwKQpzPSExfXI9 -YS5ndFQoKSYmIXM/IiIrIlxcIjoiIgppZihhLmdjaigpKXtxPWEuZ0pmKGEpCmlmKHEubGVuZ3RoIT09 -MClyPXIrIlxcIitxKyJcXCJ9cj1BLmwocixwLCJcXCIpCm89cyYmbz09PTE/cisiXFwiOnIKcmV0dXJu -IG8uY2hhckNvZGVBdCgwKT09MD9vOm99LApJaChhLGIpe3ZhciBzLHIscQpmb3Iocz0wLHI9MDtyPDI7 -KytyKXtxPUIueEIuVyhhLGIrcikKaWYoNDg8PXEmJnE8PTU3KXM9cyoxNitxLTQ4CmVsc2V7cXw9MzIK -aWYoOTc8PXEmJnE8PTEwMilzPXMqMTYrcS04NwplbHNlIHRocm93IEEuYihBLnhZKCJJbnZhbGlkIFVS -TCBlbmNvZGluZyIsbnVsbCkpfX1yZXR1cm4gc30sCmt1KGEsYixjLGQsZSl7dmFyIHMscixxLHAsbz1i -CndoaWxlKCEwKXtpZighKG88Yykpe3M9ITAKYnJlYWt9cj1CLnhCLlcoYSxvKQppZihyPD0xMjcpaWYo -ciE9PTM3KXE9ZSYmcj09PTQzCmVsc2UgcT0hMAplbHNlIHE9ITAKaWYocSl7cz0hMQpicmVha30rK299 -aWYocyl7aWYoQi54TSE9PWQpcT0hMQplbHNlIHE9ITAKaWYocSlyZXR1cm4gQi54Qi5OaihhLGIsYykK -ZWxzZSBwPW5ldyBBLnFqKEIueEIuTmooYSxiLGMpKX1lbHNle3A9QS5RSShbXSx0LnQpCmZvcihxPWEu -bGVuZ3RoLG89YjtvPGM7KytvKXtyPUIueEIuVyhhLG8pCmlmKHI+MTI3KXRocm93IEEuYihBLnhZKCJJ -bGxlZ2FsIHBlcmNlbnQgZW5jb2RpbmcgaW4gVVJJIixudWxsKSkKaWYocj09PTM3KXtpZihvKzM+cSl0 -aHJvdyBBLmIoQS54WSgiVHJ1bmNhdGVkIFVSSSIsbnVsbCkpCkIuTm0uaShwLEEuSWgoYSxvKzEpKQpv -Kz0yfWVsc2UgaWYoZSYmcj09PTQzKUIuTm0uaShwLDMyKQplbHNlIEIuTm0uaShwLHIpfX10LkwuYShw -KQpyZXR1cm4gQi5vRS5XSihwKX0sCkV0KGEpe3ZhciBzPWF8MzIKcmV0dXJuIDk3PD1zJiZzPD0xMjJ9 -LApLRChhLGIsYyl7dmFyIHMscixxLHAsbyxuLG0sbCxrPSJJbnZhbGlkIE1JTUUgdHlwZSIsaj1BLlFJ -KFtiLTFdLHQudCkKZm9yKHM9YS5sZW5ndGgscj1iLHE9LTEscD1udWxsO3I8czsrK3Ipe3A9Qi54Qi5X -KGEscikKaWYocD09PTQ0fHxwPT09NTkpYnJlYWsKaWYocD09PTQ3KXtpZihxPDApe3E9cgpjb250aW51 -ZX10aHJvdyBBLmIoQS5ycihrLGEscikpfX1pZihxPDAmJnI+Yil0aHJvdyBBLmIoQS5ycihrLGEscikp -CmZvcig7cCE9PTQ0Oyl7Qi5ObS5pKGoscik7KytyCmZvcihvPS0xO3I8czsrK3Ipe3A9Qi54Qi5XKGEs -cikKaWYocD09PTYxKXtpZihvPDApbz1yfWVsc2UgaWYocD09PTU5fHxwPT09NDQpYnJlYWt9aWYobz49 -MClCLk5tLmkoaixvKQplbHNle249Qi5ObS5nclooaikKaWYocCE9PTQ0fHxyIT09bis3fHwhQi54Qi5R -aShhLCJiYXNlNjQiLG4rMSkpdGhyb3cgQS5iKEEucnIoIkV4cGVjdGluZyAnPSciLGEscikpCmJyZWFr -fX1CLk5tLmkoaixyKQptPXIrMQppZigoai5sZW5ndGgmMSk9PT0xKWE9Qi5oOS55cihhLG0scykKZWxz -ZXtsPUEuVWwoYSxtLHMsQi5WQywhMCkKaWYobCE9bnVsbClhPUIueEIuaTcoYSxtLHMsbCl9cmV0dXJu -IG5ldyBBLlBFKGEsaixjKX0sCktOKCl7dmFyIHMscixxLHAsbyxuLG09IjAxMjM0NTY3ODlBQkNERUZH -SElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6LS5ffiEkJicoKSorLDs9 -IixsPSIuIixrPSI6IixqPSIvIixpPSI/IixoPSIjIixnPUEuUUkobmV3IEFycmF5KDIyKSx0LmdOKQpm -b3Iocz0wO3M8MjI7KytzKWdbc109bmV3IFVpbnQ4QXJyYXkoOTYpCnI9bmV3IEEueUkoZykKcT1uZXcg -QS5jNigpCnA9bmV3IEEucWQoKQpvPXQuZ2MKbj1vLmEoci4kMigwLDIyNSkpCnEuJDMobixtLDEpCnEu -JDMobixsLDE0KQpxLiQzKG4saywzNCkKcS4kMyhuLGosMykKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwy -MDUpCm49by5hKHIuJDIoMTQsMjI1KSkKcS4kMyhuLG0sMSkKcS4kMyhuLGwsMTUpCnEuJDMobixrLDM0 -KQpxLiQzKG4saiwyMzQpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDE1LDIy -NSkpCnEuJDMobixtLDEpCnEuJDMobiwiJSIsMjI1KQpxLiQzKG4saywzNCkKcS4kMyhuLGosOSkKcS4k -MyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIuJDIoMSwyMjUpKQpxLiQzKG4sbSwxKQpxLiQz -KG4saywzNCkKcS4kMyhuLGosMTApCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQy -KDIsMjM1KSkKcS4kMyhuLG0sMTM5KQpxLiQzKG4saiwxMzEpCnEuJDMobixsLDE0NikKcS4kMyhuLGks -MTcyKQpxLiQzKG4saCwyMDUpCm49by5hKHIuJDIoMywyMzUpKQpxLiQzKG4sbSwxMSkKcS4kMyhuLGos -NjgpCnEuJDMobixsLDE4KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMig0LDIy -OSkpCnEuJDMobixtLDUpCnAuJDMobiwiQVoiLDIyOSkKcS4kMyhuLGssMTAyKQpxLiQzKG4sIkAiLDY4 -KQpxLiQzKG4sIlsiLDIzMikKcS4kMyhuLGosMTM4KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkK -bj1vLmEoci4kMig1LDIyOSkpCnEuJDMobixtLDUpCnAuJDMobiwiQVoiLDIyOSkKcS4kMyhuLGssMTAy -KQpxLiQzKG4sIkAiLDY4KQpxLiQzKG4saiwxMzgpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpu -PW8uYShyLiQyKDYsMjMxKSkKcC4kMyhuLCIxOSIsNykKcS4kMyhuLCJAIiw2OCkKcS4kMyhuLGosMTM4 -KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMig3LDIzMSkpCnAuJDMobiwiMDki +ImRvdWJsZT8iKSl9LApvayhhKXtyZXR1cm4gdHlwZW9mIGE9PSJudW1iZXIiJiZNYXRoLmZsb29yKGEp +PT09YX0sCklaKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIiYmTWF0aC5mbG9vcihhKT09PWEpcmV0dXJu +IGEKdGhyb3cgQS5iKEEucShhLCJpbnQiKSl9LAp1UChhKXtpZih0eXBlb2YgYT09Im51bWJlciImJk1h +dGguZmxvb3IoYSk9PT1hKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgQS5iKEEucShh +LCJpbnQiKSl9LApVYyhhKXtpZih0eXBlb2YgYT09Im51bWJlciImJk1hdGguZmxvb3IoYSk9PT1hKXJl +dHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgQS5iKEEucShhLCJpbnQ/IikpfSwKS0goYSl7 +cmV0dXJuIHR5cGVvZiBhPT0ibnVtYmVyIn0sCno1KGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1 +cm4gYQp0aHJvdyBBLmIoQS5xKGEsIm51bSIpKX0sClcxKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIily +ZXR1cm4gYQppZihhPT1udWxsKXJldHVybiBhCnRocm93IEEuYihBLnEoYSwibnVtIikpfSwKY1UoYSl7 +aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgQS5i +KEEucShhLCJudW0/IikpfSwKTU0oYSl7cmV0dXJuIHR5cGVvZiBhPT0ic3RyaW5nIn0sCm4oYSl7aWYo +dHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhCnRocm93IEEuYihBLnEoYSwiU3RyaW5nIikpfSwKaE4o +YSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cg +QS5iKEEucShhLCJTdHJpbmciKSl9LAprKGEpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gYQpp +ZihhPT1udWxsKXJldHVybiBhCnRocm93IEEuYihBLnEoYSwiU3RyaW5nPyIpKX0sCmlvKGEsYil7dmFy +IHMscixxCmZvcihzPSIiLHI9IiIscT0wO3E8YS5sZW5ndGg7KytxLHI9IiwgIilzKz1yK0EuZG0oYVtx +XSxiKQpyZXR1cm4gc30sCmJJKGE0LGE1LGE2KXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxm +LGUsZCxjLGIsYSxhMCxhMSxhMixhMz0iLCAiCmlmKGE2IT1udWxsKXtzPWE2Lmxlbmd0aAppZihhNT09 +bnVsbCl7YTU9QS5RSShbXSx0LnMpCnI9bnVsbH1lbHNlIHI9YTUubGVuZ3RoCnE9YTUubGVuZ3RoCmZv +cihwPXM7cD4wOy0tcClCLk5tLmkoYTUsIlQiKyhxK3ApKQpmb3Iobz10Llgsbj10Ll8sbT0iPCIsbD0i +IixwPTA7cDxzOysrcCxsPWEzKXtrPWE1Lmxlbmd0aApqPWstMS1wCmlmKCEoaj49MCkpcmV0dXJuIEEu +T0goYTUsaikKbT1CLnhCLmgobStsLGE1W2pdKQppPWE2W3BdCmg9aS54CmlmKCEoaD09PTJ8fGg9PT0z +fHxoPT09NHx8aD09PTV8fGk9PT1vKSlpZighKGk9PT1uKSlrPSExCmVsc2Ugaz0hMAplbHNlIGs9ITAK +aWYoIWspbSs9IiBleHRlbmRzICIrQS5kbShpLGE1KX1tKz0iPiJ9ZWxzZXttPSIiCnI9bnVsbH1vPWE0 +LnkKZz1hNC56CmY9Zy5hCmU9Zi5sZW5ndGgKZD1nLmIKYz1kLmxlbmd0aApiPWcuYwphPWIubGVuZ3Ro +CmEwPUEuZG0obyxhNSkKZm9yKGExPSIiLGEyPSIiLHA9MDtwPGU7KytwLGEyPWEzKWExKz1hMitBLmRt +KGZbcF0sYTUpCmlmKGM+MCl7YTErPWEyKyJbIgpmb3IoYTI9IiIscD0wO3A8YzsrK3AsYTI9YTMpYTEr +PWEyK0EuZG0oZFtwXSxhNSkKYTErPSJdIn1pZihhPjApe2ExKz1hMisieyIKZm9yKGEyPSIiLHA9MDtw +PGE7cCs9MyxhMj1hMyl7YTErPWEyCmlmKGJbcCsxXSlhMSs9InJlcXVpcmVkICIKYTErPUEuZG0oYltw +KzJdLGE1KSsiICIrYltwXX1hMSs9In0ifWlmKHIhPW51bGwpe2E1LnRvU3RyaW5nCmE1Lmxlbmd0aD1y +fXJldHVybiBtKyIoIithMSsiKSA9PiAiK2EwfSwKZG0oYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsPWEu +eAppZihsPT09NSlyZXR1cm4iZXJhc2VkIgppZihsPT09MilyZXR1cm4iZHluYW1pYyIKaWYobD09PTMp +cmV0dXJuInZvaWQiCmlmKGw9PT0xKXJldHVybiJOZXZlciIKaWYobD09PTQpcmV0dXJuImFueSIKaWYo +bD09PTYpe3M9QS5kbShhLnksYikKcmV0dXJuIHN9aWYobD09PTcpe3I9YS55CnM9QS5kbShyLGIpCnE9 +ci54CnJldHVybihxPT09MTF8fHE9PT0xMj8iKCIrcysiKSI6cykrIj8ifWlmKGw9PT04KXJldHVybiJG +dXR1cmVPcjwiK0EuZG0oYS55LGIpKyI+IgppZihsPT09OSl7cD1BLm8zKGEueSkKbz1hLnoKcmV0dXJu +IG8ubGVuZ3RoPjA/cCsoIjwiK0EuaW8obyxiKSsiPiIpOnB9aWYobD09PTExKXJldHVybiBBLmJJKGEs +YixudWxsKQppZihsPT09MTIpcmV0dXJuIEEuYkkoYS55LGIsYS56KQppZihsPT09MTMpe249YS55Cm09 +Yi5sZW5ndGgKbj1tLTEtbgppZighKG4+PTAmJm48bSkpcmV0dXJuIEEuT0goYixuKQpyZXR1cm4gYltu +XX1yZXR1cm4iPyJ9LApvMyhhKXt2YXIgcz12Lm1hbmdsZWRHbG9iYWxOYW1lc1thXQppZihzIT1udWxs +KXJldHVybiBzCnJldHVybiJtaW5pZmllZDoiK2F9LApRbyhhLGIpe3ZhciBzPWEudFJbYl0KZm9yKDt0 +eXBlb2Ygcz09InN0cmluZyI7KXM9YS50UltzXQpyZXR1cm4gc30sCmFpKGEsYil7dmFyIHMscixxLHAs +byxuPWEuZVQsbT1uW2JdCmlmKG09PW51bGwpcmV0dXJuIEEuRShhLGIsITEpCmVsc2UgaWYodHlwZW9m +IG09PSJudW1iZXIiKXtzPW0Kcj1BLm0oYSw1LCIjIikKcT1BLnZVKHMpCmZvcihwPTA7cDxzOysrcClx +W3BdPXIKbz1BLkooYSxiLHEpCm5bYl09bwpyZXR1cm4gb31lbHNlIHJldHVybiBtfSwKeGIoYSxiKXty +ZXR1cm4gQS5JeChhLnRSLGIpfSwKRkYoYSxiKXtyZXR1cm4gQS5JeChhLmVULGIpfSwKRShhLGIsYyl7 +dmFyIHMscj1hLmVDLHE9ci5nZXQoYikKaWYocSE9bnVsbClyZXR1cm4gcQpzPUEuaShBLm8oYSxudWxs +LGIsYykpCnIuc2V0KGIscykKcmV0dXJuIHN9LApjRShhLGIsYyl7dmFyIHMscixxPWIuUQppZihxPT1u +dWxsKXE9Yi5RPW5ldyBNYXAoKQpzPXEuZ2V0KGMpCmlmKHMhPW51bGwpcmV0dXJuIHMKcj1BLmkoQS5v +KGEsYixjLCEwKSkKcS5zZXQoYyxyKQpyZXR1cm4gcn0sCnY1KGEsYixjKXt2YXIgcyxyLHEscD1iLmFz +CmlmKHA9PW51bGwpcD1iLmFzPW5ldyBNYXAoKQpzPWMuYXQKcj1wLmdldChzKQppZihyIT1udWxsKXJl +dHVybiByCnE9QS5hKGEsYixjLng9PT0xMD9jLno6W2NdKQpwLnNldChzLHEpCnJldHVybiBxfSwKQkQo +YSxiKXtiLmE9QS5BdQpiLmI9QS5KSgpyZXR1cm4gYn0sCm0oYSxiLGMpe3ZhciBzLHIscT1hLmVDLmdl +dChjKQppZihxIT1udWxsKXJldHVybiBxCnM9bmV3IEEuSmMobnVsbCxudWxsKQpzLng9YgpzLmF0PWMK +cj1BLkJEKGEscykKYS5lQy5zZXQoYyxyKQpyZXR1cm4gcn0sCkMoYSxiLGMpe3ZhciBzLHI9Yi5hdCsi +KiIscT1hLmVDLmdldChyKQppZihxIT1udWxsKXJldHVybiBxCnM9QS5aNyhhLGIscixjKQphLmVDLnNl +dChyLHMpCnJldHVybiBzfSwKWjcoYSxiLGMsZCl7dmFyIHMscixxCmlmKGQpe3M9Yi54CmlmKCFBLkE4 +KGIpKXI9Yj09PXQuUHx8Yj09PXQuVHx8cz09PTd8fHM9PT02CmVsc2Ugcj0hMAppZihyKXJldHVybiBi +fXE9bmV3IEEuSmMobnVsbCxudWxsKQpxLng9NgpxLnk9YgpxLmF0PWMKcmV0dXJuIEEuQkQoYSxxKX0s +CkIoYSxiLGMpe3ZhciBzLHI9Yi5hdCsiPyIscT1hLmVDLmdldChyKQppZihxIT1udWxsKXJldHVybiBx +CnM9QS5sbChhLGIscixjKQphLmVDLnNldChyLHMpCnJldHVybiBzfSwKbGwoYSxiLGMsZCl7dmFyIHMs +cixxLHAKaWYoZCl7cz1iLngKaWYoIUEuQTgoYikpaWYoIShiPT09dC5QfHxiPT09dC5UKSlpZihzIT09 +NylyPXM9PT04JiZBLmxSKGIueSkKZWxzZSByPSEwCmVsc2Ugcj0hMAplbHNlIHI9ITAKaWYocilyZXR1 +cm4gYgplbHNlIGlmKHM9PT0xfHxiPT09dC5hdylyZXR1cm4gdC5QCmVsc2UgaWYocz09PTYpe3E9Yi55 +CmlmKHEueD09PTgmJkEubFIocS55KSlyZXR1cm4gcQplbHNlIHJldHVybiBBLmN6KGEsYil9fXA9bmV3 +IEEuSmMobnVsbCxudWxsKQpwLng9NwpwLnk9YgpwLmF0PWMKcmV0dXJuIEEuQkQoYSxwKX0sCmYoYSxi +LGMpe3ZhciBzLHI9Yi5hdCsiLyIscT1hLmVDLmdldChyKQppZihxIT1udWxsKXJldHVybiBxCnM9QS5l +VihhLGIscixjKQphLmVDLnNldChyLHMpCnJldHVybiBzfSwKZVYoYSxiLGMsZCl7dmFyIHMscixxCmlm +KGQpe3M9Yi54CmlmKCFBLkE4KGIpKWlmKCEoYj09PXQuXykpcj0hMQplbHNlIHI9ITAKZWxzZSByPSEw +CmlmKHJ8fGI9PT10LkspcmV0dXJuIGIKZWxzZSBpZihzPT09MSlyZXR1cm4gQS5KKGEsImI4IixbYl0p +CmVsc2UgaWYoYj09PXQuUHx8Yj09PXQuVClyZXR1cm4gdC5iR31xPW5ldyBBLkpjKG51bGwsbnVsbCkK +cS54PTgKcS55PWIKcS5hdD1jCnJldHVybiBBLkJEKGEscSl9LApIKGEsYil7dmFyIHMscixxPSIiK2Ir +Il4iLHA9YS5lQy5nZXQocSkKaWYocCE9bnVsbClyZXR1cm4gcApzPW5ldyBBLkpjKG51bGwsbnVsbCkK +cy54PTEzCnMueT1iCnMuYXQ9cQpyPUEuQkQoYSxzKQphLmVDLnNldChxLHIpCnJldHVybiByfSwKVXgo +YSl7dmFyIHMscixxLHA9YS5sZW5ndGgKZm9yKHM9IiIscj0iIixxPTA7cTxwOysrcSxyPSIsIilzKz1y +K2FbcV0uYXQKcmV0dXJuIHN9LApTNChhKXt2YXIgcyxyLHEscCxvLG49YS5sZW5ndGgKZm9yKHM9IiIs +cj0iIixxPTA7cTxuO3ErPTMscj0iLCIpe3A9YVtxXQpvPWFbcSsxXT8iISI6IjoiCnMrPXIrcCtvK2Fb +cSsyXS5hdH1yZXR1cm4gc30sCkooYSxiLGMpe3ZhciBzLHIscSxwPWIKaWYoYy5sZW5ndGg+MClwKz0i +PCIrQS5VeChjKSsiPiIKcz1hLmVDLmdldChwKQppZihzIT1udWxsKXJldHVybiBzCnI9bmV3IEEuSmMo +bnVsbCxudWxsKQpyLng9OQpyLnk9YgpyLno9YwppZihjLmxlbmd0aD4wKXIuYz1jWzBdCnIuYXQ9cApx +PUEuQkQoYSxyKQphLmVDLnNldChwLHEpCnJldHVybiBxfSwKYShhLGIsYyl7dmFyIHMscixxLHAsbyxu +CmlmKGIueD09PTEwKXtzPWIueQpyPWIuei5jb25jYXQoYyl9ZWxzZXtyPWMKcz1ifXE9cy5hdCsoIjs8 +IitBLlV4KHIpKyI+IikKcD1hLmVDLmdldChxKQppZihwIT1udWxsKXJldHVybiBwCm89bmV3IEEuSmMo +bnVsbCxudWxsKQpvLng9MTAKby55PXMKby56PXIKby5hdD1xCm49QS5CRChhLG8pCmEuZUMuc2V0KHEs +bikKcmV0dXJuIG59LApkKGEsYixjKXt2YXIgcyxyLHEscCxvLG49Yi5hdCxtPWMuYSxsPW0ubGVuZ3Ro +LGs9Yy5iLGo9ay5sZW5ndGgsaT1jLmMsaD1pLmxlbmd0aCxnPSIoIitBLlV4KG0pCmlmKGo+MCl7cz1s +PjA/IiwiOiIiCmcrPXMrIlsiK0EuVXgoaykrIl0ifWlmKGg+MCl7cz1sPjA/IiwiOiIiCmcrPXMrInsi +K0EuUzQoaSkrIn0ifXI9bisoZysiKSIpCnE9YS5lQy5nZXQocikKaWYocSE9bnVsbClyZXR1cm4gcQpw +PW5ldyBBLkpjKG51bGwsbnVsbCkKcC54PTExCnAueT1iCnAuej1jCnAuYXQ9cgpvPUEuQkQoYSxwKQph +LmVDLnNldChyLG8pCnJldHVybiBvfSwKRChhLGIsYyxkKXt2YXIgcyxyPWIuYXQrKCI8IitBLlV4KGMp +KyI+IikscT1hLmVDLmdldChyKQppZihxIT1udWxsKXJldHVybiBxCnM9QS5odyhhLGIsYyxyLGQpCmEu +ZUMuc2V0KHIscykKcmV0dXJuIHN9LApodyhhLGIsYyxkLGUpe3ZhciBzLHIscSxwLG8sbixtLGwKaWYo +ZSl7cz1jLmxlbmd0aApyPUEudlUocykKZm9yKHE9MCxwPTA7cDxzOysrcCl7bz1jW3BdCmlmKG8ueD09 +PTEpe3JbcF09bzsrK3F9fWlmKHE+MCl7bj1BLlBMKGEsYixyLDApCm09QS5iWihhLGMsciwwKQpyZXR1 +cm4gQS5EKGEsbixtLGMhPT1tKX19bD1uZXcgQS5KYyhudWxsLG51bGwpCmwueD0xMgpsLnk9YgpsLno9 +YwpsLmF0PWQKcmV0dXJuIEEuQkQoYSxsKX0sCm8oYSxiLGMsZCl7cmV0dXJue3U6YSxlOmIscjpjLHM6 +W10scDowLG46ZH19LAppKGEpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaD1hLnIsZz1hLnMKZm9y +KHM9aC5sZW5ndGgscj0wO3I8czspe3E9aC5jaGFyQ29kZUF0KHIpCmlmKHE+PTQ4JiZxPD01NylyPUEu +QShyKzEscSxoLGcpCmVsc2UgaWYoKCgocXwzMik+Pj4wKS05NyY2NTUzNSk8MjZ8fHE9PT05NXx8cT09 +PTM2KXI9QS50KGEscixoLGcsITEpCmVsc2UgaWYocT09PTQ2KXI9QS50KGEscixoLGcsITApCmVsc2V7 +KytyCnN3aXRjaChxKXtjYXNlIDQ0OmJyZWFrCmNhc2UgNTg6Zy5wdXNoKCExKQpicmVhawpjYXNlIDMz +OmcucHVzaCghMCkKYnJlYWsKY2FzZSA1OTpnLnB1c2goQS5LKGEudSxhLmUsZy5wb3AoKSkpCmJyZWFr +CmNhc2UgOTQ6Zy5wdXNoKEEuSChhLnUsZy5wb3AoKSkpCmJyZWFrCmNhc2UgMzU6Zy5wdXNoKEEubShh +LnUsNSwiIyIpKQpicmVhawpjYXNlIDY0OmcucHVzaChBLm0oYS51LDIsIkAiKSkKYnJlYWsKY2FzZSAx +MjY6Zy5wdXNoKEEubShhLnUsMywifiIpKQpicmVhawpjYXNlIDYwOmcucHVzaChhLnApCmEucD1nLmxl +bmd0aApicmVhawpjYXNlIDYyOnA9YS51Cm89Zy5zcGxpY2UoYS5wKQpBLnIoYS51LGEuZSxvKQphLnA9 +Zy5wb3AoKQpuPWcucG9wKCkKaWYodHlwZW9mIG49PSJzdHJpbmciKWcucHVzaChBLkoocCxuLG8pKQpl +bHNle209QS5LKHAsYS5lLG4pCnN3aXRjaChtLngpe2Nhc2UgMTE6Zy5wdXNoKEEuRChwLG0sbyxhLm4p +KQpicmVhawpkZWZhdWx0OmcucHVzaChBLmEocCxtLG8pKQpicmVha319YnJlYWsKY2FzZSAzODpBLkko +YSxnKQpicmVhawpjYXNlIDQyOnA9YS51CmcucHVzaChBLkMocCxBLksocCxhLmUsZy5wb3AoKSksYS5u +KSkKYnJlYWsKY2FzZSA2MzpwPWEudQpnLnB1c2goQS5CKHAsQS5LKHAsYS5lLGcucG9wKCkpLGEubikp +CmJyZWFrCmNhc2UgNDc6cD1hLnUKZy5wdXNoKEEuZihwLEEuSyhwLGEuZSxnLnBvcCgpKSxhLm4pKQpi +cmVhawpjYXNlIDQwOmcucHVzaChhLnApCmEucD1nLmxlbmd0aApicmVhawpjYXNlIDQxOnA9YS51Cmw9 +bmV3IEEuRygpCms9cC5zRUEKaj1wLnNFQQpuPWcucG9wKCkKaWYodHlwZW9mIG49PSJudW1iZXIiKXN3 +aXRjaChuKXtjYXNlLTE6az1nLnBvcCgpCmJyZWFrCmNhc2UtMjpqPWcucG9wKCkKYnJlYWsKZGVmYXVs +dDpnLnB1c2gobikKYnJlYWt9ZWxzZSBnLnB1c2gobikKbz1nLnNwbGljZShhLnApCkEucihhLnUsYS5l +LG8pCmEucD1nLnBvcCgpCmwuYT1vCmwuYj1rCmwuYz1qCmcucHVzaChBLmQocCxBLksocCxhLmUsZy5w +b3AoKSksbCkpCmJyZWFrCmNhc2UgOTE6Zy5wdXNoKGEucCkKYS5wPWcubGVuZ3RoCmJyZWFrCmNhc2Ug +OTM6bz1nLnNwbGljZShhLnApCkEucihhLnUsYS5lLG8pCmEucD1nLnBvcCgpCmcucHVzaChvKQpnLnB1 +c2goLTEpCmJyZWFrCmNhc2UgMTIzOmcucHVzaChhLnApCmEucD1nLmxlbmd0aApicmVhawpjYXNlIDEy +NTpvPWcuc3BsaWNlKGEucCkKQS55KGEudSxhLmUsbykKYS5wPWcucG9wKCkKZy5wdXNoKG8pCmcucHVz +aCgtMikKYnJlYWsKZGVmYXVsdDp0aHJvdyJCYWQgY2hhcmFjdGVyICIrcX19fWk9Zy5wb3AoKQpyZXR1 +cm4gQS5LKGEudSxhLmUsaSl9LApBKGEsYixjLGQpe3ZhciBzLHIscT1iLTQ4CmZvcihzPWMubGVuZ3Ro +O2E8czsrK2Epe3I9Yy5jaGFyQ29kZUF0KGEpCmlmKCEocj49NDgmJnI8PTU3KSlicmVhawpxPXEqMTAr +KHItNDgpfWQucHVzaChxKQpyZXR1cm4gYX0sCnQoYSxiLGMsZCxlKXt2YXIgcyxyLHEscCxvLG4sbT1i +KzEKZm9yKHM9Yy5sZW5ndGg7bTxzOysrbSl7cj1jLmNoYXJDb2RlQXQobSkKaWYocj09PTQ2KXtpZihl +KWJyZWFrCmU9ITB9ZWxzZXtpZighKCgoKHJ8MzIpPj4+MCktOTcmNjU1MzUpPDI2fHxyPT09OTV8fHI9 +PT0zNikpcT1yPj00OCYmcjw9NTcKZWxzZSBxPSEwCmlmKCFxKWJyZWFrfX1wPWMuc3Vic3RyaW5nKGIs +bSkKaWYoZSl7cz1hLnUKbz1hLmUKaWYoby54PT09MTApbz1vLnkKbj1BLlFvKHMsby55KVtwXQppZihu +PT1udWxsKUEudignTm8gIicrcCsnIiBpbiAiJytBLm1EKG8pKyciJykKZC5wdXNoKEEuY0UocyxvLG4p +KX1lbHNlIGQucHVzaChwKQpyZXR1cm4gbX0sCkkoYSxiKXt2YXIgcz1iLnBvcCgpCmlmKDA9PT1zKXti +LnB1c2goQS5tKGEudSwxLCIwJiIpKQpyZXR1cm59aWYoMT09PXMpe2IucHVzaChBLm0oYS51LDQsIjEm +IikpCnJldHVybn10aHJvdyBBLmIoQS5oVigiVW5leHBlY3RlZCBleHRlbmRlZCBvcGVyYXRpb24gIitB +LkVqKHMpKSl9LApLKGEsYixjKXtpZih0eXBlb2YgYz09InN0cmluZyIpcmV0dXJuIEEuSihhLGMsYS5z +RUEpCmVsc2UgaWYodHlwZW9mIGM9PSJudW1iZXIiKXJldHVybiBBLlRWKGEsYixjKQplbHNlIHJldHVy +biBjfSwKcihhLGIsYyl7dmFyIHMscj1jLmxlbmd0aApmb3Iocz0wO3M8cjsrK3MpY1tzXT1BLksoYSxi +LGNbc10pfSwKeShhLGIsYyl7dmFyIHMscj1jLmxlbmd0aApmb3Iocz0yO3M8cjtzKz0zKWNbc109QS5L +KGEsYixjW3NdKX0sClRWKGEsYixjKXt2YXIgcyxyLHE9Yi54CmlmKHE9PT0xMCl7aWYoYz09PTApcmV0 +dXJuIGIueQpzPWIuegpyPXMubGVuZ3RoCmlmKGM8PXIpcmV0dXJuIHNbYy0xXQpjLT1yCmI9Yi55CnE9 +Yi54fWVsc2UgaWYoYz09PTApcmV0dXJuIGIKaWYocSE9PTkpdGhyb3cgQS5iKEEuaFYoIkluZGV4ZWQg +YmFzZSBtdXN0IGJlIGFuIGludGVyZmFjZSB0eXBlIikpCnM9Yi56CmlmKGM8PXMubGVuZ3RoKXJldHVy +biBzW2MtMV0KdGhyb3cgQS5iKEEuaFYoIkJhZCBpbmRleCAiK2MrIiBmb3IgIitiWyJbIl0oMCkpKX0s +CldlKGEsYixjLGQsZSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGoKaWYoYj09PWQpcmV0dXJuITAKaWYo +IUEuQTgoZCkpaWYoIShkPT09dC5fKSlzPSExCmVsc2Ugcz0hMAplbHNlIHM9ITAKaWYocylyZXR1cm4h +MApyPWIueAppZihyPT09NClyZXR1cm4hMAppZihBLkE4KGIpKXJldHVybiExCmlmKGIueCE9PTEpcz0h +MQplbHNlIHM9ITAKaWYocylyZXR1cm4hMApxPXI9PT0xMwppZihxKWlmKEEuV2UoYSxjW2IueV0sYyxk +LGUpKXJldHVybiEwCnA9ZC54CnM9Yj09PXQuUHx8Yj09PXQuVAppZihzKXtpZihwPT09OClyZXR1cm4g +QS5XZShhLGIsYyxkLnksZSkKcmV0dXJuIGQ9PT10LlB8fGQ9PT10LlR8fHA9PT03fHxwPT09Nn1pZihk +PT09dC5LKXtpZihyPT09OClyZXR1cm4gQS5XZShhLGIueSxjLGQsZSkKaWYocj09PTYpcmV0dXJuIEEu +V2UoYSxiLnksYyxkLGUpCnJldHVybiByIT09N31pZihyPT09NilyZXR1cm4gQS5XZShhLGIueSxjLGQs +ZSkKaWYocD09PTYpe3M9QS5jeihhLGQpCnJldHVybiBBLldlKGEsYixjLHMsZSl9aWYocj09PTgpe2lm +KCFBLldlKGEsYi55LGMsZCxlKSlyZXR1cm4hMQpyZXR1cm4gQS5XZShhLEEueFooYSxiKSxjLGQsZSl9 +aWYocj09PTcpe3M9QS5XZShhLHQuUCxjLGQsZSkKcmV0dXJuIHMmJkEuV2UoYSxiLnksYyxkLGUpfWlm +KHA9PT04KXtpZihBLldlKGEsYixjLGQueSxlKSlyZXR1cm4hMApyZXR1cm4gQS5XZShhLGIsYyxBLnha +KGEsZCksZSl9aWYocD09PTcpe3M9QS5XZShhLGIsYyx0LlAsZSkKcmV0dXJuIHN8fEEuV2UoYSxiLGMs +ZC55LGUpfWlmKHEpcmV0dXJuITEKcz1yIT09MTEKaWYoKCFzfHxyPT09MTIpJiZkPT09dC5ZKXJldHVy +biEwCmlmKHA9PT0xMil7aWYoYj09PXQuRSlyZXR1cm4hMAppZihyIT09MTIpcmV0dXJuITEKbz1iLnoK +bj1kLnoKbT1vLmxlbmd0aAppZihtIT09bi5sZW5ndGgpcmV0dXJuITEKYz1jPT1udWxsP286by5jb25j +YXQoYykKZT1lPT1udWxsP246bi5jb25jYXQoZSkKZm9yKGw9MDtsPG07KytsKXtrPW9bbF0Kaj1uW2xd +CmlmKCFBLldlKGEsayxjLGosZSl8fCFBLldlKGEsaixlLGssYykpcmV0dXJuITF9cmV0dXJuIEEuYk8o +YSxiLnksYyxkLnksZSl9aWYocD09PTExKXtpZihiPT09dC5FKXJldHVybiEwCmlmKHMpcmV0dXJuITEK +cmV0dXJuIEEuYk8oYSxiLGMsZCxlKX1pZihyPT09OSl7aWYocCE9PTkpcmV0dXJuITEKcmV0dXJuIEEu +cEcoYSxiLGMsZCxlKX1yZXR1cm4hMX0sCmJPKGEzLGE0LGE1LGE2LGE3KXt2YXIgcyxyLHEscCxvLG4s +bSxsLGssaixpLGgsZyxmLGUsZCxjLGIsYSxhMCxhMSxhMgppZighQS5XZShhMyxhNC55LGE1LGE2Lnks +YTcpKXJldHVybiExCnM9YTQuegpyPWE2LnoKcT1zLmEKcD1yLmEKbz1xLmxlbmd0aApuPXAubGVuZ3Ro +CmlmKG8+bilyZXR1cm4hMQptPW4tbwpsPXMuYgprPXIuYgpqPWwubGVuZ3RoCmk9ay5sZW5ndGgKaWYo +bytqPG4raSlyZXR1cm4hMQpmb3IoaD0wO2g8bzsrK2gpe2c9cVtoXQppZighQS5XZShhMyxwW2hdLGE3 +LGcsYTUpKXJldHVybiExfWZvcihoPTA7aDxtOysraCl7Zz1sW2hdCmlmKCFBLldlKGEzLHBbbytoXSxh +NyxnLGE1KSlyZXR1cm4hMX1mb3IoaD0wO2g8aTsrK2gpe2c9bFttK2hdCmlmKCFBLldlKGEzLGtbaF0s +YTcsZyxhNSkpcmV0dXJuITF9Zj1zLmMKZT1yLmMKZD1mLmxlbmd0aApjPWUubGVuZ3RoCmZvcihiPTAs +YT0wO2E8YzthKz0zKXthMD1lW2FdCmZvcig7ITA7KXtpZihiPj1kKXJldHVybiExCmExPWZbYl0KYis9 +MwppZihhMDxhMSlyZXR1cm4hMQphMj1mW2ItMl0KaWYoYTE8YTApe2lmKGEyKXJldHVybiExCmNvbnRp +bnVlfWc9ZVthKzFdCmlmKGEyJiYhZylyZXR1cm4hMQpnPWZbYi0xXQppZighQS5XZShhMyxlW2ErMl0s +YTcsZyxhNSkpcmV0dXJuITEKYnJlYWt9fWZvcig7YjxkOyl7aWYoZltiKzFdKXJldHVybiExCmIrPTN9 +cmV0dXJuITB9LApwRyhhLGIsYyxkLGUpe3ZhciBzLHIscSxwLG8sbixtLGw9Yi55LGs9ZC55CmZvcig7 +bCE9PWs7KXtzPWEudFJbbF0KaWYocz09bnVsbClyZXR1cm4hMQppZih0eXBlb2Ygcz09InN0cmluZyIp +e2w9cwpjb250aW51ZX1yPXNba10KaWYocj09bnVsbClyZXR1cm4hMQpxPXIubGVuZ3RoCnA9cT4wP25l +dyBBcnJheShxKTp2LnR5cGVVbml2ZXJzZS5zRUEKZm9yKG89MDtvPHE7KytvKXBbb109QS5jRShhLGIs +cltvXSkKcmV0dXJuIEEuU1coYSxwLG51bGwsYyxkLnosZSl9bj1iLnoKbT1kLnoKcmV0dXJuIEEuU1co +YSxuLG51bGwsYyxtLGUpfSwKU1coYSxiLGMsZCxlLGYpe3ZhciBzLHIscSxwPWIubGVuZ3RoCmZvcihz +PTA7czxwOysrcyl7cj1iW3NdCnE9ZVtzXQppZighQS5XZShhLHIsZCxxLGYpKXJldHVybiExfXJldHVy +biEwfSwKbFIoYSl7dmFyIHMscj1hLngKaWYoIShhPT09dC5QfHxhPT09dC5UKSlpZighQS5BOChhKSlp +ZihyIT09NylpZighKHI9PT02JiZBLmxSKGEueSkpKXM9cj09PTgmJkEubFIoYS55KQplbHNlIHM9ITAK +ZWxzZSBzPSEwCmVsc2Ugcz0hMAplbHNlIHM9ITAKcmV0dXJuIHN9LApjYyhhKXt2YXIgcwppZighQS5B +OChhKSlpZighKGE9PT10Ll8pKXM9ITEKZWxzZSBzPSEwCmVsc2Ugcz0hMApyZXR1cm4gc30sCkE4KGEp +e3ZhciBzPWEueApyZXR1cm4gcz09PTJ8fHM9PT0zfHxzPT09NHx8cz09PTV8fGE9PT10Llh9LApJeChh +LGIpe3ZhciBzLHIscT1PYmplY3Qua2V5cyhiKSxwPXEubGVuZ3RoCmZvcihzPTA7czxwOysrcyl7cj1x +W3NdCmFbcl09YltyXX19LAp2VShhKXtyZXR1cm4gYT4wP25ldyBBcnJheShhKTp2LnR5cGVVbml2ZXJz +ZS5zRUF9LApKYzpmdW5jdGlvbiBKYyhhLGIpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy53PV8ucj1f +LmM9bnVsbApfLng9MApfLmF0PV8uYXM9Xy5RPV8uej1fLnk9bnVsbH0sCkc6ZnVuY3Rpb24gRygpe3Ro +aXMuYz10aGlzLmI9dGhpcy5hPW51bGx9LApsWTpmdW5jdGlvbiBsWShhKXt0aGlzLmE9YX0sCmtTOmZ1 +bmN0aW9uIGtTKCl7fSwKaU06ZnVuY3Rpb24gaU0oYSl7dGhpcy5hPWF9LAp4Zygpe3ZhciBzLHIscT17 +fQppZihzZWxmLnNjaGVkdWxlSW1tZWRpYXRlIT1udWxsKXJldHVybiBBLkVYKCkKaWYoc2VsZi5NdXRh +dGlvbk9ic2VydmVyIT1udWxsJiZzZWxmLmRvY3VtZW50IT1udWxsKXtzPXNlbGYuZG9jdW1lbnQuY3Jl +YXRlRWxlbWVudCgiZGl2IikKcj1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpxLmE9 +bnVsbApuZXcgc2VsZi5NdXRhdGlvbk9ic2VydmVyKEEudFIobmV3IEEudGgocSksMSkpLm9ic2VydmUo +cyx7Y2hpbGRMaXN0OnRydWV9KQpyZXR1cm4gbmV3IEEuaGEocSxzLHIpfWVsc2UgaWYoc2VsZi5zZXRJ +bW1lZGlhdGUhPW51bGwpcmV0dXJuIEEueXQoKQpyZXR1cm4gQS5xVygpfSwKWlYoYSl7c2VsZi5zY2hl +ZHVsZUltbWVkaWF0ZShBLnRSKG5ldyBBLlZzKHQuTS5hKGEpKSwwKSl9LApvQShhKXtzZWxmLnNldElt +bWVkaWF0ZShBLnRSKG5ldyBBLkZ0KHQuTS5hKGEpKSwwKSl9LApCeihhKXt0Lk0uYShhKQpBLlFOKDAs +YSl9LApRTihhLGIpe3ZhciBzPW5ldyBBLlczKCkKcy5DWShhLGIpCnJldHVybiBzfSwKRlgoYSl7cmV0 +dXJuIG5ldyBBLmloKG5ldyBBLnZzKCQuWDMsYS5DKCJ2czwwPiIpKSxhLkMoImloPDA+IikpfSwKREko +YSxiKXthLiQyKDAsbnVsbCkKYi5iPSEwCnJldHVybiBiLmF9LApqUShhLGIpe0EuSmUoYSxiKX0sCnlD +KGEsYil7Yi5hTSgwLGEpfSwKZjMoYSxiKXtiLncwKEEuUnUoYSksQS50cyhhKSl9LApKZShhLGIpe3Zh +ciBzLHIscT1uZXcgQS5XTShiKSxwPW5ldyBBLlNYKGIpCmlmKGEgaW5zdGFuY2VvZiBBLnZzKWEuUWQo +cSxwLHQueikKZWxzZXtzPXQuegppZih0LmkuYihhKSlhLlNxKHEscCxzKQplbHNle3I9bmV3IEEudnMo +JC5YMyx0LmMpCnIuYT04CnIuYz1hCnIuUWQocSxwLHMpfX19LApseihhKXt2YXIgcz1mdW5jdGlvbihi +LGMpe3JldHVybiBmdW5jdGlvbihkLGUpe3doaWxlKHRydWUpdHJ5e2IoZCxlKQpicmVha31jYXRjaChy +KXtlPXIKZD1jfX19KGEsMSkKcmV0dXJuICQuWDMuTGoobmV3IEEuR3MocyksdC5ILHQuUyx0LnopfSwK +R1EoYSl7cmV0dXJuIG5ldyBBLkZ5KGEsMSl9LApUaCgpe3JldHVybiBCLndRfSwKWW0oYSl7cmV0dXJu +IG5ldyBBLkZ5KGEsMyl9LApsMChhLGIpe3JldHVybiBuZXcgQS5xNChhLGIuQygicTQ8MD4iKSl9LApU +bChhLGIpe3ZhciBzPUEuY2IoYSwiZXJyb3IiLHQuSykKcmV0dXJuIG5ldyBBLkN3KHMsYj09bnVsbD9B +LnYwKGEpOmIpfSwKdjAoYSl7dmFyIHMKaWYodC51LmIoYSkpe3M9YS5nSUkoKQppZihzIT1udWxsKXJl +dHVybiBzfXJldHVybiBCLnBkfSwKQTkoYSxiKXt2YXIgcyxyLHEKZm9yKHM9dC5jO3I9YS5hLChyJjQp +IT09MDspYT1zLmEoYS5jKQppZigociYyNCkhPT0wKXtxPWIuYWgoKQpiLnVnKGEpCkEuSFooYixxKX1l +bHNle3E9dC5lLmEoYi5jKQpiLmE9Yi5hJjF8NApiLmM9YQphLmpRKHEpfX0sCkhaKGEsYTApe3ZhciBz +LHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGM9e30sYj1jLmE9YQpmb3Iocz10Lm4scj10LmUs +cT10Lmk7ITA7KXtwPXt9Cm89Yi5hCm49KG8mMTYpPT09MAptPSFuCmlmKGEwPT1udWxsKXtpZihtJiYo +byYxKT09PTApe2w9cy5hKGIuYykKQS5TaShsLmEsbC5iKX1yZXR1cm59cC5hPWEwCms9YTAuYQpmb3Io +Yj1hMDtrIT1udWxsO2I9ayxrPWope2IuYT1udWxsCkEuSFooYy5hLGIpCnAuYT1rCmo9ay5hfW89Yy5h +Cmk9by5jCnAuYj1tCnAuYz1pCmlmKG4pe2g9Yi5jCmg9KGgmMSkhPT0wfHwoaCYxNSk9PT04fWVsc2Ug +aD0hMAppZihoKXtnPWIuYi5iCmlmKG0pe289by5iPT09ZwpvPSEob3x8byl9ZWxzZSBvPSExCmlmKG8p +e3MuYShpKQpBLlNpKGkuYSxpLmIpCnJldHVybn1mPSQuWDMKaWYoZiE9PWcpJC5YMz1nCmVsc2UgZj1u +dWxsCmI9Yi5jCmlmKChiJjE1KT09PTgpbmV3IEEuUlQocCxjLG0pLiQwKCkKZWxzZSBpZihuKXtpZigo +YiYxKSE9PTApbmV3IEEucnEocCxpKS4kMCgpfWVsc2UgaWYoKGImMikhPT0wKW5ldyBBLlJXKGMscCku +JDAoKQppZihmIT1udWxsKSQuWDM9ZgpiPXAuYwppZihxLmIoYikpe289cC5hLiR0aQpvPW8uQygiYjg8 +Mj4iKS5iKGIpfHwhby56WzFdLmIoYil9ZWxzZSBvPSExCmlmKG8pe3EuYShiKQplPXAuYS5iCmlmKChi +LmEmMjQpIT09MCl7ZD1yLmEoZS5jKQplLmM9bnVsbAphMD1lLk44KGQpCmUuYT1iLmEmMzB8ZS5hJjEK +ZS5jPWIuYwpjLmE9Ygpjb250aW51ZX1lbHNlIEEuQTkoYixlKQpyZXR1cm59fWU9cC5hLmIKZD1yLmEo +ZS5jKQplLmM9bnVsbAphMD1lLk44KGQpCmI9cC5iCm89cC5jCmlmKCFiKXtlLiR0aS5jLmEobykKZS5h +PTgKZS5jPW99ZWxzZXtzLmEobykKZS5hPWUuYSYxfDE2CmUuYz1vfWMuYT1lCmI9ZX19LApWSChhLGIp +e3ZhciBzCmlmKHQubS5iKGEpKXJldHVybiBiLkxqKGEsdC56LHQuSyx0LmwpCnM9dC52CmlmKHMuYihh +KSlyZXR1cm4gcy5hKGEpCnRocm93IEEuYihBLkwzKGEsIm9uRXJyb3IiLHUuYykpfSwKcHUoKXt2YXIg +cyxyCmZvcihzPSQuUzY7cyE9bnVsbDtzPSQuUzYpeyQubWc9bnVsbApyPXMuYgokLlM2PXIKaWYocj09 +bnVsbCkkLms4PW51bGwKcy5hLiQwKCl9fSwKZU4oKXskLlVEPSEwCnRyeXtBLnB1KCl9ZmluYWxseXsk +Lm1nPW51bGwKJC5VRD0hMQppZigkLlM2IT1udWxsKSQudXQoKS4kMShBLlVJKCkpfX0sCmVXKGEpe3Zh +ciBzPW5ldyBBLk9NKGEpLHI9JC5rOAppZihyPT1udWxsKXskLlM2PSQuazg9cwppZighJC5VRCkkLnV0 +KCkuJDEoQS5VSSgpKX1lbHNlICQuazg9ci5iPXN9LApyUihhKXt2YXIgcyxyLHEscD0kLlM2CmlmKHA9 +PW51bGwpe0EuZVcoYSkKJC5tZz0kLms4CnJldHVybn1zPW5ldyBBLk9NKGEpCnI9JC5tZwppZihyPT1u +dWxsKXtzLmI9cAokLlM2PSQubWc9c31lbHNle3E9ci5iCnMuYj1xCiQubWc9ci5iPXMKaWYocT09bnVs +bCkkLms4PXN9fSwKcmIoYSl7dmFyIHMscj1udWxsLHE9JC5YMwppZihCLk5VPT09cSl7QS5UayhyLHIs +Qi5OVSxhKQpyZXR1cm59cz0hMQppZihzKXtBLlRrKHIscixxLHQuTS5hKGEpKQpyZXR1cm59QS5Uayhy +LHIscSx0Lk0uYShxLkdZKGEpKSl9LApRdyhhLGIpe0EuY2IoYSwic3RyZWFtIix0LkspCnJldHVybiBu +ZXcgQS54SShiLkMoInhJPDA+IikpfSwKU2koYSxiKXtBLnJSKG5ldyBBLkV2KGEsYikpfSwKVDgoYSxi +LGMsZCxlKXt2YXIgcyxyPSQuWDMKaWYocj09PWMpcmV0dXJuIGQuJDAoKQokLlgzPWMKcz1yCnRyeXty +PWQuJDAoKQpyZXR1cm4gcn1maW5hbGx5eyQuWDM9c319LAp5dihhLGIsYyxkLGUsZixnKXt2YXIgcyxy +PSQuWDMKaWYocj09PWMpcmV0dXJuIGQuJDEoZSkKJC5YMz1jCnM9cgp0cnl7cj1kLiQxKGUpCnJldHVy +biByfWZpbmFsbHl7JC5YMz1zfX0sClF4KGEsYixjLGQsZSxmLGcsaCxpKXt2YXIgcyxyPSQuWDMKaWYo +cj09PWMpcmV0dXJuIGQuJDIoZSxmKQokLlgzPWMKcz1yCnRyeXtyPWQuJDIoZSxmKQpyZXR1cm4gcn1m +aW5hbGx5eyQuWDM9c319LApUayhhLGIsYyxkKXt0Lk0uYShkKQppZihCLk5VIT09YylkPWMuR1koZCkK +QS5lVyhkKX0sCnRoOmZ1bmN0aW9uIHRoKGEpe3RoaXMuYT1hfSwKaGE6ZnVuY3Rpb24gaGEoYSxiLGMp +e3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKVnM6ZnVuY3Rpb24gVnMoYSl7dGhpcy5hPWF9LApG +dDpmdW5jdGlvbiBGdChhKXt0aGlzLmE9YX0sClczOmZ1bmN0aW9uIFczKCl7fSwKeUg6ZnVuY3Rpb24g +eUgoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmloOmZ1bmN0aW9uIGloKGEsYil7dGhpcy5hPWEKdGhp +cy5iPSExCnRoaXMuJHRpPWJ9LApXTTpmdW5jdGlvbiBXTShhKXt0aGlzLmE9YX0sClNYOmZ1bmN0aW9u +IFNYKGEpe3RoaXMuYT1hfSwKR3M6ZnVuY3Rpb24gR3MoYSl7dGhpcy5hPWF9LApGeTpmdW5jdGlvbiBG +eShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKR1Y6ZnVuY3Rpb24gR1YoYSxiKXt2YXIgXz10aGlzCl8u +YT1hCl8uZD1fLmM9Xy5iPW51bGwKXy4kdGk9Yn0sCnE0OmZ1bmN0aW9uIHE0KGEsYil7dGhpcy5hPWEK +dGhpcy4kdGk9Yn0sCkN3OmZ1bmN0aW9uIEN3KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApQZjpmdW5j +dGlvbiBQZigpe30sClpmOmZ1bmN0aW9uIFpmKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCkZlOmZ1 +bmN0aW9uIEZlKGEsYixjLGQsZSl7dmFyIF89dGhpcwpfLmE9bnVsbApfLmI9YQpfLmM9YgpfLmQ9Ywpf +LmU9ZApfLiR0aT1lfSwKdnM6ZnVuY3Rpb24gdnMoYSxiKXt2YXIgXz10aGlzCl8uYT0wCl8uYj1hCl8u +Yz1udWxsCl8uJHRpPWJ9LApkYTpmdW5jdGlvbiBkYShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKb1E6 +ZnVuY3Rpb24gb1EoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCnBWOmZ1bmN0aW9uIHBWKGEpe3RoaXMu +YT1hfSwKVTc6ZnVuY3Rpb24gVTcoYSl7dGhpcy5hPWF9LAp2cjpmdW5jdGlvbiB2cihhLGIsYyl7dGhp +cy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApydDpmdW5jdGlvbiBydChhLGIpe3RoaXMuYT1hCnRoaXMu +Yj1ifSwKS0Y6ZnVuY3Rpb24gS0YoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sClpMOmZ1bmN0aW9uIFpM +KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sClJUOmZ1bmN0aW9uIFJUKGEsYixjKXt0 +aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCmpaOmZ1bmN0aW9uIGpaKGEpe3RoaXMuYT1hfSwKcnE6 +ZnVuY3Rpb24gcnEoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sClJXOmZ1bmN0aW9uIFJXKGEsYil7dGhp +cy5hPWEKdGhpcy5iPWJ9LApPTTpmdW5jdGlvbiBPTShhKXt0aGlzLmE9YQp0aGlzLmI9bnVsbH0sCnFo +OmZ1bmN0aW9uIHFoKCl7fSwKQjU6ZnVuY3Rpb24gQjUoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCnVP +OmZ1bmN0aW9uIHVPKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApNTzpmdW5jdGlvbiBNTygpe30sCmtU +OmZ1bmN0aW9uIGtUKCl7fSwKeEk6ZnVuY3Rpb24geEkoYSl7dGhpcy4kdGk9YX0sCm0wOmZ1bmN0aW9u +IG0wKCl7fSwKRXY6ZnVuY3Rpb24gRXYoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkppOmZ1bmN0aW9u +IEppKCl7fSwKVnA6ZnVuY3Rpb24gVnAoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCk9SOmZ1bmN0aW9u +IE9SKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCkw1KGEsYixjLGQpe3ZhciBzCmlm +KGI9PW51bGwpe2lmKGE9PW51bGwpcmV0dXJuIG5ldyBBLk41KGMuQygiQDwwPiIpLktxKGQpLkMoIk41 +PDEsMj4iKSkKcz1BLmxTKCl9ZWxzZXtpZihhPT1udWxsKWE9QS5UTigpCnM9QS5sUygpfXJldHVybiBB +LkV4KHMsYSxiLGMsZCl9LApFRihhLGIsYyl7cmV0dXJuIGIuQygiQDwwPiIpLktxKGMpLkMoIkZvPDEs +Mj4iKS5hKEEuQjcoYSxuZXcgQS5ONShiLkMoIkA8MD4iKS5LcShjKS5DKCJONTwxLDI+IikpKSl9LApG +bChhLGIpe3JldHVybiBuZXcgQS5ONShhLkMoIkA8MD4iKS5LcShiKS5DKCJONTwxLDI+IikpfSwKRXgo +YSxiLGMsZCxlKXt2YXIgcz1jIT1udWxsP2M6bmV3IEEudjYoZCkKcmV0dXJuIG5ldyBBLnhkKGEsYixz +LGQuQygiQDwwPiIpLktxKGUpLkMoInhkPDEsMj4iKSl9LApMcyhhKXtyZXR1cm4gbmV3IEEuYjYoYS5D +KCJiNjwwPiIpKX0sClQyKCl7dmFyIHM9T2JqZWN0LmNyZWF0ZShudWxsKQpzWyI8bm9uLWlkZW50aWZp +ZXIta2V5PiJdPXMKZGVsZXRlIHNbIjxub24taWRlbnRpZmllci1rZXk+Il0KcmV0dXJuIHN9LApyaihh +LGIsYyl7dmFyIHM9bmV3IEEubG0oYSxiLGMuQygibG08MD4iKSkKcy5jPWEuZQpyZXR1cm4gc30sCk91 +KGEsYil7cmV0dXJuIEouUk0oYSxiKX0sClQ5KGEpe3JldHVybiBKLlUzKGEpfSwKRVAoYSxiLGMpe3Zh +ciBzLHIKaWYoQS5oQihhKSl7aWYoYj09PSIoIiYmYz09PSIpIilyZXR1cm4iKC4uLikiCnJldHVybiBi +KyIuLi4iK2N9cz1BLlFJKFtdLHQucykKQi5ObS5pKCQueixhKQp0cnl7QS5WcihhLHMpfWZpbmFsbHl7 +aWYoMD49JC56Lmxlbmd0aClyZXR1cm4gQS5PSCgkLnosLTEpCiQuei5wb3AoKX1yPUEubChiLHQuay5h +KHMpLCIsICIpK2MKcmV0dXJuIHIuY2hhckNvZGVBdCgwKT09MD9yOnJ9LAp4KGEsYixjKXt2YXIgcyxy +CmlmKEEuaEIoYSkpcmV0dXJuIGIrIi4uLiIrYwpzPW5ldyBBLk0oYikKQi5ObS5pKCQueixhKQp0cnl7 +cj1zCnIuYT1BLmwoci5hLGEsIiwgIil9ZmluYWxseXtpZigwPj0kLnoubGVuZ3RoKXJldHVybiBBLk9I +KCQueiwtMSkKJC56LnBvcCgpfXMuYSs9YwpyPXMuYQpyZXR1cm4gci5jaGFyQ29kZUF0KDApPT0wP3I6 +cn0sCmhCKGEpe3ZhciBzLHIKZm9yKHM9JC56Lmxlbmd0aCxyPTA7cjxzOysrcilpZihhPT09JC56W3Jd +KXJldHVybiEwCnJldHVybiExfSwKVnIoYSxiKXt2YXIgcyxyLHEscCxvLG4sbSxsPWEuZ0EoYSksaz0w +LGo9MAp3aGlsZSghMCl7aWYoIShrPDgwfHxqPDMpKWJyZWFrCmlmKCFsLkcoKSlyZXR1cm4Kcz1BLkVq +KGwuZ2woKSkKQi5ObS5pKGIscykKays9cy5sZW5ndGgrMjsrK2p9aWYoIWwuRygpKXtpZihqPD01KXJl +dHVybgppZigwPj1iLmxlbmd0aClyZXR1cm4gQS5PSChiLC0xKQpyPWIucG9wKCkKaWYoMD49Yi5sZW5n +dGgpcmV0dXJuIEEuT0goYiwtMSkKcT1iLnBvcCgpfWVsc2V7cD1sLmdsKCk7KytqCmlmKCFsLkcoKSl7 +aWYoajw9NCl7Qi5ObS5pKGIsQS5FaihwKSkKcmV0dXJufXI9QS5FaihwKQppZigwPj1iLmxlbmd0aCly +ZXR1cm4gQS5PSChiLC0xKQpxPWIucG9wKCkKays9ci5sZW5ndGgrMn1lbHNle289bC5nbCgpOysragpm +b3IoO2wuRygpO3A9byxvPW4pe249bC5nbCgpOysragppZihqPjEwMCl7d2hpbGUoITApe2lmKCEoaz43 +NSYmaj4zKSlicmVhawppZigwPj1iLmxlbmd0aClyZXR1cm4gQS5PSChiLC0xKQprLT1iLnBvcCgpLmxl +bmd0aCsyOy0tan1CLk5tLmkoYiwiLi4uIikKcmV0dXJufX1xPUEuRWoocCkKcj1BLkVqKG8pCmsrPXIu +bGVuZ3RoK3EubGVuZ3RoKzR9fWlmKGo+Yi5sZW5ndGgrMil7ays9NQptPSIuLi4ifWVsc2UgbT1udWxs +CndoaWxlKCEwKXtpZighKGs+ODAmJmIubGVuZ3RoPjMpKWJyZWFrCmlmKDA+PWIubGVuZ3RoKXJldHVy +biBBLk9IKGIsLTEpCmstPWIucG9wKCkubGVuZ3RoKzIKaWYobT09bnVsbCl7ays9NQptPSIuLi4ifX1p +ZihtIT1udWxsKUIuTm0uaShiLG0pCkIuTm0uaShiLHEpCkIuTm0uaShiLHIpfSwKdE0oYSxiKXt2YXIg +cyxyLHE9QS5McyhiKQpmb3Iocz1hLmxlbmd0aCxyPTA7cjxhLmxlbmd0aDthLmxlbmd0aD09PXN8fCgw +LEEubGspKGEpLCsrcilxLmkoMCxiLmEoYVtyXSkpCnJldHVybiBxfSwKbk8oYSl7dmFyIHMscj17fQpp +ZihBLmhCKGEpKXJldHVybiJ7Li4ufSIKcz1uZXcgQS5NKCIiKQp0cnl7Qi5ObS5pKCQueixhKQpzLmEr +PSJ7IgpyLmE9ITAKYS5LKDAsbmV3IEEucmEocixzKSkKcy5hKz0ifSJ9ZmluYWxseXtpZigwPj0kLnou +bGVuZ3RoKXJldHVybiBBLk9IKCQueiwtMSkKJC56LnBvcCgpfXI9cy5hCnJldHVybiByLmNoYXJDb2Rl +QXQoMCk9PTA/cjpyfSwKeGQ6ZnVuY3Rpb24geGQoYSxiLGMsZCl7dmFyIF89dGhpcwpfLnc9YQpfLng9 +YgpfLnk9YwpfLmE9MApfLmY9Xy5lPV8uZD1fLmM9Xy5iPW51bGwKXy5yPTAKXy4kdGk9ZH0sCnY2OmZ1 +bmN0aW9uIHY2KGEpe3RoaXMuYT1hfSwKYjY6ZnVuY3Rpb24gYjYoYSl7dmFyIF89dGhpcwpfLmE9MApf +LmY9Xy5lPV8uZD1fLmM9Xy5iPW51bGwKXy5yPTAKXy4kdGk9YX0sCmJuOmZ1bmN0aW9uIGJuKGEpe3Ro +aXMuYT1hCnRoaXMuYz10aGlzLmI9bnVsbH0sCmxtOmZ1bmN0aW9uIGxtKGEsYixjKXt2YXIgXz10aGlz +Cl8uYT1hCl8uYj1iCl8uZD1fLmM9bnVsbApfLiR0aT1jfSwKbVc6ZnVuY3Rpb24gbVcoKXt9LAp1eTpm +dW5jdGlvbiB1eSgpe30sCmxEOmZ1bmN0aW9uIGxEKCl7fSwKaWw6ZnVuY3Rpb24gaWwoKXt9LApyYTpm +dW5jdGlvbiByYShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKWWs6ZnVuY3Rpb24gWWsoKXt9LAp5UTpm +dW5jdGlvbiB5UShhKXt0aGlzLmE9YX0sCktQOmZ1bmN0aW9uIEtQKCl7fSwKUG46ZnVuY3Rpb24gUG4o +KXt9LApHajpmdW5jdGlvbiBHaihhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApsZjpmdW5jdGlvbiBs +Zigpe30sClZqOmZ1bmN0aW9uIFZqKCl7fSwKWHY6ZnVuY3Rpb24gWHYoKXt9LApuWTpmdW5jdGlvbiBu +WSgpe30sCldZOmZ1bmN0aW9uIFdZKCl7fSwKUlU6ZnVuY3Rpb24gUlUoKXt9LApGUDpmdW5jdGlvbiBG +UCgpe30sCkJTKGEsYil7dmFyIHMscixxLHA9bnVsbAp0cnl7cD1KU09OLnBhcnNlKGEpfWNhdGNoKHIp +e3M9QS5SdShyKQpxPUEucnIoU3RyaW5nKHMpLG51bGwsbnVsbCkKdGhyb3cgQS5iKHEpfXE9QS5RZShw +KQpyZXR1cm4gcX0sClFlKGEpe3ZhciBzCmlmKGE9PW51bGwpcmV0dXJuIG51bGwKaWYodHlwZW9mIGEh +PSJvYmplY3QiKXJldHVybiBhCmlmKE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSE9PUFycmF5LnByb3Rv +dHlwZSlyZXR1cm4gbmV3IEEudXcoYSxPYmplY3QuY3JlYXRlKG51bGwpKQpmb3Iocz0wO3M8YS5sZW5n +dGg7KytzKWFbc109QS5RZShhW3NdKQpyZXR1cm4gYX0sCmt5KGEsYixjLGQpe3ZhciBzLHIKaWYoYiBp +bnN0YW5jZW9mIFVpbnQ4QXJyYXkpe3M9YgpkPXMubGVuZ3RoCmlmKGQtYzwxNSlyZXR1cm4gbnVsbApy +PUEuUlAoYSxzLGMsZCkKaWYociE9bnVsbCYmYSlpZihyLmluZGV4T2YoIlx1ZmZmZCIpPj0wKXJldHVy +biBudWxsCnJldHVybiByfXJldHVybiBudWxsfSwKUlAoYSxiLGMsZCl7dmFyIHM9YT8kLkhHKCk6JC5y +ZigpCmlmKHM9PW51bGwpcmV0dXJuIG51bGwKaWYoMD09PWMmJmQ9PT1iLmxlbmd0aClyZXR1cm4gQS5S +YihzLGIpCnJldHVybiBBLlJiKHMsYi5zdWJhcnJheShjLEEuakIoYyxkLGIubGVuZ3RoKSkpfSwKUmIo +YSxiKXt2YXIgcyxyCnRyeXtzPWEuZGVjb2RlKGIpCnJldHVybiBzfWNhdGNoKHIpe31yZXR1cm4gbnVs +bH0sCnhNKGEsYixjLGQsZSxmKXtpZihCLmpuLnpZKGYsNCkhPT0wKXRocm93IEEuYihBLnJyKCJJbnZh +bGlkIGJhc2U2NCBwYWRkaW5nLCBwYWRkZWQgbGVuZ3RoIG11c3QgYmUgbXVsdGlwbGUgb2YgZm91ciwg +aXMgIitmLGEsYykpCmlmKGQrZSE9PWYpdGhyb3cgQS5iKEEucnIoIkludmFsaWQgYmFzZTY0IHBhZGRp +bmcsICc9JyBub3QgYXQgdGhlIGVuZCIsYSxiKSkKaWYoZT4yKXRocm93IEEuYihBLnJyKCJJbnZhbGlk +IGJhc2U2NCBwYWRkaW5nLCBtb3JlIHRoYW4gdHdvICc9JyBjaGFyYWN0ZXJzIixhLGIpKX0sCkd5KGEs +YixjKXtyZXR1cm4gbmV3IEEuVWQoYSxiKX0sCk5DKGEpe3JldHVybiBhLkx0KCl9LApVZyhhLGIpe3Jl +dHVybiBuZXcgQS50dShhLFtdLEEuQ3koKSl9LAp1WChhLGIsYyl7dmFyIHMscj1uZXcgQS5NKCIiKSxx +PUEuVWcocixiKQpxLmlVKGEpCnM9ci5hCnJldHVybiBzLmNoYXJDb2RlQXQoMCk9PTA/czpzfSwKajQo +YSl7c3dpdGNoKGEpe2Nhc2UgNjU6cmV0dXJuIk1pc3NpbmcgZXh0ZW5zaW9uIGJ5dGUiCmNhc2UgNjc6 +cmV0dXJuIlVuZXhwZWN0ZWQgZXh0ZW5zaW9uIGJ5dGUiCmNhc2UgNjk6cmV0dXJuIkludmFsaWQgVVRG +LTggYnl0ZSIKY2FzZSA3MTpyZXR1cm4iT3ZlcmxvbmcgZW5jb2RpbmciCmNhc2UgNzM6cmV0dXJuIk91 +dCBvZiB1bmljb2RlIHJhbmdlIgpjYXNlIDc1OnJldHVybiJFbmNvZGVkIHN1cnJvZ2F0ZSIKY2FzZSA3 +NzpyZXR1cm4iVW5maW5pc2hlZCBVVEYtOCBvY3RldCBzZXF1ZW5jZSIKZGVmYXVsdDpyZXR1cm4iIn19 +LApqeShhLGIsYyl7dmFyIHMscixxLHA9Yy1iLG89bmV3IFVpbnQ4QXJyYXkocCkKZm9yKHM9Si5VNihh +KSxyPTA7cjxwOysrcil7cT1zLnEoYSxiK3IpCmlmKChxJjQyOTQ5NjcwNDApPj4+MCE9PTApcT0yNTUK +aWYoIShyPHApKXJldHVybiBBLk9IKG8scikKb1tyXT1xfXJldHVybiBvfSwKdXc6ZnVuY3Rpb24gdXco +YSxiKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9bnVsbH0sCmk4OmZ1bmN0aW9uIGk4KGEpe3RoaXMu +YT1hfSwKeHI6ZnVuY3Rpb24geHIoKXt9LApOejpmdW5jdGlvbiBOeigpe30sCkNWOmZ1bmN0aW9uIENW +KCl7fSwKVTg6ZnVuY3Rpb24gVTgoKXt9LApVazpmdW5jdGlvbiBVaygpe30sCndJOmZ1bmN0aW9uIHdJ +KCl7fSwKWmk6ZnVuY3Rpb24gWmkoKXt9LApVZDpmdW5jdGlvbiBVZChhLGIpe3RoaXMuYT1hCnRoaXMu +Yj1ifSwKSzg6ZnVuY3Rpb24gSzgoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmJ5OmZ1bmN0aW9uIGJ5 +KCl7fSwKb2o6ZnVuY3Rpb24gb2ooYSl7dGhpcy5iPWF9LApNeDpmdW5jdGlvbiBNeChhKXt0aGlzLmE9 +YX0sClNoOmZ1bmN0aW9uIFNoKCl7fSwKdGk6ZnVuY3Rpb24gdGkoYSxiKXt0aGlzLmE9YQp0aGlzLmI9 +Yn0sCnR1OmZ1bmN0aW9uIHR1KGEsYixjKXt0aGlzLmM9YQp0aGlzLmE9Ygp0aGlzLmI9Y30sCnU1OmZ1 +bmN0aW9uIHU1KCl7fSwKRTM6ZnVuY3Rpb24gRTMoKXt9LApSdzpmdW5jdGlvbiBSdyhhKXt0aGlzLmI9 +MAp0aGlzLmM9YX0sCkdZOmZ1bmN0aW9uIEdZKGEpe3RoaXMuYT1hfSwKYno6ZnVuY3Rpb24gYnooYSl7 +dGhpcy5hPWEKdGhpcy5iPTE2CnRoaXMuYz0wfSwKUUEoYSxiKXt2YXIgcz1BLkhwKGEsYikKaWYocyE9 +bnVsbClyZXR1cm4gcwp0aHJvdyBBLmIoQS5ycihhLG51bGwsbnVsbCkpfSwKb3MoYSl7aWYoYSBpbnN0 +YW5jZW9mIEEuVHApcmV0dXJuIGFbIlsiXSgwKQpyZXR1cm4iSW5zdGFuY2Ugb2YgJyIrQS5saChhKSsi +JyJ9LApPMShhLGIpe2E9QS5iKGEpCmlmKGE9PW51bGwpYT10LksuYShhKQphLnN0YWNrPWJbIlsiXSgw +KQp0aHJvdyBhCnRocm93IEEuYigidW5yZWFjaGFibGUiKX0sCk84KGEsYixjLGQpe3ZhciBzLHI9Yz9K +LktoKGEsZCk6Si5RaShhLGQpCmlmKGEhPT0wJiZiIT1udWxsKWZvcihzPTA7czxyLmxlbmd0aDsrK3Mp +cltzXT1iCnJldHVybiByfSwKUFcoYSxiLGMpe3ZhciBzLHI9QS5RSShbXSxjLkMoImpkPDA+IikpCmZv +cihzPUouSVQoYSk7cy5HKCk7KUIuTm0uaShyLGMuYShzLmdsKCkpKQppZihiKXJldHVybiByCnJldHVy +biBKLkVwKHIsYyl9LApZMShhLGIsYyl7dmFyIHMKaWYoYilyZXR1cm4gQS5ldihhLGMpCnM9Si5FcChB +LmV2KGEsYyksYykKcmV0dXJuIHN9LApldihhLGIpe3ZhciBzLHIKaWYoQXJyYXkuaXNBcnJheShhKSly +ZXR1cm4gQS5RSShhLnNsaWNlKDApLGIuQygiamQ8MD4iKSkKcz1BLlFJKFtdLGIuQygiamQ8MD4iKSkK +Zm9yKHI9Si5JVChhKTtyLkcoKTspQi5ObS5pKHMsci5nbCgpKQpyZXR1cm4gc30sCkFGKGEsYil7cmV0 +dXJuIEouekMoQS5QVyhhLCExLGIpKX0sCkhNKGEsYixjKXt2YXIgcz1BLmZ3KGEsYixBLmpCKGIsYyxh +Lmxlbmd0aCkpCnJldHVybiBzfSwKT28oYSl7cmV0dXJuIEEuTHcoYSl9LApudShhKXtyZXR1cm4gbmV3 +IEEuVlIoYSxBLnY0KGEsITEsITAsITEsITEsITEpKX0sCmwoYSxiLGMpe3ZhciBzPUouSVQoYikKaWYo +IXMuRygpKXJldHVybiBhCmlmKGMubGVuZ3RoPT09MCl7ZG8gYSs9QS5FaihzLmdsKCkpCndoaWxlKHMu +RygpKX1lbHNle2ErPUEuRWoocy5nbCgpKQpmb3IoO3MuRygpOylhPWErYytBLkVqKHMuZ2woKSl9cmV0 +dXJuIGF9LApscihhLGIsYyxkKXtyZXR1cm4gbmV3IEEubXAoYSxiLGMsZCl9LAp1bygpe3ZhciBzPUEu +TTAoKQppZihzIT1udWxsKXJldHVybiBBLmhLKHMpCnRocm93IEEuYihBLkw0KCInVXJpLmJhc2UnIGlz +IG5vdCBzdXBwb3J0ZWQiKSl9LAplUChhLGIsYyxkKXt2YXIgcyxyLHEscCxvLG4sbT0iMDEyMzQ1Njc4 +OUFCQ0RFRiIKaWYoYz09PUIueE0pe3M9JC56NCgpLmIKcz1zLnRlc3QoYil9ZWxzZSBzPSExCmlmKHMp +cmV0dXJuIGIKQS5MaChjKS5DKCJVay5TIikuYShiKQpyPWMuZ1pFKCkuV0ooYikKZm9yKHM9ci5sZW5n +dGgscT0wLHA9IiI7cTxzOysrcSl7bz1yW3FdCmlmKG88MTI4KXtuPW8+Pj40CmlmKCEobjw4KSlyZXR1 +cm4gQS5PSChhLG4pCm49KGFbbl0mMTw8KG8mMTUpKSE9PTB9ZWxzZSBuPSExCmlmKG4pcCs9QS5Mdyhv +KQplbHNlIHA9ZCYmbz09PTMyP3ArIisiOnArIiUiK21bbz4+PjQmMTVdK21bbyYxNV19cmV0dXJuIHAu +Y2hhckNvZGVBdCgwKT09MD9wOnB9LApHcShhKXt2YXIgcz1NYXRoLmFicyhhKSxyPWE8MD8iLSI6IiIK +aWYocz49MTAwMClyZXR1cm4iIithCmlmKHM+PTEwMClyZXR1cm4gcisiMCIrcwppZihzPj0xMClyZXR1 +cm4gcisiMDAiK3MKcmV0dXJuIHIrIjAwMCIrc30sClZ4KGEpe2lmKGE+PTEwMClyZXR1cm4iIithCmlm +KGE+PTEwKXJldHVybiIwIithCnJldHVybiIwMCIrYX0sCmgwKGEpe2lmKGE+PTEwKXJldHVybiIiK2EK +cmV0dXJuIjAiK2F9LApobChhKXtpZih0eXBlb2YgYT09Im51bWJlciJ8fEEuclEoYSl8fGE9PW51bGwp +cmV0dXJuIEouWVMoYSkKaWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBKU09OLnN0cmluZ2lmeShh +KQpyZXR1cm4gQS5vcyhhKX0sCmhWKGEpe3JldHVybiBuZXcgQS5DNihhKX0sCnhZKGEsYil7cmV0dXJu +IG5ldyBBLkFUKCExLG51bGwsYixhKX0sCkwzKGEsYixjKXtyZXR1cm4gbmV3IEEuQVQoITAsYSxiLGMp +fSwKTVIoYSxiLGMpe3JldHVybiBhfSwKTzcoYSxiKXtyZXR1cm4gbmV3IEEuYkoobnVsbCxudWxsLCEw +LGEsYiwiVmFsdWUgbm90IGluIHJhbmdlIil9LApURShhLGIsYyxkLGUpe3JldHVybiBuZXcgQS5iSihi +LGMsITAsYSxkLCJJbnZhbGlkIHZhbHVlIil9LAp3QShhLGIsYyxkKXtpZihhPGJ8fGE+Yyl0aHJvdyBB +LmIoQS5URShhLGIsYyxkLG51bGwpKQpyZXR1cm4gYX0sCmpCKGEsYixjKXtpZigwPmF8fGE+Yyl0aHJv +dyBBLmIoQS5URShhLDAsYywic3RhcnQiLG51bGwpKQppZihiIT1udWxsKXtpZihhPmJ8fGI+Yyl0aHJv +dyBBLmIoQS5URShiLGEsYywiZW5kIixudWxsKSkKcmV0dXJuIGJ9cmV0dXJuIGN9LAprMShhLGIpe2lm +KGE8MCl0aHJvdyBBLmIoQS5URShhLDAsbnVsbCxiLG51bGwpKQpyZXR1cm4gYX0sCkNmKGEsYixjLGQs +ZSl7dmFyIHM9QS5JWihlPT1udWxsP0ouSG0oYik6ZSkKcmV0dXJuIG5ldyBBLmVZKHMsITAsYSxjLCJJ +bmRleCBvdXQgb2YgcmFuZ2UiKX0sCkw0KGEpe3JldHVybiBuZXcgQS51YihhKX0sClNZKGEpe3JldHVy +biBuZXcgQS5kcyhhKX0sClBWKGEpe3JldHVybiBuZXcgQS5saihhKX0sCmE0KGEpe3JldHVybiBuZXcg +QS5VVihhKX0sCnJyKGEsYixjKXtyZXR1cm4gbmV3IEEuYUUoYSxiLGMpfSwKZjUoYSxiLGMsZCl7dmFy +IHMscj1CLkNELmdtKGEpCmI9Qi5DRC5nbShiKQpjPUIuQ0QuZ20oYykKZD1CLkNELmdtKGQpCnM9JC50 +OCgpCnJldHVybiBBLnFMKEEueWMoQS55YyhBLnljKEEueWMocyxyKSxiKSxjKSxkKSl9LApoSyhhNSl7 +dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYyxiLGEsYTAsYTEsYTIsYTM9bnVsbCxh +ND1hNS5sZW5ndGgKaWYoYTQ+PTUpe3M9KChCLnhCLlcoYTUsNCleNTgpKjN8Qi54Qi5XKGE1LDApXjEw +MHxCLnhCLlcoYTUsMSleOTd8Qi54Qi5XKGE1LDIpXjExNnxCLnhCLlcoYTUsMyleOTcpPj4+MAppZihz +PT09MClyZXR1cm4gQS5LRChhNDxhND9CLnhCLk5qKGE1LDAsYTQpOmE1LDUsYTMpLmdsUigpCmVsc2Ug +aWYocz09PTMyKXJldHVybiBBLktEKEIueEIuTmooYTUsNSxhNCksMCxhMykuZ2xSKCl9cj1BLk84KDgs +MCwhMSx0LlMpCkIuTm0uWTUociwwLDApCkIuTm0uWTUociwxLC0xKQpCLk5tLlk1KHIsMiwtMSkKQi5O +bS5ZNShyLDcsLTEpCkIuTm0uWTUociwzLDApCkIuTm0uWTUociw0LDApCkIuTm0uWTUociw1LGE0KQpC +Lk5tLlk1KHIsNixhNCkKaWYoQS5VQihhNSwwLGE0LDAscik+PTE0KUIuTm0uWTUociw3LGE0KQpxPXJb +MV0KaWYocT49MClpZihBLlVCKGE1LDAscSwyMCxyKT09PTIwKXJbN109cQpwPXJbMl0rMQpvPXJbM10K +bj1yWzRdCm09cls1XQpsPXJbNl0KaWYobDxtKW09bAppZihuPHApbj1tCmVsc2UgaWYobjw9cSluPXEr +MQppZihvPHApbz1uCms9cls3XTwwCmlmKGspaWYocD5xKzMpe2o9YTMKaz0hMX1lbHNle2k9bz4wCmlm +KGkmJm8rMT09PW4pe2o9YTMKaz0hMX1lbHNle2lmKCEobTxhNCYmbT09PW4rMiYmQi54Qi5RaShhNSwi +Li4iLG4pKSloPW0+bisyJiZCLnhCLlFpKGE1LCIvLi4iLG0tMykKZWxzZSBoPSEwCmlmKGgpe2o9YTMK +az0hMX1lbHNle2lmKHE9PT00KWlmKEIueEIuUWkoYTUsImZpbGUiLDApKXtpZihwPD0wKXtpZighQi54 +Qi5RaShhNSwiLyIsbikpe2c9ImZpbGU6Ly8vIgpzPTN9ZWxzZXtnPSJmaWxlOi8vIgpzPTJ9YTU9ZytC +LnhCLk5qKGE1LG4sYTQpCnEtPTAKaT1zLTAKbSs9aQpsKz1pCmE0PWE1Lmxlbmd0aApwPTcKbz03Cm49 +N31lbHNlIGlmKG49PT1tKXsrK2wKZj1tKzEKYTU9Qi54Qi5pNyhhNSxuLG0sIi8iKTsrK2E0Cm09Zn1q +PSJmaWxlIn1lbHNlIGlmKEIueEIuUWkoYTUsImh0dHAiLDApKXtpZihpJiZvKzM9PT1uJiZCLnhCLlFp +KGE1LCI4MCIsbysxKSl7bC09MwplPW4tMwptLT0zCmE1PUIueEIuaTcoYTUsbyxuLCIiKQphNC09Mwpu +PWV9aj0iaHR0cCJ9ZWxzZSBqPWEzCmVsc2UgaWYocT09PTUmJkIueEIuUWkoYTUsImh0dHBzIiwwKSl7 +aWYoaSYmbys0PT09biYmQi54Qi5RaShhNSwiNDQzIixvKzEpKXtsLT00CmU9bi00Cm0tPTQKYTU9Qi54 +Qi5pNyhhNSxvLG4sIiIpCmE0LT0zCm49ZX1qPSJodHRwcyJ9ZWxzZSBqPWEzCms9ITB9fX1lbHNlIGo9 +YTMKaWYoayl7aWYoYTQ8YTUubGVuZ3RoKXthNT1CLnhCLk5qKGE1LDAsYTQpCnEtPTAKcC09MApvLT0w +Cm4tPTAKbS09MApsLT0wfXJldHVybiBuZXcgQS5VZihhNSxxLHAsbyxuLG0sbCxqKX1pZihqPT1udWxs +KWlmKHE+MClqPUEuUGkoYTUsMCxxKQplbHNle2lmKHE9PT0wKUEuUjMoYTUsMCwiSW52YWxpZCBlbXB0 +eSBzY2hlbWUiKQpqPSIifWlmKHA+MCl7ZD1xKzMKYz1kPHA/QS56UihhNSxkLHAtMSk6IiIKYj1BLk9l +KGE1LHAsbywhMSkKaT1vKzEKaWYoaTxuKXthPUEuSHAoQi54Qi5OaihhNSxpLG4pLGEzKQphMD1BLndC +KGE9PW51bGw/QS52KEEucnIoIkludmFsaWQgcG9ydCIsYTUsaSkpOmEsail9ZWxzZSBhMD1hM31lbHNl +e2EwPWEzCmI9YTAKYz0iIn1hMT1BLmthKGE1LG4sbSxhMyxqLGIhPW51bGwpCmEyPW08bD9BLmxlKGE1 +LG0rMSxsLGEzKTphMwpyZXR1cm4gQS5DZyhqLGMsYixhMCxhMSxhMixsPGE0P0EudEcoYTUsbCsxLGE0 +KTphMyl9LApNdChhKXtBLm4oYSkKcmV0dXJuIEEua3UoYSwwLGEubGVuZ3RoLEIueE0sITEpfSwKV1go +YSl7dmFyIHM9dC5OCnJldHVybiBCLk5tLk4wKEEuUUkoYS5zcGxpdCgiJiIpLHQucyksQS5GbChzLHMp +LG5ldyBBLm4xKEIueE0pLHQuSSl9LApIaChhLGIsYyl7dmFyIHMscixxLHAsbyxuLG09IklQdjQgYWRk +cmVzcyBzaG91bGQgY29udGFpbiBleGFjdGx5IDQgcGFydHMiLGw9ImVhY2ggcGFydCBtdXN0IGJlIGlu +IHRoZSByYW5nZSAwLi4yNTUiLGs9bmV3IEEuY1MoYSksaj1uZXcgVWludDhBcnJheSg0KQpmb3Iocz1i +LHI9cyxxPTA7czxjOysrcyl7cD1CLnhCLk8oYSxzKQppZihwIT09NDYpe2lmKChwXjQ4KT45KWsuJDIo +ImludmFsaWQgY2hhcmFjdGVyIixzKX1lbHNle2lmKHE9PT0zKWsuJDIobSxzKQpvPUEuUUEoQi54Qi5O +aihhLHIscyksbnVsbCkKaWYobz4yNTUpay4kMihsLHIpCm49cSsxCmlmKCEocTw0KSlyZXR1cm4gQS5P +SChqLHEpCmpbcV09bwpyPXMrMQpxPW59fWlmKHEhPT0zKWsuJDIobSxjKQpvPUEuUUEoQi54Qi5Oaihh +LHIsYyksbnVsbCkKaWYobz4yNTUpay4kMihsLHIpCmlmKCEocTw0KSlyZXR1cm4gQS5PSChqLHEpCmpb +cV09bwpyZXR1cm4gan0sCmVnKGEsYTAsYTEpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYs +ZSxkPW51bGwsYz1uZXcgQS5WQyhhKSxiPW5ldyBBLkpUKGMsYSkKaWYoYS5sZW5ndGg8MiljLiQyKCJh +ZGRyZXNzIGlzIHRvbyBzaG9ydCIsZCkKcz1BLlFJKFtdLHQudCkKZm9yKHI9YTAscT1yLHA9ITEsbz0h +MTtyPGExOysrcil7bj1CLnhCLk8oYSxyKQppZihuPT09NTgpe2lmKHI9PT1hMCl7KytyCmlmKEIueEIu +TyhhLHIpIT09NTgpYy4kMigiaW52YWxpZCBzdGFydCBjb2xvbi4iLHIpCnE9cn1pZihyPT09cSl7aWYo +cCljLiQyKCJvbmx5IG9uZSB3aWxkY2FyZCBgOjpgIGlzIGFsbG93ZWQiLHIpCkIuTm0uaShzLC0xKQpw +PSEwfWVsc2UgQi5ObS5pKHMsYi4kMihxLHIpKQpxPXIrMX1lbHNlIGlmKG49PT00NilvPSEwfWlmKHMu +bGVuZ3RoPT09MCljLiQyKCJ0b28gZmV3IHBhcnRzIixkKQptPXE9PT1hMQpsPUIuTm0uZ3JaKHMpCmlm +KG0mJmwhPT0tMSljLiQyKCJleHBlY3RlZCBhIHBhcnQgYWZ0ZXIgbGFzdCBgOmAiLGExKQppZighbSlp +ZighbylCLk5tLmkocyxiLiQyKHEsYTEpKQplbHNle2s9QS5IaChhLHEsYTEpCkIuTm0uaShzLChrWzBd +PDw4fGtbMV0pPj4+MCkKQi5ObS5pKHMsKGtbMl08PDh8a1szXSk+Pj4wKX1pZihwKXtpZihzLmxlbmd0 +aD43KWMuJDIoImFuIGFkZHJlc3Mgd2l0aCBhIHdpbGRjYXJkIG11c3QgaGF2ZSBsZXNzIHRoYW4gNyBw +YXJ0cyIsZCl9ZWxzZSBpZihzLmxlbmd0aCE9PTgpYy4kMigiYW4gYWRkcmVzcyB3aXRob3V0IGEgd2ls +ZGNhcmQgbXVzdCBjb250YWluIGV4YWN0bHkgOCBwYXJ0cyIsZCkKaj1uZXcgVWludDhBcnJheSgxNikK +Zm9yKGw9cy5sZW5ndGgsaT05LWwscj0wLGg9MDtyPGw7KytyKXtnPXNbcl0KaWYoZz09PS0xKWZvcihm +PTA7ZjxpOysrZil7aWYoIShoPj0wJiZoPDE2KSlyZXR1cm4gQS5PSChqLGgpCmpbaF09MAplPWgrMQpp +ZighKGU8MTYpKXJldHVybiBBLk9IKGosZSkKaltlXT0wCmgrPTJ9ZWxzZXtlPUIuam4ud0coZyw4KQpp +ZighKGg+PTAmJmg8MTYpKXJldHVybiBBLk9IKGosaCkKaltoXT1lCmU9aCsxCmlmKCEoZTwxNikpcmV0 +dXJuIEEuT0goaixlKQpqW2VdPWcmMjU1CmgrPTJ9fXJldHVybiBqfSwKQ2coYSxiLGMsZCxlLGYsZyl7 +cmV0dXJuIG5ldyBBLkRuKGEsYixjLGQsZSxmLGcpfSwKS0woYSxiLGMsZCxlLGYsZyl7dmFyIHMscixx +LHAsbyxuCmY9Zj09bnVsbD8iIjpBLlBpKGYsMCxmLmxlbmd0aCkKZz1BLnpSKGcsMCxnPT1udWxsPzA6 +Zy5sZW5ndGgpCmE9QS5PZShhLDAsYT09bnVsbD8wOmEubGVuZ3RoLCExKQpzPUEubGUobnVsbCwwLDAs +ZSkKcj1BLnRHKG51bGwsMCwwKQpkPUEud0IoZCxmKQpxPWY9PT0iZmlsZSIKaWYoYT09bnVsbClwPWcu +bGVuZ3RoIT09MHx8ZCE9bnVsbHx8cQplbHNlIHA9ITEKaWYocClhPSIiCnA9YT09bnVsbApvPSFwCmI9 +QS5rYShiLDAsYj09bnVsbD8wOmIubGVuZ3RoLGMsZixvKQpuPWYubGVuZ3RoPT09MAppZihuJiZwJiYh +Qi54Qi5uKGIsIi8iKSliPUEud0YoYiwhbnx8bykKZWxzZSBiPUEueGUoYikKcmV0dXJuIEEuQ2coZixn +LHAmJkIueEIubihiLCIvLyIpPyIiOmEsZCxiLHMscil9LAp3SyhhKXtpZihhPT09Imh0dHAiKXJldHVy +biA4MAppZihhPT09Imh0dHBzIilyZXR1cm4gNDQzCnJldHVybiAwfSwKUjMoYSxiLGMpe3Rocm93IEEu +YihBLnJyKGMsYSxiKSl9LApYZChhLGIsYyxkKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGg9bnVs +bCxnPWIubGVuZ3RoCmlmKGchPT0wKXtxPTAKd2hpbGUoITApe2lmKCEocTxnKSl7cz0iIgpyPTAKYnJl +YWt9aWYoQi54Qi5XKGIscSk9PT02NCl7cz1CLnhCLk5qKGIsMCxxKQpyPXErMQpicmVha30rK3F9aWYo +cjxnJiZCLnhCLlcoYixyKT09PTkxKXtmb3IocD1yLG89LTE7cDxnOysrcCl7bj1CLnhCLlcoYixwKQpp +ZihuPT09MzcmJm88MCl7bT1CLnhCLlFpKGIsIjI1IixwKzEpP3ArMjpwCm89cApwPW19ZWxzZSBpZihu +PT09OTMpYnJlYWt9aWYocD09PWcpdGhyb3cgQS5iKEEucnIoIkludmFsaWQgSVB2NiBob3N0IGVudHJ5 +LiIsYixyKSkKbD1vPDA/cDpvCkEuZWcoYixyKzEsbCk7KytwCmlmKHAhPT1nJiZCLnhCLlcoYixwKSE9 +PTU4KXRocm93IEEuYihBLnJyKCJJbnZhbGlkIGVuZCBvZiBhdXRob3JpdHkiLGIscCkpfWVsc2UgcD1y +CndoaWxlKCEwKXtpZighKHA8Zykpe2s9aApicmVha31pZihCLnhCLlcoYixwKT09PTU4KXtqPUIueEIu +eW4oYixwKzEpCms9ai5sZW5ndGghPT0wP0EuUUEoaixoKTpoCmJyZWFrfSsrcH1pPUIueEIuTmooYixy +LHApfWVsc2V7az1oCmk9awpzPSIifXJldHVybiBBLktMKGksaCxBLlFJKGMuc3BsaXQoIi8iKSx0LnMp +LGssZCxhLHMpfSwKa0UoYSxiKXt2YXIgcyxyLHEscCxvCmZvcihzPWEubGVuZ3RoLHI9MDtyPHM7Kyty +KXtxPWFbcl0KcD1KLlU2KHEpCm89cC5nayhxKQppZigwPm8pQS52KEEuVEUoMCwwLHAuZ2socSksbnVs +bCxudWxsKSkKaWYoQS5TUShxLCIvIiwwKSl7cz1BLkw0KCJJbGxlZ2FsIHBhdGggY2hhcmFjdGVyICIr +QS5FaihxKSkKdGhyb3cgQS5iKHMpfX19LApITihhLGIsYyl7dmFyIHMscixxLHAsbwpmb3Iocz1BLnFD +KGEsYyxudWxsLEEudDYoYSkuYykscj1zLiR0aSxzPW5ldyBBLmE3KHMscy5nayhzKSxyLkMoImE3PGFM +LkU+IikpLHI9ci5DKCJhTC5FIik7cy5HKCk7KXtxPXMuZAppZihxPT1udWxsKXE9ci5hKHEpCnA9QS5u +dSgnWyIqLzo8Pj9cXFxcfF0nKQpvPXEubGVuZ3RoCmlmKEEuU1EocSxwLDApKXtzPUEuTDQoIklsbGVn +YWwgY2hhcmFjdGVyIGluIHBhdGg6ICIrcSkKdGhyb3cgQS5iKHMpfX19LApyZyhhLGIpe3ZhciBzCmlm +KCEoNjU8PWEmJmE8PTkwKSlzPTk3PD1hJiZhPD0xMjIKZWxzZSBzPSEwCmlmKHMpcmV0dXJuCnM9QS5M +NCgiSWxsZWdhbCBkcml2ZSBsZXR0ZXIgIitBLk9vKGEpKQp0aHJvdyBBLmIocyl9LAp3QihhLGIpe2lm +KGEhPW51bGwmJmE9PT1BLndLKGIpKXJldHVybiBudWxsCnJldHVybiBhfSwKT2UoYSxiLGMsZCl7dmFy +IHMscixxLHAsbyxuCmlmKGE9PW51bGwpcmV0dXJuIG51bGwKaWYoYj09PWMpcmV0dXJuIiIKaWYoQi54 +Qi5PKGEsYik9PT05MSl7cz1jLTEKaWYoQi54Qi5PKGEscykhPT05MylBLlIzKGEsYiwiTWlzc2luZyBl +bmQgYF1gIHRvIG1hdGNoIGBbYCBpbiBob3N0IikKcj1iKzEKcT1BLnRvKGEscixzKQppZihxPHMpe3A9 +cSsxCm89QS5PQShhLEIueEIuUWkoYSwiMjUiLHApP3ErMzpwLHMsIiUyNSIpfWVsc2Ugbz0iIgpBLmVn +KGEscixxKQpyZXR1cm4gQi54Qi5OaihhLGIscSkudG9Mb3dlckNhc2UoKStvKyJdIn1mb3Iobj1iO248 +YzsrK24paWYoQi54Qi5PKGEsbik9PT01OCl7cT1CLnhCLlhVKGEsIiUiLGIpCnE9cT49YiYmcTxjP3E6 +YwppZihxPGMpe3A9cSsxCm89QS5PQShhLEIueEIuUWkoYSwiMjUiLHApP3ErMzpwLGMsIiUyNSIpfWVs +c2Ugbz0iIgpBLmVnKGEsYixxKQpyZXR1cm4iWyIrQi54Qi5OaihhLGIscSkrbysiXSJ9cmV0dXJuIEEu +T0woYSxiLGMpfSwKdG8oYSxiLGMpe3ZhciBzPUIueEIuWFUoYSwiJSIsYikKcmV0dXJuIHM+PWImJnM8 +Yz9zOmN9LApPQShhLGIsYyxkKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPWQhPT0iIj9uZXcgQS5N +KGQpOm51bGwKZm9yKHM9YixyPXMscT0hMDtzPGM7KXtwPUIueEIuTyhhLHMpCmlmKHA9PT0zNyl7bz1B +LnJ2KGEscywhMCkKbj1vPT1udWxsCmlmKG4mJnEpe3MrPTMKY29udGludWV9aWYoaT09bnVsbClpPW5l +dyBBLk0oIiIpCm09aS5hKz1CLnhCLk5qKGEscixzKQppZihuKW89Qi54Qi5OaihhLHMscyszKQplbHNl +IGlmKG89PT0iJSIpQS5SMyhhLHMsIlpvbmVJRCBzaG91bGQgbm90IGNvbnRhaW4gJSBhbnltb3JlIikK +aS5hPW0rbwpzKz0zCnI9cwpxPSEwfWVsc2V7aWYocDwxMjcpe249cD4+PjQKaWYoIShuPDgpKXJldHVy +biBBLk9IKEIuRjMsbikKbj0oQi5GM1tuXSYxPDwocCYxNSkpIT09MH1lbHNlIG49ITEKaWYobil7aWYo +cSYmNjU8PXAmJjkwPj1wKXtpZihpPT1udWxsKWk9bmV3IEEuTSgiIikKaWYocjxzKXtpLmErPUIueEIu +TmooYSxyLHMpCnI9c31xPSExfSsrc31lbHNle2lmKChwJjY0NTEyKT09PTU1Mjk2JiZzKzE8Yyl7bD1C +LnhCLk8oYSxzKzEpCmlmKChsJjY0NTEyKT09PTU2MzIwKXtwPShwJjEwMjMpPDwxMHxsJjEwMjN8NjU1 +MzYKaz0yfWVsc2Ugaz0xfWVsc2Ugaz0xCmo9Qi54Qi5OaihhLHIscykKaWYoaT09bnVsbCl7aT1uZXcg +QS5NKCIiKQpuPWl9ZWxzZSBuPWkKbi5hKz1qCm4uYSs9QS56WChwKQpzKz1rCnI9c319fWlmKGk9PW51 +bGwpcmV0dXJuIEIueEIuTmooYSxiLGMpCmlmKHI8YylpLmErPUIueEIuTmooYSxyLGMpCm49aS5hCnJl +dHVybiBuLmNoYXJDb2RlQXQoMCk9PTA/bjpufSwKT0woYSxiLGMpe3ZhciBzLHIscSxwLG8sbixtLGws +ayxqLGkKZm9yKHM9YixyPXMscT1udWxsLHA9ITA7czxjOyl7bz1CLnhCLk8oYSxzKQppZihvPT09Mzcp +e249QS5ydihhLHMsITApCm09bj09bnVsbAppZihtJiZwKXtzKz0zCmNvbnRpbnVlfWlmKHE9PW51bGwp +cT1uZXcgQS5NKCIiKQpsPUIueEIuTmooYSxyLHMpCms9cS5hKz0hcD9sLnRvTG93ZXJDYXNlKCk6bApp +ZihtKXtuPUIueEIuTmooYSxzLHMrMykKaj0zfWVsc2UgaWYobj09PSIlIil7bj0iJTI1IgpqPTF9ZWxz +ZSBqPTMKcS5hPWsrbgpzKz1qCnI9cwpwPSEwfWVsc2V7aWYobzwxMjcpe209bz4+PjQKaWYoIShtPDgp +KXJldHVybiBBLk9IKEIuZWEsbSkKbT0oQi5lYVttXSYxPDwobyYxNSkpIT09MH1lbHNlIG09ITEKaWYo +bSl7aWYocCYmNjU8PW8mJjkwPj1vKXtpZihxPT1udWxsKXE9bmV3IEEuTSgiIikKaWYocjxzKXtxLmEr +PUIueEIuTmooYSxyLHMpCnI9c31wPSExfSsrc31lbHNle2lmKG88PTkzKXttPW8+Pj40CmlmKCEobTw4 +KSlyZXR1cm4gQS5PSChCLmFrLG0pCm09KEIuYWtbbV0mMTw8KG8mMTUpKSE9PTB9ZWxzZSBtPSExCmlm +KG0pQS5SMyhhLHMsIkludmFsaWQgY2hhcmFjdGVyIikKZWxzZXtpZigobyY2NDUxMik9PT01NTI5NiYm +cysxPGMpe2k9Qi54Qi5PKGEscysxKQppZigoaSY2NDUxMik9PT01NjMyMCl7bz0obyYxMDIzKTw8MTB8 +aSYxMDIzfDY1NTM2Cmo9Mn1lbHNlIGo9MX1lbHNlIGo9MQpsPUIueEIuTmooYSxyLHMpCmlmKCFwKWw9 +bC50b0xvd2VyQ2FzZSgpCmlmKHE9PW51bGwpe3E9bmV3IEEuTSgiIikKbT1xfWVsc2UgbT1xCm0uYSs9 +bAptLmErPUEuelgobykKcys9agpyPXN9fX19aWYocT09bnVsbClyZXR1cm4gQi54Qi5OaihhLGIsYykK +aWYocjxjKXtsPUIueEIuTmooYSxyLGMpCnEuYSs9IXA/bC50b0xvd2VyQ2FzZSgpOmx9bT1xLmEKcmV0 +dXJuIG0uY2hhckNvZGVBdCgwKT09MD9tOm19LApQaShhLGIsYyl7dmFyIHMscixxLHAKaWYoYj09PWMp +cmV0dXJuIiIKaWYoIUEuRXQoQi54Qi5XKGEsYikpKUEuUjMoYSxiLCJTY2hlbWUgbm90IHN0YXJ0aW5n +IHdpdGggYWxwaGFiZXRpYyBjaGFyYWN0ZXIiKQpmb3Iocz1iLHI9ITE7czxjOysrcyl7cT1CLnhCLlco +YSxzKQppZihxPDEyOCl7cD1xPj4+NAppZighKHA8OCkpcmV0dXJuIEEuT0goQi5tSyxwKQpwPShCLm1L +W3BdJjE8PChxJjE1KSkhPT0wfWVsc2UgcD0hMQppZighcClBLlIzKGEscywiSWxsZWdhbCBzY2hlbWUg +Y2hhcmFjdGVyIikKaWYoNjU8PXEmJnE8PTkwKXI9ITB9YT1CLnhCLk5qKGEsYixjKQpyZXR1cm4gQS5Z +YShyP2EudG9Mb3dlckNhc2UoKTphKX0sCllhKGEpe2lmKGE9PT0iaHR0cCIpcmV0dXJuImh0dHAiCmlm +KGE9PT0iZmlsZSIpcmV0dXJuImZpbGUiCmlmKGE9PT0iaHR0cHMiKXJldHVybiJodHRwcyIKaWYoYT09 +PSJwYWNrYWdlIilyZXR1cm4icGFja2FnZSIKcmV0dXJuIGF9LAp6UihhLGIsYyl7aWYoYT09bnVsbCly +ZXR1cm4iIgpyZXR1cm4gQS5QSShhLGIsYyxCLnRvLCExKX0sCmthKGEsYixjLGQsZSxmKXt2YXIgcyxy +LHE9ZT09PSJmaWxlIixwPXF8fGYKaWYoYT09bnVsbCl7aWYoZD09bnVsbClyZXR1cm4gcT8iLyI6IiIK +cz1BLnQ2KGQpCnI9bmV3IEEubEooZCxzLkMoInFVKDEpIikuYShuZXcgQS5SWigpKSxzLkMoImxKPDEs +cVU+IikpLkgoMCwiLyIpfWVsc2UgaWYoZCE9bnVsbCl0aHJvdyBBLmIoQS54WSgiQm90aCBwYXRoIGFu +ZCBwYXRoU2VnbWVudHMgc3BlY2lmaWVkIixudWxsKSkKZWxzZSByPUEuUEkoYSxiLGMsQi5XZCwhMCkK +aWYoci5sZW5ndGg9PT0wKXtpZihxKXJldHVybiIvIn1lbHNlIGlmKHAmJiFCLnhCLm4ociwiLyIpKXI9 +Ii8iK3IKcmV0dXJuIEEuSnIocixlLGYpfSwKSnIoYSxiLGMpe3ZhciBzPWIubGVuZ3RoPT09MAppZihz +JiYhYyYmIUIueEIubihhLCIvIikpcmV0dXJuIEEud0YoYSwhc3x8YykKcmV0dXJuIEEueGUoYSl9LAps +ZShhLGIsYyxkKXt2YXIgcyxyPXt9CmlmKGEhPW51bGwpe2lmKGQhPW51bGwpdGhyb3cgQS5iKEEueFko +IkJvdGggcXVlcnkgYW5kIHF1ZXJ5UGFyYW1ldGVycyBzcGVjaWZpZWQiLG51bGwpKQpyZXR1cm4gQS5Q +SShhLGIsYyxCLlZDLCEwKX1pZihkPT1udWxsKXJldHVybiBudWxsCnM9bmV3IEEuTSgiIikKci5hPSIi +CmQuSygwLG5ldyBBLnk1KG5ldyBBLk1FKHIscykpKQpyPXMuYQpyZXR1cm4gci5jaGFyQ29kZUF0KDAp +PT0wP3I6cn0sCnRHKGEsYixjKXtpZihhPT1udWxsKXJldHVybiBudWxsCnJldHVybiBBLlBJKGEsYixj +LEIuVkMsITApfSwKcnYoYSxiLGMpe3ZhciBzLHIscSxwLG8sbj1iKzIKaWYobj49YS5sZW5ndGgpcmV0 +dXJuIiUiCnM9Qi54Qi5PKGEsYisxKQpyPUIueEIuTyhhLG4pCnE9QS5vbyhzKQpwPUEub28ocikKaWYo +cTwwfHxwPDApcmV0dXJuIiUiCm89cSoxNitwCmlmKG88MTI3KXtuPUIuam4ud0cobyw0KQppZighKG48 +OCkpcmV0dXJuIEEuT0goQi5GMyxuKQpuPShCLkYzW25dJjE8PChvJjE1KSkhPT0wfWVsc2Ugbj0hMQpp +ZihuKXJldHVybiBBLkx3KGMmJjY1PD1vJiY5MD49bz8ob3wzMik+Pj4wOm8pCmlmKHM+PTk3fHxyPj05 +NylyZXR1cm4gQi54Qi5OaihhLGIsYiszKS50b1VwcGVyQ2FzZSgpCnJldHVybiBudWxsfSwKelgoYSl7 +dmFyIHMscixxLHAsbyxuLG0sbCxrPSIwMTIzNDU2Nzg5QUJDREVGIgppZihhPDEyOCl7cz1uZXcgVWlu +dDhBcnJheSgzKQpzWzBdPTM3CnNbMV09Qi54Qi5XKGssYT4+PjQpCnNbMl09Qi54Qi5XKGssYSYxNSl9 +ZWxzZXtpZihhPjIwNDcpaWYoYT42NTUzNSl7cj0yNDAKcT00fWVsc2V7cj0yMjQKcT0zfWVsc2V7cj0x +OTIKcT0yfXA9MypxCnM9bmV3IFVpbnQ4QXJyYXkocCkKZm9yKG89MDstLXEscT49MDtyPTEyOCl7bj1C +LmpuLmJmKGEsNipxKSY2M3xyCmlmKCEobzxwKSlyZXR1cm4gQS5PSChzLG8pCnNbb109MzcKbT1vKzEK +bD1CLnhCLlcoayxuPj4+NCkKaWYoIShtPHApKXJldHVybiBBLk9IKHMsbSkKc1ttXT1sCmw9bysyCm09 +Qi54Qi5XKGssbiYxNSkKaWYoIShsPHApKXJldHVybiBBLk9IKHMsbCkKc1tsXT1tCm8rPTN9fXJldHVy +biBBLkhNKHMsMCxudWxsKX0sClBJKGEsYixjLGQsZSl7dmFyIHM9QS5VbChhLGIsYyxkLGUpCnJldHVy +biBzPT1udWxsP0IueEIuTmooYSxiLGMpOnN9LApVbChhLGIsYyxkLGUpe3ZhciBzLHIscSxwLG8sbixt +LGwsayxqLGk9bnVsbApmb3Iocz0hZSxyPWIscT1yLHA9aTtyPGM7KXtvPUIueEIuTyhhLHIpCmlmKG88 +MTI3KXtuPW8+Pj40CmlmKCEobjw4KSlyZXR1cm4gQS5PSChkLG4pCm49KGRbbl0mMTw8KG8mMTUpKSE9 +PTB9ZWxzZSBuPSExCmlmKG4pKytyCmVsc2V7aWYobz09PTM3KXttPUEucnYoYSxyLCExKQppZihtPT1u +dWxsKXtyKz0zCmNvbnRpbnVlfWlmKCIlIj09PW0pe209IiUyNSIKbD0xfWVsc2UgbD0zfWVsc2V7aWYo +cylpZihvPD05Myl7bj1vPj4+NAppZighKG48OCkpcmV0dXJuIEEuT0goQi5hayxuKQpuPShCLmFrW25d +JjE8PChvJjE1KSkhPT0wfWVsc2Ugbj0hMQplbHNlIG49ITEKaWYobil7QS5SMyhhLHIsIkludmFsaWQg +Y2hhcmFjdGVyIikKbD1pCm09bH1lbHNle2lmKChvJjY0NTEyKT09PTU1Mjk2KXtuPXIrMQppZihuPGMp +e2s9Qi54Qi5PKGEsbikKaWYoKGsmNjQ1MTIpPT09NTYzMjApe289KG8mMTAyMyk8PDEwfGsmMTAyM3w2 +NTUzNgpsPTJ9ZWxzZSBsPTF9ZWxzZSBsPTF9ZWxzZSBsPTEKbT1BLnpYKG8pfX1pZihwPT1udWxsKXtw +PW5ldyBBLk0oIiIpCm49cH1lbHNlIG49cApqPW4uYSs9Qi54Qi5OaihhLHEscikKbi5hPWorQS5Faiht +KQppZih0eXBlb2YgbCE9PSJudW1iZXIiKXJldHVybiBBLnBZKGwpCnIrPWwKcT1yfX1pZihwPT1udWxs +KXJldHVybiBpCmlmKHE8YylwLmErPUIueEIuTmooYSxxLGMpCnM9cC5hCnJldHVybiBzLmNoYXJDb2Rl +QXQoMCk9PTA/czpzfSwKeUIoYSl7aWYoQi54Qi5uKGEsIi4iKSlyZXR1cm4hMApyZXR1cm4gQi54Qi5P +WShhLCIvLiIpIT09LTF9LAp4ZShhKXt2YXIgcyxyLHEscCxvLG4sbQppZighQS55QihhKSlyZXR1cm4g +YQpzPUEuUUkoW10sdC5zKQpmb3Iocj1hLnNwbGl0KCIvIikscT1yLmxlbmd0aCxwPSExLG89MDtvPHE7 +KytvKXtuPXJbb10KaWYoSi5STShuLCIuLiIpKXttPXMubGVuZ3RoCmlmKG0hPT0wKXtpZigwPj1tKXJl +dHVybiBBLk9IKHMsLTEpCnMucG9wKCkKaWYocy5sZW5ndGg9PT0wKUIuTm0uaShzLCIiKX1wPSEwfWVs +c2UgaWYoIi4iPT09bilwPSEwCmVsc2V7Qi5ObS5pKHMsbikKcD0hMX19aWYocClCLk5tLmkocywiIikK +cmV0dXJuIEIuTm0uSChzLCIvIil9LAp3RihhLGIpe3ZhciBzLHIscSxwLG8sbgppZighQS55QihhKSly +ZXR1cm4hYj9BLkMxKGEpOmEKcz1BLlFJKFtdLHQucykKZm9yKHI9YS5zcGxpdCgiLyIpLHE9ci5sZW5n +dGgscD0hMSxvPTA7bzxxOysrbyl7bj1yW29dCmlmKCIuLiI9PT1uKWlmKHMubGVuZ3RoIT09MCYmQi5O +bS5ncloocykhPT0iLi4iKXtpZigwPj1zLmxlbmd0aClyZXR1cm4gQS5PSChzLC0xKQpzLnBvcCgpCnA9 +ITB9ZWxzZXtCLk5tLmkocywiLi4iKQpwPSExfWVsc2UgaWYoIi4iPT09bilwPSEwCmVsc2V7Qi5ObS5p +KHMsbikKcD0hMX19cj1zLmxlbmd0aAppZihyIT09MClpZihyPT09MSl7aWYoMD49cilyZXR1cm4gQS5P +SChzLDApCnI9c1swXS5sZW5ndGg9PT0wfWVsc2Ugcj0hMQplbHNlIHI9ITAKaWYocilyZXR1cm4iLi8i +CmlmKHB8fEIuTm0uZ3JaKHMpPT09Ii4uIilCLk5tLmkocywiIikKaWYoIWIpe2lmKDA+PXMubGVuZ3Ro +KXJldHVybiBBLk9IKHMsMCkKQi5ObS5ZNShzLDAsQS5DMShzWzBdKSl9cmV0dXJuIEIuTm0uSChzLCIv +Iil9LApDMShhKXt2YXIgcyxyLHEscD1hLmxlbmd0aAppZihwPj0yJiZBLkV0KEIueEIuVyhhLDApKSlm +b3Iocz0xO3M8cDsrK3Mpe3I9Qi54Qi5XKGEscykKaWYocj09PTU4KXJldHVybiBCLnhCLk5qKGEsMCxz +KSsiJTNBIitCLnhCLnluKGEscysxKQppZihyPD0xMjcpe3E9cj4+PjQKaWYoIShxPDgpKXJldHVybiBB +Lk9IKEIubUsscSkKcT0oQi5tS1txXSYxPDwociYxNSkpPT09MH1lbHNlIHE9ITAKaWYocSlicmVha31y +ZXR1cm4gYX0sCnVqKGEsYil7aWYoYS5oQigicGFja2FnZSIpJiZhLmM9PW51bGwpcmV0dXJuIEEuZkYo +YiwwLGIubGVuZ3RoKQpyZXR1cm4tMX0sCm1uKGEpe3ZhciBzLHIscSxwPWEuZ0ZqKCksbz1wLmxlbmd0 +aAppZihvPjAmJkouSG0ocFswXSk9PT0yJiZKLmE2KHBbMF0sMSk9PT01OCl7aWYoMD49bylyZXR1cm4g +QS5PSChwLDApCkEucmcoSi5hNihwWzBdLDApLCExKQpBLkhOKHAsITEsMSkKcz0hMH1lbHNle0EuSE4o +cCwhMSwwKQpzPSExfXI9YS5ndFQoKSYmIXM/IiIrIlxcIjoiIgppZihhLmdjaigpKXtxPWEuZ0pmKGEp +CmlmKHEubGVuZ3RoIT09MClyPXIrIlxcIitxKyJcXCJ9cj1BLmwocixwLCJcXCIpCm89cyYmbz09PTE/ +cisiXFwiOnIKcmV0dXJuIG8uY2hhckNvZGVBdCgwKT09MD9vOm99LApJaChhLGIpe3ZhciBzLHIscQpm +b3Iocz0wLHI9MDtyPDI7KytyKXtxPUIueEIuVyhhLGIrcikKaWYoNDg8PXEmJnE8PTU3KXM9cyoxNitx +LTQ4CmVsc2V7cXw9MzIKaWYoOTc8PXEmJnE8PTEwMilzPXMqMTYrcS04NwplbHNlIHRocm93IEEuYihB +LnhZKCJJbnZhbGlkIFVSTCBlbmNvZGluZyIsbnVsbCkpfX1yZXR1cm4gc30sCmt1KGEsYixjLGQsZSl7 +dmFyIHMscixxLHAsbz1iCndoaWxlKCEwKXtpZighKG88Yykpe3M9ITAKYnJlYWt9cj1CLnhCLlcoYSxv +KQppZihyPD0xMjcpaWYociE9PTM3KXE9ZSYmcj09PTQzCmVsc2UgcT0hMAplbHNlIHE9ITAKaWYocSl7 +cz0hMQpicmVha30rK299aWYocyl7aWYoQi54TSE9PWQpcT0hMQplbHNlIHE9ITAKaWYocSlyZXR1cm4g +Qi54Qi5OaihhLGIsYykKZWxzZSBwPW5ldyBBLnFqKEIueEIuTmooYSxiLGMpKX1lbHNle3A9QS5RSShb +XSx0LnQpCmZvcihxPWEubGVuZ3RoLG89YjtvPGM7KytvKXtyPUIueEIuVyhhLG8pCmlmKHI+MTI3KXRo +cm93IEEuYihBLnhZKCJJbGxlZ2FsIHBlcmNlbnQgZW5jb2RpbmcgaW4gVVJJIixudWxsKSkKaWYocj09 +PTM3KXtpZihvKzM+cSl0aHJvdyBBLmIoQS54WSgiVHJ1bmNhdGVkIFVSSSIsbnVsbCkpCkIuTm0uaShw +LEEuSWgoYSxvKzEpKQpvKz0yfWVsc2UgaWYoZSYmcj09PTQzKUIuTm0uaShwLDMyKQplbHNlIEIuTm0u +aShwLHIpfX10LkwuYShwKQpyZXR1cm4gQi5vRS5XSihwKX0sCkV0KGEpe3ZhciBzPWF8MzIKcmV0dXJu +IDk3PD1zJiZzPD0xMjJ9LApLRChhLGIsYyl7dmFyIHMscixxLHAsbyxuLG0sbCxrPSJJbnZhbGlkIE1J +TUUgdHlwZSIsaj1BLlFJKFtiLTFdLHQudCkKZm9yKHM9YS5sZW5ndGgscj1iLHE9LTEscD1udWxsO3I8 +czsrK3Ipe3A9Qi54Qi5XKGEscikKaWYocD09PTQ0fHxwPT09NTkpYnJlYWsKaWYocD09PTQ3KXtpZihx +PDApe3E9cgpjb250aW51ZX10aHJvdyBBLmIoQS5ycihrLGEscikpfX1pZihxPDAmJnI+Yil0aHJvdyBB +LmIoQS5ycihrLGEscikpCmZvcig7cCE9PTQ0Oyl7Qi5ObS5pKGoscik7KytyCmZvcihvPS0xO3I8czsr +K3Ipe3A9Qi54Qi5XKGEscikKaWYocD09PTYxKXtpZihvPDApbz1yfWVsc2UgaWYocD09PTU5fHxwPT09 +NDQpYnJlYWt9aWYobz49MClCLk5tLmkoaixvKQplbHNle249Qi5ObS5nclooaikKaWYocCE9PTQ0fHxy +IT09bis3fHwhQi54Qi5RaShhLCJiYXNlNjQiLG4rMSkpdGhyb3cgQS5iKEEucnIoIkV4cGVjdGluZyAn +PSciLGEscikpCmJyZWFrfX1CLk5tLmkoaixyKQptPXIrMQppZigoai5sZW5ndGgmMSk9PT0xKWE9Qi5o +OS55cihhLG0scykKZWxzZXtsPUEuVWwoYSxtLHMsQi5WQywhMCkKaWYobCE9bnVsbClhPUIueEIuaTco +YSxtLHMsbCl9cmV0dXJuIG5ldyBBLlBFKGEsaixjKX0sCnV4KCl7dmFyIHMscixxLHAsbyxuLG09IjAx +MjM0NTY3ODlBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6 +LS5ffiEkJicoKSorLDs9IixsPSIuIixrPSI6IixqPSIvIixpPSI/IixoPSIjIixnPUEuUUkobmV3IEFy +cmF5KDIyKSx0LmdOKQpmb3Iocz0wO3M8MjI7KytzKWdbc109bmV3IFVpbnQ4QXJyYXkoOTYpCnI9bmV3 +IEEueUkoZykKcT1uZXcgQS5jNigpCnA9bmV3IEEucWQoKQpvPXQuZ2MuYShyLiQyKDAsMjI1KSkKcS4k +MyhvLG0sMSkKcS4kMyhvLGwsMTQpCnEuJDMobyxrLDM0KQpxLiQzKG8saiwzKQpxLiQzKG8saSwxNzIp +CnEuJDMobyxoLDIwNSkKbj1yLiQyKDE0LDIyNSkKcS4kMyhuLG0sMSkKcS4kMyhuLGwsMTUpCnEuJDMo +bixrLDM0KQpxLiQzKG4saiwyMzQpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPXIuJDIoMTUs +MjI1KQpxLiQzKG4sbSwxKQpxLiQzKG4sIiUiLDIyNSkKcS4kMyhuLGssMzQpCnEuJDMobixqLDkpCnEu +JDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPXIuJDIoMSwyMjUpCnEuJDMobixtLDEpCnEuJDMobixr +LDM0KQpxLiQzKG4saiwxMCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49ci4kMigyLDIzNSkK +cS4kMyhuLG0sMTM5KQpxLiQzKG4saiwxMzEpCnEuJDMobixsLDE0NikKcS4kMyhuLGksMTcyKQpxLiQz +KG4saCwyMDUpCm49ci4kMigzLDIzNSkKcS4kMyhuLG0sMTEpCnEuJDMobixqLDY4KQpxLiQzKG4sbCwx +OCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49ci4kMig0LDIyOSkKcS4kMyhuLG0sNSkKcC4k +MyhuLCJBWiIsMjI5KQpxLiQzKG4saywxMDIpCnEuJDMobiwiQCIsNjgpCnEuJDMobiwiWyIsMjMyKQpx +LiQzKG4saiwxMzgpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPXIuJDIoNSwyMjkpCnEuJDMo +bixtLDUpCnAuJDMobiwiQVoiLDIyOSkKcS4kMyhuLGssMTAyKQpxLiQzKG4sIkAiLDY4KQpxLiQzKG4s +aiwxMzgpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPXIuJDIoNiwyMzEpCnAuJDMobiwiMTki LDcpCnEuJDMobiwiQCIsNjgpCnEuJDMobixqLDEzOCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUp -CnEuJDMoby5hKHIuJDIoOCw4KSksIl0iLDUpCm49by5hKHIuJDIoOSwyMzUpKQpxLiQzKG4sbSwxMSkK -cS4kMyhuLGwsMTYpCnEuJDMobixqLDIzNCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49by5h -KHIuJDIoMTYsMjM1KSkKcS4kMyhuLG0sMTEpCnEuJDMobixsLDE3KQpxLiQzKG4saiwyMzQpCnEuJDMo -bixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDE3LDIzNSkpCnEuJDMobixtLDExKQpxLiQz -KG4saiw5KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1vLmEoci4kMigxMCwyMzUpKQpxLiQz -KG4sbSwxMSkKcS4kMyhuLGwsMTgpCnEuJDMobixqLDIzNCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwy -MDUpCm49by5hKHIuJDIoMTgsMjM1KSkKcS4kMyhuLG0sMTEpCnEuJDMobixsLDE5KQpxLiQzKG4saiwy -MzQpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDE5LDIzNSkpCnEuJDMobixt -LDExKQpxLiQzKG4saiwyMzQpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPW8uYShyLiQyKDEx -LDIzNSkpCnEuJDMobixtLDExKQpxLiQzKG4saiwxMCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUp -Cm49by5hKHIuJDIoMTIsMjM2KSkKcS4kMyhuLG0sMTIpCnEuJDMobixpLDEyKQpxLiQzKG4saCwyMDUp -Cm49by5hKHIuJDIoMTMsMjM3KSkKcS4kMyhuLG0sMTMpCnEuJDMobixpLDEzKQpwLiQzKG8uYShyLiQy -KDIwLDI0NSkpLCJheiIsMjEpCnI9by5hKHIuJDIoMjEsMjQ1KSkKcC4kMyhyLCJheiIsMjEpCnAuJDMo -ciwiMDkiLDIxKQpxLiQzKHIsIistLiIsMjEpCnJldHVybiBnfSwKVUIoYSxiLGMsZCxlKXt2YXIgcyxy -LHEscCxvPSQudlooKQpmb3Iocz1iO3M8YzsrK3Mpe2lmKCEoZD49MCYmZDxvLmxlbmd0aCkpcmV0dXJu -IEEuT0gobyxkKQpyPW9bZF0KcT1CLnhCLlcoYSxzKV45NgpwPXJbcT45NT8zMTpxXQpkPXAmMzEKQi5O -bS5ZNShlLHA+Pj41LHMpfXJldHVybiBkfSwKUngoYSl7aWYoYS5iPT09NyYmQi54Qi5uKGEuYSwicGFj -a2FnZSIpJiZhLmM8PTApcmV0dXJuIEEuZkYoYS5hLGEuZSxhLmYpCnJldHVybi0xfSwKZkYoYSxiLGMp -e3ZhciBzLHIscQpmb3Iocz1iLHI9MDtzPGM7KytzKXtxPUIueEIuTyhhLHMpCmlmKHE9PT00NylyZXR1 -cm4gciE9PTA/czotMQppZihxPT09Mzd8fHE9PT01OClyZXR1cm4tMQpyfD1xXjQ2fXJldHVybi0xfSwK -YlUoYSxiLGMpe3ZhciBzLHIscSxwLG8sbixtCmZvcihzPWEubGVuZ3RoLHI9MCxxPTA7cTxzOysrcSl7 -cD1CLnhCLlcoYSxxKQpvPUIueEIuVyhiLGMrcSkKbj1wXm8KaWYobiE9PTApe2lmKG49PT0zMil7bT1v -fG4KaWYoOTc8PW0mJm08PTEyMil7cj0zMgpjb250aW51ZX19cmV0dXJuLTF9fXJldHVybiByfSwKV0Y6 -ZnVuY3Rpb24gV0YoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmlQOmZ1bmN0aW9uIGlQKGEsYil7dGhp -cy5hPWEKdGhpcy5iPWJ9LApjazpmdW5jdGlvbiBjaygpe30sClhTOmZ1bmN0aW9uIFhTKCl7fSwKQzY6 -ZnVuY3Rpb24gQzYoYSl7dGhpcy5hPWF9LApFejpmdW5jdGlvbiBFeigpe30sCkY6ZnVuY3Rpb24gRigp -e30sCkFUOmZ1bmN0aW9uIEFUKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5k -PWR9LApiSjpmdW5jdGlvbiBiSihhLGIsYyxkLGUsZil7dmFyIF89dGhpcwpfLmU9YQpfLmY9YgpfLmE9 -YwpfLmI9ZApfLmM9ZQpfLmQ9Zn0sCmVZOmZ1bmN0aW9uIGVZKGEsYixjLGQsZSl7dmFyIF89dGhpcwpf -LmY9YQpfLmE9YgpfLmI9YwpfLmM9ZApfLmQ9ZX0sCm1wOmZ1bmN0aW9uIG1wKGEsYixjLGQpe3ZhciBf -PXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWR9LAp1YjpmdW5jdGlvbiB1YihhKXt0aGlzLmE9YX0s -CmRzOmZ1bmN0aW9uIGRzKGEpe3RoaXMuYT1hfSwKbGo6ZnVuY3Rpb24gbGooYSl7dGhpcy5hPWF9LApV -VjpmdW5jdGlvbiBVVihhKXt0aGlzLmE9YX0sCms1OmZ1bmN0aW9uIGs1KCl7fSwKS1k6ZnVuY3Rpb24g -S1koKXt9LApwOmZ1bmN0aW9uIHAoYSl7dGhpcy5hPWF9LApDRDpmdW5jdGlvbiBDRChhKXt0aGlzLmE9 -YX0sCmFFOmZ1bmN0aW9uIGFFKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCmNYOmZ1 -bmN0aW9uIGNYKCl7fSwKQW46ZnVuY3Rpb24gQW4oKXt9LApOMzpmdW5jdGlvbiBOMyhhLGIsYyl7dGhp -cy5hPWEKdGhpcy5iPWIKdGhpcy4kdGk9Y30sCmM4OmZ1bmN0aW9uIGM4KCl7fSwKTWg6ZnVuY3Rpb24g -TWgoKXt9LApaZDpmdW5jdGlvbiBaZCgpe30sCk06ZnVuY3Rpb24gTShhKXt0aGlzLmE9YX0sCm4xOmZ1 -bmN0aW9uIG4xKGEpe3RoaXMuYT1hfSwKY1M6ZnVuY3Rpb24gY1MoYSl7dGhpcy5hPWF9LApWQzpmdW5j -dGlvbiBWQyhhKXt0aGlzLmE9YX0sCkpUOmZ1bmN0aW9uIEpUKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9 -LApEbjpmdW5jdGlvbiBEbihhLGIsYyxkLGUsZixnKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1j -Cl8uZD1kCl8uZT1lCl8uZj1mCl8ucj1nCl8uej1fLnk9Xy54PV8udz0kfSwKUlo6ZnVuY3Rpb24gUloo -KXt9LApNRTpmdW5jdGlvbiBNRShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKeTU6ZnVuY3Rpb24geTUo -YSl7dGhpcy5hPWF9LApQRTpmdW5jdGlvbiBQRShhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5j -PWN9LAp5STpmdW5jdGlvbiB5SShhKXt0aGlzLmE9YX0sCmM2OmZ1bmN0aW9uIGM2KCl7fSwKcWQ6ZnVu -Y3Rpb24gcWQoKXt9LApVZjpmdW5jdGlvbiBVZihhLGIsYyxkLGUsZixnLGgpe3ZhciBfPXRoaXMKXy5h -PWEKXy5iPWIKXy5jPWMKXy5kPWQKXy5lPWUKXy5mPWYKXy5yPWcKXy53PWgKXy54PW51bGx9LApxZTpm -dW5jdGlvbiBxZShhLGIsYyxkLGUsZixnKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1k -Cl8uZT1lCl8uZj1mCl8ucj1nCl8uej1fLnk9Xy54PV8udz0kfSwKeDMoKXtyZXR1cm4gd2luZG93fSwK -WnIoKXtyZXR1cm4gZG9jdW1lbnR9LApKNihhKXt2YXIgcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJh -IikKaWYoYSE9bnVsbClCLnhuLnNMVShzLGEpCnJldHVybiBzfSwKTGooYSl7cmV0dXJuIENTUy5lc2Nh -cGUoYSl9LApVOShhLGIsYyl7dmFyIHMscj1kb2N1bWVudC5ib2R5CnIudG9TdHJpbmcKcz10LmFjCnM9 -bmV3IEEuVTUobmV3IEEuZTcoQi5SWS5yNihyLGEsYixjKSkscy5DKCJhMihsRC5FKSIpLmEobmV3IEEu -Q3YoKSkscy5DKCJVNTxsRC5FPiIpKQpyZXR1cm4gdC5oLmEocy5ncjgocykpfSwKclMoYSl7dmFyIHMs -cixxPSJlbGVtZW50IHRhZyB1bmF2YWlsYWJsZSIKdHJ5e3M9Si5ZRShhKQpzLmducyhhKQpxPXMuZ25z -KGEpfWNhdGNoKHIpe31yZXR1cm4gcX0sClROKGEsYil7dmFyIHMscixxPWEuY2xhc3NMaXN0CmZvcihz -PWIubGVuZ3RoLHI9MDtyPGIubGVuZ3RoO2IubGVuZ3RoPT09c3x8KDAsQS5saykoYiksKytyKXEuYWRk -KGJbcl0pfSwKSkUoYSxiLGMsZCxlKXt2YXIgcz1BLmFGKG5ldyBBLnZOKGMpLHQuQikKaWYocyE9bnVs -bCYmITApSi5kWihhLGIscywhMSkKcmV0dXJuIG5ldyBBLnhDKGEsYixzLCExLGUuQygieEM8MD4iKSl9 -LApUdyhhKXt2YXIgcz1BLko2KG51bGwpLHI9dC5GLmEod2luZG93LmxvY2F0aW9uKQpzPW5ldyBBLkpR -KG5ldyBBLm1rKHMscikpCnMuQ1koYSkKcmV0dXJuIHN9LApxRChhLGIsYyxkKXt0LmguYShhKQpBLm4o -YikKQS5uKGMpCnQuY3IuYShkKQpyZXR1cm4hMH0sCm5aKGEsYixjLGQpe3ZhciBzLHIscQp0LmguYShh -KQpBLm4oYikKQS5uKGMpCnM9dC5jci5hKGQpLmEKcj1zLmEKQi54bi5zTFUocixjKQpxPXIuaG9zdG5h -bWUKcz1zLmIKaWYoIShxPT1zLmhvc3RuYW1lJiZyLnBvcnQ9PT1zLnBvcnQmJnIucHJvdG9jb2w9PT1z -LnByb3RvY29sKSlpZihxPT09IiIpaWYoci5wb3J0PT09IiIpe3M9ci5wcm90b2NvbApzPXM9PT0iOiJ8 -fHM9PT0iIn1lbHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ugcz0hMApyZXR1cm4gc30sCkJsKCl7dmFyIHM9 -dC5OLHI9QS50TShCLlF4LHMpLHE9QS5RSShbIlRFTVBMQVRFIl0sdC5zKSxwPXQuZEcuYShuZXcgQS5J -QSgpKQpzPW5ldyBBLmN0KHIsQS5McyhzKSxBLkxzKHMpLEEuTHMocyksbnVsbCkKcy5DWShudWxsLG5l -dyBBLmxKKEIuUXgscCx0LmR2KSxxLG51bGwpCnJldHVybiBzfSwKcWMoYSl7dmFyIHMKaWYoYT09bnVs -bClyZXR1cm4gbnVsbAppZigicG9zdE1lc3NhZ2UiIGluIGEpe3M9QS5QMShhKQpyZXR1cm4gc31lbHNl -IHJldHVybiB0LmNoLmEoYSl9LApQMShhKXtpZihhPT09d2luZG93KXJldHVybiB0LmNpLmEoYSkKZWxz -ZSByZXR1cm4gbmV3IEEuZFcoKX0sCmFGKGEsYil7dmFyIHM9JC5YMwppZihzPT09Qi5OVSlyZXR1cm4g -YQpyZXR1cm4gcy5QeShhLGIpfSwKcUU6ZnVuY3Rpb24gcUUoKXt9LApHaDpmdW5jdGlvbiBHaCgpe30s -CmZZOmZ1bmN0aW9uIGZZKCl7fSwKclo6ZnVuY3Rpb24gclooKXt9LApBejpmdW5jdGlvbiBBeigpe30s -ClFQOmZ1bmN0aW9uIFFQKCl7fSwKbng6ZnVuY3Rpb24gbngoKXt9LApvSjpmdW5jdGlvbiBvSigpe30s -CmlkOmZ1bmN0aW9uIGlkKCl7fSwKUUY6ZnVuY3Rpb24gUUYoKXt9LApOaDpmdW5jdGlvbiBOaCgpe30s -CmFlOmZ1bmN0aW9uIGFlKCl7fSwKSUI6ZnVuY3Rpb24gSUIoKXt9LApuNzpmdW5jdGlvbiBuNygpe30s -Cnd6OmZ1bmN0aW9uIHd6KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCmN2OmZ1bmN0aW9uIGN2KCl7 -fSwKQ3Y6ZnVuY3Rpb24gQ3YoKXt9LAplYTpmdW5jdGlvbiBlYSgpe30sCkQwOmZ1bmN0aW9uIEQwKCl7 -fSwKaEg6ZnVuY3Rpb24gaEgoKXt9LApoNDpmdW5jdGlvbiBoNCgpe30sCmJyOmZ1bmN0aW9uIGJyKCl7 -fSwKVmI6ZnVuY3Rpb24gVmIoKXt9LApmSjpmdW5jdGlvbiBmSigpe30sCndhOmZ1bmN0aW9uIHdhKCl7 -fSwKU2c6ZnVuY3Rpb24gU2coKXt9LAp1ODpmdW5jdGlvbiB1OCgpe30sCkFqOmZ1bmN0aW9uIEFqKCl7 -fSwKZTc6ZnVuY3Rpb24gZTcoYSl7dGhpcy5hPWF9LApLVjpmdW5jdGlvbiBLVigpe30sCkJIOmZ1bmN0 -aW9uIEJIKCl7fSwKU046ZnVuY3Rpb24gU04oKXt9LApldzpmdW5jdGlvbiBldygpe30sCmxwOmZ1bmN0 -aW9uIGxwKCl7fSwKVGI6ZnVuY3Rpb24gVGIoKXt9LApJdjpmdW5jdGlvbiBJdigpe30sCldQOmZ1bmN0 -aW9uIFdQKCl7fSwKeVk6ZnVuY3Rpb24geVkoKXt9LAp3NjpmdW5jdGlvbiB3Nigpe30sCks1OmZ1bmN0 -aW9uIEs1KCl7fSwKQ206ZnVuY3Rpb24gQ20oKXt9LApDUTpmdW5jdGlvbiBDUSgpe30sCnc0OmZ1bmN0 -aW9uIHc0KCl7fSwKcmg6ZnVuY3Rpb24gcmgoKXt9LApjZjpmdW5jdGlvbiBjZigpe30sCmk3OmZ1bmN0 -aW9uIGk3KGEpe3RoaXMuYT1hfSwKU3k6ZnVuY3Rpb24gU3koYSl7dGhpcy5hPWF9LApLUzpmdW5jdGlv -biBLUyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKQTM6ZnVuY3Rpb24gQTMoYSxiKXt0aGlzLmE9YQp0 -aGlzLmI9Yn0sCkk0OmZ1bmN0aW9uIEk0KGEpe3RoaXMuYT1hfSwKRms6ZnVuY3Rpb24gRmsoYSxiKXt0 -aGlzLmE9YQp0aGlzLiR0aT1ifSwKUk86ZnVuY3Rpb24gUk8oYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9 -YQpfLmI9YgpfLmM9YwpfLiR0aT1kfSwKQ3E6ZnVuY3Rpb24gQ3EoYSxiLGMsZCl7dmFyIF89dGhpcwpf -LmE9YQpfLmI9YgpfLmM9YwpfLiR0aT1kfSwKeEM6ZnVuY3Rpb24geEMoYSxiLGMsZCxlKXt2YXIgXz10 -aGlzCl8uYj1hCl8uYz1iCl8uZD1jCl8uZT1kCl8uJHRpPWV9LAp2TjpmdW5jdGlvbiB2TihhKXt0aGlz -LmE9YX0sCkpROmZ1bmN0aW9uIEpRKGEpe3RoaXMuYT1hfSwKR206ZnVuY3Rpb24gR20oKXt9LAp2RDpm -dW5jdGlvbiB2RChhKXt0aGlzLmE9YX0sClV2OmZ1bmN0aW9uIFV2KGEpe3RoaXMuYT1hfSwKRWc6ZnVu -Y3Rpb24gRWcoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKbTY6ZnVuY3Rpb24gbTYo -KXt9LApFbzpmdW5jdGlvbiBFbygpe30sCldrOmZ1bmN0aW9uIFdrKCl7fSwKY3Q6ZnVuY3Rpb24gY3Qo -YSxiLGMsZCxlKXt2YXIgXz10aGlzCl8uZT1hCl8uYT1iCl8uYj1jCl8uYz1kCl8uZD1lfSwKSUE6ZnVu -Y3Rpb24gSUEoKXt9LApPdzpmdW5jdGlvbiBPdygpe30sClc5OmZ1bmN0aW9uIFc5KGEsYixjKXt2YXIg -Xz10aGlzCl8uYT1hCl8uYj1iCl8uYz0tMQpfLmQ9bnVsbApfLiR0aT1jfSwKZFc6ZnVuY3Rpb24gZFco -KXt9LAptazpmdW5jdGlvbiBtayhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKS286ZnVuY3Rpb24gS28o -YSl7dGhpcy5hPWEKdGhpcy5iPTB9LApmbTpmdW5jdGlvbiBmbShhKXt0aGlzLmE9YX0sClk4OmZ1bmN0 -aW9uIFk4KCl7fSwKbnE6ZnVuY3Rpb24gbnEoKXt9LApBcjpmdW5jdGlvbiBBcigpe30sCnREOmZ1bmN0 -aW9uIHREKCl7fSwKdWY6ZnVuY3Rpb24gdWYoKXt9LAppSjpmdW5jdGlvbiBpSigpe30sCkUyOmZ1bmN0 -aW9uIEUyKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApqZzpmdW5jdGlvbiBqZyhhLGIpe3RoaXMuYT1h -CnRoaXMuYj1ifSwKQmY6ZnVuY3Rpb24gQmYoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkFzOmZ1bmN0 -aW9uIEFzKCl7fSwKR0U6ZnVuY3Rpb24gR0UoYSl7dGhpcy5hPWF9LApONzpmdW5jdGlvbiBONyhhLGIp -e3RoaXMuYT1hCnRoaXMuYj1ifSwKdVE6ZnVuY3Rpb24gdVEoKXt9LApoRjpmdW5jdGlvbiBoRigpe30s -ClI0KGEsYixjLGQpe3ZhciBzLHIscQpBLnA4KGIpCnQuai5hKGQpCmlmKGIpe3M9W2NdCkIuTm0uRlYo -cyxkKQpkPXN9cj10LnoKcT1BLlBXKEouTTEoZCxBLncwKCksciksITAscikKdC5ZLmEoYSkKcmV0dXJu -IEEud1koQS5FayhhLHEsbnVsbCkpfSwKRG0oYSxiLGMpe3ZhciBzCnRyeXtpZihPYmplY3QuaXNFeHRl -bnNpYmxlKGEpJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYikpe09iamVj -dC5kZWZpbmVQcm9wZXJ0eShhLGIse3ZhbHVlOmN9KQpyZXR1cm4hMH19Y2F0Y2gocyl7fXJldHVybiEx -fSwKT20oYSxiKXtpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYSxiKSlyZXR1 -cm4gYVtiXQpyZXR1cm4gbnVsbH0sCndZKGEpe2lmKGE9PW51bGx8fHR5cGVvZiBhPT0ic3RyaW5nInx8 -dHlwZW9mIGE9PSJudW1iZXIifHxBLnJRKGEpKXJldHVybiBhCmlmKGEgaW5zdGFuY2VvZiBBLkU0KXJl -dHVybiBhLmEKaWYoQS5SOShhKSlyZXR1cm4gYQppZih0LmFrLmIoYSkpcmV0dXJuIGEKaWYoYSBpbnN0 -YW5jZW9mIEEuaVApcmV0dXJuIEEubzIoYSkKaWYodC5ZLmIoYSkpcmV0dXJuIEEuaEUoYSwiJGRhcnRf -anNGdW5jdGlvbiIsbmV3IEEuRFYoKSkKcmV0dXJuIEEuaEUoYSwiXyRkYXJ0X2pzT2JqZWN0IixuZXcg -QS5QQygkLmtJKCkpKX0sCmhFKGEsYixjKXt2YXIgcz1BLk9tKGEsYikKaWYocz09bnVsbCl7cz1jLiQx -KGEpCkEuRG0oYSxiLHMpfXJldHVybiBzfSwKZFUoYSl7dmFyIHMscgppZihhPT1udWxsfHx0eXBlb2Yg -YT09InN0cmluZyJ8fHR5cGVvZiBhPT0ibnVtYmVyInx8dHlwZW9mIGE9PSJib29sZWFuIilyZXR1cm4g -YQplbHNlIGlmKGEgaW5zdGFuY2VvZiBPYmplY3QmJkEuUjkoYSkpcmV0dXJuIGEKZWxzZSBpZihhIGlu -c3RhbmNlb2YgT2JqZWN0JiZ0LmFrLmIoYSkpcmV0dXJuIGEKZWxzZSBpZihhIGluc3RhbmNlb2YgRGF0 -ZSl7cz1BLklaKGEuZ2V0VGltZSgpKQppZihNYXRoLmFicyhzKTw9ODY0ZTEzKXI9ITEKZWxzZSByPSEw -CmlmKHIpQS52KEEueFkoIkRhdGVUaW1lIGlzIG91dHNpZGUgdmFsaWQgcmFuZ2U6ICIrcyxudWxsKSkK -QS5jYighMSwiaXNVdGMiLHQueSkKcmV0dXJuIG5ldyBBLmlQKHMsITEpfWVsc2UgaWYoYS5jb25zdHJ1 -Y3Rvcj09PSQua0koKSlyZXR1cm4gYS5vCmVsc2UgcmV0dXJuIEEuTkQoYSl9LApORChhKXtpZih0eXBl -b2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gQS5pUShhLCQudygpLG5ldyBBLlFTKCkpCmlmKGEgaW5zdGFu -Y2VvZiBBcnJheSlyZXR1cm4gQS5pUShhLCQuUjgoKSxuZXcgQS5ucCgpKQpyZXR1cm4gQS5pUShhLCQu -UjgoKSxuZXcgQS5VdCgpKX0sCmlRKGEsYixjKXt2YXIgcz1BLk9tKGEsYikKaWYocz09bnVsbHx8IShh -IGluc3RhbmNlb2YgT2JqZWN0KSl7cz1jLiQxKGEpCkEuRG0oYSxiLHMpfXJldHVybiBzfSwKRFY6ZnVu -Y3Rpb24gRFYoKXt9LApQQzpmdW5jdGlvbiBQQyhhKXt0aGlzLmE9YX0sClFTOmZ1bmN0aW9uIFFTKCl7 -fSwKbnA6ZnVuY3Rpb24gbnAoKXt9LApVdDpmdW5jdGlvbiBVdCgpe30sCkU0OmZ1bmN0aW9uIEU0KGEp -e3RoaXMuYT1hfSwKcjc6ZnVuY3Rpb24gcjcoYSl7dGhpcy5hPWF9LApUejpmdW5jdGlvbiBUeihhLGIp -e3RoaXMuYT1hCnRoaXMuJHRpPWJ9LAp2ZzpmdW5jdGlvbiB2Zygpe30sCm5kOmZ1bmN0aW9uIG5kKCl7 -fSwKS2U6ZnVuY3Rpb24gS2UoYSl7dGhpcy5hPWF9LApoaTpmdW5jdGlvbiBoaSgpe30sCmpmKGEpe3Zh -ciBzLHIscSxwCmlmKGE9PW51bGwpcz1udWxsCmVsc2V7cz1BLlFJKFtdLHQuZkEpCmZvcihyPUouSVQo -YSk7ci5HKCk7KXtxPXIuZ2woKQpwPUouVTYocSkKcy5wdXNoKG5ldyBBLlNlKEEuayhwLnEocSwiZGVz -Y3JpcHRpb24iKSksQS5rKHAucShxLCJocmVmIikpKSl9fXJldHVybiBzfSwKTmQoYSl7dmFyIHMscgpp -ZihhPT1udWxsKXM9bnVsbAplbHNle3M9QS5RSShbXSx0LmhoKQpmb3Iocj1KLklUKGEpO3IuRygpOylz -LnB1c2goQS5OZihyLmdsKCkpKX1yZXR1cm4gc30sCk5mKGEpe3ZhciBzPUouVTYoYSkscj1BLmsocy5x -KGEsImRlc2NyaXB0aW9uIikpLHE9QS5RSShbXSx0LmFKKQpmb3Iocz1KLklUKHQuVy5hKHMucShhLCJl -bnRyaWVzIikpKTtzLkcoKTspcS5wdXNoKEEuUmoocy5nbCgpKSkKcmV0dXJuIG5ldyBBLnlEKHIscSl9 -LApSaihhKXt2YXIgcyxyPUouVTYoYSkscT1BLmsoci5xKGEsImRlc2NyaXB0aW9uIikpLHA9QS5rKHIu -cShhLCJmdW5jdGlvbiIpKSxvPXIucShhLCJsaW5rIikKaWYobz09bnVsbClvPW51bGwKZWxzZXtzPUou -VTYobykKbz1uZXcgQS5NbChBLmsocy5xKG8sImhyZWYiKSksQS5VYyhzLnEobywibGluZSIpKSxBLmso -cy5xKG8sInBhdGgiKSkpfXI9dC5iTS5hKHIucShhLCJoaW50QWN0aW9ucyIpKQpyPXI9PW51bGw/bnVs -bDpKLk0xKHIsbmV3IEEuYU4oKSx0LkopLmJyKDApCnJldHVybiBuZXcgQS53YihxLHAsbyxyPT1udWxs -P0IuZG46cil9LApkMjpmdW5jdGlvbiBkMihhLGIsYyxkLGUsZil7dmFyIF89dGhpcwpfLmE9YQpfLmI9 -YgpfLmM9YwpfLmQ9ZApfLmU9ZQpfLmY9Zn0sClNlOmZ1bmN0aW9uIFNlKGEsYil7dGhpcy5hPWEKdGhp -cy5iPWJ9LApNbDpmdW5jdGlvbiBNbChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LAp5 -RDpmdW5jdGlvbiB5RChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKd2I6ZnVuY3Rpb24gd2IoYSxiLGMs -ZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZH0sCmFOOmZ1bmN0aW9uIGFOKCl7fSwK -YjA6ZnVuY3Rpb24gYjAoKXt9LAp3Uigpe3JldHVybiBuZXcgQS5xcCgiIiwiIiwiIixCLkR4KX0sCllm -KGEpe3ZhciBzLHIscSxwLG8sbixtLGwsaz1BLmsoYS5xKDAsInJlZ2lvbnMiKSksaj1BLmsoYS5xKDAs -Im5hdmlnYXRpb25Db250ZW50IikpLGk9QS5rKGEucSgwLCJzb3VyY2VDb2RlIikpLGg9QS5GbCh0Lk4s -dC5mNCkKZm9yKHM9dC5HLmEoYS5xKDAsImVkaXRzIikpLHM9cy5nUHUocykscz1zLmdBKHMpLHI9dC5r -LHE9dC5naTtzLkcoKTspe3A9cy5nbCgpCm89cC5hCm49QS5RSShbXSxxKQpmb3IocD1KLklUKHIuYShw -LmIpKTtwLkcoKTspe209cC5nbCgpCmw9Si5VNihtKQpuLnB1c2gobmV3IEEuajgoQS5VYyhsLnEobSwi -bGluZSIpKSxBLmsobC5xKG0sImV4cGxhbmF0aW9uIikpLEEuVWMobC5xKG0sIm9mZnNldCIpKSkpfWgu -WTUoMCxvLG4pfXJldHVybiBuZXcgQS5xcChrLGosaSxoKX0sCmo4OmZ1bmN0aW9uIGo4KGEsYixjKXt0 -aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCnFwOmZ1bmN0aW9uIHFwKGEsYixjLGQpe3ZhciBfPXRo -aXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWR9LAptUTpmdW5jdGlvbiBtUSgpe30sCklxKCl7Qi5CWi5C -KGRvY3VtZW50LCJET01Db250ZW50TG9hZGVkIixuZXcgQS5lKCkpCkIub2wuQih3aW5kb3csInBvcHN0 -YXRlIixuZXcgQS5MKCkpfSwKa3ooYSl7dmFyIHMscj10LmguYShhLnBhcmVudE5vZGUpLnF1ZXJ5U2Vs -ZWN0b3IoIjpzY29wZSA+IHVsIikscT1yLnN0eWxlLHA9Qi5DRC56UShyLm9mZnNldEhlaWdodCkKcS5t -YXhIZWlnaHQ9IiIrcCoyKyJweCIKcT1KLnFGKGEpCnA9cS4kdGkKcz1wLkMoIn4oMSk/IikuYShuZXcg -QS5XeChyLGEpKQp0LlouYShudWxsKQpBLkpFKHEuYSxxLmIscywhMSxwLmMpfSwKeVgoYSxiKXt2YXIg -cyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmPSJxdWVyeVNlbGVjdG9yQWxsIixlPWRvY3VtZW50LnF1 -ZXJ5U2VsZWN0b3IoYSkKZS50b1N0cmluZwpzPXQuaApBLkRoKHMscywiVCIsZikKcj10LlIKcT1uZXcg -QS53eihlLnF1ZXJ5U2VsZWN0b3JBbGwoIi5uYXYtbGluayIpLHIpCmZvcihwPXIuQygiYTc8bEQuRT4i -KSxvPW5ldyBBLmE3KHEscS5nayhxKSxwKSxuPXQuWixtPXIuQygibEQuRSIpO28uRygpOyl7bD1vLmQK -bD1KLnFGKGw9PW51bGw/bS5hKGwpOmwpCms9bC4kdGkKaj1rLkMoIn4oMSk/IikuYShuZXcgQS5Ibyhi -KSkKbi5hKG51bGwpCkEuSkUobC5hLGwuYixqLCExLGsuYyl9QS5EaChzLHMsIlQiLGYpCmk9bmV3IEEu -d3ooZS5xdWVyeVNlbGVjdG9yQWxsKCIucmVnaW9uIikscikKaWYoIWkuZ2wwKGkpKXtvPWUucXVlcnlT -ZWxlY3RvcigidGFibGVbZGF0YS1wYXRoXSIpCm8udG9TdHJpbmcKaD1vLmdldEF0dHJpYnV0ZSgiZGF0 -YS0iK25ldyBBLlN5KG5ldyBBLmk3KG8pKS5PVSgicGF0aCIpKQpmb3Iobz1uZXcgQS5hNyhpLGkuZ2so -aSkscCk7by5HKCk7KXtsPW8uZAppZihsPT1udWxsKWw9bS5hKGwpCms9Si5xRihsKQpqPWsuJHRpCmw9 -ai5DKCJ+KDEpPyIpLmEobmV3IEEuSUMobCxoKSkKbi5hKG51bGwpCkEuSkUoay5hLGsuYixsLCExLGou -Yyl9fUEuRGgocyxzLCJUIixmKQpnPW5ldyBBLnd6KGUucXVlcnlTZWxlY3RvckFsbCgiLmFkZC1oaW50 -LWxpbmsiKSxyKQpmb3IoZT1uZXcgQS5hNyhnLGcuZ2soZykscCk7ZS5HKCk7KXtzPWUuZApzPUoucUYo -cz09bnVsbD9tLmEocyk6cykKcj1zLiR0aQpyLkMoIn4oMSk/IikuYShBLmlTKCkpCm4uYShudWxsKQpB -LkpFKHMuYSxzLmIsQS5pUygpLCExLHIuYyl9fSwKUTYoYSxiLGMpe3ZhciBzPW5ldyBYTUxIdHRwUmVx -dWVzdCgpCkIuRHQuZW8ocywiR0VUIixBLlE0KGEsYiksITApCnMuc2V0UmVxdWVzdEhlYWRlcigiQ29u -dGVudC1UeXBlIiwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCIpCnJldHVybiBBLkxVKHMs -bnVsbCxjKX0sCnR5KGEsYil7dmFyIHM9bmV3IFhNTEh0dHBSZXF1ZXN0KCkscj10Lk4KQi5EdC5lbyhz -LCJQT1NUIixBLlE0KGEsQS5GbChyLHIpKSwhMCkKcy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5 -cGUiLCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04IikKcmV0dXJuIEEuTFUocyxiLHQuRyl9 -LApMVShhLGIsYyl7cmV0dXJuIEEuVGcoYSxiLGMsYy5DKCIwPyIpKX0sClRnKGEsYixjLGQpe3ZhciBz -PTAscj1BLkZYKGQpLHEscD0yLG8sbixtLGwsayxqLGksaCxnLGYKdmFyICRhc3luYyRMVT1BLmx6KGZ1 -bmN0aW9uKGUsYTApe2lmKGU9PT0xKXtvPWEwCnM9cH13aGlsZSh0cnVlKXN3aXRjaChzKXtjYXNlIDA6 -aT1uZXcgQS5aZihuZXcgQS52cygkLlgzLHQuYW8pLHQuYmopCmg9dC5neApnPWguYShuZXcgQS5mQyhp -LGEpKQp0LlouYShudWxsKQpsPXQucApBLkpFKGEsImxvYWQiLGcsITEsbCkKQS5KRShhLCJlcnJvciIs -aC5hKGkuZ1lKKCkpLCExLGwpCmEuc2VuZChiPT1udWxsP251bGw6Qi5DdC5PQihiLG51bGwpKQpwPTQK -cz03CnJldHVybiBBLmpRKGkuYSwkYXN5bmMkTFUpCmNhc2UgNzpwPTIKcz02CmJyZWFrCmNhc2UgNDpw -PTMKZj1vCm49QS50cyhmKQpoPWEucmVhZHlTdGF0ZQppZihoPT09NCYmYS5zdGF0dXM9PT0wKXRocm93 -IEEuYihBLlRHKCJFcnJvciByZWFjaGluZyBtaWdyYXRpb24gcHJldmlldyBzZXJ2ZXIiLCJUaGlzIHVz -dWFsbHkgaGFwcGVucyBiZWNhdXNlIHRoZSBtaWdyYXRpb24gcHJldmlldyBzZXJ2ZXIgaGFzIGV4aXRl -ZC4gIEZvclxuZXhhbXBsZSBpdCBtYXkgaGF2ZSBiZWVuIGFib3J0ZWQgd2l0aCBDdHJsLUMsIG9yIHlv -dSBtYXkgaGF2ZSBjb21wbGV0ZWQgdGhpc1xubWlncmF0aW9uLCBvciBhbiBleGNlcHRpb24gbWF5IGhh -dmUgb2NjdXJyZWQuICBQbGVhc2UgY2hlY2sgdGhlIGNvbnNvbGUgd2hlcmVcbnlvdSBpbnZva2VkIGBk -YXJ0IG1pZ3JhdGVgIHRvIHZlcmlmeSB0aGF0IHRoZSBwcmV2aWV3IHNlcnZlciBpcyBzdGlsbCBydW5u -aW5nLlxuIikpCmVsc2V7bT1uZXcgQS5sSihBLlFJKFsicmVhZHlTdGF0ZT0iK2gsInJlc3BvbnNlVGV4 -dD0iK0IuQ3QuT0IoYS5yZXNwb25zZVRleHQsbnVsbCksInJlc3BvbnNlVHlwZT0iK0IuQ3QuT0IoYS5y -ZXNwb25zZVR5cGUsbnVsbCksInJlc3BvbnNlVXJsPSIrQi5DdC5PQihhLnJlc3BvbnNlVVJMLG51bGwp -LCJzdGF0dXM9IitBLkVqKGEuc3RhdHVzKSwic3RhdHVzVGV4dD0iK0IuQ3QuT0IoYS5zdGF0dXNUZXh0 -LG51bGwpXSx0LnMpLHQuZEcuYShuZXcgQS5UbSgpKSx0LmR2KS5IKDAsIiwgIikKdGhyb3cgQS5iKEEu -VGwoIkVycm9yIHJlYWNoaW5nIG1pZ3JhdGlvbiBwcmV2aWV3IHNlcnZlcjogIitBLkVqKG0pLG4pKX1z -PTYKYnJlYWsKY2FzZSAzOnM9MgpicmVhawpjYXNlIDY6aWYoYS5zdGF0dXM9PT00MDEpdGhyb3cgQS5i -KEEuVEcoIlVuYXV0aG9yaXplZCByZXNwb25zZSBmcm9tIG1pZ3JhdGlvbiBwcmV2aWV3IHNlcnZlciIs -IlRoZSBtaWdyYXRpb24gcHJldmlldyBzZXJ2ZXIgaGFzIGRldGVjdGVkIGEgbWlzbWF0Y2ggYmV0d2Vl -biB0aGUgYXV0aFRva2VuIGluXG55b3VyIFVSTCBhbmQgdGhlIHRva2VuIHRoYXQgd2FzIGdlbmVyYXRl -ZCBhdCB0aGUgdGltZSB0aGF0IGBkYXJ0IG1pZ3JhdGVgIHdhc1xucnVuLiAgSGF2ZSB5b3UgcmVzdGFy -dGVkIHRoZSBtaWdyYXRpb24gc2VydmVyIHJlY2VudGx5PyAgSWYgc28sIHlvdSdsbCBuZWVkIHRvXG5j -aGVjayBpdHMgb3V0cHV0IGZvciBhIGZyZXNoIFVSTCwgYW5kIHVzZSB0aGF0IFVSTCB0byBwZXJmb3Jt -IHlvdXIgbWlncmF0aW9uLlxuIikpCmg9YS5yZXNwb25zZVRleHQKaC50b1N0cmluZwpqPUIuQ3QucFco -MCxoLG51bGwpCmlmKGEuc3RhdHVzPT09MjAwKXtxPWMuQygiMD8iKS5hKGopCnM9MQpicmVha31lbHNl -e2oudG9TdHJpbmcKdGhyb3cgQS5iKGopfWNhc2UgMTpyZXR1cm4gQS55QyhxLHIpCmNhc2UgMjpyZXR1 -cm4gQS5mMyhvLHIpfX0pCnJldHVybiBBLkRJKCRhc3luYyRMVSxyKX0sCmFLKGEpe3ZhciBzPUEuaEso -YSkuZ2hZKCkucSgwLCJsaW5lIikKcmV0dXJuIHM9PW51bGw/bnVsbDpBLkhwKHMsbnVsbCl9LApHNihh -KXt2YXIgcz1BLmhLKGEpLmdoWSgpLnEoMCwib2Zmc2V0IikKcmV0dXJuIHM9PW51bGw/bnVsbDpBLkhw -KHMsbnVsbCl9LAppNihhKXtyZXR1cm4gQS5uVyh0LlYuYShhKSl9LApuVyhhKXt2YXIgcz0wLHI9QS5G -WCh0LnopLHE9MSxwLG8sbixtLGwsayxqLGksaAp2YXIgJGFzeW5jJGk2PUEubHooZnVuY3Rpb24oYixj -KXtpZihiPT09MSl7cD1jCnM9cX13aGlsZSh0cnVlKXN3aXRjaChzKXtjYXNlIDA6aT10LmguYShBLnFj -KGEuY3VycmVudFRhcmdldCkpLmdldEF0dHJpYnV0ZSgiaHJlZiIpCmkudG9TdHJpbmcKbz1pCmEucHJl -dmVudERlZmF1bHQoKQpxPTMKaT1kb2N1bWVudApuPUIuQ0QuelEoaS5xdWVyeVNlbGVjdG9yKCIuY29u -dGVudCIpLnNjcm9sbFRvcCkKcz02CnJldHVybiBBLmpRKEEudHkobyxudWxsKSwkYXN5bmMkaTYpCmNh -c2UgNjprPXQuRi5hKHdpbmRvdy5sb2NhdGlvbikucGF0aG5hbWUKay50b1N0cmluZwpzPTcKcmV0dXJu -IEEualEoQS5HNyhrLG51bGwsbnVsbCwhMSxudWxsKSwkYXN5bmMkaTYpCmNhc2UgNzppLmJvZHkuY2xh -c3NMaXN0LmFkZCgibmVlZHMtcmVydW4iKQppPWkucXVlcnlTZWxlY3RvcigiLmNvbnRlbnQiKQppLnRv -U3RyaW5nCmkuc2Nyb2xsVG9wPUIuam4uelEobikKcT0xCnM9NQpicmVhawpjYXNlIDM6cT0yCmg9cApt -PUEuUnUoaCkKbD1BLnRzKGgpCkEuQzIoImNvdWxkbid0IGFkZC9yZW1vdmUgaGludCIsbSxsKQpzPTUK -YnJlYWsKY2FzZSAyOnM9MQpicmVhawpjYXNlIDU6cmV0dXJuIEEueUMobnVsbCxyKQpjYXNlIDE6cmV0 -dXJuIEEuZjMocCxyKX19KQpyZXR1cm4gQS5ESSgkYXN5bmMkaTYscil9LApDMihhLGIsYyl7dmFyIHMs -cixxLHAsbyxuLG09ImV4Y2VwdGlvbiIsbD0ic3RhY2tUcmFjZSIKaWYodC5oNi5iKGIpJiZKLlJNKGIu -cSgwLCJzdWNjZXNzIiksITEpJiZiLng0KG0pJiZiLng0KGwpKXtzPUouVTYoYikKcj1BLmsocy5xKGIs -bSkpCmM9cy5xKGIsbCkKcT1udWxsfWVsc2UgaWYoYiBpbnN0YW5jZW9mIEEuUVcpe3I9Yi5hCnE9Yi5i -fWVsc2V7cj1KLllTKGIpCnE9bnVsbH1pZihxPT1udWxsKXE9YwpzPWRvY3VtZW50CnA9cy5xdWVyeVNl -bGVjdG9yKCIucG9wdXAtcGFuZSIpCnAucXVlcnlTZWxlY3RvcigiaDIiKS5pbm5lclRleHQ9YQpvPXAu -cXVlcnlTZWxlY3RvcigicCIpCm8udG9TdHJpbmcKci50b1N0cmluZwpvLmlubmVyVGV4dD1yCm89cC5x -dWVyeVNlbGVjdG9yKCJwcmUiKQpvLnRvU3RyaW5nCm8uaW5uZXJUZXh0PUouWVMocSkKbj10LmJxLmEo -cC5xdWVyeVNlbGVjdG9yKCJhLmJvdHRvbSIpKQpCLnhuLnNMVShuLEEuWGQoImh0dHBzIiwiZ2l0aHVi -LmNvbSIsImRhcnQtbGFuZy9zZGsvaXNzdWVzL25ldyIsQS5FRihbInRpdGxlIiwiQ3VzdG9tZXItcmVw -b3J0ZWQgaXNzdWUgd2l0aCBudWxsIHNhZmV0eSBtaWdyYXRpb24gdG9vbDogIithLCJsYWJlbHMiLHUu -ZCwiYm9keSIsYSsiXG5cbkVycm9yOiAiK3IrIlxuXG5QbGVhc2UgZmlsbCBpbiB0aGUgZm9sbG93aW5n -OlxuXG4qKk5hbWUgb2YgcGFja2FnZSBiZWluZyBtaWdyYXRlZCAoaWYgcHVibGljKSoqOlxuKipXaGF0 -IEkgd2FzIGRvaW5nIHdoZW4gdGhpcyBpc3N1ZSBvY2N1cnJlZCoqOlxuKipJcyBpdCBwb3NzaWJsZSB0 -byB3b3JrIGFyb3VuZCB0aGlzIGlzc3VlKio6XG4qKkhhcyB0aGlzIGlzc3VlIGhhcHBlbmVkIGJlZm9y -ZSwgYW5kIGlmIHNvLCBob3cgb2Z0ZW4qKjpcbioqRGFydCBTREsgdmVyc2lvbioqOiAiK0EuRWoocy5n -ZXRFbGVtZW50QnlJZCgic2RrLXZlcnNpb24iKS50ZXh0Q29udGVudCkrIlxuKipBZGRpdGlvbmFsIGRl -dGFpbHMqKjpcblxuVGhhbmtzIGZvciBmaWxpbmchXG5cblN0YWNrdHJhY2U6IF9hdXRvIHBvcHVsYXRl -ZCBieSBtaWdyYXRpb24gcHJldmlldyB0b29sLl9cblxuYGBgXG4iK0EuRWooYykrIlxuYGBgXG4iXSx0 -Lk4sdC56KSkuZ25EKCkpCnM9bi5zdHlsZQpzLmRpc3BsYXk9ImluaXRpYWwiCnM9cC5zdHlsZQpzLmRp -c3BsYXk9ImluaXRpYWwiCnM9QS5FaihiKQp3aW5kb3cKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmlu -ZWQiKXdpbmRvdy5jb25zb2xlLmVycm9yKGErIjogIitzKQp3aW5kb3cKcz1BLkVqKGMpCmlmKHR5cGVv -ZiBjb25zb2xlIT0idW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS5lcnJvcihzKX0sCnQyKGEsYil7dmFy -IHMscixxLHAsbz10LmguYShBLnFjKGEuY3VycmVudFRhcmdldCkpCmEucHJldmVudERlZmF1bHQoKQpz -PW8uZ2V0QXR0cmlidXRlKCJocmVmIikKcy50b1N0cmluZwpyPUEuVXMocykKcT1BLkc2KHMpCnA9QS5h -SyhzKQppZihxIT1udWxsKUEuYWYocixxLHAsYixuZXcgQS5uVChyLHEscCkpCmVsc2UgQS5hZihyLG51 -bGwsbnVsbCxiLG5ldyBBLk5ZKHIpKX0sCkswKGEpe3ZhciBzLHIscSxwPWRvY3VtZW50LnF1ZXJ5U2Vs -ZWN0b3IoIi5wb3B1cC1wYW5lIikKcC5xdWVyeVNlbGVjdG9yKCJoMiIpLmlubmVyVGV4dD0iRmFpbGVk -IHRvIHJlcnVuIGZyb20gc291cmNlcyIKcC5xdWVyeVNlbGVjdG9yKCJwIikuaW5uZXJUZXh0PSJTb3Vy -Y2VzIGNvbnRhaW4gc3RhdGljIGFuYWx5c2lzIGVycm9yczoiCnM9cC5xdWVyeVNlbGVjdG9yKCJwcmUi -KQpzLnRvU3RyaW5nCnI9Si5FbChhLHQuZikKcT1BLkxoKHIpCnMuaW5uZXJUZXh0PW5ldyBBLmxKKHIs -cS5DKCJxVShsRC5FKSIpLmEobmV3IEEudWUoKSkscS5DKCJsSjxsRC5FLHFVPiIpKS5IKDAsIlxuIikK -cT1wLnF1ZXJ5U2VsZWN0b3IoImEuYm90dG9tIikuc3R5bGUKcS5kaXNwbGF5PSJub25lIgpzPXAuc3R5 -bGUKcy5kaXNwbGF5PSJpbml0aWFsIn0sCkdnKCl7dmFyIHM9ZG9jdW1lbnQscj10LmgKQS5EaChyLHIs -IlQiLCJxdWVyeVNlbGVjdG9yQWxsIikKcz1uZXcgQS53eihzLnF1ZXJ5U2VsZWN0b3JBbGwoIi5jb2Rl -IiksdC5SKQpzLksocyxuZXcgQS5HSCgpKX0sCmhYKGEsYixjKXtyZXR1cm4gQS5ZdyhhLGIsYyl9LApZ -dyhhLGIsYyl7dmFyIHM9MCxyPUEuRlgodC56KSxxPTEscCxvLG4sbSxsLGssaixpLGgsZwp2YXIgJGFz -eW5jJGhYPUEubHooZnVuY3Rpb24oZCxlKXtpZihkPT09MSl7cD1lCnM9cX13aGlsZSh0cnVlKXN3aXRj -aChzKXtjYXNlIDA6cT0zCms9dC5OCnM9NgpyZXR1cm4gQS5qUShBLlE2KGEsQS5FRihbInJlZ2lvbiIs -InJlZ2lvbiIsIm9mZnNldCIsQS5FaihiKV0sayxrKSx0LkcpLCRhc3luYyRoWCkKY2FzZSA2Om89ZQpr -PW8Kaj1KLlU2KGspCmk9dC5ncQpuPW5ldyBBLmQyKEEuamYoaS5hKGoucShrLCJlZGl0cyIpKSksQS5r -KGoucShrLCJleHBsYW5hdGlvbiIpKSxBLlVjKGoucShrLCJsaW5lIikpLEEuayhqLnEoaywiZGlzcGxh -eVBhdGgiKSksQS5rKGoucShrLCJ1cmlQYXRoIikpLEEuTmQoaS5hKGoucShrLCJ0cmFjZXMiKSkpKQpB -LlQxKG4pCkEuRnIoYSxiLGMpCkEueVgoIi5lZGl0LXBhbmVsIC5wYW5lbC1jb250ZW50IiwhMSkKcT0x -CnM9NQpicmVhawpjYXNlIDM6cT0yCmc9cAptPUEuUnUoZykKbD1BLnRzKGcpCkEuQzIoImNvdWxkbid0 -IGxvYWQgZWRpdCBkZXRhaWxzIixtLGwpCnM9NQpicmVhawpjYXNlIDI6cz0xCmJyZWFrCmNhc2UgNTpy -ZXR1cm4gQS55QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gQS5mMyhwLHIpfX0pCnJldHVybiBBLkRJKCRh -c3luYyRoWCxyKX0sCkc3KGEsYixjLGQsZSl7cmV0dXJuIEEuTDUoYSxiLGMsZCxlKX0sCkw1KGEsYixj -LGQsZSl7dmFyIHM9MCxyPUEuRlgodC5IKSxxLHA9MixvLG4sbSxsLGssaixpLGgKdmFyICRhc3luYyRH -Nz1BLmx6KGZ1bmN0aW9uKGYsZyl7aWYoZj09PTEpe289ZwpzPXB9d2hpbGUodHJ1ZSlzd2l0Y2gocyl7 -Y2FzZSAwOmlmKCFCLnhCLlRjKGEsIi5kYXJ0Iikpe0EuQkUoYSxBLndSKCksZCkKQS5CWChhLG51bGwp -CmlmKGUhPW51bGwpZS4kMCgpCnM9MQpicmVha31wPTQKaj10Lk4Kcz03CnJldHVybiBBLmpRKEEuUTYo -YSxBLkVGKFsiaW5saW5lIiwidHJ1ZSJdLGosaiksdC5HKSwkYXN5bmMkRzcpCmNhc2UgNzpuPWcKQS5C -RShhLEEuWWYobiksZCkKQS5mRyhiLGMpCm09QS5VcyhhKQpBLkJYKG0sYikKaWYoZSE9bnVsbCllLiQw -KCkKcD0yCnM9NgpicmVhawpjYXNlIDQ6cD0zCmg9bwpsPUEuUnUoaCkKaz1BLnRzKGgpCkEuQzIoImNv -dWxkbid0IGxvYWQgZGFydCBmaWxlICIrYSxsLGspCnM9NgpicmVhawpjYXNlIDM6cz0yCmJyZWFrCmNh -c2UgNjpjYXNlIDE6cmV0dXJuIEEueUMocSxyKQpjYXNlIDI6cmV0dXJuIEEuZjMobyxyKX19KQpyZXR1 -cm4gQS5ESSgkYXN5bmMkRzcscil9LApHZSgpe3ZhciBzPTAscj1BLkZYKHQueikscT0xLHAsbyxuLG0s -bCxrLGosaSxoCnZhciAkYXN5bmMkR2U9QS5seihmdW5jdGlvbihhLGIpe2lmKGE9PT0xKXtwPWIKcz1x -fXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDppPSIvX3ByZXZpZXcvbmF2aWdhdGlvblRyZWUuanNv -biIKcT0zCnM9NgpyZXR1cm4gQS5qUShBLlE2KGksQi5DTSx0LlcpLCRhc3luYyRHZSkKY2FzZSA2Oms9 -YgprLnRvU3RyaW5nCm89awprPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5uYXYtdHJlZSIpCmsudG9T -dHJpbmcKbj1rCkoubDUobiwiIikKaz1BLm1LKG8pCiQuSVI9awpBLnRYKG4saywhMCkKcT0xCnM9NQpi -cmVhawpjYXNlIDM6cT0yCmg9cAptPUEuUnUoaCkKbD1BLnRzKGgpCkEuQzIoImNvdWxkbid0IGxvYWQg -bmF2aWdhdGlvbiB0cmVlIixtLGwpCnM9NQpicmVhawpjYXNlIDI6cz0xCmJyZWFrCmNhc2UgNTpyZXR1 +Cm49ci4kMig3LDIzMSkKcC4kMyhuLCIwOSIsNykKcS4kMyhuLCJAIiw2OCkKcS4kMyhuLGosMTM4KQpx +LiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKcS4kMyhyLiQyKDgsOCksIl0iLDUpCm49ci4kMig5LDIz +NSkKcS4kMyhuLG0sMTEpCnEuJDMobixsLDE2KQpxLiQzKG4saiwyMzQpCnEuJDMobixpLDE3MikKcS4k +MyhuLGgsMjA1KQpuPXIuJDIoMTYsMjM1KQpxLiQzKG4sbSwxMSkKcS4kMyhuLGwsMTcpCnEuJDMobixq +LDIzNCkKcS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49ci4kMigxNywyMzUpCnEuJDMobixtLDEx +KQpxLiQzKG4saiw5KQpxLiQzKG4saSwxNzIpCnEuJDMobixoLDIwNSkKbj1yLiQyKDEwLDIzNSkKcS4k +MyhuLG0sMTEpCnEuJDMobixsLDE4KQpxLiQzKG4saiwyMzQpCnEuJDMobixpLDE3MikKcS4kMyhuLGgs +MjA1KQpuPXIuJDIoMTgsMjM1KQpxLiQzKG4sbSwxMSkKcS4kMyhuLGwsMTkpCnEuJDMobixqLDIzNCkK +cS4kMyhuLGksMTcyKQpxLiQzKG4saCwyMDUpCm49ci4kMigxOSwyMzUpCnEuJDMobixtLDExKQpxLiQz +KG4saiwyMzQpCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPXIuJDIoMTEsMjM1KQpxLiQzKG4s +bSwxMSkKcS4kMyhuLGosMTApCnEuJDMobixpLDE3MikKcS4kMyhuLGgsMjA1KQpuPXIuJDIoMTIsMjM2 +KQpxLiQzKG4sbSwxMikKcS4kMyhuLGksMTIpCnEuJDMobixoLDIwNSkKbj1yLiQyKDEzLDIzNykKcS4k +MyhuLG0sMTMpCnEuJDMobixpLDEzKQpwLiQzKHIuJDIoMjAsMjQ1KSwiYXoiLDIxKQpuPXIuJDIoMjEs +MjQ1KQpwLiQzKG4sImF6IiwyMSkKcC4kMyhuLCIwOSIsMjEpCnEuJDMobiwiKy0uIiwyMSkKcmV0dXJu +IGd9LApVQihhLGIsYyxkLGUpe3ZhciBzLHIscSxwLG89JC52WigpCmZvcihzPWI7czxjOysrcyl7aWYo +IShkPj0wJiZkPG8ubGVuZ3RoKSlyZXR1cm4gQS5PSChvLGQpCnI9b1tkXQpxPUIueEIuVyhhLHMpXjk2 +CnA9cltxPjk1PzMxOnFdCmQ9cCYzMQpCLk5tLlk1KGUscD4+PjUscyl9cmV0dXJuIGR9LApSeChhKXtp +ZihhLmI9PT03JiZCLnhCLm4oYS5hLCJwYWNrYWdlIikmJmEuYzw9MClyZXR1cm4gQS5mRihhLmEsYS5l +LGEuZikKcmV0dXJuLTF9LApmRihhLGIsYyl7dmFyIHMscixxCmZvcihzPWIscj0wO3M8YzsrK3Mpe3E9 +Qi54Qi5PKGEscykKaWYocT09PTQ3KXJldHVybiByIT09MD9zOi0xCmlmKHE9PT0zN3x8cT09PTU4KXJl +dHVybi0xCnJ8PXFeNDZ9cmV0dXJuLTF9LApiVShhLGIsYyl7dmFyIHMscixxLHAsbyxuLG0KZm9yKHM9 +YS5sZW5ndGgscj0wLHE9MDtxPHM7KytxKXtwPUIueEIuVyhhLHEpCm89Qi54Qi5XKGIsYytxKQpuPXBe +bwppZihuIT09MCl7aWYobj09PTMyKXttPW98bgppZig5Nzw9bSYmbTw9MTIyKXtyPTMyCmNvbnRpbnVl +fX1yZXR1cm4tMX19cmV0dXJuIHJ9LApXRjpmdW5jdGlvbiBXRihhLGIpe3RoaXMuYT1hCnRoaXMuYj1i +fSwKaVA6ZnVuY3Rpb24gaVAoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmNrOmZ1bmN0aW9uIGNrKCl7 +fSwKWFM6ZnVuY3Rpb24gWFMoKXt9LApDNjpmdW5jdGlvbiBDNihhKXt0aGlzLmE9YX0sCkV6OmZ1bmN0 +aW9uIEV6KCl7fSwKRjpmdW5jdGlvbiBGKCl7fSwKQVQ6ZnVuY3Rpb24gQVQoYSxiLGMsZCl7dmFyIF89 +dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZH0sCmJKOmZ1bmN0aW9uIGJKKGEsYixjLGQsZSxmKXt2 +YXIgXz10aGlzCl8uZT1hCl8uZj1iCl8uYT1jCl8uYj1kCl8uYz1lCl8uZD1mfSwKZVk6ZnVuY3Rpb24g +ZVkoYSxiLGMsZCxlKXt2YXIgXz10aGlzCl8uZj1hCl8uYT1iCl8uYj1jCl8uYz1kCl8uZD1lfSwKbXA6 +ZnVuY3Rpb24gbXAoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZH0sCnVi +OmZ1bmN0aW9uIHViKGEpe3RoaXMuYT1hfSwKZHM6ZnVuY3Rpb24gZHMoYSl7dGhpcy5hPWF9LApsajpm +dW5jdGlvbiBsaihhKXt0aGlzLmE9YX0sClVWOmZ1bmN0aW9uIFVWKGEpe3RoaXMuYT1hfSwKazU6ZnVu +Y3Rpb24gazUoKXt9LApLWTpmdW5jdGlvbiBLWSgpe30sCnA6ZnVuY3Rpb24gcChhKXt0aGlzLmE9YX0s +CkNEOmZ1bmN0aW9uIENEKGEpe3RoaXMuYT1hfSwKYUU6ZnVuY3Rpb24gYUUoYSxiLGMpe3RoaXMuYT1h +CnRoaXMuYj1iCnRoaXMuYz1jfSwKY1g6ZnVuY3Rpb24gY1goKXt9LApBbjpmdW5jdGlvbiBBbigpe30s +Ck4zOmZ1bmN0aW9uIE4zKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLiR0aT1jfSwKYzg6ZnVu +Y3Rpb24gYzgoKXt9LApNaDpmdW5jdGlvbiBNaCgpe30sClpkOmZ1bmN0aW9uIFpkKCl7fSwKTTpmdW5j +dGlvbiBNKGEpe3RoaXMuYT1hfSwKbjE6ZnVuY3Rpb24gbjEoYSl7dGhpcy5hPWF9LApjUzpmdW5jdGlv +biBjUyhhKXt0aGlzLmE9YX0sClZDOmZ1bmN0aW9uIFZDKGEpe3RoaXMuYT1hfSwKSlQ6ZnVuY3Rpb24g +SlQoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkRuOmZ1bmN0aW9uIERuKGEsYixjLGQsZSxmLGcpe3Zh +ciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWQKXy5lPWUKXy5mPWYKXy5yPWcKXy56PV8ueT1f +Lng9Xy53PSR9LApSWjpmdW5jdGlvbiBSWigpe30sCk1FOmZ1bmN0aW9uIE1FKGEsYil7dGhpcy5hPWEK +dGhpcy5iPWJ9LAp5NTpmdW5jdGlvbiB5NShhKXt0aGlzLmE9YX0sClBFOmZ1bmN0aW9uIFBFKGEsYixj +KXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCnlJOmZ1bmN0aW9uIHlJKGEpe3RoaXMuYT1hfSwK +YzY6ZnVuY3Rpb24gYzYoKXt9LApxZDpmdW5jdGlvbiBxZCgpe30sClVmOmZ1bmN0aW9uIFVmKGEsYixj +LGQsZSxmLGcsaCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZApfLmU9ZQpfLmY9Zgpf +LnI9ZwpfLnc9aApfLng9bnVsbH0sCnFlOmZ1bmN0aW9uIHFlKGEsYixjLGQsZSxmLGcpe3ZhciBfPXRo +aXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWQKXy5lPWUKXy5mPWYKXy5yPWcKXy56PV8ueT1fLng9Xy53 +PSR9LAp4Mygpe3JldHVybiB3aW5kb3d9LApacigpe3JldHVybiBkb2N1bWVudH0sCko2KGEpe3ZhciBz +PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKQppZihhIT1udWxsKUIueG4uc0xVKHMsYSkKcmV0dXJu +IHN9LApMaihhKXtyZXR1cm4gQ1NTLmVzY2FwZShhKX0sClU5KGEsYixjKXt2YXIgcyxyPWRvY3VtZW50 +LmJvZHkKci50b1N0cmluZwpzPXQuYWMKcz1uZXcgQS5VNShuZXcgQS5lNyhCLlJZLnI2KHIsYSxiLGMp +KSxzLkMoImEyKGxELkUpIikuYShuZXcgQS5DdigpKSxzLkMoIlU1PGxELkU+IikpCnJldHVybiB0Lmgu +YShzLmdyOChzKSl9LApyUyhhKXt2YXIgcyxyLHE9ImVsZW1lbnQgdGFnIHVuYXZhaWxhYmxlIgp0cnl7 +cz1KLllFKGEpCnMuZ25zKGEpCnE9cy5nbnMoYSl9Y2F0Y2gocil7fXJldHVybiBxfSwKUjYoYSxiKXt2 +YXIgcyxyLHE9YS5jbGFzc0xpc3QKZm9yKHM9Yi5sZW5ndGgscj0wO3I8Yi5sZW5ndGg7Yi5sZW5ndGg9 +PT1zfHwoMCxBLmxrKShiKSwrK3IpcS5hZGQoYltyXSl9LApKRShhLGIsYyxkLGUpe3ZhciBzPUEuYUYo +bmV3IEEudk4oYyksdC5CKQppZihzIT1udWxsJiYhMClKLmRaKGEsYixzLCExKQpyZXR1cm4gbmV3IEEu +eEMoYSxiLHMsITEsZS5DKCJ4QzwwPiIpKX0sClR3KGEpe3ZhciBzPUEuSjYobnVsbCkscj10LkYuYSh3 +aW5kb3cubG9jYXRpb24pCnM9bmV3IEEuSlEobmV3IEEubWsocyxyKSkKcy5DWShhKQpyZXR1cm4gc30s +CnFEKGEsYixjLGQpe3QuaC5hKGEpCkEubihiKQpBLm4oYykKdC5jci5hKGQpCnJldHVybiEwfSwKbloo +YSxiLGMsZCl7dmFyIHMscixxCnQuaC5hKGEpCkEubihiKQpBLm4oYykKcz10LmNyLmEoZCkuYQpyPXMu +YQpCLnhuLnNMVShyLGMpCnE9ci5ob3N0bmFtZQpzPXMuYgppZighKHE9PXMuaG9zdG5hbWUmJnIucG9y +dD09PXMucG9ydCYmci5wcm90b2NvbD09PXMucHJvdG9jb2wpKWlmKHE9PT0iIilpZihyLnBvcnQ9PT0i +Iil7cz1yLnByb3RvY29sCnM9cz09PSI6Inx8cz09PSIifWVsc2Ugcz0hMQplbHNlIHM9ITEKZWxzZSBz +PSEwCnJldHVybiBzfSwKQmwoKXt2YXIgcz10Lk4scj1BLnRNKEIuUXgscykscT1BLlFJKFsiVEVNUExB +VEUiXSx0LnMpLHA9dC5kRy5hKG5ldyBBLklBKCkpCnM9bmV3IEEuY3QocixBLkxzKHMpLEEuTHMocyks +QS5McyhzKSxudWxsKQpzLkNZKG51bGwsbmV3IEEubEooQi5ReCxwLHQuZHYpLHEsbnVsbCkKcmV0dXJu +IHN9LApxYyhhKXt2YXIgcwppZihhPT1udWxsKXJldHVybiBudWxsCmlmKCJwb3N0TWVzc2FnZSIgaW4g +YSl7cz1BLlAxKGEpCnJldHVybiBzfWVsc2UgcmV0dXJuIHQuY2guYShhKX0sClAxKGEpe2lmKGE9PT13 +aW5kb3cpcmV0dXJuIHQuY2kuYShhKQplbHNlIHJldHVybiBuZXcgQS5kVygpfSwKYUYoYSxiKXt2YXIg +cz0kLlgzCmlmKHM9PT1CLk5VKXJldHVybiBhCnJldHVybiBzLlB5KGEsYil9LApxRTpmdW5jdGlvbiBx +RSgpe30sCkdoOmZ1bmN0aW9uIEdoKCl7fSwKZlk6ZnVuY3Rpb24gZlkoKXt9LApyWjpmdW5jdGlvbiBy +Wigpe30sCkF6OmZ1bmN0aW9uIEF6KCl7fSwKUVA6ZnVuY3Rpb24gUVAoKXt9LApueDpmdW5jdGlvbiBu +eCgpe30sCm9KOmZ1bmN0aW9uIG9KKCl7fSwKaWQ6ZnVuY3Rpb24gaWQoKXt9LApRRjpmdW5jdGlvbiBR +Rigpe30sCk5oOmZ1bmN0aW9uIE5oKCl7fSwKYWU6ZnVuY3Rpb24gYWUoKXt9LApJQjpmdW5jdGlvbiBJ +Qigpe30sCm43OmZ1bmN0aW9uIG43KCl7fSwKd3o6ZnVuY3Rpb24gd3ooYSxiKXt0aGlzLmE9YQp0aGlz +LiR0aT1ifSwKY3Y6ZnVuY3Rpb24gY3YoKXt9LApDdjpmdW5jdGlvbiBDdigpe30sCmVhOmZ1bmN0aW9u +IGVhKCl7fSwKRDA6ZnVuY3Rpb24gRDAoKXt9LApoSDpmdW5jdGlvbiBoSCgpe30sCmg0OmZ1bmN0aW9u +IGg0KCl7fSwKYnI6ZnVuY3Rpb24gYnIoKXt9LApWYjpmdW5jdGlvbiBWYigpe30sCmZKOmZ1bmN0aW9u +IGZKKCl7fSwKd2E6ZnVuY3Rpb24gd2EoKXt9LApTZzpmdW5jdGlvbiBTZygpe30sCnU4OmZ1bmN0aW9u +IHU4KCl7fSwKQWo6ZnVuY3Rpb24gQWooKXt9LAplNzpmdW5jdGlvbiBlNyhhKXt0aGlzLmE9YX0sCktW +OmZ1bmN0aW9uIEtWKCl7fSwKQkg6ZnVuY3Rpb24gQkgoKXt9LApTTjpmdW5jdGlvbiBTTigpe30sCndW +OmZ1bmN0aW9uIHdWKCl7fSwKbHA6ZnVuY3Rpb24gbHAoKXt9LApUYjpmdW5jdGlvbiBUYigpe30sCkl2 +OmZ1bmN0aW9uIEl2KCl7fSwKV1A6ZnVuY3Rpb24gV1AoKXt9LAp5WTpmdW5jdGlvbiB5WSgpe30sCnc2 +OmZ1bmN0aW9uIHc2KCl7fSwKSzU6ZnVuY3Rpb24gSzUoKXt9LApDbTpmdW5jdGlvbiBDbSgpe30sCkNR +OmZ1bmN0aW9uIENRKCl7fSwKdzQ6ZnVuY3Rpb24gdzQoKXt9LApyaDpmdW5jdGlvbiByaCgpe30sCmNm +OmZ1bmN0aW9uIGNmKCl7fSwKaTc6ZnVuY3Rpb24gaTcoYSl7dGhpcy5hPWF9LApTeTpmdW5jdGlvbiBT +eShhKXt0aGlzLmE9YX0sCktTOmZ1bmN0aW9uIEtTKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApBMzpm +dW5jdGlvbiBBMyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKSTQ6ZnVuY3Rpb24gSTQoYSl7dGhpcy5h +PWF9LApGazpmdW5jdGlvbiBGayhhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9LApSTzpmdW5jdGlvbiBS +TyhhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uJHRpPWR9LApDcTpmdW5jdGlv +biBDcShhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uJHRpPWR9LAp4QzpmdW5j +dGlvbiB4QyhhLGIsYyxkLGUpe3ZhciBfPXRoaXMKXy5iPWEKXy5jPWIKXy5kPWMKXy5lPWQKXy4kdGk9 +ZX0sCnZOOmZ1bmN0aW9uIHZOKGEpe3RoaXMuYT1hfSwKSlE6ZnVuY3Rpb24gSlEoYSl7dGhpcy5hPWF9 +LApHbTpmdW5jdGlvbiBHbSgpe30sCnZEOmZ1bmN0aW9uIHZEKGEpe3RoaXMuYT1hfSwKVXY6ZnVuY3Rp +b24gVXYoYSl7dGhpcy5hPWF9LApFZzpmdW5jdGlvbiBFZyhhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIK +dGhpcy5jPWN9LAptNjpmdW5jdGlvbiBtNigpe30sCkVvOmZ1bmN0aW9uIEVvKCl7fSwKV2s6ZnVuY3Rp +b24gV2soKXt9LApjdDpmdW5jdGlvbiBjdChhLGIsYyxkLGUpe3ZhciBfPXRoaXMKXy5lPWEKXy5hPWIK +Xy5iPWMKXy5jPWQKXy5kPWV9LApJQTpmdW5jdGlvbiBJQSgpe30sCk93OmZ1bmN0aW9uIE93KCl7fSwK +Vzk6ZnVuY3Rpb24gVzkoYSxiLGMpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPS0xCl8uZD1udWxs +Cl8uJHRpPWN9LApkVzpmdW5jdGlvbiBkVygpe30sCm1rOmZ1bmN0aW9uIG1rKGEsYil7dGhpcy5hPWEK +dGhpcy5iPWJ9LApLbzpmdW5jdGlvbiBLbyhhKXt0aGlzLmE9YQp0aGlzLmI9MH0sCmZtOmZ1bmN0aW9u +IGZtKGEpe3RoaXMuYT1hfSwKWTg6ZnVuY3Rpb24gWTgoKXt9LApucTpmdW5jdGlvbiBucSgpe30sCkFy +OmZ1bmN0aW9uIEFyKCl7fSwKdEQ6ZnVuY3Rpb24gdEQoKXt9LAp1ZjpmdW5jdGlvbiB1Zigpe30sCmlK +OmZ1bmN0aW9uIGlKKCl7fSwKRTI6ZnVuY3Rpb24gRTIoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmpn +OmZ1bmN0aW9uIGpnKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApCZjpmdW5jdGlvbiBCZihhLGIpe3Ro +aXMuYT1hCnRoaXMuYj1ifSwKQXM6ZnVuY3Rpb24gQXMoKXt9LApHRTpmdW5jdGlvbiBHRShhKXt0aGlz +LmE9YX0sCk43OmZ1bmN0aW9uIE43KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LAp1UTpmdW5jdGlvbiB1 +USgpe30sCmhGOmZ1bmN0aW9uIGhGKCl7fSwKUjQoYSxiLGMsZCl7dmFyIHMscixxCkEucDgoYikKdC5q +LmEoZCkKaWYoYil7cz1bY10KQi5ObS5GVihzLGQpCmQ9c31yPXQuegpxPUEuUFcoSi5NMShkLEEudzAo +KSxyKSwhMCxyKQp0LlkuYShhKQpyZXR1cm4gQS53WShBLkVrKGEscSxudWxsKSl9LApEbShhLGIsYyl7 +dmFyIHMKdHJ5e2lmKE9iamVjdC5pc0V4dGVuc2libGUoYSkmJiFPYmplY3QucHJvdG90eXBlLmhhc093 +blByb3BlcnR5LmNhbGwoYSxiKSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsYix7dmFsdWU6Y30pCnJl +dHVybiEwfX1jYXRjaChzKXt9cmV0dXJuITF9LApPbShhLGIpe2lmKE9iamVjdC5wcm90b3R5cGUuaGFz +T3duUHJvcGVydHkuY2FsbChhLGIpKXJldHVybiBhW2JdCnJldHVybiBudWxsfSwKd1koYSl7aWYoYT09 +bnVsbHx8dHlwZW9mIGE9PSJzdHJpbmcifHx0eXBlb2YgYT09Im51bWJlciJ8fEEuclEoYSkpcmV0dXJu +IGEKaWYoYSBpbnN0YW5jZW9mIEEuRTQpcmV0dXJuIGEuYQppZihBLlI5KGEpKXJldHVybiBhCmlmKHQu +YWsuYihhKSlyZXR1cm4gYQppZihhIGluc3RhbmNlb2YgQS5pUClyZXR1cm4gQS5vMihhKQppZih0Llku +YihhKSlyZXR1cm4gQS5oRShhLCIkZGFydF9qc0Z1bmN0aW9uIixuZXcgQS5EVigpKQpyZXR1cm4gQS5o +RShhLCJfJGRhcnRfanNPYmplY3QiLG5ldyBBLlBDKCQua0koKSkpfSwKaEUoYSxiLGMpe3ZhciBzPUEu +T20oYSxiKQppZihzPT1udWxsKXtzPWMuJDEoYSkKQS5EbShhLGIscyl9cmV0dXJuIHN9LApkVShhKXt2 +YXIgcyxyCmlmKGE9PW51bGx8fHR5cGVvZiBhPT0ic3RyaW5nInx8dHlwZW9mIGE9PSJudW1iZXIifHx0 +eXBlb2YgYT09ImJvb2xlYW4iKXJldHVybiBhCmVsc2UgaWYoYSBpbnN0YW5jZW9mIE9iamVjdCYmQS5S +OShhKSlyZXR1cm4gYQplbHNlIGlmKGEgaW5zdGFuY2VvZiBPYmplY3QmJnQuYWsuYihhKSlyZXR1cm4g +YQplbHNlIGlmKGEgaW5zdGFuY2VvZiBEYXRlKXtzPUEuSVooYS5nZXRUaW1lKCkpCmlmKE1hdGguYWJz +KHMpPD04NjRlMTMpcj0hMQplbHNlIHI9ITAKaWYocilBLnYoQS54WSgiRGF0ZVRpbWUgaXMgb3V0c2lk +ZSB2YWxpZCByYW5nZTogIitzLG51bGwpKQpBLmNiKCExLCJpc1V0YyIsdC55KQpyZXR1cm4gbmV3IEEu +aVAocywhMSl9ZWxzZSBpZihhLmNvbnN0cnVjdG9yPT09JC5rSSgpKXJldHVybiBhLm8KZWxzZSByZXR1 +cm4gQS5ORChhKX0sCk5EKGEpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBBLmlRKGEsJC53 +KCksbmV3IEEuUVMoKSkKaWYoYSBpbnN0YW5jZW9mIEFycmF5KXJldHVybiBBLmlRKGEsJC5SOCgpLG5l +dyBBLm5wKCkpCnJldHVybiBBLmlRKGEsJC5SOCgpLG5ldyBBLlV0KCkpfSwKaVEoYSxiLGMpe3ZhciBz +PUEuT20oYSxiKQppZihzPT1udWxsfHwhKGEgaW5zdGFuY2VvZiBPYmplY3QpKXtzPWMuJDEoYSkKQS5E +bShhLGIscyl9cmV0dXJuIHN9LApEVjpmdW5jdGlvbiBEVigpe30sClBDOmZ1bmN0aW9uIFBDKGEpe3Ro +aXMuYT1hfSwKUVM6ZnVuY3Rpb24gUVMoKXt9LApucDpmdW5jdGlvbiBucCgpe30sClV0OmZ1bmN0aW9u +IFV0KCl7fSwKRTQ6ZnVuY3Rpb24gRTQoYSl7dGhpcy5hPWF9LApyNzpmdW5jdGlvbiByNyhhKXt0aGlz +LmE9YX0sClR6OmZ1bmN0aW9uIFR6KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCnZnOmZ1bmN0aW9u +IHZnKCl7fSwKbmQ6ZnVuY3Rpb24gbmQoKXt9LApLZTpmdW5jdGlvbiBLZShhKXt0aGlzLmE9YX0sCmhp +OmZ1bmN0aW9uIGhpKCl7fSwKamYoYSl7dmFyIHMscixxLHAKaWYoYT09bnVsbClzPW51bGwKZWxzZXtz +PUEuUUkoW10sdC5mQSkKZm9yKHI9Si5JVChhKTtyLkcoKTspe3E9ci5nbCgpCnA9Si5VNihxKQpzLnB1 +c2gobmV3IEEuU2UoQS5rKHAucShxLCJkZXNjcmlwdGlvbiIpKSxBLmsocC5xKHEsImhyZWYiKSkpKX19 +cmV0dXJuIHN9LApOZChhKXt2YXIgcyxyCmlmKGE9PW51bGwpcz1udWxsCmVsc2V7cz1BLlFJKFtdLHQu +aGgpCmZvcihyPUouSVQoYSk7ci5HKCk7KXMucHVzaChBLk5mKHIuZ2woKSkpfXJldHVybiBzfSwKTmYo +YSl7dmFyIHM9Si5VNihhKSxyPUEuayhzLnEoYSwiZGVzY3JpcHRpb24iKSkscT1BLlFJKFtdLHQuYUop +CmZvcihzPUouSVQodC5XLmEocy5xKGEsImVudHJpZXMiKSkpO3MuRygpOylxLnB1c2goQS5SaihzLmds +KCkpKQpyZXR1cm4gbmV3IEEueUQocixxKX0sClJqKGEpe3ZhciBzLHI9Si5VNihhKSxxPUEuayhyLnEo +YSwiZGVzY3JpcHRpb24iKSkscD1BLmsoci5xKGEsImZ1bmN0aW9uIikpLG89ci5xKGEsImxpbmsiKQpp +ZihvPT1udWxsKW89bnVsbAplbHNle3M9Si5VNihvKQpvPW5ldyBBLk1sKEEuayhzLnEobywiaHJlZiIp +KSxBLlVjKHMucShvLCJsaW5lIikpLEEuayhzLnEobywicGF0aCIpKSl9cj10LmJNLmEoci5xKGEsImhp +bnRBY3Rpb25zIikpCnI9cj09bnVsbD9udWxsOkouTTEocixuZXcgQS5hTigpLHQuSikuYnIoMCkKcmV0 +dXJuIG5ldyBBLndiKHEscCxvLHI9PW51bGw/Qi5kbjpyKX0sCmQyOmZ1bmN0aW9uIGQyKGEsYixjLGQs +ZSxmKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mfSwKU2U6ZnVu +Y3Rpb24gU2UoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCk1sOmZ1bmN0aW9uIE1sKGEsYixjKXt0aGlz +LmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCnlEOmZ1bmN0aW9uIHlEKGEsYil7dGhpcy5hPWEKdGhpcy5i +PWJ9LAp3YjpmdW5jdGlvbiB3YihhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8u +ZD1kfSwKYU46ZnVuY3Rpb24gYU4oKXt9LApiMDpmdW5jdGlvbiBiMCgpe30sCndSKCl7cmV0dXJuIG5l +dyBBLnFwKCIiLCIiLCIiLEIuRHgpfSwKWWYoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrPUEuayhhLnEo +MCwicmVnaW9ucyIpKSxqPUEuayhhLnEoMCwibmF2aWdhdGlvbkNvbnRlbnQiKSksaT1BLmsoYS5xKDAs +InNvdXJjZUNvZGUiKSksaD1BLkZsKHQuTix0LmY0KQpmb3Iocz10LkcuYShhLnEoMCwiZWRpdHMiKSks +cz1zLmdQdShzKSxzPXMuZ0Eocykscj10LmsscT10LmdpO3MuRygpOyl7cD1zLmdsKCkKbz1wLmEKbj1B +LlFJKFtdLHEpCmZvcihwPUouSVQoci5hKHAuYikpO3AuRygpOyl7bT1wLmdsKCkKbD1KLlU2KG0pCm4u +cHVzaChuZXcgQS5qOChBLlVjKGwucShtLCJsaW5lIikpLEEuayhsLnEobSwiZXhwbGFuYXRpb24iKSks +QS5VYyhsLnEobSwib2Zmc2V0IikpKSl9aC5ZNSgwLG8sbil9cmV0dXJuIG5ldyBBLnFwKGssaixpLGgp +fSwKajg6ZnVuY3Rpb24gajgoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKcXA6ZnVu +Y3Rpb24gcXAoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZH0sCm1ROmZ1 +bmN0aW9uIG1RKCl7fSwKSXEoKXtCLkJaLkIoZG9jdW1lbnQsIkRPTUNvbnRlbnRMb2FkZWQiLG5ldyBB +LmUoKSkKQi5vbC5CKHdpbmRvdywicG9wc3RhdGUiLG5ldyBBLkwoKSl9LApreihhKXt2YXIgcyxyPXQu +aC5hKGEucGFyZW50Tm9kZSkucXVlcnlTZWxlY3RvcigiOnNjb3BlID4gdWwiKSxxPXIuc3R5bGUscD1C +LkNELnpRKHIub2Zmc2V0SGVpZ2h0KQpxLm1heEhlaWdodD0iIitwKjIrInB4IgpxPUoucUYoYSkKcD1x +LiR0aQpzPXAuQygifigxKT8iKS5hKG5ldyBBLld4KHIsYSkpCnQuWi5hKG51bGwpCkEuSkUocS5hLHEu +YixzLCExLHAuYyl9LAp5WChhLGIpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGY9InF1ZXJ5 +U2VsZWN0b3JBbGwiLGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcihhKQplLnRvU3RyaW5nCnM9dC5oCkEu +RGgocyxzLCJUIixmKQpyPXQuUgpxPW5ldyBBLnd6KGUucXVlcnlTZWxlY3RvckFsbCgiLm5hdi1saW5r +IikscikKZm9yKHA9ci5DKCJhNzxsRC5FPiIpLG89bmV3IEEuYTcocSxxLmdrKHEpLHApLG49dC5aLG09 +ci5DKCJsRC5FIik7by5HKCk7KXtsPW8uZApsPUoucUYobD09bnVsbD9tLmEobCk6bCkKaz1sLiR0aQpq +PWsuQygifigxKT8iKS5hKG5ldyBBLkhvKGIpKQpuLmEobnVsbCkKQS5KRShsLmEsbC5iLGosITEsay5j +KX1BLkRoKHMscywiVCIsZikKaT1uZXcgQS53eihlLnF1ZXJ5U2VsZWN0b3JBbGwoIi5yZWdpb24iKSxy +KQppZighaS5nbDAoaSkpe289ZS5xdWVyeVNlbGVjdG9yKCJ0YWJsZVtkYXRhLXBhdGhdIikKby50b1N0 +cmluZwpoPW8uZ2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IEEuU3kobmV3IEEuaTcobykpLk9VKCJwYXRo +IikpCmZvcihvPW5ldyBBLmE3KGksaS5nayhpKSxwKTtvLkcoKTspe2w9by5kCmlmKGw9PW51bGwpbD1t +LmEobCkKaz1KLnFGKGwpCmo9ay4kdGkKbD1qLkMoIn4oMSk/IikuYShuZXcgQS5JQyhsLGgpKQpuLmEo +bnVsbCkKQS5KRShrLmEsay5iLGwsITEsai5jKX19QS5EaChzLHMsIlQiLGYpCmc9bmV3IEEud3ooZS5x +dWVyeVNlbGVjdG9yQWxsKCIuYWRkLWhpbnQtbGluayIpLHIpCmZvcihlPW5ldyBBLmE3KGcsZy5nayhn +KSxwKTtlLkcoKTspe3M9ZS5kCnM9Si5xRihzPT1udWxsP20uYShzKTpzKQpyPXMuJHRpCnIuQygifigx +KT8iKS5hKEEuaVMoKSkKbi5hKG51bGwpCkEuSkUocy5hLHMuYixBLmlTKCksITEsci5jKX19LApRNihh +LGIsYyl7dmFyIHM9bmV3IFhNTEh0dHBSZXF1ZXN0KCkKQi5EdC5lbyhzLCJHRVQiLEEuUTQoYSxiKSwh +MCkKcy5zZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi9qc29uOyBjaGFy +c2V0PVVURi04IikKcmV0dXJuIEEuTFUocyxudWxsLGMpfSwKdHkoYSxiKXt2YXIgcz1uZXcgWE1MSHR0 +cFJlcXVlc3QoKSxyPXQuTgpCLkR0LmVvKHMsIlBPU1QiLEEuUTQoYSxBLkZsKHIscikpLCEwKQpzLnNl +dFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRG +LTgiKQpyZXR1cm4gQS5MVShzLGIsdC5HKX0sCkxVKGEsYixjKXtyZXR1cm4gQS5UZyhhLGIsYyxjLkMo +IjA/IikpfSwKVGcoYSxiLGMsZCl7dmFyIHM9MCxyPUEuRlgoZCkscSxwPTIsbyxuLG0sbCxrLGosaSxo +LGcsZgp2YXIgJGFzeW5jJExVPUEubHooZnVuY3Rpb24oZSxhMCl7aWYoZT09PTEpe289YTAKcz1wfXdo +aWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDppPW5ldyBBLlpmKG5ldyBBLnZzKCQuWDMsdC5hbyksdC5i +aikKaD10Lmd4Cmc9aC5hKG5ldyBBLmZDKGksYSkpCnQuWi5hKG51bGwpCmw9dC5wCkEuSkUoYSwibG9h +ZCIsZywhMSxsKQpBLkpFKGEsImVycm9yIixoLmEoaS5nWUooKSksITEsbCkKYS5zZW5kKGI9PW51bGw/ +bnVsbDpCLkN0Lk9CKGIsbnVsbCkpCnA9NApzPTcKcmV0dXJuIEEualEoaS5hLCRhc3luYyRMVSkKY2Fz +ZSA3OnA9MgpzPTYKYnJlYWsKY2FzZSA0OnA9MwpmPW8Kbj1BLnRzKGYpCmg9YS5yZWFkeVN0YXRlCmlm +KGg9PT00JiZhLnN0YXR1cz09PTApdGhyb3cgQS5iKEEuVEcoIkVycm9yIHJlYWNoaW5nIG1pZ3JhdGlv +biBwcmV2aWV3IHNlcnZlciIsIlRoaXMgdXN1YWxseSBoYXBwZW5zIGJlY2F1c2UgdGhlIG1pZ3JhdGlv +biBwcmV2aWV3IHNlcnZlciBoYXMgZXhpdGVkLiAgRm9yXG5leGFtcGxlIGl0IG1heSBoYXZlIGJlZW4g +YWJvcnRlZCB3aXRoIEN0cmwtQywgb3IgeW91IG1heSBoYXZlIGNvbXBsZXRlZCB0aGlzXG5taWdyYXRp +b24sIG9yIGFuIGV4Y2VwdGlvbiBtYXkgaGF2ZSBvY2N1cnJlZC4gIFBsZWFzZSBjaGVjayB0aGUgY29u +c29sZSB3aGVyZVxueW91IGludm9rZWQgYGRhcnQgbWlncmF0ZWAgdG8gdmVyaWZ5IHRoYXQgdGhlIHBy +ZXZpZXcgc2VydmVyIGlzIHN0aWxsIHJ1bm5pbmcuXG4iKSkKZWxzZXttPW5ldyBBLmxKKEEuUUkoWyJy +ZWFkeVN0YXRlPSIraCwicmVzcG9uc2VUZXh0PSIrQi5DdC5PQihhLnJlc3BvbnNlVGV4dCxudWxsKSwi +cmVzcG9uc2VUeXBlPSIrQi5DdC5PQihhLnJlc3BvbnNlVHlwZSxudWxsKSwicmVzcG9uc2VVcmw9IitC +LkN0Lk9CKGEucmVzcG9uc2VVUkwsbnVsbCksInN0YXR1cz0iK0EuRWooYS5zdGF0dXMpLCJzdGF0dXNU +ZXh0PSIrQi5DdC5PQihhLnN0YXR1c1RleHQsbnVsbCldLHQucyksdC5kRy5hKG5ldyBBLlRtKCkpLHQu +ZHYpLkgoMCwiLCAiKQp0aHJvdyBBLmIoQS5UbCgiRXJyb3IgcmVhY2hpbmcgbWlncmF0aW9uIHByZXZp +ZXcgc2VydmVyOiAiK0EuRWoobSksbikpfXM9NgpicmVhawpjYXNlIDM6cz0yCmJyZWFrCmNhc2UgNjpp +ZihhLnN0YXR1cz09PTQwMSl0aHJvdyBBLmIoQS5URygiVW5hdXRob3JpemVkIHJlc3BvbnNlIGZyb20g +bWlncmF0aW9uIHByZXZpZXcgc2VydmVyIiwiVGhlIG1pZ3JhdGlvbiBwcmV2aWV3IHNlcnZlciBoYXMg +ZGV0ZWN0ZWQgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBhdXRoVG9rZW4gaW5cbnlvdXIgVVJMIGFuZCB0 +aGUgdG9rZW4gdGhhdCB3YXMgZ2VuZXJhdGVkIGF0IHRoZSB0aW1lIHRoYXQgYGRhcnQgbWlncmF0ZWAg +d2FzXG5ydW4uICBIYXZlIHlvdSByZXN0YXJ0ZWQgdGhlIG1pZ3JhdGlvbiBzZXJ2ZXIgcmVjZW50bHk/ +ICBJZiBzbywgeW91J2xsIG5lZWQgdG9cbmNoZWNrIGl0cyBvdXRwdXQgZm9yIGEgZnJlc2ggVVJMLCBh +bmQgdXNlIHRoYXQgVVJMIHRvIHBlcmZvcm0geW91ciBtaWdyYXRpb24uXG4iKSkKaD1hLnJlc3BvbnNl +VGV4dApoLnRvU3RyaW5nCmo9Qi5DdC5wVygwLGgsbnVsbCkKaWYoYS5zdGF0dXM9PT0yMDApe3E9Yy5D +KCIwPyIpLmEoaikKcz0xCmJyZWFrfWVsc2V7ai50b1N0cmluZwp0aHJvdyBBLmIoail9Y2FzZSAxOnJl +dHVybiBBLnlDKHEscikKY2FzZSAyOnJldHVybiBBLmYzKG8scil9fSkKcmV0dXJuIEEuREkoJGFzeW5j +JExVLHIpfSwKYUsoYSl7dmFyIHM9QS5oSyhhKS5naFkoKS5xKDAsImxpbmUiKQpyZXR1cm4gcz09bnVs +bD9udWxsOkEuSHAocyxudWxsKX0sCkc2KGEpe3ZhciBzPUEuaEsoYSkuZ2hZKCkucSgwLCJvZmZzZXQi +KQpyZXR1cm4gcz09bnVsbD9udWxsOkEuSHAocyxudWxsKX0sCmk2KGEpe3JldHVybiBBLm5XKHQuVi5h +KGEpKX0sCm5XKGEpe3ZhciBzPTAscj1BLkZYKHQueikscT0xLHAsbyxuLG0sbCxrLGosaSxoCnZhciAk +YXN5bmMkaTY9QS5seihmdW5jdGlvbihiLGMpe2lmKGI9PT0xKXtwPWMKcz1xfXdoaWxlKHRydWUpc3dp +dGNoKHMpe2Nhc2UgMDppPXQuaC5hKEEucWMoYS5jdXJyZW50VGFyZ2V0KSkuZ2V0QXR0cmlidXRlKCJo +cmVmIikKaS50b1N0cmluZwpvPWkKYS5wcmV2ZW50RGVmYXVsdCgpCnE9MwppPWRvY3VtZW50Cm49Qi5D +RC56UShpLnF1ZXJ5U2VsZWN0b3IoIi5jb250ZW50Iikuc2Nyb2xsVG9wKQpzPTYKcmV0dXJuIEEualEo +QS50eShvLG51bGwpLCRhc3luYyRpNikKY2FzZSA2Oms9dC5GLmEod2luZG93LmxvY2F0aW9uKS5wYXRo +bmFtZQprLnRvU3RyaW5nCnM9NwpyZXR1cm4gQS5qUShBLkc3KGssbnVsbCxudWxsLCExLG51bGwpLCRh +c3luYyRpNikKY2FzZSA3OmkuYm9keS5jbGFzc0xpc3QuYWRkKCJuZWVkcy1yZXJ1biIpCmk9aS5xdWVy +eVNlbGVjdG9yKCIuY29udGVudCIpCmkudG9TdHJpbmcKaS5zY3JvbGxUb3A9Qi5qbi56UShuKQpxPTEK +cz01CmJyZWFrCmNhc2UgMzpxPTIKaD1wCm09QS5SdShoKQpsPUEudHMoaCkKQS5DMigiY291bGRuJ3Qg +YWRkL3JlbW92ZSBoaW50IixtLGwpCnM9NQpicmVhawpjYXNlIDI6cz0xCmJyZWFrCmNhc2UgNTpyZXR1 cm4gQS55QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gQS5mMyhwLHIpfX0pCnJldHVybiBBLkRJKCRhc3lu -YyRHZSxyKX0sCnFPKGEpe3ZhciBzLHIscT1hLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLHA9Qi5DRC56 -USgkLmZpKCkub2Zmc2V0SGVpZ2h0KSxvPXdpbmRvdy5pbm5lckhlaWdodApvLnRvU3RyaW5nCnM9Qi5D -RC56USgkLkRXKCkub2Zmc2V0SGVpZ2h0KQpyPXEuYm90dG9tCnIudG9TdHJpbmcKaWYocj5vLShzKzE0 -KSlKLmRoKGEpCmVsc2V7bz1xLnRvcApvLnRvU3RyaW5nCmlmKG88cCsxNClKLmRoKGEpfX0sCmZHKGEs -Yil7dmFyIHMscixxLHAsbwppZihhIT1udWxsKXtzPWRvY3VtZW50CnI9cy5nZXRFbGVtZW50QnlJZCgi -byIrQS5FaihhKSkKcT1zLnF1ZXJ5U2VsZWN0b3IoIi5saW5lLSIrQS5FaihiKSkKaWYociE9bnVsbCl7 -QS5xTyhyKQpKLmRSKHIpLmkoMCwidGFyZ2V0Iil9ZWxzZSBpZihxIT1udWxsKXtzPXEucGFyZW50RWxl -bWVudApzLnRvU3RyaW5nCkEucU8ocyl9aWYocSE9bnVsbClKLmRSKHQuaC5hKHEucGFyZW50Tm9kZSkp -LmkoMCwiaGlnaGxpZ2h0Iil9ZWxzZXtzPWRvY3VtZW50CnA9dC5oCkEuRGgocCxwLCJUIiwicXVlcnlT -ZWxlY3RvckFsbCIpCnM9cy5xdWVyeVNlbGVjdG9yQWxsKCIubGluZS1ubyIpCm89bmV3IEEud3oocyx0 -LlIpCmlmKG8uZ2sobyk9PT0wKXJldHVybgpBLnFPKHAuYShCLnQ1Lmd0SChzKSkpfX0sCmFmKGEsYixj -LGQsZSl7dmFyIHMscixxLHA9dC5GLG89QS5HNihwLmEod2luZG93LmxvY2F0aW9uKS5ocmVmKSxuPUEu -YUsocC5hKHdpbmRvdy5sb2NhdGlvbikuaHJlZikKaWYobyE9bnVsbCl7cz1kb2N1bWVudC5nZXRFbGVt -ZW50QnlJZCgibyIrQS5FaihvKSkKaWYocyE9bnVsbClKLmRSKHMpLlIoMCwidGFyZ2V0Iil9aWYobiE9 -bnVsbCl7cj1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIubGluZS0iK0EuRWoobikpCmlmKHIhPW51bGwp -e3E9ci5wYXJlbnRFbGVtZW50CnEudG9TdHJpbmcKSi5kUihxKS5SKDAsImhpZ2hsaWdodCIpfX1pZihh -PT1wLmEod2luZG93LmxvY2F0aW9uKS5wYXRobmFtZSl7QS5mRyhiLGMpCmUuJDAoKX1lbHNle2EudG9T -dHJpbmcKQS5HNyhhLGIsYyxkLGUpfX0sClE0KGEsYil7dmFyIHMscixxPUEuaEsoYSkscD1BLkZsKHQu -Tix0LmRrKQpmb3Iocz1xLmdoWSgpLHM9cy5nUHUocykscz1zLmdBKHMpO3MuRygpOyl7cj1zLmdsKCkK -cC5ZNSgwLHIuYSxyLmIpfWZvcihzPWIuZ1B1KGIpLHM9cy5nQShzKTtzLkcoKTspe3I9cy5nbCgpCnAu -WTUoMCxyLmEsci5iKX1wLlk1KDAsImF1dGhUb2tlbiIsJC5VRSgpKQpyZXR1cm4gcS5ubSgwLHApLmdu -RCgpfSwKVDEoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaT0kLmhMKCkKaS50b1N0cmluZwpKLmw1 -KGksIiIpCmlmKGE9PW51bGwpe3M9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgicCIpCkIuTHQuc2E0KHMs -IlNlZSBkZXRhaWxzIGFib3V0IGEgcHJvcG9zZWQgZWRpdC4iKQpCLkx0LnNQKHMsQS5RSShbInBsYWNl -aG9sZGVyIl0sdC5zKSkKaS5hcHBlbmRDaGlsZChzKQpCLkx0LkZGKHMpCnJldHVybn1yPWEuZApyLnRv -U3RyaW5nCnE9JC5uVSgpCnA9cS56ZihyKQpvPWEuYgpuPWRvY3VtZW50Cm09bi5xdWVyeVNlbGVjdG9y -KCIucm9vdCIpLnRleHRDb250ZW50Cm0udG9TdHJpbmcKbD1xLkhQKHIsQi54Qi5iUyhtKSkKaz1hLmMK -aj1uLmNyZWF0ZUVsZW1lbnQoInAiKQppLmFwcGVuZENoaWxkKGopCmouYXBwZW5kQ2hpbGQobi5jcmVh -dGVUZXh0Tm9kZShBLkVqKG8pKyIgYXQgIikpCnI9YS5lCnIudG9TdHJpbmcKcT10Lk4KcT1BLko2KEEu -UTQocixBLkVGKFsibGluZSIsSi5ZUyhrKV0scSxxKSkpCnEuYXBwZW5kQ2hpbGQobi5jcmVhdGVUZXh0 -Tm9kZShsKyI6IitBLkVqKGspKyIuIikpCmouYXBwZW5kQ2hpbGQocSkKSi5kaChqKQpBLkNDKGEsaSxw -KQpBLkZ6KGEsaSl9LApMSChhMSxhMixhMyl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixl -LGQsYyxiLGEsYTA9JC55UCgpCmEwLnRvU3RyaW5nCkoubDUoYTAsIiIpCnM9YTIuZ2soYTIpCmlmKHM8 -MikkLkRaKCkuaW5uZXJUZXh0PSJQcm9wb3NlZCBFZGl0cyIKZWxzZXtyPWEyLmdQdShhMikuTjAoMCww -LG5ldyBBLkVFKCksdC5TKQokLkRaKCkuaW5uZXJUZXh0PUEuRWoocikrIiBQcm9wb3NlZCBFZGl0cyJ9 -aWYocz09PTApe3E9ZG9jdW1lbnQKcD1xLmNyZWF0ZUVsZW1lbnQoInAiKQphMC5hcHBlbmRDaGlsZChw -KQpwLmFwcGVuZENoaWxkKHEuY3JlYXRlVGV4dE5vZGUoIk5vIHByb3Bvc2VkIGVkaXRzIikpfWVsc2Ug -Zm9yKGEwPWEyLmdQdShhMiksYTA9YTAuZ0EoYTApLHE9dC5GLG89dC5OLG49dC5RLG09bi5DKCJ+KDEp -PyIpLGw9dC5aLG49bi5jO2EwLkcoKTspe2s9YTAuZ2woKQpqPWRvY3VtZW50CnA9ai5jcmVhdGVFbGVt -ZW50KCJwIikKaT0kLnlQKCkKaS5hcHBlbmRDaGlsZChwKQpwLmFwcGVuZENoaWxkKGouY3JlYXRlVGV4 -dE5vZGUoQS5FaihrLmEpKyI6IikpCmg9ai5jcmVhdGVFbGVtZW50KCJ1bCIpCmkuYXBwZW5kQ2hpbGQo -aCkKZm9yKGs9Si5JVChrLmIpO2suRygpOyl7aT1rLmdsKCkKZz1qLmNyZWF0ZUVsZW1lbnQoImxpIikK -aC5hcHBlbmRDaGlsZChnKQpKLmRSKGcpLmkoMCwiZWRpdCIpCmY9ai5jcmVhdGVFbGVtZW50KCJhIikK -Zy5hcHBlbmRDaGlsZChmKQpmLmNsYXNzTGlzdC5hZGQoImVkaXQtbGluayIpCmU9aS5jCmQ9QS5Faihl -KQpmLnNldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBBLlN5KG5ldyBBLmk3KGYpKS5PVSgib2Zmc2V0Iiks -ZCkKYz1pLmEKYj1BLkVqKGMpCmYuc2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IEEuU3kobmV3IEEuaTco -ZikpLk9VKCJsaW5lIiksYikKZi5hcHBlbmRDaGlsZChqLmNyZWF0ZVRleHROb2RlKCJsaW5lICIrYikp -CmE9cS5hKHdpbmRvdy5sb2NhdGlvbikucGF0aG5hbWUKYS50b1N0cmluZwpmLnNldEF0dHJpYnV0ZSgi -aHJlZiIsQS5RNChhLEEuRUYoWyJsaW5lIixiLCJvZmZzZXQiLGRdLG8sbykpKQpkPW0uYShuZXcgQS5Q -TihlLGMsYTEpKQpsLmEobnVsbCkKQS5KRShmLCJjbGljayIsZCwhMSxuKQpnLmFwcGVuZENoaWxkKGou -Y3JlYXRlVGV4dE5vZGUoIjogIitBLkVqKGkuYikpKX19aWYoYTMpQS5UMShudWxsKX0sCkZyKGEsYixj -KXt2YXIgcyxyLHE9QS5oSyhCLkV4LmdEcih0LkYuYSh3aW5kb3cubG9jYXRpb24pKStBLkVqKGEpKSxw -PUEuRmwodC5OLHQuZGspCmlmKGIhPW51bGwpcC5ZNSgwLCJvZmZzZXQiLEEuRWooYikpCmlmKGMhPW51 -bGwpcC5ZNSgwLCJsaW5lIixBLkVqKGMpKQpwLlk1KDAsImF1dGhUb2tlbiIsJC5VRSgpKQpxPXEubm0o -MCxwKQpwPXdpbmRvdy5oaXN0b3J5CnM9dC56CnI9cS5nbkQoKQpwLnB1c2hTdGF0ZShuZXcgQS5CZihb -XSxbXSkuUHYoQS5GbChzLHMpKSwiIixyKX0sCkVuKGEpe3ZhciBzLHI9ZG9jdW1lbnQucXVlcnlTZWxl -Y3RvcigiLnJvb3QiKS50ZXh0Q29udGVudApyLnRvU3RyaW5nCnM9cisiLyIKaWYoQi54Qi5uKGEscykp -cmV0dXJuIEIueEIueW4oYSxzLmxlbmd0aCkKZWxzZSByZXR1cm4gYX0sCk90KGEpe3N3aXRjaChhLnIp -e2Nhc2UgQi5jdzpicmVhawpjYXNlIEIuV0Q6YS5yPUIuWGoKYnJlYWsKY2FzZSBCLlhqOmEucj1CLldE -CmJyZWFrCmNhc2UgQi5kYzp0aHJvdyBBLmIoQS5QVigiRmlsZSAiK0EuRWooYS5jKSsiIHNob3VsZCBu -b3QgaGF2ZSBpbmRldGVybWluYXRlIG1pZ3JhdGlvbiBzdGF0dXMiKSkKZGVmYXVsdDpicmVha319LAp0 -YShhLGIpe3ZhciBzLHI9ImNoZWNrX2JveCIscT0idGl0bGUiLHA9Im9wdGVkLW91dCIsbz0ibWlncmF0 -aW5nIgpzd2l0Y2goYil7Y2FzZSBCLmN3OmEuaW5uZXJUZXh0PXIKcz1KLllFKGEpCnMuZ1AoYSkuaSgw -LCJhbHJlYWR5LW1pZ3JhdGVkIikKcy5nUChhKS5pKDAsImRpc2FibGVkIikKYS5zZXRBdHRyaWJ1dGUo -cSwiQWxyZWFkeSBtaWdyYXRlZCIpCmJyZWFrCmNhc2UgQi5XRDphLmlubmVyVGV4dD1yCnM9Si5ZRShh -KQpzLmdQKGEpLlIoMCxwKQpzLmdQKGEpLmkoMCxvKQphLnNldEF0dHJpYnV0ZShxLCJNaWdyYXRpbmcg -dG8gbnVsbCBzYWZldHkiKQpicmVhawpjYXNlIEIuWGo6YS5pbm5lclRleHQ9ImNoZWNrX2JveF9vdXRs -aW5lX2JsYW5rIgpzPUouWUUoYSkKcy5nUChhKS5SKDAsbykKcy5nUChhKS5pKDAscCkKYS5zZXRBdHRy -aWJ1dGUocSwiT3B0aW5nIG91dCBvZiBudWxsIHNhZmV0eSIpCmJyZWFrCmRlZmF1bHQ6YS5pbm5lclRl -eHQ9ImluZGV0ZXJtaW5hdGVfY2hlY2tfYm94IgpzPUouWUUoYSkKcy5nUChhKS5SKDAsbykKcy5nUChh -KS5pKDAscCkKYS5zZXRBdHRyaWJ1dGUocSwiTWl4ZWQgc3RhdHVzZXMgb2YgJ21pZ3JhdGluZycgYW5k -ICdvcHRpbmcgb3V0JyIpCmJyZWFrfX0sCnhuKGEsYil7dmFyIHMscj0iZGlzYWJsZWQiLHE9Yi5nTCgp -CkEudGEoYSxxKQppZihiLmM9PT0kLkQ5KCkuaW5uZXJUZXh0KXtpZihiIGluc3RhbmNlb2YgQS5jRCl7 -cz1iLncKcy50b1N0cmluZwpzPSFzfWVsc2Ugcz0hMQppZihzKXthLnRvU3RyaW5nCkouZFIoYSkuaSgw -LHIpfWVsc2V7YS50b1N0cmluZwpKLmRSKGEpLlIoMCxyKX1BLnRhKCQuYzAoKSxxKX19LApCWChhLGIp -e3ZhciBzLHIscSxwPXt9CnAuYT1hCmE9QS5FbihhKQpwLmE9YQpzPSQuRDkoKQpzLnRvU3RyaW5nCkou -ZHIocyxhKQpzPWRvY3VtZW50CnI9dC5oCkEuRGgocixyLCJUIiwicXVlcnlTZWxlY3RvckFsbCIpCnM9 -bmV3IEEud3oocy5xdWVyeVNlbGVjdG9yQWxsKCIubmF2LXBhbmVsIC5uYXYtbGluayIpLHQuUikKcy5L -KHMsbmV3IEEuVlMocCkpCnM9JC5JUgpxPXM9PW51bGw/bnVsbDpBLnl3KHMscC5hKQppZihxPT1udWxs -KXtwPSQuYk4oKQpwLnRvU3RyaW5nCkouZFIocCkuUigwLCJ2aXNpYmxlIil9ZWxzZXtwPSQuYk4oKQpw -LnRvU3RyaW5nCkouZFIocCkuaSgwLCJ2aXNpYmxlIikKQS50YSgkLmMwKCkscS5nTCgpKX19LApBUihh -LGIpe3ZhciBzLHIscT1iLmIKaWYocT09PSQpQS55aygicGFyZW50IikKcz10LmgKcj1zLmEocy5hKGEu -cGFyZW50Tm9kZSkucGFyZW50Tm9kZSkKQS54bihyLnF1ZXJ5U2VsZWN0b3IoIjpzY29wZSA+IC5zdGF0 -dXMtaWNvbiIpLHEpCkEuQVIocixxKX0sCmJMKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbD0iOnNjb3Bl -ID4gLnN0YXR1cy1pY29uIgpmb3Iocz1iLmQscj1zLmxlbmd0aCxxPXQuaCxwPTA7cDxzLmxlbmd0aDtz -Lmxlbmd0aD09PXJ8fCgwLEEubGspKHMpLCsrcCl7bz1zW3BdCmEudG9TdHJpbmcKbj1vLmMKbi50b1N0 -cmluZwptPWEucXVlcnlTZWxlY3RvcignW2RhdGEtbmFtZSo9IicrQS5MaihuKSsnIl0nKQppZihvIGlu -c3RhbmNlb2YgQS52dCl7QS5iTChtLG8pCkEueG4obS5xdWVyeVNlbGVjdG9yKGwpLGIpfWVsc2UgQS54 -bihxLmEobS5wYXJlbnROb2RlKS5xdWVyeVNlbGVjdG9yKGwpLG8pfX0sCkJFKGEsYixjKXt2YXIgcz0i -LnJlZ2lvbnMiLHI9ZG9jdW1lbnQscT1yLnF1ZXJ5U2VsZWN0b3IocykKcS50b1N0cmluZwpyPXIucXVl -cnlTZWxlY3RvcigiLmNvZGUiKQpyLnRvU3RyaW5nCkoudEgocSxiLmEsJC5LRygpKQpKLnRIKHIsYi5i -LCQuS0coKSkKQS5MSChhLGIuZCxjKQppZihiLmMubGVuZ3RoPDJlNSlBLkdnKCkKQS55WCgiLmNvZGUi -LCEwKQpBLnlYKHMsITApfSwKdFgoYTAsYTEsYTIpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxn -LGYsZSxkPSJtYXRlcmlhbC1pY29ucyIsYz0ic3RhdHVzLWljb24iLGI9ZG9jdW1lbnQsYT1iLmNyZWF0 -ZUVsZW1lbnQoInVsIikKYTAuYXBwZW5kQ2hpbGQoYSkKZm9yKHM9YTEubGVuZ3RoLHI9dC5OLHE9dC5a -LHA9MDtwPGExLmxlbmd0aDthMS5sZW5ndGg9PT1zfHwoMCxBLmxrKShhMSksKytwKXtvPWExW3BdCm49 -Yi5jcmVhdGVFbGVtZW50KCJsaSIpCmEuYXBwZW5kQ2hpbGQobikKaWYobyBpbnN0YW5jZW9mIEEudnQp -e209Si5ZRShuKQptLmdQKG4pLmkoMCwiZGlyIikKbD1vLmMKbC50b1N0cmluZwpuLnNldEF0dHJpYnV0 -ZSgiZGF0YS0iK25ldyBBLlN5KG5ldyBBLmk3KG4pKS5PVSgibmFtZSIpLGwpCms9Yi5jcmVhdGVFbGVt -ZW50KCJzcGFuIikKbi5hcHBlbmRDaGlsZChrKQpsPUouWUUoaykKbC5nUChrKS5pKDAsImFycm93IikK -bC5zaGYoaywiJiN4MjVCQzsiKQpqPWIuY3JlYXRlRWxlbWVudCgic3BhbiIpCkouZFIoaikuaSgwLGQp -CmouaW5uZXJUZXh0PSJmb2xkZXJfb3BlbiIKbi5hcHBlbmRDaGlsZChqKQpsPW8uYQpsLnRvU3RyaW5n -Cm4uYXBwZW5kQ2hpbGQoYi5jcmVhdGVUZXh0Tm9kZShsKSkKbD1vLmQKbC50b1N0cmluZwpBLnRYKG4s -bCwhMCkKaT1iLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpsPUouWUUoaSkKbC5nUChpKS5pKDAsZCkKaS5p -bm5lclRleHQ9ImluZGV0ZXJtaW5hdGVfY2hlY2tfYm94IgpsLmdQKGkpLmkoMCxjKQpBLnhuKGksbykK -bD1sLmdWbChpKQpoPWwuJHRpCmc9aC5DKCJ+KDEpPyIpLmEobmV3IEEuVEQobyxuLGkpKQpxLmEobnVs -bCkKQS5KRShsLmEsbC5iLGcsITEsaC5jKQptLm1LKG4saSxqKQpBLmt6KGspfWVsc2UgaWYobyBpbnN0 -YW5jZW9mIEEuY0Qpe2k9Yi5jcmVhdGVFbGVtZW50KCJzcGFuIikKbT1KLllFKGkpCm0uZ1AoaSkuaSgw -LGQpCmkuaW5uZXJUZXh0PSIiCm0uZ1AoaSkuaSgwLGMpCmw9by53CmwudG9TdHJpbmcKaWYoIWwpbS5n -UChpKS5pKDAsImRpc2FibGVkIikKQS54bihpLG8pCmlmKGwpe209bS5nVmwoaSkKbD1tLiR0aQpoPWwu -QygifigxKT8iKS5hKG5ldyBBLklmKG8saSxuKSkKcS5hKG51bGwpCkEuSkUobS5hLG0uYixoLCExLGwu -Yyl9bi5hcHBlbmRDaGlsZChpKQptPWIuY3JlYXRlRWxlbWVudCgic3BhbiIpCkouZFIobSkuaSgwLGQp -Cm0uaW5uZXJUZXh0PSJpbnNlcnRfZHJpdmVfZmlsZSIKbi5hcHBlbmRDaGlsZChtKQpmPWIuY3JlYXRl -RWxlbWVudCgiYSIpCm4uYXBwZW5kQ2hpbGQoZikKbT1KLllFKGYpCm0uZ1AoZikuaSgwLCJuYXYtbGlu -ayIpCmw9by5jCmwudG9TdHJpbmcKZi5zZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgQS5TeShuZXcgQS5p -NyhmKSkuT1UoIm5hbWUiKSxsKQpsPW8uZApsLnRvU3RyaW5nCmYuc2V0QXR0cmlidXRlKCJocmVmIixB -LlE0KGwsQS5GbChyLHIpKSkKbD1vLmEKbC50b1N0cmluZwpmLmFwcGVuZENoaWxkKGIuY3JlYXRlVGV4 -dE5vZGUobCkpCm09bS5nVmwoZikKbD1tLiR0aQpoPWwuQygifigxKT8iKS5hKG5ldyBBLnRCKCkpCnEu -YShudWxsKQpBLkpFKG0uYSxtLmIsaCwhMSxsLmMpCmw9by5lCmwudG9TdHJpbmcKaWYobD4wKXtlPWIu -Y3JlYXRlRWxlbWVudCgic3BhbiIpCm4uYXBwZW5kQ2hpbGQoZSkKSi5kUihlKS5pKDAsImVkaXQtY291 -bnQiKQppZihsPT09MSltPSJwcm9wb3NlZCBlZGl0IgplbHNlIG09InByb3Bvc2VkIGVkaXRzIgplLnNl -dEF0dHJpYnV0ZSgidGl0bGUiLCIiK2wrIiAiK20pCmUuYXBwZW5kQ2hpbGQoYi5jcmVhdGVUZXh0Tm9k -ZShCLmpuWyJbIl0obCkpKX19fX0sCnV6KGEsYixjKXt2YXIgcz1kb2N1bWVudCxyPXMuY3JlYXRlRWxl -bWVudCgiYnV0dG9uIikscT10LlEscD1xLkMoIn4oMSk/IikuYShuZXcgQS5tMihhLGMpKQp0LlouYShu -dWxsKQpBLkpFKHIsImNsaWNrIixwLCExLHEuYykKcT1BLk9YKGEuYSkKcS50b1N0cmluZwpyLmFwcGVu -ZENoaWxkKHMuY3JlYXRlVGV4dE5vZGUocSkpCmIuYXBwZW5kQ2hpbGQocil9LApGeihhLGIpe3ZhciBz -LHIscSxwLG8sbixtLGwsayxqLGksaD1hLmEKaWYoaD09bnVsbClyZXR1cm4KYi50b1N0cmluZwpzPWRv -Y3VtZW50CnI9cy5jcmVhdGVFbGVtZW50KCJwIikKcT1iLmFwcGVuZENoaWxkKHIpCnI9cy5jcmVhdGVF -bGVtZW50KCJzcGFuIikKcD10LnMKSi5NdShyLEEuUUkoWyJ0eXBlLWRlc2NyaXB0aW9uIl0scCkpCnIu -YXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiQWN0aW9ucyIpKQpxLmFwcGVuZENoaWxkKHIpCnEu -YXBwZW5kQ2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiOiIpKQpvPXMuY3JlYXRlRWxlbWVudCgicCIpCmIu -YXBwZW5kQ2hpbGQobykKZm9yKHI9aC5sZW5ndGgsbj10Lk8sbT0wO208aC5sZW5ndGg7aC5sZW5ndGg9 -PT1yfHwoMCxBLmxrKShoKSwrK20pe2w9aFttXQprPXMuY3JlYXRlRWxlbWVudCgiYSIpCm8uYXBwZW5k -Q2hpbGQoaykKaj1sLmEKai50b1N0cmluZwprLmFwcGVuZENoaWxkKHMuY3JlYXRlVGV4dE5vZGUoaikp -Cmo9bC5iCmoudG9TdHJpbmcKay5zZXRBdHRyaWJ1dGUoImhyZWYiLGopCmo9bi5hKEEuUUkoWyJhZGQt -aGludC1saW5rIiwiYmVmb3JlLWFwcGx5IiwiYnV0dG9uIl0scCkpCmk9Si5kUihrKQppLlYxKDApCmku -RlYoMCxqKX19LApDQyhhNCxhNSxhNil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQs -YyxiLGEsYTAsYTEsYTIsYTMKZm9yKHM9YTQuZixyPXMubGVuZ3RoLHE9dC5zLHA9dC5PLG89MDtvPHMu -bGVuZ3RoO3MubGVuZ3RoPT09cnx8KDAsQS5saykocyksKytvKXtuPXNbb10KYTUudG9TdHJpbmcKbT1k -b2N1bWVudApsPW0uY3JlYXRlRWxlbWVudCgicCIpCms9cC5hKEEuUUkoWyJ0cmFjZSJdLHEpKQpqPUou -ZFIobCkKai5WMSgwKQpqLkZWKDAsaykKaT1hNS5hcHBlbmRDaGlsZChsKQpsPW0uY3JlYXRlRWxlbWVu -dCgic3BhbiIpCms9cC5hKEEuUUkoWyJ0eXBlLWRlc2NyaXB0aW9uIl0scSkpCmo9Si5kUihsKQpqLlYx -KDApCmouRlYoMCxrKQprPW4uYQprLnRvU3RyaW5nCmwuYXBwZW5kQ2hpbGQobS5jcmVhdGVUZXh0Tm9k -ZShrKSkKaS5hcHBlbmRDaGlsZChsKQppLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoIjoiKSkK -bD1tLmNyZWF0ZUVsZW1lbnQoInVsIikKaz1wLmEoQS5RSShbInRyYWNlIl0scSkpCmo9Si5kUihsKQpq -LlYxKDApCmouRlYoMCxrKQpoPWkuYXBwZW5kQ2hpbGQobCkKZm9yKGw9bi5iLGs9bC5sZW5ndGgsZz0w -O2c8bC5sZW5ndGg7bC5sZW5ndGg9PT1rfHwoMCxBLmxrKShsKSwrK2cpe2Y9bFtnXQplPW0uY3JlYXRl -RWxlbWVudCgibGkiKQpoLmFwcGVuZENoaWxkKGUpCmQ9bS5jcmVhdGVFbGVtZW50KCJzcGFuIikKYz1w -LmEoQS5RSShbImZ1bmN0aW9uIl0scSkpCmo9Si5kUihkKQpqLlYxKDApCmouRlYoMCxjKQpjPWYuYgpB -LldqKGQsYz09bnVsbD8idW5rbm93biI6YykKZS5hcHBlbmRDaGlsZChkKQpiPWYuYwppZihiIT1udWxs -KXtlLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoIiAoIikpCmE9Yi5iCmEwPW0uY3JlYXRlRWxl -bWVudCgiYSIpCmEwLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoQS5FaihiLmMpKyI6IitBLkVq -KGEpKSkKZD1iLmEKZC50b1N0cmluZwphMC5zZXRBdHRyaWJ1dGUoImhyZWYiLGQpCmEwLmNsYXNzTGlz -dC5hZGQoIm5hdi1saW5rIikKZS5hcHBlbmRDaGlsZChhMCkKZS5hcHBlbmRDaGlsZChtLmNyZWF0ZVRl -eHROb2RlKCIpIikpfWUuYXBwZW5kQ2hpbGQobS5jcmVhdGVUZXh0Tm9kZSgiOiAiKSkKZD1mLmEKQS5X -aihlLGQ9PW51bGw/InVua25vd24iOmQpCmQ9Zi5kCmlmKGQubGVuZ3RoIT09MCl7Yz1tLmNyZWF0ZUVs -ZW1lbnQoInAiKQphMT1wLmEoQS5RSShbImRyYXdlciIsImJlZm9yZS1hcHBseSJdLHEpKQpqPUouZFIo -YykKai5WMSgwKQpqLkZWKDAsYTEpCmEyPWUuYXBwZW5kQ2hpbGQoYykKZm9yKGM9ZC5sZW5ndGgsYTM9 -MDthMzxkLmxlbmd0aDtkLmxlbmd0aD09PWN8fCgwLEEubGspKGQpLCsrYTMpQS51eihkW2EzXSxhMixi -KX19fX0sClVzKGEpe3JldHVybiBCLnhCLnRnKGEsIj8iKT9CLnhCLk5qKGEsMCxCLnhCLk9ZKGEsIj8i -KSk6YX0sClRHKGEsYil7cmV0dXJuIG5ldyBBLlFXKGEsYil9LAp5dyhhLGIpe3ZhciBzLHIscSxwLG8K -Zm9yKHM9YS5sZW5ndGgscj0wO3I8YS5sZW5ndGg7YS5sZW5ndGg9PT1zfHwoMCxBLmxrKShhKSwrK3Ip -e3E9YVtyXQppZihxIGluc3RhbmNlb2YgQS52dCl7cD1xLmQKcC50b1N0cmluZwpvPUEueXcocCxiKQpp -ZihvIT1udWxsKXJldHVybiBvfWVsc2UgaWYocS5jPT09YilyZXR1cm4gcX1yZXR1cm4gbnVsbH0sCldq -KGEsYil7dmFyIHMscixxLHA9QS5RSShiLnNwbGl0KCIuIiksdC5zKSxvPUIuTm0uZ3RIKHApLG49ZG9j -dW1lbnQKYS5hcHBlbmRDaGlsZChuLmNyZWF0ZVRleHROb2RlKG8pKQpmb3Iobz1BLnFDKHAsMSxudWxs -LHQuTikscz1vLiR0aSxvPW5ldyBBLmE3KG8sby5nayhvKSxzLkMoImE3PGFMLkU+IikpLHI9Si5ZRShh -KSxzPXMuQygiYUwuRSIpO28uRygpOyl7cT1vLmQKaWYocT09bnVsbClxPXMuYShxKQpyLm56KGEsImJl -Zm9yZWVuZCIsIiYjODIwMzsuIixudWxsLG51bGwpCmEuYXBwZW5kQ2hpbGQobi5jcmVhdGVUZXh0Tm9k -ZShxKSl9fSwKZTpmdW5jdGlvbiBlKCl7fSwKVlc6ZnVuY3Rpb24gVlcoYSxiLGMpe3RoaXMuYT1hCnRo -aXMuYj1iCnRoaXMuYz1jfSwKb1o6ZnVuY3Rpb24gb1ooKXt9LApqcjpmdW5jdGlvbiBqcigpe30sCnFs -OmZ1bmN0aW9uIHFsKCl7fSwKeTg6ZnVuY3Rpb24geTgoKXt9LApIaTpmdW5jdGlvbiBIaSgpe30sCkJU -OmZ1bmN0aW9uIEJUKCl7fSwKUFk6ZnVuY3Rpb24gUFkoKXt9LApMOmZ1bmN0aW9uIEwoKXt9LApXeDpm -dW5jdGlvbiBXeChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKSG86ZnVuY3Rpb24gSG8oYSl7dGhpcy5h -PWF9LApJQzpmdW5jdGlvbiBJQyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKZkM6ZnVuY3Rpb24gZkMo -YSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sClRtOmZ1bmN0aW9uIFRtKCl7fSwKblQ6ZnVuY3Rpb24gblQo -YSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKTlk6ZnVuY3Rpb24gTlkoYSl7dGhpcy5h -PWF9LAp1ZTpmdW5jdGlvbiB1ZSgpe30sCkdIOmZ1bmN0aW9uIEdIKCl7fSwKRUU6ZnVuY3Rpb24gRUUo -KXt9LApQTjpmdW5jdGlvbiBQTihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApRTDpm -dW5jdGlvbiBRTChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKVlM6ZnVuY3Rpb24gVlMoYSl7dGhpcy5h -PWF9LApURDpmdW5jdGlvbiBURChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApJZjpm -dW5jdGlvbiBJZihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LAp0QjpmdW5jdGlvbiB0 -Qigpe30sCm0yOmZ1bmN0aW9uIG0yKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApRVzpmdW5jdGlvbiBR -VyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKWEE6ZnVuY3Rpb24gWEEoKXt9LApacyhhKXt2YXIgcyxy -LHE9Si5VNihhKQppZihBLnAyKEEuayhxLnEoYSwidHlwZSIpKSk9PT1CLlkyKXtzPUEuayhxLnEoYSwi -bmFtZSIpKQpyPUEuayhxLnEoYSwicGF0aCIpKQpxPXEucShhLCJzdWJ0cmVlIikKcT1uZXcgQS52dChx -PT1udWxsP251bGw6QS5tSyh0LlcuYShxKSkscyxyKQpxLkxWKCkKcmV0dXJuIHF9ZWxzZXtzPUEuayhx -LnEoYSwibmFtZSIpKQpyPUEuayhxLnEoYSwicGF0aCIpKQpyZXR1cm4gbmV3IEEuY0QoQS5rKHEucShh -LCJocmVmIikpLEEuVWMocS5xKGEsImVkaXRDb3VudCIpKSxBLk00KHEucShhLCJ3YXNFeHBsaWNpdGx5 -T3B0ZWRPdXQiKSksQS52QihBLlVjKHEucShhLCJtaWdyYXRpb25TdGF0dXMiKSkpLEEuTTQocS5xKGEs -Im1pZ3JhdGlvblN0YXR1c0NhbkJlQ2hhbmdlZCIpKSxzLHIpfX0sCm1LKGEpe3ZhciBzLHI9QS5RSShb -XSx0LmZoKQpmb3Iocz1KLklUKGEpO3MuRygpOylyLnB1c2goQS5acyhzLmdsKCkpKQpyZXR1cm4gcn0s -ClZEKGEpe3ZhciBzLHIscT1BLlFJKFtdLHQuZCkKZm9yKHM9YS5sZW5ndGgscj0wO3I8YS5sZW5ndGg7 -YS5sZW5ndGg9PT1zfHwoMCxBLmxrKShhKSwrK3IpcS5wdXNoKGFbcl0uTHQoKSkKcmV0dXJuIHF9LAp2 -QihhKXtpZihhPT1udWxsKXJldHVybiBudWxsCmlmKGE+Pj4wIT09YXx8YT49NClyZXR1cm4gQS5PSChC -LldHLGEpCnJldHVybiBCLldHW2FdfSwKcDIoYSl7c3dpdGNoKGEpe2Nhc2UiZGlyZWN0b3J5IjpyZXR1 -cm4gQi5ZMgpjYXNlImZpbGUiOnJldHVybiBCLnJmCmRlZmF1bHQ6dGhyb3cgQS5iKEEuUFYoIlVucmVj -b2duaXplZCBuYXZpZ2F0aW9uIHRyZWUgbm9kZSB0eXBlOiAiK0EuRWooYSkpKX19LAp2dDpmdW5jdGlv -biB2dChhLGIsYyl7dmFyIF89dGhpcwpfLmQ9YQpfLmE9YgpfLmI9JApfLmM9Y30sCmNEOmZ1bmN0aW9u -IGNEKGEsYixjLGQsZSxmLGcpe3ZhciBfPXRoaXMKXy5kPWEKXy5lPWIKXy5mPWMKXy5yPWQKXy53PWUK -Xy5hPWYKXy5iPSQKXy5jPWd9LApEODpmdW5jdGlvbiBEOCgpe30sCk85OmZ1bmN0aW9uIE85KGEsYil7 -dGhpcy5hPWEKdGhpcy5iPWJ9LApHYjpmdW5jdGlvbiBHYihhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwK -bnooYSl7dmFyIHM9QS5VYyhhLnEoMCwibm9kZUlkIikpCnJldHVybiBuZXcgQS5MTChCLk5tLkh0KEIu -TW0sbmV3IEEuTUQoYSkpLHMpfSwKT1goYSl7c3dpdGNoKGEuYSl7Y2FzZSAwOnJldHVybiJBZGQgLyo/ -Ki8gaGludCIKY2FzZSAxOnJldHVybiJBZGQgLyohKi8gaGludCIKY2FzZSA0OnJldHVybiJSZW1vdmUg -Lyo/Ki8gaGludCIKY2FzZSA1OnJldHVybiJSZW1vdmUgLyohKi8gaGludCIKY2FzZSAyOnJldHVybiJD -aGFuZ2UgdG8gLyo/Ki8gaGludCIKY2FzZSAzOnJldHVybiJDaGFuZ2UgdG8gLyohKi8gaGludCJ9fSwK -TEw6ZnVuY3Rpb24gTEwoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCk1EOmZ1bmN0aW9uIE1EKGEpe3Ro -aXMuYT1hfSwKSDc6ZnVuY3Rpb24gSDcoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCllGKGEsYil7dmFy -IHMscixxLHAsbyxuLG0sbApmb3Iocz1iLmxlbmd0aCxyPTE7cjxzOysrcil7aWYoYltyXT09bnVsbHx8 -YltyLTFdIT1udWxsKWNvbnRpbnVlCmZvcig7cz49MTtzPXEpe3E9cy0xCmlmKGJbcV0hPW51bGwpYnJl -YWt9cD1uZXcgQS5NKCIiKQpvPSIiKyhhKyIoIikKcC5hPW8Kbj1BLnQ2KGIpCm09bi5DKCJuSDwxPiIp -Cmw9bmV3IEEubkgoYiwwLHMsbSkKbC5IZChiLDAscyxuLmMpCm09bytuZXcgQS5sSihsLG0uQygicVUo -YUwuRSkiKS5hKG5ldyBBLk5vKCkpLG0uQygibEo8YUwuRSxxVT4iKSkuSCgwLCIsICIpCnAuYT1tCnAu -YT1tKygiKTogcGFydCAiKyhyLTEpKyIgd2FzIG51bGwsIGJ1dCBwYXJ0ICIrcisiIHdhcyBub3QuIikK -dGhyb3cgQS5iKEEueFkocFsiWyJdKDApLG51bGwpKX19LApsSTpmdW5jdGlvbiBsSShhKXt0aGlzLmE9 -YX0sCnE3OmZ1bmN0aW9uIHE3KCl7fSwKTm86ZnVuY3Rpb24gTm8oKXt9LApmdjpmdW5jdGlvbiBmdigp -e30sCkNMKGEsYil7dmFyIHMscixxLHAsbyxuPWIueFooYSkKYi5oSyhhKQppZihuIT1udWxsKWE9Qi54 -Qi55bihhLG4ubGVuZ3RoKQpzPXQucwpyPUEuUUkoW10scykKcT1BLlFJKFtdLHMpCnM9YS5sZW5ndGgK -aWYocyE9PTAmJmIucjQoQi54Qi5XKGEsMCkpKXtpZigwPj1zKXJldHVybiBBLk9IKGEsMCkKQi5ObS5p -KHEsYVswXSkKcD0xfWVsc2V7Qi5ObS5pKHEsIiIpCnA9MH1mb3Iobz1wO288czsrK28paWYoYi5yNChC -LnhCLlcoYSxvKSkpe0IuTm0uaShyLEIueEIuTmooYSxwLG8pKQpCLk5tLmkocSxhW29dKQpwPW8rMX1p -ZihwPHMpe0IuTm0uaShyLEIueEIueW4oYSxwKSkKQi5ObS5pKHEsIiIpfXJldHVybiBuZXcgQS5XRChi -LG4scixxKX0sCldEOmZ1bmN0aW9uIFdEKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5k -PWMKXy5lPWR9LApJNyhhKXtyZXR1cm4gbmV3IEEuZHYoYSl9LApkdjpmdW5jdGlvbiBkdihhKXt0aGlz -LmE9YX0sClJoKCl7dmFyIHMscj1udWxsCmlmKEEudW8oKS5nRmkoKSE9PSJmaWxlIilyZXR1cm4gJC5F -YigpCnM9QS51bygpCmlmKCFCLnhCLlRjKHMuZ0lpKHMpLCIvIikpcmV0dXJuICQuRWIoKQppZihBLktM -KHIsImEvYiIscixyLHIscixyKS50NCgpPT09ImFcXGIiKXJldHVybiAkLktrKCkKcmV0dXJuICQuYkQo -KX0sCnpMOmZ1bmN0aW9uIHpMKCl7fSwKT0Y6ZnVuY3Rpb24gT0YoYSxiLGMpe3RoaXMuZD1hCnRoaXMu -ZT1iCnRoaXMuZj1jfSwKcnU6ZnVuY3Rpb24gcnUoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmQ9YQpfLmU9 -YgpfLmY9YwpfLnI9ZH0sCklWOmZ1bmN0aW9uIElWKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5kPWEKXy5l -PWIKXy5mPWMKXy5yPWR9LApSOShhKXtyZXR1cm4gdC53LmIoYSl8fHQuQi5iKGEpfHx0LmR6LmIoYSl8 -fHQueC5iKGEpfHx0LkEuYihhKXx8dC5nNC5iKGEpfHx0LmcyLmIoYSl9LAp5ayhhKXtyZXR1cm4gQS52 -KEEubGEoYSkpfSwKYnQoYSl7cmV0dXJuIEEudihBLlJJKGEpKX0sCnBSKGEpe3JldHVybiBBLnYoQS5q -KGEpKX0sCmFiKCl7dmFyIHMscixxLHAsbz1udWxsCnRyeXtvPUEudW8oKX1jYXRjaChzKXtpZih0Lmc4 -LmIoQS5SdShzKSkpe3I9JC5GZgppZihyIT1udWxsKXJldHVybiByCnRocm93IHN9ZWxzZSB0aHJvdyBz -fWlmKEouUk0obywkLkk2KSl7cj0kLkZmCnIudG9TdHJpbmcKcmV0dXJuIHJ9JC5JNj1vCmlmKCQuSGso -KT09JC5FYigpKXI9JC5GZj1vLlpJKCIuIilbIlsiXSgwKQplbHNle3E9by50NCgpCnA9cS5sZW5ndGgt -MQpyPSQuRmY9cD09PTA/cTpCLnhCLk5qKHEsMCxwKX1yZXR1cm4gcn0sCk9TKGEpe3ZhciBzCmlmKCEo -YT49NjUmJmE8PTkwKSlzPWE+PTk3JiZhPD0xMjIKZWxzZSBzPSEwCnJldHVybiBzfSwKWXUoYSxiKXt2 -YXIgcz1hLmxlbmd0aCxyPWIrMgppZihzPHIpcmV0dXJuITEKaWYoIUEuT1MoQi54Qi5PKGEsYikpKXJl -dHVybiExCmlmKEIueEIuTyhhLGIrMSkhPT01OClyZXR1cm4hMQppZihzPT09cilyZXR1cm4hMApyZXR1 -cm4gQi54Qi5PKGEscik9PT00N319LEo9ewpRdShhLGIsYyxkKXtyZXR1cm57aTphLHA6YixlOmMseDpk -fX0sCmtzKGEpe3ZhciBzLHIscSxwLG8sbj1hW3YuZGlzcGF0Y2hQcm9wZXJ0eU5hbWVdCmlmKG49PW51 -bGwpaWYoJC5Cdj09bnVsbCl7QS5YRCgpCm49YVt2LmRpc3BhdGNoUHJvcGVydHlOYW1lXX1pZihuIT1u -dWxsKXtzPW4ucAppZighMT09PXMpcmV0dXJuIG4uaQppZighMD09PXMpcmV0dXJuIGEKcj1PYmplY3Qu -Z2V0UHJvdG90eXBlT2YoYSkKaWYocz09PXIpcmV0dXJuIG4uaQppZihuLmU9PT1yKXRocm93IEEuYihB -LlNZKCJSZXR1cm4gaW50ZXJjZXB0b3IgZm9yICIrQS5FaihzKGEsbikpKSl9cT1hLmNvbnN0cnVjdG9y -CmlmKHE9PW51bGwpcD1udWxsCmVsc2V7bz0kLnptCmlmKG89PW51bGwpbz0kLnptPXYuZ2V0SXNvbGF0 -ZVRhZygiXyRkYXJ0X2pzIikKcD1xW29dfWlmKHAhPW51bGwpcmV0dXJuIHAKcD1BLnczKGEpCmlmKHAh -PW51bGwpcmV0dXJuIHAKaWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpcmV0dXJuIEIuREcKcz1PYmplY3Qu -Z2V0UHJvdG90eXBlT2YoYSkKaWYocz09bnVsbClyZXR1cm4gQi5aUQppZihzPT09T2JqZWN0LnByb3Rv -dHlwZSlyZXR1cm4gQi5aUQppZih0eXBlb2YgcT09ImZ1bmN0aW9uIil7bz0kLnptCmlmKG89PW51bGwp -bz0kLnptPXYuZ2V0SXNvbGF0ZVRhZygiXyRkYXJ0X2pzIikKT2JqZWN0LmRlZmluZVByb3BlcnR5KHEs -byx7dmFsdWU6Qi52QixlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRy -dWV9KQpyZXR1cm4gQi52Qn1yZXR1cm4gQi52Qn0sClFpKGEsYil7aWYoYTwwfHxhPjQyOTQ5NjcyOTUp -dGhyb3cgQS5iKEEuVEUoYSwwLDQyOTQ5NjcyOTUsImxlbmd0aCIsbnVsbCkpCnJldHVybiBKLnB5KG5l -dyBBcnJheShhKSxiKX0sCktoKGEsYil7aWYoYTwwKXRocm93IEEuYihBLnhZKCJMZW5ndGggbXVzdCBi -ZSBhIG5vbi1uZWdhdGl2ZSBpbnRlZ2VyOiAiK2EsbnVsbCkpCnJldHVybiBBLlFJKG5ldyBBcnJheShh -KSxiLkMoImpkPDA+IikpfSwKcHkoYSxiKXtyZXR1cm4gSi5FcChBLlFJKGEsYi5DKCJqZDwwPiIpKSxi -KX0sCkVwKGEsYil7YS5maXhlZCRsZW5ndGg9QXJyYXkKcmV0dXJuIGF9LAp6QyhhKXthLmZpeGVkJGxl -bmd0aD1BcnJheQphLmltbXV0YWJsZSRsaXN0PUFycmF5CnJldHVybiBhfSwKR2EoYSl7aWYoYTwyNTYp -c3dpdGNoKGEpe2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMzI6Y2Fz -ZSAxMzM6Y2FzZSAxNjA6cmV0dXJuITAKZGVmYXVsdDpyZXR1cm4hMX1zd2l0Y2goYSl7Y2FzZSA1NzYw -OmNhc2UgODE5MjpjYXNlIDgxOTM6Y2FzZSA4MTk0OmNhc2UgODE5NTpjYXNlIDgxOTY6Y2FzZSA4MTk3 -OmNhc2UgODE5ODpjYXNlIDgxOTk6Y2FzZSA4MjAwOmNhc2UgODIwMTpjYXNlIDgyMDI6Y2FzZSA4MjMy -OmNhc2UgODIzMzpjYXNlIDgyMzk6Y2FzZSA4Mjg3OmNhc2UgMTIyODg6Y2FzZSA2NTI3OTpyZXR1cm4h -MApkZWZhdWx0OnJldHVybiExfX0sCm1tKGEsYil7dmFyIHMscgpmb3Iocz1hLmxlbmd0aDtiPHM7KXty -PUIueEIuVyhhLGIpCmlmKHIhPT0zMiYmciE9PTEzJiYhSi5HYShyKSlicmVhazsrK2J9cmV0dXJuIGJ9 -LApjMShhLGIpe3ZhciBzLHIKZm9yKDtiPjA7Yj1zKXtzPWItMQpyPUIueEIuTyhhLHMpCmlmKHIhPT0z -MiYmciE9PTEzJiYhSi5HYShyKSlicmVha31yZXR1cm4gYn0sClU2KGEpe2lmKHR5cGVvZiBhPT0ic3Ry -aW5nIilyZXR1cm4gSi5Eci5wcm90b3R5cGUKaWYoYT09bnVsbClyZXR1cm4gYQppZihhLmNvbnN0cnVj -dG9yPT1BcnJheSlyZXR1cm4gSi5qZC5wcm90b3R5cGUKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0 -eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5wcm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0 -YW5jZW9mIEEuTWgpcmV0dXJuIGEKcmV0dXJuIEoua3MoYSl9LApZRShhKXtpZihhPT1udWxsKXJldHVy -biBhCmlmKHR5cGVvZiBhIT0ib2JqZWN0Iil7aWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpcmV0dXJuIEou -YzUucHJvdG90eXBlCnJldHVybiBhfWlmKGEgaW5zdGFuY2VvZiBBLk1oKXJldHVybiBhCnJldHVybiBK -LmtzKGEpfSwKaWEoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXtpZihNYXRoLmZsb29yKGEpPT1hKXJl -dHVybiBKLkw3LnByb3RvdHlwZQpyZXR1cm4gSi5rRC5wcm90b3R5cGV9aWYodHlwZW9mIGE9PSJzdHJp -bmciKXJldHVybiBKLkRyLnByb3RvdHlwZQppZihhPT1udWxsKXJldHVybiBKLndlLnByb3RvdHlwZQpp -Zih0eXBlb2YgYT09ImJvb2xlYW4iKXJldHVybiBKLnlFLnByb3RvdHlwZQppZihhLmNvbnN0cnVjdG9y -PT1BcnJheSlyZXR1cm4gSi5qZC5wcm90b3R5cGUKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBl -b2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5wcm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5j -ZW9mIEEuTWgpcmV0dXJuIGEKcmV0dXJuIEoua3MoYSl9LApyWShhKXtpZih0eXBlb2YgYT09InN0cmlu -ZyIpcmV0dXJuIEouRHIucHJvdG90eXBlCmlmKGE9PW51bGwpcmV0dXJuIGEKaWYoIShhIGluc3RhbmNl -b2YgQS5NaCkpcmV0dXJuIEoua2QucHJvdG90eXBlCnJldHVybiBhfSwKdzEoYSl7aWYoYT09bnVsbCly -ZXR1cm4gYQppZihhLmNvbnN0cnVjdG9yPT1BcnJheSlyZXR1cm4gSi5qZC5wcm90b3R5cGUKaWYodHlw -ZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5wcm90b3R5 -cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9mIEEuTWgpcmV0dXJuIGEKcmV0dXJuIEoua3MoYSl9LApB -NShhLGIpe3JldHVybiBKLncxKGEpLmVSKGEsYil9LApFaChhLGIsYyl7cmV0dXJuIEouWUUoYSkubUso -YSxiLGMpfSwKRWwoYSxiKXtyZXR1cm4gSi53MShhKS5kcihhLGIpfSwKRjcoYSl7cmV0dXJuIEouVTYo -YSkuZ29yKGEpfSwKRkwoYSxiKXtyZXR1cm4gSi5yWShhKS5kZChhLGIpfSwKR0EoYSxiKXtyZXR1cm4g -Si53MShhKS5FKGEsYil9LApIbShhKXtyZXR1cm4gSi5VNihhKS5nayhhKX0sCklUKGEpe3JldHVybiBK -LncxKGEpLmdBKGEpfSwKSnkoYSxiKXtyZXR1cm4gSi5pYShhKS5lNyhhLGIpfSwKTHQoYSl7cmV0dXJu -IEouWUUoYSkuekIoYSl9LApNMShhLGIsYyl7cmV0dXJuIEoudzEoYSkuRTIoYSxiLGMpfSwKTXUoYSxi -KXtyZXR1cm4gSi5ZRShhKS5zUChhLGIpfSwKUk0oYSxiKXtpZihhPT1udWxsKXJldHVybiBiPT1udWxs -CmlmKHR5cGVvZiBhIT0ib2JqZWN0IilyZXR1cm4gYiE9bnVsbCYmYT09PWIKcmV0dXJuIEouaWEoYSku -RE4oYSxiKX0sClJYKGEpe3JldHVybiBKLncxKGEpLmJyKGEpfSwKVDAoYSl7cmV0dXJuIEouclkoYSku -YlMoYSl9LApVMyhhKXtyZXR1cm4gSi5pYShhKS5nbShhKX0sCllTKGEpe3JldHVybiBKLmlhKGEpWyJb -Il0oYSl9LAphNihhLGIpe3JldHVybiBKLnJZKGEpLk8oYSxiKX0sCmJUKGEpe3JldHVybiBKLllFKGEp -LkQ0KGEpfSwKY0goYSl7cmV0dXJuIEouclkoYSkuaGMoYSl9LApkUihhKXtyZXR1cm4gSi5ZRShhKS5n -UChhKX0sCmRaKGEsYixjLGQpe3JldHVybiBKLllFKGEpLk9uKGEsYixjLGQpfSwKZGgoYSl7cmV0dXJu -IEouWUUoYSkuRkYoYSl9LApkcihhLGIpe3JldHVybiBKLllFKGEpLnNhNChhLGIpfSwKaWcoYSl7cmV0 -dXJuIEouWUUoYSkuZ1FnKGEpfSwKbDUoYSxiKXtyZXR1cm4gSi5ZRShhKS5zaGYoYSxiKX0sCnFGKGEp -e3JldHVybiBKLllFKGEpLmdWbChhKX0sCnRIKGEsYixjKXtyZXR1cm4gSi5ZRShhKS5wayhhLGIsYyl9 -LAp1OShhLGIsYyl7cmV0dXJuIEoudzEoYSkuWTUoYSxiLGMpfSwKdVUoYSl7cmV0dXJuIEouVTYoYSku -Z2wwKGEpfSwKd2YoYSxiKXtyZXR1cm4gSi5ZRShhKS5zUk4oYSxiKX0sCng5KGEsYil7aWYodHlwZW9m -IGI9PT0ibnVtYmVyIilpZihhLmNvbnN0cnVjdG9yPT1BcnJheXx8dHlwZW9mIGE9PSJzdHJpbmcifHxB -LndWKGEsYVt2LmRpc3BhdGNoUHJvcGVydHlOYW1lXSkpaWYoYj4+PjA9PT1iJiZiPGEubGVuZ3RoKXJl -dHVybiBhW2JdCnJldHVybiBKLlU2KGEpLnEoYSxiKX0sCnpsKGEsYil7cmV0dXJuIEouVTYoYSkudGco -YSxiKX0sCkd2OmZ1bmN0aW9uIEd2KCl7fSwKeUU6ZnVuY3Rpb24geUUoKXt9LAp3ZTpmdW5jdGlvbiB3 -ZSgpe30sCk1GOmZ1bmN0aW9uIE1GKCl7fSwKdTA6ZnVuY3Rpb24gdTAoKXt9LAppQzpmdW5jdGlvbiBp -Qygpe30sCmtkOmZ1bmN0aW9uIGtkKCl7fSwKYzU6ZnVuY3Rpb24gYzUoKXt9LApqZDpmdW5jdGlvbiBq -ZChhKXt0aGlzLiR0aT1hfSwKUG86ZnVuY3Rpb24gUG8oYSl7dGhpcy4kdGk9YX0sCm0xOmZ1bmN0aW9u -IG0xKGEsYixjKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz0wCl8uZD1udWxsCl8uJHRpPWN9LApx -STpmdW5jdGlvbiBxSSgpe30sCkw3OmZ1bmN0aW9uIEw3KCl7fSwKa0Q6ZnVuY3Rpb24ga0QoKXt9LApE -cjpmdW5jdGlvbiBEcigpe319LEI9e30KdmFyIHc9W0EsSixCXQp2YXIgJD17fQpBLkZLLnByb3RvdHlw -ZT17fQpKLkd2LnByb3RvdHlwZT17CkROKGEsYil7cmV0dXJuIGE9PT1ifSwKZ20oYSl7cmV0dXJuIEEu -ZVEoYSl9LAoiWyIoYSl7cmV0dXJuIkluc3RhbmNlIG9mICciK0EubGgoYSkrIicifSwKZTcoYSxiKXt0 -Lm8uYShiKQp0aHJvdyBBLmIoQS5scihhLGIuZ1dhKCksYi5nbmQoKSxiLmdWbSgpKSl9fQpKLnlFLnBy -b3RvdHlwZT17CiJbIihhKXtyZXR1cm4gU3RyaW5nKGEpfSwKZ20oYSl7cmV0dXJuIGE/NTE5MDE4OjIx -ODE1OX0sCiRpYTI6MX0KSi53ZS5wcm90b3R5cGU9ewpETihhLGIpe3JldHVybiBudWxsPT1ifSwKIlsi -KGEpe3JldHVybiJudWxsIn0sCmdtKGEpe3JldHVybiAwfSwKJGljODoxfQpKLk1GLnByb3RvdHlwZT17 -fQpKLnUwLnByb3RvdHlwZT17CmdtKGEpe3JldHVybiAwfSwKIlsiKGEpe3JldHVybiBTdHJpbmcoYSl9 -LAokaXZtOjF9CkouaUMucHJvdG90eXBlPXt9Ckoua2QucHJvdG90eXBlPXt9CkouYzUucHJvdG90eXBl -PXsKIlsiKGEpe3ZhciBzPWFbJC53KCldCmlmKHM9PW51bGwpcmV0dXJuIHRoaXMudShhKQpyZXR1cm4i -SmF2YVNjcmlwdCBmdW5jdGlvbiBmb3IgIitBLkVqKEouWVMocykpfSwKJGlFSDoxfQpKLmpkLnByb3Rv -dHlwZT17CmRyKGEsYil7cmV0dXJuIG5ldyBBLmpWKGEsQS50NihhKS5DKCJAPDE+IikuS3EoYikuQygi -alY8MSwyPiIpKX0sCmkoYSxiKXtBLnQ2KGEpLmMuYShiKQppZighIWEuZml4ZWQkbGVuZ3RoKUEudihB -Lkw0KCJhZGQiKSkKYS5wdXNoKGIpfSwKVzQoYSxiKXt2YXIgcwppZighIWEuZml4ZWQkbGVuZ3RoKUEu -dihBLkw0KCJyZW1vdmVBdCIpKQpzPWEubGVuZ3RoCmlmKGI+PXMpdGhyb3cgQS5iKEEuTzcoYixudWxs -KSkKcmV0dXJuIGEuc3BsaWNlKGIsMSlbMF19LApVRyhhLGIsYyl7dmFyIHMscgpBLnQ2KGEpLkMoImNY -PDE+IikuYShjKQppZighIWEuZml4ZWQkbGVuZ3RoKUEudihBLkw0KCJpbnNlcnRBbGwiKSkKQS53QShi -LDAsYS5sZW5ndGgsImluZGV4IikKaWYoIXQuVS5iKGMpKWM9Si5SWChjKQpzPUouSG0oYykKYS5sZW5n -dGg9YS5sZW5ndGgrcwpyPWIrcwp0aGlzLllXKGEscixhLmxlbmd0aCxhLGIpCnRoaXMudmcoYSxiLHIs -Yyl9LApGVihhLGIpe3ZhciBzCkEudDYoYSkuQygiY1g8MT4iKS5hKGIpCmlmKCEhYS5maXhlZCRsZW5n -dGgpQS52KEEuTDQoImFkZEFsbCIpKQppZihBcnJheS5pc0FycmF5KGIpKXt0aGlzLktoKGEsYikKcmV0 -dXJufWZvcihzPUouSVQoYik7cy5HKCk7KWEucHVzaChzLmdsKCkpfSwKS2goYSxiKXt2YXIgcyxyCnQu -Yi5hKGIpCnM9Yi5sZW5ndGgKaWYocz09PTApcmV0dXJuCmlmKGE9PT1iKXRocm93IEEuYihBLmE0KGEp -KQpmb3Iocj0wO3I8czsrK3IpYS5wdXNoKGJbcl0pfSwKVjEoYSl7aWYoISFhLmZpeGVkJGxlbmd0aClB -LnYoQS5MNCgiY2xlYXIiKSkKYS5sZW5ndGg9MH0sCkUyKGEsYixjKXt2YXIgcz1BLnQ2KGEpCnJldHVy -biBuZXcgQS5sSihhLHMuS3EoYykuQygiMSgyKSIpLmEoYikscy5DKCJAPDE+IikuS3EoYykuQygibEo8 -MSwyPiIpKX0sCkgoYSxiKXt2YXIgcyxyPUEuTzgoYS5sZW5ndGgsIiIsITEsdC5OKQpmb3Iocz0wO3M8 -YS5sZW5ndGg7KytzKXRoaXMuWTUocixzLEEuRWooYVtzXSkpCnJldHVybiByLmpvaW4oYil9LAplUihh -LGIpe3JldHVybiBBLnFDKGEsYixudWxsLEEudDYoYSkuYyl9LApOMChhLGIsYyxkKXt2YXIgcyxyLHEK -ZC5hKGIpCkEudDYoYSkuS3EoZCkuQygiMSgxLDIpIikuYShjKQpzPWEubGVuZ3RoCmZvcihyPWIscT0w -O3E8czsrK3Epe3I9Yy4kMihyLGFbcV0pCmlmKGEubGVuZ3RoIT09cyl0aHJvdyBBLmIoQS5hNChhKSl9 -cmV0dXJuIHJ9LApIdChhLGIpe3ZhciBzLHIscSxwLG8sbj1BLnQ2KGEpCm4uQygiYTIoMSkiKS5hKGIp -CnM9YS5sZW5ndGgKZm9yKHI9bnVsbCxxPSExLHA9MDtwPHM7KytwKXtvPWFbcF0KaWYoQS5vVChiLiQx -KG8pKSl7aWYocSl0aHJvdyBBLmIoQS5BbSgpKQpyPW8KcT0hMH1pZihzIT09YS5sZW5ndGgpdGhyb3cg -QS5iKEEuYTQoYSkpfWlmKHEpcmV0dXJuIHI9PW51bGw/bi5jLmEocik6cgp0aHJvdyBBLmIoQS5XcCgp -KX0sCkUoYSxiKXtpZighKGI+PTAmJmI8YS5sZW5ndGgpKXJldHVybiBBLk9IKGEsYikKcmV0dXJuIGFb -Yl19LApndEgoYSl7aWYoYS5sZW5ndGg+MClyZXR1cm4gYVswXQp0aHJvdyBBLmIoQS5XcCgpKX0sCmdy -WihhKXt2YXIgcz1hLmxlbmd0aAppZihzPjApcmV0dXJuIGFbcy0xXQp0aHJvdyBBLmIoQS5XcCgpKX0s -CllXKGEsYixjLGQsZSl7dmFyIHMscixxLHAsbwpBLnQ2KGEpLkMoImNYPDE+IikuYShkKQppZighIWEu -aW1tdXRhYmxlJGxpc3QpQS52KEEuTDQoInNldFJhbmdlIikpCkEuakIoYixjLGEubGVuZ3RoKQpzPWMt -YgppZihzPT09MClyZXR1cm4KQS5rMShlLCJza2lwQ291bnQiKQppZih0LmouYihkKSl7cj1kCnE9ZX1l -bHNle3I9Si5BNShkLGUpLnR0KDAsITEpCnE9MH1wPUouVTYocikKaWYocStzPnAuZ2socikpdGhyb3cg -QS5iKEEuYXIoKSkKaWYocTxiKWZvcihvPXMtMTtvPj0wOy0tbylhW2Irb109cC5xKHIscStvKQplbHNl -IGZvcihvPTA7bzxzOysrbylhW2Irb109cC5xKHIscStvKX0sCnZnKGEsYixjLGQpe3JldHVybiB0aGlz -LllXKGEsYixjLGQsMCl9LApWcihhLGIpe3ZhciBzLHIKQS50NihhKS5DKCJhMigxKSIpLmEoYikKcz1h -Lmxlbmd0aApmb3Iocj0wO3I8czsrK3Ipe2lmKEEub1QoYi4kMShhW3JdKSkpcmV0dXJuITAKaWYoYS5s -ZW5ndGghPT1zKXRocm93IEEuYihBLmE0KGEpKX1yZXR1cm4hMX0sCnRnKGEsYil7dmFyIHMKZm9yKHM9 -MDtzPGEubGVuZ3RoOysrcylpZihKLlJNKGFbc10sYikpcmV0dXJuITAKcmV0dXJuITF9LApnbDAoYSl7 -cmV0dXJuIGEubGVuZ3RoPT09MH0sCmdvcihhKXtyZXR1cm4gYS5sZW5ndGghPT0wfSwKIlsiKGEpe3Jl -dHVybiBBLngoYSwiWyIsIl0iKX0sCnR0KGEsYil7dmFyIHM9QS5RSShhLnNsaWNlKDApLEEudDYoYSkp -CnJldHVybiBzfSwKYnIoYSl7cmV0dXJuIHRoaXMudHQoYSwhMCl9LApnQShhKXtyZXR1cm4gbmV3IEou -bTEoYSxhLmxlbmd0aCxBLnQ2KGEpLkMoIm0xPDE+IikpfSwKZ20oYSl7cmV0dXJuIEEuZVEoYSl9LApn -ayhhKXtyZXR1cm4gYS5sZW5ndGh9LApxKGEsYil7QS5JWihiKQppZighKGI+PTAmJmI8YS5sZW5ndGgp -KXRocm93IEEuYihBLnUoYSxiKSkKcmV0dXJuIGFbYl19LApZNShhLGIsYyl7QS50NihhKS5jLmEoYykK -aWYoISFhLmltbXV0YWJsZSRsaXN0KUEudihBLkw0KCJpbmRleGVkIHNldCIpKQppZighKGI+PTAmJmI8 -YS5sZW5ndGgpKXRocm93IEEuYihBLnUoYSxiKSkKYVtiXT1jfSwKJGliUToxLAokaWNYOjEsCiRpek06 -MX0KSi5Qby5wcm90b3R5cGU9e30KSi5tMS5wcm90b3R5cGU9ewpnbCgpe3ZhciBzPXRoaXMuZApyZXR1 -cm4gcz09bnVsbD90aGlzLiR0aS5jLmEocyk6c30sCkcoKXt2YXIgcyxyPXRoaXMscT1yLmEscD1xLmxl -bmd0aAppZihyLmIhPT1wKXRocm93IEEuYihBLmxrKHEpKQpzPXIuYwppZihzPj1wKXtyLnNGKG51bGwp -CnJldHVybiExfXIuc0YocVtzXSk7KytyLmMKcmV0dXJuITB9LApzRihhKXt0aGlzLmQ9dGhpcy4kdGku -QygiMT8iKS5hKGEpfSwKJGlBbjoxfQpKLnFJLnByb3RvdHlwZT17CnpRKGEpe2lmKGE+MCl7aWYoYSE9 -PTEvMClyZXR1cm4gTWF0aC5yb3VuZChhKX1lbHNlIGlmKGE+LTEvMClyZXR1cm4gMC1NYXRoLnJvdW5k -KDAtYSkKdGhyb3cgQS5iKEEuTDQoIiIrYSsiLnJvdW5kKCkiKSl9LAoiWyIoYSl7aWYoYT09PTAmJjEv -YTwwKXJldHVybiItMC4wIgplbHNlIHJldHVybiIiK2F9LApnbShhKXt2YXIgcyxyLHEscCxvPWF8MApp -ZihhPT09bylyZXR1cm4gbyY1MzY4NzA5MTEKcz1NYXRoLmFicyhhKQpyPU1hdGgubG9nKHMpLzAuNjkz -MTQ3MTgwNTU5OTQ1M3wwCnE9TWF0aC5wb3coMixyKQpwPXM8MT9zL3E6cS9zCnJldHVybigocCo5MDA3 -MTk5MjU0NzQwOTkyfDApKyhwKjM1NDIyNDMxODExNzY1MjF8MCkpKjU5OTE5NytyKjEyNTkmNTM2ODcw -OTExfSwKelkoYSxiKXt2YXIgcz1hJWIKaWYocz09PTApcmV0dXJuIDAKaWYocz4wKXJldHVybiBzCnJl -dHVybiBzK2J9LApCVShhLGIpe3JldHVybihhfDApPT09YT9hL2J8MDp0aGlzLkRKKGEsYil9LApESihh -LGIpe3ZhciBzPWEvYgppZihzPj0tMjE0NzQ4MzY0OCYmczw9MjE0NzQ4MzY0NylyZXR1cm4gc3wwCmlm -KHM+MCl7aWYocyE9PTEvMClyZXR1cm4gTWF0aC5mbG9vcihzKX1lbHNlIGlmKHM+LTEvMClyZXR1cm4g -TWF0aC5jZWlsKHMpCnRocm93IEEuYihBLkw0KCJSZXN1bHQgb2YgdHJ1bmNhdGluZyBkaXZpc2lvbiBp -cyAiK0EuRWoocykrIjogIitBLkVqKGEpKyIgfi8gIitiKSl9LAp3RyhhLGIpe3ZhciBzCmlmKGE+MClz -PXRoaXMuVWgoYSxiKQplbHNle3M9Yj4zMT8zMTpiCnM9YT4+cz4+PjB9cmV0dXJuIHN9LApiZihhLGIp -e2lmKDA+Yil0aHJvdyBBLmIoQS50TChiKSkKcmV0dXJuIHRoaXMuVWgoYSxiKX0sClVoKGEsYil7cmV0 -dXJuIGI+MzE/MDphPj4+Yn0sCiRpQ1A6MSwKJGlaWjoxfQpKLkw3LnByb3RvdHlwZT17JGlJajoxfQpK -LmtELnByb3RvdHlwZT17fQpKLkRyLnByb3RvdHlwZT17Ck8oYSxiKXtpZihiPDApdGhyb3cgQS5iKEEu -dShhLGIpKQppZihiPj1hLmxlbmd0aClBLnYoQS51KGEsYikpCnJldHVybiBhLmNoYXJDb2RlQXQoYil9 -LApXKGEsYil7aWYoYj49YS5sZW5ndGgpdGhyb3cgQS5iKEEudShhLGIpKQpyZXR1cm4gYS5jaGFyQ29k -ZUF0KGIpfSwKZGQoYSxiKXtyZXR1cm4gbmV3IEEudW4oYixhLDApfSwKaChhLGIpe3JldHVybiBhK2J9 -LApUYyhhLGIpe3ZhciBzPWIubGVuZ3RoLHI9YS5sZW5ndGgKaWYocz5yKXJldHVybiExCnJldHVybiBi -PT09dGhpcy55bihhLHItcyl9LAppNyhhLGIsYyxkKXt2YXIgcz1BLmpCKGIsYyxhLmxlbmd0aCkKcmV0 -dXJuIGEuc3Vic3RyaW5nKDAsYikrZCthLnN1YnN0cmluZyhzKX0sClFpKGEsYixjKXt2YXIgcwppZihj -PDB8fGM+YS5sZW5ndGgpdGhyb3cgQS5iKEEuVEUoYywwLGEubGVuZ3RoLG51bGwsbnVsbCkpCnM9Yyti -Lmxlbmd0aAppZihzPmEubGVuZ3RoKXJldHVybiExCnJldHVybiBiPT09YS5zdWJzdHJpbmcoYyxzKX0s -Cm4oYSxiKXtyZXR1cm4gdGhpcy5RaShhLGIsMCl9LApOaihhLGIsYyl7cmV0dXJuIGEuc3Vic3RyaW5n -KGIsQS5qQihiLGMsYS5sZW5ndGgpKX0sCnluKGEsYil7cmV0dXJuIHRoaXMuTmooYSxiLG51bGwpfSwK -aGMoYSl7cmV0dXJuIGEudG9Mb3dlckNhc2UoKX0sCmJTKGEpe3ZhciBzLHIscSxwPWEudHJpbSgpLG89 -cC5sZW5ndGgKaWYobz09PTApcmV0dXJuIHAKaWYodGhpcy5XKHAsMCk9PT0xMzMpe3M9Si5tbShwLDEp -CmlmKHM9PT1vKXJldHVybiIifWVsc2Ugcz0wCnI9by0xCnE9dGhpcy5PKHAscik9PT0xMzM/Si5jMShw -LHIpOm8KaWYocz09PTAmJnE9PT1vKXJldHVybiBwCnJldHVybiBwLnN1YnN0cmluZyhzLHEpfSwKSXgo -YSxiKXt2YXIgcyxyCmlmKDA+PWIpcmV0dXJuIiIKaWYoYj09PTF8fGEubGVuZ3RoPT09MClyZXR1cm4g -YQppZihiIT09Yj4+PjApdGhyb3cgQS5iKEIuRXEpCmZvcihzPWEscj0iIjshMDspe2lmKChiJjEpPT09 -MSlyPXMrcgpiPWI+Pj4xCmlmKGI9PT0wKWJyZWFrCnMrPXN9cmV0dXJuIHJ9LApYVShhLGIsYyl7dmFy -IHMKaWYoYzwwfHxjPmEubGVuZ3RoKXRocm93IEEuYihBLlRFKGMsMCxhLmxlbmd0aCxudWxsLG51bGwp -KQpzPWEuaW5kZXhPZihiLGMpCnJldHVybiBzfSwKT1koYSxiKXtyZXR1cm4gdGhpcy5YVShhLGIsMCl9 -LApQayhhLGIsYyl7dmFyIHMscgppZihjPT1udWxsKWM9YS5sZW5ndGgKZWxzZSBpZihjPDB8fGM+YS5s -ZW5ndGgpdGhyb3cgQS5iKEEuVEUoYywwLGEubGVuZ3RoLG51bGwsbnVsbCkpCnM9Yi5sZW5ndGgKcj1h -Lmxlbmd0aAppZihjK3M+ciljPXItcwpyZXR1cm4gYS5sYXN0SW5kZXhPZihiLGMpfSwKY24oYSxiKXty -ZXR1cm4gdGhpcy5QayhhLGIsbnVsbCl9LApJcyhhLGIsYyl7dmFyIHM9YS5sZW5ndGgKaWYoYz5zKXRo -cm93IEEuYihBLlRFKGMsMCxzLG51bGwsbnVsbCkpCnJldHVybiBBLlNRKGEsYixjKX0sCnRnKGEsYil7 -cmV0dXJuIHRoaXMuSXMoYSxiLDApfSwKIlsiKGEpe3JldHVybiBhfSwKZ20oYSl7dmFyIHMscixxCmZv -cihzPWEubGVuZ3RoLHI9MCxxPTA7cTxzOysrcSl7cj1yK2EuY2hhckNvZGVBdChxKSY1MzY4NzA5MTEK -cj1yKygociY1MjQyODcpPDwxMCkmNTM2ODcwOTExCnJePXI+PjZ9cj1yKygociY2NzEwODg2Myk8PDMp -JjUzNjg3MDkxMQpyXj1yPj4xMQpyZXR1cm4gcisoKHImMTYzODMpPDwxNSkmNTM2ODcwOTExfSwKZ2so -YSl7cmV0dXJuIGEubGVuZ3RofSwKcShhLGIpe0EuSVooYikKaWYoYj49YS5sZW5ndGgpdGhyb3cgQS5i -KEEudShhLGIpKQpyZXR1cm4gYVtiXX0sCiRpdlg6MSwKJGlxVToxfQpBLkJSLnByb3RvdHlwZT17CmdB -KGEpe3ZhciBzPUEuTGgodGhpcykKcmV0dXJuIG5ldyBBLmVUKEouSVQodGhpcy5nT04oKSkscy5DKCJA -PDE+IikuS3Eocy56WzFdKS5DKCJlVDwxLDI+IikpfSwKZ2soYSl7cmV0dXJuIEouSG0odGhpcy5nT04o -KSl9LApnbDAoYSl7cmV0dXJuIEoudVUodGhpcy5nT04oKSl9LApnb3IoYSl7cmV0dXJuIEouRjcodGhp -cy5nT04oKSl9LAplUihhLGIpe3ZhciBzPUEuTGgodGhpcykKcmV0dXJuIEEuR0ooSi5BNSh0aGlzLmdP -TigpLGIpLHMuYyxzLnpbMV0pfSwKRShhLGIpe3JldHVybiBBLkxoKHRoaXMpLnpbMV0uYShKLkdBKHRo -aXMuZ09OKCksYikpfSwKIlsiKGEpe3JldHVybiBKLllTKHRoaXMuZ09OKCkpfX0KQS5lVC5wcm90b3R5 -cGU9ewpHKCl7cmV0dXJuIHRoaXMuYS5HKCl9LApnbCgpe3JldHVybiB0aGlzLiR0aS56WzFdLmEodGhp -cy5hLmdsKCkpfSwKJGlBbjoxfQpBLlp5LnByb3RvdHlwZT17CmdPTigpe3JldHVybiB0aGlzLmF9fQpB -Lm9sLnByb3RvdHlwZT17JGliUToxfQpBLlVxLnByb3RvdHlwZT17CnEoYSxiKXtyZXR1cm4gdGhpcy4k -dGkuelsxXS5hKEoueDkodGhpcy5hLEEuSVooYikpKX0sClk1KGEsYixjKXt2YXIgcz10aGlzLiR0aQpK -LnU5KHRoaXMuYSxiLHMuYy5hKHMuelsxXS5hKGMpKSl9LAokaWJROjEsCiRpek06MX0KQS5qVi5wcm90 -b3R5cGU9ewpkcihhLGIpe3JldHVybiBuZXcgQS5qVih0aGlzLmEsdGhpcy4kdGkuQygiQDwxPiIpLktx -KGIpLkMoImpWPDEsMj4iKSl9LApnT04oKXtyZXR1cm4gdGhpcy5hfX0KQS5jLnByb3RvdHlwZT17CiJb -IihhKXtyZXR1cm4iTGF0ZUluaXRpYWxpemF0aW9uRXJyb3I6ICIrdGhpcy5hfX0KQS5xai5wcm90b3R5 -cGU9ewpnayhhKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sCnEoYSxiKXtyZXR1cm4gQi54Qi5PKHRoaXMu -YSxBLklaKGIpKX19CkEuSGIucHJvdG90eXBlPXt9CkEuYlEucHJvdG90eXBlPXt9CkEuYUwucHJvdG90 -eXBlPXsKZ0EoYSl7dmFyIHM9dGhpcwpyZXR1cm4gbmV3IEEuYTcocyxzLmdrKHMpLEEuTGgocykuQygi -YTc8YUwuRT4iKSl9LApnbDAoYSl7cmV0dXJuIHRoaXMuZ2sodGhpcyk9PT0wfSwKSChhLGIpe3ZhciBz -LHIscSxwPXRoaXMsbz1wLmdrKHApCmlmKGIubGVuZ3RoIT09MCl7aWYobz09PTApcmV0dXJuIiIKcz1B -LkVqKHAuRSgwLDApKQppZihvIT09cC5nayhwKSl0aHJvdyBBLmIoQS5hNChwKSkKZm9yKHI9cyxxPTE7 -cTxvOysrcSl7cj1yK2IrQS5FaihwLkUoMCxxKSkKaWYobyE9PXAuZ2socCkpdGhyb3cgQS5iKEEuYTQo -cCkpfXJldHVybiByLmNoYXJDb2RlQXQoMCk9PTA/cjpyfWVsc2V7Zm9yKHE9MCxyPSIiO3E8bzsrK3Ep -e3IrPUEuRWoocC5FKDAscSkpCmlmKG8hPT1wLmdrKHApKXRocm93IEEuYihBLmE0KHApKX1yZXR1cm4g -ci5jaGFyQ29kZUF0KDApPT0wP3I6cn19LApldihhLGIpe3JldHVybiB0aGlzLkdHKDAsQS5MaCh0aGlz -KS5DKCJhMihhTC5FKSIpLmEoYikpfSwKRTIoYSxiLGMpe3ZhciBzPUEuTGgodGhpcykKcmV0dXJuIG5l -dyBBLmxKKHRoaXMscy5LcShjKS5DKCIxKGFMLkUpIikuYShiKSxzLkMoIkA8YUwuRT4iKS5LcShjKS5D -KCJsSjwxLDI+IikpfSwKTjAoYSxiLGMsZCl7dmFyIHMscixxLHA9dGhpcwpkLmEoYikKQS5MaChwKS5L -cShkKS5DKCIxKDEsYUwuRSkiKS5hKGMpCnM9cC5nayhwKQpmb3Iocj1iLHE9MDtxPHM7KytxKXtyPWMu -JDIocixwLkUoMCxxKSkKaWYocyE9PXAuZ2socCkpdGhyb3cgQS5iKEEuYTQocCkpfXJldHVybiByfSwK -ZVIoYSxiKXtyZXR1cm4gQS5xQyh0aGlzLGIsbnVsbCxBLkxoKHRoaXMpLkMoImFMLkUiKSl9LAp0dChh -LGIpe3JldHVybiBBLlkxKHRoaXMsITAsQS5MaCh0aGlzKS5DKCJhTC5FIikpfSwKYnIoYSl7cmV0dXJu -IHRoaXMudHQoYSwhMCl9fQpBLm5ILnByb3RvdHlwZT17CkhkKGEsYixjLGQpe3ZhciBzLHI9dGhpcy5i -CkEuazEociwic3RhcnQiKQpzPXRoaXMuYwppZihzIT1udWxsKXtBLmsxKHMsImVuZCIpCmlmKHI+cyl0 -aHJvdyBBLmIoQS5URShyLDAscywic3RhcnQiLG51bGwpKX19LApnVUQoKXt2YXIgcz1KLkhtKHRoaXMu -YSkscj10aGlzLmMKaWYocj09bnVsbHx8cj5zKXJldHVybiBzCnJldHVybiByfSwKZ0FzKCl7dmFyIHM9 -Si5IbSh0aGlzLmEpLHI9dGhpcy5iCmlmKHI+cylyZXR1cm4gcwpyZXR1cm4gcn0sCmdrKGEpe3ZhciBz -LHI9Si5IbSh0aGlzLmEpLHE9dGhpcy5iCmlmKHE+PXIpcmV0dXJuIDAKcz10aGlzLmMKaWYocz09bnVs -bHx8cz49cilyZXR1cm4gci1xCmlmKHR5cGVvZiBzIT09Im51bWJlciIpcmV0dXJuIHMuSE4oKQpyZXR1 -cm4gcy1xfSwKRShhLGIpe3ZhciBzPXRoaXMscj1zLmdBcygpK2IKaWYoYjwwfHxyPj1zLmdVRCgpKXRo -cm93IEEuYihBLkNmKGIscywiaW5kZXgiLG51bGwsbnVsbCkpCnJldHVybiBKLkdBKHMuYSxyKX0sCmVS -KGEsYil7dmFyIHMscixxPXRoaXMKQS5rMShiLCJjb3VudCIpCnM9cS5iK2IKcj1xLmMKaWYociE9bnVs -bCYmcz49cilyZXR1cm4gbmV3IEEuTUIocS4kdGkuQygiTUI8MT4iKSkKcmV0dXJuIEEucUMocS5hLHMs -cixxLiR0aS5jKX0sCnR0KGEsYil7dmFyIHMscixxLHA9dGhpcyxvPXAuYixuPXAuYSxtPUouVTYobiks -bD1tLmdrKG4pLGs9cC5jCmlmKGshPW51bGwmJms8bClsPWsKcz1sLW8KaWYoczw9MCl7bj1KLlFpKDAs -cC4kdGkuYykKcmV0dXJuIG59cj1BLk84KHMsbS5FKG4sbyksITEscC4kdGkuYykKZm9yKHE9MTtxPHM7 -KytxKXtCLk5tLlk1KHIscSxtLkUobixvK3EpKQppZihtLmdrKG4pPGwpdGhyb3cgQS5iKEEuYTQocCkp -fXJldHVybiByfX0KQS5hNy5wcm90b3R5cGU9ewpnbCgpe3ZhciBzPXRoaXMuZApyZXR1cm4gcz09bnVs -bD90aGlzLiR0aS5jLmEocyk6c30sCkcoKXt2YXIgcyxyPXRoaXMscT1yLmEscD1KLlU2KHEpLG89cC5n -ayhxKQppZihyLmIhPT1vKXRocm93IEEuYihBLmE0KHEpKQpzPXIuYwppZihzPj1vKXtyLnNJKG51bGwp -CnJldHVybiExfXIuc0kocC5FKHEscykpOysrci5jCnJldHVybiEwfSwKc0koYSl7dGhpcy5kPXRoaXMu -JHRpLkMoIjE/IikuYShhKX0sCiRpQW46MX0KQS5pMS5wcm90b3R5cGU9ewpnQShhKXt2YXIgcz1BLkxo -KHRoaXMpCnJldHVybiBuZXcgQS5NSChKLklUKHRoaXMuYSksdGhpcy5iLHMuQygiQDwxPiIpLktxKHMu -elsxXSkuQygiTUg8MSwyPiIpKX0sCmdrKGEpe3JldHVybiBKLkhtKHRoaXMuYSl9LApnbDAoYSl7cmV0 -dXJuIEoudVUodGhpcy5hKX0sCkUoYSxiKXtyZXR1cm4gdGhpcy5iLiQxKEouR0EodGhpcy5hLGIpKX19 -CkEueHkucHJvdG90eXBlPXskaWJROjF9CkEuTUgucHJvdG90eXBlPXsKRygpe3ZhciBzPXRoaXMscj1z -LmIKaWYoci5HKCkpe3Muc0kocy5jLiQxKHIuZ2woKSkpCnJldHVybiEwfXMuc0kobnVsbCkKcmV0dXJu -ITF9LApnbCgpe3ZhciBzPXRoaXMuYQpyZXR1cm4gcz09bnVsbD90aGlzLiR0aS56WzFdLmEocyk6c30s -CnNJKGEpe3RoaXMuYT10aGlzLiR0aS5DKCIyPyIpLmEoYSl9fQpBLmxKLnByb3RvdHlwZT17CmdrKGEp -e3JldHVybiBKLkhtKHRoaXMuYSl9LApFKGEsYil7cmV0dXJuIHRoaXMuYi4kMShKLkdBKHRoaXMuYSxi -KSl9fQpBLlU1LnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBuZXcgQS5TTyhKLklUKHRoaXMuYSksdGhp -cy5iLHRoaXMuJHRpLkMoIlNPPDE+IikpfX0KQS5TTy5wcm90b3R5cGU9ewpHKCl7dmFyIHMscgpmb3Io -cz10aGlzLmEscj10aGlzLmI7cy5HKCk7KWlmKEEub1Qoci4kMShzLmdsKCkpKSlyZXR1cm4hMApyZXR1 -cm4hMX0sCmdsKCl7cmV0dXJuIHRoaXMuYS5nbCgpfX0KQS5BTS5wcm90b3R5cGU9ewplUihhLGIpe0Eu -TVIoYiwiY291bnQiLHQuUykKQS5rMShiLCJjb3VudCIpCnJldHVybiBuZXcgQS5BTSh0aGlzLmEsdGhp -cy5iK2IsQS5MaCh0aGlzKS5DKCJBTTwxPiIpKX0sCmdBKGEpe3JldHVybiBuZXcgQS5VMShKLklUKHRo -aXMuYSksdGhpcy5iLEEuTGgodGhpcykuQygiVTE8MT4iKSl9fQpBLmQ1LnByb3RvdHlwZT17CmdrKGEp -e3ZhciBzPUouSG0odGhpcy5hKS10aGlzLmIKaWYocz49MClyZXR1cm4gcwpyZXR1cm4gMH0sCmVSKGEs -Yil7QS5NUihiLCJjb3VudCIsdC5TKQpBLmsxKGIsImNvdW50IikKcmV0dXJuIG5ldyBBLmQ1KHRoaXMu -YSx0aGlzLmIrYix0aGlzLiR0aSl9LAokaWJROjF9CkEuVTEucHJvdG90eXBlPXsKRygpe3ZhciBzLHIK -Zm9yKHM9dGhpcy5hLHI9MDtyPHRoaXMuYjsrK3Ipcy5HKCkKdGhpcy5iPTAKcmV0dXJuIHMuRygpfSwK -Z2woKXtyZXR1cm4gdGhpcy5hLmdsKCl9fQpBLk1CLnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBCLkd3 -fSwKZ2wwKGEpe3JldHVybiEwfSwKZ2soYSl7cmV0dXJuIDB9LApFKGEsYil7dGhyb3cgQS5iKEEuVEUo -YiwwLDAsImluZGV4IixudWxsKSl9LAplUihhLGIpe0EuazEoYiwiY291bnQiKQpyZXR1cm4gdGhpc319 -CkEuRnUucHJvdG90eXBlPXsKRygpe3JldHVybiExfSwKZ2woKXt0aHJvdyBBLmIoQS5XcCgpKX0sCiRp -QW46MX0KQS51Ni5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gbmV3IEEuSkIoSi5JVCh0aGlzLmEpLHRo -aXMuJHRpLkMoIkpCPDE+IikpfX0KQS5KQi5wcm90b3R5cGU9ewpHKCl7dmFyIHMscgpmb3Iocz10aGlz -LmEscj10aGlzLiR0aS5jO3MuRygpOylpZihyLmIocy5nbCgpKSlyZXR1cm4hMApyZXR1cm4hMX0sCmds -KCl7cmV0dXJuIHRoaXMuJHRpLmMuYSh0aGlzLmEuZ2woKSl9LAokaUFuOjF9CkEuU1UucHJvdG90eXBl -PXt9CkEuUmUucHJvdG90eXBlPXsKWTUoYSxiLGMpe0EuTGgodGhpcykuQygiUmUuRSIpLmEoYykKdGhy -b3cgQS5iKEEuTDQoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKSl9fQpBLncyLnBy -b3RvdHlwZT17fQpBLnd2LnByb3RvdHlwZT17CmdtKGEpe3ZhciBzPXRoaXMuX2hhc2hDb2RlCmlmKHMh -PW51bGwpcmV0dXJuIHMKcz02NjQ1OTcqSi5VMyh0aGlzLmEpJjUzNjg3MDkxMQp0aGlzLl9oYXNoQ29k -ZT1zCnJldHVybiBzfSwKIlsiKGEpe3JldHVybidTeW1ib2woIicrQS5Faih0aGlzLmEpKyciKSd9LApE -TihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKcmV0dXJuIGIgaW5zdGFuY2VvZiBBLnd2JiZ0aGlzLmE9 -PWIuYX0sCiRpR0Q6MX0KQS5RQy5wcm90b3R5cGU9e30KQS5QRC5wcm90b3R5cGU9e30KQS5XVS5wcm90 -b3R5cGU9ewpnbDAoYSl7cmV0dXJuIHRoaXMuZ2sodGhpcyk9PT0wfSwKIlsiKGEpe3JldHVybiBBLm5P -KHRoaXMpfSwKWTUoYSxiLGMpe3ZhciBzPUEuTGgodGhpcykKcy5jLmEoYikKcy56WzFdLmEoYykKQS5k -YygpfSwKZ1B1KGEpe3JldHVybiB0aGlzLnE0KDAsQS5MaCh0aGlzKS5DKCJOMzwxLDI+IikpfSwKcTQo -YSxiKXt2YXIgcz10aGlzCnJldHVybiBBLmwwKGZ1bmN0aW9uKCl7dmFyIHI9YQp2YXIgcT0wLHA9MSxv -LG4sbSxsLGssagpyZXR1cm4gZnVuY3Rpb24gJGFzeW5jJGdQdShjLGQpe2lmKGM9PT0xKXtvPWQKcT1w -fXdoaWxlKHRydWUpc3dpdGNoKHEpe2Nhc2UgMDpuPXMuZ3ZjKCksbj1uLmdBKG4pLG09QS5MaChzKSxs -PW0uelsxXSxtPW0uQygiQDwxPiIpLktxKGwpLkMoIk4zPDEsMj4iKQpjYXNlIDI6aWYoIW4uRygpKXtx -PTMKYnJlYWt9az1uLmdsKCkKaj1zLnEoMCxrKQpxPTQKcmV0dXJuIG5ldyBBLk4zKGssaj09bnVsbD9s -LmEoaik6aixtKQpjYXNlIDQ6cT0yCmJyZWFrCmNhc2UgMzpyZXR1cm4gQS5UaCgpCmNhc2UgMTpyZXR1 -cm4gQS5ZbShvKX19fSxiKX0sCiRpWjA6MX0KQS5MUC5wcm90b3R5cGU9ewpnayhhKXtyZXR1cm4gdGhp -cy5hfSwKeDQoYSl7aWYodHlwZW9mIGEhPSJzdHJpbmciKXJldHVybiExCmlmKCJfX3Byb3RvX18iPT09 -YSlyZXR1cm4hMQpyZXR1cm4gdGhpcy5iLmhhc093blByb3BlcnR5KGEpfSwKcShhLGIpe2lmKCF0aGlz -Lng0KGIpKXJldHVybiBudWxsCnJldHVybiB0aGlzLmJbQS5uKGIpXX0sCksoYSxiKXt2YXIgcyxyLHEs -cCxvLG49dGhpcy4kdGkKbi5DKCJ+KDEsMikiKS5hKGIpCnM9dGhpcy5jCmZvcihyPXMubGVuZ3RoLHE9 -dGhpcy5iLG49bi56WzFdLHA9MDtwPHI7KytwKXtvPUEubihzW3BdKQpiLiQyKG8sbi5hKHFbb10pKX19 -LApndmMoKXtyZXR1cm4gbmV3IEEuWFIodGhpcyx0aGlzLiR0aS5DKCJYUjwxPiIpKX19CkEuWFIucHJv -dG90eXBlPXsKZ0EoYSl7dmFyIHM9dGhpcy5hLmMKcmV0dXJuIG5ldyBKLm0xKHMscy5sZW5ndGgsQS50 -NihzKS5DKCJtMTwxPiIpKX0sCmdrKGEpe3JldHVybiB0aGlzLmEuYy5sZW5ndGh9fQpBLkxJLnByb3Rv -dHlwZT17CmdXYSgpe3ZhciBzPXRoaXMuYQpyZXR1cm4gc30sCmduZCgpe3ZhciBzLHIscSxwLG89dGhp -cwppZihvLmM9PT0xKXJldHVybiBCLmhVCnM9by5kCnI9cy5sZW5ndGgtby5lLmxlbmd0aC1vLmYKaWYo -cj09PTApcmV0dXJuIEIuaFUKcT1bXQpmb3IocD0wO3A8cjsrK3Ape2lmKCEocDxzLmxlbmd0aCkpcmV0 -dXJuIEEuT0gocyxwKQpxLnB1c2goc1twXSl9cmV0dXJuIEouekMocSl9LApnVm0oKXt2YXIgcyxyLHEs -cCxvLG4sbSxsLGs9dGhpcwppZihrLmMhPT0wKXJldHVybiBCLldPCnM9ay5lCnI9cy5sZW5ndGgKcT1r -LmQKcD1xLmxlbmd0aC1yLWsuZgppZihyPT09MClyZXR1cm4gQi5XTwpvPW5ldyBBLk41KHQuZW8pCmZv -cihuPTA7bjxyOysrbil7aWYoIShuPHMubGVuZ3RoKSlyZXR1cm4gQS5PSChzLG4pCm09c1tuXQpsPXAr -bgppZighKGw+PTAmJmw8cS5sZW5ndGgpKXJldHVybiBBLk9IKHEsbCkKby5ZNSgwLG5ldyBBLnd2KG0p -LHFbbF0pfXJldHVybiBuZXcgQS5QRChvLHQuZ0YpfSwKJGl2UToxfQpBLkNqLnByb3RvdHlwZT17CiQy -KGEsYil7dmFyIHMKQS5uKGEpCnM9dGhpcy5hCnMuYj1zLmIrIiQiK2EKQi5ObS5pKHRoaXMuYixhKQpC -Lk5tLmkodGhpcy5jLGIpOysrcy5hfSwKJFM6MTF9CkEuZjkucHJvdG90eXBlPXsKcVMoYSl7dmFyIHMs -cixxPXRoaXMscD1uZXcgUmVnRXhwKHEuYSkuZXhlYyhhKQppZihwPT1udWxsKXJldHVybiBudWxsCnM9 -T2JqZWN0LmNyZWF0ZShudWxsKQpyPXEuYgppZihyIT09LTEpcy5hcmd1bWVudHM9cFtyKzFdCnI9cS5j -CmlmKHIhPT0tMSlzLmFyZ3VtZW50c0V4cHI9cFtyKzFdCnI9cS5kCmlmKHIhPT0tMSlzLmV4cHI9cFty -KzFdCnI9cS5lCmlmKHIhPT0tMSlzLm1ldGhvZD1wW3IrMV0Kcj1xLmYKaWYociE9PS0xKXMucmVjZWl2 -ZXI9cFtyKzFdCnJldHVybiBzfX0KQS5XMC5wcm90b3R5cGU9ewoiWyIoYSl7dmFyIHM9dGhpcy5iCmlm -KHM9PW51bGwpcmV0dXJuIk5vU3VjaE1ldGhvZEVycm9yOiAiK3RoaXMuYQpyZXR1cm4iTm9TdWNoTWV0 -aG9kRXJyb3I6IG1ldGhvZCBub3QgZm91bmQ6ICciK3MrIicgb24gbnVsbCJ9fQpBLmF6LnByb3RvdHlw -ZT17CiJbIihhKXt2YXIgcyxyPXRoaXMscT0iTm9TdWNoTWV0aG9kRXJyb3I6IG1ldGhvZCBub3QgZm91 -bmQ6ICciLHA9ci5iCmlmKHA9PW51bGwpcmV0dXJuIk5vU3VjaE1ldGhvZEVycm9yOiAiK3IuYQpzPXIu -YwppZihzPT1udWxsKXJldHVybiBxK3ArIicgKCIrci5hKyIpIgpyZXR1cm4gcStwKyInIG9uICciK3Mr -IicgKCIrci5hKyIpIn19CkEudlYucHJvdG90eXBlPXsKIlsiKGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4g -cy5sZW5ndGg9PT0wPyJFcnJvciI6IkVycm9yOiAiK3N9fQpBLnRlLnByb3RvdHlwZT17CiJbIihhKXty -ZXR1cm4iVGhyb3cgb2YgbnVsbCAoJyIrKHRoaXMuYT09PW51bGw/Im51bGwiOiJ1bmRlZmluZWQiKSsi -JyBmcm9tIEphdmFTY3JpcHQpIn0sCiRpUno6MX0KQS5icS5wcm90b3R5cGU9e30KQS5YTy5wcm90b3R5 -cGU9ewoiWyIoYSl7dmFyIHMscj10aGlzLmIKaWYociE9bnVsbClyZXR1cm4gcgpyPXRoaXMuYQpzPXIh -PT1udWxsJiZ0eXBlb2Ygcj09PSJvYmplY3QiP3Iuc3RhY2s6bnVsbApyZXR1cm4gdGhpcy5iPXM9PW51 -bGw/IiI6c30sCiRpR3o6MX0KQS5UcC5wcm90b3R5cGU9ewoiWyIoYSl7dmFyIHM9dGhpcy5jb25zdHJ1 -Y3RvcixyPXM9PW51bGw/bnVsbDpzLm5hbWUKcmV0dXJuIkNsb3N1cmUgJyIrQS5OUShyPT1udWxsPyJ1 -bmtub3duIjpyKSsiJyJ9LAokaUVIOjEsCmdLdSgpe3JldHVybiB0aGlzfSwKJEM6IiQxIiwKJFI6MSwK -JEQ6bnVsbH0KQS5BeS5wcm90b3R5cGU9eyRDOiIkMCIsJFI6MH0KQS5FMS5wcm90b3R5cGU9eyRDOiIk -MiIsJFI6Mn0KQS5sYy5wcm90b3R5cGU9e30KQS56eC5wcm90b3R5cGU9ewoiWyIoYSl7dmFyIHM9dGhp -cy4kc3RhdGljX25hbWUKaWYocz09bnVsbClyZXR1cm4iQ2xvc3VyZSBvZiB1bmtub3duIHN0YXRpYyBt -ZXRob2QiCnJldHVybiJDbG9zdXJlICciK0EuTlEocykrIicifX0KQS5yVC5wcm90b3R5cGU9ewpETihh -LGIpe2lmKGI9PW51bGwpcmV0dXJuITEKaWYodGhpcz09PWIpcmV0dXJuITAKaWYoIShiIGluc3RhbmNl -b2YgQS5yVCkpcmV0dXJuITEKcmV0dXJuIHRoaXMuJF90YXJnZXQ9PT1iLiRfdGFyZ2V0JiZ0aGlzLmE9 -PT1iLmF9LApnbShhKXtyZXR1cm4oQS5DVSh0aGlzLmEpXkEuZVEodGhpcy4kX3RhcmdldCkpPj4+MH0s -CiJbIihhKXtyZXR1cm4iQ2xvc3VyZSAnIit0aGlzLiRfbmFtZSsiJyBvZiAiKygiSW5zdGFuY2Ugb2Yg -JyIrQS5saCh0aGlzLmEpKyInIil9fQpBLkVxLnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4iUnVudGlt -ZUVycm9yOiAiK3RoaXMuYX19CkEua1kucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiJBc3NlcnRpb24g -ZmFpbGVkOiAiK0EuaGwodGhpcy5hKX19CkEua3IucHJvdG90eXBlPXt9CkEuTjUucHJvdG90eXBlPXsK -Z2soYSl7cmV0dXJuIHRoaXMuYX0sCmdsMChhKXtyZXR1cm4gdGhpcy5hPT09MH0sCmd2Yygpe3JldHVy -biBuZXcgQS5pNSh0aGlzLEEuTGgodGhpcykuQygiaTU8MT4iKSl9LAp4NChhKXt2YXIgcz10aGlzLmIK -aWYocz09bnVsbClyZXR1cm4hMQpyZXR1cm4gc1thXSE9bnVsbH0sCnEoYSxiKXt2YXIgcyxyLHEscCxv -PW51bGwKaWYodHlwZW9mIGI9PSJzdHJpbmciKXtzPXRoaXMuYgppZihzPT1udWxsKXJldHVybiBvCnI9 -c1tiXQpxPXI9PW51bGw/bzpyLmIKcmV0dXJuIHF9ZWxzZSBpZih0eXBlb2YgYj09Im51bWJlciImJihi -JjB4M2ZmZmZmZmYpPT09Yil7cD10aGlzLmMKaWYocD09bnVsbClyZXR1cm4gbwpyPXBbYl0KcT1yPT1u -dWxsP286ci5iCnJldHVybiBxfWVsc2UgcmV0dXJuIHRoaXMuYWEoYil9LAphYShhKXt2YXIgcyxyLHE9 -dGhpcy5kCmlmKHE9PW51bGwpcmV0dXJuIG51bGwKcz1xW3RoaXMueGkoYSldCnI9dGhpcy5GaChzLGEp -CmlmKHI8MClyZXR1cm4gbnVsbApyZXR1cm4gc1tyXS5ifSwKWTUoYSxiLGMpe3ZhciBzLHIscT10aGlz -LHA9QS5MaChxKQpwLmMuYShiKQpwLnpbMV0uYShjKQppZih0eXBlb2YgYj09InN0cmluZyIpe3M9cS5i -CnEuRUgocz09bnVsbD9xLmI9cS56SygpOnMsYixjKX1lbHNlIGlmKHR5cGVvZiBiPT0ibnVtYmVyIiYm -KGImMHgzZmZmZmZmZik9PT1iKXtyPXEuYwpxLkVIKHI9PW51bGw/cS5jPXEueksoKTpyLGIsYyl9ZWxz -ZSBxLnh3KGIsYyl9LAp4dyhhLGIpe3ZhciBzLHIscSxwLG89dGhpcyxuPUEuTGgobykKbi5jLmEoYSkK -bi56WzFdLmEoYikKcz1vLmQKaWYocz09bnVsbClzPW8uZD1vLnpLKCkKcj1vLnhpKGEpCnE9c1tyXQpp -ZihxPT1udWxsKXNbcl09W28uSG4oYSxiKV0KZWxzZXtwPW8uRmgocSxhKQppZihwPj0wKXFbcF0uYj1i -CmVsc2UgcS5wdXNoKG8uSG4oYSxiKSl9fSwKSyhhLGIpe3ZhciBzLHIscT10aGlzCkEuTGgocSkuQygi -figxLDIpIikuYShiKQpzPXEuZQpyPXEucgpmb3IoO3MhPW51bGw7KXtiLiQyKHMuYSxzLmIpCmlmKHIh -PT1xLnIpdGhyb3cgQS5iKEEuYTQocSkpCnM9cy5jfX0sCkVIKGEsYixjKXt2YXIgcyxyPUEuTGgodGhp -cykKci5jLmEoYikKci56WzFdLmEoYykKcz1hW2JdCmlmKHM9PW51bGwpYVtiXT10aGlzLkhuKGIsYykK -ZWxzZSBzLmI9Y30sCmtzKCl7dGhpcy5yPXRoaXMucisxJjEwNzM3NDE4MjN9LApIbihhLGIpe3ZhciBz -PXRoaXMscj1BLkxoKHMpLHE9bmV3IEEudmgoci5jLmEoYSksci56WzFdLmEoYikpCmlmKHMuZT09bnVs -bClzLmU9cy5mPXEKZWxzZXtyPXMuZgpyLnRvU3RyaW5nCnEuZD1yCnMuZj1yLmM9cX0rK3MuYQpzLmtz -KCkKcmV0dXJuIHF9LAp4aShhKXtyZXR1cm4gSi5VMyhhKSYweDNmZmZmZmZmfSwKRmgoYSxiKXt2YXIg -cyxyCmlmKGE9PW51bGwpcmV0dXJuLTEKcz1hLmxlbmd0aApmb3Iocj0wO3I8czsrK3IpaWYoSi5STShh -W3JdLmEsYikpcmV0dXJuIHIKcmV0dXJuLTF9LAoiWyIoYSl7cmV0dXJuIEEubk8odGhpcyl9LAp6Sygp -e3ZhciBzPU9iamVjdC5jcmVhdGUobnVsbCkKc1siPG5vbi1pZGVudGlmaWVyLWtleT4iXT1zCmRlbGV0 -ZSBzWyI8bm9uLWlkZW50aWZpZXIta2V5PiJdCnJldHVybiBzfSwKJGlGbzoxfQpBLnZoLnByb3RvdHlw -ZT17fQpBLmk1LnByb3RvdHlwZT17CmdrKGEpe3JldHVybiB0aGlzLmEuYX0sCmdsMChhKXtyZXR1cm4g -dGhpcy5hLmE9PT0wfSwKZ0EoYSl7dmFyIHM9dGhpcy5hLHI9bmV3IEEuTjYocyxzLnIsdGhpcy4kdGku -QygiTjY8MT4iKSkKci5jPXMuZQpyZXR1cm4gcn0sCnRnKGEsYil7cmV0dXJuIHRoaXMuYS54NChiKX19 -CkEuTjYucHJvdG90eXBlPXsKZ2woKXtyZXR1cm4gdGhpcy5kfSwKRygpe3ZhciBzLHI9dGhpcyxxPXIu -YQppZihyLmIhPT1xLnIpdGhyb3cgQS5iKEEuYTQocSkpCnM9ci5jCmlmKHM9PW51bGwpe3Iuc3FZKG51 -bGwpCnJldHVybiExfWVsc2V7ci5zcVkocy5hKQpyLmM9cy5jCnJldHVybiEwfX0sCnNxWShhKXt0aGlz -LmQ9dGhpcy4kdGkuQygiMT8iKS5hKGEpfSwKJGlBbjoxfQpBLmRDLnByb3RvdHlwZT17CiQxKGEpe3Jl -dHVybiB0aGlzLmEoYSl9LAokUzozfQpBLndOLnByb3RvdHlwZT17CiQyKGEsYil7cmV0dXJuIHRoaXMu -YShhLGIpfSwKJFM6NTF9CkEuVlgucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHRoaXMuYShBLm4oYSkp -fSwKJFM6NDF9CkEuVlIucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiJSZWdFeHAvIit0aGlzLmErIi8i -K3RoaXMuYi5mbGFnc30sCmdIYygpe3ZhciBzPXRoaXMscj1zLmMKaWYociE9bnVsbClyZXR1cm4gcgpy -PXMuYgpyZXR1cm4gcy5jPUEudjQocy5hLHIubXVsdGlsaW5lLCFyLmlnbm9yZUNhc2Usci51bmljb2Rl -LHIuZG90QWxsLCEwKX0sCmRkKGEsYil7cmV0dXJuIG5ldyBBLktXKHRoaXMsYiwwKX0sClVaKGEsYil7 -dmFyIHMscj10aGlzLmdIYygpCmlmKHI9PW51bGwpcj10LksuYShyKQpyLmxhc3RJbmRleD1iCnM9ci5l -eGVjKGEpCmlmKHM9PW51bGwpcmV0dXJuIG51bGwKcmV0dXJuIG5ldyBBLkVLKHMpfSwKJGl2WDoxLAok -aXdMOjF9CkEuRUsucHJvdG90eXBlPXsKcShhLGIpe3ZhciBzCkEuSVooYikKcz10aGlzLmIKaWYoIShi -PHMubGVuZ3RoKSlyZXR1cm4gQS5PSChzLGIpCnJldHVybiBzW2JdfSwKJGlPZDoxLAokaWliOjF9CkEu -S1cucHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIG5ldyBBLlBiKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX19 -CkEuUGIucHJvdG90eXBlPXsKZ2woKXt2YXIgcz10aGlzLmQKcmV0dXJuIHM9PW51bGw/dC5jei5hKHMp -OnN9LApHKCl7dmFyIHMscixxLHAsbyxuLG09dGhpcyxsPW0uYgppZihsPT1udWxsKXJldHVybiExCnM9 -bS5jCnI9bC5sZW5ndGgKaWYoczw9cil7cT1tLmEKcD1xLlVaKGwscykKaWYocCE9bnVsbCl7bS5kPXAK -cz1wLmIKbz1zLmluZGV4Cm49bytzWzBdLmxlbmd0aAppZihvPT09bil7aWYocS5iLnVuaWNvZGUpe3M9 -bS5jCnE9cysxCmlmKHE8cil7cz1CLnhCLk8obCxzKQppZihzPj01NTI5NiYmczw9NTYzMTkpe3M9Qi54 -Qi5PKGwscSkKcz1zPj01NjMyMCYmczw9NTczNDN9ZWxzZSBzPSExfWVsc2Ugcz0hMX1lbHNlIHM9ITEK -bj0ocz9uKzE6bikrMX1tLmM9bgpyZXR1cm4hMH19bS5iPW0uZD1udWxsCnJldHVybiExfSwKJGlBbjox -fQpBLnRRLnByb3RvdHlwZT17CnEoYSxiKXtBLklaKGIpCmlmKGIhPT0wKUEudihBLk83KGIsbnVsbCkp -CnJldHVybiB0aGlzLmN9LAokaU9kOjF9CkEudW4ucHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIG5ldyBB -LlNkKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX19CkEuU2QucHJvdG90eXBlPXsKRygpe3ZhciBzLHIscT10 -aGlzLHA9cS5jLG89cS5iLG49by5sZW5ndGgsbT1xLmEsbD1tLmxlbmd0aAppZihwK24+bCl7cS5kPW51 -bGwKcmV0dXJuITF9cz1tLmluZGV4T2YobyxwKQppZihzPDApe3EuYz1sKzEKcS5kPW51bGwKcmV0dXJu -ITF9cj1zK24KcS5kPW5ldyBBLnRRKHMsbykKcS5jPXI9PT1xLmM/cisxOnIKcmV0dXJuITB9LApnbCgp -e3ZhciBzPXRoaXMuZApzLnRvU3RyaW5nCnJldHVybiBzfSwKJGlBbjoxfQpBLkVULnByb3RvdHlwZT17 -JGlFVDoxLCRpQVM6MX0KQS5MWi5wcm90b3R5cGU9ewpnayhhKXtyZXR1cm4gYS5sZW5ndGh9LAokaVhq -OjF9CkEuRGcucHJvdG90eXBlPXsKcShhLGIpe0EuSVooYikKQS5vZChiLGEsYS5sZW5ndGgpCnJldHVy -biBhW2JdfSwKWTUoYSxiLGMpe0EuclYoYykKQS5vZChiLGEsYS5sZW5ndGgpCmFbYl09Y30sCiRpYlE6 -MSwKJGljWDoxLAokaXpNOjF9CkEuUGcucHJvdG90eXBlPXsKWTUoYSxiLGMpe0EuSVooYykKQS5vZChi -LGEsYS5sZW5ndGgpCmFbYl09Y30sCiRpYlE6MSwKJGljWDoxLAokaXpNOjF9CkEueGoucHJvdG90eXBl -PXsKcShhLGIpe0EuSVooYikKQS5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KQS5kRS5wcm90 -b3R5cGU9ewpxKGEsYil7QS5JWihiKQpBLm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19fQpBLlpB -LnByb3RvdHlwZT17CnEoYSxiKXtBLklaKGIpCkEub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19 -CkEuZFQucHJvdG90eXBlPXsKcShhLGIpe0EuSVooYikKQS5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBh -W2JdfX0KQS5QcS5wcm90b3R5cGU9ewpxKGEsYil7QS5JWihiKQpBLm9kKGIsYSxhLmxlbmd0aCkKcmV0 -dXJuIGFbYl19fQpBLmVFLnByb3RvdHlwZT17CmdrKGEpe3JldHVybiBhLmxlbmd0aH0sCnEoYSxiKXtB -LklaKGIpCkEub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19CkEuVjYucHJvdG90eXBlPXsKZ2so -YSl7cmV0dXJuIGEubGVuZ3RofSwKcShhLGIpe0EuSVooYikKQS5vZChiLGEsYS5sZW5ndGgpCnJldHVy -biBhW2JdfSwKJGluNjoxfQpBLlJHLnByb3RvdHlwZT17fQpBLlZQLnByb3RvdHlwZT17fQpBLldCLnBy -b3RvdHlwZT17fQpBLlpHLnByb3RvdHlwZT17fQpBLkpjLnByb3RvdHlwZT17CkMoYSl7cmV0dXJuIEEu -Y0Uodi50eXBlVW5pdmVyc2UsdGhpcyxhKX0sCktxKGEpe3JldHVybiBBLnY1KHYudHlwZVVuaXZlcnNl -LHRoaXMsYSl9fQpBLkcucHJvdG90eXBlPXt9CkEubFkucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiBB -LmRtKHRoaXMuYSxudWxsKX19CkEua1MucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiB0aGlzLmF9fQpB -LmlNLnByb3RvdHlwZT17JGlFejoxfQpBLnRoLnByb3RvdHlwZT17CiQxKGEpe3ZhciBzPXRoaXMuYSxy -PXMuYQpzLmE9bnVsbApyLiQwKCl9LAokUzo3fQpBLmhhLnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHIK -dGhpcy5hLmE9dC5NLmEoYSkKcz10aGlzLmIKcj10aGlzLmMKcy5maXJzdENoaWxkP3MucmVtb3ZlQ2hp -bGQocik6cy5hcHBlbmRDaGlsZChyKX0sCiRTOjQwfQpBLlZzLnByb3RvdHlwZT17CiQwKCl7dGhpcy5h -LiQwKCl9LAokUzo4fQpBLkZ0LnByb3RvdHlwZT17CiQwKCl7dGhpcy5hLiQwKCl9LAokUzo4fQpBLlcz -LnByb3RvdHlwZT17CkNZKGEsYil7aWYoc2VsZi5zZXRUaW1lb3V0IT1udWxsKXNlbGYuc2V0VGltZW91 -dChBLnRSKG5ldyBBLnlIKHRoaXMsYiksMCksYSkKZWxzZSB0aHJvdyBBLmIoQS5MNCgiYHNldFRpbWVv -dXQoKWAgbm90IGZvdW5kLiIpKX19CkEueUgucHJvdG90eXBlPXsKJDAoKXt0aGlzLmIuJDAoKX0sCiRT -OjB9CkEuaWgucHJvdG90eXBlPXsKYU0oYSxiKXt2YXIgcyxyPXRoaXMscT1yLiR0aQpxLkMoIjEvPyIp -LmEoYikKaWYoYj09bnVsbClxLmMuYShiKQppZighci5iKXIuYS5YZihiKQplbHNle3M9ci5hCmlmKHEu -QygiYjg8MT4iKS5iKGIpKXMuY1UoYikKZWxzZSBzLlgyKHEuYy5hKGIpKX19LAp3MChhLGIpe3ZhciBz -PXRoaXMuYQppZih0aGlzLmIpcy5aTChhLGIpCmVsc2Ugcy5OayhhLGIpfX0KQS5XTS5wcm90b3R5cGU9 -ewokMShhKXtyZXR1cm4gdGhpcy5hLiQyKDAsYSl9LAokUzoyMX0KQS5TWC5wcm90b3R5cGU9ewokMihh -LGIpe3RoaXMuYS4kMigxLG5ldyBBLmJxKGEsdC5sLmEoYikpKX0sCiRTOjI0fQpBLkdzLnByb3RvdHlw -ZT17CiQyKGEsYil7dGhpcy5hKEEuSVooYSksYil9LAokUzoyNn0KQS5GeS5wcm90b3R5cGU9ewoiWyIo -YSl7cmV0dXJuIkl0ZXJhdGlvbk1hcmtlcigiK3RoaXMuYisiLCAiK0EuRWoodGhpcy5hKSsiKSJ9fQpB -LkdWLnByb3RvdHlwZT17CmdsKCl7dmFyIHMscj10aGlzLmMKaWYocj09bnVsbCl7cz10aGlzLmIKcmV0 -dXJuIHM9PW51bGw/dGhpcy4kdGkuYy5hKHMpOnN9cmV0dXJuIHIuZ2woKX0sCkcoKXt2YXIgcyxyLHEs -cCxvLG4sbT10aGlzCmZvcihzPW0uJHRpLkMoIkFuPDE+Iik7ITA7KXtyPW0uYwppZihyIT1udWxsKWlm -KHIuRygpKXJldHVybiEwCmVsc2UgbS5zWDkobnVsbCkKcT1mdW5jdGlvbihhLGIsYyl7dmFyIGwsaz1i -CndoaWxlKHRydWUpdHJ5e3JldHVybiBhKGssbCl9Y2F0Y2goail7bD1qCms9Y319KG0uYSwwLDEpCmlm -KHEgaW5zdGFuY2VvZiBBLkZ5KXtwPXEuYgppZihwPT09Mil7bz1tLmQKaWYobz09bnVsbHx8by5sZW5n -dGg9PT0wKXttLnNFQyhudWxsKQpyZXR1cm4hMX1pZigwPj1vLmxlbmd0aClyZXR1cm4gQS5PSChvLC0x -KQptLmE9by5wb3AoKQpjb250aW51ZX1lbHNle3I9cS5hCmlmKHA9PT0zKXRocm93IHIKZWxzZXtuPXMu -YShKLklUKHIpKQppZihuIGluc3RhbmNlb2YgQS5HVil7cj1tLmQKaWYocj09bnVsbClyPW0uZD1bXQpC -Lk5tLmkocixtLmEpCm0uYT1uLmEKY29udGludWV9ZWxzZXttLnNYOShuKQpjb250aW51ZX19fX1lbHNl -e20uc0VDKHEpCnJldHVybiEwfX1yZXR1cm4hMX0sCnNFQyhhKXt0aGlzLmI9dGhpcy4kdGkuQygiMT8i -KS5hKGEpfSwKc1g5KGEpe3RoaXMuYz10aGlzLiR0aS5DKCJBbjwxPj8iKS5hKGEpfSwKJGlBbjoxfQpB -LnE0LnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBuZXcgQS5HVih0aGlzLmEoKSx0aGlzLiR0aS5DKCJH -VjwxPiIpKX19CkEuQ3cucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiBBLkVqKHRoaXMuYSl9LAokaVhT -OjEsCmdJSSgpe3JldHVybiB0aGlzLmJ9fQpBLlBmLnByb3RvdHlwZT17CncwKGEsYil7dmFyIHMKQS5j -YihhLCJlcnJvciIsdC5LKQpzPXRoaXMuYQppZigocy5hJjMwKSE9PTApdGhyb3cgQS5iKEEuUFYoIkZ1 -dHVyZSBhbHJlYWR5IGNvbXBsZXRlZCIpKQppZihiPT1udWxsKWI9QS52MChhKQpzLk5rKGEsYil9LApw -bShhKXtyZXR1cm4gdGhpcy53MChhLG51bGwpfX0KQS5aZi5wcm90b3R5cGU9ewphTShhLGIpe3ZhciBz -LHI9dGhpcy4kdGkKci5DKCIxLz8iKS5hKGIpCnM9dGhpcy5hCmlmKChzLmEmMzApIT09MCl0aHJvdyBB -LmIoQS5QVigiRnV0dXJlIGFscmVhZHkgY29tcGxldGVkIikpCnMuWGYoci5DKCIxLyIpLmEoYikpfX0K -QS5GZS5wcm90b3R5cGU9ewpIUihhKXtpZigodGhpcy5jJjE1KSE9PTYpcmV0dXJuITAKcmV0dXJuIHRo -aXMuYi5iLmJ2KHQuYWwuYSh0aGlzLmQpLGEuYSx0LnksdC5LKX0sCkt3KGEpe3ZhciBzLHI9dGhpcyxx -PXIuZSxwPW51bGwsbz10Lnosbj10LkssbT1hLmEsbD1yLmIuYgppZih0Lm0uYihxKSlwPWwucnAocSxt -LGEuYixvLG4sdC5sKQplbHNlIHA9bC5idih0LnYuYShxKSxtLG8sbikKdHJ5e289ci4kdGkuQygiMi8i -KS5hKHApCnJldHVybiBvfWNhdGNoKHMpe2lmKHQuZUsuYihBLlJ1KHMpKSl7aWYoKHIuYyYxKSE9PTAp -dGhyb3cgQS5iKEEueFkoIlRoZSBlcnJvciBoYW5kbGVyIG9mIEZ1dHVyZS50aGVuIG11c3QgcmV0dXJu -IGEgdmFsdWUgb2YgdGhlIHJldHVybmVkIGZ1dHVyZSdzIHR5cGUiLCJvbkVycm9yIikpCnRocm93IEEu -YihBLnhZKCJUaGUgZXJyb3IgaGFuZGxlciBvZiBGdXR1cmUuY2F0Y2hFcnJvciBtdXN0IHJldHVybiBh -IHZhbHVlIG9mIHRoZSBmdXR1cmUncyB0eXBlIiwib25FcnJvciIpKX1lbHNlIHRocm93IHN9fX0KQS52 -cy5wcm90b3R5cGU9ewpTcShhLGIsYyl7dmFyIHMscixxLHA9dGhpcy4kdGkKcC5LcShjKS5DKCIxLygy -KSIpLmEoYSkKcz0kLlgzCmlmKHM9PT1CLk5VKXtpZihiIT1udWxsJiYhdC5tLmIoYikmJiF0LnYuYihi -KSl0aHJvdyBBLmIoQS5MMyhiLCJvbkVycm9yIix1LmMpKX1lbHNle2MuQygiQDwwLz4iKS5LcShwLmMp -LkMoIjEoMikiKS5hKGEpCmlmKGIhPW51bGwpYj1BLlZIKGIscyl9cj1uZXcgQS52cyhzLGMuQygidnM8 -MD4iKSkKcT1iPT1udWxsPzE6Mwp0aGlzLnhmKG5ldyBBLkZlKHIscSxhLGIscC5DKCJAPDE+IikuS3Eo -YykuQygiRmU8MSwyPiIpKSkKcmV0dXJuIHJ9LApXNyhhLGIpe3JldHVybiB0aGlzLlNxKGEsbnVsbCxi -KX0sClFkKGEsYixjKXt2YXIgcyxyPXRoaXMuJHRpCnIuS3EoYykuQygiMS8oMikiKS5hKGEpCnM9bmV3 -IEEudnMoJC5YMyxjLkMoInZzPDA+IikpCnRoaXMueGYobmV3IEEuRmUocywzLGEsYixyLkMoIkA8MT4i -KS5LcShjKS5DKCJGZTwxLDI+IikpKQpyZXR1cm4gc30sClA5KGEpe3RoaXMuYT10aGlzLmEmMXwxNgp0 -aGlzLmM9YX0sCnVnKGEpe3RoaXMuYT1hLmEmMzB8dGhpcy5hJjEKdGhpcy5jPWEuY30sCnhmKGEpe3Zh -ciBzLHI9dGhpcyxxPXIuYQppZihxPD0zKXthLmE9dC5lLmEoci5jKQpyLmM9YX1lbHNle2lmKChxJjQp -IT09MCl7cz10LmMuYShyLmMpCmlmKChzLmEmMjQpPT09MCl7cy54ZihhKQpyZXR1cm59ci51ZyhzKX1B -LlRrKG51bGwsbnVsbCxyLmIsdC5NLmEobmV3IEEuZGEocixhKSkpfX0sCmpRKGEpe3ZhciBzLHIscSxw -LG8sbixtPXRoaXMsbD17fQpsLmE9YQppZihhPT1udWxsKXJldHVybgpzPW0uYQppZihzPD0zKXtyPXQu -ZS5hKG0uYykKbS5jPWEKaWYociE9bnVsbCl7cT1hLmEKZm9yKHA9YTtxIT1udWxsO3A9cSxxPW8pbz1x -LmEKcC5hPXJ9fWVsc2V7aWYoKHMmNCkhPT0wKXtuPXQuYy5hKG0uYykKaWYoKG4uYSYyNCk9PT0wKXtu -LmpRKGEpCnJldHVybn1tLnVnKG4pfWwuYT1tLk44KGEpCkEuVGsobnVsbCxudWxsLG0uYix0Lk0uYShu -ZXcgQS5vUShsLG0pKSl9fSwKYWgoKXt2YXIgcz10LmUuYSh0aGlzLmMpCnRoaXMuYz1udWxsCnJldHVy -biB0aGlzLk44KHMpfSwKTjgoYSl7dmFyIHMscixxCmZvcihzPWEscj1udWxsO3MhPW51bGw7cj1zLHM9 -cSl7cT1zLmEKcy5hPXJ9cmV0dXJuIHJ9LAplYyhhKXt2YXIgcyxyLHEscD10aGlzCnAuYV49Mgp0cnl7 -YS5TcShuZXcgQS5wVihwKSxuZXcgQS5VNyhwKSx0LlApfWNhdGNoKHEpe3M9QS5SdShxKQpyPUEudHMo -cSkKQS5yYihuZXcgQS52cihwLHMscikpfX0sClgyKGEpe3ZhciBzLHI9dGhpcwpyLiR0aS5jLmEoYSkK -cz1yLmFoKCkKci5hPTgKci5jPWEKQS5IWihyLHMpfSwKWkwoYSxiKXt2YXIgcwp0LmwuYShiKQpzPXRo -aXMuYWgoKQp0aGlzLlA5KEEuVGwoYSxiKSkKQS5IWih0aGlzLHMpfSwKWGYoYSl7dmFyIHM9dGhpcy4k -dGkKcy5DKCIxLyIpLmEoYSkKaWYocy5DKCJiODwxPiIpLmIoYSkpe3RoaXMuY1UoYSkKcmV0dXJufXRo -aXMud1Uocy5jLmEoYSkpfSwKd1UoYSl7dmFyIHM9dGhpcwpzLiR0aS5jLmEoYSkKcy5hXj0yCkEuVGso -bnVsbCxudWxsLHMuYix0Lk0uYShuZXcgQS5ydChzLGEpKSl9LApjVShhKXt2YXIgcz10aGlzLHI9cy4k -dGkKci5DKCJiODwxPiIpLmEoYSkKaWYoci5iKGEpKXtpZigoYS5hJjE2KSE9PTApe3MuYV49MgpBLlRr -KG51bGwsbnVsbCxzLmIsdC5NLmEobmV3IEEuS0YocyxhKSkpfWVsc2UgQS5BOShhLHMpCnJldHVybn1z -LmVjKGEpfSwKTmsoYSxiKXt0aGlzLmFePTIKQS5UayhudWxsLG51bGwsdGhpcy5iLHQuTS5hKG5ldyBB -LlpMKHRoaXMsYSxiKSkpfSwKJGliODoxfQpBLmRhLnByb3RvdHlwZT17CiQwKCl7QS5IWih0aGlzLmEs -dGhpcy5iKX0sCiRTOjB9CkEub1EucHJvdG90eXBlPXsKJDAoKXtBLkhaKHRoaXMuYix0aGlzLmEuYSl9 -LAokUzowfQpBLnBWLnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHIscSxwPXRoaXMuYQpwLmFePTIKdHJ5 -e3AuWDIocC4kdGkuYy5hKGEpKX1jYXRjaChxKXtzPUEuUnUocSkKcj1BLnRzKHEpCnAuWkwocyxyKX19 -LAokUzo3fQpBLlU3LnByb3RvdHlwZT17CiQyKGEsYil7dGhpcy5hLlpMKHQuSy5hKGEpLHQubC5hKGIp -KX0sCiRTOjI5fQpBLnZyLnByb3RvdHlwZT17CiQwKCl7dGhpcy5hLlpMKHRoaXMuYix0aGlzLmMpfSwK -JFM6MH0KQS5ydC5wcm90b3R5cGU9ewokMCgpe3RoaXMuYS5YMih0aGlzLmIpfSwKJFM6MH0KQS5LRi5w -cm90b3R5cGU9ewokMCgpe0EuQTkodGhpcy5iLHRoaXMuYSl9LAokUzowfQpBLlpMLnByb3RvdHlwZT17 -CiQwKCl7dGhpcy5hLlpMKHRoaXMuYix0aGlzLmMpfSwKJFM6MH0KQS5SVC5wcm90b3R5cGU9ewokMCgp -e3ZhciBzLHIscSxwLG8sbixtPXRoaXMsbD1udWxsCnRyeXtxPW0uYS5hCmw9cS5iLmIuenoodC5mTy5h -KHEuZCksdC56KX1jYXRjaChwKXtzPUEuUnUocCkKcj1BLnRzKHApCnE9bS5jJiZ0Lm4uYShtLmIuYS5j -KS5hPT09cwpvPW0uYQppZihxKW8uYz10Lm4uYShtLmIuYS5jKQplbHNlIG8uYz1BLlRsKHMscikKby5i -PSEwCnJldHVybn1pZihsIGluc3RhbmNlb2YgQS52cyYmKGwuYSYyNCkhPT0wKXtpZigobC5hJjE2KSE9 -PTApe3E9bS5hCnEuYz10Lm4uYShsLmMpCnEuYj0hMH1yZXR1cm59aWYodC5pLmIobCkpe249bS5iLmEK -cT1tLmEKcS5jPWwuVzcobmV3IEEualoobiksdC56KQpxLmI9ITF9fSwKJFM6MH0KQS5qWi5wcm90b3R5 -cGU9ewokMShhKXtyZXR1cm4gdGhpcy5hfSwKJFM6MzR9CkEucnEucHJvdG90eXBlPXsKJDAoKXt2YXIg -cyxyLHEscCxvLG4sbSxsCnRyeXtxPXRoaXMuYQpwPXEuYQpvPXAuJHRpCm49by5jCm09bi5hKHRoaXMu -YikKcS5jPXAuYi5iLmJ2KG8uQygiMi8oMSkiKS5hKHAuZCksbSxvLkMoIjIvIiksbil9Y2F0Y2gobCl7 -cz1BLlJ1KGwpCnI9QS50cyhsKQpxPXRoaXMuYQpxLmM9QS5UbChzLHIpCnEuYj0hMH19LAokUzowfQpB -LlJXLnByb3RvdHlwZT17CiQwKCl7dmFyIHMscixxLHAsbyxuLG09dGhpcwp0cnl7cz10Lm4uYShtLmEu -YS5jKQpwPW0uYgppZihwLmEuSFIocykmJnAuYS5lIT1udWxsKXtwLmM9cC5hLkt3KHMpCnAuYj0hMX19 -Y2F0Y2gobyl7cj1BLlJ1KG8pCnE9QS50cyhvKQpwPXQubi5hKG0uYS5hLmMpCm49bS5iCmlmKHAuYT09 -PXIpbi5jPXAKZWxzZSBuLmM9QS5UbChyLHEpCm4uYj0hMH19LAokUzowfQpBLk9NLnByb3RvdHlwZT17 -fQpBLnFoLnByb3RvdHlwZT17CmdrKGEpe3ZhciBzLHIscT10aGlzLHA9e30sbz1uZXcgQS52cygkLlgz -LHQuZkopCnAuYT0wCnM9QS5MaChxKQpyPXMuQygifigxKT8iKS5hKG5ldyBBLkI1KHAscSkpCnQuWi5h -KG5ldyBBLnVPKHAsbykpCkEuSkUocS5hLHEuYixyLCExLHMuYykKcmV0dXJuIG99fQpBLkI1LnByb3Rv -dHlwZT17CiQxKGEpe0EuTGgodGhpcy5iKS5jLmEoYSk7Kyt0aGlzLmEuYX0sCiRTKCl7cmV0dXJuIEEu -TGgodGhpcy5iKS5DKCJ+KDEpIil9fQpBLnVPLnByb3RvdHlwZT17CiQwKCl7dmFyIHM9dGhpcy5iLHI9 -cy4kdGkscT1yLkMoIjEvIikuYSh0aGlzLmEuYSkscD1zLmFoKCkKci5jLmEocSkKcy5hPTgKcy5jPXEK -QS5IWihzLHApfSwKJFM6MH0KQS5NTy5wcm90b3R5cGU9e30KQS5rVC5wcm90b3R5cGU9e30KQS54SS5w -cm90b3R5cGU9e30KQS5tMC5wcm90b3R5cGU9eyRpUW06MX0KQS5Fdi5wcm90b3R5cGU9ewokMCgpe3Zh -ciBzPXRoaXMuYSxyPXRoaXMuYgpBLmNiKHMsImVycm9yIix0LkspCkEuY2Iociwic3RhY2tUcmFjZSIs -dC5sKQpBLk8xKHMscil9LAokUzowfQpBLkppLnByb3RvdHlwZT17CmJIKGEpe3ZhciBzLHIscQp0Lk0u -YShhKQp0cnl7aWYoQi5OVT09PSQuWDMpe2EuJDAoKQpyZXR1cm59QS5UOChudWxsLG51bGwsdGhpcyxh -LHQuSCl9Y2F0Y2gocSl7cz1BLlJ1KHEpCnI9QS50cyhxKQpBLlNpKHQuSy5hKHMpLHQubC5hKHIpKX19 -LApEbChhLGIsYyl7dmFyIHMscixxCmMuQygifigwKSIpLmEoYSkKYy5hKGIpCnRyeXtpZihCLk5VPT09 -JC5YMyl7YS4kMShiKQpyZXR1cm59QS55dihudWxsLG51bGwsdGhpcyxhLGIsdC5ILGMpfWNhdGNoKHEp -e3M9QS5SdShxKQpyPUEudHMocSkKQS5TaSh0LksuYShzKSx0LmwuYShyKSl9fSwKR1koYSl7cmV0dXJu -IG5ldyBBLlZwKHRoaXMsdC5NLmEoYSkpfSwKUHkoYSxiKXtyZXR1cm4gbmV3IEEuT1IodGhpcyxiLkMo -In4oMCkiKS5hKGEpLGIpfSwKcShhLGIpe3JldHVybiBudWxsfSwKenooYSxiKXtiLkMoIjAoKSIpLmEo -YSkKaWYoJC5YMz09PUIuTlUpcmV0dXJuIGEuJDAoKQpyZXR1cm4gQS5UOChudWxsLG51bGwsdGhpcyxh -LGIpfSwKYnYoYSxiLGMsZCl7Yy5DKCJAPDA+IikuS3EoZCkuQygiMSgyKSIpLmEoYSkKZC5hKGIpCmlm -KCQuWDM9PT1CLk5VKXJldHVybiBhLiQxKGIpCnJldHVybiBBLnl2KG51bGwsbnVsbCx0aGlzLGEsYixj -LGQpfSwKcnAoYSxiLGMsZCxlLGYpe2QuQygiQDwwPiIpLktxKGUpLktxKGYpLkMoIjEoMiwzKSIpLmEo -YSkKZS5hKGIpCmYuYShjKQppZigkLlgzPT09Qi5OVSlyZXR1cm4gYS4kMihiLGMpCnJldHVybiBBLlF4 -KG51bGwsbnVsbCx0aGlzLGEsYixjLGQsZSxmKX0sCkxqKGEsYixjLGQpe3JldHVybiBiLkMoIkA8MD4i -KS5LcShjKS5LcShkKS5DKCIxKDIsMykiKS5hKGEpfX0KQS5WcC5wcm90b3R5cGU9ewokMCgpe3JldHVy -biB0aGlzLmEuYkgodGhpcy5iKX0sCiRTOjB9CkEuT1IucHJvdG90eXBlPXsKJDEoYSl7dmFyIHM9dGhp -cy5jCnJldHVybiB0aGlzLmEuRGwodGhpcy5iLHMuYShhKSxzKX0sCiRTKCl7cmV0dXJuIHRoaXMuYy5D -KCJ+KDApIil9fQpBLmI2LnByb3RvdHlwZT17CmdBKGEpe3ZhciBzPXRoaXMscj1uZXcgQS5sbShzLHMu -cixBLkxoKHMpLkMoImxtPDE+IikpCnIuYz1zLmUKcmV0dXJuIHJ9LApnayhhKXtyZXR1cm4gdGhpcy5h -fSwKZ2wwKGEpe3JldHVybiB0aGlzLmE9PT0wfSwKZ29yKGEpe3JldHVybiB0aGlzLmEhPT0wfSwKdGco -YSxiKXt2YXIgcyxyCmlmKGIhPT0iX19wcm90b19fIil7cz10aGlzLmIKaWYocz09bnVsbClyZXR1cm4h -MQpyZXR1cm4gdC5nLmEoc1tiXSkhPW51bGx9ZWxzZXtyPXRoaXMuUFIoYikKcmV0dXJuIHJ9fSwKUFIo -YSl7dmFyIHM9dGhpcy5kCmlmKHM9PW51bGwpcmV0dXJuITEKcmV0dXJuIHRoaXMudChzW3RoaXMuWShh -KV0sYSk+PTB9LAppKGEsYil7dmFyIHMscixxPXRoaXMKQS5MaChxKS5jLmEoYikKaWYodHlwZW9mIGI9 -PSJzdHJpbmciJiZiIT09Il9fcHJvdG9fXyIpe3M9cS5iCnJldHVybiBxLmJRKHM9PW51bGw/cS5iPUEu -VDIoKTpzLGIpfWVsc2UgaWYodHlwZW9mIGI9PSJudW1iZXIiJiYoYiYxMDczNzQxODIzKT09PWIpe3I9 -cS5jCnJldHVybiBxLmJRKHI9PW51bGw/cS5jPUEuVDIoKTpyLGIpfWVsc2UgcmV0dXJuIHEuQjcoYil9 -LApCNyhhKXt2YXIgcyxyLHEscD10aGlzCkEuTGgocCkuYy5hKGEpCnM9cC5kCmlmKHM9PW51bGwpcz1w -LmQ9QS5UMigpCnI9cC5ZKGEpCnE9c1tyXQppZihxPT1udWxsKXNbcl09W3AueW8oYSldCmVsc2V7aWYo -cC50KHEsYSk+PTApcmV0dXJuITEKcS5wdXNoKHAueW8oYSkpfXJldHVybiEwfSwKUihhLGIpe3ZhciBz -PXRoaXMKaWYodHlwZW9mIGI9PSJzdHJpbmciJiZiIT09Il9fcHJvdG9fXyIpcmV0dXJuIHMuSihzLmIs -YikKZWxzZSBpZih0eXBlb2YgYj09Im51bWJlciImJihiJjEwNzM3NDE4MjMpPT09YilyZXR1cm4gcy5K -KHMuYyxiKQplbHNlIHJldHVybiBzLk0oYil9LApNKGEpe3ZhciBzLHIscSxwLG89dGhpcyxuPW8uZApp -ZihuPT1udWxsKXJldHVybiExCnM9by5ZKGEpCnI9bltzXQpxPW8udChyLGEpCmlmKHE8MClyZXR1cm4h -MQpwPXIuc3BsaWNlKHEsMSlbMF0KaWYoMD09PXIubGVuZ3RoKWRlbGV0ZSBuW3NdCm8uVChwKQpyZXR1 -cm4hMH0sCmJRKGEsYil7QS5MaCh0aGlzKS5jLmEoYikKaWYodC5nLmEoYVtiXSkhPW51bGwpcmV0dXJu -ITEKYVtiXT10aGlzLnlvKGIpCnJldHVybiEwfSwKSihhLGIpe3ZhciBzCmlmKGE9PW51bGwpcmV0dXJu -ITEKcz10LmcuYShhW2JdKQppZihzPT1udWxsKXJldHVybiExCnRoaXMuVChzKQpkZWxldGUgYVtiXQpy -ZXR1cm4hMH0sClMoKXt0aGlzLnI9dGhpcy5yKzEmMTA3Mzc0MTgyM30sCnlvKGEpe3ZhciBzLHI9dGhp -cyxxPW5ldyBBLmJuKEEuTGgocikuYy5hKGEpKQppZihyLmU9PW51bGwpci5lPXIuZj1xCmVsc2V7cz1y -LmYKcy50b1N0cmluZwpxLmM9cwpyLmY9cy5iPXF9KytyLmEKci5TKCkKcmV0dXJuIHF9LApUKGEpe3Zh -ciBzPXRoaXMscj1hLmMscT1hLmIKaWYocj09bnVsbClzLmU9cQplbHNlIHIuYj1xCmlmKHE9PW51bGwp -cy5mPXIKZWxzZSBxLmM9cjstLXMuYQpzLlMoKX0sClkoYSl7cmV0dXJuIEouVTMoYSkmMTA3Mzc0MTgy -M30sCnQoYSxiKXt2YXIgcyxyCmlmKGE9PW51bGwpcmV0dXJuLTEKcz1hLmxlbmd0aApmb3Iocj0wO3I8 -czsrK3IpaWYoSi5STShhW3JdLmEsYikpcmV0dXJuIHIKcmV0dXJuLTF9fQpBLmJuLnByb3RvdHlwZT17 -fQpBLmxtLnByb3RvdHlwZT17CmdsKCl7dmFyIHM9dGhpcy5kCnJldHVybiBzPT1udWxsP3RoaXMuJHRp -LmMuYShzKTpzfSwKRygpe3ZhciBzPXRoaXMscj1zLmMscT1zLmEKaWYocy5iIT09cS5yKXRocm93IEEu -YihBLmE0KHEpKQplbHNlIGlmKHI9PW51bGwpe3Muc2oobnVsbCkKcmV0dXJuITF9ZWxzZXtzLnNqKHMu -JHRpLkMoIjE/IikuYShyLmEpKQpzLmM9ci5iCnJldHVybiEwfX0sCnNqKGEpe3RoaXMuZD10aGlzLiR0 -aS5DKCIxPyIpLmEoYSl9LAokaUFuOjF9CkEubVcucHJvdG90eXBlPXt9CkEudXkucHJvdG90eXBlPXsk -aWJROjEsJGljWDoxLCRpek06MX0KQS5sRC5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gbmV3IEEuYTco -YSx0aGlzLmdrKGEpLEEueksoYSkuQygiYTc8bEQuRT4iKSl9LApFKGEsYil7cmV0dXJuIHRoaXMucShh -LGIpfSwKSyhhLGIpe3ZhciBzLHIKQS56SyhhKS5DKCJ+KGxELkUpIikuYShiKQpzPXRoaXMuZ2soYSkK -Zm9yKHI9MDtyPHM7KytyKXtiLiQxKHRoaXMucShhLHIpKQppZihzIT09dGhpcy5nayhhKSl0aHJvdyBB -LmIoQS5hNChhKSl9fSwKZ2wwKGEpe3JldHVybiB0aGlzLmdrKGEpPT09MH0sCmdvcihhKXtyZXR1cm4h -dGhpcy5nbDAoYSl9LApFMihhLGIsYyl7dmFyIHM9QS56SyhhKQpyZXR1cm4gbmV3IEEubEooYSxzLktx -KGMpLkMoIjEobEQuRSkiKS5hKGIpLHMuQygiQDxsRC5FPiIpLktxKGMpLkMoImxKPDEsMj4iKSl9LApl -UihhLGIpe3JldHVybiBBLnFDKGEsYixudWxsLEEueksoYSkuQygibEQuRSIpKX0sCmRyKGEsYil7cmV0 -dXJuIG5ldyBBLmpWKGEsQS56SyhhKS5DKCJAPGxELkU+IikuS3EoYikuQygialY8MSwyPiIpKX0sCmR1 -KGEsYixjLGQpe3ZhciBzCkEueksoYSkuQygibEQuRT8iKS5hKGQpCkEuakIoYixjLHRoaXMuZ2soYSkp -CmZvcihzPWI7czxjOysrcyl0aGlzLlk1KGEscyxkKX0sCiJbIihhKXtyZXR1cm4gQS54KGEsIlsiLCJd -Iil9fQpBLmlsLnByb3RvdHlwZT17fQpBLnJhLnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHMscj10aGlz -LmEKaWYoIXIuYSl0aGlzLmIuYSs9IiwgIgpyLmE9ITEKcj10aGlzLmIKcz1yLmErPUEuRWooYSkKci5h -PXMrIjogIgpyLmErPUEuRWooYil9LAokUzo5fQpBLllrLnByb3RvdHlwZT17CksoYSxiKXt2YXIgcyxy -LHEscD1BLkxoKHRoaXMpCnAuQygifihZay5LLFlrLlYpIikuYShiKQpmb3Iocz1KLklUKHRoaXMuZ3Zj -KCkpLHA9cC5DKCJZay5WIik7cy5HKCk7KXtyPXMuZ2woKQpxPXRoaXMucSgwLHIpCmIuJDIocixxPT1u -dWxsP3AuYShxKTpxKX19LApnUHUoYSl7cmV0dXJuIEouTTEodGhpcy5ndmMoKSxuZXcgQS55USh0aGlz -KSxBLkxoKHRoaXMpLkMoIk4zPFlrLkssWWsuVj4iKSl9LAp4NChhKXtyZXR1cm4gSi56bCh0aGlzLmd2 -YygpLGEpfSwKZ2soYSl7cmV0dXJuIEouSG0odGhpcy5ndmMoKSl9LApnbDAoYSl7cmV0dXJuIEoudVUo -dGhpcy5ndmMoKSl9LAoiWyIoYSl7cmV0dXJuIEEubk8odGhpcyl9LAokaVowOjF9CkEueVEucHJvdG90 -eXBlPXsKJDEoYSl7dmFyIHM9dGhpcy5hLHI9QS5MaChzKQpyLkMoIllrLksiKS5hKGEpCnM9cy5xKDAs -YSkKaWYocz09bnVsbClzPXIuQygiWWsuViIpLmEocykKcmV0dXJuIG5ldyBBLk4zKGEscyxyLkMoIkA8 -WWsuSz4iKS5LcShyLkMoIllrLlYiKSkuQygiTjM8MSwyPiIpKX0sCiRTKCl7cmV0dXJuIEEuTGgodGhp -cy5hKS5DKCJOMzxZay5LLFlrLlY+KFlrLkspIil9fQpBLktQLnByb3RvdHlwZT17Clk1KGEsYixjKXt2 -YXIgcz1BLkxoKHRoaXMpCnMuYy5hKGIpCnMuelsxXS5hKGMpCnRocm93IEEuYihBLkw0KCJDYW5ub3Qg -bW9kaWZ5IHVubW9kaWZpYWJsZSBtYXAiKSl9fQpBLlBuLnByb3RvdHlwZT17CnEoYSxiKXtyZXR1cm4g -dGhpcy5hLnEoMCxiKX0sClk1KGEsYixjKXt2YXIgcz1BLkxoKHRoaXMpCnRoaXMuYS5ZNSgwLHMuYy5h -KGIpLHMuelsxXS5hKGMpKX0sCng0KGEpe3JldHVybiB0aGlzLmEueDQoYSl9LApLKGEsYil7dGhpcy5h -LksoMCxBLkxoKHRoaXMpLkMoIn4oMSwyKSIpLmEoYikpfSwKZ2wwKGEpe3ZhciBzPXRoaXMuYQpyZXR1 -cm4gcy5nbDAocyl9LApnayhhKXt2YXIgcz10aGlzLmEKcmV0dXJuIHMuZ2socyl9LAoiWyIoYSl7cmV0 -dXJuIHRoaXMuYVsiWyJdKDApfSwKZ1B1KGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4gcy5nUHUocyl9LAok -aVowOjF9CkEuR2oucHJvdG90eXBlPXt9CkEubGYucHJvdG90eXBlPXsKZ2wwKGEpe3JldHVybiB0aGlz -LmdrKHRoaXMpPT09MH0sCmdvcihhKXtyZXR1cm4gdGhpcy5nayh0aGlzKSE9PTB9LApGVihhLGIpe3Zh -ciBzCmZvcihzPUouSVQoQS5MaCh0aGlzKS5DKCJjWDxsZi5FPiIpLmEoYikpO3MuRygpOyl0aGlzLmko -MCxzLmdsKCkpfSwKIlsiKGEpe3JldHVybiBBLngodGhpcywieyIsIn0iKX0sCkgoYSxiKXt2YXIgcyxy -LHEscD10aGlzLmdBKHRoaXMpCmlmKCFwLkcoKSlyZXR1cm4iIgppZihiPT09IiIpe3M9cC4kdGkuYwpy -PSIiCmRve3E9cC5kCnIrPUEuRWoocT09bnVsbD9zLmEocSk6cSl9d2hpbGUocC5HKCkpCnM9cn1lbHNl -e3M9cC5kCnM9IiIrQS5FaihzPT1udWxsP3AuJHRpLmMuYShzKTpzKQpmb3Iocj1wLiR0aS5jO3AuRygp -Oyl7cT1wLmQKcz1zK2IrQS5FaihxPT1udWxsP3IuYShxKTpxKX19cmV0dXJuIHMuY2hhckNvZGVBdCgw -KT09MD9zOnN9LAplUihhLGIpe3JldHVybiBBLmJLKHRoaXMsYixBLkxoKHRoaXMpLkMoImxmLkUiKSl9 -LApFKGEsYil7dmFyIHMscixxLHAsbz0iaW5kZXgiCkEuY2IoYixvLHQuUykKQS5rMShiLG8pCmZvcihz -PXRoaXMuZ0EodGhpcykscj1zLiR0aS5jLHE9MDtzLkcoKTspe3A9cy5kCmlmKHA9PW51bGwpcD1yLmEo -cCkKaWYoYj09PXEpcmV0dXJuIHA7KytxfXRocm93IEEuYihBLkNmKGIsdGhpcyxvLG51bGwscSkpfX0K -QS5Wai5wcm90b3R5cGU9eyRpYlE6MSwkaWNYOjEsJGlPbDoxfQpBLlh2LnByb3RvdHlwZT17JGliUTox -LCRpY1g6MSwkaU9sOjF9CkEublkucHJvdG90eXBlPXt9CkEuV1kucHJvdG90eXBlPXt9CkEuUlUucHJv -dG90eXBlPXt9CkEuRlAucHJvdG90eXBlPXt9CkEudXcucHJvdG90eXBlPXsKcShhLGIpe3ZhciBzLHI9 -dGhpcy5iCmlmKHI9PW51bGwpcmV0dXJuIHRoaXMuYy5xKDAsYikKZWxzZSBpZih0eXBlb2YgYiE9InN0 -cmluZyIpcmV0dXJuIG51bGwKZWxzZXtzPXJbYl0KcmV0dXJuIHR5cGVvZiBzPT0idW5kZWZpbmVkIj90 -aGlzLmZiKGIpOnN9fSwKZ2soYSl7cmV0dXJuIHRoaXMuYj09bnVsbD90aGlzLmMuYTp0aGlzLkNmKCku -bGVuZ3RofSwKZ2wwKGEpe3JldHVybiB0aGlzLmdrKHRoaXMpPT09MH0sCmd2Yygpe2lmKHRoaXMuYj09 -bnVsbCl7dmFyIHM9dGhpcy5jCnJldHVybiBuZXcgQS5pNShzLEEuTGgocykuQygiaTU8MT4iKSl9cmV0 -dXJuIG5ldyBBLmk4KHRoaXMpfSwKWTUoYSxiLGMpe3ZhciBzLHIscT10aGlzCmlmKHEuYj09bnVsbClx -LmMuWTUoMCxiLGMpCmVsc2UgaWYocS54NChiKSl7cz1xLmIKc1tiXT1jCnI9cS5hCmlmKHI9PW51bGw/ -cyE9bnVsbDpyIT09cylyW2JdPW51bGx9ZWxzZSBxLlhLKCkuWTUoMCxiLGMpfSwKeDQoYSl7aWYodGhp -cy5iPT1udWxsKXJldHVybiB0aGlzLmMueDQoYSkKcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3du -UHJvcGVydHkuY2FsbCh0aGlzLmEsYSl9LApLKGEsYil7dmFyIHMscixxLHAsbz10aGlzCnQuY0EuYShi -KQppZihvLmI9PW51bGwpcmV0dXJuIG8uYy5LKDAsYikKcz1vLkNmKCkKZm9yKHI9MDtyPHMubGVuZ3Ro -Oysrcil7cT1zW3JdCnA9by5iW3FdCmlmKHR5cGVvZiBwPT0idW5kZWZpbmVkIil7cD1BLlFlKG8uYVtx -XSkKby5iW3FdPXB9Yi4kMihxLHApCmlmKHMhPT1vLmMpdGhyb3cgQS5iKEEuYTQobykpfX0sCkNmKCl7 -dmFyIHM9dC5iTS5hKHRoaXMuYykKaWYocz09bnVsbClzPXRoaXMuYz1BLlFJKE9iamVjdC5rZXlzKHRo -aXMuYSksdC5zKQpyZXR1cm4gc30sClhLKCl7dmFyIHMscixxLHAsbyxuPXRoaXMKaWYobi5iPT1udWxs -KXJldHVybiBuLmMKcz1BLkZsKHQuTix0LnopCnI9bi5DZigpCmZvcihxPTA7cD1yLmxlbmd0aCxxPHA7 -KytxKXtvPXJbcV0Kcy5ZNSgwLG8sbi5xKDAsbykpfWlmKHA9PT0wKUIuTm0uaShyLCIiKQplbHNlIEIu -Tm0uVjEocikKbi5hPW4uYj1udWxsCnJldHVybiBuLmM9c30sCmZiKGEpe3ZhciBzCmlmKCFPYmplY3Qu -cHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hLGEpKXJldHVybiBudWxsCnM9QS5RZSh0 -aGlzLmFbYV0pCnJldHVybiB0aGlzLmJbYV09c319CkEuaTgucHJvdG90eXBlPXsKZ2soYSl7dmFyIHM9 -dGhpcy5hCnJldHVybiBzLmdrKHMpfSwKRShhLGIpe3ZhciBzPXRoaXMuYQppZihzLmI9PW51bGwpcz1z -Lmd2YygpLkUoMCxiKQplbHNle3M9cy5DZigpCmlmKCEoYj49MCYmYjxzLmxlbmd0aCkpcmV0dXJuIEEu -T0gocyxiKQpzPXNbYl19cmV0dXJuIHN9LApnQShhKXt2YXIgcz10aGlzLmEKaWYocy5iPT1udWxsKXtz -PXMuZ3ZjKCkKcz1zLmdBKHMpfWVsc2V7cz1zLkNmKCkKcz1uZXcgSi5tMShzLHMubGVuZ3RoLEEudDYo -cykuQygibTE8MT4iKSl9cmV0dXJuIHN9LAp0ZyhhLGIpe3JldHVybiB0aGlzLmEueDQoYil9fQpBLnhy -LnByb3RvdHlwZT17CiQwKCl7dmFyIHMscgp0cnl7cz1uZXcgVGV4dERlY29kZXIoInV0Zi04Iix7ZmF0 -YWw6dHJ1ZX0pCnJldHVybiBzfWNhdGNoKHIpe31yZXR1cm4gbnVsbH0sCiRTOjEwfQpBLk56LnByb3Rv -dHlwZT17CiQwKCl7dmFyIHMscgp0cnl7cz1uZXcgVGV4dERlY29kZXIoInV0Zi04Iix7ZmF0YWw6ZmFs -c2V9KQpyZXR1cm4gc31jYXRjaChyKXt9cmV0dXJuIG51bGx9LAokUzoxMH0KQS5DVi5wcm90b3R5cGU9 -ewp5cihhMSxhMixhMyl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYyxiLGEsYTA9 -IkludmFsaWQgYmFzZTY0IGVuY29kaW5nIGxlbmd0aCAiCmEzPUEuakIoYTIsYTMsYTEubGVuZ3RoKQpz -PSQuVjcoKQpmb3Iocj1zLmxlbmd0aCxxPWEyLHA9cSxvPW51bGwsbj0tMSxtPS0xLGw9MDtxPGEzO3E9 -ayl7az1xKzEKaj1CLnhCLlcoYTEscSkKaWYoaj09PTM3KXtpPWsrMgppZihpPD1hMyl7aD1BLm9vKEIu -eEIuVyhhMSxrKSkKZz1BLm9vKEIueEIuVyhhMSxrKzEpKQpmPWgqMTYrZy0oZyYyNTYpCmlmKGY9PT0z -NylmPS0xCms9aX1lbHNlIGY9LTF9ZWxzZSBmPWoKaWYoMDw9ZiYmZjw9MTI3KXtpZighKGY+PTAmJmY8 -cikpcmV0dXJuIEEuT0gocyxmKQplPXNbZl0KaWYoZT49MCl7Zj1CLnhCLk8oIkFCQ0RFRkdISUpLTE1O -T1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGUpCmlmKGY9 -PT1qKWNvbnRpbnVlCmo9Zn1lbHNle2lmKGU9PT0tMSl7aWYobjwwKXtkPW89PW51bGw/bnVsbDpvLmEu -bGVuZ3RoCmlmKGQ9PW51bGwpZD0wCm49ZCsocS1wKQptPXF9KytsCmlmKGo9PT02MSljb250aW51ZX1q -PWZ9aWYoZSE9PS0yKXtpZihvPT1udWxsKXtvPW5ldyBBLk0oIiIpCmQ9b31lbHNlIGQ9bwpjPWQuYSs9 -Qi54Qi5OaihhMSxwLHEpCmQuYT1jK0EuTHcoaikKcD1rCmNvbnRpbnVlfX10aHJvdyBBLmIoQS5ycigi -SW52YWxpZCBiYXNlNjQgZGF0YSIsYTEscSkpfWlmKG8hPW51bGwpe3I9by5hKz1CLnhCLk5qKGExLHAs -YTMpCmQ9ci5sZW5ndGgKaWYobj49MClBLnhNKGExLG0sYTMsbixsLGQpCmVsc2V7Yj1CLmpuLnpZKGQt -MSw0KSsxCmlmKGI9PT0xKXRocm93IEEuYihBLnJyKGEwLGExLGEzKSkKZm9yKDtiPDQ7KXtyKz0iPSIK -by5hPXI7KytifX1yPW8uYQpyZXR1cm4gQi54Qi5pNyhhMSxhMixhMyxyLmNoYXJDb2RlQXQoMCk9PTA/ -cjpyKX1hPWEzLWEyCmlmKG4+PTApQS54TShhMSxtLGEzLG4sbCxhKQplbHNle2I9Qi5qbi56WShhLDQp -CmlmKGI9PT0xKXRocm93IEEuYihBLnJyKGEwLGExLGEzKSkKaWYoYj4xKWExPUIueEIuaTcoYTEsYTMs -YTMsYj09PTI/Ij09IjoiPSIpfXJldHVybiBhMX19CkEuVTgucHJvdG90eXBlPXt9CkEuVWsucHJvdG90 -eXBlPXt9CkEud0kucHJvdG90eXBlPXt9CkEuWmkucHJvdG90eXBlPXt9CkEuVWQucHJvdG90eXBlPXsK -IlsiKGEpe3ZhciBzPUEuaGwodGhpcy5hKQpyZXR1cm4odGhpcy5iIT1udWxsPyJDb252ZXJ0aW5nIG9i -amVjdCB0byBhbiBlbmNvZGFibGUgb2JqZWN0IGZhaWxlZDoiOiJDb252ZXJ0aW5nIG9iamVjdCBkaWQg -bm90IHJldHVybiBhbiBlbmNvZGFibGUgb2JqZWN0OiIpKyIgIitzfX0KQS5LOC5wcm90b3R5cGU9ewoi -WyIoYSl7cmV0dXJuIkN5Y2xpYyBlcnJvciBpbiBKU09OIHN0cmluZ2lmeSJ9fQpBLmJ5LnByb3RvdHlw -ZT17CnBXKGEsYixjKXt2YXIgcwp0LmZWLmEoYykKcz1BLkJTKGIsdGhpcy5nSGUoKS5hKQpyZXR1cm4g -c30sCk9CKGEsYil7dmFyIHMKdC5kQS5hKGIpCnM9QS51WChhLHRoaXMuZ1pFKCkuYixudWxsKQpyZXR1 -cm4gc30sCmdaRSgpe3JldHVybiBCLm5YfSwKZ0hlKCl7cmV0dXJuIEIuQTN9fQpBLm9qLnByb3RvdHlw -ZT17fQpBLk14LnByb3RvdHlwZT17fQpBLlNoLnByb3RvdHlwZT17ClJUKGEpe3ZhciBzLHIscSxwLG8s -bixtPWEubGVuZ3RoCmZvcihzPXRoaXMuYyxyPTAscT0wO3E8bTsrK3Epe3A9Qi54Qi5XKGEscSkKaWYo -cD45Mil7aWYocD49NTUyOTYpe289cCY2NDUxMgppZihvPT09NTUyOTYpe249cSsxCm49IShuPG0mJihC -LnhCLlcoYSxuKSY2NDUxMik9PT01NjMyMCl9ZWxzZSBuPSExCmlmKCFuKWlmKG89PT01NjMyMCl7bz1x -LTEKbz0hKG8+PTAmJihCLnhCLk8oYSxvKSY2NDUxMik9PT01NTI5Nil9ZWxzZSBvPSExCmVsc2Ugbz0h -MAppZihvKXtpZihxPnIpcy5hKz1CLnhCLk5qKGEscixxKQpyPXErMQpvPXMuYSs9QS5Mdyg5MikKbys9 -QS5MdygxMTcpCnMuYT1vCm8rPUEuTHcoMTAwKQpzLmE9bwpuPXA+Pj44JjE1Cm8rPUEuTHcobjwxMD80 -OCtuOjg3K24pCnMuYT1vCm49cD4+PjQmMTUKbys9QS5MdyhuPDEwPzQ4K246ODcrbikKcy5hPW8Kbj1w -JjE1CnMuYT1vK0EuTHcobjwxMD80OCtuOjg3K24pfX1jb250aW51ZX1pZihwPDMyKXtpZihxPnIpcy5h -Kz1CLnhCLk5qKGEscixxKQpyPXErMQpvPXMuYSs9QS5Mdyg5MikKc3dpdGNoKHApe2Nhc2UgODpzLmE9 -bytBLkx3KDk4KQpicmVhawpjYXNlIDk6cy5hPW8rQS5MdygxMTYpCmJyZWFrCmNhc2UgMTA6cy5hPW8r -QS5MdygxMTApCmJyZWFrCmNhc2UgMTI6cy5hPW8rQS5MdygxMDIpCmJyZWFrCmNhc2UgMTM6cy5hPW8r -QS5MdygxMTQpCmJyZWFrCmRlZmF1bHQ6bys9QS5MdygxMTcpCnMuYT1vCm8rPUEuTHcoNDgpCnMuYT1v -Cm8rPUEuTHcoNDgpCnMuYT1vCm49cD4+PjQmMTUKbys9QS5MdyhuPDEwPzQ4K246ODcrbikKcy5hPW8K -bj1wJjE1CnMuYT1vK0EuTHcobjwxMD80OCtuOjg3K24pCmJyZWFrfX1lbHNlIGlmKHA9PT0zNHx8cD09 -PTkyKXtpZihxPnIpcy5hKz1CLnhCLk5qKGEscixxKQpyPXErMQpvPXMuYSs9QS5Mdyg5MikKcy5hPW8r -QS5MdyhwKX19aWYocj09PTApcy5hKz1hCmVsc2UgaWYocjxtKXMuYSs9Qi54Qi5OaihhLHIsbSl9LApK -bihhKXt2YXIgcyxyLHEscApmb3Iocz10aGlzLmEscj1zLmxlbmd0aCxxPTA7cTxyOysrcSl7cD1zW3Fd -CmlmKGE9PW51bGw/cD09bnVsbDphPT09cCl0aHJvdyBBLmIobmV3IEEuSzgoYSxudWxsKSl9Qi5ObS5p -KHMsYSl9LAppVShhKXt2YXIgcyxyLHEscCxvPXRoaXMKaWYoby50TShhKSlyZXR1cm4Kby5KbihhKQp0 -cnl7cz1vLmIuJDEoYSkKaWYoIW8udE0ocykpe3E9QS5HeShhLG51bGwsby5nVksoKSkKdGhyb3cgQS5i -KHEpfXE9by5hCmlmKDA+PXEubGVuZ3RoKXJldHVybiBBLk9IKHEsLTEpCnEucG9wKCl9Y2F0Y2gocCl7 -cj1BLlJ1KHApCnE9QS5HeShhLHIsby5nVksoKSkKdGhyb3cgQS5iKHEpfX0sCnRNKGEpe3ZhciBzLHIs -cT10aGlzCmlmKHR5cGVvZiBhPT0ibnVtYmVyIil7aWYoIWlzRmluaXRlKGEpKXJldHVybiExCnEuYy5h -Kz1CLkNEWyJbIl0oYSkKcmV0dXJuITB9ZWxzZSBpZihhPT09ITApe3EuYy5hKz0idHJ1ZSIKcmV0dXJu -ITB9ZWxzZSBpZihhPT09ITEpe3EuYy5hKz0iZmFsc2UiCnJldHVybiEwfWVsc2UgaWYoYT09bnVsbCl7 -cS5jLmErPSJudWxsIgpyZXR1cm4hMH1lbHNlIGlmKHR5cGVvZiBhPT0ic3RyaW5nIil7cz1xLmMKcy5h -Kz0nIicKcS5SVChhKQpzLmErPSciJwpyZXR1cm4hMH1lbHNlIGlmKHQuai5iKGEpKXtxLkpuKGEpCnEu -bEsoYSkKcz1xLmEKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEEuT0gocywtMSkKcy5wb3AoKQpyZXR1cm4h -MH1lbHNlIGlmKHQuZi5iKGEpKXtxLkpuKGEpCnI9cS5qdyhhKQpzPXEuYQppZigwPj1zLmxlbmd0aCly -ZXR1cm4gQS5PSChzLC0xKQpzLnBvcCgpCnJldHVybiByfWVsc2UgcmV0dXJuITF9LApsSyhhKXt2YXIg -cyxyLHE9dGhpcy5jCnEuYSs9IlsiCnM9Si5VNihhKQppZihzLmdvcihhKSl7dGhpcy5pVShzLnEoYSww -KSkKZm9yKHI9MTtyPHMuZ2soYSk7KytyKXtxLmErPSIsIgp0aGlzLmlVKHMucShhLHIpKX19cS5hKz0i -XSJ9LApqdyhhKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLGw9e30KaWYoYS5nbDAoYSkpe20uYy5hKz0i -e30iCnJldHVybiEwfXM9YS5nayhhKSoyCnI9QS5POChzLG51bGwsITEsdC5YKQpxPWwuYT0wCmwuYj0h -MAphLksoMCxuZXcgQS50aShsLHIpKQppZighbC5iKXJldHVybiExCnA9bS5jCnAuYSs9InsiCmZvcihv -PSciJztxPHM7cSs9MixvPScsIicpe3AuYSs9bwptLlJUKEEubihyW3FdKSkKcC5hKz0nIjonCm49cSsx -CmlmKCEobjxzKSlyZXR1cm4gQS5PSChyLG4pCm0uaVUocltuXSl9cC5hKz0ifSIKcmV0dXJuITB9fQpB -LnRpLnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHMscgppZih0eXBlb2YgYSE9InN0cmluZyIpdGhpcy5h -LmI9ITEKcz10aGlzLmIKcj10aGlzLmEKQi5ObS5ZNShzLHIuYSsrLGEpCkIuTm0uWTUocyxyLmErKyxi -KX0sCiRTOjl9CkEudHUucHJvdG90eXBlPXsKZ1ZLKCl7dmFyIHM9dGhpcy5jLmEKcmV0dXJuIHMuY2hh -ckNvZGVBdCgwKT09MD9zOnN9fQpBLnU1LnByb3RvdHlwZT17CmdaRSgpe3JldHVybiBCLlFrfX0KQS5F -My5wcm90b3R5cGU9ewpXSihhKXt2YXIgcyxyLHEscD1BLmpCKDAsbnVsbCxhLmxlbmd0aCksbz1wLTAK -aWYobz09PTApcmV0dXJuIG5ldyBVaW50OEFycmF5KDApCnM9byozCnI9bmV3IFVpbnQ4QXJyYXkocykK -cT1uZXcgQS5SdyhyKQppZihxLkd4KGEsMCxwKSE9PXApe0IueEIuTyhhLHAtMSkKcS5STygpfXJldHVy -biBuZXcgVWludDhBcnJheShyLnN1YmFycmF5KDAsQS5yTSgwLHEuYixzKSkpfX0KQS5Sdy5wcm90b3R5 -cGU9ewpSTygpe3ZhciBzPXRoaXMscj1zLmMscT1zLmIscD1zLmI9cSsxLG89ci5sZW5ndGgKaWYoIShx -PG8pKXJldHVybiBBLk9IKHIscSkKcltxXT0yMzkKcT1zLmI9cCsxCmlmKCEocDxvKSlyZXR1cm4gQS5P -SChyLHApCnJbcF09MTkxCnMuYj1xKzEKaWYoIShxPG8pKXJldHVybiBBLk9IKHIscSkKcltxXT0xODl9 -LApPNihhLGIpe3ZhciBzLHIscSxwLG8sbj10aGlzCmlmKChiJjY0NTEyKT09PTU2MzIwKXtzPTY1NTM2 -KygoYSYxMDIzKTw8MTApfGImMTAyMwpyPW4uYwpxPW4uYgpwPW4uYj1xKzEKbz1yLmxlbmd0aAppZigh -KHE8bykpcmV0dXJuIEEuT0gocixxKQpyW3FdPXM+Pj4xOHwyNDAKcT1uLmI9cCsxCmlmKCEocDxvKSly -ZXR1cm4gQS5PSChyLHApCnJbcF09cz4+PjEyJjYzfDEyOApwPW4uYj1xKzEKaWYoIShxPG8pKXJldHVy -biBBLk9IKHIscSkKcltxXT1zPj4+NiY2M3wxMjgKbi5iPXArMQppZighKHA8bykpcmV0dXJuIEEuT0go -cixwKQpyW3BdPXMmNjN8MTI4CnJldHVybiEwfWVsc2V7bi5STygpCnJldHVybiExfX0sCkd4KGEsYixj -KXt2YXIgcyxyLHEscCxvLG4sbSxsPXRoaXMKaWYoYiE9PWMmJihCLnhCLk8oYSxjLTEpJjY0NTEyKT09 -PTU1Mjk2KS0tYwpmb3Iocz1sLmMscj1zLmxlbmd0aCxxPWI7cTxjOysrcSl7cD1CLnhCLlcoYSxxKQpp -ZihwPD0xMjcpe289bC5iCmlmKG8+PXIpYnJlYWsKbC5iPW8rMQpzW29dPXB9ZWxzZXtvPXAmNjQ1MTIK -aWYobz09PTU1Mjk2KXtpZihsLmIrND5yKWJyZWFrCm49cSsxCmlmKGwuTzYocCxCLnhCLlcoYSxuKSkp -cT1ufWVsc2UgaWYobz09PTU2MzIwKXtpZihsLmIrMz5yKWJyZWFrCmwuUk8oKX1lbHNlIGlmKHA8PTIw -NDcpe289bC5iCm09bysxCmlmKG0+PXIpYnJlYWsKbC5iPW0KaWYoIShvPHIpKXJldHVybiBBLk9IKHMs -bykKc1tvXT1wPj4+NnwxOTIKbC5iPW0rMQpzW21dPXAmNjN8MTI4fWVsc2V7bz1sLmIKaWYobysyPj1y -KWJyZWFrCm09bC5iPW8rMQppZighKG88cikpcmV0dXJuIEEuT0gocyxvKQpzW29dPXA+Pj4xMnwyMjQK -bz1sLmI9bSsxCmlmKCEobTxyKSlyZXR1cm4gQS5PSChzLG0pCnNbbV09cD4+PjYmNjN8MTI4CmwuYj1v -KzEKaWYoIShvPHIpKXJldHVybiBBLk9IKHMsbykKc1tvXT1wJjYzfDEyOH19fXJldHVybiBxfX0KQS5H -WS5wcm90b3R5cGU9ewpXSihhKXt2YXIgcyxyCnQuTC5hKGEpCnM9dGhpcy5hCnI9QS5reShzLGEsMCxu -dWxsKQppZihyIT1udWxsKXJldHVybiByCnJldHVybiBuZXcgQS5ieihzKS5OZShhLDAsbnVsbCwhMCl9 -fQpBLmJ6LnByb3RvdHlwZT17Ck5lKGEsYixjLGQpe3ZhciBzLHIscSxwLG8sbj10aGlzCnQuTC5hKGEp -CnM9QS5qQihiLGMsSi5IbShhKSkKaWYoYj09PXMpcmV0dXJuIiIKcj1BLmp5KGEsYixzKQpxPW4uaE8o -ciwwLHMtYiwhMCkKcD1uLmIKaWYoKHAmMSkhPT0wKXtvPUEuajQocCkKbi5iPTAKdGhyb3cgQS5iKEEu -cnIobyxhLGIrbi5jKSl9cmV0dXJuIHF9LApoTyhhLGIsYyxkKXt2YXIgcyxyLHE9dGhpcwppZihjLWI+ -MTAwMCl7cz1CLmpuLkJVKGIrYywyKQpyPXEuaE8oYSxiLHMsITEpCmlmKChxLmImMSkhPT0wKXJldHVy -biByCnJldHVybiByK3EuaE8oYSxzLGMsZCl9cmV0dXJuIHEuRWgoYSxiLGMsZCl9LApFaChhLGIsYyxk -KXt2YXIgcyxyLHEscCxvLG4sbSxsLGs9dGhpcyxqPTY1NTMzLGk9ay5iLGg9ay5jLGc9bmV3IEEuTSgi -IiksZj1iKzEsZT1hLmxlbmd0aAppZighKGI+PTAmJmI8ZSkpcmV0dXJuIEEuT0goYSxiKQpzPWFbYl0K -JGxhYmVsMCQwOmZvcihyPWsuYTshMDspe2Zvcig7ITA7Zj1vKXtxPUIueEIuVygiQUFBQUFBQUFBQUFB +YyRpNixyKX0sCkMyKGEsYixjKXt2YXIgcyxyLHEscCxvLG4sbT0iZXhjZXB0aW9uIixsPSJzdGFja1Ry +YWNlIgppZih0Lmg2LmIoYikmJkouUk0oYi5xKDAsInN1Y2Nlc3MiKSwhMSkmJmIueDQobSkmJmIueDQo +bCkpe3M9Si5VNihiKQpyPUEuayhzLnEoYixtKSkKYz1zLnEoYixsKQpxPW51bGx9ZWxzZSBpZihiIGlu +c3RhbmNlb2YgQS5RVyl7cj1iLmEKcT1iLmJ9ZWxzZXtyPUouWVMoYikKcT1udWxsfWlmKHE9PW51bGwp +cT1jCnM9ZG9jdW1lbnQKcD1zLnF1ZXJ5U2VsZWN0b3IoIi5wb3B1cC1wYW5lIikKcC5xdWVyeVNlbGVj +dG9yKCJoMiIpLmlubmVyVGV4dD1hCm89cC5xdWVyeVNlbGVjdG9yKCJwIikKby50b1N0cmluZwpyLnRv +U3RyaW5nCm8uaW5uZXJUZXh0PXIKbz1wLnF1ZXJ5U2VsZWN0b3IoInByZSIpCm8udG9TdHJpbmcKby5p +bm5lclRleHQ9Si5ZUyhxKQpuPXQuYnEuYShwLnF1ZXJ5U2VsZWN0b3IoImEuYm90dG9tIikpCkIueG4u +c0xVKG4sQS5YZCgiaHR0cHMiLCJnaXRodWIuY29tIiwiZGFydC1sYW5nL3Nkay9pc3N1ZXMvbmV3IixB +LkVGKFsidGl0bGUiLCJDdXN0b21lci1yZXBvcnRlZCBpc3N1ZSB3aXRoIG51bGwgc2FmZXR5IG1pZ3Jh +dGlvbiB0b29sOiAiK2EsImxhYmVscyIsdS5kLCJib2R5IixhKyJcblxuRXJyb3I6ICIrcisiXG5cblBs +ZWFzZSBmaWxsIGluIHRoZSBmb2xsb3dpbmc6XG5cbioqTmFtZSBvZiBwYWNrYWdlIGJlaW5nIG1pZ3Jh +dGVkIChpZiBwdWJsaWMpKio6XG4qKldoYXQgSSB3YXMgZG9pbmcgd2hlbiB0aGlzIGlzc3VlIG9jY3Vy +cmVkKio6XG4qKklzIGl0IHBvc3NpYmxlIHRvIHdvcmsgYXJvdW5kIHRoaXMgaXNzdWUqKjpcbioqSGFz +IHRoaXMgaXNzdWUgaGFwcGVuZWQgYmVmb3JlLCBhbmQgaWYgc28sIGhvdyBvZnRlbioqOlxuKipEYXJ0 +IFNESyB2ZXJzaW9uKio6ICIrQS5FaihzLmdldEVsZW1lbnRCeUlkKCJzZGstdmVyc2lvbiIpLnRleHRD +b250ZW50KSsiXG4qKkFkZGl0aW9uYWwgZGV0YWlscyoqOlxuXG5UaGFua3MgZm9yIGZpbGluZyFcblxu +U3RhY2t0cmFjZTogX2F1dG8gcG9wdWxhdGVkIGJ5IG1pZ3JhdGlvbiBwcmV2aWV3IHRvb2wuX1xuXG5g +YGBcbiIrQS5FaihjKSsiXG5gYGBcbiJdLHQuTix0LnopKS5nbkQoKSkKcz1uLnN0eWxlCnMuZGlzcGxh +eT0iaW5pdGlhbCIKcz1wLnN0eWxlCnMuZGlzcGxheT0iaW5pdGlhbCIKcz1BLkVqKGIpCndpbmRvdwpp +Zih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUuZXJyb3IoYSsiOiAiK3Mp +CndpbmRvdwpzPUEuRWooYykKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25z +b2xlLmVycm9yKHMpfSwKdDIoYSxiKXt2YXIgcyxyLHEscCxvPXQuaC5hKEEucWMoYS5jdXJyZW50VGFy +Z2V0KSkKYS5wcmV2ZW50RGVmYXVsdCgpCnM9by5nZXRBdHRyaWJ1dGUoImhyZWYiKQpzLnRvU3RyaW5n +CnI9QS5VcyhzKQpxPUEuRzYocykKcD1BLmFLKHMpCmlmKHEhPW51bGwpQS5hZihyLHEscCxiLG5ldyBB +Lm5UKHIscSxwKSkKZWxzZSBBLmFmKHIsbnVsbCxudWxsLGIsbmV3IEEuTlkocikpfSwKSzAoYSl7dmFy +IHMscixxLHA9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnBvcHVwLXBhbmUiKQpwLnF1ZXJ5U2VsZWN0 +b3IoImgyIikuaW5uZXJUZXh0PSJGYWlsZWQgdG8gcmVydW4gZnJvbSBzb3VyY2VzIgpwLnF1ZXJ5U2Vs +ZWN0b3IoInAiKS5pbm5lclRleHQ9IlNvdXJjZXMgY29udGFpbiBzdGF0aWMgYW5hbHlzaXMgZXJyb3Jz +OiIKcz1wLnF1ZXJ5U2VsZWN0b3IoInByZSIpCnMudG9TdHJpbmcKcj1KLkVsKGEsdC5mKQpxPUEuTGgo +cikKcy5pbm5lclRleHQ9bmV3IEEubEoocixxLkMoInFVKGxELkUpIikuYShuZXcgQS51ZSgpKSxxLkMo +ImxKPGxELkUscVU+IikpLkgoMCwiXG4iKQpxPXAucXVlcnlTZWxlY3RvcigiYS5ib3R0b20iKS5zdHls +ZQpxLmRpc3BsYXk9Im5vbmUiCnM9cC5zdHlsZQpzLmRpc3BsYXk9ImluaXRpYWwifSwKR2coKXt2YXIg +cz1kb2N1bWVudCxyPXQuaApBLkRoKHIsciwiVCIsInF1ZXJ5U2VsZWN0b3JBbGwiKQpzPW5ldyBBLnd6 +KHMucXVlcnlTZWxlY3RvckFsbCgiLmNvZGUiKSx0LlIpCnMuSyhzLG5ldyBBLkdIKCkpfSwKaFgoYSxi +LGMpe3JldHVybiBBLll3KGEsYixjKX0sCll3KGEsYixjKXt2YXIgcz0wLHI9QS5GWCh0LnopLHE9MSxw +LG8sbixtLGwsayxqLGksaCxnCnZhciAkYXN5bmMkaFg9QS5seihmdW5jdGlvbihkLGUpe2lmKGQ9PT0x +KXtwPWUKcz1xfXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDpxPTMKaz10Lk4Kcz02CnJldHVybiBB +LmpRKEEuUTYoYSxBLkVGKFsicmVnaW9uIiwicmVnaW9uIiwib2Zmc2V0IixBLkVqKGIpXSxrLGspLHQu +RyksJGFzeW5jJGhYKQpjYXNlIDY6bz1lCms9bwpqPUouVTYoaykKaT10LmdxCm49bmV3IEEuZDIoQS5q +ZihpLmEoai5xKGssImVkaXRzIikpKSxBLmsoai5xKGssImV4cGxhbmF0aW9uIikpLEEuVWMoai5xKGss +ImxpbmUiKSksQS5rKGoucShrLCJkaXNwbGF5UGF0aCIpKSxBLmsoai5xKGssInVyaVBhdGgiKSksQS5O +ZChpLmEoai5xKGssInRyYWNlcyIpKSkpCkEuVDEobikKQS5GcihhLGIsYykKQS55WCgiLmVkaXQtcGFu +ZWwgLnBhbmVsLWNvbnRlbnQiLCExKQpxPTEKcz01CmJyZWFrCmNhc2UgMzpxPTIKZz1wCm09QS5SdShn +KQpsPUEudHMoZykKQS5DMigiY291bGRuJ3QgbG9hZCBlZGl0IGRldGFpbHMiLG0sbCkKcz01CmJyZWFr +CmNhc2UgMjpzPTEKYnJlYWsKY2FzZSA1OnJldHVybiBBLnlDKG51bGwscikKY2FzZSAxOnJldHVybiBB +LmYzKHAscil9fSkKcmV0dXJuIEEuREkoJGFzeW5jJGhYLHIpfSwKRzcoYSxiLGMsZCxlKXtyZXR1cm4g +QS5mcihhLGIsYyxkLGUpfSwKZnIoYSxiLGMsZCxlKXt2YXIgcz0wLHI9QS5GWCh0LkgpLHEscD0yLG8s +bixtLGwsayxqLGksaAp2YXIgJGFzeW5jJEc3PUEubHooZnVuY3Rpb24oZixnKXtpZihmPT09MSl7bz1n +CnM9cH13aGlsZSh0cnVlKXN3aXRjaChzKXtjYXNlIDA6aWYoIUIueEIuVGMoYSwiLmRhcnQiKSl7QS5C +RShhLEEud1IoKSxkKQpBLkJYKGEsbnVsbCkKaWYoZSE9bnVsbCllLiQwKCkKcz0xCmJyZWFrfXA9NApq +PXQuTgpzPTcKcmV0dXJuIEEualEoQS5RNihhLEEuRUYoWyJpbmxpbmUiLCJ0cnVlIl0saixqKSx0Lkcp +LCRhc3luYyRHNykKY2FzZSA3Om49ZwpBLkJFKGEsQS5ZZihuKSxkKQpBLmZHKGIsYykKbT1BLlVzKGEp +CkEuQlgobSxiKQppZihlIT1udWxsKWUuJDAoKQpwPTIKcz02CmJyZWFrCmNhc2UgNDpwPTMKaD1vCmw9 +QS5SdShoKQprPUEudHMoaCkKQS5DMigiY291bGRuJ3QgbG9hZCBkYXJ0IGZpbGUgIithLGwsaykKcz02 +CmJyZWFrCmNhc2UgMzpzPTIKYnJlYWsKY2FzZSA2OmNhc2UgMTpyZXR1cm4gQS55QyhxLHIpCmNhc2Ug +MjpyZXR1cm4gQS5mMyhvLHIpfX0pCnJldHVybiBBLkRJKCRhc3luYyRHNyxyKX0sCkdlKCl7dmFyIHM9 +MCxyPUEuRlgodC56KSxxPTEscCxvLG4sbSxsLGssaixpLGgKdmFyICRhc3luYyRHZT1BLmx6KGZ1bmN0 +aW9uKGEsYil7aWYoYT09PTEpe3A9YgpzPXF9d2hpbGUodHJ1ZSlzd2l0Y2gocyl7Y2FzZSAwOmk9Ii9f +cHJldmlldy9uYXZpZ2F0aW9uVHJlZS5qc29uIgpxPTMKcz02CnJldHVybiBBLmpRKEEuUTYoaSxCLkNN +LHQuVyksJGFzeW5jJEdlKQpjYXNlIDY6az1iCmsudG9TdHJpbmcKbz1rCms9ZG9jdW1lbnQucXVlcnlT +ZWxlY3RvcigiLm5hdi10cmVlIikKay50b1N0cmluZwpuPWsKSi5sNShuLCIiKQprPUEubUsobykKJC5J +Uj1rCkEudFgobixrLCEwKQpxPTEKcz01CmJyZWFrCmNhc2UgMzpxPTIKaD1wCm09QS5SdShoKQpsPUEu +dHMoaCkKQS5DMigiY291bGRuJ3QgbG9hZCBuYXZpZ2F0aW9uIHRyZWUiLG0sbCkKcz01CmJyZWFrCmNh +c2UgMjpzPTEKYnJlYWsKY2FzZSA1OnJldHVybiBBLnlDKG51bGwscikKY2FzZSAxOnJldHVybiBBLmYz +KHAscil9fSkKcmV0dXJuIEEuREkoJGFzeW5jJEdlLHIpfSwKcU8oYSl7dmFyIHMscixxPWEuZ2V0Qm91 +bmRpbmdDbGllbnRSZWN0KCkscD1CLkNELnpRKCQuZmkoKS5vZmZzZXRIZWlnaHQpLG89d2luZG93Lmlu +bmVySGVpZ2h0Cm8udG9TdHJpbmcKcz1CLkNELnpRKCQuRFcoKS5vZmZzZXRIZWlnaHQpCnI9cS5ib3R0 +b20Kci50b1N0cmluZwppZihyPm8tKHMrMTQpKUouZGgoYSkKZWxzZXtvPXEudG9wCm8udG9TdHJpbmcK +aWYobzxwKzE0KUouZGgoYSl9fSwKZkcoYSxiKXt2YXIgcyxyLHEscCxvCmlmKGEhPW51bGwpe3M9ZG9j +dW1lbnQKcj1zLmdldEVsZW1lbnRCeUlkKCJvIitBLkVqKGEpKQpxPXMucXVlcnlTZWxlY3RvcigiLmxp +bmUtIitBLkVqKGIpKQppZihyIT1udWxsKXtBLnFPKHIpCkouZFIocikuaSgwLCJ0YXJnZXQiKX1lbHNl +IGlmKHEhPW51bGwpe3M9cS5wYXJlbnRFbGVtZW50CnMudG9TdHJpbmcKQS5xTyhzKX1pZihxIT1udWxs +KUouZFIodC5oLmEocS5wYXJlbnROb2RlKSkuaSgwLCJoaWdobGlnaHQiKX1lbHNle3M9ZG9jdW1lbnQK +cD10LmgKQS5EaChwLHAsIlQiLCJxdWVyeVNlbGVjdG9yQWxsIikKcz1zLnF1ZXJ5U2VsZWN0b3JBbGwo +Ii5saW5lLW5vIikKbz1uZXcgQS53eihzLHQuUikKaWYoby5nayhvKT09PTApcmV0dXJuCkEucU8ocC5h +KEIudDUuZ3RIKHMpKSl9fSwKYWYoYSxiLGMsZCxlKXt2YXIgcyxyLHEscD10LkYsbz1BLkc2KHAuYSh3 +aW5kb3cubG9jYXRpb24pLmhyZWYpLG49QS5hSyhwLmEod2luZG93LmxvY2F0aW9uKS5ocmVmKQppZihv +IT1udWxsKXtzPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJvIitBLkVqKG8pKQppZihzIT1udWxsKUou +ZFIocykuUigwLCJ0YXJnZXQiKX1pZihuIT1udWxsKXtyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5s +aW5lLSIrQS5FaihuKSkKaWYociE9bnVsbCl7cT1yLnBhcmVudEVsZW1lbnQKcS50b1N0cmluZwpKLmRS +KHEpLlIoMCwiaGlnaGxpZ2h0Iil9fWlmKGE9PXAuYSh3aW5kb3cubG9jYXRpb24pLnBhdGhuYW1lKXtB +LmZHKGIsYykKZS4kMCgpfWVsc2V7YS50b1N0cmluZwpBLkc3KGEsYixjLGQsZSl9fSwKUTQoYSxiKXt2 +YXIgcz1BLmhLKGEpLHI9cy5naFkoKSxxPUEuTDUobnVsbCxudWxsLHQuTix0LmRrKQpxLkZWKDAscikK +cS5GVigwLGIpCnEuWTUoMCwiYXV0aFRva2VuIiwkLlVFKCkpCnJldHVybiBzLm5tKDAscSkuZ25EKCl9 +LApUMShhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPSQuaEwoKQppLnRvU3RyaW5nCkoubDUoaSwi +IikKaWYoYT09bnVsbCl7cz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIikKQi5MdC5zYTQocywiU2Vl +IGRldGFpbHMgYWJvdXQgYSBwcm9wb3NlZCBlZGl0LiIpCkIuTHQuc1AocyxBLlFJKFsicGxhY2Vob2xk +ZXIiXSx0LnMpKQppLmFwcGVuZENoaWxkKHMpCkIuTHQuRkYocykKcmV0dXJufXI9YS5kCnIudG9TdHJp +bmcKcT0kLm5VKCkKcD1xLnpmKHIpCm89YS5iCm49ZG9jdW1lbnQKbT1uLnF1ZXJ5U2VsZWN0b3IoIi5y +b290IikudGV4dENvbnRlbnQKbS50b1N0cmluZwpsPXEuSFAocixCLnhCLmJTKG0pKQprPWEuYwpqPW4u +Y3JlYXRlRWxlbWVudCgicCIpCmkuYXBwZW5kQ2hpbGQoaikKai5hcHBlbmRDaGlsZChuLmNyZWF0ZVRl +eHROb2RlKEEuRWoobykrIiBhdCAiKSkKcj1hLmUKci50b1N0cmluZwpxPXQuTgpxPUEuSjYoQS5RNChy +LEEuRUYoWyJsaW5lIixKLllTKGspXSxxLHEpKSkKcS5hcHBlbmRDaGlsZChuLmNyZWF0ZVRleHROb2Rl +KGwrIjoiK0EuRWooaykrIi4iKSkKai5hcHBlbmRDaGlsZChxKQpKLmRoKGopCkEuQ0MoYSxpLHApCkEu +RnooYSxpKX0sCkxIKGExLGEyLGEzKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxj +LGIsYSxhMD0kLnlQKCkKYTAudG9TdHJpbmcKSi5sNShhMCwiIikKcz1hMi5nayhhMikKaWYoczwyKSQu +RFooKS5pbm5lclRleHQ9IlByb3Bvc2VkIEVkaXRzIgplbHNle3I9YTIuZ1B1KGEyKS5OMCgwLDAsbmV3 +IEEuRUUoKSx0LlMpCiQuRFooKS5pbm5lclRleHQ9QS5FaihyKSsiIFByb3Bvc2VkIEVkaXRzIn1pZihz +PT09MCl7cT1kb2N1bWVudApwPXEuY3JlYXRlRWxlbWVudCgicCIpCmEwLmFwcGVuZENoaWxkKHApCnAu +YXBwZW5kQ2hpbGQocS5jcmVhdGVUZXh0Tm9kZSgiTm8gcHJvcG9zZWQgZWRpdHMiKSl9ZWxzZSBmb3Io +YTA9YTIuZ1B1KGEyKSxhMD1hMC5nQShhMCkscT10LkYsbz10Lk4sbj10LlEsbT1uLkMoIn4oMSk/Iiks +bD10Llosbj1uLmM7YTAuRygpOyl7az1hMC5nbCgpCmo9ZG9jdW1lbnQKcD1qLmNyZWF0ZUVsZW1lbnQo +InAiKQppPSQueVAoKQppLmFwcGVuZENoaWxkKHApCnAuYXBwZW5kQ2hpbGQoai5jcmVhdGVUZXh0Tm9k +ZShBLkVqKGsuYSkrIjoiKSkKaD1qLmNyZWF0ZUVsZW1lbnQoInVsIikKaS5hcHBlbmRDaGlsZChoKQpm +b3Ioaz1KLklUKGsuYik7ay5HKCk7KXtpPWsuZ2woKQpnPWouY3JlYXRlRWxlbWVudCgibGkiKQpoLmFw +cGVuZENoaWxkKGcpCkouZFIoZykuaSgwLCJlZGl0IikKZj1qLmNyZWF0ZUVsZW1lbnQoImEiKQpnLmFw +cGVuZENoaWxkKGYpCmYuY2xhc3NMaXN0LmFkZCgiZWRpdC1saW5rIikKZT1pLmMKZD1BLkVqKGUpCmYu +c2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IEEuU3kobmV3IEEuaTcoZikpLk9VKCJvZmZzZXQiKSxkKQpj +PWkuYQpiPUEuRWooYykKZi5zZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgQS5TeShuZXcgQS5pNyhmKSku +T1UoImxpbmUiKSxiKQpmLmFwcGVuZENoaWxkKGouY3JlYXRlVGV4dE5vZGUoImxpbmUgIitiKSkKYT1x +LmEod2luZG93LmxvY2F0aW9uKS5wYXRobmFtZQphLnRvU3RyaW5nCmYuc2V0QXR0cmlidXRlKCJocmVm +IixBLlE0KGEsQS5FRihbImxpbmUiLGIsIm9mZnNldCIsZF0sbyxvKSkpCmQ9bS5hKG5ldyBBLlBOKGUs +YyxhMSkpCmwuYShudWxsKQpBLkpFKGYsImNsaWNrIixkLCExLG4pCmcuYXBwZW5kQ2hpbGQoai5jcmVh +dGVUZXh0Tm9kZSgiOiAiK0EuRWooaS5iKSkpfX1pZihhMylBLlQxKG51bGwpfSwKRnIoYSxiLGMpe3Zh +ciBzLHIscT1BLmhLKEIuRXguZ0RyKHQuRi5hKHdpbmRvdy5sb2NhdGlvbikpK0EuRWooYSkpLHA9QS5G +bCh0Lk4sdC5kaykKaWYoYiE9bnVsbClwLlk1KDAsIm9mZnNldCIsQS5FaihiKSkKaWYoYyE9bnVsbClw +Llk1KDAsImxpbmUiLEEuRWooYykpCnAuWTUoMCwiYXV0aFRva2VuIiwkLlVFKCkpCnE9cS5ubSgwLHAp +CnA9d2luZG93Lmhpc3RvcnkKcz10LnoKcj1xLmduRCgpCnAucHVzaFN0YXRlKG5ldyBBLkJmKFtdLFtd +KS5QdihBLkZsKHMscykpLCIiLHIpfSwKRW4oYSl7dmFyIHMscj1kb2N1bWVudC5xdWVyeVNlbGVjdG9y +KCIucm9vdCIpLnRleHRDb250ZW50CnIudG9TdHJpbmcKcz1yKyIvIgppZihCLnhCLm4oYSxzKSlyZXR1 +cm4gQi54Qi55bihhLHMubGVuZ3RoKQplbHNlIHJldHVybiBhfSwKT3QoYSl7c3dpdGNoKGEucil7Y2Fz +ZSBCLmN3OmJyZWFrCmNhc2UgQi5XRDphLnI9Qi5YagpicmVhawpjYXNlIEIuWGo6YS5yPUIuV0QKYnJl +YWsKY2FzZSBCLmRjOnRocm93IEEuYihBLlBWKCJGaWxlICIrQS5FaihhLmMpKyIgc2hvdWxkIG5vdCBo +YXZlIGluZGV0ZXJtaW5hdGUgbWlncmF0aW9uIHN0YXR1cyIpKQpkZWZhdWx0OmJyZWFrfX0sCnRhKGEs +Yil7dmFyIHMscj0iY2hlY2tfYm94IixxPSJ0aXRsZSIscD0ib3B0ZWQtb3V0IixvPSJtaWdyYXRpbmci +CnN3aXRjaChiKXtjYXNlIEIuY3c6YS5pbm5lclRleHQ9cgpzPUouWUUoYSkKcy5nUChhKS5pKDAsImFs +cmVhZHktbWlncmF0ZWQiKQpzLmdQKGEpLmkoMCwiZGlzYWJsZWQiKQphLnNldEF0dHJpYnV0ZShxLCJB +bHJlYWR5IG1pZ3JhdGVkIikKYnJlYWsKY2FzZSBCLldEOmEuaW5uZXJUZXh0PXIKcz1KLllFKGEpCnMu +Z1AoYSkuUigwLHApCnMuZ1AoYSkuaSgwLG8pCmEuc2V0QXR0cmlidXRlKHEsIk1pZ3JhdGluZyB0byBu +dWxsIHNhZmV0eSIpCmJyZWFrCmNhc2UgQi5YajphLmlubmVyVGV4dD0iY2hlY2tfYm94X291dGxpbmVf +YmxhbmsiCnM9Si5ZRShhKQpzLmdQKGEpLlIoMCxvKQpzLmdQKGEpLmkoMCxwKQphLnNldEF0dHJpYnV0 +ZShxLCJPcHRpbmcgb3V0IG9mIG51bGwgc2FmZXR5IikKYnJlYWsKZGVmYXVsdDphLmlubmVyVGV4dD0i +aW5kZXRlcm1pbmF0ZV9jaGVja19ib3giCnM9Si5ZRShhKQpzLmdQKGEpLlIoMCxvKQpzLmdQKGEpLmko +MCxwKQphLnNldEF0dHJpYnV0ZShxLCJNaXhlZCBzdGF0dXNlcyBvZiAnbWlncmF0aW5nJyBhbmQgJ29w +dGluZyBvdXQnIikKYnJlYWt9fSwKeG4oYSxiKXt2YXIgcyxyPSJkaXNhYmxlZCIscT1iLmdMKCkKQS50 +YShhLHEpCmlmKGIuYz09PSQuRDkoKS5pbm5lclRleHQpe2lmKGIgaW5zdGFuY2VvZiBBLmNEKXtzPWIu +dwpzLnRvU3RyaW5nCnM9IXN9ZWxzZSBzPSExCmlmKHMpe2EudG9TdHJpbmcKSi5kUihhKS5pKDAscil9 +ZWxzZXthLnRvU3RyaW5nCkouZFIoYSkuUigwLHIpfUEudGEoJC5jMCgpLHEpfX0sCkJYKGEsYil7dmFy +IHMscixxLHA9e30KcC5hPWEKYT1BLkVuKGEpCnAuYT1hCnM9JC5EOSgpCnMudG9TdHJpbmcKSi5kcihz +LGEpCnM9ZG9jdW1lbnQKcj10LmgKQS5EaChyLHIsIlQiLCJxdWVyeVNlbGVjdG9yQWxsIikKcz1uZXcg +QS53eihzLnF1ZXJ5U2VsZWN0b3JBbGwoIi5uYXYtcGFuZWwgLm5hdi1saW5rIiksdC5SKQpzLksocyxu +ZXcgQS5WUyhwKSkKcz0kLklSCnE9cz09bnVsbD9udWxsOkEueXcocyxwLmEpCmlmKHE9PW51bGwpe3A9 +JC5iTigpCnAudG9TdHJpbmcKSi5kUihwKS5SKDAsInZpc2libGUiKX1lbHNle3A9JC5iTigpCnAudG9T +dHJpbmcKSi5kUihwKS5pKDAsInZpc2libGUiKQpBLnRhKCQuYzAoKSxxLmdMKCkpfX0sCkFSKGEsYil7 +dmFyIHMscixxPWIuYgpxPT09JCYmQS55aygicGFyZW50IikKcz10LmgKcj1zLmEocy5hKGEucGFyZW50 +Tm9kZSkucGFyZW50Tm9kZSkKQS54bihyLnF1ZXJ5U2VsZWN0b3IoIjpzY29wZSA+IC5zdGF0dXMtaWNv +biIpLHEpCkEuQVIocixxKX0sCmJMKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbD0iOnNjb3BlID4gLnN0 +YXR1cy1pY29uIgpmb3Iocz1iLmQscj1zLmxlbmd0aCxxPXQuaCxwPTA7cDxzLmxlbmd0aDtzLmxlbmd0 +aD09PXJ8fCgwLEEubGspKHMpLCsrcCl7bz1zW3BdCmEudG9TdHJpbmcKbj1vLmMKbi50b1N0cmluZwpt +PWEucXVlcnlTZWxlY3RvcignW2RhdGEtbmFtZSo9IicrQS5MaihuKSsnIl0nKQppZihvIGluc3RhbmNl +b2YgQS52dCl7QS5iTChtLG8pCkEueG4obS5xdWVyeVNlbGVjdG9yKGwpLGIpfWVsc2UgQS54bihxLmEo +bS5wYXJlbnROb2RlKS5xdWVyeVNlbGVjdG9yKGwpLG8pfX0sCkJFKGEsYixjKXt2YXIgcz0iLnJlZ2lv +bnMiLHI9ZG9jdW1lbnQscT1yLnF1ZXJ5U2VsZWN0b3IocykKcS50b1N0cmluZwpyPXIucXVlcnlTZWxl +Y3RvcigiLmNvZGUiKQpyLnRvU3RyaW5nCkoudEgocSxiLmEsJC5LRygpKQpKLnRIKHIsYi5iLCQuS0co +KSkKQS5MSChhLGIuZCxjKQppZihiLmMubGVuZ3RoPDJlNSlBLkdnKCkKQS55WCgiLmNvZGUiLCEwKQpB +LnlYKHMsITApfSwKdFgoYTAsYTEsYTIpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxk +PSJtYXRlcmlhbC1pY29ucyIsYz0ic3RhdHVzLWljb24iLGI9ZG9jdW1lbnQsYT1iLmNyZWF0ZUVsZW1l +bnQoInVsIikKYTAuYXBwZW5kQ2hpbGQoYSkKZm9yKHM9YTEubGVuZ3RoLHI9dC5OLHE9dC5aLHA9MDtw +PGExLmxlbmd0aDthMS5sZW5ndGg9PT1zfHwoMCxBLmxrKShhMSksKytwKXtvPWExW3BdCm49Yi5jcmVh +dGVFbGVtZW50KCJsaSIpCmEuYXBwZW5kQ2hpbGQobikKaWYobyBpbnN0YW5jZW9mIEEudnQpe209Si5Z +RShuKQptLmdQKG4pLmkoMCwiZGlyIikKbD1vLmMKbC50b1N0cmluZwpuLnNldEF0dHJpYnV0ZSgiZGF0 +YS0iK25ldyBBLlN5KG5ldyBBLmk3KG4pKS5PVSgibmFtZSIpLGwpCms9Yi5jcmVhdGVFbGVtZW50KCJz +cGFuIikKbi5hcHBlbmRDaGlsZChrKQpsPUouWUUoaykKbC5nUChrKS5pKDAsImFycm93IikKbC5zaGYo +aywiJiN4MjVCQzsiKQpqPWIuY3JlYXRlRWxlbWVudCgic3BhbiIpCkouZFIoaikuaSgwLGQpCmouaW5u +ZXJUZXh0PSJmb2xkZXJfb3BlbiIKbi5hcHBlbmRDaGlsZChqKQpsPW8uYQpsLnRvU3RyaW5nCm4uYXBw +ZW5kQ2hpbGQoYi5jcmVhdGVUZXh0Tm9kZShsKSkKbD1vLmQKbC50b1N0cmluZwpBLnRYKG4sbCwhMCkK +aT1iLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpsPUouWUUoaSkKbC5nUChpKS5pKDAsZCkKaS5pbm5lclRl +eHQ9ImluZGV0ZXJtaW5hdGVfY2hlY2tfYm94IgpsLmdQKGkpLmkoMCxjKQpBLnhuKGksbykKbD1sLmdW +bChpKQpoPWwuJHRpCmc9aC5DKCJ+KDEpPyIpLmEobmV3IEEuVEQobyxuLGkpKQpxLmEobnVsbCkKQS5K +RShsLmEsbC5iLGcsITEsaC5jKQptLm1LKG4saSxqKQpBLmt6KGspfWVsc2UgaWYobyBpbnN0YW5jZW9m +IEEuY0Qpe2k9Yi5jcmVhdGVFbGVtZW50KCJzcGFuIikKbT1KLllFKGkpCm0uZ1AoaSkuaSgwLGQpCmku +aW5uZXJUZXh0PSIiCm0uZ1AoaSkuaSgwLGMpCmw9by53CmwudG9TdHJpbmcKaWYoIWwpbS5nUChpKS5p +KDAsImRpc2FibGVkIikKQS54bihpLG8pCmlmKGwpe209bS5nVmwoaSkKbD1tLiR0aQpoPWwuQygifigx +KT8iKS5hKG5ldyBBLklmKG8saSxuKSkKcS5hKG51bGwpCkEuSkUobS5hLG0uYixoLCExLGwuYyl9bi5h +cHBlbmRDaGlsZChpKQptPWIuY3JlYXRlRWxlbWVudCgic3BhbiIpCkouZFIobSkuaSgwLGQpCm0uaW5u +ZXJUZXh0PSJpbnNlcnRfZHJpdmVfZmlsZSIKbi5hcHBlbmRDaGlsZChtKQpmPWIuY3JlYXRlRWxlbWVu +dCgiYSIpCm4uYXBwZW5kQ2hpbGQoZikKbT1KLllFKGYpCm0uZ1AoZikuaSgwLCJuYXYtbGluayIpCmw9 +by5jCmwudG9TdHJpbmcKZi5zZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgQS5TeShuZXcgQS5pNyhmKSku +T1UoIm5hbWUiKSxsKQpsPW8uZApsLnRvU3RyaW5nCmYuc2V0QXR0cmlidXRlKCJocmVmIixBLlE0KGws +QS5GbChyLHIpKSkKbD1vLmEKbC50b1N0cmluZwpmLmFwcGVuZENoaWxkKGIuY3JlYXRlVGV4dE5vZGUo +bCkpCm09bS5nVmwoZikKbD1tLiR0aQpoPWwuQygifigxKT8iKS5hKG5ldyBBLnRCKCkpCnEuYShudWxs +KQpBLkpFKG0uYSxtLmIsaCwhMSxsLmMpCmw9by5lCmwudG9TdHJpbmcKaWYobD4wKXtlPWIuY3JlYXRl +RWxlbWVudCgic3BhbiIpCm4uYXBwZW5kQ2hpbGQoZSkKSi5kUihlKS5pKDAsImVkaXQtY291bnQiKQpp +ZihsPT09MSltPSJwcm9wb3NlZCBlZGl0IgplbHNlIG09InByb3Bvc2VkIGVkaXRzIgplLnNldEF0dHJp +YnV0ZSgidGl0bGUiLCIiK2wrIiAiK20pCmUuYXBwZW5kQ2hpbGQoYi5jcmVhdGVUZXh0Tm9kZShCLmpu +WyJbIl0obCkpKX19fX0sCnV6KGEsYixjKXt2YXIgcz1kb2N1bWVudCxyPXMuY3JlYXRlRWxlbWVudCgi +YnV0dG9uIikscT10LlEscD1xLkMoIn4oMSk/IikuYShuZXcgQS5tMihhLGMpKQp0LlouYShudWxsKQpB +LkpFKHIsImNsaWNrIixwLCExLHEuYykKcT1BLk9YKGEuYSkKcS50b1N0cmluZwpyLmFwcGVuZENoaWxk +KHMuY3JlYXRlVGV4dE5vZGUocSkpCmIuYXBwZW5kQ2hpbGQocil9LApGeihhLGIpe3ZhciBzLHIscSxw +LG8sbixtLGwsayxqLGksaD1hLmEKaWYoaD09bnVsbClyZXR1cm4KYi50b1N0cmluZwpzPWRvY3VtZW50 +CnI9cy5jcmVhdGVFbGVtZW50KCJwIikKcT1iLmFwcGVuZENoaWxkKHIpCnI9cy5jcmVhdGVFbGVtZW50 +KCJzcGFuIikKcD10LnMKSi5NdShyLEEuUUkoWyJ0eXBlLWRlc2NyaXB0aW9uIl0scCkpCnIuYXBwZW5k +Q2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiQWN0aW9ucyIpKQpxLmFwcGVuZENoaWxkKHIpCnEuYXBwZW5k +Q2hpbGQocy5jcmVhdGVUZXh0Tm9kZSgiOiIpKQpvPXMuY3JlYXRlRWxlbWVudCgicCIpCmIuYXBwZW5k +Q2hpbGQobykKZm9yKHI9aC5sZW5ndGgsbj10Lk8sbT0wO208aC5sZW5ndGg7aC5sZW5ndGg9PT1yfHwo +MCxBLmxrKShoKSwrK20pe2w9aFttXQprPXMuY3JlYXRlRWxlbWVudCgiYSIpCm8uYXBwZW5kQ2hpbGQo +aykKaj1sLmEKai50b1N0cmluZwprLmFwcGVuZENoaWxkKHMuY3JlYXRlVGV4dE5vZGUoaikpCmo9bC5i +CmoudG9TdHJpbmcKay5zZXRBdHRyaWJ1dGUoImhyZWYiLGopCmo9bi5hKEEuUUkoWyJhZGQtaGludC1s +aW5rIiwiYmVmb3JlLWFwcGx5IiwiYnV0dG9uIl0scCkpCmk9Si5kUihrKQppLlYxKDApCmkuRlYoMCxq +KX19LApDQyhhNCxhNSxhNil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYyxiLGEs +YTAsYTEsYTIsYTMKZm9yKHM9YTQuZixyPXMubGVuZ3RoLHE9dC5zLHA9dC5PLG89MDtvPHMubGVuZ3Ro +O3MubGVuZ3RoPT09cnx8KDAsQS5saykocyksKytvKXtuPXNbb10KYTUudG9TdHJpbmcKbT1kb2N1bWVu +dApsPW0uY3JlYXRlRWxlbWVudCgicCIpCms9cC5hKEEuUUkoWyJ0cmFjZSJdLHEpKQpqPUouZFIobCkK +ai5WMSgwKQpqLkZWKDAsaykKaT1hNS5hcHBlbmRDaGlsZChsKQpsPW0uY3JlYXRlRWxlbWVudCgic3Bh +biIpCms9cC5hKEEuUUkoWyJ0eXBlLWRlc2NyaXB0aW9uIl0scSkpCmo9Si5kUihsKQpqLlYxKDApCmou +RlYoMCxrKQprPW4uYQprLnRvU3RyaW5nCmwuYXBwZW5kQ2hpbGQobS5jcmVhdGVUZXh0Tm9kZShrKSkK +aS5hcHBlbmRDaGlsZChsKQppLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoIjoiKSkKbD1tLmNy +ZWF0ZUVsZW1lbnQoInVsIikKaz1wLmEoQS5RSShbInRyYWNlIl0scSkpCmo9Si5kUihsKQpqLlYxKDAp +CmouRlYoMCxrKQpoPWkuYXBwZW5kQ2hpbGQobCkKZm9yKGw9bi5iLGs9bC5sZW5ndGgsZz0wO2c8bC5s +ZW5ndGg7bC5sZW5ndGg9PT1rfHwoMCxBLmxrKShsKSwrK2cpe2Y9bFtnXQplPW0uY3JlYXRlRWxlbWVu +dCgibGkiKQpoLmFwcGVuZENoaWxkKGUpCmQ9bS5jcmVhdGVFbGVtZW50KCJzcGFuIikKYz1wLmEoQS5R +SShbImZ1bmN0aW9uIl0scSkpCmo9Si5kUihkKQpqLlYxKDApCmouRlYoMCxjKQpjPWYuYgpBLldqKGQs +Yz09bnVsbD8idW5rbm93biI6YykKZS5hcHBlbmRDaGlsZChkKQpiPWYuYwppZihiIT1udWxsKXtlLmFw +cGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoIiAoIikpCmE9Yi5iCmEwPW0uY3JlYXRlRWxlbWVudCgi +YSIpCmEwLmFwcGVuZENoaWxkKG0uY3JlYXRlVGV4dE5vZGUoQS5FaihiLmMpKyI6IitBLkVqKGEpKSkK +ZD1iLmEKZC50b1N0cmluZwphMC5zZXRBdHRyaWJ1dGUoImhyZWYiLGQpCmEwLmNsYXNzTGlzdC5hZGQo +Im5hdi1saW5rIikKZS5hcHBlbmRDaGlsZChhMCkKZS5hcHBlbmRDaGlsZChtLmNyZWF0ZVRleHROb2Rl +KCIpIikpfWUuYXBwZW5kQ2hpbGQobS5jcmVhdGVUZXh0Tm9kZSgiOiAiKSkKZD1mLmEKQS5XaihlLGQ9 +PW51bGw/InVua25vd24iOmQpCmQ9Zi5kCmlmKGQubGVuZ3RoIT09MCl7Yz1tLmNyZWF0ZUVsZW1lbnQo +InAiKQphMT1wLmEoQS5RSShbImRyYXdlciIsImJlZm9yZS1hcHBseSJdLHEpKQpqPUouZFIoYykKai5W +MSgwKQpqLkZWKDAsYTEpCmEyPWUuYXBwZW5kQ2hpbGQoYykKZm9yKGM9ZC5sZW5ndGgsYTM9MDthMzxk +Lmxlbmd0aDtkLmxlbmd0aD09PWN8fCgwLEEubGspKGQpLCsrYTMpQS51eihkW2EzXSxhMixiKX19fX0s +ClVzKGEpe3JldHVybiBCLnhCLnRnKGEsIj8iKT9CLnhCLk5qKGEsMCxCLnhCLk9ZKGEsIj8iKSk6YX0s +ClRHKGEsYil7cmV0dXJuIG5ldyBBLlFXKGEsYil9LAp5dyhhLGIpe3ZhciBzLHIscSxwLG8KZm9yKHM9 +YS5sZW5ndGgscj0wO3I8YS5sZW5ndGg7YS5sZW5ndGg9PT1zfHwoMCxBLmxrKShhKSwrK3Ipe3E9YVty +XQppZihxIGluc3RhbmNlb2YgQS52dCl7cD1xLmQKcC50b1N0cmluZwpvPUEueXcocCxiKQppZihvIT1u +dWxsKXJldHVybiBvfWVsc2UgaWYocS5jPT09YilyZXR1cm4gcX1yZXR1cm4gbnVsbH0sCldqKGEsYil7 +dmFyIHMscixxLHA9QS5RSShiLnNwbGl0KCIuIiksdC5zKSxvPUIuTm0uZ3RIKHApLG49ZG9jdW1lbnQK +YS5hcHBlbmRDaGlsZChuLmNyZWF0ZVRleHROb2RlKG8pKQpmb3Iobz1BLnFDKHAsMSxudWxsLHQuTiks +cz1vLiR0aSxvPW5ldyBBLmE3KG8sby5nayhvKSxzLkMoImE3PGFMLkU+IikpLHI9Si5ZRShhKSxzPXMu +QygiYUwuRSIpO28uRygpOyl7cT1vLmQKaWYocT09bnVsbClxPXMuYShxKQpyLm56KGEsImJlZm9yZWVu +ZCIsIiYjODIwMzsuIixudWxsLG51bGwpCmEuYXBwZW5kQ2hpbGQobi5jcmVhdGVUZXh0Tm9kZShxKSl9 +fSwKZTpmdW5jdGlvbiBlKCl7fSwKVlc6ZnVuY3Rpb24gVlcoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1i +CnRoaXMuYz1jfSwKb1o6ZnVuY3Rpb24gb1ooKXt9LApqcjpmdW5jdGlvbiBqcigpe30sCnFsOmZ1bmN0 +aW9uIHFsKCl7fSwKeTg6ZnVuY3Rpb24geTgoKXt9LApIaTpmdW5jdGlvbiBIaSgpe30sCkJUOmZ1bmN0 +aW9uIEJUKCl7fSwKUFk6ZnVuY3Rpb24gUFkoKXt9LApMOmZ1bmN0aW9uIEwoKXt9LApXeDpmdW5jdGlv +biBXeChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKSG86ZnVuY3Rpb24gSG8oYSl7dGhpcy5hPWF9LApJ +QzpmdW5jdGlvbiBJQyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKZkM6ZnVuY3Rpb24gZkMoYSxiKXt0 +aGlzLmE9YQp0aGlzLmI9Yn0sClRtOmZ1bmN0aW9uIFRtKCl7fSwKblQ6ZnVuY3Rpb24gblQoYSxiLGMp +e3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKTlk6ZnVuY3Rpb24gTlkoYSl7dGhpcy5hPWF9LAp1 +ZTpmdW5jdGlvbiB1ZSgpe30sCkdIOmZ1bmN0aW9uIEdIKCl7fSwKRUU6ZnVuY3Rpb24gRUUoKXt9LApQ +TjpmdW5jdGlvbiBQTihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApRTDpmdW5jdGlv +biBRTChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKVlM6ZnVuY3Rpb24gVlMoYSl7dGhpcy5hPWF9LApU +RDpmdW5jdGlvbiBURChhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApJZjpmdW5jdGlv +biBJZihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LAp0QjpmdW5jdGlvbiB0Qigpe30s +Cm0yOmZ1bmN0aW9uIG0yKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApRVzpmdW5jdGlvbiBRVyhhLGIp +e3RoaXMuYT1hCnRoaXMuYj1ifSwKWEE6ZnVuY3Rpb24gWEEoKXt9LApacyhhKXt2YXIgcyxyLHE9Si5V +NihhKQppZihBLnAyKEEuayhxLnEoYSwidHlwZSIpKSk9PT1CLlkyKXtzPUEuayhxLnEoYSwibmFtZSIp +KQpyPUEuayhxLnEoYSwicGF0aCIpKQpxPXEucShhLCJzdWJ0cmVlIikKcT1uZXcgQS52dChxPT1udWxs +P251bGw6QS5tSyh0LlcuYShxKSkscyxyKQpxLkxWKCkKcmV0dXJuIHF9ZWxzZXtzPUEuayhxLnEoYSwi +bmFtZSIpKQpyPUEuayhxLnEoYSwicGF0aCIpKQpyZXR1cm4gbmV3IEEuY0QoQS5rKHEucShhLCJocmVm +IikpLEEuVWMocS5xKGEsImVkaXRDb3VudCIpKSxBLk00KHEucShhLCJ3YXNFeHBsaWNpdGx5T3B0ZWRP +dXQiKSksQS52QihBLlVjKHEucShhLCJtaWdyYXRpb25TdGF0dXMiKSkpLEEuTTQocS5xKGEsIm1pZ3Jh +dGlvblN0YXR1c0NhbkJlQ2hhbmdlZCIpKSxzLHIpfX0sCm1LKGEpe3ZhciBzLHI9QS5RSShbXSx0LmZo +KQpmb3Iocz1KLklUKGEpO3MuRygpOylyLnB1c2goQS5acyhzLmdsKCkpKQpyZXR1cm4gcn0sClZEKGEp +e3ZhciBzLHIscT1BLlFJKFtdLHQuZCkKZm9yKHM9YS5sZW5ndGgscj0wO3I8YS5sZW5ndGg7YS5sZW5n +dGg9PT1zfHwoMCxBLmxrKShhKSwrK3IpcS5wdXNoKGFbcl0uTHQoKSkKcmV0dXJuIHF9LAp2QihhKXtp +ZihhPT1udWxsKXJldHVybiBudWxsCmlmKGE+Pj4wIT09YXx8YT49NClyZXR1cm4gQS5PSChCLldHLGEp +CnJldHVybiBCLldHW2FdfSwKcDIoYSl7c3dpdGNoKGEpe2Nhc2UiZGlyZWN0b3J5IjpyZXR1cm4gQi5Z +MgpjYXNlImZpbGUiOnJldHVybiBCLnJmCmRlZmF1bHQ6dGhyb3cgQS5iKEEuUFYoIlVucmVjb2duaXpl +ZCBuYXZpZ2F0aW9uIHRyZWUgbm9kZSB0eXBlOiAiK0EuRWooYSkpKX19LAp2dDpmdW5jdGlvbiB2dChh +LGIsYyl7dmFyIF89dGhpcwpfLmQ9YQpfLmE9YgpfLmI9JApfLmM9Y30sCmNEOmZ1bmN0aW9uIGNEKGEs +YixjLGQsZSxmLGcpe3ZhciBfPXRoaXMKXy5kPWEKXy5lPWIKXy5mPWMKXy5yPWQKXy53PWUKXy5hPWYK +Xy5iPSQKXy5jPWd9LApEODpmdW5jdGlvbiBEOCgpe30sCk85OmZ1bmN0aW9uIE85KGEsYil7dGhpcy5h +PWEKdGhpcy5iPWJ9LApHYjpmdW5jdGlvbiBHYihhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKbnooYSl7 +dmFyIHM9QS5VYyhhLnEoMCwibm9kZUlkIikpCnJldHVybiBuZXcgQS5MTChCLk5tLkh0KEIuTW0sbmV3 +IEEuTUQoYSkpLHMpfSwKT1goYSl7c3dpdGNoKGEuYSl7Y2FzZSAwOnJldHVybiJBZGQgLyo/Ki8gaGlu +dCIKY2FzZSAxOnJldHVybiJBZGQgLyohKi8gaGludCIKY2FzZSA0OnJldHVybiJSZW1vdmUgLyo/Ki8g +aGludCIKY2FzZSA1OnJldHVybiJSZW1vdmUgLyohKi8gaGludCIKY2FzZSAyOnJldHVybiJDaGFuZ2Ug +dG8gLyo/Ki8gaGludCIKY2FzZSAzOnJldHVybiJDaGFuZ2UgdG8gLyohKi8gaGludCJ9fSwKTEw6ZnVu +Y3Rpb24gTEwoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCk1EOmZ1bmN0aW9uIE1EKGEpe3RoaXMuYT1h +fSwKSDc6ZnVuY3Rpb24gSDcoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCllGKGEsYil7dmFyIHMscixx +LHAsbyxuLG0sbApmb3Iocz1iLmxlbmd0aCxyPTE7cjxzOysrcil7aWYoYltyXT09bnVsbHx8YltyLTFd +IT1udWxsKWNvbnRpbnVlCmZvcig7cz49MTtzPXEpe3E9cy0xCmlmKGJbcV0hPW51bGwpYnJlYWt9cD1u +ZXcgQS5NKCIiKQpvPSIiKyhhKyIoIikKcC5hPW8Kbj1BLnQ2KGIpCm09bi5DKCJuSDwxPiIpCmw9bmV3 +IEEubkgoYiwwLHMsbSkKbC5IZChiLDAscyxuLmMpCm09bytuZXcgQS5sSihsLG0uQygicVUoYUwuRSki +KS5hKG5ldyBBLk5vKCkpLG0uQygibEo8YUwuRSxxVT4iKSkuSCgwLCIsICIpCnAuYT1tCnAuYT1tKygi +KTogcGFydCAiKyhyLTEpKyIgd2FzIG51bGwsIGJ1dCBwYXJ0ICIrcisiIHdhcyBub3QuIikKdGhyb3cg +QS5iKEEueFkocFsiWyJdKDApLG51bGwpKX19LApsSTpmdW5jdGlvbiBsSShhKXt0aGlzLmE9YX0sCnE3 +OmZ1bmN0aW9uIHE3KCl7fSwKTm86ZnVuY3Rpb24gTm8oKXt9LApmdjpmdW5jdGlvbiBmdigpe30sCkNM +KGEsYil7dmFyIHMscixxLHAsbyxuPWIueFooYSkKYi5oSyhhKQppZihuIT1udWxsKWE9Qi54Qi55bihh +LG4ubGVuZ3RoKQpzPXQucwpyPUEuUUkoW10scykKcT1BLlFJKFtdLHMpCnM9YS5sZW5ndGgKaWYocyE9 +PTAmJmIucjQoQi54Qi5XKGEsMCkpKXtpZigwPj1zKXJldHVybiBBLk9IKGEsMCkKQi5ObS5pKHEsYVsw +XSkKcD0xfWVsc2V7Qi5ObS5pKHEsIiIpCnA9MH1mb3Iobz1wO288czsrK28paWYoYi5yNChCLnhCLlco +YSxvKSkpe0IuTm0uaShyLEIueEIuTmooYSxwLG8pKQpCLk5tLmkocSxhW29dKQpwPW8rMX1pZihwPHMp +e0IuTm0uaShyLEIueEIueW4oYSxwKSkKQi5ObS5pKHEsIiIpfXJldHVybiBuZXcgQS5XRChiLG4scixx +KX0sCldEOmZ1bmN0aW9uIFdEKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5kPWMKXy5l +PWR9LApJNyhhKXtyZXR1cm4gbmV3IEEuZHYoYSl9LApkdjpmdW5jdGlvbiBkdihhKXt0aGlzLmE9YX0s +ClJoKCl7dmFyIHMscj1udWxsCmlmKEEudW8oKS5nRmkoKSE9PSJmaWxlIilyZXR1cm4gJC5FYigpCnM9 +QS51bygpCmlmKCFCLnhCLlRjKHMuZ0lpKHMpLCIvIikpcmV0dXJuICQuRWIoKQppZihBLktMKHIsImEv +YiIscixyLHIscixyKS50NCgpPT09ImFcXGIiKXJldHVybiAkLktrKCkKcmV0dXJuICQuYkQoKX0sCnpM +OmZ1bmN0aW9uIHpMKCl7fSwKT0Y6ZnVuY3Rpb24gT0YoYSxiLGMpe3RoaXMuZD1hCnRoaXMuZT1iCnRo +aXMuZj1jfSwKcnU6ZnVuY3Rpb24gcnUoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmQ9YQpfLmU9YgpfLmY9 +YwpfLnI9ZH0sCklWOmZ1bmN0aW9uIElWKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5kPWEKXy5lPWIKXy5m +PWMKXy5yPWR9LApSOShhKXtyZXR1cm4gdC53LmIoYSl8fHQuQi5iKGEpfHx0LmR6LmIoYSl8fHQueC5i +KGEpfHx0LkEuYihhKXx8dC5nNC5iKGEpfHx0LmcyLmIoYSl9LAp5ayhhKXtyZXR1cm4gQS52KEEubGEo +YSkpfSwKYnQoYSl7cmV0dXJuIEEudihBLlJJKGEpKX0sCnBSKGEpe3JldHVybiBBLnYoQS5qKGEpKX0s +CmFiKCl7dmFyIHMscixxLHAsbz1udWxsCnRyeXtvPUEudW8oKX1jYXRjaChzKXtpZih0Lmc4LmIoQS5S +dShzKSkpe3I9JC5GZgppZihyIT1udWxsKXJldHVybiByCnRocm93IHN9ZWxzZSB0aHJvdyBzfWlmKEou +Uk0obywkLkk2KSl7cj0kLkZmCnIudG9TdHJpbmcKcmV0dXJuIHJ9JC5JNj1vCmlmKCQuSGsoKT09JC5F +YigpKXI9JC5GZj1vLlpJKCIuIilbIlsiXSgwKQplbHNle3E9by50NCgpCnA9cS5sZW5ndGgtMQpyPSQu +RmY9cD09PTA/cTpCLnhCLk5qKHEsMCxwKX1yZXR1cm4gcn0sCk9TKGEpe3ZhciBzCmlmKCEoYT49NjUm +JmE8PTkwKSlzPWE+PTk3JiZhPD0xMjIKZWxzZSBzPSEwCnJldHVybiBzfSwKWXUoYSxiKXt2YXIgcz1h +Lmxlbmd0aCxyPWIrMgppZihzPHIpcmV0dXJuITEKaWYoIUEuT1MoQi54Qi5PKGEsYikpKXJldHVybiEx +CmlmKEIueEIuTyhhLGIrMSkhPT01OClyZXR1cm4hMQppZihzPT09cilyZXR1cm4hMApyZXR1cm4gQi54 +Qi5PKGEscik9PT00N319LEo9ewpRdShhLGIsYyxkKXtyZXR1cm57aTphLHA6YixlOmMseDpkfX0sCmtz +KGEpe3ZhciBzLHIscSxwLG8sbj1hW3YuZGlzcGF0Y2hQcm9wZXJ0eU5hbWVdCmlmKG49PW51bGwpaWYo +JC5Cdj09bnVsbCl7QS5YRCgpCm49YVt2LmRpc3BhdGNoUHJvcGVydHlOYW1lXX1pZihuIT1udWxsKXtz +PW4ucAppZighMT09PXMpcmV0dXJuIG4uaQppZighMD09PXMpcmV0dXJuIGEKcj1PYmplY3QuZ2V0UHJv +dG90eXBlT2YoYSkKaWYocz09PXIpcmV0dXJuIG4uaQppZihuLmU9PT1yKXRocm93IEEuYihBLlNZKCJS +ZXR1cm4gaW50ZXJjZXB0b3IgZm9yICIrQS5FaihzKGEsbikpKSl9cT1hLmNvbnN0cnVjdG9yCmlmKHE9 +PW51bGwpcD1udWxsCmVsc2V7bz0kLnptCmlmKG89PW51bGwpbz0kLnptPXYuZ2V0SXNvbGF0ZVRhZygi +XyRkYXJ0X2pzIikKcD1xW29dfWlmKHAhPW51bGwpcmV0dXJuIHAKcD1BLnczKGEpCmlmKHAhPW51bGwp +cmV0dXJuIHAKaWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpcmV0dXJuIEIuREcKcz1PYmplY3QuZ2V0UHJv +dG90eXBlT2YoYSkKaWYocz09bnVsbClyZXR1cm4gQi5aUQppZihzPT09T2JqZWN0LnByb3RvdHlwZSly +ZXR1cm4gQi5aUQppZih0eXBlb2YgcT09ImZ1bmN0aW9uIil7bz0kLnptCmlmKG89PW51bGwpbz0kLnpt +PXYuZ2V0SXNvbGF0ZVRhZygiXyRkYXJ0X2pzIikKT2JqZWN0LmRlZmluZVByb3BlcnR5KHEsbyx7dmFs +dWU6Qi52QixlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KQpy +ZXR1cm4gQi52Qn1yZXR1cm4gQi52Qn0sClFpKGEsYil7aWYoYTwwfHxhPjQyOTQ5NjcyOTUpdGhyb3cg +QS5iKEEuVEUoYSwwLDQyOTQ5NjcyOTUsImxlbmd0aCIsbnVsbCkpCnJldHVybiBKLnB5KG5ldyBBcnJh +eShhKSxiKX0sCktoKGEsYil7aWYoYTwwKXRocm93IEEuYihBLnhZKCJMZW5ndGggbXVzdCBiZSBhIG5v +bi1uZWdhdGl2ZSBpbnRlZ2VyOiAiK2EsbnVsbCkpCnJldHVybiBBLlFJKG5ldyBBcnJheShhKSxiLkMo +ImpkPDA+IikpfSwKcHkoYSxiKXtyZXR1cm4gSi5FcChBLlFJKGEsYi5DKCJqZDwwPiIpKSxiKX0sCkVw +KGEsYil7YS5maXhlZCRsZW5ndGg9QXJyYXkKcmV0dXJuIGF9LAp6QyhhKXthLmZpeGVkJGxlbmd0aD1B +cnJheQphLmltbXV0YWJsZSRsaXN0PUFycmF5CnJldHVybiBhfSwKR2EoYSl7aWYoYTwyNTYpc3dpdGNo +KGEpe2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMzI6Y2FzZSAxMzM6 +Y2FzZSAxNjA6cmV0dXJuITAKZGVmYXVsdDpyZXR1cm4hMX1zd2l0Y2goYSl7Y2FzZSA1NzYwOmNhc2Ug +ODE5MjpjYXNlIDgxOTM6Y2FzZSA4MTk0OmNhc2UgODE5NTpjYXNlIDgxOTY6Y2FzZSA4MTk3OmNhc2Ug +ODE5ODpjYXNlIDgxOTk6Y2FzZSA4MjAwOmNhc2UgODIwMTpjYXNlIDgyMDI6Y2FzZSA4MjMyOmNhc2Ug +ODIzMzpjYXNlIDgyMzk6Y2FzZSA4Mjg3OmNhc2UgMTIyODg6Y2FzZSA2NTI3OTpyZXR1cm4hMApkZWZh +dWx0OnJldHVybiExfX0sCm1tKGEsYil7dmFyIHMscgpmb3Iocz1hLmxlbmd0aDtiPHM7KXtyPUIueEIu +VyhhLGIpCmlmKHIhPT0zMiYmciE9PTEzJiYhSi5HYShyKSlicmVhazsrK2J9cmV0dXJuIGJ9LApjMShh +LGIpe3ZhciBzLHIKZm9yKDtiPjA7Yj1zKXtzPWItMQpyPUIueEIuTyhhLHMpCmlmKHIhPT0zMiYmciE9 +PTEzJiYhSi5HYShyKSlicmVha31yZXR1cm4gYn0sClU2KGEpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIily +ZXR1cm4gSi5Eci5wcm90b3R5cGUKaWYoYT09bnVsbClyZXR1cm4gYQppZihhLmNvbnN0cnVjdG9yPT1B +cnJheSlyZXR1cm4gSi5qZC5wcm90b3R5cGUKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2Yg +YT09ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5wcm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9m +IEEuTWgpcmV0dXJuIGEKcmV0dXJuIEoua3MoYSl9LApZRShhKXtpZihhPT1udWxsKXJldHVybiBhCmlm +KHR5cGVvZiBhIT0ib2JqZWN0Iil7aWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpcmV0dXJuIEouYzUucHJv +dG90eXBlCnJldHVybiBhfWlmKGEgaW5zdGFuY2VvZiBBLk1oKXJldHVybiBhCnJldHVybiBKLmtzKGEp +fSwKaWEoYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXtpZihNYXRoLmZsb29yKGEpPT1hKXJldHVybiBK +Lkw3LnByb3RvdHlwZQpyZXR1cm4gSi5rRC5wcm90b3R5cGV9aWYodHlwZW9mIGE9PSJzdHJpbmciKXJl +dHVybiBKLkRyLnByb3RvdHlwZQppZihhPT1udWxsKXJldHVybiBKLndlLnByb3RvdHlwZQppZih0eXBl +b2YgYT09ImJvb2xlYW4iKXJldHVybiBKLnlFLnByb3RvdHlwZQppZihhLmNvbnN0cnVjdG9yPT1BcnJh +eSlyZXR1cm4gSi5qZC5wcm90b3R5cGUKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2YgYT09 +ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5wcm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9mIEEu +TWgpcmV0dXJuIGEKcmV0dXJuIEoua3MoYSl9LApyWShhKXtpZih0eXBlb2YgYT09InN0cmluZyIpcmV0 +dXJuIEouRHIucHJvdG90eXBlCmlmKGE9PW51bGwpcmV0dXJuIGEKaWYoIShhIGluc3RhbmNlb2YgQS5N +aCkpcmV0dXJuIEoua2QucHJvdG90eXBlCnJldHVybiBhfSwKdzEoYSl7aWYoYT09bnVsbClyZXR1cm4g +YQppZihhLmNvbnN0cnVjdG9yPT1BcnJheSlyZXR1cm4gSi5qZC5wcm90b3R5cGUKaWYodHlwZW9mIGEh +PSJvYmplY3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5wcm90b3R5cGUKcmV0 +dXJuIGF9aWYoYSBpbnN0YW5jZW9mIEEuTWgpcmV0dXJuIGEKcmV0dXJuIEoua3MoYSl9LApBNShhLGIp +e3JldHVybiBKLncxKGEpLmVSKGEsYil9LApFaChhLGIsYyl7cmV0dXJuIEouWUUoYSkubUsoYSxiLGMp +fSwKRWwoYSxiKXtyZXR1cm4gSi53MShhKS5kcihhLGIpfSwKRjcoYSl7cmV0dXJuIEouVTYoYSkuZ29y +KGEpfSwKRkwoYSxiKXtyZXR1cm4gSi5yWShhKS5kZChhLGIpfSwKR0EoYSxiKXtyZXR1cm4gSi53MShh +KS5FKGEsYil9LApIbShhKXtyZXR1cm4gSi5VNihhKS5nayhhKX0sCklUKGEpe3JldHVybiBKLncxKGEp +LmdBKGEpfSwKSnkoYSxiKXtyZXR1cm4gSi5pYShhKS5lNyhhLGIpfSwKTHQoYSl7cmV0dXJuIEouWUUo +YSkuekIoYSl9LApNMShhLGIsYyl7cmV0dXJuIEoudzEoYSkuRTIoYSxiLGMpfSwKTXUoYSxiKXtyZXR1 +cm4gSi5ZRShhKS5zUChhLGIpfSwKUk0oYSxiKXtpZihhPT1udWxsKXJldHVybiBiPT1udWxsCmlmKHR5 +cGVvZiBhIT0ib2JqZWN0IilyZXR1cm4gYiE9bnVsbCYmYT09PWIKcmV0dXJuIEouaWEoYSkuRE4oYSxi +KX0sClJYKGEpe3JldHVybiBKLncxKGEpLmJyKGEpfSwKVDAoYSl7cmV0dXJuIEouclkoYSkuYlMoYSl9 +LApVMyhhKXtyZXR1cm4gSi5pYShhKS5nbShhKX0sCllTKGEpe3JldHVybiBKLmlhKGEpWyJbIl0oYSl9 +LAphNihhLGIpe3JldHVybiBKLnJZKGEpLk8oYSxiKX0sCmJUKGEpe3JldHVybiBKLllFKGEpLkQ0KGEp +fSwKY0goYSl7cmV0dXJuIEouclkoYSkuaGMoYSl9LApkUihhKXtyZXR1cm4gSi5ZRShhKS5nUChhKX0s +CmRaKGEsYixjLGQpe3JldHVybiBKLllFKGEpLk9uKGEsYixjLGQpfSwKZGgoYSl7cmV0dXJuIEouWUUo +YSkuRkYoYSl9LApkcihhLGIpe3JldHVybiBKLllFKGEpLnNhNChhLGIpfSwKaWcoYSl7cmV0dXJuIEou +WUUoYSkuZ1FnKGEpfSwKbDUoYSxiKXtyZXR1cm4gSi5ZRShhKS5zaGYoYSxiKX0sCnFGKGEpe3JldHVy +biBKLllFKGEpLmdWbChhKX0sCnRIKGEsYixjKXtyZXR1cm4gSi5ZRShhKS5wayhhLGIsYyl9LAp1OShh +LGIsYyl7cmV0dXJuIEoudzEoYSkuWTUoYSxiLGMpfSwKdVUoYSl7cmV0dXJuIEouVTYoYSkuZ2wwKGEp +fSwKd2YoYSxiKXtyZXR1cm4gSi5ZRShhKS5zUk4oYSxiKX0sCng5KGEsYil7aWYodHlwZW9mIGI9PT0i +bnVtYmVyIilpZihhLmNvbnN0cnVjdG9yPT1BcnJheXx8dHlwZW9mIGE9PSJzdHJpbmcifHxBLkdwKGEs +YVt2LmRpc3BhdGNoUHJvcGVydHlOYW1lXSkpaWYoYj4+PjA9PT1iJiZiPGEubGVuZ3RoKXJldHVybiBh +W2JdCnJldHVybiBKLlU2KGEpLnEoYSxiKX0sCnpsKGEsYil7cmV0dXJuIEouVTYoYSkudGcoYSxiKX0s +Ckd2OmZ1bmN0aW9uIEd2KCl7fSwKeUU6ZnVuY3Rpb24geUUoKXt9LAp3ZTpmdW5jdGlvbiB3ZSgpe30s +Ck1GOmZ1bmN0aW9uIE1GKCl7fSwKdTA6ZnVuY3Rpb24gdTAoKXt9LAppQzpmdW5jdGlvbiBpQygpe30s +CmtkOmZ1bmN0aW9uIGtkKCl7fSwKYzU6ZnVuY3Rpb24gYzUoKXt9LApqZDpmdW5jdGlvbiBqZChhKXt0 +aGlzLiR0aT1hfSwKUG86ZnVuY3Rpb24gUG8oYSl7dGhpcy4kdGk9YX0sCm0xOmZ1bmN0aW9uIG0xKGEs +YixjKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz0wCl8uZD1udWxsCl8uJHRpPWN9LApxSTpmdW5j +dGlvbiBxSSgpe30sCkw3OmZ1bmN0aW9uIEw3KCl7fSwKa0Q6ZnVuY3Rpb24ga0QoKXt9LApEcjpmdW5j +dGlvbiBEcigpe319LEI9e30KdmFyIHc9W0EsSixCXQp2YXIgJD17fQpBLkZLLnByb3RvdHlwZT17fQpK +Lkd2LnByb3RvdHlwZT17CkROKGEsYil7cmV0dXJuIGE9PT1ifSwKZ20oYSl7cmV0dXJuIEEuZVEoYSl9 +LAoiWyIoYSl7cmV0dXJuIkluc3RhbmNlIG9mICciK0EubGgoYSkrIicifSwKZTcoYSxiKXt0Lm8uYShi +KQp0aHJvdyBBLmIoQS5scihhLGIuZ1dhKCksYi5nbmQoKSxiLmdWbSgpKSl9fQpKLnlFLnByb3RvdHlw +ZT17CiJbIihhKXtyZXR1cm4gU3RyaW5nKGEpfSwKZ20oYSl7cmV0dXJuIGE/NTE5MDE4OjIxODE1OX0s +CiRpYTI6MX0KSi53ZS5wcm90b3R5cGU9ewpETihhLGIpe3JldHVybiBudWxsPT1ifSwKIlsiKGEpe3Jl +dHVybiJudWxsIn0sCmdtKGEpe3JldHVybiAwfSwKJGljODoxfQpKLk1GLnByb3RvdHlwZT17fQpKLnUw +LnByb3RvdHlwZT17CmdtKGEpe3JldHVybiAwfSwKIlsiKGEpe3JldHVybiBTdHJpbmcoYSl9LAokaXZt +OjF9CkouaUMucHJvdG90eXBlPXt9Ckoua2QucHJvdG90eXBlPXt9CkouYzUucHJvdG90eXBlPXsKIlsi +KGEpe3ZhciBzPWFbJC53KCldCmlmKHM9PW51bGwpcmV0dXJuIHRoaXMudShhKQpyZXR1cm4iSmF2YVNj +cmlwdCBmdW5jdGlvbiBmb3IgIitBLkVqKEouWVMocykpfSwKJGlFSDoxfQpKLmpkLnByb3RvdHlwZT17 +CmRyKGEsYil7cmV0dXJuIG5ldyBBLmpWKGEsQS50NihhKS5DKCJAPDE+IikuS3EoYikuQygialY8MSwy +PiIpKX0sCmkoYSxiKXtBLnQ2KGEpLmMuYShiKQppZighIWEuZml4ZWQkbGVuZ3RoKUEudihBLkw0KCJh +ZGQiKSkKYS5wdXNoKGIpfSwKVzQoYSxiKXt2YXIgcwppZighIWEuZml4ZWQkbGVuZ3RoKUEudihBLkw0 +KCJyZW1vdmVBdCIpKQpzPWEubGVuZ3RoCmlmKGI+PXMpdGhyb3cgQS5iKEEuTzcoYixudWxsKSkKcmV0 +dXJuIGEuc3BsaWNlKGIsMSlbMF19LApVRyhhLGIsYyl7dmFyIHMscgpBLnQ2KGEpLkMoImNYPDE+Iiku +YShjKQppZighIWEuZml4ZWQkbGVuZ3RoKUEudihBLkw0KCJpbnNlcnRBbGwiKSkKQS53QShiLDAsYS5s +ZW5ndGgsImluZGV4IikKaWYoIXQuVS5iKGMpKWM9Si5SWChjKQpzPUouSG0oYykKYS5sZW5ndGg9YS5s +ZW5ndGgrcwpyPWIrcwp0aGlzLllXKGEscixhLmxlbmd0aCxhLGIpCnRoaXMudmcoYSxiLHIsYyl9LApG +VihhLGIpe3ZhciBzCkEudDYoYSkuQygiY1g8MT4iKS5hKGIpCmlmKCEhYS5maXhlZCRsZW5ndGgpQS52 +KEEuTDQoImFkZEFsbCIpKQppZihBcnJheS5pc0FycmF5KGIpKXt0aGlzLktoKGEsYikKcmV0dXJufWZv +cihzPUouSVQoYik7cy5HKCk7KWEucHVzaChzLmdsKCkpfSwKS2goYSxiKXt2YXIgcyxyCnQuYi5hKGIp +CnM9Yi5sZW5ndGgKaWYocz09PTApcmV0dXJuCmlmKGE9PT1iKXRocm93IEEuYihBLmE0KGEpKQpmb3Io +cj0wO3I8czsrK3IpYS5wdXNoKGJbcl0pfSwKVjEoYSl7aWYoISFhLmZpeGVkJGxlbmd0aClBLnYoQS5M +NCgiY2xlYXIiKSkKYS5sZW5ndGg9MH0sCkUyKGEsYixjKXt2YXIgcz1BLnQ2KGEpCnJldHVybiBuZXcg +QS5sSihhLHMuS3EoYykuQygiMSgyKSIpLmEoYikscy5DKCJAPDE+IikuS3EoYykuQygibEo8MSwyPiIp +KX0sCkgoYSxiKXt2YXIgcyxyPUEuTzgoYS5sZW5ndGgsIiIsITEsdC5OKQpmb3Iocz0wO3M8YS5sZW5n +dGg7KytzKXRoaXMuWTUocixzLEEuRWooYVtzXSkpCnJldHVybiByLmpvaW4oYil9LAplUihhLGIpe3Jl +dHVybiBBLnFDKGEsYixudWxsLEEudDYoYSkuYyl9LApOMChhLGIsYyxkKXt2YXIgcyxyLHEKZC5hKGIp +CkEudDYoYSkuS3EoZCkuQygiMSgxLDIpIikuYShjKQpzPWEubGVuZ3RoCmZvcihyPWIscT0wO3E8czsr +K3Epe3I9Yy4kMihyLGFbcV0pCmlmKGEubGVuZ3RoIT09cyl0aHJvdyBBLmIoQS5hNChhKSl9cmV0dXJu +IHJ9LApIdChhLGIpe3ZhciBzLHIscSxwLG8sbj1BLnQ2KGEpCm4uQygiYTIoMSkiKS5hKGIpCnM9YS5s +ZW5ndGgKZm9yKHI9bnVsbCxxPSExLHA9MDtwPHM7KytwKXtvPWFbcF0KaWYoQS5vVChiLiQxKG8pKSl7 +aWYocSl0aHJvdyBBLmIoQS5BbSgpKQpyPW8KcT0hMH1pZihzIT09YS5sZW5ndGgpdGhyb3cgQS5iKEEu +YTQoYSkpfWlmKHEpcmV0dXJuIHI9PW51bGw/bi5jLmEocik6cgp0aHJvdyBBLmIoQS5XcCgpKX0sCkUo +YSxiKXtpZighKGI+PTAmJmI8YS5sZW5ndGgpKXJldHVybiBBLk9IKGEsYikKcmV0dXJuIGFbYl19LApn +dEgoYSl7aWYoYS5sZW5ndGg+MClyZXR1cm4gYVswXQp0aHJvdyBBLmIoQS5XcCgpKX0sCmdyWihhKXt2 +YXIgcz1hLmxlbmd0aAppZihzPjApcmV0dXJuIGFbcy0xXQp0aHJvdyBBLmIoQS5XcCgpKX0sCllXKGEs +YixjLGQsZSl7dmFyIHMscixxLHAsbwpBLnQ2KGEpLkMoImNYPDE+IikuYShkKQppZighIWEuaW1tdXRh +YmxlJGxpc3QpQS52KEEuTDQoInNldFJhbmdlIikpCkEuakIoYixjLGEubGVuZ3RoKQpzPWMtYgppZihz +PT09MClyZXR1cm4KQS5rMShlLCJza2lwQ291bnQiKQppZih0LmouYihkKSl7cj1kCnE9ZX1lbHNle3I9 +Si5BNShkLGUpLnR0KDAsITEpCnE9MH1wPUouVTYocikKaWYocStzPnAuZ2socikpdGhyb3cgQS5iKEEu +YXIoKSkKaWYocTxiKWZvcihvPXMtMTtvPj0wOy0tbylhW2Irb109cC5xKHIscStvKQplbHNlIGZvcihv +PTA7bzxzOysrbylhW2Irb109cC5xKHIscStvKX0sCnZnKGEsYixjLGQpe3JldHVybiB0aGlzLllXKGEs +YixjLGQsMCl9LApWcihhLGIpe3ZhciBzLHIKQS50NihhKS5DKCJhMigxKSIpLmEoYikKcz1hLmxlbmd0 +aApmb3Iocj0wO3I8czsrK3Ipe2lmKEEub1QoYi4kMShhW3JdKSkpcmV0dXJuITAKaWYoYS5sZW5ndGgh +PT1zKXRocm93IEEuYihBLmE0KGEpKX1yZXR1cm4hMX0sCnRnKGEsYil7dmFyIHMKZm9yKHM9MDtzPGEu +bGVuZ3RoOysrcylpZihKLlJNKGFbc10sYikpcmV0dXJuITAKcmV0dXJuITF9LApnbDAoYSl7cmV0dXJu +IGEubGVuZ3RoPT09MH0sCmdvcihhKXtyZXR1cm4gYS5sZW5ndGghPT0wfSwKIlsiKGEpe3JldHVybiBB +LngoYSwiWyIsIl0iKX0sCnR0KGEsYil7dmFyIHM9QS5RSShhLnNsaWNlKDApLEEudDYoYSkpCnJldHVy +biBzfSwKYnIoYSl7cmV0dXJuIHRoaXMudHQoYSwhMCl9LApnQShhKXtyZXR1cm4gbmV3IEoubTEoYSxh +Lmxlbmd0aCxBLnQ2KGEpLkMoIm0xPDE+IikpfSwKZ20oYSl7cmV0dXJuIEEuZVEoYSl9LApnayhhKXty +ZXR1cm4gYS5sZW5ndGh9LApxKGEsYil7QS5JWihiKQppZighKGI+PTAmJmI8YS5sZW5ndGgpKXRocm93 +IEEuYihBLnUoYSxiKSkKcmV0dXJuIGFbYl19LApZNShhLGIsYyl7QS50NihhKS5jLmEoYykKaWYoISFh +LmltbXV0YWJsZSRsaXN0KUEudihBLkw0KCJpbmRleGVkIHNldCIpKQppZighKGI+PTAmJmI8YS5sZW5n +dGgpKXRocm93IEEuYihBLnUoYSxiKSkKYVtiXT1jfSwKJGliUToxLAokaWNYOjEsCiRpek06MX0KSi5Q +by5wcm90b3R5cGU9e30KSi5tMS5wcm90b3R5cGU9ewpnbCgpe3ZhciBzPXRoaXMuZApyZXR1cm4gcz09 +bnVsbD90aGlzLiR0aS5jLmEocyk6c30sCkcoKXt2YXIgcyxyPXRoaXMscT1yLmEscD1xLmxlbmd0aApp +ZihyLmIhPT1wKXRocm93IEEuYihBLmxrKHEpKQpzPXIuYwppZihzPj1wKXtyLnNGKG51bGwpCnJldHVy +biExfXIuc0YocVtzXSk7KytyLmMKcmV0dXJuITB9LApzRihhKXt0aGlzLmQ9dGhpcy4kdGkuQygiMT8i +KS5hKGEpfSwKJGlBbjoxfQpKLnFJLnByb3RvdHlwZT17CnpRKGEpe2lmKGE+MCl7aWYoYSE9PTEvMCly +ZXR1cm4gTWF0aC5yb3VuZChhKX1lbHNlIGlmKGE+LTEvMClyZXR1cm4gMC1NYXRoLnJvdW5kKDAtYSkK +dGhyb3cgQS5iKEEuTDQoIiIrYSsiLnJvdW5kKCkiKSl9LAoiWyIoYSl7aWYoYT09PTAmJjEvYTwwKXJl +dHVybiItMC4wIgplbHNlIHJldHVybiIiK2F9LApnbShhKXt2YXIgcyxyLHEscCxvPWF8MAppZihhPT09 +bylyZXR1cm4gbyY1MzY4NzA5MTEKcz1NYXRoLmFicyhhKQpyPU1hdGgubG9nKHMpLzAuNjkzMTQ3MTgw +NTU5OTQ1M3wwCnE9TWF0aC5wb3coMixyKQpwPXM8MT9zL3E6cS9zCnJldHVybigocCo5MDA3MTk5MjU0 +NzQwOTkyfDApKyhwKjM1NDIyNDMxODExNzY1MjF8MCkpKjU5OTE5NytyKjEyNTkmNTM2ODcwOTExfSwK +elkoYSxiKXt2YXIgcz1hJWIKaWYocz09PTApcmV0dXJuIDAKaWYocz4wKXJldHVybiBzCnJldHVybiBz +K2J9LApCVShhLGIpe3JldHVybihhfDApPT09YT9hL2J8MDp0aGlzLkRKKGEsYil9LApESihhLGIpe3Zh +ciBzPWEvYgppZihzPj0tMjE0NzQ4MzY0OCYmczw9MjE0NzQ4MzY0NylyZXR1cm4gc3wwCmlmKHM+MCl7 +aWYocyE9PTEvMClyZXR1cm4gTWF0aC5mbG9vcihzKX1lbHNlIGlmKHM+LTEvMClyZXR1cm4gTWF0aC5j +ZWlsKHMpCnRocm93IEEuYihBLkw0KCJSZXN1bHQgb2YgdHJ1bmNhdGluZyBkaXZpc2lvbiBpcyAiK0Eu +RWoocykrIjogIitBLkVqKGEpKyIgfi8gIitiKSl9LAp3RyhhLGIpe3ZhciBzCmlmKGE+MClzPXRoaXMu +VWgoYSxiKQplbHNle3M9Yj4zMT8zMTpiCnM9YT4+cz4+PjB9cmV0dXJuIHN9LApiZihhLGIpe2lmKDA+ +Yil0aHJvdyBBLmIoQS50TChiKSkKcmV0dXJuIHRoaXMuVWgoYSxiKX0sClVoKGEsYil7cmV0dXJuIGI+ +MzE/MDphPj4+Yn0sCiRpQ1A6MSwKJGlaWjoxfQpKLkw3LnByb3RvdHlwZT17JGlLTjoxfQpKLmtELnBy +b3RvdHlwZT17fQpKLkRyLnByb3RvdHlwZT17Ck8oYSxiKXtpZihiPDApdGhyb3cgQS5iKEEudShhLGIp +KQppZihiPj1hLmxlbmd0aClBLnYoQS51KGEsYikpCnJldHVybiBhLmNoYXJDb2RlQXQoYil9LApXKGEs +Yil7aWYoYj49YS5sZW5ndGgpdGhyb3cgQS5iKEEudShhLGIpKQpyZXR1cm4gYS5jaGFyQ29kZUF0KGIp +fSwKZGQoYSxiKXtyZXR1cm4gbmV3IEEudW4oYixhLDApfSwKaChhLGIpe3JldHVybiBhK2J9LApUYyhh +LGIpe3ZhciBzPWIubGVuZ3RoLHI9YS5sZW5ndGgKaWYocz5yKXJldHVybiExCnJldHVybiBiPT09dGhp +cy55bihhLHItcyl9LAppNyhhLGIsYyxkKXt2YXIgcz1BLmpCKGIsYyxhLmxlbmd0aCkKcmV0dXJuIGEu +c3Vic3RyaW5nKDAsYikrZCthLnN1YnN0cmluZyhzKX0sClFpKGEsYixjKXt2YXIgcwppZihjPDB8fGM+ +YS5sZW5ndGgpdGhyb3cgQS5iKEEuVEUoYywwLGEubGVuZ3RoLG51bGwsbnVsbCkpCnM9YytiLmxlbmd0 +aAppZihzPmEubGVuZ3RoKXJldHVybiExCnJldHVybiBiPT09YS5zdWJzdHJpbmcoYyxzKX0sCm4oYSxi +KXtyZXR1cm4gdGhpcy5RaShhLGIsMCl9LApOaihhLGIsYyl7cmV0dXJuIGEuc3Vic3RyaW5nKGIsQS5q +QihiLGMsYS5sZW5ndGgpKX0sCnluKGEsYil7cmV0dXJuIHRoaXMuTmooYSxiLG51bGwpfSwKaGMoYSl7 +cmV0dXJuIGEudG9Mb3dlckNhc2UoKX0sCmJTKGEpe3ZhciBzLHIscSxwPWEudHJpbSgpLG89cC5sZW5n +dGgKaWYobz09PTApcmV0dXJuIHAKaWYodGhpcy5XKHAsMCk9PT0xMzMpe3M9Si5tbShwLDEpCmlmKHM9 +PT1vKXJldHVybiIifWVsc2Ugcz0wCnI9by0xCnE9dGhpcy5PKHAscik9PT0xMzM/Si5jMShwLHIpOm8K +aWYocz09PTAmJnE9PT1vKXJldHVybiBwCnJldHVybiBwLnN1YnN0cmluZyhzLHEpfSwKSXgoYSxiKXt2 +YXIgcyxyCmlmKDA+PWIpcmV0dXJuIiIKaWYoYj09PTF8fGEubGVuZ3RoPT09MClyZXR1cm4gYQppZihi +IT09Yj4+PjApdGhyb3cgQS5iKEIuRXEpCmZvcihzPWEscj0iIjshMDspe2lmKChiJjEpPT09MSlyPXMr +cgpiPWI+Pj4xCmlmKGI9PT0wKWJyZWFrCnMrPXN9cmV0dXJuIHJ9LApYVShhLGIsYyl7dmFyIHMKaWYo +YzwwfHxjPmEubGVuZ3RoKXRocm93IEEuYihBLlRFKGMsMCxhLmxlbmd0aCxudWxsLG51bGwpKQpzPWEu +aW5kZXhPZihiLGMpCnJldHVybiBzfSwKT1koYSxiKXtyZXR1cm4gdGhpcy5YVShhLGIsMCl9LApQayhh +LGIsYyl7dmFyIHMscgppZihjPT1udWxsKWM9YS5sZW5ndGgKZWxzZSBpZihjPDB8fGM+YS5sZW5ndGgp +dGhyb3cgQS5iKEEuVEUoYywwLGEubGVuZ3RoLG51bGwsbnVsbCkpCnM9Yi5sZW5ndGgKcj1hLmxlbmd0 +aAppZihjK3M+ciljPXItcwpyZXR1cm4gYS5sYXN0SW5kZXhPZihiLGMpfSwKY24oYSxiKXtyZXR1cm4g +dGhpcy5QayhhLGIsbnVsbCl9LApJcyhhLGIsYyl7dmFyIHM9YS5sZW5ndGgKaWYoYz5zKXRocm93IEEu +YihBLlRFKGMsMCxzLG51bGwsbnVsbCkpCnJldHVybiBBLlNRKGEsYixjKX0sCnRnKGEsYil7cmV0dXJu +IHRoaXMuSXMoYSxiLDApfSwKIlsiKGEpe3JldHVybiBhfSwKZ20oYSl7dmFyIHMscixxCmZvcihzPWEu +bGVuZ3RoLHI9MCxxPTA7cTxzOysrcSl7cj1yK2EuY2hhckNvZGVBdChxKSY1MzY4NzA5MTEKcj1yKygo +ciY1MjQyODcpPDwxMCkmNTM2ODcwOTExCnJePXI+PjZ9cj1yKygociY2NzEwODg2Myk8PDMpJjUzNjg3 +MDkxMQpyXj1yPj4xMQpyZXR1cm4gcisoKHImMTYzODMpPDwxNSkmNTM2ODcwOTExfSwKZ2soYSl7cmV0 +dXJuIGEubGVuZ3RofSwKcShhLGIpe0EuSVooYikKaWYoYj49YS5sZW5ndGgpdGhyb3cgQS5iKEEudShh +LGIpKQpyZXR1cm4gYVtiXX0sCiRpdlg6MSwKJGlxVToxfQpBLkJSLnByb3RvdHlwZT17CmdBKGEpe3Zh +ciBzPUEuTGgodGhpcykKcmV0dXJuIG5ldyBBLmVUKEouSVQodGhpcy5nT04oKSkscy5DKCJAPDE+Iiku +S3Eocy56WzFdKS5DKCJlVDwxLDI+IikpfSwKZ2soYSl7cmV0dXJuIEouSG0odGhpcy5nT04oKSl9LApn +bDAoYSl7cmV0dXJuIEoudVUodGhpcy5nT04oKSl9LApnb3IoYSl7cmV0dXJuIEouRjcodGhpcy5nT04o +KSl9LAplUihhLGIpe3ZhciBzPUEuTGgodGhpcykKcmV0dXJuIEEuR0ooSi5BNSh0aGlzLmdPTigpLGIp +LHMuYyxzLnpbMV0pfSwKRShhLGIpe3JldHVybiBBLkxoKHRoaXMpLnpbMV0uYShKLkdBKHRoaXMuZ09O +KCksYikpfSwKIlsiKGEpe3JldHVybiBKLllTKHRoaXMuZ09OKCkpfX0KQS5lVC5wcm90b3R5cGU9ewpH +KCl7cmV0dXJuIHRoaXMuYS5HKCl9LApnbCgpe3JldHVybiB0aGlzLiR0aS56WzFdLmEodGhpcy5hLmds +KCkpfSwKJGlBbjoxfQpBLlp5LnByb3RvdHlwZT17CmdPTigpe3JldHVybiB0aGlzLmF9fQpBLm9sLnBy +b3RvdHlwZT17JGliUToxfQpBLlVxLnByb3RvdHlwZT17CnEoYSxiKXtyZXR1cm4gdGhpcy4kdGkuelsx +XS5hKEoueDkodGhpcy5hLEEuSVooYikpKX0sClk1KGEsYixjKXt2YXIgcz10aGlzLiR0aQpKLnU5KHRo +aXMuYSxiLHMuYy5hKHMuelsxXS5hKGMpKSl9LAokaWJROjEsCiRpek06MX0KQS5qVi5wcm90b3R5cGU9 +ewpkcihhLGIpe3JldHVybiBuZXcgQS5qVih0aGlzLmEsdGhpcy4kdGkuQygiQDwxPiIpLktxKGIpLkMo +ImpWPDEsMj4iKSl9LApnT04oKXtyZXR1cm4gdGhpcy5hfX0KQS5jLnByb3RvdHlwZT17CiJbIihhKXty +ZXR1cm4iTGF0ZUluaXRpYWxpemF0aW9uRXJyb3I6ICIrdGhpcy5hfX0KQS5xai5wcm90b3R5cGU9ewpn +ayhhKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sCnEoYSxiKXtyZXR1cm4gQi54Qi5PKHRoaXMuYSxBLkla +KGIpKX19CkEuSGIucHJvdG90eXBlPXt9CkEuYlEucHJvdG90eXBlPXt9CkEuYUwucHJvdG90eXBlPXsK +Z0EoYSl7dmFyIHM9dGhpcwpyZXR1cm4gbmV3IEEuYTcocyxzLmdrKHMpLEEuTGgocykuQygiYTc8YUwu +RT4iKSl9LApnbDAoYSl7cmV0dXJuIHRoaXMuZ2sodGhpcyk9PT0wfSwKSChhLGIpe3ZhciBzLHIscSxw +PXRoaXMsbz1wLmdrKHApCmlmKGIubGVuZ3RoIT09MCl7aWYobz09PTApcmV0dXJuIiIKcz1BLkVqKHAu +RSgwLDApKQppZihvIT09cC5nayhwKSl0aHJvdyBBLmIoQS5hNChwKSkKZm9yKHI9cyxxPTE7cTxvOysr +cSl7cj1yK2IrQS5FaihwLkUoMCxxKSkKaWYobyE9PXAuZ2socCkpdGhyb3cgQS5iKEEuYTQocCkpfXJl +dHVybiByLmNoYXJDb2RlQXQoMCk9PTA/cjpyfWVsc2V7Zm9yKHE9MCxyPSIiO3E8bzsrK3Epe3IrPUEu +RWoocC5FKDAscSkpCmlmKG8hPT1wLmdrKHApKXRocm93IEEuYihBLmE0KHApKX1yZXR1cm4gci5jaGFy +Q29kZUF0KDApPT0wP3I6cn19LApldihhLGIpe3JldHVybiB0aGlzLkdHKDAsQS5MaCh0aGlzKS5DKCJh +MihhTC5FKSIpLmEoYikpfSwKRTIoYSxiLGMpe3ZhciBzPUEuTGgodGhpcykKcmV0dXJuIG5ldyBBLmxK +KHRoaXMscy5LcShjKS5DKCIxKGFMLkUpIikuYShiKSxzLkMoIkA8YUwuRT4iKS5LcShjKS5DKCJsSjwx +LDI+IikpfSwKTjAoYSxiLGMsZCl7dmFyIHMscixxLHA9dGhpcwpkLmEoYikKQS5MaChwKS5LcShkKS5D +KCIxKDEsYUwuRSkiKS5hKGMpCnM9cC5nayhwKQpmb3Iocj1iLHE9MDtxPHM7KytxKXtyPWMuJDIocixw +LkUoMCxxKSkKaWYocyE9PXAuZ2socCkpdGhyb3cgQS5iKEEuYTQocCkpfXJldHVybiByfSwKZVIoYSxi +KXtyZXR1cm4gQS5xQyh0aGlzLGIsbnVsbCxBLkxoKHRoaXMpLkMoImFMLkUiKSl9LAp0dChhLGIpe3Jl +dHVybiBBLlkxKHRoaXMsITAsQS5MaCh0aGlzKS5DKCJhTC5FIikpfSwKYnIoYSl7cmV0dXJuIHRoaXMu +dHQoYSwhMCl9fQpBLm5ILnByb3RvdHlwZT17CkhkKGEsYixjLGQpe3ZhciBzLHI9dGhpcy5iCkEuazEo +ciwic3RhcnQiKQpzPXRoaXMuYwppZihzIT1udWxsKXtBLmsxKHMsImVuZCIpCmlmKHI+cyl0aHJvdyBB +LmIoQS5URShyLDAscywic3RhcnQiLG51bGwpKX19LApnVUQoKXt2YXIgcz1KLkhtKHRoaXMuYSkscj10 +aGlzLmMKaWYocj09bnVsbHx8cj5zKXJldHVybiBzCnJldHVybiByfSwKZ0FzKCl7dmFyIHM9Si5IbSh0 +aGlzLmEpLHI9dGhpcy5iCmlmKHI+cylyZXR1cm4gcwpyZXR1cm4gcn0sCmdrKGEpe3ZhciBzLHI9Si5I +bSh0aGlzLmEpLHE9dGhpcy5iCmlmKHE+PXIpcmV0dXJuIDAKcz10aGlzLmMKaWYocz09bnVsbHx8cz49 +cilyZXR1cm4gci1xCmlmKHR5cGVvZiBzIT09Im51bWJlciIpcmV0dXJuIHMuSE4oKQpyZXR1cm4gcy1x +fSwKRShhLGIpe3ZhciBzPXRoaXMscj1zLmdBcygpK2IKaWYoYjwwfHxyPj1zLmdVRCgpKXRocm93IEEu +YihBLkNmKGIscywiaW5kZXgiLG51bGwsbnVsbCkpCnJldHVybiBKLkdBKHMuYSxyKX0sCmVSKGEsYil7 +dmFyIHMscixxPXRoaXMKQS5rMShiLCJjb3VudCIpCnM9cS5iK2IKcj1xLmMKaWYociE9bnVsbCYmcz49 +cilyZXR1cm4gbmV3IEEuTUIocS4kdGkuQygiTUI8MT4iKSkKcmV0dXJuIEEucUMocS5hLHMscixxLiR0 +aS5jKX0sCnR0KGEsYil7dmFyIHMscixxLHA9dGhpcyxvPXAuYixuPXAuYSxtPUouVTYobiksbD1tLmdr +KG4pLGs9cC5jCmlmKGshPW51bGwmJms8bClsPWsKcz1sLW8KaWYoczw9MCl7bj1KLlFpKDAscC4kdGku +YykKcmV0dXJuIG59cj1BLk84KHMsbS5FKG4sbyksITEscC4kdGkuYykKZm9yKHE9MTtxPHM7KytxKXtC +Lk5tLlk1KHIscSxtLkUobixvK3EpKQppZihtLmdrKG4pPGwpdGhyb3cgQS5iKEEuYTQocCkpfXJldHVy +biByfX0KQS5hNy5wcm90b3R5cGU9ewpnbCgpe3ZhciBzPXRoaXMuZApyZXR1cm4gcz09bnVsbD90aGlz +LiR0aS5jLmEocyk6c30sCkcoKXt2YXIgcyxyPXRoaXMscT1yLmEscD1KLlU2KHEpLG89cC5nayhxKQpp +ZihyLmIhPT1vKXRocm93IEEuYihBLmE0KHEpKQpzPXIuYwppZihzPj1vKXtyLnNJKG51bGwpCnJldHVy +biExfXIuc0kocC5FKHEscykpOysrci5jCnJldHVybiEwfSwKc0koYSl7dGhpcy5kPXRoaXMuJHRpLkMo +IjE/IikuYShhKX0sCiRpQW46MX0KQS5pMS5wcm90b3R5cGU9ewpnQShhKXt2YXIgcz1BLkxoKHRoaXMp +CnJldHVybiBuZXcgQS5NSChKLklUKHRoaXMuYSksdGhpcy5iLHMuQygiQDwxPiIpLktxKHMuelsxXSku +QygiTUg8MSwyPiIpKX0sCmdrKGEpe3JldHVybiBKLkhtKHRoaXMuYSl9LApnbDAoYSl7cmV0dXJuIEou +dVUodGhpcy5hKX0sCkUoYSxiKXtyZXR1cm4gdGhpcy5iLiQxKEouR0EodGhpcy5hLGIpKX19CkEueHku +cHJvdG90eXBlPXskaWJROjF9CkEuTUgucHJvdG90eXBlPXsKRygpe3ZhciBzPXRoaXMscj1zLmIKaWYo +ci5HKCkpe3Muc0kocy5jLiQxKHIuZ2woKSkpCnJldHVybiEwfXMuc0kobnVsbCkKcmV0dXJuITF9LApn +bCgpe3ZhciBzPXRoaXMuYQpyZXR1cm4gcz09bnVsbD90aGlzLiR0aS56WzFdLmEocyk6c30sCnNJKGEp +e3RoaXMuYT10aGlzLiR0aS5DKCIyPyIpLmEoYSl9fQpBLmxKLnByb3RvdHlwZT17CmdrKGEpe3JldHVy +biBKLkhtKHRoaXMuYSl9LApFKGEsYil7cmV0dXJuIHRoaXMuYi4kMShKLkdBKHRoaXMuYSxiKSl9fQpB +LlU1LnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBuZXcgQS5TTyhKLklUKHRoaXMuYSksdGhpcy5iLHRo +aXMuJHRpLkMoIlNPPDE+IikpfX0KQS5TTy5wcm90b3R5cGU9ewpHKCl7dmFyIHMscgpmb3Iocz10aGlz +LmEscj10aGlzLmI7cy5HKCk7KWlmKEEub1Qoci4kMShzLmdsKCkpKSlyZXR1cm4hMApyZXR1cm4hMX0s +CmdsKCl7cmV0dXJuIHRoaXMuYS5nbCgpfX0KQS5BTS5wcm90b3R5cGU9ewplUihhLGIpe0EuTVIoYiwi +Y291bnQiLHQuUykKQS5rMShiLCJjb3VudCIpCnJldHVybiBuZXcgQS5BTSh0aGlzLmEsdGhpcy5iK2Is +QS5MaCh0aGlzKS5DKCJBTTwxPiIpKX0sCmdBKGEpe3JldHVybiBuZXcgQS5VMShKLklUKHRoaXMuYSks +dGhpcy5iLEEuTGgodGhpcykuQygiVTE8MT4iKSl9fQpBLmQ1LnByb3RvdHlwZT17CmdrKGEpe3ZhciBz +PUouSG0odGhpcy5hKS10aGlzLmIKaWYocz49MClyZXR1cm4gcwpyZXR1cm4gMH0sCmVSKGEsYil7QS5N +UihiLCJjb3VudCIsdC5TKQpBLmsxKGIsImNvdW50IikKcmV0dXJuIG5ldyBBLmQ1KHRoaXMuYSx0aGlz +LmIrYix0aGlzLiR0aSl9LAokaWJROjF9CkEuVTEucHJvdG90eXBlPXsKRygpe3ZhciBzLHIKZm9yKHM9 +dGhpcy5hLHI9MDtyPHRoaXMuYjsrK3Ipcy5HKCkKdGhpcy5iPTAKcmV0dXJuIHMuRygpfSwKZ2woKXty +ZXR1cm4gdGhpcy5hLmdsKCl9fQpBLk1CLnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBCLkd3fSwKZ2ww +KGEpe3JldHVybiEwfSwKZ2soYSl7cmV0dXJuIDB9LApFKGEsYil7dGhyb3cgQS5iKEEuVEUoYiwwLDAs +ImluZGV4IixudWxsKSl9LAplUihhLGIpe0EuazEoYiwiY291bnQiKQpyZXR1cm4gdGhpc319CkEuRnUu +cHJvdG90eXBlPXsKRygpe3JldHVybiExfSwKZ2woKXt0aHJvdyBBLmIoQS5XcCgpKX0sCiRpQW46MX0K +QS51Ni5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gbmV3IEEuSkIoSi5JVCh0aGlzLmEpLHRoaXMuJHRp +LkMoIkpCPDE+IikpfX0KQS5KQi5wcm90b3R5cGU9ewpHKCl7dmFyIHMscgpmb3Iocz10aGlzLmEscj10 +aGlzLiR0aS5jO3MuRygpOylpZihyLmIocy5nbCgpKSlyZXR1cm4hMApyZXR1cm4hMX0sCmdsKCl7cmV0 +dXJuIHRoaXMuJHRpLmMuYSh0aGlzLmEuZ2woKSl9LAokaUFuOjF9CkEuU1UucHJvdG90eXBlPXt9CkEu +UmUucHJvdG90eXBlPXsKWTUoYSxiLGMpe0EuTGgodGhpcykuQygiUmUuRSIpLmEoYykKdGhyb3cgQS5i +KEEuTDQoIkNhbm5vdCBtb2RpZnkgYW4gdW5tb2RpZmlhYmxlIGxpc3QiKSl9fQpBLncyLnByb3RvdHlw +ZT17fQpBLnd2LnByb3RvdHlwZT17CmdtKGEpe3ZhciBzPXRoaXMuX2hhc2hDb2RlCmlmKHMhPW51bGwp +cmV0dXJuIHMKcz02NjQ1OTcqSi5VMyh0aGlzLmEpJjUzNjg3MDkxMQp0aGlzLl9oYXNoQ29kZT1zCnJl +dHVybiBzfSwKIlsiKGEpe3JldHVybidTeW1ib2woIicrQS5Faih0aGlzLmEpKyciKSd9LApETihhLGIp +e2lmKGI9PW51bGwpcmV0dXJuITEKcmV0dXJuIGIgaW5zdGFuY2VvZiBBLnd2JiZ0aGlzLmE9PWIuYX0s +CiRpR0Q6MX0KQS5RQy5wcm90b3R5cGU9e30KQS5QRC5wcm90b3R5cGU9e30KQS5XVS5wcm90b3R5cGU9 +ewpnbDAoYSl7cmV0dXJuIHRoaXMuZ2sodGhpcyk9PT0wfSwKIlsiKGEpe3JldHVybiBBLm5PKHRoaXMp +fSwKWTUoYSxiLGMpe3ZhciBzPUEuTGgodGhpcykKcy5jLmEoYikKcy56WzFdLmEoYykKQS5kYygpfSwK +Z1B1KGEpe3JldHVybiB0aGlzLnE0KDAsQS5MaCh0aGlzKS5DKCJOMzwxLDI+IikpfSwKcTQoYSxiKXt2 +YXIgcz10aGlzCnJldHVybiBBLmwwKGZ1bmN0aW9uKCl7dmFyIHI9YQp2YXIgcT0wLHA9MSxvLG4sbSxs +LGssagpyZXR1cm4gZnVuY3Rpb24gJGFzeW5jJGdQdShjLGQpe2lmKGM9PT0xKXtvPWQKcT1wfXdoaWxl +KHRydWUpc3dpdGNoKHEpe2Nhc2UgMDpuPXMuZ3ZjKCksbj1uLmdBKG4pLG09QS5MaChzKSxsPW0uelsx +XSxtPW0uQygiQDwxPiIpLktxKGwpLkMoIk4zPDEsMj4iKQpjYXNlIDI6aWYoIW4uRygpKXtxPTMKYnJl +YWt9az1uLmdsKCkKaj1zLnEoMCxrKQpxPTQKcmV0dXJuIG5ldyBBLk4zKGssaj09bnVsbD9sLmEoaik6 +aixtKQpjYXNlIDQ6cT0yCmJyZWFrCmNhc2UgMzpyZXR1cm4gQS5UaCgpCmNhc2UgMTpyZXR1cm4gQS5Z +bShvKX19fSxiKX0sCiRpWjA6MX0KQS5MUC5wcm90b3R5cGU9ewpnayhhKXtyZXR1cm4gdGhpcy5hfSwK +eDQoYSl7aWYodHlwZW9mIGEhPSJzdHJpbmciKXJldHVybiExCmlmKCJfX3Byb3RvX18iPT09YSlyZXR1 +cm4hMQpyZXR1cm4gdGhpcy5iLmhhc093blByb3BlcnR5KGEpfSwKcShhLGIpe2lmKCF0aGlzLng0KGIp +KXJldHVybiBudWxsCnJldHVybiB0aGlzLmJbQS5uKGIpXX0sCksoYSxiKXt2YXIgcyxyLHEscCxvLG49 +dGhpcy4kdGkKbi5DKCJ+KDEsMikiKS5hKGIpCnM9dGhpcy5jCmZvcihyPXMubGVuZ3RoLHE9dGhpcy5i +LG49bi56WzFdLHA9MDtwPHI7KytwKXtvPUEubihzW3BdKQpiLiQyKG8sbi5hKHFbb10pKX19LApndmMo +KXtyZXR1cm4gbmV3IEEuWFIodGhpcyx0aGlzLiR0aS5DKCJYUjwxPiIpKX19CkEuWFIucHJvdG90eXBl +PXsKZ0EoYSl7dmFyIHM9dGhpcy5hLmMKcmV0dXJuIG5ldyBKLm0xKHMscy5sZW5ndGgsQS50NihzKS5D +KCJtMTwxPiIpKX0sCmdrKGEpe3JldHVybiB0aGlzLmEuYy5sZW5ndGh9fQpBLkxJLnByb3RvdHlwZT17 +CmdXYSgpe3ZhciBzPXRoaXMuYQpyZXR1cm4gc30sCmduZCgpe3ZhciBzLHIscSxwLG89dGhpcwppZihv +LmM9PT0xKXJldHVybiBCLmhVCnM9by5kCnI9cy5sZW5ndGgtby5lLmxlbmd0aC1vLmYKaWYocj09PTAp +cmV0dXJuIEIuaFUKcT1bXQpmb3IocD0wO3A8cjsrK3Ape2lmKCEocDxzLmxlbmd0aCkpcmV0dXJuIEEu +T0gocyxwKQpxLnB1c2goc1twXSl9cmV0dXJuIEouekMocSl9LApnVm0oKXt2YXIgcyxyLHEscCxvLG4s +bSxsLGs9dGhpcwppZihrLmMhPT0wKXJldHVybiBCLldPCnM9ay5lCnI9cy5sZW5ndGgKcT1rLmQKcD1x +Lmxlbmd0aC1yLWsuZgppZihyPT09MClyZXR1cm4gQi5XTwpvPW5ldyBBLk41KHQuZW8pCmZvcihuPTA7 +bjxyOysrbil7aWYoIShuPHMubGVuZ3RoKSlyZXR1cm4gQS5PSChzLG4pCm09c1tuXQpsPXArbgppZigh +KGw+PTAmJmw8cS5sZW5ndGgpKXJldHVybiBBLk9IKHEsbCkKby5ZNSgwLG5ldyBBLnd2KG0pLHFbbF0p +fXJldHVybiBuZXcgQS5QRChvLHQuZ0YpfSwKJGl2UToxfQpBLkNqLnByb3RvdHlwZT17CiQyKGEsYil7 +dmFyIHMKQS5uKGEpCnM9dGhpcy5hCnMuYj1zLmIrIiQiK2EKQi5ObS5pKHRoaXMuYixhKQpCLk5tLmko +dGhpcy5jLGIpOysrcy5hfSwKJFM6MTJ9CkEuZjkucHJvdG90eXBlPXsKcVMoYSl7dmFyIHMscixxPXRo +aXMscD1uZXcgUmVnRXhwKHEuYSkuZXhlYyhhKQppZihwPT1udWxsKXJldHVybiBudWxsCnM9T2JqZWN0 +LmNyZWF0ZShudWxsKQpyPXEuYgppZihyIT09LTEpcy5hcmd1bWVudHM9cFtyKzFdCnI9cS5jCmlmKHIh +PT0tMSlzLmFyZ3VtZW50c0V4cHI9cFtyKzFdCnI9cS5kCmlmKHIhPT0tMSlzLmV4cHI9cFtyKzFdCnI9 +cS5lCmlmKHIhPT0tMSlzLm1ldGhvZD1wW3IrMV0Kcj1xLmYKaWYociE9PS0xKXMucmVjZWl2ZXI9cFty +KzFdCnJldHVybiBzfX0KQS5XMC5wcm90b3R5cGU9ewoiWyIoYSl7dmFyIHM9dGhpcy5iCmlmKHM9PW51 +bGwpcmV0dXJuIk5vU3VjaE1ldGhvZEVycm9yOiAiK3RoaXMuYQpyZXR1cm4iTm9TdWNoTWV0aG9kRXJy +b3I6IG1ldGhvZCBub3QgZm91bmQ6ICciK3MrIicgb24gbnVsbCJ9fQpBLmF6LnByb3RvdHlwZT17CiJb +IihhKXt2YXIgcyxyPXRoaXMscT0iTm9TdWNoTWV0aG9kRXJyb3I6IG1ldGhvZCBub3QgZm91bmQ6ICci +LHA9ci5iCmlmKHA9PW51bGwpcmV0dXJuIk5vU3VjaE1ldGhvZEVycm9yOiAiK3IuYQpzPXIuYwppZihz +PT1udWxsKXJldHVybiBxK3ArIicgKCIrci5hKyIpIgpyZXR1cm4gcStwKyInIG9uICciK3MrIicgKCIr +ci5hKyIpIn19CkEudlYucHJvdG90eXBlPXsKIlsiKGEpe3ZhciBzPXRoaXMuYQpyZXR1cm4gcy5sZW5n +dGg9PT0wPyJFcnJvciI6IkVycm9yOiAiK3N9fQpBLnRlLnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4i +VGhyb3cgb2YgbnVsbCAoJyIrKHRoaXMuYT09PW51bGw/Im51bGwiOiJ1bmRlZmluZWQiKSsiJyBmcm9t +IEphdmFTY3JpcHQpIn0sCiRpUno6MX0KQS5icS5wcm90b3R5cGU9e30KQS5YTy5wcm90b3R5cGU9ewoi +WyIoYSl7dmFyIHMscj10aGlzLmIKaWYociE9bnVsbClyZXR1cm4gcgpyPXRoaXMuYQpzPXIhPT1udWxs +JiZ0eXBlb2Ygcj09PSJvYmplY3QiP3Iuc3RhY2s6bnVsbApyZXR1cm4gdGhpcy5iPXM9PW51bGw/IiI6 +c30sCiRpR3o6MX0KQS5UcC5wcm90b3R5cGU9ewoiWyIoYSl7dmFyIHM9dGhpcy5jb25zdHJ1Y3Rvcixy +PXM9PW51bGw/bnVsbDpzLm5hbWUKcmV0dXJuIkNsb3N1cmUgJyIrQS5OUShyPT1udWxsPyJ1bmtub3du +IjpyKSsiJyJ9LAokaUVIOjEsCmdLdSgpe3JldHVybiB0aGlzfSwKJEM6IiQxIiwKJFI6MSwKJEQ6bnVs +bH0KQS5BeS5wcm90b3R5cGU9eyRDOiIkMCIsJFI6MH0KQS5FMS5wcm90b3R5cGU9eyRDOiIkMiIsJFI6 +Mn0KQS5sYy5wcm90b3R5cGU9e30KQS56eC5wcm90b3R5cGU9ewoiWyIoYSl7dmFyIHM9dGhpcy4kc3Rh +dGljX25hbWUKaWYocz09bnVsbClyZXR1cm4iQ2xvc3VyZSBvZiB1bmtub3duIHN0YXRpYyBtZXRob2Qi +CnJldHVybiJDbG9zdXJlICciK0EuTlEocykrIicifX0KQS5yVC5wcm90b3R5cGU9ewpETihhLGIpe2lm +KGI9PW51bGwpcmV0dXJuITEKaWYodGhpcz09PWIpcmV0dXJuITAKaWYoIShiIGluc3RhbmNlb2YgQS5y +VCkpcmV0dXJuITEKcmV0dXJuIHRoaXMuJF90YXJnZXQ9PT1iLiRfdGFyZ2V0JiZ0aGlzLmE9PT1iLmF9 +LApnbShhKXtyZXR1cm4oQS5DVSh0aGlzLmEpXkEuZVEodGhpcy4kX3RhcmdldCkpPj4+MH0sCiJbIihh +KXtyZXR1cm4iQ2xvc3VyZSAnIit0aGlzLiRfbmFtZSsiJyBvZiAiKygiSW5zdGFuY2Ugb2YgJyIrQS5s +aCh0aGlzLmEpKyInIil9fQpBLkVxLnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4iUnVudGltZUVycm9y +OiAiK3RoaXMuYX19CkEua1kucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiJBc3NlcnRpb24gZmFpbGVk +OiAiK0EuaGwodGhpcy5hKX19CkEua3IucHJvdG90eXBlPXt9CkEuTjUucHJvdG90eXBlPXsKZ2soYSl7 +cmV0dXJuIHRoaXMuYX0sCmdsMChhKXtyZXR1cm4gdGhpcy5hPT09MH0sCmd2Yygpe3JldHVybiBuZXcg +QS5pNSh0aGlzLEEuTGgodGhpcykuQygiaTU8MT4iKSl9LAp4NChhKXt2YXIgcz10aGlzLmIKaWYocz09 +bnVsbClyZXR1cm4hMQpyZXR1cm4gc1thXSE9bnVsbH0sCkNYKGEpe3ZhciBzPXRoaXMuZAppZihzPT1u +dWxsKXJldHVybiExCnJldHVybiB0aGlzLkZoKHNbdGhpcy54aShhKV0sYSk+PTB9LApGVihhLGIpe0Eu +TGgodGhpcykuQygiWjA8MSwyPiIpLmEoYikuSygwLG5ldyBBLmV3KHRoaXMpKX0sCnEoYSxiKXt2YXIg +cyxyLHEscCxvPW51bGwKaWYodHlwZW9mIGI9PSJzdHJpbmciKXtzPXRoaXMuYgppZihzPT1udWxsKXJl +dHVybiBvCnI9c1tiXQpxPXI9PW51bGw/bzpyLmIKcmV0dXJuIHF9ZWxzZSBpZih0eXBlb2YgYj09Im51 +bWJlciImJihiJjB4M2ZmZmZmZmYpPT09Yil7cD10aGlzLmMKaWYocD09bnVsbClyZXR1cm4gbwpyPXBb +Yl0KcT1yPT1udWxsP286ci5iCnJldHVybiBxfWVsc2UgcmV0dXJuIHRoaXMuYWEoYil9LAphYShhKXt2 +YXIgcyxyLHE9dGhpcy5kCmlmKHE9PW51bGwpcmV0dXJuIG51bGwKcz1xW3RoaXMueGkoYSldCnI9dGhp +cy5GaChzLGEpCmlmKHI8MClyZXR1cm4gbnVsbApyZXR1cm4gc1tyXS5ifSwKWTUoYSxiLGMpe3ZhciBz +LHIscT10aGlzLHA9QS5MaChxKQpwLmMuYShiKQpwLnpbMV0uYShjKQppZih0eXBlb2YgYj09InN0cmlu +ZyIpe3M9cS5iCnEuRUgocz09bnVsbD9xLmI9cS56SygpOnMsYixjKX1lbHNlIGlmKHR5cGVvZiBiPT0i +bnVtYmVyIiYmKGImMHgzZmZmZmZmZik9PT1iKXtyPXEuYwpxLkVIKHI9PW51bGw/cS5jPXEueksoKTpy +LGIsYyl9ZWxzZSBxLnh3KGIsYyl9LAp4dyhhLGIpe3ZhciBzLHIscSxwLG89dGhpcyxuPUEuTGgobykK +bi5jLmEoYSkKbi56WzFdLmEoYikKcz1vLmQKaWYocz09bnVsbClzPW8uZD1vLnpLKCkKcj1vLnhpKGEp +CnE9c1tyXQppZihxPT1udWxsKXNbcl09W28uSG4oYSxiKV0KZWxzZXtwPW8uRmgocSxhKQppZihwPj0w +KXFbcF0uYj1iCmVsc2UgcS5wdXNoKG8uSG4oYSxiKSl9fSwKSyhhLGIpe3ZhciBzLHIscT10aGlzCkEu +TGgocSkuQygifigxLDIpIikuYShiKQpzPXEuZQpyPXEucgpmb3IoO3MhPW51bGw7KXtiLiQyKHMuYSxz +LmIpCmlmKHIhPT1xLnIpdGhyb3cgQS5iKEEuYTQocSkpCnM9cy5jfX0sCkVIKGEsYixjKXt2YXIgcyxy +PUEuTGgodGhpcykKci5jLmEoYikKci56WzFdLmEoYykKcz1hW2JdCmlmKHM9PW51bGwpYVtiXT10aGlz +LkhuKGIsYykKZWxzZSBzLmI9Y30sCmtzKCl7dGhpcy5yPXRoaXMucisxJjEwNzM3NDE4MjN9LApIbihh +LGIpe3ZhciBzPXRoaXMscj1BLkxoKHMpLHE9bmV3IEEudmgoci5jLmEoYSksci56WzFdLmEoYikpCmlm +KHMuZT09bnVsbClzLmU9cy5mPXEKZWxzZXtyPXMuZgpyLnRvU3RyaW5nCnEuZD1yCnMuZj1yLmM9cX0r +K3MuYQpzLmtzKCkKcmV0dXJuIHF9LAp4aShhKXtyZXR1cm4gSi5VMyhhKSYweDNmZmZmZmZmfSwKRmgo +YSxiKXt2YXIgcyxyCmlmKGE9PW51bGwpcmV0dXJuLTEKcz1hLmxlbmd0aApmb3Iocj0wO3I8czsrK3Ip +aWYoSi5STShhW3JdLmEsYikpcmV0dXJuIHIKcmV0dXJuLTF9LAoiWyIoYSl7cmV0dXJuIEEubk8odGhp +cyl9LAp6Sygpe3ZhciBzPU9iamVjdC5jcmVhdGUobnVsbCkKc1siPG5vbi1pZGVudGlmaWVyLWtleT4i +XT1zCmRlbGV0ZSBzWyI8bm9uLWlkZW50aWZpZXIta2V5PiJdCnJldHVybiBzfSwKJGlGbzoxfQpBLmV3 +LnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHM9dGhpcy5hLHI9QS5MaChzKQpzLlk1KDAsci5jLmEoYSks +ci56WzFdLmEoYikpfSwKJFMoKXtyZXR1cm4gQS5MaCh0aGlzLmEpLkMoIn4oMSwyKSIpfX0KQS52aC5w +cm90b3R5cGU9e30KQS5pNS5wcm90b3R5cGU9ewpnayhhKXtyZXR1cm4gdGhpcy5hLmF9LApnbDAoYSl7 +cmV0dXJuIHRoaXMuYS5hPT09MH0sCmdBKGEpe3ZhciBzPXRoaXMuYSxyPW5ldyBBLk42KHMscy5yLHRo +aXMuJHRpLkMoIk42PDE+IikpCnIuYz1zLmUKcmV0dXJuIHJ9LAp0ZyhhLGIpe3JldHVybiB0aGlzLmEu +eDQoYil9fQpBLk42LnByb3RvdHlwZT17CmdsKCl7cmV0dXJuIHRoaXMuZH0sCkcoKXt2YXIgcyxyPXRo +aXMscT1yLmEKaWYoci5iIT09cS5yKXRocm93IEEuYihBLmE0KHEpKQpzPXIuYwppZihzPT1udWxsKXty +LnNxWShudWxsKQpyZXR1cm4hMX1lbHNle3Iuc3FZKHMuYSkKci5jPXMuYwpyZXR1cm4hMH19LApzcVko +YSl7dGhpcy5kPXRoaXMuJHRpLkMoIjE/IikuYShhKX0sCiRpQW46MX0KQS5kQy5wcm90b3R5cGU9ewok +MShhKXtyZXR1cm4gdGhpcy5hKGEpfSwKJFM6M30KQS53Ti5wcm90b3R5cGU9ewokMihhLGIpe3JldHVy +biB0aGlzLmEoYSxiKX0sCiRTOjQyfQpBLlZYLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiB0aGlzLmEo +QS5uKGEpKX0sCiRTOjQxfQpBLlZSLnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4iUmVnRXhwLyIrdGhp +cy5hKyIvIit0aGlzLmIuZmxhZ3N9LApnSGMoKXt2YXIgcz10aGlzLHI9cy5jCmlmKHIhPW51bGwpcmV0 +dXJuIHIKcj1zLmIKcmV0dXJuIHMuYz1BLnY0KHMuYSxyLm11bHRpbGluZSwhci5pZ25vcmVDYXNlLHIu +dW5pY29kZSxyLmRvdEFsbCwhMCl9LApkZChhLGIpe3JldHVybiBuZXcgQS5LVyh0aGlzLGIsMCl9LApV +WihhLGIpe3ZhciBzLHI9dGhpcy5nSGMoKQppZihyPT1udWxsKXI9dC5LLmEocikKci5sYXN0SW5kZXg9 +YgpzPXIuZXhlYyhhKQppZihzPT1udWxsKXJldHVybiBudWxsCnJldHVybiBuZXcgQS5FSyhzKX0sCiRp +dlg6MSwKJGl3TDoxfQpBLkVLLnByb3RvdHlwZT17CnEoYSxiKXt2YXIgcwpBLklaKGIpCnM9dGhpcy5i +CmlmKCEoYjxzLmxlbmd0aCkpcmV0dXJuIEEuT0gocyxiKQpyZXR1cm4gc1tiXX0sCiRpT2Q6MSwKJGlp +YjoxfQpBLktXLnByb3RvdHlwZT17CmdBKGEpe3JldHVybiBuZXcgQS5QYih0aGlzLmEsdGhpcy5iLHRo +aXMuYyl9fQpBLlBiLnByb3RvdHlwZT17CmdsKCl7dmFyIHM9dGhpcy5kCnJldHVybiBzPT1udWxsP3Qu +Y3ouYShzKTpzfSwKRygpe3ZhciBzLHIscSxwLG8sbixtPXRoaXMsbD1tLmIKaWYobD09bnVsbClyZXR1 +cm4hMQpzPW0uYwpyPWwubGVuZ3RoCmlmKHM8PXIpe3E9bS5hCnA9cS5VWihsLHMpCmlmKHAhPW51bGwp +e20uZD1wCnM9cC5iCm89cy5pbmRleApuPW8rc1swXS5sZW5ndGgKaWYobz09PW4pe2lmKHEuYi51bmlj +b2RlKXtzPW0uYwpxPXMrMQppZihxPHIpe3M9Qi54Qi5PKGwscykKaWYocz49NTUyOTYmJnM8PTU2MzE5 +KXtzPUIueEIuTyhsLHEpCnM9cz49NTYzMjAmJnM8PTU3MzQzfWVsc2Ugcz0hMX1lbHNlIHM9ITF9ZWxz +ZSBzPSExCm49KHM/bisxOm4pKzF9bS5jPW4KcmV0dXJuITB9fW0uYj1tLmQ9bnVsbApyZXR1cm4hMX0s +CiRpQW46MX0KQS50US5wcm90b3R5cGU9ewpxKGEsYil7QS5JWihiKQppZihiIT09MClBLnYoQS5PNyhi +LG51bGwpKQpyZXR1cm4gdGhpcy5jfSwKJGlPZDoxfQpBLnVuLnByb3RvdHlwZT17CmdBKGEpe3JldHVy +biBuZXcgQS5TZCh0aGlzLmEsdGhpcy5iLHRoaXMuYyl9fQpBLlNkLnByb3RvdHlwZT17CkcoKXt2YXIg +cyxyLHE9dGhpcyxwPXEuYyxvPXEuYixuPW8ubGVuZ3RoLG09cS5hLGw9bS5sZW5ndGgKaWYocCtuPmwp +e3EuZD1udWxsCnJldHVybiExfXM9bS5pbmRleE9mKG8scCkKaWYoczwwKXtxLmM9bCsxCnEuZD1udWxs +CnJldHVybiExfXI9cytuCnEuZD1uZXcgQS50UShzLG8pCnEuYz1yPT09cS5jP3IrMTpyCnJldHVybiEw +fSwKZ2woKXt2YXIgcz10aGlzLmQKcy50b1N0cmluZwpyZXR1cm4gc30sCiRpQW46MX0KQS5FVC5wcm90 +b3R5cGU9eyRpRVQ6MSwkaUFTOjF9CkEuTFoucHJvdG90eXBlPXsKZ2soYSl7cmV0dXJuIGEubGVuZ3Ro +fSwKJGlYajoxfQpBLkRnLnByb3RvdHlwZT17CnEoYSxiKXtBLklaKGIpCkEub2QoYixhLGEubGVuZ3Ro +KQpyZXR1cm4gYVtiXX0sClk1KGEsYixjKXtBLnJWKGMpCkEub2QoYixhLGEubGVuZ3RoKQphW2JdPWN9 +LAokaWJROjEsCiRpY1g6MSwKJGl6TToxfQpBLlBnLnByb3RvdHlwZT17Clk1KGEsYixjKXtBLklaKGMp +CkEub2QoYixhLGEubGVuZ3RoKQphW2JdPWN9LAokaWJROjEsCiRpY1g6MSwKJGl6TToxfQpBLnhqLnBy +b3RvdHlwZT17CnEoYSxiKXtBLklaKGIpCkEub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19CkEu +ZEUucHJvdG90eXBlPXsKcShhLGIpe0EuSVooYikKQS5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2Jd +fX0KQS5aQS5wcm90b3R5cGU9ewpxKGEsYil7QS5JWihiKQpBLm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJu +IGFbYl19fQpBLmRULnByb3RvdHlwZT17CnEoYSxiKXtBLklaKGIpCkEub2QoYixhLGEubGVuZ3RoKQpy +ZXR1cm4gYVtiXX19CkEuUHEucHJvdG90eXBlPXsKcShhLGIpe0EuSVooYikKQS5vZChiLGEsYS5sZW5n +dGgpCnJldHVybiBhW2JdfX0KQS5lRS5wcm90b3R5cGU9ewpnayhhKXtyZXR1cm4gYS5sZW5ndGh9LApx +KGEsYil7QS5JWihiKQpBLm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19fQpBLlY2LnByb3RvdHlw +ZT17CmdrKGEpe3JldHVybiBhLmxlbmd0aH0sCnEoYSxiKXtBLklaKGIpCkEub2QoYixhLGEubGVuZ3Ro +KQpyZXR1cm4gYVtiXX0sCiRpbjY6MX0KQS5SRy5wcm90b3R5cGU9e30KQS5WUC5wcm90b3R5cGU9e30K +QS5XQi5wcm90b3R5cGU9e30KQS5aRy5wcm90b3R5cGU9e30KQS5KYy5wcm90b3R5cGU9ewpDKGEpe3Jl +dHVybiBBLmNFKHYudHlwZVVuaXZlcnNlLHRoaXMsYSl9LApLcShhKXtyZXR1cm4gQS52NSh2LnR5cGVV +bml2ZXJzZSx0aGlzLGEpfX0KQS5HLnByb3RvdHlwZT17fQpBLmxZLnByb3RvdHlwZT17CiJbIihhKXty +ZXR1cm4gQS5kbSh0aGlzLmEsbnVsbCl9fQpBLmtTLnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4gdGhp +cy5hfX0KQS5pTS5wcm90b3R5cGU9eyRpRXo6MX0KQS50aC5wcm90b3R5cGU9ewokMShhKXt2YXIgcz10 +aGlzLmEscj1zLmEKcy5hPW51bGwKci4kMCgpfSwKJFM6N30KQS5oYS5wcm90b3R5cGU9ewokMShhKXt2 +YXIgcyxyCnRoaXMuYS5hPXQuTS5hKGEpCnM9dGhpcy5iCnI9dGhpcy5jCnMuZmlyc3RDaGlsZD9zLnJl +bW92ZUNoaWxkKHIpOnMuYXBwZW5kQ2hpbGQocil9LAokUzoyMn0KQS5Wcy5wcm90b3R5cGU9ewokMCgp +e3RoaXMuYS4kMCgpfSwKJFM6OH0KQS5GdC5wcm90b3R5cGU9ewokMCgpe3RoaXMuYS4kMCgpfSwKJFM6 +OH0KQS5XMy5wcm90b3R5cGU9ewpDWShhLGIpe2lmKHNlbGYuc2V0VGltZW91dCE9bnVsbClzZWxmLnNl +dFRpbWVvdXQoQS50UihuZXcgQS55SCh0aGlzLGIpLDApLGEpCmVsc2UgdGhyb3cgQS5iKEEuTDQoImBz +ZXRUaW1lb3V0KClgIG5vdCBmb3VuZC4iKSl9fQpBLnlILnByb3RvdHlwZT17CiQwKCl7dGhpcy5iLiQw +KCl9LAokUzowfQpBLmloLnByb3RvdHlwZT17CmFNKGEsYil7dmFyIHMscj10aGlzLHE9ci4kdGkKcS5D +KCIxLz8iKS5hKGIpCmlmKGI9PW51bGwpcS5jLmEoYikKaWYoIXIuYilyLmEuWGYoYikKZWxzZXtzPXIu +YQppZihxLkMoImI4PDE+IikuYihiKSlzLmNVKGIpCmVsc2Ugcy5YMihxLmMuYShiKSl9fSwKdzAoYSxi +KXt2YXIgcz10aGlzLmEKaWYodGhpcy5iKXMuWkwoYSxiKQplbHNlIHMuTmsoYSxiKX19CkEuV00ucHJv +dG90eXBlPXsKJDEoYSl7cmV0dXJuIHRoaXMuYS4kMigwLGEpfSwKJFM6NTV9CkEuU1gucHJvdG90eXBl +PXsKJDIoYSxiKXt0aGlzLmEuJDIoMSxuZXcgQS5icShhLHQubC5hKGIpKSl9LAokUzo1N30KQS5Hcy5w +cm90b3R5cGU9ewokMihhLGIpe3RoaXMuYShBLklaKGEpLGIpfSwKJFM6MjV9CkEuRnkucHJvdG90eXBl +PXsKIlsiKGEpe3JldHVybiJJdGVyYXRpb25NYXJrZXIoIit0aGlzLmIrIiwgIitBLkVqKHRoaXMuYSkr +IikifX0KQS5HVi5wcm90b3R5cGU9ewpnbCgpe3ZhciBzLHI9dGhpcy5jCmlmKHI9PW51bGwpe3M9dGhp +cy5iCnJldHVybiBzPT1udWxsP3RoaXMuJHRpLmMuYShzKTpzfXJldHVybiByLmdsKCl9LApHKCl7dmFy +IHMscixxLHAsbyxuLG09dGhpcwpmb3Iocz1tLiR0aS5DKCJBbjwxPiIpOyEwOyl7cj1tLmMKaWYociE9 +bnVsbClpZihyLkcoKSlyZXR1cm4hMAplbHNlIG0uc1g5KG51bGwpCnE9ZnVuY3Rpb24oYSxiLGMpe3Zh +ciBsLGs9Ygp3aGlsZSh0cnVlKXRyeXtyZXR1cm4gYShrLGwpfWNhdGNoKGope2w9agprPWN9fShtLmEs +MCwxKQppZihxIGluc3RhbmNlb2YgQS5GeSl7cD1xLmIKaWYocD09PTIpe289bS5kCmlmKG89PW51bGx8 +fG8ubGVuZ3RoPT09MCl7bS5zRUMobnVsbCkKcmV0dXJuITF9aWYoMD49by5sZW5ndGgpcmV0dXJuIEEu +T0gobywtMSkKbS5hPW8ucG9wKCkKY29udGludWV9ZWxzZXtyPXEuYQppZihwPT09Myl0aHJvdyByCmVs +c2V7bj1zLmEoSi5JVChyKSkKaWYobiBpbnN0YW5jZW9mIEEuR1Ype3I9bS5kCmlmKHI9PW51bGwpcj1t +LmQ9W10KQi5ObS5pKHIsbS5hKQptLmE9bi5hCmNvbnRpbnVlfWVsc2V7bS5zWDkobikKY29udGludWV9 +fX19ZWxzZXttLnNFQyhxKQpyZXR1cm4hMH19cmV0dXJuITF9LApzRUMoYSl7dGhpcy5iPXRoaXMuJHRp +LkMoIjE/IikuYShhKX0sCnNYOShhKXt0aGlzLmM9dGhpcy4kdGkuQygiQW48MT4/IikuYShhKX0sCiRp +QW46MX0KQS5xNC5wcm90b3R5cGU9ewpnQShhKXtyZXR1cm4gbmV3IEEuR1YodGhpcy5hKCksdGhpcy4k +dGkuQygiR1Y8MT4iKSl9fQpBLkN3LnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4gQS5Faih0aGlzLmEp +fSwKJGlYUzoxLApnSUkoKXtyZXR1cm4gdGhpcy5ifX0KQS5QZi5wcm90b3R5cGU9ewp3MChhLGIpe3Zh +ciBzCkEuY2IoYSwiZXJyb3IiLHQuSykKcz10aGlzLmEKaWYoKHMuYSYzMCkhPT0wKXRocm93IEEuYihB +LlBWKCJGdXR1cmUgYWxyZWFkeSBjb21wbGV0ZWQiKSkKaWYoYj09bnVsbCliPUEudjAoYSkKcy5Oayhh +LGIpfSwKcG0oYSl7cmV0dXJuIHRoaXMudzAoYSxudWxsKX19CkEuWmYucHJvdG90eXBlPXsKYU0oYSxi +KXt2YXIgcyxyPXRoaXMuJHRpCnIuQygiMS8/IikuYShiKQpzPXRoaXMuYQppZigocy5hJjMwKSE9PTAp +dGhyb3cgQS5iKEEuUFYoIkZ1dHVyZSBhbHJlYWR5IGNvbXBsZXRlZCIpKQpzLlhmKHIuQygiMS8iKS5h +KGIpKX19CkEuRmUucHJvdG90eXBlPXsKSFIoYSl7aWYoKHRoaXMuYyYxNSkhPT02KXJldHVybiEwCnJl +dHVybiB0aGlzLmIuYi5idih0LmFsLmEodGhpcy5kKSxhLmEsdC55LHQuSyl9LApLdyhhKXt2YXIgcyxy +PXRoaXMscT1yLmUscD1udWxsLG89dC56LG49dC5LLG09YS5hLGw9ci5iLmIKaWYodC5tLmIocSkpcD1s +LnJwKHEsbSxhLmIsbyxuLHQubCkKZWxzZSBwPWwuYnYodC52LmEocSksbSxvLG4pCnRyeXtvPXIuJHRp +LkMoIjIvIikuYShwKQpyZXR1cm4gb31jYXRjaChzKXtpZih0LmVLLmIoQS5SdShzKSkpe2lmKChyLmMm +MSkhPT0wKXRocm93IEEuYihBLnhZKCJUaGUgZXJyb3IgaGFuZGxlciBvZiBGdXR1cmUudGhlbiBtdXN0 +IHJldHVybiBhIHZhbHVlIG9mIHRoZSByZXR1cm5lZCBmdXR1cmUncyB0eXBlIiwib25FcnJvciIpKQp0 +aHJvdyBBLmIoQS54WSgiVGhlIGVycm9yIGhhbmRsZXIgb2YgRnV0dXJlLmNhdGNoRXJyb3IgbXVzdCBy +ZXR1cm4gYSB2YWx1ZSBvZiB0aGUgZnV0dXJlJ3MgdHlwZSIsIm9uRXJyb3IiKSl9ZWxzZSB0aHJvdyBz +fX19CkEudnMucHJvdG90eXBlPXsKU3EoYSxiLGMpe3ZhciBzLHIscSxwPXRoaXMuJHRpCnAuS3EoYyku +QygiMS8oMikiKS5hKGEpCnM9JC5YMwppZihzPT09Qi5OVSl7aWYoYiE9bnVsbCYmIXQubS5iKGIpJiYh +dC52LmIoYikpdGhyb3cgQS5iKEEuTDMoYiwib25FcnJvciIsdS5jKSl9ZWxzZXtjLkMoIkA8MC8+Iiku +S3EocC5jKS5DKCIxKDIpIikuYShhKQppZihiIT1udWxsKWI9QS5WSChiLHMpfXI9bmV3IEEudnMocyxj +LkMoInZzPDA+IikpCnE9Yj09bnVsbD8xOjMKdGhpcy54ZihuZXcgQS5GZShyLHEsYSxiLHAuQygiQDwx +PiIpLktxKGMpLkMoIkZlPDEsMj4iKSkpCnJldHVybiByfSwKVzcoYSxiKXtyZXR1cm4gdGhpcy5TcShh +LG51bGwsYil9LApRZChhLGIsYyl7dmFyIHMscj10aGlzLiR0aQpyLktxKGMpLkMoIjEvKDIpIikuYShh +KQpzPW5ldyBBLnZzKCQuWDMsYy5DKCJ2czwwPiIpKQp0aGlzLnhmKG5ldyBBLkZlKHMsMyxhLGIsci5D +KCJAPDE+IikuS3EoYykuQygiRmU8MSwyPiIpKSkKcmV0dXJuIHN9LApQOShhKXt0aGlzLmE9dGhpcy5h +JjF8MTYKdGhpcy5jPWF9LAp1ZyhhKXt0aGlzLmE9YS5hJjMwfHRoaXMuYSYxCnRoaXMuYz1hLmN9LAp4 +ZihhKXt2YXIgcyxyPXRoaXMscT1yLmEKaWYocTw9Myl7YS5hPXQuZS5hKHIuYykKci5jPWF9ZWxzZXtp +ZigocSY0KSE9PTApe3M9dC5jLmEoci5jKQppZigocy5hJjI0KT09PTApe3MueGYoYSkKcmV0dXJufXIu +dWcocyl9QS5UayhudWxsLG51bGwsci5iLHQuTS5hKG5ldyBBLmRhKHIsYSkpKX19LApqUShhKXt2YXIg +cyxyLHEscCxvLG4sbT10aGlzLGw9e30KbC5hPWEKaWYoYT09bnVsbClyZXR1cm4Kcz1tLmEKaWYoczw9 +Myl7cj10LmUuYShtLmMpCm0uYz1hCmlmKHIhPW51bGwpe3E9YS5hCmZvcihwPWE7cSE9bnVsbDtwPXEs +cT1vKW89cS5hCnAuYT1yfX1lbHNle2lmKChzJjQpIT09MCl7bj10LmMuYShtLmMpCmlmKChuLmEmMjQp +PT09MCl7bi5qUShhKQpyZXR1cm59bS51ZyhuKX1sLmE9bS5OOChhKQpBLlRrKG51bGwsbnVsbCxtLmIs +dC5NLmEobmV3IEEub1EobCxtKSkpfX0sCmFoKCl7dmFyIHM9dC5lLmEodGhpcy5jKQp0aGlzLmM9bnVs +bApyZXR1cm4gdGhpcy5OOChzKX0sCk44KGEpe3ZhciBzLHIscQpmb3Iocz1hLHI9bnVsbDtzIT1udWxs +O3I9cyxzPXEpe3E9cy5hCnMuYT1yfXJldHVybiByfSwKZWMoYSl7dmFyIHMscixxLHA9dGhpcwpwLmFe +PTIKdHJ5e2EuU3EobmV3IEEucFYocCksbmV3IEEuVTcocCksdC5QKX1jYXRjaChxKXtzPUEuUnUocSkK +cj1BLnRzKHEpCkEucmIobmV3IEEudnIocCxzLHIpKX19LApYMihhKXt2YXIgcyxyPXRoaXMKci4kdGku +Yy5hKGEpCnM9ci5haCgpCnIuYT04CnIuYz1hCkEuSFoocixzKX0sClpMKGEsYil7dmFyIHMKdC5sLmEo +YikKcz10aGlzLmFoKCkKdGhpcy5QOShBLlRsKGEsYikpCkEuSFoodGhpcyxzKX0sClhmKGEpe3ZhciBz +PXRoaXMuJHRpCnMuQygiMS8iKS5hKGEpCmlmKHMuQygiYjg8MT4iKS5iKGEpKXt0aGlzLmNVKGEpCnJl +dHVybn10aGlzLndVKHMuYy5hKGEpKX0sCndVKGEpe3ZhciBzPXRoaXMKcy4kdGkuYy5hKGEpCnMuYV49 +MgpBLlRrKG51bGwsbnVsbCxzLmIsdC5NLmEobmV3IEEucnQocyxhKSkpfSwKY1UoYSl7dmFyIHM9dGhp +cyxyPXMuJHRpCnIuQygiYjg8MT4iKS5hKGEpCmlmKHIuYihhKSl7aWYoKGEuYSYxNikhPT0wKXtzLmFe +PTIKQS5UayhudWxsLG51bGwscy5iLHQuTS5hKG5ldyBBLktGKHMsYSkpKX1lbHNlIEEuQTkoYSxzKQpy +ZXR1cm59cy5lYyhhKX0sCk5rKGEsYil7dGhpcy5hXj0yCkEuVGsobnVsbCxudWxsLHRoaXMuYix0Lk0u +YShuZXcgQS5aTCh0aGlzLGEsYikpKX0sCiRpYjg6MX0KQS5kYS5wcm90b3R5cGU9ewokMCgpe0EuSFoo +dGhpcy5hLHRoaXMuYil9LAokUzowfQpBLm9RLnByb3RvdHlwZT17CiQwKCl7QS5IWih0aGlzLmIsdGhp +cy5hLmEpfSwKJFM6MH0KQS5wVi5wcm90b3R5cGU9ewokMShhKXt2YXIgcyxyLHEscD10aGlzLmEKcC5h +Xj0yCnRyeXtwLlgyKHAuJHRpLmMuYShhKSl9Y2F0Y2gocSl7cz1BLlJ1KHEpCnI9QS50cyhxKQpwLlpM +KHMscil9fSwKJFM6N30KQS5VNy5wcm90b3R5cGU9ewokMihhLGIpe3RoaXMuYS5aTCh0LksuYShhKSx0 +LmwuYShiKSl9LAokUzoyOX0KQS52ci5wcm90b3R5cGU9ewokMCgpe3RoaXMuYS5aTCh0aGlzLmIsdGhp +cy5jKX0sCiRTOjB9CkEucnQucHJvdG90eXBlPXsKJDAoKXt0aGlzLmEuWDIodGhpcy5iKX0sCiRTOjB9 +CkEuS0YucHJvdG90eXBlPXsKJDAoKXtBLkE5KHRoaXMuYix0aGlzLmEpfSwKJFM6MH0KQS5aTC5wcm90 +b3R5cGU9ewokMCgpe3RoaXMuYS5aTCh0aGlzLmIsdGhpcy5jKX0sCiRTOjB9CkEuUlQucHJvdG90eXBl +PXsKJDAoKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLGw9bnVsbAp0cnl7cT1tLmEuYQpsPXEuYi5iLnp6 +KHQuZk8uYShxLmQpLHQueil9Y2F0Y2gocCl7cz1BLlJ1KHApCnI9QS50cyhwKQpxPW0uYyYmdC5uLmEo +bS5iLmEuYykuYT09PXMKbz1tLmEKaWYocSlvLmM9dC5uLmEobS5iLmEuYykKZWxzZSBvLmM9QS5UbChz +LHIpCm8uYj0hMApyZXR1cm59aWYobCBpbnN0YW5jZW9mIEEudnMmJihsLmEmMjQpIT09MCl7aWYoKGwu +YSYxNikhPT0wKXtxPW0uYQpxLmM9dC5uLmEobC5jKQpxLmI9ITB9cmV0dXJufWlmKHQuaS5iKGwpKXtu +PW0uYi5hCnE9bS5hCnEuYz1sLlc3KG5ldyBBLmpaKG4pLHQueikKcS5iPSExfX0sCiRTOjB9CkEualou +cHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHRoaXMuYX0sCiRTOjMwfQpBLnJxLnByb3RvdHlwZT17CiQw +KCl7dmFyIHMscixxLHAsbyxuLG0sbAp0cnl7cT10aGlzLmEKcD1xLmEKbz1wLiR0aQpuPW8uYwptPW4u +YSh0aGlzLmIpCnEuYz1wLmIuYi5idihvLkMoIjIvKDEpIikuYShwLmQpLG0sby5DKCIyLyIpLG4pfWNh +dGNoKGwpe3M9QS5SdShsKQpyPUEudHMobCkKcT10aGlzLmEKcS5jPUEuVGwocyxyKQpxLmI9ITB9fSwK +JFM6MH0KQS5SVy5wcm90b3R5cGU9ewokMCgpe3ZhciBzLHIscSxwLG8sbixtPXRoaXMKdHJ5e3M9dC5u +LmEobS5hLmEuYykKcD1tLmIKaWYocC5hLkhSKHMpJiZwLmEuZSE9bnVsbCl7cC5jPXAuYS5LdyhzKQpw +LmI9ITF9fWNhdGNoKG8pe3I9QS5SdShvKQpxPUEudHMobykKcD10Lm4uYShtLmEuYS5jKQpuPW0uYgpp +ZihwLmE9PT1yKW4uYz1wCmVsc2Ugbi5jPUEuVGwocixxKQpuLmI9ITB9fSwKJFM6MH0KQS5PTS5wcm90 +b3R5cGU9e30KQS5xaC5wcm90b3R5cGU9ewpnayhhKXt2YXIgcyxyLHE9dGhpcyxwPXt9LG89bmV3IEEu +dnMoJC5YMyx0LmZKKQpwLmE9MApzPUEuTGgocSkKcj1zLkMoIn4oMSk/IikuYShuZXcgQS5CNShwLHEp +KQp0LlouYShuZXcgQS51TyhwLG8pKQpBLkpFKHEuYSxxLmIsciwhMSxzLmMpCnJldHVybiBvfX0KQS5C +NS5wcm90b3R5cGU9ewokMShhKXtBLkxoKHRoaXMuYikuYy5hKGEpOysrdGhpcy5hLmF9LAokUygpe3Jl +dHVybiBBLkxoKHRoaXMuYikuQygifigxKSIpfX0KQS51Ty5wcm90b3R5cGU9ewokMCgpe3ZhciBzPXRo +aXMuYixyPXMuJHRpLHE9ci5DKCIxLyIpLmEodGhpcy5hLmEpLHA9cy5haCgpCnIuYy5hKHEpCnMuYT04 +CnMuYz1xCkEuSFoocyxwKX0sCiRTOjB9CkEuTU8ucHJvdG90eXBlPXt9CkEua1QucHJvdG90eXBlPXt9 +CkEueEkucHJvdG90eXBlPXt9CkEubTAucHJvdG90eXBlPXskaVFtOjF9CkEuRXYucHJvdG90eXBlPXsK +JDAoKXt2YXIgcz10aGlzLmEscj10aGlzLmIKQS5jYihzLCJlcnJvciIsdC5LKQpBLmNiKHIsInN0YWNr +VHJhY2UiLHQubCkKQS5PMShzLHIpfSwKJFM6MH0KQS5KaS5wcm90b3R5cGU9ewpiSChhKXt2YXIgcyxy +LHEKdC5NLmEoYSkKdHJ5e2lmKEIuTlU9PT0kLlgzKXthLiQwKCkKcmV0dXJufUEuVDgobnVsbCxudWxs +LHRoaXMsYSx0LkgpfWNhdGNoKHEpe3M9QS5SdShxKQpyPUEudHMocSkKQS5TaSh0LksuYShzKSx0Lmwu +YShyKSl9fSwKRGwoYSxiLGMpe3ZhciBzLHIscQpjLkMoIn4oMCkiKS5hKGEpCmMuYShiKQp0cnl7aWYo +Qi5OVT09PSQuWDMpe2EuJDEoYikKcmV0dXJufUEueXYobnVsbCxudWxsLHRoaXMsYSxiLHQuSCxjKX1j +YXRjaChxKXtzPUEuUnUocSkKcj1BLnRzKHEpCkEuU2kodC5LLmEocyksdC5sLmEocikpfX0sCkdZKGEp +e3JldHVybiBuZXcgQS5WcCh0aGlzLHQuTS5hKGEpKX0sClB5KGEsYil7cmV0dXJuIG5ldyBBLk9SKHRo +aXMsYi5DKCJ+KDApIikuYShhKSxiKX0sCnEoYSxiKXtyZXR1cm4gbnVsbH0sCnp6KGEsYil7Yi5DKCIw +KCkiKS5hKGEpCmlmKCQuWDM9PT1CLk5VKXJldHVybiBhLiQwKCkKcmV0dXJuIEEuVDgobnVsbCxudWxs +LHRoaXMsYSxiKX0sCmJ2KGEsYixjLGQpe2MuQygiQDwwPiIpLktxKGQpLkMoIjEoMikiKS5hKGEpCmQu +YShiKQppZigkLlgzPT09Qi5OVSlyZXR1cm4gYS4kMShiKQpyZXR1cm4gQS55dihudWxsLG51bGwsdGhp +cyxhLGIsYyxkKX0sCnJwKGEsYixjLGQsZSxmKXtkLkMoIkA8MD4iKS5LcShlKS5LcShmKS5DKCIxKDIs +MykiKS5hKGEpCmUuYShiKQpmLmEoYykKaWYoJC5YMz09PUIuTlUpcmV0dXJuIGEuJDIoYixjKQpyZXR1 +cm4gQS5ReChudWxsLG51bGwsdGhpcyxhLGIsYyxkLGUsZil9LApMaihhLGIsYyxkKXtyZXR1cm4gYi5D +KCJAPDA+IikuS3EoYykuS3EoZCkuQygiMSgyLDMpIikuYShhKX19CkEuVnAucHJvdG90eXBlPXsKJDAo +KXtyZXR1cm4gdGhpcy5hLmJIKHRoaXMuYil9LAokUzowfQpBLk9SLnByb3RvdHlwZT17CiQxKGEpe3Zh +ciBzPXRoaXMuYwpyZXR1cm4gdGhpcy5hLkRsKHRoaXMuYixzLmEoYSkscyl9LAokUygpe3JldHVybiB0 +aGlzLmMuQygifigwKSIpfX0KQS54ZC5wcm90b3R5cGU9ewpxKGEsYil7aWYoIUEub1QodGhpcy55LiQx +KGIpKSlyZXR1cm4gbnVsbApyZXR1cm4gdGhpcy5GUShiKX0sClk1KGEsYixjKXt2YXIgcz10aGlzLiR0 +aQp0aGlzLkoxKHMuYy5hKGIpLHMuelsxXS5hKGMpKX0sCng0KGEpe2lmKCFBLm9UKHRoaXMueS4kMShh +KSkpcmV0dXJuITEKcmV0dXJuIHRoaXMuUEEoYSl9LAp4aShhKXtyZXR1cm4gdGhpcy54LiQxKHRoaXMu +JHRpLmMuYShhKSkmMTA3Mzc0MTgyM30sCkZoKGEsYil7dmFyIHMscixxLHAKaWYoYT09bnVsbClyZXR1 +cm4tMQpzPWEubGVuZ3RoCmZvcihyPXRoaXMuJHRpLmMscT10aGlzLncscD0wO3A8czsrK3ApaWYoQS5v +VChxLiQyKHIuYShhW3BdLmEpLHIuYShiKSkpKXJldHVybiBwCnJldHVybi0xfX0KQS52Ni5wcm90b3R5 +cGU9ewokMShhKXtyZXR1cm4gdGhpcy5hLmIoYSl9LAokUzozNX0KQS5iNi5wcm90b3R5cGU9ewpnQShh +KXt2YXIgcz10aGlzLHI9bmV3IEEubG0ocyxzLnIsQS5MaChzKS5DKCJsbTwxPiIpKQpyLmM9cy5lCnJl +dHVybiByfSwKZ2soYSl7cmV0dXJuIHRoaXMuYX0sCmdsMChhKXtyZXR1cm4gdGhpcy5hPT09MH0sCmdv +cihhKXtyZXR1cm4gdGhpcy5hIT09MH0sCnRnKGEsYil7dmFyIHMscgppZihiIT09Il9fcHJvdG9fXyIp +e3M9dGhpcy5iCmlmKHM9PW51bGwpcmV0dXJuITEKcmV0dXJuIHQuZy5hKHNbYl0pIT1udWxsfWVsc2V7 +cj10aGlzLlBSKGIpCnJldHVybiByfX0sClBSKGEpe3ZhciBzPXRoaXMuZAppZihzPT1udWxsKXJldHVy +biExCnJldHVybiB0aGlzLnQoc1t0aGlzLlkoYSldLGEpPj0wfSwKaShhLGIpe3ZhciBzLHIscT10aGlz +CkEuTGgocSkuYy5hKGIpCmlmKHR5cGVvZiBiPT0ic3RyaW5nIiYmYiE9PSJfX3Byb3RvX18iKXtzPXEu +YgpyZXR1cm4gcS5iUShzPT1udWxsP3EuYj1BLlQyKCk6cyxiKX1lbHNlIGlmKHR5cGVvZiBiPT0ibnVt +YmVyIiYmKGImMTA3Mzc0MTgyMyk9PT1iKXtyPXEuYwpyZXR1cm4gcS5iUShyPT1udWxsP3EuYz1BLlQy +KCk6cixiKX1lbHNlIHJldHVybiBxLkI3KGIpfSwKQjcoYSl7dmFyIHMscixxLHA9dGhpcwpBLkxoKHAp +LmMuYShhKQpzPXAuZAppZihzPT1udWxsKXM9cC5kPUEuVDIoKQpyPXAuWShhKQpxPXNbcl0KaWYocT09 +bnVsbClzW3JdPVtwLnlvKGEpXQplbHNle2lmKHAudChxLGEpPj0wKXJldHVybiExCnEucHVzaChwLnlv +KGEpKX1yZXR1cm4hMH0sClIoYSxiKXt2YXIgcz10aGlzCmlmKHR5cGVvZiBiPT0ic3RyaW5nIiYmYiE9 +PSJfX3Byb3RvX18iKXJldHVybiBzLkoocy5iLGIpCmVsc2UgaWYodHlwZW9mIGI9PSJudW1iZXIiJiYo +YiYxMDczNzQxODIzKT09PWIpcmV0dXJuIHMuSihzLmMsYikKZWxzZSByZXR1cm4gcy5NKGIpfSwKTShh +KXt2YXIgcyxyLHEscCxvPXRoaXMsbj1vLmQKaWYobj09bnVsbClyZXR1cm4hMQpzPW8uWShhKQpyPW5b +c10KcT1vLnQocixhKQppZihxPDApcmV0dXJuITEKcD1yLnNwbGljZShxLDEpWzBdCmlmKDA9PT1yLmxl +bmd0aClkZWxldGUgbltzXQpvLlQocCkKcmV0dXJuITB9LApiUShhLGIpe0EuTGgodGhpcykuYy5hKGIp +CmlmKHQuZy5hKGFbYl0pIT1udWxsKXJldHVybiExCmFbYl09dGhpcy55byhiKQpyZXR1cm4hMH0sCkoo +YSxiKXt2YXIgcwppZihhPT1udWxsKXJldHVybiExCnM9dC5nLmEoYVtiXSkKaWYocz09bnVsbClyZXR1 +cm4hMQp0aGlzLlQocykKZGVsZXRlIGFbYl0KcmV0dXJuITB9LApTKCl7dGhpcy5yPXRoaXMucisxJjEw +NzM3NDE4MjN9LAp5byhhKXt2YXIgcyxyPXRoaXMscT1uZXcgQS5ibihBLkxoKHIpLmMuYShhKSkKaWYo +ci5lPT1udWxsKXIuZT1yLmY9cQplbHNle3M9ci5mCnMudG9TdHJpbmcKcS5jPXMKci5mPXMuYj1xfSsr +ci5hCnIuUygpCnJldHVybiBxfSwKVChhKXt2YXIgcz10aGlzLHI9YS5jLHE9YS5iCmlmKHI9PW51bGwp +cy5lPXEKZWxzZSByLmI9cQppZihxPT1udWxsKXMuZj1yCmVsc2UgcS5jPXI7LS1zLmEKcy5TKCl9LApZ +KGEpe3JldHVybiBKLlUzKGEpJjEwNzM3NDE4MjN9LAp0KGEsYil7dmFyIHMscgppZihhPT1udWxsKXJl +dHVybi0xCnM9YS5sZW5ndGgKZm9yKHI9MDtyPHM7KytyKWlmKEouUk0oYVtyXS5hLGIpKXJldHVybiBy +CnJldHVybi0xfX0KQS5ibi5wcm90b3R5cGU9e30KQS5sbS5wcm90b3R5cGU9ewpnbCgpe3ZhciBzPXRo +aXMuZApyZXR1cm4gcz09bnVsbD90aGlzLiR0aS5jLmEocyk6c30sCkcoKXt2YXIgcz10aGlzLHI9cy5j +LHE9cy5hCmlmKHMuYiE9PXEucil0aHJvdyBBLmIoQS5hNChxKSkKZWxzZSBpZihyPT1udWxsKXtzLnNq +KG51bGwpCnJldHVybiExfWVsc2V7cy5zaihzLiR0aS5DKCIxPyIpLmEoci5hKSkKcy5jPXIuYgpyZXR1 +cm4hMH19LApzaihhKXt0aGlzLmQ9dGhpcy4kdGkuQygiMT8iKS5hKGEpfSwKJGlBbjoxfQpBLm1XLnBy +b3RvdHlwZT17fQpBLnV5LnByb3RvdHlwZT17JGliUToxLCRpY1g6MSwkaXpNOjF9CkEubEQucHJvdG90 +eXBlPXsKZ0EoYSl7cmV0dXJuIG5ldyBBLmE3KGEsdGhpcy5nayhhKSxBLnpLKGEpLkMoImE3PGxELkU+ +IikpfSwKRShhLGIpe3JldHVybiB0aGlzLnEoYSxiKX0sCksoYSxiKXt2YXIgcyxyCkEueksoYSkuQygi +fihsRC5FKSIpLmEoYikKcz10aGlzLmdrKGEpCmZvcihyPTA7cjxzOysrcil7Yi4kMSh0aGlzLnEoYSxy +KSkKaWYocyE9PXRoaXMuZ2soYSkpdGhyb3cgQS5iKEEuYTQoYSkpfX0sCmdsMChhKXtyZXR1cm4gdGhp +cy5nayhhKT09PTB9LApnb3IoYSl7cmV0dXJuIXRoaXMuZ2wwKGEpfSwKRTIoYSxiLGMpe3ZhciBzPUEu +eksoYSkKcmV0dXJuIG5ldyBBLmxKKGEscy5LcShjKS5DKCIxKGxELkUpIikuYShiKSxzLkMoIkA8bEQu +RT4iKS5LcShjKS5DKCJsSjwxLDI+IikpfSwKZVIoYSxiKXtyZXR1cm4gQS5xQyhhLGIsbnVsbCxBLnpL +KGEpLkMoImxELkUiKSl9LApkcihhLGIpe3JldHVybiBuZXcgQS5qVihhLEEueksoYSkuQygiQDxsRC5F +PiIpLktxKGIpLkMoImpWPDEsMj4iKSl9LApkdShhLGIsYyxkKXt2YXIgcwpBLnpLKGEpLkMoImxELkU/ +IikuYShkKQpBLmpCKGIsYyx0aGlzLmdrKGEpKQpmb3Iocz1iO3M8YzsrK3MpdGhpcy5ZNShhLHMsZCl9 +LAoiWyIoYSl7cmV0dXJuIEEueChhLCJbIiwiXSIpfX0KQS5pbC5wcm90b3R5cGU9e30KQS5yYS5wcm90 +b3R5cGU9ewokMihhLGIpe3ZhciBzLHI9dGhpcy5hCmlmKCFyLmEpdGhpcy5iLmErPSIsICIKci5hPSEx +CnI9dGhpcy5iCnM9ci5hKz1BLkVqKGEpCnIuYT1zKyI6ICIKci5hKz1BLkVqKGIpfSwKJFM6MTB9CkEu +WWsucHJvdG90eXBlPXsKSyhhLGIpe3ZhciBzLHIscSxwPUEuTGgodGhpcykKcC5DKCJ+KFlrLkssWWsu +VikiKS5hKGIpCmZvcihzPUouSVQodGhpcy5ndmMoKSkscD1wLkMoIllrLlYiKTtzLkcoKTspe3I9cy5n +bCgpCnE9dGhpcy5xKDAscikKYi4kMihyLHE9PW51bGw/cC5hKHEpOnEpfX0sCmdQdShhKXtyZXR1cm4g +Si5NMSh0aGlzLmd2YygpLG5ldyBBLnlRKHRoaXMpLEEuTGgodGhpcykuQygiTjM8WWsuSyxZay5WPiIp +KX0sCng0KGEpe3JldHVybiBKLnpsKHRoaXMuZ3ZjKCksYSl9LApnayhhKXtyZXR1cm4gSi5IbSh0aGlz +Lmd2YygpKX0sCmdsMChhKXtyZXR1cm4gSi51VSh0aGlzLmd2YygpKX0sCiJbIihhKXtyZXR1cm4gQS5u +Tyh0aGlzKX0sCiRpWjA6MX0KQS55US5wcm90b3R5cGU9ewokMShhKXt2YXIgcz10aGlzLmEscj1BLkxo +KHMpCnIuQygiWWsuSyIpLmEoYSkKcz1zLnEoMCxhKQppZihzPT1udWxsKXM9ci5DKCJZay5WIikuYShz +KQpyZXR1cm4gbmV3IEEuTjMoYSxzLHIuQygiQDxZay5LPiIpLktxKHIuQygiWWsuViIpKS5DKCJOMzwx +LDI+IikpfSwKJFMoKXtyZXR1cm4gQS5MaCh0aGlzLmEpLkMoIk4zPFlrLkssWWsuVj4oWWsuSykiKX19 +CkEuS1AucHJvdG90eXBlPXsKWTUoYSxiLGMpe3ZhciBzPUEuTGgodGhpcykKcy5jLmEoYikKcy56WzFd +LmEoYykKdGhyb3cgQS5iKEEuTDQoIkNhbm5vdCBtb2RpZnkgdW5tb2RpZmlhYmxlIG1hcCIpKX19CkEu +UG4ucHJvdG90eXBlPXsKcShhLGIpe3JldHVybiB0aGlzLmEucSgwLGIpfSwKWTUoYSxiLGMpe3ZhciBz +PUEuTGgodGhpcykKdGhpcy5hLlk1KDAscy5jLmEoYikscy56WzFdLmEoYykpfSwKeDQoYSl7cmV0dXJu +IHRoaXMuYS54NChhKX0sCksoYSxiKXt0aGlzLmEuSygwLEEuTGgodGhpcykuQygifigxLDIpIikuYShi +KSl9LApnbDAoYSl7dmFyIHM9dGhpcy5hCnJldHVybiBzLmdsMChzKX0sCmdrKGEpe3ZhciBzPXRoaXMu +YQpyZXR1cm4gcy5nayhzKX0sCiJbIihhKXtyZXR1cm4gdGhpcy5hWyJbIl0oMCl9LApnUHUoYSl7dmFy +IHM9dGhpcy5hCnJldHVybiBzLmdQdShzKX0sCiRpWjA6MX0KQS5Hai5wcm90b3R5cGU9e30KQS5sZi5w +cm90b3R5cGU9ewpnbDAoYSl7cmV0dXJuIHRoaXMuZ2sodGhpcyk9PT0wfSwKZ29yKGEpe3JldHVybiB0 +aGlzLmdrKHRoaXMpIT09MH0sCkZWKGEsYil7dmFyIHMKZm9yKHM9Si5JVChBLkxoKHRoaXMpLkMoImNY +PGxmLkU+IikuYShiKSk7cy5HKCk7KXRoaXMuaSgwLHMuZ2woKSl9LAoiWyIoYSl7cmV0dXJuIEEueCh0 +aGlzLCJ7IiwifSIpfSwKSChhLGIpe3ZhciBzLHIscSxwPXRoaXMuZ0EodGhpcykKaWYoIXAuRygpKXJl +dHVybiIiCmlmKGI9PT0iIil7cz1wLiR0aS5jCnI9IiIKZG97cT1wLmQKcis9QS5FaihxPT1udWxsP3Mu +YShxKTpxKX13aGlsZShwLkcoKSkKcz1yfWVsc2V7cz1wLmQKcz0iIitBLkVqKHM9PW51bGw/cC4kdGku +Yy5hKHMpOnMpCmZvcihyPXAuJHRpLmM7cC5HKCk7KXtxPXAuZApzPXMrYitBLkVqKHE9PW51bGw/ci5h +KHEpOnEpfX1yZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6c30sCmVSKGEsYil7cmV0dXJuIEEuYkso +dGhpcyxiLEEuTGgodGhpcykuQygibGYuRSIpKX0sCkUoYSxiKXt2YXIgcyxyLHEscCxvPSJpbmRleCIK +QS5jYihiLG8sdC5TKQpBLmsxKGIsbykKZm9yKHM9dGhpcy5nQSh0aGlzKSxyPXMuJHRpLmMscT0wO3Mu +RygpOyl7cD1zLmQKaWYocD09bnVsbClwPXIuYShwKQppZihiPT09cSlyZXR1cm4gcDsrK3F9dGhyb3cg +QS5iKEEuQ2YoYix0aGlzLG8sbnVsbCxxKSl9fQpBLlZqLnByb3RvdHlwZT17JGliUToxLCRpY1g6MSwk +aU9sOjF9CkEuWHYucHJvdG90eXBlPXskaWJROjEsJGljWDoxLCRpT2w6MX0KQS5uWS5wcm90b3R5cGU9 +e30KQS5XWS5wcm90b3R5cGU9e30KQS5SVS5wcm90b3R5cGU9e30KQS5GUC5wcm90b3R5cGU9e30KQS51 +dy5wcm90b3R5cGU9ewpxKGEsYil7dmFyIHMscj10aGlzLmIKaWYocj09bnVsbClyZXR1cm4gdGhpcy5j +LnEoMCxiKQplbHNlIGlmKHR5cGVvZiBiIT0ic3RyaW5nIilyZXR1cm4gbnVsbAplbHNle3M9cltiXQpy +ZXR1cm4gdHlwZW9mIHM9PSJ1bmRlZmluZWQiP3RoaXMuZmIoYik6c319LApnayhhKXtyZXR1cm4gdGhp +cy5iPT1udWxsP3RoaXMuYy5hOnRoaXMuQ2YoKS5sZW5ndGh9LApnbDAoYSl7cmV0dXJuIHRoaXMuZ2so +dGhpcyk9PT0wfSwKZ3ZjKCl7aWYodGhpcy5iPT1udWxsKXt2YXIgcz10aGlzLmMKcmV0dXJuIG5ldyBB +Lmk1KHMsQS5MaChzKS5DKCJpNTwxPiIpKX1yZXR1cm4gbmV3IEEuaTgodGhpcyl9LApZNShhLGIsYyl7 +dmFyIHMscixxPXRoaXMKaWYocS5iPT1udWxsKXEuYy5ZNSgwLGIsYykKZWxzZSBpZihxLng0KGIpKXtz +PXEuYgpzW2JdPWMKcj1xLmEKaWYocj09bnVsbD9zIT1udWxsOnIhPT1zKXJbYl09bnVsbH1lbHNlIHEu +WEsoKS5ZNSgwLGIsYyl9LAp4NChhKXtpZih0aGlzLmI9PW51bGwpcmV0dXJuIHRoaXMuYy54NChhKQpy +ZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYSxhKX0sCksoYSxi +KXt2YXIgcyxyLHEscCxvPXRoaXMKdC5jQS5hKGIpCmlmKG8uYj09bnVsbClyZXR1cm4gby5jLksoMCxi +KQpzPW8uQ2YoKQpmb3Iocj0wO3I8cy5sZW5ndGg7KytyKXtxPXNbcl0KcD1vLmJbcV0KaWYodHlwZW9m +IHA9PSJ1bmRlZmluZWQiKXtwPUEuUWUoby5hW3FdKQpvLmJbcV09cH1iLiQyKHEscCkKaWYocyE9PW8u +Yyl0aHJvdyBBLmIoQS5hNChvKSl9fSwKQ2YoKXt2YXIgcz10LmJNLmEodGhpcy5jKQppZihzPT1udWxs +KXM9dGhpcy5jPUEuUUkoT2JqZWN0LmtleXModGhpcy5hKSx0LnMpCnJldHVybiBzfSwKWEsoKXt2YXIg +cyxyLHEscCxvLG49dGhpcwppZihuLmI9PW51bGwpcmV0dXJuIG4uYwpzPUEuRmwodC5OLHQueikKcj1u +LkNmKCkKZm9yKHE9MDtwPXIubGVuZ3RoLHE8cDsrK3Epe289cltxXQpzLlk1KDAsbyxuLnEoMCxvKSl9 +aWYocD09PTApQi5ObS5pKHIsIiIpCmVsc2UgQi5ObS5WMShyKQpuLmE9bi5iPW51bGwKcmV0dXJuIG4u +Yz1zfSwKZmIoYSl7dmFyIHMKaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0 +aGlzLmEsYSkpcmV0dXJuIG51bGwKcz1BLlFlKHRoaXMuYVthXSkKcmV0dXJuIHRoaXMuYlthXT1zfX0K +QS5pOC5wcm90b3R5cGU9ewpnayhhKXt2YXIgcz10aGlzLmEKcmV0dXJuIHMuZ2socyl9LApFKGEsYil7 +dmFyIHM9dGhpcy5hCmlmKHMuYj09bnVsbClzPXMuZ3ZjKCkuRSgwLGIpCmVsc2V7cz1zLkNmKCkKaWYo +IShiPj0wJiZiPHMubGVuZ3RoKSlyZXR1cm4gQS5PSChzLGIpCnM9c1tiXX1yZXR1cm4gc30sCmdBKGEp +e3ZhciBzPXRoaXMuYQppZihzLmI9PW51bGwpe3M9cy5ndmMoKQpzPXMuZ0Eocyl9ZWxzZXtzPXMuQ2Yo +KQpzPW5ldyBKLm0xKHMscy5sZW5ndGgsQS50NihzKS5DKCJtMTwxPiIpKX1yZXR1cm4gc30sCnRnKGEs +Yil7cmV0dXJuIHRoaXMuYS54NChiKX19CkEueHIucHJvdG90eXBlPXsKJDAoKXt2YXIgcyxyCnRyeXtz +PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtmYXRhbDp0cnVlfSkKcmV0dXJuIHN9Y2F0Y2gocil7fXJl +dHVybiBudWxsfSwKJFM6MTF9CkEuTnoucHJvdG90eXBlPXsKJDAoKXt2YXIgcyxyCnRyeXtzPW5ldyBU +ZXh0RGVjb2RlcigidXRmLTgiLHtmYXRhbDpmYWxzZX0pCnJldHVybiBzfWNhdGNoKHIpe31yZXR1cm4g +bnVsbH0sCiRTOjExfQpBLkNWLnByb3RvdHlwZT17CnlyKGExLGEyLGEzKXt2YXIgcyxyLHEscCxvLG4s +bSxsLGssaixpLGgsZyxmLGUsZCxjLGIsYSxhMD0iSW52YWxpZCBiYXNlNjQgZW5jb2RpbmcgbGVuZ3Ro +ICIKYTM9QS5qQihhMixhMyxhMS5sZW5ndGgpCnM9JC5WNygpCmZvcihyPXMubGVuZ3RoLHE9YTIscD1x +LG89bnVsbCxuPS0xLG09LTEsbD0wO3E8YTM7cT1rKXtrPXErMQpqPUIueEIuVyhhMSxxKQppZihqPT09 +Mzcpe2k9aysyCmlmKGk8PWEzKXtoPUEub28oQi54Qi5XKGExLGspKQpnPUEub28oQi54Qi5XKGExLGsr +MSkpCmY9aCoxNitnLShnJjI1NikKaWYoZj09PTM3KWY9LTEKaz1pfWVsc2UgZj0tMX1lbHNlIGY9agpp +ZigwPD1mJiZmPD0xMjcpe2lmKCEoZj49MCYmZjxyKSlyZXR1cm4gQS5PSChzLGYpCmU9c1tmXQppZihl +Pj0wKXtmPUIueEIuTygiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJz +dHV2d3h5ejAxMjM0NTY3ODkrLyIsZSkKaWYoZj09PWopY29udGludWUKaj1mfWVsc2V7aWYoZT09PS0x +KXtpZihuPDApe2Q9bz09bnVsbD9udWxsOm8uYS5sZW5ndGgKaWYoZD09bnVsbClkPTAKbj1kKyhxLXAp +Cm09cX0rK2wKaWYoaj09PTYxKWNvbnRpbnVlfWo9Zn1pZihlIT09LTIpe2lmKG89PW51bGwpe289bmV3 +IEEuTSgiIikKZD1vfWVsc2UgZD1vCmM9ZC5hKz1CLnhCLk5qKGExLHAscSkKZC5hPWMrQS5MdyhqKQpw +PWsKY29udGludWV9fXRocm93IEEuYihBLnJyKCJJbnZhbGlkIGJhc2U2NCBkYXRhIixhMSxxKSl9aWYo +byE9bnVsbCl7cj1vLmErPUIueEIuTmooYTEscCxhMykKZD1yLmxlbmd0aAppZihuPj0wKUEueE0oYTEs +bSxhMyxuLGwsZCkKZWxzZXtiPUIuam4uelkoZC0xLDQpKzEKaWYoYj09PTEpdGhyb3cgQS5iKEEucnIo +YTAsYTEsYTMpKQpmb3IoO2I8NDspe3IrPSI9IgpvLmE9cjsrK2J9fXI9by5hCnJldHVybiBCLnhCLmk3 +KGExLGEyLGEzLHIuY2hhckNvZGVBdCgwKT09MD9yOnIpfWE9YTMtYTIKaWYobj49MClBLnhNKGExLG0s +YTMsbixsLGEpCmVsc2V7Yj1CLmpuLnpZKGEsNCkKaWYoYj09PTEpdGhyb3cgQS5iKEEucnIoYTAsYTEs +YTMpKQppZihiPjEpYTE9Qi54Qi5pNyhhMSxhMyxhMyxiPT09Mj8iPT0iOiI9Iil9cmV0dXJuIGExfX0K +QS5VOC5wcm90b3R5cGU9e30KQS5Vay5wcm90b3R5cGU9e30KQS53SS5wcm90b3R5cGU9e30KQS5aaS5w +cm90b3R5cGU9e30KQS5VZC5wcm90b3R5cGU9ewoiWyIoYSl7dmFyIHM9QS5obCh0aGlzLmEpCnJldHVy +bih0aGlzLmIhPW51bGw/IkNvbnZlcnRpbmcgb2JqZWN0IHRvIGFuIGVuY29kYWJsZSBvYmplY3QgZmFp +bGVkOiI6IkNvbnZlcnRpbmcgb2JqZWN0IGRpZCBub3QgcmV0dXJuIGFuIGVuY29kYWJsZSBvYmplY3Q6 +IikrIiAiK3N9fQpBLks4LnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4iQ3ljbGljIGVycm9yIGluIEpT +T04gc3RyaW5naWZ5In19CkEuYnkucHJvdG90eXBlPXsKcFcoYSxiLGMpe3ZhciBzCnQuZlYuYShjKQpz +PUEuQlMoYix0aGlzLmdIZSgpLmEpCnJldHVybiBzfSwKT0IoYSxiKXt2YXIgcwp0LmRBLmEoYikKcz1B +LnVYKGEsdGhpcy5nWkUoKS5iLG51bGwpCnJldHVybiBzfSwKZ1pFKCl7cmV0dXJuIEIublh9LApnSGUo +KXtyZXR1cm4gQi5BM319CkEub2oucHJvdG90eXBlPXt9CkEuTXgucHJvdG90eXBlPXt9CkEuU2gucHJv +dG90eXBlPXsKUlQoYSl7dmFyIHMscixxLHAsbyxuLG09YS5sZW5ndGgKZm9yKHM9dGhpcy5jLHI9MCxx +PTA7cTxtOysrcSl7cD1CLnhCLlcoYSxxKQppZihwPjkyKXtpZihwPj01NTI5Nil7bz1wJjY0NTEyCmlm +KG89PT01NTI5Nil7bj1xKzEKbj0hKG48bSYmKEIueEIuVyhhLG4pJjY0NTEyKT09PTU2MzIwKX1lbHNl +IG49ITEKaWYoIW4paWYobz09PTU2MzIwKXtvPXEtMQpvPSEobz49MCYmKEIueEIuTyhhLG8pJjY0NTEy +KT09PTU1Mjk2KX1lbHNlIG89ITEKZWxzZSBvPSEwCmlmKG8pe2lmKHE+cilzLmErPUIueEIuTmooYSxy +LHEpCnI9cSsxCm89cy5hKz1BLkx3KDkyKQpvKz1BLkx3KDExNykKcy5hPW8Kbys9QS5MdygxMDApCnMu +YT1vCm49cD4+PjgmMTUKbys9QS5MdyhuPDEwPzQ4K246ODcrbikKcy5hPW8Kbj1wPj4+NCYxNQpvKz1B +Lkx3KG48MTA/NDgrbjo4NytuKQpzLmE9bwpuPXAmMTUKcy5hPW8rQS5MdyhuPDEwPzQ4K246ODcrbil9 +fWNvbnRpbnVlfWlmKHA8MzIpe2lmKHE+cilzLmErPUIueEIuTmooYSxyLHEpCnI9cSsxCm89cy5hKz1B +Lkx3KDkyKQpzd2l0Y2gocCl7Y2FzZSA4OnMuYT1vK0EuTHcoOTgpCmJyZWFrCmNhc2UgOTpzLmE9bytB +Lkx3KDExNikKYnJlYWsKY2FzZSAxMDpzLmE9bytBLkx3KDExMCkKYnJlYWsKY2FzZSAxMjpzLmE9bytB +Lkx3KDEwMikKYnJlYWsKY2FzZSAxMzpzLmE9bytBLkx3KDExNCkKYnJlYWsKZGVmYXVsdDpvKz1BLkx3 +KDExNykKcy5hPW8Kbys9QS5Mdyg0OCkKcy5hPW8Kbys9QS5Mdyg0OCkKcy5hPW8Kbj1wPj4+NCYxNQpv +Kz1BLkx3KG48MTA/NDgrbjo4NytuKQpzLmE9bwpuPXAmMTUKcy5hPW8rQS5MdyhuPDEwPzQ4K246ODcr +bikKYnJlYWt9fWVsc2UgaWYocD09PTM0fHxwPT09OTIpe2lmKHE+cilzLmErPUIueEIuTmooYSxyLHEp +CnI9cSsxCm89cy5hKz1BLkx3KDkyKQpzLmE9bytBLkx3KHApfX1pZihyPT09MClzLmErPWEKZWxzZSBp +ZihyPG0pcy5hKz1CLnhCLk5qKGEscixtKX0sCkpuKGEpe3ZhciBzLHIscSxwCmZvcihzPXRoaXMuYSxy +PXMubGVuZ3RoLHE9MDtxPHI7KytxKXtwPXNbcV0KaWYoYT09bnVsbD9wPT1udWxsOmE9PT1wKXRocm93 +IEEuYihuZXcgQS5LOChhLG51bGwpKX1CLk5tLmkocyxhKX0sCmlVKGEpe3ZhciBzLHIscSxwLG89dGhp +cwppZihvLnRNKGEpKXJldHVybgpvLkpuKGEpCnRyeXtzPW8uYi4kMShhKQppZighby50TShzKSl7cT1B +Lkd5KGEsbnVsbCxvLmdWSygpKQp0aHJvdyBBLmIocSl9cT1vLmEKaWYoMD49cS5sZW5ndGgpcmV0dXJu +IEEuT0gocSwtMSkKcS5wb3AoKX1jYXRjaChwKXtyPUEuUnUocCkKcT1BLkd5KGEscixvLmdWSygpKQp0 +aHJvdyBBLmIocSl9fSwKdE0oYSl7dmFyIHMscixxPXRoaXMKaWYodHlwZW9mIGE9PSJudW1iZXIiKXtp +ZighaXNGaW5pdGUoYSkpcmV0dXJuITEKcS5jLmErPUIuQ0RbIlsiXShhKQpyZXR1cm4hMH1lbHNlIGlm +KGE9PT0hMCl7cS5jLmErPSJ0cnVlIgpyZXR1cm4hMH1lbHNlIGlmKGE9PT0hMSl7cS5jLmErPSJmYWxz +ZSIKcmV0dXJuITB9ZWxzZSBpZihhPT1udWxsKXtxLmMuYSs9Im51bGwiCnJldHVybiEwfWVsc2UgaWYo +dHlwZW9mIGE9PSJzdHJpbmciKXtzPXEuYwpzLmErPSciJwpxLlJUKGEpCnMuYSs9JyInCnJldHVybiEw +fWVsc2UgaWYodC5qLmIoYSkpe3EuSm4oYSkKcS5sSyhhKQpzPXEuYQppZigwPj1zLmxlbmd0aClyZXR1 +cm4gQS5PSChzLC0xKQpzLnBvcCgpCnJldHVybiEwfWVsc2UgaWYodC5mLmIoYSkpe3EuSm4oYSkKcj1x +Lmp3KGEpCnM9cS5hCmlmKDA+PXMubGVuZ3RoKXJldHVybiBBLk9IKHMsLTEpCnMucG9wKCkKcmV0dXJu +IHJ9ZWxzZSByZXR1cm4hMX0sCmxLKGEpe3ZhciBzLHIscT10aGlzLmMKcS5hKz0iWyIKcz1KLlU2KGEp +CmlmKHMuZ29yKGEpKXt0aGlzLmlVKHMucShhLDApKQpmb3Iocj0xO3I8cy5nayhhKTsrK3Ipe3EuYSs9 +IiwiCnRoaXMuaVUocy5xKGEscikpfX1xLmErPSJdIn0sCmp3KGEpe3ZhciBzLHIscSxwLG8sbixtPXRo +aXMsbD17fQppZihhLmdsMChhKSl7bS5jLmErPSJ7fSIKcmV0dXJuITB9cz1hLmdrKGEpKjIKcj1BLk84 +KHMsbnVsbCwhMSx0LlgpCnE9bC5hPTAKbC5iPSEwCmEuSygwLG5ldyBBLnRpKGwscikpCmlmKCFsLmIp +cmV0dXJuITEKcD1tLmMKcC5hKz0ieyIKZm9yKG89JyInO3E8cztxKz0yLG89JywiJyl7cC5hKz1vCm0u +UlQoQS5uKHJbcV0pKQpwLmErPSciOicKbj1xKzEKaWYoIShuPHMpKXJldHVybiBBLk9IKHIsbikKbS5p +VShyW25dKX1wLmErPSJ9IgpyZXR1cm4hMH19CkEudGkucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgcyxy +CmlmKHR5cGVvZiBhIT0ic3RyaW5nIil0aGlzLmEuYj0hMQpzPXRoaXMuYgpyPXRoaXMuYQpCLk5tLlk1 +KHMsci5hKyssYSkKQi5ObS5ZNShzLHIuYSsrLGIpfSwKJFM6MTB9CkEudHUucHJvdG90eXBlPXsKZ1ZL +KCl7dmFyIHM9dGhpcy5jLmEKcmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9fQpBLnU1LnByb3Rv +dHlwZT17CmdaRSgpe3JldHVybiBCLlFrfX0KQS5FMy5wcm90b3R5cGU9ewpXSihhKXt2YXIgcyxyLHEs +cD1BLmpCKDAsbnVsbCxhLmxlbmd0aCksbz1wLTAKaWYobz09PTApcmV0dXJuIG5ldyBVaW50OEFycmF5 +KDApCnM9byozCnI9bmV3IFVpbnQ4QXJyYXkocykKcT1uZXcgQS5SdyhyKQppZihxLkd4KGEsMCxwKSE9 +PXApe0IueEIuTyhhLHAtMSkKcS5STygpfXJldHVybiBuZXcgVWludDhBcnJheShyLnN1YmFycmF5KDAs +QS5yTSgwLHEuYixzKSkpfX0KQS5Sdy5wcm90b3R5cGU9ewpSTygpe3ZhciBzPXRoaXMscj1zLmMscT1z +LmIscD1zLmI9cSsxLG89ci5sZW5ndGgKaWYoIShxPG8pKXJldHVybiBBLk9IKHIscSkKcltxXT0yMzkK +cT1zLmI9cCsxCmlmKCEocDxvKSlyZXR1cm4gQS5PSChyLHApCnJbcF09MTkxCnMuYj1xKzEKaWYoIShx +PG8pKXJldHVybiBBLk9IKHIscSkKcltxXT0xODl9LApPNihhLGIpe3ZhciBzLHIscSxwLG8sbj10aGlz +CmlmKChiJjY0NTEyKT09PTU2MzIwKXtzPTY1NTM2KygoYSYxMDIzKTw8MTApfGImMTAyMwpyPW4uYwpx +PW4uYgpwPW4uYj1xKzEKbz1yLmxlbmd0aAppZighKHE8bykpcmV0dXJuIEEuT0gocixxKQpyW3FdPXM+ +Pj4xOHwyNDAKcT1uLmI9cCsxCmlmKCEocDxvKSlyZXR1cm4gQS5PSChyLHApCnJbcF09cz4+PjEyJjYz +fDEyOApwPW4uYj1xKzEKaWYoIShxPG8pKXJldHVybiBBLk9IKHIscSkKcltxXT1zPj4+NiY2M3wxMjgK +bi5iPXArMQppZighKHA8bykpcmV0dXJuIEEuT0gocixwKQpyW3BdPXMmNjN8MTI4CnJldHVybiEwfWVs +c2V7bi5STygpCnJldHVybiExfX0sCkd4KGEsYixjKXt2YXIgcyxyLHEscCxvLG4sbSxsPXRoaXMKaWYo +YiE9PWMmJihCLnhCLk8oYSxjLTEpJjY0NTEyKT09PTU1Mjk2KS0tYwpmb3Iocz1sLmMscj1zLmxlbmd0 +aCxxPWI7cTxjOysrcSl7cD1CLnhCLlcoYSxxKQppZihwPD0xMjcpe289bC5iCmlmKG8+PXIpYnJlYWsK +bC5iPW8rMQpzW29dPXB9ZWxzZXtvPXAmNjQ1MTIKaWYobz09PTU1Mjk2KXtpZihsLmIrND5yKWJyZWFr +Cm49cSsxCmlmKGwuTzYocCxCLnhCLlcoYSxuKSkpcT1ufWVsc2UgaWYobz09PTU2MzIwKXtpZihsLmIr +Mz5yKWJyZWFrCmwuUk8oKX1lbHNlIGlmKHA8PTIwNDcpe289bC5iCm09bysxCmlmKG0+PXIpYnJlYWsK +bC5iPW0KaWYoIShvPHIpKXJldHVybiBBLk9IKHMsbykKc1tvXT1wPj4+NnwxOTIKbC5iPW0rMQpzW21d +PXAmNjN8MTI4fWVsc2V7bz1sLmIKaWYobysyPj1yKWJyZWFrCm09bC5iPW8rMQppZighKG88cikpcmV0 +dXJuIEEuT0gocyxvKQpzW29dPXA+Pj4xMnwyMjQKbz1sLmI9bSsxCmlmKCEobTxyKSlyZXR1cm4gQS5P +SChzLG0pCnNbbV09cD4+PjYmNjN8MTI4CmwuYj1vKzEKaWYoIShvPHIpKXJldHVybiBBLk9IKHMsbykK +c1tvXT1wJjYzfDEyOH19fXJldHVybiBxfX0KQS5HWS5wcm90b3R5cGU9ewpXSihhKXt2YXIgcyxyCnQu +TC5hKGEpCnM9dGhpcy5hCnI9QS5reShzLGEsMCxudWxsKQppZihyIT1udWxsKXJldHVybiByCnJldHVy +biBuZXcgQS5ieihzKS5OZShhLDAsbnVsbCwhMCl9fQpBLmJ6LnByb3RvdHlwZT17Ck5lKGEsYixjLGQp +e3ZhciBzLHIscSxwLG8sbj10aGlzCnQuTC5hKGEpCnM9QS5qQihiLGMsSi5IbShhKSkKaWYoYj09PXMp +cmV0dXJuIiIKcj1BLmp5KGEsYixzKQpxPW4uaE8ociwwLHMtYiwhMCkKcD1uLmIKaWYoKHAmMSkhPT0w +KXtvPUEuajQocCkKbi5iPTAKdGhyb3cgQS5iKEEucnIobyxhLGIrbi5jKSl9cmV0dXJuIHF9LApoTyhh +LGIsYyxkKXt2YXIgcyxyLHE9dGhpcwppZihjLWI+MTAwMCl7cz1CLmpuLkJVKGIrYywyKQpyPXEuaE8o +YSxiLHMsITEpCmlmKChxLmImMSkhPT0wKXJldHVybiByCnJldHVybiByK3EuaE8oYSxzLGMsZCl9cmV0 +dXJuIHEuRWgoYSxiLGMsZCl9LApFaChhLGIsYyxkKXt2YXIgcyxyLHEscCxvLG4sbSxsLGs9dGhpcyxq +PTY1NTMzLGk9ay5iLGg9ay5jLGc9bmV3IEEuTSgiIiksZj1iKzEsZT1hLmxlbmd0aAppZighKGI+PTAm +JmI8ZSkpcmV0dXJuIEEuT0goYSxiKQpzPWFbYl0KJGxhYmVsMCQwOmZvcihyPWsuYTshMDspe2Zvcig7 +ITA7Zj1vKXtxPUIueEIuVygiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFB -QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGRkZG -RkZGRkZGRkZGRkZGR0dHR0dHR0dHR0dHR0dHR0hISEhISEhISEhISEhISEhISEhISEhISEhISElISEhK -RUVCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJLQ0NDQ0NDQ0NDQ0NDRENMT05OTk1FRUVFRUVF -RUVFRSIscykmMzEKaD1pPD0zMj9zJjYxNjk0Pj4+cToocyY2M3xoPDw2KT4+PjAKaT1CLnhCLlcoIiBc -eDAwMDpYRUNDQ0NDTjpsRGIgXHgwMDA6WEVDQ0NDQ052bERiIFx4MDAwOlhFQ0NDQ0NOOmxEYiBBQUFB -QVx4MDBceDAwXHgwMFx4MDBceDAwQUFBQUEwMDAwMEFBQUFBOjo6OjpBQUFBQUdHMDAwQUFBQUEwMEtL -S0FBQUFBRzo6OjpBQUFBQTpJSUlJQUFBQUEwMDBceDgwMEFBQUFBXHgwMFx4MDBceDAwXHgwMCBBQUFB -QSIsaStxKQppZihpPT09MCl7Zy5hKz1BLkx3KGgpCmlmKGY9PT1jKWJyZWFrICRsYWJlbDAkMApicmVh -a31lbHNlIGlmKChpJjEpIT09MCl7aWYocilzd2l0Y2goaSl7Y2FzZSA2OTpjYXNlIDY3OmcuYSs9QS5M -dyhqKQpicmVhawpjYXNlIDY1OmcuYSs9QS5MdyhqKTstLWYKYnJlYWsKZGVmYXVsdDpwPWcuYSs9QS5M -dyhqKQpnLmE9cCtBLkx3KGopCmJyZWFrfWVsc2V7ay5iPWkKay5jPWYtMQpyZXR1cm4iIn1pPTB9aWYo -Zj09PWMpYnJlYWsgJGxhYmVsMCQwCm89ZisxCmlmKCEoZj49MCYmZjxlKSlyZXR1cm4gQS5PSChhLGYp -CnM9YVtmXX1vPWYrMQppZighKGY+PTAmJmY8ZSkpcmV0dXJuIEEuT0goYSxmKQpzPWFbZl0KaWYoczwx -Mjgpe3doaWxlKCEwKXtpZighKG88Yykpe249YwpicmVha31tPW8rMQppZighKG8+PTAmJm88ZSkpcmV0 -dXJuIEEuT0goYSxvKQpzPWFbb10KaWYocz49MTI4KXtuPW0tMQpvPW0KYnJlYWt9bz1tfWlmKG4tZjwy -MClmb3IobD1mO2w8bjsrK2wpe2lmKCEobDxlKSlyZXR1cm4gQS5PSChhLGwpCmcuYSs9QS5MdyhhW2xd -KX1lbHNlIGcuYSs9QS5ITShhLGYsbikKaWYobj09PWMpYnJlYWsgJGxhYmVsMCQwCmY9b31lbHNlIGY9 -b31pZihkJiZpPjMyKWlmKHIpZy5hKz1BLkx3KGopCmVsc2V7ay5iPTc3CmsuYz1jCnJldHVybiIifWsu -Yj1pCmsuYz1oCmU9Zy5hCnJldHVybiBlLmNoYXJDb2RlQXQoMCk9PTA/ZTplfX0KQS5XRi5wcm90b3R5 -cGU9ewokMihhLGIpe3ZhciBzLHIscQp0LmZvLmEoYSkKcz10aGlzLmIKcj10aGlzLmEKcT1zLmErPXIu -YQpxKz1hLmEKcy5hPXEKcy5hPXErIjogIgpzLmErPUEuaGwoYikKci5hPSIsICJ9LAokUzo0NH0KQS5p -UC5wcm90b3R5cGU9ewpETihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKcmV0dXJuIGIgaW5zdGFuY2Vv -ZiBBLmlQJiZ0aGlzLmE9PT1iLmEmJiEwfSwKZ20oYSl7dmFyIHM9dGhpcy5hCnJldHVybihzXkIuam4u -d0cocywzMCkpJjEwNzM3NDE4MjN9LAoiWyIoYSl7dmFyIHM9dGhpcyxyPUEuR3EoQS50SihzKSkscT1B -LmgwKEEuTlMocykpLHA9QS5oMChBLmpBKHMpKSxvPUEuaDAoQS5JWChzKSksbj1BLmgwKEEuY2gocykp -LG09QS5oMChBLkpkKHMpKSxsPUEuVngoQS5vMShzKSkKcmV0dXJuIHIrIi0iK3ErIi0iK3ArIiAiK28r -IjoiK24rIjoiK20rIi4iK2x9fQpBLmNrLnByb3RvdHlwZT17fQpBLlhTLnByb3RvdHlwZT17CmdJSSgp -e3JldHVybiBBLnRzKHRoaXMuJHRocm93bkpzRXJyb3IpfX0KQS5DNi5wcm90b3R5cGU9ewoiWyIoYSl7 -dmFyIHM9dGhpcy5hCmlmKHMhPW51bGwpcmV0dXJuIkFzc2VydGlvbiBmYWlsZWQ6ICIrQS5obChzKQpy -ZXR1cm4iQXNzZXJ0aW9uIGZhaWxlZCJ9fQpBLkV6LnByb3RvdHlwZT17fQpBLkYucHJvdG90eXBlPXsK -IlsiKGEpe3JldHVybiJUaHJvdyBvZiBudWxsLiJ9fQpBLkFULnByb3RvdHlwZT17CmdaKCl7cmV0dXJu -IkludmFsaWQgYXJndW1lbnQiKyghdGhpcy5hPyIocykiOiIiKX0sCmdOKCl7cmV0dXJuIiJ9LAoiWyIo -YSl7dmFyIHM9dGhpcyxyPXMuYyxxPXI9PW51bGw/IiI6IiAoIityKyIpIixwPXMuZCxvPXA9PW51bGw/ -IiI6IjogIitBLkVqKHApLG49cy5nWigpK3ErbwppZighcy5hKXJldHVybiBuCnJldHVybiBuK3MuZ04o -KSsiOiAiK0EuaGwocy5iKX19CkEuYkoucHJvdG90eXBlPXsKZ1ooKXtyZXR1cm4iUmFuZ2VFcnJvciJ9 -LApnTigpe3ZhciBzLHI9dGhpcy5lLHE9dGhpcy5mCmlmKHI9PW51bGwpcz1xIT1udWxsPyI6IE5vdCBs -ZXNzIHRoYW4gb3IgZXF1YWwgdG8gIitBLkVqKHEpOiIiCmVsc2UgaWYocT09bnVsbClzPSI6IE5vdCBn -cmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gIitBLkVqKHIpCmVsc2UgaWYocT5yKXM9IjogTm90IGluIGlu -Y2x1c2l2ZSByYW5nZSAiK0EuRWoocikrIi4uIitBLkVqKHEpCmVsc2Ugcz1xPHI/IjogVmFsaWQgdmFs -dWUgcmFuZ2UgaXMgZW1wdHkiOiI6IE9ubHkgdmFsaWQgdmFsdWUgaXMgIitBLkVqKHIpCnJldHVybiBz -fX0KQS5lWS5wcm90b3R5cGU9ewpnWigpe3JldHVybiJSYW5nZUVycm9yIn0sCmdOKCl7aWYoQS5JWih0 -aGlzLmIpPDApcmV0dXJuIjogaW5kZXggbXVzdCBub3QgYmUgbmVnYXRpdmUiCnZhciBzPXRoaXMuZgpp -ZihzPT09MClyZXR1cm4iOiBubyBpbmRpY2VzIGFyZSB2YWxpZCIKcmV0dXJuIjogaW5kZXggc2hvdWxk -IGJlIGxlc3MgdGhhbiAiK3N9LApnayhhKXtyZXR1cm4gdGhpcy5mfX0KQS5tcC5wcm90b3R5cGU9ewoi -WyIoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrPXRoaXMsaj17fSxpPW5ldyBBLk0oIiIpCmouYT0iIgpz -PWsuYwpmb3Iocj1zLmxlbmd0aCxxPTAscD0iIixvPSIiO3E8cjsrK3Esbz0iLCAiKXtuPXNbcV0KaS5h -PXArbwpwPWkuYSs9QS5obChuKQpqLmE9IiwgIn1rLmQuSygwLG5ldyBBLldGKGosaSkpCm09QS5obChr -LmEpCmw9aVsiWyJdKDApCnJldHVybiJOb1N1Y2hNZXRob2RFcnJvcjogbWV0aG9kIG5vdCBmb3VuZDog -JyIray5iLmErIidcblJlY2VpdmVyOiAiK20rIlxuQXJndW1lbnRzOiBbIitsKyJdIn19CkEudWIucHJv -dG90eXBlPXsKIlsiKGEpe3JldHVybiJVbnN1cHBvcnRlZCBvcGVyYXRpb246ICIrdGhpcy5hfX0KQS5k -cy5wcm90b3R5cGU9ewoiWyIoYSl7cmV0dXJuIlVuaW1wbGVtZW50ZWRFcnJvcjogIit0aGlzLmF9fQpB -LmxqLnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4iQmFkIHN0YXRlOiAiK3RoaXMuYX19CkEuVVYucHJv -dG90eXBlPXsKIlsiKGEpe3ZhciBzPXRoaXMuYQppZihzPT1udWxsKXJldHVybiJDb25jdXJyZW50IG1v -ZGlmaWNhdGlvbiBkdXJpbmcgaXRlcmF0aW9uLiIKcmV0dXJuIkNvbmN1cnJlbnQgbW9kaWZpY2F0aW9u -IGR1cmluZyBpdGVyYXRpb246ICIrQS5obChzKSsiLiJ9fQpBLms1LnByb3RvdHlwZT17CiJbIihhKXty -ZXR1cm4iT3V0IG9mIE1lbW9yeSJ9LApnSUkoKXtyZXR1cm4gbnVsbH0sCiRpWFM6MX0KQS5LWS5wcm90 -b3R5cGU9ewoiWyIoYSl7cmV0dXJuIlN0YWNrIE92ZXJmbG93In0sCmdJSSgpe3JldHVybiBudWxsfSwK -JGlYUzoxfQpBLnAucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiJSZWFkaW5nIHN0YXRpYyB2YXJpYWJs -ZSAnIit0aGlzLmErIicgZHVyaW5nIGl0cyBpbml0aWFsaXphdGlvbiJ9fQpBLkNELnByb3RvdHlwZT17 -CiJbIihhKXtyZXR1cm4iRXhjZXB0aW9uOiAiK3RoaXMuYX0sCiRpUno6MX0KQS5hRS5wcm90b3R5cGU9 -ewoiWyIoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrLGosaSxoPXRoaXMuYSxnPSIiIT09aD8iRm9ybWF0 -RXhjZXB0aW9uOiAiK2g6IkZvcm1hdEV4Y2VwdGlvbiIsZj10aGlzLmMsZT10aGlzLmIKaWYodHlwZW9m -IGU9PSJzdHJpbmciKXtpZihmIT1udWxsKXM9ZjwwfHxmPmUubGVuZ3RoCmVsc2Ugcz0hMQppZihzKWY9 -bnVsbAppZihmPT1udWxsKXtpZihlLmxlbmd0aD43OCllPUIueEIuTmooZSwwLDc1KSsiLi4uIgpyZXR1 -cm4gZysiXG4iK2V9Zm9yKHI9MSxxPTAscD0hMSxvPTA7bzxmOysrbyl7bj1CLnhCLlcoZSxvKQppZihu -PT09MTApe2lmKHEhPT1vfHwhcCkrK3IKcT1vKzEKcD0hMX1lbHNlIGlmKG49PT0xMyl7KytyCnE9bysx -CnA9ITB9fWc9cj4xP2crKCIgKGF0IGxpbmUgIityKyIsIGNoYXJhY3RlciAiKyhmLXErMSkrIilcbiIp -OmcrKCIgKGF0IGNoYXJhY3RlciAiKyhmKzEpKyIpXG4iKQptPWUubGVuZ3RoCmZvcihvPWY7bzxtOysr -byl7bj1CLnhCLk8oZSxvKQppZihuPT09MTB8fG49PT0xMyl7bT1vCmJyZWFrfX1pZihtLXE+NzgpaWYo -Zi1xPDc1KXtsPXErNzUKaz1xCmo9IiIKaT0iLi4uIn1lbHNle2lmKG0tZjw3NSl7az1tLTc1Cmw9bQpp -PSIifWVsc2V7az1mLTM2Cmw9ZiszNgppPSIuLi4ifWo9Ii4uLiJ9ZWxzZXtsPW0Kaz1xCmo9IiIKaT0i -In1yZXR1cm4gZytqK0IueEIuTmooZSxrLGwpK2krIlxuIitCLnhCLkl4KCIgIixmLWsrai5sZW5ndGgp -KyJeXG4ifWVsc2UgcmV0dXJuIGYhPW51bGw/ZysoIiAoYXQgb2Zmc2V0ICIrQS5FaihmKSsiKSIpOmd9 -LAokaVJ6OjF9CkEuY1gucHJvdG90eXBlPXsKZHIoYSxiKXtyZXR1cm4gQS5HSih0aGlzLEEuTGgodGhp -cykuQygiY1guRSIpLGIpfSwKRTIoYSxiLGMpe3ZhciBzPUEuTGgodGhpcykKcmV0dXJuIEEuSzEodGhp -cyxzLktxKGMpLkMoIjEoY1guRSkiKS5hKGIpLHMuQygiY1guRSIpLGMpfSwKZXYoYSxiKXt2YXIgcz1B -LkxoKHRoaXMpCnJldHVybiBuZXcgQS5VNSh0aGlzLHMuQygiYTIoY1guRSkiKS5hKGIpLHMuQygiVTU8 -Y1guRT4iKSl9LApOMChhLGIsYyxkKXt2YXIgcyxyCmQuYShiKQpBLkxoKHRoaXMpLktxKGQpLkMoIjEo -MSxjWC5FKSIpLmEoYykKZm9yKHM9dGhpcy5nQSh0aGlzKSxyPWI7cy5HKCk7KXI9Yy4kMihyLHMuZ2wo -KSkKcmV0dXJuIHJ9LAp0dChhLGIpe3JldHVybiBBLlkxKHRoaXMsYixBLkxoKHRoaXMpLkMoImNYLkUi -KSl9LApicihhKXtyZXR1cm4gdGhpcy50dChhLCEwKX0sCmdrKGEpe3ZhciBzLHI9dGhpcy5nQSh0aGlz -KQpmb3Iocz0wO3IuRygpOykrK3MKcmV0dXJuIHN9LApnbDAoYSl7cmV0dXJuIXRoaXMuZ0EodGhpcyku -RygpfSwKZ29yKGEpe3JldHVybiF0aGlzLmdsMCh0aGlzKX0sCmVSKGEsYil7cmV0dXJuIEEuYksodGhp -cyxiLEEuTGgodGhpcykuQygiY1guRSIpKX0sCmdyOChhKXt2YXIgcyxyPXRoaXMuZ0EodGhpcykKaWYo -IXIuRygpKXRocm93IEEuYihBLldwKCkpCnM9ci5nbCgpCmlmKHIuRygpKXRocm93IEEuYihBLkFtKCkp -CnJldHVybiBzfSwKRShhLGIpe3ZhciBzLHIscQpBLmsxKGIsImluZGV4IikKZm9yKHM9dGhpcy5nQSh0 -aGlzKSxyPTA7cy5HKCk7KXtxPXMuZ2woKQppZihiPT09cilyZXR1cm4gcTsrK3J9dGhyb3cgQS5iKEEu -Q2YoYix0aGlzLCJpbmRleCIsbnVsbCxyKSl9LAoiWyIoYSl7cmV0dXJuIEEuRVAodGhpcywiKCIsIiki -KX19CkEuQW4ucHJvdG90eXBlPXt9CkEuTjMucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiJNYXBFbnRy -eSgiK0EuRWoodGhpcy5hKSsiOiAiK0EuRWoodGhpcy5iKSsiKSJ9fQpBLmM4LnByb3RvdHlwZT17Cmdt -KGEpe3JldHVybiBBLk1oLnByb3RvdHlwZS5nbS5jYWxsKHRoaXMsdGhpcyl9LAoiWyIoYSl7cmV0dXJu -Im51bGwifX0KQS5NaC5wcm90b3R5cGU9eyRpTWg6MSwKRE4oYSxiKXtyZXR1cm4gdGhpcz09PWJ9LApn -bShhKXtyZXR1cm4gQS5lUSh0aGlzKX0sCiJbIihhKXtyZXR1cm4iSW5zdGFuY2Ugb2YgJyIrQS5saCh0 -aGlzKSsiJyJ9LAplNyhhLGIpe3Quby5hKGIpCnRocm93IEEuYihBLmxyKHRoaXMsYi5nV2EoKSxiLmdu -ZCgpLGIuZ1ZtKCkpKX0sCnRvU3RyaW5nKCl7cmV0dXJuIHRoaXNbIlsiXSh0aGlzKX19CkEuWmQucHJv -dG90eXBlPXsKIlsiKGEpe3JldHVybiIifSwKJGlHejoxfQpBLk0ucHJvdG90eXBlPXsKZ2soYSl7cmV0 -dXJuIHRoaXMuYS5sZW5ndGh9LAoiWyIoYSl7dmFyIHM9dGhpcy5hCnJldHVybiBzLmNoYXJDb2RlQXQo -MCk9PTA/czpzfSwKJGlCTDoxfQpBLm4xLnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHMscixxLHAKdC5J -LmEoYSkKQS5uKGIpCnM9Qi54Qi5PWShiLCI9IikKaWYocz09PS0xKXtpZihiIT09IiIpYS5ZNSgwLEEu -a3UoYiwwLGIubGVuZ3RoLHRoaXMuYSwhMCksIiIpfWVsc2UgaWYocyE9PTApe3I9Qi54Qi5OaihiLDAs -cykKcT1CLnhCLnluKGIscysxKQpwPXRoaXMuYQphLlk1KDAsQS5rdShyLDAsci5sZW5ndGgscCwhMCks -QS5rdShxLDAscS5sZW5ndGgscCwhMCkpfXJldHVybiBhfSwKJFM6NDd9CkEuY1MucHJvdG90eXBlPXsK -JDIoYSxiKXt0aHJvdyBBLmIoQS5ycigiSWxsZWdhbCBJUHY0IGFkZHJlc3MsICIrYSx0aGlzLmEsYikp -fSwKJFM6MTl9CkEuVkMucHJvdG90eXBlPXsKJDIoYSxiKXt0aHJvdyBBLmIoQS5ycigiSWxsZWdhbCBJ -UHY2IGFkZHJlc3MsICIrYSx0aGlzLmEsYikpfSwKJFM6NTJ9CkEuSlQucHJvdG90eXBlPXsKJDIoYSxi -KXt2YXIgcwppZihiLWE+NCl0aGlzLmEuJDIoImFuIElQdjYgcGFydCBjYW4gb25seSBjb250YWluIGEg -bWF4aW11bSBvZiA0IGhleCBkaWdpdHMiLGEpCnM9QS5RQShCLnhCLk5qKHRoaXMuYixhLGIpLDE2KQpp -ZihzPDB8fHM+NjU1MzUpdGhpcy5hLiQyKCJlYWNoIHBhcnQgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2Yg -YDB4MC4uMHhGRkZGYCIsYSkKcmV0dXJuIHN9LAokUzoyMH0KQS5Ebi5wcm90b3R5cGU9ewpnbkQoKXt2 -YXIgcyxyLHEscCxvPXRoaXMsbj1vLncKaWYobj09PSQpe3M9by5hCnI9cy5sZW5ndGghPT0wPyIiK3Mr -IjoiOiIiCnE9by5jCnA9cT09bnVsbAppZighcHx8cz09PSJmaWxlIil7cz1yKyIvLyIKcj1vLmIKaWYo -ci5sZW5ndGghPT0wKXM9cytyKyJAIgppZighcClzKz1xCnI9by5kCmlmKHIhPW51bGwpcz1zKyI6IitB -LkVqKHIpfWVsc2Ugcz1yCnMrPW8uZQpyPW8uZgppZihyIT1udWxsKXM9cysiPyIrcgpyPW8ucgppZihy -IT1udWxsKXM9cysiIyIrcgppZihuIT09JClBLnBSKCJfdGV4dCIpCm49by53PXMuY2hhckNvZGVBdCgw -KT09MD9zOnN9cmV0dXJuIG59LApnRmooKXt2YXIgcyxyLHE9dGhpcyxwPXEueAppZihwPT09JCl7cz1x -LmUKaWYocy5sZW5ndGghPT0wJiZCLnhCLlcocywwKT09PTQ3KXM9Qi54Qi55bihzLDEpCnI9cy5sZW5n -dGg9PT0wP0IueEQ6QS5BRihuZXcgQS5sSihBLlFJKHMuc3BsaXQoIi8iKSx0LnMpLHQuZE8uYShBLlBI -KCkpLHQuZG8pLHQuTikKaWYocS54IT09JClBLnBSKCJwYXRoU2VnbWVudHMiKQpxLnNrRChyKQpwPXJ9 -cmV0dXJuIHB9LApnbShhKXt2YXIgcyxyPXRoaXMscT1yLnkKaWYocT09PSQpe3M9Qi54Qi5nbShyLmdu -RCgpKQppZihyLnkhPT0kKUEucFIoImhhc2hDb2RlIikKci55PXMKcT1zfXJldHVybiBxfSwKZ2hZKCl7 -dmFyIHMscixxPXRoaXMscD1xLnoKaWYocD09PSQpe3M9cS5mCnI9bmV3IEEuR2ooQS5XWChzPT1udWxs -PyIiOnMpLHQuZHcpCmlmKHEueiE9PSQpQS5wUigicXVlcnlQYXJhbWV0ZXJzIikKcS5zd2cocikKcD1y -fXJldHVybiBwfSwKZ2t1KCl7cmV0dXJuIHRoaXMuYn0sCmdKZihhKXt2YXIgcz10aGlzLmMKaWYocz09 -bnVsbClyZXR1cm4iIgppZihCLnhCLm4ocywiWyIpKXJldHVybiBCLnhCLk5qKHMsMSxzLmxlbmd0aC0x -KQpyZXR1cm4gc30sCmd0cChhKXt2YXIgcz10aGlzLmQKcmV0dXJuIHM9PW51bGw/QS53Syh0aGlzLmEp -OnN9LApndFAoKXt2YXIgcz10aGlzLmYKcmV0dXJuIHM9PW51bGw/IiI6c30sCmdLYSgpe3ZhciBzPXRo -aXMucgpyZXR1cm4gcz09bnVsbD8iIjpzfSwKaEIoYSl7dmFyIHM9dGhpcy5hCmlmKGEubGVuZ3RoIT09 -cy5sZW5ndGgpcmV0dXJuITEKcmV0dXJuIEEuYlUoYSxzLDApPj0wfSwKbm0oYSxiKXt2YXIgcyxyLHEs -cCxvLG4sbSxsLGssaj10aGlzCnQuYzkuYShiKQpzPWouYQpyPXM9PT0iZmlsZSIKcT1qLmIKcD1qLmQK -bz1qLmMKaWYoIShvIT1udWxsKSlvPXEubGVuZ3RoIT09MHx8cCE9bnVsbHx8cj8iIjpudWxsCm49ai5l -CmlmKCFyKW09byE9bnVsbCYmbi5sZW5ndGghPT0wCmVsc2UgbT0hMAppZihtJiYhQi54Qi5uKG4sIi8i -KSluPSIvIituCmw9bgprPUEubGUobnVsbCwwLDAsYikKcmV0dXJuIEEuQ2cocyxxLG8scCxsLGssai5y -KX0sCkpoKGEsYil7dmFyIHMscixxLHAsbyxuCmZvcihzPTAscj0wO0IueEIuUWkoYiwiLi4vIixyKTsp -e3IrPTM7KytzfXE9Qi54Qi5jbihhLCIvIikKd2hpbGUoITApe2lmKCEocT4wJiZzPjApKWJyZWFrCnA9 -Qi54Qi5QayhhLCIvIixxLTEpCmlmKHA8MClicmVhawpvPXEtcApuPW8hPT0yCmlmKCFufHxvPT09Mylp -ZihCLnhCLk8oYSxwKzEpPT09NDYpbj0hbnx8Qi54Qi5PKGEscCsyKT09PTQ2CmVsc2Ugbj0hMQplbHNl -IG49ITEKaWYobilicmVhazstLXMKcT1wfXJldHVybiBCLnhCLmk3KGEscSsxLG51bGwsQi54Qi55bihi -LHItMypzKSl9LApaSShhKXtyZXR1cm4gdGhpcy5tUyhBLmhLKGEpKX0sCm1TKGEpe3ZhciBzLHIscSxw -LG8sbixtLGwsayxqLGk9dGhpcyxoPW51bGwKaWYoYS5nRmkoKS5sZW5ndGghPT0wKXtzPWEuZ0ZpKCkK -aWYoYS5nY2ooKSl7cj1hLmdrdSgpCnE9YS5nSmYoYSkKcD1hLmd4QSgpP2EuZ3RwKGEpOmh9ZWxzZXtw -PWgKcT1wCnI9IiJ9bz1BLnhlKGEuZ0lpKGEpKQpuPWEuZ1FEKCk/YS5ndFAoKTpofWVsc2V7cz1pLmEK -aWYoYS5nY2ooKSl7cj1hLmdrdSgpCnE9YS5nSmYoYSkKcD1BLndCKGEuZ3hBKCk/YS5ndHAoYSk6aCxz -KQpvPUEueGUoYS5nSWkoYSkpCm49YS5nUUQoKT9hLmd0UCgpOmh9ZWxzZXtyPWkuYgpxPWkuYwpwPWku -ZApvPWkuZQppZihhLmdJaShhKT09PSIiKW49YS5nUUQoKT9hLmd0UCgpOmkuZgplbHNle209QS51aihp -LG8pCmlmKG0+MCl7bD1CLnhCLk5qKG8sMCxtKQpvPWEuZ3RUKCk/bCtBLnhlKGEuZ0lpKGEpKTpsK0Eu -eGUoaS5KaChCLnhCLnluKG8sbC5sZW5ndGgpLGEuZ0lpKGEpKSl9ZWxzZSBpZihhLmd0VCgpKW89QS54 -ZShhLmdJaShhKSkKZWxzZSBpZihvLmxlbmd0aD09PTApaWYocT09bnVsbClvPXMubGVuZ3RoPT09MD9h -LmdJaShhKTpBLnhlKGEuZ0lpKGEpKQplbHNlIG89QS54ZSgiLyIrYS5nSWkoYSkpCmVsc2V7az1pLkpo -KG8sYS5nSWkoYSkpCmo9cy5sZW5ndGg9PT0wCmlmKCFqfHxxIT1udWxsfHxCLnhCLm4obywiLyIpKW89 -QS54ZShrKQplbHNlIG89QS53RihrLCFqfHxxIT1udWxsKX1uPWEuZ1FEKCk/YS5ndFAoKTpofX19cmV0 -dXJuIEEuQ2cocyxyLHEscCxvLG4sYS5nWjgoKT9hLmdLYSgpOmgpfSwKZ2NqKCl7cmV0dXJuIHRoaXMu -YyE9bnVsbH0sCmd4QSgpe3JldHVybiB0aGlzLmQhPW51bGx9LApnUUQoKXtyZXR1cm4gdGhpcy5mIT1u -dWxsfSwKZ1o4KCl7cmV0dXJuIHRoaXMuciE9bnVsbH0sCmd0VCgpe3JldHVybiBCLnhCLm4odGhpcy5l -LCIvIil9LAp0NCgpe3ZhciBzLHI9dGhpcyxxPXIuYQppZihxIT09IiImJnEhPT0iZmlsZSIpdGhyb3cg -QS5iKEEuTDQoIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSAiK3ErIiBVUkkiKSkKcT1y -LmYKaWYoKHE9PW51bGw/IiI6cSkhPT0iIil0aHJvdyBBLmIoQS5MNCh1LmkpKQpxPXIucgppZigocT09 -bnVsbD8iIjpxKSE9PSIiKXRocm93IEEuYihBLkw0KHUubCkpCnE9JC53USgpCmlmKHEpcT1BLm1uKHIp -CmVsc2V7aWYoci5jIT1udWxsJiZyLmdKZihyKSE9PSIiKUEudihBLkw0KHUuaikpCnM9ci5nRmooKQpB -LmtFKHMsITEpCnE9QS5sKEIueEIubihyLmUsIi8iKT8iIisiLyI6IiIscywiLyIpCnE9cS5jaGFyQ29k -ZUF0KDApPT0wP3E6cX1yZXR1cm4gcX0sCiJbIihhKXtyZXR1cm4gdGhpcy5nbkQoKX0sCkROKGEsYil7 -dmFyIHMscixxPXRoaXMKaWYoYj09bnVsbClyZXR1cm4hMQppZihxPT09YilyZXR1cm4hMAppZih0LmRE -LmIoYikpaWYocS5hPT09Yi5nRmkoKSlpZihxLmMhPW51bGw9PT1iLmdjaigpKWlmKHEuYj09PWIuZ2t1 -KCkpaWYocS5nSmYocSk9PT1iLmdKZihiKSlpZihxLmd0cChxKT09PWIuZ3RwKGIpKWlmKHEuZT09PWIu -Z0lpKGIpKXtzPXEuZgpyPXM9PW51bGwKaWYoIXI9PT1iLmdRRCgpKXtpZihyKXM9IiIKaWYocz09PWIu -Z3RQKCkpe3M9cS5yCnI9cz09bnVsbAppZighcj09PWIuZ1o4KCkpe2lmKHIpcz0iIgpzPXM9PT1iLmdL -YSgpfWVsc2Ugcz0hMX1lbHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMQplbHNlIHM9ITEKZWxzZSBz -PSExCmVsc2Ugcz0hMQplbHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ugcz0hMQpyZXR1cm4gc30sCnNrRChh -KXt0aGlzLng9dC5hLmEoYSl9LApzd2coYSl7dGhpcy56PXQuSS5hKGEpfSwKJGlpRDoxLApnRmkoKXty -ZXR1cm4gdGhpcy5hfSwKZ0lpKGEpe3JldHVybiB0aGlzLmV9fQpBLlJaLnByb3RvdHlwZT17CiQxKGEp -e3JldHVybiBBLmVQKEIuWkosQS5uKGEpLEIueE0sITEpfSwKJFM6Mn0KQS5NRS5wcm90b3R5cGU9ewok -MihhLGIpe3ZhciBzPXRoaXMuYixyPXRoaXMuYQpzLmErPXIuYQpyLmE9IiYiCnI9cy5hKz1BLmVQKEIu -RjMsYSxCLnhNLCEwKQppZihiIT1udWxsJiZiLmxlbmd0aCE9PTApe3MuYT1yKyI9IgpzLmErPUEuZVAo -Qi5GMyxiLEIueE0sITApfX0sCiRTOjIyfQpBLnk1LnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHMscgpB -Lm4oYSkKaWYoYj09bnVsbHx8dHlwZW9mIGI9PSJzdHJpbmciKXRoaXMuYS4kMihhLEEuayhiKSkKZWxz -ZSBmb3Iocz1KLklUKHQuay5hKGIpKSxyPXRoaXMuYTtzLkcoKTspci4kMihhLEEubihzLmdsKCkpKX0s -CiRTOjExfQpBLlBFLnByb3RvdHlwZT17CmdsUigpe3ZhciBzLHIscSxwLG89dGhpcyxuPW51bGwsbT1v -LmMKaWYobT09bnVsbCl7bT1vLmIKaWYoMD49bS5sZW5ndGgpcmV0dXJuIEEuT0gobSwwKQpzPW8uYQpt -PW1bMF0rMQpyPUIueEIuWFUocywiPyIsbSkKcT1zLmxlbmd0aAppZihyPj0wKXtwPUEuUEkocyxyKzEs -cSxCLlZDLCExKQpxPXJ9ZWxzZSBwPW4KbT1vLmM9bmV3IEEucWUoImRhdGEiLCIiLG4sbixBLlBJKHMs -bSxxLEIuV2QsITEpLHAsbil9cmV0dXJuIG19LAoiWyIoYSl7dmFyIHMscj10aGlzLmIKaWYoMD49ci5s -ZW5ndGgpcmV0dXJuIEEuT0gociwwKQpzPXRoaXMuYQpyZXR1cm4gclswXT09PS0xPyJkYXRhOiIrczpz -fX0KQS55SS5wcm90b3R5cGU9ewokMihhLGIpe3ZhciBzPXRoaXMuYQppZighKGE8cy5sZW5ndGgpKXJl -dHVybiBBLk9IKHMsYSkKcz1zW2FdCkIuTkEuZHUocywwLDk2LGIpCnJldHVybiBzfSwKJFM6MjN9CkEu -YzYucHJvdG90eXBlPXsKJDMoYSxiLGMpe3ZhciBzLHIscQpmb3Iocz1iLmxlbmd0aCxyPTA7cjxzOysr -cil7cT1CLnhCLlcoYixyKV45NgppZighKHE8OTYpKXJldHVybiBBLk9IKGEscSkKYVtxXT1jfX0sCiRT -OjEyfQpBLnFkLnByb3RvdHlwZT17CiQzKGEsYixjKXt2YXIgcyxyLHEKZm9yKHM9Qi54Qi5XKGIsMCks -cj1CLnhCLlcoYiwxKTtzPD1yOysrcyl7cT0oc145Nik+Pj4wCmlmKCEocTw5NikpcmV0dXJuIEEuT0go -YSxxKQphW3FdPWN9fSwKJFM6MTJ9CkEuVWYucHJvdG90eXBlPXsKZ2NqKCl7cmV0dXJuIHRoaXMuYz4w -fSwKZ3hBKCl7cmV0dXJuIHRoaXMuYz4wJiZ0aGlzLmQrMTx0aGlzLmV9LApnUUQoKXtyZXR1cm4gdGhp -cy5mPHRoaXMucn0sCmdaOCgpe3JldHVybiB0aGlzLnI8dGhpcy5hLmxlbmd0aH0sCmd0VCgpe3JldHVy -biBCLnhCLlFpKHRoaXMuYSwiLyIsdGhpcy5lKX0sCmdGaSgpe3ZhciBzPXRoaXMudwpyZXR1cm4gcz09 -bnVsbD90aGlzLnc9dGhpcy5VMigpOnN9LApVMigpe3ZhciBzLHI9dGhpcyxxPXIuYgppZihxPD0wKXJl -dHVybiIiCnM9cT09PTQKaWYocyYmQi54Qi5uKHIuYSwiaHR0cCIpKXJldHVybiJodHRwIgppZihxPT09 -NSYmQi54Qi5uKHIuYSwiaHR0cHMiKSlyZXR1cm4iaHR0cHMiCmlmKHMmJkIueEIubihyLmEsImZpbGUi -KSlyZXR1cm4iZmlsZSIKaWYocT09PTcmJkIueEIubihyLmEsInBhY2thZ2UiKSlyZXR1cm4icGFja2Fn -ZSIKcmV0dXJuIEIueEIuTmooci5hLDAscSl9LApna3UoKXt2YXIgcz10aGlzLmMscj10aGlzLmIrMwpy -ZXR1cm4gcz5yP0IueEIuTmoodGhpcy5hLHIscy0xKToiIn0sCmdKZihhKXt2YXIgcz10aGlzLmMKcmV0 -dXJuIHM+MD9CLnhCLk5qKHRoaXMuYSxzLHRoaXMuZCk6IiJ9LApndHAoYSl7dmFyIHMscj10aGlzCmlm -KHIuZ3hBKCkpcmV0dXJuIEEuUUEoQi54Qi5OaihyLmEsci5kKzEsci5lKSxudWxsKQpzPXIuYgppZihz -PT09NCYmQi54Qi5uKHIuYSwiaHR0cCIpKXJldHVybiA4MAppZihzPT09NSYmQi54Qi5uKHIuYSwiaHR0 -cHMiKSlyZXR1cm4gNDQzCnJldHVybiAwfSwKZ0lpKGEpe3JldHVybiBCLnhCLk5qKHRoaXMuYSx0aGlz -LmUsdGhpcy5mKX0sCmd0UCgpe3ZhciBzPXRoaXMuZixyPXRoaXMucgpyZXR1cm4gczxyP0IueEIuTmoo -dGhpcy5hLHMrMSxyKToiIn0sCmdLYSgpe3ZhciBzPXRoaXMucixyPXRoaXMuYQpyZXR1cm4gczxyLmxl -bmd0aD9CLnhCLnluKHIscysxKToiIn0sCmdGaigpe3ZhciBzLHIscT10aGlzLmUscD10aGlzLmYsbz10 -aGlzLmEKaWYoQi54Qi5RaShvLCIvIixxKSkrK3EKaWYocT09PXApcmV0dXJuIEIueEQKcz1BLlFJKFtd -LHQucykKZm9yKHI9cTtyPHA7KytyKWlmKEIueEIuTyhvLHIpPT09NDcpe0IuTm0uaShzLEIueEIuTmoo -byxxLHIpKQpxPXIrMX1CLk5tLmkocyxCLnhCLk5qKG8scSxwKSkKcmV0dXJuIEEuQUYocyx0Lk4pfSwK -Z2hZKCl7aWYodGhpcy5mPj10aGlzLnIpcmV0dXJuIEIuQ00KcmV0dXJuIG5ldyBBLkdqKEEuV1godGhp -cy5ndFAoKSksdC5kdyl9LAprWChhKXt2YXIgcz10aGlzLmQrMQpyZXR1cm4gcythLmxlbmd0aD09PXRo -aXMuZSYmQi54Qi5RaSh0aGlzLmEsYSxzKX0sCk45KCl7dmFyIHM9dGhpcyxyPXMucixxPXMuYQppZihy -Pj1xLmxlbmd0aClyZXR1cm4gcwpyZXR1cm4gbmV3IEEuVWYoQi54Qi5OaihxLDAscikscy5iLHMuYyxz -LmQscy5lLHMuZixyLHMudyl9LApubShhLGIpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGk9dGhpcyxo -PW51bGwKdC5jOS5hKGIpCnM9aS5nRmkoKQpyPXM9PT0iZmlsZSIKcT1pLmMKcD1xPjA/Qi54Qi5Oaihp -LmEsaS5iKzMscSk6IiIKbz1pLmd4QSgpP2kuZ3RwKGkpOmgKcT1pLmMKaWYocT4wKW49Qi54Qi5Oaihp -LmEscSxpLmQpCmVsc2Ugbj1wLmxlbmd0aCE9PTB8fG8hPW51bGx8fHI/IiI6aApxPWkuYQptPUIueEIu -TmoocSxpLmUsaS5mKQppZighcilsPW4hPW51bGwmJm0ubGVuZ3RoIT09MAplbHNlIGw9ITAKaWYobCYm -IUIueEIubihtLCIvIikpbT0iLyIrbQprPUEubGUoaCwwLDAsYikKbD1pLnIKaj1sPHEubGVuZ3RoP0Iu -eEIueW4ocSxsKzEpOmgKcmV0dXJuIEEuQ2cocyxwLG4sbyxtLGssail9LApaSShhKXtyZXR1cm4gdGhp -cy5tUyhBLmhLKGEpKX0sCm1TKGEpe2lmKGEgaW5zdGFuY2VvZiBBLlVmKXJldHVybiB0aGlzLnUxKHRo -aXMsYSkKcmV0dXJuIHRoaXMuUmUoKS5tUyhhKX0sCnUxKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbCxr -LGosaSxoLGcsZixlLGQsYz1iLmIKaWYoYz4wKXJldHVybiBiCnM9Yi5jCmlmKHM+MCl7cj1hLmIKaWYo -cjw9MClyZXR1cm4gYgpxPXI9PT00CmlmKHEmJkIueEIubihhLmEsImZpbGUiKSlwPWIuZSE9PWIuZgpl -bHNlIGlmKHEmJkIueEIubihhLmEsImh0dHAiKSlwPSFiLmtYKCI4MCIpCmVsc2UgcD0hKHI9PT01JiZC -LnhCLm4oYS5hLCJodHRwcyIpKXx8IWIua1goIjQ0MyIpCmlmKHApe289cisxCnJldHVybiBuZXcgQS5V -ZihCLnhCLk5qKGEuYSwwLG8pK0IueEIueW4oYi5hLGMrMSkscixzK28sYi5kK28sYi5lK28sYi5mK28s -Yi5yK28sYS53KX1lbHNlIHJldHVybiB0aGlzLlJlKCkubVMoYil9bj1iLmUKYz1iLmYKaWYobj09PWMp -e3M9Yi5yCmlmKGM8cyl7cj1hLmYKbz1yLWMKcmV0dXJuIG5ldyBBLlVmKEIueEIuTmooYS5hLDAscikr -Qi54Qi55bihiLmEsYyksYS5iLGEuYyxhLmQsYS5lLGMrbyxzK28sYS53KX1jPWIuYQppZihzPGMubGVu -Z3RoKXtyPWEucgpyZXR1cm4gbmV3IEEuVWYoQi54Qi5OaihhLmEsMCxyKStCLnhCLnluKGMscyksYS5i -LGEuYyxhLmQsYS5lLGEuZixzKyhyLXMpLGEudyl9cmV0dXJuIGEuTjkoKX1zPWIuYQppZihCLnhCLlFp -KHMsIi8iLG4pKXttPWEuZQpsPUEuUngodGhpcykKaz1sPjA/bDptCm89ay1uCnJldHVybiBuZXcgQS5V -ZihCLnhCLk5qKGEuYSwwLGspK0IueEIueW4ocyxuKSxhLmIsYS5jLGEuZCxtLGMrbyxiLnIrbyxhLncp -fWo9YS5lCmk9YS5mCmlmKGo9PT1pJiZhLmM+MCl7Zm9yKDtCLnhCLlFpKHMsIi4uLyIsbik7KW4rPTMK -bz1qLW4rMQpyZXR1cm4gbmV3IEEuVWYoQi54Qi5OaihhLmEsMCxqKSsiLyIrQi54Qi55bihzLG4pLGEu -YixhLmMsYS5kLGosYytvLGIucitvLGEudyl9aD1hLmEKbD1BLlJ4KHRoaXMpCmlmKGw+PTApZz1sCmVs -c2UgZm9yKGc9ajtCLnhCLlFpKGgsIi4uLyIsZyk7KWcrPTMKZj0wCndoaWxlKCEwKXtlPW4rMwppZigh -KGU8PWMmJkIueEIuUWkocywiLi4vIixuKSkpYnJlYWs7KytmCm49ZX1mb3IoZD0iIjtpPmc7KXstLWkK -aWYoQi54Qi5PKGgsaSk9PT00Nyl7aWYoZj09PTApe2Q9Ii8iCmJyZWFrfS0tZgpkPSIvIn19aWYoaT09 -PWcmJmEuYjw9MCYmIUIueEIuUWkoaCwiLyIsaikpe24tPWYqMwpkPSIifW89aS1uK2QubGVuZ3RoCnJl -dHVybiBuZXcgQS5VZihCLnhCLk5qKGgsMCxpKStkK0IueEIueW4ocyxuKSxhLmIsYS5jLGEuZCxqLGMr -byxiLnIrbyxhLncpfSwKdDQoKXt2YXIgcyxyLHE9dGhpcyxwPXEuYgppZihwPj0wKXtzPSEocD09PTQm -JkIueEIubihxLmEsImZpbGUiKSkKcD1zfWVsc2UgcD0hMQppZihwKXRocm93IEEuYihBLkw0KCJDYW5u -b3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgIitxLmdGaSgpKyIgVVJJIikpCnA9cS5mCnM9cS5h -CmlmKHA8cy5sZW5ndGgpe2lmKHA8cS5yKXRocm93IEEuYihBLkw0KHUuaSkpCnRocm93IEEuYihBLkw0 -KHUubCkpfXI9JC53USgpCmlmKHIpcD1BLm1uKHEpCmVsc2V7aWYocS5jPHEuZClBLnYoQS5MNCh1Lmop -KQpwPUIueEIuTmoocyxxLmUscCl9cmV0dXJuIHB9LApnbShhKXt2YXIgcz10aGlzLngKcmV0dXJuIHM9 -PW51bGw/dGhpcy54PUIueEIuZ20odGhpcy5hKTpzfSwKRE4oYSxiKXtpZihiPT1udWxsKXJldHVybiEx -CmlmKHRoaXM9PT1iKXJldHVybiEwCnJldHVybiB0LmRELmIoYikmJnRoaXMuYT09PWJbIlsiXSgwKX0s -ClJlKCl7dmFyIHM9dGhpcyxyPW51bGwscT1zLmdGaSgpLHA9cy5na3UoKSxvPXMuYz4wP3MuZ0pmKHMp -OnIsbj1zLmd4QSgpP3MuZ3RwKHMpOnIsbT1zLmEsbD1zLmYsaz1CLnhCLk5qKG0scy5lLGwpLGo9cy5y -Cmw9bDxqP3MuZ3RQKCk6cgpyZXR1cm4gQS5DZyhxLHAsbyxuLGssbCxqPG0ubGVuZ3RoP3MuZ0thKCk6 -cil9LAoiWyIoYSl7cmV0dXJuIHRoaXMuYX0sCiRpaUQ6MX0KQS5xZS5wcm90b3R5cGU9e30KQS5xRS5w -cm90b3R5cGU9e30KQS5HaC5wcm90b3R5cGU9ewpzTFUoYSxiKXthLmhyZWY9Yn0sCiJbIihhKXtyZXR1 -cm4gU3RyaW5nKGEpfSwKJGlHaDoxfQpBLmZZLnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4gU3RyaW5n -KGEpfX0KQS5yWi5wcm90b3R5cGU9eyRpclo6MX0KQS5Bei5wcm90b3R5cGU9eyRpQXo6MX0KQS5RUC5w -cm90b3R5cGU9eyRpUVA6MX0KQS5ueC5wcm90b3R5cGU9ewpnayhhKXtyZXR1cm4gYS5sZW5ndGh9fQpB -Lm9KLnByb3RvdHlwZT17CmdrKGEpe3JldHVybiBhLmxlbmd0aH19CkEuaWQucHJvdG90eXBlPXt9CkEu -UUYucHJvdG90eXBlPXt9CkEuTmgucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiBTdHJpbmcoYSl9fQpB -LmFlLnByb3RvdHlwZT17CkRjKGEsYil7cmV0dXJuIGEuY3JlYXRlSFRNTERvY3VtZW50KGIpfX0KQS5J -Qi5wcm90b3R5cGU9ewoiWyIoYSl7dmFyIHMscixxLHA9YS5sZWZ0CnAudG9TdHJpbmcKcz1hLnRvcApz -LnRvU3RyaW5nCnI9YS53aWR0aApyLnRvU3RyaW5nCnE9YS5oZWlnaHQKcS50b1N0cmluZwpyZXR1cm4i -UmVjdGFuZ2xlICgiK0EuRWoocCkrIiwgIitBLkVqKHMpKyIpICIrQS5FaihyKSsiIHggIitBLkVqKHEp -fSwKRE4oYSxiKXt2YXIgcyxyCmlmKGI9PW51bGwpcmV0dXJuITEKaWYodC5xLmIoYikpe3M9YS5sZWZ0 -CnMudG9TdHJpbmcKcj1iLmxlZnQKci50b1N0cmluZwppZihzPT09cil7cz1hLnRvcApzLnRvU3RyaW5n -CnI9Yi50b3AKci50b1N0cmluZwppZihzPT09cil7cz1hLndpZHRoCnMudG9TdHJpbmcKcj1iLndpZHRo -CnIudG9TdHJpbmcKaWYocz09PXIpe3M9YS5oZWlnaHQKcy50b1N0cmluZwpyPWIuaGVpZ2h0CnIudG9T -dHJpbmcKcj1zPT09cgpzPXJ9ZWxzZSBzPSExfWVsc2Ugcz0hMX1lbHNlIHM9ITF9ZWxzZSBzPSExCnJl -dHVybiBzfSwKZ20oYSl7dmFyIHMscixxLHA9YS5sZWZ0CnAudG9TdHJpbmcKcz1hLnRvcApzLnRvU3Ry -aW5nCnI9YS53aWR0aApyLnRvU3RyaW5nCnE9YS5oZWlnaHQKcS50b1N0cmluZwpyZXR1cm4gQS5mNShw -LHMscixxKX0sCiRpdG46MX0KQS5uNy5wcm90b3R5cGU9ewpnayhhKXtyZXR1cm4gYS5sZW5ndGh9fQpB -Lnd6LnByb3RvdHlwZT17CmdrKGEpe3JldHVybiB0aGlzLmEubGVuZ3RofSwKcShhLGIpe3ZhciBzCkEu -SVooYikKcz10aGlzLmEKaWYoIShiPj0wJiZiPHMubGVuZ3RoKSlyZXR1cm4gQS5PSChzLGIpCnJldHVy -biB0aGlzLiR0aS5jLmEoc1tiXSl9LApZNShhLGIsYyl7dGhpcy4kdGkuYy5hKGMpCnRocm93IEEuYihB -Lkw0KCJDYW5ub3QgbW9kaWZ5IGxpc3QiKSl9fQpBLmN2LnByb3RvdHlwZT17CmdRZyhhKXtyZXR1cm4g -bmV3IEEuaTcoYSl9LApnUChhKXtyZXR1cm4gbmV3IEEuSTQoYSl9LApzUChhLGIpe3ZhciBzCnQuTy5h -KGIpCnM9dGhpcy5nUChhKQpzLlYxKDApCnMuRlYoMCxiKX0sCiJbIihhKXtyZXR1cm4gYS5sb2NhbE5h -bWV9LApGRihhKXt2YXIgcz0hIWEuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZAppZihzKWEuc2Nyb2xsSW50 -b1ZpZXdJZk5lZWRlZCgpCmVsc2UgYS5zY3JvbGxJbnRvVmlldygpfSwKbnooYSxiLGMsZCxlKXt2YXIg -cyxyPXRoaXMucjYoYSxjLGQsZSkKc3dpdGNoKGIudG9Mb3dlckNhc2UoKSl7Y2FzZSJiZWZvcmViZWdp -biI6cz1hLnBhcmVudE5vZGUKcy50b1N0cmluZwpKLkVoKHMscixhKQpicmVhawpjYXNlImFmdGVyYmVn -aW4iOnM9YS5jaGlsZE5vZGVzCnRoaXMubUsoYSxyLHMubGVuZ3RoPjA/c1swXTpudWxsKQpicmVhawpj -YXNlImJlZm9yZWVuZCI6YS5hcHBlbmRDaGlsZChyKQpicmVhawpjYXNlImFmdGVyZW5kIjpzPWEucGFy -ZW50Tm9kZQpzLnRvU3RyaW5nCkouRWgocyxyLGEubmV4dFNpYmxpbmcpCmJyZWFrCmRlZmF1bHQ6QS52 -KEEueFkoIkludmFsaWQgcG9zaXRpb24gIitiLG51bGwpKX19LApyNihhLGIsYyxkKXt2YXIgcyxyLHEs -cAppZihjPT1udWxsKXtpZihkPT1udWxsKXtzPSQubHQKaWYocz09bnVsbCl7cz1BLlFJKFtdLHQuRCkK -cj1uZXcgQS52RChzKQpCLk5tLmkocyxBLlR3KG51bGwpKQpCLk5tLmkocyxBLkJsKCkpCiQubHQ9cgpk -PXJ9ZWxzZSBkPXN9cz0kLkVVCmlmKHM9PW51bGwpe3M9bmV3IEEuS28oZCkKJC5FVT1zCmM9c31lbHNl -e3MuYT1kCmM9c319ZWxzZSBpZihkIT1udWxsKXRocm93IEEuYihBLnhZKCJ2YWxpZGF0b3IgY2FuIG9u -bHkgYmUgcGFzc2VkIGlmIHRyZWVTYW5pdGl6ZXIgaXMgbnVsbCIsbnVsbCkpCmlmKCQueG89PW51bGwp -e3M9ZG9jdW1lbnQKcj1zLmltcGxlbWVudGF0aW9uCnIudG9TdHJpbmcKcj1CLm1ILkRjKHIsIiIpCiQu -eG89cgokLkJPPXIuY3JlYXRlUmFuZ2UoKQpyPSQueG8uY3JlYXRlRWxlbWVudCgiYmFzZSIpCnQuY1Iu -YShyKQpzPXMuYmFzZVVSSQpzLnRvU3RyaW5nCnIuaHJlZj1zCiQueG8uaGVhZC5hcHBlbmRDaGlsZChy -KX1zPSQueG8KaWYocy5ib2R5PT1udWxsKXtyPXMuY3JlYXRlRWxlbWVudCgiYm9keSIpCkIuQlouc0dT -KHMsdC5yLmEocikpfXM9JC54bwppZih0LnIuYihhKSl7cz1zLmJvZHkKcy50b1N0cmluZwpxPXN9ZWxz -ZXtzLnRvU3RyaW5nCnE9cy5jcmVhdGVFbGVtZW50KGEudGFnTmFtZSkKJC54by5ib2R5LmFwcGVuZENo -aWxkKHEpfWlmKCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90b3R5 -cGUmJiFCLk5tLnRnKEIuU3EsYS50YWdOYW1lKSl7JC5CTy5zZWxlY3ROb2RlQ29udGVudHMocSkKcz0k -LkJPCnMudG9TdHJpbmcKcD1zLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChiPT1udWxsPyJudWxsIjpi -KX1lbHNle0oud2YocSxiKQpwPSQueG8uY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCmZvcig7cz1xLmZp -cnN0Q2hpbGQscyE9bnVsbDspcC5hcHBlbmRDaGlsZChzKX1pZihxIT09JC54by5ib2R5KUouTHQocSkK -Yy5QbihwKQpkb2N1bWVudC5hZG9wdE5vZGUocCkKcmV0dXJuIHB9LApBSChhLGIsYyl7cmV0dXJuIHRo -aXMucjYoYSxiLGMsbnVsbCl9LApzaGYoYSxiKXt0aGlzLllDKGEsYil9LApwayhhLGIsYyl7dGhpcy5z -YTQoYSxudWxsKQphLmFwcGVuZENoaWxkKHRoaXMucjYoYSxiLG51bGwsYykpfSwKWUMoYSxiKXtyZXR1 -cm4gdGhpcy5wayhhLGIsbnVsbCl9LApzUk4oYSxiKXthLmlubmVySFRNTD1ifSwKZ25zKGEpe3JldHVy -biBhLnRhZ05hbWV9LApnVmwoYSl7cmV0dXJuIG5ldyBBLkNxKGEsImNsaWNrIiwhMSx0LlEpfSwKJGlj -djoxfQpBLkN2LnByb3RvdHlwZT17CiQxKGEpe3JldHVybiB0LmguYih0LkEuYShhKSl9LAokUzoyNX0K -QS5lYS5wcm90b3R5cGU9eyRpZWE6MX0KQS5EMC5wcm90b3R5cGU9ewpPbihhLGIsYyxkKXt0LmJ3LmEo -YykKaWYoYyE9bnVsbCl0aGlzLnYoYSxiLGMsZCl9LApCKGEsYixjKXtyZXR1cm4gdGhpcy5PbihhLGIs -YyxudWxsKX0sCnYoYSxiLGMsZCl7cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcihiLEEudFIodC5idy5h -KGMpLDEpLGQpfSwKJGlEMDoxfQpBLmhILnByb3RvdHlwZT17JGloSDoxfQpBLmg0LnByb3RvdHlwZT17 -CmdrKGEpe3JldHVybiBhLmxlbmd0aH19CkEuYnIucHJvdG90eXBlPXsKZ2soYSl7cmV0dXJuIGEubGVu -Z3RofX0KQS5WYi5wcm90b3R5cGU9ewpzR1MoYSxiKXthLmJvZHk9Yn19CkEuZkoucHJvdG90eXBlPXsK -ZW8oYSxiLGMsZCl7cmV0dXJuIGEub3BlbihiLGMsITApfSwKJGlmSjoxfQpBLndhLnByb3RvdHlwZT17 -fQpBLlNnLnByb3RvdHlwZT17JGlTZzoxfQpBLnU4LnByb3RvdHlwZT17CmdEcihhKXtpZigib3JpZ2lu -IiBpbiBhKXJldHVybiBhLm9yaWdpbgpyZXR1cm4gYS5wcm90b2NvbCsiLy8iK2EuaG9zdH0sCiJbIihh -KXtyZXR1cm4gU3RyaW5nKGEpfSwKJGl1ODoxfQpBLkFqLnByb3RvdHlwZT17JGlBajoxfQpBLmU3LnBy -b3RvdHlwZT17CmdyOChhKXt2YXIgcz10aGlzLmEscj1zLmNoaWxkTm9kZXMubGVuZ3RoCmlmKHI9PT0w -KXRocm93IEEuYihBLlBWKCJObyBlbGVtZW50cyIpKQppZihyPjEpdGhyb3cgQS5iKEEuUFYoIk1vcmUg -dGhhbiBvbmUgZWxlbWVudCIpKQpzPXMuZmlyc3RDaGlsZApzLnRvU3RyaW5nCnJldHVybiBzfSwKRlYo -YSxiKXt2YXIgcyxyLHEscCxvCnQuZWguYShiKQppZihiIGluc3RhbmNlb2YgQS5lNyl7cz1iLmEKcj10 -aGlzLmEKaWYocyE9PXIpZm9yKHE9cy5jaGlsZE5vZGVzLmxlbmd0aCxwPTA7cDxxOysrcCl7bz1zLmZp -cnN0Q2hpbGQKby50b1N0cmluZwpyLmFwcGVuZENoaWxkKG8pfXJldHVybn1mb3Iocz1iLmdBKGIpLHI9 -dGhpcy5hO3MuRygpOylyLmFwcGVuZENoaWxkKHMuZ2woKSl9LApZNShhLGIsYyl7dmFyIHMscgp0LkEu -YShjKQpzPXRoaXMuYQpyPXMuY2hpbGROb2RlcwppZighKGI+PTAmJmI8ci5sZW5ndGgpKXJldHVybiBB -Lk9IKHIsYikKcy5yZXBsYWNlQ2hpbGQoYyxyW2JdKX0sCmdBKGEpe3ZhciBzPXRoaXMuYS5jaGlsZE5v -ZGVzCnJldHVybiBuZXcgQS5XOShzLHMubGVuZ3RoLEEueksocykuQygiVzk8R20uRT4iKSl9LApnayhh -KXtyZXR1cm4gdGhpcy5hLmNoaWxkTm9kZXMubGVuZ3RofSwKcShhLGIpe3ZhciBzCkEuSVooYikKcz10 -aGlzLmEuY2hpbGROb2RlcwppZighKGI+PTAmJmI8cy5sZW5ndGgpKXJldHVybiBBLk9IKHMsYikKcmV0 -dXJuIHNbYl19fQpBLktWLnByb3RvdHlwZT17CnpCKGEpe3ZhciBzPWEucGFyZW50Tm9kZQppZihzIT1u -dWxsKXMucmVtb3ZlQ2hpbGQoYSl9LApENChhKXt2YXIgcwpmb3IoO3M9YS5maXJzdENoaWxkLHMhPW51 -bGw7KWEucmVtb3ZlQ2hpbGQocyl9LAoiWyIoYSl7dmFyIHM9YS5ub2RlVmFsdWUKcmV0dXJuIHM9PW51 -bGw/dGhpcy5VKGEpOnN9LApzYTQoYSxiKXthLnRleHRDb250ZW50PWJ9LAptSyhhLGIsYyl7cmV0dXJu -IGEuaW5zZXJ0QmVmb3JlKGIsYyl9LAokaUtWOjF9CkEuQkgucHJvdG90eXBlPXsKZ2soYSl7cmV0dXJu -IGEubGVuZ3RofSwKcShhLGIpe0EuSVooYikKaWYoYj4+PjAhPT1ifHxiPj1hLmxlbmd0aCl0aHJvdyBB -LmIoQS5DZihiLGEsbnVsbCxudWxsLG51bGwpKQpyZXR1cm4gYVtiXX0sClk1KGEsYixjKXt0LkEuYShj -KQp0aHJvdyBBLmIoQS5MNCgiQ2Fubm90IGFzc2lnbiBlbGVtZW50IG9mIGltbXV0YWJsZSBMaXN0LiIp -KX0sCmd0SChhKXtpZihhLmxlbmd0aD4wKXJldHVybiBhWzBdCnRocm93IEEuYihBLlBWKCJObyBlbGVt -ZW50cyIpKX0sCkUoYSxiKXtpZighKGI+PTAmJmI8YS5sZW5ndGgpKXJldHVybiBBLk9IKGEsYikKcmV0 -dXJuIGFbYl19LAokaWJROjEsCiRpWGo6MSwKJGljWDoxLAokaXpNOjF9CkEuU04ucHJvdG90eXBlPXt9 -CkEuZXcucHJvdG90eXBlPXskaWV3OjF9CkEubHAucHJvdG90eXBlPXsKZ2soYSl7cmV0dXJuIGEubGVu -Z3RofX0KQS5UYi5wcm90b3R5cGU9ewpyNihhLGIsYyxkKXt2YXIgcyxyCmlmKCJjcmVhdGVDb250ZXh0 -dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUpcmV0dXJuIHRoaXMuRFcoYSxiLGMs -ZCkKcz1BLlU5KCI8dGFibGU+IitBLkVqKGIpKyI8L3RhYmxlPiIsYyxkKQpyPWRvY3VtZW50LmNyZWF0 -ZURvY3VtZW50RnJhZ21lbnQoKQpuZXcgQS5lNyhyKS5GVigwLG5ldyBBLmU3KHMpKQpyZXR1cm4gcn19 -CkEuSXYucHJvdG90eXBlPXsKcjYoYSxiLGMsZCl7dmFyIHMscgppZigiY3JlYXRlQ29udGV4dHVhbEZy -YWdtZW50IiBpbiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlKXJldHVybiB0aGlzLkRXKGEsYixjLGQpCnM9 -ZG9jdW1lbnQKcj1zLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpzPW5ldyBBLmU3KEIuSWUucjYocy5j -cmVhdGVFbGVtZW50KCJ0YWJsZSIpLGIsYyxkKSkKcz1uZXcgQS5lNyhzLmdyOChzKSkKbmV3IEEuZTco -cikuRlYoMCxuZXcgQS5lNyhzLmdyOChzKSkpCnJldHVybiByfX0KQS5XUC5wcm90b3R5cGU9ewpyNihh -LGIsYyxkKXt2YXIgcyxyCmlmKCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5n -ZS5wcm90b3R5cGUpcmV0dXJuIHRoaXMuRFcoYSxiLGMsZCkKcz1kb2N1bWVudApyPXMuY3JlYXRlRG9j -dW1lbnRGcmFnbWVudCgpCnM9bmV3IEEuZTcoQi5JZS5yNihzLmNyZWF0ZUVsZW1lbnQoInRhYmxlIiks -YixjLGQpKQpuZXcgQS5lNyhyKS5GVigwLG5ldyBBLmU3KHMuZ3I4KHMpKSkKcmV0dXJuIHJ9fQpBLnlZ -LnByb3RvdHlwZT17CnBrKGEsYixjKXt2YXIgcyxyCnRoaXMuc2E0KGEsbnVsbCkKcz1hLmNvbnRlbnQK -cy50b1N0cmluZwpKLmJUKHMpCnI9dGhpcy5yNihhLGIsbnVsbCxjKQphLmNvbnRlbnQuYXBwZW5kQ2hp -bGQocil9LApZQyhhLGIpe3JldHVybiB0aGlzLnBrKGEsYixudWxsKX0sCiRpeVk6MX0KQS53Ni5wcm90 -b3R5cGU9e30KQS5LNS5wcm90b3R5cGU9ewpQbyhhLGIsYyl7dmFyIHM9QS5QMShhLm9wZW4oYixjKSkK -cmV0dXJuIHN9LApnbVcoYSl7cmV0dXJuIHQuRi5hKGEubG9jYXRpb24pfSwKdXMoYSxiKXtyZXR1cm4g -YS5jb25maXJtKGIpfSwKJGlLNToxLAokaXY2OjF9CkEuQ20ucHJvdG90eXBlPXskaUNtOjF9CkEuQ1Eu -cHJvdG90eXBlPXskaUNROjF9CkEudzQucHJvdG90eXBlPXsKIlsiKGEpe3ZhciBzLHIscSxwPWEubGVm -dApwLnRvU3RyaW5nCnM9YS50b3AKcy50b1N0cmluZwpyPWEud2lkdGgKci50b1N0cmluZwpxPWEuaGVp -Z2h0CnEudG9TdHJpbmcKcmV0dXJuIlJlY3RhbmdsZSAoIitBLkVqKHApKyIsICIrQS5FaihzKSsiKSAi -K0EuRWoocikrIiB4ICIrQS5FaihxKX0sCkROKGEsYil7dmFyIHMscgppZihiPT1udWxsKXJldHVybiEx -CmlmKHQucS5iKGIpKXtzPWEubGVmdApzLnRvU3RyaW5nCnI9Yi5sZWZ0CnIudG9TdHJpbmcKaWYocz09 -PXIpe3M9YS50b3AKcy50b1N0cmluZwpyPWIudG9wCnIudG9TdHJpbmcKaWYocz09PXIpe3M9YS53aWR0 -aApzLnRvU3RyaW5nCnI9Yi53aWR0aApyLnRvU3RyaW5nCmlmKHM9PT1yKXtzPWEuaGVpZ2h0CnMudG9T -dHJpbmcKcj1iLmhlaWdodApyLnRvU3RyaW5nCnI9cz09PXIKcz1yfWVsc2Ugcz0hMX1lbHNlIHM9ITF9 -ZWxzZSBzPSExfWVsc2Ugcz0hMQpyZXR1cm4gc30sCmdtKGEpe3ZhciBzLHIscSxwPWEubGVmdApwLnRv -U3RyaW5nCnM9YS50b3AKcy50b1N0cmluZwpyPWEud2lkdGgKci50b1N0cmluZwpxPWEuaGVpZ2h0CnEu -dG9TdHJpbmcKcmV0dXJuIEEuZjUocCxzLHIscSl9fQpBLnJoLnByb3RvdHlwZT17CmdrKGEpe3JldHVy -biBhLmxlbmd0aH0sCnEoYSxiKXtBLklaKGIpCmlmKGI+Pj4wIT09Ynx8Yj49YS5sZW5ndGgpdGhyb3cg -QS5iKEEuQ2YoYixhLG51bGwsbnVsbCxudWxsKSkKcmV0dXJuIGFbYl19LApZNShhLGIsYyl7dC5BLmEo -YykKdGhyb3cgQS5iKEEuTDQoIkNhbm5vdCBhc3NpZ24gZWxlbWVudCBvZiBpbW11dGFibGUgTGlzdC4i -KSl9LApFKGEsYil7aWYoIShiPj0wJiZiPGEubGVuZ3RoKSlyZXR1cm4gQS5PSChhLGIpCnJldHVybiBh -W2JdfSwKJGliUToxLAokaVhqOjEsCiRpY1g6MSwKJGl6TToxfQpBLmNmLnByb3RvdHlwZT17CksoYSxi -KXt2YXIgcyxyLHEscCxvLG4KdC5lQS5hKGIpCmZvcihzPXRoaXMuZ3ZjKCkscj1zLmxlbmd0aCxxPXRo -aXMuYSxwPTA7cDxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgwLEEubGspKHMpLCsrcCl7bz1zW3BdCm49 -cS5nZXRBdHRyaWJ1dGUobykKYi4kMihvLG49PW51bGw/QS5uKG4pOm4pfX0sCmd2Yygpe3ZhciBzLHIs -cSxwLG8sbixtPXRoaXMuYS5hdHRyaWJ1dGVzCm0udG9TdHJpbmcKcz1BLlFJKFtdLHQucykKZm9yKHI9 -bS5sZW5ndGgscT10Lmg5LHA9MDtwPHI7KytwKXtpZighKHA8bS5sZW5ndGgpKXJldHVybiBBLk9IKG0s -cCkKbz1xLmEobVtwXSkKaWYoby5uYW1lc3BhY2VVUkk9PW51bGwpe249by5uYW1lCm4udG9TdHJpbmcK -Qi5ObS5pKHMsbil9fXJldHVybiBzfSwKZ2wwKGEpe3JldHVybiB0aGlzLmd2YygpLmxlbmd0aD09PTB9 -fQpBLmk3LnByb3RvdHlwZT17Cng0KGEpe3ZhciBzPXRoaXMuYS5oYXNBdHRyaWJ1dGUoYSkKcmV0dXJu -IHN9LApxKGEsYil7cmV0dXJuIHRoaXMuYS5nZXRBdHRyaWJ1dGUoQS5uKGIpKX0sClk1KGEsYixjKXt0 -aGlzLmEuc2V0QXR0cmlidXRlKGIsYyl9LApnayhhKXtyZXR1cm4gdGhpcy5ndmMoKS5sZW5ndGh9fQpB -LlN5LnByb3RvdHlwZT17Cng0KGEpe3ZhciBzPXRoaXMuYS5hLmhhc0F0dHJpYnV0ZSgiZGF0YS0iK3Ro -aXMuT1UoYSkpCnJldHVybiBzfSwKcShhLGIpe3JldHVybiB0aGlzLmEuYS5nZXRBdHRyaWJ1dGUoImRh -dGEtIit0aGlzLk9VKEEubihiKSkpfSwKWTUoYSxiLGMpe3RoaXMuYS5hLnNldEF0dHJpYnV0ZSgiZGF0 -YS0iK3RoaXMuT1UoYiksYyl9LApLKGEsYil7dGhpcy5hLksoMCxuZXcgQS5LUyh0aGlzLHQuZUEuYShi -KSkpfSwKZ3ZjKCl7dmFyIHM9QS5RSShbXSx0LnMpCnRoaXMuYS5LKDAsbmV3IEEuQTModGhpcyxzKSkK -cmV0dXJuIHN9LApnayhhKXtyZXR1cm4gdGhpcy5ndmMoKS5sZW5ndGh9LApnbDAoYSl7cmV0dXJuIHRo -aXMuZ3ZjKCkubGVuZ3RoPT09MH0sCnhxKGEpe3ZhciBzLHIscT1BLlFJKGEuc3BsaXQoIi0iKSx0LnMp -CmZvcihzPTE7czxxLmxlbmd0aDsrK3Mpe3I9cVtzXQppZihyLmxlbmd0aD4wKUIuTm0uWTUocSxzLHJb -MF0udG9VcHBlckNhc2UoKStCLnhCLnluKHIsMSkpfXJldHVybiBCLk5tLkgocSwiIil9LApPVShhKXt2 -YXIgcyxyLHEscCxvCmZvcihzPWEubGVuZ3RoLHI9MCxxPSIiO3I8czsrK3Ipe3A9YVtyXQpvPXAudG9M -b3dlckNhc2UoKQpxPShwIT09byYmcj4wP3ErIi0iOnEpK299cmV0dXJuIHEuY2hhckNvZGVBdCgwKT09 -MD9xOnF9fQpBLktTLnByb3RvdHlwZT17CiQyKGEsYil7aWYoQi54Qi5uKGEsImRhdGEtIikpdGhpcy5i -LiQyKHRoaXMuYS54cShCLnhCLnluKGEsNSkpLGIpfSwKJFM6MTN9CkEuQTMucHJvdG90eXBlPXsKJDIo -YSxiKXtpZihCLnhCLm4oYSwiZGF0YS0iKSlCLk5tLmkodGhpcy5iLHRoaXMuYS54cShCLnhCLnluKGEs -NSkpKX0sCiRTOjEzfQpBLkk0LnByb3RvdHlwZT17CkQoKXt2YXIgcyxyLHEscCxvPUEuTHModC5OKQpm -b3Iocz10aGlzLmEuY2xhc3NOYW1lLnNwbGl0KCIgIikscj1zLmxlbmd0aCxxPTA7cTxyOysrcSl7cD1K -LlQwKHNbcV0pCmlmKHAubGVuZ3RoIT09MClvLmkoMCxwKX1yZXR1cm4gb30sClgoYSl7dGhpcy5hLmNs -YXNzTmFtZT10LkMuYShhKS5IKDAsIiAiKX0sCmdrKGEpe3JldHVybiB0aGlzLmEuY2xhc3NMaXN0Lmxl -bmd0aH0sCmdsMChhKXtyZXR1cm4gdGhpcy5hLmNsYXNzTGlzdC5sZW5ndGg9PT0wfSwKZ29yKGEpe3Jl -dHVybiB0aGlzLmEuY2xhc3NMaXN0Lmxlbmd0aCE9PTB9LApWMShhKXt0aGlzLmEuY2xhc3NOYW1lPSIi -fSwKdGcoYSxiKXt2YXIgcz10aGlzLmEuY2xhc3NMaXN0LmNvbnRhaW5zKGIpCnJldHVybiBzfSwKaShh -LGIpe3ZhciBzLHIKQS5uKGIpCnM9dGhpcy5hLmNsYXNzTGlzdApyPXMuY29udGFpbnMoYikKcy5hZGQo -YikKcmV0dXJuIXJ9LApSKGEsYil7dmFyIHMscixxCmlmKHR5cGVvZiBiPT0ic3RyaW5nIil7cz10aGlz -LmEuY2xhc3NMaXN0CnI9cy5jb250YWlucyhiKQpzLnJlbW92ZShiKQpxPXJ9ZWxzZSBxPSExCnJldHVy -biBxfSwKRlYoYSxiKXtBLlROKHRoaXMuYSx0Lk8uYShiKSl9fQpBLkZrLnByb3RvdHlwZT17fQpBLlJP -LnByb3RvdHlwZT17fQpBLkNxLnByb3RvdHlwZT17fQpBLnhDLnByb3RvdHlwZT17fQpBLnZOLnByb3Rv -dHlwZT17CiQxKGEpe3JldHVybiB0aGlzLmEuJDEodC5CLmEoYSkpfSwKJFM6Mjd9CkEuSlEucHJvdG90 -eXBlPXsKQ1koYSl7dmFyIHMKaWYoJC5vci5hPT09MCl7Zm9yKHM9MDtzPDI2MjsrK3MpJC5vci5ZNSgw -LEIuY21bc10sQS5wUygpKQpmb3Iocz0wO3M8MTI7KytzKSQub3IuWTUoMCxCLkJJW3NdLEEuVjQoKSl9 -fSwKaTAoYSl7cmV0dXJuICQuQU4oKS50ZygwLEEuclMoYSkpfSwKRWIoYSxiLGMpe3ZhciBzPSQub3Iu -cSgwLEEuclMoYSkrIjo6IitiKQppZihzPT1udWxsKXM9JC5vci5xKDAsIio6OiIrYikKaWYocz09bnVs -bClyZXR1cm4hMQpyZXR1cm4gQS5wOChzLiQ0KGEsYixjLHRoaXMpKX0sCiRpa0Y6MX0KQS5HbS5wcm90 -b3R5cGU9ewpnQShhKXtyZXR1cm4gbmV3IEEuVzkoYSx0aGlzLmdrKGEpLEEueksoYSkuQygiVzk8R20u -RT4iKSl9fQpBLnZELnByb3RvdHlwZT17CmkwKGEpe3JldHVybiBCLk5tLlZyKHRoaXMuYSxuZXcgQS5V -dihhKSl9LApFYihhLGIsYyl7cmV0dXJuIEIuTm0uVnIodGhpcy5hLG5ldyBBLkVnKGEsYixjKSl9LAok -aWtGOjF9CkEuVXYucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHQuZjYuYShhKS5pMCh0aGlzLmEpfSwK -JFM6MTR9CkEuRWcucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHQuZjYuYShhKS5FYih0aGlzLmEsdGhp -cy5iLHRoaXMuYyl9LAokUzoxNH0KQS5tNi5wcm90b3R5cGU9ewpDWShhLGIsYyxkKXt2YXIgcyxyLHEK -dGhpcy5hLkZWKDAsYykKcz1iLmV2KDAsbmV3IEEuRW8oKSkKcj1iLmV2KDAsbmV3IEEuV2soKSkKdGhp -cy5iLkZWKDAscykKcT10aGlzLmMKcS5GVigwLEIueEQpCnEuRlYoMCxyKX0sCmkwKGEpe3JldHVybiB0 -aGlzLmEudGcoMCxBLnJTKGEpKX0sCkViKGEsYixjKXt2YXIgcyxyPXRoaXMscT1BLnJTKGEpLHA9ci5j -LG89cSsiOjoiK2IKaWYocC50ZygwLG8pKXJldHVybiByLmQuRHQoYykKZWxzZXtzPSIqOjoiK2IKaWYo -cC50ZygwLHMpKXJldHVybiByLmQuRHQoYykKZWxzZXtwPXIuYgppZihwLnRnKDAsbykpcmV0dXJuITAK -ZWxzZSBpZihwLnRnKDAscykpcmV0dXJuITAKZWxzZSBpZihwLnRnKDAscSsiOjoqIikpcmV0dXJuITAK -ZWxzZSBpZihwLnRnKDAsIio6OioiKSlyZXR1cm4hMH19cmV0dXJuITF9LAokaWtGOjF9CkEuRW8ucHJv -dG90eXBlPXsKJDEoYSl7cmV0dXJuIUIuTm0udGcoQi5CSSxBLm4oYSkpfSwKJFM6NH0KQS5Xay5wcm90 -b3R5cGU9ewokMShhKXtyZXR1cm4gQi5ObS50ZyhCLkJJLEEubihhKSl9LAokUzo0fQpBLmN0LnByb3Rv -dHlwZT17CkViKGEsYixjKXtpZih0aGlzLmpGKGEsYixjKSlyZXR1cm4hMAppZihiPT09InRlbXBsYXRl -IiYmYz09PSIiKXJldHVybiEwCmlmKGEuZ2V0QXR0cmlidXRlKCJ0ZW1wbGF0ZSIpPT09IiIpcmV0dXJu -IHRoaXMuZS50ZygwLGIpCnJldHVybiExfX0KQS5JQS5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4iVEVN -UExBVEU6OiIrQS5uKGEpfSwKJFM6Mn0KQS5Pdy5wcm90b3R5cGU9ewppMChhKXt2YXIgcwppZih0LmFP -LmIoYSkpcmV0dXJuITEKcz10Lmc3LmIoYSkKaWYocyYmQS5yUyhhKT09PSJmb3JlaWduT2JqZWN0Iily -ZXR1cm4hMQppZihzKXJldHVybiEwCnJldHVybiExfSwKRWIoYSxiLGMpe2lmKGI9PT0iaXMifHxCLnhC -Lm4oYiwib24iKSlyZXR1cm4hMQpyZXR1cm4gdGhpcy5pMChhKX0sCiRpa0Y6MX0KQS5XOS5wcm90b3R5 -cGU9ewpHKCl7dmFyIHM9dGhpcyxyPXMuYysxLHE9cy5iCmlmKHI8cSl7cy5zcChKLng5KHMuYSxyKSkK -cy5jPXIKcmV0dXJuITB9cy5zcChudWxsKQpzLmM9cQpyZXR1cm4hMX0sCmdsKCl7dmFyIHM9dGhpcy5k -CnJldHVybiBzPT1udWxsP3RoaXMuJHRpLmMuYShzKTpzfSwKc3AoYSl7dGhpcy5kPXRoaXMuJHRpLkMo -IjE/IikuYShhKX0sCiRpQW46MX0KQS5kVy5wcm90b3R5cGU9eyRpRDA6MSwkaXY2OjF9CkEubWsucHJv -dG90eXBlPXskaXkwOjF9CkEuS28ucHJvdG90eXBlPXsKUG4oYSl7dmFyIHMscj1uZXcgQS5mbSh0aGlz -KQpkb3tzPXRoaXMuYgpyLiQyKGEsbnVsbCl9d2hpbGUocyE9PXRoaXMuYil9LApFUChhLGIpeysrdGhp -cy5iCmlmKGI9PW51bGx8fGIhPT1hLnBhcmVudE5vZGUpSi5MdChhKQplbHNlIGIucmVtb3ZlQ2hpbGQo -YSl9LApJNChhLGIpe3ZhciBzLHIscSxwLG8sbj0hMCxtPW51bGwsbD1udWxsCnRyeXttPUouaWcoYSkK -bD1tLmEuZ2V0QXR0cmlidXRlKCJpcyIpCnQuaC5hKGEpCnM9ZnVuY3Rpb24oYyl7aWYoIShjLmF0dHJp -YnV0ZXMgaW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApKXJldHVybiB0cnVlCmlmKGMuaWQ9PSJsYXN0Q2hp -bGQifHxjLm5hbWU9PSJsYXN0Q2hpbGQifHxjLmlkPT0icHJldmlvdXNTaWJsaW5nInx8Yy5uYW1lPT0i -cHJldmlvdXNTaWJsaW5nInx8Yy5pZD09ImNoaWxkcmVuInx8Yy5uYW1lPT0iY2hpbGRyZW4iKXJldHVy -biB0cnVlCnZhciBrPWMuY2hpbGROb2RlcwppZihjLmxhc3RDaGlsZCYmYy5sYXN0Q2hpbGQhPT1rW2su -bGVuZ3RoLTFdKXJldHVybiB0cnVlCmlmKGMuY2hpbGRyZW4paWYoIShjLmNoaWxkcmVuIGluc3RhbmNl -b2YgSFRNTENvbGxlY3Rpb258fGMuY2hpbGRyZW4gaW5zdGFuY2VvZiBOb2RlTGlzdCkpcmV0dXJuIHRy -dWUKdmFyIGo9MAppZihjLmNoaWxkcmVuKWo9Yy5jaGlsZHJlbi5sZW5ndGgKZm9yKHZhciBpPTA7aTxq -O2krKyl7dmFyIGg9Yy5jaGlsZHJlbltpXQppZihoLmlkPT0iYXR0cmlidXRlcyJ8fGgubmFtZT09ImF0 -dHJpYnV0ZXMifHxoLmlkPT0ibGFzdENoaWxkInx8aC5uYW1lPT0ibGFzdENoaWxkInx8aC5pZD09InBy -ZXZpb3VzU2libGluZyJ8fGgubmFtZT09InByZXZpb3VzU2libGluZyJ8fGguaWQ9PSJjaGlsZHJlbiJ8 -fGgubmFtZT09ImNoaWxkcmVuIilyZXR1cm4gdHJ1ZX1yZXR1cm4gZmFsc2V9KGEpCm49QS5vVChzKT8h -MDohKGEuYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5hbWVkTm9kZU1hcCl9Y2F0Y2gocCl7fXI9ImVsZW1l -bnQgdW5wcmludGFibGUiCnRyeXtyPUouWVMoYSl9Y2F0Y2gocCl7fXRyeXtxPUEuclMoYSkKdGhpcy5r -Uih0LmguYShhKSxiLG4scixxLHQuZi5hKG0pLEEuayhsKSl9Y2F0Y2gocCl7aWYoQS5SdShwKSBpbnN0 -YW5jZW9mIEEuQVQpdGhyb3cgcAplbHNle3RoaXMuRVAoYSxiKQp3aW5kb3cKbz1BLkVqKHIpCmlmKHR5 -cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS53YXJuKCJSZW1vdmluZyBjb3Jy -dXB0ZWQgZWxlbWVudCAiK28pfX19LAprUihhLGIsYyxkLGUsZixnKXt2YXIgcyxyLHEscCxvLG4sbSxs -PXRoaXMKaWYoYyl7bC5FUChhLGIpCndpbmRvdwppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIp -d2luZG93LmNvbnNvbGUud2FybigiUmVtb3ZpbmcgZWxlbWVudCBkdWUgdG8gY29ycnVwdGVkIGF0dHJp -YnV0ZXMgb24gPCIrZCsiPiIpCnJldHVybn1pZighbC5hLmkwKGEpKXtsLkVQKGEsYikKd2luZG93CnM9 -QS5FaihiKQppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUud2Fybigi -UmVtb3ZpbmcgZGlzYWxsb3dlZCBlbGVtZW50IDwiK2UrIj4gZnJvbSAiK3MpCnJldHVybn1pZihnIT1u -dWxsKWlmKCFsLmEuRWIoYSwiaXMiLGcpKXtsLkVQKGEsYikKd2luZG93CmlmKHR5cGVvZiBjb25zb2xl -IT0idW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS53YXJuKCJSZW1vdmluZyBkaXNhbGxvd2VkIHR5cGUg -ZXh0ZW5zaW9uIDwiK2UrJyBpcz0iJytnKyciPicpCnJldHVybn1zPWYuZ3ZjKCkKcj1BLlFJKHMuc2xp -Y2UoMCksQS50NihzKSkKZm9yKHE9Zi5ndmMoKS5sZW5ndGgtMSxzPWYuYSxwPSJSZW1vdmluZyBkaXNh -bGxvd2VkIGF0dHJpYnV0ZSA8IitlKyIgIjtxPj0wOy0tcSl7aWYoIShxPHIubGVuZ3RoKSlyZXR1cm4g -QS5PSChyLHEpCm89cltxXQpuPWwuYQptPUouY0gobykKQS5uKG8pCmlmKCFuLkViKGEsbSxBLm4ocy5n -ZXRBdHRyaWJ1dGUobykpKSl7d2luZG93Cm49cy5nZXRBdHRyaWJ1dGUobykKaWYodHlwZW9mIGNvbnNv -bGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndhcm4ocCtvKyc9IicrQS5FaihuKSsnIj4nKQpz -LnJlbW92ZUF0dHJpYnV0ZShvKX19aWYodC5hVy5iKGEpKXtzPWEuY29udGVudApzLnRvU3RyaW5nCmwu -UG4ocyl9fSwKJGlvbjoxfQpBLmZtLnByb3RvdHlwZT17CiQyKGEsYil7dmFyIHMscixxLHAsbyxuLG09 -dGhpcy5hCnN3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDE6bS5JNChhLGIpCmJyZWFrCmNhc2UgODpjYXNl -IDExOmNhc2UgMzpjYXNlIDQ6YnJlYWsKZGVmYXVsdDptLkVQKGEsYil9cz1hLmxhc3RDaGlsZApmb3Io -cT10LkE7cyE9bnVsbDspe3I9bnVsbAp0cnl7cj1zLnByZXZpb3VzU2libGluZwppZihyIT1udWxsKXtw -PXIubmV4dFNpYmxpbmcKbz1zCm89cD09bnVsbD9vIT1udWxsOnAhPT1vCnA9b31lbHNlIHA9ITEKaWYo -cCl7cD1BLlBWKCJDb3JydXB0IEhUTUwiKQp0aHJvdyBBLmIocCl9fWNhdGNoKG4pe3A9cS5hKHMpOysr -bS5iCm89cC5wYXJlbnROb2RlCmlmKGEhPT1vKXtpZihvIT1udWxsKW8ucmVtb3ZlQ2hpbGQocCl9ZWxz -ZSBhLnJlbW92ZUNoaWxkKHApCnM9bnVsbApyPWEubGFzdENoaWxkfWlmKHMhPW51bGwpdGhpcy4kMihz -LGEpCnM9cn19LAokUzozMH0KQS5ZOC5wcm90b3R5cGU9e30KQS5ucS5wcm90b3R5cGU9e30KQS5Bci5w -cm90b3R5cGU9e30KQS50RC5wcm90b3R5cGU9e30KQS51Zi5wcm90b3R5cGU9e30KQS5pSi5wcm90b3R5 -cGU9ewpWSChhKXt2YXIgcyxyPXRoaXMuYSxxPXIubGVuZ3RoCmZvcihzPTA7czxxOysrcylpZihyW3Nd -PT09YSlyZXR1cm4gcwpCLk5tLmkocixhKQpCLk5tLmkodGhpcy5iLG51bGwpCnJldHVybiBxfSwKUHYo -YSl7dmFyIHMscixxLHA9dGhpcyxvPXt9CmlmKGE9PW51bGwpcmV0dXJuIGEKaWYoQS5yUShhKSlyZXR1 -cm4gYQppZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIGEKaWYodHlwZW9mIGE9PSJzdHJpbmciKXJl -dHVybiBhCmlmKGEgaW5zdGFuY2VvZiBBLmlQKXJldHVybiBuZXcgRGF0ZShhLmEpCmlmKHQuZnYuYihh -KSl0aHJvdyBBLmIoQS5TWSgic3RydWN0dXJlZCBjbG9uZSBvZiBSZWdFeHAiKSkKaWYodC5jOC5iKGEp -KXJldHVybiBhCmlmKHQudy5iKGEpKXJldHVybiBhCmlmKHQueC5iKGEpKXJldHVybiBhCnM9dC5kRS5i -KGEpfHwhMQppZihzKXJldHVybiBhCmlmKHQuZi5iKGEpKXtyPXAuVkgoYSkKcz1wLmIKaWYoIShyPHMu -bGVuZ3RoKSlyZXR1cm4gQS5PSChzLHIpCnE9by5hPXNbcl0KaWYocSE9bnVsbClyZXR1cm4gcQpxPXt9 -Cm8uYT1xCkIuTm0uWTUocyxyLHEpCmEuSygwLG5ldyBBLkUyKG8scCkpCnJldHVybiBvLmF9aWYodC5q -LmIoYSkpe3I9cC5WSChhKQpvPXAuYgppZighKHI8by5sZW5ndGgpKXJldHVybiBBLk9IKG8scikKcT1v -W3JdCmlmKHEhPW51bGwpcmV0dXJuIHEKcmV0dXJuIHAuZWsoYSxyKX1pZih0LmVILmIoYSkpe3I9cC5W -SChhKQpzPXAuYgppZighKHI8cy5sZW5ndGgpKXJldHVybiBBLk9IKHMscikKcT1vLmI9c1tyXQppZihx -IT1udWxsKXJldHVybiBxCnE9e30Kby5iPXEKQi5ObS5ZNShzLHIscSkKcC5pbShhLG5ldyBBLmpnKG8s -cCkpCnJldHVybiBvLmJ9dGhyb3cgQS5iKEEuU1koInN0cnVjdHVyZWQgY2xvbmUgb2Ygb3RoZXIgdHlw -ZSIpKX0sCmVrKGEsYil7dmFyIHMscj1KLlU2KGEpLHE9ci5nayhhKSxwPW5ldyBBcnJheShxKQpCLk5t -Llk1KHRoaXMuYixiLHApCmZvcihzPTA7czxxOysrcylCLk5tLlk1KHAscyx0aGlzLlB2KHIucShhLHMp -KSkKcmV0dXJuIHB9fQpBLkUyLnByb3RvdHlwZT17CiQyKGEsYil7dGhpcy5hLmFbYV09dGhpcy5iLlB2 -KGIpfSwKJFM6MzF9CkEuamcucHJvdG90eXBlPXsKJDIoYSxiKXt0aGlzLmEuYlthXT10aGlzLmIuUHYo -Yil9LAokUzozMn0KQS5CZi5wcm90b3R5cGU9ewppbShhLGIpe3ZhciBzLHIscSxwCnQuYjguYShiKQpm -b3Iocz1PYmplY3Qua2V5cyhhKSxyPXMubGVuZ3RoLHE9MDtxPHI7KytxKXtwPXNbcV0KYi4kMihwLGFb -cF0pfX19CkEuQXMucHJvdG90eXBlPXsKVihhKXt2YXIgcwpBLm4oYSkKcz0kLmhHKCkuYgppZihzLnRl -c3QoYSkpcmV0dXJuIGEKdGhyb3cgQS5iKEEuTDMoYSwidmFsdWUiLCJOb3QgYSB2YWxpZCBjbGFzcyB0 -b2tlbiIpKX0sCiJbIihhKXtyZXR1cm4gdGhpcy5EKCkuSCgwLCIgIil9LApnQShhKXt2YXIgcz10aGlz -LkQoKQpyZXR1cm4gQS5yaihzLHMucixBLkxoKHMpLmMpfSwKZ2wwKGEpe3JldHVybiB0aGlzLkQoKS5h -PT09MH0sCmdvcihhKXtyZXR1cm4gdGhpcy5EKCkuYSE9PTB9LApnayhhKXtyZXR1cm4gdGhpcy5EKCku -YX0sCnRnKGEsYil7dGhpcy5WKGIpCnJldHVybiB0aGlzLkQoKS50ZygwLGIpfSwKaShhLGIpe3ZhciBz -CkEubihiKQp0aGlzLlYoYikKcz10aGlzLk9TKG5ldyBBLkdFKGIpKQpyZXR1cm4gQS5wOChzPT1udWxs -PyExOnMpfSwKUihhLGIpe3ZhciBzLHIKaWYodHlwZW9mIGIhPSJzdHJpbmciKXJldHVybiExCnRoaXMu -VihiKQpzPXRoaXMuRCgpCnI9cy5SKDAsYikKdGhpcy5YKHMpCnJldHVybiByfSwKRlYoYSxiKXt0aGlz -Lk9TKG5ldyBBLk43KHRoaXMsdC5PLmEoYikpKX0sCmVSKGEsYil7dmFyIHM9dGhpcy5EKCkKcmV0dXJu -IEEuYksocyxiLEEuTGgocykuQygibGYuRSIpKX0sCkUoYSxiKXtyZXR1cm4gdGhpcy5EKCkuRSgwLGIp -fSwKVjEoYSl7dGhpcy5PUyhuZXcgQS51USgpKX0sCk9TKGEpe3ZhciBzLHIKdC5iVS5hKGEpCnM9dGhp -cy5EKCkKcj1hLiQxKHMpCnRoaXMuWChzKQpyZXR1cm4gcn19CkEuR0UucHJvdG90eXBlPXsKJDEoYSl7 -cmV0dXJuIHQuQy5hKGEpLmkoMCx0aGlzLmEpfSwKJFM6MzN9CkEuTjcucHJvdG90eXBlPXsKJDEoYSl7 -dmFyIHM9dGhpcy5iLHI9QS50NihzKQpyZXR1cm4gdC5DLmEoYSkuRlYoMCxuZXcgQS5sSihzLHIuQygi -cVUoMSkiKS5hKHRoaXMuYS5ndU0oKSksci5DKCJsSjwxLHFVPiIpKSl9LAokUzoxNX0KQS51US5wcm90 -b3R5cGU9ewokMShhKXt0LkMuYShhKQppZihhLmE+MCl7YS5iPWEuYz1hLmQ9YS5lPWEuZj1udWxsCmEu -YT0wCmEuUygpfXJldHVybiBudWxsfSwKJFM6MTV9CkEuaEYucHJvdG90eXBlPXskaWhGOjF9CkEuRFYu -cHJvdG90eXBlPXsKJDEoYSl7dmFyIHMKdC5ZLmEoYSkKcz1mdW5jdGlvbihiLGMsZCl7cmV0dXJuIGZ1 -bmN0aW9uKCl7cmV0dXJuIGIoYyxkLHRoaXMsQXJyYXkucHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3Vt -ZW50cykpfX0oQS5SNCxhLCExKQpBLkRtKHMsJC53KCksYSkKcmV0dXJuIHN9LAokUzozfQpBLlBDLnBy -b3RvdHlwZT17CiQxKGEpe3JldHVybiBuZXcgdGhpcy5hKGEpfSwKJFM6M30KQS5RUy5wcm90b3R5cGU9 -ewokMShhKXtyZXR1cm4gbmV3IEEucjcoYT09bnVsbD90LksuYShhKTphKX0sCiRTOjM1fQpBLm5wLnBy -b3RvdHlwZT17CiQxKGEpe3ZhciBzPWE9PW51bGw/dC5LLmEoYSk6YQpyZXR1cm4gbmV3IEEuVHoocyx0 -LmFtKX0sCiRTOjU0fQpBLlV0LnByb3RvdHlwZT17CiQxKGEpe3JldHVybiBuZXcgQS5FNChhPT1udWxs -P3QuSy5hKGEpOmEpfSwKJFM6Mzd9CkEuRTQucHJvdG90eXBlPXsKcShhLGIpe2lmKHR5cGVvZiBiIT0i -c3RyaW5nIiYmdHlwZW9mIGIhPSJudW1iZXIiKXRocm93IEEuYihBLnhZKCJwcm9wZXJ0eSBpcyBub3Qg -YSBTdHJpbmcgb3IgbnVtIixudWxsKSkKcmV0dXJuIEEuZFUodGhpcy5hW2JdKX0sClk1KGEsYixjKXtp -Zih0eXBlb2YgYiE9InN0cmluZyImJnR5cGVvZiBiIT0ibnVtYmVyIil0aHJvdyBBLmIoQS54WSgicHJv -cGVydHkgaXMgbm90IGEgU3RyaW5nIG9yIG51bSIsbnVsbCkpCnRoaXMuYVtiXT1BLndZKGMpfSwKRE4o -YSxiKXtpZihiPT1udWxsKXJldHVybiExCnJldHVybiBiIGluc3RhbmNlb2YgQS5FNCYmdGhpcy5hPT09 -Yi5hfSwKIlsiKGEpe3ZhciBzLHIKdHJ5e3M9U3RyaW5nKHRoaXMuYSkKcmV0dXJuIHN9Y2F0Y2gocil7 -cz10aGlzLnhiKDApCnJldHVybiBzfX0sClY3KGEsYil7dmFyIHMscj10aGlzLmEKaWYoYj09bnVsbClz -PW51bGwKZWxzZXtzPUEudDYoYikKcz1BLlBXKG5ldyBBLmxKKGIscy5DKCJAKDEpIikuYShBLmlHKCkp -LHMuQygibEo8MSxAPiIpKSwhMCx0LnopfXJldHVybiBBLmRVKHJbYV0uYXBwbHkocixzKSl9LApnbShh -KXtyZXR1cm4gMH19CkEucjcucHJvdG90eXBlPXt9CkEuVHoucHJvdG90eXBlPXsKY1AoYSl7dmFyIHM9 -dGhpcyxyPWE8MHx8YT49cy5nayhzKQppZihyKXRocm93IEEuYihBLlRFKGEsMCxzLmdrKHMpLG51bGws -bnVsbCkpfSwKcShhLGIpe2lmKEEub2soYikpdGhpcy5jUChiKQpyZXR1cm4gdGhpcy4kdGkuYy5hKHRo -aXMuVXIoMCxiKSl9LApZNShhLGIsYyl7dGhpcy5jUChiKQp0aGlzLmJoKDAsYixjKX0sCmdrKGEpe3Zh -ciBzPXRoaXMuYS5sZW5ndGgKaWYodHlwZW9mIHM9PT0ibnVtYmVyIiYmcz4+PjA9PT1zKXJldHVybiBz -CnRocm93IEEuYihBLlBWKCJCYWQgSnNBcnJheSBsZW5ndGgiKSl9LAokaWJROjEsCiRpY1g6MSwKJGl6 -TToxfQpBLnZnLnByb3RvdHlwZT17Clk1KGEsYixjKXtyZXR1cm4gdGhpcy5lNCgwLGIsYyl9fQpBLm5k -LnByb3RvdHlwZT17JGluZDoxfQpBLktlLnByb3RvdHlwZT17CkQoKXt2YXIgcyxyLHEscCxvPXRoaXMu -YS5nZXRBdHRyaWJ1dGUoImNsYXNzIiksbj1BLkxzKHQuTikKaWYobz09bnVsbClyZXR1cm4gbgpmb3Io -cz1vLnNwbGl0KCIgIikscj1zLmxlbmd0aCxxPTA7cTxyOysrcSl7cD1KLlQwKHNbcV0pCmlmKHAubGVu -Z3RoIT09MCluLmkoMCxwKX1yZXR1cm4gbn0sClgoYSl7dGhpcy5hLnNldEF0dHJpYnV0ZSgiY2xhc3Mi -LGEuSCgwLCIgIikpfX0KQS5oaS5wcm90b3R5cGU9ewpnUChhKXtyZXR1cm4gbmV3IEEuS2UoYSl9LApz -aGYoYSxiKXt0aGlzLllDKGEsYil9LApyNihhLGIsYyxkKXt2YXIgcyxyLHEscCxvCmlmKGQ9PW51bGwp -e3M9QS5RSShbXSx0LkQpCmQ9bmV3IEEudkQocykKQi5ObS5pKHMsQS5UdyhudWxsKSkKQi5ObS5pKHMs -QS5CbCgpKQpCLk5tLmkocyxuZXcgQS5PdygpKX1jPW5ldyBBLktvKGQpCnM9ZG9jdW1lbnQKcj1zLmJv -ZHkKci50b1N0cmluZwpxPUIuUlkuQUgociwnPHN2ZyB2ZXJzaW9uPSIxLjEiPicrQS5FaihiKSsiPC9z -dmc+IixjKQpwPXMuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCnM9bmV3IEEuZTcocSkKbz1zLmdyOChz -KQpmb3IoO3M9by5maXJzdENoaWxkLHMhPW51bGw7KXAuYXBwZW5kQ2hpbGQocykKcmV0dXJuIHB9LApu -eihhLGIsYyxkLGUpe3Rocm93IEEuYihBLkw0KCJDYW5ub3QgaW52b2tlIGluc2VydEFkamFjZW50SHRt -bCBvbiBTVkcuIikpfSwKZ1ZsKGEpe3JldHVybiBuZXcgQS5DcShhLCJjbGljayIsITEsdC5RKX0sCiRp -aGk6MX0KQS5kMi5wcm90b3R5cGU9ewpMdCgpe3ZhciBzLHIscSxwLG89dGhpcyxuPXQuTixtPXQuWCxs -PUEuRmwobixtKSxrPW8uYQppZihrIT1udWxsKXtzPUEuUUkoW10sdC5kKQpmb3Iocj1rLmxlbmd0aCxx -PTA7cTxrLmxlbmd0aDtrLmxlbmd0aD09PXJ8fCgwLEEubGspKGspLCsrcSl7cD1rW3FdCnMucHVzaChB -LkVGKFsiZGVzY3JpcHRpb24iLHAuYSwiaHJlZiIscC5iXSxuLG0pKX1sLlk1KDAsImVkaXRzIixzKX1s -Llk1KDAsImV4cGxhbmF0aW9uIixvLmIpCmwuWTUoMCwibGluZSIsby5jKQpsLlk1KDAsImRpc3BsYXlQ -YXRoIixvLmQpCmwuWTUoMCwidXJpUGF0aCIsby5lKQpuPW8uZgppZihuIT1udWxsKXttPUEuUUkoW10s -dC5kKQpmb3Ioaz1uLmxlbmd0aCxxPTA7cTxuLmxlbmd0aDtuLmxlbmd0aD09PWt8fCgwLEEubGspKG4p -LCsrcSltLnB1c2gobltxXS5MdCgpKQpsLlk1KDAsInRyYWNlcyIsbSl9cmV0dXJuIGx9fQpBLlNlLnBy -b3RvdHlwZT17Ckx0KCl7cmV0dXJuIEEuRUYoWyJkZXNjcmlwdGlvbiIsdGhpcy5hLCJocmVmIix0aGlz -LmJdLHQuTix0LlgpfX0KQS5NbC5wcm90b3R5cGU9ewpMdCgpe3JldHVybiBBLkVGKFsiaHJlZiIsdGhp -cy5hLCJsaW5lIix0aGlzLmIsInBhdGgiLHRoaXMuY10sdC5OLHQuWCl9fQpBLnlELnByb3RvdHlwZT17 -Ckx0KCl7dmFyIHMscixxLHA9QS5RSShbXSx0LmQpCmZvcihzPXRoaXMuYixyPXMubGVuZ3RoLHE9MDtx -PHMubGVuZ3RoO3MubGVuZ3RoPT09cnx8KDAsQS5saykocyksKytxKXAucHVzaChzW3FdLkx0KCkpCnJl -dHVybiBBLkVGKFsiZGVzY3JpcHRpb24iLHRoaXMuYSwiZW50cmllcyIscF0sdC5OLHQuWCl9fQpBLndi -LnByb3RvdHlwZT17Ckx0KCl7dmFyIHMscixxLHA9dGhpcyxvPUEuRmwodC5OLHQuWCkKby5ZNSgwLCJk -ZXNjcmlwdGlvbiIscC5hKQpzPXAuYgppZihzIT1udWxsKW8uWTUoMCwiZnVuY3Rpb24iLHMpCnM9cC5j -CmlmKHMhPW51bGwpby5ZNSgwLCJsaW5rIixzLkx0KCkpCnM9cC5kCmlmKHMubGVuZ3RoIT09MCl7cj1B -LnQ2KHMpCnE9ci5DKCJsSjwxLFowPHFVLE1oPz4+IikKby5ZNSgwLCJoaW50QWN0aW9ucyIsQS5ZMShu -ZXcgQS5sSihzLHIuQygiWjA8cVUsTWg/PigxKSIpLmEobmV3IEEuYjAoKSkscSksITAscS5DKCJhTC5F -IikpKX1yZXR1cm4gb319CkEuYU4ucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIEEubnoodC5HLmEoYSkp -fSwKJFM6Mzh9CkEuYjAucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIHQuSi5hKGEpLkx0KCl9LAokUzoz -OX0KQS5qOC5wcm90b3R5cGU9ewpMdCgpe3JldHVybiBBLkVGKFsibGluZSIsdGhpcy5hLCJleHBsYW5h -dGlvbiIsdGhpcy5iLCJvZmZzZXQiLHRoaXMuY10sdC5OLHQuWCl9fQpBLnFwLnByb3RvdHlwZT17Ckx0 -KCl7dmFyIHMscixxLHAsbyxuLG0sbD10aGlzLGs9dC5OLGo9QS5GbChrLHQuYVMpCmZvcihzPWwuZCxz -PXMuZ1B1KHMpLHM9cy5nQShzKSxyPXQuWCxxPXQuZDtzLkcoKTspe3A9cy5nbCgpCm89cC5hCm49QS5R -SShbXSxxKQpmb3IocD1KLklUKHAuYik7cC5HKCk7KXttPXAuZ2woKQpuLnB1c2goQS5FRihbImxpbmUi -LG0uYSwiZXhwbGFuYXRpb24iLG0uYiwib2Zmc2V0IixtLmNdLGsscikpfWouWTUoMCxvLG4pfXJldHVy -biBBLkVGKFsicmVnaW9ucyIsbC5hLCJuYXZpZ2F0aW9uQ29udGVudCIsbC5iLCJzb3VyY2VDb2RlIixs -LmMsImVkaXRzIixqXSxrLHIpfX0KQS5tUS5wcm90b3R5cGU9e30KQS5lLnByb3RvdHlwZT17CiQxKGEp -e3ZhciBzLHIscSxwLG8sbixtCnQuQi5hKGEpCnM9dC5GCnI9cy5hKHdpbmRvdy5sb2NhdGlvbikucGF0 -aG5hbWUKcT1BLkc2KHMuYSh3aW5kb3cubG9jYXRpb24pLmhyZWYpCnA9QS5hSyhzLmEod2luZG93Lmxv -Y2F0aW9uKS5ocmVmKQpBLkdlKCkKaWYociE9PSIvIil7cz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIu -cm9vdCIpLnRleHRDb250ZW50CnMudG9TdHJpbmcKcz1yIT09Qi54Qi5iUyhzKX1lbHNlIHM9ITEKaWYo -cyl7ci50b1N0cmluZwpBLkc3KHIscSxwLCEwLG5ldyBBLlZXKHIscSxwKSl9cz1kb2N1bWVudApvPXMu -cXVlcnlTZWxlY3RvcigiLmFwcGx5LW1pZ3JhdGlvbiIpCm8udG9TdHJpbmcKbz1KLnFGKG8pCm49by4k -dGkKbT1uLkMoIn4oMSk/IikuYShuZXcgQS5vWigpKQp0LlouYShudWxsKQpBLkpFKG8uYSxvLmIsbSwh -MSxuLmMpCm49cy5xdWVyeVNlbGVjdG9yKCIucmVydW4tbWlncmF0aW9uIikKbi50b1N0cmluZwpuPUou -cUYobikKbT1uLiR0aQpBLkpFKG4uYSxuLmIsbS5DKCJ+KDEpPyIpLmEobmV3IEEueTgoKSksITEsbS5j -KQptPXMucXVlcnlTZWxlY3RvcigiLnJlcG9ydC1wcm9ibGVtIikKbS50b1N0cmluZwptPUoucUYobSkK -bj1tLiR0aQpBLkpFKG0uYSxtLmIsbi5DKCJ+KDEpPyIpLmEobmV3IEEuSGkoKSksITEsbi5jKQpzPXMu -cXVlcnlTZWxlY3RvcigiLnBvcHVwLXBhbmUgLmNsb3NlIikKcy50b1N0cmluZwpzPUoucUYocykKbj1z -LiR0aQpBLkpFKHMuYSxzLmIsbi5DKCJ+KDEpPyIpLmEobmV3IEEuQlQoKSksITEsbi5jKQpuPSQuYzAo -KQpuLnRvU3RyaW5nCm49Si5xRihuKQpzPW4uJHRpCkEuSkUobi5hLG4uYixzLkMoIn4oMSk/IikuYShu -ZXcgQS5QWSgpKSwhMSxzLmMpfSwKJFM6MTZ9CkEuVlcucHJvdG90eXBlPXsKJDAoKXtBLkZyKHRoaXMu -YSx0aGlzLmIsdGhpcy5jKX0sCiRTOjB9CkEub1oucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscixxLHAs -bwp0LlYuYShhKQppZihCLm9sLnVzKHdpbmRvdywiVGhpcyB3aWxsIGFwcGx5IHRoZSBjaGFuZ2VzIHlv -dSd2ZSBwcmV2aWV3ZWQgdG8geW91ciB3b3JraW5nIGRpcmVjdG9yeS4gSXQgaXMgcmVjb21tZW5kZWQg -eW91IGNvbW1pdCBhbnkgY2hhbmdlcyB5b3UgbWFkZSBiZWZvcmUgZG9pbmcgdGhpcy4iKSl7cz1BLlFJ -KFtdLHQuZCkKZm9yKHI9JC5JUixxPXIubGVuZ3RoLHA9MDtwPHIubGVuZ3RoO3IubGVuZ3RoPT09cXx8 -KDAsQS5saykociksKytwKXMucHVzaChyW3BdLkx0KCkpCnM9QS50eSgiL2FwcGx5LW1pZ3JhdGlvbiIs -QS5FRihbIm5hdmlnYXRpb25UcmVlIixzXSx0Lk4sdC5hUykpLlc3KG5ldyBBLmpyKCksdC5QKQpvPW5l -dyBBLnFsKCkKdC5iNy5hKG51bGwpCnI9cy4kdGkKcT0kLlgzCmlmKHEhPT1CLk5VKW89QS5WSChvLHEp -CnMueGYobmV3IEEuRmUobmV3IEEudnMocSxyKSwyLG51bGwsbyxyLkMoIkA8MT4iKS5LcShyLmMpLkMo -IkZlPDEsMj4iKSkpfX0sCiRTOjF9CkEuanIucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMKdC5mbi5hKGEp -CnM9ZG9jdW1lbnQuYm9keQpzLmNsYXNzTGlzdC5yZW1vdmUoInByb3Bvc2VkIikKcy5jbGFzc0xpc3Qu -YWRkKCJhcHBsaWVkIil9LAokUzo0Mn0KQS5xbC5wcm90b3R5cGU9ewokMihhLGIpe0EuQzIoIkNvdWxk -bid0IGFwcGx5IG1pZ3JhdGlvbiIsdC5LLmEoYSksYil9LAokUzo0M30KQS55OC5wcm90b3R5cGU9ewok -MShhKXtyZXR1cm4gdGhpcy54bih0LlYuYShhKSl9LAp4bihhKXt2YXIgcz0wLHI9QS5GWCh0LkgpLHE9 -MSxwLG89W10sbixtLGwsayxqLGkKdmFyICRhc3luYyQkMT1BLmx6KGZ1bmN0aW9uKGIsYyl7aWYoYj09 -PTEpe3A9YwpzPXF9d2hpbGUodHJ1ZSlzd2l0Y2gocyl7Y2FzZSAwOnE9Mwpkb2N1bWVudC5ib2R5LmNs -YXNzTGlzdC5hZGQoInJlcnVubmluZyIpCnM9NgpyZXR1cm4gQS5qUShBLnR5KCIvcmVydW4tbWlncmF0 -aW9uIixudWxsKSwkYXN5bmMkJDEpCmNhc2UgNjpuPWMKaz1uCmsudG9TdHJpbmcKaWYoQS5wOChKLng5 -KGssInN1Y2Nlc3MiKSkpdC5GLmEod2luZG93LmxvY2F0aW9uKS5yZWxvYWQoKQplbHNlIEEuSzAodC5l -dy5hKEoueDkobiwiZXJyb3JzIikpKQpvLnB1c2goNSkKcz00CmJyZWFrCmNhc2UgMzpxPTIKaT1wCm09 -QS5SdShpKQpsPUEudHMoaSkKQS5DMigiRmFpbGVkIHRvIHJlcnVuIG1pZ3JhdGlvbiIsbSxsKQpvLnB1 -c2goNSkKcz00CmJyZWFrCmNhc2UgMjpvPVsxXQpjYXNlIDQ6cT0xCmRvY3VtZW50LmJvZHkuY2xhc3NM -aXN0LnJlbW92ZSgicmVydW5uaW5nIikKcz1vLnBvcCgpCmJyZWFrCmNhc2UgNTpyZXR1cm4gQS55Qyhu -dWxsLHIpCmNhc2UgMTpyZXR1cm4gQS5mMyhwLHIpfX0pCnJldHVybiBBLkRJKCRhc3luYyQkMSxyKX0s -CiRTOjE3fQpBLkhpLnByb3RvdHlwZT17CiQxKGEpe3QuVi5hKGEpCkIub2wuUG8od2luZG93LEEuWGQo -Imh0dHBzIiwiZ2l0aHViLmNvbSIsImRhcnQtbGFuZy9zZGsvaXNzdWVzL25ldyIsQS5FRihbInRpdGxl -IiwiQ3VzdG9tZXItcmVwb3J0ZWQgaXNzdWUgd2l0aCBudWxsIHNhZmV0eSBtaWdyYXRpb24gdG9vbCIs -ImxhYmVscyIsdS5kLCJib2R5IiwiIyMjIyBTdGVwcyB0byByZXByb2R1Y2VcblxuIyMjIyBXaGF0IGRp -ZCB5b3UgZXhwZWN0IHRvIGhhcHBlbj9cblxuIyMjIyBXaGF0IGFjdHVhbGx5IGhhcHBlbmVkP1xuXG5f -U2NyZWVuc2hvdHMgYXJlIGFwcHJlY2lhdGVkX1xuXG4qKkRhcnQgU0RLIHZlcnNpb24qKjogIitBLkVq -KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzZGstdmVyc2lvbiIpLnRleHRDb250ZW50KSsiXG5cblRo -YW5rcyBmb3IgZmlsaW5nIVxuIl0sdC5OLHQueikpLmduRCgpLCJyZXBvcnQtcHJvYmxlbSIpfSwKJFM6 -MX0KQS5CVC5wcm90b3R5cGU9ewokMShhKXt2YXIgcwp0LlYuYShhKQpzPWRvY3VtZW50LnF1ZXJ5U2Vs -ZWN0b3IoIi5wb3B1cC1wYW5lIikuc3R5bGUKcy5kaXNwbGF5PSJub25lIgpyZXR1cm4ibm9uZSJ9LAok -UzoxfQpBLlBZLnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHIscSxwLG8KdC5WLmEoYSkKcz0kLkQ5KCku -aW5uZXJUZXh0CnI9dC5oLmEoZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5hdi1wYW5lbCBbZGF0YS1u -YW1lKj0iJytBLkxqKHMpKyciXScpLnBhcmVudE5vZGUpCnE9ci5xdWVyeVNlbGVjdG9yKCIuc3RhdHVz -LWljb24iKQpwPSQuSVIKcC50b1N0cmluZwpvPUEueXcocCxzKQppZihvIGluc3RhbmNlb2YgQS5jRCl7 -cD1vLncKcC50b1N0cmluZ31lbHNlIHA9ITEKaWYocCl7QS5PdChvKQpBLnhuKHEsbykKQS5BUihyLG8p -fX0sCiRTOjF9CkEuTC5wcm90b3R5cGU9ewokMShhKXt2YXIgcyxyLHEscAp0LkIuYShhKQpzPXQuRgpy -PXMuYSh3aW5kb3cubG9jYXRpb24pLnBhdGhuYW1lCnIudG9TdHJpbmcKcT1BLkc2KHMuYSh3aW5kb3cu -bG9jYXRpb24pLmhyZWYpCnA9QS5hSyhzLmEod2luZG93LmxvY2F0aW9uKS5ocmVmKQppZihyLmxlbmd0 -aD4xKUEuRzcocixxLHAsITEsbnVsbCkKZWxzZXtBLkJFKHIsQS53UigpLCEwKQpBLkJYKCImbmJzcDsi -LG51bGwpfX0sCiRTOjE2fQpBLld4LnByb3RvdHlwZT17CiQxKGEpe3ZhciBzLHIscSxwLG89ImNvbGxh -cHNlZCIKdC5WLmEoYSkKcz10aGlzLmEKcj1KLllFKHMpCnE9dGhpcy5iCnA9Si5ZRShxKQppZighci5n -UChzKS50ZygwLG8pKXtyLmdQKHMpLmkoMCxvKQpwLmdQKHEpLmkoMCxvKX1lbHNle3IuZ1AocykuUigw -LG8pCnAuZ1AocSkuUigwLG8pfX0sCiRTOjF9CkEuSG8ucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIEEu -dDIodC5WLmEoYSksdGhpcy5hKX0sCiRTOjF9CkEuSUMucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscixx -LHAKdC5WLmEoYSkKcz10aGlzLmEKcj1zLmdldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBBLlN5KG5ldyBB -Lmk3KHMpKS5PVSgib2Zmc2V0IikpCnIudG9TdHJpbmcKcT1BLlFBKHIsbnVsbCkKcz1zLmdldEF0dHJp -YnV0ZSgiZGF0YS0iK25ldyBBLlN5KG5ldyBBLmk3KHMpKS5PVSgibGluZSIpKQpzLnRvU3RyaW5nCnA9 -QS5RQShzLG51bGwpCnM9dGhpcy5iCnMudG9TdHJpbmcKQS5oWChzLHEscCl9LAokUzoxfQpBLmZDLnBy -b3RvdHlwZT17CiQxKGEpe3QucC5hKGEpCnRoaXMuYS5hTSgwLHRoaXMuYil9LAokUzo0NX0KQS5UbS5w -cm90b3R5cGU9ewokMShhKXtBLm4oYSkKcmV0dXJuIGEubGVuZ3RoPjQwP0IueEIuTmooYSwwLDQwKSsi -Li4uIjphfSwKJFM6Mn0KQS5uVC5wcm90b3R5cGU9ewokMCgpe0EuRnIodGhpcy5hLHRoaXMuYix0aGlz -LmMpfSwKJFM6MH0KQS5OWS5wcm90b3R5cGU9ewokMCgpe0EuRnIodGhpcy5hLG51bGwsbnVsbCl9LAok -UzowfQpBLnVlLnByb3RvdHlwZT17CiQxKGEpe3QuZi5hKGEpCnJldHVybiBBLkVqKGEucSgwLCJzZXZl -cml0eSIpKSsiIC0gIitBLkVqKGEucSgwLCJtZXNzYWdlIikpKyIgYXQgIitBLkVqKGEucSgwLCJsb2Nh -dGlvbiIpKSsiIC0gKCIrQS5FaihhLnEoMCwiY29kZSIpKSsiKSJ9LAokUzo0Nn0KQS5HSC5wcm90b3R5 -cGU9ewokMShhKXt0LmguYShhKQokLnpCKCkKdC5lcy5hKCQub3coKS5xKDAsImhsanMiKSkuVjcoImhp -Z2hsaWdodEJsb2NrIixbYV0pfSwKJFM6MTh9CkEuRUUucHJvdG90eXBlPXsKJDIoYSxiKXtyZXR1cm4g -QS5JWihhKStKLkhtKHQuZWUuYShiKS5iKX0sCiRTOjQ4fQpBLlBOLnByb3RvdHlwZT17CiQxKGEpe3Zh -ciBzLHIKdC5WLmEoYSkucHJldmVudERlZmF1bHQoKQpzPXRoaXMuYQpyPXRoaXMuYgpBLmFmKHQuRi5h -KHdpbmRvdy5sb2NhdGlvbikucGF0aG5hbWUscyxyLCEwLG5ldyBBLlFMKHMscikpCkEuaFgodGhpcy5j -LHMscil9LAokUzoxfQpBLlFMLnByb3RvdHlwZT17CiQwKCl7QS5Gcih0LkYuYSh3aW5kb3cubG9jYXRp -b24pLnBhdGhuYW1lLHRoaXMuYSx0aGlzLmIpfSwKJFM6MH0KQS5WUy5wcm90b3R5cGU9ewokMShhKXt2 -YXIgcyxyPSJzZWxlY3RlZC1maWxlIgp0LmguYShhKQpzPUouWUUoYSkKaWYoYS5nZXRBdHRyaWJ1dGUo -ImRhdGEtIituZXcgQS5TeShuZXcgQS5pNyhhKSkuT1UoIm5hbWUiKSk9PT10aGlzLmEuYSlzLmdQKGEp -LmkoMCxyKQplbHNlIHMuZ1AoYSkuUigwLHIpfSwKJFM6MTh9CkEuVEQucHJvdG90eXBlPXsKJDEoYSl7 -dmFyIHMscgp0LlYuYShhKQpzPXRoaXMuYQpzd2l0Y2gocy5nTCgpLmEpe2Nhc2UgMDpicmVhawpjYXNl -IDI6cy5uRygpCmJyZWFrCmNhc2UgMzpzLmMyKCkKYnJlYWsKY2FzZSAxOnMuYzIoKQpicmVha31yPXRo -aXMuYgpBLmJMKHIscykKQS54bih0aGlzLmMscykKQS5BUihyLHMpfSwKJFM6MX0KQS5JZi5wcm90b3R5 -cGU9ewokMShhKXt2YXIgcwp0LlYuYShhKQpzPXRoaXMuYQpBLk90KHMpCkEueG4odGhpcy5iLHMpCkEu -QVIodGhpcy5jLHMpfSwKJFM6MX0KQS50Qi5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gQS50Mih0LlYu -YShhKSwhMCl9LAokUzoxfQpBLm0yLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiB0aGlzLlJJKHQuVi5h -KGEpKX0sClJJKGEpe3ZhciBzPTAscj1BLkZYKHQuSCkscT0xLHAsbz10aGlzLG4sbSxsLGssaixpLGgs -ZyxmCnZhciAkYXN5bmMkJDE9QS5seihmdW5jdGlvbihiLGMpe2lmKGI9PT0xKXtwPWMKcz1xfXdoaWxl -KHRydWUpc3dpdGNoKHMpe2Nhc2UgMDpxPTMKaj1kb2N1bWVudApuPUIuQ0QuelEoai5xdWVyeVNlbGVj -dG9yKCIuY29udGVudCIpLnNjcm9sbFRvcCkKaT10Lk4Kcz02CnJldHVybiBBLmpRKEEudHkoQS5RNCgi -L2FwcGx5LWhpbnQiLEEuRmwoaSxpKSksby5hLkx0KCkpLCRhc3luYyQkMSkKY2FzZSA2Omk9by5iCmg9 -aS5hCmgudG9TdHJpbmcKbT1BLlVzKGgpCnM9NwpyZXR1cm4gQS5qUShBLkc3KG0sbnVsbCxpLmIsITEs -bnVsbCksJGFzeW5jJCQxKQpjYXNlIDc6ai5ib2R5LmNsYXNzTGlzdC5hZGQoIm5lZWRzLXJlcnVuIikK -aj1qLnF1ZXJ5U2VsZWN0b3IoIi5jb250ZW50IikKai50b1N0cmluZwpqLnNjcm9sbFRvcD1CLmpuLnpR -KG4pCnE9MQpzPTUKYnJlYWsKY2FzZSAzOnE9MgpmPXAKbD1BLlJ1KGYpCms9QS50cyhmKQpBLkMyKCJj -b3VsZG4ndCBhcHBseSBoaW50IixsLGspCnM9NQpicmVhawpjYXNlIDI6cz0xCmJyZWFrCmNhc2UgNTpy -ZXR1cm4gQS55QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gQS5mMyhwLHIpfX0pCnJldHVybiBBLkRJKCRh -c3luYyQkMSxyKX0sCiRTOjE3fQpBLlFXLnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4gdGhpcy5hKyI6 -XG4iK3RoaXMuYn0sCiRpUno6MX0KQS5YQS5wcm90b3R5cGU9ewpFYihhLGIsYyl7cmV0dXJuITB9LApp -MChhKXtyZXR1cm4hMH0sCiRpa0Y6MX0KQS52dC5wcm90b3R5cGU9ewpnTCgpe3ZhciBzLHIscSxwLG8s -bixtLGw9dGhpcy5kCmlmKGwubGVuZ3RoPT09MClyZXR1cm4gQi5jdwpzPUIuTm0uZ3RIKGwpLmdMKCkK -Zm9yKHI9bC5sZW5ndGgscT0hMCxwPSEwLG89MDtvPGwubGVuZ3RoO2wubGVuZ3RoPT09cnx8KDAsQS5s -aykobCksKytvKXtuPWxbb10uZ0woKQppZihuIT1zKXM9bnVsbAptPW4hPT1CLmN3CmlmKG0mJm4hPT1C -LldEKXE9ITEKaWYobSYmbiE9PUIuWGopcD0hMX1pZihzIT1udWxsKXJldHVybiBzCmlmKHEpcmV0dXJu -IEIuV0QKaWYocClyZXR1cm4gQi5YagpyZXR1cm4gQi5kY30sCkxWKCl7dmFyIHMscixxLHA9dGhpcy5k -CmlmKHAhPW51bGwpZm9yKHM9cC5sZW5ndGgscj0wO3I8czsrK3Ipe3E9cFtyXQppZihxLmIhPT0kKUEu -YnQoInBhcmVudCIpCnEuYj10aGlzfX0sCmMyKCl7dmFyIHMscixxLHAsbwpmb3Iocz10aGlzLmQscj1z -Lmxlbmd0aCxxPTA7cTxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgwLEEubGspKHMpLCsrcSl7cD1zW3Fd -CmlmKHAgaW5zdGFuY2VvZiBBLnZ0KXAuYzIoKQplbHNle2lmKHAgaW5zdGFuY2VvZiBBLmNEKXtvPXAu -dwpvLnRvU3RyaW5nCm89byYmcC5yPT09Qi5Yan1lbHNlIG89ITEKaWYobylwLnI9Qi5XRH19fSwKbkco -KXt2YXIgcyxyLHEscCxvCmZvcihzPXRoaXMuZCxyPXMubGVuZ3RoLHE9MDtxPHMubGVuZ3RoO3MubGVu -Z3RoPT09cnx8KDAsQS5saykocyksKytxKXtwPXNbcV0KaWYocCBpbnN0YW5jZW9mIEEudnQpcC5uRygp -CmVsc2V7aWYocCBpbnN0YW5jZW9mIEEuY0Qpe289cC53Cm8udG9TdHJpbmcKbz1vJiZwLnI9PT1CLldE -fWVsc2Ugbz0hMQppZihvKXAucj1CLlhqfX19LApMdCgpe3ZhciBzLHI9QS5GbCh0Lk4sdC5YKQpyLlk1 -KDAsInR5cGUiLCJkaXJlY3RvcnkiKQpyLlk1KDAsIm5hbWUiLHRoaXMuYSkKcz10aGlzLmQKcy50b1N0 -cmluZwpyLlk1KDAsInN1YnRyZWUiLEEuVkQocykpCnM9dGhpcy5jCmlmKHMhPW51bGwpci5ZNSgwLCJw -YXRoIixzKQpyZXR1cm4gcn19CkEuY0QucHJvdG90eXBlPXsKTHQoKXt2YXIgcyxyPXRoaXMscT1BLkZs -KHQuTix0LlgpCnEuWTUoMCwidHlwZSIsImZpbGUiKQpxLlk1KDAsIm5hbWUiLHIuYSkKcz1yLmMKaWYo -cyE9bnVsbClxLlk1KDAsInBhdGgiLHMpCnM9ci5kCmlmKHMhPW51bGwpcS5ZNSgwLCJocmVmIixzKQpz -PXIuZQppZihzIT1udWxsKXEuWTUoMCwiZWRpdENvdW50IixzKQpzPXIuZgppZihzIT1udWxsKXEuWTUo -MCwid2FzRXhwbGljaXRseU9wdGVkT3V0IixzKQpzPXIucgppZihzIT1udWxsKXEuWTUoMCwibWlncmF0 -aW9uU3RhdHVzIixzLmEpCnM9ci53CmlmKHMhPW51bGwpcS5ZNSgwLCJtaWdyYXRpb25TdGF0dXNDYW5C -ZUNoYW5nZWQiLHMpCnJldHVybiBxfSwKZ0woKXtyZXR1cm4gdGhpcy5yfX0KQS5EOC5wcm90b3R5cGU9 -e30KQS5POS5wcm90b3R5cGU9ewoiWyIoYSl7cmV0dXJuIk5hdmlnYXRpb25UcmVlTm9kZVR5cGUuIit0 -aGlzLmJ9fQpBLkdiLnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4iVW5pdE1pZ3JhdGlvblN0YXR1cy4i -K3RoaXMuYn19CkEuTEwucHJvdG90eXBlPXsKTHQoKXtyZXR1cm4gQS5FRihbIm5vZGVJZCIsdGhpcy5i -LCJraW5kIix0aGlzLmEuYV0sdC5OLHQuWCl9fQpBLk1ELnByb3RvdHlwZT17CiQxKGEpe3JldHVybiB0 -LmdwLmEoYSkuYT09PXRoaXMuYS5xKDAsImtpbmQiKX0sCiRTOjQ5fQpBLkg3LnByb3RvdHlwZT17CiJb -IihhKXtyZXR1cm4iSGludEFjdGlvbktpbmQuIit0aGlzLmJ9fQpBLmxJLnByb3RvdHlwZT17CldPKGEs -Yil7dmFyIHMscixxPXQuZDQKQS5ZRigiYWJzb2x1dGUiLEEuUUkoW2IsbnVsbCxudWxsLG51bGwsbnVs -bCxudWxsLG51bGxdLHEpKQpzPXRoaXMuYQpzPXMuWXIoYik+MCYmIXMuaEsoYikKaWYocylyZXR1cm4g -YgpzPUEuYWIoKQpyPUEuUUkoW3MsYixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0scSkKQS5Z -Rigiam9pbiIscikKcmV0dXJuIHRoaXMuSVAobmV3IEEudTYocix0LmVKKSl9LAp6ZihhKXt2YXIgcyxy -LHE9QS5DTChhLHRoaXMuYSkKcS5JVigpCnM9cS5kCnI9cy5sZW5ndGgKaWYocj09PTApe3M9cS5iCnJl -dHVybiBzPT1udWxsPyIuIjpzfWlmKHI9PT0xKXtzPXEuYgpyZXR1cm4gcz09bnVsbD8iLiI6c31pZigw -Pj1yKXJldHVybiBBLk9IKHMsLTEpCnMucG9wKCkKcz1xLmUKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEEu -T0gocywtMSkKcy5wb3AoKQpxLklWKCkKcmV0dXJuIHFbIlsiXSgwKX0sCklQKGEpe3ZhciBzLHIscSxw -LG8sbixtLGwsayxqCnQuTy5hKGEpCmZvcihzPWEuJHRpLHI9cy5DKCJhMihjWC5FKSIpLmEobmV3IEEu -cTcoKSkscT1hLmdBKGEpLHM9bmV3IEEuU08ocSxyLHMuQygiU088Y1guRT4iKSkscj10aGlzLmEscD0h -MSxvPSExLG49IiI7cy5HKCk7KXttPXEuZ2woKQppZihyLmhLKG0pJiZvKXtsPUEuQ0wobSxyKQprPW4u -Y2hhckNvZGVBdCgwKT09MD9uOm4Kbj1CLnhCLk5qKGssMCxyLlNwKGssITApKQpsLmI9bgppZihyLmRz -KG4pKUIuTm0uWTUobC5lLDAsci5nbUkoKSkKbj0iIitsWyJbIl0oMCl9ZWxzZSBpZihyLllyKG0pPjAp -e289IXIuaEsobSkKbj0iIittfWVsc2V7aj1tLmxlbmd0aAppZihqIT09MCl7aWYoMD49ailyZXR1cm4g -QS5PSChtLDApCmo9ci5VZChtWzBdKX1lbHNlIGo9ITEKaWYoIWopaWYocCluKz1yLmdtSSgpCm4rPW19 -cD1yLmRzKG0pfXJldHVybiBuLmNoYXJDb2RlQXQoMCk9PTA/bjpufSwKbzUoYSl7dmFyIHMKaWYoIXRo -aXMueTMoYSkpcmV0dXJuIGEKcz1BLkNMKGEsdGhpcy5hKQpzLnJSKCkKcmV0dXJuIHNbIlsiXSgwKX0s -CnkzKGEpe3ZhciBzLHIscSxwLG8sbixtLGwsaz10aGlzLmEsaj1rLllyKGEpCmlmKGohPT0wKXtpZihr -PT09JC5LaygpKWZvcihzPTA7czxqOysrcylpZihCLnhCLlcoYSxzKT09PTQ3KXJldHVybiEwCnI9agpx -PTQ3fWVsc2V7cj0wCnE9bnVsbH1mb3IocD1uZXcgQS5xaihhKS5hLG89cC5sZW5ndGgscz1yLG49bnVs -bDtzPG87KytzLG49cSxxPW0pe209Qi54Qi5PKHAscykKaWYoay5yNChtKSl7aWYoaz09PSQuS2soKSYm -bT09PTQ3KXJldHVybiEwCmlmKHEhPW51bGwmJmsucjQocSkpcmV0dXJuITAKaWYocT09PTQ2KWw9bj09 -bnVsbHx8bj09PTQ2fHxrLnI0KG4pCmVsc2UgbD0hMQppZihsKXJldHVybiEwfX1pZihxPT1udWxsKXJl -dHVybiEwCmlmKGsucjQocSkpcmV0dXJuITAKaWYocT09PTQ2KWs9bj09bnVsbHx8ay5yNChuKXx8bj09 -PTQ2CmVsc2Ugaz0hMQppZihrKXJldHVybiEwCnJldHVybiExfSwKSFAoYSxiKXt2YXIgcyxyLHEscCxv -LG4sbSxsPXRoaXMsaz0nVW5hYmxlIHRvIGZpbmQgYSBwYXRoIHRvICInCmI9bC5XTygwLGIpCnM9bC5h -CmlmKHMuWXIoYik8PTAmJnMuWXIoYSk+MClyZXR1cm4gbC5vNShhKQppZihzLllyKGEpPD0wfHxzLmhL -KGEpKWE9bC5XTygwLGEpCmlmKHMuWXIoYSk8PTAmJnMuWXIoYik+MCl0aHJvdyBBLmIoQS5JNyhrK2Er -JyIgZnJvbSAiJytiKyciLicpKQpyPUEuQ0woYixzKQpyLnJSKCkKcT1BLkNMKGEscykKcS5yUigpCnA9 -ci5kCm89cC5sZW5ndGgKaWYobyE9PTApe2lmKDA+PW8pcmV0dXJuIEEuT0gocCwwKQpwPUouUk0ocFsw -XSwiLiIpfWVsc2UgcD0hMQppZihwKXJldHVybiBxWyJbIl0oMCkKcD1yLmIKbz1xLmIKaWYocCE9bylw -PXA9PW51bGx8fG89PW51bGx8fCFzLk5jKHAsbykKZWxzZSBwPSExCmlmKHApcmV0dXJuIHFbIlsiXSgw -KQp3aGlsZSghMCl7cD1yLmQKbz1wLmxlbmd0aAppZihvIT09MCl7bj1xLmQKbT1uLmxlbmd0aAppZiht -IT09MCl7aWYoMD49bylyZXR1cm4gQS5PSChwLDApCnA9cFswXQppZigwPj1tKXJldHVybiBBLk9IKG4s -MCkKbj1zLk5jKHAsblswXSkKcD1ufWVsc2UgcD0hMX1lbHNlIHA9ITEKaWYoIXApYnJlYWsKQi5ObS5X -NChyLmQsMCkKQi5ObS5XNChyLmUsMSkKQi5ObS5XNChxLmQsMCkKQi5ObS5XNChxLmUsMSl9cD1yLmQK -bz1wLmxlbmd0aAppZihvIT09MCl7aWYoMD49bylyZXR1cm4gQS5PSChwLDApCnA9Si5STShwWzBdLCIu -LiIpfWVsc2UgcD0hMQppZihwKXRocm93IEEuYihBLkk3KGsrYSsnIiBmcm9tICInK2IrJyIuJykpCnA9 -dC5OCkIuTm0uVUcocS5kLDAsQS5POChyLmQubGVuZ3RoLCIuLiIsITEscCkpCkIuTm0uWTUocS5lLDAs -IiIpCkIuTm0uVUcocS5lLDEsQS5POChyLmQubGVuZ3RoLHMuZ21JKCksITEscCkpCnM9cS5kCnA9cy5s -ZW5ndGgKaWYocD09PTApcmV0dXJuIi4iCmlmKHA+MSYmSi5STShCLk5tLmdyWihzKSwiLiIpKXtzPXEu -ZAppZigwPj1zLmxlbmd0aClyZXR1cm4gQS5PSChzLC0xKQpzLnBvcCgpCnM9cS5lCmlmKDA+PXMubGVu -Z3RoKXJldHVybiBBLk9IKHMsLTEpCnMucG9wKCkKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEEuT0gocywt -MSkKcy5wb3AoKQpCLk5tLmkocywiIil9cS5iPSIiCnEuSVYoKQpyZXR1cm4gcVsiWyJdKDApfX0KQS5x -Ny5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gQS5uKGEpIT09IiJ9LAokUzo0fQpBLk5vLnByb3RvdHlw -ZT17CiQxKGEpe0EuayhhKQpyZXR1cm4gYT09bnVsbD8ibnVsbCI6JyInK2ErJyInfSwKJFM6NTB9CkEu -ZnYucHJvdG90eXBlPXsKeFooYSl7dmFyIHMscj10aGlzLllyKGEpCmlmKHI+MClyZXR1cm4gQi54Qi5O -aihhLDAscikKaWYodGhpcy5oSyhhKSl7aWYoMD49YS5sZW5ndGgpcmV0dXJuIEEuT0goYSwwKQpzPWFb -MF19ZWxzZSBzPW51bGwKcmV0dXJuIHN9LApOYyhhLGIpe3JldHVybiBhPT09Yn19CkEuV0QucHJvdG90 -eXBlPXsKSVYoKXt2YXIgcyxyLHE9dGhpcwp3aGlsZSghMCl7cz1xLmQKaWYoIShzLmxlbmd0aCE9PTAm -JkouUk0oQi5ObS5ncloocyksIiIpKSlicmVhawpzPXEuZAppZigwPj1zLmxlbmd0aClyZXR1cm4gQS5P -SChzLC0xKQpzLnBvcCgpCnM9cS5lCmlmKDA+PXMubGVuZ3RoKXJldHVybiBBLk9IKHMsLTEpCnMucG9w -KCl9cz1xLmUKcj1zLmxlbmd0aAppZihyIT09MClCLk5tLlk1KHMsci0xLCIiKX0sCnJSKCl7dmFyIHMs -cixxLHAsbyxuLG09dGhpcyxsPUEuUUkoW10sdC5zKQpmb3Iocz1tLmQscj1zLmxlbmd0aCxxPTAscD0w -O3A8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxBLmxrKShzKSwrK3Ape289c1twXQpuPUouaWEobykK -aWYoIShuLkROKG8sIi4iKXx8bi5ETihvLCIiKSkpaWYobi5ETihvLCIuLiIpKXtuPWwubGVuZ3RoCmlm -KG4hPT0wKXtpZigwPj1uKXJldHVybiBBLk9IKGwsLTEpCmwucG9wKCl9ZWxzZSArK3F9ZWxzZSBCLk5t -LmkobCxvKX1pZihtLmI9PW51bGwpQi5ObS5VRyhsLDAsQS5POChxLCIuLiIsITEsdC5OKSkKaWYobC5s -ZW5ndGg9PT0wJiZtLmI9PW51bGwpQi5ObS5pKGwsIi4iKQptLnNuSihsKQpzPW0uYQptLnNQaChBLk84 -KGwubGVuZ3RoKzEscy5nbUkoKSwhMCx0Lk4pKQpyPW0uYgppZihyPT1udWxsfHxsLmxlbmd0aD09PTB8 -fCFzLmRzKHIpKUIuTm0uWTUobS5lLDAsIiIpCnI9bS5iCmlmKHIhPW51bGwmJnM9PT0kLktrKCkpe3Iu -dG9TdHJpbmcKbS5iPUEueXMociwiLyIsIlxcIil9bS5JVigpfSwKIlsiKGEpe3ZhciBzLHIscSxwPXRo -aXMsbz1wLmIKbz1vIT1udWxsPyIiK286IiIKZm9yKHM9MDtzPHAuZC5sZW5ndGg7KytzLG89cSl7cj1w -LmUKaWYoIShzPHIubGVuZ3RoKSlyZXR1cm4gQS5PSChyLHMpCnI9QS5FaihyW3NdKQpxPXAuZAppZigh -KHM8cS5sZW5ndGgpKXJldHVybiBBLk9IKHEscykKcT1vK3IrQS5FaihxW3NdKX1vKz1BLkVqKEIuTm0u -Z3JaKHAuZSkpCnJldHVybiBvLmNoYXJDb2RlQXQoMCk9PTA/bzpvfSwKc25KKGEpe3RoaXMuZD10LmEu -YShhKX0sCnNQaChhKXt0aGlzLmU9dC5hLmEoYSl9fQpBLmR2LnByb3RvdHlwZT17CiJbIihhKXtyZXR1 -cm4iUGF0aEV4Y2VwdGlvbjogIit0aGlzLmF9LAokaVJ6OjF9CkEuekwucHJvdG90eXBlPXsKIlsiKGEp -e3JldHVybiB0aGlzLmdvYyh0aGlzKX19CkEuT0YucHJvdG90eXBlPXsKVWQoYSl7cmV0dXJuIEIueEIu -dGcoYSwiLyIpfSwKcjQoYSl7cmV0dXJuIGE9PT00N30sCmRzKGEpe3ZhciBzPWEubGVuZ3RoCnJldHVy -biBzIT09MCYmQi54Qi5PKGEscy0xKSE9PTQ3fSwKU3AoYSxiKXtpZihhLmxlbmd0aCE9PTAmJkIueEIu -VyhhLDApPT09NDcpcmV0dXJuIDEKcmV0dXJuIDB9LApZcihhKXtyZXR1cm4gdGhpcy5TcChhLCExKX0s -CmhLKGEpe3JldHVybiExfSwKZ29jKCl7cmV0dXJuInBvc2l4In0sCmdtSSgpe3JldHVybiIvIn19CkEu -cnUucHJvdG90eXBlPXsKVWQoYSl7cmV0dXJuIEIueEIudGcoYSwiLyIpfSwKcjQoYSl7cmV0dXJuIGE9 -PT00N30sCmRzKGEpe3ZhciBzPWEubGVuZ3RoCmlmKHM9PT0wKXJldHVybiExCmlmKEIueEIuTyhhLHMt -MSkhPT00NylyZXR1cm4hMApyZXR1cm4gQi54Qi5UYyhhLCI6Ly8iKSYmdGhpcy5ZcihhKT09PXN9LApT -cChhLGIpe3ZhciBzLHIscSxwLG89YS5sZW5ndGgKaWYobz09PTApcmV0dXJuIDAKaWYoQi54Qi5XKGEs -MCk9PT00NylyZXR1cm4gMQpmb3Iocz0wO3M8bzsrK3Mpe3I9Qi54Qi5XKGEscykKaWYocj09PTQ3KXJl -dHVybiAwCmlmKHI9PT01OCl7aWYocz09PTApcmV0dXJuIDAKcT1CLnhCLlhVKGEsIi8iLEIueEIuUWko -YSwiLy8iLHMrMSk/cyszOnMpCmlmKHE8PTApcmV0dXJuIG8KaWYoIWJ8fG88cSszKXJldHVybiBxCmlm -KCFCLnhCLm4oYSwiZmlsZTovLyIpKXJldHVybiBxCmlmKCFBLll1KGEscSsxKSlyZXR1cm4gcQpwPXEr -MwpyZXR1cm4gbz09PXA/cDpxKzR9fXJldHVybiAwfSwKWXIoYSl7cmV0dXJuIHRoaXMuU3AoYSwhMSl9 -LApoSyhhKXtyZXR1cm4gYS5sZW5ndGghPT0wJiZCLnhCLlcoYSwwKT09PTQ3fSwKZ29jKCl7cmV0dXJu -InVybCJ9LApnbUkoKXtyZXR1cm4iLyJ9fQpBLklWLnByb3RvdHlwZT17ClVkKGEpe3JldHVybiBCLnhC -LnRnKGEsIi8iKX0sCnI0KGEpe3JldHVybiBhPT09NDd8fGE9PT05Mn0sCmRzKGEpe3ZhciBzPWEubGVu -Z3RoCmlmKHM9PT0wKXJldHVybiExCnM9Qi54Qi5PKGEscy0xKQpyZXR1cm4hKHM9PT00N3x8cz09PTky -KX0sClNwKGEsYil7dmFyIHMscixxPWEubGVuZ3RoCmlmKHE9PT0wKXJldHVybiAwCnM9Qi54Qi5XKGEs -MCkKaWYocz09PTQ3KXJldHVybiAxCmlmKHM9PT05Mil7aWYocTwyfHxCLnhCLlcoYSwxKSE9PTkyKXJl -dHVybiAxCnI9Qi54Qi5YVShhLCJcXCIsMikKaWYocj4wKXtyPUIueEIuWFUoYSwiXFwiLHIrMSkKaWYo -cj4wKXJldHVybiByfXJldHVybiBxfWlmKHE8MylyZXR1cm4gMAppZighQS5PUyhzKSlyZXR1cm4gMApp -ZihCLnhCLlcoYSwxKSE9PTU4KXJldHVybiAwCnE9Qi54Qi5XKGEsMikKaWYoIShxPT09NDd8fHE9PT05 -MikpcmV0dXJuIDAKcmV0dXJuIDN9LApZcihhKXtyZXR1cm4gdGhpcy5TcChhLCExKX0sCmhLKGEpe3Jl -dHVybiB0aGlzLllyKGEpPT09MX0sCk90KGEsYil7dmFyIHMKaWYoYT09PWIpcmV0dXJuITAKaWYoYT09 -PTQ3KXJldHVybiBiPT09OTIKaWYoYT09PTkyKXJldHVybiBiPT09NDcKaWYoKGFeYikhPT0zMilyZXR1 -cm4hMQpzPWF8MzIKcmV0dXJuIHM+PTk3JiZzPD0xMjJ9LApOYyhhLGIpe3ZhciBzLHIKaWYoYT09PWIp -cmV0dXJuITAKcz1hLmxlbmd0aAppZihzIT09Yi5sZW5ndGgpcmV0dXJuITEKZm9yKHI9MDtyPHM7Kyty -KWlmKCF0aGlzLk90KEIueEIuVyhhLHIpLEIueEIuVyhiLHIpKSlyZXR1cm4hMQpyZXR1cm4hMH0sCmdv -Yygpe3JldHVybiJ3aW5kb3dzIn0sCmdtSSgpe3JldHVybiJcXCJ9fTsoZnVuY3Rpb24gYWxpYXNlcygp -e3ZhciBzPUouR3YucHJvdG90eXBlCnMuVT1zWyJbIl0Kcz1KLnUwLnByb3RvdHlwZQpzLnU9c1siWyJd -CnM9QS5jWC5wcm90b3R5cGUKcy5HRz1zLmV2CnM9QS5NaC5wcm90b3R5cGUKcy54Yj1zWyJbIl0Kcz1B -LmN2LnByb3RvdHlwZQpzLkRXPXMucjYKcz1BLm02LnByb3RvdHlwZQpzLmpGPXMuRWIKcz1BLkU0LnBy -b3RvdHlwZQpzLlVyPXMucQpzLmU0PXMuWTUKcz1BLnZnLnByb3RvdHlwZQpzLmJoPXMuWTV9KSgpOyhm -dW5jdGlvbiBpbnN0YWxsVGVhck9mZnMoKXt2YXIgcz1odW5rSGVscGVycy5fc3RhdGljXzEscj1odW5r -SGVscGVycy5fc3RhdGljXzAscT1odW5rSGVscGVycy5pbnN0YWxsSW5zdGFuY2VUZWFyT2ZmLHA9aHVu -a0hlbHBlcnMuaW5zdGFsbFN0YXRpY1RlYXJPZmYsbz1odW5rSGVscGVycy5faW5zdGFuY2VfMXUKcyhB -LCJFWCIsIlpWIiw1KQpzKEEsInl0Iiwib0EiLDUpCnMoQSwicVciLCJCeiIsNSkKcihBLCJVSSIsImVO -IiwwKQpxKEEuUGYucHJvdG90eXBlLCJnWUoiLDAsMSxudWxsLFsiJDIiLCIkMSJdLFsidzAiLCJwbSJd -LDI4LDAsMCkKcyhBLCJDeSIsIk5DIiwzKQpzKEEsIlBIIiwiTXQiLDIpCnAoQSwicFMiLDQsbnVsbCxb -IiQ0Il0sWyJxRCJdLDYsMCkKcChBLCJWNCIsNCxudWxsLFsiJDQiXSxbIm5aIl0sNiwwKQpvKEEuQXMu -cHJvdG90eXBlLCJndU0iLCJWIiwyKQpzKEEsImlHIiwid1kiLDUzKQpzKEEsIncwIiwiZFUiLDM2KQpz -KEEsImlTIiwiaTYiLDEpfSkoKTsoZnVuY3Rpb24gaW5oZXJpdGFuY2UoKXt2YXIgcz1odW5rSGVscGVy -cy5taXhpbixyPWh1bmtIZWxwZXJzLm1peGluSGFyZCxxPWh1bmtIZWxwZXJzLmluaGVyaXQscD1odW5r -SGVscGVycy5pbmhlcml0TWFueQpxKEEuTWgsbnVsbCkKcChBLk1oLFtBLkZLLEouR3YsSi5tMSxBLmNY -LEEuZVQsQS5YUyxBLm5ZLEEuSGIsQS5hNyxBLkFuLEEuRnUsQS5KQixBLlNVLEEuUmUsQS53dixBLlBu -LEEuV1UsQS5MSSxBLlRwLEEuZjksQS50ZSxBLmJxLEEuWE8sQS5rcixBLllrLEEudmgsQS5ONixBLlZS -LEEuRUssQS5QYixBLnRRLEEuU2QsQS5KYyxBLkcsQS5sWSxBLlczLEEuaWgsQS5GeSxBLkdWLEEuQ3cs -QS5QZixBLkZlLEEudnMsQS5PTSxBLnFoLEEuTU8sQS5rVCxBLnhJLEEubTAsQS5GUCxBLmJuLEEubG0s -QS5sRCxBLktQLEEubGYsQS5XWSxBLlVrLEEuU2gsQS5SdyxBLmJ6LEEuaVAsQS5jayxBLms1LEEuS1ks -QS5DRCxBLmFFLEEuTjMsQS5jOCxBLlpkLEEuTSxBLkRuLEEuUEUsQS5VZixBLmlkLEEuRmssQS5KUSxB -LkdtLEEudkQsQS5tNixBLk93LEEuVzksQS5kVyxBLm1rLEEuS28sQS5pSixBLkU0LEEuZDIsQS5TZSxB -Lk1sLEEueUQsQS53YixBLmo4LEEucXAsQS5tUSxBLlhBLEEuRDgsQS5MTCxBLmxJLEEuekwsQS5XRCxB -LmR2XSkKcChKLkd2LFtKLnlFLEoud2UsSi5NRixKLmpkLEoucUksSi5EcixBLkVUXSkKcChKLk1GLFtK -LnUwLEEuRDAsQS5BeixBLlk4LEEuTmgsQS5hZSxBLklCLEEubjcsQS5lYSxBLmJyLEEuU2csQS51OCxB -Lm5xLEEudEQsQS5oRl0pCnAoSi51MCxbSi5pQyxKLmtkLEouYzVdKQpxKEouUG8sSi5qZCkKcChKLnFJ -LFtKLkw3LEoua0RdKQpwKEEuY1gsW0EuQlIsQS5iUSxBLmkxLEEuVTUsQS5BTSxBLnU2LEEuWFIsQS5t -VyxBLnVuXSkKcChBLkJSLFtBLlp5LEEuUUNdKQpxKEEub2wsQS5aeSkKcShBLlVxLEEuUUMpCnEoQS5q -VixBLlVxKQpwKEEuWFMsW0EuYyxBLkV6LEEuYXosQS52VixBLkVxLEEuQzYsQS5rUyxBLlVkLEEuRixB -LkFULEEubXAsQS51YixBLmRzLEEubGosQS5VVixBLnAsQS5RV10pCnEoQS51eSxBLm5ZKQpwKEEudXks -W0EudzIsQS53eixBLmU3XSkKcShBLnFqLEEudzIpCnAoQS5iUSxbQS5hTCxBLk1CLEEuaTVdKQpwKEEu -YUwsW0EubkgsQS5sSixBLmk4XSkKcShBLnh5LEEuaTEpCnAoQS5BbixbQS5NSCxBLlNPLEEuVTFdKQpx -KEEuZDUsQS5BTSkKcShBLlJVLEEuUG4pCnEoQS5HaixBLlJVKQpxKEEuUEQsQS5HaikKcShBLkxQLEEu -V1UpCnAoQS5UcCxbQS5FMSxBLkF5LEEubGMsQS5kQyxBLlZYLEEudGgsQS5oYSxBLldNLEEucFYsQS5q -WixBLkI1LEEuT1IsQS55USxBLlJaLEEuYzYsQS5xZCxBLkN2LEEudk4sQS5VdixBLkVnLEEuRW8sQS5X -ayxBLklBLEEuR0UsQS5ONyxBLnVRLEEuRFYsQS5QQyxBLlFTLEEubnAsQS5VdCxBLmFOLEEuYjAsQS5l -LEEub1osQS5qcixBLnk4LEEuSGksQS5CVCxBLlBZLEEuTCxBLld4LEEuSG8sQS5JQyxBLmZDLEEuVG0s -QS51ZSxBLkdILEEuUE4sQS5WUyxBLlRELEEuSWYsQS50QixBLm0yLEEuTUQsQS5xNyxBLk5vXSkKcChB -LkUxLFtBLkNqLEEud04sQS5TWCxBLkdzLEEuVTcsQS5yYSxBLnRpLEEuV0YsQS5uMSxBLmNTLEEuVkMs -QS5KVCxBLk1FLEEueTUsQS55SSxBLktTLEEuQTMsQS5mbSxBLkUyLEEuamcsQS5xbCxBLkVFXSkKcShB -LlcwLEEuRXopCnAoQS5sYyxbQS56eCxBLnJUXSkKcShBLmtZLEEuQzYpCnEoQS5pbCxBLllrKQpwKEEu -aWwsW0EuTjUsQS51dyxBLmNmLEEuU3ldKQpwKEEubVcsW0EuS1csQS5xNF0pCnEoQS5MWixBLkVUKQpw -KEEuTFosW0EuUkcsQS5XQl0pCnEoQS5WUCxBLlJHKQpxKEEuRGcsQS5WUCkKcShBLlpHLEEuV0IpCnEo -QS5QZyxBLlpHKQpwKEEuUGcsW0EueGosQS5kRSxBLlpBLEEuZFQsQS5QcSxBLmVFLEEuVjZdKQpxKEEu -aU0sQS5rUykKcChBLkF5LFtBLlZzLEEuRnQsQS55SCxBLmRhLEEub1EsQS52cixBLnJ0LEEuS0YsQS5a -TCxBLlJULEEucnEsQS5SVyxBLnVPLEEuRXYsQS5WcCxBLnhyLEEuTnosQS5WVyxBLm5ULEEuTlksQS5R -TF0pCnEoQS5aZixBLlBmKQpxKEEuSmksQS5tMCkKcShBLlh2LEEuRlApCnEoQS5iNixBLlh2KQpxKEEu -VmosQS5XWSkKcChBLlVrLFtBLkNWLEEuWmksQS5ieV0pCnEoQS53SSxBLmtUKQpwKEEud0ksW0EuVTgs -QS5vaixBLk14LEEuRTMsQS5HWV0pCnEoQS5LOCxBLlVkKQpxKEEudHUsQS5TaCkKcShBLnU1LEEuWmkp -CnAoQS5BVCxbQS5iSixBLmVZXSkKcShBLnFlLEEuRG4pCnAoQS5EMCxbQS5LVixBLndhLEEuSzUsQS5D -bV0pCnAoQS5LVixbQS5jdixBLm54LEEuUUYsQS5DUV0pCnAoQS5jdixbQS5xRSxBLmhpXSkKcChBLnFF -LFtBLkdoLEEuZlksQS5yWixBLlFQLEEuaDQsQS5TTixBLmxwLEEuVGIsQS5JdixBLldQLEEueVldKQpx -KEEub0osQS5ZOCkKcShBLmhILEEuQXopCnEoQS5WYixBLlFGKQpxKEEuZkosQS53YSkKcChBLmVhLFtB -Lnc2LEEuZXddKQpxKEEuQWosQS53NikKcShBLkFyLEEubnEpCnEoQS5CSCxBLkFyKQpxKEEudzQsQS5J -QikKcShBLnVmLEEudEQpCnEoQS5yaCxBLnVmKQpxKEEuaTcsQS5jZikKcShBLkFzLEEuVmopCnAoQS5B -cyxbQS5JNCxBLktlXSkKcShBLlJPLEEucWgpCnEoQS5DcSxBLlJPKQpxKEEueEMsQS5NTykKcShBLmN0 -LEEubTYpCnEoQS5CZixBLmlKKQpwKEEuRTQsW0EucjcsQS52Z10pCnEoQS5UeixBLnZnKQpxKEEubmQs -QS5oaSkKcChBLkQ4LFtBLnZ0LEEuY0RdKQpwKEEuY2ssW0EuTzksQS5HYixBLkg3XSkKcShBLmZ2LEEu -ekwpCnAoQS5mdixbQS5PRixBLnJ1LEEuSVZdKQpzKEEudzIsQS5SZSkKcyhBLlFDLEEubEQpCnMoQS5S -RyxBLmxEKQpzKEEuVlAsQS5TVSkKcyhBLldCLEEubEQpCnMoQS5aRyxBLlNVKQpzKEEublksQS5sRCkK -cyhBLldZLEEubGYpCnMoQS5SVSxBLktQKQpzKEEuRlAsQS5sZikKcyhBLlk4LEEuaWQpCnMoQS5ucSxB -LmxEKQpzKEEuQXIsQS5HbSkKcyhBLnRELEEubEQpCnMoQS51ZixBLkdtKQpyKEEudmcsQS5sRCl9KSgp -CnZhciB2PXt0eXBlVW5pdmVyc2U6e2VDOm5ldyBNYXAoKSx0Ujp7fSxlVDp7fSx0UFY6e30sc0VBOltd -fSxtYW5nbGVkR2xvYmFsTmFtZXM6e0lqOiJpbnQiLENQOiJkb3VibGUiLFpaOiJudW0iLHFVOiJTdHJp -bmciLGEyOiJib29sIixjODoiTnVsbCIsek06Ikxpc3QifSxtYW5nbGVkTmFtZXM6e30sdHlwZXM6WyJ+ -KCkiLCJ+KEFqKSIsInFVKHFVKSIsIkAoQCkiLCJhMihxVSkiLCJ+KH4oKSkiLCJhMihjdixxVSxxVSxK -USkiLCJjOChAKSIsImM4KCkiLCJ+KE1oPyxNaD8pIiwiQCgpIiwifihxVSxAKSIsIn4objYscVUsSWop -IiwifihxVSxxVSkiLCJhMihrRikiLCJ+KE9sPHFVPikiLCJjOChlYSkiLCJiODx+PihBaikiLCJ+KGN2 -KSIsIn4ocVUsSWopIiwiSWooSWosSWopIiwifihAKSIsIn4ocVUscVU/KSIsIm42KEAsQCkiLCJjOChA -LEd6KSIsImEyKEtWKSIsIn4oSWosQCkiLCJ+KGVhKSIsIn4oTWhbR3o/XSkiLCJjOChNaCxHeikiLCJ+ -KEtWLEtWPykiLCJ+KEAsQCkiLCJjOChALEApIiwiYTIoT2w8cVU+KSIsInZzPEA+KEApIiwicjcoQCki -LCJNaD8oQCkiLCJFNChAKSIsIkxMKEApIiwiWjA8cVUsTWg/PihMTCkiLCJjOCh+KCkpIiwiQChxVSki -LCJjOChaMDxxVSxNaD8+PykiLCJjOChNaCxAKSIsIn4oR0QsQCkiLCJ+KGV3KSIsInFVKFowPEAsQD4p -IiwiWjA8cVUscVU+KFowPHFVLHFVPixxVSkiLCJJaihJaixOMzxxVSx6TTxqOD4+KSIsImEyKEg3KSIs -InFVKHFVPykiLCJAKEAscVUpIiwifihxVSxJaj8pIiwiTWg/KE1oPykiLCJUejxAPihAKSJdLGludGVy -Y2VwdG9yc0J5VGFnOm51bGwsbGVhZlRhZ3M6bnVsbCxhcnJheVJ0aTpTeW1ib2woIiR0aSIpfQpBLnhi -KHYudHlwZVVuaXZlcnNlLEpTT04ucGFyc2UoJ3siaUMiOiJ1MCIsImtkIjoidTAiLCJjNSI6InUwIiwi -cngiOiJlYSIsImU1IjoiZWEiLCJZMCI6ImhpIiwidHAiOiJoaSIsIkc4IjoiZXciLCJNciI6InFFIiwi -ZUwiOiJxRSIsIkkwIjoiS1YiLCJocyI6IktWIiwiWGciOiJRRiIsIm5yIjoiQWoiLCJ5NCI6Inc2Iiwi -ZE4iOiJDbSIsInhjIjoibngiLCJrSiI6Im54IiwielUiOiJEZyIsImRmIjoiRVQiLCJ5RSI6eyJhMiI6 -W119LCJ3ZSI6eyJjOCI6W119LCJ1MCI6eyJ2bSI6W119LCJqZCI6eyJ6TSI6WyIxIl0sImJRIjpbIjEi -XSwiY1giOlsiMSJdfSwiUG8iOnsiamQiOlsiMSJdLCJ6TSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsi -MSJdfSwibTEiOnsiQW4iOlsiMSJdfSwicUkiOnsiQ1AiOltdLCJaWiI6W119LCJMNyI6eyJDUCI6W10s -IklqIjpbXSwiWloiOltdfSwia0QiOnsiQ1AiOltdLCJaWiI6W119LCJEciI6eyJxVSI6W10sInZYIjpb -XX0sIkJSIjp7ImNYIjpbIjIiXX0sImVUIjp7IkFuIjpbIjIiXX0sIlp5Ijp7IkJSIjpbIjEiLCIyIl0s -ImNYIjpbIjIiXSwiY1guRSI6IjIifSwib2wiOnsiWnkiOlsiMSIsIjIiXSwiQlIiOlsiMSIsIjIiXSwi -YlEiOlsiMiJdLCJjWCI6WyIyIl0sImNYLkUiOiIyIn0sIlVxIjp7ImxEIjpbIjIiXSwiek0iOlsiMiJd -LCJCUiI6WyIxIiwiMiJdLCJiUSI6WyIyIl0sImNYIjpbIjIiXX0sImpWIjp7IlVxIjpbIjEiLCIyIl0s -ImxEIjpbIjIiXSwiek0iOlsiMiJdLCJCUiI6WyIxIiwiMiJdLCJiUSI6WyIyIl0sImNYIjpbIjIiXSwi -bEQuRSI6IjIiLCJjWC5FIjoiMiJ9LCJjIjp7IlhTIjpbXX0sInFqIjp7ImxEIjpbIklqIl0sIlJlIjpb -IklqIl0sInpNIjpbIklqIl0sImJRIjpbIklqIl0sImNYIjpbIklqIl0sImxELkUiOiJJaiIsIlJlLkUi -OiJJaiJ9LCJiUSI6eyJjWCI6WyIxIl19LCJhTCI6eyJiUSI6WyIxIl0sImNYIjpbIjEiXX0sIm5IIjp7 -ImFMIjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl0sImFMLkUiOiIxIiwiY1guRSI6IjEifSwiYTci -OnsiQW4iOlsiMSJdfSwiaTEiOnsiY1giOlsiMiJdLCJjWC5FIjoiMiJ9LCJ4eSI6eyJpMSI6WyIxIiwi -MiJdLCJiUSI6WyIyIl0sImNYIjpbIjIiXSwiY1guRSI6IjIifSwiTUgiOnsiQW4iOlsiMiJdfSwibEoi -OnsiYUwiOlsiMiJdLCJiUSI6WyIyIl0sImNYIjpbIjIiXSwiYUwuRSI6IjIiLCJjWC5FIjoiMiJ9LCJV -NSI6eyJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIlNPIjp7IkFuIjpbIjEiXX0sIkFNIjp7ImNYIjpbIjEi -XSwiY1guRSI6IjEifSwiZDUiOnsiQU0iOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXSwiY1guRSI6 -IjEifSwiVTEiOnsiQW4iOlsiMSJdfSwiTUIiOnsiYlEiOlsiMSJdLCJjWCI6WyIxIl0sImNYLkUiOiIx -In0sIkZ1Ijp7IkFuIjpbIjEiXX0sInU2Ijp7ImNYIjpbIjEiXSwiY1guRSI6IjEifSwiSkIiOnsiQW4i -OlsiMSJdfSwidzIiOnsibEQiOlsiMSJdLCJSZSI6WyIxIl0sInpNIjpbIjEiXSwiYlEiOlsiMSJdLCJj -WCI6WyIxIl19LCJ3diI6eyJHRCI6W119LCJQRCI6eyJHaiI6WyIxIiwiMiJdLCJSVSI6WyIxIiwiMiJd -LCJQbiI6WyIxIiwiMiJdLCJLUCI6WyIxIiwiMiJdLCJaMCI6WyIxIiwiMiJdfSwiV1UiOnsiWjAiOlsi -MSIsIjIiXX0sIkxQIjp7IldVIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl19LCJYUiI6eyJjWCI6WyIx -Il0sImNYLkUiOiIxIn0sIkxJIjp7InZRIjpbXX0sIlcwIjp7IkV6IjpbXSwiWFMiOltdfSwiYXoiOnsi -WFMiOltdfSwidlYiOnsiWFMiOltdfSwidGUiOnsiUnoiOltdfSwiWE8iOnsiR3oiOltdfSwiVHAiOnsi -RUgiOltdfSwiQXkiOnsiRUgiOltdfSwiRTEiOnsiRUgiOltdfSwibGMiOnsiRUgiOltdfSwiengiOnsi -RUgiOltdfSwiclQiOnsiRUgiOltdfSwiRXEiOnsiWFMiOltdfSwia1kiOnsiWFMiOltdfSwiTjUiOnsi -WWsiOlsiMSIsIjIiXSwiRm8iOlsiMSIsIjIiXSwiWjAiOlsiMSIsIjIiXSwiWWsuSyI6IjEiLCJZay5W -IjoiMiJ9LCJpNSI6eyJiUSI6WyIxIl0sImNYIjpbIjEiXSwiY1guRSI6IjEifSwiTjYiOnsiQW4iOlsi -MSJdfSwiVlIiOnsid0wiOltdLCJ2WCI6W119LCJFSyI6eyJpYiI6W10sIk9kIjpbXX0sIktXIjp7ImNY -IjpbImliIl0sImNYLkUiOiJpYiJ9LCJQYiI6eyJBbiI6WyJpYiJdfSwidFEiOnsiT2QiOltdfSwidW4i -OnsiY1giOlsiT2QiXSwiY1guRSI6Ik9kIn0sIlNkIjp7IkFuIjpbIk9kIl19LCJFVCI6eyJBUyI6W119 -LCJMWiI6eyJYaiI6WyIxIl0sIkVUIjpbXSwiQVMiOltdfSwiRGciOnsibEQiOlsiQ1AiXSwiWGoiOlsi -Q1AiXSwiek0iOlsiQ1AiXSwiRVQiOltdLCJiUSI6WyJDUCJdLCJBUyI6W10sImNYIjpbIkNQIl0sIlNV -IjpbIkNQIl0sImxELkUiOiJDUCJ9LCJQZyI6eyJsRCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6TSI6WyJJ -aiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1UiOlsiSWoiXX0sInhq -Ijp7ImxEIjpbIklqIl0sIlhqIjpbIklqIl0sInpNIjpbIklqIl0sIkVUIjpbXSwiYlEiOlsiSWoiXSwi -QVMiOltdLCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJsRC5FIjoiSWoifSwiZEUiOnsibEQiOlsiSWoi -XSwiWGoiOlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJdLCJBUyI6W10sImNYIjpb -IklqIl0sIlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJaQSI6eyJsRCI6WyJJaiJdLCJYaiI6WyJJaiJd -LCJ6TSI6WyJJaiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpbXSwiY1giOlsiSWoiXSwiU1UiOlsi -SWoiXSwibEQuRSI6IklqIn0sImRUIjp7ImxEIjpbIklqIl0sIlhqIjpbIklqIl0sInpNIjpbIklqIl0s -IkVUIjpbXSwiYlEiOlsiSWoiXSwiQVMiOltdLCJjWCI6WyJJaiJdLCJTVSI6WyJJaiJdLCJsRC5FIjoi -SWoifSwiUHEiOnsibEQiOlsiSWoiXSwiWGoiOlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6 -WyJJaiJdLCJBUyI6W10sImNYIjpbIklqIl0sIlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJlRSI6eyJs -RCI6WyJJaiJdLCJYaiI6WyJJaiJdLCJ6TSI6WyJJaiJdLCJFVCI6W10sImJRIjpbIklqIl0sIkFTIjpb -XSwiY1giOlsiSWoiXSwiU1UiOlsiSWoiXSwibEQuRSI6IklqIn0sIlY2Ijp7ImxEIjpbIklqIl0sIm42 -IjpbXSwiWGoiOlsiSWoiXSwiek0iOlsiSWoiXSwiRVQiOltdLCJiUSI6WyJJaiJdLCJBUyI6W10sImNY -IjpbIklqIl0sIlNVIjpbIklqIl0sImxELkUiOiJJaiJ9LCJrUyI6eyJYUyI6W119LCJpTSI6eyJFeiI6 -W10sIlhTIjpbXX0sInZzIjp7ImI4IjpbIjEiXX0sIkdWIjp7IkFuIjpbIjEiXX0sInE0Ijp7ImNYIjpb -IjEiXSwiY1guRSI6IjEifSwiQ3ciOnsiWFMiOltdfSwiWmYiOnsiUGYiOlsiMSJdfSwibTAiOnsiUW0i -OltdfSwiSmkiOnsibTAiOltdLCJRbSI6W119LCJiNiI6eyJsZiI6WyIxIl0sIk9sIjpbIjEiXSwiYlEi -OlsiMSJdLCJjWCI6WyIxIl0sImxmLkUiOiIxIn0sImxtIjp7IkFuIjpbIjEiXX0sIm1XIjp7ImNYIjpb -IjEiXX0sInV5Ijp7ImxEIjpbIjEiXSwiek0iOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXX0sImls -Ijp7IllrIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl19LCJZayI6eyJaMCI6WyIxIiwiMiJdfSwiUG4i -OnsiWjAiOlsiMSIsIjIiXX0sIkdqIjp7IlJVIjpbIjEiLCIyIl0sIlBuIjpbIjEiLCIyIl0sIktQIjpb -IjEiLCIyIl0sIlowIjpbIjEiLCIyIl19LCJWaiI6eyJsZiI6WyIxIl0sIk9sIjpbIjEiXSwiYlEiOlsi -MSJdLCJjWCI6WyIxIl19LCJYdiI6eyJsZiI6WyIxIl0sIk9sIjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6 -WyIxIl19LCJ1dyI6eyJZayI6WyJxVSIsIkAiXSwiWjAiOlsicVUiLCJAIl0sIllrLksiOiJxVSIsIllr -LlYiOiJAIn0sImk4Ijp7ImFMIjpbInFVIl0sImJRIjpbInFVIl0sImNYIjpbInFVIl0sImFMLkUiOiJx -VSIsImNYLkUiOiJxVSJ9LCJDViI6eyJVayI6WyJ6TTxJaj4iLCJxVSJdLCJVay5TIjoiek08SWo+In0s -IlU4Ijp7IndJIjpbInpNPElqPiIsInFVIl19LCJaaSI6eyJVayI6WyJxVSIsInpNPElqPiJdfSwiVWQi -OnsiWFMiOltdfSwiSzgiOnsiWFMiOltdfSwiYnkiOnsiVWsiOlsiTWg/IiwicVUiXSwiVWsuUyI6Ik1o -PyJ9LCJvaiI6eyJ3SSI6WyJNaD8iLCJxVSJdfSwiTXgiOnsid0kiOlsicVUiLCJNaD8iXX0sInU1Ijp7 -IlVrIjpbInFVIiwiek08SWo+Il0sIlVrLlMiOiJxVSJ9LCJFMyI6eyJ3SSI6WyJxVSIsInpNPElqPiJd -fSwiR1kiOnsid0kiOlsiek08SWo+IiwicVUiXX0sIkNQIjp7IlpaIjpbXX0sIklqIjp7IlpaIjpbXX0s -InpNIjp7ImJRIjpbIjEiXSwiY1giOlsiMSJdfSwiaWIiOnsiT2QiOltdfSwiT2wiOnsiYlEiOlsiMSJd -LCJjWCI6WyIxIl19LCJxVSI6eyJ2WCI6W119LCJDNiI6eyJYUyI6W119LCJFeiI6eyJYUyI6W119LCJG -Ijp7IlhTIjpbXX0sIkFUIjp7IlhTIjpbXX0sImJKIjp7IlhTIjpbXX0sImVZIjp7IlhTIjpbXX0sIm1w -Ijp7IlhTIjpbXX0sInViIjp7IlhTIjpbXX0sImRzIjp7IlhTIjpbXX0sImxqIjp7IlhTIjpbXX0sIlVW -Ijp7IlhTIjpbXX0sIms1Ijp7IlhTIjpbXX0sIktZIjp7IlhTIjpbXX0sInAiOnsiWFMiOltdfSwiQ0Qi -OnsiUnoiOltdfSwiYUUiOnsiUnoiOltdfSwiWmQiOnsiR3oiOltdfSwiTSI6eyJCTCI6W119LCJEbiI6 -eyJpRCI6W119LCJVZiI6eyJpRCI6W119LCJxZSI6eyJpRCI6W119LCJjdiI6eyJLViI6W10sIkQwIjpb -XX0sImZKIjp7IkQwIjpbXX0sIkFqIjp7ImVhIjpbXX0sIktWIjp7IkQwIjpbXX0sImV3Ijp7ImVhIjpb -XX0sIkpRIjp7ImtGIjpbXX0sInFFIjp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJHaCI6eyJjdiI6 -W10sIktWIjpbXSwiRDAiOltdfSwiZlkiOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sInJaIjp7ImN2 -IjpbXSwiS1YiOltdLCJEMCI6W119LCJRUCI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwibngiOnsi -S1YiOltdLCJEMCI6W119LCJRRiI6eyJLViI6W10sIkQwIjpbXX0sIklCIjp7InRuIjpbIlpaIl19LCJ3 -eiI6eyJsRCI6WyIxIl0sInpNIjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl0sImxELkUiOiIxIn0s -ImhIIjp7IkF6IjpbXX0sImg0Ijp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJWYiI6eyJLViI6W10s -IkQwIjpbXX0sIndhIjp7IkQwIjpbXX0sImU3Ijp7ImxEIjpbIktWIl0sInpNIjpbIktWIl0sImJRIjpb -IktWIl0sImNYIjpbIktWIl0sImxELkUiOiJLViJ9LCJCSCI6eyJsRCI6WyJLViJdLCJHbSI6WyJLViJd -LCJ6TSI6WyJLViJdLCJYaiI6WyJLViJdLCJiUSI6WyJLViJdLCJjWCI6WyJLViJdLCJsRC5FIjoiS1Yi -LCJHbS5FIjoiS1YifSwiU04iOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sImxwIjp7ImN2IjpbXSwi -S1YiOltdLCJEMCI6W119LCJUYiI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwiSXYiOnsiY3YiOltd -LCJLViI6W10sIkQwIjpbXX0sIldQIjp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJ5WSI6eyJjdiI6 -W10sIktWIjpbXSwiRDAiOltdfSwidzYiOnsiZWEiOltdfSwiSzUiOnsidjYiOltdLCJEMCI6W119LCJD -bSI6eyJEMCI6W119LCJDUSI6eyJLViI6W10sIkQwIjpbXX0sInc0Ijp7InRuIjpbIlpaIl19LCJyaCI6 -eyJsRCI6WyJLViJdLCJHbSI6WyJLViJdLCJ6TSI6WyJLViJdLCJYaiI6WyJLViJdLCJiUSI6WyJLViJd -LCJjWCI6WyJLViJdLCJsRC5FIjoiS1YiLCJHbS5FIjoiS1YifSwiY2YiOnsiWWsiOlsicVUiLCJxVSJd -LCJaMCI6WyJxVSIsInFVIl19LCJpNyI6eyJZayI6WyJxVSIsInFVIl0sIlowIjpbInFVIiwicVUiXSwi -WWsuSyI6InFVIiwiWWsuViI6InFVIn0sIlN5Ijp7IllrIjpbInFVIiwicVUiXSwiWjAiOlsicVUiLCJx -VSJdLCJZay5LIjoicVUiLCJZay5WIjoicVUifSwiSTQiOnsibGYiOlsicVUiXSwiT2wiOlsicVUiXSwi -YlEiOlsicVUiXSwiY1giOlsicVUiXSwibGYuRSI6InFVIn0sIlJPIjp7InFoIjpbIjEiXX0sIkNxIjp7 -IlJPIjpbIjEiXSwicWgiOlsiMSJdfSwieEMiOnsiTU8iOlsiMSJdfSwidkQiOnsia0YiOltdfSwibTYi -Onsia0YiOltdfSwiY3QiOnsia0YiOltdfSwiT3ciOnsia0YiOltdfSwiVzkiOnsiQW4iOlsiMSJdfSwi -ZFciOnsidjYiOltdLCJEMCI6W119LCJtayI6eyJ5MCI6W119LCJLbyI6eyJvbiI6W119LCJBcyI6eyJs -ZiI6WyJxVSJdLCJPbCI6WyJxVSJdLCJiUSI6WyJxVSJdLCJjWCI6WyJxVSJdfSwicjciOnsiRTQiOltd -fSwiVHoiOnsibEQiOlsiMSJdLCJ6TSI6WyIxIl0sImJRIjpbIjEiXSwiRTQiOltdLCJjWCI6WyIxIl0s -ImxELkUiOiIxIn0sIm5kIjp7ImhpIjpbXSwiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sIktlIjp7Imxm -IjpbInFVIl0sIk9sIjpbInFVIl0sImJRIjpbInFVIl0sImNYIjpbInFVIl0sImxmLkUiOiJxVSJ9LCJo -aSI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwiUVciOnsiWFMiOltdLCJSeiI6W119LCJYQSI6eyJr -RiI6W119LCJ2dCI6eyJEOCI6W119LCJjRCI6eyJEOCI6W119LCJkdiI6eyJSeiI6W119LCJPRiI6eyJm -diI6W119LCJydSI6eyJmdiI6W119LCJJViI6eyJmdiI6W119LCJuNiI6eyJ6TSI6WyJJaiJdLCJiUSI6 -WyJJaiJdLCJjWCI6WyJJaiJdLCJBUyI6W119fScpKQpBLkZGKHYudHlwZVVuaXZlcnNlLEpTT04ucGFy -c2UoJ3sidzIiOjEsIlFDIjoyLCJMWiI6MSwia1QiOjIsIm1XIjoxLCJ1eSI6MSwiaWwiOjIsIlZqIjox -LCJYdiI6MSwiblkiOjEsIldZIjoxLCJGUCI6MSwidmciOjF9JykpCnZhciB1PXtsOiJDYW5ub3QgZXh0 -cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgVVJJIHdpdGggYSBmcmFnbWVudCBjb21wb25lbnQiLGk6IkNh -bm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSBVUkkgd2l0aCBhIHF1ZXJ5IGNvbXBvbmVudCIs -ajoiQ2Fubm90IGV4dHJhY3QgYSBub24tV2luZG93cyBmaWxlIHBhdGggZnJvbSBhIGZpbGUgVVJJIHdp -dGggYW4gYXV0aG9yaXR5IixjOiJFcnJvciBoYW5kbGVyIG11c3QgYWNjZXB0IG9uZSBPYmplY3Qgb3Ig -b25lIE9iamVjdCBhbmQgYSBTdGFja1RyYWNlIGFzIGFyZ3VtZW50cywgYW5kIHJldHVybiBhIHZhbHVl -IG9mIHRoZSByZXR1cm5lZCBmdXR1cmUncyB0eXBlIixkOiJhcmVhLWFuYWx5emVyLGFuYWx5emVyLW5u -YmQtbWlncmF0aW9uLHR5cGUtYnVnIn0KdmFyIHQ9KGZ1bmN0aW9uIHJ0aWkoKXt2YXIgcz1BLk4wCnJl -dHVybnticTpzKCJHaCIpLG46cygiQ3ciKSxjUjpzKCJyWiIpLHc6cygiQXoiKSxyOnMoIlFQIiksZ0Y6 -cygiUEQ8R0QsQD4iKSxVOnMoImJRPEA+IiksaDpzKCJjdiIpLHU6cygiWFMiKSxCOnMoImVhIiksZzg6 -cygiUnoiKSxjODpzKCJoSCIpLFk6cygiRUgiKSxpOnMoImI4PEA+IiksSjpzKCJMTCIpLGdwOnMoIkg3 -IikseDpzKCJTZyIpLG86cygidlEiKSxlaDpzKCJjWDxLVj4iKSxPOnMoImNYPHFVPiIpLGs6cygiY1g8 -QD4iKSxmQTpzKCJqZDxTZT4iKSxnaTpzKCJqZDxqOD4iKSxkOnMoImpkPFowPHFVLE1oPz4+IiksZmg6 -cygiamQ8RDg+IiksRDpzKCJqZDxrRj4iKSxzOnMoImpkPHFVPiIpLGhoOnMoImpkPHlEPiIpLGFKOnMo -ImpkPHdiPiIpLGdOOnMoImpkPG42PiIpLGI6cygiamQ8QD4iKSx0OnMoImpkPElqPiIpLGQ0OnMoImpk -PHFVPz4iKSxUOnMoIndlIiksZUg6cygidm0iKSxFOnMoImM1IiksYVU6cygiWGo8QD4iKSxhbTpzKCJU -ejxAPiIpLGVvOnMoIk41PEdELEA+IiksZHo6cygiaEYiKSxmNDpzKCJ6TTxqOD4iKSxhUzpzKCJ6TTxa -MDxxVSxNaD8+PiIpLGV3OnMoInpNPE1oPiIpLGE6cygiek08cVU+IiksajpzKCJ6TTxAPiIpLEw6cygi -ek08SWo+IiksVzpzKCJ6TTxNaD8+IiksRjpzKCJ1OCIpLGVlOnMoIk4zPHFVLHpNPGo4Pj4iKSxoNjpz -KCJaMDxxVSxNaD4iKSxJOnMoIlowPHFVLHFVPiIpLGY6cygiWjA8QCxAPiIpLEc6cygiWjA8cVUsTWg/ -PiIpLGR2OnMoImxKPHFVLHFVPiIpLGRvOnMoImxKPHFVLEA+IiksVjpzKCJBaiIpLGRFOnMoIkVUIiks -QTpzKCJLViIpLGY2OnMoImtGIiksUDpzKCJjOCIpLEs6cygiTWgiKSxwOnMoImV3IikscTpzKCJ0bjxa -Wj4iKSxmdjpzKCJ3TCIpLGN6OnMoImliIiksYU86cygibmQiKSxDOnMoIk9sPHFVPiIpLGw6cygiR3oi -KSxOOnMoInFVIiksZEc6cygicVUocVUpIiksZzc6cygiaGkiKSxmbzpzKCJHRCIpLGFXOnMoInlZIiks -ZUs6cygiRXoiKSxhazpzKCJBUyIpLGdjOnMoIm42IiksYkk6cygia2QiKSxkdzpzKCJHajxxVSxxVT4i -KSxkRDpzKCJpRCIpLGVKOnMoInU2PHFVPiIpLGc0OnMoIks1IiksY2k6cygidjYiKSxnMjpzKCJDbSIp -LGJqOnMoIlpmPGZKPiIpLGg5OnMoIkNRIiksYWM6cygiZTciKSxROnMoIkNxPEFqPiIpLFI6cygid3o8 -Y3Y+IiksYW86cygidnM8Zko+IiksYzpzKCJ2czxAPiIpLGZKOnMoInZzPElqPiIpLGNyOnMoIkpRIiks -eTpzKCJhMiIpLGFsOnMoImEyKE1oKSIpLGdSOnMoIkNQIiksejpzKCJAIiksZk86cygiQCgpIiksdjpz -KCJAKE1oKSIpLG06cygiQChNaCxHeikiKSxiVTpzKCJAKE9sPHFVPikiKSxkTzpzKCJAKHFVKSIpLGI4 -OnMoIkAoQCxAKSIpLFM6cygiSWoiKSxhdzpzKCIwJioiKSxfOnMoIk1oKiIpLGNoOnMoIkQwPyIpLGJH -OnMoImI4PGM4Pj8iKSxlczpzKCJFND8iKSxiTTpzKCJ6TTxAPj8iKSxncTpzKCJ6TTxNaD8+PyIpLGM5 -OnMoIlowPHFVLEA+PyIpLGZuOnMoIlowPHFVLE1oPz4/IiksWDpzKCJNaD8iKSxkazpzKCJxVT8iKSxl -OnMoIkZlPEAsQD4/IiksZzpzKCJibj8iKSxiNzpzKCJhMihNaCk/IiksYnc6cygiQChlYSk/IiksZlY6 -cygiTWg/KE1oPyxNaD8pPyIpLGRBOnMoIk1oPyhAKT8iKSxaOnMoIn4oKT8iKSxneDpzKCJ+KGV3KT8i -KSxkaTpzKCJaWiIpLEg6cygifiIpLE06cygifigpIiksZUE6cygifihxVSxxVSkiKSxjQTpzKCJ+KHFV -LEApIil9fSkoKTsoZnVuY3Rpb24gY29uc3RhbnRzKCl7dmFyIHM9aHVua0hlbHBlcnMubWFrZUNvbnN0 -TGlzdApCLnhuPUEuR2gucHJvdG90eXBlCkIuUlk9QS5RUC5wcm90b3R5cGUKQi5tSD1BLmFlLnByb3Rv -dHlwZQpCLkJaPUEuVmIucHJvdG90eXBlCkIuRHQ9QS5mSi5wcm90b3R5cGUKQi5Paz1KLkd2LnByb3Rv -dHlwZQpCLk5tPUouamQucHJvdG90eXBlCkIuam49Si5MNy5wcm90b3R5cGUKQi5DRD1KLnFJLnByb3Rv -dHlwZQpCLnhCPUouRHIucHJvdG90eXBlCkIuREc9Si5jNS5wcm90b3R5cGUKQi5VYj1KLk1GLnByb3Rv -dHlwZQpCLkV4PUEudTgucHJvdG90eXBlCkIuTkE9QS5WNi5wcm90b3R5cGUKQi50NT1BLkJILnByb3Rv -dHlwZQpCLkx0PUEuU04ucHJvdG90eXBlCkIuWlE9Si5pQy5wcm90b3R5cGUKQi5JZT1BLlRiLnByb3Rv -dHlwZQpCLnZCPUoua2QucHJvdG90eXBlCkIub2w9QS5LNS5wcm90b3R5cGUKQi55OD1uZXcgQS5VOCgp -CkIuaDk9bmV3IEEuQ1YoKQpCLkd3PW5ldyBBLkZ1KEEuTjAoIkZ1PDAmPiIpKQpCLk80PWZ1bmN0aW9u -IGdldFRhZ0ZhbGxiYWNrKG8pIHsKICB2YXIgcyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2Fs -bChvKTsKICByZXR1cm4gcy5zdWJzdHJpbmcoOCwgcy5sZW5ndGggLSAxKTsKfQpCLllxPWZ1bmN0aW9u -KCkgewogIHZhciB0b1N0cmluZ0Z1bmN0aW9uID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICBm -dW5jdGlvbiBnZXRUYWcobykgewogICAgdmFyIHMgPSB0b1N0cmluZ0Z1bmN0aW9uLmNhbGwobyk7CiAg -ICByZXR1cm4gcy5zdWJzdHJpbmcoOCwgcy5sZW5ndGggLSAxKTsKICB9CiAgZnVuY3Rpb24gZ2V0VW5r -bm93blRhZyhvYmplY3QsIHRhZykgewogICAgaWYgKC9eSFRNTFtBLVpdLipFbGVtZW50JC8udGVzdCh0 -YWcpKSB7CiAgICAgIHZhciBuYW1lID0gdG9TdHJpbmdGdW5jdGlvbi5jYWxsKG9iamVjdCk7CiAgICAg -IGlmIChuYW1lID09ICJbb2JqZWN0IE9iamVjdF0iKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuICJI -VE1MRWxlbWVudCI7CiAgICB9CiAgfQogIGZ1bmN0aW9uIGdldFVua25vd25UYWdHZW5lcmljQnJvd3Nl -cihvYmplY3QsIHRhZykgewogICAgaWYgKHNlbGYuSFRNTEVsZW1lbnQgJiYgb2JqZWN0IGluc3RhbmNl -b2YgSFRNTEVsZW1lbnQpIHJldHVybiAiSFRNTEVsZW1lbnQiOwogICAgcmV0dXJuIGdldFVua25vd25U -YWcob2JqZWN0LCB0YWcpOwogIH0KICBmdW5jdGlvbiBwcm90b3R5cGVGb3JUYWcodGFnKSB7CiAgICBp -ZiAodHlwZW9mIHdpbmRvdyA9PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CiAgICBpZiAodHlwZW9m -IHdpbmRvd1t0YWddID09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKICAgIHZhciBjb25zdHJ1Y3Rv -ciA9IHdpbmRvd1t0YWddOwogICAgaWYgKHR5cGVvZiBjb25zdHJ1Y3RvciAhPSAiZnVuY3Rpb24iKSBy -ZXR1cm4gbnVsbDsKICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7CiAgfQogIGZ1bmN0aW9u -IGRpc2NyaW1pbmF0b3IodGFnKSB7IHJldHVybiBudWxsOyB9CiAgdmFyIGlzQnJvd3NlciA9IHR5cGVv -ZiBuYXZpZ2F0b3IgPT0gIm9iamVjdCI7CiAgcmV0dXJuIHsKICAgIGdldFRhZzogZ2V0VGFnLAogICAg -Z2V0VW5rbm93blRhZzogaXNCcm93c2VyID8gZ2V0VW5rbm93blRhZ0dlbmVyaWNCcm93c2VyIDogZ2V0 -VW5rbm93blRhZywKICAgIHByb3RvdHlwZUZvclRhZzogcHJvdG90eXBlRm9yVGFnLAogICAgZGlzY3Jp -bWluYXRvcjogZGlzY3JpbWluYXRvciB9Owp9CkIud2I9ZnVuY3Rpb24oZ2V0VGFnRmFsbGJhY2spIHsK -ICByZXR1cm4gZnVuY3Rpb24oaG9va3MpIHsKICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9ICJvYmpl -Y3QiKSByZXR1cm4gaG9va3M7CiAgICB2YXIgdWEgPSBuYXZpZ2F0b3IudXNlckFnZW50OwogICAgaWYg -KHVhLmluZGV4T2YoIkR1bXBSZW5kZXJUcmVlIikgPj0gMCkgcmV0dXJuIGhvb2tzOwogICAgaWYgKHVh -LmluZGV4T2YoIkNocm9tZSIpID49IDApIHsKICAgICAgZnVuY3Rpb24gY29uZmlybShwKSB7CiAgICAg -ICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT0gIm9iamVjdCIgJiYgd2luZG93W3BdICYmIHdpbmRvd1tw -XS5uYW1lID09IHA7CiAgICAgIH0KICAgICAgaWYgKGNvbmZpcm0oIldpbmRvdyIpICYmIGNvbmZpcm0o -IkhUTUxFbGVtZW50IikpIHJldHVybiBob29rczsKICAgIH0KICAgIGhvb2tzLmdldFRhZyA9IGdldFRh -Z0ZhbGxiYWNrOwogIH07Cn0KQi5LVT1mdW5jdGlvbihob29rcykgewogIGlmICh0eXBlb2YgZGFydEV4 -cGVyaW1lbnRhbEZpeHVwR2V0VGFnICE9ICJmdW5jdGlvbiIpIHJldHVybiBob29rczsKICBob29rcy5n -ZXRUYWcgPSBkYXJ0RXhwZXJpbWVudGFsRml4dXBHZXRUYWcoaG9va3MuZ2V0VGFnKTsKfQpCLmZRPWZ1 -bmN0aW9uKGhvb2tzKSB7CiAgdmFyIGdldFRhZyA9IGhvb2tzLmdldFRhZzsKICB2YXIgcHJvdG90eXBl -Rm9yVGFnID0gaG9va3MucHJvdG90eXBlRm9yVGFnOwogIGZ1bmN0aW9uIGdldFRhZ0ZpeGVkKG8pIHsK -ICAgIHZhciB0YWcgPSBnZXRUYWcobyk7CiAgICBpZiAodGFnID09ICJEb2N1bWVudCIpIHsKICAgICAg -aWYgKCEhby54bWxWZXJzaW9uKSByZXR1cm4gIiFEb2N1bWVudCI7CiAgICAgIHJldHVybiAiIUhUTUxE -b2N1bWVudCI7CiAgICB9CiAgICByZXR1cm4gdGFnOwogIH0KICBmdW5jdGlvbiBwcm90b3R5cGVGb3JU -YWdGaXhlZCh0YWcpIHsKICAgIGlmICh0YWcgPT0gIkRvY3VtZW50IikgcmV0dXJuIG51bGw7CiAgICBy -ZXR1cm4gcHJvdG90eXBlRm9yVGFnKHRhZyk7CiAgfQogIGhvb2tzLmdldFRhZyA9IGdldFRhZ0ZpeGVk -OwogIGhvb2tzLnByb3RvdHlwZUZvclRhZyA9IHByb3RvdHlwZUZvclRhZ0ZpeGVkOwp9CkIuZGs9ZnVu -Y3Rpb24oaG9va3MpIHsKICB2YXIgdXNlckFnZW50ID0gdHlwZW9mIG5hdmlnYXRvciA9PSAib2JqZWN0 -IiA/IG5hdmlnYXRvci51c2VyQWdlbnQgOiAiIjsKICBpZiAodXNlckFnZW50LmluZGV4T2YoIkZpcmVm -b3giKSA9PSAtMSkgcmV0dXJuIGhvb2tzOwogIHZhciBnZXRUYWcgPSBob29rcy5nZXRUYWc7CiAgdmFy -IHF1aWNrTWFwID0gewogICAgIkJlZm9yZVVubG9hZEV2ZW50IjogIkV2ZW50IiwKICAgICJEYXRhVHJh -bnNmZXIiOiAiQ2xpcGJvYXJkIiwKICAgICJHZW9HZW9sb2NhdGlvbiI6ICJHZW9sb2NhdGlvbiIsCiAg -ICAiTG9jYXRpb24iOiAiIUxvY2F0aW9uIiwKICAgICJXb3JrZXJNZXNzYWdlRXZlbnQiOiAiTWVzc2Fn -ZUV2ZW50IiwKICAgICJYTUxEb2N1bWVudCI6ICIhRG9jdW1lbnQifTsKICBmdW5jdGlvbiBnZXRUYWdG -aXJlZm94KG8pIHsKICAgIHZhciB0YWcgPSBnZXRUYWcobyk7CiAgICByZXR1cm4gcXVpY2tNYXBbdGFn -XSB8fCB0YWc7CiAgfQogIGhvb2tzLmdldFRhZyA9IGdldFRhZ0ZpcmVmb3g7Cn0KQi54aT1mdW5jdGlv -bihob29rcykgewogIHZhciB1c2VyQWdlbnQgPSB0eXBlb2YgbmF2aWdhdG9yID09ICJvYmplY3QiID8g -bmF2aWdhdG9yLnVzZXJBZ2VudCA6ICIiOwogIGlmICh1c2VyQWdlbnQuaW5kZXhPZigiVHJpZGVudC8i -KSA9PSAtMSkgcmV0dXJuIGhvb2tzOwogIHZhciBnZXRUYWcgPSBob29rcy5nZXRUYWc7CiAgdmFyIHF1 -aWNrTWFwID0gewogICAgIkJlZm9yZVVubG9hZEV2ZW50IjogIkV2ZW50IiwKICAgICJEYXRhVHJhbnNm -ZXIiOiAiQ2xpcGJvYXJkIiwKICAgICJIVE1MRERFbGVtZW50IjogIkhUTUxFbGVtZW50IiwKICAgICJI -VE1MRFRFbGVtZW50IjogIkhUTUxFbGVtZW50IiwKICAgICJIVE1MUGhyYXNlRWxlbWVudCI6ICJIVE1M -RWxlbWVudCIsCiAgICAiUG9zaXRpb24iOiAiR2VvcG9zaXRpb24iCiAgfTsKICBmdW5jdGlvbiBnZXRU -YWdJRShvKSB7CiAgICB2YXIgdGFnID0gZ2V0VGFnKG8pOwogICAgdmFyIG5ld1RhZyA9IHF1aWNrTWFw -W3RhZ107CiAgICBpZiAobmV3VGFnKSByZXR1cm4gbmV3VGFnOwogICAgaWYgKHRhZyA9PSAiT2JqZWN0 -IikgewogICAgICBpZiAod2luZG93LkRhdGFWaWV3ICYmIChvIGluc3RhbmNlb2Ygd2luZG93LkRhdGFW -aWV3KSkgcmV0dXJuICJEYXRhVmlldyI7CiAgICB9CiAgICByZXR1cm4gdGFnOwogIH0KICBmdW5jdGlv -biBwcm90b3R5cGVGb3JUYWdJRSh0YWcpIHsKICAgIHZhciBjb25zdHJ1Y3RvciA9IHdpbmRvd1t0YWdd -OwogICAgaWYgKGNvbnN0cnVjdG9yID09IG51bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIGNvbnN0 -cnVjdG9yLnByb3RvdHlwZTsKICB9CiAgaG9va3MuZ2V0VGFnID0gZ2V0VGFnSUU7CiAgaG9va3MucHJv -dG90eXBlRm9yVGFnID0gcHJvdG90eXBlRm9yVGFnSUU7Cn0KQi5pNz1mdW5jdGlvbihob29rcykgeyBy -ZXR1cm4gaG9va3M7IH0KCkIuQ3Q9bmV3IEEuYnkoKQpCLkVxPW5ldyBBLms1KCkKQi56dD1uZXcgQS5I -YigpCkIueE09bmV3IEEudTUoKQpCLlFrPW5ldyBBLkUzKCkKQi5Odj1uZXcgQS5rcigpCkIuTlU9bmV3 -IEEuSmkoKQpCLnBkPW5ldyBBLlpkKCkKQi5BMz1uZXcgQS5NeChudWxsKQpCLm5YPW5ldyBBLm9qKG51 -bGwpCkIuYWs9QS5RSShzKFswLDAsMzI3NzYsMzM3OTIsMSwxMDI0MCwwLDBdKSx0LnQpCkIuY209QS5R -SShzKFsiKjo6Y2xhc3MiLCIqOjpkaXIiLCIqOjpkcmFnZ2FibGUiLCIqOjpoaWRkZW4iLCIqOjppZCIs -Iio6OmluZXJ0IiwiKjo6aXRlbXByb3AiLCIqOjppdGVtcmVmIiwiKjo6aXRlbXNjb3BlIiwiKjo6bGFu -ZyIsIio6OnNwZWxsY2hlY2siLCIqOjp0aXRsZSIsIio6OnRyYW5zbGF0ZSIsIkE6OmFjY2Vzc2tleSIs -IkE6OmNvb3JkcyIsIkE6OmhyZWZsYW5nIiwiQTo6bmFtZSIsIkE6OnNoYXBlIiwiQTo6dGFiaW5kZXgi -LCJBOjp0YXJnZXQiLCJBOjp0eXBlIiwiQVJFQTo6YWNjZXNza2V5IiwiQVJFQTo6YWx0IiwiQVJFQTo6 -Y29vcmRzIiwiQVJFQTo6bm9ocmVmIiwiQVJFQTo6c2hhcGUiLCJBUkVBOjp0YWJpbmRleCIsIkFSRUE6 -OnRhcmdldCIsIkFVRElPOjpjb250cm9scyIsIkFVRElPOjpsb29wIiwiQVVESU86Om1lZGlhZ3JvdXAi -LCJBVURJTzo6bXV0ZWQiLCJBVURJTzo6cHJlbG9hZCIsIkJETzo6ZGlyIiwiQk9EWTo6YWxpbmsiLCJC -T0RZOjpiZ2NvbG9yIiwiQk9EWTo6bGluayIsIkJPRFk6OnRleHQiLCJCT0RZOjp2bGluayIsIkJSOjpj -bGVhciIsIkJVVFRPTjo6YWNjZXNza2V5IiwiQlVUVE9OOjpkaXNhYmxlZCIsIkJVVFRPTjo6bmFtZSIs -IkJVVFRPTjo6dGFiaW5kZXgiLCJCVVRUT046OnR5cGUiLCJCVVRUT046OnZhbHVlIiwiQ0FOVkFTOjpo -ZWlnaHQiLCJDQU5WQVM6OndpZHRoIiwiQ0FQVElPTjo6YWxpZ24iLCJDT0w6OmFsaWduIiwiQ09MOjpj -aGFyIiwiQ09MOjpjaGFyb2ZmIiwiQ09MOjpzcGFuIiwiQ09MOjp2YWxpZ24iLCJDT0w6OndpZHRoIiwi -Q09MR1JPVVA6OmFsaWduIiwiQ09MR1JPVVA6OmNoYXIiLCJDT0xHUk9VUDo6Y2hhcm9mZiIsIkNPTEdS -T1VQOjpzcGFuIiwiQ09MR1JPVVA6OnZhbGlnbiIsIkNPTEdST1VQOjp3aWR0aCIsIkNPTU1BTkQ6OmNo -ZWNrZWQiLCJDT01NQU5EOjpjb21tYW5kIiwiQ09NTUFORDo6ZGlzYWJsZWQiLCJDT01NQU5EOjpsYWJl -bCIsIkNPTU1BTkQ6OnJhZGlvZ3JvdXAiLCJDT01NQU5EOjp0eXBlIiwiREFUQTo6dmFsdWUiLCJERUw6 -OmRhdGV0aW1lIiwiREVUQUlMUzo6b3BlbiIsIkRJUjo6Y29tcGFjdCIsIkRJVjo6YWxpZ24iLCJETDo6 -Y29tcGFjdCIsIkZJRUxEU0VUOjpkaXNhYmxlZCIsIkZPTlQ6OmNvbG9yIiwiRk9OVDo6ZmFjZSIsIkZP -TlQ6OnNpemUiLCJGT1JNOjphY2NlcHQiLCJGT1JNOjphdXRvY29tcGxldGUiLCJGT1JNOjplbmN0eXBl -IiwiRk9STTo6bWV0aG9kIiwiRk9STTo6bmFtZSIsIkZPUk06Om5vdmFsaWRhdGUiLCJGT1JNOjp0YXJn -ZXQiLCJGUkFNRTo6bmFtZSIsIkgxOjphbGlnbiIsIkgyOjphbGlnbiIsIkgzOjphbGlnbiIsIkg0Ojph -bGlnbiIsIkg1OjphbGlnbiIsIkg2OjphbGlnbiIsIkhSOjphbGlnbiIsIkhSOjpub3NoYWRlIiwiSFI6 -OnNpemUiLCJIUjo6d2lkdGgiLCJIVE1MOjp2ZXJzaW9uIiwiSUZSQU1FOjphbGlnbiIsIklGUkFNRTo6 -ZnJhbWVib3JkZXIiLCJJRlJBTUU6OmhlaWdodCIsIklGUkFNRTo6bWFyZ2luaGVpZ2h0IiwiSUZSQU1F -OjptYXJnaW53aWR0aCIsIklGUkFNRTo6d2lkdGgiLCJJTUc6OmFsaWduIiwiSU1HOjphbHQiLCJJTUc6 -OmJvcmRlciIsIklNRzo6aGVpZ2h0IiwiSU1HOjpoc3BhY2UiLCJJTUc6OmlzbWFwIiwiSU1HOjpuYW1l -IiwiSU1HOjp1c2VtYXAiLCJJTUc6OnZzcGFjZSIsIklNRzo6d2lkdGgiLCJJTlBVVDo6YWNjZXB0Iiwi -SU5QVVQ6OmFjY2Vzc2tleSIsIklOUFVUOjphbGlnbiIsIklOUFVUOjphbHQiLCJJTlBVVDo6YXV0b2Nv -bXBsZXRlIiwiSU5QVVQ6OmF1dG9mb2N1cyIsIklOUFVUOjpjaGVja2VkIiwiSU5QVVQ6OmRpc2FibGVk -IiwiSU5QVVQ6OmlucHV0bW9kZSIsIklOUFVUOjppc21hcCIsIklOUFVUOjpsaXN0IiwiSU5QVVQ6Om1h -eCIsIklOUFVUOjptYXhsZW5ndGgiLCJJTlBVVDo6bWluIiwiSU5QVVQ6Om11bHRpcGxlIiwiSU5QVVQ6 -Om5hbWUiLCJJTlBVVDo6cGxhY2Vob2xkZXIiLCJJTlBVVDo6cmVhZG9ubHkiLCJJTlBVVDo6cmVxdWly -ZWQiLCJJTlBVVDo6c2l6ZSIsIklOUFVUOjpzdGVwIiwiSU5QVVQ6OnRhYmluZGV4IiwiSU5QVVQ6OnR5 -cGUiLCJJTlBVVDo6dXNlbWFwIiwiSU5QVVQ6OnZhbHVlIiwiSU5TOjpkYXRldGltZSIsIktFWUdFTjo6 -ZGlzYWJsZWQiLCJLRVlHRU46OmtleXR5cGUiLCJLRVlHRU46Om5hbWUiLCJMQUJFTDo6YWNjZXNza2V5 -IiwiTEFCRUw6OmZvciIsIkxFR0VORDo6YWNjZXNza2V5IiwiTEVHRU5EOjphbGlnbiIsIkxJOjp0eXBl -IiwiTEk6OnZhbHVlIiwiTElOSzo6c2l6ZXMiLCJNQVA6Om5hbWUiLCJNRU5VOjpjb21wYWN0IiwiTUVO -VTo6bGFiZWwiLCJNRU5VOjp0eXBlIiwiTUVURVI6OmhpZ2giLCJNRVRFUjo6bG93IiwiTUVURVI6Om1h -eCIsIk1FVEVSOjptaW4iLCJNRVRFUjo6dmFsdWUiLCJPQkpFQ1Q6OnR5cGVtdXN0bWF0Y2giLCJPTDo6 -Y29tcGFjdCIsIk9MOjpyZXZlcnNlZCIsIk9MOjpzdGFydCIsIk9MOjp0eXBlIiwiT1BUR1JPVVA6OmRp -c2FibGVkIiwiT1BUR1JPVVA6OmxhYmVsIiwiT1BUSU9OOjpkaXNhYmxlZCIsIk9QVElPTjo6bGFiZWwi -LCJPUFRJT046OnNlbGVjdGVkIiwiT1BUSU9OOjp2YWx1ZSIsIk9VVFBVVDo6Zm9yIiwiT1VUUFVUOjpu -YW1lIiwiUDo6YWxpZ24iLCJQUkU6OndpZHRoIiwiUFJPR1JFU1M6Om1heCIsIlBST0dSRVNTOjptaW4i -LCJQUk9HUkVTUzo6dmFsdWUiLCJTRUxFQ1Q6OmF1dG9jb21wbGV0ZSIsIlNFTEVDVDo6ZGlzYWJsZWQi -LCJTRUxFQ1Q6Om11bHRpcGxlIiwiU0VMRUNUOjpuYW1lIiwiU0VMRUNUOjpyZXF1aXJlZCIsIlNFTEVD -VDo6c2l6ZSIsIlNFTEVDVDo6dGFiaW5kZXgiLCJTT1VSQ0U6OnR5cGUiLCJUQUJMRTo6YWxpZ24iLCJU -QUJMRTo6Ymdjb2xvciIsIlRBQkxFOjpib3JkZXIiLCJUQUJMRTo6Y2VsbHBhZGRpbmciLCJUQUJMRTo6 -Y2VsbHNwYWNpbmciLCJUQUJMRTo6ZnJhbWUiLCJUQUJMRTo6cnVsZXMiLCJUQUJMRTo6c3VtbWFyeSIs -IlRBQkxFOjp3aWR0aCIsIlRCT0RZOjphbGlnbiIsIlRCT0RZOjpjaGFyIiwiVEJPRFk6OmNoYXJvZmYi -LCJUQk9EWTo6dmFsaWduIiwiVEQ6OmFiYnIiLCJURDo6YWxpZ24iLCJURDo6YXhpcyIsIlREOjpiZ2Nv -bG9yIiwiVEQ6OmNoYXIiLCJURDo6Y2hhcm9mZiIsIlREOjpjb2xzcGFuIiwiVEQ6OmhlYWRlcnMiLCJU -RDo6aGVpZ2h0IiwiVEQ6Om5vd3JhcCIsIlREOjpyb3dzcGFuIiwiVEQ6OnNjb3BlIiwiVEQ6OnZhbGln -biIsIlREOjp3aWR0aCIsIlRFWFRBUkVBOjphY2Nlc3NrZXkiLCJURVhUQVJFQTo6YXV0b2NvbXBsZXRl -IiwiVEVYVEFSRUE6OmNvbHMiLCJURVhUQVJFQTo6ZGlzYWJsZWQiLCJURVhUQVJFQTo6aW5wdXRtb2Rl -IiwiVEVYVEFSRUE6Om5hbWUiLCJURVhUQVJFQTo6cGxhY2Vob2xkZXIiLCJURVhUQVJFQTo6cmVhZG9u -bHkiLCJURVhUQVJFQTo6cmVxdWlyZWQiLCJURVhUQVJFQTo6cm93cyIsIlRFWFRBUkVBOjp0YWJpbmRl -eCIsIlRFWFRBUkVBOjp3cmFwIiwiVEZPT1Q6OmFsaWduIiwiVEZPT1Q6OmNoYXIiLCJURk9PVDo6Y2hh -cm9mZiIsIlRGT09UOjp2YWxpZ24iLCJUSDo6YWJiciIsIlRIOjphbGlnbiIsIlRIOjpheGlzIiwiVEg6 -OmJnY29sb3IiLCJUSDo6Y2hhciIsIlRIOjpjaGFyb2ZmIiwiVEg6OmNvbHNwYW4iLCJUSDo6aGVhZGVy -cyIsIlRIOjpoZWlnaHQiLCJUSDo6bm93cmFwIiwiVEg6OnJvd3NwYW4iLCJUSDo6c2NvcGUiLCJUSDo6 -dmFsaWduIiwiVEg6OndpZHRoIiwiVEhFQUQ6OmFsaWduIiwiVEhFQUQ6OmNoYXIiLCJUSEVBRDo6Y2hh -cm9mZiIsIlRIRUFEOjp2YWxpZ24iLCJUUjo6YWxpZ24iLCJUUjo6Ymdjb2xvciIsIlRSOjpjaGFyIiwi -VFI6OmNoYXJvZmYiLCJUUjo6dmFsaWduIiwiVFJBQ0s6OmRlZmF1bHQiLCJUUkFDSzo6a2luZCIsIlRS -QUNLOjpsYWJlbCIsIlRSQUNLOjpzcmNsYW5nIiwiVUw6OmNvbXBhY3QiLCJVTDo6dHlwZSIsIlZJREVP -Ojpjb250cm9scyIsIlZJREVPOjpoZWlnaHQiLCJWSURFTzo6bG9vcCIsIlZJREVPOjptZWRpYWdyb3Vw -IiwiVklERU86Om11dGVkIiwiVklERU86OnByZWxvYWQiLCJWSURFTzo6d2lkdGgiXSksdC5zKQpCLlZD -PUEuUUkocyhbMCwwLDY1NDkwLDQ1MDU1LDY1NTM1LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpCLm1L -PUEuUUkocyhbMCwwLDI2NjI0LDEwMjMsNjU1MzQsMjA0Nyw2NTUzNCwyMDQ3XSksdC50KQpCLmN3PW5l -dyBBLkdiKDAsImFscmVhZHlNaWdyYXRlZCIpCkIuZGM9bmV3IEEuR2IoMSwiaW5kZXRlcm1pbmF0ZSIp -CkIuV0Q9bmV3IEEuR2IoMiwibWlncmF0aW5nIikKQi5Yaj1uZXcgQS5HYigzLCJvcHRpbmdPdXQiKQpC -LldHPUEuUUkocyhbQi5jdyxCLmRjLEIuV0QsQi5Yal0pLEEuTjAoImpkPEdiPiIpKQpCLlNxPUEuUUko -cyhbIkhFQUQiLCJBUkVBIiwiQkFTRSIsIkJBU0VGT05UIiwiQlIiLCJDT0wiLCJDT0xHUk9VUCIsIkVN -QkVEIiwiRlJBTUUiLCJGUkFNRVNFVCIsIkhSIiwiSU1BR0UiLCJJTUciLCJJTlBVVCIsIklTSU5ERVgi -LCJMSU5LIiwiTUVUQSIsIlBBUkFNIiwiU09VUkNFIiwiU1RZTEUiLCJUSVRMRSIsIldCUiJdKSx0LnMp -CkIuZG49QS5RSShzKFtdKSxBLk4wKCJqZDxMTD4iKSkKQi54RD1BLlFJKHMoW10pLHQucykKQi5oVT1B -LlFJKHMoW10pLHQuYikKQi5BZD1uZXcgQS5INygwLCJhZGROdWxsYWJsZUhpbnQiKQpCLm5lPW5ldyBB -Lkg3KDEsImFkZE5vbk51bGxhYmxlSGludCIpCkIubXk9bmV3IEEuSDcoMiwiY2hhbmdlVG9OdWxsYWJs -ZUhpbnQiKQpCLnJ4PW5ldyBBLkg3KDMsImNoYW5nZVRvTm9uTnVsbGFibGVIaW50IikKQi53Vj1uZXcg -QS5INyg0LCJyZW1vdmVOdWxsYWJsZUhpbnQiKQpCLmZSPW5ldyBBLkg3KDUsInJlbW92ZU5vbk51bGxh -YmxlSGludCIpCkIuTW09QS5RSShzKFtCLkFkLEIubmUsQi5teSxCLnJ4LEIud1YsQi5mUl0pLEEuTjAo -ImpkPEg3PiIpKQpCLnRvPUEuUUkocyhbMCwwLDMyNzIyLDEyMjg3LDY1NTM0LDM0ODE1LDY1NTM0LDE4 -NDMxXSksdC50KQpCLkYzPUEuUUkocyhbMCwwLDI0NTc2LDEwMjMsNjU1MzQsMzQ4MTUsNjU1MzQsMTg0 -MzFdKSx0LnQpCkIuZWE9QS5RSShzKFswLDAsMzI3NTQsMTEyNjMsNjU1MzQsMzQ4MTUsNjU1MzQsMTg0 -MzFdKSx0LnQpCkIuWko9QS5RSShzKFswLDAsMzI3MjIsMTIyODcsNjU1MzUsMzQ4MTUsNjU1MzQsMTg0 -MzFdKSx0LnQpCkIuV2Q9QS5RSShzKFswLDAsNjU0OTAsMTIyODcsNjU1MzUsMzQ4MTUsNjU1MzQsMTg0 -MzFdKSx0LnQpCkIuUXg9QS5RSShzKFsiYmluZCIsImlmIiwicmVmIiwicmVwZWF0Iiwic3ludGF4Il0p -LHQucykKQi5CST1BLlFJKHMoWyJBOjpocmVmIiwiQVJFQTo6aHJlZiIsIkJMT0NLUVVPVEU6OmNpdGUi -LCJCT0RZOjpiYWNrZ3JvdW5kIiwiQ09NTUFORDo6aWNvbiIsIkRFTDo6Y2l0ZSIsIkZPUk06OmFjdGlv -biIsIklNRzo6c3JjIiwiSU5QVVQ6OnNyYyIsIklOUzo6Y2l0ZSIsIlE6OmNpdGUiLCJWSURFTzo6cG9z -dGVyIl0pLHQucykKQi5EeD1uZXcgQS5MUCgwLHt9LEIueEQsQS5OMCgiTFA8cVUsek08ajg+PiIpKQpC -LkNNPW5ldyBBLkxQKDAse30sQi54RCxBLk4wKCJMUDxxVSxxVT4iKSkKQi5pSD1BLlFJKHMoW10pLEEu -TjAoImpkPEdEPiIpKQpCLldPPW5ldyBBLkxQKDAse30sQi5pSCxBLk4wKCJMUDxHRCxAPiIpKQpCLlky -PW5ldyBBLk85KDAsImRpcmVjdG9yeSIpCkIucmY9bmV3IEEuTzkoMSwiZmlsZSIpCkIuVGU9bmV3IEEu -d3YoImNhbGwiKQpCLkx5PUEueHEoIk1oIikKQi5vRT1uZXcgQS5HWSghMSkKQi53UT1uZXcgQS5GeShu -dWxsLDIpfSkoKTsoZnVuY3Rpb24gc3RhdGljRmllbGRzKCl7JC56bT1udWxsCiQueHU9bnVsbAokLmkw -PW51bGwKJC5BbD1udWxsCiQuTkY9bnVsbAokLlRYPW51bGwKJC54Nz1udWxsCiQubnc9bnVsbAokLnZ2 -PW51bGwKJC5Cdj1udWxsCiQuUzY9bnVsbAokLms4PW51bGwKJC5tZz1udWxsCiQuVUQ9ITEKJC5YMz1C -Lk5VCiQuej1BLlFJKFtdLEEuTjAoImpkPE1oPiIpKQokLnhvPW51bGwKJC5CTz1udWxsCiQubHQ9bnVs -bAokLkVVPW51bGwKJC5vcj1BLkZsKHQuTix0LlkpCiQuSVI9bnVsbAokLkk2PW51bGwKJC5GZj1udWxs -fSkoKTsoZnVuY3Rpb24gbGF6eUluaXRpYWxpemVycygpe3ZhciBzPWh1bmtIZWxwZXJzLmxhenlGaW5h -bCxyPWh1bmtIZWxwZXJzLmxhenkKcygkLCJmYSIsInciLCgpPT5BLllnKCJfJGRhcnRfZGFydENsb3N1 -cmUiKSkKcygkLCJLcSIsIlNuIiwoKT0+QS5jTShBLlM3KHsKdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1 -cm4iJHJlY2VpdmVyJCJ9fSkpKQpzKCQsIlluIiwibHEiLCgpPT5BLmNNKEEuUzcoeyRtZXRob2QkOm51 -bGwsCnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIiRyZWNlaXZlciQifX0pKSkKcygkLCJSMSIsIk45 -IiwoKT0+QS5jTShBLlM3KG51bGwpKSkKcygkLCJmTiIsImlJIiwoKT0+QS5jTShmdW5jdGlvbigpe3Zh -ciAkYXJndW1lbnRzRXhwciQ9IiRhcmd1bWVudHMkIgp0cnl7bnVsbC4kbWV0aG9kJCgkYXJndW1lbnRz -RXhwciQpfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKSkKcygkLCJxaSIsIlVOIiwoKT0+QS5j -TShBLlM3KHZvaWQgMCkpKQpzKCQsInB2IiwiWmgiLCgpPT5BLmNNKGZ1bmN0aW9uKCl7dmFyICRhcmd1 -bWVudHNFeHByJD0iJGFyZ3VtZW50cyQiCnRyeXsodm9pZCAwKS4kbWV0aG9kJCgkYXJndW1lbnRzRXhw -ciQpfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKSkKcygkLCJrcSIsInJOIiwoKT0+QS5jTShB -Lk1qKG51bGwpKSkKcygkLCJ0dCIsImMzIiwoKT0+QS5jTShmdW5jdGlvbigpe3RyeXtudWxsLiRtZXRo -b2QkfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKSkKcygkLCJkdCIsIkhLIiwoKT0+QS5jTShB -Lk1qKHZvaWQgMCkpKQpzKCQsIkE3IiwicjEiLCgpPT5BLmNNKGZ1bmN0aW9uKCl7dHJ5eyh2b2lkIDAp -LiRtZXRob2QkfWNhdGNoKHEpe3JldHVybiBxLm1lc3NhZ2V9fSgpKSkKcygkLCJXYyIsInV0IiwoKT0+ -QS54ZygpKQpzKCQsImtoIiwicmYiLCgpPT5uZXcgQS54cigpLiQwKCkpCnMoJCwiZEgiLCJIRyIsKCk9 -Pm5ldyBBLk56KCkuJDAoKSkKcygkLCJoaiIsIlY3IiwoKT0+bmV3IEludDhBcnJheShBLlhGKEEuUUko -Wy0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0y -LC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0xLC0yLC0y -LC0yLC0yLC0yLDYyLC0yLDYyLC0yLDYzLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLC0yLC0y -LC0yLC0xLC0yLC0yLC0yLDAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcs -MTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsLTIsLTIsLTIsLTIsNjMsLTIsMjYsMjcsMjgsMjksMzAsMzEs -MzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEs -LTIsLTIsLTIsLTIsLTJdLHQudCkpKSkKcygkLCJZZSIsIndRIiwoKT0+dHlwZW9mIHByb2Nlc3MhPSJ1 -bmRlZmluZWQiJiZPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2Vzcyk9PSJbb2JqZWN0 -IHByb2Nlc3NdIiYmcHJvY2Vzcy5wbGF0Zm9ybT09IndpbjMyIikKcygkLCJtZiIsIno0IiwoKT0+QS5u -dSgiXltcXC1cXC4wLTlBLVpfYS16fl0qJCIpKQpzKCQsIlgwIiwidDgiLCgpPT5BLkNVKEIuTHkpKQpz -KCQsIk9RIiwidloiLCgpPT5BLktOKCkpCnMoJCwiU0MiLCJBTiIsKCk9PkEudE0oWyJBIiwiQUJCUiIs -IkFDUk9OWU0iLCJBRERSRVNTIiwiQVJFQSIsIkFSVElDTEUiLCJBU0lERSIsIkFVRElPIiwiQiIsIkJE -SSIsIkJETyIsIkJJRyIsIkJMT0NLUVVPVEUiLCJCUiIsIkJVVFRPTiIsIkNBTlZBUyIsIkNBUFRJT04i -LCJDRU5URVIiLCJDSVRFIiwiQ09ERSIsIkNPTCIsIkNPTEdST1VQIiwiQ09NTUFORCIsIkRBVEEiLCJE -QVRBTElTVCIsIkREIiwiREVMIiwiREVUQUlMUyIsIkRGTiIsIkRJUiIsIkRJViIsIkRMIiwiRFQiLCJF -TSIsIkZJRUxEU0VUIiwiRklHQ0FQVElPTiIsIkZJR1VSRSIsIkZPTlQiLCJGT09URVIiLCJGT1JNIiwi -SDEiLCJIMiIsIkgzIiwiSDQiLCJINSIsIkg2IiwiSEVBREVSIiwiSEdST1VQIiwiSFIiLCJJIiwiSUZS -QU1FIiwiSU1HIiwiSU5QVVQiLCJJTlMiLCJLQkQiLCJMQUJFTCIsIkxFR0VORCIsIkxJIiwiTUFQIiwi -TUFSSyIsIk1FTlUiLCJNRVRFUiIsIk5BViIsIk5PQlIiLCJPTCIsIk9QVEdST1VQIiwiT1BUSU9OIiwi -T1VUUFVUIiwiUCIsIlBSRSIsIlBST0dSRVNTIiwiUSIsIlMiLCJTQU1QIiwiU0VDVElPTiIsIlNFTEVD -VCIsIlNNQUxMIiwiU09VUkNFIiwiU1BBTiIsIlNUUklLRSIsIlNUUk9ORyIsIlNVQiIsIlNVTU1BUlki -LCJTVVAiLCJUQUJMRSIsIlRCT0RZIiwiVEQiLCJURVhUQVJFQSIsIlRGT09UIiwiVEgiLCJUSEVBRCIs -IlRJTUUiLCJUUiIsIlRSQUNLIiwiVFQiLCJVIiwiVUwiLCJWQVIiLCJWSURFTyIsIldCUiJdLHQuTikp -CnMoJCwiWDQiLCJoRyIsKCk9PkEubnUoIl5cXFMrJCIpKQpzKCQsIndPIiwib3ciLCgpPT5BLk5EKHNl -bGYpKQpzKCQsImt0IiwiUjgiLCgpPT5BLllnKCJfJGRhcnRfZGFydE9iamVjdCIpKQpzKCQsImZLIiwi -a0kiLCgpPT5mdW5jdGlvbiBEYXJ0T2JqZWN0KGEpe3RoaXMubz1hfSkKcygkLCJxdCIsInpCIiwoKT0+ -bmV3IEEubVEoKSkKcygkLCJDayIsIlVFIiwoKT0+QS5oSyhCLm9sLmdtVyhBLngzKCkpLmhyZWYpLmdo -WSgpLnEoMCwiYXV0aFRva2VuIikpCnMoJCwiaFQiLCJ5UCIsKCk9PkEuWnIoKS5xdWVyeVNlbGVjdG9y -KCIuZWRpdC1saXN0IC5wYW5lbC1jb250ZW50IikpCnMoJCwiYVUiLCJEWiIsKCk9PkEuWnIoKS5xdWVy -eVNlbGVjdG9yKCIuZWRpdC1saXN0IC5wYW5lbC1oZWFkaW5nIikpCnMoJCwiVzYiLCJoTCIsKCk9PkEu -WnIoKS5xdWVyeVNlbGVjdG9yKCIuZWRpdC1wYW5lbCAucGFuZWwtY29udGVudCIpKQpzKCQsIlRSIiwi -RFciLCgpPT5BLlpyKCkucXVlcnlTZWxlY3RvcigiZm9vdGVyIikpCnMoJCwiRVkiLCJmaSIsKCk9PkEu -WnIoKS5xdWVyeVNlbGVjdG9yKCJoZWFkZXIiKSkKcygkLCJiQSIsImMwIiwoKT0+QS5acigpLnF1ZXJ5 -U2VsZWN0b3IoIiNtaWdyYXRlLXVuaXQtc3RhdHVzLWljb24iKSkKcygkLCJ0MCIsImJOIiwoKT0+QS5a -cigpLnF1ZXJ5U2VsZWN0b3IoIiNtaWdyYXRlLXVuaXQtc3RhdHVzLWljb24tbGFiZWwiKSkKcygkLCJh -diIsIkQ5IiwoKT0+QS5acigpLnF1ZXJ5U2VsZWN0b3IoIiN1bml0LW5hbWUiKSkKcigkLCJmZSIsIktH -IiwoKT0+bmV3IEEuWEEoKSkKcygkLCJlbyIsIm5VIiwoKT0+bmV3IEEubEkoQS5OMCgiZnYiKS5hKCQu -SGsoKSkpKQpzKCQsInlyIiwiYkQiLCgpPT5uZXcgQS5PRihBLm51KCIvIiksQS5udSgiW14vXSQiKSxB -Lm51KCJeLyIpKSkKcygkLCJNayIsIktrIiwoKT0+bmV3IEEuSVYoQS5udSgiWy9cXFxcXSIpLEEubnUo -IlteL1xcXFxdJCIpLEEubnUoIl4oXFxcXFxcXFxbXlxcXFxdK1xcXFxbXlxcXFwvXSt8W2EtekEtWl06 -Wy9cXFxcXSkiKSxBLm51KCJeWy9cXFxcXSg/IVsvXFxcXF0pIikpKQpzKCQsImFrIiwiRWIiLCgpPT5u -ZXcgQS5ydShBLm51KCIvIiksQS5udSgiKF5bYS16QS1aXVstKy5hLXpBLVpcXGRdKjovL3xbXi9dKSQi -KSxBLm51KCJbYS16QS1aXVstKy5hLXpBLVpcXGRdKjovL1teL10qIiksQS5udSgiXi8iKSkpCnMoJCwi -bHMiLCJIayIsKCk9PkEuUmgoKSl9KSgpOyhmdW5jdGlvbiBuYXRpdmVTdXBwb3J0KCl7IWZ1bmN0aW9u -KCl7dmFyIHM9ZnVuY3Rpb24oYSl7dmFyIG09e30KbVthXT0xCnJldHVybiBPYmplY3Qua2V5cyhodW5r -SGVscGVycy5jb252ZXJ0VG9GYXN0T2JqZWN0KG0pKVswXX0Kdi5nZXRJc29sYXRlVGFnPWZ1bmN0aW9u -KGEpe3JldHVybiBzKCJfX19kYXJ0XyIrYSt2Lmlzb2xhdGVUYWcpfQp2YXIgcj0iX19fZGFydF9pc29s -YXRlX3RhZ3NfIgp2YXIgcT1PYmplY3Rbcl18fChPYmplY3Rbcl09T2JqZWN0LmNyZWF0ZShudWxsKSkK -dmFyIHA9Il9aeFl4WCIKZm9yKHZhciBvPTA7O28rKyl7dmFyIG49cyhwKyJfIitvKyJfIikKaWYoIShu -IGluIHEpKXtxW25dPTEKdi5pc29sYXRlVGFnPW4KYnJlYWt9fXYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWU9 -di5nZXRJc29sYXRlVGFnKCJkaXNwYXRjaF9yZWNvcmQiKX0oKQpodW5rSGVscGVycy5zZXRPclVwZGF0 -ZUludGVyY2VwdG9yc0J5VGFnKHtET01FcnJvcjpKLk1GLE1lZGlhRXJyb3I6Si5NRixOYXZpZ2F0b3I6 -Si5NRixOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmU6Si5NRixOYXZpZ2F0b3JVc2VyTWVkaWFFcnJv -cjpKLk1GLE92ZXJjb25zdHJhaW5lZEVycm9yOkouTUYsUG9zaXRpb25FcnJvcjpKLk1GLEdlb2xvY2F0 -aW9uUG9zaXRpb25FcnJvcjpKLk1GLFJhbmdlOkouTUYsRGF0YVZpZXc6QS5FVCxBcnJheUJ1ZmZlclZp -ZXc6QS5FVCxGbG9hdDMyQXJyYXk6QS5EZyxGbG9hdDY0QXJyYXk6QS5EZyxJbnQxNkFycmF5OkEueGos -SW50MzJBcnJheTpBLmRFLEludDhBcnJheTpBLlpBLFVpbnQxNkFycmF5OkEuZFQsVWludDMyQXJyYXk6 -QS5QcSxVaW50OENsYW1wZWRBcnJheTpBLmVFLENhbnZhc1BpeGVsQXJyYXk6QS5lRSxVaW50OEFycmF5 -OkEuVjYsSFRNTEF1ZGlvRWxlbWVudDpBLnFFLEhUTUxCUkVsZW1lbnQ6QS5xRSxIVE1MQnV0dG9uRWxl -bWVudDpBLnFFLEhUTUxDYW52YXNFbGVtZW50OkEucUUsSFRNTENvbnRlbnRFbGVtZW50OkEucUUsSFRN -TERMaXN0RWxlbWVudDpBLnFFLEhUTUxEYXRhRWxlbWVudDpBLnFFLEhUTUxEYXRhTGlzdEVsZW1lbnQ6 -QS5xRSxIVE1MRGV0YWlsc0VsZW1lbnQ6QS5xRSxIVE1MRGlhbG9nRWxlbWVudDpBLnFFLEhUTUxEaXZF -bGVtZW50OkEucUUsSFRNTEVtYmVkRWxlbWVudDpBLnFFLEhUTUxGaWVsZFNldEVsZW1lbnQ6QS5xRSxI -VE1MSFJFbGVtZW50OkEucUUsSFRNTEhlYWRFbGVtZW50OkEucUUsSFRNTEhlYWRpbmdFbGVtZW50OkEu -cUUsSFRNTEh0bWxFbGVtZW50OkEucUUsSFRNTElGcmFtZUVsZW1lbnQ6QS5xRSxIVE1MSW1hZ2VFbGVt -ZW50OkEucUUsSFRNTElucHV0RWxlbWVudDpBLnFFLEhUTUxMSUVsZW1lbnQ6QS5xRSxIVE1MTGFiZWxF -bGVtZW50OkEucUUsSFRNTExlZ2VuZEVsZW1lbnQ6QS5xRSxIVE1MTGlua0VsZW1lbnQ6QS5xRSxIVE1M -TWFwRWxlbWVudDpBLnFFLEhUTUxNZWRpYUVsZW1lbnQ6QS5xRSxIVE1MTWVudUVsZW1lbnQ6QS5xRSxI -VE1MTWV0YUVsZW1lbnQ6QS5xRSxIVE1MTWV0ZXJFbGVtZW50OkEucUUsSFRNTE1vZEVsZW1lbnQ6QS5x -RSxIVE1MT0xpc3RFbGVtZW50OkEucUUsSFRNTE9iamVjdEVsZW1lbnQ6QS5xRSxIVE1MT3B0R3JvdXBF -bGVtZW50OkEucUUsSFRNTE9wdGlvbkVsZW1lbnQ6QS5xRSxIVE1MT3V0cHV0RWxlbWVudDpBLnFFLEhU -TUxQYXJhbUVsZW1lbnQ6QS5xRSxIVE1MUGljdHVyZUVsZW1lbnQ6QS5xRSxIVE1MUHJlRWxlbWVudDpB -LnFFLEhUTUxQcm9ncmVzc0VsZW1lbnQ6QS5xRSxIVE1MUXVvdGVFbGVtZW50OkEucUUsSFRNTFNjcmlw -dEVsZW1lbnQ6QS5xRSxIVE1MU2hhZG93RWxlbWVudDpBLnFFLEhUTUxTbG90RWxlbWVudDpBLnFFLEhU -TUxTb3VyY2VFbGVtZW50OkEucUUsSFRNTFNwYW5FbGVtZW50OkEucUUsSFRNTFN0eWxlRWxlbWVudDpB -LnFFLEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OkEucUUsSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6QS5xRSxI -VE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQ6QS5xRSxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudDpBLnFF -LEhUTUxUYWJsZUNvbEVsZW1lbnQ6QS5xRSxIVE1MVGV4dEFyZWFFbGVtZW50OkEucUUsSFRNTFRpbWVF -bGVtZW50OkEucUUsSFRNTFRpdGxlRWxlbWVudDpBLnFFLEhUTUxUcmFja0VsZW1lbnQ6QS5xRSxIVE1M -VUxpc3RFbGVtZW50OkEucUUsSFRNTFVua25vd25FbGVtZW50OkEucUUsSFRNTFZpZGVvRWxlbWVudDpB -LnFFLEhUTUxEaXJlY3RvcnlFbGVtZW50OkEucUUsSFRNTEZvbnRFbGVtZW50OkEucUUsSFRNTEZyYW1l -RWxlbWVudDpBLnFFLEhUTUxGcmFtZVNldEVsZW1lbnQ6QS5xRSxIVE1MTWFycXVlZUVsZW1lbnQ6QS5x -RSxIVE1MRWxlbWVudDpBLnFFLEhUTUxBbmNob3JFbGVtZW50OkEuR2gsSFRNTEFyZWFFbGVtZW50OkEu -ZlksSFRNTEJhc2VFbGVtZW50OkEuclosQmxvYjpBLkF6LEhUTUxCb2R5RWxlbWVudDpBLlFQLENEQVRB -U2VjdGlvbjpBLm54LENoYXJhY3RlckRhdGE6QS5ueCxDb21tZW50OkEubngsUHJvY2Vzc2luZ0luc3Ry -dWN0aW9uOkEubngsVGV4dDpBLm54LENTU1N0eWxlRGVjbGFyYXRpb246QS5vSixNU1N0eWxlQ1NTUHJv -cGVydGllczpBLm9KLENTUzJQcm9wZXJ0aWVzOkEub0osWE1MRG9jdW1lbnQ6QS5RRixEb2N1bWVudDpB -LlFGLERPTUV4Y2VwdGlvbjpBLk5oLERPTUltcGxlbWVudGF0aW9uOkEuYWUsRE9NUmVjdFJlYWRPbmx5 -OkEuSUIsRE9NVG9rZW5MaXN0OkEubjcsRWxlbWVudDpBLmN2LEFib3J0UGF5bWVudEV2ZW50OkEuZWEs -QW5pbWF0aW9uRXZlbnQ6QS5lYSxBbmltYXRpb25QbGF5YmFja0V2ZW50OkEuZWEsQXBwbGljYXRpb25D -YWNoZUVycm9yRXZlbnQ6QS5lYSxCYWNrZ3JvdW5kRmV0Y2hDbGlja0V2ZW50OkEuZWEsQmFja2dyb3Vu -ZEZldGNoRXZlbnQ6QS5lYSxCYWNrZ3JvdW5kRmV0Y2hGYWlsRXZlbnQ6QS5lYSxCYWNrZ3JvdW5kRmV0 -Y2hlZEV2ZW50OkEuZWEsQmVmb3JlSW5zdGFsbFByb21wdEV2ZW50OkEuZWEsQmVmb3JlVW5sb2FkRXZl -bnQ6QS5lYSxCbG9iRXZlbnQ6QS5lYSxDYW5NYWtlUGF5bWVudEV2ZW50OkEuZWEsQ2xpcGJvYXJkRXZl -bnQ6QS5lYSxDbG9zZUV2ZW50OkEuZWEsQ3VzdG9tRXZlbnQ6QS5lYSxEZXZpY2VNb3Rpb25FdmVudDpB -LmVhLERldmljZU9yaWVudGF0aW9uRXZlbnQ6QS5lYSxFcnJvckV2ZW50OkEuZWEsRXh0ZW5kYWJsZUV2 -ZW50OkEuZWEsRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudDpBLmVhLEZldGNoRXZlbnQ6QS5lYSxGb250RmFj -ZVNldExvYWRFdmVudDpBLmVhLEZvcmVpZ25GZXRjaEV2ZW50OkEuZWEsR2FtZXBhZEV2ZW50OkEuZWEs -SGFzaENoYW5nZUV2ZW50OkEuZWEsSW5zdGFsbEV2ZW50OkEuZWEsTWVkaWFFbmNyeXB0ZWRFdmVudDpB -LmVhLE1lZGlhS2V5TWVzc2FnZUV2ZW50OkEuZWEsTWVkaWFRdWVyeUxpc3RFdmVudDpBLmVhLE1lZGlh -U3RyZWFtRXZlbnQ6QS5lYSxNZWRpYVN0cmVhbVRyYWNrRXZlbnQ6QS5lYSxNZXNzYWdlRXZlbnQ6QS5l -YSxNSURJQ29ubmVjdGlvbkV2ZW50OkEuZWEsTUlESU1lc3NhZ2VFdmVudDpBLmVhLE11dGF0aW9uRXZl -bnQ6QS5lYSxOb3RpZmljYXRpb25FdmVudDpBLmVhLFBhZ2VUcmFuc2l0aW9uRXZlbnQ6QS5lYSxQYXlt -ZW50UmVxdWVzdEV2ZW50OkEuZWEsUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDpBLmVhLFBvcFN0YXRl -RXZlbnQ6QS5lYSxQcmVzZW50YXRpb25Db25uZWN0aW9uQXZhaWxhYmxlRXZlbnQ6QS5lYSxQcmVzZW50 -YXRpb25Db25uZWN0aW9uQ2xvc2VFdmVudDpBLmVhLFByb21pc2VSZWplY3Rpb25FdmVudDpBLmVhLFB1 -c2hFdmVudDpBLmVhLFJUQ0RhdGFDaGFubmVsRXZlbnQ6QS5lYSxSVENEVE1GVG9uZUNoYW5nZUV2ZW50 -OkEuZWEsUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudDpBLmVhLFJUQ1RyYWNrRXZlbnQ6QS5lYSxTZWN1 -cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50OkEuZWEsU2Vuc29yRXJyb3JFdmVudDpBLmVhLFNwZWVjaFJl -Y29nbml0aW9uRXJyb3I6QS5lYSxTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OkEuZWEsU3BlZWNoU3ludGhl -c2lzRXZlbnQ6QS5lYSxTdG9yYWdlRXZlbnQ6QS5lYSxTeW5jRXZlbnQ6QS5lYSxUcmFja0V2ZW50OkEu -ZWEsVHJhbnNpdGlvbkV2ZW50OkEuZWEsV2ViS2l0VHJhbnNpdGlvbkV2ZW50OkEuZWEsVlJEZXZpY2VF -dmVudDpBLmVhLFZSRGlzcGxheUV2ZW50OkEuZWEsVlJTZXNzaW9uRXZlbnQ6QS5lYSxNb2pvSW50ZXJm -YWNlUmVxdWVzdEV2ZW50OkEuZWEsVVNCQ29ubmVjdGlvbkV2ZW50OkEuZWEsSURCVmVyc2lvbkNoYW5n -ZUV2ZW50OkEuZWEsQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6QS5lYSxPZmZsaW5lQXVkaW9Db21wbGV0aW9u -RXZlbnQ6QS5lYSxXZWJHTENvbnRleHRFdmVudDpBLmVhLEV2ZW50OkEuZWEsSW5wdXRFdmVudDpBLmVh -LFN1Ym1pdEV2ZW50OkEuZWEsRXZlbnRUYXJnZXQ6QS5EMCxGaWxlOkEuaEgsSFRNTEZvcm1FbGVtZW50 -OkEuaDQsSGlzdG9yeTpBLmJyLEhUTUxEb2N1bWVudDpBLlZiLFhNTEh0dHBSZXF1ZXN0OkEuZkosWE1M -SHR0cFJlcXVlc3RFdmVudFRhcmdldDpBLndhLEltYWdlRGF0YTpBLlNnLExvY2F0aW9uOkEudTgsTW91 -c2VFdmVudDpBLkFqLERyYWdFdmVudDpBLkFqLFBvaW50ZXJFdmVudDpBLkFqLFdoZWVsRXZlbnQ6QS5B -aixEb2N1bWVudEZyYWdtZW50OkEuS1YsU2hhZG93Um9vdDpBLktWLERvY3VtZW50VHlwZTpBLktWLE5v -ZGU6QS5LVixOb2RlTGlzdDpBLkJILFJhZGlvTm9kZUxpc3Q6QS5CSCxIVE1MUGFyYWdyYXBoRWxlbWVu -dDpBLlNOLFByb2dyZXNzRXZlbnQ6QS5ldyxSZXNvdXJjZVByb2dyZXNzRXZlbnQ6QS5ldyxIVE1MU2Vs -ZWN0RWxlbWVudDpBLmxwLEhUTUxUYWJsZUVsZW1lbnQ6QS5UYixIVE1MVGFibGVSb3dFbGVtZW50OkEu -SXYsSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6QS5XUCxIVE1MVGVtcGxhdGVFbGVtZW50OkEueVksQ29t -cG9zaXRpb25FdmVudDpBLnc2LEZvY3VzRXZlbnQ6QS53NixLZXlib2FyZEV2ZW50OkEudzYsVGV4dEV2 -ZW50OkEudzYsVG91Y2hFdmVudDpBLnc2LFVJRXZlbnQ6QS53NixXaW5kb3c6QS5LNSxET01XaW5kb3c6 -QS5LNSxEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTpBLkNtLFNlcnZpY2VXb3JrZXJHbG9iYWxTY29w -ZTpBLkNtLFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOkEuQ20sV29ya2VyR2xvYmFsU2NvcGU6QS5DbSxB -dHRyOkEuQ1EsQ2xpZW50UmVjdDpBLnc0LERPTVJlY3Q6QS53NCxOYW1lZE5vZGVNYXA6QS5yaCxNb3pO -YW1lZEF0dHJNYXA6QS5yaCxJREJLZXlSYW5nZTpBLmhGLFNWR1NjcmlwdEVsZW1lbnQ6QS5uZCxTVkdB -RWxlbWVudDpBLmhpLFNWR0FuaW1hdGVFbGVtZW50OkEuaGksU1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6 -QS5oaSxTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDpBLmhpLFNWR0FuaW1hdGlvbkVsZW1lbnQ6QS5o -aSxTVkdDaXJjbGVFbGVtZW50OkEuaGksU1ZHQ2xpcFBhdGhFbGVtZW50OkEuaGksU1ZHRGVmc0VsZW1l -bnQ6QS5oaSxTVkdEZXNjRWxlbWVudDpBLmhpLFNWR0Rpc2NhcmRFbGVtZW50OkEuaGksU1ZHRWxsaXBz -ZUVsZW1lbnQ6QS5oaSxTVkdGRUJsZW5kRWxlbWVudDpBLmhpLFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50 -OkEuaGksU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6QS5oaSxTVkdGRUNvbXBvc2l0ZUVsZW1l -bnQ6QS5oaSxTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDpBLmhpLFNWR0ZFRGlmZnVzZUxpZ2h0aW5n -RWxlbWVudDpBLmhpLFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDpBLmhpLFNWR0ZFRGlzdGFudExp -Z2h0RWxlbWVudDpBLmhpLFNWR0ZFRmxvb2RFbGVtZW50OkEuaGksU1ZHRkVGdW5jQUVsZW1lbnQ6QS5o -aSxTVkdGRUZ1bmNCRWxlbWVudDpBLmhpLFNWR0ZFRnVuY0dFbGVtZW50OkEuaGksU1ZHRkVGdW5jUkVs -ZW1lbnQ6QS5oaSxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6QS5oaSxTVkdGRUltYWdlRWxlbWVudDpB -LmhpLFNWR0ZFTWVyZ2VFbGVtZW50OkEuaGksU1ZHRkVNZXJnZU5vZGVFbGVtZW50OkEuaGksU1ZHRkVN -b3JwaG9sb2d5RWxlbWVudDpBLmhpLFNWR0ZFT2Zmc2V0RWxlbWVudDpBLmhpLFNWR0ZFUG9pbnRMaWdo -dEVsZW1lbnQ6QS5oaSxTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OkEuaGksU1ZHRkVTcG90TGln -aHRFbGVtZW50OkEuaGksU1ZHRkVUaWxlRWxlbWVudDpBLmhpLFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6 -QS5oaSxTVkdGaWx0ZXJFbGVtZW50OkEuaGksU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6QS5oaSxTVkdH -RWxlbWVudDpBLmhpLFNWR0dlb21ldHJ5RWxlbWVudDpBLmhpLFNWR0dyYXBoaWNzRWxlbWVudDpBLmhp -LFNWR0ltYWdlRWxlbWVudDpBLmhpLFNWR0xpbmVFbGVtZW50OkEuaGksU1ZHTGluZWFyR3JhZGllbnRF -bGVtZW50OkEuaGksU1ZHTWFya2VyRWxlbWVudDpBLmhpLFNWR01hc2tFbGVtZW50OkEuaGksU1ZHTWV0 -YWRhdGFFbGVtZW50OkEuaGksU1ZHUGF0aEVsZW1lbnQ6QS5oaSxTVkdQYXR0ZXJuRWxlbWVudDpBLmhp -LFNWR1BvbHlnb25FbGVtZW50OkEuaGksU1ZHUG9seWxpbmVFbGVtZW50OkEuaGksU1ZHUmFkaWFsR3Jh -ZGllbnRFbGVtZW50OkEuaGksU1ZHUmVjdEVsZW1lbnQ6QS5oaSxTVkdTZXRFbGVtZW50OkEuaGksU1ZH -U3RvcEVsZW1lbnQ6QS5oaSxTVkdTdHlsZUVsZW1lbnQ6QS5oaSxTVkdTVkdFbGVtZW50OkEuaGksU1ZH -U3dpdGNoRWxlbWVudDpBLmhpLFNWR1N5bWJvbEVsZW1lbnQ6QS5oaSxTVkdUU3BhbkVsZW1lbnQ6QS5o -aSxTVkdUZXh0Q29udGVudEVsZW1lbnQ6QS5oaSxTVkdUZXh0RWxlbWVudDpBLmhpLFNWR1RleHRQYXRo -RWxlbWVudDpBLmhpLFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6QS5oaSxTVkdUaXRsZUVsZW1lbnQ6 -QS5oaSxTVkdVc2VFbGVtZW50OkEuaGksU1ZHVmlld0VsZW1lbnQ6QS5oaSxTVkdHcmFkaWVudEVsZW1l -bnQ6QS5oaSxTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDpBLmhpLFNWR0ZFRHJvcFNo -YWRvd0VsZW1lbnQ6QS5oaSxTVkdNUGF0aEVsZW1lbnQ6QS5oaSxTVkdFbGVtZW50OkEuaGl9KQpodW5r -SGVscGVycy5zZXRPclVwZGF0ZUxlYWZUYWdzKHtET01FcnJvcjp0cnVlLE1lZGlhRXJyb3I6dHJ1ZSxO -YXZpZ2F0b3I6dHJ1ZSxOYXZpZ2F0b3JDb25jdXJyZW50SGFyZHdhcmU6dHJ1ZSxOYXZpZ2F0b3JVc2Vy -TWVkaWFFcnJvcjp0cnVlLE92ZXJjb25zdHJhaW5lZEVycm9yOnRydWUsUG9zaXRpb25FcnJvcjp0cnVl -LEdlb2xvY2F0aW9uUG9zaXRpb25FcnJvcjp0cnVlLFJhbmdlOnRydWUsRGF0YVZpZXc6dHJ1ZSxBcnJh -eUJ1ZmZlclZpZXc6ZmFsc2UsRmxvYXQzMkFycmF5OnRydWUsRmxvYXQ2NEFycmF5OnRydWUsSW50MTZB -cnJheTp0cnVlLEludDMyQXJyYXk6dHJ1ZSxJbnQ4QXJyYXk6dHJ1ZSxVaW50MTZBcnJheTp0cnVlLFVp -bnQzMkFycmF5OnRydWUsVWludDhDbGFtcGVkQXJyYXk6dHJ1ZSxDYW52YXNQaXhlbEFycmF5OnRydWUs -VWludDhBcnJheTpmYWxzZSxIVE1MQXVkaW9FbGVtZW50OnRydWUsSFRNTEJSRWxlbWVudDp0cnVlLEhU -TUxCdXR0b25FbGVtZW50OnRydWUsSFRNTENhbnZhc0VsZW1lbnQ6dHJ1ZSxIVE1MQ29udGVudEVsZW1l -bnQ6dHJ1ZSxIVE1MRExpc3RFbGVtZW50OnRydWUsSFRNTERhdGFFbGVtZW50OnRydWUsSFRNTERhdGFM -aXN0RWxlbWVudDp0cnVlLEhUTUxEZXRhaWxzRWxlbWVudDp0cnVlLEhUTUxEaWFsb2dFbGVtZW50OnRy -dWUsSFRNTERpdkVsZW1lbnQ6dHJ1ZSxIVE1MRW1iZWRFbGVtZW50OnRydWUsSFRNTEZpZWxkU2V0RWxl -bWVudDp0cnVlLEhUTUxIUkVsZW1lbnQ6dHJ1ZSxIVE1MSGVhZEVsZW1lbnQ6dHJ1ZSxIVE1MSGVhZGlu -Z0VsZW1lbnQ6dHJ1ZSxIVE1MSHRtbEVsZW1lbnQ6dHJ1ZSxIVE1MSUZyYW1lRWxlbWVudDp0cnVlLEhU -TUxJbWFnZUVsZW1lbnQ6dHJ1ZSxIVE1MSW5wdXRFbGVtZW50OnRydWUsSFRNTExJRWxlbWVudDp0cnVl -LEhUTUxMYWJlbEVsZW1lbnQ6dHJ1ZSxIVE1MTGVnZW5kRWxlbWVudDp0cnVlLEhUTUxMaW5rRWxlbWVu -dDp0cnVlLEhUTUxNYXBFbGVtZW50OnRydWUsSFRNTE1lZGlhRWxlbWVudDp0cnVlLEhUTUxNZW51RWxl -bWVudDp0cnVlLEhUTUxNZXRhRWxlbWVudDp0cnVlLEhUTUxNZXRlckVsZW1lbnQ6dHJ1ZSxIVE1MTW9k -RWxlbWVudDp0cnVlLEhUTUxPTGlzdEVsZW1lbnQ6dHJ1ZSxIVE1MT2JqZWN0RWxlbWVudDp0cnVlLEhU -TUxPcHRHcm91cEVsZW1lbnQ6dHJ1ZSxIVE1MT3B0aW9uRWxlbWVudDp0cnVlLEhUTUxPdXRwdXRFbGVt -ZW50OnRydWUsSFRNTFBhcmFtRWxlbWVudDp0cnVlLEhUTUxQaWN0dXJlRWxlbWVudDp0cnVlLEhUTUxQ -cmVFbGVtZW50OnRydWUsSFRNTFByb2dyZXNzRWxlbWVudDp0cnVlLEhUTUxRdW90ZUVsZW1lbnQ6dHJ1 -ZSxIVE1MU2NyaXB0RWxlbWVudDp0cnVlLEhUTUxTaGFkb3dFbGVtZW50OnRydWUsSFRNTFNsb3RFbGVt -ZW50OnRydWUsSFRNTFNvdXJjZUVsZW1lbnQ6dHJ1ZSxIVE1MU3BhbkVsZW1lbnQ6dHJ1ZSxIVE1MU3R5 -bGVFbGVtZW50OnRydWUsSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVDZWxsRWxl -bWVudDp0cnVlLEhUTUxUYWJsZURhdGFDZWxsRWxlbWVudDp0cnVlLEhUTUxUYWJsZUhlYWRlckNlbGxF -bGVtZW50OnRydWUsSFRNTFRhYmxlQ29sRWxlbWVudDp0cnVlLEhUTUxUZXh0QXJlYUVsZW1lbnQ6dHJ1 -ZSxIVE1MVGltZUVsZW1lbnQ6dHJ1ZSxIVE1MVGl0bGVFbGVtZW50OnRydWUsSFRNTFRyYWNrRWxlbWVu -dDp0cnVlLEhUTUxVTGlzdEVsZW1lbnQ6dHJ1ZSxIVE1MVW5rbm93bkVsZW1lbnQ6dHJ1ZSxIVE1MVmlk -ZW9FbGVtZW50OnRydWUsSFRNTERpcmVjdG9yeUVsZW1lbnQ6dHJ1ZSxIVE1MRm9udEVsZW1lbnQ6dHJ1 -ZSxIVE1MRnJhbWVFbGVtZW50OnRydWUsSFRNTEZyYW1lU2V0RWxlbWVudDp0cnVlLEhUTUxNYXJxdWVl -RWxlbWVudDp0cnVlLEhUTUxFbGVtZW50OmZhbHNlLEhUTUxBbmNob3JFbGVtZW50OnRydWUsSFRNTEFy -ZWFFbGVtZW50OnRydWUsSFRNTEJhc2VFbGVtZW50OnRydWUsQmxvYjpmYWxzZSxIVE1MQm9keUVsZW1l -bnQ6dHJ1ZSxDREFUQVNlY3Rpb246dHJ1ZSxDaGFyYWN0ZXJEYXRhOnRydWUsQ29tbWVudDp0cnVlLFBy -b2Nlc3NpbmdJbnN0cnVjdGlvbjp0cnVlLFRleHQ6dHJ1ZSxDU1NTdHlsZURlY2xhcmF0aW9uOnRydWUs -TVNTdHlsZUNTU1Byb3BlcnRpZXM6dHJ1ZSxDU1MyUHJvcGVydGllczp0cnVlLFhNTERvY3VtZW50OnRy -dWUsRG9jdW1lbnQ6ZmFsc2UsRE9NRXhjZXB0aW9uOnRydWUsRE9NSW1wbGVtZW50YXRpb246dHJ1ZSxE -T01SZWN0UmVhZE9ubHk6ZmFsc2UsRE9NVG9rZW5MaXN0OnRydWUsRWxlbWVudDpmYWxzZSxBYm9ydFBh -eW1lbnRFdmVudDp0cnVlLEFuaW1hdGlvbkV2ZW50OnRydWUsQW5pbWF0aW9uUGxheWJhY2tFdmVudDp0 -cnVlLEFwcGxpY2F0aW9uQ2FjaGVFcnJvckV2ZW50OnRydWUsQmFja2dyb3VuZEZldGNoQ2xpY2tFdmVu -dDp0cnVlLEJhY2tncm91bmRGZXRjaEV2ZW50OnRydWUsQmFja2dyb3VuZEZldGNoRmFpbEV2ZW50OnRy -dWUsQmFja2dyb3VuZEZldGNoZWRFdmVudDp0cnVlLEJlZm9yZUluc3RhbGxQcm9tcHRFdmVudDp0cnVl -LEJlZm9yZVVubG9hZEV2ZW50OnRydWUsQmxvYkV2ZW50OnRydWUsQ2FuTWFrZVBheW1lbnRFdmVudDp0 -cnVlLENsaXBib2FyZEV2ZW50OnRydWUsQ2xvc2VFdmVudDp0cnVlLEN1c3RvbUV2ZW50OnRydWUsRGV2 -aWNlTW90aW9uRXZlbnQ6dHJ1ZSxEZXZpY2VPcmllbnRhdGlvbkV2ZW50OnRydWUsRXJyb3JFdmVudDp0 -cnVlLEV4dGVuZGFibGVFdmVudDp0cnVlLEV4dGVuZGFibGVNZXNzYWdlRXZlbnQ6dHJ1ZSxGZXRjaEV2 -ZW50OnRydWUsRm9udEZhY2VTZXRMb2FkRXZlbnQ6dHJ1ZSxGb3JlaWduRmV0Y2hFdmVudDp0cnVlLEdh -bWVwYWRFdmVudDp0cnVlLEhhc2hDaGFuZ2VFdmVudDp0cnVlLEluc3RhbGxFdmVudDp0cnVlLE1lZGlh -RW5jcnlwdGVkRXZlbnQ6dHJ1ZSxNZWRpYUtleU1lc3NhZ2VFdmVudDp0cnVlLE1lZGlhUXVlcnlMaXN0 -RXZlbnQ6dHJ1ZSxNZWRpYVN0cmVhbUV2ZW50OnRydWUsTWVkaWFTdHJlYW1UcmFja0V2ZW50OnRydWUs -TWVzc2FnZUV2ZW50OnRydWUsTUlESUNvbm5lY3Rpb25FdmVudDp0cnVlLE1JRElNZXNzYWdlRXZlbnQ6 -dHJ1ZSxNdXRhdGlvbkV2ZW50OnRydWUsTm90aWZpY2F0aW9uRXZlbnQ6dHJ1ZSxQYWdlVHJhbnNpdGlv -bkV2ZW50OnRydWUsUGF5bWVudFJlcXVlc3RFdmVudDp0cnVlLFBheW1lbnRSZXF1ZXN0VXBkYXRlRXZl -bnQ6dHJ1ZSxQb3BTdGF0ZUV2ZW50OnRydWUsUHJlc2VudGF0aW9uQ29ubmVjdGlvbkF2YWlsYWJsZUV2 -ZW50OnRydWUsUHJlc2VudGF0aW9uQ29ubmVjdGlvbkNsb3NlRXZlbnQ6dHJ1ZSxQcm9taXNlUmVqZWN0 -aW9uRXZlbnQ6dHJ1ZSxQdXNoRXZlbnQ6dHJ1ZSxSVENEYXRhQ2hhbm5lbEV2ZW50OnRydWUsUlRDRFRN -RlRvbmVDaGFuZ2VFdmVudDp0cnVlLFJUQ1BlZXJDb25uZWN0aW9uSWNlRXZlbnQ6dHJ1ZSxSVENUcmFj -a0V2ZW50OnRydWUsU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudDp0cnVlLFNlbnNvckVycm9yRXZl -bnQ6dHJ1ZSxTcGVlY2hSZWNvZ25pdGlvbkVycm9yOnRydWUsU3BlZWNoUmVjb2duaXRpb25FdmVudDp0 -cnVlLFNwZWVjaFN5bnRoZXNpc0V2ZW50OnRydWUsU3RvcmFnZUV2ZW50OnRydWUsU3luY0V2ZW50OnRy -dWUsVHJhY2tFdmVudDp0cnVlLFRyYW5zaXRpb25FdmVudDp0cnVlLFdlYktpdFRyYW5zaXRpb25FdmVu -dDp0cnVlLFZSRGV2aWNlRXZlbnQ6dHJ1ZSxWUkRpc3BsYXlFdmVudDp0cnVlLFZSU2Vzc2lvbkV2ZW50 -OnRydWUsTW9qb0ludGVyZmFjZVJlcXVlc3RFdmVudDp0cnVlLFVTQkNvbm5lY3Rpb25FdmVudDp0cnVl -LElEQlZlcnNpb25DaGFuZ2VFdmVudDp0cnVlLEF1ZGlvUHJvY2Vzc2luZ0V2ZW50OnRydWUsT2ZmbGlu -ZUF1ZGlvQ29tcGxldGlvbkV2ZW50OnRydWUsV2ViR0xDb250ZXh0RXZlbnQ6dHJ1ZSxFdmVudDpmYWxz -ZSxJbnB1dEV2ZW50OmZhbHNlLFN1Ym1pdEV2ZW50OmZhbHNlLEV2ZW50VGFyZ2V0OmZhbHNlLEZpbGU6 -dHJ1ZSxIVE1MRm9ybUVsZW1lbnQ6dHJ1ZSxIaXN0b3J5OnRydWUsSFRNTERvY3VtZW50OnRydWUsWE1M -SHR0cFJlcXVlc3Q6dHJ1ZSxYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0OmZhbHNlLEltYWdlRGF0YTp0 -cnVlLExvY2F0aW9uOnRydWUsTW91c2VFdmVudDp0cnVlLERyYWdFdmVudDp0cnVlLFBvaW50ZXJFdmVu -dDp0cnVlLFdoZWVsRXZlbnQ6dHJ1ZSxEb2N1bWVudEZyYWdtZW50OnRydWUsU2hhZG93Um9vdDp0cnVl -LERvY3VtZW50VHlwZTp0cnVlLE5vZGU6ZmFsc2UsTm9kZUxpc3Q6dHJ1ZSxSYWRpb05vZGVMaXN0OnRy -dWUsSFRNTFBhcmFncmFwaEVsZW1lbnQ6dHJ1ZSxQcm9ncmVzc0V2ZW50OnRydWUsUmVzb3VyY2VQcm9n -cmVzc0V2ZW50OnRydWUsSFRNTFNlbGVjdEVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVFbGVtZW50OnRydWUs -SFRNTFRhYmxlUm93RWxlbWVudDp0cnVlLEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50OnRydWUsSFRNTFRl -bXBsYXRlRWxlbWVudDp0cnVlLENvbXBvc2l0aW9uRXZlbnQ6dHJ1ZSxGb2N1c0V2ZW50OnRydWUsS2V5 -Ym9hcmRFdmVudDp0cnVlLFRleHRFdmVudDp0cnVlLFRvdWNoRXZlbnQ6dHJ1ZSxVSUV2ZW50OmZhbHNl -LFdpbmRvdzp0cnVlLERPTVdpbmRvdzp0cnVlLERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOnRydWUs -U2VydmljZVdvcmtlckdsb2JhbFNjb3BlOnRydWUsU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6dHJ1ZSxX -b3JrZXJHbG9iYWxTY29wZTp0cnVlLEF0dHI6dHJ1ZSxDbGllbnRSZWN0OnRydWUsRE9NUmVjdDp0cnVl -LE5hbWVkTm9kZU1hcDp0cnVlLE1vek5hbWVkQXR0ck1hcDp0cnVlLElEQktleVJhbmdlOnRydWUsU1ZH -U2NyaXB0RWxlbWVudDp0cnVlLFNWR0FFbGVtZW50OnRydWUsU1ZHQW5pbWF0ZUVsZW1lbnQ6dHJ1ZSxT -VkdBbmltYXRlTW90aW9uRWxlbWVudDp0cnVlLFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OnRydWUs -U1ZHQW5pbWF0aW9uRWxlbWVudDp0cnVlLFNWR0NpcmNsZUVsZW1lbnQ6dHJ1ZSxTVkdDbGlwUGF0aEVs -ZW1lbnQ6dHJ1ZSxTVkdEZWZzRWxlbWVudDp0cnVlLFNWR0Rlc2NFbGVtZW50OnRydWUsU1ZHRGlzY2Fy -ZEVsZW1lbnQ6dHJ1ZSxTVkdFbGxpcHNlRWxlbWVudDp0cnVlLFNWR0ZFQmxlbmRFbGVtZW50OnRydWUs -U1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6dHJ1ZSxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDp0 -cnVlLFNWR0ZFQ29tcG9zaXRlRWxlbWVudDp0cnVlLFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OnRy -dWUsU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OnRydWUsU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVt -ZW50OnRydWUsU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OnRydWUsU1ZHRkVGbG9vZEVsZW1lbnQ6dHJ1 -ZSxTVkdGRUZ1bmNBRWxlbWVudDp0cnVlLFNWR0ZFRnVuY0JFbGVtZW50OnRydWUsU1ZHRkVGdW5jR0Vs -ZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNSRWxlbWVudDp0cnVlLFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDp0 -cnVlLFNWR0ZFSW1hZ2VFbGVtZW50OnRydWUsU1ZHRkVNZXJnZUVsZW1lbnQ6dHJ1ZSxTVkdGRU1lcmdl -Tm9kZUVsZW1lbnQ6dHJ1ZSxTVkdGRU1vcnBob2xvZ3lFbGVtZW50OnRydWUsU1ZHRkVPZmZzZXRFbGVt -ZW50OnRydWUsU1ZHRkVQb2ludExpZ2h0RWxlbWVudDp0cnVlLFNWR0ZFU3BlY3VsYXJMaWdodGluZ0Vs -ZW1lbnQ6dHJ1ZSxTVkdGRVNwb3RMaWdodEVsZW1lbnQ6dHJ1ZSxTVkdGRVRpbGVFbGVtZW50OnRydWUs -U1ZHRkVUdXJidWxlbmNlRWxlbWVudDp0cnVlLFNWR0ZpbHRlckVsZW1lbnQ6dHJ1ZSxTVkdGb3JlaWdu -T2JqZWN0RWxlbWVudDp0cnVlLFNWR0dFbGVtZW50OnRydWUsU1ZHR2VvbWV0cnlFbGVtZW50OnRydWUs -U1ZHR3JhcGhpY3NFbGVtZW50OnRydWUsU1ZHSW1hZ2VFbGVtZW50OnRydWUsU1ZHTGluZUVsZW1lbnQ6 -dHJ1ZSxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6dHJ1ZSxTVkdNYXJrZXJFbGVtZW50OnRydWUsU1ZH -TWFza0VsZW1lbnQ6dHJ1ZSxTVkdNZXRhZGF0YUVsZW1lbnQ6dHJ1ZSxTVkdQYXRoRWxlbWVudDp0cnVl -LFNWR1BhdHRlcm5FbGVtZW50OnRydWUsU1ZHUG9seWdvbkVsZW1lbnQ6dHJ1ZSxTVkdQb2x5bGluZUVs -ZW1lbnQ6dHJ1ZSxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6dHJ1ZSxTVkdSZWN0RWxlbWVudDp0cnVl -LFNWR1NldEVsZW1lbnQ6dHJ1ZSxTVkdTdG9wRWxlbWVudDp0cnVlLFNWR1N0eWxlRWxlbWVudDp0cnVl -LFNWR1NWR0VsZW1lbnQ6dHJ1ZSxTVkdTd2l0Y2hFbGVtZW50OnRydWUsU1ZHU3ltYm9sRWxlbWVudDp0 -cnVlLFNWR1RTcGFuRWxlbWVudDp0cnVlLFNWR1RleHRDb250ZW50RWxlbWVudDp0cnVlLFNWR1RleHRF -bGVtZW50OnRydWUsU1ZHVGV4dFBhdGhFbGVtZW50OnRydWUsU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVu -dDp0cnVlLFNWR1RpdGxlRWxlbWVudDp0cnVlLFNWR1VzZUVsZW1lbnQ6dHJ1ZSxTVkdWaWV3RWxlbWVu -dDp0cnVlLFNWR0dyYWRpZW50RWxlbWVudDp0cnVlLFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25F -bGVtZW50OnRydWUsU1ZHRkVEcm9wU2hhZG93RWxlbWVudDp0cnVlLFNWR01QYXRoRWxlbWVudDp0cnVl -LFNWR0VsZW1lbnQ6ZmFsc2V9KQpBLkxaLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZp -ZXciCkEuUkcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKQS5WUC4kbmF0aXZl -U3VwZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJWaWV3IgpBLkRnLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJB -cnJheUJ1ZmZlclZpZXciCkEuV0IuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIK -QS5aRy4kbmF0aXZlU3VwZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJWaWV3IgpBLlBnLiRuYXRpdmVTdXBl -cmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZpZXcifSkoKQpjb252ZXJ0QWxsVG9GYXN0T2JqZWN0KHcpCmNv -bnZlcnRUb0Zhc3RPYmplY3QoJCk7KGZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBkb2N1bWVudD09PSJ1bmRl -ZmluZWQiKXthKG51bGwpCnJldHVybn1pZih0eXBlb2YgZG9jdW1lbnQuY3VycmVudFNjcmlwdCE9InVu -ZGVmaW5lZCIpe2EoZG9jdW1lbnQuY3VycmVudFNjcmlwdCkKcmV0dXJufXZhciBzPWRvY3VtZW50LnNj -cmlwdHMKZnVuY3Rpb24gb25Mb2FkKGIpe2Zvcih2YXIgcT0wO3E8cy5sZW5ndGg7KytxKXNbcV0ucmVt -b3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsb25Mb2FkLGZhbHNlKQphKGIudGFyZ2V0KX1mb3IodmFyIHI9 -MDtyPHMubGVuZ3RoOysrcilzW3JdLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLG9uTG9hZCxmYWxzZSl9 -KShmdW5jdGlvbihhKXt2LmN1cnJlbnRTY3JpcHQ9YQp2YXIgcz1BLklxCmlmKHR5cGVvZiBkYXJ0TWFp -blJ1bm5lcj09PSJmdW5jdGlvbiIpZGFydE1haW5SdW5uZXIocyxbXSkKZWxzZSBzKFtdKX0pfSkoKQov -LyMgc291cmNlTWFwcGluZ1VSTD1taWdyYXRpb24uanMubWFwCg== +QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFGRkZGRkZGRkZGRkZGRkZGR0dHR0dHR0dHR0dHR0dHR0hI +SEhISEhISEhISEhISEhISEhISEhISEhISElISEhKRUVCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJC +QkJLQ0NDQ0NDQ0NDQ0NDRENMT05OTk1FRUVFRUVFRUVFRSIscykmMzEKaD1pPD0zMj9zJjYxNjk0Pj4+ +cToocyY2M3xoPDw2KT4+PjAKaT1CLnhCLlcoIiBceDAwMDpYRUNDQ0NDTjpsRGIgXHgwMDA6WEVDQ0ND +Q052bERiIFx4MDAwOlhFQ0NDQ0NOOmxEYiBBQUFBQVx4MDBceDAwXHgwMFx4MDBceDAwQUFBQUEwMDAw +MEFBQUFBOjo6OjpBQUFBQUdHMDAwQUFBQUEwMEtLS0FBQUFBRzo6OjpBQUFBQTpJSUlJQUFBQUEwMDBc +eDgwMEFBQUFBXHgwMFx4MDBceDAwXHgwMCBBQUFBQSIsaStxKQppZihpPT09MCl7Zy5hKz1BLkx3KGgp +CmlmKGY9PT1jKWJyZWFrICRsYWJlbDAkMApicmVha31lbHNlIGlmKChpJjEpIT09MCl7aWYocilzd2l0 +Y2goaSl7Y2FzZSA2OTpjYXNlIDY3OmcuYSs9QS5MdyhqKQpicmVhawpjYXNlIDY1OmcuYSs9QS5Mdyhq +KTstLWYKYnJlYWsKZGVmYXVsdDpwPWcuYSs9QS5MdyhqKQpnLmE9cCtBLkx3KGopCmJyZWFrfWVsc2V7 +ay5iPWkKay5jPWYtMQpyZXR1cm4iIn1pPTB9aWYoZj09PWMpYnJlYWsgJGxhYmVsMCQwCm89ZisxCmlm +KCEoZj49MCYmZjxlKSlyZXR1cm4gQS5PSChhLGYpCnM9YVtmXX1vPWYrMQppZighKGY+PTAmJmY8ZSkp +cmV0dXJuIEEuT0goYSxmKQpzPWFbZl0KaWYoczwxMjgpe3doaWxlKCEwKXtpZighKG88Yykpe249Ywpi +cmVha31tPW8rMQppZighKG8+PTAmJm88ZSkpcmV0dXJuIEEuT0goYSxvKQpzPWFbb10KaWYocz49MTI4 +KXtuPW0tMQpvPW0KYnJlYWt9bz1tfWlmKG4tZjwyMClmb3IobD1mO2w8bjsrK2wpe2lmKCEobDxlKSly +ZXR1cm4gQS5PSChhLGwpCmcuYSs9QS5MdyhhW2xdKX1lbHNlIGcuYSs9QS5ITShhLGYsbikKaWYobj09 +PWMpYnJlYWsgJGxhYmVsMCQwCmY9b31lbHNlIGY9b31pZihkJiZpPjMyKWlmKHIpZy5hKz1BLkx3KGop +CmVsc2V7ay5iPTc3CmsuYz1jCnJldHVybiIifWsuYj1pCmsuYz1oCmU9Zy5hCnJldHVybiBlLmNoYXJD +b2RlQXQoMCk9PTA/ZTplfX0KQS5XRi5wcm90b3R5cGU9ewokMihhLGIpe3ZhciBzLHIscQp0LmZvLmEo +YSkKcz10aGlzLmIKcj10aGlzLmEKcT1zLmErPXIuYQpxKz1hLmEKcy5hPXEKcy5hPXErIjogIgpzLmEr +PUEuaGwoYikKci5hPSIsICJ9LAokUzo0NX0KQS5pUC5wcm90b3R5cGU9ewpETihhLGIpe2lmKGI9PW51 +bGwpcmV0dXJuITEKcmV0dXJuIGIgaW5zdGFuY2VvZiBBLmlQJiZ0aGlzLmE9PT1iLmEmJiEwfSwKZ20o +YSl7dmFyIHM9dGhpcy5hCnJldHVybihzXkIuam4ud0cocywzMCkpJjEwNzM3NDE4MjN9LAoiWyIoYSl7 +dmFyIHM9dGhpcyxyPUEuR3EoQS50SihzKSkscT1BLmgwKEEuTlMocykpLHA9QS5oMChBLmpBKHMpKSxv +PUEuaDAoQS5JWChzKSksbj1BLmgwKEEuY2gocykpLG09QS5oMChBLkpkKHMpKSxsPUEuVngoQS5vMShz +KSkKcmV0dXJuIHIrIi0iK3ErIi0iK3ArIiAiK28rIjoiK24rIjoiK20rIi4iK2x9fQpBLmNrLnByb3Rv +dHlwZT17fQpBLlhTLnByb3RvdHlwZT17CmdJSSgpe3JldHVybiBBLnRzKHRoaXMuJHRocm93bkpzRXJy +b3IpfX0KQS5DNi5wcm90b3R5cGU9ewoiWyIoYSl7dmFyIHM9dGhpcy5hCmlmKHMhPW51bGwpcmV0dXJu +IkFzc2VydGlvbiBmYWlsZWQ6ICIrQS5obChzKQpyZXR1cm4iQXNzZXJ0aW9uIGZhaWxlZCJ9fQpBLkV6 +LnByb3RvdHlwZT17fQpBLkYucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiJUaHJvdyBvZiBudWxsLiJ9 +fQpBLkFULnByb3RvdHlwZT17CmdaKCl7cmV0dXJuIkludmFsaWQgYXJndW1lbnQiKyghdGhpcy5hPyIo +cykiOiIiKX0sCmdOKCl7cmV0dXJuIiJ9LAoiWyIoYSl7dmFyIHM9dGhpcyxyPXMuYyxxPXI9PW51bGw/ +IiI6IiAoIityKyIpIixwPXMuZCxvPXA9PW51bGw/IiI6IjogIitBLkVqKHApLG49cy5nWigpK3Erbwpp +Zighcy5hKXJldHVybiBuCnJldHVybiBuK3MuZ04oKSsiOiAiK0EuaGwocy5iKX19CkEuYkoucHJvdG90 +eXBlPXsKZ1ooKXtyZXR1cm4iUmFuZ2VFcnJvciJ9LApnTigpe3ZhciBzLHI9dGhpcy5lLHE9dGhpcy5m +CmlmKHI9PW51bGwpcz1xIT1udWxsPyI6IE5vdCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gIitBLkVqKHEp +OiIiCmVsc2UgaWYocT09bnVsbClzPSI6IE5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gIitBLkVq +KHIpCmVsc2UgaWYocT5yKXM9IjogTm90IGluIGluY2x1c2l2ZSByYW5nZSAiK0EuRWoocikrIi4uIitB +LkVqKHEpCmVsc2Ugcz1xPHI/IjogVmFsaWQgdmFsdWUgcmFuZ2UgaXMgZW1wdHkiOiI6IE9ubHkgdmFs +aWQgdmFsdWUgaXMgIitBLkVqKHIpCnJldHVybiBzfX0KQS5lWS5wcm90b3R5cGU9ewpnWigpe3JldHVy +biJSYW5nZUVycm9yIn0sCmdOKCl7aWYoQS5JWih0aGlzLmIpPDApcmV0dXJuIjogaW5kZXggbXVzdCBu +b3QgYmUgbmVnYXRpdmUiCnZhciBzPXRoaXMuZgppZihzPT09MClyZXR1cm4iOiBubyBpbmRpY2VzIGFy +ZSB2YWxpZCIKcmV0dXJuIjogaW5kZXggc2hvdWxkIGJlIGxlc3MgdGhhbiAiK3N9LApnayhhKXtyZXR1 +cm4gdGhpcy5mfX0KQS5tcC5wcm90b3R5cGU9ewoiWyIoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxrPXRo +aXMsaj17fSxpPW5ldyBBLk0oIiIpCmouYT0iIgpzPWsuYwpmb3Iocj1zLmxlbmd0aCxxPTAscD0iIixv +PSIiO3E8cjsrK3Esbz0iLCAiKXtuPXNbcV0KaS5hPXArbwpwPWkuYSs9QS5obChuKQpqLmE9IiwgIn1r +LmQuSygwLG5ldyBBLldGKGosaSkpCm09QS5obChrLmEpCmw9aVsiWyJdKDApCnJldHVybiJOb1N1Y2hN +ZXRob2RFcnJvcjogbWV0aG9kIG5vdCBmb3VuZDogJyIray5iLmErIidcblJlY2VpdmVyOiAiK20rIlxu +QXJndW1lbnRzOiBbIitsKyJdIn19CkEudWIucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiJVbnN1cHBv +cnRlZCBvcGVyYXRpb246ICIrdGhpcy5hfX0KQS5kcy5wcm90b3R5cGU9ewoiWyIoYSl7cmV0dXJuIlVu +aW1wbGVtZW50ZWRFcnJvcjogIit0aGlzLmF9fQpBLmxqLnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4i +QmFkIHN0YXRlOiAiK3RoaXMuYX19CkEuVVYucHJvdG90eXBlPXsKIlsiKGEpe3ZhciBzPXRoaXMuYQpp +ZihzPT1udWxsKXJldHVybiJDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgaXRlcmF0aW9uLiIK +cmV0dXJuIkNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVyYXRpb246ICIrQS5obChzKSsi +LiJ9fQpBLms1LnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4iT3V0IG9mIE1lbW9yeSJ9LApnSUkoKXty +ZXR1cm4gbnVsbH0sCiRpWFM6MX0KQS5LWS5wcm90b3R5cGU9ewoiWyIoYSl7cmV0dXJuIlN0YWNrIE92 +ZXJmbG93In0sCmdJSSgpe3JldHVybiBudWxsfSwKJGlYUzoxfQpBLnAucHJvdG90eXBlPXsKIlsiKGEp +e3JldHVybiJSZWFkaW5nIHN0YXRpYyB2YXJpYWJsZSAnIit0aGlzLmErIicgZHVyaW5nIGl0cyBpbml0 +aWFsaXphdGlvbiJ9fQpBLkNELnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4iRXhjZXB0aW9uOiAiK3Ro +aXMuYX0sCiRpUno6MX0KQS5hRS5wcm90b3R5cGU9ewoiWyIoYSl7dmFyIHMscixxLHAsbyxuLG0sbCxr +LGosaSxoPXRoaXMuYSxnPSIiIT09aD8iRm9ybWF0RXhjZXB0aW9uOiAiK2g6IkZvcm1hdEV4Y2VwdGlv +biIsZj10aGlzLmMsZT10aGlzLmIKaWYodHlwZW9mIGU9PSJzdHJpbmciKXtpZihmIT1udWxsKXM9Zjww +fHxmPmUubGVuZ3RoCmVsc2Ugcz0hMQppZihzKWY9bnVsbAppZihmPT1udWxsKXtpZihlLmxlbmd0aD43 +OCllPUIueEIuTmooZSwwLDc1KSsiLi4uIgpyZXR1cm4gZysiXG4iK2V9Zm9yKHI9MSxxPTAscD0hMSxv +PTA7bzxmOysrbyl7bj1CLnhCLlcoZSxvKQppZihuPT09MTApe2lmKHEhPT1vfHwhcCkrK3IKcT1vKzEK +cD0hMX1lbHNlIGlmKG49PT0xMyl7KytyCnE9bysxCnA9ITB9fWc9cj4xP2crKCIgKGF0IGxpbmUgIity +KyIsIGNoYXJhY3RlciAiKyhmLXErMSkrIilcbiIpOmcrKCIgKGF0IGNoYXJhY3RlciAiKyhmKzEpKyIp +XG4iKQptPWUubGVuZ3RoCmZvcihvPWY7bzxtOysrbyl7bj1CLnhCLk8oZSxvKQppZihuPT09MTB8fG49 +PT0xMyl7bT1vCmJyZWFrfX1pZihtLXE+NzgpaWYoZi1xPDc1KXtsPXErNzUKaz1xCmo9IiIKaT0iLi4u +In1lbHNle2lmKG0tZjw3NSl7az1tLTc1Cmw9bQppPSIifWVsc2V7az1mLTM2Cmw9ZiszNgppPSIuLi4i +fWo9Ii4uLiJ9ZWxzZXtsPW0Kaz1xCmo9IiIKaT0iIn1yZXR1cm4gZytqK0IueEIuTmooZSxrLGwpK2kr +IlxuIitCLnhCLkl4KCIgIixmLWsrai5sZW5ndGgpKyJeXG4ifWVsc2UgcmV0dXJuIGYhPW51bGw/Zyso +IiAoYXQgb2Zmc2V0ICIrQS5FaihmKSsiKSIpOmd9LAokaVJ6OjF9CkEuY1gucHJvdG90eXBlPXsKZHIo +YSxiKXtyZXR1cm4gQS5HSih0aGlzLEEuTGgodGhpcykuQygiY1guRSIpLGIpfSwKRTIoYSxiLGMpe3Zh +ciBzPUEuTGgodGhpcykKcmV0dXJuIEEuSzEodGhpcyxzLktxKGMpLkMoIjEoY1guRSkiKS5hKGIpLHMu +QygiY1guRSIpLGMpfSwKZXYoYSxiKXt2YXIgcz1BLkxoKHRoaXMpCnJldHVybiBuZXcgQS5VNSh0aGlz +LHMuQygiYTIoY1guRSkiKS5hKGIpLHMuQygiVTU8Y1guRT4iKSl9LApOMChhLGIsYyxkKXt2YXIgcyxy +CmQuYShiKQpBLkxoKHRoaXMpLktxKGQpLkMoIjEoMSxjWC5FKSIpLmEoYykKZm9yKHM9dGhpcy5nQSh0 +aGlzKSxyPWI7cy5HKCk7KXI9Yy4kMihyLHMuZ2woKSkKcmV0dXJuIHJ9LAp0dChhLGIpe3JldHVybiBB +LlkxKHRoaXMsYixBLkxoKHRoaXMpLkMoImNYLkUiKSl9LApicihhKXtyZXR1cm4gdGhpcy50dChhLCEw +KX0sCmdrKGEpe3ZhciBzLHI9dGhpcy5nQSh0aGlzKQpmb3Iocz0wO3IuRygpOykrK3MKcmV0dXJuIHN9 +LApnbDAoYSl7cmV0dXJuIXRoaXMuZ0EodGhpcykuRygpfSwKZ29yKGEpe3JldHVybiF0aGlzLmdsMCh0 +aGlzKX0sCmVSKGEsYil7cmV0dXJuIEEuYksodGhpcyxiLEEuTGgodGhpcykuQygiY1guRSIpKX0sCmdy +OChhKXt2YXIgcyxyPXRoaXMuZ0EodGhpcykKaWYoIXIuRygpKXRocm93IEEuYihBLldwKCkpCnM9ci5n +bCgpCmlmKHIuRygpKXRocm93IEEuYihBLkFtKCkpCnJldHVybiBzfSwKRShhLGIpe3ZhciBzLHIscQpB +LmsxKGIsImluZGV4IikKZm9yKHM9dGhpcy5nQSh0aGlzKSxyPTA7cy5HKCk7KXtxPXMuZ2woKQppZihi +PT09cilyZXR1cm4gcTsrK3J9dGhyb3cgQS5iKEEuQ2YoYix0aGlzLCJpbmRleCIsbnVsbCxyKSl9LAoi +WyIoYSl7cmV0dXJuIEEuRVAodGhpcywiKCIsIikiKX19CkEuQW4ucHJvdG90eXBlPXt9CkEuTjMucHJv +dG90eXBlPXsKIlsiKGEpe3JldHVybiJNYXBFbnRyeSgiK0EuRWoodGhpcy5hKSsiOiAiK0EuRWoodGhp +cy5iKSsiKSJ9fQpBLmM4LnByb3RvdHlwZT17CmdtKGEpe3JldHVybiBBLk1oLnByb3RvdHlwZS5nbS5j +YWxsKHRoaXMsdGhpcyl9LAoiWyIoYSl7cmV0dXJuIm51bGwifX0KQS5NaC5wcm90b3R5cGU9eyRpTWg6 +MSwKRE4oYSxiKXtyZXR1cm4gdGhpcz09PWJ9LApnbShhKXtyZXR1cm4gQS5lUSh0aGlzKX0sCiJbIihh +KXtyZXR1cm4iSW5zdGFuY2Ugb2YgJyIrQS5saCh0aGlzKSsiJyJ9LAplNyhhLGIpe3Quby5hKGIpCnRo +cm93IEEuYihBLmxyKHRoaXMsYi5nV2EoKSxiLmduZCgpLGIuZ1ZtKCkpKX0sCnRvU3RyaW5nKCl7cmV0 +dXJuIHRoaXNbIlsiXSh0aGlzKX19CkEuWmQucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiIifSwKJGlH +ejoxfQpBLk0ucHJvdG90eXBlPXsKZ2soYSl7cmV0dXJuIHRoaXMuYS5sZW5ndGh9LAoiWyIoYSl7dmFy +IHM9dGhpcy5hCnJldHVybiBzLmNoYXJDb2RlQXQoMCk9PTA/czpzfSwKJGlCTDoxfQpBLm4xLnByb3Rv +dHlwZT17CiQyKGEsYil7dmFyIHMscixxLHAKdC5JLmEoYSkKQS5uKGIpCnM9Qi54Qi5PWShiLCI9IikK +aWYocz09PS0xKXtpZihiIT09IiIpYS5ZNSgwLEEua3UoYiwwLGIubGVuZ3RoLHRoaXMuYSwhMCksIiIp +fWVsc2UgaWYocyE9PTApe3I9Qi54Qi5OaihiLDAscykKcT1CLnhCLnluKGIscysxKQpwPXRoaXMuYQph +Llk1KDAsQS5rdShyLDAsci5sZW5ndGgscCwhMCksQS5rdShxLDAscS5sZW5ndGgscCwhMCkpfXJldHVy +biBhfSwKJFM6NTJ9CkEuY1MucHJvdG90eXBlPXsKJDIoYSxiKXt0aHJvdyBBLmIoQS5ycigiSWxsZWdh +bCBJUHY0IGFkZHJlc3MsICIrYSx0aGlzLmEsYikpfSwKJFM6MTl9CkEuVkMucHJvdG90eXBlPXsKJDIo +YSxiKXt0aHJvdyBBLmIoQS5ycigiSWxsZWdhbCBJUHY2IGFkZHJlc3MsICIrYSx0aGlzLmEsYikpfSwK +JFM6MjB9CkEuSlQucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgcwppZihiLWE+NCl0aGlzLmEuJDIoImFu +IElQdjYgcGFydCBjYW4gb25seSBjb250YWluIGEgbWF4aW11bSBvZiA0IGhleCBkaWdpdHMiLGEpCnM9 +QS5RQShCLnhCLk5qKHRoaXMuYixhLGIpLDE2KQppZihzPDB8fHM+NjU1MzUpdGhpcy5hLiQyKCJlYWNo +IHBhcnQgbXVzdCBiZSBpbiB0aGUgcmFuZ2Ugb2YgYDB4MC4uMHhGRkZGYCIsYSkKcmV0dXJuIHN9LAok +UzoyMX0KQS5Ebi5wcm90b3R5cGU9ewpnbkQoKXt2YXIgcyxyLHEscCxvPXRoaXMsbj1vLncKaWYobj09 +PSQpe3M9by5hCnI9cy5sZW5ndGghPT0wPyIiK3MrIjoiOiIiCnE9by5jCnA9cT09bnVsbAppZighcHx8 +cz09PSJmaWxlIil7cz1yKyIvLyIKcj1vLmIKaWYoci5sZW5ndGghPT0wKXM9cytyKyJAIgppZighcClz +Kz1xCnI9by5kCmlmKHIhPW51bGwpcz1zKyI6IitBLkVqKHIpfWVsc2Ugcz1yCnMrPW8uZQpyPW8uZgpp +ZihyIT1udWxsKXM9cysiPyIrcgpyPW8ucgppZihyIT1udWxsKXM9cysiIyIrcgpuIT09JCYmQS5wUigi +X3RleHQiKQpuPW8udz1zLmNoYXJDb2RlQXQoMCk9PTA/czpzfXJldHVybiBufSwKZ0ZqKCl7dmFyIHMs +cixxPXRoaXMscD1xLngKaWYocD09PSQpe3M9cS5lCmlmKHMubGVuZ3RoIT09MCYmQi54Qi5XKHMsMCk9 +PT00NylzPUIueEIueW4ocywxKQpyPXMubGVuZ3RoPT09MD9CLnhEOkEuQUYobmV3IEEubEooQS5RSShz +LnNwbGl0KCIvIiksdC5zKSx0LmRPLmEoQS5QSCgpKSx0LmRvKSx0Lk4pCnEueCE9PSQmJkEucFIoInBh +dGhTZWdtZW50cyIpCnEuc2tEKHIpCnA9cn1yZXR1cm4gcH0sCmdtKGEpe3ZhciBzLHI9dGhpcyxxPXIu +eQppZihxPT09JCl7cz1CLnhCLmdtKHIuZ25EKCkpCnIueSE9PSQmJkEucFIoImhhc2hDb2RlIikKci55 +PXMKcT1zfXJldHVybiBxfSwKZ2hZKCl7dmFyIHMscixxPXRoaXMscD1xLnoKaWYocD09PSQpe3M9cS5m +CnI9bmV3IEEuR2ooQS5XWChzPT1udWxsPyIiOnMpLHQuZHcpCnEueiE9PSQmJkEucFIoInF1ZXJ5UGFy +YW1ldGVycyIpCnEuc3dnKHIpCnA9cn1yZXR1cm4gcH0sCmdrdSgpe3JldHVybiB0aGlzLmJ9LApnSmYo +YSl7dmFyIHM9dGhpcy5jCmlmKHM9PW51bGwpcmV0dXJuIiIKaWYoQi54Qi5uKHMsIlsiKSlyZXR1cm4g +Qi54Qi5OaihzLDEscy5sZW5ndGgtMSkKcmV0dXJuIHN9LApndHAoYSl7dmFyIHM9dGhpcy5kCnJldHVy +biBzPT1udWxsP0Eud0sodGhpcy5hKTpzfSwKZ3RQKCl7dmFyIHM9dGhpcy5mCnJldHVybiBzPT1udWxs +PyIiOnN9LApnS2EoKXt2YXIgcz10aGlzLnIKcmV0dXJuIHM9PW51bGw/IiI6c30sCmhCKGEpe3ZhciBz +PXRoaXMuYQppZihhLmxlbmd0aCE9PXMubGVuZ3RoKXJldHVybiExCnJldHVybiBBLmJVKGEscywwKT49 +MH0sCm5tKGEsYil7dmFyIHMscixxLHAsbyxuLG0sbCxrLGo9dGhpcwp0LmM5LmEoYikKcz1qLmEKcj1z +PT09ImZpbGUiCnE9ai5iCnA9ai5kCm89ai5jCmlmKCEobyE9bnVsbCkpbz1xLmxlbmd0aCE9PTB8fHAh +PW51bGx8fHI/IiI6bnVsbApuPWouZQppZighciltPW8hPW51bGwmJm4ubGVuZ3RoIT09MAplbHNlIG09 +ITAKaWYobSYmIUIueEIubihuLCIvIikpbj0iLyIrbgpsPW4Kaz1BLmxlKG51bGwsMCwwLGIpCnJldHVy +biBBLkNnKHMscSxvLHAsbCxrLGoucil9LApKaChhLGIpe3ZhciBzLHIscSxwLG8sbgpmb3Iocz0wLHI9 +MDtCLnhCLlFpKGIsIi4uLyIscik7KXtyKz0zOysrc31xPUIueEIuY24oYSwiLyIpCndoaWxlKCEwKXtp +ZighKHE+MCYmcz4wKSlicmVhawpwPUIueEIuUGsoYSwiLyIscS0xKQppZihwPDApYnJlYWsKbz1xLXAK +bj1vIT09MgppZighbnx8bz09PTMpaWYoQi54Qi5PKGEscCsxKT09PTQ2KW49IW58fEIueEIuTyhhLHAr +Mik9PT00NgplbHNlIG49ITEKZWxzZSBuPSExCmlmKG4pYnJlYWs7LS1zCnE9cH1yZXR1cm4gQi54Qi5p +NyhhLHErMSxudWxsLEIueEIueW4oYixyLTMqcykpfSwKWkkoYSl7cmV0dXJuIHRoaXMubVMoQS5oSyhh +KSl9LAptUyhhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssaixpPXRoaXMsaD1udWxsCmlmKGEuZ0ZpKCku +bGVuZ3RoIT09MCl7cz1hLmdGaSgpCmlmKGEuZ2NqKCkpe3I9YS5na3UoKQpxPWEuZ0pmKGEpCnA9YS5n +eEEoKT9hLmd0cChhKTpofWVsc2V7cD1oCnE9cApyPSIifW89QS54ZShhLmdJaShhKSkKbj1hLmdRRCgp +P2EuZ3RQKCk6aH1lbHNle3M9aS5hCmlmKGEuZ2NqKCkpe3I9YS5na3UoKQpxPWEuZ0pmKGEpCnA9QS53 +QihhLmd4QSgpP2EuZ3RwKGEpOmgscykKbz1BLnhlKGEuZ0lpKGEpKQpuPWEuZ1FEKCk/YS5ndFAoKTpo +fWVsc2V7cj1pLmIKcT1pLmMKcD1pLmQKbz1pLmUKaWYoYS5nSWkoYSk9PT0iIiluPWEuZ1FEKCk/YS5n +dFAoKTppLmYKZWxzZXttPUEudWooaSxvKQppZihtPjApe2w9Qi54Qi5OaihvLDAsbSkKbz1hLmd0VCgp +P2wrQS54ZShhLmdJaShhKSk6bCtBLnhlKGkuSmgoQi54Qi55bihvLGwubGVuZ3RoKSxhLmdJaShhKSkp +fWVsc2UgaWYoYS5ndFQoKSlvPUEueGUoYS5nSWkoYSkpCmVsc2UgaWYoby5sZW5ndGg9PT0wKWlmKHE9 +PW51bGwpbz1zLmxlbmd0aD09PTA/YS5nSWkoYSk6QS54ZShhLmdJaShhKSkKZWxzZSBvPUEueGUoIi8i +K2EuZ0lpKGEpKQplbHNle2s9aS5KaChvLGEuZ0lpKGEpKQpqPXMubGVuZ3RoPT09MAppZighanx8cSE9 +bnVsbHx8Qi54Qi5uKG8sIi8iKSlvPUEueGUoaykKZWxzZSBvPUEud0Yoaywhanx8cSE9bnVsbCl9bj1h +LmdRRCgpP2EuZ3RQKCk6aH19fXJldHVybiBBLkNnKHMscixxLHAsbyxuLGEuZ1o4KCk/YS5nS2EoKTpo +KX0sCmdjaigpe3JldHVybiB0aGlzLmMhPW51bGx9LApneEEoKXtyZXR1cm4gdGhpcy5kIT1udWxsfSwK +Z1FEKCl7cmV0dXJuIHRoaXMuZiE9bnVsbH0sCmdaOCgpe3JldHVybiB0aGlzLnIhPW51bGx9LApndFQo +KXtyZXR1cm4gQi54Qi5uKHRoaXMuZSwiLyIpfSwKdDQoKXt2YXIgcyxyPXRoaXMscT1yLmEKaWYocSE9 +PSIiJiZxIT09ImZpbGUiKXRocm93IEEuYihBLkw0KCJDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBm +cm9tIGEgIitxKyIgVVJJIikpCnE9ci5mCmlmKChxPT1udWxsPyIiOnEpIT09IiIpdGhyb3cgQS5iKEEu +TDQodS5pKSkKcT1yLnIKaWYoKHE9PW51bGw/IiI6cSkhPT0iIil0aHJvdyBBLmIoQS5MNCh1LmwpKQpx +PSQud1EoKQppZihBLm9UKHEpKXE9QS5tbihyKQplbHNle2lmKHIuYyE9bnVsbCYmci5nSmYocikhPT0i +IilBLnYoQS5MNCh1LmopKQpzPXIuZ0ZqKCkKQS5rRShzLCExKQpxPUEubChCLnhCLm4oci5lLCIvIik/ +IiIrIi8iOiIiLHMsIi8iKQpxPXEuY2hhckNvZGVBdCgwKT09MD9xOnF9cmV0dXJuIHF9LAoiWyIoYSl7 +cmV0dXJuIHRoaXMuZ25EKCl9LApETihhLGIpe3ZhciBzLHIscT10aGlzCmlmKGI9PW51bGwpcmV0dXJu +ITEKaWYocT09PWIpcmV0dXJuITAKaWYodC5kRC5iKGIpKWlmKHEuYT09PWIuZ0ZpKCkpaWYocS5jIT1u +dWxsPT09Yi5nY2ooKSlpZihxLmI9PT1iLmdrdSgpKWlmKHEuZ0pmKHEpPT09Yi5nSmYoYikpaWYocS5n +dHAocSk9PT1iLmd0cChiKSlpZihxLmU9PT1iLmdJaShiKSl7cz1xLmYKcj1zPT1udWxsCmlmKCFyPT09 +Yi5nUUQoKSl7aWYocilzPSIiCmlmKHM9PT1iLmd0UCgpKXtzPXEucgpyPXM9PW51bGwKaWYoIXI9PT1i +LmdaOCgpKXtpZihyKXM9IiIKcz1zPT09Yi5nS2EoKX1lbHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0h +MX1lbHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ugcz0hMQplbHNlIHM9ITEKZWxzZSBzPSExCmVsc2Ugcz0h +MQplbHNlIHM9ITEKcmV0dXJuIHN9LApza0QoYSl7dGhpcy54PXQuYS5hKGEpfSwKc3dnKGEpe3RoaXMu +ej10LkkuYShhKX0sCiRpaUQ6MSwKZ0ZpKCl7cmV0dXJuIHRoaXMuYX0sCmdJaShhKXtyZXR1cm4gdGhp +cy5lfX0KQS5SWi5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gQS5lUChCLlpKLEEubihhKSxCLnhNLCEx +KX0sCiRTOjJ9CkEuTUUucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIgcz10aGlzLmIscj10aGlzLmEKcy5h +Kz1yLmEKci5hPSImIgpyPXMuYSs9QS5lUChCLkYzLGEsQi54TSwhMCkKaWYoYiE9bnVsbCYmYi5sZW5n +dGghPT0wKXtzLmE9cisiPSIKcy5hKz1BLmVQKEIuRjMsYixCLnhNLCEwKX19LAokUzoyM30KQS55NS5w +cm90b3R5cGU9ewokMihhLGIpe3ZhciBzLHIKQS5uKGEpCmlmKGI9PW51bGx8fHR5cGVvZiBiPT0ic3Ry +aW5nIil0aGlzLmEuJDIoYSxBLmsoYikpCmVsc2UgZm9yKHM9Si5JVCh0LmsuYShiKSkscj10aGlzLmE7 +cy5HKCk7KXIuJDIoYSxBLm4ocy5nbCgpKSl9LAokUzoxMn0KQS5QRS5wcm90b3R5cGU9ewpnbFIoKXt2 +YXIgcyxyLHEscCxvPXRoaXMsbj1udWxsLG09by5jCmlmKG09PW51bGwpe209by5iCmlmKDA+PW0ubGVu +Z3RoKXJldHVybiBBLk9IKG0sMCkKcz1vLmEKbT1tWzBdKzEKcj1CLnhCLlhVKHMsIj8iLG0pCnE9cy5s +ZW5ndGgKaWYocj49MCl7cD1BLlBJKHMscisxLHEsQi5WQywhMSkKcT1yfWVsc2UgcD1uCm09by5jPW5l +dyBBLnFlKCJkYXRhIiwiIixuLG4sQS5QSShzLG0scSxCLldkLCExKSxwLG4pfXJldHVybiBtfSwKIlsi +KGEpe3ZhciBzLHI9dGhpcy5iCmlmKDA+PXIubGVuZ3RoKXJldHVybiBBLk9IKHIsMCkKcz10aGlzLmEK +cmV0dXJuIHJbMF09PT0tMT8iZGF0YToiK3M6c319CkEueUkucHJvdG90eXBlPXsKJDIoYSxiKXt2YXIg +cz10aGlzLmEKaWYoIShhPHMubGVuZ3RoKSlyZXR1cm4gQS5PSChzLGEpCnM9c1thXQpCLk5BLmR1KHMs +MCw5NixiKQpyZXR1cm4gc30sCiRTOjI0fQpBLmM2LnByb3RvdHlwZT17CiQzKGEsYixjKXt2YXIgcyxy +LHEKZm9yKHM9Yi5sZW5ndGgscj0wO3I8czsrK3Ipe3E9Qi54Qi5XKGIscileOTYKaWYoIShxPDk2KSly +ZXR1cm4gQS5PSChhLHEpCmFbcV09Y319LAokUzoxM30KQS5xZC5wcm90b3R5cGU9ewokMyhhLGIsYyl7 +dmFyIHMscixxCmZvcihzPUIueEIuVyhiLDApLHI9Qi54Qi5XKGIsMSk7czw9cjsrK3Mpe3E9KHNeOTYp +Pj4+MAppZighKHE8OTYpKXJldHVybiBBLk9IKGEscSkKYVtxXT1jfX0sCiRTOjEzfQpBLlVmLnByb3Rv +dHlwZT17Cmdjaigpe3JldHVybiB0aGlzLmM+MH0sCmd4QSgpe3JldHVybiB0aGlzLmM+MCYmdGhpcy5k +KzE8dGhpcy5lfSwKZ1FEKCl7cmV0dXJuIHRoaXMuZjx0aGlzLnJ9LApnWjgoKXtyZXR1cm4gdGhpcy5y +PHRoaXMuYS5sZW5ndGh9LApndFQoKXtyZXR1cm4gQi54Qi5RaSh0aGlzLmEsIi8iLHRoaXMuZSl9LApn +RmkoKXt2YXIgcz10aGlzLncKcmV0dXJuIHM9PW51bGw/dGhpcy53PXRoaXMuVTIoKTpzfSwKVTIoKXt2 +YXIgcyxyPXRoaXMscT1yLmIKaWYocTw9MClyZXR1cm4iIgpzPXE9PT00CmlmKHMmJkIueEIubihyLmEs +Imh0dHAiKSlyZXR1cm4iaHR0cCIKaWYocT09PTUmJkIueEIubihyLmEsImh0dHBzIikpcmV0dXJuImh0 +dHBzIgppZihzJiZCLnhCLm4oci5hLCJmaWxlIikpcmV0dXJuImZpbGUiCmlmKHE9PT03JiZCLnhCLm4o +ci5hLCJwYWNrYWdlIikpcmV0dXJuInBhY2thZ2UiCnJldHVybiBCLnhCLk5qKHIuYSwwLHEpfSwKZ2t1 +KCl7dmFyIHM9dGhpcy5jLHI9dGhpcy5iKzMKcmV0dXJuIHM+cj9CLnhCLk5qKHRoaXMuYSxyLHMtMSk6 +IiJ9LApnSmYoYSl7dmFyIHM9dGhpcy5jCnJldHVybiBzPjA/Qi54Qi5Oaih0aGlzLmEscyx0aGlzLmQp +OiIifSwKZ3RwKGEpe3ZhciBzLHI9dGhpcwppZihyLmd4QSgpKXJldHVybiBBLlFBKEIueEIuTmooci5h +LHIuZCsxLHIuZSksbnVsbCkKcz1yLmIKaWYocz09PTQmJkIueEIubihyLmEsImh0dHAiKSlyZXR1cm4g +ODAKaWYocz09PTUmJkIueEIubihyLmEsImh0dHBzIikpcmV0dXJuIDQ0MwpyZXR1cm4gMH0sCmdJaShh +KXtyZXR1cm4gQi54Qi5Oaih0aGlzLmEsdGhpcy5lLHRoaXMuZil9LApndFAoKXt2YXIgcz10aGlzLmYs +cj10aGlzLnIKcmV0dXJuIHM8cj9CLnhCLk5qKHRoaXMuYSxzKzEscik6IiJ9LApnS2EoKXt2YXIgcz10 +aGlzLnIscj10aGlzLmEKcmV0dXJuIHM8ci5sZW5ndGg/Qi54Qi55bihyLHMrMSk6IiJ9LApnRmooKXt2 +YXIgcyxyLHE9dGhpcy5lLHA9dGhpcy5mLG89dGhpcy5hCmlmKEIueEIuUWkobywiLyIscSkpKytxCmlm +KHE9PT1wKXJldHVybiBCLnhECnM9QS5RSShbXSx0LnMpCmZvcihyPXE7cjxwOysrcilpZihCLnhCLk8o +byxyKT09PTQ3KXtCLk5tLmkocyxCLnhCLk5qKG8scSxyKSkKcT1yKzF9Qi5ObS5pKHMsQi54Qi5Oaihv +LHEscCkpCnJldHVybiBBLkFGKHMsdC5OKX0sCmdoWSgpe2lmKHRoaXMuZj49dGhpcy5yKXJldHVybiBC +LkNNCnJldHVybiBuZXcgQS5HaihBLldYKHRoaXMuZ3RQKCkpLHQuZHcpfSwKa1goYSl7dmFyIHM9dGhp +cy5kKzEKcmV0dXJuIHMrYS5sZW5ndGg9PT10aGlzLmUmJkIueEIuUWkodGhpcy5hLGEscyl9LApOOSgp +e3ZhciBzPXRoaXMscj1zLnIscT1zLmEKaWYocj49cS5sZW5ndGgpcmV0dXJuIHMKcmV0dXJuIG5ldyBB +LlVmKEIueEIuTmoocSwwLHIpLHMuYixzLmMscy5kLHMuZSxzLmYscixzLncpfSwKbm0oYSxiKXt2YXIg +cyxyLHEscCxvLG4sbSxsLGssaixpPXRoaXMsaD1udWxsCnQuYzkuYShiKQpzPWkuZ0ZpKCkKcj1zPT09 +ImZpbGUiCnE9aS5jCnA9cT4wP0IueEIuTmooaS5hLGkuYiszLHEpOiIiCm89aS5neEEoKT9pLmd0cChp +KTpoCnE9aS5jCmlmKHE+MCluPUIueEIuTmooaS5hLHEsaS5kKQplbHNlIG49cC5sZW5ndGghPT0wfHxv +IT1udWxsfHxyPyIiOmgKcT1pLmEKbT1CLnhCLk5qKHEsaS5lLGkuZikKaWYoIXIpbD1uIT1udWxsJiZt +Lmxlbmd0aCE9PTAKZWxzZSBsPSEwCmlmKGwmJiFCLnhCLm4obSwiLyIpKW09Ii8iK20Kaz1BLmxlKGgs +MCwwLGIpCmw9aS5yCmo9bDxxLmxlbmd0aD9CLnhCLnluKHEsbCsxKTpoCnJldHVybiBBLkNnKHMscCxu +LG8sbSxrLGopfSwKWkkoYSl7cmV0dXJuIHRoaXMubVMoQS5oSyhhKSl9LAptUyhhKXtpZihhIGluc3Rh +bmNlb2YgQS5VZilyZXR1cm4gdGhpcy51MSh0aGlzLGEpCnJldHVybiB0aGlzLlJlKCkubVMoYSl9LAp1 +MShhLGIpe3ZhciBzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGM9Yi5iCmlmKGM+MClyZXR1 +cm4gYgpzPWIuYwppZihzPjApe3I9YS5iCmlmKHI8PTApcmV0dXJuIGIKcT1yPT09NAppZihxJiZCLnhC +Lm4oYS5hLCJmaWxlIikpcD1iLmUhPT1iLmYKZWxzZSBpZihxJiZCLnhCLm4oYS5hLCJodHRwIikpcD0h +Yi5rWCgiODAiKQplbHNlIHA9IShyPT09NSYmQi54Qi5uKGEuYSwiaHR0cHMiKSl8fCFiLmtYKCI0NDMi +KQppZihwKXtvPXIrMQpyZXR1cm4gbmV3IEEuVWYoQi54Qi5OaihhLmEsMCxvKStCLnhCLnluKGIuYSxj +KzEpLHIscytvLGIuZCtvLGIuZStvLGIuZitvLGIucitvLGEudyl9ZWxzZSByZXR1cm4gdGhpcy5SZSgp +Lm1TKGIpfW49Yi5lCmM9Yi5mCmlmKG49PT1jKXtzPWIucgppZihjPHMpe3I9YS5mCm89ci1jCnJldHVy +biBuZXcgQS5VZihCLnhCLk5qKGEuYSwwLHIpK0IueEIueW4oYi5hLGMpLGEuYixhLmMsYS5kLGEuZSxj +K28scytvLGEudyl9Yz1iLmEKaWYoczxjLmxlbmd0aCl7cj1hLnIKcmV0dXJuIG5ldyBBLlVmKEIueEIu +TmooYS5hLDAscikrQi54Qi55bihjLHMpLGEuYixhLmMsYS5kLGEuZSxhLmYscysoci1zKSxhLncpfXJl +dHVybiBhLk45KCl9cz1iLmEKaWYoQi54Qi5RaShzLCIvIixuKSl7bT1hLmUKbD1BLlJ4KHRoaXMpCms9 +bD4wP2w6bQpvPWstbgpyZXR1cm4gbmV3IEEuVWYoQi54Qi5OaihhLmEsMCxrKStCLnhCLnluKHMsbiks +YS5iLGEuYyxhLmQsbSxjK28sYi5yK28sYS53KX1qPWEuZQppPWEuZgppZihqPT09aSYmYS5jPjApe2Zv +cig7Qi54Qi5RaShzLCIuLi8iLG4pOyluKz0zCm89ai1uKzEKcmV0dXJuIG5ldyBBLlVmKEIueEIuTmoo +YS5hLDAsaikrIi8iK0IueEIueW4ocyxuKSxhLmIsYS5jLGEuZCxqLGMrbyxiLnIrbyxhLncpfWg9YS5h +Cmw9QS5SeCh0aGlzKQppZihsPj0wKWc9bAplbHNlIGZvcihnPWo7Qi54Qi5RaShoLCIuLi8iLGcpOyln +Kz0zCmY9MAp3aGlsZSghMCl7ZT1uKzMKaWYoIShlPD1jJiZCLnhCLlFpKHMsIi4uLyIsbikpKWJyZWFr +OysrZgpuPWV9Zm9yKGQ9IiI7aT5nOyl7LS1pCmlmKEIueEIuTyhoLGkpPT09NDcpe2lmKGY9PT0wKXtk +PSIvIgpicmVha30tLWYKZD0iLyJ9fWlmKGk9PT1nJiZhLmI8PTAmJiFCLnhCLlFpKGgsIi8iLGopKXtu +LT1mKjMKZD0iIn1vPWktbitkLmxlbmd0aApyZXR1cm4gbmV3IEEuVWYoQi54Qi5OaihoLDAsaSkrZCtC +LnhCLnluKHMsbiksYS5iLGEuYyxhLmQsaixjK28sYi5yK28sYS53KX0sCnQ0KCl7dmFyIHMscixxPXRo +aXMscD1xLmIKaWYocD49MCl7cz0hKHA9PT00JiZCLnhCLm4ocS5hLCJmaWxlIikpCnA9c31lbHNlIHA9 +ITEKaWYocCl0aHJvdyBBLmIoQS5MNCgiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhICIr +cS5nRmkoKSsiIFVSSSIpKQpwPXEuZgpzPXEuYQppZihwPHMubGVuZ3RoKXtpZihwPHEucil0aHJvdyBB +LmIoQS5MNCh1LmkpKQp0aHJvdyBBLmIoQS5MNCh1LmwpKX1yPSQud1EoKQppZihBLm9UKHIpKXA9QS5t +bihxKQplbHNle2lmKHEuYzxxLmQpQS52KEEuTDQodS5qKSkKcD1CLnhCLk5qKHMscS5lLHApfXJldHVy +biBwfSwKZ20oYSl7dmFyIHM9dGhpcy54CnJldHVybiBzPT1udWxsP3RoaXMueD1CLnhCLmdtKHRoaXMu +YSk6c30sCkROKGEsYil7aWYoYj09bnVsbClyZXR1cm4hMQppZih0aGlzPT09YilyZXR1cm4hMApyZXR1 +cm4gdC5kRC5iKGIpJiZ0aGlzLmE9PT1iWyJbIl0oMCl9LApSZSgpe3ZhciBzPXRoaXMscj1udWxsLHE9 +cy5nRmkoKSxwPXMuZ2t1KCksbz1zLmM+MD9zLmdKZihzKTpyLG49cy5neEEoKT9zLmd0cChzKTpyLG09 +cy5hLGw9cy5mLGs9Qi54Qi5OaihtLHMuZSxsKSxqPXMucgpsPWw8aj9zLmd0UCgpOnIKcmV0dXJuIEEu +Q2cocSxwLG8sbixrLGwsajxtLmxlbmd0aD9zLmdLYSgpOnIpfSwKIlsiKGEpe3JldHVybiB0aGlzLmF9 +LAokaWlEOjF9CkEucWUucHJvdG90eXBlPXt9CkEucUUucHJvdG90eXBlPXt9CkEuR2gucHJvdG90eXBl +PXsKc0xVKGEsYil7YS5ocmVmPWJ9LAoiWyIoYSl7cmV0dXJuIFN0cmluZyhhKX0sCiRpR2g6MX0KQS5m +WS5wcm90b3R5cGU9ewoiWyIoYSl7cmV0dXJuIFN0cmluZyhhKX19CkEucloucHJvdG90eXBlPXskaXJa +OjF9CkEuQXoucHJvdG90eXBlPXskaUF6OjF9CkEuUVAucHJvdG90eXBlPXskaVFQOjF9CkEubngucHJv +dG90eXBlPXsKZ2soYSl7cmV0dXJuIGEubGVuZ3RofX0KQS5vSi5wcm90b3R5cGU9ewpnayhhKXtyZXR1 +cm4gYS5sZW5ndGh9fQpBLmlkLnByb3RvdHlwZT17fQpBLlFGLnByb3RvdHlwZT17fQpBLk5oLnByb3Rv +dHlwZT17CiJbIihhKXtyZXR1cm4gU3RyaW5nKGEpfX0KQS5hZS5wcm90b3R5cGU9ewpEYyhhLGIpe3Jl +dHVybiBhLmNyZWF0ZUhUTUxEb2N1bWVudChiKX19CkEuSUIucHJvdG90eXBlPXsKIlsiKGEpe3ZhciBz +LHIscSxwPWEubGVmdApwLnRvU3RyaW5nCnM9YS50b3AKcy50b1N0cmluZwpyPWEud2lkdGgKci50b1N0 +cmluZwpxPWEuaGVpZ2h0CnEudG9TdHJpbmcKcmV0dXJuIlJlY3RhbmdsZSAoIitBLkVqKHApKyIsICIr +QS5FaihzKSsiKSAiK0EuRWoocikrIiB4ICIrQS5FaihxKX0sCkROKGEsYil7dmFyIHMscgppZihiPT1u +dWxsKXJldHVybiExCmlmKHQucS5iKGIpKXtzPWEubGVmdApzLnRvU3RyaW5nCnI9Yi5sZWZ0CnIudG9T +dHJpbmcKaWYocz09PXIpe3M9YS50b3AKcy50b1N0cmluZwpyPWIudG9wCnIudG9TdHJpbmcKaWYocz09 +PXIpe3M9YS53aWR0aApzLnRvU3RyaW5nCnI9Yi53aWR0aApyLnRvU3RyaW5nCmlmKHM9PT1yKXtzPWEu +aGVpZ2h0CnMudG9TdHJpbmcKcj1iLmhlaWdodApyLnRvU3RyaW5nCnI9cz09PXIKcz1yfWVsc2Ugcz0h +MX1lbHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMQpyZXR1cm4gc30sCmdtKGEpe3ZhciBzLHIscSxw +PWEubGVmdApwLnRvU3RyaW5nCnM9YS50b3AKcy50b1N0cmluZwpyPWEud2lkdGgKci50b1N0cmluZwpx +PWEuaGVpZ2h0CnEudG9TdHJpbmcKcmV0dXJuIEEuZjUocCxzLHIscSl9LAokaXRuOjF9CkEubjcucHJv +dG90eXBlPXsKZ2soYSl7cmV0dXJuIGEubGVuZ3RofX0KQS53ei5wcm90b3R5cGU9ewpnayhhKXtyZXR1 +cm4gdGhpcy5hLmxlbmd0aH0sCnEoYSxiKXt2YXIgcwpBLklaKGIpCnM9dGhpcy5hCmlmKCEoYj49MCYm +YjxzLmxlbmd0aCkpcmV0dXJuIEEuT0gocyxiKQpyZXR1cm4gdGhpcy4kdGkuYy5hKHNbYl0pfSwKWTUo +YSxiLGMpe3RoaXMuJHRpLmMuYShjKQp0aHJvdyBBLmIoQS5MNCgiQ2Fubm90IG1vZGlmeSBsaXN0Iikp +fX0KQS5jdi5wcm90b3R5cGU9ewpnUWcoYSl7cmV0dXJuIG5ldyBBLmk3KGEpfSwKZ1AoYSl7cmV0dXJu +IG5ldyBBLkk0KGEpfSwKc1AoYSxiKXt2YXIgcwp0Lk8uYShiKQpzPXRoaXMuZ1AoYSkKcy5WMSgwKQpz +LkZWKDAsYil9LAoiWyIoYSl7cmV0dXJuIGEubG9jYWxOYW1lfSwKRkYoYSl7dmFyIHM9ISFhLnNjcm9s +bEludG9WaWV3SWZOZWVkZWQKaWYocylhLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKQplbHNlIGEuc2Ny +b2xsSW50b1ZpZXcoKX0sCm56KGEsYixjLGQsZSl7dmFyIHMscj10aGlzLnI2KGEsYyxkLGUpCnN3aXRj +aChiLnRvTG93ZXJDYXNlKCkpe2Nhc2UiYmVmb3JlYmVnaW4iOnM9YS5wYXJlbnROb2RlCnMudG9TdHJp +bmcKSi5FaChzLHIsYSkKYnJlYWsKY2FzZSJhZnRlcmJlZ2luIjpzPWEuY2hpbGROb2Rlcwp0aGlzLm1L +KGEscixzLmxlbmd0aD4wP3NbMF06bnVsbCkKYnJlYWsKY2FzZSJiZWZvcmVlbmQiOmEuYXBwZW5kQ2hp +bGQocikKYnJlYWsKY2FzZSJhZnRlcmVuZCI6cz1hLnBhcmVudE5vZGUKcy50b1N0cmluZwpKLkVoKHMs +cixhLm5leHRTaWJsaW5nKQpicmVhawpkZWZhdWx0OkEudihBLnhZKCJJbnZhbGlkIHBvc2l0aW9uICIr +YixudWxsKSl9fSwKcjYoYSxiLGMsZCl7dmFyIHMscixxLHAKaWYoYz09bnVsbCl7aWYoZD09bnVsbCl7 +cz0kLmx0CmlmKHM9PW51bGwpe3M9QS5RSShbXSx0LkQpCnI9bmV3IEEudkQocykKQi5ObS5pKHMsQS5U +dyhudWxsKSkKQi5ObS5pKHMsQS5CbCgpKQokLmx0PXIKZD1yfWVsc2UgZD1zfXM9JC5FVQppZihzPT1u +dWxsKXtzPW5ldyBBLktvKGQpCiQuRVU9cwpjPXN9ZWxzZXtzLmE9ZApjPXN9fWVsc2UgaWYoZCE9bnVs +bCl0aHJvdyBBLmIoQS54WSgidmFsaWRhdG9yIGNhbiBvbmx5IGJlIHBhc3NlZCBpZiB0cmVlU2FuaXRp +emVyIGlzIG51bGwiLG51bGwpKQppZigkLnhvPT1udWxsKXtzPWRvY3VtZW50CnI9cy5pbXBsZW1lbnRh +dGlvbgpyLnRvU3RyaW5nCnI9Qi5tSC5EYyhyLCIiKQokLnhvPXIKJC5CTz1yLmNyZWF0ZVJhbmdlKCkK +cj0kLnhvLmNyZWF0ZUVsZW1lbnQoImJhc2UiKQp0LmNSLmEocikKcz1zLmJhc2VVUkkKcy50b1N0cmlu +ZwpyLmhyZWY9cwokLnhvLmhlYWQuYXBwZW5kQ2hpbGQocil9cz0kLnhvCmlmKHMuYm9keT09bnVsbCl7 +cj1zLmNyZWF0ZUVsZW1lbnQoImJvZHkiKQpCLkJaLnNHUyhzLHQuci5hKHIpKX1zPSQueG8KaWYodC5y +LmIoYSkpe3M9cy5ib2R5CnMudG9TdHJpbmcKcT1zfWVsc2V7cy50b1N0cmluZwpxPXMuY3JlYXRlRWxl +bWVudChhLnRhZ05hbWUpCiQueG8uYm9keS5hcHBlbmRDaGlsZChxKX1pZigiY3JlYXRlQ29udGV4dHVh +bEZyYWdtZW50IiBpbiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlJiYhQi5ObS50ZyhCLlNxLGEudGFnTmFt +ZSkpeyQuQk8uc2VsZWN0Tm9kZUNvbnRlbnRzKHEpCnM9JC5CTwpzLnRvU3RyaW5nCnA9cy5jcmVhdGVD +b250ZXh0dWFsRnJhZ21lbnQoYj09bnVsbD8ibnVsbCI6Yil9ZWxzZXtKLndmKHEsYikKcD0kLnhvLmNy +ZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpmb3IoO3M9cS5maXJzdENoaWxkLHMhPW51bGw7KXAuYXBwZW5k +Q2hpbGQocyl9aWYocSE9PSQueG8uYm9keSlKLkx0KHEpCmMuUG4ocCkKZG9jdW1lbnQuYWRvcHROb2Rl +KHApCnJldHVybiBwfSwKQUgoYSxiLGMpe3JldHVybiB0aGlzLnI2KGEsYixjLG51bGwpfSwKc2hmKGEs +Yil7dGhpcy5ZQyhhLGIpfSwKcGsoYSxiLGMpe3RoaXMuc2E0KGEsbnVsbCkKYS5hcHBlbmRDaGlsZCh0 +aGlzLnI2KGEsYixudWxsLGMpKX0sCllDKGEsYil7cmV0dXJuIHRoaXMucGsoYSxiLG51bGwpfSwKc1JO +KGEsYil7YS5pbm5lckhUTUw9Yn0sCmducyhhKXtyZXR1cm4gYS50YWdOYW1lfSwKZ1ZsKGEpe3JldHVy +biBuZXcgQS5DcShhLCJjbGljayIsITEsdC5RKX0sCiRpY3Y6MX0KQS5Ddi5wcm90b3R5cGU9ewokMShh +KXtyZXR1cm4gdC5oLmIodC5BLmEoYSkpfSwKJFM6MjZ9CkEuZWEucHJvdG90eXBlPXskaWVhOjF9CkEu +RDAucHJvdG90eXBlPXsKT24oYSxiLGMsZCl7dC5idy5hKGMpCmlmKGMhPW51bGwpdGhpcy52KGEsYixj +LGQpfSwKQihhLGIsYyl7cmV0dXJuIHRoaXMuT24oYSxiLGMsbnVsbCl9LAp2KGEsYixjLGQpe3JldHVy +biBhLmFkZEV2ZW50TGlzdGVuZXIoYixBLnRSKHQuYncuYShjKSwxKSxkKX0sCiRpRDA6MX0KQS5oSC5w +cm90b3R5cGU9eyRpaEg6MX0KQS5oNC5wcm90b3R5cGU9ewpnayhhKXtyZXR1cm4gYS5sZW5ndGh9fQpB +LmJyLnByb3RvdHlwZT17CmdrKGEpe3JldHVybiBhLmxlbmd0aH19CkEuVmIucHJvdG90eXBlPXsKc0dT +KGEsYil7YS5ib2R5PWJ9fQpBLmZKLnByb3RvdHlwZT17CmVvKGEsYixjLGQpe3JldHVybiBhLm9wZW4o +YixjLCEwKX0sCiRpZko6MX0KQS53YS5wcm90b3R5cGU9e30KQS5TZy5wcm90b3R5cGU9eyRpU2c6MX0K +QS51OC5wcm90b3R5cGU9ewpnRHIoYSl7aWYoIm9yaWdpbiIgaW4gYSlyZXR1cm4gYS5vcmlnaW4KcmV0 +dXJuIGEucHJvdG9jb2wrIi8vIithLmhvc3R9LAoiWyIoYSl7cmV0dXJuIFN0cmluZyhhKX0sCiRpdTg6 +MX0KQS5Bai5wcm90b3R5cGU9eyRpQWo6MX0KQS5lNy5wcm90b3R5cGU9ewpncjgoYSl7dmFyIHM9dGhp +cy5hLHI9cy5jaGlsZE5vZGVzLmxlbmd0aAppZihyPT09MCl0aHJvdyBBLmIoQS5QVigiTm8gZWxlbWVu +dHMiKSkKaWYocj4xKXRocm93IEEuYihBLlBWKCJNb3JlIHRoYW4gb25lIGVsZW1lbnQiKSkKcz1zLmZp +cnN0Q2hpbGQKcy50b1N0cmluZwpyZXR1cm4gc30sCkZWKGEsYil7dmFyIHMscixxLHAsbwp0LmVoLmEo +YikKaWYoYiBpbnN0YW5jZW9mIEEuZTcpe3M9Yi5hCnI9dGhpcy5hCmlmKHMhPT1yKWZvcihxPXMuY2hp +bGROb2Rlcy5sZW5ndGgscD0wO3A8cTsrK3Ape289cy5maXJzdENoaWxkCm8udG9TdHJpbmcKci5hcHBl +bmRDaGlsZChvKX1yZXR1cm59Zm9yKHM9Yi5nQShiKSxyPXRoaXMuYTtzLkcoKTspci5hcHBlbmRDaGls +ZChzLmdsKCkpfSwKWTUoYSxiLGMpe3ZhciBzLHIKdC5BLmEoYykKcz10aGlzLmEKcj1zLmNoaWxkTm9k +ZXMKaWYoIShiPj0wJiZiPHIubGVuZ3RoKSlyZXR1cm4gQS5PSChyLGIpCnMucmVwbGFjZUNoaWxkKGMs +cltiXSl9LApnQShhKXt2YXIgcz10aGlzLmEuY2hpbGROb2RlcwpyZXR1cm4gbmV3IEEuVzkocyxzLmxl +bmd0aCxBLnpLKHMpLkMoIlc5PEdtLkU+IikpfSwKZ2soYSl7cmV0dXJuIHRoaXMuYS5jaGlsZE5vZGVz +Lmxlbmd0aH0sCnEoYSxiKXt2YXIgcwpBLklaKGIpCnM9dGhpcy5hLmNoaWxkTm9kZXMKaWYoIShiPj0w +JiZiPHMubGVuZ3RoKSlyZXR1cm4gQS5PSChzLGIpCnJldHVybiBzW2JdfX0KQS5LVi5wcm90b3R5cGU9 +ewp6QihhKXt2YXIgcz1hLnBhcmVudE5vZGUKaWYocyE9bnVsbClzLnJlbW92ZUNoaWxkKGEpfSwKRDQo +YSl7dmFyIHMKZm9yKDtzPWEuZmlyc3RDaGlsZCxzIT1udWxsOylhLnJlbW92ZUNoaWxkKHMpfSwKIlsi +KGEpe3ZhciBzPWEubm9kZVZhbHVlCnJldHVybiBzPT1udWxsP3RoaXMuVShhKTpzfSwKc2E0KGEsYil7 +YS50ZXh0Q29udGVudD1ifSwKbUsoYSxiLGMpe3JldHVybiBhLmluc2VydEJlZm9yZShiLGMpfSwKJGlL +VjoxfQpBLkJILnByb3RvdHlwZT17CmdrKGEpe3JldHVybiBhLmxlbmd0aH0sCnEoYSxiKXtBLklaKGIp +CmlmKGI+Pj4wIT09Ynx8Yj49YS5sZW5ndGgpdGhyb3cgQS5iKEEuQ2YoYixhLG51bGwsbnVsbCxudWxs +KSkKcmV0dXJuIGFbYl19LApZNShhLGIsYyl7dC5BLmEoYykKdGhyb3cgQS5iKEEuTDQoIkNhbm5vdCBh +c3NpZ24gZWxlbWVudCBvZiBpbW11dGFibGUgTGlzdC4iKSl9LApndEgoYSl7aWYoYS5sZW5ndGg+MCly +ZXR1cm4gYVswXQp0aHJvdyBBLmIoQS5QVigiTm8gZWxlbWVudHMiKSl9LApFKGEsYil7aWYoIShiPj0w +JiZiPGEubGVuZ3RoKSlyZXR1cm4gQS5PSChhLGIpCnJldHVybiBhW2JdfSwKJGliUToxLAokaVhqOjEs +CiRpY1g6MSwKJGl6TToxfQpBLlNOLnByb3RvdHlwZT17fQpBLndWLnByb3RvdHlwZT17JGl3VjoxfQpB +LmxwLnByb3RvdHlwZT17CmdrKGEpe3JldHVybiBhLmxlbmd0aH19CkEuVGIucHJvdG90eXBlPXsKcjYo +YSxiLGMsZCl7dmFyIHMscgppZigiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiBpbiB3aW5kb3cuUmFu +Z2UucHJvdG90eXBlKXJldHVybiB0aGlzLkRXKGEsYixjLGQpCnM9QS5VOSgiPHRhYmxlPiIrQS5Faihi +KSsiPC90YWJsZT4iLGMsZCkKcj1kb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkKbmV3IEEu +ZTcocikuRlYoMCxuZXcgQS5lNyhzKSkKcmV0dXJuIHJ9fQpBLkl2LnByb3RvdHlwZT17CnI2KGEsYixj +LGQpe3ZhciBzLHIKaWYoImNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudCIgaW4gd2luZG93LlJhbmdlLnBy +b3RvdHlwZSlyZXR1cm4gdGhpcy5EVyhhLGIsYyxkKQpzPWRvY3VtZW50CnI9cy5jcmVhdGVEb2N1bWVu +dEZyYWdtZW50KCkKcz1uZXcgQS5lNyhCLkllLnI2KHMuY3JlYXRlRWxlbWVudCgidGFibGUiKSxiLGMs +ZCkpCnM9bmV3IEEuZTcocy5ncjgocykpCm5ldyBBLmU3KHIpLkZWKDAsbmV3IEEuZTcocy5ncjgocykp +KQpyZXR1cm4gcn19CkEuV1AucHJvdG90eXBlPXsKcjYoYSxiLGMsZCl7dmFyIHMscgppZigiY3JlYXRl +Q29udGV4dHVhbEZyYWdtZW50IiBpbiB3aW5kb3cuUmFuZ2UucHJvdG90eXBlKXJldHVybiB0aGlzLkRX +KGEsYixjLGQpCnM9ZG9jdW1lbnQKcj1zLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpzPW5ldyBBLmU3 +KEIuSWUucjYocy5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGIsYyxkKSkKbmV3IEEuZTcocikuRlYoMCxu +ZXcgQS5lNyhzLmdyOChzKSkpCnJldHVybiByfX0KQS55WS5wcm90b3R5cGU9ewpwayhhLGIsYyl7dmFy +IHMscgp0aGlzLnNhNChhLG51bGwpCnM9YS5jb250ZW50CnMudG9TdHJpbmcKSi5iVChzKQpyPXRoaXMu +cjYoYSxiLG51bGwsYykKYS5jb250ZW50LmFwcGVuZENoaWxkKHIpfSwKWUMoYSxiKXtyZXR1cm4gdGhp +cy5wayhhLGIsbnVsbCl9LAokaXlZOjF9CkEudzYucHJvdG90eXBlPXt9CkEuSzUucHJvdG90eXBlPXsK +UG8oYSxiLGMpe3ZhciBzPUEuUDEoYS5vcGVuKGIsYykpCnJldHVybiBzfSwKZ21XKGEpe3JldHVybiB0 +LkYuYShhLmxvY2F0aW9uKX0sCnVzKGEsYil7cmV0dXJuIGEuY29uZmlybShiKX0sCiRpSzU6MSwKJGlk +QToxfQpBLkNtLnByb3RvdHlwZT17JGlDbToxfQpBLkNRLnByb3RvdHlwZT17JGlDUToxfQpBLnc0LnBy +b3RvdHlwZT17CiJbIihhKXt2YXIgcyxyLHEscD1hLmxlZnQKcC50b1N0cmluZwpzPWEudG9wCnMudG9T +dHJpbmcKcj1hLndpZHRoCnIudG9TdHJpbmcKcT1hLmhlaWdodApxLnRvU3RyaW5nCnJldHVybiJSZWN0 +YW5nbGUgKCIrQS5FaihwKSsiLCAiK0EuRWoocykrIikgIitBLkVqKHIpKyIgeCAiK0EuRWoocSl9LApE +TihhLGIpe3ZhciBzLHIKaWYoYj09bnVsbClyZXR1cm4hMQppZih0LnEuYihiKSl7cz1hLmxlZnQKcy50 +b1N0cmluZwpyPWIubGVmdApyLnRvU3RyaW5nCmlmKHM9PT1yKXtzPWEudG9wCnMudG9TdHJpbmcKcj1i +LnRvcApyLnRvU3RyaW5nCmlmKHM9PT1yKXtzPWEud2lkdGgKcy50b1N0cmluZwpyPWIud2lkdGgKci50 +b1N0cmluZwppZihzPT09cil7cz1hLmhlaWdodApzLnRvU3RyaW5nCnI9Yi5oZWlnaHQKci50b1N0cmlu +ZwpyPXM9PT1yCnM9cn1lbHNlIHM9ITF9ZWxzZSBzPSExfWVsc2Ugcz0hMX1lbHNlIHM9ITEKcmV0dXJu +IHN9LApnbShhKXt2YXIgcyxyLHEscD1hLmxlZnQKcC50b1N0cmluZwpzPWEudG9wCnMudG9TdHJpbmcK +cj1hLndpZHRoCnIudG9TdHJpbmcKcT1hLmhlaWdodApxLnRvU3RyaW5nCnJldHVybiBBLmY1KHAscyxy +LHEpfX0KQS5yaC5wcm90b3R5cGU9ewpnayhhKXtyZXR1cm4gYS5sZW5ndGh9LApxKGEsYil7QS5JWihi +KQppZihiPj4+MCE9PWJ8fGI+PWEubGVuZ3RoKXRocm93IEEuYihBLkNmKGIsYSxudWxsLG51bGwsbnVs +bCkpCnJldHVybiBhW2JdfSwKWTUoYSxiLGMpe3QuQS5hKGMpCnRocm93IEEuYihBLkw0KCJDYW5ub3Qg +YXNzaWduIGVsZW1lbnQgb2YgaW1tdXRhYmxlIExpc3QuIikpfSwKRShhLGIpe2lmKCEoYj49MCYmYjxh +Lmxlbmd0aCkpcmV0dXJuIEEuT0goYSxiKQpyZXR1cm4gYVtiXX0sCiRpYlE6MSwKJGlYajoxLAokaWNY +OjEsCiRpek06MX0KQS5jZi5wcm90b3R5cGU9ewpLKGEsYil7dmFyIHMscixxLHAsbyxuCnQuZUEuYShi +KQpmb3Iocz10aGlzLmd2YygpLHI9cy5sZW5ndGgscT10aGlzLmEscD0wO3A8cy5sZW5ndGg7cy5sZW5n +dGg9PT1yfHwoMCxBLmxrKShzKSwrK3Ape289c1twXQpuPXEuZ2V0QXR0cmlidXRlKG8pCmIuJDIobyxu +PT1udWxsP0EubihuKTpuKX19LApndmMoKXt2YXIgcyxyLHEscCxvLG4sbT10aGlzLmEuYXR0cmlidXRl +cwptLnRvU3RyaW5nCnM9QS5RSShbXSx0LnMpCmZvcihyPW0ubGVuZ3RoLHE9dC5oOSxwPTA7cDxyOysr +cCl7aWYoIShwPG0ubGVuZ3RoKSlyZXR1cm4gQS5PSChtLHApCm89cS5hKG1bcF0pCmlmKG8ubmFtZXNw +YWNlVVJJPT1udWxsKXtuPW8ubmFtZQpuLnRvU3RyaW5nCkIuTm0uaShzLG4pfX1yZXR1cm4gc30sCmds +MChhKXtyZXR1cm4gdGhpcy5ndmMoKS5sZW5ndGg9PT0wfX0KQS5pNy5wcm90b3R5cGU9ewp4NChhKXt2 +YXIgcz10aGlzLmEuaGFzQXR0cmlidXRlKGEpCnJldHVybiBzfSwKcShhLGIpe3JldHVybiB0aGlzLmEu +Z2V0QXR0cmlidXRlKEEubihiKSl9LApZNShhLGIsYyl7dGhpcy5hLnNldEF0dHJpYnV0ZShiLGMpfSwK +Z2soYSl7cmV0dXJuIHRoaXMuZ3ZjKCkubGVuZ3RofX0KQS5TeS5wcm90b3R5cGU9ewp4NChhKXt2YXIg +cz10aGlzLmEuYS5oYXNBdHRyaWJ1dGUoImRhdGEtIit0aGlzLk9VKGEpKQpyZXR1cm4gc30sCnEoYSxi +KXtyZXR1cm4gdGhpcy5hLmEuZ2V0QXR0cmlidXRlKCJkYXRhLSIrdGhpcy5PVShBLm4oYikpKX0sClk1 +KGEsYixjKXt0aGlzLmEuYS5zZXRBdHRyaWJ1dGUoImRhdGEtIit0aGlzLk9VKGIpLGMpfSwKSyhhLGIp +e3RoaXMuYS5LKDAsbmV3IEEuS1ModGhpcyx0LmVBLmEoYikpKX0sCmd2Yygpe3ZhciBzPUEuUUkoW10s +dC5zKQp0aGlzLmEuSygwLG5ldyBBLkEzKHRoaXMscykpCnJldHVybiBzfSwKZ2soYSl7cmV0dXJuIHRo +aXMuZ3ZjKCkubGVuZ3RofSwKZ2wwKGEpe3JldHVybiB0aGlzLmd2YygpLmxlbmd0aD09PTB9LAp4cShh +KXt2YXIgcyxyLHE9QS5RSShhLnNwbGl0KCItIiksdC5zKQpmb3Iocz0xO3M8cS5sZW5ndGg7KytzKXty +PXFbc10KaWYoci5sZW5ndGg+MClCLk5tLlk1KHEscyxyWzBdLnRvVXBwZXJDYXNlKCkrQi54Qi55bihy +LDEpKX1yZXR1cm4gQi5ObS5IKHEsIiIpfSwKT1UoYSl7dmFyIHMscixxLHAsbwpmb3Iocz1hLmxlbmd0 +aCxyPTAscT0iIjtyPHM7KytyKXtwPWFbcl0Kbz1wLnRvTG93ZXJDYXNlKCkKcT0ocCE9PW8mJnI+MD9x +KyItIjpxKStvfXJldHVybiBxLmNoYXJDb2RlQXQoMCk9PTA/cTpxfX0KQS5LUy5wcm90b3R5cGU9ewok +MihhLGIpe2lmKEIueEIubihhLCJkYXRhLSIpKXRoaXMuYi4kMih0aGlzLmEueHEoQi54Qi55bihhLDUp +KSxiKX0sCiRTOjE0fQpBLkEzLnByb3RvdHlwZT17CiQyKGEsYil7aWYoQi54Qi5uKGEsImRhdGEtIikp +Qi5ObS5pKHRoaXMuYix0aGlzLmEueHEoQi54Qi55bihhLDUpKSl9LAokUzoxNH0KQS5JNC5wcm90b3R5 +cGU9ewpEKCl7dmFyIHMscixxLHAsbz1BLkxzKHQuTikKZm9yKHM9dGhpcy5hLmNsYXNzTmFtZS5zcGxp +dCgiICIpLHI9cy5sZW5ndGgscT0wO3E8cjsrK3Epe3A9Si5UMChzW3FdKQppZihwLmxlbmd0aCE9PTAp +by5pKDAscCl9cmV0dXJuIG99LApYKGEpe3RoaXMuYS5jbGFzc05hbWU9dC5DLmEoYSkuSCgwLCIgIil9 +LApnayhhKXtyZXR1cm4gdGhpcy5hLmNsYXNzTGlzdC5sZW5ndGh9LApnbDAoYSl7cmV0dXJuIHRoaXMu +YS5jbGFzc0xpc3QubGVuZ3RoPT09MH0sCmdvcihhKXtyZXR1cm4gdGhpcy5hLmNsYXNzTGlzdC5sZW5n +dGghPT0wfSwKVjEoYSl7dGhpcy5hLmNsYXNzTmFtZT0iIn0sCnRnKGEsYil7dmFyIHM9dGhpcy5hLmNs +YXNzTGlzdC5jb250YWlucyhiKQpyZXR1cm4gc30sCmkoYSxiKXt2YXIgcyxyCkEubihiKQpzPXRoaXMu +YS5jbGFzc0xpc3QKcj1zLmNvbnRhaW5zKGIpCnMuYWRkKGIpCnJldHVybiFyfSwKUihhLGIpe3ZhciBz +LHIscQppZih0eXBlb2YgYj09InN0cmluZyIpe3M9dGhpcy5hLmNsYXNzTGlzdApyPXMuY29udGFpbnMo +YikKcy5yZW1vdmUoYikKcT1yfWVsc2UgcT0hMQpyZXR1cm4gcX0sCkZWKGEsYil7QS5SNih0aGlzLmEs +dC5PLmEoYikpfX0KQS5Gay5wcm90b3R5cGU9e30KQS5STy5wcm90b3R5cGU9e30KQS5DcS5wcm90b3R5 +cGU9e30KQS54Qy5wcm90b3R5cGU9e30KQS52Ti5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdGhpcy5h +LiQxKHQuQi5hKGEpKX0sCiRTOjI4fQpBLkpRLnByb3RvdHlwZT17CkNZKGEpe3ZhciBzCmlmKCQub3Iu +YT09PTApe2ZvcihzPTA7czwyNjI7KytzKSQub3IuWTUoMCxCLmNtW3NdLEEucFMoKSkKZm9yKHM9MDtz +PDEyOysrcykkLm9yLlk1KDAsQi5CSVtzXSxBLlY0KCkpfX0sCmkwKGEpe3JldHVybiAkLkFOKCkudGco +MCxBLnJTKGEpKX0sCkViKGEsYixjKXt2YXIgcz0kLm9yLnEoMCxBLnJTKGEpKyI6OiIrYikKaWYocz09 +bnVsbClzPSQub3IucSgwLCIqOjoiK2IpCmlmKHM9PW51bGwpcmV0dXJuITEKcmV0dXJuIEEucDgocy4k +NChhLGIsYyx0aGlzKSl9LAokaWtGOjF9CkEuR20ucHJvdG90eXBlPXsKZ0EoYSl7cmV0dXJuIG5ldyBB +Llc5KGEsdGhpcy5nayhhKSxBLnpLKGEpLkMoIlc5PEdtLkU+IikpfX0KQS52RC5wcm90b3R5cGU9ewpp +MChhKXtyZXR1cm4gQi5ObS5Wcih0aGlzLmEsbmV3IEEuVXYoYSkpfSwKRWIoYSxiLGMpe3JldHVybiBC +Lk5tLlZyKHRoaXMuYSxuZXcgQS5FZyhhLGIsYykpfSwKJGlrRjoxfQpBLlV2LnByb3RvdHlwZT17CiQx +KGEpe3JldHVybiB0LmY2LmEoYSkuaTAodGhpcy5hKX0sCiRTOjE1fQpBLkVnLnByb3RvdHlwZT17CiQx +KGEpe3JldHVybiB0LmY2LmEoYSkuRWIodGhpcy5hLHRoaXMuYix0aGlzLmMpfSwKJFM6MTV9CkEubTYu +cHJvdG90eXBlPXsKQ1koYSxiLGMsZCl7dmFyIHMscixxCnRoaXMuYS5GVigwLGMpCnM9Yi5ldigwLG5l +dyBBLkVvKCkpCnI9Yi5ldigwLG5ldyBBLldrKCkpCnRoaXMuYi5GVigwLHMpCnE9dGhpcy5jCnEuRlYo +MCxCLnhEKQpxLkZWKDAscil9LAppMChhKXtyZXR1cm4gdGhpcy5hLnRnKDAsQS5yUyhhKSl9LApFYihh +LGIsYyl7dmFyIHMscj10aGlzLHE9QS5yUyhhKSxwPXIuYyxvPXErIjo6IitiCmlmKHAudGcoMCxvKSly +ZXR1cm4gci5kLkR0KGMpCmVsc2V7cz0iKjo6IitiCmlmKHAudGcoMCxzKSlyZXR1cm4gci5kLkR0KGMp +CmVsc2V7cD1yLmIKaWYocC50ZygwLG8pKXJldHVybiEwCmVsc2UgaWYocC50ZygwLHMpKXJldHVybiEw +CmVsc2UgaWYocC50ZygwLHErIjo6KiIpKXJldHVybiEwCmVsc2UgaWYocC50ZygwLCIqOjoqIikpcmV0 +dXJuITB9fXJldHVybiExfSwKJGlrRjoxfQpBLkVvLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiFCLk5t +LnRnKEIuQkksQS5uKGEpKX0sCiRTOjR9CkEuV2sucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIEIuTm0u +dGcoQi5CSSxBLm4oYSkpfSwKJFM6NH0KQS5jdC5wcm90b3R5cGU9ewpFYihhLGIsYyl7aWYodGhpcy5q +RihhLGIsYykpcmV0dXJuITAKaWYoYj09PSJ0ZW1wbGF0ZSImJmM9PT0iIilyZXR1cm4hMAppZihhLmdl +dEF0dHJpYnV0ZSgidGVtcGxhdGUiKT09PSIiKXJldHVybiB0aGlzLmUudGcoMCxiKQpyZXR1cm4hMX19 +CkEuSUEucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIlRFTVBMQVRFOjoiK0EubihhKX0sCiRTOjJ9CkEu +T3cucHJvdG90eXBlPXsKaTAoYSl7dmFyIHMKaWYodC5hTy5iKGEpKXJldHVybiExCnM9dC5nNy5iKGEp +CmlmKHMmJkEuclMoYSk9PT0iZm9yZWlnbk9iamVjdCIpcmV0dXJuITEKaWYocylyZXR1cm4hMApyZXR1 +cm4hMX0sCkViKGEsYixjKXtpZihiPT09ImlzInx8Qi54Qi5uKGIsIm9uIikpcmV0dXJuITEKcmV0dXJu +IHRoaXMuaTAoYSl9LAokaWtGOjF9CkEuVzkucHJvdG90eXBlPXsKRygpe3ZhciBzPXRoaXMscj1zLmMr +MSxxPXMuYgppZihyPHEpe3Muc3AoSi54OShzLmEscikpCnMuYz1yCnJldHVybiEwfXMuc3AobnVsbCkK +cy5jPXEKcmV0dXJuITF9LApnbCgpe3ZhciBzPXRoaXMuZApyZXR1cm4gcz09bnVsbD90aGlzLiR0aS5j +LmEocyk6c30sCnNwKGEpe3RoaXMuZD10aGlzLiR0aS5DKCIxPyIpLmEoYSl9LAokaUFuOjF9CkEuZFcu +cHJvdG90eXBlPXskaUQwOjEsJGlkQToxfQpBLm1rLnByb3RvdHlwZT17JGl5MDoxfQpBLktvLnByb3Rv +dHlwZT17ClBuKGEpe3ZhciBzLHI9bmV3IEEuZm0odGhpcykKZG97cz10aGlzLmIKci4kMihhLG51bGwp +fXdoaWxlKHMhPT10aGlzLmIpfSwKRVAoYSxiKXsrK3RoaXMuYgppZihiPT1udWxsfHxiIT09YS5wYXJl +bnROb2RlKUouTHQoYSkKZWxzZSBiLnJlbW92ZUNoaWxkKGEpfSwKSTQoYSxiKXt2YXIgcyxyLHEscCxv +LG49ITAsbT1udWxsLGw9bnVsbAp0cnl7bT1KLmlnKGEpCmw9bS5hLmdldEF0dHJpYnV0ZSgiaXMiKQp0 +LmguYShhKQpzPWZ1bmN0aW9uKGMpe2lmKCEoYy5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgTmFtZWROb2Rl +TWFwKSlyZXR1cm4gdHJ1ZQppZihjLmlkPT0ibGFzdENoaWxkInx8Yy5uYW1lPT0ibGFzdENoaWxkInx8 +Yy5pZD09InByZXZpb3VzU2libGluZyJ8fGMubmFtZT09InByZXZpb3VzU2libGluZyJ8fGMuaWQ9PSJj +aGlsZHJlbiJ8fGMubmFtZT09ImNoaWxkcmVuIilyZXR1cm4gdHJ1ZQp2YXIgaz1jLmNoaWxkTm9kZXMK +aWYoYy5sYXN0Q2hpbGQmJmMubGFzdENoaWxkIT09a1trLmxlbmd0aC0xXSlyZXR1cm4gdHJ1ZQppZihj +LmNoaWxkcmVuKWlmKCEoYy5jaGlsZHJlbiBpbnN0YW5jZW9mIEhUTUxDb2xsZWN0aW9ufHxjLmNoaWxk +cmVuIGluc3RhbmNlb2YgTm9kZUxpc3QpKXJldHVybiB0cnVlCnZhciBqPTAKaWYoYy5jaGlsZHJlbilq +PWMuY2hpbGRyZW4ubGVuZ3RoCmZvcih2YXIgaT0wO2k8ajtpKyspe3ZhciBoPWMuY2hpbGRyZW5baV0K +aWYoaC5pZD09ImF0dHJpYnV0ZXMifHxoLm5hbWU9PSJhdHRyaWJ1dGVzInx8aC5pZD09Imxhc3RDaGls +ZCJ8fGgubmFtZT09Imxhc3RDaGlsZCJ8fGguaWQ9PSJwcmV2aW91c1NpYmxpbmcifHxoLm5hbWU9PSJw +cmV2aW91c1NpYmxpbmcifHxoLmlkPT0iY2hpbGRyZW4ifHxoLm5hbWU9PSJjaGlsZHJlbiIpcmV0dXJu +IHRydWV9cmV0dXJuIGZhbHNlfShhKQpuPUEub1Qocyk/ITA6IShhLmF0dHJpYnV0ZXMgaW5zdGFuY2Vv +ZiBOYW1lZE5vZGVNYXApfWNhdGNoKHApe31yPSJlbGVtZW50IHVucHJpbnRhYmxlIgp0cnl7cj1KLllT +KGEpfWNhdGNoKHApe310cnl7cT1BLnJTKGEpCnRoaXMua1IoYSxiLG4scixxLHQuZi5hKG0pLEEuayhs +KSl9Y2F0Y2gocCl7aWYoQS5SdShwKSBpbnN0YW5jZW9mIEEuQVQpdGhyb3cgcAplbHNle3RoaXMuRVAo +YSxiKQp3aW5kb3cKbz1BLkVqKHIpCmlmKHR5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIil3aW5kb3cu +Y29uc29sZS53YXJuKCJSZW1vdmluZyBjb3JydXB0ZWQgZWxlbWVudCAiK28pfX19LAprUihhLGIsYyxk +LGUsZixnKXt2YXIgcyxyLHEscCxvLG4sbSxsPXRoaXMKaWYoYyl7bC5FUChhLGIpCndpbmRvdwppZih0 +eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUud2FybigiUmVtb3ZpbmcgZWxl +bWVudCBkdWUgdG8gY29ycnVwdGVkIGF0dHJpYnV0ZXMgb24gPCIrZCsiPiIpCnJldHVybn1pZighbC5h +LmkwKGEpKXtsLkVQKGEsYikKd2luZG93CnM9QS5FaihiKQppZih0eXBlb2YgY29uc29sZSE9InVuZGVm +aW5lZCIpd2luZG93LmNvbnNvbGUud2FybigiUmVtb3ZpbmcgZGlzYWxsb3dlZCBlbGVtZW50IDwiK2Ur +Ij4gZnJvbSAiK3MpCnJldHVybn1pZihnIT1udWxsKWlmKCFsLmEuRWIoYSwiaXMiLGcpKXtsLkVQKGEs +YikKd2luZG93CmlmKHR5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS53YXJu +KCJSZW1vdmluZyBkaXNhbGxvd2VkIHR5cGUgZXh0ZW5zaW9uIDwiK2UrJyBpcz0iJytnKyciPicpCnJl +dHVybn1zPWYuZ3ZjKCkKcj1BLlFJKHMuc2xpY2UoMCksQS50NihzKSkKZm9yKHE9Zi5ndmMoKS5sZW5n +dGgtMSxzPWYuYSxwPSJSZW1vdmluZyBkaXNhbGxvd2VkIGF0dHJpYnV0ZSA8IitlKyIgIjtxPj0wOy0t +cSl7aWYoIShxPHIubGVuZ3RoKSlyZXR1cm4gQS5PSChyLHEpCm89cltxXQpuPWwuYQptPUouY0gobykK +QS5uKG8pCmlmKCFuLkViKGEsbSxBLm4ocy5nZXRBdHRyaWJ1dGUobykpKSl7d2luZG93Cm49cy5nZXRB +dHRyaWJ1dGUobykKaWYodHlwZW9mIGNvbnNvbGUhPSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLndh +cm4ocCtvKyc9IicrQS5FaihuKSsnIj4nKQpzLnJlbW92ZUF0dHJpYnV0ZShvKX19aWYodC5hVy5iKGEp +KXtzPWEuY29udGVudApzLnRvU3RyaW5nCmwuUG4ocyl9fSwKJGlvbjoxfQpBLmZtLnByb3RvdHlwZT17 +CiQyKGEsYil7dmFyIHMscixxLHAsbyxuLG09dGhpcy5hCnN3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDE6 +bS5JNChhLGIpCmJyZWFrCmNhc2UgODpjYXNlIDExOmNhc2UgMzpjYXNlIDQ6YnJlYWsKZGVmYXVsdDpt +LkVQKGEsYil9cz1hLmxhc3RDaGlsZApmb3IocT10LkE7cyE9bnVsbDspe3I9bnVsbAp0cnl7cj1zLnBy +ZXZpb3VzU2libGluZwppZihyIT1udWxsKXtwPXIubmV4dFNpYmxpbmcKbz1zCm89cD09bnVsbD9vIT1u +dWxsOnAhPT1vCnA9b31lbHNlIHA9ITEKaWYocCl7cD1BLlBWKCJDb3JydXB0IEhUTUwiKQp0aHJvdyBB +LmIocCl9fWNhdGNoKG4pe3A9cS5hKHMpOysrbS5iCm89cC5wYXJlbnROb2RlCmlmKGEhPT1vKXtpZihv +IT1udWxsKW8ucmVtb3ZlQ2hpbGQocCl9ZWxzZSBhLnJlbW92ZUNoaWxkKHApCnM9bnVsbApyPWEubGFz +dENoaWxkfWlmKHMhPW51bGwpdGhpcy4kMihzLGEpCnM9cn19LAokUzozMX0KQS5ZOC5wcm90b3R5cGU9 +e30KQS5ucS5wcm90b3R5cGU9e30KQS5Bci5wcm90b3R5cGU9e30KQS50RC5wcm90b3R5cGU9e30KQS51 +Zi5wcm90b3R5cGU9e30KQS5pSi5wcm90b3R5cGU9ewpWSChhKXt2YXIgcyxyPXRoaXMuYSxxPXIubGVu +Z3RoCmZvcihzPTA7czxxOysrcylpZihyW3NdPT09YSlyZXR1cm4gcwpCLk5tLmkocixhKQpCLk5tLmko +dGhpcy5iLG51bGwpCnJldHVybiBxfSwKUHYoYSl7dmFyIHMscixxLHA9dGhpcyxvPXt9CmlmKGE9PW51 +bGwpcmV0dXJuIGEKaWYoQS5yUShhKSlyZXR1cm4gYQppZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJu +IGEKaWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhCmlmKGEgaW5zdGFuY2VvZiBBLmlQKXJldHVy +biBuZXcgRGF0ZShhLmEpCmlmKHQuZnYuYihhKSl0aHJvdyBBLmIoQS5TWSgic3RydWN0dXJlZCBjbG9u +ZSBvZiBSZWdFeHAiKSkKaWYodC5jOC5iKGEpKXJldHVybiBhCmlmKHQudy5iKGEpKXJldHVybiBhCmlm +KHQueC5iKGEpKXJldHVybiBhCmlmKHQuZEUuYihhKXx8ITEpcmV0dXJuIGEKaWYodC5mLmIoYSkpe3M9 +cC5WSChhKQpyPXAuYgppZighKHM8ci5sZW5ndGgpKXJldHVybiBBLk9IKHIscykKcT1vLmE9cltzXQpp +ZihxIT1udWxsKXJldHVybiBxCnE9e30Kby5hPXEKQi5ObS5ZNShyLHMscSkKYS5LKDAsbmV3IEEuRTIo +byxwKSkKcmV0dXJuIG8uYX1pZih0LmouYihhKSl7cz1wLlZIKGEpCm89cC5iCmlmKCEoczxvLmxlbmd0 +aCkpcmV0dXJuIEEuT0gobyxzKQpxPW9bc10KaWYocSE9bnVsbClyZXR1cm4gcQpyZXR1cm4gcC5layhh +LHMpfWlmKHQuZUguYihhKSl7cz1wLlZIKGEpCnI9cC5iCmlmKCEoczxyLmxlbmd0aCkpcmV0dXJuIEEu +T0gocixzKQpxPW8uYj1yW3NdCmlmKHEhPW51bGwpcmV0dXJuIHEKcT17fQpvLmI9cQpCLk5tLlk1KHIs +cyxxKQpwLmltKGEsbmV3IEEuamcobyxwKSkKcmV0dXJuIG8uYn10aHJvdyBBLmIoQS5TWSgic3RydWN0 +dXJlZCBjbG9uZSBvZiBvdGhlciB0eXBlIikpfSwKZWsoYSxiKXt2YXIgcyxyPUouVTYoYSkscT1yLmdr +KGEpLHA9bmV3IEFycmF5KHEpCkIuTm0uWTUodGhpcy5iLGIscCkKZm9yKHM9MDtzPHE7KytzKUIuTm0u +WTUocCxzLHRoaXMuUHYoci5xKGEscykpKQpyZXR1cm4gcH19CkEuRTIucHJvdG90eXBlPXsKJDIoYSxi +KXt0aGlzLmEuYVthXT10aGlzLmIuUHYoYil9LAokUzozMn0KQS5qZy5wcm90b3R5cGU9ewokMihhLGIp +e3RoaXMuYS5iW2FdPXRoaXMuYi5QdihiKX0sCiRTOjMzfQpBLkJmLnByb3RvdHlwZT17CmltKGEsYil7 +dmFyIHMscixxLHAKdC5iOC5hKGIpCmZvcihzPU9iamVjdC5rZXlzKGEpLHI9cy5sZW5ndGgscT0wO3E8 +cjsrK3Epe3A9c1txXQpiLiQyKHAsYVtwXSl9fX0KQS5Bcy5wcm90b3R5cGU9ewpWKGEpe3ZhciBzCkEu +bihhKQpzPSQuaEcoKS5iCmlmKHMudGVzdChhKSlyZXR1cm4gYQp0aHJvdyBBLmIoQS5MMyhhLCJ2YWx1 +ZSIsIk5vdCBhIHZhbGlkIGNsYXNzIHRva2VuIikpfSwKIlsiKGEpe3JldHVybiB0aGlzLkQoKS5IKDAs +IiAiKX0sCmdBKGEpe3ZhciBzPXRoaXMuRCgpCnJldHVybiBBLnJqKHMscy5yLEEuTGgocykuYyl9LApn +bDAoYSl7cmV0dXJuIHRoaXMuRCgpLmE9PT0wfSwKZ29yKGEpe3JldHVybiB0aGlzLkQoKS5hIT09MH0s +CmdrKGEpe3JldHVybiB0aGlzLkQoKS5hfSwKdGcoYSxiKXt0aGlzLlYoYikKcmV0dXJuIHRoaXMuRCgp +LnRnKDAsYil9LAppKGEsYil7dmFyIHMKQS5uKGIpCnRoaXMuVihiKQpzPXRoaXMuT1MobmV3IEEuR0Uo +YikpCnJldHVybiBBLnA4KHM9PW51bGw/ITE6cyl9LApSKGEsYil7dmFyIHMscgppZih0eXBlb2YgYiE9 +InN0cmluZyIpcmV0dXJuITEKdGhpcy5WKGIpCnM9dGhpcy5EKCkKcj1zLlIoMCxiKQp0aGlzLlgocykK +cmV0dXJuIHJ9LApGVihhLGIpe3RoaXMuT1MobmV3IEEuTjcodGhpcyx0Lk8uYShiKSkpfSwKZVIoYSxi +KXt2YXIgcz10aGlzLkQoKQpyZXR1cm4gQS5iSyhzLGIsQS5MaChzKS5DKCJsZi5FIikpfSwKRShhLGIp +e3JldHVybiB0aGlzLkQoKS5FKDAsYil9LApWMShhKXt0aGlzLk9TKG5ldyBBLnVRKCkpfSwKT1MoYSl7 +dmFyIHMscgp0LmJVLmEoYSkKcz10aGlzLkQoKQpyPWEuJDEocykKdGhpcy5YKHMpCnJldHVybiByfX0K +QS5HRS5wcm90b3R5cGU9ewokMShhKXtyZXR1cm4gdC5DLmEoYSkuaSgwLHRoaXMuYSl9LAokUzozNH0K +QS5ONy5wcm90b3R5cGU9ewokMShhKXt2YXIgcz10aGlzLmIscj1BLnQ2KHMpCnJldHVybiB0LkMuYShh +KS5GVigwLG5ldyBBLmxKKHMsci5DKCJxVSgxKSIpLmEodGhpcy5hLmd1TSgpKSxyLkMoImxKPDEscVU+ +IikpKX0sCiRTOjE2fQpBLnVRLnByb3RvdHlwZT17CiQxKGEpe3QuQy5hKGEpCmlmKGEuYT4wKXthLmI9 +YS5jPWEuZD1hLmU9YS5mPW51bGwKYS5hPTAKYS5TKCl9cmV0dXJuIG51bGx9LAokUzoxNn0KQS5oRi5w +cm90b3R5cGU9eyRpaEY6MX0KQS5EVi5wcm90b3R5cGU9ewokMShhKXt2YXIgcwp0LlkuYShhKQpzPWZ1 +bmN0aW9uKGIsYyxkKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYihjLGQsdGhpcyxBcnJheS5wcm90 +b3R5cGUuc2xpY2UuYXBwbHkoYXJndW1lbnRzKSl9fShBLlI0LGEsITEpCkEuRG0ocywkLncoKSxhKQpy +ZXR1cm4gc30sCiRTOjN9CkEuUEMucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIG5ldyB0aGlzLmEoYSl9 +LAokUzozfQpBLlFTLnByb3RvdHlwZT17CiQxKGEpe3JldHVybiBuZXcgQS5yNyhhPT1udWxsP3QuSy5h +KGEpOmEpfSwKJFM6MzZ9CkEubnAucHJvdG90eXBlPXsKJDEoYSl7dmFyIHM9YT09bnVsbD90LksuYShh +KTphCnJldHVybiBuZXcgQS5UeihzLHQuYW0pfSwKJFM6NDh9CkEuVXQucHJvdG90eXBlPXsKJDEoYSl7 +cmV0dXJuIG5ldyBBLkU0KGE9PW51bGw/dC5LLmEoYSk6YSl9LAokUzozOH0KQS5FNC5wcm90b3R5cGU9 +ewpxKGEsYil7aWYodHlwZW9mIGIhPSJzdHJpbmciJiZ0eXBlb2YgYiE9Im51bWJlciIpdGhyb3cgQS5i +KEEueFkoInByb3BlcnR5IGlzIG5vdCBhIFN0cmluZyBvciBudW0iLG51bGwpKQpyZXR1cm4gQS5kVSh0 +aGlzLmFbYl0pfSwKWTUoYSxiLGMpe2lmKHR5cGVvZiBiIT0ic3RyaW5nIiYmdHlwZW9mIGIhPSJudW1i +ZXIiKXRocm93IEEuYihBLnhZKCJwcm9wZXJ0eSBpcyBub3QgYSBTdHJpbmcgb3IgbnVtIixudWxsKSkK +dGhpcy5hW2JdPUEud1koYyl9LApETihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKcmV0dXJuIGIgaW5z +dGFuY2VvZiBBLkU0JiZ0aGlzLmE9PT1iLmF9LAoiWyIoYSl7dmFyIHMscgp0cnl7cz1TdHJpbmcodGhp +cy5hKQpyZXR1cm4gc31jYXRjaChyKXtzPXRoaXMueGIoMCkKcmV0dXJuIHN9fSwKVjcoYSxiKXt2YXIg +cyxyPXRoaXMuYQppZihiPT1udWxsKXM9bnVsbAplbHNle3M9QS50NihiKQpzPUEuUFcobmV3IEEubEoo +YixzLkMoIkAoMSkiKS5hKEEuaUcoKSkscy5DKCJsSjwxLEA+IikpLCEwLHQueil9cmV0dXJuIEEuZFUo +clthXS5hcHBseShyLHMpKX0sCmdtKGEpe3JldHVybiAwfX0KQS5yNy5wcm90b3R5cGU9e30KQS5Uei5w +cm90b3R5cGU9ewpjUChhKXt2YXIgcz10aGlzLHI9YTwwfHxhPj1zLmdrKHMpCmlmKHIpdGhyb3cgQS5i +KEEuVEUoYSwwLHMuZ2socyksbnVsbCxudWxsKSl9LApxKGEsYil7aWYoQS5vayhiKSl0aGlzLmNQKGIp +CnJldHVybiB0aGlzLiR0aS5jLmEodGhpcy5VcigwLGIpKX0sClk1KGEsYixjKXt0aGlzLmNQKGIpCnRo +aXMuYmgoMCxiLGMpfSwKZ2soYSl7dmFyIHM9dGhpcy5hLmxlbmd0aAppZih0eXBlb2Ygcz09PSJudW1i +ZXIiJiZzPj4+MD09PXMpcmV0dXJuIHMKdGhyb3cgQS5iKEEuUFYoIkJhZCBKc0FycmF5IGxlbmd0aCIp +KX0sCiRpYlE6MSwKJGljWDoxLAokaXpNOjF9CkEudmcucHJvdG90eXBlPXsKWTUoYSxiLGMpe3JldHVy +biB0aGlzLmU0KDAsYixjKX19CkEubmQucHJvdG90eXBlPXskaW5kOjF9CkEuS2UucHJvdG90eXBlPXsK +RCgpe3ZhciBzLHIscSxwLG89dGhpcy5hLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSxuPUEuTHModC5OKQpp +ZihvPT1udWxsKXJldHVybiBuCmZvcihzPW8uc3BsaXQoIiAiKSxyPXMubGVuZ3RoLHE9MDtxPHI7Kytx +KXtwPUouVDAoc1txXSkKaWYocC5sZW5ndGghPT0wKW4uaSgwLHApfXJldHVybiBufSwKWChhKXt0aGlz +LmEuc2V0QXR0cmlidXRlKCJjbGFzcyIsYS5IKDAsIiAiKSl9fQpBLmhpLnByb3RvdHlwZT17CmdQKGEp +e3JldHVybiBuZXcgQS5LZShhKX0sCnNoZihhLGIpe3RoaXMuWUMoYSxiKX0sCnI2KGEsYixjLGQpe3Zh +ciBzLHIscSxwLG8KaWYoZD09bnVsbCl7cz1BLlFJKFtdLHQuRCkKZD1uZXcgQS52RChzKQpCLk5tLmko +cyxBLlR3KG51bGwpKQpCLk5tLmkocyxBLkJsKCkpCkIuTm0uaShzLG5ldyBBLk93KCkpfWM9bmV3IEEu +S28oZCkKcz1kb2N1bWVudApyPXMuYm9keQpyLnRvU3RyaW5nCnE9Qi5SWS5BSChyLCc8c3ZnIHZlcnNp +b249IjEuMSI+JytBLkVqKGIpKyI8L3N2Zz4iLGMpCnA9cy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkK +cz1uZXcgQS5lNyhxKQpvPXMuZ3I4KHMpCmZvcig7cz1vLmZpcnN0Q2hpbGQscyE9bnVsbDspcC5hcHBl +bmRDaGlsZChzKQpyZXR1cm4gcH0sCm56KGEsYixjLGQsZSl7dGhyb3cgQS5iKEEuTDQoIkNhbm5vdCBp +bnZva2UgaW5zZXJ0QWRqYWNlbnRIdG1sIG9uIFNWRy4iKSl9LApnVmwoYSl7cmV0dXJuIG5ldyBBLkNx +KGEsImNsaWNrIiwhMSx0LlEpfSwKJGloaToxfQpBLmQyLnByb3RvdHlwZT17Ckx0KCl7dmFyIHMscixx +LHAsbz10aGlzLG49dC5OLG09dC5YLGw9QS5GbChuLG0pLGs9by5hCmlmKGshPW51bGwpe3M9QS5RSShb +XSx0LmQpCmZvcihyPWsubGVuZ3RoLHE9MDtxPGsubGVuZ3RoO2subGVuZ3RoPT09cnx8KDAsQS5sayko +ayksKytxKXtwPWtbcV0Kcy5wdXNoKEEuRUYoWyJkZXNjcmlwdGlvbiIscC5hLCJocmVmIixwLmJdLG4s +bSkpfWwuWTUoMCwiZWRpdHMiLHMpfWwuWTUoMCwiZXhwbGFuYXRpb24iLG8uYikKbC5ZNSgwLCJsaW5l +IixvLmMpCmwuWTUoMCwiZGlzcGxheVBhdGgiLG8uZCkKbC5ZNSgwLCJ1cmlQYXRoIixvLmUpCm49by5m +CmlmKG4hPW51bGwpe209QS5RSShbXSx0LmQpCmZvcihrPW4ubGVuZ3RoLHE9MDtxPG4ubGVuZ3RoO24u +bGVuZ3RoPT09a3x8KDAsQS5saykobiksKytxKW0ucHVzaChuW3FdLkx0KCkpCmwuWTUoMCwidHJhY2Vz +IixtKX1yZXR1cm4gbH19CkEuU2UucHJvdG90eXBlPXsKTHQoKXtyZXR1cm4gQS5FRihbImRlc2NyaXB0 +aW9uIix0aGlzLmEsImhyZWYiLHRoaXMuYl0sdC5OLHQuWCl9fQpBLk1sLnByb3RvdHlwZT17Ckx0KCl7 +cmV0dXJuIEEuRUYoWyJocmVmIix0aGlzLmEsImxpbmUiLHRoaXMuYiwicGF0aCIsdGhpcy5jXSx0Lk4s +dC5YKX19CkEueUQucHJvdG90eXBlPXsKTHQoKXt2YXIgcyxyLHEscD1BLlFJKFtdLHQuZCkKZm9yKHM9 +dGhpcy5iLHI9cy5sZW5ndGgscT0wO3E8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxBLmxrKShzKSwr +K3EpcC5wdXNoKHNbcV0uTHQoKSkKcmV0dXJuIEEuRUYoWyJkZXNjcmlwdGlvbiIsdGhpcy5hLCJlbnRy +aWVzIixwXSx0Lk4sdC5YKX19CkEud2IucHJvdG90eXBlPXsKTHQoKXt2YXIgcyxyLHEscD10aGlzLG89 +QS5GbCh0Lk4sdC5YKQpvLlk1KDAsImRlc2NyaXB0aW9uIixwLmEpCnM9cC5iCmlmKHMhPW51bGwpby5Z +NSgwLCJmdW5jdGlvbiIscykKcz1wLmMKaWYocyE9bnVsbClvLlk1KDAsImxpbmsiLHMuTHQoKSkKcz1w +LmQKaWYocy5sZW5ndGghPT0wKXtyPUEudDYocykKcT1yLkMoImxKPDEsWjA8cVUsTWg/Pj4iKQpvLlk1 +KDAsImhpbnRBY3Rpb25zIixBLlkxKG5ldyBBLmxKKHMsci5DKCJaMDxxVSxNaD8+KDEpIikuYShuZXcg +QS5iMCgpKSxxKSwhMCxxLkMoImFMLkUiKSkpfXJldHVybiBvfX0KQS5hTi5wcm90b3R5cGU9ewokMShh +KXtyZXR1cm4gQS5ueih0LkcuYShhKSl9LAokUzozOX0KQS5iMC5wcm90b3R5cGU9ewokMShhKXtyZXR1 +cm4gdC5KLmEoYSkuTHQoKX0sCiRTOjQwfQpBLmo4LnByb3RvdHlwZT17Ckx0KCl7cmV0dXJuIEEuRUYo +WyJsaW5lIix0aGlzLmEsImV4cGxhbmF0aW9uIix0aGlzLmIsIm9mZnNldCIsdGhpcy5jXSx0Lk4sdC5Y +KX19CkEucXAucHJvdG90eXBlPXsKTHQoKXt2YXIgcyxyLHEscCxvLG4sbSxsPXRoaXMsaz10Lk4saj1B +LkZsKGssdC5hUykKZm9yKHM9bC5kLHM9cy5nUHUocykscz1zLmdBKHMpLHI9dC5YLHE9dC5kO3MuRygp +Oyl7cD1zLmdsKCkKbz1wLmEKbj1BLlFJKFtdLHEpCmZvcihwPUouSVQocC5iKTtwLkcoKTspe209cC5n +bCgpCm4ucHVzaChBLkVGKFsibGluZSIsbS5hLCJleHBsYW5hdGlvbiIsbS5iLCJvZmZzZXQiLG0uY10s +ayxyKSl9ai5ZNSgwLG8sbil9cmV0dXJuIEEuRUYoWyJyZWdpb25zIixsLmEsIm5hdmlnYXRpb25Db250 +ZW50IixsLmIsInNvdXJjZUNvZGUiLGwuYywiZWRpdHMiLGpdLGsscil9fQpBLm1RLnByb3RvdHlwZT17 +fQpBLmUucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscixxLHAsbyxuLG0KdC5CLmEoYSkKcz10LkYKcj1z +LmEod2luZG93LmxvY2F0aW9uKS5wYXRobmFtZQpxPUEuRzYocy5hKHdpbmRvdy5sb2NhdGlvbikuaHJl +ZikKcD1BLmFLKHMuYSh3aW5kb3cubG9jYXRpb24pLmhyZWYpCkEuR2UoKQppZihyIT09Ii8iKXtzPWRv +Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5yb290IikudGV4dENvbnRlbnQKcy50b1N0cmluZwpzPXIhPT1C +LnhCLmJTKHMpfWVsc2Ugcz0hMQppZihzKXtyLnRvU3RyaW5nCkEuRzcocixxLHAsITAsbmV3IEEuVlco +cixxLHApKX1zPWRvY3VtZW50Cm89cy5xdWVyeVNlbGVjdG9yKCIuYXBwbHktbWlncmF0aW9uIikKby50 +b1N0cmluZwpvPUoucUYobykKbj1vLiR0aQptPW4uQygifigxKT8iKS5hKG5ldyBBLm9aKCkpCnQuWi5h +KG51bGwpCkEuSkUoby5hLG8uYixtLCExLG4uYykKbj1zLnF1ZXJ5U2VsZWN0b3IoIi5yZXJ1bi1taWdy +YXRpb24iKQpuLnRvU3RyaW5nCm49Si5xRihuKQptPW4uJHRpCkEuSkUobi5hLG4uYixtLkMoIn4oMSk/ +IikuYShuZXcgQS55OCgpKSwhMSxtLmMpCm09cy5xdWVyeVNlbGVjdG9yKCIucmVwb3J0LXByb2JsZW0i +KQptLnRvU3RyaW5nCm09Si5xRihtKQpuPW0uJHRpCkEuSkUobS5hLG0uYixuLkMoIn4oMSk/IikuYShu +ZXcgQS5IaSgpKSwhMSxuLmMpCnM9cy5xdWVyeVNlbGVjdG9yKCIucG9wdXAtcGFuZSAuY2xvc2UiKQpz +LnRvU3RyaW5nCnM9Si5xRihzKQpuPXMuJHRpCkEuSkUocy5hLHMuYixuLkMoIn4oMSk/IikuYShuZXcg +QS5CVCgpKSwhMSxuLmMpCm49JC5jMCgpCm4udG9TdHJpbmcKbj1KLnFGKG4pCnM9bi4kdGkKQS5KRShu +LmEsbi5iLHMuQygifigxKT8iKS5hKG5ldyBBLlBZKCkpLCExLHMuYyl9LAokUzoxN30KQS5WVy5wcm90 +b3R5cGU9ewokMCgpe0EuRnIodGhpcy5hLHRoaXMuYix0aGlzLmMpfSwKJFM6MH0KQS5vWi5wcm90b3R5 +cGU9ewokMShhKXt2YXIgcyxyLHEscCxvCnQuVi5hKGEpCmlmKEIub2wudXMod2luZG93LCJUaGlzIHdp +bGwgYXBwbHkgdGhlIGNoYW5nZXMgeW91J3ZlIHByZXZpZXdlZCB0byB5b3VyIHdvcmtpbmcgZGlyZWN0 +b3J5LiBJdCBpcyByZWNvbW1lbmRlZCB5b3UgY29tbWl0IGFueSBjaGFuZ2VzIHlvdSBtYWRlIGJlZm9y +ZSBkb2luZyB0aGlzLiIpKXtzPUEuUUkoW10sdC5kKQpmb3Iocj0kLklSLHE9ci5sZW5ndGgscD0wO3A8 +ci5sZW5ndGg7ci5sZW5ndGg9PT1xfHwoMCxBLmxrKShyKSwrK3Apcy5wdXNoKHJbcF0uTHQoKSkKcz1B +LnR5KCIvYXBwbHktbWlncmF0aW9uIixBLkVGKFsibmF2aWdhdGlvblRyZWUiLHNdLHQuTix0LmFTKSku +VzcobmV3IEEuanIoKSx0LlApCm89bmV3IEEucWwoKQp0LmI3LmEobnVsbCkKcj1zLiR0aQpxPSQuWDMK +aWYocSE9PUIuTlUpbz1BLlZIKG8scSkKcy54ZihuZXcgQS5GZShuZXcgQS52cyhxLHIpLDIsbnVsbCxv +LHIuQygiQDwxPiIpLktxKHIuYykuQygiRmU8MSwyPiIpKSl9fSwKJFM6MX0KQS5qci5wcm90b3R5cGU9 +ewokMShhKXt2YXIgcwp0LmZuLmEoYSkKcz1kb2N1bWVudC5ib2R5CnMuY2xhc3NMaXN0LnJlbW92ZSgi +cHJvcG9zZWQiKQpzLmNsYXNzTGlzdC5hZGQoImFwcGxpZWQiKX0sCiRTOjQzfQpBLnFsLnByb3RvdHlw +ZT17CiQyKGEsYil7QS5DMigiQ291bGRuJ3QgYXBwbHkgbWlncmF0aW9uIix0LksuYShhKSxiKX0sCiRT +OjQ0fQpBLnk4LnByb3RvdHlwZT17CiQxKGEpe3JldHVybiB0aGlzLnhuKHQuVi5hKGEpKX0sCnhuKGEp +e3ZhciBzPTAscj1BLkZYKHQuSCkscT0xLHAsbz1bXSxuLG0sbCxrLGosaQp2YXIgJGFzeW5jJCQxPUEu +bHooZnVuY3Rpb24oYixjKXtpZihiPT09MSl7cD1jCnM9cX13aGlsZSh0cnVlKXN3aXRjaChzKXtjYXNl +IDA6cT0zCmRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgicmVydW5uaW5nIikKcz02CnJldHVybiBB +LmpRKEEudHkoIi9yZXJ1bi1taWdyYXRpb24iLG51bGwpLCRhc3luYyQkMSkKY2FzZSA2Om49YwprPW4K +ay50b1N0cmluZwppZihBLnA4KEoueDkoaywic3VjY2VzcyIpKSl0LkYuYSh3aW5kb3cubG9jYXRpb24p +LnJlbG9hZCgpCmVsc2UgQS5LMCh0LmV3LmEoSi54OShuLCJlcnJvcnMiKSkpCm8ucHVzaCg1KQpzPTQK +YnJlYWsKY2FzZSAzOnE9MgppPXAKbT1BLlJ1KGkpCmw9QS50cyhpKQpBLkMyKCJGYWlsZWQgdG8gcmVy +dW4gbWlncmF0aW9uIixtLGwpCm8ucHVzaCg1KQpzPTQKYnJlYWsKY2FzZSAyOm89WzFdCmNhc2UgNDpx +PTEKZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKCJyZXJ1bm5pbmciKQpzPW8ucG9wKCkKYnJl +YWsKY2FzZSA1OnJldHVybiBBLnlDKG51bGwscikKY2FzZSAxOnJldHVybiBBLmYzKHAscil9fSkKcmV0 +dXJuIEEuREkoJGFzeW5jJCQxLHIpfSwKJFM6MTh9CkEuSGkucHJvdG90eXBlPXsKJDEoYSl7dC5WLmEo +YSkKQi5vbC5Qbyh3aW5kb3csQS5YZCgiaHR0cHMiLCJnaXRodWIuY29tIiwiZGFydC1sYW5nL3Nkay9p +c3N1ZXMvbmV3IixBLkVGKFsidGl0bGUiLCJDdXN0b21lci1yZXBvcnRlZCBpc3N1ZSB3aXRoIG51bGwg +c2FmZXR5IG1pZ3JhdGlvbiB0b29sIiwibGFiZWxzIix1LmQsImJvZHkiLCIjIyMjIFN0ZXBzIHRvIHJl +cHJvZHVjZVxuXG4jIyMjIFdoYXQgZGlkIHlvdSBleHBlY3QgdG8gaGFwcGVuP1xuXG4jIyMjIFdoYXQg +YWN0dWFsbHkgaGFwcGVuZWQ/XG5cbl9TY3JlZW5zaG90cyBhcmUgYXBwcmVjaWF0ZWRfXG5cbioqRGFy +dCBTREsgdmVyc2lvbioqOiAiK0EuRWooZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNkay12ZXJzaW9u +IikudGV4dENvbnRlbnQpKyJcblxuVGhhbmtzIGZvciBmaWxpbmchXG4iXSx0Lk4sdC56KSkuZ25EKCks +InJlcG9ydC1wcm9ibGVtIil9LAokUzoxfQpBLkJULnByb3RvdHlwZT17CiQxKGEpe3ZhciBzCnQuVi5h +KGEpCnM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLnBvcHVwLXBhbmUiKS5zdHlsZQpzLmRpc3BsYXk9 +Im5vbmUiCnJldHVybiJub25lIn0sCiRTOjF9CkEuUFkucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscixx +LHAsbwp0LlYuYShhKQpzPSQuRDkoKS5pbm5lclRleHQKcj10LmguYShkb2N1bWVudC5xdWVyeVNlbGVj +dG9yKCcubmF2LXBhbmVsIFtkYXRhLW5hbWUqPSInK0EuTGoocykrJyJdJykucGFyZW50Tm9kZSkKcT1y +LnF1ZXJ5U2VsZWN0b3IoIi5zdGF0dXMtaWNvbiIpCnA9JC5JUgpwLnRvU3RyaW5nCm89QS55dyhwLHMp +CmlmKG8gaW5zdGFuY2VvZiBBLmNEKXtwPW8udwpwLnRvU3RyaW5nfWVsc2UgcD0hMQppZihwKXtBLk90 +KG8pCkEueG4ocSxvKQpBLkFSKHIsbyl9fSwKJFM6MX0KQS5MLnByb3RvdHlwZT17CiQxKGEpe3ZhciBz +LHIscSxwCnQuQi5hKGEpCnM9dC5GCnI9cy5hKHdpbmRvdy5sb2NhdGlvbikucGF0aG5hbWUKci50b1N0 +cmluZwpxPUEuRzYocy5hKHdpbmRvdy5sb2NhdGlvbikuaHJlZikKcD1BLmFLKHMuYSh3aW5kb3cubG9j +YXRpb24pLmhyZWYpCmlmKHIubGVuZ3RoPjEpQS5HNyhyLHEscCwhMSxudWxsKQplbHNle0EuQkUocixB +LndSKCksITApCkEuQlgoIiZuYnNwOyIsbnVsbCl9fSwKJFM6MTd9CkEuV3gucHJvdG90eXBlPXsKJDEo +YSl7dmFyIHMscixxLHAsbz0iY29sbGFwc2VkIgp0LlYuYShhKQpzPXRoaXMuYQpyPUouWUUocykKcT10 +aGlzLmIKcD1KLllFKHEpCmlmKCFyLmdQKHMpLnRnKDAsbykpe3IuZ1AocykuaSgwLG8pCnAuZ1AocSku +aSgwLG8pfWVsc2V7ci5nUChzKS5SKDAsbykKcC5nUChxKS5SKDAsbyl9fSwKJFM6MX0KQS5Iby5wcm90 +b3R5cGU9ewokMShhKXtyZXR1cm4gQS50Mih0LlYuYShhKSx0aGlzLmEpfSwKJFM6MX0KQS5JQy5wcm90 +b3R5cGU9ewokMShhKXt2YXIgcyxyLHEscAp0LlYuYShhKQpzPXRoaXMuYQpyPXMuZ2V0QXR0cmlidXRl +KCJkYXRhLSIrbmV3IEEuU3kobmV3IEEuaTcocykpLk9VKCJvZmZzZXQiKSkKci50b1N0cmluZwpxPUEu +UUEocixudWxsKQpzPXMuZ2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IEEuU3kobmV3IEEuaTcocykpLk9V +KCJsaW5lIikpCnMudG9TdHJpbmcKcD1BLlFBKHMsbnVsbCkKcz10aGlzLmIKcy50b1N0cmluZwpBLmhY +KHMscSxwKX0sCiRTOjF9CkEuZkMucHJvdG90eXBlPXsKJDEoYSl7dC5wLmEoYSkKdGhpcy5hLmFNKDAs +dGhpcy5iKX0sCiRTOjQ2fQpBLlRtLnByb3RvdHlwZT17CiQxKGEpe0EubihhKQpyZXR1cm4gYS5sZW5n +dGg+NDA/Qi54Qi5OaihhLDAsNDApKyIuLi4iOmF9LAokUzoyfQpBLm5ULnByb3RvdHlwZT17CiQwKCl7 +QS5Gcih0aGlzLmEsdGhpcy5iLHRoaXMuYyl9LAokUzowfQpBLk5ZLnByb3RvdHlwZT17CiQwKCl7QS5G +cih0aGlzLmEsbnVsbCxudWxsKX0sCiRTOjB9CkEudWUucHJvdG90eXBlPXsKJDEoYSl7dC5mLmEoYSkK +cmV0dXJuIEEuRWooYS5xKDAsInNldmVyaXR5IikpKyIgLSAiK0EuRWooYS5xKDAsIm1lc3NhZ2UiKSkr +IiBhdCAiK0EuRWooYS5xKDAsImxvY2F0aW9uIikpKyIgLSAoIitBLkVqKGEucSgwLCJjb2RlIikpKyIp +In0sCiRTOjQ3fQpBLkdILnByb3RvdHlwZT17CiQxKGEpe3QuaC5hKGEpCiQuekIoKQp0LmVzLmEoJC5v +dygpLnEoMCwiaGxqcyIpKS5WNygiaGlnaGxpZ2h0QmxvY2siLFthXSl9LAokUzo5fQpBLkVFLnByb3Rv +dHlwZT17CiQyKGEsYil7cmV0dXJuIEEuSVooYSkrSi5IbSh0LmVlLmEoYikuYil9LAokUzo0OX0KQS5Q +Ti5wcm90b3R5cGU9ewokMShhKXt2YXIgcyxyCnQuVi5hKGEpLnByZXZlbnREZWZhdWx0KCkKcz10aGlz +LmEKcj10aGlzLmIKQS5hZih0LkYuYSh3aW5kb3cubG9jYXRpb24pLnBhdGhuYW1lLHMsciwhMCxuZXcg +QS5RTChzLHIpKQpBLmhYKHRoaXMuYyxzLHIpfSwKJFM6MX0KQS5RTC5wcm90b3R5cGU9ewokMCgpe0Eu +RnIodC5GLmEod2luZG93LmxvY2F0aW9uKS5wYXRobmFtZSx0aGlzLmEsdGhpcy5iKX0sCiRTOjB9CkEu +VlMucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscj0ic2VsZWN0ZWQtZmlsZSIKdC5oLmEoYSkKcz1KLllF +KGEpCmlmKGEuZ2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IEEuU3kobmV3IEEuaTcoYSkpLk9VKCJuYW1l +IikpPT09dGhpcy5hLmEpcy5nUChhKS5pKDAscikKZWxzZSBzLmdQKGEpLlIoMCxyKX0sCiRTOjl9CkEu +VEQucHJvdG90eXBlPXsKJDEoYSl7dmFyIHMscgp0LlYuYShhKQpzPXRoaXMuYQpzd2l0Y2gocy5nTCgp +LmEpe2Nhc2UgMDpicmVhawpjYXNlIDI6cy5uRygpCmJyZWFrCmNhc2UgMzpzLmMyKCkKYnJlYWsKY2Fz +ZSAxOnMuYzIoKQpicmVha31yPXRoaXMuYgpBLmJMKHIscykKQS54bih0aGlzLmMscykKQS5BUihyLHMp +fSwKJFM6MX0KQS5JZi5wcm90b3R5cGU9ewokMShhKXt2YXIgcwp0LlYuYShhKQpzPXRoaXMuYQpBLk90 +KHMpCkEueG4odGhpcy5iLHMpCkEuQVIodGhpcy5jLHMpfSwKJFM6MX0KQS50Qi5wcm90b3R5cGU9ewok +MShhKXtyZXR1cm4gQS50Mih0LlYuYShhKSwhMCl9LAokUzoxfQpBLm0yLnByb3RvdHlwZT17CiQxKGEp +e3JldHVybiB0aGlzLlJJKHQuVi5hKGEpKX0sClJJKGEpe3ZhciBzPTAscj1BLkZYKHQuSCkscT0xLHAs +bz10aGlzLG4sbSxsLGssaixpLGgsZyxmCnZhciAkYXN5bmMkJDE9QS5seihmdW5jdGlvbihiLGMpe2lm +KGI9PT0xKXtwPWMKcz1xfXdoaWxlKHRydWUpc3dpdGNoKHMpe2Nhc2UgMDpxPTMKaj1kb2N1bWVudApu +PUIuQ0QuelEoai5xdWVyeVNlbGVjdG9yKCIuY29udGVudCIpLnNjcm9sbFRvcCkKaT10Lk4Kcz02CnJl +dHVybiBBLmpRKEEudHkoQS5RNCgiL2FwcGx5LWhpbnQiLEEuRmwoaSxpKSksby5hLkx0KCkpLCRhc3lu +YyQkMSkKY2FzZSA2Omk9by5iCmg9aS5hCmgudG9TdHJpbmcKbT1BLlVzKGgpCnM9NwpyZXR1cm4gQS5q +UShBLkc3KG0sbnVsbCxpLmIsITEsbnVsbCksJGFzeW5jJCQxKQpjYXNlIDc6ai5ib2R5LmNsYXNzTGlz +dC5hZGQoIm5lZWRzLXJlcnVuIikKaj1qLnF1ZXJ5U2VsZWN0b3IoIi5jb250ZW50IikKai50b1N0cmlu +ZwpqLnNjcm9sbFRvcD1CLmpuLnpRKG4pCnE9MQpzPTUKYnJlYWsKY2FzZSAzOnE9MgpmPXAKbD1BLlJ1 +KGYpCms9QS50cyhmKQpBLkMyKCJjb3VsZG4ndCBhcHBseSBoaW50IixsLGspCnM9NQpicmVhawpjYXNl +IDI6cz0xCmJyZWFrCmNhc2UgNTpyZXR1cm4gQS55QyhudWxsLHIpCmNhc2UgMTpyZXR1cm4gQS5mMyhw +LHIpfX0pCnJldHVybiBBLkRJKCRhc3luYyQkMSxyKX0sCiRTOjE4fQpBLlFXLnByb3RvdHlwZT17CiJb +IihhKXtyZXR1cm4gdGhpcy5hKyI6XG4iK3RoaXMuYn0sCiRpUno6MX0KQS5YQS5wcm90b3R5cGU9ewpF +YihhLGIsYyl7cmV0dXJuITB9LAppMChhKXtyZXR1cm4hMH0sCiRpa0Y6MX0KQS52dC5wcm90b3R5cGU9 +ewpnTCgpe3ZhciBzLHIscSxwLG8sbixtLGw9dGhpcy5kCmlmKGwubGVuZ3RoPT09MClyZXR1cm4gQi5j +dwpzPUIuTm0uZ3RIKGwpLmdMKCkKZm9yKHI9bC5sZW5ndGgscT0hMCxwPSEwLG89MDtvPGwubGVuZ3Ro +O2wubGVuZ3RoPT09cnx8KDAsQS5saykobCksKytvKXtuPWxbb10uZ0woKQppZihuIT1zKXM9bnVsbApt +PW4hPT1CLmN3CmlmKG0mJm4hPT1CLldEKXE9ITEKaWYobSYmbiE9PUIuWGopcD0hMX1pZihzIT1udWxs +KXJldHVybiBzCmlmKHEpcmV0dXJuIEIuV0QKaWYocClyZXR1cm4gQi5YagpyZXR1cm4gQi5kY30sCkxW +KCl7dmFyIHMscixxLHA9dGhpcy5kCmlmKHAhPW51bGwpZm9yKHM9cC5sZW5ndGgscj0wO3I8czsrK3Ip +e3E9cFtyXQpxLmIhPT0kJiZBLmJ0KCJwYXJlbnQiKQpxLmI9dGhpc319LApjMigpe3ZhciBzLHIscSxw +LG8KZm9yKHM9dGhpcy5kLHI9cy5sZW5ndGgscT0wO3E8cy5sZW5ndGg7cy5sZW5ndGg9PT1yfHwoMCxB +LmxrKShzKSwrK3Epe3A9c1txXQppZihwIGluc3RhbmNlb2YgQS52dClwLmMyKCkKZWxzZXtpZihwIGlu +c3RhbmNlb2YgQS5jRCl7bz1wLncKby50b1N0cmluZwpvPW8mJnAucj09PUIuWGp9ZWxzZSBvPSExCmlm +KG8pcC5yPUIuV0R9fX0sCm5HKCl7dmFyIHMscixxLHAsbwpmb3Iocz10aGlzLmQscj1zLmxlbmd0aCxx +PTA7cTxzLmxlbmd0aDtzLmxlbmd0aD09PXJ8fCgwLEEubGspKHMpLCsrcSl7cD1zW3FdCmlmKHAgaW5z +dGFuY2VvZiBBLnZ0KXAubkcoKQplbHNle2lmKHAgaW5zdGFuY2VvZiBBLmNEKXtvPXAudwpvLnRvU3Ry +aW5nCm89byYmcC5yPT09Qi5XRH1lbHNlIG89ITEKaWYobylwLnI9Qi5Yan19fSwKTHQoKXt2YXIgcyxy +PUEuRmwodC5OLHQuWCkKci5ZNSgwLCJ0eXBlIiwiZGlyZWN0b3J5IikKci5ZNSgwLCJuYW1lIix0aGlz +LmEpCnM9dGhpcy5kCnMudG9TdHJpbmcKci5ZNSgwLCJzdWJ0cmVlIixBLlZEKHMpKQpzPXRoaXMuYwpp +ZihzIT1udWxsKXIuWTUoMCwicGF0aCIscykKcmV0dXJuIHJ9fQpBLmNELnByb3RvdHlwZT17Ckx0KCl7 +dmFyIHMscj10aGlzLHE9QS5GbCh0Lk4sdC5YKQpxLlk1KDAsInR5cGUiLCJmaWxlIikKcS5ZNSgwLCJu +YW1lIixyLmEpCnM9ci5jCmlmKHMhPW51bGwpcS5ZNSgwLCJwYXRoIixzKQpzPXIuZAppZihzIT1udWxs +KXEuWTUoMCwiaHJlZiIscykKcz1yLmUKaWYocyE9bnVsbClxLlk1KDAsImVkaXRDb3VudCIscykKcz1y +LmYKaWYocyE9bnVsbClxLlk1KDAsIndhc0V4cGxpY2l0bHlPcHRlZE91dCIscykKcz1yLnIKaWYocyE9 +bnVsbClxLlk1KDAsIm1pZ3JhdGlvblN0YXR1cyIscy5hKQpzPXIudwppZihzIT1udWxsKXEuWTUoMCwi +bWlncmF0aW9uU3RhdHVzQ2FuQmVDaGFuZ2VkIixzKQpyZXR1cm4gcX0sCmdMKCl7cmV0dXJuIHRoaXMu +cn19CkEuRDgucHJvdG90eXBlPXt9CkEuTzkucHJvdG90eXBlPXsKIlsiKGEpe3JldHVybiJOYXZpZ2F0 +aW9uVHJlZU5vZGVUeXBlLiIrdGhpcy5ifX0KQS5HYi5wcm90b3R5cGU9ewoiWyIoYSl7cmV0dXJuIlVu +aXRNaWdyYXRpb25TdGF0dXMuIit0aGlzLmJ9fQpBLkxMLnByb3RvdHlwZT17Ckx0KCl7cmV0dXJuIEEu +RUYoWyJub2RlSWQiLHRoaXMuYiwia2luZCIsdGhpcy5hLmFdLHQuTix0LlgpfX0KQS5NRC5wcm90b3R5 +cGU9ewokMShhKXtyZXR1cm4gdC5ncC5hKGEpLmE9PT10aGlzLmEucSgwLCJraW5kIil9LAokUzo1MH0K +QS5INy5wcm90b3R5cGU9ewoiWyIoYSl7cmV0dXJuIkhpbnRBY3Rpb25LaW5kLiIrdGhpcy5ifX0KQS5s +SS5wcm90b3R5cGU9ewpXTyhhLGIpe3ZhciBzLHIscT10LmQ0CkEuWUYoImFic29sdXRlIixBLlFJKFti +LG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSxxKSkKcz10aGlzLmEKcz1zLllyKGIpPjAmJiFz +LmhLKGIpCmlmKHMpcmV0dXJuIGIKcz1BLmFiKCkKcj1BLlFJKFtzLGIsbnVsbCxudWxsLG51bGwsbnVs +bCxudWxsLG51bGxdLHEpCkEuWUYoImpvaW4iLHIpCnJldHVybiB0aGlzLklQKG5ldyBBLnU2KHIsdC5l +SikpfSwKemYoYSl7dmFyIHMscixxPUEuQ0woYSx0aGlzLmEpCnEuSVYoKQpzPXEuZApyPXMubGVuZ3Ro +CmlmKHI9PT0wKXtzPXEuYgpyZXR1cm4gcz09bnVsbD8iLiI6c31pZihyPT09MSl7cz1xLmIKcmV0dXJu +IHM9PW51bGw/Ii4iOnN9aWYoMD49cilyZXR1cm4gQS5PSChzLC0xKQpzLnBvcCgpCnM9cS5lCmlmKDA+ +PXMubGVuZ3RoKXJldHVybiBBLk9IKHMsLTEpCnMucG9wKCkKcS5JVigpCnJldHVybiBxWyJbIl0oMCl9 +LApJUChhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGssagp0Lk8uYShhKQpmb3Iocz1hLiR0aSxyPXMuQygi +YTIoY1guRSkiKS5hKG5ldyBBLnE3KCkpLHE9YS5nQShhKSxzPW5ldyBBLlNPKHEscixzLkMoIlNPPGNY +LkU+IikpLHI9dGhpcy5hLHA9ITEsbz0hMSxuPSIiO3MuRygpOyl7bT1xLmdsKCkKaWYoci5oSyhtKSYm +byl7bD1BLkNMKG0scikKaz1uLmNoYXJDb2RlQXQoMCk9PTA/bjpuCm49Qi54Qi5OaihrLDAsci5TcChr +LCEwKSkKbC5iPW4KaWYoci5kcyhuKSlCLk5tLlk1KGwuZSwwLHIuZ21JKCkpCm49IiIrbFsiWyJdKDAp +fWVsc2UgaWYoci5ZcihtKT4wKXtvPSFyLmhLKG0pCm49IiIrbX1lbHNle2o9bS5sZW5ndGgKaWYoaiE9 +PTApe2lmKDA+PWopcmV0dXJuIEEuT0gobSwwKQpqPXIuVWQobVswXSl9ZWxzZSBqPSExCmlmKCFqKWlm +KHApbis9ci5nbUkoKQpuKz1tfXA9ci5kcyhtKX1yZXR1cm4gbi5jaGFyQ29kZUF0KDApPT0wP246bn0s +Cm81KGEpe3ZhciBzCmlmKCF0aGlzLnkzKGEpKXJldHVybiBhCnM9QS5DTChhLHRoaXMuYSkKcy5yUigp +CnJldHVybiBzWyJbIl0oMCl9LAp5MyhhKXt2YXIgcyxyLHEscCxvLG4sbSxsLGs9dGhpcy5hLGo9ay5Z +cihhKQppZihqIT09MCl7aWYoaz09PSQuS2soKSlmb3Iocz0wO3M8ajsrK3MpaWYoQi54Qi5XKGEscyk9 +PT00NylyZXR1cm4hMApyPWoKcT00N31lbHNle3I9MApxPW51bGx9Zm9yKHA9bmV3IEEucWooYSkuYSxv +PXAubGVuZ3RoLHM9cixuPW51bGw7czxvOysrcyxuPXEscT1tKXttPUIueEIuTyhwLHMpCmlmKGsucjQo +bSkpe2lmKGs9PT0kLktrKCkmJm09PT00NylyZXR1cm4hMAppZihxIT1udWxsJiZrLnI0KHEpKXJldHVy +biEwCmlmKHE9PT00NilsPW49PW51bGx8fG49PT00Nnx8ay5yNChuKQplbHNlIGw9ITEKaWYobClyZXR1 +cm4hMH19aWYocT09bnVsbClyZXR1cm4hMAppZihrLnI0KHEpKXJldHVybiEwCmlmKHE9PT00NilrPW49 +PW51bGx8fGsucjQobil8fG49PT00NgplbHNlIGs9ITEKaWYoaylyZXR1cm4hMApyZXR1cm4hMX0sCkhQ +KGEsYil7dmFyIHMscixxLHAsbyxuLG0sbD10aGlzLGs9J1VuYWJsZSB0byBmaW5kIGEgcGF0aCB0byAi +JwpiPWwuV08oMCxiKQpzPWwuYQppZihzLllyKGIpPD0wJiZzLllyKGEpPjApcmV0dXJuIGwubzUoYSkK +aWYocy5ZcihhKTw9MHx8cy5oSyhhKSlhPWwuV08oMCxhKQppZihzLllyKGEpPD0wJiZzLllyKGIpPjAp +dGhyb3cgQS5iKEEuSTcoaythKyciIGZyb20gIicrYisnIi4nKSkKcj1BLkNMKGIscykKci5yUigpCnE9 +QS5DTChhLHMpCnEuclIoKQpwPXIuZApvPXAubGVuZ3RoCmlmKG8hPT0wKXtpZigwPj1vKXJldHVybiBB +Lk9IKHAsMCkKcD1KLlJNKHBbMF0sIi4iKX1lbHNlIHA9ITEKaWYocClyZXR1cm4gcVsiWyJdKDApCnA9 +ci5iCm89cS5iCmlmKHAhPW8pcD1wPT1udWxsfHxvPT1udWxsfHwhcy5OYyhwLG8pCmVsc2UgcD0hMQpp +ZihwKXJldHVybiBxWyJbIl0oMCkKd2hpbGUoITApe3A9ci5kCm89cC5sZW5ndGgKaWYobyE9PTApe249 +cS5kCm09bi5sZW5ndGgKaWYobSE9PTApe2lmKDA+PW8pcmV0dXJuIEEuT0gocCwwKQpwPXBbMF0KaWYo +MD49bSlyZXR1cm4gQS5PSChuLDApCm49cy5OYyhwLG5bMF0pCnA9bn1lbHNlIHA9ITF9ZWxzZSBwPSEx +CmlmKCFwKWJyZWFrCkIuTm0uVzQoci5kLDApCkIuTm0uVzQoci5lLDEpCkIuTm0uVzQocS5kLDApCkIu +Tm0uVzQocS5lLDEpfXA9ci5kCm89cC5sZW5ndGgKaWYobyE9PTApe2lmKDA+PW8pcmV0dXJuIEEuT0go +cCwwKQpwPUouUk0ocFswXSwiLi4iKX1lbHNlIHA9ITEKaWYocCl0aHJvdyBBLmIoQS5JNyhrK2ErJyIg +ZnJvbSAiJytiKyciLicpKQpwPXQuTgpCLk5tLlVHKHEuZCwwLEEuTzgoci5kLmxlbmd0aCwiLi4iLCEx +LHApKQpCLk5tLlk1KHEuZSwwLCIiKQpCLk5tLlVHKHEuZSwxLEEuTzgoci5kLmxlbmd0aCxzLmdtSSgp +LCExLHApKQpzPXEuZApwPXMubGVuZ3RoCmlmKHA9PT0wKXJldHVybiIuIgppZihwPjEmJkouUk0oQi5O +bS5ncloocyksIi4iKSl7cz1xLmQKaWYoMD49cy5sZW5ndGgpcmV0dXJuIEEuT0gocywtMSkKcy5wb3Ao +KQpzPXEuZQppZigwPj1zLmxlbmd0aClyZXR1cm4gQS5PSChzLC0xKQpzLnBvcCgpCmlmKDA+PXMubGVu +Z3RoKXJldHVybiBBLk9IKHMsLTEpCnMucG9wKCkKQi5ObS5pKHMsIiIpfXEuYj0iIgpxLklWKCkKcmV0 +dXJuIHFbIlsiXSgwKX19CkEucTcucHJvdG90eXBlPXsKJDEoYSl7cmV0dXJuIEEubihhKSE9PSIifSwK +JFM6NH0KQS5Oby5wcm90b3R5cGU9ewokMShhKXtBLmsoYSkKcmV0dXJuIGE9PW51bGw/Im51bGwiOici +JythKyciJ30sCiRTOjUxfQpBLmZ2LnByb3RvdHlwZT17CnhaKGEpe3ZhciBzLHI9dGhpcy5ZcihhKQpp +ZihyPjApcmV0dXJuIEIueEIuTmooYSwwLHIpCmlmKHRoaXMuaEsoYSkpe2lmKDA+PWEubGVuZ3RoKXJl +dHVybiBBLk9IKGEsMCkKcz1hWzBdfWVsc2Ugcz1udWxsCnJldHVybiBzfSwKTmMoYSxiKXtyZXR1cm4g +YT09PWJ9fQpBLldELnByb3RvdHlwZT17CklWKCl7dmFyIHMscixxPXRoaXMKd2hpbGUoITApe3M9cS5k +CmlmKCEocy5sZW5ndGghPT0wJiZKLlJNKEIuTm0uZ3JaKHMpLCIiKSkpYnJlYWsKcz1xLmQKaWYoMD49 +cy5sZW5ndGgpcmV0dXJuIEEuT0gocywtMSkKcy5wb3AoKQpzPXEuZQppZigwPj1zLmxlbmd0aClyZXR1 +cm4gQS5PSChzLC0xKQpzLnBvcCgpfXM9cS5lCnI9cy5sZW5ndGgKaWYociE9PTApQi5ObS5ZNShzLHIt +MSwiIil9LApyUigpe3ZhciBzLHIscSxwLG8sbixtPXRoaXMsbD1BLlFJKFtdLHQucykKZm9yKHM9bS5k +LHI9cy5sZW5ndGgscT0wLHA9MDtwPHMubGVuZ3RoO3MubGVuZ3RoPT09cnx8KDAsQS5saykocyksKytw +KXtvPXNbcF0Kbj1KLmlhKG8pCmlmKCEobi5ETihvLCIuIil8fG4uRE4obywiIikpKWlmKG4uRE4obywi +Li4iKSl7bj1sLmxlbmd0aAppZihuIT09MCl7aWYoMD49bilyZXR1cm4gQS5PSChsLC0xKQpsLnBvcCgp +fWVsc2UgKytxfWVsc2UgQi5ObS5pKGwsbyl9aWYobS5iPT1udWxsKUIuTm0uVUcobCwwLEEuTzgocSwi +Li4iLCExLHQuTikpCmlmKGwubGVuZ3RoPT09MCYmbS5iPT1udWxsKUIuTm0uaShsLCIuIikKbS5zbkoo +bCkKcz1tLmEKbS5zUGgoQS5POChsLmxlbmd0aCsxLHMuZ21JKCksITAsdC5OKSkKcj1tLmIKaWYocj09 +bnVsbHx8bC5sZW5ndGg9PT0wfHwhcy5kcyhyKSlCLk5tLlk1KG0uZSwwLCIiKQpyPW0uYgppZihyIT1u +dWxsJiZzPT09JC5LaygpKXtyLnRvU3RyaW5nCm0uYj1BLnlzKHIsIi8iLCJcXCIpfW0uSVYoKX0sCiJb +IihhKXt2YXIgcyxyLHEscD10aGlzLG89cC5iCm89byE9bnVsbD8iIitvOiIiCmZvcihzPTA7czxwLmQu +bGVuZ3RoOysrcyxvPXEpe3I9cC5lCmlmKCEoczxyLmxlbmd0aCkpcmV0dXJuIEEuT0gocixzKQpyPUEu +RWoocltzXSkKcT1wLmQKaWYoIShzPHEubGVuZ3RoKSlyZXR1cm4gQS5PSChxLHMpCnE9bytyK0EuRWoo +cVtzXSl9bys9QS5FaihCLk5tLmdyWihwLmUpKQpyZXR1cm4gby5jaGFyQ29kZUF0KDApPT0wP286b30s +CnNuSihhKXt0aGlzLmQ9dC5hLmEoYSl9LApzUGgoYSl7dGhpcy5lPXQuYS5hKGEpfX0KQS5kdi5wcm90 +b3R5cGU9ewoiWyIoYSl7cmV0dXJuIlBhdGhFeGNlcHRpb246ICIrdGhpcy5hfSwKJGlSejoxfQpBLnpM +LnByb3RvdHlwZT17CiJbIihhKXtyZXR1cm4gdGhpcy5nb2ModGhpcyl9fQpBLk9GLnByb3RvdHlwZT17 +ClVkKGEpe3JldHVybiBCLnhCLnRnKGEsIi8iKX0sCnI0KGEpe3JldHVybiBhPT09NDd9LApkcyhhKXt2 +YXIgcz1hLmxlbmd0aApyZXR1cm4gcyE9PTAmJkIueEIuTyhhLHMtMSkhPT00N30sClNwKGEsYil7aWYo +YS5sZW5ndGghPT0wJiZCLnhCLlcoYSwwKT09PTQ3KXJldHVybiAxCnJldHVybiAwfSwKWXIoYSl7cmV0 +dXJuIHRoaXMuU3AoYSwhMSl9LApoSyhhKXtyZXR1cm4hMX0sCmdvYygpe3JldHVybiJwb3NpeCJ9LApn +bUkoKXtyZXR1cm4iLyJ9fQpBLnJ1LnByb3RvdHlwZT17ClVkKGEpe3JldHVybiBCLnhCLnRnKGEsIi8i +KX0sCnI0KGEpe3JldHVybiBhPT09NDd9LApkcyhhKXt2YXIgcz1hLmxlbmd0aAppZihzPT09MClyZXR1 +cm4hMQppZihCLnhCLk8oYSxzLTEpIT09NDcpcmV0dXJuITAKcmV0dXJuIEIueEIuVGMoYSwiOi8vIikm +JnRoaXMuWXIoYSk9PT1zfSwKU3AoYSxiKXt2YXIgcyxyLHEscCxvPWEubGVuZ3RoCmlmKG89PT0wKXJl +dHVybiAwCmlmKEIueEIuVyhhLDApPT09NDcpcmV0dXJuIDEKZm9yKHM9MDtzPG87KytzKXtyPUIueEIu +VyhhLHMpCmlmKHI9PT00NylyZXR1cm4gMAppZihyPT09NTgpe2lmKHM9PT0wKXJldHVybiAwCnE9Qi54 +Qi5YVShhLCIvIixCLnhCLlFpKGEsIi8vIixzKzEpP3MrMzpzKQppZihxPD0wKXJldHVybiBvCmlmKCFi +fHxvPHErMylyZXR1cm4gcQppZighQi54Qi5uKGEsImZpbGU6Ly8iKSlyZXR1cm4gcQppZighQS5ZdShh +LHErMSkpcmV0dXJuIHEKcD1xKzMKcmV0dXJuIG89PT1wP3A6cSs0fX1yZXR1cm4gMH0sCllyKGEpe3Jl +dHVybiB0aGlzLlNwKGEsITEpfSwKaEsoYSl7cmV0dXJuIGEubGVuZ3RoIT09MCYmQi54Qi5XKGEsMCk9 +PT00N30sCmdvYygpe3JldHVybiJ1cmwifSwKZ21JKCl7cmV0dXJuIi8ifX0KQS5JVi5wcm90b3R5cGU9 +ewpVZChhKXtyZXR1cm4gQi54Qi50ZyhhLCIvIil9LApyNChhKXtyZXR1cm4gYT09PTQ3fHxhPT09OTJ9 +LApkcyhhKXt2YXIgcz1hLmxlbmd0aAppZihzPT09MClyZXR1cm4hMQpzPUIueEIuTyhhLHMtMSkKcmV0 +dXJuIShzPT09NDd8fHM9PT05Mil9LApTcChhLGIpe3ZhciBzLHIscT1hLmxlbmd0aAppZihxPT09MCly +ZXR1cm4gMApzPUIueEIuVyhhLDApCmlmKHM9PT00NylyZXR1cm4gMQppZihzPT09OTIpe2lmKHE8Mnx8 +Qi54Qi5XKGEsMSkhPT05MilyZXR1cm4gMQpyPUIueEIuWFUoYSwiXFwiLDIpCmlmKHI+MCl7cj1CLnhC +LlhVKGEsIlxcIixyKzEpCmlmKHI+MClyZXR1cm4gcn1yZXR1cm4gcX1pZihxPDMpcmV0dXJuIDAKaWYo +IUEuT1MocykpcmV0dXJuIDAKaWYoQi54Qi5XKGEsMSkhPT01OClyZXR1cm4gMApxPUIueEIuVyhhLDIp +CmlmKCEocT09PTQ3fHxxPT09OTIpKXJldHVybiAwCnJldHVybiAzfSwKWXIoYSl7cmV0dXJuIHRoaXMu +U3AoYSwhMSl9LApoSyhhKXtyZXR1cm4gdGhpcy5ZcihhKT09PTF9LApPdChhLGIpe3ZhciBzCmlmKGE9 +PT1iKXJldHVybiEwCmlmKGE9PT00NylyZXR1cm4gYj09PTkyCmlmKGE9PT05MilyZXR1cm4gYj09PTQ3 +CmlmKChhXmIpIT09MzIpcmV0dXJuITEKcz1hfDMyCnJldHVybiBzPj05NyYmczw9MTIyfSwKTmMoYSxi +KXt2YXIgcyxyCmlmKGE9PT1iKXJldHVybiEwCnM9YS5sZW5ndGgKaWYocyE9PWIubGVuZ3RoKXJldHVy +biExCmZvcihyPTA7cjxzOysrcilpZighdGhpcy5PdChCLnhCLlcoYSxyKSxCLnhCLlcoYixyKSkpcmV0 +dXJuITEKcmV0dXJuITB9LApnb2MoKXtyZXR1cm4id2luZG93cyJ9LApnbUkoKXtyZXR1cm4iXFwifX07 +KGZ1bmN0aW9uIGFsaWFzZXMoKXt2YXIgcz1KLkd2LnByb3RvdHlwZQpzLlU9c1siWyJdCnM9Si51MC5w +cm90b3R5cGUKcy51PXNbIlsiXQpzPUEuTjUucHJvdG90eXBlCnMuUEE9cy5DWApzLkZRPXMuYWEKcy5K +MT1zLnh3CnM9QS5jWC5wcm90b3R5cGUKcy5HRz1zLmV2CnM9QS5NaC5wcm90b3R5cGUKcy54Yj1zWyJb +Il0Kcz1BLmN2LnByb3RvdHlwZQpzLkRXPXMucjYKcz1BLm02LnByb3RvdHlwZQpzLmpGPXMuRWIKcz1B +LkU0LnByb3RvdHlwZQpzLlVyPXMucQpzLmU0PXMuWTUKcz1BLnZnLnByb3RvdHlwZQpzLmJoPXMuWTV9 +KSgpOyhmdW5jdGlvbiBpbnN0YWxsVGVhck9mZnMoKXt2YXIgcz1odW5rSGVscGVycy5fc3RhdGljXzEs +cj1odW5rSGVscGVycy5fc3RhdGljXzAscT1odW5rSGVscGVycy5pbnN0YWxsSW5zdGFuY2VUZWFyT2Zm +LHA9aHVua0hlbHBlcnMuX3N0YXRpY18yLG89aHVua0hlbHBlcnMuaW5zdGFsbFN0YXRpY1RlYXJPZmYs +bj1odW5rSGVscGVycy5faW5zdGFuY2VfMXUKcyhBLCJFWCIsIlpWIiw1KQpzKEEsInl0Iiwib0EiLDUp +CnMoQSwicVciLCJCeiIsNSkKcihBLCJVSSIsImVOIiwwKQpxKEEuUGYucHJvdG90eXBlLCJnWUoiLDAs +MSxudWxsLFsiJDIiLCIkMSJdLFsidzAiLCJwbSJdLDI3LDAsMCkKcChBLCJsUyIsIk91Iiw1MykKcyhB +LCJUTiIsIlQ5Iiw1NCkKcyhBLCJDeSIsIk5DIiwzKQpzKEEsIlBIIiwiTXQiLDIpCm8oQSwicFMiLDQs +bnVsbCxbIiQ0Il0sWyJxRCJdLDYsMCkKbyhBLCJWNCIsNCxudWxsLFsiJDQiXSxbIm5aIl0sNiwwKQpu +KEEuQXMucHJvdG90eXBlLCJndU0iLCJWIiwyKQpzKEEsImlHIiwid1kiLDU2KQpzKEEsIncwIiwiZFUi +LDM3KQpzKEEsImlTIiwiaTYiLDEpfSkoKTsoZnVuY3Rpb24gaW5oZXJpdGFuY2UoKXt2YXIgcz1odW5r +SGVscGVycy5taXhpbixyPWh1bmtIZWxwZXJzLm1peGluSGFyZCxxPWh1bmtIZWxwZXJzLmluaGVyaXQs +cD1odW5rSGVscGVycy5pbmhlcml0TWFueQpxKEEuTWgsbnVsbCkKcChBLk1oLFtBLkZLLEouR3YsSi5t +MSxBLmNYLEEuZVQsQS5YUyxBLm5ZLEEuSGIsQS5hNyxBLkFuLEEuRnUsQS5KQixBLlNVLEEuUmUsQS53 +dixBLlBuLEEuV1UsQS5MSSxBLlRwLEEuZjksQS50ZSxBLmJxLEEuWE8sQS5rcixBLllrLEEudmgsQS5O +NixBLlZSLEEuRUssQS5QYixBLnRRLEEuU2QsQS5KYyxBLkcsQS5sWSxBLlczLEEuaWgsQS5GeSxBLkdW +LEEuQ3csQS5QZixBLkZlLEEudnMsQS5PTSxBLnFoLEEuTU8sQS5rVCxBLnhJLEEubTAsQS5GUCxBLmJu +LEEubG0sQS5sRCxBLktQLEEubGYsQS5XWSxBLlVrLEEuU2gsQS5SdyxBLmJ6LEEuaVAsQS5jayxBLms1 +LEEuS1ksQS5DRCxBLmFFLEEuTjMsQS5jOCxBLlpkLEEuTSxBLkRuLEEuUEUsQS5VZixBLmlkLEEuRmss +QS5KUSxBLkdtLEEudkQsQS5tNixBLk93LEEuVzksQS5kVyxBLm1rLEEuS28sQS5pSixBLkU0LEEuZDIs +QS5TZSxBLk1sLEEueUQsQS53YixBLmo4LEEucXAsQS5tUSxBLlhBLEEuRDgsQS5MTCxBLmxJLEEuekws +QS5XRCxBLmR2XSkKcChKLkd2LFtKLnlFLEoud2UsSi5NRixKLmpkLEoucUksSi5EcixBLkVUXSkKcChK +Lk1GLFtKLnUwLEEuRDAsQS5BeixBLlk4LEEuTmgsQS5hZSxBLklCLEEubjcsQS5lYSxBLmJyLEEuU2cs +QS51OCxBLm5xLEEudEQsQS5oRl0pCnAoSi51MCxbSi5pQyxKLmtkLEouYzVdKQpxKEouUG8sSi5qZCkK +cChKLnFJLFtKLkw3LEoua0RdKQpwKEEuY1gsW0EuQlIsQS5iUSxBLmkxLEEuVTUsQS5BTSxBLnU2LEEu +WFIsQS5tVyxBLnVuXSkKcChBLkJSLFtBLlp5LEEuUUNdKQpxKEEub2wsQS5aeSkKcShBLlVxLEEuUUMp +CnEoQS5qVixBLlVxKQpwKEEuWFMsW0EuYyxBLkV6LEEuYXosQS52VixBLkVxLEEuQzYsQS5rUyxBLlVk +LEEuRixBLkFULEEubXAsQS51YixBLmRzLEEubGosQS5VVixBLnAsQS5RV10pCnEoQS51eSxBLm5ZKQpw +KEEudXksW0EudzIsQS53eixBLmU3XSkKcShBLnFqLEEudzIpCnAoQS5iUSxbQS5hTCxBLk1CLEEuaTVd +KQpwKEEuYUwsW0EubkgsQS5sSixBLmk4XSkKcShBLnh5LEEuaTEpCnAoQS5BbixbQS5NSCxBLlNPLEEu +VTFdKQpxKEEuZDUsQS5BTSkKcShBLlJVLEEuUG4pCnEoQS5HaixBLlJVKQpxKEEuUEQsQS5HaikKcShB +LkxQLEEuV1UpCnAoQS5UcCxbQS5FMSxBLkF5LEEubGMsQS5kQyxBLlZYLEEudGgsQS5oYSxBLldNLEEu +cFYsQS5qWixBLkI1LEEuT1IsQS52NixBLnlRLEEuUlosQS5jNixBLnFkLEEuQ3YsQS52TixBLlV2LEEu +RWcsQS5FbyxBLldrLEEuSUEsQS5HRSxBLk43LEEudVEsQS5EVixBLlBDLEEuUVMsQS5ucCxBLlV0LEEu +YU4sQS5iMCxBLmUsQS5vWixBLmpyLEEueTgsQS5IaSxBLkJULEEuUFksQS5MLEEuV3gsQS5IbyxBLklD +LEEuZkMsQS5UbSxBLnVlLEEuR0gsQS5QTixBLlZTLEEuVEQsQS5JZixBLnRCLEEubTIsQS5NRCxBLnE3 +LEEuTm9dKQpwKEEuRTEsW0EuQ2osQS5ldyxBLndOLEEuU1gsQS5HcyxBLlU3LEEucmEsQS50aSxBLldG +LEEubjEsQS5jUyxBLlZDLEEuSlQsQS5NRSxBLnk1LEEueUksQS5LUyxBLkEzLEEuZm0sQS5FMixBLmpn +LEEucWwsQS5FRV0pCnEoQS5XMCxBLkV6KQpwKEEubGMsW0EuengsQS5yVF0pCnEoQS5rWSxBLkM2KQpx +KEEuaWwsQS5ZaykKcChBLmlsLFtBLk41LEEudXcsQS5jZixBLlN5XSkKcChBLm1XLFtBLktXLEEucTRd +KQpxKEEuTFosQS5FVCkKcChBLkxaLFtBLlJHLEEuV0JdKQpxKEEuVlAsQS5SRykKcShBLkRnLEEuVlAp +CnEoQS5aRyxBLldCKQpxKEEuUGcsQS5aRykKcChBLlBnLFtBLnhqLEEuZEUsQS5aQSxBLmRULEEuUHEs +QS5lRSxBLlY2XSkKcShBLmlNLEEua1MpCnAoQS5BeSxbQS5WcyxBLkZ0LEEueUgsQS5kYSxBLm9RLEEu +dnIsQS5ydCxBLktGLEEuWkwsQS5SVCxBLnJxLEEuUlcsQS51TyxBLkV2LEEuVnAsQS54cixBLk56LEEu +VlcsQS5uVCxBLk5ZLEEuUUxdKQpxKEEuWmYsQS5QZikKcShBLkppLEEubTApCnEoQS54ZCxBLk41KQpx +KEEuWHYsQS5GUCkKcShBLmI2LEEuWHYpCnEoQS5WaixBLldZKQpwKEEuVWssW0EuQ1YsQS5aaSxBLmJ5 +XSkKcShBLndJLEEua1QpCnAoQS53SSxbQS5VOCxBLm9qLEEuTXgsQS5FMyxBLkdZXSkKcShBLks4LEEu +VWQpCnEoQS50dSxBLlNoKQpxKEEudTUsQS5aaSkKcChBLkFULFtBLmJKLEEuZVldKQpxKEEucWUsQS5E +bikKcChBLkQwLFtBLktWLEEud2EsQS5LNSxBLkNtXSkKcChBLktWLFtBLmN2LEEubngsQS5RRixBLkNR +XSkKcChBLmN2LFtBLnFFLEEuaGldKQpwKEEucUUsW0EuR2gsQS5mWSxBLnJaLEEuUVAsQS5oNCxBLlNO +LEEubHAsQS5UYixBLkl2LEEuV1AsQS55WV0pCnEoQS5vSixBLlk4KQpxKEEuaEgsQS5BeikKcShBLlZi +LEEuUUYpCnEoQS5mSixBLndhKQpwKEEuZWEsW0EudzYsQS53Vl0pCnEoQS5BaixBLnc2KQpxKEEuQXIs +QS5ucSkKcShBLkJILEEuQXIpCnEoQS53NCxBLklCKQpxKEEudWYsQS50RCkKcShBLnJoLEEudWYpCnEo +QS5pNyxBLmNmKQpxKEEuQXMsQS5WaikKcChBLkFzLFtBLkk0LEEuS2VdKQpxKEEuUk8sQS5xaCkKcShB +LkNxLEEuUk8pCnEoQS54QyxBLk1PKQpxKEEuY3QsQS5tNikKcShBLkJmLEEuaUopCnAoQS5FNCxbQS5y +NyxBLnZnXSkKcShBLlR6LEEudmcpCnEoQS5uZCxBLmhpKQpwKEEuRDgsW0EudnQsQS5jRF0pCnAoQS5j +ayxbQS5POSxBLkdiLEEuSDddKQpxKEEuZnYsQS56TCkKcChBLmZ2LFtBLk9GLEEucnUsQS5JVl0pCnMo +QS53MixBLlJlKQpzKEEuUUMsQS5sRCkKcyhBLlJHLEEubEQpCnMoQS5WUCxBLlNVKQpzKEEuV0IsQS5s +RCkKcyhBLlpHLEEuU1UpCnMoQS5uWSxBLmxEKQpzKEEuV1ksQS5sZikKcyhBLlJVLEEuS1ApCnMoQS5G +UCxBLmxmKQpzKEEuWTgsQS5pZCkKcyhBLm5xLEEubEQpCnMoQS5BcixBLkdtKQpzKEEudEQsQS5sRCkK +cyhBLnVmLEEuR20pCnIoQS52ZyxBLmxEKX0pKCkKdmFyIHY9e3R5cGVVbml2ZXJzZTp7ZUM6bmV3IE1h +cCgpLHRSOnt9LGVUOnt9LHRQVjp7fSxzRUE6W119LG1hbmdsZWRHbG9iYWxOYW1lczp7S046ImludCIs +Q1A6ImRvdWJsZSIsWlo6Im51bSIscVU6IlN0cmluZyIsYTI6ImJvb2wiLGM4OiJOdWxsIix6TToiTGlz +dCJ9LG1hbmdsZWROYW1lczp7fSx0eXBlczpbIn4oKSIsIn4oQWopIiwicVUocVUpIiwiQChAKSIsImEy +KHFVKSIsIn4ofigpKSIsImEyKGN2LHFVLHFVLEpRKSIsImM4KEApIiwiYzgoKSIsIn4oY3YpIiwifihN +aD8sTWg/KSIsIkAoKSIsIn4ocVUsQCkiLCJ+KG42LHFVLEtOKSIsIn4ocVUscVUpIiwiYTIoa0YpIiwi +fihPbDxxVT4pIiwiYzgoZWEpIiwiYjg8fj4oQWopIiwifihxVSxLTikiLCJ+KHFVLEtOPykiLCJLTihL +TixLTikiLCJjOCh+KCkpIiwifihxVSxxVT8pIiwibjYoQCxAKSIsIn4oS04sQCkiLCJhMihLVikiLCJ+ +KE1oW0d6P10pIiwifihlYSkiLCJjOChNaCxHeikiLCJ2czxAPihAKSIsIn4oS1YsS1Y/KSIsIn4oQCxA +KSIsImM4KEAsQCkiLCJhMihPbDxxVT4pIiwiYTIoQCkiLCJyNyhAKSIsIk1oPyhAKSIsIkU0KEApIiwi +TEwoQCkiLCJaMDxxVSxNaD8+KExMKSIsIkAocVUpIiwiQChALHFVKSIsImM4KFowPHFVLE1oPz4/KSIs +ImM4KE1oLEApIiwifihHRCxAKSIsIn4od1YpIiwicVUoWjA8QCxAPikiLCJUejxAPihAKSIsIktOKEtO +LE4zPHFVLHpNPGo4Pj4pIiwiYTIoSDcpIiwicVUocVU/KSIsIlowPHFVLHFVPihaMDxxVSxxVT4scVUp +IiwiYTIoTWg/LE1oPykiLCJLTihNaD8pIiwifihAKSIsIk1oPyhNaD8pIiwiYzgoQCxHeikiXSxpbnRl +cmNlcHRvcnNCeVRhZzpudWxsLGxlYWZUYWdzOm51bGwsYXJyYXlSdGk6U3ltYm9sKCIkdGkiKX0KQS54 +Yih2LnR5cGVVbml2ZXJzZSxKU09OLnBhcnNlKCd7ImlDIjoidTAiLCJrZCI6InUwIiwiYzUiOiJ1MCIs +InJ4IjoiZWEiLCJlNSI6ImVhIiwiWTAiOiJoaSIsInRwIjoiaGkiLCJHOCI6IndWIiwiTXIiOiJxRSIs +ImVMIjoicUUiLCJJMCI6IktWIiwiaHMiOiJLViIsIlhnIjoiUUYiLCJuciI6IkFqIiwieTQiOiJ3NiIs +ImROIjoiQ20iLCJ4YyI6Im54Iiwia0oiOiJueCIsIkJzIjoiY3YiLCJ6VSI6IkRnIiwiZGYiOiJFVCIs +InlFIjp7ImEyIjpbXX0sIndlIjp7ImM4IjpbXX0sInUwIjp7InZtIjpbXX0sImpkIjp7InpNIjpbIjEi +XSwiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJQbyI6eyJqZCI6WyIxIl0sInpNIjpbIjEiXSwiYlEiOlsi +MSJdLCJjWCI6WyIxIl19LCJtMSI6eyJBbiI6WyIxIl19LCJxSSI6eyJDUCI6W10sIlpaIjpbXX0sIkw3 +Ijp7IkNQIjpbXSwiS04iOltdLCJaWiI6W119LCJrRCI6eyJDUCI6W10sIlpaIjpbXX0sIkRyIjp7InFV +IjpbXSwidlgiOltdfSwiQlIiOnsiY1giOlsiMiJdfSwiZVQiOnsiQW4iOlsiMiJdfSwiWnkiOnsiQlIi +OlsiMSIsIjIiXSwiY1giOlsiMiJdLCJjWC5FIjoiMiJ9LCJvbCI6eyJaeSI6WyIxIiwiMiJdLCJCUiI6 +WyIxIiwiMiJdLCJiUSI6WyIyIl0sImNYIjpbIjIiXSwiY1guRSI6IjIifSwiVXEiOnsibEQiOlsiMiJd +LCJ6TSI6WyIyIl0sIkJSIjpbIjEiLCIyIl0sImJRIjpbIjIiXSwiY1giOlsiMiJdfSwialYiOnsiVXEi +OlsiMSIsIjIiXSwibEQiOlsiMiJdLCJ6TSI6WyIyIl0sIkJSIjpbIjEiLCIyIl0sImJRIjpbIjIiXSwi +Y1giOlsiMiJdLCJsRC5FIjoiMiIsImNYLkUiOiIyIn0sImMiOnsiWFMiOltdfSwicWoiOnsibEQiOlsi +S04iXSwiUmUiOlsiS04iXSwiek0iOlsiS04iXSwiYlEiOlsiS04iXSwiY1giOlsiS04iXSwibEQuRSI6 +IktOIiwiUmUuRSI6IktOIn0sImJRIjp7ImNYIjpbIjEiXX0sImFMIjp7ImJRIjpbIjEiXSwiY1giOlsi +MSJdfSwibkgiOnsiYUwiOlsiMSJdLCJiUSI6WyIxIl0sImNYIjpbIjEiXSwiYUwuRSI6IjEiLCJjWC5F +IjoiMSJ9LCJhNyI6eyJBbiI6WyIxIl19LCJpMSI6eyJjWCI6WyIyIl0sImNYLkUiOiIyIn0sInh5Ijp7 +ImkxIjpbIjEiLCIyIl0sImJRIjpbIjIiXSwiY1giOlsiMiJdLCJjWC5FIjoiMiJ9LCJNSCI6eyJBbiI6 +WyIyIl19LCJsSiI6eyJhTCI6WyIyIl0sImJRIjpbIjIiXSwiY1giOlsiMiJdLCJhTC5FIjoiMiIsImNY +LkUiOiIyIn0sIlU1Ijp7ImNYIjpbIjEiXSwiY1guRSI6IjEifSwiU08iOnsiQW4iOlsiMSJdfSwiQU0i +OnsiY1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJkNSI6eyJBTSI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsi +MSJdLCJjWC5FIjoiMSJ9LCJVMSI6eyJBbiI6WyIxIl19LCJNQiI6eyJiUSI6WyIxIl0sImNYIjpbIjEi +XSwiY1guRSI6IjEifSwiRnUiOnsiQW4iOlsiMSJdfSwidTYiOnsiY1giOlsiMSJdLCJjWC5FIjoiMSJ9 +LCJKQiI6eyJBbiI6WyIxIl19LCJ3MiI6eyJsRCI6WyIxIl0sIlJlIjpbIjEiXSwiek0iOlsiMSJdLCJi +USI6WyIxIl0sImNYIjpbIjEiXX0sInd2Ijp7IkdEIjpbXX0sIlBEIjp7IkdqIjpbIjEiLCIyIl0sIlJV +IjpbIjEiLCIyIl0sIlBuIjpbIjEiLCIyIl0sIktQIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl19LCJX +VSI6eyJaMCI6WyIxIiwiMiJdfSwiTFAiOnsiV1UiOlsiMSIsIjIiXSwiWjAiOlsiMSIsIjIiXX0sIlhS +Ijp7ImNYIjpbIjEiXSwiY1guRSI6IjEifSwiTEkiOnsidlEiOltdfSwiVzAiOnsiRXoiOltdLCJYUyI6 +W119LCJheiI6eyJYUyI6W119LCJ2ViI6eyJYUyI6W119LCJ0ZSI6eyJSeiI6W119LCJYTyI6eyJHeiI6 +W119LCJUcCI6eyJFSCI6W119LCJBeSI6eyJFSCI6W119LCJFMSI6eyJFSCI6W119LCJsYyI6eyJFSCI6 +W119LCJ6eCI6eyJFSCI6W119LCJyVCI6eyJFSCI6W119LCJFcSI6eyJYUyI6W119LCJrWSI6eyJYUyI6 +W119LCJONSI6eyJZayI6WyIxIiwiMiJdLCJGbyI6WyIxIiwiMiJdLCJaMCI6WyIxIiwiMiJdLCJZay5L +IjoiMSIsIllrLlYiOiIyIn0sImk1Ijp7ImJRIjpbIjEiXSwiY1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJO +NiI6eyJBbiI6WyIxIl19LCJWUiI6eyJ3TCI6W10sInZYIjpbXX0sIkVLIjp7ImliIjpbXSwiT2QiOltd +fSwiS1ciOnsiY1giOlsiaWIiXSwiY1guRSI6ImliIn0sIlBiIjp7IkFuIjpbImliIl19LCJ0USI6eyJP +ZCI6W119LCJ1biI6eyJjWCI6WyJPZCJdLCJjWC5FIjoiT2QifSwiU2QiOnsiQW4iOlsiT2QiXX0sIkVU +Ijp7IkFTIjpbXX0sIkxaIjp7IlhqIjpbIjEiXSwiRVQiOltdLCJBUyI6W119LCJEZyI6eyJsRCI6WyJD +UCJdLCJYaiI6WyJDUCJdLCJ6TSI6WyJDUCJdLCJFVCI6W10sImJRIjpbIkNQIl0sIkFTIjpbXSwiY1gi +OlsiQ1AiXSwiU1UiOlsiQ1AiXSwibEQuRSI6IkNQIn0sIlBnIjp7ImxEIjpbIktOIl0sIlhqIjpbIktO +Il0sInpNIjpbIktOIl0sIkVUIjpbXSwiYlEiOlsiS04iXSwiQVMiOltdLCJjWCI6WyJLTiJdLCJTVSI6 +WyJLTiJdfSwieGoiOnsibEQiOlsiS04iXSwiWGoiOlsiS04iXSwiek0iOlsiS04iXSwiRVQiOltdLCJi +USI6WyJLTiJdLCJBUyI6W10sImNYIjpbIktOIl0sIlNVIjpbIktOIl0sImxELkUiOiJLTiJ9LCJkRSI6 +eyJsRCI6WyJLTiJdLCJYaiI6WyJLTiJdLCJ6TSI6WyJLTiJdLCJFVCI6W10sImJRIjpbIktOIl0sIkFT +IjpbXSwiY1giOlsiS04iXSwiU1UiOlsiS04iXSwibEQuRSI6IktOIn0sIlpBIjp7ImxEIjpbIktOIl0s +IlhqIjpbIktOIl0sInpNIjpbIktOIl0sIkVUIjpbXSwiYlEiOlsiS04iXSwiQVMiOltdLCJjWCI6WyJL +TiJdLCJTVSI6WyJLTiJdLCJsRC5FIjoiS04ifSwiZFQiOnsibEQiOlsiS04iXSwiWGoiOlsiS04iXSwi +ek0iOlsiS04iXSwiRVQiOltdLCJiUSI6WyJLTiJdLCJBUyI6W10sImNYIjpbIktOIl0sIlNVIjpbIktO +Il0sImxELkUiOiJLTiJ9LCJQcSI6eyJsRCI6WyJLTiJdLCJYaiI6WyJLTiJdLCJ6TSI6WyJLTiJdLCJF +VCI6W10sImJRIjpbIktOIl0sIkFTIjpbXSwiY1giOlsiS04iXSwiU1UiOlsiS04iXSwibEQuRSI6IktO +In0sImVFIjp7ImxEIjpbIktOIl0sIlhqIjpbIktOIl0sInpNIjpbIktOIl0sIkVUIjpbXSwiYlEiOlsi +S04iXSwiQVMiOltdLCJjWCI6WyJLTiJdLCJTVSI6WyJLTiJdLCJsRC5FIjoiS04ifSwiVjYiOnsibEQi +OlsiS04iXSwibjYiOltdLCJYaiI6WyJLTiJdLCJ6TSI6WyJLTiJdLCJFVCI6W10sImJRIjpbIktOIl0s +IkFTIjpbXSwiY1giOlsiS04iXSwiU1UiOlsiS04iXSwibEQuRSI6IktOIn0sImtTIjp7IlhTIjpbXX0s +ImlNIjp7IkV6IjpbXSwiWFMiOltdfSwidnMiOnsiYjgiOlsiMSJdfSwiR1YiOnsiQW4iOlsiMSJdfSwi +cTQiOnsiY1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJDdyI6eyJYUyI6W119LCJaZiI6eyJQZiI6WyIxIl19 +LCJtMCI6eyJRbSI6W119LCJKaSI6eyJtMCI6W10sIlFtIjpbXX0sInhkIjp7Ik41IjpbIjEiLCIyIl0s +IllrIjpbIjEiLCIyIl0sIkZvIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl0sIllrLksiOiIxIiwiWWsu +ViI6IjIifSwiYjYiOnsibGYiOlsiMSJdLCJPbCI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdLCJs +Zi5FIjoiMSJ9LCJsbSI6eyJBbiI6WyIxIl19LCJtVyI6eyJjWCI6WyIxIl19LCJ1eSI6eyJsRCI6WyIx +Il0sInpNIjpbIjEiXSwiYlEiOlsiMSJdLCJjWCI6WyIxIl19LCJpbCI6eyJZayI6WyIxIiwiMiJdLCJa +MCI6WyIxIiwiMiJdfSwiWWsiOnsiWjAiOlsiMSIsIjIiXX0sIlBuIjp7IlowIjpbIjEiLCIyIl19LCJH +aiI6eyJSVSI6WyIxIiwiMiJdLCJQbiI6WyIxIiwiMiJdLCJLUCI6WyIxIiwiMiJdLCJaMCI6WyIxIiwi +MiJdfSwiVmoiOnsibGYiOlsiMSJdLCJPbCI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdfSwiWHYi +OnsibGYiOlsiMSJdLCJPbCI6WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdfSwidXciOnsiWWsiOlsi +cVUiLCJAIl0sIlowIjpbInFVIiwiQCJdLCJZay5LIjoicVUiLCJZay5WIjoiQCJ9LCJpOCI6eyJhTCI6 +WyJxVSJdLCJiUSI6WyJxVSJdLCJjWCI6WyJxVSJdLCJhTC5FIjoicVUiLCJjWC5FIjoicVUifSwiQ1Yi +OnsiVWsiOlsiek08S04+IiwicVUiXSwiVWsuUyI6InpNPEtOPiJ9LCJVOCI6eyJ3SSI6WyJ6TTxLTj4i +LCJxVSJdfSwiWmkiOnsiVWsiOlsicVUiLCJ6TTxLTj4iXX0sIlVkIjp7IlhTIjpbXX0sIks4Ijp7IlhT +IjpbXX0sImJ5Ijp7IlVrIjpbIk1oPyIsInFVIl0sIlVrLlMiOiJNaD8ifSwib2oiOnsid0kiOlsiTWg/ +IiwicVUiXX0sIk14Ijp7IndJIjpbInFVIiwiTWg/Il19LCJ1NSI6eyJVayI6WyJxVSIsInpNPEtOPiJd +LCJVay5TIjoicVUifSwiRTMiOnsid0kiOlsicVUiLCJ6TTxLTj4iXX0sIkdZIjp7IndJIjpbInpNPEtO +PiIsInFVIl19LCJDUCI6eyJaWiI6W119LCJLTiI6eyJaWiI6W119LCJ6TSI6eyJiUSI6WyIxIl0sImNY +IjpbIjEiXX0sImliIjp7Ik9kIjpbXX0sIk9sIjp7ImJRIjpbIjEiXSwiY1giOlsiMSJdfSwicVUiOnsi +dlgiOltdfSwiQzYiOnsiWFMiOltdfSwiRXoiOnsiWFMiOltdfSwiRiI6eyJYUyI6W119LCJBVCI6eyJY +UyI6W119LCJiSiI6eyJYUyI6W119LCJlWSI6eyJYUyI6W119LCJtcCI6eyJYUyI6W119LCJ1YiI6eyJY +UyI6W119LCJkcyI6eyJYUyI6W119LCJsaiI6eyJYUyI6W119LCJVViI6eyJYUyI6W119LCJrNSI6eyJY +UyI6W119LCJLWSI6eyJYUyI6W119LCJwIjp7IlhTIjpbXX0sIkNEIjp7IlJ6IjpbXX0sImFFIjp7IlJ6 +IjpbXX0sIlpkIjp7Ikd6IjpbXX0sIk0iOnsiQkwiOltdfSwiRG4iOnsiaUQiOltdfSwiVWYiOnsiaUQi +OltdfSwicWUiOnsiaUQiOltdfSwiY3YiOnsiS1YiOltdLCJEMCI6W119LCJmSiI6eyJEMCI6W119LCJB +aiI6eyJlYSI6W119LCJLViI6eyJEMCI6W119LCJ3ViI6eyJlYSI6W119LCJKUSI6eyJrRiI6W119LCJx +RSI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwiR2giOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0s +ImZZIjp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJyWiI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltd +fSwiUVAiOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sIm54Ijp7IktWIjpbXSwiRDAiOltdfSwiUUYi +OnsiS1YiOltdLCJEMCI6W119LCJJQiI6eyJ0biI6WyJaWiJdfSwid3oiOnsibEQiOlsiMSJdLCJ6TSI6 +WyIxIl0sImJRIjpbIjEiXSwiY1giOlsiMSJdLCJsRC5FIjoiMSJ9LCJoSCI6eyJBeiI6W119LCJoNCI6 +eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwiVmIiOnsiS1YiOltdLCJEMCI6W119LCJ3YSI6eyJEMCI6 +W119LCJlNyI6eyJsRCI6WyJLViJdLCJ6TSI6WyJLViJdLCJiUSI6WyJLViJdLCJjWCI6WyJLViJdLCJs +RC5FIjoiS1YifSwiQkgiOnsibEQiOlsiS1YiXSwiR20iOlsiS1YiXSwiek0iOlsiS1YiXSwiWGoiOlsi +S1YiXSwiYlEiOlsiS1YiXSwiY1giOlsiS1YiXSwibEQuRSI6IktWIiwiR20uRSI6IktWIn0sIlNOIjp7 +ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJscCI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwiVGIi +OnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0sIkl2Ijp7ImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJX +UCI6eyJjdiI6W10sIktWIjpbXSwiRDAiOltdfSwieVkiOnsiY3YiOltdLCJLViI6W10sIkQwIjpbXX0s +Inc2Ijp7ImVhIjpbXX0sIks1Ijp7ImRBIjpbXSwiRDAiOltdfSwiQ20iOnsiRDAiOltdfSwiQ1EiOnsi +S1YiOltdLCJEMCI6W119LCJ3NCI6eyJ0biI6WyJaWiJdfSwicmgiOnsibEQiOlsiS1YiXSwiR20iOlsi +S1YiXSwiek0iOlsiS1YiXSwiWGoiOlsiS1YiXSwiYlEiOlsiS1YiXSwiY1giOlsiS1YiXSwibEQuRSI6 +IktWIiwiR20uRSI6IktWIn0sImNmIjp7IllrIjpbInFVIiwicVUiXSwiWjAiOlsicVUiLCJxVSJdfSwi +aTciOnsiWWsiOlsicVUiLCJxVSJdLCJaMCI6WyJxVSIsInFVIl0sIllrLksiOiJxVSIsIllrLlYiOiJx +VSJ9LCJTeSI6eyJZayI6WyJxVSIsInFVIl0sIlowIjpbInFVIiwicVUiXSwiWWsuSyI6InFVIiwiWWsu +ViI6InFVIn0sIkk0Ijp7ImxmIjpbInFVIl0sIk9sIjpbInFVIl0sImJRIjpbInFVIl0sImNYIjpbInFV +Il0sImxmLkUiOiJxVSJ9LCJSTyI6eyJxaCI6WyIxIl19LCJDcSI6eyJSTyI6WyIxIl0sInFoIjpbIjEi +XX0sInhDIjp7Ik1PIjpbIjEiXX0sInZEIjp7ImtGIjpbXX0sIm02Ijp7ImtGIjpbXX0sImN0Ijp7ImtG +IjpbXX0sIk93Ijp7ImtGIjpbXX0sIlc5Ijp7IkFuIjpbIjEiXX0sImRXIjp7ImRBIjpbXSwiRDAiOltd +fSwibWsiOnsieTAiOltdfSwiS28iOnsib24iOltdfSwiQXMiOnsibGYiOlsicVUiXSwiT2wiOlsicVUi +XSwiYlEiOlsicVUiXSwiY1giOlsicVUiXX0sInI3Ijp7IkU0IjpbXX0sIlR6Ijp7ImxEIjpbIjEiXSwi +ek0iOlsiMSJdLCJiUSI6WyIxIl0sIkU0IjpbXSwiY1giOlsiMSJdLCJsRC5FIjoiMSJ9LCJuZCI6eyJo +aSI6W10sImN2IjpbXSwiS1YiOltdLCJEMCI6W119LCJLZSI6eyJsZiI6WyJxVSJdLCJPbCI6WyJxVSJd +LCJiUSI6WyJxVSJdLCJjWCI6WyJxVSJdLCJsZi5FIjoicVUifSwiaGkiOnsiY3YiOltdLCJLViI6W10s +IkQwIjpbXX0sIlFXIjp7IlhTIjpbXSwiUnoiOltdfSwiWEEiOnsia0YiOltdfSwidnQiOnsiRDgiOltd +fSwiY0QiOnsiRDgiOltdfSwiZHYiOnsiUnoiOltdfSwiT0YiOnsiZnYiOltdfSwicnUiOnsiZnYiOltd +fSwiSVYiOnsiZnYiOltdfSwibjYiOnsiek0iOlsiS04iXSwiYlEiOlsiS04iXSwiY1giOlsiS04iXSwi +QVMiOltdfX0nKSkKQS5GRih2LnR5cGVVbml2ZXJzZSxKU09OLnBhcnNlKCd7IncyIjoxLCJRQyI6Miwi +TFoiOjEsImtUIjoyLCJtVyI6MSwidXkiOjEsImlsIjoyLCJWaiI6MSwiWHYiOjEsIm5ZIjoxLCJXWSI6 +MSwiRlAiOjEsInZnIjoxfScpKQp2YXIgdT17bDoiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJv +bSBhIFVSSSB3aXRoIGEgZnJhZ21lbnQgY29tcG9uZW50IixpOiJDYW5ub3QgZXh0cmFjdCBhIGZpbGUg +cGF0aCBmcm9tIGEgVVJJIHdpdGggYSBxdWVyeSBjb21wb25lbnQiLGo6IkNhbm5vdCBleHRyYWN0IGEg +bm9uLVdpbmRvd3MgZmlsZSBwYXRoIGZyb20gYSBmaWxlIFVSSSB3aXRoIGFuIGF1dGhvcml0eSIsYzoi +RXJyb3IgaGFuZGxlciBtdXN0IGFjY2VwdCBvbmUgT2JqZWN0IG9yIG9uZSBPYmplY3QgYW5kIGEgU3Rh +Y2tUcmFjZSBhcyBhcmd1bWVudHMsIGFuZCByZXR1cm4gYSB2YWx1ZSBvZiB0aGUgcmV0dXJuZWQgZnV0 +dXJlJ3MgdHlwZSIsZDoiYXJlYS1hbmFseXplcixhbmFseXplci1ubmJkLW1pZ3JhdGlvbix0eXBlLWJ1 +ZyJ9CnZhciB0PShmdW5jdGlvbiBydGlpKCl7dmFyIHM9QS5OMApyZXR1cm57YnE6cygiR2giKSxuOnMo +IkN3IiksY1I6cygicloiKSx3OnMoIkF6IikscjpzKCJRUCIpLGdGOnMoIlBEPEdELEA+IiksVTpzKCJi +UTxAPiIpLGg6cygiY3YiKSx1OnMoIlhTIiksQjpzKCJlYSIpLGc4OnMoIlJ6IiksYzg6cygiaEgiKSxZ +OnMoIkVIIiksaTpzKCJiODxAPiIpLEo6cygiTEwiKSxncDpzKCJINyIpLHg6cygiU2ciKSxvOnMoInZR +IiksZWg6cygiY1g8S1Y+IiksTzpzKCJjWDxxVT4iKSxrOnMoImNYPEA+IiksZkE6cygiamQ8U2U+Iiks +Z2k6cygiamQ8ajg+IiksZDpzKCJqZDxaMDxxVSxNaD8+PiIpLGZoOnMoImpkPEQ4PiIpLEQ6cygiamQ8 +a0Y+IiksczpzKCJqZDxxVT4iKSxoaDpzKCJqZDx5RD4iKSxhSjpzKCJqZDx3Yj4iKSxnTjpzKCJqZDxu +Nj4iKSxiOnMoImpkPEA+IiksdDpzKCJqZDxLTj4iKSxkNDpzKCJqZDxxVT8+IiksVDpzKCJ3ZSIpLGVI +OnMoInZtIiksRTpzKCJjNSIpLGFVOnMoIlhqPEA+IiksYW06cygiVHo8QD4iKSxlbzpzKCJONTxHRCxA +PiIpLGR6OnMoImhGIiksZjQ6cygiek08ajg+IiksYVM6cygiek08WjA8cVUsTWg/Pj4iKSxldzpzKCJ6 +TTxNaD4iKSxhOnMoInpNPHFVPiIpLGo6cygiek08QD4iKSxMOnMoInpNPEtOPiIpLFc6cygiek08TWg/ +PiIpLEY6cygidTgiKSxlZTpzKCJOMzxxVSx6TTxqOD4+IiksaDY6cygiWjA8cVUsTWg+IiksSTpzKCJa +MDxxVSxxVT4iKSxmOnMoIlowPEAsQD4iKSxHOnMoIlowPHFVLE1oPz4iKSxkdjpzKCJsSjxxVSxxVT4i +KSxkbzpzKCJsSjxxVSxAPiIpLFY6cygiQWoiKSxkRTpzKCJFVCIpLEE6cygiS1YiKSxmNjpzKCJrRiIp +LFA6cygiYzgiKSxLOnMoIk1oIikscDpzKCJ3ViIpLHE6cygidG48Wlo+IiksZnY6cygid0wiKSxjejpz +KCJpYiIpLGFPOnMoIm5kIiksQzpzKCJPbDxxVT4iKSxsOnMoIkd6IiksTjpzKCJxVSIpLGRHOnMoInFV +KHFVKSIpLGc3OnMoImhpIiksZm86cygiR0QiKSxhVzpzKCJ5WSIpLGVLOnMoIkV6IiksYWs6cygiQVMi +KSxnYzpzKCJuNiIpLGJJOnMoImtkIiksZHc6cygiR2o8cVUscVU+IiksZEQ6cygiaUQiKSxlSjpzKCJ1 +NjxxVT4iKSxnNDpzKCJLNSIpLGNpOnMoImRBIiksZzI6cygiQ20iKSxiajpzKCJaZjxmSj4iKSxoOTpz +KCJDUSIpLGFjOnMoImU3IiksUTpzKCJDcTxBaj4iKSxSOnMoInd6PGN2PiIpLGFvOnMoInZzPGZKPiIp +LGM6cygidnM8QD4iKSxmSjpzKCJ2czxLTj4iKSxjcjpzKCJKUSIpLHk6cygiYTIiKSxhbDpzKCJhMihN +aCkiKSxnUjpzKCJDUCIpLHo6cygiQCIpLGZPOnMoIkAoKSIpLHY6cygiQChNaCkiKSxtOnMoIkAoTWgs +R3opIiksYlU6cygiQChPbDxxVT4pIiksZE86cygiQChxVSkiKSxiODpzKCJAKEAsQCkiKSxTOnMoIktO +IiksYXc6cygiMCYqIiksXzpzKCJNaCoiKSxjaDpzKCJEMD8iKSxiRzpzKCJiODxjOD4/IiksZXM6cygi +RTQ/IiksYk06cygiek08QD4/IiksZ3E6cygiek08TWg/Pj8iKSxjOTpzKCJaMDxxVSxAPj8iKSxmbjpz +KCJaMDxxVSxNaD8+PyIpLFg6cygiTWg/IiksZGs6cygicVU/IiksZTpzKCJGZTxALEA+PyIpLGc6cygi +Ym4/IiksYjc6cygiYTIoTWgpPyIpLGJ3OnMoIkAoZWEpPyIpLGZWOnMoIk1oPyhNaD8sTWg/KT8iKSxk +QTpzKCJNaD8oQCk/IiksWjpzKCJ+KCk/IiksZ3g6cygifih3Vik/IiksZGk6cygiWloiKSxIOnMoIn4i +KSxNOnMoIn4oKSIpLGVBOnMoIn4ocVUscVUpIiksY0E6cygifihxVSxAKSIpfX0pKCk7KGZ1bmN0aW9u +IGNvbnN0YW50cygpe3ZhciBzPWh1bmtIZWxwZXJzLm1ha2VDb25zdExpc3QKQi54bj1BLkdoLnByb3Rv +dHlwZQpCLlJZPUEuUVAucHJvdG90eXBlCkIubUg9QS5hZS5wcm90b3R5cGUKQi5CWj1BLlZiLnByb3Rv +dHlwZQpCLkR0PUEuZkoucHJvdG90eXBlCkIuT2s9Si5Hdi5wcm90b3R5cGUKQi5ObT1KLmpkLnByb3Rv +dHlwZQpCLmpuPUouTDcucHJvdG90eXBlCkIuQ0Q9Si5xSS5wcm90b3R5cGUKQi54Qj1KLkRyLnByb3Rv +dHlwZQpCLkRHPUouYzUucHJvdG90eXBlCkIuVWI9Si5NRi5wcm90b3R5cGUKQi5FeD1BLnU4LnByb3Rv +dHlwZQpCLk5BPUEuVjYucHJvdG90eXBlCkIudDU9QS5CSC5wcm90b3R5cGUKQi5MdD1BLlNOLnByb3Rv +dHlwZQpCLlpRPUouaUMucHJvdG90eXBlCkIuSWU9QS5UYi5wcm90b3R5cGUKQi52Qj1KLmtkLnByb3Rv +dHlwZQpCLm9sPUEuSzUucHJvdG90eXBlCkIueTg9bmV3IEEuVTgoKQpCLmg5PW5ldyBBLkNWKCkKQi5H +dz1uZXcgQS5GdShBLk4wKCJGdTwwJj4iKSkKQi5PND1mdW5jdGlvbiBnZXRUYWdGYWxsYmFjayhvKSB7 +CiAgdmFyIHMgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7CiAgcmV0dXJuIHMuc3Vi +c3RyaW5nKDgsIHMubGVuZ3RoIC0gMSk7Cn0KQi5ZcT1mdW5jdGlvbigpIHsKICB2YXIgdG9TdHJpbmdG +dW5jdGlvbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgZnVuY3Rpb24gZ2V0VGFnKG8pIHsK +ICAgIHZhciBzID0gdG9TdHJpbmdGdW5jdGlvbi5jYWxsKG8pOwogICAgcmV0dXJuIHMuc3Vic3RyaW5n +KDgsIHMubGVuZ3RoIC0gMSk7CiAgfQogIGZ1bmN0aW9uIGdldFVua25vd25UYWcob2JqZWN0LCB0YWcp +IHsKICAgIGlmICgvXkhUTUxbQS1aXS4qRWxlbWVudCQvLnRlc3QodGFnKSkgewogICAgICB2YXIgbmFt +ZSA9IHRvU3RyaW5nRnVuY3Rpb24uY2FsbChvYmplY3QpOwogICAgICBpZiAobmFtZSA9PSAiW29iamVj +dCBPYmplY3RdIikgcmV0dXJuIG51bGw7CiAgICAgIHJldHVybiAiSFRNTEVsZW1lbnQiOwogICAgfQog +IH0KICBmdW5jdGlvbiBnZXRVbmtub3duVGFnR2VuZXJpY0Jyb3dzZXIob2JqZWN0LCB0YWcpIHsKICAg +IGlmIChzZWxmLkhUTUxFbGVtZW50ICYmIG9iamVjdCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSByZXR1 +cm4gIkhUTUxFbGVtZW50IjsKICAgIHJldHVybiBnZXRVbmtub3duVGFnKG9iamVjdCwgdGFnKTsKICB9 +CiAgZnVuY3Rpb24gcHJvdG90eXBlRm9yVGFnKHRhZykgewogICAgaWYgKHR5cGVvZiB3aW5kb3cgPT0g +InVuZGVmaW5lZCIpIHJldHVybiBudWxsOwogICAgaWYgKHR5cGVvZiB3aW5kb3dbdGFnXSA9PSAidW5k +ZWZpbmVkIikgcmV0dXJuIG51bGw7CiAgICB2YXIgY29uc3RydWN0b3IgPSB3aW5kb3dbdGFnXTsKICAg +IGlmICh0eXBlb2YgY29uc3RydWN0b3IgIT0gImZ1bmN0aW9uIikgcmV0dXJuIG51bGw7CiAgICByZXR1 +cm4gY29uc3RydWN0b3IucHJvdG90eXBlOwogIH0KICBmdW5jdGlvbiBkaXNjcmltaW5hdG9yKHRhZykg +eyByZXR1cm4gbnVsbDsgfQogIHZhciBpc0Jyb3dzZXIgPSB0eXBlb2YgbmF2aWdhdG9yID09ICJvYmpl +Y3QiOwogIHJldHVybiB7CiAgICBnZXRUYWc6IGdldFRhZywKICAgIGdldFVua25vd25UYWc6IGlzQnJv +d3NlciA/IGdldFVua25vd25UYWdHZW5lcmljQnJvd3NlciA6IGdldFVua25vd25UYWcsCiAgICBwcm90 +b3R5cGVGb3JUYWc6IHByb3RvdHlwZUZvclRhZywKICAgIGRpc2NyaW1pbmF0b3I6IGRpc2NyaW1pbmF0 +b3IgfTsKfQpCLndiPWZ1bmN0aW9uKGdldFRhZ0ZhbGxiYWNrKSB7CiAgcmV0dXJuIGZ1bmN0aW9uKGhv +b2tzKSB7CiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAhPSAib2JqZWN0IikgcmV0dXJuIGhvb2tzOwog +ICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsKICAgIGlmICh1YS5pbmRleE9mKCJEdW1wUmVu +ZGVyVHJlZSIpID49IDApIHJldHVybiBob29rczsKICAgIGlmICh1YS5pbmRleE9mKCJDaHJvbWUiKSA+ +PSAwKSB7CiAgICAgIGZ1bmN0aW9uIGNvbmZpcm0ocCkgewogICAgICAgIHJldHVybiB0eXBlb2Ygd2lu +ZG93ID09ICJvYmplY3QiICYmIHdpbmRvd1twXSAmJiB3aW5kb3dbcF0ubmFtZSA9PSBwOwogICAgICB9 +CiAgICAgIGlmIChjb25maXJtKCJXaW5kb3ciKSAmJiBjb25maXJtKCJIVE1MRWxlbWVudCIpKSByZXR1 +cm4gaG9va3M7CiAgICB9CiAgICBob29rcy5nZXRUYWcgPSBnZXRUYWdGYWxsYmFjazsKICB9Owp9CkIu +S1U9ZnVuY3Rpb24oaG9va3MpIHsKICBpZiAodHlwZW9mIGRhcnRFeHBlcmltZW50YWxGaXh1cEdldFRh +ZyAhPSAiZnVuY3Rpb24iKSByZXR1cm4gaG9va3M7CiAgaG9va3MuZ2V0VGFnID0gZGFydEV4cGVyaW1l +bnRhbEZpeHVwR2V0VGFnKGhvb2tzLmdldFRhZyk7Cn0KQi5mUT1mdW5jdGlvbihob29rcykgewogIHZh +ciBnZXRUYWcgPSBob29rcy5nZXRUYWc7CiAgdmFyIHByb3RvdHlwZUZvclRhZyA9IGhvb2tzLnByb3Rv +dHlwZUZvclRhZzsKICBmdW5jdGlvbiBnZXRUYWdGaXhlZChvKSB7CiAgICB2YXIgdGFnID0gZ2V0VGFn +KG8pOwogICAgaWYgKHRhZyA9PSAiRG9jdW1lbnQiKSB7CiAgICAgIGlmICghIW8ueG1sVmVyc2lvbikg +cmV0dXJuICIhRG9jdW1lbnQiOwogICAgICByZXR1cm4gIiFIVE1MRG9jdW1lbnQiOwogICAgfQogICAg +cmV0dXJuIHRhZzsKICB9CiAgZnVuY3Rpb24gcHJvdG90eXBlRm9yVGFnRml4ZWQodGFnKSB7CiAgICBp +ZiAodGFnID09ICJEb2N1bWVudCIpIHJldHVybiBudWxsOwogICAgcmV0dXJuIHByb3RvdHlwZUZvclRh +Zyh0YWcpOwogIH0KICBob29rcy5nZXRUYWcgPSBnZXRUYWdGaXhlZDsKICBob29rcy5wcm90b3R5cGVG +b3JUYWcgPSBwcm90b3R5cGVGb3JUYWdGaXhlZDsKfQpCLmRrPWZ1bmN0aW9uKGhvb2tzKSB7CiAgdmFy +IHVzZXJBZ2VudCA9IHR5cGVvZiBuYXZpZ2F0b3IgPT0gIm9iamVjdCIgPyBuYXZpZ2F0b3IudXNlckFn +ZW50IDogIiI7CiAgaWYgKHVzZXJBZ2VudC5pbmRleE9mKCJGaXJlZm94IikgPT0gLTEpIHJldHVybiBo +b29rczsKICB2YXIgZ2V0VGFnID0gaG9va3MuZ2V0VGFnOwogIHZhciBxdWlja01hcCA9IHsKICAgICJC +ZWZvcmVVbmxvYWRFdmVudCI6ICJFdmVudCIsCiAgICAiRGF0YVRyYW5zZmVyIjogIkNsaXBib2FyZCIs +CiAgICAiR2VvR2VvbG9jYXRpb24iOiAiR2VvbG9jYXRpb24iLAogICAgIkxvY2F0aW9uIjogIiFMb2Nh +dGlvbiIsCiAgICAiV29ya2VyTWVzc2FnZUV2ZW50IjogIk1lc3NhZ2VFdmVudCIsCiAgICAiWE1MRG9j +dW1lbnQiOiAiIURvY3VtZW50In07CiAgZnVuY3Rpb24gZ2V0VGFnRmlyZWZveChvKSB7CiAgICB2YXIg +dGFnID0gZ2V0VGFnKG8pOwogICAgcmV0dXJuIHF1aWNrTWFwW3RhZ10gfHwgdGFnOwogIH0KICBob29r +cy5nZXRUYWcgPSBnZXRUYWdGaXJlZm94Owp9CkIueGk9ZnVuY3Rpb24oaG9va3MpIHsKICB2YXIgdXNl +ckFnZW50ID0gdHlwZW9mIG5hdmlnYXRvciA9PSAib2JqZWN0IiA/IG5hdmlnYXRvci51c2VyQWdlbnQg +OiAiIjsKICBpZiAodXNlckFnZW50LmluZGV4T2YoIlRyaWRlbnQvIikgPT0gLTEpIHJldHVybiBob29r +czsKICB2YXIgZ2V0VGFnID0gaG9va3MuZ2V0VGFnOwogIHZhciBxdWlja01hcCA9IHsKICAgICJCZWZv +cmVVbmxvYWRFdmVudCI6ICJFdmVudCIsCiAgICAiRGF0YVRyYW5zZmVyIjogIkNsaXBib2FyZCIsCiAg +ICAiSFRNTERERWxlbWVudCI6ICJIVE1MRWxlbWVudCIsCiAgICAiSFRNTERURWxlbWVudCI6ICJIVE1M +RWxlbWVudCIsCiAgICAiSFRNTFBocmFzZUVsZW1lbnQiOiAiSFRNTEVsZW1lbnQiLAogICAgIlBvc2l0 +aW9uIjogIkdlb3Bvc2l0aW9uIgogIH07CiAgZnVuY3Rpb24gZ2V0VGFnSUUobykgewogICAgdmFyIHRh +ZyA9IGdldFRhZyhvKTsKICAgIHZhciBuZXdUYWcgPSBxdWlja01hcFt0YWddOwogICAgaWYgKG5ld1Rh +ZykgcmV0dXJuIG5ld1RhZzsKICAgIGlmICh0YWcgPT0gIk9iamVjdCIpIHsKICAgICAgaWYgKHdpbmRv +dy5EYXRhVmlldyAmJiAobyBpbnN0YW5jZW9mIHdpbmRvdy5EYXRhVmlldykpIHJldHVybiAiRGF0YVZp +ZXciOwogICAgfQogICAgcmV0dXJuIHRhZzsKICB9CiAgZnVuY3Rpb24gcHJvdG90eXBlRm9yVGFnSUUo +dGFnKSB7CiAgICB2YXIgY29uc3RydWN0b3IgPSB3aW5kb3dbdGFnXTsKICAgIGlmIChjb25zdHJ1Y3Rv +ciA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7CiAg +fQogIGhvb2tzLmdldFRhZyA9IGdldFRhZ0lFOwogIGhvb2tzLnByb3RvdHlwZUZvclRhZyA9IHByb3Rv +dHlwZUZvclRhZ0lFOwp9CkIuaTc9ZnVuY3Rpb24oaG9va3MpIHsgcmV0dXJuIGhvb2tzOyB9CgpCLkN0 +PW5ldyBBLmJ5KCkKQi5FcT1uZXcgQS5rNSgpCkIuenQ9bmV3IEEuSGIoKQpCLnhNPW5ldyBBLnU1KCkK +Qi5Raz1uZXcgQS5FMygpCkIuTnY9bmV3IEEua3IoKQpCLk5VPW5ldyBBLkppKCkKQi5wZD1uZXcgQS5a +ZCgpCkIuQTM9bmV3IEEuTXgobnVsbCkKQi5uWD1uZXcgQS5vaihudWxsKQpCLmFrPUEuUUkocyhbMCww +LDMyNzc2LDMzNzkyLDEsMTAyNDAsMCwwXSksdC50KQpCLmNtPUEuUUkocyhbIio6OmNsYXNzIiwiKjo6 +ZGlyIiwiKjo6ZHJhZ2dhYmxlIiwiKjo6aGlkZGVuIiwiKjo6aWQiLCIqOjppbmVydCIsIio6Oml0ZW1w +cm9wIiwiKjo6aXRlbXJlZiIsIio6Oml0ZW1zY29wZSIsIio6OmxhbmciLCIqOjpzcGVsbGNoZWNrIiwi +Kjo6dGl0bGUiLCIqOjp0cmFuc2xhdGUiLCJBOjphY2Nlc3NrZXkiLCJBOjpjb29yZHMiLCJBOjpocmVm +bGFuZyIsIkE6Om5hbWUiLCJBOjpzaGFwZSIsIkE6OnRhYmluZGV4IiwiQTo6dGFyZ2V0IiwiQTo6dHlw +ZSIsIkFSRUE6OmFjY2Vzc2tleSIsIkFSRUE6OmFsdCIsIkFSRUE6OmNvb3JkcyIsIkFSRUE6Om5vaHJl +ZiIsIkFSRUE6OnNoYXBlIiwiQVJFQTo6dGFiaW5kZXgiLCJBUkVBOjp0YXJnZXQiLCJBVURJTzo6Y29u +dHJvbHMiLCJBVURJTzo6bG9vcCIsIkFVRElPOjptZWRpYWdyb3VwIiwiQVVESU86Om11dGVkIiwiQVVE +SU86OnByZWxvYWQiLCJCRE86OmRpciIsIkJPRFk6OmFsaW5rIiwiQk9EWTo6Ymdjb2xvciIsIkJPRFk6 +OmxpbmsiLCJCT0RZOjp0ZXh0IiwiQk9EWTo6dmxpbmsiLCJCUjo6Y2xlYXIiLCJCVVRUT046OmFjY2Vz +c2tleSIsIkJVVFRPTjo6ZGlzYWJsZWQiLCJCVVRUT046Om5hbWUiLCJCVVRUT046OnRhYmluZGV4Iiwi +QlVUVE9OOjp0eXBlIiwiQlVUVE9OOjp2YWx1ZSIsIkNBTlZBUzo6aGVpZ2h0IiwiQ0FOVkFTOjp3aWR0 +aCIsIkNBUFRJT046OmFsaWduIiwiQ09MOjphbGlnbiIsIkNPTDo6Y2hhciIsIkNPTDo6Y2hhcm9mZiIs +IkNPTDo6c3BhbiIsIkNPTDo6dmFsaWduIiwiQ09MOjp3aWR0aCIsIkNPTEdST1VQOjphbGlnbiIsIkNP +TEdST1VQOjpjaGFyIiwiQ09MR1JPVVA6OmNoYXJvZmYiLCJDT0xHUk9VUDo6c3BhbiIsIkNPTEdST1VQ +Ojp2YWxpZ24iLCJDT0xHUk9VUDo6d2lkdGgiLCJDT01NQU5EOjpjaGVja2VkIiwiQ09NTUFORDo6Y29t +bWFuZCIsIkNPTU1BTkQ6OmRpc2FibGVkIiwiQ09NTUFORDo6bGFiZWwiLCJDT01NQU5EOjpyYWRpb2dy +b3VwIiwiQ09NTUFORDo6dHlwZSIsIkRBVEE6OnZhbHVlIiwiREVMOjpkYXRldGltZSIsIkRFVEFJTFM6 +Om9wZW4iLCJESVI6OmNvbXBhY3QiLCJESVY6OmFsaWduIiwiREw6OmNvbXBhY3QiLCJGSUVMRFNFVDo6 +ZGlzYWJsZWQiLCJGT05UOjpjb2xvciIsIkZPTlQ6OmZhY2UiLCJGT05UOjpzaXplIiwiRk9STTo6YWNj +ZXB0IiwiRk9STTo6YXV0b2NvbXBsZXRlIiwiRk9STTo6ZW5jdHlwZSIsIkZPUk06Om1ldGhvZCIsIkZP +Uk06Om5hbWUiLCJGT1JNOjpub3ZhbGlkYXRlIiwiRk9STTo6dGFyZ2V0IiwiRlJBTUU6Om5hbWUiLCJI +MTo6YWxpZ24iLCJIMjo6YWxpZ24iLCJIMzo6YWxpZ24iLCJINDo6YWxpZ24iLCJINTo6YWxpZ24iLCJI +Njo6YWxpZ24iLCJIUjo6YWxpZ24iLCJIUjo6bm9zaGFkZSIsIkhSOjpzaXplIiwiSFI6OndpZHRoIiwi +SFRNTDo6dmVyc2lvbiIsIklGUkFNRTo6YWxpZ24iLCJJRlJBTUU6OmZyYW1lYm9yZGVyIiwiSUZSQU1F +OjpoZWlnaHQiLCJJRlJBTUU6Om1hcmdpbmhlaWdodCIsIklGUkFNRTo6bWFyZ2lud2lkdGgiLCJJRlJB +TUU6OndpZHRoIiwiSU1HOjphbGlnbiIsIklNRzo6YWx0IiwiSU1HOjpib3JkZXIiLCJJTUc6OmhlaWdo +dCIsIklNRzo6aHNwYWNlIiwiSU1HOjppc21hcCIsIklNRzo6bmFtZSIsIklNRzo6dXNlbWFwIiwiSU1H +Ojp2c3BhY2UiLCJJTUc6OndpZHRoIiwiSU5QVVQ6OmFjY2VwdCIsIklOUFVUOjphY2Nlc3NrZXkiLCJJ +TlBVVDo6YWxpZ24iLCJJTlBVVDo6YWx0IiwiSU5QVVQ6OmF1dG9jb21wbGV0ZSIsIklOUFVUOjphdXRv +Zm9jdXMiLCJJTlBVVDo6Y2hlY2tlZCIsIklOUFVUOjpkaXNhYmxlZCIsIklOUFVUOjppbnB1dG1vZGUi +LCJJTlBVVDo6aXNtYXAiLCJJTlBVVDo6bGlzdCIsIklOUFVUOjptYXgiLCJJTlBVVDo6bWF4bGVuZ3Ro +IiwiSU5QVVQ6Om1pbiIsIklOUFVUOjptdWx0aXBsZSIsIklOUFVUOjpuYW1lIiwiSU5QVVQ6OnBsYWNl +aG9sZGVyIiwiSU5QVVQ6OnJlYWRvbmx5IiwiSU5QVVQ6OnJlcXVpcmVkIiwiSU5QVVQ6OnNpemUiLCJJ +TlBVVDo6c3RlcCIsIklOUFVUOjp0YWJpbmRleCIsIklOUFVUOjp0eXBlIiwiSU5QVVQ6OnVzZW1hcCIs +IklOUFVUOjp2YWx1ZSIsIklOUzo6ZGF0ZXRpbWUiLCJLRVlHRU46OmRpc2FibGVkIiwiS0VZR0VOOjpr +ZXl0eXBlIiwiS0VZR0VOOjpuYW1lIiwiTEFCRUw6OmFjY2Vzc2tleSIsIkxBQkVMOjpmb3IiLCJMRUdF +TkQ6OmFjY2Vzc2tleSIsIkxFR0VORDo6YWxpZ24iLCJMSTo6dHlwZSIsIkxJOjp2YWx1ZSIsIkxJTks6 +OnNpemVzIiwiTUFQOjpuYW1lIiwiTUVOVTo6Y29tcGFjdCIsIk1FTlU6OmxhYmVsIiwiTUVOVTo6dHlw +ZSIsIk1FVEVSOjpoaWdoIiwiTUVURVI6OmxvdyIsIk1FVEVSOjptYXgiLCJNRVRFUjo6bWluIiwiTUVU +RVI6OnZhbHVlIiwiT0JKRUNUOjp0eXBlbXVzdG1hdGNoIiwiT0w6OmNvbXBhY3QiLCJPTDo6cmV2ZXJz +ZWQiLCJPTDo6c3RhcnQiLCJPTDo6dHlwZSIsIk9QVEdST1VQOjpkaXNhYmxlZCIsIk9QVEdST1VQOjps +YWJlbCIsIk9QVElPTjo6ZGlzYWJsZWQiLCJPUFRJT046OmxhYmVsIiwiT1BUSU9OOjpzZWxlY3RlZCIs +Ik9QVElPTjo6dmFsdWUiLCJPVVRQVVQ6OmZvciIsIk9VVFBVVDo6bmFtZSIsIlA6OmFsaWduIiwiUFJF +Ojp3aWR0aCIsIlBST0dSRVNTOjptYXgiLCJQUk9HUkVTUzo6bWluIiwiUFJPR1JFU1M6OnZhbHVlIiwi +U0VMRUNUOjphdXRvY29tcGxldGUiLCJTRUxFQ1Q6OmRpc2FibGVkIiwiU0VMRUNUOjptdWx0aXBsZSIs +IlNFTEVDVDo6bmFtZSIsIlNFTEVDVDo6cmVxdWlyZWQiLCJTRUxFQ1Q6OnNpemUiLCJTRUxFQ1Q6OnRh +YmluZGV4IiwiU09VUkNFOjp0eXBlIiwiVEFCTEU6OmFsaWduIiwiVEFCTEU6OmJnY29sb3IiLCJUQUJM +RTo6Ym9yZGVyIiwiVEFCTEU6OmNlbGxwYWRkaW5nIiwiVEFCTEU6OmNlbGxzcGFjaW5nIiwiVEFCTEU6 +OmZyYW1lIiwiVEFCTEU6OnJ1bGVzIiwiVEFCTEU6OnN1bW1hcnkiLCJUQUJMRTo6d2lkdGgiLCJUQk9E +WTo6YWxpZ24iLCJUQk9EWTo6Y2hhciIsIlRCT0RZOjpjaGFyb2ZmIiwiVEJPRFk6OnZhbGlnbiIsIlRE +OjphYmJyIiwiVEQ6OmFsaWduIiwiVEQ6OmF4aXMiLCJURDo6Ymdjb2xvciIsIlREOjpjaGFyIiwiVEQ6 +OmNoYXJvZmYiLCJURDo6Y29sc3BhbiIsIlREOjpoZWFkZXJzIiwiVEQ6OmhlaWdodCIsIlREOjpub3dy +YXAiLCJURDo6cm93c3BhbiIsIlREOjpzY29wZSIsIlREOjp2YWxpZ24iLCJURDo6d2lkdGgiLCJURVhU +QVJFQTo6YWNjZXNza2V5IiwiVEVYVEFSRUE6OmF1dG9jb21wbGV0ZSIsIlRFWFRBUkVBOjpjb2xzIiwi +VEVYVEFSRUE6OmRpc2FibGVkIiwiVEVYVEFSRUE6OmlucHV0bW9kZSIsIlRFWFRBUkVBOjpuYW1lIiwi +VEVYVEFSRUE6OnBsYWNlaG9sZGVyIiwiVEVYVEFSRUE6OnJlYWRvbmx5IiwiVEVYVEFSRUE6OnJlcXVp +cmVkIiwiVEVYVEFSRUE6OnJvd3MiLCJURVhUQVJFQTo6dGFiaW5kZXgiLCJURVhUQVJFQTo6d3JhcCIs +IlRGT09UOjphbGlnbiIsIlRGT09UOjpjaGFyIiwiVEZPT1Q6OmNoYXJvZmYiLCJURk9PVDo6dmFsaWdu +IiwiVEg6OmFiYnIiLCJUSDo6YWxpZ24iLCJUSDo6YXhpcyIsIlRIOjpiZ2NvbG9yIiwiVEg6OmNoYXIi +LCJUSDo6Y2hhcm9mZiIsIlRIOjpjb2xzcGFuIiwiVEg6OmhlYWRlcnMiLCJUSDo6aGVpZ2h0IiwiVEg6 +Om5vd3JhcCIsIlRIOjpyb3dzcGFuIiwiVEg6OnNjb3BlIiwiVEg6OnZhbGlnbiIsIlRIOjp3aWR0aCIs +IlRIRUFEOjphbGlnbiIsIlRIRUFEOjpjaGFyIiwiVEhFQUQ6OmNoYXJvZmYiLCJUSEVBRDo6dmFsaWdu +IiwiVFI6OmFsaWduIiwiVFI6OmJnY29sb3IiLCJUUjo6Y2hhciIsIlRSOjpjaGFyb2ZmIiwiVFI6OnZh +bGlnbiIsIlRSQUNLOjpkZWZhdWx0IiwiVFJBQ0s6OmtpbmQiLCJUUkFDSzo6bGFiZWwiLCJUUkFDSzo6 +c3JjbGFuZyIsIlVMOjpjb21wYWN0IiwiVUw6OnR5cGUiLCJWSURFTzo6Y29udHJvbHMiLCJWSURFTzo6 +aGVpZ2h0IiwiVklERU86Omxvb3AiLCJWSURFTzo6bWVkaWFncm91cCIsIlZJREVPOjptdXRlZCIsIlZJ +REVPOjpwcmVsb2FkIiwiVklERU86OndpZHRoIl0pLHQucykKQi5WQz1BLlFJKHMoWzAsMCw2NTQ5MCw0 +NTA1NSw2NTUzNSwzNDgxNSw2NTUzNCwxODQzMV0pLHQudCkKQi5tSz1BLlFJKHMoWzAsMCwyNjYyNCwx +MDIzLDY1NTM0LDIwNDcsNjU1MzQsMjA0N10pLHQudCkKQi5jdz1uZXcgQS5HYigwLCJhbHJlYWR5TWln +cmF0ZWQiKQpCLmRjPW5ldyBBLkdiKDEsImluZGV0ZXJtaW5hdGUiKQpCLldEPW5ldyBBLkdiKDIsIm1p +Z3JhdGluZyIpCkIuWGo9bmV3IEEuR2IoMywib3B0aW5nT3V0IikKQi5XRz1BLlFJKHMoW0IuY3csQi5k +YyxCLldELEIuWGpdKSxBLk4wKCJqZDxHYj4iKSkKQi5TcT1BLlFJKHMoWyJIRUFEIiwiQVJFQSIsIkJB +U0UiLCJCQVNFRk9OVCIsIkJSIiwiQ09MIiwiQ09MR1JPVVAiLCJFTUJFRCIsIkZSQU1FIiwiRlJBTUVT +RVQiLCJIUiIsIklNQUdFIiwiSU1HIiwiSU5QVVQiLCJJU0lOREVYIiwiTElOSyIsIk1FVEEiLCJQQVJB +TSIsIlNPVVJDRSIsIlNUWUxFIiwiVElUTEUiLCJXQlIiXSksdC5zKQpCLmRuPUEuUUkocyhbXSksQS5O +MCgiamQ8TEw+IikpCkIueEQ9QS5RSShzKFtdKSx0LnMpCkIuaFU9QS5RSShzKFtdKSx0LmIpCkIuQWQ9 +bmV3IEEuSDcoMCwiYWRkTnVsbGFibGVIaW50IikKQi5uZT1uZXcgQS5INygxLCJhZGROb25OdWxsYWJs +ZUhpbnQiKQpCLm15PW5ldyBBLkg3KDIsImNoYW5nZVRvTnVsbGFibGVIaW50IikKQi5yeD1uZXcgQS5I +NygzLCJjaGFuZ2VUb05vbk51bGxhYmxlSGludCIpCkIud1Y9bmV3IEEuSDcoNCwicmVtb3ZlTnVsbGFi +bGVIaW50IikKQi5mUj1uZXcgQS5INyg1LCJyZW1vdmVOb25OdWxsYWJsZUhpbnQiKQpCLk1tPUEuUUko +cyhbQi5BZCxCLm5lLEIubXksQi5yeCxCLndWLEIuZlJdKSxBLk4wKCJqZDxINz4iKSkKQi50bz1BLlFJ +KHMoWzAsMCwzMjcyMiwxMjI4Nyw2NTUzNCwzNDgxNSw2NTUzNCwxODQzMV0pLHQudCkKQi5GMz1BLlFJ +KHMoWzAsMCwyNDU3NiwxMDIzLDY1NTM0LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpCLmVhPUEuUUko +cyhbMCwwLDMyNzU0LDExMjYzLDY1NTM0LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpCLlpKPUEuUUko +cyhbMCwwLDMyNzIyLDEyMjg3LDY1NTM1LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpCLldkPUEuUUko +cyhbMCwwLDY1NDkwLDEyMjg3LDY1NTM1LDM0ODE1LDY1NTM0LDE4NDMxXSksdC50KQpCLlF4PUEuUUko +cyhbImJpbmQiLCJpZiIsInJlZiIsInJlcGVhdCIsInN5bnRheCJdKSx0LnMpCkIuQkk9QS5RSShzKFsi +QTo6aHJlZiIsIkFSRUE6OmhyZWYiLCJCTE9DS1FVT1RFOjpjaXRlIiwiQk9EWTo6YmFja2dyb3VuZCIs +IkNPTU1BTkQ6Omljb24iLCJERUw6OmNpdGUiLCJGT1JNOjphY3Rpb24iLCJJTUc6OnNyYyIsIklOUFVU +OjpzcmMiLCJJTlM6OmNpdGUiLCJROjpjaXRlIiwiVklERU86OnBvc3RlciJdKSx0LnMpCkIuRHg9bmV3 +IEEuTFAoMCx7fSxCLnhELEEuTjAoIkxQPHFVLHpNPGo4Pj4iKSkKQi5DTT1uZXcgQS5MUCgwLHt9LEIu +eEQsQS5OMCgiTFA8cVUscVU+IikpCkIuaUg9QS5RSShzKFtdKSxBLk4wKCJqZDxHRD4iKSkKQi5XTz1u +ZXcgQS5MUCgwLHt9LEIuaUgsQS5OMCgiTFA8R0QsQD4iKSkKQi5ZMj1uZXcgQS5POSgwLCJkaXJlY3Rv +cnkiKQpCLnJmPW5ldyBBLk85KDEsImZpbGUiKQpCLlRlPW5ldyBBLnd2KCJjYWxsIikKQi5MeT1BLnhx +KCJNaCIpCkIub0U9bmV3IEEuR1koITEpCkIud1E9bmV3IEEuRnkobnVsbCwyKX0pKCk7KGZ1bmN0aW9u +IHN0YXRpY0ZpZWxkcygpeyQuem09bnVsbAokLnh1PW51bGwKJC5pMD1udWxsCiQuQWw9bnVsbAokLk5G +PW51bGwKJC5UWD1udWxsCiQueDc9bnVsbAokLm53PW51bGwKJC52dj1udWxsCiQuQnY9bnVsbAokLlM2 +PW51bGwKJC5rOD1udWxsCiQubWc9bnVsbAokLlVEPSExCiQuWDM9Qi5OVQokLno9QS5RSShbXSxBLk4w +KCJqZDxNaD4iKSkKJC54bz1udWxsCiQuQk89bnVsbAokLmx0PW51bGwKJC5FVT1udWxsCiQub3I9QS5G +bCh0Lk4sdC5ZKQokLklSPW51bGwKJC5JNj1udWxsCiQuRmY9bnVsbH0pKCk7KGZ1bmN0aW9uIGxhenlJ +bml0aWFsaXplcnMoKXt2YXIgcz1odW5rSGVscGVycy5sYXp5RmluYWwscj1odW5rSGVscGVycy5sYXp5 +CnMoJCwiZmEiLCJ3IiwoKT0+QS5ZZygiXyRkYXJ0X2RhcnRDbG9zdXJlIikpCnMoJCwiS3EiLCJTbiIs +KCk9PkEuY00oQS5TNyh7CnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIiRyZWNlaXZlciQifX0pKSkK +cygkLCJZbiIsImxxIiwoKT0+QS5jTShBLlM3KHskbWV0aG9kJDpudWxsLAp0b1N0cmluZzpmdW5jdGlv +bigpe3JldHVybiIkcmVjZWl2ZXIkIn19KSkpCnMoJCwiUjEiLCJOOSIsKCk9PkEuY00oQS5TNyhudWxs +KSkpCnMoJCwiZk4iLCJpSSIsKCk9PkEuY00oZnVuY3Rpb24oKXt2YXIgJGFyZ3VtZW50c0V4cHIkPSIk +YXJndW1lbnRzJCIKdHJ5e251bGwuJG1ldGhvZCQoJGFyZ3VtZW50c0V4cHIkKX1jYXRjaChxKXtyZXR1 +cm4gcS5tZXNzYWdlfX0oKSkpCnMoJCwicWkiLCJVTiIsKCk9PkEuY00oQS5TNyh2b2lkIDApKSkKcygk +LCJwdiIsIlpoIiwoKT0+QS5jTShmdW5jdGlvbigpe3ZhciAkYXJndW1lbnRzRXhwciQ9IiRhcmd1bWVu +dHMkIgp0cnl7KHZvaWQgMCkuJG1ldGhvZCQoJGFyZ3VtZW50c0V4cHIkKX1jYXRjaChxKXtyZXR1cm4g +cS5tZXNzYWdlfX0oKSkpCnMoJCwia3EiLCJyTiIsKCk9PkEuY00oQS5NaihudWxsKSkpCnMoJCwidHQi +LCJjMyIsKCk9PkEuY00oZnVuY3Rpb24oKXt0cnl7bnVsbC4kbWV0aG9kJH1jYXRjaChxKXtyZXR1cm4g +cS5tZXNzYWdlfX0oKSkpCnMoJCwiZHQiLCJISyIsKCk9PkEuY00oQS5Naih2b2lkIDApKSkKcygkLCJB +NyIsInIxIiwoKT0+QS5jTShmdW5jdGlvbigpe3RyeXsodm9pZCAwKS4kbWV0aG9kJH1jYXRjaChxKXty +ZXR1cm4gcS5tZXNzYWdlfX0oKSkpCnMoJCwiV2MiLCJ1dCIsKCk9PkEueGcoKSkKcygkLCJraCIsInJm +IiwoKT0+bmV3IEEueHIoKS4kMCgpKQpzKCQsImRIIiwiSEciLCgpPT5uZXcgQS5OeigpLiQwKCkpCnMo +JCwiaGoiLCJWNyIsKCk9Pm5ldyBJbnQ4QXJyYXkoQS5YRihBLlFJKFstMiwtMiwtMiwtMiwtMiwtMiwt +MiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwt +MiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMSwtMiwtMiwtMiwtMiwtMiw2MiwtMiw2Miwt +Miw2Myw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSwtMiwtMiwtMiwtMSwtMiwtMiwtMiwwLDEs +MiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4LDE5LDIwLDIxLDIyLDIzLDI0 +LDI1LC0yLC0yLC0yLC0yLDYzLC0yLDI2LDI3LDI4LDI5LDMwLDMxLDMyLDMzLDM0LDM1LDM2LDM3LDM4 +LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLC0yLC0yLC0yLC0yLC0yXSx0LnQp +KSkpCnMoJCwiWWUiLCJ3USIsKCk9PnR5cGVvZiBwcm9jZXNzIT0idW5kZWZpbmVkIiYmT2JqZWN0LnBy +b3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpPT0iW29iamVjdCBwcm9jZXNzXSImJnByb2Nlc3Mu +cGxhdGZvcm09PSJ3aW4zMiIpCnMoJCwibWYiLCJ6NCIsKCk9PkEubnUoIl5bXFwtXFwuMC05QS1aX2Et +en5dKiQiKSkKcygkLCJYMCIsInQ4IiwoKT0+QS5DVShCLkx5KSkKcygkLCJPUSIsInZaIiwoKT0+QS51 +eCgpKQpzKCQsIlNDIiwiQU4iLCgpPT5BLnRNKFsiQSIsIkFCQlIiLCJBQ1JPTllNIiwiQUREUkVTUyIs +IkFSRUEiLCJBUlRJQ0xFIiwiQVNJREUiLCJBVURJTyIsIkIiLCJCREkiLCJCRE8iLCJCSUciLCJCTE9D +S1FVT1RFIiwiQlIiLCJCVVRUT04iLCJDQU5WQVMiLCJDQVBUSU9OIiwiQ0VOVEVSIiwiQ0lURSIsIkNP +REUiLCJDT0wiLCJDT0xHUk9VUCIsIkNPTU1BTkQiLCJEQVRBIiwiREFUQUxJU1QiLCJERCIsIkRFTCIs +IkRFVEFJTFMiLCJERk4iLCJESVIiLCJESVYiLCJETCIsIkRUIiwiRU0iLCJGSUVMRFNFVCIsIkZJR0NB +UFRJT04iLCJGSUdVUkUiLCJGT05UIiwiRk9PVEVSIiwiRk9STSIsIkgxIiwiSDIiLCJIMyIsIkg0Iiwi +SDUiLCJINiIsIkhFQURFUiIsIkhHUk9VUCIsIkhSIiwiSSIsIklGUkFNRSIsIklNRyIsIklOUFVUIiwi +SU5TIiwiS0JEIiwiTEFCRUwiLCJMRUdFTkQiLCJMSSIsIk1BUCIsIk1BUksiLCJNRU5VIiwiTUVURVIi +LCJOQVYiLCJOT0JSIiwiT0wiLCJPUFRHUk9VUCIsIk9QVElPTiIsIk9VVFBVVCIsIlAiLCJQUkUiLCJQ +Uk9HUkVTUyIsIlEiLCJTIiwiU0FNUCIsIlNFQ1RJT04iLCJTRUxFQ1QiLCJTTUFMTCIsIlNPVVJDRSIs +IlNQQU4iLCJTVFJJS0UiLCJTVFJPTkciLCJTVUIiLCJTVU1NQVJZIiwiU1VQIiwiVEFCTEUiLCJUQk9E +WSIsIlREIiwiVEVYVEFSRUEiLCJURk9PVCIsIlRIIiwiVEhFQUQiLCJUSU1FIiwiVFIiLCJUUkFDSyIs +IlRUIiwiVSIsIlVMIiwiVkFSIiwiVklERU8iLCJXQlIiXSx0Lk4pKQpzKCQsIlg0IiwiaEciLCgpPT5B +Lm51KCJeXFxTKyQiKSkKcygkLCJ3TyIsIm93IiwoKT0+QS5ORChzZWxmKSkKcygkLCJrdCIsIlI4Iiwo +KT0+QS5ZZygiXyRkYXJ0X2RhcnRPYmplY3QiKSkKcygkLCJmSyIsImtJIiwoKT0+ZnVuY3Rpb24gRGFy +dE9iamVjdChhKXt0aGlzLm89YX0pCnMoJCwicXQiLCJ6QiIsKCk9Pm5ldyBBLm1RKCkpCnMoJCwiQ2si +LCJVRSIsKCk9PkEuaEsoQi5vbC5nbVcoQS54MygpKS5ocmVmKS5naFkoKS5xKDAsImF1dGhUb2tlbiIp +KQpzKCQsImhUIiwieVAiLCgpPT5BLlpyKCkucXVlcnlTZWxlY3RvcigiLmVkaXQtbGlzdCAucGFuZWwt +Y29udGVudCIpKQpzKCQsImFVIiwiRFoiLCgpPT5BLlpyKCkucXVlcnlTZWxlY3RvcigiLmVkaXQtbGlz +dCAucGFuZWwtaGVhZGluZyIpKQpzKCQsIlc2IiwiaEwiLCgpPT5BLlpyKCkucXVlcnlTZWxlY3Rvcigi +LmVkaXQtcGFuZWwgLnBhbmVsLWNvbnRlbnQiKSkKcygkLCJUUiIsIkRXIiwoKT0+QS5acigpLnF1ZXJ5 +U2VsZWN0b3IoImZvb3RlciIpKQpzKCQsIkVZIiwiZmkiLCgpPT5BLlpyKCkucXVlcnlTZWxlY3Rvcigi +aGVhZGVyIikpCnMoJCwiYkEiLCJjMCIsKCk9PkEuWnIoKS5xdWVyeVNlbGVjdG9yKCIjbWlncmF0ZS11 +bml0LXN0YXR1cy1pY29uIikpCnMoJCwidDAiLCJiTiIsKCk9PkEuWnIoKS5xdWVyeVNlbGVjdG9yKCIj +bWlncmF0ZS11bml0LXN0YXR1cy1pY29uLWxhYmVsIikpCnMoJCwiYXYiLCJEOSIsKCk9PkEuWnIoKS5x +dWVyeVNlbGVjdG9yKCIjdW5pdC1uYW1lIikpCnIoJCwiZmUiLCJLRyIsKCk9Pm5ldyBBLlhBKCkpCnMo +JCwiZW8iLCJuVSIsKCk9Pm5ldyBBLmxJKEEuTjAoImZ2IikuYSgkLkhrKCkpKSkKcygkLCJ5ciIsImJE +IiwoKT0+bmV3IEEuT0YoQS5udSgiLyIpLEEubnUoIlteL10kIiksQS5udSgiXi8iKSkpCnMoJCwiTWsi +LCJLayIsKCk9Pm5ldyBBLklWKEEubnUoIlsvXFxcXF0iKSxBLm51KCJbXi9cXFxcXSQiKSxBLm51KCJe +KFxcXFxcXFxcW15cXFxcXStcXFxcW15cXFxcL10rfFthLXpBLVpdOlsvXFxcXF0pIiksQS5udSgiXlsv +XFxcXF0oPyFbL1xcXFxdKSIpKSkKcygkLCJhayIsIkViIiwoKT0+bmV3IEEucnUoQS5udSgiLyIpLEEu +bnUoIiheW2EtekEtWl1bLSsuYS16QS1aXFxkXSo6Ly98W14vXSkkIiksQS5udSgiW2EtekEtWl1bLSsu +YS16QS1aXFxkXSo6Ly9bXi9dKiIpLEEubnUoIl4vIikpKQpzKCQsImxzIiwiSGsiLCgpPT5BLlJoKCkp +fSkoKTsoZnVuY3Rpb24gbmF0aXZlU3VwcG9ydCgpeyFmdW5jdGlvbigpe3ZhciBzPWZ1bmN0aW9uKGEp +e3ZhciBtPXt9Cm1bYV09MQpyZXR1cm4gT2JqZWN0LmtleXMoaHVua0hlbHBlcnMuY29udmVydFRvRmFz +dE9iamVjdChtKSlbMF19CnYuZ2V0SXNvbGF0ZVRhZz1mdW5jdGlvbihhKXtyZXR1cm4gcygiX19fZGFy +dF8iK2Erdi5pc29sYXRlVGFnKX0KdmFyIHI9Il9fX2RhcnRfaXNvbGF0ZV90YWdzXyIKdmFyIHE9T2Jq +ZWN0W3JdfHwoT2JqZWN0W3JdPU9iamVjdC5jcmVhdGUobnVsbCkpCnZhciBwPSJfWnhZeFgiCmZvcih2 +YXIgbz0wOztvKyspe3ZhciBuPXMocCsiXyIrbysiXyIpCmlmKCEobiBpbiBxKSl7cVtuXT0xCnYuaXNv +bGF0ZVRhZz1uCmJyZWFrfX12LmRpc3BhdGNoUHJvcGVydHlOYW1lPXYuZ2V0SXNvbGF0ZVRhZygiZGlz +cGF0Y2hfcmVjb3JkIil9KCkKaHVua0hlbHBlcnMuc2V0T3JVcGRhdGVJbnRlcmNlcHRvcnNCeVRhZyh7 +RE9NRXJyb3I6Si5NRixNZWRpYUVycm9yOkouTUYsTmF2aWdhdG9yOkouTUYsTmF2aWdhdG9yQ29uY3Vy +cmVudEhhcmR3YXJlOkouTUYsTmF2aWdhdG9yVXNlck1lZGlhRXJyb3I6Si5NRixPdmVyY29uc3RyYWlu +ZWRFcnJvcjpKLk1GLFBvc2l0aW9uRXJyb3I6Si5NRixHZW9sb2NhdGlvblBvc2l0aW9uRXJyb3I6Si5N +RixSYW5nZTpKLk1GLERhdGFWaWV3OkEuRVQsQXJyYXlCdWZmZXJWaWV3OkEuRVQsRmxvYXQzMkFycmF5 +OkEuRGcsRmxvYXQ2NEFycmF5OkEuRGcsSW50MTZBcnJheTpBLnhqLEludDMyQXJyYXk6QS5kRSxJbnQ4 +QXJyYXk6QS5aQSxVaW50MTZBcnJheTpBLmRULFVpbnQzMkFycmF5OkEuUHEsVWludDhDbGFtcGVkQXJy +YXk6QS5lRSxDYW52YXNQaXhlbEFycmF5OkEuZUUsVWludDhBcnJheTpBLlY2LEhUTUxBdWRpb0VsZW1l +bnQ6QS5xRSxIVE1MQlJFbGVtZW50OkEucUUsSFRNTEJ1dHRvbkVsZW1lbnQ6QS5xRSxIVE1MQ2FudmFz +RWxlbWVudDpBLnFFLEhUTUxDb250ZW50RWxlbWVudDpBLnFFLEhUTUxETGlzdEVsZW1lbnQ6QS5xRSxI +VE1MRGF0YUVsZW1lbnQ6QS5xRSxIVE1MRGF0YUxpc3RFbGVtZW50OkEucUUsSFRNTERldGFpbHNFbGVt +ZW50OkEucUUsSFRNTERpYWxvZ0VsZW1lbnQ6QS5xRSxIVE1MRGl2RWxlbWVudDpBLnFFLEhUTUxFbWJl +ZEVsZW1lbnQ6QS5xRSxIVE1MRmllbGRTZXRFbGVtZW50OkEucUUsSFRNTEhSRWxlbWVudDpBLnFFLEhU +TUxIZWFkRWxlbWVudDpBLnFFLEhUTUxIZWFkaW5nRWxlbWVudDpBLnFFLEhUTUxIdG1sRWxlbWVudDpB +LnFFLEhUTUxJRnJhbWVFbGVtZW50OkEucUUsSFRNTEltYWdlRWxlbWVudDpBLnFFLEhUTUxJbnB1dEVs +ZW1lbnQ6QS5xRSxIVE1MTElFbGVtZW50OkEucUUsSFRNTExhYmVsRWxlbWVudDpBLnFFLEhUTUxMZWdl +bmRFbGVtZW50OkEucUUsSFRNTExpbmtFbGVtZW50OkEucUUsSFRNTE1hcEVsZW1lbnQ6QS5xRSxIVE1M +TWVkaWFFbGVtZW50OkEucUUsSFRNTE1lbnVFbGVtZW50OkEucUUsSFRNTE1ldGFFbGVtZW50OkEucUUs +SFRNTE1ldGVyRWxlbWVudDpBLnFFLEhUTUxNb2RFbGVtZW50OkEucUUsSFRNTE9MaXN0RWxlbWVudDpB +LnFFLEhUTUxPYmplY3RFbGVtZW50OkEucUUsSFRNTE9wdEdyb3VwRWxlbWVudDpBLnFFLEhUTUxPcHRp +b25FbGVtZW50OkEucUUsSFRNTE91dHB1dEVsZW1lbnQ6QS5xRSxIVE1MUGFyYW1FbGVtZW50OkEucUUs +SFRNTFBpY3R1cmVFbGVtZW50OkEucUUsSFRNTFByZUVsZW1lbnQ6QS5xRSxIVE1MUHJvZ3Jlc3NFbGVt +ZW50OkEucUUsSFRNTFF1b3RlRWxlbWVudDpBLnFFLEhUTUxTY3JpcHRFbGVtZW50OkEucUUsSFRNTFNo +YWRvd0VsZW1lbnQ6QS5xRSxIVE1MU2xvdEVsZW1lbnQ6QS5xRSxIVE1MU291cmNlRWxlbWVudDpBLnFF +LEhUTUxTcGFuRWxlbWVudDpBLnFFLEhUTUxTdHlsZUVsZW1lbnQ6QS5xRSxIVE1MVGFibGVDYXB0aW9u +RWxlbWVudDpBLnFFLEhUTUxUYWJsZUNlbGxFbGVtZW50OkEucUUsSFRNTFRhYmxlRGF0YUNlbGxFbGVt +ZW50OkEucUUsSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ6QS5xRSxIVE1MVGFibGVDb2xFbGVtZW50 +OkEucUUsSFRNTFRleHRBcmVhRWxlbWVudDpBLnFFLEhUTUxUaW1lRWxlbWVudDpBLnFFLEhUTUxUaXRs +ZUVsZW1lbnQ6QS5xRSxIVE1MVHJhY2tFbGVtZW50OkEucUUsSFRNTFVMaXN0RWxlbWVudDpBLnFFLEhU +TUxVbmtub3duRWxlbWVudDpBLnFFLEhUTUxWaWRlb0VsZW1lbnQ6QS5xRSxIVE1MRGlyZWN0b3J5RWxl +bWVudDpBLnFFLEhUTUxGb250RWxlbWVudDpBLnFFLEhUTUxGcmFtZUVsZW1lbnQ6QS5xRSxIVE1MRnJh +bWVTZXRFbGVtZW50OkEucUUsSFRNTE1hcnF1ZWVFbGVtZW50OkEucUUsSFRNTEVsZW1lbnQ6QS5xRSxI +VE1MQW5jaG9yRWxlbWVudDpBLkdoLEhUTUxBcmVhRWxlbWVudDpBLmZZLEhUTUxCYXNlRWxlbWVudDpB +LnJaLEJsb2I6QS5BeixIVE1MQm9keUVsZW1lbnQ6QS5RUCxDREFUQVNlY3Rpb246QS5ueCxDaGFyYWN0 +ZXJEYXRhOkEubngsQ29tbWVudDpBLm54LFByb2Nlc3NpbmdJbnN0cnVjdGlvbjpBLm54LFRleHQ6QS5u +eCxDU1NTdHlsZURlY2xhcmF0aW9uOkEub0osTVNTdHlsZUNTU1Byb3BlcnRpZXM6QS5vSixDU1MyUHJv +cGVydGllczpBLm9KLFhNTERvY3VtZW50OkEuUUYsRG9jdW1lbnQ6QS5RRixET01FeGNlcHRpb246QS5O +aCxET01JbXBsZW1lbnRhdGlvbjpBLmFlLERPTVJlY3RSZWFkT25seTpBLklCLERPTVRva2VuTGlzdDpB +Lm43LE1hdGhNTEVsZW1lbnQ6QS5jdixFbGVtZW50OkEuY3YsQWJvcnRQYXltZW50RXZlbnQ6QS5lYSxB +bmltYXRpb25FdmVudDpBLmVhLEFuaW1hdGlvblBsYXliYWNrRXZlbnQ6QS5lYSxBcHBsaWNhdGlvbkNh +Y2hlRXJyb3JFdmVudDpBLmVhLEJhY2tncm91bmRGZXRjaENsaWNrRXZlbnQ6QS5lYSxCYWNrZ3JvdW5k +RmV0Y2hFdmVudDpBLmVhLEJhY2tncm91bmRGZXRjaEZhaWxFdmVudDpBLmVhLEJhY2tncm91bmRGZXRj +aGVkRXZlbnQ6QS5lYSxCZWZvcmVJbnN0YWxsUHJvbXB0RXZlbnQ6QS5lYSxCZWZvcmVVbmxvYWRFdmVu +dDpBLmVhLEJsb2JFdmVudDpBLmVhLENhbk1ha2VQYXltZW50RXZlbnQ6QS5lYSxDbGlwYm9hcmRFdmVu +dDpBLmVhLENsb3NlRXZlbnQ6QS5lYSxDdXN0b21FdmVudDpBLmVhLERldmljZU1vdGlvbkV2ZW50OkEu +ZWEsRGV2aWNlT3JpZW50YXRpb25FdmVudDpBLmVhLEVycm9yRXZlbnQ6QS5lYSxFeHRlbmRhYmxlRXZl +bnQ6QS5lYSxFeHRlbmRhYmxlTWVzc2FnZUV2ZW50OkEuZWEsRmV0Y2hFdmVudDpBLmVhLEZvbnRGYWNl +U2V0TG9hZEV2ZW50OkEuZWEsRm9yZWlnbkZldGNoRXZlbnQ6QS5lYSxHYW1lcGFkRXZlbnQ6QS5lYSxI +YXNoQ2hhbmdlRXZlbnQ6QS5lYSxJbnN0YWxsRXZlbnQ6QS5lYSxNZWRpYUVuY3J5cHRlZEV2ZW50OkEu +ZWEsTWVkaWFLZXlNZXNzYWdlRXZlbnQ6QS5lYSxNZWRpYVF1ZXJ5TGlzdEV2ZW50OkEuZWEsTWVkaWFT +dHJlYW1FdmVudDpBLmVhLE1lZGlhU3RyZWFtVHJhY2tFdmVudDpBLmVhLE1lc3NhZ2VFdmVudDpBLmVh +LE1JRElDb25uZWN0aW9uRXZlbnQ6QS5lYSxNSURJTWVzc2FnZUV2ZW50OkEuZWEsTXV0YXRpb25FdmVu +dDpBLmVhLE5vdGlmaWNhdGlvbkV2ZW50OkEuZWEsUGFnZVRyYW5zaXRpb25FdmVudDpBLmVhLFBheW1l +bnRSZXF1ZXN0RXZlbnQ6QS5lYSxQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50OkEuZWEsUG9wU3RhdGVF +dmVudDpBLmVhLFByZXNlbnRhdGlvbkNvbm5lY3Rpb25BdmFpbGFibGVFdmVudDpBLmVhLFByZXNlbnRh +dGlvbkNvbm5lY3Rpb25DbG9zZUV2ZW50OkEuZWEsUHJvbWlzZVJlamVjdGlvbkV2ZW50OkEuZWEsUHVz +aEV2ZW50OkEuZWEsUlRDRGF0YUNoYW5uZWxFdmVudDpBLmVhLFJUQ0RUTUZUb25lQ2hhbmdlRXZlbnQ6 +QS5lYSxSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50OkEuZWEsUlRDVHJhY2tFdmVudDpBLmVhLFNlY3Vy +aXR5UG9saWN5VmlvbGF0aW9uRXZlbnQ6QS5lYSxTZW5zb3JFcnJvckV2ZW50OkEuZWEsU3BlZWNoUmVj +b2duaXRpb25FcnJvcjpBLmVhLFNwZWVjaFJlY29nbml0aW9uRXZlbnQ6QS5lYSxTcGVlY2hTeW50aGVz +aXNFdmVudDpBLmVhLFN0b3JhZ2VFdmVudDpBLmVhLFN5bmNFdmVudDpBLmVhLFRyYWNrRXZlbnQ6QS5l +YSxUcmFuc2l0aW9uRXZlbnQ6QS5lYSxXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6QS5lYSxWUkRldmljZUV2 +ZW50OkEuZWEsVlJEaXNwbGF5RXZlbnQ6QS5lYSxWUlNlc3Npb25FdmVudDpBLmVhLE1vam9JbnRlcmZh +Y2VSZXF1ZXN0RXZlbnQ6QS5lYSxVU0JDb25uZWN0aW9uRXZlbnQ6QS5lYSxJREJWZXJzaW9uQ2hhbmdl +RXZlbnQ6QS5lYSxBdWRpb1Byb2Nlc3NpbmdFdmVudDpBLmVhLE9mZmxpbmVBdWRpb0NvbXBsZXRpb25F +dmVudDpBLmVhLFdlYkdMQ29udGV4dEV2ZW50OkEuZWEsRXZlbnQ6QS5lYSxJbnB1dEV2ZW50OkEuZWEs +U3VibWl0RXZlbnQ6QS5lYSxFdmVudFRhcmdldDpBLkQwLEZpbGU6QS5oSCxIVE1MRm9ybUVsZW1lbnQ6 +QS5oNCxIaXN0b3J5OkEuYnIsSFRNTERvY3VtZW50OkEuVmIsWE1MSHR0cFJlcXVlc3Q6QS5mSixYTUxI +dHRwUmVxdWVzdEV2ZW50VGFyZ2V0OkEud2EsSW1hZ2VEYXRhOkEuU2csTG9jYXRpb246QS51OCxNb3Vz +ZUV2ZW50OkEuQWosRHJhZ0V2ZW50OkEuQWosUG9pbnRlckV2ZW50OkEuQWosV2hlZWxFdmVudDpBLkFq +LERvY3VtZW50RnJhZ21lbnQ6QS5LVixTaGFkb3dSb290OkEuS1YsRG9jdW1lbnRUeXBlOkEuS1YsTm9k +ZTpBLktWLE5vZGVMaXN0OkEuQkgsUmFkaW9Ob2RlTGlzdDpBLkJILEhUTUxQYXJhZ3JhcGhFbGVtZW50 +OkEuU04sUHJvZ3Jlc3NFdmVudDpBLndWLFJlc291cmNlUHJvZ3Jlc3NFdmVudDpBLndWLEhUTUxTZWxl +Y3RFbGVtZW50OkEubHAsSFRNTFRhYmxlRWxlbWVudDpBLlRiLEhUTUxUYWJsZVJvd0VsZW1lbnQ6QS5J +dixIVE1MVGFibGVTZWN0aW9uRWxlbWVudDpBLldQLEhUTUxUZW1wbGF0ZUVsZW1lbnQ6QS55WSxDb21w +b3NpdGlvbkV2ZW50OkEudzYsRm9jdXNFdmVudDpBLnc2LEtleWJvYXJkRXZlbnQ6QS53NixUZXh0RXZl +bnQ6QS53NixUb3VjaEV2ZW50OkEudzYsVUlFdmVudDpBLnc2LFdpbmRvdzpBLks1LERPTVdpbmRvdzpB +Lks1LERlZGljYXRlZFdvcmtlckdsb2JhbFNjb3BlOkEuQ20sU2VydmljZVdvcmtlckdsb2JhbFNjb3Bl +OkEuQ20sU2hhcmVkV29ya2VyR2xvYmFsU2NvcGU6QS5DbSxXb3JrZXJHbG9iYWxTY29wZTpBLkNtLEF0 +dHI6QS5DUSxDbGllbnRSZWN0OkEudzQsRE9NUmVjdDpBLnc0LE5hbWVkTm9kZU1hcDpBLnJoLE1vek5h +bWVkQXR0ck1hcDpBLnJoLElEQktleVJhbmdlOkEuaEYsU1ZHU2NyaXB0RWxlbWVudDpBLm5kLFNWR0FF +bGVtZW50OkEuaGksU1ZHQW5pbWF0ZUVsZW1lbnQ6QS5oaSxTVkdBbmltYXRlTW90aW9uRWxlbWVudDpB +LmhpLFNWR0FuaW1hdGVUcmFuc2Zvcm1FbGVtZW50OkEuaGksU1ZHQW5pbWF0aW9uRWxlbWVudDpBLmhp +LFNWR0NpcmNsZUVsZW1lbnQ6QS5oaSxTVkdDbGlwUGF0aEVsZW1lbnQ6QS5oaSxTVkdEZWZzRWxlbWVu +dDpBLmhpLFNWR0Rlc2NFbGVtZW50OkEuaGksU1ZHRGlzY2FyZEVsZW1lbnQ6QS5oaSxTVkdFbGxpcHNl +RWxlbWVudDpBLmhpLFNWR0ZFQmxlbmRFbGVtZW50OkEuaGksU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6 +QS5oaSxTVkdGRUNvbXBvbmVudFRyYW5zZmVyRWxlbWVudDpBLmhpLFNWR0ZFQ29tcG9zaXRlRWxlbWVu +dDpBLmhpLFNWR0ZFQ29udm9sdmVNYXRyaXhFbGVtZW50OkEuaGksU1ZHRkVEaWZmdXNlTGlnaHRpbmdF +bGVtZW50OkEuaGksU1ZHRkVEaXNwbGFjZW1lbnRNYXBFbGVtZW50OkEuaGksU1ZHRkVEaXN0YW50TGln +aHRFbGVtZW50OkEuaGksU1ZHRkVGbG9vZEVsZW1lbnQ6QS5oaSxTVkdGRUZ1bmNBRWxlbWVudDpBLmhp +LFNWR0ZFRnVuY0JFbGVtZW50OkEuaGksU1ZHRkVGdW5jR0VsZW1lbnQ6QS5oaSxTVkdGRUZ1bmNSRWxl +bWVudDpBLmhpLFNWR0ZFR2F1c3NpYW5CbHVyRWxlbWVudDpBLmhpLFNWR0ZFSW1hZ2VFbGVtZW50OkEu +aGksU1ZHRkVNZXJnZUVsZW1lbnQ6QS5oaSxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6QS5oaSxTVkdGRU1v +cnBob2xvZ3lFbGVtZW50OkEuaGksU1ZHRkVPZmZzZXRFbGVtZW50OkEuaGksU1ZHRkVQb2ludExpZ2h0 +RWxlbWVudDpBLmhpLFNWR0ZFU3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6QS5oaSxTVkdGRVNwb3RMaWdo +dEVsZW1lbnQ6QS5oaSxTVkdGRVRpbGVFbGVtZW50OkEuaGksU1ZHRkVUdXJidWxlbmNlRWxlbWVudDpB +LmhpLFNWR0ZpbHRlckVsZW1lbnQ6QS5oaSxTVkdGb3JlaWduT2JqZWN0RWxlbWVudDpBLmhpLFNWR0dF +bGVtZW50OkEuaGksU1ZHR2VvbWV0cnlFbGVtZW50OkEuaGksU1ZHR3JhcGhpY3NFbGVtZW50OkEuaGks +U1ZHSW1hZ2VFbGVtZW50OkEuaGksU1ZHTGluZUVsZW1lbnQ6QS5oaSxTVkdMaW5lYXJHcmFkaWVudEVs +ZW1lbnQ6QS5oaSxTVkdNYXJrZXJFbGVtZW50OkEuaGksU1ZHTWFza0VsZW1lbnQ6QS5oaSxTVkdNZXRh +ZGF0YUVsZW1lbnQ6QS5oaSxTVkdQYXRoRWxlbWVudDpBLmhpLFNWR1BhdHRlcm5FbGVtZW50OkEuaGks +U1ZHUG9seWdvbkVsZW1lbnQ6QS5oaSxTVkdQb2x5bGluZUVsZW1lbnQ6QS5oaSxTVkdSYWRpYWxHcmFk +aWVudEVsZW1lbnQ6QS5oaSxTVkdSZWN0RWxlbWVudDpBLmhpLFNWR1NldEVsZW1lbnQ6QS5oaSxTVkdT +dG9wRWxlbWVudDpBLmhpLFNWR1N0eWxlRWxlbWVudDpBLmhpLFNWR1NWR0VsZW1lbnQ6QS5oaSxTVkdT +d2l0Y2hFbGVtZW50OkEuaGksU1ZHU3ltYm9sRWxlbWVudDpBLmhpLFNWR1RTcGFuRWxlbWVudDpBLmhp +LFNWR1RleHRDb250ZW50RWxlbWVudDpBLmhpLFNWR1RleHRFbGVtZW50OkEuaGksU1ZHVGV4dFBhdGhF +bGVtZW50OkEuaGksU1ZHVGV4dFBvc2l0aW9uaW5nRWxlbWVudDpBLmhpLFNWR1RpdGxlRWxlbWVudDpB +LmhpLFNWR1VzZUVsZW1lbnQ6QS5oaSxTVkdWaWV3RWxlbWVudDpBLmhpLFNWR0dyYWRpZW50RWxlbWVu +dDpBLmhpLFNWR0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OkEuaGksU1ZHRkVEcm9wU2hh +ZG93RWxlbWVudDpBLmhpLFNWR01QYXRoRWxlbWVudDpBLmhpLFNWR0VsZW1lbnQ6QS5oaX0pCmh1bmtI +ZWxwZXJzLnNldE9yVXBkYXRlTGVhZlRhZ3Moe0RPTUVycm9yOnRydWUsTWVkaWFFcnJvcjp0cnVlLE5h +dmlnYXRvcjp0cnVlLE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZTp0cnVlLE5hdmlnYXRvclVzZXJN +ZWRpYUVycm9yOnRydWUsT3ZlcmNvbnN0cmFpbmVkRXJyb3I6dHJ1ZSxQb3NpdGlvbkVycm9yOnRydWUs +R2VvbG9jYXRpb25Qb3NpdGlvbkVycm9yOnRydWUsUmFuZ2U6dHJ1ZSxEYXRhVmlldzp0cnVlLEFycmF5 +QnVmZmVyVmlldzpmYWxzZSxGbG9hdDMyQXJyYXk6dHJ1ZSxGbG9hdDY0QXJyYXk6dHJ1ZSxJbnQxNkFy +cmF5OnRydWUsSW50MzJBcnJheTp0cnVlLEludDhBcnJheTp0cnVlLFVpbnQxNkFycmF5OnRydWUsVWlu +dDMyQXJyYXk6dHJ1ZSxVaW50OENsYW1wZWRBcnJheTp0cnVlLENhbnZhc1BpeGVsQXJyYXk6dHJ1ZSxV +aW50OEFycmF5OmZhbHNlLEhUTUxBdWRpb0VsZW1lbnQ6dHJ1ZSxIVE1MQlJFbGVtZW50OnRydWUsSFRN +TEJ1dHRvbkVsZW1lbnQ6dHJ1ZSxIVE1MQ2FudmFzRWxlbWVudDp0cnVlLEhUTUxDb250ZW50RWxlbWVu +dDp0cnVlLEhUTUxETGlzdEVsZW1lbnQ6dHJ1ZSxIVE1MRGF0YUVsZW1lbnQ6dHJ1ZSxIVE1MRGF0YUxp +c3RFbGVtZW50OnRydWUsSFRNTERldGFpbHNFbGVtZW50OnRydWUsSFRNTERpYWxvZ0VsZW1lbnQ6dHJ1 +ZSxIVE1MRGl2RWxlbWVudDp0cnVlLEhUTUxFbWJlZEVsZW1lbnQ6dHJ1ZSxIVE1MRmllbGRTZXRFbGVt +ZW50OnRydWUsSFRNTEhSRWxlbWVudDp0cnVlLEhUTUxIZWFkRWxlbWVudDp0cnVlLEhUTUxIZWFkaW5n +RWxlbWVudDp0cnVlLEhUTUxIdG1sRWxlbWVudDp0cnVlLEhUTUxJRnJhbWVFbGVtZW50OnRydWUsSFRN +TEltYWdlRWxlbWVudDp0cnVlLEhUTUxJbnB1dEVsZW1lbnQ6dHJ1ZSxIVE1MTElFbGVtZW50OnRydWUs +SFRNTExhYmVsRWxlbWVudDp0cnVlLEhUTUxMZWdlbmRFbGVtZW50OnRydWUsSFRNTExpbmtFbGVtZW50 +OnRydWUsSFRNTE1hcEVsZW1lbnQ6dHJ1ZSxIVE1MTWVkaWFFbGVtZW50OnRydWUsSFRNTE1lbnVFbGVt +ZW50OnRydWUsSFRNTE1ldGFFbGVtZW50OnRydWUsSFRNTE1ldGVyRWxlbWVudDp0cnVlLEhUTUxNb2RF +bGVtZW50OnRydWUsSFRNTE9MaXN0RWxlbWVudDp0cnVlLEhUTUxPYmplY3RFbGVtZW50OnRydWUsSFRN +TE9wdEdyb3VwRWxlbWVudDp0cnVlLEhUTUxPcHRpb25FbGVtZW50OnRydWUsSFRNTE91dHB1dEVsZW1l +bnQ6dHJ1ZSxIVE1MUGFyYW1FbGVtZW50OnRydWUsSFRNTFBpY3R1cmVFbGVtZW50OnRydWUsSFRNTFBy +ZUVsZW1lbnQ6dHJ1ZSxIVE1MUHJvZ3Jlc3NFbGVtZW50OnRydWUsSFRNTFF1b3RlRWxlbWVudDp0cnVl +LEhUTUxTY3JpcHRFbGVtZW50OnRydWUsSFRNTFNoYWRvd0VsZW1lbnQ6dHJ1ZSxIVE1MU2xvdEVsZW1l +bnQ6dHJ1ZSxIVE1MU291cmNlRWxlbWVudDp0cnVlLEhUTUxTcGFuRWxlbWVudDp0cnVlLEhUTUxTdHls +ZUVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVDYXB0aW9uRWxlbWVudDp0cnVlLEhUTUxUYWJsZUNlbGxFbGVt +ZW50OnRydWUsSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50OnRydWUsSFRNTFRhYmxlSGVhZGVyQ2VsbEVs +ZW1lbnQ6dHJ1ZSxIVE1MVGFibGVDb2xFbGVtZW50OnRydWUsSFRNTFRleHRBcmVhRWxlbWVudDp0cnVl +LEhUTUxUaW1lRWxlbWVudDp0cnVlLEhUTUxUaXRsZUVsZW1lbnQ6dHJ1ZSxIVE1MVHJhY2tFbGVtZW50 +OnRydWUsSFRNTFVMaXN0RWxlbWVudDp0cnVlLEhUTUxVbmtub3duRWxlbWVudDp0cnVlLEhUTUxWaWRl +b0VsZW1lbnQ6dHJ1ZSxIVE1MRGlyZWN0b3J5RWxlbWVudDp0cnVlLEhUTUxGb250RWxlbWVudDp0cnVl +LEhUTUxGcmFtZUVsZW1lbnQ6dHJ1ZSxIVE1MRnJhbWVTZXRFbGVtZW50OnRydWUsSFRNTE1hcnF1ZWVF +bGVtZW50OnRydWUsSFRNTEVsZW1lbnQ6ZmFsc2UsSFRNTEFuY2hvckVsZW1lbnQ6dHJ1ZSxIVE1MQXJl +YUVsZW1lbnQ6dHJ1ZSxIVE1MQmFzZUVsZW1lbnQ6dHJ1ZSxCbG9iOmZhbHNlLEhUTUxCb2R5RWxlbWVu +dDp0cnVlLENEQVRBU2VjdGlvbjp0cnVlLENoYXJhY3RlckRhdGE6dHJ1ZSxDb21tZW50OnRydWUsUHJv +Y2Vzc2luZ0luc3RydWN0aW9uOnRydWUsVGV4dDp0cnVlLENTU1N0eWxlRGVjbGFyYXRpb246dHJ1ZSxN +U1N0eWxlQ1NTUHJvcGVydGllczp0cnVlLENTUzJQcm9wZXJ0aWVzOnRydWUsWE1MRG9jdW1lbnQ6dHJ1 +ZSxEb2N1bWVudDpmYWxzZSxET01FeGNlcHRpb246dHJ1ZSxET01JbXBsZW1lbnRhdGlvbjp0cnVlLERP +TVJlY3RSZWFkT25seTpmYWxzZSxET01Ub2tlbkxpc3Q6dHJ1ZSxNYXRoTUxFbGVtZW50OnRydWUsRWxl +bWVudDpmYWxzZSxBYm9ydFBheW1lbnRFdmVudDp0cnVlLEFuaW1hdGlvbkV2ZW50OnRydWUsQW5pbWF0 +aW9uUGxheWJhY2tFdmVudDp0cnVlLEFwcGxpY2F0aW9uQ2FjaGVFcnJvckV2ZW50OnRydWUsQmFja2dy +b3VuZEZldGNoQ2xpY2tFdmVudDp0cnVlLEJhY2tncm91bmRGZXRjaEV2ZW50OnRydWUsQmFja2dyb3Vu +ZEZldGNoRmFpbEV2ZW50OnRydWUsQmFja2dyb3VuZEZldGNoZWRFdmVudDp0cnVlLEJlZm9yZUluc3Rh +bGxQcm9tcHRFdmVudDp0cnVlLEJlZm9yZVVubG9hZEV2ZW50OnRydWUsQmxvYkV2ZW50OnRydWUsQ2Fu +TWFrZVBheW1lbnRFdmVudDp0cnVlLENsaXBib2FyZEV2ZW50OnRydWUsQ2xvc2VFdmVudDp0cnVlLEN1 +c3RvbUV2ZW50OnRydWUsRGV2aWNlTW90aW9uRXZlbnQ6dHJ1ZSxEZXZpY2VPcmllbnRhdGlvbkV2ZW50 +OnRydWUsRXJyb3JFdmVudDp0cnVlLEV4dGVuZGFibGVFdmVudDp0cnVlLEV4dGVuZGFibGVNZXNzYWdl +RXZlbnQ6dHJ1ZSxGZXRjaEV2ZW50OnRydWUsRm9udEZhY2VTZXRMb2FkRXZlbnQ6dHJ1ZSxGb3JlaWdu +RmV0Y2hFdmVudDp0cnVlLEdhbWVwYWRFdmVudDp0cnVlLEhhc2hDaGFuZ2VFdmVudDp0cnVlLEluc3Rh +bGxFdmVudDp0cnVlLE1lZGlhRW5jcnlwdGVkRXZlbnQ6dHJ1ZSxNZWRpYUtleU1lc3NhZ2VFdmVudDp0 +cnVlLE1lZGlhUXVlcnlMaXN0RXZlbnQ6dHJ1ZSxNZWRpYVN0cmVhbUV2ZW50OnRydWUsTWVkaWFTdHJl +YW1UcmFja0V2ZW50OnRydWUsTWVzc2FnZUV2ZW50OnRydWUsTUlESUNvbm5lY3Rpb25FdmVudDp0cnVl +LE1JRElNZXNzYWdlRXZlbnQ6dHJ1ZSxNdXRhdGlvbkV2ZW50OnRydWUsTm90aWZpY2F0aW9uRXZlbnQ6 +dHJ1ZSxQYWdlVHJhbnNpdGlvbkV2ZW50OnRydWUsUGF5bWVudFJlcXVlc3RFdmVudDp0cnVlLFBheW1l +bnRSZXF1ZXN0VXBkYXRlRXZlbnQ6dHJ1ZSxQb3BTdGF0ZUV2ZW50OnRydWUsUHJlc2VudGF0aW9uQ29u +bmVjdGlvbkF2YWlsYWJsZUV2ZW50OnRydWUsUHJlc2VudGF0aW9uQ29ubmVjdGlvbkNsb3NlRXZlbnQ6 +dHJ1ZSxQcm9taXNlUmVqZWN0aW9uRXZlbnQ6dHJ1ZSxQdXNoRXZlbnQ6dHJ1ZSxSVENEYXRhQ2hhbm5l +bEV2ZW50OnRydWUsUlRDRFRNRlRvbmVDaGFuZ2VFdmVudDp0cnVlLFJUQ1BlZXJDb25uZWN0aW9uSWNl +RXZlbnQ6dHJ1ZSxSVENUcmFja0V2ZW50OnRydWUsU2VjdXJpdHlQb2xpY3lWaW9sYXRpb25FdmVudDp0 +cnVlLFNlbnNvckVycm9yRXZlbnQ6dHJ1ZSxTcGVlY2hSZWNvZ25pdGlvbkVycm9yOnRydWUsU3BlZWNo +UmVjb2duaXRpb25FdmVudDp0cnVlLFNwZWVjaFN5bnRoZXNpc0V2ZW50OnRydWUsU3RvcmFnZUV2ZW50 +OnRydWUsU3luY0V2ZW50OnRydWUsVHJhY2tFdmVudDp0cnVlLFRyYW5zaXRpb25FdmVudDp0cnVlLFdl +YktpdFRyYW5zaXRpb25FdmVudDp0cnVlLFZSRGV2aWNlRXZlbnQ6dHJ1ZSxWUkRpc3BsYXlFdmVudDp0 +cnVlLFZSU2Vzc2lvbkV2ZW50OnRydWUsTW9qb0ludGVyZmFjZVJlcXVlc3RFdmVudDp0cnVlLFVTQkNv +bm5lY3Rpb25FdmVudDp0cnVlLElEQlZlcnNpb25DaGFuZ2VFdmVudDp0cnVlLEF1ZGlvUHJvY2Vzc2lu +Z0V2ZW50OnRydWUsT2ZmbGluZUF1ZGlvQ29tcGxldGlvbkV2ZW50OnRydWUsV2ViR0xDb250ZXh0RXZl +bnQ6dHJ1ZSxFdmVudDpmYWxzZSxJbnB1dEV2ZW50OmZhbHNlLFN1Ym1pdEV2ZW50OmZhbHNlLEV2ZW50 +VGFyZ2V0OmZhbHNlLEZpbGU6dHJ1ZSxIVE1MRm9ybUVsZW1lbnQ6dHJ1ZSxIaXN0b3J5OnRydWUsSFRN +TERvY3VtZW50OnRydWUsWE1MSHR0cFJlcXVlc3Q6dHJ1ZSxYTUxIdHRwUmVxdWVzdEV2ZW50VGFyZ2V0 +OmZhbHNlLEltYWdlRGF0YTp0cnVlLExvY2F0aW9uOnRydWUsTW91c2VFdmVudDp0cnVlLERyYWdFdmVu +dDp0cnVlLFBvaW50ZXJFdmVudDp0cnVlLFdoZWVsRXZlbnQ6dHJ1ZSxEb2N1bWVudEZyYWdtZW50OnRy +dWUsU2hhZG93Um9vdDp0cnVlLERvY3VtZW50VHlwZTp0cnVlLE5vZGU6ZmFsc2UsTm9kZUxpc3Q6dHJ1 +ZSxSYWRpb05vZGVMaXN0OnRydWUsSFRNTFBhcmFncmFwaEVsZW1lbnQ6dHJ1ZSxQcm9ncmVzc0V2ZW50 +OnRydWUsUmVzb3VyY2VQcm9ncmVzc0V2ZW50OnRydWUsSFRNTFNlbGVjdEVsZW1lbnQ6dHJ1ZSxIVE1M +VGFibGVFbGVtZW50OnRydWUsSFRNTFRhYmxlUm93RWxlbWVudDp0cnVlLEhUTUxUYWJsZVNlY3Rpb25F +bGVtZW50OnRydWUsSFRNTFRlbXBsYXRlRWxlbWVudDp0cnVlLENvbXBvc2l0aW9uRXZlbnQ6dHJ1ZSxG +b2N1c0V2ZW50OnRydWUsS2V5Ym9hcmRFdmVudDp0cnVlLFRleHRFdmVudDp0cnVlLFRvdWNoRXZlbnQ6 +dHJ1ZSxVSUV2ZW50OmZhbHNlLFdpbmRvdzp0cnVlLERPTVdpbmRvdzp0cnVlLERlZGljYXRlZFdvcmtl +ckdsb2JhbFNjb3BlOnRydWUsU2VydmljZVdvcmtlckdsb2JhbFNjb3BlOnRydWUsU2hhcmVkV29ya2Vy +R2xvYmFsU2NvcGU6dHJ1ZSxXb3JrZXJHbG9iYWxTY29wZTp0cnVlLEF0dHI6dHJ1ZSxDbGllbnRSZWN0 +OnRydWUsRE9NUmVjdDp0cnVlLE5hbWVkTm9kZU1hcDp0cnVlLE1vek5hbWVkQXR0ck1hcDp0cnVlLElE +QktleVJhbmdlOnRydWUsU1ZHU2NyaXB0RWxlbWVudDp0cnVlLFNWR0FFbGVtZW50OnRydWUsU1ZHQW5p +bWF0ZUVsZW1lbnQ6dHJ1ZSxTVkdBbmltYXRlTW90aW9uRWxlbWVudDp0cnVlLFNWR0FuaW1hdGVUcmFu +c2Zvcm1FbGVtZW50OnRydWUsU1ZHQW5pbWF0aW9uRWxlbWVudDp0cnVlLFNWR0NpcmNsZUVsZW1lbnQ6 +dHJ1ZSxTVkdDbGlwUGF0aEVsZW1lbnQ6dHJ1ZSxTVkdEZWZzRWxlbWVudDp0cnVlLFNWR0Rlc2NFbGVt +ZW50OnRydWUsU1ZHRGlzY2FyZEVsZW1lbnQ6dHJ1ZSxTVkdFbGxpcHNlRWxlbWVudDp0cnVlLFNWR0ZF +QmxlbmRFbGVtZW50OnRydWUsU1ZHRkVDb2xvck1hdHJpeEVsZW1lbnQ6dHJ1ZSxTVkdGRUNvbXBvbmVu +dFRyYW5zZmVyRWxlbWVudDp0cnVlLFNWR0ZFQ29tcG9zaXRlRWxlbWVudDp0cnVlLFNWR0ZFQ29udm9s +dmVNYXRyaXhFbGVtZW50OnRydWUsU1ZHRkVEaWZmdXNlTGlnaHRpbmdFbGVtZW50OnRydWUsU1ZHRkVE +aXNwbGFjZW1lbnRNYXBFbGVtZW50OnRydWUsU1ZHRkVEaXN0YW50TGlnaHRFbGVtZW50OnRydWUsU1ZH +RkVGbG9vZEVsZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNBRWxlbWVudDp0cnVlLFNWR0ZFRnVuY0JFbGVtZW50 +OnRydWUsU1ZHRkVGdW5jR0VsZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNSRWxlbWVudDp0cnVlLFNWR0ZFR2F1 +c3NpYW5CbHVyRWxlbWVudDp0cnVlLFNWR0ZFSW1hZ2VFbGVtZW50OnRydWUsU1ZHRkVNZXJnZUVsZW1l +bnQ6dHJ1ZSxTVkdGRU1lcmdlTm9kZUVsZW1lbnQ6dHJ1ZSxTVkdGRU1vcnBob2xvZ3lFbGVtZW50OnRy +dWUsU1ZHRkVPZmZzZXRFbGVtZW50OnRydWUsU1ZHRkVQb2ludExpZ2h0RWxlbWVudDp0cnVlLFNWR0ZF +U3BlY3VsYXJMaWdodGluZ0VsZW1lbnQ6dHJ1ZSxTVkdGRVNwb3RMaWdodEVsZW1lbnQ6dHJ1ZSxTVkdG +RVRpbGVFbGVtZW50OnRydWUsU1ZHRkVUdXJidWxlbmNlRWxlbWVudDp0cnVlLFNWR0ZpbHRlckVsZW1l +bnQ6dHJ1ZSxTVkdGb3JlaWduT2JqZWN0RWxlbWVudDp0cnVlLFNWR0dFbGVtZW50OnRydWUsU1ZHR2Vv +bWV0cnlFbGVtZW50OnRydWUsU1ZHR3JhcGhpY3NFbGVtZW50OnRydWUsU1ZHSW1hZ2VFbGVtZW50OnRy +dWUsU1ZHTGluZUVsZW1lbnQ6dHJ1ZSxTVkdMaW5lYXJHcmFkaWVudEVsZW1lbnQ6dHJ1ZSxTVkdNYXJr +ZXJFbGVtZW50OnRydWUsU1ZHTWFza0VsZW1lbnQ6dHJ1ZSxTVkdNZXRhZGF0YUVsZW1lbnQ6dHJ1ZSxT +VkdQYXRoRWxlbWVudDp0cnVlLFNWR1BhdHRlcm5FbGVtZW50OnRydWUsU1ZHUG9seWdvbkVsZW1lbnQ6 +dHJ1ZSxTVkdQb2x5bGluZUVsZW1lbnQ6dHJ1ZSxTVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQ6dHJ1ZSxT +VkdSZWN0RWxlbWVudDp0cnVlLFNWR1NldEVsZW1lbnQ6dHJ1ZSxTVkdTdG9wRWxlbWVudDp0cnVlLFNW +R1N0eWxlRWxlbWVudDp0cnVlLFNWR1NWR0VsZW1lbnQ6dHJ1ZSxTVkdTd2l0Y2hFbGVtZW50OnRydWUs +U1ZHU3ltYm9sRWxlbWVudDp0cnVlLFNWR1RTcGFuRWxlbWVudDp0cnVlLFNWR1RleHRDb250ZW50RWxl +bWVudDp0cnVlLFNWR1RleHRFbGVtZW50OnRydWUsU1ZHVGV4dFBhdGhFbGVtZW50OnRydWUsU1ZHVGV4 +dFBvc2l0aW9uaW5nRWxlbWVudDp0cnVlLFNWR1RpdGxlRWxlbWVudDp0cnVlLFNWR1VzZUVsZW1lbnQ6 +dHJ1ZSxTVkdWaWV3RWxlbWVudDp0cnVlLFNWR0dyYWRpZW50RWxlbWVudDp0cnVlLFNWR0NvbXBvbmVu +dFRyYW5zZmVyRnVuY3Rpb25FbGVtZW50OnRydWUsU1ZHRkVEcm9wU2hhZG93RWxlbWVudDp0cnVlLFNW +R01QYXRoRWxlbWVudDp0cnVlLFNWR0VsZW1lbnQ6ZmFsc2V9KQpBLkxaLiRuYXRpdmVTdXBlcmNsYXNz +VGFnPSJBcnJheUJ1ZmZlclZpZXciCkEuUkcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVy +VmlldyIKQS5WUC4kbmF0aXZlU3VwZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJWaWV3IgpBLkRnLiRuYXRp +dmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZpZXciCkEuV0IuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9 +IkFycmF5QnVmZmVyVmlldyIKQS5aRy4kbmF0aXZlU3VwZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJWaWV3 +IgpBLlBnLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZpZXcifSkoKQpjb252ZXJ0QWxs +VG9GYXN0T2JqZWN0KHcpCmNvbnZlcnRUb0Zhc3RPYmplY3QoJCk7KGZ1bmN0aW9uKGEpe2lmKHR5cGVv +ZiBkb2N1bWVudD09PSJ1bmRlZmluZWQiKXthKG51bGwpCnJldHVybn1pZih0eXBlb2YgZG9jdW1lbnQu +Y3VycmVudFNjcmlwdCE9InVuZGVmaW5lZCIpe2EoZG9jdW1lbnQuY3VycmVudFNjcmlwdCkKcmV0dXJu +fXZhciBzPWRvY3VtZW50LnNjcmlwdHMKZnVuY3Rpb24gb25Mb2FkKGIpe2Zvcih2YXIgcT0wO3E8cy5s +ZW5ndGg7KytxKXNbcV0ucmVtb3ZlRXZlbnRMaXN0ZW5lcigibG9hZCIsb25Mb2FkLGZhbHNlKQphKGIu +dGFyZ2V0KX1mb3IodmFyIHI9MDtyPHMubGVuZ3RoOysrcilzW3JdLmFkZEV2ZW50TGlzdGVuZXIoImxv +YWQiLG9uTG9hZCxmYWxzZSl9KShmdW5jdGlvbihhKXt2LmN1cnJlbnRTY3JpcHQ9YQp2YXIgcz1BLklx +CmlmKHR5cGVvZiBkYXJ0TWFpblJ1bm5lcj09PSJmdW5jdGlvbiIpZGFydE1haW5SdW5uZXIocyxbXSkK +ZWxzZSBzKFtdKX0pfSkoKQovLyMgc291cmNlTWFwcGluZ1VSTD1taWdyYXRpb24uanMubWFwCg== '''; diff --git a/pkg/nnbd_migration/lib/src/front_end/web/navigation_tree.dart b/pkg/nnbd_migration/lib/src/front_end/web/navigation_tree.dart index 7bc708a8228..1c4059075bc 100644 --- a/pkg/nnbd_migration/lib/src/front_end/web/navigation_tree.dart +++ b/pkg/nnbd_migration/lib/src/front_end/web/navigation_tree.dart @@ -9,8 +9,8 @@ class NavigationTreeDirectoryNode extends NavigationTreeNode { /// Creates a navigation tree node representing a directory. NavigationTreeDirectoryNode( - {required String? name, required String? path, required this.subtree}) - : super._(name: name, path: path); + {required super.name, required super.path, required this.subtree}) + : super._(); /// Returns the status by examining [subtree]: /// @@ -121,14 +121,14 @@ class NavigationTreeFileNode extends NavigationTreeNode { /// Creates a navigation tree node representing a file. NavigationTreeFileNode( - {required String? name, - required String? path, + {required super.name, + required super.path, required this.href, required this.editCount, required this.wasExplicitlyOptedOut, required this.migrationStatus, required this.migrationStatusCanBeChanged}) - : super._(name: name, path: path); + : super._(); NavigationTreeNodeType get type => NavigationTreeNodeType.file; diff --git a/pkg/nnbd_migration/lib/src/nullability_node_target.dart b/pkg/nnbd_migration/lib/src/nullability_node_target.dart index a69b7c46c26..4566ca26085 100644 --- a/pkg/nnbd_migration/lib/src/nullability_node_target.dart +++ b/pkg/nnbd_migration/lib/src/nullability_node_target.dart @@ -123,8 +123,7 @@ class _NullabilityNodeTarget_NamedParameter extends _NullabilityNodeTarget_Part { final String name; - _NullabilityNodeTarget_NamedParameter(NullabilityNodeTarget inner, this.name) - : super(inner); + _NullabilityNodeTarget_NamedParameter(super.inner, this.name); @override String get description => 'parameter $name of ${inner.description}'; @@ -147,9 +146,7 @@ class _NullabilityNodeTarget_PositionalParameter extends _NullabilityNodeTarget_Part { final int index; - _NullabilityNodeTarget_PositionalParameter( - NullabilityNodeTarget inner, this.index) - : super(inner); + _NullabilityNodeTarget_PositionalParameter(super.inner, this.index); @override String get description => 'parameter $index of ${inner.description}'; @@ -157,7 +154,7 @@ class _NullabilityNodeTarget_PositionalParameter /// Nullability node target representing a function's return type. class _NullabilityNodeTarget_ReturnType extends _NullabilityNodeTarget_Part { - _NullabilityNodeTarget_ReturnType(NullabilityNodeTarget inner) : super(inner); + _NullabilityNodeTarget_ReturnType(super.inner); @override String get description => 'return type of ${inner.description}'; @@ -165,7 +162,7 @@ class _NullabilityNodeTarget_ReturnType extends _NullabilityNodeTarget_Part { /// Nullability node target representing one of a class's supertypes. class _NullabilityNodeTarget_Supertype extends _NullabilityNodeTarget_Part { - _NullabilityNodeTarget_Supertype(NullabilityNodeTarget inner) : super(inner); + _NullabilityNodeTarget_Supertype(super.inner); @override String get description => 'supertype of ${inner.description}'; @@ -186,8 +183,7 @@ class _NullabilityNodeTarget_Text extends NullabilityNodeTarget { class _NullabilityNodeTarget_TypeArgument extends _NullabilityNodeTarget_Part { final int index; - _NullabilityNodeTarget_TypeArgument(NullabilityNodeTarget inner, this.index) - : super(inner); + _NullabilityNodeTarget_TypeArgument(super.inner, this.index); @override String get description => 'type argument $index of ${inner.description}'; @@ -199,9 +195,7 @@ class _NullabilityNodeTarget_TypeFormalBound extends _NullabilityNodeTarget_Part { final String typeFormalName; - _NullabilityNodeTarget_TypeFormalBound( - NullabilityNodeTarget inner, this.typeFormalName) - : super(inner); + _NullabilityNodeTarget_TypeFormalBound(super.inner, this.typeFormalName); @override String get description => diff --git a/pkg/nnbd_migration/lib/src/preview/not_found_page.dart b/pkg/nnbd_migration/lib/src/preview/not_found_page.dart index 7eca477cd81..efc86434c49 100644 --- a/pkg/nnbd_migration/lib/src/preview/not_found_page.dart +++ b/pkg/nnbd_migration/lib/src/preview/not_found_page.dart @@ -3,14 +3,13 @@ // BSD-style license that can be found in the LICENSE file. import 'package:nnbd_migration/src/preview/preview_page.dart'; -import 'package:nnbd_migration/src/preview/preview_site.dart'; /// The page that is displayed when an invalid URL is requested. class NotFoundPage extends PreviewPage { /// Initialize a newly created file-not-found page within the given [site]. /// The [id] is the portion of the path to the page that follows the initial /// slash ('/'). - NotFoundPage(PreviewSite site, String id) : super(site, id); + NotFoundPage(super.site, String super.id); @override bool get requiresAuth => false; diff --git a/pkg/nnbd_migration/lib/src/preview/unauthorized_page.dart b/pkg/nnbd_migration/lib/src/preview/unauthorized_page.dart index 8fff1c5e99b..7b6beb12c90 100644 --- a/pkg/nnbd_migration/lib/src/preview/unauthorized_page.dart +++ b/pkg/nnbd_migration/lib/src/preview/unauthorized_page.dart @@ -3,14 +3,13 @@ // BSD-style license that can be found in the LICENSE file. import 'package:nnbd_migration/src/preview/preview_page.dart'; -import 'package:nnbd_migration/src/preview/preview_site.dart'; /// The page that is displayed when a request could not be authenticated. class UnauthorizedPage extends PreviewPage { /// Initialize a newly created unauthorized page within the given [site]. /// The [id] is the portion of the path to the page that follows the initial /// slash ('/'). - UnauthorizedPage(PreviewSite site, String id) : super(site, id); + UnauthorizedPage(super.site, String super.id); @override bool get requiresAuth => false; diff --git a/pkg/nnbd_migration/pubspec.yaml b/pkg/nnbd_migration/pubspec.yaml index 381567bacb4..0d5d6fa6c42 100644 --- a/pkg/nnbd_migration/pubspec.yaml +++ b/pkg/nnbd_migration/pubspec.yaml @@ -4,7 +4,7 @@ name: nnbd_migration publish_to: none environment: - sdk: '>=2.14.0 <3.0.0' + sdk: '>=2.17.0 <3.0.0' # Use 'any' constraints here; we get our versions from the DEPS file. dependencies: diff --git a/pkg/nnbd_migration/test/migration_cli_test.dart b/pkg/nnbd_migration/test/migration_cli_test.dart index 6384be9a7fe..10aa97432ba 100644 --- a/pkg/nnbd_migration/test/migration_cli_test.dart +++ b/pkg/nnbd_migration/test/migration_cli_test.dart @@ -46,9 +46,7 @@ const sdkRootPathPosix = '/sdk'; /// exceptions, so that we can test they are properly propagated to top level. class _ExceptionGeneratingInstrumentationListener extends InstrumentationListener { - _ExceptionGeneratingInstrumentationListener( - {MigrationSummary? migrationSummary}) - : super(migrationSummary: migrationSummary); + _ExceptionGeneratingInstrumentationListener({super.migrationSummary}); @override void externalDecoratedType(Element element, DecoratedTypeInfo decoratedType) { @@ -109,8 +107,7 @@ class _MigrationCli extends MigrationCli { class _MigrationCliRunner extends MigrationCliRunner { Future Function()? _runWhilePreviewServerActive; - _MigrationCliRunner(_MigrationCli cli, CommandLineOptions options) - : super(cli, options); + _MigrationCliRunner(_MigrationCli super.cli, super.options); _MigrationCli get cli => super.cli as _MigrationCli; diff --git a/pkg/nnbd_migration/test/migration_visitor_test_base.dart b/pkg/nnbd_migration/test/migration_visitor_test_base.dart index 87335b1e08d..5f2e7b4b13d 100644 --- a/pkg/nnbd_migration/test/migration_visitor_test_base.dart +++ b/pkg/nnbd_migration/test/migration_visitor_test_base.dart @@ -304,8 +304,7 @@ class InstrumentedVariables extends Variables { final _expressionChecks = {}; - InstrumentedVariables(NullabilityGraph graph, TypeProvider typeProvider) - : super(graph, typeProvider); + InstrumentedVariables(super.graph, super.typeProvider); /// Gets the [ExpressionChecks] associated with the given [expression]. ExpressionChecksOrigin? checkExpression(Expression expression) => diff --git a/pkg/nnbd_migration/tool/src/package.dart b/pkg/nnbd_migration/tool/src/package.dart index 5ef259c8376..389cb02dd50 100644 --- a/pkg/nnbd_migration/tool/src/package.dart +++ b/pkg/nnbd_migration/tool/src/package.dart @@ -173,7 +173,7 @@ class Playground { /// Abstraction for a package fetched via pub. class PubPackage extends Package { - PubPackage(String name, [String? version]) : super(name) { + PubPackage(super.name, [String? version]) { throw UnimplementedError(); }